From 227851aee37b7bcdea7f3a97b755c7b7683a30a8 Mon Sep 17 00:00:00 2001 From: User Date: Tue, 2 Sep 2025 17:34:15 +0300 Subject: [PATCH 1/9] Added couple modules for re-staking. Not working yet --- app/keepers/keepers.go | 13 +- cmd/symphonyd/cmd/stargate-query.go | 5 +- go.mod | 32 +- go.sum | 39 + utils/admins.go | 6 + utils/cache_ctx.go | 83 + utils/module_account.go | 77 + utils/safe_send_coins.go | 38 + utils/utils.go | 342 + x/icacallbacks/README.md | 70 + x/icacallbacks/client/cli/query.go | 33 + .../client/cli/query_callback_data.go | 74 + .../client/cli/query_callback_data_test.go | 157 + x/icacallbacks/client/cli/query_params.go | 35 + x/icacallbacks/ibc_module.go | 167 + x/icacallbacks/icacallbacks.go | 88 + x/icacallbacks/icacallbacks_test.go | 195 + x/icacallbacks/keeper/callback_data.go | 63 + x/icacallbacks/keeper/callback_data_test.go | 54 + x/icacallbacks/keeper/genesis.go | 27 + x/icacallbacks/keeper/genesis_test.go | 28 + x/icacallbacks/keeper/grpc_query.go | 7 + .../keeper/grpc_query_callback_data.go | 57 + .../keeper/grpc_query_callback_data_test.go | 114 + x/icacallbacks/keeper/grpc_query_params.go | 20 + .../keeper/grpc_query_params_test.go | 14 + x/icacallbacks/keeper/keeper.go | 95 + x/icacallbacks/keeper/keeper_test.go | 21 + x/icacallbacks/keeper/params.go | 17 + x/icacallbacks/keeper/params_test.go | 13 + x/icacallbacks/migrations/v2/convert.go | 138 + x/icacallbacks/migrations/v2/convert_test.go | 227 + x/icacallbacks/migrations/v2/migrations.go | 50 + x/icacallbacks/module.go | 158 + .../types/acknowledgement_response.go | 15 + x/icacallbacks/types/callback_data.pb.go | 564 + x/icacallbacks/types/callbacks.go | 16 + x/icacallbacks/types/codec.go | 8 + x/icacallbacks/types/errors.go | 18 + x/icacallbacks/types/events_ibc.go | 12 + x/icacallbacks/types/expected_keepers.go | 19 + x/icacallbacks/types/genesis.go | 41 + x/icacallbacks/types/genesis.pb.go | 439 + x/icacallbacks/types/genesis_test.go | 63 + x/icacallbacks/types/key_callback_data.go | 25 + x/icacallbacks/types/keys.go | 37 + x/icacallbacks/types/packet.pb.go | 502 + x/icacallbacks/types/params.go | 39 + x/icacallbacks/types/params.pb.go | 264 + x/icacallbacks/types/query.pb.go | 1389 ++ x/icacallbacks/types/query.pb.gw.go | 337 + x/icacallbacks/types/types.go | 1 + x/icaoracle/LICENSE | 334 + x/icaoracle/README.md | 172 + x/icaoracle/client/cli/query.go | 189 + x/icaoracle/client/cli/tx.go | 150 + x/icaoracle/docs/metric-status.png | Bin 0 -> 67175 bytes x/icaoracle/docs/pushing.png | Bin 0 -> 141878 bytes x/icaoracle/docs/setup.png | Bin 0 -> 723445 bytes x/icaoracle/ibc_middleware.go | 179 + x/icaoracle/keeper/abci.go | 10 + x/icaoracle/keeper/events.go | 47 + x/icaoracle/keeper/genesis.go | 31 + x/icaoracle/keeper/genesis_test.go | 28 + x/icaoracle/keeper/grpc_query.go | 60 + x/icaoracle/keeper/grpc_query_test.go | 114 + x/icaoracle/keeper/ibc.go | 96 + x/icaoracle/keeper/ibc_test.go | 218 + x/icaoracle/keeper/icacallbacks.go | 23 + .../keeper/icacallbacks_instantiate_oracle.go | 65 + .../icacallbacks_instantiate_oracle_test.go | 167 + .../keeper/icacallbacks_update_oracle.go | 55 + .../keeper/icacallbacks_update_oracle_test.go | 90 + x/icaoracle/keeper/icaoracle.go | 120 + x/icaoracle/keeper/icaoracle_test.go | 163 + x/icaoracle/keeper/keeper.go | 65 + x/icaoracle/keeper/keeper_test.go | 71 + x/icaoracle/keeper/metric.go | 109 + x/icaoracle/keeper/metric_test.go | 73 + x/icaoracle/keeper/msg_server.go | 269 + .../keeper/msg_server_add_oracle_test.go | 115 + .../msg_server_instantiate_oracle_test.go | 95 + .../keeper/msg_server_remove_oracle_test.go | 51 + .../msg_server_restore_oracle_ica_test.go | 148 + .../keeper/msg_server_toggle_oracle_test.go | 47 + x/icaoracle/keeper/oracle.go | 106 + x/icaoracle/keeper/oracle_test.go | 124 + x/icaoracle/module.go | 162 + x/icaoracle/types/callbacks.pb.go | 551 + x/icaoracle/types/codec.go | 29 + x/icaoracle/types/contract.go | 19 + x/icaoracle/types/contract.pb.go | 954 ++ x/icaoracle/types/errors.go | 23 + x/icaoracle/types/events.go | 15 + x/icaoracle/types/expected_keepers.go | 56 + x/icaoracle/types/genesis.go | 40 + x/icaoracle/types/genesis.pb.go | 570 + x/icaoracle/types/genesis_test.go | 76 + x/icaoracle/types/ica.go | 61 + x/icaoracle/types/ica_test.go | 143 + x/icaoracle/types/icaoracle.pb.go | 1319 ++ x/icaoracle/types/keys.go | 25 + x/icaoracle/types/message_add_oracle.go | 58 + x/icaoracle/types/message_add_oracle_test.go | 83 + .../types/message_instantiate_oracle.go | 68 + .../types/message_instantiate_oracle_test.go | 106 + x/icaoracle/types/message_remove_oracle.go | 36 + .../types/message_remove_oracle_test.go | 60 + ...ssage_restore_oracle_interchain_account.go | 47 + ..._restore_oracle_interchain_account_test.go | 64 + x/icaoracle/types/message_toggle_oracle.go | 36 + .../types/message_toggle_oracle_test.go | 60 + x/icaoracle/types/metric.go | 24 + x/icaoracle/types/metric_test.go | 44 + x/icaoracle/types/metrics.go | 5 + x/icaoracle/types/oracle.go | 28 + x/icaoracle/types/oracle_test.go | 87 + x/icaoracle/types/params.go | 32 + x/icaoracle/types/query.pb.go | 1780 +++ x/icaoracle/types/query.pb.gw.go | 420 + x/icaoracle/types/tx.pb.go | 2252 +++ x/icqoracle/client/cli/query.go | 139 + x/icqoracle/client/cli/tx.go | 121 + x/icqoracle/keeper/abci.go | 50 + x/icqoracle/keeper/abci_test.go | 220 + x/icqoracle/keeper/genesis.go | 25 + x/icqoracle/keeper/icq.go | 197 + x/icqoracle/keeper/icq_test.go | 641 + x/icqoracle/keeper/keeper.go | 48 + x/icqoracle/keeper/keeper_test.go | 58 + x/icqoracle/keeper/msg_server.go | 70 + x/icqoracle/keeper/msg_server_test.go | 71 + x/icqoracle/keeper/params.go | 22 + x/icqoracle/keeper/params_test.go | 16 + x/icqoracle/keeper/query.go | 122 + x/icqoracle/keeper/query_test.go | 532 + x/icqoracle/keeper/token_price.go | 252 + x/icqoracle/keeper/token_price_test.go | 235 + x/icqoracle/module.go | 162 + x/icqoracle/types/codec.go | 25 + x/icqoracle/types/errors.go | 13 + x/icqoracle/types/expected_keepers.go | 21 + x/icqoracle/types/genesis.go | 28 + x/icqoracle/types/genesis.pb.go | 387 + x/icqoracle/types/icqoracle.pb.go | 1034 ++ x/icqoracle/types/keys.go | 28 + x/icqoracle/types/msgs.go | 167 + x/icqoracle/types/osmosis.pb.go | 817 ++ x/icqoracle/types/params.go | 16 + x/icqoracle/types/query.pb.go | 2025 +++ x/icqoracle/types/query.pb.gw.go | 402 + x/icqoracle/types/tx.pb.go | 1656 +++ x/icqoracle/types/validate.go | 31 + x/interchainquery/LICENSE | 201 + x/interchainquery/README.md | 118 + x/interchainquery/client/cli/query.go | 69 + x/interchainquery/keeper/abci.go | 49 + x/interchainquery/keeper/events.go | 24 + x/interchainquery/keeper/genesis.go | 24 + x/interchainquery/keeper/grpc_query.go | 25 + x/interchainquery/keeper/keeper.go | 103 + x/interchainquery/keeper/keeper_test.go | 32 + x/interchainquery/keeper/msg_server.go | 214 + .../keeper/msg_submit_query_response_test.go | 224 + x/interchainquery/keeper/queries.go | 181 + x/interchainquery/keeper/queries_test.go | 342 + x/interchainquery/module.go | 197 + x/interchainquery/types/callbacks.go | 12 + x/interchainquery/types/codec.go | 21 + x/interchainquery/types/error.go | 14 + x/interchainquery/types/events.go | 16 + x/interchainquery/types/genesis.go | 18 + x/interchainquery/types/genesis.pb.go | 1446 ++ x/interchainquery/types/keys.go | 66 + x/interchainquery/types/msgs.go | 41 + x/interchainquery/types/query.go | 20 + x/interchainquery/types/query.pb.go | 543 + x/interchainquery/types/query.pb.gw.go | 153 + x/interchainquery/types/tx.pb.go | 764 + x/interchainquery/types/tx.pb.gw.go | 169 + x/records/README.md | 80 + x/records/client/cli/query.go | 39 + x/records/client/cli/query_deposit_record.go | 105 + .../client/cli/query_deposit_record_test.go | 88 + .../cli/query_epoch_unbonding_record.go | 78 + x/records/client/cli/query_lsm_deposits.go | 93 + x/records/client/cli/query_params.go | 35 + .../cli/query_user_redemption_record.go | 74 + .../cli/query_user_redemption_record_test.go | 157 + x/records/client/cli/tx.go | 30 + x/records/keeper/callback_lsm_transfer.go | 55 + .../keeper/callback_lsm_transfer_test.go | 100 + x/records/keeper/callback_native_transfer.go | 82 + .../keeper/callback_native_transfer_test.go | 143 + x/records/keeper/callbacks.go | 15 + x/records/keeper/deposit_record.go | 115 + x/records/keeper/epoch_unbonding_record.go | 160 + .../keeper/epoch_unbonding_record_test.go | 220 + x/records/keeper/genesis.go | 51 + x/records/keeper/genesis_test.go | 76 + x/records/keeper/grpc_query.go | 7 + x/records/keeper/grpc_query_deposit_record.go | 73 + .../keeper/grpc_query_deposit_record_test.go | 160 + .../grpc_query_epoch_unbonding_record.go | 56 + .../grpc_query_epoch_unbonding_record_test.go | 107 + x/records/keeper/grpc_query_lsm_deposits.go | 62 + .../keeper/grpc_query_lsm_deposits_test.go | 117 + x/records/keeper/grpc_query_params.go | 20 + x/records/keeper/grpc_query_params_test.go | 14 + .../grpc_query_user_redemption_record.go | 56 + ...c_query_user_redemption_record_for_user.go | 44 + .../grpc_query_user_redemption_record_test.go | 109 + x/records/keeper/ibc.go | 46 + x/records/keeper/keeper.go | 62 + x/records/keeper/keeper_test.go | 25 + x/records/keeper/lsm_token_deposit.go | 81 + x/records/keeper/lsm_token_deposit_test.go | 167 + x/records/keeper/params.go | 17 + x/records/keeper/params_test.go | 13 + x/records/keeper/transfer.go | 105 + x/records/keeper/transfer_test.go | 75 + x/records/keeper/user_redemption_record.go | 73 + .../keeper/user_redemption_record_test.go | 48 + x/records/migrations/v2/convert.go | 54 + x/records/migrations/v2/convert_test.go | 135 + x/records/migrations/v2/migrations.go | 113 + x/records/migrations/v2/types/genesis.pb.go | 2806 ++++ x/records/migrations/v2/types/params.go | 39 + x/records/module.go | 163 + x/records/module_ibc.go | 332 + x/records/types/callbacks.pb.go | 481 + x/records/types/codec.go | 7 + x/records/types/errors.go | 15 + x/records/types/events_ibc.go | 11 + x/records/types/expected_keepers.go | 20 + x/records/types/genesis.go | 79 + x/records/types/genesis.pb.go | 704 + x/records/types/genesis_test.go | 112 + x/records/types/keys.go | 49 + x/records/types/params.go | 32 + x/records/types/params.pb.go | 263 + x/records/types/query.pb.go | 5029 +++++++ x/records/types/query.pb.gw.go | 1197 ++ x/records/types/records.go | 24 + x/records/types/records.pb.go | 2682 ++++ x/records/types/records_test.go | 99 + x/records/types/types.go | 7 + x/stakeibc/README.md | 119 + x/stakeibc/client/cli/cli_test.go | 26 + x/stakeibc/client/cli/gov.go | 168 + x/stakeibc/client/cli/gov_test.go | 112 + x/stakeibc/client/cli/parser.go | 96 + x/stakeibc/client/cli/query.go | 319 + x/stakeibc/client/cli/tx.go | 838 ++ x/stakeibc/client/cli/tx_test.go | 288 + x/stakeibc/client/proposal_handler.go | 12 + x/stakeibc/handler.go | 107 + x/stakeibc/ibc_middleware.go | 161 + x/stakeibc/keeper/abci.go | 47 + x/stakeibc/keeper/claim.go | 131 + x/stakeibc/keeper/claim_test.go | 208 + x/stakeibc/keeper/community_pool.go | 311 + x/stakeibc/keeper/community_pool_test.go | 535 + x/stakeibc/keeper/consumer.go | 39 + x/stakeibc/keeper/consumer_test.go | 59 + x/stakeibc/keeper/delegation.go | 199 + x/stakeibc/keeper/delegation_test.go | 625 + x/stakeibc/keeper/epoch_tracker.go | 135 + x/stakeibc/keeper/epoch_tracker_test.go | 158 + x/stakeibc/keeper/events.go | 170 + x/stakeibc/keeper/genesis.go | 35 + x/stakeibc/keeper/genesis_test.go | 36 + x/stakeibc/keeper/get_denom_traces_test.go | 20 + x/stakeibc/keeper/gov.go | 34 + x/stakeibc/keeper/grpc_query.go | 256 + x/stakeibc/keeper/grpc_query_test.go | 493 + x/stakeibc/keeper/hooks.go | 182 + x/stakeibc/keeper/host_zone.go | 294 + x/stakeibc/keeper/host_zone_test.go | 623 + x/stakeibc/keeper/ibc.go | 251 + x/stakeibc/keeper/ibc_test.go | 372 + x/stakeibc/keeper/icacallbacks.go | 27 + x/stakeibc/keeper/icacallbacks_claim.go | 106 + x/stakeibc/keeper/icacallbacks_claim_test.go | 241 + x/stakeibc/keeper/icacallbacks_delegate.go | 105 + .../keeper/icacallbacks_delegate_test.go | 233 + x/stakeibc/keeper/icacallbacks_detokenize.go | 87 + .../keeper/icacallbacks_detokenize_test.go | 162 + x/stakeibc/keeper/icacallbacks_rebalance.go | 114 + .../keeper/icacallbacks_rebalance_test.go | 255 + x/stakeibc/keeper/icacallbacks_redemption.go | 100 + .../keeper/icacallbacks_redemption_test.go | 194 + x/stakeibc/keeper/icacallbacks_reinvest.go | 136 + .../keeper/icacallbacks_reinvest_test.go | 236 + x/stakeibc/keeper/icacallbacks_undelegate.go | 303 + .../keeper/icacallbacks_undelegate_test.go | 810 ++ x/stakeibc/keeper/icqcallbacks.go | 58 + .../icqcallbacks_callibrate_delegation.go | 85 + ...icqcallbacks_callibrate_delegation_test.go | 151 + ...icqcallbacks_community_pool_ica_balance.go | 87 + .../keeper/icqcallbacks_delegator_shares.go | 255 + .../icqcallbacks_delegator_shares_test.go | 454 + x/stakeibc/keeper/icqcallbacks_fee_balance.go | 93 + .../keeper/icqcallbacks_fee_balance_test.go | 220 + .../icqcallbacks_trade_converted_balance.go | 64 + ...qcallbacks_trade_converted_balance_test.go | 137 + .../icqcallbacks_validator_exchange_rate.go | 196 + ...qcallbacks_validator_exchange_rate_test.go | 527 + .../icqcallbacks_withdrawal_host_balance.go | 125 + ...qcallbacks_withdrawal_host_balance_test.go | 253 + .../icqcallbacks_withdrawal_reward_balance.go | 68 + ...allbacks_withdrawal_reward_balance_test.go | 168 + x/stakeibc/keeper/interchainaccounts.go | 313 + x/stakeibc/keeper/interchainaccounts_test.go | 86 + x/stakeibc/keeper/interchainqueries.go | 231 + x/stakeibc/keeper/interchainqueries_test.go | 177 + x/stakeibc/keeper/invariants.go | 66 + x/stakeibc/keeper/invariants_test.go | 108 + x/stakeibc/keeper/keeper.go | 167 + x/stakeibc/keeper/keeper_test.go | 142 + x/stakeibc/keeper/lsm.go | 507 + x/stakeibc/keeper/lsm_test.go | 712 + x/stakeibc/keeper/msg_server.go | 820 ++ x/stakeibc/keeper/msg_server_test.go | 2179 +++ x/stakeibc/keeper/params.go | 24 + x/stakeibc/keeper/params_test.go | 13 + x/stakeibc/keeper/rebalance.go | 267 + x/stakeibc/keeper/rebalance_test.go | 367 + x/stakeibc/keeper/records.go | 86 + x/stakeibc/keeper/records_test.go | 182 + x/stakeibc/keeper/redeem_stake.go | 143 + x/stakeibc/keeper/redeem_stake_test.go | 308 + x/stakeibc/keeper/redemption_rate.go | 162 + x/stakeibc/keeper/redemption_rate_test.go | 340 + x/stakeibc/keeper/redemption_sweep.go | 137 + x/stakeibc/keeper/redemption_sweep_test.go | 356 + x/stakeibc/keeper/registration.go | 234 + x/stakeibc/keeper/registration_test.go | 452 + x/stakeibc/keeper/reward_allocation.go | 91 + x/stakeibc/keeper/reward_allocation_test.go | 197 + x/stakeibc/keeper/reward_converter.go | 452 + x/stakeibc/keeper/reward_converter_test.go | 793 ++ x/stakeibc/keeper/trade_route.go | 65 + x/stakeibc/keeper/trade_route_test.go | 131 + x/stakeibc/keeper/transfer.go | 224 + x/stakeibc/keeper/transfer_test.go | 249 + x/stakeibc/keeper/unbonding.go | 495 + x/stakeibc/keeper/unbonding_test.go | 1407 ++ x/stakeibc/keeper/validator.go | 275 + x/stakeibc/keeper/validator_test.go | 20 + x/stakeibc/migrations/v2/convert.go | 65 + x/stakeibc/migrations/v2/convert_test.go | 147 + x/stakeibc/migrations/v2/migrations.go | 46 + .../migrations/v2/types/callbacks.pb.go | 2238 +++ .../migrations/v2/types/host_zone.pb.go | 1193 ++ .../migrations/v2/types/ica_account.pb.go | 392 + .../migrations/v2/types/validator.pb.go | 816 ++ x/stakeibc/migrations/v3/convert.go | 87 + x/stakeibc/migrations/v3/convert_test.go | 187 + x/stakeibc/migrations/v3/migrations.go | 46 + .../migrations/v3/types/host_zone.pb.go | 1349 ++ .../migrations/v3/types/ica_account.pb.go | 391 + x/stakeibc/migrations/v3/types/params.go | 6 + .../migrations/v3/types/validator.pb.go | 729 + x/stakeibc/module.go | 189 + x/stakeibc/types/address_unbonding.pb.go | 606 + x/stakeibc/types/callbacks.pb.go | 3750 +++++ x/stakeibc/types/codec.go | 67 + x/stakeibc/types/epoch_tracker.pb.go | 428 + x/stakeibc/types/errors.go | 73 + x/stakeibc/types/events.go | 61 + x/stakeibc/types/expected_keepers.go | 60 + x/stakeibc/types/genesis.go | 50 + x/stakeibc/types/genesis.pb.go | 569 + x/stakeibc/types/genesis_test.go | 49 + x/stakeibc/types/gov.go | 141 + x/stakeibc/types/gov.pb.go | 914 ++ x/stakeibc/types/hooks.go | 20 + x/stakeibc/types/host_zone.go | 66 + x/stakeibc/types/host_zone.pb.go | 2084 +++ x/stakeibc/types/host_zone_test.go | 119 + x/stakeibc/types/ica_account.go | 21 + x/stakeibc/types/ica_account.pb.go | 508 + x/stakeibc/types/ica_account_test.go | 81 + x/stakeibc/types/keys.go | 64 + x/stakeibc/types/lsm_msgs.go | 56 + x/stakeibc/types/lsm_tx.pb.go | 707 + x/stakeibc/types/message_add_validators.go | 64 + .../types/message_add_validators_test.go | 93 + .../types/message_calibrate_delegation.go | 56 + .../types/message_change_validator_weight.go | 59 + .../message_change_validator_weight_test.go | 99 + .../types/message_claim_undelegated_tokens.go | 51 + .../message_claim_undelegated_tokens_test.go | 69 + x/stakeibc/types/message_clear_balance.go | 63 + .../types/message_close_delegation_channel.go | 52 + .../message_close_delegation_channel_test.go | 71 + .../types/message_create_trade_route.go | 120 + .../types/message_create_trade_route_test.go | 150 + .../types/message_delete_trade_route.go | 40 + .../types/message_delete_trade_route_test.go | 78 + x/stakeibc/types/message_delete_validator.go | 48 + .../types/message_delete_validator_test.go | 43 + x/stakeibc/types/message_liquid_stake.go | 57 + x/stakeibc/types/message_liquid_stake_test.go | 78 + x/stakeibc/types/message_lsm_liquid_stake.go | 58 + .../types/message_lsm_liquid_stake_test.go | 85 + .../types/message_rebalance_validators.go | 56 + .../message_rebalance_validators_test.go | 85 + x/stakeibc/types/message_redeem_stake.go | 60 + x/stakeibc/types/message_redeem_stake_test.go | 69 + .../types/message_register_host_zone.go | 136 + .../message_restore_interchain_account.go | 58 + ...message_restore_interchain_account_test.go | 99 + x/stakeibc/types/message_resume_host_zone.go | 47 + .../message_set_community_pool_rebate.go | 68 + .../message_set_community_pool_rebate_test.go | 161 + .../types/message_toggle_trade_controller.go | 63 + .../message_toggle_trade_controller_test.go | 104 + x/stakeibc/types/message_update_delegation.go | 58 + .../types/message_update_host_zone_params.go | 36 + .../message_update_host_zone_params_test.go | 68 + ...age_update_inner_redemption_rate_bounds.go | 54 + .../types/message_update_trade_route.go | 47 + .../types/message_update_trade_route_test.go | 103 + x/stakeibc/types/packet.pb.go | 501 + x/stakeibc/types/params.go | 291 + x/stakeibc/types/params.pb.go | 859 ++ x/stakeibc/types/query.pb.go | 4500 ++++++ x/stakeibc/types/query.pb.gw.go | 994 ++ x/stakeibc/types/query_register_ica.go | 16 + x/stakeibc/types/trade_route.go | 23 + x/stakeibc/types/trade_route.pb.go | 1393 ++ x/stakeibc/types/tx.pb.go | 11651 ++++++++++++++++ x/stakeibc/types/validator.pb.go | 687 + 435 files changed, 120332 insertions(+), 17 deletions(-) create mode 100644 utils/admins.go create mode 100644 utils/cache_ctx.go create mode 100644 utils/module_account.go create mode 100644 utils/safe_send_coins.go create mode 100644 utils/utils.go create mode 100644 x/icacallbacks/README.md create mode 100644 x/icacallbacks/client/cli/query.go create mode 100644 x/icacallbacks/client/cli/query_callback_data.go create mode 100644 x/icacallbacks/client/cli/query_callback_data_test.go create mode 100644 x/icacallbacks/client/cli/query_params.go create mode 100644 x/icacallbacks/ibc_module.go create mode 100644 x/icacallbacks/icacallbacks.go create mode 100644 x/icacallbacks/icacallbacks_test.go create mode 100644 x/icacallbacks/keeper/callback_data.go create mode 100644 x/icacallbacks/keeper/callback_data_test.go create mode 100644 x/icacallbacks/keeper/genesis.go create mode 100644 x/icacallbacks/keeper/genesis_test.go create mode 100644 x/icacallbacks/keeper/grpc_query.go create mode 100644 x/icacallbacks/keeper/grpc_query_callback_data.go create mode 100644 x/icacallbacks/keeper/grpc_query_callback_data_test.go create mode 100644 x/icacallbacks/keeper/grpc_query_params.go create mode 100644 x/icacallbacks/keeper/grpc_query_params_test.go create mode 100644 x/icacallbacks/keeper/keeper.go create mode 100644 x/icacallbacks/keeper/keeper_test.go create mode 100644 x/icacallbacks/keeper/params.go create mode 100644 x/icacallbacks/keeper/params_test.go create mode 100644 x/icacallbacks/migrations/v2/convert.go create mode 100644 x/icacallbacks/migrations/v2/convert_test.go create mode 100644 x/icacallbacks/migrations/v2/migrations.go create mode 100644 x/icacallbacks/module.go create mode 100644 x/icacallbacks/types/acknowledgement_response.go create mode 100644 x/icacallbacks/types/callback_data.pb.go create mode 100644 x/icacallbacks/types/callbacks.go create mode 100644 x/icacallbacks/types/codec.go create mode 100644 x/icacallbacks/types/errors.go create mode 100644 x/icacallbacks/types/events_ibc.go create mode 100644 x/icacallbacks/types/expected_keepers.go create mode 100644 x/icacallbacks/types/genesis.go create mode 100644 x/icacallbacks/types/genesis.pb.go create mode 100644 x/icacallbacks/types/genesis_test.go create mode 100644 x/icacallbacks/types/key_callback_data.go create mode 100644 x/icacallbacks/types/keys.go create mode 100644 x/icacallbacks/types/packet.pb.go create mode 100644 x/icacallbacks/types/params.go create mode 100644 x/icacallbacks/types/params.pb.go create mode 100644 x/icacallbacks/types/query.pb.go create mode 100644 x/icacallbacks/types/query.pb.gw.go create mode 100644 x/icacallbacks/types/types.go create mode 100644 x/icaoracle/LICENSE create mode 100644 x/icaoracle/README.md create mode 100644 x/icaoracle/client/cli/query.go create mode 100644 x/icaoracle/client/cli/tx.go create mode 100644 x/icaoracle/docs/metric-status.png create mode 100644 x/icaoracle/docs/pushing.png create mode 100644 x/icaoracle/docs/setup.png create mode 100644 x/icaoracle/ibc_middleware.go create mode 100644 x/icaoracle/keeper/abci.go create mode 100644 x/icaoracle/keeper/events.go create mode 100644 x/icaoracle/keeper/genesis.go create mode 100644 x/icaoracle/keeper/genesis_test.go create mode 100644 x/icaoracle/keeper/grpc_query.go create mode 100644 x/icaoracle/keeper/grpc_query_test.go create mode 100644 x/icaoracle/keeper/ibc.go create mode 100644 x/icaoracle/keeper/ibc_test.go create mode 100644 x/icaoracle/keeper/icacallbacks.go create mode 100644 x/icaoracle/keeper/icacallbacks_instantiate_oracle.go create mode 100644 x/icaoracle/keeper/icacallbacks_instantiate_oracle_test.go create mode 100644 x/icaoracle/keeper/icacallbacks_update_oracle.go create mode 100644 x/icaoracle/keeper/icacallbacks_update_oracle_test.go create mode 100644 x/icaoracle/keeper/icaoracle.go create mode 100644 x/icaoracle/keeper/icaoracle_test.go create mode 100644 x/icaoracle/keeper/keeper.go create mode 100644 x/icaoracle/keeper/keeper_test.go create mode 100644 x/icaoracle/keeper/metric.go create mode 100644 x/icaoracle/keeper/metric_test.go create mode 100644 x/icaoracle/keeper/msg_server.go create mode 100644 x/icaoracle/keeper/msg_server_add_oracle_test.go create mode 100644 x/icaoracle/keeper/msg_server_instantiate_oracle_test.go create mode 100644 x/icaoracle/keeper/msg_server_remove_oracle_test.go create mode 100644 x/icaoracle/keeper/msg_server_restore_oracle_ica_test.go create mode 100644 x/icaoracle/keeper/msg_server_toggle_oracle_test.go create mode 100644 x/icaoracle/keeper/oracle.go create mode 100644 x/icaoracle/keeper/oracle_test.go create mode 100644 x/icaoracle/module.go create mode 100644 x/icaoracle/types/callbacks.pb.go create mode 100644 x/icaoracle/types/codec.go create mode 100644 x/icaoracle/types/contract.go create mode 100644 x/icaoracle/types/contract.pb.go create mode 100644 x/icaoracle/types/errors.go create mode 100644 x/icaoracle/types/events.go create mode 100644 x/icaoracle/types/expected_keepers.go create mode 100644 x/icaoracle/types/genesis.go create mode 100644 x/icaoracle/types/genesis.pb.go create mode 100644 x/icaoracle/types/genesis_test.go create mode 100644 x/icaoracle/types/ica.go create mode 100644 x/icaoracle/types/ica_test.go create mode 100644 x/icaoracle/types/icaoracle.pb.go create mode 100644 x/icaoracle/types/keys.go create mode 100644 x/icaoracle/types/message_add_oracle.go create mode 100644 x/icaoracle/types/message_add_oracle_test.go create mode 100644 x/icaoracle/types/message_instantiate_oracle.go create mode 100644 x/icaoracle/types/message_instantiate_oracle_test.go create mode 100644 x/icaoracle/types/message_remove_oracle.go create mode 100644 x/icaoracle/types/message_remove_oracle_test.go create mode 100644 x/icaoracle/types/message_restore_oracle_interchain_account.go create mode 100644 x/icaoracle/types/message_restore_oracle_interchain_account_test.go create mode 100644 x/icaoracle/types/message_toggle_oracle.go create mode 100644 x/icaoracle/types/message_toggle_oracle_test.go create mode 100644 x/icaoracle/types/metric.go create mode 100644 x/icaoracle/types/metric_test.go create mode 100644 x/icaoracle/types/metrics.go create mode 100644 x/icaoracle/types/oracle.go create mode 100644 x/icaoracle/types/oracle_test.go create mode 100644 x/icaoracle/types/params.go create mode 100644 x/icaoracle/types/query.pb.go create mode 100644 x/icaoracle/types/query.pb.gw.go create mode 100644 x/icaoracle/types/tx.pb.go create mode 100644 x/icqoracle/client/cli/query.go create mode 100644 x/icqoracle/client/cli/tx.go create mode 100644 x/icqoracle/keeper/abci.go create mode 100644 x/icqoracle/keeper/abci_test.go create mode 100644 x/icqoracle/keeper/genesis.go create mode 100644 x/icqoracle/keeper/icq.go create mode 100644 x/icqoracle/keeper/icq_test.go create mode 100644 x/icqoracle/keeper/keeper.go create mode 100644 x/icqoracle/keeper/keeper_test.go create mode 100644 x/icqoracle/keeper/msg_server.go create mode 100644 x/icqoracle/keeper/msg_server_test.go create mode 100644 x/icqoracle/keeper/params.go create mode 100644 x/icqoracle/keeper/params_test.go create mode 100644 x/icqoracle/keeper/query.go create mode 100644 x/icqoracle/keeper/query_test.go create mode 100644 x/icqoracle/keeper/token_price.go create mode 100644 x/icqoracle/keeper/token_price_test.go create mode 100644 x/icqoracle/module.go create mode 100644 x/icqoracle/types/codec.go create mode 100644 x/icqoracle/types/errors.go create mode 100644 x/icqoracle/types/expected_keepers.go create mode 100644 x/icqoracle/types/genesis.go create mode 100644 x/icqoracle/types/genesis.pb.go create mode 100644 x/icqoracle/types/icqoracle.pb.go create mode 100644 x/icqoracle/types/keys.go create mode 100644 x/icqoracle/types/msgs.go create mode 100644 x/icqoracle/types/osmosis.pb.go create mode 100644 x/icqoracle/types/params.go create mode 100644 x/icqoracle/types/query.pb.go create mode 100644 x/icqoracle/types/query.pb.gw.go create mode 100644 x/icqoracle/types/tx.pb.go create mode 100644 x/icqoracle/types/validate.go create mode 100644 x/interchainquery/LICENSE create mode 100644 x/interchainquery/README.md create mode 100644 x/interchainquery/client/cli/query.go create mode 100644 x/interchainquery/keeper/abci.go create mode 100644 x/interchainquery/keeper/events.go create mode 100644 x/interchainquery/keeper/genesis.go create mode 100644 x/interchainquery/keeper/grpc_query.go create mode 100644 x/interchainquery/keeper/keeper.go create mode 100644 x/interchainquery/keeper/keeper_test.go create mode 100644 x/interchainquery/keeper/msg_server.go create mode 100644 x/interchainquery/keeper/msg_submit_query_response_test.go create mode 100644 x/interchainquery/keeper/queries.go create mode 100644 x/interchainquery/keeper/queries_test.go create mode 100644 x/interchainquery/module.go create mode 100644 x/interchainquery/types/callbacks.go create mode 100644 x/interchainquery/types/codec.go create mode 100644 x/interchainquery/types/error.go create mode 100644 x/interchainquery/types/events.go create mode 100644 x/interchainquery/types/genesis.go create mode 100644 x/interchainquery/types/genesis.pb.go create mode 100644 x/interchainquery/types/keys.go create mode 100644 x/interchainquery/types/msgs.go create mode 100644 x/interchainquery/types/query.go create mode 100644 x/interchainquery/types/query.pb.go create mode 100644 x/interchainquery/types/query.pb.gw.go create mode 100644 x/interchainquery/types/tx.pb.go create mode 100644 x/interchainquery/types/tx.pb.gw.go create mode 100644 x/records/README.md create mode 100644 x/records/client/cli/query.go create mode 100644 x/records/client/cli/query_deposit_record.go create mode 100644 x/records/client/cli/query_deposit_record_test.go create mode 100644 x/records/client/cli/query_epoch_unbonding_record.go create mode 100644 x/records/client/cli/query_lsm_deposits.go create mode 100644 x/records/client/cli/query_params.go create mode 100644 x/records/client/cli/query_user_redemption_record.go create mode 100644 x/records/client/cli/query_user_redemption_record_test.go create mode 100644 x/records/client/cli/tx.go create mode 100644 x/records/keeper/callback_lsm_transfer.go create mode 100644 x/records/keeper/callback_lsm_transfer_test.go create mode 100644 x/records/keeper/callback_native_transfer.go create mode 100644 x/records/keeper/callback_native_transfer_test.go create mode 100644 x/records/keeper/callbacks.go create mode 100644 x/records/keeper/deposit_record.go create mode 100644 x/records/keeper/epoch_unbonding_record.go create mode 100644 x/records/keeper/epoch_unbonding_record_test.go create mode 100644 x/records/keeper/genesis.go create mode 100644 x/records/keeper/genesis_test.go create mode 100644 x/records/keeper/grpc_query.go create mode 100644 x/records/keeper/grpc_query_deposit_record.go create mode 100644 x/records/keeper/grpc_query_deposit_record_test.go create mode 100644 x/records/keeper/grpc_query_epoch_unbonding_record.go create mode 100644 x/records/keeper/grpc_query_epoch_unbonding_record_test.go create mode 100644 x/records/keeper/grpc_query_lsm_deposits.go create mode 100644 x/records/keeper/grpc_query_lsm_deposits_test.go create mode 100644 x/records/keeper/grpc_query_params.go create mode 100644 x/records/keeper/grpc_query_params_test.go create mode 100644 x/records/keeper/grpc_query_user_redemption_record.go create mode 100644 x/records/keeper/grpc_query_user_redemption_record_for_user.go create mode 100644 x/records/keeper/grpc_query_user_redemption_record_test.go create mode 100644 x/records/keeper/ibc.go create mode 100644 x/records/keeper/keeper.go create mode 100644 x/records/keeper/keeper_test.go create mode 100644 x/records/keeper/lsm_token_deposit.go create mode 100644 x/records/keeper/lsm_token_deposit_test.go create mode 100644 x/records/keeper/params.go create mode 100644 x/records/keeper/params_test.go create mode 100644 x/records/keeper/transfer.go create mode 100644 x/records/keeper/transfer_test.go create mode 100644 x/records/keeper/user_redemption_record.go create mode 100644 x/records/keeper/user_redemption_record_test.go create mode 100644 x/records/migrations/v2/convert.go create mode 100644 x/records/migrations/v2/convert_test.go create mode 100644 x/records/migrations/v2/migrations.go create mode 100644 x/records/migrations/v2/types/genesis.pb.go create mode 100644 x/records/migrations/v2/types/params.go create mode 100644 x/records/module.go create mode 100644 x/records/module_ibc.go create mode 100644 x/records/types/callbacks.pb.go create mode 100644 x/records/types/codec.go create mode 100644 x/records/types/errors.go create mode 100644 x/records/types/events_ibc.go create mode 100644 x/records/types/expected_keepers.go create mode 100644 x/records/types/genesis.go create mode 100644 x/records/types/genesis.pb.go create mode 100644 x/records/types/genesis_test.go create mode 100644 x/records/types/keys.go create mode 100644 x/records/types/params.go create mode 100644 x/records/types/params.pb.go create mode 100644 x/records/types/query.pb.go create mode 100644 x/records/types/query.pb.gw.go create mode 100644 x/records/types/records.go create mode 100644 x/records/types/records.pb.go create mode 100644 x/records/types/records_test.go create mode 100644 x/records/types/types.go create mode 100644 x/stakeibc/README.md create mode 100644 x/stakeibc/client/cli/cli_test.go create mode 100644 x/stakeibc/client/cli/gov.go create mode 100644 x/stakeibc/client/cli/gov_test.go create mode 100644 x/stakeibc/client/cli/parser.go create mode 100644 x/stakeibc/client/cli/query.go create mode 100644 x/stakeibc/client/cli/tx.go create mode 100644 x/stakeibc/client/cli/tx_test.go create mode 100644 x/stakeibc/client/proposal_handler.go create mode 100644 x/stakeibc/handler.go create mode 100644 x/stakeibc/ibc_middleware.go create mode 100644 x/stakeibc/keeper/abci.go create mode 100644 x/stakeibc/keeper/claim.go create mode 100644 x/stakeibc/keeper/claim_test.go create mode 100644 x/stakeibc/keeper/community_pool.go create mode 100644 x/stakeibc/keeper/community_pool_test.go create mode 100644 x/stakeibc/keeper/consumer.go create mode 100644 x/stakeibc/keeper/consumer_test.go create mode 100644 x/stakeibc/keeper/delegation.go create mode 100644 x/stakeibc/keeper/delegation_test.go create mode 100644 x/stakeibc/keeper/epoch_tracker.go create mode 100644 x/stakeibc/keeper/epoch_tracker_test.go create mode 100644 x/stakeibc/keeper/events.go create mode 100644 x/stakeibc/keeper/genesis.go create mode 100644 x/stakeibc/keeper/genesis_test.go create mode 100644 x/stakeibc/keeper/get_denom_traces_test.go create mode 100644 x/stakeibc/keeper/gov.go create mode 100644 x/stakeibc/keeper/grpc_query.go create mode 100644 x/stakeibc/keeper/grpc_query_test.go create mode 100644 x/stakeibc/keeper/hooks.go create mode 100644 x/stakeibc/keeper/host_zone.go create mode 100644 x/stakeibc/keeper/host_zone_test.go create mode 100644 x/stakeibc/keeper/ibc.go create mode 100644 x/stakeibc/keeper/ibc_test.go create mode 100644 x/stakeibc/keeper/icacallbacks.go create mode 100644 x/stakeibc/keeper/icacallbacks_claim.go create mode 100644 x/stakeibc/keeper/icacallbacks_claim_test.go create mode 100644 x/stakeibc/keeper/icacallbacks_delegate.go create mode 100644 x/stakeibc/keeper/icacallbacks_delegate_test.go create mode 100644 x/stakeibc/keeper/icacallbacks_detokenize.go create mode 100644 x/stakeibc/keeper/icacallbacks_detokenize_test.go create mode 100644 x/stakeibc/keeper/icacallbacks_rebalance.go create mode 100644 x/stakeibc/keeper/icacallbacks_rebalance_test.go create mode 100644 x/stakeibc/keeper/icacallbacks_redemption.go create mode 100644 x/stakeibc/keeper/icacallbacks_redemption_test.go create mode 100644 x/stakeibc/keeper/icacallbacks_reinvest.go create mode 100644 x/stakeibc/keeper/icacallbacks_reinvest_test.go create mode 100644 x/stakeibc/keeper/icacallbacks_undelegate.go create mode 100644 x/stakeibc/keeper/icacallbacks_undelegate_test.go create mode 100644 x/stakeibc/keeper/icqcallbacks.go create mode 100644 x/stakeibc/keeper/icqcallbacks_callibrate_delegation.go create mode 100644 x/stakeibc/keeper/icqcallbacks_callibrate_delegation_test.go create mode 100644 x/stakeibc/keeper/icqcallbacks_community_pool_ica_balance.go create mode 100644 x/stakeibc/keeper/icqcallbacks_delegator_shares.go create mode 100644 x/stakeibc/keeper/icqcallbacks_delegator_shares_test.go create mode 100644 x/stakeibc/keeper/icqcallbacks_fee_balance.go create mode 100644 x/stakeibc/keeper/icqcallbacks_fee_balance_test.go create mode 100644 x/stakeibc/keeper/icqcallbacks_trade_converted_balance.go create mode 100644 x/stakeibc/keeper/icqcallbacks_trade_converted_balance_test.go create mode 100644 x/stakeibc/keeper/icqcallbacks_validator_exchange_rate.go create mode 100644 x/stakeibc/keeper/icqcallbacks_validator_exchange_rate_test.go create mode 100644 x/stakeibc/keeper/icqcallbacks_withdrawal_host_balance.go create mode 100644 x/stakeibc/keeper/icqcallbacks_withdrawal_host_balance_test.go create mode 100644 x/stakeibc/keeper/icqcallbacks_withdrawal_reward_balance.go create mode 100644 x/stakeibc/keeper/icqcallbacks_withdrawal_reward_balance_test.go create mode 100644 x/stakeibc/keeper/interchainaccounts.go create mode 100644 x/stakeibc/keeper/interchainaccounts_test.go create mode 100644 x/stakeibc/keeper/interchainqueries.go create mode 100644 x/stakeibc/keeper/interchainqueries_test.go create mode 100644 x/stakeibc/keeper/invariants.go create mode 100644 x/stakeibc/keeper/invariants_test.go create mode 100644 x/stakeibc/keeper/keeper.go create mode 100644 x/stakeibc/keeper/keeper_test.go create mode 100644 x/stakeibc/keeper/lsm.go create mode 100644 x/stakeibc/keeper/lsm_test.go create mode 100644 x/stakeibc/keeper/msg_server.go create mode 100644 x/stakeibc/keeper/msg_server_test.go create mode 100644 x/stakeibc/keeper/params.go create mode 100644 x/stakeibc/keeper/params_test.go create mode 100644 x/stakeibc/keeper/rebalance.go create mode 100644 x/stakeibc/keeper/rebalance_test.go create mode 100644 x/stakeibc/keeper/records.go create mode 100644 x/stakeibc/keeper/records_test.go create mode 100644 x/stakeibc/keeper/redeem_stake.go create mode 100644 x/stakeibc/keeper/redeem_stake_test.go create mode 100644 x/stakeibc/keeper/redemption_rate.go create mode 100644 x/stakeibc/keeper/redemption_rate_test.go create mode 100644 x/stakeibc/keeper/redemption_sweep.go create mode 100644 x/stakeibc/keeper/redemption_sweep_test.go create mode 100644 x/stakeibc/keeper/registration.go create mode 100644 x/stakeibc/keeper/registration_test.go create mode 100644 x/stakeibc/keeper/reward_allocation.go create mode 100644 x/stakeibc/keeper/reward_allocation_test.go create mode 100644 x/stakeibc/keeper/reward_converter.go create mode 100644 x/stakeibc/keeper/reward_converter_test.go create mode 100644 x/stakeibc/keeper/trade_route.go create mode 100644 x/stakeibc/keeper/trade_route_test.go create mode 100644 x/stakeibc/keeper/transfer.go create mode 100644 x/stakeibc/keeper/transfer_test.go create mode 100644 x/stakeibc/keeper/unbonding.go create mode 100644 x/stakeibc/keeper/unbonding_test.go create mode 100644 x/stakeibc/keeper/validator.go create mode 100644 x/stakeibc/keeper/validator_test.go create mode 100644 x/stakeibc/migrations/v2/convert.go create mode 100644 x/stakeibc/migrations/v2/convert_test.go create mode 100644 x/stakeibc/migrations/v2/migrations.go create mode 100644 x/stakeibc/migrations/v2/types/callbacks.pb.go create mode 100644 x/stakeibc/migrations/v2/types/host_zone.pb.go create mode 100644 x/stakeibc/migrations/v2/types/ica_account.pb.go create mode 100644 x/stakeibc/migrations/v2/types/validator.pb.go create mode 100644 x/stakeibc/migrations/v3/convert.go create mode 100644 x/stakeibc/migrations/v3/convert_test.go create mode 100644 x/stakeibc/migrations/v3/migrations.go create mode 100644 x/stakeibc/migrations/v3/types/host_zone.pb.go create mode 100644 x/stakeibc/migrations/v3/types/ica_account.pb.go create mode 100644 x/stakeibc/migrations/v3/types/params.go create mode 100644 x/stakeibc/migrations/v3/types/validator.pb.go create mode 100644 x/stakeibc/module.go create mode 100644 x/stakeibc/types/address_unbonding.pb.go create mode 100644 x/stakeibc/types/callbacks.pb.go create mode 100644 x/stakeibc/types/codec.go create mode 100644 x/stakeibc/types/epoch_tracker.pb.go create mode 100644 x/stakeibc/types/errors.go create mode 100644 x/stakeibc/types/events.go create mode 100644 x/stakeibc/types/expected_keepers.go create mode 100644 x/stakeibc/types/genesis.go create mode 100644 x/stakeibc/types/genesis.pb.go create mode 100644 x/stakeibc/types/genesis_test.go create mode 100644 x/stakeibc/types/gov.go create mode 100644 x/stakeibc/types/gov.pb.go create mode 100644 x/stakeibc/types/hooks.go create mode 100644 x/stakeibc/types/host_zone.go create mode 100644 x/stakeibc/types/host_zone.pb.go create mode 100644 x/stakeibc/types/host_zone_test.go create mode 100644 x/stakeibc/types/ica_account.go create mode 100644 x/stakeibc/types/ica_account.pb.go create mode 100644 x/stakeibc/types/ica_account_test.go create mode 100644 x/stakeibc/types/keys.go create mode 100644 x/stakeibc/types/lsm_msgs.go create mode 100644 x/stakeibc/types/lsm_tx.pb.go create mode 100644 x/stakeibc/types/message_add_validators.go create mode 100644 x/stakeibc/types/message_add_validators_test.go create mode 100644 x/stakeibc/types/message_calibrate_delegation.go create mode 100644 x/stakeibc/types/message_change_validator_weight.go create mode 100644 x/stakeibc/types/message_change_validator_weight_test.go create mode 100644 x/stakeibc/types/message_claim_undelegated_tokens.go create mode 100644 x/stakeibc/types/message_claim_undelegated_tokens_test.go create mode 100644 x/stakeibc/types/message_clear_balance.go create mode 100644 x/stakeibc/types/message_close_delegation_channel.go create mode 100644 x/stakeibc/types/message_close_delegation_channel_test.go create mode 100644 x/stakeibc/types/message_create_trade_route.go create mode 100644 x/stakeibc/types/message_create_trade_route_test.go create mode 100644 x/stakeibc/types/message_delete_trade_route.go create mode 100644 x/stakeibc/types/message_delete_trade_route_test.go create mode 100644 x/stakeibc/types/message_delete_validator.go create mode 100644 x/stakeibc/types/message_delete_validator_test.go create mode 100644 x/stakeibc/types/message_liquid_stake.go create mode 100644 x/stakeibc/types/message_liquid_stake_test.go create mode 100644 x/stakeibc/types/message_lsm_liquid_stake.go create mode 100644 x/stakeibc/types/message_lsm_liquid_stake_test.go create mode 100644 x/stakeibc/types/message_rebalance_validators.go create mode 100644 x/stakeibc/types/message_rebalance_validators_test.go create mode 100644 x/stakeibc/types/message_redeem_stake.go create mode 100644 x/stakeibc/types/message_redeem_stake_test.go create mode 100644 x/stakeibc/types/message_register_host_zone.go create mode 100644 x/stakeibc/types/message_restore_interchain_account.go create mode 100644 x/stakeibc/types/message_restore_interchain_account_test.go create mode 100644 x/stakeibc/types/message_resume_host_zone.go create mode 100644 x/stakeibc/types/message_set_community_pool_rebate.go create mode 100644 x/stakeibc/types/message_set_community_pool_rebate_test.go create mode 100644 x/stakeibc/types/message_toggle_trade_controller.go create mode 100644 x/stakeibc/types/message_toggle_trade_controller_test.go create mode 100644 x/stakeibc/types/message_update_delegation.go create mode 100644 x/stakeibc/types/message_update_host_zone_params.go create mode 100644 x/stakeibc/types/message_update_host_zone_params_test.go create mode 100644 x/stakeibc/types/message_update_inner_redemption_rate_bounds.go create mode 100644 x/stakeibc/types/message_update_trade_route.go create mode 100644 x/stakeibc/types/message_update_trade_route_test.go create mode 100644 x/stakeibc/types/packet.pb.go create mode 100644 x/stakeibc/types/params.go create mode 100644 x/stakeibc/types/params.pb.go create mode 100644 x/stakeibc/types/query.pb.go create mode 100644 x/stakeibc/types/query.pb.gw.go create mode 100644 x/stakeibc/types/query_register_ica.go create mode 100644 x/stakeibc/types/trade_route.go create mode 100644 x/stakeibc/types/trade_route.pb.go create mode 100644 x/stakeibc/types/tx.pb.go create mode 100644 x/stakeibc/types/validator.pb.go diff --git a/app/keepers/keepers.go b/app/keepers/keepers.go index aa8b3bc26b1..df6789639da 100644 --- a/app/keepers/keepers.go +++ b/app/keepers/keepers.go @@ -43,6 +43,10 @@ import ( icacontrollerkeeper "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/keeper" icacontrollertypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/types" custombankkeeper "github.com/osmosis-labs/osmosis/v27/custom/bank/keeper" + icacallbackstypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + icaoracletypes "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" + interchainquerytypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + stakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" appparams "github.com/osmosis-labs/osmosis/v27/app/params" customwasmkeeper "github.com/osmosis-labs/osmosis/v27/custom/wasm/keeper" @@ -802,18 +806,17 @@ func (appKeepers *AppKeepers) WireICS20PreWasmKeeper( appKeepers.keys[packetforwardtypes.StoreKey], appKeepers.TransferKeeper, appKeepers.IBCKeeper.ChannelKeeper, - appKeepers.DistrKeeper, appKeepers.BankKeeper, // The ICS4Wrapper is replaced by the HooksICS4Wrapper instead of the channel so that sending can be overridden by the middleware appKeepers.HooksICS4Wrapper, authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) + packetForwardMiddleware := packetforward.NewIBCMiddleware( transfer.NewIBCModule(*appKeepers.TransferKeeper), appKeepers.PacketForwardKeeper, 0, packetforwardkeeper.DefaultForwardTransferPacketTimeoutTimestamp, - packetforwardkeeper.DefaultRefundTransferPacketTimeoutTimestamp, ) // RateLimiting IBC Middleware @@ -908,13 +911,17 @@ func (appKeepers *AppKeepers) initParamsKeeper(appCodec codec.BinaryCodec, legac paramsKeeper.Subspace(ibcratelimittypes.ModuleName) paramsKeeper.Subspace(concentratedliquiditytypes.ModuleName) paramsKeeper.Subspace(icqtypes.ModuleName) - paramsKeeper.Subspace(packetforwardtypes.ModuleName).WithKeyTable(packetforwardtypes.ParamKeyTable()) + paramsKeeper.Subspace(packetforwardtypes.ModuleName) paramsKeeper.Subspace(cosmwasmpooltypes.ModuleName) paramsKeeper.Subspace(ibchookstypes.ModuleName) paramsKeeper.Subspace(smartaccounttypes.ModuleName).WithKeyTable(smartaccounttypes.ParamKeyTable()) paramsKeeper.Subspace(txfeestypes.ModuleName) paramsKeeper.Subspace(auctiontypes.ModuleName) paramsKeeper.Subspace(stablestakingtypes.ModuleName) + paramsKeeper.Subspace(icaoracletypes.ModuleName) + paramsKeeper.Subspace(stakeibctypes.ModuleName) + paramsKeeper.Subspace(icacallbackstypes.ModuleName) + paramsKeeper.Subspace(interchainquerytypes.ModuleName) return paramsKeeper } diff --git a/cmd/symphonyd/cmd/stargate-query.go b/cmd/symphonyd/cmd/stargate-query.go index cd9b53aa7ea..a361ad5f88c 100644 --- a/cmd/symphonyd/cmd/stargate-query.go +++ b/cmd/symphonyd/cmd/stargate-query.go @@ -7,11 +7,10 @@ import ( "time" //nolint:staticcheck - "github.com/golang/protobuf/proto" + sdk "github.com/cosmos/cosmos-sdk/types" markettypes "github.com/osmosis-labs/osmosis/v27/x/market/types" "github.com/spf13/cobra" - - sdk "github.com/cosmos/cosmos-sdk/types" + "google.golang.org/protobuf/proto" "github.com/osmosis-labs/osmosis/osmomath" "github.com/osmosis-labs/osmosis/osmoutils" diff --git a/go.mod b/go.mod index 73b47d8338a..6c891f1114f 100644 --- a/go.mod +++ b/go.mod @@ -6,10 +6,10 @@ toolchain go1.24.1 require ( cosmossdk.io/api v0.7.6 - cosmossdk.io/client/v2 v2.0.0-beta.4 + cosmossdk.io/client/v2 v2.0.0-beta.7 cosmossdk.io/core v0.12.1-0.20240725072823-6a2d039e1212 cosmossdk.io/errors v1.0.1 - cosmossdk.io/log v1.4.1 + cosmossdk.io/log v1.5.0 cosmossdk.io/math v1.4.0 cosmossdk.io/store v1.1.1 cosmossdk.io/tools/confix v0.1.2 @@ -18,20 +18,21 @@ require ( cosmossdk.io/x/upgrade v0.1.4 github.com/CosmWasm/wasmd v0.53.0 github.com/CosmWasm/wasmvm/v2 v2.1.4 - github.com/cometbft/cometbft v0.38.12 + github.com/cometbft/cometbft v0.38.15 github.com/cometbft/cometbft-db v0.14.1 - github.com/cosmos/cosmos-db v1.1.0 + github.com/cosmos/cosmos-db v1.1.1 github.com/cosmos/cosmos-proto v1.0.0-beta.5 - github.com/cosmos/cosmos-sdk v0.50.9 + github.com/cosmos/cosmos-sdk v0.50.13 github.com/cosmos/go-bip39 v1.0.0 github.com/cosmos/gogoproto v1.7.0 github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.2.0 - github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8 v8.0.2 + github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8 v8.2.0 github.com/cosmos/ibc-apps/modules/async-icq/v8 v8.0.0 github.com/cosmos/ibc-go/modules/capability v1.0.1 github.com/cosmos/ibc-go/modules/light-clients/08-wasm v0.4.2-0.20240730185033-ccd4dc278e72 - github.com/cosmos/ibc-go/v8 v8.4.0 + github.com/cosmos/ibc-go/v8 v8.7.0 github.com/cosmos/rosetta v0.50.9 + github.com/gogo/protobuf v1.3.2 github.com/golang/mock v1.6.0 github.com/golang/protobuf v1.5.4 github.com/golangci/golangci-lint v1.59.1 @@ -54,7 +55,7 @@ require ( github.com/spf13/viper v1.20.1 github.com/stretchr/testify v1.10.0 github.com/tidwall/btree v1.7.0 - github.com/tidwall/gjson v1.17.3 + github.com/tidwall/gjson v1.18.0 go.opentelemetry.io/otel v1.37.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.37.0 go.opentelemetry.io/otel/sdk v1.37.0 @@ -118,9 +119,11 @@ require ( github.com/bombsimon/wsl/v4 v4.2.1 // indirect github.com/breml/bidichk v0.2.7 // indirect github.com/breml/errchkjson v0.3.6 // indirect - github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect + github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect github.com/butuzov/ireturn v0.3.0 // indirect github.com/butuzov/mirror v1.2.0 // indirect + github.com/bytedance/sonic v1.12.3 // indirect + github.com/bytedance/sonic/loader v0.2.0 // indirect github.com/catenacyber/perfsprint v0.7.1 // indirect github.com/ccojocar/zxcvbn-go v1.0.2 // indirect github.com/cenkalti/backoff/v5 v5.0.2 // indirect @@ -128,6 +131,8 @@ require ( github.com/chavacava/garif v0.1.0 // indirect github.com/chzyer/readline v1.5.1 // indirect github.com/ckaznocha/intrange v0.1.2 // indirect + github.com/cloudwego/base64x v0.1.4 // indirect + github.com/cloudwego/iasm v0.2.0 // indirect github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443 // indirect github.com/cockroachdb/apd/v2 v2.0.2 // indirect github.com/cockroachdb/errors v1.11.3 // indirect @@ -139,8 +144,11 @@ require ( github.com/coinbase/rosetta-sdk-go/types v1.0.0 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect github.com/cosmos/iavl v1.2.2 // indirect + github.com/cosmos/ibc-apps/modules/ibc-hooks/v8 v8.0.0 // indirect + github.com/cosmos/ibc-apps/modules/rate-limiting/v8 v8.1.0 // indirect github.com/cosmos/ibc-go/v7 v7.7.0 // indirect github.com/cosmos/ics23/go v0.11.0 // indirect + github.com/cosmos/interchain-security/v6 v6.4.1 // indirect github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect github.com/creachadair/atomicfile v0.3.1 // indirect github.com/creachadair/tomledit v0.0.24 // indirect @@ -215,6 +223,7 @@ require ( github.com/karamaru-alpha/copyloopvar v1.1.0 // indirect github.com/kisielk/errcheck v1.7.0 // indirect github.com/kkHAIKE/contextcheck v1.1.5 // indirect + github.com/klauspost/cpuid/v2 v2.0.9 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/kulti/thelper v0.6.3 // indirect @@ -281,6 +290,7 @@ require ( github.com/timonwong/loggercheck v0.9.4 // indirect github.com/tomarrell/wrapcheck/v2 v2.8.3 // indirect github.com/tommy-muehle/go-mnd/v2 v2.5.1 // indirect + github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ulikunitz/xz v0.5.11 // indirect github.com/ultraware/funlen v0.1.0 // indirect github.com/ultraware/whitespace v0.1.1 // indirect @@ -307,6 +317,7 @@ require ( go.opentelemetry.io/proto/otlp v1.7.0 // indirect go.uber.org/automaxprocs v1.5.3 // indirect go.uber.org/zap v1.27.0 // indirect + golang.org/x/arch v0.0.0-20210923205945-b76863e36670 // indirect golang.org/x/exp/typeparams v0.0.0-20240314144324-c7f7c6466f7f // indirect golang.org/x/oauth2 v0.30.0 // indirect golang.org/x/time v0.12.0 // indirect @@ -333,7 +344,7 @@ require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/containerd/continuity v0.4.3 // indirect github.com/cosmos/btcutil v1.0.5 - github.com/cosmos/ledger-cosmos-go v0.13.3 // indirect + github.com/cosmos/ledger-cosmos-go v0.14.0 // indirect github.com/danieljoos/wincred v1.2.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect @@ -350,7 +361,6 @@ require ( github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect - github.com/gogo/protobuf v1.3.2 github.com/golang/glog v1.2.5 // indirect github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect github.com/golang/snappy v0.0.4 // indirect diff --git a/go.sum b/go.sum index 3566ba92cba..c00ac9e1439 100644 --- a/go.sum +++ b/go.sum @@ -214,6 +214,8 @@ cosmossdk.io/api v0.7.6 h1:PC20PcXy1xYKH2KU4RMurVoFjjKkCgYRbVAD4PdqUuY= cosmossdk.io/api v0.7.6/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= cosmossdk.io/client/v2 v2.0.0-beta.4 h1:LGIzWbVTOof/IHQZeoWwxPX0fq607ONXhsfA7eUrQIg= cosmossdk.io/client/v2 v2.0.0-beta.4/go.mod h1:c753d0sBv3AQRx6X+BOKL1aGpKjZMTZAHGiLPbVi5TE= +cosmossdk.io/client/v2 v2.0.0-beta.7 h1:O0PfZL5kC3Sp54wZASLNihQ612Gd6duMp11aM9wawNg= +cosmossdk.io/client/v2 v2.0.0-beta.7/go.mod h1:TzwwrzeK+AfSVSESVEIOYO/9xuCh1fPv0HgeocmfVnM= cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0= cosmossdk.io/core v0.11.0 h1:vtIafqUi+1ZNAE/oxLOQQ7Oek2n4S48SWLG8h/+wdbo= @@ -226,6 +228,8 @@ cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= cosmossdk.io/log v1.4.1 h1:wKdjfDRbDyZRuWa8M+9nuvpVYxrEOwbD/CA8hvhU8QM= cosmossdk.io/log v1.4.1/go.mod h1:k08v0Pyq+gCP6phvdI6RCGhLf/r425UT6Rk/m+o74rU= +cosmossdk.io/log v1.5.0 h1:dVdzPJW9kMrnAYyMf1duqacoidB9uZIl+7c6z0mnq0g= +cosmossdk.io/log v1.5.0/go.mod h1:Tr46PUJjiUthlwQ+hxYtUtPn4D/oCZXAkYevBeh5+FI= cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= cosmossdk.io/math v1.4.0 h1:XbgExXFnXmF/CccPPEto40gOO7FpWu9yWNAZPN3nkNQ= @@ -377,6 +381,7 @@ github.com/breml/errchkjson v0.3.6 h1:VLhVkqSBH96AvXEyclMR37rZslRrY2kcyq+31HCsVr github.com/breml/errchkjson v0.3.6/go.mod h1:jhSDoFheAF2RSDOlCfhHO9KqhZgAYLyvHe7bRCX8f/U= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= +github.com/btcsuite/btcd/btcec/v2 v2.3.4/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.5 h1:+wER79R5670vs/ZusMTF1yTcRYE5GUsFbdjdisflzM8= github.com/btcsuite/btcd/btcutil v1.1.5/go.mod h1:PSZZ4UitpLBWzxGd5VGOrLnmOjtPP/a6HaFo12zMs00= github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 h1:59Kx4K6lzOW5w6nFlA0v5+lk/6sjybR934QNHSJZPTQ= @@ -387,6 +392,11 @@ github.com/butuzov/ireturn v0.3.0 h1:hTjMqWw3y5JC3kpnC5vXmFJAWI/m31jaCYQqzkS6PL0 github.com/butuzov/ireturn v0.3.0/go.mod h1:A09nIiwiqzN/IoVo9ogpa0Hzi9fex1kd9PSD6edP5ZA= github.com/butuzov/mirror v1.2.0 h1:9YVK1qIjNspaqWutSv8gsge2e/Xpq1eqEkslEUHy5cs= github.com/butuzov/mirror v1.2.0/go.mod h1:DqZZDtzm42wIAIyHXeN8W/qb1EPlb9Qn/if9icBOpdQ= +github.com/bytedance/sonic v1.12.3 h1:W2MGa7RCU1QTeYRTPE3+88mVC0yXmsRQRChiyVocVjU= +github.com/bytedance/sonic v1.12.3/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= +github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/bytedance/sonic/loader v0.2.0 h1:zNprn+lsIP06C/IqCHs3gPQIvnvpKbbxyXQP1iU4kWM= +github.com/bytedance/sonic/loader v0.2.0/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/catenacyber/perfsprint v0.7.1 h1:PGW5G/Kxn+YrN04cRAZKC+ZuvlVwolYMrIyyTJ/rMmc= github.com/catenacyber/perfsprint v0.7.1/go.mod h1:/wclWYompEyjUD2FuIIDVKNkqz7IgBIWXIH3V0Zol50= @@ -424,6 +434,10 @@ github.com/ckaznocha/intrange v0.1.2 h1:3Y4JAxcMntgb/wABQ6e8Q8leMd26JbX2790lIss9 github.com/ckaznocha/intrange v0.1.2/go.mod h1:RWffCw/vKBwHeOEwWdCikAtY0q4gGt8VhJZEEA5n+RE= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudwego/base64x v0.1.4 h1:jwCgWpFanWmN8xoIUHa2rtzmkd5J2plF/dnLS6Xd/0Y= +github.com/cloudwego/base64x v0.1.4/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= +github.com/cloudwego/iasm v0.2.0 h1:1KNIy1I1H9hNNFEEH3DVnI4UujN+1zjpuk6gwHLTssg= +github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -475,6 +489,8 @@ github.com/cosmos/cosmos-db v1.0.2 h1:hwMjozuY1OlJs/uh6vddqnk9j7VamLv+0DBlbEXbAK github.com/cosmos/cosmos-db v1.0.2/go.mod h1:Z8IXcFJ9PqKK6BIsVOB3QXtkKoqUOp1vRvPT39kOXEA= github.com/cosmos/cosmos-db v1.1.0 h1:KLHNVQ73h7vawXTpj9UJ7ZR2IXv51tsEHkQJJ9EBDzI= github.com/cosmos/cosmos-db v1.1.0/go.mod h1:t7c4A6cfGdpUwwVxrQ0gQLeRQqGUBJu0yvE4F/26REg= +github.com/cosmos/cosmos-db v1.1.1 h1:FezFSU37AlBC8S98NlSagL76oqBRWq/prTPvFcEJNCM= +github.com/cosmos/cosmos-db v1.1.1/go.mod h1:AghjcIPqdhSLP/2Z0yha5xPH3nLnskz81pBx3tcVSAw= github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= @@ -492,8 +508,14 @@ github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.2.0 h1:Ni3 github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7 v7.2.0/go.mod h1:RADnD+dmpGrF4akMrp4YnRs9LdqoPnSuYDyjFBMJ5Q4= github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8 v8.0.2 h1:dyLNlDElY6+5zW/BT/dO/3Ad9FpQblfh+9dQpYQodbA= github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8 v8.0.2/go.mod h1:82hPO/tRawbuFad2gPwChvpZ0JEIoNi91LwVneAYCeM= +github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8 v8.2.0 h1:rM+S14DFiqmu6Rc3PuhvWqwywPsnt/CbIslSnBftPFs= +github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8 v8.2.0/go.mod h1:O5H9Ic3Pe6cmJn1eqlj5N48sLb8WQ1VWmDP4/11g/4E= github.com/cosmos/ibc-apps/modules/async-icq/v8 v8.0.0 h1:nKP2+Rzlz2iyvTosY5mvP+aEBPe06oaDl3G7xLGBpNI= github.com/cosmos/ibc-apps/modules/async-icq/v8 v8.0.0/go.mod h1:D3Q380FpWRFtmUQWLosPxachi6w24Og2t5u/Tww5wtY= +github.com/cosmos/ibc-apps/modules/ibc-hooks/v8 v8.0.0 h1:RBUq0cC9HJ9iIhifdWbV+kjDExzfhmAB7ktOAU1RWPU= +github.com/cosmos/ibc-apps/modules/ibc-hooks/v8 v8.0.0/go.mod h1:6szYOdzw0cUzFj8ZW+qfss0b4mMN1/HWxPATKZKbCfI= +github.com/cosmos/ibc-apps/modules/rate-limiting/v8 v8.1.0 h1:HhrupgqdiLG3L8Uyu8Ibgfv1GLjMpAjfkH8PZ4bmjZk= +github.com/cosmos/ibc-apps/modules/rate-limiting/v8 v8.1.0/go.mod h1:iHB/bxW0wlYeNB45ki6sEFvCjatmGLwMXumqtB1y3bQ= github.com/cosmos/ibc-go/modules/apps/callbacks v0.2.1-0.20231113120333-342c00b0f8bd h1:Lx+/5dZ/nN6qPXP2Ofog6u1fmlkCFA1ElcOconnofEM= github.com/cosmos/ibc-go/modules/apps/callbacks v0.2.1-0.20231113120333-342c00b0f8bd/go.mod h1:JWfpWVKJKiKtd53/KbRoKfxWl8FsT2GPcNezTOk0o5Q= github.com/cosmos/ibc-go/modules/capability v1.0.1 h1:ibwhrpJ3SftEEZRxCRkH0fQZ9svjthrX2+oXdZvzgGI= @@ -504,14 +526,22 @@ github.com/cosmos/ibc-go/v7 v7.7.0 h1:/ndLv4GiAkOaHQKpcoQyoGIZpGpT4d+9kjl5n3DsaV github.com/cosmos/ibc-go/v7 v7.7.0/go.mod h1:zzFhtp9g9RrN/UxXWrdUu5VyonBALCAHujXQCzrZSu8= github.com/cosmos/ibc-go/v8 v8.4.0 h1:K2PfX0AZ+1XKZytHGEMuSjQXG/MZshPb83RSTQt2+cE= github.com/cosmos/ibc-go/v8 v8.4.0/go.mod h1:zh6x1osR0hNvEcFrC/lhGD08sMfQmr9wHVvZ/mRWMCs= +github.com/cosmos/ibc-go/v8 v8.5.2 h1:27s9oeD2AxLQF3e9BQsYt9doONyZ7FwZi/qkBv6Sdks= +github.com/cosmos/ibc-go/v8 v8.5.2/go.mod h1:P5hkAvq0Qbg0h18uLxDVA9q1kOJ0l36htMsskiNwXbo= github.com/cosmos/ibc-go/v8 v8.6.1 h1:35JQ9HttSDNLjy4J/ZxmmFbzw0cRVjoCRKkc3ngDZms= github.com/cosmos/ibc-go/v8 v8.6.1/go.mod h1:Hd3kDFNOhQ/EnYt8qb84/r78tA/lOYC3IkLMbpurs3I= +github.com/cosmos/ibc-go/v8 v8.7.0 h1:HqhVOkO8bDpClXE81DFQgFjroQcTvtpm0tCS7SQVKVY= +github.com/cosmos/ibc-go/v8 v8.7.0/go.mod h1:G2z+Q6ZQSMcyHI2+BVcJdvfOupb09M2h/tgpXOEdY6k= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= github.com/cosmos/ics23/go v0.11.0 h1:jk5skjT0TqX5e5QJbEnwXIS2yI2vnmLOgpQPeM5RtnU= github.com/cosmos/ics23/go v0.11.0/go.mod h1:A8OjxPE67hHST4Icw94hOxxFEJMBG031xIGF/JHNIY0= +github.com/cosmos/interchain-security/v6 v6.4.1 h1:DzBDjPQIYUJiF0ioNHkvmcS629htvCu9r5gFb+m7mms= +github.com/cosmos/interchain-security/v6 v6.4.1/go.mod h1:yTbAxgcNKQ+/x2obvnHtxnOjQ5AcML4gb9V0P0e1rds= github.com/cosmos/ledger-cosmos-go v0.13.3 h1:7ehuBGuyIytsXbd4MP43mLeoN2LTOEnk5nvue4rK+yM= github.com/cosmos/ledger-cosmos-go v0.13.3/go.mod h1:HENcEP+VtahZFw38HZ3+LS3Iv5XV6svsnkk9vdJtLr8= +github.com/cosmos/ledger-cosmos-go v0.14.0 h1:WfCHricT3rPbkPSVKRH+L4fQGKYHuGOK9Edpel8TYpE= +github.com/cosmos/ledger-cosmos-go v0.14.0/go.mod h1:E07xCWSBl3mTGofZ2QnL4cIUzMbbGVyik84QYKbX3RA= github.com/cosmos/rosetta v0.50.9 h1:mV09lIDlEnbe8D1yuldY5GBjqk0ggkAbjbRQOrpoOIs= github.com/cosmos/rosetta v0.50.9/go.mod h1:EYloh7qKmHpqiOB133k2WS6jqZsf3RIPLrVpFz48ZZU= github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= @@ -1038,6 +1068,9 @@ github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2 github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= +github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -1473,6 +1506,7 @@ github.com/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tidwall/gjson v1.17.3 h1:bwWLZU7icoKRG+C+0PNwIKC6FCJO/Q3p2pZvuP0jN94= github.com/tidwall/gjson v1.17.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= @@ -1488,6 +1522,8 @@ github.com/tomarrell/wrapcheck/v2 v2.8.3/go.mod h1:g9vNIyhb5/9TQgumxQyOEqDHsmGYc github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw= github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= +github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= @@ -1638,6 +1674,8 @@ go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670 h1:18EFjUmQOcUvxNYSkA6jO9VAiXCnxFY6NyDX0bHDmkU= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -2375,6 +2413,7 @@ mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f/go.mod h1:RSLa7mKKCNeTTMHBw5 nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= nhooyr.io/websocket v1.8.10 h1:mv4p+MnGrLDcPlBoWsvPP7XCzTYMXP9F9eIGoKbgx7Q= nhooyr.io/websocket v1.8.10/go.mod h1:rN9OFWIUwuxg4fR5tELlYC04bXYowCP9GX47ivo2l+c= +nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= diff --git a/utils/admins.go b/utils/admins.go new file mode 100644 index 00000000000..fa119ff0743 --- /dev/null +++ b/utils/admins.go @@ -0,0 +1,6 @@ +package utils + +var Admins = map[string]bool{ + "stride1k8c2m5cn322akk5wy8lpt87dd2f4yh9azg7jlh": true, // F5 // TODO: replace with symphony wallet + "stride10d07y265gmmuvt4z0w9aw880jnsr700jefnezl": true, // gov module // TODO: replace with symphony address +} diff --git a/utils/cache_ctx.go b/utils/cache_ctx.go new file mode 100644 index 00000000000..f3ae0200785 --- /dev/null +++ b/utils/cache_ctx.go @@ -0,0 +1,83 @@ +package utils + +// Borrowed from Osmosis +// https://github.com/osmosis-labs/osmosis/blob/62757d309957fa9e02e6fb0b5dc8caf1ca68e696/osmoutils/cache_ctx.go +// Wraps the execution of a function with a temporary context so that state changes can be discarded if an error occurs + +import ( + "errors" + "fmt" + "runtime" + "runtime/debug" + + "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// This function lets you run the function f, but if theres an error or panic +// drop the state machine change and log the error. +// If there is no error, proceeds as normal (but with some slowdown due to SDK store weirdness) +// Try to avoid usage of iterators in f. +// +// If its an out of gas panic, this function will also panic like in normal tx execution flow. +// This is still safe for beginblock / endblock code though, as they do not have out of gas panics. +func ApplyFuncIfNoError(ctx sdk.Context, f func(ctx sdk.Context) error) (err error) { + // Add a panic safeguard + defer func() { + if recoveryError := recover(); recoveryError != nil { + if isErr, _ := IsOutOfGasError(recoveryError); isErr { + // We panic with the same error, to replicate the normal tx execution flow. + panic(recoveryError) + } else { + PrintPanicRecoveryError(ctx, recoveryError) + err = errors.New("panic occurred during execution") + } + } + }() + // makes a new cache context, which all state changes get wrapped inside of. + cacheCtx, write := ctx.CacheContext() + err = f(cacheCtx) + if err != nil { + ctx.Logger().Error(err.Error()) + } else { + // no error, write the output of f + write() + } + return err +} + +// Frustratingly, this has to return the error descriptor, not an actual error itself +// because the SDK errors here are not actually errors. (They don't implement error interface) +func IsOutOfGasError(err any) (bool, string) { + switch e := err.(type) { + case types.ErrorOutOfGas: + return true, e.Descriptor + case types.ErrorGasOverflow: + return true, e.Descriptor + default: + return false, "" + } +} + +// PrintPanicRecoveryError error logs the recoveryError, along with the stacktrace, if it can be parsed. +// If not emits them to stdout. +func PrintPanicRecoveryError(ctx sdk.Context, recoveryError interface{}) { + errStackTrace := string(debug.Stack()) + switch e := recoveryError.(type) { + case types.ErrorOutOfGas: + ctx.Logger().Debug("out of gas error inside panic recovery block: " + e.Descriptor) + return + case string: + ctx.Logger().Error("Recovering from (string) panic: " + e) + case runtime.Error: + ctx.Logger().Error("recovered (runtime.Error) panic: " + e.Error()) + case error: + ctx.Logger().Error("recovered (error) panic: " + e.Error()) + default: + ctx.Logger().Error("recovered (default) panic. Could not capture logs in ctx, see stdout") + fmt.Println("Recovering from panic ", recoveryError) + debug.PrintStack() + return + } + ctx.Logger().Error("stack trace: " + errStackTrace) +} diff --git a/utils/module_account.go b/utils/module_account.go new file mode 100644 index 00000000000..431c7605cbb --- /dev/null +++ b/utils/module_account.go @@ -0,0 +1,77 @@ +package utils + +// Borrowed from Osmosis +// https://github.com/osmosis-labs/osmosis/blob/5297ea4b641c0c1090cb253a34a510dd0c85b407/osmoutils/module_account.go +// Allows the safe creation of module accounts in the event that an account has already been initialized at an address + +import ( + "context" + "errors" + "fmt" + "reflect" + + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + vestingtypes "github.com/cosmos/cosmos-sdk/x/auth/vesting/types" +) + +type AccountKeeper interface { + NewAccount(context.Context, sdk.AccountI) sdk.AccountI + GetAccount(ctx context.Context, addr sdk.AccAddress) sdk.AccountI + SetAccount(ctx context.Context, acc sdk.AccountI) +} + +// CanCreateModuleAccountAtAddr tells us if we can safely make a module account at +// a given address. By collision resistance of the address (given API safe construction), +// the only way for an account to be already be at this address is if its claimed by the same +// pre-image from the correct module, +// or some SDK command breaks assumptions and creates an account at designated address. +// This function checks if there is an account at that address, and runs some safety checks +// to be extra-sure its not a user account (e.g. non-zero sequence, pubkey, of fore-seen account types). +// If there is no account, or if we believe its not a user-spendable account, we allow module account +// creation at the address. +// else, we do not. +func CanCreateModuleAccountAtAddr(ctx sdk.Context, ak AccountKeeper, addr sdk.AccAddress) error { + existingAcct := ak.GetAccount(ctx, addr) + if existingAcct == nil { + return nil + } + if existingAcct.GetSequence() != 0 || existingAcct.GetPubKey() != nil { + return fmt.Errorf("cannot create module account %s, "+ + "due to an account at that address already existing & having sent txs", addr) + } + overrideAccountTypes := map[reflect.Type]struct{}{ + reflect.TypeOf(&authtypes.BaseAccount{}): {}, + reflect.TypeOf(&vestingtypes.DelayedVestingAccount{}): {}, + reflect.TypeOf(&vestingtypes.ContinuousVestingAccount{}): {}, + reflect.TypeOf(&vestingtypes.BaseVestingAccount{}): {}, + reflect.TypeOf(&vestingtypes.PeriodicVestingAccount{}): {}, + reflect.TypeOf(&vestingtypes.PermanentLockedAccount{}): {}, + } + + if _, clear := overrideAccountTypes[reflect.TypeOf(existingAcct)]; clear { + return nil + } + return errors.New("cannot create module account %s, " + + "due to an account at that address already existing & not being an overrideable type") +} + +// CreateModuleAccount creates a module account at the provided address. +// It overrides an account if it exists at that address, with a non-zero sequence number & pubkey +// Contract: addr is derived from `address.Module(ModuleName, key)` +func CreateModuleAccount(ctx sdk.Context, ak AccountKeeper, addr sdk.AccAddress) error { + err := CanCreateModuleAccountAtAddr(ctx, ak, addr) + if err != nil { + return err + } + + acc := ak.NewAccount( + ctx, + authtypes.NewModuleAccount( + authtypes.NewBaseAccountWithAddress(addr), + addr.String(), + ), + ) + ak.SetAccount(ctx, acc) + return nil +} diff --git a/utils/safe_send_coins.go b/utils/safe_send_coins.go new file mode 100644 index 00000000000..494b1b6240d --- /dev/null +++ b/utils/safe_send_coins.go @@ -0,0 +1,38 @@ +package utils + +import ( + "context" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" +) + +type BankKeeper interface { + BlockedAddr(addr sdk.AccAddress) bool + SendCoins(context context.Context, senderAddr sdk.AccAddress, recipientAddr sdk.AccAddress, amt sdk.Coins) error +} + +// SafeSendCoins transfers coins from one account to another with additional safety checks. +// It provides an extra layer of protection by optionally verifying if the recipient +// address is blocked from receiving funds before proceeding with the transfer. +// +// Parameters: +// - checkBlockedAddr: if true, checks whether the recipient address is blocked (set to false if recipientAddr is a module) +// - bankKeeper: the BankKeeper interface that handles coin transfers +// - ctx: the SDK Context for the transaction +// - senderAddr: the account address sending the coins +// - recipientAddr: the account address receiving the coins +// - amt: the coins to be transferred +// +// Returns: +// - error: nil if the transfer is successful, otherwise an error +// - returns sdkerrors.ErrUnauthorized if checkBlockedAddr is true and recipient is blocked +// - returns any error from the underlying SendCoins operation +func SafeSendCoins(checkBlockedAddr bool, bankKeeper BankKeeper, ctx sdk.Context, senderAddr sdk.AccAddress, recipientAddr sdk.AccAddress, amt sdk.Coins) error { + if checkBlockedAddr && bankKeeper.BlockedAddr(recipientAddr) { + return errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "%s is not allowed to receive funds", recipientAddr) + } + + return bankKeeper.SendCoins(ctx, senderAddr, recipientAddr, amt) +} diff --git a/utils/utils.go b/utils/utils.go new file mode 100644 index 00000000000..d1b9f1c2eb3 --- /dev/null +++ b/utils/utils.go @@ -0,0 +1,342 @@ +package utils + +import ( + "encoding/hex" + "errors" + "fmt" + "math" + "sort" + "strconv" + "strings" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/address" + "github.com/cosmos/cosmos-sdk/types/bech32" + "github.com/cosmos/cosmos-sdk/types/module" + + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + config "github.com/osmosis-labs/osmosis/v27/app/params" + icacallbacktypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +func FilterDepositRecords(arr []recordstypes.DepositRecord, condition func(recordstypes.DepositRecord) bool) (ret []recordstypes.DepositRecord) { + for _, elem := range arr { + if condition(elem) { + ret = append(ret, elem) + } + } + return ret +} + +func Int64ToCoinString(amount int64, denom string) string { + return strconv.FormatInt(amount, 10) + denom +} + +func ValidateAdminAddress(address string) error { + if !Admins[address] { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "address (%s) is not an admin", address) + } + return nil +} + +func Min(a int, b int) int { + if a < b { + return a + } + return b +} + +func StringMapKeys[V any](m map[string]V) []string { + keys := make([]string, 0, len(m)) + for k := range m { + keys = append(keys, k) + } + sort.Strings(keys) + return keys +} + +func Int32MapKeys[V any](m map[int32]V) []int32 { + keys := make([]int32, 0, len(m)) + for k := range m { + keys = append(keys, k) + } + sort.Slice(keys, func(i, j int) bool { return keys[i] < keys[j] }) + return keys +} + +func Uint64MapKeys[V any](m map[uint64]V) []uint64 { + keys := make([]uint64, 0, len(m)) + for k := range m { + keys = append(keys, k) + } + sort.Slice(keys, func(i, j int) bool { return keys[i] < keys[j] }) + return keys +} + +// Converts from uint64 -> int64 with a panic check for overflow +// This should only be used on values where it is known that overflow +// is not possible (e.g. params, block times, etc.), as in those scenarios +// we want to make sure we don't silently fail +func UintToInt(u uint64) int64 { + if u > math.MaxInt64 { + panic(fmt.Sprintf("uint64 value %d too large for int64", u)) + } + return int64(u) +} + +// Converts from int64 -> uint64 with a panic check for underflow +// This should only be used on values where it is known that underflow +// is not possible (e.g. params, block times, etc.), as in those scenarios +// we want to make sure we don't silently fail +func IntToUint(i int64) uint64 { + if i < 0 { + panic(fmt.Sprintf("int64 value %d is negative and can't be converted to uint64", i)) + } + return uint64(i) +} + +//============================== ADDRESS VERIFICATION UTILS ================================ +// ref: https://github.com/cosmos/cosmos-sdk/blob/b75c2ebcfab1a6b535723f1ac2889a2fc2509520/types/address.go#L177 + +var errBech32EmptyAddress = errors.New("decoding Bech32 address failed: must provide a non empty address") + +// GetFromBech32 decodes a bytestring from a Bech32 encoded string. +func GetFromBech32(bech32str, prefix string) ([]byte, error) { + if len(bech32str) == 0 { + return nil, errBech32EmptyAddress + } + + hrp, bz, err := bech32.DecodeAndConvert(bech32str) + if err != nil { + return nil, err + } + + if hrp != prefix { + return nil, fmt.Errorf("invalid Bech32 prefix; expected %s, got %s", prefix, hrp) + } + + return bz, nil +} + +// VerifyAddressFormat verifies that the provided bytes form a valid address +// according to the default address rules or a custom address verifier set by +// GetConfig().SetAddressVerifier(). +// TODO make an issue to get rid of global Config +// ref: https://github.com/cosmos/cosmos-sdk/issues/9690 +func VerifyAddressFormat(bz []byte) error { + verifier := func(bz []byte) error { + n := len(bz) + // Base accounts are length 20, module/ICA accounts are length 32 + if n == 20 || n == 32 { + return nil + } + return fmt.Errorf("incorrect address length %d", n) + } + if verifier(bz) != nil { + return verifier(bz) + } + + if len(bz) == 0 { + return errorsmod.Wrap(sdkerrors.ErrUnknownAddress, "addresses cannot be empty") + } + + if len(bz) > address.MaxAddrLen { + return errorsmod.Wrapf(sdkerrors.ErrUnknownAddress, "address max length is %d, got %d", address.MaxAddrLen, len(bz)) + } + + return nil +} + +// AccAddress a wrapper around bytes meant to represent an account address. +// When marshaled to a string or JSON, it uses Bech32. +type AccAddress []byte + +// AccAddressFromBech32 creates an AccAddress from a Bech32 string. +func AccAddressFromBech32(address string, bech32prefix string) (addr AccAddress, err error) { + if len(strings.TrimSpace(address)) == 0 { + return AccAddress{}, errors.New("empty address string is not allowed") + } + + bz, err := GetFromBech32(address, bech32prefix) + if err != nil { + return nil, err + } + + err = VerifyAddressFormat(bz) + if err != nil { + return nil, err + } + + return AccAddress(bz), nil +} + +// ============================== AIRDROP UTILS ================================ +// max64 returns the maximum of its inputs. +func Max64(i, j int64) int64 { + if i > j { + return i + } + return j +} + +// Min64 returns the minimum of its inputs. +func Min64(i, j int64) int64 { + if i < j { + return i + } + return j +} + +// Compute coin amount for specific period using linear vesting calculation algorithm. +func GetVestedCoinsAt(vAt int64, vStart int64, vLength int64, vCoins sdk.Coins) sdk.Coins { + var vestedCoins sdk.Coins + + if vAt < 0 || vStart < 0 || vLength < 0 { + return sdk.Coins{} + } + + vEnd := vStart + vLength + if vAt <= vStart { + return sdk.Coins{} + } else if vAt >= vEnd { + return vCoins + } + + // calculate the vesting scalar + portion := sdkmath.LegacyNewDec(vAt - vStart).Quo(sdkmath.LegacyNewDec(vLength)) + + for _, ovc := range vCoins { + vestedAmt := sdkmath.LegacyNewDec(ovc.Amount.Int64()).Mul(portion).RoundInt() + vestedCoins = append(vestedCoins, sdk.NewCoin(ovc.Denom, vestedAmt)) + } + + return vestedCoins +} + +// check string array inclusion +func ContainsString(s []string, e string) bool { + for _, a := range s { + if a == e { + return true + } + } + return false +} + +// Convert any bech32 to stride address +func ConvertAddressToStrideAddress(address string) string { + _, bz, err := bech32.DecodeAndConvert(address) + if err != nil { + return "" + } + + bech32Addr, err := bech32.ConvertAndEncode(config.Bech32PrefixAccAddr, bz) + if err != nil { + return "" + } + + return bech32Addr +} + +// Returns a log string with a chainId and tab as the prefix +// Ex: +// +// | COSMOSHUB-4 | string +func LogWithHostZone(chainId string, s string, a ...any) string { + msg := fmt.Sprintf(s, a...) + return fmt.Sprintf("| %-13s | %s", strings.ToUpper(chainId), msg) +} + +// Returns a log string with a chain Id and callback as a prefix +// callbackType is either ICACALLBACK or ICQCALLBACK +// Format: +// +// | CHAIN-ID | {CALLBACK_ID} {CALLBACK_TYPE} | string +func logCallbackWithHostZone(chainId string, callbackId string, callbackType string, s string, a ...any) string { + msg := fmt.Sprintf(s, a...) + return fmt.Sprintf("| %-13s | %s %s | %s", strings.ToUpper(chainId), strings.ToUpper(callbackId), callbackType, msg) +} + +// Returns a log string with a chain Id and icacallback as a prefix +// Ex: +// +// | COSMOSHUB-4 | DELEGATE ICACALLBACK | string +func LogICACallbackWithHostZone(chainId string, callbackId string, s string, a ...any) string { + return logCallbackWithHostZone(chainId, callbackId, "ICACALLBACK", s, a...) +} + +// Returns a log string with a chain Id and icacallback as a prefix, and status of the callback +// Ex: +// +// | COSMOSHUB-4 | DELEGATE ICACALLBACK | ICA SUCCESS, Packet: ... +func LogICACallbackStatusWithHostZone(chainId string, callbackId string, status icacallbacktypes.AckResponseStatus, packet channeltypes.Packet) string { + var statusMsg string + switch status { + case icacallbacktypes.AckResponseStatus_SUCCESS: + statusMsg = "ICA SUCCESSFUL" + case icacallbacktypes.AckResponseStatus_TIMEOUT: + statusMsg = "ICA TIMEOUT" + default: + statusMsg = "ICA FAILED (ack error)" + } + return logCallbackWithHostZone(chainId, callbackId, "ICACALLBACK", "%s, Packet: %+v", statusMsg, packet) +} + +// Returns a log string with a chain Id and icqcallback as a prefix +// Ex: +// +// | COSMOSHUB-4 | WITHDRAWALHOSTBALANCE ICQCALLBACK | string +func LogICQCallbackWithHostZone(chainId string, callbackId string, s string, a ...any) string { + return logCallbackWithHostZone(chainId, callbackId, "ICQCALLBACK", s, a...) +} + +// Returns a log header string with a dash padding on either side +// Ex: +// +// ------------------------------ string ------------------------------ +func LogHeader(s string, a ...any) string { + lineLength := 120 + header := fmt.Sprintf(s, a...) + pad := strings.Repeat("-", (lineLength-len(header))/2) + return fmt.Sprintf("%s %s %s", pad, header, pad) +} + +// Logs a module's migration info +func LogModuleMigration(ctx sdk.Context, versionMap module.VersionMap, moduleName string) { + currentVersion := versionMap[moduleName] + ctx.Logger().Info(fmt.Sprintf("migrating module %s from version %d to version %d", moduleName, currentVersion-1, currentVersion)) +} + +// isIBCToken checks if the token came from the IBC module +// Each IBC token starts with an ibc/ denom, the check is rather simple +func IsIBCToken(denom string) bool { + return strings.HasPrefix(denom, "ibc/") +} + +// Returns the stDenom from a native denom by appending a st prefix +func StAssetDenomFromHostZoneDenom(hostZoneDenom string) string { + return "st" + hostZoneDenom +} + +// Returns the native denom from an stDenom by removing the st prefix +func HostZoneDenomFromStAssetDenom(stAssetDenom string) string { + return stAssetDenom[2:] +} + +// Verifies a tx hash is valid +func VerifyTxHash(txHash string) (err error) { + if txHash == "" { + return errorsmod.Wrapf(sdkerrors.ErrTxDecode, "tx hash is empty") + } + _, err = hex.DecodeString(txHash) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrTxDecode, "tx hash is invalid %s", txHash) + } + return nil +} diff --git a/x/icacallbacks/README.md b/x/icacallbacks/README.md new file mode 100644 index 00000000000..590b6b758d5 --- /dev/null +++ b/x/icacallbacks/README.md @@ -0,0 +1,70 @@ +--- +title: "Icacallbacks" +excerpt: "" +category: 6392913957c533007128548e +--- + +# The ICACallbacks Module + +Add `icacallbacks` module. Interchain accounts are very useful, but ICA calls triggered by automated logic on Stride are limited in functionality and difficult to work with due to a lack of callbacks. Most of Stride's interchain account logic is triggered epochly from the `BeginBlocker`, and state updates on Stride must be made after ICA calls are issued, based on the success / failure of those calls. + +The challenges faced before creating the icacallbacks modules were: +(1) Messages must be handled one-off (by matching on message type) - really what we want to do is update state in acks based on the _transaction_ sent +(2) Message responses are almost always empty, e.g. `MsgDelegateResponse`, which leads to +(3) Matching processed messages to state on the controller is very challenging (sometimes impossible) based on the attributes of the message sent. For example, given the following type + +``` +type Gift struct { + from string + to string + amount int + reason string +} +``` + +two ICA bank sends associated with gifts that have the same `from`, `to` and `amount` but _different_ `reasons` are indistinguishable today in acks. + +`icacontroller` solves the issues as follows + +- Callbacks can be registered to process data associated with a particular IBC packet, per module (solves 1) +- ICA auth modules can store callback data using `icacallbacks`, passing in both a callback and args +- Arguments to the callback can be (un)marshaled and contain arbitrary keys, allowing for updates to data on the controller chain based on the success / failure of the ICA call (solves 2 / 3) + +### Technical notes + +- Callbacks are uniquely identifiable through `portId/channelId/sequence` keys +- Only modules that have registered callbacks can invoke them +- `icacallbacks` doesn't have a message server / handler (it can only be called by other modules) +- `icacallbacks` does authentication by fetching the module associated with a packet (containing the registered callbacks) by calling `ChannelKeeper.LookupModuleByChannel` (it's permissioned at the module level) +- `icacallbacks` is an interchain account auth module, although it's possible this design could be generalized to work with other IBC modules +- in case of a timeout, callbacks are still executed with the ack set to an empty byte array +- We're using protos to serialize / deserialize callback arguments + +The flow to add callbacks is to call `ICACallbacksKeeper.SetCallbackData` after sending an IBC transaction. When the ack returns + +- the callback is fetched using the callback key +- the module is fetched using the portId / channelId +and the callback is invoked and deleted. + +The middleware structure is as follows +![middleware](https://user-images.githubusercontent.com/1331345/183272460-5225d67d-95ee-47e2-8200-11de013a0695.png) + +### Invariants + +- `portId, channelId` pair map to a unique module (important for fetching the correct `CallbackHandler` from a received packet) +- callback ids are unique within modules (they don't have to be unique between modules, because `CallICACallback` is scoped to a module) + +## Keeper functions + +- `CallRegisteredICACallback()`: invokes the relevant callback associated with an ICA + +## State + +- `CallbackData`: stores the callback type, arguments and associated packet +- `CallbackHandler` +- `Callbacks` +- `Callback` + +## Events + +The `icacallbacks` module does not currently emit any events. diff --git a/x/icacallbacks/client/cli/query.go b/x/icacallbacks/client/cli/query.go new file mode 100644 index 00000000000..d7c93cc7e47 --- /dev/null +++ b/x/icacallbacks/client/cli/query.go @@ -0,0 +1,33 @@ +package cli + +import ( + "fmt" + // "strings" + + "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" + // "github.com/cosmos/cosmos-sdk/client/flags" + // sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" +) + +// GetQueryCmd returns the cli query commands for this module +func GetQueryCmd(queryRoute string) *cobra.Command { + // Group icacallbacks queries under a subcommand + cmd := &cobra.Command{ + Use: types.ModuleName, + Short: fmt.Sprintf("Querying commands for the %s module", types.ModuleName), + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + cmd.AddCommand(CmdQueryParams()) + cmd.AddCommand(CmdListCallbackData()) + cmd.AddCommand(CmdShowCallbackData()) + // this line is used by starport scaffolding # 1 + + return cmd +} diff --git a/x/icacallbacks/client/cli/query_callback_data.go b/x/icacallbacks/client/cli/query_callback_data.go new file mode 100644 index 00000000000..333a6d9f542 --- /dev/null +++ b/x/icacallbacks/client/cli/query_callback_data.go @@ -0,0 +1,74 @@ +package cli + +import ( + "context" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/spf13/cobra" + + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" +) + +func CmdListCallbackData() *cobra.Command { + cmd := &cobra.Command{ + Use: "list-callback-data", + Short: "list all callback-data", + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := client.GetClientContextFromCmd(cmd) + + pageReq, err := client.ReadPageRequest(cmd.Flags()) + if err != nil { + return err + } + + queryClient := types.NewQueryClient(clientCtx) + + params := &types.QueryAllCallbackDataRequest{ + Pagination: pageReq, + } + + res, err := queryClient.CallbackDataAll(context.Background(), params) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddPaginationFlagsToCmd(cmd, cmd.Use) + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +func CmdShowCallbackData() *cobra.Command { + cmd := &cobra.Command{ + Use: "show-callback-data [callback-key]", + Short: "shows a callback-data", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) (err error) { + clientCtx := client.GetClientContextFromCmd(cmd) + + queryClient := types.NewQueryClient(clientCtx) + + argCallbackKey := args[0] + + params := &types.QueryGetCallbackDataRequest{ + CallbackKey: argCallbackKey, + } + + res, err := queryClient.CallbackData(context.Background(), params) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} diff --git a/x/icacallbacks/client/cli/query_callback_data_test.go b/x/icacallbacks/client/cli/query_callback_data_test.go new file mode 100644 index 00000000000..84e900b9530 --- /dev/null +++ b/x/icacallbacks/client/cli/query_callback_data_test.go @@ -0,0 +1,157 @@ +package cli_test + +import ( + "fmt" + "strconv" + "testing" + + tmcli "github.com/cometbft/cometbft/libs/cli" + "github.com/cosmos/cosmos-sdk/client/flags" + clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" + "github.com/stretchr/testify/require" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/osmosis-labs/osmosis/v27/testutil/network" + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/client/cli" + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" +) + +func networkWithCallbackDataObjects(t *testing.T, n int) (*network.Network, []types.CallbackData) { + t.Helper() + cfg := network.DefaultConfig() + state := types.GenesisState{} + require.NoError(t, cfg.Codec.UnmarshalJSON(cfg.GenesisState[types.ModuleName], &state)) + + for i := 0; i < n; i++ { + callbackData := types.CallbackData{ + CallbackKey: strconv.Itoa(i), + } + state.CallbackDataList = append(state.CallbackDataList, callbackData) + } + buf, err := cfg.Codec.MarshalJSON(&state) + require.NoError(t, err) + cfg.GenesisState[types.ModuleName] = buf + return network.New(t, cfg), state.CallbackDataList +} + +func TestShowCallbackData(t *testing.T) { + net, objs := networkWithCallbackDataObjects(t, 2) + + ctx := net.Validators[0].ClientCtx + common := []string{ + fmt.Sprintf("--%s=json", tmcli.OutputFlag), + } + for _, tc := range []struct { + desc string + idCallbackKey string + + args []string + err error + obj types.CallbackData + }{ + { + desc: "found", + idCallbackKey: objs[0].CallbackKey, + + args: common, + obj: objs[0], + }, + { + desc: "not found", + idCallbackKey: strconv.Itoa(100000), + + args: common, + err: status.Error(codes.NotFound, "not found"), + }, + } { + tc := tc + t.Run(tc.desc, func(t *testing.T) { + args := []string{ + tc.idCallbackKey, + } + args = append(args, tc.args...) + out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdShowCallbackData(), args) + if tc.err != nil { + stat, ok := status.FromError(tc.err) + require.True(t, ok) + require.ErrorIs(t, stat.Err(), tc.err) + } else { + require.NoError(t, err) + var resp types.QueryGetCallbackDataResponse + require.NoError(t, net.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) + require.NotNil(t, resp.CallbackData) + require.Equal(t, + &tc.obj, + &resp.CallbackData, + ) + } + }) + } +} + +func TestListCallbackData(t *testing.T) { + net, objs := networkWithCallbackDataObjects(t, 5) + + ctx := net.Validators[0].ClientCtx + request := func(next []byte, offset, limit uint64, total bool) []string { + args := []string{ + fmt.Sprintf("--%s=json", tmcli.OutputFlag), + } + if next == nil { + args = append(args, fmt.Sprintf("--%s=%d", flags.FlagOffset, offset)) + } else { + args = append(args, fmt.Sprintf("--%s=%s", flags.FlagPageKey, next)) + } + args = append(args, fmt.Sprintf("--%s=%d", flags.FlagLimit, limit)) + if total { + args = append(args, fmt.Sprintf("--%s", flags.FlagCountTotal)) + } + return args + } + t.Run("ByOffset", func(t *testing.T) { + step := 2 + for i := 0; i < len(objs); i += step { + args := request(nil, uint64(i), uint64(step), false) + out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListCallbackData(), args) + require.NoError(t, err) + var resp types.QueryAllCallbackDataResponse + require.NoError(t, net.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) + require.LessOrEqual(t, len(resp.CallbackData), step) + require.Subset(t, + objs, + resp.CallbackData, + ) + } + }) + t.Run("ByKey", func(t *testing.T) { + step := 2 + var next []byte + for i := 0; i < len(objs); i += step { + args := request(next, 0, uint64(step), false) + out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListCallbackData(), args) + require.NoError(t, err) + var resp types.QueryAllCallbackDataResponse + require.NoError(t, net.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) + require.LessOrEqual(t, len(resp.CallbackData), step) + require.Subset(t, + objs, + resp.CallbackData, + ) + next = resp.Pagination.NextKey + } + }) + t.Run("Total", func(t *testing.T) { + args := request(nil, 0, uint64(len(objs)), true) + out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListCallbackData(), args) + require.NoError(t, err) + var resp types.QueryAllCallbackDataResponse + require.NoError(t, net.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) + require.NoError(t, err) + require.Equal(t, len(objs), int(resp.Pagination.Total)) + require.ElementsMatch(t, + objs, + resp.CallbackData, + ) + }) +} diff --git a/x/icacallbacks/client/cli/query_params.go b/x/icacallbacks/client/cli/query_params.go new file mode 100644 index 00000000000..e41081420ab --- /dev/null +++ b/x/icacallbacks/client/cli/query_params.go @@ -0,0 +1,35 @@ +package cli + +import ( + "context" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/spf13/cobra" + + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" +) + +func CmdQueryParams() *cobra.Command { + cmd := &cobra.Command{ + Use: "params", + Short: "shows the parameters of the module", + Args: cobra.NoArgs, + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := client.GetClientContextFromCmd(cmd) + + queryClient := types.NewQueryClient(clientCtx) + + res, err := queryClient.Params(context.Background(), &types.QueryParamsRequest{}) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} diff --git a/x/icacallbacks/ibc_module.go b/x/icacallbacks/ibc_module.go new file mode 100644 index 00000000000..96664a9943f --- /dev/null +++ b/x/icacallbacks/ibc_module.go @@ -0,0 +1,167 @@ +package icacallbacks + +import ( + "fmt" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" + ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" + + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/keeper" + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" +) + +var _ porttypes.IBCModule = &IBCModule{} + +type IBCModule struct { + keeper keeper.Keeper +} + +func NewIBCModule(k keeper.Keeper) IBCModule { + return IBCModule{ + keeper: k, + } +} + +// No custom logic is necessary in OnChanOpenInit +func (im IBCModule) OnChanOpenInit( + ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID string, + channelID string, + channelCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, + version string, +) (string, error) { + return version, nil +} + +// OnChanOpenTry should not be executed in the ICA stack +func (im IBCModule) OnChanOpenTry( + ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID, + channelID string, + chanCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, + counterpartyVersion string, +) (string, error) { + panic("UNIMPLEMENTED") +} + +// No custom logic is necessary in OnChanOpenAck +func (im IBCModule) OnChanOpenAck( + ctx sdk.Context, + portID, + channelID string, + counterpartyChannelID string, + counterpartyVersion string, +) error { + return nil +} + +// OnChanOpenConfirm should not be executed in the ICA stack +func (im IBCModule) OnChanOpenConfirm( + ctx sdk.Context, + portID, + channelID string, +) error { + panic("UNIMPLEMENTED") +} + +// OnChanCloseInit should not be executed in the ICA stack +func (im IBCModule) OnChanCloseInit( + ctx sdk.Context, + portID, + channelID string, +) error { + panic("UNIMPLEMENTED") +} + +// No custom logic is necessary in OnChanCloseConfirm +func (im IBCModule) OnChanCloseConfirm( + ctx sdk.Context, + portID, + channelID string, +) error { + return nil +} + +// OnChanOpenAck routes the packet to the relevant callback function +func (im IBCModule) OnAcknowledgementPacket( + ctx sdk.Context, + modulePacket channeltypes.Packet, + acknowledgement []byte, + relayer sdk.AccAddress, +) error { + im.keeper.Logger(ctx).Info(fmt.Sprintf("OnAcknowledgementPacket (ICACallbacks) - packet: %+v, relayer: %v", modulePacket, relayer)) + + ackResponse, err := UnpackAcknowledgementResponse(ctx, im.keeper.Logger(ctx), acknowledgement, true) + if err != nil { + return errorsmod.Wrapf(err, "unable to unpack message data from acknowledgement, Sequence %d, from %s %s, to %s %s", + modulePacket.Sequence, modulePacket.SourceChannel, modulePacket.SourcePort, modulePacket.DestinationChannel, modulePacket.DestinationPort) + } + + ackInfo := fmt.Sprintf("sequence #%d, from %s %s, to %s %s", + modulePacket.Sequence, modulePacket.SourceChannel, modulePacket.SourcePort, modulePacket.DestinationChannel, modulePacket.DestinationPort) + im.keeper.Logger(ctx).Info(fmt.Sprintf("Acknowledgement was successfully unmarshalled: ackInfo: %s", ackInfo)) + + eventType := "ack" + ctx.EventManager().EmitEvent( + sdk.NewEvent( + eventType, + sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), + sdk.NewAttribute(types.AttributeKeyAck, ackInfo), + ), + ) + + if err := im.keeper.CallRegisteredICACallback(ctx, modulePacket, ackResponse); err != nil { + return errorsmod.Wrapf(err, "unable to call registered ICACallback from OnAcknowledgePacket | Sequence %d, from %s %s, to %s %s", + modulePacket.Sequence, modulePacket.SourceChannel, modulePacket.SourcePort, modulePacket.DestinationChannel, modulePacket.DestinationPort) + } + return nil +} + +// OnTimeoutPacket routes the timeout to the relevant callback function +func (im IBCModule) OnTimeoutPacket( + ctx sdk.Context, + packet channeltypes.Packet, + relayer sdk.AccAddress, +) error { + im.keeper.Logger(ctx).Info(fmt.Sprintf("OnTimeoutPacket (ICACallbacks): packet %v, relayer %v", packet, relayer)) + + ackResponse := types.AcknowledgementResponse{ + Status: types.AckResponseStatus_TIMEOUT, + } + + if err := im.keeper.CallRegisteredICACallback(ctx, packet, &ackResponse); err != nil { + return errorsmod.Wrapf(err, "Unable to call registered ICACallback from OnTimeoutPacket, Packet: %+v", packet) + } + return nil +} + +// OnRecvPacket should not be executed in the ICA stack +func (im IBCModule) OnRecvPacket( + ctx sdk.Context, + modulePacket channeltypes.Packet, + relayer sdk.AccAddress, +) ibcexported.Acknowledgement { + panic("UNIMPLEMENTED") +} + +// No custom logic required in NegotiateAppVersion +func (im IBCModule) NegotiateAppVersion( + ctx sdk.Context, + order channeltypes.Order, + connectionID string, + portID string, + counterparty channeltypes.Counterparty, + proposedVersion string, +) (version string, err error) { + return proposedVersion, nil +} diff --git a/x/icacallbacks/icacallbacks.go b/x/icacallbacks/icacallbacks.go new file mode 100644 index 00000000000..9ab5256efda --- /dev/null +++ b/x/icacallbacks/icacallbacks.go @@ -0,0 +1,88 @@ +package icacallbacks + +import ( + "fmt" + + errorsmod "cosmossdk.io/errors" + "cosmossdk.io/log" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/gogoproto/proto" + ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" +) + +// Parses ICA tx responses and returns a list of each serialized response +// The format of the raw ack differs depending on which version of ibc-go is used +// For v4 and prior, the message responses are stored under the `Data` attribute of TxMsgData +// For v5 and later, the message responses are stored under the `MsgResponse` attribute of TxMsgdata +func ParseTxMsgData(acknowledgementResult []byte) ([][]byte, error) { + txMsgData := &sdk.TxMsgData{} + if err := proto.Unmarshal(acknowledgementResult, txMsgData); err != nil { + return nil, errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal ICS-27 tx message data: %s", err.Error()) + } + + // Unpack all the message responses based on the sdk version (determined from the length of txMsgData.Data) + switch len(txMsgData.Data) { + case 0: + // for SDK 0.46 and above + msgResponses := make([][]byte, len(txMsgData.MsgResponses)) + for i, msgResponse := range txMsgData.MsgResponses { + msgResponses[i] = msgResponse.GetValue() + } + return msgResponses, nil + default: + // for SDK 0.45 and below + msgResponses := make([][]byte, len(txMsgData.Data)) + for i, msgData := range txMsgData.Data { + msgResponses[i] = msgData.Data + } + return msgResponses, nil + } +} + +// UnpackAcknowledgementResponse unmarshals IBC Acknowledgements, determines the status of the +// acknowledgement (success or failure), and, if applicable, assembles the message responses +// +// ICA transactions have associated messages responses. IBC transfer do not. +// +// With ICA transactions, the schema of the response differs depending on the version of ibc-go used, +// however, this function unifies the format into a common response (a slice of byte arrays) +func UnpackAcknowledgementResponse(ctx sdk.Context, logger log.Logger, ack []byte, isICA bool) (*types.AcknowledgementResponse, error) { + // Unmarshal the raw ack response + var acknowledgement channeltypes.Acknowledgement + if err := ibctransfertypes.ModuleCdc.UnmarshalJSON(ack, &acknowledgement); err != nil { + return nil, errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal ICS-20 transfer packet acknowledgement: %s", err.Error()) + } + + // The ack can come back as either AcknowledgementResult or AcknowledgementError + // If it comes back as AcknowledgementResult, the messages are encoded differently depending on the SDK version + switch response := acknowledgement.Response.(type) { + case *channeltypes.Acknowledgement_Result: + if len(response.Result) == 0 { + return nil, errorsmod.Wrapf(channeltypes.ErrInvalidAcknowledgement, "acknowledgement result cannot be empty") + } + + // If this is an ack from a non-ICA transaction (e.g. an IBC transfer), there is no need to decode the data field + if !isICA { + logger.Info(fmt.Sprintf("IBC transfer acknowledgement success: %+v", response)) + return &types.AcknowledgementResponse{Status: types.AckResponseStatus_SUCCESS}, nil + } + + // Otherwise, if this ack is from an ICA, unmarshal the message data from within the ack + msgResponses, err := ParseTxMsgData(acknowledgement.GetResult()) + if err != nil { + return nil, errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "cannot parse TxMsgData from ICA acknowledgement packet: %s", err.Error()) + } + return &types.AcknowledgementResponse{Status: types.AckResponseStatus_SUCCESS, MsgResponses: msgResponses}, nil + + case *channeltypes.Acknowledgement_Error: + logger.Error(fmt.Sprintf("acknowledgement error: %s", response.Error)) + return &types.AcknowledgementResponse{Status: types.AckResponseStatus_FAILURE, Error: response.Error}, nil + + default: + return nil, errorsmod.Wrapf(channeltypes.ErrInvalidAcknowledgement, "unsupported acknowledgement response field type %T", response) + } +} diff --git a/x/icacallbacks/icacallbacks_test.go b/x/icacallbacks/icacallbacks_test.go new file mode 100644 index 00000000000..b4e8a7427d4 --- /dev/null +++ b/x/icacallbacks/icacallbacks_test.go @@ -0,0 +1,195 @@ +package icacallbacks_test + +import ( + "bytes" + "errors" + "strconv" + "testing" + "time" + + "cosmossdk.io/log" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/cosmos/gogoproto/proto" + ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks" + icacallbacktypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" +) + +func TestParseTxMsgDataCurrent(t *testing.T) { + expectedMessages := [][]byte{{1}, {2, 2}, {3, 3}} + + msgData := &sdk.TxMsgData{ + MsgResponses: make([]*codectypes.Any, len(expectedMessages)), + } + for i, msgBytes := range expectedMessages { + typeUrl := "type" + strconv.Itoa(i) + msgData.MsgResponses[i] = &codectypes.Any{ + TypeUrl: typeUrl, + Value: msgBytes, + } + } + + msgDataBz, err := proto.Marshal(msgData) + require.NoError(t, err, "marshaling of current messages should not error") + + parsedMsgResponses, err := icacallbacks.ParseTxMsgData(msgDataBz) + require.NoError(t, err, "parsing tx message data for current messages should not error") + + require.ElementsMatch(t, expectedMessages, parsedMsgResponses, "parsed current messages") +} + +func TestParseTxMsgDataLegacy(t *testing.T) { + expectedMessages := [][]byte{{1}, {2, 2}, {3, 3}} + + msgData := &sdk.TxMsgData{ + Data: make([]*sdk.MsgData, len(expectedMessages)), //nolint:staticcheck + } + for i, msgBytes := range expectedMessages { + typeUrl := "type" + strconv.Itoa(i) + msgData.Data[i] = &sdk.MsgData{ //nolint:staticcheck + MsgType: typeUrl, + Data: msgBytes, + } + } + + msgDataBz, err := proto.Marshal(msgData) + require.NoError(t, err, "marshaling of legacy messages should not error") + + parsedMsgResponses, err := icacallbacks.ParseTxMsgData(msgDataBz) + require.NoError(t, err, "parsing tx message data for legacy messages should not error") + + require.ElementsMatch(t, expectedMessages, parsedMsgResponses, "parsed legacy messages") +} + +func TestUnwrapAcknowledgement(t *testing.T) { + msgDelegate := "/cosmos.staking.v1beta1.MsgDelegate" + msgUndelegate := "/cosmos.staking.v1beta1.MsgUndelegate" + exampleAckError := errors.New("ABCI code: 1: error handling packet: see events for details") + + testCases := []struct { + name string + isICA bool + ack channeltypes.Acknowledgement + expectedStatus icacallbacktypes.AckResponseStatus + expectedNumMessages int + packetError string + functionError string + }{ + { + name: "ibc_transfer_success", + isICA: false, + ack: channeltypes.NewResultAcknowledgement([]byte{1}), + expectedStatus: icacallbacktypes.AckResponseStatus_SUCCESS, + }, + { + name: "ibc_transfer_failure", + isICA: false, + ack: channeltypes.NewErrorAcknowledgement(exampleAckError), + expectedStatus: icacallbacktypes.AckResponseStatus_FAILURE, + packetError: exampleAckError.Error(), + }, + { + name: "ica_delegate_success", + isICA: true, + ack: apptesting.ICAPacketAcknowledgement( + t, + msgDelegate, + []proto.Message{nil, nil}, + ), + expectedStatus: icacallbacktypes.AckResponseStatus_SUCCESS, + expectedNumMessages: 2, + }, + { + name: "ica_undelegate_success", + isICA: true, + ack: apptesting.ICAPacketAcknowledgement( + t, + msgUndelegate, + []proto.Message{ + &stakingtypes.MsgUndelegateResponse{CompletionTime: time.Now()}, + &stakingtypes.MsgUndelegateResponse{CompletionTime: time.Now().Add(time.Duration(10))}, + }, + ), + expectedStatus: icacallbacktypes.AckResponseStatus_SUCCESS, + expectedNumMessages: 2, + }, + { + name: "ica_delegate_success_legacy", + isICA: true, + ack: apptesting.ICAPacketAcknowledgementLegacy( + t, + msgDelegate, + []proto.Message{nil, nil}, + ), + expectedStatus: icacallbacktypes.AckResponseStatus_SUCCESS, + expectedNumMessages: 2, + }, + { + name: "ica_undelegate_success_legacy", + isICA: true, + ack: apptesting.ICAPacketAcknowledgementLegacy( + t, + msgUndelegate, + []proto.Message{ + &stakingtypes.MsgUndelegateResponse{CompletionTime: time.Now()}, + &stakingtypes.MsgUndelegateResponse{CompletionTime: time.Now().Add(time.Duration(10))}, + }, + ), + expectedStatus: icacallbacktypes.AckResponseStatus_SUCCESS, + expectedNumMessages: 2, + }, + { + name: "ica_failure", + isICA: true, + ack: channeltypes.NewErrorAcknowledgement(exampleAckError), + expectedStatus: icacallbacktypes.AckResponseStatus_FAILURE, + packetError: exampleAckError.Error(), + }, + { + name: "ack_unmarshal_failure", + isICA: false, + ack: channeltypes.Acknowledgement{}, + functionError: "cannot unmarshal ICS-20 transfer packet acknowledgement", + }, + { + name: "ack_empty_result", + isICA: false, + ack: apptesting.ICAPacketAcknowledgementLegacy(t, "", []proto.Message{}), + functionError: "acknowledgement result cannot be empty", + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + // If the ack is not empty, marshal it + var err error + var ackBz []byte + if !bytes.Equal(tc.ack.Acknowledgement(), []byte("{}")) { + ackBz, err = ibctransfertypes.ModuleCdc.MarshalJSON(&tc.ack) + require.NoError(t, err, "no error expected when marshalling ack") + } + + // Call unpack ack response and check error + ackResponse, err := icacallbacks.UnpackAcknowledgementResponse(sdk.Context{}, log.NewNopLogger(), ackBz, tc.isICA) + if tc.functionError != "" { + require.ErrorContains(t, err, tc.functionError, "unpacking acknowledgement reponse should have resulted in a function error") + return + } + require.NoError(t, err, "no error expected when unpacking ack") + + // Confirm the response and error status + require.Equal(t, tc.expectedStatus, ackResponse.Status, "Acknowledgement response status") + require.Equal(t, tc.packetError, ackResponse.Error, "AcknowledgementError") + + // Confirm expected messages + require.Len(t, ackResponse.MsgResponses, tc.expectedNumMessages) + }) + } +} diff --git a/x/icacallbacks/keeper/callback_data.go b/x/icacallbacks/keeper/callback_data.go new file mode 100644 index 00000000000..b5e81024e67 --- /dev/null +++ b/x/icacallbacks/keeper/callback_data.go @@ -0,0 +1,63 @@ +package keeper + +import ( + "cosmossdk.io/store/prefix" + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" +) + +// SetCallbackData set a specific callbackData in the store from its index +func (k Keeper) SetCallbackData(ctx sdk.Context, callbackData types.CallbackData) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.CallbackDataKeyPrefix)) + b := k.cdc.MustMarshal(&callbackData) + store.Set(types.CallbackDataKey( + callbackData.CallbackKey, + ), b) +} + +// GetCallbackData returns a callbackData from its index +func (k Keeper) GetCallbackData( + ctx sdk.Context, + callbackKey string, +) (val types.CallbackData, found bool) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.CallbackDataKeyPrefix)) + + b := store.Get(types.CallbackDataKey( + callbackKey, + )) + if b == nil { + return val, false + } + + k.cdc.MustUnmarshal(b, &val) + return val, true +} + +// RemoveCallbackData removes a callbackData from the store +func (k Keeper) RemoveCallbackData( + ctx sdk.Context, + callbackKey string, +) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.CallbackDataKeyPrefix)) + store.Delete(types.CallbackDataKey( + callbackKey, + )) +} + +// GetAllCallbackData returns all callbackData +func (k Keeper) GetAllCallbackData(ctx sdk.Context) (list []types.CallbackData) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.CallbackDataKeyPrefix)) + iterator := storetypes.KVStorePrefixIterator(store, []byte{}) + + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + var val types.CallbackData + k.cdc.MustUnmarshal(iterator.Value(), &val) + list = append(list, val) + } + + return +} diff --git a/x/icacallbacks/keeper/callback_data_test.go b/x/icacallbacks/keeper/callback_data_test.go new file mode 100644 index 00000000000..5232ef01d90 --- /dev/null +++ b/x/icacallbacks/keeper/callback_data_test.go @@ -0,0 +1,54 @@ +package keeper_test + +import ( + "strconv" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" +) + +func (s *KeeperTestSuite) createNCallbackData(ctx sdk.Context, n int) []types.CallbackData { + items := make([]types.CallbackData, n) + for i := range items { + items[i].CallbackKey = strconv.Itoa(i) + + s.App.IcacallbacksKeeper.SetCallbackData(ctx, items[i]) + } + return items +} + +func (s *KeeperTestSuite) TestCallbackDataGet() { + items := s.createNCallbackData(s.Ctx, 10) + for _, item := range items { + rst, found := s.App.IcacallbacksKeeper.GetCallbackData(s.Ctx, + item.CallbackKey, + ) + s.Require().True(found) + s.Require().Equal( + &item, + &rst, + ) + } +} + +func (s *KeeperTestSuite) TestCallbackDataRemove() { + items := s.createNCallbackData(s.Ctx, 10) + for _, item := range items { + s.App.IcacallbacksKeeper.RemoveCallbackData(s.Ctx, + item.CallbackKey, + ) + _, found := s.App.IcacallbacksKeeper.GetCallbackData(s.Ctx, + item.CallbackKey, + ) + s.Require().False(found) + } +} + +func (s *KeeperTestSuite) TestCallbackDataGetAll() { + items := s.createNCallbackData(s.Ctx, 10) + s.Require().ElementsMatch( + items, + s.App.IcacallbacksKeeper.GetAllCallbackData(s.Ctx), + ) +} diff --git a/x/icacallbacks/keeper/genesis.go b/x/icacallbacks/keeper/genesis.go new file mode 100644 index 00000000000..fc3395b45fb --- /dev/null +++ b/x/icacallbacks/keeper/genesis.go @@ -0,0 +1,27 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" +) + +// InitGenesis initializes the capability module's state from a provided genesis +// state. +func (k Keeper) InitGenesis(ctx sdk.Context, genState types.GenesisState) { + // Set all the callbackData + for _, elem := range genState.CallbackDataList { + k.SetCallbackData(ctx, elem) + } + k.SetParams(ctx, genState.Params) +} + +// ExportGenesis returns the capability module's exported genesis. +func (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { + genesis := types.DefaultGenesis() + genesis.Params = k.GetParams(ctx) + + genesis.CallbackDataList = k.GetAllCallbackData(ctx) + + return genesis +} diff --git a/x/icacallbacks/keeper/genesis_test.go b/x/icacallbacks/keeper/genesis_test.go new file mode 100644 index 00000000000..42e0d9ed521 --- /dev/null +++ b/x/icacallbacks/keeper/genesis_test.go @@ -0,0 +1,28 @@ +package keeper_test + +import ( + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" +) + +func (s *KeeperTestSuite) TestGenesis() { + genesisState := types.GenesisState{ + Params: types.DefaultParams(), + PortId: types.PortID, + CallbackDataList: []types.CallbackData{ + { + CallbackKey: "0", + }, + { + CallbackKey: "1", + }, + }, + } + + s.App.IcacallbacksKeeper.InitGenesis(s.Ctx, genesisState) + got := s.App.IcacallbacksKeeper.ExportGenesis(s.Ctx) + s.Require().NotNil(got) + + s.Require().Equal(genesisState.PortId, got.PortId) + + s.Require().ElementsMatch(genesisState.CallbackDataList, got.CallbackDataList) +} diff --git a/x/icacallbacks/keeper/grpc_query.go b/x/icacallbacks/keeper/grpc_query.go new file mode 100644 index 00000000000..16ac17ea4f3 --- /dev/null +++ b/x/icacallbacks/keeper/grpc_query.go @@ -0,0 +1,7 @@ +package keeper + +import ( + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" +) + +var _ types.QueryServer = Keeper{} diff --git a/x/icacallbacks/keeper/grpc_query_callback_data.go b/x/icacallbacks/keeper/grpc_query_callback_data.go new file mode 100644 index 00000000000..6999d7441e3 --- /dev/null +++ b/x/icacallbacks/keeper/grpc_query_callback_data.go @@ -0,0 +1,57 @@ +package keeper + +import ( + "context" + + "cosmossdk.io/store/prefix" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" +) + +func (k Keeper) CallbackDataAll(c context.Context, req *types.QueryAllCallbackDataRequest) (*types.QueryAllCallbackDataResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + var callbackDatas []types.CallbackData + ctx := sdk.UnwrapSDKContext(c) + + store := ctx.KVStore(k.storeKey) + callbackDataStore := prefix.NewStore(store, types.KeyPrefix(types.CallbackDataKeyPrefix)) + + pageRes, err := query.Paginate(callbackDataStore, req.Pagination, func(key []byte, value []byte) error { + var callbackData types.CallbackData + if err := k.cdc.Unmarshal(value, &callbackData); err != nil { + return err + } + + callbackDatas = append(callbackDatas, callbackData) + return nil + }) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryAllCallbackDataResponse{CallbackData: callbackDatas, Pagination: pageRes}, nil +} + +func (k Keeper) CallbackData(c context.Context, req *types.QueryGetCallbackDataRequest) (*types.QueryGetCallbackDataResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + ctx := sdk.UnwrapSDKContext(c) + + val, found := k.GetCallbackData( + ctx, + req.CallbackKey, + ) + if !found { + return nil, status.Error(codes.NotFound, "not found") + } + + return &types.QueryGetCallbackDataResponse{CallbackData: val}, nil +} diff --git a/x/icacallbacks/keeper/grpc_query_callback_data_test.go b/x/icacallbacks/keeper/grpc_query_callback_data_test.go new file mode 100644 index 00000000000..3b6764aaaba --- /dev/null +++ b/x/icacallbacks/keeper/grpc_query_callback_data_test.go @@ -0,0 +1,114 @@ +package keeper_test + +import ( + "strconv" + + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" +) + +func (s *KeeperTestSuite) TestCallbackDataQuerySingle() { + msgs := s.createNCallbackData(s.Ctx, 2) + for _, tc := range []struct { + desc string + request *types.QueryGetCallbackDataRequest + response *types.QueryGetCallbackDataResponse + err error + }{ + { + desc: "First", + request: &types.QueryGetCallbackDataRequest{ + CallbackKey: msgs[0].CallbackKey, + }, + response: &types.QueryGetCallbackDataResponse{CallbackData: msgs[0]}, + }, + { + desc: "Second", + request: &types.QueryGetCallbackDataRequest{ + CallbackKey: msgs[1].CallbackKey, + }, + response: &types.QueryGetCallbackDataResponse{CallbackData: msgs[1]}, + }, + { + desc: "KeyNotFound", + request: &types.QueryGetCallbackDataRequest{ + CallbackKey: strconv.Itoa(100000), + }, + err: status.Error(codes.NotFound, "not found"), + }, + { + desc: "InvalidRequest", + err: status.Error(codes.InvalidArgument, "invalid request"), + }, + } { + s.Run(tc.desc, func() { + response, err := s.App.IcacallbacksKeeper.CallbackData(s.Ctx, tc.request) + if tc.err != nil { + s.Require().ErrorIs(err, tc.err) + } else { + s.Require().NoError(err) + s.Require().Equal( + tc.response, + response, + ) + } + }) + } +} + +func (s *KeeperTestSuite) TestCallbackDataQueryPaginated() { + msgs := s.createNCallbackData(s.Ctx, 5) + + request := func(next []byte, offset, limit uint64, total bool) *types.QueryAllCallbackDataRequest { + return &types.QueryAllCallbackDataRequest{ + Pagination: &query.PageRequest{ + Key: next, + Offset: offset, + Limit: limit, + CountTotal: total, + }, + } + } + s.Run("ByOffset", func() { + step := 2 + for i := 0; i < len(msgs); i += step { + resp, err := s.App.IcacallbacksKeeper.CallbackDataAll(s.Ctx, request(nil, uint64(i), uint64(step), false)) + s.Require().NoError(err) + s.Require().LessOrEqual(len(resp.CallbackData), step) + s.Require().Subset( + msgs, + resp.CallbackData, + ) + } + }) + s.Run("ByKey", func() { + step := 2 + var next []byte + for i := 0; i < len(msgs); i += step { + resp, err := s.App.IcacallbacksKeeper.CallbackDataAll(s.Ctx, request(next, 0, uint64(step), false)) + s.Require().NoError(err) + s.Require().LessOrEqual(len(resp.CallbackData), step) + s.Require().Subset( + msgs, + resp.CallbackData, + ) + next = resp.Pagination.NextKey + } + }) + s.Run("Total", func() { + resp, err := s.App.IcacallbacksKeeper.CallbackDataAll(s.Ctx, request(nil, 0, 0, true)) + s.Require().NoError(err) + s.Require().Equal(len(msgs), int(resp.Pagination.Total)) + s.Require().ElementsMatch( + msgs, + resp.CallbackData, + ) + }) + s.Run("InvalidRequest", func() { + _, err := s.App.IcacallbacksKeeper.CallbackDataAll(s.Ctx, nil) + s.Require().ErrorIs(err, status.Error(codes.InvalidArgument, "invalid request")) + }) +} diff --git a/x/icacallbacks/keeper/grpc_query_params.go b/x/icacallbacks/keeper/grpc_query_params.go new file mode 100644 index 00000000000..ae75b1490a4 --- /dev/null +++ b/x/icacallbacks/keeper/grpc_query_params.go @@ -0,0 +1,20 @@ +package keeper + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" +) + +func (k Keeper) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + ctx := sdk.UnwrapSDKContext(c) + + return &types.QueryParamsResponse{Params: k.GetParams(ctx)}, nil +} diff --git a/x/icacallbacks/keeper/grpc_query_params_test.go b/x/icacallbacks/keeper/grpc_query_params_test.go new file mode 100644 index 00000000000..4d9f986a5ff --- /dev/null +++ b/x/icacallbacks/keeper/grpc_query_params_test.go @@ -0,0 +1,14 @@ +package keeper_test + +import ( + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" +) + +func (s *KeeperTestSuite) TestParamsQuery() { + params := types.DefaultParams() + s.App.IcacallbacksKeeper.SetParams(s.Ctx, params) + + response, err := s.App.IcacallbacksKeeper.Params(s.Ctx, &types.QueryParamsRequest{}) + s.Require().NoError(err) + s.Require().Equal(&types.QueryParamsResponse{Params: params}, response) +} diff --git a/x/icacallbacks/keeper/keeper.go b/x/icacallbacks/keeper/keeper.go new file mode 100644 index 00000000000..2e59353926d --- /dev/null +++ b/x/icacallbacks/keeper/keeper.go @@ -0,0 +1,95 @@ +package keeper + +import ( + "fmt" + + "cosmossdk.io/log" + + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + + errorsmod "cosmossdk.io/errors" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + + ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" + + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + storetypes "cosmossdk.io/store/types" +) + +type ( + Keeper struct { + cdc codec.BinaryCodec + storeKey storetypes.StoreKey + memKey storetypes.StoreKey + paramstore paramtypes.Subspace + icacallbacks map[string]types.ICACallback + IBCKeeper ibckeeper.Keeper + } +) + +func NewKeeper( + cdc codec.BinaryCodec, + storeKey, + memKey storetypes.StoreKey, + ps paramtypes.Subspace, + ibcKeeper ibckeeper.Keeper, +) *Keeper { + // set KeyTable if it has not already been set + if !ps.HasKeyTable() { + ps = ps.WithKeyTable(types.ParamKeyTable()) + } + + return &Keeper{ + cdc: cdc, + storeKey: storeKey, + memKey: memKey, + paramstore: ps, + icacallbacks: make(map[string]types.ICACallback), + IBCKeeper: ibcKeeper, + } +} + +func (k Keeper) Logger(ctx sdk.Context) log.Logger { + return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) +} + +func (k Keeper) SetICACallbacks(moduleCallbacks ...types.ModuleCallbacks) error { + for _, callbacks := range moduleCallbacks { + for _, callback := range callbacks { + if _, found := k.icacallbacks[callback.CallbackId]; found { + return fmt.Errorf("callback for ID %s already registered", callback.CallbackId) + } + k.icacallbacks[callback.CallbackId] = callback + } + } + return nil +} + +func (k Keeper) CallRegisteredICACallback(ctx sdk.Context, packet channeltypes.Packet, ackResponse *types.AcknowledgementResponse) error { + // Get the callback key and associated callback data from the packet + callbackDataKey := types.PacketID(packet.GetSourcePort(), packet.GetSourceChannel(), packet.Sequence) + callbackData, found := k.GetCallbackData(ctx, callbackDataKey) + if !found { + k.Logger(ctx).Info(fmt.Sprintf("callback data not found for portID: %s, channelID: %s, sequence: %d", + packet.SourcePort, packet.SourceChannel, packet.Sequence)) + return nil + } + + // If there's an associated callback function, execute it + callback, found := k.icacallbacks[callbackData.CallbackId] + if !found { + k.Logger(ctx).Info(fmt.Sprintf("No associated callback with callback data %v", callbackData)) + return nil + } + if err := callback.CallbackFunc(ctx, packet, ackResponse, callbackData.CallbackArgs); err != nil { + return errorsmod.Wrapf(err, "failed to invoke icacallback %s", callbackData.CallbackId) + } + + // remove the callback data + k.RemoveCallbackData(ctx, callbackDataKey) + return nil +} diff --git a/x/icacallbacks/keeper/keeper_test.go b/x/icacallbacks/keeper/keeper_test.go new file mode 100644 index 00000000000..9d51f472a0a --- /dev/null +++ b/x/icacallbacks/keeper/keeper_test.go @@ -0,0 +1,21 @@ +package keeper_test + +import ( + "testing" + + "github.com/stretchr/testify/suite" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" +) + +type KeeperTestSuite struct { + apptesting.AppTestHelper +} + +func (s *KeeperTestSuite) SetupTest() { + s.Setup() +} + +func TestKeeperTestSuite(t *testing.T) { + suite.Run(t, new(KeeperTestSuite)) +} diff --git a/x/icacallbacks/keeper/params.go b/x/icacallbacks/keeper/params.go new file mode 100644 index 00000000000..7ed09c1b694 --- /dev/null +++ b/x/icacallbacks/keeper/params.go @@ -0,0 +1,17 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" +) + +// GetParams get all parameters as types.Params +func (k Keeper) GetParams(ctx sdk.Context) types.Params { + return types.NewParams() +} + +// SetParams set the params +func (k Keeper) SetParams(ctx sdk.Context, params types.Params) { + k.paramstore.SetParamSet(ctx, ¶ms) +} diff --git a/x/icacallbacks/keeper/params_test.go b/x/icacallbacks/keeper/params_test.go new file mode 100644 index 00000000000..098110c2adb --- /dev/null +++ b/x/icacallbacks/keeper/params_test.go @@ -0,0 +1,13 @@ +package keeper_test + +import ( + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" +) + +func (s *KeeperTestSuite) TestGetParams() { + params := types.DefaultParams() + + s.App.IcacallbacksKeeper.SetParams(s.Ctx, params) + + s.Require().EqualValues(params, s.App.IcacallbacksKeeper.GetParams(s.Ctx)) +} diff --git a/x/icacallbacks/migrations/v2/convert.go b/x/icacallbacks/migrations/v2/convert.go new file mode 100644 index 00000000000..d5d69577fe4 --- /dev/null +++ b/x/icacallbacks/migrations/v2/convert.go @@ -0,0 +1,138 @@ +package v2 + +import ( + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + "github.com/golang/protobuf/proto" //nolint:staticcheck + + icacallbacktypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + oldstakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/migrations/v2/types" + stakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +const ( + ICACallbackID_Delegate = "delegate" + ICACallbackID_Rebalance = "rebalance" + ICACallbackID_Undelegate = "undelegate" +) + +func convertDelegateCallback(oldDelegateCallback oldstakeibctypes.DelegateCallback) stakeibctypes.DelegateCallback { + newSplitDelegations := []*stakeibctypes.SplitDelegation{} + for _, oldSplitDelegation := range oldDelegateCallback.SplitDelegations { + newSplitDelegation := stakeibctypes.SplitDelegation{ + Validator: oldSplitDelegation.Validator, + Amount: sdkmath.NewIntFromUint64(oldSplitDelegation.Amount), + } + newSplitDelegations = append(newSplitDelegations, &newSplitDelegation) + } + + return stakeibctypes.DelegateCallback{ + HostZoneId: oldDelegateCallback.HostZoneId, + DepositRecordId: oldDelegateCallback.DepositRecordId, + SplitDelegations: newSplitDelegations, + } +} + +func convertUndelegateCallback(oldUndelegateCallback oldstakeibctypes.UndelegateCallback) stakeibctypes.UndelegateCallback { + // newSplitDelegations := []*stakeibctypes.SplitDelegation{} + // for _, oldSplitDelegation := range oldUndelegateCallback.SplitDelegations { + // newSplitDelegation := stakeibctypes.SplitDelegation{ + // Validator: oldSplitDelegation.Validator, + // Amount: sdkmath.NewIntFromUint64(oldSplitDelegation.Amount), + // } + // newSplitDelegations = append(newSplitDelegations, &newSplitDelegation) + // } + + return stakeibctypes.UndelegateCallback{ + HostZoneId: oldUndelegateCallback.HostZoneId, + // SplitDelegations: newSplitDelegations, + EpochUnbondingRecordIds: oldUndelegateCallback.EpochUnbondingRecordIds, + } +} + +func convertRebalanceCallback(oldRebalanceCallback oldstakeibctypes.RebalanceCallback) stakeibctypes.RebalanceCallback { + newRebalancings := []*stakeibctypes.Rebalancing{} + for _, oldRebalancing := range oldRebalanceCallback.Rebalancings { + newRebalancing := stakeibctypes.Rebalancing{ + SrcValidator: oldRebalancing.SrcValidator, + DstValidator: oldRebalancing.DstValidator, + Amt: sdkmath.NewIntFromUint64(oldRebalancing.Amt), + } + newRebalancings = append(newRebalancings, &newRebalancing) + } + + return stakeibctypes.RebalanceCallback{ + HostZoneId: oldRebalanceCallback.HostZoneId, + Rebalancings: newRebalancings, + } +} + +func convertCallbackData(oldCallbackData icacallbacktypes.CallbackData) (icacallbacktypes.CallbackData, error) { + var newCallbackArgs []byte + switch oldCallbackData.CallbackId { + case ICACallbackID_Delegate: + // Deserialize the callback args with the old DelegateCallback type + oldDelegateCallback := oldstakeibctypes.DelegateCallback{} + if err := proto.Unmarshal(oldCallbackData.CallbackArgs, &oldDelegateCallback); err != nil { + return icacallbacktypes.CallbackData{}, errorsmod.Wrap(err, "failed to unmarshal") + } + + // Convert and serialize with the new DelegateCallback type + newDelegateCallback := convertDelegateCallback(oldDelegateCallback) + newDelegateCallbackBz, err := proto.Marshal(&newDelegateCallback) + if err != nil { + return icacallbacktypes.CallbackData{}, errorsmod.Wrap(err, "failed to marshal") + } + + // Update the CallbackData with the new args + newCallbackArgs = newDelegateCallbackBz + + case ICACallbackID_Undelegate: + // Deserialize the callback args with the old UndelegateCallback type + oldUndelegateCallback := oldstakeibctypes.UndelegateCallback{} + if err := proto.Unmarshal(oldCallbackData.CallbackArgs, &oldUndelegateCallback); err != nil { + return icacallbacktypes.CallbackData{}, errorsmod.Wrap(err, "failed to unmarshal") + } + + // Convert and serialize with the new UndelegateCallback type + newUndelegateCallback := convertUndelegateCallback(oldUndelegateCallback) + newUndelegateCallbackBz, err := proto.Marshal(&newUndelegateCallback) + if err != nil { + return icacallbacktypes.CallbackData{}, errorsmod.Wrap(err, "failed to marshal") + } + + // Update the CallbackData with the new args + newCallbackArgs = newUndelegateCallbackBz + + case ICACallbackID_Rebalance: + // Deserialize the callback args with the old RebalanceCallback type + oldRebalanceCallback := oldstakeibctypes.RebalanceCallback{} + if err := proto.Unmarshal(oldCallbackData.CallbackArgs, &oldRebalanceCallback); err != nil { + return icacallbacktypes.CallbackData{}, errorsmod.Wrap(err, "failed to unmarshal") + } + + // Convert and serialize with the new RebalanceCallback type + newRebalanceCallback := convertRebalanceCallback(oldRebalanceCallback) + newRebalanceCallbackBz, err := proto.Marshal(&newRebalanceCallback) + if err != nil { + return icacallbacktypes.CallbackData{}, errorsmod.Wrap(err, "failed to marshal") + } + + // Update the CallbackData with the new args + newCallbackArgs = newRebalanceCallbackBz + + default: + newCallbackArgs = oldCallbackData.CallbackArgs + } + + newCallbackData := icacallbacktypes.CallbackData{ + CallbackKey: oldCallbackData.CallbackKey, + PortId: oldCallbackData.PortId, + ChannelId: oldCallbackData.ChannelId, + Sequence: oldCallbackData.Sequence, + CallbackId: oldCallbackData.CallbackId, + CallbackArgs: newCallbackArgs, + } + + return newCallbackData, nil +} diff --git a/x/icacallbacks/migrations/v2/convert_test.go b/x/icacallbacks/migrations/v2/convert_test.go new file mode 100644 index 00000000000..594a92825f6 --- /dev/null +++ b/x/icacallbacks/migrations/v2/convert_test.go @@ -0,0 +1,227 @@ +package v2 + +import ( + "testing" + + sdkmath "cosmossdk.io/math" + "github.com/golang/protobuf/proto" //nolint:staticcheck + "github.com/stretchr/testify/require" + + icacallbacktypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + oldstakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/migrations/v2/types" +) + +func TestConvertDelegateCallback(t *testing.T) { + hostZoneId := "hz" + depositRecordId := uint64(1) + val1 := "val1" + val2 := "val2" + + // Define old callback type and convert to new type + oldDelegateCallback := oldstakeibctypes.DelegateCallback{ + HostZoneId: hostZoneId, + DepositRecordId: depositRecordId, + SplitDelegations: []*oldstakeibctypes.SplitDelegation{ + { + Validator: val1, + Amount: uint64(1), + }, + { + Validator: val2, + Amount: uint64(2), + }, + }, + } + newDelegateCallback := convertDelegateCallback(oldDelegateCallback) + + // Check unchanged fields + require.Equal(t, hostZoneId, newDelegateCallback.HostZoneId, "host zone id") + require.Equal(t, depositRecordId, newDelegateCallback.DepositRecordId, "deposit record id") + require.Equal(t, val1, newDelegateCallback.SplitDelegations[0].Validator, "validator 1 address") + require.Equal(t, val2, newDelegateCallback.SplitDelegations[1].Validator, "validator 2 address") + + // Check update fields + require.Equal(t, sdkmath.NewInt(1), newDelegateCallback.SplitDelegations[0].Amount, "validator 1 amount") + require.Equal(t, sdkmath.NewInt(2), newDelegateCallback.SplitDelegations[1].Amount, "validator 2 amount") +} + +func TestConvertUndelegateCallback(t *testing.T) { + hostZoneId := "hz" + epochUnbondingIds := []uint64{1} + val1 := "val1" + val2 := "val2" + + // Define old callback type and convert to new type + oldUndelegateCallback := oldstakeibctypes.UndelegateCallback{ + HostZoneId: hostZoneId, + SplitDelegations: []*oldstakeibctypes.SplitDelegation{ + { + Validator: val1, + Amount: uint64(1), + }, + { + Validator: val2, + Amount: uint64(2), + }, + }, + EpochUnbondingRecordIds: epochUnbondingIds, + } + newUndelegateCallback := convertUndelegateCallback(oldUndelegateCallback) + + // Check unchanged fields + require.Equal(t, hostZoneId, newUndelegateCallback.HostZoneId, "host zone id") + require.Equal(t, epochUnbondingIds[0], newUndelegateCallback.EpochUnbondingRecordIds[0], "epoch unbonding record id") + // require.Equal(t, val1, newUndelegateCallback.SplitDelegations[0].Validator, "validator 1 address") + // require.Equal(t, val2, newUndelegateCallback.SplitDelegations[1].Validator, "validator 2 address") + + // Check update fields + // require.Equal(t, sdkmath.NewInt(1), newUndelegateCallback.SplitDelegations[0].Amount, "validator 1 amount") + // require.Equal(t, sdkmath.NewInt(2), newUndelegateCallback.SplitDelegations[1].Amount, "validator 2 amount") +} + +func TestConvertRebalanceCallback(t *testing.T) { + hostZoneId := "hz1" + srcVal1 := "src_val1" + srcVal2 := "src_val2" + dstVal1 := "dst_val1" + dstVal2 := "dst_val2" + + // Define old callback type and convert to new type + oldRebalanceCallback := oldstakeibctypes.RebalanceCallback{ + HostZoneId: hostZoneId, + Rebalancings: []*oldstakeibctypes.Rebalancing{ + { + SrcValidator: srcVal1, + DstValidator: dstVal1, + Amt: uint64(1), + }, + { + SrcValidator: srcVal2, + DstValidator: dstVal2, + Amt: uint64(2), + }, + }, + } + newRebalanceCallback := convertRebalanceCallback(oldRebalanceCallback) + + // Check unchanged fields + require.Equal(t, hostZoneId, newRebalanceCallback.HostZoneId, "host zone id") + + require.Equal(t, srcVal1, newRebalanceCallback.Rebalancings[0].SrcValidator, "srcValidator 1 address") + require.Equal(t, dstVal1, newRebalanceCallback.Rebalancings[0].DstValidator, "dstValidator 1 address") + + require.Equal(t, srcVal2, newRebalanceCallback.Rebalancings[1].SrcValidator, "srcValidator 2 address") + require.Equal(t, dstVal2, newRebalanceCallback.Rebalancings[1].DstValidator, "dstValidator 2 address") + + // Check updated fields + require.Equal(t, sdkmath.NewInt(1), newRebalanceCallback.Rebalancings[0].Amt) + require.Equal(t, sdkmath.NewInt(2), newRebalanceCallback.Rebalancings[1].Amt) +} + +func TestConvertCallbackData_Delegate_Success(t *testing.T) { + // Marshal delegate callback for callback args in CallbackData struct + delegateCallbackBz, err := proto.Marshal(&oldstakeibctypes.DelegateCallback{ + SplitDelegations: []*oldstakeibctypes.SplitDelegation{{Amount: uint64(1)}}, + }) + require.NoError(t, err, "no error expected when marshalling delegate callback") + + // Define old delegate callback data type and convert to new type + oldCallbackData := icacallbacktypes.CallbackData{ + CallbackKey: "key", + PortId: "port", + ChannelId: "channel", + Sequence: uint64(1), + CallbackId: ICACallbackID_Delegate, + CallbackArgs: delegateCallbackBz, + } + newCallbackData, err := convertCallbackData(oldCallbackData) + require.NoError(t, err) + + // If the callback was was type delegate, the callback args SHOULD have changed + require.NotEqual(t, oldCallbackData.CallbackArgs, newCallbackData.CallbackArgs, "callback args should have changed") + + // All other fields SHOULD NOT have changed + require.Equal(t, oldCallbackData.CallbackKey, newCallbackData.CallbackKey, "callback key") + require.Equal(t, oldCallbackData.PortId, newCallbackData.PortId, "port ID") + require.Equal(t, oldCallbackData.ChannelId, newCallbackData.ChannelId, "channel ID") + require.Equal(t, oldCallbackData.Sequence, newCallbackData.Sequence, "sequence") + require.Equal(t, oldCallbackData.CallbackId, newCallbackData.CallbackId, "callback ID") +} + +func TestConvertCallbackData_Delegate_Error(t *testing.T) { + // Define old delegate callback data type with invalid callback args + oldCallbackData := icacallbacktypes.CallbackData{ + CallbackKey: "key", + PortId: "port", + ChannelId: "channel", + Sequence: uint64(1), + CallbackId: ICACallbackID_Delegate, + CallbackArgs: []byte{1, 2, 3}, + } + + // The convert function should fail since it cannot unmarshal the callback args into a DelegateCallback + _, err := convertCallbackData(oldCallbackData) + require.ErrorContains(t, err, "failed to unmarshal") +} + +func TestConvertCallbackData_Rebalance_Success(t *testing.T) { + // Marshal rebalance callback for callback args in CallbackData struct + rebalanceCallbackBz, err := proto.Marshal(&oldstakeibctypes.RebalanceCallback{ + Rebalancings: []*oldstakeibctypes.Rebalancing{{Amt: uint64(1)}}, + }) + require.NoError(t, err, "no error expected when marshalling rebalance callback") + + // Define old rebalance callback data type and convert to new type + oldCallbackData := icacallbacktypes.CallbackData{ + CallbackKey: "key", + PortId: "port", + ChannelId: "channel", + Sequence: uint64(1), + CallbackId: ICACallbackID_Rebalance, + CallbackArgs: rebalanceCallbackBz, + } + newCallbackData, err := convertCallbackData(oldCallbackData) + require.NoError(t, err) + + // If the callback was was type delegate, the callback args SHOULD have changed + require.NotEqual(t, oldCallbackData.CallbackArgs, newCallbackData.CallbackArgs, "callback args should have changed") + + // All other fields SHOULD NOT have changed + require.Equal(t, oldCallbackData.CallbackKey, newCallbackData.CallbackKey, "callback key") + require.Equal(t, oldCallbackData.PortId, newCallbackData.PortId, "port ID") + require.Equal(t, oldCallbackData.ChannelId, newCallbackData.ChannelId, "channel ID") + require.Equal(t, oldCallbackData.Sequence, newCallbackData.Sequence, "sequence") + require.Equal(t, oldCallbackData.CallbackId, newCallbackData.CallbackId, "callback ID") +} + +func TestConvertCallbackData_Rebalance_Error(t *testing.T) { + // Define old rebalance callback data type and convert to new type + oldCallbackData := icacallbacktypes.CallbackData{ + CallbackKey: "key", + PortId: "port", + ChannelId: "channel", + Sequence: uint64(1), + CallbackId: ICACallbackID_Rebalance, + CallbackArgs: []byte{1, 2, 3}, + } + + // The convert function should fail since it cannot unmarshal the callback args into a RebalanceCallback + _, err := convertCallbackData(oldCallbackData) + require.ErrorContains(t, err, "failed to unmarshal") +} + +func TestConvertCallbackData_Other(t *testing.T) { + oldCallbackData := icacallbacktypes.CallbackData{ + CallbackKey: "key", + PortId: "port", + ChannelId: "channel", + Sequence: uint64(1), + CallbackId: "different_callback", + CallbackArgs: []byte{1, 2, 3}, + } + + // If the callback is not delegate or rebalance, it should not have been changed + newCallbackData, err := convertCallbackData(oldCallbackData) + require.NoError(t, err) + require.Equal(t, oldCallbackData, newCallbackData) +} diff --git a/x/icacallbacks/migrations/v2/migrations.go b/x/icacallbacks/migrations/v2/migrations.go new file mode 100644 index 00000000000..ae804acbc36 --- /dev/null +++ b/x/icacallbacks/migrations/v2/migrations.go @@ -0,0 +1,50 @@ +package v2 + +import ( + "cosmossdk.io/store/prefix" + storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + + errorsmod "cosmossdk.io/errors" + + icacallbacktypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" +) + +func migrateCallbacks(store storetypes.KVStore, cdc codec.BinaryCodec) error { + icacallbackStore := prefix.NewStore(store, []byte(icacallbacktypes.CallbackDataKeyPrefix)) + + iter := icacallbackStore.Iterator(nil, nil) + defer iter.Close() + + for ; iter.Valid(); iter.Next() { + + // Deserialize the callback data + var oldCallbackData icacallbacktypes.CallbackData + err := cdc.Unmarshal(iter.Value(), &oldCallbackData) + if err != nil { + return errorsmod.Wrapf(err, "unable to unmarshal callback data") + } + + // Convert the callback data + // This will only convert the callback data args, of which the serialization has changed + newCallbackData, err := convertCallbackData(oldCallbackData) + if err != nil { + return errorsmod.Wrapf(err, "unable to convert callback data to new schema") + } + newCallbackDataBz, err := cdc.Marshal(&newCallbackData) + if err != nil { + return errorsmod.Wrapf(err, "unable to marshal callback data") + } + + // Set new value on store. + icacallbackStore.Set(iter.Key(), newCallbackDataBz) + } + + return nil +} + +func MigrateStore(ctx sdk.Context, storeKey storetypes.StoreKey, cdc codec.BinaryCodec) error { + store := ctx.KVStore(storeKey) + return migrateCallbacks(store, cdc) +} diff --git a/x/icacallbacks/module.go b/x/icacallbacks/module.go new file mode 100644 index 00000000000..22878c9010c --- /dev/null +++ b/x/icacallbacks/module.go @@ -0,0 +1,158 @@ +package icacallbacks + +import ( + "context" + "encoding/json" + "fmt" + + "cosmossdk.io/core/appmodule" + "github.com/gorilla/mux" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/client/cli" + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/keeper" + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" +) + +var ( + _ module.AppModuleBasic = AppModuleBasic{} + _ module.HasGenesisBasics = AppModuleBasic{} + + _ appmodule.AppModule = AppModule{} + + _ module.HasConsensusVersion = AppModule{} + _ module.HasGenesis = AppModule{} + _ module.HasServices = AppModule{} +) + +// ---------------------------------------------------------------------------- +// AppModuleBasic +// ---------------------------------------------------------------------------- + +// AppModuleBasic implements the AppModuleBasic interface for the capability module. +type AppModuleBasic struct { + cdc codec.BinaryCodec +} + +func NewAppModuleBasic(cdc codec.BinaryCodec) AppModuleBasic { + return AppModuleBasic{cdc: cdc} +} + +// Name returns the capability module's name. +func (AppModuleBasic) Name() string { + return types.ModuleName +} + +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) {} + +// RegisterInterfaces registers the module's interface types +func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) {} + +// DefaultGenesis returns the capability module's default genesis state. +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return cdc.MustMarshalJSON(types.DefaultGenesis()) +} + +// ValidateGenesis performs genesis state validation for the capability module. +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { + var genState types.GenesisState + if err := cdc.UnmarshalJSON(bz, &genState); err != nil { + return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) + } + return genState.Validate() +} + +// RegisterRESTRoutes registers the capability module's REST service handlers. +func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Router) { +} + +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { + err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) + if err != nil { + panic(err) + } +} + +// GetTxCmd returns the capability module's root tx command. +func (a AppModuleBasic) GetTxCmd() *cobra.Command { + return nil +} + +// GetQueryCmd returns the capability module's root query command. +func (AppModuleBasic) GetQueryCmd() *cobra.Command { + return cli.GetQueryCmd(types.StoreKey) +} + +// ---------------------------------------------------------------------------- +// AppModule +// ---------------------------------------------------------------------------- + +// AppModule implements the AppModule interface for the capability module. +type AppModule struct { + AppModuleBasic + + keeper keeper.Keeper + accountKeeper types.AccountKeeper + bankKeeper types.BankKeeper +} + +func NewAppModule( + cdc codec.Codec, + keeper keeper.Keeper, + accountKeeper types.AccountKeeper, + bankKeeper types.BankKeeper, +) AppModule { + return AppModule{ + AppModuleBasic: NewAppModuleBasic(cdc), + keeper: keeper, + accountKeeper: accountKeeper, + bankKeeper: bankKeeper, + } +} + +// Name returns the capability module's name. +func (am AppModule) Name() string { + return am.AppModuleBasic.Name() +} + +// QuerierRoute returns the capability module's query routing key. +func (AppModule) QuerierRoute() string { return types.QuerierRoute } + +// RegisterServices registers a GRPC query service to respond to the +// module-specific GRPC queries. +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterQueryServer(cfg.QueryServer(), am.keeper) +} + +// RegisterInvariants registers the capability module's invariants. +func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} + +// InitGenesis performs the capability module's genesis initialization +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) { + var genState types.GenesisState + cdc.MustUnmarshalJSON(gs, &genState) + am.keeper.InitGenesis(ctx, genState) +} + +// ExportGenesis returns the capability module's exported genesis state as raw JSON bytes. +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + genState := am.keeper.ExportGenesis(ctx) + return cdc.MustMarshalJSON(genState) +} + +// ConsensusVersion implements ConsensusVersion. +func (AppModule) ConsensusVersion() uint64 { return 2 } + +// IsOnePerModuleType implements the depinject.OnePerModuleType interface. +func (am AppModule) IsOnePerModuleType() {} + +// IsAppModule implements the appmodule.AppModule interface. +func (am AppModule) IsAppModule() {} diff --git a/x/icacallbacks/types/acknowledgement_response.go b/x/icacallbacks/types/acknowledgement_response.go new file mode 100644 index 00000000000..5cd79b010cd --- /dev/null +++ b/x/icacallbacks/types/acknowledgement_response.go @@ -0,0 +1,15 @@ +package types + +type AckResponseStatus int + +const ( + AckResponseStatus_SUCCESS AckResponseStatus = iota + AckResponseStatus_TIMEOUT + AckResponseStatus_FAILURE +) + +type AcknowledgementResponse struct { + Status AckResponseStatus + MsgResponses [][]byte + Error string +} diff --git a/x/icacallbacks/types/callback_data.pb.go b/x/icacallbacks/types/callback_data.pb.go new file mode 100644 index 00000000000..1f9b3c2fe9a --- /dev/null +++ b/x/icacallbacks/types/callback_data.pb.go @@ -0,0 +1,564 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/icacallbacks/callback_data.proto + +package types + +import ( + fmt "fmt" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type CallbackData struct { + CallbackKey string `protobuf:"bytes,1,opt,name=callback_key,json=callbackKey,proto3" json:"callback_key,omitempty"` + PortId string `protobuf:"bytes,2,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty"` + ChannelId string `protobuf:"bytes,3,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` + Sequence uint64 `protobuf:"varint,4,opt,name=sequence,proto3" json:"sequence,omitempty"` + CallbackId string `protobuf:"bytes,5,opt,name=callback_id,json=callbackId,proto3" json:"callback_id,omitempty"` + CallbackArgs []byte `protobuf:"bytes,6,opt,name=callback_args,json=callbackArgs,proto3" json:"callback_args,omitempty"` +} + +func (m *CallbackData) Reset() { *m = CallbackData{} } +func (m *CallbackData) String() string { return proto.CompactTextString(m) } +func (*CallbackData) ProtoMessage() {} +func (*CallbackData) Descriptor() ([]byte, []int) { + return fileDescriptor_19b6f19ce856679b, []int{0} +} +func (m *CallbackData) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CallbackData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_CallbackData.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *CallbackData) XXX_Merge(src proto.Message) { + xxx_messageInfo_CallbackData.Merge(m, src) +} +func (m *CallbackData) XXX_Size() int { + return m.Size() +} +func (m *CallbackData) XXX_DiscardUnknown() { + xxx_messageInfo_CallbackData.DiscardUnknown(m) +} + +var xxx_messageInfo_CallbackData proto.InternalMessageInfo + +func (m *CallbackData) GetCallbackKey() string { + if m != nil { + return m.CallbackKey + } + return "" +} + +func (m *CallbackData) GetPortId() string { + if m != nil { + return m.PortId + } + return "" +} + +func (m *CallbackData) GetChannelId() string { + if m != nil { + return m.ChannelId + } + return "" +} + +func (m *CallbackData) GetSequence() uint64 { + if m != nil { + return m.Sequence + } + return 0 +} + +func (m *CallbackData) GetCallbackId() string { + if m != nil { + return m.CallbackId + } + return "" +} + +func (m *CallbackData) GetCallbackArgs() []byte { + if m != nil { + return m.CallbackArgs + } + return nil +} + +func init() { + proto.RegisterType((*CallbackData)(nil), "stride.icacallbacks.CallbackData") +} + +func init() { + proto.RegisterFile("stride/icacallbacks/callback_data.proto", fileDescriptor_19b6f19ce856679b) +} + +var fileDescriptor_19b6f19ce856679b = []byte{ + // 269 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x2f, 0x2e, 0x29, 0xca, + 0x4c, 0x49, 0xd5, 0xcf, 0x4c, 0x4e, 0x4c, 0x4e, 0xcc, 0xc9, 0x49, 0x4a, 0x4c, 0xce, 0x2e, 0xd6, + 0x87, 0xb1, 0xe2, 0x53, 0x12, 0x4b, 0x12, 0xf5, 0x0a, 0x8a, 0xf2, 0x4b, 0xf2, 0x85, 0x84, 0x21, + 0x0a, 0xf5, 0x90, 0x15, 0x2a, 0x9d, 0x66, 0xe4, 0xe2, 0x71, 0x86, 0xf2, 0x5c, 0x12, 0x4b, 0x12, + 0x85, 0x14, 0xb9, 0x78, 0xe0, 0x9a, 0xb3, 0x53, 0x2b, 0x25, 0x18, 0x15, 0x18, 0x35, 0x38, 0x83, + 0xb8, 0x61, 0x62, 0xde, 0xa9, 0x95, 0x42, 0xe2, 0x5c, 0xec, 0x05, 0xf9, 0x45, 0x25, 0xf1, 0x99, + 0x29, 0x12, 0x4c, 0x60, 0x59, 0x36, 0x10, 0xd7, 0x33, 0x45, 0x48, 0x96, 0x8b, 0x2b, 0x39, 0x23, + 0x31, 0x2f, 0x2f, 0x35, 0x07, 0x24, 0xc7, 0x0c, 0x96, 0xe3, 0x84, 0x8a, 0x78, 0xa6, 0x08, 0x49, + 0x71, 0x71, 0x14, 0xa7, 0x16, 0x96, 0xa6, 0xe6, 0x25, 0xa7, 0x4a, 0xb0, 0x28, 0x30, 0x6a, 0xb0, + 0x04, 0xc1, 0xf9, 0x42, 0xf2, 0x5c, 0x70, 0x2b, 0x40, 0x7a, 0x59, 0xc1, 0x7a, 0xb9, 0x60, 0x42, + 0x9e, 0x29, 0x42, 0xca, 0x5c, 0xbc, 0x70, 0x05, 0x89, 0x45, 0xe9, 0xc5, 0x12, 0x6c, 0x0a, 0x8c, + 0x1a, 0x3c, 0x41, 0x70, 0xc7, 0x3a, 0x16, 0xa5, 0x17, 0x3b, 0x05, 0x9c, 0x78, 0x24, 0xc7, 0x78, + 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, + 0x70, 0xe3, 0xb1, 0x1c, 0x43, 0x94, 0x59, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, + 0xae, 0x7e, 0x30, 0x38, 0x1c, 0x74, 0x7d, 0x12, 0x93, 0x8a, 0xf5, 0xa1, 0x81, 0x57, 0x66, 0x64, + 0xa1, 0x5f, 0x81, 0x1a, 0x84, 0x25, 0x95, 0x05, 0xa9, 0xc5, 0x49, 0x6c, 0xe0, 0xb0, 0x33, 0x06, + 0x04, 0x00, 0x00, 0xff, 0xff, 0x8d, 0xc7, 0x33, 0x49, 0x66, 0x01, 0x00, 0x00, +} + +func (m *CallbackData) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CallbackData) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CallbackData) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.CallbackArgs) > 0 { + i -= len(m.CallbackArgs) + copy(dAtA[i:], m.CallbackArgs) + i = encodeVarintCallbackData(dAtA, i, uint64(len(m.CallbackArgs))) + i-- + dAtA[i] = 0x32 + } + if len(m.CallbackId) > 0 { + i -= len(m.CallbackId) + copy(dAtA[i:], m.CallbackId) + i = encodeVarintCallbackData(dAtA, i, uint64(len(m.CallbackId))) + i-- + dAtA[i] = 0x2a + } + if m.Sequence != 0 { + i = encodeVarintCallbackData(dAtA, i, uint64(m.Sequence)) + i-- + dAtA[i] = 0x20 + } + if len(m.ChannelId) > 0 { + i -= len(m.ChannelId) + copy(dAtA[i:], m.ChannelId) + i = encodeVarintCallbackData(dAtA, i, uint64(len(m.ChannelId))) + i-- + dAtA[i] = 0x1a + } + if len(m.PortId) > 0 { + i -= len(m.PortId) + copy(dAtA[i:], m.PortId) + i = encodeVarintCallbackData(dAtA, i, uint64(len(m.PortId))) + i-- + dAtA[i] = 0x12 + } + if len(m.CallbackKey) > 0 { + i -= len(m.CallbackKey) + copy(dAtA[i:], m.CallbackKey) + i = encodeVarintCallbackData(dAtA, i, uint64(len(m.CallbackKey))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintCallbackData(dAtA []byte, offset int, v uint64) int { + offset -= sovCallbackData(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *CallbackData) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.CallbackKey) + if l > 0 { + n += 1 + l + sovCallbackData(uint64(l)) + } + l = len(m.PortId) + if l > 0 { + n += 1 + l + sovCallbackData(uint64(l)) + } + l = len(m.ChannelId) + if l > 0 { + n += 1 + l + sovCallbackData(uint64(l)) + } + if m.Sequence != 0 { + n += 1 + sovCallbackData(uint64(m.Sequence)) + } + l = len(m.CallbackId) + if l > 0 { + n += 1 + l + sovCallbackData(uint64(l)) + } + l = len(m.CallbackArgs) + if l > 0 { + n += 1 + l + sovCallbackData(uint64(l)) + } + return n +} + +func sovCallbackData(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozCallbackData(x uint64) (n int) { + return sovCallbackData(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *CallbackData) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbackData + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CallbackData: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CallbackData: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CallbackKey", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbackData + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbackData + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbackData + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CallbackKey = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PortId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbackData + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbackData + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbackData + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PortId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbackData + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbackData + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbackData + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Sequence", wireType) + } + m.Sequence = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbackData + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Sequence |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CallbackId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbackData + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbackData + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbackData + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CallbackId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CallbackArgs", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbackData + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthCallbackData + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthCallbackData + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CallbackArgs = append(m.CallbackArgs[:0], dAtA[iNdEx:postIndex]...) + if m.CallbackArgs == nil { + m.CallbackArgs = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCallbackData(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbackData + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipCallbackData(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowCallbackData + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowCallbackData + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowCallbackData + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthCallbackData + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupCallbackData + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthCallbackData + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthCallbackData = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowCallbackData = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupCallbackData = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/icacallbacks/types/callbacks.go b/x/icacallbacks/types/callbacks.go new file mode 100644 index 00000000000..3bccae16cd8 --- /dev/null +++ b/x/icacallbacks/types/callbacks.go @@ -0,0 +1,16 @@ +package types + +import ( + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +type ICACallbackFunction func(sdk.Context, channeltypes.Packet, *AcknowledgementResponse, []byte) error + +type ICACallback struct { + CallbackId string + CallbackFunc ICACallbackFunction +} + +type ModuleCallbacks []ICACallback diff --git a/x/icacallbacks/types/codec.go b/x/icacallbacks/types/codec.go new file mode 100644 index 00000000000..e4d4b4af57d --- /dev/null +++ b/x/icacallbacks/types/codec.go @@ -0,0 +1,8 @@ +package types + +import ( + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" +) + +var ModuleCdc = codec.NewProtoCodec(cdctypes.NewInterfaceRegistry()) diff --git a/x/icacallbacks/types/errors.go b/x/icacallbacks/types/errors.go new file mode 100644 index 00000000000..3c5abf81c7c --- /dev/null +++ b/x/icacallbacks/types/errors.go @@ -0,0 +1,18 @@ +package types + +// DONTCOVER + +import errorsmod "cosmossdk.io/errors" + +// x/icacallbacks module sentinel errors +var ( + ErrSample = errorsmod.Register(ModuleName, 1100, "sample error") + ErrInvalidPacketTimeout = errorsmod.Register(ModuleName, 1500, "invalid packet timeout") + ErrInvalidVersion = errorsmod.Register(ModuleName, 1501, "invalid version") + ErrCallbackHandlerNotFound = errorsmod.Register(ModuleName, 1502, "icacallback handler not found") + ErrCallbackIdNotFound = errorsmod.Register(ModuleName, 1503, "icacallback ID not found") + ErrCallbackFailed = errorsmod.Register(ModuleName, 1504, "icacallback failed") + ErrCallbackDataNotFound = errorsmod.Register(ModuleName, 1505, "icacallback data not found") + ErrTxMsgData = errorsmod.Register(ModuleName, 1506, "txMsgData fetch failed") + ErrInvalidAcknowledgement = errorsmod.Register(ModuleName, 1507, "invalid acknowledgement") +) diff --git a/x/icacallbacks/types/events_ibc.go b/x/icacallbacks/types/events_ibc.go new file mode 100644 index 00000000000..c0012b45895 --- /dev/null +++ b/x/icacallbacks/types/events_ibc.go @@ -0,0 +1,12 @@ +package types + +// IBC events +const ( + EventTypeAck = "ack" + EventTypeTimeout = "timeout" + // this line is used by starport scaffolding # ibc/packet/event + + AttributeKeyAckSuccess = "success" + AttributeKeyAck = "acknowledgement" + AttributeKeyAckError = "error" +) diff --git a/x/icacallbacks/types/expected_keepers.go b/x/icacallbacks/types/expected_keepers.go new file mode 100644 index 00000000000..b052d360847 --- /dev/null +++ b/x/icacallbacks/types/expected_keepers.go @@ -0,0 +1,19 @@ +package types + +import ( + context "context" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// AccountKeeper defines the expected account keeper used for simulations (noalias) +type AccountKeeper interface { + GetAccount(ctx context.Context, addr sdk.AccAddress) sdk.AccountI + // Methods imported from account should be defined here +} + +// BankKeeper defines the expected interface needed to retrieve account balances. +type BankKeeper interface { + SpendableCoins(ctx context.Context, addr sdk.AccAddress) sdk.Coins + // Methods imported from bank should be defined here +} diff --git a/x/icacallbacks/types/genesis.go b/x/icacallbacks/types/genesis.go new file mode 100644 index 00000000000..40b65b8fd71 --- /dev/null +++ b/x/icacallbacks/types/genesis.go @@ -0,0 +1,41 @@ +package types + +import ( + "fmt" + + host "github.com/cosmos/ibc-go/v8/modules/core/24-host" +) + +// DefaultIndex is the default capability global index +const DefaultIndex uint64 = 1 + +// DefaultGenesis returns the default Capability genesis state +func DefaultGenesis() *GenesisState { + return &GenesisState{ + PortId: PortID, + CallbackDataList: []CallbackData{}, + // this line is used by starport scaffolding # genesis/types/default + Params: DefaultParams(), + } +} + +// Validate performs basic genesis state validation returning an error upon any +// failure. +func (gs GenesisState) Validate() error { + if err := host.PortIdentifierValidator(gs.PortId); err != nil { + return err + } + // Check for duplicated index in callbackData + callbackDataIndexMap := make(map[string]struct{}) + + for _, elem := range gs.CallbackDataList { + index := string(CallbackDataKey(elem.CallbackKey)) + if _, ok := callbackDataIndexMap[index]; ok { + return fmt.Errorf("duplicated index for callbackData") + } + callbackDataIndexMap[index] = struct{}{} + } + // this line is used by starport scaffolding # genesis/types/validate + + return gs.Params.Validate() +} diff --git a/x/icacallbacks/types/genesis.pb.go b/x/icacallbacks/types/genesis.pb.go new file mode 100644 index 00000000000..ec7b94dca12 --- /dev/null +++ b/x/icacallbacks/types/genesis.pb.go @@ -0,0 +1,439 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/icacallbacks/genesis.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// GenesisState defines the icacallbacks module's genesis state. +type GenesisState struct { + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` + PortId string `protobuf:"bytes,2,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty"` + CallbackDataList []CallbackData `protobuf:"bytes,3,rep,name=callback_data_list,json=callbackDataList,proto3" json:"callback_data_list"` +} + +func (m *GenesisState) Reset() { *m = GenesisState{} } +func (m *GenesisState) String() string { return proto.CompactTextString(m) } +func (*GenesisState) ProtoMessage() {} +func (*GenesisState) Descriptor() ([]byte, []int) { + return fileDescriptor_8c333baddfa20681, []int{0} +} +func (m *GenesisState) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GenesisState.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GenesisState) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenesisState.Merge(m, src) +} +func (m *GenesisState) XXX_Size() int { + return m.Size() +} +func (m *GenesisState) XXX_DiscardUnknown() { + xxx_messageInfo_GenesisState.DiscardUnknown(m) +} + +var xxx_messageInfo_GenesisState proto.InternalMessageInfo + +func (m *GenesisState) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +func (m *GenesisState) GetPortId() string { + if m != nil { + return m.PortId + } + return "" +} + +func (m *GenesisState) GetCallbackDataList() []CallbackData { + if m != nil { + return m.CallbackDataList + } + return nil +} + +func init() { + proto.RegisterType((*GenesisState)(nil), "stride.icacallbacks.GenesisState") +} + +func init() { proto.RegisterFile("stride/icacallbacks/genesis.proto", fileDescriptor_8c333baddfa20681) } + +var fileDescriptor_8c333baddfa20681 = []byte{ + // 278 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x2c, 0x2e, 0x29, 0xca, + 0x4c, 0x49, 0xd5, 0xcf, 0x4c, 0x4e, 0x4c, 0x4e, 0xcc, 0xc9, 0x49, 0x4a, 0x4c, 0xce, 0x2e, 0xd6, + 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x86, + 0x28, 0xd1, 0x43, 0x56, 0x22, 0x25, 0x92, 0x9e, 0x9f, 0x9e, 0x0f, 0x96, 0xd7, 0x07, 0xb1, 0x20, + 0x4a, 0xa5, 0xd4, 0xb1, 0x99, 0x06, 0x63, 0xc5, 0xa7, 0x24, 0x96, 0x24, 0x42, 0x15, 0x2a, 0x60, + 0x53, 0x58, 0x90, 0x58, 0x94, 0x98, 0x0b, 0xb5, 0x55, 0x69, 0x27, 0x23, 0x17, 0x8f, 0x3b, 0xc4, + 0x1d, 0xc1, 0x25, 0x89, 0x25, 0xa9, 0x42, 0x96, 0x5c, 0x6c, 0x10, 0x05, 0x12, 0x8c, 0x0a, 0x8c, + 0x1a, 0xdc, 0x46, 0xd2, 0x7a, 0x58, 0xdc, 0xa5, 0x17, 0x00, 0x56, 0xe2, 0xc4, 0x72, 0xe2, 0x9e, + 0x3c, 0x43, 0x10, 0x54, 0x83, 0x90, 0x38, 0x17, 0x7b, 0x41, 0x7e, 0x51, 0x49, 0x7c, 0x66, 0x8a, + 0x04, 0x93, 0x02, 0xa3, 0x06, 0x67, 0x10, 0x1b, 0x88, 0xeb, 0x99, 0x22, 0x14, 0xca, 0x25, 0x84, + 0xe2, 0xba, 0xf8, 0x9c, 0xcc, 0xe2, 0x12, 0x09, 0x66, 0x05, 0x66, 0x0d, 0x6e, 0x23, 0x45, 0xac, + 0xe6, 0x3b, 0x43, 0x59, 0x2e, 0x89, 0x25, 0x89, 0x50, 0x5b, 0x04, 0x92, 0x91, 0xc4, 0x7c, 0x32, + 0x8b, 0x4b, 0x9c, 0x02, 0x4e, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, + 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, 0xf1, 0x58, 0x8e, 0x21, 0xca, 0x2c, + 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, 0x3f, 0x18, 0x6c, 0xbc, 0xae, 0x4f, + 0x62, 0x52, 0xb1, 0x3e, 0x34, 0x38, 0xca, 0x8c, 0x2c, 0xf4, 0x2b, 0x50, 0x03, 0xa5, 0xa4, 0xb2, + 0x20, 0xb5, 0x38, 0x89, 0x0d, 0x1c, 0x28, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x65, 0x3f, + 0xcf, 0x8c, 0xaf, 0x01, 0x00, 0x00, +} + +func (m *GenesisState) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GenesisState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.CallbackDataList) > 0 { + for iNdEx := len(m.CallbackDataList) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.CallbackDataList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if len(m.PortId) > 0 { + i -= len(m.PortId) + copy(dAtA[i:], m.PortId) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.PortId))) + i-- + dAtA[i] = 0x12 + } + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { + offset -= sovGenesis(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *GenesisState) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovGenesis(uint64(l)) + l = len(m.PortId) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + if len(m.CallbackDataList) > 0 { + for _, e := range m.CallbackDataList { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + return n +} + +func sovGenesis(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenesis(x uint64) (n int) { + return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *GenesisState) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PortId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PortId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CallbackDataList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CallbackDataList = append(m.CallbackDataList, CallbackData{}) + if err := m.CallbackDataList[len(m.CallbackDataList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenesis(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenesis + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenesis + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenesis + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/icacallbacks/types/genesis_test.go b/x/icacallbacks/types/genesis_test.go new file mode 100644 index 00000000000..7eb1796a915 --- /dev/null +++ b/x/icacallbacks/types/genesis_test.go @@ -0,0 +1,63 @@ +package types_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" +) + +func TestGenesisState_Validate(t *testing.T) { + for _, tc := range []struct { + desc string + genState *types.GenesisState + valid bool + }{ + { + desc: "default is valid", + genState: types.DefaultGenesis(), + valid: true, + }, + { + desc: "valid genesis state", + genState: &types.GenesisState{ + PortId: types.PortID, + CallbackDataList: []types.CallbackData{ + { + CallbackKey: "0", + }, + { + CallbackKey: "1", + }, + }, + // this line is used by starport scaffolding # types/genesis/validField + }, + valid: true, + }, + { + desc: "duplicated callbackData", + genState: &types.GenesisState{ + CallbackDataList: []types.CallbackData{ + { + CallbackKey: "0", + }, + { + CallbackKey: "0", + }, + }, + }, + valid: false, + }, + // this line is used by starport scaffolding # types/genesis/testcase + } { + t.Run(tc.desc, func(t *testing.T) { + err := tc.genState.Validate() + if tc.valid { + require.NoError(t, err) + } else { + require.Error(t, err) + } + }) + } +} diff --git a/x/icacallbacks/types/key_callback_data.go b/x/icacallbacks/types/key_callback_data.go new file mode 100644 index 00000000000..e878dcb6f9c --- /dev/null +++ b/x/icacallbacks/types/key_callback_data.go @@ -0,0 +1,25 @@ +package types + +import ( + "encoding/binary" +) + +var _ binary.ByteOrder + +const ( + // CallbackDataKeyPrefix is the prefix to retrieve all CallbackData + CallbackDataKeyPrefix = "CallbackData/value/" +) + +// CallbackDataKey returns the store key to retrieve a CallbackData from the index fields +func CallbackDataKey( + callbackKey string, +) []byte { + var key []byte + + callbackKeyBytes := []byte(callbackKey) + key = append(key, callbackKeyBytes...) + key = append(key, []byte("/")...) + + return key +} diff --git a/x/icacallbacks/types/keys.go b/x/icacallbacks/types/keys.go new file mode 100644 index 00000000000..d5332e8b916 --- /dev/null +++ b/x/icacallbacks/types/keys.go @@ -0,0 +1,37 @@ +package types + +import fmt "fmt" + +const ( + // ModuleName defines the module name + ModuleName = "icacallbacks" + + // StoreKey defines the primary module store key + StoreKey = ModuleName + + // RouterKey is the message route for slashing + RouterKey = ModuleName + + // QuerierRoute defines the module's query routing key + QuerierRoute = ModuleName + + // MemStoreKey defines the in-memory store key + MemStoreKey = "mem_icacallbacks" + + // Version defines the current version the IBC module supports + Version = "icacallbacks-1" + + // PortID is the default port id that module binds to + PortID = "icacallbacks" +) + +// PortKey defines the key to store the port ID in store +var PortKey = KeyPrefix("icacallbacks-port-") + +func KeyPrefix(p string) []byte { + return []byte(p) +} + +func PacketID(portID string, channelID string, sequence uint64) string { + return fmt.Sprintf("%s.%s.%d", portID, channelID, sequence) +} diff --git a/x/icacallbacks/types/packet.pb.go b/x/icacallbacks/types/packet.pb.go new file mode 100644 index 00000000000..c129acb9945 --- /dev/null +++ b/x/icacallbacks/types/packet.pb.go @@ -0,0 +1,502 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/icacallbacks/packet.proto + +package types + +import ( + fmt "fmt" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type IcacallbacksPacketData struct { + // Types that are valid to be assigned to Packet: + // + // *IcacallbacksPacketData_NoData + Packet isIcacallbacksPacketData_Packet `protobuf_oneof:"packet"` +} + +func (m *IcacallbacksPacketData) Reset() { *m = IcacallbacksPacketData{} } +func (m *IcacallbacksPacketData) String() string { return proto.CompactTextString(m) } +func (*IcacallbacksPacketData) ProtoMessage() {} +func (*IcacallbacksPacketData) Descriptor() ([]byte, []int) { + return fileDescriptor_e68b4c401320f2a0, []int{0} +} +func (m *IcacallbacksPacketData) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *IcacallbacksPacketData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_IcacallbacksPacketData.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *IcacallbacksPacketData) XXX_Merge(src proto.Message) { + xxx_messageInfo_IcacallbacksPacketData.Merge(m, src) +} +func (m *IcacallbacksPacketData) XXX_Size() int { + return m.Size() +} +func (m *IcacallbacksPacketData) XXX_DiscardUnknown() { + xxx_messageInfo_IcacallbacksPacketData.DiscardUnknown(m) +} + +var xxx_messageInfo_IcacallbacksPacketData proto.InternalMessageInfo + +type isIcacallbacksPacketData_Packet interface { + isIcacallbacksPacketData_Packet() + MarshalTo([]byte) (int, error) + Size() int +} + +type IcacallbacksPacketData_NoData struct { + NoData *NoData `protobuf:"bytes,1,opt,name=no_data,json=noData,proto3,oneof" json:"no_data,omitempty"` +} + +func (*IcacallbacksPacketData_NoData) isIcacallbacksPacketData_Packet() {} + +func (m *IcacallbacksPacketData) GetPacket() isIcacallbacksPacketData_Packet { + if m != nil { + return m.Packet + } + return nil +} + +func (m *IcacallbacksPacketData) GetNoData() *NoData { + if x, ok := m.GetPacket().(*IcacallbacksPacketData_NoData); ok { + return x.NoData + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*IcacallbacksPacketData) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*IcacallbacksPacketData_NoData)(nil), + } +} + +type NoData struct { +} + +func (m *NoData) Reset() { *m = NoData{} } +func (m *NoData) String() string { return proto.CompactTextString(m) } +func (*NoData) ProtoMessage() {} +func (*NoData) Descriptor() ([]byte, []int) { + return fileDescriptor_e68b4c401320f2a0, []int{1} +} +func (m *NoData) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NoData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_NoData.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *NoData) XXX_Merge(src proto.Message) { + xxx_messageInfo_NoData.Merge(m, src) +} +func (m *NoData) XXX_Size() int { + return m.Size() +} +func (m *NoData) XXX_DiscardUnknown() { + xxx_messageInfo_NoData.DiscardUnknown(m) +} + +var xxx_messageInfo_NoData proto.InternalMessageInfo + +func init() { + proto.RegisterType((*IcacallbacksPacketData)(nil), "stride.icacallbacks.IcacallbacksPacketData") + proto.RegisterType((*NoData)(nil), "stride.icacallbacks.NoData") +} + +func init() { proto.RegisterFile("stride/icacallbacks/packet.proto", fileDescriptor_e68b4c401320f2a0) } + +var fileDescriptor_e68b4c401320f2a0 = []byte{ + // 195 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x28, 0x2e, 0x29, 0xca, + 0x4c, 0x49, 0xd5, 0xcf, 0x4c, 0x4e, 0x4c, 0x4e, 0xcc, 0xc9, 0x49, 0x4a, 0x4c, 0xce, 0x2e, 0xd6, + 0x2f, 0x48, 0x4c, 0xce, 0x4e, 0x2d, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x86, 0xa8, + 0xd0, 0x43, 0x56, 0xa1, 0x14, 0xc5, 0x25, 0xe6, 0x89, 0xc4, 0x0f, 0x00, 0x6b, 0x70, 0x49, 0x2c, + 0x49, 0x14, 0x32, 0xe3, 0x62, 0xcf, 0xcb, 0x8f, 0x4f, 0x49, 0x2c, 0x49, 0x94, 0x60, 0x54, 0x60, + 0xd4, 0xe0, 0x36, 0x92, 0xd6, 0xc3, 0x62, 0x80, 0x9e, 0x5f, 0x3e, 0x48, 0xb5, 0x07, 0x43, 0x10, + 0x5b, 0x1e, 0x98, 0xe5, 0xc4, 0xc1, 0xc5, 0x06, 0xb1, 0x56, 0x89, 0x83, 0x8b, 0x0d, 0x22, 0xeb, + 0x14, 0x70, 0xe2, 0x91, 0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, 0x0f, 0x1e, 0xc9, 0x31, 0x4e, 0x78, + 0x2c, 0xc7, 0x70, 0xe1, 0xb1, 0x1c, 0xc3, 0x8d, 0xc7, 0x72, 0x0c, 0x51, 0x66, 0xe9, 0x99, 0x25, + 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0xc1, 0x60, 0xe3, 0x75, 0x7d, 0x12, 0x93, 0x8a, + 0xf5, 0xa1, 0xbe, 0x29, 0x33, 0xb2, 0xd0, 0xaf, 0x40, 0xf5, 0x53, 0x49, 0x65, 0x41, 0x6a, 0x71, + 0x12, 0x1b, 0xd8, 0x4f, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x12, 0xb0, 0xae, 0x83, 0xf7, + 0x00, 0x00, 0x00, +} + +func (m *IcacallbacksPacketData) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *IcacallbacksPacketData) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IcacallbacksPacketData) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Packet != nil { + { + size := m.Packet.Size() + i -= size + if _, err := m.Packet.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + } + } + return len(dAtA) - i, nil +} + +func (m *IcacallbacksPacketData_NoData) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *IcacallbacksPacketData_NoData) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.NoData != nil { + { + size, err := m.NoData.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintPacket(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} +func (m *NoData) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *NoData) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NoData) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintPacket(dAtA []byte, offset int, v uint64) int { + offset -= sovPacket(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *IcacallbacksPacketData) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Packet != nil { + n += m.Packet.Size() + } + return n +} + +func (m *IcacallbacksPacketData_NoData) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.NoData != nil { + l = m.NoData.Size() + n += 1 + l + sovPacket(uint64(l)) + } + return n +} +func (m *NoData) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovPacket(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozPacket(x uint64) (n int) { + return sovPacket(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *IcacallbacksPacketData) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPacket + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: IcacallbacksPacketData: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: IcacallbacksPacketData: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NoData", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPacket + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthPacket + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthPacket + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &NoData{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Packet = &IcacallbacksPacketData_NoData{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipPacket(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthPacket + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NoData) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPacket + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NoData: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NoData: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipPacket(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthPacket + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipPacket(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowPacket + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowPacket + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowPacket + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthPacket + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupPacket + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthPacket + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthPacket = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowPacket = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupPacket = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/icacallbacks/types/params.go b/x/icacallbacks/types/params.go new file mode 100644 index 00000000000..357196ad6a6 --- /dev/null +++ b/x/icacallbacks/types/params.go @@ -0,0 +1,39 @@ +package types + +import ( + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + "gopkg.in/yaml.v2" +) + +var _ paramtypes.ParamSet = (*Params)(nil) + +// ParamKeyTable the param key table for launch module +func ParamKeyTable() paramtypes.KeyTable { + return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) +} + +// NewParams creates a new Params instance +func NewParams() Params { + return Params{} +} + +// DefaultParams returns a default set of parameters +func DefaultParams() Params { + return NewParams() +} + +// ParamSetPairs get the params.ParamSet +func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { + return paramtypes.ParamSetPairs{} +} + +// Validate validates the set of params +func (p Params) Validate() error { + return nil +} + +// String implements the Stringer interface. +func (p Params) String() string { + out, _ := yaml.Marshal(p) + return string(out) +} diff --git a/x/icacallbacks/types/params.pb.go b/x/icacallbacks/types/params.pb.go new file mode 100644 index 00000000000..8d4c4808e73 --- /dev/null +++ b/x/icacallbacks/types/params.pb.go @@ -0,0 +1,264 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/icacallbacks/params.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// Params defines the parameters for the module. +type Params struct { +} + +func (m *Params) Reset() { *m = Params{} } +func (*Params) ProtoMessage() {} +func (*Params) Descriptor() ([]byte, []int) { + return fileDescriptor_4c402599e6cfed62, []int{0} +} +func (m *Params) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Params.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Params) XXX_Merge(src proto.Message) { + xxx_messageInfo_Params.Merge(m, src) +} +func (m *Params) XXX_Size() int { + return m.Size() +} +func (m *Params) XXX_DiscardUnknown() { + xxx_messageInfo_Params.DiscardUnknown(m) +} + +var xxx_messageInfo_Params proto.InternalMessageInfo + +func init() { + proto.RegisterType((*Params)(nil), "stride.icacallbacks.Params") +} + +func init() { proto.RegisterFile("stride/icacallbacks/params.proto", fileDescriptor_4c402599e6cfed62) } + +var fileDescriptor_4c402599e6cfed62 = []byte{ + // 160 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x28, 0x2e, 0x29, 0xca, + 0x4c, 0x49, 0xd5, 0xcf, 0x4c, 0x4e, 0x4c, 0x4e, 0xcc, 0xc9, 0x49, 0x4a, 0x4c, 0xce, 0x2e, 0xd6, + 0x2f, 0x48, 0x2c, 0x4a, 0xcc, 0x2d, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x86, 0xa8, + 0xd0, 0x43, 0x56, 0x21, 0x25, 0x92, 0x9e, 0x9f, 0x9e, 0x0f, 0x96, 0xd7, 0x07, 0xb1, 0x20, 0x4a, + 0x95, 0xf8, 0xb8, 0xd8, 0x02, 0xc0, 0x5a, 0xad, 0x58, 0x66, 0x2c, 0x90, 0x67, 0x70, 0x0a, 0x38, + 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, + 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0xb3, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, + 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0xfd, 0x60, 0xb0, 0xf9, 0xba, 0x3e, 0x89, 0x49, 0xc5, 0xfa, 0x50, + 0xd7, 0x94, 0x19, 0x59, 0xe8, 0x57, 0xa0, 0xba, 0xa9, 0xa4, 0xb2, 0x20, 0xb5, 0x38, 0x89, 0x0d, + 0x6c, 0x91, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0xc4, 0xac, 0xf9, 0x95, 0xb7, 0x00, 0x00, 0x00, +} + +func (m *Params) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Params) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintParams(dAtA []byte, offset int, v uint64) int { + offset -= sovParams(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Params) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovParams(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozParams(x uint64) (n int) { + return sovParams(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Params) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipParams(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthParams + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipParams(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthParams + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupParams + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthParams + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthParams = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowParams = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupParams = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/icacallbacks/types/query.pb.go b/x/icacallbacks/types/query.pb.go new file mode 100644 index 00000000000..cccb884ff8f --- /dev/null +++ b/x/icacallbacks/types/query.pb.go @@ -0,0 +1,1389 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/icacallbacks/query.proto + +package types + +import ( + context "context" + fmt "fmt" + query "github.com/cosmos/cosmos-sdk/types/query" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// QueryParamsRequest is request type for the Query/Params RPC method. +type QueryParamsRequest struct { +} + +func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } +func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryParamsRequest) ProtoMessage() {} +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_5e73b99abb7e91c2, []int{0} +} +func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsRequest.Merge(m, src) +} +func (m *QueryParamsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo + +// QueryParamsResponse is response type for the Query/Params RPC method. +type QueryParamsResponse struct { + // params holds all the parameters of this module. + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` +} + +func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } +func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryParamsResponse) ProtoMessage() {} +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_5e73b99abb7e91c2, []int{1} +} +func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsResponse.Merge(m, src) +} +func (m *QueryParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo + +func (m *QueryParamsResponse) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +type QueryGetCallbackDataRequest struct { + CallbackKey string `protobuf:"bytes,1,opt,name=callback_key,json=callbackKey,proto3" json:"callback_key,omitempty"` +} + +func (m *QueryGetCallbackDataRequest) Reset() { *m = QueryGetCallbackDataRequest{} } +func (m *QueryGetCallbackDataRequest) String() string { return proto.CompactTextString(m) } +func (*QueryGetCallbackDataRequest) ProtoMessage() {} +func (*QueryGetCallbackDataRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_5e73b99abb7e91c2, []int{2} +} +func (m *QueryGetCallbackDataRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryGetCallbackDataRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryGetCallbackDataRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryGetCallbackDataRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetCallbackDataRequest.Merge(m, src) +} +func (m *QueryGetCallbackDataRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryGetCallbackDataRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetCallbackDataRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryGetCallbackDataRequest proto.InternalMessageInfo + +func (m *QueryGetCallbackDataRequest) GetCallbackKey() string { + if m != nil { + return m.CallbackKey + } + return "" +} + +type QueryGetCallbackDataResponse struct { + CallbackData CallbackData `protobuf:"bytes,1,opt,name=callback_data,json=callbackData,proto3" json:"callback_data"` +} + +func (m *QueryGetCallbackDataResponse) Reset() { *m = QueryGetCallbackDataResponse{} } +func (m *QueryGetCallbackDataResponse) String() string { return proto.CompactTextString(m) } +func (*QueryGetCallbackDataResponse) ProtoMessage() {} +func (*QueryGetCallbackDataResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_5e73b99abb7e91c2, []int{3} +} +func (m *QueryGetCallbackDataResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryGetCallbackDataResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryGetCallbackDataResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryGetCallbackDataResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetCallbackDataResponse.Merge(m, src) +} +func (m *QueryGetCallbackDataResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryGetCallbackDataResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetCallbackDataResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryGetCallbackDataResponse proto.InternalMessageInfo + +func (m *QueryGetCallbackDataResponse) GetCallbackData() CallbackData { + if m != nil { + return m.CallbackData + } + return CallbackData{} +} + +type QueryAllCallbackDataRequest struct { + Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryAllCallbackDataRequest) Reset() { *m = QueryAllCallbackDataRequest{} } +func (m *QueryAllCallbackDataRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAllCallbackDataRequest) ProtoMessage() {} +func (*QueryAllCallbackDataRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_5e73b99abb7e91c2, []int{4} +} +func (m *QueryAllCallbackDataRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllCallbackDataRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllCallbackDataRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryAllCallbackDataRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllCallbackDataRequest.Merge(m, src) +} +func (m *QueryAllCallbackDataRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryAllCallbackDataRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllCallbackDataRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAllCallbackDataRequest proto.InternalMessageInfo + +func (m *QueryAllCallbackDataRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +type QueryAllCallbackDataResponse struct { + CallbackData []CallbackData `protobuf:"bytes,1,rep,name=callback_data,json=callbackData,proto3" json:"callback_data"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryAllCallbackDataResponse) Reset() { *m = QueryAllCallbackDataResponse{} } +func (m *QueryAllCallbackDataResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAllCallbackDataResponse) ProtoMessage() {} +func (*QueryAllCallbackDataResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_5e73b99abb7e91c2, []int{5} +} +func (m *QueryAllCallbackDataResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllCallbackDataResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllCallbackDataResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryAllCallbackDataResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllCallbackDataResponse.Merge(m, src) +} +func (m *QueryAllCallbackDataResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryAllCallbackDataResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllCallbackDataResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAllCallbackDataResponse proto.InternalMessageInfo + +func (m *QueryAllCallbackDataResponse) GetCallbackData() []CallbackData { + if m != nil { + return m.CallbackData + } + return nil +} + +func (m *QueryAllCallbackDataResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil +} + +func init() { + proto.RegisterType((*QueryParamsRequest)(nil), "stride.icacallbacks.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "stride.icacallbacks.QueryParamsResponse") + proto.RegisterType((*QueryGetCallbackDataRequest)(nil), "stride.icacallbacks.QueryGetCallbackDataRequest") + proto.RegisterType((*QueryGetCallbackDataResponse)(nil), "stride.icacallbacks.QueryGetCallbackDataResponse") + proto.RegisterType((*QueryAllCallbackDataRequest)(nil), "stride.icacallbacks.QueryAllCallbackDataRequest") + proto.RegisterType((*QueryAllCallbackDataResponse)(nil), "stride.icacallbacks.QueryAllCallbackDataResponse") +} + +func init() { proto.RegisterFile("stride/icacallbacks/query.proto", fileDescriptor_5e73b99abb7e91c2) } + +var fileDescriptor_5e73b99abb7e91c2 = []byte{ + // 521 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0xcf, 0x6b, 0x13, 0x41, + 0x14, 0xc7, 0x33, 0xb5, 0x06, 0x9c, 0x56, 0x84, 0x69, 0x0f, 0x92, 0x96, 0x6d, 0xbb, 0x07, 0x53, + 0x05, 0x67, 0x9a, 0x08, 0x45, 0x0f, 0xa2, 0xad, 0x3f, 0x7a, 0xb0, 0x87, 0x18, 0x6f, 0x5e, 0xe4, + 0xed, 0x76, 0x58, 0x97, 0x4e, 0x76, 0xb6, 0x99, 0x49, 0x31, 0x88, 0x17, 0xf1, 0xe8, 0x41, 0xf0, + 0xff, 0xf0, 0xe6, 0xc5, 0xbf, 0xa0, 0xc7, 0x82, 0x17, 0x4f, 0x22, 0x89, 0x7f, 0x88, 0x64, 0x66, + 0x5a, 0x77, 0xe9, 0x6c, 0x43, 0x7b, 0x1b, 0x5e, 0xde, 0xf7, 0xfb, 0x3e, 0x6f, 0xdf, 0x97, 0xe0, + 0x15, 0xa5, 0xfb, 0xe9, 0x1e, 0x67, 0x69, 0x0c, 0x31, 0x08, 0x11, 0x41, 0xbc, 0xaf, 0xd8, 0xc1, + 0x80, 0xf7, 0x87, 0x34, 0xef, 0x4b, 0x2d, 0xc9, 0x82, 0x6d, 0xa0, 0xc5, 0x86, 0xc6, 0x9d, 0x58, + 0xaa, 0x9e, 0x54, 0x2c, 0x02, 0xc5, 0x6d, 0x37, 0x3b, 0x6c, 0x45, 0x5c, 0x43, 0x8b, 0xe5, 0x90, + 0xa4, 0x19, 0xe8, 0x54, 0x66, 0xd6, 0xa0, 0xb1, 0x98, 0xc8, 0x44, 0x9a, 0x27, 0x9b, 0xbc, 0x5c, + 0x75, 0x39, 0x91, 0x32, 0x11, 0x9c, 0x41, 0x9e, 0x32, 0xc8, 0x32, 0xa9, 0x8d, 0x44, 0xb9, 0x5f, + 0x9b, 0x3e, 0xaa, 0x93, 0xd7, 0x9b, 0x3d, 0xd0, 0xe0, 0x1a, 0x57, 0x7d, 0x8d, 0x39, 0xf4, 0xa1, + 0xe7, 0xac, 0xc2, 0x45, 0x4c, 0x5e, 0x4e, 0x00, 0x3b, 0xa6, 0xd8, 0xe5, 0x07, 0x03, 0xae, 0x74, + 0xd8, 0xc1, 0x0b, 0xa5, 0xaa, 0xca, 0x65, 0xa6, 0x38, 0x79, 0x80, 0xeb, 0x56, 0x7c, 0x13, 0xad, + 0xa2, 0xf5, 0xb9, 0xf6, 0x12, 0xf5, 0x6c, 0x4f, 0xad, 0x68, 0x7b, 0xf6, 0xe8, 0xf7, 0x4a, 0xad, + 0xeb, 0x04, 0xe1, 0x63, 0xbc, 0x64, 0x1c, 0x77, 0xb8, 0x7e, 0xe2, 0x3a, 0x9f, 0x82, 0x06, 0x37, + 0x90, 0xac, 0xe1, 0xf9, 0x53, 0xfe, 0x7d, 0x3e, 0x34, 0xfe, 0xd7, 0xba, 0x73, 0x27, 0xb5, 0x17, + 0x7c, 0x18, 0x0a, 0xbc, 0xec, 0x77, 0x70, 0x70, 0xbb, 0xf8, 0x7a, 0xe9, 0x13, 0x38, 0xc6, 0x35, + 0x2f, 0x63, 0xd1, 0xc1, 0x91, 0x9e, 0x02, 0x4c, 0x6a, 0x21, 0x77, 0xbc, 0x5b, 0x42, 0xf8, 0x78, + 0x9f, 0x63, 0xfc, 0xff, 0x92, 0x6e, 0xd2, 0x2d, 0x6a, 0xcf, 0x4e, 0x27, 0x67, 0xa7, 0x36, 0x24, + 0xee, 0xec, 0xb4, 0x03, 0x09, 0x77, 0xda, 0x6e, 0x41, 0x19, 0x7e, 0x47, 0x6e, 0xab, 0x33, 0x73, + 0xaa, 0xb7, 0xba, 0x72, 0xe9, 0xad, 0xc8, 0x4e, 0x09, 0x7b, 0xc6, 0x60, 0x37, 0xa7, 0x62, 0x5b, + 0x94, 0x22, 0x77, 0xfb, 0xd3, 0x2c, 0xbe, 0x6a, 0xb8, 0xc9, 0x67, 0x84, 0xeb, 0xf6, 0xe2, 0xa4, + 0xe9, 0x85, 0x3a, 0x1b, 0xaf, 0xc6, 0xfa, 0xf4, 0x46, 0x3b, 0x33, 0x64, 0x1f, 0x7f, 0xfe, 0xfd, + 0x3a, 0x73, 0x9b, 0x34, 0xd9, 0x2b, 0xa3, 0xb8, 0xbb, 0x0b, 0x91, 0x62, 0xd5, 0xa9, 0x26, 0x3f, + 0x10, 0x9e, 0x2f, 0x7e, 0x06, 0xb2, 0x51, 0x3d, 0xcb, 0x9f, 0xc5, 0x46, 0xeb, 0x02, 0x0a, 0x87, + 0xf9, 0xcc, 0x60, 0x3e, 0x22, 0x0f, 0xa7, 0x62, 0x96, 0x8e, 0xc9, 0xde, 0x17, 0x43, 0xff, 0x81, + 0x7c, 0x43, 0xf8, 0x46, 0xd1, 0x7f, 0x4b, 0x88, 0xf3, 0xf8, 0xfd, 0xd9, 0x3c, 0x8f, 0xbf, 0x22, + 0x65, 0xe1, 0xa6, 0xe1, 0xdf, 0x20, 0xf4, 0x62, 0xfc, 0xdb, 0x9d, 0xa3, 0x51, 0x80, 0x8e, 0x47, + 0x01, 0xfa, 0x33, 0x0a, 0xd0, 0x97, 0x71, 0x50, 0x3b, 0x1e, 0x07, 0xb5, 0x5f, 0xe3, 0xa0, 0xf6, + 0x7a, 0x33, 0x49, 0xf5, 0xdb, 0x41, 0x44, 0x63, 0xd9, 0xf3, 0x79, 0x1e, 0xb6, 0xef, 0xb3, 0x77, + 0x65, 0x67, 0x3d, 0xcc, 0xb9, 0x8a, 0xea, 0xe6, 0x6f, 0xe9, 0xde, 0xbf, 0x00, 0x00, 0x00, 0xff, + 0xff, 0x4e, 0xe1, 0x07, 0xbf, 0x79, 0x05, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type QueryClient interface { + // Parameters queries the parameters of the module. + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + // Queries a CallbackData by index. + CallbackData(ctx context.Context, in *QueryGetCallbackDataRequest, opts ...grpc.CallOption) (*QueryGetCallbackDataResponse, error) + // Queries a list of CallbackData items. + CallbackDataAll(ctx context.Context, in *QueryAllCallbackDataRequest, opts ...grpc.CallOption) (*QueryAllCallbackDataResponse, error) +} + +type queryClient struct { + cc grpc1.ClientConn +} + +func NewQueryClient(cc grpc1.ClientConn) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, "/stride.icacallbacks.Query/Params", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) CallbackData(ctx context.Context, in *QueryGetCallbackDataRequest, opts ...grpc.CallOption) (*QueryGetCallbackDataResponse, error) { + out := new(QueryGetCallbackDataResponse) + err := c.cc.Invoke(ctx, "/stride.icacallbacks.Query/CallbackData", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) CallbackDataAll(ctx context.Context, in *QueryAllCallbackDataRequest, opts ...grpc.CallOption) (*QueryAllCallbackDataResponse, error) { + out := new(QueryAllCallbackDataResponse) + err := c.cc.Invoke(ctx, "/stride.icacallbacks.Query/CallbackDataAll", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +type QueryServer interface { + // Parameters queries the parameters of the module. + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + // Queries a CallbackData by index. + CallbackData(context.Context, *QueryGetCallbackDataRequest) (*QueryGetCallbackDataResponse, error) + // Queries a list of CallbackData items. + CallbackDataAll(context.Context, *QueryAllCallbackDataRequest) (*QueryAllCallbackDataResponse, error) +} + +// UnimplementedQueryServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +} +func (*UnimplementedQueryServer) CallbackData(ctx context.Context, req *QueryGetCallbackDataRequest) (*QueryGetCallbackDataResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CallbackData not implemented") +} +func (*UnimplementedQueryServer) CallbackDataAll(ctx context.Context, req *QueryAllCallbackDataRequest) (*QueryAllCallbackDataResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CallbackDataAll not implemented") +} + +func RegisterQueryServer(s grpc1.Server, srv QueryServer) { + s.RegisterService(&_Query_serviceDesc, srv) +} + +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Params(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.icacallbacks.Query/Params", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_CallbackData_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetCallbackDataRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).CallbackData(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.icacallbacks.Query/CallbackData", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).CallbackData(ctx, req.(*QueryGetCallbackDataRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_CallbackDataAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllCallbackDataRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).CallbackDataAll(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.icacallbacks.Query/CallbackDataAll", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).CallbackDataAll(ctx, req.(*QueryAllCallbackDataRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Query_serviceDesc = grpc.ServiceDesc{ + ServiceName: "stride.icacallbacks.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + { + MethodName: "CallbackData", + Handler: _Query_CallbackData_Handler, + }, + { + MethodName: "CallbackDataAll", + Handler: _Query_CallbackDataAll_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "stride/icacallbacks/query.proto", +} + +func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryGetCallbackDataRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryGetCallbackDataRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryGetCallbackDataRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.CallbackKey) > 0 { + i -= len(m.CallbackKey) + copy(dAtA[i:], m.CallbackKey) + i = encodeVarintQuery(dAtA, i, uint64(len(m.CallbackKey))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryGetCallbackDataResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryGetCallbackDataResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryGetCallbackDataResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.CallbackData.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryAllCallbackDataRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryAllCallbackDataRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllCallbackDataRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryAllCallbackDataResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryAllCallbackDataResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllCallbackDataResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.CallbackData) > 0 { + for iNdEx := len(m.CallbackData) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.CallbackData[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *QueryParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryGetCallbackDataRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.CallbackKey) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryGetCallbackDataResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.CallbackData.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryAllCallbackDataRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllCallbackDataResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.CallbackData) > 0 { + for _, e := range m.CallbackData { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryGetCallbackDataRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryGetCallbackDataRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryGetCallbackDataRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CallbackKey", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CallbackKey = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryGetCallbackDataResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryGetCallbackDataResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryGetCallbackDataResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CallbackData", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.CallbackData.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllCallbackDataRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAllCallbackDataRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllCallbackDataRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllCallbackDataResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAllCallbackDataResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllCallbackDataResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CallbackData", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CallbackData = append(m.CallbackData, CallbackData{}) + if err := m.CallbackData[len(m.CallbackData)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipQuery(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthQuery + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupQuery + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthQuery + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/icacallbacks/types/query.pb.gw.go b/x/icacallbacks/types/query.pb.gw.go new file mode 100644 index 00000000000..0874f2e19a5 --- /dev/null +++ b/x/icacallbacks/types/query.pb.gw.go @@ -0,0 +1,337 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: stride/icacallbacks/query.proto + +/* +Package types is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package types + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage +var _ = metadata.Join + +func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := server.Params(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_CallbackData_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetCallbackDataRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["callback_key"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "callback_key") + } + + protoReq.CallbackKey, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "callback_key", err) + } + + msg, err := client.CallbackData(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_CallbackData_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetCallbackDataRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["callback_key"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "callback_key") + } + + protoReq.CallbackKey, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "callback_key", err) + } + + msg, err := server.CallbackData(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_CallbackDataAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Query_CallbackDataAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllCallbackDataRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_CallbackDataAll_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.CallbackDataAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_CallbackDataAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllCallbackDataRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_CallbackDataAll_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.CallbackDataAll(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". +// UnaryRPC :call QueryServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_CallbackData_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_CallbackData_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_CallbackData_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_CallbackDataAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_CallbackDataAll_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_CallbackDataAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterQueryHandler(ctx, mux, conn) +} + +// RegisterQueryHandler registers the http handlers for service Query to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn)) +} + +// RegisterQueryHandlerClient registers the http handlers for service Query +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "QueryClient" to call the correct interceptors. +func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_CallbackData_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_CallbackData_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_CallbackData_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_CallbackDataAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_CallbackDataAll_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_CallbackDataAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"Stride-Labs", "stride", "icacallbacks", "params"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_CallbackData_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"Stride-Labs", "stride", "icacallbacks", "callback_data", "callback_key"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_CallbackDataAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"Stride-Labs", "stride", "icacallbacks", "callback_data"}, "", runtime.AssumeColonVerbOpt(false))) +) + +var ( + forward_Query_Params_0 = runtime.ForwardResponseMessage + + forward_Query_CallbackData_0 = runtime.ForwardResponseMessage + + forward_Query_CallbackDataAll_0 = runtime.ForwardResponseMessage +) diff --git a/x/icacallbacks/types/types.go b/x/icacallbacks/types/types.go new file mode 100644 index 00000000000..ab1254f4c2b --- /dev/null +++ b/x/icacallbacks/types/types.go @@ -0,0 +1 @@ +package types diff --git a/x/icaoracle/LICENSE b/x/icaoracle/LICENSE new file mode 100644 index 00000000000..dd7cc112bbb --- /dev/null +++ b/x/icaoracle/LICENSE @@ -0,0 +1,334 @@ +Stride BSL License Grant + +Business Source License 1.1 https://mariadb.com/bsl11/ + +License text copyright © 2023 MariaDB plc, All Rights Reserved. +“Business Source License” is a trademark of MariaDB plc. + +------------------------------------------------------------------------------------------- + +Licensor: Stride Labs, Inc. + +Licensed Work: Stride Multichain Liquid Staking + ICA Oracle core Cosmos SDK module software + +Additional Use Grant: You may make production use of the Licensed Work only + as part of the Stride blockchain approved by the Stride + on-chain token governance protocols. + +Change Date: For each version, [4] years from the date of release of that version. + +Change License: GNU General Public License version 2 + +------------------------------------------------------------------------------------------- + +Terms + +The Licensor hereby grants you the right to copy, modify, create derivative works, +redistribute, and make non-production use of the Licensed Work. The Licensor may make +an Additional Use Grant, above, permitting limited production use. + +Effective on the Change Date, or the fourth anniversary of the first publicly available +distribution of a specific version of the Licensed Work under this License, whichever +comes first, the Licensor hereby grants you rights under the terms of the Change License, +and the rights granted in the paragraph above terminate. + +If your use of the Licensed Work does not comply with the requirements currently in effect +as described in this License, you must purchase a commercial license from the Licensor, +its affiliated entities, or authorized resellers, or you must refrain from using the +Licensed Work. + +All copies of the original and modified Licensed Work, and derivative works of the +Licensed Work, are subject to this License. This License applies separately for each +version of the Licensed Work and the Change Date may vary for each version of the Licensed +Work released by Licensor. + +You must conspicuously display this License on each original or modified copy of the +Licensed Work. If you receive the Licensed Work in original or modified form from a +third party, the terms and conditions set forth in this License apply to your use of +that work. + +Any use of the Licensed Work in violation of this License will automatically terminate +your rights under this License for the current and all other versions of the Licensed Work. + +This License does not grant you any right in any trademark or logo of Licensor or its +affiliates (provided that you may use a trademark or logo of Licensor as expressly required +by this License).TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED +ON AN “AS IS” BASIS. LICENSOR HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS OR +IMPLIED, INCLUDING (WITHOUT LIMITATION) WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE, NON-INFRINGEMENT, AND TITLE. MariaDB hereby grants you permission to +use this License’s text to license your works, and to refer to it using the trademark +“Business Source License”, as long as you comply with the Covenants of Licensor below. + +------------------------------------------------------------------------------------------- + +Covenants of Licensor + +In consideration of the right to use this License’s text and the “Business Source License” +name and trademark, Licensor covenants to MariaDB, and to all other recipients of the +licensed work to be provided by Licensor: + +To specify as the Change License the GPL Version 2.0 or any later version, or a license +that is compatible with GPL Version 2.0 or a later version, where “compatible” means that +software provided under the Change License can be included in a program with software +provided under GPL Version 2.0 or a later version. Licensor may specify additional Change +Licenses without limitation. +To either: (a) specify an additional grant of rights to use that does not impose any + additional restriction on the right granted in this License, as the + Additional Use Grant; or + (b) insert the text “None” to specify a Change Date. Not to modify this + License in any other way. + +------------------------------------------------------------------------------------------- + +Notice + +The Business Source License (this document, or the “License”) is not an Open Source license. +However, the Licensed Work will eventually be made available under an Open Source License, +as stated in this License. + +------------------------------------------------------------------------------------------- + +This license applies retroactively to the following commits: + +d1a0eae43fa08f3e54910c8f3381af4f3e83aca7 +66ee28b05a5ef086c6924b06e96cb2550e778141 +b2312b8bc5421e857c8ad70f779847aa58330947 +089cfc5d2036f71ab2cd935fb7641d89adafb330 +983a129996acbe2224a406f824d4d08e3b135425 +5ba8816aa89c683154d55900ce22166c406ab8df +bd182094742ca4ae4df654ca8a432362a61d9871 +827e1361c438b08c3b4dec2ecc4a58a3c81643dd +558d25ad8286bde00ec3f63c459eb960a587acfe +e0e98e43140cef0ba78107eb77b5aefcba6e48bd +f7a353ba153cf68aa527239309de5a00206e9017 +f5c4cf7c4f70c371d3e44baabe276dfb72df7149 +59913b1d3f693c70c2aff032fb9c9622e3c2a0d7 +f1c024b1532eccfcf4e6c9e8b365f5d3b75e396f +c277b784d25f8c5ad9da2541216a0530637476ec +d3eb4344e4706be7f0d0b57a60f146ec0d701abd +d61959e77337e3b687b46d8bdbd47fe146eb2ab9 +0e6a03f64447a36d712f8c49642be95f029ed78f +080c326c82dab53a33bb1cba77bb6c4806286664 +624bf8b3649d13d76c30357baa5ea536afd80e3f +9d9ca03bfe7f8d7e59bbec5cb07e24616f1f360e +eacbe486ee428359ee1b80f221991372ce4f9440 +d38e9b4b6cae3ee31c7197601b6cadc40a95ea8d +a69e8a78dc64301079824db9740aaa02ddbde0b0 +d6404304bd962dc5d5f677130b921c4a2c453f39 +885444ccfaba1d5d832c0db15c4ccf8d3a9c16d3 +96182bedd27607ccb11878fbd1e031678a3ab030 +851a4168239aab68366569d56c5be563bc6d2cf7 +a04e6177561969612349605722a2969f8767c271 +6574198cb6223631e6d001d86aa80fe9e7afe766 +608d5de19b8a262feaf295f4b89bf7622b7ab761 +09194a23200e77b7a5502719127a9d6dcee3cd24 +7d7ef654a5891f1371c76ab0eaaf84f6c90c04b7 +71d06f039e565946bffceef89ee75a2a984c94ea +a13239f2949a8a359846e4bbc05b9b87551ae4b3 +bed4b5fe52cb2c936674450c43226345c933960e +2e0911f33b3c70d573c3d482dade6aa90b68943a +05968335993aab7cf9db7f843633449241ebc090 +b8f62e520fd765fe052cbfb684d44f1c3f52c449 +4611788dece762e182f9fe1eb63e3e563ad33696 +8ae50d38d1e307332cf73a9660502418f5b269b7 +89b7604114e201ba5ef5d41f73dc883445d190c7 +4aa716fb3c76e4c46d58683927f7463c94e6a997 +3123f4db2b870ba0e0c52363682d9686609c389f +f02f2dd99036cc28c8e47eeaafc525ecdff06d11 +1a4413ebe139e107b207a1043cf6587be47e5ddc +91d5473d03b59e3cce1645c7ad42a54fc395dbf2 +9c6e796539df223f7e0b8614a1fba6a091070c69 +d6f68acc60c3d3e572bc3e0ac73bdf7825cbb09e +d51949b3400039e2f037c91a12285a2056e375c4 +234d8ac641a82e21c1b762d0965891eb81b8bdfc +3d17661c97ab95a86a690c39600e672afa17eb98 +cca0da9d4a2fe4bb77228437353a064385573f43 +7640b14f58c539847ff7d8758726dd88151eb95a +92b4af44206d71122ca4da0502d7e97ef45e8d36 +e1d1b633078f773d07a1f80f88e094df57d8c8cb +91541b267e1b0f61fab26c1e5a6cb210df096a64 +0c1343865fb8ac255733e559855d40503dec5a41 +e9af246d4c151dfd2b7dfe04fc398c70cde00188 +b44bd1663af0bff06bbc850a1a7bdabf3257554b +fc7fe43674fb9850b4135620bc51a02b3ca96ab8 +95ad02c74440b7c581a6e138a0294f229203c015 +a8eb76937569cb285bb6e870af30afbddfcf1def +c62cfc2c7b11d3d86b1967a5e1a5233298c5d10a +1d5da15cedcda1ea6d707980e024d7b93c684cc5 +2de3b6070c33cbd57471309ca74ea25d4ffaa19d +00fedb03e3579d92b97006ac185b7ed9f6477eb8 +1889bd7ab54834fbc0e639b32b0225e913623268 +bbf0bb7f52878f3205c76bb1e96662fe7bd7af8d +b4abd61a1d2af18c057bb1aa64e992cd456307ec +2a9ead570a02cb0ad34040fe6949814bbfcaa6ec +de99fa592f5624a68fba71bf6913a283231c84d5 +1e641f99d0bd703fdf3ddcf8dcf6e63932316f42 +cd0b74fb7014925d200214cee75691bcb8166632 +2d2f647a35350e3a7ae82b3f095236ff87bbb150 +95fd8085e52ce3b3f52d65d69c011715ead732ee +4db410ed17e17988339d44afe97174ee663e8392 +e75913c837c7de4c25db4a0a477479ff7fbcd65c +b6afb511e1691a4f12a229fb7a0e321c947af493 +050b79eb51066fd2c416001facd75800b102f05f +d4b3e0fbbe1cca74534b73e76deb18deafd7591c +192e9673e3ae97a38491204b9924b43cec529253 +332d797e1cc527dd009d98ecbf9a2bb62179f7eb +882126243ec7b0bcc345a991327a0d4453c428b6 +dfd716634439a253a96fd81dd844a46046955230 +1ea27fe060a0bf37161d75c303bcada84dbf346f +436bf6fc5b979ca669f10b433237b2c5d64bef26 +efbe18edad8a1222bfb5b088985c3226e5d0fd21 +70bfad42f6fe0a789b5ae2c3d6eb42d9f9989078 +055b8f0e93dfd848fa8c2981c0cfea6d0525f1bf +2e7b4a175fd63473af80a528b5556021dc43421c +7bb9b4b3dce4d5f62b2aba98822647b257cdf6fe +94262082d288ac14cc398424d37b563bed97ab24 +2f54693aaa34054d80761aaf8f22fad6891b01cd +ff714bf6999549a82fe61806f7a9c69aef966d9a +4b5d80ac5cafb418debc8a860959d4a6c6797cfb +f61119edb643300bed3b5dd250a393733092daee +995bfb355660a0a86ecbdbc6f0d77c0dd3386507 +6719a44bc2366f675a96d4df3c82a73ab475c314 +a3eff2dc5a33a64bd86341b40f980ce58a736b11 +6a0c44ad1fa5dd50802fba214657d7e35972421f +c9667a85ce282fdca84dcc5467001253ec26d02c +5514e479035cd11e34fed21000479ce659bad0de +5383d57ab52092d8f03dba58e9b126db309d6344 +b49bf45ebb2da5dae4feb12621103d35675556ef +4de878d15a3c4b73ec1d7c4cfb5a02d7d1e1cebf +c74f8f28c9bbc794e70f5ded0af6930d2d10a3a8 +7eea5eea66973241edbb4261c1408410bfffc4e3 +7a332fc5e690b71c10b48b6630cba1488fa2f90b +b89d88ce02a23ca01fc574ae1c1a0226a9b2ef74 +4871518a47d1fc0e570e13d11f2c6bf5ece775eb +eddf1eae49e669432dfcce56d28ec71f67f8cff6 +6aac1d5bb2c4f6cbc00ed0c31793cfc091f7550f +fc7052268cd21c941dfebcb9560123e40e14e5b8 +59b0480e13de4680ab464efc1ee4eda338ccf934 +0f8b0da4b4f3803e7cf4346a93fcadf53131cb80 +e50637c3c9dd52c152583df42d806db01f254d7d +0fb5fb6c014338a7837a569ba5b081235fd9af8a +3aeb075f36cb12711201a7f17e8b8d856bd99a01 +c6c05e5294074ccb2aea486110a45a103bb61a99 +3b968fef62e2d886117f0b70fb94984c44b2be80 +2172b238c4ca2a1f8daf9bf88a430695943edc3d +936c33fa39350c6fe2aeba8813057a1a03575595 +778ed925150730902a40c4cbf749a51ddacfa52e +2c406549d8c91ebd483896e0973cb37d025fff05 +d59a8a099d09b7356d4d2b2ca2358bb229c8385b +6df1ba5787d52a34b45daef45a5a65ea8d847d8e +c88b52e34a484fe1e055b58abfce86bc19932990 +b8d51526d30e947a9b17a74b93d551380632b79c +62295e3818de10c13295855d8fc8a224aff3bc70 +332394936f57b87ad0b2987572eaa1cade5ce68b +3a5c7bfcc3b8c5e7dd870f01bebeb9d949492203 +edeffb320bc93c3cc6f3cabc5d2ce18448bebae0 +16dee3e4e3645f3118aa30a45159801873cd8bd4 +3c69e7644859981b1fd9313eb1f0c5e5886e4a0d +f305dc16fb91ec6526292ab039c8dd29a66f619b +a7ebe87c7d133b1d40de6d6c3297777f233d61fd +d16d7f2676dc6182dd0fd655530136ff3e5780ad +31c5dc412019e2e69ccf9cba8fcc5d793ccd6a64 +0a42766e900310ce31a9b0b62354229924cb1ee9 +29fce22718002c5bcc76e0dc889f80cd4e392804 +4ce1317073f4119a891229530677603c10e5700c +7e7335a6466abc13fd51aed1f7c76d621fb3d524 +75f6b6b06fa9058b200eba9395f4b516941bba69 +5868b82b60e8548f8e791f1d90dfa9c05031127f +4febc230f40dba8c7e1d6443677f8eb0ba34c00a +26aaf00e636c317e5a57cc29a973e1f476072976 +ef4808d4095c3da3c4f35e1b37495b5813624d14 +0510592d5bc000ad555717ac524e1d081d01aa7b +563bc25b341c85c8e09d4499f5b3f810338ded60 +9bc47dc4efb3ebbbbb8a50fd5b371cb5a37bfb14 +bdd05b0f39317e9ce428508fdcda0d66bd2a0ce1 +3d4ba729cfd2529730fdccdb8ee0fdfe151413bd +0a325deddc0bac58cc43e650773cc3408eabc011 +ddc951a7656423c7277671ea89a4fff9b8d0be6f +f07ff73bd957a6e23afb5c7ec48a6d2334e0d5d7 +b3196d2b3fca62b72b2ba451237379b0747f7b1c +616b1503dfd97e349208d5e2b3180fb386615ae4 +5ff42a93b189a240f8cc0ac0a750ac4cd26272f7 +1c173fed57418bea8fbb19240245757708f25472 +85e76ec9b932f0b5bf5617677d1b8306fd33298f +9b17edfe62a752865eaa9b7b95103345d5c66448 +b7371d7b4e02e40cc979d0a0e417113276e3b8a3 +d4822a528d596ec86b4891c4ae0783ec386fa687 +e71ef6ccdf42ac87ca0e36dcf3200aa521b9ca11 +7b6c260d9c9670b254ace3cdb61254b5f419f3fb +1a950623255621d1c81011e6d6530db1988e5704 +353998347af20ae14967e5da73a3f9059c0e1826 +79817ae6defe15f90dfa70136423a19897d7d781 +25d0284ccdd26e64bcd3b3054304bc46403b1736 +4021f78bf37dd3c3b78b692220a6ec7982dadc00 +18c8293514004daf7dcf190c067f4fa2b6688a05 +314e233d75169223765dc8ba0e0d51401398f9cc +15460fc280d3f70dbecd3cea777ad932b3e06768 +c3df52d178ebe1e7e3ccf0a697bec3a9fecfdc48 +692fecc777402951d0df24b1456dca0255b2f9c5 +4cf5bb43130aabb194f022c8bae9526b0b9ca8f6 +f38c2bea4e997751d520388c47382219ed052e76 +b145bbfd7536c4ba4b791c0dd3a56a481dca28ac +4cfce957d948354787f2a8b5224ed92f0612ac09 +831d1a89aece783c3b06b6d5ebefacd94c171574 +7414ce9a4c273a92f7a033cb2552eff651c25143 +c7ae1f558fd4773c6ffbf948ff996976ed45ce5a +645430c514953203ec284e9f1d224f32e516b2b0 +57170c43486e99e0d1c66ae81a43d447e2c5ca72 +3f6816ba8e2de8615660ee67cf11ef4a249d0f44 +46886422ad2bd467732f468130b45ddc54fcf578 +8bce92c2d07c17dfdd242a60c53efea11dd2149a +be3363590b32ecc5fe20b283d9ed790c3cff2838 +94e3a91dc582218a477771d9a694966bf901fdf5 +f95e0bbf9f76b1cc676945b4f55cdc1f53101cb4 +60320e3b2d62879e1f74ee2a9cfa202e665f7d8e +cafe83839a368bb5943226adc8086ba0a192caef +b3a8faf1ea6f5e312e7e4134adff2e563d0d46f7 +827a5c72befd1fb7464f6a1b33acd74f46b2840f +5391e3295d2a8636cc975ac36bfc03fab9e45dcb +bcd228d680f74da19a10eba070575c40de724404 +7e9e7c703f3f36887647caf5b7956b2c869a711a +abc704a9039d5dfd11d12205f42e1c28b05ab4a2 +b746e63906b13b47ff719a60c907f87b8648eaed +26b1c05a8fdd3729121170ad5b546cd63bf0931b +8bad60bb7d0d9922f0fa991fc7ee061a5e78a527 +533bb921e8add98bd110d658aa42f920dec5b5be +4b1c63332452b2772dc1b26b47547975b8cbd8e0 +65a10d6dea3a95833c0df6d894a889219cd10d66 +54358c34cb31d2363c0af24ded9b809f000a8835 +058f58ae3d92c3f1c83feb5bbf028f6f0f4ebc18 +7d212ae5bc2a3453f2dc5158fd20890129295e63 +e6c9032cb0836d95da61158e6cefde0b09acfdc7 +089cfc5d2036f71ab2cd935fb7641d89adafb330 +bd182094742ca4ae4df654ca8a432362a61d9871 +827e1361c438b08c3b4dec2ecc4a58a3c81643dd +558d25ad8286bde00ec3f63c459eb960a587acfe +e0e98e43140cef0ba78107eb77b5aefcba6e48bd +f7a353ba153cf68aa527239309de5a00206e9017 +f5c4cf7c4f70c371d3e44baabe276dfb72df7149 +2e0911f33b3c70d573c3d482dade6aa90b68943a +05968335993aab7cf9db7f843633449241ebc090 +4611788dece762e182f9fe1eb63e3e563ad33696 +91d5473d03b59e3cce1645c7ad42a54fc395dbf2 +9c6e796539df223f7e0b8614a1fba6a091070c69 +e9af246d4c151dfd2b7dfe04fc398c70cde00188 +b44bd1663af0bff06bbc850a1a7bdabf3257554b +fc7fe43674fb9850b4135620bc51a02b3ca96ab8 +95ad02c74440b7c581a6e138a0294f229203c015 +c62cfc2c7b11d3d86b1967a5e1a5233298c5d10a +1d5da15cedcda1ea6d707980e024d7b93c684cc5 +2de3b6070c33cbd57471309ca74ea25d4ffaa19d +1889bd7ab54834fbc0e639b32b0225e913623268 +22537f60fe249d744387cfbd338766f982d1cbcd +e8cf6ac80afdefcd2c13f5eb433eacbf61c7c84c +533bb921e8add98bd110d658aa42f920dec5b5be +1e8fa3465fea99f092b49d53ee71e0f8db06c390 +0336771c560990b30d8beef4c56f74bafed7478b +13bc64c16db6a3bd4b4923b52cc9d8378bc43fd3 +a136c6e5e417f995f477eb6e8e68e636c6a39c09 +f4d748a3d013c5b36b608769d779409b933a2062 +dfb27c6a0ece3b3f6af4a6c4213c03273bdbf6bd +13da90899d75f15ae493f7516a87d54975bca84c +219311d74cc14006ef6f327683a12d243b57546e +4b1c63332452b2772dc1b26b47547975b8cbd8e0 \ No newline at end of file diff --git a/x/icaoracle/README.md b/x/icaoracle/README.md new file mode 100644 index 00000000000..9fb1302e222 --- /dev/null +++ b/x/icaoracle/README.md @@ -0,0 +1,172 @@ +--- +title: "ICA Oracle" +excerpt: "" +category: 6392913957c533007128548e +--- + +# ICA Oracle Module + +## Overview +The `icaoracle` facilities trustless data publication to cosmwasm outposts on adjacent chains. The full ICA Oracle solution consists of two components: the `icaoracle` module deployed on the _source_ chain (described here), as well as a corresponding cosmwasm oracle contract deployed on the _destination_ chain. The contract features a standard key-value store, that accepts push messages from this module via interchain accounts. The data sent is referred to as a `Metric`. For Stride, the primary application of this module is to enable integrations to trustlessly retrieve the redemption rate (internal exchange rate) of stTokens. + +Some key features of this module are: +* **Trustless**: The solution uses interchain accounts which allows the data to be transmitted and retrieved with the same trust properties as IBC +* **Easy adoption to other chains**: Since the destination chain's oracle is deployed as a contract, it can be easily added to any chain with cosmwasm. There is no need for those chains to upgrade. +* **Generic key-value store**: While the immediate use case of this module is for the redemption rate, the oracle uses a generic key-value format that should work with any metric +* **High throughput/low latency**: ICAs are triggered as soon as possible, which eliminates a hop compared to interchain queries +* **Support for multiple oracles**: Each metric can be simultaneously pushed to multiple CW outposts + +### Setup +Before data can be transmitted, there are a few setup steps required: +1. The contract must be stored on the cosmwasm chain (destination chain) +2. A connection must exist between the source and destination chain +3. The oracle must be added to the source chain using the `add-oracle` transaction. This transaction will begin the registration on the source chain and create an interchain account on the destination chain. The interchain account will be responsible for instantiating the contract and posting metrics. +4. After the oracle is added, the `instantiate-oracle` transaction must be submitted which will submit an interchain account message (`MsgInstantiateContract`) to instantiate the oracle contract with the interchain account's address as the contract admin. + +### Pushing Metrics +After an oracle is registered, metrics can be posted on-chain using the `QueueMetricUpdate` function. This will queue the data so that it can be pushed to each registered oracle. In the `EndBlocker` after the metric is queued, an interchain account message (`MsgExecuteContract{MsgPostMetric}`) will be submitted to post the value to the oracle. + +## Diagrams +### Setup +![alt text](https://github.com/Stride-Labs/stride/blob/main/x/icaoracle/docs/setup.png?raw=true) +### Pushing Metrics +![alt text](https://github.com/Stride-Labs/stride/blob/main/x/icaoracle/docs/pushing.png?raw=true) +### Metric Status +![alt text](https://github.com/Stride-Labs/stride/blob/main/x/icaoracle/docs/metric-status.png?raw=true) + +## Implementation +### State +```go +Oracle + ChainId string + ConnectionId string + ChannelId string + PortId string + ICAAddress string + ContractAddress string + Active bool + +Metric + Key string + Value string + MetricType string + UpdateTime int64 + BlockHeight int64 + Attributes string + DestinationOracle string + Status (enum: QUEUED/IN_PROGRESS) +``` + +### Keeper functions +#### Oracles +```go +// Stores/updates an oracle object in the store +func SetOracle(oracle types.Oracle) + +// Grabs and returns an oracle object from the store using the chain-id +func GetOracle(chainId string) (oracle types.Oracle, found bool) + +// Returns all oracles +func GetAllOracles() []types.Oracle + +// Removes an oracle from the store +func RemoveOracle(chainId string) + +// Toggle whether an oracle is active +func ToggleOracle(chainId string, active bool) error + +// Grab's an oracle from it's connectionId +func GetOracleFromConnectionId(connectionId string) (oracle types.Oracle, found bool) + +// Checks if the oracle ICA channel is open +func IsOracleICAChannelOpen(oracle types.Oracle) bool +``` + +#### Metrics +```go +// Stores a metric in the main metric store and then either +// adds the metric to the queue or removes it from the queue +// depending on the status of the metric +func SetMetric(metric types.Metric) + +// Gets a specifc metric from the store +func GetMetric(metricId string) (metric types.Metric, found bool) + +// Returns all metrics from the store +func GetAllMetrics() (metrics []types.Metric) + +// Removes a metric from the store +func RemoveMetric(metricId string) + +// Updates the status of a metric which will consequently move it either +// in or out of the queue +func UpdateMetricStatus(, metric types.Metric, status types.MetricStatus) + +// Adds a metric to the queue, which acts as an index for all metrics +// that should be submitted to it's relevant oracle +func addMetricToQueue(metricKey []byte) + +// Removes a metric from the queue +func removeMetricFromQueue(, metricKey []byte) + +// Returns all metrics from the index queue +func GetAllQueuedMetrics() (metrics []types.Metric) +``` + +### Transactions +```go +// Adds a new oracle +AddOracle(connectionId string) + +// Instantiates the oracle's CW contract +InstantiateOracle(oracleChainId string, contractCodeId uint64) + +// Restore's a closed ICA channel for a given oracle +RestoreOracleICA(oracleChainId string) + +// Toggle's whether an oracle is active and should receive metric updates +ToggleOracle(oracleChainId string, active bool) [Governance] + +// Removes an oracle completely +RemoveOracle(oracleChainId string) [Governance] +``` + +### Queries +```go +// Query a specific oracle +// /Stride-Labs/stride/icaoracle/oracle/{chain_id} +Oracle(oracleChainId string) + +// Query all oracles +// /Stride-Labs/stride/icaoracle/oracles +AllOracles() + +// Query metrics with optional filters +// +// Ex: +// - /Stride-Labs/stride/icaoracle/metrics +// - /Stride-Labs/stride/icaoracle/metrics?metric_key=X +// - /Stride-Labs/stride/icaoracle/metrics?oracle_chain_id=Y +Metrics(metricKey, oracleChainId string) +``` + +### Business Logic +```go +// Queues an metric update across each active oracle +// One metric record is created for each oracle, in status QUEUED +// This is called by the modules that want to publish metrics +func QueueMetricUpdate(key, value, metricType, attributes string) + +// For each queued metric, submit an ICA to each oracle, and then flag the metric as IN_PROGRESS +// This is called each block in the EndBlocker +func PostAllQueuedMetrics() +``` + +### ICA Callbacks +```go +// Callback after an oracle is instantiated +func InstantiateOracleCallback() + +// Callback after a metric is published +func UpdateOracleCallback() +``` diff --git a/x/icaoracle/client/cli/query.go b/x/icaoracle/client/cli/query.go new file mode 100644 index 00000000000..692b6b950e5 --- /dev/null +++ b/x/icaoracle/client/cli/query.go @@ -0,0 +1,189 @@ +package cli + +import ( + "context" + "fmt" + "strconv" + "strings" + + "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/version" + "github.com/gogo/protobuf/proto" + + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +const ( + FlagMetricKey = "metric-key" + FlagOracleChainId = "oracle-chain-id" + FlagActive = "active" +) + +// GetQueryCmd returns the cli query commands for this module. +func GetQueryCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: types.ModuleName, + Short: fmt.Sprintf("Querying commands for the %s module", types.ModuleName), + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + cmd.AddCommand( + GetCmdQueryOracle(), + GetCmdQueryOracles(), + GetCmdQueryMetrics(), + ) + + return cmd +} + +// GetCmdQueryOracle implements a command to query a specific oracle using the oracle's chain ID +func GetCmdQueryOracle() *cobra.Command { + cmd := &cobra.Command{ + Use: "oracle [chain-id]", + Short: "Queries a specific oracle", + Long: strings.TrimSpace( + fmt.Sprintf(`Queries a specific oracle using the oracle's chain ID +Example: + $ %s query %s oracle [chain-id] +`, version.AppName, types.ModuleName), + ), + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + chainId := args[0] + + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + req := &types.QueryOracleRequest{ + ChainId: chainId, + } + res, err := queryClient.Oracle(context.Background(), req) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + return cmd +} + +// GetCmdQueryOracles implements a command to query all oracles with an optional "active" filter +func GetCmdQueryOracles() *cobra.Command { + cmd := &cobra.Command{ + Use: "oracles", + Short: "Queries all oracles", + Long: strings.TrimSpace( + fmt.Sprintf(`Queries all oracles with an optional "active" filter +Examples: + $ %[1]s query %[2]s oracles + $ %[1]s query %[2]s oracles --active true + $ %[1]s query %[2]s oracles --active false +`, version.AppName, types.ModuleName), + ), + Args: cobra.ExactArgs(0), + RunE: func(cmd *cobra.Command, args []string) error { + activeString, err := cmd.Flags().GetString(FlagActive) + if err != nil { + return err + } + + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + // If no active flag is passed, return all oracles + var res proto.Message + if activeString == "" { + req := &types.QueryAllOraclesRequest{} + res, err = queryClient.AllOracles(context.Background(), req) + if err != nil { + return err + } + } else { + // Otherwise, filter using the active flag + activeBool, err := strconv.ParseBool(activeString) + if err != nil { + return err + } + req := &types.QueryActiveOraclesRequest{ + Active: activeBool, + } + res, err = queryClient.ActiveOracles(context.Background(), req) + if err != nil { + return err + } + } + + return clientCtx.PrintProto(res) + }, + } + + cmd.Flags().String(FlagActive, "", "Filter only active oracles") + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +// GetCmdQueryMetrics implements a command to query metrics with optional +// key and/or oracle chain-id filters +func GetCmdQueryMetrics() *cobra.Command { + cmd := &cobra.Command{ + Use: "metrics", + Short: "Queries all metric update ICAs", + Long: strings.TrimSpace( + fmt.Sprintf(`Queries all metrics with optional filters +Examples: + $ %[1]s query %[2]s metrics + $ %[1]s query %[2]s metrics --metric-key=[key] + $ %[1]s query %[2]s metrics --oracle-chain-id=[chain-id] +`, version.AppName, types.ModuleName), + ), + Args: cobra.ExactArgs(0), + RunE: func(cmd *cobra.Command, args []string) error { + metricKey, err := cmd.Flags().GetString(FlagMetricKey) + if err != nil { + return err + } + oracleChainId, err := cmd.Flags().GetString(FlagOracleChainId) + if err != nil { + return err + } + + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + // If no filters are passed, return all pending metrics + req := &types.QueryMetricsRequest{ + MetricKey: metricKey, + OracleChainId: oracleChainId, + } + res, err := queryClient.Metrics(context.Background(), req) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + cmd.Flags().String(FlagMetricKey, "", "The metric key") + cmd.Flags().String(FlagOracleChainId, "", "The oracle chain ID") + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} diff --git a/x/icaoracle/client/cli/tx.go b/x/icaoracle/client/cli/tx.go new file mode 100644 index 00000000000..0e9ab4ad8ac --- /dev/null +++ b/x/icaoracle/client/cli/tx.go @@ -0,0 +1,150 @@ +package cli + +import ( + "fmt" + "strconv" + "strings" + + "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/client/tx" + "github.com/cosmos/cosmos-sdk/version" + + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +// GetTxCmd returns the transaction commands for this module +func GetTxCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: types.ModuleName, + Short: fmt.Sprintf("%s transactions subcommands", types.ModuleName), + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + cmd.AddCommand( + CmdAddOracle(), + CmdInstantiateOracle(), + CmdRestoreOracleICA(), + ) + + return cmd +} + +// Adds a new oracle given a provided connection and registers the oracle ICA +func CmdAddOracle() *cobra.Command { + cmd := &cobra.Command{ + Use: "add-oracle [connection-id]", + Short: "Adds an oracle as a destination for metric updates", + Long: strings.TrimSpace( + fmt.Sprintf(`Registers a new oracle ICA as a destination for metric updates. +Must provide the ID of an existing connection. + +Example: + $ %[1]s tx %[2]s add-oracle connection-0 +`, version.AppName, types.ModuleName), + ), + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + connectionId := args[0] + + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := types.NewMsgAddOracle( + clientCtx.GetFromAddress().String(), + connectionId, + ) + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +// Instantiates an oracle cosmwasm contract +func CmdInstantiateOracle() *cobra.Command { + cmd := &cobra.Command{ + Use: "instantiate-oracle [oracle-chain-id] [contract-code-id] [transfer-channel-on-oracle]", + Short: "Instantiates an oracle cosmwasm contract", + Long: strings.TrimSpace( + fmt.Sprintf(`Submits an ICA to instantiate the oracle cosmwasm contract. +Must provide the codeID of a cosmwasm contract that has already been uploaded to the host chain, +as well as the transfer channel ID as it lives on the oracle's chain. + +Example: + $ %[1]s tx %[2]s instantiate-oracle osmosis-1 1000 channel-0 +`, version.AppName, types.ModuleName), + ), + Args: cobra.ExactArgs(3), + RunE: func(cmd *cobra.Command, args []string) error { + chainId := args[0] + contractCodeId, err := strconv.ParseUint(args[1], 10, 64) + if err != nil { + return err + } + transferChannelOnOracle := args[2] + + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := types.NewMsgInstantiateOracle( + clientCtx.GetFromAddress().String(), + chainId, + contractCodeId, + transferChannelOnOracle, + ) + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +// Restores the oracle ICA channel after a channel closure +func CmdRestoreOracleICA() *cobra.Command { + cmd := &cobra.Command{ + Use: "restore-oracle-ica [oracle-chain-id]", + Short: "Restores an oracle ICA channel", + Long: strings.TrimSpace( + fmt.Sprintf(`After a channel closure, creates a new oracle ICA channel and restores the ICA account + +Example: + $ %[1]s tx %[2]s restore-oracle-ica osmosis +`, version.AppName, types.ModuleName), + ), + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + chainId := args[0] + + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := types.NewMsgRestoreOracleICA( + clientCtx.GetFromAddress().String(), + chainId, + ) + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} diff --git a/x/icaoracle/docs/metric-status.png b/x/icaoracle/docs/metric-status.png new file mode 100644 index 0000000000000000000000000000000000000000..01342b1426079aa63899774df19489fab2462666 GIT binary patch literal 67175 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%0DT|h|AjO=?@ms)QJrY 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
w=R^B7&3?3r*>zuU-{$K*bB$Wx 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 P$p8eNu6{1-oD!MmcyxCN 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≫?O^~d2N-beBN#$TxzD! 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%0ATXM$~%F+8A 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

TiTLD>&;7!A z$(+D3#RQ)QPIR4^R)H86oW(T~SoS7*B0kf@?f~M5=4B9sLo`&U5BDiLCg$)ZkAcVd zVWL9>wG|=4We9~B_(VjF4&DC&-N@!oDOHaMX9g_P<)0%x6wM6a$GIJj?;33)`ElGb z3Q4Ce`ZG0#9p5ByIKT#y1gN76;Ls>p;M4pTiO2;xfggmhb zpcib(Yx)pe|F%CuNK0QC0DTGt(-WnMYI0>*fKw23LMrz%p zMlply8u?&jsXphMs1TQt%^8q%=)pf)LIsrH-2VW~Dhp^1J~{-f^D?6HA%B=vs#E4v zp6MlsxY2nhvlT7Ia7~1a_BD7I+Nt_Yw2AW28)q|vA(DuA!4nN!4B(Ro=K%le4^2c1 z=Wx2?FjfRg!{77b$+irFom5WtrZ_8C_awplvVvwph`)oV`PW!R_IGLwof&HXw)eY8)BkG~_rKg{ zn>J?G`3;x$+!1E~Tfe_0>>#<1M*ZE4{LpTCR?wmZDmZD=Y2mhwDU$`FWP9!iYyT9V z?dY_>DYbUX%WageKdxSGo=lSvm?OU6!l4QN0Gl`>7^fk4q`^OYxka>UOxb`Fmt+iQ zELWdBp@#7fc1dR>j#GarB^n}J>3};xar)C1Jdzlz!GC&&1pZ^niNJr{f1vAB`=8lL zUS#K`Js8H=OV3qfJg!q$i0Ec^ZDRMkaOmRX1-FqRTQ!DoeuF{dnFr0}4~F%W4s{VI zup24qK%=Ywc9jEXrT%uxS5s zUdXFfmbCMc;|~7llP(lbr%yuzJe1gnOrn61!M291DuGA9NX>$4QQNo&M;c|4f8tL9 z3G(_Q!WaG>{27i|_%uWF=B0KQFA`l`z&W0V4!-K;;46;n9Lf!Uux5=`wuJCUcIlIe z=_Oc%*ueq3yhyAL4n&p__!Ay6eFvPCRL+3|^cU+bH68`Q5X`NiAgK1DpVe@j{MHqJlC~91!)da+P}%*RGy3?js9^s#(%WzPct2H_E+!V z+6R;5b&-8c>WuY2E|Rh94=Xrj-#B9KKivKHy#K{(RbTkoxGKiQTOS-OFpv+Cc+^$> zyPZK<-E;0J&PbZ|d>+;<(5l*xy&#;l#`xPFN0R*o7it@7dyv|nI1fHiOknM~+~hco z&*f^A0DVXNHw|skbO+4qM)U^*k(gqEI`mN-xsw%T3^y%Gf}>0#DPfmK;{} z4|D+HMA&3tfU5f=b!js%$9UgS$>D`N*M z8MV6$a0}JzNaZOk!0kE)|H?H{N~?b6Rib@6p{WA_WM|dF$ZdyaoHcJxi_qb1=PYdw zh;|Yq1|v1fge=o!5XFF`M)KPJiY{i6k^Tva4r0)iWmA^!{ofI~VZ*#%dzuF7NS;PL z?RinVN$PvGPrDq0j*b(Us2$(`I|C2%M|SkbM#T<5WOwL>*ye6C1c>`{|H zIn{pG(QN0pWV`1FJImY|np#3K=QF*>{>fkUlLur|fA&e;b4~lV4IbyyKy`ai`+q1A z!lis;{KFoHsr|Eg)a9C+MbrPY4MT&+cK?(9zIW?_v@@aV+`Y!euD|RpVVtgQ^8RBR zsx$HY?Q|)hrq*cPe`pKOOUsLDISauDOm{Fr_h9Cy1rxwu#q3}NA29ud7o}4Vz&u_26A`j8y%jIAIUiUKM=a0Yu!*B<6SV_+ok>)&D~5PB6+&_7yU!IXb{51!&ai-`+ zRTY+eL*mt6r&V__Vps-Azj20B2hx&K(64qoG= z8jJS7^#%pF)Ko?F(UEZfcVFwuUhN-^*wJ74U40t+tL|g&`QK^8ru`3h{kh-M7HXxs z+tXfgjyBAsy=cVD=sm0jj~M;ybG6fSWBPYm`-pFU>B2KMQ{I2{nlZCl6%n!%F#(-V2;Hc)Z z;^7c;x=AjTv0OSISB4^4^pEHV22;pKVn6^L4?3h9bkZ>#(Ze9p>iFhUL-g0DnmCLZ zBm%P;prAjFVIoHy^(!8Bmg7LLgAXci9oC$H{=i(btY)5c9#l{$(ozZJetN{4$!Ce1U!JkWN?ZYDciZXfsFv*iuh& zdfEvF5R@Zw6`FuvsS%ml3Lx95T;~Li6`-LP4szF}K7*M$C$RJM6N4E^TWykM9Rb^X z)+kyGQZ!g9Ij1oE1v=}Obj&U-?G|+SeiSpC_>WltV(E}O?s*ezLgMQdZ z<(!D*?KqpsOUH0Gs)Rb`FMB!S1d;;(?kwZu)7Ka=$&PYVd+uQ~FhxiFc;0)@Wf%Mz z_~4N5wilmDremL)mJ+#joe`}Znn)G~J$z|keS#5FU7(lgsm&>i4H=A(s>bBD`m^6T z%r7(DHw@ z^>6uC{oNcLTQqi|6Dy5fe{@%;v{D+y_cME@=<3|NI%$-zf9{(^|4tAV!#Nre!+JF7 z*)pjw?)i4G3MY{AMSVCyC9$qWPiG*E1GWHzvGw(k&mYMQjsWA}81|Y7IHD{5Ghz1! z;S|0i(?9s*{PZGm!Zlz*@K!in!x0^Pbj9%;5D%`s#CY))nw}{#9{4N1l#&jV6+Ak#Iot(ecMbF9z zS{R`}*h_qH8bb%WB-UlB3GgsZN}S-di~E7}#DNa(BcZjYDig+yAOT4OUZuXurT)m~ zpagA6gTj&MlMd~iR)TY*^89mq#$7ozLO3)^`2Uy9-C(rzKhAp{| z1^!Fqkd`9q^3oW)`JkgemLOh3ul&D6P2g7!gjGOW$l*X zGHZ~!rCk4mbwOWzcCO!CF4l{g27giq-rW>Nc20YyS{|8Ir*_2NnpUJzYb%OQ)NQju z&S1Ik{JEc0l8*}iM_d2B@waUck^T3^-)*^%{JG3&NH#rvFuIFLcKeKbo-#&@zZsZ+ z%f)$P{4w&F{bhl+XGEvir{}LKXCH@B(lV-P-%gROTerYZl%N)zD?>L!D@Y?iLoUiu zEEwoFNGb=Kk=tx5y^;JQo3i>F<1aHD3HFbM&aM?Lt>4HVwf4X9ft#X#iXsuWF*QQ~ zZ}tJk{!~sN-BBnW5a95PH_%Z>KwMxMunVB3|3w`JFGHFhON)f)ydAMPQgQO?-3qNh z9R?311_69ZNnSvQA?+(_n78jL%zV9GfJDwQ4@y*yXp6KFd5+3Z;RNptexkKw(14?M zyd8JBB6vg|!=I@x0B!!1(7>P1C0QlBUC_?<$2X?I!^Yj4?Z~#?Re$QDe-79@ps8>F zk(Eyoxd_>3>Wh#^dFUtplQsCWO&TYC43x-2PX=$zfC!_I@;(qp<{u!i=`0kAKN}+~ zQfvDRRUhj9!+A&eFcMH-h=tCSDMzEHCa4jol#2)wwV<7!m5bVu_i1iO9GyDy8Jv&R z(b({JWQpXpV^~|2u`@IsyRNAFDhrC>r0(jEbGJG^!@*nmJ7PE^aFnOW;vr;`a~I2y zA_7EmCm$rl@!hQIt&$X0wx>`?ohyGw-O#r(+JnL@4A(ePb&NQQ9LIsoF3BYAJV%~z ze#e>0pU*inqSp@X5#^+tbEEDX}QYXnjBJRJEGlXTwZRB6;M^4q>C&_Hn z*z-5~Us#O>Ct;&Ur~O%kEz+aIzv2C8>d!T&3*47p?bqFwLB{U&A2L%S`gZfnjw|XX z@4LB;N(bfnb2#wl`HPLLf8PJld6e}h>XzqxM(N^cn<(;4Dxam;{`XPEees=#cmiYyuxT3pyK9slMxorX8A!z)ifB zUo?SHl0Q==KyOe11uVjwPEz_GPGSnO#j)i&+8F=HQH@UU_f!kQVTtu@e4d4R-hh)F zJ*=1Xfjz@fOFie?!5nifXH>LhknIRizyaIUA1AbJE6j@tu~p(e^e4ChENMFt{fy(c zMj#U-w$AlS9+xxUMLh`ICjGbc*ctqBn!CF51+_3BAtFQ1Td02p1vGrr|PM z9SgKo;nwKR90=jMnk1p1K`N$BQ(P8EBngHvv-$uI|k&;g%qAs;{!DfBDze zmcH2vEIDzSC{ZS~FkOC>AQQRTaf)*6Mve8P`g_V_C-yr=%#@4cmMhev_G zS?;6$*~hr|`*KgYtzPtv$ZGc=O#l7iA2-1xum8LAV~Ek{|GJP&M&!b_B0FaPYL&(! zjddc&26}k=^K#D}n_8`v?aA>?%$YQRZuD4P5r0nJ#D2|*eEoKFgJe+Z(BFdw87=!f z4JC5nFB;tfX42&pb@=V(j`0tR*d|^3HHHdnak%Gc&XIc{_UG1FdF;u+wDse(=jlhz zf43Zx;}w<)7-oQAr)npM{}(&?D1+k8gvMBrK39M_eD2HH0xYU3lVcIqmFe}w2T;)or)OdS_1TkBU@8G zNQcxPIwTgULsm~op|ayWm;lU47dL6EKZA~lIOfyOoaZg{MK{xyo*qDGKobKn26BpI zHLd7r@U4g1MtyQd^ZFk`c^tOsEX5IvjhWg&PEqss)CMY7Ba7WWe98xqW%`H4Q7Y+h zN_LM?g6SYotn+Cji^Vm-nld_V2Q++TKXG${9#I$l%4?@|P~qgSTXELK>D%9R#1bWo z0@X2Wns!n%Knv%6C@9{VHo~7ORwuB_!UM;!1^{utRa-+7M|w1R@Fwb4^1+HfCpm^S zsbPH9ShE`bI(9^_G8}nLlH6IeC82Nf6m$`=@Ens#QIXbJ3@wC+$VSB;=}xd;hck*g*gD`Ger0 zsa5b#9LMitN&mPXSB0%!SJOwXKhHnYqI&24JKF7k`vW%{|M+VrvD&7WiIeoa59g)u zMs-A{lNbKrA{-L9f59P~qlIJq!AowOpRrgPxDIRu{-G{98OsUR@d9_eoKri5Yod<6 z=Gvu~;7li`f9(_!I7{_BQGNOp{9~G}xMnhP8QenTF^<)Uu2rP5{_#viPILtS#EW(U z15{r5xn=~o4vc6z!hO5+3<}4t=1vvg2m%NkX>6+c;Y4RjGjLceASn|b16VrzUwgmIVIv3~htXwbq3Dcc-5&$XE zNeic!tAE^A&O5QM%)@c3v}`586QwMf1Lg~?yJEwxvP#b3(sx3cKW&^GsM=SVtM1xe zW(m$NIYw9qhDs|p>@2I~3|%rW=uz+H2X>V?a=KEkNx~mj-aTASn>Vh^tMrzyz-c>F zmLB6Fwu>%b$=G11EMfgG;TNbbe?YR4w-9>tf5~#kP?&L(xB#^;z8-5`QQKX zbIar>y|PR{>&?MjzsY~c%I}pecYd|ZIP3q3ybgo)*ZhgF@usrjKmWRHf8g3O_xT^& zXa1|d@#Zq?oOcQDD~i06l0R8{)4vMXV?zpd#51*nW&geMZ)8pTv3+R!yHBWITh3xv z@?nKXtp9%SPf3GQ@aA{F>_5i;i0gm7Eq!p>A528*-v9XEsq)UQ##33jenN6Ky8Va^ zwVdKCBx@CNec;paqeAhBk3$}T!L8={AaeY8Z0e8kAG3dN{{z(0!R*|1zmh{#K%apD zT^6wJ&kqHh0o8Ws$|*Eh7nlQdvp^gjFb5w1c^0%IN`i&x0LzZ}RkX!60e0x}d7h_+ zATn9}0L|p@P(Bee@FB_;;LM~NtiKtP8h26GTh4*UV)@bcVv8l+$cWZ;t7q(Kqu=5Hq_(X=r?v1t<#tCI%c76!&jb~H1{ zXa`d0$UDGvXj^zWd%XZ0&h%QpnSMe2F%^fu7e1*Dcgw>`9OpRN8H7<^c6DSjj#%}n zy#JHeU+o1^*H?L_e_#&1zRI6=adfflW11>R8`xfrV;Bn5Rhtn}ZDPuRKk}#@ov2Iu zSEqE-|8)GcpK@4`ibbDr+f@B4^@avJ$s#iIcS%>{-d8S@Z&SsxDIpWQ?T`-MGL(N|l-YQ}%)ApYPVoXvq5 zRaXDd5v&tgZQx+rM7zMgM5w{yWa@E^`poWwY8nSUAlg_D~)fl=AtVT=WT7S02= zB3oYnjwlvwL{Iz&fBukVmv8`c{idDL{@`8~sI{lU1#l+rQrFAaqLq{M&d zKLA$Jxtxj({F(R<{EJ<}CV^+Kx%*mo-7Q+Y&pW25ALQq!CST*;uen_BwSuqr&h_sz zRevb(lKs{-aspS!a8Q+lR8g_#pU@x9P}N_)Vt1K4Nlw?<8qX@2!<=NV)ruy@zVoKz z7!Ll+6~Q`N4&|jdhLKa}SI9AZi=3`Y<{^QSvTv4yb@r709>*{k1t;`r^TeAdVWs7Y z+9et{oyyc*CLU`PHM~@g;l!UeOU6~oTe2|5G}OIW<>nwa&RS!(&~VxPyX_nX1KKex zzN6V8)Zk?Y&MSW`8K%m=xWtp z%5lY?ID2s-&y^z`$1u{|EQc?0E>#rru!Abg@7Z#q z(+1GP-pg0%M>@?1j%k;caqFzyLYrQ7ZaG>K`r0uW~r) z0-V)2OwQk38#f3C$2{fK%tVPDt8OS;zW>Rxaug?t!3@E-fkZI!hid1|GR8jc6r%)$5+bE4Ra^4Fp& zbRhb77>Q1AIu!ir)7*c}%Qxp%hC{*s(bj*Azbp_9otvfuJT}@NE#i*Qz5nQ|l~gYc zK%w40mx#KRL}QzVq;qPS_H69om5#SAI)+%fshztw{z)O^7~?N{9Dw~dZP{Et^Xboo zQ4f;+N4{0d7GyiB?GN}^u+&alfU4Z30^SjQ0;o>_?q~*qR}ui4=wK2+-E;3Yor(xw zIWh%?yV1G;c%m{U4NP)G#HOK5o)?(t38IimITb_p?g06UR+ht;l%G|iKl=c09LWP( zt((EbRLxb)^@k|V*ExVY$3!HDgH^)??Z?0=B4#+Y16;CXIR+hrb$(m+x3Z9l{t@93 zj_io)MgJH^#egK{NY-G82p1gH(i{G?C;tWntceIAQrUwS(ayn%ib-Au2=x!lhM>H&vxL$;=aoDPbG$0Ab zX*hu?%AmkgI5g#`kMpv1!cq?BtowgX{UAoeyYwSRs-s7mh-K=FCK9LfQ)RrE8uJHN zXRH_bz{%N(e)W_J@ajZ0b7*jZ>UVoX8rC=gQ)4Zfpy0ll3nOch6>tC|8S< zIU+Usli%S_y-Gc7++%18kMTd+>~BX9P49GcwtrlSRrh=$S1-J}Ndx%`8N2@WZXEg& zXAb)PM@%e16@%wL7$ot}mf={$&5p&2zrY4|oZ=uAX5b}x-Ww_BNLd`LLU=rzxc3|D zRBVMqlqtQye{ctffT_Swj%wAj1pS#i7yZF<4gVoM8|Y*ZjXSULAG~%a>$e z8vfa_4F0KjQ|~6%!!~{39A!NC*e3jwlCz&kGDqVZX#imQy@&F!MsX zi~o=~6EEny_?Jci{}MUP0>b8@!r(8SG$b${5z5GjPUx2SH%!5L72wUl4CwF02Gxd% z|1cf4u&(G`Ivw6;- z9HNx#B&|zlOydY$2}7jpYDLh@XC$AT#cLI5d)^{p5b`7tPTW<>JO2bTHS6Uo za4JidxxzjTu2eLyoU`)=^`(|DAkJkHPTO18k85Ofo@hFHT2At`1w3w9EvNK?7z@E@ zSYNx@F+5fD95EcK!{1TO4UUv8WEfXL;S2_Nco6Bv>giWa!)pJ9R zQ)EBL$y#Rr`X7~{i-dKz-H_w-Q2Zw@dYa1|DE~EIdy~Y_i?qR+mT1?;yUOO_1p0oN!Lr_Tz6lAOimV1Cz_V7k)wwt@b3N zN?)}L9jl_dHs9;BYrpk7<(|vVEW5XDD;utQe_8*{-z{5z@XxhwQea!@CE1=5!7lGV z?nV#8zpW0z{kMP8IZ*rO{fEazy$q6c)%=m`Z$lqx`lIcGs2JG~acP4|rC>P}A^^YHNL_;tJFz_~fs)PL9=s6^MP?~XXAeJLu(LBoG96k|RNoj8K{ z@8T2h5V_I+EC2D;a@}{X>(PIgoECrb$A26*ogTZmx_=H-{|)OmlrMha3(>9z$^Pyw zy|~G;k9Pa-5*!B90*rC!qEt92nOY$t8Mql41Z%JWu*ESk>pQnVaOmOqgr(s^X(#Q6~+!luQcmX&xt$g$TB#NR7o zcVzN0QM)RKy&y{zvTcWxyYiuWA=(6***4@MBc*eYqI;;K&&rCr7Y3YI?)hO1=105#H8N@^)a44S2VMQ^*)jf&p|Da<%KnD|ZNr|k z4}C!SBgy`}xEz^|CjDF8xnA^C)AR4>)W5aFf#@$+jO<6BI+*vLz#f6S;)@|1zKIFo zpSXyN5d_!ZA3e{EJ%lYB!CNsL*u>Xv2mkN|5_yi&^^0iL0l9%acnMx#WFiN=Da(uT zz$*2tA57t!txaP5r#;_T;Ga`cfa}nKs9C-mGp-Rq%cSD@5}k4x%?!TceDDwX9bqe3 zs0lq!%O%{nRa0*uJ9GIWlA~~C8RRyuReAPl`^0};{jD?6(PG%ezhJ>hdJ%2xXRdjk zC~IL{$(Z<;x*1&ze*~dk1Tn-*;lR2q#!Mu1=m)>lA04O@aw}@QVnMNXN_!zF`&Jf( zn-m9ofBw;TX)fOhG-qy~B6pc8p{ZPO1T!_nTurq=V)}&D+xyC?vvw;oHTnP?mf^G| zm|PL8j%;;V5!bX{OBcjfhsXy0yXx*v#4zRVkAR6K^XrRp<&l=jAu90FL&GU;B_cTwn5O{f&B8{2<_q;{Yxr611R$fK)?)CvYz_B5? z=eBhNWwD}_y9p=oxpHWyW0-TxSMDn3ACCp9{e?e?l%AtGizBi*>~A~bT<`E+CcW2e z*HjtGXZ~WG$G0$-@g(8b#Afi2j06bGou;;t!U4n{ueSnn*29hf2pE>*OYNH=4wvr ziDmcpb>;rQe|}m2wcjf%Kl?hpYnV_57e8AOP=n>zOKvI)F8*p6H+jCIg@2>$SiMY9 z$9I)Y*L|?8{@Q;pTkri=nRWiV75)2zvf_(BU+(+F`DN4cPg+T?vt66+D);@}Ipx0p z`5Z?c_fMH$rYwGb>DRPyGcR~oS@4V3Y2M;r52HN7-;wqof81%=AeBP2&fc&8DDr69 z-xAdO55tn$iyoo&luvb!%>IX>kGB2C_|uD&w5fY>{0M#@N&mw?Ge4_Pz97dv4p4+2!tax~6o%{Hff&h3(6i5!N1 ztOy>C*g-jfNep0+mBcg{eBNkTG)i&AvIZlL?odBy?1h6|^5ATSFM`|gE$1~l(Ek}2 z0Q`wyv0fTHMFh46d&t8;LfaUeM5GY=p3hIzaU4hV5KeUQ=JQS`v{tJ6d*4jG7e5DZ z{Xy4lE&ZoY(%no?brzdzSTGF%pSekPOX4Wm7(6zh7yhyrn^>q$Vu^rh2%HalrI0Ew z4rEcvND&j2v$s!wj-GX~+W(P-0yrwQ(f@i@7f%P67v}1vjGd+-IdcamkF00iy7i!j zqZ_BMoT-h@I%awboYK~va*{72Lz;qe_S$whuTwhiKhn{kL)Jk-!(TRPbyN+Uu6Ed} z->Z=MV_(r|2R*g6Tj;2bN_2}FwF<~!G85G%cEes&&eoL_gcfo8P!iB$~eI1 zPmmnr|8VxlsYK^@xue+rp?`Eq_s_BZmzPj;4L8?qoaz0|OIIDrwyZzixMZ!ZO+%+W z8MOAP|1mw4qIUIX&Jp;rnB2@#ofD`zt%XKP$Fom7DLJNt1wkeOO zRg?jLfOQi8Q8#f2^rUg`?9!KF z!d1L1PyB;pHSc2ZPi&VsDfuVQ~ z{qs5TOZ~yZ)S>-tO!b?HfL10lXcH+d#}QVKP2KAjtmop4f58sQog*h@M(&bNv?^0W z%xB(OC8B9p%RxIwi_pzy!8R459`pLH-LAQHHFZQdL^Z8~%B|k4h~u0)SOvipSKq_D zy3~cka9N@Gch_ht3PM-jvG zXS7)C>br)VH%|_2xDY9O^<7#NZlX@`*T}*E>N7HD` zlSAH-z&M{5GWA2n%_@iUnyDk;F<;Jj(p7itF6SQGi$7OwfxjY&J!dgovCnY1Qnol% z(Z#9vt(v0aoMQ;ckh)dABNu;k`+Rpl^hd|K*LEyhMn7u*?e||>HeCIoGV8)W*2TBI zY`^c@iVS{F89)2jvha;Jl!dSRMwx!@Tg%iZ{<6xe4Kj)7%1^(fOnKZ3%YI;Sjp-8U7(va`&1 z%A3l}XTG-#Ox48FEK04eL>DAAa>rrsFDL6?mZxUBUu$bq_gcb9sa}6Re3YO6dHY4r~37-0QDv)-n6HeX+Oy`KUb^Jz3XZGp&SkYG;i> z3Z-jEe-zhmOVqULVRJfnj7(IzGTftBp3wOo4&8#jA@rO*X#BtNjjxvrFTAj9-n6;= z@q6D}e*0~2lVJO=|EE9msWMS-+fvO`>$cl&FWYh48WWpQSA?{iY`SE9 zK2K03`xGa-1s{YzmpGBGj@A(Pcf^Q5EFd)_IJW8&I9Tw$qRoc(FABSZ(H(@a*A$|EKDn* zGx`U>jQRRFk294|{773>H$V47Le9rFoUR@qDZ>%PI!A&RD`pqH^4Xy%6e53-DfNdQ zktGb8%uo7z(51TAPfN(`p+9ut%im57Rv1*J{ye{-69bjlhmIHb!~Xi0=h-&>;{e(p zc@ReALnyW*lk|4`t04Vl*mDO*AxFh(LBnvmiVpMd(${d>cJY-WN<2VFuKlAcN8&t*=_$Nlr~g0+_kZpQI7n+jB96TRv>cjEU8Zw@CqQ4B z=>X8m+$tN;vvm!ddSU!c9z@L69qtd46KmP&SF3&I(M!=N8=($+A;Y{reU18 z&?HqytQYsgq_9z*r)=oTsS~yZHXq5KdN_TPKQx=D|7-*4&!DU~*)lee&(y=-GCCT&{_6dwKL6_dt+CTVxc~6doCF5piz?=w zjd^PWAApsRri*{TBh0buI^YAfCryeodCPDt&IY#PD<~5CPAZi65A5NH+=_vqxvNi3 zRU(V^5A2iphcBw2zf(>sM=A5NTl|p;8Nff_6i45pkNO`kzp2AtL_-rn8&2PdC=UJ7 z2}~XI2Y;pGyTO!|HW9$!KfYoEf2IC7RpCS89E-@Ib4)oFIFoafL;t~wSCJVSIKjOy z{b^$G9|`?QVSgOIfqxT!qCbiI5A~7v!SFBmj-Uec#UYGrj<6PQ=5c1hXz=HOKL5Z! zas7iLnN_-!Ss5`b@;HX+)?U!e(ldQRpB%tiRBpab2zz0Jm0omBbL%=^xI$^AqE&BE zMDO`07#&7!;f$MC^~>p6BX7C)$mw~D;&aYBK}C#lL|1909LB4+5nUYg$RlF-97W3F z1m^y;Qe8D1pLNkS3MpN2hn$}aacEPH|BA+ygY{fFmFG{7eoncSa!8}#s-2nwqeexu zw!+o-4S0TJPh%0{lq>I$W0<*+J$JAwi@$l#Q31(aiz#wfa;~2sxhq~1iveB93{=t7-aK^mkLpL>ZS zhQC|-CQmP0@Ben0xZo*e!u%(cInTYUEO_PrR@sSK+hbape)e0+=I{NTgCtge=@RvI z-JiE^E|X6A>C!)CL0R~kt3@rO8|FT_b#>Xk;`*}k^DlKj*cy&_dh zYO}xmO=lnZ!!>)L86RT)Re5b59sS4nrv)CX_D3&WQB^%_tLsmXabIR}Lc0}Dq&4zv zJ&v+*ZHZE?+7zxkNi$FP+yE)lVUlGn7!|q#Qk3#dilfoyfAh^Z+cA8_Raca&uDG%+ zU%tHIc<;UUX-bAKmVf?d=Gu99{ty{O2|GNIW<&Hb= ztPkCXw*R{I>l*$$w#x}PIgu4=43|xcP$nG?_OF73c^{_z0o4pTCI~z-4MO%0fFjP@ za25x61^fbbu|MT-r~;xv!FFN_*pAbXz~EefmqK(+fG+@f-cfaKUx7w5I|t8nm#M@0A%38J_1b-*?(N2LKdkuC;K;izRmWLZUoh!ght1kgMT z&ZLttR62JpulQlU9UA-)%>sXHvRh7F>meHO&8T0_VVTfhk;DQ4{@2kTBK)I1`{>E_ zhb@V=Y4s;68t1ppODFWtDC@L)UI#X^H95%rPjYV9CI_UgB8D0Oc&^{^6&&M)#Ze5v z<$DR7xfqb7HphV|5={!{u6lr-zAA_lR!-zLA~uQ+Z5JOoQggZk^A|6+MAi1_ule8X z(1b6{aC{2r<=ndF&(sTY3VSLF74iKqqo0Fi{7PoaIH5*kk&Dw52P^f{xl1R<7SfOQ zce38HRoCIl38H>?tCXGOQMSuJb;MDfQOFHV)9Y`D5Z^ z{KMEsv;BQ*;BMQd?tb>h$9n%mXY1`}WY+?*|5(?*ZT)QV%-Ki%RXlDhBQL7`l3H|(9u{)_=$aF0DmF}vQa1TpQk*NWLbwTN`Sq>COCg_JTtYK z7EZ>FI)?+97EQ;l^%wp!1~rAipU6S9w)tCLeNkBPuN~dsIdG_GS|4nM+|r*f*Lv~q z4z0n#*Encdd8<6%qd}7tXV|v=El#w@57z%&r(Xa4y5OO8*5hZnI*YsY$)UM)LB(;( zy;4!Ka|VaY>CAB}M>T1sqI-!1K23R!lyxqS+}$yaf$+BZ3qLHAV^|$PbNhzWyimtk zdH(T|A6)JfxZ;+zHDb6bc;%h5Cpb+206+jqL_t)$%dCkwSX(FjEvtsgVmW771TOWz zO6BGXn$4e)^pJbF%$}e*g{!j|QxT<$0~*Vv(-kaq)je_yD~k7YJAqYD{FmQfr-}>zg0W~moq`mfkU4svN;-WHX@df4B*I!wVyJT6J zF!y*lg%_!hP84)zew1i`sEnU=noKuT9{9%#%g+06D+4n%ec#Lz{c>geF`6@24&_V} zk9~$5z3a<;mz`I}&tF^?{>rr)Fm5ULUw%QEe*Rm^hAS>D_kQ$@vf>M`C|hp-tSvra z-V@|V{zO^zx!05l3(tB){s;KAt=8&m)gMm(6t+VnvL2oGN8I2{OX{Bwn#_*0v72qW zH~n4W2-Ck+@X@jV82_}u!Lq;T@~nk?d#MUf^z!Z8xG2S6t-%#hcl}aF2YEI~kp|J_TVc%Iejt%D2Ax&2p|HdlwvYOyo<(?fT^BEpK^qdE0OQcDdq; zE1ZAbb=Q^8fBy63;)^dX+cagxIp>{g$L!yK;vdQuy{Vf&|CsXJ=RLRFwCtv`X~U-S zxqten`sw&^dCFN&Dd#->Y2`STU;IV+{te%^6Z@qvdue&QqMQHc$39lB|F7%I z)6aQY`Nh|~M*R8;vc2tXZ!cd_#PN$?{NnO~4}3s;x7z`YK$|pi{kz`zj`C0c>$ByB zFZ!AC!4H1OayCsiD)tYO?Qb@2ZFZRLXZsV~2dGBZ9de>2K%XGM51@rGAUHmy3!n{X z<}aO>L?jH$sh4vGC#Ys%LLPLe4WJ3R)57AQr9k7X>?=dc>#y{xLYh`#o7O@Tt)!#ID@>l{EhqPq?zU{1etIl1w(4Iv00t|er25>4_b-$W%x-ERAbKEvg>lXcB$ z)ov8wy5pK?^fx`7Nd9&AvG)9H)MRH&e~h3%`T^Yv-O z>ra;8ezvdoAL=M^m(3Kdt7Grf`!6T6$bMY^JVS7nLQQeJb|yN4S9k*FXYvPUCH}z~ z8PgQhXkFo=c$pmQ7JwrdVSuCTBqm-powveIU?rx0n65>A!9OhQ=C7gzj+j0HnWziy z37tbpFq-imPEhR|7fJVYh~hY=eBcqOXM^b5UlT&VGK1C-#SLo3eA&ZYOzF zOy+p#{znm#BcMebDl0c4h!!t9RtpE~m^`LmIBkyR#Z|;=^8#F$>(G>-UgkMda?WKraqrZz<``Z=6fzi6o7H;1uu2Z&S?EZ8CFU{4Vf>7fDvow;L>!+w zQxes{1f;x0j^NpHrf1YQ&T!@;UNTeIP(f0WhRganbIX>=Gs@EyPgR@6+am^lp{!Fj zZmOYU&OJ!~AKJOK%)02^W%4O6p^*ND%Zzj1A?&=ZOkDW%GPGm8^G$+1jSXgA@Q$)` z&Fy90OWvfeJ*mun?%$}It`+t3$)~(nr6P@+e!QH`H`Xx@7`#u@Q(P;DvF0@%oL45F z{KB&J&aam3cVAhCwr_ByndkgYS*Po7@bNDygC|^ADRD0g=^`VKI@fe9*;C4e_g=B8>nRS$Bd#$C#^RgS3|_ST_WY9IN-X@8#ojR4p% z(thbb#{aQx|F(P3!PQa7AY6|9_+dx+wd1-#*3yO0?nXI^HuaLA2{h;172tEg6Kts# z^pcl_sP(#x+WmvYfBCZI<>uwf%3uA}hs%Zy8_H{5``U8XT|c&?_pGzdwo?@c?(<*p z)0Ph>?lYhH%<}DPu9buM8|BhVFZF{B&HnJ+?=EMad1hI1`srouy0zt+YpyA8c*7gY z)1UU#a^=-mmCbU@j@JYBo$q*8x#zz7$|;XOwS4ZgpHtMZKEvCxwJbVrQR^%cy*ux` ztK4wI4Q1NY>E(NJ3=>g&&9&E*XFvPdn)>4H<<2{PRNnNa-xR%fD6;uqEZ^_E{ddZ- z3m4jvyq!FRbrIvujcB03VJZw zf1LU!i_-ClAki7ym{SgKsqE#2)o_05Aqt@MJZKm|`VmP&Gzd5D9db}Hc=4xu2KxZ< z=xYpF_-rr$I-d^;01H6!nIH)uPj3#Ws(E=8MZ$w4=C#8Cy!0?wYT}CXa0th%KrpS0V;CVa!bIL&N;wVVxKx`* ze~3Q8qG^`bQx?>68ld!d9Fi`NQyHM`C|hx0w1m?Y2WxeFnj-p3CPypdxJ4Emn)DkS zt_JHWNmMaO3(Pe4KhcXRC(tD|RDHdeVjz>z#Z+SvI1-NTEQw>-w|xtuA5IX3TxAZu zl_z7!#v0&A$a(Ok#>jG)7I2G11tKMiZkZ zniykOx`+ZwlO~<(99-qf|NGvX+1)#gax}p(aQoYxoq2EGo7vqr-@bk0GxGEP=I<~{aZlfW^gf6CCv2Jq*fX@Pm}sY%O_r$7e+4aRN8lDs`-e6ZZ3zW` zkI-L7AEM*z-@vD_VzvQwlFsdgC&&Ul{_S0^nj^5`kgzMLF0Q)7E40I(QOWSsVZK zY$Y(9m+nIz#3(?@MSm?8u2Eft7`*hHRc~HqkrV8XMOavFa6xD*E&&kR3j1Slu9e|- z2|_ny11v7e15fw-UyP6nY{6gv!>VJ*Ls~pNgaC5H{#=AM0B=B$zcM~=E&y6C0;e9# z@M@-0fws{)33Bry;$nJi4+w#>df&nU!t00pOAuCL*2Y*YR0o;_yHTnhVQm0s-1#^s`W48JUb7Oz+}x2-9I4tSA?>8$gd^ zcuKQ{OiKU^w_rRE?#l6tSjMPZx($5_FJgv53+rP(lbbI~?^vRF_FRmdwp?tPOn%#U z3SzF)KhJyqdKL#p4@Y{!pCtufpTFV$F7YQhO&#MOn~(uO_e|6b`6u=mFUh@6#GE5T zI;HnesvQ58S|x4p1(G%9Mx5_#S(tma>O2NiIDc>@jUsf&K^1E3HiJK)WlC}TBk-`7{7WUD8G9nB8P>yh7BuCMR;`rnV^&zsjT ze)$Xe;)NGUQPCiI^2sNq7rch&&UsVbeRrY8{ypuq)8yfY9+KmZJyx!USMd6E>t)QC zF>>jp-_ZR3yzru2cKPM<=%bI~_)lnii@f>fTe1egF2UT3FTPlgJaPp1oG)XFN6Yii z|687X>PcC#e7W3r|NT-APs15AXUlchU9Uj!lZZ8Z{PD-h+_&b+4}Nf?+7TYEUQ7UvD{!h z)7XVEnL^MKsY&GD2D~YO=HnN=bgxKFTvO*Y>dJcK2~wJX*__ zAUPv|A2h()iA-gVU#-N3m<%M8R0w*0{3$nVSS7Mg?!j@uIM~sW!FgXVlI!dH@$Y|k zss9n?gt~FU1l;x+|3K_uCn9Ok9Jgbw+N1J=Z76@(Pyb8u+hE*-`o~M=Hu}RsaEu+_ zf7+=5+hFJ8`yVuDThX3Lgw4V64~tXpf3$9R{qb1s1K0@`J_2DU_%a!F{1;cs5w|aY z>}?L(6imFH2;|ZRqWwg>hW3cQ(57wDYWsW<&6nVM4tC4t>Qed1%RiMn&-|_0J+yf! zwb^|P1L18sP=f73pq5}N!DgRmn|Z#>qy0lrmiCVaZYd}0@>~O6%%=gord>vDYq$*X z@gCJ0UIJ$bwAM7#N@5B_ETJUiSI^_X#xpxgZAHE;g>u!la=N1}OUD5Ned&E{ZKpj( z`%rCO+P`R2~2$r$-yt?9c&j9V?C=^bS_&Ri+IBD4ql7c!G*YM!=7R}@+WYf2XI~ib{tcu zY!6?^2ca@hma+^=$5=~n4J27*hOfGoE|OA#GJTfrMK{(efB*7w``=x9{zmw_hA2bh z6y?qRgZ!z5j_IF+!E4S`=Q(Zu zfBq9d?|t&h%P&grK7C}^k^B0kPu&jC-Qyw-KRWGJn1C)zi(VBhYlaEe@7m1 zgxr7s1M;`OJt6PC_n!RWu0P0)H~vt*`@I`v_+f|3O*j8UCX62^GiS|0Xb4yoOpreb zAjv4uE*dgePCNB9dG%$)D8Ba|nLO!K`QG<`AXBfrQicp2s$nSzYIiBfm$?9v&;872 zq`a&g;PF{<*=3h0ImR+hPBu>uC9i$63;IVrz*FeUb~l2^SW>Fk?2-NlKgQ_Q$$~TP z)!?O}O2b(v2Lxcv@TY7F)N(Np80?ETEx~6|oe}dYUssOy=gokIu>wQqz0L1QWqpNA z>@xv%%vd&lG@wmq_sw}wzIep>0L<)?Sy8zPj;7|ZtE*DSVMPZdf9-L!`}o8*2{4Zs z8vJ_AK`t8gEEjre(DvIrjoUWL3(H=V&kR2YM!bcM;N*#ED?YtU z$ETN#n5a{{p-MoJ3-J`2*qXquc zM$+d*-hXPyiHYVx2K{7FCoS~KArObV3U3VTf32rQt$eua#zxx`cI5JQ_WB1aa!N)_ zZ%M#y4r4_r&^wm^DFI*S4WUH=7E=F=Cv4yZwlJD?p$7o8K_0wN+sEaNAx(m&Zs9b& z{}Iq6@W}%g-az@oIOg&yp{FgHiEUTY3GIxfZrwykyBEND zEWz~v+(m8bmHOo*3KI>_pK$}ZSeyr|*=8mKinUktSU0;mawWn+Cb*Y(3uq(d(v}IKw4>FqcljH_ZXwg%*G9~h3)G+>IN<8 zSnW0ayKeT~?OI1Yn6w|upYrq11akGAcs@@RWb}Lif3(~DK~Pogd4&?Nr*Oo^h4Snz z{wgtqAuDC6KmK6v^ABWo0vhK7kiTAR>{GT~wd$@vRjZS(?fx$HKgjD#Ydi=13wR?= z+rWTb_9a17g0HlH6o`bq!SxTAIELqKm@k>I$p+>0(;R*s#`*+cY0uF1n!Rogz|=Y! z)n|l;=VBi1BHB{h@!X?b_J`T`$mb9Lta~}#D66YJkcK8MSWNKO7K*EPcAoHpZLE&2JLSi-kFxr(Vg8rxrtY}@h62+#CO?x0 zAU4_!KTqVD-K$Ovt`6@P><4pTun=nA{`HOl>M0Ff7#I%+4Ckfn?O*bt{m1@~1t03c z--pmFBy_yX;3%~FKcx#(bUzq>sH0B_RDdOf{Z<(SFI4|EQ3>MZzF!rK*ue%2lN#C3 zBbUG4dzSnc17M|XF}MJ>3K~HkWmS#xJ{DaY+biTwuU!@}@G_DQFWtO!2e4vLl)|&O zthQOkA&#zJ6n8NeSF5aT0Z1C!cBR{z)uYw}yOh5iVCquFJSH$4u|EkS)4Qe>Hp$>T zl|~nkt8Ap#FKrywhNm+CR)XYX``C5ElI8HeWnBWpOsa0!JxePQRs&wmMM}>oOkdS3 zW7zJ9y-2{9cG=);vkeKP(;K@jc#XyJwnC3^P>8{JP;ScabR zxHuo%jRut>zSowsjXJiw4Q}l*)}< z|7!(|KlhaaHa5oWEVsTs_k-~l$u-Wl?Fj$I4YNowXpmCCW?%8AJo_7eszdc)jnnPk z(!a3)H#Z=ZFZqLElxKAR!~35la5uuq&>K1wz}NTV&j0Q?{%o()nmv?4=GZ&P-_+st z?tc&JpBmVi@sAPYlolQT_B1gqDj^+cEMe|cE|0l-1{W6LKTCd``im|&;m+F+OWVNK zdf52-ZHnoEO%k<)yB74K)EZW6Px6n&LyF$LVKV*~Uic+=0Y5A!pL~)!5l){mQ}ywC zc;faOFhKtFr-!x57r%I+9DVfBP*tn^{i(l8YMKFo-MV#?pWXg5nK)r0K-qbc0B|BR z(?0jO7a%SHnhhJ*OJQN50y_*n!Bt;70hl7ttSKUY@u*R9_g#OqY^VSG@4Fw1)WKLw z=AvRE*IacC0PIWDV|WhY950x^K;C`tU6g6iHr{#Xox*l~|NGyQSrqm>3f&n3yiO$)KGLKmrm2kojYYh-fPsmh*4E*H702MEgW3-m%M$S9EY zRcmpcaf}mWOMSJZBqi&FhJ0a<$st_^%bG3grC)Y0qT{lqb_+hu%9Hig>t!1}LI&jx z(8&htvkt-6jnyTRmYgD430bnaX0yDpdX}uJSSeo_agn4Yq~Za@Md%39nzs$X+pYL4 zvb>>6dS&!fp!e+!@5sD$^I`n;m*PIfl9G@n+ZwmY3;-evHZ71diY7}zXRKz6Ndenm zURw?sI>FFx#%GL;3W!HPHT3dR8UAxeye!~*a?h1 zt*@DOO)_i+R<#WI1DsV)5f5myVVIn&ZXy#8<;JiT7%ZH60MqbGqxmRwUit-`pW`4q>jta`1h=#&)bk;FO+uRg1^Knl_C){t`r#Bk+Ieh z{uq<-@DL`@s9-CI>z7Wv_kx>$*-Sfv%oP}={p8xUVAFe2nAsJJ$8M3$TT1{A_YYob zv#zx`MghoPu(M{Zo&z#5YX6nhl_8F5u580g@MJ93ME--j6v>7yo1`yR|Ek9`sj99D zpXukqOR+@i@s&+M=dK3sq74Li`I3AsY`DCX9N1s!u*phf_6KhQgj*(;j`|A1zH!Y3 zdhi0|#Xnup7suNXZmObTy=0~3AcAnByuEQgVzkbbA$dhIzRy@mg-uq|P$SbePM7yK zE|N2bPLi&WlV7+oRbpW%e)UE*5CmrU2@kq*-@J?&vdcVk8KYU-KwA}UriZfKf1rQZ zt6ZRt&H=s;)LR+0FdYjlbcdVnVO;Qqf&bFZJ5$j9WxQa${?H}@zHA(M`u5Ofq#em* z_8<8Hyk`HmdG2cwY&hC%FzL9%Mt}Y3HouYaM-ztU^!i6WNib9t1%|EgK4Rz&$VOho z{wUo_n*w1GT-XU5AZ!831F#-KV3>(S(Qiw)Aa<~Vu9~ai7b*eVj`5)ptjX|{B^Vlq zv7xO|uiqJKTI7rY7`@K^C7U-bgAhA7>X=XhkeoJ{55K{%7zD7#bmiEh&a6)uTe%G0$^)|jk^?AbvPA$9>zN?1 z*B3pQA8$$fZoP*24Gz*&NnavJm`24*r2Vl1m4p{Y%}lwD4xtFi-B=m6_(ebC%{!*QFu>bx1Gt|4^3;SPHhfPFtCfhP~>Nax7ELUV!FOTx3P%!9%Qod(Y7nYBM`!!As9p92~RBY>&peDtzLNO%KCEF zhEIxr7c4S&?RD2`8&5j<6yaYqZAEP2^o(>_wQ8jl4IV5>kvE?#N4=bjMeLaJ@-!fo z(-S~O=XuwoM^7_&P$m{Y2mhD?m9*18;}J83YKGC~fMLzUhM^>wQd3i^7@TatBLkij$@oXZm{eGfe*{Nq(t*`!ER+TT8`lbf?(#S7kalUGK zWZq+dOIzivLng^BFW#!31NP4DE0>S{nq(rrQ!XYRkI#Ps6PK;>+oezngWJyuI#i#PJ#;L%R+EV7wL!WaKHpOM{i7*23fE>c3y3#%3ZG z4LIwNDRSSN_epX>vRpFq5&*m@^45k00G*p<{)UALfOSpF$9RgBduQD(1M`b?@^X0h z!{iS$ekT_k{Uzy_-(S6EvXeW@{c|3cnJeFrtB<)>G7+b`sLxZ9;x)0zXZ((%Mek?>OmV;&@j8 z8?prSAWsYWfQ$P@X|n$`xk-kWXC7sC^mtzTfG-8y#DnF``cd2}FZGu!aD zwnRFXbx23k{`dT=Tl)su7q-y1l&v;dY|DHvf7{}|914KUCn*s{I?oShm({YX3r?)Gc4e z>lb8rdGGCCIy`6{oM)o^Z9-_^JZaV83$qM-?MAz;6P}#}m^~;Rd_9JK^`6Vh54z!3 ze0A{7CXXGHA6M2|p4Ywb&{gr}aOlRL?$DUS--!NjJR$J8HU_|Ov*f4vam|J5wgb53 zqH>Ou`=R$P7o;;**a8@yzCI348=SBhAC{Sk@C&06YQcN8l0W11!bov3c#R-I;L+U( z0vpIlZ`he@kQeb_=E7_<)`=7o1diAr(^of3aaV*}$aIV8;WPnPdNt>zF~+gke5K&K z3|`Un7-pPcpO%y~X^03rw)-FB2aoH49M1>(p(pSlc<2TT+Cdn`X3j`@BqAvje zO`FMs=?oFE6dur{3t*Q*KCcS`#%w1;b@+wu76CM8T;?JG@lcg^6Wc-?a)@7akNHT8 zH?>HSE@)?CgPz<2GZBjzag}|$S#A-^XwleR>Vy(J6(QcY z{8e1H3AM5B;ADf~uZA&zLCaRqYgj+YQ={5q z$5qr;B7WB*x%Zqu%8JUBQc_bYPrv&Vyl%(JTWk2K;x;*E&~XS^)+B#;;|@8d-+1Yp z-CG`={}>F(B7m;b+iaGZ_>FS6vB#s9=7gtdrkS0cYS{dT$h=_>&~ z50sMzoB%+1o9Pu7ALZx6k>0%ze;#j*0eoHh9+wOeo*e7`A4~I%w;g77Rl4| z|B8As(mSu8EJD4m8HMuoF_$XMJ7)cXFV*Gp@mI-XZ$Ao8o6YjYqrV`Jzx`LaWztR3 z1z_^sGw+fqhn^+J^qnaE^7={!7C6X9{tE!p zI(#Ze#nVd_MsN(@j=K;Kp1*>=0C(Gre}JDfMh(1#1~BP_g$kuay;?y5bUl!Z0+wJL z>(vyjy6p1dP2uV3{SV--fvHB5903qn&?T4-$;lD1$;4y zRvv*@EXSOIz|reZfm5dk@?lcImi6RCuKSTX7+cIyPPE-rS@-Z2Y?h;K!QBE5KbBzQNic)sCJCYxq5Du|MLk(Xu)` z^5f5!@inZR<=Xzv^Y?1i@#i>t`n$!SFHblwJ=%DA`rJ4JT% z`g7IrV=WGk{gp$Cc5ZK6{~^Ej{CNjs+DrUF*6ax5!8IYm=fAydCU3I^e9YWLS+jK= zJT8~W9cSI4c1(Fqg*?6BuL!d+LFRlg8zH^6$O%O!O8xc*xf?ITPab%p^vEuhzrFJ} z8Gx7KGgnTRD~_2e?;`wHzwADE$({tjDp#Ie{H&A#{3xp_lb@abGr8jF%VCoZmGOPY z!tTPN(6nIy#wNm}c1zsI)opiGl z;7heX&ibRAJ^XAb?mbclf<`*LinG$PqyaBgv+!bFzgBbYQqNrIRK1m5Tw{isppFUH zazQ)VQ+j8>O`o2{)H%DCSE_m;Lq6|i%!YeAOzk|Bp+|OL|M8`i_94S~aD4~^stF96 zr!XA|Li>+vVekt*(&aOUwje`|kv0xB-^Q9A=*IH7?b!HdX+E~Co`sDVi0~453M^7u z196v?Bg8~c9OyIOcyQ4+4;Cwb*b37&#Hx30ZivwRz zzw@=Kr>yeMFq@WbT2@9+;1G0WOP2tMEk@V~52P}0`f4n4hlT3$I{TOW0MhCZZUG*( zbpFWAFz~Y!;WB0cydK@t#|gIk|8#iT4$1+5Os`#SdJNiwylfbPaPaVHF=Vc6jFTa0 zW@T-k&u|1Gb5N79e{0zlnwWS{T{SI7GQzscW%HEtxcFrZ^Q|6Tr?6;DgmbJydVLK)ieu)Din@S@~Q zzDp{ey;RDcK)W(?CHIU!ODBA#%J!I+BQ$lF5+VE-UgB3ge}iP=RCBwYppoKD#3vL850I%u z^>gicQe-zg91ibo#53I2V0_d#sn-y;_By)yZXDPCZe(YII|7#{3*^8fM| zzmi#qW6VF_QGs@YcKe+U=szHW9ba8FgadcHyZuixO+d!fP-dtG7|aF?H|h$_WXD)_ zFt@b~4Q>8oeBn%Za$NPyH)ZgO`mbE&`IJ)o%OjLSGxAd;+G4X!MV!7(sYvl5A zS0J3lcA35AO<7X56m0-_#itAYCjiVV%<3)QdiHyA%`?}@C74{yg*QrOa=IJ`VEV@A zzYBhGGHKY^G6>$sH=pz)NsUjFbIA>I;=p6&rR6WllwoJd3V1^Q zdEVoaoz_`4Zz+-0m8)gSVQ0%<-g*q5n=O_T`W+`DdmJUn@ce8NxTLkHX7~ZKJNF;3NKfEc1P@H0XbeTipLz#7Al0{qo+TQG*Mp}T(g6m1 z#E|73RO@mg;(%N>Tthmr@dSoVEE9!bB`cx4@+S`fq87i`$*-U*%0%ed;%sK5dkql; zZh@DT(jrYJSvBTu%fM4oXtF%U0t@Dp0^4j!!UQ{bO-rdAkX5< zp*-km$O@+$z5jwYJ%71)T~L+nVr*r`E>_Uj@mCNT?Ep<5JCJ4AX5ShTvG$;yI?;3Y zAM}H^k@Q?)1)nJvy@n|V_fbwiJ&jD5R2KF>J)PCMV?hwXb-H#nUId_~Jsw>$Yh!#yNVg4tJ#7V}@>?xWVE6gA!c&CTK>hkRq;~bo(u`0xUWv_hCDO2A zrnJ^E56QE2JGIOIAsg-_wlFoAfr<;4tIb2eX8{D z><{W`Z;gN6KO1T5Ao(x^eE!o;)31ft2BcanB4_qmlN8{Ebw+ZAeCJ;`$Q!Gs>DN|$ za|g&ZBu+P9wdqkF(u9S&=$IFq0hf9~#e5u0= zdp=)1U`;?)U%(UG#n*23vK;_B+Q1j_JWo5zgS;BP1NTYQwaeGFBb@!KP7l(9 zF$!|#rXq|17i-g(#spX4WsBIlV|&2fP!@G`V>&ihy=1pS|0Rw}dZSgq&Sr$KVNQT}9rsxBFSf27Ra$*BJAyqyTB2SohN?mT}y z4g9)Y@^38pKvIi7=bG0F+v#zsgOgF03;qF+^_vJcF%9Q@-H+zqf`tU*(z|JS)}Z~> z0uTP6x^fBmr}UXDUB5hC=LLCZKP271@;1Dbb0xXQ1pT5e=kz-zq33AX{OBoY*I!T@ z{LyLktN){vbQ95k?ec%3FKMSCv|dVqB=tH%w#>Qp!}+t`zMTIBEe_@1wf?7O(Rc-u zu^*8?U;+7A$`T5M2gt&KJKi<^r0SSPcK84B&&Dzxlz;#3e~cvey!Gv5pW&|U2OUQ* z_IZduXUl2FauE7b$Ow|s3r>V(lv0pSHaJI`sA-L$xnZpQ)}0Lw!}Gl8LfQdy)(;CQ zHP6!cgeCVh|5HvmMUFrIcwic#0l&VU;R=>jvOh)#l^b7 zohsi65vq3Q^$(j})85p7OALW9#%QxRXtp9X4d)g$WH}j8!yhfNIB{+v4tQtWe)=s4 zE3pc1`PM5T}G%Q*-R+12FiFJl|J48QIY(|@y;v9(0g;;)e+D{NOn7{`O zLcDneK=s11m*6?GNk2Uti}=ADNnD0wI{?|6PQDQoV&(Ve+=)x11>PdMzbvn> zd|i$z93d0>kCz@W5ExH*LjQ3vCf}Dc4?jnS7aU6V3Q#jf-MIjhli_vAi3JUN^#Fl) zbqKIqCzR)b0w0JMwU_ya>f|snP;SzY) zKmw@P3b5DHW)?wP%uq4$h+O}u%SG-8dMXEBL1}_N3@FV9K(BA@gL?-G5_IJaH{xxq zKr{48k6o>&jIm+Z2?C^Ox4-`F{zx9y9^>PIVd|Rl0PIo=q~}3b=N0YRZ9q3< zjJI|ZG}n+7kq|mD3IHQ!GGY-kxvH1|U!JdWj}bS{yH>N|+t2N|J9UDS?VuD&rSuYC=A%E2kk_y78p+u^n2 z3**=AhC1K*`=6&`e0)nI`bXB@eE!)Th3zGukpIRtdFn5>uD@AhKm;Fzs zY(2SBBHJ@5^q|e=?xse&0)Ezn@n5Dczpyf9R4o1N>K-PH7>1 z({jMk9fs#We*D{9f$Jog9l+;5?F8Bb1Pcvpw6IeNxc6%a1=tn|`1?7&ocf?*9Txw6 z7apBOGG*}TYBQXF*m=0W$H*6tx*O*8tni zV(Qau`{&Z#tZ!86#PZtDLHPy@$xR#x|o6mgAapk$cB2VR^w0MSbuouV%uoArGV#)w# zgO~1%I}95P05I(`+PNyP(*bD(0JHXk(Wi&6mPNlZ7)3qe64PeZ{>6spSvQ$Z14vxH zj^RG|RhX(1+eRpayy;P#fM;ve{xhB6d5dz*bPPaym9`&NdIo)iW6RgA?USLq%H7%E zu+99_(bBL80Aqc)uCgsybPXUU7lE^{tCXOEjd=iFgLMjEcPv4;gjS5bA$cMH>8lVL z0kMRAyj?Qqi|#TkILB}amH=Lsv|@b_fXy1e*K!#eAt&BKR#=XKxY+=Zi}I-tOAN`- z3_EEkLM=q?PkJ>|tXOXc!me9}ILa0$n9nTUwdwWC*+-09B+qCPpv@vEogVU`r}J{u zpFB9!KS6HJYl;Xy!(OE11aW6lM9{$z~ zkPo_Lxxp?JMJd8pEGq{M6v!wCnk-#|vc@&sdj768sxR&aWA&4|R>i$KU^q z4R{3nP}d(IuRVXpmTo9r0MFdsI2$8d=l&Mq9KJ5`S%V}lt%o$0zN0cURjq_q?$@NT zYz=Iy6xe6COLDK{rS|kzn0|QCnLWd ze}>ir7|b<}67!-j{h>9~i$!R|>y+n(y_KTAc$R(!6$xU^04UG3hDa7ZMm*ifoMm#}U zUSu^*buzK{1R2w74Ct7rF6C#eU9N(i1#cMp+>;)@ZjlqTffE(-V1Kbq&6v>nMN=4q zj^H;ZF9fTp7lO)O$Gm2_7>R=N*i+p=ekM*Z*jK#%sW-n!pq7PBeTv?H{4KV_|EM=ECM}i^&CsKkl7=P9<^rJCWaZD(`HC}=I5Co-nnLj}dGIQ*3K*hvJm-AncZ42+0`uCraE}wfv z>8rQOBJ);Ztm3URe~r>@`8RBwA=}~QV&FfO#4&=c?MhSiO4;)I&n2Eo1 zKI_cul}e>To9qFtAb*u><|$$g@G3GQuF@}Lg9_bb+OLvm`;W&7 z_|=!;pb-n&-u~&A(@%!w57jnu?F9wN(bkc@j>dWqM=3u_O?{I;ofmSGbM&P-^+);5 zwuCVXU_1fObkn0PDrYa+As>mL@!M&qsf}x2gwdv@{-^_Q*Q#yI7uH}}kMsH>A1(Iw zFZ+u+VI6OC(m8ePgnI;rJ`Uf5KN`LHY6_` z_4J*NC?0jag^5}jxs@IhV)=UVa6UFK5P1x3L3?^gHyf*E_?U>`@Z?^6 z;Tt*d$E{6WT%upiuu`i_yRm%lHmy#Ti2#Z@!H55{HmLi4$>b&BL1hZpkTv1Qu#WPABq z$v^jTeA!hd75}+b>W7^pHFF=4^idZBBz_9zFt%~+)+~Qgs$RTFQih*_P!H3jX3--6 zhe7{CSY<7V;&Hscvo8oyUP5qnyk4H8i6ge^<#! zTO=)}X9a%W{Nnig527lh9c>m#( zmWj_FeUgPYFFWBcU@gUhe#h_Q>8xaYr}zT;8({$kR@skc5YXMoF=@K`zF`q|y6egF zK==O(|5>vUDq-dfzy>jx>VuVMV|PELMgF5lkJ9#AV*;vnUbo;vOUD5$1WSGTDE?m7 zK*jr5{$1r?Ts#Wi!zLp`O`Lb$=K}esPQ6mQj9@a;f0f^NB1-RV`J1s2hsL#~kqbjs zjaV4l1Zrutd+?E;(y_q`Qes5tqy+s>!`U0YG-BCe8ngtPS(lYKIZ@g$@-0urSNY>% z=rzLl;b(X>-s@WHC0zkj*5#lh1sDOGOyC~}qAtXOeHymh*d)p(Cu|Gb#H#!xQzt-Z z7ZZ7N5)hBEs0O`yc(f>ZYrwa8e9)jz?-cPsLA$*CYCwRte$j(pg1eN}CJ>Ar$M&*- zfyjxNq%g4^l#2;x(KhoQ<^+T7;zYpfUcHD>o+WkS#CF5*qsIyLPx(24px25`97xrY zA3D2x{cGodzrTOYUa?IE_ee!dKOMEkjNYnfw>S`3GkJ_Z4-9J_L0bZ@IPkT7_yxxL zr9Rk~jOj~{V+DX=TvL7>{}>R_t}eZPIg#v#}grSdrOz&T9>Sh-K*PaBCJ0?5$2^7Rc@UItYA_5}Pf$q5$DV;cb=d$3n^ z!TWC`WMS-IH}O#3JlTLT5aF+j%_%Sq{sf!J-^U&HlNQ!vAJ99Qp2@7wa!3lsvz{+& znV>~b8V8gg-p1N4>IQ$B&AOzgy3w<&2_7tq5&`H>{o)uhMM_y&w~glOKIKPg_P_G? z1@zaQW8Hmy|Hr2rY?C%C!apvtGd!=Wr4wF?*~wO^e)Bh&V0=g9Dg~c^4K8fk@Mf)to^LF92Y~Yh zSp0Fjq#imMo-McSpZeb;{g3g(aT7_=Bi-L$$KM{2A4Am1&v6`#Wv7q-1^FXgue-b5 z|9nRIqzY}T)!l#on!QAuhF=HKhGAl8uXw!t_VyP6-6lLwXg~3;%cON+dwF||_7pu+ zX`ApRI{{1D3{12+Xmio7Ny6g8{>3+Gg*s|QIo$V|gK^Y|uc=Z1chJ7m+c8wZ^K2t| zd;5<7Cv6ntM{A~&R5Vw?{;|c`{EK~CW5MG8(*9u#V1{cjTgX6U15^2B6`U6!LsWis zoP!<=*fl-zrkxUFwiTZq9RF+^zmD^Ot+%0=@9kK=z^8o~51UZIZiq~P*??bo|MG1rnM!LAHX^lC*hc07+=Xe_W^p$Kxsf>- zz%cbe{g-UTVtVid9@EP&UT6HvwxQjKdmObtr>zxTRE}|!ndtqTod{27gw+TDcI2y9 zGp>hRw2_IW=?Od_2jMbQKgMGTLU-_Fp2jk^f-F}KfOlLk+HeSA0X@$^2#n$`xF+?b zKg%KBvg(#Gib24dqxEPH4*=NAq+=H+-D%C!ebnDC?JsSdYnvCq(2JxQznxOLAXHnrBy<}hiTQ`&>$feqSUXAMnl~hA zz-US8bGnqxIY(mC(q-#=_es;H1(Mk7P}#n2mc(Mg%&c)gF$I1I|He&k>3oGA$^?iL zvWKW{;}IsYe$9)p^;4vF=@U}FVy1?MF zZ*$W2*T42^u+fHDpSs<)J*}tge7O6e{DT4FWYw|3IvhYQFRFjNaDqxW^D+FD6v^RF zi?)+LAmw=NY5uNxY{o(Us)Pgk`tRuY+xz{`ksXX$YFLw5UAk*SU$+EPVZT`pPU=py ziGGm!b5@dDo(W3gBC?V?{nmWDUV{=^!!{ueJ&TR6-4Xt{P2ry#JmAk`VnZ~KNtgU* zz*AO_*gky%Q86gXy9BZr9)a2Xi^XQIcU-#6C&sMw>Z%_G}q7a)i=X zn&eN~_|@{p*|rh>a{z1y{Bc(K@CF4F`FM3a^9^-e}zdh60dSG`TZpGLdZ!Go9O)c^-i zPQC~f6AY$j2???eWg>0Ls}mXW!#{omsGoMCE@h?s1cq6TlMlAlG;MA5;O*AtZSWE{ zkl2IJ23niJ$hH$K<^+UwRDLvolP-R)Nsr@XofvTfW*~Vpc(MOgaQ?JOY<)ORNZ)dh z0Bb;$zpXo3F{lxc(Q{#4(%?C(!v1G+bOBP*kZA(~(<>GW&@pB%lhy;6#ZM5`v(;zP zQb&IpkW1~cumdzXDFW#0dC^0IKyY9rkw3=~#z`y6Y5T}m%b1SInG2-pM9z7_Xj{mK zfF}FeTp|8hZVMAM(`W2Lu>4g6(M|ivrL9mC4t)2Sr){N}Gp6 z$Xn%x$1r8#hF(1yb6I&{qHEd6x9i{2(-so&N1ZnDqm7ab9AYmoOcF=i(J~p8Bgt#> z{M*Ry&IBb@ejbJ6dUx-C#$83XO;rEbH~Owrg#Y&HRg%~h_kT2p{om413vZPkT9Do< z*~k7?_r3fje?M0`<@At5tX$oIg`fC|W2esjJbTqzD?Cs-;WJ1#2vil-^M5aKm;`QJ zc(26gbd@fcP_)!;lsd#UE_rkkLRw6g#Gd2f_oGD*li1i&~LA`&-xE~urMLCFsC zkGAuZkU!)Pc>?ian8Rb=d3|9kt#yt3SI0h#a$QBrObjv?jb)y}gY zqkr0?-u_8)&wq|(+6DR&8PCa1Fv1l~#q&vlQP@OG{MyUE)NX}cLss7+V-O3HFTfqZh8daM!R2C{52?xDF^-Y)$~Md#DRE zly?U@8_>RC9_>HcRN5{)_mlCZ7UiSOZ#E&mqM}`fXAT#KQ=84n%CF04|8U(4zlfZ- ze<(k_koi>^+s8!vi*gaLrLCy86l^NmQMCUQG{-UfkQSZVz0i+>+sL8OPx&bYX{(J! z9cyXYb~uB&3}xm4Uj^8~m-i70*k46VAvW;&=&E3ohL8z7~WtBJX^M&f!VuZU;;JX0!9c@de zA$mY_k>4VEChJQa#!&`%jk*?tS(!jzsE0a3G=zp}w*-3N!gS+$p^WMRp1=U92WBGf zaA))j_^@O-!gef0{V~v)2iWN)T?YM*>E0r9tI6B=44eqzl)RV4^7V)tJ*OMp)$wjc zbbRxee^vs;ak!`NfBrd79#QJN|JJR0Lz1yDZX5o%-n*RlqHKQrc!0zwBJM9hT3nA? zX8%qqU%efnbFfCvslSnoqpySQGey?lIYj$DdGPT7iVsKVh@S$uogwK*d|uLqe_cu* zI|*}|H06>1`PWrqTqtmk*oHAc=bljh${9b98mwQ#i>2gm=fg(pEt#Xg4RHEucre#t z{fT8#zw9-M%k3uF2u+dF3k!m-d36V!wb4K9YJN3V`rJhdC}*E^lWM~2CCZ=r=kbmy z>_cC~>&%qbwvI1j=fb+A9hBUi`wxhC{+!1v-GH!@fX8}j@AChoO5AKL10HeWv?u`x7)Ppv;@n zNAR}=id>fr!}OVD9n*T~ZIc5dcOfZa$lr_Z!W7}?<1-%ITV4v_fh5i)DWOvERi zrCp`Ku(p|{UD91Vd{BuXd~l{+xjohYhju+w-r2Z74RRXs#*Z%WG_cKhX3MyGw8cq- zA&v(Z1!%(5fQBy(aT@HJhZuBRU`^pZfOGmuo_>BuBN#@v8~>biC@;{_7Wxcan832i$te@~!lY*#C<{4o@({`&ddF}QLtd1D!1(&A4N?fOr4s-?efGf` zBjje2k9tfr5+$DBTB3sY;89soO2KGMZdO#Tl3QQC6{~L-$w`Awl3`s2>%@VRza;3F z+}KB6eun(8{z7B9*XGBLqxX=GUjNa$q|Gs@@lH?hB z_(o&;l0OV}Rh0vkRW3|0m^hjCAuBMzY^=Hoik8FpQTYj`Diihy_`q|Q7psr=8|AMu z`gVISVAQuVI00FxD?jNWIc*?yK?SJy5VBB#z^$64o8QY6qE zrAPik4`z;aqXM9r^l?vPU%^97X|o)GcUFjc2ebdtk1_4~zpyW4D~*w5?==cS@rE?W z#rHqk$YcE3PQb}!T7jVdKcrk6{d;PTsQv6nqvQNZgVd0eXxPqX#95C4INZ2#7UIYa zRd1Eb=f5MZ<4YxV2)$J{!&{|5$9?7N-;wQ`Rw#|?(qChNlO}0~=SpZS7~Q1)XGrDq z-;&yX|B{5_2pT$b~ zzrP_}KmUrf)YnMjpF^Wf&$j4T=8hZA6tA6LKd%41 zMs`a7`;+`=`0nc8p7y4*y(vG(EMJ)WFN@e=v>ga0((X|p)4kL-FH=K)_+p&^ENv@- ztto(S`4tucQtNtnp<9WEUj>^XC);iJ8+cOF zs~2{b9fKRfL}=Iu1%}Nwuovs*&_MZ1sy0hOW*2R%dN9LgVEaf!Wko}&3k8nx%jE4< zdMndmpscz?ZhGmbu*n9>X@gINH|jvG!;l~J4yOD@4Rv7?)}j5hEol#LZGwLF>obDI zv}wq-HQ=YRAdB)7viJHYAWog}d9CA&4f7|tkJRDuhx#$Jf05?Z+t+;rh6!p8$Yodr zeHy85N^4>eOBY_YL8t|I)FRYE8R`vThzKO|UtHQO?^nbaD9KE1qb;09`z+7!dY%Em ziZBQRP{7$LrSSG;XoRud(D%-+VBU;%B4_kRxuEX>&?$jxdJ>PLXEJRaB-%dH*Ti6KGZY2Kt`=1w zm!7vl=m(S~keizX?`ej{;4y$$wr5ON*jVt!_Fu@+t2qYaP(6#C{Y!6UF4z~y0zMi- z1N=2Evywy`0SwPVXpG7Ip&zazfpXK)|5}E{w4SqnJvB$ves-j>yZ7IC zgktb5ZO=b8Ax#R-NBD;&4{2*Mj+iPLhfnnlwPvILyM1k;dJV@Q#Fo-RV-tH!)bJB= zu-BLhE|`Wg)w20d0Goe56k*v?u;}nMe64i};u2q@Wjz0k!|^p(@8cy7Hd%b<{;EGN zV3#`L3Q6cZ0Jh;^%#j$*3rVkkIDGe77`ts#Mx2-t`8~AiE7|H~v}4)!2cq5!|t^RWNR3>E$>3YFGGU><}1XRVM}a z_8ou6N}C?ab&$X71n4C?cJ_S#f134=Svr;1PKWx0)uHAuL>>G(0#(~?Pp<>rM8>7h z)G|f{S*}34a=fne;?jIy#;EI&=kJN~7Y#nhKhUUY#;J}6KHNp9qj1j(hg&`4PWyV1 zTP}8S(p_D@{N*oI?{ntNkt?T8MHr4^EL`V6_XvMaon(3U)nA|4uH2sLe>M?N9omcA zytWsMd%(!h&k)rB0j2<>oWL->Uwv4FS{m^%Xw4fJo-Ax1+e|uWISq9h-CT5oMm{}1 z=wU&b2s-Phe5j+JO*#)1@>dUE80u`w6APZgirGgLFvI=fH%#0I+zs!G9M)w+txMy9Y0IOy{yXYCY@Te~a@+;tt`ka(CLu*Vvj~*zb z_xSw3AYNcE8QOiQ{N#ln%e|ky2LPYxguFR{U^(^N=4Xs(w~Y}hAIYBBcE^Z}KRe0u zyMFx-OF*AEZVXw_g2`PhS4j5YDaf~?e{>-e1%~Ol3xky&!T>WhIsWS5>j7jtW8fu0 zVSvNhrz#R?AU>`Fl}D z3-7Q)lqL=^*F{DY9+AiWLB?T><7TG%cqwv zC)UwVJT=qCP z`#~FVjQ&$lI(g57w+*|2)+3XY}kOw!1O@JPS|D>)-Mn|2;kaRR+h= zi`ckTHa##}n(=aD%j>_Em{f#W8GAh@BL4@Ox6789zk?^r&(H^0$^Eq7$oA5OQn%>u zl6Url@ESf^8Y-7c>7UPpm+x>R?CA0!wf_`pSU(+$rd$iX<35}L@88cnDhc^VO3i}1 zF=4^1&!vRIvC{nVk7WHlVC)C$jaey8$u}#HW?# zNgVE>4eQ7Hc=?X*7KC;GQLK|B6-xO4n@ zNkqorfj0hjTmGQaK#9+H+#h@=``@sL&oQq5wf{S!|8~R=c>O!=L9Cq{f4e9@`bobc z!pn3EyI?P+>suQ1B{M-wz8G%8y_qlKz0IVHt--co9j>E5+sy96w0|s&0qqBGzc6f= zCJJLCL;+F0$foV%Us}_4qW#0XN8Wi1VBlzYh2}{;?jzN>ACB)cTE`4uTzmV^fME;m zpkI;c_`_ofwo^SoRdp~RbFikjE$cEV4gM-W$Osv{oy1n^KJwxKRPzfg>VZU5F4%u; ztC#<=g@2V%SYS9WBOmdSv*pF5FUr}6o#pI9(}}K+0SZiJ1J>aSF9Uwr+myGkb0HSR zJ4}A`{Ec$QId@=Dv25kXK|o-ab`f=Bz_7_eyO+SQw|_~W{YKhMw0jjecVDTo{j_7f z-U*OvxDW_UnY@0qGBzC@e>!qOE4co#vlyUhZgLC$0t-T8;Vwm3hp`M}prs)lUR0OY za}hTOy5fv3bOr#jxF@}A*)vEOw~IF8PJ`=wa2}5}R{_>y=k-he%;w^30~zkX*@gr( zX9D~j-JLd#w~^p6{6PysH2}QMwDCcT^oT9l%GkUN!C-A-+~N1DVq|nr*o7>l&u%Vi zhjKnPGTKFNChj_%@ zF;8*&;R1j;i2#sujGnd;gJ2qB99uXL+SmZS0qoB}-sr9Xh9fWYdH=7;%ad)-ZxA_! z3)8x!%JK*HtF%pt$Z!SPmFwvEQ_8!2|L60It%Ia!Pka1>`b!&nv7Yz+AGDvjjz7U# zqryC>IJ2+S@!R-hOgWMPBrkyH?@X*~f_nmiX?zjpljl!B*@MbDAV4q{c2znNNW-ArVH+ovM zT{$nmG3ywArAN|w>2jxS+S~lwh|=c3+HsJ-AG)duQ%XBM?N0xqxOA#kpDi>KSANyv**Z2 zgq67Z>Z`(DWPf~UvX1gS$Nr3TU7H$vs{i>6p?`*Yu{uNBJciAKH#(W{VG-100>&%r zF5L8<^v>)BFFAm!EuCaj^+w4^&5}%fe#5%-5NQH9m6S+tW2_{L$wUGsCGoJg>f!yi zqI8uE?9v~GFaTG8e2c4=fL>4e=Cjwsd!YoMjxCm9@NPb9*cr-;G)bejv0l2Q<*7l> zNkS96KO5ndQdLuq^R+T4cR;8wRU!=6O-rRqMxJEDxaS0-Y+IS6B?8<@%)+q&hc)n~ zOhq0iA=?`8DK?BVn;6B*yiM;&f4m*Wyh}mG`5P8W*Unw#htK^`O15p1lJ_HmL^-7hYleYiMkMer*hZb4)4-{BpAJ-ui`d_vh}`*vd;b zEQZI#QpkRYjsi{^*d~jAhe;PENWs{^&fdQM+1L6uj9SH{w9R5@IM)JTI2L1qo*@s; zZIF3uwo5;Jig#F#1WYsn3{t&S;Z7MC!rDm~AA0X1sEOpqKit(74E3O|f~NFh1+e_5 zw;JTkVF{9o=^0mAC#dXeYM6$I$1oM83%)^!26SE=Z0;51&G0a9k)im?u2UQes1c4| zwgkXj3xMkTXE(^jBe|##>O*D^9^=sR9EgkW^}!;%|7ti0PH@oon&=(O7ceNNvVlzu zKxL)rLQYsgP$3`0Q`T6)$kZ00KJ#&rSbgLZsJ;(h&z0BK$u}n=1Pbr}^ekp*3OC76 zngGN(`SBjqDvNp%Mv& zTk$!wEu72){PD8~UqFR0qJjLruIHt{RxmuZ_wRpg*qgR}tMLmzYRVExu~;Z1`?TMy z$8`d{J7TZ^3ae3j>a7Bg70qx|TJd73;KJA8<%@xal$bL_QjfU6#;oQb zljojw3_Ol;Kk+FZ@q@d6VJWP`tq>sbEZK0^;Rq{{Db3YeB(Zyu{I)udA=^Y-ZYcl|{0*Mo^i#{4^0R#kj}XK_EZaoF}M+9i-69rrTY zBij&s2Ro1}Ld3mG0@?0vn~Gp-R#Ks8rTeN?Ajt49zXFFVxiH1n7x>i#II+_}X1E zk}{yi7TE-wFAbk`XCbaTy=M~2K9Nw2Dvb1E098xe$E*W_->^j(_P59yh;P=|H%@;inIy7)1iU(AL&ybmh*HpfF9b>9vEhuJ39XCeitKa z!FL2`a^b%m0>i1a#T2Chun2Enc%hE%VaMb`TV_c)0L_9BAhpHR5Z*vNj!_o$IR4A3 z36wKjLRfYhz}YAb0`iK}IHm$}^CsK(zy1na>amm5rSc-hxM_ zTMhGo>#!&n!nsrez7+`JFt(4=7wN495L*EIDgkYDFYXC+FRK8!+l}#>0Rn;q<0$iY ztOJ$VAG*jL0Qzw~Xm=4TBrkk*g+=lRoadu1bLcruFX=G=w7nyN>XGtgBg8~H%bEST z4E?8G)}7spA5w)4M}9>!-jKIfLr4(i@s7#(ho?U5`ERwfj4z04d-VPnG^`ze@M~B% z4Phn5LrX~efPX@_(E*#FS)TPi;BP$=-YCc`f`1&9 zzEdOhbvL-$SJuF<2GpUtT!2aH|D z>$>f=U&xyBHPV33Xufsq^>V{=H%L#!T;gZwUn~Ba-1p`KQdw82lbWv;e^s7a@|?_A zHA5yJGDXJsA1^<9`F2SG5Zevm7|uQPEV<_CYa}zZvrHLwwp>2`N_qAD*JOC%FvJQg zhO=pltV>!iFD`po?w;`n8IWHjsY$7F;(!xmI%v*V`MR8X=oG{d8z|{X{xcq%fKZ3O zeD${g1eXC2+%CVF@++ANUUBfmOoaF2q@j~!+Nw7s6Cm;HD_)i#opiJOXZZ^_2nDP& z@R`$^%5`$%zrQcNa{54DEpq9ougf3j-Y;8fs<7Bdyj*PDP+~eDAT+1tByN z-2|hgrqoskN85P~)4PTfKTaw*xnREy>o!!cc@#kp?&a$r_bvM@4DG=<;pcN4Fna$X zfQa$IIJoF~nZI_s990-6DM@kiuSJdW7l6g*9+@B$3Nd-00Zorpp8&81AgPXPkq6&w zkgTK@nN&n?3Nvy&Fs$CLC^vs?lN6-1=z<>IvN}l~;=!>xy>WxZ=a8ZIKX}d=MyZz-2La^>#UKKqslHZN>|X1W6$S4kpqC zm=8o0ulec09qM2ClNNzjmIJ+q=7CO862gwKpz(+Twk)m*WBj4H^;l)Qlbk+`G@)IB zyBIsvnTFCpL4x0{@B*H{u10$2*aRsC-aYCS9R-^)vC}-SZ+09*M^FZOX}e_cgvk%I z9AJ!+&?Ul#M9QtJY?0SjLKk@n@cwGWi;J-T!ARpUuUpj!uQJerE-_!E3XC7=b?E-* z+yRV=16!`zE#JPX#04WOCorLkXPxS);#i z=i6^}uv(_k_0pkR5;G&8C!!4aTg*X>3lvuV=vV^7OmRs$k~;7_Nf~rrz&|#vCkn<$ z!Fex9Q{@V2EPq#$x)-BPzSgme#qHup$6rtz8Eh1jHqH)w3){+X#aK>7a_ZRE{ePg3 zzYoA@!0YfGNw*(XU{AXvT05~N8$%I$fTIV-!+###WS4ll=vKx-Q zL9YMT_0ku>Fagi6;j`!m=KV=3wpBA_s3*?&d*UIzDUQqk-nBEf&u)%4?SBjk+JHJB zI6!zYE5)50e<*HWQLsEmHoS4^#Oz)q6Yy1!S}thjzTV;&UIq+1drkQ=!~_;o%R=}C zfWR&bx`EfKdKa5L!nQH2LRNf}oF=o-oqEY1O_OEA7z7!ee%u$u$-F~wub<8F&34J@>#seyrReU zHjtb8U9<`I7P!#+*@xyLFubgs9=>`?^}h^pjEfOtI4_l*W6aipEAU6 zUIq|&47{2(p*R!s2Ihd5x3Ms0ro-zu3nrz8m_Y5N&=+GF59DHj3Lv8*^#Bl9!F>ll zvrnfXE^{{eG{3XcBg)bKe7_Pp;7yBv6wvW!8`>m}S$ED#`n#Je<*KVt9UXrpLH-=z z2l=;AdvMS}{YSq9^4D}5)k57$(r4}``qyWujt3404l0*AC_iiY5qcoWe{lT!4sZAS zsp)@=O3Kpi`m?7f$2%`b{ONT`gHjLl2q%1jw!2msc}P~$m$$s&yb%q{xng>qao>~2 zzB^@EyfJI?1tMjc?@tH2k&Nhh&9-xqU9(r1;mKp)O1Z30DgRkm{BG9FneN#eBUep@ zm#`O{dP7o`bWncY@Y*DQsK0g)+3m3YTWPBh8}?`84iL*ECEUK zqj9@_>qc2#vRv*s`!}*4#`*fHb#gc+4c8xgt;}0HAD`p>Sr!3&{^H0l19*KMZ``Zo zwfA3<8&CbQ{Au1J@J3k$KM?@F0GE&Ne}X*x_M>w7ge#?}ph&^y9*D0wZ|yu_Snney0thF$0(Umf#xIbp!Da@Xv8WiG(gSC_veH=p_wc&t7w$Mru39>_LfqEXHE zR@ZGqT(9@!zH{%9gu)g&s~Ga+)mM{GPo2{!4P> zDL;}&=KWdzy|}Zit5|~xRr>G0kt{`s-eJG+ydeP{w+3N*^&Z#812X#^r6fDGvxwsSEW z^b^r!4_-QUBf1MFm*9ZU;u?X!&R^FkOEztnV*#*ETiGOUu4$0k29c*1w!lNXRVEDF zj)^T6EW~7@8I!h#W&qQi6M$YlSS(uGAlX;}x=&6g`RU|1xocLP^v#Nuvxc&eGuW}G zAtGR?|MaCg*<5WCv!B0Aur@}{Pl%I2&Ld`9Jw6G=C%>^N=B84H7j#Jq74k+5XNdIQ)?%-@V;)45xo=S)fM!>K_V~=nbcdvdjkXH zroNt92ygi ~B$XuDCNra4}Km*dl2UdQAEuP}fHY49didKmY-zzx_Z1013Z`&0Xn zUdKK$9x*2^;LAl&e)U?NR6$O9XWcQq5fkuO>6hCHpD(-qr}vRgUdRb;!eB7y*a)ha z9lZbfG3J|OLMVB^u`Cr1rM)iwFY?_fQ*#ITH*J_L0xy*yd1Cr&2a(-9&OdCuYr!7m z-zlq~@J|)v1@!cB9FfkSb(v6ZMCi!wekXs#*4(B3_gV-P;Pn#`I*ci%X22%-E57`gFJCIY z1TVo~g{N&Z$3=M`7ozf`>3|oDG$*$zWgodH&;a1zyr0hA+2ju%IPvl)3BX zD%klBzH-V<%ateRKOsE;B!7MEr82JXSh@Gj2N4Qjj=Tn&?50z1!OPBv<o2&(LA69sjytLvK8IG^EzCPw_vKg_4`(*c$H$IpS z`vUgE#&^|A_)oAg&mDfQ48u$O9~^fBfVi3R$lHHboqTcB#jq{jz)Sl?{aPyyV}_$iAX{g#s-F>G^64Q{T+c5rO{F7{z#b&zR1Poy@Rn1bjU(+;(wih6}NfAO!m9 z8LR-X_N&=?ysqfo%l_qajrMntA{Sj`_hYX=-VZr`_-xih?^*0J)WVGaXYV`!{3@#b zf3{>xvYX9jchfuRm5_vxLTEuidhZAp5K(E$6ZOdxkp6t4h{_)n6{IN-DHcF#5_*Ru zo8Eh}she%t{eQk^?)-kg4e&@pXp%|xcki7$GiT13xpU8a@0l|TagET0*hJ6JCcyH+ z+qc3qh4h?Gp1%d~QZ6QfuAsYeaV4wVfze`^GG!^N&3FeX9c7B5Zvsc!^5S%vQ`tbS zZ2>?m8{fq+4NFHfRe-U7O@1#w(5T6c>d^COIokiC6^d9g}x%_u< zmtD|f9aZk6dAO&5PCIS7=e5ZKzh-RFA{PcbNiS?mcQSR|b<-C3*@u&|ie=$$UU^?S;o9X*Ilw$O_$_-H} zyz4Y0LW$y~AHzk)={D0(q!GwQS!I@=A{7aSq`T;6%3+uMQ(Y$MCh6you~rwv#~!3^ z7T$0%h6q39g_edOk|JZL%t)&{;VF(c<8|tWPEuoUMyllD_uJ_jC6~(49B71S%)Ea*4trCUu%RNkzq&=KzMASqL{T(F@sr`3KS|V(F9AS)?y=ejeL09#i#r@Aj86 z)dEY-nB0BLB^zx>iI)N_3*pqH1S$a}u6Jva;=EmsMAms=vlafxYQNm z3&-J*KReHk!2)F6=Cy2QvD!`_eHIGaKwmZ|ml5ZTJ=cbJ9O4RatNfOB^Q4<>c$ZNC zuLG?^pLQ%4Y;O<0^DzE~*V=y{ah(H?6MF1zzkdGL_BX7Mi%|>@W#ZAks2%PchH^jK z-d_3^$6V`G-i=+lYw`P5WJPQ!(1vA+7e0J3bsb@2dhEr7rn`Ojq3_`{Zyi?7XWPGK zJz*Cy5t_Yno;@+=aXV$y8B8{Y*j;uHE+bai7y2D&NAHfWP?YrfRSTK)+-{dWegz8g z0IXG7qrA1Ve@y*{t*c#US08pYieMSQZy$j0JM6m;e-BHZT04I{GQkq|r~!xBCN?;b zWyrq0CImUtR>QjNVQ1d+6|8ZJ?6Qgfi;ICsKO2Qqu<8W{y2Et*E11y+a!w4N~WD68fd<}jhd z$@Z0p>DkD#%l}p_PZ_?~-NA!f*xc1MHl58;aEokLA6j5}xmc$Fu&%GJx2I;**%t>D zfXC+8Kc?5)^YiPiH4}n!M`h!Br3CUgxhf z%BlAqu;rn7OMRpL^5sUWTvF#a`&D1ew}QqxyZIF+4NGhJ@KNLSn6p0L&{w#sZ0Lkh~U3#%`A{H?&EEVYCy~m&J>VIBf=&Z3z#-m8Y{^#Vj?$g}e{_&Tw zvGZsj|GdmkfWFgBF_}6^)g&GB(eVFX^z(2*5$VRG()oFmdpvpp;qH#e-?OKPq)xVr zzN(@pw|SMgip4d*k;KQFo;fOUT!h5&Zak`tX@O356d%CXZmhB@KG>f=`b@yzA$D)pefV)*Zr>dDO@O*SxB~+O z#47j~PygJ8bsa%@gIGm#02>5%v4`Gy(AL+kw`&f&#^t(yul?*Me62q`^%19k;DCdC zBjG_E2Dl-?bGWe)WIB+Ic4ZMOZrZWJp*8y3#gANKqtN-r_Z(+k+IF*xAHKvk;Wq3m zSUEpE_bIy&Yvp%v4KW3a;nT6|9nc}@k4vfR0eug!FO4|O^}OYqmfIaK-(lCW8f{RA z!Pbh+I=ka%{Xy!w4*l`QBY(zbV`bK-VmG@RK={H3FZNYrUmN>1Hw-vo@G&giU*((c z4d~t*{u|w$*pSXc?c6_q!`)u|;K1*v^k2F2Q2Pt~l`)0DU0HQU{W$I;5qu{HT{`-D z7XQ9^GL06N<6XHt)Tey)E{;c%&MkFUD~v9(BV*^YPE; zt;$T0&)ny*Rvp8}a25F64Fxs%=4bNN8(lK!##F3v`;^L6LZWk#U!(;321{3!h-EP@ z5b)m-HcoS0F<8J#U(jZ1VRK?x0XN!TCM~dw4(k>&^1Esiu0uAl!J1nzqjx1tPRHtZ zH6N$@w+q&|GK^SC+Ok%x=MzKdVG1f!C{YTi_BgC;1wg0VQ{a0T!1uW&E!ey+%jPVv zw&{yDxC^<0q7pW$YqS^VR@)`NdBa8xEVI(GHg?LGGAwt4jx-gw4{cf5)*q|iO%2(0 z$fZx)pMJQP&0nAA7QSt9*YU=@jW)D<3D&__{o+w-)_uq=lAv~B=Qm%M`@1e`Y_+d;VbNJN7bF(W*4iGkXfFM{dF zdfJ+72c+}xQ|vPZZXbGiU*GJmLKf8$Sr8j1N$^5r$;72jQzxmYbWD;gmKBe&Ome8t zrvv9Pb7r&>cznDWufq+!$LbfqV9WnUqulr+;Z+ehDt#>~6uN6Cky%OwgYHmq)?GtzJV^^Wlp5mW-L2^d8tJ>L#b=p* zb#=A1Of2?3E&N}I>xgt{-u^o-|D<=Mnl7H~%=TAVp+87z4+^c8E~5DIR??2yQdkwj zrWpEC9rDO>_1Z&!Vhh(Sa^JWm_^kWg3AedFyOI{Iz5jo2|L@YDv+T5yr-VKSOH!b( zJ@guzy>_-;^Z2!1w%&l}u)OaVZ1z!!U*OePndtR+z;63tby?5yzC8iSTH6hWUFVi9 zHy(4N6=k=?{-n;WE^@QRprmgG0K3waX<5GrJe7|=fvK{>x$4lXY+2P(ta9JBY^-yy zJM?O+s$a*lw-TSQ?3K8K7z{AozhhsNeEh$`|234^fOYE+|9P3aj*z?#?0=B`7G7V+ z2l0Y6i}8PlRVzyubFf$)iW`h}1r>JHL09+^LZ#c>fN!}3guitEOR((BwKGSbMqR_k zc5$L{F_zN{vBK`vrhAYJznUP*rH3XR3R)VdrHQJal!(Dhz&zf6^|Q13Us7Pw?WClH zr4mV>5eQt5pV>lu6%xE3p^&;ZL*iqw7{33FI$Ucs+68;(TE9*Od?aYH>mRGJE~RYN zg^BBHOPlP-E!p;ihwypG?$2FH8nHHKx8OFpSn<>_K`g*BRz?z8?z^~W+Z^jz0)K$b zGw~TLrP>2@*Wvo%x+fc~8vte-HW7IZUvRs(tMT2ce|mJ0_rI6sVk#`yZuN&ZR3;rFm?ECxV*t*6%`vc(dJnDAYe%W@{J6NaG;JO5Wd?}X5m;GIS zj+rRXHw&@ym^`~4w-yEV#}{kt#^;*sdlT~=5P$gXIy-(y7S>&|UdER#{5&(O&W;<* z64l0R``J^~HgN#f`}hD}LAiInm1PUC)cLP3wzNOJvKfn*dV7wYuIIDt@v=i(+FiJ+ zSWes@UunXPN|ycP@K*N5;##}nU$t0!<=S$Vgi4ZX&XO7{Z=G!~ z%&oT{?hoj_J_idffN-Tn=JK2DZYZ!o@;F%`s}TNlEt#oYDYBWt7T|3DqQ~wDm($Y~rkNcR~A6KHO_7ZJ{ zkCXl<&3`6+^;`Y>yz(Dff5+QD$d2bP>CPWj|5uL_rw#&~ zWuZH=>u~hPV!Qkcm$|{hZ;t;px*fVBdan5Y;r`!u*_}K3Y_0)kCGW(&(gpi`3pZdJ zup(|t8wjvR=aGO2+E`Eeu~yeb9Zjy-Ub0$n-fpu_8&>@$o-A{pz*+VOcvhvC!?Ujp5KU&iUo*cJ-Nq&7&)Dp( z$RS0iIt@UyYIE~V=~R;3H&oy@B6%bdzr~IC(Itit#^QA~etH{`#Xx}Jv=wn9*2azY zDvpJp=+5R}WrfzVu)r$U=CLUq)rlY{Sp@iM_0j-Vqm?JVy=JUvurfeX2b=jaubQsJ zO4oh!_6Xp$DlQ&T;Q8R85Bwo$gS{zBv)NS6>{ky}+M~}cv5N9S+q4;%4gj{hpTCDa z^x{$*-oLH2Ei1A4i!p4uW|keZZ#O%5Ob^$=1q{o5*Fu2SQQwE6>{`j+{6caZD1!E3gCZ>GzE|06BZ&W4J4>9;EzAp>2a=zlCGi$O#LH zCizMYUt(2e+;pQy>uz@IakpR{!3H5HcL99PwY|EJ@^jz3EnDsaCQ<|S8G?YiEm_uz zNsqv5eM%JzvfhxTv+AXEnposZ@kb%mbx`(mtwU)C>sr>CX;j#_MZj<@TX_{~C`;DH zzNrXSz8;@bZ&w_0nY(c)pjIarY(AUV)!F0Ix7b-@a{)LTtwVmDU3G8)OZuAZuW#1b18>&b#bdIp zV|gBvye8X#1@PR}_4dEScg2N;+&{FyTz46O=~*MQSuUC7z^r@=tCnNC0j$$+sLpj~x8&HsW5S z1-rJlu-6vJ!iu!G)xa3ppQA2xt9JN7zF=RFZAeeyrxM?G6Z_K#*+k``w{d^b&}65L zD!~6EvcgluM%+-m%@WHt%>7qxkd;getsJzo_M+`^FEME@&nc6U8~#}>(c5G1u$U1U zGud`B;ySMT*eMMdVw!$t2uel3Cc%b%!b@2TXj`qKX$GE;2-_`Ch|GwG>jnb+^8 z-^5bwhN@YXQ`*aN3fpfN{~O=_o#hlUmiEw?_kQ93rZ3rM%5~FQl-ZgxyT>v=Yx3V( z4%@>&ttE4tq%Ve&K2QA97yL2Q4^JebYeFC{!OzU|7g{a-yFKln@E-=Dq=+4Ff632< zn5xXXpZ~3&za1O@!iRai=T)9QZcCpK;He<6F=a8#bpRLvC`m7Up?7%?K%w42??F%4 zoVYj$t_#!`V1(zQ27t6Ux25YF8Z&z1X67b7ycYn#YLi!Oek&t@J-h7z4c-Z)$!DXr zL;4>WTpS-eBl^sfJMCf&^4dC(pa#Etrz z+CnJO=TZGi?H{kNv*Eou0XW@bU`IP+Tsv|#+T`i$txv}yTV0puzJB|%xp8>{R!>{5k0oZ^F(MHEIedH< zNID&TZttGCwyA~>A^F*E(YyvX5q(PlgJ*64oGr2n>N|OHHXFHR*=v=n?C}?t+IdI! zv2Hy&TCdhy?0dg^%PzhBZ9WJzSl{k#ZFsK|yY$GeHV@w$r(N};RaBJPsUzqU^nq%0 zw%h(Tj~bYDVzt>L&(FgpUXwj`?cVmiJ1TA3?B({Ay|oc-lf5u)mF+j8GiLzRfZVG1 z<1Z|?kweLZoNd%R?u z0P)&bcoml0tLt*`k4%0E$bZoBD#~r+!;36y0tO|-XX**+-wN>VM&l7^3}GPmUBQDI2MXk)6*&dh&OGnw$0U>ZP<{3 z3HOn$goF3sf70{pJlwOpb!b=NjMm{xwjS%WI>3^=MEOW^yYSMSr6m&tv~&2coH551 zEnaLR_t@Ra+m_nnPffCk`;NDKmV>MDwuSyHufGHK)M!Ho4zS0bnQVFF?cZlN|Jcy1 z{iVqHYy@6HL+$+bM@MOpwI>8}e6zU(7?$M(6A}ei%5gP;+Uy(BskggA?03UYAr`ut zusHDRd1ZMl1()*WR~AcMDgIK_;dmH-R~ieYDR-+%_dFY+HPj)54x?n=9@{Vzx*)LR_HUi*RLkEBT=xj<-S zL$oYhNk~ZzeO}T*L6r|XLOxD{Jk(>Dg>nh=1tP273Z4 z-^Zpm+J60*kkZXI0D3@$zXNjqXzv30DHi~hs}|-kQ3FY(cJi(J78{M+@;rWgF(nZ#iYd{92ia<|xn z)0^yhmV_R?dkeb}E8z40vJwB+Sc_m;a>U>~``HsUcK-dFoOZwVTkOz*d3GP|@X#9o z%RI-&jbPKA9=Z5)ZnR4t*zD;BbjFeztKrV20MjFK85bJZpeP$_>n4^hXX7He$*z37 zmLLdjyn$pFc&&RE|T1yImRhfDuqXG8~@uxe>>V=q(hln6dG%k zu4RY|*B?0kDVb;3KKTbheKP!0zSbcw$t{LNdfw5( zdGk9v)c&+lo~#8Sq>tXNGYMGZTKbqaY?BTnt5@k6XvFDfmozy79nnGDT9v!{*snUP z{nZbo?+7q1z`w2-+Kl_HqMRbvTcpGA;&nRGmz2YGGkutce*vv3LtthM(FK`L{RFfH)u16WvKnNH5HBf6IaYBEW6& zFH2m3)1n(eTrXHUE^?9#6zW+8rnJt#^ikv_oiggb;!pm8WfkmtC~}t8s1;w%1n8; zWBgOOnf=e7eLerl7|^G5i?vI9*~-WA;N9A@N{PO)X_Fm!^P9E~*9#{e)Wf=U?`C^; z&9<8!nQO1jt^!1EYZG?w>Kn1?Bl4Gi_Lj}TjY5~MZS2Oc4(20&wO#k;8McH~M!f-7 ze{xbERv)p>4~y1^Us`FE3pUs><2qUAvJUp}b4%=kqjs|v#bv&kT1(tN9C6tT=wW6X z_(*>6gkBt3S@q5`R{WVAyMHem+^?grylP1zf98;h0BE_Q_{GC>?ViWyqhIFQrDu(@ zu>jRaUh%5sTz9^F7zSEV#WF`He)UNat}J5f+ESFXSV;O zXYGMk`*^f|LOCu$*V}gX`_~D1@jGe!^$LF$-@m)~k9{_D$fVEd6_<3ne{cP3SNk__ z|1bpoyN*BNE52is7nF~+VU*TAAC8lUK<7~_2y*dfB-~9RTyqaGnZJHF-b;?Dd{N?h z*?VM+Xii^cIQ=;Kdql`GZ~g*n+qSJ07q{XC!7`OqYgl5#*UluZtk$$CSiZm@=vQy9 z;l<5M8Q?}6f6W6d?b)RpA1FRaMrxeS2HYvAC!eN=SI2 ztNk}^+U#^xPL%&!Z%?=5kN%={>d+oQtIp=47ziAeY(?MG^3x1}jQ4hS`>Rj#C%e%rXTnwYe-0NB<=T=IAOOMkR43_K94 z&<>$)$s|V#c?7XlZ}AuFqRB#`lrf2fe{pG`bA;T5*$B*z7CWJi=w*~6#Xs;BtUi3g zmRPO`wAO?!Om--NiAu1Z*2FHzTXkx|^Aze6EJZXiiq=1l%;K*y|cIhe{@=t*BHP8*bn0;kTzCAm)-oDU_ zjd5@}@pXXbUr(xKgF-Bcv7oJGoH=`ZzI94`@L5A0mh?IH-$xe!M6=U3%Db#s&KM4V ziJ~w6$(J5fXzdHO*olMSwG}cV^aVg4(J7DRuh{^{`SdHpzaL5k%Lq%DL|l7#o;^FK z9zV_0kB#dzPVU=>jrZ_<*MrSZu0N~^%WRetu3@rYi%(@NgReg<&;0~WuVT0Lx<+=N z&tU?U@767aOqRS2q5Xpc^56%+I4`Ue@Cpq=ri}dpe6Kk|Qw#NqCVWJ_;K@5wpQ_z57hOgqYjN#R#D`_Q{{?so;8eZ{ROa%2h`=W|_^2oV zIkbN)N1&%HSG7{g;{d(FhwNZwD}6*9NjLE>l=OdD#;Oj|&jh+|WFy{x|NQT<;0R=E*u&g7qH?xuBA=|2G& zm(c<%w3>qZFy$3bxh@Y`=yG2&gQg4tB8V*DTYSWg|72+_`E1R9bm`&yb5LeIIz!B} zv0)>dy&^jYuLF=9KzV`Ob)L2*0Plt^8?89ImD3M2OiqNHX#eyW2MOKY#woB)Pv<8^G=e46CeZxM{fl?zikGXY{uVZhFBH>hd7JH(Y0K8Wug7_pxeL$L z)oct%FKmlw`?n8LedxvI)~`pYEn2b3CJZdKz52DW-##?k4w%r-{_D`T!QBPA@1G|x zvA1TewJ#kt*j{>l87s)DeRbI~R;z8oNa46Wil|puVfs6)q=ye^XXCq|Z@Trg0N+Mi zx3KdOVBF|mskmEdv$mucl#b4PtqZBq&GJ-#!I&Ae0tj%q61vOEv{ESa+? zvZ<~HU>IW~fbaPJUAYmk7>jE4{}F`^_CR1$#dtX?-$U|j>pUch2^EoawB(q&vmO0! z=ZwFB;4b>!VqtKQFt*|O|8&Wp-l=zy-UIx3h<%KU(7vfw-qru2Y<4|=-aAq~<5N5S zX!K3`b?DvR&r_fE(ywrm`NJDn3W`y3o_Y}UK%`jq;v(OnZ0>nPI!&|7B$`JpJ&tFT z7t)4Ane^|u{}EfYdKF8Y8||1Q4z|1h@}RZR3yKH!po#n16HiU%iz$j0O2HQo*w0>k z<#n60V4)2iGyv<_VRqmB527&S+1qWW+t|?~?T`2T#R>ozMvvOvjyQOtz52#G)_b=e zHh5q^xA<*cQf$w^^r}5O`6VkWD|H}s#PA{ZHh}5eg^O(1;QrRSsL0l=UFY|Pkgu$? z)Lwk;O?%<_*Q`g6F4neGsE*mvD9OF*(onN=VzUEqCNV=Gq!N?Vu0^r z>)f$DzKRQM{rZhIy>hl4cgz=U%JZ*UVPU?_nX|wyIPWX=%#`Q(0>02T0bGCiODEYs zAAcIKe6?HG9(VX5wj5c_U$EGYKI|ZGjwfnn9VYVCRl<#qmE?H^%sA1<3U_*UIv2isr$vPEK% z5`o-kr4X%O-I9ZWT+;?A?;6VmsK#Y_uFSfMg(WC_2n-EMen5^k;X`iKhBbgyoqggU zYY630BWWq1E4}0sJz4E4=)QcfNkLYbuF+z(qRmupoO~1hSD(i3>oIov@RN1d%hEv> zB^p21)KvM0iw3MK1un}fLv#evdi@0q!;36L6vB?uQoJ-V32{EL!a77DP6%WL5-nTQ z0rbq>8PcT z@>g7+Y*?c7o0%9E$mIoPgqOaTLXEcX`FFA*>wEUUq+5|9oM~dS9+0s#E@4x&fLA6q z3Xy&QFOjDJWRIr=>Myqg-#@T`4gSm)t=nRK%5#{QHrNKNiCgF8+A{p&?zbC-k}gN4 zBZN+XvS+hNoNpfI0JKLlF>bIkMv{hSPC-@q{{H#4Y;~P2scXSxfwI|E+c!-^*Ou?z z9ITZG0m2GcRlVaTY9W818-ZcTrWZhO&(>si5IL7!%&`hSHW%P`ixoq^S6RMg%iLH2 zAXPq)vl$Or<;Vs;xwd-+G+3_5m$gKK6h#MYU&uRw4{HT{ph^Yux5jOQwhj?6>}`Y0 zv<*$GWt2NuRvV&mnIw9E#Iw;ofv-g7`AN~aYMT$El4^|8w!O` z(>AI07YIz7W`@Q(+`X`=kAja)N{k%Fc4t&d+TU-gK9WIFUQkrCtluC&eB~iH9r})+ z!@v5GpYs#W5*i*Geo}SwOHzeGQYo5UCWXZQr$RHw(;cNxMXfOUw`)dltLi{+-HSiB zqP@OhElT@YE;454j;725B-C)s{)qabEs|ExLSiEX$Fw?daHW+hqh(i0xKSQt`!Y9&4t*o zVS%mq-xI8n$#{$M4puVmNBHI&Wp!1vaaGaLDkxJS^ZoBEd2Dlec{+X)v4*n`;6LQ~ z2*;ltpdah6F<))zb^HwVzgT~7i3}cstWzwd8tQ%fKY8`c`Lc4x))>6VKJ_a@CKdpz}->(bCK+upxr}I&H z4gQ2Xq0hWFXT8)f8#l1r7H-V5ZywQ?RbXteHoeOJaqW1!_AfJe)#up#PtLVd#I2bg=IDLHPYeBfXx5g*mqG9$jo?N5I>PHg+@gRj6=CDFdXHf~0*N6FHr zfs^N=yI{Fd-YVN3e0H%NzE5}i^Rr9rfDs*R-(l@+(!G_|v9!=#Of~%d+hM0ZhL!bB$en&M15bzvC{yPTsGVt+Q74&_AZyedP^y z!h~)vqyM?D(q;F@2j51BO}1opt?dcDAKmtbU3yA?+;bIS7$9SiYgJCV3qCFvk-v2EY&uX=HV8jlm^Mr&!(+pBffk# z5G)DLqgMnSZt_w#G{zlBc^DdKSpmyPUGtdK_)n`dABy@~c%sw~;+bbl(GOSL+X?+o zWqqFXk084!x**?O{D<+!`vQGV(3rxm{B$E_B-)cb49FfyqC6u9uNE7=o`PO+xKw;6~?{Up0 z682l?oMkIkt+GW+mI0u4w3ClN!lqWvvS%heZ_8KkvKqaIO`kE_sz^V3-h4ae@Gsia zlc(5=Zk2zX>(~E7;9g2A32U*|Zt6z+f6|&fEnKIt#chYg20b zOxVlz++(Oc__xPx=FB+&vJ32(BM-5sC_@&xtpTX>06$i&T+Py?WmY+JuATkmQ|ykr z{^C}?;=H0lzMPVf@IU$am+kB`PiFZNe$I*uZSk_D_LVbEa@xPV<@e-ii(820cHqPb zHUqjEfB^szUmPPfu3IHPvFVH=E_@ z>o;t$)oa$;bjna@zzOKLzI7&UGivOX+wVk)#IGlQi3bkojpg)e>)NR!_)uQ(RZKg{ z$~Yej8P^Q2li;?4li(`4M3^JaxTYu+Ig25ihgb-@4OI9e$!K zzVT5A;4BJqVgVeiHNsbNU!;eEl>=}p>*h*!uKvR*zq4OGf2-a1_W#=PgO7HFUy8dX zH?jbBU^cIiNdnd=@DQzOBuUjf0N)Xa7Kj#rGGTyH%q0u77=NZT3Gxm4ocG`|B2LmW z`485?0YDF%ipb9%6A=Nv3D6t-G6Rw#V_5=eVjiYYS)MDjZZ;P=Y8KTD;{v!P* ztm{=?6Xm7GKhY2VUjzzLS+^hr`_Bv9B>_Q)@4@Ahv_E6D z(mCBkRFY!~l=cQk@{$>ope#O0D5xZ-L!PV*fL;?N6*FUMjSV_VX9;~j3-b3%!VciEQBt8L9=7hB6g$JnMf{z5{=EG+5j0dUI>{Iyk0zRc>^RC?7_=b8mi z+m;Qhtn=4irzD>J$~$evorhbiAxBzvx4muc<5yUI`7prX!M5^&6Dh0Q%8z@%mfwG@ z6?8vpp(Ca^@=AQ5{1g6Nl*zgJLi1A8J)Ad{8B@i`59#q1No0hKV183VlNr_I2eo6aVOIkh$r1Z?GxM=@cx91J{|iiF1;tXjvug9 zub^AVjySA1Qi5oKD{xumDV^?DV_|sxQ`gyd_WcekRf_EXw;!}G?QyDA%lbCag~V3q z1))=@{iT29Vx{YVD0PVRE0;ZrlbBNruD&GdX@@No&ZV*eKfj#kfm+VM}w{=Daf6dbgIC6kcoh3 zfxX_Bkwwr8rGrGkH}D_nhv%a)vRfNFXn2JkGPb+j{_qUD=h0ahyJp+>0ZU(+S7WCh(%bg#+X|hm%>MQI z3Y##jqqQ$9vd3RqWPf{ZzMVF)yUkz0>eKbK33}TA+>kZ4Yh!I&7utzePIet~Sl_mG z&6xx34^J($C*E3TUp@#wy10v2ixseBS;vQl-<&tp-DPMVDEccgL|9XkZR2`mVW?7X zU;F7RcET5SvjfL;$9j0Ped+pFd|#Yleah@Rr;oJZopW)8*3w#Iauz(!-6|szKaP}rR8?;e{{8#d~djExf z;hjT2p_BP#`cBgGh*1CAG5sS_2=Cv_@uyiEd`$F1ZFcqlX0n%1cF8{syolmM^?x$Q zKCY5tS#Exq{yL;+eYr#Go3k`qaAwi0oJ2i7pK~)Wh*RopSBsZW}`rKu{}rb?(QmHe(epG zIoCQ!tBuEo4(e}@KJ|>fj#aVzj>^)uq)oB)*{uhbyDwV5zP*yVvb*Y%r4Af7qLlr= z-`!=y0HNzqnC1dDKaW4+-3JeJ+L8bMlXPk(raG3$1RY3i2z5Oohj(mm< z8ib$WwxnHVci;D*%cU*#mRL)$9=`4OcjIEU&i3DDoW1eZG&}L=!)*SdCGMkmzX@Yg zJdMY~`u02S1spE0iTjPW7SM>HdHct<(=oK3|Hf!_g4piym=v^i{|nK|$Y0X_I@hTt z&<*Tltsweaw7iagQdp$~3t&}$6&R^yfUfwui-V9`RvND4l3686VV=8UuC*y@V^7bT zWPg3@eyd^G;T^BsX$SN<0L#t(HgokXdu!=COh``iIy^S>2|J?y7j5aL<$SGQY5m&u zv*jGu)vRNgeorPo!2)AL%_cS>+lZlRj$JhF+xFP3C!}g4h5!t!9-1)JHPrf2$!V)* z*{h3Qq3-y;-Tefgh-|83ci`2PHnjaPraD@t7?gY+gR2RanxT9}|G#b>0}ajp1T;%- z4q|)FnUp2`OPSYXOiKuhSV9<6y3NMcQ-`F?HZo&U(+npq+j)rA$R=%u=#ISyR-J3!x=*f#n_dwk8R9{s*G?!6Lg-ZQNc*Eh1*%?5mF(WM_QA%^o& zU_E0O*54Z!I}dHXa0UGbux9EVUhga{o2*7Voo}(FzaL}8qrQP9I#%cS230Mxb6Q$< z%VKLi@*-P)_ZNxaL*t|0uns3bX-&9gDj0kk_d8gJQzvhvJ`tK8yT|XC5$TJ&~)k0Xsp$ew%Z} zread(saDX*XN-SpOi;!7bM^v{&PH-aDL!cYL3-&SO$tFAcj8fn5Vr1rA$Hs8D`gr$ z1Wx3=Fa02VL`SD!lV1lY9XQ3GE*8TI$|o?j4*ej2rFvJQlcDEKTTyA9TX(TXr$1&7 zyn{~0yY06x-){T$-rokZiQCjwmG;iEsdmcl$B`$?{#N-ot5WvGqI8X|-Lw{+tgo%v zu+~0oT=hNZeGj!8eFIZ|vFjuUSuGJsW^eO}|~glBNYXT$d%^z|yTm+tnYK7Ox5p zsKTx47V=9s1(X&zOT1e%C!nqtUsj?DXSPzY_a`QaW;YdXrxRF7s zUC2jWL`U~@3}A61XTfDf7Df&M$d-K4`k%mZ4^rpoSF&PO+45yJuw$6xsBN8qPQ2r8 zXaDm8!t?LXIGtUaoK0Scm2g*D3f?cml|&Xgg{)0Su{qp&RyIyuw9)5JcU(B!-dNJ$ zF0VxYhsXD^llJL`T(a$?J6FTdFlXLyrmUx zyCeWM&nwEai%#lqrKM#yfp57JzB)wB=DN_-6-~@fxIh*^BF&VAjn+25$trN&WvpoZ z`xWDD_VQ{w{pdaHh=KV4!{I~uf1He^Fdq#DRbe_7S9UaEZ7~H)wcBEMg0bu;gO?)&GS?u6g=ok z;e*CMuZ0qOMt_p#MSm!!G)tU-<{l^~=B533v6sUC$q5OY9qAC{gDKqf_el zvoQXke*||asmeMZK9cLj5Jph3%D}Brmlvf6KZNrnCdBib85^FNP*NC-QwfrU>D=-8 ziZRXUbCsFE6A{PpoU=}~#Y>mlf`yCRJ;b-qITK?(zE%TLC`&hd{wjQN;(mTiDrjE@ zKwW{mg?sORh;%Bj$qqhXAN$5vPY29hWNUG^pt#{f2VxM1FR8vLeFcT~Ra`Y>V`bQ< zZ%^t(9ikw5X`1-*4mvdG?o2ZI)IS2T$DB zMvvUX0cE8>h&t8dG9y>ukQi1~lW^KeN5@m^)2pZdJ@V)icH^&Z=PPoKwP{mgUqwDk zkdItRNG`3h20mb)u~v@Na%bw*4**&(;(`79LI>|v2~eiZ<|K3h-g2wq!W1>=j~p@7 zdiLsOZA(fr_zzVH)eFBqaK;K}wqH_CCNuB8tuhp={s-@w3B33;CAllm{h-LIaF(?L za;B^-h!G$!W!!gQMnP5(2>j%%r|kZ>9zeF)cEN=6ty^gqyYZQuZ4TgX9SZ!_2VZNW zyYFdNJ@ym3Y~l}HCeO`($=bDUZ;wCuQ#%a{;x_<^UzqzGy9i@d%w$D!JY&z(SzeaM zj>D~d;v=y$ zjqSa!9gD9!E%#fzVToPw*p*mE6x*{U&)Iq7&UPuOkG9B7_(C}r09%(#NP-n{kf(bn zL*Y`hXfwIsTNu?IMPC!N;BT$~Wt#euCIZjyYC=3n(8LR1r&V0$J}J@U#erW%mYG+(@8wYeJ~9sHY}B3S4?n+1uLwNtPs^4xtp$*12E#1wGO`5*I$P zp=Tw)px+iCDF9JmR!k4TD)$KvdMQqY@#g?5$7rcL5NqKZOt*6Gqm;USx&7`@B@h9PmBhdnjW%-=s^$IFp0K9-< z#b?qNARFn!v(rv2hE<;YDzgKfWfcej4!)3sJVXm?V61GVv@2whU$V&7lEJuaQ2v_% zXPZbDMb^ZJDz_{K)OH&DICw39mbx@WzP&ujOkhFC-Nd*BQ7*a80NG`=?PWz?R3Qh8 zsT<`5mPtWe6O*+pSvp4XN*abb7U~D^ElhG>2h20+r6!z=SXWm@t3yjj{R-fT?bh4*b8mllh@dWS8v6V zxQ`VLI>}o0KE_&f7-bvq!M^nNaeScBBvGU?Id#(hlNlRW&V2r3HtuAUp^Wbqj}j>M z!^vOyoz%Mtc-j1Tc=zo{U$x*|x>u-9v$}iPu@H{oI{bz*KP>%En*TuG`Iij%FIBWT zr)dEM&cpA&6aPDF{Ar{hFH0iI07Txu|80N!3p7;w=>4v8UFSk~arabMs|uKuejt!k zI)gw?r4wK(ko4~}{%H@s{SfaMv+qo}m15Hac0YU4HQ8Hn!JZcKJWA zupb}zpRPMhnl~BXxD)BFx8rfwHFL#mdycsBR;Bj)mwxX$*_orhWcj??OY&PgD61v? z@~8XC^4F{i!1$Cuoo4M@cfi%x>Gty}zqHw_XQD^t+fNR@5`Bk%yl3^%{(`@L+eY`= z+fE!J5ZVC8R@hG-|B1ECEB3lxFz%ZPUx9xIhBNqY;Jqw&3qel`o5n>QNIrxk5FA{3 z1@{xOHkMpHE@iDO&^=h@iiX@b=)Pns{Wp{uRxmlB3$Nls*26Lg(0$2UAg)$^<&a0^ zIDL-N@l;N9b&**w-HrOT%8?x8zC*?<+EXIxf7)1ZNQWU|>>`aPOdZ2>s>^Naf2bv% zmTdk`rvFv~AdcHyoP;-2bpqm9AvfK}D|MF~%Nbp^JNKch& z(^fWGK6=ma-Ga*t5t=-I3l_1tY_v-PNGVLinpbnwvAdy@5ISL@J9*v~>({Z!p16Kr z+&u`KS2kP3!ZT&F*7qLS4zMGotD6F0p5^?%@`Z~laOW=eVsin~3PMD}NtE|oU5ci2EKN+e`siz#=9S|*a=*4@4g-7 zy6gG#zLqH<7ij2X;WzZXAno+;hwXns&(yK46YD9GRC)|NVd|h- zc?i+T4%GimajOkFs}gn|@_b<&YO_fm?i(kZ0rck0;Q{qcr)-aCo)nwK4m z4MoKyPQRkOt$p+CGr=qXHyq?uB9;R6=j(HlvIQ^Sy|5s5di?4uu+qqaIEF}~`E{Cq z0XKR1`U`-H(((NmkSFq@(qk!2fVwP&+I?^=4m?COV~t`Su9GY=r!pLhwRGcws-Lbx z8u=>LUkt;B@Fky2iKG#&5;rBl@V3dntQ1WrsY)h&(FoV#Ke^D+FLaUw(cc;EPjPY# zFF&{nQf}o3P3{l`Y^uv{Zo;jEHVZ*nky7sIP`2y%yZ4Rz*!1c;`{w=Mw40{fWdFI} zrF^lTYPTHsD_f4zugym~=Cs3*Lsp_#DF6b$wCH6k%5Q0X+q2Yc!K-%5i?`afU%b*T zdhomKo?T!y_$aPuRl#JTrPb8pBEl8zu=&U!tSE-FsnR#boQtm0Xz#3;=0NZ_$Dd~x zJ#c~D{l>j^#)#8wGnUHbMdfzg;n&-*U;K^z_NCw11>?VMznt?$Z;GL5#!pt9A?)Hf6gnWzZ7-$LEPBtv(+rli@v=RfB3g82#8 z>F3XjrRX@;csc=~DWH*iOqd+R0zmZqs){lKKxWG_9z{3=?xKj}Yz-%dL4KZ|bU92W z1UBnhR;jX{%`ONZgS-wNFSxe`@fplL#%#s`F`|U@9}Lb-sAj?`Y1z_b^iL> zSnsamSpZn^kYxoOwVDJewQOe{zx;}y7j{3;TJ3&3K8w3p@sO_&mt%S5Oym;!@@3rR z+_#WF?SgM>^^#6!y-3+>cvdQ`Rj-Mu}Z?qpwyc7^{n%#E%tu}w{JOJOaWVKUpweaNJXYG}RFZ+l1eiZ{b ze-$6Xx7sy_U2Wfa;1YL#R@+cx9g5qNrX`k-o84F-xa_KDquD)ekFF!^tkGxrrfY93 ze+O&g%@_+@Wat0+JiGJtJMBy8WHk+&S>j%5R~>q_-TLD1pz%BV=D2h1H!s}g{4T7T zX9xC~=peYhtmKIr}baa(Iev<6{D*ukAklhqh0}=j~m)yOd*#Xyz?CF)p*0~ zP`a6K^vue)ut$f$=b-;NU()Q*;q<{@Bd%7JDZkpEOWcZSAC3S@M=;qd!R>7s|CHAI zrUn3i{`Js9iSpNN;o~LhWra2_h=KP?C7aid?;!>VO3vxj6z~s6NcE&?zS^#J6%ebXtYFYjfX9 zz|{Wo;VZybl+c@|V=0Zd3O80zeN>*iwZNr=8y1s7i9P@TKmbWZK~yBHPXeg!+Zs0y zfYtH&pT@?+<;Zb>yMqX^)3KD+*O>ujDvdwnFK~Sg0B=74Tj`Z6vEW_BwNg~b#ac2? zSh=YQm9N18_Gm<~ax-qasN=Y}p≷m>&qpud2bFMGp$`(1h<|#Tl0V_#Srk8CMkK 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%0AffN3f1OvKrR0#ZFo@xg~WjIF#2HK+pn3vr2&e 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 M_pVOEE&I6t3!zm*sQ>@~ literal 0 HcmV?d00001 diff --git a/x/icaoracle/ibc_middleware.go b/x/icaoracle/ibc_middleware.go new file mode 100644 index 00000000000..d8a14985991 --- /dev/null +++ b/x/icaoracle/ibc_middleware.go @@ -0,0 +1,179 @@ +package icaoracle + +import ( + "fmt" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" + ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" + + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/keeper" +) + +var _ porttypes.Middleware = &IBCMiddleware{} + +type IBCMiddleware struct { + app porttypes.IBCModule + keeper keeper.Keeper +} + +// NewIBCMiddleware creates a new IBCMiddleware given the keeper +func NewIBCMiddleware(app porttypes.IBCModule, k keeper.Keeper) IBCMiddleware { + return IBCMiddleware{ + app: app, + keeper: k, + } +} + +// OnChanOpenInit implements the IBCMiddleware interface +func (im IBCMiddleware) OnChanOpenInit( + ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID string, + channelID string, + channelCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, + version string, +) (string, error) { + return im.app.OnChanOpenInit( + ctx, + order, + connectionHops, + portID, + channelID, + channelCap, + counterparty, + version, + ) +} + +// OnChanOpenTry simply passes down the to next middleware stack +func (im IBCMiddleware) OnChanOpenTry( + ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID, + channelID string, + chanCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, + counterpartyVersion string, +) (string, error) { + return im.app.OnChanOpenTry(ctx, order, connectionHops, portID, channelID, chanCap, counterparty, counterpartyVersion) +} + +// OnChanOpenAck implements the IBCMiddleware interface +func (im IBCMiddleware) OnChanOpenAck( + ctx sdk.Context, + portID string, + channelID string, + counterpartyChannelID string, + counterpartyVersion string, +) error { + im.keeper.Logger(ctx).Info(fmt.Sprintf("OnChanOpenAck (ICAOracle): portID %s, channelID %s, counterpartyChannelID %s, counterpartyVersion %s", + portID, channelID, counterpartyChannelID, counterpartyVersion)) + + if err := im.keeper.OnChanOpenAck(ctx, portID, channelID); err != nil { + im.keeper.Logger(ctx).Error(fmt.Sprintf("ICAOracle ChanOpenAck failed: %s", err.Error())) + return errorsmod.Wrapf(err, "ICAOracle OnChanOpenAck failed") + } + + return im.app.OnChanOpenAck( + ctx, + portID, + channelID, + counterpartyChannelID, + counterpartyVersion, + ) +} + +// OnChanCloseConfirm simply passes down the to next middleware stack +func (im IBCMiddleware) OnChanCloseConfirm( + ctx sdk.Context, + portID, + channelID string, +) error { + return im.app.OnChanCloseConfirm(ctx, portID, channelID) +} + +// OnChanCloseInit simply passes down the to next middleware stack +func (im IBCMiddleware) OnChanCloseInit( + ctx sdk.Context, + portID, + channelID string, +) error { + return im.app.OnChanCloseInit(ctx, portID, channelID) +} + +// OnChanOpenConfirm simply passes down the to next middleware stack +func (im IBCMiddleware) OnChanOpenConfirm( + ctx sdk.Context, + portID, + channelID string, +) error { + return im.app.OnChanOpenConfirm(ctx, portID, channelID) +} + +// OnAcknowledgementPacket simply passes down the to next middleware stack +// The Ack handling and routing is managed by icacallbacks +func (im IBCMiddleware) OnAcknowledgementPacket( + ctx sdk.Context, + packet channeltypes.Packet, + acknowledgement []byte, + relayer sdk.AccAddress, +) error { + return im.app.OnAcknowledgementPacket(ctx, packet, acknowledgement, relayer) +} + +// OnTimeoutPacket simply passes down the to next middleware stack +// The Ack handling and routing is managed by icacallbacks +func (im IBCMiddleware) OnTimeoutPacket( + ctx sdk.Context, + packet channeltypes.Packet, + relayer sdk.AccAddress, +) error { + return im.app.OnTimeoutPacket(ctx, packet, relayer) +} + +// OnRecvPacket simply passes down the to next middleware stack +func (im IBCMiddleware) OnRecvPacket( + ctx sdk.Context, + packet channeltypes.Packet, + relayer sdk.AccAddress, +) ibcexported.Acknowledgement { + return im.app.OnRecvPacket(ctx, packet, relayer) +} + +// SendPacket implements the ICS4 Wrapper interface but is not utilized in the ICA stack +func (im IBCMiddleware) SendPacket( + ctx sdk.Context, + chanCap *capabilitytypes.Capability, + sourcePort string, + sourceChannel string, + timeoutHeight clienttypes.Height, + timeoutTimestamp uint64, + data []byte, +) (sequence uint64, err error) { + panic("UNIMPLEMENTED") +} + +// WriteAcknowledgement implements the ICS4 Wrapper interface +// but is not utilized in the bottom of ICA stack +func (im IBCMiddleware) WriteAcknowledgement( + ctx sdk.Context, + chanCap *capabilitytypes.Capability, + packet ibcexported.PacketI, + ack ibcexported.Acknowledgement, +) error { + panic("UNIMPLEMENTED") +} + +// GetAppVersion implements the ICS4 Wrapper interface +// but is not utilized in the bottom of ICA stack +func (im IBCMiddleware) GetAppVersion(ctx sdk.Context, portID, channelID string) (string, bool) { + panic("UNIMPLEMENTED") +} diff --git a/x/icaoracle/keeper/abci.go b/x/icaoracle/keeper/abci.go new file mode 100644 index 00000000000..87aca7e8878 --- /dev/null +++ b/x/icaoracle/keeper/abci.go @@ -0,0 +1,10 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// EndBlocker of icaoracle module +func (k Keeper) EndBlocker(ctx sdk.Context) { + k.PostAllQueuedMetrics(ctx) +} diff --git a/x/icaoracle/keeper/events.go b/x/icaoracle/keeper/events.go new file mode 100644 index 00000000000..51440009cb2 --- /dev/null +++ b/x/icaoracle/keeper/events.go @@ -0,0 +1,47 @@ +package keeper + +import ( + "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +// Emits an event for an oracle update +func EmitUpdateOracleEvent(ctx sdk.Context, metric types.Metric) { + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeUpdateOracle, + sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), + sdk.NewAttribute(types.AttributeKeyOracleChainId, metric.DestinationOracle), + sdk.NewAttribute(types.AttributeKeyMetricID, metric.GetMetricID()), + sdk.NewAttribute(types.AttributeKeyMetricKey, metric.Key), + sdk.NewAttribute(types.AttributeKeyMetricValue, metric.Value), + sdk.NewAttribute(types.AttributeKeyMetricType, metric.MetricType), + sdk.NewAttribute(types.AttributeKeyMetricUpdateTime, fmt.Sprintf("%d", metric.UpdateTime)), + sdk.NewAttribute(types.AttributeKeyMetricBlockHeight, fmt.Sprintf("%d", metric.BlockHeight)), + ), + ) +} + +// Emits an event for an oracle update +func EmitUpdateOracleAckEvent(ctx sdk.Context, metric *types.Metric, ackStatus string) { + if metric == nil { + return + } + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeUpdateOracleAck, + sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), + sdk.NewAttribute(types.AttributeKeyOracleChainId, metric.DestinationOracle), + sdk.NewAttribute(types.AttributeKeyMetricID, metric.GetMetricID()), + sdk.NewAttribute(types.AttributeKeyMetricAckStatus, ackStatus), + sdk.NewAttribute(types.AttributeKeyMetricKey, metric.Key), + sdk.NewAttribute(types.AttributeKeyMetricValue, metric.Value), + sdk.NewAttribute(types.AttributeKeyMetricType, metric.MetricType), + sdk.NewAttribute(types.AttributeKeyMetricUpdateTime, fmt.Sprintf("%d", metric.UpdateTime)), + sdk.NewAttribute(types.AttributeKeyMetricBlockHeight, fmt.Sprintf("%d", metric.BlockHeight)), + ), + ) +} diff --git a/x/icaoracle/keeper/genesis.go b/x/icaoracle/keeper/genesis.go new file mode 100644 index 00000000000..33792f2c6a0 --- /dev/null +++ b/x/icaoracle/keeper/genesis.go @@ -0,0 +1,31 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +// InitGenesis initializes the capability module's state from a provided genesis +// state. +func (k Keeper) InitGenesis(ctx sdk.Context, genState types.GenesisState) { + if err := genState.Validate(); err != nil { + panic(err) + } + for _, oracle := range genState.Oracles { + k.SetOracle(ctx, oracle) + } + for _, metric := range genState.Metrics { + k.SetMetric(ctx, metric) + } +} + +// ExportGenesis returns the capability module's exported genesis. +func (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { + genesis := types.DefaultGenesis() + + genesis.Oracles = k.GetAllOracles(ctx) + genesis.Metrics = k.GetAllMetrics(ctx) + + return genesis +} diff --git a/x/icaoracle/keeper/genesis_test.go b/x/icaoracle/keeper/genesis_test.go new file mode 100644 index 00000000000..6a7c29d30c6 --- /dev/null +++ b/x/icaoracle/keeper/genesis_test.go @@ -0,0 +1,28 @@ +package keeper_test + +import ( + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +func (s *KeeperTestSuite) TestGenesis() { + oracle := types.Oracle{ + ChainId: "chain", + } + metric := types.Metric{ + Key: "key", + UpdateTime: int64(1), + DestinationOracle: "chain", + Status: types.MetricStatus_QUEUED, + } + + genesisState := types.GenesisState{ + Params: types.Params{}, + Oracles: []types.Oracle{oracle}, + Metrics: []types.Metric{metric}, + } + + s.App.ICAOracleKeeper.InitGenesis(s.Ctx, genesisState) + exported := s.App.ICAOracleKeeper.ExportGenesis(s.Ctx) + + s.Require().Equal(genesisState, *exported) +} diff --git a/x/icaoracle/keeper/grpc_query.go b/x/icaoracle/keeper/grpc_query.go new file mode 100644 index 00000000000..348350db658 --- /dev/null +++ b/x/icaoracle/keeper/grpc_query.go @@ -0,0 +1,60 @@ +package keeper + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +var _ types.QueryServer = Keeper{} + +// Query a specific oracle +func (k Keeper) Oracle(c context.Context, req *types.QueryOracleRequest) (*types.QueryOracleResponse, error) { + ctx := sdk.UnwrapSDKContext(c) + + oracle, found := k.GetOracle(ctx, req.ChainId) + if !found { + return &types.QueryOracleResponse{}, types.ErrOracleNotFound + } + + return &types.QueryOracleResponse{Oracle: &oracle}, nil +} + +// Query all oracles with s +func (k Keeper) AllOracles(c context.Context, req *types.QueryAllOraclesRequest) (*types.QueryAllOraclesResponse, error) { + ctx := sdk.UnwrapSDKContext(c) + oracles := k.GetAllOracles(ctx) + return &types.QueryAllOraclesResponse{Oracles: oracles}, nil +} + +// Query all oracles with a filter on whether they are currently active +func (k Keeper) ActiveOracles(c context.Context, req *types.QueryActiveOraclesRequest) (*types.QueryActiveOraclesResponse, error) { + ctx := sdk.UnwrapSDKContext(c) + + oracles := []types.Oracle{} + for _, oracle := range k.GetAllOracles(ctx) { + if oracle.Active == req.Active { + oracles = append(oracles, oracle) + } + } + return &types.QueryActiveOraclesResponse{Oracles: oracles}, nil +} + +// Query metrics with optional filters +func (k Keeper) Metrics(c context.Context, req *types.QueryMetricsRequest) (*types.QueryMetricsResponse, error) { + ctx := sdk.UnwrapSDKContext(c) + + metrics := []types.Metric{} + for _, metric := range k.GetAllMetrics(ctx) { + metricKeyMatch := req.MetricKey == "" || req.MetricKey == metric.Key + metricOracleMatch := req.OracleChainId == "" || req.OracleChainId == metric.DestinationOracle + + if metricKeyMatch && metricOracleMatch { + metrics = append(metrics, metric) + } + } + + return &types.QueryMetricsResponse{Metrics: metrics}, nil +} diff --git a/x/icaoracle/keeper/grpc_query_test.go b/x/icaoracle/keeper/grpc_query_test.go new file mode 100644 index 00000000000..304eac92b30 --- /dev/null +++ b/x/icaoracle/keeper/grpc_query_test.go @@ -0,0 +1,114 @@ +package keeper_test + +import ( + "context" + "fmt" + + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +func (s *KeeperTestSuite) TestQueryOracle() { + allOracles := s.CreateTestOracles() + for _, expectedOracle := range allOracles { + queryResponse, err := s.QueryClient.Oracle(context.Background(), &types.QueryOracleRequest{ + ChainId: expectedOracle.ChainId, + }) + s.Require().NoError(err, "no error expected when querying oracle %s", expectedOracle.ChainId) + s.Require().Equal(expectedOracle, *queryResponse.Oracle) + } +} + +func (s *KeeperTestSuite) TestQueryAllOracles() { + expectedOracles := s.CreateTestOracles() + queryResponse, err := s.QueryClient.AllOracles(context.Background(), &types.QueryAllOraclesRequest{}) + s.Require().NoError(err, "no error expected when querying all oracles") + s.Require().ElementsMatch(expectedOracles, queryResponse.Oracles) +} + +func (s *KeeperTestSuite) TestQueryActiveOracles() { + // Add 6 oracles, alternating each oracle between active and inactive + activeOracles := []types.Oracle{} + inActiveOracles := []types.Oracle{} + for i := 1; i <= 6; i++ { + oracle := types.Oracle{ChainId: fmt.Sprintf("chain-%d", i)} + if i%2 == 0 { + oracle.Active = true + activeOracles = append(activeOracles, oracle) + } else { + oracle.Active = false + inActiveOracles = append(inActiveOracles, oracle) + } + s.App.ICAOracleKeeper.SetOracle(s.Ctx, oracle) + } + + // Query active oracles + activeOraclesResponse, err := s.QueryClient.ActiveOracles(context.Background(), &types.QueryActiveOraclesRequest{ + Active: true, + }) + s.Require().NoError(err, "no error expected when querying active oracles") + s.Require().ElementsMatch(activeOracles, activeOraclesResponse.Oracles) + + // Query inactive oracles + inActiveOraclesResponse, err := s.QueryClient.ActiveOracles(context.Background(), &types.QueryActiveOraclesRequest{ + Active: false, + }) + s.Require().NoError(err, "no error expected when querying inactive oracles") + s.Require().ElementsMatch(inActiveOracles, inActiveOraclesResponse.Oracles) +} + +func (s *KeeperTestSuite) TestQueryMetrics() { + filterMetricKey := "key-2" + filterOracleChainId := "chain-2" + + // Add metrics across 2 keys and 2 oracles + updatesByMetric := make(map[string][]types.Metric) + updatesByOracle := make(map[string][]types.Metric) + allMetrics := []types.Metric{ + {Key: "key-1", DestinationOracle: "chain-1", Status: types.MetricStatus_IN_PROGRESS}, + {Key: "key-2", DestinationOracle: "chain-1", Status: types.MetricStatus_IN_PROGRESS}, + {Key: "key-1", DestinationOracle: "chain-2", Status: types.MetricStatus_IN_PROGRESS}, + {Key: "key-2", DestinationOracle: "chain-2", Status: types.MetricStatus_IN_PROGRESS}, + } + for _, metric := range allMetrics { + key := metric.Key + chainId := metric.DestinationOracle + + updatesByMetric[key] = append(updatesByMetric[key], metric) + updatesByOracle[chainId] = append(updatesByOracle[chainId], metric) + + s.App.ICAOracleKeeper.SetMetric(s.Ctx, metric) + } + + // First check with no filters + expectedNoFilters := allMetrics + queryResponse, err := s.QueryClient.Metrics(s.Ctx, &types.QueryMetricsRequest{}) + s.Require().NoError(err, "no error expected when querying pending metric updates with no filter") + s.Require().ElementsMatch(expectedNoFilters, queryResponse.Metrics, "no filter") + + // Check with a filter on the metric (metric key == "key-2") + queryResponse, err = s.QueryClient.Metrics(s.Ctx, &types.QueryMetricsRequest{ + MetricKey: filterMetricKey, + }) + s.Require().NoError(err, "no error expected when querying pending metric updates with metric key filter") + s.Require().ElementsMatch(updatesByMetric[filterMetricKey], queryResponse.Metrics, "metric key filter") + + // Check with a filter on the oracle (chain-id == "chain-2") + queryResponse, err = s.QueryClient.Metrics(s.Ctx, &types.QueryMetricsRequest{ + OracleChainId: filterOracleChainId, + }) + s.Require().NoError(err, "no error expected when querying pending metric updates with oracle filter") + s.Require().ElementsMatch(updatesByOracle[filterOracleChainId], queryResponse.Metrics, "chain-id filter") + + // Check with a filter on both the metric and oracle (metric key == "key2", chain-id == "chain-2") + expectedMetricAndOracleFilter := []types.Metric{{ + Key: filterMetricKey, + DestinationOracle: filterOracleChainId, + Status: types.MetricStatus_IN_PROGRESS, + }} + queryResponse, err = s.QueryClient.Metrics(s.Ctx, &types.QueryMetricsRequest{ + MetricKey: filterMetricKey, + OracleChainId: filterOracleChainId, + }) + s.Require().NoError(err, "no error expected when querying pending metric updates with metric key and oracle filter") + s.Require().ElementsMatch(expectedMetricAndOracleFilter, queryResponse.Metrics, "metric and chain filter") +} diff --git a/x/icaoracle/keeper/ibc.go b/x/icaoracle/keeper/ibc.go new file mode 100644 index 00000000000..199a87c3d9d --- /dev/null +++ b/x/icaoracle/keeper/ibc.go @@ -0,0 +1,96 @@ +package keeper + +import ( + "fmt" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/gogoproto/proto" + icacontrollerkeeper "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/keeper" + icacontrollertypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/types" + icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types" + + icacallbacktypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +func (k Keeper) OnChanOpenAck(ctx sdk.Context, portID, channelID string) error { + // Get the connectionId from the port and channel + connectionId, _, err := k.ChannelKeeper.GetChannelConnection(ctx, portID, channelID) + if err != nil { + return errorsmod.Wrapf(err, "unable to get connection from channel (%s) and port (%s)", channelID, portID) + } + + // If the callback is not for an oracle ICA, it should do nothing and then pass the ack down to stakeibc + oracle, found := k.GetOracleFromConnectionId(ctx, connectionId) + if !found { + return nil + } + expectedOraclePort, err := icatypes.NewControllerPortID(types.FormatICAAccountOwner(oracle.ChainId, types.ICAAccountType_Oracle)) + if err != nil { + return err + } + if portID != expectedOraclePort { + return nil + } + + // If this callback is for an oracle channel, store the ICA address and channel on the oracle struct + // Get the associated ICA address from the port and connection + icaAddress, found := k.ICAControllerKeeper.GetInterchainAccountAddress(ctx, connectionId, portID) + if !found { + return errorsmod.Wrapf(icatypes.ErrInterchainAccountNotFound, "unable to get ica address from connection (%s)", connectionId) + } + k.Logger(ctx).Info(fmt.Sprintf("Oracle ICA registered to channel %s and address %s", channelID, icaAddress)) + + // Update the ICA address and channel in the oracle + oracle.IcaAddress = icaAddress + oracle.ChannelId = channelID + oracle.PortId = portID + + k.SetOracle(ctx, oracle) + + return nil +} + +func (k Keeper) SubmitICATx(ctx sdk.Context, tx types.ICATx) error { + // Validate the ICATx struct has all the required fields + if err := tx.ValidateICATx(); err != nil { + return err + } + + // Serialize tx messages + txBz, err := icatypes.SerializeCosmosTx(k.cdc, tx.Messages, icatypes.EncodingProtobuf) + if err != nil { + return errorsmod.Wrapf(err, "unable to serialize cosmos transaction") + } + packetData := icatypes.InterchainAccountPacketData{ + Type: icatypes.EXECUTE_TX, + Data: txBz, + } + + // Submit ICA and grab sequence number for the callback key + icaMsgServer := icacontrollerkeeper.NewMsgServerImpl(&k.ICAControllerKeeper) + msgSendTx := icacontrollertypes.NewMsgSendTx(tx.Owner, tx.ConnectionId, tx.GetRelativeTimeoutNano(), packetData) + res, err := icaMsgServer.SendTx(ctx, msgSendTx) + if err != nil { + return errorsmod.Wrapf(err, "unable to send ICA tx") + } + sequence := res.Sequence + + // Store the callback data + callbackArgsBz, err := proto.Marshal(tx.CallbackArgs) + if err != nil { + return errorsmod.Wrapf(err, "unable to marshal callback") + } + callbackData := icacallbacktypes.CallbackData{ + CallbackKey: icacallbacktypes.PacketID(tx.PortId, tx.ChannelId, sequence), + PortId: tx.PortId, + ChannelId: tx.ChannelId, + Sequence: sequence, + CallbackId: tx.CallbackId, + CallbackArgs: callbackArgsBz, + } + k.ICACallbacksKeeper.SetCallbackData(ctx, callbackData) + + return nil +} diff --git a/x/icaoracle/keeper/ibc_test.go b/x/icaoracle/keeper/ibc_test.go new file mode 100644 index 00000000000..f5af825ea6f --- /dev/null +++ b/x/icaoracle/keeper/ibc_test.go @@ -0,0 +1,218 @@ +package keeper_test + +import ( + "time" + + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + connectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + + proto "github.com/cosmos/gogoproto/proto" + + icacallbacktypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +// ------------------------------------------ +// OnChanOpenAck +// ------------------------------------------ + +type OnChanOpenAckTestCase struct { + ChannelId string + PortId string + ICAAddress string + InitialOracle types.Oracle +} + +func (s *KeeperTestSuite) SetupTestOnChanOpenAck() OnChanOpenAckTestCase { + // Create clients, connections, and an oracle ICA channel + owner := types.FormatICAAccountOwner(HostChainId, types.ICAAccountType_Oracle) + channelId, portId := s.CreateICAChannel(owner) + + // Get ica address that was just created + icaAddress, found := s.App.ICAControllerKeeper.GetInterchainAccountAddress(s.Ctx, ibctesting.FirstConnectionID, portId) + s.Require().True(found, "ICA account should have been created") + s.Require().NotEmpty(icaAddress, "ICA Address should not be empty") + + // Add an oracle + oracle := types.Oracle{ + ChainId: HostChainId, + ConnectionId: ibctesting.FirstConnectionID, + } + s.App.ICAOracleKeeper.SetOracle(s.Ctx, oracle) + + // Confirm the oracle was stored + _, found = s.App.ICAOracleKeeper.GetOracle(s.Ctx, HostChainId) + s.Require().True(found, "oracle should be in the store during setup") + + return OnChanOpenAckTestCase{ + ChannelId: channelId, + PortId: portId, + ICAAddress: icaAddress, + InitialOracle: oracle, + } +} + +func (s *KeeperTestSuite) TestOnChanOpenAck_Success() { + tc := s.SetupTestOnChanOpenAck() + + // Call callback + err := s.App.ICAOracleKeeper.OnChanOpenAck(s.Ctx, tc.PortId, tc.ChannelId) + s.Require().NoError(err, "no error expected when calling OnChanOpenAck") + + // Confirm oracle was updated + expectedOracle := tc.InitialOracle + expectedOracle.ChannelId = tc.ChannelId + expectedOracle.PortId = tc.PortId + expectedOracle.IcaAddress = tc.ICAAddress + + actualOracle, found := s.App.ICAOracleKeeper.GetOracle(s.Ctx, HostChainId) + s.Require().True(found, "oracle should have been found") + s.Require().Equal(expectedOracle, actualOracle, "oracle should have updated") +} + +func (s *KeeperTestSuite) TestOnChanOpenAck_ConnectionNotFound() { + tc := s.SetupTestOnChanOpenAck() + + // Pass a different channel-id - the connection should not be found and the callback should error + err := s.App.ICAOracleKeeper.OnChanOpenAck(s.Ctx, tc.PortId, "fake_channel") + s.Require().ErrorContains(err, "unable to get connection from channel (fake_channel) and port") +} + +func (s *KeeperTestSuite) TestOnChanOpenAck_NoOracle() { + tc := s.SetupTestOnChanOpenAck() + + // Update the oracle to have a different connection so it cannoth be found + oracle := tc.InitialOracle + oracle.ConnectionId = "different_connection_id" + s.App.ICAOracleKeeper.SetOracle(s.Ctx, oracle) + + // The callback should not fail (as it can be called by non-oracle callbacks) + // But the oracle should not be updated + err := s.App.ICAOracleKeeper.OnChanOpenAck(s.Ctx, tc.PortId, tc.ChannelId) + s.Require().NoError(err, "no error expected when calling OnChanOpenAck") + + actualOracle, found := s.App.ICAOracleKeeper.GetOracle(s.Ctx, HostChainId) + s.Require().True(found, "oracle should have been found") + s.Require().Equal(oracle, actualOracle, "oracle should not have updated") +} + +func (s *KeeperTestSuite) TestOnChanOpenAck_NotOracleChannel() { + tc := s.SetupTestOnChanOpenAck() + + // Create non-oracle ICA channel and use that for the callback + owner := types.FormatICAAccountOwner(HostChainId, "NOT_ORACLE") + differentChannelId, differentPortId := s.CreateICAChannel(owner) + + // The callback should succeed but the oracle should not be updated + err := s.App.ICAOracleKeeper.OnChanOpenAck(s.Ctx, differentPortId, differentChannelId) + s.Require().NoError(err, "no error expected when calling OnChanOpenAck") + + actualOracle, found := s.App.ICAOracleKeeper.GetOracle(s.Ctx, HostChainId) + s.Require().True(found, "oracle should have been found") + s.Require().Equal(tc.InitialOracle, actualOracle, "oracle should not have updated") +} + +func (s *KeeperTestSuite) TestOnChanOpenAck_NoICAAddress() { + tc := s.SetupTestOnChanOpenAck() + + // Update the oracle's channel/port to map to a different connection + differentConnectionId := "connection-2" + connection := connectiontypes.ConnectionEnd{} + s.App.IBCKeeper.ConnectionKeeper.SetConnection(s.Ctx, differentConnectionId, connection) + + channel := channeltypes.Channel{ + ConnectionHops: []string{differentConnectionId}, + } + s.App.IBCKeeper.ChannelKeeper.SetChannel(s.Ctx, tc.PortId, tc.ChannelId, channel) + + // Update the oracle struct to use the different connection as well + oracle := tc.InitialOracle + oracle.ConnectionId = differentConnectionId + s.App.ICAOracleKeeper.SetOracle(s.Ctx, oracle) + + err := s.App.ICAOracleKeeper.OnChanOpenAck(s.Ctx, tc.PortId, tc.ChannelId) + s.Require().ErrorContains(err, "unable to get ica address from connection") +} + +// ------------------------------------------ +// SubmitICATx +// ------------------------------------------ + +func (s *KeeperTestSuite) SetupTestSubmitICATx() (tx types.ICATx, callbackBz []byte) { + // Create clients, connections, and an oracle ICA channel + owner := types.FormatICAAccountOwner(HostChainId, types.ICAAccountType_Oracle) + channelId, portId := s.CreateICAChannel(owner) + + // Callback args (we can use any callback type here) + callback := types.InstantiateOracleCallback{OracleChainId: HostChainId} + callbackBz, err := proto.Marshal(&callback) + s.Require().NoError(err, "no error expected when serializing callback args") + + // Return a valid ICATx + return types.ICATx{ + ConnectionId: ibctesting.FirstConnectionID, + ChannelId: channelId, + PortId: portId, + Owner: owner, + Messages: []proto.Message{&banktypes.MsgSend{}}, + RelativeTimeout: time.Second, + CallbackId: "callback_id", + CallbackArgs: &callback, + }, callbackBz +} + +func (s *KeeperTestSuite) TestSubmitICATx_Success() { + icaTx, callbackBz := s.SetupTestSubmitICATx() + + // Submit ICA + err := s.App.ICAOracleKeeper.SubmitICATx(s.Ctx, icaTx) + s.Require().NoError(err, "no error expected when submitting ICA") + + // Confirm callback data was stored + sequence := uint64(1) + callbackKey := icacallbacktypes.PacketID(icaTx.PortId, icaTx.ChannelId, sequence) + + expectedCallbackData := icacallbacktypes.CallbackData{ + CallbackKey: callbackKey, + PortId: icaTx.PortId, + ChannelId: icaTx.ChannelId, + Sequence: sequence, + CallbackId: icaTx.CallbackId, + CallbackArgs: callbackBz, + } + actualCallbackData, found := s.App.IcacallbacksKeeper.GetCallbackData(s.Ctx, callbackKey) + s.Require().True(found, "callback data should have been found") + s.Require().Equal(expectedCallbackData, actualCallbackData, "callback data") +} + +func (s *KeeperTestSuite) TestSubmitICATx_InvalidICATx() { + icaTx, _ := s.SetupTestSubmitICATx() + + // Submit ICA without a connection-id - should fail + icaTx.ConnectionId = "" + err := s.App.ICAOracleKeeper.SubmitICATx(s.Ctx, icaTx) + s.Require().ErrorContains(err, "connection-id is empty: invalid ICA request") +} + +func (s *KeeperTestSuite) TestSubmitICATx_InvalidMessage() { + icaTx, _ := s.SetupTestSubmitICATx() + + // Submit ICA without a nil message - should fail + icaTx.Messages = []proto.Message{nil} + err := s.App.ICAOracleKeeper.SubmitICATx(s.Ctx, icaTx) + s.Require().ErrorContains(err, "unable to serialize cosmos transaction") +} + +func (s *KeeperTestSuite) TestSubmitICATx_SendFailure() { + icaTx, _ := s.SetupTestSubmitICATx() + + // Close the channel so that the ICA fails + s.UpdateChannelState(icaTx.PortId, icaTx.ChannelId, channeltypes.CLOSED) + + // Submit the ICA which should error + err := s.App.ICAOracleKeeper.SubmitICATx(s.Ctx, icaTx) + s.Require().ErrorContains(err, "unable to send ICA tx") +} diff --git a/x/icaoracle/keeper/icacallbacks.go b/x/icaoracle/keeper/icacallbacks.go new file mode 100644 index 00000000000..2a7110cd318 --- /dev/null +++ b/x/icaoracle/keeper/icacallbacks.go @@ -0,0 +1,23 @@ +package keeper + +import ( + icacallbackstypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" +) + +const ( + ICACallbackID_InstantiateOracle = "instantiate_oracle" + ICACallbackID_UpdateOracle = "update_oracle" +) + +func (k Keeper) Callbacks() icacallbackstypes.ModuleCallbacks { + return []icacallbackstypes.ICACallback{ + { + CallbackId: ICACallbackID_InstantiateOracle, + CallbackFunc: icacallbackstypes.ICACallbackFunction(k.InstantiateOracleCallback), + }, + { + CallbackId: ICACallbackID_UpdateOracle, + CallbackFunc: icacallbackstypes.ICACallbackFunction(k.UpdateOracleCallback), + }, + } +} diff --git a/x/icaoracle/keeper/icacallbacks_instantiate_oracle.go b/x/icaoracle/keeper/icacallbacks_instantiate_oracle.go new file mode 100644 index 00000000000..8605f487c75 --- /dev/null +++ b/x/icaoracle/keeper/icacallbacks_instantiate_oracle.go @@ -0,0 +1,65 @@ +package keeper + +import ( + errorsmod "cosmossdk.io/errors" + + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/gogoproto/proto" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + "github.com/osmosis-labs/osmosis/v27/utils" + icacallbackstypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +// Callback after an instantiating an oracle's CW contract +// +// If successful: Stores the cosmwasm contract address on the oracle object +// If timeout/failure: Does nothing +func (k Keeper) InstantiateOracleCallback(ctx sdk.Context, packet channeltypes.Packet, ackResponse *icacallbackstypes.AcknowledgementResponse, args []byte) error { + // Fetch callback args + instantiateCallback := types.InstantiateOracleCallback{} + if err := proto.Unmarshal(args, &instantiateCallback); err != nil { + return errorsmod.Wrapf(err, "unable to unmarshal instantiate oracle callback") + } + chainId := instantiateCallback.OracleChainId + k.Logger(ctx).Info(utils.LogICACallbackWithHostZone(chainId, ICACallbackID_InstantiateOracle, "Starting instantiate oracle callback")) + + // Check for timeout/failure + // No action is necessary on a timeout + if ackResponse.Status == icacallbackstypes.AckResponseStatus_TIMEOUT || + ackResponse.Status == icacallbackstypes.AckResponseStatus_FAILURE { + k.Logger(ctx).Error(utils.LogICACallbackStatusWithHostZone(chainId, ICACallbackID_InstantiateOracle, ackResponse.Status, packet)) + return nil + } + + k.Logger(ctx).Info(utils.LogICACallbackStatusWithHostZone(chainId, ICACallbackID_InstantiateOracle, + icacallbackstypes.AckResponseStatus_SUCCESS, packet)) + + // Get oracle from chainId + oracle, found := k.GetOracle(ctx, chainId) + if !found { + return types.ErrOracleNotFound + } + + // If the ICA was successful, store the contract address + if len(ackResponse.MsgResponses) != 1 { + return errorsmod.Wrapf(types.ErrInvalidICAResponse, + "tx response from CW contract instantiation should have 1 message (%d found)", len(ackResponse.MsgResponses)) + } + var instantiateContractResponse wasmtypes.MsgInstantiateContractResponse + if err := proto.Unmarshal(ackResponse.MsgResponses[0], &instantiateContractResponse); err != nil { + return errorsmod.Wrapf(err, "unable to unmarshal instantiate contract response") + } + if instantiateContractResponse.Address == "" { + return errorsmod.Wrapf(types.ErrInvalidICAResponse, "response from CW contract instantiation ICA does not contain a contract address") + } + + // Update contract address and mark the oracle as active + oracle.ContractAddress = instantiateContractResponse.Address + oracle.Active = true + k.SetOracle(ctx, oracle) + + return nil +} diff --git a/x/icaoracle/keeper/icacallbacks_instantiate_oracle_test.go b/x/icaoracle/keeper/icacallbacks_instantiate_oracle_test.go new file mode 100644 index 00000000000..5358406aa12 --- /dev/null +++ b/x/icaoracle/keeper/icacallbacks_instantiate_oracle_test.go @@ -0,0 +1,167 @@ +package keeper_test + +import ( + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" + "github.com/cosmos/gogoproto/proto" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + icacallbacktypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +type InstantiateOracleCallbackTestCase struct { + ContractAddress string + ValidCallbackArgs []byte + ValidICAMsgResponse [][]byte + ValidAckResponse icacallbacktypes.AcknowledgementResponse +} + +func (s *KeeperTestSuite) SetupTestInstantiateOracleCallback() InstantiateOracleCallbackTestCase { + // Store oracle + s.App.ICAOracleKeeper.SetOracle(s.Ctx, types.Oracle{ + ChainId: HostChainId, + Active: false, + }) + + // Confirm it was stored + _, found := s.App.ICAOracleKeeper.GetOracle(s.Ctx, HostChainId) + s.Require().True(found, "oracle should be in the store during setup") + + // Build ack response + contractAddress := "contract_address" + icaResponse := wasmtypes.MsgInstantiateContractResponse{ + Address: contractAddress, + } + icaResponseBz, err := proto.Marshal(&icaResponse) + s.Require().NoError(err, "no error expected when marshalling contract response") + icaMsgResponse := [][]byte{icaResponseBz} + + // Build callback data + callbackArgs := types.InstantiateOracleCallback{ + OracleChainId: HostChainId, + } + callbackArgsBz, err := proto.Marshal(&callbackArgs) + s.Require().NoError(err, "no error expected when marshalling callback args") + + return InstantiateOracleCallbackTestCase{ + ContractAddress: contractAddress, + ValidCallbackArgs: callbackArgsBz, + ValidICAMsgResponse: icaMsgResponse, + ValidAckResponse: icacallbacktypes.AcknowledgementResponse{ + Status: icacallbacktypes.AckResponseStatus_SUCCESS, + MsgResponses: icaMsgResponse, + }, + } +} + +// Helper function to check the state after the callback +func (s *KeeperTestSuite) checkStateAfterInstantiateCallback(success bool, expectedContractAddress string) { + oracle, found := s.App.ICAOracleKeeper.GetOracle(s.Ctx, HostChainId) + s.Require().True(found, "oracle should have been found after callback") + + expectedActive := success // if successful, it should be active + + s.Require().Equal(expectedActive, oracle.Active, "oracle active field") + s.Require().Equal(oracle.ContractAddress, expectedContractAddress, "oracle contract address") +} + +// Function to call the callback, and check the state depending on whether it was successful +func (s *KeeperTestSuite) executeCallbackAndCheckState( + tc InstantiateOracleCallbackTestCase, + ackStatus icacallbacktypes.AckResponseStatus, + callbackArgs []byte, +) { + // Build the ack response object with the provided status + ackResponse := icacallbacktypes.AcknowledgementResponse{ + Status: ackStatus, + MsgResponses: tc.ValidICAMsgResponse, + } + + // The callback should not throw an error in these cases (even in the event of a timeout/ack failure) + err := s.App.ICAOracleKeeper.InstantiateOracleCallback(s.Ctx, channeltypes.Packet{}, &ackResponse, callbackArgs) + s.Require().Nil(err, "no error expected during callback") + + // If the ack was a success, check that the contract address was updated + if ackStatus == icacallbacktypes.AckResponseStatus_SUCCESS { + success := true + expectedContractAddress := tc.ContractAddress + s.checkStateAfterInstantiateCallback(success, expectedContractAddress) + } else { + // Otherwise, during timeout / ack failure, check that no state was changed + success := false + expectedContractAddress := "" + s.checkStateAfterInstantiateCallback(success, expectedContractAddress) + } +} + +func (s *KeeperTestSuite) TestInstantiateOracleCallback_AckSuccess() { + tc := s.SetupTestInstantiateOracleCallback() + s.executeCallbackAndCheckState(tc, icacallbacktypes.AckResponseStatus_SUCCESS, tc.ValidCallbackArgs) +} + +func (s *KeeperTestSuite) TestInstantiateOracleCallback_AckTimeout() { + tc := s.SetupTestInstantiateOracleCallback() + s.executeCallbackAndCheckState(tc, icacallbacktypes.AckResponseStatus_TIMEOUT, tc.ValidCallbackArgs) +} + +func (s *KeeperTestSuite) TestInstantiateOracleCallback_AckFailure() { + tc := s.SetupTestInstantiateOracleCallback() + s.executeCallbackAndCheckState(tc, icacallbacktypes.AckResponseStatus_FAILURE, tc.ValidCallbackArgs) +} + +func (s *KeeperTestSuite) TestInstantiateOracleCallback_UnmarshalCallbackFailure() { + tc := s.SetupTestInstantiateOracleCallback() + + // Calling the callback with invalid callback args should fail + invalidArgs := []byte{1, 2, 3} + err := s.App.ICAOracleKeeper.InstantiateOracleCallback(s.Ctx, channeltypes.Packet{}, &tc.ValidAckResponse, invalidArgs) + s.Require().ErrorContains(err, "unable to unmarshal instantiate oracle callback") +} + +func (s *KeeperTestSuite) TestInstantiateOracleCallback_OracleNotFound() { + tc := s.SetupTestInstantiateOracleCallback() + + // Remove the oracle + s.App.ICAOracleKeeper.RemoveOracle(s.Ctx, HostChainId) + + // Call the callback - should fail + err := s.App.ICAOracleKeeper.InstantiateOracleCallback(s.Ctx, channeltypes.Packet{}, &tc.ValidAckResponse, tc.ValidCallbackArgs) + s.Require().ErrorContains(err, "oracle not found") +} + +func (s *KeeperTestSuite) TestInstantiateOracleCallback_NoMessagesInICAResponse() { + tc := s.SetupTestInstantiateOracleCallback() + + // Calling the callback with no messages in the ICA response should fail + invalidAckResponse := tc.ValidAckResponse + invalidAckResponse.MsgResponses = [][]byte{} + + err := s.App.ICAOracleKeeper.InstantiateOracleCallback(s.Ctx, channeltypes.Packet{}, &invalidAckResponse, tc.ValidCallbackArgs) + s.Require().ErrorContains(err, "tx response from CW contract instantiation should have 1 message (0 found)") +} + +func (s *KeeperTestSuite) TestInstantiateOracleCallback_UnmarshalICAResponseFailure() { + tc := s.SetupTestInstantiateOracleCallback() + + // Calling the callback with an invalid ack response should fail + invalidAckResponse := tc.ValidAckResponse + invalidAckResponse.MsgResponses = [][]byte{{1, 2, 3}} + + err := s.App.ICAOracleKeeper.InstantiateOracleCallback(s.Ctx, channeltypes.Packet{}, &invalidAckResponse, tc.ValidCallbackArgs) + s.Require().ErrorContains(err, "unable to unmarshal instantiate contract response") +} + +func (s *KeeperTestSuite) TestInstantiateOracleCallback_NoContractAddressInICAResponse() { + tc := s.SetupTestInstantiateOracleCallback() + + // Create an ack response that does not contain a contract address + responseWithNoContract := wasmtypes.MsgInstantiateContractResponse{} + responseWithNoContractBz, err := proto.Marshal(&responseWithNoContract) + s.Require().NoError(err, "no error expected when marshalling contract response") + + invalidAckResponse := tc.ValidAckResponse + invalidAckResponse.MsgResponses = [][]byte{responseWithNoContractBz} + + err = s.App.ICAOracleKeeper.InstantiateOracleCallback(s.Ctx, channeltypes.Packet{}, &invalidAckResponse, tc.ValidCallbackArgs) + s.Require().ErrorContains(err, "response from CW contract instantiation ICA does not contain a contract address") +} diff --git a/x/icaoracle/keeper/icacallbacks_update_oracle.go b/x/icaoracle/keeper/icacallbacks_update_oracle.go new file mode 100644 index 00000000000..0f062a3c0ea --- /dev/null +++ b/x/icaoracle/keeper/icacallbacks_update_oracle.go @@ -0,0 +1,55 @@ +package keeper + +import ( + errorsmod "cosmossdk.io/errors" + + "github.com/osmosis-labs/osmosis/v27/utils" + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" + + icacallbackstypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/gogoproto/proto" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" +) + +// Callback after an update oracle ICA +// +// If successful/failure: the metric is removed from the pending store +// If timeout: metric is left in pending store so it can be re-submitted +func (k Keeper) UpdateOracleCallback(ctx sdk.Context, packet channeltypes.Packet, ackResponse *icacallbackstypes.AcknowledgementResponse, args []byte) error { + // Fetch callback args + updateOracleCallback := types.UpdateOracleCallback{} + if err := proto.Unmarshal(args, &updateOracleCallback); err != nil { + return errorsmod.Wrapf(err, "unable to unmarshal update oracle callback") + } + chainId := updateOracleCallback.OracleChainId + k.Logger(ctx).Info(utils.LogICACallbackWithHostZone(chainId, ICACallbackID_UpdateOracle, "Starting update oracle callback")) + + // If the ack timed-out, log the error and exit successfully + // The metric should remain in the pending store so that the ICA can be resubmitted when the channel is restored + if ackResponse.Status == icacallbackstypes.AckResponseStatus_TIMEOUT { + EmitUpdateOracleAckEvent(ctx, updateOracleCallback.Metric, "timeout") + k.Logger(ctx).Error(utils.LogICACallbackStatusWithHostZone(chainId, ICACallbackID_UpdateOracle, ackResponse.Status, packet)) + return nil + } + + // if the ack fails, log the response as an error, otherwise log the success as an info log + if ackResponse.Status == icacallbackstypes.AckResponseStatus_FAILURE { + EmitUpdateOracleAckEvent(ctx, updateOracleCallback.Metric, "failure") + k.Logger(ctx).Error(utils.LogICACallbackStatusWithHostZone(chainId, ICACallbackID_UpdateOracle, ackResponse.Status, packet)) + } else { + EmitUpdateOracleAckEvent(ctx, updateOracleCallback.Metric, "success") + k.Logger(ctx).Info(utils.LogICACallbackStatusWithHostZone(chainId, ICACallbackID_UpdateOracle, ackResponse.Status, packet)) + } + + // Confirm the callback has a valid metric + if updateOracleCallback.Metric == nil || updateOracleCallback.Metric.Key == "" { + return errorsmod.Wrapf(types.ErrInvalidCallback, "metric is missing from callback: %+v", updateOracleCallback) + } + + // Remove the metric from the store (aka mark update as complete) + k.RemoveMetric(ctx, updateOracleCallback.Metric.GetMetricID()) + + return nil +} diff --git a/x/icaoracle/keeper/icacallbacks_update_oracle_test.go b/x/icaoracle/keeper/icacallbacks_update_oracle_test.go new file mode 100644 index 00000000000..ce131402cf6 --- /dev/null +++ b/x/icaoracle/keeper/icacallbacks_update_oracle_test.go @@ -0,0 +1,90 @@ +package keeper_test + +import ( + "github.com/cosmos/gogoproto/proto" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + icacallbacktypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +func (s *KeeperTestSuite) SetupTestUpdateOracleCallback() types.Metric { + // Store an IN_PROGRESS metric + metric := types.Metric{ + Key: "key1", + UpdateTime: 1, + DestinationOracle: HostChainId, + Status: types.MetricStatus_IN_PROGRESS, + } + s.App.ICAOracleKeeper.SetMetric(s.Ctx, metric) + + return metric +} + +func (s *KeeperTestSuite) CallCallbackAndCheckState(ackStatus icacallbacktypes.AckResponseStatus) { + metric := s.SetupTestUpdateOracleCallback() + + // Serialize callback + callback := types.UpdateOracleCallback{ + Metric: &metric, + } + callbackBz, err := proto.Marshal(&callback) + s.Require().NoError(err, "no error expected when marshalling callback data") + + // Call update oracle callback + ackResponse := icacallbacktypes.AcknowledgementResponse{ + Status: ackStatus, + } + err = s.App.ICAOracleKeeper.UpdateOracleCallback(s.Ctx, channeltypes.Packet{}, &ackResponse, callbackBz) + s.Require().NoError(err, "no error expected during callback") + + // Confirm the pending update was removed in the case of success/failure + expectedFound := ackStatus == icacallbacktypes.AckResponseStatus_TIMEOUT + _, actualFound := s.App.ICAOracleKeeper.GetMetric(s.Ctx, metric.GetMetricID()) + s.Require().Equal(expectedFound, actualFound, "metric found") +} + +func (s *KeeperTestSuite) TestUpdateOracleCallback_AckSuccess() { + s.CallCallbackAndCheckState(icacallbacktypes.AckResponseStatus_SUCCESS) +} + +func (s *KeeperTestSuite) TestUpdateOracleCallback_AckTimeout() { + s.CallCallbackAndCheckState(icacallbacktypes.AckResponseStatus_TIMEOUT) +} + +func (s *KeeperTestSuite) TestUpdateOracleCallback_AckFailure() { + s.CallCallbackAndCheckState(icacallbacktypes.AckResponseStatus_FAILURE) +} + +func (s *KeeperTestSuite) TestUpdateOracleCallback_UnmarshalFailure() { + dummyPacket := channeltypes.Packet{} + dummyAckResponse := icacallbacktypes.AcknowledgementResponse{} + invalidArgs := []byte{1, 2, 3} + err := s.App.ICAOracleKeeper.UpdateOracleCallback(s.Ctx, dummyPacket, &dummyAckResponse, invalidArgs) + s.Require().ErrorContains(err, "unable to unmarshal update oracle callback") +} + +func (s *KeeperTestSuite) TestUpdateOracleCallback_InvalidCallbackData() { + dummyPacket := channeltypes.Packet{} + dummyAckResponse := icacallbacktypes.AcknowledgementResponse{} + + // Create invalid callback args with no metric field + callback := types.UpdateOracleCallback{} + invalidArgs, err := proto.Marshal(&callback) + s.Require().NoError(err, "no error expected when marshalling callback data") + + // Callback should fail + err = s.App.ICAOracleKeeper.UpdateOracleCallback(s.Ctx, dummyPacket, &dummyAckResponse, invalidArgs) + s.Require().ErrorContains(err, "metric is missing from callback") + + // Create another invalid callback args, this time with a metric struct, but no key + callback = types.UpdateOracleCallback{ + Metric: &types.Metric{Value: "value1"}, + } + invalidArgs, err = proto.Marshal(&callback) + s.Require().NoError(err, "no error expected when marshalling callback data") + + // Callback should fail again + err = s.App.ICAOracleKeeper.UpdateOracleCallback(s.Ctx, dummyPacket, &dummyAckResponse, invalidArgs) + s.Require().ErrorContains(err, "metric is missing from callback") +} diff --git a/x/icaoracle/keeper/icaoracle.go b/x/icaoracle/keeper/icaoracle.go new file mode 100644 index 00000000000..57431a2e5f1 --- /dev/null +++ b/x/icaoracle/keeper/icaoracle.go @@ -0,0 +1,120 @@ +package keeper + +import ( + "encoding/json" + "fmt" + "time" + + errorsmod "cosmossdk.io/errors" + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" + sdk "github.com/cosmos/cosmos-sdk/types" + proto "github.com/cosmos/gogoproto/proto" + + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +var ( + InstantiateOracleTimeout = time.Hour * 24 // 1 day + MetricUpdateTimeout = time.Hour * 24 // 1 day +) + +// Queues an metric update across each active oracle +// One metric record is created for each oracle, in status QUEUED +func (k Keeper) QueueMetricUpdate(ctx sdk.Context, key, value, metricType, attributes string) { + metric := types.NewMetric(ctx, key, value, metricType, attributes) + metric.Status = types.MetricStatus_QUEUED + + for _, oracle := range k.GetAllOracles(ctx) { + // Ignore any inactive oracles + if !oracle.Active { + continue + } + + metric.DestinationOracle = oracle.ChainId + k.SetMetric(ctx, metric) + + k.Logger(ctx).Info(fmt.Sprintf("Queueing oracle metric update - Metric: %s, Oracle: %s", metric.Key, oracle.ChainId)) + } +} + +// Submits an ICA to update the metric in the CW contract +func (k Keeper) SubmitMetricUpdate(ctx sdk.Context, oracle types.Oracle, metric types.Metric) error { + // Validate ICA is setup properly, contract has been instantiated, and oracle is active + if err := oracle.ValidateICASetup(); err != nil { + return err + } + if err := oracle.ValidateContractInstantiated(); err != nil { + return err + } + if !oracle.Active { + return errorsmod.Wrapf(types.ErrOracleInactive, "oracle (%s) is inactive", oracle.ChainId) + } + + // Build contract message with metric update + contractMsg := types.NewMsgExecuteContractPostMetric(metric) + contractMsgBz, err := json.Marshal(contractMsg) + if err != nil { + return errorsmod.Wrapf(err, "unable to marshal execute contract post metric") + } + + // Build ICA message to execute the CW contract + msgs := []proto.Message{&wasmtypes.MsgExecuteContract{ + Sender: oracle.IcaAddress, + Contract: oracle.ContractAddress, + Msg: contractMsgBz, + }} + + // Submit the ICA to execute the contract + callbackArgs := types.UpdateOracleCallback{ + OracleChainId: oracle.ChainId, + Metric: &metric, + } + icaTx := types.ICATx{ + ConnectionId: oracle.ConnectionId, + ChannelId: oracle.ChannelId, + PortId: oracle.PortId, + Owner: types.FormatICAAccountOwner(oracle.ChainId, types.ICAAccountType_Oracle), + Messages: msgs, + RelativeTimeout: MetricUpdateTimeout, + CallbackArgs: &callbackArgs, + CallbackId: ICACallbackID_UpdateOracle, + } + if err := k.SubmitICATx(ctx, icaTx); err != nil { + return errorsmod.Wrapf(err, "unable to submit update oracle contract ICA") + } + + return nil +} + +// For each queued metric, submit an ICA to each oracle, and then flag the metric as IN_PROGRESS +func (k Keeper) PostAllQueuedMetrics(ctx sdk.Context) { + for _, metric := range k.GetAllQueuedMetrics(ctx) { + k.Logger(ctx).Info(fmt.Sprintf("Submitting oracle metric update - Metric: %s, Oracle: %s", metric.Key, metric.DestinationOracle)) + + // Ignore any inactive oracles + oracle, found := k.GetOracle(ctx, metric.DestinationOracle) + if !found || !oracle.Active { + k.Logger(ctx).Info(fmt.Sprintf("Oracle %s is inactive", oracle.ChainId)) + continue + } + + // Flag the metric as IN_PROGRESS to prevent resubmissions next block + // We do this even in the case where the ICA submission fails (from something like a channel closure) + // If the channel closes, once it is restored, the metric will get re-queued + k.UpdateMetricStatus(ctx, metric, types.MetricStatus_IN_PROGRESS) + + if !k.IsOracleICAChannelOpen(ctx, oracle) { + k.Logger(ctx).Error(fmt.Sprintf("Oracle %s has a closed ICA channel (%s)", oracle.ChainId, oracle.ChannelId)) + continue + } + + // Submit the ICA for each metric + if err := k.SubmitMetricUpdate(ctx, oracle, metric); err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Failed to submit a metric update ICA - Metric: %+v, Oracle: %+v, %s", metric, oracle, err.Error())) + continue + } + + k.Logger(ctx).Info(fmt.Sprintf("Submitted metric update ICA - Metric: %s, Oracle: %s, Time: %d", metric.Key, oracle.ChainId, metric.UpdateTime)) + EmitUpdateOracleEvent(ctx, metric) + } +} diff --git a/x/icaoracle/keeper/icaoracle_test.go b/x/icaoracle/keeper/icaoracle_test.go new file mode 100644 index 00000000000..4473d59a629 --- /dev/null +++ b/x/icaoracle/keeper/icaoracle_test.go @@ -0,0 +1,163 @@ +package keeper_test + +import ( + "github.com/cosmos/gogoproto/proto" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + + icacallbacktypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/keeper" + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +type SubmitMetricUpdateTestCase struct { + Oracle types.Oracle + Metric types.Metric + CallbackArgs []byte + CallbackId string +} + +func (s *KeeperTestSuite) SetupTestSubmitMetricUpdate() SubmitMetricUpdateTestCase { + // Create clients, connections, and an oracle ICA channel + owner := types.FormatICAAccountOwner(HostChainId, types.ICAAccountType_Oracle) + channelId, portId := s.CreateICAChannel(owner) + + // Create oracle + oracle := types.Oracle{ + ChainId: HostChainId, + ConnectionId: ibctesting.FirstConnectionID, + ChannelId: channelId, + PortId: portId, + IcaAddress: "ica_address", + ContractAddress: "contract_address", + Active: true, + } + s.App.ICAOracleKeeper.SetOracle(s.Ctx, oracle) + + // Create metric + metric := types.Metric{ + Key: "key1", + Value: "value1", + } + + // Callback args + callbackId := keeper.ICACallbackID_UpdateOracle + callback := types.UpdateOracleCallback{ + OracleChainId: HostChainId, + Metric: &metric, + } + callbackBz, err := proto.Marshal(&callback) + s.Require().NoError(err, "no error expected when serializing callback args") + + return SubmitMetricUpdateTestCase{ + Oracle: oracle, + Metric: metric, + CallbackArgs: callbackBz, + CallbackId: callbackId, + } +} + +func (s *KeeperTestSuite) TestSubmitMetricUpdate_Success() { + tc := s.SetupTestSubmitMetricUpdate() + + // Call submit metric update (which should trigger an ICA) + err := s.App.ICAOracleKeeper.SubmitMetricUpdate(s.Ctx, tc.Oracle, tc.Metric) + s.Require().NoError(err, "no error expected when submitting metric update") + + // Confirm callback data has been stored + sequence := uint64(1) + callbackKey := icacallbacktypes.PacketID(tc.Oracle.PortId, tc.Oracle.ChannelId, sequence) + + expectedCallbackData := icacallbacktypes.CallbackData{ + CallbackKey: callbackKey, + PortId: tc.Oracle.PortId, + ChannelId: tc.Oracle.ChannelId, + Sequence: sequence, + CallbackId: tc.CallbackId, + CallbackArgs: tc.CallbackArgs, + } + actualCallbackData, found := s.App.IcacallbacksKeeper.GetCallbackData(s.Ctx, callbackKey) + s.Require().True(found, "callback data should have been found") + s.Require().Equal(expectedCallbackData, actualCallbackData, "callback data") +} + +func (s *KeeperTestSuite) TestSubmitMetricUpdate_IcaNotRegistered() { + tc := s.SetupTestSubmitMetricUpdate() + + // Remove ICAAddress from oracle so it appears as if the ICA was not registered + oracle := tc.Oracle + oracle.IcaAddress = "" + + // Submit the metric update which should fail because the ICA is not setup + err := s.App.ICAOracleKeeper.SubmitMetricUpdate(s.Ctx, oracle, tc.Metric) + s.Require().ErrorContains(err, "ICAAddress is empty: oracle ICA channel has not been registered") +} + +func (s *KeeperTestSuite) TestSubmitMetricUpdate_ContractNotInstantiated() { + tc := s.SetupTestSubmitMetricUpdate() + + // Remove ContractAddress from oracle so it appears as if the contract was never instantiated + oracle := tc.Oracle + oracle.ContractAddress = "" + + // Submit the metric update which should fail because the contract is not instantiated + err := s.App.ICAOracleKeeper.SubmitMetricUpdate(s.Ctx, oracle, tc.Metric) + s.Require().ErrorContains(err, "contract address is empty: oracle not instantiated") +} + +func (s *KeeperTestSuite) TestSubmitMetricUpdate_OracleInactive() { + tc := s.SetupTestSubmitMetricUpdate() + + // Set the oracle to inactive + oracle := tc.Oracle + oracle.Active = false + + // Submit the metric update which should fail because the oracle is not active + err := s.App.ICAOracleKeeper.SubmitMetricUpdate(s.Ctx, oracle, tc.Metric) + s.Require().ErrorContains(err, "oracle is inactive") +} + +func (s *KeeperTestSuite) TestSubmitMetricUpdate_FailedToSubmitICA() { + tc := s.SetupTestSubmitMetricUpdate() + + // Close the channel so that the ICA fails + s.UpdateChannelState(tc.Oracle.PortId, tc.Oracle.ChannelId, channeltypes.CLOSED) + + // Submit the metric update which should fail + err := s.App.ICAOracleKeeper.SubmitMetricUpdate(s.Ctx, tc.Oracle, tc.Metric) + s.Require().ErrorContains(err, "unable to submit update oracle contract ICA: unable to send ICA tx") +} + +func (s *KeeperTestSuite) TestPostAllQueuedMetrics() { + s.SetupTestSubmitMetricUpdate() + + // Add an inactive oracle + s.App.ICAOracleKeeper.SetOracle(s.Ctx, types.Oracle{ + ChainId: "inactive", + Active: false, + }) + + // Add metrics across different states + metrics := []types.Metric{ + // Should get sent + {Key: "key-1", Value: "value-1", DestinationOracle: HostChainId, Status: types.MetricStatus_QUEUED}, + {Key: "key-2", Value: "value-2", DestinationOracle: HostChainId, Status: types.MetricStatus_QUEUED}, + {Key: "key-3", Value: "value-3", DestinationOracle: HostChainId, Status: types.MetricStatus_QUEUED}, + // Metric not QUEUED + {Key: "key-4", Value: "value-4", DestinationOracle: HostChainId, Status: types.MetricStatus_IN_PROGRESS}, + // Inactive oracle - should not get sent + {Key: "key-5", Value: "value-5", DestinationOracle: "inactive", Status: types.MetricStatus_QUEUED}, + // Oracle not found - should not get sent + {Key: "key-6", Value: "value-6", DestinationOracle: "not-found", Status: types.MetricStatus_QUEUED}, + } + for _, metric := range metrics { + s.App.ICAOracleKeeper.SetMetric(s.Ctx, metric) + } + + // Post all metrics + s.App.ICAOracleKeeper.PostAllQueuedMetrics(s.Ctx) + + // Check 3 ICAs were submitted + callbacks := s.App.IcacallbacksKeeper.GetAllCallbackData(s.Ctx) + s.Require().Len(callbacks, 3, "three callbacks submitted") +} diff --git a/x/icaoracle/keeper/keeper.go b/x/icaoracle/keeper/keeper.go new file mode 100644 index 00000000000..0d6ce81aad3 --- /dev/null +++ b/x/icaoracle/keeper/keeper.go @@ -0,0 +1,65 @@ +package keeper + +import ( + "fmt" + + "cosmossdk.io/log" + storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + icacontrollerkeeper "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/keeper" + + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +type Keeper struct { + cdc codec.Codec + storeKey storetypes.StoreKey + paramstore paramtypes.Subspace + authority string + + ICS4Wrapper types.ICS4Wrapper + ClientKeeper types.ClientKeeper + ConnectionKeeper types.ConnectionKeeper + ChannelKeeper types.ChannelKeeper + ICAControllerKeeper icacontrollerkeeper.Keeper + ICACallbacksKeeper types.ICACallbacksKeeper +} + +func NewKeeper( + cdc codec.Codec, + key storetypes.StoreKey, + paramstore paramtypes.Subspace, + authority string, + + ics4Wrapper types.ICS4Wrapper, + clientKeeper types.ClientKeeper, + connectionKeeper types.ConnectionKeeper, + channelKeeper types.ChannelKeeper, + icaControllerKeeper icacontrollerkeeper.Keeper, + icaCallbacksKeeper types.ICACallbacksKeeper, +) *Keeper { + return &Keeper{ + cdc: cdc, + storeKey: key, + paramstore: paramstore, + authority: authority, + + ICS4Wrapper: ics4Wrapper, + ClientKeeper: clientKeeper, + ConnectionKeeper: connectionKeeper, + ChannelKeeper: channelKeeper, + ICAControllerKeeper: icaControllerKeeper, + ICACallbacksKeeper: icaCallbacksKeeper, + } +} + +func (k Keeper) Logger(ctx sdk.Context) log.Logger { + return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) +} + +// GetAuthority returns the x/icaoracle module's authority. +func (k Keeper) GetAuthority() string { + return k.authority +} diff --git a/x/icaoracle/keeper/keeper_test.go b/x/icaoracle/keeper/keeper_test.go new file mode 100644 index 00000000000..1b0c4fcfe1d --- /dev/null +++ b/x/icaoracle/keeper/keeper_test.go @@ -0,0 +1,71 @@ +package keeper_test + +import ( + "strconv" + "testing" + + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + "github.com/stretchr/testify/suite" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/keeper" + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +var ( + HostChainId = "host1" + ConnectionId = "connection-0" +) + +type KeeperTestSuite struct { + apptesting.AppTestHelper + QueryClient types.QueryClient +} + +func (s *KeeperTestSuite) SetupTest() { + s.Setup() + s.QueryClient = types.NewQueryClient(s.QueryHelper) +} + +func TestKeeperTestSuite(t *testing.T) { + suite.Run(t, new(KeeperTestSuite)) +} + +// Dynamically gets the MsgServer for this module's keeper +// this function must be used so that the MsgServer is always created with the most updated App context +// +// which can change depending on the type of test +// (e.g. tests with only one Stride chain vs tests with multiple chains and IBC support) +func (s *KeeperTestSuite) GetMsgServer() types.MsgServer { + return keeper.NewMsgServerImpl(s.App.ICAOracleKeeper) +} + +// Helper function to create 5 oracle objects with various attributes +func (s *KeeperTestSuite) CreateTestOracles() []types.Oracle { + oracles := []types.Oracle{} + for i := 1; i <= 5; i++ { + suffix := strconv.Itoa(i) + + channelId := "channel-" + suffix + portId := "port-" + suffix + + oracle := types.Oracle{ + ChainId: "chain-" + suffix, + ConnectionId: "connection-" + suffix, + ChannelId: channelId, + PortId: portId, + IcaAddress: "oracle-address", + ContractAddress: "contract-address", + Active: true, + } + + oracles = append(oracles, oracle) + s.App.ICAOracleKeeper.SetOracle(s.Ctx, oracle) + + // Create open ICA channel + s.App.IBCKeeper.ChannelKeeper.SetChannel(s.Ctx, portId, channelId, channeltypes.Channel{ + State: channeltypes.OPEN, + }) + } + return oracles +} diff --git a/x/icaoracle/keeper/metric.go b/x/icaoracle/keeper/metric.go new file mode 100644 index 00000000000..de1664a5c0c --- /dev/null +++ b/x/icaoracle/keeper/metric.go @@ -0,0 +1,109 @@ +package keeper + +import ( + "cosmossdk.io/store/prefix" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +// Stores a metric in the main metric store and then either +// adds the metric to the queue or removes it from the queue +// depending on the status of the metric +func (k Keeper) SetMetric(ctx sdk.Context, metric types.Metric) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.MetricKeyPrefix) + + metricKey := types.KeyPrefix(metric.GetMetricID()) + metricValue := k.cdc.MustMarshal(&metric) + + store.Set(metricKey, metricValue) + + switch metric.Status { + case types.MetricStatus_QUEUED: + k.addMetricToQueue(ctx, metricKey) + case types.MetricStatus_IN_PROGRESS: + k.removeMetricFromQueue(ctx, metricKey) + default: + panic("metric status must be specified as QUEUED or IN_PROGRESS before storing") + } +} + +// Gets a specifc metric from the store +func (k Keeper) GetMetric(ctx sdk.Context, metricId string) (metric types.Metric, found bool) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.MetricKeyPrefix) + + metricKey := types.KeyPrefix(metricId) + metricBz := store.Get(metricKey) + + if len(metricBz) == 0 { + return metric, false + } + + k.cdc.MustUnmarshal(metricBz, &metric) + return metric, true +} + +// Returns all metrics from the store +func (k Keeper) GetAllMetrics(ctx sdk.Context) (metrics []types.Metric) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.MetricKeyPrefix) + + iterator := store.Iterator(nil, nil) + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + + metric := types.Metric{} + k.cdc.MustUnmarshal(iterator.Value(), &metric) + metrics = append(metrics, metric) + } + + return metrics +} + +// Removes a metric from the store +func (k Keeper) RemoveMetric(ctx sdk.Context, metricId string) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.MetricKeyPrefix) + metricKey := types.KeyPrefix(metricId) + store.Delete(metricKey) + k.removeMetricFromQueue(ctx, metricKey) +} + +// Updates the status of a metric which will consequently move it either +// in or out of the queue +func (k Keeper) UpdateMetricStatus(ctx sdk.Context, metric types.Metric, status types.MetricStatus) { + metric.Status = status + k.SetMetric(ctx, metric) +} + +// Adds a metric to the queue, which acts as an index for all metrics +// that should be submitted to it's relevant oracle +func (k Keeper) addMetricToQueue(ctx sdk.Context, metricKey []byte) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.MetricQueueKeyPrefix) + store.Set(metricKey, []byte{1}) +} + +// Removes a metric from the queue +func (k Keeper) removeMetricFromQueue(ctx sdk.Context, metricKey []byte) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.MetricQueueKeyPrefix) + store.Delete(metricKey) +} + +// Returns all metrics from the index queue +func (k Keeper) GetAllQueuedMetrics(ctx sdk.Context) (metrics []types.Metric) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.MetricQueueKeyPrefix) + + iterator := store.Iterator(nil, nil) + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + + metricId := string(iterator.Key()) + metric, found := k.GetMetric(ctx, metricId) + if !found { + panic("metric in queue but not metric store") + } + metrics = append(metrics, metric) + } + + return metrics +} diff --git a/x/icaoracle/keeper/metric_test.go b/x/icaoracle/keeper/metric_test.go new file mode 100644 index 00000000000..6bcfcbe998f --- /dev/null +++ b/x/icaoracle/keeper/metric_test.go @@ -0,0 +1,73 @@ +package keeper_test + +import ( + "strconv" + + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +// Helper function to create 5 metric objects with various attributes +func (s *KeeperTestSuite) createMetrics() []types.Metric { + metrics := []types.Metric{} + for i := 1; i <= 5; i++ { + suffix := strconv.Itoa(i) + metric := types.Metric{ + Key: "key-" + suffix, + Value: "value-" + suffix, + DestinationOracle: "chain", + Status: types.MetricStatus_QUEUED, + } + + metrics = append(metrics, metric) + s.App.ICAOracleKeeper.SetMetric(s.Ctx, metric) + } + return metrics +} + +func (s *KeeperTestSuite) TestGetMetric() { + metrics := s.createMetrics() + + for _, expected := range metrics { + metricId := expected.GetMetricID() + + actual, found := s.App.ICAOracleKeeper.GetMetric(s.Ctx, metricId) + s.Require().True(found, "metric %s should have been found", metricId) + s.Require().Equal(expected, actual, "metric %s", metricId) + } +} + +func (s *KeeperTestSuite) TestGetAllMetrics() { + metrics := s.createMetrics() + + actualMetrics := s.App.ICAOracleKeeper.GetAllMetrics(s.Ctx) + s.Require().Equal(len(actualMetrics), len(metrics), "number of metrics") + + for i, expected := range metrics { + metricId := expected.GetMetricID() + + actual := actualMetrics[i] + s.Require().Equal(expected, actual, "metrics %s", metricId) + } +} + +func (s *KeeperTestSuite) TestMetricQueue() { + metrics := s.createMetrics() + + actualQueuedMetrics := s.App.ICAOracleKeeper.GetAllQueuedMetrics(s.Ctx) + s.Require().Equal(len(actualQueuedMetrics), len(metrics), "number of queued metrics") + + for i, metric := range metrics { + metricId := metric.GetMetricID() + + // set the metric to in progres which should remove it from the queue + s.App.ICAOracleKeeper.UpdateMetricStatus(s.Ctx, metric, types.MetricStatus_IN_PROGRESS) + metricsInProgress := i + 1 + queuedMetrics := s.App.ICAOracleKeeper.GetAllQueuedMetrics(s.Ctx) + + s.Require().Equal(len(queuedMetrics), len(metrics)-metricsInProgress, + "number of remaining queued metrics after updating %s", metricId) + + s.Require().ElementsMatch(metrics[metricsInProgress:], queuedMetrics, + "queued metric after setting %s to in progress", metricId) + } +} diff --git a/x/icaoracle/keeper/msg_server.go b/x/icaoracle/keeper/msg_server.go new file mode 100644 index 00000000000..53dfe09977e --- /dev/null +++ b/x/icaoracle/keeper/msg_server.go @@ -0,0 +1,269 @@ +package keeper + +import ( + "context" + "encoding/json" + + errorsmod "cosmossdk.io/errors" + wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + proto "github.com/cosmos/gogoproto/proto" + icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types" + ibctmtypes "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" + + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +type msgServer struct { + Keeper +} + +// NewMsgServerImpl returns an implementation of the MsgServer interface +// for the provided Keeper. +func NewMsgServerImpl(keeper Keeper) types.MsgServer { + return &msgServer{Keeper: keeper} +} + +var _ types.MsgServer = msgServer{} + +// Adds a new oracle as a destination for metric updates +// Registers a new ICA account along this connection +func (k msgServer) AddOracle(goCtx context.Context, msg *types.MsgAddOracle) (*types.MsgAddOracleResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + // Grab the connection and confirm it exists + controllerConnectionId := msg.ConnectionId + connectionEnd, found := k.ConnectionKeeper.GetConnection(ctx, controllerConnectionId) + if !found { + return nil, errorsmod.Wrapf(sdkerrors.ErrNotFound, "connection (%s) not found", controllerConnectionId) + } + + // Get chain id from the connection + clientState, found := k.ClientKeeper.GetClientState(ctx, connectionEnd.ClientId) + if !found { + return nil, errorsmod.Wrapf(sdkerrors.ErrNotFound, "client (%s) not found", connectionEnd.ClientId) + } + client, ok := clientState.(*ibctmtypes.ClientState) + if !ok { + return nil, types.ErrClientStateNotTendermint + } + chainId := client.ChainId + + // Confirm oracle was not already created + _, found = k.GetOracle(ctx, chainId) + if found { + return nil, types.ErrOracleAlreadyExists + } + + // Create the oracle struct, marked as inactive + oracle := types.Oracle{ + ChainId: chainId, + ConnectionId: controllerConnectionId, + Active: false, + } + k.SetOracle(ctx, oracle) + + // Get the expected port ID for the ICA channel + owner := types.FormatICAAccountOwner(chainId, types.ICAAccountType_Oracle) + portID, err := icatypes.NewControllerPortID(owner) + if err != nil { + return nil, err + } + + // Check if an ICA account has already been created for this oracle + // (in the event that an oracle was removed and then added back) + // If so, there's no need to register a new ICA + channelID, channelFound := k.ICAControllerKeeper.GetOpenActiveChannel(ctx, controllerConnectionId, portID) + icaAddress, icaFound := k.ICAControllerKeeper.GetInterchainAccountAddress(ctx, controllerConnectionId, portID) + + if channelFound && icaFound { + oracle.IcaAddress = icaAddress + oracle.ChannelId = channelID + oracle.PortId = portID + + k.SetOracle(ctx, oracle) + + return &types.MsgAddOracleResponse{}, nil + } + + // Get the corresponding connection on the host + hostConnectionId := connectionEnd.Counterparty.ConnectionId + if hostConnectionId == "" { + return nil, types.ErrHostConnectionNotFound + } + + // Register the oracle interchain account + appVersion := string(icatypes.ModuleCdc.MustMarshalJSON(&icatypes.Metadata{ + Version: icatypes.Version, + ControllerConnectionId: controllerConnectionId, + HostConnectionId: hostConnectionId, + Encoding: icatypes.EncodingProtobuf, + TxType: icatypes.TxTypeSDKMultiMsg, + })) + + if err := k.ICAControllerKeeper.RegisterInterchainAccountWithOrdering(ctx, controllerConnectionId, owner, appVersion, channeltypes.ORDERED); err != nil { + return nil, errorsmod.Wrapf(err, "unable to register oracle interchain account") + } + + return &types.MsgAddOracleResponse{}, nil +} + +// Instantiates the oracle cosmwasm contract +func (k msgServer) InstantiateOracle(goCtx context.Context, msg *types.MsgInstantiateOracle) (*types.MsgInstantiateOracleResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + // Confirm the oracle has already been added, but has not yet been instantiated + oracle, found := k.GetOracle(ctx, msg.OracleChainId) + if !found { + return nil, types.ErrOracleNotFound + } + if oracle.ContractAddress != "" { + return nil, types.ErrOracleAlreadyInstantiated + } + + // Confirm the oracle ICA was registered + if err := oracle.ValidateICASetup(); err != nil { + return nil, err + } + + // Build the contract-specific instantiation message + contractMsg := types.MsgInstantiateOracleContract{ + AdminAddress: oracle.IcaAddress, + TransferChannelId: msg.TransferChannelOnOracle, + } + contractMsgBz, err := json.Marshal(contractMsg) + if err != nil { + return nil, errorsmod.Wrapf(err, "unable to marshal instantiate oracle contract") + } + + // Build the ICA message to instantiate the contract + msgs := []proto.Message{&wasmtypes.MsgInstantiateContract{ + Sender: oracle.IcaAddress, + Admin: oracle.IcaAddress, + CodeID: msg.ContractCodeId, + Label: "Stride ICA Oracle", + Msg: contractMsgBz, + }} + + // Submit the ICA + callbackArgs := types.InstantiateOracleCallback{ + OracleChainId: oracle.ChainId, + } + icaTx := types.ICATx{ + ConnectionId: oracle.ConnectionId, + ChannelId: oracle.ChannelId, + PortId: oracle.PortId, + Owner: types.FormatICAAccountOwner(oracle.ChainId, types.ICAAccountType_Oracle), + Messages: msgs, + RelativeTimeout: InstantiateOracleTimeout, + CallbackArgs: &callbackArgs, + CallbackId: ICACallbackID_InstantiateOracle, + } + if err := k.SubmitICATx(ctx, icaTx); err != nil { + return nil, errorsmod.Wrapf(err, "unable to submit instantiate oracle contract ICA") + } + + return &types.MsgInstantiateOracleResponse{}, nil +} + +// Creates a new ICA channel and restores the oracle ICA account after a channel closer +func (k msgServer) RestoreOracleICA(goCtx context.Context, msg *types.MsgRestoreOracleICA) (*types.MsgRestoreOracleICAResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + // Confirm the oracle exists and has already had an ICA registered + oracle, found := k.GetOracle(ctx, msg.OracleChainId) + if !found { + return nil, types.ErrOracleNotFound + } + if err := oracle.ValidateICASetup(); err != nil { + return nil, errorsmod.Wrapf(err, "the oracle (%s) has never had an registered ICA", oracle.ChainId) + } + + // Confirm the channel is closed + if k.IsOracleICAChannelOpen(ctx, oracle) { + return nil, errorsmod.Wrapf(types.ErrUnableToRestoreICAChannel, + "channel already open, chain-id: %s, channel-id: %s", oracle.ChainId, oracle.ChannelId) + } + + // Grab the connectionEnd for the counterparty connection + connectionEnd, found := k.ConnectionKeeper.GetConnection(ctx, oracle.ConnectionId) + if !found { + return nil, errorsmod.Wrapf(sdkerrors.ErrNotFound, "connection (%s) not found", oracle.ConnectionId) + } + hostConnectionId := connectionEnd.Counterparty.ConnectionId + + // Only allow restoring an ICA if the account already exists + owner := types.FormatICAAccountOwner(oracle.ChainId, types.ICAAccountType_Oracle) + portId, err := icatypes.NewControllerPortID(owner) + if err != nil { + return nil, errorsmod.Wrapf(err, "unable to build portId from owner (%s)", owner) + } + _, exists := k.ICAControllerKeeper.GetInterchainAccountAddress(ctx, oracle.ConnectionId, portId) + if !exists { + return nil, errorsmod.Wrapf(types.ErrICAAccountDoesNotExist, + "cannot find ICA account for connection (%s) and port (%s)", oracle.ConnectionId, portId) + } + + // Call register ICA again to restore the account + appVersion := string(icatypes.ModuleCdc.MustMarshalJSON(&icatypes.Metadata{ + Version: icatypes.Version, + ControllerConnectionId: oracle.ConnectionId, + HostConnectionId: hostConnectionId, + Encoding: icatypes.EncodingProtobuf, + TxType: icatypes.TxTypeSDKMultiMsg, + })) + if err := k.ICAControllerKeeper.RegisterInterchainAccountWithOrdering(ctx, oracle.ConnectionId, owner, appVersion, channeltypes.ORDERED); err != nil { + return nil, errorsmod.Wrapf(err, "unable to register oracle interchain account") + } + + // Revert all pending metrics for this oracle back to status QUEUED + for _, metric := range k.GetAllMetrics(ctx) { + if metric.DestinationOracle == msg.OracleChainId && metric.Status == types.MetricStatus_IN_PROGRESS { + k.UpdateMetricStatus(ctx, metric, types.MetricStatus_QUEUED) + } + } + + return &types.MsgRestoreOracleICAResponse{}, nil +} + +// Proposal handler for toggling whether an oracle is currently active (meaning it's a destination for metric pushes) +func (ms msgServer) ToggleOracle(goCtx context.Context, msg *types.MsgToggleOracle) (*types.MsgToggleOracleResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + if ms.authority != msg.Authority { + return nil, errorsmod.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", ms.authority, msg.Authority) + } + + if err := ms.Keeper.ToggleOracle(ctx, msg.OracleChainId, msg.Active); err != nil { + return nil, err + } + + return &types.MsgToggleOracleResponse{}, nil +} + +// Proposal handler for removing an oracle from the store +func (ms msgServer) RemoveOracle(goCtx context.Context, msg *types.MsgRemoveOracle) (*types.MsgRemoveOracleResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + if ms.authority != msg.Authority { + return nil, errorsmod.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", ms.authority, msg.Authority) + } + + _, found := ms.Keeper.GetOracle(ctx, msg.OracleChainId) + if !found { + return nil, types.ErrOracleNotFound + } + + ms.Keeper.RemoveOracle(ctx, msg.OracleChainId) + + // Remove all metrics that were targeting this oracle + for _, metric := range ms.Keeper.GetAllMetrics(ctx) { + if metric.DestinationOracle == msg.OracleChainId { + ms.Keeper.RemoveMetric(ctx, metric.GetMetricID()) + } + } + + return &types.MsgRemoveOracleResponse{}, nil +} diff --git a/x/icaoracle/keeper/msg_server_add_oracle_test.go b/x/icaoracle/keeper/msg_server_add_oracle_test.go new file mode 100644 index 00000000000..b1175f9937e --- /dev/null +++ b/x/icaoracle/keeper/msg_server_add_oracle_test.go @@ -0,0 +1,115 @@ +package keeper_test + +import ( + "fmt" + + host "github.com/cosmos/ibc-go/v8/modules/core/24-host" + + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +func (s *KeeperTestSuite) SetupTestAddOracle() types.MsgAddOracle { + s.CreateTransferChannel(HostChainId) + + return types.MsgAddOracle{ConnectionId: ConnectionId} +} + +func (s *KeeperTestSuite) TestAddOracle_Successful() { + validMsg := s.SetupTestAddOracle() + + // Submit the AddOracle message + _, err := s.GetMsgServer().AddOracle(s.Ctx, &validMsg) + s.Require().NoError(err, "no error expected when adding an oracle") + + // Confirm the oracle was created + expectedOracle := types.Oracle{ + ChainId: HostChainId, + ConnectionId: ConnectionId, + Active: false, + } + actualOracle, found := s.App.ICAOracleKeeper.GetOracle(s.Ctx, HostChainId) + s.Require().True(found, "oracle should be created") + s.Require().Equal(expectedOracle, actualOracle, "oracle created") + + // Confirm the ICA registration was initiated + // We can verify this by checking that the ICAController module is bound to the oracle port + expectedOraclePort := fmt.Sprintf("icacontroller-%s.ORACLE", HostChainId) + _, isBound := s.App.ScopedICAControllerKeeper.GetCapability(s.Ctx, host.PortPath(expectedOraclePort)) + s.Require().True(isBound, "oracle ICA port %s should have been bound to the ICAController module", expectedOraclePort) +} + +func (s *KeeperTestSuite) TestAddOracle_Successful_IcaAlreadyExists() { + validMsg := s.SetupTestAddOracle() + + // Create the oracle ICA channel + owner := types.FormatICAAccountOwner(HostChainId, types.ICAAccountType_Oracle) + channelID, portId := s.CreateICAChannel(owner) + icaAddress := s.IcaAddresses[owner] + + // Submit the AddOracle message + _, err := s.GetMsgServer().AddOracle(s.Ctx, &validMsg) + s.Require().NoError(err, "no error expected when adding an oracle") + + // Confirm the oracle was created and that the existing ICA channel was used + expectedOracle := types.Oracle{ + ChainId: HostChainId, + ConnectionId: ConnectionId, + ChannelId: channelID, + PortId: portId, + IcaAddress: icaAddress, + Active: false, + } + actualOracle, found := s.App.ICAOracleKeeper.GetOracle(s.Ctx, HostChainId) + s.Require().True(found, "oracle should be created") + s.Require().Equal(expectedOracle, actualOracle, "oracle created") +} + +func (s *KeeperTestSuite) TestAddOracle_Failure_OracleAlreadyExists() { + validMsg := s.SetupTestAddOracle() + + // Set an oracle successfully + _, err := s.GetMsgServer().AddOracle(s.Ctx, &validMsg) + s.Require().NoError(err, "no error expected when adding an oracle") + + // Then attempt to submit it again - it should fail + _, err = s.GetMsgServer().AddOracle(s.Ctx, &validMsg) + s.Require().ErrorContains(err, "oracle already exists", "error expected when adding duplicate oracle") +} + +func (s *KeeperTestSuite) TestAddOracle_Failure_ControllerConnectionDoesNotExist() { + validMsg := s.SetupTestAddOracle() + + // Submit the AddOracle message with an invalid connection Id - should fail + invalidMsg := validMsg + invalidMsg.ConnectionId = "fake_connection" + _, err := s.GetMsgServer().AddOracle(s.Ctx, &invalidMsg) + s.Require().ErrorContains(err, "connection (fake_connection) not found", "error expected when adding oracle") +} + +func (s *KeeperTestSuite) TestAddOracle_Failure_HostConnectionDoesNotExist() { + validMsg := s.SetupTestAddOracle() + + // Delete the host connection ID from the controller connection end + connectionEnd, found := s.App.IBCKeeper.ConnectionKeeper.GetConnection(s.Ctx, ConnectionId) + s.Require().True(found, "connection should have been found") + connectionEnd.Counterparty.ConnectionId = "" + s.App.IBCKeeper.ConnectionKeeper.SetConnection(s.Ctx, ConnectionId, connectionEnd) + + // Submit the AddOracle message - it should fail + _, err := s.GetMsgServer().AddOracle(s.Ctx, &validMsg) + s.Require().ErrorContains(err, "host connection not found", "error expected when adding oracle") +} + +func (s *KeeperTestSuite) TestAddOracle_Failure_ClientDoesNotExist() { + validMsg := s.SetupTestAddOracle() + + // Update the connection end so that the client cannot be found + connectionEnd, found := s.App.IBCKeeper.ConnectionKeeper.GetConnection(s.Ctx, ConnectionId) + s.Require().True(found, "connection should have been found") + connectionEnd.ClientId = "fake_client" + s.App.IBCKeeper.ConnectionKeeper.SetConnection(s.Ctx, ConnectionId, connectionEnd) + + // Submit the AddOracle message - it should fail + _, err := s.GetMsgServer().AddOracle(s.Ctx, &validMsg) + s.Require().ErrorContains(err, "client (fake_client) not found", "error expected when adding oracle") +} diff --git a/x/icaoracle/keeper/msg_server_instantiate_oracle_test.go b/x/icaoracle/keeper/msg_server_instantiate_oracle_test.go new file mode 100644 index 00000000000..10b656150bf --- /dev/null +++ b/x/icaoracle/keeper/msg_server_instantiate_oracle_test.go @@ -0,0 +1,95 @@ +package keeper_test + +import ( + ibctesting "github.com/cosmos/ibc-go/v8/testing" + + icacallbacktypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +type InstantiateOracleTestCase struct { + OracleChannelId string + OraclePortId string + ValidMsg types.MsgInstantiateOracle + InitialOracle types.Oracle +} + +func (s *KeeperTestSuite) SetupTestInstantiateOracle() InstantiateOracleTestCase { + // Create oracle ICA channel + owner := types.FormatICAAccountOwner(HostChainId, types.ICAAccountType_Oracle) + channelId, portId := s.CreateICAChannel(owner) + + // Create oracle + oracle := types.Oracle{ + ChainId: HostChainId, + ConnectionId: ibctesting.FirstConnectionID, + ChannelId: channelId, + PortId: portId, + IcaAddress: "ica_address", + } + s.App.ICAOracleKeeper.SetOracle(s.Ctx, oracle) + + // Confirm the oracle was stored + _, found := s.App.ICAOracleKeeper.GetOracle(s.Ctx, HostChainId) + s.Require().True(found, "oracle should be in the store during setup") + + return InstantiateOracleTestCase{ + OracleChannelId: channelId, + OraclePortId: portId, + ValidMsg: types.MsgInstantiateOracle{ + OracleChainId: HostChainId, + ContractCodeId: uint64(1), + }, + InitialOracle: oracle, + } +} + +func (s *KeeperTestSuite) TestInstantiateOracle_Successful() { + tc := s.SetupTestInstantiateOracle() + + // Submit the instantiate message + _, err := s.GetMsgServer().InstantiateOracle(s.Ctx, &tc.ValidMsg) + s.Require().NoError(err, "no error expected when instantiating an oracle") + + // Confirm the callback data was stored + callbackKey := icacallbacktypes.PacketID(tc.OraclePortId, tc.OracleChannelId, uint64(1)) + _, found := s.App.IcacallbacksKeeper.GetCallbackData(s.Ctx, callbackKey) + s.Require().True(found, "callback data should have been found") +} + +func (s *KeeperTestSuite) TestInstantiateOracle_Failure_OracleNotFound() { + tc := s.SetupTestInstantiateOracle() + + // Remove the oracle from the store + s.App.ICAOracleKeeper.RemoveOracle(s.Ctx, HostChainId) + + // Submit the instantiate message - it should fail + _, err := s.GetMsgServer().InstantiateOracle(s.Ctx, &tc.ValidMsg) + s.Require().ErrorContains(err, "oracle not found") +} + +func (s *KeeperTestSuite) TestInstantiateOracle_Failure_OracleAlreadyInstantiated() { + tc := s.SetupTestInstantiateOracle() + + // Set the oracle contract address to appear as if it was already instantiated + instantiatedOracle := tc.InitialOracle + instantiatedOracle.ContractAddress = "contract" + s.App.ICAOracleKeeper.SetOracle(s.Ctx, instantiatedOracle) + + // Submit the instantiate message - it should fail + _, err := s.GetMsgServer().InstantiateOracle(s.Ctx, &tc.ValidMsg) + s.Require().ErrorContains(err, "oracle already instantiated") +} + +func (s *KeeperTestSuite) TestInstantiateOracle_Failure_InvalidICASetup() { + tc := s.SetupTestInstantiateOracle() + + // Remove the oracle ICA address to appear as if it the ICA was not registered yet + instantiatedOracle := tc.InitialOracle + instantiatedOracle.IcaAddress = "" + s.App.ICAOracleKeeper.SetOracle(s.Ctx, instantiatedOracle) + + // Submit the instantiate message - it should fail + _, err := s.GetMsgServer().InstantiateOracle(s.Ctx, &tc.ValidMsg) + s.Require().ErrorContains(err, "oracle ICA channel has not been registered") +} diff --git a/x/icaoracle/keeper/msg_server_remove_oracle_test.go b/x/icaoracle/keeper/msg_server_remove_oracle_test.go new file mode 100644 index 00000000000..a2deb1f7c4b --- /dev/null +++ b/x/icaoracle/keeper/msg_server_remove_oracle_test.go @@ -0,0 +1,51 @@ +package keeper_test + +import ( + "fmt" + + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +func (s *KeeperTestSuite) TestGovRemoveOracle() { + oracles := s.CreateTestOracles() + + oracleIndexToRemove := 1 + oracleToRemove := oracles[oracleIndexToRemove] + + // Add metrics to that oracle + for i := 0; i < 3; i++ { + metric := types.Metric{ + Key: fmt.Sprintf("key-%d", i), + Value: fmt.Sprintf("value-%d", i), + BlockHeight: s.Ctx.BlockHeight(), + UpdateTime: s.Ctx.BlockTime().Unix(), + DestinationOracle: oracleToRemove.ChainId, + Status: types.MetricStatus_QUEUED, + } + s.App.ICAOracleKeeper.SetMetric(s.Ctx, metric) + } + + // Remove the oracle thorugh goverance + _, err := s.GetMsgServer().RemoveOracle(s.Ctx, &types.MsgRemoveOracle{ + Authority: s.App.ICAOracleKeeper.GetAuthority(), + OracleChainId: oracleToRemove.ChainId, + }) + s.Require().NoError(err) + + // Confirm only one oracle was removed + remainingOracles := s.App.ICAOracleKeeper.GetAllOracles(s.Ctx) + s.Require().Len(remainingOracles, len(oracles)-1, "number of oracles after removal") + + // Confirm the other oracles are still there + for i, oracle := range oracles { + _, found := s.App.ICAOracleKeeper.GetOracle(s.Ctx, oracle.ChainId) + if i == oracleIndexToRemove { + s.Require().False(found, "oracle %s should have been removed", oracle.ChainId) + } else { + s.Require().True(found, "oracle %s should not have been removed", oracle.ChainId) + } + } + + // Confirm the metrics were removed + s.Require().Empty(s.App.ICAOracleKeeper.GetAllMetrics(s.Ctx), "all metrics removed") +} diff --git a/x/icaoracle/keeper/msg_server_restore_oracle_ica_test.go b/x/icaoracle/keeper/msg_server_restore_oracle_ica_test.go new file mode 100644 index 00000000000..255e038c3e3 --- /dev/null +++ b/x/icaoracle/keeper/msg_server_restore_oracle_ica_test.go @@ -0,0 +1,148 @@ +package keeper_test + +import ( + "fmt" + + connectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +type RestoreOracleICATestCase struct { + ValidMsg types.MsgRestoreOracleICA + Oracle types.Oracle +} + +func (s *KeeperTestSuite) SetupTestRestoreOracleICA() RestoreOracleICATestCase { + // Create oracle ICA channel + owner := types.FormatICAAccountOwner(HostChainId, types.ICAAccountType_Oracle) + channelId, portId := s.CreateICAChannel(owner) + + // Create oracle + oracle := types.Oracle{ + ChainId: HostChainId, + ConnectionId: ibctesting.FirstConnectionID, + ChannelId: channelId, + PortId: portId, + IcaAddress: "ica_address", + } + s.App.ICAOracleKeeper.SetOracle(s.Ctx, oracle) + + // Confirm the oracle was stored + _, found := s.App.ICAOracleKeeper.GetOracle(s.Ctx, HostChainId) + s.Require().True(found, "oracle should be in the store during setup") + + // Close the channel (to test the restore functionality) + s.UpdateChannelState(portId, channelId, channeltypes.CLOSED) + + return RestoreOracleICATestCase{ + ValidMsg: types.MsgRestoreOracleICA{OracleChainId: HostChainId}, + Oracle: oracle, + } +} + +func (s *KeeperTestSuite) TestRestoreOracleICA_Successful() { + tc := s.SetupTestRestoreOracleICA() + + // Confirm there are two channels originally + channels := s.App.IBCKeeper.ChannelKeeper.GetAllChannels(s.Ctx) + s.Require().Len(channels, 2, "there should be 2 channels initially (transfer + oracle)") + + // Submit the restore message + _, err := s.GetMsgServer().RestoreOracleICA(s.Ctx, &tc.ValidMsg) + s.Require().NoError(err, "no error expected when restoring an oracle ICA") + + // Confirm the new channel was created + channels = s.App.IBCKeeper.ChannelKeeper.GetAllChannels(s.Ctx) + s.Require().Len(channels, 3, "there should be 3 channels after restoring") + + // Confirm the new channel is in state INIT + newChannelActive := false + for _, channel := range channels { + // The new channel should have the same port, a new channel ID and be in state INIT + if channel.PortId == tc.Oracle.PortId && channel.ChannelId != tc.Oracle.ChannelId && channel.State == channeltypes.INIT { + newChannelActive = true + } + } + s.Require().True(newChannelActive, "a new channel should have been created") +} + +func (s *KeeperTestSuite) TestRestoreOracleICA_OracleDoesNotExist() { + tc := s.SetupTestRestoreOracleICA() + + // Submit the oracle with an invalid host zone, it should fail + invalidMsg := tc.ValidMsg + invalidMsg.OracleChainId = "fake_chain" + _, err := s.GetMsgServer().RestoreOracleICA(s.Ctx, &invalidMsg) + s.Require().ErrorContains(err, "oracle not found") +} + +func (s *KeeperTestSuite) TestRestoreOracleICA_IcaNotRegistered() { + tc := s.SetupTestRestoreOracleICA() + + // Update the oracle to appear as if the ICA was never registered in the first place + oracle := tc.Oracle + oracle.IcaAddress = "" + s.App.ICAOracleKeeper.SetOracle(s.Ctx, oracle) + + // Submit the restore message - it should fail + _, err := s.GetMsgServer().RestoreOracleICA(s.Ctx, &tc.ValidMsg) + s.Require().ErrorContains(err, fmt.Sprintf("the oracle (%s) has never had an registered ICA", HostChainId)) +} + +func (s *KeeperTestSuite) TestRestoreOracleICA_ConnectionDoesNotExist() { + tc := s.SetupTestRestoreOracleICA() + + // Update the oracle to to have a non-existent connection-id + oracle := tc.Oracle + oracle.ConnectionId = "fake_connection" + s.App.ICAOracleKeeper.SetOracle(s.Ctx, oracle) + + // Submit the rsetore message - it should fail + _, err := s.GetMsgServer().RestoreOracleICA(s.Ctx, &tc.ValidMsg) + s.Require().ErrorContains(err, "connection (fake_connection) not found") +} + +func (s *KeeperTestSuite) TestRestoreOracleICA_Failure_IcaDoesNotExist() { + tc := s.SetupTestRestoreOracleICA() + + // Add a new connection-id that is not tied to an ICA + differentConnectionId := "connection-2" + connection := connectiontypes.ConnectionEnd{} + s.App.IBCKeeper.ConnectionKeeper.SetConnection(s.Ctx, differentConnectionId, connection) + + // Update the oracle to have that connectionId + oracle := tc.Oracle + oracle.ConnectionId = differentConnectionId + s.App.ICAOracleKeeper.SetOracle(s.Ctx, oracle) + + // Submit the restore message - it should fail + _, err := s.GetMsgServer().RestoreOracleICA(s.Ctx, &tc.ValidMsg) + s.Require().ErrorContains(err, "cannot find ICA account for connection") +} + +func (s *KeeperTestSuite) TestRestoreOracleICA_Failure_ChannelOpen() { + tc := s.SetupTestRestoreOracleICA() + + // Open the channel back up + s.UpdateChannelState(tc.Oracle.PortId, tc.Oracle.ChannelId, channeltypes.OPEN) + + // Since the channel already OPEN, the restore should fail + _, err := s.GetMsgServer().RestoreOracleICA(s.Ctx, &tc.ValidMsg) + s.Require().ErrorContains(err, "channel already open") +} + +func (s *KeeperTestSuite) TestRestoreOracleICA_Failure_RegisterAccountFailure() { + tc := s.SetupTestRestoreOracleICA() + + // Change the channel status to INIT so that it's not OPEN or CLOSED + s.UpdateChannelState(tc.Oracle.PortId, tc.Oracle.ChannelId, channeltypes.INIT) + + // Disable middleware so the ICA registration fails + s.App.ICAControllerKeeper.SetMiddlewareDisabled(s.Ctx, tc.Oracle.PortId, tc.Oracle.ConnectionId) + + _, err := s.GetMsgServer().RestoreOracleICA(s.Ctx, &tc.ValidMsg) + s.Require().ErrorContains(err, "unable to register oracle interchain account") +} diff --git a/x/icaoracle/keeper/msg_server_toggle_oracle_test.go b/x/icaoracle/keeper/msg_server_toggle_oracle_test.go new file mode 100644 index 00000000000..150d856af0a --- /dev/null +++ b/x/icaoracle/keeper/msg_server_toggle_oracle_test.go @@ -0,0 +1,47 @@ +package keeper_test + +import ( + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +func (s *KeeperTestSuite) TestGovToggleOracle() { + oracles := s.CreateTestOracles() + + oracleIndexToToggle := 1 + oracleToToggle := oracles[oracleIndexToToggle] + + // Set the oracle to inactive + _, err := s.GetMsgServer().ToggleOracle(s.Ctx, &types.MsgToggleOracle{ + Authority: s.App.ICAOracleKeeper.GetAuthority(), + OracleChainId: oracleToToggle.ChainId, + Active: false, + }) + s.Require().NoError(err) + + // Confirm it's the only oracle inactive + for i, oracle := range s.App.ICAOracleKeeper.GetAllOracles(s.Ctx) { + _, found := s.App.ICAOracleKeeper.GetOracle(s.Ctx, oracle.ChainId) + s.Require().True(found, "oracle %s does not exist", oracle.ChainId) + + if i == oracleIndexToToggle { + s.Require().False(oracle.Active, "oracle %s should have been toggled to inactive", oracle.ChainId) + } else { + s.Require().True(oracle.Active, "oracle %s should still be active", oracle.ChainId) + } + } + + // Set it back to active + _, err = s.GetMsgServer().ToggleOracle(s.Ctx, &types.MsgToggleOracle{ + Authority: s.App.ICAOracleKeeper.GetAuthority(), + OracleChainId: oracleToToggle.ChainId, + Active: true, + }) + s.Require().NoError(err) + + // Confirm all oracles are active again + for _, oracle := range s.App.ICAOracleKeeper.GetAllOracles(s.Ctx) { + _, found := s.App.ICAOracleKeeper.GetOracle(s.Ctx, oracle.ChainId) + s.Require().True(found, "oracle %s does not exist", oracle.ChainId) + s.Require().True(oracle.Active, "oracle %s should still be active", oracle.ChainId) + } +} diff --git a/x/icaoracle/keeper/oracle.go b/x/icaoracle/keeper/oracle.go new file mode 100644 index 00000000000..dc44f31ecfa --- /dev/null +++ b/x/icaoracle/keeper/oracle.go @@ -0,0 +1,106 @@ +package keeper + +import ( + errorsmod "cosmossdk.io/errors" + "cosmossdk.io/store/prefix" + sdk "github.com/cosmos/cosmos-sdk/types" + + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +// Stores/updates an oracle object in the store +func (k Keeper) SetOracle(ctx sdk.Context, oracle types.Oracle) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.OracleKeyPrefix) + + oracleKey := types.KeyPrefix(oracle.ChainId) + oracleValue := k.cdc.MustMarshal(&oracle) + + store.Set(oracleKey, oracleValue) +} + +// Grabs and returns an oracle object from the store using the chain-id +func (k Keeper) GetOracle(ctx sdk.Context, chainId string) (oracle types.Oracle, found bool) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.OracleKeyPrefix) + + oracleKey := types.KeyPrefix(chainId) + oracleBz := store.Get(oracleKey) + + if len(oracleBz) == 0 { + return oracle, false + } + + k.cdc.MustUnmarshal(oracleBz, &oracle) + return oracle, true +} + +// Returns all oracles +func (k Keeper) GetAllOracles(ctx sdk.Context) []types.Oracle { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.OracleKeyPrefix) + + iterator := store.Iterator(nil, nil) + defer iterator.Close() + + allOracles := []types.Oracle{} + for ; iterator.Valid(); iterator.Next() { + + oracle := types.Oracle{} + k.cdc.MustUnmarshal(iterator.Value(), &oracle) + allOracles = append(allOracles, oracle) + } + + return allOracles +} + +// Removes an oracle from the store +func (k Keeper) RemoveOracle(ctx sdk.Context, chainId string) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.OracleKeyPrefix) + oracleKey := types.KeyPrefix(chainId) + store.Delete(oracleKey) +} + +// Toggle whether an oracle is active +func (k Keeper) ToggleOracle(ctx sdk.Context, chainId string, active bool) error { + oracle, found := k.GetOracle(ctx, chainId) + if !found { + return types.ErrOracleNotFound + } + + // If the oracle is being set to active, we need to first validate the ICA setup + if active { + if err := oracle.ValidateICASetup(); err != nil { + return err + } + if err := oracle.ValidateContractInstantiated(); err != nil { + return err + } + if !k.IsOracleICAChannelOpen(ctx, oracle) { + return errorsmod.Wrapf(types.ErrOracleICAChannelClosed, + "chain-id: %s, channel-id: %s", chainId, oracle.ChannelId) + } + } + + oracle.Active = active + k.SetOracle(ctx, oracle) + return nil +} + +// Grab's an oracle from it's connectionId +func (k Keeper) GetOracleFromConnectionId(ctx sdk.Context, connectionId string) (oracle types.Oracle, found bool) { + for _, oracle := range k.GetAllOracles(ctx) { + if oracle.ConnectionId == connectionId { + return oracle, true + } + } + return oracle, false +} + +// Checks if the oracle ICA channel is open +func (k Keeper) IsOracleICAChannelOpen(ctx sdk.Context, oracle types.Oracle) bool { + channel, found := k.ChannelKeeper.GetChannel(ctx, oracle.PortId, oracle.ChannelId) + if !found { + return false + } + return channel.State == channeltypes.OPEN +} diff --git a/x/icaoracle/keeper/oracle_test.go b/x/icaoracle/keeper/oracle_test.go new file mode 100644 index 00000000000..7f2e7a4f38b --- /dev/null +++ b/x/icaoracle/keeper/oracle_test.go @@ -0,0 +1,124 @@ +package keeper_test + +import ( + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +func (s *KeeperTestSuite) TestGetOracle() { + oracles := s.CreateTestOracles() + + expectedOracle := oracles[1] + + actualOracle, found := s.App.ICAOracleKeeper.GetOracle(s.Ctx, expectedOracle.ChainId) + s.Require().True(found, "oracle should have been found, but was not") + s.Require().Equal(expectedOracle, actualOracle) +} + +func (s *KeeperTestSuite) TestGetAllOracles() { + expectedOracles := s.CreateTestOracles() + actualOracles := s.App.ICAOracleKeeper.GetAllOracles(s.Ctx) + s.Require().Len(actualOracles, len(expectedOracles), "number of oracles") + s.Require().ElementsMatch(expectedOracles, actualOracles, "contents of oracles") +} + +func (s *KeeperTestSuite) TestRemoveOracle() { + oracles := s.CreateTestOracles() + + oracleToRemove := oracles[1] + + // Remove the oracle + s.App.ICAOracleKeeper.RemoveOracle(s.Ctx, oracleToRemove.ChainId) + _, found := s.App.ICAOracleKeeper.GetOracle(s.Ctx, oracleToRemove.ChainId) + s.Require().False(found, "the removed oracle should not have been found, but it was") +} + +func (s *KeeperTestSuite) TestToggleOracle() { + oracles := s.CreateTestOracles() + oracleToToggle := oracles[1] + + // Set the oracle to inactive + err := s.App.ICAOracleKeeper.ToggleOracle(s.Ctx, oracleToToggle.ChainId, false) + s.Require().NoError(err, "no error expected when toggling oracle") + + oracle, found := s.App.ICAOracleKeeper.GetOracle(s.Ctx, oracleToToggle.ChainId) + s.Require().True(found, "oracle should have been found, but was not") + s.Require().False(oracle.Active, "oracle should have been marked inactive") + + // Remove the oracle connection ID and then try to re-activate it, it should fail + invalidOracle := oracleToToggle + invalidOracle.ConnectionId = "" + s.App.ICAOracleKeeper.SetOracle(s.Ctx, invalidOracle) + + err = s.App.ICAOracleKeeper.ToggleOracle(s.Ctx, oracleToToggle.ChainId, true) + s.Require().ErrorContains(err, "oracle ICA channel has not been registered") + + // Remove the oracle contract address and try to re-activate it, it should fail + invalidOracle = oracleToToggle + invalidOracle.ContractAddress = "" + s.App.ICAOracleKeeper.SetOracle(s.Ctx, invalidOracle) + + err = s.App.ICAOracleKeeper.ToggleOracle(s.Ctx, oracleToToggle.ChainId, true) + s.Require().ErrorContains(err, "oracle not instantiated") + + // Reset the oracle with all fields present + s.App.ICAOracleKeeper.SetOracle(s.Ctx, oracleToToggle) + + // Close the ICA channel and try to re-active it, it should fail + s.UpdateChannelState(oracle.PortId, oracle.ChannelId, channeltypes.CLOSED) + + err = s.App.ICAOracleKeeper.ToggleOracle(s.Ctx, oracleToToggle.ChainId, true) + s.Require().ErrorContains(err, "oracle ICA channel is closed") + + // Re-open the channel and try once more - this time it should succeed + s.UpdateChannelState(oracle.PortId, oracle.ChannelId, channeltypes.OPEN) + + err = s.App.ICAOracleKeeper.ToggleOracle(s.Ctx, oracleToToggle.ChainId, true) + s.Require().NoError(err, "no error expected when toggling oracle") + + oracle, found = s.App.ICAOracleKeeper.GetOracle(s.Ctx, oracleToToggle.ChainId) + s.Require().True(found, "oracle should have been found, but was not") + s.Require().True(oracle.Active, "oracle should have been marked as active") +} + +func (s *KeeperTestSuite) TestGetOracleFromConnectionId() { + oracles := s.CreateTestOracles() + + // Get oracle using connection Id + expectedOracle := oracles[1] + actualOracle, found := s.App.ICAOracleKeeper.GetOracleFromConnectionId(s.Ctx, expectedOracle.ConnectionId) + s.Require().True(found, "oracle should have been found, but was not") + s.Require().Equal(expectedOracle, actualOracle) + + // Attempt to get an oracle with a fake connectionId - should fail + _, found = s.App.ICAOracleKeeper.GetOracleFromConnectionId(s.Ctx, "fake-connection-id") + s.Require().False(found, "oracle should not have been found, but it was") +} + +func (s *KeeperTestSuite) TestIsOracleICAChannelOpen() { + s.CreateTransferChannel("chain-1") + + oracle := types.Oracle{ + PortId: transfertypes.PortID, + ChannelId: ibctesting.FirstChannelID, + } + + // Check with an open channel, should equal true + isOpen := s.App.ICAOracleKeeper.IsOracleICAChannelOpen(s.Ctx, oracle) + s.Require().True(isOpen, "channel should be open") + + // Close the channel + s.UpdateChannelState(transfertypes.PortID, ibctesting.FirstChannelID, channeltypes.CLOSED) + + // Try again, it should be false this time + isOpen = s.App.ICAOracleKeeper.IsOracleICAChannelOpen(s.Ctx, oracle) + s.Require().False(isOpen, "channel should now be closed") + + // Try with a fake channel + oracle.ChannelId = "fake_channel" + isOpen = s.App.ICAOracleKeeper.IsOracleICAChannelOpen(s.Ctx, oracle) + s.Require().False(isOpen, "channel does not exist") +} diff --git a/x/icaoracle/module.go b/x/icaoracle/module.go new file mode 100644 index 00000000000..ec31ff9d23a --- /dev/null +++ b/x/icaoracle/module.go @@ -0,0 +1,162 @@ +package icaoracle + +import ( + "context" + "encoding/json" + "fmt" + + "cosmossdk.io/core/appmodule" + "github.com/gorilla/mux" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/client/cli" + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/keeper" + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +var ( + _ module.AppModuleBasic = AppModuleBasic{} + _ module.HasGenesisBasics = AppModuleBasic{} + + _ appmodule.AppModule = AppModule{} + _ appmodule.HasEndBlocker = AppModule{} + + _ module.HasConsensusVersion = AppModule{} + _ module.HasGenesis = AppModule{} + _ module.HasServices = AppModule{} +) + +// ---------------------------------------------------------------------------- +// AppModuleBasic +// ---------------------------------------------------------------------------- + +// AppModuleBasic implements the AppModuleBasic interface for the capability module. +type AppModuleBasic struct { + cdc codec.BinaryCodec +} + +func NewAppModuleBasic(cdc codec.BinaryCodec) AppModuleBasic { + return AppModuleBasic{cdc: cdc} +} + +// Name returns the capability module's name. +func (AppModuleBasic) Name() string { + return types.ModuleName +} + +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + types.RegisterLegacyAminoCodec(cdc) +} + +// RegisterInterfaces registers the module's interface types +func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { + types.RegisterInterfaces(reg) +} + +// DefaultGenesis returns the capability module's default genesis state. +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return cdc.MustMarshalJSON(types.DefaultGenesis()) +} + +// ValidateGenesis performs genesis state validation for the capability module. +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { + var genState types.GenesisState + if err := cdc.UnmarshalJSON(bz, &genState); err != nil { + return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) + } + return genState.Validate() +} + +// RegisterRESTRoutes registers the capability module's REST service handlers. +func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Router) { +} + +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { + if err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)); err != nil { + panic(err) + } +} + +// GetTxCmd returns the capability module's root tx command. +func (a AppModuleBasic) GetTxCmd() *cobra.Command { + return cli.GetTxCmd() +} + +// GetQueryCmd returns the capability module's root query command. +func (AppModuleBasic) GetQueryCmd() *cobra.Command { + return cli.GetQueryCmd() +} + +// ---------------------------------------------------------------------------- +// AppModule +// ---------------------------------------------------------------------------- + +// AppModule implements the AppModule interface for the capability module. +type AppModule struct { + AppModuleBasic + + keeper keeper.Keeper +} + +func NewAppModule( + cdc codec.Codec, + keeper keeper.Keeper, +) AppModule { + return AppModule{ + AppModuleBasic: NewAppModuleBasic(cdc), + keeper: keeper, + } +} + +// Name returns the capability module's name. +func (am AppModule) Name() string { + return am.AppModuleBasic.Name() +} + +// RegisterServices registers a GRPC query service to respond to the +// module-specific GRPC queries. +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterQueryServer(cfg.QueryServer(), am.keeper) + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) +} + +// RegisterInvariants registers the capability module's invariants. +func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} + +// InitGenesis performs the capability module's genesis initialization +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) { + var genState types.GenesisState + cdc.MustUnmarshalJSON(gs, &genState) + am.keeper.InitGenesis(ctx, genState) +} + +// ExportGenesis returns the capability module's exported genesis state as raw JSON bytes. +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + genState := am.keeper.ExportGenesis(ctx) + return cdc.MustMarshalJSON(genState) +} + +// ConsensusVersion implements ConsensusVersion. +func (AppModule) ConsensusVersion() uint64 { return 1 } + +// EndBlock executes all ABCI EndBlock logic respective to the capability module. It +// returns no validator updates. +func (am AppModule) EndBlock(context context.Context) error { + ctx := sdk.UnwrapSDKContext(context) + am.keeper.EndBlocker(ctx) + return nil +} + +// IsOnePerModuleType implements the depinject.OnePerModuleType interface. +func (am AppModule) IsOnePerModuleType() {} + +// IsAppModule implements the appmodule.AppModule interface. +func (am AppModule) IsAppModule() {} diff --git a/x/icaoracle/types/callbacks.pb.go b/x/icaoracle/types/callbacks.pb.go new file mode 100644 index 00000000000..de452fb2e24 --- /dev/null +++ b/x/icaoracle/types/callbacks.pb.go @@ -0,0 +1,551 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/icaoracle/callbacks.proto + +package types + +import ( + fmt "fmt" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// Callback data for instantiating an oracle +type InstantiateOracleCallback struct { + OracleChainId string `protobuf:"bytes,1,opt,name=oracle_chain_id,json=oracleChainId,proto3" json:"oracle_chain_id,omitempty"` +} + +func (m *InstantiateOracleCallback) Reset() { *m = InstantiateOracleCallback{} } +func (m *InstantiateOracleCallback) String() string { return proto.CompactTextString(m) } +func (*InstantiateOracleCallback) ProtoMessage() {} +func (*InstantiateOracleCallback) Descriptor() ([]byte, []int) { + return fileDescriptor_7b4c39df2554f0a2, []int{0} +} +func (m *InstantiateOracleCallback) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *InstantiateOracleCallback) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_InstantiateOracleCallback.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *InstantiateOracleCallback) XXX_Merge(src proto.Message) { + xxx_messageInfo_InstantiateOracleCallback.Merge(m, src) +} +func (m *InstantiateOracleCallback) XXX_Size() int { + return m.Size() +} +func (m *InstantiateOracleCallback) XXX_DiscardUnknown() { + xxx_messageInfo_InstantiateOracleCallback.DiscardUnknown(m) +} + +var xxx_messageInfo_InstantiateOracleCallback proto.InternalMessageInfo + +func (m *InstantiateOracleCallback) GetOracleChainId() string { + if m != nil { + return m.OracleChainId + } + return "" +} + +// Callback data for updating a value in the oracle +type UpdateOracleCallback struct { + OracleChainId string `protobuf:"bytes,1,opt,name=oracle_chain_id,json=oracleChainId,proto3" json:"oracle_chain_id,omitempty"` + Metric *Metric `protobuf:"bytes,2,opt,name=metric,proto3" json:"metric,omitempty"` +} + +func (m *UpdateOracleCallback) Reset() { *m = UpdateOracleCallback{} } +func (m *UpdateOracleCallback) String() string { return proto.CompactTextString(m) } +func (*UpdateOracleCallback) ProtoMessage() {} +func (*UpdateOracleCallback) Descriptor() ([]byte, []int) { + return fileDescriptor_7b4c39df2554f0a2, []int{1} +} +func (m *UpdateOracleCallback) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *UpdateOracleCallback) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_UpdateOracleCallback.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *UpdateOracleCallback) XXX_Merge(src proto.Message) { + xxx_messageInfo_UpdateOracleCallback.Merge(m, src) +} +func (m *UpdateOracleCallback) XXX_Size() int { + return m.Size() +} +func (m *UpdateOracleCallback) XXX_DiscardUnknown() { + xxx_messageInfo_UpdateOracleCallback.DiscardUnknown(m) +} + +var xxx_messageInfo_UpdateOracleCallback proto.InternalMessageInfo + +func (m *UpdateOracleCallback) GetOracleChainId() string { + if m != nil { + return m.OracleChainId + } + return "" +} + +func (m *UpdateOracleCallback) GetMetric() *Metric { + if m != nil { + return m.Metric + } + return nil +} + +func init() { + proto.RegisterType((*InstantiateOracleCallback)(nil), "stride.icaoracle.InstantiateOracleCallback") + proto.RegisterType((*UpdateOracleCallback)(nil), "stride.icaoracle.UpdateOracleCallback") +} + +func init() { proto.RegisterFile("stride/icaoracle/callbacks.proto", fileDescriptor_7b4c39df2554f0a2) } + +var fileDescriptor_7b4c39df2554f0a2 = []byte{ + // 230 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x28, 0x2e, 0x29, 0xca, + 0x4c, 0x49, 0xd5, 0xcf, 0x4c, 0x4e, 0xcc, 0x2f, 0x4a, 0x4c, 0xce, 0x49, 0xd5, 0x4f, 0x4e, 0xcc, + 0xc9, 0x49, 0x4a, 0x4c, 0xce, 0x2e, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x80, 0xa8, + 0xd0, 0x83, 0xab, 0x90, 0xc2, 0xd4, 0x03, 0x67, 0x41, 0xf4, 0x28, 0x39, 0x73, 0x49, 0x7a, 0xe6, + 0x15, 0x97, 0x24, 0xe6, 0x95, 0x64, 0x26, 0x96, 0xa4, 0xfa, 0x83, 0xa5, 0x9c, 0xa1, 0xe6, 0x0a, + 0xa9, 0x71, 0xf1, 0x43, 0x14, 0xc7, 0x27, 0x67, 0x24, 0x66, 0xe6, 0xc5, 0x67, 0xa6, 0x48, 0x30, + 0x2a, 0x30, 0x6a, 0x70, 0x06, 0xf1, 0x42, 0x84, 0x9d, 0x41, 0xa2, 0x9e, 0x29, 0x4a, 0x05, 0x5c, + 0x22, 0xa1, 0x05, 0x29, 0x64, 0xeb, 0x17, 0x32, 0xe0, 0x62, 0xcb, 0x4d, 0x2d, 0x29, 0xca, 0x4c, + 0x96, 0x60, 0x52, 0x60, 0xd4, 0xe0, 0x36, 0x92, 0xd0, 0x43, 0xf7, 0x89, 0x9e, 0x2f, 0x58, 0x3e, + 0x08, 0xaa, 0xce, 0xc9, 0xf7, 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, 0x18, 0x1f, 0x3c, 0x92, + 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0xe1, 0xc2, 0x63, 0x39, 0x86, 0x1b, 0x8f, 0xe5, 0x18, 0xa2, 0x8c, + 0xd3, 0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0x83, 0xc1, 0xa6, 0xe8, 0xfa, + 0x24, 0x26, 0x15, 0xeb, 0x43, 0x43, 0xa2, 0xcc, 0xc8, 0x42, 0xbf, 0x02, 0x29, 0x3c, 0x4a, 0x2a, + 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0x81, 0x61, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x96, 0x2a, + 0x9d, 0x80, 0x64, 0x01, 0x00, 0x00, +} + +func (m *InstantiateOracleCallback) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *InstantiateOracleCallback) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *InstantiateOracleCallback) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.OracleChainId) > 0 { + i -= len(m.OracleChainId) + copy(dAtA[i:], m.OracleChainId) + i = encodeVarintCallbacks(dAtA, i, uint64(len(m.OracleChainId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *UpdateOracleCallback) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *UpdateOracleCallback) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *UpdateOracleCallback) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Metric != nil { + { + size, err := m.Metric.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCallbacks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.OracleChainId) > 0 { + i -= len(m.OracleChainId) + copy(dAtA[i:], m.OracleChainId) + i = encodeVarintCallbacks(dAtA, i, uint64(len(m.OracleChainId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintCallbacks(dAtA []byte, offset int, v uint64) int { + offset -= sovCallbacks(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *InstantiateOracleCallback) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.OracleChainId) + if l > 0 { + n += 1 + l + sovCallbacks(uint64(l)) + } + return n +} + +func (m *UpdateOracleCallback) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.OracleChainId) + if l > 0 { + n += 1 + l + sovCallbacks(uint64(l)) + } + if m.Metric != nil { + l = m.Metric.Size() + n += 1 + l + sovCallbacks(uint64(l)) + } + return n +} + +func sovCallbacks(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozCallbacks(x uint64) (n int) { + return sovCallbacks(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *InstantiateOracleCallback) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: InstantiateOracleCallback: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: InstantiateOracleCallback: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OracleChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OracleChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCallbacks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbacks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *UpdateOracleCallback) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: UpdateOracleCallback: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UpdateOracleCallback: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OracleChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OracleChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metric", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Metric == nil { + m.Metric = &Metric{} + } + if err := m.Metric.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCallbacks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbacks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipCallbacks(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowCallbacks + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowCallbacks + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowCallbacks + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthCallbacks + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupCallbacks + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthCallbacks + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthCallbacks = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowCallbacks = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupCallbacks = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/icaoracle/types/codec.go b/x/icaoracle/types/codec.go new file mode 100644 index 00000000000..5c9fa8cc93e --- /dev/null +++ b/x/icaoracle/types/codec.go @@ -0,0 +1,29 @@ +package types + +import ( + "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/codec/legacy" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" +) + +func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + legacy.RegisterAminoMsg(cdc, &MsgAddOracle{}, "icaoracle/MsgAddOracle") + legacy.RegisterAminoMsg(cdc, &MsgInstantiateOracle{}, "icaoracle/MsgInstantiateOracle") + legacy.RegisterAminoMsg(cdc, &MsgRestoreOracleICA{}, "icaoracle/MsgRestoreOracleICA") + legacy.RegisterAminoMsg(cdc, &MsgToggleOracle{}, "icaoracle/MsgToggleOracle") + legacy.RegisterAminoMsg(cdc, &MsgRemoveOracle{}, "icaoracle/MsgRemoveOracle") +} + +func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { + registry.RegisterImplementations((*sdk.Msg)(nil), + &MsgAddOracle{}, + &MsgInstantiateOracle{}, + &MsgRestoreOracleICA{}, + &MsgToggleOracle{}, + &MsgRemoveOracle{}, + ) + + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) +} diff --git a/x/icaoracle/types/contract.go b/x/icaoracle/types/contract.go new file mode 100644 index 00000000000..0cd62991153 --- /dev/null +++ b/x/icaoracle/types/contract.go @@ -0,0 +1,19 @@ +package types + +import ( + "encoding/base64" +) + +// Creates a new PostMetric contract message from a Metric +func NewMsgExecuteContractPostMetric(metric Metric) MsgExecuteContractPostMetric { + return MsgExecuteContractPostMetric{ + PostMetric: &MsgPostMetric{ + Key: metric.Key, + Value: metric.Value, + MetricType: metric.MetricType, + UpdateTime: metric.UpdateTime, + BlockHeight: metric.BlockHeight, + Attributes: base64.StdEncoding.EncodeToString([]byte(metric.Attributes)), + }, + } +} diff --git a/x/icaoracle/types/contract.pb.go b/x/icaoracle/types/contract.pb.go new file mode 100644 index 00000000000..aa672c7b353 --- /dev/null +++ b/x/icaoracle/types/contract.pb.go @@ -0,0 +1,954 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/icaoracle/contract.proto + +package types + +import ( + fmt "fmt" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// InstanitateOracleContract is the contract-specific instantiate message +type MsgInstantiateOracleContract struct { + AdminAddress string `protobuf:"bytes,1,opt,name=admin_address,json=adminAddress,proto3" json:"admin_address,omitempty"` + TransferChannelId string `protobuf:"bytes,2,opt,name=transfer_channel_id,json=transferChannelId,proto3" json:"transfer_channel_id,omitempty"` +} + +func (m *MsgInstantiateOracleContract) Reset() { *m = MsgInstantiateOracleContract{} } +func (m *MsgInstantiateOracleContract) String() string { return proto.CompactTextString(m) } +func (*MsgInstantiateOracleContract) ProtoMessage() {} +func (*MsgInstantiateOracleContract) Descriptor() ([]byte, []int) { + return fileDescriptor_8bf036e49b48ee03, []int{0} +} +func (m *MsgInstantiateOracleContract) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgInstantiateOracleContract) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgInstantiateOracleContract.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgInstantiateOracleContract) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgInstantiateOracleContract.Merge(m, src) +} +func (m *MsgInstantiateOracleContract) XXX_Size() int { + return m.Size() +} +func (m *MsgInstantiateOracleContract) XXX_DiscardUnknown() { + xxx_messageInfo_MsgInstantiateOracleContract.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgInstantiateOracleContract proto.InternalMessageInfo + +func (m *MsgInstantiateOracleContract) GetAdminAddress() string { + if m != nil { + return m.AdminAddress + } + return "" +} + +func (m *MsgInstantiateOracleContract) GetTransferChannelId() string { + if m != nil { + return m.TransferChannelId + } + return "" +} + +// ExecuteContractPostMetric is the contract-specific metric update message +type MsgExecuteContractPostMetric struct { + PostMetric *MsgPostMetric `protobuf:"bytes,1,opt,name=post_metric,json=postMetric,proto3" json:"post_metric,omitempty"` +} + +func (m *MsgExecuteContractPostMetric) Reset() { *m = MsgExecuteContractPostMetric{} } +func (m *MsgExecuteContractPostMetric) String() string { return proto.CompactTextString(m) } +func (*MsgExecuteContractPostMetric) ProtoMessage() {} +func (*MsgExecuteContractPostMetric) Descriptor() ([]byte, []int) { + return fileDescriptor_8bf036e49b48ee03, []int{1} +} +func (m *MsgExecuteContractPostMetric) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgExecuteContractPostMetric) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgExecuteContractPostMetric.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgExecuteContractPostMetric) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgExecuteContractPostMetric.Merge(m, src) +} +func (m *MsgExecuteContractPostMetric) XXX_Size() int { + return m.Size() +} +func (m *MsgExecuteContractPostMetric) XXX_DiscardUnknown() { + xxx_messageInfo_MsgExecuteContractPostMetric.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgExecuteContractPostMetric proto.InternalMessageInfo + +func (m *MsgExecuteContractPostMetric) GetPostMetric() *MsgPostMetric { + if m != nil { + return m.PostMetric + } + return nil +} + +// Body of PostMetric contract message +type MsgPostMetric struct { + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + MetricType string `protobuf:"bytes,3,opt,name=metric_type,json=metricType,proto3" json:"metric_type,omitempty"` + UpdateTime int64 `protobuf:"varint,4,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` + BlockHeight int64 `protobuf:"varint,5,opt,name=block_height,json=blockHeight,proto3" json:"block_height,omitempty"` + Attributes string `protobuf:"bytes,6,opt,name=attributes,proto3" json:"attributes,omitempty"` +} + +func (m *MsgPostMetric) Reset() { *m = MsgPostMetric{} } +func (m *MsgPostMetric) String() string { return proto.CompactTextString(m) } +func (*MsgPostMetric) ProtoMessage() {} +func (*MsgPostMetric) Descriptor() ([]byte, []int) { + return fileDescriptor_8bf036e49b48ee03, []int{2} +} +func (m *MsgPostMetric) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgPostMetric) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgPostMetric.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgPostMetric) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgPostMetric.Merge(m, src) +} +func (m *MsgPostMetric) XXX_Size() int { + return m.Size() +} +func (m *MsgPostMetric) XXX_DiscardUnknown() { + xxx_messageInfo_MsgPostMetric.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgPostMetric proto.InternalMessageInfo + +func (m *MsgPostMetric) GetKey() string { + if m != nil { + return m.Key + } + return "" +} + +func (m *MsgPostMetric) GetValue() string { + if m != nil { + return m.Value + } + return "" +} + +func (m *MsgPostMetric) GetMetricType() string { + if m != nil { + return m.MetricType + } + return "" +} + +func (m *MsgPostMetric) GetUpdateTime() int64 { + if m != nil { + return m.UpdateTime + } + return 0 +} + +func (m *MsgPostMetric) GetBlockHeight() int64 { + if m != nil { + return m.BlockHeight + } + return 0 +} + +func (m *MsgPostMetric) GetAttributes() string { + if m != nil { + return m.Attributes + } + return "" +} + +func init() { + proto.RegisterType((*MsgInstantiateOracleContract)(nil), "stride.icaoracle.MsgInstantiateOracleContract") + proto.RegisterType((*MsgExecuteContractPostMetric)(nil), "stride.icaoracle.MsgExecuteContractPostMetric") + proto.RegisterType((*MsgPostMetric)(nil), "stride.icaoracle.MsgPostMetric") +} + +func init() { proto.RegisterFile("stride/icaoracle/contract.proto", fileDescriptor_8bf036e49b48ee03) } + +var fileDescriptor_8bf036e49b48ee03 = []byte{ + // 375 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0x91, 0xc1, 0xce, 0xd2, 0x40, + 0x10, 0xc7, 0xa9, 0x08, 0x89, 0x5b, 0x48, 0x70, 0xf5, 0xd0, 0x83, 0x29, 0x88, 0x17, 0x2e, 0xb6, + 0x09, 0x5c, 0x3c, 0xaa, 0xc4, 0x44, 0x12, 0x1b, 0x0d, 0x72, 0xf2, 0x52, 0xb7, 0xdb, 0xb1, 0xdd, + 0xd0, 0x76, 0x9b, 0xdd, 0x29, 0x81, 0xb7, 0xf0, 0x81, 0x7c, 0x00, 0x8f, 0x1c, 0x3d, 0x1a, 0x78, + 0x11, 0xc3, 0x6e, 0x85, 0xef, 0xfb, 0x6e, 0x33, 0xbf, 0xff, 0x7f, 0xf2, 0x9f, 0xdd, 0x21, 0x63, + 0x8d, 0x4a, 0xa4, 0x10, 0x0a, 0xce, 0xa4, 0x62, 0xbc, 0x80, 0x90, 0xcb, 0x0a, 0x15, 0xe3, 0x18, + 0xd4, 0x4a, 0xa2, 0xa4, 0x23, 0x6b, 0x08, 0xae, 0x86, 0xa9, 0x26, 0x2f, 0x22, 0x9d, 0xad, 0x2a, + 0x8d, 0xac, 0x42, 0xc1, 0x10, 0x3e, 0x1b, 0xbe, 0x6c, 0xe7, 0xe8, 0x2b, 0x32, 0x64, 0x69, 0x29, + 0xaa, 0x98, 0xa5, 0xa9, 0x02, 0xad, 0x3d, 0x67, 0xe2, 0xcc, 0x9e, 0xac, 0x07, 0x06, 0xbe, 0xb3, + 0x8c, 0x06, 0xe4, 0x19, 0x2a, 0x56, 0xe9, 0x1f, 0xa0, 0x62, 0x9e, 0xb3, 0xaa, 0x82, 0x22, 0x16, + 0xa9, 0xf7, 0xc8, 0x58, 0x9f, 0xfe, 0x97, 0x96, 0x56, 0x59, 0xa5, 0xd3, 0xef, 0x26, 0xf4, 0xc3, + 0x1e, 0x78, 0x83, 0xd7, 0xa8, 0x2f, 0x52, 0x63, 0x04, 0xa8, 0x04, 0xa7, 0x6f, 0x89, 0x5b, 0x4b, + 0x8d, 0x71, 0x69, 0x5a, 0x13, 0xe9, 0xce, 0xc7, 0xc1, 0xc3, 0xe5, 0x83, 0x48, 0x67, 0xb7, 0xa9, + 0x35, 0xa9, 0xaf, 0xf5, 0xf4, 0x97, 0x43, 0x86, 0xf7, 0x54, 0x3a, 0x22, 0xdd, 0x2d, 0x1c, 0xda, + 0xf5, 0x2f, 0x25, 0x7d, 0x4e, 0x7a, 0x3b, 0x56, 0x34, 0xd0, 0xee, 0x69, 0x1b, 0x3a, 0x26, 0xae, + 0x8d, 0x8d, 0xf1, 0x50, 0x83, 0xd7, 0x35, 0x1a, 0xb1, 0x68, 0x73, 0xa8, 0x8d, 0xa1, 0xa9, 0x53, + 0x86, 0x10, 0xa3, 0x28, 0xc1, 0x7b, 0x3c, 0x71, 0x66, 0xdd, 0x35, 0xb1, 0x68, 0x23, 0x4a, 0xa0, + 0x2f, 0xc9, 0x20, 0x29, 0x24, 0xdf, 0xc6, 0x39, 0x88, 0x2c, 0x47, 0xaf, 0x67, 0x1c, 0xae, 0x61, + 0x1f, 0x0d, 0xa2, 0x3e, 0x21, 0x0c, 0x51, 0x89, 0xa4, 0x41, 0xd0, 0x5e, 0xdf, 0x66, 0xdc, 0xc8, + 0xfb, 0xe8, 0xf7, 0xc9, 0x77, 0x8e, 0x27, 0xdf, 0xf9, 0x7b, 0xf2, 0x9d, 0x9f, 0x67, 0xbf, 0x73, + 0x3c, 0xfb, 0x9d, 0x3f, 0x67, 0xbf, 0xf3, 0x6d, 0x91, 0x09, 0xcc, 0x9b, 0x24, 0xe0, 0xb2, 0x0c, + 0xbf, 0x9a, 0xff, 0x78, 0xfd, 0x89, 0x25, 0x3a, 0x6c, 0x2f, 0xbf, 0x9b, 0xbf, 0x09, 0xf7, 0x77, + 0xee, 0x7f, 0x79, 0x83, 0x4e, 0xfa, 0xe6, 0xfa, 0x8b, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x3f, + 0x13, 0x78, 0x77, 0x20, 0x02, 0x00, 0x00, +} + +func (m *MsgInstantiateOracleContract) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgInstantiateOracleContract) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgInstantiateOracleContract) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TransferChannelId) > 0 { + i -= len(m.TransferChannelId) + copy(dAtA[i:], m.TransferChannelId) + i = encodeVarintContract(dAtA, i, uint64(len(m.TransferChannelId))) + i-- + dAtA[i] = 0x12 + } + if len(m.AdminAddress) > 0 { + i -= len(m.AdminAddress) + copy(dAtA[i:], m.AdminAddress) + i = encodeVarintContract(dAtA, i, uint64(len(m.AdminAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgExecuteContractPostMetric) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgExecuteContractPostMetric) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgExecuteContractPostMetric) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.PostMetric != nil { + { + size, err := m.PostMetric.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintContract(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgPostMetric) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgPostMetric) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgPostMetric) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Attributes) > 0 { + i -= len(m.Attributes) + copy(dAtA[i:], m.Attributes) + i = encodeVarintContract(dAtA, i, uint64(len(m.Attributes))) + i-- + dAtA[i] = 0x32 + } + if m.BlockHeight != 0 { + i = encodeVarintContract(dAtA, i, uint64(m.BlockHeight)) + i-- + dAtA[i] = 0x28 + } + if m.UpdateTime != 0 { + i = encodeVarintContract(dAtA, i, uint64(m.UpdateTime)) + i-- + dAtA[i] = 0x20 + } + if len(m.MetricType) > 0 { + i -= len(m.MetricType) + copy(dAtA[i:], m.MetricType) + i = encodeVarintContract(dAtA, i, uint64(len(m.MetricType))) + i-- + dAtA[i] = 0x1a + } + if len(m.Value) > 0 { + i -= len(m.Value) + copy(dAtA[i:], m.Value) + i = encodeVarintContract(dAtA, i, uint64(len(m.Value))) + i-- + dAtA[i] = 0x12 + } + if len(m.Key) > 0 { + i -= len(m.Key) + copy(dAtA[i:], m.Key) + i = encodeVarintContract(dAtA, i, uint64(len(m.Key))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintContract(dAtA []byte, offset int, v uint64) int { + offset -= sovContract(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MsgInstantiateOracleContract) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.AdminAddress) + if l > 0 { + n += 1 + l + sovContract(uint64(l)) + } + l = len(m.TransferChannelId) + if l > 0 { + n += 1 + l + sovContract(uint64(l)) + } + return n +} + +func (m *MsgExecuteContractPostMetric) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PostMetric != nil { + l = m.PostMetric.Size() + n += 1 + l + sovContract(uint64(l)) + } + return n +} + +func (m *MsgPostMetric) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Key) + if l > 0 { + n += 1 + l + sovContract(uint64(l)) + } + l = len(m.Value) + if l > 0 { + n += 1 + l + sovContract(uint64(l)) + } + l = len(m.MetricType) + if l > 0 { + n += 1 + l + sovContract(uint64(l)) + } + if m.UpdateTime != 0 { + n += 1 + sovContract(uint64(m.UpdateTime)) + } + if m.BlockHeight != 0 { + n += 1 + sovContract(uint64(m.BlockHeight)) + } + l = len(m.Attributes) + if l > 0 { + n += 1 + l + sovContract(uint64(l)) + } + return n +} + +func sovContract(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozContract(x uint64) (n int) { + return sovContract(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MsgInstantiateOracleContract) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowContract + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgInstantiateOracleContract: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgInstantiateOracleContract: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AdminAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowContract + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthContract + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthContract + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AdminAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TransferChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowContract + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthContract + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthContract + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TransferChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipContract(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthContract + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgExecuteContractPostMetric) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowContract + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgExecuteContractPostMetric: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgExecuteContractPostMetric: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PostMetric", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowContract + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthContract + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthContract + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.PostMetric == nil { + m.PostMetric = &MsgPostMetric{} + } + if err := m.PostMetric.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipContract(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthContract + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgPostMetric) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowContract + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgPostMetric: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgPostMetric: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowContract + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthContract + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthContract + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Key = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowContract + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthContract + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthContract + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Value = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MetricType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowContract + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthContract + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthContract + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MetricType = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UpdateTime", wireType) + } + m.UpdateTime = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowContract + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.UpdateTime |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field BlockHeight", wireType) + } + m.BlockHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowContract + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.BlockHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Attributes", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowContract + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthContract + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthContract + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Attributes = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipContract(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthContract + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipContract(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowContract + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowContract + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowContract + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthContract + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupContract + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthContract + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthContract = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowContract = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupContract = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/icaoracle/types/errors.go b/x/icaoracle/types/errors.go new file mode 100644 index 00000000000..26ae4875902 --- /dev/null +++ b/x/icaoracle/types/errors.go @@ -0,0 +1,23 @@ +package types + +import ( + errorsmod "cosmossdk.io/errors" +) + +var ( + ErrOracleNotFound = errorsmod.Register(ModuleName, 1, "oracle not found") + ErrClientStateNotTendermint = errorsmod.Register(ModuleName, 2, "client state is not tendermint") + ErrHostConnectionNotFound = errorsmod.Register(ModuleName, 3, "host connection not found") + ErrOracleAlreadyExists = errorsmod.Register(ModuleName, 4, "oracle already exists") + ErrOracleNotInstantiated = errorsmod.Register(ModuleName, 5, "oracle not instantiated") + ErrOracleAlreadyInstantiated = errorsmod.Register(ModuleName, 6, "oracle already instantiated") + ErrOracleICANotRegistered = errorsmod.Register(ModuleName, 7, "oracle ICA channel has not been registered") + ErrOracleICAChannelClosed = errorsmod.Register(ModuleName, 8, "oracle ICA channel is closed") + ErrOracleInactive = errorsmod.Register(ModuleName, 9, "oracle is inactive") + ErrInvalidICARequest = errorsmod.Register(ModuleName, 10, "invalid ICA request") + ErrInvalidICAResponse = errorsmod.Register(ModuleName, 11, "invalid ICA response") + ErrInvalidCallback = errorsmod.Register(ModuleName, 12, "invalid callback data") + ErrICAAccountDoesNotExist = errorsmod.Register(ModuleName, 13, "ICA account does not exist") + ErrInvalidGenesisState = errorsmod.Register(ModuleName, 14, "Invalid genesis state") + ErrUnableToRestoreICAChannel = errorsmod.Register(ModuleName, 15, "unable to restore oracle ICA channel") +) diff --git a/x/icaoracle/types/events.go b/x/icaoracle/types/events.go new file mode 100644 index 00000000000..2c6fae11309 --- /dev/null +++ b/x/icaoracle/types/events.go @@ -0,0 +1,15 @@ +package types + +const ( + EventTypeUpdateOracle = "update_oracle" + EventTypeUpdateOracleAck = "update_oracle_ack" + + AttributeKeyOracleChainId = "oracle_chain_id" + AttributeKeyMetricID = "metric_id" + AttributeKeyMetricKey = "metric_key" + AttributeKeyMetricValue = "metric_value" + AttributeKeyMetricType = "metric_type" + AttributeKeyMetricUpdateTime = "metric_update_time" + AttributeKeyMetricBlockHeight = "metric_block_height" + AttributeKeyMetricAckStatus = "metric_ack_status" +) diff --git a/x/icaoracle/types/expected_keepers.go b/x/icaoracle/types/expected_keepers.go new file mode 100644 index 00000000000..e5dcc9fbd08 --- /dev/null +++ b/x/icaoracle/types/expected_keepers.go @@ -0,0 +1,56 @@ +package types + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + connectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + "github.com/cosmos/ibc-go/v8/modules/core/exported" + ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" + + icacallbackstypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" +) + +// ClientKeeper defines the expected IBC client keeper +type ClientKeeper interface { + GetClientState(ctx sdk.Context, clientID string) (exported.ClientState, bool) +} + +// ConnectionKeeper defines the expected IBC connection keeper +type ConnectionKeeper interface { + GetConnection(ctx sdk.Context, connectionID string) (connectiontypes.ConnectionEnd, bool) +} + +// ChannelKeeper defines the expected IBC channel keeper +type ChannelKeeper interface { + GetChannel(ctx sdk.Context, portID, channelID string) (channeltypes.Channel, bool) + GetChannelConnection(ctx sdk.Context, portID, channelID string) (string, exported.ConnectionI, error) +} + +// ICAControllerKeeper defines the expected ICA controller keeper +type ICAControllerKeeper interface { + GetInterchainAccountAddress(ctx sdk.Context, connectionID, portID string) (string, bool) + GetOpenActiveChannel(ctx sdk.Context, connectionID, portID string) (string, bool) + RegisterInterchainAccountWithOrdering(ctx sdk.Context, connectionID, owner, version string) error +} + +// ICACallbacksKeeper defines the expected ICA callback keeper +type ICACallbacksKeeper interface { + SetCallbackData(ctx sdk.Context, callbackData icacallbackstypes.CallbackData) +} + +// ICS4Wrapper defines the expected ICS4Wrapper for middleware +type ICS4Wrapper interface { + WriteAcknowledgement(ctx sdk.Context, chanCap *capabilitytypes.Capability, packet ibcexported.PacketI, acknowledgement ibcexported.Acknowledgement) error + SendPacket( + ctx sdk.Context, + chanCap *capabilitytypes.Capability, + sourcePort string, + sourceChannel string, + timeoutHeight clienttypes.Height, + timeoutTimestamp uint64, + data []byte, + ) (sequence uint64, err error) + GetAppVersion(ctx sdk.Context, portID, channelID string) (string, bool) +} diff --git a/x/icaoracle/types/genesis.go b/x/icaoracle/types/genesis.go new file mode 100644 index 00000000000..96f753776d6 --- /dev/null +++ b/x/icaoracle/types/genesis.go @@ -0,0 +1,40 @@ +package types + +import ( + errorsmod "cosmossdk.io/errors" +) + +// DefaultGenesis returns the default Capability genesis state +func DefaultGenesis() *GenesisState { + return &GenesisState{ + Params: DefaultParams(), + Oracles: []Oracle{}, + Metrics: []Metric{}, + } +} + +// Validate performs basic genesis state validation returning an error upon any +// failure. +func (gs GenesisState) Validate() error { + if err := gs.Params.Validate(); err != nil { + return errorsmod.Wrap(err, "invalid genesis state") + } + for _, oracle := range gs.Oracles { + if oracle.ChainId == "" { + return errorsmod.Wrap(ErrInvalidGenesisState, "oracle has empty chain ID") + } + } + for _, metric := range gs.Metrics { + if metric.Key == "" { + return errorsmod.Wrap(ErrInvalidGenesisState, "metric has missing key") + } + if metric.UpdateTime == 0 { + return errorsmod.Wrap(ErrInvalidGenesisState, "metric has missing time") + } + if metric.DestinationOracle == "" { + return errorsmod.Wrap(ErrInvalidGenesisState, "metric has missing destination oracle chain ID") + } + } + + return nil +} diff --git a/x/icaoracle/types/genesis.pb.go b/x/icaoracle/types/genesis.pb.go new file mode 100644 index 00000000000..5b2dab069e1 --- /dev/null +++ b/x/icaoracle/types/genesis.pb.go @@ -0,0 +1,570 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/icaoracle/genesis.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// Params defines the icaoracle module parameters. +type Params struct { +} + +func (m *Params) Reset() { *m = Params{} } +func (m *Params) String() string { return proto.CompactTextString(m) } +func (*Params) ProtoMessage() {} +func (*Params) Descriptor() ([]byte, []int) { + return fileDescriptor_89fd81957c6adfb8, []int{0} +} +func (m *Params) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Params.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Params) XXX_Merge(src proto.Message) { + xxx_messageInfo_Params.Merge(m, src) +} +func (m *Params) XXX_Size() int { + return m.Size() +} +func (m *Params) XXX_DiscardUnknown() { + xxx_messageInfo_Params.DiscardUnknown(m) +} + +var xxx_messageInfo_Params proto.InternalMessageInfo + +// GenesisState defines the icaoracle module's genesis state. +type GenesisState struct { + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params" yaml:"params"` + Oracles []Oracle `protobuf:"bytes,2,rep,name=oracles,proto3" json:"oracles" yaml:"oracles"` + Metrics []Metric `protobuf:"bytes,3,rep,name=metrics,proto3" json:"metrics" yaml:"metrics"` +} + +func (m *GenesisState) Reset() { *m = GenesisState{} } +func (m *GenesisState) String() string { return proto.CompactTextString(m) } +func (*GenesisState) ProtoMessage() {} +func (*GenesisState) Descriptor() ([]byte, []int) { + return fileDescriptor_89fd81957c6adfb8, []int{1} +} +func (m *GenesisState) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GenesisState.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GenesisState) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenesisState.Merge(m, src) +} +func (m *GenesisState) XXX_Size() int { + return m.Size() +} +func (m *GenesisState) XXX_DiscardUnknown() { + xxx_messageInfo_GenesisState.DiscardUnknown(m) +} + +var xxx_messageInfo_GenesisState proto.InternalMessageInfo + +func (m *GenesisState) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +func (m *GenesisState) GetOracles() []Oracle { + if m != nil { + return m.Oracles + } + return nil +} + +func (m *GenesisState) GetMetrics() []Metric { + if m != nil { + return m.Metrics + } + return nil +} + +func init() { + proto.RegisterType((*Params)(nil), "stride.icaoracle.Params") + proto.RegisterType((*GenesisState)(nil), "stride.icaoracle.GenesisState") +} + +func init() { proto.RegisterFile("stride/icaoracle/genesis.proto", fileDescriptor_89fd81957c6adfb8) } + +var fileDescriptor_89fd81957c6adfb8 = []byte{ + // 274 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x2b, 0x2e, 0x29, 0xca, + 0x4c, 0x49, 0xd5, 0xcf, 0x4c, 0x4e, 0xcc, 0x2f, 0x4a, 0x4c, 0xce, 0x49, 0xd5, 0x4f, 0x4f, 0xcd, + 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x80, 0xc8, 0xeb, 0xc1, + 0xe5, 0xa5, 0x44, 0xd2, 0xf3, 0xd3, 0xf3, 0xc1, 0x92, 0xfa, 0x20, 0x16, 0x44, 0x9d, 0x94, 0x02, + 0x86, 0x39, 0x70, 0x16, 0x44, 0x85, 0x12, 0x07, 0x17, 0x5b, 0x40, 0x62, 0x51, 0x62, 0x6e, 0xb1, + 0xd2, 0x7b, 0x46, 0x2e, 0x1e, 0x77, 0x88, 0x2d, 0xc1, 0x25, 0x89, 0x25, 0xa9, 0x42, 0xee, 0x5c, + 0x6c, 0x05, 0x60, 0x29, 0x09, 0x46, 0x05, 0x46, 0x0d, 0x6e, 0x23, 0x09, 0x3d, 0x74, 0x5b, 0xf5, + 0x20, 0x5a, 0x9d, 0x44, 0x4f, 0xdc, 0x93, 0x67, 0xf8, 0x74, 0x4f, 0x9e, 0xb7, 0x32, 0x31, 0x37, + 0xc7, 0x4a, 0x09, 0xa2, 0x4b, 0x29, 0x08, 0xaa, 0x5d, 0xc8, 0x8b, 0x8b, 0x1d, 0xa2, 0xbe, 0x58, + 0x82, 0x49, 0x81, 0x19, 0xbb, 0x49, 0xfe, 0x60, 0xca, 0x49, 0x0c, 0x6a, 0x12, 0x1f, 0xc4, 0x24, + 0xa8, 0x36, 0xa5, 0x20, 0x98, 0x01, 0x20, 0xb3, 0x72, 0x53, 0x4b, 0x8a, 0x32, 0x93, 0x8b, 0x25, + 0x98, 0x71, 0x99, 0xe5, 0x0b, 0x56, 0x80, 0x6e, 0x16, 0x54, 0x9b, 0x52, 0x10, 0xcc, 0x00, 0x27, + 0xdf, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x71, 0xc2, 0x63, + 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, 0x32, 0x4e, 0xcf, 0x2c, 0xc9, + 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x0f, 0x06, 0x1b, 0xaf, 0xeb, 0x93, 0x98, 0x54, 0xac, + 0x0f, 0x0d, 0xce, 0x32, 0x23, 0x0b, 0xfd, 0x0a, 0xa4, 0x40, 0x2d, 0xa9, 0x2c, 0x48, 0x2d, 0x4e, + 0x62, 0x03, 0x87, 0xa8, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x10, 0x79, 0xcc, 0x14, 0xbd, 0x01, + 0x00, 0x00, +} + +func (m *Params) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Params) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *GenesisState) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GenesisState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Metrics) > 0 { + for iNdEx := len(m.Metrics) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Metrics[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if len(m.Oracles) > 0 { + for iNdEx := len(m.Oracles) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Oracles[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { + offset -= sovGenesis(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Params) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *GenesisState) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovGenesis(uint64(l)) + if len(m.Oracles) > 0 { + for _, e := range m.Oracles { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + if len(m.Metrics) > 0 { + for _, e := range m.Metrics { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + return n +} + +func sovGenesis(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenesis(x uint64) (n int) { + return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Params) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GenesisState) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Oracles", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Oracles = append(m.Oracles, Oracle{}) + if err := m.Oracles[len(m.Oracles)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metrics", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Metrics = append(m.Metrics, Metric{}) + if err := m.Metrics[len(m.Metrics)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenesis(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenesis + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenesis + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenesis + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/icaoracle/types/genesis_test.go b/x/icaoracle/types/genesis_test.go new file mode 100644 index 00000000000..60a4866cfb8 --- /dev/null +++ b/x/icaoracle/types/genesis_test.go @@ -0,0 +1,76 @@ +package types_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +func TestValidateGenesis(t *testing.T) { + apptesting.SetupConfig() + + validChainId := "chain" + validMetricKey := "key" + validUpdateTime := int64(1) + validMetric := types.Metric{ + Key: validMetricKey, + UpdateTime: validUpdateTime, + DestinationOracle: validChainId, + } + + tests := []struct { + name string + genesisState types.GenesisState + valid bool + }{ + { + name: "valid genesis", + genesisState: types.GenesisState{ + Oracles: []types.Oracle{ + {ChainId: validChainId}, + }, + Metrics: []types.Metric{ + validMetric, + }, + }, + valid: true, + }, + { + name: "invalid oracle", + genesisState: types.GenesisState{ + Oracles: []types.Oracle{ + {ChainId: ""}, + }, + Metrics: []types.Metric{ + validMetric, + }, + }, + valid: false, + }, + { + name: "invalid metric", + genesisState: types.GenesisState{ + Oracles: []types.Oracle{ + {ChainId: validChainId}, + }, + Metrics: []types.Metric{ + {Key: "", UpdateTime: validUpdateTime, DestinationOracle: validChainId}, + }, + }, + valid: false, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + if test.valid { + require.NoError(t, test.genesisState.Validate(), "test: %v", test.name) + } else { + require.ErrorContains(t, test.genesisState.Validate(), types.ErrInvalidGenesisState.Error(), "test: %v", test.name) + } + }) + } +} diff --git a/x/icaoracle/types/ica.go b/x/icaoracle/types/ica.go new file mode 100644 index 00000000000..ef9915d98c1 --- /dev/null +++ b/x/icaoracle/types/ica.go @@ -0,0 +1,61 @@ +package types + +import ( + fmt "fmt" + "time" + + errorsmod "cosmossdk.io/errors" + + proto "github.com/cosmos/gogoproto/proto" + + "github.com/osmosis-labs/osmosis/v27/utils" +) + +const ( + ICAAccountType_Oracle = "ORACLE" +) + +type ICATx struct { + ConnectionId string + ChannelId string + PortId string + Owner string + Messages []proto.Message + RelativeTimeout time.Duration + CallbackArgs proto.Message + CallbackId string +} + +func (i ICATx) ValidateICATx() error { + if i.ConnectionId == "" { + return errorsmod.Wrapf(ErrInvalidICARequest, "connection-id is empty") + } + if i.ChannelId == "" { + return errorsmod.Wrapf(ErrInvalidICARequest, "channel-id is empty") + } + if i.PortId == "" { + return errorsmod.Wrapf(ErrInvalidICARequest, "port-id is empty") + } + if i.Owner == "" { + return errorsmod.Wrapf(ErrInvalidICARequest, "owner is empty") + } + if len(i.Messages) < 1 { + return errorsmod.Wrapf(ErrInvalidICARequest, "messages are empty") + } + if i.RelativeTimeout <= 0 { + return errorsmod.Wrapf(ErrInvalidICARequest, + "relative timeout must be greater than 0, timeout: %d", i.RelativeTimeout) + } + if i.CallbackId == "" { + return errorsmod.Wrapf(ErrInvalidICARequest, "callback-id is empty") + } + return nil +} + +func (i ICATx) GetRelativeTimeoutNano() uint64 { + return utils.IntToUint(i.RelativeTimeout.Nanoseconds()) +} + +func FormatICAAccountOwner(chainId string, accountType string) string { + return fmt.Sprintf("%s.%s", chainId, accountType) +} diff --git a/x/icaoracle/types/ica_test.go b/x/icaoracle/types/ica_test.go new file mode 100644 index 00000000000..62ba287c9ed --- /dev/null +++ b/x/icaoracle/types/ica_test.go @@ -0,0 +1,143 @@ +package types_test + +import ( + "testing" + "time" + + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + "github.com/stretchr/testify/require" + + proto "github.com/cosmos/gogoproto/proto" + + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +func TestValidateICATx(t *testing.T) { + validConnectionId := "connection-0" + validChannelId := "channel-0" + validPortId := "port-0" + validOwner := "owner" + validMessages := []proto.Message{&banktypes.MsgSend{}} + validTimeout := time.Second + validCallbackId := "callback-id" + + tests := []struct { + name string + tx types.ICATx + err string + }{ + { + name: "successful ICA Tx", + tx: types.ICATx{ + ConnectionId: validConnectionId, + ChannelId: validChannelId, + PortId: validPortId, + Owner: validOwner, + Messages: validMessages, + RelativeTimeout: validTimeout, + CallbackId: validCallbackId, + }, + }, + { + name: "invalid connection-id", + tx: types.ICATx{ + ConnectionId: "", + ChannelId: validChannelId, + PortId: validPortId, + Owner: validOwner, + Messages: validMessages, + RelativeTimeout: validTimeout, + CallbackId: validCallbackId, + }, + err: "connection-id is empty", + }, + { + name: "invalid channel-id", + tx: types.ICATx{ + ConnectionId: validConnectionId, + ChannelId: "", + PortId: validPortId, + Owner: validOwner, + Messages: validMessages, + RelativeTimeout: validTimeout, + CallbackId: validCallbackId, + }, + err: "channel-id is empty", + }, + { + name: "invalid port-id", + tx: types.ICATx{ + ConnectionId: validConnectionId, + ChannelId: validChannelId, + PortId: "", + Owner: validOwner, + Messages: validMessages, + RelativeTimeout: validTimeout, + CallbackId: validCallbackId, + }, + err: "port-id is empty", + }, + { + name: "invalid owner", + tx: types.ICATx{ + ConnectionId: validConnectionId, + ChannelId: validChannelId, + PortId: validPortId, + Owner: "", + Messages: validMessages, + RelativeTimeout: validTimeout, + CallbackId: validCallbackId, + }, + err: "owner is empty", + }, + { + name: "invalid messages", + tx: types.ICATx{ + ConnectionId: validConnectionId, + ChannelId: validChannelId, + PortId: validPortId, + Owner: validOwner, + Messages: []proto.Message{}, + RelativeTimeout: validTimeout, + CallbackId: validCallbackId, + }, + err: "messages are empty", + }, + { + name: "invalid timeout", + tx: types.ICATx{ + ConnectionId: validConnectionId, + ChannelId: validChannelId, + PortId: validPortId, + Owner: validOwner, + Messages: validMessages, + RelativeTimeout: -1 * time.Second, + CallbackId: validCallbackId, + }, + err: "relative timeout must be greater than 0", + }, + { + name: "invalid callback-id", + tx: types.ICATx{ + ConnectionId: validConnectionId, + ChannelId: validChannelId, + PortId: validPortId, + Owner: validOwner, + Messages: validMessages, + RelativeTimeout: validTimeout, + CallbackId: "", + }, + err: "callback-id is empty", + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + if test.err == "" { + require.NoError(t, test.tx.ValidateICATx(), "test: %v", test.name) + } else { + require.ErrorContains(t, test.tx.ValidateICATx(), test.err, "test: %v", test.name) + } + }) + } +} diff --git a/x/icaoracle/types/icaoracle.pb.go b/x/icaoracle/types/icaoracle.pb.go new file mode 100644 index 00000000000..01ac9ed654c --- /dev/null +++ b/x/icaoracle/types/icaoracle.pb.go @@ -0,0 +1,1319 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/icaoracle/icaoracle.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// MetricStatus indicates whether the Metric update ICA has been sent +type MetricStatus int32 + +const ( + MetricStatus_UNSPECIFIED MetricStatus = 0 + MetricStatus_QUEUED MetricStatus = 1 + MetricStatus_IN_PROGRESS MetricStatus = 2 +) + +var MetricStatus_name = map[int32]string{ + 0: "METRIC_STATUS_UNSPECIFIED", + 1: "METRIC_STATUS_QUEUED", + 2: "METRIC_STATUS_IN_PROGRESS", +} + +var MetricStatus_value = map[string]int32{ + "METRIC_STATUS_UNSPECIFIED": 0, + "METRIC_STATUS_QUEUED": 1, + "METRIC_STATUS_IN_PROGRESS": 2, +} + +func (x MetricStatus) String() string { + return proto.EnumName(MetricStatus_name, int32(x)) +} + +func (MetricStatus) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_842e38c1f0da9e66, []int{0} +} + +// Oracle structure stores context about the CW oracle sitting a different chain +type Oracle struct { + ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + ConnectionId string `protobuf:"bytes,2,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty"` + ChannelId string `protobuf:"bytes,3,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` + PortId string `protobuf:"bytes,4,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty"` + IcaAddress string `protobuf:"bytes,5,opt,name=ica_address,json=icaAddress,proto3" json:"ica_address,omitempty"` + ContractAddress string `protobuf:"bytes,6,opt,name=contract_address,json=contractAddress,proto3" json:"contract_address,omitempty"` + Active bool `protobuf:"varint,7,opt,name=active,proto3" json:"active,omitempty"` +} + +func (m *Oracle) Reset() { *m = Oracle{} } +func (m *Oracle) String() string { return proto.CompactTextString(m) } +func (*Oracle) ProtoMessage() {} +func (*Oracle) Descriptor() ([]byte, []int) { + return fileDescriptor_842e38c1f0da9e66, []int{0} +} +func (m *Oracle) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Oracle) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Oracle.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Oracle) XXX_Merge(src proto.Message) { + xxx_messageInfo_Oracle.Merge(m, src) +} +func (m *Oracle) XXX_Size() int { + return m.Size() +} +func (m *Oracle) XXX_DiscardUnknown() { + xxx_messageInfo_Oracle.DiscardUnknown(m) +} + +var xxx_messageInfo_Oracle proto.InternalMessageInfo + +func (m *Oracle) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +func (m *Oracle) GetConnectionId() string { + if m != nil { + return m.ConnectionId + } + return "" +} + +func (m *Oracle) GetChannelId() string { + if m != nil { + return m.ChannelId + } + return "" +} + +func (m *Oracle) GetPortId() string { + if m != nil { + return m.PortId + } + return "" +} + +func (m *Oracle) GetIcaAddress() string { + if m != nil { + return m.IcaAddress + } + return "" +} + +func (m *Oracle) GetContractAddress() string { + if m != nil { + return m.ContractAddress + } + return "" +} + +func (m *Oracle) GetActive() bool { + if m != nil { + return m.Active + } + return false +} + +// Metric structure stores a generic metric using a key value structure +// along with additional context +type Metric struct { + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + MetricType string `protobuf:"bytes,3,opt,name=metric_type,json=metricType,proto3" json:"metric_type,omitempty"` + UpdateTime int64 `protobuf:"varint,4,opt,name=update_time,json=updateTime,proto3" json:"update_time,omitempty"` + BlockHeight int64 `protobuf:"varint,5,opt,name=block_height,json=blockHeight,proto3" json:"block_height,omitempty"` + Attributes string `protobuf:"bytes,6,opt,name=attributes,proto3" json:"attributes,omitempty"` + DestinationOracle string `protobuf:"bytes,7,opt,name=destination_oracle,json=destinationOracle,proto3" json:"destination_oracle,omitempty"` + Status MetricStatus `protobuf:"varint,8,opt,name=status,proto3,enum=stride.icaoracle.MetricStatus" json:"status,omitempty"` +} + +func (m *Metric) Reset() { *m = Metric{} } +func (m *Metric) String() string { return proto.CompactTextString(m) } +func (*Metric) ProtoMessage() {} +func (*Metric) Descriptor() ([]byte, []int) { + return fileDescriptor_842e38c1f0da9e66, []int{1} +} +func (m *Metric) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Metric) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Metric.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Metric) XXX_Merge(src proto.Message) { + xxx_messageInfo_Metric.Merge(m, src) +} +func (m *Metric) XXX_Size() int { + return m.Size() +} +func (m *Metric) XXX_DiscardUnknown() { + xxx_messageInfo_Metric.DiscardUnknown(m) +} + +var xxx_messageInfo_Metric proto.InternalMessageInfo + +func (m *Metric) GetKey() string { + if m != nil { + return m.Key + } + return "" +} + +func (m *Metric) GetValue() string { + if m != nil { + return m.Value + } + return "" +} + +func (m *Metric) GetMetricType() string { + if m != nil { + return m.MetricType + } + return "" +} + +func (m *Metric) GetUpdateTime() int64 { + if m != nil { + return m.UpdateTime + } + return 0 +} + +func (m *Metric) GetBlockHeight() int64 { + if m != nil { + return m.BlockHeight + } + return 0 +} + +func (m *Metric) GetAttributes() string { + if m != nil { + return m.Attributes + } + return "" +} + +func (m *Metric) GetDestinationOracle() string { + if m != nil { + return m.DestinationOracle + } + return "" +} + +func (m *Metric) GetStatus() MetricStatus { + if m != nil { + return m.Status + } + return MetricStatus_UNSPECIFIED +} + +// Attributes associated with a RedemptionRate metric update +type RedemptionRateAttributes struct { + SttokenDenom string `protobuf:"bytes,1,opt,name=sttoken_denom,json=sttokenDenom,proto3" json:"sttoken_denom,omitempty"` +} + +func (m *RedemptionRateAttributes) Reset() { *m = RedemptionRateAttributes{} } +func (m *RedemptionRateAttributes) String() string { return proto.CompactTextString(m) } +func (*RedemptionRateAttributes) ProtoMessage() {} +func (*RedemptionRateAttributes) Descriptor() ([]byte, []int) { + return fileDescriptor_842e38c1f0da9e66, []int{2} +} +func (m *RedemptionRateAttributes) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RedemptionRateAttributes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RedemptionRateAttributes.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RedemptionRateAttributes) XXX_Merge(src proto.Message) { + xxx_messageInfo_RedemptionRateAttributes.Merge(m, src) +} +func (m *RedemptionRateAttributes) XXX_Size() int { + return m.Size() +} +func (m *RedemptionRateAttributes) XXX_DiscardUnknown() { + xxx_messageInfo_RedemptionRateAttributes.DiscardUnknown(m) +} + +var xxx_messageInfo_RedemptionRateAttributes proto.InternalMessageInfo + +func (m *RedemptionRateAttributes) GetSttokenDenom() string { + if m != nil { + return m.SttokenDenom + } + return "" +} + +func init() { + proto.RegisterEnum("stride.icaoracle.MetricStatus", MetricStatus_name, MetricStatus_value) + proto.RegisterType((*Oracle)(nil), "stride.icaoracle.Oracle") + proto.RegisterType((*Metric)(nil), "stride.icaoracle.Metric") + proto.RegisterType((*RedemptionRateAttributes)(nil), "stride.icaoracle.RedemptionRateAttributes") +} + +func init() { proto.RegisterFile("stride/icaoracle/icaoracle.proto", fileDescriptor_842e38c1f0da9e66) } + +var fileDescriptor_842e38c1f0da9e66 = []byte{ + // 558 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x93, 0xc1, 0x6e, 0xd3, 0x4c, + 0x14, 0x85, 0xe3, 0xe6, 0xaf, 0xdb, 0xde, 0xa6, 0x7f, 0xcd, 0x28, 0x82, 0x34, 0x12, 0xc6, 0xa4, + 0x2c, 0x02, 0x52, 0x1d, 0xa9, 0x95, 0x10, 0x3b, 0x14, 0x1a, 0x03, 0x96, 0x48, 0x5b, 0xec, 0x64, + 0xc3, 0xc6, 0x9a, 0xcc, 0x8c, 0x92, 0x51, 0x62, 0x8f, 0x65, 0x4f, 0x22, 0xf2, 0x0a, 0x5d, 0xb1, + 0x60, 0x49, 0xdf, 0x87, 0x65, 0x97, 0x2c, 0x51, 0xc2, 0x83, 0x20, 0x8f, 0x9d, 0xd6, 0xc0, 0x6e, + 0xee, 0x77, 0x8e, 0xaf, 0x7c, 0xee, 0xcc, 0x05, 0x2b, 0x95, 0x09, 0xa7, 0xac, 0xc3, 0x09, 0x16, + 0x09, 0x26, 0xb3, 0xd2, 0xc9, 0x8e, 0x13, 0x21, 0x05, 0x32, 0x72, 0x87, 0x7d, 0xc7, 0x9b, 0xf5, + 0xb1, 0x18, 0x0b, 0x25, 0x76, 0xb2, 0x53, 0xee, 0x6b, 0xfd, 0xd2, 0x40, 0xbf, 0x54, 0x06, 0x74, + 0x04, 0xbb, 0x64, 0x82, 0x79, 0x14, 0x70, 0xda, 0xd0, 0x2c, 0xad, 0xbd, 0xe7, 0xed, 0xa8, 0xda, + 0xa5, 0xe8, 0x18, 0x0e, 0x88, 0x88, 0x22, 0x46, 0x24, 0x17, 0x4a, 0xdf, 0x52, 0x7a, 0xed, 0x1e, + 0xba, 0x14, 0x3d, 0x06, 0x20, 0x13, 0x1c, 0x45, 0x6c, 0x96, 0x39, 0xaa, 0xca, 0xb1, 0x57, 0x10, + 0x97, 0xa2, 0x47, 0xb0, 0x13, 0x8b, 0x44, 0x66, 0xda, 0x7f, 0x4a, 0xd3, 0xb3, 0xd2, 0xa5, 0xe8, + 0x09, 0xec, 0x73, 0x82, 0x03, 0x4c, 0x69, 0xc2, 0xd2, 0xb4, 0xb1, 0xad, 0x44, 0xe0, 0x04, 0x77, + 0x73, 0x82, 0x9e, 0x83, 0x41, 0x44, 0x24, 0x13, 0x4c, 0xe4, 0x9d, 0x4b, 0x57, 0xae, 0xc3, 0x0d, + 0xdf, 0x58, 0x1f, 0x82, 0x8e, 0x89, 0xe4, 0x0b, 0xd6, 0xd8, 0xb1, 0xb4, 0xf6, 0xae, 0x57, 0x54, + 0xad, 0x6f, 0x5b, 0xa0, 0xf7, 0x99, 0x4c, 0x38, 0x41, 0x06, 0x54, 0xa7, 0x6c, 0x59, 0x24, 0xcc, + 0x8e, 0xa8, 0x0e, 0xdb, 0x0b, 0x3c, 0x9b, 0xb3, 0x22, 0x55, 0x5e, 0x64, 0xbf, 0x15, 0xaa, 0x2f, + 0x02, 0xb9, 0x8c, 0x59, 0x91, 0x07, 0x72, 0x34, 0x58, 0xc6, 0xca, 0x30, 0x8f, 0x29, 0x96, 0x2c, + 0x90, 0x3c, 0x64, 0x2a, 0x54, 0xd5, 0x83, 0x1c, 0x0d, 0x78, 0xc8, 0xd0, 0x53, 0xa8, 0x8d, 0x66, + 0x82, 0x4c, 0x83, 0x09, 0xe3, 0xe3, 0x89, 0x54, 0xc9, 0xaa, 0xde, 0xbe, 0x62, 0xef, 0x15, 0x42, + 0x26, 0x00, 0x96, 0x32, 0xe1, 0xa3, 0xb9, 0x64, 0x9b, 0x50, 0x25, 0x82, 0x4e, 0x00, 0x51, 0x96, + 0x4a, 0x1e, 0x61, 0x35, 0xf9, 0xfc, 0x2a, 0x55, 0xb6, 0x3d, 0xef, 0x41, 0x49, 0x29, 0xae, 0xf0, + 0x25, 0xe8, 0xa9, 0xc4, 0x72, 0x9e, 0x36, 0x76, 0x2d, 0xad, 0xfd, 0xff, 0xa9, 0x69, 0xff, 0xfd, + 0x0c, 0xec, 0x7c, 0x0a, 0xbe, 0x72, 0x79, 0x85, 0xbb, 0xf5, 0x1a, 0x1a, 0x1e, 0xa3, 0x2c, 0x8c, + 0xb3, 0x5e, 0x1e, 0x96, 0xac, 0x7b, 0xff, 0x0b, 0xc7, 0x70, 0x90, 0x4a, 0x29, 0xa6, 0x2c, 0x0a, + 0x28, 0x8b, 0x44, 0x58, 0x4c, 0xae, 0x56, 0xc0, 0x5e, 0xc6, 0x5e, 0x7c, 0xd5, 0xa0, 0x56, 0xee, + 0x8c, 0x6c, 0x38, 0xea, 0x3b, 0x03, 0xcf, 0x3d, 0x0f, 0xfc, 0x41, 0x77, 0x30, 0xf4, 0x83, 0xe1, + 0x85, 0x7f, 0xe5, 0x9c, 0xbb, 0x6f, 0x5d, 0xa7, 0x67, 0x54, 0x9a, 0x87, 0xd7, 0x37, 0xd6, 0x7e, + 0x09, 0xa1, 0x67, 0x50, 0xff, 0xd3, 0xff, 0x71, 0xe8, 0x0c, 0x9d, 0x9e, 0xa1, 0x35, 0xe1, 0xfa, + 0xc6, 0xd2, 0xf3, 0xea, 0xdf, 0xae, 0xee, 0x45, 0x70, 0xe5, 0x5d, 0xbe, 0xf3, 0x1c, 0xdf, 0x37, + 0xb6, 0xf2, 0xae, 0x25, 0xf4, 0xa6, 0xff, 0x7d, 0x65, 0x6a, 0xb7, 0x2b, 0x53, 0xfb, 0xb9, 0x32, + 0xb5, 0x2f, 0x6b, 0xb3, 0x72, 0xbb, 0x36, 0x2b, 0x3f, 0xd6, 0x66, 0xe5, 0xd3, 0xd9, 0x98, 0xcb, + 0xc9, 0x7c, 0x64, 0x13, 0x11, 0x76, 0x7c, 0x35, 0xa3, 0x93, 0x0f, 0x78, 0x94, 0x76, 0x8a, 0xc5, + 0x5a, 0x9c, 0xbe, 0xea, 0x7c, 0x2e, 0xad, 0x57, 0xf6, 0x04, 0xd2, 0x91, 0xae, 0x76, 0xe6, 0xec, + 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4e, 0x28, 0x56, 0xb5, 0x7f, 0x03, 0x00, 0x00, +} + +func (m *Oracle) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Oracle) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Oracle) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Active { + i-- + if m.Active { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x38 + } + if len(m.ContractAddress) > 0 { + i -= len(m.ContractAddress) + copy(dAtA[i:], m.ContractAddress) + i = encodeVarintIcaoracle(dAtA, i, uint64(len(m.ContractAddress))) + i-- + dAtA[i] = 0x32 + } + if len(m.IcaAddress) > 0 { + i -= len(m.IcaAddress) + copy(dAtA[i:], m.IcaAddress) + i = encodeVarintIcaoracle(dAtA, i, uint64(len(m.IcaAddress))) + i-- + dAtA[i] = 0x2a + } + if len(m.PortId) > 0 { + i -= len(m.PortId) + copy(dAtA[i:], m.PortId) + i = encodeVarintIcaoracle(dAtA, i, uint64(len(m.PortId))) + i-- + dAtA[i] = 0x22 + } + if len(m.ChannelId) > 0 { + i -= len(m.ChannelId) + copy(dAtA[i:], m.ChannelId) + i = encodeVarintIcaoracle(dAtA, i, uint64(len(m.ChannelId))) + i-- + dAtA[i] = 0x1a + } + if len(m.ConnectionId) > 0 { + i -= len(m.ConnectionId) + copy(dAtA[i:], m.ConnectionId) + i = encodeVarintIcaoracle(dAtA, i, uint64(len(m.ConnectionId))) + i-- + dAtA[i] = 0x12 + } + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintIcaoracle(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Metric) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Metric) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Metric) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Status != 0 { + i = encodeVarintIcaoracle(dAtA, i, uint64(m.Status)) + i-- + dAtA[i] = 0x40 + } + if len(m.DestinationOracle) > 0 { + i -= len(m.DestinationOracle) + copy(dAtA[i:], m.DestinationOracle) + i = encodeVarintIcaoracle(dAtA, i, uint64(len(m.DestinationOracle))) + i-- + dAtA[i] = 0x3a + } + if len(m.Attributes) > 0 { + i -= len(m.Attributes) + copy(dAtA[i:], m.Attributes) + i = encodeVarintIcaoracle(dAtA, i, uint64(len(m.Attributes))) + i-- + dAtA[i] = 0x32 + } + if m.BlockHeight != 0 { + i = encodeVarintIcaoracle(dAtA, i, uint64(m.BlockHeight)) + i-- + dAtA[i] = 0x28 + } + if m.UpdateTime != 0 { + i = encodeVarintIcaoracle(dAtA, i, uint64(m.UpdateTime)) + i-- + dAtA[i] = 0x20 + } + if len(m.MetricType) > 0 { + i -= len(m.MetricType) + copy(dAtA[i:], m.MetricType) + i = encodeVarintIcaoracle(dAtA, i, uint64(len(m.MetricType))) + i-- + dAtA[i] = 0x1a + } + if len(m.Value) > 0 { + i -= len(m.Value) + copy(dAtA[i:], m.Value) + i = encodeVarintIcaoracle(dAtA, i, uint64(len(m.Value))) + i-- + dAtA[i] = 0x12 + } + if len(m.Key) > 0 { + i -= len(m.Key) + copy(dAtA[i:], m.Key) + i = encodeVarintIcaoracle(dAtA, i, uint64(len(m.Key))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *RedemptionRateAttributes) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RedemptionRateAttributes) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RedemptionRateAttributes) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.SttokenDenom) > 0 { + i -= len(m.SttokenDenom) + copy(dAtA[i:], m.SttokenDenom) + i = encodeVarintIcaoracle(dAtA, i, uint64(len(m.SttokenDenom))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintIcaoracle(dAtA []byte, offset int, v uint64) int { + offset -= sovIcaoracle(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Oracle) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovIcaoracle(uint64(l)) + } + l = len(m.ConnectionId) + if l > 0 { + n += 1 + l + sovIcaoracle(uint64(l)) + } + l = len(m.ChannelId) + if l > 0 { + n += 1 + l + sovIcaoracle(uint64(l)) + } + l = len(m.PortId) + if l > 0 { + n += 1 + l + sovIcaoracle(uint64(l)) + } + l = len(m.IcaAddress) + if l > 0 { + n += 1 + l + sovIcaoracle(uint64(l)) + } + l = len(m.ContractAddress) + if l > 0 { + n += 1 + l + sovIcaoracle(uint64(l)) + } + if m.Active { + n += 2 + } + return n +} + +func (m *Metric) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Key) + if l > 0 { + n += 1 + l + sovIcaoracle(uint64(l)) + } + l = len(m.Value) + if l > 0 { + n += 1 + l + sovIcaoracle(uint64(l)) + } + l = len(m.MetricType) + if l > 0 { + n += 1 + l + sovIcaoracle(uint64(l)) + } + if m.UpdateTime != 0 { + n += 1 + sovIcaoracle(uint64(m.UpdateTime)) + } + if m.BlockHeight != 0 { + n += 1 + sovIcaoracle(uint64(m.BlockHeight)) + } + l = len(m.Attributes) + if l > 0 { + n += 1 + l + sovIcaoracle(uint64(l)) + } + l = len(m.DestinationOracle) + if l > 0 { + n += 1 + l + sovIcaoracle(uint64(l)) + } + if m.Status != 0 { + n += 1 + sovIcaoracle(uint64(m.Status)) + } + return n +} + +func (m *RedemptionRateAttributes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SttokenDenom) + if l > 0 { + n += 1 + l + sovIcaoracle(uint64(l)) + } + return n +} + +func sovIcaoracle(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozIcaoracle(x uint64) (n int) { + return sovIcaoracle(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Oracle) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Oracle: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Oracle: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIcaoracle + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIcaoracle + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConnectionId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIcaoracle + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIcaoracle + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ConnectionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIcaoracle + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIcaoracle + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PortId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIcaoracle + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIcaoracle + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PortId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IcaAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIcaoracle + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIcaoracle + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.IcaAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ContractAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIcaoracle + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIcaoracle + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ContractAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Active", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Active = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipIcaoracle(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthIcaoracle + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Metric) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Metric: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Metric: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIcaoracle + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIcaoracle + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Key = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIcaoracle + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIcaoracle + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Value = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MetricType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIcaoracle + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIcaoracle + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MetricType = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UpdateTime", wireType) + } + m.UpdateTime = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.UpdateTime |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field BlockHeight", wireType) + } + m.BlockHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.BlockHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Attributes", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIcaoracle + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIcaoracle + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Attributes = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DestinationOracle", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIcaoracle + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIcaoracle + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DestinationOracle = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + m.Status = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Status |= MetricStatus(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipIcaoracle(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthIcaoracle + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RedemptionRateAttributes) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RedemptionRateAttributes: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RedemptionRateAttributes: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SttokenDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIcaoracle + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIcaoracle + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SttokenDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipIcaoracle(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthIcaoracle + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipIcaoracle(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowIcaoracle + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowIcaoracle + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowIcaoracle + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthIcaoracle + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupIcaoracle + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthIcaoracle + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthIcaoracle = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowIcaoracle = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupIcaoracle = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/icaoracle/types/keys.go b/x/icaoracle/types/keys.go new file mode 100644 index 00000000000..036713e805a --- /dev/null +++ b/x/icaoracle/types/keys.go @@ -0,0 +1,25 @@ +package types + +const ( + ModuleName = "icaoracle" + + // StoreKey defines the primary module store key + StoreKey = ModuleName + + // RouterKey is the message route for slashing + RouterKey = ModuleName + + // QuerierRoute defines the module's query routing key + QuerierRoute = ModuleName +) + +// Generates a key byte prefix from a string +func KeyPrefix(p string) []byte { + return []byte(p) +} + +var ( + OracleKeyPrefix = KeyPrefix("oracle") + MetricKeyPrefix = KeyPrefix("metric") + MetricQueueKeyPrefix = KeyPrefix("queue") +) diff --git a/x/icaoracle/types/message_add_oracle.go b/x/icaoracle/types/message_add_oracle.go new file mode 100644 index 00000000000..0d20f7fe447 --- /dev/null +++ b/x/icaoracle/types/message_add_oracle.go @@ -0,0 +1,58 @@ +package types + +import ( + "regexp" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + "github.com/osmosis-labs/osmosis/v27/utils" +) + +const TypeMsgAddOracle = "add_oracle" + +var _ sdk.Msg = &MsgAddOracle{} + +func NewMsgAddOracle(creator string, connectionId string) *MsgAddOracle { + return &MsgAddOracle{ + Creator: creator, + ConnectionId: connectionId, + } +} + +func (msg MsgAddOracle) Type() string { + return TypeMsgAddOracle +} + +func (msg MsgAddOracle) Route() string { + return RouterKey +} + +func (msg *MsgAddOracle) GetSigners() []sdk.AccAddress { + creator, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + panic(err) + } + return []sdk.AccAddress{creator} +} + +func (msg *MsgAddOracle) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) + } + if err := utils.ValidateAdminAddress(msg.Creator); err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) + } + + matched, err := regexp.MatchString(`^connection-\d+$`, msg.ConnectionId) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "unable to verify connnection-id (%s)", msg.ConnectionId) + } + if !matched { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "invalid connection-id (%s), must be of the format 'connection-{N}'", msg.ConnectionId) + } + + return nil +} diff --git a/x/icaoracle/types/message_add_oracle_test.go b/x/icaoracle/types/message_add_oracle_test.go new file mode 100644 index 00000000000..456dbacd97a --- /dev/null +++ b/x/icaoracle/types/message_add_oracle_test.go @@ -0,0 +1,83 @@ +package types_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +func TestMsgAddOracle(t *testing.T) { + apptesting.SetupConfig() + + validNotAdminAddress, invalidAddress := apptesting.GenerateTestAddrs() + validAdminAddress, ok := apptesting.GetAdminAddress() + require.True(t, ok) + + validConnectionId := "connection-10" + + tests := []struct { + name string + msg types.MsgAddOracle + err string + }{ + { + name: "successful message", + msg: types.MsgAddOracle{ + Creator: validAdminAddress, + ConnectionId: validConnectionId, + }, + }, + { + name: "invalid creator address", + msg: types.MsgAddOracle{ + Creator: invalidAddress, + ConnectionId: validConnectionId, + }, + err: "invalid creator address", + }, + { + name: "invalid admin address", + msg: types.MsgAddOracle{ + Creator: validNotAdminAddress, + ConnectionId: validConnectionId, + }, + err: "invalid creator address", + }, + { + name: "invalid connection prefix", + msg: types.MsgAddOracle{ + Creator: validAdminAddress, + ConnectionId: "connect-1", + }, + err: "invalid connection-id", + }, + { + name: "invalid connection suffix", + msg: types.MsgAddOracle{ + Creator: validAdminAddress, + ConnectionId: "connection-X", + }, + err: "invalid connection-id", + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + if test.err == "" { + require.NoError(t, test.msg.ValidateBasic(), "test: %v", test.name) + + signers := test.msg.GetSigners() + require.Equal(t, len(signers), 1) + require.Equal(t, signers[0].String(), validAdminAddress) + + require.Equal(t, test.msg.ConnectionId, validConnectionId, "connnectionId") + require.Equal(t, test.msg.Type(), "add_oracle", "type") + } else { + require.ErrorContains(t, test.msg.ValidateBasic(), test.err, "test: %v", test.name) + } + }) + } +} diff --git a/x/icaoracle/types/message_instantiate_oracle.go b/x/icaoracle/types/message_instantiate_oracle.go new file mode 100644 index 00000000000..f4896231a05 --- /dev/null +++ b/x/icaoracle/types/message_instantiate_oracle.go @@ -0,0 +1,68 @@ +package types + +import ( + "regexp" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + "github.com/osmosis-labs/osmosis/v27/utils" +) + +const TypeMsgInstantiateOracle = "instantiate_oracle" + +var _ sdk.Msg = &MsgInstantiateOracle{} + +func NewMsgInstantiateOracle(creator string, chainId string, contractCodeId uint64, transferChannelId string) *MsgInstantiateOracle { + return &MsgInstantiateOracle{ + Creator: creator, + OracleChainId: chainId, + ContractCodeId: contractCodeId, + TransferChannelOnOracle: transferChannelId, + } +} + +func (msg MsgInstantiateOracle) Type() string { + return TypeMsgInstantiateOracle +} + +func (msg MsgInstantiateOracle) Route() string { + return RouterKey +} + +func (msg *MsgInstantiateOracle) GetSigners() []sdk.AccAddress { + creator, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + panic(err) + } + return []sdk.AccAddress{creator} +} + +func (msg *MsgInstantiateOracle) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) + } + if err := utils.ValidateAdminAddress(msg.Creator); err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) + } + + if msg.OracleChainId == "" { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "oracle-chain-id is required") + } + + if msg.ContractCodeId == 0 { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "contract code-id cannot be 0") + } + + matched, err := regexp.MatchString(`^channel-\d+$`, msg.TransferChannelOnOracle) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "unable to verify channel-id (%s)", msg.TransferChannelOnOracle) + } + if !matched { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "invalid channel-id (%s), must be of the format 'channel-{N}'", msg.TransferChannelOnOracle) + } + + return nil +} diff --git a/x/icaoracle/types/message_instantiate_oracle_test.go b/x/icaoracle/types/message_instantiate_oracle_test.go new file mode 100644 index 00000000000..558096947c1 --- /dev/null +++ b/x/icaoracle/types/message_instantiate_oracle_test.go @@ -0,0 +1,106 @@ +package types_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +func TestMsgInstantiateOracle(t *testing.T) { + apptesting.SetupConfig() + + validNotAdminAddress, invalidAddress := apptesting.GenerateTestAddrs() + validAdminAddress, ok := apptesting.GetAdminAddress() + require.True(t, ok) + + validChainId := "chain-1" + validCodeId := uint64(1) + validChannelId := "channel-0" + + tests := []struct { + name string + msg types.MsgInstantiateOracle + err string + }{ + { + name: "successful message", + msg: types.MsgInstantiateOracle{ + Creator: validAdminAddress, + OracleChainId: validChainId, + ContractCodeId: validCodeId, + TransferChannelOnOracle: validChannelId, + }, + }, + { + name: "invalid creator address", + msg: types.MsgInstantiateOracle{ + Creator: invalidAddress, + OracleChainId: validChainId, + ContractCodeId: validCodeId, + TransferChannelOnOracle: validChannelId, + }, + err: "invalid creator address", + }, + { + name: "invalid admin address", + msg: types.MsgInstantiateOracle{ + Creator: validNotAdminAddress, + OracleChainId: validChainId, + ContractCodeId: validCodeId, + TransferChannelOnOracle: validChannelId, + }, + err: "invalid creator address", + }, + { + name: "invalid chain-id", + msg: types.MsgInstantiateOracle{ + Creator: validAdminAddress, + OracleChainId: "", + ContractCodeId: validCodeId, + TransferChannelOnOracle: validChannelId, + }, + err: "oracle-chain-id is required", + }, + { + name: "invalid code ID", + msg: types.MsgInstantiateOracle{ + Creator: validAdminAddress, + OracleChainId: validChainId, + ContractCodeId: 0, + TransferChannelOnOracle: validChannelId, + }, + err: "contract code-id cannot be 0", + }, + { + name: "invalid channel ID", + msg: types.MsgInstantiateOracle{ + Creator: validAdminAddress, + OracleChainId: validChainId, + ContractCodeId: validCodeId, + TransferChannelOnOracle: "chan-0", + }, + err: "invalid channel-id (chan-0)", + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + if test.err == "" { + require.NoError(t, test.msg.ValidateBasic(), "test: %v", test.name) + + signers := test.msg.GetSigners() + require.Equal(t, len(signers), 1) + require.Equal(t, signers[0].String(), validAdminAddress) + + require.Equal(t, test.msg.OracleChainId, validChainId, "chainId") + require.Equal(t, test.msg.ContractCodeId, validCodeId, "codeId") + require.Equal(t, test.msg.Type(), "instantiate_oracle", "type") + } else { + require.ErrorContains(t, test.msg.ValidateBasic(), test.err, "test: %v", test.name) + } + }) + } +} diff --git a/x/icaoracle/types/message_remove_oracle.go b/x/icaoracle/types/message_remove_oracle.go new file mode 100644 index 00000000000..20bcaa6a2d7 --- /dev/null +++ b/x/icaoracle/types/message_remove_oracle.go @@ -0,0 +1,36 @@ +package types + +import ( + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" +) + +const TypeMsgRemoveOracle = "remove_oracle" + +var _ sdk.Msg = &MsgRemoveOracle{} + +func (msg MsgRemoveOracle) Type() string { + return TypeMsgRemoveOracle +} + +func (msg MsgRemoveOracle) Route() string { + return RouterKey +} + +func (msg *MsgRemoveOracle) GetSigners() []sdk.AccAddress { + addr, _ := sdk.AccAddressFromBech32(msg.Authority) + return []sdk.AccAddress{addr} +} + +func (msg *MsgRemoveOracle) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.Authority); err != nil { + return errorsmod.Wrap(err, "invalid authority address") + } + + if msg.OracleChainId == "" { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "oracle-chain-id is required") + } + + return nil +} diff --git a/x/icaoracle/types/message_remove_oracle_test.go b/x/icaoracle/types/message_remove_oracle_test.go new file mode 100644 index 00000000000..a214b46345a --- /dev/null +++ b/x/icaoracle/types/message_remove_oracle_test.go @@ -0,0 +1,60 @@ +package types_test + +import ( + "testing" + + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +func TestMsgRemoveOracle(t *testing.T) { + apptesting.SetupConfig() + + validChainId := "chain-id" + + tests := []struct { + name string + msg types.MsgRemoveOracle + err string + }{ + { + name: "successful message", + msg: types.MsgRemoveOracle{ + Authority: authtypes.NewModuleAddress(govtypes.ModuleName).String(), + OracleChainId: validChainId, + }, + }, + { + name: "empty chain-id", + msg: types.MsgRemoveOracle{ + Authority: authtypes.NewModuleAddress(govtypes.ModuleName).String(), + OracleChainId: "", + }, + err: "oracle-chain-id is required", + }, + { + name: "invalid authority", + msg: types.MsgRemoveOracle{ + Authority: "invalid", + OracleChainId: validChainId, + }, + err: "invalid authority address", + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + if test.err == "" { + require.NoError(t, test.msg.ValidateBasic(), "test: %v", test.name) + require.Equal(t, test.msg.OracleChainId, validChainId, "oracle chain-id") + require.Equal(t, test.msg.Type(), "remove_oracle", "type") + } else { + require.ErrorContains(t, test.msg.ValidateBasic(), test.err, "test: %v", test.name) + } + }) + } +} diff --git a/x/icaoracle/types/message_restore_oracle_interchain_account.go b/x/icaoracle/types/message_restore_oracle_interchain_account.go new file mode 100644 index 00000000000..064e0e8b45b --- /dev/null +++ b/x/icaoracle/types/message_restore_oracle_interchain_account.go @@ -0,0 +1,47 @@ +package types + +import ( + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" +) + +const TypeMsgRestoreOracleICA = "restore_oracle_ica" + +var _ sdk.Msg = &MsgRestoreOracleICA{} + +func NewMsgRestoreOracleICA(creator string, oracleChainId string) *MsgRestoreOracleICA { + return &MsgRestoreOracleICA{ + Creator: creator, + OracleChainId: oracleChainId, + } +} + +func (msg MsgRestoreOracleICA) Type() string { + return TypeMsgRestoreOracleICA +} + +func (msg MsgRestoreOracleICA) Route() string { + return RouterKey +} + +func (msg *MsgRestoreOracleICA) GetSigners() []sdk.AccAddress { + creator, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + panic(err) + } + return []sdk.AccAddress{creator} +} + +func (msg *MsgRestoreOracleICA) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) + } + + if msg.OracleChainId == "" { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "oracle-chain-id is required") + } + + return nil +} diff --git a/x/icaoracle/types/message_restore_oracle_interchain_account_test.go b/x/icaoracle/types/message_restore_oracle_interchain_account_test.go new file mode 100644 index 00000000000..b500d17aba0 --- /dev/null +++ b/x/icaoracle/types/message_restore_oracle_interchain_account_test.go @@ -0,0 +1,64 @@ +package types_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +func TestMsgRestoreOracleICA(t *testing.T) { + apptesting.SetupConfig() + validAddr, invalidAddr := apptesting.GenerateTestAddrs() + + validChainId := "chain-1" + + tests := []struct { + name string + msg types.MsgRestoreOracleICA + err string + }{ + { + name: "successful message", + msg: types.MsgRestoreOracleICA{ + Creator: validAddr, + OracleChainId: validChainId, + }, + }, + { + name: "invalid creator", + msg: types.MsgRestoreOracleICA{ + Creator: invalidAddr, + OracleChainId: validChainId, + }, + err: "invalid creator address", + }, + { + name: "empty chain-id", + msg: types.MsgRestoreOracleICA{ + Creator: validAddr, + OracleChainId: "", + }, + err: "oracle-chain-id is required", + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + if test.err == "" { + require.NoError(t, test.msg.ValidateBasic(), "test: %v", test.name) + + signers := test.msg.GetSigners() + require.Equal(t, len(signers), 1) + require.Equal(t, signers[0].String(), validAddr) + + require.Equal(t, test.msg.OracleChainId, validChainId, "oracle-chain-id") + require.Equal(t, test.msg.Type(), "restore_oracle_ica", "type") + } else { + require.ErrorContains(t, test.msg.ValidateBasic(), test.err, "test: %v", test.name) + } + }) + } +} diff --git a/x/icaoracle/types/message_toggle_oracle.go b/x/icaoracle/types/message_toggle_oracle.go new file mode 100644 index 00000000000..67910aa7b32 --- /dev/null +++ b/x/icaoracle/types/message_toggle_oracle.go @@ -0,0 +1,36 @@ +package types + +import ( + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" +) + +const TypeMsgToggleOracle = "toggle_oracle" + +var _ sdk.Msg = &MsgToggleOracle{} + +func (msg MsgToggleOracle) Type() string { + return TypeMsgToggleOracle +} + +func (msg MsgToggleOracle) Route() string { + return RouterKey +} + +func (msg *MsgToggleOracle) GetSigners() []sdk.AccAddress { + addr, _ := sdk.AccAddressFromBech32(msg.Authority) + return []sdk.AccAddress{addr} +} + +func (msg *MsgToggleOracle) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.Authority); err != nil { + return errorsmod.Wrap(err, "invalid authority address") + } + + if msg.OracleChainId == "" { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "oracle-chain-id is required") + } + + return nil +} diff --git a/x/icaoracle/types/message_toggle_oracle_test.go b/x/icaoracle/types/message_toggle_oracle_test.go new file mode 100644 index 00000000000..f04a9081b3d --- /dev/null +++ b/x/icaoracle/types/message_toggle_oracle_test.go @@ -0,0 +1,60 @@ +package types_test + +import ( + "testing" + + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +func TestMsgMsgToggleOracle(t *testing.T) { + apptesting.SetupConfig() + + validChainId := "chain-1" + + tests := []struct { + name string + msg types.MsgToggleOracle + err string + }{ + { + name: "successful message", + msg: types.MsgToggleOracle{ + Authority: authtypes.NewModuleAddress(govtypes.ModuleName).String(), + OracleChainId: validChainId, + }, + }, + { + name: "empty chain-id", + msg: types.MsgToggleOracle{ + Authority: authtypes.NewModuleAddress(govtypes.ModuleName).String(), + OracleChainId: "", + }, + err: "oracle-chain-id is required", + }, + { + name: "invalid authority", + msg: types.MsgToggleOracle{ + Authority: "invalid", + OracleChainId: validChainId, + }, + err: "invalid authority address", + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + if test.err == "" { + require.NoError(t, test.msg.ValidateBasic(), "test: %v", test.name) + require.Equal(t, test.msg.OracleChainId, validChainId, "oracle chain-id") + require.Equal(t, test.msg.Type(), "toggle_oracle", "type") + } else { + require.ErrorContains(t, test.msg.ValidateBasic(), test.err, "test: %v", test.name) + } + }) + } +} diff --git a/x/icaoracle/types/metric.go b/x/icaoracle/types/metric.go new file mode 100644 index 00000000000..3b6d40bf5f5 --- /dev/null +++ b/x/icaoracle/types/metric.go @@ -0,0 +1,24 @@ +package types + +import ( + fmt "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// Returns a new metric at the current block time and height +func NewMetric(ctx sdk.Context, key, value, metricType, attributes string) Metric { + return Metric{ + Key: key, + Value: value, + MetricType: metricType, + UpdateTime: ctx.BlockTime().Unix(), + BlockHeight: ctx.BlockHeight(), + Attributes: attributes, + } +} + +// Returns the ID for a metric +func (m Metric) GetMetricID() string { + return fmt.Sprintf("%s-%s-%d-%s", m.Key, m.Value, m.UpdateTime, m.DestinationOracle) +} diff --git a/x/icaoracle/types/metric_test.go b/x/icaoracle/types/metric_test.go new file mode 100644 index 00000000000..6e2e2af211e --- /dev/null +++ b/x/icaoracle/types/metric_test.go @@ -0,0 +1,44 @@ +package types_test + +import ( + "testing" + "time" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +// Tests NewMetric and GetMetricID +func TestMetric(t *testing.T) { + blockHeight := int64(10) + blockTime := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC) + blockTimeUnix := int64(1672531200) + + ctx := sdk.Context{}. + WithBlockHeight(blockHeight). + WithBlockTime(blockTime) + + key := "key" + value := "value" + attributes := "attributes" + metricType := "type" + + expectedMetric := types.Metric{ + Key: key, + Value: value, + MetricType: metricType, + UpdateTime: blockTimeUnix, + BlockHeight: blockHeight, + Attributes: "attributes", + Status: types.MetricStatus_UNSPECIFIED, + } + + actualMetric := types.NewMetric(ctx, key, value, metricType, attributes) + require.Equal(t, expectedMetric, actualMetric, "metric") + + actualMetric.DestinationOracle = "chain" + expectedId := "key-value-1672531200-chain" + require.Equal(t, expectedId, actualMetric.GetMetricID(), "metric ID") +} diff --git a/x/icaoracle/types/metrics.go b/x/icaoracle/types/metrics.go new file mode 100644 index 00000000000..0273268c844 --- /dev/null +++ b/x/icaoracle/types/metrics.go @@ -0,0 +1,5 @@ +package types + +var ( + MetricType_RedemptionRate = "redemption_rate" +) diff --git a/x/icaoracle/types/oracle.go b/x/icaoracle/types/oracle.go new file mode 100644 index 00000000000..701a1d6de3a --- /dev/null +++ b/x/icaoracle/types/oracle.go @@ -0,0 +1,28 @@ +package types + +import ( + errorsmod "cosmossdk.io/errors" +) + +func (o Oracle) ValidateICASetup() error { + if o.ConnectionId == "" { + return errorsmod.Wrapf(ErrOracleICANotRegistered, "connectionId is empty") + } + if o.ChannelId == "" { + return errorsmod.Wrapf(ErrOracleICANotRegistered, "channelId is empty") + } + if o.PortId == "" { + return errorsmod.Wrapf(ErrOracleICANotRegistered, "portId is empty") + } + if o.IcaAddress == "" { + return errorsmod.Wrapf(ErrOracleICANotRegistered, "ICAAddress is empty") + } + return nil +} + +func (o Oracle) ValidateContractInstantiated() error { + if o.ContractAddress == "" { + return errorsmod.Wrapf(ErrOracleNotInstantiated, "contract address is empty") + } + return nil +} diff --git a/x/icaoracle/types/oracle_test.go b/x/icaoracle/types/oracle_test.go new file mode 100644 index 00000000000..68086758479 --- /dev/null +++ b/x/icaoracle/types/oracle_test.go @@ -0,0 +1,87 @@ +package types_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" +) + +func TestValidateICASetup(t *testing.T) { + validConnectionId := "connection-0" + validChannelId := "channel-0" + validPortId := "port-0" + validIcaAddress := "ica-address" + + tests := []struct { + name string + oracle types.Oracle + err string + }{ + { + name: "successful ICA setup", + oracle: types.Oracle{ + ConnectionId: validConnectionId, + ChannelId: validChannelId, + PortId: validPortId, + IcaAddress: validIcaAddress, + }, + }, + { + name: "invalid connection-id", + oracle: types.Oracle{ + ConnectionId: "", + ChannelId: validChannelId, + PortId: validPortId, + IcaAddress: validIcaAddress, + }, + err: "connectionId is empty", + }, + { + name: "invalid channel-id", + oracle: types.Oracle{ + ConnectionId: validConnectionId, + ChannelId: "", + PortId: validPortId, + IcaAddress: validIcaAddress, + }, + err: "channelId is empty", + }, + { + name: "invalid port-id", + oracle: types.Oracle{ + ConnectionId: validConnectionId, + ChannelId: validChannelId, + PortId: "", + IcaAddress: validIcaAddress, + }, + err: "portId is empty", + }, + { + name: "invalid ICA address", + oracle: types.Oracle{ + ConnectionId: validConnectionId, + ChannelId: validChannelId, + PortId: validPortId, + IcaAddress: "", + }, + err: "ICAAddress is empty", + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + if test.err == "" { + require.NoError(t, test.oracle.ValidateICASetup(), "test: %v", test.name) + } else { + require.ErrorContains(t, test.oracle.ValidateICASetup(), test.err, "test: %v", test.name) + } + }) + } +} + +func TestValidateContractInstantiated(t *testing.T) { + require.NoError(t, types.Oracle{ContractAddress: "contract"}.ValidateContractInstantiated()) + require.ErrorContains(t, types.Oracle{}.ValidateContractInstantiated(), "contract address is empty") +} diff --git a/x/icaoracle/types/params.go b/x/icaoracle/types/params.go new file mode 100644 index 00000000000..4f3215e3504 --- /dev/null +++ b/x/icaoracle/types/params.go @@ -0,0 +1,32 @@ +package types + +import ( + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" +) + +var _ paramtypes.ParamSet = (*Params)(nil) + +// ParamKeyTable the param key table for launch module +func ParamKeyTable() paramtypes.KeyTable { + return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) +} + +// NewParams creates a new Params instance +func NewParams() Params { + return Params{} +} + +// DefaultParams returns a default set of parameters +func DefaultParams() Params { + return NewParams() +} + +// ParamSetPairs get the params.ParamSet +func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { + return paramtypes.ParamSetPairs{} +} + +// Validate validates the set of params +func (p Params) Validate() error { + return nil +} diff --git a/x/icaoracle/types/query.pb.go b/x/icaoracle/types/query.pb.go new file mode 100644 index 00000000000..0fdaaa04bff --- /dev/null +++ b/x/icaoracle/types/query.pb.go @@ -0,0 +1,1780 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/icaoracle/query.proto + +package types + +import ( + context "context" + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// Query's a specific oracle +type QueryOracleRequest struct { + ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` +} + +func (m *QueryOracleRequest) Reset() { *m = QueryOracleRequest{} } +func (m *QueryOracleRequest) String() string { return proto.CompactTextString(m) } +func (*QueryOracleRequest) ProtoMessage() {} +func (*QueryOracleRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d4d4563f64cd9510, []int{0} +} +func (m *QueryOracleRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryOracleRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryOracleRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryOracleRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryOracleRequest.Merge(m, src) +} +func (m *QueryOracleRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryOracleRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryOracleRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryOracleRequest proto.InternalMessageInfo + +func (m *QueryOracleRequest) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +type QueryOracleResponse struct { + Oracle *Oracle `protobuf:"bytes,1,opt,name=oracle,proto3" json:"oracle,omitempty"` +} + +func (m *QueryOracleResponse) Reset() { *m = QueryOracleResponse{} } +func (m *QueryOracleResponse) String() string { return proto.CompactTextString(m) } +func (*QueryOracleResponse) ProtoMessage() {} +func (*QueryOracleResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d4d4563f64cd9510, []int{1} +} +func (m *QueryOracleResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryOracleResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryOracleResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryOracleResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryOracleResponse.Merge(m, src) +} +func (m *QueryOracleResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryOracleResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryOracleResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryOracleResponse proto.InternalMessageInfo + +func (m *QueryOracleResponse) GetOracle() *Oracle { + if m != nil { + return m.Oracle + } + return nil +} + +// Query's all oracle's +type QueryAllOraclesRequest struct { +} + +func (m *QueryAllOraclesRequest) Reset() { *m = QueryAllOraclesRequest{} } +func (m *QueryAllOraclesRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAllOraclesRequest) ProtoMessage() {} +func (*QueryAllOraclesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d4d4563f64cd9510, []int{2} +} +func (m *QueryAllOraclesRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllOraclesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllOraclesRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryAllOraclesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllOraclesRequest.Merge(m, src) +} +func (m *QueryAllOraclesRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryAllOraclesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllOraclesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAllOraclesRequest proto.InternalMessageInfo + +type QueryAllOraclesResponse struct { + Oracles []Oracle `protobuf:"bytes,1,rep,name=oracles,proto3" json:"oracles"` +} + +func (m *QueryAllOraclesResponse) Reset() { *m = QueryAllOraclesResponse{} } +func (m *QueryAllOraclesResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAllOraclesResponse) ProtoMessage() {} +func (*QueryAllOraclesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d4d4563f64cd9510, []int{3} +} +func (m *QueryAllOraclesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllOraclesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllOraclesResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryAllOraclesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllOraclesResponse.Merge(m, src) +} +func (m *QueryAllOraclesResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryAllOraclesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllOraclesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAllOraclesResponse proto.InternalMessageInfo + +func (m *QueryAllOraclesResponse) GetOracles() []Oracle { + if m != nil { + return m.Oracles + } + return nil +} + +// Query's all oracle with a filter for whether they're active +type QueryActiveOraclesRequest struct { + Active bool `protobuf:"varint,1,opt,name=active,proto3" json:"active,omitempty"` +} + +func (m *QueryActiveOraclesRequest) Reset() { *m = QueryActiveOraclesRequest{} } +func (m *QueryActiveOraclesRequest) String() string { return proto.CompactTextString(m) } +func (*QueryActiveOraclesRequest) ProtoMessage() {} +func (*QueryActiveOraclesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d4d4563f64cd9510, []int{4} +} +func (m *QueryActiveOraclesRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryActiveOraclesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryActiveOraclesRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryActiveOraclesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryActiveOraclesRequest.Merge(m, src) +} +func (m *QueryActiveOraclesRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryActiveOraclesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryActiveOraclesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryActiveOraclesRequest proto.InternalMessageInfo + +func (m *QueryActiveOraclesRequest) GetActive() bool { + if m != nil { + return m.Active + } + return false +} + +type QueryActiveOraclesResponse struct { + Oracles []Oracle `protobuf:"bytes,1,rep,name=oracles,proto3" json:"oracles"` +} + +func (m *QueryActiveOraclesResponse) Reset() { *m = QueryActiveOraclesResponse{} } +func (m *QueryActiveOraclesResponse) String() string { return proto.CompactTextString(m) } +func (*QueryActiveOraclesResponse) ProtoMessage() {} +func (*QueryActiveOraclesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d4d4563f64cd9510, []int{5} +} +func (m *QueryActiveOraclesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryActiveOraclesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryActiveOraclesResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryActiveOraclesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryActiveOraclesResponse.Merge(m, src) +} +func (m *QueryActiveOraclesResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryActiveOraclesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryActiveOraclesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryActiveOraclesResponse proto.InternalMessageInfo + +func (m *QueryActiveOraclesResponse) GetOracles() []Oracle { + if m != nil { + return m.Oracles + } + return nil +} + +// Query's metric's with optional filters +type QueryMetricsRequest struct { + MetricKey string `protobuf:"bytes,1,opt,name=metric_key,json=metricKey,proto3" json:"metric_key,omitempty"` + OracleChainId string `protobuf:"bytes,2,opt,name=oracle_chain_id,json=oracleChainId,proto3" json:"oracle_chain_id,omitempty"` +} + +func (m *QueryMetricsRequest) Reset() { *m = QueryMetricsRequest{} } +func (m *QueryMetricsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryMetricsRequest) ProtoMessage() {} +func (*QueryMetricsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_d4d4563f64cd9510, []int{6} +} +func (m *QueryMetricsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryMetricsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryMetricsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryMetricsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryMetricsRequest.Merge(m, src) +} +func (m *QueryMetricsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryMetricsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryMetricsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryMetricsRequest proto.InternalMessageInfo + +func (m *QueryMetricsRequest) GetMetricKey() string { + if m != nil { + return m.MetricKey + } + return "" +} + +func (m *QueryMetricsRequest) GetOracleChainId() string { + if m != nil { + return m.OracleChainId + } + return "" +} + +type QueryMetricsResponse struct { + Metrics []Metric `protobuf:"bytes,1,rep,name=metrics,proto3" json:"metrics"` +} + +func (m *QueryMetricsResponse) Reset() { *m = QueryMetricsResponse{} } +func (m *QueryMetricsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryMetricsResponse) ProtoMessage() {} +func (*QueryMetricsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_d4d4563f64cd9510, []int{7} +} +func (m *QueryMetricsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryMetricsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryMetricsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryMetricsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryMetricsResponse.Merge(m, src) +} +func (m *QueryMetricsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryMetricsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryMetricsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryMetricsResponse proto.InternalMessageInfo + +func (m *QueryMetricsResponse) GetMetrics() []Metric { + if m != nil { + return m.Metrics + } + return nil +} + +func init() { + proto.RegisterType((*QueryOracleRequest)(nil), "stride.icaoracle.QueryOracleRequest") + proto.RegisterType((*QueryOracleResponse)(nil), "stride.icaoracle.QueryOracleResponse") + proto.RegisterType((*QueryAllOraclesRequest)(nil), "stride.icaoracle.QueryAllOraclesRequest") + proto.RegisterType((*QueryAllOraclesResponse)(nil), "stride.icaoracle.QueryAllOraclesResponse") + proto.RegisterType((*QueryActiveOraclesRequest)(nil), "stride.icaoracle.QueryActiveOraclesRequest") + proto.RegisterType((*QueryActiveOraclesResponse)(nil), "stride.icaoracle.QueryActiveOraclesResponse") + proto.RegisterType((*QueryMetricsRequest)(nil), "stride.icaoracle.QueryMetricsRequest") + proto.RegisterType((*QueryMetricsResponse)(nil), "stride.icaoracle.QueryMetricsResponse") +} + +func init() { proto.RegisterFile("stride/icaoracle/query.proto", fileDescriptor_d4d4563f64cd9510) } + +var fileDescriptor_d4d4563f64cd9510 = []byte{ + // 518 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0x41, 0x6b, 0x13, 0x41, + 0x14, 0xce, 0xd4, 0x9a, 0xb4, 0x4f, 0x8a, 0xf2, 0x2c, 0x35, 0x5d, 0xea, 0x1a, 0x16, 0x5b, 0x2b, + 0xda, 0x1d, 0x4d, 0x0e, 0xf6, 0x6a, 0x3d, 0x88, 0x68, 0x51, 0x53, 0xf0, 0x20, 0x42, 0xd8, 0x6c, + 0x86, 0xed, 0x60, 0xba, 0x93, 0xee, 0x4c, 0x8a, 0x8b, 0x78, 0xf1, 0xe2, 0x4d, 0x0a, 0xfe, 0x04, + 0xff, 0x4c, 0x8f, 0x05, 0x2f, 0x82, 0x20, 0x92, 0xf8, 0x43, 0xa4, 0x33, 0x93, 0xd4, 0x75, 0x93, + 0x26, 0xea, 0x29, 0x3b, 0xef, 0x7d, 0xef, 0xfb, 0xbe, 0x79, 0xf3, 0x11, 0x58, 0x91, 0x2a, 0xe1, + 0x2d, 0x46, 0x79, 0x18, 0x88, 0x24, 0x08, 0xdb, 0x8c, 0xee, 0x77, 0x59, 0x92, 0xfa, 0x9d, 0x44, + 0x28, 0x81, 0x97, 0x4c, 0xd7, 0x1f, 0x76, 0x9d, 0xc5, 0x48, 0x44, 0x42, 0x37, 0xe9, 0xc9, 0x97, + 0xc1, 0x39, 0x2b, 0x91, 0x10, 0x51, 0x9b, 0xd1, 0xa0, 0xc3, 0x69, 0x10, 0xc7, 0x42, 0x05, 0x8a, + 0x8b, 0x58, 0xda, 0x6e, 0x25, 0xa7, 0x31, 0xfc, 0x32, 0x08, 0x8f, 0x02, 0x3e, 0x3f, 0x91, 0x7d, + 0xaa, 0x8b, 0x75, 0xb6, 0xdf, 0x65, 0x52, 0xe1, 0x32, 0xcc, 0x85, 0xbb, 0x01, 0x8f, 0x1b, 0xbc, + 0x55, 0x26, 0x15, 0xb2, 0x3e, 0x5f, 0x2f, 0xe9, 0xf3, 0xa3, 0x96, 0xf7, 0x10, 0x2e, 0x67, 0x06, + 0x64, 0x47, 0xc4, 0x92, 0xe1, 0x1d, 0x28, 0x1a, 0x5e, 0x8d, 0xbf, 0x50, 0x2d, 0xfb, 0x7f, 0x5e, + 0xc0, 0xb7, 0x13, 0x16, 0xe7, 0x95, 0x61, 0x49, 0x13, 0xdd, 0x6f, 0xb7, 0x4d, 0x47, 0x5a, 0x75, + 0x6f, 0x07, 0xae, 0xe4, 0x3a, 0x56, 0x66, 0x13, 0x4a, 0x66, 0x5c, 0x96, 0x49, 0xe5, 0xdc, 0x59, + 0x3a, 0x5b, 0xb3, 0x47, 0xdf, 0xaf, 0x15, 0xea, 0x03, 0xb8, 0x57, 0x83, 0x65, 0x43, 0x1a, 0x2a, + 0x7e, 0xc0, 0xb2, 0x8a, 0xb8, 0x04, 0xc5, 0x40, 0xd7, 0xb5, 0xfb, 0xb9, 0xba, 0x3d, 0x79, 0x2f, + 0xc0, 0x19, 0x35, 0xf4, 0xdf, 0x66, 0x5e, 0xd9, 0x25, 0x6e, 0x33, 0x95, 0xf0, 0x70, 0x68, 0xe3, + 0x2a, 0xc0, 0x9e, 0xae, 0x34, 0x5e, 0xb3, 0xd4, 0x2e, 0x7e, 0xde, 0x54, 0x1e, 0xb3, 0x14, 0xd7, + 0xe0, 0xa2, 0x21, 0x68, 0x0c, 0x1f, 0x67, 0x46, 0x63, 0x16, 0x4c, 0xf9, 0x81, 0x7d, 0xa2, 0x67, + 0xb0, 0x98, 0x65, 0x3f, 0xf5, 0x6b, 0xc8, 0xce, 0xf0, 0x6b, 0x66, 0x06, 0x7e, 0x2d, 0xbc, 0xfa, + 0x6d, 0x16, 0xce, 0x6b, 0x4a, 0xfc, 0x48, 0xa0, 0x68, 0xee, 0x84, 0xd7, 0xf3, 0xd3, 0xf9, 0x28, + 0x39, 0xab, 0x13, 0x50, 0xc6, 0x9b, 0x77, 0xef, 0xfd, 0x97, 0x9f, 0x9f, 0x66, 0xee, 0x22, 0xa5, + 0x3b, 0x1a, 0xbe, 0xf1, 0x24, 0x68, 0x4a, 0x9a, 0x8b, 0xaf, 0xfd, 0x79, 0x3b, 0x58, 0xc0, 0x3b, + 0x3c, 0x24, 0x00, 0xa7, 0x41, 0xc1, 0xf5, 0x31, 0x72, 0xb9, 0x94, 0x39, 0x37, 0xa7, 0x40, 0x5a, + 0x73, 0x1b, 0xda, 0xdc, 0x0d, 0x5c, 0x9d, 0xc6, 0x9c, 0xc4, 0xcf, 0x04, 0x16, 0x32, 0x89, 0xc1, + 0x5b, 0xe3, 0xb4, 0x46, 0x84, 0xd1, 0xb9, 0x3d, 0x1d, 0xf8, 0x5f, 0x16, 0x27, 0x69, 0x33, 0x6d, + 0x98, 0x6c, 0xe3, 0x07, 0x02, 0x25, 0x9b, 0x10, 0x1c, 0xf7, 0x48, 0xd9, 0x7c, 0x3a, 0x6b, 0x93, + 0x60, 0x7f, 0xb7, 0x2f, 0x9b, 0xae, 0xad, 0xed, 0xa3, 0x9e, 0x4b, 0x8e, 0x7b, 0x2e, 0xf9, 0xd1, + 0x73, 0xc9, 0x61, 0xdf, 0x2d, 0x1c, 0xf7, 0xdd, 0xc2, 0xd7, 0xbe, 0x5b, 0x78, 0x59, 0x8b, 0xb8, + 0xda, 0xed, 0x36, 0xfd, 0x50, 0xec, 0x8d, 0xa2, 0x3a, 0xa8, 0x6e, 0xd2, 0x37, 0xbf, 0x11, 0xaa, + 0xb4, 0xc3, 0x64, 0xb3, 0xa8, 0xff, 0xd9, 0x6a, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0xdb, 0x72, + 0x5c, 0x2a, 0x61, 0x05, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type QueryClient interface { + // Query a specific oracle + Oracle(ctx context.Context, in *QueryOracleRequest, opts ...grpc.CallOption) (*QueryOracleResponse, error) + // Query all oracles + AllOracles(ctx context.Context, in *QueryAllOraclesRequest, opts ...grpc.CallOption) (*QueryAllOraclesResponse, error) + // Query oracles with active ffilter: + // - /oracles/by_active?active=true + // - /oracles/by_active?active=false + ActiveOracles(ctx context.Context, in *QueryActiveOraclesRequest, opts ...grpc.CallOption) (*QueryActiveOraclesResponse, error) + // Query metrics with optional filters + // + // Ex: + // - /metrics + // - /metrics?metric_key=X + // - /metrics?oracle_chain_id=Y + Metrics(ctx context.Context, in *QueryMetricsRequest, opts ...grpc.CallOption) (*QueryMetricsResponse, error) +} + +type queryClient struct { + cc grpc1.ClientConn +} + +func NewQueryClient(cc grpc1.ClientConn) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) Oracle(ctx context.Context, in *QueryOracleRequest, opts ...grpc.CallOption) (*QueryOracleResponse, error) { + out := new(QueryOracleResponse) + err := c.cc.Invoke(ctx, "/stride.icaoracle.Query/Oracle", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) AllOracles(ctx context.Context, in *QueryAllOraclesRequest, opts ...grpc.CallOption) (*QueryAllOraclesResponse, error) { + out := new(QueryAllOraclesResponse) + err := c.cc.Invoke(ctx, "/stride.icaoracle.Query/AllOracles", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) ActiveOracles(ctx context.Context, in *QueryActiveOraclesRequest, opts ...grpc.CallOption) (*QueryActiveOraclesResponse, error) { + out := new(QueryActiveOraclesResponse) + err := c.cc.Invoke(ctx, "/stride.icaoracle.Query/ActiveOracles", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) Metrics(ctx context.Context, in *QueryMetricsRequest, opts ...grpc.CallOption) (*QueryMetricsResponse, error) { + out := new(QueryMetricsResponse) + err := c.cc.Invoke(ctx, "/stride.icaoracle.Query/Metrics", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +type QueryServer interface { + // Query a specific oracle + Oracle(context.Context, *QueryOracleRequest) (*QueryOracleResponse, error) + // Query all oracles + AllOracles(context.Context, *QueryAllOraclesRequest) (*QueryAllOraclesResponse, error) + // Query oracles with active ffilter: + // - /oracles/by_active?active=true + // - /oracles/by_active?active=false + ActiveOracles(context.Context, *QueryActiveOraclesRequest) (*QueryActiveOraclesResponse, error) + // Query metrics with optional filters + // + // Ex: + // - /metrics + // - /metrics?metric_key=X + // - /metrics?oracle_chain_id=Y + Metrics(context.Context, *QueryMetricsRequest) (*QueryMetricsResponse, error) +} + +// UnimplementedQueryServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (*UnimplementedQueryServer) Oracle(ctx context.Context, req *QueryOracleRequest) (*QueryOracleResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Oracle not implemented") +} +func (*UnimplementedQueryServer) AllOracles(ctx context.Context, req *QueryAllOraclesRequest) (*QueryAllOraclesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AllOracles not implemented") +} +func (*UnimplementedQueryServer) ActiveOracles(ctx context.Context, req *QueryActiveOraclesRequest) (*QueryActiveOraclesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ActiveOracles not implemented") +} +func (*UnimplementedQueryServer) Metrics(ctx context.Context, req *QueryMetricsRequest) (*QueryMetricsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Metrics not implemented") +} + +func RegisterQueryServer(s grpc1.Server, srv QueryServer) { + s.RegisterService(&_Query_serviceDesc, srv) +} + +func _Query_Oracle_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryOracleRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Oracle(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.icaoracle.Query/Oracle", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Oracle(ctx, req.(*QueryOracleRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_AllOracles_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllOraclesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).AllOracles(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.icaoracle.Query/AllOracles", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).AllOracles(ctx, req.(*QueryAllOraclesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_ActiveOracles_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryActiveOraclesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ActiveOracles(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.icaoracle.Query/ActiveOracles", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ActiveOracles(ctx, req.(*QueryActiveOraclesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_Metrics_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryMetricsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Metrics(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.icaoracle.Query/Metrics", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Metrics(ctx, req.(*QueryMetricsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Query_serviceDesc = grpc.ServiceDesc{ + ServiceName: "stride.icaoracle.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Oracle", + Handler: _Query_Oracle_Handler, + }, + { + MethodName: "AllOracles", + Handler: _Query_AllOracles_Handler, + }, + { + MethodName: "ActiveOracles", + Handler: _Query_ActiveOracles_Handler, + }, + { + MethodName: "Metrics", + Handler: _Query_Metrics_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "stride/icaoracle/query.proto", +} + +func (m *QueryOracleRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryOracleRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryOracleRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryOracleResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryOracleResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryOracleResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Oracle != nil { + { + size, err := m.Oracle.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryAllOraclesRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryAllOraclesRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllOraclesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryAllOraclesResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryAllOraclesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllOraclesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Oracles) > 0 { + for iNdEx := len(m.Oracles) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Oracles[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryActiveOraclesRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryActiveOraclesRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryActiveOraclesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Active { + i-- + if m.Active { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryActiveOraclesResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryActiveOraclesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryActiveOraclesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Oracles) > 0 { + for iNdEx := len(m.Oracles) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Oracles[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryMetricsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryMetricsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryMetricsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.OracleChainId) > 0 { + i -= len(m.OracleChainId) + copy(dAtA[i:], m.OracleChainId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.OracleChainId))) + i-- + dAtA[i] = 0x12 + } + if len(m.MetricKey) > 0 { + i -= len(m.MetricKey) + copy(dAtA[i:], m.MetricKey) + i = encodeVarintQuery(dAtA, i, uint64(len(m.MetricKey))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryMetricsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryMetricsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryMetricsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Metrics) > 0 { + for iNdEx := len(m.Metrics) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Metrics[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *QueryOracleRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryOracleResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Oracle != nil { + l = m.Oracle.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllOraclesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryAllOraclesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Oracles) > 0 { + for _, e := range m.Oracles { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryActiveOraclesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Active { + n += 2 + } + return n +} + +func (m *QueryActiveOraclesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Oracles) > 0 { + for _, e := range m.Oracles { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryMetricsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.MetricKey) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.OracleChainId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryMetricsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Metrics) > 0 { + for _, e := range m.Metrics { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryOracleRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryOracleRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryOracleRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryOracleResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryOracleResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryOracleResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Oracle", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Oracle == nil { + m.Oracle = &Oracle{} + } + if err := m.Oracle.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllOraclesRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAllOraclesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllOraclesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllOraclesResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAllOraclesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllOraclesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Oracles", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Oracles = append(m.Oracles, Oracle{}) + if err := m.Oracles[len(m.Oracles)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryActiveOraclesRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryActiveOraclesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryActiveOraclesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Active", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Active = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryActiveOraclesResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryActiveOraclesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryActiveOraclesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Oracles", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Oracles = append(m.Oracles, Oracle{}) + if err := m.Oracles[len(m.Oracles)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryMetricsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryMetricsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryMetricsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MetricKey", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MetricKey = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OracleChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OracleChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryMetricsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryMetricsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryMetricsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metrics", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Metrics = append(m.Metrics, Metric{}) + if err := m.Metrics[len(m.Metrics)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipQuery(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthQuery + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupQuery + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthQuery + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/icaoracle/types/query.pb.gw.go b/x/icaoracle/types/query.pb.gw.go new file mode 100644 index 00000000000..3638baf3842 --- /dev/null +++ b/x/icaoracle/types/query.pb.gw.go @@ -0,0 +1,420 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: stride/icaoracle/query.proto + +/* +Package types is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package types + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage +var _ = metadata.Join + +func request_Query_Oracle_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryOracleRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["chain_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "chain_id") + } + + protoReq.ChainId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "chain_id", err) + } + + msg, err := client.Oracle(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Oracle_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryOracleRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["chain_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "chain_id") + } + + protoReq.ChainId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "chain_id", err) + } + + msg, err := server.Oracle(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_AllOracles_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllOraclesRequest + var metadata runtime.ServerMetadata + + msg, err := client.AllOracles(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_AllOracles_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllOraclesRequest + var metadata runtime.ServerMetadata + + msg, err := server.AllOracles(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_ActiveOracles_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Query_ActiveOracles_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryActiveOraclesRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ActiveOracles_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ActiveOracles(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_ActiveOracles_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryActiveOraclesRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ActiveOracles_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ActiveOracles(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_Metrics_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Query_Metrics_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryMetricsRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_Metrics_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.Metrics(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Metrics_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryMetricsRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_Metrics_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.Metrics(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". +// UnaryRPC :call QueryServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { + + mux.Handle("GET", pattern_Query_Oracle_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_Oracle_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Oracle_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_AllOracles_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_AllOracles_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_AllOracles_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_ActiveOracles_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_ActiveOracles_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_ActiveOracles_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_Metrics_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_Metrics_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Metrics_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterQueryHandler(ctx, mux, conn) +} + +// RegisterQueryHandler registers the http handlers for service Query to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn)) +} + +// RegisterQueryHandlerClient registers the http handlers for service Query +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "QueryClient" to call the correct interceptors. +func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { + + mux.Handle("GET", pattern_Query_Oracle_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_Oracle_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Oracle_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_AllOracles_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_AllOracles_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_AllOracles_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_ActiveOracles_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_ActiveOracles_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_ActiveOracles_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_Metrics_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_Metrics_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Metrics_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Query_Oracle_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"Stride-Labs", "stride", "icaoracle", "oracle", "chain_id"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_AllOracles_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"Stride-Labs", "stride", "icaoracle", "oracles"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_ActiveOracles_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"Stride-Labs", "stride", "icaoracle", "oracles", "by_active"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_Metrics_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"Stride-Labs", "stride", "icaoracle", "metrics"}, "", runtime.AssumeColonVerbOpt(false))) +) + +var ( + forward_Query_Oracle_0 = runtime.ForwardResponseMessage + + forward_Query_AllOracles_0 = runtime.ForwardResponseMessage + + forward_Query_ActiveOracles_0 = runtime.ForwardResponseMessage + + forward_Query_Metrics_0 = runtime.ForwardResponseMessage +) diff --git a/x/icaoracle/types/tx.pb.go b/x/icaoracle/types/tx.pb.go new file mode 100644 index 00000000000..1eee6adba35 --- /dev/null +++ b/x/icaoracle/types/tx.pb.go @@ -0,0 +1,2252 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/icaoracle/tx.proto + +package types + +import ( + context "context" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + _ "github.com/cosmos/cosmos-sdk/types/msgservice" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// Adds a new oracle +type MsgAddOracle struct { + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + ConnectionId string `protobuf:"bytes,2,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty"` +} + +func (m *MsgAddOracle) Reset() { *m = MsgAddOracle{} } +func (m *MsgAddOracle) String() string { return proto.CompactTextString(m) } +func (*MsgAddOracle) ProtoMessage() {} +func (*MsgAddOracle) Descriptor() ([]byte, []int) { + return fileDescriptor_6e58a377bb8520d3, []int{0} +} +func (m *MsgAddOracle) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgAddOracle) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgAddOracle.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgAddOracle) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgAddOracle.Merge(m, src) +} +func (m *MsgAddOracle) XXX_Size() int { + return m.Size() +} +func (m *MsgAddOracle) XXX_DiscardUnknown() { + xxx_messageInfo_MsgAddOracle.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgAddOracle proto.InternalMessageInfo + +func (m *MsgAddOracle) GetCreator() string { + if m != nil { + return m.Creator + } + return "" +} + +func (m *MsgAddOracle) GetConnectionId() string { + if m != nil { + return m.ConnectionId + } + return "" +} + +type MsgAddOracleResponse struct { +} + +func (m *MsgAddOracleResponse) Reset() { *m = MsgAddOracleResponse{} } +func (m *MsgAddOracleResponse) String() string { return proto.CompactTextString(m) } +func (*MsgAddOracleResponse) ProtoMessage() {} +func (*MsgAddOracleResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_6e58a377bb8520d3, []int{1} +} +func (m *MsgAddOracleResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgAddOracleResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgAddOracleResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgAddOracleResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgAddOracleResponse.Merge(m, src) +} +func (m *MsgAddOracleResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgAddOracleResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgAddOracleResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgAddOracleResponse proto.InternalMessageInfo + +// Instantiates the oracle's CW contract +type MsgInstantiateOracle struct { + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + OracleChainId string `protobuf:"bytes,2,opt,name=oracle_chain_id,json=oracleChainId,proto3" json:"oracle_chain_id,omitempty"` + ContractCodeId uint64 `protobuf:"varint,3,opt,name=contract_code_id,json=contractCodeId,proto3" json:"contract_code_id,omitempty"` + TransferChannelOnOracle string `protobuf:"bytes,4,opt,name=transfer_channel_on_oracle,json=transferChannelOnOracle,proto3" json:"transfer_channel_on_oracle,omitempty"` +} + +func (m *MsgInstantiateOracle) Reset() { *m = MsgInstantiateOracle{} } +func (m *MsgInstantiateOracle) String() string { return proto.CompactTextString(m) } +func (*MsgInstantiateOracle) ProtoMessage() {} +func (*MsgInstantiateOracle) Descriptor() ([]byte, []int) { + return fileDescriptor_6e58a377bb8520d3, []int{2} +} +func (m *MsgInstantiateOracle) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgInstantiateOracle) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgInstantiateOracle.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgInstantiateOracle) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgInstantiateOracle.Merge(m, src) +} +func (m *MsgInstantiateOracle) XXX_Size() int { + return m.Size() +} +func (m *MsgInstantiateOracle) XXX_DiscardUnknown() { + xxx_messageInfo_MsgInstantiateOracle.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgInstantiateOracle proto.InternalMessageInfo + +func (m *MsgInstantiateOracle) GetCreator() string { + if m != nil { + return m.Creator + } + return "" +} + +func (m *MsgInstantiateOracle) GetOracleChainId() string { + if m != nil { + return m.OracleChainId + } + return "" +} + +func (m *MsgInstantiateOracle) GetContractCodeId() uint64 { + if m != nil { + return m.ContractCodeId + } + return 0 +} + +func (m *MsgInstantiateOracle) GetTransferChannelOnOracle() string { + if m != nil { + return m.TransferChannelOnOracle + } + return "" +} + +type MsgInstantiateOracleResponse struct { +} + +func (m *MsgInstantiateOracleResponse) Reset() { *m = MsgInstantiateOracleResponse{} } +func (m *MsgInstantiateOracleResponse) String() string { return proto.CompactTextString(m) } +func (*MsgInstantiateOracleResponse) ProtoMessage() {} +func (*MsgInstantiateOracleResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_6e58a377bb8520d3, []int{3} +} +func (m *MsgInstantiateOracleResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgInstantiateOracleResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgInstantiateOracleResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgInstantiateOracleResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgInstantiateOracleResponse.Merge(m, src) +} +func (m *MsgInstantiateOracleResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgInstantiateOracleResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgInstantiateOracleResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgInstantiateOracleResponse proto.InternalMessageInfo + +// Restore's a closed ICA channel for a given oracle +type MsgRestoreOracleICA struct { + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + OracleChainId string `protobuf:"bytes,2,opt,name=oracle_chain_id,json=oracleChainId,proto3" json:"oracle_chain_id,omitempty"` +} + +func (m *MsgRestoreOracleICA) Reset() { *m = MsgRestoreOracleICA{} } +func (m *MsgRestoreOracleICA) String() string { return proto.CompactTextString(m) } +func (*MsgRestoreOracleICA) ProtoMessage() {} +func (*MsgRestoreOracleICA) Descriptor() ([]byte, []int) { + return fileDescriptor_6e58a377bb8520d3, []int{4} +} +func (m *MsgRestoreOracleICA) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRestoreOracleICA) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRestoreOracleICA.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRestoreOracleICA) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRestoreOracleICA.Merge(m, src) +} +func (m *MsgRestoreOracleICA) XXX_Size() int { + return m.Size() +} +func (m *MsgRestoreOracleICA) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRestoreOracleICA.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRestoreOracleICA proto.InternalMessageInfo + +func (m *MsgRestoreOracleICA) GetCreator() string { + if m != nil { + return m.Creator + } + return "" +} + +func (m *MsgRestoreOracleICA) GetOracleChainId() string { + if m != nil { + return m.OracleChainId + } + return "" +} + +type MsgRestoreOracleICAResponse struct { +} + +func (m *MsgRestoreOracleICAResponse) Reset() { *m = MsgRestoreOracleICAResponse{} } +func (m *MsgRestoreOracleICAResponse) String() string { return proto.CompactTextString(m) } +func (*MsgRestoreOracleICAResponse) ProtoMessage() {} +func (*MsgRestoreOracleICAResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_6e58a377bb8520d3, []int{5} +} +func (m *MsgRestoreOracleICAResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRestoreOracleICAResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRestoreOracleICAResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRestoreOracleICAResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRestoreOracleICAResponse.Merge(m, src) +} +func (m *MsgRestoreOracleICAResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgRestoreOracleICAResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRestoreOracleICAResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRestoreOracleICAResponse proto.InternalMessageInfo + +// Toggle's whether an oracle is active and should receive metric updates +type MsgToggleOracle struct { + // authority is the address that controls the module (defaults to x/gov unless + // overwritten). + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + OracleChainId string `protobuf:"bytes,2,opt,name=oracle_chain_id,json=oracleChainId,proto3" json:"oracle_chain_id,omitempty"` + Active bool `protobuf:"varint,3,opt,name=active,proto3" json:"active,omitempty"` +} + +func (m *MsgToggleOracle) Reset() { *m = MsgToggleOracle{} } +func (m *MsgToggleOracle) String() string { return proto.CompactTextString(m) } +func (*MsgToggleOracle) ProtoMessage() {} +func (*MsgToggleOracle) Descriptor() ([]byte, []int) { + return fileDescriptor_6e58a377bb8520d3, []int{6} +} +func (m *MsgToggleOracle) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgToggleOracle) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgToggleOracle.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgToggleOracle) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgToggleOracle.Merge(m, src) +} +func (m *MsgToggleOracle) XXX_Size() int { + return m.Size() +} +func (m *MsgToggleOracle) XXX_DiscardUnknown() { + xxx_messageInfo_MsgToggleOracle.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgToggleOracle proto.InternalMessageInfo + +func (m *MsgToggleOracle) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +func (m *MsgToggleOracle) GetOracleChainId() string { + if m != nil { + return m.OracleChainId + } + return "" +} + +func (m *MsgToggleOracle) GetActive() bool { + if m != nil { + return m.Active + } + return false +} + +type MsgToggleOracleResponse struct { +} + +func (m *MsgToggleOracleResponse) Reset() { *m = MsgToggleOracleResponse{} } +func (m *MsgToggleOracleResponse) String() string { return proto.CompactTextString(m) } +func (*MsgToggleOracleResponse) ProtoMessage() {} +func (*MsgToggleOracleResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_6e58a377bb8520d3, []int{7} +} +func (m *MsgToggleOracleResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgToggleOracleResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgToggleOracleResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgToggleOracleResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgToggleOracleResponse.Merge(m, src) +} +func (m *MsgToggleOracleResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgToggleOracleResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgToggleOracleResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgToggleOracleResponse proto.InternalMessageInfo + +// Removes an oracle completely +type MsgRemoveOracle struct { + // authority is the address that controls the module (defaults to x/gov unless + // overwritten). + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + OracleChainId string `protobuf:"bytes,2,opt,name=oracle_chain_id,json=oracleChainId,proto3" json:"oracle_chain_id,omitempty"` +} + +func (m *MsgRemoveOracle) Reset() { *m = MsgRemoveOracle{} } +func (m *MsgRemoveOracle) String() string { return proto.CompactTextString(m) } +func (*MsgRemoveOracle) ProtoMessage() {} +func (*MsgRemoveOracle) Descriptor() ([]byte, []int) { + return fileDescriptor_6e58a377bb8520d3, []int{8} +} +func (m *MsgRemoveOracle) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRemoveOracle) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRemoveOracle.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRemoveOracle) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRemoveOracle.Merge(m, src) +} +func (m *MsgRemoveOracle) XXX_Size() int { + return m.Size() +} +func (m *MsgRemoveOracle) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRemoveOracle.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRemoveOracle proto.InternalMessageInfo + +func (m *MsgRemoveOracle) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +func (m *MsgRemoveOracle) GetOracleChainId() string { + if m != nil { + return m.OracleChainId + } + return "" +} + +type MsgRemoveOracleResponse struct { +} + +func (m *MsgRemoveOracleResponse) Reset() { *m = MsgRemoveOracleResponse{} } +func (m *MsgRemoveOracleResponse) String() string { return proto.CompactTextString(m) } +func (*MsgRemoveOracleResponse) ProtoMessage() {} +func (*MsgRemoveOracleResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_6e58a377bb8520d3, []int{9} +} +func (m *MsgRemoveOracleResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRemoveOracleResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRemoveOracleResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRemoveOracleResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRemoveOracleResponse.Merge(m, src) +} +func (m *MsgRemoveOracleResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgRemoveOracleResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRemoveOracleResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRemoveOracleResponse proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MsgAddOracle)(nil), "stride.icaoracle.MsgAddOracle") + proto.RegisterType((*MsgAddOracleResponse)(nil), "stride.icaoracle.MsgAddOracleResponse") + proto.RegisterType((*MsgInstantiateOracle)(nil), "stride.icaoracle.MsgInstantiateOracle") + proto.RegisterType((*MsgInstantiateOracleResponse)(nil), "stride.icaoracle.MsgInstantiateOracleResponse") + proto.RegisterType((*MsgRestoreOracleICA)(nil), "stride.icaoracle.MsgRestoreOracleICA") + proto.RegisterType((*MsgRestoreOracleICAResponse)(nil), "stride.icaoracle.MsgRestoreOracleICAResponse") + proto.RegisterType((*MsgToggleOracle)(nil), "stride.icaoracle.MsgToggleOracle") + proto.RegisterType((*MsgToggleOracleResponse)(nil), "stride.icaoracle.MsgToggleOracleResponse") + proto.RegisterType((*MsgRemoveOracle)(nil), "stride.icaoracle.MsgRemoveOracle") + proto.RegisterType((*MsgRemoveOracleResponse)(nil), "stride.icaoracle.MsgRemoveOracleResponse") +} + +func init() { proto.RegisterFile("stride/icaoracle/tx.proto", fileDescriptor_6e58a377bb8520d3) } + +var fileDescriptor_6e58a377bb8520d3 = []byte{ + // 628 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0xcf, 0x6a, 0x13, 0x41, + 0x1c, 0xee, 0xb6, 0xb5, 0xda, 0xa1, 0xb5, 0xed, 0x5a, 0xda, 0x64, 0xb5, 0x4b, 0xbb, 0x62, 0xad, + 0xc5, 0xee, 0x62, 0x0a, 0x22, 0xf1, 0x94, 0xe6, 0x14, 0x30, 0x14, 0x36, 0x9e, 0x44, 0x58, 0x26, + 0xb3, 0xe3, 0x66, 0x31, 0x99, 0x09, 0x33, 0xd3, 0xd0, 0xde, 0xc4, 0x63, 0x4f, 0x7d, 0x03, 0xf1, + 0x0d, 0x72, 0x10, 0x7c, 0x05, 0x8f, 0xc5, 0x93, 0x47, 0x49, 0x0e, 0x79, 0x01, 0x1f, 0x40, 0xf6, + 0xff, 0x66, 0xb3, 0x35, 0x01, 0xd1, 0x4b, 0xc2, 0xef, 0xfb, 0x7d, 0xf3, 0xcd, 0xf7, 0xcd, 0xec, + 0xcc, 0x80, 0x22, 0x17, 0xcc, 0xb5, 0xb1, 0xe1, 0x22, 0x48, 0x19, 0x44, 0x6d, 0x6c, 0x88, 0x73, + 0xbd, 0xcb, 0xa8, 0xa0, 0xf2, 0x7a, 0xd0, 0xd2, 0xe3, 0x96, 0xb2, 0x01, 0x3b, 0x2e, 0xa1, 0x86, + 0xff, 0x1b, 0x90, 0x94, 0x22, 0xa2, 0xbc, 0x43, 0xb9, 0xe5, 0x57, 0x46, 0x50, 0x84, 0xad, 0xed, + 0xa0, 0x32, 0x3a, 0xdc, 0x31, 0x7a, 0xcf, 0xbc, 0xbf, 0xa0, 0xa1, 0x5d, 0x49, 0x60, 0xa5, 0xce, + 0x9d, 0x8a, 0x6d, 0x9f, 0xfa, 0xba, 0x72, 0x09, 0xdc, 0x46, 0x0c, 0x43, 0x41, 0x59, 0x41, 0xda, + 0x95, 0x0e, 0x96, 0x4f, 0x0a, 0xdf, 0xbf, 0x1c, 0x6d, 0x86, 0x62, 0x15, 0xdb, 0x66, 0x98, 0xf3, + 0x86, 0x60, 0x2e, 0x71, 0xcc, 0x88, 0x28, 0x3f, 0x04, 0xab, 0x88, 0x12, 0x82, 0x91, 0x70, 0x29, + 0xb1, 0x5c, 0xbb, 0x30, 0xef, 0x8d, 0x34, 0x57, 0x12, 0xb0, 0x66, 0x97, 0x1f, 0x7f, 0x1c, 0xf5, + 0x0f, 0xa3, 0x21, 0x97, 0xa3, 0xfe, 0xe1, 0x56, 0x92, 0x33, 0xed, 0x40, 0xdb, 0x02, 0x9b, 0xe9, + 0xda, 0xc4, 0xbc, 0x4b, 0x09, 0xc7, 0xda, 0xe5, 0xbc, 0xdf, 0xa8, 0x11, 0x2e, 0x20, 0x11, 0x2e, + 0x14, 0xf8, 0x2f, 0x2c, 0xef, 0x83, 0xb5, 0x60, 0x6e, 0x0b, 0xb5, 0xa0, 0x9b, 0x32, 0xbd, 0x1a, + 0xc0, 0x55, 0x0f, 0xad, 0xd9, 0xf2, 0x01, 0x58, 0x47, 0x94, 0x08, 0x06, 0x91, 0xb0, 0x10, 0xb5, + 0xb1, 0x47, 0x5c, 0xd8, 0x95, 0x0e, 0x16, 0xcd, 0xbb, 0x11, 0x5e, 0xa5, 0x36, 0xae, 0xd9, 0xf2, + 0x4b, 0xa0, 0x08, 0x06, 0x09, 0x7f, 0x87, 0x99, 0xa7, 0x49, 0x08, 0x6e, 0x5b, 0x94, 0x58, 0x81, + 0x5c, 0x61, 0xd1, 0x17, 0xdf, 0x8e, 0x18, 0xd5, 0x80, 0x70, 0x4a, 0x82, 0x08, 0x65, 0x23, 0xbb, + 0x38, 0xea, 0xd8, 0xe2, 0x4c, 0x64, 0xd6, 0x54, 0xf0, 0x20, 0x0f, 0x8f, 0x17, 0xeb, 0xb3, 0x04, + 0xee, 0xd5, 0xb9, 0x63, 0x62, 0x2e, 0x28, 0x0b, 0x9b, 0xb5, 0x6a, 0xe5, 0x5f, 0xae, 0x55, 0x59, + 0xcf, 0x86, 0xd8, 0x19, 0x0b, 0x91, 0xf5, 0xa2, 0xed, 0x80, 0xfb, 0x39, 0x70, 0x1c, 0xe1, 0xab, + 0x04, 0xd6, 0xea, 0xdc, 0x79, 0x4d, 0x1d, 0xa7, 0x1d, 0x6d, 0xf5, 0x73, 0xb0, 0x0c, 0xcf, 0x44, + 0x8b, 0x32, 0x57, 0x5c, 0x4c, 0x0d, 0x90, 0x50, 0x67, 0xde, 0xee, 0x2d, 0xb0, 0x04, 0x91, 0x70, + 0x7b, 0xd8, 0xdf, 0xe4, 0x3b, 0x66, 0x58, 0x95, 0x9f, 0x7a, 0xd1, 0x12, 0x3d, 0x2f, 0x5c, 0x71, + 0x2c, 0x5c, 0xda, 0xa5, 0x56, 0x04, 0xdb, 0x19, 0x28, 0x0e, 0xf5, 0x29, 0x08, 0x65, 0xe2, 0x0e, + 0xed, 0xfd, 0xa7, 0x50, 0xd3, 0xcd, 0xa7, 0xdd, 0x84, 0xe6, 0xd3, 0x50, 0x64, 0xbe, 0xf4, 0x6b, + 0x01, 0x2c, 0xd4, 0xb9, 0x23, 0x37, 0xc0, 0x72, 0x72, 0x61, 0xa8, 0x7a, 0xf6, 0x6e, 0xd2, 0xd3, + 0xc7, 0x57, 0xd9, 0xff, 0x73, 0x3f, 0x12, 0x97, 0xdf, 0x83, 0x8d, 0xc9, 0xa3, 0x9d, 0x3f, 0x78, + 0x82, 0xa7, 0xe8, 0xb3, 0xf1, 0xe2, 0xc9, 0x5a, 0x60, 0x7d, 0xe2, 0x68, 0x3c, 0xca, 0xd5, 0xc8, + 0xd2, 0x94, 0xa3, 0x99, 0x68, 0xf1, 0x4c, 0x6f, 0xc1, 0xca, 0xd8, 0x17, 0xbc, 0x97, 0x3b, 0x3c, + 0x4d, 0x51, 0x9e, 0x4c, 0xa5, 0xa4, 0xd5, 0xc7, 0x3e, 0xa5, 0xbd, 0x1b, 0xcc, 0x25, 0x94, 0x1b, + 0xd4, 0xf3, 0xf6, 0x5b, 0xb9, 0xf5, 0x61, 0xd4, 0x3f, 0x94, 0x4e, 0xea, 0xdf, 0x06, 0xaa, 0x74, + 0x3d, 0x50, 0xa5, 0x9f, 0x03, 0x55, 0xba, 0x1a, 0xaa, 0x73, 0xd7, 0x43, 0x75, 0xee, 0xc7, 0x50, + 0x9d, 0x7b, 0x73, 0xec, 0xb8, 0xa2, 0x75, 0xd6, 0xd4, 0x11, 0xed, 0x18, 0x0d, 0x5f, 0xf5, 0xe8, + 0x15, 0x6c, 0x72, 0x23, 0x7c, 0xc8, 0x7a, 0xa5, 0x17, 0xc6, 0x79, 0xfa, 0x39, 0xbb, 0xe8, 0x62, + 0xde, 0x5c, 0xf2, 0x5f, 0x9e, 0xe3, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x64, 0x42, 0x8c, + 0xef, 0x06, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type MsgClient interface { + // Adds a new oracle given a provided connection + AddOracle(ctx context.Context, in *MsgAddOracle, opts ...grpc.CallOption) (*MsgAddOracleResponse, error) + // Instantiates an Oracle CW contract + InstantiateOracle(ctx context.Context, in *MsgInstantiateOracle, opts ...grpc.CallOption) (*MsgInstantiateOracleResponse, error) + // Restores the oracle ICA channel after a closure + RestoreOracleICA(ctx context.Context, in *MsgRestoreOracleICA, opts ...grpc.CallOption) (*MsgRestoreOracleICAResponse, error) + // Toggle's whether an oracle is active and should receive metric updates + ToggleOracle(ctx context.Context, in *MsgToggleOracle, opts ...grpc.CallOption) (*MsgToggleOracleResponse, error) + // Removes an oracle completely + RemoveOracle(ctx context.Context, in *MsgRemoveOracle, opts ...grpc.CallOption) (*MsgRemoveOracleResponse, error) +} + +type msgClient struct { + cc grpc1.ClientConn +} + +func NewMsgClient(cc grpc1.ClientConn) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) AddOracle(ctx context.Context, in *MsgAddOracle, opts ...grpc.CallOption) (*MsgAddOracleResponse, error) { + out := new(MsgAddOracleResponse) + err := c.cc.Invoke(ctx, "/stride.icaoracle.Msg/AddOracle", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) InstantiateOracle(ctx context.Context, in *MsgInstantiateOracle, opts ...grpc.CallOption) (*MsgInstantiateOracleResponse, error) { + out := new(MsgInstantiateOracleResponse) + err := c.cc.Invoke(ctx, "/stride.icaoracle.Msg/InstantiateOracle", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) RestoreOracleICA(ctx context.Context, in *MsgRestoreOracleICA, opts ...grpc.CallOption) (*MsgRestoreOracleICAResponse, error) { + out := new(MsgRestoreOracleICAResponse) + err := c.cc.Invoke(ctx, "/stride.icaoracle.Msg/RestoreOracleICA", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) ToggleOracle(ctx context.Context, in *MsgToggleOracle, opts ...grpc.CallOption) (*MsgToggleOracleResponse, error) { + out := new(MsgToggleOracleResponse) + err := c.cc.Invoke(ctx, "/stride.icaoracle.Msg/ToggleOracle", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) RemoveOracle(ctx context.Context, in *MsgRemoveOracle, opts ...grpc.CallOption) (*MsgRemoveOracleResponse, error) { + out := new(MsgRemoveOracleResponse) + err := c.cc.Invoke(ctx, "/stride.icaoracle.Msg/RemoveOracle", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +type MsgServer interface { + // Adds a new oracle given a provided connection + AddOracle(context.Context, *MsgAddOracle) (*MsgAddOracleResponse, error) + // Instantiates an Oracle CW contract + InstantiateOracle(context.Context, *MsgInstantiateOracle) (*MsgInstantiateOracleResponse, error) + // Restores the oracle ICA channel after a closure + RestoreOracleICA(context.Context, *MsgRestoreOracleICA) (*MsgRestoreOracleICAResponse, error) + // Toggle's whether an oracle is active and should receive metric updates + ToggleOracle(context.Context, *MsgToggleOracle) (*MsgToggleOracleResponse, error) + // Removes an oracle completely + RemoveOracle(context.Context, *MsgRemoveOracle) (*MsgRemoveOracleResponse, error) +} + +// UnimplementedMsgServer can be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (*UnimplementedMsgServer) AddOracle(ctx context.Context, req *MsgAddOracle) (*MsgAddOracleResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AddOracle not implemented") +} +func (*UnimplementedMsgServer) InstantiateOracle(ctx context.Context, req *MsgInstantiateOracle) (*MsgInstantiateOracleResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method InstantiateOracle not implemented") +} +func (*UnimplementedMsgServer) RestoreOracleICA(ctx context.Context, req *MsgRestoreOracleICA) (*MsgRestoreOracleICAResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RestoreOracleICA not implemented") +} +func (*UnimplementedMsgServer) ToggleOracle(ctx context.Context, req *MsgToggleOracle) (*MsgToggleOracleResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ToggleOracle not implemented") +} +func (*UnimplementedMsgServer) RemoveOracle(ctx context.Context, req *MsgRemoveOracle) (*MsgRemoveOracleResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RemoveOracle not implemented") +} + +func RegisterMsgServer(s grpc1.Server, srv MsgServer) { + s.RegisterService(&_Msg_serviceDesc, srv) +} + +func _Msg_AddOracle_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgAddOracle) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).AddOracle(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.icaoracle.Msg/AddOracle", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).AddOracle(ctx, req.(*MsgAddOracle)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_InstantiateOracle_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgInstantiateOracle) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).InstantiateOracle(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.icaoracle.Msg/InstantiateOracle", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).InstantiateOracle(ctx, req.(*MsgInstantiateOracle)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_RestoreOracleICA_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgRestoreOracleICA) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).RestoreOracleICA(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.icaoracle.Msg/RestoreOracleICA", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).RestoreOracleICA(ctx, req.(*MsgRestoreOracleICA)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_ToggleOracle_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgToggleOracle) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).ToggleOracle(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.icaoracle.Msg/ToggleOracle", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).ToggleOracle(ctx, req.(*MsgToggleOracle)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_RemoveOracle_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgRemoveOracle) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).RemoveOracle(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.icaoracle.Msg/RemoveOracle", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).RemoveOracle(ctx, req.(*MsgRemoveOracle)) + } + return interceptor(ctx, in, info, handler) +} + +var _Msg_serviceDesc = grpc.ServiceDesc{ + ServiceName: "stride.icaoracle.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "AddOracle", + Handler: _Msg_AddOracle_Handler, + }, + { + MethodName: "InstantiateOracle", + Handler: _Msg_InstantiateOracle_Handler, + }, + { + MethodName: "RestoreOracleICA", + Handler: _Msg_RestoreOracleICA_Handler, + }, + { + MethodName: "ToggleOracle", + Handler: _Msg_ToggleOracle_Handler, + }, + { + MethodName: "RemoveOracle", + Handler: _Msg_RemoveOracle_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "stride/icaoracle/tx.proto", +} + +func (m *MsgAddOracle) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgAddOracle) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgAddOracle) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ConnectionId) > 0 { + i -= len(m.ConnectionId) + copy(dAtA[i:], m.ConnectionId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ConnectionId))) + i-- + dAtA[i] = 0x12 + } + if len(m.Creator) > 0 { + i -= len(m.Creator) + copy(dAtA[i:], m.Creator) + i = encodeVarintTx(dAtA, i, uint64(len(m.Creator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgAddOracleResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgAddOracleResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgAddOracleResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgInstantiateOracle) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgInstantiateOracle) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgInstantiateOracle) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TransferChannelOnOracle) > 0 { + i -= len(m.TransferChannelOnOracle) + copy(dAtA[i:], m.TransferChannelOnOracle) + i = encodeVarintTx(dAtA, i, uint64(len(m.TransferChannelOnOracle))) + i-- + dAtA[i] = 0x22 + } + if m.ContractCodeId != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.ContractCodeId)) + i-- + dAtA[i] = 0x18 + } + if len(m.OracleChainId) > 0 { + i -= len(m.OracleChainId) + copy(dAtA[i:], m.OracleChainId) + i = encodeVarintTx(dAtA, i, uint64(len(m.OracleChainId))) + i-- + dAtA[i] = 0x12 + } + if len(m.Creator) > 0 { + i -= len(m.Creator) + copy(dAtA[i:], m.Creator) + i = encodeVarintTx(dAtA, i, uint64(len(m.Creator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgInstantiateOracleResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgInstantiateOracleResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgInstantiateOracleResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgRestoreOracleICA) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRestoreOracleICA) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRestoreOracleICA) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.OracleChainId) > 0 { + i -= len(m.OracleChainId) + copy(dAtA[i:], m.OracleChainId) + i = encodeVarintTx(dAtA, i, uint64(len(m.OracleChainId))) + i-- + dAtA[i] = 0x12 + } + if len(m.Creator) > 0 { + i -= len(m.Creator) + copy(dAtA[i:], m.Creator) + i = encodeVarintTx(dAtA, i, uint64(len(m.Creator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgRestoreOracleICAResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRestoreOracleICAResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRestoreOracleICAResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgToggleOracle) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgToggleOracle) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgToggleOracle) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Active { + i-- + if m.Active { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + } + if len(m.OracleChainId) > 0 { + i -= len(m.OracleChainId) + copy(dAtA[i:], m.OracleChainId) + i = encodeVarintTx(dAtA, i, uint64(len(m.OracleChainId))) + i-- + dAtA[i] = 0x12 + } + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgToggleOracleResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgToggleOracleResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgToggleOracleResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgRemoveOracle) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRemoveOracle) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRemoveOracle) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.OracleChainId) > 0 { + i -= len(m.OracleChainId) + copy(dAtA[i:], m.OracleChainId) + i = encodeVarintTx(dAtA, i, uint64(len(m.OracleChainId))) + i-- + dAtA[i] = 0x12 + } + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgRemoveOracleResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRemoveOracleResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRemoveOracleResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintTx(dAtA []byte, offset int, v uint64) int { + offset -= sovTx(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MsgAddOracle) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Creator) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ConnectionId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgAddOracleResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgInstantiateOracle) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Creator) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.OracleChainId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.ContractCodeId != 0 { + n += 1 + sovTx(uint64(m.ContractCodeId)) + } + l = len(m.TransferChannelOnOracle) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgInstantiateOracleResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgRestoreOracleICA) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Creator) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.OracleChainId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgRestoreOracleICAResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgToggleOracle) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.OracleChainId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.Active { + n += 2 + } + return n +} + +func (m *MsgToggleOracleResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgRemoveOracle) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.OracleChainId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgRemoveOracleResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovTx(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozTx(x uint64) (n int) { + return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MsgAddOracle) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgAddOracle: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgAddOracle: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConnectionId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ConnectionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgAddOracleResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgAddOracleResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgAddOracleResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgInstantiateOracle) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgInstantiateOracle: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgInstantiateOracle: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OracleChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OracleChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ContractCodeId", wireType) + } + m.ContractCodeId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ContractCodeId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TransferChannelOnOracle", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TransferChannelOnOracle = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgInstantiateOracleResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgInstantiateOracleResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgInstantiateOracleResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRestoreOracleICA) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRestoreOracleICA: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRestoreOracleICA: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OracleChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OracleChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRestoreOracleICAResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRestoreOracleICAResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRestoreOracleICAResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgToggleOracle) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgToggleOracle: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgToggleOracle: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OracleChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OracleChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Active", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Active = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgToggleOracleResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgToggleOracleResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgToggleOracleResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRemoveOracle) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRemoveOracle: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRemoveOracle: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OracleChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OracleChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRemoveOracleResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRemoveOracleResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRemoveOracleResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipTx(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthTx + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupTx + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthTx + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthTx = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTx = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupTx = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/icqoracle/client/cli/query.go b/x/icqoracle/client/cli/query.go new file mode 100644 index 00000000000..96182a47eff --- /dev/null +++ b/x/icqoracle/client/cli/query.go @@ -0,0 +1,139 @@ +package cli + +import ( + "context" + "fmt" + "strconv" + + "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" + + "github.com/osmosis-labs/osmosis/v27/x/icqoracle/types" +) + +// GetQueryCmd returns the cli query commands for this module. +func GetQueryCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: types.ModuleName, + Short: fmt.Sprintf("Querying commands for the %s module", types.ModuleName), + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + cmd.AddCommand( + CmdQueryTokenPrice(), + CmdQueryTokenPrices(), + CmdQueryParams(), + ) + + return cmd +} + +func CmdQueryTokenPrice() *cobra.Command { + cmd := &cobra.Command{ + Use: "token-price [base-denom] [quote-denom] [pool-id]", + Short: "Query the current price for a specific token", + Args: cobra.ExactArgs(3), + RunE: func(cmd *cobra.Command, args []string) error { + baseDenom := args[0] + quoteDenom := args[1] + poolId, err := strconv.ParseUint(args[2], 10, 64) + if err != nil { + return fmt.Errorf("Error parsing osmosis pool ID as uint64: %w", err) + } + + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + req := &types.QueryTokenPriceRequest{ + BaseDenom: baseDenom, + QuoteDenom: quoteDenom, + PoolId: poolId, + } + res, err := queryClient.TokenPrice(context.Background(), req) + if err != nil { + return err + } + return clientCtx.PrintProto(res) + }, + } + return cmd +} + +func CmdQueryTokenPrices() *cobra.Command { + cmd := &cobra.Command{ + Use: "token-prices", + Short: "Query all token prices", + Args: cobra.ExactArgs(0), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + req := &types.QueryTokenPricesRequest{} + res, err := queryClient.TokenPrices(context.Background(), req) + if err != nil { + return err + } + return clientCtx.PrintProto(res) + }, + } + return cmd +} + +func CmdQueryParams() *cobra.Command { + cmd := &cobra.Command{ + Use: "params", + Short: "Get the parameters", + Args: cobra.ExactArgs(0), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + req := &types.QueryParamsRequest{} + res, err := queryClient.Params(context.Background(), req) + if err != nil { + return err + } + return clientCtx.PrintProto(res) + }, + } + return cmd +} + +func CmdQueryTokenPriceForQuoteDenom() *cobra.Command { + cmd := &cobra.Command{ + Use: "token-price-by-quote [base-denom] [quote-denom]", + Short: "Query the current price for a specific token", + Args: cobra.ExactArgs(2), + RunE: func(cmd *cobra.Command, args []string) error { + baseDenom := args[0] + quoteDenom := args[1] + + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + req := &types.QueryTokenPriceForQuoteDenomRequest{ + BaseDenom: baseDenom, + QuoteDenom: quoteDenom, + } + res, err := queryClient.TokenPriceForQuoteDenom(context.Background(), req) + if err != nil { + return err + } + return clientCtx.PrintProto(res) + }, + } + return cmd +} diff --git a/x/icqoracle/client/cli/tx.go b/x/icqoracle/client/cli/tx.go new file mode 100644 index 00000000000..571ae1e422d --- /dev/null +++ b/x/icqoracle/client/cli/tx.go @@ -0,0 +1,121 @@ +package cli + +import ( + "fmt" + "strconv" + "strings" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/client/tx" + "github.com/cosmos/cosmos-sdk/version" + "github.com/spf13/cobra" + + "github.com/osmosis-labs/osmosis/v27/x/icqoracle/types" +) + +// GetTxCmd returns the transaction commands for this module +func GetTxCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: types.ModuleName, + Short: fmt.Sprintf("%s transactions subcommands", types.ModuleName), + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + cmd.AddCommand( + CmdAddTokenPrice(), + CmdRemoveTokenPrice(), + ) + + return cmd +} + +func CmdAddTokenPrice() *cobra.Command { + cmd := &cobra.Command{ + Use: "add-token-price [base-denom] [quote-denom] [osmosis-pool-id] [osmosis-base-denom] [osmosis-quote-denom]", + Short: "Add a token to price tracking", + Long: strings.TrimSpace( + fmt.Sprintf(`Add a token to price tracking. + +Example: + $ %[1]s tx %[2]s add-token-price uosmo uatom 123 uosmo ibc/... --from admin +`, version.AppName, types.ModuleName), + ), + Args: cobra.ExactArgs(5), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + osmosisPoolId, err := strconv.ParseUint(args[2], 10, 64) + if err != nil { + return fmt.Errorf("Error parsing osmosis pool ID as uint64: %w", err) + } + + msg := types.NewMsgRegisterTokenPriceQuery( + clientCtx.GetFromAddress().String(), + args[0], + args[1], + osmosisPoolId, + args[3], + args[4], + ) + + if err := msg.ValidateBasic(); err != nil { + return err + } + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +func CmdRemoveTokenPrice() *cobra.Command { + cmd := &cobra.Command{ + Use: "remove-token-price [base-denom] [quote-denom] [osmosis-pool-id]", + Short: "Remove a token from price tracking", + Long: strings.TrimSpace( + fmt.Sprintf(`Remove a token from price tracking. + +Example: + $ %[1]s tx %[2]s remove-token-price uatom uosmo 123 --from admin +`, version.AppName, types.ModuleName), + ), + Args: cobra.ExactArgs(3), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + osmosisPoolId, err := strconv.ParseUint(args[2], 10, 64) + if err != nil { + return fmt.Errorf("Error parsing osmosis pool ID as uint64: %w", err) + } + + msg := types.NewMsgRemoveTokenPriceQuery( + clientCtx.GetFromAddress().String(), + args[0], + args[1], + osmosisPoolId, + ) + + if err := msg.ValidateBasic(); err != nil { + return err + } + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} diff --git a/x/icqoracle/keeper/abci.go b/x/icqoracle/keeper/abci.go new file mode 100644 index 00000000000..85b36ef5dab --- /dev/null +++ b/x/icqoracle/keeper/abci.go @@ -0,0 +1,50 @@ +package keeper + +import ( + "fmt" + "time" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/utils" + "github.com/osmosis-labs/osmosis/v27/x/icqoracle/types" +) + +func (k Keeper) BeginBlocker(ctx sdk.Context) { + params := k.GetParams(ctx) + + for _, tokenPrice := range k.GetAllTokenPrices(ctx) { + if err := k.RefreshTokenPrice(ctx, tokenPrice, params.UpdateIntervalSec); err != nil { + ctx.Logger().Error(fmt.Sprintf("failed to refresh token price: %s", err.Error())) + continue + } + } +} + +// Refreshes the price of a token (if applicable) +func (k Keeper) RefreshTokenPrice(ctx sdk.Context, tokenPrice types.TokenPrice, updateIntervalSec uint64) error { + // Get last update time for this token + currentTime := ctx.BlockTime() + lastUpdate := tokenPrice.LastRequestTime + isNewToken := lastUpdate.IsZero() + updateIntervalPassed := currentTime.Sub(lastUpdate) >= time.Second*time.Duration(utils.UintToInt(updateIntervalSec)) + + // If the update interval has not passed, don't update + if !isNewToken && !updateIntervalPassed { + return nil + } + + // If never updated or update interval has passed, submit a new query for the price + // If a query was already in progress, it will be replaced with a new one that will + // have the same query ID + if err := k.SubmitOsmosisPriceICQ(ctx, tokenPrice); err != nil { + return errorsmod.Wrapf(err, + "failed to submit Osmosis CL pool ICQ baseToken='%s' quoteToken='%s' poolId='%d'", + tokenPrice.BaseDenom, + tokenPrice.QuoteDenom, + tokenPrice.OsmosisPoolId) + } + + return nil +} diff --git a/x/icqoracle/keeper/abci_test.go b/x/icqoracle/keeper/abci_test.go new file mode 100644 index 00000000000..a3cb4f807f5 --- /dev/null +++ b/x/icqoracle/keeper/abci_test.go @@ -0,0 +1,220 @@ +package keeper_test + +import ( + "fmt" + "time" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/icqoracle/types" + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" +) + +func (s *KeeperTestSuite) TestBeginBlockerSubmitICQ() { + var submitICQCalled bool + + // Mock ICQ keeper to capture submitted queries + mockICQKeeper := MockICQKeeper{ + SubmitICQRequestFn: func(ctx sdk.Context, query icqtypes.Query, forceUnique bool) error { + submitICQCalled = true + return nil + }, + } + + params := types.Params{ + UpdateIntervalSec: 60, // 1 minute interval + } + + now := time.Now().UTC() + staleTime := now.Add(-2 * time.Minute) // Older than update interval + freshTime := now.Add(-30 * time.Second) // More recent than update interval + + testCases := []struct { + name string + tokenPrice types.TokenPrice + expectedICQSubmit bool + }{ + { + name: "never updated token price", + tokenPrice: types.TokenPrice{ + BaseDenom: "uatom", + QuoteDenom: "uusdc", + OsmosisPoolId: 1, + LastRequestTime: time.Time{}, // Zero time + }, + expectedICQSubmit: true, + }, + { + name: "stale token price", + tokenPrice: types.TokenPrice{ + BaseDenom: "uosmo", + QuoteDenom: "uusdc", + OsmosisPoolId: 2, + LastRequestTime: staleTime, + }, + expectedICQSubmit: true, + }, + { + name: "fresh token price", + tokenPrice: types.TokenPrice{ + BaseDenom: "ustrd", + QuoteDenom: "uusdc", + OsmosisPoolId: 3, + LastRequestTime: freshTime, + }, + expectedICQSubmit: false, + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + // Reset test state + s.SetupTest() + + // Setup params + s.App.ICQOracleKeeper.SetParams(s.Ctx, params) + + // Reset mock IcqKeeper + s.App.ICQOracleKeeper.IcqKeeper = mockICQKeeper + submitICQCalled = false + + // Store token price + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, tc.tokenPrice) + + // Set block time to now + s.Ctx = s.Ctx.WithBlockTime(now) + + // Run BeginBlocker + s.App.ICQOracleKeeper.BeginBlocker(s.Ctx) + + // Verify if ICQ was submitted as expected + s.Require().Equal(tc.expectedICQSubmit, submitICQCalled, + "ICQ submission status does not match expected for case: %s", tc.name) + + // If ICQ was expected to be submitted, verify the token price query in progress flag + if tc.expectedICQSubmit { + updatedPrice := s.MustGetTokenPrice( + tc.tokenPrice.BaseDenom, + tc.tokenPrice.QuoteDenom, + tc.tokenPrice.OsmosisPoolId, + ) + s.Require().True(updatedPrice.QueryInProgress, + "query in progress should be true after BeginBlocker for case: %s", tc.name) + } + }) + } +} + +func (s *KeeperTestSuite) TestBeginBlockerICQErrors() { + // Setup mock ICQ keeper that returns an error + s.mockICQKeeper = MockICQKeeper{ + SubmitICQRequestFn: func(ctx sdk.Context, query icqtypes.Query, forceUnique bool) error { + return fmt.Errorf("icq submit failed") + }, + } + s.App.ICQOracleKeeper.IcqKeeper = s.mockICQKeeper + + // Create token price that needs updating + updateIntervalSec := uint64(60) + tokenPrice := types.TokenPrice{ + BaseDenom: "uatom", + QuoteDenom: "uusdc", + OsmosisPoolId: 1, + LastRequestTime: time.Time{}, // Zero time to trigger update + } + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, tokenPrice) + + // Run BeginBlocker - should log error but continue + err := s.App.ICQOracleKeeper.RefreshTokenPrice(s.Ctx, tokenPrice, updateIntervalSec) + s.Require().ErrorContains(err, "failed to submit Osmosis CL pool ICQ") + + // Verify token price query was not submitted + updatedPrice := s.MustGetTokenPrice( + tokenPrice.BaseDenom, + tokenPrice.QuoteDenom, + tokenPrice.OsmosisPoolId, + ) + s.Require().False(updatedPrice.QueryInProgress, + "query in progress should remain false when ICQ submission fails") +} + +func (s *KeeperTestSuite) TestBeginBlockerMultipleTokens() { + var submittedQueries int + + // Setup mock ICQ keeper to count submitted queries + mockICQKeeper := MockICQKeeper{ + SubmitICQRequestFn: func(ctx sdk.Context, query icqtypes.Query, forceUnique bool) error { + submittedQueries++ + return nil + }, + } + s.App.ICQOracleKeeper.IcqKeeper = mockICQKeeper + + // Set params + params := types.Params{ + UpdateIntervalSec: 60, + } + s.App.ICQOracleKeeper.SetParams(s.Ctx, params) + + now := time.Now().UTC() + staleTime := now.Add(-2 * time.Minute) + + // Create multiple token prices + tokenPrices := []types.TokenPrice{ + { + BaseDenom: "uatom", + QuoteDenom: "uusdc", + OsmosisPoolId: 1, + LastRequestTime: staleTime, + QueryInProgress: false, + }, + { + BaseDenom: "uosmo", + QuoteDenom: "uusdc", + OsmosisPoolId: 2, + LastRequestTime: staleTime, + QueryInProgress: false, + }, + { + BaseDenom: "ustrd", + QuoteDenom: "uusdc", + OsmosisPoolId: 3, + LastRequestTime: s.Ctx.BlockTime(), // Should skip this one + QueryInProgress: true, + }, + { + BaseDenom: "ustrd", + QuoteDenom: "uusdc", + OsmosisPoolId: 4, + LastRequestTime: s.Ctx.BlockTime(), // Should skip this one + QueryInProgress: false, + }, + } + + // Store all token prices + for _, tp := range tokenPrices { + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, tp) + } + + // Set block time + s.Ctx = s.Ctx.WithBlockTime(now) + + // Run BeginBlocker + s.App.ICQOracleKeeper.BeginBlocker(s.Ctx) + + // Verify number of submitted queries + s.Require().Equal(2, submittedQueries, + "expected 2 ICQ queries to be submitted (skipping the one in progress)") + + // Verify query in progress flags + for _, tp := range tokenPrices[:2] { + updatedPrice := s.MustGetTokenPrice(tp.BaseDenom, tp.QuoteDenom, tp.OsmosisPoolId) + s.Require().True(updatedPrice.QueryInProgress, + "query in progress should be set to true for tokens that are updating") + } + for _, tp := range tokenPrices[2:] { + updatedPrice := s.MustGetTokenPrice(tp.BaseDenom, tp.QuoteDenom, tp.OsmosisPoolId) + s.Require().Equal(tp.QueryInProgress, updatedPrice.QueryInProgress, + "query in progress should not change for tokens that are not updating") + } +} diff --git a/x/icqoracle/keeper/genesis.go b/x/icqoracle/keeper/genesis.go new file mode 100644 index 00000000000..2ebe7574363 --- /dev/null +++ b/x/icqoracle/keeper/genesis.go @@ -0,0 +1,25 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/icqoracle/types" +) + +// Loads module state from genesis +func (k Keeper) InitGenesis(ctx sdk.Context, genState types.GenesisState) { + k.SetParams(ctx, genState.Params) + + for _, tokenPrice := range genState.TokenPrices { + k.SetTokenPrice(ctx, tokenPrice) + } +} + +// Export's module state into genesis file +func (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { + params := k.GetParams(ctx) + genesis := types.DefaultGenesis() + genesis.Params = params + genesis.TokenPrices = k.GetAllTokenPrices(ctx) + return genesis +} diff --git a/x/icqoracle/keeper/icq.go b/x/icqoracle/keeper/icq.go new file mode 100644 index 00000000000..f4350a16e73 --- /dev/null +++ b/x/icqoracle/keeper/icq.go @@ -0,0 +1,197 @@ +package keeper + +import ( + "encoding/hex" + "fmt" + "time" + + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/utils" + "github.com/osmosis-labs/osmosis/v27/x/icqoracle/types" + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" +) + +const ( + ICQCallbackID_OsmosisPrice = "osmosisprice" +) + +// ICQCallbacks wrapper struct for stakeibc keeper +type ICQCallback func(Keeper, sdk.Context, []byte, icqtypes.Query) error + +type ICQCallbacks struct { + k Keeper + callbacks map[string]ICQCallback +} + +var _ icqtypes.QueryCallbacks = ICQCallbacks{} + +func (k Keeper) ICQCallbackHandler() ICQCallbacks { + return ICQCallbacks{k, make(map[string]ICQCallback)} +} + +func (c ICQCallbacks) CallICQCallback(ctx sdk.Context, id string, args []byte, query icqtypes.Query) error { + return c.callbacks[id](c.k, ctx, args, query) +} + +func (c ICQCallbacks) HasICQCallback(id string) bool { + _, found := c.callbacks[id] + return found +} + +func (c ICQCallbacks) AddICQCallback(id string, fn interface{}) icqtypes.QueryCallbacks { + c.callbacks[id] = fn.(ICQCallback) + return c +} + +func (c ICQCallbacks) RegisterICQCallbacks() icqtypes.QueryCallbacks { + return c. + AddICQCallback(ICQCallbackID_OsmosisPrice, ICQCallback(OsmosisPriceCallback)) +} + +// Submits an ICQ to get a concentrated liquidity pool from Osmosis' store +func (k Keeper) SubmitOsmosisPriceICQ( + ctx sdk.Context, + tokenPrice types.TokenPrice, +) error { + k.Logger(ctx).Info(fmt.Sprintf("Submitting OsmosisPrice ICQ - Base: %s / Quote: %s / Pool: %d", + tokenPrice.BaseDenom, tokenPrice.QuoteDenom, tokenPrice.OsmosisPoolId)) + + params := k.GetParams(ctx) + + tokenPriceBz, err := k.cdc.Marshal(&tokenPrice) + if err != nil { + return errorsmod.Wrapf(err, "Error serializing tokenPrice '%+v' to bytes", tokenPrice) + } + + queryData := icqtypes.FormatOsmosisMostRecentTWAPKey( + tokenPrice.OsmosisPoolId, + tokenPrice.OsmosisBaseDenom, + tokenPrice.OsmosisQuoteDenom, + ) + + query := icqtypes.Query{ + ChainId: params.OsmosisChainId, + ConnectionId: params.OsmosisConnectionId, + QueryType: icqtypes.OSMOSIS_TWAP_STORE_QUERY_WITH_PROOF, + RequestData: queryData, + CallbackModule: types.ModuleName, + CallbackId: ICQCallbackID_OsmosisPrice, + CallbackData: tokenPriceBz, + TimeoutDuration: time.Duration(utils.UintToInt(params.UpdateIntervalSec)) * time.Second, + TimeoutPolicy: icqtypes.TimeoutPolicy_REJECT_QUERY_RESPONSE, + } + + if err := k.IcqKeeper.SubmitICQRequest(ctx, query, false); err != nil { + return errorsmod.Wrap(err, "Error submitting OsmosisPrice ICQ") + } + + if err := k.SetQueryInProgress(ctx, tokenPrice.BaseDenom, tokenPrice.QuoteDenom, tokenPrice.OsmosisPoolId); err != nil { + return errorsmod.Wrap(err, "Error updating token price query to in progress") + } + + return nil +} + +// Callback handler for the Omsosis pool spot price query. +func OsmosisPriceCallback(k Keeper, ctx sdk.Context, args []byte, query icqtypes.Query) error { + var tokenPrice types.TokenPrice + if err := k.cdc.Unmarshal(query.CallbackData, &tokenPrice); err != nil { + return fmt.Errorf("Error deserializing query.CallbackData '%s' as TokenPrice", hex.EncodeToString(query.CallbackData)) + } + + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone("osmosis", query.CallbackId, + "Starting OsmosisPrice ICQ callback, QueryId: %vs, QueryType: %s, Connection: %s, Base Denom: %s, Quote Denom: %s, PoolId: %d", + query.Id, query.QueryType, query.ConnectionId, tokenPrice.BaseDenom, tokenPrice.QuoteDenom, tokenPrice.OsmosisPoolId)) + + tokenPrice, err := k.GetTokenPrice(ctx, tokenPrice.BaseDenom, tokenPrice.QuoteDenom, tokenPrice.OsmosisPoolId) + if err != nil { + return errorsmod.Wrap(err, "Error getting current spot price") + } + + if !tokenPrice.QueryInProgress { + return nil + } + + newSpotPrice, err := UnmarshalSpotPriceFromOsmosis(k, tokenPrice, args) + if err != nil { + return errorsmod.Wrap(err, "Error determining spot price from query response") + } + + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone("osmosis", query.CallbackId, + "Price of %s in terms of %s: %vs", tokenPrice.BaseDenom, tokenPrice.QuoteDenom, newSpotPrice)) + + k.SetQueryComplete(ctx, tokenPrice, newSpotPrice) + + return nil +} + +// Unmarshals the Osmosis pool query response and extracts the actual spot price +// The query response returns an Osmosis TwapRecord for the associated pool denom's +// +// The assets in the response are identified by indicies and are sorted alphabetically +// (e.g. if the two denom's are ibc/AXXX, and ibc/BXXX, +// then Asset0Denom is ibc/AXXX and Asset1Denom is ibc/BXXX) +// +// The price fields (P0LastSpotPrice and P1LastSpotPrice) represent the relative +// ratios of tokens in the pool +// +// P0LastSpotPrice gives the ratio of Asset0Denom / Asset1Denom +// P1LastSpotPrice gives the ratio of Asset1Denom / Asset0Denom +// +// ** When storing down the price, we want to store down the ratio of QuoteDenom to BaseDenom ** +// This will give us the human readable price +// +// Ex: Let's say the price of OSMO is $2 and it's in a pool with USDC +// This means 1 OSMO is equal to 2 USDC, and there should be twice as much USDC in the pool +// The ratio of OSMO:USDC is 0.5 and the ratio of USDC:OSMO is 2.0 +// Since we want to store the quote denom in terms of base denom, we want to store USDC:OSMO = 2 +// +// In this example, if Asset0 was USDC and Asset1 was OSMO, we would want to store (Asset0Denom / Asset1Denom), +// since we want USDC / OSMO, so we would store P0LastSpotPrice +// +// However, if Asset0 was OSMO and Asset1 was USDC, we would want (Asset1Denom / Asset0Denom), +// since we want USDC / OSMO, so we would store P1LastSpotPrice +// +// To summarize, we check if Asset0 is equal to our quote denom (USDC in the example), and if +// it is, we store P0; otherwise, we store P1 +func UnmarshalSpotPriceFromOsmosis(k Keeper, tokenPrice types.TokenPrice, queryResponseBz []byte) (price sdkmath.LegacyDec, err error) { + var twapRecord types.OsmosisTwapRecord + + if err := twapRecord.Unmarshal(queryResponseBz); err != nil { + return price, errorsmod.Wrap(err, "unable to unmarshal the query response") + } + + if err := AssertTwapAssetsMatchTokenPrice(twapRecord, tokenPrice); err != nil { + return price, err + } + + // Get the associate "SpotPrice" from the twap record, based on the asset ordering + // The "SpotPrice" is actually a ratio of the assets in the pool + if twapRecord.Asset0Denom == tokenPrice.OsmosisQuoteDenom { + price = twapRecord.P0LastSpotPrice + } else { + price = twapRecord.P1LastSpotPrice + } + + return price, nil +} + +// Helper function to confirm that the two assets in the twap record match the assets in the token price +// The assets in the twap record are sorted alphabetically, so we have to check both orderings +func AssertTwapAssetsMatchTokenPrice(twapRecord types.OsmosisTwapRecord, tokenPrice types.TokenPrice) error { + baseDenomFirst := twapRecord.Asset0Denom == tokenPrice.OsmosisBaseDenom + quoteDenomSecond := twapRecord.Asset1Denom == tokenPrice.OsmosisQuoteDenom + + quoteDenomFirst := twapRecord.Asset0Denom == tokenPrice.OsmosisQuoteDenom + baseDenomSecond := twapRecord.Asset1Denom == tokenPrice.OsmosisBaseDenom + + if (baseDenomFirst && quoteDenomSecond) || (quoteDenomFirst && baseDenomSecond) { + return nil + } + + return fmt.Errorf("Assets in query response (%s, %s) do not match denom's from token price (%s, %s)", + twapRecord.Asset0Denom, twapRecord.Asset1Denom, tokenPrice.OsmosisBaseDenom, tokenPrice.OsmosisQuoteDenom) +} diff --git a/x/icqoracle/keeper/icq_test.go b/x/icqoracle/keeper/icq_test.go new file mode 100644 index 00000000000..198fa132715 --- /dev/null +++ b/x/icqoracle/keeper/icq_test.go @@ -0,0 +1,641 @@ +package keeper_test + +import ( + "fmt" + "time" + + sdkmath "cosmossdk.io/math" + + sdk "github.com/cosmos/cosmos-sdk/types" + proto "github.com/cosmos/gogoproto/proto" + + "github.com/osmosis-labs/osmosis/v27/x/icqoracle/keeper" + "github.com/osmosis-labs/osmosis/v27/x/icqoracle/types" + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" +) + +// Mock ICQ Keeper struct +type MockICQKeeper struct { + SubmitICQRequestFn func(ctx sdk.Context, query icqtypes.Query, forceUnique bool) error +} + +func (m MockICQKeeper) SubmitICQRequest(ctx sdk.Context, query icqtypes.Query, forceUnique bool) error { + if m.SubmitICQRequestFn != nil { + return m.SubmitICQRequestFn(ctx, query, forceUnique) + } + return nil +} + +func (s *KeeperTestSuite) TestSubmitOsmosisPriceICQ_Success() { + var submittedQuery icqtypes.Query + + // Setup mock ICQ keeper with custom behavior + s.mockICQKeeper = MockICQKeeper{ + SubmitICQRequestFn: func(ctx sdk.Context, query icqtypes.Query, forceUnique bool) error { + submittedQuery = query + return nil + }, + } + s.App.ICQOracleKeeper.IcqKeeper = s.mockICQKeeper + + // Set up test parameters + tokenPrice := types.TokenPrice{ + BaseDenom: "uatom", + QuoteDenom: "uusdc", + OsmosisPoolId: 1, + } + + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, tokenPrice) + + params := types.Params{ + OsmosisChainId: "osmosis-1", + OsmosisConnectionId: "connection-0", + UpdateIntervalSec: 60, + } + s.App.ICQOracleKeeper.SetParams(s.Ctx, params) + + // Verify tokenPrice.QueryInProgress before + s.Require().False(tokenPrice.QueryInProgress) + + // Submit ICQ request + err := s.App.ICQOracleKeeper.SubmitOsmosisPriceICQ(s.Ctx, tokenPrice) + s.Require().NoError(err) + + // Verify the captured query data + s.Require().Equal(params.OsmosisChainId, submittedQuery.ChainId) + s.Require().Equal(params.OsmosisConnectionId, submittedQuery.ConnectionId) + s.Require().Equal(icqtypes.OSMOSIS_TWAP_STORE_QUERY_WITH_PROOF, submittedQuery.QueryType) + s.Require().Equal(types.ModuleName, submittedQuery.CallbackModule) + s.Require().Equal(keeper.ICQCallbackID_OsmosisPrice, submittedQuery.CallbackId) + + // Verify tokenPrice.QueryInProgress after + tokenPriceAfter, err := s.App.ICQOracleKeeper.GetTokenPrice( + s.Ctx, + tokenPrice.BaseDenom, + tokenPrice.QuoteDenom, + tokenPrice.OsmosisPoolId, + ) + s.Require().NoError(err) + + s.Require().True(tokenPriceAfter.QueryInProgress, "query in progress") + s.Require().Equal(tokenPriceAfter.LastRequestTime, s.Ctx.BlockTime(), "query request time") + + // Verify callback data contains the token price + var decodedTokenPrice types.TokenPrice + err = s.App.AppCodec().Unmarshal(submittedQuery.CallbackData, &decodedTokenPrice) + s.Require().NoError(err) + s.Require().Equal(tokenPrice.BaseDenom, decodedTokenPrice.BaseDenom) + s.Require().Equal(tokenPrice.QuoteDenom, decodedTokenPrice.QuoteDenom) + s.Require().Equal(tokenPrice.OsmosisPoolId, decodedTokenPrice.OsmosisPoolId) + + // Verify timeout settings + expectedTimeout := time.Duration(params.UpdateIntervalSec) * time.Second + s.Require().Equal(expectedTimeout, submittedQuery.TimeoutDuration) + s.Require().Equal(icqtypes.TimeoutPolicy_REJECT_QUERY_RESPONSE, submittedQuery.TimeoutPolicy) +} + +func (s *KeeperTestSuite) TestSubmitOsmosisPriceICQ_Errors() { + testCases := []struct { + name string + setup func() + tokenPrice types.TokenPrice + expectedError string + }{ + { + name: "token price not found", + setup: func() { + params := types.Params{ + OsmosisChainId: "osmosis-1", + OsmosisConnectionId: "connection-0", + UpdateIntervalSec: 60, + } + s.App.ICQOracleKeeper.SetParams(s.Ctx, params) + + // Token price will not be added to the store in this test + }, + tokenPrice: types.TokenPrice{ + BaseDenom: "uatom", + QuoteDenom: "uusdc", + OsmosisPoolId: 1, + }, + expectedError: "token price not found", + }, + { + name: "error submitting ICQ request", + setup: func() { + params := types.Params{ + OsmosisChainId: "osmosis-1", + OsmosisConnectionId: "connection-0", + UpdateIntervalSec: 60, + } + s.App.ICQOracleKeeper.SetParams(s.Ctx, params) + + // Mock ICQ keeper to return error + s.mockICQKeeper = MockICQKeeper{ + SubmitICQRequestFn: func(ctx sdk.Context, query icqtypes.Query, forceUnique bool) error { + return fmt.Errorf("mock ICQ submit error") + }, + } + s.App.ICQOracleKeeper.IcqKeeper = s.mockICQKeeper + }, + tokenPrice: types.TokenPrice{ + BaseDenom: "uatom", + QuoteDenom: "uusdc", + OsmosisPoolId: 1, + }, + expectedError: "Error submitting OsmosisPrice ICQ", + }, + { + name: "error setting query in progress", + setup: func() { + params := types.Params{ + OsmosisChainId: "osmosis-1", + OsmosisConnectionId: "connection-0", + UpdateIntervalSec: 60, + } + s.App.ICQOracleKeeper.SetParams(s.Ctx, params) + + // Setup mock ICQ keeper with success response + s.mockICQKeeper = MockICQKeeper{ + SubmitICQRequestFn: func(ctx sdk.Context, query icqtypes.Query, forceUnique bool) error { + // Remove token price so set query in progress will fail to get it after SubmitICQRequest returns + s.App.ICQOracleKeeper.RemoveTokenPrice(ctx, "uatom", "uusdc", 1) + return nil + }, + } + s.App.ICQOracleKeeper.IcqKeeper = s.mockICQKeeper + + // Don't set the token price first, which will cause SetTokenPriceQueryInProgress to fail + }, + tokenPrice: types.TokenPrice{ + BaseDenom: "uatom", + QuoteDenom: "uusdc", + OsmosisPoolId: 1, + }, + expectedError: "Error updating token price query to in progress", + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + // Reset context for each test case + s.SetupTest() + + // Run test case setup + tc.setup() + + // If this is not an error case testing query in progress, + // set the token price first + if tc.expectedError != "token price not found" { + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, tc.tokenPrice) + } + + // Execute + err := s.App.ICQOracleKeeper.SubmitOsmosisPriceICQ(s.Ctx, tc.tokenPrice) + + // Verify results + if tc.expectedError != "" { + s.Require().ErrorContains(err, tc.expectedError) + } else { + s.Require().NoError(err) + + // For successful case, verify query in progress was set + tokenPriceAfter, err := s.App.ICQOracleKeeper.GetTokenPrice( + s.Ctx, + tc.tokenPrice.BaseDenom, + tc.tokenPrice.QuoteDenom, + tc.tokenPrice.OsmosisPoolId, + ) + s.Require().NoError(err) + s.Require().True(tokenPriceAfter.QueryInProgress) + } + }) + } +} + +// Helper function to create mock twap data +// P0 and P1 store the relative ratio of assets in the pool +// +// P0 is ratio of Asset0 / Asset1 +// P1 is ratio of Asset1 / Asset0 +// +// We want to ratio of quote denom to base denom, which will give the price of base denom +// in terms of quote denom +// +// For this function, we'll always return a price of 1.5 for the baseDenom in terms of quote denom +// However, the assets may be inverted depending on the parameters +func (s *KeeperTestSuite) createMockTwapData(baseDenom, quoteDenom, asset0Denom, asset1Denom string) []byte { + baseAssetPrice := sdkmath.LegacyMustNewDecFromStr("1.5") + quoteAssetPrice := sdkmath.LegacyOneDec().Quo(baseAssetPrice) + + pool := types.OsmosisTwapRecord{ + Asset0Denom: asset0Denom, + Asset1Denom: asset1Denom, + } + + // If asset0 is the quote denom, then we want P0 to give us the price of base asset + if asset0Denom == quoteDenom { + s.Require().Equal(asset1Denom, baseDenom, "Invalid test case setup, baseDenom not asset 1") + + pool.P0LastSpotPrice = baseAssetPrice // <- price we use + pool.P1LastSpotPrice = quoteAssetPrice + } else { + s.Require().Equal(asset0Denom, baseDenom, "Invalid test case setup, baseDenom not asset 0") + s.Require().Equal(asset1Denom, quoteDenom, "Invalid test case setup, quoteDenom not asset 1") + + // If asset0 is the base denom, then we want P1 to give us the price of the base asset + pool.P0LastSpotPrice = quoteAssetPrice + pool.P1LastSpotPrice = baseAssetPrice // <- price we use + } + + bz, err := proto.Marshal(&pool) + s.Require().NoError(err, "no error expected when marshaling mock pool data") + return bz +} + +func (s *KeeperTestSuite) TestOsmosisPriceCallback() { + // Setup base test parameters used across test cases + baseTokenPrice := types.TokenPrice{ + BaseDenom: "uatom", + QuoteDenom: "uusdc", + OsmosisPoolId: 1, + OsmosisBaseDenom: "ibc/uatom", + OsmosisQuoteDenom: "ibc/uusdc", + SpotPrice: sdkmath.LegacyNewDec(2), + QueryInProgress: true, + } + + testCases := []struct { + name string + setup func() (responseBz []byte, callbackDataBz []byte) + expectedError string + verify func(err error) + }{ + { + name: "successful update with valid pool data", + setup: func() (responseBz []byte, callbackDataBz []byte) { + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, baseTokenPrice) + + // Create mock pool data with expected price of 1.5 + poolData := s.createMockTwapData( + baseTokenPrice.OsmosisBaseDenom, // base + baseTokenPrice.OsmosisQuoteDenom, // quote + baseTokenPrice.OsmosisBaseDenom, // asset0 + baseTokenPrice.OsmosisQuoteDenom, // asset1 + ) + + return poolData, s.App.AppCodec().MustMarshal(&baseTokenPrice) + }, + expectedError: "", + verify: func(err error) { + s.Require().NoError(err) + + // Verify token price was updated correctly + tokenPrice := s.MustGetTokenPrice( + baseTokenPrice.BaseDenom, + baseTokenPrice.QuoteDenom, + baseTokenPrice.OsmosisPoolId, + ) + + // Verify updated fields + s.Require().False(tokenPrice.QueryInProgress) + s.Require().Equal(s.Ctx.BlockTime().UnixNano(), tokenPrice.LastResponseTime.UnixNano()) + s.Require().InDelta(1.5, tokenPrice.SpotPrice.MustFloat64(), 0.00001) + }, + }, + { + name: "successful update with inverse assets in twap data", + setup: func() (responseBz []byte, callbackDataBz []byte) { + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, baseTokenPrice) + + // Create pool with swapped denoms + poolData := s.createMockTwapData( + baseTokenPrice.OsmosisBaseDenom, // base + baseTokenPrice.OsmosisQuoteDenom, // quote + baseTokenPrice.OsmosisQuoteDenom, // asset0 <- + baseTokenPrice.OsmosisBaseDenom, // asset1 <- + ) + + return poolData, s.App.AppCodec().MustMarshal(&baseTokenPrice) + }, + expectedError: "", + verify: func(err error) { + s.Require().NoError(err) + + // Verify token price was updated correctly + tokenPrice := s.MustGetTokenPrice( + baseTokenPrice.BaseDenom, + baseTokenPrice.QuoteDenom, + baseTokenPrice.OsmosisPoolId, + ) + + // Verify updated fields + s.Require().False(tokenPrice.QueryInProgress) + s.Require().Equal(s.Ctx.BlockTime().UnixNano(), tokenPrice.LastResponseTime.UnixNano()) + s.Require().InDelta(1.5, tokenPrice.SpotPrice.MustFloat64(), 0.00001) // inversed price + }, + }, + { + name: "invalid callback data", + setup: func() (responseBz []byte, callbackDataBz []byte) { + return []byte{}, []byte("invalid callback data") + }, + expectedError: "Error deserializing query.CallbackData", + }, + { + name: "token price not found", + setup: func() (responseBz []byte, callbackDataBz []byte) { + // Don't set the token price in state + return []byte{}, s.App.AppCodec().MustMarshal(&baseTokenPrice) + }, + expectedError: "token price not found", + }, + { + name: "query not in progress", + setup: func() (responseBz []byte, callbackDataBz []byte) { + tokenPrice := baseTokenPrice + tokenPrice.QueryInProgress = false + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, tokenPrice) + + return []byte{}, s.App.AppCodec().MustMarshal(&tokenPrice) + }, + expectedError: "", + verify: func(err error) { + s.Require().NoError(err, "no error expected when query not in progress") + }, + }, + { + name: "invalid twap data", + setup: func() (responseBz []byte, callbackDataBz []byte) { + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, baseTokenPrice) + + return []byte("invalid twap data"), s.App.AppCodec().MustMarshal(&baseTokenPrice) + }, + expectedError: "Error determining spot price from query response", + }, + { + name: "empty query callback data", + setup: func() (responseBz []byte, callbackDataBz []byte) { + return []byte{}, []byte{} + }, + expectedError: "price not found for baseDenom='' quoteDenom='' poolId='0'", + }, + { + name: "nil query callback data", + setup: func() (responseBz []byte, callbackDataBz []byte) { + return []byte{}, nil + }, + expectedError: "price not found for baseDenom='' quoteDenom='' poolId='0'", + }, + { + name: "corrupted token price in callback data", + setup: func() (responseBz []byte, callbackDataBz []byte) { + // Create corrupted protobuf data + corruptedData := []byte{0xFF, 0xFF, 0xFF, 0xFF} + return []byte{}, corruptedData + }, + expectedError: "Error deserializing query.CallbackData", + }, + { + name: "empty twap response data", + setup: func() (responseBz []byte, callbackDataBz []byte) { + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, baseTokenPrice) + + return []byte{}, s.App.AppCodec().MustMarshal(&baseTokenPrice) + }, + expectedError: "Error determining spot price from query response", + }, + { + name: "nil twap response data", + setup: func() (responseBz []byte, callbackDataBz []byte) { + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, baseTokenPrice) + + return nil, s.App.AppCodec().MustMarshal(&baseTokenPrice) + }, + expectedError: "Error determining spot price from query response", + }, + { + name: "corrupted twap response data", + setup: func() (responseBz []byte, callbackDataBz []byte) { + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, baseTokenPrice) + + // Create corrupted protobuf data + corruptedTwapData := []byte{0xFF, 0xFF, 0xFF, 0xFF} + return corruptedTwapData, s.App.AppCodec().MustMarshal(&baseTokenPrice) + }, + expectedError: "Error determining spot price from query response", + }, + { + name: "twap with empty tokens", + setup: func() (responseBz []byte, callbackDataBz []byte) { + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, baseTokenPrice) + + // Create twap response with empty token denoms + twap := types.OsmosisTwapRecord{ + Asset0Denom: "", + Asset1Denom: "", + } + twapBz, err := proto.Marshal(&twap) + s.Require().NoError(err) + + return twapBz, s.App.AppCodec().MustMarshal(&baseTokenPrice) + }, + expectedError: "Error determining spot price from query response", + }, + { + name: "error setting updated token price", + setup: func() (responseBz []byte, callbackDataBz []byte) { + // First set the token price + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, baseTokenPrice) + + // Create valid pool data + poolData := s.createMockTwapData( + baseTokenPrice.OsmosisBaseDenom, // base + baseTokenPrice.OsmosisQuoteDenom, // quote + baseTokenPrice.OsmosisBaseDenom, // asset0 + baseTokenPrice.OsmosisQuoteDenom, // asset1 + ) + + // Remove the token price from state right before setting the updated price + s.App.ICQOracleKeeper.RemoveTokenPrice(s.Ctx, baseTokenPrice.BaseDenom, baseTokenPrice.QuoteDenom, baseTokenPrice.OsmosisPoolId) + + return poolData, s.App.AppCodec().MustMarshal(&baseTokenPrice) + }, + expectedError: fmt.Sprintf( + "price not found for baseDenom='%s' quoteDenom='%s' poolId='%d'", + baseTokenPrice.BaseDenom, + baseTokenPrice.QuoteDenom, + baseTokenPrice.OsmosisPoolId), + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + // Reset context for each test case + s.SetupTest() + + // Run test case setup + twapDataBz, callbackDataBz := tc.setup() + + // Execute callback + query := icqtypes.Query{CallbackData: callbackDataBz} + err := keeper.OsmosisPriceCallback(s.App.ICQOracleKeeper, s.Ctx, twapDataBz, query) + + // Verify results + if tc.expectedError != "" { + s.Require().ErrorContains(err, tc.expectedError) + } else if tc.verify != nil { + tc.verify(err) + } + }) + } +} + +func (s *KeeperTestSuite) TestUnmarshalSpotPriceFromOsmosis() { + testCases := []struct { + name string + tokenPrice types.TokenPrice + twapData []byte + expectedPrice sdkmath.LegacyDec + expectedError string + }{ + { + name: "invalid pool data", + tokenPrice: types.TokenPrice{ + OsmosisBaseDenom: "ibc/atom", + OsmosisQuoteDenom: "ibc/usdc", + }, + twapData: []byte("invalid pool data"), + expectedError: "unable to unmarshal the query response", + }, + { + name: "successful price calculation", + tokenPrice: types.TokenPrice{ + OsmosisBaseDenom: "ibc/atom", + OsmosisQuoteDenom: "ibc/usdc", + }, + twapData: s.createMockTwapData( + "ibc/atom", // base + "ibc/usdc", // quote + "ibc/atom", // asset0 + "ibc/usdc", // asset1 + ), + expectedPrice: sdkmath.LegacyMustNewDecFromStr("1.5"), // 1.5 from mock pool data + }, + { + name: "successful price calculation with assets inverted", + tokenPrice: types.TokenPrice{ + OsmosisBaseDenom: "ibc/atom", + OsmosisQuoteDenom: "ibc/usdc", + }, + twapData: s.createMockTwapData( + "ibc/atom", // base + "ibc/usdc", // quote + "ibc/usdc", // asset0 + "ibc/atom", // asset1 + ), + expectedPrice: sdkmath.LegacyMustNewDecFromStr("1.5"), // 1.5 from mock pool data + }, + { + name: "different denom ordering in pool", + tokenPrice: types.TokenPrice{ + OsmosisBaseDenom: "ibc/atom", + OsmosisQuoteDenom: "different_denom", + }, + twapData: s.createMockTwapData( + "ibc/atom", + "ibc/usdc", + "ibc/atom", + "ibc/usdc", + ), + expectedError: "Assets in query response (ibc/atom, ibc/usdc) do not match denom's from token price (ibc/atom, different_denom)", + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + spotPrice, err := keeper.UnmarshalSpotPriceFromOsmosis(s.App.ICQOracleKeeper, tc.tokenPrice, tc.twapData) + + if tc.expectedError != "" { + s.Require().ErrorContains(err, tc.expectedError) + } else { + s.Require().NoError(err) + s.Require().InDelta( + tc.expectedPrice.MustFloat64(), + spotPrice.MustFloat64(), + 0.000001, + "expected price %v, got %v", tc.expectedPrice, spotPrice, + ) + } + }) + } +} + +func (s *KeeperTestSuite) TestAssertTwapAssetsMatchTokenPrice() { + testCases := []struct { + name string + twapRecord types.OsmosisTwapRecord + tokenPrice types.TokenPrice + expectedMatch bool + }{ + { + name: "successful match - 1", + twapRecord: types.OsmosisTwapRecord{Asset0Denom: "denom-a", Asset1Denom: "denom-b"}, + tokenPrice: types.TokenPrice{OsmosisBaseDenom: "denom-a", OsmosisQuoteDenom: "denom-b"}, + expectedMatch: true, + }, + { + name: "successful match - 2", + twapRecord: types.OsmosisTwapRecord{Asset0Denom: "denom-b", Asset1Denom: "denom-a"}, + tokenPrice: types.TokenPrice{OsmosisBaseDenom: "denom-b", OsmosisQuoteDenom: "denom-a"}, + expectedMatch: true, + }, + { + name: "successful match - 3", + twapRecord: types.OsmosisTwapRecord{Asset0Denom: "denom-a", Asset1Denom: "denom-b"}, + tokenPrice: types.TokenPrice{OsmosisBaseDenom: "denom-b", OsmosisQuoteDenom: "denom-a"}, + expectedMatch: true, + }, + { + name: "successful match - 4", + twapRecord: types.OsmosisTwapRecord{Asset0Denom: "denom-b", Asset1Denom: "denom-a"}, + tokenPrice: types.TokenPrice{OsmosisBaseDenom: "denom-a", OsmosisQuoteDenom: "denom-b"}, + expectedMatch: true, + }, + { + name: "mismatch osmo asset 0", + twapRecord: types.OsmosisTwapRecord{Asset0Denom: "denom-z", Asset1Denom: "denom-b"}, + tokenPrice: types.TokenPrice{OsmosisBaseDenom: "denom-a", OsmosisQuoteDenom: "denom-b"}, + expectedMatch: false, + }, + { + name: "mismatch osmo asset 1", + twapRecord: types.OsmosisTwapRecord{Asset0Denom: "denom-a", Asset1Denom: "denom-z"}, + tokenPrice: types.TokenPrice{OsmosisBaseDenom: "denom-a", OsmosisQuoteDenom: "denom-b"}, + expectedMatch: false, + }, + { + name: "mismatch route reward denom", + twapRecord: types.OsmosisTwapRecord{Asset0Denom: "denom-a", Asset1Denom: "denom-b"}, + tokenPrice: types.TokenPrice{OsmosisBaseDenom: "denom-z", OsmosisQuoteDenom: "denom-b"}, + expectedMatch: false, + }, + { + name: "mismatch route host denom", + twapRecord: types.OsmosisTwapRecord{Asset0Denom: "denom-a", Asset1Denom: "denom-b"}, + tokenPrice: types.TokenPrice{OsmosisBaseDenom: "denom-a", OsmosisQuoteDenom: "denom-z"}, + expectedMatch: false, + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + err := keeper.AssertTwapAssetsMatchTokenPrice(tc.twapRecord, tc.tokenPrice) + if tc.expectedMatch { + s.Require().NoError(err) + } else { + s.Require().Error(err) + } + }) + } +} diff --git a/x/icqoracle/keeper/keeper.go b/x/icqoracle/keeper/keeper.go new file mode 100644 index 00000000000..dad0aa9d103 --- /dev/null +++ b/x/icqoracle/keeper/keeper.go @@ -0,0 +1,48 @@ +package keeper + +import ( + "fmt" + + "cosmossdk.io/log" + + storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/icqoracle/types" +) + +type Keeper struct { + cdc codec.Codec + storeKey storetypes.StoreKey + IcqKeeper types.IcqKeeper + ibcTransferKeeper types.IbcTransferKeeper + // the address capable of executing a MsgUpdateParams message. Typically, this + // should be the x/gov module account. + authority string +} + +func NewKeeper( + cdc codec.Codec, + storeKey storetypes.StoreKey, + icqKeeper types.IcqKeeper, + ibcTransferKeeper types.IbcTransferKeeper, + authority string, +) *Keeper { + return &Keeper{ + cdc: cdc, + storeKey: storeKey, + IcqKeeper: icqKeeper, + ibcTransferKeeper: ibcTransferKeeper, + authority: authority, + } +} + +func (k Keeper) Logger(ctx sdk.Context) log.Logger { + return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) +} + +// GetAuthority returns the x/icqoracle module's authority. +func (k Keeper) GetAuthority() string { + return k.authority +} diff --git a/x/icqoracle/keeper/keeper_test.go b/x/icqoracle/keeper/keeper_test.go new file mode 100644 index 00000000000..5ce4f6c836f --- /dev/null +++ b/x/icqoracle/keeper/keeper_test.go @@ -0,0 +1,58 @@ +package keeper_test + +import ( + "testing" + "time" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/suite" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/icqoracle/keeper" + "github.com/osmosis-labs/osmosis/v27/x/icqoracle/types" + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" +) + +type KeeperTestSuite struct { + apptesting.AppTestHelper + mockICQKeeper types.IcqKeeper +} + +// Helper function to setup keeper with mock ICQ keeper +func (s *KeeperTestSuite) SetupMockICQKeeper() { + mockICQKeeper := MockICQKeeper{ + SubmitICQRequestFn: func(ctx sdk.Context, query icqtypes.Query, forceUnique bool) error { + return nil + }, + } + s.App.ICQOracleKeeper.IcqKeeper = mockICQKeeper +} + +// Modify SetupTest to include mock setup +func (s *KeeperTestSuite) SetupTest() { + s.Setup() + s.SetupMockICQKeeper() + + // Set the time to test price staleness + s.Ctx = s.Ctx.WithBlockTime(time.Now().UTC()) +} + +// Dynamically gets the MsgServer for this module's keeper +// this function must be used so that the MsgServer is always created with the most updated App context +// +// which can change depending on the type of test +// (e.g. tests with only one Stride chain vs tests with multiple chains and IBC support) +func (s *KeeperTestSuite) GetMsgServer() types.MsgServer { + return keeper.NewMsgServerImpl(s.App.ICQOracleKeeper) +} + +func TestKeeperTestSuite(t *testing.T) { + suite.Run(t, new(KeeperTestSuite)) +} + +// Helper function to get a token price and confirm there's no error +func (s *KeeperTestSuite) MustGetTokenPrice(baseDenom string, quoteDenom string, osmosisPoolId uint64) types.TokenPrice { + tp, err := s.App.ICQOracleKeeper.GetTokenPrice(s.Ctx, baseDenom, quoteDenom, osmosisPoolId) + s.Require().NoError(err, "no error expected when getting token price") + return tp +} diff --git a/x/icqoracle/keeper/msg_server.go b/x/icqoracle/keeper/msg_server.go new file mode 100644 index 00000000000..691c860f9aa --- /dev/null +++ b/x/icqoracle/keeper/msg_server.go @@ -0,0 +1,70 @@ +package keeper + +import ( + "context" + "time" + + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + + "github.com/osmosis-labs/osmosis/v27/x/icqoracle/types" +) + +type msgServer struct { + Keeper +} + +// NewMsgServerImpl returns an implementation of the MsgServer interface +// for the provided Keeper. +func NewMsgServerImpl(keeper Keeper) types.MsgServer { + return &msgServer{Keeper: keeper} +} + +var _ types.MsgServer = msgServer{} + +// RegisterTokenPriceQuery registers a token to price tracking +func (ms msgServer) RegisterTokenPriceQuery(goCtx context.Context, msg *types.MsgRegisterTokenPriceQuery) (*types.MsgRegisterTokenPriceQueryResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + _, err := ms.Keeper.GetTokenPrice(ctx, msg.BaseDenom, msg.QuoteDenom, msg.OsmosisPoolId) + if err == nil { + return nil, types.ErrTokenPriceAlreadyExists.Wrapf("token price BaseDenom='%s' QuoteDenom='%s' OsmosisPoolId='%d'", msg.BaseDenom, msg.QuoteDenom, msg.OsmosisPoolId) + } + + tokenPrice := types.TokenPrice{ + BaseDenom: msg.BaseDenom, + QuoteDenom: msg.QuoteDenom, + OsmosisPoolId: msg.OsmosisPoolId, + OsmosisBaseDenom: msg.OsmosisBaseDenom, + OsmosisQuoteDenom: msg.OsmosisQuoteDenom, + LastRequestTime: time.Time{}, + SpotPrice: sdkmath.LegacyZeroDec(), + QueryInProgress: false, + } + ms.Keeper.SetTokenPrice(ctx, tokenPrice) + + return &types.MsgRegisterTokenPriceQueryResponse{}, nil +} + +// RemoveTokenPriceQuery removes a token from price tracking +func (ms msgServer) RemoveTokenPriceQuery(goCtx context.Context, msg *types.MsgRemoveTokenPriceQuery) (*types.MsgRemoveTokenPriceQueryResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + ms.Keeper.RemoveTokenPrice(ctx, msg.BaseDenom, msg.QuoteDenom, msg.OsmosisPoolId) + + return &types.MsgRemoveTokenPriceQueryResponse{}, nil +} + +func (k msgServer) UpdateParams(goCtx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { + if k.GetAuthority() != req.Authority { + return nil, errorsmod.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", k.GetAuthority(), req.Authority) + } + + ctx := sdk.UnwrapSDKContext(goCtx) + k.SetParams(ctx, req.Params) + + return &types.MsgUpdateParamsResponse{}, nil +} diff --git a/x/icqoracle/keeper/msg_server_test.go b/x/icqoracle/keeper/msg_server_test.go new file mode 100644 index 00000000000..4b6228eede9 --- /dev/null +++ b/x/icqoracle/keeper/msg_server_test.go @@ -0,0 +1,71 @@ +package keeper_test + +import ( + "time" + + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/icqoracle/types" +) + +func (s *KeeperTestSuite) TestRegisterTokenPriceQuery() { + // Create a new token price query + msg := types.MsgRegisterTokenPriceQuery{ + BaseDenom: "uatom", + QuoteDenom: "uusdc", + OsmosisPoolId: 1, + OsmosisBaseDenom: "ibc/uatom", + OsmosisQuoteDenom: "uusdc", + } + _, err := s.GetMsgServer().RegisterTokenPriceQuery(sdk.UnwrapSDKContext(s.Ctx), &msg) + s.Require().NoError(err, "no error expected when registering token price query") + + // Confirm the token price was created + tokenPrice := s.MustGetTokenPrice(msg.BaseDenom, msg.QuoteDenom, msg.OsmosisPoolId) + + s.Require().Equal(msg.BaseDenom, tokenPrice.BaseDenom, "base denom") + s.Require().Equal(msg.QuoteDenom, tokenPrice.QuoteDenom, "quote denom") + s.Require().Equal(msg.OsmosisPoolId, tokenPrice.OsmosisPoolId, "osmosis pool id") + s.Require().Equal(msg.OsmosisBaseDenom, tokenPrice.OsmosisBaseDenom, "osmosis base denom") + s.Require().Equal(msg.OsmosisQuoteDenom, tokenPrice.OsmosisQuoteDenom, "osmosis quote denom") + s.Require().Equal(sdkmath.LegacyZeroDec(), tokenPrice.SpotPrice, "spot price") + s.Require().Equal(false, tokenPrice.QueryInProgress, "query in progress") + s.Require().Equal(time.Time{}, tokenPrice.LastRequestTime, "updated at") + + // Attempt to register it again, it should fail + _, err = s.GetMsgServer().RegisterTokenPriceQuery(sdk.UnwrapSDKContext(s.Ctx), &msg) + s.Require().ErrorIs(err, types.ErrTokenPriceAlreadyExists) +} + +func (s *KeeperTestSuite) TestRemoveTokenPriceQuery() { + // Create a token price + tokenPrice := types.TokenPrice{ + BaseDenom: "uatom", + QuoteDenom: "uusdc", + OsmosisPoolId: 1, + OsmosisBaseDenom: "ibc/uatom", + OsmosisQuoteDenom: "uusdc", + SpotPrice: sdkmath.LegacyNewDec(1), + LastRequestTime: time.Now().UTC(), + QueryInProgress: false, + } + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, tokenPrice) + + // Remove the token price + msg := types.MsgRemoveTokenPriceQuery{ + BaseDenom: tokenPrice.BaseDenom, + QuoteDenom: tokenPrice.QuoteDenom, + OsmosisPoolId: tokenPrice.OsmosisPoolId, + } + _, err := s.GetMsgServer().RemoveTokenPriceQuery(sdk.UnwrapSDKContext(s.Ctx), &msg) + s.Require().NoError(err, "no error expected when removing token price query") + + // Confirm the token price was removed + tp, err := s.App.ICQOracleKeeper.GetTokenPrice(s.Ctx, msg.BaseDenom, msg.QuoteDenom, msg.OsmosisPoolId) + s.Require().Error(err, "token price %+v should have been removed", tp) + + // Try to remove it again, it should still succeed + _, err = s.GetMsgServer().RemoveTokenPriceQuery(sdk.UnwrapSDKContext(s.Ctx), &msg) + s.Require().NoError(err, "no error expected when removing non-existent token price query") +} diff --git a/x/icqoracle/keeper/params.go b/x/icqoracle/keeper/params.go new file mode 100644 index 00000000000..df3b2a3236d --- /dev/null +++ b/x/icqoracle/keeper/params.go @@ -0,0 +1,22 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/icqoracle/types" +) + +// GetParams get params +func (k Keeper) GetParams(ctx sdk.Context) (params types.Params) { + store := ctx.KVStore(k.storeKey) + bz := store.Get(types.ParamsKey) + k.cdc.MustUnmarshal(bz, ¶ms) + return params +} + +// SetParams set params +func (k Keeper) SetParams(ctx sdk.Context, params types.Params) { + store := ctx.KVStore(k.storeKey) + bz := k.cdc.MustMarshal(¶ms) + store.Set(types.ParamsKey, bz) +} diff --git a/x/icqoracle/keeper/params_test.go b/x/icqoracle/keeper/params_test.go new file mode 100644 index 00000000000..e02ca5c2465 --- /dev/null +++ b/x/icqoracle/keeper/params_test.go @@ -0,0 +1,16 @@ +package keeper_test + +import "github.com/osmosis-labs/osmosis/v27/x/icqoracle/types" + +func (s *KeeperTestSuite) TestParams() { + expectedParams := types.Params{ + OsmosisChainId: "osmosis-1", + OsmosisConnectionId: "connection-2", + UpdateIntervalSec: 5 * 60, // 5 min + PriceExpirationTimeoutSec: 15 * 60, // 15 min + } + s.App.ICQOracleKeeper.SetParams(s.Ctx, expectedParams) + + actualParams := s.App.ICQOracleKeeper.GetParams(s.Ctx) + s.Require().Equal(expectedParams, actualParams, "params") +} diff --git a/x/icqoracle/keeper/query.go b/x/icqoracle/keeper/query.go new file mode 100644 index 00000000000..4027a2fc02e --- /dev/null +++ b/x/icqoracle/keeper/query.go @@ -0,0 +1,122 @@ +package keeper + +import ( + "context" + "strings" + + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "cosmossdk.io/store/prefix" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/query" + + ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + + "github.com/osmosis-labs/osmosis/v27/x/icqoracle/types" +) + +var _ types.QueryServer = Keeper{} + +// TokenPrice queries the current price for a specific token +func (k Keeper) TokenPrice(goCtx context.Context, req *types.QueryTokenPriceRequest) (*types.TokenPriceResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + ctx := sdk.UnwrapSDKContext(goCtx) + + tokenPrice, err := k.GetTokenPrice(ctx, req.BaseDenom, req.QuoteDenom, req.PoolId) + if err != nil { + return nil, status.Error(codes.NotFound, err.Error()) + } + + return &types.TokenPriceResponse{ + BaseDenomUnwrapped: k.unwrapIBCDenom(ctx, tokenPrice.BaseDenom), + QuoteDenomUnwrapped: k.unwrapIBCDenom(ctx, tokenPrice.QuoteDenom), + TokenPrice: tokenPrice, + }, nil +} + +// TokenPrices queries all token prices +func (k Keeper) TokenPrices(goCtx context.Context, req *types.QueryTokenPricesRequest) (*types.QueryTokenPricesResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + ctx := sdk.UnwrapSDKContext(goCtx) + + store := ctx.KVStore(k.storeKey) + tokenPriceStore := prefix.NewStore(store, types.TokenPricePrefix) + + responses := []types.TokenPriceResponse{} + pageRes, err := query.Paginate(tokenPriceStore, req.Pagination, func(key []byte, value []byte) error { + var tokenPrice types.TokenPrice + if err := k.cdc.Unmarshal(value, &tokenPrice); err != nil { + return err + } + + responses = append(responses, types.TokenPriceResponse{ + BaseDenomUnwrapped: k.unwrapIBCDenom(ctx, tokenPrice.BaseDenom), + QuoteDenomUnwrapped: k.unwrapIBCDenom(ctx, tokenPrice.QuoteDenom), + TokenPrice: tokenPrice, + }) + return nil + }) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryTokenPricesResponse{ + TokenPrices: responses, + Pagination: pageRes, + }, nil +} + +// Params queries the oracle parameters +func (k Keeper) Params(goCtx context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + ctx := sdk.UnwrapSDKContext(goCtx) + + params := k.GetParams(ctx) + + return &types.QueryParamsResponse{ + Params: params, + }, nil +} + +// TokenPriceForQuoteDenom queries the exchange rate between two tokens +func (k Keeper) TokenPriceForQuoteDenom(goCtx context.Context, req *types.QueryTokenPriceForQuoteDenomRequest) (*types.QueryTokenPriceForQuoteDenomResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + ctx := sdk.UnwrapSDKContext(goCtx) + + price, err := k.GetTokenPriceForQuoteDenom(ctx, req.BaseDenom, req.QuoteDenom) + if err != nil { + return nil, status.Error(codes.NotFound, err.Error()) + } + + return &types.QueryTokenPriceForQuoteDenomResponse{ + Price: price, + }, nil +} + +func (k Keeper) unwrapIBCDenom(ctx sdk.Context, denom string) string { + if !strings.HasPrefix(denom, "ibc/") { + return denom + } + + hash, err := ibctransfertypes.ParseHexHash(strings.TrimPrefix(denom, "ibc/")) + if err == nil { + denomTrace, found := k.ibcTransferKeeper.GetDenomTrace(ctx, hash) + if found { + return denomTrace.BaseDenom + } + } + return denom +} diff --git a/x/icqoracle/keeper/query_test.go b/x/icqoracle/keeper/query_test.go new file mode 100644 index 00000000000..528a4a4d116 --- /dev/null +++ b/x/icqoracle/keeper/query_test.go @@ -0,0 +1,532 @@ +package keeper_test + +import ( + "time" + + sdkmath "cosmossdk.io/math" + "github.com/cosmos/cosmos-sdk/types/query" + + "github.com/osmosis-labs/osmosis/v27/x/icqoracle/types" +) + +func (s *KeeperTestSuite) TestQueryTokenPrice() { + // Create token price entry + baseDenom := "uatom" + quoteDenom := "uusdc" + poolId := uint64(1) + expectedPrice := sdkmath.LegacyNewDec(1000000) + + tokenPrice := types.TokenPrice{ + BaseDenom: baseDenom, + QuoteDenom: quoteDenom, + OsmosisPoolId: poolId, + SpotPrice: expectedPrice, + } + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, tokenPrice) + + // Query for the token price + req := &types.QueryTokenPriceRequest{ + BaseDenom: baseDenom, + QuoteDenom: quoteDenom, + PoolId: poolId, + } + resp, err := s.App.ICQOracleKeeper.TokenPrice(s.Ctx, req) + s.Require().NoError(err, "no error expected when querying token price") + s.Require().Equal(expectedPrice, resp.TokenPrice.SpotPrice, "token price") + + // Query with invalid request + _, err = s.App.ICQOracleKeeper.TokenPrice(s.Ctx, nil) + s.Require().Error(err, "error expected when querying with nil request") + + // Query with non existing + req = &types.QueryTokenPriceRequest{ + BaseDenom: "banana", + QuoteDenom: "papaya", + PoolId: 1, + } + _, err = s.App.ICQOracleKeeper.TokenPrice(s.Ctx, req) + s.Require().Error(err, "error expected when querying non existing token price") +} + +func (s *KeeperTestSuite) TestQueryTokenPrices() { + // Create multiple token prices + expectedPrices := []types.TokenPrice{ + { + BaseDenom: "uatom", + QuoteDenom: "uusdc", + OsmosisPoolId: 1, + SpotPrice: sdkmath.LegacyNewDec(1000000), + }, + { + BaseDenom: "uosmo", + QuoteDenom: "uusdc", + OsmosisPoolId: 2, + SpotPrice: sdkmath.LegacyNewDec(2000000), + }, + } + + for _, price := range expectedPrices { + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, price) + } + + // Query all token prices + req := &types.QueryTokenPricesRequest{} + resp, err := s.App.ICQOracleKeeper.TokenPrices(s.Ctx, req) + s.Require().NoError(err, "no error expected when querying all token prices") + s.Require().Equal(expectedPrices[0], resp.TokenPrices[0].TokenPrice, "token prices") + s.Require().Equal(expectedPrices[1], resp.TokenPrices[1].TokenPrice, "token prices") + + // Query with invalid request + _, err = s.App.ICQOracleKeeper.TokenPrices(s.Ctx, nil) + s.Require().Error(err, "error expected when querying with nil request") +} + +func (s *KeeperTestSuite) TestQueryTokenPricesPagination() { + // Create multiple token prices + // Sorted by store ket `baseDenom + quoteDenom + poolId` + expectedPrices := []types.TokenPrice{ + { + BaseDenom: "uatom", + QuoteDenom: "uusdc", + OsmosisPoolId: 1, + SpotPrice: sdkmath.LegacyNewDec(1000000), + LastResponseTime: s.Ctx.BlockTime(), + }, + { + BaseDenom: "ujuno", + QuoteDenom: "uusdc", + OsmosisPoolId: 3, + SpotPrice: sdkmath.LegacyNewDec(3000000), + LastResponseTime: s.Ctx.BlockTime(), + }, + { + BaseDenom: "uosmo", + QuoteDenom: "uusdc", + OsmosisPoolId: 2, + SpotPrice: sdkmath.LegacyNewDec(2000000), + LastResponseTime: s.Ctx.BlockTime(), + }, + } + + for _, price := range expectedPrices { + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, price) + } + + // Test pagination with limit of 2 + req := &types.QueryTokenPricesRequest{ + Pagination: &query.PageRequest{ + Limit: 2, + }, + } + resp, err := s.App.ICQOracleKeeper.TokenPrices(s.Ctx, req) + s.Require().NoError(err, "no error expected when querying with pagination") + s.Require().Len(resp.TokenPrices, 2, "should return 2 token prices") + s.Require().Equal(expectedPrices[0].String(), resp.TokenPrices[0].TokenPrice.String(), "first page token prices") + s.Require().Equal(expectedPrices[1].String(), resp.TokenPrices[1].TokenPrice.String(), "first page token prices") + s.Require().NotNil(resp.Pagination.NextKey, "next key should be present") + + // Query second page + req = &types.QueryTokenPricesRequest{ + Pagination: &query.PageRequest{ + Key: resp.Pagination.NextKey, + }, + } + resp, err = s.App.ICQOracleKeeper.TokenPrices(s.Ctx, req) + s.Require().NoError(err, "no error expected when querying second page") + s.Require().Len(resp.TokenPrices, 1, "should return 1 token price") + s.Require().Equal(expectedPrices[2].String(), resp.TokenPrices[0].TokenPrice.String(), "second page token price") + s.Require().Nil(resp.Pagination.NextKey, "next key should be nil") +} + +func (s *KeeperTestSuite) TestQueryParams() { + // Set parameters + expectedParams := types.Params{ + OsmosisChainId: "osmosis-1", + OsmosisConnectionId: "connection-2", + UpdateIntervalSec: 5 * 60, // 5 min + PriceExpirationTimeoutSec: 15 * 60, // 15 min + } + s.App.ICQOracleKeeper.SetParams(s.Ctx, expectedParams) + + // Query parameters + req := &types.QueryParamsRequest{} + resp, err := s.App.ICQOracleKeeper.Params(s.Ctx, req) + s.Require().NoError(err, "no error expected when querying params") + s.Require().Equal(expectedParams, resp.Params, "params") + + // Query with invalid request + _, err = s.App.ICQOracleKeeper.Params(s.Ctx, nil) + s.Require().Error(err, "error expected when querying with nil request") +} + +func (s *KeeperTestSuite) TestQueryTokenPriceForQuoteDenomSimple() { + // Setup params + s.App.ICQOracleKeeper.SetParams(s.Ctx, types.Params{ + PriceExpirationTimeoutSec: 60, + }) + + // Create token price with same quote denom + baseDenom := "uatom" + quoteDenom := "uusdc" + expectedPrice := sdkmath.LegacyNewDec(1000000) + + tokenPrice := types.TokenPrice{ + BaseDenom: baseDenom, + QuoteDenom: quoteDenom, + OsmosisPoolId: 1, + SpotPrice: expectedPrice, + LastResponseTime: s.Ctx.BlockTime(), + } + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, tokenPrice) + + // Query for token price using quote denom + req := &types.QueryTokenPriceForQuoteDenomRequest{ + BaseDenom: baseDenom, + QuoteDenom: quoteDenom, + } + resp, err := s.App.ICQOracleKeeper.TokenPriceForQuoteDenom(s.Ctx, req) + s.Require().NoError(err, "no error expected when querying token price for quote denom") + s.Require().Equal(expectedPrice, resp.Price, "token price") + + // Query for inverse token price using quote denom + req = &types.QueryTokenPriceForQuoteDenomRequest{ + BaseDenom: quoteDenom, + QuoteDenom: baseDenom, + } + resp, err = s.App.ICQOracleKeeper.TokenPriceForQuoteDenom(s.Ctx, req) + s.Require().NoError(err, "no error expected when querying inverse token price for quote denom") + s.Require().Equal(sdkmath.LegacyNewDec(1).Quo(expectedPrice), resp.Price, "inverse token price") + + // Query with invalid request + _, err = s.App.ICQOracleKeeper.TokenPriceForQuoteDenom(s.Ctx, nil) + s.Require().Error(err, "error expected when querying with nil request") + + // Query with non-existent denom pair + reqNonExistent := &types.QueryTokenPriceForQuoteDenomRequest{ + BaseDenom: "nonexistent", + QuoteDenom: "nonexistent", + } + _, err = s.App.ICQOracleKeeper.TokenPriceForQuoteDenom(s.Ctx, reqNonExistent) + s.Require().Error(err, "error expected when querying non-existent denom pair") +} + +func (s *KeeperTestSuite) TestQueryTokenPriceForQuoteDenom() { + s.App.ICQOracleKeeper.SetParams(s.Ctx, types.Params{ + PriceExpirationTimeoutSec: 60, + }) + + // Create two token prices with same quote denom + baseDenom1 := "uatom" + baseDenom2 := "uosmo" + quoteDenom := "uusdc" + expectedPrice1 := sdkmath.LegacyNewDec(1000000) + expectedPrice2 := sdkmath.LegacyNewDec(2000000) + + // Set uatom price + tokenPrice1 := types.TokenPrice{ + BaseDenom: baseDenom1, + QuoteDenom: quoteDenom, + OsmosisPoolId: 1, + SpotPrice: expectedPrice1, + LastResponseTime: s.Ctx.BlockTime(), + } + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, tokenPrice1) + + // Set uosmo price + tokenPrice2 := types.TokenPrice{ + BaseDenom: baseDenom2, + QuoteDenom: quoteDenom, + OsmosisPoolId: 2, + SpotPrice: expectedPrice2, + LastResponseTime: s.Ctx.BlockTime(), + } + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, tokenPrice2) + + // Query for token price using a common quote denom + req := &types.QueryTokenPriceForQuoteDenomRequest{ + BaseDenom: baseDenom1, + QuoteDenom: baseDenom2, + } + resp, err := s.App.ICQOracleKeeper.TokenPriceForQuoteDenom(s.Ctx, req) + s.Require().NoError(err, "no error expected when querying token price for quote denom") + s.Require().Equal(expectedPrice1.Quo(expectedPrice2), resp.Price, "token price") + + // Query for inverse token price using a common quote denom + req = &types.QueryTokenPriceForQuoteDenomRequest{ + BaseDenom: baseDenom2, + QuoteDenom: baseDenom1, + } + resp, err = s.App.ICQOracleKeeper.TokenPriceForQuoteDenom(s.Ctx, req) + s.Require().NoError(err, "no error expected when querying inverse token price for quote denom") + s.Require().Equal(sdkmath.LegacyNewDec(1).Quo(expectedPrice1.Quo(expectedPrice2)), resp.Price, "inverse token price") +} + +func (s *KeeperTestSuite) TestQueryTokenPriceForQuoteDenomStalePrice() { + // Set up parameters with short expiration time + params := types.Params{ + PriceExpirationTimeoutSec: 60, // 1 minute timeout + } + s.App.ICQOracleKeeper.SetParams(s.Ctx, params) + + // Create token prices + baseDenom := "uatom" + quoteDenom := "uusdc" + expectedPrice := sdkmath.LegacyNewDec(1000000) + + tokenPrice := types.TokenPrice{ + BaseDenom: baseDenom, + QuoteDenom: quoteDenom, + OsmosisPoolId: 1, + SpotPrice: expectedPrice, + LastResponseTime: s.Ctx.BlockTime(), + } + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, tokenPrice) + + // Fast forward block time to make price stale + s.Ctx = s.Ctx.WithBlockTime(s.Ctx.BlockTime().Add(time.Minute * 2)) + + // Query should fail due to stale price + req := &types.QueryTokenPriceForQuoteDenomRequest{ + BaseDenom: baseDenom, + QuoteDenom: quoteDenom, + } + _, err := s.App.ICQOracleKeeper.TokenPriceForQuoteDenom(s.Ctx, req) + s.Require().ErrorContains(err, "foundAlreadyHasStalePrice='true'", "error should indicate price calculation failure") + + // Inverse query should fail due to stale price + req = &types.QueryTokenPriceForQuoteDenomRequest{ + BaseDenom: quoteDenom, + QuoteDenom: baseDenom, + } + _, err = s.App.ICQOracleKeeper.TokenPriceForQuoteDenom(s.Ctx, req) + s.Require().ErrorContains(err, "foundAlreadyHasStalePrice='true'", "error should indicate inverse price calculation failure") +} + +func (s *KeeperTestSuite) TestQueryTokenPriceForQuoteDenomZeroPrice() { + // Create token prices with zero price for quote token + baseDenom := "uatom" + quoteDenom := "uusdc" + intermediateQuote := "uosmo" + + // Set base token price + tokenPrice1 := types.TokenPrice{ + BaseDenom: baseDenom, + QuoteDenom: intermediateQuote, + OsmosisPoolId: 1, + SpotPrice: sdkmath.LegacyNewDec(1000000), + LastResponseTime: s.Ctx.BlockTime(), + } + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, tokenPrice1) + + // Set quote token price with zero value + tokenPrice2 := types.TokenPrice{ + BaseDenom: quoteDenom, + QuoteDenom: intermediateQuote, + OsmosisPoolId: 2, + SpotPrice: sdkmath.LegacyZeroDec(), + LastResponseTime: s.Ctx.BlockTime(), + } + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, tokenPrice2) + + // Query should fail due to zero price + req := &types.QueryTokenPriceForQuoteDenomRequest{ + BaseDenom: baseDenom, + QuoteDenom: quoteDenom, + } + _, err := s.App.ICQOracleKeeper.TokenPriceForQuoteDenom(s.Ctx, req) + s.Require().ErrorContains(err, "could not calculate price", "error should indicate price calculation failure") + + // Inverse query should fail due to zero price + req = &types.QueryTokenPriceForQuoteDenomRequest{ + BaseDenom: quoteDenom, + QuoteDenom: baseDenom, + } + _, err = s.App.ICQOracleKeeper.TokenPriceForQuoteDenom(s.Ctx, req) + s.Require().ErrorContains(err, "could not calculate price", "error should indicate inverse price calculation failure") +} + +func (s *KeeperTestSuite) TestQueryTokenPriceForQuoteDenomNoCommonQuote() { + // Create token prices with different quote denoms + baseDenom := "uatom" + quoteDenom := "uusdc" + + // Set base token price with one quote denom + tokenPrice1 := types.TokenPrice{ + BaseDenom: baseDenom, + QuoteDenom: "quote1", + OsmosisPoolId: 1, + SpotPrice: sdkmath.LegacyNewDec(1000000), + LastResponseTime: s.Ctx.BlockTime(), + } + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, tokenPrice1) + + // Set quote token price with different quote denom + tokenPrice2 := types.TokenPrice{ + BaseDenom: quoteDenom, + QuoteDenom: "quote2", + OsmosisPoolId: 2, + SpotPrice: sdkmath.LegacyNewDec(2000000), + LastResponseTime: s.Ctx.BlockTime(), + } + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, tokenPrice2) + + // Query should fail due to no common quote denom + req := &types.QueryTokenPriceForQuoteDenomRequest{ + BaseDenom: baseDenom, + QuoteDenom: quoteDenom, + } + _, err := s.App.ICQOracleKeeper.TokenPriceForQuoteDenom(s.Ctx, req) + s.Require().ErrorContains(err, "could not calculate price", "error should indicate price calculation failure") + + // Inverse query should fail due to no common quote denom + req = &types.QueryTokenPriceForQuoteDenomRequest{ + BaseDenom: quoteDenom, + QuoteDenom: baseDenom, + } + _, err = s.App.ICQOracleKeeper.TokenPriceForQuoteDenom(s.Ctx, req) + s.Require().ErrorContains(err, "could not calculate price", "error should indicate inverse price calculation failure") +} + +func (s *KeeperTestSuite) TestQueryTokenPriceForQuoteDenomNoBaseDenom() { + req := &types.QueryTokenPriceForQuoteDenomRequest{ + BaseDenom: "banana", + QuoteDenom: "papaya", + } + _, err := s.App.ICQOracleKeeper.TokenPriceForQuoteDenom(s.Ctx, req) + s.Require().ErrorContains(err, "no price for baseDenom 'banana'") + s.Require().ErrorContains(err, "no price for baseDenom 'papaya'") + + req = &types.QueryTokenPriceForQuoteDenomRequest{ + BaseDenom: "papaya", + QuoteDenom: "banana", + } + _, err = s.App.ICQOracleKeeper.TokenPriceForQuoteDenom(s.Ctx, req) + s.Require().ErrorContains(err, "no price for baseDenom 'papaya'") + s.Require().ErrorContains(err, "no price for baseDenom 'banana'") +} + +func (s *KeeperTestSuite) TestQueryTokenPriceForQuoteDenomNoQuoteDenom() { + // Set base token price with one quote denom + tokenPrice1 := types.TokenPrice{ + BaseDenom: "banana", + QuoteDenom: "quote1", + OsmosisPoolId: 1, + SpotPrice: sdkmath.LegacyNewDec(1000000), + LastResponseTime: s.Ctx.BlockTime(), + } + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, tokenPrice1) + + req := &types.QueryTokenPriceForQuoteDenomRequest{ + BaseDenom: "banana", + QuoteDenom: "papaya", + } + _, err := s.App.ICQOracleKeeper.TokenPriceForQuoteDenom(s.Ctx, req) + s.Require().ErrorContains(err, "no price for quoteDenom 'papaya' (foundAlreadyHasStalePrice='false'") + s.Require().ErrorContains(err, "no price for baseDenom 'papaya'") + + req = &types.QueryTokenPriceForQuoteDenomRequest{ + BaseDenom: "papaya", + QuoteDenom: "banana", + } + _, err = s.App.ICQOracleKeeper.TokenPriceForQuoteDenom(s.Ctx, req) + s.Require().ErrorContains(err, "no price for baseDenom 'papaya'") + s.Require().ErrorContains(err, "no price for quoteDenom 'papaya' (foundAlreadyHasStalePrice='false'") +} + +func (s *KeeperTestSuite) TestQueryTokenPriceForQuoteDenomStaleBasePrice() { + // Set up parameters with short expiration time + params := types.Params{ + PriceExpirationTimeoutSec: 60, // 1 minute timeout + } + s.App.ICQOracleKeeper.SetParams(s.Ctx, params) + + // Create token prices with same quote denom + baseDenom := "uatom" + quoteDenom := "uusdc" + intermediateQuote := "uosmo" + + // Set base token price (will become stale) + tokenPrice1 := types.TokenPrice{ + BaseDenom: baseDenom, + QuoteDenom: intermediateQuote, + OsmosisPoolId: 1, + SpotPrice: sdkmath.LegacyNewDec(1000000), + LastResponseTime: s.Ctx.BlockTime().Add(-2 * time.Minute), // Stale + } + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, tokenPrice1) + + // Set quote token price (fresh) + tokenPrice2 := types.TokenPrice{ + BaseDenom: quoteDenom, + QuoteDenom: intermediateQuote, + OsmosisPoolId: 2, + SpotPrice: sdkmath.LegacyNewDec(2000000), + LastResponseTime: s.Ctx.BlockTime(), + } + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, tokenPrice2) + + // Query should fail due to stale base price + req := &types.QueryTokenPriceForQuoteDenomRequest{ + BaseDenom: baseDenom, + QuoteDenom: quoteDenom, + } + _, err := s.App.ICQOracleKeeper.TokenPriceForQuoteDenom(s.Ctx, req) + s.Require().ErrorContains(err, "foundBaseTokenStalePrice='true'", "error should indicate base token price is stale") + + // Inverse query should fail due to stale quote price + req = &types.QueryTokenPriceForQuoteDenomRequest{ + BaseDenom: quoteDenom, + QuoteDenom: baseDenom, + } + _, err = s.App.ICQOracleKeeper.TokenPriceForQuoteDenom(s.Ctx, req) + s.Require().ErrorContains(err, "foundQuoteTokenStalePrice='true'", "error should indicate base token price is stale") +} + +func (s *KeeperTestSuite) TestQueryTokenPriceForQuoteDenomStaleQuotePrice() { + // Set up parameters with short expiration time + params := types.Params{ + PriceExpirationTimeoutSec: 60, // 1 minute timeout + } + s.App.ICQOracleKeeper.SetParams(s.Ctx, params) + + // Create token prices with same quote denom + baseDenom := "uatom" + quoteDenom := "uusdc" + intermediateQuote := "uosmo" + + // Set base token price (fresh) + tokenPrice1 := types.TokenPrice{ + BaseDenom: baseDenom, + QuoteDenom: intermediateQuote, + OsmosisPoolId: 1, + SpotPrice: sdkmath.LegacyNewDec(1000000), + LastResponseTime: s.Ctx.BlockTime(), + } + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, tokenPrice1) + + // Set quote token price (will be stale) + tokenPrice2 := types.TokenPrice{ + BaseDenom: quoteDenom, + QuoteDenom: intermediateQuote, + OsmosisPoolId: 2, + SpotPrice: sdkmath.LegacyNewDec(2000000), + LastResponseTime: s.Ctx.BlockTime().Add(-2 * time.Minute), // Stale + } + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, tokenPrice2) + + // Query should fail due to stale quote price + req := &types.QueryTokenPriceForQuoteDenomRequest{ + BaseDenom: baseDenom, + QuoteDenom: quoteDenom, + } + _, err := s.App.ICQOracleKeeper.TokenPriceForQuoteDenom(s.Ctx, req) + s.Require().ErrorContains(err, "foundQuoteTokenStalePrice='true'", "error should indicate quote token price is stale") + + // Inverse query should fail due to stale quote price + req = &types.QueryTokenPriceForQuoteDenomRequest{ + BaseDenom: quoteDenom, + QuoteDenom: baseDenom, + } + _, err = s.App.ICQOracleKeeper.TokenPriceForQuoteDenom(s.Ctx, req) + s.Require().ErrorContains(err, "foundBaseTokenStalePrice='true'", "error should indicate quote token price is stale") +} diff --git a/x/icqoracle/keeper/token_price.go b/x/icqoracle/keeper/token_price.go new file mode 100644 index 00000000000..7d2f56ce362 --- /dev/null +++ b/x/icqoracle/keeper/token_price.go @@ -0,0 +1,252 @@ +package keeper + +import ( + "fmt" + + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + "cosmossdk.io/store/prefix" + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/utils" + "github.com/osmosis-labs/osmosis/v27/x/icqoracle/types" +) + +// SetTokenPrice stores price query for a token +func (k Keeper) SetTokenPrice(ctx sdk.Context, tokenPrice types.TokenPrice) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.TokenPricePrefix) + key := types.TokenPriceKey(tokenPrice.BaseDenom, tokenPrice.QuoteDenom, tokenPrice.OsmosisPoolId) + bz := k.cdc.MustMarshal(&tokenPrice) + store.Set(key, bz) +} + +// RemoveTokenPrice removes price query for a token +func (k Keeper) RemoveTokenPrice(ctx sdk.Context, baseDenom string, quoteDenom string, osmosisPoolId uint64) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.TokenPricePrefix) + key := types.TokenPriceKey(baseDenom, quoteDenom, osmosisPoolId) + store.Delete(key) +} + +// Updates the token price when a query is requested +func (k Keeper) SetQueryInProgress(ctx sdk.Context, baseDenom string, quoteDenom string, osmosisPoolId uint64) error { + tokenPrice, err := k.GetTokenPrice(ctx, baseDenom, quoteDenom, osmosisPoolId) + if err != nil { + return err + } + + tokenPrice.QueryInProgress = true + tokenPrice.LastRequestTime = ctx.BlockTime() + + k.SetTokenPrice(ctx, tokenPrice) + + return nil +} + +// Updates the token price when a query response is received +func (k Keeper) SetQueryComplete(ctx sdk.Context, tokenPrice types.TokenPrice, newSpotPrice sdkmath.LegacyDec) { + tokenPrice.SpotPrice = newSpotPrice + tokenPrice.QueryInProgress = false + tokenPrice.LastResponseTime = ctx.BlockTime() + k.SetTokenPrice(ctx, tokenPrice) +} + +// GetTokenPrice retrieves price data for a token +func (k Keeper) GetTokenPrice(ctx sdk.Context, baseDenom string, quoteDenom string, osmosisPoolId uint64) (types.TokenPrice, error) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.TokenPricePrefix) + key := types.TokenPriceKey(baseDenom, quoteDenom, osmosisPoolId) + + bz := store.Get(key) + if bz == nil { + return types.TokenPrice{}, fmt.Errorf("token price not found for baseDenom='%s' quoteDenom='%s' poolId='%d'", baseDenom, quoteDenom, osmosisPoolId) + } + + var price types.TokenPrice + if err := k.cdc.Unmarshal(bz, &price); err != nil { + return types.TokenPrice{}, errorsmod.Wrapf(err, "unable to unmarshal token price") + } + + return price, nil +} + +// GetTokenPriceByDenom retrieves all price data for a base denom +// Returned as a mapping of each quote denom to the spot price +func (k Keeper) GetTokenPricesByDenom(ctx sdk.Context, baseDenom string) (map[string]*types.TokenPrice, error) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.TokenPricePrefix) + + // Create prefix iterator for all keys starting with baseDenom + iterator := storetypes.KVStorePrefixIterator(store, types.TokenPriceByDenomKey(baseDenom)) + defer iterator.Close() + + prices := make(map[string]*types.TokenPrice) + + for ; iterator.Valid(); iterator.Next() { + var price types.TokenPrice + if err := k.cdc.Unmarshal(iterator.Value(), &price); err != nil { + return nil, err + } + + // Use quoteDenom as the map key + prices[price.QuoteDenom] = &price + } + + return prices, nil +} + +// GetTokenPriceForQuoteDenom calculates and retrieves the exchange rate between two tokens. +// The exchange rate is determined by finding a common quote token between both tokens, +// and then dividing their respective spot prices. +// +// For example, if we have: +// - baseToken/USDC = 10 +// - quoteToken/USDC = 5 +// +// Then: +// - baseToken/quoteToken = 10/5 = 2 +// +// Parameters: +// - ctx: SDK Context for accessing the store +// - baseDenom: The denom of the token to get the price for +// - quoteDenom: The denom to price the base token in +// +// Returns: +// - math.LegacyDec: The exchange rate of 1 baseToken in terms of quoteToken +// - error: Returns an error if: +// - No prices exist for either token +// - No common quote token exists between the two tokens +// - All available prices with a common quote token are stale (exceeded the expiration timeout) +func (k Keeper) GetTokenPriceForQuoteDenom(ctx sdk.Context, baseDenom string, quoteDenom string) (sdkmath.LegacyDec, error) { + // First attempt: Try to get the price with baseDenom as the base token and quoteDenom as the quote token + price, errDirect := k.getTokenPriceForQuoteDenomImpl(ctx, baseDenom, quoteDenom) + if errDirect == nil { + return price, nil + } + + // Second attempt: If the first attempt fails, try the reverse - use quoteDenom as the base token + // and baseDenom as the quote token, then invert the price (1/price) + price, errInverted := k.getTokenPriceForQuoteDenomImpl(ctx, quoteDenom, baseDenom) + if errInverted == nil { + // Invert the price to get the correct exchange rate + price = sdkmath.LegacyNewDec(1).Quo(price) + + return price, nil + } + + // If both attempts fail, return an error + return sdkmath.LegacyDec{}, errorsmod.Wrapf(types.ErrQuotePriceNotFound, + "no price found for baseDenom '%s' in terms of quoteDenom '%s' [%s], and no price found for '%s' in terms of '%s' [%s]", + baseDenom, quoteDenom, errDirect, quoteDenom, baseDenom, errInverted) +} + +// getTokenPriceForQuoteDenomImpl is the internal implementation that attempts to get the price +// for baseDenom in terms of quoteDenom by finding a common quote token. It returns an error +// if no valid price path can be found. +func (k Keeper) getTokenPriceForQuoteDenomImpl(ctx sdk.Context, baseDenom string, quoteDenom string) (price sdkmath.LegacyDec, err error) { + // Get all price for baseToken + baseTokenPrices, err := k.GetTokenPricesByDenom(ctx, baseDenom) + if err != nil { + return sdkmath.LegacyDec{}, fmt.Errorf("error getting price for '%s': %w", baseDenom, err) + } + if len(baseTokenPrices) == 0 { + return sdkmath.LegacyDec{}, fmt.Errorf("no price for baseDenom '%s'", baseDenom) + } + + // Get price expiration timeout + params := k.GetParams(ctx) + priceExpirationTimeoutSec := utils.UintToInt(params.PriceExpirationTimeoutSec) + + // Check if baseDenom already has a price for quoteDenom + foundAlreadyHasStalePrice := false + foundHasUninitializedPrice := false + if price, ok := baseTokenPrices[quoteDenom]; ok { + if ctx.BlockTime().Unix()-price.LastResponseTime.Unix() <= priceExpirationTimeoutSec { + if price.SpotPrice.IsZero() { + foundHasUninitializedPrice = true + } else { + return price.SpotPrice, nil + } + } else { + foundAlreadyHasStalePrice = true + } + } + + // Get all price for quoteToken + quoteTokenPrices, err := k.GetTokenPricesByDenom(ctx, quoteDenom) + if err != nil { + return sdkmath.LegacyDec{}, fmt.Errorf("error getting price for '%s': %w", quoteDenom, err) + } + if len(quoteTokenPrices) == 0 { + return sdkmath.LegacyDec{}, fmt.Errorf("no price for quoteDenom '%s' (foundAlreadyHasStalePrice='%v', foundHasUninitializedPrice='%v')", + quoteDenom, foundAlreadyHasStalePrice, foundHasUninitializedPrice) + } + + // Init price + price = sdkmath.LegacyZeroDec() + + // Define flags to allow for better error messages + foundCommonQuoteToken := false + foundBaseTokenStalePrice := false + foundQuoteTokenStalePrice := false + foundQuoteTokenZeroPrice := false + + // Find a common quote denom and calculate baseToken to quoteToken price + for commonQuoteDenom1, baseTokenPrice := range baseTokenPrices { + for commonQuoteDenom2, quoteTokenPrice := range quoteTokenPrices { + if commonQuoteDenom1 == commonQuoteDenom2 { + foundCommonQuoteToken = true + + // Check that both prices are not stale + if ctx.BlockTime().Unix()-baseTokenPrice.LastResponseTime.Unix() > priceExpirationTimeoutSec { + foundBaseTokenStalePrice = true + continue + } + if ctx.BlockTime().Unix()-quoteTokenPrice.LastResponseTime.Unix() > priceExpirationTimeoutSec { + foundQuoteTokenStalePrice = true + continue + } + + // Check that quote price is not zero to prevent division by zero + if quoteTokenPrice.SpotPrice.IsZero() { + foundQuoteTokenZeroPrice = true + continue + } + + // Calculate the price of 1 baseToken in quoteToken + price = baseTokenPrice.SpotPrice.Quo(quoteTokenPrice.SpotPrice) + break + } + } + } + + if price.IsZero() { + return sdkmath.LegacyDec{}, fmt.Errorf( + "could not calculate price for baseToken='%s' quoteToken='%s' "+ + "(foundCommonQuoteToken='%v', foundBaseTokenStalePrice='%v', "+ + "foundQuoteTokenStalePrice='%v', foundQuoteTokenZeroPrice='%v', foundAlreadyHasStalePrice='%v')", + baseDenom, + quoteDenom, + foundCommonQuoteToken, + foundBaseTokenStalePrice, + foundQuoteTokenStalePrice, + foundQuoteTokenZeroPrice, + foundAlreadyHasStalePrice, + ) + } + + return price, nil +} + +// GetAllTokenPrices retrieves all stored token prices +func (k Keeper) GetAllTokenPrices(ctx sdk.Context) []types.TokenPrice { + iterator := storetypes.KVStorePrefixIterator(ctx.KVStore(k.storeKey), types.TokenPricePrefix) + defer iterator.Close() + + prices := []types.TokenPrice{} + for ; iterator.Valid(); iterator.Next() { + var price types.TokenPrice + k.cdc.MustUnmarshal(iterator.Value(), &price) + prices = append(prices, price) + } + + return prices +} diff --git a/x/icqoracle/keeper/token_price_test.go b/x/icqoracle/keeper/token_price_test.go new file mode 100644 index 00000000000..420c175f05d --- /dev/null +++ b/x/icqoracle/keeper/token_price_test.go @@ -0,0 +1,235 @@ +package keeper_test + +import ( + "fmt" + "time" + + sdkmath "cosmossdk.io/math" + + "github.com/osmosis-labs/osmosis/v27/x/icqoracle/types" +) + +// Helper function to create 5 tokenPrice objects with various attributes +func (s *KeeperTestSuite) createTokenPrices() []types.TokenPrice { + tokenPrices := []types.TokenPrice{} + for i := int64(1); i <= 5; i++ { + tokenPrice := types.TokenPrice{ + BaseDenom: fmt.Sprintf("base-%d", i), + QuoteDenom: fmt.Sprintf("quote-%d", i), + SpotPrice: sdkmath.LegacyZeroDec(), + } + + tokenPrices = append(tokenPrices, tokenPrice) + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, tokenPrice) + } + return tokenPrices +} + +// Tests Get/Set TokenPrice +func (s *KeeperTestSuite) TestGetTokenPrice() { + tokenPrices := s.createTokenPrices() + + for _, expected := range tokenPrices { + actual, err := s.App.ICQOracleKeeper.GetTokenPrice(s.Ctx, expected.BaseDenom, expected.QuoteDenom, expected.OsmosisPoolId) + s.Require().NoError(err, "tokenPrice %s should have been found", expected.BaseDenom) + s.Require().Equal(expected, actual) + } + + _, err := s.App.ICQOracleKeeper.GetTokenPrice(s.Ctx, "non-existent", "non-existent", 0) + s.Require().ErrorContains(err, "price not found") +} + +// Tests getting all tokenPrices +func (s *KeeperTestSuite) TestGetAllTokenPrices() { + expectedTokenPrices := s.createTokenPrices() + + actualTokenPrices := s.App.ICQOracleKeeper.GetAllTokenPrices(s.Ctx) + s.Require().Equal(len(actualTokenPrices), len(expectedTokenPrices), "number of tokenPrices") + + for i, expectedTokenPrice := range expectedTokenPrices { + s.Require().Equal(expectedTokenPrice, actualTokenPrices[i]) + } +} + +// Tests getting a price from a common quote denom +func (s *KeeperTestSuite) TestGetTokenPriceForQuoteDenom() { + freshTime := s.Ctx.BlockTime().Add(-1 * time.Second) + staleTime := s.Ctx.BlockTime().Add(-1 * time.Hour) + + testCases := []struct { + name string + baseDenom string + quoteDenom string + tokenPrices []types.TokenPrice + expectedPrice sdkmath.LegacyDec + expectedErrors []string // array of errors from each search + }{ + { + name: "exact price found", + baseDenom: "denomA", + quoteDenom: "denomB", + tokenPrices: []types.TokenPrice{ + {BaseDenom: "denomA", QuoteDenom: "denomB", SpotPrice: sdkmath.LegacyNewDec(4), LastResponseTime: freshTime}, + }, + expectedPrice: sdkmath.LegacyMustNewDecFromStr("4.0"), + }, + { + name: "exact price found with inversion", + baseDenom: "denomA", + quoteDenom: "denomB", + tokenPrices: []types.TokenPrice{ + {BaseDenom: "denomB", QuoteDenom: "denomA", SpotPrice: sdkmath.LegacyNewDec(4), LastResponseTime: freshTime}, + }, + expectedPrice: sdkmath.LegacyMustNewDecFromStr("0.25"), // 1 / 4 + }, + { + name: "price through common token", + baseDenom: "base", + quoteDenom: "quote", + tokenPrices: []types.TokenPrice{ + {BaseDenom: "base", QuoteDenom: "common", SpotPrice: sdkmath.LegacyNewDec(2), LastResponseTime: freshTime}, + {BaseDenom: "quote", QuoteDenom: "common", SpotPrice: sdkmath.LegacyNewDec(4), LastResponseTime: freshTime}, + }, + expectedPrice: sdkmath.LegacyMustNewDecFromStr("0.5"), // 2 / 4 + }, + { + name: "price through common token with inversion", + baseDenom: "quote", + quoteDenom: "base", + tokenPrices: []types.TokenPrice{ + {BaseDenom: "base", QuoteDenom: "common", SpotPrice: sdkmath.LegacyNewDec(2), LastResponseTime: freshTime}, + {BaseDenom: "quote", QuoteDenom: "common", SpotPrice: sdkmath.LegacyNewDec(4), LastResponseTime: freshTime}, + }, + expectedPrice: sdkmath.LegacyMustNewDecFromStr("2.0"), // (1/2) / (1/4) + }, + { + name: "no common price", + baseDenom: "quote", + quoteDenom: "base", + tokenPrices: []types.TokenPrice{ + {BaseDenom: "base", QuoteDenom: "common1", SpotPrice: sdkmath.LegacyNewDec(2), LastResponseTime: freshTime}, + {BaseDenom: "quote", QuoteDenom: "common2", SpotPrice: sdkmath.LegacyNewDec(4), LastResponseTime: freshTime}, + }, + expectedErrors: []string{"foundCommonQuoteToken='false'", "foundCommonQuoteToken='false'"}, + }, + { + name: "stale price", + baseDenom: "base", + quoteDenom: "quote", + tokenPrices: []types.TokenPrice{ + {BaseDenom: "base", QuoteDenom: "quote", SpotPrice: sdkmath.LegacyNewDec(1), LastResponseTime: staleTime}, + }, + expectedErrors: []string{ + "no price for quoteDenom 'quote' (foundAlreadyHasStalePrice='true', foundHasUninitializedPrice='false')", + "no price for baseDenom 'quote'", + }, + }, + { + name: "zero price", + baseDenom: "base", + quoteDenom: "quote", + tokenPrices: []types.TokenPrice{ + {BaseDenom: "base", QuoteDenom: "quote", SpotPrice: sdkmath.LegacyNewDec(0), LastResponseTime: freshTime}, + }, + expectedErrors: []string{ + "no price for quoteDenom 'quote' (foundAlreadyHasStalePrice='false', foundHasUninitializedPrice='true')", + "no price for baseDenom 'quote'", + }, + }, + { + name: "zero price through common", + baseDenom: "base", + quoteDenom: "quote", + tokenPrices: []types.TokenPrice{ + {BaseDenom: "base", QuoteDenom: "common", SpotPrice: sdkmath.LegacyNewDec(1), LastResponseTime: freshTime}, + {BaseDenom: "quote", QuoteDenom: "common", SpotPrice: sdkmath.LegacyNewDec(0), LastResponseTime: freshTime}, + }, + expectedErrors: []string{ + "could not calculate price for baseToken='base'", + "could not calculate price for baseToken='quote'", + }, + }, + { + name: "stale base price through common token", + baseDenom: "base", + quoteDenom: "quote", + tokenPrices: []types.TokenPrice{ + {BaseDenom: "base", QuoteDenom: "common", SpotPrice: sdkmath.LegacyNewDec(2), LastResponseTime: staleTime}, + {BaseDenom: "quote", QuoteDenom: "common", SpotPrice: sdkmath.LegacyNewDec(4), LastResponseTime: freshTime}, + }, + expectedErrors: []string{ + "foundCommonQuoteToken='true', foundBaseTokenStalePrice='true', foundQuoteTokenStalePrice='false'", + "foundCommonQuoteToken='true', foundBaseTokenStalePrice='false', foundQuoteTokenStalePrice='true'", + }, + }, + { + name: "stale quote price through common token", + baseDenom: "quote", + quoteDenom: "base", + tokenPrices: []types.TokenPrice{ + {BaseDenom: "base", QuoteDenom: "common", SpotPrice: sdkmath.LegacyNewDec(2), LastResponseTime: freshTime}, + {BaseDenom: "quote", QuoteDenom: "common", SpotPrice: sdkmath.LegacyNewDec(4), LastResponseTime: staleTime}, + }, + expectedErrors: []string{ + "foundCommonQuoteToken='true', foundBaseTokenStalePrice='true', foundQuoteTokenStalePrice='false'", + "foundCommonQuoteToken='true', foundBaseTokenStalePrice='false', foundQuoteTokenStalePrice='true'", + }, + }, + { + name: "non-existent denoms", + baseDenom: "base", + quoteDenom: "quote", + tokenPrices: []types.TokenPrice{}, + expectedErrors: []string{"no price for baseDenom 'base'", "no price for baseDenom 'quote'"}, + }, + { + name: "no base denom", + baseDenom: "base", + quoteDenom: "quote", + tokenPrices: []types.TokenPrice{ + {BaseDenom: "quote", QuoteDenom: "common", SpotPrice: sdkmath.LegacyNewDec(4), LastResponseTime: freshTime}, + }, + expectedErrors: []string{ + "no price for baseDenom 'base'", + "no price for quoteDenom 'base' (foundAlreadyHasStalePrice='false', foundHasUninitializedPrice='false')", + }, + }, + { + name: "no quote denom", + baseDenom: "base", + quoteDenom: "quote", + tokenPrices: []types.TokenPrice{ + {BaseDenom: "base", QuoteDenom: "common", SpotPrice: sdkmath.LegacyNewDec(2), LastResponseTime: freshTime}, + }, + expectedErrors: []string{ + "no price for quoteDenom 'quote' (foundAlreadyHasStalePrice='false', foundHasUninitializedPrice='false')", + "no price for baseDenom 'quote'", + }, + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + s.SetupTest() + + params := types.DefaultParams() + params.PriceExpirationTimeoutSec = 60 // 1 minutes + s.App.ICQOracleKeeper.SetParams(s.Ctx, params) + + for _, tokenPrice := range tc.tokenPrices { + tokenPrice.OsmosisPoolId = 1 + s.App.ICQOracleKeeper.SetTokenPrice(s.Ctx, tokenPrice) + } + + actualPrice, actualError := s.App.ICQOracleKeeper.GetTokenPriceForQuoteDenom(s.Ctx, tc.baseDenom, tc.quoteDenom) + if len(tc.expectedErrors) != 0 { + for _, expectedError := range tc.expectedErrors { + s.Require().ErrorContains(actualError, expectedError) + } + } else { + s.Require().NoError(actualError) + s.Require().Equal(tc.expectedPrice, actualPrice, "price") + } + }) + } +} diff --git a/x/icqoracle/module.go b/x/icqoracle/module.go new file mode 100644 index 00000000000..6088465add2 --- /dev/null +++ b/x/icqoracle/module.go @@ -0,0 +1,162 @@ +package icqoracle + +import ( + "context" + "encoding/json" + "fmt" + + "cosmossdk.io/core/appmodule" + "github.com/gorilla/mux" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + + "github.com/osmosis-labs/osmosis/v27/x/icqoracle/client/cli" + "github.com/osmosis-labs/osmosis/v27/x/icqoracle/keeper" + "github.com/osmosis-labs/osmosis/v27/x/icqoracle/types" +) + +var ( + _ module.AppModuleBasic = AppModuleBasic{} + _ module.HasGenesisBasics = AppModuleBasic{} + + _ appmodule.AppModule = AppModule{} + _ appmodule.HasBeginBlocker = AppModule{} + + _ module.HasConsensusVersion = AppModule{} + _ module.HasGenesis = AppModule{} + _ module.HasServices = AppModule{} +) + +// ---------------------------------------------------------------------------- +// AppModuleBasic +// ---------------------------------------------------------------------------- + +// AppModuleBasic implements the AppModuleBasic interface for the capability module. +type AppModuleBasic struct { + cdc codec.BinaryCodec +} + +func NewAppModuleBasic(cdc codec.BinaryCodec) AppModuleBasic { + return AppModuleBasic{cdc: cdc} +} + +// Name returns the capability module's name. +func (AppModuleBasic) Name() string { + return types.ModuleName +} + +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + types.RegisterLegacyAminoCodec(cdc) +} + +// RegisterInterfaces registers the module's interface types +func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { + types.RegisterInterfaces(reg) +} + +// DefaultGenesis returns the capability module's default genesis state. +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return cdc.MustMarshalJSON(types.DefaultGenesis()) +} + +// ValidateGenesis performs genesis state validation for the capability module. +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { + var genState types.GenesisState + if err := cdc.UnmarshalJSON(bz, &genState); err != nil { + return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) + } + return genState.Validate() +} + +// RegisterRESTRoutes registers the capability module's REST service handlers. +func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Router) { +} + +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { + if err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)); err != nil { + panic(err) + } +} + +// GetTxCmd returns the capability module's root tx command. +func (a AppModuleBasic) GetTxCmd() *cobra.Command { + return cli.GetTxCmd() +} + +// GetQueryCmd returns the capability module's root query command. +func (AppModuleBasic) GetQueryCmd() *cobra.Command { + return cli.GetQueryCmd() +} + +// ---------------------------------------------------------------------------- +// AppModule +// ---------------------------------------------------------------------------- + +// AppModule implements the AppModule interface for the capability module. +type AppModule struct { + AppModuleBasic + + keeper keeper.Keeper +} + +func NewAppModule( + cdc codec.Codec, + keeper keeper.Keeper, +) AppModule { + return AppModule{ + AppModuleBasic: NewAppModuleBasic(cdc), + keeper: keeper, + } +} + +// Name returns the capability module's name. +func (am AppModule) Name() string { + return am.AppModuleBasic.Name() +} + +// RegisterServices registers a GRPC query service to respond to the +// module-specific GRPC queries. +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterQueryServer(cfg.QueryServer(), am.keeper) + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) +} + +// RegisterInvariants registers the capability module's invariants. +func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} + +// InitGenesis performs the capability module's genesis initialization +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) { + var genState types.GenesisState + cdc.MustUnmarshalJSON(gs, &genState) + am.keeper.InitGenesis(ctx, genState) +} + +// ExportGenesis returns the capability module's exported genesis state as raw JSON bytes. +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + genState := am.keeper.ExportGenesis(ctx) + return cdc.MustMarshalJSON(genState) +} + +// ConsensusVersion implements ConsensusVersion. +func (AppModule) ConsensusVersion() uint64 { return 1 } + +// BeginBlock contains the logic that is automatically triggered at the beginning of each block. +// The begin block implementation is optional. +func (am AppModule) BeginBlock(context context.Context) error { + ctx := sdk.UnwrapSDKContext(context) + am.keeper.BeginBlocker(ctx) + return nil +} + +// IsOnePerModuleType implements the depinject.OnePerModuleType interface. +func (am AppModule) IsOnePerModuleType() {} + +// IsAppModule implements the appmodule.AppModule interface. +func (am AppModule) IsAppModule() {} diff --git a/x/icqoracle/types/codec.go b/x/icqoracle/types/codec.go new file mode 100644 index 00000000000..a46490593f1 --- /dev/null +++ b/x/icqoracle/types/codec.go @@ -0,0 +1,25 @@ +package types + +import ( + "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/codec/legacy" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" +) + +func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + legacy.RegisterAminoMsg(cdc, &MsgRegisterTokenPriceQuery{}, "icqoracle/MsgRegisterTokenPriceQuery") + legacy.RegisterAminoMsg(cdc, &MsgRemoveTokenPriceQuery{}, "icqoracle/MsgRemoveTokenPriceQuery") + legacy.RegisterAminoMsg(cdc, &MsgUpdateParams{}, "icqoracle/MsgUpdateParams") +} + +func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { + registry.RegisterImplementations((*sdk.Msg)(nil), + &MsgRegisterTokenPriceQuery{}, + &MsgRemoveTokenPriceQuery{}, + &MsgUpdateParams{}, + ) + + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) +} diff --git a/x/icqoracle/types/errors.go b/x/icqoracle/types/errors.go new file mode 100644 index 00000000000..403479cbefb --- /dev/null +++ b/x/icqoracle/types/errors.go @@ -0,0 +1,13 @@ +package types + +// DONTCOVER + +import ( + sdkerrors "cosmossdk.io/errors" +) + +// x/icqoracle module sentinel errors +var ( + ErrTokenPriceAlreadyExists = sdkerrors.Register(ModuleName, 16001, "token price already exists") + ErrQuotePriceNotFound = sdkerrors.Register(ModuleName, 16002, "token price not found for quote denom") +) diff --git a/x/icqoracle/types/expected_keepers.go b/x/icqoracle/types/expected_keepers.go new file mode 100644 index 00000000000..107ab5a6fda --- /dev/null +++ b/x/icqoracle/types/expected_keepers.go @@ -0,0 +1,21 @@ +package types + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + + "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + + tmbytes "github.com/cometbft/cometbft/libs/bytes" +) + +// IcqKeeper defines the expected interface needed to send ICQ requests. +type IcqKeeper interface { + SubmitICQRequest(ctx sdk.Context, icqtypes types.Query, forceUnique bool) error +} + +// IbcTransferKeeper defines the expected interface needed to convert an ibc token hash to its denom on the source chain. +type IbcTransferKeeper interface { + GetDenomTrace(ctx sdk.Context, denomTraceHash tmbytes.HexBytes) (ibctransfertypes.DenomTrace, bool) +} diff --git a/x/icqoracle/types/genesis.go b/x/icqoracle/types/genesis.go new file mode 100644 index 00000000000..ac28f8229dc --- /dev/null +++ b/x/icqoracle/types/genesis.go @@ -0,0 +1,28 @@ +package types + +import ( + fmt "fmt" +) + +// DefaultGenesis returns the default genesis state +func DefaultGenesis() *GenesisState { + return &GenesisState{} +} + +// Performs basic genesis state validation by iterating through all token prices and validating +// using ValidateTokenPriceQueryParams(). +func (gs GenesisState) Validate() error { + for i, tokenPrice := range gs.TokenPrices { + err := ValidateTokenPriceQueryParams( + tokenPrice.BaseDenom, + tokenPrice.QuoteDenom, + tokenPrice.OsmosisPoolId, + tokenPrice.OsmosisBaseDenom, + tokenPrice.OsmosisQuoteDenom, + ) + if err != nil { + return fmt.Errorf("invalid genesis token price query at index %d: %w", i, err) + } + } + return nil +} diff --git a/x/icqoracle/types/genesis.pb.go b/x/icqoracle/types/genesis.pb.go new file mode 100644 index 00000000000..8e55fdcc537 --- /dev/null +++ b/x/icqoracle/types/genesis.pb.go @@ -0,0 +1,387 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/icqoracle/genesis.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// GenesisState defines the icqoracle module's genesis state +type GenesisState struct { + // Module parameters + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` + // List of token prices + TokenPrices []TokenPrice `protobuf:"bytes,2,rep,name=token_prices,json=tokenPrices,proto3" json:"token_prices"` +} + +func (m *GenesisState) Reset() { *m = GenesisState{} } +func (m *GenesisState) String() string { return proto.CompactTextString(m) } +func (*GenesisState) ProtoMessage() {} +func (*GenesisState) Descriptor() ([]byte, []int) { + return fileDescriptor_a0cfd8712dde4d4a, []int{0} +} +func (m *GenesisState) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GenesisState.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GenesisState) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenesisState.Merge(m, src) +} +func (m *GenesisState) XXX_Size() int { + return m.Size() +} +func (m *GenesisState) XXX_DiscardUnknown() { + xxx_messageInfo_GenesisState.DiscardUnknown(m) +} + +var xxx_messageInfo_GenesisState proto.InternalMessageInfo + +func (m *GenesisState) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +func (m *GenesisState) GetTokenPrices() []TokenPrice { + if m != nil { + return m.TokenPrices + } + return nil +} + +func init() { + proto.RegisterType((*GenesisState)(nil), "stride.icqoracle.GenesisState") +} + +func init() { proto.RegisterFile("stride/icqoracle/genesis.proto", fileDescriptor_a0cfd8712dde4d4a) } + +var fileDescriptor_a0cfd8712dde4d4a = []byte{ + // 240 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x2b, 0x2e, 0x29, 0xca, + 0x4c, 0x49, 0xd5, 0xcf, 0x4c, 0x2e, 0xcc, 0x2f, 0x4a, 0x4c, 0xce, 0x49, 0xd5, 0x4f, 0x4f, 0xcd, + 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x80, 0xc8, 0xeb, 0xc1, + 0xe5, 0xa5, 0x44, 0xd2, 0xf3, 0xd3, 0xf3, 0xc1, 0x92, 0xfa, 0x20, 0x16, 0x44, 0x9d, 0x94, 0x02, + 0x86, 0x39, 0x70, 0x16, 0x44, 0x85, 0x52, 0x2f, 0x23, 0x17, 0x8f, 0x3b, 0xc4, 0xec, 0xe0, 0x92, + 0xc4, 0x92, 0x54, 0x21, 0x33, 0x2e, 0xb6, 0x82, 0xc4, 0xa2, 0xc4, 0xdc, 0x62, 0x09, 0x46, 0x05, + 0x46, 0x0d, 0x6e, 0x23, 0x09, 0x3d, 0x74, 0xbb, 0xf4, 0x02, 0xc0, 0xf2, 0x4e, 0x2c, 0x27, 0xee, + 0xc9, 0x33, 0x04, 0x41, 0x55, 0x0b, 0xb9, 0x72, 0xf1, 0x94, 0xe4, 0x67, 0xa7, 0xe6, 0xc5, 0x17, + 0x14, 0x65, 0x26, 0xa7, 0x16, 0x4b, 0x30, 0x29, 0x30, 0x6b, 0x70, 0x1b, 0xc9, 0x60, 0xea, 0x0e, + 0x01, 0xa9, 0x0a, 0x00, 0x29, 0x82, 0x9a, 0xc0, 0x5d, 0x02, 0x17, 0x29, 0x76, 0xf2, 0x3d, 0xf1, + 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, + 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0xe3, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, 0x24, + 0xbd, 0xe4, 0xfc, 0x5c, 0xfd, 0x60, 0xb0, 0xa1, 0xba, 0x3e, 0x89, 0x49, 0xc5, 0xfa, 0x50, 0x2f, + 0x96, 0x19, 0x59, 0xe8, 0x57, 0x20, 0x79, 0xb4, 0xa4, 0xb2, 0x20, 0xb5, 0x38, 0x89, 0x0d, 0xec, + 0x4b, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0xee, 0xf7, 0x99, 0x59, 0x51, 0x01, 0x00, 0x00, +} + +func (m *GenesisState) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GenesisState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TokenPrices) > 0 { + for iNdEx := len(m.TokenPrices) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TokenPrices[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { + offset -= sovGenesis(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *GenesisState) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovGenesis(uint64(l)) + if len(m.TokenPrices) > 0 { + for _, e := range m.TokenPrices { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + return n +} + +func sovGenesis(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenesis(x uint64) (n int) { + return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *GenesisState) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenPrices", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TokenPrices = append(m.TokenPrices, TokenPrice{}) + if err := m.TokenPrices[len(m.TokenPrices)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenesis(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenesis + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenesis + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenesis + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/icqoracle/types/icqoracle.pb.go b/x/icqoracle/types/icqoracle.pb.go new file mode 100644 index 00000000000..a6ed9f3c373 --- /dev/null +++ b/x/icqoracle/types/icqoracle.pb.go @@ -0,0 +1,1034 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/icqoracle/icqoracle.proto + +package types + +import ( + cosmossdk_io_math "cosmossdk.io/math" + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + io "io" + math "math" + math_bits "math/bits" + time "time" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf +var _ = time.Kitchen + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// TokenPrice stores latest price data for a token +type TokenPrice struct { + // Base denom on Stride + BaseDenom string `protobuf:"bytes,1,opt,name=base_denom,json=baseDenom,proto3" json:"base_denom,omitempty"` + // Quote denom on Stride + QuoteDenom string `protobuf:"bytes,2,opt,name=quote_denom,json=quoteDenom,proto3" json:"quote_denom,omitempty"` + // Base denom on Osmosis + OsmosisBaseDenom string `protobuf:"bytes,3,opt,name=osmosis_base_denom,json=osmosisBaseDenom,proto3" json:"osmosis_base_denom,omitempty"` + // Quote denom on Osmosis + OsmosisQuoteDenom string `protobuf:"bytes,4,opt,name=osmosis_quote_denom,json=osmosisQuoteDenom,proto3" json:"osmosis_quote_denom,omitempty"` + // Pool ID on Osmosis + OsmosisPoolId uint64 `protobuf:"varint,5,opt,name=osmosis_pool_id,json=osmosisPoolId,proto3" json:"osmosis_pool_id,omitempty"` + // Spot price of base_denom denominated in quote_denom + SpotPrice cosmossdk_io_math.LegacyDec `protobuf:"bytes,6,opt,name=spot_price,json=spotPrice,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"spot_price"` + // Last time a query request was submitted + LastRequestTime time.Time `protobuf:"bytes,7,opt,name=last_request_time,json=lastRequestTime,proto3,stdtime" json:"last_request_time"` + // Last time a query response was received + LastResponseTime time.Time `protobuf:"bytes,8,opt,name=last_response_time,json=lastResponseTime,proto3,stdtime" json:"last_response_time"` + // Whether there is a spot price query currently in progress + QueryInProgress bool `protobuf:"varint,9,opt,name=query_in_progress,json=queryInProgress,proto3" json:"query_in_progress,omitempty"` +} + +func (m *TokenPrice) Reset() { *m = TokenPrice{} } +func (m *TokenPrice) String() string { return proto.CompactTextString(m) } +func (*TokenPrice) ProtoMessage() {} +func (*TokenPrice) Descriptor() ([]byte, []int) { + return fileDescriptor_08ead8ab9516d7fc, []int{0} +} +func (m *TokenPrice) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TokenPrice) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TokenPrice.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TokenPrice) XXX_Merge(src proto.Message) { + xxx_messageInfo_TokenPrice.Merge(m, src) +} +func (m *TokenPrice) XXX_Size() int { + return m.Size() +} +func (m *TokenPrice) XXX_DiscardUnknown() { + xxx_messageInfo_TokenPrice.DiscardUnknown(m) +} + +var xxx_messageInfo_TokenPrice proto.InternalMessageInfo + +func (m *TokenPrice) GetBaseDenom() string { + if m != nil { + return m.BaseDenom + } + return "" +} + +func (m *TokenPrice) GetQuoteDenom() string { + if m != nil { + return m.QuoteDenom + } + return "" +} + +func (m *TokenPrice) GetOsmosisBaseDenom() string { + if m != nil { + return m.OsmosisBaseDenom + } + return "" +} + +func (m *TokenPrice) GetOsmosisQuoteDenom() string { + if m != nil { + return m.OsmosisQuoteDenom + } + return "" +} + +func (m *TokenPrice) GetOsmosisPoolId() uint64 { + if m != nil { + return m.OsmosisPoolId + } + return 0 +} + +func (m *TokenPrice) GetLastRequestTime() time.Time { + if m != nil { + return m.LastRequestTime + } + return time.Time{} +} + +func (m *TokenPrice) GetLastResponseTime() time.Time { + if m != nil { + return m.LastResponseTime + } + return time.Time{} +} + +func (m *TokenPrice) GetQueryInProgress() bool { + if m != nil { + return m.QueryInProgress + } + return false +} + +// OracleParams stores global oracle parameters +type Params struct { + // Osmosis chain identifier + OsmosisChainId string `protobuf:"bytes,1,opt,name=osmosis_chain_id,json=osmosisChainId,proto3" json:"osmosis_chain_id" yaml:"osmosis_chain_id"` + // Osmosis IBC connection identifier + OsmosisConnectionId string `protobuf:"bytes,2,opt,name=osmosis_connection_id,json=osmosisConnectionId,proto3" json:"osmosis_connection_id" yaml:"osmosis_connection_id"` + // Time between price updates + // Also used to timeout icq requests + UpdateIntervalSec uint64 `protobuf:"varint,3,opt,name=update_interval_sec,json=updateIntervalSec,proto3" json:"update_interval_sec" yaml:"update_interval_sec"` + // Max time before price is considered stale/expired + PriceExpirationTimeoutSec uint64 `protobuf:"varint,4,opt,name=price_expiration_timeout_sec,json=priceExpirationTimeoutSec,proto3" json:"price_expiration_timeout_sec" yaml:"price_expiration_timeout_sec"` +} + +func (m *Params) Reset() { *m = Params{} } +func (m *Params) String() string { return proto.CompactTextString(m) } +func (*Params) ProtoMessage() {} +func (*Params) Descriptor() ([]byte, []int) { + return fileDescriptor_08ead8ab9516d7fc, []int{1} +} +func (m *Params) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Params.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Params) XXX_Merge(src proto.Message) { + xxx_messageInfo_Params.Merge(m, src) +} +func (m *Params) XXX_Size() int { + return m.Size() +} +func (m *Params) XXX_DiscardUnknown() { + xxx_messageInfo_Params.DiscardUnknown(m) +} + +var xxx_messageInfo_Params proto.InternalMessageInfo + +func (m *Params) GetOsmosisChainId() string { + if m != nil { + return m.OsmosisChainId + } + return "" +} + +func (m *Params) GetOsmosisConnectionId() string { + if m != nil { + return m.OsmosisConnectionId + } + return "" +} + +func (m *Params) GetUpdateIntervalSec() uint64 { + if m != nil { + return m.UpdateIntervalSec + } + return 0 +} + +func (m *Params) GetPriceExpirationTimeoutSec() uint64 { + if m != nil { + return m.PriceExpirationTimeoutSec + } + return 0 +} + +func init() { + proto.RegisterType((*TokenPrice)(nil), "stride.icqoracle.TokenPrice") + proto.RegisterType((*Params)(nil), "stride.icqoracle.Params") +} + +func init() { proto.RegisterFile("stride/icqoracle/icqoracle.proto", fileDescriptor_08ead8ab9516d7fc) } + +var fileDescriptor_08ead8ab9516d7fc = []byte{ + // 621 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0x41, 0x6f, 0xd3, 0x3e, + 0x18, 0xc6, 0x9b, 0xff, 0xfa, 0x1f, 0xab, 0x27, 0xd8, 0x9a, 0x81, 0x28, 0x65, 0xc4, 0x55, 0x26, + 0xa1, 0x0a, 0x41, 0x22, 0x6d, 0x42, 0x02, 0x8e, 0xd9, 0x10, 0xaa, 0x34, 0xa4, 0x92, 0xed, 0x02, + 0x97, 0xc8, 0x75, 0x4c, 0x66, 0x2d, 0x89, 0xd3, 0xd8, 0x99, 0xd6, 0x6f, 0xc0, 0x71, 0x1f, 0x8a, + 0xc3, 0x8e, 0x3b, 0x22, 0x0e, 0x01, 0x6d, 0x17, 0xd4, 0x63, 0x3f, 0x01, 0xb2, 0x9d, 0x94, 0x6a, + 0x4c, 0x93, 0xb8, 0xb9, 0xcf, 0xef, 0x79, 0x9f, 0xb7, 0x79, 0xfd, 0xca, 0xa0, 0xc7, 0x45, 0x4e, + 0x43, 0xe2, 0x52, 0x3c, 0x66, 0x39, 0xc2, 0xf1, 0xc2, 0xc9, 0xc9, 0x72, 0x26, 0x98, 0xb9, 0xae, + 0x1d, 0xce, 0x5c, 0xef, 0xde, 0x8f, 0x58, 0xc4, 0x14, 0x74, 0xe5, 0x49, 0xfb, 0xba, 0x30, 0x62, + 0x2c, 0x8a, 0x89, 0xab, 0x7e, 0x8d, 0x8a, 0xcf, 0xae, 0xa0, 0x09, 0xe1, 0x02, 0x25, 0x99, 0x36, + 0xd8, 0xbf, 0x96, 0x00, 0x38, 0x64, 0xc7, 0x24, 0x1d, 0xe6, 0x14, 0x13, 0xf3, 0x09, 0x00, 0x23, + 0xc4, 0x49, 0x10, 0x92, 0x94, 0x25, 0x1d, 0xa3, 0x67, 0xf4, 0x5b, 0x7e, 0x4b, 0x2a, 0x7b, 0x52, + 0x30, 0x21, 0x58, 0x1d, 0x17, 0x4c, 0xd4, 0xfc, 0x3f, 0xc5, 0x81, 0x92, 0xb4, 0xe1, 0x39, 0x30, + 0x19, 0x4f, 0x18, 0xa7, 0x3c, 0x58, 0xc8, 0x59, 0x52, 0xbe, 0xf5, 0x8a, 0x78, 0xf3, 0x38, 0x07, + 0x6c, 0xd4, 0xee, 0xc5, 0xd8, 0xa6, 0xb2, 0xb7, 0x2b, 0xf4, 0xe1, 0x4f, 0xfa, 0x53, 0xb0, 0x56, + 0xfb, 0x33, 0xc6, 0xe2, 0x80, 0x86, 0x9d, 0xff, 0x7b, 0x46, 0xbf, 0xe9, 0xdf, 0xad, 0xe4, 0x21, + 0x63, 0xf1, 0x20, 0x34, 0x3d, 0x00, 0x78, 0xc6, 0x44, 0x90, 0xc9, 0x6f, 0xea, 0x2c, 0xcb, 0x38, + 0x6f, 0xeb, 0xbc, 0x84, 0x8d, 0xef, 0x25, 0x7c, 0x8c, 0x95, 0x97, 0x87, 0xc7, 0x0e, 0x65, 0x6e, + 0x82, 0xc4, 0x91, 0xb3, 0x4f, 0x22, 0x84, 0x27, 0x7b, 0x04, 0xfb, 0x2d, 0x59, 0xa6, 0x27, 0x31, + 0x04, 0xed, 0x18, 0x71, 0x11, 0xe4, 0x64, 0x5c, 0x10, 0x2e, 0x02, 0x39, 0xb8, 0xce, 0x9d, 0x9e, + 0xd1, 0x5f, 0xdd, 0xee, 0x3a, 0x7a, 0xaa, 0x4e, 0x3d, 0x55, 0xe7, 0xb0, 0x9e, 0xaa, 0xb7, 0x22, + 0xdb, 0x9c, 0xfd, 0x80, 0x86, 0xbf, 0x26, 0xcb, 0x7d, 0x5d, 0x2d, 0xb9, 0xe9, 0x03, 0xb3, 0x4a, + 0xe4, 0x19, 0x4b, 0x39, 0xd1, 0x91, 0x2b, 0xff, 0x10, 0xb9, 0xae, 0x23, 0x75, 0xb9, 0xca, 0x7c, + 0x06, 0xda, 0xe3, 0x82, 0xe4, 0x93, 0x80, 0xa6, 0x41, 0x96, 0xb3, 0x28, 0x27, 0x9c, 0x77, 0x5a, + 0x3d, 0xa3, 0xbf, 0xe2, 0xaf, 0x29, 0x30, 0x48, 0x87, 0x95, 0x6c, 0x7f, 0x5d, 0x02, 0xcb, 0x43, + 0x94, 0xa3, 0x84, 0x9b, 0x1f, 0x41, 0x7d, 0x19, 0x01, 0x3e, 0x42, 0x34, 0x95, 0x93, 0x54, 0x97, + 0xed, 0xb9, 0xd3, 0x12, 0xfe, 0xc5, 0x66, 0x25, 0x7c, 0x38, 0x41, 0x49, 0xfc, 0xc6, 0xbe, 0x4e, + 0x6c, 0xff, 0x5e, 0x25, 0xed, 0x4a, 0x65, 0x10, 0x9a, 0x09, 0x78, 0x30, 0x37, 0xb1, 0x34, 0x25, + 0x58, 0x50, 0xa6, 0xf2, 0xd5, 0xb2, 0x78, 0xaf, 0xa7, 0x25, 0xbc, 0xd9, 0x30, 0x2b, 0xe1, 0xe6, + 0xb5, 0x26, 0x8b, 0xd8, 0xf6, 0xeb, 0x5d, 0xd9, 0x9d, 0xcb, 0x83, 0xd0, 0x24, 0x60, 0xa3, 0xc8, + 0x42, 0x24, 0x48, 0x40, 0x53, 0x41, 0xf2, 0x13, 0x14, 0x07, 0x9c, 0x60, 0xb5, 0x71, 0x4d, 0xef, + 0xe5, 0xb4, 0x84, 0x37, 0xe1, 0x59, 0x09, 0xbb, 0xba, 0xd5, 0x0d, 0xd0, 0xf6, 0xdb, 0x5a, 0x1d, + 0x54, 0xe2, 0x01, 0xc1, 0xe6, 0x17, 0x03, 0x6c, 0xaa, 0x6d, 0x0a, 0xc8, 0x69, 0x46, 0x73, 0xa4, + 0xfe, 0x94, 0xbc, 0x3f, 0x56, 0x08, 0xd5, 0xb0, 0xa9, 0x1a, 0xbe, 0x9b, 0x96, 0xf0, 0x56, 0xdf, + 0xac, 0x84, 0x5b, 0xba, 0xf3, 0x6d, 0x2e, 0xdb, 0x7f, 0xa4, 0xf0, 0xdb, 0x39, 0x3d, 0xd4, 0xf0, + 0x80, 0x60, 0xef, 0xfd, 0xf9, 0xa5, 0x65, 0x5c, 0x5c, 0x5a, 0xc6, 0xcf, 0x4b, 0xcb, 0x38, 0xbb, + 0xb2, 0x1a, 0x17, 0x57, 0x56, 0xe3, 0xdb, 0x95, 0xd5, 0xf8, 0xb4, 0x13, 0x51, 0x71, 0x54, 0x8c, + 0x1c, 0xcc, 0x12, 0xf7, 0x40, 0xbd, 0x0f, 0x2f, 0xf6, 0xd1, 0x88, 0xbb, 0xd5, 0x6b, 0x72, 0xb2, + 0xfd, 0xca, 0x3d, 0x5d, 0x78, 0x53, 0xc4, 0x24, 0x23, 0x7c, 0xb4, 0xac, 0x36, 0x6e, 0xe7, 0x77, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xa7, 0xe2, 0x4c, 0x72, 0x74, 0x04, 0x00, 0x00, +} + +func (m *TokenPrice) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TokenPrice) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TokenPrice) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.QueryInProgress { + i-- + if m.QueryInProgress { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x48 + } + n1, err1 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.LastResponseTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.LastResponseTime):]) + if err1 != nil { + return 0, err1 + } + i -= n1 + i = encodeVarintIcqoracle(dAtA, i, uint64(n1)) + i-- + dAtA[i] = 0x42 + n2, err2 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.LastRequestTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.LastRequestTime):]) + if err2 != nil { + return 0, err2 + } + i -= n2 + i = encodeVarintIcqoracle(dAtA, i, uint64(n2)) + i-- + dAtA[i] = 0x3a + { + size := m.SpotPrice.Size() + i -= size + if _, err := m.SpotPrice.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintIcqoracle(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + if m.OsmosisPoolId != 0 { + i = encodeVarintIcqoracle(dAtA, i, uint64(m.OsmosisPoolId)) + i-- + dAtA[i] = 0x28 + } + if len(m.OsmosisQuoteDenom) > 0 { + i -= len(m.OsmosisQuoteDenom) + copy(dAtA[i:], m.OsmosisQuoteDenom) + i = encodeVarintIcqoracle(dAtA, i, uint64(len(m.OsmosisQuoteDenom))) + i-- + dAtA[i] = 0x22 + } + if len(m.OsmosisBaseDenom) > 0 { + i -= len(m.OsmosisBaseDenom) + copy(dAtA[i:], m.OsmosisBaseDenom) + i = encodeVarintIcqoracle(dAtA, i, uint64(len(m.OsmosisBaseDenom))) + i-- + dAtA[i] = 0x1a + } + if len(m.QuoteDenom) > 0 { + i -= len(m.QuoteDenom) + copy(dAtA[i:], m.QuoteDenom) + i = encodeVarintIcqoracle(dAtA, i, uint64(len(m.QuoteDenom))) + i-- + dAtA[i] = 0x12 + } + if len(m.BaseDenom) > 0 { + i -= len(m.BaseDenom) + copy(dAtA[i:], m.BaseDenom) + i = encodeVarintIcqoracle(dAtA, i, uint64(len(m.BaseDenom))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Params) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Params) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.PriceExpirationTimeoutSec != 0 { + i = encodeVarintIcqoracle(dAtA, i, uint64(m.PriceExpirationTimeoutSec)) + i-- + dAtA[i] = 0x20 + } + if m.UpdateIntervalSec != 0 { + i = encodeVarintIcqoracle(dAtA, i, uint64(m.UpdateIntervalSec)) + i-- + dAtA[i] = 0x18 + } + if len(m.OsmosisConnectionId) > 0 { + i -= len(m.OsmosisConnectionId) + copy(dAtA[i:], m.OsmosisConnectionId) + i = encodeVarintIcqoracle(dAtA, i, uint64(len(m.OsmosisConnectionId))) + i-- + dAtA[i] = 0x12 + } + if len(m.OsmosisChainId) > 0 { + i -= len(m.OsmosisChainId) + copy(dAtA[i:], m.OsmosisChainId) + i = encodeVarintIcqoracle(dAtA, i, uint64(len(m.OsmosisChainId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintIcqoracle(dAtA []byte, offset int, v uint64) int { + offset -= sovIcqoracle(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *TokenPrice) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.BaseDenom) + if l > 0 { + n += 1 + l + sovIcqoracle(uint64(l)) + } + l = len(m.QuoteDenom) + if l > 0 { + n += 1 + l + sovIcqoracle(uint64(l)) + } + l = len(m.OsmosisBaseDenom) + if l > 0 { + n += 1 + l + sovIcqoracle(uint64(l)) + } + l = len(m.OsmosisQuoteDenom) + if l > 0 { + n += 1 + l + sovIcqoracle(uint64(l)) + } + if m.OsmosisPoolId != 0 { + n += 1 + sovIcqoracle(uint64(m.OsmosisPoolId)) + } + l = m.SpotPrice.Size() + n += 1 + l + sovIcqoracle(uint64(l)) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.LastRequestTime) + n += 1 + l + sovIcqoracle(uint64(l)) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.LastResponseTime) + n += 1 + l + sovIcqoracle(uint64(l)) + if m.QueryInProgress { + n += 2 + } + return n +} + +func (m *Params) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.OsmosisChainId) + if l > 0 { + n += 1 + l + sovIcqoracle(uint64(l)) + } + l = len(m.OsmosisConnectionId) + if l > 0 { + n += 1 + l + sovIcqoracle(uint64(l)) + } + if m.UpdateIntervalSec != 0 { + n += 1 + sovIcqoracle(uint64(m.UpdateIntervalSec)) + } + if m.PriceExpirationTimeoutSec != 0 { + n += 1 + sovIcqoracle(uint64(m.PriceExpirationTimeoutSec)) + } + return n +} + +func sovIcqoracle(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozIcqoracle(x uint64) (n int) { + return sovIcqoracle(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *TokenPrice) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcqoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TokenPrice: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TokenPrice: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BaseDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcqoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIcqoracle + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIcqoracle + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BaseDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field QuoteDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcqoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIcqoracle + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIcqoracle + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.QuoteDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OsmosisBaseDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcqoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIcqoracle + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIcqoracle + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OsmosisBaseDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OsmosisQuoteDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcqoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIcqoracle + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIcqoracle + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OsmosisQuoteDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field OsmosisPoolId", wireType) + } + m.OsmosisPoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcqoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.OsmosisPoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SpotPrice", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcqoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIcqoracle + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIcqoracle + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.SpotPrice.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastRequestTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcqoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthIcqoracle + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthIcqoracle + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.LastRequestTime, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastResponseTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcqoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthIcqoracle + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthIcqoracle + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.LastResponseTime, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field QueryInProgress", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcqoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.QueryInProgress = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipIcqoracle(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthIcqoracle + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Params) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcqoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OsmosisChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcqoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIcqoracle + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIcqoracle + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OsmosisChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OsmosisConnectionId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcqoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIcqoracle + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIcqoracle + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OsmosisConnectionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UpdateIntervalSec", wireType) + } + m.UpdateIntervalSec = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcqoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.UpdateIntervalSec |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PriceExpirationTimeoutSec", wireType) + } + m.PriceExpirationTimeoutSec = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcqoracle + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PriceExpirationTimeoutSec |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipIcqoracle(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthIcqoracle + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipIcqoracle(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowIcqoracle + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowIcqoracle + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowIcqoracle + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthIcqoracle + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupIcqoracle + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthIcqoracle + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthIcqoracle = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowIcqoracle = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupIcqoracle = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/icqoracle/types/keys.go b/x/icqoracle/types/keys.go new file mode 100644 index 00000000000..9d46bc6c50e --- /dev/null +++ b/x/icqoracle/types/keys.go @@ -0,0 +1,28 @@ +package types + +import ( + fmt "fmt" +) + +const ( + ModuleName = "icqoracle" + + // StoreKey defines the primary module store key + StoreKey = ModuleName + + // RouterKey defines the routing key + RouterKey = ModuleName +) + +var ( + ParamsKey = []byte("params") + TokenPricePrefix = []byte("tokenprice") +) + +func TokenPriceKey(baseDenom, quoteDenom string, poolId uint64) []byte { + return []byte(fmt.Sprintf("%s|%s|%d", baseDenom, quoteDenom, poolId)) +} + +func TokenPriceByDenomKey(baseDenom string) []byte { + return []byte(baseDenom) +} diff --git a/x/icqoracle/types/msgs.go b/x/icqoracle/types/msgs.go new file mode 100644 index 00000000000..ee22ddd3a6c --- /dev/null +++ b/x/icqoracle/types/msgs.go @@ -0,0 +1,167 @@ +package types + +import ( + "errors" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/utils" +) + +const ( + TypeMsgRegisterTokenPriceQuery = "register_token_price_query" + TypeMsgRemoveTokenPriceQuery = "remove_token_price_query" + TypeMsgUpdateParams = "update_params" +) + +var ( + _ sdk.Msg = &MsgRegisterTokenPriceQuery{} + _ sdk.Msg = &MsgRemoveTokenPriceQuery{} + _ sdk.Msg = &MsgUpdateParams{} +) + +// ---------------------------------------------- +// MsgClaim +// ---------------------------------------------- + +func NewMsgRegisterTokenPriceQuery( + admin string, + baseDenom string, + quoteDenom string, + poolId uint64, + osmosisBaseDenom string, + osmosisQuoteDenom string, +) *MsgRegisterTokenPriceQuery { + return &MsgRegisterTokenPriceQuery{ + Admin: admin, + BaseDenom: baseDenom, + QuoteDenom: quoteDenom, + OsmosisBaseDenom: osmosisBaseDenom, + OsmosisQuoteDenom: osmosisQuoteDenom, + OsmosisPoolId: poolId, + } +} + +func (msg MsgRegisterTokenPriceQuery) Type() string { + return TypeMsgRegisterTokenPriceQuery +} + +func (msg MsgRegisterTokenPriceQuery) Route() string { + return RouterKey +} + +func (msg *MsgRegisterTokenPriceQuery) GetSigners() []sdk.AccAddress { + admin, _ := sdk.AccAddressFromBech32(msg.Admin) + return []sdk.AccAddress{admin} +} + +func (msg *MsgRegisterTokenPriceQuery) ValidateBasic() error { + if err := utils.ValidateAdminAddress(msg.Admin); err != nil { + return err + } + return ValidateTokenPriceQueryParams( + msg.BaseDenom, + msg.QuoteDenom, + msg.OsmosisPoolId, + msg.OsmosisBaseDenom, + msg.OsmosisQuoteDenom, + ) +} + +// ---------------------------------------------- +// MsgRemoveTokenPriceQuery +// ---------------------------------------------- + +func NewMsgRemoveTokenPriceQuery(admin, baseDenom, quoteDenom string, osmosisPoolId uint64) *MsgRemoveTokenPriceQuery { + return &MsgRemoveTokenPriceQuery{ + Admin: admin, + BaseDenom: baseDenom, + QuoteDenom: quoteDenom, + OsmosisPoolId: osmosisPoolId, + } +} + +func (msg MsgRemoveTokenPriceQuery) Type() string { + return TypeMsgRemoveTokenPriceQuery +} + +func (msg MsgRemoveTokenPriceQuery) Route() string { + return RouterKey +} + +func (msg *MsgRemoveTokenPriceQuery) GetSigners() []sdk.AccAddress { + admin, _ := sdk.AccAddressFromBech32(msg.Admin) + return []sdk.AccAddress{admin} +} + +func (msg *MsgRemoveTokenPriceQuery) ValidateBasic() error { + if err := utils.ValidateAdminAddress(msg.Admin); err != nil { + return err + } + if msg.BaseDenom == "" { + return errors.New("base-denom must be specified") + } + if msg.QuoteDenom == "" { + return errors.New("quote-denom must be specified") + } + if msg.OsmosisPoolId == 0 { + return errors.New("osmosis-pool-id must be specified") + } + + return nil +} + +// ---------------------------------------------- +// MsgUpdateParams +// ---------------------------------------------- + +func NewMsgUpdateParams( + authority string, + osmosisChainId string, + osmosisConnectionId string, + updateIntervalSec uint64, + priceExpirationTimeoutSec uint64, +) *MsgUpdateParams { + return &MsgUpdateParams{ + Authority: authority, + Params: Params{ + OsmosisChainId: osmosisChainId, + OsmosisConnectionId: osmosisConnectionId, + UpdateIntervalSec: updateIntervalSec, + PriceExpirationTimeoutSec: priceExpirationTimeoutSec, + }, + } +} + +func (msg MsgUpdateParams) Type() string { + return TypeMsgUpdateParams +} + +func (msg MsgUpdateParams) Route() string { + return RouterKey +} + +func (msg *MsgUpdateParams) GetSigners() []sdk.AccAddress { + authority, _ := sdk.AccAddressFromBech32(msg.Authority) + return []sdk.AccAddress{authority} +} + +func (msg *MsgUpdateParams) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.Authority); err != nil { + return err + } + if msg.Params.OsmosisChainId == "" { + return errors.New("osmosis-chain-id must be specified") + } + if msg.Params.OsmosisConnectionId == "" { + return errors.New("osmosis-connection-id must be specified") + } + if msg.Params.UpdateIntervalSec == 0 { + return errors.New("update-interval-sec cannot be 0") + } + if msg.Params.PriceExpirationTimeoutSec == 0 { + return errors.New("price-expiration-timeout-sec cannot be 0") + } + + return nil +} diff --git a/x/icqoracle/types/osmosis.pb.go b/x/icqoracle/types/osmosis.pb.go new file mode 100644 index 00000000000..754817fbac3 --- /dev/null +++ b/x/icqoracle/types/osmosis.pb.go @@ -0,0 +1,817 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: osmosis/osmosis.proto + +package types + +import ( + cosmossdk_io_math "cosmossdk.io/math" + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + io "io" + math "math" + math_bits "math/bits" + time "time" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf +var _ = time.Kitchen + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// A TWAP record should be indexed in state by pool_id, (asset pair), timestamp +// The asset pair assets should be lexicographically sorted. +// Technically (pool_id, asset_0_denom, asset_1_denom, height) do not need to +// appear in the struct however we view this as the wrong performance tradeoff +// given SDK today. Would rather we optimize for readability and correctness, +// than an optimal state storage format. The system bottleneck is elsewhere for +// now. +type OsmosisTwapRecord struct { + PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` + // Lexicographically smaller denom of the pair + Asset0Denom string `protobuf:"bytes,2,opt,name=asset0_denom,json=asset0Denom,proto3" json:"asset0_denom,omitempty"` + // Lexicographically larger denom of the pair + Asset1Denom string `protobuf:"bytes,3,opt,name=asset1_denom,json=asset1Denom,proto3" json:"asset1_denom,omitempty"` + // height this record corresponds to, for debugging purposes + Height int64 `protobuf:"varint,4,opt,name=height,proto3" json:"record_height" yaml:"record_height"` + // This field should only exist until we have a global registry in the state + // machine, mapping prior block heights within {TIME RANGE} to times. + Time time.Time `protobuf:"bytes,5,opt,name=time,proto3,stdtime" json:"time" yaml:"record_time"` + // We store the last spot prices in the struct, so that we can interpolate + // accumulator values for times between when accumulator records are stored. + P0LastSpotPrice cosmossdk_io_math.LegacyDec `protobuf:"bytes,6,opt,name=p0_last_spot_price,json=p0LastSpotPrice,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"p0_last_spot_price"` + P1LastSpotPrice cosmossdk_io_math.LegacyDec `protobuf:"bytes,7,opt,name=p1_last_spot_price,json=p1LastSpotPrice,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"p1_last_spot_price"` + P0ArithmeticTwapAccumulator cosmossdk_io_math.LegacyDec `protobuf:"bytes,8,opt,name=p0_arithmetic_twap_accumulator,json=p0ArithmeticTwapAccumulator,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"p0_arithmetic_twap_accumulator"` + P1ArithmeticTwapAccumulator cosmossdk_io_math.LegacyDec `protobuf:"bytes,9,opt,name=p1_arithmetic_twap_accumulator,json=p1ArithmeticTwapAccumulator,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"p1_arithmetic_twap_accumulator"` + GeometricTwapAccumulator cosmossdk_io_math.LegacyDec `protobuf:"bytes,10,opt,name=geometric_twap_accumulator,json=geometricTwapAccumulator,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"geometric_twap_accumulator"` + // This field contains the time in which the last spot price error occurred. + // It is used to alert the caller if they are getting a potentially erroneous + // TWAP, due to an unforeseen underlying error. + LastErrorTime time.Time `protobuf:"bytes,11,opt,name=last_error_time,json=lastErrorTime,proto3,stdtime" json:"last_error_time" yaml:"last_error_time"` +} + +func (m *OsmosisTwapRecord) Reset() { *m = OsmosisTwapRecord{} } +func (m *OsmosisTwapRecord) String() string { return proto.CompactTextString(m) } +func (*OsmosisTwapRecord) ProtoMessage() {} +func (*OsmosisTwapRecord) Descriptor() ([]byte, []int) { + return fileDescriptor_adf1e7d971e56d58, []int{0} +} +func (m *OsmosisTwapRecord) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *OsmosisTwapRecord) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_OsmosisTwapRecord.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *OsmosisTwapRecord) XXX_Merge(src proto.Message) { + xxx_messageInfo_OsmosisTwapRecord.Merge(m, src) +} +func (m *OsmosisTwapRecord) XXX_Size() int { + return m.Size() +} +func (m *OsmosisTwapRecord) XXX_DiscardUnknown() { + xxx_messageInfo_OsmosisTwapRecord.DiscardUnknown(m) +} + +var xxx_messageInfo_OsmosisTwapRecord proto.InternalMessageInfo + +func (m *OsmosisTwapRecord) GetPoolId() uint64 { + if m != nil { + return m.PoolId + } + return 0 +} + +func (m *OsmosisTwapRecord) GetAsset0Denom() string { + if m != nil { + return m.Asset0Denom + } + return "" +} + +func (m *OsmosisTwapRecord) GetAsset1Denom() string { + if m != nil { + return m.Asset1Denom + } + return "" +} + +func (m *OsmosisTwapRecord) GetHeight() int64 { + if m != nil { + return m.Height + } + return 0 +} + +func (m *OsmosisTwapRecord) GetTime() time.Time { + if m != nil { + return m.Time + } + return time.Time{} +} + +func (m *OsmosisTwapRecord) GetLastErrorTime() time.Time { + if m != nil { + return m.LastErrorTime + } + return time.Time{} +} + +func init() { + proto.RegisterType((*OsmosisTwapRecord)(nil), "osmosis.OsmosisTwapRecord") +} + +func init() { proto.RegisterFile("osmosis/osmosis.proto", fileDescriptor_adf1e7d971e56d58) } + +var fileDescriptor_adf1e7d971e56d58 = []byte{ + // 512 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x92, 0xcf, 0x6f, 0xd3, 0x30, + 0x14, 0xc7, 0x1b, 0x56, 0x5a, 0xe6, 0x32, 0x4d, 0x44, 0x03, 0xa2, 0x4e, 0x4a, 0x4a, 0xb9, 0x94, + 0x03, 0x71, 0xb3, 0x5d, 0x10, 0xb7, 0x56, 0xe3, 0x80, 0x54, 0x60, 0xca, 0x76, 0xe2, 0x12, 0xb9, + 0x8e, 0x97, 0x58, 0xc4, 0xd8, 0xd8, 0x2e, 0xa3, 0xff, 0xc5, 0xfe, 0xac, 0x1e, 0x77, 0x44, 0x1c, + 0x0a, 0x6a, 0x6f, 0x1c, 0xf7, 0x17, 0x20, 0x3b, 0x59, 0xa1, 0xe3, 0xd7, 0x76, 0x8a, 0xdf, 0xd7, + 0xef, 0x7d, 0xbe, 0x7e, 0x79, 0x0f, 0xdc, 0xe7, 0x8a, 0x71, 0x45, 0x15, 0xac, 0xbe, 0xa1, 0x90, + 0x5c, 0x73, 0xb7, 0x59, 0x85, 0xed, 0x9d, 0x8c, 0x67, 0xdc, 0x6a, 0xd0, 0x9c, 0xca, 0xeb, 0x76, + 0x90, 0x71, 0x9e, 0x15, 0x04, 0xda, 0x68, 0x3c, 0x39, 0x81, 0x9a, 0x32, 0xa2, 0x34, 0x62, 0xa2, + 0x4c, 0xe8, 0xce, 0x1a, 0xe0, 0xde, 0x9b, 0x12, 0x71, 0x7c, 0x8a, 0x44, 0x4c, 0x30, 0x97, 0xa9, + 0xfb, 0x10, 0x34, 0x05, 0xe7, 0x45, 0x42, 0x53, 0xcf, 0xe9, 0x38, 0xbd, 0x7a, 0xdc, 0x30, 0xe1, + 0xcb, 0xd4, 0x7d, 0x04, 0xee, 0x22, 0xa5, 0x88, 0xee, 0x27, 0x29, 0x79, 0xcf, 0x99, 0x77, 0xab, + 0xe3, 0xf4, 0x36, 0xe3, 0x56, 0xa9, 0x1d, 0x18, 0x69, 0x95, 0x12, 0x55, 0x29, 0x1b, 0xbf, 0xa4, + 0x44, 0x65, 0xca, 0x00, 0x34, 0x72, 0x42, 0xb3, 0x5c, 0x7b, 0xf5, 0x8e, 0xd3, 0xdb, 0x18, 0x3e, + 0xf9, 0x3e, 0x0f, 0xb6, 0xa4, 0xb5, 0x4e, 0xca, 0x8b, 0x8b, 0x79, 0xb0, 0x33, 0x45, 0xac, 0x78, + 0xde, 0x5d, 0x93, 0xbb, 0x71, 0x55, 0xe8, 0xbe, 0x06, 0x75, 0xd3, 0x8a, 0x77, 0xbb, 0xe3, 0xf4, + 0x5a, 0x7b, 0xed, 0xb0, 0xec, 0x33, 0xbc, 0xec, 0x33, 0x3c, 0xbe, 0xec, 0x73, 0xe8, 0xcf, 0xe6, + 0x41, 0xed, 0x62, 0x1e, 0xb8, 0x6b, 0x3c, 0x53, 0xdc, 0x3d, 0xfb, 0x1a, 0x38, 0xb1, 0xe5, 0xb8, + 0x87, 0xc0, 0x15, 0xfd, 0xa4, 0x40, 0x4a, 0x27, 0x4a, 0x70, 0x9d, 0x08, 0x49, 0x31, 0xf1, 0x1a, + 0xe6, 0xed, 0xc3, 0xc7, 0x86, 0xf0, 0x65, 0x1e, 0xec, 0x62, 0xfb, 0xb3, 0x55, 0xfa, 0x2e, 0xa4, + 0x1c, 0x32, 0xa4, 0xf3, 0x70, 0x44, 0x32, 0x84, 0xa7, 0x07, 0x04, 0xc7, 0xdb, 0xa2, 0x3f, 0x42, + 0x4a, 0x1f, 0x09, 0xae, 0x0f, 0x4d, 0xad, 0x25, 0x46, 0xbf, 0x11, 0x9b, 0x37, 0x21, 0x46, 0xeb, + 0xc4, 0x1c, 0xf8, 0xa2, 0x9f, 0x20, 0x49, 0x75, 0xce, 0x88, 0xa6, 0x38, 0xd1, 0xa7, 0x48, 0x24, + 0x08, 0xe3, 0x09, 0x9b, 0x14, 0x48, 0x73, 0xe9, 0xdd, 0xb9, 0x3e, 0x7d, 0x57, 0xf4, 0x07, 0x2b, + 0x92, 0x19, 0xfd, 0xe0, 0x27, 0xc7, 0x3a, 0x45, 0xff, 0x74, 0xda, 0xbc, 0x89, 0x53, 0xf4, 0x77, + 0x27, 0x04, 0xda, 0x19, 0xe1, 0x8c, 0x68, 0xf9, 0x27, 0x17, 0x70, 0x7d, 0x17, 0x6f, 0x85, 0xb9, + 0x6a, 0x71, 0x02, 0xb6, 0xed, 0x14, 0x88, 0x94, 0x5c, 0xda, 0xc1, 0x7b, 0xad, 0xff, 0x6e, 0x4d, + 0xb7, 0xda, 0x9a, 0x07, 0xe5, 0xd6, 0x5c, 0x01, 0x94, 0x9b, 0xb3, 0x65, 0xd4, 0x17, 0x46, 0x34, + 0x75, 0xc3, 0x57, 0xb3, 0x85, 0xef, 0x9c, 0x2f, 0x7c, 0xe7, 0xdb, 0xc2, 0x77, 0xce, 0x96, 0x7e, + 0xed, 0x7c, 0xe9, 0xd7, 0x3e, 0x2f, 0xfd, 0xda, 0xdb, 0xfd, 0x8c, 0xea, 0x7c, 0x32, 0x0e, 0x31, + 0x67, 0xf0, 0x48, 0x4b, 0x9a, 0x92, 0xa7, 0x23, 0x34, 0x56, 0x50, 0xd9, 0x33, 0xfc, 0xb8, 0xf7, + 0x0c, 0x7e, 0x82, 0x14, 0x7f, 0xe0, 0x12, 0xe1, 0x82, 0x40, 0x3d, 0x15, 0x44, 0x8d, 0x1b, 0xf6, + 0x55, 0xfb, 0x3f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x66, 0xf6, 0x25, 0xf7, 0xf9, 0x03, 0x00, 0x00, +} + +func (m *OsmosisTwapRecord) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *OsmosisTwapRecord) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *OsmosisTwapRecord) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + n1, err1 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.LastErrorTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.LastErrorTime):]) + if err1 != nil { + return 0, err1 + } + i -= n1 + i = encodeVarintOsmosis(dAtA, i, uint64(n1)) + i-- + dAtA[i] = 0x5a + { + size := m.GeometricTwapAccumulator.Size() + i -= size + if _, err := m.GeometricTwapAccumulator.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintOsmosis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + { + size := m.P1ArithmeticTwapAccumulator.Size() + i -= size + if _, err := m.P1ArithmeticTwapAccumulator.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintOsmosis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + { + size := m.P0ArithmeticTwapAccumulator.Size() + i -= size + if _, err := m.P0ArithmeticTwapAccumulator.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintOsmosis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + { + size := m.P1LastSpotPrice.Size() + i -= size + if _, err := m.P1LastSpotPrice.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintOsmosis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + { + size := m.P0LastSpotPrice.Size() + i -= size + if _, err := m.P0LastSpotPrice.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintOsmosis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + n2, err2 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.Time):]) + if err2 != nil { + return 0, err2 + } + i -= n2 + i = encodeVarintOsmosis(dAtA, i, uint64(n2)) + i-- + dAtA[i] = 0x2a + if m.Height != 0 { + i = encodeVarintOsmosis(dAtA, i, uint64(m.Height)) + i-- + dAtA[i] = 0x20 + } + if len(m.Asset1Denom) > 0 { + i -= len(m.Asset1Denom) + copy(dAtA[i:], m.Asset1Denom) + i = encodeVarintOsmosis(dAtA, i, uint64(len(m.Asset1Denom))) + i-- + dAtA[i] = 0x1a + } + if len(m.Asset0Denom) > 0 { + i -= len(m.Asset0Denom) + copy(dAtA[i:], m.Asset0Denom) + i = encodeVarintOsmosis(dAtA, i, uint64(len(m.Asset0Denom))) + i-- + dAtA[i] = 0x12 + } + if m.PoolId != 0 { + i = encodeVarintOsmosis(dAtA, i, uint64(m.PoolId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func encodeVarintOsmosis(dAtA []byte, offset int, v uint64) int { + offset -= sovOsmosis(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *OsmosisTwapRecord) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PoolId != 0 { + n += 1 + sovOsmosis(uint64(m.PoolId)) + } + l = len(m.Asset0Denom) + if l > 0 { + n += 1 + l + sovOsmosis(uint64(l)) + } + l = len(m.Asset1Denom) + if l > 0 { + n += 1 + l + sovOsmosis(uint64(l)) + } + if m.Height != 0 { + n += 1 + sovOsmosis(uint64(m.Height)) + } + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.Time) + n += 1 + l + sovOsmosis(uint64(l)) + l = m.P0LastSpotPrice.Size() + n += 1 + l + sovOsmosis(uint64(l)) + l = m.P1LastSpotPrice.Size() + n += 1 + l + sovOsmosis(uint64(l)) + l = m.P0ArithmeticTwapAccumulator.Size() + n += 1 + l + sovOsmosis(uint64(l)) + l = m.P1ArithmeticTwapAccumulator.Size() + n += 1 + l + sovOsmosis(uint64(l)) + l = m.GeometricTwapAccumulator.Size() + n += 1 + l + sovOsmosis(uint64(l)) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.LastErrorTime) + n += 1 + l + sovOsmosis(uint64(l)) + return n +} + +func sovOsmosis(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozOsmosis(x uint64) (n int) { + return sovOsmosis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *OsmosisTwapRecord) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOsmosis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: OsmosisTwapRecord: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: OsmosisTwapRecord: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + } + m.PoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOsmosis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Asset0Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOsmosis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthOsmosis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthOsmosis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Asset0Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Asset1Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOsmosis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthOsmosis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthOsmosis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Asset1Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Height", wireType) + } + m.Height = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOsmosis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Height |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Time", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOsmosis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthOsmosis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthOsmosis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.Time, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field P0LastSpotPrice", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOsmosis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthOsmosis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthOsmosis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.P0LastSpotPrice.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field P1LastSpotPrice", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOsmosis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthOsmosis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthOsmosis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.P1LastSpotPrice.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field P0ArithmeticTwapAccumulator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOsmosis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthOsmosis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthOsmosis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.P0ArithmeticTwapAccumulator.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field P1ArithmeticTwapAccumulator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOsmosis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthOsmosis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthOsmosis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.P1ArithmeticTwapAccumulator.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GeometricTwapAccumulator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOsmosis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthOsmosis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthOsmosis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.GeometricTwapAccumulator.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastErrorTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowOsmosis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthOsmosis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthOsmosis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.LastErrorTime, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipOsmosis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthOsmosis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipOsmosis(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowOsmosis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowOsmosis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowOsmosis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthOsmosis + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupOsmosis + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthOsmosis + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthOsmosis = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowOsmosis = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupOsmosis = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/icqoracle/types/params.go b/x/icqoracle/types/params.go new file mode 100644 index 00000000000..874012a4b8a --- /dev/null +++ b/x/icqoracle/types/params.go @@ -0,0 +1,16 @@ +package types + +// NewParams creates a new Params instance +func NewParams() Params { + return Params{} +} + +// DefaultParams returns a default set of parameters +func DefaultParams() Params { + return NewParams() +} + +// Validate validates the set of params +func (p Params) Validate() error { + return nil +} diff --git a/x/icqoracle/types/query.pb.go b/x/icqoracle/types/query.pb.go new file mode 100644 index 00000000000..3cc722e1d44 --- /dev/null +++ b/x/icqoracle/types/query.pb.go @@ -0,0 +1,2025 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/icqoracle/query.proto + +package types + +import ( + context "context" + cosmossdk_io_math "cosmossdk.io/math" + fmt "fmt" + query "github.com/cosmos/cosmos-sdk/types/query" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// QueryTokenPriceRequest is the request type for the Query/TokenPrice RPC +// method +type QueryTokenPriceRequest struct { + BaseDenom string `protobuf:"bytes,1,opt,name=base_denom,json=baseDenom,proto3" json:"base_denom,omitempty"` + QuoteDenom string `protobuf:"bytes,2,opt,name=quote_denom,json=quoteDenom,proto3" json:"quote_denom,omitempty"` + PoolId uint64 `protobuf:"varint,3,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` +} + +func (m *QueryTokenPriceRequest) Reset() { *m = QueryTokenPriceRequest{} } +func (m *QueryTokenPriceRequest) String() string { return proto.CompactTextString(m) } +func (*QueryTokenPriceRequest) ProtoMessage() {} +func (*QueryTokenPriceRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_51a2bacbcf1e1cb4, []int{0} +} +func (m *QueryTokenPriceRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTokenPriceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTokenPriceRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryTokenPriceRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTokenPriceRequest.Merge(m, src) +} +func (m *QueryTokenPriceRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryTokenPriceRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTokenPriceRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryTokenPriceRequest proto.InternalMessageInfo + +func (m *QueryTokenPriceRequest) GetBaseDenom() string { + if m != nil { + return m.BaseDenom + } + return "" +} + +func (m *QueryTokenPriceRequest) GetQuoteDenom() string { + if m != nil { + return m.QuoteDenom + } + return "" +} + +func (m *QueryTokenPriceRequest) GetPoolId() uint64 { + if m != nil { + return m.PoolId + } + return 0 +} + +// QueryTokenPricesRequest is the request type for the Query/TokenPrices RPC +// method +type QueryTokenPricesRequest struct { + Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryTokenPricesRequest) Reset() { *m = QueryTokenPricesRequest{} } +func (m *QueryTokenPricesRequest) String() string { return proto.CompactTextString(m) } +func (*QueryTokenPricesRequest) ProtoMessage() {} +func (*QueryTokenPricesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_51a2bacbcf1e1cb4, []int{1} +} +func (m *QueryTokenPricesRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTokenPricesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTokenPricesRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryTokenPricesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTokenPricesRequest.Merge(m, src) +} +func (m *QueryTokenPricesRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryTokenPricesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTokenPricesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryTokenPricesRequest proto.InternalMessageInfo + +func (m *QueryTokenPricesRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +// TokenPriceResponse adds human readable info on to of TokenPrice +type TokenPriceResponse struct { + // If IBC token, base denom unwrapped (e.g. ibc/... -> uatom) + BaseDenomUnwrapped string `protobuf:"bytes,1,opt,name=base_denom_unwrapped,json=baseDenomUnwrapped,proto3" json:"base_denom_unwrapped,omitempty"` + // If IBC token, Quote denom unwrapped (e.g. ibc/... -> uatom) + QuoteDenomUnwrapped string `protobuf:"bytes,2,opt,name=quote_denom_unwrapped,json=quoteDenomUnwrapped,proto3" json:"quote_denom_unwrapped,omitempty"` + // The token price object with the remaining price metadata + TokenPrice TokenPrice `protobuf:"bytes,3,opt,name=token_price,json=tokenPrice,proto3" json:"token_price"` +} + +func (m *TokenPriceResponse) Reset() { *m = TokenPriceResponse{} } +func (m *TokenPriceResponse) String() string { return proto.CompactTextString(m) } +func (*TokenPriceResponse) ProtoMessage() {} +func (*TokenPriceResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_51a2bacbcf1e1cb4, []int{2} +} +func (m *TokenPriceResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TokenPriceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TokenPriceResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TokenPriceResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_TokenPriceResponse.Merge(m, src) +} +func (m *TokenPriceResponse) XXX_Size() int { + return m.Size() +} +func (m *TokenPriceResponse) XXX_DiscardUnknown() { + xxx_messageInfo_TokenPriceResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_TokenPriceResponse proto.InternalMessageInfo + +func (m *TokenPriceResponse) GetBaseDenomUnwrapped() string { + if m != nil { + return m.BaseDenomUnwrapped + } + return "" +} + +func (m *TokenPriceResponse) GetQuoteDenomUnwrapped() string { + if m != nil { + return m.QuoteDenomUnwrapped + } + return "" +} + +func (m *TokenPriceResponse) GetTokenPrice() TokenPrice { + if m != nil { + return m.TokenPrice + } + return TokenPrice{} +} + +// QueryTokenPricesResponse is the response type for the Query/TokenPrices RPC +// method +type QueryTokenPricesResponse struct { + TokenPrices []TokenPriceResponse `protobuf:"bytes,1,rep,name=token_prices,json=tokenPrices,proto3" json:"token_prices"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryTokenPricesResponse) Reset() { *m = QueryTokenPricesResponse{} } +func (m *QueryTokenPricesResponse) String() string { return proto.CompactTextString(m) } +func (*QueryTokenPricesResponse) ProtoMessage() {} +func (*QueryTokenPricesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_51a2bacbcf1e1cb4, []int{3} +} +func (m *QueryTokenPricesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTokenPricesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTokenPricesResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryTokenPricesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTokenPricesResponse.Merge(m, src) +} +func (m *QueryTokenPricesResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryTokenPricesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTokenPricesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryTokenPricesResponse proto.InternalMessageInfo + +func (m *QueryTokenPricesResponse) GetTokenPrices() []TokenPriceResponse { + if m != nil { + return m.TokenPrices + } + return nil +} + +func (m *QueryTokenPricesResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil +} + +// QueryParamsRequest is the request type for the Query/Params RPC method +type QueryParamsRequest struct { +} + +func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } +func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryParamsRequest) ProtoMessage() {} +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_51a2bacbcf1e1cb4, []int{4} +} +func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsRequest.Merge(m, src) +} +func (m *QueryParamsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo + +// QueryParamsResponse is the response type for the Query/Params RPC method +type QueryParamsResponse struct { + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` +} + +func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } +func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryParamsResponse) ProtoMessage() {} +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_51a2bacbcf1e1cb4, []int{5} +} +func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsResponse.Merge(m, src) +} +func (m *QueryParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo + +func (m *QueryParamsResponse) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +// QueryTokenPriceForQuoteDenomRequest is the request type for the +// Query/TokenPriceForQuoteDenom RPC method +type QueryTokenPriceForQuoteDenomRequest struct { + BaseDenom string `protobuf:"bytes,1,opt,name=base_denom,json=baseDenom,proto3" json:"base_denom,omitempty"` + QuoteDenom string `protobuf:"bytes,2,opt,name=quote_denom,json=quoteDenom,proto3" json:"quote_denom,omitempty"` +} + +func (m *QueryTokenPriceForQuoteDenomRequest) Reset() { *m = QueryTokenPriceForQuoteDenomRequest{} } +func (m *QueryTokenPriceForQuoteDenomRequest) String() string { return proto.CompactTextString(m) } +func (*QueryTokenPriceForQuoteDenomRequest) ProtoMessage() {} +func (*QueryTokenPriceForQuoteDenomRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_51a2bacbcf1e1cb4, []int{6} +} +func (m *QueryTokenPriceForQuoteDenomRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTokenPriceForQuoteDenomRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTokenPriceForQuoteDenomRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryTokenPriceForQuoteDenomRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTokenPriceForQuoteDenomRequest.Merge(m, src) +} +func (m *QueryTokenPriceForQuoteDenomRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryTokenPriceForQuoteDenomRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTokenPriceForQuoteDenomRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryTokenPriceForQuoteDenomRequest proto.InternalMessageInfo + +func (m *QueryTokenPriceForQuoteDenomRequest) GetBaseDenom() string { + if m != nil { + return m.BaseDenom + } + return "" +} + +func (m *QueryTokenPriceForQuoteDenomRequest) GetQuoteDenom() string { + if m != nil { + return m.QuoteDenom + } + return "" +} + +// QueryTokenPriceForQuoteDenomResponse is the response type for the +// Query/TokenPriceForQuoteDenom RPC method +type QueryTokenPriceForQuoteDenomResponse struct { + Price cosmossdk_io_math.LegacyDec `protobuf:"bytes,1,opt,name=price,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"price"` +} + +func (m *QueryTokenPriceForQuoteDenomResponse) Reset() { *m = QueryTokenPriceForQuoteDenomResponse{} } +func (m *QueryTokenPriceForQuoteDenomResponse) String() string { return proto.CompactTextString(m) } +func (*QueryTokenPriceForQuoteDenomResponse) ProtoMessage() {} +func (*QueryTokenPriceForQuoteDenomResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_51a2bacbcf1e1cb4, []int{7} +} +func (m *QueryTokenPriceForQuoteDenomResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTokenPriceForQuoteDenomResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTokenPriceForQuoteDenomResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryTokenPriceForQuoteDenomResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTokenPriceForQuoteDenomResponse.Merge(m, src) +} +func (m *QueryTokenPriceForQuoteDenomResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryTokenPriceForQuoteDenomResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTokenPriceForQuoteDenomResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryTokenPriceForQuoteDenomResponse proto.InternalMessageInfo + +func init() { + proto.RegisterType((*QueryTokenPriceRequest)(nil), "stride.icqoracle.QueryTokenPriceRequest") + proto.RegisterType((*QueryTokenPricesRequest)(nil), "stride.icqoracle.QueryTokenPricesRequest") + proto.RegisterType((*TokenPriceResponse)(nil), "stride.icqoracle.TokenPriceResponse") + proto.RegisterType((*QueryTokenPricesResponse)(nil), "stride.icqoracle.QueryTokenPricesResponse") + proto.RegisterType((*QueryParamsRequest)(nil), "stride.icqoracle.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "stride.icqoracle.QueryParamsResponse") + proto.RegisterType((*QueryTokenPriceForQuoteDenomRequest)(nil), "stride.icqoracle.QueryTokenPriceForQuoteDenomRequest") + proto.RegisterType((*QueryTokenPriceForQuoteDenomResponse)(nil), "stride.icqoracle.QueryTokenPriceForQuoteDenomResponse") +} + +func init() { proto.RegisterFile("stride/icqoracle/query.proto", fileDescriptor_51a2bacbcf1e1cb4) } + +var fileDescriptor_51a2bacbcf1e1cb4 = []byte{ + // 671 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0xcd, 0x4f, 0x13, 0x41, + 0x14, 0xef, 0xf2, 0x51, 0xc3, 0x5b, 0x0f, 0x66, 0x40, 0x5b, 0x57, 0x68, 0x9b, 0x05, 0xb4, 0x92, + 0xb8, 0x23, 0x25, 0x12, 0xbd, 0x22, 0xc1, 0x98, 0x40, 0x02, 0x55, 0x2f, 0x5e, 0x9a, 0xe9, 0x76, + 0xb2, 0x6c, 0xa0, 0x3b, 0xdb, 0x9d, 0x29, 0xc8, 0xc1, 0x8b, 0x07, 0xcf, 0x26, 0xfe, 0x21, 0x26, + 0x1e, 0xbd, 0x78, 0xe5, 0x48, 0xe2, 0xc5, 0x78, 0x20, 0x06, 0xfc, 0x43, 0xcc, 0xce, 0xcc, 0x76, + 0xb7, 0x14, 0x68, 0x4d, 0xbc, 0x0d, 0xef, 0xeb, 0xf7, 0xf1, 0x1e, 0x5d, 0x98, 0xe5, 0x22, 0xf2, + 0x5b, 0x14, 0xfb, 0x6e, 0x87, 0x45, 0xc4, 0xdd, 0xa7, 0xb8, 0xd3, 0xa5, 0xd1, 0x91, 0x13, 0x46, + 0x4c, 0x30, 0x74, 0x4b, 0x65, 0x9d, 0x5e, 0xd6, 0x5a, 0x72, 0x19, 0x6f, 0x33, 0x8e, 0x9b, 0x84, + 0xeb, 0x52, 0x7c, 0xb0, 0xdc, 0xa4, 0x82, 0x2c, 0xe3, 0x90, 0x78, 0x7e, 0x40, 0x84, 0xcf, 0x02, + 0xd5, 0x6d, 0xcd, 0x78, 0xcc, 0x63, 0xf2, 0x89, 0xe3, 0x97, 0x8e, 0xce, 0x7a, 0x8c, 0x79, 0xfb, + 0x14, 0x93, 0xd0, 0xc7, 0x24, 0x08, 0x98, 0x90, 0x2d, 0x5c, 0x67, 0x2b, 0x03, 0x7c, 0x7a, 0x2f, + 0x55, 0x61, 0x77, 0xe0, 0xce, 0x4e, 0x8c, 0xfb, 0x9a, 0xed, 0xd1, 0x60, 0x3b, 0xf2, 0x5d, 0x5a, + 0xa7, 0x9d, 0x2e, 0xe5, 0x02, 0xcd, 0x01, 0xc4, 0xb4, 0x1a, 0x2d, 0x1a, 0xb0, 0x76, 0xd1, 0xa8, + 0x18, 0xd5, 0xa9, 0xfa, 0x54, 0x1c, 0x59, 0x8f, 0x03, 0xa8, 0x0c, 0x66, 0xa7, 0xcb, 0x44, 0x92, + 0x1f, 0x93, 0x79, 0x90, 0x21, 0x55, 0x50, 0x80, 0x1b, 0x21, 0x63, 0xfb, 0x0d, 0xbf, 0x55, 0x1c, + 0xaf, 0x18, 0xd5, 0x89, 0x7a, 0x3e, 0xfe, 0xf3, 0x65, 0xcb, 0x26, 0x50, 0xb8, 0x00, 0xc9, 0x13, + 0xcc, 0x0d, 0x80, 0x54, 0xb7, 0xc4, 0x34, 0x6b, 0xf7, 0x1d, 0x65, 0x92, 0x13, 0x63, 0x3b, 0xca, + 0x4f, 0x6d, 0x92, 0xb3, 0x4d, 0xbc, 0x84, 0x6f, 0x3d, 0xd3, 0x69, 0x7f, 0x37, 0x00, 0x65, 0x15, + 0xf1, 0x90, 0x05, 0x9c, 0xa2, 0xc7, 0x30, 0x93, 0x4a, 0x6a, 0x74, 0x83, 0xc3, 0x88, 0x84, 0x21, + 0x6d, 0x69, 0x71, 0xa8, 0x27, 0xee, 0x4d, 0x92, 0x41, 0x35, 0xb8, 0x9d, 0x51, 0x99, 0x69, 0x51, + 0x7a, 0xa7, 0x53, 0xbd, 0x69, 0xcf, 0x73, 0x30, 0x45, 0x8c, 0xdd, 0x08, 0x63, 0x70, 0x29, 0xde, + 0xac, 0xcd, 0x3a, 0x17, 0x97, 0xef, 0xa4, 0x04, 0xd7, 0x26, 0x8e, 0x4f, 0xcb, 0xb9, 0x3a, 0x88, + 0x5e, 0xc4, 0xfe, 0x6a, 0x40, 0x71, 0xd0, 0x25, 0xad, 0x63, 0x0b, 0x6e, 0x66, 0x10, 0x78, 0xd1, + 0xa8, 0x8c, 0x57, 0xcd, 0xda, 0xc2, 0x75, 0x10, 0x49, 0xaf, 0x86, 0x32, 0x53, 0x28, 0x8e, 0x5e, + 0xf4, 0xb9, 0x3e, 0x26, 0xf9, 0x3e, 0x18, 0xea, 0xba, 0x9a, 0xd7, 0x67, 0xfb, 0x0c, 0x20, 0xc9, + 0x79, 0x9b, 0x44, 0xa4, 0x9d, 0x2c, 0xd5, 0xde, 0x82, 0xe9, 0xbe, 0xa8, 0x16, 0xb1, 0x0a, 0xf9, + 0x50, 0x46, 0xf4, 0x9e, 0x8b, 0x83, 0xf4, 0x55, 0x87, 0xa6, 0xac, 0xab, 0x6d, 0x0a, 0xf3, 0x17, + 0x8c, 0xd9, 0x60, 0xd1, 0x4e, 0x6f, 0x0f, 0xff, 0xe9, 0x7c, 0x6d, 0x02, 0x0b, 0xd7, 0xc3, 0x68, + 0x19, 0xcf, 0x60, 0x52, 0xed, 0x59, 0x42, 0xac, 0xcd, 0xc7, 0x5c, 0x7f, 0x9d, 0x96, 0xef, 0x29, + 0xfb, 0x78, 0x6b, 0xcf, 0xf1, 0x19, 0x6e, 0x13, 0xb1, 0xeb, 0x6c, 0x52, 0x8f, 0xb8, 0x47, 0xeb, + 0xd4, 0xad, 0xab, 0x8e, 0xda, 0xb7, 0x09, 0x98, 0x94, 0x18, 0xe8, 0x3d, 0x40, 0x8a, 0x83, 0xaa, + 0x83, 0x4e, 0x5c, 0xfe, 0x3f, 0x6a, 0x8d, 0xb4, 0x72, 0xbb, 0xfc, 0xe1, 0xc7, 0x9f, 0xcf, 0x63, + 0x77, 0x51, 0x01, 0x0f, 0xfc, 0x1c, 0x48, 0x22, 0xe8, 0xa3, 0x01, 0x66, 0xe6, 0xce, 0xd0, 0xc3, + 0xa1, 0x04, 0x92, 0xe5, 0x5a, 0x4b, 0xa3, 0x94, 0x6a, 0x1e, 0x15, 0xc9, 0xc3, 0x42, 0xc5, 0x2b, + 0x78, 0x70, 0x74, 0x08, 0x79, 0xb5, 0x73, 0xb4, 0x70, 0xc5, 0xdc, 0xbe, 0xd3, 0xb2, 0x16, 0x87, + 0x54, 0x8d, 0x00, 0xac, 0xe0, 0xbe, 0x18, 0x50, 0xb8, 0x62, 0xd3, 0xe8, 0xc9, 0x50, 0x89, 0x97, + 0x1d, 0xa0, 0xb5, 0xfa, 0xaf, 0x6d, 0x9a, 0xec, 0xa2, 0x24, 0x5b, 0x46, 0x73, 0xf8, 0x92, 0x8f, + 0x49, 0x7c, 0xb1, 0xd2, 0xab, 0xb5, 0xad, 0xe3, 0xb3, 0x92, 0x71, 0x72, 0x56, 0x32, 0x7e, 0x9f, + 0x95, 0x8c, 0x4f, 0xe7, 0xa5, 0xdc, 0xc9, 0x79, 0x29, 0xf7, 0xf3, 0xbc, 0x94, 0x7b, 0xbb, 0xe2, + 0xf9, 0x62, 0xb7, 0xdb, 0x74, 0x5c, 0xd6, 0xc6, 0xaf, 0xe4, 0x88, 0x47, 0x9b, 0xa4, 0xc9, 0x93, + 0x71, 0x07, 0xb5, 0xa7, 0xf8, 0x5d, 0x66, 0xa8, 0x38, 0x0a, 0x29, 0x6f, 0xe6, 0xe5, 0xe7, 0x60, + 0xe5, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xef, 0x20, 0x57, 0x46, 0xc2, 0x06, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type QueryClient interface { + // TokenPrice queries the current price for a specific token + TokenPrice(ctx context.Context, in *QueryTokenPriceRequest, opts ...grpc.CallOption) (*TokenPriceResponse, error) + // TokenPrices queries all token prices + TokenPrices(ctx context.Context, in *QueryTokenPricesRequest, opts ...grpc.CallOption) (*QueryTokenPricesResponse, error) + // Params queries the oracle parameters + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + // TokenPriceForQuoteDenom queries the exchange rate between two tokens + TokenPriceForQuoteDenom(ctx context.Context, in *QueryTokenPriceForQuoteDenomRequest, opts ...grpc.CallOption) (*QueryTokenPriceForQuoteDenomResponse, error) +} + +type queryClient struct { + cc grpc1.ClientConn +} + +func NewQueryClient(cc grpc1.ClientConn) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) TokenPrice(ctx context.Context, in *QueryTokenPriceRequest, opts ...grpc.CallOption) (*TokenPriceResponse, error) { + out := new(TokenPriceResponse) + err := c.cc.Invoke(ctx, "/stride.icqoracle.Query/TokenPrice", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) TokenPrices(ctx context.Context, in *QueryTokenPricesRequest, opts ...grpc.CallOption) (*QueryTokenPricesResponse, error) { + out := new(QueryTokenPricesResponse) + err := c.cc.Invoke(ctx, "/stride.icqoracle.Query/TokenPrices", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, "/stride.icqoracle.Query/Params", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) TokenPriceForQuoteDenom(ctx context.Context, in *QueryTokenPriceForQuoteDenomRequest, opts ...grpc.CallOption) (*QueryTokenPriceForQuoteDenomResponse, error) { + out := new(QueryTokenPriceForQuoteDenomResponse) + err := c.cc.Invoke(ctx, "/stride.icqoracle.Query/TokenPriceForQuoteDenom", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +type QueryServer interface { + // TokenPrice queries the current price for a specific token + TokenPrice(context.Context, *QueryTokenPriceRequest) (*TokenPriceResponse, error) + // TokenPrices queries all token prices + TokenPrices(context.Context, *QueryTokenPricesRequest) (*QueryTokenPricesResponse, error) + // Params queries the oracle parameters + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + // TokenPriceForQuoteDenom queries the exchange rate between two tokens + TokenPriceForQuoteDenom(context.Context, *QueryTokenPriceForQuoteDenomRequest) (*QueryTokenPriceForQuoteDenomResponse, error) +} + +// UnimplementedQueryServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (*UnimplementedQueryServer) TokenPrice(ctx context.Context, req *QueryTokenPriceRequest) (*TokenPriceResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TokenPrice not implemented") +} +func (*UnimplementedQueryServer) TokenPrices(ctx context.Context, req *QueryTokenPricesRequest) (*QueryTokenPricesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TokenPrices not implemented") +} +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +} +func (*UnimplementedQueryServer) TokenPriceForQuoteDenom(ctx context.Context, req *QueryTokenPriceForQuoteDenomRequest) (*QueryTokenPriceForQuoteDenomResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TokenPriceForQuoteDenom not implemented") +} + +func RegisterQueryServer(s grpc1.Server, srv QueryServer) { + s.RegisterService(&_Query_serviceDesc, srv) +} + +func _Query_TokenPrice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTokenPriceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).TokenPrice(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.icqoracle.Query/TokenPrice", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).TokenPrice(ctx, req.(*QueryTokenPriceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_TokenPrices_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTokenPricesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).TokenPrices(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.icqoracle.Query/TokenPrices", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).TokenPrices(ctx, req.(*QueryTokenPricesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Params(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.icqoracle.Query/Params", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_TokenPriceForQuoteDenom_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTokenPriceForQuoteDenomRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).TokenPriceForQuoteDenom(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.icqoracle.Query/TokenPriceForQuoteDenom", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).TokenPriceForQuoteDenom(ctx, req.(*QueryTokenPriceForQuoteDenomRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Query_serviceDesc = grpc.ServiceDesc{ + ServiceName: "stride.icqoracle.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "TokenPrice", + Handler: _Query_TokenPrice_Handler, + }, + { + MethodName: "TokenPrices", + Handler: _Query_TokenPrices_Handler, + }, + { + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + { + MethodName: "TokenPriceForQuoteDenom", + Handler: _Query_TokenPriceForQuoteDenom_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "stride/icqoracle/query.proto", +} + +func (m *QueryTokenPriceRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryTokenPriceRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTokenPriceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.PoolId != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.PoolId)) + i-- + dAtA[i] = 0x18 + } + if len(m.QuoteDenom) > 0 { + i -= len(m.QuoteDenom) + copy(dAtA[i:], m.QuoteDenom) + i = encodeVarintQuery(dAtA, i, uint64(len(m.QuoteDenom))) + i-- + dAtA[i] = 0x12 + } + if len(m.BaseDenom) > 0 { + i -= len(m.BaseDenom) + copy(dAtA[i:], m.BaseDenom) + i = encodeVarintQuery(dAtA, i, uint64(len(m.BaseDenom))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryTokenPricesRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryTokenPricesRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTokenPricesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *TokenPriceResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TokenPriceResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TokenPriceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.TokenPrice.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.QuoteDenomUnwrapped) > 0 { + i -= len(m.QuoteDenomUnwrapped) + copy(dAtA[i:], m.QuoteDenomUnwrapped) + i = encodeVarintQuery(dAtA, i, uint64(len(m.QuoteDenomUnwrapped))) + i-- + dAtA[i] = 0x12 + } + if len(m.BaseDenomUnwrapped) > 0 { + i -= len(m.BaseDenomUnwrapped) + copy(dAtA[i:], m.BaseDenomUnwrapped) + i = encodeVarintQuery(dAtA, i, uint64(len(m.BaseDenomUnwrapped))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryTokenPricesResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryTokenPricesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTokenPricesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.TokenPrices) > 0 { + for iNdEx := len(m.TokenPrices) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TokenPrices[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryTokenPriceForQuoteDenomRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryTokenPriceForQuoteDenomRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTokenPriceForQuoteDenomRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.QuoteDenom) > 0 { + i -= len(m.QuoteDenom) + copy(dAtA[i:], m.QuoteDenom) + i = encodeVarintQuery(dAtA, i, uint64(len(m.QuoteDenom))) + i-- + dAtA[i] = 0x12 + } + if len(m.BaseDenom) > 0 { + i -= len(m.BaseDenom) + copy(dAtA[i:], m.BaseDenom) + i = encodeVarintQuery(dAtA, i, uint64(len(m.BaseDenom))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryTokenPriceForQuoteDenomResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryTokenPriceForQuoteDenomResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTokenPriceForQuoteDenomResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.Price.Size() + i -= size + if _, err := m.Price.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *QueryTokenPriceRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.BaseDenom) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.QuoteDenom) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.PoolId != 0 { + n += 1 + sovQuery(uint64(m.PoolId)) + } + return n +} + +func (m *QueryTokenPricesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *TokenPriceResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.BaseDenomUnwrapped) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.QuoteDenomUnwrapped) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = m.TokenPrice.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryTokenPricesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.TokenPrices) > 0 { + for _, e := range m.TokenPrices { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryTokenPriceForQuoteDenomRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.BaseDenom) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.QuoteDenom) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryTokenPriceForQuoteDenomResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Price.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryTokenPriceRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryTokenPriceRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryTokenPriceRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BaseDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BaseDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field QuoteDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.QuoteDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + } + m.PoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryTokenPricesRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryTokenPricesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryTokenPricesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TokenPriceResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TokenPriceResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TokenPriceResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BaseDenomUnwrapped", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BaseDenomUnwrapped = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field QuoteDenomUnwrapped", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.QuoteDenomUnwrapped = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenPrice", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.TokenPrice.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryTokenPricesResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryTokenPricesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryTokenPricesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TokenPrices", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TokenPrices = append(m.TokenPrices, TokenPriceResponse{}) + if err := m.TokenPrices[len(m.TokenPrices)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryTokenPriceForQuoteDenomRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryTokenPriceForQuoteDenomRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryTokenPriceForQuoteDenomRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BaseDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BaseDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field QuoteDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.QuoteDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryTokenPriceForQuoteDenomResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryTokenPriceForQuoteDenomResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryTokenPriceForQuoteDenomResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Price", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Price.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipQuery(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthQuery + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupQuery + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthQuery + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/icqoracle/types/query.pb.gw.go b/x/icqoracle/types/query.pb.gw.go new file mode 100644 index 00000000000..26446a8d16f --- /dev/null +++ b/x/icqoracle/types/query.pb.gw.go @@ -0,0 +1,402 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: stride/icqoracle/query.proto + +/* +Package types is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package types + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage +var _ = metadata.Join + +var ( + filter_Query_TokenPrice_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Query_TokenPrice_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTokenPriceRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_TokenPrice_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.TokenPrice(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_TokenPrice_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTokenPriceRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_TokenPrice_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.TokenPrice(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_TokenPrices_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Query_TokenPrices_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTokenPricesRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_TokenPrices_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.TokenPrices(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_TokenPrices_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTokenPricesRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_TokenPrices_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.TokenPrices(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := server.Params(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_TokenPriceForQuoteDenom_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Query_TokenPriceForQuoteDenom_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTokenPriceForQuoteDenomRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_TokenPriceForQuoteDenom_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.TokenPriceForQuoteDenom(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_TokenPriceForQuoteDenom_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTokenPriceForQuoteDenomRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_TokenPriceForQuoteDenom_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.TokenPriceForQuoteDenom(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". +// UnaryRPC :call QueryServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { + + mux.Handle("GET", pattern_Query_TokenPrice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_TokenPrice_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_TokenPrice_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_TokenPrices_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_TokenPrices_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_TokenPrices_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_TokenPriceForQuoteDenom_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_TokenPriceForQuoteDenom_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_TokenPriceForQuoteDenom_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterQueryHandler(ctx, mux, conn) +} + +// RegisterQueryHandler registers the http handlers for service Query to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn)) +} + +// RegisterQueryHandlerClient registers the http handlers for service Query +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "QueryClient" to call the correct interceptors. +func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { + + mux.Handle("GET", pattern_Query_TokenPrice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_TokenPrice_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_TokenPrice_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_TokenPrices_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_TokenPrices_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_TokenPrices_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_TokenPriceForQuoteDenom_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_TokenPriceForQuoteDenom_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_TokenPriceForQuoteDenom_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Query_TokenPrice_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"stride", "icqoracle", "price"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_TokenPrices_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"stride", "icqoracle", "prices"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"stride", "icqoracle", "params"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_TokenPriceForQuoteDenom_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"stride", "icqoracle", "quote_price"}, "", runtime.AssumeColonVerbOpt(false))) +) + +var ( + forward_Query_TokenPrice_0 = runtime.ForwardResponseMessage + + forward_Query_TokenPrices_0 = runtime.ForwardResponseMessage + + forward_Query_Params_0 = runtime.ForwardResponseMessage + + forward_Query_TokenPriceForQuoteDenom_0 = runtime.ForwardResponseMessage +) diff --git a/x/icqoracle/types/tx.pb.go b/x/icqoracle/types/tx.pb.go new file mode 100644 index 00000000000..6eda5ad9cad --- /dev/null +++ b/x/icqoracle/types/tx.pb.go @@ -0,0 +1,1656 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/icqoracle/tx.proto + +package types + +import ( + context "context" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + _ "github.com/cosmos/cosmos-sdk/types/msgservice" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// MsgRegisterTokenPriceQuery defines the message for adding a new token to +// track prices +type MsgRegisterTokenPriceQuery struct { + Admin string `protobuf:"bytes,1,opt,name=admin,proto3" json:"admin,omitempty"` + // Token denom on Stride + BaseDenom string `protobuf:"bytes,2,opt,name=base_denom,json=baseDenom,proto3" json:"base_denom,omitempty"` + // Quote denom on Stride + QuoteDenom string `protobuf:"bytes,3,opt,name=quote_denom,json=quoteDenom,proto3" json:"quote_denom,omitempty"` + // Token denom on Osmosis + OsmosisBaseDenom string `protobuf:"bytes,4,opt,name=osmosis_base_denom,json=osmosisBaseDenom,proto3" json:"osmosis_base_denom,omitempty"` + // Quote denom on Osmosis + OsmosisQuoteDenom string `protobuf:"bytes,5,opt,name=osmosis_quote_denom,json=osmosisQuoteDenom,proto3" json:"osmosis_quote_denom,omitempty"` + // Pool ID on Osmosis + OsmosisPoolId uint64 `protobuf:"varint,6,opt,name=osmosis_pool_id,json=osmosisPoolId,proto3" json:"osmosis_pool_id,omitempty"` +} + +func (m *MsgRegisterTokenPriceQuery) Reset() { *m = MsgRegisterTokenPriceQuery{} } +func (m *MsgRegisterTokenPriceQuery) String() string { return proto.CompactTextString(m) } +func (*MsgRegisterTokenPriceQuery) ProtoMessage() {} +func (*MsgRegisterTokenPriceQuery) Descriptor() ([]byte, []int) { + return fileDescriptor_be640eb75c1babd5, []int{0} +} +func (m *MsgRegisterTokenPriceQuery) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRegisterTokenPriceQuery) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRegisterTokenPriceQuery.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRegisterTokenPriceQuery) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRegisterTokenPriceQuery.Merge(m, src) +} +func (m *MsgRegisterTokenPriceQuery) XXX_Size() int { + return m.Size() +} +func (m *MsgRegisterTokenPriceQuery) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRegisterTokenPriceQuery.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRegisterTokenPriceQuery proto.InternalMessageInfo + +func (m *MsgRegisterTokenPriceQuery) GetAdmin() string { + if m != nil { + return m.Admin + } + return "" +} + +func (m *MsgRegisterTokenPriceQuery) GetBaseDenom() string { + if m != nil { + return m.BaseDenom + } + return "" +} + +func (m *MsgRegisterTokenPriceQuery) GetQuoteDenom() string { + if m != nil { + return m.QuoteDenom + } + return "" +} + +func (m *MsgRegisterTokenPriceQuery) GetOsmosisBaseDenom() string { + if m != nil { + return m.OsmosisBaseDenom + } + return "" +} + +func (m *MsgRegisterTokenPriceQuery) GetOsmosisQuoteDenom() string { + if m != nil { + return m.OsmosisQuoteDenom + } + return "" +} + +func (m *MsgRegisterTokenPriceQuery) GetOsmosisPoolId() uint64 { + if m != nil { + return m.OsmosisPoolId + } + return 0 +} + +type MsgRegisterTokenPriceQueryResponse struct { +} + +func (m *MsgRegisterTokenPriceQueryResponse) Reset() { *m = MsgRegisterTokenPriceQueryResponse{} } +func (m *MsgRegisterTokenPriceQueryResponse) String() string { return proto.CompactTextString(m) } +func (*MsgRegisterTokenPriceQueryResponse) ProtoMessage() {} +func (*MsgRegisterTokenPriceQueryResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_be640eb75c1babd5, []int{1} +} +func (m *MsgRegisterTokenPriceQueryResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRegisterTokenPriceQueryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRegisterTokenPriceQueryResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRegisterTokenPriceQueryResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRegisterTokenPriceQueryResponse.Merge(m, src) +} +func (m *MsgRegisterTokenPriceQueryResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgRegisterTokenPriceQueryResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRegisterTokenPriceQueryResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRegisterTokenPriceQueryResponse proto.InternalMessageInfo + +// MsgRemoveTokenPriceQuery defines the message for removing a token from price +// tracking +type MsgRemoveTokenPriceQuery struct { + Admin string `protobuf:"bytes,1,opt,name=admin,proto3" json:"admin,omitempty"` + // Token denom on Stride + BaseDenom string `protobuf:"bytes,2,opt,name=base_denom,json=baseDenom,proto3" json:"base_denom,omitempty"` + // Quote denom on Stride + QuoteDenom string `protobuf:"bytes,3,opt,name=quote_denom,json=quoteDenom,proto3" json:"quote_denom,omitempty"` + // Pool ID on Osmosis + OsmosisPoolId uint64 `protobuf:"varint,4,opt,name=osmosis_pool_id,json=osmosisPoolId,proto3" json:"osmosis_pool_id,omitempty"` +} + +func (m *MsgRemoveTokenPriceQuery) Reset() { *m = MsgRemoveTokenPriceQuery{} } +func (m *MsgRemoveTokenPriceQuery) String() string { return proto.CompactTextString(m) } +func (*MsgRemoveTokenPriceQuery) ProtoMessage() {} +func (*MsgRemoveTokenPriceQuery) Descriptor() ([]byte, []int) { + return fileDescriptor_be640eb75c1babd5, []int{2} +} +func (m *MsgRemoveTokenPriceQuery) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRemoveTokenPriceQuery) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRemoveTokenPriceQuery.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRemoveTokenPriceQuery) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRemoveTokenPriceQuery.Merge(m, src) +} +func (m *MsgRemoveTokenPriceQuery) XXX_Size() int { + return m.Size() +} +func (m *MsgRemoveTokenPriceQuery) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRemoveTokenPriceQuery.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRemoveTokenPriceQuery proto.InternalMessageInfo + +func (m *MsgRemoveTokenPriceQuery) GetAdmin() string { + if m != nil { + return m.Admin + } + return "" +} + +func (m *MsgRemoveTokenPriceQuery) GetBaseDenom() string { + if m != nil { + return m.BaseDenom + } + return "" +} + +func (m *MsgRemoveTokenPriceQuery) GetQuoteDenom() string { + if m != nil { + return m.QuoteDenom + } + return "" +} + +func (m *MsgRemoveTokenPriceQuery) GetOsmosisPoolId() uint64 { + if m != nil { + return m.OsmosisPoolId + } + return 0 +} + +type MsgRemoveTokenPriceQueryResponse struct { +} + +func (m *MsgRemoveTokenPriceQueryResponse) Reset() { *m = MsgRemoveTokenPriceQueryResponse{} } +func (m *MsgRemoveTokenPriceQueryResponse) String() string { return proto.CompactTextString(m) } +func (*MsgRemoveTokenPriceQueryResponse) ProtoMessage() {} +func (*MsgRemoveTokenPriceQueryResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_be640eb75c1babd5, []int{3} +} +func (m *MsgRemoveTokenPriceQueryResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRemoveTokenPriceQueryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRemoveTokenPriceQueryResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRemoveTokenPriceQueryResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRemoveTokenPriceQueryResponse.Merge(m, src) +} +func (m *MsgRemoveTokenPriceQueryResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgRemoveTokenPriceQueryResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRemoveTokenPriceQueryResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRemoveTokenPriceQueryResponse proto.InternalMessageInfo + +// MsgUpdateParams is the Msg/UpdateParams request type. +type MsgUpdateParams struct { + // authority is the address that controls the module (defaults to x/gov unless + // overwritten). + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + // params defines the x/icqoracle parameters to update. + // + // NOTE: All parameters must be supplied. + Params Params `protobuf:"bytes,2,opt,name=params,proto3" json:"params"` +} + +func (m *MsgUpdateParams) Reset() { *m = MsgUpdateParams{} } +func (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParams) ProtoMessage() {} +func (*MsgUpdateParams) Descriptor() ([]byte, []int) { + return fileDescriptor_be640eb75c1babd5, []int{4} +} +func (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParams.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateParams) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParams.Merge(m, src) +} +func (m *MsgUpdateParams) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParams) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParams.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParams proto.InternalMessageInfo + +func (m *MsgUpdateParams) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +func (m *MsgUpdateParams) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +type MsgUpdateParamsResponse struct { +} + +func (m *MsgUpdateParamsResponse) Reset() { *m = MsgUpdateParamsResponse{} } +func (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateParamsResponse) ProtoMessage() {} +func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_be640eb75c1babd5, []int{5} +} +func (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateParamsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateParamsResponse.Merge(m, src) +} +func (m *MsgUpdateParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MsgRegisterTokenPriceQuery)(nil), "stride.icqoracle.MsgRegisterTokenPriceQuery") + proto.RegisterType((*MsgRegisterTokenPriceQueryResponse)(nil), "stride.icqoracle.MsgRegisterTokenPriceQueryResponse") + proto.RegisterType((*MsgRemoveTokenPriceQuery)(nil), "stride.icqoracle.MsgRemoveTokenPriceQuery") + proto.RegisterType((*MsgRemoveTokenPriceQueryResponse)(nil), "stride.icqoracle.MsgRemoveTokenPriceQueryResponse") + proto.RegisterType((*MsgUpdateParams)(nil), "stride.icqoracle.MsgUpdateParams") + proto.RegisterType((*MsgUpdateParamsResponse)(nil), "stride.icqoracle.MsgUpdateParamsResponse") +} + +func init() { proto.RegisterFile("stride/icqoracle/tx.proto", fileDescriptor_be640eb75c1babd5) } + +var fileDescriptor_be640eb75c1babd5 = []byte{ + // 582 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x94, 0x5f, 0x6b, 0xd3, 0x50, + 0x18, 0xc6, 0x9b, 0xad, 0x2d, 0xf4, 0x9d, 0xb2, 0x2d, 0x4e, 0x9a, 0x06, 0xcc, 0x6a, 0x18, 0x32, + 0x4b, 0x97, 0xb0, 0x56, 0x44, 0xe6, 0x95, 0xc5, 0x1b, 0xc1, 0x42, 0x97, 0xe9, 0x8d, 0x08, 0x25, + 0x6d, 0x0e, 0xd9, 0xc1, 0x26, 0x27, 0xcb, 0x49, 0xeb, 0x7a, 0x21, 0x88, 0x97, 0x5e, 0xf9, 0x31, + 0xbc, 0xec, 0xc5, 0xbe, 0x83, 0xbb, 0x1c, 0x5e, 0x79, 0x25, 0xd2, 0x22, 0xfd, 0x1a, 0x92, 0x73, + 0x92, 0xfe, 0x5b, 0xc2, 0xf4, 0xca, 0x9b, 0x36, 0xe7, 0x7d, 0x7e, 0xe7, 0xc9, 0xfb, 0x3e, 0x49, + 0x0e, 0x94, 0x68, 0xe0, 0x63, 0x0b, 0xe9, 0xb8, 0x7b, 0x46, 0x7c, 0xb3, 0xdb, 0x43, 0x7a, 0x70, + 0xae, 0x79, 0x3e, 0x09, 0x88, 0xb8, 0xc5, 0x25, 0x6d, 0x26, 0xc9, 0xdb, 0xa6, 0x83, 0x5d, 0xa2, + 0xb3, 0x5f, 0x0e, 0xc9, 0xa5, 0x2e, 0xa1, 0x0e, 0xa1, 0x6d, 0xb6, 0xd2, 0xf9, 0x22, 0x92, 0x8a, + 0x7c, 0xa5, 0x3b, 0xd4, 0xd6, 0x07, 0x87, 0xe1, 0x5f, 0x24, 0xec, 0xd8, 0xc4, 0x26, 0x7c, 0x43, + 0x78, 0x15, 0x55, 0xcb, 0xd7, 0x3a, 0x99, 0x5d, 0x71, 0x42, 0xfd, 0xb6, 0x06, 0x72, 0x93, 0xda, + 0x06, 0xb2, 0x31, 0x0d, 0x90, 0xff, 0x8a, 0xbc, 0x43, 0x6e, 0xcb, 0xc7, 0x5d, 0x74, 0xdc, 0x47, + 0xfe, 0x50, 0xd4, 0x20, 0x67, 0x5a, 0x0e, 0x76, 0x25, 0xa1, 0x2c, 0xec, 0x17, 0x1a, 0xd2, 0xf7, + 0x8b, 0x83, 0x9d, 0xa8, 0xa1, 0x67, 0x96, 0xe5, 0x23, 0x4a, 0x4f, 0x02, 0x1f, 0xbb, 0xb6, 0xc1, + 0x31, 0xf1, 0x1e, 0x40, 0xc7, 0xa4, 0xa8, 0x6d, 0x21, 0x97, 0x38, 0xd2, 0x5a, 0xb8, 0xc9, 0x28, + 0x84, 0x95, 0xe7, 0x61, 0x41, 0xdc, 0x85, 0x8d, 0xb3, 0x3e, 0x09, 0x62, 0x7d, 0x9d, 0xe9, 0xc0, + 0x4a, 0x1c, 0xa8, 0x82, 0xc8, 0xdc, 0x31, 0x6d, 0x2f, 0xf8, 0x64, 0x19, 0xb7, 0x15, 0x29, 0x8d, + 0x99, 0x9d, 0x06, 0x77, 0x62, 0x7a, 0xd1, 0x36, 0xc7, 0xf0, 0xed, 0x48, 0x3a, 0x9e, 0xbb, 0x3f, + 0x80, 0xcd, 0x98, 0xf7, 0x08, 0xe9, 0xb5, 0xb1, 0x25, 0xe5, 0xcb, 0xc2, 0x7e, 0xd6, 0xb8, 0x1d, + 0x95, 0x5b, 0x84, 0xf4, 0x5e, 0x58, 0x47, 0xf5, 0x4f, 0xd3, 0x51, 0x85, 0x4f, 0xf4, 0x79, 0x3a, + 0xaa, 0xec, 0xcd, 0xe3, 0x4b, 0x8f, 0x4a, 0xdd, 0x03, 0x35, 0x5d, 0x35, 0x10, 0xf5, 0x88, 0x4b, + 0x91, 0xfa, 0x5b, 0x00, 0x89, 0x61, 0x0e, 0x19, 0xa0, 0xff, 0x9d, 0x76, 0x42, 0x1e, 0xd9, 0xa4, + 0x3c, 0x0e, 0x97, 0xf3, 0x50, 0x57, 0xf2, 0x48, 0x18, 0x45, 0x55, 0xa1, 0x9c, 0xa6, 0xcd, 0xb2, + 0xb8, 0x10, 0x60, 0xb3, 0x49, 0xed, 0xd7, 0x9e, 0x65, 0x06, 0xa8, 0x65, 0xfa, 0xa6, 0x43, 0xc5, + 0xc7, 0x50, 0x30, 0xfb, 0xc1, 0x29, 0xf1, 0x71, 0x30, 0xbc, 0x31, 0x86, 0x39, 0x2a, 0x3e, 0x85, + 0xbc, 0xc7, 0x1c, 0x58, 0x0c, 0x1b, 0x35, 0x49, 0x5b, 0xfd, 0xd2, 0x34, 0x7e, 0x87, 0x46, 0xe1, + 0xf2, 0xe7, 0x6e, 0xe6, 0xeb, 0x74, 0x54, 0x11, 0x8c, 0x68, 0xcb, 0x51, 0x35, 0x9c, 0x6f, 0x6e, + 0x16, 0xce, 0x58, 0x5a, 0x9a, 0x71, 0xb1, 0x45, 0xb5, 0x04, 0xc5, 0x95, 0x52, 0x3c, 0x51, 0x6d, + 0xbc, 0x06, 0xeb, 0x4d, 0x6a, 0x8b, 0x1f, 0xa0, 0x98, 0xf6, 0x45, 0x55, 0xaf, 0x37, 0x96, 0xfe, + 0xda, 0xc8, 0x8f, 0xfe, 0x85, 0x8e, 0xdb, 0x10, 0xdf, 0xc3, 0xdd, 0xe4, 0x17, 0xac, 0x92, 0x62, + 0x97, 0xc0, 0xca, 0xb5, 0xbf, 0x67, 0x67, 0x37, 0x7e, 0x0b, 0xb7, 0x96, 0x9e, 0xe6, 0xfd, 0x44, + 0x8f, 0x45, 0x44, 0x7e, 0x78, 0x23, 0x12, 0xbb, 0xcb, 0xb9, 0x8f, 0xe1, 0x53, 0x6b, 0x34, 0x2f, + 0xc7, 0x8a, 0x70, 0x35, 0x56, 0x84, 0x5f, 0x63, 0x45, 0xf8, 0x32, 0x51, 0x32, 0x57, 0x13, 0x25, + 0xf3, 0x63, 0xa2, 0x64, 0xde, 0xd4, 0x6d, 0x1c, 0x9c, 0xf6, 0x3b, 0x5a, 0x97, 0x38, 0xfa, 0x09, + 0x73, 0x3d, 0x78, 0x69, 0x76, 0xa8, 0x1e, 0x9d, 0x82, 0x83, 0xda, 0x13, 0xfd, 0x7c, 0xf1, 0x54, + 0x1e, 0x7a, 0x88, 0x76, 0xf2, 0xec, 0x20, 0xac, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0xbf, 0x62, + 0x75, 0x60, 0xb6, 0x05, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type MsgClient interface { + // RegisterTokenPriceQuery registers a new token to track prices for + RegisterTokenPriceQuery(ctx context.Context, in *MsgRegisterTokenPriceQuery, opts ...grpc.CallOption) (*MsgRegisterTokenPriceQueryResponse, error) + // RemoveTokenPriceQuery removes a token from price tracking + RemoveTokenPriceQuery(ctx context.Context, in *MsgRemoveTokenPriceQuery, opts ...grpc.CallOption) (*MsgRemoveTokenPriceQueryResponse, error) + // UpdateParams defines a governance operation for updating the x/icqoracle + // module parameters. The authority is defined in the keeper. + UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) +} + +type msgClient struct { + cc grpc1.ClientConn +} + +func NewMsgClient(cc grpc1.ClientConn) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) RegisterTokenPriceQuery(ctx context.Context, in *MsgRegisterTokenPriceQuery, opts ...grpc.CallOption) (*MsgRegisterTokenPriceQueryResponse, error) { + out := new(MsgRegisterTokenPriceQueryResponse) + err := c.cc.Invoke(ctx, "/stride.icqoracle.Msg/RegisterTokenPriceQuery", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) RemoveTokenPriceQuery(ctx context.Context, in *MsgRemoveTokenPriceQuery, opts ...grpc.CallOption) (*MsgRemoveTokenPriceQueryResponse, error) { + out := new(MsgRemoveTokenPriceQueryResponse) + err := c.cc.Invoke(ctx, "/stride.icqoracle.Msg/RemoveTokenPriceQuery", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { + out := new(MsgUpdateParamsResponse) + err := c.cc.Invoke(ctx, "/stride.icqoracle.Msg/UpdateParams", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +type MsgServer interface { + // RegisterTokenPriceQuery registers a new token to track prices for + RegisterTokenPriceQuery(context.Context, *MsgRegisterTokenPriceQuery) (*MsgRegisterTokenPriceQueryResponse, error) + // RemoveTokenPriceQuery removes a token from price tracking + RemoveTokenPriceQuery(context.Context, *MsgRemoveTokenPriceQuery) (*MsgRemoveTokenPriceQueryResponse, error) + // UpdateParams defines a governance operation for updating the x/icqoracle + // module parameters. The authority is defined in the keeper. + UpdateParams(context.Context, *MsgUpdateParams) (*MsgUpdateParamsResponse, error) +} + +// UnimplementedMsgServer can be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (*UnimplementedMsgServer) RegisterTokenPriceQuery(ctx context.Context, req *MsgRegisterTokenPriceQuery) (*MsgRegisterTokenPriceQueryResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RegisterTokenPriceQuery not implemented") +} +func (*UnimplementedMsgServer) RemoveTokenPriceQuery(ctx context.Context, req *MsgRemoveTokenPriceQuery) (*MsgRemoveTokenPriceQueryResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RemoveTokenPriceQuery not implemented") +} +func (*UnimplementedMsgServer) UpdateParams(ctx context.Context, req *MsgUpdateParams) (*MsgUpdateParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateParams not implemented") +} + +func RegisterMsgServer(s grpc1.Server, srv MsgServer) { + s.RegisterService(&_Msg_serviceDesc, srv) +} + +func _Msg_RegisterTokenPriceQuery_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgRegisterTokenPriceQuery) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).RegisterTokenPriceQuery(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.icqoracle.Msg/RegisterTokenPriceQuery", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).RegisterTokenPriceQuery(ctx, req.(*MsgRegisterTokenPriceQuery)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_RemoveTokenPriceQuery_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgRemoveTokenPriceQuery) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).RemoveTokenPriceQuery(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.icqoracle.Msg/RemoveTokenPriceQuery", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).RemoveTokenPriceQuery(ctx, req.(*MsgRemoveTokenPriceQuery)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateParams) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.icqoracle.Msg/UpdateParams", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) + } + return interceptor(ctx, in, info, handler) +} + +var _Msg_serviceDesc = grpc.ServiceDesc{ + ServiceName: "stride.icqoracle.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "RegisterTokenPriceQuery", + Handler: _Msg_RegisterTokenPriceQuery_Handler, + }, + { + MethodName: "RemoveTokenPriceQuery", + Handler: _Msg_RemoveTokenPriceQuery_Handler, + }, + { + MethodName: "UpdateParams", + Handler: _Msg_UpdateParams_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "stride/icqoracle/tx.proto", +} + +func (m *MsgRegisterTokenPriceQuery) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRegisterTokenPriceQuery) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRegisterTokenPriceQuery) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.OsmosisPoolId != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.OsmosisPoolId)) + i-- + dAtA[i] = 0x30 + } + if len(m.OsmosisQuoteDenom) > 0 { + i -= len(m.OsmosisQuoteDenom) + copy(dAtA[i:], m.OsmosisQuoteDenom) + i = encodeVarintTx(dAtA, i, uint64(len(m.OsmosisQuoteDenom))) + i-- + dAtA[i] = 0x2a + } + if len(m.OsmosisBaseDenom) > 0 { + i -= len(m.OsmosisBaseDenom) + copy(dAtA[i:], m.OsmosisBaseDenom) + i = encodeVarintTx(dAtA, i, uint64(len(m.OsmosisBaseDenom))) + i-- + dAtA[i] = 0x22 + } + if len(m.QuoteDenom) > 0 { + i -= len(m.QuoteDenom) + copy(dAtA[i:], m.QuoteDenom) + i = encodeVarintTx(dAtA, i, uint64(len(m.QuoteDenom))) + i-- + dAtA[i] = 0x1a + } + if len(m.BaseDenom) > 0 { + i -= len(m.BaseDenom) + copy(dAtA[i:], m.BaseDenom) + i = encodeVarintTx(dAtA, i, uint64(len(m.BaseDenom))) + i-- + dAtA[i] = 0x12 + } + if len(m.Admin) > 0 { + i -= len(m.Admin) + copy(dAtA[i:], m.Admin) + i = encodeVarintTx(dAtA, i, uint64(len(m.Admin))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgRegisterTokenPriceQueryResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRegisterTokenPriceQueryResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRegisterTokenPriceQueryResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgRemoveTokenPriceQuery) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRemoveTokenPriceQuery) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRemoveTokenPriceQuery) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.OsmosisPoolId != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.OsmosisPoolId)) + i-- + dAtA[i] = 0x20 + } + if len(m.QuoteDenom) > 0 { + i -= len(m.QuoteDenom) + copy(dAtA[i:], m.QuoteDenom) + i = encodeVarintTx(dAtA, i, uint64(len(m.QuoteDenom))) + i-- + dAtA[i] = 0x1a + } + if len(m.BaseDenom) > 0 { + i -= len(m.BaseDenom) + copy(dAtA[i:], m.BaseDenom) + i = encodeVarintTx(dAtA, i, uint64(len(m.BaseDenom))) + i-- + dAtA[i] = 0x12 + } + if len(m.Admin) > 0 { + i -= len(m.Admin) + copy(dAtA[i:], m.Admin) + i = encodeVarintTx(dAtA, i, uint64(len(m.Admin))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgRemoveTokenPriceQueryResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRemoveTokenPriceQueryResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRemoveTokenPriceQueryResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgUpdateParams) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateParams) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgUpdateParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintTx(dAtA []byte, offset int, v uint64) int { + offset -= sovTx(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MsgRegisterTokenPriceQuery) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Admin) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.BaseDenom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.QuoteDenom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.OsmosisBaseDenom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.OsmosisQuoteDenom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.OsmosisPoolId != 0 { + n += 1 + sovTx(uint64(m.OsmosisPoolId)) + } + return n +} + +func (m *MsgRegisterTokenPriceQueryResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgRemoveTokenPriceQuery) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Admin) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.BaseDenom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.QuoteDenom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.OsmosisPoolId != 0 { + n += 1 + sovTx(uint64(m.OsmosisPoolId)) + } + return n +} + +func (m *MsgRemoveTokenPriceQueryResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgUpdateParams) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Params.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgUpdateParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovTx(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozTx(x uint64) (n int) { + return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MsgRegisterTokenPriceQuery) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRegisterTokenPriceQuery: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRegisterTokenPriceQuery: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Admin", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Admin = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BaseDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BaseDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field QuoteDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.QuoteDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OsmosisBaseDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OsmosisBaseDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OsmosisQuoteDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OsmosisQuoteDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field OsmosisPoolId", wireType) + } + m.OsmosisPoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.OsmosisPoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRegisterTokenPriceQueryResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRegisterTokenPriceQueryResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRegisterTokenPriceQueryResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRemoveTokenPriceQuery) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRemoveTokenPriceQuery: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRemoveTokenPriceQuery: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Admin", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Admin = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BaseDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BaseDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field QuoteDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.QuoteDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field OsmosisPoolId", wireType) + } + m.OsmosisPoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.OsmosisPoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRemoveTokenPriceQueryResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRemoveTokenPriceQueryResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRemoveTokenPriceQueryResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgUpdateParams) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgUpdateParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipTx(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthTx + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupTx + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthTx + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthTx = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTx = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupTx = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/icqoracle/types/validate.go b/x/icqoracle/types/validate.go new file mode 100644 index 00000000000..16219c437ab --- /dev/null +++ b/x/icqoracle/types/validate.go @@ -0,0 +1,31 @@ +package types + +import ( + "errors" +) + +func ValidateTokenPriceQueryParams( + baseDenom string, + quoteDenom string, + osmosisPoolId uint64, + osmosisBaseDenom string, + osmosisQuoteDenom string, +) error { + if baseDenom == "" { + return errors.New("base-denom must be specified") + } + if quoteDenom == "" { + return errors.New("quote-denom must be specified") + } + if osmosisPoolId == 0 { + return errors.New("osmosis-pool-id must be specified") + } + if osmosisBaseDenom == "" { + return errors.New("osmosis-base-denom must be specified") + } + if osmosisQuoteDenom == "" { + return errors.New("osmosis-quote-denom must be specified") + } + + return nil +} diff --git a/x/interchainquery/LICENSE b/x/interchainquery/LICENSE new file mode 100644 index 00000000000..f74f6d35d2d --- /dev/null +++ b/x/interchainquery/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright for interchainquery public infrastructure attributed to 2022 Quicksilver + + 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. \ No newline at end of file diff --git a/x/interchainquery/README.md b/x/interchainquery/README.md new file mode 100644 index 00000000000..44d228c349a --- /dev/null +++ b/x/interchainquery/README.md @@ -0,0 +1,118 @@ +--- +title: "Interchainquery" +excerpt: "" +category: 6392913957c533007128548e +--- + + + +# Interchain Query + +## Abstract + +Stride uses interchain queries and interchain accounts to perform multichain liquid staking. The `interchainquery` module creates a framework that allows other modules to query other appchains using IBC. The `interchainquery` module is used to make bank balance ICQ queries to withdrawal account every N. The callback triggers ICA bank sends for 90% of the rewards to the delegation account and 10% to the stride hostzone revenue account. The ICA bank send logic is in x/stakeibc/keeper/callbacks.go. + +## Contents + +1. **[Concepts](#concepts)** +2. **[State](#state)** +3. **[Events](#events)** +4. **[Keeper](#keeper)** +5. **[Msgs](#msgs)** +6. **[Queries](#queries)** + +## State + +The `interchainquery` module keeps `Query` objects and modifies the information from query to query, as defined in `proto/interchainquery/v1/genesis.proto` + +### InterchainQuery information type + +`Query` has information types that pertain to the query itself. `Query` keeps the following: + +1. `id`: query identification string. +2. `connection_id`: id of the connection between the controller and host chain. +3. `chain_id`: id of the queried chain. +4. `query_type`: type of interchain query (e.g. bank store query) +5. `request_data`: serialized request information (e.g. the address with which to query) +6. `callback_module`: name of the module that will handle the callback +7. `callback_id`: ID for the function that will be called after the response is returned +8. `callback_data`: optional serialized data associated with the callback +9. `timeout_policy`: specifies how to handle a timeout (fail the query, retry the query, or execute the callback with a timeout) +10. `timeout_duration`: the relative time from the current block with which the query should timeout +11. `timeout_timestamp`: the absolute time at which the query times out +12. `request_sent`: boolean indicating whether the query event has been emitted (and can be identified by a relayer) +13. `submission_height`: the light client hight of the queried chain at the time of query submission + + +`DataPoint` has information types that pertain to the data that is queried. `DataPoint` keeps the following: + +1. `id` keeps the identification string of the datapoint +2. `remote_height` keeps the block height of the queried chain +3. `local_height` keeps the block height of the querying chain +4. `value` keeps the bytecode value of the data retrieved by the Query + +## Events + +The `interchainquery` module emits an event at the end of every `stride_epoch`s (e.g. 15 minutes on local testnet). + +The purpose of this event is to send interchainqueries that query data about staking rewards, which Stride uses to reinvest (aka autocompound) staking rewards. + +```go + event := sdk.NewEvent( + sdk.EventTypeMessage, + sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), + sdk.NewAttribute(sdk.AttributeKeyAction, types.AttributeValueQuery), + sdk.NewAttribute(types.AttributeKeyQueryId, queryInfo.Id), + sdk.NewAttribute(types.AttributeKeyChainId, queryInfo.ChainId), + sdk.NewAttribute(types.AttributeKeyConnectionId, queryInfo.ConnectionId), + sdk.NewAttribute(types.AttributeKeyType, queryInfo.QueryType), + sdk.NewAttribute(types.AttributeKeyHeight, "0"), + sdk.NewAttribute(types.AttributeKeyRequest, hex.EncodeToString(queryInfo.Request)), + ) +``` + +## Keeper + +### Keeper Functions + +`interchainquery/keeper/` module provides utility functions to manage ICQs + +```go +// GetQuery returns query +GetQuery(ctx sdk.Context, id string) (types.Query, bool) +// SetQuery set query info +SetQuery(ctx sdk.Context, query types.Query) +// DeleteQuery delete query info +DeleteQuery(ctx sdk.Context, id string) +// IterateQueries iterate through queries +IterateQueries(ctx sdk.Context, fn func(index int64, queryInfo types.Query) (stop bool)) +// AllQueries returns every queryInfo in the store +AllQueries(ctx sdk.Context) []types.Query +``` + +## Msgs + +```protobuf +// SubmitQueryResponse is used to return the query response back to Stride +message MsgSubmitQueryResponse { + string chain_id = 1; + string query_id = 2; + bytes result = 3; + tendermint.crypto.ProofOps proof_ops = 4; + int64 height = 5; + string from_address = 6; +} +``` + +## Queries + +```protobuf +// Query PendingQueries lists all queries that have been requested (i.e. emitted) +// but have not had a response submitted yet +message QueryPendingQueriesRequest {} +``` diff --git a/x/interchainquery/client/cli/query.go b/x/interchainquery/client/cli/query.go new file mode 100644 index 00000000000..ea872161530 --- /dev/null +++ b/x/interchainquery/client/cli/query.go @@ -0,0 +1,69 @@ +package cli + +import ( + "context" + "fmt" + "strings" + + "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" + + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/version" + + "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" +) + +// GetQueryCmd returns the cli query commands for this module. +func GetQueryCmd() *cobra.Command { + // Group lockup queries under a subcommand + cmd := &cobra.Command{ + Use: types.ModuleName, + Short: fmt.Sprintf("Querying commands for the %s module", types.ModuleName), + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + cmd.AddCommand( + GetCmdListPendingQueries(), + ) + + return cmd +} + +// GetCmdQueries provides a list of all pending queries +// (queries that have not have been requested but have not received a response) +func GetCmdListPendingQueries() *cobra.Command { + cmd := &cobra.Command{ + Use: "list-pending-queries", + Short: "Query all pending queries", + Example: strings.TrimSpace( + fmt.Sprintf(`$ %s query interchainquery list-pending-queries`, + version.AppName, + ), + ), + Args: cobra.NoArgs, + RunE: func(cmd *cobra.Command, _ []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryServiceClient(clientCtx) + + req := &types.QueryPendingQueriesRequest{} + + res, err := queryClient.PendingQueries(context.Background(), req) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} diff --git a/x/interchainquery/keeper/abci.go b/x/interchainquery/keeper/abci.go new file mode 100644 index 00000000000..4bfc09a06dc --- /dev/null +++ b/x/interchainquery/keeper/abci.go @@ -0,0 +1,49 @@ +package keeper + +import ( + "encoding/hex" + "fmt" + "time" + + "github.com/cosmos/cosmos-sdk/telemetry" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" +) + +// EndBlocker of interchainquery module +func (k Keeper) EndBlocker(ctx sdk.Context) { + defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyEndBlocker) + + events := sdk.Events{} + for _, query := range k.AllQueries(ctx) { + if query.RequestSent { + continue + } + + k.Logger(ctx).Info(fmt.Sprintf("Interchainquery event emitted %s", query.Id)) + + event := sdk.NewEvent( + sdk.EventTypeMessage, + sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), + sdk.NewAttribute(sdk.AttributeKeyAction, types.AttributeValueQuery), + sdk.NewAttribute(types.AttributeKeyQueryId, query.Id), + sdk.NewAttribute(types.AttributeKeyChainId, query.ChainId), + sdk.NewAttribute(types.AttributeKeyConnectionId, query.ConnectionId), + sdk.NewAttribute(types.AttributeKeyType, query.QueryType), + sdk.NewAttribute(types.AttributeKeyHeight, "0"), + sdk.NewAttribute(types.AttributeKeyRequest, hex.EncodeToString(query.RequestData)), + ) + events = append(events, event) + + event.Type = "query_request" + events = append(events, event) + + query.RequestSent = true + k.SetQuery(ctx, query) + } + + if len(events) > 0 { + ctx.EventManager().EmitEvents(events) + } +} diff --git a/x/interchainquery/keeper/events.go b/x/interchainquery/keeper/events.go new file mode 100644 index 00000000000..9a068cd21a3 --- /dev/null +++ b/x/interchainquery/keeper/events.go @@ -0,0 +1,24 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" +) + +// Emits an event when a ICQ response is submitted +func EmitEventQueryResponse(ctx sdk.Context, query types.Query) { + ctx.EventManager().EmitEvents(sdk.Events{ + sdk.NewEvent( + sdk.EventTypeMessage, + sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), + sdk.NewAttribute(types.AttributeKeyQueryId, query.Id), + ), + sdk.NewEvent( + types.EventTypeQueryResponse, + sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), + sdk.NewAttribute(types.AttributeKeyQueryId, query.Id), + sdk.NewAttribute(types.AttributeKeyChainId, query.ChainId), + ), + }) +} diff --git a/x/interchainquery/keeper/genesis.go b/x/interchainquery/keeper/genesis.go new file mode 100644 index 00000000000..b303ebe31ba --- /dev/null +++ b/x/interchainquery/keeper/genesis.go @@ -0,0 +1,24 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" +) + +// InitGenesis initializes the capability module's state from a provided genesis +// state. +func (k Keeper) InitGenesis(ctx sdk.Context, genState types.GenesisState) { + // set registered zones info from genesis + for _, query := range genState.Queries { + // Initialize empty epoch values via Cosmos SDK + k.SetQuery(ctx, query) + } +} + +// ExportGenesis returns the capability module's exported genesis. +func (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { + return &types.GenesisState{ + Queries: k.AllQueries(ctx), + } +} diff --git a/x/interchainquery/keeper/grpc_query.go b/x/interchainquery/keeper/grpc_query.go new file mode 100644 index 00000000000..85a838adf30 --- /dev/null +++ b/x/interchainquery/keeper/grpc_query.go @@ -0,0 +1,25 @@ +package keeper + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" +) + +var _ types.QueryServiceServer = Keeper{} + +// Queries all queries that have been requested but have not received a response +func (k Keeper) PendingQueries(c context.Context, req *types.QueryPendingQueriesRequest) (*types.QueryPendingQueriesResponse, error) { + ctx := sdk.UnwrapSDKContext(c) + + pendingQueries := []types.Query{} + for _, query := range k.AllQueries(ctx) { + if query.RequestSent { + pendingQueries = append(pendingQueries, query) + } + } + + return &types.QueryPendingQueriesResponse{PendingQueries: pendingQueries}, nil +} diff --git a/x/interchainquery/keeper/keeper.go b/x/interchainquery/keeper/keeper.go new file mode 100644 index 00000000000..a6139b48e7d --- /dev/null +++ b/x/interchainquery/keeper/keeper.go @@ -0,0 +1,103 @@ +package keeper + +import ( + "fmt" + + errorsmod "cosmossdk.io/errors" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + + "cosmossdk.io/log" + storetypes "cosmossdk.io/store/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + connectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" + ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" + + "github.com/osmosis-labs/osmosis/v27/utils" + "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" +) + +// Keeper of this module maintains collections of registered zones. +type Keeper struct { + cdc codec.Codec + storeKey storetypes.StoreKey + callbacks map[string]types.QueryCallbacks + IBCKeeper *ibckeeper.Keeper +} + +// NewKeeper returns a new instance of zones Keeper +func NewKeeper(cdc codec.Codec, storeKey storetypes.StoreKey, ibckeeper *ibckeeper.Keeper) Keeper { + return Keeper{ + cdc: cdc, + storeKey: storeKey, + callbacks: make(map[string]types.QueryCallbacks), + IBCKeeper: ibckeeper, + } +} + +func (k *Keeper) SetCallbackHandler(module string, handler types.QueryCallbacks) error { + _, found := k.callbacks[module] + if found { + return fmt.Errorf("callback handler already set for %s", module) + } + k.callbacks[module] = handler.RegisterICQCallbacks() + return nil +} + +// Logger returns a module-specific logger. +func (k Keeper) Logger(ctx sdk.Context) log.Logger { + return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) +} + +func (k *Keeper) SubmitICQRequest(ctx sdk.Context, query types.Query, forceUnique bool) error { + k.Logger(ctx).Info(utils.LogWithHostZone(query.ChainId, + "Submitting ICQ Request - module=%s, callbackId=%s, connectionId=%s, queryType=%s, timeout_duration=%d", + query.CallbackModule, query.CallbackId, query.ConnectionId, query.QueryType, query.TimeoutDuration)) + + if err := k.ValidateQuery(ctx, query); err != nil { + return err + } + + // Set the timeout using the block time and timeout duration + timeoutTimestamp := utils.IntToUint(ctx.BlockTime().UnixNano() + query.TimeoutDuration.Nanoseconds()) + query.TimeoutTimestamp = timeoutTimestamp + + // Generate and set the query ID - optionally force it to be unique + query.Id = k.GetQueryId(ctx, query, forceUnique) + query.RequestSent = false + + // Set the submission height on the Query to the latest light client height + // In the query response, this will be used to verify that the query wasn't historical + connection, found := k.IBCKeeper.ConnectionKeeper.GetConnection(ctx, query.ConnectionId) + if !found { + return errorsmod.Wrap(connectiontypes.ErrConnectionNotFound, query.ConnectionId) + } + clientState, found := k.IBCKeeper.ClientKeeper.GetClientState(ctx, connection.ClientId) + if !found { + return errorsmod.Wrap(clienttypes.ErrClientNotFound, connection.ClientId) + } + query.SubmissionHeight = clientState.GetLatestHeight().GetRevisionHeight() + + // Save the query to the store + // If the same query is re-requested, it will get replace in the store with an updated TTL + // and the RequestSent bool reset to false + k.SetQuery(ctx, query) + + return nil +} + +// Re-submit an ICQ, generally used after a timeout +func (k *Keeper) RetryICQRequest(ctx sdk.Context, query types.Query) error { + k.Logger(ctx).Info(utils.LogWithHostZone(query.ChainId, + "Queuing ICQ Retry - Query Type: %s, Query ID: %s", query.CallbackId, query.Id)) + + // Delete old query + k.DeleteQuery(ctx, query.Id) + + // Submit a new query (with a new ID) + if err := k.SubmitICQRequest(ctx, query, true); err != nil { + return errorsmod.Wrap(err, types.ErrFailedToRetryQuery.Error()) + } + + return nil +} diff --git a/x/interchainquery/keeper/keeper_test.go b/x/interchainquery/keeper/keeper_test.go new file mode 100644 index 00000000000..4019299b71e --- /dev/null +++ b/x/interchainquery/keeper/keeper_test.go @@ -0,0 +1,32 @@ +package keeper_test + +import ( + "testing" + + "github.com/stretchr/testify/suite" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/interchainquery/keeper" + "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" +) + +type KeeperTestSuite struct { + apptesting.AppTestHelper +} + +func (s *KeeperTestSuite) SetupTest() { + s.Setup() +} + +// Dynamically gets the MsgServer for this module's keeper +// this function must be used so that the MsgServer is always created with the most updated App context +// +// which can change depending on the type of test +// (e.g. tests with only one Stride chain vs tests with multiple chains and IBC support) +func (s *KeeperTestSuite) GetMsgServer() types.MsgServer { + return keeper.NewMsgServerImpl(s.App.InterchainqueryKeeper) +} + +func TestKeeperTestSuite(t *testing.T) { + suite.Run(t, new(KeeperTestSuite)) +} diff --git a/x/interchainquery/keeper/msg_server.go b/x/interchainquery/keeper/msg_server.go new file mode 100644 index 00000000000..daee3af7a27 --- /dev/null +++ b/x/interchainquery/keeper/msg_server.go @@ -0,0 +1,214 @@ +package keeper + +import ( + "context" + "fmt" + "sort" + "strings" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + commitmenttypes "github.com/cosmos/ibc-go/v8/modules/core/23-commitment/types" + "github.com/cosmos/ibc-go/v8/modules/core/exported" + tendermint "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" + ics23 "github.com/cosmos/ics23/go" + "github.com/spf13/cast" + + "github.com/osmosis-labs/osmosis/v27/utils" + "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" +) + +type msgServer struct { + *Keeper +} + +// NewMsgServerImpl returns an implementation of the bank MsgServer interface +// for the provided Keeper. +func NewMsgServerImpl(keeper Keeper) types.MsgServer { + return &msgServer{Keeper: &keeper} +} + +var _ types.MsgServer = msgServer{} + +// check if the query requires proving; if it does, verify it! +func (k Keeper) VerifyKeyProof(ctx sdk.Context, msg *types.MsgSubmitQueryResponse, query types.Query) error { + pathParts := strings.Split(query.QueryType, "/") + + // the query does NOT have an associated proof, so no need to verify it. + if pathParts[len(pathParts)-1] != "key" { + return nil + } + + // If the query is a "key" proof query, verify the results are valid by checking the poof + if msg.ProofOps == nil { + return errorsmod.Wrapf(types.ErrInvalidICQProof, "Unable to validate proof. No proof submitted") + } + + // Get the client consensus state at the height 1 block above the message height + proofHeight, err := cast.ToUint64E(msg.Height) + if err != nil { + return err + } + height := clienttypes.NewHeight(clienttypes.ParseChainID(query.ChainId), proofHeight+1) + + // Confirm the query proof height occurred after the submission height + if proofHeight <= query.SubmissionHeight { + return errorsmod.Wrapf(types.ErrInvalidICQProof, + "Query proof height (%d) is older than the submission height (%d)", proofHeight, query.SubmissionHeight) + } + + // Get the client state and consensus state from the connection Id + connection, found := k.IBCKeeper.ConnectionKeeper.GetConnection(ctx, query.ConnectionId) + if !found { + return errorsmod.Wrapf(types.ErrInvalidICQProof, "ConnectionId %s does not exist", query.ConnectionId) + } + consensusState, found := k.IBCKeeper.ClientKeeper.GetClientConsensusState(ctx, connection.ClientId, height) + if !found { + return errorsmod.Wrapf(types.ErrInvalidICQProof, "Consensus state not found for client %s and height %d", connection.ClientId, height) + } + clientState, found := k.IBCKeeper.ClientKeeper.GetClientState(ctx, connection.ClientId) + if !found { + return errorsmod.Wrapf(types.ErrInvalidICQProof, "Unable to fetch client state for client %s", connection.ClientId) + } + + // Cast the client and consensus state to tendermint type + tendermintConsensusState, ok := consensusState.(*tendermint.ConsensusState) + if !ok { + return errorsmod.Wrapf(types.ErrInvalidICQProof, + "Only tendermint consensus state is supported (%s provided)", consensusState.ClientType()) + } + tendermintClientState, ok := clientState.(*tendermint.ClientState) + if !ok { + return errorsmod.Wrapf(types.ErrInvalidICQProof, + "Only tendermint client state is supported (%s provided)", clientState.ClientType()) + } + var stateRoot exported.Root = tendermintConsensusState.Root + var clientStateProof []*ics23.ProofSpec = tendermintClientState.ProofSpecs + + // Get the merkle path and merkle proof + path := commitmenttypes.NewMerklePath([]string{pathParts[1], string(query.RequestData)}...) + merkleProof, err := commitmenttypes.ConvertProofs(msg.ProofOps) + if err != nil { + return errorsmod.Wrapf(types.ErrInvalidICQProof, "Error converting proofs: %s", err.Error()) + } + + // If we got a non-nil response, verify inclusion proof + if len(msg.Result) != 0 { + if err := merkleProof.VerifyMembership(clientStateProof, stateRoot, path, msg.Result); err != nil { + return errorsmod.Wrapf(types.ErrInvalidICQProof, "Unable to verify membership proof: %s", err.Error()) + } + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(query.ChainId, query.CallbackId, "Inclusion proof validated - QueryId %s", query.Id)) + + } else { + // if we got a nil query response, verify non inclusion proof. + if err := merkleProof.VerifyNonMembership(clientStateProof, stateRoot, path); err != nil { + return errorsmod.Wrapf(types.ErrInvalidICQProof, "Unable to verify non-membership proof: %s", err.Error()) + } + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(query.ChainId, query.CallbackId, "Non-inclusion proof validated - QueryId %s", query.Id)) + } + + return nil +} + +// Handles a query timeout based on the timeout policy +func (k Keeper) HandleQueryTimeout(ctx sdk.Context, msg *types.MsgSubmitQueryResponse, query types.Query) error { + k.Logger(ctx).Error(utils.LogICQCallbackWithHostZone(query.ChainId, query.CallbackId, + "QUERY TIMEOUT - QueryId: %s, TTL: %d, BlockTime: %d", query.Id, query.TimeoutTimestamp, ctx.BlockHeader().Time.UnixNano())) + + switch query.TimeoutPolicy { + case types.TimeoutPolicy_REJECT_QUERY_RESPONSE: + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(query.ChainId, query.CallbackId, "Rejecting query")) + return nil + + case types.TimeoutPolicy_RETRY_QUERY_REQUEST: + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(query.ChainId, query.CallbackId, "Retrying query...")) + return k.RetryICQRequest(ctx, query) + + case types.TimeoutPolicy_EXECUTE_QUERY_CALLBACK: + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(query.ChainId, query.CallbackId, "Executing callback...")) + return k.InvokeCallback(ctx, msg, query) + + default: + return fmt.Errorf("Unsupported query timeout policy: %s", query.TimeoutPolicy.String()) + } +} + +// call the query's associated callback function +func (k Keeper) InvokeCallback(ctx sdk.Context, msg *types.MsgSubmitQueryResponse, query types.Query) error { + // get all the callback handlers and sort them for determinism + // (each module has their own callback handler) + moduleNames := []string{} + for moduleName := range k.callbacks { + moduleNames = append(moduleNames, moduleName) + } + sort.Strings(moduleNames) + + // Loop through each module until the callbackId is found in one of the module handlers + for _, moduleName := range moduleNames { + moduleCallbackHandler := k.callbacks[moduleName] + + // Once the callback is found, invoke the function + if moduleCallbackHandler.HasICQCallback(query.CallbackId) { + if err := moduleCallbackHandler.CallICQCallback(ctx, query.CallbackId, msg.Result, query); err != nil { + k.Logger(ctx).Error(utils.LogICQCallbackWithHostZone(query.ChainId, query.CallbackId, + "Error invoking ICQ callback, error: %s, %s, Query Response: %s", + err.Error(), query.Description(), msg.Result)) + + return err + } + return nil + } + } + + // If no callback was found, return an error + return types.ErrICQCallbackNotFound +} + +// Handle ICQ query responses by validating the proof, and calling the query's corresponding callback +func (k msgServer) SubmitQueryResponse(goCtx context.Context, msg *types.MsgSubmitQueryResponse) (*types.MsgSubmitQueryResponseResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + // check if the response has an associated query stored on stride + query, found := k.GetQuery(ctx, msg.QueryId) + if !found { + k.Logger(ctx).Error("ICQ RESPONSE | Ignoring non-existent query response (note: duplicate responses are nonexistent)") + return &types.MsgSubmitQueryResponseResponse{}, nil // technically this is an error, but will cause the entire tx to fail if we have one 'bad' message, so we can just no-op here. + } + + // Emit an event for the relayer + EmitEventQueryResponse(ctx, query) + + // Verify the response's proof, if one exists + err := k.VerifyKeyProof(ctx, msg, query) + if err != nil { + k.Logger(ctx).Error(utils.LogICQCallbackWithHostZone(query.ChainId, query.CallbackId, + "QUERY PROOF VERIFICATION FAILED - QueryId: %s, Error: %s", query.Id, err.Error())) + return nil, err + } + + // Immediately delete the query so it cannot process again + k.DeleteQuery(ctx, query.Id) + + // If the query is contentless, end + if len(msg.Result) == 0 { + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(query.ChainId, query.CallbackId, + "Query response is contentless - QueryId: %s", query.Id)) + return &types.MsgSubmitQueryResponseResponse{}, nil + } + + // Check if the query has expired (if the block time is greater than the TTL timestamp, the query has expired) + if query.HasTimedOut(ctx.BlockTime()) { + if err := k.HandleQueryTimeout(ctx, msg, query); err != nil { + return nil, err + } + return &types.MsgSubmitQueryResponseResponse{}, nil + } + + // Invoke the query callback (if the query has not timed out) + if err := k.InvokeCallback(ctx, msg, query); err != nil { + return nil, err + } + + return &types.MsgSubmitQueryResponseResponse{}, nil +} diff --git a/x/interchainquery/keeper/msg_submit_query_response_test.go b/x/interchainquery/keeper/msg_submit_query_response_test.go new file mode 100644 index 00000000000..c7de3eff754 --- /dev/null +++ b/x/interchainquery/keeper/msg_submit_query_response_test.go @@ -0,0 +1,224 @@ +package keeper_test + +import ( + "context" + "time" + + "github.com/cometbft/cometbft/proto/tendermint/crypto" + "github.com/cosmos/cosmos-sdk/types/bech32" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/migrations/v3" + _ "github.com/stretchr/testify/suite" + + "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + stakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +const ( + HostChainId = "GAIA" +) + +type MsgSubmitQueryResponseTestCase struct { + validMsg types.MsgSubmitQueryResponse + goCtx context.Context + query types.Query +} + +func (s *KeeperTestSuite) SetupMsgSubmitQueryResponse() MsgSubmitQueryResponseTestCase { + // set up IBC + s.CreateTransferChannel(HostChainId) + + // define the query + goCtx := s.Ctx + h, err := s.App.StakeibcKeeper.GetLightClientHeight(s.Ctx, s.TransferPath.EndpointA.ConnectionID) + s.Require().NoError(err) + height := int64(h - 1) // start at the (LC height) - 1 height, which is the height the query executes at! + result := []byte("result-example") + proofOps := crypto.ProofOps{} + fromAddress := s.TestAccs[0].String() + expectedId := "9792c1d779a3846a8de7ae82f31a74d308b279a521fa9e0d5c4f08917117bf3e" + + _, addr, _ := bech32.DecodeAndConvert(s.TestAccs[0].String()) + data := banktypes.CreateAccountBalancesPrefix(addr) + + timeoutDuration := time.Minute + query := types.Query{ + Id: expectedId, + CallbackId: "withdrawalbalance", + CallbackModule: "stakeibc", + ChainId: HostChainId, + ConnectionId: s.TransferPath.EndpointA.ConnectionID, + QueryType: "store/bank", // intentionally leave off key to skip proof + RequestData: append(data, []byte(HostChainId)...), + TimeoutDuration: timeoutDuration, + TimeoutTimestamp: uint64(s.Ctx.BlockTime().Add(timeoutDuration).UnixNano()), + } + + hostZone := stakeibctypes.HostZone{ + ChainId: HostChainId, + ConnectionId: s.TransferPath.EndpointA.ConnectionID, + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + return MsgSubmitQueryResponseTestCase{ + validMsg: types.MsgSubmitQueryResponse{ + ChainId: HostChainId, + QueryId: expectedId, + Result: result, + ProofOps: &proofOps, + Height: height, + FromAddress: fromAddress, + }, + goCtx: goCtx, + query: query, + } +} + +func (s *KeeperTestSuite) TestMsgSubmitQueryResponse_WrongProof() { + tc := s.SetupMsgSubmitQueryResponse() + + tc.query.QueryType = types.BANK_STORE_QUERY_WITH_PROOF + s.App.InterchainqueryKeeper.SetQuery(s.Ctx, tc.query) + + resp, err := s.GetMsgServer().SubmitQueryResponse(tc.goCtx, &tc.validMsg) + s.Require().ErrorContains(err, "Unable to verify membership proof: proof cannot be empty") + s.Require().Nil(resp) +} + +func (s *KeeperTestSuite) TestMsgSubmitQueryResponse_UnknownId() { + tc := s.SetupMsgSubmitQueryResponse() + + tc.query.Id = tc.query.Id + "INVALID_SUFFIX" // create an invalid query id + s.App.InterchainqueryKeeper.SetQuery(s.Ctx, tc.query) + + resp, err := s.GetMsgServer().SubmitQueryResponse(tc.goCtx, &tc.validMsg) + s.Require().NoError(err) + s.Require().NotNil(resp) + s.Require().Equal(&types.MsgSubmitQueryResponseResponse{}, resp) + + // check that the query is STILL in the store, as it should NOT be deleted because the query was not found + _, found := s.App.InterchainqueryKeeper.GetQuery(s.Ctx, tc.query.Id) + s.Require().True(found) +} + +func (s *KeeperTestSuite) TestMsgSubmitQueryResponse_ProofStale() { + tc := s.SetupMsgSubmitQueryResponse() + + // Set the submission time in the future + tc.query.QueryType = types.BANK_STORE_QUERY_WITH_PROOF + tc.query.SubmissionHeight = 100 + s.App.InterchainqueryKeeper.SetQuery(s.Ctx, tc.query) + + // Attempt to submit the response, it should fail because the response is stale + _, err := s.GetMsgServer().SubmitQueryResponse(tc.goCtx, &tc.validMsg) + s.Require().ErrorContains(err, "Query proof height (15) is older than the submission height (100)") +} + +func (s *KeeperTestSuite) TestMsgSubmitQueryResponse_Timeout_RejectQuery() { + tc := s.SetupMsgSubmitQueryResponse() + + // set timeout to be expired and set the policy to reject + tc.query.TimeoutTimestamp = uint64(1) + tc.query.TimeoutPolicy = types.TimeoutPolicy_REJECT_QUERY_RESPONSE + s.App.InterchainqueryKeeper.SetQuery(s.Ctx, tc.query) + + _, err := s.GetMsgServer().SubmitQueryResponse(tc.goCtx, &tc.validMsg) + s.Require().NoError(err) + + // check that the original query was deleted + _, found := s.App.InterchainqueryKeeper.GetQuery(s.Ctx, tc.query.Id) + s.Require().False(found, "original query should be removed") +} + +func (s *KeeperTestSuite) TestMsgSubmitQueryResponse_Timeout_RetryQuery() { + tc := s.SetupMsgSubmitQueryResponse() + + // set timeout to be expired and set the policy to retry + tc.query.TimeoutTimestamp = uint64(1) + tc.query.TimeoutPolicy = types.TimeoutPolicy_RETRY_QUERY_REQUEST + s.App.InterchainqueryKeeper.SetQuery(s.Ctx, tc.query) + + _, err := s.GetMsgServer().SubmitQueryResponse(tc.goCtx, &tc.validMsg) + s.Require().NoError(err) + + // check that the query original query was deleted, + // but that a new one was created for the retry + _, found := s.App.InterchainqueryKeeper.GetQuery(s.Ctx, tc.query.Id) + s.Require().False(found, "original query should be removed") + + queries := s.App.InterchainqueryKeeper.AllQueries(s.Ctx) + s.Require().Len(queries, 1, "there should be one new query") + + // Confirm original query attributes have not changed + actualQuery := queries[0] + s.Require().NotEqual(tc.query.Id, actualQuery.Id, "query ID") + s.Require().Equal(tc.query.QueryType, actualQuery.QueryType, "query type") + s.Require().Equal(tc.query.ConnectionId, actualQuery.ConnectionId, "query connection ID") + s.Require().Equal(tc.query.CallbackModule, actualQuery.CallbackModule, "query callback module") + s.Require().Equal(tc.query.CallbackData, actualQuery.CallbackData, "cquery allback data") + s.Require().Equal(tc.query.TimeoutPolicy, actualQuery.TimeoutPolicy, "query timeout policy") + s.Require().Equal(tc.query.TimeoutDuration, actualQuery.TimeoutDuration, "query timeout duration") + + // Confirm timeout was reset + expectedTimeoutTimestamp := uint64(s.Ctx.BlockTime().Add(tc.query.TimeoutDuration).UnixNano()) + s.Require().Equal(expectedTimeoutTimestamp, actualQuery.TimeoutTimestamp, "timeout timestamp") + s.Require().Equal(false, actualQuery.RequestSent, "request sent") +} + +func (s *KeeperTestSuite) TestMsgSubmitQueryResponse_Timeout_ExecuteCallback() { + tc := s.SetupMsgSubmitQueryResponse() + + // set timeout to be expired and set the policy to retry + tc.query.TimeoutTimestamp = uint64(1) + tc.query.TimeoutPolicy = types.TimeoutPolicy_EXECUTE_QUERY_CALLBACK + s.App.InterchainqueryKeeper.SetQuery(s.Ctx, tc.query) + + // Rather than testing by executing the callback in its entirety, + // check by invoking without the required mocked state and catching + // the error that's thrown at the start of the callback + _, err := s.GetMsgServer().SubmitQueryResponse(tc.goCtx, &tc.validMsg) + s.Require().ErrorContains(err, "unable to determine balance from query response") +} + +func (s *KeeperTestSuite) TestMsgSubmitQueryResponse_FindAndInvokeCallback() { + tc := s.SetupMsgSubmitQueryResponse() + + s.App.InterchainqueryKeeper.SetQuery(s.Ctx, tc.query) + + // The withdrawal balance test is already covered in it's respective module + // For this test, we just want to check that the callback function is invoked + // To do this, we can just ignore the appropriate withdrawal balance callback + // mocked state, and catch the expected error that happens at the beginning of + // the callback + _, err := s.GetMsgServer().SubmitQueryResponse(tc.goCtx, &tc.validMsg) + s.Require().ErrorContains(err, "unable to determine balance from query response") +} + +// To write this test, we need to write data to Gaia, then get the proof for that data and check it using the LC +// As a first pass, to verify proof checking, we will use an example from Stride integration testing +// // ...down the line, we may want to write tests here that verify the merkle check using proofs from tendermint's proof_test library, https://github.com/cometbft/cometbft/blob/75d51e18f740c7cbfb7d8b4d49182ee6c7f41982/crypto/merkle/proof_test.go +// func (s *KeeperTestSuite) TestMsgSubmitQueryResponse_VerifyProofSuccess() { +// tc := s.SetupMsgSubmitQueryResponse() +// s.App.InterchainqueryKeeper.SetQuery(s.Ctx, tc.query) + +// // set the msgHeight to the light client's height (required to verify retured proofs) +// clientHeight := s.HostChain.GetClientState(s.TransferPath.EndpointA.ClientID).GetLatestHeight().GetRevisionHeight() +// tc.validMsg.Height = int64(clientHeight) +// proofOps := &crypto.ProofOps{ +// Ops: []crypto.ProofOp{ +// { +// Type: "ics23:iavl", +// Key: []uint8{0x2, 0x20, 0x35, 0x2, 0x7c, 0x8f, 0xd9, 0x54, 0xf2, 0x7f, 0xd2, 0xab, 0x34, 0x63, 0xfa, 0x69, 0xff, 0x3b, 0x65, 0xc2, 0x74, 0x33, 0x25, 0x28, 0x1b, 0x43, 0xb, 0xe2, 0x38, 0x26, 0xe1, 0xef, 0x6c, 0xbd, 0x75, 0x61, 0x74, 0x6f, 0x6d}, +// Data: []uint8{0x12, 0xf3, 0x4, 0xa, 0x27, 0x2, 0x20, 0x35, 0x2, 0x7c, 0x8f, 0xd9, 0x54, 0xf2, 0x7f, 0xd2, 0xab, 0x34, 0x63, 0xfa, 0x69, 0xff, 0x3b, 0x65, 0xc2, 0x74, 0x33, 0x25, 0x28, 0x1b, 0x43, 0xb, 0xe2, 0x38, 0x26, 0xe1, 0xef, 0x6c, 0xbd, 0x75, 0x61, 0x74, 0x6f, 0x6d, 0x12, 0x9e, 0x2, 0xa, 0x1b, 0x2, 0x14, 0xf1, 0x82, 0x96, 0x76, 0xdb, 0x57, 0x76, 0x82, 0xe9, 0x44, 0xfc, 0x34, 0x93, 0xd4, 0x51, 0xb6, 0x7f, 0xf3, 0xe2, 0x9f, 0x75, 0x61, 0x74, 0x6f, 0x6d, 0x12, 0x11, 0xa, 0x5, 0x75, 0x61, 0x74, 0x6f, 0x6d, 0x12, 0x8, 0x32, 0x30, 0x38, 0x31, 0x37, 0x31, 0x30, 0x31, 0x1a, 0xc, 0x8, 0x1, 0x18, 0x1, 0x20, 0x1, 0x2a, 0x4, 0x0, 0x2, 0xfe, 0xe, 0x22, 0x2c, 0x8, 0x1, 0x12, 0x5, 0x2, 0x4, 0xfe, 0xe, 0x20, 0x1a, 0x21, 0x20, 0x10, 0x3b, 0x75, 0xc5, 0x32, 0x2a, 0xda, 0x35, 0x9b, 0xce, 0x51, 0x73, 0x19, 0xe2, 0xfd, 0x3f, 0xc6, 0x2f, 0x65, 0x6a, 0x98, 0x40, 0x94, 0xea, 0xf4, 0x43, 0x7, 0xee, 0xa7, 0x8f, 0xe2, 0x89, 0x22, 0x2c, 0x8, 0x1, 0x12, 0x5, 0x4, 0x6, 0xfe, 0xe, 0x20, 0x1a, 0x21, 0x20, 0x49, 0x95, 0xab, 0x6e, 0xaf, 0x5f, 0x7d, 0x9a, 0x6b, 0x63, 0x6f, 0x6e, 0x28, 0xb9, 0x10, 0x74, 0x78, 0xaf, 0x6, 0x5e, 0x43, 0x28, 0xb9, 0xa9, 0xb, 0x1f, 0x9b, 0x68, 0x28, 0x7a, 0x5a, 0x4f, 0x22, 0x2a, 0x8, 0x1, 0x12, 0x26, 0x6, 0xa, 0xfe, 0xe, 0x20, 0xb3, 0xac, 0xd0, 0xfa, 0x6a, 0xc4, 0x34, 0xc2, 0xf1, 0xc4, 0x96, 0x58, 0x97, 0xf0, 0x16, 0x67, 0x12, 0x12, 0x2, 0x6, 0x2f, 0x5b, 0x62, 0xe5, 0x21, 0x69, 0xc1, 0xd2, 0xa6, 0x95, 0xd6, 0x1f, 0x20, 0x22, 0x2a, 0x8, 0x1, 0x12, 0x26, 0x8, 0x10, 0xfe, 0xe, 0x20, 0xad, 0x66, 0xbf, 0x41, 0x79, 0x42, 0xff, 0xaf, 0x5f, 0x19, 0xf1, 0x71, 0x6e, 0x78, 0xf8, 0xdf, 0x23, 0x70, 0xa7, 0xc1, 0x18, 0x75, 0xfa, 0x74, 0x4, 0xe, 0x98, 0x77, 0x53, 0xd2, 0x27, 0xfd, 0x20, 0x22, 0x2a, 0x8, 0x1, 0x12, 0x26, 0xa, 0x1c, 0xfe, 0xe, 0x20, 0x11, 0x72, 0x36, 0x3c, 0x39, 0x41, 0xcf, 0xfb, 0x67, 0x6, 0xdd, 0xf5, 0xbd, 0x54, 0x6, 0xf5, 0xb4, 0x87, 0x54, 0xdd, 0xf6, 0xf9, 0x4c, 0x13, 0x58, 0x1e, 0x71, 0x2c, 0xbe, 0x4e, 0xde, 0xf5, 0x20, 0x1a, 0xa6, 0x2, 0xa, 0x27, 0x2, 0x20, 0x81, 0x35, 0x1f, 0xa5, 0x39, 0x67, 0x33, 0xc6, 0xb1, 0x9f, 0x65, 0xd5, 0xf4, 0xea, 0x11, 0x3f, 0x8d, 0x72, 0x98, 0x1e, 0x54, 0xe2, 0x98, 0x13, 0x53, 0x52, 0x7, 0x4b, 0xef, 0x5c, 0x54, 0x5, 0x75, 0x61, 0x74, 0x6f, 0x6d, 0x12, 0xf, 0xa, 0x5, 0x75, 0x61, 0x74, 0x6f, 0x6d, 0x12, 0x6, 0x32, 0x32, 0x35, 0x39, 0x37, 0x31, 0x1a, 0xc, 0x8, 0x1, 0x18, 0x1, 0x20, 0x1, 0x2a, 0x4, 0x0, 0x2, 0xd4, 0xe, 0x22, 0x2a, 0x8, 0x1, 0x12, 0x26, 0x2, 0x4, 0xfe, 0xe, 0x20, 0xdb, 0xc8, 0xb, 0xe4, 0x68, 0x4f, 0x87, 0xf1, 0x1d, 0x9d, 0xf0, 0x98, 0xe3, 0x44, 0x8b, 0x4c, 0x38, 0xe7, 0x8a, 0x92, 0x34, 0xa9, 0xd8, 0x5d, 0xaa, 0x6f, 0x54, 0x9d, 0xa2, 0x57, 0x1b, 0x83, 0x20, 0x22, 0x2c, 0x8, 0x1, 0x12, 0x5, 0x4, 0x6, 0xfe, 0xe, 0x20, 0x1a, 0x21, 0x20, 0x49, 0x95, 0xab, 0x6e, 0xaf, 0x5f, 0x7d, 0x9a, 0x6b, 0x63, 0x6f, 0x6e, 0x28, 0xb9, 0x10, 0x74, 0x78, 0xaf, 0x6, 0x5e, 0x43, 0x28, 0xb9, 0xa9, 0xb, 0x1f, 0x9b, 0x68, 0x28, 0x7a, 0x5a, 0x4f, 0x22, 0x2a, 0x8, 0x1, 0x12, 0x26, 0x6, 0xa, 0xfe, 0xe, 0x20, 0xb3, 0xac, 0xd0, 0xfa, 0x6a, 0xc4, 0x34, 0xc2, 0xf1, 0xc4, 0x96, 0x58, 0x97, 0xf0, 0x16, 0x67, 0x12, 0x12, 0x2, 0x6, 0x2f, 0x5b, 0x62, 0xe5, 0x21, 0x69, 0xc1, 0xd2, 0xa6, 0x95, 0xd6, 0x1f, 0x20, 0x22, 0x2a, 0x8, 0x1, 0x12, 0x26, 0x8, 0x10, 0xfe, 0xe, 0x20, 0xad, 0x66, 0xbf, 0x41, 0x79, 0x42, 0xff, 0xaf, 0x5f, 0x19, 0xf1, 0x71, 0x6e, 0x78, 0xf8, 0xdf, 0x23, 0x70, 0xa7, 0xc1, 0x18, 0x75, 0xfa, 0x74, 0x4, 0xe, 0x98, 0x77, 0x53, 0xd2, 0x27, 0xfd, 0x20, 0x22, 0x2a, 0x8, 0x1, 0x12, 0x26, 0xa, 0x1c, 0xfe, 0xe, 0x20, 0x11, 0x72, 0x36, 0x3c, 0x39, 0x41, 0xcf, 0xfb, 0x67, 0x6, 0xdd, 0xf5, 0xbd, 0x54, 0x6, 0xf5, 0xb4, 0x87, 0x54, 0xdd, 0xf6, 0xf9, 0x4c, 0x13, 0x58, 0x1e, 0x71, 0x2c, 0xbe, 0x4e, 0xde, 0xf5, 0x20}, +// }, +// { +// Type: "ics23:simple", +// Key: []uint8{0x62, 0x61, 0x6e, 0x6b}, +// Data: []uint8{0xa, 0xfe, 0x1, 0xa, 0x4, 0x62, 0x61, 0x6e, 0x6b, 0x12, 0x20, 0x2e, 0x83, 0x16, 0x8, 0x2, 0xd7, 0x8f, 0x89, 0xba, 0xe4, 0xd4, 0x2, 0xcc, 0xbb, 0xc2, 0xe9, 0xc1, 0x86, 0xd4, 0x34, 0x5a, 0xbb, 0xaa, 0xba, 0x21, 0x5c, 0xdf, 0x9b, 0x34, 0x56, 0xe, 0x99, 0x1a, 0x9, 0x8, 0x1, 0x18, 0x1, 0x20, 0x1, 0x2a, 0x1, 0x0, 0x22, 0x27, 0x8, 0x1, 0x12, 0x1, 0x1, 0x1a, 0x20, 0x3d, 0x3d, 0xe1, 0xf9, 0x9b, 0x9d, 0x2c, 0xd, 0x80, 0x30, 0xe6, 0xf8, 0x2a, 0x5a, 0xe6, 0x22, 0x24, 0x3e, 0xdb, 0xd4, 0x32, 0x49, 0x7e, 0x29, 0xf2, 0x74, 0xef, 0xba, 0x91, 0xac, 0xd0, 0xc6, 0x22, 0x25, 0x8, 0x1, 0x12, 0x21, 0x1, 0xd2, 0x48, 0xfd, 0x48, 0x62, 0x63, 0xef, 0xcb, 0xa9, 0x4b, 0xfd, 0x8b, 0x59, 0xf1, 0x5f, 0x34, 0x11, 0x11, 0x43, 0x9a, 0xe9, 0x6c, 0x60, 0xe0, 0x4f, 0x2b, 0xab, 0xff, 0xff, 0x3d, 0x90, 0x2a, 0x22, 0x27, 0x8, 0x1, 0x12, 0x1, 0x1, 0x1a, 0x20, 0xae, 0xc4, 0xd4, 0x4a, 0x49, 0x72, 0x6e, 0xd9, 0xc, 0xb1, 0xea, 0x9c, 0x36, 0xd3, 0x61, 0xd9, 0x99, 0x1e, 0xf9, 0xfb, 0xfe, 0x7, 0xd, 0xaa, 0x9f, 0x7f, 0xb3, 0x60, 0x17, 0x21, 0xf6, 0x5, 0x22, 0x27, 0x8, 0x1, 0x12, 0x1, 0x1, 0x1a, 0x20, 0xf6, 0x20, 0x2c, 0x8d, 0xd7, 0xb1, 0x34, 0x4b, 0xc4, 0xb0, 0x4e, 0xc4, 0xeb, 0x4, 0x5b, 0x3, 0x7c, 0xe4, 0x4d, 0xa4, 0xb, 0x14, 0xc3, 0x54, 0x1f, 0x56, 0x3c, 0x19, 0xea, 0xd6, 0xa5, 0xe3, 0x22, 0x27, 0x8, 0x1, 0x12, 0x1, 0x1, 0x1a, 0x20, 0xe1, 0xd4, 0xef, 0x74, 0x6a, 0xa8, 0x28, 0x16, 0x6a, 0xc1, 0xa6, 0xfe, 0x9f, 0x2e, 0xde, 0x2c, 0x46, 0xd6, 0x13, 0x58, 0x73, 0x63, 0x8c, 0x9f, 0x1b, 0xec, 0xb5, 0x97, 0xe7, 0xe0, 0xbe, 0x23}, +// }, +// }, +// } + +// tc.validMsg.ProofOps = proofOps +// err := s.App.InterchainqueryKeeper.VerifyKeyProof(s.Ctx, &tc.validMsg, tc.query) +// s.Require().NoError(err) +// } diff --git a/x/interchainquery/keeper/queries.go b/x/interchainquery/keeper/queries.go new file mode 100644 index 00000000000..5e8004dd811 --- /dev/null +++ b/x/interchainquery/keeper/queries.go @@ -0,0 +1,181 @@ +package keeper + +import ( + "encoding/binary" + "fmt" + "strings" + "time" + + sdkmath "cosmossdk.io/math" + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + connectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" + + errorsmod "cosmossdk.io/errors" + "cosmossdk.io/store/prefix" + "github.com/cometbft/cometbft/crypto" + "github.com/cosmos/cosmos-sdk/codec" + + "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" +) + +// Generates a query ID based on the request information +// If forceUnique is false, queries of the same request type will have the same query ID +// (e.g. "query the ATOM balance of address X", will always have the same query ID) +// If forceUnique is true, a unique ID will be used for the query +func (k Keeper) GetQueryId(ctx sdk.Context, query types.Query, forceUnique bool) string { + // If forceUnique is true, grab and append the unique query UID + var queryKey []byte + if forceUnique { + queryKey = k.GetQueryUID(ctx) + } else { + queryKey = append([]byte(query.CallbackModule+query.ConnectionId+query.ChainId+query.QueryType+query.CallbackId), query.RequestData...) + } + return fmt.Sprintf("%x", crypto.Sha256(queryKey)) +} + +// ValidateQuery validates that all the required attributes of a query are supplied when submitting an ICQ +func (k Keeper) ValidateQuery(ctx sdk.Context, query types.Query) error { + if query.ChainId == "" { + return errorsmod.Wrapf(types.ErrInvalidICQRequest, "chain-id cannot be empty") + } + if query.ConnectionId == "" { + return errorsmod.Wrapf(types.ErrInvalidICQRequest, "connection-id cannot be empty") + } + if !strings.HasPrefix(query.ConnectionId, connectiontypes.ConnectionPrefix) { + return errorsmod.Wrapf(types.ErrInvalidICQRequest, "invalid connection-id (%s)", query.ConnectionId) + } + if query.QueryType == "" { + return errorsmod.Wrapf(types.ErrInvalidICQRequest, "query type cannot be empty") + } + if query.CallbackModule == "" { + return errorsmod.Wrapf(types.ErrInvalidICQRequest, "callback module must be specified") + } + if query.CallbackId == "" { + return errorsmod.Wrapf(types.ErrInvalidICQRequest, "callback-id cannot be empty") + } + if query.TimeoutDuration == time.Duration(0) { + return errorsmod.Wrapf(types.ErrInvalidICQRequest, "timeout duration must be set") + } + if _, exists := k.callbacks[query.CallbackModule]; !exists { + return errorsmod.Wrapf(types.ErrInvalidICQRequest, "no callback handler registered for module (%s)", query.CallbackModule) + } + if exists := k.callbacks[query.CallbackModule].HasICQCallback(query.CallbackId); !exists { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "callback-id (%s) is not registered for module (%s)", query.CallbackId, query.CallbackModule) + } + + return nil +} + +// GetQuery returns query +func (k Keeper) GetQuery(ctx sdk.Context, id string) (types.Query, bool) { + query := types.Query{} + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefixQuery) + bz := store.Get([]byte(id)) + if len(bz) == 0 { + return query, false + } + k.cdc.MustUnmarshal(bz, &query) + return query, true +} + +// SetQuery set query info +func (k Keeper) SetQuery(ctx sdk.Context, query types.Query) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefixQuery) + bz := k.cdc.MustMarshal(&query) + store.Set([]byte(query.Id), bz) +} + +// DeleteQuery delete query info +func (k Keeper) DeleteQuery(ctx sdk.Context, id string) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefixQuery) + store.Delete([]byte(id)) +} + +// To optionally force queries to be unique, a UID can be supplied when building the query Id +// This is implemented using a counter that increments every time a UID is retrieved +// The uid is returned as a byte array since it's appended to the serialized query key +func (k Keeper) GetQueryUID(ctx sdk.Context) []byte { + store := ctx.KVStore(k.storeKey) + uidBz := store.Get(types.KeyQueryCounter) + + // Initialize the UID if there is nothing in the store yet + if len(uidBz) == 0 { + uidBz = make([]byte, 8) + binary.BigEndian.PutUint64(uidBz, 1) + } + uid := binary.BigEndian.Uint64(uidBz) + + // Increment and store the next UID + nextUidBz := make([]byte, 8) + binary.BigEndian.PutUint64(nextUidBz, uid+1) + store.Set(types.KeyQueryCounter, nextUidBz) + + // Return the serialized uid + return uidBz +} + +// IterateQueries iterate through queries +func (k Keeper) IterateQueries(ctx sdk.Context, fn func(index int64, queryInfo types.Query) (stop bool)) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefixQuery) + iterator := storetypes.KVStorePrefixIterator(store, nil) + defer iterator.Close() + + i := int64(0) + for ; iterator.Valid(); iterator.Next() { + query := types.Query{} + k.cdc.MustUnmarshal(iterator.Value(), &query) + stop := fn(i, query) + + if stop { + break + } + i++ + } +} + +// AllQueries returns every queryInfo in the store +func (k Keeper) AllQueries(ctx sdk.Context) []types.Query { + queries := []types.Query{} + k.IterateQueries(ctx, func(_ int64, queryInfo types.Query) (stop bool) { + queries = append(queries, queryInfo) + return false + }) + return queries +} + +// Helper function to unmarshal a Balance query response across SDK versions +// Before SDK v46, the query response returned a sdk.Coin type. SDK v46 returns an int type +// https://github.com/cosmos/cosmos-sdk/pull/9832 +func UnmarshalAmountFromBalanceQuery(cdc codec.BinaryCodec, queryResponseBz []byte) (amount sdkmath.Int, err error) { + // An nil should not be possible, exit immediately if it occurs + if queryResponseBz == nil { + return sdkmath.Int{}, errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "query response is nil") + } + + // If the query response is empty, that means the account was never registed (and thus has a 0 balance) + if len(queryResponseBz) == 0 { + return sdkmath.ZeroInt(), nil + } + + // First attempt to unmarshal as an Int (for SDK v46+) + // If the result was serialized as a `Coin` type, it should contain a string (representing the denom) + // which will cause the unmarshalling to throw an error + intError := amount.Unmarshal(queryResponseBz) + if intError == nil { + return amount, nil + } + + // If the Int unmarshaling was unsuccessful, attempt again using a Coin type (for SDK v45 and below) + // If successful, return the amount field from the coin (if the coin is not nil) + var coin sdk.Coin + coinError := cdc.Unmarshal(queryResponseBz, &coin) + if coinError == nil { + return coin.Amount, nil + } + + // If it failed unmarshaling with either data structure, return an error with the failure messages combined + return sdkmath.Int{}, errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, + "unable to unmarshal balance query response %v as sdkmath.Int (err: %s) or sdk.Coin (err: %s)", queryResponseBz, intError.Error(), coinError.Error()) +} diff --git a/x/interchainquery/keeper/queries_test.go b/x/interchainquery/keeper/queries_test.go new file mode 100644 index 00000000000..80a61fb4a83 --- /dev/null +++ b/x/interchainquery/keeper/queries_test.go @@ -0,0 +1,342 @@ +package keeper_test + +import ( + "encoding/binary" + "testing" + "time" + + sdkmath "cosmossdk.io/math" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/app" + "github.com/osmosis-labs/osmosis/v27/x/interchainquery/keeper" + "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + stakeibckeeper "github.com/osmosis-labs/osmosis/v27/x/stakeibc/keeper" + stakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func (s *KeeperTestSuite) TestGetQueryId() { + // chain Id of the target chain you're querying + chainId := "GAIA" + // connectionId of the target chain you're querying + connectionId := "connection-0" + // QueryType is a string that is used to identify the store you'd like to query, as well as whether you'd like a proof returned alongside the result + // use "staking" store to access validator which lives in the staking module + // use "key" suffix to retrieve a proof alongside the query result + queryType := types.STAKING_STORE_QUERY_WITH_PROOF + // requestData is a byte array that points to the entry in the target store you'd like to query on the host zone + // e.g. for querying a validator, `data := stakingtypes.GetValidatorKey(valAddr)` + requestData := []byte{0x01, 0x02, 0x03} + // module is the name of the module invoking the query, used to find the callback upon response + module := "stakeibc" + // callbackId is a string that is used to identify the callback you'd like to execute upon receiving the result of the query + callbackId := "validator" + // timeout is the expiry time of the query, in absolute units of time, unix nanos + timeoutTimestamp := uint64(100) // timeout + + // note: the queryID is a has of (module, callbackId, chainId, connectionId, queryType, and request) + // . meaning for a given query type, the ID will be identical across each epoch + expectedQueryId := "e97f7bdad3c4c521165321f78a8329c54f35db23ee9cec7bddf5c60703ac9ba7" + expectedUniqueQueryId := "cd2662154e6d76b2b2b92e70c0cac3ccf534f9b74eb5b89819ec509083d00a50" + + query := types.Query{ + ChainId: chainId, + ConnectionId: connectionId, + QueryType: queryType, + RequestData: requestData, + CallbackModule: module, + CallbackId: callbackId, + TimeoutTimestamp: timeoutTimestamp, + } + + queryId := s.App.InterchainqueryKeeper.GetQueryId(s.Ctx, query, false) + uniqueQueryId := s.App.InterchainqueryKeeper.GetQueryId(s.Ctx, query, true) + + s.Require().Equal(expectedQueryId, queryId, "query ID") + s.Require().Equal(expectedUniqueQueryId, uniqueQueryId, "unique query ID") +} + +func (s *KeeperTestSuite) TestValidateQuery() { + validChainId := "chain-0" + validConnectionId := "connection-0" + validQueryType := "store/key/query" + validTimeout := time.Duration(10) + + s.Ctx = s.Ctx.WithBlockTime(time.Unix(0, 0)) // unix 0 + + // We'll borrow a callback from stakeibc since it's should be already registered in the App + validCallbackModule := stakeibctypes.ModuleName + validCallbackId := stakeibckeeper.ICQCallbackID_Delegation + + testCases := []struct { + name string + query types.Query + expectedError string + }{ + { + name: "valid query", + query: types.Query{ + ChainId: validChainId, + ConnectionId: validConnectionId, + QueryType: validQueryType, + CallbackModule: validCallbackModule, + CallbackId: validCallbackId, + TimeoutDuration: validTimeout, + }, + }, + { + name: "missing chain id", + query: types.Query{ + ChainId: "", + ConnectionId: validConnectionId, + QueryType: validQueryType, + CallbackModule: validCallbackModule, + CallbackId: validCallbackId, + TimeoutDuration: validTimeout, + }, + expectedError: "chain-id cannot be empty", + }, + { + name: "missing connection id", + query: types.Query{ + ChainId: validChainId, + ConnectionId: "", + QueryType: validQueryType, + CallbackModule: validCallbackModule, + CallbackId: validCallbackId, + TimeoutDuration: validTimeout, + }, + expectedError: "connection-id cannot be empty", + }, + { + name: "invalid connection id", + query: types.Query{ + ChainId: validChainId, + ConnectionId: "connection", + QueryType: validQueryType, + CallbackModule: validCallbackModule, + CallbackId: validCallbackId, + TimeoutDuration: validTimeout, + }, + expectedError: "invalid connection-id (connection)", + }, + { + name: "invalid query type", + query: types.Query{ + ChainId: validChainId, + ConnectionId: validConnectionId, + QueryType: "", + CallbackModule: validCallbackModule, + CallbackId: validCallbackId, + TimeoutDuration: validTimeout, + }, + expectedError: "query type cannot be empty", + }, + { + name: "missing callback module", + query: types.Query{ + ChainId: validChainId, + ConnectionId: validConnectionId, + QueryType: validQueryType, + CallbackModule: "", + CallbackId: validCallbackId, + TimeoutDuration: validTimeout, + }, + expectedError: "callback module must be specified", + }, + { + name: "missing callback-id", + query: types.Query{ + ChainId: validChainId, + ConnectionId: validConnectionId, + QueryType: validQueryType, + CallbackModule: validCallbackModule, + CallbackId: "", + TimeoutDuration: validTimeout, + }, + expectedError: "callback-id cannot be empty", + }, + { + name: "invalid timeout duration", + query: types.Query{ + ChainId: validChainId, + ConnectionId: validConnectionId, + QueryType: validQueryType, + CallbackModule: validCallbackModule, + CallbackId: validCallbackId, + TimeoutDuration: time.Duration(0), + }, + expectedError: "timeout duration must be set", + }, + { + name: "module not registered", + query: types.Query{ + ChainId: validChainId, + ConnectionId: validConnectionId, + QueryType: validQueryType, + CallbackModule: "fake-module", + CallbackId: validCallbackId, + TimeoutDuration: validTimeout, + }, + expectedError: "no callback handler registered for module (fake-module)", + }, + { + name: "callback not registered", + query: types.Query{ + ChainId: validChainId, + ConnectionId: validConnectionId, + QueryType: validQueryType, + CallbackModule: validCallbackModule, + CallbackId: "fake-callback", + TimeoutDuration: validTimeout, + }, + expectedError: "callback-id (fake-callback) is not registered for module (stakeibc)", + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + actualError := s.App.InterchainqueryKeeper.ValidateQuery(s.Ctx, tc.query) + if tc.expectedError == "" { + s.Require().NoError(actualError) + } else { + s.Require().ErrorContains(actualError, tc.expectedError) + } + }) + } +} + +func (s *KeeperTestSuite) GetQueryUID() { + // Helper function to get the next uid + getUniqueSuffix := func() int { + return int(binary.BigEndian.Uint64(s.App.InterchainqueryKeeper.GetQueryUID(s.Ctx))) + } + + // Grabbing the uid for the first time should return 1 + s.Require().Equal(1, getUniqueSuffix()) + + // Grabbing it a second time should return 2 + s.Require().Equal(2, getUniqueSuffix()) + + // call it 1000 more times + var suffix int + for i := 0; i < 1000; i++ { + suffix = getUniqueSuffix() + } + s.Require().Equal(1002, suffix) +} + +func TestUnmarshalAmountFromBalanceQuery(t *testing.T) { + type InputType int64 + const ( + rawBytes InputType = iota + coinType + intType + ) + + testCases := []struct { + name string + inputType InputType + raw []byte + coin sdk.Coin + integer sdkmath.Int + expectedAmount sdkmath.Int + expectedError string + }{ + { + name: "full_coin", + inputType: coinType, + coin: sdk.Coin{Denom: "denom", Amount: sdkmath.NewInt(50)}, + expectedAmount: sdkmath.NewInt(50), + }, + { + name: "coin_no_denom", + inputType: coinType, + coin: sdk.Coin{Amount: sdkmath.NewInt(60)}, + expectedAmount: sdkmath.NewInt(60), + }, + { + name: "coin_no_amount", + inputType: coinType, + coin: sdk.Coin{Denom: "denom"}, + expectedAmount: sdkmath.NewInt(0), + }, + { + name: "zero_coin", + inputType: coinType, + coin: sdk.Coin{Amount: sdkmath.NewInt(0)}, + expectedAmount: sdkmath.NewInt(0), + }, + { + name: "empty_coin", + inputType: coinType, + coin: sdk.Coin{}, + expectedAmount: sdkmath.NewInt(0), + }, + { + name: "positive_int", + inputType: intType, + integer: sdkmath.NewInt(20), + expectedAmount: sdkmath.NewInt(20), + }, + { + name: "zero_int", + inputType: intType, + integer: sdkmath.NewInt(0), + expectedAmount: sdkmath.NewInt(0), + }, + { + name: "empty_int", + inputType: intType, + integer: sdkmath.Int{}, + expectedAmount: sdkmath.NewInt(0), + }, + { + name: "empty_bytes", + inputType: rawBytes, + raw: []byte{}, + expectedAmount: sdkmath.NewInt(0), + }, + { + name: "invalid_bytes", + inputType: rawBytes, + raw: []byte{1, 2}, + expectedError: "unable to unmarshal balance query response", + }, + { + name: "nil_bytes", + inputType: rawBytes, + raw: nil, + expectedError: "query response is nil", + }, + } + + encoding := app.MakeEncodingConfig() + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + var args []byte + var err error + switch tc.inputType { + case rawBytes: + args = tc.raw + case coinType: + args, err = tc.coin.Marshal() + case intType: + args, err = tc.integer.Marshal() + } + require.NoError(t, err) + + if tc.expectedError == "" { + actualAmount, err := keeper.UnmarshalAmountFromBalanceQuery(encoding.Codec, args) + require.NoError(t, err) + require.Equal(t, tc.expectedAmount.Int64(), actualAmount.Int64()) + } else { + _, err := keeper.UnmarshalAmountFromBalanceQuery(encoding.Codec, args) + require.ErrorContains(t, err, tc.expectedError) + } + }) + } +} diff --git a/x/interchainquery/module.go b/x/interchainquery/module.go new file mode 100644 index 00000000000..0f9e83eb0dd --- /dev/null +++ b/x/interchainquery/module.go @@ -0,0 +1,197 @@ +package interchainquery + +import ( + "context" + "encoding/json" + "math/rand" + + "cosmossdk.io/core/appmodule" + simtypes "github.com/cosmos/cosmos-sdk/types/simulation" + + "github.com/gorilla/mux" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + + "github.com/osmosis-labs/osmosis/v27/x/interchainquery/keeper" + + "github.com/osmosis-labs/osmosis/v27/x/interchainquery/client/cli" + "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" +) + +var ( + _ module.AppModuleBasic = AppModuleBasic{} + _ module.HasGenesisBasics = AppModuleBasic{} + + _ appmodule.AppModule = AppModule{} + _ appmodule.HasEndBlocker = AppModule{} + + _ module.HasConsensusVersion = AppModule{} + _ module.HasGenesis = AppModule{} + _ module.HasServices = AppModule{} +) + +// ---------------------------------------------------------------------------- +// AppModuleBasic +// ---------------------------------------------------------------------------- + +// AppModuleBasic implements the AppModuleBasic interface for the capability module. +type AppModuleBasic struct { + cdc codec.Codec +} + +// NewAppModuleBasic return a new AppModuleBasic +func NewAppModuleBasic(cdc codec.Codec) AppModuleBasic { + return AppModuleBasic{cdc: cdc} +} + +// Name returns the capability module's name. +func (AppModuleBasic) Name() string { + return types.ModuleName +} + +// RegisterCodec registers a legacy amino codec +func (AppModuleBasic) RegisterCodec(cdc *codec.LegacyAmino) { + types.RegisterLegacyAminoCodec(cdc) +} + +// RegisterLegacyAminoCodec registers a legacy amino codec +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + types.RegisterLegacyAminoCodec(cdc) +} + +// RegisterInterfaces registers the module's interface types +func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { + // RegisterInterfaces registers interfaces and implementations of the bank module. + types.RegisterInterfaces(reg) +} + +// DefaultGenesis returns the capability module's default genesis state. +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return nil +} + +// ValidateGenesis performs genesis state validation for the capability module. +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { + return nil +} + +// RegisterRESTRoutes registers the capability module's REST service handlers. +func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Router) {} + +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { + err := types.RegisterQueryServiceHandlerClient(context.Background(), mux, types.NewQueryServiceClient(clientCtx)) + if err != nil { + panic(err) + } +} + +// GetTxCmd returns the capability module's root tx command. +func (a AppModuleBasic) GetTxCmd() *cobra.Command { + return nil +} + +// GetQueryCmd returns the capability module's root query command. +func (AppModuleBasic) GetQueryCmd() *cobra.Command { + return cli.GetQueryCmd() +} + +// ---------------------------------------------------------------------------- +// AppModule +// ---------------------------------------------------------------------------- + +// AppModule implements the AppModule interface for the capability module. +type AppModule struct { + AppModuleBasic + keeper keeper.Keeper +} + +// NewAppModule return a new AppModule +func NewAppModule(cdc codec.Codec, keeper keeper.Keeper) AppModule { + return AppModule{ + AppModuleBasic: NewAppModuleBasic(cdc), + keeper: keeper, + } +} + +// Name returns the capability module's name. +func (am AppModule) Name() string { + return am.AppModuleBasic.Name() +} + +// QuerierRoute returns the capability module's query routing key. +func (AppModule) QuerierRoute() string { return types.QuerierRoute } + +// RegisterServices registers a GRPC query service to respond to the +// module-specific GRPC queries. +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) + types.RegisterQueryServiceServer(cfg.QueryServer(), am.keeper) +} + +// RegisterInvariants registers the capability module's invariants. +func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} + +// InitGenesis performs the capability module's genesis initialization +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) { + var genState types.GenesisState + cdc.MustUnmarshalJSON(gs, &genState) + am.keeper.InitGenesis(ctx, genState) +} + +// ExportGenesis returns the capability module's exported genesis state as raw JSON bytes. +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + genState := am.keeper.ExportGenesis(ctx) + return cdc.MustMarshalJSON(genState) +} + +// EndBlock executes all ABCI EndBlock logic respective to the capability module. It +// returns no validator updates. +func (am AppModule) EndBlock(context context.Context) error { + ctx := sdk.UnwrapSDKContext(context) + am.keeper.EndBlocker(ctx) + return nil +} + +// ___________________________________________________________________________ + +// AppModuleSimulation functions + +// GenerateGenesisState creates a randomized GenState of the pool-incentives module. +func (AppModule) GenerateGenesisState(simState *module.SimulationState) { + // simulation.RandomizedGenState(simState) +} + +// ProposalContents doesn't return any content functions for governance proposals. +func (AppModule) ProposalContents(simState module.SimulationState) []simtypes.WeightedProposalMsg { + return nil +} + +// RandomizedParams creates randomized pool-incentives param changes for the simulator. +func (AppModule) RandomizedParams(r *rand.Rand) []simtypes.LegacyParamChange { + return nil +} + +// RegisterStoreDecoder registers a decoder for supply module's types +func (am AppModule) RegisterStoreDecoder(sdr simtypes.StoreDecoderRegistry) { +} + +// WeightedOperations returns the all the gov module operations with their respective weights. +func (am AppModule) WeightedOperations(simState module.SimulationState) []simtypes.WeightedOperation { + return nil // TODO +} + +// ConsensusVersion implements AppModule/ConsensusVersion. +func (AppModule) ConsensusVersion() uint64 { return 1 } + +// IsOnePerModuleType implements the depinject.OnePerModuleType interface. +func (am AppModule) IsOnePerModuleType() {} + +// IsAppModule implements the appmodule.AppModule interface. +func (am AppModule) IsAppModule() {} diff --git a/x/interchainquery/types/callbacks.go b/x/interchainquery/types/callbacks.go new file mode 100644 index 00000000000..0b5daa77674 --- /dev/null +++ b/x/interchainquery/types/callbacks.go @@ -0,0 +1,12 @@ +package types + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" +) + +type QueryCallbacks interface { + AddICQCallback(id string, fn interface{}) QueryCallbacks + RegisterICQCallbacks() QueryCallbacks + CallICQCallback(ctx sdk.Context, id string, args []byte, query Query) error + HasICQCallback(id string) bool +} diff --git a/x/interchainquery/types/codec.go b/x/interchainquery/types/codec.go new file mode 100644 index 00000000000..fe6c99f0aed --- /dev/null +++ b/x/interchainquery/types/codec.go @@ -0,0 +1,21 @@ +package types + +import ( + "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/codec/legacy" + "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" +) + +func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + legacy.RegisterAminoMsg(cdc, &MsgSubmitQueryResponse{}, "interchainquery/MsgSubmitQueryResponse") +} + +func RegisterInterfaces(registry types.InterfaceRegistry) { + registry.RegisterImplementations((*sdk.Msg)(nil), + &MsgSubmitQueryResponse{}, + ) + + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) +} diff --git a/x/interchainquery/types/error.go b/x/interchainquery/types/error.go new file mode 100644 index 00000000000..0e773acaeb2 --- /dev/null +++ b/x/interchainquery/types/error.go @@ -0,0 +1,14 @@ +package types + +import "errors" + +var ( + ErrAlreadyFulfilled = errors.New("query already fulfilled") + ErrSucceededNoDelete = errors.New("query succeeded; do not not execute default behavior") + ErrInvalidICQProof = errors.New("icq query response failed") + ErrICQCallbackNotFound = errors.New("icq callback id not found") + ErrInvalidConsensusState = errors.New("invalid consensus state") + ErrInvalidICQRequest = errors.New("invalid interchain query request") + ErrFailedToRetryQuery = errors.New("failed to retry query") + ErrQueryNotFound = errors.New("Query not found") +) diff --git a/x/interchainquery/types/events.go b/x/interchainquery/types/events.go new file mode 100644 index 00000000000..8287df4ada7 --- /dev/null +++ b/x/interchainquery/types/events.go @@ -0,0 +1,16 @@ +package types + +const ( + AttributeKeyQueryId = "query_id" + AttributeKeyChainId = "chain_id" + AttributeKeyConnectionId = "connection_id" + AttributeKeyType = "type" + AttributeKeyParams = "parameters" + AttributeKeyRequest = "request" + AttributeKeyHeight = "height" + + AttributeValueCategory = ModuleName + AttributeValueQuery = "query" + + EventTypeQueryResponse = "query_response" +) diff --git a/x/interchainquery/types/genesis.go b/x/interchainquery/types/genesis.go new file mode 100644 index 00000000000..82e90520387 --- /dev/null +++ b/x/interchainquery/types/genesis.go @@ -0,0 +1,18 @@ +package types + +func NewGenesisState(queries []Query) *GenesisState { + return &GenesisState{Queries: queries} +} + +// DefaultGenesis returns the default Capability genesis state +func DefaultGenesis() *GenesisState { + queries := []Query{} + return NewGenesisState(queries) +} + +// Validate performs basic genesis state validation returning an error upon any +// failure. +func (gs GenesisState) Validate() error { + // TODO: validate genesis state. + return nil +} diff --git a/x/interchainquery/types/genesis.pb.go b/x/interchainquery/types/genesis.pb.go new file mode 100644 index 00000000000..51ea6707fc2 --- /dev/null +++ b/x/interchainquery/types/genesis.pb.go @@ -0,0 +1,1446 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/interchainquery/v1/genesis.proto + +package types + +import ( + cosmossdk_io_math "cosmossdk.io/math" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + io "io" + math "math" + math_bits "math/bits" + time "time" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf +var _ = time.Kitchen + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type TimeoutPolicy int32 + +const ( + TimeoutPolicy_REJECT_QUERY_RESPONSE TimeoutPolicy = 0 + TimeoutPolicy_RETRY_QUERY_REQUEST TimeoutPolicy = 1 + TimeoutPolicy_EXECUTE_QUERY_CALLBACK TimeoutPolicy = 2 +) + +var TimeoutPolicy_name = map[int32]string{ + 0: "REJECT_QUERY_RESPONSE", + 1: "RETRY_QUERY_REQUEST", + 2: "EXECUTE_QUERY_CALLBACK", +} + +var TimeoutPolicy_value = map[string]int32{ + "REJECT_QUERY_RESPONSE": 0, + "RETRY_QUERY_REQUEST": 1, + "EXECUTE_QUERY_CALLBACK": 2, +} + +func (x TimeoutPolicy) String() string { + return proto.EnumName(TimeoutPolicy_name, int32(x)) +} + +func (TimeoutPolicy) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_74cd646eb05658fd, []int{0} +} + +type Query struct { + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + ConnectionId string `protobuf:"bytes,2,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty"` + ChainId string `protobuf:"bytes,3,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + QueryType string `protobuf:"bytes,4,opt,name=query_type,json=queryType,proto3" json:"query_type,omitempty"` + RequestData []byte `protobuf:"bytes,5,opt,name=request_data,json=requestData,proto3" json:"request_data,omitempty"` + CallbackModule string `protobuf:"bytes,13,opt,name=callback_module,json=callbackModule,proto3" json:"callback_module,omitempty"` + CallbackId string `protobuf:"bytes,8,opt,name=callback_id,json=callbackId,proto3" json:"callback_id,omitempty"` + CallbackData []byte `protobuf:"bytes,12,opt,name=callback_data,json=callbackData,proto3" json:"callback_data,omitempty"` + TimeoutPolicy TimeoutPolicy `protobuf:"varint,15,opt,name=timeout_policy,json=timeoutPolicy,proto3,enum=stride.interchainquery.v1.TimeoutPolicy" json:"timeout_policy,omitempty"` + TimeoutDuration time.Duration `protobuf:"bytes,14,opt,name=timeout_duration,json=timeoutDuration,proto3,stdduration" json:"timeout_duration"` + TimeoutTimestamp uint64 `protobuf:"varint,9,opt,name=timeout_timestamp,json=timeoutTimestamp,proto3" json:"timeout_timestamp,omitempty"` + RequestSent bool `protobuf:"varint,11,opt,name=request_sent,json=requestSent,proto3" json:"request_sent,omitempty"` + SubmissionHeight uint64 `protobuf:"varint,16,opt,name=submission_height,json=submissionHeight,proto3" json:"submission_height,omitempty"` +} + +func (m *Query) Reset() { *m = Query{} } +func (m *Query) String() string { return proto.CompactTextString(m) } +func (*Query) ProtoMessage() {} +func (*Query) Descriptor() ([]byte, []int) { + return fileDescriptor_74cd646eb05658fd, []int{0} +} +func (m *Query) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Query) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Query.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Query) XXX_Merge(src proto.Message) { + xxx_messageInfo_Query.Merge(m, src) +} +func (m *Query) XXX_Size() int { + return m.Size() +} +func (m *Query) XXX_DiscardUnknown() { + xxx_messageInfo_Query.DiscardUnknown(m) +} + +var xxx_messageInfo_Query proto.InternalMessageInfo + +func (m *Query) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *Query) GetConnectionId() string { + if m != nil { + return m.ConnectionId + } + return "" +} + +func (m *Query) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +func (m *Query) GetQueryType() string { + if m != nil { + return m.QueryType + } + return "" +} + +func (m *Query) GetRequestData() []byte { + if m != nil { + return m.RequestData + } + return nil +} + +func (m *Query) GetCallbackModule() string { + if m != nil { + return m.CallbackModule + } + return "" +} + +func (m *Query) GetCallbackId() string { + if m != nil { + return m.CallbackId + } + return "" +} + +func (m *Query) GetCallbackData() []byte { + if m != nil { + return m.CallbackData + } + return nil +} + +func (m *Query) GetTimeoutPolicy() TimeoutPolicy { + if m != nil { + return m.TimeoutPolicy + } + return TimeoutPolicy_REJECT_QUERY_RESPONSE +} + +func (m *Query) GetTimeoutDuration() time.Duration { + if m != nil { + return m.TimeoutDuration + } + return 0 +} + +func (m *Query) GetTimeoutTimestamp() uint64 { + if m != nil { + return m.TimeoutTimestamp + } + return 0 +} + +func (m *Query) GetRequestSent() bool { + if m != nil { + return m.RequestSent + } + return false +} + +func (m *Query) GetSubmissionHeight() uint64 { + if m != nil { + return m.SubmissionHeight + } + return 0 +} + +type DataPoint struct { + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + RemoteHeight cosmossdk_io_math.Int `protobuf:"bytes,2,opt,name=remote_height,json=remoteHeight,proto3,customtype=cosmossdk.io/math.Int" json:"remote_height"` + LocalHeight cosmossdk_io_math.Int `protobuf:"bytes,3,opt,name=local_height,json=localHeight,proto3,customtype=cosmossdk.io/math.Int" json:"local_height"` + Value []byte `protobuf:"bytes,4,opt,name=value,proto3" json:"result,omitempty"` +} + +func (m *DataPoint) Reset() { *m = DataPoint{} } +func (m *DataPoint) String() string { return proto.CompactTextString(m) } +func (*DataPoint) ProtoMessage() {} +func (*DataPoint) Descriptor() ([]byte, []int) { + return fileDescriptor_74cd646eb05658fd, []int{1} +} +func (m *DataPoint) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DataPoint) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DataPoint.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *DataPoint) XXX_Merge(src proto.Message) { + xxx_messageInfo_DataPoint.Merge(m, src) +} +func (m *DataPoint) XXX_Size() int { + return m.Size() +} +func (m *DataPoint) XXX_DiscardUnknown() { + xxx_messageInfo_DataPoint.DiscardUnknown(m) +} + +var xxx_messageInfo_DataPoint proto.InternalMessageInfo + +func (m *DataPoint) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *DataPoint) GetValue() []byte { + if m != nil { + return m.Value + } + return nil +} + +// GenesisState defines the epochs module's genesis state. +type GenesisState struct { + Queries []Query `protobuf:"bytes,1,rep,name=queries,proto3" json:"queries"` +} + +func (m *GenesisState) Reset() { *m = GenesisState{} } +func (m *GenesisState) String() string { return proto.CompactTextString(m) } +func (*GenesisState) ProtoMessage() {} +func (*GenesisState) Descriptor() ([]byte, []int) { + return fileDescriptor_74cd646eb05658fd, []int{2} +} +func (m *GenesisState) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GenesisState.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GenesisState) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenesisState.Merge(m, src) +} +func (m *GenesisState) XXX_Size() int { + return m.Size() +} +func (m *GenesisState) XXX_DiscardUnknown() { + xxx_messageInfo_GenesisState.DiscardUnknown(m) +} + +var xxx_messageInfo_GenesisState proto.InternalMessageInfo + +func (m *GenesisState) GetQueries() []Query { + if m != nil { + return m.Queries + } + return nil +} + +func init() { + proto.RegisterEnum("stride.interchainquery.v1.TimeoutPolicy", TimeoutPolicy_name, TimeoutPolicy_value) + proto.RegisterType((*Query)(nil), "stride.interchainquery.v1.Query") + proto.RegisterType((*DataPoint)(nil), "stride.interchainquery.v1.DataPoint") + proto.RegisterType((*GenesisState)(nil), "stride.interchainquery.v1.GenesisState") +} + +func init() { + proto.RegisterFile("stride/interchainquery/v1/genesis.proto", fileDescriptor_74cd646eb05658fd) +} + +var fileDescriptor_74cd646eb05658fd = []byte{ + // 713 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xc1, 0x6e, 0xd3, 0x4a, + 0x14, 0x8d, 0xd3, 0xf4, 0x35, 0x99, 0x38, 0x69, 0xde, 0xbc, 0xf6, 0x3d, 0xa7, 0xd2, 0x4b, 0x4c, + 0x59, 0xd4, 0x6a, 0xa9, 0xad, 0x86, 0x0d, 0xec, 0x68, 0x52, 0x0b, 0x02, 0xa5, 0x4d, 0x9d, 0x54, + 0xa2, 0x6c, 0x2c, 0xc7, 0x1e, 0x92, 0x51, 0x6d, 0x4f, 0xea, 0x19, 0x47, 0xe4, 0x2f, 0x58, 0xf2, + 0x05, 0x7c, 0x01, 0x1f, 0xd1, 0x65, 0xc5, 0x0a, 0xb1, 0x28, 0xa8, 0x5d, 0xc1, 0x57, 0x20, 0xcf, + 0xd8, 0x6d, 0xa1, 0x02, 0x89, 0x55, 0x32, 0xe7, 0x9c, 0x39, 0x77, 0x7c, 0xef, 0x99, 0x01, 0x6b, + 0x94, 0x45, 0xd8, 0x43, 0x06, 0x0e, 0x19, 0x8a, 0xdc, 0xb1, 0x83, 0xc3, 0x93, 0x18, 0x45, 0x33, + 0x63, 0xba, 0x65, 0x8c, 0x50, 0x88, 0x28, 0xa6, 0xfa, 0x24, 0x22, 0x8c, 0xc0, 0xba, 0x10, 0xea, + 0x3f, 0x09, 0xf5, 0xe9, 0xd6, 0x4a, 0xdd, 0x25, 0x34, 0x20, 0xd4, 0xe6, 0x42, 0x43, 0x2c, 0xc4, + 0xae, 0x95, 0xa5, 0x11, 0x19, 0x11, 0x81, 0x27, 0xff, 0x52, 0xb4, 0x31, 0x22, 0x64, 0xe4, 0x23, + 0x83, 0xaf, 0x86, 0xf1, 0x2b, 0xc3, 0x8b, 0x23, 0x87, 0x61, 0x12, 0x0a, 0x7e, 0xf5, 0x5d, 0x01, + 0xcc, 0x1f, 0x24, 0xee, 0xb0, 0x0a, 0xf2, 0xd8, 0x53, 0x24, 0x55, 0xd2, 0x4a, 0x56, 0x1e, 0x7b, + 0xf0, 0x2e, 0xa8, 0xb8, 0x24, 0x0c, 0x91, 0x9b, 0xa8, 0x6d, 0xec, 0x29, 0x79, 0x4e, 0xc9, 0xd7, + 0x60, 0xd7, 0x83, 0x75, 0x50, 0xe4, 0x07, 0x4c, 0xf8, 0x39, 0xce, 0x2f, 0xf0, 0x75, 0xd7, 0x83, + 0xff, 0x03, 0xc0, 0x8f, 0x6d, 0xb3, 0xd9, 0x04, 0x29, 0x05, 0x4e, 0x96, 0x38, 0x32, 0x98, 0x4d, + 0x10, 0xbc, 0x03, 0xe4, 0x08, 0x9d, 0xc4, 0x88, 0x32, 0xdb, 0x73, 0x98, 0xa3, 0xcc, 0xab, 0x92, + 0x26, 0x5b, 0xe5, 0x14, 0xdb, 0x71, 0x98, 0x03, 0xd7, 0xc0, 0xa2, 0xeb, 0xf8, 0xfe, 0xd0, 0x71, + 0x8f, 0xed, 0x80, 0x78, 0xb1, 0x8f, 0x94, 0x0a, 0xb7, 0xa9, 0x66, 0xf0, 0x73, 0x8e, 0xc2, 0x26, + 0x28, 0x5f, 0x09, 0xb1, 0xa7, 0x14, 0xb9, 0x08, 0x64, 0x50, 0x57, 0x7c, 0x4b, 0x26, 0xe0, 0xd5, + 0x64, 0x5e, 0x4d, 0xce, 0x40, 0x5e, 0x6e, 0x1f, 0x54, 0x19, 0x0e, 0x10, 0x89, 0x99, 0x3d, 0x21, + 0x3e, 0x76, 0x67, 0xca, 0xa2, 0x2a, 0x69, 0xd5, 0x96, 0xa6, 0xff, 0x72, 0x1e, 0xfa, 0x40, 0x6c, + 0xe8, 0x71, 0xbd, 0x55, 0x61, 0x37, 0x97, 0x70, 0x0f, 0xd4, 0x32, 0xc3, 0xac, 0xeb, 0x4a, 0x55, + 0x95, 0xb4, 0x72, 0xab, 0xae, 0x8b, 0xb1, 0xe8, 0xd9, 0x58, 0xf4, 0x9d, 0x54, 0xd0, 0x2e, 0x9e, + 0x9e, 0x37, 0x73, 0x6f, 0x3f, 0x37, 0x25, 0x6b, 0x31, 0xdd, 0x9c, 0x51, 0x70, 0x03, 0xfc, 0x9d, + 0xf9, 0x25, 0xbf, 0x94, 0x39, 0xc1, 0x44, 0x29, 0xa9, 0x92, 0x56, 0xb0, 0xb2, 0x42, 0x83, 0x0c, + 0xbf, 0xd9, 0x5f, 0x8a, 0x42, 0xa6, 0x94, 0x55, 0x49, 0x2b, 0x5e, 0xf5, 0xb7, 0x8f, 0x42, 0x96, + 0xf8, 0xd1, 0x78, 0x18, 0x60, 0x4a, 0x93, 0x09, 0x8f, 0x11, 0x1e, 0x8d, 0x99, 0x52, 0x13, 0x7e, + 0xd7, 0xc4, 0x13, 0x8e, 0xaf, 0x7e, 0x95, 0x40, 0x29, 0x69, 0x53, 0x8f, 0xe0, 0x90, 0xdd, 0x0a, + 0x4b, 0x0f, 0x54, 0x22, 0x14, 0x10, 0x86, 0x32, 0x1b, 0x1e, 0x96, 0xf6, 0x46, 0xf2, 0x31, 0x9f, + 0xce, 0x9b, 0xcb, 0x22, 0xa9, 0xd4, 0x3b, 0xd6, 0x31, 0x31, 0x02, 0x87, 0x8d, 0xf5, 0x6e, 0xc8, + 0x3e, 0xbc, 0xdf, 0x04, 0x69, 0x84, 0xbb, 0x21, 0xb3, 0x64, 0xe1, 0x20, 0xea, 0xc1, 0x3d, 0x20, + 0xfb, 0xc4, 0x75, 0xfc, 0xcc, 0x70, 0xee, 0xcf, 0x0d, 0xcb, 0xdc, 0x20, 0xf5, 0x5b, 0x07, 0xf3, + 0x53, 0xc7, 0x8f, 0x45, 0x12, 0xe5, 0xf6, 0xd2, 0xb7, 0xf3, 0x66, 0x2d, 0x42, 0x34, 0xf6, 0xd9, + 0x3d, 0x12, 0x60, 0x86, 0x82, 0x09, 0x9b, 0x59, 0x42, 0xb2, 0xda, 0x03, 0xf2, 0x63, 0x71, 0x23, + 0xfb, 0xcc, 0x61, 0x08, 0x3e, 0x02, 0x0b, 0xc9, 0xc4, 0x31, 0xa2, 0x8a, 0xa4, 0xce, 0x69, 0xe5, + 0x96, 0xfa, 0x9b, 0x48, 0xf0, 0xdb, 0xd4, 0x2e, 0x24, 0x07, 0xb5, 0xb2, 0x6d, 0xeb, 0x36, 0xa8, + 0xfc, 0x10, 0x15, 0x58, 0x07, 0xcb, 0x96, 0xf9, 0xd4, 0xec, 0x0c, 0xec, 0x83, 0x43, 0xd3, 0x3a, + 0xb2, 0x2d, 0xb3, 0xdf, 0xdb, 0xdf, 0xeb, 0x9b, 0xb5, 0x1c, 0xfc, 0x0f, 0xfc, 0x63, 0x99, 0x03, + 0xeb, 0xe8, 0x8a, 0x39, 0x38, 0x34, 0xfb, 0x83, 0x9a, 0x04, 0x57, 0xc0, 0xbf, 0xe6, 0x0b, 0xb3, + 0x73, 0x38, 0x30, 0x53, 0xaa, 0xb3, 0xbd, 0xbb, 0xdb, 0xde, 0xee, 0x3c, 0xab, 0xe5, 0xdb, 0xfd, + 0xd3, 0x8b, 0x86, 0x74, 0x76, 0xd1, 0x90, 0xbe, 0x5c, 0x34, 0xa4, 0x37, 0x97, 0x8d, 0xdc, 0xd9, + 0x65, 0x23, 0xf7, 0xf1, 0xb2, 0x91, 0x7b, 0xf9, 0x70, 0x84, 0xd9, 0x38, 0x1e, 0xea, 0x2e, 0x09, + 0x8c, 0x3e, 0x3f, 0xf5, 0xe6, 0xae, 0x33, 0xa4, 0x46, 0xfa, 0x1a, 0x4d, 0x5b, 0x0f, 0x8c, 0xd7, + 0xb7, 0xde, 0xa4, 0xe4, 0xce, 0xd2, 0xe1, 0x5f, 0x3c, 0x9e, 0xf7, 0xbf, 0x07, 0x00, 0x00, 0xff, + 0xff, 0x49, 0x80, 0xca, 0xba, 0xba, 0x04, 0x00, 0x00, +} + +func (m *Query) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Query) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Query) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.SubmissionHeight != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.SubmissionHeight)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x80 + } + if m.TimeoutPolicy != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.TimeoutPolicy)) + i-- + dAtA[i] = 0x78 + } + n1, err1 := github_com_cosmos_gogoproto_types.StdDurationMarshalTo(m.TimeoutDuration, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdDuration(m.TimeoutDuration):]) + if err1 != nil { + return 0, err1 + } + i -= n1 + i = encodeVarintGenesis(dAtA, i, uint64(n1)) + i-- + dAtA[i] = 0x72 + if len(m.CallbackModule) > 0 { + i -= len(m.CallbackModule) + copy(dAtA[i:], m.CallbackModule) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.CallbackModule))) + i-- + dAtA[i] = 0x6a + } + if len(m.CallbackData) > 0 { + i -= len(m.CallbackData) + copy(dAtA[i:], m.CallbackData) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.CallbackData))) + i-- + dAtA[i] = 0x62 + } + if m.RequestSent { + i-- + if m.RequestSent { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x58 + } + if m.TimeoutTimestamp != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.TimeoutTimestamp)) + i-- + dAtA[i] = 0x48 + } + if len(m.CallbackId) > 0 { + i -= len(m.CallbackId) + copy(dAtA[i:], m.CallbackId) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.CallbackId))) + i-- + dAtA[i] = 0x42 + } + if len(m.RequestData) > 0 { + i -= len(m.RequestData) + copy(dAtA[i:], m.RequestData) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.RequestData))) + i-- + dAtA[i] = 0x2a + } + if len(m.QueryType) > 0 { + i -= len(m.QueryType) + copy(dAtA[i:], m.QueryType) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.QueryType))) + i-- + dAtA[i] = 0x22 + } + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0x1a + } + if len(m.ConnectionId) > 0 { + i -= len(m.ConnectionId) + copy(dAtA[i:], m.ConnectionId) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.ConnectionId))) + i-- + dAtA[i] = 0x12 + } + if len(m.Id) > 0 { + i -= len(m.Id) + copy(dAtA[i:], m.Id) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.Id))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DataPoint) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DataPoint) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DataPoint) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Value) > 0 { + i -= len(m.Value) + copy(dAtA[i:], m.Value) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.Value))) + i-- + dAtA[i] = 0x22 + } + { + size := m.LocalHeight.Size() + i -= size + if _, err := m.LocalHeight.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size := m.RemoteHeight.Size() + i -= size + if _, err := m.RemoteHeight.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Id) > 0 { + i -= len(m.Id) + copy(dAtA[i:], m.Id) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.Id))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *GenesisState) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GenesisState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Queries) > 0 { + for iNdEx := len(m.Queries) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Queries[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { + offset -= sovGenesis(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Query) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Id) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = len(m.ConnectionId) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = len(m.QueryType) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = len(m.RequestData) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = len(m.CallbackId) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + if m.TimeoutTimestamp != 0 { + n += 1 + sovGenesis(uint64(m.TimeoutTimestamp)) + } + if m.RequestSent { + n += 2 + } + l = len(m.CallbackData) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = len(m.CallbackModule) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = github_com_cosmos_gogoproto_types.SizeOfStdDuration(m.TimeoutDuration) + n += 1 + l + sovGenesis(uint64(l)) + if m.TimeoutPolicy != 0 { + n += 1 + sovGenesis(uint64(m.TimeoutPolicy)) + } + if m.SubmissionHeight != 0 { + n += 2 + sovGenesis(uint64(m.SubmissionHeight)) + } + return n +} + +func (m *DataPoint) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Id) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = m.RemoteHeight.Size() + n += 1 + l + sovGenesis(uint64(l)) + l = m.LocalHeight.Size() + n += 1 + l + sovGenesis(uint64(l)) + l = len(m.Value) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + return n +} + +func (m *GenesisState) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Queries) > 0 { + for _, e := range m.Queries { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + return n +} + +func sovGenesis(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenesis(x uint64) (n int) { + return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Query) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Query: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Query: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Id = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConnectionId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ConnectionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field QueryType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.QueryType = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RequestData", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RequestData = append(m.RequestData[:0], dAtA[iNdEx:postIndex]...) + if m.RequestData == nil { + m.RequestData = []byte{} + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CallbackId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CallbackId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutTimestamp", wireType) + } + m.TimeoutTimestamp = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.TimeoutTimestamp |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 11: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RequestSent", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.RequestSent = bool(v != 0) + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CallbackData", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CallbackData = append(m.CallbackData[:0], dAtA[iNdEx:postIndex]...) + if m.CallbackData == nil { + m.CallbackData = []byte{} + } + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CallbackModule", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CallbackModule = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutDuration", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_cosmos_gogoproto_types.StdDurationUnmarshal(&m.TimeoutDuration, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 15: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TimeoutPolicy", wireType) + } + m.TimeoutPolicy = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.TimeoutPolicy |= TimeoutPolicy(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 16: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SubmissionHeight", wireType) + } + m.SubmissionHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.SubmissionHeight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DataPoint) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DataPoint: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DataPoint: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Id = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RemoteHeight", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.RemoteHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LocalHeight", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LocalHeight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Value = append(m.Value[:0], dAtA[iNdEx:postIndex]...) + if m.Value == nil { + m.Value = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GenesisState) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Queries", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Queries = append(m.Queries, Query{}) + if err := m.Queries[len(m.Queries)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenesis(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenesis + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenesis + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenesis + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/interchainquery/types/keys.go b/x/interchainquery/types/keys.go new file mode 100644 index 00000000000..5ad88965187 --- /dev/null +++ b/x/interchainquery/types/keys.go @@ -0,0 +1,66 @@ +package types + +import ( + fmt "fmt" +) + +const ( + // ModuleName defines the module name + ModuleName = "interchainquery" + + // StoreKey defines the primary module store key + StoreKey = ModuleName + + // RouterKey is the message route for slashing + RouterKey = ModuleName + + // QuerierRoute defines the module's query routing key + QuerierRoute = ModuleName +) + +// prefix bytes for the interchainquery persistent store +const ( + prefixData = iota + 1 + prefixQuery = iota + 1 + prefixQueryCounter = iota + 1 +) + +// keys for proof queries to various stores, note: there's an implicit assumption here that +// the stores on the counterparty chain are prefixed with the standard cosmos-sdk module names +// this might not be true for all IBC chains, and is something we should verify before onboarding a +// new chain + +const ( + // The staking store is key'd by the validator's address + STAKING_STORE_QUERY_WITH_PROOF = "store/staking/key" + // The bank store is key'd by the account address + BANK_STORE_QUERY_WITH_PROOF = "store/bank/key" + // The Osmosis twap store - key'd by the pool ID and denom's + OSMOSIS_TWAP_STORE_QUERY_WITH_PROOF = "store/twap/key" +) + +var ( + // Osmosis TWAP query info + OsmosisKeySeparator = "|" + OsmosisMostRecentTWAPsPrefix = "recent_twap" + OsmosisKeySeparator +) + +var ( + KeyPrefixData = []byte{prefixData} + KeyPrefixQuery = []byte{prefixQuery} + KeyQueryCounter = []byte{prefixQueryCounter} +) + +func KeyPrefix(p string) []byte { + return []byte(p) +} + +func FormatOsmosisMostRecentTWAPKey(poolId uint64, denom1, denom2 string) []byte { + // Sort denoms + if denom1 > denom2 { + denom1, denom2 = denom2, denom1 + } + + poolIdBz := fmt.Sprintf("%0.20d", poolId) + return []byte(fmt.Sprintf("%s%s%s%s%s%s", OsmosisMostRecentTWAPsPrefix, poolIdBz, OsmosisKeySeparator, denom1, OsmosisKeySeparator, denom2)) +} diff --git a/x/interchainquery/types/msgs.go b/x/interchainquery/types/msgs.go new file mode 100644 index 00000000000..5c78b8cb8f4 --- /dev/null +++ b/x/interchainquery/types/msgs.go @@ -0,0 +1,41 @@ +package types + +import ( + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" +) + +// interchainquery message types +const ( + TypeMsgSubmitQueryResponse = "submitqueryresponse" +) + +var _ sdk.Msg = &MsgSubmitQueryResponse{} + +// Route Implements Msg. +func (msg MsgSubmitQueryResponse) Route() string { return RouterKey } + +// Type Implements Msg. +func (msg MsgSubmitQueryResponse) Type() string { return TypeMsgSubmitQueryResponse } + +// ValidateBasic Implements Msg. +func (msg MsgSubmitQueryResponse) ValidateBasic() error { + // check from address + _, err := sdk.AccAddressFromBech32(msg.FromAddress) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid fromAddress in ICQ response (%s)", err) + } + // check chain_id is not empty + if msg.ChainId == "" { + return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "chain_id cannot be empty in ICQ response") + } + + return nil +} + +// GetSigners Implements Msg. +func (msg MsgSubmitQueryResponse) GetSigners() []sdk.AccAddress { + fromAddress, _ := sdk.AccAddressFromBech32(msg.FromAddress) + return []sdk.AccAddress{fromAddress} +} diff --git a/x/interchainquery/types/query.go b/x/interchainquery/types/query.go new file mode 100644 index 00000000000..c456be11106 --- /dev/null +++ b/x/interchainquery/types/query.go @@ -0,0 +1,20 @@ +package types + +import ( + fmt "fmt" + time "time" + + "github.com/osmosis-labs/osmosis/v27/utils" +) + +// Check if a query has timed-out by checking whether the block time is after +// the timeout timestamp +func (q Query) HasTimedOut(currentBlockTime time.Time) bool { + return q.TimeoutTimestamp < utils.IntToUint(currentBlockTime.UnixNano()) +} + +// Prints an abbreviated query description for logging purposes +func (q Query) Description() string { + return fmt.Sprintf("QueryId: %s, QueryType: %s, ConnectionId: %s, QueryRequest: %v", + q.Id, q.QueryType, q.ConnectionId, q.RequestData) +} diff --git a/x/interchainquery/types/query.pb.go b/x/interchainquery/types/query.pb.go new file mode 100644 index 00000000000..5a7192e8988 --- /dev/null +++ b/x/interchainquery/types/query.pb.go @@ -0,0 +1,543 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/interchainquery/v1/query.proto + +package types + +import ( + context "context" + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type QueryPendingQueriesRequest struct { +} + +func (m *QueryPendingQueriesRequest) Reset() { *m = QueryPendingQueriesRequest{} } +func (m *QueryPendingQueriesRequest) String() string { return proto.CompactTextString(m) } +func (*QueryPendingQueriesRequest) ProtoMessage() {} +func (*QueryPendingQueriesRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_b720c147b9144d5b, []int{0} +} +func (m *QueryPendingQueriesRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryPendingQueriesRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryPendingQueriesRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryPendingQueriesRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryPendingQueriesRequest.Merge(m, src) +} +func (m *QueryPendingQueriesRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryPendingQueriesRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryPendingQueriesRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryPendingQueriesRequest proto.InternalMessageInfo + +type QueryPendingQueriesResponse struct { + PendingQueries []Query `protobuf:"bytes,1,rep,name=pending_queries,json=pendingQueries,proto3" json:"pending_queries"` +} + +func (m *QueryPendingQueriesResponse) Reset() { *m = QueryPendingQueriesResponse{} } +func (m *QueryPendingQueriesResponse) String() string { return proto.CompactTextString(m) } +func (*QueryPendingQueriesResponse) ProtoMessage() {} +func (*QueryPendingQueriesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_b720c147b9144d5b, []int{1} +} +func (m *QueryPendingQueriesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryPendingQueriesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryPendingQueriesResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryPendingQueriesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryPendingQueriesResponse.Merge(m, src) +} +func (m *QueryPendingQueriesResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryPendingQueriesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryPendingQueriesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryPendingQueriesResponse proto.InternalMessageInfo + +func (m *QueryPendingQueriesResponse) GetPendingQueries() []Query { + if m != nil { + return m.PendingQueries + } + return nil +} + +func init() { + proto.RegisterType((*QueryPendingQueriesRequest)(nil), "stride.interchainquery.v1.QueryPendingQueriesRequest") + proto.RegisterType((*QueryPendingQueriesResponse)(nil), "stride.interchainquery.v1.QueryPendingQueriesResponse") +} + +func init() { + proto.RegisterFile("stride/interchainquery/v1/query.proto", fileDescriptor_b720c147b9144d5b) +} + +var fileDescriptor_b720c147b9144d5b = []byte{ + // 314 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x2d, 0x2e, 0x29, 0xca, + 0x4c, 0x49, 0xd5, 0xcf, 0xcc, 0x2b, 0x49, 0x2d, 0x4a, 0xce, 0x48, 0xcc, 0xcc, 0x2b, 0x2c, 0x4d, + 0x2d, 0xaa, 0xd4, 0x2f, 0x33, 0xd4, 0x07, 0x33, 0xf4, 0x0a, 0x8a, 0xf2, 0x4b, 0xf2, 0x85, 0x24, + 0x21, 0xca, 0xf4, 0xd0, 0x94, 0xe9, 0x95, 0x19, 0x4a, 0x89, 0xa4, 0xe7, 0xa7, 0xe7, 0x83, 0x55, + 0xe9, 0x83, 0x58, 0x10, 0x0d, 0x52, 0x32, 0xe9, 0xf9, 0xf9, 0xe9, 0x39, 0xa9, 0xfa, 0x89, 0x05, + 0x99, 0xfa, 0x89, 0x79, 0x79, 0xf9, 0x25, 0x89, 0x25, 0x99, 0xf9, 0x79, 0xc5, 0x50, 0x59, 0x75, + 0xdc, 0xb6, 0xa6, 0xa7, 0xe6, 0xa5, 0x16, 0x67, 0x42, 0x15, 0x2a, 0xc9, 0x70, 0x49, 0x05, 0x82, + 0x64, 0x02, 0x52, 0xf3, 0x52, 0x32, 0xf3, 0xd2, 0x41, 0xec, 0xcc, 0xd4, 0xe2, 0xa0, 0xd4, 0xc2, + 0xd2, 0xd4, 0xe2, 0x12, 0xa5, 0x3c, 0x2e, 0x69, 0xac, 0xb2, 0xc5, 0x05, 0xf9, 0x79, 0xc5, 0xa9, + 0x42, 0xfe, 0x5c, 0xfc, 0x05, 0x10, 0x99, 0xf8, 0x42, 0x88, 0x94, 0x04, 0xa3, 0x02, 0xb3, 0x06, + 0xb7, 0x91, 0x82, 0x1e, 0x4e, 0xef, 0xe8, 0x81, 0x0d, 0x74, 0x62, 0x39, 0x71, 0x4f, 0x9e, 0x21, + 0x88, 0xaf, 0x00, 0xc5, 0x60, 0xa3, 0xb3, 0x8c, 0x5c, 0x3c, 0x60, 0xf9, 0xe0, 0xd4, 0xa2, 0xb2, + 0xcc, 0xe4, 0x54, 0xa1, 0x3d, 0x8c, 0x5c, 0x7c, 0xa8, 0x96, 0x0b, 0x99, 0x12, 0x32, 0x1b, 0xab, + 0x57, 0xa4, 0xcc, 0x48, 0xd5, 0x06, 0xf1, 0xa3, 0x92, 0x75, 0xd3, 0xe5, 0x27, 0x93, 0x99, 0x4c, + 0x85, 0x8c, 0xf5, 0x83, 0xc1, 0xfa, 0x75, 0x7d, 0x12, 0x93, 0x8a, 0xf5, 0x71, 0x04, 0x2f, 0x5a, + 0x68, 0x38, 0x05, 0x9f, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, + 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, 0x94, 0x65, 0x7a, + 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0x2e, 0x36, 0x83, 0xcb, 0x8c, 0x2c, 0xf4, 0x2b, + 0x30, 0x8c, 0x2f, 0xa9, 0x2c, 0x48, 0x2d, 0x4e, 0x62, 0x03, 0xc7, 0x9c, 0x31, 0x20, 0x00, 0x00, + 0xff, 0xff, 0x61, 0x9f, 0xc8, 0xf4, 0x5a, 0x02, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// QueryServiceClient is the client API for QueryService service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type QueryServiceClient interface { + PendingQueries(ctx context.Context, in *QueryPendingQueriesRequest, opts ...grpc.CallOption) (*QueryPendingQueriesResponse, error) +} + +type queryServiceClient struct { + cc grpc1.ClientConn +} + +func NewQueryServiceClient(cc grpc1.ClientConn) QueryServiceClient { + return &queryServiceClient{cc} +} + +func (c *queryServiceClient) PendingQueries(ctx context.Context, in *QueryPendingQueriesRequest, opts ...grpc.CallOption) (*QueryPendingQueriesResponse, error) { + out := new(QueryPendingQueriesResponse) + err := c.cc.Invoke(ctx, "/stride.interchainquery.v1.QueryService/PendingQueries", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServiceServer is the server API for QueryService service. +type QueryServiceServer interface { + PendingQueries(context.Context, *QueryPendingQueriesRequest) (*QueryPendingQueriesResponse, error) +} + +// UnimplementedQueryServiceServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServiceServer struct { +} + +func (*UnimplementedQueryServiceServer) PendingQueries(ctx context.Context, req *QueryPendingQueriesRequest) (*QueryPendingQueriesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method PendingQueries not implemented") +} + +func RegisterQueryServiceServer(s grpc1.Server, srv QueryServiceServer) { + s.RegisterService(&_QueryService_serviceDesc, srv) +} + +func _QueryService_PendingQueries_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryPendingQueriesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServiceServer).PendingQueries(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.interchainquery.v1.QueryService/PendingQueries", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServiceServer).PendingQueries(ctx, req.(*QueryPendingQueriesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _QueryService_serviceDesc = grpc.ServiceDesc{ + ServiceName: "stride.interchainquery.v1.QueryService", + HandlerType: (*QueryServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "PendingQueries", + Handler: _QueryService_PendingQueries_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "stride/interchainquery/v1/query.proto", +} + +func (m *QueryPendingQueriesRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryPendingQueriesRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryPendingQueriesRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryPendingQueriesResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryPendingQueriesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryPendingQueriesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.PendingQueries) > 0 { + for iNdEx := len(m.PendingQueries) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.PendingQueries[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *QueryPendingQueriesRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryPendingQueriesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.PendingQueries) > 0 { + for _, e := range m.PendingQueries { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryPendingQueriesRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryPendingQueriesRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryPendingQueriesRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryPendingQueriesResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryPendingQueriesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryPendingQueriesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PendingQueries", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PendingQueries = append(m.PendingQueries, Query{}) + if err := m.PendingQueries[len(m.PendingQueries)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipQuery(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthQuery + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupQuery + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthQuery + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/interchainquery/types/query.pb.gw.go b/x/interchainquery/types/query.pb.gw.go new file mode 100644 index 00000000000..aaf3eb83c58 --- /dev/null +++ b/x/interchainquery/types/query.pb.gw.go @@ -0,0 +1,153 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: stride/interchainquery/v1/query.proto + +/* +Package types is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package types + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage +var _ = metadata.Join + +func request_QueryService_PendingQueries_0(ctx context.Context, marshaler runtime.Marshaler, client QueryServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryPendingQueriesRequest + var metadata runtime.ServerMetadata + + msg, err := client.PendingQueries(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_QueryService_PendingQueries_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryPendingQueriesRequest + var metadata runtime.ServerMetadata + + msg, err := server.PendingQueries(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterQueryServiceHandlerServer registers the http handlers for service QueryService to "mux". +// UnaryRPC :call QueryServiceServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryServiceHandlerFromEndpoint instead. +func RegisterQueryServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServiceServer) error { + + mux.Handle("GET", pattern_QueryService_PendingQueries_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_QueryService_PendingQueries_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_QueryService_PendingQueries_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterQueryServiceHandlerFromEndpoint is same as RegisterQueryServiceHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterQueryServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterQueryServiceHandler(ctx, mux, conn) +} + +// RegisterQueryServiceHandler registers the http handlers for service QueryService to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterQueryServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterQueryServiceHandlerClient(ctx, mux, NewQueryServiceClient(conn)) +} + +// RegisterQueryServiceHandlerClient registers the http handlers for service QueryService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryServiceClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryServiceClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "QueryServiceClient" to call the correct interceptors. +func RegisterQueryServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryServiceClient) error { + + mux.Handle("GET", pattern_QueryService_PendingQueries_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_QueryService_PendingQueries_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_QueryService_PendingQueries_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_QueryService_PendingQueries_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"Stride-Labs", "stride", "interchainquery", "pending_queries"}, "", runtime.AssumeColonVerbOpt(false))) +) + +var ( + forward_QueryService_PendingQueries_0 = runtime.ForwardResponseMessage +) diff --git a/x/interchainquery/types/tx.pb.go b/x/interchainquery/types/tx.pb.go new file mode 100644 index 00000000000..bd11b07144a --- /dev/null +++ b/x/interchainquery/types/tx.pb.go @@ -0,0 +1,764 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/interchainquery/v1/tx.proto + +package types + +import ( + context "context" + fmt "fmt" + crypto "github.com/cometbft/cometbft/proto/tendermint/crypto" + _ "github.com/cosmos/cosmos-proto" + _ "github.com/cosmos/cosmos-sdk/types/msgservice" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// MsgSubmitQueryResponse represents a message type to fulfil a query request. +type MsgSubmitQueryResponse struct { + ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty" yaml:"chain_id"` + QueryId string `protobuf:"bytes,2,opt,name=query_id,json=queryId,proto3" json:"query_id,omitempty" yaml:"query_id"` + Result []byte `protobuf:"bytes,3,opt,name=result,proto3" json:"result,omitempty" yaml:"result"` + ProofOps *crypto.ProofOps `protobuf:"bytes,4,opt,name=proof_ops,json=proofOps,proto3" json:"proof_ops,omitempty" yaml:"proof_ops"` + Height int64 `protobuf:"varint,5,opt,name=height,proto3" json:"height,omitempty" yaml:"height"` + FromAddress string `protobuf:"bytes,6,opt,name=from_address,json=fromAddress,proto3" json:"from_address,omitempty"` +} + +func (m *MsgSubmitQueryResponse) Reset() { *m = MsgSubmitQueryResponse{} } +func (m *MsgSubmitQueryResponse) String() string { return proto.CompactTextString(m) } +func (*MsgSubmitQueryResponse) ProtoMessage() {} +func (*MsgSubmitQueryResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_10c13e8ba12d0950, []int{0} +} +func (m *MsgSubmitQueryResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSubmitQueryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSubmitQueryResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgSubmitQueryResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSubmitQueryResponse.Merge(m, src) +} +func (m *MsgSubmitQueryResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgSubmitQueryResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSubmitQueryResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSubmitQueryResponse proto.InternalMessageInfo + +// MsgSubmitQueryResponseResponse defines the MsgSubmitQueryResponse response +// type. +type MsgSubmitQueryResponseResponse struct { +} + +func (m *MsgSubmitQueryResponseResponse) Reset() { *m = MsgSubmitQueryResponseResponse{} } +func (m *MsgSubmitQueryResponseResponse) String() string { return proto.CompactTextString(m) } +func (*MsgSubmitQueryResponseResponse) ProtoMessage() {} +func (*MsgSubmitQueryResponseResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_10c13e8ba12d0950, []int{1} +} +func (m *MsgSubmitQueryResponseResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSubmitQueryResponseResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSubmitQueryResponseResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgSubmitQueryResponseResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSubmitQueryResponseResponse.Merge(m, src) +} +func (m *MsgSubmitQueryResponseResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgSubmitQueryResponseResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSubmitQueryResponseResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSubmitQueryResponseResponse proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MsgSubmitQueryResponse)(nil), "stride.interchainquery.v1.MsgSubmitQueryResponse") + proto.RegisterType((*MsgSubmitQueryResponseResponse)(nil), "stride.interchainquery.v1.MsgSubmitQueryResponseResponse") +} + +func init() { + proto.RegisterFile("stride/interchainquery/v1/tx.proto", fileDescriptor_10c13e8ba12d0950) +} + +var fileDescriptor_10c13e8ba12d0950 = []byte{ + // 554 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x93, 0x3d, 0x6f, 0xd3, 0x40, + 0x18, 0xc7, 0x73, 0x0d, 0x7d, 0x73, 0x8b, 0xa0, 0x6e, 0x04, 0x6e, 0x00, 0x3b, 0xf2, 0x00, 0x21, + 0xa2, 0x3e, 0x25, 0x2c, 0x34, 0x4c, 0x64, 0xa2, 0x12, 0xe5, 0xc5, 0xd9, 0x58, 0x22, 0x3b, 0xbe, + 0x5e, 0x4e, 0x8a, 0x7d, 0xe6, 0xee, 0x12, 0x25, 0x1b, 0xea, 0x84, 0x98, 0x90, 0x58, 0x18, 0xb3, + 0xb0, 0x67, 0x40, 0xe2, 0x1b, 0x20, 0xc6, 0x0a, 0x16, 0xa6, 0x08, 0x25, 0x48, 0x61, 0xce, 0x27, + 0x40, 0xbe, 0x73, 0x0a, 0xa4, 0x61, 0x60, 0xb1, 0xef, 0x9e, 0xff, 0xef, 0x79, 0xd3, 0xf3, 0x9c, + 0x66, 0x73, 0xc1, 0x48, 0x80, 0x20, 0x89, 0x04, 0x62, 0xcd, 0x96, 0x47, 0xa2, 0x17, 0x1d, 0xc4, + 0xfa, 0xb0, 0x5b, 0x86, 0xa2, 0xe7, 0xc4, 0x8c, 0x0a, 0xaa, 0xef, 0x29, 0xc6, 0x59, 0x60, 0x9c, + 0x6e, 0x39, 0xbf, 0xe3, 0x85, 0x24, 0xa2, 0x50, 0x7e, 0x15, 0x9d, 0xdf, 0x6b, 0x52, 0x1e, 0x52, + 0xde, 0x90, 0x37, 0xa8, 0x2e, 0xa9, 0x74, 0x55, 0xdd, 0x60, 0xc8, 0x71, 0x92, 0x20, 0xe4, 0x38, + 0x15, 0x72, 0x98, 0x62, 0xaa, 0x1c, 0x92, 0x53, 0x6a, 0xbd, 0x8e, 0x29, 0xc5, 0x6d, 0x04, 0xbd, + 0x98, 0x40, 0x2f, 0x8a, 0xa8, 0xf0, 0x04, 0xa1, 0xd1, 0x3c, 0xd8, 0x0d, 0x81, 0xa2, 0x00, 0xb1, + 0x90, 0x44, 0x02, 0x36, 0x59, 0x3f, 0x16, 0x14, 0xc6, 0x8c, 0xd2, 0x63, 0x25, 0xdb, 0xef, 0xb3, + 0xda, 0x95, 0x23, 0x8e, 0xeb, 0x1d, 0x3f, 0x24, 0xe2, 0x59, 0x52, 0xaf, 0x8b, 0x78, 0x4c, 0x23, + 0x8e, 0x74, 0x47, 0xdb, 0x90, 0x5d, 0x34, 0x48, 0x60, 0x80, 0x02, 0x28, 0x6e, 0xd6, 0x76, 0x67, + 0x23, 0xeb, 0x52, 0xdf, 0x0b, 0xdb, 0x55, 0x7b, 0xae, 0xd8, 0xee, 0xba, 0x3c, 0x1e, 0x06, 0x09, + 0x2f, 0x1b, 0x4e, 0xf8, 0x95, 0x45, 0x7e, 0xae, 0xd8, 0xee, 0xba, 0x3c, 0x1e, 0x06, 0xfa, 0x6d, + 0x6d, 0x8d, 0x21, 0xde, 0x69, 0x0b, 0x23, 0x5b, 0x00, 0xc5, 0xed, 0xda, 0xce, 0x6c, 0x64, 0x5d, + 0x54, 0xb4, 0xb2, 0xdb, 0x6e, 0x0a, 0xe8, 0x8f, 0xb5, 0x4d, 0x59, 0x74, 0x83, 0xc6, 0xdc, 0xb8, + 0x50, 0x00, 0xc5, 0xad, 0xca, 0x35, 0xe7, 0x77, 0x63, 0x8e, 0x6a, 0xcc, 0x79, 0x9a, 0x30, 0x4f, + 0x62, 0x5e, 0xcb, 0xcd, 0x46, 0xd6, 0x65, 0x15, 0xea, 0xcc, 0xcf, 0x76, 0x37, 0xe2, 0x54, 0x4f, + 0x52, 0xb7, 0x10, 0xc1, 0x2d, 0x61, 0xac, 0x16, 0x40, 0x31, 0xfb, 0x67, 0x6a, 0x65, 0xb7, 0xdd, + 0x14, 0xd0, 0xef, 0x6b, 0xdb, 0xc7, 0x8c, 0x86, 0x0d, 0x2f, 0x08, 0x18, 0xe2, 0xdc, 0x58, 0x93, + 0x9d, 0x19, 0x5f, 0x3e, 0xec, 0xe7, 0xd2, 0xa1, 0x3d, 0x50, 0x4a, 0x5d, 0x30, 0x12, 0x61, 0x77, + 0x2b, 0xa1, 0x53, 0x53, 0xf5, 0xe1, 0xab, 0x81, 0x95, 0x79, 0x37, 0xb0, 0xc0, 0xcf, 0x81, 0x95, + 0x39, 0x99, 0x0e, 0x4b, 0x7f, 0xc5, 0x7a, 0x3d, 0x1d, 0x96, 0x6e, 0x2e, 0x6e, 0xd4, 0xf2, 0x61, + 0xd8, 0x05, 0xcd, 0x5c, 0xae, 0xcc, 0xff, 0x95, 0x4f, 0x40, 0xcb, 0x1e, 0x71, 0xac, 0x7f, 0x04, + 0xda, 0xee, 0xb2, 0x71, 0x96, 0x9d, 0x7f, 0xee, 0xa7, 0xb3, 0x3c, 0x74, 0xfe, 0xe0, 0xbf, 0x5d, + 0xce, 0xea, 0xad, 0x9c, 0x7c, 0xfd, 0xf1, 0x76, 0xe5, 0x4e, 0x15, 0x94, 0xec, 0x5b, 0xe7, 0x5e, + 0x8d, 0xe8, 0xc1, 0x6e, 0xd9, 0x47, 0xc2, 0x2b, 0x43, 0x2e, 0x63, 0x48, 0x73, 0x7e, 0xf5, 0xe5, + 0x74, 0x58, 0x02, 0xb5, 0xfa, 0xe7, 0xb1, 0x09, 0x4e, 0xc7, 0x26, 0xf8, 0x3e, 0x36, 0xc1, 0x9b, + 0x89, 0x99, 0x39, 0x9d, 0x98, 0x99, 0x6f, 0x13, 0x33, 0xf3, 0xfc, 0x00, 0x13, 0xd1, 0xea, 0xf8, + 0x4e, 0x93, 0x86, 0xb0, 0x2e, 0x2b, 0xdb, 0x7f, 0xe4, 0xf9, 0x1c, 0xa6, 0x8f, 0xb3, 0x5b, 0xb9, + 0x07, 0x7b, 0xe7, 0x93, 0xf5, 0x63, 0xc4, 0xfd, 0x35, 0xb9, 0xee, 0x77, 0x7f, 0x05, 0x00, 0x00, + 0xff, 0xff, 0x31, 0x26, 0x5d, 0x3c, 0xc9, 0x03, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type MsgClient interface { + // SubmitQueryResponse defines a method for submit query responses. + SubmitQueryResponse(ctx context.Context, in *MsgSubmitQueryResponse, opts ...grpc.CallOption) (*MsgSubmitQueryResponseResponse, error) +} + +type msgClient struct { + cc grpc1.ClientConn +} + +func NewMsgClient(cc grpc1.ClientConn) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) SubmitQueryResponse(ctx context.Context, in *MsgSubmitQueryResponse, opts ...grpc.CallOption) (*MsgSubmitQueryResponseResponse, error) { + out := new(MsgSubmitQueryResponseResponse) + err := c.cc.Invoke(ctx, "/stride.interchainquery.v1.Msg/SubmitQueryResponse", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +type MsgServer interface { + // SubmitQueryResponse defines a method for submit query responses. + SubmitQueryResponse(context.Context, *MsgSubmitQueryResponse) (*MsgSubmitQueryResponseResponse, error) +} + +// UnimplementedMsgServer can be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (*UnimplementedMsgServer) SubmitQueryResponse(ctx context.Context, req *MsgSubmitQueryResponse) (*MsgSubmitQueryResponseResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SubmitQueryResponse not implemented") +} + +func RegisterMsgServer(s grpc1.Server, srv MsgServer) { + s.RegisterService(&_Msg_serviceDesc, srv) +} + +func _Msg_SubmitQueryResponse_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgSubmitQueryResponse) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).SubmitQueryResponse(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.interchainquery.v1.Msg/SubmitQueryResponse", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).SubmitQueryResponse(ctx, req.(*MsgSubmitQueryResponse)) + } + return interceptor(ctx, in, info, handler) +} + +var _Msg_serviceDesc = grpc.ServiceDesc{ + ServiceName: "stride.interchainquery.v1.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "SubmitQueryResponse", + Handler: _Msg_SubmitQueryResponse_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "stride/interchainquery/v1/tx.proto", +} + +func (m *MsgSubmitQueryResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgSubmitQueryResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSubmitQueryResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.FromAddress) > 0 { + i -= len(m.FromAddress) + copy(dAtA[i:], m.FromAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.FromAddress))) + i-- + dAtA[i] = 0x32 + } + if m.Height != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.Height)) + i-- + dAtA[i] = 0x28 + } + if m.ProofOps != nil { + { + size, err := m.ProofOps.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + if len(m.Result) > 0 { + i -= len(m.Result) + copy(dAtA[i:], m.Result) + i = encodeVarintTx(dAtA, i, uint64(len(m.Result))) + i-- + dAtA[i] = 0x1a + } + if len(m.QueryId) > 0 { + i -= len(m.QueryId) + copy(dAtA[i:], m.QueryId) + i = encodeVarintTx(dAtA, i, uint64(len(m.QueryId))) + i-- + dAtA[i] = 0x12 + } + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgSubmitQueryResponseResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgSubmitQueryResponseResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSubmitQueryResponseResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintTx(dAtA []byte, offset int, v uint64) int { + offset -= sovTx(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MsgSubmitQueryResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.QueryId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Result) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.ProofOps != nil { + l = m.ProofOps.Size() + n += 1 + l + sovTx(uint64(l)) + } + if m.Height != 0 { + n += 1 + sovTx(uint64(m.Height)) + } + l = len(m.FromAddress) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgSubmitQueryResponseResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovTx(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozTx(x uint64) (n int) { + return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MsgSubmitQueryResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgSubmitQueryResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSubmitQueryResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field QueryId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.QueryId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Result", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Result = append(m.Result[:0], dAtA[iNdEx:postIndex]...) + if m.Result == nil { + m.Result = []byte{} + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofOps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ProofOps == nil { + m.ProofOps = &crypto.ProofOps{} + } + if err := m.ProofOps.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Height", wireType) + } + m.Height = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Height |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FromAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FromAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgSubmitQueryResponseResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgSubmitQueryResponseResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSubmitQueryResponseResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipTx(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthTx + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupTx + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthTx + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthTx = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTx = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupTx = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/interchainquery/types/tx.pb.gw.go b/x/interchainquery/types/tx.pb.gw.go new file mode 100644 index 00000000000..cb7e61b54d6 --- /dev/null +++ b/x/interchainquery/types/tx.pb.gw.go @@ -0,0 +1,169 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: stride/interchainquery/v1/tx.proto + +/* +Package types is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package types + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage +var _ = metadata.Join + +func request_Msg_SubmitQueryResponse_0(ctx context.Context, marshaler runtime.Marshaler, client MsgClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq MsgSubmitQueryResponse + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.SubmitQueryResponse(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Msg_SubmitQueryResponse_0(ctx context.Context, marshaler runtime.Marshaler, server MsgServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq MsgSubmitQueryResponse + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.SubmitQueryResponse(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterMsgHandlerServer registers the http handlers for service Msg to "mux". +// UnaryRPC :call MsgServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterMsgHandlerFromEndpoint instead. +func RegisterMsgHandlerServer(ctx context.Context, mux *runtime.ServeMux, server MsgServer) error { + + mux.Handle("POST", pattern_Msg_SubmitQueryResponse_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Msg_SubmitQueryResponse_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Msg_SubmitQueryResponse_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterMsgHandlerFromEndpoint is same as RegisterMsgHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterMsgHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterMsgHandler(ctx, mux, conn) +} + +// RegisterMsgHandler registers the http handlers for service Msg to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterMsgHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterMsgHandlerClient(ctx, mux, NewMsgClient(conn)) +} + +// RegisterMsgHandlerClient registers the http handlers for service Msg +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "MsgClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "MsgClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "MsgClient" to call the correct interceptors. +func RegisterMsgHandlerClient(ctx context.Context, mux *runtime.ServeMux, client MsgClient) error { + + mux.Handle("POST", pattern_Msg_SubmitQueryResponse_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Msg_SubmitQueryResponse_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Msg_SubmitQueryResponse_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Msg_SubmitQueryResponse_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"interchainquery", "tx", "v1beta1", "submitquery"}, "", runtime.AssumeColonVerbOpt(false))) +) + +var ( + forward_Msg_SubmitQueryResponse_0 = runtime.ForwardResponseMessage +) diff --git a/x/records/README.md b/x/records/README.md new file mode 100644 index 00000000000..3bcc8669f7f --- /dev/null +++ b/x/records/README.md @@ -0,0 +1,80 @@ +--- +title: "Records" +excerpt: "" +category: 6392913957c533007128548e +--- + +# The Records Module + +The records module handles record keeping and accounting for the Stride blockchain. + +It is [IBC middleware](https://ibc.cosmos.network/main/ibc/middleware/develop.html). IBC middleware wraps core IBC modules and other middlewares. Specifically, the records module adds a middleware stack to `app.go` with the following structure: `records -> transfer`. All ibc packets routed to the `transfer` module will first pass through `records`, where we can apply custom logic (record keeping) before passing messages to the underlying `transfer` module. + +Note: + +- The middleware stack is added in `app.go` +- The custom handler logic is added in `ibc_module.go` by implementing the IBCModule interface + +## Keeper functions + +Deposit Records + +- `GetDepositRecordCount()` +- `SetDepositRecordCount()` +- `AppendDepositRecord()` +- `SetDepositRecord()` +- `GetDepositRecord()` +- `RemoveDepositRecord()` +- `GetAllDepositRecord()` +- `GetTransferDepositRecordByEpochAndChain()` + +Epoch Unbonding Records + +- `SetEpochUnbondingRecord()` +- `GetEpochUnbondingRecord()` +- `RemoveEpochUnbondingRecord()` +- `GetAllEpochUnbondingRecord()` +- `GetAllPreviousEpochUnbondingRecords()` +- `GetHostZoneUnbondingByChainId()` +- `AddHostZoneToEpochUnbondingRecord()` +- `SetHostZoneUnbondingStatus()` + +User Redemption Records + +- `SetUserRedemptionRecord()` +- `GetUserRedemptionRecord()` +- `RemoveUserRedemptionRecord()` +- `GetAllUserRedemptionRecord()` +- `IterateUserRedemptionRecords()` + +## State + +Callbacks + +- `TransferCallback` + +Genesis + +- `UserRedemptionRecord` +- `Params` +- `RecordsPacketData` +- `NoData` +- `DepositRecord` +- `HostZoneUnbonding` +- `EpochUnbondingRecord` +- `GenesisState` + +## Queries + +- `Params` +- `GetDepositRecord` +- `AllDepositRecord` +- `GetUserRedemptionRecord` +- `AllUserRedemptionRecord` +- `AllUserRedemptionRecordForUser` +- `GetEpochUnbondingRecord` +- `AllEpochUnbondingRecord` + +## Events + +The `records` module emits does not currently emit any events. diff --git a/x/records/client/cli/query.go b/x/records/client/cli/query.go new file mode 100644 index 00000000000..0233f4e374f --- /dev/null +++ b/x/records/client/cli/query.go @@ -0,0 +1,39 @@ +package cli + +import ( + "fmt" + // "strings" + + "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" + // "github.com/cosmos/cosmos-sdk/client/flags" + // sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +// GetQueryCmd returns the cli query commands for this module +func GetQueryCmd(queryRoute string) *cobra.Command { + // Group records queries under a subcommand + cmd := &cobra.Command{ + Use: types.ModuleName, + Short: fmt.Sprintf("Querying commands for the %s module", types.ModuleName), + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + cmd.AddCommand(CmdQueryParams()) + cmd.AddCommand(CmdListUserRedemptionRecord()) + cmd.AddCommand(CmdShowUserRedemptionRecord()) + cmd.AddCommand(CmdListEpochUnbondingRecord()) + cmd.AddCommand(CmdShowEpochUnbondingRecord()) + cmd.AddCommand(CmdListDepositRecord()) + cmd.AddCommand(CmdShowDepositRecord()) + cmd.AddCommand(CmdListDepositRecordByHost()) + cmd.AddCommand(CmdLSMDeposit()) + cmd.AddCommand(CmdLSMDeposits()) + + return cmd +} diff --git a/x/records/client/cli/query_deposit_record.go b/x/records/client/cli/query_deposit_record.go new file mode 100644 index 00000000000..efdda563ae2 --- /dev/null +++ b/x/records/client/cli/query_deposit_record.go @@ -0,0 +1,105 @@ +package cli + +import ( + "context" + "strconv" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/spf13/cobra" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +func CmdListDepositRecord() *cobra.Command { + cmd := &cobra.Command{ + Use: "list-deposit-record", + Short: "list all depositRecord", + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := client.GetClientContextFromCmd(cmd) + + pageReq, err := client.ReadPageRequest(cmd.Flags()) + if err != nil { + return err + } + + queryClient := types.NewQueryClient(clientCtx) + + params := &types.QueryAllDepositRecordRequest{ + Pagination: pageReq, + } + + res, err := queryClient.DepositRecordAll(context.Background(), params) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddPaginationFlagsToCmd(cmd, cmd.Use) + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +func CmdShowDepositRecord() *cobra.Command { + cmd := &cobra.Command{ + Use: "show-deposit-record [id]", + Short: "shows a depositRecord", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := client.GetClientContextFromCmd(cmd) + + queryClient := types.NewQueryClient(clientCtx) + + id, err := strconv.ParseUint(args[0], 10, 64) + if err != nil { + return err + } + + params := &types.QueryGetDepositRecordRequest{ + Id: id, + } + + res, err := queryClient.DepositRecord(context.Background(), params) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +func CmdListDepositRecordByHost() *cobra.Command { + cmd := &cobra.Command{ + Use: "deposit-records-by-host [host]", + Short: "list all depositRecords for a given host zone", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + hostZoneId := args[0] + + clientCtx := client.GetClientContextFromCmd(cmd) + queryClient := types.NewQueryClient(clientCtx) + + res, err := queryClient.DepositRecordByHost(context.Background(), &types.QueryDepositRecordByHostRequest{ + HostZoneId: hostZoneId, + }) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} diff --git a/x/records/client/cli/query_deposit_record_test.go b/x/records/client/cli/query_deposit_record_test.go new file mode 100644 index 00000000000..22edea8740e --- /dev/null +++ b/x/records/client/cli/query_deposit_record_test.go @@ -0,0 +1,88 @@ +package cli_test + +import ( + "fmt" + "testing" + + sdkmath "cosmossdk.io/math" + tmcli "github.com/cometbft/cometbft/libs/cli" + "github.com/cosmos/cosmos-sdk/client/flags" + clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/testutil/network" + "github.com/osmosis-labs/osmosis/v27/x/records/client/cli" + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +func networkWithDepositRecordObjects(t *testing.T, n int) (*network.Network, []types.DepositRecord) { + t.Helper() + cfg := network.DefaultConfig() + state := types.GenesisState{} + require.NoError(t, cfg.Codec.UnmarshalJSON(cfg.GenesisState[types.ModuleName], &state)) + + for i := 0; i < n; i++ { + depositRecord := types.DepositRecord{ + Id: uint64(i), + Amount: sdkmath.NewInt(int64(i)), + } + state.DepositRecordList = append(state.DepositRecordList, depositRecord) + } + buf, err := cfg.Codec.MarshalJSON(&state) + require.NoError(t, err) + cfg.GenesisState[types.ModuleName] = buf + return network.New(t, cfg), state.DepositRecordList +} + +func TestListDepositRecord(t *testing.T) { + net, objs := networkWithDepositRecordObjects(t, 5) + + ctx := net.Validators[0].ClientCtx + request := func(next []byte, offset, limit uint64, total bool) []string { + args := []string{ + fmt.Sprintf("--%s=json", tmcli.OutputFlag), + } + if next == nil { + args = append(args, fmt.Sprintf("--%s=%d", flags.FlagOffset, offset)) + } else { + args = append(args, fmt.Sprintf("--%s=%s", flags.FlagPageKey, next)) + } + args = append(args, fmt.Sprintf("--%s=%d", flags.FlagLimit, limit)) + if total { + args = append(args, fmt.Sprintf("--%s", flags.FlagCountTotal)) + } + return args + } + t.Run("ByOffset", func(t *testing.T) { + step := 2 + for i := 0; i < len(objs); i += step { + args := request(nil, uint64(i), uint64(step), false) + out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListDepositRecord(), args) + require.NoError(t, err) + var resp types.QueryAllDepositRecordResponse + require.NoError(t, net.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) + require.LessOrEqual(t, len(resp.DepositRecord), step) + require.Subset(t, + objs, + resp.DepositRecord, + ) + } + }) + t.Run("ByKey", func(t *testing.T) { + step := 2 + var next []byte + for i := 0; i < len(objs); i += step { + args := request(next, 0, uint64(step), false) + out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListDepositRecord(), args) + require.NoError(t, err) + var resp types.QueryAllDepositRecordResponse + require.NoError(t, net.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) + require.LessOrEqual(t, len(resp.DepositRecord), step) + require.Subset(t, + objs, + resp.DepositRecord, + ) + next = resp.Pagination.NextKey + } + }) +} diff --git a/x/records/client/cli/query_epoch_unbonding_record.go b/x/records/client/cli/query_epoch_unbonding_record.go new file mode 100644 index 00000000000..b5a55c7b30d --- /dev/null +++ b/x/records/client/cli/query_epoch_unbonding_record.go @@ -0,0 +1,78 @@ +package cli + +import ( + "context" + "strconv" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/spf13/cobra" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +func CmdListEpochUnbondingRecord() *cobra.Command { + cmd := &cobra.Command{ + Use: "list-epoch-unbonding-record", + Short: "list all EpochUnbondingRecord", + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := client.GetClientContextFromCmd(cmd) + + pageReq, err := client.ReadPageRequest(cmd.Flags()) + if err != nil { + return err + } + + queryClient := types.NewQueryClient(clientCtx) + + params := &types.QueryAllEpochUnbondingRecordRequest{ + Pagination: pageReq, + } + + res, err := queryClient.EpochUnbondingRecordAll(context.Background(), params) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddPaginationFlagsToCmd(cmd, cmd.Use) + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +func CmdShowEpochUnbondingRecord() *cobra.Command { + cmd := &cobra.Command{ + Use: "show-epoch-unbonding-record [id]", + Short: "shows a EpochUnbondingRecord", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := client.GetClientContextFromCmd(cmd) + + queryClient := types.NewQueryClient(clientCtx) + + epochNumber, err := strconv.ParseUint(args[0], 10, 64) + if err != nil { + return err + } + + params := &types.QueryGetEpochUnbondingRecordRequest{ + EpochNumber: epochNumber, + } + + res, err := queryClient.EpochUnbondingRecord(context.Background(), params) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} diff --git a/x/records/client/cli/query_lsm_deposits.go b/x/records/client/cli/query_lsm_deposits.go new file mode 100644 index 00000000000..4b9d07937a2 --- /dev/null +++ b/x/records/client/cli/query_lsm_deposits.go @@ -0,0 +1,93 @@ +package cli + +import ( + "context" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/spf13/cobra" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +const ( + FlagHostChainId = "host-chain-id" + FlagValidatorAddress = "validator" + FlagStatus = "status" +) + +func CmdLSMDeposit() *cobra.Command { + cmd := &cobra.Command{ + Use: "lsm-deposit [chain-id] [denom]", + Short: "shows an LSM deposit matching given denom and chain-id", + Args: cobra.ExactArgs(2), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := client.GetClientContextFromCmd(cmd) + + queryClient := types.NewQueryClient(clientCtx) + + chainId := args[0] + denom := args[1] + + params := &types.QueryLSMDepositRequest{ChainId: chainId, Denom: denom} + res, err := queryClient.LSMDeposit(context.Background(), params) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +func CmdLSMDeposits() *cobra.Command { + cmd := &cobra.Command{ + Use: "lsm-deposits", + Short: "shows all lsm-deposits matching optional filters", + Long: `Shows all LSM deposits with optional filters +Examples: + $ lsm-deposits + $ lsm-deposits --host-chain-id=[chain-id] + $ lsm-deposits --host-chain-id=[chain-id] validator=[validator-address] + $ lsm-deposits --host-chain-id=[chain-id] --status=[status] +`, + Args: cobra.ExactArgs(0), + RunE: func(cmd *cobra.Command, args []string) error { + chainId, err := cmd.Flags().GetString(FlagHostChainId) + if err != nil { + return err + } + validatorAddress, err := cmd.Flags().GetString(FlagValidatorAddress) + if err != nil { + return err + } + status, err := cmd.Flags().GetString(FlagStatus) + if err != nil { + return err + } + + clientCtx := client.GetClientContextFromCmd(cmd) + + queryClient := types.NewQueryClient(clientCtx) + + params := &types.QueryLSMDepositsRequest{ChainId: chainId, ValidatorAddress: validatorAddress, Status: status} + res, err := queryClient.LSMDeposits(context.Background(), params) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + cmd.Flags().String(FlagHostChainId, "", "The chainId for host zone") + cmd.Flags().String(FlagValidatorAddress, "", "The validator address") + cmd.Flags().String(FlagStatus, "", "The status") + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} diff --git a/x/records/client/cli/query_params.go b/x/records/client/cli/query_params.go new file mode 100644 index 00000000000..e85f54cc515 --- /dev/null +++ b/x/records/client/cli/query_params.go @@ -0,0 +1,35 @@ +package cli + +import ( + "context" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/spf13/cobra" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +func CmdQueryParams() *cobra.Command { + cmd := &cobra.Command{ + Use: "params", + Short: "shows the parameters of the module", + Args: cobra.NoArgs, + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := client.GetClientContextFromCmd(cmd) + + queryClient := types.NewQueryClient(clientCtx) + + res, err := queryClient.Params(context.Background(), &types.QueryParamsRequest{}) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} diff --git a/x/records/client/cli/query_user_redemption_record.go b/x/records/client/cli/query_user_redemption_record.go new file mode 100644 index 00000000000..706757fc7ac --- /dev/null +++ b/x/records/client/cli/query_user_redemption_record.go @@ -0,0 +1,74 @@ +package cli + +import ( + "context" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/spf13/cobra" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +func CmdListUserRedemptionRecord() *cobra.Command { + cmd := &cobra.Command{ + Use: "list-user-redemption-record", + Short: "list all userRedemptionRecord", + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := client.GetClientContextFromCmd(cmd) + + pageReq, err := client.ReadPageRequest(cmd.Flags()) + if err != nil { + return err + } + + queryClient := types.NewQueryClient(clientCtx) + + params := &types.QueryAllUserRedemptionRecordRequest{ + Pagination: pageReq, + } + + res, err := queryClient.UserRedemptionRecordAll(context.Background(), params) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddPaginationFlagsToCmd(cmd, cmd.Use) + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +func CmdShowUserRedemptionRecord() *cobra.Command { + cmd := &cobra.Command{ + Use: "show-user-redemption-record [id]", + Short: "shows a userRedemptionRecord", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := client.GetClientContextFromCmd(cmd) + + queryClient := types.NewQueryClient(clientCtx) + + id := args[0] + + params := &types.QueryGetUserRedemptionRecordRequest{ + Id: id, + } + + res, err := queryClient.UserRedemptionRecord(context.Background(), params) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} diff --git a/x/records/client/cli/query_user_redemption_record_test.go b/x/records/client/cli/query_user_redemption_record_test.go new file mode 100644 index 00000000000..14f5508d0fa --- /dev/null +++ b/x/records/client/cli/query_user_redemption_record_test.go @@ -0,0 +1,157 @@ +package cli_test + +import ( + "fmt" + "strconv" + "testing" + + tmcli "github.com/cometbft/cometbft/libs/cli" + "github.com/cosmos/cosmos-sdk/client/flags" + clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" + "github.com/stretchr/testify/require" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + sdkmath "cosmossdk.io/math" + + "github.com/osmosis-labs/osmosis/v27/testutil/network" + "github.com/osmosis-labs/osmosis/v27/x/records/client/cli" + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +// TODO [cleanup] - Migrate to new CLI testing framework +func networkWithUserRedemptionRecordObjects(t *testing.T, n int) (*network.Network, []types.UserRedemptionRecord) { + t.Helper() + cfg := network.DefaultConfig() + state := types.GenesisState{} + require.NoError(t, cfg.Codec.UnmarshalJSON(cfg.GenesisState[types.ModuleName], &state)) + + for i := 0; i < n; i++ { + userRedemptionRecord := types.UserRedemptionRecord{ + Id: strconv.Itoa(i), + NativeTokenAmount: sdkmath.NewInt(int64(i)), + StTokenAmount: sdkmath.NewInt(int64(i)), + } + state.UserRedemptionRecordList = append(state.UserRedemptionRecordList, userRedemptionRecord) + } + buf, err := cfg.Codec.MarshalJSON(&state) + require.NoError(t, err) + cfg.GenesisState[types.ModuleName] = buf + return network.New(t, cfg), state.UserRedemptionRecordList +} + +func TestShowUserRedemptionRecord(t *testing.T) { + net, objs := networkWithUserRedemptionRecordObjects(t, 2) + + ctx := net.Validators[0].ClientCtx + common := []string{ + fmt.Sprintf("--%s=json", tmcli.OutputFlag), + } + for _, tc := range []struct { + desc string + id string + args []string + err error + obj types.UserRedemptionRecord + }{ + { + desc: "found", + id: objs[0].Id, + args: common, + obj: objs[0], + }, + { + desc: "not found", + id: "not_found", + args: common, + err: status.Error(codes.NotFound, "not found"), + }, + } { + tc := tc + t.Run(tc.desc, func(t *testing.T) { + args := []string{tc.id} + args = append(args, tc.args...) + out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdShowUserRedemptionRecord(), args) + if tc.err != nil { + stat, ok := status.FromError(tc.err) + require.True(t, ok) + require.ErrorIs(t, stat.Err(), tc.err) + } else { + require.NoError(t, err) + var resp types.QueryGetUserRedemptionRecordResponse + require.NoError(t, net.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) + require.NotNil(t, resp.UserRedemptionRecord) + require.Equal(t, + &tc.obj, + &resp.UserRedemptionRecord, + ) + } + }) + } +} + +func TestListUserRedemptionRecord(t *testing.T) { + net, objs := networkWithUserRedemptionRecordObjects(t, 5) + + ctx := net.Validators[0].ClientCtx + request := func(next []byte, offset, limit uint64, total bool) []string { + args := []string{ + fmt.Sprintf("--%s=json", tmcli.OutputFlag), + } + if next == nil { + args = append(args, fmt.Sprintf("--%s=%d", flags.FlagOffset, offset)) + } else { + args = append(args, fmt.Sprintf("--%s=%s", flags.FlagPageKey, next)) + } + args = append(args, fmt.Sprintf("--%s=%d", flags.FlagLimit, limit)) + if total { + args = append(args, fmt.Sprintf("--%s", flags.FlagCountTotal)) + } + return args + } + t.Run("ByOffset", func(t *testing.T) { + step := 2 + for i := 0; i < len(objs); i += step { + args := request(nil, uint64(i), uint64(step), false) + out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListUserRedemptionRecord(), args) + require.NoError(t, err) + var resp types.QueryAllUserRedemptionRecordResponse + require.NoError(t, net.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) + require.LessOrEqual(t, len(resp.UserRedemptionRecord), step) + require.Subset(t, + objs, + resp.UserRedemptionRecord, + ) + } + }) + t.Run("ByKey", func(t *testing.T) { + step := 2 + var next []byte + for i := 0; i < len(objs); i += step { + args := request(next, 0, uint64(step), false) + out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListUserRedemptionRecord(), args) + require.NoError(t, err) + var resp types.QueryAllUserRedemptionRecordResponse + require.NoError(t, net.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) + require.LessOrEqual(t, len(resp.UserRedemptionRecord), step) + require.Subset(t, + objs, + resp.UserRedemptionRecord, + ) + next = resp.Pagination.NextKey + } + }) + t.Run("Total", func(t *testing.T) { + args := request(nil, 0, uint64(len(objs)), true) + out, err := clitestutil.ExecTestCLICmd(ctx, cli.CmdListUserRedemptionRecord(), args) + require.NoError(t, err) + var resp types.QueryAllUserRedemptionRecordResponse + require.NoError(t, net.Config.Codec.UnmarshalJSON(out.Bytes(), &resp)) + require.NoError(t, err) + require.Equal(t, len(objs), int(resp.Pagination.Total)) + require.ElementsMatch(t, + objs, + resp.UserRedemptionRecord, + ) + }) +} diff --git a/x/records/client/cli/tx.go b/x/records/client/cli/tx.go new file mode 100644 index 00000000000..7f4ff5e0b36 --- /dev/null +++ b/x/records/client/cli/tx.go @@ -0,0 +1,30 @@ +package cli + +import ( + "fmt" + "time" + + "github.com/spf13/cast" + "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" + // "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +var DefaultRelativePacketTimeoutTimestamp = cast.ToUint64((time.Duration(10) * time.Minute).Nanoseconds()) + +// GetTxCmd returns the transaction commands for this module +func GetTxCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: types.ModuleName, + Short: fmt.Sprintf("%s transactions subcommands", types.ModuleName), + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + // this line is used by starport scaffolding # 1 + + return cmd +} diff --git a/x/records/keeper/callback_lsm_transfer.go b/x/records/keeper/callback_lsm_transfer.go new file mode 100644 index 00000000000..c689fa93ee6 --- /dev/null +++ b/x/records/keeper/callback_lsm_transfer.go @@ -0,0 +1,55 @@ +package keeper + +import ( + "github.com/osmosis-labs/osmosis/v27/utils" + icacallbackstypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + "github.com/osmosis-labs/osmosis/v27/x/records/types" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/gogoproto/proto" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" +) + +// Callback after an LSM token is IBC tranferred to the host zone +// +// If successful: mark the LSM Token status as DETOKENIZATION_QUEUE +// If failure: mark the LSM Token status as FAILED +// If timeout: revert the LSM Token status back to TRANSFER_QUEUE so it gets resubmitted +func (k Keeper) LSMTransferCallback(ctx sdk.Context, packet channeltypes.Packet, ackResponse *icacallbackstypes.AcknowledgementResponse, args []byte) error { + // Fetch callback args + transferCallback := types.TransferLSMTokenCallback{} + if err := proto.Unmarshal(args, &transferCallback); err != nil { + return errorsmod.Wrapf(types.ErrUnmarshalFailure, "unable to unmarshal LSM transfer callback: %s", err.Error()) + } + deposit := *transferCallback.Deposit + chainId := deposit.ChainId + k.Logger(ctx).Info(utils.LogICACallbackWithHostZone(chainId, IBCCallbacksID_LSMTransfer, "Starting LSM transfer callback")) + + // If timeout, update the status to TRANSFER_QUEUE so that it gets resubmitted + if ackResponse.Status == icacallbackstypes.AckResponseStatus_TIMEOUT { + k.Logger(ctx).Error(utils.LogICACallbackStatusWithHostZone(chainId, IBCCallbacksID_LSMTransfer, + icacallbackstypes.AckResponseStatus_TIMEOUT, packet)) + k.Logger(ctx).Error(utils.LogICACallbackWithHostZone(chainId, IBCCallbacksID_LSMTransfer, "Retrying transfer")) + + k.UpdateLSMTokenDepositStatus(ctx, deposit, types.LSMTokenDeposit_TRANSFER_QUEUE) + return nil + } + + // If the transfer failed, update the status to FAILED + if ackResponse.Status == icacallbackstypes.AckResponseStatus_FAILURE { + k.Logger(ctx).Error(utils.LogICACallbackStatusWithHostZone(chainId, IBCCallbacksID_LSMTransfer, + icacallbackstypes.AckResponseStatus_FAILURE, packet)) + + k.UpdateLSMTokenDepositStatus(ctx, deposit, types.LSMTokenDeposit_TRANSFER_FAILED) + return nil + } + + // If the transfer was successful, update the status to DETOKENIZATION_QUEUE + k.Logger(ctx).Info(utils.LogICACallbackStatusWithHostZone(chainId, IBCCallbacksID_LSMTransfer, + icacallbackstypes.AckResponseStatus_SUCCESS, packet)) + + k.UpdateLSMTokenDepositStatus(ctx, deposit, types.LSMTokenDeposit_DETOKENIZATION_QUEUE) + + return nil +} diff --git a/x/records/keeper/callback_lsm_transfer_test.go b/x/records/keeper/callback_lsm_transfer_test.go new file mode 100644 index 00000000000..658f9469a36 --- /dev/null +++ b/x/records/keeper/callback_lsm_transfer_test.go @@ -0,0 +1,100 @@ +package keeper_test + +import ( + _ "github.com/stretchr/testify/suite" + + "github.com/cosmos/gogoproto/proto" + + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + + icacallbackstypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +var LSMTokenDenom = "cosmosvaloperxxx/42" + +func (s *KeeperTestSuite) SetupLSMTransferCallback() []byte { + // we need a valid ibc denom here or the transfer will fail + prefixedDenom := transfertypes.GetPrefixedDenom(transfertypes.PortID, ibctesting.FirstChannelID, LSMTokenDenom) + denomTrace := transfertypes.ParseDenomTrace(prefixedDenom) + ibcDenom := denomTrace.IBCDenom() + s.App.TransferKeeper.SetDenomTrace(s.Ctx, denomTrace) + + deposit := types.LSMTokenDeposit{ + ChainId: HostChainId, + Denom: LSMTokenDenom, + IbcDenom: ibcDenom, + Status: types.LSMTokenDeposit_TRANSFER_IN_PROGRESS, + } + s.App.RecordsKeeper.SetLSMTokenDeposit(s.Ctx, deposit) + + callbackArgs := types.TransferLSMTokenCallback{ + Deposit: &deposit, + } + callbackArgsBz, err := proto.Marshal(&callbackArgs) + s.Require().NoError(err, "no error expected when marshalling callback args") + + return callbackArgsBz +} + +func (s *KeeperTestSuite) TestLSMTransferCallback_Successful() { + callbackArgsBz := s.SetupLSMTransferCallback() + + // Call the callback with a successful response + ackSuccess := &icacallbackstypes.AcknowledgementResponse{ + Status: icacallbackstypes.AckResponseStatus_SUCCESS, + } + err := s.App.RecordsKeeper.LSMTransferCallback(s.Ctx, channeltypes.Packet{}, ackSuccess, callbackArgsBz) + s.Require().NoError(err, "no error expected when executing callback") + + // Confirm deposit has been updated to DETOKENIZATION_QUEUE + record, found := s.App.RecordsKeeper.GetLSMTokenDeposit(s.Ctx, HostChainId, LSMTokenDenom) + s.Require().True(found, "deposit should have been found but was not") + s.Require().Equal(types.LSMTokenDeposit_DETOKENIZATION_QUEUE.String(), record.Status.String(), "deposit status") +} + +func (s *KeeperTestSuite) TestLSMTransferCallback_InvalidCallbackArgs() { + s.SetupLSMTransferCallback() + + // Call the callback with a successful ack, but invalid callback args + invalidCallbackArgs := []byte{1, 2, 3} + ackSuccess := &icacallbackstypes.AcknowledgementResponse{ + Status: icacallbackstypes.AckResponseStatus_SUCCESS, + } + err := s.App.RecordsKeeper.LSMTransferCallback(s.Ctx, channeltypes.Packet{}, ackSuccess, invalidCallbackArgs) + s.Require().ErrorContains(err, "unable to unmarshal LSM transfer callback") +} + +func (s *KeeperTestSuite) TestLSMTransferCallback_AckTimeout() { + callbackArgsBz := s.SetupLSMTransferCallback() + + // Call the callback with a timed-out response + ackTimeout := &icacallbackstypes.AcknowledgementResponse{ + Status: icacallbackstypes.AckResponseStatus_TIMEOUT, + } + err := s.App.RecordsKeeper.LSMTransferCallback(s.Ctx, channeltypes.Packet{}, ackTimeout, callbackArgsBz) + s.Require().NoError(err, "no error expected when executing callback") + + // Confirm deposit has been updated to status TRANSFER_QUEUE + record, found := s.App.RecordsKeeper.GetLSMTokenDeposit(s.Ctx, HostChainId, LSMTokenDenom) + s.Require().True(found, "deposit should have been found but was not") + s.Require().Equal(types.LSMTokenDeposit_TRANSFER_QUEUE.String(), record.Status.String(), "deposit status") +} + +func (s *KeeperTestSuite) TestLSMTransferCallback_AckFailed() { + callbackArgsBz := s.SetupLSMTransferCallback() + + // Call the callback with an ack-failure response + ackFailure := &icacallbackstypes.AcknowledgementResponse{ + Status: icacallbackstypes.AckResponseStatus_FAILURE, + } + err := s.App.RecordsKeeper.LSMTransferCallback(s.Ctx, channeltypes.Packet{}, ackFailure, callbackArgsBz) + s.Require().NoError(err) + + // Confirm deposit has been updated to status FAILED + record, found := s.App.RecordsKeeper.GetLSMTokenDeposit(s.Ctx, HostChainId, LSMTokenDenom) + s.Require().True(found, "deposit should have been found but was not") + s.Require().Equal(types.LSMTokenDeposit_TRANSFER_FAILED.String(), record.Status.String(), "deposit status") +} diff --git a/x/records/keeper/callback_native_transfer.go b/x/records/keeper/callback_native_transfer.go new file mode 100644 index 00000000000..48af36cd638 --- /dev/null +++ b/x/records/keeper/callback_native_transfer.go @@ -0,0 +1,82 @@ +package keeper + +import ( + "fmt" + + ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + + icacallbackstypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + "github.com/osmosis-labs/osmosis/v27/x/records/types" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/gogoproto/proto" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" +) + +func (k Keeper) MarshalTransferCallbackArgs(ctx sdk.Context, delegateCallback types.TransferCallback) ([]byte, error) { + out, err := proto.Marshal(&delegateCallback) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("MarshalTransferCallbackArgs %v", err.Error())) + return nil, err + } + return out, nil +} + +func (k Keeper) UnmarshalTransferCallbackArgs(ctx sdk.Context, delegateCallback []byte) (*types.TransferCallback, error) { + unmarshalledTransferCallback := types.TransferCallback{} + if err := proto.Unmarshal(delegateCallback, &unmarshalledTransferCallback); err != nil { + k.Logger(ctx).Error(fmt.Sprintf("UnmarshalTransferCallbackArgs %v", err.Error())) + return nil, err + } + return &unmarshalledTransferCallback, nil +} + +func (k Keeper) TransferCallback(ctx sdk.Context, packet channeltypes.Packet, ackResponse *icacallbackstypes.AcknowledgementResponse, args []byte) error { + k.Logger(ctx).Info("TransferCallback executing", "packet", packet) + + // deserialize the args + transferCallbackData, err := k.UnmarshalTransferCallbackArgs(ctx, args) + if err != nil { + return errorsmod.Wrapf(types.ErrUnmarshalFailure, "cannot unmarshal transfer callback args: %s", err.Error()) + } + k.Logger(ctx).Info(fmt.Sprintf("TransferCallback %v", transferCallbackData)) + depositRecord, found := k.GetDepositRecord(ctx, transferCallbackData.DepositRecordId) + if !found { + k.Logger(ctx).Error(fmt.Sprintf("TransferCallback deposit record not found, packet %v", packet)) + return errorsmod.Wrapf(types.ErrUnknownDepositRecord, "deposit record not found %d", transferCallbackData.DepositRecordId) + } + + if ackResponse.Status == icacallbackstypes.AckResponseStatus_TIMEOUT { + // timeout + // put record back in the TRANSFER_QUEUE + depositRecord.Status = types.DepositRecord_TRANSFER_QUEUE + k.SetDepositRecord(ctx, depositRecord) + k.Logger(ctx).Error(fmt.Sprintf("TransferCallback timeout, ack is nil, packet %v", packet)) + return nil + } + + if ackResponse.Status == icacallbackstypes.AckResponseStatus_FAILURE { + // error on host chain + // put record back in the TRANSFER_QUEUE + depositRecord.Status = types.DepositRecord_TRANSFER_QUEUE + k.SetDepositRecord(ctx, depositRecord) + k.Logger(ctx).Error(fmt.Sprintf("Error %s", ackResponse.Error)) + return nil + } + + var data ibctransfertypes.FungibleTokenPacketData + if err := ibctransfertypes.ModuleCdc.UnmarshalJSON(packet.GetData(), &data); err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Error unmarshalling packet %v", err.Error())) + return errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "cannot unmarshal ICS-20 transfer packet data: %s", err.Error()) + } + k.Logger(ctx).Info(fmt.Sprintf("TransferCallback unmarshalled FungibleTokenPacketData %v", data)) + + // put the deposit record in the DELEGATION_QUEUE + depositRecord.Status = types.DepositRecord_DELEGATION_QUEUE + k.SetDepositRecord(ctx, depositRecord) + k.Logger(ctx).Info(fmt.Sprintf("\t [IBC-TRANSFER] Deposit record updated: {%v}, status: {%s}", depositRecord.Id, depositRecord.Status.String())) + k.Logger(ctx).Info(fmt.Sprintf("[IBC-TRANSFER] success to %s", depositRecord.HostZoneId)) + return nil +} diff --git a/x/records/keeper/callback_native_transfer_test.go b/x/records/keeper/callback_native_transfer_test.go new file mode 100644 index 00000000000..d0aff473303 --- /dev/null +++ b/x/records/keeper/callback_native_transfer_test.go @@ -0,0 +1,143 @@ +package keeper_test + +import ( + "fmt" + + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + _ "github.com/stretchr/testify/suite" + + sdkmath "cosmossdk.io/math" + + icacallbacktypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + "github.com/osmosis-labs/osmosis/v27/x/records/types" + recordtypes "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +const chainId = "GAIA" + +type TransferCallbackState struct { + callbackArgs types.TransferCallback +} + +type TransferCallbackArgs struct { + packet channeltypes.Packet + ackResponse *icacallbacktypes.AcknowledgementResponse + args []byte +} + +type TransferCallbackTestCase struct { + initialState TransferCallbackState + validArgs TransferCallbackArgs +} + +func (s *KeeperTestSuite) SetupTransferCallback() TransferCallbackTestCase { + balanceToStake := sdkmath.NewInt(1_000_000) + depositRecord := recordtypes.DepositRecord{ + Id: 1, + DepositEpochNumber: 1, + HostZoneId: chainId, + Amount: balanceToStake, + Status: recordtypes.DepositRecord_TRANSFER_QUEUE, + } + s.App.RecordsKeeper.SetDepositRecord(s.Ctx, depositRecord) + packet := channeltypes.Packet{Data: s.MarshalledICS20PacketData()} + ackResponse := icacallbacktypes.AcknowledgementResponse{Status: icacallbacktypes.AckResponseStatus_SUCCESS} + callbackArgs := types.TransferCallback{ + DepositRecordId: depositRecord.Id, + } + callbackArgsBz, err := s.App.RecordsKeeper.MarshalTransferCallbackArgs(s.Ctx, callbackArgs) + s.Require().NoError(err) + + return TransferCallbackTestCase{ + initialState: TransferCallbackState{ + callbackArgs: callbackArgs, + }, + validArgs: TransferCallbackArgs{ + packet: packet, + ackResponse: &ackResponse, + args: callbackArgsBz, + }, + } +} + +func (s *KeeperTestSuite) TestTransferCallback_Successful() { + tc := s.SetupTransferCallback() + initialState := tc.initialState + validArgs := tc.validArgs + + err := s.App.RecordsKeeper.TransferCallback(s.Ctx, validArgs.packet, validArgs.ackResponse, validArgs.args) + s.Require().NoError(err) + + // Confirm deposit record has been updated to DELEGATION_QUEUE + record, found := s.App.RecordsKeeper.GetDepositRecord(s.Ctx, initialState.callbackArgs.DepositRecordId) + s.Require().True(found) + s.Require().Equal(record.Status, recordtypes.DepositRecord_DELEGATION_QUEUE, "deposit record status should be DELEGATION_QUEUE") +} + +func (s *KeeperTestSuite) checkTransferStateIfCallbackFailed(tc TransferCallbackTestCase) { + record, found := s.App.RecordsKeeper.GetDepositRecord(s.Ctx, tc.initialState.callbackArgs.DepositRecordId) + s.Require().True(found) + s.Require().Equal(record.Status, recordtypes.DepositRecord_TRANSFER_QUEUE, "deposit record status should be TRANSFER_QUEUE") +} + +func (s *KeeperTestSuite) TestTransferCallback_TransferCallbackTimeout() { + tc := s.SetupTransferCallback() + + // Update the ack response to indicate a timeout + timeoutArgs := tc.validArgs + timeoutArgs.ackResponse.Status = icacallbacktypes.AckResponseStatus_TIMEOUT + + err := s.App.RecordsKeeper.TransferCallback(s.Ctx, timeoutArgs.packet, timeoutArgs.ackResponse, timeoutArgs.args) + s.Require().NoError(err) + s.checkTransferStateIfCallbackFailed(tc) +} + +func (s *KeeperTestSuite) TestTransferCallback_TransferCallbackErrorOnHost() { + tc := s.SetupTransferCallback() + + // an error ack means the tx failed on the host + errorArgs := tc.validArgs + errorArgs.ackResponse.Status = icacallbacktypes.AckResponseStatus_TIMEOUT + + err := s.App.RecordsKeeper.TransferCallback(s.Ctx, errorArgs.packet, errorArgs.ackResponse, errorArgs.args) + s.Require().NoError(err) + + // Confirm deposit record status is reverted + record, found := s.App.RecordsKeeper.GetDepositRecord(s.Ctx, tc.initialState.callbackArgs.DepositRecordId) + s.Require().True(found) + s.Require().Equal(record.Status, types.DepositRecord_TRANSFER_QUEUE, "DepositRecord is put back in the TRANSFER_QUEUE after a failed transfer") + s.checkTransferStateIfCallbackFailed(tc) +} + +func (s *KeeperTestSuite) TestTransferCallback_WrongCallbackArgs() { + tc := s.SetupTransferCallback() + invalidArgs := tc.validArgs + + // random args should cause the callback to fail + invalidCallbackArgs := []byte("random bytes") + + err := s.App.RecordsKeeper.TransferCallback(s.Ctx, invalidArgs.packet, invalidArgs.ackResponse, invalidCallbackArgs) + s.Require().EqualError(err, "cannot unmarshal transfer callback args: unexpected EOF: cannot unmarshal") + s.checkTransferStateIfCallbackFailed(tc) +} + +func (s *KeeperTestSuite) TestTransferCallback_DepositRecordNotFound() { + tc := s.SetupTransferCallback() + + // Remove deposit record from store + s.App.RecordsKeeper.RemoveDepositRecord(s.Ctx, tc.initialState.callbackArgs.DepositRecordId) + + err := s.App.RecordsKeeper.TransferCallback(s.Ctx, tc.validArgs.packet, tc.validArgs.ackResponse, tc.validArgs.args) + s.Require().EqualError(err, fmt.Sprintf("deposit record not found %d: unknown deposit record", tc.initialState.callbackArgs.DepositRecordId)) +} + +func (s *KeeperTestSuite) TestTransferCallback_PacketUnmarshallingError() { + tc := s.SetupTransferCallback() + + // Update the data field within the packet so that the ICS transfer packet cannot be unmarshalled + invalidArgs := tc.validArgs + invalidArgs.packet.Data = []byte("random bytes") + + err := s.App.RecordsKeeper.TransferCallback(s.Ctx, invalidArgs.packet, invalidArgs.ackResponse, invalidArgs.args) + s.Require().EqualError(err, "cannot unmarshal ICS-20 transfer packet data: invalid character 'r' looking for beginning of value: unknown request") +} diff --git a/x/records/keeper/callbacks.go b/x/records/keeper/callbacks.go new file mode 100644 index 00000000000..606e2102a95 --- /dev/null +++ b/x/records/keeper/callbacks.go @@ -0,0 +1,15 @@ +package keeper + +import ( + icacallbackstypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" +) + +const IBCCallbacksID_NativeTransfer = "transfer" +const IBCCallbacksID_LSMTransfer = "lsm-transfer" + +func (k Keeper) Callbacks() icacallbackstypes.ModuleCallbacks { + return []icacallbackstypes.ICACallback{ + {CallbackId: IBCCallbacksID_NativeTransfer, CallbackFunc: icacallbackstypes.ICACallbackFunction(k.TransferCallback)}, + {CallbackId: IBCCallbacksID_LSMTransfer, CallbackFunc: icacallbackstypes.ICACallbackFunction(k.LSMTransferCallback)}, + } +} diff --git a/x/records/keeper/deposit_record.go b/x/records/keeper/deposit_record.go new file mode 100644 index 00000000000..3ebc2251bd9 --- /dev/null +++ b/x/records/keeper/deposit_record.go @@ -0,0 +1,115 @@ +package keeper + +import ( + "encoding/binary" + + "cosmossdk.io/store/prefix" + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +// GetDepositRecordCount get the total number of depositRecord +func (k Keeper) GetDepositRecordCount(ctx sdk.Context) uint64 { + store := prefix.NewStore(ctx.KVStore(k.storeKey), []byte{}) + byteKey := types.KeyPrefix(types.DepositRecordCountKey) + bz := store.Get(byteKey) + + // Count doesn't exist: no element + if bz == nil { + return 0 + } + + // Parse bytes + return binary.BigEndian.Uint64(bz) +} + +// SetDepositRecordCount set the total number of depositRecord +func (k Keeper) SetDepositRecordCount(ctx sdk.Context, count uint64) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), []byte{}) + byteKey := types.KeyPrefix(types.DepositRecordCountKey) + bz := make([]byte, 8) + binary.BigEndian.PutUint64(bz, count) + store.Set(byteKey, bz) +} + +// AppendDepositRecord appends a depositRecord in the store with a new id and update the count +func (k Keeper) AppendDepositRecord( + ctx sdk.Context, + depositRecord types.DepositRecord, +) uint64 { + // Create the depositRecord + count := k.GetDepositRecordCount(ctx) + + // Set the ID of the appended value + depositRecord.Id = count + + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.DepositRecordKey)) + appendedValue := k.Cdc.MustMarshal(&depositRecord) + store.Set(GetDepositRecordIDBytes(depositRecord.Id), appendedValue) + + // Update depositRecord count + k.SetDepositRecordCount(ctx, count+1) + + return count +} + +// SetDepositRecord set a specific depositRecord in the store +func (k Keeper) SetDepositRecord(ctx sdk.Context, depositRecord types.DepositRecord) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.DepositRecordKey)) + b := k.Cdc.MustMarshal(&depositRecord) + store.Set(GetDepositRecordIDBytes(depositRecord.Id), b) +} + +// GetDepositRecord returns a depositRecord from its id +func (k Keeper) GetDepositRecord(ctx sdk.Context, id uint64) (val types.DepositRecord, found bool) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.DepositRecordKey)) + b := store.Get(GetDepositRecordIDBytes(id)) + if b == nil { + return val, false + } + k.Cdc.MustUnmarshal(b, &val) + return val, true +} + +// RemoveDepositRecord removes a depositRecord from the store +func (k Keeper) RemoveDepositRecord(ctx sdk.Context, id uint64) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.DepositRecordKey)) + store.Delete(GetDepositRecordIDBytes(id)) +} + +// GetAllDepositRecord returns all depositRecord +func (k Keeper) GetAllDepositRecord(ctx sdk.Context) (list []types.DepositRecord) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.DepositRecordKey)) + iterator := storetypes.KVStorePrefixIterator(store, []byte{}) + + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + var val types.DepositRecord + k.Cdc.MustUnmarshal(iterator.Value(), &val) + list = append(list, val) + } + + return +} + +// GetDepositRecordIDBytes returns the byte representation of the ID +func GetDepositRecordIDBytes(id uint64) []byte { + bz := make([]byte, 8) + binary.BigEndian.PutUint64(bz, id) + return bz +} + +func (k Keeper) GetTransferDepositRecordByEpochAndChain(ctx sdk.Context, epochNumber uint64, chainId string) (val *types.DepositRecord, found bool) { + records := k.GetAllDepositRecord(ctx) + for _, depositRecord := range records { + if depositRecord.DepositEpochNumber == epochNumber && + depositRecord.HostZoneId == chainId && + depositRecord.Status == types.DepositRecord_TRANSFER_QUEUE { + return &depositRecord, true + } + } + return nil, false +} diff --git a/x/records/keeper/epoch_unbonding_record.go b/x/records/keeper/epoch_unbonding_record.go new file mode 100644 index 00000000000..55164675e89 --- /dev/null +++ b/x/records/keeper/epoch_unbonding_record.go @@ -0,0 +1,160 @@ +package keeper + +import ( + "encoding/binary" + "fmt" + + "cosmossdk.io/store/prefix" + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + + errorsmod "cosmossdk.io/errors" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +// SetEpochUnbondingRecord set a specific epochUnbondingRecord in the store +func (k Keeper) SetEpochUnbondingRecord(ctx sdk.Context, epochUnbondingRecord types.EpochUnbondingRecord) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.EpochUnbondingRecordKey)) + b := k.Cdc.MustMarshal(&epochUnbondingRecord) + store.Set(GetEpochUnbondingRecordIDBytes(epochUnbondingRecord.EpochNumber), b) +} + +// GetEpochUnbondingRecord returns a epochUnbondingRecord from its id +func (k Keeper) GetEpochUnbondingRecord(ctx sdk.Context, epochNumber uint64) (val types.EpochUnbondingRecord, found bool) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.EpochUnbondingRecordKey)) + b := store.Get(GetEpochUnbondingRecordIDBytes(epochNumber)) + if b == nil { + return val, false + } + k.Cdc.MustUnmarshal(b, &val) + return val, true +} + +// RemoveEpochUnbondingRecord removes a epochUnbondingRecord from the store +func (k Keeper) RemoveEpochUnbondingRecord(ctx sdk.Context, epochNumber uint64) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.EpochUnbondingRecordKey)) + store.Delete(GetEpochUnbondingRecordIDBytes(epochNumber)) +} + +// GetAllEpochUnbondingRecord returns all epochUnbondingRecord +func (k Keeper) GetAllEpochUnbondingRecord(ctx sdk.Context) (list []types.EpochUnbondingRecord) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.EpochUnbondingRecordKey)) + iterator := storetypes.KVStorePrefixIterator(store, []byte{}) + + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + var val types.EpochUnbondingRecord + k.Cdc.MustUnmarshal(iterator.Value(), &val) + list = append(list, val) + } + + return +} + +// GetAllPreviousEpochUnbondingRecords returns all epochUnbondingRecords prior to a given epoch +func (k Keeper) GetAllPreviousEpochUnbondingRecords(ctx sdk.Context, epochNumber uint64) (list []types.EpochUnbondingRecord) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.EpochUnbondingRecordKey)) + iterator := storetypes.KVStorePrefixIterator(store, []byte{}) + + defer iterator.Close() + + // these aren't guaranteed to be ordered + for ; iterator.Valid(); iterator.Next() { + var val types.EpochUnbondingRecord + k.Cdc.MustUnmarshal(iterator.Value(), &val) + if val.EpochNumber < epochNumber { + list = append(list, val) + } + } + + return +} + +// GetEpochUnbondingRecordIDBytes returns the byte representation of the ID +func GetEpochUnbondingRecordIDBytes(id uint64) []byte { + bz := make([]byte, 8) + binary.BigEndian.PutUint64(bz, id) + return bz +} + +// GetEpochUnbondingRecordIDFromBytes returns ID in uint64 format from a byte array +func GetEpochUnbondingRecordIDFromBytes(bz []byte) uint64 { + return binary.BigEndian.Uint64(bz) +} + +// GetEpochUnbondingRecordByEpoch returns a epochUnbondingRecord from its epochNumber +func (k Keeper) GetHostZoneUnbondingByChainId(ctx sdk.Context, epochNumber uint64, chainId string) (val *types.HostZoneUnbonding, found bool) { + epochUnbondingRecord, found := k.GetEpochUnbondingRecord(ctx, epochNumber) + if !found { + return nil, false + } + hostZoneUnbondings := epochUnbondingRecord.HostZoneUnbondings + for _, hzUnbondingRecord := range hostZoneUnbondings { + if hzUnbondingRecord.HostZoneId == chainId { + return hzUnbondingRecord, true + } + } + return &types.HostZoneUnbonding{}, false +} + +// Adds a HostZoneUnbonding to an EpochUnbondingRecord +func (k Keeper) AddHostZoneToEpochUnbondingRecord( + ctx sdk.Context, + epochNumber uint64, + chainId string, + hzu types.HostZoneUnbonding, +) (eur types.EpochUnbondingRecord, err error) { + epochUnbondingRecord, found := k.GetEpochUnbondingRecord(ctx, epochNumber) + if !found { + return types.EpochUnbondingRecord{}, types.ErrEpochUnbondingRecordNotFound.Wrapf("epoch number %d", epochNumber) + } + + // Check if the hzu is already in the epoch unbonding record - if so, replace it + hzuAlreadyExists := false + for i, hostZoneUnbonding := range epochUnbondingRecord.HostZoneUnbondings { + if hostZoneUnbonding.HostZoneId == chainId { + epochUnbondingRecord.HostZoneUnbondings[i] = &hzu + hzuAlreadyExists = true + break + } + } + + // If the hzu didn't already exist, add a new record + if !hzuAlreadyExists { + epochUnbondingRecord.HostZoneUnbondings = append(epochUnbondingRecord.HostZoneUnbondings, &hzu) + } + return epochUnbondingRecord, nil +} + +// Stores a host zone unbonding record - set via an epoch unbonding record +func (k Keeper) SetHostZoneUnbondingRecord(ctx sdk.Context, epochNumber uint64, chainId string, hostZoneUnbonding types.HostZoneUnbonding) error { + epochUnbondingRecord, err := k.AddHostZoneToEpochUnbondingRecord(ctx, epochNumber, chainId, hostZoneUnbonding) + if err != nil { + return err + } + k.SetEpochUnbondingRecord(ctx, epochUnbondingRecord) + return nil +} + +// Updates the status for a given host zone across relevant epoch unbonding record IDs +func (k Keeper) SetHostZoneUnbondingStatus(ctx sdk.Context, chainId string, epochUnbondingRecordIds []uint64, status types.HostZoneUnbonding_Status) error { + for _, epochUnbondingRecordId := range epochUnbondingRecordIds { + k.Logger(ctx).Info(fmt.Sprintf("Updating host zone unbondings on EpochUnbondingRecord %d to status %s", epochUnbondingRecordId, status.String())) + + // fetch the host zone unbonding + hostZoneUnbonding, found := k.GetHostZoneUnbondingByChainId(ctx, epochUnbondingRecordId, chainId) + if !found { + return errorsmod.Wrapf(types.ErrHostUnbondingRecordNotFound, "epoch number %d, chain %s", + epochUnbondingRecordId, chainId) + } + hostZoneUnbonding.Status = status + + // save the updated hzu on the epoch unbonding record + if err := k.SetHostZoneUnbondingRecord(ctx, epochUnbondingRecordId, chainId, *hostZoneUnbonding); err != nil { + return err + } + } + return nil +} diff --git a/x/records/keeper/epoch_unbonding_record_test.go b/x/records/keeper/epoch_unbonding_record_test.go new file mode 100644 index 00000000000..8c5cf247e23 --- /dev/null +++ b/x/records/keeper/epoch_unbonding_record_test.go @@ -0,0 +1,220 @@ +package keeper_test + +import ( + sdkmath "cosmossdk.io/math" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +// Helper function to create a new host zone unbonding record, filling in the sdkmath.Int's +// so that they can be compared +func newHostZoneUnbonding(chainId string, status types.HostZoneUnbonding_Status) types.HostZoneUnbonding { + return types.HostZoneUnbonding{ + HostZoneId: chainId, + Status: status, + StTokenAmount: sdkmath.ZeroInt(), + NativeTokenAmount: sdkmath.ZeroInt(), + NativeTokensToUnbond: sdkmath.ZeroInt(), + StTokensToBurn: sdkmath.ZeroInt(), + ClaimableNativeTokens: sdkmath.ZeroInt(), + } +} + +func (s *KeeperTestSuite) createNEpochUnbondingRecord(n int) ([]types.EpochUnbondingRecord, map[string]types.HostZoneUnbonding) { + hostZoneUnbondingsList := []types.HostZoneUnbonding{ + newHostZoneUnbonding("host-A", types.HostZoneUnbonding_UNBONDING_QUEUE), + newHostZoneUnbonding("host-B", types.HostZoneUnbonding_UNBONDING_QUEUE), + newHostZoneUnbonding("host-C", types.HostZoneUnbonding_UNBONDING_QUEUE), + } + hostZoneUnbondingsMap := make(map[string]types.HostZoneUnbonding) + for _, hostZoneUnbonding := range hostZoneUnbondingsList { + hostZoneUnbondingsMap[hostZoneUnbonding.HostZoneId] = hostZoneUnbonding + } + + epochUnbondingRecords := make([]types.EpochUnbondingRecord, n) + for epochNumber, epochUnbondingRecord := range epochUnbondingRecords { + epochUnbondingRecord.EpochNumber = uint64(epochNumber) + + unbondingsCopy := make([]*types.HostZoneUnbonding, 3) + for i := range unbondingsCopy { + hostZoneUnbonding := hostZoneUnbondingsList[i] + epochUnbondingRecord.HostZoneUnbondings = append(epochUnbondingRecord.HostZoneUnbondings, &hostZoneUnbonding) + } + + epochUnbondingRecords[epochNumber] = epochUnbondingRecord + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, epochUnbondingRecord) + } + return epochUnbondingRecords, hostZoneUnbondingsMap +} + +func (s *KeeperTestSuite) TestEpochUnbondingRecordGet() { + items, _ := s.createNEpochUnbondingRecord(10) + for _, item := range items { + got, found := s.App.RecordsKeeper.GetEpochUnbondingRecord(s.Ctx, item.EpochNumber) + s.Require().True(found) + s.Require().Equal( + &item, + &got, + ) + } +} + +func (s *KeeperTestSuite) TestEpochUnbondingRecordRemove() { + items, _ := s.createNEpochUnbondingRecord(10) + for _, item := range items { + s.App.RecordsKeeper.RemoveEpochUnbondingRecord(s.Ctx, item.EpochNumber) + _, found := s.App.RecordsKeeper.GetEpochUnbondingRecord(s.Ctx, item.EpochNumber) + s.Require().False(found) + } +} + +func (s *KeeperTestSuite) TestEpochUnbondingRecordGetAll() { + items, _ := s.createNEpochUnbondingRecord(10) + s.Require().ElementsMatch( + items, + s.App.RecordsKeeper.GetAllEpochUnbondingRecord(s.Ctx), + ) +} + +func (s *KeeperTestSuite) TestGetAllPreviousEpochUnbondingRecords() { + items, _ := s.createNEpochUnbondingRecord(10) + currentEpoch := uint64(8) + fetchedItems := items[:currentEpoch] + s.Require().ElementsMatch( + fetchedItems, + s.App.RecordsKeeper.GetAllPreviousEpochUnbondingRecords(s.Ctx, currentEpoch), + ) +} + +func (s *KeeperTestSuite) TestGetHostZoneUnbondingByChainId() { + _, hostZoneUnbondings := s.createNEpochUnbondingRecord(10) + + expectedHostZoneUnbonding := hostZoneUnbondings["host-B"] + actualHostZoneUnbonding, found := s.App.RecordsKeeper.GetHostZoneUnbondingByChainId(s.Ctx, 1, "host-B") + + s.Require().True(found) + s.Require().Equal( + *actualHostZoneUnbonding, + expectedHostZoneUnbonding, + ) +} + +func (s *KeeperTestSuite) TestAddHostZoneToEpochUnbondingRecord() { + epochUnbondingRecords, _ := s.createNEpochUnbondingRecord(3) + + epochNumber := uint64(0) + initialEpochUnbondingRecord := epochUnbondingRecords[int(epochNumber)] + + // Update host zone unbonding for host-C + updatedHostZoneUnbonding := newHostZoneUnbonding("host-C", types.HostZoneUnbonding_UNBONDING_IN_PROGRESS) + + expectedEpochUnbondingRecord := initialEpochUnbondingRecord + expectedEpochUnbondingRecord.HostZoneUnbondings[2] = &updatedHostZoneUnbonding + + updatedEpochUnbonding, err := s.App.RecordsKeeper.AddHostZoneToEpochUnbondingRecord(s.Ctx, epochNumber, "host-C", updatedHostZoneUnbonding) + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, updatedEpochUnbonding) + s.Require().NoError(err, "no error expected when updating host-C") + for i := 0; i < len(expectedEpochUnbondingRecord.HostZoneUnbondings); i++ { + expectedHostZoneUnbonding := *expectedEpochUnbondingRecord.HostZoneUnbondings[i] + actualHostZoneUnbonding := *updatedEpochUnbonding.HostZoneUnbondings[i] + s.Require().Equal(expectedHostZoneUnbonding, actualHostZoneUnbonding, "HZU %d after host-C update", i) + } + + // Add new host zone to initial epoch unbonding records + newHostZoneUnbonding := newHostZoneUnbonding("host-D", types.HostZoneUnbonding_UNBONDING_QUEUE) + expectedEpochUnbondingRecord.HostZoneUnbondings = append(expectedEpochUnbondingRecord.HostZoneUnbondings, &newHostZoneUnbonding) + + updatedEpochUnbonding, err = s.App.RecordsKeeper.AddHostZoneToEpochUnbondingRecord(s.Ctx, epochNumber, "host-D", newHostZoneUnbonding) + s.Require().NoError(err, "no error expected when adding host-D") + s.Require().Equal(expectedEpochUnbondingRecord, updatedEpochUnbonding, "EUR after host-D addition") +} + +func (s *KeeperTestSuite) TestSetHostZoneUnbondingStatus() { + initialEpochUnbondingRecords, _ := s.createNEpochUnbondingRecord(4) + + epochsToUpdate := []uint64{1, 3} + hostIdToUpdate := "host-B" + newStatus := types.HostZoneUnbonding_UNBONDING_IN_PROGRESS + + expectedEpochUnbondingRecords := initialEpochUnbondingRecords + for _, epochUnbondingRecord := range expectedEpochUnbondingRecords { + for _, epochNumberToUpdate := range epochsToUpdate { + if epochUnbondingRecord.EpochNumber == epochNumberToUpdate { + for i, hostUnbonding := range epochUnbondingRecord.HostZoneUnbondings { + if hostUnbonding.HostZoneId == hostIdToUpdate { + updatedHostZoneUnbonding := hostUnbonding + updatedHostZoneUnbonding.Status = newStatus + epochUnbondingRecord.HostZoneUnbondings[i] = updatedHostZoneUnbonding + } + } + } + } + } + + err := s.App.RecordsKeeper.SetHostZoneUnbondingStatus(s.Ctx, hostIdToUpdate, epochsToUpdate, newStatus) + s.Require().Nil(err) + + actualEpochUnbondingRecord := s.App.RecordsKeeper.GetAllEpochUnbondingRecord(s.Ctx) + s.Require().ElementsMatch( + expectedEpochUnbondingRecords, + actualEpochUnbondingRecord, + ) +} + +func (s *KeeperTestSuite) TestSetHostZoneUnbonding() { + initialAmount := sdkmath.NewInt(10) + updatedAmount := sdkmath.NewInt(99) + + // Create two epoch unbonding records, each with two host zone unbondings + epochUnbondingRecords := []types.EpochUnbondingRecord{ + { + EpochNumber: 1, + HostZoneUnbondings: []*types.HostZoneUnbonding{ + {HostZoneId: "chain-0", NativeTokenAmount: initialAmount}, + {HostZoneId: "chain-1", NativeTokenAmount: initialAmount}, + }, + }, + { + EpochNumber: 2, + HostZoneUnbondings: []*types.HostZoneUnbonding{ + {HostZoneId: "chain-0", NativeTokenAmount: initialAmount}, + {HostZoneId: "chain-1", NativeTokenAmount: initialAmount}, + }, + }, + } + for _, epochUnbondingRecord := range epochUnbondingRecords { + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, epochUnbondingRecord) + } + + // Update the amount for (epoch-1, chain-0) and (epoch-2, chain-1) + updatedHostZoneUnbonding1 := types.HostZoneUnbonding{HostZoneId: "chain-0", NativeTokenAmount: updatedAmount} + err := s.App.RecordsKeeper.SetHostZoneUnbondingRecord(s.Ctx, 1, "chain-0", updatedHostZoneUnbonding1) + s.Require().NoError(err, "no error expected when setting amount for (epoch-1, chain-0)") + + updatedHostZoneUnbonding2 := types.HostZoneUnbonding{HostZoneId: "chain-1", NativeTokenAmount: updatedAmount} + err = s.App.RecordsKeeper.SetHostZoneUnbondingRecord(s.Ctx, 2, "chain-1", updatedHostZoneUnbonding2) + s.Require().NoError(err, "no error expected when setting amount for (epoch-2, chain-1)") + + // Create the mapping of expected native amounts + expectedAmountMapping := map[uint64]map[string]sdkmath.Int{ + 1: { + "chain-0": updatedAmount, + "chain-1": initialAmount, + }, + 2: { + "chain-0": initialAmount, + "chain-1": updatedAmount, + }, + } + + // Loop the records and check that the amounts match the updates + for _, epochUnbondingRecord := range s.App.RecordsKeeper.GetAllEpochUnbondingRecord(s.Ctx) { + s.Require().Len(epochUnbondingRecord.HostZoneUnbondings, 2, "there should be two host records per epoch record") + + for _, hostZoneUnbondingRecord := range epochUnbondingRecord.HostZoneUnbondings { + expectedAmount := expectedAmountMapping[epochUnbondingRecord.EpochNumber][hostZoneUnbondingRecord.HostZoneId] + s.Require().Equal(expectedAmount.Int64(), hostZoneUnbondingRecord.NativeTokenAmount.Int64(), "updated record amount") + } + } + +} diff --git a/x/records/keeper/genesis.go b/x/records/keeper/genesis.go new file mode 100644 index 00000000000..172133920fc --- /dev/null +++ b/x/records/keeper/genesis.go @@ -0,0 +1,51 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +// InitGenesis initializes the capability module's state from a provided genesis +// state. +func (k Keeper) InitGenesis(ctx sdk.Context, genState types.GenesisState) { + // Set all the userRedemptionRecord + for _, elem := range genState.UserRedemptionRecordList { + k.SetUserRedemptionRecord(ctx, elem) + } + + // Set all the epochUnbondingRecord + for _, elem := range genState.EpochUnbondingRecordList { + k.SetEpochUnbondingRecord(ctx, elem) + } + + // this line is used by starport scaffolding # genesis/module/init + k.SetParams(ctx, genState.Params) + + // Set all the depositRecord + for _, elem := range genState.DepositRecordList { + k.SetDepositRecord(ctx, elem) + } + + // Set depositRecord count + k.SetDepositRecordCount(ctx, genState.DepositRecordCount) + + // Set all lsm deposit records + for _, elem := range genState.LsmTokenDepositList { + k.SetLSMTokenDeposit(ctx, elem) + } +} + +// ExportGenesis returns the capability module's exported genesis. +func (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { + genesis := types.DefaultGenesis() + genesis.Params = k.GetParams(ctx) + genesis.DepositRecordList = k.GetAllDepositRecord(ctx) + genesis.DepositRecordCount = k.GetDepositRecordCount(ctx) + + genesis.UserRedemptionRecordList = k.GetAllUserRedemptionRecord(ctx) + genesis.EpochUnbondingRecordList = k.GetAllEpochUnbondingRecord(ctx) + genesis.LsmTokenDepositList = k.GetAllLSMTokenDeposit(ctx) + + return genesis +} diff --git a/x/records/keeper/genesis_test.go b/x/records/keeper/genesis_test.go new file mode 100644 index 00000000000..98ba7c5548b --- /dev/null +++ b/x/records/keeper/genesis_test.go @@ -0,0 +1,76 @@ +package keeper_test + +import ( + sdkmath "cosmossdk.io/math" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +func (s *KeeperTestSuite) TestGenesis() { + genesisState := types.GenesisState{ + Params: types.DefaultParams(), + PortId: types.PortID, + UserRedemptionRecordList: []types.UserRedemptionRecord{ + { + Id: "0", + NativeTokenAmount: sdkmath.ZeroInt(), + StTokenAmount: sdkmath.ZeroInt(), + }, + { + Id: "1", + NativeTokenAmount: sdkmath.OneInt(), + StTokenAmount: sdkmath.OneInt(), + }, + }, + UserRedemptionRecordCount: 2, + EpochUnbondingRecordList: []types.EpochUnbondingRecord{ + { + EpochNumber: 0, + HostZoneUnbondings: []*types.HostZoneUnbonding{}, + }, + { + EpochNumber: 1, + HostZoneUnbondings: []*types.HostZoneUnbonding{}, + }, + }, + // this line is used by starport scaffolding # genesis/test/state + DepositRecordList: []types.DepositRecord{ + { + Id: 0, + Amount: sdkmath.ZeroInt(), + }, + { + Id: 1, + Amount: sdkmath.OneInt(), + }, + }, + DepositRecordCount: 2, + LsmTokenDepositList: []types.LSMTokenDeposit{ + { + DepositId: "ID1", + ChainId: "chain-1", + Denom: "denom1", + Amount: sdkmath.ZeroInt(), + StToken: sdk.NewCoin(sdk.DefaultBondDenom, sdkmath.OneInt()), + }, + { + DepositId: "ID2", + ChainId: "chain-2", + Denom: "denom2", + Amount: sdkmath.OneInt(), + StToken: sdk.NewCoin(sdk.DefaultBondDenom, sdkmath.OneInt()), + }, + }, + } + s.App.RecordsKeeper.InitGenesis(s.Ctx, genesisState) + got := s.App.RecordsKeeper.ExportGenesis(s.Ctx) + s.Require().NotNil(got) + + s.Require().Equal(genesisState.PortId, got.PortId) + + s.Require().ElementsMatch(genesisState.DepositRecordList, got.DepositRecordList) + s.Require().Equal(genesisState.DepositRecordCount, got.DepositRecordCount) + s.Require().ElementsMatch(genesisState.LsmTokenDepositList, got.LsmTokenDepositList) +} diff --git a/x/records/keeper/grpc_query.go b/x/records/keeper/grpc_query.go new file mode 100644 index 00000000000..e0e266b1f9f --- /dev/null +++ b/x/records/keeper/grpc_query.go @@ -0,0 +1,7 @@ +package keeper + +import ( + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +var _ types.QueryServer = Keeper{} diff --git a/x/records/keeper/grpc_query_deposit_record.go b/x/records/keeper/grpc_query_deposit_record.go new file mode 100644 index 00000000000..25336c10195 --- /dev/null +++ b/x/records/keeper/grpc_query_deposit_record.go @@ -0,0 +1,73 @@ +package keeper + +import ( + "context" + + "cosmossdk.io/store/prefix" + sdk "github.com/cosmos/cosmos-sdk/types" + + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +func (k Keeper) DepositRecordAll(c context.Context, req *types.QueryAllDepositRecordRequest) (*types.QueryAllDepositRecordResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + var depositRecords []types.DepositRecord + ctx := sdk.UnwrapSDKContext(c) + + store := ctx.KVStore(k.storeKey) + depositRecordStore := prefix.NewStore(store, types.KeyPrefix(types.DepositRecordKey)) + + pageRes, err := query.Paginate(depositRecordStore, req.Pagination, func(key []byte, value []byte) error { + var depositRecord types.DepositRecord + if err := k.Cdc.Unmarshal(value, &depositRecord); err != nil { + return err + } + + depositRecords = append(depositRecords, depositRecord) + return nil + }) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryAllDepositRecordResponse{DepositRecord: depositRecords, Pagination: pageRes}, nil +} + +func (k Keeper) DepositRecord(c context.Context, req *types.QueryGetDepositRecordRequest) (*types.QueryGetDepositRecordResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + ctx := sdk.UnwrapSDKContext(c) + depositRecord, found := k.GetDepositRecord(ctx, req.Id) + if !found { + return nil, sdkerrors.ErrKeyNotFound + } + + return &types.QueryGetDepositRecordResponse{DepositRecord: depositRecord}, nil +} + +func (k Keeper) DepositRecordByHost(c context.Context, req *types.QueryDepositRecordByHostRequest) (*types.QueryDepositRecordByHostResponse, error) { + ctx := sdk.UnwrapSDKContext(c) + + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + var depositRecordsForHost []types.DepositRecord + for _, depositRecord := range k.GetAllDepositRecord(ctx) { + if depositRecord.HostZoneId == req.HostZoneId { + depositRecordsForHost = append(depositRecordsForHost, depositRecord) + } + } + + return &types.QueryDepositRecordByHostResponse{DepositRecord: depositRecordsForHost}, nil +} diff --git a/x/records/keeper/grpc_query_deposit_record_test.go b/x/records/keeper/grpc_query_deposit_record_test.go new file mode 100644 index 00000000000..57f7389d5bd --- /dev/null +++ b/x/records/keeper/grpc_query_deposit_record_test.go @@ -0,0 +1,160 @@ +package keeper_test + +import ( + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + sdkmath "cosmossdk.io/math" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +func (s *KeeperTestSuite) createNDepositRecord(n int) []types.DepositRecord { + items := make([]types.DepositRecord, n) + for i := range items { + items[i].Id = uint64(i) + items[i].Amount = sdkmath.NewInt(int64(i)) + s.App.RecordsKeeper.AppendDepositRecord(s.Ctx, items[i]) + } + return items +} + +func (s *KeeperTestSuite) TestDepositRecordQuerySingle() { + msgs := s.createNDepositRecord(2) + for _, tc := range []struct { + desc string + request *types.QueryGetDepositRecordRequest + response *types.QueryGetDepositRecordResponse + err error + }{ + { + desc: "First", + request: &types.QueryGetDepositRecordRequest{Id: msgs[0].Id}, + response: &types.QueryGetDepositRecordResponse{DepositRecord: msgs[0]}, + }, + { + desc: "Second", + request: &types.QueryGetDepositRecordRequest{Id: msgs[1].Id}, + response: &types.QueryGetDepositRecordResponse{DepositRecord: msgs[1]}, + }, + { + desc: "KeyNotFound", + request: &types.QueryGetDepositRecordRequest{Id: uint64(len(msgs))}, + err: sdkerrors.ErrKeyNotFound, + }, + { + desc: "InvalidRequest", + err: status.Error(codes.InvalidArgument, "invalid request"), + }, + } { + s.Run(tc.desc, func() { + response, err := s.App.RecordsKeeper.DepositRecord(s.Ctx, tc.request) + if tc.err != nil { + s.Require().ErrorIs(err, tc.err) + } else { + s.Require().NoError(err) + s.Require().Equal( + tc.response, + response, + ) + } + }) + } +} + +func (s *KeeperTestSuite) TestDepositRecordQueryPaginated() { + msgs := s.createNDepositRecord(5) + + request := func(next []byte, offset, limit uint64, total bool) *types.QueryAllDepositRecordRequest { + return &types.QueryAllDepositRecordRequest{ + Pagination: &query.PageRequest{ + Key: next, + Offset: offset, + Limit: limit, + CountTotal: total, + }, + } + } + s.Run("ByOffset", func() { + step := 2 + for i := 0; i < len(msgs); i += step { + resp, err := s.App.RecordsKeeper.DepositRecordAll(s.Ctx, request(nil, uint64(i), uint64(step), false)) + s.Require().NoError(err) + s.Require().LessOrEqual(len(resp.DepositRecord), step) + s.Require().Subset( + msgs, + resp.DepositRecord, + ) + } + }) + s.Run("ByKey", func() { + step := 2 + var next []byte + for i := 0; i < len(msgs); i += step { + resp, err := s.App.RecordsKeeper.DepositRecordAll(s.Ctx, request(next, 0, uint64(step), false)) + s.Require().NoError(err) + s.Require().LessOrEqual(len(resp.DepositRecord), step) + s.Require().Subset( + msgs, + resp.DepositRecord, + ) + next = resp.Pagination.NextKey + } + }) + s.Run("Total", func() { + resp, err := s.App.RecordsKeeper.DepositRecordAll(s.Ctx, request(nil, 0, 0, true)) + s.Require().NoError(err) + s.Require().Equal(len(msgs), int(resp.Pagination.Total)) + s.Require().ElementsMatch( + msgs, + resp.DepositRecord, + ) + }) + s.Run("InvalidRequest", func() { + _, err := s.App.RecordsKeeper.DepositRecordAll(s.Ctx, nil) + s.Require().ErrorIs(err, status.Error(codes.InvalidArgument, "invalid request")) + }) +} + +func (s *KeeperTestSuite) TestQueryDepositRecordByHost() { + // Store deposit records across two hosts + hostChain1 := "chain-1" + hostChain2 := "chain-2" + + hostDepositRecords1 := []types.DepositRecord{ + {HostZoneId: hostChain1, Id: 1, Amount: sdkmath.NewInt(1)}, + {HostZoneId: hostChain1, Id: 2, Amount: sdkmath.NewInt(2)}, + {HostZoneId: hostChain1, Id: 3, Amount: sdkmath.NewInt(3)}, + } + hostDepositRecords2 := []types.DepositRecord{ + {HostZoneId: hostChain2, Id: 4, Amount: sdkmath.NewInt(4)}, + {HostZoneId: hostChain2, Id: 5, Amount: sdkmath.NewInt(5)}, + {HostZoneId: hostChain2, Id: 6, Amount: sdkmath.NewInt(6)}, + } + + for _, depositRecord := range append(hostDepositRecords1, hostDepositRecords2...) { + s.App.RecordsKeeper.SetDepositRecord(s.Ctx, depositRecord) + } + + // Fetch each list through a host zone id query + actualHostDepositRecords1, err := s.App.RecordsKeeper.DepositRecordByHost(s.Ctx, &types.QueryDepositRecordByHostRequest{ + HostZoneId: hostChain1, + }) + s.Require().NoError(err, "no error expected when querying by host %s", hostChain1) + s.Require().ElementsMatch(hostDepositRecords1, actualHostDepositRecords1.DepositRecord, "deposit records for %s", hostChain1) + + actualHostDepositRecords2, err := s.App.RecordsKeeper.DepositRecordByHost(s.Ctx, &types.QueryDepositRecordByHostRequest{ + HostZoneId: hostChain2, + }) + s.Require().NoError(err, "no error expected when querying by host %s", hostChain2) + s.Require().ElementsMatch(hostDepositRecords2, actualHostDepositRecords2.DepositRecord, "deposit records for %s", hostChain2) + + // Finally, fetch a non-existent chain-id and it should return an empty list + fakeHostDepositRecords, err := s.App.RecordsKeeper.DepositRecordByHost(s.Ctx, &types.QueryDepositRecordByHostRequest{ + HostZoneId: "fake_host", + }) + s.Require().NoError(err, "no error expected when querying by host %s", hostChain1) + s.Require().Len(fakeHostDepositRecords.DepositRecord, 0) +} diff --git a/x/records/keeper/grpc_query_epoch_unbonding_record.go b/x/records/keeper/grpc_query_epoch_unbonding_record.go new file mode 100644 index 00000000000..f87255f2084 --- /dev/null +++ b/x/records/keeper/grpc_query_epoch_unbonding_record.go @@ -0,0 +1,56 @@ +package keeper + +import ( + "context" + + "cosmossdk.io/store/prefix" + sdk "github.com/cosmos/cosmos-sdk/types" + + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +func (k Keeper) EpochUnbondingRecordAll(c context.Context, req *types.QueryAllEpochUnbondingRecordRequest) (*types.QueryAllEpochUnbondingRecordResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + var epochUnbondingRecords []types.EpochUnbondingRecord + ctx := sdk.UnwrapSDKContext(c) + + store := ctx.KVStore(k.storeKey) + epochUnbondingRecordStore := prefix.NewStore(store, types.KeyPrefix(types.EpochUnbondingRecordKey)) + + pageRes, err := query.Paginate(epochUnbondingRecordStore, req.Pagination, func(key []byte, value []byte) error { + var epochUnbondingRecord types.EpochUnbondingRecord + if err := k.Cdc.Unmarshal(value, &epochUnbondingRecord); err != nil { + return err + } + + epochUnbondingRecords = append(epochUnbondingRecords, epochUnbondingRecord) + return nil + }) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryAllEpochUnbondingRecordResponse{EpochUnbondingRecord: epochUnbondingRecords, Pagination: pageRes}, nil +} + +func (k Keeper) EpochUnbondingRecord(c context.Context, req *types.QueryGetEpochUnbondingRecordRequest) (*types.QueryGetEpochUnbondingRecordResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + ctx := sdk.UnwrapSDKContext(c) + epochUnbondingRecord, found := k.GetEpochUnbondingRecord(ctx, req.EpochNumber) + if !found { + return nil, sdkerrors.ErrKeyNotFound + } + + return &types.QueryGetEpochUnbondingRecordResponse{EpochUnbondingRecord: epochUnbondingRecord}, nil +} diff --git a/x/records/keeper/grpc_query_epoch_unbonding_record_test.go b/x/records/keeper/grpc_query_epoch_unbonding_record_test.go new file mode 100644 index 00000000000..7944b98998e --- /dev/null +++ b/x/records/keeper/grpc_query_epoch_unbonding_record_test.go @@ -0,0 +1,107 @@ +package keeper_test + +import ( + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +func (s *KeeperTestSuite) TestEpochUnbondingRecordQuerySingle() { + msgs, _ := s.createNEpochUnbondingRecord(2) + for _, tc := range []struct { + desc string + request *types.QueryGetEpochUnbondingRecordRequest + response *types.QueryGetEpochUnbondingRecordResponse + err error + }{ + { + desc: "First", + request: &types.QueryGetEpochUnbondingRecordRequest{EpochNumber: msgs[0].EpochNumber}, + response: &types.QueryGetEpochUnbondingRecordResponse{EpochUnbondingRecord: msgs[0]}, + }, + { + desc: "Second", + request: &types.QueryGetEpochUnbondingRecordRequest{EpochNumber: msgs[1].EpochNumber}, + response: &types.QueryGetEpochUnbondingRecordResponse{EpochUnbondingRecord: msgs[1]}, + }, + { + desc: "KeyNotFound", + request: &types.QueryGetEpochUnbondingRecordRequest{EpochNumber: uint64(len(msgs))}, + err: sdkerrors.ErrKeyNotFound, + }, + { + desc: "InvalidRequest", + err: status.Error(codes.InvalidArgument, "invalid request"), + }, + } { + s.Run(tc.desc, func() { + response, err := s.App.RecordsKeeper.EpochUnbondingRecord(s.Ctx, tc.request) + if tc.err != nil { + s.Require().ErrorIs(err, tc.err) + } else { + s.Require().NoError(err) + s.Require().Equal( + tc.response, + response, + ) + } + }) + } +} + +func (s *KeeperTestSuite) TestEpochUnbondingRecordQueryPaginated() { + msgs, _ := s.createNEpochUnbondingRecord(5) + + request := func(next []byte, offset, limit uint64, total bool) *types.QueryAllEpochUnbondingRecordRequest { + return &types.QueryAllEpochUnbondingRecordRequest{ + Pagination: &query.PageRequest{ + Key: next, + Offset: offset, + Limit: limit, + CountTotal: total, + }, + } + } + s.Run("ByOffset", func() { + step := 2 + for i := 0; i < len(msgs); i += step { + resp, err := s.App.RecordsKeeper.EpochUnbondingRecordAll(s.Ctx, request(nil, uint64(i), uint64(step), false)) + s.Require().NoError(err) + s.Require().LessOrEqual(len(resp.EpochUnbondingRecord), step) + s.Require().Subset( + msgs, + resp.EpochUnbondingRecord, + ) + } + }) + s.Run("ByKey", func() { + step := 2 + var next []byte + for i := 0; i < len(msgs); i += step { + resp, err := s.App.RecordsKeeper.EpochUnbondingRecordAll(s.Ctx, request(next, 0, uint64(step), false)) + s.Require().NoError(err) + s.Require().LessOrEqual(len(resp.EpochUnbondingRecord), step) + s.Require().Subset( + msgs, + resp.EpochUnbondingRecord, + ) + next = resp.Pagination.NextKey + } + }) + s.Run("Total", func() { + resp, err := s.App.RecordsKeeper.EpochUnbondingRecordAll(s.Ctx, request(nil, 0, 0, true)) + s.Require().NoError(err) + s.Require().Equal(len(msgs), int(resp.Pagination.Total)) + s.Require().ElementsMatch( + msgs, + resp.EpochUnbondingRecord, + ) + }) + s.Run("InvalidRequest", func() { + _, err := s.App.RecordsKeeper.EpochUnbondingRecordAll(s.Ctx, nil) + s.Require().ErrorIs(err, status.Error(codes.InvalidArgument, "invalid request")) + }) +} diff --git a/x/records/keeper/grpc_query_lsm_deposits.go b/x/records/keeper/grpc_query_lsm_deposits.go new file mode 100644 index 00000000000..bb5e7873b1a --- /dev/null +++ b/x/records/keeper/grpc_query_lsm_deposits.go @@ -0,0 +1,62 @@ +package keeper + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +func (k Keeper) LSMDeposit(c context.Context, req *types.QueryLSMDepositRequest) (*types.QueryLSMDepositResponse, error) { + if req == nil || req.ChainId == "" || req.Denom == "" { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + ctx := sdk.UnwrapSDKContext(c) + + deposit, found := k.GetLSMTokenDeposit(ctx, req.ChainId, req.Denom) + if !found { + return nil, status.Error(codes.NotFound, "LSM deposit not found") + } + + return &types.QueryLSMDepositResponse{Deposit: deposit}, nil +} + +func (k Keeper) LSMDeposits(c context.Context, req *types.QueryLSMDepositsRequest) (*types.QueryLSMDepositsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + var deposits []types.LSMTokenDeposit + ctx := sdk.UnwrapSDKContext(c) + + // Case 1: no chain_id was given, so we should load all deposits across all chains + if req.ChainId == "" { + deposits = k.GetAllLSMTokenDeposit(ctx) + } + + // Case 2: chain_id is given, load all for that chain + if req.ChainId != "" { + deposits = k.GetLSMDepositsForHostZone(ctx, req.ChainId) + } + + // Filter for matches by hand if validator_address or status optional filters are given + filtered := []types.LSMTokenDeposit{} + filterByValidator := req.ValidatorAddress != "" + filterByStatus := req.Status != "" + for _, deposit := range deposits { + validatorMatch := !filterByValidator || (deposit.ValidatorAddress == req.ValidatorAddress) + statusMatch := !filterByStatus || (deposit.Status.String() == req.Status) + if validatorMatch && statusMatch { + filtered = append(filtered, deposit) + } + } + deposits = filtered + + // Be aware this could be an empty array, there may have been no deposits matching given filters + return &types.QueryLSMDepositsResponse{Deposits: deposits}, nil +} diff --git a/x/records/keeper/grpc_query_lsm_deposits_test.go b/x/records/keeper/grpc_query_lsm_deposits_test.go new file mode 100644 index 00000000000..07255f0a521 --- /dev/null +++ b/x/records/keeper/grpc_query_lsm_deposits_test.go @@ -0,0 +1,117 @@ +package keeper_test + +import ( + "fmt" + + _ "github.com/stretchr/testify/suite" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +func (s *KeeperTestSuite) TestLSMDeposit() { + // setup expected deposit in stakeibckeeper + initToken := types.LSMTokenDeposit{ChainId: "1", Denom: "validator70027"} + s.App.RecordsKeeper.SetLSMTokenDeposit(s.Ctx, initToken) + + // input nil, no chain-id, no denom --> error invalid input + invalidInputs := []*types.QueryLSMDepositRequest{} + noChainInput := types.QueryLSMDepositRequest{ChainId: "", Denom: "validator93740"} + noDenomInput := types.QueryLSMDepositRequest{ChainId: "42", Denom: ""} + invalidInputs = append(invalidInputs, nil, &noChainInput, &noDenomInput) + + for _, invalidInput := range invalidInputs { + _, err1 := s.App.RecordsKeeper.LSMDeposit(s.Ctx, invalidInput) + s.Require().ErrorContains(err1, "invalid request") + } + + // no matching deposit found --> error not found + missingInput := types.QueryLSMDepositRequest{ChainId: "2", Denom: "validator9374999"} + _, err2 := s.App.RecordsKeeper.LSMDeposit(s.Ctx, &missingInput) + s.Require().ErrorContains(err2, "LSM deposit not found") + + // found the deposit --> no error, deposit returned with matching chain-id and denom + expectedInput := types.QueryLSMDepositRequest{ChainId: "1", Denom: "validator70027"} + response, err3 := s.App.RecordsKeeper.LSMDeposit(s.Ctx, &expectedInput) + s.Require().NoError(err3) + s.Require().Equal("1", response.Deposit.ChainId) + s.Require().Equal("validator70027", response.Deposit.Denom) +} + +func (s *KeeperTestSuite) TestLSMDeposits() { + // setup expected desposits in stakeibckeeper + chainIds := []string{"1"} + validators := []string{"validator22313", "validator30472"} + statuses := []string{"TRANSFER_IN_PROGRESS", "TRANSFER_FAILED", "DETOKENIZATION_QUEUE"} + for _, chainId := range chainIds { + for _, validator := range validators { + for _, statusStr := range statuses { + denom := chainId + validator + statusStr // has to be present and unique for each token + status := types.LSMTokenDeposit_Status(types.LSMTokenDeposit_Status_value[statusStr]) + initToken := types.LSMTokenDeposit{ChainId: chainId, ValidatorAddress: validator, Status: status, Denom: denom} + s.App.RecordsKeeper.SetLSMTokenDeposit(s.Ctx, initToken) + } + } + } + + // input nil --> error invalid input + _, err1 := s.App.RecordsKeeper.LSMDeposit(s.Ctx, nil) + s.Require().ErrorContains(err1, "invalid request") + + // Adding case where string is empty "" meaning match all + // Adding case where string is "missing_X" which is an example which is not found + chainIds = append(chainIds, "", "missing_chain") + validators = append(validators, "", "missing_validator") + statuses = append(statuses, "", "missing_status") + for _, chainId := range chainIds { + chainMatchNum := 1 // case: chain-id is a specific value with matching deposits + if chainId == "" { // case: chain-id filter not applied, all len-2 chain-ids match + chainMatchNum = len(chainIds) - 2 + } + if chainId == "missing_chain" { // case: chain-id is specific value matching 0 deposits + chainMatchNum = 0 + } + for _, validator := range validators { + validatorMatchNum := 1 // case: validator is a specific value with matching deposits + if validator == "" { // case: validator filter not applied, all len-2 validators match + validatorMatchNum = len(validators) - 2 + } + if validator == "missing_validator" { // case: validator is specific value matching 0 deposits + validatorMatchNum = 0 + } + for _, status := range statuses { + statusMatchNum := 1 // case: status is a specific value with matching deposits + if status == "" { // case: status filter not applied, all len-2 statuses match + statusMatchNum = len(statuses) - 2 + } + if status == "missing_status" { // case: status is specific value matching 0 deposits + statusMatchNum = 0 + } + + expectedNumDeposits := chainMatchNum * validatorMatchNum * statusMatchNum + params := types.QueryLSMDepositsRequest{ChainId: chainId, ValidatorAddress: validator, Status: status} + response, err := s.App.RecordsKeeper.LSMDeposits(s.Ctx, ¶ms) + // Verify no errors in general, it can b empty but should be no errors + s.Require().NoError(err) + // Verify that all the deposits expected were found by matching the number set in the keeper + actualDeposits := response.Deposits + s.Require().Equal(expectedNumDeposits, len(actualDeposits), "unexpected number of deposits returned") + testCaseMsg := fmt.Sprintf(" Test Case ChainId: %s, Validator: %s, Status: %s", chainId, validator, status) + for _, actualDeposit := range actualDeposits { + if chainId != "" { // Check that every returned deposit matches, if given specific chain-id value + errMsg := "chain-id on returned deposit does not match requested chain-id filter! %s" + s.Require().Equal(chainId, actualDeposit.ChainId, errMsg, testCaseMsg) + } + if validator != "" { // Check that every returned deposit matches, if given specific validator value + errMsg := "validator on returned deposit does not match requested validator filter! %s" + s.Require().Equal(validator, actualDeposit.ValidatorAddress, errMsg, testCaseMsg) + } + if status != "" { // Check that every returned deposit matches, if given specific status value + errMsg := "status on returned deposit does not match requested status filter! %s" + s.Require().Equal(status, actualDeposit.Status.String(), errMsg, testCaseMsg) + } + } + } + } + } + +} diff --git a/x/records/keeper/grpc_query_params.go b/x/records/keeper/grpc_query_params.go new file mode 100644 index 00000000000..b6a6a4d2f18 --- /dev/null +++ b/x/records/keeper/grpc_query_params.go @@ -0,0 +1,20 @@ +package keeper + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +func (k Keeper) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + ctx := sdk.UnwrapSDKContext(c) + + return &types.QueryParamsResponse{Params: k.GetParams(ctx)}, nil +} diff --git a/x/records/keeper/grpc_query_params_test.go b/x/records/keeper/grpc_query_params_test.go new file mode 100644 index 00000000000..4b59f8e213b --- /dev/null +++ b/x/records/keeper/grpc_query_params_test.go @@ -0,0 +1,14 @@ +package keeper_test + +import ( + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +func (s *KeeperTestSuite) TestParamsQuery() { + params := types.DefaultParams() + s.App.RecordsKeeper.SetParams(s.Ctx, params) + + response, err := s.App.RecordsKeeper.Params(s.Ctx, &types.QueryParamsRequest{}) + s.Require().NoError(err) + s.Require().Equal(&types.QueryParamsResponse{Params: params}, response) +} diff --git a/x/records/keeper/grpc_query_user_redemption_record.go b/x/records/keeper/grpc_query_user_redemption_record.go new file mode 100644 index 00000000000..8907f1d8548 --- /dev/null +++ b/x/records/keeper/grpc_query_user_redemption_record.go @@ -0,0 +1,56 @@ +package keeper + +import ( + "context" + + "cosmossdk.io/store/prefix" + sdk "github.com/cosmos/cosmos-sdk/types" + + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +func (k Keeper) UserRedemptionRecordAll(c context.Context, req *types.QueryAllUserRedemptionRecordRequest) (*types.QueryAllUserRedemptionRecordResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + var userRedemptionRecords []types.UserRedemptionRecord + ctx := sdk.UnwrapSDKContext(c) + + store := ctx.KVStore(k.storeKey) + userRedemptionRecordStore := prefix.NewStore(store, types.KeyPrefix(types.UserRedemptionRecordKey)) + + pageRes, err := query.Paginate(userRedemptionRecordStore, req.Pagination, func(key []byte, value []byte) error { + var userRedemptionRecord types.UserRedemptionRecord + if err := k.Cdc.Unmarshal(value, &userRedemptionRecord); err != nil { + return err + } + + userRedemptionRecords = append(userRedemptionRecords, userRedemptionRecord) + return nil + }) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryAllUserRedemptionRecordResponse{UserRedemptionRecord: userRedemptionRecords, Pagination: pageRes}, nil +} + +func (k Keeper) UserRedemptionRecord(c context.Context, req *types.QueryGetUserRedemptionRecordRequest) (*types.QueryGetUserRedemptionRecordResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + ctx := sdk.UnwrapSDKContext(c) + userRedemptionRecord, found := k.GetUserRedemptionRecord(ctx, req.Id) + if !found { + return nil, sdkerrors.ErrKeyNotFound + } + + return &types.QueryGetUserRedemptionRecordResponse{UserRedemptionRecord: userRedemptionRecord}, nil +} diff --git a/x/records/keeper/grpc_query_user_redemption_record_for_user.go b/x/records/keeper/grpc_query_user_redemption_record_for_user.go new file mode 100644 index 00000000000..93a83338d33 --- /dev/null +++ b/x/records/keeper/grpc_query_user_redemption_record_for_user.go @@ -0,0 +1,44 @@ +package keeper + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +func (k Keeper) UserRedemptionRecordForUser(c context.Context, req *types.QueryAllUserRedemptionRecordForUserRequest) (*types.QueryAllUserRedemptionRecordForUserResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + var userRedemptionRecords []types.UserRedemptionRecord + + ctx := sdk.UnwrapSDKContext(c) + + // limit loop to 50 records for performance + var loopback uint64 + loopback = req.Limit + if loopback > 50 { + loopback = 50 + } + var i uint64 + for i = 0; i < loopback; i++ { + if i > req.Day { + // we have reached the end of the records + break + } + currentDay := req.Day - i + // query the user redemption record for the current day + userRedemptionRecord, found := k.GetUserRedemptionRecord(ctx, types.UserRedemptionRecordKeyFormatter(req.ChainId, currentDay, req.Address)) + if !found { + continue + } + userRedemptionRecords = append(userRedemptionRecords, userRedemptionRecord) + } + + return &types.QueryAllUserRedemptionRecordForUserResponse{UserRedemptionRecord: userRedemptionRecords}, nil +} diff --git a/x/records/keeper/grpc_query_user_redemption_record_test.go b/x/records/keeper/grpc_query_user_redemption_record_test.go new file mode 100644 index 00000000000..20d508eadbf --- /dev/null +++ b/x/records/keeper/grpc_query_user_redemption_record_test.go @@ -0,0 +1,109 @@ +package keeper_test + +import ( + "strconv" + + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +func (s *KeeperTestSuite) TestUserRedemptionRecordQuerySingle() { + msgs := s.createNUserRedemptionRecord(2) + for _, tc := range []struct { + desc string + request *types.QueryGetUserRedemptionRecordRequest + response *types.QueryGetUserRedemptionRecordResponse + err error + }{ + { + desc: "First", + request: &types.QueryGetUserRedemptionRecordRequest{Id: msgs[0].Id}, + response: &types.QueryGetUserRedemptionRecordResponse{UserRedemptionRecord: msgs[0]}, + }, + { + desc: "Second", + request: &types.QueryGetUserRedemptionRecordRequest{Id: msgs[1].Id}, + response: &types.QueryGetUserRedemptionRecordResponse{UserRedemptionRecord: msgs[1]}, + }, + { + desc: "KeyNotFound", + request: &types.QueryGetUserRedemptionRecordRequest{Id: strconv.Itoa(len(msgs))}, + err: sdkerrors.ErrKeyNotFound, + }, + { + desc: "InvalidRequest", + err: status.Error(codes.InvalidArgument, "invalid request"), + }, + } { + s.Run(tc.desc, func() { + response, err := s.App.RecordsKeeper.UserRedemptionRecord(s.Ctx, tc.request) + if tc.err != nil { + s.Require().ErrorIs(err, tc.err) + } else { + s.Require().NoError(err) + s.Require().Equal( + tc.response, + response, + ) + } + }) + } +} + +func (s *KeeperTestSuite) TestUserRedemptionRecordQueryPaginated() { + msgs := s.createNUserRedemptionRecord(5) + + request := func(next []byte, offset, limit uint64, total bool) *types.QueryAllUserRedemptionRecordRequest { + return &types.QueryAllUserRedemptionRecordRequest{ + Pagination: &query.PageRequest{ + Key: next, + Offset: offset, + Limit: limit, + CountTotal: total, + }, + } + } + s.Run("ByOffset", func() { + step := 2 + for i := 0; i < len(msgs); i += step { + resp, err := s.App.RecordsKeeper.UserRedemptionRecordAll(s.Ctx, request(nil, uint64(i), uint64(step), false)) + s.Require().NoError(err) + s.Require().LessOrEqual(len(resp.UserRedemptionRecord), step) + s.Require().Subset( + msgs, + resp.UserRedemptionRecord, + ) + } + }) + s.Run("ByKey", func() { + step := 2 + var next []byte + for i := 0; i < len(msgs); i += step { + resp, err := s.App.RecordsKeeper.UserRedemptionRecordAll(s.Ctx, request(next, 0, uint64(step), false)) + s.Require().NoError(err) + s.Require().LessOrEqual(len(resp.UserRedemptionRecord), step) + s.Require().Subset( + msgs, + resp.UserRedemptionRecord, + ) + next = resp.Pagination.NextKey + } + }) + s.Run("Total", func() { + resp, err := s.App.RecordsKeeper.UserRedemptionRecordAll(s.Ctx, request(nil, 0, 0, true)) + s.Require().NoError(err) + s.Require().Equal(len(msgs), int(resp.Pagination.Total)) + s.Require().ElementsMatch( + msgs, + resp.UserRedemptionRecord, + ) + }) + s.Run("InvalidRequest", func() { + _, err := s.App.RecordsKeeper.UserRedemptionRecordAll(s.Ctx, nil) + s.Require().ErrorIs(err, status.Error(codes.InvalidArgument, "invalid request")) + }) +} diff --git a/x/records/keeper/ibc.go b/x/records/keeper/ibc.go new file mode 100644 index 00000000000..354c49bf7b2 --- /dev/null +++ b/x/records/keeper/ibc.go @@ -0,0 +1,46 @@ +package keeper + +import ( + "fmt" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks" + icacallbacktypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" +) + +// OnAcknowledgementPacket unmarshals the acknowledgement object to determine if the ack was successful and +// then passes that to the ICACallback +// If this packet does not have associated callback data, there will be no additional ack logic in CallRegisteredICACallback +func (k Keeper) OnAcknowledgementPacket(ctx sdk.Context, packet channeltypes.Packet, acknowledgement []byte) error { + packetDescription := fmt.Sprintf("Sequence %d, from %s %s, to %s %s", + packet.Sequence, packet.SourceChannel, packet.SourcePort, packet.DestinationChannel, packet.DestinationPort) + + ackResponse, err := icacallbacks.UnpackAcknowledgementResponse(ctx, k.Logger(ctx), acknowledgement, false) + if err != nil { + return errorsmod.Wrapf(err, "unable to unpack message data from acknowledgement - %s", packetDescription) + } + + // Custom ack logic only applies to ibc transfers initiated from the `stakeibc` module account + // NOTE: if the `stakeibc` module account IBC transfers tokens for some other reason in the future, + // this will need to be updated + if err := k.ICACallbacksKeeper.CallRegisteredICACallback(ctx, packet, ackResponse); err != nil { + return errorsmod.Wrapf(err, "unable to call registered callback for records OnAckPacket - %s", packetDescription) + } + + return nil +} + +// OnTimeoutPacket passes the ack timeout to the ICACallback +// If there was no callback data associated with this packet, +// there will be no additional ack logic in CallRegisteredICACallback +func (k Keeper) OnTimeoutPacket(ctx sdk.Context, packet channeltypes.Packet) error { + ackResponse := icacallbacktypes.AcknowledgementResponse{Status: icacallbacktypes.AckResponseStatus_TIMEOUT} + if err := k.ICACallbacksKeeper.CallRegisteredICACallback(ctx, packet, &ackResponse); err != nil { + return errorsmod.Wrapf(err, "unable to call registered callback for records OnTimeoutPacket") + } + + return nil +} diff --git a/x/records/keeper/keeper.go b/x/records/keeper/keeper.go new file mode 100644 index 00000000000..436aa0c7cce --- /dev/null +++ b/x/records/keeper/keeper.go @@ -0,0 +1,62 @@ +package keeper + +import ( + "fmt" + + "cosmossdk.io/log" + storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + ibctransferkeeper "github.com/cosmos/ibc-go/v8/modules/apps/transfer/keeper" + ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" + + icacallbackskeeper "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/keeper" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +type ( + Keeper struct { + // *cosmosibckeeper.Keeper + Cdc codec.BinaryCodec + storeKey storetypes.StoreKey + memKey storetypes.StoreKey + paramstore paramtypes.Subspace + AccountKeeper types.AccountKeeper + TransferKeeper ibctransferkeeper.Keeper + IBCKeeper ibckeeper.Keeper + ICACallbacksKeeper icacallbackskeeper.Keeper + } +) + +func NewKeeper( + Cdc codec.BinaryCodec, + storeKey, + memKey storetypes.StoreKey, + ps paramtypes.Subspace, + AccountKeeper types.AccountKeeper, + TransferKeeper ibctransferkeeper.Keeper, + ibcKeeper ibckeeper.Keeper, + ICACallbacksKeeper icacallbackskeeper.Keeper, +) *Keeper { + // set KeyTable if it has not already been set + if !ps.HasKeyTable() { + ps = ps.WithKeyTable(types.ParamKeyTable()) + } + + return &Keeper{ + Cdc: Cdc, + storeKey: storeKey, + memKey: memKey, + paramstore: ps, + AccountKeeper: AccountKeeper, + TransferKeeper: TransferKeeper, + IBCKeeper: ibcKeeper, + ICACallbacksKeeper: ICACallbacksKeeper, + } +} + +func (k Keeper) Logger(ctx sdk.Context) log.Logger { + return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) +} diff --git a/x/records/keeper/keeper_test.go b/x/records/keeper/keeper_test.go new file mode 100644 index 00000000000..6fecc615afb --- /dev/null +++ b/x/records/keeper/keeper_test.go @@ -0,0 +1,25 @@ +package keeper_test + +import ( + "testing" + + "github.com/stretchr/testify/suite" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" +) + +const ( + HostChainId = "GAIA" +) + +type KeeperTestSuite struct { + apptesting.AppTestHelper +} + +func (s *KeeperTestSuite) SetupTest() { + s.Setup() +} + +func TestKeeperTestSuite(t *testing.T) { + suite.Run(t, new(KeeperTestSuite)) +} diff --git a/x/records/keeper/lsm_token_deposit.go b/x/records/keeper/lsm_token_deposit.go new file mode 100644 index 00000000000..4c9b11d07d1 --- /dev/null +++ b/x/records/keeper/lsm_token_deposit.go @@ -0,0 +1,81 @@ +package keeper + +import ( + "cosmossdk.io/store/prefix" + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +func (k Keeper) SetLSMTokenDeposit(ctx sdk.Context, deposit types.LSMTokenDeposit) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.LSMTokenDepositKey)) + depositKey := types.GetLSMTokenDepositKey(deposit.ChainId, deposit.Denom) + depositData := k.Cdc.MustMarshal(&deposit) + store.Set(depositKey, depositData) +} + +func (k Keeper) RemoveLSMTokenDeposit(ctx sdk.Context, chainId, denom string) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.LSMTokenDepositKey)) + depositKey := types.GetLSMTokenDepositKey(chainId, denom) + store.Delete(depositKey) +} + +func (k Keeper) GetLSMTokenDeposit(ctx sdk.Context, chainId, denom string) (deposit types.LSMTokenDeposit, found bool) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.LSMTokenDepositKey)) + depositKey := types.GetLSMTokenDepositKey(chainId, denom) + depositData := store.Get(depositKey) + if len(depositData) == 0 { + return deposit, false + } + k.Cdc.MustUnmarshal(depositData, &deposit) + return deposit, true +} + +func (k Keeper) GetAllLSMTokenDeposit(ctx sdk.Context) []types.LSMTokenDeposit { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.LSMTokenDepositKey)) + iterator := store.Iterator(nil, nil) + allLSMTokenDeposits := []types.LSMTokenDeposit{} + + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + var deposit types.LSMTokenDeposit + k.Cdc.MustUnmarshal(iterator.Value(), &deposit) + allLSMTokenDeposits = append(allLSMTokenDeposits, deposit) + } + + return allLSMTokenDeposits +} + +func (k Keeper) UpdateLSMTokenDepositStatus(ctx sdk.Context, deposit types.LSMTokenDeposit, status types.LSMTokenDeposit_Status) { + deposit.Status = status + k.SetLSMTokenDeposit(ctx, deposit) +} + +func (k Keeper) GetLSMDepositsForHostZone(ctx sdk.Context, chainId string) []types.LSMTokenDeposit { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.LSMTokenDepositKey)) + iterator := storetypes.KVStorePrefixIterator(store, types.KeyPrefix(chainId)) + hostZoneLSMTokenDeposits := []types.LSMTokenDeposit{} + + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + var deposit types.LSMTokenDeposit + k.Cdc.MustUnmarshal(iterator.Value(), &deposit) + hostZoneLSMTokenDeposits = append(hostZoneLSMTokenDeposits, deposit) + } + + return hostZoneLSMTokenDeposits +} + +func (k Keeper) GetLSMDepositsForHostZoneWithStatus(ctx sdk.Context, chainId string, status types.LSMTokenDeposit_Status) []types.LSMTokenDeposit { + filtered := []types.LSMTokenDeposit{} + hostZoneLSMTokenDeposits := k.GetLSMDepositsForHostZone(ctx, chainId) + for _, deposit := range hostZoneLSMTokenDeposits { + if deposit.Status == status { + filtered = append(filtered, deposit) + } + } + return filtered +} diff --git a/x/records/keeper/lsm_token_deposit_test.go b/x/records/keeper/lsm_token_deposit_test.go new file mode 100644 index 00000000000..cc8d0d59dbf --- /dev/null +++ b/x/records/keeper/lsm_token_deposit_test.go @@ -0,0 +1,167 @@ +package keeper_test + +import ( + "strconv" + + sdkmath "cosmossdk.io/math" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +func (s *KeeperTestSuite) createNLSMTokenDeposit(n int) []types.LSMTokenDeposit { + deposits := make([]types.LSMTokenDeposit, n) + for i := range deposits { + validatorAddr := "validatorAddress" + tokenRecordId := strconv.Itoa(i) + + deposits[i].Denom = validatorAddr + tokenRecordId + deposits[i].IbcDenom = "ibc/" + validatorAddr + tokenRecordId + deposits[i].ValidatorAddress = validatorAddr + deposits[i].ChainId = strconv.Itoa(i) + deposits[i].Amount = sdkmath.NewIntFromUint64(1000) + deposits[i].Status = types.LSMTokenDeposit_DEPOSIT_PENDING + deposits[i].StToken = sdk.NewCoin("sttoken", sdkmath.NewInt(int64(i))) + } + return deposits +} + +func (s *KeeperTestSuite) setGivenLSMTokenDeposit(deposits []types.LSMTokenDeposit) []types.LSMTokenDeposit { + for _, deposit := range deposits { + s.App.RecordsKeeper.SetLSMTokenDeposit(s.Ctx, deposit) + } + return deposits +} + +func (s *KeeperTestSuite) createSetNLSMTokenDeposit(n int) []types.LSMTokenDeposit { + newDeposits := s.createNLSMTokenDeposit(n) + return s.setGivenLSMTokenDeposit(newDeposits) +} + +func (s *KeeperTestSuite) TestGetLSMTokenDeposit() { + deposits := s.createSetNLSMTokenDeposit(10) + for _, expected := range deposits { + actual, found := s.App.RecordsKeeper.GetLSMTokenDeposit(s.Ctx, expected.ChainId, expected.Denom) + s.Require().True(found, "deposit not found for chainID %s and denom %s", expected.ChainId, expected.Denom) + s.Require().Equal(expected, actual, "found deposit did not match expected") + } +} + +func (s *KeeperTestSuite) TestRemoveLSMTokenDeposit() { + deposits := s.createSetNLSMTokenDeposit(10) + for _, expected := range deposits { + s.App.RecordsKeeper.RemoveLSMTokenDeposit(s.Ctx, expected.ChainId, expected.Denom) + _, found := s.App.RecordsKeeper.GetLSMTokenDeposit(s.Ctx, expected.ChainId, expected.Denom) + s.Require().False(found, "deposit was still found after removal %+v", expected) + } +} + +func (s *KeeperTestSuite) TestGetAllLSMTokenDeposit() { + expected := s.createSetNLSMTokenDeposit(10) + actual := s.App.RecordsKeeper.GetAllLSMTokenDeposit(s.Ctx) + s.Require().Equal(len(expected), len(actual), + "different number of deposits found %d than was expected %d", len(actual), len(expected)) + s.Require().ElementsMatch(actual, expected, "actual list did not match expected list") +} + +func (s *KeeperTestSuite) TestUpdateLSMTokenDepositStatus() { + statuses := []types.LSMTokenDeposit_Status{ + types.LSMTokenDeposit_DEPOSIT_PENDING, + types.LSMTokenDeposit_TRANSFER_IN_PROGRESS, + types.LSMTokenDeposit_TRANSFER_FAILED, + types.LSMTokenDeposit_DETOKENIZATION_QUEUE, + types.LSMTokenDeposit_DETOKENIZATION_IN_PROGRESS, + types.LSMTokenDeposit_DETOKENIZATION_FAILED, + } + deposits := s.createSetNLSMTokenDeposit(len(statuses)) + for i, status := range statuses { + s.App.RecordsKeeper.UpdateLSMTokenDepositStatus(s.Ctx, deposits[i], status) + } + + for i, deposit := range deposits { + actual, _ := s.App.RecordsKeeper.GetLSMTokenDeposit(s.Ctx, deposit.ChainId, deposit.Denom) + s.Require().Equal(actual.Status, statuses[i], "status did not update for example %d", i) + } +} + +func (s *KeeperTestSuite) TestGetLSMDepositsForHostZone() { + // For HostZone with id i there will be i+1 deposits created, all denom unique + // i.e. {chain-0, chain-1, chain-1, chain-2, chain-2, chain-2, ...} + deposits := s.createNLSMTokenDeposit(15) // 15 = 1 + 2 + 3 + 4 + 5 + idx := 0 + for i := 0; i < 5; i++ { + for j := 0; j < i+1; j++ { + deposits[idx].ChainId = strconv.Itoa(i) + idx++ + } + } + s.setGivenLSMTokenDeposit(deposits) + + // Check there are i+1 deposits for chainid i, all deposits returned are from right chain + for i := 0; i < 5; i++ { + hostChainId := strconv.Itoa(i) + chainDeposits := s.App.RecordsKeeper.GetLSMDepositsForHostZone(s.Ctx, hostChainId) + s.Require().Equal(i+1, len(chainDeposits), "Unexpected number of deposits found for chainId %d", i) + for _, deposit := range chainDeposits { + s.Require().Equal(hostChainId, deposit.ChainId, "Got a deposit from the wrong chain!") + } + } +} + +func (s *KeeperTestSuite) TestGetLSMDepositsForHostZoneWithStatus() { + // Necessary to check that we get every deposit for a given hostzone and status + // Necessary to also check that we *only* get deposits which match hostzone and status + // Need a predictable, different, non-zero number of deposits for each (zone, status) combo + numHostZones := 5 + statuses := []types.LSMTokenDeposit_Status{ + types.LSMTokenDeposit_DEPOSIT_PENDING, + types.LSMTokenDeposit_TRANSFER_IN_PROGRESS, + types.LSMTokenDeposit_TRANSFER_FAILED, + types.LSMTokenDeposit_DETOKENIZATION_QUEUE, + types.LSMTokenDeposit_DETOKENIZATION_IN_PROGRESS, + types.LSMTokenDeposit_DETOKENIZATION_FAILED, + } + + // For each (zone, status) combo, create a different number of deposits + // determined by numDeposits = (hostZone index + 1) * (status index + 1) + + // For instance: + // chain-0, status-0 => 1 deposit + // chain-0, status-1 => 1 * 2 = 2 deposit + // chain-1, status-1 => 2 * 2 = 4 deposits + + deposits := s.createNLSMTokenDeposit(315) // 315 = 15 * 21 is total number across all combos + // nZones = 5 --> 15 = 1 + 2 + 3 + 4 + 5 nStatuses = 6 --> 21 = 1 + 2 + 3 + 4 + 5 + 6 + // Generally with nZones number of host zones and nStatuses number of statuses + // there will be a totalDeposits = 1/4 * nZones * (nZones + 1) * nStatuses * (nStatuses + 1) + + idx := 0 + for hzid := 0; hzid < numHostZones; hzid++ { + for sid := 0; sid < len(statuses); sid++ { + numCombo := (hzid + 1) * (sid + 1) + for i := 0; i < numCombo; i++ { + deposits[idx].ChainId = strconv.Itoa(hzid) + deposits[idx].Status = statuses[sid] + idx++ + } + } + } + s.setGivenLSMTokenDeposit(deposits) + + for hzid := 0; hzid < numHostZones; hzid++ { + for sid := 0; sid < len(statuses); sid++ { + expectedLen := (hzid + 1) * (sid + 1) + chainId := strconv.Itoa(hzid) + status := statuses[sid] + actual := s.App.RecordsKeeper.GetLSMDepositsForHostZoneWithStatus(s.Ctx, chainId, status) + // Check that we get every deposit which matches hostzone and status + s.Require().Equal(expectedLen, len(actual), "Unexpected number of deposits found for chainId %d", hzid) + // Check that we only get deposits which match hostzone and status + for _, deposit := range actual { + s.Require().Equal(chainId, deposit.ChainId, "Got back deposit from different chain!") + s.Require().Equal(status, deposit.Status, "Got back deposit with wrong status!") + } + } + } +} diff --git a/x/records/keeper/params.go b/x/records/keeper/params.go new file mode 100644 index 00000000000..72097389e9c --- /dev/null +++ b/x/records/keeper/params.go @@ -0,0 +1,17 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +// GetParams get all parameters as types.Params +func (k Keeper) GetParams(ctx sdk.Context) types.Params { + return types.NewParams() +} + +// SetParams set the params +func (k Keeper) SetParams(ctx sdk.Context, params types.Params) { + k.paramstore.SetParamSet(ctx, ¶ms) +} diff --git a/x/records/keeper/params_test.go b/x/records/keeper/params_test.go new file mode 100644 index 00000000000..a8256b01061 --- /dev/null +++ b/x/records/keeper/params_test.go @@ -0,0 +1,13 @@ +package keeper_test + +import ( + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +func (s *KeeperTestSuite) TestGetParams() { + params := types.DefaultParams() + + s.App.RecordsKeeper.SetParams(s.Ctx, params) + + s.Require().EqualValues(params, s.App.RecordsKeeper.GetParams(s.Ctx)) +} diff --git a/x/records/keeper/transfer.go b/x/records/keeper/transfer.go new file mode 100644 index 00000000000..36220de810a --- /dev/null +++ b/x/records/keeper/transfer.go @@ -0,0 +1,105 @@ +package keeper + +import ( + "time" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/gogoproto/proto" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + + "github.com/osmosis-labs/osmosis/v27/utils" + icacallbackstypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +// Timeout for the IBC transfer of the LSM Token to the host zone +var LSMDepositTransferTimeout = time.Hour * 24 // 1 day + +// Transfers native tokens, accumulated from normal liquid stakes, to the host zone +// This is invoked epochly +func (k Keeper) IBCTransferNativeTokens(ctx sdk.Context, msg *transfertypes.MsgTransfer, depositRecord types.DepositRecord) error { + // Submit IBC transfer + msgTransferResponse, err := k.TransferKeeper.Transfer(ctx, msg) + if err != nil { + return err + } + + // Build callback data + transferCallback := types.TransferCallback{ + DepositRecordId: depositRecord.Id, + } + k.Logger(ctx).Info(utils.LogWithHostZone(depositRecord.HostZoneId, "Marshalling TransferCallback args: %+v", transferCallback)) + marshalledCallbackArgs, err := k.MarshalTransferCallbackArgs(ctx, transferCallback) + if err != nil { + return err + } + + // Store the callback data + sequence := msgTransferResponse.Sequence + callback := icacallbackstypes.CallbackData{ + CallbackKey: icacallbackstypes.PacketID(msg.SourcePort, msg.SourceChannel, sequence), + PortId: msg.SourcePort, + ChannelId: msg.SourceChannel, + Sequence: sequence, + CallbackId: IBCCallbacksID_NativeTransfer, + CallbackArgs: marshalledCallbackArgs, + } + k.Logger(ctx).Info(utils.LogWithHostZone(depositRecord.HostZoneId, "Storing callback data: %+v", callback)) + k.ICACallbacksKeeper.SetCallbackData(ctx, callback) + + // update the record state to TRANSFER_IN_PROGRESS + depositRecord.Status = types.DepositRecord_TRANSFER_IN_PROGRESS + k.SetDepositRecord(ctx, depositRecord) + + return nil +} + +// Transfer's LSM Tokens to the host from LSMLiquidStakes +// This is invoked immediately after the LSMLiquidStake +func (k Keeper) IBCTransferLSMToken( + ctx sdk.Context, + lsmTokenDeposit types.LSMTokenDeposit, + transferChannelID string, + hostZoneDepositAddress string, + hostZoneDelegationICAAddress string, +) error { + // Build transfer message with a conservative timeout + timeout := utils.IntToUint(ctx.BlockTime().UnixNano() + (LSMDepositTransferTimeout).Nanoseconds()) + ibcToken := sdk.NewCoin(lsmTokenDeposit.IbcDenom, lsmTokenDeposit.Amount) + transferMsg := transfertypes.MsgTransfer{ + SourcePort: transfertypes.PortID, + SourceChannel: transferChannelID, + Token: ibcToken, + Sender: hostZoneDepositAddress, + Receiver: hostZoneDelegationICAAddress, + TimeoutTimestamp: timeout, + } + + // Send LSM Token to host zone via IBC transfer + msgTransferResponse, err := k.TransferKeeper.Transfer(ctx, &transferMsg) + if err != nil { + return err + } + + // Store transfer callback data + callbackArgs := types.TransferLSMTokenCallback{ + Deposit: &lsmTokenDeposit, + } + callbackArgsBz, err := proto.Marshal(&callbackArgs) + if err != nil { + return errorsmod.Wrapf(err, "Unable to marshal transfer callback data for %+v", callbackArgs) + } + + k.ICACallbacksKeeper.SetCallbackData(ctx, icacallbackstypes.CallbackData{ + CallbackKey: icacallbackstypes.PacketID(transferMsg.SourcePort, transferMsg.SourceChannel, msgTransferResponse.Sequence), + PortId: transferMsg.SourcePort, + ChannelId: transferMsg.SourceChannel, + Sequence: msgTransferResponse.Sequence, + CallbackId: IBCCallbacksID_LSMTransfer, + CallbackArgs: callbackArgsBz, + }) + + return nil +} diff --git a/x/records/keeper/transfer_test.go b/x/records/keeper/transfer_test.go new file mode 100644 index 00000000000..96bc4317e33 --- /dev/null +++ b/x/records/keeper/transfer_test.go @@ -0,0 +1,75 @@ +package keeper_test + +import ( + _ "github.com/stretchr/testify/suite" + + sdk "github.com/cosmos/cosmos-sdk/types" + ibctypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + + sdkmath "cosmossdk.io/math" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" + recordtypes "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +type TransferTestCase struct { + depositRecord types.DepositRecord + transferMsg ibctypes.MsgTransfer +} + +func (s *KeeperTestSuite) SetupTransfer() TransferTestCase { + s.CreateTransferChannel(chainId) + balanceToTransfer := sdkmath.NewInt(1_000_000) + depositRecord := types.DepositRecord{ + Id: 1, + DepositEpochNumber: 1, + HostZoneId: chainId, + Amount: balanceToTransfer, + Status: types.DepositRecord_TRANSFER_QUEUE, + } + s.App.RecordsKeeper.SetDepositRecord(s.Ctx, depositRecord) + coin := sdk.NewCoin("tokens", balanceToTransfer) + s.FundAccount(s.TestAccs[0], coin) + transferMsg := ibctypes.MsgTransfer{ + SourcePort: "transfer", + SourceChannel: "channel-0", + Token: coin, + Sender: s.TestAccs[0].String(), + Receiver: s.TestAccs[1].String(), + TimeoutHeight: clienttypes.NewHeight(0, 100), + } + + return TransferTestCase{ + depositRecord: depositRecord, + transferMsg: transferMsg, + } +} + +func (s *KeeperTestSuite) TestTransfer_Successful() { + tc := s.SetupTransfer() + + err := s.App.RecordsKeeper.IBCTransferNativeTokens(s.Ctx, &tc.transferMsg, tc.depositRecord) + s.Require().NoError(err) + + // Confirm deposit record has been updated to TRANSFER_IN_PROGRESS + record, found := s.App.RecordsKeeper.GetDepositRecord(s.Ctx, tc.depositRecord.Id) + s.Require().True(found) + s.Require().Equal(record.Status, recordtypes.DepositRecord_TRANSFER_IN_PROGRESS, "deposit record status should be TRANSFER_IN_PROGRESS") +} + +func (s *KeeperTestSuite) TestSequence_Equal() { + tc := s.SetupTransfer() + goCtx := s.Ctx + sequence, found := s.App.IBCKeeper.ChannelKeeper.GetNextSequenceSend(s.Ctx, + tc.transferMsg.SourcePort, tc.transferMsg.SourceChannel) + s.Require().True(found) + + msgTransferResponse, err := s.App.TransferKeeper.Transfer(goCtx, &tc.transferMsg) + s.Require().NoError(err) + + checkSequence := msgTransferResponse.Sequence + + // Confirm msg sequence are equal to next sequence + s.Require().Equal(checkSequence, sequence, "sequence should be equal") +} diff --git a/x/records/keeper/user_redemption_record.go b/x/records/keeper/user_redemption_record.go new file mode 100644 index 00000000000..05255c76b9a --- /dev/null +++ b/x/records/keeper/user_redemption_record.go @@ -0,0 +1,73 @@ +package keeper + +import ( + "cosmossdk.io/store/prefix" + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +// SetUserRedemptionRecord set a specific userRedemptionRecord in the store +func (k Keeper) SetUserRedemptionRecord(ctx sdk.Context, userRedemptionRecord types.UserRedemptionRecord) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.UserRedemptionRecordKey)) + b := k.Cdc.MustMarshal(&userRedemptionRecord) + store.Set([]byte(userRedemptionRecord.Id), b) +} + +// GetUserRedemptionRecord returns a userRedemptionRecord from its id +func (k Keeper) GetUserRedemptionRecord(ctx sdk.Context, id string) (val types.UserRedemptionRecord, found bool) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.UserRedemptionRecordKey)) + b := store.Get([]byte(id)) + if b == nil { + return val, false + } + k.Cdc.MustUnmarshal(b, &val) + return val, true +} + +// RemoveUserRedemptionRecord removes a userRedemptionRecord from the store +func (k Keeper) RemoveUserRedemptionRecord(ctx sdk.Context, id string) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.UserRedemptionRecordKey)) + store.Delete([]byte(id)) +} + +// GetAllUserRedemptionRecord returns all userRedemptionRecord +func (k Keeper) GetAllUserRedemptionRecord(ctx sdk.Context) (list []types.UserRedemptionRecord) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.UserRedemptionRecordKey)) + iterator := storetypes.KVStorePrefixIterator(store, []byte{}) + + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + var val types.UserRedemptionRecord + k.Cdc.MustUnmarshal(iterator.Value(), &val) + list = append(list, val) + } + + return +} + +// IterateUserRedemptionRecords iterates zones +func (k Keeper) IterateUserRedemptionRecords(ctx sdk.Context, + fn func(index int64, userRedemptionRecord types.UserRedemptionRecord) (stop bool), +) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.UserRedemptionRecordKey)) + + iterator := storetypes.KVStorePrefixIterator(store, nil) + defer iterator.Close() + + i := int64(0) + + for ; iterator.Valid(); iterator.Next() { + userRedRecord := types.UserRedemptionRecord{} + k.Cdc.MustUnmarshal(iterator.Value(), &userRedRecord) + + stop := fn(i, userRedRecord) + + if stop { + break + } + i++ + } +} diff --git a/x/records/keeper/user_redemption_record_test.go b/x/records/keeper/user_redemption_record_test.go new file mode 100644 index 00000000000..cb6c7157c1e --- /dev/null +++ b/x/records/keeper/user_redemption_record_test.go @@ -0,0 +1,48 @@ +package keeper_test + +import ( + "strconv" + + sdkmath "cosmossdk.io/math" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +// TODO [cleanup]: Migrate to new KeeperTestSuite framework +func (s *KeeperTestSuite) createNUserRedemptionRecord(n int) []types.UserRedemptionRecord { + items := make([]types.UserRedemptionRecord, n) + for i := range items { + items[i].Id = strconv.Itoa(i) + items[i].NativeTokenAmount = sdkmath.NewInt(int64(i)) + items[i].StTokenAmount = sdkmath.NewInt(int64(i)) + s.App.RecordsKeeper.SetUserRedemptionRecord(s.Ctx, items[i]) + } + return items +} + +func (s *KeeperTestSuite) TestUserRedemptionRecordGet() { + items := s.createNUserRedemptionRecord(10) + for _, item := range items { + got, found := s.App.RecordsKeeper.GetUserRedemptionRecord(s.Ctx, item.Id) + s.Require().True(found) + s.Require().Equal( + &item, + &got, + ) + } +} + +func (s *KeeperTestSuite) TestUserRedemptionRecordRemove() { + items := s.createNUserRedemptionRecord(10) + for _, item := range items { + s.App.RecordsKeeper.RemoveUserRedemptionRecord(s.Ctx, item.Id) + _, found := s.App.RecordsKeeper.GetUserRedemptionRecord(s.Ctx, item.Id) + s.Require().False(found) + } +} + +func (s *KeeperTestSuite) TestUserRedemptionRecordGetAll() { + items := s.createNUserRedemptionRecord(10) + actual := s.App.RecordsKeeper.GetAllUserRedemptionRecord(s.Ctx) + s.Require().Equal(len(items), len(actual)) +} diff --git a/x/records/migrations/v2/convert.go b/x/records/migrations/v2/convert.go new file mode 100644 index 00000000000..c73e7192884 --- /dev/null +++ b/x/records/migrations/v2/convert.go @@ -0,0 +1,54 @@ +package v2 + +import ( + sdkmath "cosmossdk.io/math" + + oldrecordstypes "github.com/osmosis-labs/osmosis/v27/x/records/migrations/v2/types" + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +func convertToNewDepositRecord(oldDepositRecord oldrecordstypes.DepositRecord) recordstypes.DepositRecord { + return recordstypes.DepositRecord{ + Id: oldDepositRecord.Id, + Amount: sdkmath.NewInt(oldDepositRecord.Amount), + Denom: oldDepositRecord.Denom, + HostZoneId: oldDepositRecord.HostZoneId, + Status: recordstypes.DepositRecord_Status(oldDepositRecord.Status), + DepositEpochNumber: oldDepositRecord.DepositEpochNumber, + Source: recordstypes.DepositRecord_Source(oldDepositRecord.Source), + } +} + +func convertToNewHostZoneUnbonding(oldHostZoneUnbondings oldrecordstypes.HostZoneUnbonding) recordstypes.HostZoneUnbonding { + return recordstypes.HostZoneUnbonding{ + StTokenAmount: sdkmath.NewIntFromUint64(oldHostZoneUnbondings.StTokenAmount), + NativeTokenAmount: sdkmath.NewIntFromUint64(oldHostZoneUnbondings.NativeTokenAmount), + Denom: oldHostZoneUnbondings.Denom, + HostZoneId: oldHostZoneUnbondings.HostZoneId, + UnbondingTime: oldHostZoneUnbondings.UnbondingTime, + Status: recordstypes.HostZoneUnbonding_Status(oldHostZoneUnbondings.Status), + UserRedemptionRecords: oldHostZoneUnbondings.UserRedemptionRecords, + } +} + +func convertToNewEpochUnbondingRecord(oldEpochUnbondingRecord oldrecordstypes.EpochUnbondingRecord) recordstypes.EpochUnbondingRecord { + var epochUnbondingRecord recordstypes.EpochUnbondingRecord + for _, oldHostZoneUnbonding := range oldEpochUnbondingRecord.HostZoneUnbondings { + newHostZoneUnbonding := convertToNewHostZoneUnbonding(*oldHostZoneUnbonding) + epochUnbondingRecord.HostZoneUnbondings = append(epochUnbondingRecord.HostZoneUnbondings, &newHostZoneUnbonding) + } + return epochUnbondingRecord +} + +func convertToNewUserRedemptionRecord(oldRedemptionRecord oldrecordstypes.UserRedemptionRecord) recordstypes.UserRedemptionRecord { + return recordstypes.UserRedemptionRecord{ + Id: oldRedemptionRecord.Id, + // Sender: oldRedemptionRecord.Sender, + Receiver: oldRedemptionRecord.Receiver, + NativeTokenAmount: sdkmath.NewIntFromUint64(oldRedemptionRecord.Amount), + Denom: oldRedemptionRecord.Denom, + HostZoneId: oldRedemptionRecord.HostZoneId, + EpochNumber: oldRedemptionRecord.EpochNumber, + ClaimIsPending: oldRedemptionRecord.ClaimIsPending, + } +} diff --git a/x/records/migrations/v2/convert_test.go b/x/records/migrations/v2/convert_test.go new file mode 100644 index 00000000000..975b2862688 --- /dev/null +++ b/x/records/migrations/v2/convert_test.go @@ -0,0 +1,135 @@ +package v2 + +import ( + "testing" + + sdkmath "cosmossdk.io/math" + + "github.com/stretchr/testify/require" + + oldrecordstypes "github.com/osmosis-labs/osmosis/v27/x/records/migrations/v2/types" + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +func TestConvertDepositRecord(t *testing.T) { + id := uint64(1) + denom := "denom" + hostZoneId := "hz" + epochNumber := uint64(2) + + // Only the Amount field of the DepositRecord should change + oldDepositRecord := oldrecordstypes.DepositRecord{ + Id: id, + Amount: int64(1), + Denom: denom, + HostZoneId: hostZoneId, + Status: oldrecordstypes.DepositRecord_DELEGATION_QUEUE, + DepositEpochNumber: epochNumber, + Source: oldrecordstypes.DepositRecord_WITHDRAWAL_ICA, + } + expectedNewDepositRecord := recordstypes.DepositRecord{ + Id: id, + Amount: sdkmath.NewInt(1), + Denom: denom, + HostZoneId: hostZoneId, + Status: recordstypes.DepositRecord_DELEGATION_QUEUE, + DepositEpochNumber: epochNumber, + Source: recordstypes.DepositRecord_WITHDRAWAL_ICA, + } + + actualNewDepositRecord := convertToNewDepositRecord(oldDepositRecord) + require.Equal(t, expectedNewDepositRecord, actualNewDepositRecord) +} + +func TestConvertHostZoneUnbonding(t *testing.T) { + denom := "denom" + hostZoneId := "hz" + unbondingTime := uint64(3) + userRedemptionRecords := []string{"a", "b", "c"} + + // The StTokenAmount and NativeTokenAmount should change + oldHostZoneUnbonding := oldrecordstypes.HostZoneUnbonding{ + StTokenAmount: uint64(1), + NativeTokenAmount: uint64(2), + Denom: denom, + HostZoneId: hostZoneId, + UnbondingTime: unbondingTime, + Status: oldrecordstypes.HostZoneUnbonding_CLAIMABLE, + UserRedemptionRecords: userRedemptionRecords, + } + expectedNewHostZoneUnbonding := recordstypes.HostZoneUnbonding{ + StTokenAmount: sdkmath.NewInt(1), + NativeTokenAmount: sdkmath.NewInt(2), + Denom: denom, + HostZoneId: hostZoneId, + UnbondingTime: unbondingTime, + Status: recordstypes.HostZoneUnbonding_CLAIMABLE, + UserRedemptionRecords: userRedemptionRecords, + } + + actualNewHostZoneUnbonding := convertToNewHostZoneUnbonding(oldHostZoneUnbonding) + require.Equal(t, expectedNewHostZoneUnbonding, actualNewHostZoneUnbonding) +} + +func TestConvertEpochUnbondingRecord(t *testing.T) { + numHostZoneUnbondings := 3 + + // Build a list of old hostZoneUnbondings as well as the new expected type + oldEpochUnbondingRecord := oldrecordstypes.EpochUnbondingRecord{} + expectedNewEpochUnbondingRecord := recordstypes.EpochUnbondingRecord{} + for i := 0; i <= numHostZoneUnbondings-1; i++ { + oldEpochUnbondingRecord.HostZoneUnbondings = append(oldEpochUnbondingRecord.HostZoneUnbondings, &oldrecordstypes.HostZoneUnbonding{ + StTokenAmount: uint64(i), + NativeTokenAmount: uint64(i * 10), + }) + + expectedNewEpochUnbondingRecord.HostZoneUnbondings = append(expectedNewEpochUnbondingRecord.HostZoneUnbondings, &recordstypes.HostZoneUnbonding{ + StTokenAmount: sdkmath.NewInt(int64(i)), + NativeTokenAmount: sdkmath.NewInt(int64(i * 10)), + }) + } + + // Convert epoch unbonding record + actualNewEpochUnbondingRecord := convertToNewEpochUnbondingRecord(oldEpochUnbondingRecord) + + // Confirm new host zone unbondings align with expectations + require.Equal(t, len(expectedNewEpochUnbondingRecord.HostZoneUnbondings), len(actualNewEpochUnbondingRecord.HostZoneUnbondings)) + for i := 0; i <= numHostZoneUnbondings-1; i++ { + require.Equal(t, expectedNewEpochUnbondingRecord.HostZoneUnbondings[i], actualNewEpochUnbondingRecord.HostZoneUnbondings[i], "index: %d", i) + } +} + +func TestConvertUserRedemptionRecord(t *testing.T) { + id := "id" + sender := "sender" + receiver := "receiver" + denom := "denom" + hostZoneId := "hz" + epochNumber := uint64(1) + claimIsPending := true + + // Only the Amount field of the UserRedemptionRecord should change + oldUserRedemptionRecord := oldrecordstypes.UserRedemptionRecord{ + Id: id, + Sender: sender, + Receiver: receiver, + Amount: uint64(1), + Denom: denom, + HostZoneId: hostZoneId, + EpochNumber: epochNumber, + ClaimIsPending: claimIsPending, + } + expectedNewUserRedemptionRecord := recordstypes.UserRedemptionRecord{ + Id: id, + Receiver: receiver, + // Sender: sender, + NativeTokenAmount: sdkmath.NewInt(1), + Denom: denom, + HostZoneId: hostZoneId, + EpochNumber: epochNumber, + ClaimIsPending: claimIsPending, + } + + actualNewUserRedemptionRecord := convertToNewUserRedemptionRecord(oldUserRedemptionRecord) + require.Equal(t, expectedNewUserRedemptionRecord, actualNewUserRedemptionRecord) +} diff --git a/x/records/migrations/v2/migrations.go b/x/records/migrations/v2/migrations.go new file mode 100644 index 00000000000..ca2ca7190d6 --- /dev/null +++ b/x/records/migrations/v2/migrations.go @@ -0,0 +1,113 @@ +package v2 + +import ( + "cosmossdk.io/store/prefix" + storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + + errorsmod "cosmossdk.io/errors" + + oldrecordtypes "github.com/osmosis-labs/osmosis/v27/x/records/migrations/v2/types" + recordtypes "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +func migrateDepositRecord(store storetypes.KVStore, cdc codec.BinaryCodec) error { + depositRecordStore := prefix.NewStore(store, []byte(recordtypes.DepositRecordKey)) + + iterator := depositRecordStore.Iterator(nil, nil) + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + // Deserialize using the old type + var oldDepositRecord oldrecordtypes.DepositRecord + err := cdc.Unmarshal(iterator.Value(), &oldDepositRecord) + if err != nil { + return errorsmod.Wrapf(err, "unable to unmarshal deposit record (%v) using old data type", iterator.Key()) + } + + // Convert and serialize using the new type + newDepositRecord := convertToNewDepositRecord(oldDepositRecord) + newDepositRecordBz, err := cdc.Marshal(&newDepositRecord) + if err != nil { + return errorsmod.Wrapf(err, "unable to marshal deposit record (%v) using new data type", iterator.Key()) + } + + // Store the new type + depositRecordStore.Set(iterator.Key(), newDepositRecordBz) + } + + return nil +} + +func migrateUserRedemptionRecord(store storetypes.KVStore, cdc codec.BinaryCodec) error { + redemptionRecordStore := prefix.NewStore(store, []byte(recordtypes.UserRedemptionRecordKey)) + + iterator := redemptionRecordStore.Iterator(nil, nil) + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + // Deserialize using the old type + var oldRedemptionRecord oldrecordtypes.UserRedemptionRecord + err := cdc.Unmarshal(iterator.Value(), &oldRedemptionRecord) + if err != nil { + return errorsmod.Wrapf(err, "unable to unmarshal redemption record (%v) using old data type", iterator.Key()) + } + + // Convert and serialize using the new type + newRedemptionRecord := convertToNewUserRedemptionRecord(oldRedemptionRecord) + newRedemptionRecordBz, err := cdc.Marshal(&newRedemptionRecord) + if err != nil { + return errorsmod.Wrapf(err, "unable to marshal redemption record (%v) using new data type", iterator.Key()) + } + + // Store the new type + redemptionRecordStore.Set(iterator.Key(), newRedemptionRecordBz) + } + + return nil +} + +func migrateEpochUnbondingRecord(store storetypes.KVStore, cdc codec.BinaryCodec) error { + epochUnbondingRecordStore := prefix.NewStore(store, []byte(recordtypes.EpochUnbondingRecordKey)) + + iterator := epochUnbondingRecordStore.Iterator(nil, nil) + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + // Deserialize using the old type + var oldEpochUnbondingRecord oldrecordtypes.EpochUnbondingRecord + err := cdc.Unmarshal(iterator.Value(), &oldEpochUnbondingRecord) + if err != nil { + return errorsmod.Wrapf(err, "unable to unmarshal epoch unbonding record (%v) using old data type", iterator.Key()) + } + + // Convert and serialize using the new type + newEpochUnbondingRecord := convertToNewEpochUnbondingRecord(oldEpochUnbondingRecord) + newEpochUnbondingRecordBz, err := cdc.Marshal(&newEpochUnbondingRecord) + if err != nil { + return errorsmod.Wrapf(err, "unable to marshal epoch unbonding record (%v) using new data type", iterator.Key()) + } + + // Store the new type + epochUnbondingRecordStore.Set(iterator.Key(), newEpochUnbondingRecordBz) + } + + return nil +} + +func MigrateStore(ctx sdk.Context, storeKey storetypes.StoreKey, cdc codec.BinaryCodec) error { + store := ctx.KVStore(storeKey) + + err := migrateDepositRecord(store, cdc) + if err != nil { + return err + } + + err = migrateUserRedemptionRecord(store, cdc) + if err != nil { + return err + } + + return migrateEpochUnbondingRecord(store, cdc) +} diff --git a/x/records/migrations/v2/types/genesis.pb.go b/x/records/migrations/v2/types/genesis.pb.go new file mode 100644 index 00000000000..9200e6ba8dd --- /dev/null +++ b/x/records/migrations/v2/types/genesis.pb.go @@ -0,0 +1,2806 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/records/genesis.proto + +package types + +import ( + context "context" + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/gogo/protobuf/proto" + grpc "google.golang.org/grpc" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type DepositRecord_Status int32 + +const ( + // in transfer queue to be sent to the delegation ICA + DepositRecord_TRANSFER_QUEUE DepositRecord_Status = 0 + // transfer in progress (IBC packet sent, ack not received) + DepositRecord_TRANSFER_IN_PROGRESS DepositRecord_Status = 2 + // in staking queue on delegation ICA + DepositRecord_DELEGATION_QUEUE DepositRecord_Status = 1 + // staking in progress (ICA packet sent, ack not received) + DepositRecord_DELEGATION_IN_PROGRESS DepositRecord_Status = 3 +) + +var DepositRecord_Status_name = map[int32]string{ + 0: "TRANSFER_QUEUE", + 2: "TRANSFER_IN_PROGRESS", + 1: "DELEGATION_QUEUE", + 3: "DELEGATION_IN_PROGRESS", +} + +var DepositRecord_Status_value = map[string]int32{ + "TRANSFER_QUEUE": 0, + "TRANSFER_IN_PROGRESS": 2, + "DELEGATION_QUEUE": 1, + "DELEGATION_IN_PROGRESS": 3, +} + +func (x DepositRecord_Status) String() string { + return proto.EnumName(DepositRecord_Status_name, int32(x)) +} + +func (DepositRecord_Status) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_98cfd0253c8b6797, []int{4, 0} +} + +type DepositRecord_Source int32 + +const ( + DepositRecord_STRIDE DepositRecord_Source = 0 + DepositRecord_WITHDRAWAL_ICA DepositRecord_Source = 1 +) + +var DepositRecord_Source_name = map[int32]string{ + 0: "STRIDE", + 1: "WITHDRAWAL_ICA", +} + +var DepositRecord_Source_value = map[string]int32{ + "STRIDE": 0, + "WITHDRAWAL_ICA": 1, +} + +func (x DepositRecord_Source) String() string { + return proto.EnumName(DepositRecord_Source_name, int32(x)) +} + +func (DepositRecord_Source) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_98cfd0253c8b6797, []int{4, 1} +} + +type HostZoneUnbonding_Status int32 + +const ( + // tokens bonded on delegate account + HostZoneUnbonding_UNBONDING_QUEUE HostZoneUnbonding_Status = 0 + HostZoneUnbonding_UNBONDING_IN_PROGRESS HostZoneUnbonding_Status = 3 + // unbonding completed on delegate account + HostZoneUnbonding_EXIT_TRANSFER_QUEUE HostZoneUnbonding_Status = 1 + HostZoneUnbonding_EXIT_TRANSFER_IN_PROGRESS HostZoneUnbonding_Status = 4 + // transfer success + HostZoneUnbonding_CLAIMABLE HostZoneUnbonding_Status = 2 +) + +var HostZoneUnbonding_Status_name = map[int32]string{ + 0: "UNBONDING_QUEUE", + 3: "UNBONDING_IN_PROGRESS", + 1: "EXIT_TRANSFER_QUEUE", + 4: "EXIT_TRANSFER_IN_PROGRESS", + 2: "CLAIMABLE", +} + +var HostZoneUnbonding_Status_value = map[string]int32{ + "UNBONDING_QUEUE": 0, + "UNBONDING_IN_PROGRESS": 3, + "EXIT_TRANSFER_QUEUE": 1, + "EXIT_TRANSFER_IN_PROGRESS": 4, + "CLAIMABLE": 2, +} + +func (x HostZoneUnbonding_Status) String() string { + return proto.EnumName(HostZoneUnbonding_Status_name, int32(x)) +} + +func (HostZoneUnbonding_Status) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_98cfd0253c8b6797, []int{5, 0} +} + +type UserRedemptionRecord struct { + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Sender string `protobuf:"bytes,2,opt,name=sender,proto3" json:"sender,omitempty"` + Receiver string `protobuf:"bytes,3,opt,name=receiver,proto3" json:"receiver,omitempty"` + Amount uint64 `protobuf:"varint,4,opt,name=amount,proto3" json:"amount,omitempty"` + Denom string `protobuf:"bytes,5,opt,name=denom,proto3" json:"denom,omitempty"` + HostZoneId string `protobuf:"bytes,6,opt,name=host_zone_id,json=hostZoneId,proto3" json:"host_zone_id,omitempty"` + EpochNumber uint64 `protobuf:"varint,7,opt,name=epoch_number,json=epochNumber,proto3" json:"epoch_number,omitempty"` + ClaimIsPending bool `protobuf:"varint,8,opt,name=claim_is_pending,json=claimIsPending,proto3" json:"claim_is_pending,omitempty"` +} + +func (m *UserRedemptionRecord) Reset() { *m = UserRedemptionRecord{} } +func (m *UserRedemptionRecord) String() string { return proto.CompactTextString(m) } +func (*UserRedemptionRecord) ProtoMessage() {} +func (*UserRedemptionRecord) Descriptor() ([]byte, []int) { + return fileDescriptor_98cfd0253c8b6797, []int{0} +} +func (m *UserRedemptionRecord) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *UserRedemptionRecord) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_UserRedemptionRecord.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *UserRedemptionRecord) XXX_Merge(src proto.Message) { + xxx_messageInfo_UserRedemptionRecord.Merge(m, src) +} +func (m *UserRedemptionRecord) XXX_Size() int { + return m.Size() +} +func (m *UserRedemptionRecord) XXX_DiscardUnknown() { + xxx_messageInfo_UserRedemptionRecord.DiscardUnknown(m) +} + +var xxx_messageInfo_UserRedemptionRecord proto.InternalMessageInfo + +func (m *UserRedemptionRecord) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *UserRedemptionRecord) GetSender() string { + if m != nil { + return m.Sender + } + return "" +} + +func (m *UserRedemptionRecord) GetReceiver() string { + if m != nil { + return m.Receiver + } + return "" +} + +func (m *UserRedemptionRecord) GetAmount() uint64 { + if m != nil { + return m.Amount + } + return 0 +} + +func (m *UserRedemptionRecord) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +func (m *UserRedemptionRecord) GetHostZoneId() string { + if m != nil { + return m.HostZoneId + } + return "" +} + +func (m *UserRedemptionRecord) GetEpochNumber() uint64 { + if m != nil { + return m.EpochNumber + } + return 0 +} + +func (m *UserRedemptionRecord) GetClaimIsPending() bool { + if m != nil { + return m.ClaimIsPending + } + return false +} + +// Params defines the parameters for the module. +type Params struct { +} + +func (m *Params) Reset() { *m = Params{} } +func (*Params) ProtoMessage() {} +func (*Params) Descriptor() ([]byte, []int) { + return fileDescriptor_98cfd0253c8b6797, []int{1} +} +func (m *Params) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Params.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Params) XXX_Merge(src proto.Message) { + xxx_messageInfo_Params.Merge(m, src) +} +func (m *Params) XXX_Size() int { + return m.Size() +} +func (m *Params) XXX_DiscardUnknown() { + xxx_messageInfo_Params.DiscardUnknown(m) +} + +var xxx_messageInfo_Params proto.InternalMessageInfo + +type RecordsPacketData struct { + // Types that are valid to be assigned to Packet: + // *RecordsPacketData_NoData + Packet isRecordsPacketData_Packet `protobuf_oneof:"packet"` +} + +func (m *RecordsPacketData) Reset() { *m = RecordsPacketData{} } +func (m *RecordsPacketData) String() string { return proto.CompactTextString(m) } +func (*RecordsPacketData) ProtoMessage() {} +func (*RecordsPacketData) Descriptor() ([]byte, []int) { + return fileDescriptor_98cfd0253c8b6797, []int{2} +} +func (m *RecordsPacketData) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RecordsPacketData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RecordsPacketData.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RecordsPacketData) XXX_Merge(src proto.Message) { + xxx_messageInfo_RecordsPacketData.Merge(m, src) +} +func (m *RecordsPacketData) XXX_Size() int { + return m.Size() +} +func (m *RecordsPacketData) XXX_DiscardUnknown() { + xxx_messageInfo_RecordsPacketData.DiscardUnknown(m) +} + +var xxx_messageInfo_RecordsPacketData proto.InternalMessageInfo + +type isRecordsPacketData_Packet interface { + isRecordsPacketData_Packet() + MarshalTo([]byte) (int, error) + Size() int +} + +type RecordsPacketData_NoData struct { + NoData *NoData `protobuf:"bytes,1,opt,name=no_data,json=noData,proto3,oneof" json:"no_data,omitempty"` +} + +func (*RecordsPacketData_NoData) isRecordsPacketData_Packet() {} + +func (m *RecordsPacketData) GetPacket() isRecordsPacketData_Packet { + if m != nil { + return m.Packet + } + return nil +} + +func (m *RecordsPacketData) GetNoData() *NoData { + if x, ok := m.GetPacket().(*RecordsPacketData_NoData); ok { + return x.NoData + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*RecordsPacketData) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*RecordsPacketData_NoData)(nil), + } +} + +type NoData struct { +} + +func (m *NoData) Reset() { *m = NoData{} } +func (m *NoData) String() string { return proto.CompactTextString(m) } +func (*NoData) ProtoMessage() {} +func (*NoData) Descriptor() ([]byte, []int) { + return fileDescriptor_98cfd0253c8b6797, []int{3} +} +func (m *NoData) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NoData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_NoData.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *NoData) XXX_Merge(src proto.Message) { + xxx_messageInfo_NoData.Merge(m, src) +} +func (m *NoData) XXX_Size() int { + return m.Size() +} +func (m *NoData) XXX_DiscardUnknown() { + xxx_messageInfo_NoData.DiscardUnknown(m) +} + +var xxx_messageInfo_NoData proto.InternalMessageInfo + +type DepositRecord struct { + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Amount int64 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"` + Denom string `protobuf:"bytes,3,opt,name=denom,proto3" json:"denom,omitempty"` + HostZoneId string `protobuf:"bytes,4,opt,name=host_zone_id,json=hostZoneId,proto3" json:"host_zone_id,omitempty"` + Status DepositRecord_Status `protobuf:"varint,6,opt,name=status,proto3,enum=stride.records.DepositRecord_Status" json:"status,omitempty"` + DepositEpochNumber uint64 `protobuf:"varint,7,opt,name=deposit_epoch_number,json=depositEpochNumber,proto3" json:"deposit_epoch_number,omitempty"` + Source DepositRecord_Source `protobuf:"varint,8,opt,name=source,proto3,enum=stride.records.DepositRecord_Source" json:"source,omitempty"` +} + +func (m *DepositRecord) Reset() { *m = DepositRecord{} } +func (m *DepositRecord) String() string { return proto.CompactTextString(m) } +func (*DepositRecord) ProtoMessage() {} +func (*DepositRecord) Descriptor() ([]byte, []int) { + return fileDescriptor_98cfd0253c8b6797, []int{4} +} +func (m *DepositRecord) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DepositRecord) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DepositRecord.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *DepositRecord) XXX_Merge(src proto.Message) { + xxx_messageInfo_DepositRecord.Merge(m, src) +} +func (m *DepositRecord) XXX_Size() int { + return m.Size() +} +func (m *DepositRecord) XXX_DiscardUnknown() { + xxx_messageInfo_DepositRecord.DiscardUnknown(m) +} + +var xxx_messageInfo_DepositRecord proto.InternalMessageInfo + +func (m *DepositRecord) GetId() uint64 { + if m != nil { + return m.Id + } + return 0 +} + +func (m *DepositRecord) GetAmount() int64 { + if m != nil { + return m.Amount + } + return 0 +} + +func (m *DepositRecord) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +func (m *DepositRecord) GetHostZoneId() string { + if m != nil { + return m.HostZoneId + } + return "" +} + +func (m *DepositRecord) GetStatus() DepositRecord_Status { + if m != nil { + return m.Status + } + return DepositRecord_TRANSFER_QUEUE +} + +func (m *DepositRecord) GetDepositEpochNumber() uint64 { + if m != nil { + return m.DepositEpochNumber + } + return 0 +} + +func (m *DepositRecord) GetSource() DepositRecord_Source { + if m != nil { + return m.Source + } + return DepositRecord_STRIDE +} + +type HostZoneUnbonding struct { + StTokenAmount uint64 `protobuf:"varint,1,opt,name=st_token_amount,json=stTokenAmount,proto3" json:"st_token_amount,omitempty"` + NativeTokenAmount uint64 `protobuf:"varint,2,opt,name=native_token_amount,json=nativeTokenAmount,proto3" json:"native_token_amount,omitempty"` + Denom string `protobuf:"bytes,3,opt,name=denom,proto3" json:"denom,omitempty"` + HostZoneId string `protobuf:"bytes,4,opt,name=host_zone_id,json=hostZoneId,proto3" json:"host_zone_id,omitempty"` + UnbondingTime uint64 `protobuf:"varint,5,opt,name=unbonding_time,json=unbondingTime,proto3" json:"unbonding_time,omitempty"` + Status HostZoneUnbonding_Status `protobuf:"varint,6,opt,name=status,proto3,enum=stride.records.HostZoneUnbonding_Status" json:"status,omitempty"` + UserRedemptionRecords []string `protobuf:"bytes,7,rep,name=user_redemption_records,json=userRedemptionRecords,proto3" json:"user_redemption_records,omitempty"` +} + +func (m *HostZoneUnbonding) Reset() { *m = HostZoneUnbonding{} } +func (m *HostZoneUnbonding) String() string { return proto.CompactTextString(m) } +func (*HostZoneUnbonding) ProtoMessage() {} +func (*HostZoneUnbonding) Descriptor() ([]byte, []int) { + return fileDescriptor_98cfd0253c8b6797, []int{5} +} +func (m *HostZoneUnbonding) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HostZoneUnbonding) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_HostZoneUnbonding.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *HostZoneUnbonding) XXX_Merge(src proto.Message) { + xxx_messageInfo_HostZoneUnbonding.Merge(m, src) +} +func (m *HostZoneUnbonding) XXX_Size() int { + return m.Size() +} +func (m *HostZoneUnbonding) XXX_DiscardUnknown() { + xxx_messageInfo_HostZoneUnbonding.DiscardUnknown(m) +} + +var xxx_messageInfo_HostZoneUnbonding proto.InternalMessageInfo + +func (m *HostZoneUnbonding) GetStTokenAmount() uint64 { + if m != nil { + return m.StTokenAmount + } + return 0 +} + +func (m *HostZoneUnbonding) GetNativeTokenAmount() uint64 { + if m != nil { + return m.NativeTokenAmount + } + return 0 +} + +func (m *HostZoneUnbonding) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +func (m *HostZoneUnbonding) GetHostZoneId() string { + if m != nil { + return m.HostZoneId + } + return "" +} + +func (m *HostZoneUnbonding) GetUnbondingTime() uint64 { + if m != nil { + return m.UnbondingTime + } + return 0 +} + +func (m *HostZoneUnbonding) GetStatus() HostZoneUnbonding_Status { + if m != nil { + return m.Status + } + return HostZoneUnbonding_UNBONDING_QUEUE +} + +func (m *HostZoneUnbonding) GetUserRedemptionRecords() []string { + if m != nil { + return m.UserRedemptionRecords + } + return nil +} + +type EpochUnbondingRecord struct { + EpochNumber uint64 `protobuf:"varint,1,opt,name=epoch_number,json=epochNumber,proto3" json:"epoch_number,omitempty"` + HostZoneUnbondings []*HostZoneUnbonding `protobuf:"bytes,3,rep,name=host_zone_unbondings,json=hostZoneUnbondings,proto3" json:"host_zone_unbondings,omitempty"` +} + +func (m *EpochUnbondingRecord) Reset() { *m = EpochUnbondingRecord{} } +func (m *EpochUnbondingRecord) String() string { return proto.CompactTextString(m) } +func (*EpochUnbondingRecord) ProtoMessage() {} +func (*EpochUnbondingRecord) Descriptor() ([]byte, []int) { + return fileDescriptor_98cfd0253c8b6797, []int{6} +} +func (m *EpochUnbondingRecord) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EpochUnbondingRecord) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_EpochUnbondingRecord.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *EpochUnbondingRecord) XXX_Merge(src proto.Message) { + xxx_messageInfo_EpochUnbondingRecord.Merge(m, src) +} +func (m *EpochUnbondingRecord) XXX_Size() int { + return m.Size() +} +func (m *EpochUnbondingRecord) XXX_DiscardUnknown() { + xxx_messageInfo_EpochUnbondingRecord.DiscardUnknown(m) +} + +var xxx_messageInfo_EpochUnbondingRecord proto.InternalMessageInfo + +func (m *EpochUnbondingRecord) GetEpochNumber() uint64 { + if m != nil { + return m.EpochNumber + } + return 0 +} + +func (m *EpochUnbondingRecord) GetHostZoneUnbondings() []*HostZoneUnbonding { + if m != nil { + return m.HostZoneUnbondings + } + return nil +} + +// GenesisState defines the recordπs module's genesis state. +// next id: 9 +type GenesisState struct { + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` + PortId string `protobuf:"bytes,2,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty"` + UserRedemptionRecordList []UserRedemptionRecord `protobuf:"bytes,3,rep,name=user_redemption_record_list,json=userRedemptionRecordList,proto3" json:"user_redemption_record_list"` + UserRedemptionRecordCount uint64 `protobuf:"varint,4,opt,name=user_redemption_record_count,json=userRedemptionRecordCount,proto3" json:"user_redemption_record_count,omitempty"` + EpochUnbondingRecordList []EpochUnbondingRecord `protobuf:"bytes,5,rep,name=epoch_unbonding_record_list,json=epochUnbondingRecordList,proto3" json:"epoch_unbonding_record_list"` + DepositRecordList []DepositRecord `protobuf:"bytes,7,rep,name=deposit_record_list,json=depositRecordList,proto3" json:"deposit_record_list"` + DepositRecordCount uint64 `protobuf:"varint,8,opt,name=deposit_record_count,json=depositRecordCount,proto3" json:"deposit_record_count,omitempty"` +} + +func (m *GenesisState) Reset() { *m = GenesisState{} } +func (m *GenesisState) String() string { return proto.CompactTextString(m) } +func (*GenesisState) ProtoMessage() {} +func (*GenesisState) Descriptor() ([]byte, []int) { + return fileDescriptor_98cfd0253c8b6797, []int{7} +} +func (m *GenesisState) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GenesisState.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GenesisState) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenesisState.Merge(m, src) +} +func (m *GenesisState) XXX_Size() int { + return m.Size() +} +func (m *GenesisState) XXX_DiscardUnknown() { + xxx_messageInfo_GenesisState.DiscardUnknown(m) +} + +var xxx_messageInfo_GenesisState proto.InternalMessageInfo + +func (m *GenesisState) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +func (m *GenesisState) GetPortId() string { + if m != nil { + return m.PortId + } + return "" +} + +func (m *GenesisState) GetUserRedemptionRecordList() []UserRedemptionRecord { + if m != nil { + return m.UserRedemptionRecordList + } + return nil +} + +func (m *GenesisState) GetUserRedemptionRecordCount() uint64 { + if m != nil { + return m.UserRedemptionRecordCount + } + return 0 +} + +func (m *GenesisState) GetEpochUnbondingRecordList() []EpochUnbondingRecord { + if m != nil { + return m.EpochUnbondingRecordList + } + return nil +} + +func (m *GenesisState) GetDepositRecordList() []DepositRecord { + if m != nil { + return m.DepositRecordList + } + return nil +} + +func (m *GenesisState) GetDepositRecordCount() uint64 { + if m != nil { + return m.DepositRecordCount + } + return 0 +} + +func init() { + proto.RegisterEnum("stride.records.V2DepositRecord_Status", DepositRecord_Status_name, DepositRecord_Status_value) + proto.RegisterEnum("stride.records.V2DepositRecord_Source", DepositRecord_Source_name, DepositRecord_Source_value) + proto.RegisterEnum("stride.records.V2HostZoneUnbonding_Status", HostZoneUnbonding_Status_name, HostZoneUnbonding_Status_value) + proto.RegisterType((*UserRedemptionRecord)(nil), "stride.records.V2UserRedemptionRecord") + proto.RegisterType((*Params)(nil), "stride.records.V2Params") + proto.RegisterType((*RecordsPacketData)(nil), "stride.records.V2RecordsPacketData") + proto.RegisterType((*NoData)(nil), "stride.records.V2NoData") + proto.RegisterType((*DepositRecord)(nil), "stride.records.V2DepositRecord") + proto.RegisterType((*HostZoneUnbonding)(nil), "stride.records.V2HostZoneUnbonding") + proto.RegisterType((*EpochUnbondingRecord)(nil), "stride.records.V2EpochUnbondingRecord") + proto.RegisterType((*GenesisState)(nil), "stride.records.V2GenesisState") +} + +func init() { proto.RegisterFile("stride/records/genesis.proto", fileDescriptor_98cfd0253c8b6797) } + +var fileDescriptor_98cfd0253c8b6797 = []byte{ + // 944 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x55, 0xcf, 0x6e, 0xdb, 0xc6, + 0x13, 0x16, 0x45, 0x8a, 0x92, 0xc7, 0xb6, 0x22, 0xaf, 0x15, 0x9b, 0x76, 0x12, 0x45, 0x21, 0x7e, + 0xbf, 0x42, 0x97, 0x4a, 0xa9, 0x1b, 0xf4, 0x50, 0x14, 0x68, 0x25, 0x4b, 0xb5, 0x69, 0x28, 0xb2, + 0xba, 0x92, 0x90, 0x22, 0x17, 0x82, 0x12, 0x17, 0xd2, 0x22, 0x11, 0x57, 0xe0, 0xae, 0x8c, 0xb6, + 0x97, 0xbe, 0x42, 0x0f, 0x3d, 0xf4, 0xd8, 0xb7, 0xe8, 0x13, 0x14, 0xc8, 0x31, 0xc7, 0x9e, 0x8a, + 0xc2, 0x7e, 0x88, 0x1e, 0x7a, 0x29, 0xb8, 0x5c, 0xcb, 0xd4, 0x9f, 0x24, 0x40, 0x6f, 0xdc, 0x6f, + 0x66, 0x76, 0x66, 0xbe, 0x19, 0x7e, 0x0b, 0x0f, 0xb9, 0x08, 0xa9, 0x4f, 0x6a, 0x21, 0x19, 0xb1, + 0xd0, 0xe7, 0xb5, 0x31, 0x09, 0x08, 0xa7, 0xbc, 0x3a, 0x0b, 0x99, 0x60, 0x28, 0x1f, 0x5b, 0xab, + 0xca, 0x7a, 0x5c, 0x1c, 0xb3, 0x31, 0x93, 0xa6, 0x5a, 0xf4, 0x15, 0x7b, 0xd9, 0x7f, 0x6b, 0x50, + 0x1c, 0x70, 0x12, 0x62, 0xe2, 0x93, 0xe9, 0x4c, 0x50, 0x16, 0x60, 0xe9, 0x8f, 0xf2, 0x90, 0xa6, + 0xbe, 0xa5, 0x95, 0xb5, 0xca, 0x16, 0x4e, 0x53, 0x1f, 0x1d, 0x80, 0xc9, 0x49, 0xe0, 0x93, 0xd0, + 0x4a, 0x4b, 0x4c, 0x9d, 0xd0, 0x31, 0xe4, 0x42, 0x32, 0x22, 0xf4, 0x8a, 0x84, 0x96, 0x2e, 0x2d, + 0x8b, 0x73, 0x14, 0xe3, 0x4d, 0xd9, 0x3c, 0x10, 0x96, 0x51, 0xd6, 0x2a, 0x06, 0x56, 0x27, 0x54, + 0x84, 0x8c, 0x4f, 0x02, 0x36, 0xb5, 0x32, 0x32, 0x20, 0x3e, 0xa0, 0x32, 0xec, 0x4c, 0x18, 0x17, + 0xee, 0x0f, 0x2c, 0x20, 0x2e, 0xf5, 0x2d, 0x53, 0x1a, 0x21, 0xc2, 0x5e, 0xb2, 0x80, 0x38, 0x3e, + 0x7a, 0x02, 0x3b, 0x64, 0xc6, 0x46, 0x13, 0x37, 0x98, 0x4f, 0x87, 0x24, 0xb4, 0xb2, 0xf2, 0xd6, + 0x6d, 0x89, 0x75, 0x24, 0x84, 0x2a, 0x50, 0x18, 0xbd, 0xf6, 0xe8, 0xd4, 0xa5, 0xdc, 0x9d, 0x91, + 0xc0, 0xa7, 0xc1, 0xd8, 0xca, 0x95, 0xb5, 0x4a, 0x0e, 0xe7, 0x25, 0xee, 0xf0, 0x6e, 0x8c, 0xda, + 0x79, 0x30, 0xbb, 0x5e, 0xe8, 0x4d, 0xf9, 0xe7, 0xc6, 0x2f, 0xbf, 0x3e, 0x4e, 0xd9, 0x5d, 0xd8, + 0x8b, 0x5b, 0xe7, 0x5d, 0x6f, 0xf4, 0x8a, 0x88, 0xa6, 0x27, 0x3c, 0xf4, 0x09, 0x64, 0x03, 0xe6, + 0xfa, 0x9e, 0xf0, 0x24, 0x15, 0xdb, 0x27, 0x07, 0xd5, 0x65, 0x5a, 0xab, 0x1d, 0x16, 0x39, 0x9e, + 0xa7, 0xb0, 0x19, 0xc8, 0xaf, 0x46, 0x0e, 0xcc, 0x99, 0xbc, 0xc0, 0xce, 0x81, 0x19, 0x5b, 0xed, + 0xdf, 0x74, 0xd8, 0x6d, 0x92, 0x19, 0xe3, 0x54, 0xac, 0xd1, 0x6b, 0xdc, 0xd2, 0xab, 0xa8, 0x8a, + 0xe8, 0xd5, 0xd7, 0xa9, 0xd2, 0xdf, 0x47, 0x95, 0xb1, 0x46, 0xd5, 0x17, 0x60, 0x72, 0xe1, 0x89, + 0x39, 0x97, 0x34, 0xe6, 0x4f, 0xfe, 0xb7, 0x5a, 0xf7, 0x52, 0x39, 0xd5, 0x9e, 0xf4, 0xc5, 0x2a, + 0x06, 0x3d, 0x85, 0xa2, 0x1f, 0xdb, 0xdd, 0x0d, 0x84, 0x23, 0x65, 0x6b, 0x25, 0x78, 0x8f, 0xf2, + 0xb1, 0x79, 0x38, 0x22, 0x92, 0xed, 0x0f, 0xe7, 0x93, 0xbe, 0x58, 0xc5, 0xd8, 0x13, 0x30, 0xe3, + 0x0a, 0x10, 0x82, 0x7c, 0x1f, 0xd7, 0x3b, 0xbd, 0xaf, 0x5b, 0xd8, 0xfd, 0x66, 0xd0, 0x1a, 0xb4, + 0x0a, 0x29, 0x64, 0x41, 0x71, 0x81, 0x39, 0x1d, 0xb7, 0x8b, 0x2f, 0xcf, 0x70, 0xab, 0xd7, 0x2b, + 0xa4, 0x51, 0x11, 0x0a, 0xcd, 0x56, 0xbb, 0x75, 0x56, 0xef, 0x3b, 0x97, 0x1d, 0xe5, 0xaf, 0xa1, + 0x63, 0x38, 0x48, 0xa0, 0xc9, 0x08, 0xdd, 0xae, 0x80, 0x19, 0xe7, 0x46, 0x00, 0x66, 0xaf, 0x8f, + 0x9d, 0x66, 0x94, 0x01, 0x41, 0xfe, 0x85, 0xd3, 0x3f, 0x6f, 0xe2, 0xfa, 0x8b, 0x7a, 0xdb, 0x75, + 0x4e, 0xeb, 0x05, 0xed, 0xc2, 0xc8, 0x65, 0x0a, 0xa6, 0xfd, 0xbb, 0x0e, 0x7b, 0xe7, 0x8a, 0xd6, + 0x41, 0x30, 0x64, 0x72, 0x77, 0xd0, 0x47, 0x70, 0x8f, 0x0b, 0x57, 0xb0, 0x57, 0x24, 0x70, 0xd5, + 0xd8, 0xe2, 0x51, 0xee, 0x72, 0xd1, 0x8f, 0xd0, 0x7a, 0x3c, 0xbd, 0x2a, 0xec, 0x07, 0x9e, 0xa0, + 0x57, 0x64, 0xd9, 0x37, 0x2d, 0x7d, 0xf7, 0x62, 0x53, 0xd2, 0xff, 0xbf, 0x4e, 0xfb, 0xff, 0x90, + 0x9f, 0xdf, 0x16, 0xe7, 0x0a, 0x3a, 0x25, 0xf2, 0xcf, 0x32, 0xf0, 0xee, 0x02, 0xed, 0xd3, 0x29, + 0x41, 0x5f, 0xad, 0x2c, 0x45, 0x65, 0x75, 0x48, 0x6b, 0x9d, 0xae, 0x2e, 0xc6, 0x67, 0x70, 0x38, + 0xe7, 0x24, 0x74, 0xc3, 0x85, 0x5c, 0xb8, 0x2a, 0xd6, 0xca, 0x96, 0xf5, 0xca, 0x16, 0xbe, 0x3f, + 0xdf, 0x20, 0x26, 0xdc, 0xfe, 0x71, 0x31, 0xe0, 0x7d, 0xb8, 0x37, 0xe8, 0x34, 0x2e, 0x3b, 0x4d, + 0xa7, 0x73, 0xb6, 0x98, 0xf0, 0x11, 0xdc, 0xbf, 0x03, 0x97, 0x06, 0x86, 0x0e, 0x61, 0xbf, 0xf5, + 0xad, 0xd3, 0x77, 0x57, 0xb6, 0x42, 0x43, 0x8f, 0xe0, 0x68, 0xd9, 0x90, 0x8c, 0x33, 0xd0, 0x2e, + 0x6c, 0x9d, 0xb6, 0xeb, 0xce, 0xf3, 0x7a, 0xa3, 0xdd, 0x2a, 0xa4, 0xed, 0x9f, 0x35, 0x28, 0xca, + 0x7d, 0x5d, 0xb4, 0xa6, 0x7e, 0xc4, 0x55, 0x4d, 0xd1, 0xd6, 0x35, 0xa5, 0x07, 0xc5, 0x3b, 0xfe, + 0x17, 0x8c, 0x72, 0x4b, 0x2f, 0xeb, 0x95, 0xed, 0x93, 0x27, 0x1f, 0x24, 0x11, 0xa3, 0xc9, 0x2a, + 0xc4, 0x2f, 0x8c, 0x5c, 0xba, 0xa0, 0xdb, 0xff, 0xe8, 0xb0, 0x73, 0x16, 0xcb, 0x76, 0xc4, 0x0f, + 0x41, 0xcf, 0x22, 0xf5, 0x88, 0x54, 0xe9, 0x5d, 0x7a, 0x13, 0x6b, 0x56, 0xc3, 0x78, 0xf3, 0xe7, + 0xe3, 0x14, 0x56, 0xbe, 0xe8, 0x10, 0xb2, 0x33, 0x16, 0x8a, 0x68, 0x39, 0x94, 0x3a, 0x47, 0x47, + 0xc7, 0x47, 0x14, 0x1e, 0x6c, 0x9e, 0x97, 0xfb, 0x9a, 0x72, 0xa1, 0x3a, 0x58, 0xfb, 0x57, 0x37, + 0x3d, 0x08, 0x2a, 0xa3, 0xb5, 0x69, 0xbe, 0x6d, 0xca, 0x05, 0xfa, 0x12, 0x1e, 0xbe, 0x23, 0xd5, + 0x28, 0xf1, 0x04, 0x1c, 0x6d, 0x8a, 0x3f, 0x95, 0xcb, 0x4f, 0xe1, 0x41, 0x3c, 0x89, 0xbb, 0x55, + 0x4e, 0xd6, 0x9a, 0xd9, 0x5c, 0xeb, 0xa6, 0xa1, 0xde, 0xd6, 0x4a, 0x36, 0xd8, 0x64, 0xad, 0x3d, + 0xd8, 0xbf, 0xd5, 0xb7, 0x64, 0x8a, 0xac, 0x4c, 0xf1, 0xe8, 0xbd, 0xd2, 0xa5, 0xee, 0xde, 0xf3, + 0x93, 0xa0, 0xbc, 0x34, 0x21, 0x9a, 0x4b, 0x8d, 0xe7, 0x96, 0x44, 0x33, 0xd1, 0xf1, 0x49, 0x06, + 0xf4, 0xe7, 0x7c, 0xdc, 0xb8, 0x78, 0x73, 0x5d, 0xd2, 0xde, 0x5e, 0x97, 0xb4, 0xbf, 0xae, 0x4b, + 0xda, 0x4f, 0x37, 0xa5, 0xd4, 0xdb, 0x9b, 0x52, 0xea, 0x8f, 0x9b, 0x52, 0xea, 0xe5, 0xd3, 0x31, + 0x15, 0x93, 0xf9, 0xb0, 0x3a, 0x62, 0xd3, 0x5a, 0x4f, 0x16, 0xf5, 0x71, 0xdb, 0x1b, 0xf2, 0x9a, + 0x7a, 0xf8, 0xaf, 0x9e, 0xd5, 0xbe, 0x5b, 0xbc, 0xfe, 0xe2, 0xfb, 0x19, 0xe1, 0x43, 0x53, 0x3e, + 0xeb, 0x9f, 0xfe, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x71, 0xad, 0x82, 0x28, 0x1c, 0x08, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type MsgClient interface { +} + +type msgClient struct { + cc grpc1.ClientConn +} + +func NewMsgClient(cc grpc1.ClientConn) MsgClient { + return &msgClient{cc} +} + +// MsgServer is the server API for Msg service. +type MsgServer interface { +} + +// UnimplementedMsgServer can be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func RegisterMsgServer(s grpc1.Server, srv MsgServer) { + s.RegisterService(&_Msg_serviceDesc, srv) +} + +var _Msg_serviceDesc = grpc.ServiceDesc{ + ServiceName: "stride.records.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{}, + Streams: []grpc.StreamDesc{}, + Metadata: "stride/records/genesis.proto", +} + +func (m *UserRedemptionRecord) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *UserRedemptionRecord) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *UserRedemptionRecord) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ClaimIsPending { + i-- + if m.ClaimIsPending { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x40 + } + if m.EpochNumber != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.EpochNumber)) + i-- + dAtA[i] = 0x38 + } + if len(m.HostZoneId) > 0 { + i -= len(m.HostZoneId) + copy(dAtA[i:], m.HostZoneId) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.HostZoneId))) + i-- + dAtA[i] = 0x32 + } + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0x2a + } + if m.Amount != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.Amount)) + i-- + dAtA[i] = 0x20 + } + if len(m.Receiver) > 0 { + i -= len(m.Receiver) + copy(dAtA[i:], m.Receiver) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.Receiver))) + i-- + dAtA[i] = 0x1a + } + if len(m.Sender) > 0 { + i -= len(m.Sender) + copy(dAtA[i:], m.Sender) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.Sender))) + i-- + dAtA[i] = 0x12 + } + if len(m.Id) > 0 { + i -= len(m.Id) + copy(dAtA[i:], m.Id) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.Id))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Params) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Params) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *RecordsPacketData) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RecordsPacketData) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RecordsPacketData) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Packet != nil { + { + size := m.Packet.Size() + i -= size + if _, err := m.Packet.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + } + } + return len(dAtA) - i, nil +} + +func (m *RecordsPacketData_NoData) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RecordsPacketData_NoData) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.NoData != nil { + { + size, err := m.NoData.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} +func (m *NoData) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *NoData) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NoData) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *DepositRecord) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DepositRecord) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DepositRecord) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Source != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.Source)) + i-- + dAtA[i] = 0x40 + } + if m.DepositEpochNumber != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.DepositEpochNumber)) + i-- + dAtA[i] = 0x38 + } + if m.Status != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.Status)) + i-- + dAtA[i] = 0x30 + } + if len(m.HostZoneId) > 0 { + i -= len(m.HostZoneId) + copy(dAtA[i:], m.HostZoneId) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.HostZoneId))) + i-- + dAtA[i] = 0x22 + } + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0x1a + } + if m.Amount != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.Amount)) + i-- + dAtA[i] = 0x10 + } + if m.Id != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.Id)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *HostZoneUnbonding) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HostZoneUnbonding) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HostZoneUnbonding) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.UserRedemptionRecords) > 0 { + for iNdEx := len(m.UserRedemptionRecords) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.UserRedemptionRecords[iNdEx]) + copy(dAtA[i:], m.UserRedemptionRecords[iNdEx]) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.UserRedemptionRecords[iNdEx]))) + i-- + dAtA[i] = 0x3a + } + } + if m.Status != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.Status)) + i-- + dAtA[i] = 0x30 + } + if m.UnbondingTime != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.UnbondingTime)) + i-- + dAtA[i] = 0x28 + } + if len(m.HostZoneId) > 0 { + i -= len(m.HostZoneId) + copy(dAtA[i:], m.HostZoneId) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.HostZoneId))) + i-- + dAtA[i] = 0x22 + } + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0x1a + } + if m.NativeTokenAmount != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.NativeTokenAmount)) + i-- + dAtA[i] = 0x10 + } + if m.StTokenAmount != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.StTokenAmount)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *EpochUnbondingRecord) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *EpochUnbondingRecord) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EpochUnbondingRecord) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.HostZoneUnbondings) > 0 { + for iNdEx := len(m.HostZoneUnbondings) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.HostZoneUnbondings[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if m.EpochNumber != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.EpochNumber)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *GenesisState) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GenesisState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.DepositRecordCount != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.DepositRecordCount)) + i-- + dAtA[i] = 0x40 + } + if len(m.DepositRecordList) > 0 { + for iNdEx := len(m.DepositRecordList) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.DepositRecordList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + } + if len(m.EpochUnbondingRecordList) > 0 { + for iNdEx := len(m.EpochUnbondingRecordList) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.EpochUnbondingRecordList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + } + if m.UserRedemptionRecordCount != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.UserRedemptionRecordCount)) + i-- + dAtA[i] = 0x20 + } + if len(m.UserRedemptionRecordList) > 0 { + for iNdEx := len(m.UserRedemptionRecordList) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.UserRedemptionRecordList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if len(m.PortId) > 0 { + i -= len(m.PortId) + copy(dAtA[i:], m.PortId) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.PortId))) + i-- + dAtA[i] = 0x12 + } + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { + offset -= sovGenesis(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *UserRedemptionRecord) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Id) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = len(m.Receiver) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + if m.Amount != 0 { + n += 1 + sovGenesis(uint64(m.Amount)) + } + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = len(m.HostZoneId) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + if m.EpochNumber != 0 { + n += 1 + sovGenesis(uint64(m.EpochNumber)) + } + if m.ClaimIsPending { + n += 2 + } + return n +} + +func (m *Params) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *RecordsPacketData) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Packet != nil { + n += m.Packet.Size() + } + return n +} + +func (m *RecordsPacketData_NoData) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.NoData != nil { + l = m.NoData.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + return n +} +func (m *NoData) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *DepositRecord) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Id != 0 { + n += 1 + sovGenesis(uint64(m.Id)) + } + if m.Amount != 0 { + n += 1 + sovGenesis(uint64(m.Amount)) + } + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = len(m.HostZoneId) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + if m.Status != 0 { + n += 1 + sovGenesis(uint64(m.Status)) + } + if m.DepositEpochNumber != 0 { + n += 1 + sovGenesis(uint64(m.DepositEpochNumber)) + } + if m.Source != 0 { + n += 1 + sovGenesis(uint64(m.Source)) + } + return n +} + +func (m *HostZoneUnbonding) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.StTokenAmount != 0 { + n += 1 + sovGenesis(uint64(m.StTokenAmount)) + } + if m.NativeTokenAmount != 0 { + n += 1 + sovGenesis(uint64(m.NativeTokenAmount)) + } + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + l = len(m.HostZoneId) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + if m.UnbondingTime != 0 { + n += 1 + sovGenesis(uint64(m.UnbondingTime)) + } + if m.Status != 0 { + n += 1 + sovGenesis(uint64(m.Status)) + } + if len(m.UserRedemptionRecords) > 0 { + for _, s := range m.UserRedemptionRecords { + l = len(s) + n += 1 + l + sovGenesis(uint64(l)) + } + } + return n +} + +func (m *EpochUnbondingRecord) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.EpochNumber != 0 { + n += 1 + sovGenesis(uint64(m.EpochNumber)) + } + if len(m.HostZoneUnbondings) > 0 { + for _, e := range m.HostZoneUnbondings { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + return n +} + +func (m *GenesisState) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovGenesis(uint64(l)) + l = len(m.PortId) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + if len(m.UserRedemptionRecordList) > 0 { + for _, e := range m.UserRedemptionRecordList { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + if m.UserRedemptionRecordCount != 0 { + n += 1 + sovGenesis(uint64(m.UserRedemptionRecordCount)) + } + if len(m.EpochUnbondingRecordList) > 0 { + for _, e := range m.EpochUnbondingRecordList { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + if len(m.DepositRecordList) > 0 { + for _, e := range m.DepositRecordList { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + if m.DepositRecordCount != 0 { + n += 1 + sovGenesis(uint64(m.DepositRecordCount)) + } + return n +} + +func sovGenesis(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenesis(x uint64) (n int) { + return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *UserRedemptionRecord) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: UserRedemptionRecord: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UserRedemptionRecord: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Id = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Sender", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Sender = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Receiver", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Receiver = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + m.Amount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Amount |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZoneId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZoneId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EpochNumber", wireType) + } + m.EpochNumber = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EpochNumber |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ClaimIsPending", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ClaimIsPending = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Params) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RecordsPacketData) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RecordsPacketData: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RecordsPacketData: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NoData", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &NoData{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Packet = &RecordsPacketData_NoData{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NoData) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NoData: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NoData: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DepositRecord) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DepositRecord: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DepositRecord: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + } + m.Id = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Id |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + m.Amount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Amount |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZoneId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZoneId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + m.Status = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Status |= DepositRecord_Status(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DepositEpochNumber", wireType) + } + m.DepositEpochNumber = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DepositEpochNumber |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Source", wireType) + } + m.Source = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Source |= DepositRecord_Source(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *HostZoneUnbonding) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HostZoneUnbonding: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HostZoneUnbonding: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field StTokenAmount", wireType) + } + m.StTokenAmount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.StTokenAmount |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NativeTokenAmount", wireType) + } + m.NativeTokenAmount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NativeTokenAmount |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZoneId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZoneId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UnbondingTime", wireType) + } + m.UnbondingTime = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.UnbondingTime |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + m.Status = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Status |= HostZoneUnbonding_Status(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UserRedemptionRecords", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UserRedemptionRecords = append(m.UserRedemptionRecords, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EpochUnbondingRecord) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EpochUnbondingRecord: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EpochUnbondingRecord: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EpochNumber", wireType) + } + m.EpochNumber = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EpochNumber |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZoneUnbondings", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZoneUnbondings = append(m.HostZoneUnbondings, &HostZoneUnbonding{}) + if err := m.HostZoneUnbondings[len(m.HostZoneUnbondings)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GenesisState) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PortId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PortId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UserRedemptionRecordList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UserRedemptionRecordList = append(m.UserRedemptionRecordList, UserRedemptionRecord{}) + if err := m.UserRedemptionRecordList[len(m.UserRedemptionRecordList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UserRedemptionRecordCount", wireType) + } + m.UserRedemptionRecordCount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.UserRedemptionRecordCount |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EpochUnbondingRecordList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.EpochUnbondingRecordList = append(m.EpochUnbondingRecordList, EpochUnbondingRecord{}) + if err := m.EpochUnbondingRecordList[len(m.EpochUnbondingRecordList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DepositRecordList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DepositRecordList = append(m.DepositRecordList, DepositRecord{}) + if err := m.DepositRecordList[len(m.DepositRecordList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DepositRecordCount", wireType) + } + m.DepositRecordCount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DepositRecordCount |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenesis(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenesis + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenesis + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenesis + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/records/migrations/v2/types/params.go b/x/records/migrations/v2/types/params.go new file mode 100644 index 00000000000..357196ad6a6 --- /dev/null +++ b/x/records/migrations/v2/types/params.go @@ -0,0 +1,39 @@ +package types + +import ( + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + "gopkg.in/yaml.v2" +) + +var _ paramtypes.ParamSet = (*Params)(nil) + +// ParamKeyTable the param key table for launch module +func ParamKeyTable() paramtypes.KeyTable { + return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) +} + +// NewParams creates a new Params instance +func NewParams() Params { + return Params{} +} + +// DefaultParams returns a default set of parameters +func DefaultParams() Params { + return NewParams() +} + +// ParamSetPairs get the params.ParamSet +func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { + return paramtypes.ParamSetPairs{} +} + +// Validate validates the set of params +func (p Params) Validate() error { + return nil +} + +// String implements the Stringer interface. +func (p Params) String() string { + out, _ := yaml.Marshal(p) + return string(out) +} diff --git a/x/records/module.go b/x/records/module.go new file mode 100644 index 00000000000..3ded6d11145 --- /dev/null +++ b/x/records/module.go @@ -0,0 +1,163 @@ +package records + +import ( + "context" + "encoding/json" + "fmt" + + "cosmossdk.io/core/appmodule" + "github.com/gorilla/mux" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + + "github.com/osmosis-labs/osmosis/v27/x/records/client/cli" + "github.com/osmosis-labs/osmosis/v27/x/records/keeper" + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +var ( + _ module.AppModuleBasic = AppModuleBasic{} + _ module.HasGenesisBasics = AppModuleBasic{} + + _ appmodule.AppModule = AppModule{} + + _ module.HasConsensusVersion = AppModule{} + _ module.HasGenesis = AppModule{} + _ module.HasServices = AppModule{} +) + +// ---------------------------------------------------------------------------- +// AppModuleBasic +// ---------------------------------------------------------------------------- + +// AppModuleBasic implements the AppModuleBasic interface for the capability module. +type AppModuleBasic struct { + cdc codec.BinaryCodec +} + +func NewAppModuleBasic(cdc codec.BinaryCodec) AppModuleBasic { + return AppModuleBasic{cdc: cdc} +} + +// Name returns the capability module's name. +func (AppModuleBasic) Name() string { + return types.ModuleName +} + +func (AppModuleBasic) RegisterCodec(cdc *codec.LegacyAmino) { + types.RegisterCodec(cdc) +} + +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + types.RegisterCodec(cdc) +} + +// RegisterInterfaces registers the module's interface types +func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) {} + +// DefaultGenesis returns the capability module's default genesis state. +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return cdc.MustMarshalJSON(types.DefaultGenesis()) +} + +// ValidateGenesis performs genesis state validation for the capability module. +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { + var genState types.GenesisState + if err := cdc.UnmarshalJSON(bz, &genState); err != nil { + return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) + } + return genState.Validate() +} + +// RegisterRESTRoutes registers the capability module's REST service handlers. +func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Router) { +} + +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { + if err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)); err != nil { + panic(err) + } +} + +// GetTxCmd returns the capability module's root tx command. +func (a AppModuleBasic) GetTxCmd() *cobra.Command { + return cli.GetTxCmd() +} + +// GetQueryCmd returns the capability module's root query command. +func (AppModuleBasic) GetQueryCmd() *cobra.Command { + return cli.GetQueryCmd(types.StoreKey) +} + +// ---------------------------------------------------------------------------- +// AppModule +// ---------------------------------------------------------------------------- + +// AppModule implements the AppModule interface for the capability module. +type AppModule struct { + AppModuleBasic + + keeper keeper.Keeper + accountKeeper types.AccountKeeper + bankKeeper types.BankKeeper +} + +func NewAppModule( + cdc codec.Codec, + keeper keeper.Keeper, + accountKeeper types.AccountKeeper, + bankKeeper types.BankKeeper, +) AppModule { + return AppModule{ + AppModuleBasic: NewAppModuleBasic(cdc), + keeper: keeper, + accountKeeper: accountKeeper, + bankKeeper: bankKeeper, + } +} + +// Name returns the capability module's name. +func (am AppModule) Name() string { + return am.AppModuleBasic.Name() +} + +// QuerierRoute returns the capability module's query routing key. +func (AppModule) QuerierRoute() string { return types.QuerierRoute } + +// RegisterServices registers a GRPC query service to respond to the +// module-specific GRPC queries. +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterQueryServer(cfg.QueryServer(), am.keeper) +} + +// RegisterInvariants registers the capability module's invariants. +func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} + +// InitGenesis performs the capability module's genesis initialization +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) { + var genState types.GenesisState + cdc.MustUnmarshalJSON(gs, &genState) + am.keeper.InitGenesis(ctx, genState) +} + +// ExportGenesis returns the capability module's exported genesis state as raw JSON bytes. +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + genState := am.keeper.ExportGenesis(ctx) + return cdc.MustMarshalJSON(genState) +} + +// ConsensusVersion implements ConsensusVersion. +func (AppModule) ConsensusVersion() uint64 { return 2 } + +// IsOnePerModuleType implements the depinject.OnePerModuleType interface. +func (am AppModule) IsOnePerModuleType() {} + +// IsAppModule implements the appmodule.AppModule interface. +func (am AppModule) IsAppModule() {} diff --git a/x/records/module_ibc.go b/x/records/module_ibc.go new file mode 100644 index 00000000000..fd659fc22d9 --- /dev/null +++ b/x/records/module_ibc.go @@ -0,0 +1,332 @@ +package records + +import ( + "fmt" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" + ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" + + "github.com/osmosis-labs/osmosis/v27/x/records/keeper" +) + +// IBC MODULE IMPLEMENTATION +// IBCModule implements the ICS26 interface for transfer given the transfer keeper. +type IBCModule struct { + keeper keeper.Keeper + app porttypes.IBCModule +} + +// NewIBCModule creates a new IBCModule given the keeper +func NewIBCModule(k keeper.Keeper, app porttypes.IBCModule) IBCModule { + return IBCModule{ + keeper: k, + app: app, + } +} + +// OnChanOpenInit implements the IBCModule interface +func (im IBCModule) OnChanOpenInit( + ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID string, + channelID string, + channelCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, + version string, +) (string, error) { + return im.app.OnChanOpenInit( + ctx, + order, + connectionHops, + portID, + channelID, + channelCap, + counterparty, + version, + ) +} + +// OnChanOpenTry implements the IBCModule interface. +func (im IBCModule) OnChanOpenTry( + ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID, + channelID string, + chanCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, + counterpartyVersion string, +) (string, error) { + // doCustomLogic() + // core/04-channel/types contains a helper function to split middleware and underlying app version + // call the underlying applications OnChanOpenTry callback + version, err := im.app.OnChanOpenTry( + ctx, + order, + connectionHops, + portID, + channelID, + chanCap, + counterparty, + counterpartyVersion, + ) + if err != nil { + return "", err + } + ctx.Logger().Info(fmt.Sprintf("IBC Chan Open Version %s: ", version)) + ctx.Logger().Info(fmt.Sprintf("IBC Chan Open cpAppVersion %s: ", counterpartyVersion)) + return version, nil +} + +// OnChanOpenAck implements the IBCModule interface +func (im IBCModule) OnChanOpenAck( + ctx sdk.Context, + portID, + channelID string, + counterpartyChannelId string, // counterpartyChannelId + counterpartyVersion string, +) error { + // core/04-channel/types contains a helper function to split middleware and underlying app version + // _, _ := channeltypes.SplitChannelVersion(counterpartyVersion) + // doCustomLogic() + // call the underlying applications OnChanOpenTry callback + return im.app.OnChanOpenAck(ctx, portID, channelID, counterpartyChannelId, counterpartyVersion) +} + +// OnChanOpenConfirm implements the IBCModule interface +func (im IBCModule) OnChanOpenConfirm( + ctx sdk.Context, + portID, + channelID string, +) error { + // doCustomLogic() + return im.app.OnChanOpenConfirm(ctx, portID, channelID) +} + +// OnChanCloseInit implements the IBCModule interface +func (im IBCModule) OnChanCloseInit( + ctx sdk.Context, + portID, + channelID string, +) error { + // doCustomLogic() + return im.app.OnChanCloseInit(ctx, portID, channelID) +} + +// OnChanCloseConfirm implements the IBCModule interface +func (im IBCModule) OnChanCloseConfirm( + ctx sdk.Context, + portID, + channelID string, +) error { + // doCustomLogic() + return im.app.OnChanCloseConfirm(ctx, portID, channelID) +} + +// OnRecvPacket implements the IBCModule interface. A successful acknowledgement +// is returned if the packet data is successfully decoded and the receive application +// logic returns without error. +func (im IBCModule) OnRecvPacket( + ctx sdk.Context, + packet channeltypes.Packet, + relayer sdk.AccAddress, +) ibcexported.Acknowledgement { + // NOTE: acknowledgement will be written synchronously during IBC handler execution. + // doCustomLogic(packet) + return im.app.OnRecvPacket(ctx, packet, relayer) +} + +// OnAcknowledgementPacket implements the IBCModule interface +func (im IBCModule) OnAcknowledgementPacket( + ctx sdk.Context, + packet channeltypes.Packet, + acknowledgement []byte, + relayer sdk.AccAddress, +) error { + im.keeper.Logger(ctx).Info( + fmt.Sprintf("OnAcknowledgementPacket (Records): Sequence %d, SourcePort %s, SourceChannel %s, DestinationPort %s, DestinationChannel %s", + packet.Sequence, packet.SourcePort, packet.SourceChannel, packet.DestinationPort, packet.DestinationChannel)) + + // The error here is intentionally returned immediately instead of refunding tokens + // This only errors if either: + // 1) The ack can't be parsed, in which case we don't know whether to refund tokens, or + // 2) The callback errors, in which case, it's better to not refund tokens to keep the state + // changes as consistent as possible between records and the bank module + // Transfer initiated from users will flow through this branch without an error, since the callbacks + // are only prevelant for transfer's initated by stakeibc + if err := im.keeper.OnAcknowledgementPacket(ctx, packet, acknowledgement); err != nil { + im.keeper.Logger(ctx).Error(fmt.Sprintf("Records OnAcknowledgementPacket failed: %s", err.Error())) + return errorsmod.Wrapf(err, "OnAckPacket callback failed") + } + + return im.app.OnAcknowledgementPacket(ctx, packet, acknowledgement, relayer) +} + +// OnTimeoutPacket implements the IBCModule interface +func (im IBCModule) OnTimeoutPacket( + ctx sdk.Context, + packet channeltypes.Packet, + relayer sdk.AccAddress, +) error { + im.keeper.Logger(ctx).Error( + fmt.Sprintf("OnTimeoutPacket (Records): Sequence %d, SourcePort %s, SourceChannel %s, DestinationPort %s, DestinationChannel %s", + packet.Sequence, packet.SourcePort, packet.SourceChannel, packet.DestinationPort, packet.DestinationChannel)) + + // The error here is intentionally returned immediately instead of refunding tokens + // This only errors if the callback fails, in which case, it's better to not refund tokens to keep the state + // changes as consistent as possible between records and the bank module + // Transfer initiated from users will flow through this branch without an error, since the callbacks + // are only prevelant for transfer's initated by stakeibc + if err := im.keeper.OnTimeoutPacket(ctx, packet); err != nil { + im.keeper.Logger(ctx).Error(fmt.Sprintf("Records OnTimeoutPacket failed: %s", err.Error())) + return errorsmod.Wrapf(err, "OnTimeoutPacket callback failed") + } + + return im.app.OnTimeoutPacket(ctx, packet, relayer) +} + +// This is implemented by ICS4 and all middleware that are wrapping base application. +// The base application will call `sendPacket` or `writeAcknowledgement` of the middleware directly above them +// which will call the next middleware until it reaches the core IBC handler. +// SendPacket implements the ICS4 Wrapper interface +func (im IBCModule) SendPacket( + ctx sdk.Context, + chanCap *capabilitytypes.Capability, + packet ibcexported.PacketI, +) error { + return nil +} + +// WriteAcknowledgement implements the ICS4 Wrapper interface +func (im IBCModule) WriteAcknowledgement( + ctx sdk.Context, + chanCap *capabilitytypes.Capability, + packet ibcexported.PacketI, + ack ibcexported.Acknowledgement, +) error { + return nil +} + +// GetAppVersion returns the interchain accounts metadata. +func (im IBCModule) GetAppVersion(ctx sdk.Context, portID, channelID string) (string, bool) { + return ibctransfertypes.Version, true // im.keeper.GetAppVersion(ctx, portID, channelID) +} + +// TODO [cleanup]: We probably don't need these AppModule callbacks, +// but we should dig into it more +// before removing + +// APP MODULE IMPLEMENTATION +// OnChanOpenInit implements the IBCModule interface +func (am AppModule) OnChanOpenInit( + ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID string, + channelID string, + chanCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, + version string, +) (string, error) { + return "", errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "UNIMPLEMENTED") +} + +// OnChanOpenTry implements the IBCModule interface +func (am AppModule) OnChanOpenTry( + ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID, + channelID string, + chanCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, + version, + counterpartyVersion string, +) error { + return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "UNIMPLEMENTED") +} + +// OnChanOpenAck implements the IBCModule interface +func (am AppModule) OnChanOpenAck( + ctx sdk.Context, + portID, + channelID string, + counterpartyVersion string, +) error { + return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "UNIMPLEMENTED") +} + +// OnChanOpenConfirm implements the IBCModule interface +func (am AppModule) OnChanOpenConfirm( + ctx sdk.Context, + portID, + channelID string, +) error { + return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "UNIMPLEMENTED") +} + +// OnChanCloseInit implements the IBCModule interface +func (am AppModule) OnChanCloseInit( + ctx sdk.Context, + portID, + channelID string, +) error { + // Disallow user-initiated channel closing for channels + return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "user cannot close channel") +} + +// OnChanCloseConfirm implements the IBCModule interface +func (am AppModule) OnChanCloseConfirm( + ctx sdk.Context, + portID, + channelID string, +) error { + return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "UNIMPLEMENTED") +} + +// OnRecvPacket implements the IBCModule interface +func (am AppModule) OnRecvPacket( + ctx sdk.Context, + modulePacket channeltypes.Packet, + relayer sdk.AccAddress, +) ibcexported.Acknowledgement { + // NOTE: acknowledgement will be written synchronously during IBC handler execution. + return nil +} + +// OnAcknowledgementPacket implements the IBCModule interface +func (am AppModule) OnAcknowledgementPacket( + ctx sdk.Context, + modulePacket channeltypes.Packet, + acknowledgement []byte, + relayer sdk.AccAddress, +) error { + return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "UNIMPLEMENTED") +} + +// OnTimeoutPacket implements the IBCModule interface +func (am AppModule) OnTimeoutPacket( + ctx sdk.Context, + modulePacket channeltypes.Packet, + relayer sdk.AccAddress, +) error { + return nil +} + +func (am AppModule) NegotiateAppVersion( + ctx sdk.Context, + order channeltypes.Order, + connectionID string, + portID string, + counterparty channeltypes.Counterparty, + proposedVersion string, +) (version string, err error) { + return proposedVersion, nil +} diff --git a/x/records/types/callbacks.pb.go b/x/records/types/callbacks.pb.go new file mode 100644 index 00000000000..be18bea5fec --- /dev/null +++ b/x/records/types/callbacks.pb.go @@ -0,0 +1,481 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/records/callbacks.proto + +package types + +import ( + fmt "fmt" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type TransferCallback struct { + DepositRecordId uint64 `protobuf:"varint,1,opt,name=deposit_record_id,json=depositRecordId,proto3" json:"deposit_record_id,omitempty"` +} + +func (m *TransferCallback) Reset() { *m = TransferCallback{} } +func (m *TransferCallback) String() string { return proto.CompactTextString(m) } +func (*TransferCallback) ProtoMessage() {} +func (*TransferCallback) Descriptor() ([]byte, []int) { + return fileDescriptor_6f7cdd5c1d8b3a46, []int{0} +} +func (m *TransferCallback) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TransferCallback) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TransferCallback.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TransferCallback) XXX_Merge(src proto.Message) { + xxx_messageInfo_TransferCallback.Merge(m, src) +} +func (m *TransferCallback) XXX_Size() int { + return m.Size() +} +func (m *TransferCallback) XXX_DiscardUnknown() { + xxx_messageInfo_TransferCallback.DiscardUnknown(m) +} + +var xxx_messageInfo_TransferCallback proto.InternalMessageInfo + +func (m *TransferCallback) GetDepositRecordId() uint64 { + if m != nil { + return m.DepositRecordId + } + return 0 +} + +type TransferLSMTokenCallback struct { + Deposit *LSMTokenDeposit `protobuf:"bytes,1,opt,name=deposit,proto3" json:"deposit,omitempty"` +} + +func (m *TransferLSMTokenCallback) Reset() { *m = TransferLSMTokenCallback{} } +func (m *TransferLSMTokenCallback) String() string { return proto.CompactTextString(m) } +func (*TransferLSMTokenCallback) ProtoMessage() {} +func (*TransferLSMTokenCallback) Descriptor() ([]byte, []int) { + return fileDescriptor_6f7cdd5c1d8b3a46, []int{1} +} +func (m *TransferLSMTokenCallback) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TransferLSMTokenCallback) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TransferLSMTokenCallback.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TransferLSMTokenCallback) XXX_Merge(src proto.Message) { + xxx_messageInfo_TransferLSMTokenCallback.Merge(m, src) +} +func (m *TransferLSMTokenCallback) XXX_Size() int { + return m.Size() +} +func (m *TransferLSMTokenCallback) XXX_DiscardUnknown() { + xxx_messageInfo_TransferLSMTokenCallback.DiscardUnknown(m) +} + +var xxx_messageInfo_TransferLSMTokenCallback proto.InternalMessageInfo + +func (m *TransferLSMTokenCallback) GetDeposit() *LSMTokenDeposit { + if m != nil { + return m.Deposit + } + return nil +} + +func init() { + proto.RegisterType((*TransferCallback)(nil), "stride.records.TransferCallback") + proto.RegisterType((*TransferLSMTokenCallback)(nil), "stride.records.TransferLSMTokenCallback") +} + +func init() { proto.RegisterFile("stride/records/callbacks.proto", fileDescriptor_6f7cdd5c1d8b3a46) } + +var fileDescriptor_6f7cdd5c1d8b3a46 = []byte{ + // 224 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x2b, 0x2e, 0x29, 0xca, + 0x4c, 0x49, 0xd5, 0x2f, 0x4a, 0x4d, 0xce, 0x2f, 0x4a, 0x29, 0xd6, 0x4f, 0x4e, 0xcc, 0xc9, 0x49, + 0x4a, 0x4c, 0xce, 0x2e, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x83, 0xc8, 0xeb, 0x41, + 0xe5, 0xa5, 0x64, 0xd0, 0xd4, 0x43, 0x69, 0x88, 0x6a, 0x25, 0x3b, 0x2e, 0x81, 0x90, 0xa2, 0xc4, + 0xbc, 0xe2, 0xb4, 0xd4, 0x22, 0x67, 0xa8, 0x41, 0x42, 0x5a, 0x5c, 0x82, 0x29, 0xa9, 0x05, 0xf9, + 0xc5, 0x99, 0x25, 0xf1, 0x10, 0xc5, 0xf1, 0x99, 0x29, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x2c, 0x41, + 0xfc, 0x50, 0x89, 0x20, 0xb0, 0xb8, 0x67, 0x8a, 0x52, 0x28, 0x97, 0x04, 0x4c, 0xbf, 0x4f, 0xb0, + 0x6f, 0x48, 0x7e, 0x76, 0x6a, 0x1e, 0xdc, 0x1c, 0x4b, 0x2e, 0x76, 0xa8, 0x72, 0xb0, 0x6e, 0x6e, + 0x23, 0x79, 0x3d, 0x54, 0xb7, 0xe9, 0xc1, 0xb4, 0xb8, 0x40, 0x4d, 0x85, 0xa9, 0x77, 0xf2, 0x3e, + 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, + 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0xc3, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, + 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0xfd, 0x60, 0xb0, 0x69, 0xba, 0x3e, 0x89, 0x49, 0xc5, 0xfa, 0x50, + 0x5f, 0x96, 0x19, 0x59, 0xe8, 0x57, 0xc0, 0xfd, 0x5a, 0x52, 0x59, 0x90, 0x5a, 0x9c, 0xc4, 0x06, + 0xf6, 0xaa, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x31, 0x92, 0x1b, 0x4f, 0x3a, 0x01, 0x00, 0x00, +} + +func (m *TransferCallback) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TransferCallback) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TransferCallback) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.DepositRecordId != 0 { + i = encodeVarintCallbacks(dAtA, i, uint64(m.DepositRecordId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *TransferLSMTokenCallback) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TransferLSMTokenCallback) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TransferLSMTokenCallback) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Deposit != nil { + { + size, err := m.Deposit.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCallbacks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintCallbacks(dAtA []byte, offset int, v uint64) int { + offset -= sovCallbacks(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *TransferCallback) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.DepositRecordId != 0 { + n += 1 + sovCallbacks(uint64(m.DepositRecordId)) + } + return n +} + +func (m *TransferLSMTokenCallback) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Deposit != nil { + l = m.Deposit.Size() + n += 1 + l + sovCallbacks(uint64(l)) + } + return n +} + +func sovCallbacks(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozCallbacks(x uint64) (n int) { + return sovCallbacks(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *TransferCallback) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TransferCallback: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TransferCallback: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DepositRecordId", wireType) + } + m.DepositRecordId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DepositRecordId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipCallbacks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbacks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TransferLSMTokenCallback) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TransferLSMTokenCallback: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TransferLSMTokenCallback: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Deposit", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Deposit == nil { + m.Deposit = &LSMTokenDeposit{} + } + if err := m.Deposit.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCallbacks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbacks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipCallbacks(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowCallbacks + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowCallbacks + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowCallbacks + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthCallbacks + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupCallbacks + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthCallbacks + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthCallbacks = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowCallbacks = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupCallbacks = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/records/types/codec.go b/x/records/types/codec.go new file mode 100644 index 00000000000..32498a3ced7 --- /dev/null +++ b/x/records/types/codec.go @@ -0,0 +1,7 @@ +package types + +import ( + "github.com/cosmos/cosmos-sdk/codec" +) + +func RegisterCodec(cdc *codec.LegacyAmino) {} diff --git a/x/records/types/errors.go b/x/records/types/errors.go new file mode 100644 index 00000000000..2186fd62201 --- /dev/null +++ b/x/records/types/errors.go @@ -0,0 +1,15 @@ +package types + +// DONTCOVER + +import errorsmod "cosmossdk.io/errors" + +// x/records module sentinel errors +var ( + ErrInvalidVersion = errorsmod.Register(ModuleName, 1501, "invalid version") + ErrEpochUnbondingRecordNotFound = errorsmod.Register(ModuleName, 1503, "epoch unbonding record not found") + ErrUnknownDepositRecord = errorsmod.Register(ModuleName, 1504, "unknown deposit record") + ErrUnmarshalFailure = errorsmod.Register(ModuleName, 1505, "cannot unmarshal") + ErrAddingHostZone = errorsmod.Register(ModuleName, 1506, "could not add hzu to epoch unbonding record") + ErrHostUnbondingRecordNotFound = errorsmod.Register(ModuleName, 1507, "host zone unbonding record not found on epoch unbonding record") +) diff --git a/x/records/types/events_ibc.go b/x/records/types/events_ibc.go new file mode 100644 index 00000000000..07c66a43caa --- /dev/null +++ b/x/records/types/events_ibc.go @@ -0,0 +1,11 @@ +package types + +// IBC events +const ( + EventTypeTimeout = "timeout" + // this line is used by starport scaffolding # ibc/packet/event + + AttributeKeyAckSuccess = "success" + AttributeKeyAck = "acknowledgement" + AttributeKeyAckError = "error" +) diff --git a/x/records/types/expected_keepers.go b/x/records/types/expected_keepers.go new file mode 100644 index 00000000000..327183b2790 --- /dev/null +++ b/x/records/types/expected_keepers.go @@ -0,0 +1,20 @@ +package types + +import ( + context "context" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// AccountKeeper defines the expected account keeper used for simulations (noalias) +type AccountKeeper interface { + GetAccount(ctx context.Context, addr sdk.AccAddress) sdk.AccountI + // Methods imported from account should be defined here + GetModuleAddress(name string) sdk.AccAddress +} + +// BankKeeper defines the expected interface needed to retrieve account balances. +type BankKeeper interface { + SpendableCoins(ctx context.Context, addr sdk.AccAddress) sdk.Coins + // Methods imported from bank should be defined here +} diff --git a/x/records/types/genesis.go b/x/records/types/genesis.go new file mode 100644 index 00000000000..565bf36d99f --- /dev/null +++ b/x/records/types/genesis.go @@ -0,0 +1,79 @@ +package types + +import ( + "fmt" + + host "github.com/cosmos/ibc-go/v8/modules/core/24-host" +) + +// DefaultIndex is the default capability global index +const DefaultIndex uint64 = 1 + +// DefaultGenesis returns the default Capability genesis state +func DefaultGenesis() *GenesisState { + return &GenesisState{ + Params: DefaultParams(), + PortId: PortID, + UserRedemptionRecordList: []UserRedemptionRecord{}, + UserRedemptionRecordCount: 0, + EpochUnbondingRecordList: []EpochUnbondingRecord{}, + DepositRecordList: []DepositRecord{}, + DepositRecordCount: 0, + LsmTokenDepositList: []LSMTokenDeposit{}, + } +} + +// Validate performs basic genesis state validation returning an error upon any +// failure. +func (gs GenesisState) Validate() error { + if err := host.PortIdentifierValidator(gs.PortId); err != nil { + return err + } + // Check for duplicated ID in userRedemptionRecord + userRedemptionRecordIdMap := make(map[string]bool) + for _, elem := range gs.UserRedemptionRecordList { + if _, ok := userRedemptionRecordIdMap[elem.Id]; ok { + return fmt.Errorf("duplicated id for userRedemptionRecord") + } + userRedemptionRecordIdMap[elem.Id] = true + } + // Check for duplicated ID in epochUnbondingRecord + epochUnbondingRecordIdMap := make(map[uint64]bool) + for _, elem := range gs.EpochUnbondingRecordList { + if _, ok := epochUnbondingRecordIdMap[elem.EpochNumber]; ok { + return fmt.Errorf("duplicated id for epochUnbondingRecord") + } + epochUnbondingRecordIdMap[elem.EpochNumber] = true + } + // Check for duplicated ID in depositRecord + depositRecordIdMap := make(map[uint64]bool) + depositRecordCount := gs.GetDepositRecordCount() + for _, elem := range gs.DepositRecordList { + if _, ok := depositRecordIdMap[elem.Id]; ok { + return fmt.Errorf("duplicated id for depositRecord") + } + if elem.Id >= depositRecordCount { + return fmt.Errorf("depositRecord id should be lower or equal than the last id") + } + depositRecordIdMap[elem.Id] = true + } + + // Check for duplicate LSM token denoms + lsmTokenDepositIdMap := make(map[string]bool) + lsmTokenDepositChainDenomMap := make(map[string]bool) + for _, elem := range gs.LsmTokenDepositList { + if _, ok := lsmTokenDepositIdMap[elem.DepositId]; ok { + return fmt.Errorf("duplicated lsm token deposit ID") + } + lsmTokenDepositIdMap[elem.DepositId] = true + + chainDenomId := elem.ChainId + elem.Denom + if _, ok := lsmTokenDepositChainDenomMap[chainDenomId]; ok { + return fmt.Errorf("duplicated chain ID and denom") + } + + lsmTokenDepositChainDenomMap[chainDenomId] = true + } + + return gs.Params.Validate() +} diff --git a/x/records/types/genesis.pb.go b/x/records/types/genesis.pb.go new file mode 100644 index 00000000000..b571cd38f84 --- /dev/null +++ b/x/records/types/genesis.pb.go @@ -0,0 +1,704 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/records/genesis.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// GenesisState defines the records module's genesis state. +type GenesisState struct { + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` + PortId string `protobuf:"bytes,2,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty"` + UserRedemptionRecordList []UserRedemptionRecord `protobuf:"bytes,3,rep,name=user_redemption_record_list,json=userRedemptionRecordList,proto3" json:"user_redemption_record_list"` + UserRedemptionRecordCount uint64 `protobuf:"varint,4,opt,name=user_redemption_record_count,json=userRedemptionRecordCount,proto3" json:"user_redemption_record_count,omitempty"` + EpochUnbondingRecordList []EpochUnbondingRecord `protobuf:"bytes,5,rep,name=epoch_unbonding_record_list,json=epochUnbondingRecordList,proto3" json:"epoch_unbonding_record_list"` + DepositRecordList []DepositRecord `protobuf:"bytes,7,rep,name=deposit_record_list,json=depositRecordList,proto3" json:"deposit_record_list"` + DepositRecordCount uint64 `protobuf:"varint,8,opt,name=deposit_record_count,json=depositRecordCount,proto3" json:"deposit_record_count,omitempty"` + LsmTokenDepositList []LSMTokenDeposit `protobuf:"bytes,9,rep,name=lsm_token_deposit_list,json=lsmTokenDepositList,proto3" json:"lsm_token_deposit_list"` +} + +func (m *GenesisState) Reset() { *m = GenesisState{} } +func (m *GenesisState) String() string { return proto.CompactTextString(m) } +func (*GenesisState) ProtoMessage() {} +func (*GenesisState) Descriptor() ([]byte, []int) { + return fileDescriptor_98cfd0253c8b6797, []int{0} +} +func (m *GenesisState) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GenesisState.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GenesisState) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenesisState.Merge(m, src) +} +func (m *GenesisState) XXX_Size() int { + return m.Size() +} +func (m *GenesisState) XXX_DiscardUnknown() { + xxx_messageInfo_GenesisState.DiscardUnknown(m) +} + +var xxx_messageInfo_GenesisState proto.InternalMessageInfo + +func (m *GenesisState) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +func (m *GenesisState) GetPortId() string { + if m != nil { + return m.PortId + } + return "" +} + +func (m *GenesisState) GetUserRedemptionRecordList() []UserRedemptionRecord { + if m != nil { + return m.UserRedemptionRecordList + } + return nil +} + +func (m *GenesisState) GetUserRedemptionRecordCount() uint64 { + if m != nil { + return m.UserRedemptionRecordCount + } + return 0 +} + +func (m *GenesisState) GetEpochUnbondingRecordList() []EpochUnbondingRecord { + if m != nil { + return m.EpochUnbondingRecordList + } + return nil +} + +func (m *GenesisState) GetDepositRecordList() []DepositRecord { + if m != nil { + return m.DepositRecordList + } + return nil +} + +func (m *GenesisState) GetDepositRecordCount() uint64 { + if m != nil { + return m.DepositRecordCount + } + return 0 +} + +func (m *GenesisState) GetLsmTokenDepositList() []LSMTokenDeposit { + if m != nil { + return m.LsmTokenDepositList + } + return nil +} + +func init() { + proto.RegisterType((*GenesisState)(nil), "stride.records.GenesisState") +} + +func init() { proto.RegisterFile("stride/records/genesis.proto", fileDescriptor_98cfd0253c8b6797) } + +var fileDescriptor_98cfd0253c8b6797 = []byte{ + // 420 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0xc1, 0xae, 0x93, 0x40, + 0x18, 0x85, 0xc1, 0x8b, 0xbd, 0xde, 0xa9, 0x31, 0x91, 0x36, 0x15, 0xdb, 0x4a, 0x89, 0x71, 0xc1, + 0x46, 0xd0, 0xea, 0xc2, 0x9d, 0x49, 0xd5, 0x18, 0x63, 0x4d, 0x0c, 0xd8, 0x4d, 0x37, 0x04, 0x98, + 0x09, 0x9d, 0x58, 0x18, 0x32, 0x33, 0x18, 0x7d, 0x0b, 0x1f, 0xab, 0xcb, 0xee, 0x74, 0x65, 0x4c, + 0xfb, 0x22, 0x86, 0x99, 0x69, 0x53, 0x08, 0xae, 0x5a, 0xe6, 0xfc, 0xe7, 0x9c, 0xef, 0x4f, 0x7e, + 0x30, 0x65, 0x9c, 0x62, 0x88, 0x7c, 0x8a, 0x52, 0x42, 0x21, 0xf3, 0x33, 0x54, 0x20, 0x86, 0x99, + 0x57, 0x52, 0xc2, 0x89, 0x79, 0x4f, 0xaa, 0x9e, 0x52, 0xc7, 0xc3, 0x8c, 0x64, 0x44, 0x48, 0x7e, + 0xfd, 0x4f, 0x4e, 0x8d, 0x27, 0xad, 0x8c, 0x32, 0xa6, 0x71, 0xae, 0x22, 0xc6, 0xed, 0x02, 0xf5, + 0x2b, 0xd5, 0xc7, 0xbf, 0x0c, 0x70, 0xf7, 0xbd, 0xac, 0x0c, 0x79, 0xcc, 0x91, 0xf9, 0x12, 0xf4, + 0xa4, 0xdd, 0xd2, 0x1d, 0xdd, 0xed, 0xcf, 0x47, 0x5e, 0x13, 0xc1, 0xfb, 0x2c, 0xd4, 0x85, 0xb1, + 0xfb, 0x33, 0xd3, 0x02, 0x35, 0x6b, 0x3e, 0x00, 0xd7, 0x25, 0xa1, 0x3c, 0xc2, 0xd0, 0xba, 0xe5, + 0xe8, 0xee, 0x4d, 0xd0, 0xab, 0x3f, 0x3f, 0x40, 0x13, 0x83, 0x49, 0xc5, 0x10, 0x8d, 0x28, 0x82, + 0x28, 0x2f, 0x39, 0x26, 0x45, 0x24, 0x83, 0xa2, 0x2d, 0x66, 0xdc, 0xba, 0x72, 0xae, 0xdc, 0xfe, + 0xfc, 0x49, 0xbb, 0x63, 0xc5, 0x10, 0x0d, 0xce, 0x8e, 0x40, 0xbc, 0xaa, 0x46, 0xab, 0xea, 0xd0, + 0x96, 0x98, 0x71, 0xf3, 0x35, 0x98, 0xfe, 0xa7, 0x2a, 0x25, 0x55, 0xc1, 0x2d, 0xc3, 0xd1, 0x5d, + 0x23, 0x78, 0xd8, 0xe5, 0x7f, 0x53, 0x0f, 0xd4, 0xac, 0xa8, 0x24, 0xe9, 0x26, 0xaa, 0x8a, 0x84, + 0x14, 0x10, 0x17, 0x59, 0x83, 0xf5, 0x76, 0x37, 0xeb, 0xbb, 0xda, 0xb2, 0x3a, 0x39, 0x9a, 0xac, + 0xa8, 0x43, 0x13, 0xac, 0x21, 0x18, 0x40, 0x54, 0x12, 0x86, 0x79, 0xa3, 0xe2, 0x5a, 0x54, 0x3c, + 0x6a, 0x57, 0xbc, 0x95, 0xa3, 0x8d, 0xec, 0xfb, 0xf0, 0xf2, 0x51, 0x84, 0x3e, 0x03, 0xc3, 0x56, + 0xa8, 0x5c, 0xfc, 0x8e, 0x58, 0xdc, 0x6c, 0x18, 0xe4, 0xc6, 0x6b, 0x30, 0xda, 0xb2, 0x3c, 0xe2, + 0xe4, 0x2b, 0x2a, 0xa2, 0x93, 0x57, 0x90, 0xdc, 0x08, 0x92, 0x59, 0x9b, 0x64, 0x19, 0x7e, 0xfa, + 0x52, 0x0f, 0x2b, 0x22, 0xc5, 0x32, 0xd8, 0xb2, 0xfc, 0xf2, 0xb9, 0xa6, 0x59, 0x7c, 0xdc, 0x1d, + 0x6c, 0x7d, 0x7f, 0xb0, 0xf5, 0xbf, 0x07, 0x5b, 0xff, 0x79, 0xb4, 0xb5, 0xfd, 0xd1, 0xd6, 0x7e, + 0x1f, 0x6d, 0x6d, 0xfd, 0x3c, 0xc3, 0x7c, 0x53, 0x25, 0x5e, 0x4a, 0x72, 0x3f, 0x14, 0xf9, 0x4f, + 0x97, 0x71, 0xc2, 0x7c, 0x75, 0xa8, 0xdf, 0xe6, 0xaf, 0xfc, 0xef, 0xe7, 0x73, 0xe5, 0x3f, 0x4a, + 0xc4, 0x92, 0x9e, 0xb8, 0xd6, 0x17, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x7f, 0xd6, 0xa7, 0x41, + 0x2e, 0x03, 0x00, 0x00, +} + +func (m *GenesisState) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GenesisState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.LsmTokenDepositList) > 0 { + for iNdEx := len(m.LsmTokenDepositList) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.LsmTokenDepositList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + } + } + if m.DepositRecordCount != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.DepositRecordCount)) + i-- + dAtA[i] = 0x40 + } + if len(m.DepositRecordList) > 0 { + for iNdEx := len(m.DepositRecordList) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.DepositRecordList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + } + if len(m.EpochUnbondingRecordList) > 0 { + for iNdEx := len(m.EpochUnbondingRecordList) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.EpochUnbondingRecordList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + } + if m.UserRedemptionRecordCount != 0 { + i = encodeVarintGenesis(dAtA, i, uint64(m.UserRedemptionRecordCount)) + i-- + dAtA[i] = 0x20 + } + if len(m.UserRedemptionRecordList) > 0 { + for iNdEx := len(m.UserRedemptionRecordList) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.UserRedemptionRecordList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if len(m.PortId) > 0 { + i -= len(m.PortId) + copy(dAtA[i:], m.PortId) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.PortId))) + i-- + dAtA[i] = 0x12 + } + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { + offset -= sovGenesis(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *GenesisState) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovGenesis(uint64(l)) + l = len(m.PortId) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + if len(m.UserRedemptionRecordList) > 0 { + for _, e := range m.UserRedemptionRecordList { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + if m.UserRedemptionRecordCount != 0 { + n += 1 + sovGenesis(uint64(m.UserRedemptionRecordCount)) + } + if len(m.EpochUnbondingRecordList) > 0 { + for _, e := range m.EpochUnbondingRecordList { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + if len(m.DepositRecordList) > 0 { + for _, e := range m.DepositRecordList { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + if m.DepositRecordCount != 0 { + n += 1 + sovGenesis(uint64(m.DepositRecordCount)) + } + if len(m.LsmTokenDepositList) > 0 { + for _, e := range m.LsmTokenDepositList { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + return n +} + +func sovGenesis(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenesis(x uint64) (n int) { + return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *GenesisState) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PortId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PortId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UserRedemptionRecordList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UserRedemptionRecordList = append(m.UserRedemptionRecordList, UserRedemptionRecord{}) + if err := m.UserRedemptionRecordList[len(m.UserRedemptionRecordList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UserRedemptionRecordCount", wireType) + } + m.UserRedemptionRecordCount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.UserRedemptionRecordCount |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EpochUnbondingRecordList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.EpochUnbondingRecordList = append(m.EpochUnbondingRecordList, EpochUnbondingRecord{}) + if err := m.EpochUnbondingRecordList[len(m.EpochUnbondingRecordList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DepositRecordList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DepositRecordList = append(m.DepositRecordList, DepositRecord{}) + if err := m.DepositRecordList[len(m.DepositRecordList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DepositRecordCount", wireType) + } + m.DepositRecordCount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DepositRecordCount |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LsmTokenDepositList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.LsmTokenDepositList = append(m.LsmTokenDepositList, LSMTokenDeposit{}) + if err := m.LsmTokenDepositList[len(m.LsmTokenDepositList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenesis(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenesis + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenesis + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenesis + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/records/types/genesis_test.go b/x/records/types/genesis_test.go new file mode 100644 index 00000000000..cb640695a77 --- /dev/null +++ b/x/records/types/genesis_test.go @@ -0,0 +1,112 @@ +package types_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +func TestGenesisState_Validate(t *testing.T) { + for _, tc := range []struct { + desc string + genState *types.GenesisState + valid bool + }{ + { + desc: "default is valid", + genState: types.DefaultGenesis(), + valid: true, + }, + { + desc: "valid genesis state", + genState: &types.GenesisState{ + PortId: types.PortID, + DepositRecordList: []types.DepositRecord{ + { + Id: 0, + }, + { + Id: 1, + }, + }, + DepositRecordCount: 2, + // this line is used by starport scaffolding # types/genesis/validField + }, + valid: true, + }, + { + desc: "duplicated depositRecord", + genState: &types.GenesisState{ + DepositRecordList: []types.DepositRecord{ + { + Id: 0, + }, + { + Id: 0, + }, + }, + }, + valid: false, + }, + { + desc: "duplicated lsm token deposit id", + genState: &types.GenesisState{ + LsmTokenDepositList: []types.LSMTokenDeposit{ + { + DepositId: "1", + }, + { + DepositId: "1", + }, + }, + }, + valid: false, + }, + { + desc: "duplicated lsm token deposit id", + genState: &types.GenesisState{ + LsmTokenDepositList: []types.LSMTokenDeposit{ + { + ChainId: "chain-1", + Denom: "denom1", + }, + { + ChainId: "chain-1", + Denom: "denom1", + }, + }, + }, + valid: false, + }, + { + desc: "valid lsm token deposits", + genState: &types.GenesisState{ + PortId: "port-1", + LsmTokenDepositList: []types.LSMTokenDeposit{ + { + DepositId: "1", + ChainId: "chain-1", + Denom: "denom1", + }, + { + DepositId: "2", + ChainId: "chain-2", + Denom: "denom2", + }, + }, + }, + valid: true, + }, + } { + t.Run(tc.desc, func(t *testing.T) { + err := tc.genState.Validate() + if tc.valid { + require.NoError(t, err) + } else { + require.Error(t, err) + } + }) + } +} diff --git a/x/records/types/keys.go b/x/records/types/keys.go new file mode 100644 index 00000000000..9dec507da36 --- /dev/null +++ b/x/records/types/keys.go @@ -0,0 +1,49 @@ +package types + +const ( + // ModuleName defines the module name + ModuleName = "records" + + // StoreKey defines the primary module store key + StoreKey = ModuleName + + // RouterKey is the message route for slashing + RouterKey = ModuleName + + // QuerierRoute defines the module's query routing key + QuerierRoute = ModuleName + + // MemStoreKey defines the in-memory store key + MemStoreKey = "mem_records" + + // Version defines the current version the IBC module supports + Version = "records-1" + + // PortID is the default port id that module binds to + PortID = "records" +) + +// PortKey defines the key to store the port ID in store +var PortKey = KeyPrefix("records-port-") + +func KeyPrefix(p string) []byte { + return []byte(p) +} + +// Create the LSMTokenDeposit prefix as chainId + denom +func GetLSMTokenDepositKey(chainId, denom string) []byte { + return append([]byte(chainId), []byte(denom)...) +} + +const ( + UserRedemptionRecordKey = "UserRedemptionRecord-value-" + UserRedemptionRecordCountKey = "UserRedemptionRecord-count-" +) + +const ( + EpochUnbondingRecordKey = "EpochUnbondingRecord-value-" + EpochUnbondingRecordCountKey = "EpochUnbondingRecord-count-" + DepositRecordKey = "DepositRecord-value-" + DepositRecordCountKey = "DepositRecord-count-" + LSMTokenDepositKey = "LSMTokenDeposit" +) diff --git a/x/records/types/params.go b/x/records/types/params.go new file mode 100644 index 00000000000..4f3215e3504 --- /dev/null +++ b/x/records/types/params.go @@ -0,0 +1,32 @@ +package types + +import ( + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" +) + +var _ paramtypes.ParamSet = (*Params)(nil) + +// ParamKeyTable the param key table for launch module +func ParamKeyTable() paramtypes.KeyTable { + return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) +} + +// NewParams creates a new Params instance +func NewParams() Params { + return Params{} +} + +// DefaultParams returns a default set of parameters +func DefaultParams() Params { + return NewParams() +} + +// ParamSetPairs get the params.ParamSet +func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { + return paramtypes.ParamSetPairs{} +} + +// Validate validates the set of params +func (p Params) Validate() error { + return nil +} diff --git a/x/records/types/params.pb.go b/x/records/types/params.pb.go new file mode 100644 index 00000000000..e73f8920c7e --- /dev/null +++ b/x/records/types/params.pb.go @@ -0,0 +1,263 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/records/params.proto + +package types + +import ( + fmt "fmt" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// Params defines the parameters for the module. +type Params struct { +} + +func (m *Params) Reset() { *m = Params{} } +func (m *Params) String() string { return proto.CompactTextString(m) } +func (*Params) ProtoMessage() {} +func (*Params) Descriptor() ([]byte, []int) { + return fileDescriptor_5d92633ea4bee482, []int{0} +} +func (m *Params) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Params.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Params) XXX_Merge(src proto.Message) { + xxx_messageInfo_Params.Merge(m, src) +} +func (m *Params) XXX_Size() int { + return m.Size() +} +func (m *Params) XXX_DiscardUnknown() { + xxx_messageInfo_Params.DiscardUnknown(m) +} + +var xxx_messageInfo_Params proto.InternalMessageInfo + +func init() { + proto.RegisterType((*Params)(nil), "stride.records.Params") +} + +func init() { proto.RegisterFile("stride/records/params.proto", fileDescriptor_5d92633ea4bee482) } + +var fileDescriptor_5d92633ea4bee482 = []byte{ + // 136 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x2e, 0x2e, 0x29, 0xca, + 0x4c, 0x49, 0xd5, 0x2f, 0x4a, 0x4d, 0xce, 0x2f, 0x4a, 0x29, 0xd6, 0x2f, 0x48, 0x2c, 0x4a, 0xcc, + 0x2d, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x83, 0x48, 0xea, 0x41, 0x25, 0x95, 0x38, + 0xb8, 0xd8, 0x02, 0xc0, 0xf2, 0x4e, 0xde, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, 0xf8, + 0xe0, 0x91, 0x1c, 0xe3, 0x84, 0xc7, 0x72, 0x0c, 0x17, 0x1e, 0xcb, 0x31, 0xdc, 0x78, 0x2c, 0xc7, + 0x10, 0x65, 0x98, 0x9e, 0x59, 0x92, 0x51, 0x9a, 0xa4, 0x97, 0x9c, 0x9f, 0xab, 0x1f, 0x0c, 0xd6, + 0xae, 0xeb, 0x93, 0x98, 0x54, 0xac, 0x0f, 0xb5, 0xa7, 0xcc, 0xc8, 0x42, 0xbf, 0x02, 0x6e, 0x5b, + 0x49, 0x65, 0x41, 0x6a, 0x71, 0x12, 0x1b, 0xd8, 0x36, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xb7, 0x2e, 0xde, 0x39, 0x8c, 0x00, 0x00, 0x00, +} + +func (m *Params) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Params) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintParams(dAtA []byte, offset int, v uint64) int { + offset -= sovParams(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Params) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovParams(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozParams(x uint64) (n int) { + return sovParams(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Params) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipParams(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthParams + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipParams(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthParams + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupParams + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthParams + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthParams = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowParams = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupParams = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/records/types/query.pb.go b/x/records/types/query.pb.go new file mode 100644 index 00000000000..9f99116152a --- /dev/null +++ b/x/records/types/query.pb.go @@ -0,0 +1,5029 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/records/query.proto + +package types + +import ( + context "context" + fmt "fmt" + query "github.com/cosmos/cosmos-sdk/types/query" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// QueryParamsRequest is request type for the Query/Params RPC method. +type QueryParamsRequest struct { +} + +func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } +func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryParamsRequest) ProtoMessage() {} +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_25e7cc311be81f7b, []int{0} +} +func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsRequest.Merge(m, src) +} +func (m *QueryParamsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo + +// QueryParamsResponse is response type for the Query/Params RPC method. +type QueryParamsResponse struct { + // params holds all the parameters of this module. + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` +} + +func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } +func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryParamsResponse) ProtoMessage() {} +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_25e7cc311be81f7b, []int{1} +} +func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsResponse.Merge(m, src) +} +func (m *QueryParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo + +func (m *QueryParamsResponse) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +type QueryGetDepositRecordRequest struct { + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (m *QueryGetDepositRecordRequest) Reset() { *m = QueryGetDepositRecordRequest{} } +func (m *QueryGetDepositRecordRequest) String() string { return proto.CompactTextString(m) } +func (*QueryGetDepositRecordRequest) ProtoMessage() {} +func (*QueryGetDepositRecordRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_25e7cc311be81f7b, []int{2} +} +func (m *QueryGetDepositRecordRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryGetDepositRecordRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryGetDepositRecordRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryGetDepositRecordRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetDepositRecordRequest.Merge(m, src) +} +func (m *QueryGetDepositRecordRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryGetDepositRecordRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetDepositRecordRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryGetDepositRecordRequest proto.InternalMessageInfo + +func (m *QueryGetDepositRecordRequest) GetId() uint64 { + if m != nil { + return m.Id + } + return 0 +} + +type QueryGetDepositRecordResponse struct { + DepositRecord DepositRecord `protobuf:"bytes,1,opt,name=deposit_record,json=depositRecord,proto3" json:"deposit_record"` +} + +func (m *QueryGetDepositRecordResponse) Reset() { *m = QueryGetDepositRecordResponse{} } +func (m *QueryGetDepositRecordResponse) String() string { return proto.CompactTextString(m) } +func (*QueryGetDepositRecordResponse) ProtoMessage() {} +func (*QueryGetDepositRecordResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_25e7cc311be81f7b, []int{3} +} +func (m *QueryGetDepositRecordResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryGetDepositRecordResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryGetDepositRecordResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryGetDepositRecordResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetDepositRecordResponse.Merge(m, src) +} +func (m *QueryGetDepositRecordResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryGetDepositRecordResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetDepositRecordResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryGetDepositRecordResponse proto.InternalMessageInfo + +func (m *QueryGetDepositRecordResponse) GetDepositRecord() DepositRecord { + if m != nil { + return m.DepositRecord + } + return DepositRecord{} +} + +type QueryAllDepositRecordRequest struct { + Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryAllDepositRecordRequest) Reset() { *m = QueryAllDepositRecordRequest{} } +func (m *QueryAllDepositRecordRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAllDepositRecordRequest) ProtoMessage() {} +func (*QueryAllDepositRecordRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_25e7cc311be81f7b, []int{4} +} +func (m *QueryAllDepositRecordRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllDepositRecordRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllDepositRecordRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryAllDepositRecordRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllDepositRecordRequest.Merge(m, src) +} +func (m *QueryAllDepositRecordRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryAllDepositRecordRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllDepositRecordRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAllDepositRecordRequest proto.InternalMessageInfo + +func (m *QueryAllDepositRecordRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +type QueryAllDepositRecordResponse struct { + DepositRecord []DepositRecord `protobuf:"bytes,1,rep,name=deposit_record,json=depositRecord,proto3" json:"deposit_record"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryAllDepositRecordResponse) Reset() { *m = QueryAllDepositRecordResponse{} } +func (m *QueryAllDepositRecordResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAllDepositRecordResponse) ProtoMessage() {} +func (*QueryAllDepositRecordResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_25e7cc311be81f7b, []int{5} +} +func (m *QueryAllDepositRecordResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllDepositRecordResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllDepositRecordResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryAllDepositRecordResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllDepositRecordResponse.Merge(m, src) +} +func (m *QueryAllDepositRecordResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryAllDepositRecordResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllDepositRecordResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAllDepositRecordResponse proto.InternalMessageInfo + +func (m *QueryAllDepositRecordResponse) GetDepositRecord() []DepositRecord { + if m != nil { + return m.DepositRecord + } + return nil +} + +func (m *QueryAllDepositRecordResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil +} + +type QueryDepositRecordByHostRequest struct { + HostZoneId string `protobuf:"bytes,1,opt,name=host_zone_id,json=hostZoneId,proto3" json:"host_zone_id,omitempty"` +} + +func (m *QueryDepositRecordByHostRequest) Reset() { *m = QueryDepositRecordByHostRequest{} } +func (m *QueryDepositRecordByHostRequest) String() string { return proto.CompactTextString(m) } +func (*QueryDepositRecordByHostRequest) ProtoMessage() {} +func (*QueryDepositRecordByHostRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_25e7cc311be81f7b, []int{6} +} +func (m *QueryDepositRecordByHostRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryDepositRecordByHostRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryDepositRecordByHostRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryDepositRecordByHostRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryDepositRecordByHostRequest.Merge(m, src) +} +func (m *QueryDepositRecordByHostRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryDepositRecordByHostRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryDepositRecordByHostRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryDepositRecordByHostRequest proto.InternalMessageInfo + +func (m *QueryDepositRecordByHostRequest) GetHostZoneId() string { + if m != nil { + return m.HostZoneId + } + return "" +} + +type QueryDepositRecordByHostResponse struct { + DepositRecord []DepositRecord `protobuf:"bytes,1,rep,name=deposit_record,json=depositRecord,proto3" json:"deposit_record"` +} + +func (m *QueryDepositRecordByHostResponse) Reset() { *m = QueryDepositRecordByHostResponse{} } +func (m *QueryDepositRecordByHostResponse) String() string { return proto.CompactTextString(m) } +func (*QueryDepositRecordByHostResponse) ProtoMessage() {} +func (*QueryDepositRecordByHostResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_25e7cc311be81f7b, []int{7} +} +func (m *QueryDepositRecordByHostResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryDepositRecordByHostResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryDepositRecordByHostResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryDepositRecordByHostResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryDepositRecordByHostResponse.Merge(m, src) +} +func (m *QueryDepositRecordByHostResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryDepositRecordByHostResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryDepositRecordByHostResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryDepositRecordByHostResponse proto.InternalMessageInfo + +func (m *QueryDepositRecordByHostResponse) GetDepositRecord() []DepositRecord { + if m != nil { + return m.DepositRecord + } + return nil +} + +type QueryGetUserRedemptionRecordRequest struct { + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` +} + +func (m *QueryGetUserRedemptionRecordRequest) Reset() { *m = QueryGetUserRedemptionRecordRequest{} } +func (m *QueryGetUserRedemptionRecordRequest) String() string { return proto.CompactTextString(m) } +func (*QueryGetUserRedemptionRecordRequest) ProtoMessage() {} +func (*QueryGetUserRedemptionRecordRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_25e7cc311be81f7b, []int{8} +} +func (m *QueryGetUserRedemptionRecordRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryGetUserRedemptionRecordRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryGetUserRedemptionRecordRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryGetUserRedemptionRecordRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetUserRedemptionRecordRequest.Merge(m, src) +} +func (m *QueryGetUserRedemptionRecordRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryGetUserRedemptionRecordRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetUserRedemptionRecordRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryGetUserRedemptionRecordRequest proto.InternalMessageInfo + +func (m *QueryGetUserRedemptionRecordRequest) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +type QueryGetUserRedemptionRecordResponse struct { + UserRedemptionRecord UserRedemptionRecord `protobuf:"bytes,1,opt,name=user_redemption_record,json=userRedemptionRecord,proto3" json:"user_redemption_record"` +} + +func (m *QueryGetUserRedemptionRecordResponse) Reset() { *m = QueryGetUserRedemptionRecordResponse{} } +func (m *QueryGetUserRedemptionRecordResponse) String() string { return proto.CompactTextString(m) } +func (*QueryGetUserRedemptionRecordResponse) ProtoMessage() {} +func (*QueryGetUserRedemptionRecordResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_25e7cc311be81f7b, []int{9} +} +func (m *QueryGetUserRedemptionRecordResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryGetUserRedemptionRecordResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryGetUserRedemptionRecordResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryGetUserRedemptionRecordResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetUserRedemptionRecordResponse.Merge(m, src) +} +func (m *QueryGetUserRedemptionRecordResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryGetUserRedemptionRecordResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetUserRedemptionRecordResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryGetUserRedemptionRecordResponse proto.InternalMessageInfo + +func (m *QueryGetUserRedemptionRecordResponse) GetUserRedemptionRecord() UserRedemptionRecord { + if m != nil { + return m.UserRedemptionRecord + } + return UserRedemptionRecord{} +} + +type QueryAllUserRedemptionRecordRequest struct { + Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryAllUserRedemptionRecordRequest) Reset() { *m = QueryAllUserRedemptionRecordRequest{} } +func (m *QueryAllUserRedemptionRecordRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAllUserRedemptionRecordRequest) ProtoMessage() {} +func (*QueryAllUserRedemptionRecordRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_25e7cc311be81f7b, []int{10} +} +func (m *QueryAllUserRedemptionRecordRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllUserRedemptionRecordRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllUserRedemptionRecordRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryAllUserRedemptionRecordRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllUserRedemptionRecordRequest.Merge(m, src) +} +func (m *QueryAllUserRedemptionRecordRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryAllUserRedemptionRecordRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllUserRedemptionRecordRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAllUserRedemptionRecordRequest proto.InternalMessageInfo + +func (m *QueryAllUserRedemptionRecordRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +type QueryAllUserRedemptionRecordResponse struct { + UserRedemptionRecord []UserRedemptionRecord `protobuf:"bytes,1,rep,name=user_redemption_record,json=userRedemptionRecord,proto3" json:"user_redemption_record"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryAllUserRedemptionRecordResponse) Reset() { *m = QueryAllUserRedemptionRecordResponse{} } +func (m *QueryAllUserRedemptionRecordResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAllUserRedemptionRecordResponse) ProtoMessage() {} +func (*QueryAllUserRedemptionRecordResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_25e7cc311be81f7b, []int{11} +} +func (m *QueryAllUserRedemptionRecordResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllUserRedemptionRecordResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllUserRedemptionRecordResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryAllUserRedemptionRecordResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllUserRedemptionRecordResponse.Merge(m, src) +} +func (m *QueryAllUserRedemptionRecordResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryAllUserRedemptionRecordResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllUserRedemptionRecordResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAllUserRedemptionRecordResponse proto.InternalMessageInfo + +func (m *QueryAllUserRedemptionRecordResponse) GetUserRedemptionRecord() []UserRedemptionRecord { + if m != nil { + return m.UserRedemptionRecord + } + return nil +} + +func (m *QueryAllUserRedemptionRecordResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil +} + +// Query UserRedemptionRecords by chainId / userId pair +type QueryAllUserRedemptionRecordForUserRequest struct { + ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + Day uint64 `protobuf:"varint,2,opt,name=day,proto3" json:"day,omitempty"` + Address string `protobuf:"bytes,3,opt,name=address,proto3" json:"address,omitempty"` + Limit uint64 `protobuf:"varint,4,opt,name=limit,proto3" json:"limit,omitempty"` + Pagination *query.PageRequest `protobuf:"bytes,5,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryAllUserRedemptionRecordForUserRequest) Reset() { + *m = QueryAllUserRedemptionRecordForUserRequest{} +} +func (m *QueryAllUserRedemptionRecordForUserRequest) String() string { + return proto.CompactTextString(m) +} +func (*QueryAllUserRedemptionRecordForUserRequest) ProtoMessage() {} +func (*QueryAllUserRedemptionRecordForUserRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_25e7cc311be81f7b, []int{12} +} +func (m *QueryAllUserRedemptionRecordForUserRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllUserRedemptionRecordForUserRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllUserRedemptionRecordForUserRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryAllUserRedemptionRecordForUserRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllUserRedemptionRecordForUserRequest.Merge(m, src) +} +func (m *QueryAllUserRedemptionRecordForUserRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryAllUserRedemptionRecordForUserRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllUserRedemptionRecordForUserRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAllUserRedemptionRecordForUserRequest proto.InternalMessageInfo + +func (m *QueryAllUserRedemptionRecordForUserRequest) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +func (m *QueryAllUserRedemptionRecordForUserRequest) GetDay() uint64 { + if m != nil { + return m.Day + } + return 0 +} + +func (m *QueryAllUserRedemptionRecordForUserRequest) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func (m *QueryAllUserRedemptionRecordForUserRequest) GetLimit() uint64 { + if m != nil { + return m.Limit + } + return 0 +} + +func (m *QueryAllUserRedemptionRecordForUserRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +type QueryAllUserRedemptionRecordForUserResponse struct { + UserRedemptionRecord []UserRedemptionRecord `protobuf:"bytes,1,rep,name=user_redemption_record,json=userRedemptionRecord,proto3" json:"user_redemption_record"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryAllUserRedemptionRecordForUserResponse) Reset() { + *m = QueryAllUserRedemptionRecordForUserResponse{} +} +func (m *QueryAllUserRedemptionRecordForUserResponse) String() string { + return proto.CompactTextString(m) +} +func (*QueryAllUserRedemptionRecordForUserResponse) ProtoMessage() {} +func (*QueryAllUserRedemptionRecordForUserResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_25e7cc311be81f7b, []int{13} +} +func (m *QueryAllUserRedemptionRecordForUserResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllUserRedemptionRecordForUserResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllUserRedemptionRecordForUserResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryAllUserRedemptionRecordForUserResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllUserRedemptionRecordForUserResponse.Merge(m, src) +} +func (m *QueryAllUserRedemptionRecordForUserResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryAllUserRedemptionRecordForUserResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllUserRedemptionRecordForUserResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAllUserRedemptionRecordForUserResponse proto.InternalMessageInfo + +func (m *QueryAllUserRedemptionRecordForUserResponse) GetUserRedemptionRecord() []UserRedemptionRecord { + if m != nil { + return m.UserRedemptionRecord + } + return nil +} + +func (m *QueryAllUserRedemptionRecordForUserResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil +} + +type QueryGetEpochUnbondingRecordRequest struct { + EpochNumber uint64 `protobuf:"varint,1,opt,name=epoch_number,json=epochNumber,proto3" json:"epoch_number,omitempty"` +} + +func (m *QueryGetEpochUnbondingRecordRequest) Reset() { *m = QueryGetEpochUnbondingRecordRequest{} } +func (m *QueryGetEpochUnbondingRecordRequest) String() string { return proto.CompactTextString(m) } +func (*QueryGetEpochUnbondingRecordRequest) ProtoMessage() {} +func (*QueryGetEpochUnbondingRecordRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_25e7cc311be81f7b, []int{14} +} +func (m *QueryGetEpochUnbondingRecordRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryGetEpochUnbondingRecordRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryGetEpochUnbondingRecordRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryGetEpochUnbondingRecordRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetEpochUnbondingRecordRequest.Merge(m, src) +} +func (m *QueryGetEpochUnbondingRecordRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryGetEpochUnbondingRecordRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetEpochUnbondingRecordRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryGetEpochUnbondingRecordRequest proto.InternalMessageInfo + +func (m *QueryGetEpochUnbondingRecordRequest) GetEpochNumber() uint64 { + if m != nil { + return m.EpochNumber + } + return 0 +} + +type QueryGetEpochUnbondingRecordResponse struct { + EpochUnbondingRecord EpochUnbondingRecord `protobuf:"bytes,1,opt,name=epoch_unbonding_record,json=epochUnbondingRecord,proto3" json:"epoch_unbonding_record"` +} + +func (m *QueryGetEpochUnbondingRecordResponse) Reset() { *m = QueryGetEpochUnbondingRecordResponse{} } +func (m *QueryGetEpochUnbondingRecordResponse) String() string { return proto.CompactTextString(m) } +func (*QueryGetEpochUnbondingRecordResponse) ProtoMessage() {} +func (*QueryGetEpochUnbondingRecordResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_25e7cc311be81f7b, []int{15} +} +func (m *QueryGetEpochUnbondingRecordResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryGetEpochUnbondingRecordResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryGetEpochUnbondingRecordResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryGetEpochUnbondingRecordResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetEpochUnbondingRecordResponse.Merge(m, src) +} +func (m *QueryGetEpochUnbondingRecordResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryGetEpochUnbondingRecordResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetEpochUnbondingRecordResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryGetEpochUnbondingRecordResponse proto.InternalMessageInfo + +func (m *QueryGetEpochUnbondingRecordResponse) GetEpochUnbondingRecord() EpochUnbondingRecord { + if m != nil { + return m.EpochUnbondingRecord + } + return EpochUnbondingRecord{} +} + +type QueryAllEpochUnbondingRecordRequest struct { + Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryAllEpochUnbondingRecordRequest) Reset() { *m = QueryAllEpochUnbondingRecordRequest{} } +func (m *QueryAllEpochUnbondingRecordRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAllEpochUnbondingRecordRequest) ProtoMessage() {} +func (*QueryAllEpochUnbondingRecordRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_25e7cc311be81f7b, []int{16} +} +func (m *QueryAllEpochUnbondingRecordRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllEpochUnbondingRecordRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllEpochUnbondingRecordRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryAllEpochUnbondingRecordRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllEpochUnbondingRecordRequest.Merge(m, src) +} +func (m *QueryAllEpochUnbondingRecordRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryAllEpochUnbondingRecordRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllEpochUnbondingRecordRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAllEpochUnbondingRecordRequest proto.InternalMessageInfo + +func (m *QueryAllEpochUnbondingRecordRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +type QueryAllEpochUnbondingRecordResponse struct { + EpochUnbondingRecord []EpochUnbondingRecord `protobuf:"bytes,1,rep,name=epoch_unbonding_record,json=epochUnbondingRecord,proto3" json:"epoch_unbonding_record"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryAllEpochUnbondingRecordResponse) Reset() { *m = QueryAllEpochUnbondingRecordResponse{} } +func (m *QueryAllEpochUnbondingRecordResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAllEpochUnbondingRecordResponse) ProtoMessage() {} +func (*QueryAllEpochUnbondingRecordResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_25e7cc311be81f7b, []int{17} +} +func (m *QueryAllEpochUnbondingRecordResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllEpochUnbondingRecordResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllEpochUnbondingRecordResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryAllEpochUnbondingRecordResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllEpochUnbondingRecordResponse.Merge(m, src) +} +func (m *QueryAllEpochUnbondingRecordResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryAllEpochUnbondingRecordResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllEpochUnbondingRecordResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAllEpochUnbondingRecordResponse proto.InternalMessageInfo + +func (m *QueryAllEpochUnbondingRecordResponse) GetEpochUnbondingRecord() []EpochUnbondingRecord { + if m != nil { + return m.EpochUnbondingRecord + } + return nil +} + +func (m *QueryAllEpochUnbondingRecordResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil +} + +type QueryLSMDepositRequest struct { + ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + Denom string `protobuf:"bytes,2,opt,name=denom,proto3" json:"denom,omitempty"` +} + +func (m *QueryLSMDepositRequest) Reset() { *m = QueryLSMDepositRequest{} } +func (m *QueryLSMDepositRequest) String() string { return proto.CompactTextString(m) } +func (*QueryLSMDepositRequest) ProtoMessage() {} +func (*QueryLSMDepositRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_25e7cc311be81f7b, []int{18} +} +func (m *QueryLSMDepositRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryLSMDepositRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryLSMDepositRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryLSMDepositRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryLSMDepositRequest.Merge(m, src) +} +func (m *QueryLSMDepositRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryLSMDepositRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryLSMDepositRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryLSMDepositRequest proto.InternalMessageInfo + +func (m *QueryLSMDepositRequest) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +func (m *QueryLSMDepositRequest) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +type QueryLSMDepositResponse struct { + Deposit LSMTokenDeposit `protobuf:"bytes,1,opt,name=deposit,proto3" json:"deposit"` +} + +func (m *QueryLSMDepositResponse) Reset() { *m = QueryLSMDepositResponse{} } +func (m *QueryLSMDepositResponse) String() string { return proto.CompactTextString(m) } +func (*QueryLSMDepositResponse) ProtoMessage() {} +func (*QueryLSMDepositResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_25e7cc311be81f7b, []int{19} +} +func (m *QueryLSMDepositResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryLSMDepositResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryLSMDepositResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryLSMDepositResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryLSMDepositResponse.Merge(m, src) +} +func (m *QueryLSMDepositResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryLSMDepositResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryLSMDepositResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryLSMDepositResponse proto.InternalMessageInfo + +func (m *QueryLSMDepositResponse) GetDeposit() LSMTokenDeposit { + if m != nil { + return m.Deposit + } + return LSMTokenDeposit{} +} + +type QueryLSMDepositsRequest struct { + ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + ValidatorAddress string `protobuf:"bytes,2,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` +} + +func (m *QueryLSMDepositsRequest) Reset() { *m = QueryLSMDepositsRequest{} } +func (m *QueryLSMDepositsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryLSMDepositsRequest) ProtoMessage() {} +func (*QueryLSMDepositsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_25e7cc311be81f7b, []int{20} +} +func (m *QueryLSMDepositsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryLSMDepositsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryLSMDepositsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryLSMDepositsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryLSMDepositsRequest.Merge(m, src) +} +func (m *QueryLSMDepositsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryLSMDepositsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryLSMDepositsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryLSMDepositsRequest proto.InternalMessageInfo + +func (m *QueryLSMDepositsRequest) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +func (m *QueryLSMDepositsRequest) GetValidatorAddress() string { + if m != nil { + return m.ValidatorAddress + } + return "" +} + +func (m *QueryLSMDepositsRequest) GetStatus() string { + if m != nil { + return m.Status + } + return "" +} + +type QueryLSMDepositsResponse struct { + Deposits []LSMTokenDeposit `protobuf:"bytes,1,rep,name=deposits,proto3" json:"deposits"` +} + +func (m *QueryLSMDepositsResponse) Reset() { *m = QueryLSMDepositsResponse{} } +func (m *QueryLSMDepositsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryLSMDepositsResponse) ProtoMessage() {} +func (*QueryLSMDepositsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_25e7cc311be81f7b, []int{21} +} +func (m *QueryLSMDepositsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryLSMDepositsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryLSMDepositsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryLSMDepositsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryLSMDepositsResponse.Merge(m, src) +} +func (m *QueryLSMDepositsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryLSMDepositsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryLSMDepositsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryLSMDepositsResponse proto.InternalMessageInfo + +func (m *QueryLSMDepositsResponse) GetDeposits() []LSMTokenDeposit { + if m != nil { + return m.Deposits + } + return nil +} + +func init() { + proto.RegisterType((*QueryParamsRequest)(nil), "stride.records.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "stride.records.QueryParamsResponse") + proto.RegisterType((*QueryGetDepositRecordRequest)(nil), "stride.records.QueryGetDepositRecordRequest") + proto.RegisterType((*QueryGetDepositRecordResponse)(nil), "stride.records.QueryGetDepositRecordResponse") + proto.RegisterType((*QueryAllDepositRecordRequest)(nil), "stride.records.QueryAllDepositRecordRequest") + proto.RegisterType((*QueryAllDepositRecordResponse)(nil), "stride.records.QueryAllDepositRecordResponse") + proto.RegisterType((*QueryDepositRecordByHostRequest)(nil), "stride.records.QueryDepositRecordByHostRequest") + proto.RegisterType((*QueryDepositRecordByHostResponse)(nil), "stride.records.QueryDepositRecordByHostResponse") + proto.RegisterType((*QueryGetUserRedemptionRecordRequest)(nil), "stride.records.QueryGetUserRedemptionRecordRequest") + proto.RegisterType((*QueryGetUserRedemptionRecordResponse)(nil), "stride.records.QueryGetUserRedemptionRecordResponse") + proto.RegisterType((*QueryAllUserRedemptionRecordRequest)(nil), "stride.records.QueryAllUserRedemptionRecordRequest") + proto.RegisterType((*QueryAllUserRedemptionRecordResponse)(nil), "stride.records.QueryAllUserRedemptionRecordResponse") + proto.RegisterType((*QueryAllUserRedemptionRecordForUserRequest)(nil), "stride.records.QueryAllUserRedemptionRecordForUserRequest") + proto.RegisterType((*QueryAllUserRedemptionRecordForUserResponse)(nil), "stride.records.QueryAllUserRedemptionRecordForUserResponse") + proto.RegisterType((*QueryGetEpochUnbondingRecordRequest)(nil), "stride.records.QueryGetEpochUnbondingRecordRequest") + proto.RegisterType((*QueryGetEpochUnbondingRecordResponse)(nil), "stride.records.QueryGetEpochUnbondingRecordResponse") + proto.RegisterType((*QueryAllEpochUnbondingRecordRequest)(nil), "stride.records.QueryAllEpochUnbondingRecordRequest") + proto.RegisterType((*QueryAllEpochUnbondingRecordResponse)(nil), "stride.records.QueryAllEpochUnbondingRecordResponse") + proto.RegisterType((*QueryLSMDepositRequest)(nil), "stride.records.QueryLSMDepositRequest") + proto.RegisterType((*QueryLSMDepositResponse)(nil), "stride.records.QueryLSMDepositResponse") + proto.RegisterType((*QueryLSMDepositsRequest)(nil), "stride.records.QueryLSMDepositsRequest") + proto.RegisterType((*QueryLSMDepositsResponse)(nil), "stride.records.QueryLSMDepositsResponse") +} + +func init() { proto.RegisterFile("stride/records/query.proto", fileDescriptor_25e7cc311be81f7b) } + +var fileDescriptor_25e7cc311be81f7b = []byte{ + // 1193 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x58, 0x4d, 0x4f, 0x1b, 0xc7, + 0x1b, 0x67, 0x79, 0x0d, 0x0f, 0x09, 0x7f, 0xfe, 0x13, 0x8b, 0x50, 0x87, 0x18, 0xb2, 0x44, 0x79, + 0x01, 0xe2, 0x29, 0x84, 0x2a, 0x6d, 0xa2, 0x2a, 0x72, 0x68, 0x09, 0x34, 0x24, 0x4a, 0x4d, 0x73, + 0x41, 0x6a, 0x37, 0x6b, 0xef, 0x60, 0x56, 0xd8, 0x3b, 0xce, 0xce, 0x1a, 0xd5, 0x75, 0x7d, 0xe9, + 0xa9, 0xc7, 0x4a, 0xf9, 0x06, 0xad, 0xfa, 0x0d, 0xfa, 0x01, 0xaa, 0x9e, 0x38, 0xf4, 0x90, 0xa8, + 0x97, 0x9c, 0xaa, 0x0a, 0xfa, 0x11, 0x7a, 0xae, 0x2a, 0xcf, 0xcc, 0x1a, 0xaf, 0x3d, 0xbb, 0x5e, + 0x23, 0xf7, 0xd0, 0x13, 0xde, 0x79, 0xde, 0x7e, 0xbf, 0x79, 0x9e, 0x79, 0x9e, 0x19, 0x20, 0xc9, + 0x3c, 0xd7, 0xb6, 0x08, 0x76, 0x49, 0x9e, 0xba, 0x16, 0xc3, 0x2f, 0x2b, 0xc4, 0xad, 0xa6, 0xcb, + 0x2e, 0xf5, 0x28, 0x9a, 0x14, 0xb2, 0xb4, 0x94, 0x25, 0x17, 0xf3, 0x94, 0x95, 0x28, 0xc3, 0x39, + 0x93, 0x11, 0xa1, 0x88, 0x0f, 0x57, 0x72, 0xc4, 0x33, 0x57, 0x70, 0xd9, 0x2c, 0xd8, 0x8e, 0xe9, + 0xd9, 0xd4, 0x11, 0xb6, 0xc9, 0x44, 0x81, 0x16, 0x28, 0xff, 0x89, 0x1b, 0xbf, 0xe4, 0xea, 0x6c, + 0x81, 0xd2, 0x42, 0x91, 0x60, 0xb3, 0x6c, 0x63, 0xd3, 0x71, 0xa8, 0xc7, 0x4d, 0x98, 0x94, 0x5e, + 0x6e, 0xc3, 0x52, 0x36, 0x5d, 0xb3, 0xe4, 0x0b, 0x67, 0xdb, 0x84, 0xf2, 0xaf, 0x90, 0xea, 0x09, + 0x40, 0x9f, 0x36, 0x00, 0x3d, 0xe3, 0x26, 0x59, 0xf2, 0xb2, 0x42, 0x98, 0xa7, 0x3f, 0x86, 0x8b, + 0x81, 0x55, 0x56, 0xa6, 0x0e, 0x23, 0x68, 0x0d, 0x46, 0x85, 0xeb, 0x19, 0x6d, 0x5e, 0xbb, 0x39, + 0xb1, 0x3a, 0x9d, 0x0e, 0x12, 0x4d, 0x0b, 0xfd, 0x87, 0xc3, 0x47, 0xbf, 0xcf, 0x0d, 0x64, 0xa5, + 0xae, 0x9e, 0x86, 0x59, 0xee, 0xec, 0x11, 0xf1, 0x3e, 0x22, 0x65, 0xca, 0x6c, 0x2f, 0xcb, 0xd5, + 0x65, 0x30, 0x34, 0x09, 0x83, 0xb6, 0xc5, 0x3d, 0x0e, 0x67, 0x07, 0x6d, 0x4b, 0x3f, 0x80, 0x2b, + 0x21, 0xfa, 0x12, 0xc6, 0x27, 0x30, 0x69, 0x09, 0x81, 0x21, 0x02, 0x4b, 0x38, 0x57, 0xda, 0xe1, + 0x04, 0xcc, 0x25, 0xaa, 0x0b, 0x56, 0xeb, 0xa2, 0xbe, 0x27, 0xc1, 0x65, 0x8a, 0x45, 0x25, 0xb8, + 0x0d, 0x80, 0xd3, 0x14, 0xc9, 0x38, 0xd7, 0xd3, 0x22, 0x9f, 0xe9, 0x46, 0x3e, 0xd3, 0x22, 0xf1, + 0x32, 0x9f, 0xe9, 0x67, 0x66, 0x81, 0x48, 0xdb, 0x6c, 0x8b, 0xa5, 0xfe, 0x93, 0x26, 0x59, 0x75, + 0x06, 0x8a, 0x60, 0x35, 0x74, 0x36, 0x56, 0xe8, 0x51, 0x00, 0xf5, 0x20, 0x47, 0x7d, 0xa3, 0x2b, + 0x6a, 0x01, 0x24, 0x00, 0x7b, 0x1d, 0xe6, 0x38, 0xea, 0x60, 0xcc, 0xea, 0x26, 0x65, 0x9e, 0xbf, + 0x43, 0xf3, 0x70, 0x7e, 0x9f, 0x32, 0xcf, 0xf8, 0x8a, 0x3a, 0xc4, 0x90, 0x89, 0x1c, 0xcf, 0x42, + 0x63, 0x6d, 0x97, 0x3a, 0x64, 0xcb, 0xd2, 0x1d, 0x98, 0x0f, 0x77, 0xd2, 0x7f, 0xf6, 0xfa, 0x7b, + 0xb0, 0xe0, 0x17, 0xd0, 0x73, 0x46, 0xdc, 0x2c, 0xb1, 0x48, 0xa9, 0xdc, 0xa0, 0x13, 0x56, 0x77, + 0xe3, 0xbc, 0xee, 0xbe, 0xd5, 0xe0, 0x5a, 0xb4, 0x9d, 0xc4, 0xfa, 0x02, 0xa6, 0x2b, 0x8c, 0xb8, + 0x86, 0xdb, 0x54, 0x08, 0xd6, 0xe1, 0xb5, 0x76, 0xcc, 0x2a, 0x6f, 0x12, 0x7a, 0xa2, 0xa2, 0x90, + 0xe9, 0x25, 0xc9, 0x20, 0x53, 0x2c, 0x46, 0x31, 0xe8, 0x57, 0x71, 0xbe, 0xf1, 0x99, 0x87, 0xc6, + 0x8b, 0xc1, 0x7c, 0xa8, 0x1f, 0xcc, 0xfb, 0x57, 0xb9, 0x6f, 0x34, 0x58, 0x8c, 0xe2, 0xb4, 0x41, + 0x5d, 0xb1, 0x2c, 0xb6, 0xf2, 0x1d, 0x38, 0x97, 0xdf, 0x37, 0x6d, 0xe7, 0xb4, 0x82, 0xc7, 0xf8, + 0xf7, 0x96, 0x85, 0xa6, 0x60, 0xc8, 0x32, 0xab, 0x1c, 0xcb, 0x70, 0xb6, 0xf1, 0x13, 0xcd, 0xc0, + 0x98, 0x69, 0x59, 0x2e, 0x61, 0x6c, 0x66, 0x48, 0xe8, 0xca, 0x4f, 0x94, 0x80, 0x91, 0xa2, 0x5d, + 0xb2, 0xbd, 0x99, 0x61, 0xae, 0x2d, 0x3e, 0xda, 0xf2, 0x34, 0x72, 0xe6, 0x3c, 0xbd, 0xd5, 0x60, + 0x29, 0x16, 0xa7, 0xff, 0x5e, 0xba, 0x36, 0x4f, 0xcf, 0xec, 0xc7, 0x65, 0x9a, 0xdf, 0x7f, 0xee, + 0xe4, 0xa8, 0x63, 0xd9, 0x4e, 0x21, 0x58, 0xf1, 0x57, 0xe1, 0x3c, 0x69, 0x88, 0x0d, 0xa7, 0x52, + 0xca, 0x11, 0x57, 0x4e, 0x8d, 0x09, 0xbe, 0xf6, 0x94, 0x2f, 0x05, 0x8e, 0xb1, 0xda, 0xd5, 0xe9, + 0xee, 0x08, 0x5f, 0x15, 0x5f, 0xa1, 0xcb, 0x31, 0x56, 0x79, 0xf3, 0x77, 0x87, 0x28, 0x64, 0xad, + 0xc7, 0x38, 0x8a, 0xd4, 0xbf, 0x71, 0x8c, 0xcf, 0xcc, 0x7c, 0xa8, 0x1f, 0xcc, 0xfb, 0x57, 0x17, + 0x5b, 0x30, 0xcd, 0x29, 0x6d, 0xef, 0x3c, 0x69, 0x76, 0xfe, 0xae, 0x27, 0x36, 0x01, 0x23, 0x16, + 0x71, 0x68, 0x89, 0x07, 0x1e, 0xcf, 0x8a, 0x0f, 0x7d, 0x17, 0x2e, 0x75, 0xb8, 0x92, 0x1b, 0xf2, + 0x00, 0xc6, 0xe4, 0x08, 0x91, 0xdb, 0x3f, 0xd7, 0xbe, 0x03, 0xdb, 0x3b, 0x4f, 0x3e, 0xa3, 0x07, + 0xc4, 0x91, 0x96, 0x92, 0xbc, 0x6f, 0xa5, 0x57, 0x3b, 0x7c, 0xb3, 0x18, 0x38, 0x97, 0xe0, 0xff, + 0x87, 0x66, 0xd1, 0xb6, 0x4c, 0x8f, 0xba, 0x86, 0xdf, 0x51, 0x04, 0xe6, 0xa9, 0xa6, 0x20, 0x23, + 0x5b, 0xcb, 0x34, 0x8c, 0x32, 0xcf, 0xf4, 0x2a, 0x7e, 0xcf, 0x91, 0x5f, 0xfa, 0xe7, 0x30, 0xd3, + 0x19, 0x5a, 0xf2, 0xca, 0xc0, 0x39, 0x89, 0x90, 0xc9, 0xd4, 0xc6, 0x24, 0xd6, 0x34, 0x5b, 0xfd, + 0xeb, 0x7f, 0x30, 0xc2, 0xfd, 0xa3, 0xaf, 0x61, 0x54, 0xdc, 0xef, 0x90, 0xde, 0xee, 0xa4, 0xf3, + 0x0a, 0x99, 0x5c, 0x88, 0xd4, 0x11, 0xf8, 0xf4, 0x5b, 0xdf, 0xfc, 0xf6, 0xe7, 0xab, 0xc1, 0x05, + 0x74, 0x15, 0xef, 0x70, 0xe5, 0x6d, 0x33, 0xc7, 0xb0, 0xf2, 0x32, 0x8b, 0x7e, 0xd1, 0x20, 0xa1, + 0x6a, 0x4f, 0xe8, 0x8e, 0x32, 0x50, 0xf4, 0xec, 0x4f, 0xae, 0xf5, 0x66, 0x24, 0xe1, 0x3e, 0xe0, + 0x70, 0x3f, 0x40, 0x77, 0x25, 0xdc, 0xdb, 0x2a, 0xbc, 0xea, 0x8e, 0x8b, 0x6b, 0xb6, 0x55, 0x47, + 0x3f, 0x6b, 0x70, 0x49, 0x15, 0x21, 0x53, 0x2c, 0x86, 0xf0, 0x88, 0xbe, 0x01, 0x84, 0xf0, 0xe8, + 0x32, 0xc6, 0xf5, 0x7b, 0x9c, 0xc7, 0x1a, 0x5a, 0xed, 0x9d, 0x07, 0xfa, 0x5b, 0x83, 0xcb, 0x11, + 0xb3, 0x07, 0xdd, 0xeb, 0x05, 0x51, 0x70, 0x08, 0x27, 0xef, 0x9f, 0xc9, 0x56, 0x92, 0xda, 0xe3, + 0xa4, 0x5e, 0xa0, 0x2f, 0x7a, 0x27, 0x65, 0xec, 0x51, 0xd7, 0x68, 0x88, 0x70, 0xcd, 0x3f, 0xaa, + 0x75, 0x5c, 0xb3, 0xcc, 0x6a, 0x1d, 0xd7, 0xe4, 0xb1, 0xac, 0xe3, 0x1a, 0x9f, 0xe5, 0x75, 0xf4, + 0xab, 0x06, 0x09, 0x55, 0x3f, 0x0c, 0x2f, 0xc4, 0x88, 0xde, 0x1f, 0x5e, 0x88, 0x51, 0x0d, 0x5c, + 0xdf, 0xe2, 0x5c, 0xd7, 0x51, 0x26, 0x8a, 0xab, 0xba, 0xc5, 0xe3, 0x5a, 0xeb, 0x00, 0x15, 0x25, + 0xa9, 0x8a, 0x15, 0x59, 0x92, 0xbd, 0x33, 0xea, 0x32, 0x92, 0xe2, 0x95, 0xa4, 0x9a, 0x11, 0xfa, + 0x51, 0x83, 0x0b, 0x81, 0x67, 0x01, 0x5a, 0x0e, 0xdb, 0x55, 0xd5, 0x1b, 0x2f, 0x79, 0x3b, 0xa6, + 0xb6, 0x84, 0x7a, 0x97, 0x43, 0x5d, 0x41, 0x38, 0x0a, 0x6a, 0xf0, 0x31, 0x23, 0x4e, 0xff, 0x0f, + 0x1a, 0x4c, 0x05, 0x5c, 0x36, 0xf6, 0x78, 0x39, 0x6c, 0xbb, 0x7a, 0x80, 0x1a, 0xf6, 0xa6, 0xd4, + 0x57, 0x39, 0xd4, 0x65, 0xb4, 0x18, 0x1f, 0x2a, 0x3a, 0xd2, 0xe0, 0xa2, 0xe2, 0xa5, 0x86, 0xb0, + 0x32, 0x74, 0xf8, 0xc3, 0x30, 0xf9, 0x6e, 0x7c, 0x03, 0x09, 0xf7, 0x29, 0x87, 0xbb, 0x89, 0x36, + 0xe2, 0xc3, 0x35, 0x72, 0x55, 0xa3, 0xf9, 0xfc, 0xc4, 0xb5, 0xd6, 0x97, 0x68, 0x1d, 0x7d, 0xaf, + 0x01, 0x9c, 0x8e, 0x45, 0x74, 0x5d, 0x09, 0xa8, 0xe3, 0x66, 0x91, 0xbc, 0xd1, 0x55, 0x4f, 0xe2, + 0x5d, 0xe7, 0x78, 0x3f, 0x44, 0xf7, 0x55, 0x78, 0x99, 0x67, 0x1e, 0x10, 0x3b, 0x97, 0xc7, 0x45, + 0x56, 0x32, 0x24, 0xe8, 0x60, 0x7f, 0x69, 0xdc, 0x4a, 0xea, 0xe8, 0x95, 0x06, 0x13, 0x2d, 0xb3, + 0x1b, 0x75, 0x8b, 0xde, 0x9c, 0xb0, 0x37, 0xbb, 0x2b, 0x4a, 0x9c, 0x2b, 0x1c, 0xe7, 0x12, 0xba, + 0x15, 0x17, 0x27, 0x7b, 0xf8, 0xf8, 0xe8, 0x38, 0xa5, 0xbd, 0x3e, 0x4e, 0x69, 0x7f, 0x1c, 0xa7, + 0xb4, 0xef, 0x4e, 0x52, 0x03, 0xaf, 0x4f, 0x52, 0x03, 0x6f, 0x4f, 0x52, 0x03, 0xbb, 0x2b, 0x05, + 0xdb, 0xdb, 0xaf, 0xe4, 0xd2, 0x79, 0x5a, 0x52, 0xb9, 0x3b, 0x5c, 0x7d, 0x1f, 0x7f, 0xd9, 0x4c, + 0x96, 0x57, 0x2d, 0x13, 0x96, 0x1b, 0xe5, 0xff, 0x6b, 0xba, 0xf3, 0x4f, 0x00, 0x00, 0x00, 0xff, + 0xff, 0x37, 0x10, 0xd2, 0xba, 0x34, 0x13, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type QueryClient interface { + // Parameters queries the parameters of the module. + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + // Queries a UserRedemptionRecord by id. + UserRedemptionRecord(ctx context.Context, in *QueryGetUserRedemptionRecordRequest, opts ...grpc.CallOption) (*QueryGetUserRedemptionRecordResponse, error) + // Queries a list of UserRedemptionRecord items. + UserRedemptionRecordAll(ctx context.Context, in *QueryAllUserRedemptionRecordRequest, opts ...grpc.CallOption) (*QueryAllUserRedemptionRecordResponse, error) + // Queries a list of UserRedemptionRecord items by chainId / userId pair. + UserRedemptionRecordForUser(ctx context.Context, in *QueryAllUserRedemptionRecordForUserRequest, opts ...grpc.CallOption) (*QueryAllUserRedemptionRecordForUserResponse, error) + // Queries a EpochUnbondingRecord by id. + EpochUnbondingRecord(ctx context.Context, in *QueryGetEpochUnbondingRecordRequest, opts ...grpc.CallOption) (*QueryGetEpochUnbondingRecordResponse, error) + // Queries a list of EpochUnbondingRecord items. + EpochUnbondingRecordAll(ctx context.Context, in *QueryAllEpochUnbondingRecordRequest, opts ...grpc.CallOption) (*QueryAllEpochUnbondingRecordResponse, error) + // Queries a DepositRecord by id. + DepositRecord(ctx context.Context, in *QueryGetDepositRecordRequest, opts ...grpc.CallOption) (*QueryGetDepositRecordResponse, error) + // Queries a list of DepositRecord items. + DepositRecordAll(ctx context.Context, in *QueryAllDepositRecordRequest, opts ...grpc.CallOption) (*QueryAllDepositRecordResponse, error) + // Queries a list of DepositRecord items for a given host zone + DepositRecordByHost(ctx context.Context, in *QueryDepositRecordByHostRequest, opts ...grpc.CallOption) (*QueryDepositRecordByHostResponse, error) + // Queries the existing LSMTokenDeposits for one specific deposit + LSMDeposit(ctx context.Context, in *QueryLSMDepositRequest, opts ...grpc.CallOption) (*QueryLSMDepositResponse, error) + // Queries the existing LSMTokenDeposits for all which match filters + // intended use: + // ...stakeibc/lsm_deposits?chain_id=X&validator_address=Y&status=Z + LSMDeposits(ctx context.Context, in *QueryLSMDepositsRequest, opts ...grpc.CallOption) (*QueryLSMDepositsResponse, error) +} + +type queryClient struct { + cc grpc1.ClientConn +} + +func NewQueryClient(cc grpc1.ClientConn) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, "/stride.records.Query/Params", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) UserRedemptionRecord(ctx context.Context, in *QueryGetUserRedemptionRecordRequest, opts ...grpc.CallOption) (*QueryGetUserRedemptionRecordResponse, error) { + out := new(QueryGetUserRedemptionRecordResponse) + err := c.cc.Invoke(ctx, "/stride.records.Query/UserRedemptionRecord", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) UserRedemptionRecordAll(ctx context.Context, in *QueryAllUserRedemptionRecordRequest, opts ...grpc.CallOption) (*QueryAllUserRedemptionRecordResponse, error) { + out := new(QueryAllUserRedemptionRecordResponse) + err := c.cc.Invoke(ctx, "/stride.records.Query/UserRedemptionRecordAll", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) UserRedemptionRecordForUser(ctx context.Context, in *QueryAllUserRedemptionRecordForUserRequest, opts ...grpc.CallOption) (*QueryAllUserRedemptionRecordForUserResponse, error) { + out := new(QueryAllUserRedemptionRecordForUserResponse) + err := c.cc.Invoke(ctx, "/stride.records.Query/UserRedemptionRecordForUser", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) EpochUnbondingRecord(ctx context.Context, in *QueryGetEpochUnbondingRecordRequest, opts ...grpc.CallOption) (*QueryGetEpochUnbondingRecordResponse, error) { + out := new(QueryGetEpochUnbondingRecordResponse) + err := c.cc.Invoke(ctx, "/stride.records.Query/EpochUnbondingRecord", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) EpochUnbondingRecordAll(ctx context.Context, in *QueryAllEpochUnbondingRecordRequest, opts ...grpc.CallOption) (*QueryAllEpochUnbondingRecordResponse, error) { + out := new(QueryAllEpochUnbondingRecordResponse) + err := c.cc.Invoke(ctx, "/stride.records.Query/EpochUnbondingRecordAll", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) DepositRecord(ctx context.Context, in *QueryGetDepositRecordRequest, opts ...grpc.CallOption) (*QueryGetDepositRecordResponse, error) { + out := new(QueryGetDepositRecordResponse) + err := c.cc.Invoke(ctx, "/stride.records.Query/DepositRecord", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) DepositRecordAll(ctx context.Context, in *QueryAllDepositRecordRequest, opts ...grpc.CallOption) (*QueryAllDepositRecordResponse, error) { + out := new(QueryAllDepositRecordResponse) + err := c.cc.Invoke(ctx, "/stride.records.Query/DepositRecordAll", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) DepositRecordByHost(ctx context.Context, in *QueryDepositRecordByHostRequest, opts ...grpc.CallOption) (*QueryDepositRecordByHostResponse, error) { + out := new(QueryDepositRecordByHostResponse) + err := c.cc.Invoke(ctx, "/stride.records.Query/DepositRecordByHost", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) LSMDeposit(ctx context.Context, in *QueryLSMDepositRequest, opts ...grpc.CallOption) (*QueryLSMDepositResponse, error) { + out := new(QueryLSMDepositResponse) + err := c.cc.Invoke(ctx, "/stride.records.Query/LSMDeposit", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) LSMDeposits(ctx context.Context, in *QueryLSMDepositsRequest, opts ...grpc.CallOption) (*QueryLSMDepositsResponse, error) { + out := new(QueryLSMDepositsResponse) + err := c.cc.Invoke(ctx, "/stride.records.Query/LSMDeposits", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +type QueryServer interface { + // Parameters queries the parameters of the module. + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + // Queries a UserRedemptionRecord by id. + UserRedemptionRecord(context.Context, *QueryGetUserRedemptionRecordRequest) (*QueryGetUserRedemptionRecordResponse, error) + // Queries a list of UserRedemptionRecord items. + UserRedemptionRecordAll(context.Context, *QueryAllUserRedemptionRecordRequest) (*QueryAllUserRedemptionRecordResponse, error) + // Queries a list of UserRedemptionRecord items by chainId / userId pair. + UserRedemptionRecordForUser(context.Context, *QueryAllUserRedemptionRecordForUserRequest) (*QueryAllUserRedemptionRecordForUserResponse, error) + // Queries a EpochUnbondingRecord by id. + EpochUnbondingRecord(context.Context, *QueryGetEpochUnbondingRecordRequest) (*QueryGetEpochUnbondingRecordResponse, error) + // Queries a list of EpochUnbondingRecord items. + EpochUnbondingRecordAll(context.Context, *QueryAllEpochUnbondingRecordRequest) (*QueryAllEpochUnbondingRecordResponse, error) + // Queries a DepositRecord by id. + DepositRecord(context.Context, *QueryGetDepositRecordRequest) (*QueryGetDepositRecordResponse, error) + // Queries a list of DepositRecord items. + DepositRecordAll(context.Context, *QueryAllDepositRecordRequest) (*QueryAllDepositRecordResponse, error) + // Queries a list of DepositRecord items for a given host zone + DepositRecordByHost(context.Context, *QueryDepositRecordByHostRequest) (*QueryDepositRecordByHostResponse, error) + // Queries the existing LSMTokenDeposits for one specific deposit + LSMDeposit(context.Context, *QueryLSMDepositRequest) (*QueryLSMDepositResponse, error) + // Queries the existing LSMTokenDeposits for all which match filters + // intended use: + // ...stakeibc/lsm_deposits?chain_id=X&validator_address=Y&status=Z + LSMDeposits(context.Context, *QueryLSMDepositsRequest) (*QueryLSMDepositsResponse, error) +} + +// UnimplementedQueryServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +} +func (*UnimplementedQueryServer) UserRedemptionRecord(ctx context.Context, req *QueryGetUserRedemptionRecordRequest) (*QueryGetUserRedemptionRecordResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UserRedemptionRecord not implemented") +} +func (*UnimplementedQueryServer) UserRedemptionRecordAll(ctx context.Context, req *QueryAllUserRedemptionRecordRequest) (*QueryAllUserRedemptionRecordResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UserRedemptionRecordAll not implemented") +} +func (*UnimplementedQueryServer) UserRedemptionRecordForUser(ctx context.Context, req *QueryAllUserRedemptionRecordForUserRequest) (*QueryAllUserRedemptionRecordForUserResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UserRedemptionRecordForUser not implemented") +} +func (*UnimplementedQueryServer) EpochUnbondingRecord(ctx context.Context, req *QueryGetEpochUnbondingRecordRequest) (*QueryGetEpochUnbondingRecordResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EpochUnbondingRecord not implemented") +} +func (*UnimplementedQueryServer) EpochUnbondingRecordAll(ctx context.Context, req *QueryAllEpochUnbondingRecordRequest) (*QueryAllEpochUnbondingRecordResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EpochUnbondingRecordAll not implemented") +} +func (*UnimplementedQueryServer) DepositRecord(ctx context.Context, req *QueryGetDepositRecordRequest) (*QueryGetDepositRecordResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DepositRecord not implemented") +} +func (*UnimplementedQueryServer) DepositRecordAll(ctx context.Context, req *QueryAllDepositRecordRequest) (*QueryAllDepositRecordResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DepositRecordAll not implemented") +} +func (*UnimplementedQueryServer) DepositRecordByHost(ctx context.Context, req *QueryDepositRecordByHostRequest) (*QueryDepositRecordByHostResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DepositRecordByHost not implemented") +} +func (*UnimplementedQueryServer) LSMDeposit(ctx context.Context, req *QueryLSMDepositRequest) (*QueryLSMDepositResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method LSMDeposit not implemented") +} +func (*UnimplementedQueryServer) LSMDeposits(ctx context.Context, req *QueryLSMDepositsRequest) (*QueryLSMDepositsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method LSMDeposits not implemented") +} + +func RegisterQueryServer(s grpc1.Server, srv QueryServer) { + s.RegisterService(&_Query_serviceDesc, srv) +} + +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Params(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.records.Query/Params", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_UserRedemptionRecord_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetUserRedemptionRecordRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).UserRedemptionRecord(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.records.Query/UserRedemptionRecord", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).UserRedemptionRecord(ctx, req.(*QueryGetUserRedemptionRecordRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_UserRedemptionRecordAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllUserRedemptionRecordRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).UserRedemptionRecordAll(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.records.Query/UserRedemptionRecordAll", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).UserRedemptionRecordAll(ctx, req.(*QueryAllUserRedemptionRecordRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_UserRedemptionRecordForUser_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllUserRedemptionRecordForUserRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).UserRedemptionRecordForUser(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.records.Query/UserRedemptionRecordForUser", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).UserRedemptionRecordForUser(ctx, req.(*QueryAllUserRedemptionRecordForUserRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_EpochUnbondingRecord_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetEpochUnbondingRecordRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).EpochUnbondingRecord(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.records.Query/EpochUnbondingRecord", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).EpochUnbondingRecord(ctx, req.(*QueryGetEpochUnbondingRecordRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_EpochUnbondingRecordAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllEpochUnbondingRecordRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).EpochUnbondingRecordAll(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.records.Query/EpochUnbondingRecordAll", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).EpochUnbondingRecordAll(ctx, req.(*QueryAllEpochUnbondingRecordRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_DepositRecord_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetDepositRecordRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).DepositRecord(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.records.Query/DepositRecord", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).DepositRecord(ctx, req.(*QueryGetDepositRecordRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_DepositRecordAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllDepositRecordRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).DepositRecordAll(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.records.Query/DepositRecordAll", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).DepositRecordAll(ctx, req.(*QueryAllDepositRecordRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_DepositRecordByHost_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryDepositRecordByHostRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).DepositRecordByHost(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.records.Query/DepositRecordByHost", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).DepositRecordByHost(ctx, req.(*QueryDepositRecordByHostRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_LSMDeposit_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryLSMDepositRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).LSMDeposit(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.records.Query/LSMDeposit", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).LSMDeposit(ctx, req.(*QueryLSMDepositRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_LSMDeposits_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryLSMDepositsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).LSMDeposits(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.records.Query/LSMDeposits", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).LSMDeposits(ctx, req.(*QueryLSMDepositsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Query_serviceDesc = grpc.ServiceDesc{ + ServiceName: "stride.records.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + { + MethodName: "UserRedemptionRecord", + Handler: _Query_UserRedemptionRecord_Handler, + }, + { + MethodName: "UserRedemptionRecordAll", + Handler: _Query_UserRedemptionRecordAll_Handler, + }, + { + MethodName: "UserRedemptionRecordForUser", + Handler: _Query_UserRedemptionRecordForUser_Handler, + }, + { + MethodName: "EpochUnbondingRecord", + Handler: _Query_EpochUnbondingRecord_Handler, + }, + { + MethodName: "EpochUnbondingRecordAll", + Handler: _Query_EpochUnbondingRecordAll_Handler, + }, + { + MethodName: "DepositRecord", + Handler: _Query_DepositRecord_Handler, + }, + { + MethodName: "DepositRecordAll", + Handler: _Query_DepositRecordAll_Handler, + }, + { + MethodName: "DepositRecordByHost", + Handler: _Query_DepositRecordByHost_Handler, + }, + { + MethodName: "LSMDeposit", + Handler: _Query_LSMDeposit_Handler, + }, + { + MethodName: "LSMDeposits", + Handler: _Query_LSMDeposits_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "stride/records/query.proto", +} + +func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryGetDepositRecordRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryGetDepositRecordRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryGetDepositRecordRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Id != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Id)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryGetDepositRecordResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryGetDepositRecordResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryGetDepositRecordResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.DepositRecord.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryAllDepositRecordRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryAllDepositRecordRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllDepositRecordRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryAllDepositRecordResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryAllDepositRecordResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllDepositRecordResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.DepositRecord) > 0 { + for iNdEx := len(m.DepositRecord) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.DepositRecord[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryDepositRecordByHostRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryDepositRecordByHostRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryDepositRecordByHostRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.HostZoneId) > 0 { + i -= len(m.HostZoneId) + copy(dAtA[i:], m.HostZoneId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.HostZoneId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryDepositRecordByHostResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryDepositRecordByHostResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryDepositRecordByHostResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.DepositRecord) > 0 { + for iNdEx := len(m.DepositRecord) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.DepositRecord[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryGetUserRedemptionRecordRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryGetUserRedemptionRecordRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryGetUserRedemptionRecordRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Id) > 0 { + i -= len(m.Id) + copy(dAtA[i:], m.Id) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Id))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryGetUserRedemptionRecordResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryGetUserRedemptionRecordResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryGetUserRedemptionRecordResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.UserRedemptionRecord.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryAllUserRedemptionRecordRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryAllUserRedemptionRecordRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllUserRedemptionRecordRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryAllUserRedemptionRecordResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryAllUserRedemptionRecordResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllUserRedemptionRecordResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.UserRedemptionRecord) > 0 { + for iNdEx := len(m.UserRedemptionRecord) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.UserRedemptionRecord[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryAllUserRedemptionRecordForUserRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryAllUserRedemptionRecordForUserRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllUserRedemptionRecordForUserRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if m.Limit != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Limit)) + i-- + dAtA[i] = 0x20 + } + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0x1a + } + if m.Day != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Day)) + i-- + dAtA[i] = 0x10 + } + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryAllUserRedemptionRecordForUserResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryAllUserRedemptionRecordForUserResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllUserRedemptionRecordForUserResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.UserRedemptionRecord) > 0 { + for iNdEx := len(m.UserRedemptionRecord) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.UserRedemptionRecord[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryGetEpochUnbondingRecordRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryGetEpochUnbondingRecordRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryGetEpochUnbondingRecordRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.EpochNumber != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.EpochNumber)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryGetEpochUnbondingRecordResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryGetEpochUnbondingRecordResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryGetEpochUnbondingRecordResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.EpochUnbondingRecord.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryAllEpochUnbondingRecordRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryAllEpochUnbondingRecordRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllEpochUnbondingRecordRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryAllEpochUnbondingRecordResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryAllEpochUnbondingRecordResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllEpochUnbondingRecordResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.EpochUnbondingRecord) > 0 { + for iNdEx := len(m.EpochUnbondingRecord) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.EpochUnbondingRecord[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryLSMDepositRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryLSMDepositRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryLSMDepositRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0x12 + } + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryLSMDepositResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryLSMDepositResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryLSMDepositResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Deposit.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryLSMDepositsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryLSMDepositsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryLSMDepositsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Status) > 0 { + i -= len(m.Status) + copy(dAtA[i:], m.Status) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Status))) + i-- + dAtA[i] = 0x1a + } + if len(m.ValidatorAddress) > 0 { + i -= len(m.ValidatorAddress) + copy(dAtA[i:], m.ValidatorAddress) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ValidatorAddress))) + i-- + dAtA[i] = 0x12 + } + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryLSMDepositsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryLSMDepositsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryLSMDepositsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Deposits) > 0 { + for iNdEx := len(m.Deposits) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Deposits[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *QueryParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryGetDepositRecordRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Id != 0 { + n += 1 + sovQuery(uint64(m.Id)) + } + return n +} + +func (m *QueryGetDepositRecordResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.DepositRecord.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryAllDepositRecordRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllDepositRecordResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.DepositRecord) > 0 { + for _, e := range m.DepositRecord { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryDepositRecordByHostRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.HostZoneId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryDepositRecordByHostResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.DepositRecord) > 0 { + for _, e := range m.DepositRecord { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryGetUserRedemptionRecordRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Id) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryGetUserRedemptionRecordResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.UserRedemptionRecord.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryAllUserRedemptionRecordRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllUserRedemptionRecordResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.UserRedemptionRecord) > 0 { + for _, e := range m.UserRedemptionRecord { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllUserRedemptionRecordForUserRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Day != 0 { + n += 1 + sovQuery(uint64(m.Day)) + } + l = len(m.Address) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Limit != 0 { + n += 1 + sovQuery(uint64(m.Limit)) + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllUserRedemptionRecordForUserResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.UserRedemptionRecord) > 0 { + for _, e := range m.UserRedemptionRecord { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryGetEpochUnbondingRecordRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.EpochNumber != 0 { + n += 1 + sovQuery(uint64(m.EpochNumber)) + } + return n +} + +func (m *QueryGetEpochUnbondingRecordResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.EpochUnbondingRecord.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryAllEpochUnbondingRecordRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllEpochUnbondingRecordResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.EpochUnbondingRecord) > 0 { + for _, e := range m.EpochUnbondingRecord { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryLSMDepositRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryLSMDepositResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Deposit.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryLSMDepositsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.ValidatorAddress) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.Status) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryLSMDepositsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Deposits) > 0 { + for _, e := range m.Deposits { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryGetDepositRecordRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryGetDepositRecordRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryGetDepositRecordRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + } + m.Id = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Id |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryGetDepositRecordResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryGetDepositRecordResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryGetDepositRecordResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DepositRecord", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.DepositRecord.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllDepositRecordRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAllDepositRecordRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllDepositRecordRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllDepositRecordResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAllDepositRecordResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllDepositRecordResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DepositRecord", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DepositRecord = append(m.DepositRecord, DepositRecord{}) + if err := m.DepositRecord[len(m.DepositRecord)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryDepositRecordByHostRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryDepositRecordByHostRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryDepositRecordByHostRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZoneId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZoneId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryDepositRecordByHostResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryDepositRecordByHostResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryDepositRecordByHostResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DepositRecord", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DepositRecord = append(m.DepositRecord, DepositRecord{}) + if err := m.DepositRecord[len(m.DepositRecord)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryGetUserRedemptionRecordRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryGetUserRedemptionRecordRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryGetUserRedemptionRecordRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Id = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryGetUserRedemptionRecordResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryGetUserRedemptionRecordResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryGetUserRedemptionRecordResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UserRedemptionRecord", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.UserRedemptionRecord.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllUserRedemptionRecordRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAllUserRedemptionRecordRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllUserRedemptionRecordRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllUserRedemptionRecordResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAllUserRedemptionRecordResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllUserRedemptionRecordResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UserRedemptionRecord", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UserRedemptionRecord = append(m.UserRedemptionRecord, UserRedemptionRecord{}) + if err := m.UserRedemptionRecord[len(m.UserRedemptionRecord)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllUserRedemptionRecordForUserRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAllUserRedemptionRecordForUserRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllUserRedemptionRecordForUserRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Day", wireType) + } + m.Day = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Day |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Limit", wireType) + } + m.Limit = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Limit |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllUserRedemptionRecordForUserResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAllUserRedemptionRecordForUserResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllUserRedemptionRecordForUserResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UserRedemptionRecord", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UserRedemptionRecord = append(m.UserRedemptionRecord, UserRedemptionRecord{}) + if err := m.UserRedemptionRecord[len(m.UserRedemptionRecord)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryGetEpochUnbondingRecordRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryGetEpochUnbondingRecordRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryGetEpochUnbondingRecordRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EpochNumber", wireType) + } + m.EpochNumber = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EpochNumber |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryGetEpochUnbondingRecordResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryGetEpochUnbondingRecordResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryGetEpochUnbondingRecordResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EpochUnbondingRecord", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.EpochUnbondingRecord.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllEpochUnbondingRecordRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAllEpochUnbondingRecordRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllEpochUnbondingRecordRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllEpochUnbondingRecordResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAllEpochUnbondingRecordResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllEpochUnbondingRecordResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EpochUnbondingRecord", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.EpochUnbondingRecord = append(m.EpochUnbondingRecord, EpochUnbondingRecord{}) + if err := m.EpochUnbondingRecord[len(m.EpochUnbondingRecord)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryLSMDepositRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryLSMDepositRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryLSMDepositRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryLSMDepositResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryLSMDepositResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryLSMDepositResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Deposit", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Deposit.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryLSMDepositsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryLSMDepositsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryLSMDepositsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ValidatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Status = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryLSMDepositsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryLSMDepositsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryLSMDepositsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Deposits", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Deposits = append(m.Deposits, LSMTokenDeposit{}) + if err := m.Deposits[len(m.Deposits)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipQuery(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthQuery + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupQuery + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthQuery + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/records/types/query.pb.gw.go b/x/records/types/query.pb.gw.go new file mode 100644 index 00000000000..11571cb441b --- /dev/null +++ b/x/records/types/query.pb.gw.go @@ -0,0 +1,1197 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: stride/records/query.proto + +/* +Package types is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package types + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage +var _ = metadata.Join + +func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := server.Params(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_UserRedemptionRecord_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetUserRedemptionRecordRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.UserRedemptionRecord(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_UserRedemptionRecord_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetUserRedemptionRecordRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.UserRedemptionRecord(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_UserRedemptionRecordAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Query_UserRedemptionRecordAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllUserRedemptionRecordRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_UserRedemptionRecordAll_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UserRedemptionRecordAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_UserRedemptionRecordAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllUserRedemptionRecordRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_UserRedemptionRecordAll_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.UserRedemptionRecordAll(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_UserRedemptionRecordForUser_0 = &utilities.DoubleArray{Encoding: map[string]int{"chain_id": 0, "day": 1, "address": 2, "limit": 3}, Base: []int{1, 1, 2, 3, 4, 0, 0, 0, 0}, Check: []int{0, 1, 1, 1, 1, 2, 3, 4, 5}} +) + +func request_Query_UserRedemptionRecordForUser_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllUserRedemptionRecordForUserRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["chain_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "chain_id") + } + + protoReq.ChainId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "chain_id", err) + } + + val, ok = pathParams["day"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "day") + } + + protoReq.Day, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "day", err) + } + + val, ok = pathParams["address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") + } + + protoReq.Address, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) + } + + val, ok = pathParams["limit"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "limit") + } + + protoReq.Limit, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "limit", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_UserRedemptionRecordForUser_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.UserRedemptionRecordForUser(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_UserRedemptionRecordForUser_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllUserRedemptionRecordForUserRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["chain_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "chain_id") + } + + protoReq.ChainId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "chain_id", err) + } + + val, ok = pathParams["day"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "day") + } + + protoReq.Day, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "day", err) + } + + val, ok = pathParams["address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") + } + + protoReq.Address, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) + } + + val, ok = pathParams["limit"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "limit") + } + + protoReq.Limit, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "limit", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_UserRedemptionRecordForUser_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.UserRedemptionRecordForUser(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_EpochUnbondingRecord_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetEpochUnbondingRecordRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["epoch_number"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "epoch_number") + } + + protoReq.EpochNumber, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "epoch_number", err) + } + + msg, err := client.EpochUnbondingRecord(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_EpochUnbondingRecord_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetEpochUnbondingRecordRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["epoch_number"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "epoch_number") + } + + protoReq.EpochNumber, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "epoch_number", err) + } + + msg, err := server.EpochUnbondingRecord(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_EpochUnbondingRecordAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Query_EpochUnbondingRecordAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllEpochUnbondingRecordRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_EpochUnbondingRecordAll_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.EpochUnbondingRecordAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_EpochUnbondingRecordAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllEpochUnbondingRecordRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_EpochUnbondingRecordAll_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.EpochUnbondingRecordAll(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_DepositRecord_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetDepositRecordRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := client.DepositRecord(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_DepositRecord_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetDepositRecordRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + + protoReq.Id, err = runtime.Uint64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + + msg, err := server.DepositRecord(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_DepositRecordAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Query_DepositRecordAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllDepositRecordRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_DepositRecordAll_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.DepositRecordAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_DepositRecordAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllDepositRecordRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_DepositRecordAll_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.DepositRecordAll(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_DepositRecordByHost_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryDepositRecordByHostRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["host_zone_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "host_zone_id") + } + + protoReq.HostZoneId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "host_zone_id", err) + } + + msg, err := client.DepositRecordByHost(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_DepositRecordByHost_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryDepositRecordByHostRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["host_zone_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "host_zone_id") + } + + protoReq.HostZoneId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "host_zone_id", err) + } + + msg, err := server.DepositRecordByHost(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_LSMDeposit_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryLSMDepositRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["chain_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "chain_id") + } + + protoReq.ChainId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "chain_id", err) + } + + val, ok = pathParams["denom"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "denom") + } + + protoReq.Denom, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "denom", err) + } + + msg, err := client.LSMDeposit(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_LSMDeposit_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryLSMDepositRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["chain_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "chain_id") + } + + protoReq.ChainId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "chain_id", err) + } + + val, ok = pathParams["denom"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "denom") + } + + protoReq.Denom, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "denom", err) + } + + msg, err := server.LSMDeposit(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_LSMDeposits_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Query_LSMDeposits_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryLSMDepositsRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_LSMDeposits_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.LSMDeposits(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_LSMDeposits_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryLSMDepositsRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_LSMDeposits_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.LSMDeposits(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". +// UnaryRPC :call QueryServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_UserRedemptionRecord_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_UserRedemptionRecord_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_UserRedemptionRecord_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_UserRedemptionRecordAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_UserRedemptionRecordAll_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_UserRedemptionRecordAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_UserRedemptionRecordForUser_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_UserRedemptionRecordForUser_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_UserRedemptionRecordForUser_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_EpochUnbondingRecord_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_EpochUnbondingRecord_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_EpochUnbondingRecord_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_EpochUnbondingRecordAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_EpochUnbondingRecordAll_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_EpochUnbondingRecordAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_DepositRecord_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_DepositRecord_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_DepositRecord_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_DepositRecordAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_DepositRecordAll_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_DepositRecordAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_DepositRecordByHost_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_DepositRecordByHost_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_DepositRecordByHost_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_LSMDeposit_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_LSMDeposit_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_LSMDeposit_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_LSMDeposits_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_LSMDeposits_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_LSMDeposits_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterQueryHandler(ctx, mux, conn) +} + +// RegisterQueryHandler registers the http handlers for service Query to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn)) +} + +// RegisterQueryHandlerClient registers the http handlers for service Query +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "QueryClient" to call the correct interceptors. +func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_UserRedemptionRecord_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_UserRedemptionRecord_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_UserRedemptionRecord_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_UserRedemptionRecordAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_UserRedemptionRecordAll_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_UserRedemptionRecordAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_UserRedemptionRecordForUser_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_UserRedemptionRecordForUser_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_UserRedemptionRecordForUser_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_EpochUnbondingRecord_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_EpochUnbondingRecord_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_EpochUnbondingRecord_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_EpochUnbondingRecordAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_EpochUnbondingRecordAll_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_EpochUnbondingRecordAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_DepositRecord_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_DepositRecord_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_DepositRecord_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_DepositRecordAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_DepositRecordAll_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_DepositRecordAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_DepositRecordByHost_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_DepositRecordByHost_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_DepositRecordByHost_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_LSMDeposit_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_LSMDeposit_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_LSMDeposit_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_LSMDeposits_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_LSMDeposits_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_LSMDeposits_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"StrideLabs", "stride", "records", "params"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_UserRedemptionRecord_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"Stride-Labs", "stride", "records", "user_redemption_record", "id"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_UserRedemptionRecordAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"Stride-Labs", "stride", "records", "user_redemption_record"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_UserRedemptionRecordForUser_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"Stride-Labs", "stride", "records", "user_redemption_record_for_user", "chain_id", "day", "address", "limit"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_EpochUnbondingRecord_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"Stride-Labs", "stride", "records", "epoch_unbonding_record", "epoch_number"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_EpochUnbondingRecordAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"Stride-Labs", "stride", "records", "epoch_unbonding_record"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_DepositRecord_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"Stride-Labs", "stride", "records", "deposit_record", "id"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_DepositRecordAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"Stride-Labs", "stride", "records", "deposit_record"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_DepositRecordByHost_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"Stride-Labs", "stride", "records", "deposit_record_by_host_zone", "host_zone_id"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_LSMDeposit_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"Stride-Labs", "stride", "stakeibc", "lsm_deposit", "chain_id", "denom"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_LSMDeposits_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"Stride-Labs", "stride", "stakeibc", "lsm_deposits"}, "", runtime.AssumeColonVerbOpt(false))) +) + +var ( + forward_Query_Params_0 = runtime.ForwardResponseMessage + + forward_Query_UserRedemptionRecord_0 = runtime.ForwardResponseMessage + + forward_Query_UserRedemptionRecordAll_0 = runtime.ForwardResponseMessage + + forward_Query_UserRedemptionRecordForUser_0 = runtime.ForwardResponseMessage + + forward_Query_EpochUnbondingRecord_0 = runtime.ForwardResponseMessage + + forward_Query_EpochUnbondingRecordAll_0 = runtime.ForwardResponseMessage + + forward_Query_DepositRecord_0 = runtime.ForwardResponseMessage + + forward_Query_DepositRecordAll_0 = runtime.ForwardResponseMessage + + forward_Query_DepositRecordByHost_0 = runtime.ForwardResponseMessage + + forward_Query_LSMDeposit_0 = runtime.ForwardResponseMessage + + forward_Query_LSMDeposits_0 = runtime.ForwardResponseMessage +) diff --git a/x/records/types/records.go b/x/records/types/records.go new file mode 100644 index 00000000000..cdadd765d81 --- /dev/null +++ b/x/records/types/records.go @@ -0,0 +1,24 @@ +package types + +import sdkmath "cosmossdk.io/math" + +// Helper function to evaluate if a host zone unbonding record should +// have it's unbonding initiated +// This is indicated by a record in status UNBONDING_QUEUE with a non-zero +// st token amount +func (r HostZoneUnbonding) ShouldInitiateUnbonding() bool { + notYetUnbonding := r.Status == HostZoneUnbonding_UNBONDING_QUEUE + hasAtLeastOneRedemption := r.StTokenAmount.GT(sdkmath.ZeroInt()) + return notYetUnbonding && hasAtLeastOneRedemption +} + +// Helper function to evaluate if a host zone unbonding record should +// have it's unbonding retried +// This is indicated by a record in status UNBONDING_RETRY_QUEUE and +// 0 undelegations in progress +func (r HostZoneUnbonding) ShouldRetryUnbonding() bool { + hasAtLeastOneRedemption := r.StTokenAmount.GT(sdkmath.ZeroInt()) + shouldRetryUnbonding := r.Status == HostZoneUnbonding_UNBONDING_RETRY_QUEUE + hasNoPendingICAs := r.UndelegationTxsInProgress == 0 + return hasAtLeastOneRedemption && shouldRetryUnbonding && hasNoPendingICAs +} diff --git a/x/records/types/records.pb.go b/x/records/types/records.pb.go new file mode 100644 index 00000000000..2a8fde6c32c --- /dev/null +++ b/x/records/types/records.pb.go @@ -0,0 +1,2682 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/records/records.proto + +package types + +import ( + cosmossdk_io_math "cosmossdk.io/math" + fmt "fmt" + types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type DepositRecord_Status int32 + +const ( + // in transfer queue to be sent to the delegation ICA + DepositRecord_TRANSFER_QUEUE DepositRecord_Status = 0 + // transfer in progress (IBC packet sent, ack not received) + DepositRecord_TRANSFER_IN_PROGRESS DepositRecord_Status = 2 + // in staking queue on delegation ICA + DepositRecord_DELEGATION_QUEUE DepositRecord_Status = 1 + // staking in progress (ICA packet sent, ack not received) + DepositRecord_DELEGATION_IN_PROGRESS DepositRecord_Status = 3 +) + +var DepositRecord_Status_name = map[int32]string{ + 0: "TRANSFER_QUEUE", + 2: "TRANSFER_IN_PROGRESS", + 1: "DELEGATION_QUEUE", + 3: "DELEGATION_IN_PROGRESS", +} + +var DepositRecord_Status_value = map[string]int32{ + "TRANSFER_QUEUE": 0, + "TRANSFER_IN_PROGRESS": 2, + "DELEGATION_QUEUE": 1, + "DELEGATION_IN_PROGRESS": 3, +} + +func (x DepositRecord_Status) String() string { + return proto.EnumName(DepositRecord_Status_name, int32(x)) +} + +func (DepositRecord_Status) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_295ee594cc85d8ca, []int{1, 0} +} + +type DepositRecord_Source int32 + +const ( + DepositRecord_STRIDE DepositRecord_Source = 0 + DepositRecord_WITHDRAWAL_ICA DepositRecord_Source = 1 +) + +var DepositRecord_Source_name = map[int32]string{ + 0: "STRIDE", + 1: "WITHDRAWAL_ICA", +} + +var DepositRecord_Source_value = map[string]int32{ + "STRIDE": 0, + "WITHDRAWAL_ICA": 1, +} + +func (x DepositRecord_Source) String() string { + return proto.EnumName(DepositRecord_Source_name, int32(x)) +} + +func (DepositRecord_Source) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_295ee594cc85d8ca, []int{1, 1} +} + +type HostZoneUnbonding_Status int32 + +const ( + // tokens bonded on delegate account + HostZoneUnbonding_UNBONDING_QUEUE HostZoneUnbonding_Status = 0 + // unbonding ICA has been submitted + HostZoneUnbonding_UNBONDING_IN_PROGRESS HostZoneUnbonding_Status = 3 + // unbonding ICA failed for at least one batch and need to be retried + HostZoneUnbonding_UNBONDING_RETRY_QUEUE HostZoneUnbonding_Status = 5 + // unbonding completed on delegate account + HostZoneUnbonding_EXIT_TRANSFER_QUEUE HostZoneUnbonding_Status = 1 + // redemption sweep has been submitted + HostZoneUnbonding_EXIT_TRANSFER_IN_PROGRESS HostZoneUnbonding_Status = 4 + // transfer success + HostZoneUnbonding_CLAIMABLE HostZoneUnbonding_Status = 2 +) + +var HostZoneUnbonding_Status_name = map[int32]string{ + 0: "UNBONDING_QUEUE", + 3: "UNBONDING_IN_PROGRESS", + 5: "UNBONDING_RETRY_QUEUE", + 1: "EXIT_TRANSFER_QUEUE", + 4: "EXIT_TRANSFER_IN_PROGRESS", + 2: "CLAIMABLE", +} + +var HostZoneUnbonding_Status_value = map[string]int32{ + "UNBONDING_QUEUE": 0, + "UNBONDING_IN_PROGRESS": 3, + "UNBONDING_RETRY_QUEUE": 5, + "EXIT_TRANSFER_QUEUE": 1, + "EXIT_TRANSFER_IN_PROGRESS": 4, + "CLAIMABLE": 2, +} + +func (x HostZoneUnbonding_Status) String() string { + return proto.EnumName(HostZoneUnbonding_Status_name, int32(x)) +} + +func (HostZoneUnbonding_Status) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_295ee594cc85d8ca, []int{2, 0} +} + +type LSMTokenDeposit_Status int32 + +const ( + LSMTokenDeposit_DEPOSIT_PENDING LSMTokenDeposit_Status = 0 + LSMTokenDeposit_TRANSFER_QUEUE LSMTokenDeposit_Status = 1 + LSMTokenDeposit_TRANSFER_IN_PROGRESS LSMTokenDeposit_Status = 2 + LSMTokenDeposit_TRANSFER_FAILED LSMTokenDeposit_Status = 3 + LSMTokenDeposit_DETOKENIZATION_QUEUE LSMTokenDeposit_Status = 4 + LSMTokenDeposit_DETOKENIZATION_IN_PROGRESS LSMTokenDeposit_Status = 5 + LSMTokenDeposit_DETOKENIZATION_FAILED LSMTokenDeposit_Status = 6 +) + +var LSMTokenDeposit_Status_name = map[int32]string{ + 0: "DEPOSIT_PENDING", + 1: "TRANSFER_QUEUE", + 2: "TRANSFER_IN_PROGRESS", + 3: "TRANSFER_FAILED", + 4: "DETOKENIZATION_QUEUE", + 5: "DETOKENIZATION_IN_PROGRESS", + 6: "DETOKENIZATION_FAILED", +} + +var LSMTokenDeposit_Status_value = map[string]int32{ + "DEPOSIT_PENDING": 0, + "TRANSFER_QUEUE": 1, + "TRANSFER_IN_PROGRESS": 2, + "TRANSFER_FAILED": 3, + "DETOKENIZATION_QUEUE": 4, + "DETOKENIZATION_IN_PROGRESS": 5, + "DETOKENIZATION_FAILED": 6, +} + +func (x LSMTokenDeposit_Status) String() string { + return proto.EnumName(LSMTokenDeposit_Status_name, int32(x)) +} + +func (LSMTokenDeposit_Status) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_295ee594cc85d8ca, []int{4, 0} +} + +type UserRedemptionRecord struct { + Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` + Receiver string `protobuf:"bytes,3,opt,name=receiver,proto3" json:"receiver,omitempty"` + NativeTokenAmount cosmossdk_io_math.Int `protobuf:"bytes,4,opt,name=native_token_amount,json=nativeTokenAmount,proto3,customtype=cosmossdk.io/math.Int" json:"native_token_amount"` + Denom string `protobuf:"bytes,5,opt,name=denom,proto3" json:"denom,omitempty"` + HostZoneId string `protobuf:"bytes,6,opt,name=host_zone_id,json=hostZoneId,proto3" json:"host_zone_id,omitempty"` + EpochNumber uint64 `protobuf:"varint,7,opt,name=epoch_number,json=epochNumber,proto3" json:"epoch_number,omitempty"` + ClaimIsPending bool `protobuf:"varint,8,opt,name=claim_is_pending,json=claimIsPending,proto3" json:"claim_is_pending,omitempty"` + StTokenAmount cosmossdk_io_math.Int `protobuf:"bytes,9,opt,name=st_token_amount,json=stTokenAmount,proto3,customtype=cosmossdk.io/math.Int" json:"st_token_amount"` +} + +func (m *UserRedemptionRecord) Reset() { *m = UserRedemptionRecord{} } +func (m *UserRedemptionRecord) String() string { return proto.CompactTextString(m) } +func (*UserRedemptionRecord) ProtoMessage() {} +func (*UserRedemptionRecord) Descriptor() ([]byte, []int) { + return fileDescriptor_295ee594cc85d8ca, []int{0} +} +func (m *UserRedemptionRecord) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *UserRedemptionRecord) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_UserRedemptionRecord.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *UserRedemptionRecord) XXX_Merge(src proto.Message) { + xxx_messageInfo_UserRedemptionRecord.Merge(m, src) +} +func (m *UserRedemptionRecord) XXX_Size() int { + return m.Size() +} +func (m *UserRedemptionRecord) XXX_DiscardUnknown() { + xxx_messageInfo_UserRedemptionRecord.DiscardUnknown(m) +} + +var xxx_messageInfo_UserRedemptionRecord proto.InternalMessageInfo + +func (m *UserRedemptionRecord) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *UserRedemptionRecord) GetReceiver() string { + if m != nil { + return m.Receiver + } + return "" +} + +func (m *UserRedemptionRecord) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +func (m *UserRedemptionRecord) GetHostZoneId() string { + if m != nil { + return m.HostZoneId + } + return "" +} + +func (m *UserRedemptionRecord) GetEpochNumber() uint64 { + if m != nil { + return m.EpochNumber + } + return 0 +} + +func (m *UserRedemptionRecord) GetClaimIsPending() bool { + if m != nil { + return m.ClaimIsPending + } + return false +} + +type DepositRecord struct { + Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Amount cosmossdk_io_math.Int `protobuf:"bytes,2,opt,name=amount,proto3,customtype=cosmossdk.io/math.Int" json:"amount"` + Denom string `protobuf:"bytes,3,opt,name=denom,proto3" json:"denom,omitempty"` + HostZoneId string `protobuf:"bytes,4,opt,name=host_zone_id,json=hostZoneId,proto3" json:"host_zone_id,omitempty"` + Status DepositRecord_Status `protobuf:"varint,6,opt,name=status,proto3,enum=stride.records.DepositRecord_Status" json:"status,omitempty"` + DepositEpochNumber uint64 `protobuf:"varint,7,opt,name=deposit_epoch_number,json=depositEpochNumber,proto3" json:"deposit_epoch_number,omitempty"` + Source DepositRecord_Source `protobuf:"varint,8,opt,name=source,proto3,enum=stride.records.DepositRecord_Source" json:"source,omitempty"` + DelegationTxsInProgress uint64 `protobuf:"varint,9,opt,name=delegation_txs_in_progress,json=delegationTxsInProgress,proto3" json:"delegation_txs_in_progress,omitempty"` +} + +func (m *DepositRecord) Reset() { *m = DepositRecord{} } +func (m *DepositRecord) String() string { return proto.CompactTextString(m) } +func (*DepositRecord) ProtoMessage() {} +func (*DepositRecord) Descriptor() ([]byte, []int) { + return fileDescriptor_295ee594cc85d8ca, []int{1} +} +func (m *DepositRecord) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DepositRecord) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DepositRecord.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *DepositRecord) XXX_Merge(src proto.Message) { + xxx_messageInfo_DepositRecord.Merge(m, src) +} +func (m *DepositRecord) XXX_Size() int { + return m.Size() +} +func (m *DepositRecord) XXX_DiscardUnknown() { + xxx_messageInfo_DepositRecord.DiscardUnknown(m) +} + +var xxx_messageInfo_DepositRecord proto.InternalMessageInfo + +func (m *DepositRecord) GetId() uint64 { + if m != nil { + return m.Id + } + return 0 +} + +func (m *DepositRecord) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +func (m *DepositRecord) GetHostZoneId() string { + if m != nil { + return m.HostZoneId + } + return "" +} + +func (m *DepositRecord) GetStatus() DepositRecord_Status { + if m != nil { + return m.Status + } + return DepositRecord_TRANSFER_QUEUE +} + +func (m *DepositRecord) GetDepositEpochNumber() uint64 { + if m != nil { + return m.DepositEpochNumber + } + return 0 +} + +func (m *DepositRecord) GetSource() DepositRecord_Source { + if m != nil { + return m.Source + } + return DepositRecord_STRIDE +} + +func (m *DepositRecord) GetDelegationTxsInProgress() uint64 { + if m != nil { + return m.DelegationTxsInProgress + } + return 0 +} + +type HostZoneUnbonding struct { + StTokenAmount cosmossdk_io_math.Int `protobuf:"bytes,1,opt,name=st_token_amount,json=stTokenAmount,proto3,customtype=cosmossdk.io/math.Int" json:"st_token_amount"` + NativeTokenAmount cosmossdk_io_math.Int `protobuf:"bytes,2,opt,name=native_token_amount,json=nativeTokenAmount,proto3,customtype=cosmossdk.io/math.Int" json:"native_token_amount"` + StTokensToBurn cosmossdk_io_math.Int `protobuf:"bytes,8,opt,name=st_tokens_to_burn,json=stTokensToBurn,proto3,customtype=cosmossdk.io/math.Int" json:"st_tokens_to_burn"` + NativeTokensToUnbond cosmossdk_io_math.Int `protobuf:"bytes,9,opt,name=native_tokens_to_unbond,json=nativeTokensToUnbond,proto3,customtype=cosmossdk.io/math.Int" json:"native_tokens_to_unbond"` + ClaimableNativeTokens cosmossdk_io_math.Int `protobuf:"bytes,10,opt,name=claimable_native_tokens,json=claimableNativeTokens,proto3,customtype=cosmossdk.io/math.Int" json:"claimable_native_tokens"` + UndelegationTxsInProgress uint64 `protobuf:"varint,11,opt,name=undelegation_txs_in_progress,json=undelegationTxsInProgress,proto3" json:"undelegation_txs_in_progress,omitempty"` + Denom string `protobuf:"bytes,3,opt,name=denom,proto3" json:"denom,omitempty"` + HostZoneId string `protobuf:"bytes,4,opt,name=host_zone_id,json=hostZoneId,proto3" json:"host_zone_id,omitempty"` + UnbondingTime uint64 `protobuf:"varint,5,opt,name=unbonding_time,json=unbondingTime,proto3" json:"unbonding_time,omitempty"` + Status HostZoneUnbonding_Status `protobuf:"varint,6,opt,name=status,proto3,enum=stride.records.HostZoneUnbonding_Status" json:"status,omitempty"` + UserRedemptionRecords []string `protobuf:"bytes,7,rep,name=user_redemption_records,json=userRedemptionRecords,proto3" json:"user_redemption_records,omitempty"` +} + +func (m *HostZoneUnbonding) Reset() { *m = HostZoneUnbonding{} } +func (m *HostZoneUnbonding) String() string { return proto.CompactTextString(m) } +func (*HostZoneUnbonding) ProtoMessage() {} +func (*HostZoneUnbonding) Descriptor() ([]byte, []int) { + return fileDescriptor_295ee594cc85d8ca, []int{2} +} +func (m *HostZoneUnbonding) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HostZoneUnbonding) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_HostZoneUnbonding.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *HostZoneUnbonding) XXX_Merge(src proto.Message) { + xxx_messageInfo_HostZoneUnbonding.Merge(m, src) +} +func (m *HostZoneUnbonding) XXX_Size() int { + return m.Size() +} +func (m *HostZoneUnbonding) XXX_DiscardUnknown() { + xxx_messageInfo_HostZoneUnbonding.DiscardUnknown(m) +} + +var xxx_messageInfo_HostZoneUnbonding proto.InternalMessageInfo + +func (m *HostZoneUnbonding) GetUndelegationTxsInProgress() uint64 { + if m != nil { + return m.UndelegationTxsInProgress + } + return 0 +} + +func (m *HostZoneUnbonding) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +func (m *HostZoneUnbonding) GetHostZoneId() string { + if m != nil { + return m.HostZoneId + } + return "" +} + +func (m *HostZoneUnbonding) GetUnbondingTime() uint64 { + if m != nil { + return m.UnbondingTime + } + return 0 +} + +func (m *HostZoneUnbonding) GetStatus() HostZoneUnbonding_Status { + if m != nil { + return m.Status + } + return HostZoneUnbonding_UNBONDING_QUEUE +} + +func (m *HostZoneUnbonding) GetUserRedemptionRecords() []string { + if m != nil { + return m.UserRedemptionRecords + } + return nil +} + +type EpochUnbondingRecord struct { + EpochNumber uint64 `protobuf:"varint,1,opt,name=epoch_number,json=epochNumber,proto3" json:"epoch_number,omitempty"` + HostZoneUnbondings []*HostZoneUnbonding `protobuf:"bytes,3,rep,name=host_zone_unbondings,json=hostZoneUnbondings,proto3" json:"host_zone_unbondings,omitempty"` +} + +func (m *EpochUnbondingRecord) Reset() { *m = EpochUnbondingRecord{} } +func (m *EpochUnbondingRecord) String() string { return proto.CompactTextString(m) } +func (*EpochUnbondingRecord) ProtoMessage() {} +func (*EpochUnbondingRecord) Descriptor() ([]byte, []int) { + return fileDescriptor_295ee594cc85d8ca, []int{3} +} +func (m *EpochUnbondingRecord) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EpochUnbondingRecord) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_EpochUnbondingRecord.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *EpochUnbondingRecord) XXX_Merge(src proto.Message) { + xxx_messageInfo_EpochUnbondingRecord.Merge(m, src) +} +func (m *EpochUnbondingRecord) XXX_Size() int { + return m.Size() +} +func (m *EpochUnbondingRecord) XXX_DiscardUnknown() { + xxx_messageInfo_EpochUnbondingRecord.DiscardUnknown(m) +} + +var xxx_messageInfo_EpochUnbondingRecord proto.InternalMessageInfo + +func (m *EpochUnbondingRecord) GetEpochNumber() uint64 { + if m != nil { + return m.EpochNumber + } + return 0 +} + +func (m *EpochUnbondingRecord) GetHostZoneUnbondings() []*HostZoneUnbonding { + if m != nil { + return m.HostZoneUnbondings + } + return nil +} + +type LSMTokenDeposit struct { + DepositId string `protobuf:"bytes,1,opt,name=deposit_id,json=depositId,proto3" json:"deposit_id,omitempty"` + ChainId string `protobuf:"bytes,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + Denom string `protobuf:"bytes,3,opt,name=denom,proto3" json:"denom,omitempty"` + IbcDenom string `protobuf:"bytes,4,opt,name=ibc_denom,json=ibcDenom,proto3" json:"ibc_denom,omitempty"` + StakerAddress string `protobuf:"bytes,5,opt,name=staker_address,json=stakerAddress,proto3" json:"staker_address,omitempty"` + ValidatorAddress string `protobuf:"bytes,6,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` + Amount cosmossdk_io_math.Int `protobuf:"bytes,7,opt,name=amount,proto3,customtype=cosmossdk.io/math.Int" json:"amount"` + StToken types.Coin `protobuf:"bytes,8,opt,name=st_token,json=stToken,proto3" json:"st_token"` + Status LSMTokenDeposit_Status `protobuf:"varint,9,opt,name=status,proto3,enum=stride.records.LSMTokenDeposit_Status" json:"status,omitempty"` +} + +func (m *LSMTokenDeposit) Reset() { *m = LSMTokenDeposit{} } +func (m *LSMTokenDeposit) String() string { return proto.CompactTextString(m) } +func (*LSMTokenDeposit) ProtoMessage() {} +func (*LSMTokenDeposit) Descriptor() ([]byte, []int) { + return fileDescriptor_295ee594cc85d8ca, []int{4} +} +func (m *LSMTokenDeposit) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LSMTokenDeposit) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_LSMTokenDeposit.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *LSMTokenDeposit) XXX_Merge(src proto.Message) { + xxx_messageInfo_LSMTokenDeposit.Merge(m, src) +} +func (m *LSMTokenDeposit) XXX_Size() int { + return m.Size() +} +func (m *LSMTokenDeposit) XXX_DiscardUnknown() { + xxx_messageInfo_LSMTokenDeposit.DiscardUnknown(m) +} + +var xxx_messageInfo_LSMTokenDeposit proto.InternalMessageInfo + +func (m *LSMTokenDeposit) GetDepositId() string { + if m != nil { + return m.DepositId + } + return "" +} + +func (m *LSMTokenDeposit) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +func (m *LSMTokenDeposit) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +func (m *LSMTokenDeposit) GetIbcDenom() string { + if m != nil { + return m.IbcDenom + } + return "" +} + +func (m *LSMTokenDeposit) GetStakerAddress() string { + if m != nil { + return m.StakerAddress + } + return "" +} + +func (m *LSMTokenDeposit) GetValidatorAddress() string { + if m != nil { + return m.ValidatorAddress + } + return "" +} + +func (m *LSMTokenDeposit) GetStToken() types.Coin { + if m != nil { + return m.StToken + } + return types.Coin{} +} + +func (m *LSMTokenDeposit) GetStatus() LSMTokenDeposit_Status { + if m != nil { + return m.Status + } + return LSMTokenDeposit_DEPOSIT_PENDING +} + +func init() { + proto.RegisterEnum("stride.records.DepositRecord_Status", DepositRecord_Status_name, DepositRecord_Status_value) + proto.RegisterEnum("stride.records.DepositRecord_Source", DepositRecord_Source_name, DepositRecord_Source_value) + proto.RegisterEnum("stride.records.HostZoneUnbonding_Status", HostZoneUnbonding_Status_name, HostZoneUnbonding_Status_value) + proto.RegisterEnum("stride.records.LSMTokenDeposit_Status", LSMTokenDeposit_Status_name, LSMTokenDeposit_Status_value) + proto.RegisterType((*UserRedemptionRecord)(nil), "stride.records.UserRedemptionRecord") + proto.RegisterType((*DepositRecord)(nil), "stride.records.DepositRecord") + proto.RegisterType((*HostZoneUnbonding)(nil), "stride.records.HostZoneUnbonding") + proto.RegisterType((*EpochUnbondingRecord)(nil), "stride.records.EpochUnbondingRecord") + proto.RegisterType((*LSMTokenDeposit)(nil), "stride.records.LSMTokenDeposit") +} + +func init() { proto.RegisterFile("stride/records/records.proto", fileDescriptor_295ee594cc85d8ca) } + +var fileDescriptor_295ee594cc85d8ca = []byte{ + // 1119 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0x5d, 0x6f, 0x1a, 0x47, + 0x17, 0xf6, 0xc2, 0x1a, 0xc3, 0x71, 0x8c, 0xf1, 0x18, 0xbf, 0xc6, 0xbc, 0x09, 0x21, 0xa8, 0xa9, + 0x90, 0xaa, 0x2e, 0x8d, 0xab, 0x56, 0x55, 0x5b, 0xb5, 0x05, 0xb3, 0xb1, 0x37, 0xc1, 0xd8, 0x5d, + 0x16, 0xa5, 0xf5, 0xcd, 0x68, 0x61, 0x47, 0x30, 0xb2, 0xd9, 0x41, 0x3b, 0xb3, 0x96, 0xdb, 0x5f, + 0x51, 0xa9, 0xbd, 0xea, 0xff, 0xe8, 0x65, 0xef, 0x73, 0x99, 0xbb, 0x56, 0xbd, 0x88, 0x2a, 0xfb, + 0x8f, 0x54, 0x3b, 0xbb, 0x2c, 0x1f, 0x8e, 0x63, 0x27, 0x57, 0xb0, 0xcf, 0xf9, 0x98, 0x99, 0x33, + 0xcf, 0x73, 0xce, 0xc0, 0x7d, 0x2e, 0x3c, 0xea, 0x90, 0x9a, 0x47, 0xfa, 0xcc, 0x73, 0xf8, 0xe4, + 0x57, 0x1b, 0x7b, 0x4c, 0x30, 0x94, 0x0d, 0xad, 0x5a, 0x84, 0x16, 0x4b, 0x7d, 0xc6, 0x47, 0x8c, + 0xd7, 0x7a, 0x36, 0x27, 0xb5, 0xf3, 0x27, 0x3d, 0x22, 0xec, 0x27, 0xb5, 0x3e, 0xa3, 0x6e, 0xe8, + 0x5f, 0xcc, 0x0f, 0xd8, 0x80, 0xc9, 0xbf, 0xb5, 0xe0, 0x5f, 0x88, 0x56, 0xae, 0x12, 0x90, 0xef, + 0x72, 0xe2, 0x99, 0xc4, 0x21, 0xa3, 0xb1, 0xa0, 0xcc, 0x35, 0x65, 0x3e, 0x94, 0x85, 0x04, 0x75, + 0x0a, 0x4a, 0x59, 0xa9, 0x66, 0xcc, 0x04, 0x75, 0x50, 0x11, 0xd2, 0x1e, 0xe9, 0x13, 0x7a, 0x4e, + 0xbc, 0x42, 0x52, 0xa2, 0xf1, 0x37, 0x3a, 0x84, 0x4d, 0xd7, 0x16, 0xf4, 0x9c, 0x60, 0xc1, 0x4e, + 0x89, 0x8b, 0xed, 0x11, 0xf3, 0x5d, 0x51, 0x50, 0x03, 0xb7, 0xc6, 0x83, 0x97, 0xaf, 0x1f, 0x2e, + 0xfd, 0xf3, 0xfa, 0xe1, 0x56, 0xb8, 0x3f, 0xee, 0x9c, 0x6a, 0x94, 0xd5, 0x46, 0xb6, 0x18, 0x6a, + 0x86, 0x2b, 0xcc, 0x8d, 0x30, 0xd2, 0x0a, 0x02, 0xeb, 0x32, 0x0e, 0xe5, 0x61, 0xd9, 0x21, 0x2e, + 0x1b, 0x15, 0x96, 0xe5, 0x3a, 0xe1, 0x07, 0x2a, 0xc3, 0xbd, 0x21, 0xe3, 0x02, 0xff, 0xcc, 0x5c, + 0x82, 0xa9, 0x53, 0x48, 0x49, 0x23, 0x04, 0xd8, 0x09, 0x73, 0x89, 0xe1, 0xa0, 0x47, 0x70, 0x8f, + 0x8c, 0x59, 0x7f, 0x88, 0x5d, 0x7f, 0xd4, 0x23, 0x5e, 0x61, 0xa5, 0xac, 0x54, 0x55, 0x73, 0x55, + 0x62, 0x6d, 0x09, 0xa1, 0x2a, 0xe4, 0xfa, 0x67, 0x36, 0x1d, 0x61, 0xca, 0xf1, 0x98, 0xb8, 0x0e, + 0x75, 0x07, 0x85, 0x74, 0x59, 0xa9, 0xa6, 0xcd, 0xac, 0xc4, 0x0d, 0x7e, 0x1c, 0xa2, 0x48, 0x87, + 0x75, 0x2e, 0xe6, 0xcf, 0x93, 0xb9, 0xcb, 0x79, 0xd6, 0xb8, 0x98, 0x39, 0xcb, 0x33, 0x35, 0x9d, + 0xc8, 0x25, 0x2b, 0xbf, 0xaa, 0xb0, 0xd6, 0x24, 0x63, 0xc6, 0xa9, 0xb8, 0x56, 0x5e, 0x55, 0x96, + 0xf7, 0x33, 0x48, 0x45, 0xab, 0x24, 0xee, 0xb2, 0x4a, 0xe4, 0x3c, 0x2d, 0x55, 0xf2, 0x6d, 0xa5, + 0x52, 0xaf, 0x95, 0xea, 0x6b, 0x48, 0x71, 0x61, 0x0b, 0x9f, 0xcb, 0x32, 0x66, 0x77, 0x3f, 0xd0, + 0xe6, 0xd9, 0xa4, 0xcd, 0xed, 0x56, 0xeb, 0x48, 0x5f, 0x33, 0x8a, 0x41, 0x9f, 0x40, 0xde, 0x09, + 0xed, 0xf8, 0x0d, 0x05, 0x47, 0x91, 0x4d, 0x9f, 0xa9, 0x7b, 0xb0, 0x1e, 0xf3, 0xbd, 0x3e, 0x91, + 0xd5, 0xbe, 0x7d, 0x3d, 0xe9, 0x6b, 0x46, 0x31, 0xe8, 0x2b, 0x28, 0x3a, 0xe4, 0x8c, 0x0c, 0xec, + 0x80, 0x9f, 0x58, 0x5c, 0x70, 0x4c, 0x5d, 0x3c, 0xf6, 0xd8, 0xc0, 0x23, 0x9c, 0xcb, 0x6b, 0x51, + 0xcd, 0xed, 0xa9, 0x87, 0x75, 0xc1, 0x0d, 0xf7, 0x38, 0x32, 0x57, 0x86, 0x90, 0x0a, 0xb7, 0x8f, + 0x10, 0x64, 0x2d, 0xb3, 0xde, 0xee, 0x3c, 0xd5, 0x4d, 0xfc, 0x7d, 0x57, 0xef, 0xea, 0xb9, 0x25, + 0x54, 0x80, 0x7c, 0x8c, 0x19, 0x6d, 0x7c, 0x6c, 0x1e, 0xed, 0x9b, 0x7a, 0xa7, 0x93, 0x4b, 0xa0, + 0x3c, 0xe4, 0x9a, 0x7a, 0x4b, 0xdf, 0xaf, 0x5b, 0xc6, 0x51, 0x3b, 0xf2, 0x57, 0x50, 0x11, 0xfe, + 0x37, 0x83, 0xce, 0x46, 0x24, 0x2b, 0x55, 0x48, 0x85, 0x1b, 0x47, 0x00, 0xa9, 0x8e, 0x65, 0x1a, + 0xcd, 0x60, 0x05, 0x04, 0xd9, 0x17, 0x86, 0x75, 0xd0, 0x34, 0xeb, 0x2f, 0xea, 0x2d, 0x6c, 0xec, + 0xd5, 0x73, 0xca, 0x33, 0x35, 0xbd, 0x9c, 0x4b, 0x55, 0xfe, 0x4a, 0xc1, 0xc6, 0x41, 0x74, 0x27, + 0x5d, 0xb7, 0xc7, 0x6e, 0x24, 0x9e, 0xf2, 0xee, 0xc4, 0xbb, 0x49, 0x93, 0x89, 0xf7, 0xd4, 0xe4, + 0x01, 0x6c, 0x4c, 0x76, 0xc5, 0xb1, 0x60, 0xb8, 0xe7, 0x7b, 0xae, 0xbc, 0xcb, 0x5b, 0x93, 0x65, + 0xa3, 0x7d, 0x71, 0x8b, 0x35, 0x7c, 0xcf, 0x45, 0x16, 0x6c, 0xcf, 0x6e, 0x4c, 0x66, 0xf3, 0xe5, + 0xe9, 0xef, 0x26, 0xb0, 0xfc, 0xcc, 0xe6, 0xb8, 0xc5, 0xc2, 0xc2, 0xa1, 0x2e, 0x6c, 0x4b, 0x01, + 0xdb, 0xbd, 0x33, 0x82, 0xe7, 0xf2, 0x17, 0xe0, 0x2e, 0x59, 0xb7, 0xe2, 0xe8, 0xf6, 0x4c, 0x7a, + 0xf4, 0x2d, 0xdc, 0xf7, 0xdd, 0xb7, 0x70, 0x6f, 0x55, 0x72, 0x6f, 0x67, 0xd6, 0x67, 0x8e, 0x7d, + 0xef, 0x2d, 0xd0, 0xc7, 0x90, 0xf5, 0x27, 0x94, 0xc0, 0x82, 0x8e, 0x88, 0x6c, 0x86, 0xaa, 0xb9, + 0x16, 0xa3, 0x16, 0x1d, 0x11, 0xf4, 0xdd, 0x82, 0x8e, 0xab, 0x8b, 0xba, 0xba, 0xc6, 0xaf, 0x45, + 0x2d, 0x7f, 0x0e, 0xdb, 0x3e, 0x27, 0x1e, 0xf6, 0xe2, 0x01, 0x80, 0xa3, 0xd8, 0xc2, 0x4a, 0x39, + 0x59, 0xcd, 0x98, 0x5b, 0xfe, 0x1b, 0xc6, 0x03, 0xaf, 0xfc, 0xae, 0xc4, 0xba, 0xda, 0x84, 0xf5, + 0x6e, 0xbb, 0x71, 0xd4, 0x6e, 0x1a, 0xed, 0xfd, 0x58, 0x58, 0x3b, 0xb0, 0x35, 0x05, 0xe7, 0x74, + 0x32, 0x6f, 0x32, 0x75, 0xcb, 0xfc, 0x31, 0x8a, 0x5a, 0x46, 0xdb, 0xb0, 0xa9, 0xff, 0x60, 0x58, + 0x78, 0x41, 0xa7, 0x0a, 0x7a, 0x00, 0x3b, 0xf3, 0x86, 0xd9, 0x94, 0x2a, 0x5a, 0x83, 0xcc, 0x5e, + 0xab, 0x6e, 0x1c, 0xd6, 0x1b, 0x2d, 0x3d, 0x97, 0xa8, 0xfc, 0xa6, 0x40, 0x5e, 0xb6, 0x9f, 0xf8, + 0xd8, 0x51, 0xdb, 0x5d, 0x1c, 0x11, 0xca, 0xf5, 0x11, 0xd1, 0x81, 0xfc, 0xf4, 0x6e, 0xe2, 0x6a, + 0xf3, 0x42, 0xb2, 0x9c, 0xac, 0xae, 0xee, 0x3e, 0xba, 0xb5, 0xc0, 0x26, 0x1a, 0x2e, 0x42, 0x3c, + 0x1a, 0x03, 0x7f, 0xaa, 0xb0, 0xde, 0xea, 0x1c, 0x4a, 0x6e, 0x45, 0x0d, 0x0f, 0x3d, 0x00, 0x98, + 0xf4, 0xd2, 0x78, 0xde, 0x66, 0x22, 0xc4, 0x70, 0xd0, 0x0e, 0xa4, 0xfb, 0x43, 0x9b, 0xba, 0x81, + 0x51, 0x6a, 0xd7, 0x5c, 0x91, 0xdf, 0x86, 0x73, 0x03, 0xb5, 0xfe, 0x0f, 0x19, 0xda, 0xeb, 0xe3, + 0xd0, 0x12, 0xf2, 0x2a, 0x4d, 0x7b, 0xfd, 0xa6, 0x34, 0x3e, 0x86, 0x2c, 0x17, 0xf6, 0x29, 0xf1, + 0xb0, 0xed, 0x38, 0x92, 0xc0, 0xe1, 0x88, 0x5d, 0x0b, 0xd1, 0x7a, 0x08, 0xa2, 0x8f, 0x60, 0xe3, + 0xdc, 0x3e, 0xa3, 0x8e, 0x2d, 0xd8, 0xd4, 0x33, 0x9c, 0xb7, 0xb9, 0xd8, 0x30, 0x71, 0x9e, 0x4e, + 0xae, 0x95, 0x77, 0x99, 0x5c, 0x5f, 0x42, 0x7a, 0xd2, 0x50, 0x64, 0x1f, 0x59, 0xdd, 0xdd, 0xd1, + 0xc2, 0x08, 0x2d, 0x78, 0xc1, 0x68, 0xd1, 0x0b, 0x46, 0xdb, 0x63, 0xd4, 0x6d, 0xa8, 0x41, 0x4e, + 0x73, 0x25, 0xea, 0x24, 0xe8, 0x9b, 0x98, 0xf5, 0x19, 0xc9, 0xfa, 0x0f, 0x17, 0x2f, 0x65, 0xa1, + 0xc8, 0x0b, 0x9c, 0xaf, 0xfc, 0x31, 0xc7, 0xdd, 0xa6, 0x7e, 0x7c, 0xd4, 0x31, 0x2c, 0x7c, 0xac, + 0x4b, 0x46, 0x86, 0x2d, 0xfb, 0x1a, 0x01, 0x6f, 0x1e, 0x14, 0x9b, 0xb0, 0x1e, 0x5b, 0x9e, 0xd6, + 0x8d, 0x96, 0xde, 0xcc, 0x25, 0x03, 0xf7, 0xa6, 0x6e, 0x1d, 0x3d, 0xd7, 0xdb, 0xc6, 0xc9, 0xec, + 0x04, 0x51, 0x51, 0x09, 0x8a, 0x0b, 0x96, 0xd9, 0x74, 0xcb, 0x81, 0x3a, 0x16, 0xec, 0x51, 0xd2, + 0x54, 0xe3, 0xf9, 0xcb, 0xcb, 0x92, 0xf2, 0xea, 0xb2, 0xa4, 0xfc, 0x7b, 0x59, 0x52, 0x7e, 0xb9, + 0x2a, 0x2d, 0xbd, 0xba, 0x2a, 0x2d, 0xfd, 0x7d, 0x55, 0x5a, 0x3a, 0x79, 0x32, 0xa0, 0x62, 0xe8, + 0xf7, 0xb4, 0x3e, 0x1b, 0xd5, 0x3a, 0xb2, 0x16, 0x1f, 0xb7, 0xec, 0x1e, 0xaf, 0x45, 0x2f, 0xc8, + 0xf3, 0xdd, 0x2f, 0x6a, 0x17, 0xf1, 0x3b, 0x52, 0xfc, 0x34, 0x26, 0xbc, 0x97, 0x92, 0x0f, 0xc0, + 0x4f, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x70, 0xb9, 0xe9, 0x4d, 0x66, 0x0a, 0x00, 0x00, +} + +func (m *UserRedemptionRecord) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *UserRedemptionRecord) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *UserRedemptionRecord) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.StTokenAmount.Size() + i -= size + if _, err := m.StTokenAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintRecords(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + if m.ClaimIsPending { + i-- + if m.ClaimIsPending { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x40 + } + if m.EpochNumber != 0 { + i = encodeVarintRecords(dAtA, i, uint64(m.EpochNumber)) + i-- + dAtA[i] = 0x38 + } + if len(m.HostZoneId) > 0 { + i -= len(m.HostZoneId) + copy(dAtA[i:], m.HostZoneId) + i = encodeVarintRecords(dAtA, i, uint64(len(m.HostZoneId))) + i-- + dAtA[i] = 0x32 + } + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintRecords(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0x2a + } + { + size := m.NativeTokenAmount.Size() + i -= size + if _, err := m.NativeTokenAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintRecords(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + if len(m.Receiver) > 0 { + i -= len(m.Receiver) + copy(dAtA[i:], m.Receiver) + i = encodeVarintRecords(dAtA, i, uint64(len(m.Receiver))) + i-- + dAtA[i] = 0x1a + } + if len(m.Id) > 0 { + i -= len(m.Id) + copy(dAtA[i:], m.Id) + i = encodeVarintRecords(dAtA, i, uint64(len(m.Id))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DepositRecord) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DepositRecord) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DepositRecord) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.DelegationTxsInProgress != 0 { + i = encodeVarintRecords(dAtA, i, uint64(m.DelegationTxsInProgress)) + i-- + dAtA[i] = 0x48 + } + if m.Source != 0 { + i = encodeVarintRecords(dAtA, i, uint64(m.Source)) + i-- + dAtA[i] = 0x40 + } + if m.DepositEpochNumber != 0 { + i = encodeVarintRecords(dAtA, i, uint64(m.DepositEpochNumber)) + i-- + dAtA[i] = 0x38 + } + if m.Status != 0 { + i = encodeVarintRecords(dAtA, i, uint64(m.Status)) + i-- + dAtA[i] = 0x30 + } + if len(m.HostZoneId) > 0 { + i -= len(m.HostZoneId) + copy(dAtA[i:], m.HostZoneId) + i = encodeVarintRecords(dAtA, i, uint64(len(m.HostZoneId))) + i-- + dAtA[i] = 0x22 + } + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintRecords(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0x1a + } + { + size := m.Amount.Size() + i -= size + if _, err := m.Amount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintRecords(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if m.Id != 0 { + i = encodeVarintRecords(dAtA, i, uint64(m.Id)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *HostZoneUnbonding) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HostZoneUnbonding) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HostZoneUnbonding) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.UndelegationTxsInProgress != 0 { + i = encodeVarintRecords(dAtA, i, uint64(m.UndelegationTxsInProgress)) + i-- + dAtA[i] = 0x58 + } + { + size := m.ClaimableNativeTokens.Size() + i -= size + if _, err := m.ClaimableNativeTokens.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintRecords(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + { + size := m.NativeTokensToUnbond.Size() + i -= size + if _, err := m.NativeTokensToUnbond.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintRecords(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + { + size := m.StTokensToBurn.Size() + i -= size + if _, err := m.StTokensToBurn.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintRecords(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + if len(m.UserRedemptionRecords) > 0 { + for iNdEx := len(m.UserRedemptionRecords) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.UserRedemptionRecords[iNdEx]) + copy(dAtA[i:], m.UserRedemptionRecords[iNdEx]) + i = encodeVarintRecords(dAtA, i, uint64(len(m.UserRedemptionRecords[iNdEx]))) + i-- + dAtA[i] = 0x3a + } + } + if m.Status != 0 { + i = encodeVarintRecords(dAtA, i, uint64(m.Status)) + i-- + dAtA[i] = 0x30 + } + if m.UnbondingTime != 0 { + i = encodeVarintRecords(dAtA, i, uint64(m.UnbondingTime)) + i-- + dAtA[i] = 0x28 + } + if len(m.HostZoneId) > 0 { + i -= len(m.HostZoneId) + copy(dAtA[i:], m.HostZoneId) + i = encodeVarintRecords(dAtA, i, uint64(len(m.HostZoneId))) + i-- + dAtA[i] = 0x22 + } + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintRecords(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0x1a + } + { + size := m.NativeTokenAmount.Size() + i -= size + if _, err := m.NativeTokenAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintRecords(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size := m.StTokenAmount.Size() + i -= size + if _, err := m.StTokenAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintRecords(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *EpochUnbondingRecord) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *EpochUnbondingRecord) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EpochUnbondingRecord) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.HostZoneUnbondings) > 0 { + for iNdEx := len(m.HostZoneUnbondings) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.HostZoneUnbondings[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintRecords(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if m.EpochNumber != 0 { + i = encodeVarintRecords(dAtA, i, uint64(m.EpochNumber)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *LSMTokenDeposit) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *LSMTokenDeposit) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LSMTokenDeposit) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Status != 0 { + i = encodeVarintRecords(dAtA, i, uint64(m.Status)) + i-- + dAtA[i] = 0x48 + } + { + size, err := m.StToken.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintRecords(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + { + size := m.Amount.Size() + i -= size + if _, err := m.Amount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintRecords(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + if len(m.ValidatorAddress) > 0 { + i -= len(m.ValidatorAddress) + copy(dAtA[i:], m.ValidatorAddress) + i = encodeVarintRecords(dAtA, i, uint64(len(m.ValidatorAddress))) + i-- + dAtA[i] = 0x32 + } + if len(m.StakerAddress) > 0 { + i -= len(m.StakerAddress) + copy(dAtA[i:], m.StakerAddress) + i = encodeVarintRecords(dAtA, i, uint64(len(m.StakerAddress))) + i-- + dAtA[i] = 0x2a + } + if len(m.IbcDenom) > 0 { + i -= len(m.IbcDenom) + copy(dAtA[i:], m.IbcDenom) + i = encodeVarintRecords(dAtA, i, uint64(len(m.IbcDenom))) + i-- + dAtA[i] = 0x22 + } + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintRecords(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0x1a + } + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintRecords(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0x12 + } + if len(m.DepositId) > 0 { + i -= len(m.DepositId) + copy(dAtA[i:], m.DepositId) + i = encodeVarintRecords(dAtA, i, uint64(len(m.DepositId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintRecords(dAtA []byte, offset int, v uint64) int { + offset -= sovRecords(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *UserRedemptionRecord) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Id) + if l > 0 { + n += 1 + l + sovRecords(uint64(l)) + } + l = len(m.Receiver) + if l > 0 { + n += 1 + l + sovRecords(uint64(l)) + } + l = m.NativeTokenAmount.Size() + n += 1 + l + sovRecords(uint64(l)) + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovRecords(uint64(l)) + } + l = len(m.HostZoneId) + if l > 0 { + n += 1 + l + sovRecords(uint64(l)) + } + if m.EpochNumber != 0 { + n += 1 + sovRecords(uint64(m.EpochNumber)) + } + if m.ClaimIsPending { + n += 2 + } + l = m.StTokenAmount.Size() + n += 1 + l + sovRecords(uint64(l)) + return n +} + +func (m *DepositRecord) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Id != 0 { + n += 1 + sovRecords(uint64(m.Id)) + } + l = m.Amount.Size() + n += 1 + l + sovRecords(uint64(l)) + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovRecords(uint64(l)) + } + l = len(m.HostZoneId) + if l > 0 { + n += 1 + l + sovRecords(uint64(l)) + } + if m.Status != 0 { + n += 1 + sovRecords(uint64(m.Status)) + } + if m.DepositEpochNumber != 0 { + n += 1 + sovRecords(uint64(m.DepositEpochNumber)) + } + if m.Source != 0 { + n += 1 + sovRecords(uint64(m.Source)) + } + if m.DelegationTxsInProgress != 0 { + n += 1 + sovRecords(uint64(m.DelegationTxsInProgress)) + } + return n +} + +func (m *HostZoneUnbonding) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.StTokenAmount.Size() + n += 1 + l + sovRecords(uint64(l)) + l = m.NativeTokenAmount.Size() + n += 1 + l + sovRecords(uint64(l)) + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovRecords(uint64(l)) + } + l = len(m.HostZoneId) + if l > 0 { + n += 1 + l + sovRecords(uint64(l)) + } + if m.UnbondingTime != 0 { + n += 1 + sovRecords(uint64(m.UnbondingTime)) + } + if m.Status != 0 { + n += 1 + sovRecords(uint64(m.Status)) + } + if len(m.UserRedemptionRecords) > 0 { + for _, s := range m.UserRedemptionRecords { + l = len(s) + n += 1 + l + sovRecords(uint64(l)) + } + } + l = m.StTokensToBurn.Size() + n += 1 + l + sovRecords(uint64(l)) + l = m.NativeTokensToUnbond.Size() + n += 1 + l + sovRecords(uint64(l)) + l = m.ClaimableNativeTokens.Size() + n += 1 + l + sovRecords(uint64(l)) + if m.UndelegationTxsInProgress != 0 { + n += 1 + sovRecords(uint64(m.UndelegationTxsInProgress)) + } + return n +} + +func (m *EpochUnbondingRecord) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.EpochNumber != 0 { + n += 1 + sovRecords(uint64(m.EpochNumber)) + } + if len(m.HostZoneUnbondings) > 0 { + for _, e := range m.HostZoneUnbondings { + l = e.Size() + n += 1 + l + sovRecords(uint64(l)) + } + } + return n +} + +func (m *LSMTokenDeposit) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.DepositId) + if l > 0 { + n += 1 + l + sovRecords(uint64(l)) + } + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovRecords(uint64(l)) + } + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovRecords(uint64(l)) + } + l = len(m.IbcDenom) + if l > 0 { + n += 1 + l + sovRecords(uint64(l)) + } + l = len(m.StakerAddress) + if l > 0 { + n += 1 + l + sovRecords(uint64(l)) + } + l = len(m.ValidatorAddress) + if l > 0 { + n += 1 + l + sovRecords(uint64(l)) + } + l = m.Amount.Size() + n += 1 + l + sovRecords(uint64(l)) + l = m.StToken.Size() + n += 1 + l + sovRecords(uint64(l)) + if m.Status != 0 { + n += 1 + sovRecords(uint64(m.Status)) + } + return n +} + +func sovRecords(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozRecords(x uint64) (n int) { + return sovRecords(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *UserRedemptionRecord) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: UserRedemptionRecord: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UserRedemptionRecord: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRecords + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRecords + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Id = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Receiver", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRecords + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRecords + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Receiver = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NativeTokenAmount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRecords + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRecords + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NativeTokenAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRecords + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRecords + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZoneId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRecords + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRecords + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZoneId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EpochNumber", wireType) + } + m.EpochNumber = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EpochNumber |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ClaimIsPending", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ClaimIsPending = bool(v != 0) + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StTokenAmount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRecords + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRecords + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.StTokenAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRecords(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthRecords + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DepositRecord) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DepositRecord: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DepositRecord: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Id", wireType) + } + m.Id = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Id |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRecords + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRecords + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRecords + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRecords + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZoneId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRecords + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRecords + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZoneId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + m.Status = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Status |= DepositRecord_Status(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DepositEpochNumber", wireType) + } + m.DepositEpochNumber = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DepositEpochNumber |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Source", wireType) + } + m.Source = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Source |= DepositRecord_Source(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DelegationTxsInProgress", wireType) + } + m.DelegationTxsInProgress = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DelegationTxsInProgress |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipRecords(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthRecords + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *HostZoneUnbonding) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HostZoneUnbonding: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HostZoneUnbonding: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StTokenAmount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRecords + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRecords + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.StTokenAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NativeTokenAmount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRecords + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRecords + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NativeTokenAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRecords + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRecords + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZoneId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRecords + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRecords + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZoneId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UnbondingTime", wireType) + } + m.UnbondingTime = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.UnbondingTime |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + m.Status = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Status |= HostZoneUnbonding_Status(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UserRedemptionRecords", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRecords + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRecords + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UserRedemptionRecords = append(m.UserRedemptionRecords, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StTokensToBurn", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRecords + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRecords + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.StTokensToBurn.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NativeTokensToUnbond", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRecords + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRecords + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NativeTokensToUnbond.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClaimableNativeTokens", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRecords + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRecords + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ClaimableNativeTokens.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UndelegationTxsInProgress", wireType) + } + m.UndelegationTxsInProgress = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.UndelegationTxsInProgress |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipRecords(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthRecords + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *EpochUnbondingRecord) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EpochUnbondingRecord: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EpochUnbondingRecord: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EpochNumber", wireType) + } + m.EpochNumber = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EpochNumber |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZoneUnbondings", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRecords + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthRecords + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZoneUnbondings = append(m.HostZoneUnbondings, &HostZoneUnbonding{}) + if err := m.HostZoneUnbondings[len(m.HostZoneUnbondings)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipRecords(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthRecords + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LSMTokenDeposit) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LSMTokenDeposit: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LSMTokenDeposit: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DepositId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRecords + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRecords + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DepositId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRecords + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRecords + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRecords + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRecords + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IbcDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRecords + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRecords + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.IbcDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StakerAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRecords + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRecords + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.StakerAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRecords + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRecords + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ValidatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRecords + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRecords + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StToken", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthRecords + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthRecords + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.StToken.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + m.Status = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRecords + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Status |= LSMTokenDeposit_Status(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipRecords(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthRecords + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipRecords(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowRecords + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowRecords + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowRecords + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthRecords + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupRecords + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthRecords + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthRecords = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowRecords = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupRecords = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/records/types/records_test.go b/x/records/types/records_test.go new file mode 100644 index 00000000000..80796100594 --- /dev/null +++ b/x/records/types/records_test.go @@ -0,0 +1,99 @@ +package types_test + +import ( + "testing" + + sdkmath "cosmossdk.io/math" + + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +func TestShouldInitiateUnbonding(t *testing.T) { + testCases := []struct { + name string + status types.HostZoneUnbonding_Status + amount sdkmath.Int + shouldUnbond bool + }{ + { + name: "should unbond", + status: types.HostZoneUnbonding_UNBONDING_QUEUE, + amount: sdkmath.NewInt(10), + shouldUnbond: true, + }, + { + name: "not in unbonding queue", + status: types.HostZoneUnbonding_CLAIMABLE, + amount: sdkmath.NewInt(10), + shouldUnbond: false, + }, + { + name: "zero amount", + status: types.HostZoneUnbonding_UNBONDING_QUEUE, + amount: sdkmath.ZeroInt(), + shouldUnbond: false, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + record := types.HostZoneUnbonding{ + Status: tc.status, + StTokenAmount: tc.amount, + } + require.Equal(t, tc.shouldUnbond, record.ShouldInitiateUnbonding()) + }) + } +} + +func TestShouldRetryUnbonding(t *testing.T) { + testCases := []struct { + name string + status types.HostZoneUnbonding_Status + amount sdkmath.Int + txInProgress uint64 + shouldUnbond bool + }{ + { + name: "should retry", + status: types.HostZoneUnbonding_UNBONDING_RETRY_QUEUE, + txInProgress: 0, + amount: sdkmath.OneInt(), + shouldUnbond: true, + }, + { + name: "not in retry status", + status: types.HostZoneUnbonding_CLAIMABLE, + txInProgress: 0, + amount: sdkmath.OneInt(), + shouldUnbond: false, + }, + { + name: "undelegations still processing", + status: types.HostZoneUnbonding_UNBONDING_RETRY_QUEUE, + txInProgress: 1, + amount: sdkmath.OneInt(), + shouldUnbond: false, + }, + { + name: "zero amount", + status: types.HostZoneUnbonding_UNBONDING_RETRY_QUEUE, + txInProgress: 0, + amount: sdkmath.ZeroInt(), + shouldUnbond: false, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + record := types.HostZoneUnbonding{ + Status: tc.status, + UndelegationTxsInProgress: tc.txInProgress, + StTokenAmount: tc.amount, + } + require.Equal(t, tc.shouldUnbond, record.ShouldRetryUnbonding()) + }) + } +} diff --git a/x/records/types/types.go b/x/records/types/types.go new file mode 100644 index 00000000000..bbc775cc248 --- /dev/null +++ b/x/records/types/types.go @@ -0,0 +1,7 @@ +package types + +import "fmt" + +func UserRedemptionRecordKeyFormatter(chainId string, epochNumber uint64, receiver string) string { + return fmt.Sprintf("%s.%d.%s", chainId, epochNumber, receiver) // {chain_id}.{epoch}.{receiver} +} diff --git a/x/stakeibc/README.md b/x/stakeibc/README.md new file mode 100644 index 00000000000..f7e4f6ae9cc --- /dev/null +++ b/x/stakeibc/README.md @@ -0,0 +1,119 @@ +--- +title: "StakeIBC" +excerpt: "" +category: 6392913957c533007128548e +--- + +# The StakeIBC Module + +The StakeIBC Module contains Stride's main app logic: + +- it exposes core liquid staking entry points to the user (liquid staking and redeeming) +- it executes automated beginBlocker and endBlocker logic to stake funds on relevant host zones using Interchain Accounts +- it handles registering new host zones and adjusting host zone validator sets and weights +- it defines Stride's core data structures (e.g. hostZone) +- it defines all the callbacks used when issuing Interchain Account logic + +Nearly all of Stride's functionality is built using interchain accounts (ICAs), which are a new functionality in Cosmos, and a critical component of IBC. ICAs allow accounts on Zone A to be controlled by Zone B. ICAs communicate with one another using Interchain Queries (ICQs), which involve Zone A querying Zone B for relevant information. + +Two Zones communicate via a connection and channel. All communications between the Controller Zone (the chain that is querying) and the Host Zone (the chain that is being queried) is done through a dedicated IBC channel between the two chains, which is opened the first time the two chains interact. + +For context, ICS standards define that each channel is associated with a particular connection, and a connection may have any number of associated channels. + +## Params + +``` +DepositInterval (default uint64 = 1) +DelegateInterval (default uint64 = 1) +ReinvestInterval (default uint64 = 1) +RewardsInterval (default uint64 = 1) +RedemptionRateInterval (default uint64 = 1) +StrideCommission (default uint64 = 10) +ICATimeoutNanos(default uint64 = 600000000000) +BufferSize (default uint64 = 5) +IbcTimeoutBlocks (default uint64 = 300) +FeeTransferTimeoutNanos (default uint64 = 1800000000000) +DefaultMinRedemptionRateThreshold (default uint64 = 90) +DefaultMaxRedemptionRateThreshold (default uint64 = 150) +MaxStakeICACallsPerEpoch (default uint64 = 100) +IBCTransferTimeoutNanos (default uint64 = 1800000000000) +MinRedemptionRates (default uint64 = 90) +MaxRedemptionRates (default uint64 = 150) +ValidatorSlashQueryThreshold (default uint64 = 1) +``` + +## Keeper functions + +- `LiquidStake()` +- `RedeemStake()` +- `ClaimUndelegatedTokens()` +- `RebalanceValidators()` +- `AddValidators()` +- `ChangeValidatorWeight()` +- `DeleteValidator()` +- `RegisterHostZone()` +- `ClearBalance()` +- `RestoreInterchainAccount()` +- `UpdateValidatorSharesExchRate()` + +## State + +Callbacks + +- `SplitDelegation` +- `DelegateCallback` +- `ClaimCallback` +- `ReinvestCallback` +- `UndelegateCallback` +- `RedemptionCallback` +- `Rebalancing` +- `RebalanceCallback` + +HostZone + +- `HostZone` +- `ICAAccount` +- `MinValidatorRequirements` + +Host Zone Validators + +- `Validator` +- `ValidatorExchangeRate` + +Misc + +- `GenesisState` +- `EpochTracker` +- `Delegation` + +Governance + +- `AddValidatorsProposal` + +## Queries + +- `QueryInterchainAccountFromAddress` +- `QueryParams` +- `QueryGetValidators` +- `QueryGetHostZone` +- `QueryAllHostZone` +- `QueryModuleAddress` +- `QueryGetEpochTracker` +- `QueryAllEpochTracker` +- `QueryGetNextPacketSequence` + +## Events + +`stakeibc` module emits the following events: + +## Type: Attribute Key → Attribute Value + +registerHostZone: module → stakeibc +registerHostZone: connectionId → connectionId +registerHostZone: chainId → chainId +submitHostZoneUnbonding: hostZone → chainId +submitHostZoneUnbonding: newAmountUnbonding → totalAmtToUnbond +stakeExistingDepositsOnHostZone: hostZone → chainId +stakeExistingDepositsOnHostZone: newAmountStaked → amount +onAckPacket (IBC): module → moduleName +onAckPacket (IBC): ack → ackInfo diff --git a/x/stakeibc/client/cli/cli_test.go b/x/stakeibc/client/cli/cli_test.go new file mode 100644 index 00000000000..f4f2fcacfd3 --- /dev/null +++ b/x/stakeibc/client/cli/cli_test.go @@ -0,0 +1,26 @@ +package cli_test + +import ( + "testing" + + clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/spf13/cobra" + + "github.com/stretchr/testify/require" + + "github.com/cosmos/cosmos-sdk/client" + + "github.com/osmosis-labs/osmosis/v27/testutil/network" +) + +func ExecuteCLIExpectError(t *testing.T, cmd *cobra.Command, args []string, errorString string) { + sdk.GetConfig().SetBech32PrefixForAccount("stride", "stridepub") + + clientCtx := client.Context{}. + WithFromAddress(sdk.MustAccAddressFromBech32("stride10p3xzmnpdeshqctsv9ukzcm0vdhkuat52aucqd")). + WithCodec(network.DefaultConfig().Codec) + + _, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, args) + require.ErrorContains(t, err, errorString) +} diff --git a/x/stakeibc/client/cli/gov.go b/x/stakeibc/client/cli/gov.go new file mode 100644 index 00000000000..256889dd85e --- /dev/null +++ b/x/stakeibc/client/cli/gov.go @@ -0,0 +1,168 @@ +package cli + +import ( + "fmt" + "strings" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/tx" + sdk "github.com/cosmos/cosmos-sdk/types" + + errorsmod "cosmossdk.io/errors" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/version" + govcli "github.com/cosmos/cosmos-sdk/x/gov/client/cli" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" + "github.com/spf13/cobra" +) + +func CmdAddValidatorsProposal() *cobra.Command { + cmd := &cobra.Command{ + Use: "add-validators [proposal-file]", + Short: "Submit an add-validator proposal", + Long: strings.TrimSpace( + fmt.Sprintf(`Submit an add-validators proposal along with an initial deposit. +The proposal details must be supplied via a JSON file. + +Example: +$ %s tx gov submit-legacy-proposal add-validators --from= + +Where proposal.json contains: +{ + "description": "Proposal to add Imperator because they contribute in XYZ ways!", + "hostZone": "GAIA", + "validators": [ + { + "name": "Imperator", + "address": "cosmosvaloper1v5y0tg0jllvxf5c3afml8s3awue0ymju89frut", + }, + ], + "deposit": "64000000ustrd" +} +`, version.AppName), + ), + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) (err error) { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + proposal, err := parseAddValidatorsProposalFile(clientCtx.Codec, args[0]) + if err != nil { + return err + } + if err := proposal.ValidateBasic(); err != nil { + return err + } + + from := clientCtx.GetFromAddress() + + depositFromFlags, err := cmd.Flags().GetString(govcli.FlagDeposit) + if err != nil { + return err + } + + // if deposit from flags is not empty, it overrides the deposit from proposal + if depositFromFlags != "" { + proposal.Deposit = depositFromFlags + } + deposit, err := sdk.ParseCoinsNormalized(proposal.Deposit) + if err != nil { + return err + } + + strideDenom, err := sdk.GetBaseDenom() + if err != nil { + return err + } + + if len(deposit) != 1 || deposit.GetDenomByIndex(0) != strideDenom { + return errorsmod.Wrapf(sdkerrors.ErrInvalidCoins, "Deposit token denom must be %s", strideDenom) + } + + msg, err := govtypes.NewMsgSubmitProposal(&proposal, deposit, from) + if err != nil { + return err + } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + cmd.Flags().String(govcli.FlagDeposit, "", "deposit of proposal") + + return cmd +} + +func CmdToggleLSMProposal() *cobra.Command { + cmd := &cobra.Command{ + Use: "toggle-lsm [proposal-file]", + Short: "Submit an toggle-lsm proposal", + Long: strings.TrimSpace( + fmt.Sprintf(`Submit an toggle-lsm proposal which will either enable or disable +LSMLiquidStakes for the host zone. + +Example: +$ %s tx gov submit-legacy-proposal toggle-lsm --from= + +Where proposal.json contains: +{ + "description": "Proposal to enable LSM for Osmosis", + "hostZone": "osmosis-1", + "enabled": true, + "deposit": "64000000ustrd" +} +`, version.AppName), + ), + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) (err error) { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + proposal, err := parseToggleLSMProposalFile(clientCtx.Codec, args[0]) + if err != nil { + return err + } + if err := proposal.ValidateBasic(); err != nil { + return err + } + + from := clientCtx.GetFromAddress() + + depositFromFlags, err := cmd.Flags().GetString(govcli.FlagDeposit) + if err != nil { + return err + } + + // if deposit from flags is not empty, it overrides the deposit from proposal + if depositFromFlags != "" { + proposal.Deposit = depositFromFlags + } + deposit, err := sdk.ParseCoinsNormalized(proposal.Deposit) + if err != nil { + return err + } + + strideDenom, err := sdk.GetBaseDenom() + if err != nil { + return err + } + + if len(deposit) != 1 || deposit.GetDenomByIndex(0) != strideDenom { + return errorsmod.Wrapf(sdkerrors.ErrInvalidCoins, "Deposit token denom must be %s", strideDenom) + } + + msg, err := govtypes.NewMsgSubmitProposal(&proposal, deposit, from) + if err != nil { + return err + } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + cmd.Flags().String(govcli.FlagDeposit, "", "deposit of proposal") + + return cmd +} diff --git a/x/stakeibc/client/cli/gov_test.go b/x/stakeibc/client/cli/gov_test.go new file mode 100644 index 00000000000..18728bd8612 --- /dev/null +++ b/x/stakeibc/client/cli/gov_test.go @@ -0,0 +1,112 @@ +package cli_test + +import ( + "os" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/client/cli" +) + +func TestCmdAddValidatorsProposal(t *testing.T) { + t.Run("no file", func(t *testing.T) { + args := []string{ + "[proposal-file]", + } + + cmd := cli.CmdAddValidatorsProposal() + ExecuteCLIExpectError(t, cmd, args, `open [proposal-file]: no such file or directory`) + }) + t.Run("empty file", func(t *testing.T) { + f, err := os.CreateTemp("", "") + require.NoError(t, err) + defer f.Close() + + args := []string{ + f.Name(), + } + + cmd := cli.CmdAddValidatorsProposal() + ExecuteCLIExpectError(t, cmd, args, `EOF`) + }) + t.Run("non json file", func(t *testing.T) { + f, err := os.CreateTemp("", "") + require.NoError(t, err) + defer f.Close() + _, err = f.WriteString("This is not JSON") + require.NoError(t, err) + + args := []string{ + f.Name(), + } + + cmd := cli.CmdAddValidatorsProposal() + ExecuteCLIExpectError(t, cmd, args, `invalid character 'T' looking for beginning of value`) + }) + t.Run("wrong json format", func(t *testing.T) { + f, err := os.CreateTemp("", "") + require.NoError(t, err) + defer f.Close() + _, err = f.WriteString(`{"description":"Proposal to add Imperator because they contribute in XYZ ways!","hostZone":"GAIA","blabla_validators":[{"name":"Imperator","address":"cosmosvaloper1v5y0tg0jllvxf5c3afml8s3awue0ymju89frut"}],"deposit":"64000000ustrd"}`) + require.NoError(t, err) + + args := []string{ + f.Name(), + } + + cmd := cli.CmdAddValidatorsProposal() + ExecuteCLIExpectError(t, cmd, args, `unknown field "blabla_validators" in types.AddValidatorsProposal`) + }) +} + +func TestCmdToggleLSMProposal(t *testing.T) { + t.Run("no file", func(t *testing.T) { + args := []string{ + "[proposal-file]", + } + + cmd := cli.CmdToggleLSMProposal() + ExecuteCLIExpectError(t, cmd, args, `open [proposal-file]: no such file or directory`) + }) + t.Run("empty file", func(t *testing.T) { + f, err := os.CreateTemp("", "") + require.NoError(t, err) + defer f.Close() + + args := []string{ + f.Name(), + } + + cmd := cli.CmdToggleLSMProposal() + ExecuteCLIExpectError(t, cmd, args, `EOF`) + }) + t.Run("non json file", func(t *testing.T) { + f, err := os.CreateTemp("", "") + require.NoError(t, err) + defer f.Close() + _, err = f.WriteString("This is not JSON") + require.NoError(t, err) + + args := []string{ + f.Name(), + } + + cmd := cli.CmdToggleLSMProposal() + ExecuteCLIExpectError(t, cmd, args, `invalid character 'T' looking for beginning of value`) + }) + t.Run("wrong json format", func(t *testing.T) { + f, err := os.CreateTemp("", "") + require.NoError(t, err) + defer f.Close() + _, err = f.WriteString(`{"description":"Proposal to add Imperator because they contribute in XYZ ways!","hostZone":"GAIA","blabla_validators":[{"name":"Imperator","address":"cosmosvaloper1v5y0tg0jllvxf5c3afml8s3awue0ymju89frut"}],"deposit":"64000000ustrd"}`) + require.NoError(t, err) + + args := []string{ + f.Name(), + } + + cmd := cli.CmdToggleLSMProposal() + ExecuteCLIExpectError(t, cmd, args, `unknown field "blabla_validators" in types.ToggleLSMProposal`) + }) +} diff --git a/x/stakeibc/client/cli/parser.go b/x/stakeibc/client/cli/parser.go new file mode 100644 index 00000000000..8401de4a1d4 --- /dev/null +++ b/x/stakeibc/client/cli/parser.go @@ -0,0 +1,96 @@ +package cli + +import ( + "encoding/json" + "fmt" + "os" + + "github.com/cosmos/cosmos-sdk/codec" + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +type ValidatorsList struct { + Validators []*types.Validator `json:"validators,omitempty"` +} + +type ValidatorWeightList struct { + ValidatorWeights []*types.ValidatorWeight `json:"validator_weights,omitempty"` +} + +// Parse a JSON with a list of validators in the format +// +// { +// "validators": [ +// {"name": "val1", "address": "cosmosXXX", "weight": 1}, +// {"name": "val2", "address": "cosmosXXX", "weight": 2} +// ] +// } +func parseAddValidatorsFile(validatorsFile string) (validators ValidatorsList, err error) { + fileContents, err := os.ReadFile(validatorsFile) + if err != nil { + return validators, err + } + + if err = json.Unmarshal(fileContents, &validators); err != nil { + return validators, err + } + + return validators, nil +} + +// Parse a JSON with a list of validators in the format +// +// { +// "validator_weights": [ +// {"address": "cosmosXXX", "weight": 1}, +// {"address": "cosmosXXX", "weight": 2} +// ] +// } +func parseChangeValidatorWeightsFile(validatorsFile string) (weights []*types.ValidatorWeight, err error) { + fileContents, err := os.ReadFile(validatorsFile) + if err != nil { + return weights, err + } + + var weightsList ValidatorWeightList + if err = json.Unmarshal(fileContents, &weightsList); err != nil { + return weights, err + } + + return weightsList.ValidatorWeights, nil +} + +func parseAddValidatorsProposalFile(cdc codec.JSONCodec, proposalFile string) (proposal types.AddValidatorsProposal, err error) { + contents, err := os.ReadFile(proposalFile) + if err != nil { + return proposal, err + } + + if err = cdc.UnmarshalJSON(contents, &proposal); err != nil { + return proposal, err + } + + proposal.Title = fmt.Sprintf("Add validators to %s", proposal.HostZone) + + return proposal, nil +} + +func parseToggleLSMProposalFile(cdc codec.JSONCodec, proposalFile string) (proposal types.ToggleLSMProposal, err error) { + contents, err := os.ReadFile(proposalFile) + if err != nil { + return proposal, err + } + + if err = cdc.UnmarshalJSON(contents, &proposal); err != nil { + return proposal, err + } + + action := "Disable" + if proposal.Enabled { + action = "Enable" + } + proposal.Title = fmt.Sprintf("%s LSMLiquidStakes for %s", action, proposal.HostZone) + + return proposal, nil +} diff --git a/x/stakeibc/client/cli/query.go b/x/stakeibc/client/cli/query.go new file mode 100644 index 00000000000..4ccdd64e355 --- /dev/null +++ b/x/stakeibc/client/cli/query.go @@ -0,0 +1,319 @@ +package cli + +import ( + "context" + "fmt" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/spf13/cobra" + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// GetQueryCmd returns the cli query commands for this module +func GetQueryCmd(queryRoute string) *cobra.Command { + // Group stakeibc queries under a subcommand + cmd := &cobra.Command{ + Use: types.ModuleName, + Short: fmt.Sprintf("Querying commands for the %s module", types.ModuleName), + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + cmd.AddCommand(CmdQueryParams()) + cmd.AddCommand(CmdShowValidators()) + cmd.AddCommand(CmdListHostZone()) + cmd.AddCommand(CmdShowHostZone()) + cmd.AddCommand(CmdModuleAddress()) + cmd.AddCommand(CmdShowInterchainAccount()) + cmd.AddCommand(CmdListEpochTracker()) + cmd.AddCommand(CmdShowEpochTracker()) + cmd.AddCommand(CmdNextPacketSequence()) + cmd.AddCommand(CmdListTradeRoutes()) + + return cmd +} + +func CmdQueryParams() *cobra.Command { + cmd := &cobra.Command{ + Use: "params", + Short: "shows the parameters of the module", + Args: cobra.NoArgs, + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := client.GetClientContextFromCmd(cmd) + + queryClient := types.NewQueryClient(clientCtx) + + res, err := queryClient.Params(context.Background(), &types.QueryParamsRequest{}) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +func CmdShowValidators() *cobra.Command { + cmd := &cobra.Command{ + Use: "show-validators [chain-id]", + Short: "shows validators", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := client.GetClientContextFromCmd(cmd) + + queryClient := types.NewQueryClient(clientCtx) + + chainId := args[0] + + params := &types.QueryGetValidatorsRequest{ChainId: chainId} + + res, err := queryClient.Validators(context.Background(), params) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +func CmdListHostZone() *cobra.Command { + cmd := &cobra.Command{ + Use: "list-host-zone", + Short: "list all HostZone", + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := client.GetClientContextFromCmd(cmd) + + pageReq, err := client.ReadPageRequest(cmd.Flags()) + if err != nil { + return err + } + + queryClient := types.NewQueryClient(clientCtx) + + params := &types.QueryAllHostZoneRequest{ + Pagination: pageReq, + } + + res, err := queryClient.HostZoneAll(context.Background(), params) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddPaginationFlagsToCmd(cmd, cmd.Use) + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +func CmdShowHostZone() *cobra.Command { + cmd := &cobra.Command{ + Use: "show-host-zone [chain-id]", + Short: "shows a HostZone", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := client.GetClientContextFromCmd(cmd) + + queryClient := types.NewQueryClient(clientCtx) + + chainId := args[0] + + params := &types.QueryGetHostZoneRequest{ + ChainId: chainId, + } + + res, err := queryClient.HostZone(context.Background(), params) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +func CmdModuleAddress() *cobra.Command { + cmd := &cobra.Command{ + Use: "module-address [name]", + Short: "Query module-address", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) (err error) { + reqName := args[0] + + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + queryClient := types.NewQueryClient(clientCtx) + + params := &types.QueryModuleAddressRequest{ + Name: reqName, + } + + res, err := queryClient.ModuleAddress(cmd.Context(), params) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +func CmdShowInterchainAccount() *cobra.Command { + cmd := &cobra.Command{ + Use: "interchainaccounts [connection-id] [owner-account]", + Args: cobra.ExactArgs(2), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + queryClient := types.NewQueryClient(clientCtx) + res, err := queryClient.InterchainAccountFromAddress(cmd.Context(), types.NewQueryInterchainAccountRequest(args[0], args[1])) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +func CmdListEpochTracker() *cobra.Command { + cmd := &cobra.Command{ + Use: "list-epoch-tracker", + Short: "list all epoch-tracker", + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := client.GetClientContextFromCmd(cmd) + + queryClient := types.NewQueryClient(clientCtx) + + params := &types.QueryAllEpochTrackerRequest{} + + res, err := queryClient.EpochTrackerAll(context.Background(), params) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +func CmdShowEpochTracker() *cobra.Command { + cmd := &cobra.Command{ + Use: "show-epoch-tracker [epoch-identifier]", + Short: "shows a epoch-tracker", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) (err error) { + clientCtx := client.GetClientContextFromCmd(cmd) + + queryClient := types.NewQueryClient(clientCtx) + + argEpochIdentifier := args[0] + + params := &types.QueryGetEpochTrackerRequest{ + EpochIdentifier: argEpochIdentifier, + } + + res, err := queryClient.EpochTracker(context.Background(), params) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +func CmdNextPacketSequence() *cobra.Command { + cmd := &cobra.Command{ + Use: "next-packet-sequence [channel-id] [port-id]", + Short: "returns the next packet sequence on a channel", + Args: cobra.ExactArgs(2), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := client.GetClientContextFromCmd(cmd) + + queryClient := types.NewQueryClient(clientCtx) + + channelId := args[0] + portId := args[1] + + params := &types.QueryGetNextPacketSequenceRequest{ChannelId: channelId, PortId: portId} + + res, err := queryClient.NextPacketSequence(context.Background(), params) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +func CmdListTradeRoutes() *cobra.Command { + cmd := &cobra.Command{ + Use: "list-trade-routes", + Short: "list all trade routes", + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := client.GetClientContextFromCmd(cmd) + + queryClient := types.NewQueryClient(clientCtx) + + params := &types.QueryAllTradeRoutes{} + res, err := queryClient.AllTradeRoutes(context.Background(), params) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddPaginationFlagsToCmd(cmd, cmd.Use) + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} diff --git a/x/stakeibc/client/cli/tx.go b/x/stakeibc/client/cli/tx.go new file mode 100644 index 00000000000..00c70b3a352 --- /dev/null +++ b/x/stakeibc/client/cli/tx.go @@ -0,0 +1,838 @@ +package cli + +import ( + "errors" + "fmt" + "strconv" + "strings" + "time" + + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/client/tx" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/spf13/cast" + "github.com/spf13/cobra" + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +const ( + FlagMinRedemptionRate = "min-redemption-rate" + FlagMaxRedemptionRate = "max-redemption-rate" + FlagCommunityPoolTreasuryAddress = "community-pool-treasury-address" + FlagMaxMessagesPerIcaTx = "max-messages-per-ica-tx" + FlagLegacy = "legacy" +) + +var DefaultRelativePacketTimeoutTimestamp = cast.ToUint64((time.Duration(10) * time.Minute).Nanoseconds()) + +func GetTxCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: types.ModuleName, + Short: fmt.Sprintf("%s transactions subcommands", types.ModuleName), + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + cmd.AddCommand(CmdLiquidStake()) + cmd.AddCommand(CmdLSMLiquidStake()) + cmd.AddCommand(CmdRegisterHostZone()) + cmd.AddCommand(CmdRedeemStake()) + cmd.AddCommand(CmdClaimUndelegatedTokens()) + cmd.AddCommand(CmdRebalanceValidators()) + cmd.AddCommand(CmdAddValidators()) + cmd.AddCommand(CmdChangeValidatorWeight()) + cmd.AddCommand(CmdChangeMultipleValidatorWeight()) + cmd.AddCommand(CmdDeleteValidator()) + cmd.AddCommand(CmdRestoreInterchainAccount()) + cmd.AddCommand(CmdCloseDelegationChannel()) + cmd.AddCommand(CmdUpdateValidatorSharesExchRate()) + cmd.AddCommand(CmdCalibrateDelegation()) + cmd.AddCommand(CmdClearBalance()) + cmd.AddCommand(CmdUpdateInnerRedemptionRateBounds()) + cmd.AddCommand(CmdResumeHostZone()) + cmd.AddCommand(CmdSetCommunityPoolRebate()) + cmd.AddCommand(CmdToggleTradeController()) + + return cmd +} + +func CmdLiquidStake() *cobra.Command { + cmd := &cobra.Command{ + Use: "liquid-stake [amount] [hostDenom]", + Short: "Broadcast message liquid-stake", + Args: cobra.ExactArgs(2), + RunE: func(cmd *cobra.Command, args []string) (err error) { + argAmount, found := sdkmath.NewIntFromString(args[0]) + if !found { + return errorsmod.Wrap(sdkerrors.ErrInvalidType, "can not convert string to int") + } + argHostDenom := args[1] + + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := types.NewMsgLiquidStake( + clientCtx.GetFromAddress().String(), + argAmount, + argHostDenom, + ) + if err := msg.ValidateBasic(); err != nil { + return err + } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +func CmdLSMLiquidStake() *cobra.Command { + cmd := &cobra.Command{ + Use: "lsm-liquid-stake [amount] [lsm-token-denom]", + Short: "Broadcast message lsm-liquid-stake", + Args: cobra.ExactArgs(2), + RunE: func(cmd *cobra.Command, args []string) (err error) { + amount, found := sdkmath.NewIntFromString(args[0]) + if !found { + return errorsmod.Wrap(sdkerrors.ErrInvalidType, "can not convert string to int") + } + denom := args[1] + + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := types.NewMsgLSMLiquidStake( + clientCtx.GetFromAddress().String(), + amount, + denom, + ) + if err := msg.ValidateBasic(); err != nil { + return err + } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +func CmdRegisterHostZone() *cobra.Command { + cmd := &cobra.Command{ + Use: "register-host-zone [connection-id] [host-denom] [bech32prefix] [ibc-denom] [channel-id] [unbonding-period] [lsm-enabled]", + Short: "Broadcast message register-host-zone", + Args: cobra.ExactArgs(7), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + connectionId := args[0] + hostDenom := args[1] + bech32prefix := args[2] + ibcDenom := args[3] + channelId := args[4] + unbondingPeriod, err := strconv.ParseUint(args[5], 10, 64) + if err != nil { + return err + } + lsmEnabled, err := strconv.ParseBool(args[6]) + if err != nil { + return err + } + + minRedemptionRateStr, err := cmd.Flags().GetString(FlagMinRedemptionRate) + if err != nil { + return err + } + minRedemptionRate := sdkmath.LegacyZeroDec() + if minRedemptionRateStr != "" { + minRedemptionRate, err = sdkmath.LegacyNewDecFromStr(minRedemptionRateStr) + if err != nil { + return err + } + } + + maxRedemptionRateStr, err := cmd.Flags().GetString(FlagMaxRedemptionRate) + if err != nil { + return err + } + maxRedemptionRate := sdkmath.LegacyZeroDec() + if maxRedemptionRateStr != "" { + maxRedemptionRate, err = sdkmath.LegacyNewDecFromStr(maxRedemptionRateStr) + if err != nil { + return err + } + } + + communityPoolTreasuryAddress, err := cmd.Flags().GetString(FlagCommunityPoolTreasuryAddress) + if err != nil { + return err + } + + maxMessagesPerIcaTx, err := cmd.Flags().GetUint64(FlagMaxMessagesPerIcaTx) + if err != nil { + return err + } + + msg := types.NewMsgRegisterHostZone( + clientCtx.GetFromAddress().String(), + connectionId, + bech32prefix, + hostDenom, + ibcDenom, + channelId, + unbondingPeriod, + minRedemptionRate, + maxRedemptionRate, + lsmEnabled, + communityPoolTreasuryAddress, + maxMessagesPerIcaTx, + ) + + if err := msg.ValidateBasic(); err != nil { + return err + } + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + cmd.Flags().String(FlagMinRedemptionRate, "", "minimum redemption rate") + cmd.Flags().String(FlagMaxRedemptionRate, "", "maximum redemption rate") + cmd.Flags().String(FlagCommunityPoolTreasuryAddress, "", "community pool treasury address") + cmd.Flags().Uint64(FlagMaxMessagesPerIcaTx, 0, "maximum number of ICA txs in a given tx") + + return cmd +} + +func CmdRedeemStake() *cobra.Command { + cmd := &cobra.Command{ + Use: "redeem-stake [amount] [hostZoneID] [receiver]", + Short: "Broadcast message redeem-stake", + Args: cobra.ExactArgs(3), + RunE: func(cmd *cobra.Command, args []string) error { + argAmount, found := sdkmath.NewIntFromString(args[0]) + if !found { + return errorsmod.Wrap(sdkerrors.ErrInvalidType, "can not convert string to int") + } + hostZoneID := args[1] + + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + argReceiver := args[2] + + msg := types.NewMsgRedeemStake( + clientCtx.GetFromAddress().String(), + argAmount, + hostZoneID, + argReceiver, + ) + if err := msg.ValidateBasic(); err != nil { + return err + } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +func CmdClaimUndelegatedTokens() *cobra.Command { + cmd := &cobra.Command{ + Use: "claim-undelegated-tokens [host-zone] [epoch] [receiver]", + Short: "Broadcast message claimUndelegatedTokens", + Args: cobra.ExactArgs(3), + RunE: func(cmd *cobra.Command, args []string) (err error) { + argHostZone := args[0] + argEpoch, err := cast.ToUint64E(args[1]) + if err != nil { + return err + } + argReceiver := args[2] + + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := types.NewMsgClaimUndelegatedTokens( + clientCtx.GetFromAddress().String(), + argHostZone, + argEpoch, + argReceiver, + ) + if err := msg.ValidateBasic(); err != nil { + return err + } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +func CmdRebalanceValidators() *cobra.Command { + cmd := &cobra.Command{ + Use: "rebalance-validators [host-zone] [num-to-rebalance]", + Short: "Broadcast message rebalanceValidators", + Args: cobra.ExactArgs(2), + RunE: func(cmd *cobra.Command, args []string) (err error) { + argHostZone := args[0] + argNumValidators, err := strconv.ParseUint(args[1], 10, 64) + if err != nil { + return err + } + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := types.NewMsgRebalanceValidators( + clientCtx.GetFromAddress().String(), + argHostZone, + argNumValidators, + ) + if err := msg.ValidateBasic(); err != nil { + return err + } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +func CmdAddValidators() *cobra.Command { + cmd := &cobra.Command{ + Use: "add-validators [host-zone] [validator-list-file]", + Short: "Broadcast message add-validators", + Long: strings.TrimSpace( + `Add validators and weights using a JSON file in the following format + { + "validator_weights": [ + {"address": "cosmosXXX", "weight": 1}, + {"address": "cosmosXXX", "weight": 2} + ] + } +`), + Args: cobra.ExactArgs(2), + RunE: func(cmd *cobra.Command, args []string) (err error) { + hostZone := args[0] + validatorListProposalFile := args[1] + + validators, err := parseAddValidatorsFile(validatorListProposalFile) + if err != nil { + return err + } + + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := types.NewMsgAddValidators( + clientCtx.GetFromAddress().String(), + hostZone, + validators.Validators, + ) + if err := msg.ValidateBasic(); err != nil { + return err + } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +// Updates the weight for a single validator +func CmdChangeValidatorWeight() *cobra.Command { + cmd := &cobra.Command{ + Use: "change-validator-weight [host-zone] [address] [weight]", + Short: "Broadcast message change-validator-weight to update the weight for a single validator", + Args: cobra.ExactArgs(3), + RunE: func(cmd *cobra.Command, args []string) (err error) { + hostZone := args[0] + valAddress := args[1] + weight, err := cast.ToUint64E(args[2]) + if err != nil { + return err + } + weights := []*types.ValidatorWeight{ + { + Address: valAddress, + Weight: weight, + }, + } + + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := types.NewMsgChangeValidatorWeights( + clientCtx.GetFromAddress().String(), + hostZone, + weights, + ) + if err := msg.ValidateBasic(); err != nil { + return err + } + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +// Updates the weight for multiple validators +// +// Accepts a file in the following format: +// +// { +// "validator_weights": [ +// {"address": "cosmosXXX", "weight": 1}, +// {"address": "cosmosXXX", "weight": 2} +// ] +// } +func CmdChangeMultipleValidatorWeight() *cobra.Command { + cmd := &cobra.Command{ + Use: "change-validator-weights [host-zone] [validator-weight-file]", + Short: "Broadcast message change-validator-weights to update the weights for multiple validators", + Long: strings.TrimSpace( + `Changes multiple validator weights at once, using a JSON file in the following format + { + "validator_weights": [ + {"address": "cosmosXXX", "weight": 1}, + {"address": "cosmosXXX", "weight": 2} + ] + } +`), + Args: cobra.ExactArgs(2), + RunE: func(cmd *cobra.Command, args []string) (err error) { + hostZone := args[0] + validatorWeightChangeFile := args[1] + + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + weights, err := parseChangeValidatorWeightsFile(validatorWeightChangeFile) + if err != nil { + return err + } + + msg := types.NewMsgChangeValidatorWeights( + clientCtx.GetFromAddress().String(), + hostZone, + weights, + ) + if err := msg.ValidateBasic(); err != nil { + return err + } + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +func CmdDeleteValidator() *cobra.Command { + cmd := &cobra.Command{ + Use: "delete-validator [host-zone] [address]", + Short: "Broadcast message delete-validator", + Args: cobra.ExactArgs(2), + RunE: func(cmd *cobra.Command, args []string) (err error) { + argHostZone := args[0] + argAddress := args[1] + + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := types.NewMsgDeleteValidator( + clientCtx.GetFromAddress().String(), + argHostZone, + argAddress, + ) + if err := msg.ValidateBasic(); err != nil { + return err + } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +func CmdRestoreInterchainAccount() *cobra.Command { + cmd := &cobra.Command{ + Use: "restore-interchain-account [chain-id] [connection-id] [account-owner]", + Short: "Broadcast message restore-interchain-account", + Long: strings.TrimSpace( + `Restores a closed channel associated with an interchain account. +Specify the chain ID and account owner - where the owner is the alias for the ICA account + +For host zone ICA accounts, the owner is of the form {chainId}.{accountType} +ex: +>>> strided tx restore-interchain-account cosmoshub-4 connection-0 cosmoshub-4.DELEGATION + +For trade route ICA accounts, the owner is of the form: + {chainId}.{rewardDenom}-{hostDenom}.{accountType} +ex: +>>> strided tx restore-interchain-account dydx-mainnet-1 connection-1 dydx-mainnet-1.uusdc-udydx.CONVERTER_TRADE + `), + Args: cobra.ExactArgs(3), + RunE: func(cmd *cobra.Command, args []string) (err error) { + chainId := args[0] + connectionId := args[1] + accountOwner := args[2] + + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := types.NewMsgRestoreInterchainAccount( + clientCtx.GetFromAddress().String(), + chainId, + connectionId, + accountOwner, + ) + if err := msg.ValidateBasic(); err != nil { + return err + } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +func CmdCloseDelegationChannel() *cobra.Command { + cmd := &cobra.Command{ + Use: "close-delegation-channel [chain-id]", + Short: "Broadcast message close-delegation-channel", + Long: strings.TrimSpace( + `Closes a delegation ICA channel. This can only be run by the admin + +Ex: +>>> strided tx close-delegation-channel cosmoshub-4 + `), + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) (err error) { + chainId := args[0] + + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := types.NewMsgCloseDelegationChannel( + clientCtx.GetFromAddress().String(), + chainId, + ) + if err := msg.ValidateBasic(); err != nil { + return err + } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +func CmdUpdateValidatorSharesExchRate() *cobra.Command { + cmd := &cobra.Command{ + Use: "update-delegation [chainid] [valoper]", + Short: "Broadcast message update-delegation", + Args: cobra.ExactArgs(2), + RunE: func(cmd *cobra.Command, args []string) (err error) { + argHostdenom := args[0] + argValoper := args[1] + + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := types.NewMsgUpdateValidatorSharesExchRate( + clientCtx.GetFromAddress().String(), + argHostdenom, + argValoper, + ) + if err := msg.ValidateBasic(); err != nil { + return err + } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +func CmdCalibrateDelegation() *cobra.Command { + cmd := &cobra.Command{ + Use: "calibrate-delegation [chainid] [valoper]", + Short: "Broadcast message calibrate-delegation", + Args: cobra.ExactArgs(2), + RunE: func(cmd *cobra.Command, args []string) (err error) { + argChainId := args[0] + argValoper := args[1] + + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := types.NewMsgCalibrateDelegation( + clientCtx.GetFromAddress().String(), + argChainId, + argValoper, + ) + if err := msg.ValidateBasic(); err != nil { + return err + } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +func CmdClearBalance() *cobra.Command { + cmd := &cobra.Command{ + Use: "clear-balance [chain-id] [amount] [channel-id]", + Short: "Broadcast message clear-balance", + Args: cobra.ExactArgs(3), + RunE: func(cmd *cobra.Command, args []string) (err error) { + argChainId := args[0] + argAmount, found := sdkmath.NewIntFromString(args[1]) + if !found { + return errorsmod.Wrap(sdkerrors.ErrInvalidType, "can not convert string to int") + } + argChannelId := args[2] + + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := types.NewMsgClearBalance( + clientCtx.GetFromAddress().String(), + argChainId, + argAmount, + argChannelId, + ) + if err := msg.ValidateBasic(); err != nil { + return err + } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +func CmdUpdateInnerRedemptionRateBounds() *cobra.Command { + cmd := &cobra.Command{ + Use: "set-redemption-rate-bounds [chainid] [min-bound] [max-bound]", + Short: "Broadcast message set-redemption-rate-bounds", + Args: cobra.ExactArgs(3), + RunE: func(cmd *cobra.Command, args []string) (err error) { + argChainId := args[0] + minInnerRedemptionRate := sdkmath.LegacyMustNewDecFromStr(args[1]) + maxInnerRedemptionRate := sdkmath.LegacyMustNewDecFromStr(args[2]) + + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := types.NewMsgUpdateInnerRedemptionRateBounds( + clientCtx.GetFromAddress().String(), + argChainId, + minInnerRedemptionRate, + maxInnerRedemptionRate, + ) + if err := msg.ValidateBasic(); err != nil { + return err + } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +func CmdResumeHostZone() *cobra.Command { + cmd := &cobra.Command{ + Use: "resume-host-zone [chainid]", + Short: "Broadcast message resume-host-zone", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) (err error) { + argChainId := args[0] + + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := types.NewMsgResumeHostZone( + clientCtx.GetFromAddress().String(), + argChainId, + ) + if err := msg.ValidateBasic(); err != nil { + return err + } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +func CmdSetCommunityPoolRebate() *cobra.Command { + cmd := &cobra.Command{ + Use: "set-rebate [chain-id] [rebate-rate] [liquid-staked-sttoken-amount]", + Short: "Registers or updates a community pool rebate", + Long: strings.TrimSpace(`Registers a community pool rebate by specifying the rebate percentage (as a decimal) +and the amount liquid staked, denominated in the number of stTokens received. +E.g. to specify a 20% rebate, the rebate rate should be 0.2 + +If a 0.0 rebate or 0 token liquid stake is specified, the rebate will be deleted. + `), + Args: cobra.ExactArgs(3), + RunE: func(cmd *cobra.Command, args []string) (err error) { + chainId := args[0] + rebatePercentage, err := sdkmath.LegacyNewDecFromStr(args[1]) + if err != nil { + return fmt.Errorf("unable to parse rebate percentage: %s", err.Error()) + } + liquidStakedStTokenAmount, ok := sdkmath.NewIntFromString(args[2]) + if !ok { + return errors.New("unable to parse liquid stake amount") + } + + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := types.NewMsgSetCommunityPoolRebate( + clientCtx.GetFromAddress().String(), + chainId, + rebatePercentage, + liquidStakedStTokenAmount, + ) + if err := msg.ValidateBasic(); err != nil { + return err + } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} + +func CmdToggleTradeController() *cobra.Command { + cmd := &cobra.Command{ + Use: "toggle-trade-controller [trade-chain-id] [grant|revoke] [address]", + Short: "Submits an ICA tx to grant or revoke permissions to trade on behalf of the trade ICA", + Long: strings.TrimSpace(`Submits an ICA tx to grant or revoke permissions to trade on behalf of the trade ICA +Ex: +>>> strided tx toggle-trade-controller osmosis-1 grant osmoXXX + `), + Args: cobra.ExactArgs(3), + RunE: func(cmd *cobra.Command, args []string) (err error) { + chainId := args[0] + permissionChangeString := args[1] + address := args[2] + + permissionChangeInt, ok := types.AuthzPermissionChange_value[strings.ToUpper(permissionChangeString)] + if !ok { + return errors.New("invalid permission change, must be either 'grant' or 'revoke'") + } + permissionChange := types.AuthzPermissionChange(permissionChangeInt) + + legacy, err := cmd.Flags().GetBool(FlagLegacy) + if err != nil { + return err + } + + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := types.NewMsgToggleTradeController( + clientCtx.GetFromAddress().String(), + chainId, + permissionChange, + address, + legacy, + ) + if err := msg.ValidateBasic(); err != nil { + return err + } + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + cmd.Flags().Bool(FlagLegacy, false, "Use legacy osmosis swap message from gamm") + + return cmd +} diff --git a/x/stakeibc/client/cli/tx_test.go b/x/stakeibc/client/cli/tx_test.go new file mode 100644 index 00000000000..f1e013cf24c --- /dev/null +++ b/x/stakeibc/client/cli/tx_test.go @@ -0,0 +1,288 @@ +package cli_test + +import ( + "os" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/client/cli" +) + +func TestCmdLiquidStake(t *testing.T) { + args := []string{ + "banana", + "[lsm-token-denom]", + } + + cmd := cli.CmdLiquidStake() + ExecuteCLIExpectError(t, cmd, args, "can not convert string to int") +} + +func TestCmdLSMLiquidStake(t *testing.T) { + args := []string{ + "banana", + "[lsm-token-denom]", + } + + cmd := cli.CmdLSMLiquidStake() + ExecuteCLIExpectError(t, cmd, args, "can not convert string to int") +} + +func TestCmdRegisterHostZone(t *testing.T) { + t.Run("unbonding-period not a number", func(t *testing.T) { + args := []string{ + "[connection-id]", + "[host-denom]", + "[bech32prefix]", + "[ibc-denom]", + "[channel-id]", + "[unbonding-period]", + "1", + } + + cmd := cli.CmdRegisterHostZone() + ExecuteCLIExpectError(t, cmd, args, `strconv.ParseUint: parsing "[unbonding-period]": invalid syntax`) + }) + + t.Run("lsm-enabled not a boolean", func(t *testing.T) { + args := []string{ + "[connection-id]", + "[host-denom]", + "[bech32prefix]", + "[ibc-denom]", + "[channel-id]", + "0", + "2", + } + + cmd := cli.CmdRegisterHostZone() + ExecuteCLIExpectError(t, cmd, args, `strconv.ParseBool: parsing "2": invalid syntax`) + }) +} + +func TestCmdRedeemStake(t *testing.T) { + args := []string{ + "[amount]", + "[hostZoneID]", + "[receiver]", + } + + cmd := cli.CmdRedeemStake() + ExecuteCLIExpectError(t, cmd, args, `can not convert string to int: invalid type`) +} + +func TestCmdClaimUndelegatedTokens(t *testing.T) { + args := []string{ + "[host-zone]", + "[epoch]", + "[receiver]", + } + + cmd := cli.CmdClaimUndelegatedTokens() + ExecuteCLIExpectError(t, cmd, args, `unable to cast "[epoch]" of type string to uint64`) +} + +func TestCmdRebalanceValidators(t *testing.T) { + args := []string{ + "[host-zone]", + "[num-to-rebalance]", + } + + cmd := cli.CmdRebalanceValidators() + ExecuteCLIExpectError(t, cmd, args, `strconv.ParseUint: parsing "[num-to-rebalance]": invalid syntax`) +} + +func TestCmdAddValidators(t *testing.T) { + t.Run("no file", func(t *testing.T) { + args := []string{ + "[host-zone]", + "[validator-list-file]", + } + + cmd := cli.CmdAddValidators() + ExecuteCLIExpectError(t, cmd, args, `open [validator-list-file]: no such file or directory`) + }) + t.Run("empty file", func(t *testing.T) { + f, err := os.CreateTemp("", "") + require.NoError(t, err) + defer f.Close() + + args := []string{ + "[host-zone]", + f.Name(), + } + + cmd := cli.CmdAddValidators() + ExecuteCLIExpectError(t, cmd, args, `unexpected end of JSON input`) + }) + t.Run("non json file", func(t *testing.T) { + f, err := os.CreateTemp("", "") + require.NoError(t, err) + defer f.Close() + _, err = f.WriteString("This is not JSON") + require.NoError(t, err) + + args := []string{ + "[host-zone]", + f.Name(), + } + + cmd := cli.CmdAddValidators() + ExecuteCLIExpectError(t, cmd, args, `invalid character 'T' looking for beginning of value`) + }) + t.Run("wrong json format", func(t *testing.T) { + f, err := os.CreateTemp("", "") + require.NoError(t, err) + defer f.Close() + _, err = f.WriteString(`{"blabla_validator_weights":[{"address":"cosmosXXX","weight":1}]}`) + require.NoError(t, err) + + args := []string{ + "[host-zone]", + f.Name(), + } + + cmd := cli.CmdAddValidators() + ExecuteCLIExpectError(t, cmd, args, `invalid creator address (empty address string is not allowed): invalid address`) + }) +} + +func TestCmdChangeValidatorWeight(t *testing.T) { + args := []string{ + "[host-zone]", + "[address]", + "[weight]", + } + + cmd := cli.CmdChangeValidatorWeight() + ExecuteCLIExpectError(t, cmd, args, `unable to cast "[weight]" of type string to uint64`) +} + +func TestCmdChangeMultipleValidatorWeight(t *testing.T) { + t.Run("no file", func(t *testing.T) { + args := []string{ + "[host-zone]", + "[validator-list-file]", + } + + cmd := cli.CmdChangeMultipleValidatorWeight() + ExecuteCLIExpectError(t, cmd, args, `open [validator-list-file]: no such file or directory`) + }) + t.Run("empty file", func(t *testing.T) { + f, err := os.CreateTemp("", "") + require.NoError(t, err) + defer f.Close() + + args := []string{ + "[host-zone]", + f.Name(), + } + + cmd := cli.CmdChangeMultipleValidatorWeight() + ExecuteCLIExpectError(t, cmd, args, `unexpected end of JSON input`) + }) + t.Run("non json file", func(t *testing.T) { + f, err := os.CreateTemp("", "") + require.NoError(t, err) + defer f.Close() + _, err = f.WriteString("This is not JSON") + require.NoError(t, err) + + args := []string{ + "[host-zone]", + f.Name(), + } + + cmd := cli.CmdChangeMultipleValidatorWeight() + ExecuteCLIExpectError(t, cmd, args, `invalid character 'T' looking for beginning of value`) + }) + t.Run("wrong json format", func(t *testing.T) { + f, err := os.CreateTemp("", "") + require.NoError(t, err) + defer f.Close() + _, err = f.WriteString(`{"blabla_validator_weights":[{"address":"cosmosXXX","weight":1}]}`) + require.NoError(t, err) + + args := []string{ + "[host-zone]", + f.Name(), + } + + cmd := cli.CmdChangeMultipleValidatorWeight() + ExecuteCLIExpectError(t, cmd, args, `invalid creator address (empty address string is not allowed): invalid address`) + }) +} + +func TestCmdClearBalance(t *testing.T) { + args := []string{ + "[chain-id]", + "[amount]", + "[channel-id]", + } + + cmd := cli.CmdClearBalance() + ExecuteCLIExpectError(t, cmd, args, `can not convert string to int: invalid type`) +} + +func TestCmdUpdateInnerRedemptionRateBounds(t *testing.T) { + t.Run("invalid min-bound", func(t *testing.T) { + args := []string{ + "[chainid]", + "[min-bound]", + "[max-bound]", + } + + cmd := cli.CmdUpdateInnerRedemptionRateBounds() + assert.PanicsWithError(t, "failed to set decimal string with base 10: [min-bound]000000000000000000", func() { + ExecuteCLIExpectError(t, cmd, args, "") + }) + }) + t.Run("invalid max-bound", func(t *testing.T) { + args := []string{ + "[chainid]", + "0.123", + "[max-bound]", + } + + cmd := cli.CmdUpdateInnerRedemptionRateBounds() + assert.PanicsWithError(t, "failed to set decimal string with base 10: [max-bound]000000000000000000", func() { + ExecuteCLIExpectError(t, cmd, args, "") + }) + }) +} + +func TestCmdSetCommunityPoolRebate(t *testing.T) { + t.Run("invalid rebate-rate", func(t *testing.T) { + args := []string{ + "[chain-id]", + "[rebate-rate]", + "[liquid-staked-sttoken-amount]", + } + + cmd := cli.CmdSetCommunityPoolRebate() + ExecuteCLIExpectError(t, cmd, args, `unable to parse rebate percentage: failed to set decimal string with base 10: [rebate-rate]000000000000000000`) + }) + t.Run("invalid liquid-staked-sttoken-amount", func(t *testing.T) { + args := []string{ + "[chain-id]", + "0.123456789", + "[liquid-staked-sttoken-amount]", + } + + cmd := cli.CmdSetCommunityPoolRebate() + ExecuteCLIExpectError(t, cmd, args, `unable to parse liquid stake amount`) + }) +} + +func TestCmdToggleTradeController(t *testing.T) { + args := []string{ + "[trade-chain-id]", + "[grant|revoke]", + "[address]", + } + + cmd := cli.CmdToggleTradeController() + ExecuteCLIExpectError(t, cmd, args, `invalid permission change, must be either 'grant' or 'revoke'`) +} diff --git a/x/stakeibc/client/proposal_handler.go b/x/stakeibc/client/proposal_handler.go new file mode 100644 index 00000000000..fb62d33f0c1 --- /dev/null +++ b/x/stakeibc/client/proposal_handler.go @@ -0,0 +1,12 @@ +package client + +import ( + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/client/cli" + + govclient "github.com/cosmos/cosmos-sdk/x/gov/client" +) + +var ( + AddValidatorsProposalHandler = govclient.NewProposalHandler(cli.CmdAddValidatorsProposal) + ToggleLSMProposalHandler = govclient.NewProposalHandler(cli.CmdToggleLSMProposal) +) diff --git a/x/stakeibc/handler.go b/x/stakeibc/handler.go new file mode 100644 index 00000000000..90155bae7d6 --- /dev/null +++ b/x/stakeibc/handler.go @@ -0,0 +1,107 @@ +package stakeibc + +import ( + "fmt" + + errorsmod "cosmossdk.io/errors" + "github.com/cosmos/cosmos-sdk/baseapp" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/keeper" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// Handles stakeibc transactions +// TODO: Remove - no longer used since sdk 47 +func NewMessageHandler(k keeper.Keeper) baseapp.MsgServiceHandler { + msgServer := keeper.NewMsgServerImpl(k) + + return func(ctx sdk.Context, msg sdk.Msg) (*sdk.Result, error) { + ctx = ctx.WithEventManager(sdk.NewEventManager()) + _ = ctx + + switch msg := msg.(type) { + case *types.MsgLiquidStake: + res, err := msgServer.LiquidStake(ctx, msg) + return sdk.WrapServiceResult(ctx, res, err) + case *types.MsgLSMLiquidStake: + res, err := msgServer.LSMLiquidStake(ctx, msg) + return sdk.WrapServiceResult(ctx, res, err) + case *types.MsgClearBalance: + res, err := msgServer.ClearBalance(ctx, msg) + return sdk.WrapServiceResult(ctx, res, err) + case *types.MsgRegisterHostZone: + res, err := msgServer.RegisterHostZone(ctx, msg) + return sdk.WrapServiceResult(ctx, res, err) + case *types.MsgRedeemStake: + res, err := msgServer.RedeemStake(ctx, msg) + return sdk.WrapServiceResult(ctx, res, err) + case *types.MsgClaimUndelegatedTokens: + res, err := msgServer.ClaimUndelegatedTokens(ctx, msg) + return sdk.WrapServiceResult(ctx, res, err) + case *types.MsgRebalanceValidators: + res, err := msgServer.RebalanceValidators(ctx, msg) + return sdk.WrapServiceResult(ctx, res, err) + case *types.MsgAddValidators: + res, err := msgServer.AddValidators(ctx, msg) + return sdk.WrapServiceResult(ctx, res, err) + case *types.MsgChangeValidatorWeights: + res, err := msgServer.ChangeValidatorWeight(ctx, msg) + return sdk.WrapServiceResult(ctx, res, err) + case *types.MsgDeleteValidator: + res, err := msgServer.DeleteValidator(ctx, msg) + return sdk.WrapServiceResult(ctx, res, err) + case *types.MsgRestoreInterchainAccount: + res, err := msgServer.RestoreInterchainAccount(ctx, msg) + return sdk.WrapServiceResult(ctx, res, err) + case *types.MsgUpdateValidatorSharesExchRate: + res, err := msgServer.UpdateValidatorSharesExchRate(ctx, msg) + return sdk.WrapServiceResult(ctx, res, err) + case *types.MsgCalibrateDelegation: + res, err := msgServer.CalibrateDelegation(ctx, msg) + return sdk.WrapServiceResult(ctx, res, err) + case *types.MsgUpdateInnerRedemptionRateBounds: + res, err := msgServer.UpdateInnerRedemptionRateBounds(ctx, msg) + return sdk.WrapServiceResult(ctx, res, err) + case *types.MsgResumeHostZone: + res, err := msgServer.ResumeHostZone(ctx, msg) + return sdk.WrapServiceResult(ctx, res, err) + case *types.MsgCreateTradeRoute: + res, err := msgServer.CreateTradeRoute(ctx, msg) + return sdk.WrapServiceResult(ctx, res, err) + case *types.MsgDeleteTradeRoute: + res, err := msgServer.DeleteTradeRoute(ctx, msg) + return sdk.WrapServiceResult(ctx, res, err) + case *types.MsgUpdateTradeRoute: + res, err := msgServer.UpdateTradeRoute(ctx, msg) + return sdk.WrapServiceResult(ctx, res, err) + case *types.MsgSetCommunityPoolRebate: + res, err := msgServer.SetCommunityPoolRebate(ctx, msg) + return sdk.WrapServiceResult(ctx, res, err) + case *types.MsgToggleTradeController: + res, err := msgServer.ToggleTradeController(ctx, msg) + return sdk.WrapServiceResult(ctx, res, err) + default: + errMsg := fmt.Sprintf("unrecognized %s message type: %T", types.ModuleName, msg) + return nil, errorsmod.Wrap(sdkerrors.ErrUnknownRequest, errMsg) + } + } +} + +// Handles stakeibc gov proposals +func NewStakeibcProposalHandler(k keeper.Keeper) govtypes.Handler { + return func(ctx sdk.Context, content govtypes.Content) error { + switch c := content.(type) { + case *types.AddValidatorsProposal: + return k.AddValidatorsProposal(ctx, c) + case *types.ToggleLSMProposal: + return k.ToggleLSMProposal(ctx, c) + + default: + return errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "unrecognized stakeibc proposal content type: %T", c) + } + } +} diff --git a/x/stakeibc/ibc_middleware.go b/x/stakeibc/ibc_middleware.go new file mode 100644 index 00000000000..a0a5ea5a324 --- /dev/null +++ b/x/stakeibc/ibc_middleware.go @@ -0,0 +1,161 @@ +package stakeibc + +import ( + "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" + ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/keeper" +) + +var _ porttypes.Middleware = &IBCMiddleware{} + +type IBCMiddleware struct { + app porttypes.IBCModule + keeper keeper.Keeper +} + +func NewIBCMiddleware(app porttypes.IBCModule, k keeper.Keeper) IBCMiddleware { + return IBCMiddleware{ + app: app, + keeper: k, + } +} + +// OnChanOpenInit simply passes down the to next middleware stack +func (im IBCMiddleware) OnChanOpenInit( + ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID string, + channelID string, + channelCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, + version string, +) (string, error) { + return im.app.OnChanOpenInit(ctx, order, connectionHops, portID, channelID, channelCap, counterparty, version) +} + +// OnChanOpenTry simply passes down the to next middleware stack +func (im IBCMiddleware) OnChanOpenTry( + ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID, + channelID string, + chanCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, + counterpartyVersion string, +) (string, error) { + return im.app.OnChanOpenTry(ctx, order, connectionHops, portID, channelID, chanCap, counterparty, counterpartyVersion) +} + +// OnChanOpenAck stores the new ICA acccount addresses on the host zone and then passes to the next middleware stack +func (im IBCMiddleware) OnChanOpenAck( + ctx sdk.Context, + portID, + channelID string, + counterpartyChannelID string, + counterpartyVersion string, +) error { + im.keeper.Logger(ctx).Info(fmt.Sprintf("OnChanOpenAck: portID %s, channelID %s, counterpartyChannelID %s, counterpartyVersion %s", portID, channelID, counterpartyChannelID, counterpartyVersion)) + if err := im.keeper.OnChanOpenAck(ctx, portID, channelID); err != nil { + ctx.Logger().Error(fmt.Sprintf("Error during stakeibc OnChanOpenAck: %s", err.Error())) + return err + } + + // call underlying app's OnChanOpenAck + return im.app.OnChanOpenAck(ctx, portID, channelID, counterpartyChannelID, counterpartyVersion) +} + +// OnChanCloseConfirm simply passes down the to next middleware stack +func (im IBCMiddleware) OnChanCloseConfirm( + ctx sdk.Context, + portID, + channelID string, +) error { + return im.app.OnChanCloseConfirm(ctx, portID, channelID) +} + +// OnChanCloseInit simply passes down the to next middleware stack +func (im IBCMiddleware) OnChanCloseInit( + ctx sdk.Context, + portID, + channelID string, +) error { + return im.app.OnChanCloseInit(ctx, portID, channelID) +} + +// OnChanOpenConfirm simply passes down the to next middleware stack +func (im IBCMiddleware) OnChanOpenConfirm( + ctx sdk.Context, + portID, + channelID string, +) error { + return im.app.OnChanOpenConfirm(ctx, portID, channelID) +} + +// OnAcknowledgementPacket simply passes down the to next middleware stack +// The Ack handling and routing is managed by icacallbacks +func (im IBCMiddleware) OnAcknowledgementPacket( + ctx sdk.Context, + packet channeltypes.Packet, + acknowledgement []byte, + relayer sdk.AccAddress, +) error { + return im.app.OnAcknowledgementPacket(ctx, packet, acknowledgement, relayer) +} + +// OnTimeoutPacket simply passes down the to next middleware stack +// The Ack handling and routing is managed by icacallbacks +func (im IBCMiddleware) OnTimeoutPacket( + ctx sdk.Context, + packet channeltypes.Packet, + relayer sdk.AccAddress, +) error { + return im.app.OnTimeoutPacket(ctx, packet, relayer) +} + +// OnRecvPacket simply passes down the to next middleware stack +func (im IBCMiddleware) OnRecvPacket( + ctx sdk.Context, + packet channeltypes.Packet, + relayer sdk.AccAddress, +) ibcexported.Acknowledgement { + return im.app.OnRecvPacket(ctx, packet, relayer) +} + +// SendPacket implements the ICS4 Wrapper interface but is not utilized in the ICA stack +func (im IBCMiddleware) SendPacket( + ctx sdk.Context, + chanCap *capabilitytypes.Capability, + sourcePort string, + sourceChannel string, + timeoutHeight clienttypes.Height, + timeoutTimestamp uint64, + data []byte, +) (sequence uint64, err error) { + panic("UNIMPLEMENTED") +} + +// WriteAcknowledgement implements the ICS4 Wrapper interface +// but is not utilized in the bottom of ICA stack +func (im IBCMiddleware) WriteAcknowledgement( + ctx sdk.Context, + chanCap *capabilitytypes.Capability, + packet ibcexported.PacketI, + ack ibcexported.Acknowledgement, +) error { + panic("UNIMPLEMENTED") +} + +// GetAppVersion implements the ICS4 Wrapper interface +// but is not utilized in the bottom of ICA stack +func (im IBCMiddleware) GetAppVersion(ctx sdk.Context, portID, channelID string) (string, bool) { + panic("UNIMPLEMENTED") +} diff --git a/x/stakeibc/keeper/abci.go b/x/stakeibc/keeper/abci.go new file mode 100644 index 00000000000..631fbaaeae0 --- /dev/null +++ b/x/stakeibc/keeper/abci.go @@ -0,0 +1,47 @@ +package keeper + +import ( + "fmt" + "time" + + "github.com/cosmos/cosmos-sdk/telemetry" + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// BeginBlocker of stakeibc module +func (k Keeper) BeginBlocker(ctx sdk.Context) { + defer telemetry.ModuleMeasureSince(types.ModuleName, time.Now(), telemetry.MetricKeyBeginBlocker) + + // Iterate over all host zones and verify redemption rate + for _, hz := range k.GetAllHostZone(ctx) { + rrSafe, err := k.IsRedemptionRateWithinSafetyBounds(ctx, hz) + if !rrSafe { + hz.Halted = true + k.SetHostZone(ctx, hz) + + // set rate limit on stAsset + stDenom := types.StAssetDenomFromHostZoneDenom(hz.HostDenom) + k.RatelimitKeeper.AddDenomToBlacklist(ctx, stDenom) + + k.Logger(ctx).Error(fmt.Sprintf("[INVARIANT BROKEN!!!] %s's RR is %s. ERR: %v", hz.GetChainId(), hz.RedemptionRate.String(), err.Error())) + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeHostZoneHalt, + sdk.NewAttribute(types.AttributeKeyHostZone, hz.ChainId), + sdk.NewAttribute(types.AttributeKeyRedemptionRate, hz.RedemptionRate.String()), + ), + ) + } + } + + k.AssertStrideAndDayEpochRelationship(ctx) +} + +func (k Keeper) EndBlocker(ctx sdk.Context) { + // Submit an IBC transfer or detokenization ICA for all queued LSM Deposits across each host + k.TransferAllLSMDeposits(ctx) + k.DetokenizeAllLSMDeposits(ctx) +} diff --git a/x/stakeibc/keeper/claim.go b/x/stakeibc/keeper/claim.go new file mode 100644 index 00000000000..2ebcd49da0f --- /dev/null +++ b/x/stakeibc/keeper/claim.go @@ -0,0 +1,131 @@ +package keeper + +import ( + "context" + "fmt" + + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + bankTypes "github.com/cosmos/cosmos-sdk/x/bank/types" + "github.com/cosmos/gogoproto/proto" + + epochstypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +type IcaTx struct { + ConnectionId string + Msgs []proto.Message + ICAAccountType types.ICAAccountType + Timeout uint64 +} + +func (k msgServer) ClaimUndelegatedTokens(goCtx context.Context, msg *types.MsgClaimUndelegatedTokens) (*types.MsgClaimUndelegatedTokensResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + k.Logger(ctx).Info(fmt.Sprintf("ClaimUndelegatedTokens %v", msg)) + userRedemptionRecord, err := k.GetClaimableRedemptionRecord(ctx, msg) + if err != nil { + return nil, errorsmod.Wrapf(err, "unable to find claimable redemption record for msg %+v", msg) + } + + // Confirm host zone is not halted + if _, err = k.GetActiveHostZone(ctx, msg.HostZoneId); err != nil { + return nil, err + } + + icaTx, err := k.GetRedemptionTransferMsg(ctx, userRedemptionRecord, msg.HostZoneId) + if err != nil { + return nil, errorsmod.Wrap(err, "unable to build redemption transfer message") + } + + // add callback data + claimCallback := types.ClaimCallback{ + UserRedemptionRecordId: userRedemptionRecord.Id, + ChainId: msg.HostZoneId, + EpochNumber: msg.Epoch, + } + marshalledCallbackArgs, err := k.MarshalClaimCallbackArgs(ctx, claimCallback) + if err != nil { + return nil, errorsmod.Wrap(err, "unable to marshal claim callback args") + } + _, err = k.SubmitTxs(ctx, icaTx.ConnectionId, icaTx.Msgs, icaTx.ICAAccountType, icaTx.Timeout, ICACallbackID_Claim, marshalledCallbackArgs) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Submit tx error: %s", err.Error())) + return nil, errorsmod.Wrap(err, "unable to submit ICA redemption tx") + } + + // Set claimIsPending to true, so that the record can't be double claimed + userRedemptionRecord.ClaimIsPending = true + k.RecordsKeeper.SetUserRedemptionRecord(ctx, *userRedemptionRecord) + + return &types.MsgClaimUndelegatedTokensResponse{}, nil +} + +func (k Keeper) GetClaimableRedemptionRecord(ctx sdk.Context, msg *types.MsgClaimUndelegatedTokens) (*recordstypes.UserRedemptionRecord, error) { + // grab the UserRedemptionRecord from the store + userRedemptionRecordKey := recordstypes.UserRedemptionRecordKeyFormatter(msg.HostZoneId, msg.Epoch, msg.Receiver) + userRedemptionRecord, found := k.RecordsKeeper.GetUserRedemptionRecord(ctx, userRedemptionRecordKey) + if !found { + return nil, errorsmod.Wrapf(types.ErrInvalidUserRedemptionRecord, + "user redemption record %s not found on host zone %s", userRedemptionRecordKey, msg.HostZoneId) + } + + // check that the record is claimable + hostZoneUnbonding, found := k.RecordsKeeper.GetHostZoneUnbondingByChainId(ctx, userRedemptionRecord, msg.HostZoneId) + if !found { + return nil, errorsmod.Wrapf(types.ErrInvalidUserRedemptionRecord, + "host zone unbonding record %s not found on host zone %s", userRedemptionRecordKey, msg.HostZoneId) + } + // records associated with host zone unbondings are claimable after the host zone unbonding tokens have been CLAIMABLE to the redemption account + if hostZoneUnbonding.Status != recordstypes.HostZoneUnbonding_CLAIMABLE { + return nil, errorsmod.Wrapf(types.ErrInvalidUserRedemptionRecord, + "user redemption record %s is not claimable, host zone unbonding has status: %s, requires status CLAIMABLE", + userRedemptionRecord.Id, hostZoneUnbonding.Status) + } + // records that have claimIsPending set to True have already been claimed (and are pending an ack) + if userRedemptionRecord.ClaimIsPending { + return nil, errorsmod.Wrapf(types.ErrInvalidUserRedemptionRecord, + "user redemption record %s is not claimable, pending ack", userRedemptionRecord.Id) + } + return &userRedemptionRecord, nil +} + +func (k Keeper) GetRedemptionTransferMsg(ctx sdk.Context, userRedemptionRecord *recordstypes.UserRedemptionRecord, hostZoneId string) (*IcaTx, error) { + // grab necessary fields to construct ICA call + hostZone, found := k.GetHostZone(ctx, hostZoneId) + if !found { + return nil, errorsmod.Wrapf(types.ErrInvalidHostZone, "Host zone %s not found", hostZoneId) + } + if hostZone.RedemptionIcaAddress == "" { + return nil, errorsmod.Wrapf(types.ErrICAAccountNotFound, "Redemption account not found for host zone %s", hostZoneId) + } + + var msgs []proto.Message + rrAmt := userRedemptionRecord.NativeTokenAmount + msgs = append(msgs, &bankTypes.MsgSend{ + FromAddress: hostZone.RedemptionIcaAddress, + ToAddress: userRedemptionRecord.Receiver, + Amount: sdk.NewCoins(sdk.NewCoin(userRedemptionRecord.Denom, rrAmt)), + }) + + // Give claims a 10 minute timeout + // TODO [optimization]: Remove reference to epoch time (make timeout relative to block time) + epochTracker, found := k.GetEpochTracker(ctx, epochstypes.STRIDE_EPOCH) + if !found { + return nil, errorsmod.Wrapf(types.ErrEpochNotFound, "epoch tracker not found for epoch %s", epochstypes.STRIDE_EPOCH) + } + icaTimeOutNanos := k.GetParam(ctx, types.KeyICATimeoutNanos) + nextEpochStarttime := epochTracker.NextEpochStartTime + timeout := nextEpochStarttime + icaTimeOutNanos + + icaTx := IcaTx{ + ConnectionId: hostZone.GetConnectionId(), + Msgs: msgs, + ICAAccountType: types.ICAAccountType_REDEMPTION, + Timeout: timeout, + } + + return &icaTx, nil +} diff --git a/x/stakeibc/keeper/claim_test.go b/x/stakeibc/keeper/claim_test.go new file mode 100644 index 00000000000..736ca837609 --- /dev/null +++ b/x/stakeibc/keeper/claim_test.go @@ -0,0 +1,208 @@ +package keeper_test + +import ( + "strings" + + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + proto "github.com/cosmos/gogoproto/proto" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + _ "github.com/stretchr/testify/suite" + + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + recordtypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/keeper" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +type ClaimUndelegatedState struct { + hostZone types.HostZone + redemptionRecordId string + redemptionRecord recordtypes.UserRedemptionRecord +} + +type ClaimUndelegatedTestCase struct { + validMsg types.MsgClaimUndelegatedTokens + initialState ClaimUndelegatedState + expectedIcaMsg keeper.IcaTx +} + +func (s *KeeperTestSuite) SetupClaimUndelegatedTokens() ClaimUndelegatedTestCase { + redemptionIcaOwner := "GAIA.REDEMPTION" + s.CreateICAChannel(redemptionIcaOwner) + + epochNumber := uint64(1) + senderAddr := "stride_SENDER" + receiverAddr := "cosmos_RECEIVER" + redemptionAddr := s.IcaAddresses[redemptionIcaOwner] + redemptionRecordId := recordtypes.UserRedemptionRecordKeyFormatter(HostChainId, epochNumber, receiverAddr) + + hostZone := types.HostZone{ + ChainId: HostChainId, + RedemptionIcaAddress: redemptionAddr, + ConnectionId: ibctesting.FirstConnectionID, + } + + redemptionRecord := recordtypes.UserRedemptionRecord{ + Id: redemptionRecordId, + HostZoneId: HostChainId, + EpochNumber: epochNumber, + Receiver: receiverAddr, + Denom: "uatom", + ClaimIsPending: false, + NativeTokenAmount: sdkmath.NewInt(1000), + } + redemptionAmount := sdk.NewCoins(sdk.NewCoin(redemptionRecord.Denom, sdkmath.NewInt(1000))) + + epochTracker := types.EpochTracker{ + EpochIdentifier: epochtypes.STRIDE_EPOCH, + EpochNumber: epochNumber, + NextEpochStartTime: uint64(s.Coordinator.CurrentTime.UnixNano() + 30_000_000_000), // dictates timeouts + } + + hostZoneUnbonding1 := recordtypes.HostZoneUnbonding{ + HostZoneId: HostChainId, + Status: recordtypes.HostZoneUnbonding_CLAIMABLE, + UserRedemptionRecords: []string{redemptionRecordId}, + NativeTokenAmount: sdkmath.NewInt(1_000_000), + } + epochUnbondingRecord := recordtypes.EpochUnbondingRecord{ + EpochNumber: epochNumber, + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{&hostZoneUnbonding1}, + } + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, epochUnbondingRecord) + + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, epochTracker) + s.App.RecordsKeeper.SetUserRedemptionRecord(s.Ctx, redemptionRecord) + + return ClaimUndelegatedTestCase{ + validMsg: types.MsgClaimUndelegatedTokens{ + Creator: senderAddr, + HostZoneId: HostChainId, + Epoch: epochNumber, + Receiver: receiverAddr, + }, + initialState: ClaimUndelegatedState{ + hostZone: hostZone, + redemptionRecordId: redemptionRecordId, + redemptionRecord: redemptionRecord, + }, + expectedIcaMsg: keeper.IcaTx{ + Msgs: []proto.Message{&banktypes.MsgSend{ + FromAddress: redemptionAddr, + ToAddress: receiverAddr, + Amount: redemptionAmount, + }}, + ICAAccountType: types.ICAAccountType_REDEMPTION, + Timeout: uint64(types.DefaultICATimeoutNanos), + }, + } +} + +func (s *KeeperTestSuite) TestClaimUndelegatedTokens_Successful() { + tc := s.SetupClaimUndelegatedTokens() + redemptionRecordId := tc.initialState.redemptionRecordId + expectedRedemptionRecord := tc.initialState.redemptionRecord + + _, err := s.GetMsgServer().ClaimUndelegatedTokens(s.Ctx, &tc.validMsg) + s.Require().NoError(err, "claim undelegated tokens") + + actualRedemptionRecord, found := s.App.RecordsKeeper.GetUserRedemptionRecord(s.Ctx, redemptionRecordId) + s.Require().True(found, "redemption record found") + s.Require().True(actualRedemptionRecord.ClaimIsPending, "redemption record should be pending") + s.Require().Equal(expectedRedemptionRecord.NativeTokenAmount, actualRedemptionRecord.NativeTokenAmount, "record has expected amount") + // TODO: check callback data here +} + +func (s *KeeperTestSuite) TestClaimUndelegatedTokens_SuccessfulMsgSendICA() { + tc := s.SetupClaimUndelegatedTokens() + redemptionRecord := tc.initialState.redemptionRecord + + icaTx, err := s.App.StakeibcKeeper.GetRedemptionTransferMsg(s.Ctx, &redemptionRecord, redemptionRecord.HostZoneId) + msgs := icaTx.Msgs + s.Require().NoError(err, "get redemption transfer msgs error") + s.Require().Equal(1, len(msgs), "number of transfer messages") + s.Require().Equal(tc.expectedIcaMsg.Msgs, msgs, "transfer message") +} + +func (s *KeeperTestSuite) TestClaimUndelegatedTokens_NoUserRedemptionRecord() { + tc := s.SetupClaimUndelegatedTokens() + // Remove the user redemption record + s.App.RecordsKeeper.RemoveUserRedemptionRecord(s.Ctx, tc.initialState.redemptionRecordId) + + _, err := s.GetMsgServer().ClaimUndelegatedTokens(s.Ctx, &tc.validMsg) + s.Require().ErrorContains(err, "unable to find claimable redemption record") +} + +func (s *KeeperTestSuite) TestClaimUndelegatedTokens_RecordNotClaimable() { + tc := s.SetupClaimUndelegatedTokens() + // Mark redemption record as not claimable + alreadyClaimedRedemptionRecord := tc.initialState.redemptionRecord + alreadyClaimedRedemptionRecord.ClaimIsPending = true + s.App.RecordsKeeper.SetUserRedemptionRecord(s.Ctx, alreadyClaimedRedemptionRecord) + + _, err := s.GetMsgServer().ClaimUndelegatedTokens(s.Ctx, &tc.validMsg) + s.Require().ErrorContains(err, "user redemption record GAIA.1.cosmos_RECEIVER is not claimable") +} + +func (s *KeeperTestSuite) TestClaimUndelegatedTokens_RecordNotFound() { + tc := s.SetupClaimUndelegatedTokens() + // Change host zone in message + invalidMsg := tc.validMsg + invalidMsg.HostZoneId = "fake_host_zone" + + _, err := s.GetMsgServer().ClaimUndelegatedTokens(s.Ctx, &invalidMsg) + s.Require().ErrorContains(err, "user redemption record fake_host_zone.1.cosmos_RECEIVER not found on host zone fake_host_zone") +} + +func (s *KeeperTestSuite) TestClaimUndelegatedTokens_HostZoneNotFound() { + tc := s.SetupClaimUndelegatedTokens() + // Change host zone in message + invalidMsg := tc.validMsg + invalidMsg.HostZoneId = "fake_host_zone" + + badRedemptionRecordId := strings.Replace(tc.initialState.redemptionRecordId, "GAIA", "fake_host_zone", 1) + badRedemptionRecord := tc.initialState.redemptionRecord + badRedemptionRecord.Id = badRedemptionRecordId + s.App.RecordsKeeper.SetUserRedemptionRecord(s.Ctx, badRedemptionRecord) + + _, err := s.App.StakeibcKeeper.GetRedemptionTransferMsg(s.Ctx, &badRedemptionRecord, invalidMsg.HostZoneId) + s.Require().EqualError(err, "Host zone fake_host_zone not found: host zone not registered") +} + +func (s *KeeperTestSuite) TestClaimUndelegatedTokens_NoRedemptionAccount() { + tc := s.SetupClaimUndelegatedTokens() + // Remove redemption account from host zone + hostZone := tc.initialState.hostZone + hostZone.RedemptionIcaAddress = "" + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + _, err := s.App.StakeibcKeeper.GetRedemptionTransferMsg(s.Ctx, &tc.initialState.redemptionRecord, tc.validMsg.HostZoneId) + s.Require().ErrorContains(err, "Redemption account not found for host zone GAIA") +} + +func (s *KeeperTestSuite) TestClaimUndelegatedTokens_NoEpochTracker() { + tc := s.SetupClaimUndelegatedTokens() + s.App.StakeibcKeeper.RemoveEpochTracker(s.Ctx, epochtypes.STRIDE_EPOCH) + + _, err := s.GetMsgServer().ClaimUndelegatedTokens(s.Ctx, &tc.validMsg) + s.Require().ErrorContains(err, "epoch tracker not found for epoch stride_epoch") +} + +func (s *KeeperTestSuite) TestClaimUndelegatedTokens_HzuNotStatusTransferred() { + tc := s.SetupClaimUndelegatedTokens() + + // update the hzu status to not transferred + epochUnbondingRecord, found := s.App.RecordsKeeper.GetEpochUnbondingRecord(s.Ctx, tc.validMsg.Epoch) + s.Require().True(found, "epoch unbonding record found") + updatedHzu := epochUnbondingRecord.HostZoneUnbondings[0] + updatedHzu.Status = recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE + newEpochUnbondingRecord, err := s.App.RecordsKeeper.AddHostZoneToEpochUnbondingRecord(s.Ctx, tc.validMsg.Epoch, tc.validMsg.HostZoneId, *updatedHzu) + s.Require().NoError(err, "epoch unbonding record updated") + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, newEpochUnbondingRecord) + + _, err = s.GetMsgServer().ClaimUndelegatedTokens(s.Ctx, &tc.validMsg) + s.Require().ErrorContains(err, "host zone unbonding has status: EXIT_TRANSFER_QUEUE, requires status CLAIMABLE") +} diff --git a/x/stakeibc/keeper/community_pool.go b/x/stakeibc/keeper/community_pool.go new file mode 100644 index 00000000000..ea96e83c38f --- /dev/null +++ b/x/stakeibc/keeper/community_pool.go @@ -0,0 +1,311 @@ +package keeper + +import ( + "fmt" + "strings" + "time" + + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/bech32" + bankv3types "github.com/cosmos/cosmos-sdk/x/bank/migrations/v3" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + disttypes "github.com/cosmos/cosmos-sdk/x/distribution/types" + + "github.com/cosmos/gogoproto/proto" + + "github.com/osmosis-labs/osmosis/v27/utils" + epochstypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// For each hostZone with a valid community pool, trigger the ICQs and ICAs to transfer tokens from DepositICA or back to ReturnICA +// Since ICQs and ICAs take time to complete, it is almost certain tokens swept in and processed will be swept out in a later epoch +func (k Keeper) ProcessAllCommunityPoolTokens(ctx sdk.Context) { + hostZones := k.GetAllActiveHostZone(ctx) + for _, hostZone := range hostZones { + if hostZone.CommunityPoolDepositIcaAddress == "" || + hostZone.CommunityPoolStakeHoldingAddress == "" || + hostZone.CommunityPoolRedeemHoldingAddress == "" || + hostZone.CommunityPoolReturnIcaAddress == "" { + continue + } + + // stDenom is the ibc denom on hostZone when the hostZone's native denom is staked + denom := hostZone.HostDenom + stIbcDenom, err := k.GetStIbcDenomOnHostZone(ctx, hostZone) + if err != nil { + k.Logger(ctx).Error(utils.LogWithHostZone(hostZone.ChainId, "Unable to get stToken ibc denom - %s", err.Error())) + continue + } + + /****** Stage 1: Query deposit ICA for denom/stDenom, Transfer tokens to stride *******/ + + // ICQ for the host denom of the chain, these are tokens the pool wants staked + err = k.QueryCommunityPoolIcaBalance(ctx, hostZone, types.ICAAccountType_COMMUNITY_POOL_DEPOSIT, denom) + if err != nil { + k.Logger(ctx).Error(utils.LogWithHostZone(hostZone.ChainId, + "Failed to submit ICQ for native denom %s in deposit ICA - %s", denom, err.Error())) + } + // ICQ for staked tokens of the host denom, these are tokens the pool wants redeemed + err = k.QueryCommunityPoolIcaBalance(ctx, hostZone, types.ICAAccountType_COMMUNITY_POOL_DEPOSIT, stIbcDenom) + if err != nil { + k.Logger(ctx).Error(utils.LogWithHostZone(hostZone.ChainId, + "Failed to submit ICQ for stHostDenom %s in deposit ICA - %s", stIbcDenom, err.Error())) + } + + /****** Stage 2: LiquidStake denom and transfer to return ICA, or RedeemStake stDenom *******/ + + // LiquidStake tokens in the stake holding address and transfer to the return ica + if err = k.LiquidStakeCommunityPoolTokens(ctx, hostZone); err != nil { + k.Logger(ctx).Error(utils.LogWithHostZone(hostZone.ChainId, + "Failed to liquid staking and transfer community pool tokens in stake holding address - %s", err.Error())) + } + // RedeemStake tokens in the redeem holding address, in 30 days they claim to the return ica + if err = k.RedeemCommunityPoolTokens(ctx, hostZone); err != nil { + k.Logger(ctx).Error(utils.LogWithHostZone(hostZone.ChainId, + "Failed to redeeming stTokens in redeem holding address - %s", err.Error())) + } + + /****** Stage 3: Query return ICA for denom/stDenom, FundCommunityPool from return ICA *******/ + + err = k.QueryCommunityPoolIcaBalance(ctx, hostZone, types.ICAAccountType_COMMUNITY_POOL_RETURN, denom) + if err != nil { + k.Logger(ctx).Error(utils.LogWithHostZone(hostZone.ChainId, + "Failed to submit ICQ for native denom %s in return ICA - %s", denom, err.Error())) + } + err = k.QueryCommunityPoolIcaBalance(ctx, hostZone, types.ICAAccountType_COMMUNITY_POOL_RETURN, stIbcDenom) + if err != nil { + k.Logger(ctx).Error(utils.LogWithHostZone(hostZone.ChainId, + "Failed to submit ICQ for stHostDenom %s in return ICA - %s", stIbcDenom, err.Error())) + } + } +} + +// ICQ specific denom for balance in the deposit ICA or return ICA on the community pool host zone +// Depending on account type and denom, discovered tokens are transferred to Stride or funded to the pool +func (k Keeper) QueryCommunityPoolIcaBalance( + ctx sdk.Context, + hostZone types.HostZone, + icaType types.ICAAccountType, + denom string, +) error { + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, + "Building ICQ for %s balance in community pool %s address", denom, icaType.String())) + + var icaAddress string + switch icaType { + case types.ICAAccountType_COMMUNITY_POOL_DEPOSIT: + icaAddress = hostZone.CommunityPoolDepositIcaAddress + case types.ICAAccountType_COMMUNITY_POOL_RETURN: + icaAddress = hostZone.CommunityPoolReturnIcaAddress + default: + return errorsmod.Wrapf(types.ErrICAAccountNotFound, "icaType must be either deposit or return!") + } + + // Verify a valid ica address exists for this host zone + if icaAddress == "" { + return errorsmod.Wrapf(types.ErrICAAccountNotFound, "no address of type %s found for %s", + icaType.String(), hostZone.ChainId) + } + + _, addressBz, err := bech32.DecodeAndConvert(icaAddress) + if err != nil { + return errorsmod.Wrapf(err, "invalid %s address, could not decode (%s)", + icaType.String(), icaAddress) + } + queryData := append(bankv3types.CreateAccountBalancesPrefix(addressBz), []byte(denom)...) + + // The response might be a coin, or might just be an int depending on sdk version + // Since we need the denom later, store the denom as callback data for the query + callbackData := types.CommunityPoolBalanceQueryCallback{ + IcaType: icaType, + Denom: denom, + } + callbackDataBz, err := proto.Marshal(&callbackData) + if err != nil { + return errorsmod.Wrapf(err, "can't marshal community pool balance callback data %+v", callbackData) + } + + // Timeout query at end of epoch + strideEpochTracker, found := k.GetEpochTracker(ctx, epochstypes.STRIDE_EPOCH) + if !found { + return errorsmod.Wrapf(types.ErrEpochNotFound, "epoch %s not found", epochstypes.STRIDE_EPOCH) + } + timeout := time.Unix(0, utils.UintToInt(strideEpochTracker.NextEpochStartTime)) + timeoutDuration := timeout.Sub(ctx.BlockTime()) + + // Submit the ICQ for the withdrawal account balance + query := icqtypes.Query{ + ChainId: hostZone.ChainId, + ConnectionId: hostZone.ConnectionId, + QueryType: icqtypes.BANK_STORE_QUERY_WITH_PROOF, + RequestData: queryData, + CallbackModule: types.ModuleName, + CallbackId: ICQCallbackID_CommunityPoolIcaBalance, + CallbackData: callbackDataBz, + TimeoutDuration: timeoutDuration, + TimeoutPolicy: icqtypes.TimeoutPolicy_REJECT_QUERY_RESPONSE, + } + if err := k.InterchainQueryKeeper.SubmitICQRequest(ctx, query, false); err != nil { + return errorsmod.Wrapf(err, "Error submitting query for pool ica balance") + } + + return nil +} + +// Liquid stake all native tokens in the stake holding address +func (k Keeper) LiquidStakeCommunityPoolTokens(ctx sdk.Context, hostZone types.HostZone) error { + // Get the number of native tokens in the stake address + // The native tokens will be an ibc denom since they've been transferred to stride + communityPoolStakeAddress, err := sdk.AccAddressFromBech32(hostZone.CommunityPoolStakeHoldingAddress) + if err != nil { + return err + } + nativeTokens := k.bankKeeper.GetBalance(ctx, communityPoolStakeAddress, hostZone.IbcDenom) + + // If there aren't enough tokens, do nothing + // (consider specifying a minimum here) + if nativeTokens.Amount.LTE(sdkmath.ZeroInt()) { + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, "No community pool tokens to liquid stake")) + return nil + } + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, "Liquid staking community pool tokens: %+v", nativeTokens)) + + // TODO: Move LS function to keeper method instead of message server + // Liquid stake the balance in the stake holding account + msgServer := NewMsgServerImpl(k) + liquidStakeRequest := types.MsgLiquidStake{ + Creator: hostZone.CommunityPoolStakeHoldingAddress, + Amount: nativeTokens.Amount, + HostDenom: hostZone.HostDenom, + } + resp, err := msgServer.LiquidStake(ctx, &liquidStakeRequest) + if err != nil { + return errorsmod.Wrap(err, "failed to liquid stake community pool tokens") + } + + // If the liquid stake was successful, transfer the stTokens to the return ICA + return k.TransferHoldingToCommunityPoolReturn(ctx, hostZone, resp.StToken) +} + +// Redeem all the stTokens in the redeem holding address +func (k Keeper) RedeemCommunityPoolTokens(ctx sdk.Context, hostZone types.HostZone) error { + // Get the number of stTokens in the redeem address + communityPoolRedeemAddress, err := sdk.AccAddressFromBech32(hostZone.CommunityPoolRedeemHoldingAddress) + if err != nil { + return err + } + stDenom := types.StAssetDenomFromHostZoneDenom(hostZone.HostDenom) + stTokens := k.bankKeeper.GetBalance(ctx, communityPoolRedeemAddress, stDenom) + + // If there aren't enough tokens, do nothing + // (consider a greater than zero minimum threshold to avoid extra transfers) + if stTokens.Amount.LTE(sdkmath.ZeroInt()) { + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, "No community pool tokens to redeem")) + return nil + } + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, "Redeeming community pool tokens: %+v", stTokens)) + + // TODO: Move Redeem function to keeper method instead of message server + // Redeem the stTokens in the redeem holding account + // The return ICA address will be the recipient of the claim + msgServer := NewMsgServerImpl(k) + redeemStakeRequest := types.MsgRedeemStake{ + Creator: hostZone.CommunityPoolRedeemHoldingAddress, + Amount: stTokens.Amount, + HostZone: hostZone.ChainId, + Receiver: hostZone.CommunityPoolReturnIcaAddress, + } + if _, err := msgServer.RedeemStake(ctx, &redeemStakeRequest); err != nil { + return errorsmod.Wrap(err, "failed to redeem community pool tokens") + } + + return nil +} + +// Builds a msg to send funds to a community pool +// If the community pool treasury address is specified on the host zone, the tokens are bank sent there +// Otherwise, a MsgFundCommunityPool is used to send tokens to the default community pool address +func (k Keeper) BuildFundCommunityPoolMsg( + ctx sdk.Context, + hostZone types.HostZone, + tokens sdk.Coins, + senderAccountType types.ICAAccountType, +) (fundMsg []proto.Message, err error) { + // Get the sender ICA address based on the account type + var sender string + switch senderAccountType { + case types.ICAAccountType_COMMUNITY_POOL_RETURN: + sender = hostZone.CommunityPoolReturnIcaAddress + case types.ICAAccountType_WITHDRAWAL: + sender = hostZone.WithdrawalIcaAddress + default: + return nil, errorsmod.Wrapf(types.ErrICATxFailed, + "fund community pool ICA can only be initiated from either the community pool return or withdrawal ICA account") + } + senderAccountString := strings.ToLower(senderAccountType.String()) + + // If the community pool treasury address is specified, bank send there + if hostZone.CommunityPoolTreasuryAddress != "" { + fundMsg = []proto.Message{&banktypes.MsgSend{ + FromAddress: sender, + ToAddress: hostZone.CommunityPoolTreasuryAddress, + Amount: tokens, + }} + k.Logger(ctx).Info(fmt.Sprintf("Preparing MsgBankSend of %v from the %s ICA account to the community pool treasury", + tokens.String(), senderAccountString)) + } else { + // Otherwise, call MsgFundCommunityPool + fundMsg = []proto.Message{&disttypes.MsgFundCommunityPool{ + Amount: tokens, + Depositor: sender, + }} + k.Logger(ctx).Info(fmt.Sprintf("Preparing MsgFundCommunityPool of %v from the %s ICA account", + tokens.String(), senderAccountString)) + } + + return fundMsg, nil +} + +// Using tokens in the CommunityPoolReturnIcaAddress, trigger ICA tx to fund community pool +// Note: The denom of the passed in token has to be the denom which exists on the hostZone not Stride +func (k Keeper) FundCommunityPool( + ctx sdk.Context, + hostZone types.HostZone, + token sdk.Coin, + senderAccountType types.ICAAccountType, +) error { + msgs, err := k.BuildFundCommunityPoolMsg(ctx, hostZone, sdk.NewCoins(token), senderAccountType) + if err != nil { + return err + } + + // Timeout the ICA at the end of the epoch + strideEpochTracker, found := k.GetEpochTracker(ctx, epochstypes.STRIDE_EPOCH) + if !found { + return errorsmod.Wrapf(types.ErrEpochNotFound, "epoch %s not found", epochstypes.STRIDE_EPOCH) + } + timeoutTimestamp := uint64(strideEpochTracker.NextEpochStartTime) + + // No need to build ICA callback data or input an ICA callback method + icaCallbackId := "" + var icaCallbackData []byte + + // Send the transaction through SubmitTx to kick off ICA command + _, err = k.SubmitTxs(ctx, + hostZone.ConnectionId, + msgs, + senderAccountType, + timeoutTimestamp, + icaCallbackId, + icaCallbackData) + if err != nil { + return errorsmod.Wrapf(err, "Failed to SubmitTxs for FundCommunityPool, Messages: %+v", msgs) + } + + return nil +} diff --git a/x/stakeibc/keeper/community_pool_test.go b/x/stakeibc/keeper/community_pool_test.go new file mode 100644 index 00000000000..17dc4040ff8 --- /dev/null +++ b/x/stakeibc/keeper/community_pool_test.go @@ -0,0 +1,535 @@ +package keeper_test + +import ( + "time" + + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + disttypes "github.com/cosmos/cosmos-sdk/x/distribution/types" + "github.com/cosmos/gogoproto/proto" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + recordtypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/keeper" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// ----------------------------- +// Query Community Pool Balances +// ----------------------------- + +type QueryCommunityPoolBalanceTestCase struct { + hostZone types.HostZone + timeoutDuration time.Duration + expectedTimeout uint64 +} + +func (s *KeeperTestSuite) SetupQueryCommunityPoolBalance(icaAccountType types.ICAAccountType) QueryCommunityPoolBalanceTestCase { + // We need to register the transfer channel to initialize the light client state + s.CreateTransferChannel(HostChainId) + + // Create host zone + // We must use valid addresses for each ICA since they're serialized for the query request + depositAddress := s.TestAccs[0] + returnAddress := s.TestAccs[1] + hostZone := types.HostZone{ + ChainId: HostChainId, + ConnectionId: ibctesting.FirstConnectionID, + CommunityPoolDepositIcaAddress: depositAddress.String(), + CommunityPoolReturnIcaAddress: returnAddress.String(), + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + // Create epoch tracker for timeout + timeoutDuration := time.Second * 30 + epochEndTime := uint64(s.Ctx.BlockTime().Add(timeoutDuration).UnixNano()) + epochTracker := types.EpochTracker{ + EpochIdentifier: epochtypes.STRIDE_EPOCH, + NextEpochStartTime: epochEndTime, + } + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, epochTracker) + + return QueryCommunityPoolBalanceTestCase{ + hostZone: hostZone, + timeoutDuration: timeoutDuration, + expectedTimeout: epochEndTime, + } +} + +// Helper function to verify the query that was submitted from the community pool balance query +func (s *KeeperTestSuite) checkCommunityPoolQuerySubmission( + tc QueryCommunityPoolBalanceTestCase, + icaAccountType types.ICAAccountType, +) { + // Check that one query was submitted + queries := s.App.InterchainqueryKeeper.AllQueries(s.Ctx) + s.Require().Len(queries, 1, "there should have been 1 query submitted") + query := queries[0] + + // Confirm query contents + s.Require().Equal(tc.hostZone.ChainId, query.ChainId, "query chain ID") + s.Require().Equal(tc.hostZone.ConnectionId, query.ConnectionId, "query connection ID") + s.Require().Equal(icqtypes.BANK_STORE_QUERY_WITH_PROOF, query.QueryType, "query type") + s.Require().Equal(icqtypes.TimeoutPolicy_REJECT_QUERY_RESPONSE, query.TimeoutPolicy, "query timeout policy") + + // Confirm query timeout info + s.Require().Equal(tc.timeoutDuration, query.TimeoutDuration, "query callback id") + s.Require().Equal(tc.expectedTimeout, query.TimeoutTimestamp, "query callback id") + + // Confirm callback data + s.Require().Equal(types.ModuleName, query.CallbackModule, "query callback module") + s.Require().Equal(keeper.ICQCallbackID_CommunityPoolIcaBalance, query.CallbackId, "query callback id") + + var actualCallbackData types.CommunityPoolBalanceQueryCallback + err := proto.Unmarshal(query.CallbackData, &actualCallbackData) + s.Require().NoError(err, "no error expected when unmarshalling callback data") + + expectedCallbackData := types.CommunityPoolBalanceQueryCallback{ + IcaType: icaAccountType, + Denom: Atom, + } + s.Require().Equal(expectedCallbackData, actualCallbackData, "query callabck data") + + // Confirm query request info + expectedIcaAddress := tc.hostZone.CommunityPoolDepositIcaAddress + if icaAccountType == types.ICAAccountType_COMMUNITY_POOL_RETURN { + expectedIcaAddress = tc.hostZone.CommunityPoolReturnIcaAddress + } + requestData := query.RequestData[1:] // Remove BalancePrefix byte + actualAddress, actualDenom, err := apptesting.AddressAndDenomFromBalancesStore(requestData) + s.Require().NoError(err, "no error expected when retrieving address and denom from store key") + s.Require().Equal(expectedIcaAddress, actualAddress.String(), "query account address") + s.Require().Equal(Atom, actualDenom, "query denom") +} + +// Tests a community pool balance query to the deposit ICA account +func (s *KeeperTestSuite) TestQueryCommunityPoolBalance_Successful_Deposit() { + icaAccountType := types.ICAAccountType_COMMUNITY_POOL_DEPOSIT + tc := s.SetupQueryCommunityPoolBalance(icaAccountType) + + err := s.App.StakeibcKeeper.QueryCommunityPoolIcaBalance(s.Ctx, tc.hostZone, icaAccountType, Atom) + s.Require().NoError(err, "no error expected when querying pool balance") + + s.checkCommunityPoolQuerySubmission(tc, icaAccountType) +} + +// Tests a community pool balance query to the return ICA account +func (s *KeeperTestSuite) TestQueryCommunityPoolBalance_Successful_Return() { + icaAccountType := types.ICAAccountType_COMMUNITY_POOL_RETURN + tc := s.SetupQueryCommunityPoolBalance(icaAccountType) + + err := s.App.StakeibcKeeper.QueryCommunityPoolIcaBalance(s.Ctx, tc.hostZone, icaAccountType, Atom) + s.Require().NoError(err, "no error expected when querying pool balance") + + s.checkCommunityPoolQuerySubmission(tc, icaAccountType) +} + +// Tests a community pool balance query that fails due to an invalid account type +func (s *KeeperTestSuite) TestQueryCommunityPoolBalance_Failure_InvalidAccountType() { + icaAccountType := types.ICAAccountType_COMMUNITY_POOL_DEPOSIT + tc := s.SetupQueryCommunityPoolBalance(icaAccountType) + + invalidAccountType := types.ICAAccountType_DELEGATION + err := s.App.StakeibcKeeper.QueryCommunityPoolIcaBalance(s.Ctx, tc.hostZone, invalidAccountType, Atom) + s.Require().ErrorContains(err, "icaType must be either deposit or return!") +} + +// Tests a community pool balance query that fails due to an invalid account address +func (s *KeeperTestSuite) TestQueryCommunityPoolBalance_Failure_InvalidAccountAddress() { + icaAccountType := types.ICAAccountType_COMMUNITY_POOL_DEPOSIT + tc := s.SetupQueryCommunityPoolBalance(icaAccountType) + + // Change the host zone account address to be invalid + invalidHostZone := tc.hostZone + invalidHostZone.CommunityPoolDepositIcaAddress = "invalid_address" + + err := s.App.StakeibcKeeper.QueryCommunityPoolIcaBalance(s.Ctx, invalidHostZone, icaAccountType, Atom) + s.Require().ErrorContains(err, "invalid COMMUNITY_POOL_DEPOSIT address, could not decode (invalid_address)") +} + +// Tests a community pool balance query that fails due to a missing epoch tracker +func (s *KeeperTestSuite) TestQueryCommunityPoolBalance_Failure_MissingEpoch() { + icaAccountType := types.ICAAccountType_COMMUNITY_POOL_DEPOSIT + tc := s.SetupQueryCommunityPoolBalance(icaAccountType) + + // Remove the stride epoch so the test fails + s.App.StakeibcKeeper.RemoveEpochTracker(s.Ctx, epochtypes.STRIDE_EPOCH) + + err := s.App.StakeibcKeeper.QueryCommunityPoolIcaBalance(s.Ctx, tc.hostZone, icaAccountType, Atom) + s.Require().ErrorContains(err, "epoch stride_epoch not found") +} + +// Tests a community pool balance query that fails to submit the query +func (s *KeeperTestSuite) TestQueryCommunityPoolBalance_FailedQuerySubmission() { + icaAccountType := types.ICAAccountType_COMMUNITY_POOL_DEPOSIT + tc := s.SetupQueryCommunityPoolBalance(icaAccountType) + + // Set an invalid connection ID for the host zone so that the query submission fails + invalidHostZone := tc.hostZone + invalidHostZone.ConnectionId = "invalid_connection" + + err := s.App.StakeibcKeeper.QueryCommunityPoolIcaBalance(s.Ctx, invalidHostZone, icaAccountType, Atom) + s.Require().ErrorContains(err, "Error submitting query for pool ica balance") +} + +// ---------------------------------- +// Liquid Stake Community Pool Tokens +// ---------------------------------- + +type LiquidStakeCommunityPoolTokensTestCase struct { + hostZone types.HostZone + initialNativeTokens sdkmath.Int + initialDummyTokens sdkmath.Int +} + +func (s *KeeperTestSuite) SetupLiquidStakeCommunityPoolTokens() LiquidStakeCommunityPoolTokensTestCase { + s.CreateTransferChannel(HostChainId) + + // Create relevant module and ICA accounts + depositAddress := s.TestAccs[0] + communityPoolHoldingAddress := s.TestAccs[1] + communityPoolReturnICAAddress := s.TestAccs[2] + + // Create a host zone with valid addresses to perform the liquid stake + hostZone := types.HostZone{ + ChainId: HostChainId, + HostDenom: Atom, + IbcDenom: IbcAtom, + TransferChannelId: ibctesting.FirstChannelID, + CommunityPoolStakeHoldingAddress: communityPoolHoldingAddress.String(), + CommunityPoolReturnIcaAddress: communityPoolReturnICAAddress.String(), + DepositAddress: depositAddress.String(), + RedemptionRate: sdkmath.LegacyOneDec(), + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + // Create the epoch tracker and deposit records so the liquid stake succeeds + epochNumber := uint64(1) + epochTracker := types.EpochTracker{ + EpochIdentifier: epochtypes.STRIDE_EPOCH, + EpochNumber: epochNumber, + NextEpochStartTime: uint64(s.Coordinator.CurrentTime.UnixNano() + 30_000_000), // dictates transfer timeout + } + depositRecord := recordtypes.DepositRecord{ + Id: epochNumber, + DepositEpochNumber: epochNumber, + HostZoneId: HostChainId, + Status: recordtypes.DepositRecord_TRANSFER_QUEUE, + } + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, epochTracker) + s.App.RecordsKeeper.SetDepositRecord(s.Ctx, depositRecord) + + // Fund the holding address with native tokens (in IBC form) and + // some dummy tokens that should not get touched by these functions + initialNativeTokens := sdkmath.NewInt(1000) + initialDummyTokens := sdkmath.NewInt(999) + s.FundAccount(communityPoolHoldingAddress, sdk.NewCoin(IbcAtom, initialNativeTokens)) + s.FundAccount(communityPoolHoldingAddress, sdk.NewCoin(Atom, initialDummyTokens)) // dummy token + s.FundAccount(communityPoolHoldingAddress, sdk.NewCoin(StAtom, initialDummyTokens)) // dummy token + + return LiquidStakeCommunityPoolTokensTestCase{ + hostZone: hostZone, + initialNativeTokens: initialNativeTokens, + initialDummyTokens: initialDummyTokens, + } +} + +func (s *KeeperTestSuite) TestLiquidStakeCommunityPoolTokens_Success() { + tc := s.SetupLiquidStakeCommunityPoolTokens() + + transferPortId := transfertypes.PortID + transferChannelId := ibctesting.FirstChannelID + communityPoolHoldingAddress := sdk.MustAccAddressFromBech32(tc.hostZone.CommunityPoolStakeHoldingAddress) + + // Call liquid stake which should convert the whole native tokens amount to stTokens and transfer it + err := s.App.StakeibcKeeper.LiquidStakeCommunityPoolTokens(s.Ctx, tc.hostZone) + s.Require().NoError(err, "no error expected during liquid stake") + + // Confirm there are no longer native tokens in the holding address + ibcAtomBalance := s.App.BankKeeper.GetBalance(s.Ctx, communityPoolHoldingAddress, IbcAtom) + s.Require().Zero(ibcAtomBalance.Amount.Int64(), "balance of holding address should be zero") + + // Confirm the dummy tokens are still present + dummyTokenBalance1 := s.App.BankKeeper.GetBalance(s.Ctx, communityPoolHoldingAddress, Atom) + dummyTokenBalance2 := s.App.BankKeeper.GetBalance(s.Ctx, communityPoolHoldingAddress, StAtom) + s.Require().Equal(tc.initialDummyTokens, dummyTokenBalance2.Amount, "dummy token 2 was not touched") + s.Require().Equal(tc.initialDummyTokens, dummyTokenBalance1.Amount, "dummy token 1 was not touched") + + // Confirm the stTokens have been escrowed as a result of the transfer + escrowAddress := transfertypes.GetEscrowAddress(transferPortId, transferChannelId) + stTokenEscrowBalance := s.App.BankKeeper.GetBalance(s.Ctx, escrowAddress, StAtom) + s.Require().Equal(tc.initialNativeTokens.Int64(), stTokenEscrowBalance.Amount.Int64(), "st token escrow balance") + + // Check that if we run the liquid stake function again, nothing should get transferred + startSequence, found := s.App.IBCKeeper.ChannelKeeper.GetNextSequenceSend(s.Ctx, transferPortId, transferChannelId) + s.Require().True(found, "sequence number not found before liquid stake") + + err = s.App.StakeibcKeeper.LiquidStakeCommunityPoolTokens(s.Ctx, tc.hostZone) + s.Require().NoError(err, "no error expected during second liquid stake") + + endSequence, found := s.App.IBCKeeper.ChannelKeeper.GetNextSequenceSend(s.Ctx, transferPortId, transferChannelId) + s.Require().True(found, "sequence number not found after after liquid stake") + + s.Require().Equal(startSequence, endSequence, "no transfer should have been initiated") +} + +// Test liquid stake with an invalid stake holding address +func (s *KeeperTestSuite) TestLiquidStakeCommunityPoolTokens_Failure_InvalidAddress() { + tc := s.SetupLiquidStakeCommunityPoolTokens() + + invalidHostZone := tc.hostZone + invalidHostZone.CommunityPoolStakeHoldingAddress = "invalid" + + err := s.App.StakeibcKeeper.LiquidStakeCommunityPoolTokens(s.Ctx, invalidHostZone) + s.Require().ErrorContains(err, "decoding bech32 failed") +} + +// Test liquid stake with an invalid host denom, which should cause the liquid stake to fail +func (s *KeeperTestSuite) TestLiquidStakeCommunityPoolTokens_LiquidStakeFailure() { + tc := s.SetupLiquidStakeCommunityPoolTokens() + + invalidHostZone := tc.hostZone + invalidHostZone.HostDenom = "invalid" + + err := s.App.StakeibcKeeper.LiquidStakeCommunityPoolTokens(s.Ctx, invalidHostZone) + s.Require().ErrorContains(err, "failed to liquid stake community pool tokens") +} + +// Set an invalid transfer channel on the host so that the transfer fails +func (s *KeeperTestSuite) TestLiquidStakeCommunityPoolTokens_TransferFailure() { + tc := s.SetupLiquidStakeCommunityPoolTokens() + + invalidHostZone := tc.hostZone + invalidHostZone.TransferChannelId = "channel-X" + + err := s.App.StakeibcKeeper.LiquidStakeCommunityPoolTokens(s.Ctx, invalidHostZone) + s.Require().ErrorContains(err, "Error submitting ibc transfer") +} + +// ---------------------------------- +// Redeem Community Pool Tokens +// ---------------------------------- + +type RedeemCommunityPoolTokensTestCase struct { + hostZone types.HostZone + initialDummyTokens sdkmath.Int + communityPoolHoldingAddress sdk.AccAddress +} + +func (s *KeeperTestSuite) SetupRedeemCommunityPoolTokens() RedeemCommunityPoolTokensTestCase { + s.CreateTransferChannel(HostChainId) + + // Create relevant module and ICA accounts + depositAddress := s.TestAccs[0] + communityPoolHoldingAddress := s.TestAccs[1] + communityPoolReturnICAAddress := HostICAAddress // need an address on HostChain (starts cosmos) + + // stTokens which will be redeemed, dummy tokens which should not be touched + initialStTokens := sdkmath.NewInt(1000) + initialDummyTokens := sdkmath.NewInt(999) + + // Fund the redeem holding address with stTokens and + // some dummy tokens that should not get touched while redeeming + stDenom := types.StAssetDenomFromHostZoneDenom(Atom) + s.FundAccount(communityPoolHoldingAddress, sdk.NewCoin(stDenom, initialStTokens)) + s.FundAccount(communityPoolHoldingAddress, sdk.NewCoin(Atom, initialDummyTokens)) // dummy token + s.FundAccount(communityPoolHoldingAddress, sdk.NewCoin(IbcAtom, initialDummyTokens)) // dummy token + + // Create a host zone with valid addresses to perform the liquid stake + hostZone := types.HostZone{ + ChainId: HostChainId, // GAIA + Bech32Prefix: Bech32Prefix, // cosmos + HostDenom: Atom, + IbcDenom: IbcAtom, + TransferChannelId: ibctesting.FirstChannelID, + CommunityPoolRedeemHoldingAddress: communityPoolHoldingAddress.String(), + CommunityPoolReturnIcaAddress: communityPoolReturnICAAddress, + DepositAddress: depositAddress.String(), + TotalDelegations: initialStTokens, // at least as much as we are trying to redeem + RedemptionRate: sdkmath.LegacyOneDec(), + RedemptionsEnabled: true, + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + // Create the epoch tracker and deposit records so the liquid stake succeeds + epochNumber := uint64(1) + epochTracker := types.EpochTracker{ + EpochIdentifier: epochtypes.DAY_EPOCH, + EpochNumber: epochNumber, + } + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, epochTracker) + + // Setup the epoch unbonding record with a HostZoneUnbonding for the hostZone + var unbondings []*recordtypes.HostZoneUnbonding + unbonding := &recordtypes.HostZoneUnbonding{ + HostZoneId: HostChainId, + } + unbondings = append(unbondings, unbonding) + epochUnbondingRecord := recordtypes.EpochUnbondingRecord{ + EpochNumber: epochNumber, + HostZoneUnbondings: unbondings, + } + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, epochUnbondingRecord) + + return RedeemCommunityPoolTokensTestCase{ + hostZone: hostZone, + initialDummyTokens: initialDummyTokens, + communityPoolHoldingAddress: communityPoolHoldingAddress, + } +} + +func (s *KeeperTestSuite) TestRedeemCommunityPoolTokens_Success() { + tc := s.SetupRedeemCommunityPoolTokens() + + // Verify that no user redemption records exist yet + userRedemptionRecords := s.App.RecordsKeeper.GetAllUserRedemptionRecord(s.Ctx) + s.Require().Zero(len(userRedemptionRecords), "No user redemption records expected yet") + + // Call redeem stake which should start the unbonding for the stToken amount + err := s.App.StakeibcKeeper.RedeemCommunityPoolTokens(s.Ctx, tc.hostZone) + s.Require().NoError(err, "no error expected during redeem stake") + + // Check that a new user redemption record was created from the call to redeem + userRedemptionRecords = s.App.RecordsKeeper.GetAllUserRedemptionRecord(s.Ctx) + s.Require().Equal(1, len(userRedemptionRecords), "New user redemption records should be created") + + // Confirm there are no longer staked tokens in the holding address after redeem + stDenom := types.StAssetDenomFromHostZoneDenom(tc.hostZone.HostDenom) + stAtomBalance := s.App.BankKeeper.GetBalance(s.Ctx, tc.communityPoolHoldingAddress, stDenom) + s.Require().Zero(stAtomBalance.Amount.Int64(), "balance of redeem holidng address should be zero") + + // Confirm the dummy tokens were untouched by the redeem call + atomBalance := s.App.BankKeeper.GetBalance(s.Ctx, tc.communityPoolHoldingAddress, Atom) + ibcAtomBalance := s.App.BankKeeper.GetBalance(s.Ctx, tc.communityPoolHoldingAddress, IbcAtom) + s.Require().Equal(tc.initialDummyTokens.Int64(), atomBalance.Amount.Int64(), "Atom tokens should not be touched") + s.Require().Equal(tc.initialDummyTokens.Int64(), ibcAtomBalance.Amount.Int64(), "IbcAtom tokens should not be touched") + + // Call redeem stake again but now there is no more stTokens to be redeemed. + err = s.App.StakeibcKeeper.RedeemCommunityPoolTokens(s.Ctx, tc.hostZone) + s.Require().NoError(err, "no error expected during redeem stake") + + // Check that no new user redemption records were created from the second call to redeem + userRedemptionRecords = s.App.RecordsKeeper.GetAllUserRedemptionRecord(s.Ctx) + s.Require().Equal(1, len(userRedemptionRecords), "New user redemption records should be created") +} + +// Test redeem stake with an invalid redeem holding address +func (s *KeeperTestSuite) TestRedeemCommunityPoolTokens_Failure_InvalidAddress() { + tc := s.SetupRedeemCommunityPoolTokens() + + invalidHostZone := tc.hostZone + invalidHostZone.CommunityPoolRedeemHoldingAddress = "invalid" + + err := s.App.StakeibcKeeper.RedeemCommunityPoolTokens(s.Ctx, invalidHostZone) + s.Require().ErrorContains(err, "decoding bech32 failed") +} + +// Test redeem stake with an invalid redeem holding address +func (s *KeeperTestSuite) TestRedeemCommunityPoolTokens_Failure_NotEnoughDelegations() { + tc := s.SetupRedeemCommunityPoolTokens() + + invalidHostZone := tc.hostZone + invalidHostZone.TotalDelegations = sdkmath.ZeroInt() + s.App.StakeibcKeeper.SetHostZone(s.Ctx, invalidHostZone) + + err := s.App.StakeibcKeeper.RedeemCommunityPoolTokens(s.Ctx, invalidHostZone) + s.Require().ErrorContains(err, "invalid amount") +} + +// ---------------------------------------------------------- +// BuildFundCommunityPoolMsg +// ---------------------------------------------------------- + +func (s *KeeperTestSuite) TestBuildFundCommunityPoolMsg() { + withdrawalICA := "withdrawal_ica" + communityPoolReturnICA := "community_pool_return_ica" + communityPoolTreasuryAddress := "community_pool_treasury" + + testCases := []struct { + name string + senderAccoutType types.ICAAccountType + sendToTreasury bool + expectedSender string + expectedReceiver string + expectedError string + }{ + { + name: "community pool return ICA to main community pool", + senderAccoutType: types.ICAAccountType_COMMUNITY_POOL_RETURN, + sendToTreasury: false, + expectedSender: communityPoolReturnICA, + }, + { + name: "community pool return ICA to treasury", + senderAccoutType: types.ICAAccountType_COMMUNITY_POOL_RETURN, + sendToTreasury: true, + expectedSender: communityPoolReturnICA, + expectedReceiver: communityPoolTreasuryAddress, + }, + { + name: "withdrawal ICA to main community pool", + senderAccoutType: types.ICAAccountType_WITHDRAWAL, + sendToTreasury: false, + expectedSender: withdrawalICA, + }, + { + name: "withdrawal ICA to treasury", + senderAccoutType: types.ICAAccountType_WITHDRAWAL, + sendToTreasury: true, + expectedSender: withdrawalICA, + expectedReceiver: communityPoolTreasuryAddress, + }, + { + name: "invalid sender", + senderAccoutType: types.ICAAccountType_DELEGATION, + expectedError: "fund community pool ICA can only be initiated from", + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + // Define the sending tokens and input host zone struct + // If the test case sends to the treasury, we have to set the community pool treasury + // address to be non-empty + tokens := sdk.NewCoins(sdk.NewCoin(HostDenom, sdkmath.NewInt(1000))) + hostZone := types.HostZone{ + CommunityPoolReturnIcaAddress: communityPoolReturnICA, + WithdrawalIcaAddress: withdrawalICA, + } + if tc.sendToTreasury { + hostZone.CommunityPoolTreasuryAddress = communityPoolTreasuryAddress + } + + // Build the fund msg + actualMsg, actualErr := s.App.StakeibcKeeper.BuildFundCommunityPoolMsg(s.Ctx, hostZone, tokens, tc.senderAccoutType) + + // If there's not error expected, validate the underlying message + if tc.expectedError == "" { + s.Require().Len(actualMsg, 1, "there should be one message") + + // If the recipient was the treasury, confirm it was a valid bank send + if tc.sendToTreasury { + bankSendMsg, ok := actualMsg[0].(*banktypes.MsgSend) + s.Require().True(ok, "ICA message should have been a bank send") + s.Require().Equal(tokens, bankSendMsg.Amount, "bank send amount") + s.Require().Equal(tc.expectedSender, bankSendMsg.FromAddress, "bank send from address") + s.Require().Equal(tc.expectedReceiver, bankSendMsg.ToAddress, "bank send to address") + } else { + fundCommunityPoolMsg, ok := actualMsg[0].(*disttypes.MsgFundCommunityPool) + s.Require().True(ok, "ICA message should have been a fund community pool message") + s.Require().Equal(tokens, fundCommunityPoolMsg.Amount, "fund community pool amount") + s.Require().Equal(tc.expectedSender, fundCommunityPoolMsg.Depositor, "bank send from address") + } + } else { + // If there was an expected error, confirm the error message + s.Require().ErrorContains(actualErr, tc.expectedError) + } + }) + } +} diff --git a/x/stakeibc/keeper/consumer.go b/x/stakeibc/keeper/consumer.go new file mode 100644 index 00000000000..19b44a78fe0 --- /dev/null +++ b/x/stakeibc/keeper/consumer.go @@ -0,0 +1,39 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// Register new stTokens to the consumer reward denom whitelist +func (k Keeper) RegisterStTokenDenomsToWhitelist(ctx sdk.Context, denoms []string) error { + hostZones := k.GetAllHostZone(ctx) + allDenomsMap := make(map[string]bool) + registeredDenomsMap := make(map[string]bool) + + // get all stToken denoms + for _, zone := range hostZones { + allDenomsMap[types.StAssetDenomFromHostZoneDenom(zone.HostDenom)] = true + } + + // get registered denoms in the consumer reward denom whitelist + consumerParams := k.ConsumerKeeper.GetConsumerParams(ctx) + for _, denom := range consumerParams.RewardDenoms { + registeredDenomsMap[denom] = true + } + + // register new denoms to the whitelist + for _, denom := range denoms { + if !allDenomsMap[denom] { + return types.ErrStTokenNotFound + } else if registeredDenomsMap[denom] { + continue + } else { + consumerParams.RewardDenoms = append(consumerParams.RewardDenoms, denom) + } + } + + k.ConsumerKeeper.SetParams(ctx, consumerParams) + return nil +} diff --git a/x/stakeibc/keeper/consumer_test.go b/x/stakeibc/keeper/consumer_test.go new file mode 100644 index 00000000000..a159302bc7b --- /dev/null +++ b/x/stakeibc/keeper/consumer_test.go @@ -0,0 +1,59 @@ +package keeper_test + +import ( + _ "github.com/stretchr/testify/suite" + + stakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func (s *KeeperTestSuite) TestRegisterStTokenDenomsToWhitelist() { + tc := s.SetupRegisterHostZone() + _, err := s.GetMsgServer().RegisterHostZone(s.Ctx, &tc.validMsg) + s.Require().NoError(err, "able to successfully register host zone") + + // RegisterHostZone should have already registered stToken to consumer reward denom whitelist + params := s.App.ConsumerKeeper.GetConsumerParams(s.Ctx) + stDenom := stakeibctypes.StAssetDenomFromHostZoneDenom(tc.validMsg.HostDenom) + expectedWhitelist := []string{stDenom} + s.Require().Equal([]string{stDenom}, params.RewardDenoms) + + for _, tc := range []struct { + desc string + newDenoms []string + expectedWhitelist []string + expectedErr error + }{ + { + desc: "both valid and invalid denoms", + newDenoms: []string{stDenom, "stuosmo"}, + expectedWhitelist: expectedWhitelist, + expectedErr: stakeibctypes.ErrStTokenNotFound, + }, + { + desc: "only invalid denoms", + newDenoms: []string{"stuosmo", "stujuno"}, + expectedWhitelist: expectedWhitelist, + expectedErr: stakeibctypes.ErrStTokenNotFound, + }, + { + desc: "only valid denoms", + newDenoms: []string{stDenom}, + expectedWhitelist: expectedWhitelist, + expectedErr: nil, + }, + { + desc: "empty", + newDenoms: []string{}, + expectedWhitelist: expectedWhitelist, + expectedErr: nil, + }, + } { + s.Run(tc.desc, func() { + err := s.App.StakeibcKeeper.RegisterStTokenDenomsToWhitelist(s.Ctx, tc.newDenoms) + s.Require().Equal(tc.expectedErr, err) + + params := s.App.ConsumerKeeper.GetConsumerParams(s.Ctx) + s.Require().Equal(tc.expectedWhitelist, params.RewardDenoms) + }) + } +} diff --git a/x/stakeibc/keeper/delegation.go b/x/stakeibc/keeper/delegation.go new file mode 100644 index 00000000000..1ed7f1ff97d --- /dev/null +++ b/x/stakeibc/keeper/delegation.go @@ -0,0 +1,199 @@ +package keeper + +import ( + "fmt" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/cosmos/gogoproto/proto" + + "github.com/osmosis-labs/osmosis/v27/utils" + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// Builds the delegation ICA messages for a given deposit record +// Each validator has a portion of the total amount on the record based on their weight +func (k Keeper) GetDelegationICAMessages( + ctx sdk.Context, + hostZone types.HostZone, + depositRecord recordstypes.DepositRecord, +) (msgs []proto.Message, delegations []*types.SplitDelegation, err error) { + // Construct the transaction + targetDelegationsByValidator, err := k.GetTargetValAmtsForHostZone(ctx, hostZone, depositRecord.Amount) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Error getting target delegation amounts for host zone %s", hostZone.ChainId)) + return msgs, delegations, err + } + + for _, validator := range hostZone.Validators { + validatorAmount, ok := targetDelegationsByValidator[validator.Address] + if !ok || !validatorAmount.IsPositive() { + continue + } + + msgs = append(msgs, &stakingtypes.MsgDelegate{ + DelegatorAddress: hostZone.DelegationIcaAddress, + ValidatorAddress: validator.Address, + Amount: sdk.NewCoin(hostZone.HostDenom, validatorAmount), + }) + delegations = append(delegations, &types.SplitDelegation{ + Validator: validator.Address, + Amount: validatorAmount, + }) + } + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, "Preparing MsgDelegates from the delegation account to each validator")) + + if len(msgs) == 0 { + return msgs, delegations, errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Target delegation amount was 0 for each validator") + } + + return msgs, delegations, nil +} + +// Submit undelegate ICA messages in small batches to reduce the gas size per tx +func (k Keeper) BatchSubmitDelegationICAMessages( + ctx sdk.Context, + hostZone types.HostZone, + depositRecord recordstypes.DepositRecord, + msgs []proto.Message, + delegations []*types.SplitDelegation, + batchSize int, +) (numTxsSubmitted uint64, err error) { + // Iterate the full list of messages and submit in batches + for start := 0; start < len(msgs); start += batchSize { + end := start + batchSize + if end > len(msgs) { + end = len(msgs) + } + + msgBatch := msgs[start:end] + delegationsBatch := delegations[start:end] + + // Store the callback data + delegateCallback := types.DelegateCallback{ + HostZoneId: hostZone.ChainId, + DepositRecordId: depositRecord.Id, + SplitDelegations: delegationsBatch, + } + marshalledCallbackArgs, err := proto.Marshal(&delegateCallback) + if err != nil { + return 0, err + } + + // Send the transaction through SubmitTx + _, err = k.SubmitTxsStrideEpoch(ctx, hostZone.ConnectionId, msgBatch, types.ICAAccountType_DELEGATION, ICACallbackID_Delegate, marshalledCallbackArgs) + if err != nil { + return 0, errorsmod.Wrapf(err, "failed to submit delegation ICAs on %s. Messages: %s", hostZone.ChainId, msgs) + } + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, "ICA MsgDelegates Successfully Sent")) + + // flag the delegation change in progress on each validator + for _, delegation := range delegationsBatch { + if err := k.IncrementValidatorDelegationChangesInProgress(&hostZone, delegation.Validator); err != nil { + return 0, err + } + } + k.SetHostZone(ctx, hostZone) + + numTxsSubmitted += 1 + } + + return numTxsSubmitted, nil +} + +// Iterate each deposit record marked DELEGATION_QUEUE and use the delegation ICA to delegate on the host zone +func (k Keeper) StakeExistingDepositsOnHostZones(ctx sdk.Context, epochNumber uint64, depositRecords []recordstypes.DepositRecord) { + k.Logger(ctx).Info("Staking deposit records...") + + stakeDepositRecords := utils.FilterDepositRecords(depositRecords, func(record recordstypes.DepositRecord) (condition bool) { + isStakeRecord := record.Status == recordstypes.DepositRecord_DELEGATION_QUEUE + isBeforeCurrentEpoch := record.DepositEpochNumber < epochNumber + isNotInProgress := record.DelegationTxsInProgress == 0 + return isStakeRecord && isBeforeCurrentEpoch && isNotInProgress + }) + + if len(stakeDepositRecords) == 0 { + k.Logger(ctx).Info("No deposit records in state DELEGATION_QUEUE") + return + } + + for _, depositRecord := range stakeDepositRecords { + if depositRecord.Amount.IsZero() { + continue + } + k.Logger(ctx).Info(utils.LogWithHostZone(depositRecord.HostZoneId, + "Processing deposit record %d: %v%s", depositRecord.Id, depositRecord.Amount, depositRecord.Denom)) + + hostZone, err := k.GetActiveHostZone(ctx, depositRecord.HostZoneId) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("[StakeExistingDepositsOnHostZones] Not processing %d, %s", depositRecord.Id, err.Error())) + continue + } + + if hostZone.DelegationIcaAddress == "" { + k.Logger(ctx).Error(fmt.Sprintf("[StakeExistingDepositsOnHostZones] no delegation account found for %s", hostZone.ChainId)) + continue + } + + k.Logger(ctx).Info(utils.LogWithHostZone(depositRecord.HostZoneId, "Staking %v%s", depositRecord.Amount, hostZone.HostDenom)) + + // Build the list of delegation messages for each validator + msgs, delegations, err := k.GetDelegationICAMessages(ctx, hostZone, depositRecord) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Did not stake %s on %s | err: %s", depositRecord.Amount.String(), hostZone.ChainId, err.Error())) + continue + } + + // Submit the delegation messages in batchs + delegateBatchSize := int(utils.UintToInt(hostZone.MaxMessagesPerIcaTx)) + numTxsSubmitted, err := k.BatchSubmitDelegationICAMessages(ctx, hostZone, depositRecord, msgs, delegations, delegateBatchSize) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Unable to submit delegation ICA: %s", err.Error())) + continue + } + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, "Successfully submitted stake")) + + // Increment the number of tx sin progress on the record and update the status + depositRecord.Status = recordstypes.DepositRecord_DELEGATION_IN_PROGRESS + depositRecord.DelegationTxsInProgress += numTxsSubmitted + k.RecordsKeeper.SetDepositRecord(ctx, depositRecord) + + ctx.EventManager().EmitEvent( + sdk.NewEvent( + sdk.EventTypeMessage, + sdk.NewAttribute("hostZone", hostZone.ChainId), + sdk.NewAttribute("newAmountStaked", depositRecord.Amount.String()), + ), + ) + } +} + +// Delegates accrued staking rewards for reinvestment +func (k Keeper) ReinvestRewards(ctx sdk.Context) { + k.Logger(ctx).Info("Reinvesting tokens...") + + for _, hostZone := range k.GetAllActiveHostZone(ctx) { + // only process host zones once withdrawal accounts are registered + if hostZone.WithdrawalIcaAddress == "" { + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, "Withdrawal account not registered for host zone")) + continue + } + + // read clock time on host zone + blockTime, err := k.GetLightClientTime(ctx, hostZone.ConnectionId) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Could not find blockTime for host zone %s, err: %s", hostZone.ConnectionId, err.Error())) + continue + } + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, "BlockTime for host zone: %d", blockTime)) + + err = k.SubmitWithdrawalHostBalanceICQ(ctx, hostZone) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Error updating withdrawal balance for host zone %s: %s", hostZone.ConnectionId, err.Error())) + continue + } + } +} diff --git a/x/stakeibc/keeper/delegation_test.go b/x/stakeibc/keeper/delegation_test.go new file mode 100644 index 00000000000..6c84ad28646 --- /dev/null +++ b/x/stakeibc/keeper/delegation_test.go @@ -0,0 +1,625 @@ +package keeper_test + +import ( + "fmt" + + _ "github.com/stretchr/testify/suite" + + sdk "github.com/cosmos/cosmos-sdk/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + proto "github.com/cosmos/gogoproto/proto" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + + sdkmath "cosmossdk.io/math" + + epochstypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + icacallbackstypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +type TestDepositRecords struct { + emptyRecords []recordstypes.DepositRecord + recordsToBeTransfered []recordstypes.DepositRecord + recordsToBeStaked []recordstypes.DepositRecord + recordsInCurrentEpoch []recordstypes.DepositRecord + transferAmount sdkmath.Int + stakeAmount sdkmath.Int +} + +func (r *TestDepositRecords) GetAllRecords() []recordstypes.DepositRecord { + allDepositRecords := []recordstypes.DepositRecord{} + allDepositRecords = append(allDepositRecords, r.emptyRecords...) + allDepositRecords = append(allDepositRecords, r.recordsToBeTransfered...) + allDepositRecords = append(allDepositRecords, r.recordsToBeStaked...) + allDepositRecords = append(allDepositRecords, r.recordsInCurrentEpoch...) + return allDepositRecords +} + +type Channel struct { + PortID string + ChannelID string +} + +type DepositRecordsTestCase struct { + initialDepositRecords TestDepositRecords + initialModuleAccountBalance sdk.Coin + hostZone types.HostZone + hostZoneDepositAddress sdk.AccAddress + epochNumber uint64 + TransferChannel Channel + DelegationChannel Channel +} + +func (s *KeeperTestSuite) GetInitialDepositRecords(currentEpoch uint64) TestDepositRecords { + priorEpoch := currentEpoch - 1 + emptyDepositRecords := []recordstypes.DepositRecord{ + { + Id: 1, + Amount: sdkmath.ZeroInt(), + Denom: Atom, + HostZoneId: HostChainId, + Status: recordstypes.DepositRecord_TRANSFER_QUEUE, + DepositEpochNumber: priorEpoch, + DelegationTxsInProgress: 0, + }, + { + Id: 2, + Amount: sdkmath.ZeroInt(), + Denom: Atom, + HostZoneId: HostChainId, + Status: recordstypes.DepositRecord_TRANSFER_QUEUE, + DepositEpochNumber: priorEpoch, + DelegationTxsInProgress: 0, + }, + } + + recordsToBeTransfered := []recordstypes.DepositRecord{ + { + Id: 3, + Amount: sdkmath.NewInt(3000), + Denom: Atom, + HostZoneId: HostChainId, + Status: recordstypes.DepositRecord_TRANSFER_QUEUE, + DepositEpochNumber: priorEpoch, + DelegationTxsInProgress: 0, + }, + { + Id: 4, + Amount: sdkmath.NewInt(4000), + Denom: Atom, + HostZoneId: HostChainId, + Status: recordstypes.DepositRecord_TRANSFER_QUEUE, + DepositEpochNumber: priorEpoch, + DelegationTxsInProgress: 0, + }, + } + transferAmount := sdkmath.NewInt(3000 + 4000) + + recordsToBeStaked := []recordstypes.DepositRecord{ + { + Id: 5, + Amount: sdkmath.NewInt(5000), + Denom: Atom, + HostZoneId: HostChainId, + Status: recordstypes.DepositRecord_DELEGATION_QUEUE, + DepositEpochNumber: priorEpoch, + DelegationTxsInProgress: 0, + }, + { + Id: 6, + Amount: sdkmath.NewInt(6000), + Denom: Atom, + HostZoneId: HostChainId, + Status: recordstypes.DepositRecord_DELEGATION_QUEUE, + DepositEpochNumber: priorEpoch, + DelegationTxsInProgress: 0, + }, + } + stakeAmount := sdkmath.NewInt(5000 + 6000) + + recordsInCurrentEpoch := []recordstypes.DepositRecord{ + { + Id: 7, + Amount: sdkmath.NewInt(7000), + Denom: Atom, + HostZoneId: HostChainId, + Status: recordstypes.DepositRecord_DELEGATION_QUEUE, + DepositEpochNumber: currentEpoch, + DelegationTxsInProgress: 0, + }, + { + Id: 8, + Amount: sdkmath.NewInt(8000), + Denom: Atom, + HostZoneId: HostChainId, + Status: recordstypes.DepositRecord_DELEGATION_QUEUE, + DepositEpochNumber: currentEpoch, + DelegationTxsInProgress: 0, + }, + } + + return TestDepositRecords{ + emptyRecords: emptyDepositRecords, + recordsToBeTransfered: recordsToBeTransfered, + recordsToBeStaked: recordsToBeStaked, + recordsInCurrentEpoch: recordsInCurrentEpoch, + transferAmount: transferAmount, + stakeAmount: stakeAmount, + } +} + +func (s *KeeperTestSuite) SetupDepositRecords() DepositRecordsTestCase { + delegationAccountOwner := fmt.Sprintf("%s.%s", HostChainId, "DELEGATION") + delegationChannelID, delegationPortID := s.CreateICAChannel(delegationAccountOwner) + delegationAddress := s.IcaAddresses[delegationAccountOwner] + + ibcDenomTrace := s.GetIBCDenomTrace(Atom) // we need a true IBC denom here + depositAddress := types.NewHostZoneDepositAddress(HostChainId) + s.App.TransferKeeper.SetDenomTrace(s.Ctx, ibcDenomTrace) + + initialModuleAccountBalance := sdk.NewCoin(ibcDenomTrace.IBCDenom(), sdkmath.NewInt(15_000)) + s.FundAccount(depositAddress, initialModuleAccountBalance) + + validators := []*types.Validator{ + { + Name: "val1", + Address: "gaia_VAL1", + Weight: 1, + }, + { + Name: "val2", + Address: "gaia_VAL2", + Weight: 4, + }, + } + + hostZone := types.HostZone{ + ChainId: HostChainId, + DepositAddress: depositAddress.String(), + DelegationIcaAddress: delegationAddress, + ConnectionId: ibctesting.FirstConnectionID, + TransferChannelId: ibctesting.FirstChannelID, + HostDenom: Atom, + IbcDenom: ibcDenomTrace.IBCDenom(), + Validators: validators, + MaxMessagesPerIcaTx: 10, + } + + currentEpoch := uint64(2) + strideEpochTracker := types.EpochTracker{ + EpochIdentifier: epochstypes.STRIDE_EPOCH, + EpochNumber: currentEpoch, + NextEpochStartTime: uint64(s.Coordinator.CurrentTime.UnixNano() + 30_000_000_000), // dictates timeouts + } + + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, strideEpochTracker) + + initialDepositRecords := s.GetInitialDepositRecords(currentEpoch) + for _, depositRecord := range initialDepositRecords.GetAllRecords() { + s.App.RecordsKeeper.AppendDepositRecord(s.Ctx, depositRecord) + } + + return DepositRecordsTestCase{ + initialDepositRecords: initialDepositRecords, + initialModuleAccountBalance: initialModuleAccountBalance, + hostZone: hostZone, + hostZoneDepositAddress: depositAddress, + epochNumber: currentEpoch, + TransferChannel: Channel{ + PortID: ibctesting.TransferPort, + ChannelID: ibctesting.FirstChannelID, + }, + DelegationChannel: Channel{ + PortID: delegationPortID, + ChannelID: delegationChannelID, + }, + } +} + +// Helper function to check the state after transferring deposit records +// This assumes the last X transfers failed +func (s *KeeperTestSuite) CheckStateAfterTransferringDepositRecords(tc DepositRecordsTestCase, numTransfersFailed int) { + // Get tx seq number before transfer to confirm that it gets incremented + transferPortID := tc.TransferChannel.PortID + transferChannelID := tc.TransferChannel.ChannelID + startSequence := s.MustGetNextSequenceNumber(transferPortID, transferChannelID) + + // Transfer deposit records + s.App.StakeibcKeeper.TransferExistingDepositsToHostZones(s.Ctx, tc.epochNumber, tc.initialDepositRecords.GetAllRecords()) + + // Confirm tx sequence was incremented + numTransferAttempts := len(tc.initialDepositRecords.recordsToBeTransfered) + numSuccessfulTransfers := uint64(numTransferAttempts - numTransfersFailed) + + endSequence := s.MustGetNextSequenceNumber(transferPortID, transferChannelID) + s.Require().Equal(startSequence+numSuccessfulTransfers, endSequence, "tx sequence number after transfer") + + // Confirm the callback data was stored for each transfer packet EXCLUDING the failed packets + numCallbacks := uint64(len(s.App.IcacallbacksKeeper.GetAllCallbackData(s.Ctx))) + s.Require().Equal(numSuccessfulTransfers, numCallbacks, "number of callbacks") + + recordsSuccessfullyTransferred := tc.initialDepositRecords.recordsToBeTransfered[:numSuccessfulTransfers] + for i, depositRecord := range recordsSuccessfullyTransferred { + // Confirm callback record + callbackKey := icacallbackstypes.PacketID(transferPortID, transferChannelID, startSequence+uint64(i)) + callbackData, found := s.App.IcacallbacksKeeper.GetCallbackData(s.Ctx, callbackKey) + s.Require().True(found, "callback data was not found for callback key (%s)", callbackKey) + s.Require().Equal("transfer", callbackData.CallbackId, "callback ID") + + // Confirm callback args + callbackArgs, err := s.App.RecordsKeeper.UnmarshalTransferCallbackArgs(s.Ctx, callbackData.CallbackArgs) + s.Require().NoError(err, "unmarshalling callback args error for callback key (%s)", callbackKey) + s.Require().Equal(depositRecord.Id, callbackArgs.DepositRecordId, "deposit record ID in callback args (%s)", callbackKey) + } + + // Confirm the module account balance decreased + expectedTransferAmount := sdkmath.NewInt(0) + for _, depositRecord := range recordsSuccessfullyTransferred { + expectedTransferAmount = expectedTransferAmount.Add(depositRecord.Amount) + } + expectedModuleBalance := tc.initialModuleAccountBalance.SubAmount(expectedTransferAmount) + actualModuleBalance := s.App.BankKeeper.GetBalance(s.Ctx, tc.hostZoneDepositAddress, tc.hostZone.IbcDenom) + s.CompareCoins(expectedModuleBalance, actualModuleBalance, "host module balance") + + // Confirm deposit records with 0 amount were removed + expectedNumDepositRecords := len(tc.initialDepositRecords.GetAllRecords()) - len(tc.initialDepositRecords.emptyRecords) + actualNumDepositRecords := len(s.App.RecordsKeeper.GetAllDepositRecord(s.Ctx)) + s.Require().Equal(expectedNumDepositRecords, actualNumDepositRecords, "total deposit records") + + for _, emptyRecord := range tc.initialDepositRecords.emptyRecords { + _, found := s.App.RecordsKeeper.GetDepositRecord(s.Ctx, emptyRecord.Id) + s.Require().False(found, "empty deposit record (%d) should have been removed", emptyRecord.Id) + } +} + +func (s *KeeperTestSuite) TestTransferDepositRecords_Successful() { + tc := s.SetupDepositRecords() + + numFailures := 0 + s.CheckStateAfterTransferringDepositRecords(tc, numFailures) +} + +func (s *KeeperTestSuite) TestTransferDepositRecords_HostZoneNotFound() { + tc := s.SetupDepositRecords() + // Replace first deposit record with a record that has a bad host zone + recordsToBeTransfered := tc.initialDepositRecords.recordsToBeTransfered + lastRecordIndex := len(recordsToBeTransfered) - 1 + + badRecord := tc.initialDepositRecords.recordsToBeTransfered[lastRecordIndex] + badRecord.HostZoneId = "fake_host_zone" + tc.initialDepositRecords.recordsToBeTransfered[lastRecordIndex] = badRecord + s.App.RecordsKeeper.SetDepositRecord(s.Ctx, badRecord) + + numFailed := 1 + s.CheckStateAfterTransferringDepositRecords(tc, numFailed) +} + +func (s *KeeperTestSuite) TestTransferDepositRecords_NoDelegationAccount() { + tc := s.SetupDepositRecords() + // Remove the delegation account from the host zone + badHostZone := tc.hostZone + badHostZone.DelegationIcaAddress = "" + s.App.StakeibcKeeper.SetHostZone(s.Ctx, badHostZone) + + numFailed := len(tc.initialDepositRecords.recordsToBeTransfered) + s.CheckStateAfterTransferringDepositRecords(tc, numFailed) +} + +// Helper function to check the state after staking deposit records +// This assumes the last X delegations failed +func (s *KeeperTestSuite) CheckStateAfterStakingDepositRecords(tc DepositRecordsTestCase, numDelegationsFailed int) { + // Get tx seq number before delegation to confirm it incremented + delegationPortID := tc.DelegationChannel.PortID + delegationChannelID := tc.DelegationChannel.ChannelID + startSequence := s.MustGetNextSequenceNumber(delegationPortID, delegationChannelID) + + // Stake deposit records + s.App.StakeibcKeeper.StakeExistingDepositsOnHostZones(s.Ctx, tc.epochNumber, tc.initialDepositRecords.GetAllRecords()) + + // Confirm tx sequence was incremented + numDelegationAttempts := len(tc.initialDepositRecords.recordsToBeStaked) + numSuccessfulDelegations := uint64(numDelegationAttempts - numDelegationsFailed) + + endSequence := s.MustGetNextSequenceNumber(delegationPortID, delegationChannelID) + s.Require().Equal(startSequence+numSuccessfulDelegations, endSequence, "tx sequence number after delegation") + + // Confirm the callback data was stored for each delegation packet EXCLUDING the failed packets + numCallbacks := uint64(len(s.App.IcacallbacksKeeper.GetAllCallbackData(s.Ctx))) + s.Require().Equal(numSuccessfulDelegations, numCallbacks, "number of callback's stored") + + recordsSuccessfullyStaked := tc.initialDepositRecords.recordsToBeStaked[:numSuccessfulDelegations] + for i, depositRecord := range recordsSuccessfullyStaked { + // Confirm callback record + callbackKey := icacallbackstypes.PacketID(delegationPortID, delegationChannelID, startSequence+uint64(i)) + callbackData, found := s.App.IcacallbacksKeeper.GetCallbackData(s.Ctx, callbackKey) + s.Require().True(found, "callback data was not found for callback key (%s)", callbackKey) + s.Require().Equal("delegate", callbackData.CallbackId, "callback ID") + + // Confirm callback args + callbackArgs := types.DelegateCallback{} + err := proto.Unmarshal(callbackData.CallbackArgs, &callbackArgs) + s.Require().NoError(err, "unmarshalling callback args error for callback key (%s)", callbackKey) + s.Require().Equal(depositRecord.Id, callbackArgs.DepositRecordId, "deposit record ID in callback args (%s)", callbackKey) + s.Require().Equal(tc.hostZone.ChainId, callbackArgs.HostZoneId, "host zone in callback args (%s)", callbackKey) + + // Confirm expected delegations + val1 := tc.hostZone.Validators[0] + val2 := tc.hostZone.Validators[1] + totalWeight := val1.Weight + val2.Weight + + val1Delegation := depositRecord.Amount.Mul(sdkmath.NewIntFromUint64(val1.Weight)).Quo(sdkmath.NewIntFromUint64(totalWeight)) + val2Delegation := depositRecord.Amount.Mul(sdkmath.NewIntFromUint64(val2.Weight)).Quo(sdkmath.NewIntFromUint64(totalWeight)) + + expectedDelegations := []*types.SplitDelegation{ + {Validator: val1.Address, Amount: val1Delegation}, + {Validator: val2.Address, Amount: val2Delegation}, + } + + s.Require().Equal(len(tc.hostZone.Validators), len(callbackArgs.SplitDelegations), "number of redelegations") + for i := range expectedDelegations { + s.Require().Equal(expectedDelegations[i], callbackArgs.SplitDelegations[i], + "split delegations in callback args (%s), val (%s)", callbackKey, expectedDelegations[i].Validator) + } + + } +} + +func (s *KeeperTestSuite) TestStakeDepositRecords_Successful() { + tc := s.SetupDepositRecords() + + numFailures := 0 + s.CheckStateAfterStakingDepositRecords(tc, numFailures) +} + +func (s *KeeperTestSuite) TestStakeDepositRecords_HostZoneNotFound() { + tc := s.SetupDepositRecords() + // Replace first deposit record with a record that has a bad host zone + recordsToBeStaked := tc.initialDepositRecords.recordsToBeStaked + lastRecordIndex := len(recordsToBeStaked) - 1 + + badRecord := tc.initialDepositRecords.recordsToBeStaked[lastRecordIndex] + badRecord.HostZoneId = "fake_host_zone" + tc.initialDepositRecords.recordsToBeStaked[lastRecordIndex] = badRecord + s.App.RecordsKeeper.SetDepositRecord(s.Ctx, badRecord) + + numFailed := 1 + s.CheckStateAfterStakingDepositRecords(tc, numFailed) +} + +func (s *KeeperTestSuite) TestStakeDepositRecords_NoDelegationAccount() { + tc := s.SetupDepositRecords() + // Remove the delegation account from the host zone + badHostZone := tc.hostZone + badHostZone.DelegationIcaAddress = "" + s.App.StakeibcKeeper.SetHostZone(s.Ctx, badHostZone) + + numFailed := len(tc.initialDepositRecords.recordsToBeStaked) + s.CheckStateAfterStakingDepositRecords(tc, numFailed) +} + +func (s *KeeperTestSuite) TestGetDelegationICAMessages() { + delegationAddress := "cosmos_DELEGATION" + + testCases := []struct { + name string + totalDelegated sdkmath.Int + validators []*types.Validator + expectedDelegations []types.SplitDelegation + expectedError string + }{ + { + name: "one validator", + totalDelegated: sdkmath.NewInt(50), + validators: []*types.Validator{ + {Address: "val1", Weight: 1}, + }, + expectedDelegations: []types.SplitDelegation{ + {Validator: "val1", Amount: sdkmath.NewInt(50)}, + }, + }, + { + name: "two validators", + totalDelegated: sdkmath.NewInt(100), + validators: []*types.Validator{ + {Address: "val1", Weight: 1}, + {Address: "val2", Weight: 1}, + }, + expectedDelegations: []types.SplitDelegation{ + {Validator: "val1", Amount: sdkmath.NewInt(50)}, + {Validator: "val2", Amount: sdkmath.NewInt(50)}, + }, + }, + { + name: "three validators", + totalDelegated: sdkmath.NewInt(100), + validators: []*types.Validator{ + {Address: "val1", Weight: 25}, + {Address: "val2", Weight: 50}, + {Address: "val3", Weight: 25}, + }, + expectedDelegations: []types.SplitDelegation{ + {Validator: "val1", Amount: sdkmath.NewInt(25)}, + {Validator: "val2", Amount: sdkmath.NewInt(50)}, + {Validator: "val3", Amount: sdkmath.NewInt(25)}, + }, + }, + { + name: "zero weight validator", + totalDelegated: sdkmath.NewInt(100), + validators: []*types.Validator{ + {Address: "val1", Weight: 25}, + {Address: "val2", Weight: 0}, + {Address: "val3", Weight: 25}, + }, + expectedDelegations: []types.SplitDelegation{ + {Validator: "val1", Amount: sdkmath.NewInt(50)}, + {Validator: "val3", Amount: sdkmath.NewInt(50)}, + }, + }, + { + name: "zero weight validators", + totalDelegated: sdkmath.NewInt(100), + validators: []*types.Validator{ + {Address: "val1", Weight: 0}, + {Address: "val2", Weight: 0}, + {Address: "val3", Weight: 0}, + }, + expectedError: "No non-zero validators found", + }, + { + name: "no validators", + totalDelegated: sdkmath.NewInt(100), + validators: []*types.Validator{}, + expectedError: "No non-zero validators found", + }, + { + name: "zero total delegations", + totalDelegated: sdkmath.NewInt(0), + validators: []*types.Validator{}, + expectedError: "Cannot calculate target delegation if final amount is less than or equal to zero", + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + // Create the host zone and deposit record for the given test case + hostZone := types.HostZone{ + ChainId: HostChainId, + HostDenom: Atom, + DelegationIcaAddress: delegationAddress, + Validators: tc.validators, + } + + depositRecord := recordstypes.DepositRecord{ + Amount: tc.totalDelegated, + } + + // Build the delegation ICA messages + actualMessages, actualSplits, actualError := s.App.StakeibcKeeper.GetDelegationICAMessages( + s.Ctx, + hostZone, + depositRecord, + ) + + // If this is an error test case, check the error message + if tc.expectedError != "" { + s.Require().ErrorContains(actualError, tc.expectedError, "error expected") + return + } + + // For the success case, check the error number of delegations + s.Require().NoError(actualError, "no error expected when delegating %v", tc.expectedDelegations) + s.Require().Len(actualMessages, len(tc.expectedDelegations), "number of undelegate messages") + s.Require().Len(actualSplits, len(tc.expectedDelegations), "number of validator splits") + + // Check each delegation + for i, expected := range tc.expectedDelegations { + valAddress := expected.Validator + actualMsg := actualMessages[i].(*stakingtypes.MsgDelegate) + actualSplit := actualSplits[i] + + // Check the ICA message + s.Require().Equal(valAddress, actualMsg.ValidatorAddress, "ica message validator") + s.Require().Equal(delegationAddress, actualMsg.DelegatorAddress, "ica message delegator for %s", valAddress) + s.Require().Equal(Atom, actualMsg.Amount.Denom, "ica message denom for %s", valAddress) + s.Require().Equal(expected.Amount.Int64(), actualMsg.Amount.Amount.Int64(), + "ica message amount for %s", valAddress) + + // Check the callback + s.Require().Equal(expected.Validator, actualSplit.Validator, "callback validator for %s", valAddress) + s.Require().Equal(expected.Amount.Int64(), actualSplit.Amount.Int64(), "callback amount %s", valAddress) + } + }) + } +} + +func (s *KeeperTestSuite) TestBatchSubmitDelegationICAMessages() { + // The test will submit ICA's across 10 validators, in batches of 3 + // There should be 4 ICA's submitted + batchSize := 3 + numValidators := 10 + expectedNumberOfIcas := 4 + depositRecord := recordstypes.DepositRecord{} + + // Create the delegation ICA channel + delegationAccountOwner := types.FormatHostZoneICAOwner(HostChainId, types.ICAAccountType_DELEGATION) + delegationChannelID, delegationPortID := s.CreateICAChannel(delegationAccountOwner) + + // Create a host zone + hostZone := types.HostZone{ + ChainId: HostChainId, + ConnectionId: ibctesting.FirstConnectionID, + HostDenom: Atom, + DelegationIcaAddress: "cosmos_DELEGATION", + } + + // Build the ICA messages and callback for each validator + var validators []*types.Validator + var undelegateMsgs []proto.Message + var delegations []*types.SplitDelegation + for i := 0; i < numValidators; i++ { + validatorAddress := fmt.Sprintf("val%d", i) + validators = append(validators, &types.Validator{Address: validatorAddress}) + + undelegateMsgs = append(undelegateMsgs, &stakingtypes.MsgDelegate{ + DelegatorAddress: hostZone.DelegationIcaAddress, + ValidatorAddress: validatorAddress, + Amount: sdk.NewCoin(hostZone.HostDenom, sdkmath.NewInt(100)), + }) + + delegations = append(delegations, &types.SplitDelegation{ + Validator: validatorAddress, + Amount: sdkmath.NewInt(100), + }) + } + + // Store the validators on the host zone + hostZone.Validators = validators + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + // Mock the epoch tracker to timeout 90% through the epoch + strideEpochTracker := types.EpochTracker{ + EpochIdentifier: epochstypes.STRIDE_EPOCH, + Duration: 10_000_000_000, // 10 second epochs + NextEpochStartTime: uint64(s.Coordinator.CurrentTime.UnixNano() + 30_000_000_000), // dictates timeout + } + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, strideEpochTracker) + + // Get tx seq number before the ICA was submitted to check whether an ICA was submitted + startSequence := s.MustGetNextSequenceNumber(delegationPortID, delegationChannelID) + + // Submit the delegations + numTxsSubmitted, err := s.App.StakeibcKeeper.BatchSubmitDelegationICAMessages( + s.Ctx, + hostZone, + depositRecord, + undelegateMsgs, + delegations, + batchSize, + ) + s.Require().NoError(err, "no error expected when submitting batches") + s.Require().Equal(numTxsSubmitted, uint64(expectedNumberOfIcas), "returned number of txs submitted") + + // Confirm the sequence number iterated by the expected number of ICAs + endSequence := s.MustGetNextSequenceNumber(delegationPortID, delegationChannelID) + s.Require().Equal(startSequence+uint64(expectedNumberOfIcas), endSequence, "expected number of ICA submissions") + + // Confirm the number of callback data's matches the expected number of ICAs + callbackData := s.App.IcacallbacksKeeper.GetAllCallbackData(s.Ctx) + s.Require().Equal(expectedNumberOfIcas, len(callbackData), "number of callback datas") + + // Remove the connection ID from the host zone and try again, it should fail + invalidHostZone := hostZone + invalidHostZone.ConnectionId = "" + _, err = s.App.StakeibcKeeper.BatchSubmitDelegationICAMessages( + s.Ctx, + invalidHostZone, + depositRecord, + undelegateMsgs, + delegations, + batchSize, + ) + s.Require().ErrorContains(err, "failed to submit delegation ICAs") +} diff --git a/x/stakeibc/keeper/epoch_tracker.go b/x/stakeibc/keeper/epoch_tracker.go new file mode 100644 index 00000000000..cc913448dbb --- /dev/null +++ b/x/stakeibc/keeper/epoch_tracker.go @@ -0,0 +1,135 @@ +package keeper + +import ( + "fmt" + + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + "cosmossdk.io/store/prefix" + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/spf13/cast" + + epochstypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// SetEpochTracker set a specific epochTracker in the store from its index +func (k Keeper) SetEpochTracker(ctx sdk.Context, epochTracker types.EpochTracker) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.EpochTrackerKeyPrefix)) + b := k.cdc.MustMarshal(&epochTracker) + store.Set(types.EpochTrackerKey( + epochTracker.EpochIdentifier, + ), b) +} + +// GetEpochTracker returns a epochTracker from its index +func (k Keeper) GetEpochTracker( + ctx sdk.Context, + epochIdentifier string, +) (val types.EpochTracker, found bool) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.EpochTrackerKeyPrefix)) + + b := store.Get(types.EpochTrackerKey( + epochIdentifier, + )) + if b == nil { + return val, false + } + + k.cdc.MustUnmarshal(b, &val) + return val, true +} + +// RemoveEpochTracker removes a epochTracker from the store +func (k Keeper) RemoveEpochTracker( + ctx sdk.Context, + epochIdentifier string, +) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.EpochTrackerKeyPrefix)) + store.Delete(types.EpochTrackerKey( + epochIdentifier, + )) +} + +// GetAllEpochTracker returns all epochTracker +func (k Keeper) GetAllEpochTracker(ctx sdk.Context) (list []types.EpochTracker) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.EpochTrackerKeyPrefix)) + iterator := storetypes.KVStorePrefixIterator(store, []byte{}) + + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + var val types.EpochTracker + k.cdc.MustUnmarshal(iterator.Value(), &val) + list = append(list, val) + } + + return +} + +// Update the epoch information in the stakeibc epoch tracker +func (k Keeper) UpdateEpochTracker(ctx sdk.Context, epochInfo epochstypes.EpochInfo) (epochNumber uint64, err error) { + epochNumber, err = cast.ToUint64E(epochInfo.CurrentEpoch) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Could not convert epoch number to uint64: %v", err)) + return 0, err + } + epochDurationNano, err := cast.ToUint64E(epochInfo.Duration.Nanoseconds()) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Could not convert epoch duration to uint64: %v", err)) + return 0, err + } + nextEpochStartTime, err := cast.ToUint64E(epochInfo.CurrentEpochStartTime.Add(epochInfo.Duration).UnixNano()) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Could not convert epoch duration to uint64: %v", err)) + return 0, err + } + epochTracker := types.EpochTracker{ + EpochIdentifier: epochInfo.Identifier, + EpochNumber: epochNumber, + Duration: epochDurationNano, + NextEpochStartTime: nextEpochStartTime, + } + k.SetEpochTracker(ctx, epochTracker) + + return epochNumber, nil +} + +// helper to get what share of the curr epoch we're through +func (k Keeper) GetStrideEpochElapsedShare(ctx sdk.Context) (sdkmath.LegacyDec, error) { + // Get the current stride epoch + epochTracker, found := k.GetEpochTracker(ctx, epochstypes.STRIDE_EPOCH) + if !found { + return sdkmath.LegacyZeroDec(), errorsmod.Wrapf(sdkerrors.ErrNotFound, "Failed to get epoch tracker for %s", epochstypes.STRIDE_EPOCH) + } + + // Get epoch start time, end time, and duration + epochDuration, err := cast.ToInt64E(epochTracker.Duration) + if err != nil { + return sdkmath.LegacyZeroDec(), errorsmod.Wrap(err, "unable to convert epoch duration to int64") + } + epochEndTime, err := cast.ToInt64E(epochTracker.NextEpochStartTime) + if err != nil { + return sdkmath.LegacyZeroDec(), errorsmod.Wrap(err, "unable to convert next epoch start time to int64") + } + epochStartTime := epochEndTime - epochDuration + + // Confirm the current block time is inside the current epoch's start and end times + currBlockTime := ctx.BlockTime().UnixNano() + if currBlockTime < epochStartTime || currBlockTime > epochEndTime { + return sdkmath.LegacyZeroDec(), errorsmod.Wrapf(types.ErrInvalidEpoch, + "current block time %d is not within current epoch (ending at %d)", currBlockTime, epochTracker.NextEpochStartTime) + } + + // Get elapsed share + elapsedTime := currBlockTime - epochStartTime + elapsedShare := sdkmath.LegacyNewDec(elapsedTime).Quo(sdkmath.LegacyNewDec(epochDuration)) + if elapsedShare.LT(sdkmath.LegacyZeroDec()) || elapsedShare.GT(sdkmath.LegacyOneDec()) { + return sdkmath.LegacyZeroDec(), errorsmod.Wrapf(types.ErrInvalidEpoch, "elapsed share (%s) for epoch is not between 0 and 1", elapsedShare) + } + + k.Logger(ctx).Info(fmt.Sprintf("Epoch elapsed share: %v (Block Time: %d, Epoch End Time: %d)", elapsedShare, currBlockTime, epochEndTime)) + return elapsedShare, nil +} diff --git a/x/stakeibc/keeper/epoch_tracker_test.go b/x/stakeibc/keeper/epoch_tracker_test.go new file mode 100644 index 00000000000..da2706f78fb --- /dev/null +++ b/x/stakeibc/keeper/epoch_tracker_test.go @@ -0,0 +1,158 @@ +package keeper_test + +import ( + "math" + "strconv" + + sdkmath "cosmossdk.io/math" + + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" + stakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// These are used to indicate that the value does not matter for the sake of the test +const ( + DefaultEpochDurationSeconds = 10.0 + DefaultNextStartTimeSeconds = 10.0 + ToNanoSeconds = 1_000_000_000 +) + +func (s *KeeperTestSuite) createNEpochTracker(n int) []types.EpochTracker { + items := make([]types.EpochTracker, n) + for i := range items { + items[i].EpochIdentifier = strconv.Itoa(i) + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, items[i]) + } + return items +} + +func (s *KeeperTestSuite) TestEpochTrackerGet() { + items := s.createNEpochTracker(10) + for _, item := range items { + rst, found := s.App.StakeibcKeeper.GetEpochTracker(s.Ctx, + item.EpochIdentifier, + ) + s.Require().True(found) + s.Require().Equal( + &item, + &rst, + ) + } +} + +func (s *KeeperTestSuite) TestEpochTrackerRemove() { + items := s.createNEpochTracker(10) + for _, item := range items { + s.App.StakeibcKeeper.RemoveEpochTracker(s.Ctx, + item.EpochIdentifier, + ) + _, found := s.App.StakeibcKeeper.GetEpochTracker(s.Ctx, + item.EpochIdentifier, + ) + s.Require().False(found) + } +} + +func (s *KeeperTestSuite) TestEpochTrackerGetAll() { + items := s.createNEpochTracker(10) + s.Require().ElementsMatch( + items, + s.App.StakeibcKeeper.GetAllEpochTracker(s.Ctx), + ) +} + +// TODO: Move keeper utility functions to new file +func (s *KeeperTestSuite) SetupEpochElapsedShares(epochDurationSeconds float64, nextStartTimeSeconds float64) { + // We call this to instantiate the block time + s.CreateTransferChannel(HostChainId) + + strideEpochTracker := stakeibctypes.EpochTracker{ + EpochIdentifier: epochtypes.STRIDE_EPOCH, + Duration: uint64(epochDurationSeconds * ToNanoSeconds), + NextEpochStartTime: uint64(float64(s.Coordinator.CurrentTime.UnixNano()) + (nextStartTimeSeconds * ToNanoSeconds)), + } + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, strideEpochTracker) +} + +// Helper function to create an epoch tracker and check that the elapsed share matches expectations +func (s *KeeperTestSuite) checkEpochElapsedShare(epochDurationSeconds float64, nextStartTimeSeconds float64, expectedShare sdkmath.LegacyDec) { + s.SetupEpochElapsedShares(epochDurationSeconds, nextStartTimeSeconds) + + actualShare, err := s.App.StakeibcKeeper.GetStrideEpochElapsedShare(s.Ctx) + s.Require().NoError(err) + s.Require().Equal(expectedShare, actualShare, "epoch elapsed share") +} + +func (s *KeeperTestSuite) TestEpochElapsedShare_Successful_StartOfEpoch() { + // 10 second long epoch, with 10 seconds remaining => 0% share + s.checkEpochElapsedShare(10.0, 10.0, sdkmath.LegacyNewDec(0)) +} + +func (s *KeeperTestSuite) TestEpochElapsedShare_Successful_OneQuarterThroughEpoch() { + // 10 second long epoch, with 7.5 seconds remaining => 2.5 seconds elapsed => 25% share + s.checkEpochElapsedShare(10.0, 7.5, sdkmath.LegacyNewDec(25).Quo(sdkmath.LegacyNewDec(100))) +} + +func (s *KeeperTestSuite) TestEpochElapsedShare_Successful_MiddleOfEpoch() { + // 10 second long epoch, with 5 seconds remaining => 50% share + s.checkEpochElapsedShare(10.0, 5.0, sdkmath.LegacyNewDec(50).Quo(sdkmath.LegacyNewDec(100))) +} + +func (s *KeeperTestSuite) TestEpochElapsedShare_Successful_ThreeQuartersThroughEpoch() { + // 10 second long epoch, with 2.5 seconds remaining => 7.5 seconds elapsed => 75% share + s.checkEpochElapsedShare(10.0, 2.5, sdkmath.LegacyNewDec(75).Quo(sdkmath.LegacyNewDec(100))) +} + +func (s *KeeperTestSuite) TestEpochElapsedShare_Successful_AlmostAtEndOfEpoch() { + // 10 second long epoch, with 0.1 seconds remaining => 99% share + s.checkEpochElapsedShare(10.0, 0.1, sdkmath.LegacyNewDec(99).Quo(sdkmath.LegacyNewDec(100))) +} + +func (s *KeeperTestSuite) TestEpochElapsedShare_Successful_EndOfEpoch() { + // 10 second long epoch, with 0 seconds remaining => 100% share + s.checkEpochElapsedShare(10.0, 0.0, sdkmath.LegacyNewDec(1)) +} + +func (s *KeeperTestSuite) TestEpochElapsedShare_Failed_EpochNotFound() { + // We skip the setup step her so an epoch tracker is never created + _, err := s.App.StakeibcKeeper.GetStrideEpochElapsedShare(s.Ctx) + s.Require().EqualError(err, "Failed to get epoch tracker for stride_epoch: not found") +} + +func (s *KeeperTestSuite) TestEpochElapsedShare_Failed_DurationOverflow() { + // Set the duration to the max uint in the epoch tracker so that it overflows when casting to an int + maxDurationSeconds := float64(math.MaxUint64 / ToNanoSeconds) + s.SetupEpochElapsedShares(maxDurationSeconds, DefaultNextStartTimeSeconds) + + _, err := s.App.StakeibcKeeper.GetStrideEpochElapsedShare(s.Ctx) + s.Require().ErrorContains(err, "unable to convert epoch duration to int64") +} + +func (s *KeeperTestSuite) TestEpochElapsedShare_Failed_NextStartTimeOverflow() { + // Set the next start time to the max uint in the epoch tracker so that it overflows when casting to an int + maxNextStartTimeSeconds := float64(math.MaxUint64 / ToNanoSeconds) + s.SetupEpochElapsedShares(DefaultEpochDurationSeconds, maxNextStartTimeSeconds) + + _, err := s.App.StakeibcKeeper.GetStrideEpochElapsedShare(s.Ctx) + s.Require().ErrorContains(err, "unable to convert next epoch start time to int64") +} + +func (s *KeeperTestSuite) TestEpochElapsedShare_Failed_CurrentBlockTimeOverflow() { + // Set the current block time to the max uint so that it overflows when casting to an int + maxNextStartTimeSeconds := float64(math.MaxUint64 / ToNanoSeconds) + s.SetupEpochElapsedShares(DefaultEpochDurationSeconds, maxNextStartTimeSeconds) + + _, err := s.App.StakeibcKeeper.GetStrideEpochElapsedShare(s.Ctx) + s.Require().ErrorContains(err, "unable to convert next epoch start time to int64") +} + +func (s *KeeperTestSuite) TestEpochElapsedShare_Failed_BlockTimeOutsideEpoch() { + // Setting the duration to 0 will make the epoch start and end time equal to each other + // Which will violate the safety constraint + invalidDuration := 0.0 + s.SetupEpochElapsedShares(invalidDuration, DefaultNextStartTimeSeconds) + + _, err := s.App.StakeibcKeeper.GetStrideEpochElapsedShare(s.Ctx) + s.Require().ErrorContains(err, "is not within current epoch") +} diff --git a/x/stakeibc/keeper/events.go b/x/stakeibc/keeper/events.go new file mode 100644 index 00000000000..e77cce6e1e8 --- /dev/null +++ b/x/stakeibc/keeper/events.go @@ -0,0 +1,170 @@ +package keeper + +import ( + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// Emits a successful liquid stake event, and displays metadata such as the stToken amount +func EmitSuccessfulLiquidStakeEvent(ctx sdk.Context, msg *types.MsgLiquidStake, hostZone types.HostZone, stAmount sdkmath.Int) { + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeLiquidStakeRequest, + sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), + sdk.NewAttribute(types.AttributeKeyLiquidStaker, msg.Creator), + sdk.NewAttribute(types.AttributeKeyHostZone, hostZone.ChainId), + sdk.NewAttribute(types.AttributeKeyNativeBaseDenom, msg.HostDenom), + sdk.NewAttribute(types.AttributeKeyNativeIBCDenom, hostZone.IbcDenom), + sdk.NewAttribute(types.AttributeKeyNativeAmount, msg.Amount.String()), + sdk.NewAttribute(types.AttributeKeyStTokenAmount, stAmount.String()), + ), + ) +} + +// Emits a successful redeem stake event, and displays metadata such as the native amount +func EmitSuccessfulRedeemStakeEvent(ctx sdk.Context, msg *types.MsgRedeemStake, hostZone types.HostZone, nativeAmount, stAmount sdkmath.Int) { + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeRedeemStakeRequest, + sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), + sdk.NewAttribute(types.AttributeKeyRedeemer, msg.Creator), + sdk.NewAttribute(types.AttributeKeyReceiver, msg.Receiver), + sdk.NewAttribute(types.AttributeKeyHostZone, hostZone.ChainId), + sdk.NewAttribute(types.AttributeKeyNativeBaseDenom, hostZone.HostDenom), + sdk.NewAttribute(types.AttributeKeyNativeIBCDenom, hostZone.IbcDenom), + sdk.NewAttribute(types.AttributeKeyNativeAmount, nativeAmount.String()), + sdk.NewAttribute(types.AttributeKeyStTokenAmount, stAmount.String()), + ), + ) +} + +// Builds common LSM liquid stake attribute for the event emission +func getLSMLiquidStakeEventAttributes(hostZone types.HostZone, lsmTokenDeposit recordstypes.LSMTokenDeposit) []sdk.Attribute { + return []sdk.Attribute{ + sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), + sdk.NewAttribute(types.AttributeKeyLiquidStaker, lsmTokenDeposit.StakerAddress), + sdk.NewAttribute(types.AttributeKeyHostZone, hostZone.ChainId), + sdk.NewAttribute(types.AttributeKeyNativeBaseDenom, hostZone.HostDenom), + sdk.NewAttribute(types.AttributeKeyValidator, lsmTokenDeposit.ValidatorAddress), + sdk.NewAttribute(types.AttributeKeyNativeIBCDenom, lsmTokenDeposit.IbcDenom), + sdk.NewAttribute(types.AttributeKeyLSMTokenBaseDenom, lsmTokenDeposit.Denom), + sdk.NewAttribute(types.AttributeKeyNativeAmount, lsmTokenDeposit.Amount.String()), + sdk.NewAttribute(types.AttributeKeyStTokenAmount, lsmTokenDeposit.StToken.Amount.String()), + sdk.NewAttribute(types.AttributeKeyLSMLiquidStakeTxId, lsmTokenDeposit.DepositId), + } +} + +// Emits a successful LSM liquid stake event, and displays metadata such as the stToken amount +func EmitSuccessfulLSMLiquidStakeEvent(ctx sdk.Context, hostZone types.HostZone, lsmTokenDeposit recordstypes.LSMTokenDeposit) { + attributes := append( + getLSMLiquidStakeEventAttributes(hostZone, lsmTokenDeposit), + sdk.NewAttribute(types.AttributeKeyTransactionStatus, types.AttributeValueTransactionSucceeded), + ) + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeLSMLiquidStakeRequest, + attributes..., + ), + ) +} + +// Emits a failed LSM liquid stake event, and displays the error +func EmitFailedLSMLiquidStakeEvent(ctx sdk.Context, hostZone types.HostZone, lsmTokenDeposit recordstypes.LSMTokenDeposit, errorMessage string) { + attributes := append( + getLSMLiquidStakeEventAttributes(hostZone, lsmTokenDeposit), + sdk.NewAttribute(types.AttributeKeyTransactionStatus, types.AttributeValueTransactionFailed), + sdk.NewAttribute(types.AttributeKeyError, errorMessage), + ) + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeLSMLiquidStakeRequest, + attributes..., + ), + ) +} + +// Emits a pending LSM liquid stake event, meaning a slash query was submitted +func EmitPendingLSMLiquidStakeEvent(ctx sdk.Context, hostZone types.HostZone, lsmTokenDeposit recordstypes.LSMTokenDeposit) { + attributes := append( + getLSMLiquidStakeEventAttributes(hostZone, lsmTokenDeposit), + sdk.NewAttribute(types.AttributeKeyTransactionStatus, types.AttributeValueTransactionPending), + ) + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeLSMLiquidStakeRequest, + attributes..., + ), + ) +} + +// Emits an event if a validator's shares to tokens rate changed +func EmitValidatorSharesToTokensRateChangeEvent( + ctx sdk.Context, + chainId string, + validatorAddress string, + previousSharesToTokensRate, + currentSharesToTokensRate sdkmath.LegacyDec, +) { + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeValidatorSharesToTokensRateChange, + sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), + sdk.NewAttribute(types.AttributeKeyHostZone, chainId), + sdk.NewAttribute(types.AttributeKeyValidator, validatorAddress), + sdk.NewAttribute(types.AttributeKeyPreviousSharesToTokensRate, previousSharesToTokensRate.String()), + sdk.NewAttribute(types.AttributeKeyCurrentSharesToTokensRate, currentSharesToTokensRate.String()), + ), + ) +} + +// Emits an event if a validator was slashed +func EmitValidatorSlashEvent( + ctx sdk.Context, + hostZone types.HostZone, + validatorAddress string, + slashPercent sdkmath.LegacyDec, + slashAmount sdkmath.Int, + currentDelegation sdkmath.Int, +) { + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeValidatorSlash, + sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), + sdk.NewAttribute(types.AttributeKeyHostZone, hostZone.ChainId), + sdk.NewAttribute(types.AttributeKeyNativeBaseDenom, hostZone.HostDenom), + sdk.NewAttribute(types.AttributeKeyValidator, validatorAddress), + sdk.NewAttribute(types.AttributeKeySlashPercent, slashPercent.String()), + sdk.NewAttribute(types.AttributeKeySlashAmount, slashAmount.String()), + sdk.NewAttribute(types.AttributeKeyCurrentDelegation, currentDelegation.String()), + ), + ) +} + +// Emits an event if an undelegation ICA was submitted for a host zone +func EmitUndelegationEvent(ctx sdk.Context, hostZone types.HostZone, totalUnbondAmount sdkmath.Int) { + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeUndelegation, + sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), + sdk.NewAttribute(types.AttributeKeyHostZone, hostZone.ChainId), + sdk.NewAttribute(types.AttributeKeyNativeBaseDenom, hostZone.HostDenom), + sdk.NewAttribute(types.AttributeKeyTotalUnbondAmount, totalUnbondAmount.String()), + ), + ) +} + +// Emits an event if an redemption sweep ICA was submitted for a host zone +func EmitRedemptionSweepEvent(ctx sdk.Context, hostZone types.HostZone, sweptAmount sdkmath.Int) { + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeRedemptionSweep, + sdk.NewAttribute(sdk.AttributeKeyModule, types.ModuleName), + sdk.NewAttribute(types.AttributeKeyHostZone, hostZone.ChainId), + sdk.NewAttribute(types.AttributeKeyNativeBaseDenom, hostZone.HostDenom), + sdk.NewAttribute(types.AttributeKeySweptAmount, sweptAmount.String()), + ), + ) +} diff --git a/x/stakeibc/keeper/genesis.go b/x/stakeibc/keeper/genesis.go new file mode 100644 index 00000000000..fba58a01de1 --- /dev/null +++ b/x/stakeibc/keeper/genesis.go @@ -0,0 +1,35 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// InitGenesis initializes the capability module's state from a provided genesis +// state. +func (k Keeper) InitGenesis(ctx sdk.Context, genState types.GenesisState) { + for _, hostZone := range genState.HostZoneList { + k.SetHostZone(ctx, hostZone) + } + for _, epochTracker := range genState.EpochTrackerList { + k.SetEpochTracker(ctx, epochTracker) + } + for _, tradeRoute := range genState.TradeRoutes { + k.SetTradeRoute(ctx, tradeRoute) + } + + k.SetParams(ctx, genState.Params) +} + +// ExportGenesis returns the capability module's exported genesis. +func (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { + genesis := types.DefaultGenesis() + + genesis.Params = k.GetParams(ctx) + genesis.HostZoneList = k.GetAllHostZone(ctx) + genesis.EpochTrackerList = k.GetAllEpochTracker(ctx) + genesis.TradeRoutes = k.GetAllTradeRoutes(ctx) + + return genesis +} diff --git a/x/stakeibc/keeper/genesis_test.go b/x/stakeibc/keeper/genesis_test.go new file mode 100644 index 00000000000..5365ca908e1 --- /dev/null +++ b/x/stakeibc/keeper/genesis_test.go @@ -0,0 +1,36 @@ +package keeper_test + +import ( + sdkmath "cosmossdk.io/math" + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func (s *KeeperTestSuite) TestGenesis() { + genesisState := types.GenesisState{ + Params: types.DefaultParams(), + PortId: types.PortID, + HostZoneList: []types.HostZone{ + { + ChainId: "A", + TotalDelegations: sdkmath.OneInt(), + RedemptionRate: sdkmath.LegacyOneDec(), + LastRedemptionRate: sdkmath.LegacyOneDec(), + MinRedemptionRate: sdkmath.LegacyOneDec(), + MaxRedemptionRate: sdkmath.LegacyOneDec(), + MinInnerRedemptionRate: sdkmath.LegacyOneDec(), + MaxInnerRedemptionRate: sdkmath.LegacyOneDec(), + Validators: []*types.Validator{}, + }, + }, + EpochTrackerList: []types.EpochTracker{ + {EpochIdentifier: "stride_epoch"}, + }, + TradeRoutes: []types.TradeRoute{}, + } + + s.App.StakeibcKeeper.InitGenesis(s.Ctx, genesisState) + exported := s.App.StakeibcKeeper.ExportGenesis(s.Ctx) + + s.Require().Equal(genesisState, *exported) +} diff --git a/x/stakeibc/keeper/get_denom_traces_test.go b/x/stakeibc/keeper/get_denom_traces_test.go new file mode 100644 index 00000000000..4b977ee7b9a --- /dev/null +++ b/x/stakeibc/keeper/get_denom_traces_test.go @@ -0,0 +1,20 @@ +package keeper_test + +// // Note: this is for dockernet + +// import ( +// "fmt" + +// transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" +// ) + +// func (s *KeeperTestSuite) TestIBCDenom() { +// chainId := "{CHAIN_ID}" +// denom := "{minimal_denom}" +// for i := 0; i < 4; i++ { +// sourcePrefix := transfertypes.GetDenomPrefix("transfer", fmt.Sprintf("channel-%d", i)) +// prefixedDenom := sourcePrefix + denom + +// fmt.Printf("IBC_%s_CHANNEL_%d_DENOM='%s'\n", chainId, i, transfertypes.ParseDenomTrace(prefixedDenom).IBCDenom()) +// } +// } diff --git a/x/stakeibc/keeper/gov.go b/x/stakeibc/keeper/gov.go new file mode 100644 index 00000000000..c5cf0108142 --- /dev/null +++ b/x/stakeibc/keeper/gov.go @@ -0,0 +1,34 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func (k Keeper) AddValidatorsProposal(ctx sdk.Context, msg *types.AddValidatorsProposal) error { + for _, validator := range msg.Validators { + if err := k.AddValidatorToHostZone(ctx, msg.HostZone, *validator, true); err != nil { + return err + } + } + + // Confirm none of the validator's exceed the weight cap + if err := k.CheckValidatorWeightsBelowCap(ctx, msg.HostZone); err != nil { + return err + } + + return nil +} + +func (k Keeper) ToggleLSMProposal(ctx sdk.Context, msg *types.ToggleLSMProposal) error { + hostZone, found := k.GetHostZone(ctx, msg.HostZone) + if !found { + return types.ErrHostZoneNotFound.Wrap(msg.HostZone) + } + + hostZone.LsmLiquidStakeEnabled = msg.Enabled + k.SetHostZone(ctx, hostZone) + + return nil +} diff --git a/x/stakeibc/keeper/grpc_query.go b/x/stakeibc/keeper/grpc_query.go new file mode 100644 index 00000000000..ee397d1319f --- /dev/null +++ b/x/stakeibc/keeper/grpc_query.go @@ -0,0 +1,256 @@ +package keeper + +import ( + "context" + "fmt" + "strings" + "time" + + "cosmossdk.io/store/prefix" + sdk "github.com/cosmos/cosmos-sdk/types" + + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types" + + "github.com/osmosis-labs/osmosis/v27/utils" + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +const nanosecondsInDay = 86400000000000 + +var _ types.QueryServer = Keeper{} + +func (k Keeper) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + ctx := sdk.UnwrapSDKContext(c) + + return &types.QueryParamsResponse{Params: k.GetParams(ctx)}, nil +} + +func (k Keeper) ModuleAddress(goCtx context.Context, req *types.QueryModuleAddressRequest) (*types.QueryModuleAddressResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + ctx := sdk.UnwrapSDKContext(goCtx) + + addr := k.AccountKeeper.GetModuleAccount(ctx, req.Name).GetAddress().String() + + return &types.QueryModuleAddressResponse{Addr: addr}, nil +} + +func (k Keeper) HostZoneAll(c context.Context, req *types.QueryAllHostZoneRequest) (*types.QueryAllHostZoneResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + var hostZones []types.HostZone + ctx := sdk.UnwrapSDKContext(c) + + store := ctx.KVStore(k.storeKey) + hostZoneStore := prefix.NewStore(store, types.KeyPrefix(types.HostZoneKey)) + + pageRes, err := query.Paginate(hostZoneStore, req.Pagination, func(key []byte, value []byte) error { + var hostZone types.HostZone + if err := k.cdc.Unmarshal(value, &hostZone); err != nil { + return err + } + if hostZone.Validators == nil { + hostZone.Validators = []*types.Validator{} + } + + hostZones = append(hostZones, hostZone) + return nil + }) + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + + return &types.QueryAllHostZoneResponse{HostZone: hostZones, Pagination: pageRes}, nil +} + +func (k Keeper) HostZone(c context.Context, req *types.QueryGetHostZoneRequest) (*types.QueryGetHostZoneResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + ctx := sdk.UnwrapSDKContext(c) + hostZone, found := k.GetHostZone(ctx, req.ChainId) + if !found { + return nil, sdkerrors.ErrKeyNotFound + } + + return &types.QueryGetHostZoneResponse{HostZone: hostZone}, nil +} + +func (k Keeper) Validators(c context.Context, req *types.QueryGetValidatorsRequest) (*types.QueryGetValidatorsResponse, error) { + if req == nil || req.ChainId == "" { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + ctx := sdk.UnwrapSDKContext(c) + + hostZone, found := k.GetHostZone(ctx, req.ChainId) + if !found { + return nil, sdkerrors.ErrKeyNotFound + } + + return &types.QueryGetValidatorsResponse{Validators: hostZone.Validators}, nil +} + +func (k Keeper) AddressUnbondings(c context.Context, req *types.QueryAddressUnbondings) (*types.QueryAddressUnbondingsResponse, error) { + // The function queries all the unbondings associated with Stride addresses. + // This should provide more visiblity into the unbonding process for a user. + + if req == nil || req.Address == "" { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + ctx := sdk.UnwrapSDKContext(c) + + // The address field can either be a single address or several comma separated + addresses := strings.Split(req.Address, ",") + + addressUnbondings := []types.AddressUnbonding{} + + // get the relevant day + dayEpochTracker, found := k.GetEpochTracker(ctx, epochtypes.DAY_EPOCH) + if !found { + return nil, sdkerrors.ErrKeyNotFound + } + currentDay := dayEpochTracker.EpochNumber + + epochUnbondingRecords := k.RecordsKeeper.GetAllEpochUnbondingRecord(ctx) + + for _, epochUnbondingRecord := range epochUnbondingRecords { + for _, hostZoneUnbonding := range epochUnbondingRecord.GetHostZoneUnbondings() { + for _, userRedemptionRecordId := range hostZoneUnbonding.GetUserRedemptionRecords() { + userRedemptionRecordComponents := strings.Split(userRedemptionRecordId, ".") + if len(userRedemptionRecordComponents) != 3 { + k.Logger(ctx).Error(fmt.Sprintf("invalid user redemption record id %s", userRedemptionRecordId)) + continue + } + userRedemptionRecordAddress := userRedemptionRecordComponents[2] + + // Check if the userRedemptionRecordAddress is one targeted by the address(es) in the query + targetAddress := false + for _, address := range addresses { + if userRedemptionRecordAddress == strings.TrimSpace(address) { + targetAddress = true + break + } + } + if targetAddress { + userRedemptionRecord, found := k.RecordsKeeper.GetUserRedemptionRecord(ctx, userRedemptionRecordId) + if !found { + continue // the record has already been claimed + } + + // get the anticipated unbonding time + unbondingTime := hostZoneUnbonding.UnbondingTime + if unbondingTime == 0 { + hostZone, found := k.GetHostZone(ctx, hostZoneUnbonding.HostZoneId) + if !found { + return nil, sdkerrors.ErrKeyNotFound + } + unbondingFrequency := hostZone.GetUnbondingFrequency() + daysUntilUnbonding := unbondingFrequency - (currentDay % unbondingFrequency) + unbondingStartTime := dayEpochTracker.NextEpochStartTime + ((daysUntilUnbonding - 1) * nanosecondsInDay) + unbondingDurationEstimate := (unbondingFrequency - 1) * 7 + unbondingTime = unbondingStartTime + (unbondingDurationEstimate * nanosecondsInDay) + } + unbondingTime = unbondingTime + nanosecondsInDay + unbondingTimeStr := time.Unix(0, utils.UintToInt(unbondingTime)).UTC().String() + + addressUnbonding := types.AddressUnbonding{ + Address: userRedemptionRecordAddress, + Receiver: userRedemptionRecord.Receiver, + UnbondingEstimatedTime: unbondingTimeStr, + Amount: userRedemptionRecord.NativeTokenAmount, + Denom: userRedemptionRecord.Denom, + ClaimIsPending: userRedemptionRecord.ClaimIsPending, + EpochNumber: userRedemptionRecord.EpochNumber, + } + addressUnbondings = append(addressUnbondings, addressUnbonding) + } + } + } + } + + return &types.QueryAddressUnbondingsResponse{AddressUnbondings: addressUnbondings}, nil +} + +func (k Keeper) EpochTrackerAll(c context.Context, req *types.QueryAllEpochTrackerRequest) (*types.QueryAllEpochTrackerResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + ctx := sdk.UnwrapSDKContext(c) + epochTrackers := k.GetAllEpochTracker(ctx) + + return &types.QueryAllEpochTrackerResponse{EpochTracker: epochTrackers}, nil +} + +func (k Keeper) EpochTracker(c context.Context, req *types.QueryGetEpochTrackerRequest) (*types.QueryGetEpochTrackerResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + ctx := sdk.UnwrapSDKContext(c) + + val, found := k.GetEpochTracker( + ctx, + req.EpochIdentifier, + ) + if !found { + return nil, status.Error(codes.NotFound, "not found") + } + + return &types.QueryGetEpochTrackerResponse{EpochTracker: val}, nil +} + +func (k Keeper) AllTradeRoutes(c context.Context, req *types.QueryAllTradeRoutes) (*types.QueryAllTradeRoutesResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + ctx := sdk.UnwrapSDKContext(c) + + routes := k.GetAllTradeRoutes(ctx) + + return &types.QueryAllTradeRoutesResponse{TradeRoutes: routes}, nil +} + +// InterchainAccountFromAddress implements the Query/InterchainAccountFromAddress gRPC method +func (k Keeper) InterchainAccountFromAddress(goCtx context.Context, req *types.QueryInterchainAccountFromAddressRequest) (*types.QueryInterchainAccountFromAddressResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + portID, err := icatypes.NewControllerPortID(req.Owner) + if err != nil { + return nil, status.Errorf(codes.InvalidArgument, "could not find account: %s", err) + } + + addr, found := k.ICAControllerKeeper.GetInterchainAccountAddress(ctx, req.ConnectionId, portID) + if !found { + return nil, status.Errorf(codes.NotFound, "no account found for portID %s", portID) + } + + return types.NewQueryInterchainAccountResponse(addr), nil +} + +func (k Keeper) NextPacketSequence(c context.Context, req *types.QueryGetNextPacketSequenceRequest) (*types.QueryGetNextPacketSequenceResponse, error) { + if req == nil || req.ChannelId == "" || req.PortId == "" { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + + ctx := sdk.UnwrapSDKContext(c) + sequence, found := k.IBCKeeper.ChannelKeeper.GetNextSequenceSend(ctx, req.PortId, req.ChannelId) + if !found { + return nil, status.Error(codes.InvalidArgument, "channel and port combination not found") + } + + return &types.QueryGetNextPacketSequenceResponse{Sequence: sequence}, nil +} diff --git a/x/stakeibc/keeper/grpc_query_test.go b/x/stakeibc/keeper/grpc_query_test.go new file mode 100644 index 00000000000..041d9da6d51 --- /dev/null +++ b/x/stakeibc/keeper/grpc_query_test.go @@ -0,0 +1,493 @@ +package keeper_test + +import ( + "strconv" + + sdkmath "cosmossdk.io/math" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/cosmos-sdk/types/query" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + recordtypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func (s *KeeperTestSuite) TestParamsQuery() { + params := types.DefaultParams() + s.App.StakeibcKeeper.SetParams(s.Ctx, params) + + response, err := s.App.StakeibcKeeper.Params(s.Ctx, &types.QueryParamsRequest{}) + s.Require().NoError(err) + s.Require().Equal(&types.QueryParamsResponse{Params: params}, response) +} + +func (s *KeeperTestSuite) TestHostZoneQuerySingle() { + msgs := s.createNHostZone(2) + for _, tc := range []struct { + desc string + request *types.QueryGetHostZoneRequest + response *types.QueryGetHostZoneResponse + err error + }{ + { + desc: "First", + request: &types.QueryGetHostZoneRequest{ChainId: msgs[0].ChainId}, + response: &types.QueryGetHostZoneResponse{HostZone: msgs[0]}, + }, + { + desc: "Second", + request: &types.QueryGetHostZoneRequest{ChainId: msgs[1].ChainId}, + response: &types.QueryGetHostZoneResponse{HostZone: msgs[1]}, + }, + { + desc: "KeyNotFound", + request: &types.QueryGetHostZoneRequest{ChainId: strconv.Itoa((len(msgs)))}, + err: sdkerrors.ErrKeyNotFound, + }, + { + desc: "InvalidRequest", + err: status.Error(codes.InvalidArgument, "invalid request"), + }, + } { + s.Run(tc.desc, func() { + response, err := s.App.StakeibcKeeper.HostZone(s.Ctx, tc.request) + if tc.err != nil { + s.Require().ErrorIs(err, tc.err) + } else { + s.Require().NoError(err) + s.Require().Equal( + tc.response, + response, + ) + } + }) + } +} + +func (s *KeeperTestSuite) TestHostZoneQueryPaginated() { + msgs := s.createNHostZone(5) + + request := func(next []byte, offset, limit uint64, total bool) *types.QueryAllHostZoneRequest { + return &types.QueryAllHostZoneRequest{ + Pagination: &query.PageRequest{ + Key: next, + Offset: offset, + Limit: limit, + CountTotal: total, + }, + } + } + s.Run("ByOffset", func() { + step := 2 + for i := 0; i < len(msgs); i += step { + resp, err := s.App.StakeibcKeeper.HostZoneAll(s.Ctx, request(nil, uint64(i), uint64(step), false)) + s.Require().NoError(err) + s.Require().LessOrEqual(len(resp.HostZone), step) + s.Require().Subset( + msgs, + resp.HostZone, + ) + } + }) + s.Run("ByKey", func() { + step := 2 + var next []byte + for i := 0; i < len(msgs); i += step { + resp, err := s.App.StakeibcKeeper.HostZoneAll(s.Ctx, request(next, 0, uint64(step), false)) + s.Require().NoError(err) + s.Require().LessOrEqual(len(resp.HostZone), step) + s.Require().Subset( + msgs, + resp.HostZone, + ) + next = resp.Pagination.NextKey + } + }) + s.Run("Total", func() { + resp, err := s.App.StakeibcKeeper.HostZoneAll(s.Ctx, request(nil, 0, 0, true)) + s.Require().NoError(err) + s.Require().Equal(len(msgs), int(resp.Pagination.Total)) + s.Require().ElementsMatch( + msgs, + resp.HostZone, + ) + }) + s.Run("InvalidRequest", func() { + _, err := s.App.StakeibcKeeper.HostZoneAll(s.Ctx, nil) + s.Require().ErrorIs(err, status.Error(codes.InvalidArgument, "invalid request")) + }) +} + +func (s *KeeperTestSuite) TestValidatorQuery() { + validatorsByHostZone := make(map[string][]*types.Validator) + validators := []*types.Validator{} + + chainId := "GAIA" + hostZone := &types.HostZone{ + ChainId: chainId, + Validators: validators, + } + validatorsByHostZone[chainId] = validators + s.App.StakeibcKeeper.SetHostZone(s.Ctx, *hostZone) + + for _, tc := range []struct { + desc string + request *types.QueryGetValidatorsRequest + response *types.QueryGetValidatorsResponse + err error + }{ + { + desc: "First", + request: &types.QueryGetValidatorsRequest{ChainId: chainId}, + response: &types.QueryGetValidatorsResponse{Validators: validators}, + }, + { + desc: "InvalidRequest", + err: status.Error(codes.InvalidArgument, "invalid request"), + }, + } { + s.Run(tc.desc, func() { + response, err := s.App.StakeibcKeeper.Validators(s.Ctx, tc.request) + if tc.err != nil { + s.Require().ErrorIs(err, tc.err) + } else { + s.Require().NoError(err) + s.Require().Equal( + tc.response, + response, + ) + } + }) + } +} + +func (s *KeeperTestSuite) TestAddressUnbondings() { + // Setup DayEpoch Tracker for current epoch 100 + const nanosecondsInDay = 86400000000000 + const testTimeNanos = 1704067200000000000 // 2024-01-01 00:00:00 is start of epoch 100 + dayEpochTracker := types.EpochTracker{ + EpochIdentifier: epochtypes.DAY_EPOCH, + EpochNumber: 100, + NextEpochStartTime: testTimeNanos + nanosecondsInDay, + Duration: nanosecondsInDay, + } + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, dayEpochTracker) + + // Setup HostZones with different unbonding periods + cosmosZone := types.HostZone{ + ChainId: "cosmos", + UnbondingPeriod: 21, + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, cosmosZone) + strideZone := types.HostZone{ + ChainId: "stride", + UnbondingPeriod: 9, // just so different unbonding period + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, strideZone) + + // Setup some epoch unbonding records to test against + for _, epochUnbondingRecord := range []*recordtypes.EpochUnbondingRecord{ + { + EpochNumber: 101, + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{ + { + HostZoneId: "stride", + UserRedemptionRecords: []string{ + "stride.101.strideAddrUserA", + "stride.101.strideAddrUserB", + }, + }, + { + HostZoneId: "cosmos", + UserRedemptionRecords: []string{ + "cosmos.101.cosmosAddrUserA", + }, + }, + }, + }, + { + EpochNumber: 110, + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{ + { + HostZoneId: "stride", + UserRedemptionRecords: []string{ + "stride.110.strideAddrUserA", + }, + }, + }, + }, + } { + s.App.StakeibcKeeper.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, *epochUnbondingRecord) + } + + // Setup corresponding user unbonding records to test with + for _, userRedemptionRecord := range []*recordtypes.UserRedemptionRecord{ + { + Id: "stride.101.strideAddrUserA", + Receiver: "strideAddrUserA", + NativeTokenAmount: sdkmath.NewInt(2000), + Denom: "ustrd", + HostZoneId: "stride", + EpochNumber: uint64(101), + ClaimIsPending: false, + }, + { + Id: "stride.110.strideAddrUserA", + Receiver: "strideAddrUserA", + NativeTokenAmount: sdkmath.NewInt(5000), + Denom: "ustrd", + HostZoneId: "stride", + EpochNumber: uint64(110), + ClaimIsPending: false, + }, + { + Id: "stride.101.strideAddrUserB", + Receiver: "strideAddrUserB", + NativeTokenAmount: sdkmath.NewInt(8500), + Denom: "ustrd", + HostZoneId: "stride", + EpochNumber: uint64(101), + ClaimIsPending: false, + }, + { + Id: "cosmos.101.cosmosAddrUserA", + Receiver: "cosmosAddrUserA", + NativeTokenAmount: sdkmath.NewInt(1200), + Denom: "uatom", + HostZoneId: "cosmos", + EpochNumber: uint64(101), + ClaimIsPending: false, + }, + } { + s.App.StakeibcKeeper.RecordsKeeper.SetUserRedemptionRecord(s.Ctx, *userRedemptionRecord) + } + + for _, tc := range []struct { + desc string + request *types.QueryAddressUnbondings + response *types.QueryAddressUnbondingsResponse + err error + }{ + { + desc: "Single input address without any records expected", + request: &types.QueryAddressUnbondings{ + Address: "cosmosAddrUserB", + }, + response: &types.QueryAddressUnbondingsResponse{ + AddressUnbondings: []types.AddressUnbonding{}, + }, + }, + { + desc: "Single input address with one record expected", + request: &types.QueryAddressUnbondings{ + Address: "cosmosAddrUserA", + }, + response: &types.QueryAddressUnbondingsResponse{ + AddressUnbondings: []types.AddressUnbonding{ + { + Address: "cosmosAddrUserA", + Receiver: "cosmosAddrUserA", + Amount: sdkmath.NewInt(1200), + Denom: "uatom", + EpochNumber: uint64(101), + ClaimIsPending: false, + UnbondingEstimatedTime: "2024-01-27 00:00:00 +0000 UTC", + }, + }, + }, + }, + { + desc: "Single input address with multiple records across epochs", + request: &types.QueryAddressUnbondings{ + Address: "strideAddrUserA", + }, + response: &types.QueryAddressUnbondingsResponse{ + AddressUnbondings: []types.AddressUnbonding{ + { + Address: "strideAddrUserA", + Receiver: "strideAddrUserA", + Amount: sdkmath.NewInt(2000), + Denom: "ustrd", + EpochNumber: uint64(101), + ClaimIsPending: false, + UnbondingEstimatedTime: "2024-01-11 00:00:00 +0000 UTC", + }, + { + Address: "strideAddrUserA", + Receiver: "strideAddrUserA", + Amount: sdkmath.NewInt(5000), + Denom: "ustrd", + EpochNumber: uint64(110), + ClaimIsPending: false, + UnbondingEstimatedTime: "2024-01-11 00:00:00 +0000 UTC", + }, + }, + }, + }, + { + desc: "Multiple input addresses only one has a record, others unfound", + request: &types.QueryAddressUnbondings{ + Address: "cosmosAddrUserB,strideAddrUserB,strideAddrUserC", + }, + response: &types.QueryAddressUnbondingsResponse{ + AddressUnbondings: []types.AddressUnbonding{ + { + Address: "strideAddrUserB", + Receiver: "strideAddrUserB", + Amount: sdkmath.NewInt(8500), + Denom: "ustrd", + EpochNumber: uint64(101), + ClaimIsPending: false, + UnbondingEstimatedTime: "2024-01-11 00:00:00 +0000 UTC", + }, + }, + }, + }, + { + desc: "Multiple input addresses all with one or more records", + request: &types.QueryAddressUnbondings{ + Address: "strideAddrUserA, cosmosAddrUserA", + }, + response: &types.QueryAddressUnbondingsResponse{ + AddressUnbondings: []types.AddressUnbonding{ + { + Address: "strideAddrUserA", + Receiver: "strideAddrUserA", + Amount: sdkmath.NewInt(2000), + Denom: "ustrd", + EpochNumber: uint64(101), + ClaimIsPending: false, + UnbondingEstimatedTime: "2024-01-11 00:00:00 +0000 UTC", + }, + { + Address: "cosmosAddrUserA", + Receiver: "cosmosAddrUserA", + Amount: sdkmath.NewInt(1200), + Denom: "uatom", + EpochNumber: uint64(101), + ClaimIsPending: false, + UnbondingEstimatedTime: "2024-01-27 00:00:00 +0000 UTC", + }, + { + Address: "strideAddrUserA", + Receiver: "strideAddrUserA", + Amount: sdkmath.NewInt(5000), + Denom: "ustrd", + EpochNumber: uint64(110), + ClaimIsPending: false, + UnbondingEstimatedTime: "2024-01-11 00:00:00 +0000 UTC", + }, + }, + }, + }, + { + desc: "No address given, error expected", + request: &types.QueryAddressUnbondings{ + Address: "", + }, + response: nil, + err: status.Error(codes.InvalidArgument, "invalid request"), + }, + } { + s.Run(tc.desc, func() { + response, err := s.App.StakeibcKeeper.AddressUnbondings(s.Ctx, tc.request) + if tc.err != nil { + s.Require().ErrorIs(err, tc.err) + } else { + s.Require().NoError(err) + s.Require().Equal( + tc.response, + response, + ) + } + }) + } +} + +func (s *KeeperTestSuite) TestEpochTrackerQuerySingle() { + msgs := s.createNEpochTracker(2) + for _, tc := range []struct { + desc string + request *types.QueryGetEpochTrackerRequest + response *types.QueryGetEpochTrackerResponse + err error + }{ + { + desc: "First", + request: &types.QueryGetEpochTrackerRequest{ + EpochIdentifier: msgs[0].EpochIdentifier, + }, + response: &types.QueryGetEpochTrackerResponse{EpochTracker: msgs[0]}, + }, + { + desc: "Second", + request: &types.QueryGetEpochTrackerRequest{ + EpochIdentifier: msgs[1].EpochIdentifier, + }, + response: &types.QueryGetEpochTrackerResponse{EpochTracker: msgs[1]}, + }, + { + desc: "KeyNotFound", + request: &types.QueryGetEpochTrackerRequest{ + EpochIdentifier: strconv.Itoa(100000), + }, + err: status.Error(codes.NotFound, "not found"), + }, + { + desc: "InvalidRequest", + err: status.Error(codes.InvalidArgument, "invalid request"), + }, + } { + s.Run(tc.desc, func() { + response, err := s.App.StakeibcKeeper.EpochTracker(s.Ctx, tc.request) + if tc.err != nil { + s.Require().ErrorIs(err, tc.err) + } else { + s.Require().NoError(err) + s.Require().Equal( + tc.response, + response, + ) + } + }) + } +} + +func (s *KeeperTestSuite) TestAllEpochTrackerQuery() { + msgs := s.createNEpochTracker(5) + + resp, err := s.App.StakeibcKeeper.EpochTrackerAll(s.Ctx, &types.QueryAllEpochTrackerRequest{}) + s.Require().NoError(err) + s.Require().Len(resp.EpochTracker, 5) + s.Require().Subset( + msgs, + resp.EpochTracker, + ) +} + +func (s *KeeperTestSuite) TestNextPacketSequenceQuery() { + portId := "transfer" + channelId := "channel-0" + sequence := uint64(10) + context := s.Ctx + + // Set a channel sequence + s.App.IBCKeeper.ChannelKeeper.SetNextSequenceSend(s.Ctx, portId, channelId, sequence) + + // Test a successful query + response, err := s.App.StakeibcKeeper.NextPacketSequence(context, &types.QueryGetNextPacketSequenceRequest{ + ChannelId: channelId, + PortId: portId, + }) + s.Require().NoError(err) + s.Require().Equal(sequence, response.Sequence) + + // Test querying a non-existent channel (should fail) + _, err = s.App.StakeibcKeeper.NextPacketSequence(context, &types.QueryGetNextPacketSequenceRequest{ + ChannelId: "fake-channel", + PortId: portId, + }) + s.Require().ErrorContains(err, "channel and port combination not found") +} diff --git a/x/stakeibc/keeper/hooks.go b/x/stakeibc/keeper/hooks.go new file mode 100644 index 00000000000..dca57acfa13 --- /dev/null +++ b/x/stakeibc/keeper/hooks.go @@ -0,0 +1,182 @@ +package keeper + +import ( + "context" + "fmt" + "time" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/gogoproto/proto" + + "github.com/osmosis-labs/osmosis/v27/utils" + epochstypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +const StrideEpochsPerDayEpoch = uint64(4) + +func (k Keeper) BeforeEpochStart(context context.Context, epochInfo epochstypes.EpochInfo) { + ctx := sdk.UnwrapSDKContext(context) + + // Update the stakeibc epoch tracker + epochNumber, err := k.UpdateEpochTracker(ctx, epochInfo) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Unable to update epoch tracker, err: %s", err.Error())) + return + } + + // Day Epoch - Process Unbondings + if epochInfo.Identifier == epochstypes.DAY_EPOCH { + // Initiate unbondings from any hostZone where it's appropriate + k.InitiateAllHostZoneUnbondings(ctx, epochNumber) + // Cleanup any records that are no longer needed + k.CleanupEpochUnbondingRecords(ctx, epochNumber) + // Create an empty unbonding record for this epoch + k.CreateEpochUnbondingRecord(ctx, epochNumber) + } + + // Stride Epoch - Process Deposits and Delegations + if epochInfo.Identifier == epochstypes.STRIDE_EPOCH { + // Get cadence intervals + redemptionRateInterval := k.GetParam(ctx, types.KeyRedemptionRateInterval) + depositInterval := k.GetParam(ctx, types.KeyDepositInterval) + delegationInterval := k.GetParam(ctx, types.KeyDelegateInterval) + reinvestInterval := k.GetParam(ctx, types.KeyReinvestInterval) + + // Claim accrued staking rewards at the beginning of the epoch + k.ClaimAccruedStakingRewards(ctx) + + // Create a new deposit record for each host zone and the grab all deposit records + k.CreateDepositRecordsForEpoch(ctx, epochNumber) + depositRecords := k.RecordsKeeper.GetAllDepositRecord(ctx) + + // TODO: move this to an external function that anyone can call, so that we don't have to call it every epoch + k.SetWithdrawalAddress(ctx) + + // Update the redemption rate + if epochNumber%redemptionRateInterval == 0 { + k.UpdateRedemptionRates(ctx, depositRecords) + } + + // Transfer deposited funds from the controller account to the delegation account on the host zone + if epochNumber%depositInterval == 0 { + k.TransferExistingDepositsToHostZones(ctx, epochNumber, depositRecords) + } + + // Delegate tokens from the delegation account + if epochNumber%delegationInterval == 0 { + k.StakeExistingDepositsOnHostZones(ctx, epochNumber, depositRecords) + } + + // Reinvest staking rewards + if epochNumber%reinvestInterval == 0 { // allow a few blocks from UpdateUndelegatedBal to avoid conflicts + k.ReinvestRewards(ctx) + } + + // Rebalance stake according to validator weights + // This should only be run once per day, but it should not be run on a stride epoch that + // overlaps the day epoch, otherwise the unbondings could cause a redelegation to fail + // On mainnet, the stride epoch overlaps the day epoch when `epochNumber % 4 == 1`, + // so this will trigger the epoch before the unbonding + if epochNumber%StrideEpochsPerDayEpoch == 0 { + k.RebalanceAllHostZones(ctx) + } + + // Check previous epochs to see if unbondings finished, and sends the relevant tokens + // to the redemption account + k.SweepUnbondedTokensAllHostZones(ctx) + + // NOTE: Disabled in v28 as this feature is no longer being used. Uncomment to re-enable + // Transfers in and out of tokens for hostZones which have community pools + // k.ProcessAllCommunityPoolTokens(ctx) + + // Do transfers for all reward and swapped tokens defined by the trade routes every stride epoch + k.TransferAllRewardTokens(ctx) + } + if epochInfo.Identifier == epochstypes.MINT_EPOCH { + k.AuctionOffRewardCollectorBalance(ctx) + } +} + +func (k Keeper) AfterEpochEnd(context context.Context, epochInfo epochstypes.EpochInfo) {} + +// Hooks wrapper struct for incentives keeper +type Hooks struct { + k Keeper +} + +var _ epochstypes.EpochHooks = Hooks{} + +func (k Keeper) Hooks() Hooks { + return Hooks{k} +} + +// epochs hooks +func (h Hooks) BeforeEpochStart(context context.Context, epochInfo epochstypes.EpochInfo) { + ctx := sdk.UnwrapSDKContext(context) + + h.k.BeforeEpochStart(ctx, epochInfo) +} + +func (h Hooks) AfterEpochEnd(context context.Context, epochInfo epochstypes.EpochInfo) { + ctx := sdk.UnwrapSDKContext(context) + + h.k.AfterEpochEnd(ctx, epochInfo) +} + +// Set the withdrawal account address for each host zone +func (k Keeper) SetWithdrawalAddress(context context.Context) { + ctx := sdk.UnwrapSDKContext(context) + + k.Logger(ctx).Info("Setting Withdrawal Addresses...") + + for _, hostZone := range k.GetAllActiveHostZone(ctx) { + err := k.SetWithdrawalAddressOnHost(ctx, hostZone) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Unable to set withdrawal address on %s, err: %s", hostZone.ChainId, err)) + } + } +} + +// Claim staking rewards for each host zone +func (k Keeper) ClaimAccruedStakingRewards(context context.Context) { + ctx := sdk.UnwrapSDKContext(context) + + k.Logger(ctx).Info("Claiming Accrued Staking Rewards...") + + for _, hostZone := range k.GetAllActiveHostZone(ctx) { + err := k.ClaimAccruedStakingRewardsOnHost(ctx, hostZone) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Unable to claim accrued staking rewards on %s, err: %s", hostZone.ChainId, err)) + } + } +} + +// TODO [cleanup]: Remove after v17 upgrade +func (k Keeper) DisableHubTokenization(context context.Context) { + ctx := sdk.UnwrapSDKContext(context) + + k.Logger(ctx).Info("Disabling the ability to tokenize Gaia delegations") + + chainId := "cosmoshub-4" + hostZone, found := k.GetHostZone(ctx, chainId) + if !found { + k.Logger(ctx).Error("Gaia host zone not found, unable to disable tokenization") + return + } + + // Build the msg for the disable tokenization ICA tx + var msgs []proto.Message + msgs = append(msgs, &types.MsgDisableTokenizeShares{ + DelegatorAddress: hostZone.DelegationIcaAddress, + }) + + // Send the ICA tx to disable tokenization + timeoutTimestamp := utils.IntToUint(ctx.BlockTime().Add(24 * time.Hour).UnixNano()) + delegationOwner := types.FormatHostZoneICAOwner(hostZone.ChainId, types.ICAAccountType_DELEGATION) + err := k.SubmitICATxWithoutCallback(ctx, hostZone.ConnectionId, delegationOwner, msgs, timeoutTimestamp) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Failed to submit ICA tx to disable tokenization for gaia: %s", err.Error())) + return + } +} diff --git a/x/stakeibc/keeper/host_zone.go b/x/stakeibc/keeper/host_zone.go new file mode 100644 index 00000000000..a39b2fbef25 --- /dev/null +++ b/x/stakeibc/keeper/host_zone.go @@ -0,0 +1,294 @@ +package keeper + +import ( + "fmt" + "sort" + + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + "cosmossdk.io/store/prefix" + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + "github.com/osmosis-labs/osmosis/v27/utils" + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +const ( + MinValidatorsBeforeWeightCapCheck = 10 +) + +// SetHostZone set a specific hostZone in the store +func (k Keeper) SetHostZone(ctx sdk.Context, hostZone types.HostZone) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.HostZoneKey)) + b := k.cdc.MustMarshal(&hostZone) + store.Set([]byte(hostZone.ChainId), b) +} + +// GetHostZone returns a hostZone from its id +func (k Keeper) GetHostZone(ctx sdk.Context, chainId string) (val types.HostZone, found bool) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.HostZoneKey)) + b := store.Get([]byte(chainId)) + if b == nil { + return val, false + } + k.cdc.MustUnmarshal(b, &val) + if val.Validators == nil { + val.Validators = []*types.Validator{} + } + return val, true +} + +// GetActiveHostZone returns an error if the host zone is not found or if it's found, but is halted +func (k Keeper) GetActiveHostZone(ctx sdk.Context, chainId string) (hostZone types.HostZone, err error) { + hostZone, found := k.GetHostZone(ctx, chainId) + if !found { + return hostZone, types.ErrHostZoneNotFound.Wrapf("host zone %s not found", chainId) + } + if hostZone.Halted { + return hostZone, types.ErrHaltedHostZone.Wrapf("host zone %s is halted", chainId) + } + return hostZone, nil +} + +// GetHostZoneFromHostDenom returns a HostZone from a HostDenom +func (k Keeper) GetHostZoneFromHostDenom(ctx sdk.Context, denom string) (*types.HostZone, error) { + for _, hostZone := range k.GetAllHostZone(ctx) { + if hostZone.ChainId != "" && hostZone.HostDenom == denom { + return &hostZone, nil + } + } + return nil, errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "No HostZone for %s denom found", denom) +} + +// GetHostZoneFromIBCDenom returns a HostZone from a IBCDenom +func (k Keeper) GetHostZoneFromIBCDenom(ctx sdk.Context, denom string) (*types.HostZone, error) { + for _, hostZone := range k.GetAllHostZone(ctx) { + if hostZone.ChainId != "" && hostZone.IbcDenom == denom { + return &hostZone, nil + } + } + return nil, errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "No HostZone for %s found", denom) +} + +// GetHostZoneFromTransferChannelID returns a HostZone from a transfer channel ID +func (k Keeper) GetHostZoneFromTransferChannelID(ctx sdk.Context, channelID string) (hostZone types.HostZone, found bool) { + for _, hostZone := range k.GetAllActiveHostZone(ctx) { + if hostZone.TransferChannelId == channelID { + return hostZone, true + } + } + return types.HostZone{}, false +} + +// RemoveHostZone removes a hostZone from the store +func (k Keeper) RemoveHostZone(ctx sdk.Context, chainId string) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.HostZoneKey)) + store.Delete([]byte(chainId)) +} + +// GetAllHostZone returns all hostZone +func (k Keeper) GetAllHostZone(ctx sdk.Context) (list []types.HostZone) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.HostZoneKey)) + iterator := storetypes.KVStorePrefixIterator(store, []byte{}) + + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + var val types.HostZone + k.cdc.MustUnmarshal(iterator.Value(), &val) + if val.Validators == nil { + val.Validators = []*types.Validator{} + } + list = append(list, val) + } + + return +} + +// Unregisters a host zone, including removing the module accounts and records +func (k Keeper) UnregisterHostZone(ctx sdk.Context, chainId string) error { + hostZone, found := k.GetHostZone(ctx, chainId) + if !found { + return types.ErrHostZoneNotFound.Wrapf("host zone %s not found", chainId) + } + + // Burn all outstanding stTokens + stTokenDenom := utils.StAssetDenomFromHostZoneDenom(hostZone.HostDenom) + for _, account := range k.AccountKeeper.GetAllAccounts(ctx) { + stTokenBalance := k.bankKeeper.GetBalance(ctx, account.GetAddress(), stTokenDenom) + stTokensToBurn := sdk.NewCoins(stTokenBalance) + if err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, account.GetAddress(), types.ModuleName, stTokensToBurn); err != nil { + return err + } + if err := k.bankKeeper.BurnCoins(ctx, types.ModuleName, stTokensToBurn); err != nil { + return err + } + } + + // Set the escrow'd tokens to 0 (all the escrowed tokens should have been burned from the above) + k.RecordsKeeper.TransferKeeper.SetTotalEscrowForDenom(ctx, sdk.NewCoin(stTokenDenom, sdkmath.ZeroInt())) + + // Remove module accounts + depositAddress := types.NewHostZoneDepositAddress(chainId) + communityPoolStakeAddress := types.NewHostZoneModuleAddress(chainId, CommunityPoolStakeHoldingAddressKey) + communityPoolRedeemAddress := types.NewHostZoneModuleAddress(chainId, CommunityPoolRedeemHoldingAddressKey) + + k.AccountKeeper.RemoveAccount(ctx, k.AccountKeeper.GetAccount(ctx, depositAddress)) + k.AccountKeeper.RemoveAccount(ctx, k.AccountKeeper.GetAccount(ctx, communityPoolStakeAddress)) + k.AccountKeeper.RemoveAccount(ctx, k.AccountKeeper.GetAccount(ctx, communityPoolRedeemAddress)) + + // Remove all deposit records for the host zone + for _, depositRecord := range k.RecordsKeeper.GetAllDepositRecord(ctx) { + if depositRecord.HostZoneId == chainId { + k.RecordsKeeper.RemoveDepositRecord(ctx, depositRecord.Id) + } + } + + // Remove all epoch unbonding records for the host zone + for _, epochUnbondingRecord := range k.RecordsKeeper.GetAllEpochUnbondingRecord(ctx) { + updatedHostZoneUnbondings := []*recordstypes.HostZoneUnbonding{} + for _, hostZoneUnbonding := range epochUnbondingRecord.HostZoneUnbondings { + if hostZoneUnbonding.HostZoneId != chainId { + updatedHostZoneUnbondings = append(updatedHostZoneUnbondings, hostZoneUnbonding) + } + } + epochUnbondingRecord.HostZoneUnbondings = updatedHostZoneUnbondings + k.RecordsKeeper.SetEpochUnbondingRecord(ctx, epochUnbondingRecord) + } + + // Remove all user redemption records for the host zone + for _, userRedemptionRecord := range k.RecordsKeeper.GetAllUserRedemptionRecord(ctx) { + if userRedemptionRecord.HostZoneId == chainId { + k.RecordsKeeper.RemoveUserRedemptionRecord(ctx, userRedemptionRecord.Id) + } + } + + // Remove whitelisted address pairs from rate limit module + rewardCollectorAddress := k.AccountKeeper.GetModuleAccount(ctx, types.RewardCollectorName).GetAddress() + k.RatelimitKeeper.RemoveWhitelistedAddressPair(ctx, hostZone.DepositAddress, hostZone.DelegationIcaAddress) + k.RatelimitKeeper.RemoveWhitelistedAddressPair(ctx, hostZone.FeeIcaAddress, rewardCollectorAddress.String()) + k.RatelimitKeeper.RemoveWhitelistedAddressPair(ctx, hostZone.CommunityPoolDepositIcaAddress, hostZone.CommunityPoolStakeHoldingAddress) + k.RatelimitKeeper.RemoveWhitelistedAddressPair(ctx, hostZone.CommunityPoolDepositIcaAddress, hostZone.CommunityPoolRedeemHoldingAddress) + k.RatelimitKeeper.RemoveWhitelistedAddressPair(ctx, hostZone.CommunityPoolStakeHoldingAddress, hostZone.CommunityPoolReturnIcaAddress) + + // Remove any blacklisted denoms from the rate limit module (may not be applicable) + k.RatelimitKeeper.RemoveDenomFromBlacklist(ctx, utils.StAssetDenomFromHostZoneDenom(hostZone.HostDenom)) + + // Finally, remove the host zone struct + k.RemoveHostZone(ctx, chainId) + + return nil +} + +// GetAllActiveHostZone returns all hostZones that are active (halted = false) +func (k Keeper) GetAllActiveHostZone(ctx sdk.Context) (list []types.HostZone) { + list = []types.HostZone{} + for _, hostZone := range k.GetAllHostZone(ctx) { + if !hostZone.Halted { + list = append(list, hostZone) + } + } + return +} + +// Validate whether a denom is a supported liquid staking token +func (k Keeper) CheckIsStToken(ctx sdk.Context, denom string) bool { + for _, hostZone := range k.GetAllHostZone(ctx) { + if types.StAssetDenomFromHostZoneDenom(hostZone.HostDenom) == denom { + return true + } + } + return false +} + +// IterateHostZones iterates zones +// TODO [cleanup]: Remove this in favor of GetAllHostZones +func (k Keeper) IterateHostZones(ctx sdk.Context, fn func(ctx sdk.Context, index int64, zoneInfo types.HostZone) error) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.HostZoneKey)) + + iterator := storetypes.KVStorePrefixIterator(store, nil) + defer iterator.Close() + + i := int64(0) + + for ; iterator.Valid(); iterator.Next() { + k.Logger(ctx).Debug(fmt.Sprintf("Iterating HostZone %d", i)) + zone := types.HostZone{} + k.cdc.MustUnmarshal(iterator.Value(), &zone) + + error := fn(ctx, i, zone) + + if error != nil { + break + } + i++ + } +} + +// This will split a total delegation amount across validators, according to weights +// It returns a map of each portion, key'd on validator address +// Validator's with a slash query in progress are excluded +func (k Keeper) GetTargetValAmtsForHostZone(ctx sdk.Context, hostZone types.HostZone, totalDelegation sdkmath.Int) (map[string]sdkmath.Int, error) { + // Confirm the expected delegation amount is greater than 0 + if !totalDelegation.IsPositive() { + return nil, errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, + "Cannot calculate target delegation if final amount is less than or equal to zero (%v)", totalDelegation) + } + + // Ignore any validators with a slash query in progress + validators := []types.Validator{} + for _, validator := range hostZone.Validators { + if !validator.SlashQueryInProgress { + validators = append(validators, *validator) + } + } + + // Sum the total weight across all validators + totalWeight := k.GetTotalValidatorWeight(validators) + if totalWeight == 0 { + return nil, errorsmod.Wrapf(types.ErrNoValidatorWeights, + "No non-zero validators found for host zone %s", hostZone.ChainId) + } + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, "Total Validator Weight: %d", totalWeight)) + + // sort validators by weight ascending + sort.SliceStable(validators, func(i, j int) bool { // Do not use `Slice` here, it is stochastic + if validators[i].Weight != validators[j].Weight { + return validators[i].Weight < validators[j].Weight + } + // use name for tie breaker if weights are equal + return validators[i].Address < validators[j].Address + }) + + // Assign each validator their portion of the delegation (and give any overflow to the last validator) + targetUnbondingsByValidator := make(map[string]sdkmath.Int) + totalAllocated := sdkmath.ZeroInt() + for i, validator := range validators { + // For the last element, we need to make sure that the totalAllocated is equal to the finalDelegation + if i == len(validators)-1 { + targetUnbondingsByValidator[validator.Address] = totalDelegation.Sub(totalAllocated) + } else { + delegateAmt := sdkmath.NewIntFromUint64(validator.Weight).Mul(totalDelegation).Quo(sdkmath.NewIntFromUint64(totalWeight)) + totalAllocated = totalAllocated.Add(delegateAmt) + targetUnbondingsByValidator[validator.Address] = delegateAmt + } + } + + return targetUnbondingsByValidator, nil +} + +// Enables redemptions by setting the parameter on the host zone to true +// This is used during the staketia/stakedym migrations +func (k Keeper) EnableRedemptions(ctx sdk.Context, chainId string) error { + hostZone, found := k.GetHostZone(ctx, chainId) + if !found { + return types.ErrHostZoneNotFound.Wrap(chainId) + } + + hostZone.RedemptionsEnabled = true + k.SetHostZone(ctx, hostZone) + return nil +} diff --git a/x/stakeibc/keeper/host_zone_test.go b/x/stakeibc/keeper/host_zone_test.go new file mode 100644 index 00000000000..bf2099d44dd --- /dev/null +++ b/x/stakeibc/keeper/host_zone_test.go @@ -0,0 +1,623 @@ +package keeper_test + +import ( + "fmt" + "strconv" + + sdkmath "cosmossdk.io/math" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/keeper" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func (s *KeeperTestSuite) createNHostZone(n int) []types.HostZone { + items := make([]types.HostZone, n) + for i := range items { + items[i].ChainId = strconv.Itoa(i) + items[i].RedemptionRate = sdkmath.LegacyNewDec(1) + items[i].LastRedemptionRate = sdkmath.LegacyNewDec(1) + items[i].MinRedemptionRate = sdkmath.LegacyNewDecWithPrec(5, 1) + items[i].MaxRedemptionRate = sdkmath.LegacyNewDecWithPrec(15, 1) + items[i].MinInnerRedemptionRate = sdkmath.LegacyNewDecWithPrec(5, 1) + items[i].MaxInnerRedemptionRate = sdkmath.LegacyNewDecWithPrec(15, 1) + items[i].TotalDelegations = sdkmath.ZeroInt() + items[i].Validators = []*types.Validator{} + s.App.StakeibcKeeper.SetHostZone(s.Ctx, items[i]) + } + return items +} + +func (s *KeeperTestSuite) TestHostZoneGet() { + items := s.createNHostZone(10) + for _, item := range items { + got, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, item.ChainId) + s.Require().True(found) + s.Require().Equal( + &item, + &got, + ) + } +} + +func (s *KeeperTestSuite) TestGetHostZoneFromHostDenom() { + // Create host zones with different denoms + hostZones := s.createNHostZone(5) + denoms := []string{} + for i, hostZone := range hostZones { + denom := fmt.Sprintf("denom-%d", i) + denoms = append(denoms, denom) + hostZone.HostDenom = denom + + hostZones[i] = hostZone + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + } + + // Search each host zone by the denom + for i, denom := range denoms { + hostZone, err := s.App.StakeibcKeeper.GetHostZoneFromHostDenom(s.Ctx, denom) + s.Require().NoError(err) + s.Require().Equal(hostZones[i], *hostZone, "host zone") + } + + // Confirm non-existent denom errors + _, err := s.App.StakeibcKeeper.GetHostZoneFromHostDenom(s.Ctx, "non-existent") + s.Require().ErrorContains(err, "No HostZone for non-existent denom found") +} + +func (s *KeeperTestSuite) TestGetHostZoneFromIBCDenom() { + // Create host zones with different denoms + hostZones := s.createNHostZone(5) + denoms := []string{} + for i, hostZone := range hostZones { + denom := fmt.Sprintf("denom-%d", i) + denoms = append(denoms, denom) + hostZone.IbcDenom = denom + + hostZones[i] = hostZone + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + } + + // Search each host zone by the denom + for i, denom := range denoms { + hostZone, err := s.App.StakeibcKeeper.GetHostZoneFromIBCDenom(s.Ctx, denom) + s.Require().NoError(err) + s.Require().Equal(hostZones[i], *hostZone, "host zone") + } + + // Confirm non-existent denom errors + _, err := s.App.StakeibcKeeper.GetHostZoneFromIBCDenom(s.Ctx, "non-existent") + s.Require().ErrorContains(err, "No HostZone for non-existent found") +} + +func (s *KeeperTestSuite) TestHostZoneRemove() { + items := s.createNHostZone(10) + for _, item := range items { + s.App.StakeibcKeeper.RemoveHostZone(s.Ctx, item.ChainId) + _, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, item.ChainId) + s.Require().False(found) + } +} + +func (s *KeeperTestSuite) TestHostZoneGetAll() { + items := s.createNHostZone(10) + s.Require().ElementsMatch( + items, + s.App.StakeibcKeeper.GetAllHostZone(s.Ctx), + ) +} + +func (s *KeeperTestSuite) TestHostZoneGetAllActiveCase1() { + // Case 1: some active some inactive + numZones := 3 + items := s.createNHostZone(numZones) + // set the last host zone as halted + items[numZones-1].Halted = true + s.App.StakeibcKeeper.SetHostZone(s.Ctx, items[numZones-1]) + + // only the last host zone is active, so we expect all except that one + actualActiveHzs := items[:numZones-1] + getActiveHzResults := s.App.StakeibcKeeper.GetAllActiveHostZone(s.Ctx) + s.Require().ElementsMatch( + actualActiveHzs, + getActiveHzResults, + ) +} + +func (s *KeeperTestSuite) TestHostZoneGetAllActiveCase2() { + // Case 2: all active + numZones := 3 + items := s.createNHostZone(numZones) + s.Require().ElementsMatch( + items, + s.App.StakeibcKeeper.GetAllActiveHostZone(s.Ctx), + ) +} + +func (s *KeeperTestSuite) TestHostZoneGetAllActiveCase3() { + // Case 3: all inactive + numZones := 3 + items := s.createNHostZone(numZones) + // set the last host zone as halted + items[0].Halted = true + items[1].Halted = true + items[2].Halted = true + s.App.StakeibcKeeper.SetHostZone(s.Ctx, items[0]) + s.App.StakeibcKeeper.SetHostZone(s.Ctx, items[1]) + s.App.StakeibcKeeper.SetHostZone(s.Ctx, items[2]) + s.Require().ElementsMatch( + types.HostZone{}, + s.App.StakeibcKeeper.GetAllActiveHostZone(s.Ctx), + ) +} + +func (s *KeeperTestSuite) TestHostZoneGetAllActiveCase4() { + // create no zones, check the output is an empty list + s.Require().ElementsMatch( + types.HostZone{}, + s.App.StakeibcKeeper.GetAllActiveHostZone(s.Ctx), + ) +} + +func (s *KeeperTestSuite) TestGetValidatorFromAddress() { + numValidators := 3 + + // Create list of validators + addresses := []string{} + validators := []*types.Validator{} + for i := 1; i <= numValidators; i++ { + address := fmt.Sprintf("val-%d", i) + + addresses = append(addresses, address) + validators = append(validators, &types.Validator{Address: address}) + } + + // For each validator that was just added, test GetValidatorFromAddress + for expectedIndex, address := range addresses { + expectedValidator := *validators[expectedIndex] + actualValidator, actualIndex, found := keeper.GetValidatorFromAddress(validators, address) + + s.Require().True(found) + s.Require().Equal(expectedValidator, actualValidator) + s.Require().Equal(int64(expectedIndex), actualIndex) + } + + // Test GetValidatorFromAddress for an validator that doesn't exist + _, _, found := keeper.GetValidatorFromAddress(validators, "fake_validator") + s.Require().False(found) +} + +func (s *KeeperTestSuite) TestGetHostZoneFromTransferChannelID() { + // Store 5 host zones + expectedHostZones := map[string]types.HostZone{} + for i := 0; i < 5; i++ { + chainId := fmt.Sprintf("chain-%d", i) + channelId := fmt.Sprintf("channel-%d", i) + + hostZone := types.HostZone{ + ChainId: chainId, + TransferChannelId: channelId, + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + expectedHostZones[channelId] = hostZone + } + + // Look up each host zone by the channel ID + for i := 0; i < 5; i++ { + channelId := fmt.Sprintf("channel-%d", i) + + expectedHostZone := expectedHostZones[channelId] + actualHostZone, found := s.App.StakeibcKeeper.GetHostZoneFromTransferChannelID(s.Ctx, channelId) + + s.Require().True(found, "found host zone %d", i) + s.Require().Equal(expectedHostZone.ChainId, actualHostZone.ChainId, "host zone %d chain-id", i) + } + + // Lookup a non-existent host zone - should not be found + _, found := s.App.StakeibcKeeper.GetHostZoneFromTransferChannelID(s.Ctx, "fake_channel") + s.Require().False(found, "fake channel should not be found") +} + +// Helper function to check the validator's slash query progress and checkpoint after it was incremented +func (s *KeeperTestSuite) checkValidatorSlashQueryProgress(address string, expectedProgress, expectedCheckpoint sdkmath.Int) { + actualHostZone, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, HostChainId) + s.Require().True(found, "host zone should have been found") + s.Require().Len(actualHostZone.Validators, 3, "host zone should still have 3 validators") + + actualValidator := types.Validator{} + for _, validator := range actualHostZone.Validators { + if validator.Address == address { + actualValidator = *validator + } + } + s.Require().NotEmpty(actualValidator.Address, "validator address not found") + s.Require().Equal(expectedProgress.Int64(), actualValidator.SlashQueryProgressTracker.Int64(), "slash query progress") + s.Require().Equal(expectedCheckpoint.Int64(), actualValidator.SlashQueryCheckpoint.Int64(), "slash query checkpoint") +} + +func (s *KeeperTestSuite) TestIncrementValidatorSlashQueryProgress() { + // Slash query progress for validator B is as follows: + // Initial Checkpoint: 1000 (from previous TVL) + // Current TVL: 10k, Threshold: 11% => New Checkpoint of 1100 + // Old Progress: 7800 => Old Interval: 7800 / 1000 = Interval #7 + // New Stake #1: 180 => New Interval: 8001 / 1000 = Interval #8 + incrementedValidator := "valB" + threshold := uint64(11) + totalStakeAmount := sdkmath.NewInt(10_000) + + initialCheckpoint := sdkmath.NewInt(1000) + expectedCheckpoint := sdkmath.NewInt(1100) + + initialProgress := sdkmath.NewInt(7800) + firstStakeAmount := sdkmath.NewInt(180) + progressAfterFirstStake := sdkmath.NewInt(7980) + secondStakeAmount := sdkmath.NewInt(100) + progressAfterSecondStake := sdkmath.NewInt(8080) + + // Store a host zone with 3 validators and 1 in progress + initialHostZone := types.HostZone{ + ChainId: HostChainId, + Validators: []*types.Validator{ + {Address: "valA"}, + {Address: incrementedValidator, SlashQueryProgressTracker: initialProgress, SlashQueryCheckpoint: initialCheckpoint}, + {Address: "valC"}, + }, + TotalDelegations: totalStakeAmount, + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, initialHostZone) + + // Set params with 10% threshold + params := types.DefaultParams() + params.ValidatorSlashQueryThreshold = threshold + s.App.StakeibcKeeper.SetParams(s.Ctx, params) + + // Increment the progress for valB by an amount that falls short of the checkpoint + err := s.App.StakeibcKeeper.IncrementValidatorSlashQueryProgress( + s.Ctx, + HostChainId, + incrementedValidator, + firstStakeAmount, + ) + s.Require().NoError(err, "no error expected when incrementing slash query progress") + + // Check progress was updated and checkpoint was not + s.checkValidatorSlashQueryProgress(incrementedValidator, progressAfterFirstStake, initialCheckpoint) + + // Increment the progress again - this time it should increment the checkpoint + err = s.App.StakeibcKeeper.IncrementValidatorSlashQueryProgress( + s.Ctx, + HostChainId, + incrementedValidator, + secondStakeAmount, + ) + s.Require().NoError(err, "no error expected when incrementing slash query progress") + + // Check progress and checkpoint were updated + s.checkValidatorSlashQueryProgress(incrementedValidator, progressAfterSecondStake, expectedCheckpoint) + + // Try to increment from a non-existed host chain - it should fail + err = s.App.StakeibcKeeper.IncrementValidatorSlashQueryProgress(s.Ctx, "fake_host", incrementedValidator, firstStakeAmount) + s.Require().ErrorContains(err, "host zone not found") + + // Try to increment from a non-existed validator - it should fail + err = s.App.StakeibcKeeper.IncrementValidatorSlashQueryProgress(s.Ctx, HostChainId, "fake_val", firstStakeAmount) + s.Require().ErrorContains(err, "validator not found") +} + +// Tests Increment/DecrementValidatorDelegationsChangesInProgress +func (s *KeeperTestSuite) TestUpdateValidatorDelegationChangesInProgress() { + hostZone := &types.HostZone{ + Validators: []*types.Validator{ + {Address: "other_val1", DelegationChangesInProgress: 1}, + {Address: ValAddress, DelegationChangesInProgress: 2}, + {Address: "other_val3", DelegationChangesInProgress: 3}, + }, + TotalDelegations: sdkmath.NewInt(6000), + } + updatedIndex := 1 + start := int(2) + + // Increment once - should end at 3 + err := s.App.StakeibcKeeper.IncrementValidatorDelegationChangesInProgress(hostZone, ValAddress) + s.Require().NoError(err, "no error expected when incremented ") + s.Require().Equal(start+1, int(hostZone.Validators[updatedIndex].DelegationChangesInProgress), + "delegation change after increment") + + // Increment 10 more times - should end at 13 + for i := 0; i < 10; i++ { + err := s.App.StakeibcKeeper.IncrementValidatorDelegationChangesInProgress(hostZone, ValAddress) + s.Require().NoError(err, "no error expected when incrementing loop %d", i) + } + s.Require().Equal(start+11, int(hostZone.Validators[updatedIndex].DelegationChangesInProgress), + "delegation change after increment loop") + + // Confirm the other validators did not change + s.Require().Equal(1, int(hostZone.Validators[0].DelegationChangesInProgress), + "delegation change val1 after increment") + s.Require().Equal(3, int(hostZone.Validators[2].DelegationChangesInProgress), + "delegation change val3 after increment") + + // Decrement - should end at 12 + err = s.App.StakeibcKeeper.DecrementValidatorDelegationChangesInProgress(hostZone, ValAddress) + s.Require().NoError(err, "no error expected when decrementing") + s.Require().Equal(start+10, int(hostZone.Validators[updatedIndex].DelegationChangesInProgress), + "delegation change after decrement") + + // Decrement 12 more times - it should end at 0 + for i := 0; i < 12; i++ { + err := s.App.StakeibcKeeper.DecrementValidatorDelegationChangesInProgress(hostZone, ValAddress) + s.Require().NoError(err, "no error expected when decrementing loop %d", i) + } + s.Require().Equal(0, int(hostZone.Validators[updatedIndex].DelegationChangesInProgress), + "delegation change after decrement loop") + + // Attempt to decrement again, it should fail + err = s.App.StakeibcKeeper.DecrementValidatorDelegationChangesInProgress(hostZone, ValAddress) + s.Require().ErrorContains(err, "cannot decrement the number of delegation updates") + + // Attempt to increment a non-existent validator - it should fail + err = s.App.StakeibcKeeper.IncrementValidatorDelegationChangesInProgress(hostZone, "fake_val") + s.Require().ErrorContains(err, "validator not found") + + // Attempt to decrement a non-existent validator - it should fail + err = s.App.StakeibcKeeper.DecrementValidatorDelegationChangesInProgress(hostZone, "fake_val") + s.Require().ErrorContains(err, "validator not found") +} + +func (s *KeeperTestSuite) TestAddDelegationToValidator() { + hostZone := &types.HostZone{ + Validators: []*types.Validator{ + {Address: "other_val1", Delegation: sdkmath.NewInt(1000)}, + {Address: ValAddress, Delegation: sdkmath.NewInt(2000)}, + {Address: "other_val2", Delegation: sdkmath.NewInt(3000)}, + }, + TotalDelegations: sdkmath.NewInt(6000), + } + updatedIndex := 1 + + // Add 500 to the validator + err := s.App.StakeibcKeeper.AddDelegationToValidator(s.Ctx, hostZone, ValAddress, sdkmath.NewInt(500), "") + s.Require().NoError(err, "no error expected when adding delegation to validator") + s.Require().Equal(int64(2500), hostZone.Validators[updatedIndex].Delegation.Int64(), "delegation after addition") + s.Require().Equal(int64(6500), hostZone.TotalDelegations.Int64(), "total delegations after addition") + + // Subtract 250 from the validator + err = s.App.StakeibcKeeper.AddDelegationToValidator(s.Ctx, hostZone, ValAddress, sdkmath.NewInt(-250), "") + s.Require().NoError(err, "no error expected when subtracting delegation from validator") + s.Require().Equal(int64(2250), hostZone.Validators[updatedIndex].Delegation.Int64(), "delegation after subtraction") + s.Require().Equal(int64(6250), hostZone.TotalDelegations.Int64(), "total delegations after subtraction") + + // Confirm other validators were not modified + s.Require().Equal(int64(1000), hostZone.Validators[0].Delegation.Int64(), "validator at index 0 should not have changed") + s.Require().Equal(int64(3000), hostZone.Validators[2].Delegation.Int64(), "validator at index 2 should not have changed") + + // Attempt to subtract more than the validator has - it should fail + err = s.App.StakeibcKeeper.AddDelegationToValidator(s.Ctx, hostZone, ValAddress, sdkmath.NewInt(-3000), "") + s.Require().ErrorContains(err, "Delegation change (3000) is greater than validator") + + // Attempt to modify a validator that doesn't exist - it should fail + err = s.App.StakeibcKeeper.AddDelegationToValidator(s.Ctx, hostZone, "does_not_exist", sdkmath.NewInt(1000), "") + s.Require().ErrorContains(err, "validator not found") + + // Attempt to subtract more than the total delegations on the host - it should fail + // Here, w set the validator's delegation to be much higher than the TotalDelegation + // (which should not be possible in practice) + hostZone.Validators[updatedIndex].Delegation = sdkmath.NewInt(10000) + err = s.App.StakeibcKeeper.AddDelegationToValidator(s.Ctx, hostZone, ValAddress, sdkmath.NewInt(-7000), "") + s.Require().ErrorContains(err, "Delegation change (7000) is greater than total delegation amount on host") +} + +func (s *KeeperTestSuite) TestCheckValidatorWeightsBelowCap() { + testCases := []struct { + name string + weightCap uint64 + validators []*types.Validator + exceedsCap bool + }{ + { + name: "not enough validators", + weightCap: 10, + validators: []*types.Validator{ + {Address: "val1", Weight: 1}, + {Address: "val2", Weight: 1}, + {Address: "val3", Weight: 1}, + {Address: "val4", Weight: 1}, + {Address: "val5", Weight: 1}, + {Address: "val6", Weight: 1}, + {Address: "val7", Weight: 1}, + {Address: "val8", Weight: 1}, + {Address: "val9", Weight: 1}, + }, + exceedsCap: false, + }, + { + name: "zero total weight", + weightCap: 10, + validators: []*types.Validator{ + {Address: "val1", Weight: 0}, + {Address: "val2", Weight: 0}, + {Address: "val3", Weight: 0}, + {Address: "val4", Weight: 0}, + {Address: "val5", Weight: 0}, + {Address: "val6", Weight: 0}, + {Address: "val7", Weight: 0}, + {Address: "val8", Weight: 0}, + {Address: "val9", Weight: 0}, + {Address: "val10", Weight: 0}, + }, + exceedsCap: false, + }, + { + name: "10pct splits below threshold", + weightCap: 11, + validators: []*types.Validator{ + {Address: "val1", Weight: 1}, + {Address: "val2", Weight: 1}, + {Address: "val3", Weight: 1}, + {Address: "val4", Weight: 1}, + {Address: "val5", Weight: 1}, + {Address: "val6", Weight: 1}, + {Address: "val7", Weight: 1}, + {Address: "val8", Weight: 1}, + {Address: "val9", Weight: 1}, + {Address: "val10", Weight: 1}, + }, + exceedsCap: false, + }, + { + name: "10pct splits at threshold", + weightCap: 10, + validators: []*types.Validator{ + {Address: "val1", Weight: 1}, + {Address: "val2", Weight: 1}, + {Address: "val3", Weight: 1}, + {Address: "val4", Weight: 1}, + {Address: "val5", Weight: 1}, + {Address: "val6", Weight: 1}, + {Address: "val7", Weight: 1}, + {Address: "val8", Weight: 1}, + {Address: "val9", Weight: 1}, + {Address: "val10", Weight: 1}, + }, + exceedsCap: false, + }, + { + name: "10pct splits exceeds threshold", + weightCap: 9, + validators: []*types.Validator{ + {Address: "val1", Weight: 1}, + {Address: "val2", Weight: 1}, + {Address: "val3", Weight: 1}, + {Address: "val4", Weight: 1}, + {Address: "val5", Weight: 1}, + {Address: "val6", Weight: 1}, + {Address: "val7", Weight: 1}, + {Address: "val8", Weight: 1}, + {Address: "val9", Weight: 1}, + {Address: "val10", Weight: 1}, + }, + exceedsCap: true, + }, + { + name: "One val exceeds cap", + weightCap: 10, + validators: []*types.Validator{ + {Address: "val1", Weight: 1}, + {Address: "val2", Weight: 1}, + {Address: "val3", Weight: 1}, + {Address: "val4", Weight: 1}, + {Address: "val5", Weight: 1}, + {Address: "val6", Weight: 1}, + {Address: "val7", Weight: 1}, + {Address: "val8", Weight: 2}, + {Address: "val9", Weight: 1}, + {Address: "val10", Weight: 1}, + }, + exceedsCap: true, + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + params := s.App.StakeibcKeeper.GetParams(s.Ctx) + params.ValidatorWeightCap = tc.weightCap + s.App.StakeibcKeeper.SetParams(s.Ctx, params) + + hostZone := types.HostZone{ + ChainId: HostChainId, + Validators: tc.validators, + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + err := s.App.StakeibcKeeper.CheckValidatorWeightsBelowCap(s.Ctx, HostChainId) + if !tc.exceedsCap { + s.Require().NoError(err, "set should not have exceeded cap") + } else { + s.Require().Error(err, "set should have exceeded cap") + } + }) + } +} + +// TODO [cleanup]: Remove after v17 upgrade +func (s *KeeperTestSuite) TestDisableHubTokenization() { + chainId := "cosmoshub-4" + + // Create the host zone and delegation channel + owner := types.FormatHostZoneICAOwner(chainId, types.ICAAccountType_DELEGATION) + channelId, portId := s.CreateICAChannel(owner) + + s.App.StakeibcKeeper.SetHostZone(s.Ctx, types.HostZone{ + ChainId: chainId, + ConnectionId: ibctesting.FirstConnectionID, + }) + + // Call the disable function and confirm the sequence number incremented (indicating an ICA was submitted) + s.CheckICATxSubmitted(portId, channelId, func() error { + s.App.StakeibcKeeper.DisableHubTokenization(s.Ctx) + return nil + }) +} + +func (s *KeeperTestSuite) TestGetTargetValAmtsForHostZone() { + validators := []*types.Validator{ + {Address: "val1", Weight: 20}, + {Address: "val2", Weight: 40}, + {Address: "val3", Weight: 30}, + {Address: "val6", Weight: 5}, + {Address: "val5", Weight: 0}, + {Address: "val4", Weight: 5}, + } + + // Get targets with an even 100 total delegated - no overflow to last validator + totalDelegation := sdkmath.NewInt(100) + hostZone := types.HostZone{ChainId: HostChainId, Validators: validators} + actualTargets, err := s.App.StakeibcKeeper.GetTargetValAmtsForHostZone(s.Ctx, hostZone, totalDelegation) + s.Require().NoError(err, "no error expected when getting target weights for total delegation of 100") + + // Confirm target - should equal the validator's weight + for _, validator := range validators { + s.Require().Equal(int64(validator.Weight), actualTargets[validator.Address].Int64(), + "validator %s target for total delegation of 100", validator.Address) + } + + // Get targets with an uneven amount delegated - 77 - over flow to last validator + totalDelegation = sdkmath.NewInt(77) + expectedTargets := map[string]int64{ + "val5": 0, // 0% of 77 = 0 + "val4": 3, // 5% of 77 = 3.85 -> 3 + "val6": 3, // 5% of 77 = 3.85 -> 3 + "val1": 15, // 20% of 77 = 15.4 -> 15 + "val3": 23, // 30% of 77 = 23.1 -> 23 + "val2": 33, // Gets all overflow: 77 - 3 - 3 - 15 - 23 = 33 + } + actualTargets, err = s.App.StakeibcKeeper.GetTargetValAmtsForHostZone(s.Ctx, hostZone, totalDelegation) + s.Require().NoError(err, "no error expected when getting target weights for total delegation of 77") + + // Confirm target amounts again + for validatorAddress, expectedTarget := range expectedTargets { + s.Require().Equal(expectedTarget, actualTargets[validatorAddress].Int64(), + "validator %s target for total delegation of 77", validatorAddress) + } + + // Check zero delegations throws an error + _, err = s.App.StakeibcKeeper.GetTargetValAmtsForHostZone(s.Ctx, hostZone, sdkmath.ZeroInt()) + s.Require().ErrorContains(err, "Cannot calculate target delegation if final amount is less than or equal to zero") + + // Check zero weights throws an error + _, err = s.App.StakeibcKeeper.GetTargetValAmtsForHostZone(s.Ctx, types.HostZone{}, sdkmath.NewInt(1)) + s.Require().ErrorContains(err, "No non-zero validators found for host zone") +} + +func (s *KeeperTestSuite) TestEnableRedemptions() { + s.App.StakeibcKeeper.SetHostZone(s.Ctx, types.HostZone{ + ChainId: HostChainId, + RedemptionsEnabled: false, + }) + + err := s.App.StakeibcKeeper.EnableRedemptions(s.Ctx, HostChainId) + s.Require().NoError(err) + + hostZone := s.MustGetHostZone(HostChainId) + s.Require().True(hostZone.RedemptionsEnabled, "redemptions should have been enabled") +} diff --git a/x/stakeibc/keeper/ibc.go b/x/stakeibc/keeper/ibc.go new file mode 100644 index 00000000000..9ff27e35ae5 --- /dev/null +++ b/x/stakeibc/keeper/ibc.go @@ -0,0 +1,251 @@ +package keeper + +import ( + "fmt" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + connectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" + ibctmtypes "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" + "github.com/spf13/cast" + + ratelimittypes "github.com/cosmos/ibc-apps/modules/rate-limiting/v8/types" + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func (k Keeper) OnChanOpenAck(ctx sdk.Context, portID, channelID string) error { + // Lookup connection ID, counterparty chain ID, and ICA address from the channel ID + controllerConnectionId, _, err := k.IBCKeeper.ChannelKeeper.GetChannelConnection(ctx, portID, channelID) + if err != nil { + return err + } + address, found := k.ICAControllerKeeper.GetInterchainAccountAddress(ctx, controllerConnectionId, portID) + if !found { + k.Logger(ctx).Info(fmt.Sprintf("No ICA address associated with connection %s and port %s", controllerConnectionId, portID)) + return nil + } + chainId, err := k.GetChainIdFromConnectionId(ctx, controllerConnectionId) + if err != nil { + return err + } + k.Logger(ctx).Info(fmt.Sprintf("Found matching address for chain: %s, address %s, port %s", chainId, address, portID)) + + // Check if the chainId matches one of the host zones, and if so, + // store the relevant ICA address on the host zone struct + if err := k.StoreHostZoneIcaAddress(ctx, chainId, portID, address); err != nil { + return err + } + + // Check if the chainId matches any ICAs from trade routes, and if so, + // store the relevant ICA addresses in the trade route structs + if err := k.StoreTradeRouteIcaAddress(ctx, chainId, portID, address); err != nil { + return err + } + + return nil +} + +// Checks if the chainId matches a given host zone, and the address matches a relevant ICA account +// If so, stores the ICA address on the host zone struct +// Also whitelists ICA addresses from rate limiting +func (k Keeper) StoreHostZoneIcaAddress(ctx sdk.Context, chainId, portId, address string) error { + // Check if the chainId matches a host zone + // If the chainId does not match (for instance, a reward zone in a trade route is not a host zone) + // then we can ignore the ICA address checks + hostZone, found := k.GetHostZone(ctx, chainId) + if !found { + k.Logger(ctx).Info(fmt.Sprintf("chainId %s has no associated host zone", chainId)) + return nil + } + + // expected port IDs for each ICA account type + delegationOwner := types.FormatHostZoneICAOwner(chainId, types.ICAAccountType_DELEGATION) + delegationPortID, err := icatypes.NewControllerPortID(delegationOwner) + if err != nil { + return err + } + withdrawalOwner := types.FormatHostZoneICAOwner(chainId, types.ICAAccountType_WITHDRAWAL) + withdrawalPortID, err := icatypes.NewControllerPortID(withdrawalOwner) + if err != nil { + return err + } + feeOwner := types.FormatHostZoneICAOwner(chainId, types.ICAAccountType_FEE) + feePortID, err := icatypes.NewControllerPortID(feeOwner) + if err != nil { + return err + } + redemptionOwner := types.FormatHostZoneICAOwner(chainId, types.ICAAccountType_REDEMPTION) + redemptionPortID, err := icatypes.NewControllerPortID(redemptionOwner) + if err != nil { + return err + } + communityPoolDepositOwner := types.FormatHostZoneICAOwner(chainId, types.ICAAccountType_COMMUNITY_POOL_DEPOSIT) + communityPoolDepositPortID, err := icatypes.NewControllerPortID(communityPoolDepositOwner) + if err != nil { + return err + } + communityPoolReturnOwner := types.FormatHostZoneICAOwner(chainId, types.ICAAccountType_COMMUNITY_POOL_RETURN) + communityPoolReturnPortID, err := icatypes.NewControllerPortID(communityPoolReturnOwner) + if err != nil { + return err + } + + // Set ICA account addresses + switch { + case portId == withdrawalPortID: + hostZone.WithdrawalIcaAddress = address + case portId == feePortID: + hostZone.FeeIcaAddress = address + case portId == delegationPortID: + hostZone.DelegationIcaAddress = address + case portId == redemptionPortID: + hostZone.RedemptionIcaAddress = address + case portId == communityPoolDepositPortID: + hostZone.CommunityPoolDepositIcaAddress = address + case portId == communityPoolReturnPortID: + hostZone.CommunityPoolReturnIcaAddress = address + default: + k.Logger(ctx).Info(fmt.Sprintf("portId %s has an associated host zone, but does not match any ICA accounts", portId)) + return nil + } + + k.SetHostZone(ctx, hostZone) + + // Once the delegation channel is registered, whitelist epochly transfers so they're not rate limited + // Epochly transfers go from the deposit address to the delegation address + if portId == delegationPortID { + k.RatelimitKeeper.SetWhitelistedAddressPair(ctx, ratelimittypes.WhitelistedAddressPair{ + Sender: hostZone.DepositAddress, + Receiver: hostZone.DelegationIcaAddress, + }) + } + + // Once the fee channel is registered, whitelist reward transfers so they're not rate limited + // Reward transfers go from the fee address to the reward collector + if portId == feePortID { + rewardCollectorAddress := k.AccountKeeper.GetModuleAccount(ctx, types.RewardCollectorName).GetAddress() + k.RatelimitKeeper.SetWhitelistedAddressPair(ctx, ratelimittypes.WhitelistedAddressPair{ + Sender: hostZone.FeeIcaAddress, + Receiver: rewardCollectorAddress.String(), + }) + } + + // Once the community pool deposit ICA is registered, whitelist epochly community pool transfers + // from the deposit ICA to the community pool holding accounts + if portId == communityPoolDepositPortID { + k.RatelimitKeeper.SetWhitelistedAddressPair(ctx, ratelimittypes.WhitelistedAddressPair{ + Sender: hostZone.CommunityPoolDepositIcaAddress, + Receiver: hostZone.CommunityPoolStakeHoldingAddress, + }) + k.RatelimitKeeper.SetWhitelistedAddressPair(ctx, ratelimittypes.WhitelistedAddressPair{ + Sender: hostZone.CommunityPoolDepositIcaAddress, + Receiver: hostZone.CommunityPoolRedeemHoldingAddress, + }) + } + + // Once the community pool return ICA is registered, whitelist epochly community pool transfers + // from the community pool stake holding account to the community pool return ICA + if portId == communityPoolReturnPortID { + k.RatelimitKeeper.SetWhitelistedAddressPair(ctx, ratelimittypes.WhitelistedAddressPair{ + Sender: hostZone.CommunityPoolStakeHoldingAddress, + Receiver: hostZone.CommunityPoolReturnIcaAddress, + }) + } + + return nil +} + +// Checks if the port matches an ICA account on the trade route, and if so, stores the +// relevant ICA address on the trade route +func (k Keeper) StoreTradeRouteIcaAddress(ctx sdk.Context, callbackChainId, callbackPortId, address string) error { + // Check if the port Id matches either the trade or unwind ICA on the tradeRoute + // If the chainId and port Id from the callback match the account + // on a trade route, set the ICA address in the relevant places, + // including the from/to addresses on each hop + for _, route := range k.GetAllTradeRoutes(ctx) { + // Build the expected port ID for the reward and trade accounts, + // using the chainId and route ID + rewardAccount := route.RewardAccount + rewardOwner := types.FormatTradeRouteICAOwnerFromRouteId(rewardAccount.ChainId, route.GetRouteId(), rewardAccount.Type) + rewardPortId, err := icatypes.NewControllerPortID(rewardOwner) + if err != nil { + return err + } + + tradeAccount := route.TradeAccount + tradeOwner := types.FormatTradeRouteICAOwnerFromRouteId(tradeAccount.ChainId, route.GetRouteId(), tradeAccount.Type) + tradePortId, err := icatypes.NewControllerPortID(tradeOwner) + if err != nil { + return err + } + + // Check if route IDs match the callback chainId/portId + if route.RewardAccount.ChainId == callbackChainId && callbackPortId == rewardPortId { + k.Logger(ctx).Info(fmt.Sprintf("ICA Address %s found for Unwind ICA on %s", address, route.Description())) + route.RewardAccount.Address = address + + } else if route.TradeAccount.ChainId == callbackChainId && callbackPortId == tradePortId { + k.Logger(ctx).Info(fmt.Sprintf("ICA Address %s found for Trade ICA on %s", address, route.Description())) + route.TradeAccount.Address = address + } + + k.SetTradeRoute(ctx, route) + } + + return nil +} + +// Given a connection ID, returns the light client time +func (k Keeper) GetLightClientTime(ctx sdk.Context, connectionID string) (clientTime uint64, err error) { + connection, found := k.IBCKeeper.ConnectionKeeper.GetConnection(ctx, connectionID) + if !found { + return 0, errorsmod.Wrapf(connectiontypes.ErrConnectionNotFound, "connection-id: %s", connectionID) + } + + latestConsensusClientState, found := k.IBCKeeper.ClientKeeper.GetLatestClientConsensusState(ctx, connection.ClientId) + if !found { + return 0, errorsmod.Wrapf(clienttypes.ErrConsensusStateNotFound, "client-id: %s", connection.ClientId) + } + + return latestConsensusClientState.GetTimestamp(), nil +} + +// Given a connection ID, returns the light client height +func (k Keeper) GetLightClientHeight(ctx sdk.Context, connectionID string) (height uint64, err error) { + connection, found := k.IBCKeeper.ConnectionKeeper.GetConnection(ctx, connectionID) + if !found { + return 0, errorsmod.Wrapf(connectiontypes.ErrConnectionNotFound, "connection-id: %s", connectionID) + } + + clientState, found := k.IBCKeeper.ClientKeeper.GetClientState(ctx, connection.ClientId) + if !found { + return 0, errorsmod.Wrapf(clienttypes.ErrConsensusStateNotFound, "client-id: %s", connection.ClientId) + } + + latestHeight, err := cast.ToUint64E(clientState.GetLatestHeight().GetRevisionHeight()) + if err != nil { + return 0, err + } + return latestHeight, nil +} + +// Lookup a chain ID from a connection ID by looking up the client state +func (k Keeper) GetChainIdFromConnectionId(ctx sdk.Context, connectionID string) (string, error) { + connection, found := k.IBCKeeper.ConnectionKeeper.GetConnection(ctx, connectionID) + if !found { + return "", errorsmod.Wrapf(connectiontypes.ErrConnectionNotFound, "connection %s not found", connectionID) + } + clientState, found := k.IBCKeeper.ClientKeeper.GetClientState(ctx, connection.ClientId) + if !found { + return "", errorsmod.Wrapf(clienttypes.ErrClientNotFound, "client %s not found", connection.ClientId) + } + client, ok := clientState.(*ibctmtypes.ClientState) + if !ok { + return "", types.ErrClientStateNotTendermint + } + + return client.ChainId, nil +} diff --git a/x/stakeibc/keeper/ibc_test.go b/x/stakeibc/keeper/ibc_test.go new file mode 100644 index 00000000000..8b0318c4647 --- /dev/null +++ b/x/stakeibc/keeper/ibc_test.go @@ -0,0 +1,372 @@ +package keeper_test + +import ( + icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types" + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// ------------------------------------------ +// OnChanOpenAck +// ------------------------------------------ + +func (s *KeeperTestSuite) TestOnChanOpenAck() { + // Define the mocked out ids for both the delegation and trade accounts + delegationChainId := "delegation-1" + delegationAddress := "delegation-address" + delegationConnectionId := "connection-0" + delegationChannelId := "channel-0" + delegationClientId := "07-tendermint-0" + + tradeChainId := "trade-1" + tradeAddress := "trade-address" + tradeConnectionId := "connection-1" + tradeChannelId := "channel-1" + tradeClientId := "07-tendermint-1" + + // Create a host zone with out any ICA addresses + s.App.StakeibcKeeper.SetHostZone(s.Ctx, types.HostZone{ + ChainId: delegationChainId, + }) + + // Create a trade route without any ICA addresses + s.App.StakeibcKeeper.SetTradeRoute(s.Ctx, types.TradeRoute{ + RewardDenomOnRewardZone: RewardDenom, + HostDenomOnHostZone: HostDenom, + TradeAccount: types.ICAAccount{ + ChainId: tradeChainId, + Type: types.ICAAccountType_CONVERTER_TRADE, + }, + }) + + // Create the ICA channels for both the delegation and trade accounts + delegationOwner := types.FormatHostZoneICAOwner(delegationChainId, types.ICAAccountType_DELEGATION) + delegationPortId, _ := icatypes.NewControllerPortID(delegationOwner) + + tradeOwner := types.FormatTradeRouteICAOwner(tradeChainId, RewardDenom, HostDenom, types.ICAAccountType_CONVERTER_TRADE) + tradePortId, _ := icatypes.NewControllerPortID(tradeOwner) + + // Mock out the relevant clients, channels, and ICA addresses so the callback can map back to the relevant info + s.MockICAChannel(delegationConnectionId, delegationChannelId, delegationOwner, delegationAddress) + s.MockICAChannel(tradeConnectionId, tradeChannelId, tradeOwner, tradeAddress) + + s.MockClientAndConnection(delegationChainId, delegationClientId, delegationConnectionId) + s.MockClientAndConnection(tradeChainId, tradeClientId, tradeConnectionId) + + // Call the callback with the delegation ICA port and confirm the delegation address is set + err := s.App.StakeibcKeeper.OnChanOpenAck(s.Ctx, delegationPortId, delegationChannelId) + s.Require().NoError(err, "no error expected when running callback with delegation port") + + hostZone := s.MustGetHostZone(delegationChainId) + s.Require().Equal(delegationAddress, hostZone.DelegationIcaAddress, "delegation address") + + // Call the callback with the trade ICA port and confirm the trade address is set + err = s.App.StakeibcKeeper.OnChanOpenAck(s.Ctx, tradePortId, tradeChannelId) + s.Require().NoError(err, "no error expected when running callback with trade port") + + tradeRoute, found := s.App.StakeibcKeeper.GetTradeRoute(s.Ctx, RewardDenom, HostDenom) + s.Require().True(found, "trade route should have been round") + s.Require().Equal(tradeAddress, tradeRoute.TradeAccount.Address, "trade address") + + // Call the callback with a non-ICA port and confirm the host zone and trade route remained unchanged + err = s.App.StakeibcKeeper.OnChanOpenAck(s.Ctx, tradePortId, tradeChannelId) + s.Require().NoError(err, "no error expected when running callback with non-ICA port") + + finalHostZone := s.MustGetHostZone(delegationChainId) + s.Require().Equal(hostZone, finalHostZone, "host zone should not have been modified") + + finalTradeRoute, found := s.App.StakeibcKeeper.GetTradeRoute(s.Ctx, RewardDenom, HostDenom) + s.Require().True(found, "trade route should have been round") + s.Require().Equal(tradeRoute, finalTradeRoute, "trade route should not have been modified") +} + +// ------------------------------------------ +// StoreHostZoneIcaAddress +// ------------------------------------------ + +// Helper function to check that a single ICA address was stored on the host zone +// The address stored will match the string of the ICA account type +func (s *KeeperTestSuite) checkHostZoneAddressStored(accountType types.ICAAccountType) { + // Determine the expected ICA addresses based on whether the account in question + // is registered in this test case + delegationAddress := "" + if accountType == types.ICAAccountType_DELEGATION { + delegationAddress = accountType.String() + } + withdrawalAddress := "" + if accountType == types.ICAAccountType_WITHDRAWAL { + withdrawalAddress = accountType.String() + } + redemptionAddress := "" + if accountType == types.ICAAccountType_REDEMPTION { + redemptionAddress = accountType.String() + } + feeAddress := "" + if accountType == types.ICAAccountType_FEE { + feeAddress = accountType.String() + } + communityPoolDepositAddress := "" + if accountType == types.ICAAccountType_COMMUNITY_POOL_DEPOSIT { + communityPoolDepositAddress = accountType.String() + } + communityPoolReturnAddress := "" + if accountType == types.ICAAccountType_COMMUNITY_POOL_RETURN { + communityPoolReturnAddress = accountType.String() + } + + // Confirm the expected addresses with the host zone + hostZone := s.MustGetHostZone(HostChainId) + + s.Require().Equal(delegationAddress, hostZone.DelegationIcaAddress, "delegation address") + s.Require().Equal(withdrawalAddress, hostZone.WithdrawalIcaAddress, "withdrawal address") + s.Require().Equal(redemptionAddress, hostZone.RedemptionIcaAddress, "redemption address") + s.Require().Equal(feeAddress, hostZone.FeeIcaAddress, "fee address") + s.Require().Equal(communityPoolDepositAddress, hostZone.CommunityPoolDepositIcaAddress, "community pool deposit address") + s.Require().Equal(communityPoolReturnAddress, hostZone.CommunityPoolReturnIcaAddress, "commuity pool return address") +} + +// Helper function to check that relevant ICA addresses are whitelisted after the callback +func (s *KeeperTestSuite) checkAddressesWhitelisted(accountType types.ICAAccountType) { + if accountType == types.ICAAccountType_DELEGATION { + isWhitelisted := s.App.RatelimitKeeper.IsAddressPairWhitelisted(s.Ctx, DepositAddress, accountType.String()) + s.Require().True(isWhitelisted, "deposit -> delegation whitelist") + } + + if accountType == types.ICAAccountType_FEE { + sender := accountType.String() + receiver := s.App.AccountKeeper.GetModuleAccount(s.Ctx, types.RewardCollectorName).GetAddress().String() + + isWhitelisted := s.App.RatelimitKeeper.IsAddressPairWhitelisted(s.Ctx, sender, receiver) + s.Require().True(isWhitelisted, "fee -> reward collector whitelist") + } + + if accountType == types.ICAAccountType_COMMUNITY_POOL_DEPOSIT { + sender := accountType.String() + + receiver := CommunityPoolStakeHoldingAddress + isWhitelisted := s.App.RatelimitKeeper.IsAddressPairWhitelisted(s.Ctx, sender, receiver) + s.Require().True(isWhitelisted, "community pool deposit -> community pool stake holding") + + receiver = CommunityPoolRedeemHoldingAddress + isWhitelisted = s.App.RatelimitKeeper.IsAddressPairWhitelisted(s.Ctx, sender, receiver) + s.Require().True(isWhitelisted, "community pool deposit -> community pool redeem holding") + } + + if accountType == types.ICAAccountType_COMMUNITY_POOL_RETURN { + sender := CommunityPoolStakeHoldingAddress + receiver := accountType.String() + + isWhitelisted := s.App.RatelimitKeeper.IsAddressPairWhitelisted(s.Ctx, sender, receiver) + s.Require().True(isWhitelisted, "community pool stake holding -> community pool return") + } +} + +func (s *KeeperTestSuite) TestStoreHostZoneIcaAddress() { + // We'll run a test case for each ICA account, with two of them not being relevant for the host zone + icaAccountTypes := []types.ICAAccountType{ + types.ICAAccountType_DELEGATION, + types.ICAAccountType_WITHDRAWAL, + types.ICAAccountType_REDEMPTION, + types.ICAAccountType_FEE, + types.ICAAccountType_COMMUNITY_POOL_DEPOSIT, + types.ICAAccountType_COMMUNITY_POOL_RETURN, + + types.ICAAccountType_CONVERTER_TRADE, // not on the host zone + -1, // indicates test case for non-ICA port + } + + for _, accountType := range icaAccountTypes { + // Reset the host zone for each test and wipe all addresses + s.App.StakeibcKeeper.SetHostZone(s.Ctx, types.HostZone{ + ChainId: HostChainId, + DepositAddress: DepositAddress, + CommunityPoolStakeHoldingAddress: CommunityPoolStakeHoldingAddress, + CommunityPoolRedeemHoldingAddress: CommunityPoolRedeemHoldingAddress, + }) + + // Determine the port Id from the account type + // If the portId is -1, pass a non-ica port + portId := "not-ica-port" + if accountType != -1 { + owner := types.FormatHostZoneICAOwner(HostChainId, accountType) + portId, _ = icatypes.NewControllerPortID(owner) + } + + // Call StoreHostZoneIcaAddress with the portId + // use the account name as the address to make the matching easier + address := accountType.String() + err := s.App.StakeibcKeeper.StoreHostZoneIcaAddress(s.Ctx, HostChainId, portId, address) + s.Require().NoError(err, "no error expected when calling store host zone ICA for %s", accountType.String()) + + // Check if the updated addresses matches expectations + s.checkHostZoneAddressStored(accountType) + + // Check that the relevant accounts are white listed from the rate limiter + s.checkAddressesWhitelisted(accountType) + } +} + +// ------------------------------------------ +// StoreTradeRouteIcaAddress +// ------------------------------------------ + +// Helper function to check that a single ICA address was stored on the trade route +// The address stored will match the string of the ICA account type +func (s *KeeperTestSuite) checkTradeRouteAddressStored(accountType types.ICAAccountType) { + // Determine the expected ICA addresses based on whether the account in question + // is registered in this test case + unwindAddress := "" + if accountType == types.ICAAccountType_CONVERTER_UNWIND { + unwindAddress = types.ICAAccountType_CONVERTER_UNWIND.String() + } + tradeAddress := "" + if accountType == types.ICAAccountType_CONVERTER_TRADE { + tradeAddress = types.ICAAccountType_CONVERTER_TRADE.String() + } + + // Confirm the expected addresses with the host zone + tradeRoute, found := s.App.StakeibcKeeper.GetTradeRoute(s.Ctx, RewardDenom, HostDenom) + s.Require().True(found, "trade route should have been found") + + s.Require().Equal(unwindAddress, tradeRoute.RewardAccount.Address, "unwind address") + s.Require().Equal(tradeAddress, tradeRoute.TradeAccount.Address, "trade address") +} + +func (s *KeeperTestSuite) TestStoreTradeRouteIcaAddress() { + // We'll run a test case for each the two ICA accounts, and 2 test cases for ports not on the trade route + icaAccountTypes := []types.ICAAccountType{ + types.ICAAccountType_CONVERTER_UNWIND, + types.ICAAccountType_CONVERTER_TRADE, + + types.ICAAccountType_DELEGATION, // not on the trade route + -1, // indicates test case for non-ICA port + } + + emptyTradeRoute := types.TradeRoute{ + RewardDenomOnRewardZone: RewardDenom, + HostDenomOnHostZone: HostDenom, + RewardAccount: types.ICAAccount{ + ChainId: HostChainId, + Type: types.ICAAccountType_CONVERTER_UNWIND, + }, + TradeAccount: types.ICAAccount{ + ChainId: HostChainId, + Type: types.ICAAccountType_CONVERTER_TRADE, + }, + } + + for _, accountType := range icaAccountTypes { + // Reset the trade route for each test and wipe all addresses + s.App.StakeibcKeeper.SetTradeRoute(s.Ctx, emptyTradeRoute) + + // Determine the port Id from the account type + // If the portId is -1, pass a non-ica port + portId := "not-ica-port" + if accountType != -1 { + owner := types.FormatTradeRouteICAOwner(HostChainId, RewardDenom, HostDenom, accountType) + portId, _ = icatypes.NewControllerPortID(owner) + } + + // Call StoreTradeRouteIcaAddress with the portId + // use the account name as the address to make the matching easier + address := accountType.String() + err := s.App.StakeibcKeeper.StoreTradeRouteIcaAddress(s.Ctx, HostChainId, portId, address) + s.Require().NoError(err, "no error expected when calling store trade route ICA for %s", accountType.String()) + + // Check if the updated addresses matches expectations + s.checkTradeRouteAddressStored(accountType) + } + + // Check with a matching port, but no matching chainId + accountType := types.ICAAccountType_CONVERTER_TRADE + owner := types.FormatTradeRouteICAOwner(HostChainId, RewardDenom, HostDenom, accountType) + portId, _ := icatypes.NewControllerPortID(owner) + address := accountType.String() + + emptyTradeRoute.TradeAccount.ChainId = "different-chain-id" + s.App.StakeibcKeeper.SetTradeRoute(s.Ctx, emptyTradeRoute) + + err := s.App.StakeibcKeeper.StoreTradeRouteIcaAddress(s.Ctx, HostChainId, portId, address) + s.Require().NoError(err, "no error expected when calling store trade route ICA for trade ICA with no chainId") + + s.checkTradeRouteAddressStored(-1) // checks no matches +} + +// ------------------------------------------ +// GetLightClientTime +// ------------------------------------------ + +type GetLightClientTestCase struct { + connectionId string + expectedLightClientTime int64 + expectedLightClientHeight int64 +} + +func (s *KeeperTestSuite) SetupGetLightClient() GetLightClientTestCase { + connectionId := "connection-0" + s.CreateTransferChannel("GAIA") + + // note this time is Jan 2020, set in the ibc test setup + expectedLightClientTime := int64(1577923330000000000) + // note this is the block height post-setup in the ibc test setup (creating connections, channels etc advances the block) + // this may change as we amend the setup, please update accordingly! + expectedLightClientHeight := int64(16) + + return GetLightClientTestCase{ + connectionId: connectionId, + expectedLightClientTime: expectedLightClientTime, + expectedLightClientHeight: expectedLightClientHeight, + } +} + +func (s *KeeperTestSuite) TestGetLightClientTime_Successful() { + tc := s.SetupGetLightClient() + + actualLightClientTime, err := s.App.StakeibcKeeper.GetLightClientTime(s.Ctx, tc.connectionId) + s.Require().NoError(err, "light client time could be fetched") + + s.Require().Greater(int(actualLightClientTime), 0, "light client time g.t. 0") + s.Require().Equal(tc.expectedLightClientTime, int64(actualLightClientTime), "light client time matches expected time") + + // update LC to new block on host chain + // NOTE this advances the time! + err = s.TransferPath.EndpointA.UpdateClient() + s.Require().NoError(err, "update client") + timeDelta := 10000000000 + + actualLightClientTimeNewTime, err := s.App.StakeibcKeeper.GetLightClientTime(s.Ctx, tc.connectionId) + s.Require().NoError(err, "new light client time could be fetched") + + s.Require().Equal(int64(actualLightClientTimeNewTime), int64(actualLightClientTime+uint64(timeDelta)), "light client time increments by expected amount") +} + +func (s *KeeperTestSuite) TestGetLightClient_InvalidConnection() { + tc := s.SetupGetLightClient() + tc.connectionId = "connection-invalid" + + _, err := s.App.StakeibcKeeper.GetLightClientTime(s.Ctx, tc.connectionId) + s.Require().ErrorContains(err, "connection-id: connection-invalid: connection not found") + + _, err = s.App.StakeibcKeeper.GetLightClientHeight(s.Ctx, tc.connectionId) + s.Require().ErrorContains(err, "connection-id: connection-invalid: connection not found") +} + +func (s *KeeperTestSuite) TestGetLightClientHeight_Successful() { + tc := s.SetupGetLightClient() + + actualLightClientHeight, err := s.App.StakeibcKeeper.GetLightClientHeight(s.Ctx, tc.connectionId) + s.Require().NoError(err, "light client time could be fetched") + + s.Require().Greater(int(actualLightClientHeight), 0, "light client height g.t. 0") + s.Require().Equal(tc.expectedLightClientHeight, int64(actualLightClientHeight), "light client height matches expected height") + + // update LC to new block on host chain + // NOTE this advances the block height! + err = s.TransferPath.EndpointA.UpdateClient() + s.Require().NoError(err, "update client") + + actualLightClientHeightNextBlock, err := s.App.StakeibcKeeper.GetLightClientHeight(s.Ctx, tc.connectionId) + s.Require().NoError(err, "light client time could be fetched") + + s.Require().Equal(int64(actualLightClientHeight+1), int64(actualLightClientHeightNextBlock), "light client height matches expected height") +} diff --git a/x/stakeibc/keeper/icacallbacks.go b/x/stakeibc/keeper/icacallbacks.go new file mode 100644 index 00000000000..ed1525bbc25 --- /dev/null +++ b/x/stakeibc/keeper/icacallbacks.go @@ -0,0 +1,27 @@ +package keeper + +import ( + icacallbackstypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" +) + +const ( + ICACallbackID_Delegate = "delegate" + ICACallbackID_Claim = "claim" + ICACallbackID_Undelegate = "undelegate" + ICACallbackID_Reinvest = "reinvest" + ICACallbackID_Redemption = "redemption" + ICACallbackID_Rebalance = "rebalance" + ICACallbackID_Detokenize = "detokenize" +) + +func (k Keeper) Callbacks() icacallbackstypes.ModuleCallbacks { + return []icacallbackstypes.ICACallback{ + {CallbackId: ICACallbackID_Delegate, CallbackFunc: icacallbackstypes.ICACallbackFunction(k.DelegateCallback)}, + {CallbackId: ICACallbackID_Claim, CallbackFunc: icacallbackstypes.ICACallbackFunction(k.ClaimCallback)}, + {CallbackId: ICACallbackID_Undelegate, CallbackFunc: icacallbackstypes.ICACallbackFunction(k.UndelegateCallback)}, + {CallbackId: ICACallbackID_Reinvest, CallbackFunc: icacallbackstypes.ICACallbackFunction(k.ReinvestCallback)}, + {CallbackId: ICACallbackID_Redemption, CallbackFunc: icacallbackstypes.ICACallbackFunction(k.RedemptionCallback)}, + {CallbackId: ICACallbackID_Rebalance, CallbackFunc: icacallbackstypes.ICACallbackFunction(k.RebalanceCallback)}, + {CallbackId: ICACallbackID_Detokenize, CallbackFunc: icacallbackstypes.ICACallbackFunction(k.DetokenizeCallback)}, + } +} diff --git a/x/stakeibc/keeper/icacallbacks_claim.go b/x/stakeibc/keeper/icacallbacks_claim.go new file mode 100644 index 00000000000..478335507c8 --- /dev/null +++ b/x/stakeibc/keeper/icacallbacks_claim.go @@ -0,0 +1,106 @@ +package keeper + +import ( + "fmt" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/gogoproto/proto" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + "github.com/osmosis-labs/osmosis/v27/utils" + icacallbackstypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// Marshal claim callback args +func (k Keeper) MarshalClaimCallbackArgs(ctx sdk.Context, claimCallback types.ClaimCallback) ([]byte, error) { + out, err := proto.Marshal(&claimCallback) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("MarshalClaimCallbackArgs %v", err.Error())) + return nil, err + } + return out, nil +} + +// Unmarshalls claim callback arguments into a ClaimCallback struct +func (k Keeper) UnmarshalClaimCallbackArgs(ctx sdk.Context, claimCallback []byte) (*types.ClaimCallback, error) { + unmarshalledDelegateCallback := types.ClaimCallback{} + if err := proto.Unmarshal(claimCallback, &unmarshalledDelegateCallback); err != nil { + return nil, errorsmod.Wrap(err, "unable to unmarshal claim callback args") + } + return &unmarshalledDelegateCallback, nil +} + +// ICA Callback after claiming unbonded tokens +// * If successful: Removes the user redemption record +// * If timeout/failure: Reverts pending flag in the user redemption record so the claim can be re-tried +func (k Keeper) ClaimCallback(ctx sdk.Context, packet channeltypes.Packet, ackResponse *icacallbackstypes.AcknowledgementResponse, args []byte) error { + // Fetch callback args + claimCallback, err := k.UnmarshalClaimCallbackArgs(ctx, args) + if err != nil { + return err + } + chainId := claimCallback.ChainId + k.Logger(ctx).Info(utils.LogICACallbackWithHostZone(chainId, ICACallbackID_Claim, + "Starting claim callback for Redemption Record: %s", claimCallback.UserRedemptionRecordId)) + + // Grab the associated user redemption record + userRedemptionRecord, found := k.RecordsKeeper.GetUserRedemptionRecord(ctx, claimCallback.GetUserRedemptionRecordId()) + if !found { + return errorsmod.Wrapf(types.ErrRecordNotFound, "user redemption record not found %s", claimCallback.GetUserRedemptionRecordId()) + } + + // Check for a timeout + // If the ICA timed out, update the redemption record so the user can retry the claim + if ackResponse.Status == icacallbackstypes.AckResponseStatus_TIMEOUT { + k.Logger(ctx).Error(utils.LogICACallbackStatusWithHostZone(chainId, ICACallbackID_Claim, + icacallbackstypes.AckResponseStatus_TIMEOUT, packet)) + + userRedemptionRecord.ClaimIsPending = false + k.RecordsKeeper.SetUserRedemptionRecord(ctx, userRedemptionRecord) + return nil + } + + // Check for a failed transaction (ack error) + // Upon failure, update the redemption record to allow the user to retry the claim + if ackResponse.Status == icacallbackstypes.AckResponseStatus_FAILURE { + k.Logger(ctx).Error(utils.LogICACallbackStatusWithHostZone(chainId, ICACallbackID_Claim, + icacallbackstypes.AckResponseStatus_FAILURE, packet)) + + // after an error, a user should be able to retry the claim + userRedemptionRecord.ClaimIsPending = false + k.RecordsKeeper.SetUserRedemptionRecord(ctx, userRedemptionRecord) + return nil + } + + k.Logger(ctx).Info(utils.LogICACallbackStatusWithHostZone(chainId, ICACallbackID_Claim, + icacallbackstypes.AckResponseStatus_SUCCESS, packet)) + + // Upon success, remove the record and decrement the unbonded amount on the host zone unbonding record + k.RecordsKeeper.RemoveUserRedemptionRecord(ctx, claimCallback.GetUserRedemptionRecordId()) + err = k.DecrementHostZoneUnbonding(ctx, userRedemptionRecord, *claimCallback) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("ClaimCallback failed (DecrementHostZoneUnbonding), packet %v, err: %s", packet, err.Error())) + return err + } + + k.Logger(ctx).Info(fmt.Sprintf("[CLAIM] success on %s", userRedemptionRecord.GetHostZoneId())) + return nil +} + +// After a user claims their unbonded tokens, the claim amount is decremented from the corresponding host zone unbonding record +func (k Keeper) DecrementHostZoneUnbonding(ctx sdk.Context, userRedemptionRecord recordstypes.UserRedemptionRecord, callbackArgs types.ClaimCallback) error { + // fetch the hzu associated with the user unbonding record + hostZoneUnbonding, found := k.RecordsKeeper.GetHostZoneUnbondingByChainId(ctx, callbackArgs.EpochNumber, callbackArgs.ChainId) + if !found { + return errorsmod.Wrapf(types.ErrRecordNotFound, "host zone unbonding not found %s", callbackArgs.ChainId) + } + + // decrement the hzu by the amount claimed + hostZoneUnbonding.ClaimableNativeTokens = hostZoneUnbonding.ClaimableNativeTokens.Sub(userRedemptionRecord.NativeTokenAmount) + + // save the updated hzu on the epoch unbonding record + return k.RecordsKeeper.SetHostZoneUnbondingRecord(ctx, callbackArgs.EpochNumber, callbackArgs.ChainId, *hostZoneUnbonding) +} diff --git a/x/stakeibc/keeper/icacallbacks_claim_test.go b/x/stakeibc/keeper/icacallbacks_claim_test.go new file mode 100644 index 00000000000..ccea752e09b --- /dev/null +++ b/x/stakeibc/keeper/icacallbacks_claim_test.go @@ -0,0 +1,241 @@ +package keeper_test + +import ( + "fmt" + + sdkmath "cosmossdk.io/math" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + _ "github.com/stretchr/testify/suite" + + icacallbacktypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + recordtypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +type ClaimCallbackState struct { + callbackArgs types.ClaimCallback + epochNumber uint64 + decrementAmount sdkmath.Int + hzu1TokenAmount sdkmath.Int +} + +type ClaimCallbackArgs struct { + packet channeltypes.Packet + ackResponse *icacallbacktypes.AcknowledgementResponse + args []byte +} + +type ClaimCallbackTestCase struct { + initialState ClaimCallbackState + validArgs ClaimCallbackArgs +} + +func (s *KeeperTestSuite) SetupClaimCallback() ClaimCallbackTestCase { + epochNumber := uint64(1) + recordId1 := recordtypes.UserRedemptionRecordKeyFormatter(HostChainId, epochNumber, "recevier") + userRedemptionRecord1 := recordtypes.UserRedemptionRecord{ + Id: recordId1, + // after a user calls ClaimUndelegatedTokens, the record is set to claimIsPending = true + // to prevent double claims + ClaimIsPending: true, + NativeTokenAmount: sdkmath.ZeroInt(), + } + recordId2 := recordtypes.UserRedemptionRecordKeyFormatter(HostChainId, epochNumber, "other_recevier") + userRedemptionRecord2 := recordtypes.UserRedemptionRecord{ + Id: recordId2, + ClaimIsPending: false, + } + recordId3 := recordtypes.UserRedemptionRecordKeyFormatter("not_gaia", epochNumber, "recevier") + userRedemptionRecord3 := recordtypes.UserRedemptionRecord{ + Id: recordId3, + ClaimIsPending: false, + } + s.App.RecordsKeeper.SetUserRedemptionRecord(s.Ctx, userRedemptionRecord1) + s.App.RecordsKeeper.SetUserRedemptionRecord(s.Ctx, userRedemptionRecord2) + s.App.RecordsKeeper.SetUserRedemptionRecord(s.Ctx, userRedemptionRecord3) + // the hzu that we'll claim from + hostZoneUnbonding1 := recordtypes.HostZoneUnbonding{ + HostZoneId: HostChainId, + Status: recordtypes.HostZoneUnbonding_CLAIMABLE, + UserRedemptionRecords: []string{recordId1, recordId2}, + ClaimableNativeTokens: sdkmath.NewInt(1_000_000), + } + hostZoneUnbonding2 := recordtypes.HostZoneUnbonding{ + HostZoneId: "not_gaia", + Status: recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE, + UserRedemptionRecords: []string{recordId3}, + ClaimableNativeTokens: sdkmath.NewInt(1_000_000), + } + // some other hzus in the future + hostZoneUnbonding3 := recordtypes.HostZoneUnbonding{ + HostZoneId: "not_gaia", + Status: recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE, + ClaimableNativeTokens: sdkmath.NewInt(1_000_000), + } + hostZoneUnbonding4 := recordtypes.HostZoneUnbonding{ + HostZoneId: HostChainId, + Status: recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE, + ClaimableNativeTokens: sdkmath.NewInt(1_000_000), + } + epochUnbondingRecord1 := recordtypes.EpochUnbondingRecord{ + EpochNumber: epochNumber, + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{&hostZoneUnbonding1, &hostZoneUnbonding2}, + } + epochUnbondingRecord2 := recordtypes.EpochUnbondingRecord{ + EpochNumber: epochNumber + 1, + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{&hostZoneUnbonding3, &hostZoneUnbonding4}, + } + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, epochUnbondingRecord1) + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, epochUnbondingRecord2) + + // Mock ack response and callback args + packet := channeltypes.Packet{} + ackResponse := icacallbacktypes.AcknowledgementResponse{Status: icacallbacktypes.AckResponseStatus_SUCCESS} + callbackArgs := types.ClaimCallback{ + UserRedemptionRecordId: recordId1, + ChainId: HostChainId, + EpochNumber: epochNumber, + } + callbackArgsBz, err := s.App.StakeibcKeeper.MarshalClaimCallbackArgs(s.Ctx, callbackArgs) + s.Require().NoError(err) + + decrementAmount := userRedemptionRecord1.NativeTokenAmount + + return ClaimCallbackTestCase{ + initialState: ClaimCallbackState{ + callbackArgs: callbackArgs, + epochNumber: epochNumber, + decrementAmount: decrementAmount, + hzu1TokenAmount: hostZoneUnbonding1.ClaimableNativeTokens, + }, + validArgs: ClaimCallbackArgs{ + packet: packet, + ackResponse: &ackResponse, + args: callbackArgsBz, + }, + } +} + +func (s *KeeperTestSuite) TestClaimCallback_Successful() { + tc := s.SetupClaimCallback() + initialState := tc.initialState + validArgs := tc.validArgs + + err := s.App.StakeibcKeeper.ClaimCallback(s.Ctx, validArgs.packet, validArgs.ackResponse, validArgs.args) + s.Require().NoError(err) + + _, found := s.App.RecordsKeeper.GetUserRedemptionRecord(s.Ctx, initialState.callbackArgs.UserRedemptionRecordId) + s.Require().False(found, "record has been deleted") + + // fetch the epoch unbonding record + epochUnbondingRecord1, found := s.App.RecordsKeeper.GetEpochUnbondingRecord(s.Ctx, tc.initialState.epochNumber) + s.Require().True(found, "epoch unbonding record found") + epochUnbondingRecord2, found := s.App.RecordsKeeper.GetEpochUnbondingRecord(s.Ctx, tc.initialState.epochNumber+1) + s.Require().True(found, "epoch unbonding record found") + + // fetch the hzus + hzu1 := epochUnbondingRecord1.HostZoneUnbondings[0] + hzu2 := epochUnbondingRecord1.HostZoneUnbondings[1] + hzu3 := epochUnbondingRecord2.HostZoneUnbondings[0] + hzu4 := epochUnbondingRecord2.HostZoneUnbondings[1] + + // check that hzu1 has a decremented amount + s.Require().Equal(hzu1.ClaimableNativeTokens, tc.initialState.hzu1TokenAmount.Sub(tc.initialState.decrementAmount), "hzu1 amount decremented") + s.Require().Equal(hzu1.Status, recordtypes.HostZoneUnbonding_CLAIMABLE, "hzu1 status set to transferred") + // verify the other hzus are unchanged + s.Require().Equal(hzu2.ClaimableNativeTokens, hzu2.ClaimableNativeTokens, "hzu2 amount unchanged") + s.Require().Equal(hzu2.Status, recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE, "hzu2 status set to transferred") + s.Require().Equal(hzu3.ClaimableNativeTokens, hzu3.ClaimableNativeTokens, "hzu3 amount unchanged") + s.Require().Equal(hzu3.Status, recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE, "hzu3 status set to transferred") + s.Require().Equal(hzu4.ClaimableNativeTokens, hzu4.ClaimableNativeTokens, "hzu4 amount unchanged") + s.Require().Equal(hzu4.Status, recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE, "hzu4 status set to transferred") +} + +func (s *KeeperTestSuite) checkClaimStateIfCallbackFailed(tc ClaimCallbackTestCase) { + record, found := s.App.RecordsKeeper.GetUserRedemptionRecord(s.Ctx, tc.initialState.callbackArgs.UserRedemptionRecordId) + s.Require().True(found) + s.Require().False(record.ClaimIsPending, "record is set to claimIsPending = false (if the callback failed, it should be reset to false so that users can retry the claim)") +} + +func (s *KeeperTestSuite) TestClaimCallback_ClaimCallbackTimeout() { + tc := s.SetupClaimCallback() + + // Update the ack response to indicate a timeout + invalidArgs := tc.validArgs + invalidArgs.ackResponse.Status = icacallbacktypes.AckResponseStatus_TIMEOUT + + err := s.App.StakeibcKeeper.ClaimCallback(s.Ctx, invalidArgs.packet, invalidArgs.ackResponse, invalidArgs.args) + s.Require().NoError(err, "timeout successfully proccessed") + s.checkClaimStateIfCallbackFailed(tc) +} + +func (s *KeeperTestSuite) TestClaimCallback_ClaimCallbackErrorOnHost() { + tc := s.SetupClaimCallback() + + // an error ack means the tx failed on the host + invalidArgs := tc.validArgs + invalidArgs.ackResponse.Status = icacallbacktypes.AckResponseStatus_FAILURE + + err := s.App.StakeibcKeeper.ClaimCallback(s.Ctx, invalidArgs.packet, invalidArgs.ackResponse, invalidArgs.args) + s.Require().NoError(err, "error ack successfully proccessed") + s.checkClaimStateIfCallbackFailed(tc) +} + +func (s *KeeperTestSuite) TestClaimCallback_WrongCallbackArgs() { + tc := s.SetupClaimCallback() + + // random args should cause the callback to fail + invalidCallbackArgs := []byte("random bytes") + + err := s.App.StakeibcKeeper.ClaimCallback(s.Ctx, tc.validArgs.packet, tc.validArgs.ackResponse, invalidCallbackArgs) + s.Require().ErrorContains(err, "unable to unmarshal claim callback args") +} + +func (s *KeeperTestSuite) TestClaimCallback_RecordNotFound() { + tc := s.SetupClaimCallback() + + // Remove the user redemption record from the state + s.App.RecordsKeeper.RemoveUserRedemptionRecord(s.Ctx, tc.initialState.callbackArgs.UserRedemptionRecordId) + + err := s.App.StakeibcKeeper.ClaimCallback(s.Ctx, tc.validArgs.packet, tc.validArgs.ackResponse, tc.validArgs.args) + s.Require().EqualError(err, fmt.Sprintf("user redemption record not found %s: record not found", tc.initialState.callbackArgs.UserRedemptionRecordId)) +} + +// DecrementHostZoneUnbonding decreases the number of tokens claimed by a user on a particular hzu +func (s *KeeperTestSuite) TestDecrementHostZoneUnbonding_Success() { + tc := s.SetupClaimCallback() + initialState := tc.initialState + + userRedemptionRecord, found := s.App.RecordsKeeper.GetUserRedemptionRecord(s.Ctx, initialState.callbackArgs.UserRedemptionRecordId) + s.Require().True(found, "record has been deleted") + + err := s.App.StakeibcKeeper.DecrementHostZoneUnbonding(s.Ctx, userRedemptionRecord, tc.initialState.callbackArgs) + s.Require().NoError(err, "host zone unbonding successfully decremented") + + // fetch the epoch unbonding record + epochUnbondingRecord1, found := s.App.RecordsKeeper.GetEpochUnbondingRecord(s.Ctx, tc.initialState.epochNumber) + s.Require().True(found, "epoch unbonding record found") + + // fetch the hzus + hzu1 := epochUnbondingRecord1.HostZoneUnbondings[0] + + // check that hzu1 has a decremented amount + s.Require().Equal(hzu1.ClaimableNativeTokens.Sub(userRedemptionRecord.NativeTokenAmount), hzu1.ClaimableNativeTokens, "hzu1 amount decremented") +} + +func (s *KeeperTestSuite) TestDecrementHostZoneUnbonding_HzuNotFound() { + tc := s.SetupClaimCallback() + initialState := tc.initialState + + // remove the hzus + epochUnbondingRecord, found := s.App.RecordsKeeper.GetEpochUnbondingRecord(s.Ctx, tc.initialState.epochNumber) + s.Require().True(found, "epoch unbonding record found") + epochUnbondingRecord.HostZoneUnbondings = []*recordtypes.HostZoneUnbonding{} + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, epochUnbondingRecord) + + userRedemptionRecord, found := s.App.RecordsKeeper.GetUserRedemptionRecord(s.Ctx, initialState.callbackArgs.UserRedemptionRecordId) + s.Require().True(found, "record has been deleted") + + err := s.App.StakeibcKeeper.DecrementHostZoneUnbonding(s.Ctx, userRedemptionRecord, tc.initialState.callbackArgs) + s.Require().EqualError(err, "host zone unbonding not found GAIA: record not found") +} diff --git a/x/stakeibc/keeper/icacallbacks_delegate.go b/x/stakeibc/keeper/icacallbacks_delegate.go new file mode 100644 index 00000000000..af3db14791b --- /dev/null +++ b/x/stakeibc/keeper/icacallbacks_delegate.go @@ -0,0 +1,105 @@ +package keeper + +import ( + "fmt" + + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/gogoproto/proto" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + "github.com/osmosis-labs/osmosis/v27/utils" + icacallbackstypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// ICA Callback after delegating deposit records +// * If successful: Updates deposit record status and records delegation changes on the host zone and validators +// * If timeout: Does nothing +// * If failure: Reverts deposit record status +func (k Keeper) DelegateCallback(ctx sdk.Context, packet channeltypes.Packet, ackResponse *icacallbackstypes.AcknowledgementResponse, args []byte) error { + // Deserialize the callback args + delegateCallback := types.DelegateCallback{} + if err := proto.Unmarshal(args, &delegateCallback); err != nil { + return errorsmod.Wrapf(err, "unable to unmarshal delegate callback") + } + chainId := delegateCallback.HostZoneId + k.Logger(ctx).Info(utils.LogICACallbackWithHostZone(chainId, ICACallbackID_Delegate, + "Starting delegate callback for Deposit Record: %d", delegateCallback.DepositRecordId)) + + // Confirm chainId and deposit record Id exist + hostZone, found := k.GetHostZone(ctx, chainId) + if !found { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "host zone not found %s", chainId) + } + recordId := delegateCallback.DepositRecordId + depositRecord, found := k.RecordsKeeper.GetDepositRecord(ctx, recordId) + if !found { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "deposit record not found %d", recordId) + } + + // Regardless of failure/success/timeout, indicate that this ICA has completed on the deposit record + if depositRecord.DelegationTxsInProgress == 0 { + return types.ErrInvalidDelegationsInProgress.Wrapf("delegation changes in progress is already 0 and can't be decremented") + } + depositRecord.DelegationTxsInProgress -= 1 + k.RecordsKeeper.SetDepositRecord(ctx, depositRecord) + + // Regardless of failure/success/timeout, indicate that this ICA has completed on each validator + // Sum up the total delegated in the process + totalDelegatedInBatch := sdkmath.ZeroInt() + for _, splitDelegation := range delegateCallback.SplitDelegations { + if err := k.DecrementValidatorDelegationChangesInProgress(&hostZone, splitDelegation.Validator); err != nil { + return err + } + totalDelegatedInBatch = totalDelegatedInBatch.Add(splitDelegation.Amount) + } + k.SetHostZone(ctx, hostZone) + + // Check for timeout (ack nil) + // No need to reset the deposit record status since it will get reverted when the channel is restored + if ackResponse.Status == icacallbackstypes.AckResponseStatus_TIMEOUT { + k.Logger(ctx).Error(utils.LogICACallbackStatusWithHostZone(chainId, ICACallbackID_Delegate, + icacallbackstypes.AckResponseStatus_TIMEOUT, packet)) + return nil + } + + // Check for a failed transaction (ack error) + // Reset the deposit record status upon failure + if ackResponse.Status == icacallbackstypes.AckResponseStatus_FAILURE { + k.Logger(ctx).Error(utils.LogICACallbackStatusWithHostZone(chainId, ICACallbackID_Delegate, + icacallbackstypes.AckResponseStatus_FAILURE, packet)) + + // Reset deposit record status + depositRecord.Status = recordstypes.DepositRecord_DELEGATION_QUEUE + k.RecordsKeeper.SetDepositRecord(ctx, depositRecord) + return nil + } + + k.Logger(ctx).Info(utils.LogICACallbackStatusWithHostZone(chainId, ICACallbackID_Delegate, + icacallbackstypes.AckResponseStatus_SUCCESS, packet)) + + // Decrement the amount on the deposit record + // If there's nothing left on the deposit record, remove it + depositRecord.Amount = depositRecord.Amount.Sub(totalDelegatedInBatch) + if depositRecord.Amount.IsZero() { + k.RecordsKeeper.RemoveDepositRecord(ctx, recordId) + } else { + k.RecordsKeeper.SetDepositRecord(ctx, depositRecord) + } + + // Update delegations on the validators and host zone + for _, splitDelegation := range delegateCallback.SplitDelegations { + err := k.AddDelegationToValidator(ctx, &hostZone, splitDelegation.Validator, splitDelegation.Amount, ICACallbackID_Delegate) + if err != nil { + return errorsmod.Wrapf(err, "Failed to add delegation to validator") + } + } + k.SetHostZone(ctx, hostZone) + + k.Logger(ctx).Info(fmt.Sprintf("[DELEGATION] success on %s", chainId)) + return nil +} diff --git a/x/stakeibc/keeper/icacallbacks_delegate_test.go b/x/stakeibc/keeper/icacallbacks_delegate_test.go new file mode 100644 index 00000000000..9f05bd91d41 --- /dev/null +++ b/x/stakeibc/keeper/icacallbacks_delegate_test.go @@ -0,0 +1,233 @@ +package keeper_test + +import ( + sdkmath "cosmossdk.io/math" + "github.com/cosmos/gogoproto/proto" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + icacallbacktypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + recordtypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +type DelegateCallbackTestCase struct { + initialHostZone types.HostZone + initialDepositRecord recordtypes.DepositRecord + totalTx1NewDelegation sdkmath.Int + totalTx2NewDelegation sdkmath.Int + splitDelegationsTx1 []*types.SplitDelegation + splitDelegationsTx2 []*types.SplitDelegation +} + +func (s *KeeperTestSuite) SetupDelegateCallback() DelegateCallbackTestCase { + // Test Setup + // - 1_000_000 total delegated, 400_000 to val1, 600_000 to val2 + // - Deposit record: 500_000 + // - Callback 1: delegated 100_000 to val1 and 100_000 to val2 + // - Callback 2: delegated 200_000 to val1 and 100_000 to val2 + totalDelegation := sdkmath.NewInt(1_000_000) + val1InitialDelegation := sdkmath.NewInt(400_000) + val2InitialDelegation := sdkmath.NewInt(600_000) + + totalNewDelegation := sdkmath.NewInt(500_000) + totalTx1NewDelegation := sdkmath.NewInt(300_000) + totalTx2NewDelegation := sdkmath.NewInt(200_000) + + val1Tx1Delegation := sdkmath.NewInt(100_000) + val2Tx1Delegation := sdkmath.NewInt(200_000) + val1Tx2Delegation := sdkmath.NewInt(100_000) + val2Tx2Delegation := sdkmath.NewInt(100_000) + + // Create the validators with their initial delegations and the host zone + validators := []*types.Validator{ + {Address: "val1", Delegation: val1InitialDelegation, DelegationChangesInProgress: 2}, + {Address: "val2", Delegation: val2InitialDelegation, DelegationChangesInProgress: 2}, + } + hostZone := types.HostZone{ + ChainId: HostChainId, + HostDenom: Atom, + Validators: validators, + TotalDelegations: totalDelegation, + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + // Create the deposit record + depositRecord := recordtypes.DepositRecord{ + Id: DepositRecordId, + HostZoneId: HostChainId, + Amount: totalNewDelegation, + Status: recordtypes.DepositRecord_DELEGATION_QUEUE, + DelegationTxsInProgress: 2, + } + s.App.RecordsKeeper.SetDepositRecord(s.Ctx, depositRecord) + + // Mock the callback args + splitDelegations1 := []*types.SplitDelegation{ + {Validator: validators[0].Address, Amount: val1Tx1Delegation}, + {Validator: validators[1].Address, Amount: val2Tx1Delegation}, + } + splitDelegations2 := []*types.SplitDelegation{ + {Validator: validators[0].Address, Amount: val1Tx2Delegation}, + {Validator: validators[1].Address, Amount: val2Tx2Delegation}, + } + + return DelegateCallbackTestCase{ + initialHostZone: hostZone, + initialDepositRecord: depositRecord, + totalTx1NewDelegation: totalTx1NewDelegation, + totalTx2NewDelegation: totalTx2NewDelegation, + splitDelegationsTx1: splitDelegations1, + splitDelegationsTx2: splitDelegations2, + } +} + +// Helper function to call the delegate callback function with relevant args +func (s *KeeperTestSuite) delegateCallback(status icacallbacktypes.AckResponseStatus, splitDelegations []*types.SplitDelegation) error { + packet := channeltypes.Packet{} + ackResponse := &icacallbacktypes.AcknowledgementResponse{ + Status: status, + } + callbackArgs := types.DelegateCallback{ + HostZoneId: HostChainId, + DepositRecordId: DepositRecordId, + SplitDelegations: splitDelegations, + } + callbackArgsBz, err := proto.Marshal(&callbackArgs) + s.Require().NoError(err) + + return s.App.StakeibcKeeper.DelegateCallback(s.Ctx, packet, ackResponse, callbackArgsBz) +} + +func (s *KeeperTestSuite) TestDelegateCallback_Successful() { + // This test will test two consecutive callbacks from different ICAs + // The first callback will partially decrement the deposit record and the second + // callback will remove the deposit record + tc := s.SetupDelegateCallback() + + // Execute the callback the first time + err := s.delegateCallback(icacallbacktypes.AckResponseStatus_SUCCESS, tc.splitDelegationsTx1) + s.Require().NoError(err) + + // Confirm total delegation has increased + hostZone := s.MustGetHostZone(HostChainId) + expectedUpdatedDelegation := tc.initialHostZone.TotalDelegations.Add(tc.totalTx1NewDelegation) + s.Require().Equal(expectedUpdatedDelegation.Int64(), hostZone.TotalDelegations.Int64(), "total delegation after first callback") + + // Confirm delegations have been added to validators + validator1 := hostZone.Validators[0] + validator2 := hostZone.Validators[1] + expectedVal1Delegation := tc.initialHostZone.Validators[0].Delegation.Add(tc.splitDelegationsTx1[0].Amount) + expectedVal2Delegation := tc.initialHostZone.Validators[1].Delegation.Add(tc.splitDelegationsTx1[1].Amount) + s.Require().Equal(expectedVal1Delegation.Int64(), validator1.Delegation.Int64(), "val1 delegation after first callback") + s.Require().Equal(expectedVal2Delegation.Int64(), validator2.Delegation.Int64(), "val2 delegation after first callback") + + // Confirm the number of delegations in progress has decreased + s.Require().Equal(1, int(validator1.DelegationChangesInProgress), "val1 delegation changes in progress first callback") + s.Require().Equal(1, int(validator1.DelegationChangesInProgress), "val2 delegation changes in progress first callback") + + // Confirm deposit record was decremented + depositRecord := s.MustGetDepositRecord(DepositRecordId) + expectedDepositRecordAmount := tc.initialDepositRecord.Amount.Sub(tc.totalTx1NewDelegation) + s.Require().Equal(expectedDepositRecordAmount.Int64(), depositRecord.Amount.Int64(), "deposit record after first callback") + s.Require().Equal(1, int(depositRecord.DelegationTxsInProgress), "deposit record delegation txs in progress first callback") + + // Execute the callback again for the second tx, it should delegate the remainder + err = s.delegateCallback(icacallbacktypes.AckResponseStatus_SUCCESS, tc.splitDelegationsTx2) + s.Require().NoError(err) + + // Confirm total delegation has increased + hostZone = s.MustGetHostZone(HostChainId) + expectedUpdatedDelegation = expectedUpdatedDelegation.Add(tc.totalTx2NewDelegation) + s.Require().Equal(expectedUpdatedDelegation.Int64(), hostZone.TotalDelegations.Int64(), "total delegation after second callback") + + // Confirm delegations have been added to validators + validator1 = hostZone.Validators[0] + validator2 = hostZone.Validators[1] + expectedVal1Delegation = expectedVal1Delegation.Add(tc.splitDelegationsTx2[0].Amount) + expectedVal2Delegation = expectedVal2Delegation.Add(tc.splitDelegationsTx2[1].Amount) + s.Require().Equal(expectedVal1Delegation.Int64(), validator1.Delegation.Int64(), "val1 delegation after second callback") + s.Require().Equal(expectedVal2Delegation.Int64(), validator2.Delegation.Int64(), "val2 delegation after second callback") + + // Confirm the number of delegations in progress has decreased + s.Require().Zero(validator1.DelegationChangesInProgress, "val1 delegation changes in progress second callback") + s.Require().Zero(validator1.DelegationChangesInProgress, "val2 delegation changes in progress second callback") + + // Confirm deposit record was removed + _, found := s.App.RecordsKeeper.GetDepositRecord(s.Ctx, DepositRecordId) + s.Require().False(found, "deposit record should have been removed") +} + +func (s *KeeperTestSuite) checkDelegateStateIfCallbackFailed(tc DelegateCallbackTestCase) { + // Confirm total delegation has not increased + hostZone := s.MustGetHostZone(HostChainId) + s.Require().Equal(tc.initialHostZone.TotalDelegations, hostZone.TotalDelegations, "total delegation should not have increased") + + // Confirm the validator delegations did not change + validator1 := hostZone.Validators[0] + validator2 := hostZone.Validators[1] + expectedVal1Delegation := tc.initialHostZone.Validators[0].Delegation + expectedVal2Delegation := tc.initialHostZone.Validators[1].Delegation + s.Require().Equal(expectedVal1Delegation.Int64(), validator1.Delegation.Int64(), "val1 delegation should not change") + s.Require().Equal(expectedVal2Delegation.Int64(), validator2.Delegation.Int64(), "val2 delegation should not change") + + // Confirm the number of delegations in progress has decreased + s.Require().Equal(1, int(hostZone.Validators[0].DelegationChangesInProgress), "val1 delegation changes in progress") + s.Require().Equal(1, int(hostZone.Validators[1].DelegationChangesInProgress), "val2 delegation changes in progress") + + // Confirm deposit record has had the txs in progress decremented, but the amount untouched + depositRecord := s.MustGetDepositRecord(DepositRecordId) + s.Require().Equal(1, int(depositRecord.DelegationTxsInProgress), "delegation tx in progress should have decremented") + s.Require().Equal(tc.initialDepositRecord.Amount, depositRecord.Amount, "deposit record amount should not have changed") + s.Require().Equal(tc.initialDepositRecord.Status, depositRecord.Status, "deposit record status should not have changed") +} + +func (s *KeeperTestSuite) TestDelegateCallback_AckTimeout() { + tc := s.SetupDelegateCallback() + + // Call the callback with a timeout ack + err := s.delegateCallback(icacallbacktypes.AckResponseStatus_TIMEOUT, tc.splitDelegationsTx1) + s.Require().NoError(err) + s.checkDelegateStateIfCallbackFailed(tc) +} + +func (s *KeeperTestSuite) TestDelegateCallback_AckError() { + tc := s.SetupDelegateCallback() + + // Call the callback with a failure ack + err := s.delegateCallback(icacallbacktypes.AckResponseStatus_FAILURE, tc.splitDelegationsTx1) + s.Require().NoError(err) + s.checkDelegateStateIfCallbackFailed(tc) +} + +func (s *KeeperTestSuite) TestDelegateCallback_WrongCallbackArgs() { + s.SetupDelegateCallback() + + // random args should cause the callback to fail + packet := channeltypes.Packet{} + ackResponse := &icacallbacktypes.AcknowledgementResponse{} + invalidCallbackArgs := []byte("random bytes") + + err := s.App.StakeibcKeeper.DelegateCallback(s.Ctx, packet, ackResponse, invalidCallbackArgs) + s.Require().ErrorContains(err, "unable to unmarshal delegate callback") +} + +func (s *KeeperTestSuite) TestDelegateCallback_HostNotFound() { + tc := s.SetupDelegateCallback() + + // Remove the host zone + s.App.StakeibcKeeper.RemoveHostZone(s.Ctx, HostChainId) + + err := s.delegateCallback(icacallbacktypes.AckResponseStatus_SUCCESS, tc.splitDelegationsTx1) + s.Require().ErrorContains(err, "host zone not found GAIA") +} + +func (s *KeeperTestSuite) TestDelegateCallback_MissingValidator() { + tc := s.SetupDelegateCallback() + + // Update the callback args such that a validator is missing + invalidSplitDelegation := tc.splitDelegationsTx1 + invalidSplitDelegation[0].Validator = "validator_dne" + + err := s.delegateCallback(icacallbacktypes.AckResponseStatus_SUCCESS, invalidSplitDelegation) + s.Require().ErrorContains(err, "validator not found") +} diff --git a/x/stakeibc/keeper/icacallbacks_detokenize.go b/x/stakeibc/keeper/icacallbacks_detokenize.go new file mode 100644 index 00000000000..cf4bcd40121 --- /dev/null +++ b/x/stakeibc/keeper/icacallbacks_detokenize.go @@ -0,0 +1,87 @@ +package keeper + +import ( + "fmt" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/gogoproto/proto" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + "github.com/osmosis-labs/osmosis/v27/utils" + icacallbackstypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// ICACallback after an LSM token is detokenized into native stake +// +// If successful: Remove the token deposit from the store and incremenet the validator delegation +// If failure: flag the deposit as DETOKENIZATION_FAILED +// If timeout: do nothing +// - A timeout will force the channel closed, and once the channel is restored, +// the ICA will get resubmitted +func (k Keeper) DetokenizeCallback(ctx sdk.Context, packet channeltypes.Packet, ackResponse *icacallbackstypes.AcknowledgementResponse, args []byte) error { + // Fetch callback args + detokenizeCallback := types.DetokenizeSharesCallback{} + if err := proto.Unmarshal(args, &detokenizeCallback); err != nil { + return errorsmod.Wrapf(types.ErrUnmarshalFailure, "unable to unmarshal detokenize callback: %s", err.Error()) + } + chainId := detokenizeCallback.Deposit.ChainId + deposit := detokenizeCallback.Deposit + k.Logger(ctx).Info(utils.LogICACallbackWithHostZone(chainId, ICACallbackID_Detokenize, "Starting detokenize callback")) + + // Regardless of failure/success/timeout, indicate that this ICA has completed + hostZone, found := k.GetHostZone(ctx, chainId) + if !found { + return errorsmod.Wrapf(types.ErrHostZoneNotFound, "Host zone not found: %s", chainId) + } + if err := k.DecrementValidatorDelegationChangesInProgress(&hostZone, deposit.ValidatorAddress); err != nil { + return err + } + k.SetHostZone(ctx, hostZone) + + // No action is necessary on a timeout + if ackResponse.Status == icacallbackstypes.AckResponseStatus_TIMEOUT { + k.Logger(ctx).Error(utils.LogICACallbackStatusWithHostZone(chainId, ICACallbackID_Detokenize, + icacallbackstypes.AckResponseStatus_TIMEOUT, packet)) + return nil + } + + // If the ICA failed, update the deposit status + if ackResponse.Status == icacallbackstypes.AckResponseStatus_FAILURE { + k.Logger(ctx).Error(utils.LogICACallbackStatusWithHostZone(chainId, ICACallbackID_Detokenize, + icacallbackstypes.AckResponseStatus_FAILURE, packet)) + + k.RecordsKeeper.UpdateLSMTokenDepositStatus(ctx, *deposit, recordstypes.LSMTokenDeposit_DETOKENIZATION_FAILED) + return nil + } + + k.Logger(ctx).Info(utils.LogICACallbackStatusWithHostZone(chainId, ICACallbackID_Detokenize, + icacallbackstypes.AckResponseStatus_SUCCESS, packet)) + + // If the ICA succeeded, remove the token deposit + k.RecordsKeeper.RemoveLSMTokenDeposit(ctx, deposit.ChainId, deposit.Denom) + + // Determine the actual number of tokens that were turned to native stake + // (this can be slightly different than the amount initiated in the redeem tokens tx + // due a precision error in the SDK) + if len(ackResponse.MsgResponses) != 1 { + return fmt.Errorf("Invalid number of messages (%d) in detokenize response: %v", + len(ackResponse.MsgResponses), ackResponse.MsgResponses) + } + var detokenizeResponse types.MsgRedeemTokensForSharesResponse + if err := proto.Unmarshal(ackResponse.MsgResponses[0], &detokenizeResponse); err != nil { + return err + } + stakeAmount := detokenizeResponse.Amount.Amount + + // Update delegation on the host zone and validator + err := k.AddDelegationToValidator(ctx, &hostZone, deposit.ValidatorAddress, stakeAmount, ICACallbackID_Detokenize) + if err != nil { + return err + } + k.SetHostZone(ctx, hostZone) + + return nil +} diff --git a/x/stakeibc/keeper/icacallbacks_detokenize_test.go b/x/stakeibc/keeper/icacallbacks_detokenize_test.go new file mode 100644 index 00000000000..10819b90611 --- /dev/null +++ b/x/stakeibc/keeper/icacallbacks_detokenize_test.go @@ -0,0 +1,162 @@ +package keeper_test + +import ( + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/gogoproto/proto" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + icacallbackstypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + icacallbacktypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +type DetokenizeCallbackTestCase struct { + callbackBz []byte + expectedValidatorDelegation int64 + expectedTotalDelegation int64 + ackResponse *icacallbacktypes.AcknowledgementResponse +} + +// Helper function to setup the detokenize ICA callback test +// Returns the serialized callback args which will be an input parameter +// to the callback +func (s *KeeperTestSuite) SetupTestDetokenizeCallback(ackStatus icacallbacktypes.AckResponseStatus) DetokenizeCallbackTestCase { + stakeAmount := sdkmath.NewInt(1000) + detokenizedAmount := sdkmath.NewInt(999) // mimics SDK rounding bug + initialValidatorDelegation := sdkmath.NewInt(5000) + initialTotalDelegation := sdkmath.NewInt(10000) + + expectedValidatorDelegation := int64(5999) // 5000 + 999 + expectedTotalDelegation := int64(10999) // 10000 + 999 + + // Store host zone with validator + hostZone := types.HostZone{ + ChainId: HostChainId, + TotalDelegations: initialTotalDelegation, + Validators: []*types.Validator{{ + Address: ValAddress, + Delegation: initialValidatorDelegation, + DelegationChangesInProgress: 1, + }}, + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + // Store the LSMDeposit record with status DETOKENIZATION_IN_PROGRESS + deposit := recordstypes.LSMTokenDeposit{ + ChainId: HostChainId, + Denom: LSMTokenBaseDenom, + Status: recordstypes.LSMTokenDeposit_DETOKENIZATION_IN_PROGRESS, + ValidatorAddress: ValAddress, + Amount: stakeAmount, + } + s.App.RecordsKeeper.SetLSMTokenDeposit(s.Ctx, deposit) + + // Return the deposit as callback args + callbackBz, err := proto.Marshal(&types.DetokenizeSharesCallback{ + Deposit: &deposit, + }) + s.Require().NoError(err, "no error expected when marshalling callback args") + + // Message response includes the redeemed amount + detokenizeResponse := types.MsgRedeemTokensForSharesResponse{ + Amount: sdk.NewCoin(Atom, detokenizedAmount), + } + detokenizeResponseBz, err := proto.Marshal(&detokenizeResponse) + s.Require().NoError(err, "no error expected when marshaling detokenize response") + + // Build the ack response with the detokenized amount and ack status + ackResponse := &icacallbacktypes.AcknowledgementResponse{ + Status: ackStatus, + MsgResponses: [][]byte{detokenizeResponseBz}, + } + + return DetokenizeCallbackTestCase{ + callbackBz: callbackBz, + expectedValidatorDelegation: expectedValidatorDelegation, + expectedTotalDelegation: expectedTotalDelegation, + ackResponse: ackResponse, + } +} + +func (s *KeeperTestSuite) TestDetokenizeCallback_Successful() { + tc := s.SetupTestDetokenizeCallback(icacallbackstypes.AckResponseStatus_SUCCESS) + + // Call the callback with a successful response + err := s.App.StakeibcKeeper.DetokenizeCallback(s.Ctx, channeltypes.Packet{}, tc.ackResponse, tc.callbackBz) + s.Require().NoError(err, "no error expected during callback") + + // Check that the deposit was removed + _, found := s.App.RecordsKeeper.GetLSMTokenDeposit(s.Ctx, HostChainId, LSMTokenBaseDenom) + s.Require().False(found, "deposit should have been removed") + + // Check that the delegation was updated + hostZone, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, HostChainId) + s.Require().True(found, "host zone should have been found") + s.Require().Equal(tc.expectedTotalDelegation, hostZone.TotalDelegations.Int64(), "host zone total delegation") + s.Require().Equal(tc.expectedValidatorDelegation, hostZone.Validators[0].Delegation.Int64(), "validator delegation") + + // Check that the number of delegations in progress was decremented + s.Require().Equal(0, int(hostZone.Validators[0].DelegationChangesInProgress), "delegation change in progress") +} + +func (s *KeeperTestSuite) TestDetokenizeCallback_InvalidCallbackArgs() { + tc := s.SetupTestDetokenizeCallback(icacallbackstypes.AckResponseStatus_SUCCESS) + + // Call the callback with a successful ack, but invalid callback args + invalidCallbackArgs := []byte{1, 2, 3} + err := s.App.StakeibcKeeper.DetokenizeCallback(s.Ctx, channeltypes.Packet{}, tc.ackResponse, invalidCallbackArgs) + s.Require().ErrorContains(err, "unable to unmarshal detokenize callback") +} + +func (s *KeeperTestSuite) TestDetokenizeCallback_HostNotFound() { + tc := s.SetupTestDetokenizeCallback(icacallbackstypes.AckResponseStatus_SUCCESS) + + // Call the callback with a host zone that does not exist - it should fail + invalidCallbackArgs, err := proto.Marshal(&types.DetokenizeSharesCallback{ + Deposit: &recordstypes.LSMTokenDeposit{ + ChainId: "fake_chain", + }, + }) + s.Require().NoError(err, "no error expected when marshalling callback data") + + err = s.App.StakeibcKeeper.DetokenizeCallback(s.Ctx, channeltypes.Packet{}, tc.ackResponse, invalidCallbackArgs) + s.Require().ErrorContains(err, "Host zone not found") +} + +func (s *KeeperTestSuite) TestDetokenizeCallback_AckTimeout() { + tc := s.SetupTestDetokenizeCallback(icacallbackstypes.AckResponseStatus_TIMEOUT) + + // Call the callback with a timed-out response + err := s.App.StakeibcKeeper.DetokenizeCallback(s.Ctx, channeltypes.Packet{}, tc.ackResponse, tc.callbackBz) + s.Require().NoError(err, "no error expected during callback") + + // The deposit should still be there in status IN_PROGRESS + deposit, found := s.App.RecordsKeeper.GetLSMTokenDeposit(s.Ctx, HostChainId, LSMTokenBaseDenom) + s.Require().True(found, "deposit should not have been removed") + s.Require().Equal(recordstypes.LSMTokenDeposit_DETOKENIZATION_IN_PROGRESS.String(), deposit.Status.String(), "deposit status") + + // Check that the number of delegations in progress was decremented + hostZone, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, HostChainId) + s.Require().True(found, "host zone should have been found") + s.Require().Equal(0, int(hostZone.Validators[0].DelegationChangesInProgress), "delegation change in progress") +} + +func (s *KeeperTestSuite) TestDetokenizeCallback_AckFailure() { + tc := s.SetupTestDetokenizeCallback(icacallbackstypes.AckResponseStatus_FAILURE) + + // Call the callback with an ack-failure response + err := s.App.StakeibcKeeper.DetokenizeCallback(s.Ctx, channeltypes.Packet{}, tc.ackResponse, tc.callbackBz) + s.Require().NoError(err, "no error expected during callback") + + // The deposit status should be FAILED + deposit, found := s.App.RecordsKeeper.GetLSMTokenDeposit(s.Ctx, HostChainId, LSMTokenBaseDenom) + s.Require().True(found, "deposit should not have been removed") + s.Require().Equal(recordstypes.LSMTokenDeposit_DETOKENIZATION_FAILED.String(), deposit.Status.String(), "deposit status") + + // Check that the number of delegations in progress was decremented + hostZone, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, HostChainId) + s.Require().True(found, "host zone should have been found") + s.Require().Equal(0, int(hostZone.Validators[0].DelegationChangesInProgress), "delegation change in progress") +} diff --git a/x/stakeibc/keeper/icacallbacks_rebalance.go b/x/stakeibc/keeper/icacallbacks_rebalance.go new file mode 100644 index 00000000000..bb4cff12e45 --- /dev/null +++ b/x/stakeibc/keeper/icacallbacks_rebalance.go @@ -0,0 +1,114 @@ +package keeper + +import ( + "fmt" + + "github.com/osmosis-labs/osmosis/v27/utils" + icacallbackstypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/gogoproto/proto" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" +) + +// Marshalls rebalance callback arguments +func (k Keeper) MarshalRebalanceCallbackArgs(ctx sdk.Context, rebalanceCallback types.RebalanceCallback) ([]byte, error) { + out, err := proto.Marshal(&rebalanceCallback) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("MarshalRebalanceCallbackArgs %v", err.Error())) + return nil, err + } + return out, nil +} + +// Unmarshalls rebalance callback arguments into a RebalanceCallback struct +func (k Keeper) UnmarshalRebalanceCallbackArgs(ctx sdk.Context, rebalanceCallback []byte) (*types.RebalanceCallback, error) { + unmarshalledRebalanceCallback := types.RebalanceCallback{} + if err := proto.Unmarshal(rebalanceCallback, &unmarshalledRebalanceCallback); err != nil { + return nil, errorsmod.Wrap(err, "unable to unmarshal rebalance callback args") + } + return &unmarshalledRebalanceCallback, nil +} + +// ICA Callback after rebalance validators on a host zone +// * If successful: Updates relevant validator delegations on the host zone struct +// * If timeout/failure: Does nothing +func (k Keeper) RebalanceCallback(ctx sdk.Context, packet channeltypes.Packet, ackResponse *icacallbackstypes.AcknowledgementResponse, args []byte) error { + // Fetch callback args + rebalanceCallback, err := k.UnmarshalRebalanceCallbackArgs(ctx, args) + if err != nil { + return err + } + chainId := rebalanceCallback.HostZoneId + k.Logger(ctx).Info(utils.LogICACallbackWithHostZone(chainId, ICACallbackID_Rebalance, "Starting rebalance callback")) + + // Regardless of failure/success/timeout, indicate that this ICA has completed + hostZone, found := k.GetHostZone(ctx, rebalanceCallback.HostZoneId) + if !found { + return errorsmod.Wrapf(sdkerrors.ErrKeyNotFound, "Host zone not found: %s", rebalanceCallback.HostZoneId) + } + for _, rebalancing := range rebalanceCallback.Rebalancings { + if err := k.DecrementValidatorDelegationChangesInProgress(&hostZone, rebalancing.SrcValidator); err != nil { + return err + } + if err := k.DecrementValidatorDelegationChangesInProgress(&hostZone, rebalancing.DstValidator); err != nil { + return err + } + } + k.SetHostZone(ctx, hostZone) + + // Check for timeout (ack nil) + // No action is necessary on a timeout + if ackResponse.Status == icacallbackstypes.AckResponseStatus_TIMEOUT { + k.Logger(ctx).Error(utils.LogICACallbackStatusWithHostZone(chainId, ICACallbackID_Rebalance, + icacallbackstypes.AckResponseStatus_TIMEOUT, packet)) + return nil + } + + // Check for a failed transaction (ack error) + // No action is necessary on a failure + if ackResponse.Status == icacallbackstypes.AckResponseStatus_FAILURE { + k.Logger(ctx).Error(utils.LogICACallbackStatusWithHostZone(chainId, ICACallbackID_Rebalance, + icacallbackstypes.AckResponseStatus_FAILURE, packet)) + return nil + } + + k.Logger(ctx).Info(utils.LogICACallbackStatusWithHostZone(chainId, ICACallbackID_Rebalance, + icacallbackstypes.AckResponseStatus_SUCCESS, packet)) + + // Assemble a map from validatorAddress -> validator + valAddrMap := make(map[string]*types.Validator) + for _, val := range hostZone.Validators { + valAddrMap[val.Address] = val + } + + // For each re-delegation transaction, update the relevant validators on the host zone + for _, rebalancing := range rebalanceCallback.Rebalancings { + srcValidator := rebalancing.SrcValidator + dstValidator := rebalancing.DstValidator + + if _, valFound := valAddrMap[srcValidator]; !valFound { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "source validator not found %s", srcValidator) + } + if _, valFound := valAddrMap[dstValidator]; !valFound { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "destination validator not found %s", dstValidator) + } + + // Decrement the delegation from the source validator and increment the delegation + // for the destination validator + valAddrMap[srcValidator].Delegation = valAddrMap[srcValidator].Delegation.Sub(rebalancing.Amt) + valAddrMap[dstValidator].Delegation = valAddrMap[dstValidator].Delegation.Add(rebalancing.Amt) + + k.Logger(ctx).Info(utils.LogICACallbackWithHostZone(chainId, ICACallbackID_Rebalance, + " Decrementing delegation on %s by %v", srcValidator, rebalancing.Amt)) + k.Logger(ctx).Info(utils.LogICACallbackWithHostZone(chainId, ICACallbackID_Rebalance, + " Incrementing delegation on %s by %v", dstValidator, rebalancing.Amt)) + } + + k.SetHostZone(ctx, hostZone) + + return nil +} diff --git a/x/stakeibc/keeper/icacallbacks_rebalance_test.go b/x/stakeibc/keeper/icacallbacks_rebalance_test.go new file mode 100644 index 00000000000..57dc07bfb3b --- /dev/null +++ b/x/stakeibc/keeper/icacallbacks_rebalance_test.go @@ -0,0 +1,255 @@ +package keeper_test + +import ( + sdkmath "cosmossdk.io/math" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + _ "github.com/stretchr/testify/suite" + + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + icacallbacktypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +type RebalanceCallbackState struct { + hostZone types.HostZone + initialValidators []*types.Validator +} + +type RebalanceCallbackArgs struct { + packet channeltypes.Packet + ackResponse *icacallbacktypes.AcknowledgementResponse + args []byte +} + +type RebalanceCallbackTestCase struct { + initialState RebalanceCallbackState + validArgs RebalanceCallbackArgs +} + +func (s *KeeperTestSuite) SetupRebalanceCallback() RebalanceCallbackTestCase { + // Setup IBC + delegationIcaOwner := "GAIA.DELEGATION" + s.CreateICAChannel(delegationIcaOwner) + delegationAddr := s.IcaAddresses[delegationIcaOwner] + + // setup epochs + epochNumber := uint64(1) + epochTracker := types.EpochTracker{ + EpochIdentifier: epochtypes.STRIDE_EPOCH, + EpochNumber: epochNumber, + NextEpochStartTime: uint64(s.Coordinator.CurrentTime.UnixNano() + 30_000_000_000), // dictates timeouts + } + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, epochTracker) + + // define validators for host zone + initialValidators := []*types.Validator{ + { + // Delegation changes in progress is 2 because it will receive 2 redelegations + Name: "val1", + Address: "stride_VAL1", + Weight: 100, + Delegation: sdkmath.NewInt(100), + DelegationChangesInProgress: 2, + }, + { + Name: "val2", + Address: "stride_VAL2", + Weight: 500, + Delegation: sdkmath.NewInt(500), + DelegationChangesInProgress: 0, + }, + { + // Delegation changes in progress is 2 because it will give 1 redelegation + Name: "val3", + Address: "stride_VAL3", + Weight: 200, + Delegation: sdkmath.NewInt(200), + DelegationChangesInProgress: 1, + }, + { + // Delegation changes in progress is 2 because it will give 1 redelegation + Name: "val4", + Address: "stride_VAL4", + Weight: 400, + Delegation: sdkmath.NewInt(400), + DelegationChangesInProgress: 1, + }, + { + Name: "val5", + Address: "stride_VAL5", + Weight: 400, + Delegation: sdkmath.NewInt(400), + DelegationChangesInProgress: 0, + }, + } + + // setup host zone + hostZone := types.HostZone{ + ChainId: "GAIA", + Validators: initialValidators, + TotalDelegations: sdkmath.NewInt(1000), + ConnectionId: ibctesting.FirstConnectionID, + DelegationIcaAddress: delegationAddr, + HostDenom: "uatom", + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + packet := channeltypes.Packet{} + ackResponse := icacallbacktypes.AcknowledgementResponse{Status: icacallbacktypes.AckResponseStatus_SUCCESS} + callbackArgs := types.RebalanceCallback{ + HostZoneId: HostChainId, + Rebalancings: []*types.Rebalancing{ + { + SrcValidator: "stride_VAL3", + DstValidator: "stride_VAL1", + Amt: sdkmath.NewInt(104), + }, + { + SrcValidator: "stride_VAL4", + DstValidator: "stride_VAL1", + Amt: sdkmath.NewInt(13), + }, + }, + } + args, err := s.App.StakeibcKeeper.MarshalRebalanceCallbackArgs(s.Ctx, callbackArgs) + s.Require().NoError(err) + + return RebalanceCallbackTestCase{ + initialState: RebalanceCallbackState{ + hostZone: hostZone, + initialValidators: initialValidators, + }, + validArgs: RebalanceCallbackArgs{ + packet: packet, + ackResponse: &ackResponse, + args: args, + }, + } +} + +func (s *KeeperTestSuite) TestRebalanceCallback_Successful() { + tc := s.SetupRebalanceCallback() + + err := s.App.StakeibcKeeper.RebalanceCallback(s.Ctx, tc.validArgs.packet, tc.validArgs.ackResponse, tc.validArgs.args) + s.Require().NoError(err, "rebalance callback succeeded") + + hz, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, "GAIA") + s.Require().True(found, "host zone found") + + validators := hz.Validators + s.Require().Len(validators, 5, "host zone has 5 validators") + + // TODO: Improve these tests + // These expected values are hard coded - and you have to reference a separate file to see where they come from + s.Require().Equal(int64(217), validators[0].Delegation.Int64(), "validator 1 stake") + s.Require().Equal(int64(500), validators[1].Delegation.Int64(), "validator 2 stake") + s.Require().Equal(int64(96), validators[2].Delegation.Int64(), "validator 3 stake") + s.Require().Equal(int64(387), validators[3].Delegation.Int64(), "validator 4 stake") + s.Require().Equal(int64(400), validators[4].Delegation.Int64(), "validator 5 stake") + + // The delegation changes in progress should have reset to 0 + for i, validator := range validators { + s.Require().Equal(0, int(validator.DelegationChangesInProgress), "validator %d delegation changes in progress", i+1) + } +} + +func (s *KeeperTestSuite) checkDelegationStateIfCallbackFailed() { + hz, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, "GAIA") + s.Require().True(found, "host zone found") + + validators := hz.Validators + s.Require().Len(validators, 5, "host zone has 5 validators") + + s.Require().Equal(int64(100), validators[0].Delegation.Int64(), "validator 1 stake") + s.Require().Equal(int64(500), validators[1].Delegation.Int64(), "validator 2 stake") + s.Require().Equal(int64(200), validators[2].Delegation.Int64(), "validator 3 stake") + s.Require().Equal(int64(400), validators[3].Delegation.Int64(), "validator 4 stake") + s.Require().Equal(int64(400), validators[4].Delegation.Int64(), "validator 5 stake") + + // The delegation changes in progress should have reset to 0 + for i, validator := range validators { + s.Require().Equal(0, int(validator.DelegationChangesInProgress), "validator %d delegation changes in progress", i+1) + } +} + +func (s *KeeperTestSuite) TestRebalanceCallback_Timeout() { + tc := s.SetupRebalanceCallback() + + // Update the ack response to indicate a timeout + invalidArgs := tc.validArgs + invalidArgs.ackResponse.Status = icacallbacktypes.AckResponseStatus_TIMEOUT + + err := s.App.StakeibcKeeper.RebalanceCallback(s.Ctx, invalidArgs.packet, invalidArgs.ackResponse, invalidArgs.args) + s.Require().NoError(err) + s.checkDelegationStateIfCallbackFailed() +} + +func (s *KeeperTestSuite) TestRebalanceCallback_ErrorOnHost() { + tc := s.SetupRebalanceCallback() + + // an error ack means the tx failed on the host + invalidArgs := tc.validArgs + invalidArgs.ackResponse.Status = icacallbacktypes.AckResponseStatus_FAILURE + + err := s.App.StakeibcKeeper.RebalanceCallback(s.Ctx, invalidArgs.packet, invalidArgs.ackResponse, invalidArgs.args) + s.Require().NoError(err) + s.checkDelegationStateIfCallbackFailed() +} + +func (s *KeeperTestSuite) TestRebalanceCallback_WrongCallbackArgs() { + tc := s.SetupRebalanceCallback() + invalidArgs := tc.validArgs + + // random args should cause the callback to fail + invalidCallbackArgs := []byte("random bytes") + + err := s.App.StakeibcKeeper.RebalanceCallback(s.Ctx, invalidArgs.packet, invalidArgs.ackResponse, invalidCallbackArgs) + s.Require().ErrorContains(err, "unable to unmarshal rebalance callback args") +} + +func (s *KeeperTestSuite) TestRebalanceCallback_WrongValidator() { + tc := s.SetupRebalanceCallback() + + callbackArgs := types.RebalanceCallback{ + HostZoneId: HostChainId, + Rebalancings: []*types.Rebalancing{ + { + SrcValidator: "stride_VAL3", + DstValidator: "stride_VAL1", + Amt: sdkmath.NewInt(104), + }, + { + SrcValidator: "stride_VAL4_WRONG", + DstValidator: "stride_VAL1", + Amt: sdkmath.NewInt(13), + }, + }, + } + invalidArgsOne, err := s.App.StakeibcKeeper.MarshalRebalanceCallbackArgs(s.Ctx, callbackArgs) + s.Require().NoError(err) + + callbackArgs = types.RebalanceCallback{ + HostZoneId: HostChainId, + Rebalancings: []*types.Rebalancing{ + { + SrcValidator: "stride_VAL3", + DstValidator: "stride_VAL1_WRONG", + Amt: sdkmath.NewInt(104), + }, + { + SrcValidator: "stride_VAL4", + DstValidator: "stride_VAL1", + Amt: sdkmath.NewInt(13), + }, + }, + } + invalidArgsTwo, err := s.App.StakeibcKeeper.MarshalRebalanceCallbackArgs(s.Ctx, callbackArgs) + s.Require().NoError(err) + + err = s.App.StakeibcKeeper.RebalanceCallback(s.Ctx, tc.validArgs.packet, tc.validArgs.ackResponse, invalidArgsOne) + s.Require().ErrorContains(err, "validator not found") + + err = s.App.StakeibcKeeper.RebalanceCallback(s.Ctx, tc.validArgs.packet, tc.validArgs.ackResponse, invalidArgsTwo) + s.Require().ErrorContains(err, "validator not found") +} diff --git a/x/stakeibc/keeper/icacallbacks_redemption.go b/x/stakeibc/keeper/icacallbacks_redemption.go new file mode 100644 index 00000000000..2c231f0976f --- /dev/null +++ b/x/stakeibc/keeper/icacallbacks_redemption.go @@ -0,0 +1,100 @@ +package keeper + +import ( + "fmt" + + "github.com/osmosis-labs/osmosis/v27/utils" + icacallbackstypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/gogoproto/proto" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" +) + +// Marshalls redemption callback arguments +func (k Keeper) MarshalRedemptionCallbackArgs(ctx sdk.Context, redemptionCallback types.RedemptionCallback) ([]byte, error) { + out, err := proto.Marshal(&redemptionCallback) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("MarshalRedemptionCallbackArgs | %s", err.Error())) + return nil, err + } + return out, nil +} + +// Unmarshalls redemption callback arguments into a RedemptionCallback struct +func (k Keeper) UnmarshalRedemptionCallbackArgs(ctx sdk.Context, redemptionCallback []byte) (types.RedemptionCallback, error) { + unmarshalledRedemptionCallback := types.RedemptionCallback{} + if err := proto.Unmarshal(redemptionCallback, &unmarshalledRedemptionCallback); err != nil { + return unmarshalledRedemptionCallback, errorsmod.Wrap(err, "unable to unmarshal redemption callback args") + } + return unmarshalledRedemptionCallback, nil +} + +// ICA Callback after undelegating +// * If successful: Updates epoch unbonding record status +// * If timeout: Does nothing +// * If failure: Reverts epoch unbonding record status +func (k Keeper) RedemptionCallback(ctx sdk.Context, packet channeltypes.Packet, ackResponse *icacallbackstypes.AcknowledgementResponse, args []byte) error { + // Fetch callback args + redemptionCallback, err := k.UnmarshalRedemptionCallbackArgs(ctx, args) + if err != nil { + return err + } + chainId := redemptionCallback.HostZoneId + k.Logger(ctx).Info(utils.LogICACallbackWithHostZone(chainId, ICACallbackID_Redemption, + "Starting redemption callback for Epoch Unbonding Records: %+v", redemptionCallback.EpochUnbondingRecordIds)) + + // Check for timeout (ack nil) + // No need to reset the unbonding record status since it will get reverted when the channel is restored + if ackResponse.Status == icacallbackstypes.AckResponseStatus_TIMEOUT { + k.Logger(ctx).Error(utils.LogICACallbackStatusWithHostZone(chainId, ICACallbackID_Redemption, + icacallbackstypes.AckResponseStatus_TIMEOUT, packet)) + return nil + } + + // Check for a failed transaction (ack error) + // Reset the unbonding record status upon failure + if ackResponse.Status == icacallbackstypes.AckResponseStatus_FAILURE { + k.Logger(ctx).Error(utils.LogICACallbackStatusWithHostZone(chainId, ICACallbackID_Redemption, + icacallbackstypes.AckResponseStatus_FAILURE, packet)) + + // Reset unbondings record status + err = k.RecordsKeeper.SetHostZoneUnbondingStatus(ctx, chainId, redemptionCallback.EpochUnbondingRecordIds, recordstypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE) + if err != nil { + return err + } + return nil + } + + k.Logger(ctx).Info(utils.LogICACallbackStatusWithHostZone(chainId, ICACallbackID_Redemption, + icacallbackstypes.AckResponseStatus_SUCCESS, packet)) + + // Confirm host zone exists + _, found := k.GetHostZone(ctx, chainId) + if !found { + return errorsmod.Wrapf(sdkerrors.ErrKeyNotFound, "Host zone not found: %s", chainId) + } + + // Upon success, update the unbonding record status to CLAIMABLE and set the number of + // claimable tokens for each epoch unbonding record + for _, epochNumber := range redemptionCallback.EpochUnbondingRecordIds { + hostZoneUnbonding, found := k.RecordsKeeper.GetHostZoneUnbondingByChainId(ctx, epochNumber, chainId) + if !found { + return recordstypes.ErrHostUnbondingRecordNotFound.Wrapf("unbonding record not found for epoch %d and chain %s", + epochNumber, chainId) + } + + hostZoneUnbonding.ClaimableNativeTokens = hostZoneUnbonding.NativeTokenAmount + hostZoneUnbonding.Status = recordstypes.HostZoneUnbonding_CLAIMABLE + if err := k.RecordsKeeper.SetHostZoneUnbondingRecord(ctx, epochNumber, chainId, *hostZoneUnbonding); err != nil { + return err + } + } + + k.Logger(ctx).Info(fmt.Sprintf("[REDEMPTION] completed on %s", chainId)) + return nil +} diff --git a/x/stakeibc/keeper/icacallbacks_redemption_test.go b/x/stakeibc/keeper/icacallbacks_redemption_test.go new file mode 100644 index 00000000000..a7d9e319ac5 --- /dev/null +++ b/x/stakeibc/keeper/icacallbacks_redemption_test.go @@ -0,0 +1,194 @@ +package keeper_test + +import ( + sdkmath "cosmossdk.io/math" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + _ "github.com/stretchr/testify/suite" + + icacallbacktypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + recordtypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +type RedemptionCallbackState struct { + epochUnbondingNumbers []uint64 + userRedemptionRecordIds []string + epochNumber uint64 + nativeTokenAmount sdkmath.Int +} + +type RedemptionCallbackArgs struct { + packet channeltypes.Packet + ackResponse *icacallbacktypes.AcknowledgementResponse + args []byte +} + +type RedemptionCallbackTestCase struct { + initialState RedemptionCallbackState + validArgs RedemptionCallbackArgs +} + +func (s *KeeperTestSuite) SetupRedemptionCallback() RedemptionCallbackTestCase { + epochNumber := uint64(1) + + // individual userRedemptionRecords should be claimable, as long as the host zone unbonding allows for claims + recordId1 := recordtypes.UserRedemptionRecordKeyFormatter(HostChainId, epochNumber, "receiver") + userRedemptionRecord1 := recordtypes.UserRedemptionRecord{ + Id: recordId1, + } + recordId2 := recordtypes.UserRedemptionRecordKeyFormatter(HostChainId, epochNumber, "other_receiver") + userRedemptionRecord2 := recordtypes.UserRedemptionRecord{ + Id: recordId2, + } + + // the hostZoneUnbonding should have HostZoneUnbonding_EXIT_TRANSFER_QUEUE - meaning unbonding has completed, but the tokens + // have not yet been transferred to the redemption account + nativeTokenAmount := sdkmath.NewInt(1000) + hostZoneUnbonding := recordtypes.HostZoneUnbonding{ + HostZoneId: HostChainId, + Status: recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE, + NativeTokenAmount: nativeTokenAmount, + UserRedemptionRecords: []string{recordId1, recordId2}, + } + + epochUnbondingRecord := recordtypes.EpochUnbondingRecord{ + EpochNumber: epochNumber, + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{&hostZoneUnbonding}, + } + hostZone := types.HostZone{ + ChainId: HostChainId, + HostDenom: Atom, + IbcDenom: IbcAtom, + RedemptionRate: sdkmath.LegacyNewDec(1.0), + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, epochUnbondingRecord) + s.App.RecordsKeeper.SetUserRedemptionRecord(s.Ctx, userRedemptionRecord1) + s.App.RecordsKeeper.SetUserRedemptionRecord(s.Ctx, userRedemptionRecord2) + + packet := channeltypes.Packet{} + ackResponse := icacallbacktypes.AcknowledgementResponse{Status: icacallbacktypes.AckResponseStatus_SUCCESS} + callbackArgs := types.RedemptionCallback{ + HostZoneId: HostChainId, + EpochUnbondingRecordIds: []uint64{epochNumber}, + } + callbackArgsBz, err := s.App.StakeibcKeeper.MarshalRedemptionCallbackArgs(s.Ctx, callbackArgs) + s.Require().NoError(err) + + return RedemptionCallbackTestCase{ + initialState: RedemptionCallbackState{ + epochUnbondingNumbers: []uint64{epochNumber}, + userRedemptionRecordIds: []string{userRedemptionRecord1.Id, userRedemptionRecord2.Id}, + epochNumber: epochNumber, + nativeTokenAmount: nativeTokenAmount, + }, + validArgs: RedemptionCallbackArgs{ + packet: packet, + ackResponse: &ackResponse, + args: callbackArgsBz, + }, + } +} + +func (s *KeeperTestSuite) TestRedemptionCallback_Successful() { + tc := s.SetupRedemptionCallback() + initialState := tc.initialState + validArgs := tc.validArgs + + err := s.App.StakeibcKeeper.RedemptionCallback(s.Ctx, validArgs.packet, validArgs.ackResponse, validArgs.args) + s.Require().NoError(err, "redemption callback succeeded") + + for _, epochNumber := range initialState.epochUnbondingNumbers { + // fetch the epoch unbonding record + epochUnbondingRecord, found := s.App.RecordsKeeper.GetEpochUnbondingRecord(s.Ctx, epochNumber) + s.Require().True(found, "epoch unbonding record found") + for _, hzu := range epochUnbondingRecord.HostZoneUnbondings { + // check that the status is CLAIMABLE + if hzu.HostZoneId == HostChainId { + s.Require().Equal(recordtypes.HostZoneUnbonding_CLAIMABLE, hzu.Status, "host zone unbonding status is CLAIMABLE") + s.Require().Equal(hzu.ClaimableNativeTokens, tc.initialState.nativeTokenAmount, "claimable native tokens") + } + } + } +} + +func (s *KeeperTestSuite) checkRedemptionStateIfCallbackFailed(tc RedemptionCallbackTestCase) { + initialState := tc.initialState + for _, epochNumber := range initialState.epochUnbondingNumbers { + // fetch the epoch unbonding record + epochUnbondingRecord, found := s.App.RecordsKeeper.GetEpochUnbondingRecord(s.Ctx, epochNumber) + s.Require().True(found, "epoch unbonding record found") + for _, hzu := range epochUnbondingRecord.HostZoneUnbondings { + // check that the status is NOT CLAIMABLE + s.Require().Equal(recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE, hzu.Status, "host zone unbonding status is NOT CLAIMABLE (EXIT_TRANSFER_QUEUE)") + } + } +} + +func (s *KeeperTestSuite) TestRedemptionCallback_RedemptionCallbackTimeout() { + tc := s.SetupRedemptionCallback() + + // Update the ack response to indicate a timeout + invalidArgs := tc.validArgs + invalidArgs.ackResponse.Status = icacallbacktypes.AckResponseStatus_TIMEOUT + + err := s.App.StakeibcKeeper.RedemptionCallback(s.Ctx, invalidArgs.packet, invalidArgs.ackResponse, invalidArgs.args) + s.Require().NoError(err) + s.checkRedemptionStateIfCallbackFailed(tc) +} + +func (s *KeeperTestSuite) TestRedemptionCallback_RedemptionCallbackErrorOnHost() { + tc := s.SetupRedemptionCallback() + + // an error ack means the tx failed on the host + invalidArgs := tc.validArgs + invalidArgs.ackResponse.Status = icacallbacktypes.AckResponseStatus_FAILURE + + err := s.App.StakeibcKeeper.RedemptionCallback(s.Ctx, invalidArgs.packet, invalidArgs.ackResponse, invalidArgs.args) + s.Require().NoError(err) + s.checkRedemptionStateIfCallbackFailed(tc) +} + +func (s *KeeperTestSuite) TestRedemptionCallback_WrongCallbackArgs() { + tc := s.SetupRedemptionCallback() + invalidArgs := tc.validArgs + + // random args should cause the callback to fail + invalidCallbackArgs := []byte("random bytes") + + err := s.App.StakeibcKeeper.RedemptionCallback(s.Ctx, invalidArgs.packet, invalidArgs.ackResponse, invalidCallbackArgs) + s.Require().ErrorContains(err, "unable to unmarshal redemption callback args: unexpected EOF") + s.checkRedemptionStateIfCallbackFailed(tc) +} + +func (s *KeeperTestSuite) TestRedemptionCallback_EpochUnbondingRecordNotFound() { + tc := s.SetupRedemptionCallback() + + // Update the callbacks args to have a different epoch number + // (So that epoch unbonding record is not found) + callbackArgs := types.RedemptionCallback{ + HostZoneId: HostChainId, + EpochUnbondingRecordIds: []uint64{tc.initialState.epochNumber + 1}, + } + invalidCallbackArgs, err := s.App.StakeibcKeeper.MarshalRedemptionCallbackArgs(s.Ctx, callbackArgs) + s.Require().NoError(err) + + err = s.App.StakeibcKeeper.RedemptionCallback(s.Ctx, tc.validArgs.packet, tc.validArgs.ackResponse, invalidCallbackArgs) + s.Require().ErrorContains(err, "host zone unbonding record not found on epoch unbonding record") + s.checkRedemptionStateIfCallbackFailed(tc) +} + +func (s *KeeperTestSuite) TestRedemptionCallback_HostZoneUnbondingNotFound() { + tc := s.SetupRedemptionCallback() + + // remove the hzu from the epoch unbonding record + epochUnbondingRecord, found := s.App.RecordsKeeper.GetEpochUnbondingRecord(s.Ctx, tc.initialState.epochNumber) + s.Require().True(found) + epochUnbondingRecord.HostZoneUnbondings = []*recordtypes.HostZoneUnbonding{} + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, epochUnbondingRecord) + + err := s.App.StakeibcKeeper.RedemptionCallback(s.Ctx, tc.validArgs.packet, tc.validArgs.ackResponse, tc.validArgs.args) + s.Require().ErrorContains(err, "host zone unbonding record not found on epoch unbonding record") + s.checkRedemptionStateIfCallbackFailed(tc) +} diff --git a/x/stakeibc/keeper/icacallbacks_reinvest.go b/x/stakeibc/keeper/icacallbacks_reinvest.go new file mode 100644 index 00000000000..379db716ba6 --- /dev/null +++ b/x/stakeibc/keeper/icacallbacks_reinvest.go @@ -0,0 +1,136 @@ +package keeper + +import ( + "fmt" + "time" + + "github.com/cosmos/cosmos-sdk/types/bech32" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/migrations/v3" + + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + + "github.com/osmosis-labs/osmosis/v27/utils" + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + icacallbackstypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/gogoproto/proto" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" +) + +// Marshalls reinvest callback arguments +func (k Keeper) MarshalReinvestCallbackArgs(ctx sdk.Context, reinvestCallback types.ReinvestCallback) ([]byte, error) { + out, err := proto.Marshal(&reinvestCallback) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("MarshalReinvestCallbackArgs %v", err.Error())) + return nil, err + } + return out, nil +} + +// Unmarshalls reinvest callback arguments into a ReinvestCallback struct +func (k Keeper) UnmarshalReinvestCallbackArgs(ctx sdk.Context, reinvestCallback []byte) (*types.ReinvestCallback, error) { + unmarshalledReinvestCallback := types.ReinvestCallback{} + if err := proto.Unmarshal(reinvestCallback, &unmarshalledReinvestCallback); err != nil { + return nil, errorsmod.Wrap(err, "unable to unmarshal reinvest callback args") + } + return &unmarshalledReinvestCallback, nil +} + +// ICA Callback after reinvestment +// +// If successful: +// * Creates a new DepositRecord with the reinvestment amount +// * Issues an ICQ to query the rewards balance +// If timeout/failure: +// * Does nothing +func (k Keeper) ReinvestCallback(ctx sdk.Context, packet channeltypes.Packet, ackResponse *icacallbackstypes.AcknowledgementResponse, args []byte) error { + // Fetch callback args + reinvestCallback, err := k.UnmarshalReinvestCallbackArgs(ctx, args) + if err != nil { + return err + } + chainId := reinvestCallback.HostZoneId + k.Logger(ctx).Info(utils.LogICACallbackWithHostZone(chainId, ICACallbackID_Reinvest, "Starting reinvest callback")) + + // Grab the associated host zone + hostZone, found := k.GetHostZone(ctx, chainId) + if !found { + return errorsmod.Wrapf(types.ErrHostZoneNotFound, "host zone %s not found", chainId) + } + + // Check for timeout (ack nil) + // No action is necessary on a timeout + if ackResponse.Status == icacallbackstypes.AckResponseStatus_TIMEOUT { + k.Logger(ctx).Error(utils.LogICACallbackStatusWithHostZone(chainId, ICACallbackID_Reinvest, + icacallbackstypes.AckResponseStatus_TIMEOUT, packet)) + return nil + } + + // Check for a failed transaction (ack error) + // No action is necessary on a failure + if ackResponse.Status == icacallbackstypes.AckResponseStatus_FAILURE { + k.Logger(ctx).Error(utils.LogICACallbackStatusWithHostZone(chainId, ICACallbackID_Reinvest, + icacallbackstypes.AckResponseStatus_FAILURE, packet)) + return nil + } + + k.Logger(ctx).Info(utils.LogICACallbackStatusWithHostZone(chainId, ICACallbackID_Reinvest, + icacallbackstypes.AckResponseStatus_SUCCESS, packet)) + + // Get the current stride epoch number + strideEpochTracker, found := k.GetEpochTracker(ctx, epochtypes.STRIDE_EPOCH) + if !found { + k.Logger(ctx).Error("failed to find epoch") + return errorsmod.Wrapf(types.ErrInvalidLengthEpochTracker, "no number for epoch (%s)", epochtypes.STRIDE_EPOCH) + } + + // Create a new deposit record so that rewards are reinvested + record := recordstypes.DepositRecord{ + Amount: reinvestCallback.ReinvestAmount.Amount, + Denom: reinvestCallback.ReinvestAmount.Denom, + HostZoneId: reinvestCallback.HostZoneId, + Status: recordstypes.DepositRecord_DELEGATION_QUEUE, + Source: recordstypes.DepositRecord_WITHDRAWAL_ICA, + DepositEpochNumber: strideEpochTracker.EpochNumber, + } + k.RecordsKeeper.AppendDepositRecord(ctx, record) + + // Encode the fee account address for the query request + // The query request consists of the fee account address and denom + if hostZone.FeeIcaAddress == "" { + return errorsmod.Wrapf(types.ErrICAAccountNotFound, "no fee account found for %s", chainId) + } + _, feeAddressBz, err := bech32.DecodeAndConvert(hostZone.FeeIcaAddress) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "invalid fee account address, could not decode (%s)", err.Error()) + } + queryData := append(banktypes.CreateAccountBalancesPrefix(feeAddressBz), []byte(hostZone.HostDenom)...) + + // Submit an ICQ for the rewards balance in the fee account + k.Logger(ctx).Info(utils.LogICACallbackWithHostZone(chainId, ICACallbackID_Reinvest, "Submitting ICQ for fee account balance")) + + timeout := time.Unix(0, utils.UintToInt(strideEpochTracker.NextEpochStartTime)) + timeoutDuration := timeout.Sub(ctx.BlockTime()) + + query := icqtypes.Query{ + ChainId: chainId, + ConnectionId: hostZone.ConnectionId, + QueryType: icqtypes.BANK_STORE_QUERY_WITH_PROOF, + RequestData: queryData, + CallbackModule: types.ModuleName, + CallbackId: ICQCallbackID_FeeBalance, + TimeoutDuration: timeoutDuration, + TimeoutPolicy: icqtypes.TimeoutPolicy_REJECT_QUERY_RESPONSE, + } + if err := k.InterchainQueryKeeper.SubmitICQRequest(ctx, query, false); err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Error submitting ICQ for fee balance, error %s", err.Error())) + return err + } + + return nil +} diff --git a/x/stakeibc/keeper/icacallbacks_reinvest_test.go b/x/stakeibc/keeper/icacallbacks_reinvest_test.go new file mode 100644 index 00000000000..05acdc00f9a --- /dev/null +++ b/x/stakeibc/keeper/icacallbacks_reinvest_test.go @@ -0,0 +1,236 @@ +package keeper_test + +import ( + "time" + + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + _ "github.com/stretchr/testify/suite" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + + icacallbacktypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + recordtypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + stakeibckeeper "github.com/osmosis-labs/osmosis/v27/x/stakeibc/keeper" + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" + stakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +type ReinvestCallbackState struct { + hostZone stakeibctypes.HostZone + reinvestAmt sdkmath.Int + callbackArgs types.ReinvestCallback + depositRecord recordtypes.DepositRecord + durationUntilNextEpoch time.Duration +} + +type ReinvestCallbackArgs struct { + packet channeltypes.Packet + ackResponse *icacallbacktypes.AcknowledgementResponse + args []byte +} + +type ReinvestCallbackTestCase struct { + initialState ReinvestCallbackState + validArgs ReinvestCallbackArgs +} + +func (s *KeeperTestSuite) SetupReinvestCallback() ReinvestCallbackTestCase { + reinvestAmt := sdkmath.NewInt(1_000) + feeAddress := apptesting.CreateRandomAccounts(1)[0].String() // must be valid bech32 address + + hostZone := stakeibctypes.HostZone{ + ChainId: HostChainId, + HostDenom: Atom, + IbcDenom: IbcAtom, + RedemptionRate: sdkmath.LegacyNewDec(1.0), + ConnectionId: ibctesting.FirstConnectionID, + FeeIcaAddress: feeAddress, + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + expectedNewDepositRecord := recordtypes.DepositRecord{ + Id: 0, + DepositEpochNumber: 1, + HostZoneId: HostChainId, + Amount: reinvestAmt, + Status: recordtypes.DepositRecord_DELEGATION_QUEUE, + Source: recordtypes.DepositRecord_WITHDRAWAL_ICA, + } + + durationUntilNextEpoch := time.Minute + blockTime := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC) + s.Ctx = s.Ctx.WithBlockTime(blockTime) + + epochTracker := stakeibctypes.EpochTracker{ + EpochIdentifier: epochtypes.STRIDE_EPOCH, + EpochNumber: 1, + NextEpochStartTime: uint64(blockTime.Add(durationUntilNextEpoch).UnixNano()), + } + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, epochTracker) + + packet := channeltypes.Packet{} + ackResponse := icacallbacktypes.AcknowledgementResponse{Status: icacallbacktypes.AckResponseStatus_SUCCESS} + callbackArgs := types.ReinvestCallback{ + HostZoneId: HostChainId, + ReinvestAmount: sdk.NewCoin(Atom, reinvestAmt), + } + args, err := s.App.StakeibcKeeper.MarshalReinvestCallbackArgs(s.Ctx, callbackArgs) + s.Require().NoError(err) + + // Mock the latest client height for the ICQ submission + s.MockClientLatestHeight(1) + + return ReinvestCallbackTestCase{ + initialState: ReinvestCallbackState{ + hostZone: hostZone, + reinvestAmt: reinvestAmt, + callbackArgs: callbackArgs, + depositRecord: expectedNewDepositRecord, + durationUntilNextEpoch: durationUntilNextEpoch, + }, + validArgs: ReinvestCallbackArgs{ + packet: packet, + ackResponse: &ackResponse, + args: args, + }, + } +} + +func (s *KeeperTestSuite) TestReinvestCallback_Successful() { + tc := s.SetupReinvestCallback() + initialState := tc.initialState + expectedRecord := initialState.depositRecord + validArgs := tc.validArgs + + err := s.App.StakeibcKeeper.ReinvestCallback(s.Ctx, validArgs.packet, validArgs.ackResponse, validArgs.args) + s.Require().NoError(err) + + // Confirm deposit record has been added + records := s.App.RecordsKeeper.GetAllDepositRecord(s.Ctx) + s.Require().Len(records, 1, "number of deposit records") + record := records[0] + + // Confirm deposit record fields match those expected + s.Require().Equal(int64(expectedRecord.Id), int64(record.Id), "deposit record Id") + s.Require().Equal(expectedRecord.Amount, record.Amount, "deposit record Amount") + s.Require().Equal(expectedRecord.HostZoneId, record.HostZoneId, "deposit record HostZoneId") + s.Require().Equal(expectedRecord.Status, record.Status, "deposit record Status") + s.Require().Equal(expectedRecord.Source, record.Source, "deposit record Source") + s.Require().Equal(int64(expectedRecord.DepositEpochNumber), int64(record.DepositEpochNumber), "deposit record DepositEpochNumber") + + // Confirm an interchain query was submitted for the fee account balance + allQueries := s.App.InterchainqueryKeeper.AllQueries(s.Ctx) + s.Require().Len(allQueries, 1, "should be 1 query submitted") + + query := allQueries[0] + s.Require().Equal(stakeibckeeper.ICQCallbackID_FeeBalance, query.CallbackId, "query callback ID") + s.Require().Equal(HostChainId, query.ChainId, "query chain ID") + s.Require().Equal(ibctesting.FirstConnectionID, query.ConnectionId, "query connection ID") + s.Require().Equal(icqtypes.BANK_STORE_QUERY_WITH_PROOF, query.QueryType, "query type") + s.Require().Equal(tc.initialState.durationUntilNextEpoch, query.TimeoutDuration, "query timeout duration") +} + +func (s *KeeperTestSuite) checkReinvestStateIfCallbackFailed() { + // Confirm deposit record has not been added + records := s.App.RecordsKeeper.GetAllDepositRecord(s.Ctx) + s.Require().Len(records, 0, "number of deposit records") +} + +func (s *KeeperTestSuite) TestReinvestCallback_ReinvestCallbackTimeout() { + tc := s.SetupReinvestCallback() + + // Update the ack response to indicate a timeout + invalidArgs := tc.validArgs + invalidArgs.ackResponse.Status = icacallbacktypes.AckResponseStatus_TIMEOUT + + err := s.App.StakeibcKeeper.ReinvestCallback(s.Ctx, invalidArgs.packet, invalidArgs.ackResponse, invalidArgs.args) + s.Require().NoError(err) + s.checkReinvestStateIfCallbackFailed() +} + +func (s *KeeperTestSuite) TestReinvestCallback_ReinvestCallbackErrorOnHost() { + tc := s.SetupReinvestCallback() + + // an error ack means the tx failed on the host + invalidArgs := tc.validArgs + invalidArgs.ackResponse.Status = icacallbacktypes.AckResponseStatus_FAILURE + + err := s.App.StakeibcKeeper.ReinvestCallback(s.Ctx, invalidArgs.packet, invalidArgs.ackResponse, invalidArgs.args) + s.Require().NoError(err) + s.checkReinvestStateIfCallbackFailed() +} + +func (s *KeeperTestSuite) TestReinvestCallback_WrongCallbackArgs() { + tc := s.SetupReinvestCallback() + invalidArgs := tc.validArgs + + // random args should cause the callback to fail + invalidCallbackArgs := []byte("random bytes") + + err := s.App.StakeibcKeeper.ReinvestCallback(s.Ctx, invalidArgs.packet, invalidArgs.ackResponse, invalidCallbackArgs) + s.Require().ErrorContains(err, "unable to unmarshal reinvest callback args") +} + +func (s *KeeperTestSuite) TestReinvestCallback_HostZoneNotFound() { + tc := s.SetupReinvestCallback() + + // Remove the host zone + s.App.StakeibcKeeper.RemoveHostZone(s.Ctx, HostChainId) + + err := s.App.StakeibcKeeper.ReinvestCallback(s.Ctx, tc.validArgs.packet, tc.validArgs.ackResponse, tc.validArgs.args) + s.Require().ErrorContains(err, "host zone GAIA not found: host zone not found") +} + +func (s *KeeperTestSuite) TestReinvestCallback_NoFeeAccount() { + tc := s.SetupReinvestCallback() + + // Remove the fee account + badHostZone := tc.initialState.hostZone + badHostZone.FeeIcaAddress = "" + s.App.StakeibcKeeper.SetHostZone(s.Ctx, badHostZone) + + err := s.App.StakeibcKeeper.ReinvestCallback(s.Ctx, tc.validArgs.packet, tc.validArgs.ackResponse, tc.validArgs.args) + s.Require().EqualError(err, "no fee account found for GAIA: ICA acccount not found on host zone") +} + +func (s *KeeperTestSuite) TestReinvestCallback_InvalidFeeAccountAddress() { + tc := s.SetupReinvestCallback() + + // Remove the fee account + badHostZone := tc.initialState.hostZone + badHostZone.FeeIcaAddress = "invalid_fee_account" + s.App.StakeibcKeeper.SetHostZone(s.Ctx, badHostZone) + + err := s.App.StakeibcKeeper.ReinvestCallback(s.Ctx, tc.validArgs.packet, tc.validArgs.ackResponse, tc.validArgs.args) + s.Require().ErrorContains(err, "invalid fee account address, could not decode") +} + +func (s *KeeperTestSuite) TestReinvestCallback_MissingEpoch() { + tc := s.SetupReinvestCallback() + invalidArgs := tc.validArgs + + // Remove epoch tracker + s.App.StakeibcKeeper.RemoveEpochTracker(s.Ctx, epochtypes.STRIDE_EPOCH) + + err := s.App.StakeibcKeeper.ReinvestCallback(s.Ctx, invalidArgs.packet, invalidArgs.ackResponse, invalidArgs.args) + s.Require().ErrorContains(err, "no number for epoch (stride_epoch)") +} + +func (s *KeeperTestSuite) TestReinvestCallback_FailedToSubmitQuery() { + tc := s.SetupReinvestCallback() + invalidArgs := tc.validArgs + + // Remove the connection ID from the host zone so that the query submission fails + badHostZone := tc.initialState.hostZone + badHostZone.ConnectionId = "" + s.App.StakeibcKeeper.SetHostZone(s.Ctx, badHostZone) + + err := s.App.StakeibcKeeper.ReinvestCallback(s.Ctx, invalidArgs.packet, invalidArgs.ackResponse, invalidArgs.args) + s.Require().EqualError(err, "connection-id cannot be empty: invalid interchain query request") +} diff --git a/x/stakeibc/keeper/icacallbacks_undelegate.go b/x/stakeibc/keeper/icacallbacks_undelegate.go new file mode 100644 index 00000000000..cddc41b23ea --- /dev/null +++ b/x/stakeibc/keeper/icacallbacks_undelegate.go @@ -0,0 +1,303 @@ +package keeper + +import ( + sdkmath "cosmossdk.io/math" + + "github.com/osmosis-labs/osmosis/v27/utils" + icacallbackstypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/cosmos/gogoproto/proto" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" +) + +// ICA Callback after undelegating +// +// If successful: +// * Updates epoch unbonding record status +// * Records delegation changes on the host zone and validators, +// * Burns stTokens +// If timeout: +// * Does nothing +// If failure: +// * Sets epoch unbonding record status to RETRY +func (k Keeper) UndelegateCallback(ctx sdk.Context, packet channeltypes.Packet, ackResponse *icacallbackstypes.AcknowledgementResponse, args []byte) error { + // Fetch callback args + var undelegateCallback types.UndelegateCallback + if err := proto.Unmarshal(args, &undelegateCallback); err != nil { + return errorsmod.Wrap(err, "unable to unmarshal undelegate callback args") + } + + // Fetch the relevant host zone + chainId := undelegateCallback.HostZoneId + k.Logger(ctx).Info(utils.LogICACallbackWithHostZone(chainId, ICACallbackID_Undelegate, + "Starting undelegate callback for Epoch Unbonding Records: %+v", undelegateCallback.EpochUnbondingRecordIds)) + + hostZone, found := k.GetHostZone(ctx, undelegateCallback.HostZoneId) + if !found { + return errorsmod.Wrapf(sdkerrors.ErrKeyNotFound, "Host zone not found: %s", undelegateCallback.HostZoneId) + } + + // Mark that the ICA completed on the validators and host zone unbonding records + if err := k.MarkUndelegationAckReceived(ctx, hostZone, undelegateCallback); err != nil { + return err + } + + // Check for timeout (ack nil) + // No need to reset the unbonding record status since it will get reverted when the channel is restored + if ackResponse.Status == icacallbackstypes.AckResponseStatus_TIMEOUT { + k.Logger(ctx).Error(utils.LogICACallbackStatusWithHostZone(chainId, ICACallbackID_Undelegate, + icacallbackstypes.AckResponseStatus_TIMEOUT, packet)) + return nil + } + + // Check for a failed transaction (ack error) + // Set the status to RETRY_QUEUE if it fails + if ackResponse.Status == icacallbackstypes.AckResponseStatus_FAILURE { + k.Logger(ctx).Error(utils.LogICACallbackStatusWithHostZone(chainId, ICACallbackID_Undelegate, + icacallbackstypes.AckResponseStatus_FAILURE, packet)) + + // Set any IN_PROGRESS records to RETRY_QUEUE + return k.HandleFailedUndelegation(ctx, chainId, undelegateCallback.EpochUnbondingRecordIds) + } + + k.Logger(ctx).Info(utils.LogICACallbackStatusWithHostZone(chainId, ICACallbackID_Undelegate, + icacallbackstypes.AckResponseStatus_SUCCESS, packet)) + + // Calculate the native tokens that were unbonded from the batch and get the latest + // completion time from the ack response + nativeTokensUnbonded := k.CalculateTotalUnbondedInBatch(undelegateCallback.SplitUndelegations) + unbondingTime, err := k.GetLatestUnbondingCompletionTime(ctx, ackResponse.MsgResponses) + if err != nil { + return err + } + + // Update delegation balances on the validators and host zone + err = k.UpdateDelegationBalances(ctx, hostZone, undelegateCallback) + if err != nil { + return err + } + + // Update the accounting on the host zone unbondings + stTokensToBurn, err := k.UpdateHostZoneUnbondingsAfterUndelegation( + ctx, + chainId, + undelegateCallback.EpochUnbondingRecordIds, + nativeTokensUnbonded, + unbondingTime, + ) + if err != nil { + return err + } + + // Burn the stTokens from the batch + if err := k.BurnStTokensAfterUndelegation(ctx, hostZone, stTokensToBurn); err != nil { + return err + } + + return nil +} + +// Regardless of failure/success/timeout, indicate that this ICA has completed on each validator +// on the host zone, and on the epoch unbonding record +func (k Keeper) MarkUndelegationAckReceived(ctx sdk.Context, hostZone types.HostZone, undelegateCallback types.UndelegateCallback) error { + // Indicate that this ICA has completed on each validator + for _, splitDelegation := range undelegateCallback.SplitUndelegations { + if err := k.DecrementValidatorDelegationChangesInProgress(&hostZone, splitDelegation.Validator); err != nil { + return err + } + } + k.SetHostZone(ctx, hostZone) + + // Indicate that the ICA has completed on the epoch unbonding record + for _, epochNumber := range undelegateCallback.EpochUnbondingRecordIds { + hostZoneUnbonding, found := k.RecordsKeeper.GetHostZoneUnbondingByChainId(ctx, epochNumber, hostZone.ChainId) + if !found { + return recordstypes.ErrHostUnbondingRecordNotFound.Wrapf("epoch number %d, chain %s", epochNumber, hostZone.ChainId) + } + + if hostZoneUnbonding.UndelegationTxsInProgress == 0 { + return types.ErrInvalidUndelegationsInProgress.Wrapf("undelegation changes in progress is already 0 and can't be decremented") + } + hostZoneUnbonding.UndelegationTxsInProgress -= 1 + + if err := k.RecordsKeeper.SetHostZoneUnbondingRecord(ctx, epochNumber, hostZone.ChainId, *hostZoneUnbonding); err != nil { + return err + } + } + + return nil +} + +// If the undelegation failed, set the unbonding status to RETRY_QUEUE, but only +// for records that are currently in status UNBONDING_IN_PROGRESS +// There may be some epoch numbers in this batch from records that have already had a full unbonding +// and have moved onto status EXIT_TRANSFER_QUEUE +func (k Keeper) HandleFailedUndelegation(ctx sdk.Context, chainId string, epochNumbers []uint64) error { + for _, epochNumber := range epochNumbers { + hostZoneUnbonding, found := k.RecordsKeeper.GetHostZoneUnbondingByChainId(ctx, epochNumber, chainId) + if !found { + return errorsmod.Wrapf(recordstypes.ErrHostUnbondingRecordNotFound, "epoch number %d, chain %s", + epochNumber, chainId) + } + + if hostZoneUnbonding.Status != recordstypes.HostZoneUnbonding_UNBONDING_IN_PROGRESS { + continue + } + hostZoneUnbonding.Status = recordstypes.HostZoneUnbonding_UNBONDING_RETRY_QUEUE + + err := k.RecordsKeeper.SetHostZoneUnbondingRecord(ctx, epochNumber, chainId, *hostZoneUnbonding) + if err != nil { + return err + } + } + return nil +} + +// Decrement the delegation field on the host zone and each validator's delegations after a successful unbonding ICA +func (k Keeper) UpdateDelegationBalances(ctx sdk.Context, hostZone types.HostZone, undelegateCallback types.UndelegateCallback) error { + // Undelegate from each validator and update host zone staked balance, if successful + for _, undelegation := range undelegateCallback.SplitUndelegations { + err := k.AddDelegationToValidator(ctx, &hostZone, undelegation.Validator, undelegation.NativeTokenAmount.Neg(), ICACallbackID_Undelegate) + if err != nil { + return err + } + } + k.SetHostZone(ctx, hostZone) + return nil +} + +// Calculates the tokens unbonded for this batch by summing from each validator +func (k Keeper) CalculateTotalUnbondedInBatch(undelegations []*types.SplitUndelegation) (nativeTokens sdkmath.Int) { + nativeTokens = sdkmath.ZeroInt() + for _, undelegation := range undelegations { + nativeTokens = nativeTokens.Add(undelegation.NativeTokenAmount) + } + return nativeTokens +} + +// Get the latest completion time across each MsgUndelegate in the ICA transaction +// The time is later stored on the unbonding record +func (k Keeper) GetLatestUnbondingCompletionTime(ctx sdk.Context, msgResponses [][]byte) (latestCompletionTime uint64, err error) { + for _, msgResponse := range msgResponses { + var undelegateResponse stakingtypes.MsgUndelegateResponse + if err := proto.Unmarshal(msgResponse, &undelegateResponse); err != nil { + return 0, errorsmod.Wrapf(types.ErrUnmarshalFailure, "Unable to unmarshal undelegation tx response: %s", err.Error()) + } + + responseCompletionTime := utils.IntToUint(undelegateResponse.CompletionTime.UnixNano()) + if responseCompletionTime > latestCompletionTime { + latestCompletionTime = responseCompletionTime + } + } + + if latestCompletionTime == 0 { + return 0, errorsmod.Wrapf(types.ErrInvalidPacketCompletionTime, "Invalid completion time 0 from txMsg") + } + return latestCompletionTime, nil +} + +// Updates the host zone unbonding records after a successful undelegation batch +// The StTokensToBurn and the NativeTokensToUnbond amounts on the records are +// decremented in a cascading fashion starting from the earliest record +// The latest completion times is also set on each record if the time from the +// batch is later than what's currently on the record +func (k Keeper) UpdateHostZoneUnbondingsAfterUndelegation( + ctx sdk.Context, + chainId string, + epochUnbondingRecordIds []uint64, + totalNativeTokensUnbonded sdkmath.Int, + unbondingTime uint64, +) (totalStTokensToBurn sdkmath.Int, err error) { + // As we process the accounting changes, keep track of the stTokens that should be burned later + totalStTokensToBurn = sdkmath.ZeroInt() + + // Loop each epoch unbonding record starting from the earliest + for _, epochNumber := range epochUnbondingRecordIds { + hostZoneUnbonding, found := k.RecordsKeeper.GetHostZoneUnbondingByChainId(ctx, epochNumber, chainId) + if !found { + return totalStTokensToBurn, errorsmod.Wrapf(recordstypes.ErrHostUnbondingRecordNotFound, + "host zone unbonding not found for epoch %d and %s", epochNumber, chainId) + } + + // If the record was already completed by a previous callback, continue to the next record + if hostZoneUnbonding.Status == recordstypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE { + continue + } + + // Determine the native amount to decrement from the record, capping at the amount in the record + // Also decrement the total for the next loop + nativeTokensUnbonded := sdkmath.MinInt(hostZoneUnbonding.NativeTokensToUnbond, totalNativeTokensUnbonded) + hostZoneUnbonding.NativeTokensToUnbond = hostZoneUnbonding.NativeTokensToUnbond.Sub(nativeTokensUnbonded) + totalNativeTokensUnbonded = totalNativeTokensUnbonded.Sub(nativeTokensUnbonded) + + // Calculate the relative stToken portion using the implied RR from the record + // If the native amount has already been decremented to 0, just use the full stToken remainder + // from the record to prevent any precision error + var stTokensToBurn sdkmath.Int + if hostZoneUnbonding.NativeTokensToUnbond.IsZero() { + stTokensToBurn = hostZoneUnbonding.StTokensToBurn + } else { + impliedRedemptionRate := sdkmath.LegacyNewDecFromInt(hostZoneUnbonding.NativeTokenAmount).Quo(sdkmath.LegacyNewDecFromInt(hostZoneUnbonding.StTokenAmount)) + stTokensToBurn = sdkmath.LegacyNewDecFromInt(nativeTokensUnbonded).Quo(impliedRedemptionRate).TruncateInt() + } + + k.Logger(ctx).Info(utils.LogICACallbackWithHostZone(chainId, ICACallbackID_Undelegate, + "Epoch Unbonding Record: %d - Native Unbonded: %v, StTokens Burned: %v", + epochNumber, nativeTokensUnbonded, stTokensToBurn)) + + // Decrement st amount on the record and increment the total + hostZoneUnbonding.StTokensToBurn = hostZoneUnbonding.StTokensToBurn.Sub(stTokensToBurn) + totalStTokensToBurn = totalStTokensToBurn.Add(stTokensToBurn) + + // If there are no more tokens to unbond or burn after this batch, iterate the record to the next status + if hostZoneUnbonding.StTokensToBurn.IsZero() && hostZoneUnbonding.NativeTokensToUnbond.IsZero() { + hostZoneUnbonding.Status = recordstypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE + } + + // Update the unbonding time if the time from this batch is later than what's on the record + if unbondingTime > hostZoneUnbonding.UnbondingTime { + hostZoneUnbonding.UnbondingTime = unbondingTime + + k.Logger(ctx).Info(utils.LogICACallbackWithHostZone(chainId, ICACallbackID_Undelegate, + "Epoch Unbonding Record: %d - Setting unbonding time to %d", epochNumber, unbondingTime)) + } + + // Persist the record changes + if err := k.RecordsKeeper.SetHostZoneUnbondingRecord(ctx, epochNumber, chainId, *hostZoneUnbonding); err != nil { + return totalStTokensToBurn, err + } + } + return totalStTokensToBurn, nil +} + +// Burn stTokens after they've been unbonded +func (k Keeper) BurnStTokensAfterUndelegation(ctx sdk.Context, hostZone types.HostZone, stTokenBurnAmount sdkmath.Int) error { + // Build the coin from the stDenom on the host zone + stCoinDenom := types.StAssetDenomFromHostZoneDenom(hostZone.HostDenom) + stCoin := sdk.NewCoin(stCoinDenom, stTokenBurnAmount) + + // Send the stTokens from the host zone module account to the stakeibc module account + depositAddress, err := sdk.AccAddressFromBech32(hostZone.DepositAddress) + if err != nil { + return errorsmod.Wrapf(err, "unable to convert deposit address") + } + err = k.bankKeeper.SendCoinsFromAccountToModule(ctx, depositAddress, types.ModuleName, sdk.NewCoins(stCoin)) + if err != nil { + return errorsmod.Wrapf(err, "unable to send sttokens from deposit account for burning") + } + + // Finally burn the stTokens + err = k.bankKeeper.BurnCoins(ctx, types.ModuleName, sdk.NewCoins(stCoin)) + if err != nil { + return errorsmod.Wrapf(err, "unable to burn %v%s tokens", stTokenBurnAmount, stCoinDenom) + } + k.Logger(ctx).Info(utils.LogICACallbackWithHostZone(hostZone.ChainId, ICACallbackID_Undelegate, + "Total Burned from Batch %v", stCoin)) + return nil +} diff --git a/x/stakeibc/keeper/icacallbacks_undelegate_test.go b/x/stakeibc/keeper/icacallbacks_undelegate_test.go new file mode 100644 index 00000000000..7887fa7c20b --- /dev/null +++ b/x/stakeibc/keeper/icacallbacks_undelegate_test.go @@ -0,0 +1,810 @@ +package keeper_test + +import ( + "time" + + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/cosmos/gogoproto/proto" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + _ "github.com/stretchr/testify/suite" + + icacallbacktypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + recordtypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +type UndelegateCallbackState struct { + totalDelegations sdkmath.Int + val1Bal sdkmath.Int + val2Bal sdkmath.Int + epochNumbers []uint64 + completionTime time.Time + callbackArgs types.UndelegateCallback + zoneAccountBalance sdkmath.Int +} + +type UndelegateCallbackArgs struct { + packet channeltypes.Packet + ackResponse *icacallbacktypes.AcknowledgementResponse + args []byte +} + +type UndelegateCallbackTestCase struct { + initialState UndelegateCallbackState + validArgs UndelegateCallbackArgs + val1UndelegationAmount sdkmath.Int + val2UndelegationAmount sdkmath.Int + totalUndelegated sdkmath.Int +} + +func (s *KeeperTestSuite) SetupUndelegateCallback() UndelegateCallbackTestCase { + // Test setup is as follows: + // Total Stake: 1_000_000 + // - Val1 Stake: 400_000 + // - Val2 Stake: 600_000 + // Total Unbonded: 500_000 + // - From Val1: 100_000 + // - From Val2: 400_000 + // Deposit Account + // - Initial Balance: 600_000 + // - Final Balance: 100_000 + initialTotalDelegations := sdkmath.NewInt(1_000_000) + initialVal1Delegation := sdkmath.NewInt(400_000) + initialVal2Delegation := sdkmath.NewInt(600_000) + + totalUndelegated := sdkmath.NewInt(500_000) + val1UndelegationAmount := sdkmath.NewInt(100_000) + val2UndelegationAmount := sdkmath.NewInt(400_000) + + initialDepositAccountBalance := sdkmath.NewInt(600_000) + + // Create the host zone and validators + depositAccount := s.TestAccs[0] + validators := []*types.Validator{ + {Address: "val1", Delegation: initialVal1Delegation, DelegationChangesInProgress: 1}, + {Address: "val2", Delegation: initialVal2Delegation, DelegationChangesInProgress: 1}, + } + hostZone := types.HostZone{ + ChainId: HostChainId, + HostDenom: Atom, + Validators: validators, + TotalDelegations: initialTotalDelegations, + DepositAddress: depositAccount.String(), + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + // Create the host zone unbonding records + // Record 1 will not have a unbonding time + // Record 2 will have a unbonding time of 2024-01-02 already + // The callback will have a unbonding time of 2024-01-01 so it should only update record 1 + completionTimeFromThisBatch := time.Date(2024, 1, 1, 0, 0, 0, 0, time.UTC) // 2024-01-01 + completionTimeFromPrevBatch := uint64(time.Date(2024, 1, 2, 0, 0, 0, 0, time.UTC).UnixNano()) // 2024-01-02 + hostZoneUnbonding1 := recordtypes.HostZoneUnbonding{ + HostZoneId: HostChainId, + Status: recordtypes.HostZoneUnbonding_UNBONDING_IN_PROGRESS, + NativeTokenAmount: sdkmath.NewInt(1_000_000), + StTokenAmount: sdkmath.NewInt(1_000_000), // Implied RR: 1.0 + NativeTokensToUnbond: totalUndelegated, + StTokensToBurn: totalUndelegated, + UnbondingTime: uint64(0), + UndelegationTxsInProgress: 1, + } + hostZoneUnbonding2 := recordtypes.HostZoneUnbonding{ + HostZoneId: HostChainId, + Status: recordtypes.HostZoneUnbonding_UNBONDING_IN_PROGRESS, + NativeTokenAmount: sdkmath.NewInt(1_000_000), + StTokenAmount: sdkmath.NewInt(1_000_000), // Implied RR: 2.0 + NativeTokensToUnbond: totalUndelegated, + StTokensToBurn: totalUndelegated, + UnbondingTime: completionTimeFromPrevBatch, + UndelegationTxsInProgress: 1, + } + + // Create the epoch unbonding records with the host zone unbonding records + epochNumbers := []uint64{1, 2} + epochUnbondingRecords := []recordtypes.EpochUnbondingRecord{ + { + EpochNumber: 1, + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{&hostZoneUnbonding1}, + }, + { + EpochNumber: 2, + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{&hostZoneUnbonding2}, + }, + } + for _, epochUnbondingRecord := range epochUnbondingRecords { + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, epochUnbondingRecord) + } + + // Fund the deposit account with stTokens (some of which will be burned) + s.FundAccount(depositAccount, sdk.NewCoin(StAtom, initialDepositAccountBalance)) + + // Mock the ack response + packet := channeltypes.Packet{} + msgsUndelegateResponse := &stakingtypes.MsgUndelegateResponse{ + CompletionTime: completionTimeFromThisBatch, + } + msgsUndelegateResponseBz, err := proto.Marshal(msgsUndelegateResponse) + s.Require().NoError(err, "no error expected when marshalling undelegate response") + + ackResponse := icacallbacktypes.AcknowledgementResponse{ + Status: icacallbacktypes.AckResponseStatus_SUCCESS, + MsgResponses: [][]byte{msgsUndelegateResponseBz}, + } + + // Build the callback args for each validator + val1SplitDelegation := types.SplitUndelegation{ + Validator: validators[0].Address, + NativeTokenAmount: val1UndelegationAmount, + } + val2SplitDelegation := types.SplitUndelegation{ + Validator: validators[1].Address, + NativeTokenAmount: val2UndelegationAmount, + } + callbackArgs := types.UndelegateCallback{ + HostZoneId: HostChainId, + SplitUndelegations: []*types.SplitUndelegation{ + &val1SplitDelegation, + &val2SplitDelegation, + }, + EpochUnbondingRecordIds: epochNumbers, + } + callbackArgsBz, err := proto.Marshal(&callbackArgs) + s.Require().NoError(err, "callback args unmarshalled") + + return UndelegateCallbackTestCase{ + val1UndelegationAmount: val1UndelegationAmount, + val2UndelegationAmount: val2UndelegationAmount, + totalUndelegated: totalUndelegated, + initialState: UndelegateCallbackState{ + callbackArgs: callbackArgs, + totalDelegations: initialTotalDelegations, + val1Bal: initialVal1Delegation, + val2Bal: initialVal2Delegation, + completionTime: completionTimeFromThisBatch, + zoneAccountBalance: initialDepositAccountBalance, + }, + validArgs: UndelegateCallbackArgs{ + packet: packet, + ackResponse: &ackResponse, + args: callbackArgsBz, + }, + } +} + +func (s *KeeperTestSuite) TestUndelegateCallback_Successful() { + tc := s.SetupUndelegateCallback() + initialState := tc.initialState + validArgs := tc.validArgs + + // Callback + err := s.App.StakeibcKeeper.UndelegateCallback(s.Ctx, validArgs.packet, validArgs.ackResponse, validArgs.args) + s.Require().NoError(err, "undelegate callback succeeds") + + // Check that total delegation has decreased on the host zone + hostZone := s.MustGetHostZone(HostChainId) + expectedTotalDelegation := initialState.totalDelegations.Sub(tc.totalUndelegated) + s.Require().Equal(expectedTotalDelegation, hostZone.TotalDelegations, "total delegation has decreased on the host zone") + + // Check that Delegations on validators have decreased + val1 := hostZone.Validators[0] + val2 := hostZone.Validators[1] + s.Require().Equal(initialState.val1Bal.Sub(tc.val1UndelegationAmount), val1.Delegation, "val1 delegation has decreased") + s.Require().Equal(initialState.val2Bal.Sub(tc.val2UndelegationAmount), val2.Delegation, "val2 delegation has decreased") + + // Check that the number of delegation changes in progress was reset to 0 + s.Require().Equal(0, int(val1.DelegationChangesInProgress), "val1 delegation changes in progress") + s.Require().Equal(0, int(val2.DelegationChangesInProgress), "val2 delegation changes in progress") + + // Check that the host zone unbonding records have been updated + for _, epochNumber := range initialState.epochNumbers { + hzu := s.MustGetHostZoneUnbonding(epochNumber, HostChainId) + s.Require().Equal(initialState.completionTime.UnixNano(), int64(hzu.UnbondingTime), "completion time is set on the hzu") + s.Require().Equal(recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE, hzu.Status, "hzu status is set to EXIT_TRANSFER_QUEUE") + s.Require().Zero(hzu.UndelegationTxsInProgress, "hzu undelegations in progress") + } + + // Confirm stTokens were removed from the deposit account + depositAccount := sdk.MustAccAddressFromBech32(hostZone.DepositAddress) + depositBalance := s.App.BankKeeper.GetBalance(s.Ctx, depositAccount, StAtom).Amount + s.Require().Equal(tc.totalUndelegated, initialState.zoneAccountBalance.Sub(depositBalance), "tokens are burned") +} + +func (s *KeeperTestSuite) checkStateIfUndelegateCallbackFailed(tc UndelegateCallbackTestCase, status icacallbacktypes.AckResponseStatus) { + initialState := tc.initialState + + // Check that total delegation has NOT decreased on the host zone + hostZone := s.MustGetHostZone(HostChainId) + s.Require().Equal(initialState.totalDelegations, hostZone.TotalDelegations, "total delegation has NOT decreased on the host zone") + + // Check that Delegations on validators have NOT decreased + val1 := hostZone.Validators[0] + val2 := hostZone.Validators[1] + s.Require().Equal(initialState.val1Bal, val1.Delegation, "val1 delegation has NOT decreased") + s.Require().Equal(initialState.val2Bal, val2.Delegation, "val2 delegation has NOT decreased") + + // Check that the number of delegation changes in progress was reset + s.Require().Equal(0, int(val1.DelegationChangesInProgress), "val1 delegation changes in progress") + s.Require().Equal(0, int(val2.DelegationChangesInProgress), "val2 delegation changes in progress") + + // Check that the host zone unbonding records have not been updated + expectedStatus := recordtypes.HostZoneUnbonding_UNBONDING_IN_PROGRESS + if status == icacallbacktypes.AckResponseStatus_FAILURE { + expectedStatus = recordtypes.HostZoneUnbonding_UNBONDING_RETRY_QUEUE + } + for _, epochNumber := range initialState.epochNumbers { + hzu := s.MustGetHostZoneUnbonding(epochNumber, HostChainId) + s.Require().Equal(int64(0), int64(hzu.UnbondingTime), "completion time is NOT set on the hzu") + s.Require().Equal(expectedStatus, hzu.Status, "hzu status was not changed") + s.Require().Zero(hzu.UndelegationTxsInProgress, "hzu undelegations in progress") + } + + // Confirm stTokens were NOT burned + depositAccount := sdk.MustAccAddressFromBech32(hostZone.DepositAddress) + depositBalance := s.App.BankKeeper.GetBalance(s.Ctx, depositAccount, StAtom).Amount + s.Require().Equal(initialState.zoneAccountBalance, depositBalance, "tokens were not burned") +} + +func (s *KeeperTestSuite) TestUndelegateCallback_AckTimeout() { + tc := s.SetupUndelegateCallback() + + // Update the ack response to indicate a timeout + invalidArgs := tc.validArgs + invalidArgs.ackResponse.Status = icacallbacktypes.AckResponseStatus_TIMEOUT + + err := s.App.StakeibcKeeper.UndelegateCallback(s.Ctx, invalidArgs.packet, invalidArgs.ackResponse, invalidArgs.args) + s.Require().NoError(err, "undelegate callback succeeds on timeout") + s.checkStateIfUndelegateCallbackFailed(tc, invalidArgs.ackResponse.Status) +} + +func (s *KeeperTestSuite) TestUndelegateCallback_AckFailure() { + tc := s.SetupUndelegateCallback() + + // an error ack means the tx failed on the host + invalidArgs := tc.validArgs + invalidArgs.ackResponse.Status = icacallbacktypes.AckResponseStatus_FAILURE + + err := s.App.StakeibcKeeper.UndelegateCallback(s.Ctx, invalidArgs.packet, invalidArgs.ackResponse, invalidArgs.args) + s.Require().NoError(err, "undelegate callback succeeds with error on host") + s.checkStateIfUndelegateCallbackFailed(tc, invalidArgs.ackResponse.Status) +} + +func (s *KeeperTestSuite) TestUndelegateCallback_WrongCallbackArgs() { + tc := s.SetupUndelegateCallback() + + // random args should cause the callback to fail + invalidCallbackArgs := []byte("random bytes") + + err := s.App.StakeibcKeeper.UndelegateCallback(s.Ctx, tc.validArgs.packet, tc.validArgs.ackResponse, invalidCallbackArgs) + s.Require().ErrorContains(err, "unable to unmarshal undelegate callback args") +} + +func (s *KeeperTestSuite) TestUndelegateCallback_HostNotFound() { + tc := s.SetupUndelegateCallback() + + // remove the host zone from the store to trigger a host not found error + s.App.StakeibcKeeper.RemoveHostZone(s.Ctx, HostChainId) + + err := s.App.StakeibcKeeper.UndelegateCallback(s.Ctx, tc.validArgs.packet, tc.validArgs.ackResponse, tc.validArgs.args) + s.Require().EqualError(err, "Host zone not found: GAIA: key not found") +} + +func (s *KeeperTestSuite) TestMarkUndelegationAckReceived() { + // Setup 3 validators, two of which will have their delegation changes decremented + initialHostZone := types.HostZone{ + ChainId: HostChainId, + Validators: []*types.Validator{ + {Address: "val1", DelegationChangesInProgress: 1}, + {Address: "val2", DelegationChangesInProgress: 2}, + {Address: "val3", DelegationChangesInProgress: 3}, + }, + } + splitUndelegations := []*types.SplitUndelegation{ + {Validator: "val2"}, + {Validator: "val3"}, + } + expectedFinalValidators := []*types.Validator{ + {Address: "val1", DelegationChangesInProgress: 1}, + {Address: "val2", DelegationChangesInProgress: 1}, // decremented + {Address: "val3", DelegationChangesInProgress: 2}, // decremented + } + + // Create three host zone unbonding records, two of which will have the counter decremented + initialHostZoneUnbondings := []recordtypes.HostZoneUnbonding{ + {HostZoneId: HostChainId, UndelegationTxsInProgress: 1}, + {HostZoneId: HostChainId, UndelegationTxsInProgress: 2}, + {HostZoneId: HostChainId, UndelegationTxsInProgress: 3}, + } + allEpochs := []uint64{0, 1, 2} + ackedEpochs := []uint64{1, 2} + for i, epochNumber := range allEpochs { + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, recordtypes.EpochUnbondingRecord{ + EpochNumber: epochNumber, + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{ + &initialHostZoneUnbondings[i], + }, + }) + } + expectedFinalUnbondings := []recordtypes.HostZoneUnbonding{ + {UndelegationTxsInProgress: 1}, + {UndelegationTxsInProgress: 1}, // decremented + {UndelegationTxsInProgress: 2}, // decremented + } + + // Call MarkAckReceived + callback := types.UndelegateCallback{ + SplitUndelegations: splitUndelegations, + EpochUnbondingRecordIds: ackedEpochs, + } + err := s.App.StakeibcKeeper.MarkUndelegationAckReceived(s.Ctx, initialHostZone, callback) + s.Require().NoError(err) + + // Check validator counts against expectations + hostZone := s.MustGetHostZone(HostChainId) + actualValidators := hostZone.Validators + for i, actualValidator := range actualValidators { + expectedValidator := expectedFinalValidators[i] + s.Require().Equal(expectedValidator.DelegationChangesInProgress, + actualValidator.DelegationChangesInProgress, "validator delegation changs in progress") + } + + // Check host zone unbonding counts against expectations + for i, epochNumber := range allEpochs { + actualHostZoneUnbonding := s.MustGetHostZoneUnbonding(epochNumber, HostChainId) + expectedHostZoneUnbonding := expectedFinalUnbondings[i] + s.Require().Equal(expectedHostZoneUnbonding.UndelegationTxsInProgress, + actualHostZoneUnbonding.UndelegationTxsInProgress, "hzu undelegation txs in progress") + } +} + +func (s *KeeperTestSuite) TestHandleFailedUndelegation() { + // Create two HZU records + // One should be in EXIT_TRANSFER_QUEUE (because it's already submitted the full undelegation) + // And the other should be in status IN_PROGRESS + initialStatuses := []recordtypes.HostZoneUnbonding_Status{ + recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE, + recordtypes.HostZoneUnbonding_UNBONDING_IN_PROGRESS, + } + + // After the failed undelegation, only the second record should be set to RETRY_QUEUE + expectedStatuses := []recordtypes.HostZoneUnbonding_Status{ + recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE, + recordtypes.HostZoneUnbonding_UNBONDING_RETRY_QUEUE, + } + + // Create the initial records + epochNumbers := []uint64{} + for i, initialStatus := range initialStatuses { + epochNumbers = append(epochNumbers, uint64(i)) + + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, recordtypes.EpochUnbondingRecord{ + EpochNumber: uint64(i), + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{{ + HostZoneId: HostChainId, + Status: initialStatus, + }}, + }) + } + + // Call HandleFailedUndelegation + err := s.App.StakeibcKeeper.HandleFailedUndelegation(s.Ctx, HostChainId, epochNumbers) + s.Require().NoError(err, "no error expected when handling undelegation") + + // Check that the status of the second record was set to RETRY_QUEUE + for _, epochNumber := range epochNumbers { + hostZoneUnbonding := s.MustGetHostZoneUnbonding(epochNumber, HostChainId) + expectedStatus := expectedStatuses[int(epochNumber)] + s.Require().Equal(expectedStatus, hostZoneUnbonding.Status, "status after update") + } +} + +func (s *KeeperTestSuite) TestUpdateDelegationBalances() { + tc := s.SetupUndelegateCallback() + + // Check that total delegation has NOT decreased on the host zone + hostZone := s.MustGetHostZone(HostChainId) + err := s.App.StakeibcKeeper.UpdateDelegationBalances(s.Ctx, hostZone, tc.initialState.callbackArgs) + s.Require().NoError(err, "update delegation balances succeeds") + + // Check that Delegations on validators have decreased + updatedHostZone := s.MustGetHostZone(HostChainId) + val1 := updatedHostZone.Validators[0] + val2 := updatedHostZone.Validators[1] + s.Require().Equal(val1.Delegation, tc.initialState.val1Bal.Sub(tc.val1UndelegationAmount), "val1 delegation has decreased") + s.Require().Equal(val2.Delegation, tc.initialState.val2Bal.Sub(tc.val2UndelegationAmount), "val2 delegation has decreased") +} + +func (s *KeeperTestSuite) TestCalculateTotalUnbondedInBatch() { + splitUndelegations := []*types.SplitUndelegation{ + {NativeTokenAmount: sdkmath.NewInt(10)}, + {NativeTokenAmount: sdkmath.NewInt(20)}, + {NativeTokenAmount: sdkmath.NewInt(30)}, + } + expectedNativeAmount := sdkmath.NewInt(10 + 20 + 30) + + actualNativeAmount := s.App.StakeibcKeeper.CalculateTotalUnbondedInBatch(splitUndelegations) + s.Require().Equal(expectedNativeAmount, actualNativeAmount, "native total") + + // Zero case + actualNativeAmount = s.App.StakeibcKeeper.CalculateTotalUnbondedInBatch([]*types.SplitUndelegation{}) + s.Require().Zero(actualNativeAmount.Int64(), "native zero") +} + +func (s *KeeperTestSuite) TestGetLatestUnbondingCompletionTime() { + // Construct TxMsgData + firstCompletionTime := time.Now().Add(time.Second * time.Duration(10)) + secondCompletionTime := time.Now().Add(time.Second * time.Duration(20)) + + var err error + msgResponses := make([][]byte, 2) + msgResponses[0], err = proto.Marshal(&stakingtypes.MsgUndelegateResponse{CompletionTime: firstCompletionTime}) + s.Require().NoError(err, "marshal error") + msgResponses[1], err = proto.Marshal(&stakingtypes.MsgUndelegateResponse{CompletionTime: secondCompletionTime}) + s.Require().NoError(err, "marshal error") + + // Check that the second completion time (the later of the two) is returned + latestCompletionTime, err := s.App.StakeibcKeeper.GetLatestUnbondingCompletionTime(s.Ctx, msgResponses) + s.Require().NoError(err, "get latest completion time succeeds") + s.Require().Equal(uint64(secondCompletionTime.UnixNano()), latestCompletionTime, "latest completion time is the second completion time") + + // Calling latest completion time with random message responses will provoke an unmarshal failure + msgResponses = [][]byte{{1}, {2}, {3}} + _, err = s.App.StakeibcKeeper.GetLatestUnbondingCompletionTime(s.Ctx, msgResponses) + s.Require().ErrorContains(err, "Unable to unmarshal undelegation tx response") + + // Calling latest completion time with an no msg responses will cause the completion time to be 0 + msgResponses = [][]byte{} + _, err = s.App.StakeibcKeeper.GetLatestUnbondingCompletionTime(s.Ctx, msgResponses) + s.Require().ErrorContains(err, "invalid packet completion time") +} + +func (s *KeeperTestSuite) TestUpdateHostZoneUnbondingsAfterUndelegation() { + // Abbreviated struct and statues for readability + type HostZoneUnbonding struct { + RecordNative int64 + RecordStToken int64 + RemainingNative int64 + RemainingStToken int64 + UnbondTime uint64 + Status recordtypes.HostZoneUnbonding_Status + } + inProgress := recordtypes.HostZoneUnbonding_UNBONDING_IN_PROGRESS + complete := recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE + + testCases := []struct { + name string + batchNativeUnbonded sdkmath.Int + expectedBatchStTokensBurned sdkmath.Int + unbondingTimeFromResponse uint64 + initialRecords []HostZoneUnbonding + finalRecords []HostZoneUnbonding + }{ + { + // One Record, full unbonding + // 1000 total native, 1000 total sttoken, implied RR of 1.0 + // Both remaining amounts decrement to 0, + // Unbonding time is updated to 2, Status updates to EXIT_TRANSFER_QUEUE + name: "one unbonding record full amount", + batchNativeUnbonded: sdkmath.NewInt(1000), + expectedBatchStTokensBurned: sdkmath.NewInt(1000), + unbondingTimeFromResponse: 2, + initialRecords: []HostZoneUnbonding{ + {RecordNative: 1000, RecordStToken: 1000, UnbondTime: 1, Status: inProgress}, + }, + finalRecords: []HostZoneUnbonding{ + {RemainingNative: 0, RemainingStToken: 0, UnbondTime: 2, Status: complete}, + }, + }, + { + // One Record, parital unbonding + // 2000 total native, 1000 total sttoken, implied RR of 2.0 + // Batch 1000 native decremented from record, implies 500 sttokens burned + // Unbonding time is updated to 2, Status doesn't change + name: "one unbonding record parital amount", + batchNativeUnbonded: sdkmath.NewInt(1000), + expectedBatchStTokensBurned: sdkmath.NewInt(500), + unbondingTimeFromResponse: 1, + initialRecords: []HostZoneUnbonding{ + {RecordNative: 2000, RecordStToken: 1000, UnbondTime: 2, Status: inProgress}, + }, + finalRecords: []HostZoneUnbonding{ + {RemainingNative: 1000, RemainingStToken: 500, UnbondTime: 2, Status: inProgress}, + }, + }, + { + // Two records, parital unbonding on first + // Record 1: 1000 total native, 1000 total st, implied RR of 1.0 + // Record 2: 2000 total native, 1000 total st, implied RR of 2.0 + // Record 1: Batch 400 native decremented, implies 400 sttokens burned + // Record 2: Untouched + // Unbonding time updated, Status doesn't change + name: "two unbonding records partial on first", + batchNativeUnbonded: sdkmath.NewInt(400), + expectedBatchStTokensBurned: sdkmath.NewInt(400), + unbondingTimeFromResponse: 2, + initialRecords: []HostZoneUnbonding{ + {RecordNative: 1000, RecordStToken: 1000, UnbondTime: 1, Status: inProgress}, + {RecordNative: 2000, RecordStToken: 1000, UnbondTime: 1, Status: inProgress}, + }, + finalRecords: []HostZoneUnbonding{ + {RemainingNative: 600, RemainingStToken: 600, UnbondTime: 2, Status: inProgress}, + {RemainingNative: 2000, RemainingStToken: 1000, UnbondTime: 2, Status: inProgress}, + }, + }, + { + // Two records, full unbonding on first + // Record 1: 1000 total native, 1000 total st, implied RR of 1.0 + // Record 2: 2000 total native, 1000 total st, implied RR of 2.0 + // Record 1: Batch 1000 native decremented, implies 1000 sttokens burned + // Record 2: Untouched + // Unbonding time not changed, Status changes on first record + name: "two unbonding records partial on first", + batchNativeUnbonded: sdkmath.NewInt(1000), + expectedBatchStTokensBurned: sdkmath.NewInt(1000), + unbondingTimeFromResponse: 1, + initialRecords: []HostZoneUnbonding{ + {RecordNative: 1000, RecordStToken: 1000, UnbondTime: 2, Status: inProgress}, + {RecordNative: 2000, RecordStToken: 1000, UnbondTime: 2, Status: inProgress}, + }, + finalRecords: []HostZoneUnbonding{ + {RemainingNative: 0, RemainingStToken: 0, UnbondTime: 2, Status: complete}, + {RemainingNative: 2000, RemainingStToken: 1000, UnbondTime: 2, Status: inProgress}, + }, + }, + { + // Two records, full unbonding on first, parital on second + // Record 1: 1000 total native, 1000 total st, implied RR of 1.0 + // Record 2: 2000 total native, 1000 total st, implied RR of 2.0 + // Total batch unbonded: 2200 + // Record 1: Batch 1000 native decremented, implies 1000 sttokens burned + // Record 2: Batch 1200 native decremented, implies 600 sttokens burned + // Unbonding time updated, Status changes on first record + name: "two unbonding records partial on first", + batchNativeUnbonded: sdkmath.NewInt(1000 + 1200), + expectedBatchStTokensBurned: sdkmath.NewInt(1000 + 600), + unbondingTimeFromResponse: 2, + initialRecords: []HostZoneUnbonding{ + {RecordNative: 1000, RecordStToken: 1000, UnbondTime: 1, Status: inProgress}, + {RecordNative: 2000, RecordStToken: 1000, UnbondTime: 1, Status: inProgress}, + }, + finalRecords: []HostZoneUnbonding{ + {RemainingNative: 0, RemainingStToken: 0, UnbondTime: 2, Status: complete}, + {RemainingNative: 800, RemainingStToken: 400, UnbondTime: 2, Status: inProgress}, + }, + }, + { + // Two records, full unbonding on both + // Record 1: 1000 total native, 1000 total st, implied RR of 1.0 + // Record 2: 2000 total native, 1000 total st, implied RR of 2.0 + // Total batch unbonded: 3000 + // Record 1: Batch 1000 native decremented, implies 1000 sttokens burned + // Record 2: Batch 2000 native decremented, implies 1000 sttokens burned + // Unbonding time not changed, Status changes on both records + name: "two unbonding records partial on first", + batchNativeUnbonded: sdkmath.NewInt(1000 + 2000), + expectedBatchStTokensBurned: sdkmath.NewInt(1000 + 1000), + unbondingTimeFromResponse: 1, + initialRecords: []HostZoneUnbonding{ + {RecordNative: 1000, RecordStToken: 1000, UnbondTime: 2, Status: inProgress}, + {RecordNative: 2000, RecordStToken: 1000, UnbondTime: 2, Status: inProgress}, + }, + finalRecords: []HostZoneUnbonding{ + {RemainingNative: 0, RemainingStToken: 0, UnbondTime: 2, Status: complete}, + {RemainingNative: 0, RemainingStToken: 0, UnbondTime: 2, Status: complete}, + }, + }, + { + // Two records, partial starting point, batch finishes + // Record 1: 1000 total native, 1000 total st, implied RR of 1.0 + // Record 2: 2000 total native, 1000 total st, implied RR of 2.0 + // Previously unbonded 800, now unbonding remaining 2200 + // Record 1: Decrements 200 down to 0, implies 200 sttokens burned + // Record 2: Decrements 2000, implies 1000 sttokens burned + // Unbonding time updated, Status changes on both records + name: "two unbonding records partial on first", + batchNativeUnbonded: sdkmath.NewInt(200 + 2000), + expectedBatchStTokensBurned: sdkmath.NewInt(200 + 1000), + unbondingTimeFromResponse: 2, + initialRecords: []HostZoneUnbonding{ + {RecordNative: 1000, RecordStToken: 1000, RemainingNative: 200, RemainingStToken: 200, UnbondTime: 1, Status: inProgress}, + {RecordNative: 2000, RecordStToken: 1000, RemainingNative: 2000, RemainingStToken: 1000, UnbondTime: 1, Status: inProgress}, + }, + finalRecords: []HostZoneUnbonding{ + {RemainingNative: 0, RemainingStToken: 0, UnbondTime: 2, Status: complete}, + {RemainingNative: 0, RemainingStToken: 0, UnbondTime: 2, Status: complete}, + }, + }, + { + // Three records, full unbond on all, precision error + // All records decremented to 0, All records status updated + // Record 1: 1000 native, 1000 sttokens, implied RR of 1.0 + // Record 2: 1500 native, 1000 sttokens, implied RR of 1.5 + // Record 3: 2000 native, 1000 sttokens, implied RR of 2.0 + // Each record will start with an extra sttoken remaining, to test that it gets rounded down to 0 + // when the native amount goes to 0 + name: "three unbonding records full on all with precision error", + batchNativeUnbonded: sdkmath.NewInt(1000 + 1500 + 2000), + expectedBatchStTokensBurned: sdkmath.NewInt(1001 + 1001 + 1001), + unbondingTimeFromResponse: 2, + initialRecords: []HostZoneUnbonding{ + {RecordNative: 1000, RecordStToken: 1000, RemainingStToken: 1001, UnbondTime: 1, Status: inProgress}, + {RecordNative: 1500, RecordStToken: 1000, RemainingStToken: 1001, UnbondTime: 1, Status: inProgress}, + {RecordNative: 2000, RecordStToken: 1000, RemainingStToken: 1001, UnbondTime: 1, Status: inProgress}, + }, + finalRecords: []HostZoneUnbonding{ + {RemainingNative: 0, RemainingStToken: 0, UnbondTime: 2, Status: complete}, + {RemainingNative: 0, RemainingStToken: 0, UnbondTime: 2, Status: complete}, + {RemainingNative: 0, RemainingStToken: 0, UnbondTime: 2, Status: complete}, + }, + }, + { + // Four records records, full unbond on three, 1 remaining on last + // Random sttoken values to similate random redemption rates + // First three records decremented to 0, last record partially decremented + // Status update on first three records + name: "four unbonding records partial on last", + batchNativeUnbonded: sdkmath.NewInt(834 + 234 + 1093 + 2379 - 1), + expectedBatchStTokensBurned: sdkmath.NewInt(923 + 389 + 654 + 2379 - 1), + unbondingTimeFromResponse: 2, + initialRecords: []HostZoneUnbonding{ + {RecordNative: 834, RecordStToken: 923, UnbondTime: 1, Status: inProgress}, + {RecordNative: 234, RecordStToken: 389, UnbondTime: 1, Status: inProgress}, + {RecordNative: 1093, RecordStToken: 654, UnbondTime: 1, Status: inProgress}, + {RecordNative: 2379, RecordStToken: 2379, UnbondTime: 1, Status: inProgress}, + }, + finalRecords: []HostZoneUnbonding{ + {RemainingNative: 0, RemainingStToken: 0, UnbondTime: 2, Status: complete}, + {RemainingNative: 0, RemainingStToken: 0, UnbondTime: 2, Status: complete}, + {RemainingNative: 0, RemainingStToken: 0, UnbondTime: 2, Status: complete}, + {RemainingNative: 1, RemainingStToken: 1, UnbondTime: 2, Status: inProgress}, + }, + }, + { + // Two records, first one already finished + // Time should only update on the last record + name: "first record completed in previous callback", + batchNativeUnbonded: sdkmath.NewInt(500), + expectedBatchStTokensBurned: sdkmath.NewInt(500), + unbondingTimeFromResponse: 2, + initialRecords: []HostZoneUnbonding{ + {RecordNative: 1000, RecordStToken: 1000, UnbondTime: 1, Status: complete}, + {RecordNative: 1000, RecordStToken: 1000, UnbondTime: 1, Status: inProgress}, + }, + finalRecords: []HostZoneUnbonding{ + {RemainingNative: 0, RemainingStToken: 0, UnbondTime: 1, Status: complete}, + {RemainingNative: 500, RemainingStToken: 500, UnbondTime: 2, Status: inProgress}, + }, + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + // Create host zone unbonding records + epochUnbondingRecordIds := []uint64{} + for i, hostZoneUnbondingTc := range tc.initialRecords { + epochNumber := uint64(i) + epochUnbondingRecordIds = append(epochUnbondingRecordIds, epochNumber) + + // For brevity, the remaining amount was excluded on certain records where + // the remaining was equal to the full record amount + remainingNative := hostZoneUnbondingTc.RemainingNative + remainingStToken := hostZoneUnbondingTc.RemainingStToken + if hostZoneUnbondingTc.RemainingNative == 0 && hostZoneUnbondingTc.Status == inProgress { + remainingNative = hostZoneUnbondingTc.RecordNative + } + if hostZoneUnbondingTc.RemainingStToken == 0 && hostZoneUnbondingTc.Status == inProgress { + remainingStToken = hostZoneUnbondingTc.RecordStToken + } + + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, recordtypes.EpochUnbondingRecord{ + EpochNumber: epochNumber, + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{ + { + HostZoneId: HostChainId, + NativeTokenAmount: sdkmath.NewInt(hostZoneUnbondingTc.RecordNative), + NativeTokensToUnbond: sdkmath.NewInt(remainingNative), + StTokenAmount: sdkmath.NewInt(hostZoneUnbondingTc.RecordStToken), + StTokensToBurn: sdkmath.NewInt(remainingStToken), + UnbondingTime: hostZoneUnbondingTc.UnbondTime, + Status: hostZoneUnbondingTc.Status, + }, + }, + }) + } + + // Call the Update function + actualStTokensBurned, err := s.App.StakeibcKeeper.UpdateHostZoneUnbondingsAfterUndelegation( + s.Ctx, + HostChainId, + epochUnbondingRecordIds, + tc.batchNativeUnbonded, + tc.unbondingTimeFromResponse, + ) + s.Require().NoError(err, "no error expected during update") + s.Require().Equal(tc.expectedBatchStTokensBurned.Int64(), actualStTokensBurned.Int64(), "total sttokens burned") + + // Confirm the new host zone unbonding records match expectations + for i, epochNumber := range epochUnbondingRecordIds { + expectedHostZoneUnbonding := tc.finalRecords[i] + actualHostZoneUnbonding := s.MustGetHostZoneUnbonding(epochNumber, HostChainId) + + s.Require().Equal(expectedHostZoneUnbonding.Status, actualHostZoneUnbonding.Status, + "status for record %d", i) + s.Require().Equal(expectedHostZoneUnbonding.RemainingNative, actualHostZoneUnbonding.NativeTokensToUnbond.Int64(), + "native tokens for record %d", i) + s.Require().Equal(expectedHostZoneUnbonding.RemainingStToken, actualHostZoneUnbonding.StTokensToBurn.Int64(), + "sttokens for record %d", i) + s.Require().Equal(expectedHostZoneUnbonding.UnbondTime, actualHostZoneUnbonding.UnbondingTime, + "unbonding time for record %d", i) + } + }) + } +} + +func (s *KeeperTestSuite) TestBurnStTokensAfterUndelegation() { + validDepositAccount := s.TestAccs[0] + + testCases := []struct { + name string + depositAccount string + initialBalance sdkmath.Int + burnAmount sdkmath.Int + expectedRemainingBalance sdkmath.Int + expectedError string + }{ + { + name: "successful partial burn", + depositAccount: validDepositAccount.String(), + initialBalance: sdkmath.NewInt(10_000), + burnAmount: sdkmath.NewInt(8_000), + expectedRemainingBalance: sdkmath.NewInt(2_000), + }, + { + name: "successful full burn", + depositAccount: validDepositAccount.String(), + initialBalance: sdkmath.NewInt(10_000), + burnAmount: sdkmath.NewInt(10_000), + expectedRemainingBalance: sdkmath.NewInt(0), + }, + { + name: "invalid deposit account", + depositAccount: "invalid-account", + initialBalance: sdkmath.NewInt(10_000), + burnAmount: sdkmath.NewInt(10_000), + expectedError: "unable to convert deposit address", + }, + { + name: "insufficient funds", + depositAccount: validDepositAccount.String(), + initialBalance: sdkmath.NewInt(10_000), + burnAmount: sdkmath.NewInt(10_001), + expectedError: "unable to send sttokens from deposit account for burning", + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + s.SetupTest() // resets account balances and token supply + + hostZone := types.HostZone{ + HostDenom: Atom, + DepositAddress: tc.depositAccount, + } + + stTokens := sdk.NewCoin(StAtom, tc.initialBalance) + s.FundAccount(validDepositAccount, stTokens) + + actualError := s.App.StakeibcKeeper.BurnStTokensAfterUndelegation(s.Ctx, hostZone, tc.burnAmount) + if tc.expectedError != "" { + s.Require().ErrorContains(actualError, tc.expectedError) + } else { + s.Require().NoError(actualError, "no error expected when burning") + + finalBalance := s.App.BankKeeper.GetBalance(s.Ctx, validDepositAccount, StAtom).Amount + s.Require().Equal(tc.expectedRemainingBalance.Int64(), finalBalance.Int64(), "remaining balance") + } + }) + } +} diff --git a/x/stakeibc/keeper/icqcallbacks.go b/x/stakeibc/keeper/icqcallbacks.go new file mode 100644 index 00000000000..de93e4bea50 --- /dev/null +++ b/x/stakeibc/keeper/icqcallbacks.go @@ -0,0 +1,58 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" +) + +const ( + ICQCallbackID_WithdrawalHostBalance = "withdrawalbalance" + ICQCallbackID_FeeBalance = "feebalance" + ICQCallbackID_Delegation = "delegation" + ICQCallbackID_Validator = "validator" + ICQCallbackID_Calibrate = "calibrate" + ICQCallbackID_CommunityPoolIcaBalance = "communitypoolicabalance" + ICQCallbackID_WithdrawalRewardBalance = "withdrawalrewardbalance" + ICQCallbackID_TradeConvertedBalance = "tradeconvertedbalance" +) + +// ICQCallbacks wrapper struct for stakeibc keeper +type ICQCallback func(Keeper, sdk.Context, []byte, icqtypes.Query) error + +type ICQCallbacks struct { + k Keeper + callbacks map[string]ICQCallback +} + +var _ icqtypes.QueryCallbacks = ICQCallbacks{} + +func (k Keeper) ICQCallbackHandler() ICQCallbacks { + return ICQCallbacks{k, make(map[string]ICQCallback)} +} + +func (c ICQCallbacks) CallICQCallback(ctx sdk.Context, id string, args []byte, query icqtypes.Query) error { + return c.callbacks[id](c.k, ctx, args, query) +} + +func (c ICQCallbacks) HasICQCallback(id string) bool { + _, found := c.callbacks[id] + return found +} + +func (c ICQCallbacks) AddICQCallback(id string, fn interface{}) icqtypes.QueryCallbacks { + c.callbacks[id] = fn.(ICQCallback) + return c +} + +func (c ICQCallbacks) RegisterICQCallbacks() icqtypes.QueryCallbacks { + return c. + AddICQCallback(ICQCallbackID_WithdrawalHostBalance, ICQCallback(WithdrawalHostBalanceCallback)). + AddICQCallback(ICQCallbackID_FeeBalance, ICQCallback(FeeBalanceCallback)). + AddICQCallback(ICQCallbackID_Delegation, ICQCallback(DelegatorSharesCallback)). + AddICQCallback(ICQCallbackID_Validator, ICQCallback(ValidatorSharesToTokensRateCallback)). + AddICQCallback(ICQCallbackID_Calibrate, ICQCallback(CalibrateDelegationCallback)). + AddICQCallback(ICQCallbackID_CommunityPoolIcaBalance, ICQCallback(CommunityPoolIcaBalanceCallback)). + AddICQCallback(ICQCallbackID_WithdrawalRewardBalance, ICQCallback(WithdrawalRewardBalanceCallback)). + AddICQCallback(ICQCallbackID_TradeConvertedBalance, ICQCallback(TradeConvertedBalanceCallback)) +} diff --git a/x/stakeibc/keeper/icqcallbacks_callibrate_delegation.go b/x/stakeibc/keeper/icqcallbacks_callibrate_delegation.go new file mode 100644 index 00000000000..1230be05580 --- /dev/null +++ b/x/stakeibc/keeper/icqcallbacks_callibrate_delegation.go @@ -0,0 +1,85 @@ +package keeper + +import ( + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + + "github.com/osmosis-labs/osmosis/v27/utils" + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// CalibrationThreshold is the max amount of tokens by which a calibration can alter internal record keeping of delegations +var CalibrationThreshold = sdkmath.NewInt(5000) + +// DelegatorSharesCallback is a callback handler for UpdateValidatorSharesExchRate queries. +// +// In an attempt to get the ICA's delegation amount on a given validator, we have to query: +// 1. the validator's internal shares to tokens rate +// 2. the Delegation ICA's delegated shares +// And apply the following equation: +// numTokens = numShares * sharesToTokensRate +// +// This is the callback from query #2 +// +// Note: for now, to get proofs in your ICQs, you need to query the entire store on the host zone! e.g. "store/bank/key" +func CalibrateDelegationCallback(k Keeper, ctx sdk.Context, args []byte, query icqtypes.Query) error { + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(query.ChainId, ICQCallbackID_Calibrate, + "Starting delegator shares callback, QueryId: %vs, QueryType: %s, Connection: %s", query.Id, query.QueryType, query.ConnectionId)) + + // Confirm host exists + chainId := query.ChainId + hostZone, found := k.GetHostZone(ctx, chainId) + if !found { + return errorsmod.Wrapf(types.ErrHostZoneNotFound, "no registered zone for queried chain ID (%s)", chainId) + } + + // Unmarshal the query response which returns a delegation object for the delegator/validator pair + queriedDelegation := stakingtypes.Delegation{} + err := k.cdc.Unmarshal(args, &queriedDelegation) + if err != nil { + return errorsmod.Wrapf(err, "unable to unmarshal delegator shares query response into Delegation type") + } + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_Calibrate, "Query response - Delegator: %s, Validator: %s, Shares: %v", + queriedDelegation.DelegatorAddress, queriedDelegation.ValidatorAddress, queriedDelegation.Shares)) + + // Grab the validator object from the hostZone using the address returned from the query + validator, valIndex, found := GetValidatorFromAddress(hostZone.Validators, queriedDelegation.ValidatorAddress) + if !found { + return errorsmod.Wrapf(types.ErrValidatorNotFound, "no registered validator for address (%s)", queriedDelegation.ValidatorAddress) + } + + // Calculate the number of tokens delegated (using the internal sharesToTokensRate) + // note: truncateInt per https://github.com/cosmos/cosmos-sdk/blob/cb31043d35bad90c4daa923bb109f38fd092feda/x/staking/types/validator.go#L431 + delegatedTokens := queriedDelegation.Shares.Mul(validator.SharesToTokensRate).TruncateInt() + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_Calibrate, + "Previous Delegation: %v, Current Delegation: %v", validator.Delegation, delegatedTokens)) + + // Confirm the validator has actually been slashed + if delegatedTokens.Equal(validator.Delegation) { + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_Calibrate, "Validator delegation is correct")) + return nil + } + + // if the delegation change is more than the calibration threshold constant, + // return nil so the query submission succeeds + // Note: There should be no stateful changes above this line + delegationChange := validator.Delegation.Sub(delegatedTokens) + if delegationChange.Abs().GT(CalibrationThreshold) { + k.Logger(ctx).Error(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_Calibrate, + "Delegation change is GT CalibrationThreshold, failing calibration callback")) + return nil + } + validator.Delegation = validator.Delegation.Sub(delegationChange) + hostZone.TotalDelegations = hostZone.TotalDelegations.Sub(delegationChange) + + hostZone.Validators[valIndex] = &validator + k.SetHostZone(ctx, hostZone) + + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_Calibrate, + "Delegation updated to: %v", validator.Delegation)) + + return nil +} diff --git a/x/stakeibc/keeper/icqcallbacks_callibrate_delegation_test.go b/x/stakeibc/keeper/icqcallbacks_callibrate_delegation_test.go new file mode 100644 index 00000000000..84816fc5cce --- /dev/null +++ b/x/stakeibc/keeper/icqcallbacks_callibrate_delegation_test.go @@ -0,0 +1,151 @@ +package keeper_test + +import ( + sdkmath "cosmossdk.io/math" + + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/keeper" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func (s *KeeperTestSuite) TestCalibrateDelegation_Success() { + queriedValIndex := 1 + initialTotalDelegations := sdkmath.NewInt(1_000_000) + + baseHostZone := types.HostZone{ + ChainId: HostChainId, + TotalDelegations: initialTotalDelegations, + Validators: []*types.Validator{ + {Address: "valoper1"}, // not queried + {Address: ValAddress}, // queried validator - will get overridden in each test case + }, + } + + testCases := []struct { + name string + currentDelegation sdkmath.Int + sharesInQueryResponse sdkmath.LegacyDec + sharesToTokensRate sdkmath.LegacyDec + expectedEndDelegation sdkmath.Int + }{ + { + // Current delegation: 10,000 tokens + // Query response: 13,334 shares * 0.75 sharesToTokens = 10,000 tokens (+0) + name: "delegation change of 0", + currentDelegation: sdkmath.NewInt(10_000), + sharesInQueryResponse: sdkmath.LegacyMustNewDecFromStr("13334"), + sharesToTokensRate: sdkmath.LegacyMustNewDecFromStr("0.75"), + expectedEndDelegation: sdkmath.NewInt(10_000), + }, + { + // Current delegation: 10,000 tokens + // Query response: 10,000 shares * 0.75 sharesToTokens = 7,500 tokens (-2,500) + name: "negative delegation change", + currentDelegation: sdkmath.NewInt(10_000), + sharesInQueryResponse: sdkmath.LegacyMustNewDecFromStr("10000"), + sharesToTokensRate: sdkmath.LegacyMustNewDecFromStr("0.75"), + expectedEndDelegation: sdkmath.NewInt(7_500), + }, + { + // Current delegation: 12,500 tokens + // Query response: 20,000 shares * 0.75 sharesToTokens = 15,000 tokens (+2,500) + name: "positive delegation change", + currentDelegation: sdkmath.NewInt(12_500), + sharesInQueryResponse: sdkmath.LegacyMustNewDecFromStr("20000"), + sharesToTokensRate: sdkmath.LegacyMustNewDecFromStr("0.75"), + expectedEndDelegation: sdkmath.NewInt(15_000), + }, + { + // Current delegation: 12,500 tokens + // Query response: 10,000 shares * 0.75 sharesToTokens = 7,500 tokens (-5,000) + name: "negative delegation change at threshold boundary", + currentDelegation: sdkmath.NewInt(12_500), + sharesInQueryResponse: sdkmath.LegacyMustNewDecFromStr("10000"), + sharesToTokensRate: sdkmath.LegacyMustNewDecFromStr("0.75"), + expectedEndDelegation: sdkmath.NewInt(7_500), + }, + { + // Current delegation: 10,000 tokens + // Query response: 20,000 shares * 0.75 sharesToTokens = 15,000 tokens (+5,000) + name: "positive delegation change at threshold boundary", + currentDelegation: sdkmath.NewInt(10_000), + sharesInQueryResponse: sdkmath.LegacyMustNewDecFromStr("20000"), + sharesToTokensRate: sdkmath.LegacyMustNewDecFromStr("0.75"), + expectedEndDelegation: sdkmath.NewInt(15_000), + }, + { + // Current delegation: 12,501 tokens + // Query response: 10,000 shares * 0.75 sharesToTokens = 7,500 tokens (-5,001) + name: "negative delegation change exceeds threshold", + currentDelegation: sdkmath.NewInt(12_501), + sharesInQueryResponse: sdkmath.LegacyMustNewDecFromStr("10000"), + sharesToTokensRate: sdkmath.LegacyMustNewDecFromStr("0.75"), + expectedEndDelegation: sdkmath.NewInt(12_501), // no change + }, + { + // Current delegation: 9,999 tokens + // Query response: 20,000 shares * 0.75 sharesToTokens = 15,000 tokens (+5,001) + name: "positive delegation change exceeds threshold", + currentDelegation: sdkmath.NewInt(9_999), + sharesInQueryResponse: sdkmath.LegacyMustNewDecFromStr("20000"), + sharesToTokensRate: sdkmath.LegacyMustNewDecFromStr("0.75"), + expectedEndDelegation: sdkmath.NewInt(9_999), // no change + }, + } + + for _, tc := range testCases { + // Define a host zone with the current parameters + hostZone := baseHostZone + hostZone.Validators[queriedValIndex] = &types.Validator{ + Address: ValAddress, + Delegation: tc.currentDelegation, + SharesToTokensRate: tc.sharesToTokensRate, + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + // Mock out the query response and confirm the callback succeede + query := icqtypes.Query{ChainId: HostChainId} + queryResponse := s.CreateDelegatorSharesQueryResponse(ValAddress, tc.sharesInQueryResponse) + + err := keeper.CalibrateDelegationCallback(s.App.StakeibcKeeper, s.Ctx, queryResponse, query) + s.Require().NoError(err, "%s - no error expected during delegation callback", tc.name) + + // Fetch the updated host zone and validator + updatedHostZone, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, HostChainId) + s.Require().True(found, "%s - host zone should have been found", tc.name) + updatedValidator := updatedHostZone.Validators[queriedValIndex] + + // Confirm the delegation changes match expectations + expectedDelegationChange := tc.expectedEndDelegation.Sub(tc.currentDelegation) + expectedTotalDelegation := initialTotalDelegations.Add(expectedDelegationChange) + s.Require().Equal(tc.expectedEndDelegation.Int64(), updatedValidator.Delegation.Int64(), + "%s - validator delegation", tc.name) + s.Require().Equal(expectedTotalDelegation.Int64(), updatedHostZone.TotalDelegations.Int64(), + "%s - host zone total delegation", tc.name) + } +} + +func (s *KeeperTestSuite) TestCalibrateDelegation_Failure() { + s.App.StakeibcKeeper.SetHostZone(s.Ctx, types.HostZone{ + ChainId: HostChainId, + Validators: []*types.Validator{{Address: ValAddress}}, + }) + validQuery := icqtypes.Query{ChainId: HostChainId} + validQueryResponse := s.CreateDelegatorSharesQueryResponse(ValAddress, sdkmath.LegacyNewDec(1000)) + + // Atempt the callback with a missing host zone - it should fail + invalidQuery := validQuery + invalidQuery.ChainId = "" + err := keeper.CalibrateDelegationCallback(s.App.StakeibcKeeper, s.Ctx, validQueryResponse, invalidQuery) + s.Require().ErrorContains(err, "host zone not found") + + // Attempt the callback with an invalid query response - it should fail + invalidQueryResponse := []byte{1, 2, 3} + err = keeper.CalibrateDelegationCallback(s.App.StakeibcKeeper, s.Ctx, invalidQueryResponse, validQuery) + s.Require().ErrorContains(err, "unable to unmarshal delegator shares query response") + + // Attempt the callback with a non-existent validator address - it should fail + invalidQueryResponse = s.CreateDelegatorSharesQueryResponse("non-existent validator", sdkmath.LegacyNewDec(1000)) + err = keeper.CalibrateDelegationCallback(s.App.StakeibcKeeper, s.Ctx, invalidQueryResponse, validQuery) + s.Require().ErrorContains(err, "validator not found") +} diff --git a/x/stakeibc/keeper/icqcallbacks_community_pool_ica_balance.go b/x/stakeibc/keeper/icqcallbacks_community_pool_ica_balance.go new file mode 100644 index 00000000000..38e6ed61d65 --- /dev/null +++ b/x/stakeibc/keeper/icqcallbacks_community_pool_ica_balance.go @@ -0,0 +1,87 @@ +package keeper + +import ( + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + proto "github.com/cosmos/gogoproto/proto" + + errorsmod "cosmossdk.io/errors" + + "github.com/osmosis-labs/osmosis/v27/utils" + icqkeeper "github.com/osmosis-labs/osmosis/v27/x/interchainquery/keeper" + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// CommunityPoolBalanceCallback is a callback handler for CommunityPoolBalance queries. +// The query response will return the balance for a specific denom in the deposit or return ica + +// If the address queried was the deposit ICA address, call TransferCommunityPoolDepositToHolding +// If the address queried was the return ICA address, call FundCommunityPool + +// Note: for now, to get proofs in your ICQs, you need to query the entire store on the host zone! e.g. "store/bank/key" +func CommunityPoolIcaBalanceCallback(k Keeper, ctx sdk.Context, args []byte, query icqtypes.Query) error { + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(query.ChainId, ICQCallbackID_CommunityPoolIcaBalance, + "Starting community pool balance callback, QueryId: %vs, QueryType: %s, Connection: %s", + query.Id, query.QueryType, query.ConnectionId)) + + // Confirm host exists + chainId := query.ChainId + hostZone, found := k.GetHostZone(ctx, chainId) + if !found { + return errorsmod.Wrapf(types.ErrHostZoneNotFound, "no registered zone for queried chain ID (%s)", chainId) + } + + // Unmarshal the query response args to determine the balance, denom, and icaType + // get amount from the query response, get denom and icaType from marshalled callback data + amount, err := icqkeeper.UnmarshalAmountFromBalanceQuery(k.cdc, args) + if err != nil { + return errorsmod.Wrap(err, "unable to determine amount from query response") + } + + // Unmarshal the callback data containing the denom being queried + var callbackData types.CommunityPoolBalanceQueryCallback + if err := proto.Unmarshal(query.CallbackData, &callbackData); err != nil { + return errorsmod.Wrapf(err, "unable to unmarshal community pool balance query callback data") + } + icaType := callbackData.IcaType + denom := callbackData.Denom + + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_CommunityPoolIcaBalance, + "Query response - Community Pool Balance: %+v %s %s", amount, icaType.String(), denom)) + + // Confirm the balance is greater than zero for now... + // ...perhaps use a positive threshold in the future to avoid work when transfer would be small + if amount.LTE(sdkmath.ZeroInt()) { + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_CommunityPoolIcaBalance, + "No need to transfer tokens -- not enough found %v %s", amount, denom)) + return nil + } + + token := sdk.NewCoin(denom, amount) + + // Based on the account type, we kick off the relevant ICA (transfer or fund) + // If either of the ICAs fails midway through it's invocation, we swallow the + // error and revert any partial state so that the query response submission can finish + if icaType == types.ICAAccountType_COMMUNITY_POOL_DEPOSIT { + // Send ICA msg to kick off transfer from deposit ICA to stake holding address + err := utils.ApplyFuncIfNoError(ctx, func(c sdk.Context) error { + return k.TransferCommunityPoolDepositToHolding(ctx, hostZone, token) + }) + if err != nil { + k.Logger(ctx).Error(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_CommunityPoolIcaBalance, + "Initiating transfer to holding address failed: %s", err.Error())) + } + } else if icaType == types.ICAAccountType_COMMUNITY_POOL_RETURN { + // Send ICA msg to FundCommunityPool with token found in return ICA + err := utils.ApplyFuncIfNoError(ctx, func(c sdk.Context) error { + return k.FundCommunityPool(ctx, hostZone, token, icaType) + }) + if err != nil { + k.Logger(ctx).Error(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_CommunityPoolIcaBalance, + "Initiating community pool fund failed: %s", err.Error())) + } + } + + return nil +} diff --git a/x/stakeibc/keeper/icqcallbacks_delegator_shares.go b/x/stakeibc/keeper/icqcallbacks_delegator_shares.go new file mode 100644 index 00000000000..d3296605b41 --- /dev/null +++ b/x/stakeibc/keeper/icqcallbacks_delegator_shares.go @@ -0,0 +1,255 @@ +package keeper + +import ( + "fmt" + + sdkmath "cosmossdk.io/math" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/cosmos/gogoproto/proto" + "github.com/spf13/cast" + + "github.com/osmosis-labs/osmosis/v27/utils" + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// DelegatorSharesCallback is a callback handler for UpdateValidatorSharesExchRate queries. +// +// In an attempt to get the ICA's delegation amount on a given validator, we have to query: +// 1. the validator's internal shares to tokens rate +// 2. the Delegation ICA's delegated shares +// And apply the following equation: +// numTokens = numShares * sharesToTokensRate +// +// This is the callback from query #2 +// +// Note: for now, to get proofs in your ICQs, you need to query the entire store on the host zone! e.g. "store/bank/key" +func DelegatorSharesCallback(k Keeper, ctx sdk.Context, args []byte, query icqtypes.Query) error { + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(query.ChainId, ICQCallbackID_Delegation, + "Starting delegator shares callback, QueryId: %vs, QueryType: %s, Connection: %s", query.Id, query.QueryType, query.ConnectionId)) + + // Confirm host exists + chainId := query.ChainId + hostZone, found := k.GetHostZone(ctx, chainId) + if !found { + return errorsmod.Wrapf(types.ErrHostZoneNotFound, "no registered zone for queried chain ID (%s)", chainId) + } + + // Unmarshal the query response which returns a delegation object for the delegator/validator pair + queriedDelegation := stakingtypes.Delegation{} + err := k.cdc.Unmarshal(args, &queriedDelegation) + if err != nil { + return errorsmod.Wrapf(err, "unable to unmarshal delegator shares query response into Delegation type") + } + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_Delegation, "Query response - Delegator: %s, Validator: %s, Shares: %v", + queriedDelegation.DelegatorAddress, queriedDelegation.ValidatorAddress, queriedDelegation.Shares)) + + // Unmarshal the callback data containing the previous delegation to the validator (from the time the query was submitted) + var callbackData types.DelegatorSharesQueryCallback + if err := proto.Unmarshal(query.CallbackData, &callbackData); err != nil { + return errorsmod.Wrapf(err, "unable to unmarshal delegator shares callback data") + } + + // Grab the validator object from the hostZone using the address returned from the query + validator, valIndex, found := GetValidatorFromAddress(hostZone.Validators, queriedDelegation.ValidatorAddress) + if !found { + return errorsmod.Wrapf(types.ErrValidatorNotFound, "no registered validator for address (%s)", queriedDelegation.ValidatorAddress) + } + + // Check if the ICQ overlapped a delegation, undelegation, or detokenization ICA + // that would have modfied the number of delegated tokens + prevInternalDelegation := callbackData.InitialValidatorDelegation + currInternalDelegation := validator.Delegation + icaOverlappedIcq, err := k.CheckDelegationChangedDuringQuery(ctx, validator, prevInternalDelegation, currInternalDelegation) + if err != nil { + return err + } + + // If the ICA/ICQ overlapped, submit a new query + if icaOverlappedIcq { + // Store the updated validator delegation amount + callbackDataBz, err := proto.Marshal(&types.DelegatorSharesQueryCallback{ + InitialValidatorDelegation: currInternalDelegation, + }) + if err != nil { + return errorsmod.Wrapf(err, "unable to marshal delegator shares callback data") + } + query.CallbackData = callbackDataBz + + if err := k.InterchainQueryKeeper.RetryICQRequest(ctx, query); err != nil { + return errorsmod.Wrapf(err, "unable to resubmit delegator shares query") + } + return nil + } + + // If there was no ICA/ICQ overlap, update the validator to indicate that the query + // is no longer in progress (which will unblock LSM liquid stakes to that validator) + validator.SlashQueryInProgress = false + hostZone.Validators[valIndex] = &validator + k.SetHostZone(ctx, hostZone) + + // Confirm the validator was slashed by looking at the number of tokens associated with the delegation + validatorWasSlashed, delegatedTokens, err := k.CheckForSlash(ctx, hostZone, valIndex, queriedDelegation) + if err != nil { + return err + } + // If the validator was not slashed, exit now + if !validatorWasSlashed { + return nil + } + + // If the validator was slashed and the query did not overlap any ICAs, update the internal record keeping + if err := k.SlashValidatorOnHostZone(ctx, hostZone, valIndex, delegatedTokens); err != nil { + return err + } + + return nil +} + +// The number of tokens returned from the query must be consistent with the tokens +// stored in our internal record keeping during this callback, otherwise the comparision +// between the two is invalidated +// +// As a result, we must avoid a race condition between the ICQ and a delegate, undelegate, +// redelegate, or detokenization ICA +// +// More specifically, we must avoid the following cases: +// +// Case 1) +// ICQ Lands on Host ICQ Ack on Stride +// ICA Lands on Host ICA Ack on Stride +// Case 2) +// ICA Lands on Host ICA Ack on Stride +// ICQ Lands on Host ICQ Ack on Stride +// +// We can prevent Case #1 by checking if the delegation total on the validator has changed +// while the query was in flight +// +// We can prevent Case #2 by checking if the validator has a delegation change in progress +func (k Keeper) CheckDelegationChangedDuringQuery( + ctx sdk.Context, + validator types.Validator, + previousInternalDelegation sdkmath.Int, + currentInternalDelegation sdkmath.Int, +) (overlapped bool, err error) { + // Confirm the delegation total in the internal record keeping has not changed while the query was inflight + // If it has changed, exit this callback (to prevent any accounting errors) and resubmit the query + if !currentInternalDelegation.Equal(previousInternalDelegation) { + k.Logger(ctx).Error(fmt.Sprintf( + "Validator (%s) delegation changed while delegator shares query was in flight. Resubmitting query", validator.Address)) + return true, nil + } + + // Confirm there isn't currently an active delegation change ICA for this validator + if validator.DelegationChangesInProgress > 0 { + k.Logger(ctx).Error(fmt.Sprintf( + "Validator (%s) has %d delegation changing ICAs in progress. Resubmitting query ", + validator.Address, validator.DelegationChangesInProgress)) + return true, nil + } + + return false, nil +} + +// Check if a slash occured by comparing the validator's sharesToTokens rate and delegator shares +// from the query responses (tokens = shares * sharesToTokensRate) +// +// If the change in delegation only differs by a small precision error, it was likely +// due to an decimal -> int truncation that occurs during unbonding. In this case, still update the validator +// +// If the change in delegation was an increase, the response can't be trusted so an error is thrown +func (k Keeper) CheckForSlash( + ctx sdk.Context, + hostZone types.HostZone, + valIndex int64, + queriedDelegation stakingtypes.Delegation, +) (validatorWasSlashed bool, delegatedTokens sdkmath.Int, err error) { + chainId := hostZone.ChainId + validator := hostZone.Validators[valIndex] + + // Calculate the number of tokens delegated (using the internal sharesToTokensRate) + // note: truncateInt per https://github.com/cosmos/cosmos-sdk/blob/cb31043d35bad90c4daa923bb109f38fd092feda/x/staking/types/validator.go#L431 + delegatedTokens = queriedDelegation.Shares.Mul(validator.SharesToTokensRate).TruncateInt() + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_Delegation, + "Previous Delegation: %v, Current Delegation: %v", validator.Delegation, delegatedTokens)) + + // Confirm the validator has actually been slashed + if delegatedTokens.Equal(validator.Delegation) { + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_Delegation, "Validator was not slashed")) + return false, delegatedTokens, nil + } + + // If the true delegation is slightly higher than our record keeping, this could be due to float imprecision + // Correct record keeping accordingly + precisionErrorThreshold := sdkmath.NewInt(1000) + precisionError := delegatedTokens.Sub(validator.Delegation) + if precisionError.IsPositive() && precisionError.LTE(precisionErrorThreshold) { + // Update the validator on the host zone + validator.Delegation = validator.Delegation.Add(precisionError) + hostZone.TotalDelegations = hostZone.TotalDelegations.Add(precisionError) + + hostZone.Validators[valIndex] = validator + k.SetHostZone(ctx, hostZone) + + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_Delegation, + "Delegation updated to %v", validator.Delegation)) + + return false, delegatedTokens, nil + } + + // If the delegation returned from the query is much higher than our record keeping, exit with an error + if delegatedTokens.GT(validator.Delegation) { + return false, delegatedTokens, errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, + "Validator (%s) tokens returned from query is greater than the Delegation", validator.Address) + } + + return true, delegatedTokens, nil +} + +// Update the accounting on the host zone and validator to record the slash +// NOTE: we assume any decrease in delegation amt that's not tracked via records is a slash +func (k Keeper) SlashValidatorOnHostZone(ctx sdk.Context, hostZone types.HostZone, valIndex int64, delegatedTokens sdkmath.Int) error { + chainId := hostZone.ChainId + validator := hostZone.Validators[valIndex] + + // There is a check upstream to verify that validator.Delegation is not 0 + // This check is to explicitly avoid a division by zero error + if validator.Delegation.IsZero() { + return errorsmod.Wrapf(types.ErrDivisionByZero, "Zero Delegation has caused division by zero from validator, %+v", validator) + } + + // Get slash percentage + slashAmount := validator.Delegation.Sub(delegatedTokens) + slashPct := sdkmath.LegacyNewDecFromInt(slashAmount).Quo(sdkmath.LegacyNewDecFromInt(validator.Delegation)) + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_Delegation, + "Validator was slashed! Validator: %s, Delegator: %s, Delegation in State: %v, Delegation from ICQ %v, Slash Amount: %v, Slash Pct: %v", + validator.Address, hostZone.DelegationIcaAddress, validator.Delegation, delegatedTokens, slashAmount, slashPct)) + + // Update the validator weight and delegation reflect to reflect the slash + weight, err := cast.ToInt64E(validator.Weight) + if err != nil { + return errorsmod.Wrapf(types.ErrIntCast, "unable to convert validator weight to int64, err: %s", err.Error()) + } + weightAdjustment := sdkmath.LegacyNewDecFromInt(delegatedTokens).Quo(sdkmath.LegacyNewDecFromInt(validator.Delegation)) + + validator.Weight = sdkmath.LegacyNewDec(weight).Mul(weightAdjustment).TruncateInt().Uint64() + validator.Delegation = validator.Delegation.Sub(slashAmount) + + // Update the validator on the host zone + hostZone.TotalDelegations = hostZone.TotalDelegations.Sub(slashAmount) + hostZone.Validators[valIndex] = validator + k.SetHostZone(ctx, hostZone) + + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_Delegation, + "Delegation updated to: %v, Weight updated to: %v", validator.Delegation, validator.Weight)) + + // Update the redemption rate + depositRecords := k.RecordsKeeper.GetAllDepositRecord(ctx) + k.UpdateRedemptionRateForHostZone(ctx, hostZone, depositRecords) + + return nil +} diff --git a/x/stakeibc/keeper/icqcallbacks_delegator_shares_test.go b/x/stakeibc/keeper/icqcallbacks_delegator_shares_test.go new file mode 100644 index 00000000000..0aaec1c7de6 --- /dev/null +++ b/x/stakeibc/keeper/icqcallbacks_delegator_shares_test.go @@ -0,0 +1,454 @@ +package keeper_test + +import ( + "math" + "time" + + sdkmath "cosmossdk.io/math" + + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/cosmos/gogoproto/proto" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/keeper" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +type DelegatorSharesICQCallbackArgs struct { + query icqtypes.Query + callbackArgs []byte +} + +type DelegatorSharesICQCallbackTestCase struct { + valIndexQueried int + hostZone types.HostZone + validArgs DelegatorSharesICQCallbackArgs + numShares sdkmath.LegacyDec + slashPercentage sdkmath.LegacyDec + expectedDelegationAmount sdkmath.Int + expectedSlashAmount sdkmath.Int + expectedWeight uint64 + sharesToTokensRate sdkmath.LegacyDec + retryTimeoutDuration time.Duration +} + +// Mocks the query response that's returned from an ICQ for the number of shares for a given validator/delegator pair +func (s *KeeperTestSuite) CreateDelegatorSharesQueryResponse(valAddress string, shares sdkmath.LegacyDec) []byte { + delegation := stakingtypes.Delegation{ + ValidatorAddress: valAddress, + DelegatorAddress: "cosmos_DELEGATION", + Shares: shares, + } + delegationBz := s.App.RecordsKeeper.Cdc.MustMarshal(&delegation) + return delegationBz +} + +func (s *KeeperTestSuite) SetupDelegatorSharesICQCallback() DelegatorSharesICQCallbackTestCase { + // Setting this up to initialize the coordinator for the block time + s.CreateTransferChannel(HostChainId) + + valIndexQueried := 1 + tokensBeforeSlash := sdkmath.NewInt(1000) + sharesToTokensRate := sdkmath.LegacyNewDec(1).Quo(sdkmath.LegacyNewDec(2)) // 0.5 + numShares := sdkmath.LegacyNewDec(1900) + + // 1900 shares * 0.5 sharesToTokens rate = 950 tokens + // 1000 tokens - 950 token = 50 tokens slashed + // 50 slash tokens / 1000 initial tokens = 5% slash + expectedTokensAfterSlash := sdkmath.NewInt(950) + expectedSlashAmount := tokensBeforeSlash.Sub(expectedTokensAfterSlash) + slashPercentage := sdkmath.LegacyMustNewDecFromStr("0.05") + weightBeforeSlash := uint64(20) + expectedWeightAfterSlash := uint64(19) + totalDelegation := sdkmath.NewInt(10_000) + + s.Require().Equal(numShares, sdkmath.LegacyNewDecFromInt(expectedTokensAfterSlash.Mul(sdkmath.NewInt(2))), "tokens, shares, and sharesToTokens rate aligned") + s.Require().Equal(slashPercentage, sdkmath.LegacyNewDecFromInt(expectedSlashAmount).Quo(sdkmath.LegacyNewDecFromInt(tokensBeforeSlash)), "expected slash percentage") + s.Require().Equal(slashPercentage, sdkmath.LegacyNewDec(int64(weightBeforeSlash-expectedWeightAfterSlash)).Quo(sdkmath.LegacyNewDec(int64(weightBeforeSlash))), "weight reduction") + + hostZone := types.HostZone{ + ChainId: HostChainId, + TotalDelegations: totalDelegation, + HostDenom: Atom, + Validators: []*types.Validator{ + // This validator isn't being queried + { + Name: "val1", + Address: "valoper1", + Weight: 1, + Delegation: sdkmath.ZeroInt(), + }, + // This is the validator in question + { + Name: "val2", + Address: ValAddress, + SharesToTokensRate: sharesToTokensRate, + Delegation: tokensBeforeSlash, + Weight: weightBeforeSlash, + SlashQueryInProgress: true, + DelegationChangesInProgress: 0, + }, + }, + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + queryResponse := s.CreateDelegatorSharesQueryResponse(ValAddress, numShares) + + // Create callback data + callbackDataBz, err := proto.Marshal(&types.DelegatorSharesQueryCallback{ + InitialValidatorDelegation: tokensBeforeSlash, + }) + s.Require().NoError(err, "no error expected when marshalling callback data") + + // Set the timeout timestamp to be 1 minute after the block time, and + // the timeout duration to be 5 minutes + blockTime := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC) + s.Ctx = s.Ctx.WithBlockTime(blockTime) + timeoutDuration := time.Minute + timeoutTimestamp := uint64(blockTime.Add(timeoutDuration).UnixNano()) + + // Create the query that represents the ICQ in flight + query := icqtypes.Query{ + Id: "query-1", + ChainId: HostChainId, + ConnectionId: ibctesting.FirstConnectionID, + QueryType: icqtypes.STAKING_STORE_QUERY_WITH_PROOF, + CallbackData: callbackDataBz, + CallbackId: keeper.ICQCallbackID_Delegation, + CallbackModule: types.ModuleName, + TimeoutDuration: timeoutDuration, + TimeoutTimestamp: timeoutTimestamp, + RequestSent: true, + TimeoutPolicy: icqtypes.TimeoutPolicy_RETRY_QUERY_REQUEST, + } + s.App.InterchainqueryKeeper.SetQuery(s.Ctx, query) + + return DelegatorSharesICQCallbackTestCase{ + valIndexQueried: valIndexQueried, + validArgs: DelegatorSharesICQCallbackArgs{ + query: query, + callbackArgs: queryResponse, + }, + hostZone: hostZone, + numShares: numShares, + slashPercentage: slashPercentage, + expectedDelegationAmount: expectedTokensAfterSlash, + expectedSlashAmount: expectedSlashAmount, + expectedWeight: expectedWeightAfterSlash, + sharesToTokensRate: sharesToTokensRate, + retryTimeoutDuration: timeoutDuration, + } +} + +// Helper function to check if the query was resubmitted in the event that it overlapped an ICA +func (s *KeeperTestSuite) CheckQueryWasResubmitted(tc DelegatorSharesICQCallbackTestCase, hostZone types.HostZone) { + // After removing the original query, there should be only one query left + s.App.InterchainqueryKeeper.DeleteQuery(s.Ctx, "query-1") + queries := s.App.InterchainqueryKeeper.AllQueries(s.Ctx) + s.Require().Len(queries, 1, "one query expected after re-submission") + + actualQuery := queries[0] + expectedQuery := tc.validArgs.query + + s.Require().Equal(HostChainId, actualQuery.ChainId, "query chain id") + s.Require().Equal(ibctesting.FirstConnectionID, actualQuery.ConnectionId, "query connection-id") + s.Require().Equal(icqtypes.STAKING_STORE_QUERY_WITH_PROOF, actualQuery.QueryType, "query type") + + s.Require().Equal(expectedQuery.CallbackModule, actualQuery.CallbackModule, "query callback module") + s.Require().Equal(expectedQuery.CallbackId, actualQuery.CallbackId, "query callback id") + s.Require().Equal(expectedQuery.CallbackData, actualQuery.CallbackData, "query callback data") + + expectedTimeout := s.Ctx.BlockTime().UnixNano() + (tc.retryTimeoutDuration.Nanoseconds()) + s.Require().Equal(expectedTimeout, int64(actualQuery.TimeoutTimestamp), "query timeout timestamp") + + // Confirm the validator still has a query flagged as in progress + validator := hostZone.Validators[tc.valIndexQueried] + s.Require().True(validator.SlashQueryInProgress, "slash query is progress") +} + +func (s *KeeperTestSuite) TestDelegatorSharesCallback_Successful() { + tc := s.SetupDelegatorSharesICQCallback() + + // Callback + err := keeper.DelegatorSharesCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, tc.validArgs.query) + s.Require().NoError(err, "delegator shares callback error") + + // Confirm the staked balance was decreased on the host + hostZone, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, HostChainId) + s.Require().True(found, "host zone found") + s.Require().Equal(tc.expectedSlashAmount.Int64(), tc.hostZone.TotalDelegations.Sub(hostZone.TotalDelegations).Int64(), "staked bal slash") + + // Confirm the validator's weight and delegation amount were reduced + validator := hostZone.Validators[tc.valIndexQueried] + s.Require().Equal(tc.expectedWeight, validator.Weight, "validator weight") + s.Require().Equal(tc.expectedDelegationAmount.Int64(), validator.Delegation.Int64(), "validator delegation amount") + + // Confirm the validator query is no longer in progress + s.Require().False(validator.SlashQueryInProgress, "slash query in progress") +} + +func (s *KeeperTestSuite) TestDelegatorSharesCallback_Retry_DelegationChange() { + tc := s.SetupDelegatorSharesICQCallback() + + // Change the validator's delegation in the internal record keeping + // to make it look as if a delegation ICA landed while the query was in flight + hostZone := tc.hostZone + initialDelegation := hostZone.Validators[tc.valIndexQueried].Delegation.Add(sdkmath.NewInt(100)) + hostZone.Validators[tc.valIndexQueried].Delegation = initialDelegation + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + // Callback + err := keeper.DelegatorSharesCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, tc.validArgs.query) + s.Require().NoError(err, "no error expected during delegator shares callback") + + // Confirm the validator's delegation was not modified + hostZone, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, tc.hostZone.ChainId) + s.Require().True(found, "host zone found") + + validator := hostZone.Validators[tc.valIndexQueried] + s.Require().Equal(initialDelegation.Int64(), validator.Delegation.Int64(), "validator delegation") + s.Require().True(validator.SlashQueryInProgress, "slash query should still be in progress") + + // Confirm the query was resubmitted + // The new delegation amount should be stored in the callback data + callbackDataBz, err := proto.Marshal(&types.DelegatorSharesQueryCallback{ + InitialValidatorDelegation: initialDelegation, + }) + s.Require().NoError(err, "no error expected when marshalling callback data") + tc.validArgs.query.CallbackData = callbackDataBz + + s.CheckQueryWasResubmitted(tc, hostZone) +} + +func (s *KeeperTestSuite) TestDelegatorSharesCallback_Retry_DelegationICAInProgress() { + tc := s.SetupDelegatorSharesICQCallback() + + // Update the validator's delegation change ICA counter to show a change is in progress + initialHostZone := tc.hostZone + initialHostZone.Validators[tc.valIndexQueried].DelegationChangesInProgress = 1 + s.App.StakeibcKeeper.SetHostZone(s.Ctx, initialHostZone) + + // Callback + err := keeper.DelegatorSharesCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, tc.validArgs.query) + s.Require().NoError(err, "no error expected during delegator shares callback") + + // Confirm the validator's delegation was not modified + actualHostZone, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, HostChainId) + s.Require().True(found, "host zone found") + + initialDelegation := initialHostZone.Validators[tc.valIndexQueried].Delegation + actualValidator := actualHostZone.Validators[tc.valIndexQueried] + s.Require().Equal(initialDelegation.Int64(), actualValidator.Delegation.Int64(), "validator delegation") + s.Require().True(actualValidator.SlashQueryInProgress, "slash query should still be in progress") + + // Confirm the query was resubmitted + s.CheckQueryWasResubmitted(tc, actualHostZone) +} + +func (s *KeeperTestSuite) TestDelegatorSharesCallback_RetryFailure() { + tc := s.SetupDelegatorSharesICQCallback() + + // Change the validator's delegation in the internal record keeping + // to make it look as if a delegation ICA landed while the query was in flight + hostZone := tc.hostZone + initialDelegation := hostZone.Validators[tc.valIndexQueried].Delegation.Add(sdkmath.NewInt(100)) + hostZone.Validators[tc.valIndexQueried].Delegation = initialDelegation + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + // Remove the query connection ID so the retry attempt fails + invalidQuery := tc.validArgs.query + invalidQuery.ConnectionId = "" + + // Trigger the callback - this should attempt to retry the query + err := keeper.DelegatorSharesCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, invalidQuery) + s.Require().ErrorContains(err, "unable to resubmit delegator shares query: failed to retry query") +} + +func (s *KeeperTestSuite) checkStateIfValidatorNotSlashed(tc DelegatorSharesICQCallbackTestCase) { + // Confirm validator on host zone did not update + hostZone, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, HostChainId) + s.Require().True(found, "host zone found") + + initialValidator := tc.hostZone.Validators[tc.valIndexQueried] + finalValidator := hostZone.Validators[tc.valIndexQueried] + s.Require().Equal(initialValidator.Weight, finalValidator.Weight, "validator weight should not have updated") + s.Require().Equal(initialValidator.Delegation, finalValidator.Delegation, "validator delegation amount should not have updated") + s.Require().False(finalValidator.SlashQueryInProgress, "slash query in progress flag should be reset to false") +} + +func (s *KeeperTestSuite) TestDelegatorSharesCallback_HostZoneNotFound() { + tc := s.SetupDelegatorSharesICQCallback() + + // Set an incorrect host zone in the query + badQuery := tc.validArgs.query + badQuery.ChainId = "fake_host_zone" + + err := keeper.DelegatorSharesCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, badQuery) + s.Require().EqualError(err, "no registered zone for queried chain ID (fake_host_zone): host zone not found") +} + +func (s *KeeperTestSuite) TestDelegatorSharesCallback_InvalidCallbackArgs() { + tc := s.SetupDelegatorSharesICQCallback() + + // Submit callback with invalid callback args (so that it can't unmarshal into a validator) + invalidArgs := []byte("random bytes") + err := keeper.DelegatorSharesCallback(s.App.StakeibcKeeper, s.Ctx, invalidArgs, tc.validArgs.query) + s.Require().ErrorContains(err, "unable to unmarshal delegator shares query response into Delegation type") +} + +func (s *KeeperTestSuite) TestDelegatorSharesCallback_ValidatorNotFound() { + tc := s.SetupDelegatorSharesICQCallback() + + // Update the callback args to contain a validator address that doesn't exist + badCallbackArgs := s.CreateDelegatorSharesQueryResponse("fake_val", sdkmath.LegacyNewDec(1000)) // 1000 is aribtrary + err := keeper.DelegatorSharesCallback(s.App.StakeibcKeeper, s.Ctx, badCallbackArgs, tc.validArgs.query) + s.Require().EqualError(err, "no registered validator for address (fake_val): validator not found") +} + +func (s *KeeperTestSuite) TestDelegatorSharesCallback_NoSlashOccurred() { + tc := s.SetupDelegatorSharesICQCallback() + + // Update the delegator shares query response so that it shows that there was no slash + // shares_after_slash = (100% - slash_percentage) * share_if_not_slashed + // => share_if_not_slashed = shares_after_slash / (100% - slash_percentage) + validatorSharesIfNotSlashed := tc.numShares.Quo(sdkmath.LegacyOneDec().Sub(tc.slashPercentage)) + valAddress := tc.hostZone.Validators[tc.valIndexQueried].Address + queryResponse := s.CreateDelegatorSharesQueryResponse(valAddress, validatorSharesIfNotSlashed) + + err := keeper.DelegatorSharesCallback(s.App.StakeibcKeeper, s.Ctx, queryResponse, tc.validArgs.query) + s.Require().NoError(err, "delegator shares callback callback error") + + s.checkStateIfValidatorNotSlashed(tc) +} + +func (s *KeeperTestSuite) TestDelegatorSharesCallback_InvalidNumTokens() { + tc := s.SetupDelegatorSharesICQCallback() + + // Update the delegator shares query response so that it shows that there are more tokens delegated + // than were tracked in state (which shouldn't be possible) + // Any large number of shares will work here so we'll use 10_000 + valAddress := tc.hostZone.Validators[tc.valIndexQueried].Address + numShares := sdkmath.LegacyNewDec(10_000) + + badCallbackArgs := s.CreateDelegatorSharesQueryResponse(valAddress, numShares) + err := keeper.DelegatorSharesCallback(s.App.StakeibcKeeper, s.Ctx, badCallbackArgs, tc.validArgs.query) + + expectedErrMsg := "tokens returned from query is greater than the Delegation: invalid request" + s.Require().ErrorContains(err, expectedErrMsg) +} + +func (s *KeeperTestSuite) TestDelegatorSharesCallback_WeightOverfow() { + tc := s.SetupDelegatorSharesICQCallback() + + // Update the validator weight to max int so it overflows when casted + hostZone := tc.hostZone + validator := hostZone.Validators[tc.valIndexQueried] + validator.Weight = math.MaxUint64 + hostZone.Validators[tc.valIndexQueried] = validator + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + err := keeper.DelegatorSharesCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, tc.validArgs.query) + expectedErrMsg := `unable to convert validator weight to int64, err: overflow: ` + expectedErrMsg += `unable to cast \d+ of type uint64 to int64: unable to cast to safe cast int` + s.Require().Regexp(expectedErrMsg, err.Error()) +} + +func (s *KeeperTestSuite) TestDelegatorSharesCallback_PrecisionError() { + tc := s.SetupDelegatorSharesICQCallback() + initialValidator := tc.hostZone.Validators[tc.valIndexQueried] + + // Update the delegator shares query response so that it shows that there are 5 more tokens delegated + // than were tracked in state + // This should be interpretted as a precision error and our record keeping should be adjusted + precisionErrorTokens := sdkmath.NewInt(5) + precisionErrorShares := sdkmath.LegacyNewDecFromInt(precisionErrorTokens).Quo(tc.sharesToTokensRate) + sharesBeforeSlash := sdkmath.LegacyNewDecFromInt(initialValidator.Delegation).Quo(tc.sharesToTokensRate) + + queryShares := sharesBeforeSlash.Add(precisionErrorShares) + callbackArgs := s.CreateDelegatorSharesQueryResponse(initialValidator.Address, queryShares) + err := keeper.DelegatorSharesCallback(s.App.StakeibcKeeper, s.Ctx, callbackArgs, tc.validArgs.query) + s.Require().NoError(err) + + // Confirm host zone and validator were updated + hostZone, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, HostChainId) + s.Require().True(found, "host zone found") + + expectedTotalDelegation := tc.hostZone.TotalDelegations.Add(precisionErrorTokens) + s.Require().Equal(expectedTotalDelegation.Int64(), hostZone.TotalDelegations.Int64(), "host zone staked balance") + + validator := hostZone.Validators[tc.valIndexQueried] + expectedValDelegation := tc.hostZone.Validators[tc.valIndexQueried].Delegation.Add(precisionErrorTokens) + s.Require().False(validator.SlashQueryInProgress, "slash query in progress should have been reset") + s.Require().Equal(expectedValDelegation.Int64(), validator.Delegation.Int64(), "validator delegation amount") +} + +func (s *KeeperTestSuite) TestDelegatorSharesCallback_ZeroInternalDelegation() { + tc := s.SetupDelegatorSharesICQCallback() + initialValidator := tc.hostZone.Validators[tc.valIndexQueried] + + // Update the validator so that it currently has 0 assumed tokens + initialValidator.Delegation = sdkmath.ZeroInt() + s.App.StakeibcKeeper.SetHostZone(s.Ctx, tc.hostZone) + + tc.validArgs.query.CallbackData, _ = proto.Marshal(&types.DelegatorSharesQueryCallback{ + InitialValidatorDelegation: sdkmath.ZeroInt(), + }) + + // Update the delegator shares query response so that it shows that there are 5 more tokens delegated + queryTokens := sdkmath.NewInt(5) + queryShares := sdkmath.LegacyNewDecFromInt(queryTokens).Quo(tc.sharesToTokensRate) + + callbackArgs := s.CreateDelegatorSharesQueryResponse(initialValidator.Address, queryShares) + err := keeper.DelegatorSharesCallback(s.App.StakeibcKeeper, s.Ctx, callbackArgs, tc.validArgs.query) + s.Require().NoError(err) + + // Confirm host zone and validator were updated + hostZone, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, HostChainId) + s.Require().True(found, "host zone found") + + expectedTotalDelegation := tc.hostZone.TotalDelegations.Add(queryTokens) + s.Require().Equal(expectedTotalDelegation.Int64(), hostZone.TotalDelegations.Int64(), "host zone staked balance") + + validator := hostZone.Validators[tc.valIndexQueried] + s.Require().False(validator.SlashQueryInProgress, "slash query in progress should have been reset") + s.Require().Equal(queryTokens.Int64(), validator.Delegation.Int64(), "validator delegation amount") +} + +func (s *KeeperTestSuite) TestDelegatorSharesCallback_ZeroExternalDelegation() { + tc := s.SetupDelegatorSharesICQCallback() + initialValidator := tc.hostZone.Validators[tc.valIndexQueried] + + // Update the delegator shares query response so that it shows that there are 0 delegated tokens + queryShares := sdkmath.LegacyNewDec(0) + + callbackArgs := s.CreateDelegatorSharesQueryResponse(initialValidator.Address, queryShares) + err := keeper.DelegatorSharesCallback(s.App.StakeibcKeeper, s.Ctx, callbackArgs, tc.validArgs.query) + s.Require().NoError(err) + + // Confirm host zone and validator were updated + hostZone, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, HostChainId) + s.Require().True(found, "host zone found") + + expectedTotalDelegation := tc.hostZone.TotalDelegations.Sub(initialValidator.Delegation) + s.Require().Equal(expectedTotalDelegation.Int64(), hostZone.TotalDelegations.Int64(), "host zone staked balance") + + validator := hostZone.Validators[tc.valIndexQueried] + s.Require().False(validator.SlashQueryInProgress, "slash query in progress should have been reset") + s.Require().Zero(validator.Delegation.Int64(), "validator delegation amount") + + // Run the callback again, and confirm there's no failure (testing the case of 0 internal and external) + callbackArgs = s.CreateDelegatorSharesQueryResponse(initialValidator.Address, sdkmath.LegacyZeroDec()) + err = keeper.DelegatorSharesCallback(s.App.StakeibcKeeper, s.Ctx, callbackArgs, tc.validArgs.query) + s.Require().NoError(err) + + hostZone, found = s.App.StakeibcKeeper.GetHostZone(s.Ctx, HostChainId) + s.Require().True(found, "host zone found") + + expectedTotalDelegation = tc.hostZone.TotalDelegations.Sub(initialValidator.Delegation) + s.Require().Equal(expectedTotalDelegation.Int64(), hostZone.TotalDelegations.Int64(), "host zone staked balance") + + validator = hostZone.Validators[tc.valIndexQueried] + s.Require().False(validator.SlashQueryInProgress, "slash query in progress should have been reset") + s.Require().Zero(validator.Delegation.Int64(), "validator delegation amount") +} diff --git a/x/stakeibc/keeper/icqcallbacks_fee_balance.go b/x/stakeibc/keeper/icqcallbacks_fee_balance.go new file mode 100644 index 00000000000..f5299fa8218 --- /dev/null +++ b/x/stakeibc/keeper/icqcallbacks_fee_balance.go @@ -0,0 +1,93 @@ +package keeper + +import ( + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + proto "github.com/cosmos/gogoproto/proto" + + errorsmod "cosmossdk.io/errors" + ibctypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + "github.com/osmosis-labs/osmosis/v27/utils" + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + icqkeeper "github.com/osmosis-labs/osmosis/v27/x/interchainquery/keeper" + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// FeeBalanceCallback is a callback handler for FeeBalnce queries. +// The query response will return the fee account balance +// If the balance is non-zero, an ICA MsgTransfer is initated to the RewardsCollector account +// Note: for now, to get proofs in your ICQs, you need to query the entire store on the host zone! e.g. "store/bank/key" +func FeeBalanceCallback(k Keeper, ctx sdk.Context, args []byte, query icqtypes.Query) error { + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(query.ChainId, ICQCallbackID_FeeBalance, + "Starting fee balance callback, QueryId: %vs, QueryType: %s, Connection: %s", query.Id, query.QueryType, query.ConnectionId)) + + // Confirm host exists + chainId := query.ChainId + hostZone, found := k.GetHostZone(ctx, chainId) + if !found { + return errorsmod.Wrapf(types.ErrHostZoneNotFound, "no registered zone for queried chain ID (%s)", chainId) + } + + // Unmarshal the query response args to determine the balance + feeBalanceAmount, err := icqkeeper.UnmarshalAmountFromBalanceQuery(k.cdc, args) + if err != nil { + return errorsmod.Wrap(err, "unable to determine balance from query response") + } + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_FeeBalance, + "Query response - Fee Balance: %v %s", feeBalanceAmount, hostZone.HostDenom)) + + // Confirm the balance is greater than zero + if feeBalanceAmount.LTE(sdkmath.ZeroInt()) { + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_FeeBalance, + "No balance to transfer for address: %s, balance: %v", hostZone.FeeIcaAddress, feeBalanceAmount)) + return nil + } + + // Confirm the fee account has been initiated + if hostZone.FeeIcaAddress == "" { + return errorsmod.Wrapf(types.ErrICAAccountNotFound, "no fee account found for %s", chainId) + } + + // The ICA and transfer should both timeout before the end of the epoch + timeout, err := k.GetICATimeoutNanos(ctx, epochtypes.STRIDE_EPOCH) + if err != nil { + return errorsmod.Wrapf(err, "Failed to get ICATimeout from %s epoch", epochtypes.STRIDE_EPOCH) + } + + // get counterparty chain's transfer channel + transferChannel, found := k.IBCKeeper.ChannelKeeper.GetChannel(ctx, transfertypes.PortID, hostZone.TransferChannelId) + if !found { + return errorsmod.Wrapf(channeltypes.ErrChannelNotFound, "transfer channel %s not found", hostZone.TransferChannelId) + } + counterpartyChannelId := transferChannel.Counterparty.ChannelId + + // Prepare a MsgTransfer from the fee account to the rewards collector account + rewardsCoin := sdk.NewCoin(hostZone.HostDenom, feeBalanceAmount) + rewardsCollectorAddress := k.AccountKeeper.GetModuleAccount(ctx, types.RewardCollectorName).GetAddress() + transferMsg := ibctypes.NewMsgTransfer( + transfertypes.PortID, + counterpartyChannelId, + rewardsCoin, + hostZone.FeeIcaAddress, + rewardsCollectorAddress.String(), + clienttypes.Height{}, + timeout, + "", + ) + + msgs := []proto.Message{transferMsg} + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_FeeBalance, + "Preparing MsgTransfer of %v from the fee account to the rewards collector module account (for commission)", rewardsCoin.String())) + + // Send the transaction through SubmitTx + if _, err := k.SubmitTxsStrideEpoch(ctx, hostZone.ConnectionId, msgs, types.ICAAccountType_FEE, ICACallbackID_Reinvest, nil); err != nil { + return errorsmod.Wrapf(types.ErrICATxFailed, "Failed to SubmitTxs, Messages: %v, err: %s", msgs, err.Error()) + } + + return nil +} diff --git a/x/stakeibc/keeper/icqcallbacks_fee_balance_test.go b/x/stakeibc/keeper/icqcallbacks_fee_balance_test.go new file mode 100644 index 00000000000..bbe02712b54 --- /dev/null +++ b/x/stakeibc/keeper/icqcallbacks_fee_balance_test.go @@ -0,0 +1,220 @@ +package keeper_test + +import ( + "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/keeper" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +type FeeBalanceICQCallbackState struct { + hostZone types.HostZone + feeChannel Channel + feeBalance int64 + startICASequence uint64 +} + +type FeeBalanceICQCallbackArgs struct { + query icqtypes.Query + callbackArgs []byte +} + +type FeeBalanceICQCallbackTestCase struct { + initialState FeeBalanceICQCallbackState + validArgs FeeBalanceICQCallbackArgs +} + +func (s *KeeperTestSuite) SetupFeeBalanceCallbackTest() FeeBalanceICQCallbackTestCase { + feeAccountOwner := fmt.Sprintf("%s.%s", HostChainId, "FEE") + feeChannelId, feePortId := s.CreateICAChannel(feeAccountOwner) + feeAddress := s.IcaAddresses[feeAccountOwner] + + hostZone := types.HostZone{ + ChainId: HostChainId, + HostDenom: Atom, + ConnectionId: ibctesting.FirstConnectionID, + FeeIcaAddress: feeAddress, + TransferChannelId: ibctesting.FirstChannelID, + } + + strideEpochTracker := types.EpochTracker{ + EpochIdentifier: epochtypes.STRIDE_EPOCH, + EpochNumber: 1, + NextEpochStartTime: uint64(s.Coordinator.CurrentTime.UnixNano() + 30_000_000_000), // dictates timeouts + } + + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, strideEpochTracker) + + // Get the next sequence number to confirm if an ICA was sent + startSequence, found := s.App.IBCKeeper.ChannelKeeper.GetNextSequenceSend(s.Ctx, feePortId, feeChannelId) + s.Require().True(found, "sequence number not found before ICA") + + feeBalance := int64(100) + queryResponse := s.CreateBalanceQueryResponse(feeBalance, Atom) + + return FeeBalanceICQCallbackTestCase{ + initialState: FeeBalanceICQCallbackState{ + hostZone: hostZone, + feeChannel: Channel{ + PortID: feePortId, + ChannelID: feeChannelId, + }, + feeBalance: feeBalance, + startICASequence: startSequence, + }, + validArgs: FeeBalanceICQCallbackArgs{ + query: icqtypes.Query{ + Id: "0", + ChainId: HostChainId, + }, + callbackArgs: queryResponse, + }, + } +} + +// Helper function to check that no ICA was submitted in the case of the function exiting prematurely +func (s *KeeperTestSuite) CheckNoICASubmitted(tc FeeBalanceICQCallbackTestCase) { + feeChannel := tc.initialState.feeChannel + feePortId := feeChannel.PortID + feeChannelId := feeChannel.ChannelID + + // The sequence number should not have incremented + expectedSequence := tc.initialState.startICASequence + endSequence, found := s.App.IBCKeeper.ChannelKeeper.GetNextSequenceSend(s.Ctx, feePortId, feeChannelId) + s.Require().True(found, "sequence number not found after ICA") + s.Require().Equal(expectedSequence, endSequence, "sequence number after ICA") +} + +func (s *KeeperTestSuite) TestFeeBalanceCallback_Successful() { + tc := s.SetupFeeBalanceCallbackTest() + + // Get the sequence number before the ICA is submitted to confirm it incremented + feeChannel := tc.initialState.feeChannel + feePortId := feeChannel.PortID + feeChannelId := feeChannel.ChannelID + + // Call the ICQ callback + err := keeper.FeeBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, tc.validArgs.query) + s.Require().NoError(err) + + // Confirm the sequence number was incremented + expectedSequence := tc.initialState.startICASequence + 1 + actualSequence, found := s.App.IBCKeeper.ChannelKeeper.GetNextSequenceSend(s.Ctx, feePortId, feeChannelId) + s.Require().True(found, "sequence number not found after ICA") + s.Require().Equal(expectedSequence, actualSequence, "sequence number after ICA") +} + +func (s *KeeperTestSuite) TestFeeBalanceCallback_EmptyCallbackArgs() { + tc := s.SetupFeeBalanceCallbackTest() + + // Replace the query response an empty byte array (this happens when the account has not been registered yet) + emptyCallbackArgs := []byte{} + + // It should short circuit but not throw an error + err := keeper.FeeBalanceCallback(s.App.StakeibcKeeper, s.Ctx, emptyCallbackArgs, tc.validArgs.query) + s.Require().NoError(err) + + // No ICA should have been submitted + s.CheckNoICASubmitted(tc) +} + +func (s *KeeperTestSuite) TestFeeBalanceCallback_ZeroBalance() { + tc := s.SetupFeeBalanceCallbackTest() + + // Replace the query response with a coin that has a nil amount + tc.validArgs.callbackArgs = s.CreateBalanceQueryResponse(0, Atom) + + err := keeper.FeeBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, tc.validArgs.query) + s.Require().NoError(err) + + // Confirm revinvestment callback was not created + s.CheckNoICASubmitted(tc) +} + +func (s *KeeperTestSuite) TestFeeBalanceCallback_ZeroBalanceImplied() { + tc := s.SetupFeeBalanceCallbackTest() + + // Replace the query response with a coin that has a nil amount + coin := sdk.Coin{} + coinBz := s.App.RecordsKeeper.Cdc.MustMarshal(&coin) + tc.validArgs.callbackArgs = coinBz + + err := keeper.FeeBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, tc.validArgs.query) + s.Require().NoError(err) + + // Confirm revinvestment callback was not created + s.Require().Len(s.App.IcacallbacksKeeper.GetAllCallbackData(s.Ctx), 0, "number of callbacks found") +} + +func (s *KeeperTestSuite) TestFeeBalanceCallback_HostZoneNotFound() { + tc := s.SetupFeeBalanceCallbackTest() + + // Submit callback with incorrect host zone + invalidQuery := tc.validArgs.query + invalidQuery.ChainId = "fake_host_zone" + err := keeper.FeeBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, invalidQuery) + s.Require().EqualError(err, "no registered zone for queried chain ID (fake_host_zone): host zone not found") +} + +func (s *KeeperTestSuite) TestFeeBalanceCallback_InvalidArgs() { + tc := s.SetupFeeBalanceCallbackTest() + + // Submit callback with invalid callback args (so that it can't unmarshal into a coin) + invalidArgs := []byte("random bytes") + err := keeper.FeeBalanceCallback(s.App.StakeibcKeeper, s.Ctx, invalidArgs, tc.validArgs.query) + + s.Require().ErrorContains(err, "unable to determine balance from query response") +} + +func (s *KeeperTestSuite) TestFeeBalanceCallback_NoFeeAccount() { + tc := s.SetupFeeBalanceCallbackTest() + + // Remove the fee account + badHostZone := tc.initialState.hostZone + badHostZone.FeeIcaAddress = "" + s.App.StakeibcKeeper.SetHostZone(s.Ctx, badHostZone) + + err := keeper.FeeBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, tc.validArgs.query) + s.Require().EqualError(err, "no fee account found for GAIA: ICA acccount not found on host zone") +} + +func (s *KeeperTestSuite) TestFeeBalanceCallback_FailedToCalculatedTimeout() { + tc := s.SetupFeeBalanceCallbackTest() + + // Remove the epoch tracker so that it cannot calculate the ICA timeout + s.App.StakeibcKeeper.RemoveEpochTracker(s.Ctx, epochtypes.STRIDE_EPOCH) + + err := keeper.FeeBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, tc.validArgs.query) + s.Require().ErrorContains(err, "Failed to get ICATimeout from stride_epoch epoch:") +} + +func (s *KeeperTestSuite) TestFeeBalanceCallback_NoTransferChannel() { + tc := s.SetupFeeBalanceCallbackTest() + + // Set an invalid transfer channel so that the counterparty channel cannot be found + badHostZone := tc.initialState.hostZone + badHostZone.TransferChannelId = "channel-X" + s.App.StakeibcKeeper.SetHostZone(s.Ctx, badHostZone) + + err := keeper.FeeBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, tc.validArgs.query) + s.Require().EqualError(err, "transfer channel channel-X not found: channel not found") +} + +func (s *KeeperTestSuite) TestFeeBalanceCallback_FailedSubmitTx() { + tc := s.SetupFeeBalanceCallbackTest() + + // Remove connectionId from host zone so the ICA tx fails + badHostZone := tc.initialState.hostZone + badHostZone.ConnectionId = "connection-X" + s.App.StakeibcKeeper.SetHostZone(s.Ctx, badHostZone) + + err := keeper.FeeBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, tc.validArgs.query) + s.Require().ErrorContains(err, "Failed to SubmitTxs") + s.Require().ErrorContains(err, "connection connection-X not found") +} diff --git a/x/stakeibc/keeper/icqcallbacks_trade_converted_balance.go b/x/stakeibc/keeper/icqcallbacks_trade_converted_balance.go new file mode 100644 index 00000000000..9b2c1545fca --- /dev/null +++ b/x/stakeibc/keeper/icqcallbacks_trade_converted_balance.go @@ -0,0 +1,64 @@ +package keeper + +import ( + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + + errorsmod "cosmossdk.io/errors" + "github.com/cosmos/gogoproto/proto" + + icqkeeper "github.com/osmosis-labs/osmosis/v27/x/interchainquery/keeper" + + "github.com/osmosis-labs/osmosis/v27/utils" + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// TradeConvertedBalanceCallback is a callback handler for TradeConvertedBalance queries. +// The query response will return the trade account balance for a converted (foreign ibc) denom +// If the balance is non-zero, ICA MsgSends are submitted to transfer the discovered balance back to hostZone +// +// Note: for now, to get proofs in your ICQs, you need to query the entire store on the host zone! e.g. "store/bank/key" +func TradeConvertedBalanceCallback(k Keeper, ctx sdk.Context, args []byte, query icqtypes.Query) error { + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(query.ChainId, ICQCallbackID_TradeConvertedBalance, + "Starting trade converted balance callback, QueryId: %vs, QueryType: %s, Connection: %s", query.Id, query.QueryType, query.ConnectionId)) + + chainId := query.ChainId // should be the tradeZoneId + + // Unmarshal the query response args to determine the balance + tradeConvertedBalanceAmount, err := icqkeeper.UnmarshalAmountFromBalanceQuery(k.cdc, args) + if err != nil { + return errorsmod.Wrap(err, "unable to determine balance from query response") + } + + // Unmarshal the callback data containing the tradeRoute we are on + var tradeRouteCallback types.TradeRouteCallback + if err := proto.Unmarshal(query.CallbackData, &tradeRouteCallback); err != nil { + return errorsmod.Wrapf(err, "unable to unmarshal trade reward balance callback data") + } + + // Lookup the trade route from the keys in the callback + tradeRoute, found := k.GetTradeRoute(ctx, tradeRouteCallback.RewardDenom, tradeRouteCallback.HostDenom) + if !found { + return types.ErrTradeRouteNotFound.Wrapf("trade route from %s to %s not found", + tradeRouteCallback.RewardDenom, tradeRouteCallback.HostDenom) + } + + // Confirm the balance is greater than zero, or else exit with no further action + if tradeConvertedBalanceAmount.LTE(sdkmath.ZeroInt()) { + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_TradeConvertedBalance, + "Not enough balance of traded tokens yet, balance: %v", tradeConvertedBalanceAmount)) + return nil + } + + // Using ICA commands on the trade address, transfer the found converted tokens from the trade zone to the host zone + if err := k.TransferConvertedTokensTradeToHost(ctx, tradeConvertedBalanceAmount, tradeRoute); err != nil { + return errorsmod.Wrapf(err, "initiating transfer of converted tokens to back to host zone failed") + } + + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_TradeConvertedBalance, + "Sending discovered converted tokens %v %s from tradeZone back to hostZone", + tradeConvertedBalanceAmount, tradeRoute.HostDenomOnTradeZone)) + + return nil +} diff --git a/x/stakeibc/keeper/icqcallbacks_trade_converted_balance_test.go b/x/stakeibc/keeper/icqcallbacks_trade_converted_balance_test.go new file mode 100644 index 00000000000..cd58fe218e0 --- /dev/null +++ b/x/stakeibc/keeper/icqcallbacks_trade_converted_balance_test.go @@ -0,0 +1,137 @@ +package keeper_test + +import ( + "time" + + sdkmath "cosmossdk.io/math" + "github.com/cosmos/gogoproto/proto" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/keeper" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func (s *KeeperTestSuite) SetupTradeConvertedBalanceCallbackTestCase() BalanceQueryCallbackTestCase { + // Create the connection between Stride and HostChain with the withdrawal account initialized + tradeAccountOwner := types.FormatTradeRouteICAOwner(HostChainId, RewardDenom, HostDenom, types.ICAAccountType_CONVERTER_TRADE) + tradeChannelId, tradePortId := s.CreateICAChannel(tradeAccountOwner) + + route := types.TradeRoute{ + RewardDenomOnRewardZone: RewardDenom, + HostDenomOnHostZone: HostDenom, + HostDenomOnTradeZone: "ibc/host_on_trade", + + TradeToHostChannelId: "channel-2", + + HostAccount: types.ICAAccount{ + Address: "withdrawal-address", + }, + TradeAccount: types.ICAAccount{ + ChainId: HostChainId, + Address: "trade-address", + ConnectionId: ibctesting.FirstConnectionID, + Type: types.ICAAccountType_CONVERTER_TRADE, + }, + } + s.App.StakeibcKeeper.SetTradeRoute(s.Ctx, route) + + // Create and set the epoch tracker for timeouts + timeoutDuration := time.Second * 30 + s.CreateEpochForICATimeout(epochtypes.STRIDE_EPOCH, timeoutDuration) + + // Build query object and serialized query response + balance := sdkmath.NewInt(1_000_000) + callbackDataBz, _ := proto.Marshal(&types.TradeRouteCallback{ + RewardDenom: RewardDenom, + HostDenom: HostDenom, + }) + query := icqtypes.Query{CallbackData: callbackDataBz} + queryResponse := s.CreateBalanceQueryResponse(balance.Int64(), route.HostDenomOnTradeZone) + + return BalanceQueryCallbackTestCase{ + TradeRoute: route, + Balance: balance, + Response: ICQCallbackArgs{ + Query: query, + CallbackArgs: queryResponse, + }, + ChannelID: tradeChannelId, + PortID: tradePortId, + } +} + +// Verify that a normal TradeConvertedBalanceCallback does fire off the ICA for transfer +func (s *KeeperTestSuite) TestTradeConvertedBalanceCallback_Successful() { + tc := s.SetupTradeConvertedBalanceCallbackTestCase() + + // Check that the ICA was submitted from within the ICQ callback + s.CheckICATxSubmitted(tc.PortID, tc.ChannelID, func() error { + return keeper.TradeConvertedBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.Response.CallbackArgs, tc.Response.Query) + }) +} + +func (s *KeeperTestSuite) TestTradeConvertedBalanceCallback_ZeroBalance() { + tc := s.SetupTradeConvertedBalanceCallbackTestCase() + + // Replace the query response with a coin that has a zero amount + tc.Response.CallbackArgs = s.CreateBalanceQueryResponse(0, tc.TradeRoute.HostDenomOnHostZone) + + // We also remove the connection ID from the trade route so that, IF an ICA was submitted it would fail + // However, it should never go down this route since the balance is 0 + invalidRoute := tc.TradeRoute + invalidRoute.TradeAccount.ConnectionId = "bad-connection" + s.App.StakeibcKeeper.SetTradeRoute(s.Ctx, invalidRoute) + + err := keeper.TradeConvertedBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.Response.CallbackArgs, tc.Response.Query) + s.Require().NoError(err) +} + +func (s *KeeperTestSuite) TestTradeConvertedBalanceCallback_InvalidArgs() { + tc := s.SetupTradeConvertedBalanceCallbackTestCase() + + // Submit callback with invalid callback args (so that it can't unmarshal into a coin) + invalidArgs := []byte("random bytes") + + err := keeper.TradeConvertedBalanceCallback(s.App.StakeibcKeeper, s.Ctx, invalidArgs, tc.Response.Query) + s.Require().ErrorContains(err, "unable to determine balance from query response") +} + +func (s *KeeperTestSuite) TestTradeConvertedBalanceCallback_InvalidCallbackData() { + tc := s.SetupTradeConvertedBalanceCallbackTestCase() + + // Update the callback data so that it can't be successfully unmarshalled + invalidQuery := tc.Response.Query + invalidQuery.CallbackData = []byte("random bytes") + + err := keeper.TradeConvertedBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.Response.CallbackArgs, invalidQuery) + s.Require().ErrorContains(err, "unable to unmarshal trade reward balance callback data") +} + +func (s *KeeperTestSuite) TestTradeConvertedBalanceCallback_TradeRouteNotFound() { + tc := s.SetupTradeConvertedBalanceCallbackTestCase() + + // Update the callback data so that it keys to a trade route that doesn't exist + invalidCallbackDataBz, _ := proto.Marshal(&types.TradeRouteCallback{ + RewardDenom: RewardDenom, + HostDenom: "different-host-denom", + }) + invalidQuery := tc.Response.Query + invalidQuery.CallbackData = invalidCallbackDataBz + + err := keeper.TradeConvertedBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.Response.CallbackArgs, invalidQuery) + s.Require().ErrorContains(err, "trade route not found") +} + +func (s *KeeperTestSuite) TestTradeConvertedBalanceCallback_FailedSubmitTx() { + tc := s.SetupTradeConvertedBalanceCallbackTestCase() + + // Remove connectionId from host ICAAccount on TradeRoute so the ICA tx fails + invalidRoute := tc.TradeRoute + invalidRoute.TradeAccount.ConnectionId = "bad-connection" + s.App.StakeibcKeeper.SetTradeRoute(s.Ctx, invalidRoute) + + err := keeper.TradeConvertedBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.Response.CallbackArgs, tc.Response.Query) + s.Require().ErrorContains(err, "Failed to submit ICA tx") +} diff --git a/x/stakeibc/keeper/icqcallbacks_validator_exchange_rate.go b/x/stakeibc/keeper/icqcallbacks_validator_exchange_rate.go new file mode 100644 index 00000000000..60dcccbf2ef --- /dev/null +++ b/x/stakeibc/keeper/icqcallbacks_validator_exchange_rate.go @@ -0,0 +1,196 @@ +package keeper + +import ( + "fmt" + + sdkmath "cosmossdk.io/math" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/gogoproto/proto" + + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + + "github.com/osmosis-labs/osmosis/v27/utils" + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// ValidatorCallback is a callback handler for validator queries. +// +// In an attempt to get the ICA's delegation amount on a given validator, we have to query: +// 1. the validator's internal sharesToTokens rate +// 2. the Delegation ICA's delegated shares +// And apply the following equation: +// numTokens = numShares * sharesToTokensRate +// +// This is the callback from query #1 +// We only issue query #2 if the validator sharesToTokens rate from #1 has changed (indicating a slash) +func ValidatorSharesToTokensRateCallback(k Keeper, ctx sdk.Context, args []byte, query icqtypes.Query) error { + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(query.ChainId, ICQCallbackID_Validator, + "Starting validator sharesToTokens rate balance callback, QueryId: %vs, QueryType: %s, Connection: %s", + query.Id, query.QueryType, query.ConnectionId)) + + // Confirm host exists + chainId := query.ChainId + hostZone, found := k.GetHostZone(ctx, query.ChainId) + if !found { + return errorsmod.Wrapf(types.ErrHostZoneNotFound, "no registered zone for queried chain ID (%s)", chainId) + } + + // Determine if we're in a callback for the LSMLiquidStake by checking if the callback data is non-empty + // If this query was triggered manually, the callback data will be empty + inLSMLiquidStakeCallback := len(query.CallbackData) != 0 + + // If the query timed out, either fail the LSM liquid stake or, if this query was submitted manually, do nothing + if query.HasTimedOut(ctx.BlockTime()) { + if inLSMLiquidStakeCallback { + return k.LSMSlashQueryTimeout(ctx, hostZone, query) + } + return nil + } + + // Unmarshal the query response args into a Validator struct + queriedValidator := stakingtypes.Validator{} + if err := k.cdc.Unmarshal(args, &queriedValidator); err != nil { + return errorsmod.Wrapf(err, "unable to unmarshal query response into Validator type") + } + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_Validator, + "Query response - Validator: %s, Jailed: %v, Tokens: %v, Shares: %v", + queriedValidator.OperatorAddress, queriedValidator.Jailed, queriedValidator.Tokens, queriedValidator.DelegatorShares)) + + // Check the query response to identify if the validator was slashed + validatorWasSlashed, err := k.CheckIfValidatorWasSlashed(ctx, hostZone, queriedValidator) + if err != nil { + return err + } + + // If we are in the LSMLiquidStake callback, finish the transaction + if inLSMLiquidStakeCallback { + if err := k.LSMSlashQueryCallback(ctx, hostZone, query, validatorWasSlashed); err != nil { + return errorsmod.Wrapf(err, "unable to finish LSM liquid stake") + } + } + + // If the validator was slashed, we'll have to issue a delegator shares query to determine + // the magnitude of the slash + if validatorWasSlashed { + if err := k.SubmitDelegationICQ(ctx, hostZone, queriedValidator.OperatorAddress); err != nil { + return errorsmod.Wrapf(err, "Failed to submit ICQ validator delegations") + } + } + + return nil +} + +// Determines if the validator was slashed by comparing the validator sharesToTokens rate from the query response +// with the sharesToTokens rate stored on the validator +func (k Keeper) CheckIfValidatorWasSlashed( + ctx sdk.Context, + hostZone types.HostZone, + queriedValidator stakingtypes.Validator, +) (validatorWasSlashed bool, err error) { + // Get the validator from the host zone + validator, valIndex, found := GetValidatorFromAddress(hostZone.Validators, queriedValidator.OperatorAddress) + if !found { + return false, errorsmod.Wrapf(types.ErrValidatorNotFound, "no registered validator for address (%s)", queriedValidator.OperatorAddress) + } + previousSharesToTokensRate := validator.SharesToTokensRate + + // If the validator's delegation shares is 0, we'll get a division by zero error when trying to get the sharesToTokens rate + // because `validator.TokensFromShares` uses delegation shares in the denominator + if queriedValidator.DelegatorShares.IsZero() { + return false, errorsmod.Wrapf(types.ErrDivisionByZero, + "can't calculate validator internal sharesToTokens rate because delegation amount is 0 (validator: %s)", validator.Address) + } + + // We want the validator's internal sharesToTokens rate which is held internally + // behind the inverse of the function `validator.TokensFromShares` + // Since, + // sharesToTokensRate = numTokens / numShares + // We can use `validator.TokensFromShares`, plug in 1.0 for the number of shares, + // and the returned number of tokens will be equal to the internal sharesToTokens rate + currentSharesToTokensRate := queriedValidator.TokensFromShares(sdkmath.LegacyNewDec(1.0)) + validator.SharesToTokensRate = currentSharesToTokensRate + hostZone.Validators[valIndex] = &validator + k.SetHostZone(ctx, hostZone) + + // Check if the validator was slashed by comparing the sharesToTokens rate from the query + // with the preivously stored sharesToTokens rate + previousSharesToTokensRateKnown := !previousSharesToTokensRate.IsNil() && previousSharesToTokensRate.IsPositive() + validatorWasSlashed = previousSharesToTokensRateKnown && !previousSharesToTokensRate.Equal(currentSharesToTokensRate) + + if !validatorWasSlashed { + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(hostZone.ChainId, ICQCallbackID_Validator, + "Validator was not slashed")) + return false, nil + } + + // Emit an event if the validator was slashed + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(hostZone.ChainId, ICQCallbackID_Validator, + "Previous Validator SharesToTokens Rate: %v, Current Validator SharesToTokens Rate: %v", + previousSharesToTokensRate, currentSharesToTokensRate)) + + EmitValidatorSharesToTokensRateChangeEvent(ctx, hostZone.ChainId, validator.Address, previousSharesToTokensRate, currentSharesToTokensRate) + + return true, nil +} + +// Fails the LSM Liquid Stake if the query timed out +func (k Keeper) LSMSlashQueryTimeout(ctx sdk.Context, hostZone types.HostZone, query icqtypes.Query) error { + var callbackData types.ValidatorSharesToTokensQueryCallback + if err := proto.Unmarshal(query.CallbackData, &callbackData); err != nil { + return errorsmod.Wrapf(err, "unable to unmarshal validator sharesToTokens rate callback data") + } + lsmLiquidStake := *callbackData.LsmLiquidStake + + k.FailLSMLiquidStake(ctx, hostZone, lsmLiquidStake, "query timed out") + return nil +} + +// Callback handler for if the slash query was initiated by an LSMLiquidStake transaction +// If the validator was slashed, the LSMLiquidStake should be rejected +// If the validator was not slashed, the LSMLiquidStake should finish to mint the user stTokens +func (k Keeper) LSMSlashQueryCallback( + ctx sdk.Context, + hostZone types.HostZone, + query icqtypes.Query, + validatorWasSlashed bool, +) error { + var callbackData types.ValidatorSharesToTokensQueryCallback + if err := proto.Unmarshal(query.CallbackData, &callbackData); err != nil { + return errorsmod.Wrapf(err, "unable to unmarshal validator sharesToTokens rate callback data") + } + lsmLiquidStake := *callbackData.LsmLiquidStake + + // If the validator was slashed, fail the liquid stake + if validatorWasSlashed { + k.FailLSMLiquidStake(ctx, hostZone, lsmLiquidStake, "validator was slashed, failing LSMLiquidStake") + return nil + } + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(hostZone.ChainId, ICQCallbackID_Validator, + "Validator was not slashed, finishing LSM liquid stake")) + + // Finish the LSMLiquidStake with a temporary context so that the state changes can + // be discarded if it errors + err := utils.ApplyFuncIfNoError(ctx, func(ctx sdk.Context) error { + async := true + return k.FinishLSMLiquidStake(ctx, lsmLiquidStake, async) + }) + // If finishing the transaction failed, emit an event and remove the LSMTokenDeposit + if err != nil { + k.FailLSMLiquidStake(ctx, hostZone, lsmLiquidStake, + fmt.Sprintf("lsm liquid stake callback failed after slash query: %s", err.Error())) + } + + return nil +} + +// Fail an LSMLiquidStake transaction by emitting an event and removing the LSMTokenDeposit record +func (k Keeper) FailLSMLiquidStake(ctx sdk.Context, hostZone types.HostZone, lsmLiquidStake types.LSMLiquidStake, errorMessage string) { + EmitFailedLSMLiquidStakeEvent(ctx, hostZone, *lsmLiquidStake.Deposit, errorMessage) + k.Logger(ctx).Error(errorMessage) + + // Remove the LSMTokenDeposit + k.RecordsKeeper.RemoveLSMTokenDeposit(ctx, lsmLiquidStake.Deposit.ChainId, lsmLiquidStake.Deposit.Denom) +} diff --git a/x/stakeibc/keeper/icqcallbacks_validator_exchange_rate_test.go b/x/stakeibc/keeper/icqcallbacks_validator_exchange_rate_test.go new file mode 100644 index 00000000000..bf607172a0c --- /dev/null +++ b/x/stakeibc/keeper/icqcallbacks_validator_exchange_rate_test.go @@ -0,0 +1,527 @@ +package keeper_test + +import ( + "fmt" + "time" + + sdkmath "cosmossdk.io/math" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + + "github.com/cosmos/gogoproto/proto" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/bech32" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + + "github.com/osmosis-labs/osmosis/v27/utils" + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/keeper" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +type ValidatorICQCallbackState struct { + hostZone types.HostZone + validator types.Validator + delegator string + lsmTokenIBCDenom string + stakerBalance sdkmath.Int +} + +type ValidatorICQCallbackArgs struct { + query icqtypes.Query + callbackArgs []byte +} + +type ValidatorICQCallbackTestCase struct { + initialState ValidatorICQCallbackState + validArgs ValidatorICQCallbackArgs + sharesToTokensRateIfSlashed sdkmath.LegacyDec +} + +func (s *KeeperTestSuite) CreateValidatorQueryResponse(address string, tokens int64, shares int64) []byte { + validator := stakingtypes.Validator{ + OperatorAddress: address, + Tokens: sdkmath.NewInt(tokens), + DelegatorShares: sdkmath.LegacyNewDec(shares), + } + validatorBz := s.App.RecordsKeeper.Cdc.MustMarshal(&validator) + return validatorBz +} + +func (s *KeeperTestSuite) SetupValidatorICQCallback(validatorSlashed, liquidStakeCallback bool) ValidatorICQCallbackTestCase { + // The transfer channel is required in the event that we're testing an LSMCallback and have to transfer the LSM Token + s.CreateTransferChannel(HostChainId) + + // These must be valid delegation account address, otherwise the bech decoding will fail + delegatorAddress := "cosmos1sy63lffevueudvvlvh2lf6s387xh9xq72n3fsy6n2gr5hm6u2szs2v0ujm" + depositAddress := types.NewHostZoneDepositAddress(HostChainId).String() + + // In this example, the validator has 2000 shares, originally had 2000 tokens, + // and now has 1000 tokens (after being slashed) + numShares := int64(2000) + sharesToTokensRate := sdkmath.LegacyNewDec(1) + sharesToTokensRateIfSlashed := sdkmath.LegacyMustNewDecFromStr("0.5") + + // The validator we'll query the sharesToTokens rate for + queriedValidator := types.Validator{ + Name: "val1", + Address: ValAddress, + SharesToTokensRate: sharesToTokensRate, + } + + // Mocked state is required for (optional) delegator shares ICQ submission + // and (optional) LSM Liquid Stake completion + hostZone := types.HostZone{ + ChainId: HostChainId, + ConnectionId: ibctesting.FirstConnectionID, + TransferChannelId: ibctesting.FirstChannelID, + DelegationIcaAddress: delegatorAddress, + DepositAddress: depositAddress, + RedemptionRate: sdkmath.LegacyNewDec(1), + Validators: []*types.Validator{ + &queriedValidator, + {Name: "val2"}, // This validator isn't being queried + }, + LsmLiquidStakeEnabled: true, + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + // Mock out the query response (which will be a validator object) + // If we're testing that a slash occurred, cut the number tokens in half (to represent the slash) + // Otherwise, use the same number of tokens as shares + numTokens := numShares + if validatorSlashed { + numTokens /= 2 + } + queryResponse := s.CreateValidatorQueryResponse(ValAddress, numTokens, numShares) + + // If we're testing a liquid stake callback, mock out the callback data + var err error + lsmTokenIBCDenom := "" + callbackDataBz := []byte{} + stakeAmount := sdkmath.NewInt(1_000_000) + if liquidStakeCallback { + // Need valid IBC denom here to test parsing + lsmTokenIBCDenom = s.getLSMTokenIBCDenom() + + // Fund the user's account with the LSM token + liquidStaker := s.TestAccs[0] + s.FundAccount(liquidStaker, sdk.NewCoin(lsmTokenIBCDenom, stakeAmount)) + + // The callback data consists of the LSMTokenDeposit wrapped in additional state context + lsmTokenDeposit := recordstypes.LSMTokenDeposit{ + ChainId: HostChainId, + Denom: LSMTokenBaseDenom, + StakerAddress: liquidStaker.String(), + Amount: stakeAmount, + IbcDenom: lsmTokenIBCDenom, + StToken: sdk.NewCoin(StAtom, stakeAmount), + } + lsmLiquidStake := types.LSMLiquidStake{ + HostZone: &hostZone, + Validator: &queriedValidator, + Deposit: &lsmTokenDeposit, + } + callbackDataBz, err = proto.Marshal(&types.ValidatorSharesToTokensQueryCallback{ + LsmLiquidStake: &lsmLiquidStake, + }) + s.Require().NoError(err, "no error expected when marshalling callback data") + } + + return ValidatorICQCallbackTestCase{ + initialState: ValidatorICQCallbackState{ + hostZone: hostZone, + validator: queriedValidator, + delegator: delegatorAddress, + lsmTokenIBCDenom: lsmTokenIBCDenom, + stakerBalance: stakeAmount, + }, + sharesToTokensRateIfSlashed: sharesToTokensRateIfSlashed, + validArgs: ValidatorICQCallbackArgs{ + query: icqtypes.Query{ + ChainId: HostChainId, + CallbackData: callbackDataBz, + TimeoutTimestamp: uint64(s.Ctx.BlockTime().Add(time.Minute).UnixNano()), + }, + callbackArgs: queryResponse, + }, + } +} + +// Helper function to check the validator's shares to tokens rate after the query +func (s *KeeperTestSuite) checkValidatorSharesToTokensRate(expectedSharesToTokensRate sdkmath.LegacyDec) { + hostZone, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, HostChainId) + s.Require().True(found, "host zone found") + s.Require().Equal(expectedSharesToTokensRate.String(), hostZone.Validators[0].SharesToTokensRate.String(), + "validator shares to tokens rate") +} + +// Check that the LSMLiquidStake callback succeeded by looking for a successful event emission +func (s *KeeperTestSuite) checkLSMLiquidStakeSuccess() { + s.CheckEventValueEmitted( + types.EventTypeLSMLiquidStakeRequest, + types.AttributeKeyTransactionStatus, + types.AttributeValueTransactionSucceeded, + ) +} + +// Check that the LSMLiquidStake callback failed by looking for a failed event emission +func (s *KeeperTestSuite) checkLSMLiquidStakeFailed() { + // Confirm failure was emitted + s.CheckEventValueEmitted( + types.EventTypeLSMLiquidStakeRequest, + types.AttributeKeyTransactionStatus, + types.AttributeValueTransactionFailed, + ) + // Confirm success was NOT emitted (to confirm short circuiting) + s.CheckEventValueNotEmitted( + types.EventTypeLSMLiquidStakeRequest, + types.AttributeKeyTransactionStatus, + types.AttributeValueTransactionSucceeded, + ) +} + +// Check that the liquid stake code was not called +func (s *KeeperTestSuite) checkLSMLiquidStakeNotCalled() { + s.CheckEventTypeNotEmitted(types.EventTypeLSMLiquidStakeRequest) +} + +// Helper function to check that the delegator shares query was submitted by checking +// that the query object was stored +func (s *KeeperTestSuite) checkDelegatorSharesQuerySubmitted(tc ValidatorICQCallbackTestCase) { + // Check that this is only one query in the store + queries := s.App.InterchainqueryKeeper.AllQueries(s.Ctx) + s.Require().Len(queries, 1, "there should be one new query submitted for delegator shares") + + // Confirm the query metadata matches expectations + query := queries[0] + s.Require().Equal(HostChainId, query.ChainId, "query chain-id") + s.Require().Equal(ibctesting.FirstConnectionID, query.ConnectionId, "query connnection-id") + s.Require().Equal(icqtypes.STAKING_STORE_QUERY_WITH_PROOF, query.QueryType, "query type") + s.Require().Equal(types.ModuleName, query.CallbackModule, "query callback module") + s.Require().Equal(keeper.ICQCallbackID_Delegation, query.CallbackId, "query callback-id") + s.Require().Equal(false, query.RequestSent, "query sent") + + // Confirm validator and delegator are in query data + _, validatorAddressBz, err := bech32.DecodeAndConvert(ValAddress) + s.Require().NoError(err, "no error expected when decoding validator address") + + _, delegatorAddressBz, err := bech32.DecodeAndConvert(tc.initialState.delegator) + s.Require().NoError(err, "no error expected when decoding delegation address") + + expectedQueryData := stakingtypes.GetDelegationKey(delegatorAddressBz, validatorAddressBz) + s.Require().Equal(expectedQueryData, query.RequestData, "query request-data") + + // Confirm timeout based on the type of query (LSM or manual) + timeoutDuration := time.Hour + expectedTimeout := s.Ctx.BlockTime().UnixNano() + (timeoutDuration).Nanoseconds() + s.Require().Equal(timeoutDuration, query.TimeoutDuration, "query timeout duration") + s.Require().Equal(expectedTimeout, int64(query.TimeoutTimestamp), "query timeout timestamp") + + // Confirm query callback data + var callbackData types.DelegatorSharesQueryCallback + err = proto.Unmarshal(query.CallbackData, &callbackData) + s.Require().NoError(err, "no error expected when unmarshalling callback data") + + expectedInitialDelegation := tc.initialState.validator.Delegation + s.Require().Equal(expectedInitialDelegation.Int64(), callbackData.InitialValidatorDelegation.Int64(), + "query callback-data initial delegation") + + // Confirm the validator's flagged as having a query in progress + hostZone, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, HostChainId) + s.Require().True(found, "host zone should have been found") + s.Require().True(hostZone.Validators[0].SlashQueryInProgress, "slash query in progress") +} + +// Helper function to check that the delegator shares query was not submitted +// by confirming there are no queries in the store +func (s *KeeperTestSuite) checkDelegatorSharesQueryNotSubmitted() { + s.Require().Empty(s.App.InterchainqueryKeeper.AllQueries(s.Ctx), "the delegator shares query should not have been submitted") +} + +// Test case where the callback was successful, there was no slash, and this was not a liquid stake callback +// Here the sharesToTokens rate should not update and there should be no delegator shares query submitted +func (s *KeeperTestSuite) TestValidatorSharesToTokensRateCallback_Successful_NoSlash_NoLiquidStake() { + validatorSlashed := false + lsmCallback := false + tc := s.SetupValidatorICQCallback(validatorSlashed, lsmCallback) + + err := keeper.ValidatorSharesToTokensRateCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, tc.validArgs.query) + s.Require().NoError(err, "validator sharesToTokens rate callback error") + + // Confirm validator's sharesToTokens rate DID NOT update + expectedSharesToTokensRate := tc.initialState.validator.SharesToTokensRate + s.checkValidatorSharesToTokensRate(expectedSharesToTokensRate) + + // Confirm the delegator shares query WAS NOT submitted + s.checkDelegatorSharesQueryNotSubmitted() + + // Confirm the liquid stake flow as not touched + s.checkLSMLiquidStakeNotCalled() +} + +// Test case where the callback was successful and there was a slash, but the query was issued manually +// Here the sharesToTokens rate should update and the delegator shares query should be submitted +func (s *KeeperTestSuite) TestValidatorSharesToTokensRateCallback_Successful_Slash_NoLiquidStake() { + validatorSlashed := true + lsmCallback := false + tc := s.SetupValidatorICQCallback(validatorSlashed, lsmCallback) + + err := keeper.ValidatorSharesToTokensRateCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, tc.validArgs.query) + s.Require().NoError(err, "validator sharesToTokens rate callback error") + + // Confirm validator's sharesToTokens rate DID update + s.checkValidatorSharesToTokensRate(tc.sharesToTokensRateIfSlashed) + + // Confirm delegator shares query WAS submitted + s.checkDelegatorSharesQuerySubmitted(tc) + + // Confirm the liquid stake flow as not touched + s.checkLSMLiquidStakeNotCalled() +} + +// Test case where the callback was successful, there was no slash, and this query was from a liquid stake +// Here the sharesToTokens rate should not update, the delegator shares query should not be submitted, and +// the liquid stake should have succeeded +func (s *KeeperTestSuite) TestValidatorSharesToTokensRateCallback_Successful_NoSlash_LiquidStake() { + validatorSlashed := false + lsmCallback := true + tc := s.SetupValidatorICQCallback(validatorSlashed, lsmCallback) + + err := keeper.ValidatorSharesToTokensRateCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, tc.validArgs.query) + s.Require().NoError(err, "validator sharesToTokens rate callback error") + + // Confirm validator's sharesToTokens rate DID NOT update + expectedSharesToTokensRate := tc.initialState.validator.SharesToTokensRate + s.checkValidatorSharesToTokensRate(expectedSharesToTokensRate) + + // Confirm the delegator shares query WAS NOT submitted + s.checkDelegatorSharesQueryNotSubmitted() + + // Confirm the liquid stake was a success + s.checkLSMLiquidStakeSuccess() +} + +// Test case where the callback was successful and this query was from a liquid stake, +// but the finishing of the liquid stake failed +// Any state changes from the finish liquid stake should be discarded, including +// the transfer of LSM tokens to the deposit account +func (s *KeeperTestSuite) TestValidatorSharesToTokensRateCallback_Successful_NoSlash_LiquidStakeFailed() { + validatorSlashed := false + lsmCallback := true + tc := s.SetupValidatorICQCallback(validatorSlashed, lsmCallback) + + // Remove the host zone's delegation account - this should cause the finishing of the LSM liquid stake to fail + var callbackData types.ValidatorSharesToTokensQueryCallback + err := proto.Unmarshal(tc.validArgs.query.CallbackData, &callbackData) + s.Require().NoError(err, "no error expected when unmarshaling query args") + + callbackData.LsmLiquidStake.HostZone.DelegationIcaAddress = "" + invalidCallbackData, err := proto.Marshal(&callbackData) + s.Require().NoError(err, "no error expected when marshaling query args") + + invalidQuery := tc.validArgs.query + invalidQuery.CallbackData = invalidCallbackData + + // When the callback runs, the finishing of the LSM liquid stake should make partial state changes, including + // the sending of LSM tokens to the module account + // However, that change should be discarded since the liquid stake failed + err = keeper.ValidatorSharesToTokensRateCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, invalidQuery) + s.Require().NoError(err, "validator sharesToTokens rate callback error") + + // Confirm validator's sharesToTokens rate DID NOT update + expectedSharesToTokensRate := tc.initialState.validator.SharesToTokensRate + s.checkValidatorSharesToTokensRate(expectedSharesToTokensRate) + + // Confirm delegator shares query WAS NOT submitted + s.checkDelegatorSharesQueryNotSubmitted() + + // Confirm the liquid stake failed + // We'll check both that the failed event was emitted, and the success event was not emitted + // (to confirm short circuiting) + s.checkLSMLiquidStakeFailed() + + // Confirm the tokens were not sent to the module account since the state changes were discarded + stakerBalance := s.App.BankKeeper.GetBalance(s.Ctx, s.TestAccs[0], tc.initialState.lsmTokenIBCDenom) + s.Require().Equal(tc.initialState.stakerBalance.Int64(), stakerBalance.Amount.Int64(), + "staker balance after failed liquid stake") +} + +// Test case where the callback was successful, there was a slash, and this query was from a liquid stake +// Here the sharesToTokens rate should update, the delegator shares query should be submitted, +// and the liquid stake should be rejected +func (s *KeeperTestSuite) TestValidatorSharesToTokensRateCallback_Successful_Slash_LiquidStake() { + validatorSlashed := true + lsmCallback := true + tc := s.SetupValidatorICQCallback(validatorSlashed, lsmCallback) + + err := keeper.ValidatorSharesToTokensRateCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, tc.validArgs.query) + s.Require().NoError(err, "validator sharesToTokens rate callback error") + + // Confirm validator's sharesToTokens rate DID update + s.checkValidatorSharesToTokensRate(tc.sharesToTokensRateIfSlashed) + + // Confirm delegator shares query WAS submitted + s.checkDelegatorSharesQuerySubmitted(tc) + + // Confirm the liquid stake failed + s.checkLSMLiquidStakeFailed() +} + +// Test case where the callback was successful, but there was not previous sharesToTokens rate to determine if a slash occured +func (s *KeeperTestSuite) TestValidatorSharesToTokensRateCallback_Successful_NoPreviousSharesToTokensRate() { + validatorSlashed := false + tc := s.SetupValidatorICQCallback(validatorSlashed, false) + + // The sharesToTokens rate should update to the initial sharesToTokens rate from the test setup + expectedSharesToTokensRate := tc.initialState.validator.SharesToTokensRate + + // Set the sharesToTokens rate to zero + hostZone := tc.initialState.hostZone + hostZone.Validators[0].SharesToTokensRate = sdkmath.LegacyZeroDec() + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + err := keeper.ValidatorSharesToTokensRateCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, tc.validArgs.query) + s.Require().NoError(err, "validator sharesToTokens rate callback error") + + // Confirm validator's sharesToTokens rate DID update + s.checkValidatorSharesToTokensRate(expectedSharesToTokensRate) + + // Confirm delegator shares query WAS NOT submitted + s.checkDelegatorSharesQueryNotSubmitted() +} + +// Test case where the there was no slash, but the liquid stake callback failed +func (s *KeeperTestSuite) TestValidatorSharesToTokensRateCallback_NoSlash_LiqudStakeFailed() { + validatorSlashed := false + lsmCallback := true + tc := s.SetupValidatorICQCallback(validatorSlashed, lsmCallback) + + // Remove the LSM tokens from the user account so that they have insufficient funds to finish the liquid stake + liquidStaker := s.TestAccs[0] + recipient := s.TestAccs[1] + balance := s.App.BankKeeper.GetBalance(s.Ctx, liquidStaker, tc.initialState.lsmTokenIBCDenom) + err := utils.SafeSendCoins(true, s.App.BankKeeper, s.Ctx, liquidStaker, recipient, sdk.NewCoins(balance)) + s.Require().NoError(err, "no error expected when sending liquid staker's LSM tokens") + + // Now when we call the callback, the callback itself should succeed, but the finishing of the liquid stake should fail + err = keeper.ValidatorSharesToTokensRateCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, tc.validArgs.query) + s.Require().NoError(err, "validator sharesToTokens rate callback error") + + // Confirm validator's sharesToTokens rate DID update + expectedSharesToTokensRate := tc.initialState.validator.SharesToTokensRate + s.checkValidatorSharesToTokensRate(expectedSharesToTokensRate) + + // Confirm delegator shares query WAS NOT submitted + s.checkDelegatorSharesQueryNotSubmitted() + + // Confirm the liquid stake failed + s.checkLSMLiquidStakeFailed() +} + +func (s *KeeperTestSuite) TestValidatorSharesToTokensRateCallback_NoLiquidStake_QueryTimeout() { + lsmCallback := false + tc := s.SetupValidatorICQCallback(false, lsmCallback) + + // Update the query so that it timed out + badQuery := tc.validArgs.query + badQuery.TimeoutTimestamp = 0 + + err := keeper.ValidatorSharesToTokensRateCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, badQuery) + s.Require().NoError(err, "validator shares to tokens rate callback error") + + // Confirm validator's shares to tokens rate DID NOT update + expectedSharesToTokensRate := tc.initialState.validator.SharesToTokensRate + s.checkValidatorSharesToTokensRate(expectedSharesToTokensRate) + + // Confirm delegator shares query WAS NOT submitted + s.checkDelegatorSharesQueryNotSubmitted() +} + +func (s *KeeperTestSuite) TestValidatorSharesToTokensRateCallback_LiquidStake_QueryTimeout() { + lsmCallback := true + tc := s.SetupValidatorICQCallback(false, lsmCallback) + + // Update the query so that it timed out + badQuery := tc.validArgs.query + badQuery.TimeoutTimestamp = 0 + + err := keeper.ValidatorSharesToTokensRateCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, badQuery) + s.Require().NoError(err, "validator shares to tokens rate callback error") + + // Confirm validator's shares to tokens rate DID NOT update + expectedSharesToTokensRate := tc.initialState.validator.SharesToTokensRate + s.checkValidatorSharesToTokensRate(expectedSharesToTokensRate) + + // Confirm delegator shares query WAS NOT submitted + s.checkDelegatorSharesQueryNotSubmitted() + + // Confirm the liquid stake failed + s.checkLSMLiquidStakeFailed() +} + +func (s *KeeperTestSuite) TestValidatorSharesToTokensRateCallback_HostZoneNotFound() { + tc := s.SetupValidatorICQCallback(false, false) + + // Set an incorrect host zone in the query + badQuery := tc.validArgs.query + badQuery.ChainId = "fake_host_zone" + + err := keeper.ValidatorSharesToTokensRateCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, badQuery) + s.Require().EqualError(err, "no registered zone for queried chain ID (fake_host_zone): host zone not found") +} + +func (s *KeeperTestSuite) TestValidatorSharesToTokensRateCallback_InvalidCallbackArgs() { + tc := s.SetupValidatorICQCallback(false, false) + + // Submit callback with invalid callback args (so that it can't unmarshal into a validator) + invalidArgs := []byte("random bytes") + err := keeper.ValidatorSharesToTokensRateCallback(s.App.StakeibcKeeper, s.Ctx, invalidArgs, tc.validArgs.query) + s.Require().ErrorContains(err, "unable to unmarshal query response into Validator type") +} + +func (s *KeeperTestSuite) TestValidatorSharesToTokensRateCallback_InvalidCallbackData() { + tc := s.SetupValidatorICQCallback(false, false) + + // Submit callback with invalid callback args (so that it can't unmarshal into a validator) + invalidQuery := tc.validArgs.query + invalidQuery.CallbackData = []byte("random bytes") + + err := keeper.ValidatorSharesToTokensRateCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, invalidQuery) + s.Require().ErrorContains(err, "unable to unmarshal validator sharesToTokens rate callback data") +} + +func (s *KeeperTestSuite) TestValidatorSharesToTokensRateCallback_ValidatorNotFound() { + tc := s.SetupValidatorICQCallback(false, false) + + // Update the callback args to contain a validator address that doesn't exist + badCallbackArgs := s.CreateValidatorQueryResponse("fake_val", 1, 1) + err := keeper.ValidatorSharesToTokensRateCallback(s.App.StakeibcKeeper, s.Ctx, badCallbackArgs, tc.validArgs.query) + s.Require().EqualError(err, "no registered validator for address (fake_val): validator not found") +} + +func (s *KeeperTestSuite) TestValidatorSharesToTokensRateCallback_DelegatorSharesZero() { + tc := s.SetupValidatorICQCallback(false, false) + + // Set the delegator shares to 0, which cause division by zero in `validator.TokensFromShares` + valAddress := tc.initialState.validator.Address + badCallbackArgs := s.CreateValidatorQueryResponse(valAddress, 1000, 0) // the 1000 is arbitrary, the zero here is what matters + err := keeper.ValidatorSharesToTokensRateCallback(s.App.StakeibcKeeper, s.Ctx, badCallbackArgs, tc.validArgs.query) + + expectedErrMsg := "can't calculate validator internal sharesToTokens rate because delegation amount is 0 " + expectedErrMsg += fmt.Sprintf("(validator: %s): division by zero", valAddress) + s.Require().EqualError(err, expectedErrMsg) +} + +func (s *KeeperTestSuite) TestValidatorSharesToTokensRateCallback_DelegationQueryFailed() { + tc := s.SetupValidatorICQCallback(true, false) + + // Remove host zone delegation address so delegation query fails + badHostZone := tc.initialState.hostZone + badHostZone.DelegationIcaAddress = "" + s.App.StakeibcKeeper.SetHostZone(s.Ctx, badHostZone) + + err := keeper.ValidatorSharesToTokensRateCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, tc.validArgs.query) + s.Require().ErrorContains(err, "Failed to submit ICQ validator delegations") +} diff --git a/x/stakeibc/keeper/icqcallbacks_withdrawal_host_balance.go b/x/stakeibc/keeper/icqcallbacks_withdrawal_host_balance.go new file mode 100644 index 00000000000..94f6e50b839 --- /dev/null +++ b/x/stakeibc/keeper/icqcallbacks_withdrawal_host_balance.go @@ -0,0 +1,125 @@ +package keeper + +import ( + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + + errorsmod "cosmossdk.io/errors" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + "github.com/cosmos/gogoproto/proto" + + icqkeeper "github.com/osmosis-labs/osmosis/v27/x/interchainquery/keeper" + + "github.com/osmosis-labs/osmosis/v27/utils" + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// WithdrawalHostBalanceCallback is a callback handler for WithdrawalBalance queries. +// The query response will return the withdrawal account balance for the native denom (i.e. "host denom") +// If the balance is non-zero, ICA MsgSends are submitted to transfer from the withdrawal account +// to the delegation account (for reinvestment) and fee account (for commission) +// +// Note: for now, to get proofs in your ICQs, you need to query the entire store on the host zone! e.g. "store/bank/key" +func WithdrawalHostBalanceCallback(k Keeper, ctx sdk.Context, args []byte, query icqtypes.Query) error { + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(query.ChainId, ICQCallbackID_WithdrawalHostBalance, + "Starting withdrawal balance callback, QueryId: %vs, QueryType: %s, Connection: %s", query.Id, query.QueryType, query.ConnectionId)) + + // Confirm host exists + chainId := query.ChainId + hostZone, found := k.GetHostZone(ctx, chainId) + if !found { + return errorsmod.Wrapf(types.ErrHostZoneNotFound, "no registered zone for queried chain ID (%s)", chainId) + } + + // Unmarshal the query response args to determine the balance + withdrawalBalanceAmount, err := icqkeeper.UnmarshalAmountFromBalanceQuery(k.cdc, args) + if err != nil { + return errorsmod.Wrap(err, "unable to determine balance from query response") + } + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_WithdrawalHostBalance, + "Query response - Withdrawal Balance: %v %s", withdrawalBalanceAmount, hostZone.HostDenom)) + + // Confirm the balance is greater than zero + if withdrawalBalanceAmount.LTE(sdkmath.ZeroInt()) { + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_WithdrawalHostBalance, + "No balance to transfer for address: %s, balance: %v", hostZone.WithdrawalIcaAddress, withdrawalBalanceAmount)) + return nil + } + + // Get the host zone's ICA accounts + if hostZone.WithdrawalIcaAddress == "" { + return errorsmod.Wrapf(types.ErrICAAccountNotFound, "no withdrawal account found for %s", chainId) + } + if hostZone.DelegationIcaAddress == "" { + return errorsmod.Wrapf(types.ErrICAAccountNotFound, "no delegation account found for %s", chainId) + } + if hostZone.FeeIcaAddress == "" { + return errorsmod.Wrapf(types.ErrICAAccountNotFound, "no fee account found for %s", chainId) + } + + // Split the withdrawal amount into the stride fee and reinvest portion + rewardsSplit, err := k.CalculateRewardsSplit(ctx, hostZone, withdrawalBalanceAmount) + if err != nil { + return errorsmod.Wrapf(err, "unable to split reward amount into fee and reinvest amounts") + } + + // Prepare MsgSends from the withdrawal account + feeCoin := sdk.NewCoin(hostZone.HostDenom, rewardsSplit.StrideFeeAmount) + reinvestCoin := sdk.NewCoin(hostZone.HostDenom, rewardsSplit.ReinvestAmount) + rebateCoin := sdk.NewCoin(hostZone.HostDenom, rewardsSplit.RebateAmount) + + var msgs []proto.Message + if feeCoin.Amount.GT(sdkmath.ZeroInt()) { + msgs = append(msgs, &banktypes.MsgSend{ + FromAddress: hostZone.WithdrawalIcaAddress, + ToAddress: hostZone.FeeIcaAddress, + Amount: sdk.NewCoins(feeCoin), + }) + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_WithdrawalHostBalance, + "Preparing MsgSends of %v from the withdrawal account to the fee account (for commission)", feeCoin.String())) + } + if reinvestCoin.Amount.GT(sdkmath.ZeroInt()) { + msgs = append(msgs, &banktypes.MsgSend{ + FromAddress: hostZone.WithdrawalIcaAddress, + ToAddress: hostZone.DelegationIcaAddress, + Amount: sdk.NewCoins(reinvestCoin), + }) + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_WithdrawalHostBalance, + "Preparing MsgSends of %v from the withdrawal account to the delegation account (for reinvestment)", reinvestCoin.String())) + } + if rebateCoin.Amount.GT(sdkmath.ZeroInt()) { + fundMsg, err := k.BuildFundCommunityPoolMsg(ctx, hostZone, sdk.NewCoins(rebateCoin), types.ICAAccountType_WITHDRAWAL) + if err != nil { + return err + } + msgs = append(msgs, fundMsg...) + } + + // add callback data before calling reinvestment ICA + reinvestCallback := types.ReinvestCallback{ + ReinvestAmount: reinvestCoin, + HostZoneId: hostZone.ChainId, + } + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_WithdrawalHostBalance, "Marshalling ReinvestCallback args: %v", reinvestCallback)) + marshalledCallbackArgs, err := k.MarshalReinvestCallbackArgs(ctx, reinvestCallback) + if err != nil { + return err + } + + // Send the transaction through SubmitTx + _, err = k.SubmitTxsStrideEpoch(ctx, hostZone.ConnectionId, msgs, types.ICAAccountType_WITHDRAWAL, ICACallbackID_Reinvest, marshalledCallbackArgs) + if err != nil { + return errorsmod.Wrapf(types.ErrICATxFailed, "Failed to SubmitTxs, Messages: %v, err: %s", msgs, err.Error()) + } + + ctx.EventManager().EmitEvent( + sdk.NewEvent( + sdk.EventTypeMessage, + sdk.NewAttribute("hostZone", hostZone.ChainId), + sdk.NewAttribute("totalWithdrawalBalance", withdrawalBalanceAmount.String()), + ), + ) + + return nil +} diff --git a/x/stakeibc/keeper/icqcallbacks_withdrawal_host_balance_test.go b/x/stakeibc/keeper/icqcallbacks_withdrawal_host_balance_test.go new file mode 100644 index 00000000000..2472d3f112c --- /dev/null +++ b/x/stakeibc/keeper/icqcallbacks_withdrawal_host_balance_test.go @@ -0,0 +1,253 @@ +package keeper_test + +import ( + "fmt" + + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + icacallbackstypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/keeper" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +type WithdrawalBalanceICQCallbackState struct { + hostZone types.HostZone + withdrawalChannel Channel + withdrawalBalance int64 +} + +type WithdrawalBalanceICQCallbackArgs struct { + query icqtypes.Query + callbackArgs []byte +} + +type WithdrawalBalanceICQCallbackTestCase struct { + initialState WithdrawalBalanceICQCallbackState + validArgs WithdrawalBalanceICQCallbackArgs + expectedReinvestment sdk.Coin +} + +// The response from the WithdrawalBalance ICQ is a serialized sdk.Coin containing +// the address' balance. This function creates the serialized response +func (s *KeeperTestSuite) CreateBalanceQueryResponse(amount int64, denom string) []byte { + coin := sdk.NewCoin(denom, sdkmath.NewInt(amount)) + coinBz := s.App.AppCodec().MustMarshal(&coin) + return coinBz +} + +func (s *KeeperTestSuite) SetupWithdrawalHostBalanceCallbackTest() WithdrawalBalanceICQCallbackTestCase { + delegationAccountOwner := fmt.Sprintf("%s.%s", HostChainId, "DELEGATION") + s.CreateICAChannel(delegationAccountOwner) + delegationAddress := s.IcaAddresses[delegationAccountOwner] + + withdrawalAccountOwner := fmt.Sprintf("%s.%s", HostChainId, "WITHDRAWAL") + withdrawalChannelId, withdrawalPortId := s.CreateICAChannel(withdrawalAccountOwner) + withdrawalAddress := s.IcaAddresses[withdrawalAccountOwner] + + feeAddress := "cosmos_FEE" + + hostZone := types.HostZone{ + ChainId: HostChainId, + HostDenom: Atom, + ConnectionId: ibctesting.FirstConnectionID, + DelegationIcaAddress: delegationAddress, + WithdrawalIcaAddress: withdrawalAddress, + FeeIcaAddress: feeAddress, + } + + strideEpochTracker := types.EpochTracker{ + EpochIdentifier: epochtypes.STRIDE_EPOCH, + EpochNumber: 1, + NextEpochStartTime: uint64(s.Coordinator.CurrentTime.UnixNano() + 30_000_000_000), // dictates timeouts + } + + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, strideEpochTracker) + + withdrawalBalance := int64(1000) + expectedReinvestment := sdk.NewCoin(Atom, sdkmath.NewInt(int64(900))) + + queryResponse := s.CreateBalanceQueryResponse(withdrawalBalance, Atom) + + return WithdrawalBalanceICQCallbackTestCase{ + initialState: WithdrawalBalanceICQCallbackState{ + hostZone: hostZone, + withdrawalChannel: Channel{ + PortID: withdrawalPortId, + ChannelID: withdrawalChannelId, + }, + withdrawalBalance: withdrawalBalance, + }, + validArgs: WithdrawalBalanceICQCallbackArgs{ + query: icqtypes.Query{ + Id: "0", + ChainId: HostChainId, + }, + callbackArgs: queryResponse, + }, + expectedReinvestment: expectedReinvestment, + } +} + +func (s *KeeperTestSuite) TestWithdrawalHostBalanceCallback_Successful() { + tc := s.SetupWithdrawalHostBalanceCallbackTest() + + // Get the sequence number before the ICA is submitted to confirm it incremented + withdrawalChannel := tc.initialState.withdrawalChannel + withdrawalPortId := withdrawalChannel.PortID + withdrawalChannelId := withdrawalChannel.ChannelID + + startSequence, found := s.App.IBCKeeper.ChannelKeeper.GetNextSequenceSend(s.Ctx, withdrawalPortId, withdrawalChannelId) + s.Require().True(found, "sequence number not found before reinvestment") + + // Call the ICQ callback + err := keeper.WithdrawalHostBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, tc.validArgs.query) + s.Require().NoError(err) + + // Confirm ICA reinvestment callback data was stored + s.Require().Len(s.App.IcacallbacksKeeper.GetAllCallbackData(s.Ctx), 1, "number of callbacks found") + callbackKey := icacallbackstypes.PacketID(withdrawalPortId, withdrawalChannelId, startSequence) + callbackData, found := s.App.IcacallbacksKeeper.GetCallbackData(s.Ctx, callbackKey) + s.Require().True(found, "callback data was not found for callback key (%s)", callbackKey) + s.Require().Equal("reinvest", callbackData.CallbackId, "callback ID") + + // Confirm reinvestment callback args + callbackArgs, err := s.App.StakeibcKeeper.UnmarshalReinvestCallbackArgs(s.Ctx, callbackData.CallbackArgs) + s.Require().NoError(err, "unmarshalling callback args error for callback key (%s)", callbackKey) + s.Require().Equal(tc.initialState.hostZone.ChainId, callbackArgs.HostZoneId, "host zone in callback args (%s)", callbackKey) + s.Require().Equal(tc.expectedReinvestment, callbackArgs.ReinvestAmount, "reinvestment coin in callback args (%s)", callbackKey) + + // Confirm the sequence number was incremented + endSequence, found := s.App.IBCKeeper.ChannelKeeper.GetNextSequenceSend(s.Ctx, withdrawalPortId, withdrawalChannelId) + s.Require().True(found, "sequence number not found after reinvestment") + s.Require().Equal(endSequence, startSequence+1, "sequence number after reinvestment") +} + +func (s *KeeperTestSuite) TestWithdrawalHostBalanceCallback_EmptyCallbackArgs() { + tc := s.SetupWithdrawalHostBalanceCallbackTest() + + // Replace the query response an empty byte array (this happens when the account has not been registered yet) + emptyCallbackArgs := []byte{} + + err := keeper.WithdrawalHostBalanceCallback(s.App.StakeibcKeeper, s.Ctx, emptyCallbackArgs, tc.validArgs.query) + s.Require().NoError(err) + + // Confirm revinvestment callback was not created + s.Require().Len(s.App.IcacallbacksKeeper.GetAllCallbackData(s.Ctx), 0, "number of callbacks found") +} + +func (s *KeeperTestSuite) TestWithdrawalHostBalanceCallback_ZeroBalance() { + tc := s.SetupWithdrawalHostBalanceCallbackTest() + + // Replace the query response with a coin that has a nil amount + tc.validArgs.callbackArgs = s.CreateBalanceQueryResponse(0, Atom) + + err := keeper.WithdrawalHostBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, tc.validArgs.query) + s.Require().NoError(err) + + // Confirm revinvestment callback was not created + s.Require().Len(s.App.IcacallbacksKeeper.GetAllCallbackData(s.Ctx), 0, "number of callbacks found") +} + +func (s *KeeperTestSuite) TestWithdrawalHostBalanceCallback_ZeroBalanceImplied() { + tc := s.SetupWithdrawalHostBalanceCallbackTest() + + // Replace the query response with a coin that has a nil amount + coin := sdk.Coin{} + coinBz := s.App.RecordsKeeper.Cdc.MustMarshal(&coin) + tc.validArgs.callbackArgs = coinBz + + err := keeper.WithdrawalHostBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, tc.validArgs.query) + s.Require().NoError(err) + + // Confirm revinvestment callback was not created + s.Require().Len(s.App.IcacallbacksKeeper.GetAllCallbackData(s.Ctx), 0, "number of callbacks found") +} + +func (s *KeeperTestSuite) TestWithdrawalHostBalanceCallback_HostZoneNotFound() { + tc := s.SetupWithdrawalHostBalanceCallbackTest() + + // Submit callback with incorrect host zone + invalidQuery := tc.validArgs.query + invalidQuery.ChainId = "fake_host_zone" + err := keeper.WithdrawalHostBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, invalidQuery) + s.Require().EqualError(err, "no registered zone for queried chain ID (fake_host_zone): host zone not found") +} + +func (s *KeeperTestSuite) TestWithdrawalHostBalanceCallback_InvalidArgs() { + tc := s.SetupWithdrawalHostBalanceCallbackTest() + + // Submit callback with invalid callback args (so that it can't unmarshal into a coin) + invalidArgs := []byte("random bytes") + err := keeper.WithdrawalHostBalanceCallback(s.App.StakeibcKeeper, s.Ctx, invalidArgs, tc.validArgs.query) + + s.Require().ErrorContains(err, "unable to determine balance from query response") +} + +func (s *KeeperTestSuite) TestWithdrawalHostBalanceCallback_NoWithdrawalAccount() { + tc := s.SetupWithdrawalHostBalanceCallbackTest() + + // Remove the withdrawal account + badHostZone := tc.initialState.hostZone + badHostZone.WithdrawalIcaAddress = "" + s.App.StakeibcKeeper.SetHostZone(s.Ctx, badHostZone) + + err := keeper.WithdrawalHostBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, tc.validArgs.query) + s.Require().EqualError(err, "no withdrawal account found for GAIA: ICA acccount not found on host zone") +} + +func (s *KeeperTestSuite) TestWithdrawalHostBalanceCallback_NoDelegationAccount() { + tc := s.SetupWithdrawalHostBalanceCallbackTest() + + // Remove the delegation account + badHostZone := tc.initialState.hostZone + badHostZone.DelegationIcaAddress = "" + s.App.StakeibcKeeper.SetHostZone(s.Ctx, badHostZone) + + err := keeper.WithdrawalHostBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, tc.validArgs.query) + s.Require().EqualError(err, "no delegation account found for GAIA: ICA acccount not found on host zone") +} + +func (s *KeeperTestSuite) TestWithdrawalHostBalanceCallback_NoFeeAccount() { + tc := s.SetupWithdrawalHostBalanceCallbackTest() + + // Remove the fee account + badHostZone := tc.initialState.hostZone + badHostZone.FeeIcaAddress = "" + s.App.StakeibcKeeper.SetHostZone(s.Ctx, badHostZone) + + err := keeper.WithdrawalHostBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, tc.validArgs.query) + s.Require().EqualError(err, "no fee account found for GAIA: ICA acccount not found on host zone") +} + +func (s *KeeperTestSuite) TestWithdrawalHostBalanceCallback_FailedToCheckForRebate() { + tc := s.SetupWithdrawalHostBalanceCallbackTest() + + // Add a rebate to the host zone - since there are no stTokens in supply, the test will fail + hostZone := s.MustGetHostZone(HostChainId) + hostZone.CommunityPoolRebate = &types.CommunityPoolRebate{ + RebateRate: sdkmath.LegacyMustNewDecFromStr("0.5"), + LiquidStakedStTokenAmount: sdkmath.NewInt(1), + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + err := keeper.WithdrawalHostBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, tc.validArgs.query) + s.Require().ErrorContains(err, "unable to split reward amount into fee and reinvest amounts") +} + +func (s *KeeperTestSuite) TestWithdrawalHostBalanceCallback_FailedSubmitTx() { + tc := s.SetupWithdrawalHostBalanceCallbackTest() + + // Remove connectionId from host zone so the ICA tx fails + badHostZone := tc.initialState.hostZone + badHostZone.ConnectionId = "connection-X" + s.App.StakeibcKeeper.SetHostZone(s.Ctx, badHostZone) + + err := keeper.WithdrawalHostBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.validArgs.callbackArgs, tc.validArgs.query) + s.Require().ErrorContains(err, "Failed to SubmitTxs") + s.Require().ErrorContains(err, "connection connection-X not found") +} diff --git a/x/stakeibc/keeper/icqcallbacks_withdrawal_reward_balance.go b/x/stakeibc/keeper/icqcallbacks_withdrawal_reward_balance.go new file mode 100644 index 00000000000..5502136b038 --- /dev/null +++ b/x/stakeibc/keeper/icqcallbacks_withdrawal_reward_balance.go @@ -0,0 +1,68 @@ +package keeper + +import ( + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + + errorsmod "cosmossdk.io/errors" + "github.com/cosmos/gogoproto/proto" + + icqkeeper "github.com/osmosis-labs/osmosis/v27/x/interchainquery/keeper" + + "github.com/osmosis-labs/osmosis/v27/utils" + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// WithdrawalRewardBalanceCallback is a callback handler for WithdrawalRewardBalance queries. +// The query response will return the withdrawal account balance for the reward denom in the case +// of a host zone with a trade route (e.g. USDC in the case of the dYdX trade route) +// If the balance is non-zero, ICA MsgSends are submitted to transfer the discovered balance to the tradeZone +// +// Note: for now, to get proofs in your ICQs, you need to query the entire store on the host zone! e.g. "store/bank/key" +func WithdrawalRewardBalanceCallback(k Keeper, ctx sdk.Context, args []byte, query icqtypes.Query) error { + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(query.ChainId, ICQCallbackID_WithdrawalRewardBalance, + "Starting withdrawal reward balance callback, QueryId: %vs, QueryType: %s, Connection: %s", query.Id, query.QueryType, query.ConnectionId)) + + chainId := query.ChainId + + // Unmarshal the query response args to determine the balance + withdrawalRewardBalanceAmount, err := icqkeeper.UnmarshalAmountFromBalanceQuery(k.cdc, args) + if err != nil { + return errorsmod.Wrap(err, "unable to determine balance from query response") + } + + // Confirm the balance is greater than zero, or else exit early without further action + if withdrawalRewardBalanceAmount.LTE(sdkmath.ZeroInt()) { + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_WithdrawalRewardBalance, + "Not enough reward tokens yet found in withdrawalICA, balance: %v", withdrawalRewardBalanceAmount)) + return nil + } + + // Unmarshal the callback data containing the tradeRoute we are on + var tradeRouteCallback types.TradeRouteCallback + if err := proto.Unmarshal(query.CallbackData, &tradeRouteCallback); err != nil { + return errorsmod.Wrapf(err, "unable to unmarshal trade reward balance callback data") + } + + // Lookup the trade route from the keys in the callback + tradeRoute, found := k.GetTradeRoute(ctx, tradeRouteCallback.RewardDenom, tradeRouteCallback.HostDenom) + if !found { + return types.ErrTradeRouteNotFound.Wrapf("trade route from %s to %s not found", + tradeRouteCallback.RewardDenom, tradeRouteCallback.HostDenom) + } + + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_WithdrawalRewardBalance, + "Query response - Withdrawal Reward Balance: %v %s", withdrawalRewardBalanceAmount, tradeRoute.RewardDenomOnHostZone)) + + // Transfer the reward amount to the trade zone so it can be swapped for the native token + if err := k.TransferRewardTokensHostToTrade(ctx, withdrawalRewardBalanceAmount, tradeRoute); err != nil { + return errorsmod.Wrapf(err, "initiating transfer of reward tokens to trade ICA failed") + } + + k.Logger(ctx).Info(utils.LogICQCallbackWithHostZone(chainId, ICQCallbackID_WithdrawalRewardBalance, + "Sending discovered reward tokens %v %s from hostZone to tradeZone", + withdrawalRewardBalanceAmount, tradeRoute.RewardDenomOnRewardZone)) + + return nil +} diff --git a/x/stakeibc/keeper/icqcallbacks_withdrawal_reward_balance_test.go b/x/stakeibc/keeper/icqcallbacks_withdrawal_reward_balance_test.go new file mode 100644 index 00000000000..268b4b8d8c1 --- /dev/null +++ b/x/stakeibc/keeper/icqcallbacks_withdrawal_reward_balance_test.go @@ -0,0 +1,168 @@ +package keeper_test + +import ( + "time" + + sdkmath "cosmossdk.io/math" + "github.com/cosmos/gogoproto/proto" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/keeper" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// WithdrawalRewardBalanceCallback will trigger TransferRewardTokensHostToTrade +// Therefore we need to setup traderoute fields used in the entire transfer (with pfm) +func (s *KeeperTestSuite) SetupWithdrawalRewardBalanceCallbackTestCase() BalanceQueryCallbackTestCase { + // Create the connection between Stride and HostChain with the withdrawal account initialized + withdrawalAccountOwner := types.FormatHostZoneICAOwner(HostChainId, types.ICAAccountType_WITHDRAWAL) + withdrawalChannelId, withdrawalPortId := s.CreateICAChannel(withdrawalAccountOwner) + + s.App.StakeibcKeeper.SetHostZone(s.Ctx, types.HostZone{ + ChainId: HostChainId, + HostDenom: HostDenom, + ConnectionId: ibctesting.FirstConnectionID, + }) + + route := types.TradeRoute{ + RewardDenomOnRewardZone: RewardDenom, + HostDenomOnHostZone: HostDenom, + RewardDenomOnHostZone: "ibc/reward_on_host", + + HostToRewardChannelId: "channel-2", + RewardToTradeChannelId: "channel-3", + + HostAccount: types.ICAAccount{ + ChainId: HostChainId, + Address: "withdrawal-address", + ConnectionId: ibctesting.FirstConnectionID, + Type: types.ICAAccountType_WITHDRAWAL, + }, + RewardAccount: types.ICAAccount{ + Address: "reward-address", + }, + TradeAccount: types.ICAAccount{ + Address: "trade-address", + }, + + MinTransferAmount: sdkmath.ZeroInt(), + } + s.App.StakeibcKeeper.SetTradeRoute(s.Ctx, route) + + // Create and set the epoch tracker for timeouts + timeoutDuration := time.Second * 30 + s.CreateEpochForICATimeout(epochtypes.STRIDE_EPOCH, timeoutDuration) + + // Build query object and serialized query response + balance := sdkmath.NewInt(1_000_000) + callbackDataBz, _ := proto.Marshal(&types.TradeRouteCallback{ + RewardDenom: RewardDenom, + HostDenom: HostDenom, + }) + query := icqtypes.Query{ + ChainId: HostChainId, + CallbackData: callbackDataBz, + } + queryResponse := s.CreateBalanceQueryResponse(balance.Int64(), route.RewardDenomOnHostZone) + + return BalanceQueryCallbackTestCase{ + TradeRoute: route, + Balance: balance, + Response: ICQCallbackArgs{ + Query: query, + CallbackArgs: queryResponse, + }, + ChannelID: withdrawalChannelId, + PortID: withdrawalPortId, + } +} + +// Verify that a normal WithdrawalRewardBalanceCallback does fire off the ICA for transfer +func (s *KeeperTestSuite) TestWithdrawalRewardBalanceCallback_Successful() { + tc := s.SetupWithdrawalRewardBalanceCallbackTestCase() + + // ICA inside of TransferRewardTokensHostToTrade should execute but it uses submitTXWithoutCallback + // So no need to confirm ICA callback data was stored and no need to confirm callback args values + + // Confirm ICA was submitted by checking that the sequence number incremented + s.CheckICATxSubmitted(tc.PortID, tc.ChannelID, func() error { + return keeper.WithdrawalRewardBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.Response.CallbackArgs, tc.Response.Query) + }) +} + +// Verify that if the amount returned by the ICQ response is less than the min_swap_amount, no transfer happens +func (s *KeeperTestSuite) TestWithdrawalRewardBalanceCallback_SuccessfulNoTransfer() { + tc := s.SetupWithdrawalRewardBalanceCallbackTestCase() + + // Set min transfer amount to be greater than the transfer amount + route := tc.TradeRoute + route.MinTransferAmount = tc.Balance.Add(sdkmath.OneInt()) + s.App.StakeibcKeeper.SetTradeRoute(s.Ctx, route) + + // ICA inside of TransferRewardTokensHostToTrade should not actually execute because of min_swap_amount + s.CheckICATxNotSubmitted(tc.PortID, tc.ChannelID, func() error { + return keeper.WithdrawalRewardBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.Response.CallbackArgs, tc.Response.Query) + }) +} + +func (s *KeeperTestSuite) TestWithdrawalRewardBalanceCallback_ZeroBalance() { + tc := s.SetupWithdrawalRewardBalanceCallbackTestCase() + + // Replace the query response with a coin that has a zero amount + tc.Response.CallbackArgs = s.CreateBalanceQueryResponse(0, tc.TradeRoute.RewardDenomOnHostZone) + + // Confirm the transfer ICA was never sent + s.CheckICATxNotSubmitted(tc.PortID, tc.ChannelID, func() error { + return keeper.WithdrawalRewardBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.Response.CallbackArgs, tc.Response.Query) + }) +} + +func (s *KeeperTestSuite) TestWithdrawalRewardBalanceCallback_InvalidArgs() { + tc := s.SetupWithdrawalRewardBalanceCallbackTestCase() + + // Submit callback with invalid callback args (so that it can't unmarshal into a coin) + invalidArgs := []byte("random bytes") + + err := keeper.WithdrawalRewardBalanceCallback(s.App.StakeibcKeeper, s.Ctx, invalidArgs, tc.Response.Query) + s.Require().ErrorContains(err, "unable to determine balance from query response") +} + +func (s *KeeperTestSuite) TestWithdrawalRewardBalanceCallback_InvalidCallbackData() { + tc := s.SetupWithdrawalRewardBalanceCallbackTestCase() + + // Update the callback data so that it can't be successfully unmarshalled + invalidQuery := tc.Response.Query + invalidQuery.CallbackData = []byte("random bytes") + + err := keeper.WithdrawalRewardBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.Response.CallbackArgs, invalidQuery) + s.Require().ErrorContains(err, "unable to unmarshal trade reward balance callback data") +} + +func (s *KeeperTestSuite) TestWithdrawalRewardBalanceCallback_TradeRouteNotFound() { + tc := s.SetupWithdrawalRewardBalanceCallbackTestCase() + + // Update the callback data so that it keys to a trade route that doesn't exist + invalidCallbackDataBz, _ := proto.Marshal(&types.TradeRouteCallback{ + RewardDenom: RewardDenom, + HostDenom: "different-host-denom", + }) + invalidQuery := tc.Response.Query + invalidQuery.CallbackData = invalidCallbackDataBz + + err := keeper.WithdrawalRewardBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.Response.CallbackArgs, invalidQuery) + s.Require().ErrorContains(err, "trade route not found") +} + +func (s *KeeperTestSuite) TestWithdrawalRewardBalanceCallback_FailedSubmitTx() { + tc := s.SetupWithdrawalRewardBalanceCallbackTestCase() + + // Remove connectionId from host ICAAccount on TradeRoute so the ICA tx fails + invalidRoute := tc.TradeRoute + invalidRoute.HostAccount.ConnectionId = "bad-connection" + s.App.StakeibcKeeper.SetTradeRoute(s.Ctx, invalidRoute) + + err := keeper.WithdrawalRewardBalanceCallback(s.App.StakeibcKeeper, s.Ctx, tc.Response.CallbackArgs, tc.Response.Query) + s.Require().ErrorContains(err, "Failed to submit ICA tx") +} diff --git a/x/stakeibc/keeper/interchainaccounts.go b/x/stakeibc/keeper/interchainaccounts.go new file mode 100644 index 00000000000..365b343425b --- /dev/null +++ b/x/stakeibc/keeper/interchainaccounts.go @@ -0,0 +1,313 @@ +package keeper + +import ( + "fmt" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + distributiontypes "github.com/cosmos/cosmos-sdk/x/distribution/types" + "github.com/cosmos/gogoproto/proto" + icacontrollerkeeper "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/keeper" + icacontrollertypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/types" + icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types" + connectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + "github.com/osmosis-labs/osmosis/v27/utils" + epochstypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + icacallbackstypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +const ( + ClaimRewardsICABatchSize = 10 +) + +func (k Keeper) SetWithdrawalAddressOnHost(ctx sdk.Context, hostZone types.HostZone) error { + // Fetch the relevant ICA + if hostZone.DelegationIcaAddress == "" { + k.Logger(ctx).Error(fmt.Sprintf("Zone %s is missing a delegation address!", hostZone.ChainId)) + return nil + } + + if hostZone.WithdrawalIcaAddress == "" { + k.Logger(ctx).Error(fmt.Sprintf("Zone %s is missing a withdrawal address!", hostZone.ChainId)) + return nil + } + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, "Withdrawal Address: %s, Delegator Address: %s", + hostZone.WithdrawalIcaAddress, hostZone.DelegationIcaAddress)) + + // Construct the ICA message + msgs := []proto.Message{ + &distributiontypes.MsgSetWithdrawAddress{ + DelegatorAddress: hostZone.DelegationIcaAddress, + WithdrawAddress: hostZone.WithdrawalIcaAddress, + }, + } + _, err := k.SubmitTxsStrideEpoch(ctx, hostZone.ConnectionId, msgs, types.ICAAccountType_DELEGATION, "", nil) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "Failed to SubmitTxs for %s, %s, %s", hostZone.ConnectionId, hostZone.ChainId, msgs) + } + + return nil +} + +func (k Keeper) ClaimAccruedStakingRewardsOnHost(ctx sdk.Context, hostZone types.HostZone) error { + // Fetch the relevant ICA + if hostZone.DelegationIcaAddress == "" { + return errorsmod.Wrapf(types.ErrICAAccountNotFound, "delegation ICA not found for %s", hostZone.ChainId) + } + if hostZone.WithdrawalIcaAddress == "" { + return errorsmod.Wrapf(types.ErrICAAccountNotFound, "withdrawal ICA not found for %s", hostZone.ChainId) + } + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, "Withdrawal Address: %s, Delegator Address: %s", + hostZone.WithdrawalIcaAddress, hostZone.DelegationIcaAddress)) + + validators := hostZone.Validators + + // Build multi-message transaction to withdraw rewards from each validator + // batching txs into groups of ClaimRewardsICABatchSize messages, to ensure they will fit in the host's blockSize + for start := 0; start < len(validators); start += ClaimRewardsICABatchSize { + end := start + ClaimRewardsICABatchSize + if end > len(validators) { + end = len(validators) + } + batch := validators[start:end] + msgs := []proto.Message{} + // Iterate over the items within the batch + for _, val := range batch { + // skip withdrawing rewards + if val.Delegation.IsZero() { + continue + } + msg := &distributiontypes.MsgWithdrawDelegatorReward{ + DelegatorAddress: hostZone.DelegationIcaAddress, + ValidatorAddress: val.Address, + } + msgs = append(msgs, msg) + } + + if len(msgs) > 0 { + _, err := k.SubmitTxsStrideEpoch(ctx, hostZone.ConnectionId, msgs, types.ICAAccountType_DELEGATION, "", nil) + if err != nil { + return errorsmod.Wrapf(err, "Failed to SubmitTxs for %s, %s, %s", hostZone.ConnectionId, hostZone.ChainId, msgs) + } + } + } + + return nil +} + +func (k Keeper) SubmitTxsDayEpoch( + ctx sdk.Context, + connectionId string, + msgs []proto.Message, + icaAccountType types.ICAAccountType, + callbackId string, + callbackArgs []byte, +) (uint64, error) { + sequence, err := k.SubmitTxsEpoch(ctx, connectionId, msgs, icaAccountType, epochstypes.DAY_EPOCH, callbackId, callbackArgs) + if err != nil { + return 0, err + } + return sequence, nil +} + +func (k Keeper) SubmitTxsStrideEpoch( + ctx sdk.Context, + connectionId string, + msgs []proto.Message, + icaAccountType types.ICAAccountType, + callbackId string, + callbackArgs []byte, +) (uint64, error) { + sequence, err := k.SubmitTxsEpoch(ctx, connectionId, msgs, icaAccountType, epochstypes.STRIDE_EPOCH, callbackId, callbackArgs) + if err != nil { + return 0, err + } + return sequence, nil +} + +func (k Keeper) SubmitTxsEpoch( + ctx sdk.Context, + connectionId string, + msgs []proto.Message, + icaAccountType types.ICAAccountType, + epochType string, + callbackId string, + callbackArgs []byte, +) (uint64, error) { + timeoutNanosUint64, err := k.GetICATimeoutNanos(ctx, epochType) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Failed to get ICA timeout nanos for epochType %s using param, error: %s", epochType, err.Error())) + return 0, errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "Failed to convert timeoutNanos to uint64, error: %s", err.Error()) + } + sequence, err := k.SubmitTxs(ctx, connectionId, msgs, icaAccountType, timeoutNanosUint64, callbackId, callbackArgs) + if err != nil { + return 0, err + } + return sequence, nil +} + +// SubmitTxs submits an ICA transaction containing multiple messages +// This function only supports messages to ICAs on the host zone +func (k Keeper) SubmitTxs( + ctx sdk.Context, + connectionId string, + msgs []proto.Message, + icaAccountType types.ICAAccountType, + timeoutTimestamp uint64, + callbackId string, + callbackArgs []byte, +) (uint64, error) { + chainId, err := k.GetChainIdFromConnectionId(ctx, connectionId) + if err != nil { + return 0, err + } + owner := types.FormatHostZoneICAOwner(chainId, icaAccountType) + portID, err := icatypes.NewControllerPortID(owner) + if err != nil { + return 0, err + } + + k.Logger(ctx).Info(utils.LogWithHostZone(chainId, " Submitting ICA Tx on %s, %s with TTL: %d", portID, connectionId, timeoutTimestamp)) + protoMsgs := []proto.Message{} + for _, msg := range msgs { + k.Logger(ctx).Info(utils.LogWithHostZone(chainId, " Msg: %+v", msg)) + protoMsgs = append(protoMsgs, msg) + } + + channelID, found := k.ICAControllerKeeper.GetActiveChannelID(ctx, connectionId, portID) + if !found { + return 0, errorsmod.Wrapf(icatypes.ErrActiveChannelNotFound, "failed to retrieve active channel for port %s", portID) + } + + data, err := icatypes.SerializeCosmosTx(k.cdc, protoMsgs, icatypes.EncodingProtobuf) + if err != nil { + return 0, err + } + + packetData := icatypes.InterchainAccountPacketData{ + Type: icatypes.EXECUTE_TX, + Data: data, + } + + // Submit ICA tx + msgServer := icacontrollerkeeper.NewMsgServerImpl(&k.ICAControllerKeeper) + relativeTimeoutOffset := timeoutTimestamp - utils.IntToUint(ctx.BlockTime().UnixNano()) + msgSendTx := icacontrollertypes.NewMsgSendTx(owner, connectionId, relativeTimeoutOffset, packetData) + res, err := msgServer.SendTx(ctx, msgSendTx) + if err != nil { + return 0, err + } + sequence := res.Sequence + + // Store the callback data + if callbackId != "" && callbackArgs != nil { + callback := icacallbackstypes.CallbackData{ + CallbackKey: icacallbackstypes.PacketID(portID, channelID, sequence), + PortId: portID, + ChannelId: channelID, + Sequence: sequence, + CallbackId: callbackId, + CallbackArgs: callbackArgs, + } + k.Logger(ctx).Info(utils.LogWithHostZone(chainId, "Storing callback data: %+v", callback)) + k.ICACallbacksKeeper.SetCallbackData(ctx, callback) + } + + return sequence, nil +} + +func (k Keeper) SubmitICATxWithoutCallback( + ctx sdk.Context, + connectionId string, + icaAccountOwner string, + msgs []proto.Message, + timeoutTimestamp uint64, +) error { + // Serialize tx messages + txBz, err := icatypes.SerializeCosmosTx(k.cdc, msgs, icatypes.EncodingProtobuf) + if err != nil { + return errorsmod.Wrapf(err, "unable to serialize cosmos transaction") + } + packetData := icatypes.InterchainAccountPacketData{ + Type: icatypes.EXECUTE_TX, + Data: txBz, + } + relativeTimeoutOffset := timeoutTimestamp - utils.IntToUint(ctx.BlockTime().UnixNano()) + + // Submit ICA, no need to store callback data or register callback function + icaMsgServer := icacontrollerkeeper.NewMsgServerImpl(&k.ICAControllerKeeper) + msgSendTx := icacontrollertypes.NewMsgSendTx(icaAccountOwner, connectionId, relativeTimeoutOffset, packetData) + _, err = icaMsgServer.SendTx(ctx, msgSendTx) + if err != nil { + return errorsmod.Wrapf(err, "unable to send ICA tx") + } + + return nil +} + +// Registers a new TradeRoute ICAAccount, given the type +// Stores down the connection and chainId now, and the address upon callback +func (k Keeper) RegisterTradeRouteICAAccount( + ctx sdk.Context, + tradeRouteId string, + connectionId string, + icaAccountType types.ICAAccountType, +) (account types.ICAAccount, err error) { + // Get the chain ID and counterparty connection-id from the connection ID on Stride + chainId, err := k.GetChainIdFromConnectionId(ctx, connectionId) + if err != nil { + return account, err + } + connection, found := k.IBCKeeper.ConnectionKeeper.GetConnection(ctx, connectionId) + if !found { + return account, errorsmod.Wrap(connectiontypes.ErrConnectionNotFound, connectionId) + } + counterpartyConnectionId := connection.Counterparty.ConnectionId + + // Build the appVersion, owner, and portId needed for registration + appVersion := string(icatypes.ModuleCdc.MustMarshalJSON(&icatypes.Metadata{ + Version: icatypes.Version, + ControllerConnectionId: connectionId, + HostConnectionId: counterpartyConnectionId, + Encoding: icatypes.EncodingProtobuf, + TxType: icatypes.TxTypeSDKMultiMsg, + })) + owner := types.FormatTradeRouteICAOwnerFromRouteId(chainId, tradeRouteId, icaAccountType) + portID, err := icatypes.NewControllerPortID(owner) + if err != nil { + return account, err + } + + // Create the associate ICAAccount object + account = types.ICAAccount{ + ChainId: chainId, + Type: icaAccountType, + ConnectionId: connectionId, + } + + // Check if an ICA account has already been created + // (in the event that this trade route was removed and then added back) + // If so, there's no need to register a new ICA + _, channelFound := k.ICAControllerKeeper.GetOpenActiveChannel(ctx, connectionId, portID) + icaAddress, icaFound := k.ICAControllerKeeper.GetInterchainAccountAddress(ctx, connectionId, portID) + if channelFound && icaFound { + account = types.ICAAccount{ + ChainId: chainId, + Type: icaAccountType, + ConnectionId: connectionId, + Address: icaAddress, + } + return account, nil + } + + // Otherwise, if there's no account already, register a new one + if err := k.ICAControllerKeeper.RegisterInterchainAccountWithOrdering(ctx, connectionId, owner, appVersion, channeltypes.ORDERED); err != nil { + return account, err + } + + return account, nil +} diff --git a/x/stakeibc/keeper/interchainaccounts_test.go b/x/stakeibc/keeper/interchainaccounts_test.go new file mode 100644 index 00000000000..e8d2d47924c --- /dev/null +++ b/x/stakeibc/keeper/interchainaccounts_test.go @@ -0,0 +1,86 @@ +package keeper_test + +import ( + "fmt" + + sdkmath "cosmossdk.io/math" + + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + stakeibckeeper "github.com/osmosis-labs/osmosis/v27/x/stakeibc/keeper" + types "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// constant number of zero delegations +const numZeroDelegations = 37 + +func (s *KeeperTestSuite) ClaimAccruedStakingRewardsOnHost() { + // Create a delegation ICA channel for the ICA submission + owner := types.FormatHostZoneICAOwner(HostChainId, types.ICAAccountType_DELEGATION) + channelId, portId := s.CreateICAChannel(owner) + + // Create validators + validators := []*types.Validator{} + numberGTClaimRewardsBatchSize := int(50) + for i := 0; i < numberGTClaimRewardsBatchSize; i++ { + + // set most delegations to 5, some to 0 + valDelegation := sdkmath.NewInt(5) + if i > (numberGTClaimRewardsBatchSize - numZeroDelegations) { + valDelegation = sdkmath.NewInt(0) + } + validators = append(validators, &types.Validator{ + Address: fmt.Sprintf("val-%d", i), + Delegation: valDelegation, + }) + } + + // Create host zone + hostZone := types.HostZone{ + ChainId: HostChainId, + DelegationIcaAddress: "delegation", + WithdrawalIcaAddress: "withdrawal", + Validators: validators, + } + + // Create epoch tracker for ICA timeout + strideEpoch := types.EpochTracker{ + EpochIdentifier: epochtypes.STRIDE_EPOCH, + NextEpochStartTime: uint64(s.Coordinator.CurrentTime.UnixNano() + 30_000_000_000), // used for timeout + } + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, strideEpoch) + + // Get start sequence number to confirm ICA was set + startSequence, found := s.App.IBCKeeper.ChannelKeeper.GetNextSequenceSend(s.Ctx, portId, channelId) + s.Require().True(found) + + // Call claim accrued rewards to submit ICAs + err := s.App.StakeibcKeeper.ClaimAccruedStakingRewardsOnHost(s.Ctx, hostZone) + s.Require().NoError(err, "no error expected when accruing rewards") + + // Confirm sequence number incremented by the number of txs + // where the number of txs is equal: + // (total_validators - validators_with_zero_delegation) / batch_size + batchSize := (numberGTClaimRewardsBatchSize - numZeroDelegations) / stakeibckeeper.ClaimRewardsICABatchSize + expectedEndSequence := startSequence + uint64(batchSize) + actualEndSequence, found := s.App.IBCKeeper.ChannelKeeper.GetNextSequenceSend(s.Ctx, portId, channelId) + s.Require().True(found) + s.Require().Equal(expectedEndSequence, actualEndSequence, "sequence number should have incremented") + + // Attempt to call it with a host zone without a delegation ICA address, it should fail + invalidHostZone := hostZone + invalidHostZone.DelegationIcaAddress = "" + err = s.App.StakeibcKeeper.ClaimAccruedStakingRewardsOnHost(s.Ctx, invalidHostZone) + s.Require().ErrorContains(err, "ICA account not found") + + // Attempt to call it with a host zone without a withdrawal ICA address, it should fail + invalidHostZone = hostZone + invalidHostZone.WithdrawalIcaAddress = "" + err = s.App.StakeibcKeeper.ClaimAccruedStakingRewardsOnHost(s.Ctx, invalidHostZone) + s.Require().ErrorContains(err, "ICA account not found") + + // Attempt to call claim with an invalid connection ID on the host zone so the ica fails + invalidHostZone = hostZone + invalidHostZone.ConnectionId = "" + err = s.App.StakeibcKeeper.ClaimAccruedStakingRewardsOnHost(s.Ctx, invalidHostZone) + s.Require().ErrorContains(err, "Failed to SubmitTxs") +} diff --git a/x/stakeibc/keeper/interchainqueries.go b/x/stakeibc/keeper/interchainqueries.go new file mode 100644 index 00000000000..a3787d501d5 --- /dev/null +++ b/x/stakeibc/keeper/interchainqueries.go @@ -0,0 +1,231 @@ +package keeper + +import ( + "fmt" + "strings" + "time" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/bech32" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + bankTypes "github.com/cosmos/cosmos-sdk/x/bank/migrations/v3" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/cosmos/gogoproto/proto" + + epochstypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + + "github.com/osmosis-labs/osmosis/v27/utils" + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// Submit a validator sharesToTokens rate ICQ as triggered either manually or epochly with a conservative timeout +func (k Keeper) QueryValidatorSharesToTokensRate(ctx sdk.Context, chainId string, validatorAddress string) error { + timeoutDuration := time.Hour * 24 + timeoutPolicy := icqtypes.TimeoutPolicy_REJECT_QUERY_RESPONSE + callbackData := []byte{} + return k.SubmitValidatorSharesToTokensRateICQ(ctx, chainId, validatorAddress, callbackData, timeoutDuration, timeoutPolicy) +} + +// Submits an ICQ to get a validator's shares to tokens rate +func (k Keeper) SubmitValidatorSharesToTokensRateICQ( + ctx sdk.Context, + chainId string, + validatorAddress string, + callbackDataBz []byte, + timeoutDuration time.Duration, + timeoutPolicy icqtypes.TimeoutPolicy, +) error { + k.Logger(ctx).Info(utils.LogWithHostZone(chainId, "Submitting ICQ for validator sharesToTokens rate to %s", validatorAddress)) + + // Confirm the host zone exists + hostZone, found := k.GetHostZone(ctx, chainId) + if !found { + return errorsmod.Wrapf(types.ErrInvalidHostZone, "Host zone not found (%s)", chainId) + } + + // check that the validator address matches the bech32 prefix of the hz + if !strings.Contains(validatorAddress, hostZone.Bech32Prefix) { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "validator operator address must match the host zone bech32 prefix") + } + + // Encode the validator address to form the query request + _, validatorAddressBz, err := bech32.DecodeAndConvert(validatorAddress) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "invalid validator operator address, could not decode (%s)", err.Error()) + } + queryData := stakingtypes.GetValidatorKey(validatorAddressBz) + + // Submit validator sharesToTokens rate ICQ + // Considering this query is executed manually, we can be conservative with the timeout + query := icqtypes.Query{ + ChainId: hostZone.ChainId, + ConnectionId: hostZone.ConnectionId, + QueryType: icqtypes.STAKING_STORE_QUERY_WITH_PROOF, + RequestData: queryData, + CallbackModule: types.ModuleName, + CallbackId: ICQCallbackID_Validator, + CallbackData: callbackDataBz, + TimeoutDuration: timeoutDuration, + TimeoutPolicy: timeoutPolicy, + } + if err := k.InterchainQueryKeeper.SubmitICQRequest(ctx, query, true); err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Error submitting ICQ for validator sharesToTokens rate, error %s", err.Error())) + return err + } + return nil +} + +// Submits an ICQ to get a validator's delegations +// This is called after the validator's sharesToTokens rate is determined +// The timeoutDuration parameter represents the length of the timeout (not to be confused with an actual timestamp) +func (k Keeper) SubmitDelegationICQ(ctx sdk.Context, hostZone types.HostZone, validatorAddress string) error { + if hostZone.DelegationIcaAddress == "" { + return errorsmod.Wrapf(types.ErrICAAccountNotFound, "no delegation address found for %s", hostZone.ChainId) + } + validator, valIndex, found := GetValidatorFromAddress(hostZone.Validators, validatorAddress) + if !found { + return errorsmod.Wrapf(types.ErrValidatorNotFound, "no registered validator for address (%s)", validatorAddress) + } + + // Only submit the query if there's not already one in progress + if validator.SlashQueryInProgress { + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, "Delegations ICQ already in progress")) + return nil + } + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, "Submitting ICQ for delegations to %s", validatorAddress)) + + // Get the validator and delegator encoded addresses to form the query request + _, validatorAddressBz, err := bech32.DecodeAndConvert(validatorAddress) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "invalid validator address, could not decode (%s)", err.Error()) + } + _, delegatorAddressBz, err := bech32.DecodeAndConvert(hostZone.DelegationIcaAddress) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "invalid delegator address, could not decode (%s)", err.Error()) + } + queryData := stakingtypes.GetDelegationKey(delegatorAddressBz, validatorAddressBz) + + // Store the current validator's delegation in the callback data so we can determine if it changed + // while the query was in flight + callbackData := types.DelegatorSharesQueryCallback{ + InitialValidatorDelegation: validator.Delegation, + } + callbackDataBz, err := proto.Marshal(&callbackData) + if err != nil { + return errorsmod.Wrapf(err, "unable to marshal delegator shares callback data") + } + + // Update the validator to indicate that the slash query is in progress + validator.SlashQueryInProgress = true + hostZone.Validators[valIndex] = &validator + k.SetHostZone(ctx, hostZone) + + // Submit delegator shares ICQ + query := icqtypes.Query{ + ChainId: hostZone.ChainId, + ConnectionId: hostZone.ConnectionId, + QueryType: icqtypes.STAKING_STORE_QUERY_WITH_PROOF, + RequestData: queryData, + CallbackModule: types.ModuleName, + CallbackId: ICQCallbackID_Delegation, + CallbackData: callbackDataBz, + TimeoutDuration: time.Hour, + TimeoutPolicy: icqtypes.TimeoutPolicy_RETRY_QUERY_REQUEST, + } + if err := k.InterchainQueryKeeper.SubmitICQRequest(ctx, query, false); err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Error submitting ICQ for delegation, error : %s", err.Error())) + return err + } + + return nil +} + +// Submits an ICQ to get a validator's delegations +// This is called after the validator's sharesToTokens rate is determined +// The timeoutDuration parameter represents the length of the timeout (not to be confused with an actual timestamp) +func (k Keeper) SubmitCalibrationICQ(ctx sdk.Context, hostZone types.HostZone, validatorAddress string) error { + if hostZone.DelegationIcaAddress == "" { + return errorsmod.Wrapf(types.ErrICAAccountNotFound, "no delegation address found for %s", hostZone.ChainId) + } + + // ensure the validator is in the set for this host + _, _, found := GetValidatorFromAddress(hostZone.Validators, validatorAddress) + if !found { + return errorsmod.Wrapf(types.ErrValidatorNotFound, "no registered validator for address (%s)", validatorAddress) + } + + // Get the validator and delegator encoded addresses to form the query request + _, validatorAddressBz, err := bech32.DecodeAndConvert(validatorAddress) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "invalid validator address, could not decode (%s)", err.Error()) + } + _, delegatorAddressBz, err := bech32.DecodeAndConvert(hostZone.DelegationIcaAddress) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "invalid delegator address, could not decode (%s)", err.Error()) + } + queryData := stakingtypes.GetDelegationKey(delegatorAddressBz, validatorAddressBz) + + // Submit delegator shares ICQ + query := icqtypes.Query{ + ChainId: hostZone.ChainId, + ConnectionId: hostZone.ConnectionId, + QueryType: icqtypes.STAKING_STORE_QUERY_WITH_PROOF, + RequestData: queryData, + CallbackModule: types.ModuleName, + CallbackId: ICQCallbackID_Calibrate, + CallbackData: []byte{}, + TimeoutDuration: time.Hour, + TimeoutPolicy: icqtypes.TimeoutPolicy_RETRY_QUERY_REQUEST, + } + if err := k.InterchainQueryKeeper.SubmitICQRequest(ctx, query, false); err != nil { + return err + } + + return nil +} + +// Submits an ICQ for the withdrawal account balance +func (k Keeper) SubmitWithdrawalHostBalanceICQ(ctx sdk.Context, hostZone types.HostZone) error { + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, "Submitting ICQ for withdrawal account balance")) + + // Get the withdrawal account address from the host zone + if hostZone.WithdrawalIcaAddress == "" { + return errorsmod.Wrapf(types.ErrICAAccountNotFound, "no withdrawal account found for %s", hostZone.ChainId) + } + + // Encode the withdrawal account address for the query request + // The query request consists of the withdrawal account address and denom + _, withdrawalAddressBz, err := bech32.DecodeAndConvert(hostZone.WithdrawalIcaAddress) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "invalid withdrawal account address, could not decode (%s)", err.Error()) + } + queryData := append(bankTypes.CreateAccountBalancesPrefix(withdrawalAddressBz), []byte(hostZone.HostDenom)...) + + // Timeout query at end of epoch + strideEpochTracker, found := k.GetEpochTracker(ctx, epochstypes.STRIDE_EPOCH) + if !found { + return errorsmod.Wrapf(types.ErrEpochNotFound, "epoch %s not found", epochstypes.STRIDE_EPOCH) + } + timeout := time.Unix(0, utils.UintToInt(strideEpochTracker.NextEpochStartTime)) + timeoutDuration := timeout.Sub(ctx.BlockTime()) + + // Submit the ICQ for the withdrawal account balance + query := icqtypes.Query{ + ChainId: hostZone.ChainId, + ConnectionId: hostZone.ConnectionId, + QueryType: icqtypes.BANK_STORE_QUERY_WITH_PROOF, + RequestData: queryData, + CallbackModule: types.ModuleName, + CallbackId: ICQCallbackID_WithdrawalHostBalance, + TimeoutDuration: timeoutDuration, + TimeoutPolicy: icqtypes.TimeoutPolicy_REJECT_QUERY_RESPONSE, + } + if err := k.InterchainQueryKeeper.SubmitICQRequest(ctx, query, false); err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Error querying for withdrawal balance, error: %s", err.Error())) + return err + } + + return nil +} diff --git a/x/stakeibc/keeper/interchainqueries_test.go b/x/stakeibc/keeper/interchainqueries_test.go new file mode 100644 index 00000000000..50b5849fcac --- /dev/null +++ b/x/stakeibc/keeper/interchainqueries_test.go @@ -0,0 +1,177 @@ +package keeper_test + +import ( + "fmt" + + sdkmath "cosmossdk.io/math" + "github.com/cosmos/gogoproto/proto" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + _ "github.com/stretchr/testify/suite" + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// ----------------------------------------------------------- +// QueryValidatorSharesToTokensRate +// ----------------------------------------------------------- + +type QueryValidatorSharesToTokensRateTestCase struct { + hostZone types.HostZone +} + +func (s *KeeperTestSuite) SetupQueryValidatorSharesToTokensRate() QueryValidatorSharesToTokensRateTestCase { + // set up IBC + s.CreateTransferChannel(HostChainId) + + hostZone := types.HostZone{ + ChainId: HostChainId, + ConnectionId: ibctesting.FirstConnectionID, + HostDenom: Atom, + IbcDenom: IbcAtom, + Bech32Prefix: Bech32Prefix, + } + + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + return QueryValidatorSharesToTokensRateTestCase{ + hostZone: hostZone, + } +} + +func (s *KeeperTestSuite) TestQueryValidatorSharesToTokensRate_Successful() { + s.SetupQueryValidatorSharesToTokensRate() + + err := s.App.StakeibcKeeper.QueryValidatorSharesToTokensRate(s.Ctx, HostChainId, ValAddress) + s.Require().NoError(err, "no error expected when querying validator sharesToTokens rate") + + // check a query was created (a simple test; details about queries are covered in makeRequest's test) + queries := s.App.InterchainqueryKeeper.AllQueries(s.Ctx) + s.Require().Len(queries, 1, "one query should have been created") +} + +func (s *KeeperTestSuite) TestQueryValidatorSharesToTokensRate_NoHostZone() { + s.SetupQueryValidatorSharesToTokensRate() + + // remove the host zone + s.App.StakeibcKeeper.RemoveHostZone(s.Ctx, HostChainId) + + err := s.App.StakeibcKeeper.QueryValidatorSharesToTokensRate(s.Ctx, HostChainId, ValAddress) + s.Require().ErrorContains(err, "Host zone not found") + + // submit a bad chain id + err = s.App.StakeibcKeeper.QueryValidatorSharesToTokensRate(s.Ctx, "NOT_GAIA", ValAddress) + s.Require().ErrorContains(err, "Host zone not found") +} + +func (s *KeeperTestSuite) TestQueryValidatorSharesToTokensRate_InvalidValidator() { + s.SetupQueryValidatorSharesToTokensRate() + + // Pass a validator with an invalid prefix - it should fail + err := s.App.StakeibcKeeper.QueryValidatorSharesToTokensRate(s.Ctx, HostChainId, "BADPREFIX_123") + s.Require().ErrorContains(err, "validator operator address must match the host zone bech32 prefix") + + // Pass a validator with a valid prefix but an invalid address - it should fail + err = s.App.StakeibcKeeper.QueryValidatorSharesToTokensRate(s.Ctx, HostChainId, "cosmos_BADADDRESS") + s.Require().ErrorContains(err, "invalid validator operator address, could not decode") +} + +func (s *KeeperTestSuite) TestQueryValidatorSharesToTokensRate_MissingConnectionId() { + tc := s.SetupQueryValidatorSharesToTokensRate() + + tc.hostZone.ConnectionId = "" + s.App.StakeibcKeeper.SetHostZone(s.Ctx, tc.hostZone) + + err := s.App.StakeibcKeeper.QueryValidatorSharesToTokensRate(s.Ctx, HostChainId, ValAddress) + s.Require().ErrorContains(err, "connection-id cannot be empty") +} + +// ----------------------------------------------------------- +// SubmitDelegationICQ +// ----------------------------------------------------------- + +func (s *KeeperTestSuite) SetupSubmitDelegationICQ() (types.HostZone, types.Validator) { + // set up IBC + s.CreateTransferChannel(HostChainId) + + delegationAccountOwner := fmt.Sprintf("%s.%s", HostChainId, "DELEGATION") + s.CreateICAChannel(delegationAccountOwner) + delegationAddress := s.IcaAddresses[delegationAccountOwner] + + queriedValidator := types.Validator{ + Address: ValAddress, + Delegation: sdkmath.NewInt(100), + SlashQueryInProgress: false, + } + otherValidator := types.Validator{ + Address: "cosmosvaloper1pcag0cj4ttxg8l7pcg0q4ksuglswuuedadj7ne", + Delegation: sdkmath.NewInt(100), + SlashQueryInProgress: false, + } + hostZone := types.HostZone{ + ChainId: HostChainId, + ConnectionId: ibctesting.FirstConnectionID, + HostDenom: Atom, + IbcDenom: IbcAtom, + Bech32Prefix: Bech32Prefix, + DelegationIcaAddress: delegationAddress, + Validators: []*types.Validator{&queriedValidator, &otherValidator}, + } + + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + return hostZone, queriedValidator +} + +func (s *KeeperTestSuite) TestSubmitDelegationICQ_Successful() { + hostZone, validator := s.SetupSubmitDelegationICQ() + + err := s.App.StakeibcKeeper.SubmitDelegationICQ(s.Ctx, hostZone, ValAddress) + s.Require().NoError(err, "no error expected") + + // check a query was created (a simple test; details about queries are covered in makeRequest's test) + queries := s.App.InterchainqueryKeeper.AllQueries(s.Ctx) + s.Require().Len(queries, 1, "one query should have been created") + + // confirm callback data from query + var callbackData types.DelegatorSharesQueryCallback + err = proto.Unmarshal(queries[0].CallbackData, &callbackData) + s.Require().NoError(err, "no error expected when unmarshalling callback data") + s.Require().Equal(validator.Delegation, callbackData.InitialValidatorDelegation, "query callback data delegation") + + // querying twice with the same query should only create one query + err = s.App.StakeibcKeeper.SubmitDelegationICQ(s.Ctx, hostZone, ValAddress) + s.Require().NoError(err, "no error expected") + + // check a query was created (a simple test; details about queries are covered in makeRequest's test) + queries = s.App.InterchainqueryKeeper.AllQueries(s.Ctx) + s.Require().Len(queries, 1, "querying twice with the same query should only create one query") + + // querying with a different query should create a second query + differentValidator := hostZone.Validators[1].Address + err = s.App.StakeibcKeeper.SubmitDelegationICQ(s.Ctx, hostZone, differentValidator) + s.Require().NoError(err, "no error expected") + + // check a query was created (a simple test; details about queries are covered in makeRequest's test) + queries = s.App.InterchainqueryKeeper.AllQueries(s.Ctx) + s.Require().Len(queries, 2, "querying with a different query should create a second query") +} + +func (s *KeeperTestSuite) TestSubmitDelegationICQ_MissingDelegationAddress() { + hostZone, _ := s.SetupSubmitDelegationICQ() + + hostZone.DelegationIcaAddress = "" + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + err := s.App.StakeibcKeeper.SubmitDelegationICQ(s.Ctx, hostZone, ValAddress) + s.Require().ErrorContains(err, "no delegation address found for") +} + +func (s *KeeperTestSuite) TestSubmitDelegationICQ_MissingConnectionId() { + hostZone, _ := s.SetupSubmitDelegationICQ() + + hostZone.ConnectionId = "" + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + err := s.App.StakeibcKeeper.SubmitDelegationICQ(s.Ctx, hostZone, ValAddress) + s.Require().ErrorContains(err, "connection-id cannot be empty") +} diff --git a/x/stakeibc/keeper/invariants.go b/x/stakeibc/keeper/invariants.go new file mode 100644 index 00000000000..4ff15bedf92 --- /dev/null +++ b/x/stakeibc/keeper/invariants.go @@ -0,0 +1,66 @@ +package keeper + +// DONTCOVER + +import ( + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// RegisterInvariants registers all governance invariants. +func RegisterInvariants(ir sdk.InvariantRegistry, k Keeper) { +} + +// AllInvariants runs all invariants of the stakeibc module +func AllInvariants(k Keeper) sdk.Invariant { + return func(ctx sdk.Context) (string, bool) { + // msg, broke := RedemptionRateInvariant(k)(ctx) + // note: once we have >1 invariant here, follow the pattern from staking module invariants here: https://github.com/cosmos/cosmos-sdk/blob/v0.46.0/x/staking/keeper/invariants.go + return "", false + } +} + +// TODO: Consider removing stride and day epochs completely and using a single hourly epoch +// Confirm the number of stride epochs in 1 day epoch +func (k Keeper) AssertStrideAndDayEpochRelationship(ctx sdk.Context) { + strideEpoch, found := k.GetEpochTracker(ctx, epochtypes.STRIDE_EPOCH) + if !found || strideEpoch.Duration == 0 { + return + } + dayEpoch, found := k.GetEpochTracker(ctx, epochtypes.DAY_EPOCH) + if !found || dayEpoch.Duration == 0 { + return + } + if dayEpoch.Duration/strideEpoch.Duration != StrideEpochsPerDayEpoch { + panic("The stride epoch must be 1/4th the length of the day epoch") + } +} + +// TODO [cleanup]: Update to be CheckRedemptionRateWithinSafetyBound and only throw an error (instead of a bool) +// safety check: ensure the redemption rate is NOT below our min safety threshold && NOT above our max safety threshold on host zone +func (k Keeper) IsRedemptionRateWithinSafetyBounds(ctx sdk.Context, zone types.HostZone) (bool, error) { + // Get the wide bounds + minSafetyThreshold, maxSafetyThreshold := k.GetOuterSafetyBounds(ctx, zone) + + redemptionRate := zone.RedemptionRate + + if redemptionRate.LT(minSafetyThreshold) || redemptionRate.GT(maxSafetyThreshold) { + return false, errorsmod.Wrapf(types.ErrRedemptionRateOutsideSafetyBounds, + "redemption rate %v is outside safety bounds [%v, %v]", redemptionRate, minSafetyThreshold, maxSafetyThreshold) + } + + // Verify the redemption rate is within the inner safety bounds + // The inner safety bounds should always be within the safety bounds, but + // the redundancy above is cheap. + // There is also one scenario where the outer bounds go within the inner bounds - if they're updated as part of a param change proposal. + minInnerSafetyThreshold, maxInnerSafetyThreshold := k.GetInnerSafetyBounds(ctx, zone) + if redemptionRate.LT(minInnerSafetyThreshold) || redemptionRate.GT(maxInnerSafetyThreshold) { + return false, errorsmod.Wrapf(types.ErrRedemptionRateOutsideSafetyBounds, + "redemption rate %v is outside inner safety bounds [%v, %v]", redemptionRate, minInnerSafetyThreshold, maxInnerSafetyThreshold) + } + + return true, nil +} diff --git a/x/stakeibc/keeper/invariants_test.go b/x/stakeibc/keeper/invariants_test.go new file mode 100644 index 00000000000..80a79c935bf --- /dev/null +++ b/x/stakeibc/keeper/invariants_test.go @@ -0,0 +1,108 @@ +package keeper_test + +import ( + sdkmath "cosmossdk.io/math" + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func (s *KeeperTestSuite) TestIsRedemptionRateWithinSafetyBounds() { + params := s.App.StakeibcKeeper.GetParams(s.Ctx) + params.DefaultMinRedemptionRateThreshold = 75 + params.DefaultMaxRedemptionRateThreshold = 150 + hostZones := make(map[string]types.HostZone) + hostZones["gaia-1"] = types.HostZone{ + ChainId: "gaia-1", + MinRedemptionRate: sdkmath.LegacyNewDecWithPrec(15, 1), // 1.5 + MaxRedemptionRate: sdkmath.LegacyNewDecWithPrec(25, 1), // 2.5 + } + hostZones["osmosis-1"] = types.HostZone{ + ChainId: "osmosis-1", + MinRedemptionRate: sdkmath.LegacyNewDecWithPrec(3, 1), // 0.3 + MaxRedemptionRate: sdkmath.LegacyNewDecWithPrec(20, 1), // 2 + } + s.App.StakeibcKeeper.SetParams(s.Ctx, params) + + for _, tc := range []struct { + chainId string + redemptionRate sdkmath.LegacyDec + expSafe bool + }{ + { + chainId: "osmosis-1", + redemptionRate: sdkmath.LegacyNewDecWithPrec(1, 1), // 0.1 + expSafe: false, + }, + { + chainId: "osmosis-1", + redemptionRate: sdkmath.LegacyNewDecWithPrec(3, 1), // 0.3 + expSafe: true, + }, + { + chainId: "osmosis-1", + redemptionRate: sdkmath.LegacyNewDecWithPrec(15, 1), // 1.5 + expSafe: true, + }, + { + chainId: "osmosis-1", + redemptionRate: sdkmath.LegacyNewDecWithPrec(25, 1), // 2.5 + expSafe: false, + }, + { + chainId: "gaia-1", + redemptionRate: sdkmath.LegacyNewDecWithPrec(1, 1), // 0.1 + expSafe: false, + }, + { + chainId: "gaia-1", + redemptionRate: sdkmath.LegacyNewDecWithPrec(3, 1), // 0.3 + expSafe: false, + }, + { + chainId: "gaia-1", + redemptionRate: sdkmath.LegacyNewDecWithPrec(15, 1), // 1.5 + expSafe: true, + }, + { + chainId: "gaia-1", + redemptionRate: sdkmath.LegacyNewDecWithPrec(25, 1), // 2.5 + expSafe: true, + }, + { + chainId: "stars-1", + redemptionRate: sdkmath.LegacyNewDecWithPrec(1, 1), // 0.1 + expSafe: false, + }, + { + chainId: "stars-1", + redemptionRate: sdkmath.LegacyNewDecWithPrec(3, 1), // 0.3 + expSafe: false, + }, + { + chainId: "stars-1", + redemptionRate: sdkmath.LegacyNewDecWithPrec(15, 1), // 1.5 + expSafe: true, + }, + { + chainId: "stars-1", + redemptionRate: sdkmath.LegacyNewDecWithPrec(25, 1), // 2.5 + expSafe: false, + }, + } { + hostZone, ok := hostZones[tc.chainId] + if !ok { + hostZone = types.HostZone{ + ChainId: tc.chainId, + } + } + hostZone.RedemptionRate = tc.redemptionRate + rrSafe, err := s.App.StakeibcKeeper.IsRedemptionRateWithinSafetyBounds(s.Ctx, hostZone) + if tc.expSafe { + s.Require().NoError(err) + s.Require().True(rrSafe) + } else { + s.Require().Error(err) + s.Require().False(rrSafe) + } + } +} diff --git a/x/stakeibc/keeper/keeper.go b/x/stakeibc/keeper/keeper.go new file mode 100644 index 00000000000..60aeaf8662a --- /dev/null +++ b/x/stakeibc/keeper/keeper.go @@ -0,0 +1,167 @@ +package keeper + +import ( + "fmt" + + errorsmod "cosmossdk.io/errors" + "cosmossdk.io/log" + sdkmath "cosmossdk.io/math" + storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" + icacontrollerkeeper "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/keeper" + ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" + "github.com/spf13/cast" + + "github.com/osmosis-labs/osmosis/v27/utils" + icacallbackskeeper "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/keeper" + icqkeeper "github.com/osmosis-labs/osmosis/v27/x/interchainquery/keeper" + recordsmodulekeeper "github.com/osmosis-labs/osmosis/v27/x/records/keeper" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +type ( + Keeper struct { + // *cosmosibckeeper.Keeper + cdc codec.Codec + storeKey storetypes.StoreKey + memKey storetypes.StoreKey + paramstore paramtypes.Subspace + authority string + ICAControllerKeeper icacontrollerkeeper.Keeper + IBCKeeper ibckeeper.Keeper + bankKeeper bankkeeper.Keeper + AccountKeeper types.AccountKeeper + InterchainQueryKeeper icqkeeper.Keeper + RecordsKeeper recordsmodulekeeper.Keeper + StakingKeeper stakingkeeper.Keeper + ICACallbacksKeeper icacallbackskeeper.Keeper + hooks types.StakeIBCHooks + RatelimitKeeper types.RatelimitKeeper + ICAOracleKeeper types.ICAOracleKeeper + ConsumerKeeper types.ConsumerKeeper + } +) + +func NewKeeper( + cdc codec.Codec, + storeKey, + memKey storetypes.StoreKey, + ps paramtypes.Subspace, + authority string, + accountKeeper types.AccountKeeper, + bankKeeper bankkeeper.Keeper, + icacontrollerkeeper icacontrollerkeeper.Keeper, + ibcKeeper ibckeeper.Keeper, + interchainQueryKeeper icqkeeper.Keeper, + RecordsKeeper recordsmodulekeeper.Keeper, + StakingKeeper stakingkeeper.Keeper, + ICACallbacksKeeper icacallbackskeeper.Keeper, + RatelimitKeeper types.RatelimitKeeper, + icaOracleKeeper types.ICAOracleKeeper, + ConsumerKeeper types.ConsumerKeeper, +) Keeper { + // set KeyTable if it has not already been set + if !ps.HasKeyTable() { + ps = ps.WithKeyTable(types.ParamKeyTable()) + } + + return Keeper{ + cdc: cdc, + storeKey: storeKey, + memKey: memKey, + paramstore: ps, + authority: authority, + AccountKeeper: accountKeeper, + bankKeeper: bankKeeper, + ICAControllerKeeper: icacontrollerkeeper, + IBCKeeper: ibcKeeper, + InterchainQueryKeeper: interchainQueryKeeper, + RecordsKeeper: RecordsKeeper, + StakingKeeper: StakingKeeper, + ICACallbacksKeeper: ICACallbacksKeeper, + RatelimitKeeper: RatelimitKeeper, + ICAOracleKeeper: icaOracleKeeper, + ConsumerKeeper: ConsumerKeeper, + } +} + +func (k Keeper) Logger(ctx sdk.Context) log.Logger { + return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) +} + +// SetHooks sets the hooks for ibc staking +func (k *Keeper) SetHooks(gh types.StakeIBCHooks) *Keeper { + if k.hooks != nil { + panic("cannot set ibc staking hooks twice") + } + + k.hooks = gh + + return k +} + +// GetAuthority returns the x/stakeibc module's authority. +func (k Keeper) GetAuthority() string { + return k.authority +} + +func (k Keeper) GetICATimeoutNanos(ctx sdk.Context, epochType string) (uint64, error) { + epochTracker, found := k.GetEpochTracker(ctx, epochType) + if !found { + k.Logger(ctx).Error(fmt.Sprintf("Failed to get epoch tracker for %s", epochType)) + return 0, errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "Failed to get epoch tracker for %s", epochType) + } + // BUFFER by 5% of the epoch length + bufferSizeParam := k.GetParam(ctx, types.KeyBufferSize) + bufferSize := epochTracker.Duration / bufferSizeParam + // buffer size should not be negative or longer than the epoch duration + if bufferSize > epochTracker.Duration { + k.Logger(ctx).Error(fmt.Sprintf("Invalid buffer size %d", bufferSize)) + return 0, errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "Invalid buffer size %d", bufferSize) + } + timeoutNanos := epochTracker.NextEpochStartTime - bufferSize + timeoutNanosUint64, err := cast.ToUint64E(timeoutNanos) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Failed to convert timeoutNanos to uint64, error: %s", err.Error())) + return 0, errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "Failed to convert timeoutNanos to uint64, error: %s", err.Error()) + } + return timeoutNanosUint64, nil +} + +func (k Keeper) GetOuterSafetyBounds(ctx sdk.Context, zone types.HostZone) (sdkmath.LegacyDec, sdkmath.LegacyDec) { + // Fetch the wide bounds + minSafetyThresholdInt := k.GetParam(ctx, types.KeyDefaultMinRedemptionRateThreshold) + minSafetyThreshold := sdkmath.LegacyNewDec(utils.UintToInt(minSafetyThresholdInt)).Quo(sdkmath.LegacyNewDec(100)) + + if !zone.MinRedemptionRate.IsNil() && zone.MinRedemptionRate.IsPositive() { + minSafetyThreshold = zone.MinRedemptionRate + } + + maxSafetyThresholdInt := k.GetParam(ctx, types.KeyDefaultMaxRedemptionRateThreshold) + maxSafetyThreshold := sdkmath.LegacyNewDec(utils.UintToInt(maxSafetyThresholdInt)).Quo(sdkmath.LegacyNewDec(100)) + + if !zone.MaxRedemptionRate.IsNil() && zone.MaxRedemptionRate.IsPositive() { + maxSafetyThreshold = zone.MaxRedemptionRate + } + + return minSafetyThreshold, maxSafetyThreshold +} + +func (k Keeper) GetInnerSafetyBounds(ctx sdk.Context, zone types.HostZone) (sdkmath.LegacyDec, sdkmath.LegacyDec) { + // Fetch the inner bounds + minSafetyThreshold, maxSafetyThreshold := k.GetOuterSafetyBounds(ctx, zone) + + if !zone.MinInnerRedemptionRate.IsNil() && zone.MinInnerRedemptionRate.IsPositive() && zone.MinInnerRedemptionRate.GT(minSafetyThreshold) { + minSafetyThreshold = zone.MinInnerRedemptionRate + } + if !zone.MaxInnerRedemptionRate.IsNil() && zone.MaxInnerRedemptionRate.IsPositive() && zone.MaxInnerRedemptionRate.LT(maxSafetyThreshold) { + maxSafetyThreshold = zone.MaxInnerRedemptionRate + } + + return minSafetyThreshold, maxSafetyThreshold +} diff --git a/x/stakeibc/keeper/keeper_test.go b/x/stakeibc/keeper/keeper_test.go new file mode 100644 index 00000000000..128d29a650d --- /dev/null +++ b/x/stakeibc/keeper/keeper_test.go @@ -0,0 +1,142 @@ +package keeper_test + +import ( + "testing" + "time" + + ibctesting "github.com/cosmos/ibc-go/v8/testing" + "github.com/stretchr/testify/suite" + + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + recordtypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/keeper" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +var ( + Atom = "uatom" + StAtom = "stuatom" + IbcAtom = "ibc/uatom" + GaiaPrefix = "cosmos" + HostChainId = "GAIA" + Bech32Prefix = "cosmos" + + Osmo = "uosmo" + StOsmo = "stuosmo" + IbcOsmo = "ibc/uosmo" + OsmoPrefix = "osmo" + OsmoChainId = "OSMO" + + HostDenom = "udenom" + RewardDenom = "ureward" + + ValidHostAddress = "cosmos1uk4ze0x4nvh4fk0xm4jdud58eqn4yxhrgl2scj" + ValAddress = "cosmosvaloper1uk4ze0x4nvh4fk0xm4jdud58eqn4yxhrdt795p" + StrideICAAddress = "stride1gcx4yeplccq9nk6awzmm0gq8jf7yet80qj70tkwy0mz7pg87nepsen0l38" + HostICAAddress = "cosmos1gcx4yeplccq9nk6awzmm0gq8jf7yet80qj70tkwy0mz7pg87nepswn2dj8" + LSMTokenBaseDenom = ValAddress + "/32" + + DepositAddress = "deposit" + CommunityPoolStakeHoldingAddress = "staking-holding" + CommunityPoolRedeemHoldingAddress = "redeem-holding" + + DepositRecordId = uint64(1) + + Authority = authtypes.NewModuleAddress(govtypes.ModuleName).String() +) + +type ICQCallbackArgs struct { + Query icqtypes.Query + CallbackArgs []byte +} + +type KeeperTestSuite struct { + apptesting.AppTestHelper +} + +func (s *KeeperTestSuite) SetupTest() { + s.Setup() +} + +// Dynamically gets the MsgServer for this module's keeper +// this function must be used so that the MsgServer is always created with the most updated App context +// +// which can change depending on the type of test +// (e.g. tests with only one Stride chain vs tests with multiple chains and IBC support) +func (s *KeeperTestSuite) GetMsgServer() types.MsgServer { + return keeper.NewMsgServerImpl(s.App.StakeibcKeeper) +} + +func TestKeeperTestSuite(t *testing.T) { + suite.Run(t, new(KeeperTestSuite)) +} + +// Helper function to get a host zone and confirm it was found +func (s *KeeperTestSuite) MustGetHostZone(chainId string) types.HostZone { + hostZone, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, chainId) + s.Require().True(found, "host zone should have been found") + return hostZone +} + +// Helper function to get a deposit record and confirm it was found +func (s *KeeperTestSuite) MustGetDepositRecord(depositRecordId uint64) recordtypes.DepositRecord { + depositRecord, found := s.App.RecordsKeeper.GetDepositRecord(s.Ctx, depositRecordId) + s.Require().True(found, "deposit record should have been found") + return depositRecord +} + +// Helper function to get a host zone unbonding record and confirm it was found +func (s *KeeperTestSuite) MustGetHostZoneUnbonding(epochNumber uint64, chainId string) recordtypes.HostZoneUnbonding { + hostZoneUnbonding, found := s.App.RecordsKeeper.GetHostZoneUnbondingByChainId(s.Ctx, epochNumber, chainId) + s.Require().True(found, "host zone unbonding should have been found") + return *hostZoneUnbonding +} + +// Helper function to create an epoch tracker that dictates the timeout +func (s *KeeperTestSuite) CreateEpochForICATimeout(epochType string, timeoutDuration time.Duration) { + epochEndTime := uint64(s.Ctx.BlockTime().Add(timeoutDuration).UnixNano()) + epochTracker := types.EpochTracker{ + EpochIdentifier: epochType, + NextEpochStartTime: epochEndTime, + Duration: uint64(timeoutDuration), + } + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, epochTracker) +} + +// Validates the query object stored after an ICQ submission, using some default testing +// values (e.g. HostChainId, stakeibc module name, etc.), and returning the query +// NOTE: This assumes there was only one submission and grabs the first query from the store +func (s *KeeperTestSuite) ValidateQuerySubmission( + queryType string, + queryData []byte, + callbackId string, + timeoutDuration time.Duration, + timeoutPolicy icqtypes.TimeoutPolicy, +) icqtypes.Query { + // Check that there's only one query + queries := s.App.InterchainqueryKeeper.AllQueries(s.Ctx) + s.Require().Len(queries, 1, "there should have been 1 query submitted") + query := queries[0] + + // Validate the chainId and connectionId + s.Require().Equal(HostChainId, query.ChainId, "query chain ID") + s.Require().Equal(ibctesting.FirstConnectionID, query.ConnectionId, "query connection ID") + s.Require().Equal(types.ModuleName, query.CallbackModule, "query module") + + // Validate the query type and request data + s.Require().Equal(queryType, query.QueryType, "query type") + s.Require().Equal(string(queryData), string(query.RequestData), "query request data") + s.Require().Equal(callbackId, query.CallbackId, "query callback ID") + + // Validate the query timeout + expectedTimeoutTimestamp := s.Ctx.BlockTime().Add(timeoutDuration).UnixNano() + s.Require().Equal(timeoutDuration, query.TimeoutDuration, "query timeout duration") + s.Require().Equal(expectedTimeoutTimestamp, int64(query.TimeoutTimestamp), "query timeout timestamp") + s.Require().Equal(icqtypes.TimeoutPolicy_REJECT_QUERY_RESPONSE, query.TimeoutPolicy, "query timeout policy") + + return query +} diff --git a/x/stakeibc/keeper/lsm.go b/x/stakeibc/keeper/lsm.go new file mode 100644 index 00000000000..7718dfe6ba8 --- /dev/null +++ b/x/stakeibc/keeper/lsm.go @@ -0,0 +1,507 @@ +package keeper + +import ( + "fmt" + "regexp" + "strings" + "time" + + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + "github.com/cometbft/cometbft/crypto" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/cosmos/gogoproto/proto" + icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + "github.com/osmosis-labs/osmosis/v27/utils" + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +var ( + // A valid IBC path for the LSM token must only consist of 1 channel hop along a transfer channel + // (e.g. "transfer/channel-0") + IsValidIBCPath = regexp.MustCompile(fmt.Sprintf(`^%s/(%s[0-9]{1,20})$`, transfertypes.PortID, channeltypes.ChannelPrefix)).MatchString + + // Timeout for the validator slash query that occurs at periodic deposit intervals + LSMSlashQueryTimeout = time.Minute * 5 // 5 minutes + + // Time for the detokenization ICA + DetokenizationTimeout = time.Hour * 24 // 1 day +) + +// Validates the parameters supplied with this LSMLiquidStake, including that the denom +// corresponds with a valid LSM Token and that the user has sufficient balance +// +// This is called once at the beginning of the liquid stake, and is, potentially, called +// again at the end (if the transaction was asynchronous due to an intermediate slash query) +// +// This function returns the associated host zone and validator along with the initial deposit record +func (k Keeper) ValidateLSMLiquidStake(ctx sdk.Context, msg types.MsgLSMLiquidStake) (types.LSMLiquidStake, error) { + // Get the denom trace from the IBC hash - this includes the full path and base denom + // Ex: LSMTokenIbcDenom of `ibc/XXX` might create a DenomTrace with: + // BaseDenom: cosmosvaloperXXX/42, Path: transfer/channel-0 + denomTrace, err := k.GetLSMTokenDenomTrace(ctx, msg.LsmTokenIbcDenom) + if err != nil { + return types.LSMLiquidStake{}, err + } + + // Get the host zone and validator address from the path and base denom respectively + lsmTokenBaseDenom := denomTrace.BaseDenom + hostZone, err := k.GetHostZoneFromLSMTokenPath(ctx, denomTrace.Path) + if err != nil { + return types.LSMLiquidStake{}, err + } + validator, err := k.GetValidatorFromLSMTokenDenom(lsmTokenBaseDenom, hostZone.Validators) + if err != nil { + return types.LSMLiquidStake{}, err + } + + // Confirm the staker has a sufficient balance to execute the liquid stake + liquidStakerAddress := sdk.MustAccAddressFromBech32(msg.Creator) + balance := k.bankKeeper.GetBalance(ctx, liquidStakerAddress, msg.LsmTokenIbcDenom).Amount + if balance.LT(msg.Amount) { + return types.LSMLiquidStake{}, errorsmod.Wrapf(sdkerrors.ErrInsufficientFunds, + "balance is lower than staking amount. staking amount: %v, balance: %v", msg.Amount, balance) + } + + // Build the LSMTokenDeposit record + // The stToken will be added outside of this function + depositId := GetLSMTokenDepositId(ctx.BlockHeight(), hostZone.ChainId, msg.Creator, lsmTokenBaseDenom) + lsmTokenDeposit := recordstypes.LSMTokenDeposit{ + DepositId: depositId, + ChainId: hostZone.ChainId, + Denom: lsmTokenBaseDenom, + IbcDenom: msg.LsmTokenIbcDenom, + StakerAddress: msg.Creator, + ValidatorAddress: validator.Address, + Amount: msg.Amount, + Status: recordstypes.LSMTokenDeposit_DEPOSIT_PENDING, + } + + // Return the wrapped deposit object with additional context (host zone and validator) + return types.LSMLiquidStake{ + Deposit: &lsmTokenDeposit, + HostZone: &hostZone, + Validator: &validator, + }, nil +} + +// Generates a unique ID for the LSM token deposit so that, if a slash query is issued, +// the query callback can be joined back with this tx +// The key in the store for an LSMTokenDeposit is chainId + denom (meaning, there +// can only be 1 LSMLiquidStake in progress per tokenization) +func GetLSMTokenDepositId(blockHeight int64, chainId, stakerAddress, denom string) string { + id := fmt.Sprintf("%d-%s-%s-%s", blockHeight, chainId, stakerAddress, denom) + return fmt.Sprintf("%x", crypto.Sha256([]byte(id))) +} + +// Parse the LSM Token's IBC denom hash into a DenomTrace object that contains the path and base denom +func (k Keeper) GetLSMTokenDenomTrace(ctx sdk.Context, denom string) (transfertypes.DenomTrace, error) { + ibcPrefix := transfertypes.DenomPrefix + "/" + + // Confirm the LSM Token is a valid IBC token (has "ibc/" prefix) + if !strings.HasPrefix(denom, ibcPrefix) { + return transfertypes.DenomTrace{}, errorsmod.Wrapf(types.ErrInvalidLSMToken, "lsm token is not an IBC token (%s)", denom) + } + + // Parse the hash string after the "ibc/" prefix into hex bytes + hexHash := denom[len(ibcPrefix):] + hash, err := transfertypes.ParseHexHash(hexHash) + if err != nil { + return transfertypes.DenomTrace{}, errorsmod.Wrapf(err, "unable to get ibc hex hash from denom %s", denom) + } + + // Lookup the trace from the hash + denomTrace, found := k.RecordsKeeper.TransferKeeper.GetDenomTrace(ctx, hash) + if !found { + return transfertypes.DenomTrace{}, errorsmod.Wrapf(types.ErrInvalidLSMToken, "denom trace not found for %s", denom) + } + + return denomTrace, nil +} + +// Parses the LSM token's IBC path (e.g. transfer/channel-0) and confirms the channel ID matches +// the transfer channel of a supported host zone +func (k Keeper) GetHostZoneFromLSMTokenPath(ctx sdk.Context, path string) (types.HostZone, error) { + // Validate path regex which confirms the token originated only one hop away (e.g. transfer/channel-0) + if !IsValidIBCPath(path) { + return types.HostZone{}, errorsmod.Wrapf(types.ErrInvalidLSMToken, + "ibc path of LSM token (%s) cannot be more than 1 hop away", path) + } + + // Remove the "transfer/" prefix + channelId := strings.ReplaceAll(path, transfertypes.PortID+"/", "") + + // Confirm the channel is from one of Stride's supported host zones + for _, hostZone := range k.GetAllHostZone(ctx) { + if hostZone.TransferChannelId == channelId { + if !hostZone.LsmLiquidStakeEnabled { + return hostZone, types.ErrLSMLiquidStakeDisabledForHostZone.Wrapf( + "LSM liquid stake disabled for %s", hostZone.ChainId) + } + return hostZone, nil + } + } + + return types.HostZone{}, errorsmod.Wrapf(types.ErrInvalidLSMToken, + "transfer channel-id from LSM token (%s) does not match any registered host zone", channelId) +} + +// Parses the LSM token's denom (of the form {validatorAddress}/{recordId}) and confirms that the validator +// is in the Stride validator set and does not have an active slash query +func (k Keeper) GetValidatorFromLSMTokenDenom(denom string, validators []*types.Validator) (types.Validator, error) { + // Denom is of the form {validatorAddress}/{recordId} + split := strings.Split(denom, "/") + if len(split) != 2 { + return types.Validator{}, errorsmod.Wrapf(types.ErrInvalidLSMToken, + "lsm token base denom is not of the format {val-address}/{record-id} (%s)", denom) + } + validatorAddress := split[0] + + // Confirm the validator: + // 1. Is registered on Stride + // 2. Does not have an active slash query in flight + // 3. Has a known sharesToTokens rate + for _, validator := range validators { + if validator.Address == validatorAddress { + if validator.SlashQueryInProgress { + return types.Validator{}, errorsmod.Wrapf(types.ErrValidatorWasSlashed, + "validator %s was slashed, liquid stakes from this validator are temporarily unavailable", validator.Address) + } + if validator.SharesToTokensRate.IsNil() || validator.SharesToTokensRate.IsZero() { + return types.Validator{}, errorsmod.Wrapf(types.ErrValidatorSharesToTokensRateNotKnown, + "validator %s sharesToTokens rate is not known", validator.Address) + } + return *validator, nil + } + } + + return types.Validator{}, errorsmod.Wrapf(types.ErrInvalidLSMToken, + "validator (%s) is not registered in the Stride validator set", validatorAddress) +} + +// Given an LSMToken representing a number of delegator shares, returns the stToken coin +// using the validator's sharesToTokens rate and the host zone redemption rate +// +// StTokens = LSMTokenShares * Validator SharesToTokens Rate / Redemption Rate +// +// Note: in the event of a slash query, these tokens will be minted only if the +// validator's sharesToTokens rate did not change +func (k Keeper) CalculateLSMStToken(liquidStakedShares sdkmath.Int, lsmLiquidStake types.LSMLiquidStake) sdk.Coin { + hostZone := lsmLiquidStake.HostZone + validator := lsmLiquidStake.Validator + + liquidStakedTokens := sdkmath.LegacyNewDecFromInt(liquidStakedShares).Mul(validator.SharesToTokensRate) + stAmount := (liquidStakedTokens.Quo(hostZone.RedemptionRate)).TruncateInt() + + stDenom := types.StAssetDenomFromHostZoneDenom(hostZone.HostDenom) + stCoin := sdk.NewCoin(stDenom, stAmount) + + return stCoin +} + +// Determines the new slash query checkpoint, by mulitplying the query threshold percent by the current TVL +func (k Keeper) GetUpdatedSlashQueryCheckpoint(ctx sdk.Context, totalDelegations sdkmath.Int) sdkmath.Int { + params := k.GetParams(ctx) + queryThreshold := sdkmath.LegacyNewDecWithPrec(utils.UintToInt(params.ValidatorSlashQueryThreshold), 2) // percentage + checkpoint := queryThreshold.Mul(sdkmath.LegacyNewDecFromInt(totalDelegations)).TruncateInt() + return checkpoint +} + +// Checks if we need to issue an ICQ to check if a validator was slashed +// The query runs at periodic intervals defined by the ValidatorSlashQueryInterval +// The interval is represented as percent of TVL +// (e.g. 1% means every LS that causes the progress to breach 1% of TVL triggers the query) +func (k Keeper) ShouldCheckIfValidatorWasSlashed( + ctx sdk.Context, + validator types.Validator, + transactionStakeAmount sdkmath.Int, +) bool { + // If the checkpoint is zero - that means either the threshold parameter is 0 + // (which should not be possible), or that the total host zone stake is 0 + // In either case, do not submit the query + if validator.SlashQueryCheckpoint.IsZero() { + return false + } + + oldInterval := validator.SlashQueryProgressTracker.Quo(validator.SlashQueryCheckpoint) + newInterval := validator.SlashQueryProgressTracker.Add(transactionStakeAmount).Quo(validator.SlashQueryCheckpoint) + + // Submit query if the query interval checkpoint has been breached + // Ex: Query Threshold: 1%, TVL: 100k => 1k Checkpoint + // Old Progress Tracker: 900, Old Interval: 900 / 1000 => Interval 0, + // Stake: 200, New Progress Tracker: 1100, New Interval: 1100 / 1000 = 1.1 = 1 + // => OldInterval: 0, NewInterval: 1 => Issue Slash Query + return oldInterval.LT(newInterval) +} + +// StartLSMLiquidStake runs the transactional logic that occurs before the optional query +// This includes validation on the LSM Token and the stToken amount calculation +func (k Keeper) StartLSMLiquidStake(ctx sdk.Context, msg types.MsgLSMLiquidStake) (types.LSMLiquidStake, error) { + // Validate the provided message parameters - including the denom and staker balance + lsmLiquidStake, err := k.ValidateLSMLiquidStake(ctx, msg) + if err != nil { + return types.LSMLiquidStake{}, err + } + hostZone := lsmLiquidStake.HostZone + + if hostZone.Halted { + return types.LSMLiquidStake{}, errorsmod.Wrapf(types.ErrHaltedHostZone, "host zone %s is halted", hostZone.ChainId) + } + + // Check if we already have tokens with this denom in records + _, found := k.RecordsKeeper.GetLSMTokenDeposit(ctx, hostZone.ChainId, lsmLiquidStake.Deposit.Denom) + if found { + return types.LSMLiquidStake{}, errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, + "there is already a previous record with this denom being processed: %s", lsmLiquidStake.Deposit.Denom) + } + + // Determine the amount of stTokens to mint using the redemption rate and the validator's sharesToTokens rate + // StTokens = LSMTokenShares * Validator SharesToTokens Rate / Redemption Rate + // Note: in the event of a slash query, these tokens will be minted only if the + // validator's sharesToTokens rate did not change + stCoin := k.CalculateLSMStToken(msg.Amount, lsmLiquidStake) + if stCoin.Amount.IsZero() { + return types.LSMLiquidStake{}, errorsmod.Wrapf(types.ErrInsufficientLiquidStake, + "Liquid stake of %s%s would return 0 stTokens", msg.Amount.String(), hostZone.HostDenom) + } + + // Add the stToken to this deposit record + lsmLiquidStake.Deposit.StToken = stCoin + k.RecordsKeeper.SetLSMTokenDeposit(ctx, *lsmLiquidStake.Deposit) + + return lsmLiquidStake, nil +} + +// SubmitValidatorSlashQuery submits an interchain query for the validator's sharesToTokens rate +// This is done periodically at checkpoints denominated in native tokens +// (e.g. every 100k ATOM that's LSM liquid staked with validator X) +func (k Keeper) SubmitValidatorSlashQuery(ctx sdk.Context, lsmLiquidStake types.LSMLiquidStake) error { + chainId := lsmLiquidStake.HostZone.ChainId + validatorAddress := lsmLiquidStake.Validator.Address + timeoutDuration := LSMSlashQueryTimeout + timeoutPolicy := icqtypes.TimeoutPolicy_EXECUTE_QUERY_CALLBACK + + // Build and serialize the callback data required to complete the LSM Liquid stake upon query callback + callbackData := types.ValidatorSharesToTokensQueryCallback{ + LsmLiquidStake: &lsmLiquidStake, + } + callbackDataBz, err := proto.Marshal(&callbackData) + if err != nil { + return errorsmod.Wrapf(err, "unable to serialize LSMLiquidStake struct for validator sharesToTokens rate query callback") + } + + return k.SubmitValidatorSharesToTokensRateICQ(ctx, chainId, validatorAddress, callbackDataBz, timeoutDuration, timeoutPolicy) +} + +// FinishLSMLiquidStake finishes the liquid staking flow by escrowing the LSM token, +// sending a user their stToken, and then IBC transfering the LSM Token to the host zone +// +// If the slash query interrupted the transaction, this function is called +// asynchronously after the query callback +// +// If no slash query was needed, this is called synchronously after StartLSMLiquidStake +// If this is run asynchronously, we need to re-validate the transaction info (e.g. staker's balance) +func (k Keeper) FinishLSMLiquidStake(ctx sdk.Context, lsmLiquidStake types.LSMLiquidStake, async bool) error { + hostZone := lsmLiquidStake.HostZone + lsmTokenDeposit := *lsmLiquidStake.Deposit + + // If the transaction was interrupted by the slash query, + // validate the LSM Liquid stake message parameters again + // The most significant check here is that the user still has sufficient balance for this LSM liquid stake + if async { + lsmLiquidStakeMsg := types.MsgLSMLiquidStake{ + Creator: lsmTokenDeposit.StakerAddress, + LsmTokenIbcDenom: lsmTokenDeposit.IbcDenom, + Amount: lsmTokenDeposit.Amount, + } + if _, err := k.ValidateLSMLiquidStake(ctx, lsmLiquidStakeMsg); err != nil { + return err + } + } + + // Get the staker's address and the host zone's deposit account address (which will custody the tokens) + liquidStakerAddress := sdk.MustAccAddressFromBech32(lsmTokenDeposit.StakerAddress) + hostZoneDepositAddress, err := sdk.AccAddressFromBech32(hostZone.DepositAddress) + if err != nil { + return errorsmod.Wrapf(err, "host zone address is invalid") + } + + // Transfer the LSM token to the deposit account + // Note: checkBlockedAddr=false because hostZoneDepositAddress is a module + lsmIBCToken := sdk.NewCoin(lsmTokenDeposit.IbcDenom, lsmTokenDeposit.Amount) + if err := utils.SafeSendCoins(false, k.bankKeeper, ctx, liquidStakerAddress, hostZoneDepositAddress, sdk.NewCoins(lsmIBCToken)); err != nil { + return errorsmod.Wrap(err, "failed to send tokens from Account to Module") + } + + // Mint stToken and send to the user + stToken := sdk.NewCoins(lsmTokenDeposit.StToken) + if err := k.bankKeeper.MintCoins(ctx, types.ModuleName, stToken); err != nil { + return errorsmod.Wrapf(err, "Failed to mint stTokens") + } + if err := k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, liquidStakerAddress, stToken); err != nil { + return errorsmod.Wrapf(err, "Failed to send %s from module to account", lsmTokenDeposit.StToken.String()) + } + + // Get delegation account address as the destination for the LSM Token + if hostZone.DelegationIcaAddress == "" { + return errorsmod.Wrapf(types.ErrICAAccountNotFound, "no delegation address found for %s", hostZone.ChainId) + } + + // Update the deposit status + k.RecordsKeeper.UpdateLSMTokenDepositStatus(ctx, lsmTokenDeposit, recordstypes.LSMTokenDeposit_TRANSFER_QUEUE) + + // Update the slash query progress on the validator + if err := k.IncrementValidatorSlashQueryProgress( + ctx, + hostZone.ChainId, + lsmTokenDeposit.ValidatorAddress, + lsmTokenDeposit.Amount, + ); err != nil { + return err + } + + // Emit an LSM liquid stake event + EmitSuccessfulLSMLiquidStakeEvent(ctx, *hostZone, lsmTokenDeposit) + + k.hooks.AfterLiquidStake(ctx, liquidStakerAddress) + return nil +} + +// Loops through all active host zones, grabs queued LSMTokenDeposits for that host +// that are in status TRANSFER_QUEUE, and submits the IBC Transfer to the host +func (k Keeper) TransferAllLSMDeposits(ctx sdk.Context) { + for _, hostZone := range k.GetAllActiveHostZone(ctx) { + // Ignore hosts that have not been successfully registered + if hostZone.DelegationIcaAddress == "" { + continue + } + + // Submit an IBC transfer for all queued deposits + queuedDeposits := k.RecordsKeeper.GetLSMDepositsForHostZoneWithStatus( + ctx, + hostZone.ChainId, + recordstypes.LSMTokenDeposit_TRANSFER_QUEUE, + ) + for _, deposit := range queuedDeposits { + + // If the IBC transfer fails to get off the ground, flag the deposit as FAILED + // This is highly unlikely and would indicate a larger problem + if err := k.RecordsKeeper.IBCTransferLSMToken( + ctx, + deposit, + hostZone.TransferChannelId, + hostZone.DepositAddress, + hostZone.DelegationIcaAddress, + ); err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Unable to submit IBC Transfer of LSMToken for %v%s on %s: %s", + deposit.Amount, deposit.Denom, hostZone.ChainId, err.Error())) + k.RecordsKeeper.UpdateLSMTokenDepositStatus(ctx, deposit, recordstypes.LSMTokenDeposit_TRANSFER_FAILED) + continue + } + k.Logger(ctx).Info(fmt.Sprintf("Submitted IBC Transfer for LSM deposit %v%s on %s", + deposit.Amount, deposit.Denom, hostZone.ChainId)) + + k.RecordsKeeper.UpdateLSMTokenDepositStatus(ctx, deposit, recordstypes.LSMTokenDeposit_TRANSFER_IN_PROGRESS) + } + } +} + +// Submits an ICA to "Redeem" an LSM Token - meaning converting the token into native stake +// This function is called in the EndBlocker which means if the ICA submission fails, +// any modified state is not reverted +// +// The deposit Status is intentionally updated before the ICA is submitted even though it will NOT be reverted +// if the ICA fails to send. This is because a failure is likely caused by a closed ICA channel, and the status +// update will prevent the ICA from being continuously re-submitted. When the ICA channel is restored, the +// deposit status will get reset, and the ICA will be attempted again. +func (k Keeper) DetokenizeLSMDeposit(ctx sdk.Context, hostZone types.HostZone, deposit recordstypes.LSMTokenDeposit) error { + // Get the delegation account (which owns the LSM token) + if hostZone.DelegationIcaAddress == "" { + return errorsmod.Wrapf(types.ErrICAAccountNotFound, "no delegation account found for %s", hostZone.ChainId) + } + + // Build the detokenization ICA message + token := sdk.NewCoin(deposit.Denom, deposit.Amount) + detokenizeMsg := []proto.Message{&types.MsgRedeemTokensForShares{ + DelegatorAddress: hostZone.DelegationIcaAddress, + Amount: token, + }} + + // Store the LSMTokenDeposit for the callback + callbackArgs := types.DetokenizeSharesCallback{ + Deposit: &deposit, + } + callbackArgsBz, err := proto.Marshal(&callbackArgs) + if err != nil { + return err + } + + // Submit the ICA with a coonservative timeout + timeout := utils.IntToUint(ctx.BlockTime().UnixNano() + (DetokenizationTimeout).Nanoseconds()) + if _, err := k.SubmitTxs( + ctx, + hostZone.ConnectionId, + detokenizeMsg, + types.ICAAccountType_DELEGATION, + timeout, + ICACallbackID_Detokenize, + callbackArgsBz, + ); err != nil { + return errorsmod.Wrapf(err, "unable to submit detokenization ICA for %s", deposit.Denom) + } + + // Mark the deposit as IN_PROGRESS + k.RecordsKeeper.UpdateLSMTokenDepositStatus(ctx, deposit, recordstypes.LSMTokenDeposit_DETOKENIZATION_IN_PROGRESS) + + // Update the validator to say that it has a delegation change in progress + if err := k.IncrementValidatorDelegationChangesInProgress(&hostZone, deposit.ValidatorAddress); err != nil { + return err + } + k.SetHostZone(ctx, hostZone) + + return nil +} + +// Loops through all active host zones, grabs the queued LSMTokenDeposits for that host +// that are in status DETOKENIZATION_QUEUE, and submits the detokenization ICA for each +func (k Keeper) DetokenizeAllLSMDeposits(ctx sdk.Context) { + // Submit detokenization ICAs for each active host zone + for _, hostZone := range k.GetAllActiveHostZone(ctx) { + // Get the host zone's delegation ICA portID + delegationICAOwner := types.FormatHostZoneICAOwner(hostZone.ChainId, types.ICAAccountType_DELEGATION) + delegationICAPortID, err := icatypes.NewControllerPortID(delegationICAOwner) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Unable to get delegation port ID for %s: %s", hostZone.ChainId, err)) + continue + } + + // If the delegation channel is not open, skip this host zone + _, isOpen := k.ICAControllerKeeper.GetOpenActiveChannel(ctx, hostZone.ConnectionId, delegationICAPortID) + if !isOpen { + k.Logger(ctx).Error(fmt.Sprintf("Skipping detokenization ICAs for %s - Delegation ICA channel is closed", hostZone.ChainId)) + continue + } + + // If the delegation channel is open, submit the detokenize ICA + queuedDeposits := k.RecordsKeeper.GetLSMDepositsForHostZoneWithStatus( + ctx, + hostZone.ChainId, + recordstypes.LSMTokenDeposit_DETOKENIZATION_QUEUE, + ) + for _, deposit := range queuedDeposits { + if err := k.DetokenizeLSMDeposit(ctx, hostZone, deposit); err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Unable to submit detokenization ICAs for %v%s on %s: %s", + deposit.Amount, deposit.Denom, hostZone.ChainId, err.Error())) + continue + } + k.Logger(ctx).Info(fmt.Sprintf("Submitted detokenization ICA for deposit %v%s on %s", deposit.Amount, deposit.Denom, hostZone.ChainId)) + } + } +} diff --git a/x/stakeibc/keeper/lsm_test.go b/x/stakeibc/keeper/lsm_test.go new file mode 100644 index 00000000000..7c7706a63c0 --- /dev/null +++ b/x/stakeibc/keeper/lsm_test.go @@ -0,0 +1,712 @@ +package keeper_test + +import ( + "fmt" + + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/keeper" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" + + "github.com/cosmos/gogoproto/proto" +) + +func (s *KeeperTestSuite) TestValidateLSMLiquidStake() { + // Create and store a valid denom trace so we can succesfully parse the LSM Token + path := "transfer/channel-0" + ibcDenom := s.CreateAndStoreIBCDenom(LSMTokenBaseDenom) + + // Store a second valid denom trace that will not be registered with the host zone + invalidPath := "transfer/channel-100" + s.App.TransferKeeper.SetDenomTrace(s.Ctx, transfertypes.DenomTrace{ + BaseDenom: LSMTokenBaseDenom, + Path: invalidPath, + }) + + // Store the corresponding validator in the host zone + hostZone := types.HostZone{ + ChainId: HostChainId, + TransferChannelId: ibctesting.FirstChannelID, + Validators: []*types.Validator{ + {Address: ValAddress, SlashQueryInProgress: false, SharesToTokensRate: sdkmath.LegacyOneDec()}, + }, + LsmLiquidStakeEnabled: true, + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + // Fund the user so they have sufficient balance + liquidStaker := s.TestAccs[0] + stakeAmount := sdkmath.NewInt(1_000_000) + s.FundAccount(liquidStaker, sdk.NewCoin(ibcDenom, stakeAmount)) + + // Prepare a valid message and the expected associated response + validMsg := types.MsgLSMLiquidStake{ + Creator: liquidStaker.String(), + Amount: stakeAmount, + LsmTokenIbcDenom: ibcDenom, + } + expectedDepositId := keeper.GetLSMTokenDepositId(s.Ctx.BlockHeight(), HostChainId, liquidStaker.String(), LSMTokenBaseDenom) + expectedLSMTokenDeposit := recordstypes.LSMTokenDeposit{ + DepositId: expectedDepositId, + ChainId: HostChainId, + Denom: LSMTokenBaseDenom, + IbcDenom: ibcDenom, + StakerAddress: liquidStaker.String(), + ValidatorAddress: ValAddress, + Amount: stakeAmount, + Status: recordstypes.LSMTokenDeposit_DEPOSIT_PENDING, + } + + // Confirm response matches after a valid message + lsmLiquidStake, err := s.App.StakeibcKeeper.ValidateLSMLiquidStake(s.Ctx, validMsg) + s.Require().NoError(err, "no error expected when validating valid message") + + s.Require().Equal(HostChainId, lsmLiquidStake.HostZone.ChainId, "host zone after valid message") + s.Require().Equal(ValAddress, lsmLiquidStake.Validator.Address, "validator after valid message") + s.Require().Equal(expectedLSMTokenDeposit, *lsmLiquidStake.Deposit, "deposit after valid message") + + // Try with an ibc denom that's not registered - it should fail + invalidMsg := validMsg + invalidMsg.LsmTokenIbcDenom = transfertypes.ParseDenomTrace(fmt.Sprintf("%s/%s", path, "fake_denom")).IBCDenom() + _, err = s.App.StakeibcKeeper.ValidateLSMLiquidStake(s.Ctx, invalidMsg) + s.Require().ErrorContains(err, fmt.Sprintf("denom trace not found for %s", invalidMsg.LsmTokenIbcDenom)) + + // Try with a user that has insufficient balance - it should fail + invalidMsg = validMsg + invalidMsg.Creator = s.TestAccs[1].String() + _, err = s.App.StakeibcKeeper.ValidateLSMLiquidStake(s.Ctx, invalidMsg) + s.Require().ErrorContains(err, "insufficient funds") + + // Try with with a different transfer channel - it should fail + invalidMsg = validMsg + invalidMsg.LsmTokenIbcDenom = transfertypes.ParseDenomTrace(fmt.Sprintf("%s/%s", invalidPath, LSMTokenBaseDenom)).IBCDenom() + _, err = s.App.StakeibcKeeper.ValidateLSMLiquidStake(s.Ctx, invalidMsg) + s.Require().ErrorContains(err, "transfer channel-id from LSM token (channel-100) does not match any registered host zone") + + // Flag the validator as slashed - it should fail + hostZone.Validators[0].SlashQueryInProgress = true + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + _, err = s.App.StakeibcKeeper.ValidateLSMLiquidStake(s.Ctx, invalidMsg) + s.Require().ErrorContains(err, "transfer channel-id from LSM token (channel-100) does not match any registered host zone") + + // Remove the validator and try again - it should fail + hostZone.Validators = []*types.Validator{} + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + _, err = s.App.StakeibcKeeper.ValidateLSMLiquidStake(s.Ctx, validMsg) + s.Require().ErrorContains(err, fmt.Sprintf("validator (%s) is not registered in the Stride validator set", ValAddress)) +} + +func (s *KeeperTestSuite) TestGetLSMTokenDepositId() { + address1 := "stride1h8wj2e5a329ve2r472ydezc4lel4dmsdn5v5sd" + address2 := "stride15vg2f5yvrs3673zj89mpwt260cpalws5psxtdh" + + s.Require().Equal( + "87bd1d24f68162b37eb564ea17cc946d9119753f5ec2deeeed08b585f4164d30", + keeper.GetLSMTokenDepositId(1, HostChainId, address1, ValAddress+"/1"), + ) + s.Require().Equal( + "c799379d0fa078df85673cb2cd7a055c7ed1f486c22af28ed492908353398a64", + keeper.GetLSMTokenDepositId(2, HostChainId, address1, ValAddress+"/1"), + ) + s.Require().Equal( + "e16e4a9018d4a9b68bd1bcec7ddc67df7377242880173f717c2750fedb7ecf69", + keeper.GetLSMTokenDepositId(1, OsmoChainId, address1, ValAddress+"/1"), + ) + s.Require().Equal( + "05e2ae6b19b05b8be485b77899524eb018cdf65869b450b0272b67cf8aa2936a", + keeper.GetLSMTokenDepositId(1, HostChainId, address2, ValAddress+"/1"), + ) + s.Require().Equal( + "e0aa2cc10d2daeb8c5fde4cfae367ef098cfc42395eb3d23ca8be498c62717b0", + keeper.GetLSMTokenDepositId(1, HostChainId, address1, ValAddress+"/2"), + ) +} + +func (s *KeeperTestSuite) TestGetLSMTokenDenomTrace() { + baseDenom := "cosmosvaloper1uk4ze0x4nvh4fk0xm4jdud58eqn4yxhrdt795p/48" + path := "transfer/channel-0" + ibcDenom := transfertypes.ParseDenomTrace(fmt.Sprintf("%s/%s", path, baseDenom)).IBCDenom() + + // Store denom trace so the transfer keeper can look it up + expectedDenomTrace := transfertypes.DenomTrace{ + BaseDenom: baseDenom, + Path: path, + } + s.App.TransferKeeper.SetDenomTrace(s.Ctx, expectedDenomTrace) + + // Test parsing of IBC Denom + actualDenomTrace, err := s.App.StakeibcKeeper.GetLSMTokenDenomTrace(s.Ctx, ibcDenom) + s.Require().NoError(err, "no error expected with successful parse") + s.Require().Equal(expectedDenomTrace, actualDenomTrace, "denom trace") + + // Attempt to parse with a non-ibc denom - it should fail + _, err = s.App.StakeibcKeeper.GetLSMTokenDenomTrace(s.Ctx, "non-ibc-denom") + s.Require().ErrorContains(err, "lsm token is not an IBC token (non-ibc-denom)") + + // Attempt to parse with an invalid ibc-denom - it should fail + _, err = s.App.StakeibcKeeper.GetLSMTokenDenomTrace(s.Ctx, "ibc/xxx") + s.Require().ErrorContains(err, "unable to get ibc hex hash from denom ibc/xxx") + + // Attempt to parse with a valid ibc denom that is not registered - it should fail + notRegisteredIBCDenom := transfertypes.ParseDenomTrace("transfer/channel-0/cosmosXXX").IBCDenom() + _, err = s.App.StakeibcKeeper.GetLSMTokenDenomTrace(s.Ctx, notRegisteredIBCDenom) + s.Require().ErrorContains(err, "denom trace not found") +} + +func (s *KeeperTestSuite) TestIsValidIBCPath() { + validIBCPaths := []string{ + "transfer/channel-0", + "transfer/channel-10", + "transfer/channel-99999", + } + invalidIBCPaths := []string{ + "transferx/channel-0", + "transfer/channel-X", + "transfer/channel-0/transfer/channel-1", + } + + for _, validPath := range validIBCPaths { + s.Require().True(keeper.IsValidIBCPath(validPath), "should be valid") + } + for _, validPath := range invalidIBCPaths { + s.Require().False(keeper.IsValidIBCPath(validPath), "should be invalid") + } +} + +func (s *KeeperTestSuite) TestGetHostZoneFromLSMTokenPath() { + // Set a host zone in the store with channel-0 + hostZone := types.HostZone{ + ChainId: HostChainId, + TransferChannelId: ibctesting.FirstChannelID, + LsmLiquidStakeEnabled: true, + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + // Successful lookup + validPath := fmt.Sprintf("%s/%s", transfertypes.PortID, ibctesting.FirstChannelID) + hostZone, err := s.App.StakeibcKeeper.GetHostZoneFromLSMTokenPath(s.Ctx, validPath) + s.Require().NoError(err, "no error expected from valid path") + s.Require().Equal(HostChainId, hostZone.ChainId, "host zone") + + // Invalid IBC path should fail + _, err = s.App.StakeibcKeeper.GetHostZoneFromLSMTokenPath(s.Ctx, "transfer/channel-0/transfer/channel-1") + s.Require().ErrorContains(err, "ibc path of LSM token (transfer/channel-0/transfer/channel-1) cannot be more than 1 hop away") + + // Passing an unregistered channel-id should cause it to fail + _, err = s.App.StakeibcKeeper.GetHostZoneFromLSMTokenPath(s.Ctx, "transfer/channel-1") + s.Require().ErrorContains(err, "transfer channel-id from LSM token (channel-1) does not match any registered host zone") + + // Disabling LSM for the host should cause it to fail + hostZone.LsmLiquidStakeEnabled = false + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + _, err = s.App.StakeibcKeeper.GetHostZoneFromLSMTokenPath(s.Ctx, validPath) + s.Require().ErrorContains(err, "LSM liquid stake disabled for GAIA") +} + +func (s *KeeperTestSuite) TestGetValidatorFromLSMTokenDenom() { + valAddress := "cosmosvaloperXXX" + denom := valAddress + "/42" // add record ID + validators := []*types.Validator{{ + Address: valAddress, + SlashQueryInProgress: false, + SharesToTokensRate: sdkmath.LegacyOneDec(), + }} + + // Successful lookup + validator, err := s.App.StakeibcKeeper.GetValidatorFromLSMTokenDenom(denom, validators) + s.Require().NoError(err, "no error expected from valid lsm denom") + s.Require().Equal(valAddress, validator.Address, "host zone") + + // Invalid LSM denoms - should fail + _, err = s.App.StakeibcKeeper.GetValidatorFromLSMTokenDenom("invalid_denom", validators) + s.Require().ErrorContains(err, "lsm token base denom is not of the format {val-address}/{record-id} (invalid_denom)") + + _, err = s.App.StakeibcKeeper.GetValidatorFromLSMTokenDenom("cosmosvaloperXXX/42/1", validators) + s.Require().ErrorContains(err, "lsm token base denom is not of the format {val-address}/{record-id} (cosmosvaloperXXX/42/1)") + + // Validator does not exist - should fail + _, err = s.App.StakeibcKeeper.GetValidatorFromLSMTokenDenom(denom, []*types.Validator{}) + s.Require().ErrorContains(err, "validator (cosmosvaloperXXX) is not registered in the Stride validator set") + + // Pass in a validator that has a slash query in flight - it should fail + validatorWithSlashQuery := []*types.Validator{{ + Address: valAddress, + SlashQueryInProgress: true, + SharesToTokensRate: sdkmath.LegacyOneDec(), + }} + _, err = s.App.StakeibcKeeper.GetValidatorFromLSMTokenDenom(denom, validatorWithSlashQuery) + s.Require().ErrorContains(err, "validator cosmosvaloperXXX was slashed") + + // Pass in a validator with an uninitialized sharesToTokens rate - it should fail + validatorWithoutSharesToTokensRate := []*types.Validator{{ + Address: valAddress, + SlashQueryInProgress: false, + }} + _, err = s.App.StakeibcKeeper.GetValidatorFromLSMTokenDenom(denom, validatorWithoutSharesToTokensRate) + s.Require().ErrorContains(err, "validator cosmosvaloperXXX sharesToTokens rate is not known") +} + +func (s *KeeperTestSuite) TestCalculateLSMStToken() { + testCases := []struct { + name string + liquidStakedShares sdkmath.Int + validatorSharesToTokensRate sdkmath.LegacyDec + redemptionRate sdkmath.LegacyDec + expectedStAmount sdkmath.Int + }{ + // stTokenAmount = liquidStakedShares * validatorSharesToTokensRate / redemptionRate + { + name: "one sharesToTokens rate and redemption rate", + liquidStakedShares: sdkmath.NewInt(1000), + validatorSharesToTokensRate: sdkmath.LegacyOneDec(), + redemptionRate: sdkmath.LegacyOneDec(), + expectedStAmount: sdkmath.NewInt(1000), + }, + { + name: "one sharesToTokens rate, non-one redemption rate", + liquidStakedShares: sdkmath.NewInt(1000), + validatorSharesToTokensRate: sdkmath.LegacyOneDec(), + redemptionRate: sdkmath.LegacyMustNewDecFromStr("1.25"), + expectedStAmount: sdkmath.NewInt(800), // 1000 * 1 / 1.25 = 800 + }, + { + name: "non-one sharesToTokens rate, one redemption rate", + liquidStakedShares: sdkmath.NewInt(1000), + validatorSharesToTokensRate: sdkmath.LegacyMustNewDecFromStr("0.75"), + redemptionRate: sdkmath.LegacyOneDec(), + expectedStAmount: sdkmath.NewInt(750), // 1000 * 0.75 / 1 + }, + { + name: "non-one sharesToTokens rate, non-one redemption rate", + liquidStakedShares: sdkmath.NewInt(1000), + validatorSharesToTokensRate: sdkmath.LegacyMustNewDecFromStr("0.75"), + redemptionRate: sdkmath.LegacyMustNewDecFromStr("1.25"), + expectedStAmount: sdkmath.NewInt(600), // 1000 * 0.75 / 1.25 = 600 + }, + { + name: "decimal to integer truncation", + liquidStakedShares: sdkmath.NewInt(3333), + validatorSharesToTokensRate: sdkmath.LegacyMustNewDecFromStr("0.238498282349"), + redemptionRate: sdkmath.LegacyMustNewDecFromStr("1.979034798243"), + expectedStAmount: sdkmath.NewInt(401), // equals 401.667 + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + lsmLiquidStake := types.LSMLiquidStake{ + HostZone: &types.HostZone{ + HostDenom: "denom", + RedemptionRate: tc.redemptionRate, + }, + Validator: &types.Validator{ + SharesToTokensRate: tc.validatorSharesToTokensRate, + }, + } + + actualStCoin := s.App.StakeibcKeeper.CalculateLSMStToken(tc.liquidStakedShares, lsmLiquidStake) + s.Require().Equal("stdenom", actualStCoin.Denom, "denom") + s.Require().Equal(tc.expectedStAmount.Int64(), actualStCoin.Amount.Int64(), "amount") + }) + } +} + +func (s *KeeperTestSuite) TestShouldCheckIfValidatorWasSlashed() { + testCases := []struct { + name string + checkpoint sdkmath.Int + progress sdkmath.Int + stakeAmount sdkmath.Int + expectedShouldQuery bool + }{ + { + // Checkpoint: 1000, Stake: 99 + // Old Progress: 900, New Progress: 900 + 99 = 999 + // Old Interval: 900 / 1000 = Interval #0 + // New Interval: 999 / 1000 = Interval #0 (no query) + name: "case #1 - short of checkpoint", + checkpoint: sdkmath.NewInt(1000), + progress: sdkmath.NewInt(900), + stakeAmount: sdkmath.NewInt(99), + expectedShouldQuery: false, + }, + { + // Checkpoint: 1000, Stake: 100 + // Old Progress: 900, New Progress: 900 + 100 = 1000 + // Old Interval: 900 / 1000 = Interval #0 + // New Interval: 1000 / 1000 = Interval #1 (query) + name: "case #1 - at checkpoint", + checkpoint: sdkmath.NewInt(1000), + progress: sdkmath.NewInt(900), + stakeAmount: sdkmath.NewInt(100), + expectedShouldQuery: true, + }, + { + // Checkpoint: 1000, Stake: 101 + // Old Progress: 900, New Progress: 900 + 101 = 1000 + // Old Interval: 900 / 1000 = Interval #0 + // New Interval: 1001 / 1000 = Interval #1 (query) + name: "case #1 - past checkpoint", + checkpoint: sdkmath.NewInt(1000), + progress: sdkmath.NewInt(900), + stakeAmount: sdkmath.NewInt(101), + expectedShouldQuery: true, + }, + { + // Checkpoint: 1000, Stake: 99 + // Old Progress: 11,900, New Progress: 11,900 + 99 = 11,999 + // Old Interval: 11,900 / 1000 = Interval #11 + // New Interval: 11,999 / 1000 = Interval #11 (query) + name: "case #2 - short of checkpoint", + checkpoint: sdkmath.NewInt(1000), + progress: sdkmath.NewInt(11_900), + stakeAmount: sdkmath.NewInt(99), + expectedShouldQuery: false, + }, + { + // Checkpoint: 1000, Stake: 100 + // Old Progress: 11,900, New Progress: 11,900 + 100 = 12,000 + // Old Interval: 11,900 / 1000 = Interval #11 + // New Interval: 12,000 / 1000 = Interval #12 (query) + name: "case #2 - at checkpoint", + checkpoint: sdkmath.NewInt(1000), + progress: sdkmath.NewInt(11_900), + stakeAmount: sdkmath.NewInt(100), + expectedShouldQuery: true, + }, + { + // Checkpoint: 1000, Stake: 101 + // Old Progress: 11,900, New Progress: 11,900 + 101 = 12,001 + // Old Interval: 11,900 / 1000 = Interval #11 + // New Interval: 12,001 / 1000 = Interval #12 (query) + name: "case #2 - past checkpoint", + checkpoint: sdkmath.NewInt(1000), + progress: sdkmath.NewInt(11_900), + stakeAmount: sdkmath.NewInt(101), + expectedShouldQuery: true, + }, + { + // Checkpoint: 6,890, Stake: 339 + // Old Progress: 41,000, New Progress: 41,000 + 339 = 41,339 + // Old Interval: 41,000 / 6,890 = Interval #5 + // New Interval: 41,339 / 6,890 = Interval #5 (no query) + name: "case #3 - short of checkpoint", + checkpoint: sdkmath.NewInt(6890), + progress: sdkmath.NewInt(41_000), + stakeAmount: sdkmath.NewInt(101), + expectedShouldQuery: false, + }, + { + // Checkpoint: 6,890, Stake: 340 + // Old Progress: 41,000, New Progress: 41,000 + 440 = 41,440 + // Old Interval: 41,000 / 6,890 = Interval #5 + // New Interval: 41,440 / 6,890 = Interval #6 (query) + name: "case #3 - at checkpoint", + checkpoint: sdkmath.NewInt(6890), + progress: sdkmath.NewInt(41_000), + stakeAmount: sdkmath.NewInt(340), + expectedShouldQuery: true, + }, + { + // Checkpoint: 6,890 + // Old Progress: 41,000, New Progress: 41,000 + 441 = 41,440 + // Old Interval: 41,000 / 6,890 = Interval #5 + // New Interval: 41,441 / 6,890 = Interval #6 (query) + name: "case #3 - past checkpoint", + checkpoint: sdkmath.NewInt(6890), + progress: sdkmath.NewInt(41_000), + stakeAmount: sdkmath.NewInt(341), + expectedShouldQuery: true, + }, + { + // Checkpoint of 0 - should not issue query + name: "threshold of 0", + checkpoint: sdkmath.ZeroInt(), + progress: sdkmath.NewInt(41_000), + stakeAmount: sdkmath.NewInt(340), + expectedShouldQuery: false, + }, + } + + for _, tc := range testCases { + // Store query interval param + validator := types.Validator{SlashQueryProgressTracker: tc.progress, SlashQueryCheckpoint: tc.checkpoint} + actualShouldQuery := s.App.StakeibcKeeper.ShouldCheckIfValidatorWasSlashed(s.Ctx, validator, tc.stakeAmount) + s.Require().Equal(tc.expectedShouldQuery, actualShouldQuery, tc.name) + } +} + +func (s *KeeperTestSuite) TestGetUpdatedSlashQueryCheckpoint() { + testCases := []struct { + name string + threshold uint64 + totalDelegations sdkmath.Int + expectedCheckpoint sdkmath.Int + }{ + { + name: "10%", + threshold: 10, + totalDelegations: sdkmath.NewInt(1_000_000), + expectedCheckpoint: sdkmath.NewInt(100_000), + }, + { + name: "25%", + threshold: 25, + totalDelegations: sdkmath.NewInt(1_000_000), + expectedCheckpoint: sdkmath.NewInt(250_000), + }, + { + name: "75%", + threshold: 75, + totalDelegations: sdkmath.NewInt(1_000_000), + expectedCheckpoint: sdkmath.NewInt(750_000), + }, + { + name: "int truncation", + threshold: 10, + totalDelegations: sdkmath.NewInt(39), + expectedCheckpoint: sdkmath.NewInt(3), + }, + { + name: "0-TVL", + threshold: 10, + totalDelegations: sdkmath.ZeroInt(), + expectedCheckpoint: sdkmath.ZeroInt(), + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + // Set the slash query threshold + params := s.App.StakeibcKeeper.GetParams(s.Ctx) + params.ValidatorSlashQueryThreshold = tc.threshold + s.App.StakeibcKeeper.SetParams(s.Ctx, params) + + // Check the new checkpoint + actualCheckpoint := s.App.StakeibcKeeper.GetUpdatedSlashQueryCheckpoint(s.Ctx, tc.totalDelegations) + s.Require().Equal(tc.expectedCheckpoint.Int64(), actualCheckpoint.Int64(), "checkpoint") + }) + } +} + +func (s *KeeperTestSuite) TestTransferAllLSMDeposits() { + s.CreateTransferChannel(HostChainId) + + // Create a valid IBC denom + ibcDenom := s.CreateAndStoreIBCDenom(LSMTokenBaseDenom) + + // Store 2 host zones - one that was registered successfully, + // and one that's missing a delegation channel + hostZones := []types.HostZone{ + { + // Valid host zone + ChainId: HostChainId, + TransferChannelId: ibctesting.FirstChannelID, + DepositAddress: s.TestAccs[1].String(), + DelegationIcaAddress: HostICAAddress, + }, + { + // Missing delegation ICA + ChainId: "chain-2", + TransferChannelId: "channel-2", + DepositAddress: "stride_DEPOSIT_2", + }, + } + for _, hostZone := range hostZones { + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + } + + // For each host chain store 4 deposits: + // - One ready to be transferred with a valid IBC denom + // - One ready to be transferred with an invalid IBC denom (should fail) + // - One not ready to be transferred with a valid IBC denom + // - One not ready to be transferred with an invalid IBC denom + expectedDepositStatus := map[string]recordstypes.LSMTokenDeposit_Status{} + for _, chainId := range []string{HostChainId, OsmoChainId} { + for _, startingStatus := range []recordstypes.LSMTokenDeposit_Status{ + recordstypes.LSMTokenDeposit_TRANSFER_QUEUE, + recordstypes.LSMTokenDeposit_TRANSFER_IN_PROGRESS, + } { + for i, shouldSucceed := range []bool{true, false} { + denom := fmt.Sprintf("denom-starting-in-status-%s-%d", startingStatus.String(), i) + depositKey := fmt.Sprintf("%s-%s", chainId, denom) + + if !shouldSucceed { + ibcDenom = "ibc/fake_denom" + } + deposit := recordstypes.LSMTokenDeposit{ + ChainId: chainId, + Denom: denom, + IbcDenom: ibcDenom, + Status: startingStatus, + } + s.App.RecordsKeeper.SetLSMTokenDeposit(s.Ctx, deposit) + + // The status should update to IN_PROGRESS if the record was queued for transfer, on the + // valid host zone, with a valid IBC denom + // The status should update to FAILED if the record was queued for transfer, on the + // valid host zone, with an invalid IBC denom + // The status should not change on the invalid host zone + expectedStatus := startingStatus + if chainId == HostChainId && startingStatus == recordstypes.LSMTokenDeposit_TRANSFER_QUEUE { + if shouldSucceed { + expectedStatus = recordstypes.LSMTokenDeposit_TRANSFER_IN_PROGRESS + } else { + expectedStatus = recordstypes.LSMTokenDeposit_TRANSFER_FAILED + } + } + + expectedDepositStatus[depositKey] = expectedStatus + } + } + } + + // Call transfer across all hosts + s.App.StakeibcKeeper.TransferAllLSMDeposits(s.Ctx) + + // Check that the status of the relevant records was updated + allDeposits := s.App.RecordsKeeper.GetAllLSMTokenDeposit(s.Ctx) + s.Require().Len(allDeposits, 8) // 4 host zones, 2 statuses, 2 deposits = 2 * 2 * 2 = 8 + + for _, deposit := range allDeposits { + depositKey := fmt.Sprintf("%s-%s", deposit.ChainId, deposit.Denom) + s.Require().Equal(expectedDepositStatus[depositKey].String(), deposit.Status.String(), "deposit status for %s", depositKey) + } +} + +func (s *KeeperTestSuite) TestDetokenizeLSMDeposit() { + // Create the delegation ICA + owner := types.FormatHostZoneICAOwner(HostChainId, types.ICAAccountType_DELEGATION) + s.CreateICAChannel(owner) + portId, err := icatypes.NewControllerPortID(owner) + s.Require().NoError(err, "no error expected when formatting portId") + + // Get the ica address that was just created + delegationICAAddress, found := s.App.ICAControllerKeeper.GetInterchainAccountAddress(s.Ctx, ibctesting.FirstConnectionID, portId) + s.Require().True(found, "ICA account should have been created") + s.Require().NotEmpty(delegationICAAddress, "ICA Address should not be empty") + + // Build the host zone and deposit (which are arguments to detokenize) + initialHostZone := types.HostZone{ + ChainId: HostChainId, + DelegationIcaAddress: delegationICAAddress, + ConnectionId: ibctesting.FirstConnectionID, + Validators: []*types.Validator{{DelegationChangesInProgress: 0}}, + } + + denom := "cosmosvalXXX/42" + initalDeposit := recordstypes.LSMTokenDeposit{ + ChainId: HostChainId, + Denom: denom, + Amount: sdkmath.NewInt(1000), + Status: recordstypes.LSMTokenDeposit_DETOKENIZATION_QUEUE, + StToken: sdk.NewCoin(StAtom, sdkmath.OneInt()), + } + s.App.RecordsKeeper.SetLSMTokenDeposit(s.Ctx, initalDeposit) + + // Successfully Detokenize + err = s.App.StakeibcKeeper.DetokenizeLSMDeposit(s.Ctx, initialHostZone, initalDeposit) + s.Require().NoError(err, "no error expected when detokenizing") + + // Confirm deposit status was updated + finalDeposit, found := s.App.RecordsKeeper.GetLSMTokenDeposit(s.Ctx, HostChainId, denom) + s.Require().True(found, "deposit should have been found") + s.Require().Equal(recordstypes.LSMTokenDeposit_DETOKENIZATION_IN_PROGRESS.String(), finalDeposit.Status.String(), "deposit status") + + // Check callback data was stored + allCallbackData := s.App.IcacallbacksKeeper.GetAllCallbackData(s.Ctx) + s.Require().Len(allCallbackData, 1, "length of callback data") + + var callbackData types.DetokenizeSharesCallback + err = proto.Unmarshal(allCallbackData[0].CallbackArgs, &callbackData) + s.Require().NoError(err, "no error expected when unmarshalling callback data") + + s.Require().Equal(initalDeposit, *callbackData.Deposit, "callback data LSM deposit") + + // Check the number of delegation changes was incremented + finalHostZone, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, HostChainId) + s.Require().True(found, "host zone should have been found") + s.Require().Equal(1, int(finalHostZone.Validators[0].DelegationChangesInProgress), "delegation changes in progress") + + // Remove connection ID and re-submit - should fail + hostZoneWithoutConnectionId := initialHostZone + hostZoneWithoutConnectionId.ConnectionId = "" + err = s.App.StakeibcKeeper.DetokenizeLSMDeposit(s.Ctx, hostZoneWithoutConnectionId, initalDeposit) + s.Require().ErrorContains(err, "unable to submit detokenization ICA") + + // Remove delegation account and re-submit - should also fail + hostZoneWithoutDelegationAccount := initialHostZone + hostZoneWithoutDelegationAccount.DelegationIcaAddress = "" + err = s.App.StakeibcKeeper.DetokenizeLSMDeposit(s.Ctx, hostZoneWithoutDelegationAccount, initalDeposit) + s.Require().ErrorContains(err, "no delegation account found") +} + +func (s *KeeperTestSuite) TestDetokenizeAllLSMDeposits() { + // Create an open delegation ICA channel + owner := types.FormatHostZoneICAOwner(HostChainId, types.ICAAccountType_DELEGATION) + s.CreateICAChannel(owner) + portId, err := icatypes.NewControllerPortID(owner) + s.Require().NoError(err, "no error expected when formatting portId") + + // Get the ica address that was just created + delegationICAAddress, found := s.App.ICAControllerKeeper.GetInterchainAccountAddress(s.Ctx, ibctesting.FirstConnectionID, portId) + s.Require().True(found, "ICA account should have been created") + s.Require().NotEmpty(delegationICAAddress, "ICA Address should not be empty") + + // Store two host zones - one with an open Delegation channel, and one without + s.App.StakeibcKeeper.SetHostZone(s.Ctx, types.HostZone{ + ChainId: HostChainId, + ConnectionId: ibctesting.FirstConnectionID, + DelegationIcaAddress: delegationICAAddress, + }) + s.App.StakeibcKeeper.SetHostZone(s.Ctx, types.HostZone{ + ChainId: OsmoChainId, + ConnectionId: "connection-2", + }) + + // For each host chain store 4 deposits + // 2 of which are ready to be detokenized, and 2 of which are not + expectedDepositStatus := map[string]recordstypes.LSMTokenDeposit_Status{} + for _, chainId := range []string{HostChainId, OsmoChainId} { + for _, startingStatus := range []recordstypes.LSMTokenDeposit_Status{ + recordstypes.LSMTokenDeposit_DETOKENIZATION_QUEUE, + recordstypes.LSMTokenDeposit_TRANSFER_IN_PROGRESS, + } { + for i := 0; i < 2; i++ { + denom := fmt.Sprintf("denom-starting-in-status-%s-%d", startingStatus.String(), i) + depositKey := fmt.Sprintf("%s-%s", chainId, denom) + deposit := recordstypes.LSMTokenDeposit{ + ChainId: chainId, + Denom: denom, + Status: startingStatus, + } + s.App.RecordsKeeper.SetLSMTokenDeposit(s.Ctx, deposit) + + // The status is only expected to change for the QUEUED records on the + // host chain with the open delegation channel + expectedStatus := startingStatus + if chainId == HostChainId && startingStatus == recordstypes.LSMTokenDeposit_DETOKENIZATION_QUEUE { + expectedStatus = recordstypes.LSMTokenDeposit_DETOKENIZATION_IN_PROGRESS + } + expectedDepositStatus[depositKey] = expectedStatus + } + } + } + + // Call detokenization across all hosts + s.App.StakeibcKeeper.DetokenizeAllLSMDeposits(s.Ctx) + + // Check that the status of the relevant records was updated + allDeposits := s.App.RecordsKeeper.GetAllLSMTokenDeposit(s.Ctx) + s.Require().Len(allDeposits, 8) // 2 host zones, 2 statuses, 2 deposits = 2 * 2 * 2 = 8 + + for _, deposit := range allDeposits { + depositKey := fmt.Sprintf("%s-%s", deposit.ChainId, deposit.Denom) + s.Require().Equal(expectedDepositStatus[depositKey].String(), deposit.Status.String(), "deposit status for %s", depositKey) + } +} diff --git a/x/stakeibc/keeper/msg_server.go b/x/stakeibc/keeper/msg_server.go new file mode 100644 index 00000000000..845c694dbef --- /dev/null +++ b/x/stakeibc/keeper/msg_server.go @@ -0,0 +1,820 @@ +package keeper + +import ( + "context" + "fmt" + "time" + + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + proto "github.com/cosmos/gogoproto/proto" + icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types" + ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + connectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + "github.com/spf13/cast" + + "github.com/osmosis-labs/osmosis/v27/utils" + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + recordtypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +type msgServer struct { + Keeper +} + +// NewMsgServerImpl returns an implementation of the MsgServer interface +// for the provided Keeper. +func NewMsgServerImpl(keeper Keeper) types.MsgServer { + return msgServer{Keeper: keeper} +} + +var _ types.MsgServer = msgServer{} + +func (k msgServer) RegisterHostZone(goCtx context.Context, msg *types.MsgRegisterHostZone) (*types.MsgRegisterHostZoneResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + return k.Keeper.RegisterHostZone(ctx, msg) +} + +func (ms msgServer) UpdateHostZoneParams(goCtx context.Context, msg *types.MsgUpdateHostZoneParams) (*types.MsgUpdateHostZoneParamsResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + if ms.authority != msg.Authority { + return nil, errorsmod.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", ms.authority, msg.Authority) + } + + hostZone, found := ms.Keeper.GetHostZone(ctx, msg.ChainId) + if !found { + return nil, types.ErrHostZoneNotFound.Wrapf("host zone %s not found", msg.ChainId) + } + + maxMessagesPerTx := msg.MaxMessagesPerIcaTx + if maxMessagesPerTx == 0 { + maxMessagesPerTx = DefaultMaxMessagesPerIcaTx + } + hostZone.MaxMessagesPerIcaTx = maxMessagesPerTx + ms.Keeper.SetHostZone(ctx, hostZone) + + return &types.MsgUpdateHostZoneParamsResponse{}, nil +} + +func (k msgServer) AddValidators(goCtx context.Context, msg *types.MsgAddValidators) (*types.MsgAddValidatorsResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + for _, validator := range msg.Validators { + if err := k.AddValidatorToHostZone(ctx, msg.HostZone, *validator, false); err != nil { + return nil, err + } + + // Query and store the validator's sharesToTokens rate + if err := k.QueryValidatorSharesToTokensRate(ctx, msg.HostZone, validator.Address); err != nil { + return nil, err + } + } + + // Confirm none of the validator's exceed the weight cap + if err := k.CheckValidatorWeightsBelowCap(ctx, msg.HostZone); err != nil { + return nil, err + } + + return &types.MsgAddValidatorsResponse{}, nil +} + +func (k msgServer) DeleteValidator(goCtx context.Context, msg *types.MsgDeleteValidator) (*types.MsgDeleteValidatorResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + err := k.RemoveValidatorFromHostZone(ctx, msg.HostZone, msg.ValAddr) + if err != nil { + return nil, errorsmod.Wrapf(err, "failed to remove validator %s from host zone %s", msg.ValAddr, msg.HostZone) + } + + return &types.MsgDeleteValidatorResponse{}, nil +} + +func (k msgServer) ChangeValidatorWeight(goCtx context.Context, msg *types.MsgChangeValidatorWeights) (*types.MsgChangeValidatorWeightsResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + hostZone, found := k.GetHostZone(ctx, msg.HostZone) + if !found { + return nil, types.ErrInvalidHostZone + } + + for _, weightChange := range msg.ValidatorWeights { + + validatorFound := false + for _, validator := range hostZone.Validators { + if validator.Address == weightChange.Address { + validator.Weight = weightChange.Weight + k.SetHostZone(ctx, hostZone) + + validatorFound = true + break + } + } + + if !validatorFound { + return nil, types.ErrValidatorNotFound + } + } + + // Confirm the new weights wouldn't cause any validator to exceed the weight cap + if err := k.CheckValidatorWeightsBelowCap(ctx, msg.HostZone); err != nil { + return nil, errorsmod.Wrapf(err, "unable to change validator weight") + } + + return &types.MsgChangeValidatorWeightsResponse{}, nil +} + +func (k msgServer) RebalanceValidators(goCtx context.Context, msg *types.MsgRebalanceValidators) (*types.MsgRebalanceValidatorsResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + k.Logger(ctx).Info(fmt.Sprintf("RebalanceValidators executing %v", msg)) + + if err := k.RebalanceDelegationsForHostZone(ctx, msg.HostZone); err != nil { + return nil, err + } + return &types.MsgRebalanceValidatorsResponse{}, nil +} + +func (k msgServer) ClearBalance(goCtx context.Context, msg *types.MsgClearBalance) (*types.MsgClearBalanceResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + zone, found := k.GetHostZone(ctx, msg.ChainId) + if !found { + return nil, errorsmod.Wrapf(types.ErrInvalidHostZone, "chainId: %s", msg.ChainId) + } + if zone.FeeIcaAddress == "" { + return nil, errorsmod.Wrapf(types.ErrICAAccountNotFound, "fee acount not found for chainId: %s", msg.ChainId) + } + + sourcePort := ibctransfertypes.PortID + // Should this be a param? + // I think as long as we have a timeout on this, it should be hard to attack (even if someone send a tx on a bad channel, it would be reverted relatively quickly) + sourceChannel := msg.Channel + coinString := cast.ToString(msg.Amount) + zone.GetHostDenom() + tokens, err := sdk.ParseCoinNormalized(coinString) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("failed to parse coin (%s)", coinString)) + return nil, errorsmod.Wrapf(err, "failed to parse coin (%s)", coinString) + } + // KeyICATimeoutNanos are for our Stride ICA calls, KeyFeeTransferTimeoutNanos is for the IBC transfer + feeTransferTimeoutNanos := k.GetParam(ctx, types.KeyFeeTransferTimeoutNanos) + timeoutTimestamp := cast.ToUint64(ctx.BlockTime().UnixNano()) + feeTransferTimeoutNanos + msgs := []proto.Message{ + &ibctransfertypes.MsgTransfer{ + SourcePort: sourcePort, + SourceChannel: sourceChannel, + Token: tokens, + Sender: zone.FeeIcaAddress, // fee account on the host zone + Receiver: types.FeeAccount, // fee account on stride + TimeoutTimestamp: timeoutTimestamp, + }, + } + + connectionId := zone.GetConnectionId() + + icaTimeoutNanos := k.GetParam(ctx, types.KeyICATimeoutNanos) + icaTimeoutNanos = cast.ToUint64(ctx.BlockTime().UnixNano()) + icaTimeoutNanos + + _, err = k.SubmitTxs(ctx, connectionId, msgs, types.ICAAccountType_FEE, icaTimeoutNanos, "", nil) + if err != nil { + return nil, errorsmod.Wrapf(err, "failed to submit txs") + } + return &types.MsgClearBalanceResponse{}, nil +} + +// Exchanges a user's native tokens for stTokens using the current redemption rate +// The native tokens must live on Stride with an IBC denomination before this function is called +// The typical flow consists, first, of a transfer of native tokens from the host zone to Stride, +// +// and then the invocation of this LiquidStake function +// +// WARNING: This function is invoked from the begin/end blocker in a way that does not revert partial state when +// +// an error is thrown (i.e. the execution is non-atomic). +// As a result, it is important that the validation steps are positioned at the top of the function, +// and logic that creates state changes (e.g. bank sends, mint) appear towards the end of the function +func (k msgServer) LiquidStake(goCtx context.Context, msg *types.MsgLiquidStake) (*types.MsgLiquidStakeResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + // Get the host zone from the base denom in the message (e.g. uatom) + hostZone, err := k.GetHostZoneFromHostDenom(ctx, msg.HostDenom) + if err != nil { + return nil, errorsmod.Wrapf(types.ErrInvalidToken, "no host zone found for denom (%s)", msg.HostDenom) + } + + // Error immediately if the host zone is halted + if hostZone.Halted { + return nil, errorsmod.Wrapf(types.ErrHaltedHostZone, "halted host zone found for denom (%s)", msg.HostDenom) + } + + // Get user and module account addresses + liquidStakerAddress, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + return nil, errorsmod.Wrapf(err, "user's address is invalid") + } + hostZoneDepositAddress, err := sdk.AccAddressFromBech32(hostZone.DepositAddress) + if err != nil { + return nil, errorsmod.Wrapf(err, "host zone address is invalid") + } + + // Safety check: redemption rate must be within safety bounds + rateIsSafe, err := k.IsRedemptionRateWithinSafetyBounds(ctx, *hostZone) + if !rateIsSafe || (err != nil) { + return nil, errorsmod.Wrapf(types.ErrRedemptionRateOutsideSafetyBounds, "HostZone: %s, err: %s", hostZone.ChainId, err.Error()) + } + + // Grab the deposit record that will be used for record keeping + strideEpochTracker, found := k.GetEpochTracker(ctx, epochtypes.STRIDE_EPOCH) + if !found { + return nil, errorsmod.Wrapf(sdkerrors.ErrNotFound, "no epoch number for epoch (%s)", epochtypes.STRIDE_EPOCH) + } + depositRecord, found := k.RecordsKeeper.GetTransferDepositRecordByEpochAndChain(ctx, strideEpochTracker.EpochNumber, hostZone.ChainId) + if !found { + return nil, errorsmod.Wrapf(sdkerrors.ErrNotFound, "no deposit record for epoch (%d)", strideEpochTracker.EpochNumber) + } + + // The tokens that are sent to the protocol are denominated in the ibc hash of the native token on stride (e.g. ibc/xxx) + nativeDenom := hostZone.IbcDenom + nativeCoin := sdk.NewCoin(nativeDenom, msg.Amount) + if !types.IsIBCToken(nativeDenom) { + return nil, errorsmod.Wrapf(types.ErrInvalidToken, "denom is not an IBC token (%s)", nativeDenom) + } + + // Confirm the user has a sufficient balance to execute the liquid stake + balance := k.bankKeeper.GetBalance(ctx, liquidStakerAddress, nativeDenom) + if balance.IsLT(nativeCoin) { + return nil, errorsmod.Wrapf(sdkerrors.ErrInsufficientFunds, "balance is lower than staking amount. staking amount: %v, balance: %v", msg.Amount, balance.Amount) + } + + // Determine the amount of stTokens to mint using the redemption rate + stAmount := (sdkmath.LegacyNewDecFromInt(msg.Amount).Quo(hostZone.RedemptionRate)).TruncateInt() + if stAmount.IsZero() { + return nil, errorsmod.Wrapf(types.ErrInsufficientLiquidStake, + "Liquid stake of %s%s would return 0 stTokens", msg.Amount.String(), hostZone.HostDenom) + } + + // Transfer the native tokens from the user to module account + // Note: checkBlockedAddr=false because hostZoneDepositAddress is a module + if err := utils.SafeSendCoins(false, k.bankKeeper, ctx, liquidStakerAddress, hostZoneDepositAddress, sdk.NewCoins(nativeCoin)); err != nil { + return nil, errorsmod.Wrap(err, "failed to send tokens from Account to Module") + } + + // Mint the stTokens and transfer them to the user + stDenom := types.StAssetDenomFromHostZoneDenom(msg.HostDenom) + stCoin := sdk.NewCoin(stDenom, stAmount) + if err := k.bankKeeper.MintCoins(ctx, types.ModuleName, sdk.NewCoins(stCoin)); err != nil { + return nil, errorsmod.Wrapf(err, "Failed to mint coins") + } + if err := k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, liquidStakerAddress, sdk.NewCoins(stCoin)); err != nil { + return nil, errorsmod.Wrapf(err, "Failed to send %s from module to account", stCoin.String()) + } + + // Update the liquid staked amount on the deposit record + depositRecord.Amount = depositRecord.Amount.Add(msg.Amount) + k.RecordsKeeper.SetDepositRecord(ctx, *depositRecord) + + // Emit liquid stake event + EmitSuccessfulLiquidStakeEvent(ctx, msg, *hostZone, stAmount) + + k.hooks.AfterLiquidStake(ctx, liquidStakerAddress) + return &types.MsgLiquidStakeResponse{StToken: stCoin}, nil +} + +func (k msgServer) RedeemStake(goCtx context.Context, msg *types.MsgRedeemStake) (*types.MsgRedeemStakeResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + return k.Keeper.RedeemStake(ctx, msg) +} + +// Exchanges a user's LSM tokenized shares for stTokens using the current redemption rate +// The LSM tokens must live on Stride as an IBC voucher (whose denomtrace we recognize) +// before this function is called +// +// The typical flow: +// - A staker tokenizes their delegation on the host zone +// - The staker IBC transfers their tokenized shares to Stride +// - They then call LSMLiquidStake +// - - The staker's LSM Tokens are sent to the Stride module account +// - - The staker recieves stTokens +// +// As a safety measure, at period checkpoints, the validator's sharesToTokens rate is queried and the transaction +// is not settled until the query returns +// As a result, this transaction has been split up into a (1) Start and (2) Finish function +// - If no query is needed, (2) is called immediately after (1) +// - If a query is needed, (2) is called in the query callback +// +// The transaction response indicates if the query occurred by returning an attribute `TransactionComplete` set to false +func (k msgServer) LSMLiquidStake(goCtx context.Context, msg *types.MsgLSMLiquidStake) (*types.MsgLSMLiquidStakeResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + lsmLiquidStake, err := k.StartLSMLiquidStake(ctx, *msg) + if err != nil { + return nil, err + } + + if k.ShouldCheckIfValidatorWasSlashed(ctx, *lsmLiquidStake.Validator, msg.Amount) { + if err := k.SubmitValidatorSlashQuery(ctx, lsmLiquidStake); err != nil { + return nil, err + } + + EmitPendingLSMLiquidStakeEvent(ctx, *lsmLiquidStake.HostZone, *lsmLiquidStake.Deposit) + + return &types.MsgLSMLiquidStakeResponse{TransactionComplete: false}, nil + } + + async := false + if err := k.FinishLSMLiquidStake(ctx, lsmLiquidStake, async); err != nil { + return nil, err + } + + return &types.MsgLSMLiquidStakeResponse{TransactionComplete: true}, nil +} + +// Gov tx to register a trade route that swaps reward tokens for a different denom +// +// Example proposal: +// +// { +// "title": "Create a new trade route for host chain X", +// "metadata": "Create a new trade route for host chain X", +// "summary": "Create a new trade route for host chain X", +// "messages":[ +// { +// "@type": "/stride.stakeibc.MsgCreateTradeRoute", +// "authority": "stride10d07y265gmmuvt4z0w9aw880jnsr700jefnezl", +// +// "stride_to_host_connection_id": "connection-0", +// "stride_to_reward_connection_id": "connection-1", +// "stride_to_trade_connection_id": "connection-2", +// +// "host_to_reward_transfer_channel_id": "channel-0", +// "reward_to_trade_transfer_channel_id": "channel-1", +// "trade_to_host_transfer_channel_id": "channel-2", +// +// "reward_denom_on_host": "ibc/rewardTokenXXX", +// "reward_denom_on_reward": "rewardToken", +// "reward_denom_on_trade": "ibc/rewardTokenYYY", +// "host_denom_on_trade": "ibc/hostTokenZZZ", +// "host_denom_on_host": "hostToken", +// +// "min_transfer_amount": "10000000", +// } +// ], +// "deposit": "2000000000ustrd" +// } +// +// >>> strided tx gov submit-proposal {proposal_file.json} --from wallet +func (ms msgServer) CreateTradeRoute(goCtx context.Context, msg *types.MsgCreateTradeRoute) (*types.MsgCreateTradeRouteResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + if ms.authority != msg.Authority { + return nil, errorsmod.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", ms.authority, msg.Authority) + } + + // Validate trade route does not already exist for this denom + _, found := ms.Keeper.GetTradeRoute(ctx, msg.RewardDenomOnReward, msg.HostDenomOnHost) + if found { + return nil, errorsmod.Wrapf(types.ErrTradeRouteAlreadyExists, + "trade route already exists for rewardDenom %s, hostDenom %s", msg.RewardDenomOnReward, msg.HostDenomOnHost) + } + + // Confirm the host chain exists and the withdrawal address has been initialized + hostZone, err := ms.Keeper.GetActiveHostZone(ctx, msg.HostChainId) + if err != nil { + return nil, err + } + if hostZone.WithdrawalIcaAddress == "" { + return nil, errorsmod.Wrapf(types.ErrICAAccountNotFound, "withdrawal account not initialized on host zone") + } + + // Register the new ICA accounts + tradeRouteId := types.GetTradeRouteId(msg.RewardDenomOnReward, msg.HostDenomOnHost) + hostICA := types.ICAAccount{ + ChainId: msg.HostChainId, + Type: types.ICAAccountType_WITHDRAWAL, + ConnectionId: hostZone.ConnectionId, + Address: hostZone.WithdrawalIcaAddress, + } + + unwindConnectionId := msg.StrideToRewardConnectionId + unwindICAType := types.ICAAccountType_CONVERTER_UNWIND + unwindICA, err := ms.Keeper.RegisterTradeRouteICAAccount(ctx, tradeRouteId, unwindConnectionId, unwindICAType) + if err != nil { + return nil, errorsmod.Wrapf(err, "unable to register the unwind ICA account") + } + + tradeConnectionId := msg.StrideToTradeConnectionId + tradeICAType := types.ICAAccountType_CONVERTER_TRADE + tradeICA, err := ms.Keeper.RegisterTradeRouteICAAccount(ctx, tradeRouteId, tradeConnectionId, tradeICAType) + if err != nil { + return nil, errorsmod.Wrapf(err, "unable to register the trade ICA account") + } + + // Finally build and store the main trade route + tradeRoute := types.TradeRoute{ + RewardDenomOnHostZone: msg.RewardDenomOnHost, + RewardDenomOnRewardZone: msg.RewardDenomOnReward, + RewardDenomOnTradeZone: msg.RewardDenomOnTrade, + HostDenomOnTradeZone: msg.HostDenomOnTrade, + HostDenomOnHostZone: msg.HostDenomOnHost, + + HostAccount: hostICA, + RewardAccount: unwindICA, + TradeAccount: tradeICA, + + HostToRewardChannelId: msg.HostToRewardTransferChannelId, + RewardToTradeChannelId: msg.RewardToTradeTransferChannelId, + TradeToHostChannelId: msg.TradeToHostTransferChannelId, + + MinTransferAmount: msg.MinTransferAmount, + } + + ms.Keeper.SetTradeRoute(ctx, tradeRoute) + + return &types.MsgCreateTradeRouteResponse{}, nil +} + +// Gov tx to remove a trade route +// +// Example proposal: +// +// { +// "title": "Remove a new trade route for host chain X", +// "metadata": "Remove a new trade route for host chain X", +// "summary": "Remove a new trade route for host chain X", +// "messages":[ +// { +// "@type": "/stride.stakeibc.MsgDeleteTradeRoute", +// "authority": "stride10d07y265gmmuvt4z0w9aw880jnsr700jefnezl", +// "reward_denom": "rewardToken", +// "host_denom": "hostToken +// } +// ], +// "deposit": "2000000000ustrd" +// } +// +// >>> strided tx gov submit-proposal {proposal_file.json} --from wallet +func (ms msgServer) DeleteTradeRoute(goCtx context.Context, msg *types.MsgDeleteTradeRoute) (*types.MsgDeleteTradeRouteResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + if ms.authority != msg.Authority { + return nil, errorsmod.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", ms.authority, msg.Authority) + } + + _, found := ms.Keeper.GetTradeRoute(ctx, msg.RewardDenom, msg.HostDenom) + if !found { + return nil, errorsmod.Wrapf(types.ErrTradeRouteNotFound, + "no trade route for rewardDenom %s and hostDenom %s", msg.RewardDenom, msg.HostDenom) + } + + ms.Keeper.RemoveTradeRoute(ctx, msg.RewardDenom, msg.HostDenom) + + return &types.MsgDeleteTradeRouteResponse{}, nil +} + +// Gov tx to update the trade route +// +// Example proposal: +// +// { +// "title": "Update a the trade route for host chain X", +// "metadata": "Update a the trade route for host chain X", +// "summary": "Update a the trade route for host chain X", +// "messages":[ +// { +// "@type": "/stride.stakeibc.MsgUpdateTradeRoute", +// "authority": "stride10d07y265gmmuvt4z0w9aw880jnsr700jefnezl", +// "min_transfer_amount": "10000000", +// } +// ], +// "deposit": "2000000000ustrd" +// } +// +// >>> strided tx gov submit-proposal {proposal_file.json} --from wallet +func (ms msgServer) UpdateTradeRoute(goCtx context.Context, msg *types.MsgUpdateTradeRoute) (*types.MsgUpdateTradeRouteResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + if ms.authority != msg.Authority { + return nil, errorsmod.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", ms.authority, msg.Authority) + } + + route, found := ms.Keeper.GetTradeRoute(ctx, msg.RewardDenom, msg.HostDenom) + if !found { + return nil, errorsmod.Wrapf(types.ErrTradeRouteNotFound, + "no trade route for rewardDenom %s and hostDenom %s", msg.RewardDenom, msg.HostDenom) + } + + route.MinTransferAmount = msg.MinTransferAmount + ms.Keeper.SetTradeRoute(ctx, route) + + return &types.MsgUpdateTradeRouteResponse{}, nil +} + +func (k msgServer) RestoreInterchainAccount(goCtx context.Context, msg *types.MsgRestoreInterchainAccount) (*types.MsgRestoreInterchainAccountResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + // Get ConnectionEnd (for counterparty connection) + connectionEnd, found := k.IBCKeeper.ConnectionKeeper.GetConnection(ctx, msg.ConnectionId) + if !found { + return nil, errorsmod.Wrapf(connectiontypes.ErrConnectionNotFound, "connection %s not found", msg.ConnectionId) + } + counterpartyConnection := connectionEnd.Counterparty + + // only allow restoring an account if it already exists + portID, err := icatypes.NewControllerPortID(msg.AccountOwner) + if err != nil { + return nil, err + } + _, exists := k.ICAControllerKeeper.GetInterchainAccountAddress(ctx, msg.ConnectionId, portID) + if !exists { + return nil, errorsmod.Wrapf(types.ErrInvalidInterchainAccountAddress, + "ICA controller account address not found: %s", msg.AccountOwner) + } + + appVersion := string(icatypes.ModuleCdc.MustMarshalJSON(&icatypes.Metadata{ + Version: icatypes.Version, + ControllerConnectionId: msg.ConnectionId, + HostConnectionId: counterpartyConnection.ConnectionId, + Encoding: icatypes.EncodingProtobuf, + TxType: icatypes.TxTypeSDKMultiMsg, + })) + + if err := k.ICAControllerKeeper.RegisterInterchainAccountWithOrdering(ctx, msg.ConnectionId, msg.AccountOwner, appVersion, channeltypes.ORDERED); err != nil { + return nil, errorsmod.Wrapf(err, "unable to register account for owner %s", msg.AccountOwner) + } + + // If we're restoring a delegation account, we also have to reset record state + if msg.AccountOwner == types.FormatHostZoneICAOwner(msg.ChainId, types.ICAAccountType_DELEGATION) { + hostZone, found := k.GetHostZone(ctx, msg.ChainId) + if !found { + return nil, types.ErrHostZoneNotFound.Wrapf("delegation ICA supplied, but no associated host zone") + } + + // Since any ICAs along the original channel will never get relayed, + // we have to reset the delegation_changes_in_progress field on each validator + for _, validator := range hostZone.Validators { + validator.DelegationChangesInProgress = 0 + } + k.SetHostZone(ctx, hostZone) + + // revert DELEGATION_IN_PROGRESS records for the closed ICA channel (so that they can be staked) + depositRecords := k.RecordsKeeper.GetAllDepositRecord(ctx) + for _, depositRecord := range depositRecords { + // only revert records for the select host zone + if depositRecord.HostZoneId == hostZone.ChainId && depositRecord.Status == recordtypes.DepositRecord_DELEGATION_IN_PROGRESS { + depositRecord.Status = recordtypes.DepositRecord_DELEGATION_QUEUE + depositRecord.DelegationTxsInProgress = 0 + + k.Logger(ctx).Info(fmt.Sprintf("Setting DepositRecord %d to status DepositRecord_DELEGATION_IN_PROGRESS", depositRecord.Id)) + k.RecordsKeeper.SetDepositRecord(ctx, depositRecord) + } + } + + // revert epoch unbonding records for the closed ICA channel + epochUnbondingRecords := k.RecordsKeeper.GetAllEpochUnbondingRecord(ctx) + for _, epochUnbondingRecord := range epochUnbondingRecords { + // only revert records for the select host zone + hostZoneUnbonding, found := k.RecordsKeeper.GetHostZoneUnbondingByChainId(ctx, epochUnbondingRecord.EpochNumber, hostZone.ChainId) + if !found { + k.Logger(ctx).Info(fmt.Sprintf("No HostZoneUnbonding found for chainId: %s, epoch: %d", hostZone.ChainId, epochUnbondingRecord.EpochNumber)) + continue + } + + // Reset the number of undelegation txs in progress + hostZoneUnbonding.UndelegationTxsInProgress = 0 + + // Revert UNBONDING_IN_PROGRESS records to UNBONDING_RETRY_QUEUE + // and EXIT_TRANSFER_IN_PROGRESS records to EXIT_TRANSFER_QUEUE + if hostZoneUnbonding.Status == recordtypes.HostZoneUnbonding_UNBONDING_IN_PROGRESS { + k.Logger(ctx).Info(fmt.Sprintf("HostZoneUnbonding for %s at EpochNumber %d is stuck in status %s", + hostZone.ChainId, epochUnbondingRecord.EpochNumber, recordtypes.HostZoneUnbonding_UNBONDING_IN_PROGRESS.String(), + )) + hostZoneUnbonding.Status = recordstypes.HostZoneUnbonding_UNBONDING_RETRY_QUEUE + + } else if hostZoneUnbonding.Status == recordtypes.HostZoneUnbonding_EXIT_TRANSFER_IN_PROGRESS { + k.Logger(ctx).Info(fmt.Sprintf("HostZoneUnbonding for %s at EpochNumber %d to in status %s", + hostZone.ChainId, epochUnbondingRecord.EpochNumber, recordtypes.HostZoneUnbonding_EXIT_TRANSFER_IN_PROGRESS.String(), + )) + hostZoneUnbonding.Status = recordstypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE + } + + err := k.RecordsKeeper.SetHostZoneUnbondingRecord(ctx, epochUnbondingRecord.EpochNumber, hostZone.ChainId, *hostZoneUnbonding) + if err != nil { + return nil, err + } + } + + // Revert all pending LSM Detokenizations from status DETOKENIZATION_IN_PROGRESS to status DETOKENIZATION_QUEUE + pendingDeposits := k.RecordsKeeper.GetLSMDepositsForHostZoneWithStatus(ctx, hostZone.ChainId, recordtypes.LSMTokenDeposit_DETOKENIZATION_IN_PROGRESS) + for _, lsmDeposit := range pendingDeposits { + k.Logger(ctx).Info(fmt.Sprintf("Setting LSMTokenDeposit %s to status DETOKENIZATION_QUEUE", lsmDeposit.Denom)) + k.RecordsKeeper.UpdateLSMTokenDepositStatus(ctx, lsmDeposit, recordtypes.LSMTokenDeposit_DETOKENIZATION_QUEUE) + } + } + + return &types.MsgRestoreInterchainAccountResponse{}, nil +} + +// Admin transaction to close an ICA channel by sending an ICA with a 1 nanosecond timeout (which will force a timeout and closure) +// This can be used if there are records stuck in state IN_PROGRESS after a channel has been re-opened after a timeout +// After the closure, the a new channel can be permissionlessly re-opened with RestoreInterchainAccount +func (k msgServer) CloseDelegationChannel(goCtx context.Context, msg *types.MsgCloseDelegationChannel) (*types.MsgCloseDelegationChannelResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + hostZone, found := k.GetHostZone(ctx, msg.ChainId) + if !found { + return nil, types.ErrHostZoneNotFound.Wrapf("chain id %s", msg.ChainId) + } + + // Submit an ICA bank send from the delegation ICA account to itself for just 1utoken + delegationIcaOwner := types.FormatHostZoneICAOwner(msg.ChainId, types.ICAAccountType_DELEGATION) + msgSend := []proto.Message{&banktypes.MsgSend{ + FromAddress: hostZone.DelegationIcaAddress, + ToAddress: hostZone.DelegationIcaAddress, + Amount: sdk.NewCoins(sdk.NewCoin(hostZone.HostDenom, sdkmath.OneInt())), + }} + + // Timeout the ICA 1 nanosecond after the current block time (so it's impossible to be relayed) + timeoutTimestamp := utils.IntToUint(ctx.BlockTime().UnixNano() + 1) + err := k.SubmitICATxWithoutCallback(ctx, hostZone.ConnectionId, delegationIcaOwner, msgSend, timeoutTimestamp) + if err != nil { + return nil, err + } + + return &types.MsgCloseDelegationChannelResponse{}, nil +} + +// This kicks off two ICQs, each with a callback, that will update the number of tokens on a validator +// after being slashed. The flow is: +// 1. QueryValidatorSharesToTokensRate (ICQ) +// 2. ValidatorSharesToTokensRate (CALLBACK) +// 3. SubmitDelegationICQ (ICQ) +// 4. DelegatorSharesCallback (CALLBACK) +func (k msgServer) UpdateValidatorSharesExchRate(goCtx context.Context, msg *types.MsgUpdateValidatorSharesExchRate) (*types.MsgUpdateValidatorSharesExchRateResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + if err := k.QueryValidatorSharesToTokensRate(ctx, msg.ChainId, msg.Valoper); err != nil { + return nil, err + } + return &types.MsgUpdateValidatorSharesExchRateResponse{}, nil +} + +// Submits an ICQ to get the validator's delegated shares +func (k msgServer) CalibrateDelegation(goCtx context.Context, msg *types.MsgCalibrateDelegation) (*types.MsgCalibrateDelegationResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + hostZone, found := k.GetHostZone(ctx, msg.ChainId) + if !found { + return nil, types.ErrHostZoneNotFound + } + + if err := k.SubmitCalibrationICQ(ctx, hostZone, msg.Valoper); err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Error submitting ICQ for delegation, error : %s", err.Error())) + return nil, err + } + + return &types.MsgCalibrateDelegationResponse{}, nil +} + +func (k msgServer) UpdateInnerRedemptionRateBounds(goCtx context.Context, msg *types.MsgUpdateInnerRedemptionRateBounds) (*types.MsgUpdateInnerRedemptionRateBoundsResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + // Note: we're intentionally not checking the zone is halted + zone, found := k.GetHostZone(ctx, msg.ChainId) + if !found { + k.Logger(ctx).Error(fmt.Sprintf("Host Zone not found: %s", msg.ChainId)) + return nil, types.ErrInvalidHostZone + } + + // Get the wide bounds + outerMinSafetyThreshold, outerMaxSafetyThreshold := k.GetOuterSafetyBounds(ctx, zone) + + innerMinSafetyThreshold := msg.MinInnerRedemptionRate + innerMaxSafetyThreshold := msg.MaxInnerRedemptionRate + + // Confirm the inner bounds are within the outer bounds + if innerMinSafetyThreshold.LT(outerMinSafetyThreshold) { + return nil, errorsmod.Wrapf(types.ErrInvalidBounds, + "inner min safety threshold (%s) is less than outer min safety threshold (%s)", + innerMinSafetyThreshold, outerMinSafetyThreshold) + } + + if innerMaxSafetyThreshold.GT(outerMaxSafetyThreshold) { + return nil, errorsmod.Wrapf(types.ErrInvalidBounds, + "inner max safety threshold (%s) is greater than outer max safety threshold (%s)", + innerMaxSafetyThreshold, outerMaxSafetyThreshold) + } + + // Set the inner bounds on the host zone + zone.MinInnerRedemptionRate = innerMinSafetyThreshold + zone.MaxInnerRedemptionRate = innerMaxSafetyThreshold + + k.SetHostZone(ctx, zone) + + return &types.MsgUpdateInnerRedemptionRateBoundsResponse{}, nil +} + +func (k msgServer) ResumeHostZone(goCtx context.Context, msg *types.MsgResumeHostZone) (*types.MsgResumeHostZoneResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + // Get Host Zone + hostZone, found := k.GetHostZone(ctx, msg.ChainId) + if !found { + return nil, errorsmod.Wrapf(types.ErrHostZoneNotFound, "host zone %s not found", msg.ChainId) + } + + // Check the zone is halted + if !hostZone.Halted { + return nil, errorsmod.Wrapf(types.ErrHostZoneNotHalted, "host zone %s is not halted", msg.ChainId) + } + + // remove from blacklist + stDenom := types.StAssetDenomFromHostZoneDenom(hostZone.HostDenom) + k.RatelimitKeeper.RemoveDenomFromBlacklist(ctx, stDenom) + + // Resume zone + hostZone.Halted = false + k.SetHostZone(ctx, hostZone) + + return &types.MsgResumeHostZoneResponse{}, nil +} + +// Registers or updates a community pool rebate, configuring the rebate percentage and liquid stake amount +func (k msgServer) SetCommunityPoolRebate( + goCtx context.Context, + msg *types.MsgSetCommunityPoolRebate, +) (*types.MsgSetCommunityPoolRebateResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + hostZone, found := k.GetHostZone(ctx, msg.ChainId) + if !found { + return nil, types.ErrHostZoneNotFound.Wrapf("host zone %s not found", msg.ChainId) + } + + // Get the current stToken supply and confirm it's greater than or equal to the liquid staked amount + stDenom := utils.StAssetDenomFromHostZoneDenom(hostZone.HostDenom) + stTokenSupply := k.bankKeeper.GetSupply(ctx, stDenom).Amount + if msg.LiquidStakedStTokenAmount.GT(stTokenSupply) { + return nil, types.ErrFailedToRegisterRebate.Wrapf("liquid staked stToken amount (%v) is greater than current supply (%v)", + msg.LiquidStakedStTokenAmount, stTokenSupply) + } + + // If a zero rebate rate or zero LiquidStakedStTokenAmount is specified, set the rebate to nil + // Otherwise, update the struct + if msg.LiquidStakedStTokenAmount.IsZero() || msg.RebateRate.IsZero() { + hostZone.CommunityPoolRebate = nil + } else { + hostZone.CommunityPoolRebate = &types.CommunityPoolRebate{ + LiquidStakedStTokenAmount: msg.LiquidStakedStTokenAmount, + RebateRate: msg.RebateRate, + } + } + + k.SetHostZone(ctx, hostZone) + + return &types.MsgSetCommunityPoolRebateResponse{}, nil +} + +// Submits an ICA tx to either grant or revoke authz permisssions to an address +// to execute trades on behalf of the trade ICA +func (k msgServer) ToggleTradeController( + goCtx context.Context, + msg *types.MsgToggleTradeController, +) (*types.MsgToggleTradeControllerResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + // Fetch the trade ICA which will be the granter + tradeRoute, found := k.GetTradeRouteFromTradeAccountChainId(ctx, msg.ChainId) + if !found { + return nil, types.ErrTradeRouteNotFound.Wrapf("trade route not found for chain ID %s", msg.ChainId) + } + + // Build the authz message that grants or revokes trade permissions to the specified address + authzMsg, err := k.BuildTradeAuthzMsg(ctx, tradeRoute, msg.PermissionChange, msg.Address, msg.Legacy) + if err != nil { + return nil, err + } + + // Build the ICA channel owner from the trade route + tradeRouteAccountOwner := types.FormatTradeRouteICAOwnerFromRouteId( + msg.ChainId, + tradeRoute.GetRouteId(), + types.ICAAccountType_CONVERTER_TRADE, + ) + + // Submit the ICA tx from the trade ICA account + // Timeout the ICA at 1 hour + timeoutTimestamp := utils.IntToUint(ctx.BlockTime().Add(time.Hour).UnixNano()) + err = k.SubmitICATxWithoutCallback( + ctx, + tradeRoute.TradeAccount.ConnectionId, + tradeRouteAccountOwner, + authzMsg, + timeoutTimestamp, + ) + if err != nil { + return nil, err + } + + return &types.MsgToggleTradeControllerResponse{}, nil +} diff --git a/x/stakeibc/keeper/msg_server_test.go b/x/stakeibc/keeper/msg_server_test.go new file mode 100644 index 00000000000..c014c2b0de7 --- /dev/null +++ b/x/stakeibc/keeper/msg_server_test.go @@ -0,0 +1,2179 @@ +package keeper_test + +import ( + "fmt" + + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/bech32" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/cosmos/gogoproto/proto" + icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/utils" + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + recordtypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/keeper" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" + stakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// ---------------------------------------------------- +// UpdateHostZoneParams +// ---------------------------------------------------- + +func (s *KeeperTestSuite) TestUpdateHostZoneParams() { + initialMessages := uint64(32) + updatedMessages := uint64(100) + + // Create a host zone + s.App.StakeibcKeeper.SetHostZone(s.Ctx, types.HostZone{ + ChainId: HostChainId, + MaxMessagesPerIcaTx: initialMessages, + }) + + // Submit the message to update the params + validUpdateMsg := types.MsgUpdateHostZoneParams{ + Authority: Authority, + ChainId: HostChainId, + MaxMessagesPerIcaTx: updatedMessages, + } + _, err := s.GetMsgServer().UpdateHostZoneParams(s.Ctx, &validUpdateMsg) + s.Require().NoError(err, "no error expected when updating host zone params") + + // Check that the max messages was updated + hostZone := s.MustGetHostZone(HostChainId) + s.Require().Equal(updatedMessages, hostZone.MaxMessagesPerIcaTx, "max messages") + + // Update it again, setting it to the default value + validUpdateMsg = types.MsgUpdateHostZoneParams{ + Authority: Authority, + ChainId: HostChainId, + MaxMessagesPerIcaTx: 0, + } + _, err = s.GetMsgServer().UpdateHostZoneParams(s.Ctx, &validUpdateMsg) + s.Require().NoError(err, "no error expected when updating host zone params again") + + // Check that the max messages was updated + hostZone = s.MustGetHostZone(HostChainId) + s.Require().Equal(keeper.DefaultMaxMessagesPerIcaTx, hostZone.MaxMessagesPerIcaTx, "max messages") + + // Attempt it again with an invalid chain ID, it should fail + invalidUpdateMsg := types.MsgUpdateHostZoneParams{ + Authority: Authority, + ChainId: "missing-host", + MaxMessagesPerIcaTx: updatedMessages, + } + _, err = s.GetMsgServer().UpdateHostZoneParams(s.Ctx, &invalidUpdateMsg) + s.Require().ErrorContains(err, "host zone not found") + + // Finally attempt again with an invalid authority, it should also fail + invalidUpdateMsg = types.MsgUpdateHostZoneParams{ + Authority: "invalid-authority", + ChainId: HostChainId, + MaxMessagesPerIcaTx: updatedMessages, + } + _, err = s.GetMsgServer().UpdateHostZoneParams(s.Ctx, &invalidUpdateMsg) + s.Require().ErrorContains(err, "invalid authority") +} + +// ---------------------------------------------------- +// AddValidator +// ---------------------------------------------------- + +type AddValidatorsTestCase struct { + hostZone types.HostZone + validMsg types.MsgAddValidators + expectedValidators []*types.Validator + validatorQueryDataToName map[string]string +} + +// Helper function to determine the validator's key in the staking store +// which is used as the request data in the ICQ +func (s *KeeperTestSuite) getSharesToTokensRateQueryData(validatorAddress string) []byte { + _, validatorAddressBz, err := bech32.DecodeAndConvert(validatorAddress) + s.Require().NoError(err, "no error expected when decoding validator address") + return stakingtypes.GetValidatorKey(validatorAddressBz) +} + +func (s *KeeperTestSuite) SetupAddValidators() AddValidatorsTestCase { + slashThreshold := uint64(10) + params := types.DefaultParams() + params.ValidatorSlashQueryThreshold = slashThreshold + s.App.StakeibcKeeper.SetParams(s.Ctx, params) + + totalDelegations := sdkmath.NewInt(100_000) + expectedSlashCheckpoint := sdkmath.NewInt(10_000) + + hostZone := types.HostZone{ + ChainId: "GAIA", + ConnectionId: ibctesting.FirstConnectionID, + Validators: []*types.Validator{}, + TotalDelegations: totalDelegations, + } + + validatorAddresses := map[string]string{ + "val1": "stridevaloper1uk4ze0x4nvh4fk0xm4jdud58eqn4yxhrgpwsqm", + "val2": "stridevaloper17kht2x2ped6qytr2kklevtvmxpw7wq9rcfud5c", + "val3": "stridevaloper1nnurja9zt97huqvsfuartetyjx63tc5zrj5x9f", + } + + // mapping of query request data to validator name + // serves as a reverse lookup to map sharesToTokens rate queries to validators + validatorQueryDataToName := map[string]string{} + for name, address := range validatorAddresses { + queryData := s.getSharesToTokensRateQueryData(address) + validatorQueryDataToName[string(queryData)] = name + } + + validMsg := types.MsgAddValidators{ + Creator: "stride_ADMIN", + HostZone: HostChainId, + Validators: []*types.Validator{ + {Name: "val1", Address: validatorAddresses["val1"], Weight: 1}, + {Name: "val2", Address: validatorAddresses["val2"], Weight: 2}, + {Name: "val3", Address: validatorAddresses["val3"], Weight: 3}, + }, + } + + expectedValidators := []*types.Validator{ + {Name: "val1", Address: validatorAddresses["val1"], Weight: 1}, + {Name: "val2", Address: validatorAddresses["val2"], Weight: 2}, + {Name: "val3", Address: validatorAddresses["val3"], Weight: 3}, + } + for _, validator := range expectedValidators { + validator.Delegation = sdkmath.ZeroInt() + validator.SlashQueryProgressTracker = sdkmath.ZeroInt() + validator.SharesToTokensRate = sdkmath.LegacyOneDec() + validator.SlashQueryCheckpoint = expectedSlashCheckpoint + } + + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + // Mock the latest client height for the ICQ submission + s.MockClientLatestHeight(1) + + return AddValidatorsTestCase{ + hostZone: hostZone, + validMsg: validMsg, + expectedValidators: expectedValidators, + validatorQueryDataToName: validatorQueryDataToName, + } +} + +func (s *KeeperTestSuite) TestAddValidators_Successful() { + tc := s.SetupAddValidators() + + // Add validators + _, err := s.GetMsgServer().AddValidators(s.Ctx, &tc.validMsg) + s.Require().NoError(err) + + hostZone, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, "GAIA") + s.Require().True(found, "host zone found") + s.Require().Equal(3, len(hostZone.Validators), "number of validators") + + for i := 0; i < 3; i++ { + s.Require().Equal(*tc.expectedValidators[i], *hostZone.Validators[i], "validators %d", i) + } + + // Confirm ICQs were submitted + queries := s.App.InterchainqueryKeeper.AllQueries(s.Ctx) + s.Require().Len(queries, 3) + + // Map the query responses to the validator names to get the names of the validators that + // were queried + queriedValidators := []string{} + for i, query := range queries { + validator, ok := tc.validatorQueryDataToName[string(query.RequestData)] + s.Require().True(ok, "query from response %d does not match any expected requests", i) + queriedValidators = append(queriedValidators, validator) + } + + // Confirm the list of queried validators matches the full list of validators + allValidatorNames := []string{} + for _, expected := range tc.expectedValidators { + allValidatorNames = append(allValidatorNames, expected.Name) + } + s.Require().ElementsMatch(allValidatorNames, queriedValidators, "queried validators") +} + +func (s *KeeperTestSuite) TestAddValidators_HostZoneNotFound() { + tc := s.SetupAddValidators() + + // Replace hostzone in msg to a host zone that doesn't exist + badHostZoneMsg := tc.validMsg + badHostZoneMsg.HostZone = "gaia" + _, err := s.GetMsgServer().AddValidators(s.Ctx, &badHostZoneMsg) + s.Require().EqualError(err, "Host Zone (gaia) not found: host zone not found") +} + +func (s *KeeperTestSuite) TestAddValidators_AddressAlreadyExists() { + tc := s.SetupAddValidators() + + // Update host zone so that the name val1 already exists + hostZone := tc.hostZone + duplicateAddress := tc.expectedValidators[0].Address + duplicateVal := types.Validator{Name: "new_val", Address: duplicateAddress} + hostZone.Validators = []*types.Validator{&duplicateVal} + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + // Change the validator address to val1 so that the message errors + expectedError := fmt.Sprintf("Validator address (%s) already exists on Host Zone (GAIA)", duplicateAddress) + _, err := s.GetMsgServer().AddValidators(s.Ctx, &tc.validMsg) + s.Require().ErrorContains(err, expectedError) +} + +func (s *KeeperTestSuite) TestAddValidators_NameAlreadyExists() { + tc := s.SetupAddValidators() + + // Update host zone so that val1's address already exists + hostZone := tc.hostZone + duplicateName := tc.expectedValidators[0].Name + duplicateVal := types.Validator{Name: duplicateName, Address: "new_address"} + hostZone.Validators = []*types.Validator{&duplicateVal} + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + // Change the validator name to val1 so that the message errors + expectedError := fmt.Sprintf("Validator name (%s) already exists on Host Zone (GAIA)", duplicateName) + _, err := s.GetMsgServer().AddValidators(s.Ctx, &tc.validMsg) + s.Require().ErrorContains(err, expectedError) +} + +func (s *KeeperTestSuite) TestAddValidators_SuccessfulManyValidators() { + s.App.StakeibcKeeper.SetHostZone(s.Ctx, types.HostZone{ + ChainId: HostChainId, + ConnectionId: ibctesting.FirstConnectionID, + }) + s.MockClientLatestHeight(1) + + // Setup validators in a top-heavy order so that *if* the weight cap + // was checked after each validator, it would fail midway + // However, the addition of last validator causes the highest weight + // validator to be below 10% + validators := []*types.Validator{ + {Name: "val1", Weight: 10}, + {Name: "val2", Weight: 10}, + {Name: "val3", Weight: 9}, + {Name: "val4", Weight: 9}, + {Name: "val5", Weight: 8}, + {Name: "val6", Weight: 8}, + {Name: "val7", Weight: 7}, + {Name: "val8", Weight: 7}, + {Name: "val9", Weight: 6}, + {Name: "val10", Weight: 6}, + {Name: "val11", Weight: 5}, + {Name: "val12", Weight: 5}, + {Name: "val13", Weight: 4}, + {Name: "val14", Weight: 4}, + {Name: "val15", Weight: 3}, + } + + // Assign an address for each + addresses := apptesting.CreateRandomAccounts(len(validators)) + for i, validator := range validators { + validator.Address = addresses[i].String() + } + + // Submit the add validator message - it should succeed + addValidatorMsg := types.MsgAddValidators{ + HostZone: HostChainId, + Validators: validators, + } + _, err := s.GetMsgServer().AddValidators(s.Ctx, &addValidatorMsg) + s.Require().NoError(err, "no error expected when adding validators") +} + +func (s *KeeperTestSuite) TestAddValidators_ValidatorWeightCapExceeded() { + s.App.StakeibcKeeper.SetHostZone(s.Ctx, types.HostZone{ + ChainId: HostChainId, + ConnectionId: ibctesting.FirstConnectionID, + }) + s.MockClientLatestHeight(1) + + // The distribution below will lead to the first two validators owning more + // than a 10% share + validators := []*types.Validator{ + {Name: "val1", Weight: 10}, + {Name: "val2", Weight: 10}, + {Name: "val3", Weight: 9}, + {Name: "val4", Weight: 9}, + {Name: "val5", Weight: 8}, + {Name: "val6", Weight: 8}, + {Name: "val7", Weight: 7}, + {Name: "val8", Weight: 7}, + {Name: "val9", Weight: 6}, + {Name: "val10", Weight: 6}, + {Name: "val11", Weight: 5}, + {Name: "val12", Weight: 5}, + {Name: "val13", Weight: 4}, + {Name: "val14", Weight: 4}, + } + + // Assign an address for each + addresses := apptesting.CreateRandomAccounts(len(validators)) + for i, validator := range validators { + validator.Address = addresses[i].String() + } + + // Submit the add validator message - it should error + addValidatorMsg := types.MsgAddValidators{ + HostZone: HostChainId, + Validators: validators, + } + _, err := s.GetMsgServer().AddValidators(s.Ctx, &addValidatorMsg) + s.Require().ErrorContains(err, "validator exceeds weight cap") +} + +// ---------------------------------------------------- +// DeleteValidator +// ---------------------------------------------------- + +type DeleteValidatorTestCase struct { + hostZone stakeibctypes.HostZone + initialValidators []*stakeibctypes.Validator + validMsgs []stakeibctypes.MsgDeleteValidator +} + +func (s *KeeperTestSuite) SetupDeleteValidator() DeleteValidatorTestCase { + initialValidators := []*stakeibctypes.Validator{ + { + Name: "val1", + Address: "stride_VAL1", + Weight: 0, + Delegation: sdkmath.ZeroInt(), + SharesToTokensRate: sdkmath.LegacyOneDec(), + }, + { + Name: "val2", + Address: "stride_VAL2", + Weight: 0, + Delegation: sdkmath.ZeroInt(), + SharesToTokensRate: sdkmath.LegacyOneDec(), + }, + } + + hostZone := stakeibctypes.HostZone{ + ChainId: "GAIA", + Validators: initialValidators, + } + validMsgs := []stakeibctypes.MsgDeleteValidator{ + { + Creator: "stride_ADDRESS", + HostZone: "GAIA", + ValAddr: "stride_VAL1", + }, + { + Creator: "stride_ADDRESS", + HostZone: "GAIA", + ValAddr: "stride_VAL2", + }, + } + + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + return DeleteValidatorTestCase{ + hostZone: hostZone, + initialValidators: initialValidators, + validMsgs: validMsgs, + } +} + +func (s *KeeperTestSuite) TestDeleteValidator_Successful() { + tc := s.SetupDeleteValidator() + + // Delete first validator + _, err := s.GetMsgServer().DeleteValidator(s.Ctx, &tc.validMsgs[0]) + s.Require().NoError(err) + + hostZone, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, "GAIA") + s.Require().True(found, "host zone found") + s.Require().Equal(1, len(hostZone.Validators), "number of validators should be 1") + s.Require().Equal(tc.initialValidators[1:], hostZone.Validators, "validators list after removing 1 validator") + + // Delete second validator + _, err = s.GetMsgServer().DeleteValidator(s.Ctx, &tc.validMsgs[1]) + s.Require().NoError(err) + + hostZone, found = s.App.StakeibcKeeper.GetHostZone(s.Ctx, "GAIA") + s.Require().True(found, "host zone found") + s.Require().Equal(0, len(hostZone.Validators), "number of validators should be 0") +} + +func (s *KeeperTestSuite) TestDeleteValidator_HostZoneNotFound() { + tc := s.SetupDeleteValidator() + + // Replace hostzone in msg to a host zone that doesn't exist + badHostZoneMsg := tc.validMsgs[0] + badHostZoneMsg.HostZone = "gaia" + _, err := s.GetMsgServer().DeleteValidator(s.Ctx, &badHostZoneMsg) + s.Require().ErrorContains(err, "host zone gaia not found") +} + +func (s *KeeperTestSuite) TestDeleteValidator_AddressNotFound() { + tc := s.SetupDeleteValidator() + + // Build message with a validator address that does not exist + badAddressMsg := tc.validMsgs[0] + badAddressMsg.ValAddr = "stride_VAL5" + _, err := s.GetMsgServer().DeleteValidator(s.Ctx, &badAddressMsg) + + s.Require().ErrorContains(err, "failed to remove validator stride_VAL5 from host zone GAIA") +} + +func (s *KeeperTestSuite) TestDeleteValidator_NonZeroDelegation() { + tc := s.SetupDeleteValidator() + + // Update val1 to have a non-zero delegation + hostZone := tc.hostZone + hostZone.Validators[0].Delegation = sdkmath.NewInt(1) + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + _, err := s.GetMsgServer().DeleteValidator(s.Ctx, &tc.validMsgs[0]) + s.Require().ErrorContains(err, "Validator (stride_VAL1) has non-zero delegation (1) or weight (0)") +} + +func (s *KeeperTestSuite) TestDeleteValidator_NonZeroWeight() { + tc := s.SetupDeleteValidator() + + // Update val1 to have a non-zero weight + hostZone := tc.hostZone + hostZone.Validators[0].Weight = 1 + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + _, err := s.GetMsgServer().DeleteValidator(s.Ctx, &tc.validMsgs[0]) + s.Require().ErrorContains(err, "Validator (stride_VAL1) has non-zero delegation (0) or weight (1)") +} + +// ---------------------------------------------------- +// ClearBalance +// ---------------------------------------------------- + +type ClearBalanceState struct { + feeChannel Channel + hz stakeibctypes.HostZone +} + +type ClearBalanceTestCase struct { + initialState ClearBalanceState + validMsg stakeibctypes.MsgClearBalance +} + +func (s *KeeperTestSuite) SetupClearBalance() ClearBalanceTestCase { + // fee account + feeAccountOwner := fmt.Sprintf("%s.%s", HostChainId, "FEE") + feeChannelID, _ := s.CreateICAChannel(feeAccountOwner) + feeAddress := s.IcaAddresses[feeAccountOwner] + // hz + depositAddress := types.NewHostZoneDepositAddress(HostChainId) + hostZone := stakeibctypes.HostZone{ + ChainId: HostChainId, + ConnectionId: ibctesting.FirstConnectionID, + HostDenom: Atom, + IbcDenom: IbcAtom, + RedemptionRate: sdkmath.LegacyNewDec(1.0), + DepositAddress: depositAddress.String(), + FeeIcaAddress: feeAddress, + } + + amount := sdkmath.NewInt(1_000_000) + + user := Account{ + acc: s.TestAccs[0], + } + + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + return ClearBalanceTestCase{ + initialState: ClearBalanceState{ + hz: hostZone, + feeChannel: Channel{ + PortID: icatypes.ControllerPortPrefix + feeAccountOwner, + ChannelID: feeChannelID, + }, + }, + validMsg: stakeibctypes.MsgClearBalance{ + Creator: user.acc.String(), + ChainId: HostChainId, + Amount: amount, + Channel: feeChannelID, + }, + } +} + +func (s *KeeperTestSuite) TestClearBalance_Successful() { + tc := s.SetupClearBalance() + + // Get the sequence number before the ICA is submitted to confirm it incremented + feeChannel := tc.initialState.feeChannel + feePortId := feeChannel.PortID + feeChannelId := feeChannel.ChannelID + + startSequence, found := s.App.IBCKeeper.ChannelKeeper.GetNextSequenceSend(s.Ctx, feePortId, feeChannelId) + s.Require().True(found, "sequence number not found before clear balance") + + _, err := s.GetMsgServer().ClearBalance(s.Ctx, &tc.validMsg) + s.Require().NoError(err, "balance clears") + + // Confirm the sequence number was incremented + endSequence, found := s.App.IBCKeeper.ChannelKeeper.GetNextSequenceSend(s.Ctx, feePortId, feeChannelId) + s.Require().True(found, "sequence number not found after clear balance") + s.Require().Equal(endSequence, startSequence+1, "sequence number after clear balance") +} + +func (s *KeeperTestSuite) TestClearBalance_HostChainMissing() { + tc := s.SetupClearBalance() + // remove the host zone + s.App.StakeibcKeeper.RemoveHostZone(s.Ctx, HostChainId) + _, err := s.GetMsgServer().ClearBalance(s.Ctx, &tc.validMsg) + s.Require().EqualError(err, "chainId: GAIA: host zone not registered") +} + +func (s *KeeperTestSuite) TestClearBalance_FeeAccountMissing() { + tc := s.SetupClearBalance() + // no fee account + tc.initialState.hz.FeeIcaAddress = "" + s.App.StakeibcKeeper.SetHostZone(s.Ctx, tc.initialState.hz) + _, err := s.GetMsgServer().ClearBalance(s.Ctx, &tc.validMsg) + s.Require().EqualError(err, "fee acount not found for chainId: GAIA: ICA acccount not found on host zone") +} + +func (s *KeeperTestSuite) TestClearBalance_ParseCoinError() { + tc := s.SetupClearBalance() + // invalid denom + tc.initialState.hz.HostDenom = ":" + s.App.StakeibcKeeper.SetHostZone(s.Ctx, tc.initialState.hz) + _, err := s.GetMsgServer().ClearBalance(s.Ctx, &tc.validMsg) + s.Require().EqualError(err, "failed to parse coin (1000000:): invalid decimal coin expression: 1000000:") +} + +// ---------------------------------------------------- +// LiquidStake +// ---------------------------------------------------- + +type Account struct { + acc sdk.AccAddress + atomBalance sdk.Coin + stAtomBalance sdk.Coin +} + +type LiquidStakeState struct { + depositRecordAmount sdkmath.Int + hostZone stakeibctypes.HostZone +} + +type LiquidStakeTestCase struct { + user Account + zoneAccount Account + initialState LiquidStakeState + validMsg stakeibctypes.MsgLiquidStake +} + +func (s *KeeperTestSuite) SetupLiquidStake() LiquidStakeTestCase { + stakeAmount := sdkmath.NewInt(1_000_000) + initialDepositAmount := sdkmath.NewInt(1_000_000) + user := Account{ + acc: s.TestAccs[0], + atomBalance: sdk.NewInt64Coin(IbcAtom, 10_000_000), + stAtomBalance: sdk.NewInt64Coin(StAtom, 0), + } + s.FundAccount(user.acc, user.atomBalance) + + depositAddress := stakeibctypes.NewHostZoneDepositAddress(HostChainId) + + zoneAccount := Account{ + acc: depositAddress, + atomBalance: sdk.NewInt64Coin(IbcAtom, 10_000_000), + stAtomBalance: sdk.NewInt64Coin(StAtom, 10_000_000), + } + s.FundAccount(zoneAccount.acc, zoneAccount.atomBalance) + s.FundAccount(zoneAccount.acc, zoneAccount.stAtomBalance) + + hostZone := stakeibctypes.HostZone{ + ChainId: HostChainId, + HostDenom: Atom, + IbcDenom: IbcAtom, + RedemptionRate: sdkmath.LegacyNewDec(1.0), + DepositAddress: depositAddress.String(), + } + + epochTracker := stakeibctypes.EpochTracker{ + EpochIdentifier: epochtypes.STRIDE_EPOCH, + EpochNumber: 1, + } + + initialDepositRecord := recordtypes.DepositRecord{ + Id: 1, + DepositEpochNumber: 1, + HostZoneId: "GAIA", + Amount: initialDepositAmount, + Status: recordtypes.DepositRecord_TRANSFER_QUEUE, + } + + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, epochTracker) + s.App.RecordsKeeper.SetDepositRecord(s.Ctx, initialDepositRecord) + + return LiquidStakeTestCase{ + user: user, + zoneAccount: zoneAccount, + initialState: LiquidStakeState{ + depositRecordAmount: initialDepositAmount, + hostZone: hostZone, + }, + validMsg: stakeibctypes.MsgLiquidStake{ + Creator: user.acc.String(), + HostDenom: Atom, + Amount: stakeAmount, + }, + } +} + +func (s *KeeperTestSuite) TestLiquidStake_Successful() { + tc := s.SetupLiquidStake() + user := tc.user + zoneAccount := tc.zoneAccount + msg := tc.validMsg + initialStAtomSupply := s.App.BankKeeper.GetSupply(s.Ctx, StAtom) + + _, err := s.GetMsgServer().LiquidStake(s.Ctx, &msg) + s.Require().NoError(err) + + // Confirm balances + // User IBC/UATOM balance should have DECREASED by the size of the stake + expectedUserAtomBalance := user.atomBalance.SubAmount(msg.Amount) + actualUserAtomBalance := s.App.BankKeeper.GetBalance(s.Ctx, user.acc, IbcAtom) + // zoneAccount IBC/UATOM balance should have INCREASED by the size of the stake + expectedzoneAccountAtomBalance := zoneAccount.atomBalance.AddAmount(msg.Amount) + actualzoneAccountAtomBalance := s.App.BankKeeper.GetBalance(s.Ctx, zoneAccount.acc, IbcAtom) + // User STUATOM balance should have INCREASED by the size of the stake + expectedUserStAtomBalance := user.stAtomBalance.AddAmount(msg.Amount) + actualUserStAtomBalance := s.App.BankKeeper.GetBalance(s.Ctx, user.acc, StAtom) + // Bank supply of STUATOM should have INCREASED by the size of the stake + expectedBankSupply := initialStAtomSupply.AddAmount(msg.Amount) + actualBankSupply := s.App.BankKeeper.GetSupply(s.Ctx, StAtom) + + s.CompareCoins(expectedUserStAtomBalance, actualUserStAtomBalance, "user stuatom balance") + s.CompareCoins(expectedUserAtomBalance, actualUserAtomBalance, "user ibc/uatom balance") + s.CompareCoins(expectedzoneAccountAtomBalance, actualzoneAccountAtomBalance, "zoneAccount ibc/uatom balance") + s.CompareCoins(expectedBankSupply, actualBankSupply, "bank stuatom supply") + + // Confirm deposit record adjustment + records := s.App.RecordsKeeper.GetAllDepositRecord(s.Ctx) + s.Require().Len(records, 1, "number of deposit records") + + expectedDepositRecordAmount := tc.initialState.depositRecordAmount.Add(msg.Amount) + actualDepositRecordAmount := records[0].Amount + s.Require().Equal(expectedDepositRecordAmount, actualDepositRecordAmount, "deposit record amount") +} + +func (s *KeeperTestSuite) TestLiquidStake_DifferentRedemptionRates() { + tc := s.SetupLiquidStake() + user := tc.user + msg := tc.validMsg + + // Loop over sharesToTokens rates: {0.92, 0.94, ..., 1.2} + for i := -8; i <= 10; i += 2 { + redemptionDelta := sdkmath.LegacyNewDecWithPrec(1.0, 1).Quo(sdkmath.LegacyNewDec(10)).Mul(sdkmath.LegacyNewDec(int64(i))) // i = 2 => delta = 0.02 + newRedemptionRate := sdkmath.LegacyNewDec(1.0).Add(redemptionDelta) + redemptionRateFloat := newRedemptionRate + + // Update rate in host zone + hz := tc.initialState.hostZone + hz.RedemptionRate = newRedemptionRate + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hz) + + // Liquid stake for each balance and confirm stAtom minted + startingStAtomBalance := s.App.BankKeeper.GetBalance(s.Ctx, user.acc, StAtom).Amount + _, err := s.GetMsgServer().LiquidStake(s.Ctx, &msg) + s.Require().NoError(err) + endingStAtomBalance := s.App.BankKeeper.GetBalance(s.Ctx, user.acc, StAtom).Amount + actualStAtomMinted := endingStAtomBalance.Sub(startingStAtomBalance) + + expectedStAtomMinted := sdkmath.LegacyNewDecFromInt(msg.Amount).Quo(redemptionRateFloat).TruncateInt() + testDescription := fmt.Sprintf("st atom balance for redemption rate: %v", redemptionRateFloat) + s.Require().Equal(expectedStAtomMinted, actualStAtomMinted, testDescription) + } +} + +func (s *KeeperTestSuite) TestLiquidStake_HostZoneNotFound() { + tc := s.SetupLiquidStake() + // Update message with invalid denom + invalidMsg := tc.validMsg + invalidMsg.HostDenom = "ufakedenom" + _, err := s.GetMsgServer().LiquidStake(s.Ctx, &invalidMsg) + + s.Require().EqualError(err, "no host zone found for denom (ufakedenom): invalid token denom") +} + +func (s *KeeperTestSuite) TestLiquidStake_HostZoneHalted() { + tc := s.SetupLiquidStake() + + // Update the host zone so that it's halted + badHostZone := tc.initialState.hostZone + badHostZone.Halted = true + s.App.StakeibcKeeper.SetHostZone(s.Ctx, badHostZone) + + _, err := s.GetMsgServer().LiquidStake(s.Ctx, &tc.validMsg) + s.Require().EqualError(err, "halted host zone found for denom (uatom): Halted host zone found") +} + +func (s *KeeperTestSuite) TestLiquidStake_InvalidUserAddress() { + tc := s.SetupLiquidStake() + + // Update hostzone with invalid address + invalidMsg := tc.validMsg + invalidMsg.Creator = "cosmosXXX" + + _, err := s.GetMsgServer().LiquidStake(s.Ctx, &invalidMsg) + s.Require().EqualError(err, "user's address is invalid: decoding bech32 failed: string not all lowercase or all uppercase") +} + +func (s *KeeperTestSuite) TestLiquidStake_InvalidHostAddress() { + tc := s.SetupLiquidStake() + + // Update hostzone with invalid address + badHostZone := tc.initialState.hostZone + badHostZone.DepositAddress = "cosmosXXX" + s.App.StakeibcKeeper.SetHostZone(s.Ctx, badHostZone) + + _, err := s.GetMsgServer().LiquidStake(s.Ctx, &tc.validMsg) + s.Require().EqualError(err, "host zone address is invalid: decoding bech32 failed: string not all lowercase or all uppercase") +} + +func (s *KeeperTestSuite) TestLiquidStake_RateBelowMinThreshold() { + tc := s.SetupLiquidStake() + msg := tc.validMsg + + // Update rate in host zone to below min threshold + hz := tc.initialState.hostZone + hz.RedemptionRate = sdkmath.LegacyMustNewDecFromStr("0.8") + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hz) + + _, err := s.GetMsgServer().LiquidStake(s.Ctx, &msg) + s.Require().Error(err) +} + +func (s *KeeperTestSuite) TestLiquidStake_RateAboveMaxThreshold() { + tc := s.SetupLiquidStake() + msg := tc.validMsg + + // Update rate in host zone to below min threshold + hz := tc.initialState.hostZone + hz.RedemptionRate = sdkmath.LegacyNewDec(2) + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hz) + + _, err := s.GetMsgServer().LiquidStake(s.Ctx, &msg) + s.Require().Error(err) +} + +func (s *KeeperTestSuite) TestLiquidStake_NoEpochTracker() { + tc := s.SetupLiquidStake() + // Remove epoch tracker + s.App.StakeibcKeeper.RemoveEpochTracker(s.Ctx, epochtypes.STRIDE_EPOCH) + _, err := s.GetMsgServer().LiquidStake(s.Ctx, &tc.validMsg) + + s.Require().EqualError(err, fmt.Sprintf("no epoch number for epoch (%s): not found", epochtypes.STRIDE_EPOCH)) +} + +func (s *KeeperTestSuite) TestLiquidStake_NoDepositRecord() { + tc := s.SetupLiquidStake() + // Remove deposit record + s.App.RecordsKeeper.RemoveDepositRecord(s.Ctx, 1) + _, err := s.GetMsgServer().LiquidStake(s.Ctx, &tc.validMsg) + + s.Require().EqualError(err, fmt.Sprintf("no deposit record for epoch (%d): not found", 1)) +} + +func (s *KeeperTestSuite) TestLiquidStake_NotIbcDenom() { + tc := s.SetupLiquidStake() + // Update hostzone with non-ibc denom + badDenom := "i/uatom" + badHostZone := tc.initialState.hostZone + badHostZone.IbcDenom = badDenom + s.App.StakeibcKeeper.SetHostZone(s.Ctx, badHostZone) + // Fund the user with the non-ibc denom + s.FundAccount(tc.user.acc, sdk.NewInt64Coin(badDenom, 1000000000)) + _, err := s.GetMsgServer().LiquidStake(s.Ctx, &tc.validMsg) + + s.Require().EqualError(err, fmt.Sprintf("denom is not an IBC token (%s): invalid token denom", badHostZone.IbcDenom)) +} + +func (s *KeeperTestSuite) TestLiquidStake_ZeroStTokens() { + tc := s.SetupLiquidStake() + + // Adjust redemption rate and liquid stake amount so that the number of stTokens would be zero + // stTokens = 1(amount) / 1.1(RR) = rounds down to 0 + hostZone := tc.initialState.hostZone + hostZone.RedemptionRate = sdkmath.LegacyNewDecWithPrec(11, 1) + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + tc.validMsg.Amount = sdkmath.NewInt(1) + + // The liquid stake should fail + _, err := s.GetMsgServer().LiquidStake(s.Ctx, &tc.validMsg) + s.Require().EqualError(err, "Liquid stake of 1uatom would return 0 stTokens: Liquid staked amount is too small") +} + +func (s *KeeperTestSuite) TestLiquidStake_InsufficientBalance() { + tc := s.SetupLiquidStake() + // Set liquid stake amount to value greater than account balance + invalidMsg := tc.validMsg + balance := tc.user.atomBalance.Amount + invalidMsg.Amount = balance.Add(sdkmath.NewInt(1000)) + _, err := s.GetMsgServer().LiquidStake(s.Ctx, &invalidMsg) + + expectedErr := fmt.Sprintf("balance is lower than staking amount. staking amount: %v, balance: %v: insufficient funds", balance.Add(sdkmath.NewInt(1000)), balance) + s.Require().EqualError(err, expectedErr) +} + +func (s *KeeperTestSuite) TestLiquidStake_HaltedZone() { + tc := s.SetupLiquidStake() + haltedHostZone := tc.initialState.hostZone + haltedHostZone.Halted = true + s.App.StakeibcKeeper.SetHostZone(s.Ctx, haltedHostZone) + s.FundAccount(tc.user.acc, sdk.NewInt64Coin(haltedHostZone.IbcDenom, 1000000000)) + _, err := s.GetMsgServer().LiquidStake(s.Ctx, &tc.validMsg) + + s.Require().EqualError(err, fmt.Sprintf("halted host zone found for denom (%s): Halted host zone found", haltedHostZone.HostDenom)) +} + +// ---------------------------------------------------- +// LSMLiquidStake +// ---------------------------------------------------- + +type LSMLiquidStakeTestCase struct { + hostZone types.HostZone + liquidStakerAddress sdk.AccAddress + depositAddress sdk.AccAddress + initialBalance sdkmath.Int + initialQueryProgress sdkmath.Int + queryCheckpoint sdkmath.Int + lsmTokenIBCDenom string + validMsg *types.MsgLSMLiquidStake +} + +// Helper function to add the port and channel onto the LSMTokenBaseDenom, +// hash it, and then store the trace in the IBC store +// Returns the ibc hash +func (s *KeeperTestSuite) getLSMTokenIBCDenom() string { + sourcePrefix := transfertypes.GetDenomPrefix(transfertypes.PortID, ibctesting.FirstChannelID) + prefixedDenom := sourcePrefix + LSMTokenBaseDenom + lsmTokenDenomTrace := transfertypes.ParseDenomTrace(prefixedDenom) + s.App.TransferKeeper.SetDenomTrace(s.Ctx, lsmTokenDenomTrace) + return lsmTokenDenomTrace.IBCDenom() +} + +func (s *KeeperTestSuite) SetupTestLSMLiquidStake() LSMLiquidStakeTestCase { + initialBalance := sdkmath.NewInt(3000) + stakeAmount := sdkmath.NewInt(1000) + userAddress := s.TestAccs[0] + depositAddress := types.NewHostZoneDepositAddress(HostChainId) + + // Need valid IBC denom here to test parsing + lsmTokenIBCDenom := s.getLSMTokenIBCDenom() + + // Fund the user's account with the LSM token + s.FundAccount(userAddress, sdk.NewCoin(lsmTokenIBCDenom, initialBalance)) + + // Add the slash interval + // TVL: 100k, Checkpoint: 1% of 1M = 10k + // Progress towards query: 8000 + // => Liquid Stake of 2k will trip query + totalHostZoneStake := sdkmath.NewInt(1_000_000) + queryCheckpoint := sdkmath.NewInt(10_000) + progressTowardsQuery := sdkmath.NewInt(8000) + params := types.DefaultParams() + params.ValidatorSlashQueryThreshold = 1 // 1 % + s.App.StakeibcKeeper.SetParams(s.Ctx, params) + + // Sanity check + onePercent := sdkmath.LegacyMustNewDecFromStr("0.01") + s.Require().Equal(queryCheckpoint.Int64(), onePercent.Mul(sdkmath.LegacyNewDecFromInt(totalHostZoneStake)).TruncateInt64(), + "setup failed - query checkpoint must be 1% of total host zone stake") + + // Add the host zone with a valid zone address as the LSM custodian + hostZone := types.HostZone{ + ChainId: HostChainId, + HostDenom: Atom, + RedemptionRate: sdkmath.LegacyNewDec(1.0), + DepositAddress: depositAddress.String(), + TransferChannelId: ibctesting.FirstChannelID, + ConnectionId: ibctesting.FirstConnectionID, + TotalDelegations: totalHostZoneStake, + Validators: []*types.Validator{{ + Address: ValAddress, + SlashQueryProgressTracker: progressTowardsQuery, + SlashQueryCheckpoint: queryCheckpoint, + SharesToTokensRate: sdkmath.LegacyOneDec(), + }}, + DelegationIcaAddress: "cosmos_DELEGATION", + LsmLiquidStakeEnabled: true, + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + // Mock the latest client height for the ICQ submission + s.MockClientLatestHeight(1) + + return LSMLiquidStakeTestCase{ + hostZone: hostZone, + liquidStakerAddress: userAddress, + depositAddress: depositAddress, + initialBalance: initialBalance, + initialQueryProgress: progressTowardsQuery, + queryCheckpoint: queryCheckpoint, + lsmTokenIBCDenom: lsmTokenIBCDenom, + validMsg: &types.MsgLSMLiquidStake{ + Creator: userAddress.String(), + LsmTokenIbcDenom: lsmTokenIBCDenom, + Amount: stakeAmount, + }, + } +} + +func (s *KeeperTestSuite) TestLSMLiquidStake_Successful_NoSharesToTokensRateQuery() { + tc := s.SetupTestLSMLiquidStake() + + // Call LSM Liquid stake with a valid message + msgResponse, err := s.GetMsgServer().LSMLiquidStake(s.Ctx, tc.validMsg) + s.Require().NoError(err, "no error expected when calling lsm liquid stake") + s.Require().True(msgResponse.TransactionComplete, "transaction should be complete") + + // Confirm the LSM token was sent to the protocol + userLsmBalance := s.App.BankKeeper.GetBalance(s.Ctx, tc.liquidStakerAddress, tc.lsmTokenIBCDenom) + s.Require().Equal(tc.initialBalance.Sub(tc.validMsg.Amount).Int64(), userLsmBalance.Amount.Int64(), + "lsm token balance of user account") + + // Confirm stToken was sent to the user + userStTokenBalance := s.App.BankKeeper.GetBalance(s.Ctx, tc.liquidStakerAddress, StAtom) + s.Require().Equal(tc.validMsg.Amount.Int64(), userStTokenBalance.Amount.Int64(), "user stToken balance") + + // Confirm an LSMDeposit was created + expectedDepositId := keeper.GetLSMTokenDepositId(s.Ctx.BlockHeight(), HostChainId, tc.validMsg.Creator, LSMTokenBaseDenom) + expectedDeposit := recordstypes.LSMTokenDeposit{ + DepositId: expectedDepositId, + ChainId: HostChainId, + Denom: LSMTokenBaseDenom, + StakerAddress: s.TestAccs[0].String(), + IbcDenom: tc.lsmTokenIBCDenom, + ValidatorAddress: ValAddress, + Amount: tc.validMsg.Amount, + Status: recordstypes.LSMTokenDeposit_TRANSFER_QUEUE, + StToken: sdk.NewCoin(StAtom, tc.validMsg.Amount), + } + actualDeposit, found := s.App.RecordsKeeper.GetLSMTokenDeposit(s.Ctx, HostChainId, LSMTokenBaseDenom) + s.Require().True(found, "lsm token deposit should have been found after LSM liquid stake") + s.Require().Equal(expectedDeposit, actualDeposit) + + // Confirm slash query progress was incremented + hostZone, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, HostChainId) + expectedQueryProgress := tc.initialQueryProgress.Add(tc.validMsg.Amount) + s.Require().True(found, "host zone should have been found") + s.Require().Equal(expectedQueryProgress.Int64(), hostZone.Validators[0].SlashQueryProgressTracker.Int64(), "slash query progress") +} + +func (s *KeeperTestSuite) TestLSMLiquidStake_Successful_WithSharesToTokensRateQuery() { + tc := s.SetupTestLSMLiquidStake() + + // Increase the liquid stake size so that it breaks the query checkpoint + // queryProgressSlack is the remaining amount that can be staked in one message before a slash query is issued + queryProgressSlack := tc.queryCheckpoint.Sub(tc.initialQueryProgress) + tc.validMsg.Amount = queryProgressSlack.Add(sdkmath.NewInt(1000)) + + // Call LSM Liquid stake + msgResponse, err := s.GetMsgServer().LSMLiquidStake(s.Ctx, tc.validMsg) + s.Require().NoError(err, "no error expected when calling lsm liquid stake") + s.Require().False(msgResponse.TransactionComplete, "transaction should still be pending") + + // Confirm stToken was NOT sent to the user + userStTokenBalance := s.App.BankKeeper.GetBalance(s.Ctx, tc.liquidStakerAddress, StAtom) + s.Require().True(userStTokenBalance.Amount.IsZero(), "user stToken balance") + + // Confirm query was submitted + allQueries := s.App.InterchainqueryKeeper.AllQueries(s.Ctx) + s.Require().Len(allQueries, 1) + + // Confirm query metadata + actualQuery := allQueries[0] + s.Require().Equal(HostChainId, actualQuery.ChainId, "query chain-id") + s.Require().Equal(ibctesting.FirstConnectionID, actualQuery.ConnectionId, "query connection-id") + s.Require().Equal(icqtypes.STAKING_STORE_QUERY_WITH_PROOF, actualQuery.QueryType, "query types") + + s.Require().Equal(types.ModuleName, actualQuery.CallbackModule, "callback module") + s.Require().Equal(keeper.ICQCallbackID_Validator, actualQuery.CallbackId, "callback-id") + + expectedTimeout := uint64(s.Ctx.BlockTime().UnixNano() + (keeper.LSMSlashQueryTimeout).Nanoseconds()) + s.Require().Equal(keeper.LSMSlashQueryTimeout, actualQuery.TimeoutDuration, "timeout duration") + s.Require().Equal(int64(expectedTimeout), int64(actualQuery.TimeoutTimestamp), "timeout timestamp") + + // Confirm query callback data + s.Require().True(len(actualQuery.CallbackData) > 0, "callback data exists") + + expectedStToken := sdk.NewCoin(StAtom, tc.validMsg.Amount) + expectedDepositId := keeper.GetLSMTokenDepositId(s.Ctx.BlockHeight(), HostChainId, tc.validMsg.Creator, LSMTokenBaseDenom) + expectedLSMTokenDeposit := recordstypes.LSMTokenDeposit{ + DepositId: expectedDepositId, + ChainId: HostChainId, + Denom: LSMTokenBaseDenom, + IbcDenom: tc.lsmTokenIBCDenom, + StakerAddress: tc.validMsg.Creator, + ValidatorAddress: ValAddress, + Amount: tc.validMsg.Amount, + StToken: expectedStToken, + Status: recordstypes.LSMTokenDeposit_DEPOSIT_PENDING, + } + + var actualCallbackData types.ValidatorSharesToTokensQueryCallback + err = proto.Unmarshal(actualQuery.CallbackData, &actualCallbackData) + s.Require().NoError(err, "no error expected when unmarshalling query callback data") + + lsmLiquidStake := actualCallbackData.LsmLiquidStake + s.Require().Equal(HostChainId, lsmLiquidStake.HostZone.ChainId, "callback data - host zone") + s.Require().Equal(ValAddress, lsmLiquidStake.Validator.Address, "callback data - validator") + + s.Require().Equal(expectedLSMTokenDeposit, *lsmLiquidStake.Deposit, "callback data - deposit") +} + +func (s *KeeperTestSuite) TestLSMLiquidStake_DifferentRedemptionRates() { + tc := s.SetupTestLSMLiquidStake() + tc.validMsg.Amount = sdkmath.NewInt(100) // reduce the stake amount to prevent insufficient balance error + + // Loop over sharesToTokens rates: {0.92, 0.94, ..., 1.2} + interval := sdkmath.LegacyMustNewDecFromStr("0.01") + for i := -8; i <= 10; i += 2 { + redemptionDelta := interval.Mul(sdkmath.LegacyNewDec(int64(i))) // i = 2 => delta = 0.02 + newRedemptionRate := sdkmath.LegacyNewDec(1.0).Add(redemptionDelta) + redemptionRateFloat := newRedemptionRate + + // Update rate in host zone + hz := tc.hostZone + hz.RedemptionRate = newRedemptionRate + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hz) + + // Liquid stake for each balance and confirm stAtom minted + startingStAtomBalance := s.App.BankKeeper.GetBalance(s.Ctx, tc.liquidStakerAddress, StAtom).Amount + _, err := s.GetMsgServer().LSMLiquidStake(s.Ctx, tc.validMsg) + s.Require().NoError(err) + endingStAtomBalance := s.App.BankKeeper.GetBalance(s.Ctx, tc.liquidStakerAddress, StAtom).Amount + actualStAtomMinted := endingStAtomBalance.Sub(startingStAtomBalance) + + expectedStAtomMinted := sdkmath.LegacyNewDecFromInt(tc.validMsg.Amount).Quo(redemptionRateFloat).TruncateInt() + testDescription := fmt.Sprintf("st atom balance for redemption rate: %v", redemptionRateFloat) + s.Require().Equal(expectedStAtomMinted, actualStAtomMinted, testDescription) + + // Cleanup the LSMTokenDeposit record to prevent an error on the next run + s.App.RecordsKeeper.RemoveLSMTokenDeposit(s.Ctx, HostChainId, LSMTokenBaseDenom) + } +} + +// ---------------------------------------------------- +// PrepareDelegation +// ---------------------------------------------------- + +func (s *KeeperTestSuite) TestLSMLiquidStakeFailed_NotIBCDenom() { + tc := s.SetupTestLSMLiquidStake() + + // Change the message so that the denom is not an IBC token + invalidMsg := tc.validMsg + invalidMsg.LsmTokenIbcDenom = "fake_ibc_denom" + + _, err := s.GetMsgServer().LSMLiquidStake(s.Ctx, invalidMsg) + s.Require().ErrorContains(err, "lsm token is not an IBC token (fake_ibc_denom)") +} + +func (s *KeeperTestSuite) TestLSMLiquidStakeFailed_HostZoneNotFound() { + tc := s.SetupTestLSMLiquidStake() + + // Change the message so that the denom is an IBC denom from a channel that is not supported + sourcePrefix := transfertypes.GetDenomPrefix(transfertypes.PortID, "channel-1") + prefixedDenom := sourcePrefix + LSMTokenBaseDenom + lsmTokenDenomTrace := transfertypes.ParseDenomTrace(prefixedDenom) + s.App.TransferKeeper.SetDenomTrace(s.Ctx, lsmTokenDenomTrace) + + invalidMsg := tc.validMsg + invalidMsg.LsmTokenIbcDenom = lsmTokenDenomTrace.IBCDenom() + + _, err := s.GetMsgServer().LSMLiquidStake(s.Ctx, invalidMsg) + s.Require().ErrorContains(err, "transfer channel-id from LSM token (channel-1) does not match any registered host zone") +} + +func (s *KeeperTestSuite) TestLSMLiquidStakeFailed_ValidatorNotFound() { + tc := s.SetupTestLSMLiquidStake() + + // Change the message so that the base denom is from a non-existent validator + sourcePrefix := transfertypes.GetDenomPrefix(transfertypes.PortID, ibctesting.FirstChannelID) + prefixedDenom := sourcePrefix + "cosmosvaloperXXX/42" + lsmTokenDenomTrace := transfertypes.ParseDenomTrace(prefixedDenom) + s.App.TransferKeeper.SetDenomTrace(s.Ctx, lsmTokenDenomTrace) + + invalidMsg := tc.validMsg + invalidMsg.LsmTokenIbcDenom = lsmTokenDenomTrace.IBCDenom() + + _, err := s.GetMsgServer().LSMLiquidStake(s.Ctx, invalidMsg) + s.Require().ErrorContains(err, "validator (cosmosvaloperXXX) is not registered in the Stride validator set") +} + +func (s *KeeperTestSuite) TestLSMLiquidStakeFailed_DepositAlreadyExists() { + tc := s.SetupTestLSMLiquidStake() + + // Set a deposit with the same chainID and denom in the store + s.App.RecordsKeeper.SetLSMTokenDeposit(s.Ctx, recordstypes.LSMTokenDeposit{ + ChainId: HostChainId, + Denom: LSMTokenBaseDenom, + }) + + _, err := s.GetMsgServer().LSMLiquidStake(s.Ctx, tc.validMsg) + s.Require().ErrorContains(err, "there is already a previous record with this denom being processed") +} + +func (s *KeeperTestSuite) TestLSMLiquidStakeFailed_InvalidDepositAddress() { + tc := s.SetupTestLSMLiquidStake() + + // Remove the host zones address from the store + invalidHostZone := tc.hostZone + invalidHostZone.DepositAddress = "" + s.App.StakeibcKeeper.SetHostZone(s.Ctx, invalidHostZone) + + _, err := s.GetMsgServer().LSMLiquidStake(s.Ctx, tc.validMsg) + s.Require().ErrorContains(err, "host zone address is invalid") +} + +func (s *KeeperTestSuite) TestLSMLiquidStakeFailed_InsufficientBalance() { + tc := s.SetupTestLSMLiquidStake() + + // Send out all the user's coins so that they have an insufficient balance of LSM tokens + initialBalanceCoin := sdk.NewCoins(sdk.NewCoin(tc.lsmTokenIBCDenom, tc.initialBalance)) + err := s.App.BankKeeper.SendCoins(s.Ctx, tc.liquidStakerAddress, s.TestAccs[1], initialBalanceCoin) + s.Require().NoError(err) + + _, err = s.GetMsgServer().LSMLiquidStake(s.Ctx, tc.validMsg) + s.Require().ErrorContains(err, "insufficient funds") +} + +func (s *KeeperTestSuite) TestLSMLiquidStakeFailed_ZeroStTokens() { + tc := s.SetupTestLSMLiquidStake() + + // Adjust redemption rate and liquid stake amount so that the number of stTokens would be zero + // stTokens = 1(amount) / 1.1(RR) = rounds down to 0 + hostZone := tc.hostZone + hostZone.RedemptionRate = sdkmath.LegacyNewDecWithPrec(11, 1) + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + tc.validMsg.Amount = sdkmath.NewInt(1) + + // The liquid stake should fail + _, err := s.GetMsgServer().LSMLiquidStake(s.Ctx, tc.validMsg) + s.Require().EqualError(err, "Liquid stake of 1uatom would return 0 stTokens: Liquid staked amount is too small") +} + +// ---------------------------------------------------- +// DeleteTradeRoute +// ---------------------------------------------------- + +func (s *KeeperTestSuite) TestDeleteTradeRoute() { + initialRoute := types.TradeRoute{ + RewardDenomOnRewardZone: RewardDenom, + HostDenomOnHostZone: HostDenom, + } + s.App.StakeibcKeeper.SetTradeRoute(s.Ctx, initialRoute) + + msg := types.MsgDeleteTradeRoute{ + Authority: Authority, + RewardDenom: RewardDenom, + HostDenom: HostDenom, + } + + // Confirm the route is present before attepmting to delete was deleted + _, found := s.App.StakeibcKeeper.GetTradeRoute(s.Ctx, RewardDenom, HostDenom) + s.Require().True(found, "trade route should have been found before delete message") + + // Delete the trade route + _, err := s.GetMsgServer().DeleteTradeRoute(s.Ctx, &msg) + s.Require().NoError(err, "no error expected when deleting trade route") + + // Confirm it was deleted + _, found = s.App.StakeibcKeeper.GetTradeRoute(s.Ctx, RewardDenom, HostDenom) + s.Require().False(found, "trade route should have been deleted") + + // Attempt to delete it again, it should fail since it doesn't exist + _, err = s.GetMsgServer().DeleteTradeRoute(s.Ctx, &msg) + s.Require().ErrorContains(err, "trade route not found") + + // Attempt to delete with the wrong authority - it should fail + invalidMsg := msg + invalidMsg.Authority = "not-gov-address" + + _, err = s.GetMsgServer().DeleteTradeRoute(s.Ctx, &invalidMsg) + s.Require().ErrorContains(err, "invalid authority") +} + +// ---------------------------------------------------- +// CreateTradeRoute +// ---------------------------------------------------- + +func (s *KeeperTestSuite) SetupTestCreateTradeRoute() (msg types.MsgCreateTradeRoute, expectedTradeRoute types.TradeRoute) { + rewardChainId := "reward-0" + tradeChainId := "trade-0" + + hostConnectionId := "connection-0" + rewardConnectionId := "connection-1" + tradeConnectionId := "connection-2" + + hostToRewardChannelId := "channel-100" + rewardToTradeChannelId := "channel-200" + tradeToHostChannelId := "channel-300" + + rewardDenomOnHost := "ibc/reward-on-host" + rewardDenomOnReward := RewardDenom + rewardDenomOnTrade := "ibc/reward-on-trade" + hostDenomOnTrade := "ibc/host-on-trade" + hostDenomOnHost := HostDenom + + withdrawalAddress := "withdrawal-address" + unwindAddress := "unwind-address" + + minTransferAmount := sdkmath.NewInt(100) + + // Register an exisiting ICA account for the unwind ICA to test that + // existing accounts are re-used + owner := types.FormatTradeRouteICAOwner(rewardChainId, RewardDenom, HostDenom, types.ICAAccountType_CONVERTER_UNWIND) + s.MockICAChannel(rewardConnectionId, "channel-0", owner, unwindAddress) + + // Mock out connections for the reward an trade chain so that an ICA registration can be submitted + s.MockClientAndConnection(rewardChainId, "07-tendermint-0", rewardConnectionId) + s.MockClientAndConnection(tradeChainId, "07-tendermint-1", tradeConnectionId) + + // Create a host zone with an exisiting withdrawal address + hostZone := types.HostZone{ + ChainId: HostChainId, + ConnectionId: hostConnectionId, + WithdrawalIcaAddress: withdrawalAddress, + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + // Define a valid message given the parameters above + msg = types.MsgCreateTradeRoute{ + Authority: Authority, + HostChainId: HostChainId, + + StrideToRewardConnectionId: rewardConnectionId, + StrideToTradeConnectionId: tradeConnectionId, + + HostToRewardTransferChannelId: hostToRewardChannelId, + RewardToTradeTransferChannelId: rewardToTradeChannelId, + TradeToHostTransferChannelId: tradeToHostChannelId, + + RewardDenomOnHost: rewardDenomOnHost, + RewardDenomOnReward: rewardDenomOnReward, + RewardDenomOnTrade: rewardDenomOnTrade, + HostDenomOnTrade: hostDenomOnTrade, + HostDenomOnHost: hostDenomOnHost, + + MinTransferAmount: minTransferAmount, + } + + // Build out the expected trade route given the above + expectedTradeRoute = types.TradeRoute{ + RewardDenomOnHostZone: rewardDenomOnHost, + RewardDenomOnRewardZone: rewardDenomOnReward, + RewardDenomOnTradeZone: rewardDenomOnTrade, + HostDenomOnTradeZone: hostDenomOnTrade, + HostDenomOnHostZone: hostDenomOnHost, + + HostAccount: types.ICAAccount{ + ChainId: HostChainId, + Type: types.ICAAccountType_WITHDRAWAL, + ConnectionId: hostConnectionId, + Address: withdrawalAddress, + }, + RewardAccount: types.ICAAccount{ + ChainId: rewardChainId, + Type: types.ICAAccountType_CONVERTER_UNWIND, + ConnectionId: rewardConnectionId, + Address: unwindAddress, + }, + TradeAccount: types.ICAAccount{ + ChainId: tradeChainId, + Type: types.ICAAccountType_CONVERTER_TRADE, + ConnectionId: tradeConnectionId, + }, + + HostToRewardChannelId: hostToRewardChannelId, + RewardToTradeChannelId: rewardToTradeChannelId, + TradeToHostChannelId: tradeToHostChannelId, + + MinTransferAmount: minTransferAmount, + } + + return msg, expectedTradeRoute +} + +// Helper function to create a trade route and check the created route matched expectations +func (s *KeeperTestSuite) submitCreateTradeRouteAndValidate(msg types.MsgCreateTradeRoute, expectedRoute types.TradeRoute) { + _, err := s.GetMsgServer().CreateTradeRoute(s.Ctx, &msg) + s.Require().NoError(err, "no error expected when creating trade route") + + actualRoute, found := s.App.StakeibcKeeper.GetTradeRoute(s.Ctx, msg.RewardDenomOnReward, msg.HostDenomOnHost) + s.Require().True(found, "trade route should have been created") + + s.Require().Equal(expectedRoute.RewardDenomOnHostZone, actualRoute.RewardDenomOnHostZone, "trade route reward on host denom") + s.Require().Equal(expectedRoute.RewardDenomOnRewardZone, actualRoute.RewardDenomOnRewardZone, "trade route reward on reward denom") + s.Require().Equal(expectedRoute.RewardDenomOnTradeZone, actualRoute.RewardDenomOnTradeZone, "trade route reward on trade denom") + s.Require().Equal(expectedRoute.HostDenomOnTradeZone, actualRoute.HostDenomOnTradeZone, "trade route host on trade denom") + s.Require().Equal(expectedRoute.HostDenomOnHostZone, actualRoute.HostDenomOnHostZone, "trade route host on host denom") + + s.Require().Equal(expectedRoute.HostAccount, actualRoute.HostAccount, "trade route host account") + s.Require().Equal(expectedRoute.RewardAccount, actualRoute.RewardAccount, "trade route reward account") + s.Require().Equal(expectedRoute.TradeAccount, actualRoute.TradeAccount, "trade route trade account") + + s.Require().Equal(expectedRoute.HostToRewardChannelId, actualRoute.HostToRewardChannelId, "trade route host to reward") + s.Require().Equal(expectedRoute.RewardToTradeChannelId, actualRoute.RewardToTradeChannelId, "trade route reward to trade") + s.Require().Equal(expectedRoute.TradeToHostChannelId, actualRoute.TradeToHostChannelId, "trade route trade to host") + + s.Require().Equal(expectedRoute.MinTransferAmount, actualRoute.MinTransferAmount, "trade route min transfer amount") +} + +// Tests a successful trade route creation +func (s *KeeperTestSuite) TestCreateTradeRoute_Success() { + msg, expectedRoute := s.SetupTestCreateTradeRoute() + s.submitCreateTradeRouteAndValidate(msg, expectedRoute) +} + +// Tests trying to create a route from an invalid authority +func (s *KeeperTestSuite) TestCreateTradeRoute_Failure_Authority() { + msg, _ := s.SetupTestCreateTradeRoute() + + msg.Authority = "not-gov-address" + + _, err := s.GetMsgServer().CreateTradeRoute(s.Ctx, &msg) + s.Require().ErrorContains(err, "invalid authority") +} + +// Tests creating a duplicate trade route +func (s *KeeperTestSuite) TestCreateTradeRoute_Failure_DuplicateTradeRoute() { + msg, _ := s.SetupTestCreateTradeRoute() + + // Store down a trade route so the tx hits a duplicate trade route error + s.App.StakeibcKeeper.SetTradeRoute(s.Ctx, types.TradeRoute{ + RewardDenomOnRewardZone: RewardDenom, + HostDenomOnHostZone: HostDenom, + }) + + _, err := s.GetMsgServer().CreateTradeRoute(s.Ctx, &msg) + s.Require().ErrorContains(err, "Trade route already exists") +} + +// Tests creating a trade route when the host zone or withdrawal address does not exist +func (s *KeeperTestSuite) TestCreateTradeRoute_Failure_HostZoneNotRegistered() { + msg, _ := s.SetupTestCreateTradeRoute() + + // Remove the host zone withdrawal address and confirm it fails + invalidHostZone := s.MustGetHostZone(HostChainId) + invalidHostZone.WithdrawalIcaAddress = "" + s.App.StakeibcKeeper.SetHostZone(s.Ctx, invalidHostZone) + + _, err := s.GetMsgServer().CreateTradeRoute(s.Ctx, &msg) + s.Require().ErrorContains(err, "withdrawal account not initialized on host zone") + + // Remove the host zone completely and check that that also fails + s.App.StakeibcKeeper.RemoveHostZone(s.Ctx, HostChainId) + + _, err = s.GetMsgServer().CreateTradeRoute(s.Ctx, &msg) + s.Require().ErrorContains(err, "host zone not found") +} + +// Tests creating a trade route where the ICA channels cannot be created +// because the ICA connections do not exist +func (s *KeeperTestSuite) TestCreateTradeRoute_Failure_ConnectionNotFound() { + // Test with non-existent reward connection + msg, _ := s.SetupTestCreateTradeRoute() + msg.StrideToRewardConnectionId = "connection-X" + + // Remove the host zone completely and check that that also fails + _, err := s.GetMsgServer().CreateTradeRoute(s.Ctx, &msg) + s.Require().ErrorContains(err, "unable to register the unwind ICA account: connection connection-X not found") + + // Setup again, but this time use a non-existent trade connection + msg, _ = s.SetupTestCreateTradeRoute() + msg.StrideToTradeConnectionId = "connection-Y" + + _, err = s.GetMsgServer().CreateTradeRoute(s.Ctx, &msg) + s.Require().ErrorContains(err, "unable to register the trade ICA account: connection connection-Y not found") +} + +// Tests creating a trade route where the ICA registration step fails +func (s *KeeperTestSuite) TestCreateTradeRoute_Failure_UnableToRegisterICA() { + msg, expectedRoute := s.SetupTestCreateTradeRoute() + + // Disable ICA middleware for the trade channel so the ICA fails + tradeAccount := expectedRoute.TradeAccount + tradeOwner := types.FormatTradeRouteICAOwner(tradeAccount.ChainId, RewardDenom, HostDenom, types.ICAAccountType_CONVERTER_TRADE) + tradePortId, _ := icatypes.NewControllerPortID(tradeOwner) + s.App.ICAControllerKeeper.SetMiddlewareDisabled(s.Ctx, tradePortId, tradeAccount.ConnectionId) + + _, err := s.GetMsgServer().CreateTradeRoute(s.Ctx, &msg) + s.Require().ErrorContains(err, "unable to register the trade ICA account") +} + +// ---------------------------------------------------- +// UpdateTradeRoute +// ---------------------------------------------------- + +// Helper function to update a trade route and check the updated route matched expectations +func (s *KeeperTestSuite) submitUpdateTradeRouteAndValidate(msg types.MsgUpdateTradeRoute, expectedRoute types.TradeRoute) { + _, err := s.GetMsgServer().UpdateTradeRoute(s.Ctx, &msg) + s.Require().NoError(err, "no error expected when updating trade route") + + actualRoute, found := s.App.StakeibcKeeper.GetTradeRoute(s.Ctx, RewardDenom, HostDenom) + s.Require().True(found, "trade route should have been updated") + s.Require().Equal(expectedRoute.RewardDenomOnRewardZone, actualRoute.RewardDenomOnRewardZone, "trade route reward denom") + s.Require().Equal(expectedRoute.HostDenomOnHostZone, actualRoute.HostDenomOnHostZone, "trade route host denom") + s.Require().Equal(expectedRoute.MinTransferAmount, actualRoute.MinTransferAmount, "trade route min transfer amount") +} + +func (s *KeeperTestSuite) TestUpdateTradeRoute() { + minTransferAmount := sdkmath.NewInt(100) + + // Create a trade route with no parameters + initialRoute := types.TradeRoute{ + RewardDenomOnRewardZone: RewardDenom, + HostDenomOnHostZone: HostDenom, + } + s.App.StakeibcKeeper.SetTradeRoute(s.Ctx, initialRoute) + + // Define a valid message given the parameters above + msg := types.MsgUpdateTradeRoute{ + Authority: Authority, + RewardDenom: RewardDenom, + HostDenom: HostDenom, + MinTransferAmount: minTransferAmount, + } + + // Build out the expected trade route given the above + expectedRoute := initialRoute + expectedRoute.MinTransferAmount = minTransferAmount + + // Update the route and confirm the changes persisted + s.submitUpdateTradeRouteAndValidate(msg, expectedRoute) + + // Test that an error is thrown if the correct authority is not specified + invalidMsg := msg + invalidMsg.Authority = "not-gov-address" + + _, err := s.GetMsgServer().UpdateTradeRoute(s.Ctx, &invalidMsg) + s.Require().ErrorContains(err, "invalid authority") + + // Test that an error is thrown if the route doesn't exist + invalidMsg = msg + invalidMsg.RewardDenom = "invalid-reward-denom" + + _, err = s.GetMsgServer().UpdateTradeRoute(s.Ctx, &invalidMsg) + s.Require().ErrorContains(err, "trade route not found") +} + +// ---------------------------------------------------- +// RestoreInterchainAccount +// ---------------------------------------------------- + +type DepositRecordStatusUpdate struct { + chainId string + initialStatus recordtypes.DepositRecord_Status + revertedStatus recordtypes.DepositRecord_Status + initialDelegationTxsInProgress uint64 + revertedDelegationTxsInProgress uint64 +} + +type HostZoneUnbondingStatusUpdate struct { + initialStatus recordtypes.HostZoneUnbonding_Status + revertedStatus recordtypes.HostZoneUnbonding_Status +} + +type LSMTokenDepositStatusUpdate struct { + chainId string + denom string + initialStatus recordtypes.LSMTokenDeposit_Status + revertedStatus recordtypes.LSMTokenDeposit_Status +} + +type RestoreInterchainAccountTestCase struct { + validMsg types.MsgRestoreInterchainAccount + depositRecordStatusUpdates []DepositRecordStatusUpdate + unbondingRecordStatusUpdate []HostZoneUnbondingStatusUpdate + lsmTokenDepositStatusUpdate []LSMTokenDepositStatusUpdate + delegationChannelID string + delegationPortID string +} + +func (s *KeeperTestSuite) SetupRestoreInterchainAccount(createDelegationICAChannel bool) RestoreInterchainAccountTestCase { + s.CreateTransferChannel(HostChainId) + + // We have to setup the ICA channel before the LSM Token is stored, + // otherwise when the EndBlocker runs in the channel setup, the LSM Token + // statuses will get updated + var channelID, portID string + if createDelegationICAChannel { + owner := "GAIA.DELEGATION" + channelID, portID = s.CreateICAChannel(owner) + } + + hostZone := types.HostZone{ + ChainId: HostChainId, + ConnectionId: ibctesting.FirstConnectionID, + RedemptionRate: sdkmath.LegacyOneDec(), // if not set, the beginblocker invariant panics + Validators: []*types.Validator{ + {Address: "valA", DelegationChangesInProgress: 1}, + {Address: "valB", DelegationChangesInProgress: 2}, + {Address: "valC", DelegationChangesInProgress: 3}, + }, + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + // Store deposit records with some in state pending + depositRecords := []DepositRecordStatusUpdate{ + { + // Status doesn't change + chainId: HostChainId, + initialStatus: recordtypes.DepositRecord_TRANSFER_IN_PROGRESS, + revertedStatus: recordtypes.DepositRecord_TRANSFER_IN_PROGRESS, + initialDelegationTxsInProgress: 2, + revertedDelegationTxsInProgress: 2, + }, + { + // Status gets reverted from IN_PROGRESS to QUEUE + chainId: HostChainId, + initialStatus: recordtypes.DepositRecord_DELEGATION_IN_PROGRESS, + revertedStatus: recordtypes.DepositRecord_DELEGATION_QUEUE, + initialDelegationTxsInProgress: 2, + revertedDelegationTxsInProgress: 0, + }, + { + // Status doesn't get reveted because it's a different host zone + chainId: "different_host_zone", + initialStatus: recordtypes.DepositRecord_DELEGATION_IN_PROGRESS, + revertedStatus: recordtypes.DepositRecord_DELEGATION_IN_PROGRESS, + initialDelegationTxsInProgress: 2, + revertedDelegationTxsInProgress: 2, + }, + } + for i, depositRecord := range depositRecords { + s.App.RecordsKeeper.SetDepositRecord(s.Ctx, recordtypes.DepositRecord{ + Id: uint64(i), + HostZoneId: depositRecord.chainId, + Status: depositRecord.initialStatus, + DelegationTxsInProgress: depositRecord.initialDelegationTxsInProgress, + }) + } + + // Store epoch unbonding records with some in state pending + hostZoneUnbondingRecords := []HostZoneUnbondingStatusUpdate{ + { + // Status doesn't change + initialStatus: recordtypes.HostZoneUnbonding_UNBONDING_QUEUE, + revertedStatus: recordtypes.HostZoneUnbonding_UNBONDING_QUEUE, + }, + { + // Status gets reverted from IN_PROGRESS to QUEUE + initialStatus: recordtypes.HostZoneUnbonding_UNBONDING_IN_PROGRESS, + revertedStatus: recordtypes.HostZoneUnbonding_UNBONDING_RETRY_QUEUE, + }, + { + // Status doesn't change + initialStatus: recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE, + revertedStatus: recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE, + }, + { + // Status gets reverted from IN_PROGRESS to QUEUE + initialStatus: recordtypes.HostZoneUnbonding_EXIT_TRANSFER_IN_PROGRESS, + revertedStatus: recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE, + }, + } + for i, hostZoneUnbonding := range hostZoneUnbondingRecords { + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, recordtypes.EpochUnbondingRecord{ + EpochNumber: uint64(i), + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{ + // The first unbonding record will get reverted, the other one will not + { + HostZoneId: HostChainId, + Status: hostZoneUnbonding.initialStatus, + UndelegationTxsInProgress: 4, + }, + { + HostZoneId: "different_host_zone", + Status: hostZoneUnbonding.initialStatus, + UndelegationTxsInProgress: 5, + }, + }, + }) + } + + // Store LSM Token Deposits with some state pending + lsmTokenDeposits := []LSMTokenDepositStatusUpdate{ + { + // Status doesn't change + chainId: HostChainId, + denom: "denom-1", + initialStatus: recordtypes.LSMTokenDeposit_TRANSFER_IN_PROGRESS, + revertedStatus: recordtypes.LSMTokenDeposit_TRANSFER_IN_PROGRESS, + }, + { + // Status gets reverted from IN_PROGRESS to QUEUE + chainId: HostChainId, + denom: "denom-2", + initialStatus: recordtypes.LSMTokenDeposit_DETOKENIZATION_IN_PROGRESS, + revertedStatus: recordtypes.LSMTokenDeposit_DETOKENIZATION_QUEUE, + }, + { + // Status doesn't change + chainId: HostChainId, + denom: "denom-3", + initialStatus: recordtypes.LSMTokenDeposit_DETOKENIZATION_QUEUE, + revertedStatus: recordtypes.LSMTokenDeposit_DETOKENIZATION_QUEUE, + }, + { + // Status doesn't change (different host zone) + chainId: "different_host_zone", + denom: "denom-4", + initialStatus: recordtypes.LSMTokenDeposit_DETOKENIZATION_IN_PROGRESS, + revertedStatus: recordtypes.LSMTokenDeposit_DETOKENIZATION_IN_PROGRESS, + }, + } + for _, lsmTokenDeposit := range lsmTokenDeposits { + s.App.RecordsKeeper.SetLSMTokenDeposit(s.Ctx, recordtypes.LSMTokenDeposit{ + ChainId: lsmTokenDeposit.chainId, + Status: lsmTokenDeposit.initialStatus, + Denom: lsmTokenDeposit.denom, + }) + } + + defaultMsg := types.MsgRestoreInterchainAccount{ + Creator: "creatoraddress", + ChainId: HostChainId, + ConnectionId: ibctesting.FirstConnectionID, + AccountOwner: types.FormatHostZoneICAOwner(HostChainId, types.ICAAccountType_DELEGATION), + } + + return RestoreInterchainAccountTestCase{ + validMsg: defaultMsg, + depositRecordStatusUpdates: depositRecords, + unbondingRecordStatusUpdate: hostZoneUnbondingRecords, + lsmTokenDepositStatusUpdate: lsmTokenDeposits, + delegationChannelID: channelID, + delegationPortID: portID, + } +} + +// Helper function to close an ICA channel +func (s *KeeperTestSuite) closeICAChannel(portId, channelID string) { + channel, found := s.App.IBCKeeper.ChannelKeeper.GetChannel(s.Ctx, portId, channelID) + s.Require().True(found, "unable to close channel because channel was not found") + channel.State = channeltypes.CLOSED + s.App.IBCKeeper.ChannelKeeper.SetChannel(s.Ctx, portId, channelID, channel) +} + +// Helper function to call RestoreChannel and check that a new channel was created and opened +func (s *KeeperTestSuite) restoreChannelAndVerifySuccess(msg types.MsgRestoreInterchainAccount, portID string, channelID string) { + // Restore the channel + _, err := s.GetMsgServer().RestoreInterchainAccount(s.Ctx, &msg) + s.Require().NoError(err, "registered ica account successfully") + + // Confirm channel was created + channels := s.App.IBCKeeper.ChannelKeeper.GetAllChannels(s.Ctx) + s.Require().Len(channels, 3, "there should be 3 channels after restoring") + + // Confirm the new channel is in state INIT + newChannelActive := false + for _, channel := range channels { + // The new channel should have the same port, a new channel ID and be in state INIT + if channel.PortId == portID && channel.ChannelId != channelID && channel.State == channeltypes.INIT { + newChannelActive = true + } + } + s.Require().True(newChannelActive, "a new channel should have been created") +} + +// Helper function to check that each DepositRecord's status was either left alone or reverted to it's prior status +func (s *KeeperTestSuite) verifyDepositRecordsStatus(expectedDepositRecords []DepositRecordStatusUpdate, revert bool) { + for i, expectedDepositRecord := range expectedDepositRecords { + actualDepositRecord, found := s.App.RecordsKeeper.GetDepositRecord(s.Ctx, uint64(i)) + s.Require().True(found, "deposit record found") + + // Only revert records if the revert option is passed and the host zone matches + expectedStatus := expectedDepositRecord.initialStatus + if revert && actualDepositRecord.HostZoneId == HostChainId { + expectedStatus = expectedDepositRecord.revertedStatus + } + s.Require().Equal(expectedStatus.String(), actualDepositRecord.Status.String(), "deposit record %d status", i) + } +} + +// Helper function to check that each HostZoneUnbonding's status was either left alone or reverted to it's prior status +func (s *KeeperTestSuite) verifyHostZoneUnbondingStatus(expectedUnbondingRecords []HostZoneUnbondingStatusUpdate, revert bool) { + for i, expectedUnbonding := range expectedUnbondingRecords { + epochUnbondingRecord, found := s.App.RecordsKeeper.GetEpochUnbondingRecord(s.Ctx, uint64(i)) + s.Require().True(found, "epoch unbonding record found") + + for _, actualUnbonding := range epochUnbondingRecord.HostZoneUnbondings { + // Only revert records if the revert option is passed and the host zone matches + expectedStatus := expectedUnbonding.initialStatus + if revert && actualUnbonding.HostZoneId == HostChainId { + expectedStatus = expectedUnbonding.revertedStatus + } + s.Require().Equal(expectedStatus.String(), actualUnbonding.Status.String(), "host zone unbonding for epoch %d record status", i) + } + } +} + +// Helper function to check that each LSMTokenDepoit's status was either left alone or reverted to it's prior status +func (s *KeeperTestSuite) verifyLSMDepositStatus(expectedLSMDeposits []LSMTokenDepositStatusUpdate, revert bool) { + for i, expectedLSMDeposit := range expectedLSMDeposits { + actualLSMDeposit, found := s.App.RecordsKeeper.GetLSMTokenDeposit(s.Ctx, expectedLSMDeposit.chainId, expectedLSMDeposit.denom) + s.Require().True(found, "lsm deposit found") + + // Only revert record if the revert option is passed and the host zone matches + expectedStatus := expectedLSMDeposit.initialStatus + if revert && actualLSMDeposit.ChainId == HostChainId { + expectedStatus = expectedLSMDeposit.revertedStatus + } + s.Require().Equal(expectedStatus.String(), actualLSMDeposit.Status.String(), "lsm deposit %d", i) + } +} + +// Helper function to check that the delegation changes in progress field was reset to 0 for each validator +// and the delegation txs in progress was set to 0 on each deposit record +func (s *KeeperTestSuite) verifyDelegationChangeInProgressReset(expectedDepositRecords []DepositRecordStatusUpdate) { + hostZone := s.MustGetHostZone(HostChainId) + s.Require().Len(hostZone.Validators, 3, "there should be 3 validators on this host zone") + + for _, validator := range hostZone.Validators { + s.Require().Zero(validator.DelegationChangesInProgress, + "delegation change in progress should have been reset for validator %s", validator.Address) + } + + for i, expectedRecord := range expectedDepositRecords { + actualRecord, found := s.App.RecordsKeeper.GetDepositRecord(s.Ctx, uint64(i)) + s.Require().True(found, "deposit record %d should have been found", i) + s.Require().Equal(expectedRecord.revertedDelegationTxsInProgress, actualRecord.DelegationTxsInProgress, + "delegation txs in progress fro record %d", i) + } +} + +// Helper function to check that the undelegation changes in progress field was reset to 0 +// for each host zone unbonding record +func (s *KeeperTestSuite) verifyUndelegationChangeInProgressReset() { + for _, epochUnbondingRecord := range s.App.RecordsKeeper.GetAllEpochUnbondingRecord(s.Ctx) { + for _, hostZoneUnbondingRecord := range epochUnbondingRecord.HostZoneUnbondings { + if hostZoneUnbondingRecord.HostZoneId == HostChainId { + s.Require().Zero(hostZoneUnbondingRecord.UndelegationTxsInProgress, + "undelegation changes should have been reset for epoch %d", epochUnbondingRecord.EpochNumber) + } else { + s.Require().NotZero(hostZoneUnbondingRecord.UndelegationTxsInProgress, + "undelegation changes should not have been reset for epoch %d", epochUnbondingRecord.EpochNumber) + } + } + } +} + +func (s *KeeperTestSuite) TestRestoreInterchainAccount_Success() { + tc := s.SetupRestoreInterchainAccount(true) + + // Confirm there are two channels originally + channels := s.App.IBCKeeper.ChannelKeeper.GetAllChannels(s.Ctx) + s.Require().Len(channels, 2, "there should be 2 channels initially (transfer + delegate)") + + // Close the delegation channel + s.closeICAChannel(tc.delegationPortID, tc.delegationChannelID) + + // Confirm the new channel was created + s.restoreChannelAndVerifySuccess(tc.validMsg, tc.delegationPortID, tc.delegationChannelID) + + // Verify the record status' were reverted + s.verifyDepositRecordsStatus(tc.depositRecordStatusUpdates, true) + s.verifyHostZoneUnbondingStatus(tc.unbondingRecordStatusUpdate, true) + s.verifyLSMDepositStatus(tc.lsmTokenDepositStatusUpdate, true) + s.verifyDelegationChangeInProgressReset(tc.depositRecordStatusUpdates) + s.verifyUndelegationChangeInProgressReset() +} + +func (s *KeeperTestSuite) TestRestoreInterchainAccount_InvalidConnectionId() { + tc := s.SetupRestoreInterchainAccount(false) + + // Update the connectionId on the host zone so that it doesn't exist + invalidMsg := tc.validMsg + invalidMsg.ConnectionId = "fake_connection" + + _, err := s.GetMsgServer().RestoreInterchainAccount(s.Ctx, &invalidMsg) + s.Require().ErrorContains(err, "connection fake_connection not found") +} + +func (s *KeeperTestSuite) TestRestoreInterchainAccount_CannotRestoreNonExistentAcct() { + tc := s.SetupRestoreInterchainAccount(false) + + // Attempt to restore an account that does not exist + msg := tc.validMsg + msg.AccountOwner = types.FormatHostZoneICAOwner(HostChainId, types.ICAAccountType_WITHDRAWAL) + + _, err := s.GetMsgServer().RestoreInterchainAccount(s.Ctx, &msg) + s.Require().ErrorContains(err, "ICA controller account address not found: GAIA.WITHDRAWAL") +} + +func (s *KeeperTestSuite) TestRestoreInterchainAccount_HostZoneNotFound() { + tc := s.SetupRestoreInterchainAccount(true) + s.closeICAChannel(tc.delegationPortID, tc.delegationChannelID) + + // Delete the host zone so the lookup fails + // (this check only runs for the delegation channel) + s.App.StakeibcKeeper.RemoveHostZone(s.Ctx, HostChainId) + + _, err := s.GetMsgServer().RestoreInterchainAccount(s.Ctx, &tc.validMsg) + s.Require().ErrorContains(err, "delegation ICA supplied, but no associated host zone") +} + +func (s *KeeperTestSuite) TestRestoreInterchainAccount_RevertDepositRecords_Failure() { + tc := s.SetupRestoreInterchainAccount(true) + + _, err := s.GetMsgServer().RestoreInterchainAccount(s.Ctx, &tc.validMsg) + s.Require().ErrorContains(err, "existing active channel channel-1 for portID icacontroller-GAIA.DELEGATION") + + // Verify the record status' were NOT reverted + s.verifyDepositRecordsStatus(tc.depositRecordStatusUpdates, false) + s.verifyHostZoneUnbondingStatus(tc.unbondingRecordStatusUpdate, false) + s.verifyLSMDepositStatus(tc.lsmTokenDepositStatusUpdate, false) +} + +func (s *KeeperTestSuite) TestRestoreInterchainAccount_NoRecordChange_Success() { + // Here, we're closing and restoring the withdrawal channel so records should not be reverted + tc := s.SetupRestoreInterchainAccount(false) + owner := "GAIA.WITHDRAWAL" + channelID, portID := s.CreateICAChannel(owner) + + // Confirm there are two channels originally + channels := s.App.IBCKeeper.ChannelKeeper.GetAllChannels(s.Ctx) + s.Require().Len(channels, 2, "there should be 2 channels initially (transfer + withdrawal)") + + // Close the withdrawal channel + s.closeICAChannel(portID, channelID) + + // Restore the channel + msg := tc.validMsg + msg.AccountOwner = types.FormatHostZoneICAOwner(HostChainId, types.ICAAccountType_WITHDRAWAL) + s.restoreChannelAndVerifySuccess(msg, portID, channelID) + + // Verify the record status' were NOT reverted + s.verifyDepositRecordsStatus(tc.depositRecordStatusUpdates, false) + s.verifyHostZoneUnbondingStatus(tc.unbondingRecordStatusUpdate, false) + s.verifyLSMDepositStatus(tc.lsmTokenDepositStatusUpdate, false) +} + +// ---------------------------------------------------- +// UpdateInnerRedemptionRateBounds +// ---------------------------------------------------- + +type UpdateInnerRedemptionRateBoundsTestCase struct { + validMsg stakeibctypes.MsgUpdateInnerRedemptionRateBounds + zone stakeibctypes.HostZone +} + +func (s *KeeperTestSuite) SetupUpdateInnerRedemptionRateBounds() UpdateInnerRedemptionRateBoundsTestCase { + // Register a host zone + hostZone := stakeibctypes.HostZone{ + ChainId: HostChainId, + HostDenom: Atom, + IbcDenom: IbcAtom, + RedemptionRate: sdkmath.LegacyNewDec(1.0), + MinRedemptionRate: sdkmath.LegacyNewDec(9).Quo(sdkmath.LegacyNewDec(10)), + MaxRedemptionRate: sdkmath.LegacyNewDec(15).Quo(sdkmath.LegacyNewDec(10)), + } + + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + defaultMsg := stakeibctypes.MsgUpdateInnerRedemptionRateBounds{ + // TODO: does this need to be the admin address? + Creator: s.TestAccs[0].String(), + ChainId: HostChainId, + MinInnerRedemptionRate: sdkmath.LegacyNewDec(1), + MaxInnerRedemptionRate: sdkmath.LegacyNewDec(11).Quo(sdkmath.LegacyNewDec(10)), + } + + return UpdateInnerRedemptionRateBoundsTestCase{ + validMsg: defaultMsg, + zone: hostZone, + } +} + +// Verify that bounds can be set successfully +func (s *KeeperTestSuite) TestUpdateInnerRedemptionRateBounds_Success() { + tc := s.SetupUpdateInnerRedemptionRateBounds() + + // Set the inner bounds on the host zone + _, err := s.GetMsgServer().UpdateInnerRedemptionRateBounds(s.Ctx, &tc.validMsg) + s.Require().NoError(err, "should not throw an error") + + // Confirm the inner bounds were set + zone, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, HostChainId) + s.Require().True(found, "host zone should be in the store") + s.Require().Equal(tc.validMsg.MinInnerRedemptionRate, zone.MinInnerRedemptionRate, "min inner redemption rate should be set") + s.Require().Equal(tc.validMsg.MaxInnerRedemptionRate, zone.MaxInnerRedemptionRate, "max inner redemption rate should be set") +} + +// Setting inner bounds outside of outer bounds should throw an error +func (s *KeeperTestSuite) TestUpdateInnerRedemptionRateBounds_OutOfBounds() { + tc := s.SetupUpdateInnerRedemptionRateBounds() + + // Set the min inner bound to be less than the min outer bound + tc.validMsg.MinInnerRedemptionRate = sdkmath.LegacyNewDec(0) + + // Set the inner bounds on the host zone + _, err := s.GetMsgServer().UpdateInnerRedemptionRateBounds(s.Ctx, &tc.validMsg) + // verify it throws an error + errMsg := fmt.Sprintf("inner min safety threshold (%s) is less than outer min safety threshold (%s)", tc.validMsg.MinInnerRedemptionRate, sdkmath.LegacyNewDec(9).Quo(sdkmath.LegacyNewDec(10))) + s.Require().ErrorContains(err, errMsg) + + // Set the min inner bound to be valid, but the max inner bound to be greater than the max outer bound + tc.validMsg.MinInnerRedemptionRate = sdkmath.LegacyNewDec(1) + tc.validMsg.MaxInnerRedemptionRate = sdkmath.LegacyNewDec(3) + // Set the inner bounds on the host zone + _, err = s.GetMsgServer().UpdateInnerRedemptionRateBounds(s.Ctx, &tc.validMsg) + // verify it throws an error + errMsg = fmt.Sprintf("inner max safety threshold (%s) is greater than outer max safety threshold (%s)", tc.validMsg.MaxInnerRedemptionRate, sdkmath.LegacyNewDec(15).Quo(sdkmath.LegacyNewDec(10))) + s.Require().ErrorContains(err, errMsg) +} + +// Validate basic tests +func (s *KeeperTestSuite) TestUpdateInnerRedemptionRateBounds_InvalidMsg() { + tc := s.SetupUpdateInnerRedemptionRateBounds() + + // Set the min inner bound to be greater than than the max inner bound + invalidMsg := tc.validMsg + invalidMsg.MinInnerRedemptionRate = sdkmath.LegacyNewDec(2) + + err := invalidMsg.ValidateBasic() + + // Verify the error + errMsg := fmt.Sprintf("Inner max safety threshold (%s) is less than inner min safety threshold (%s)", invalidMsg.MaxInnerRedemptionRate, invalidMsg.MinInnerRedemptionRate) + s.Require().ErrorContains(err, errMsg) +} + +// Verify that if inner bounds end up outside of outer bounds (somehow), the outer bounds are returned +func (s *KeeperTestSuite) TestGetInnerSafetyBounds() { + tc := s.SetupUpdateInnerRedemptionRateBounds() + + // Set the inner bounds outside the outer bounds on the host zone directly + tc.zone.MinInnerRedemptionRate = sdkmath.LegacyNewDec(0) + tc.zone.MaxInnerRedemptionRate = sdkmath.LegacyNewDec(3) + // Set the host zone + s.App.StakeibcKeeper.SetHostZone(s.Ctx, tc.zone) + + // Get the inner bounds and verify the outer bounds are used + innerMinSafetyThreshold, innerMaxSafetyThreshold := s.App.StakeibcKeeper.GetInnerSafetyBounds(s.Ctx, tc.zone) + s.Require().Equal(tc.zone.MinRedemptionRate, innerMinSafetyThreshold, "min inner redemption rate should be set") + s.Require().Equal(tc.zone.MaxRedemptionRate, innerMaxSafetyThreshold, "max inner redemption rate should be set") +} + +// ---------------------------------------------------- +// ResumeHostZone +// ---------------------------------------------------- + +type ResumeHostZoneTestCase struct { + validMsg stakeibctypes.MsgResumeHostZone + zone stakeibctypes.HostZone +} + +func (s *KeeperTestSuite) SetupResumeHostZone() ResumeHostZoneTestCase { + // Register a host zone + hostZone := stakeibctypes.HostZone{ + ChainId: HostChainId, + HostDenom: Atom, + IbcDenom: IbcAtom, + RedemptionRate: sdkmath.LegacyNewDec(1.0), + MinRedemptionRate: sdkmath.LegacyNewDec(9).Quo(sdkmath.LegacyNewDec(10)), + MaxRedemptionRate: sdkmath.LegacyNewDec(15).Quo(sdkmath.LegacyNewDec(10)), + Halted: true, + } + + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + defaultMsg := stakeibctypes.MsgResumeHostZone{ + Creator: s.TestAccs[0].String(), + ChainId: HostChainId, + } + + return ResumeHostZoneTestCase{ + validMsg: defaultMsg, + zone: hostZone, + } +} + +// Verify that bounds can be set successfully +func (s *KeeperTestSuite) TestResumeHostZone_Success() { + tc := s.SetupResumeHostZone() + + // Set the inner bounds on the host zone + _, err := s.GetMsgServer().ResumeHostZone(s.Ctx, &tc.validMsg) + s.Require().NoError(err, "should not throw an error") + + // Confirm the inner bounds were set + zone, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, HostChainId) + s.Require().True(found, "host zone should be in the store") + + s.Require().False(zone.Halted, "host zone should not be halted") +} + +// verify that non-admins can't call the tx +func (s *KeeperTestSuite) TestResumeHostZone_NonAdmin() { + tc := s.SetupResumeHostZone() + + invalidMsg := tc.validMsg + invalidMsg.Creator = s.TestAccs[1].String() + + err := invalidMsg.ValidateBasic() + s.Require().Error(err, "nonadmins shouldn't be able to call this tx") +} + +// verify that the function can't be called on missing zones +func (s *KeeperTestSuite) TestResumeHostZone_MissingZones() { + tc := s.SetupResumeHostZone() + + invalidMsg := tc.validMsg + invalidChainId := "invalid-chain" + invalidMsg.ChainId = invalidChainId + + // Set the inner bounds on the host zone + _, err := s.GetMsgServer().ResumeHostZone(s.Ctx, &invalidMsg) + s.Require().ErrorContains(err, "host zone invalid-chain not found") +} + +// verify that the function can't be called on unhalted zones +func (s *KeeperTestSuite) TestResumeHostZone_UnhaltedZones() { + tc := s.SetupResumeHostZone() + + zone, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, HostChainId) + s.Require().True(found, "host zone should be in the store") + s.Require().True(zone.Halted, "host zone should be halted") + zone.Halted = false + s.App.StakeibcKeeper.SetHostZone(s.Ctx, zone) + + // Set the inner bounds on the host zone + _, err := s.GetMsgServer().ResumeHostZone(s.Ctx, &tc.validMsg) + s.Require().Error(err, "host zone GAIA is not halted") +} + +// ---------------------------------------------------- +// SetCommunityPoolRebate +// ---------------------------------------------------- + +func (s *KeeperTestSuite) TestSetCommunityPoolRebate() { + stTokenSupply := sdkmath.NewInt(2000) + rebateInfo := types.CommunityPoolRebate{ + RebateRate: sdkmath.LegacyMustNewDecFromStr("0.5"), + LiquidStakedStTokenAmount: sdkmath.NewInt(1000), + } + + // Mint stTokens so the supply is populated + s.FundAccount(s.TestAccs[0], sdk.NewCoin(utils.StAssetDenomFromHostZoneDenom(HostDenom), stTokenSupply)) + + // Set host zone with no rebate + hostZone := types.HostZone{ + ChainId: HostChainId, + HostDenom: HostDenom, + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + // Submit a message to create the rebate + registerMsg := types.MsgSetCommunityPoolRebate{ + ChainId: HostChainId, + RebateRate: rebateInfo.RebateRate, + LiquidStakedStTokenAmount: rebateInfo.LiquidStakedStTokenAmount, + } + _, err := s.GetMsgServer().SetCommunityPoolRebate(s.Ctx, ®isterMsg) + s.Require().NoError(err, "no error expected when registering rebate") + + // Confirm the rebate was updated + actualHostZone := s.MustGetHostZone(HostChainId) + s.Require().Equal(rebateInfo, *actualHostZone.CommunityPoolRebate, "rebate was updated on host zone") + + // Attempt to update the rebate with a large liquid stake amount, it should fail + invalidMsg := types.MsgSetCommunityPoolRebate{ + ChainId: HostChainId, + LiquidStakedStTokenAmount: sdkmath.NewInt(1_000_000), + } + _, err = s.GetMsgServer().SetCommunityPoolRebate(s.Ctx, &invalidMsg) + s.Require().ErrorContains(err, "liquid staked stToken amount (1000000) is greater than current supply (2000)") + + // Submit a 0 LS amount which should delete the rebate + removeMsg := types.MsgSetCommunityPoolRebate{ + ChainId: HostChainId, + LiquidStakedStTokenAmount: sdkmath.ZeroInt(), + } + _, err = s.GetMsgServer().SetCommunityPoolRebate(s.Ctx, &removeMsg) + s.Require().NoError(err, "no error expected when registering 0 rebate") + + actualHostZone = s.MustGetHostZone(HostChainId) + s.Require().Nil(actualHostZone.CommunityPoolRebate, "rebate was removed from host zone") + + // Confirm a message with an invalid chain ID would cause an error + _, err = s.GetMsgServer().SetCommunityPoolRebate(s.Ctx, &types.MsgSetCommunityPoolRebate{ChainId: "invalid"}) + s.Require().ErrorContains(err, "host zone not found") +} + +// ---------------------------------------------------- +// ToggleTradeController +// ---------------------------------------------------- + +func (s *KeeperTestSuite) TestToggleTradeController() { + tradeICAOwner := types.FormatTradeRouteICAOwner(HostChainId, RewardDenom, HostDenom, types.ICAAccountType_CONVERTER_TRADE) + channelId, portId := s.CreateICAChannel(tradeICAOwner) + + tradeControllerAddress := "trade-controller" + + // Create a trade route + tradeRoute := types.TradeRoute{ + RewardDenomOnRewardZone: RewardDenom, + HostDenomOnHostZone: HostDenom, + TradeAccount: types.ICAAccount{ + ChainId: HostChainId, + ConnectionId: ibctesting.FirstConnectionID, + }, + } + s.App.StakeibcKeeper.SetTradeRoute(s.Ctx, tradeRoute) + + // Test granting permissions + grantMsg := types.MsgToggleTradeController{ + ChainId: HostChainId, + PermissionChange: types.AuthzPermissionChange_GRANT, + Address: tradeControllerAddress, + } + s.CheckICATxSubmitted(portId, channelId, func() error { + _, err := s.GetMsgServer().ToggleTradeController(s.Ctx, &grantMsg) + return err + }) + + // Test revoking permissions + revokeMsg := types.MsgToggleTradeController{ + ChainId: HostChainId, + PermissionChange: types.AuthzPermissionChange_REVOKE, + Address: tradeControllerAddress, + } + s.CheckICATxSubmitted(portId, channelId, func() error { + _, err := s.GetMsgServer().ToggleTradeController(s.Ctx, &revokeMsg) + return err + }) + + // Test with an invalid chain ID - it should fail because the trade route cant be found + invalidMsg := &types.MsgToggleTradeController{ChainId: "invalid-chain"} + _, err := s.GetMsgServer().ToggleTradeController(s.Ctx, invalidMsg) + s.Require().ErrorContains(err, "trade route not found") + + // Test failing to build an authz message by passing an invalid permission change + invalidMsg = &types.MsgToggleTradeController{ChainId: HostChainId, PermissionChange: 100} + _, err = s.GetMsgServer().ToggleTradeController(s.Ctx, invalidMsg) + s.Require().ErrorContains(err, "invalid permission change") + + // Remove the connection ID from the trade route so the ICA submission fails + tradeRoute.TradeAccount.ConnectionId = "" + s.App.StakeibcKeeper.SetTradeRoute(s.Ctx, tradeRoute) + _, err = s.GetMsgServer().ToggleTradeController(s.Ctx, &grantMsg) + s.Require().ErrorContains(err, "unable to send ICA tx") +} diff --git a/x/stakeibc/keeper/params.go b/x/stakeibc/keeper/params.go new file mode 100644 index 00000000000..5cd289f0a2e --- /dev/null +++ b/x/stakeibc/keeper/params.go @@ -0,0 +1,24 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// GetParams get all parameters as types.Params +func (k Keeper) GetParams(ctx sdk.Context) (params types.Params) { + k.paramstore.GetParamSet(ctx, ¶ms) + return params +} + +// SetParams set the params +func (k Keeper) SetParams(ctx sdk.Context, params types.Params) { + k.paramstore.SetParamSet(ctx, ¶ms) +} + +func (k *Keeper) GetParam(ctx sdk.Context, key []byte) uint64 { + var out uint64 + k.paramstore.Get(ctx, key, &out) + return out +} diff --git a/x/stakeibc/keeper/params_test.go b/x/stakeibc/keeper/params_test.go new file mode 100644 index 00000000000..243a26cae9a --- /dev/null +++ b/x/stakeibc/keeper/params_test.go @@ -0,0 +1,13 @@ +package keeper_test + +import ( + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func (s *KeeperTestSuite) TestGetParams() { + params := types.DefaultParams() + + s.App.StakeibcKeeper.SetParams(s.Ctx, params) + + s.Require().EqualValues(params, s.App.StakeibcKeeper.GetParams(s.Ctx)) +} diff --git a/x/stakeibc/keeper/rebalance.go b/x/stakeibc/keeper/rebalance.go new file mode 100644 index 00000000000..18b5cb29abe --- /dev/null +++ b/x/stakeibc/keeper/rebalance.go @@ -0,0 +1,267 @@ +package keeper + +import ( + "fmt" + "sort" + + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/cosmos/gogoproto/proto" + + "github.com/osmosis-labs/osmosis/v27/utils" + epochstypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +const RebalanceIcaBatchSize = 5 + +type RebalanceValidatorDelegationChange struct { + ValidatorAddress string + Delta sdkmath.Int +} + +// Iterate each active host zone and issues redelegation messages to rebalance each +// validator's stake according to their weights +// +// This is required when accepting LSM LiquidStakes as the distribution of stake +// from the LSM Tokens will be inconsistend with the host zone's validator set +// +// Note: this cannot be run more than once in a single unbonding period +func (k Keeper) RebalanceAllHostZones(ctx sdk.Context) { + dayEpoch, found := k.GetEpochTracker(ctx, epochstypes.DAY_EPOCH) + if !found { + k.Logger(ctx).Error("Unable to get day epoch tracker") + return + } + + for _, hostZone := range k.GetAllActiveHostZone(ctx) { + // We add 1 to the UnbondingPeriod to avoid any race conditions + // In particular, you can only rebalance _away_ from a validator once per UnbondingPeriod + // Roughly half the time, a rebalance message will get sent a few seconds _before_ + // the last rebalance fully completed. By adding an extra day, we ensure that + // all rebalances are completed before initiating any new ones + if dayEpoch.EpochNumber%(hostZone.UnbondingPeriod+1) != 0 { + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, + "Host does not rebalance this epoch (Unbonding Period: %d, Epoch: %d)", hostZone.UnbondingPeriod, dayEpoch.EpochNumber)) + continue + } + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, "Rebalancing delegations")) + + if err := k.RebalanceDelegationsForHostZone(ctx, hostZone.ChainId); err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Unable to rebalance delegations for %s: %s", hostZone.ChainId, err.Error())) + continue + } + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, "Successfully rebalanced delegations")) + } +} + +// Rebalance validators according to their validator weights for a specific host zone +func (k Keeper) RebalanceDelegationsForHostZone(ctx sdk.Context, chainId string) error { + // Get the host zone and confirm the delegation account is initialized + hostZone, found := k.GetHostZone(ctx, chainId) + if !found { + return errorsmod.Wrap(types.ErrHostZoneNotFound, fmt.Sprintf("Host zone %s not found", chainId)) + } + if hostZone.DelegationIcaAddress == "" { + return errorsmod.Wrapf(types.ErrICAAccountNotFound, "no delegation account found for %s", chainId) + } + + // Get the difference between the actual and expected validator delegations + valDeltaList, err := k.GetValidatorDelegationDifferences(ctx, hostZone) + if err != nil { + return errorsmod.Wrapf(err, "unable to get validator deltas for host zone %s", chainId) + } + + msgs, rebalancings := k.GetRebalanceICAMessages(hostZone, valDeltaList) + + for start := 0; start < len(msgs); start += RebalanceIcaBatchSize { + end := start + RebalanceIcaBatchSize + if end > len(msgs) { + end = len(msgs) + } + + msgsBatch := msgs[start:end] + rebalancingsBatch := rebalancings[start:end] + + // marshall the callback + rebalanceCallback := types.RebalanceCallback{ + HostZoneId: hostZone.ChainId, + Rebalancings: rebalancingsBatch, + } + rebalanceCallbackBz, err := k.MarshalRebalanceCallbackArgs(ctx, rebalanceCallback) + if err != nil { + return errorsmod.Wrapf(err, "unable to marshal rebalance callback args") + } + + // Submit the rebalance ICA + _, err = k.SubmitTxsStrideEpoch( + ctx, + hostZone.ConnectionId, + msgsBatch, + types.ICAAccountType_DELEGATION, + ICACallbackID_Rebalance, + rebalanceCallbackBz, + ) + if err != nil { + return errorsmod.Wrapf(err, "Failed to SubmitTxs for %s, messages: %+v", hostZone.ChainId, msgs) + } + + // flag the delegation change in progress on each validator + for _, rebalancing := range rebalancingsBatch { + if err := k.IncrementValidatorDelegationChangesInProgress(&hostZone, rebalancing.SrcValidator); err != nil { + return err + } + if err := k.IncrementValidatorDelegationChangesInProgress(&hostZone, rebalancing.DstValidator); err != nil { + return err + } + } + k.SetHostZone(ctx, hostZone) + } + + return nil +} + +// Given a list of target delegation changes, builds the individual re-delegation messages by redelegating +// from surplus validators to deficit validators +// Returns the list of messages and the callback data for the ICA +func (k Keeper) GetRebalanceICAMessages( + hostZone types.HostZone, + validatorDeltas []RebalanceValidatorDelegationChange, +) (msgs []proto.Message, rebalancings []*types.Rebalancing) { + // Sort the list of delegation changes by the size of the change + // Sort descending so the surplus validators appear first + lessFunc := func(i, j int) bool { + if !validatorDeltas[i].Delta.Equal(validatorDeltas[j].Delta) { + return validatorDeltas[i].Delta.GT(validatorDeltas[j].Delta) + } + // use name as a tie breaker if deltas are equal + return validatorDeltas[i].ValidatorAddress < validatorDeltas[j].ValidatorAddress + } + sort.SliceStable(validatorDeltas, lessFunc) + + // Pair surplus and deficit validators, with a redelegation from the surplus + // validator to the deficit one + // The list is sorted with the surplus validators (who should lose stake) at index 0 + // and the deficit validators (who should gain stake) at index N-1 + // The surplus validator's have a positive delta and the deficit validators have a negative delta + surplusIndex := 0 + deficitIndex := len(validatorDeltas) - 1 + for surplusIndex <= deficitIndex { + // surplus validator delta is positive, deficit validator delta is negative + deficitValidator := validatorDeltas[deficitIndex] + surplusValidator := validatorDeltas[surplusIndex] + + // If the indicies flipped, or either delta is 0, we're done rebalancing + if surplusIndex > deficitIndex || deficitValidator.Delta.IsZero() || surplusValidator.Delta.IsZero() { + break + } + + var redelegationAmount sdkmath.Int + if deficitValidator.Delta.Abs().GT(surplusValidator.Delta.Abs()) { + // If the deficit validator needs more stake than the surplus validator has to give, + // transfer the full surplus to deficit validator + redelegationAmount = surplusValidator.Delta.Abs() + + // Update the deficit validator, and zero out the surplus validator + validatorDeltas[deficitIndex].Delta = deficitValidator.Delta.Add(redelegationAmount) + validatorDeltas[surplusIndex].Delta = sdkmath.ZeroInt() + surplusIndex += 1 + + } else if surplusValidator.Delta.Abs().GT(deficitValidator.Delta.Abs()) { + // If one validator's deficit is less than the other validator's surplus, + // move only enough of the surplus to cover the shortage + redelegationAmount = deficitValidator.Delta.Abs() + + // Update the surplus validator, and zero out the deficit validator + validatorDeltas[surplusIndex].Delta = surplusValidator.Delta.Sub(redelegationAmount) + validatorDeltas[deficitIndex].Delta = sdkmath.ZeroInt() + deficitIndex -= 1 + + } else { + // if one validator's surplus is equal to the other validator's deficit, + // we'll transfer that amount and both validators will now be balanced + redelegationAmount = deficitValidator.Delta.Abs() + + validatorDeltas[surplusIndex].Delta = sdkmath.ZeroInt() + validatorDeltas[deficitIndex].Delta = sdkmath.ZeroInt() + + surplusIndex += 1 + deficitIndex -= 1 + } + + // Append the new Redelegation message and Rebalancing struct for the callback + // We always send from the surplus validator to the deficit validator + srcValidator := surplusValidator.ValidatorAddress + dstValidator := deficitValidator.ValidatorAddress + + msgs = append(msgs, &stakingtypes.MsgBeginRedelegate{ + DelegatorAddress: hostZone.DelegationIcaAddress, + ValidatorSrcAddress: srcValidator, + ValidatorDstAddress: dstValidator, + Amount: sdk.NewCoin(hostZone.HostDenom, redelegationAmount), + }) + rebalancings = append(rebalancings, &types.Rebalancing{ + SrcValidator: srcValidator, + DstValidator: dstValidator, + Amt: redelegationAmount, + }) + } + + return msgs, rebalancings +} + +// This function returns a list with the number of extra tokens that should be sent to each validator +// - Positive delta implies the validator has a surplus (and should lose stake) +// - Negative delta implies the validator has a deficit (and should gain stake) +func (k Keeper) GetValidatorDelegationDifferences(ctx sdk.Context, hostZone types.HostZone) ([]RebalanceValidatorDelegationChange, error) { + // The total rebalance amount consists of all delegations from validator's without a slash query in progress + // Validators with a slash query in progress will be excluded from rebalancing + targetRebalanceAmount := sdkmath.ZeroInt() + for _, validator := range hostZone.Validators { + if !validator.SlashQueryInProgress { + targetRebalanceAmount = targetRebalanceAmount.Add(validator.Delegation) + } + } + + // Get the target delegation amount for each validator + targetDelegations, err := k.GetTargetValAmtsForHostZone(ctx, hostZone, targetRebalanceAmount) + if err != nil { + return nil, errorsmod.Wrapf(err, "unable to get target val amounts for host zone %s", hostZone.ChainId) + } + + // For each validator, store the amount that their delegation should change + delegationDeltas := []RebalanceValidatorDelegationChange{} + totalDelegationChange := sdkmath.ZeroInt() + for _, validator := range hostZone.Validators { + // Compare the target with the current delegation + targetDelegation, ok := targetDelegations[validator.Address] + if !ok { + continue + } + delegationChange := validator.Delegation.Sub(targetDelegation) + + // Only include validators who's delegation should change + if !delegationChange.IsZero() { + delegationDeltas = append(delegationDeltas, RebalanceValidatorDelegationChange{ + ValidatorAddress: validator.Address, + Delta: delegationChange, + }) + totalDelegationChange = totalDelegationChange.Add(delegationChange) + + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, + "Validator %s delegation surplus/deficit: %v", validator.Address, delegationChange)) + } + } + + // Sanity check that the sum of all the delegation change's is equal to 0 + // (meaning the total delegation across ALL validators has not changed) + if !totalDelegationChange.IsZero() { + return nil, errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, + "non-zero net delegation change (%v) across validators during rebalancing", totalDelegationChange) + } + + return delegationDeltas, nil +} diff --git a/x/stakeibc/keeper/rebalance_test.go b/x/stakeibc/keeper/rebalance_test.go new file mode 100644 index 00000000000..e081a868646 --- /dev/null +++ b/x/stakeibc/keeper/rebalance_test.go @@ -0,0 +1,367 @@ +package keeper_test + +import ( + "fmt" + "math/rand" + + sdkmath "cosmossdk.io/math" + "github.com/cosmos/gogoproto/proto" + + sdk "github.com/cosmos/cosmos-sdk/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/keeper" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +type RebalanceDelegationsForHostZoneTestCase struct { + expectedRebalancings []types.Rebalancing + channelStartSequence uint64 + hostZone types.HostZone + delegationChannelID string + delegationPortID string +} + +func (s *KeeperTestSuite) SetupTestRebalanceDelegationsForHostZone() RebalanceDelegationsForHostZoneTestCase { + delegationAccountOwner := fmt.Sprintf("%s.%s", HostChainId, "DELEGATION") + delegationChannelID, delegationPortID := s.CreateICAChannel(delegationAccountOwner) + + // Add host zone and validators + delegationAddress := "cosmos_DELEGATION" + hostZone := types.HostZone{ + ChainId: HostChainId, + HostDenom: Atom, + DelegationIcaAddress: delegationAddress, + ConnectionId: ibctesting.FirstConnectionID, + Validators: []*types.Validator{ + // Total delegation: 10000 + {Address: "val1", Weight: 25, Delegation: sdkmath.NewInt(3500)}, // Expected: 2500 + {Address: "val2", Weight: 50, Delegation: sdkmath.NewInt(2000)}, // Expected: 5000 + {Address: "val3", Weight: 25, Delegation: sdkmath.NewInt(4500)}, // Expected: 2500 + }, + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + // Add the stride epoch to determine the ICA timeout + strideEpochTracker := types.EpochTracker{ + EpochIdentifier: epochtypes.STRIDE_EPOCH, + EpochNumber: 1, + NextEpochStartTime: uint64(s.Coordinator.CurrentTime.UnixNano() + 30_000_000_000), // dictates timeouts + } + + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, strideEpochTracker) + + // Build expected redelegation messages + expectedRebalancings := []types.Rebalancing{ + {SrcValidator: "val3", DstValidator: "val2", Amt: sdkmath.NewInt(2000)}, // 2000 from val3 to val2 + {SrcValidator: "val1", DstValidator: "val2", Amt: sdkmath.NewInt(1000)}, // 1000 from val1 to val2 + } + + // Get the next sequence number to confirm if an ICA was sent + startSequence, found := s.App.IBCKeeper.ChannelKeeper.GetNextSequenceSend(s.Ctx, delegationPortID, delegationChannelID) + s.Require().True(found, "sequence number not found before ICA") + + return RebalanceDelegationsForHostZoneTestCase{ + expectedRebalancings: expectedRebalancings, + channelStartSequence: startSequence, + hostZone: hostZone, + delegationChannelID: delegationChannelID, + delegationPortID: delegationPortID, + } +} + +func (s *KeeperTestSuite) TestRebalanceDelegationsForHostZone_Successful() { + tc := s.SetupTestRebalanceDelegationsForHostZone() + + // Call rebalance + err := s.App.StakeibcKeeper.RebalanceDelegationsForHostZone(s.Ctx, HostChainId) + s.Require().NoError(err, "no error expected with successful rebalancing") + + // Check that the ICA was sent by confirming the sequence number incremented + endSequence, found := s.App.IBCKeeper.ChannelKeeper.GetNextSequenceSend(s.Ctx, tc.delegationPortID, tc.delegationChannelID) + s.Require().True(found, "sequence number not found after ICA") + s.Require().Equal(tc.channelStartSequence+1, endSequence, "sequence number should have been incremented from ICA submission") + + // Check callback data + allCallbackData := s.App.IcacallbacksKeeper.GetAllCallbackData(s.Ctx) + s.Require().Len(allCallbackData, 1, "length of callback data") + + var callbackData types.RebalanceCallback + err = proto.Unmarshal(allCallbackData[0].CallbackArgs, &callbackData) + s.Require().NoError(err, "no error expected when unmarshalling callback data") + s.Require().Equal(HostChainId, callbackData.HostZoneId, "callback data chain-id") + + // Check splits from callback data + actualRebalancings := callbackData.Rebalancings + s.Require().Len(actualRebalancings, len(tc.expectedRebalancings), "number of rebalancings from callback data") + + expectedDelegationChanges := map[string]int{} + for i, expected := range tc.expectedRebalancings { + actual := actualRebalancings[i] + s.Require().Equal(expected.SrcValidator, actual.SrcValidator, "rebalancing %d source validator") + s.Require().Equal(expected.DstValidator, actual.DstValidator, "rebalancing %d destination validator") + s.Require().Equal(expected.Amt.Int64(), actual.Amt.Int64(), "rebalancing %d amount") + + // Store the number of expected delegation changes for each validator + if _, ok := expectedDelegationChanges[expected.SrcValidator]; !ok { + expectedDelegationChanges[expected.SrcValidator] = 0 + } + if _, ok := expectedDelegationChanges[expected.SrcValidator]; !ok { + expectedDelegationChanges[expected.DstValidator] = 0 + } + expectedDelegationChanges[expected.SrcValidator] += 1 + expectedDelegationChanges[expected.DstValidator] += 1 + } + + // Check the delegation change in progress was incremented from each redelegation + actualHostZone, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, HostChainId) + s.Require().True(found, "host zone should have been found") + + for _, actualValidator := range actualHostZone.Validators { + expectedDelegationChangesInProgress := expectedDelegationChanges[actualValidator.Address] + s.Require().Equal(expectedDelegationChangesInProgress, int(actualValidator.DelegationChangesInProgress), + "validator %s delegation changes in progress", actualValidator.Address) + } +} + +func (s *KeeperTestSuite) TestRebalanceDelegationsForHostZone_SuccessfulBatchSend() { + tc := s.SetupTestRebalanceDelegationsForHostZone() + + // Create 5 batches of redelegation messages + // For each batch create the RebalanceIcaBatchSize number of validator pairs + // where the rebalance is going from one validator to the next + // This will result in 5 ICA messages submitted + numBatches := 5 + validators := []*types.Validator{} + for batch := 1; batch <= numBatches; batch++ { + for msg := 1; msg <= keeper.RebalanceIcaBatchSize; msg++ { + validators = append(validators, []*types.Validator{ + {Address: fmt.Sprintf("src_val_%d_%d", batch, msg), Weight: 1, Delegation: sdkmath.NewInt(2)}, + {Address: fmt.Sprintf("dst_val_%d_%d", batch, msg), Weight: 1, Delegation: sdkmath.NewInt(0)}, + }...) + } + } + hostZone := tc.hostZone + hostZone.Validators = validators + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + // Call rebalance + err := s.App.StakeibcKeeper.RebalanceDelegationsForHostZone(s.Ctx, HostChainId) + s.Require().NoError(err, "no error expected with successful rebalancing") + + // Check that the ICA was sent by confirming the sequence number incremented + endSequence, found := s.App.IBCKeeper.ChannelKeeper.GetNextSequenceSend(s.Ctx, tc.delegationPortID, tc.delegationChannelID) + s.Require().True(found, "sequence number not found after ICA") + s.Require().Equal(int(tc.channelStartSequence)+numBatches, int(endSequence), + "sequence number should have been incremented multiple times from ICA submissions") +} + +func (s *KeeperTestSuite) TestRebalanceDelegationsForHostZone_HostNotFound() { + s.SetupTestRebalanceDelegationsForHostZone() + + // Attempt to rebalance with a host zone that does not exist - it should error + err := s.App.StakeibcKeeper.RebalanceDelegationsForHostZone(s.Ctx, "fake_host_zone") + s.Require().ErrorContains(err, "Host zone fake_host_zone not found") +} + +func (s *KeeperTestSuite) TestRebalanceDelegationsForHostZone_MissingDelegationAddress() { + tc := s.SetupTestRebalanceDelegationsForHostZone() + + // Remove the delegation address from the host and then call rebalance - it should fail + invalidHostZone := tc.hostZone + invalidHostZone.DelegationIcaAddress = "" + s.App.StakeibcKeeper.SetHostZone(s.Ctx, invalidHostZone) + + err := s.App.StakeibcKeeper.RebalanceDelegationsForHostZone(s.Ctx, HostChainId) + s.Require().ErrorContains(err, "no delegation account found for GAIA") +} + +func (s *KeeperTestSuite) TestRebalanceDelegationsForHostZone_ZeroWeightValidators() { + tc := s.SetupTestRebalanceDelegationsForHostZone() + + // Update the host zone validators so there are only 0 weight validators - rebalance should fail + invalidHostZone := tc.hostZone + invalidHostZone.Validators = []*types.Validator{{Address: "val1", Weight: 0}} + s.App.StakeibcKeeper.SetHostZone(s.Ctx, invalidHostZone) + + err := s.App.StakeibcKeeper.RebalanceDelegationsForHostZone(s.Ctx, HostChainId) + s.Require().ErrorContains(err, "Cannot calculate target delegation if final amount is less than or equal to zero (0)") +} + +func (s *KeeperTestSuite) TestRebalanceDelegationsForHostZone_FailedToSubmitICA() { + tc := s.SetupTestRebalanceDelegationsForHostZone() + + // Remove the connection ID from the host zone so the ICA fails + invalidHostZone := tc.hostZone + invalidHostZone.ConnectionId = "" + s.App.StakeibcKeeper.SetHostZone(s.Ctx, invalidHostZone) + + err := s.App.StakeibcKeeper.RebalanceDelegationsForHostZone(s.Ctx, HostChainId) + s.Require().ErrorContains(err, "Failed to SubmitTxs for GAIA") +} + +// Given a set of validator deltas (containing the expected change in delegation for each validator) +// and a set of expected rebalancings (containing the individual rebalance messages), calls +// RebalanceICAMessages and checks that the corresponding ICA messages match the expected rebalancings +func (s *KeeperTestSuite) checkRebalanceICAMessages( + validatorDeltas []keeper.RebalanceValidatorDelegationChange, + expectedRebalancings []types.Rebalancing, +) { + // Build the expected ICA messages from the list of rebalancings above + delegationAddress := "cosmos_DELEGATION" + expectedMsgs := []proto.Message{} + for _, rebalancing := range expectedRebalancings { + expectedMsgs = append(expectedMsgs, &stakingtypes.MsgBeginRedelegate{ + DelegatorAddress: delegationAddress, + ValidatorSrcAddress: rebalancing.SrcValidator, + ValidatorDstAddress: rebalancing.DstValidator, + Amount: sdk.NewCoin(Atom, rebalancing.Amt), + }) + } + + // Only the validator address is needed in the host zone validator array + hostZone := types.HostZone{ + HostDenom: Atom, + DelegationIcaAddress: delegationAddress, // used as ICA message sender + } + + // Shuffle the validatorDeltas to ensure the sorting worked + rand.Shuffle(len(validatorDeltas), func(i, j int) { + validatorDeltas[i], validatorDeltas[j] = validatorDeltas[j], validatorDeltas[i] + }) + + // Get the rebalancing messages + actualMsgs, actualRebalancings := s.App.StakeibcKeeper.GetRebalanceICAMessages(hostZone, validatorDeltas) + + // Confirm the rebalancing list used for the callback + s.Require().Len(actualRebalancings, len(expectedRebalancings), "length of rebalancings") + for i, expected := range expectedRebalancings { + s.Require().Equal(expected.SrcValidator, actualRebalancings[i].SrcValidator, "rebalancing src validator, index %d", i) + s.Require().Equal(expected.DstValidator, actualRebalancings[i].DstValidator, "rebalancing dst validator, index %d", i) + s.Require().Equal(expected.Amt.Int64(), actualRebalancings[i].Amt.Int64(), + "rebalancing amount, src: %s, dst: %s, index: %d", expected.SrcValidator, expected.DstValidator, i) + } + + // Confirm the ICA messages list + s.Require().Len(actualMsgs, len(expectedMsgs), "length of messages") + for i, expectedMsg := range expectedMsgs { + actual := actualMsgs[i].(*stakingtypes.MsgBeginRedelegate) + expected := expectedMsg.(*stakingtypes.MsgBeginRedelegate) + s.Require().Equal(delegationAddress, actual.DelegatorAddress, "message delegator address, index %d", i) + s.Require().Equal(expected.ValidatorSrcAddress, actual.ValidatorSrcAddress, "message src validator, index %d", i) + s.Require().Equal(expected.ValidatorDstAddress, actual.ValidatorDstAddress, "message dst validator, index %d", i) + } +} + +func (s *KeeperTestSuite) TestGetRebalanceICAMessages_EvenNumberValidators() { + // Build up deltas for each validator, i.e. how much each validator needs to change by + validatorDeltas := []keeper.RebalanceValidatorDelegationChange{ + // Overweight validators - they should lose some of their stake + {ValidatorAddress: "val1", Delta: sdkmath.NewInt(21)}, // 15 to val10, 6 to val9 + {ValidatorAddress: "val2", Delta: sdkmath.NewInt(19)}, // 5 to val9, 11 to val8, 3 to val7 + {ValidatorAddress: "val3", Delta: sdkmath.NewInt(13)}, // 3 to val7, 5 to val6, 4 to val5, 1 to val4 + + // Underweight validators - they should gain stake + {ValidatorAddress: "val4", Delta: sdkmath.NewInt(-1)}, // 1 from val3 + {ValidatorAddress: "val5", Delta: sdkmath.NewInt(-4)}, // 4 from val3 + {ValidatorAddress: "val6", Delta: sdkmath.NewInt(-5)}, // 5 from val3 + {ValidatorAddress: "val7", Delta: sdkmath.NewInt(-6)}, // 3 from val2, 3 from val3 + {ValidatorAddress: "val8", Delta: sdkmath.NewInt(-11)}, // 11 from val2 + {ValidatorAddress: "val9", Delta: sdkmath.NewInt(-11)}, // 6 from val1, 5 from val2 + {ValidatorAddress: "val10", Delta: sdkmath.NewInt(-15)}, // 15 from val1 + } + + // Build up the expected messages, moving across the list above + expectedRebalancings := []types.Rebalancing{ + {SrcValidator: "val1", DstValidator: "val10", Amt: sdkmath.NewInt(15)}, // 15 from val1 to val10 + {SrcValidator: "val1", DstValidator: "val9", Amt: sdkmath.NewInt(6)}, // 6 from val1 to val9 + + {SrcValidator: "val2", DstValidator: "val9", Amt: sdkmath.NewInt(5)}, // 6 from val2 to val9 + {SrcValidator: "val2", DstValidator: "val8", Amt: sdkmath.NewInt(11)}, // 10 from val2 to val8 + {SrcValidator: "val2", DstValidator: "val7", Amt: sdkmath.NewInt(3)}, // 3 from val2 to val7 + + {SrcValidator: "val3", DstValidator: "val7", Amt: sdkmath.NewInt(3)}, // 3 from val3 to val7 + {SrcValidator: "val3", DstValidator: "val6", Amt: sdkmath.NewInt(5)}, // 5 from val3 to val6 + {SrcValidator: "val3", DstValidator: "val5", Amt: sdkmath.NewInt(4)}, // 4 from val3 to val5 + {SrcValidator: "val3", DstValidator: "val4", Amt: sdkmath.NewInt(1)}, // 1 from val3 to val4 + } + + s.checkRebalanceICAMessages(validatorDeltas, expectedRebalancings) +} + +func (s *KeeperTestSuite) TestGetRebalanceICAMessages_OddNumberValidators() { + // Build up deltas for each validator, i.e. how much each validator needs to change by + validatorDeltas := []keeper.RebalanceValidatorDelegationChange{ + // Overweight validators - they should lose some of their stake + {ValidatorAddress: "val1", Delta: sdkmath.NewInt(15)}, // 15 to val11 + {ValidatorAddress: "val2", Delta: sdkmath.NewInt(12)}, // 6 to val11, 6 to val10 + {ValidatorAddress: "val3", Delta: sdkmath.NewInt(9)}, // 9 to val10 + {ValidatorAddress: "val4", Delta: sdkmath.NewInt(7)}, // 5 to val9, 2 to val8 + {ValidatorAddress: "val5", Delta: sdkmath.NewInt(2)}, // 2 to val8 + {ValidatorAddress: "val6", Delta: sdkmath.NewInt(2)}, // 2 to val7 + + // Underweight validators - they should gain stake + {ValidatorAddress: "val7", Delta: sdkmath.NewInt(-2)}, // 2 from val6 + {ValidatorAddress: "val8", Delta: sdkmath.NewInt(-4)}, // 2 from val4, 2 from val5 + {ValidatorAddress: "val9", Delta: sdkmath.NewInt(-5)}, // 5 from val4 + {ValidatorAddress: "val10", Delta: sdkmath.NewInt(-15)}, // 6 from val2, 9 from val3 + {ValidatorAddress: "val11", Delta: sdkmath.NewInt(-21)}, // 15 from val1, 6 from val2 + } + + // Build up the expected messages, moving across the list above + expectedRebalancings := []types.Rebalancing{ + {SrcValidator: "val1", DstValidator: "val11", Amt: sdkmath.NewInt(15)}, // 15 from val1 to val11 + + {SrcValidator: "val2", DstValidator: "val11", Amt: sdkmath.NewInt(6)}, // 6 from val2 to val11 + {SrcValidator: "val2", DstValidator: "val10", Amt: sdkmath.NewInt(6)}, // 6 from val2 to val10 + + {SrcValidator: "val3", DstValidator: "val10", Amt: sdkmath.NewInt(9)}, // 9 from val3 to val10 + + {SrcValidator: "val4", DstValidator: "val9", Amt: sdkmath.NewInt(5)}, // 5 from val4 to val9 + {SrcValidator: "val4", DstValidator: "val8", Amt: sdkmath.NewInt(2)}, // 2 from val4 to val8 + + {SrcValidator: "val5", DstValidator: "val8", Amt: sdkmath.NewInt(2)}, // 2 from val5 to val8 + + {SrcValidator: "val6", DstValidator: "val7", Amt: sdkmath.NewInt(2)}, // 2 from val6 to val7 + } + + s.checkRebalanceICAMessages(validatorDeltas, expectedRebalancings) +} + +func (s *KeeperTestSuite) TestGetValidatorDelegationDifferences() { + hostZone := types.HostZone{ + ChainId: HostChainId, + Validators: []*types.Validator{ + // Total Weight: 100, Total Delegation: 200 + {Address: "val1", Weight: 10, Delegation: sdkmath.NewInt(20)}, + {Address: "val2", Weight: 20, Delegation: sdkmath.NewInt(140)}, + {Address: "val3", Weight: 70, Delegation: sdkmath.NewInt(40)}, + // Ignore this validator as it has a slash query in progresss + {Address: "ignore", Weight: 50, Delegation: sdkmath.NewInt(100), SlashQueryInProgress: true}, + }, + } + + // Target delegation is determined by the total delegation * weight + // Delta = Current - Target + expectedDeltas := []keeper.RebalanceValidatorDelegationChange{ + // val1 is excluded because it's Target Delegation is equal to the Current Delegation (20) + {ValidatorAddress: "val2", Delta: sdkmath.NewInt(140 - 40)}, // Current Delegation: 140, Target Delegation: 40 + {ValidatorAddress: "val3", Delta: sdkmath.NewInt(40 - 140)}, // Current Delegation: 40, Target Delegation: 140 + } + + // Check delegation changes + actualDeltas, err := s.App.StakeibcKeeper.GetValidatorDelegationDifferences(s.Ctx, hostZone) + s.Require().NoError(err, "no error expected when calculating delegation differences") + s.Require().Len(actualDeltas, len(expectedDeltas), "number of redelegations") + + for i, expected := range expectedDeltas { + s.Require().Equal(expected.ValidatorAddress, actualDeltas[i].ValidatorAddress, "address for delegation %d", i) + s.Require().Equal(expected.Delta.Int64(), actualDeltas[i].Delta.Int64(), "delta for delegation %d", i) + } + + // Check the error case when there are no delegations + _, err = s.App.StakeibcKeeper.GetValidatorDelegationDifferences(s.Ctx, types.HostZone{TotalDelegations: sdkmath.ZeroInt()}) + s.Require().ErrorContains(err, "unable to get target val amounts for host zone") +} diff --git a/x/stakeibc/keeper/records.go b/x/stakeibc/keeper/records.go new file mode 100644 index 00000000000..3f8e9f4691d --- /dev/null +++ b/x/stakeibc/keeper/records.go @@ -0,0 +1,86 @@ +package keeper + +import ( + "fmt" + + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/spf13/cast" + + "github.com/osmosis-labs/osmosis/v27/utils" + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" +) + +// Create a new deposit record for each host zone for the given epoch +func (k Keeper) CreateDepositRecordsForEpoch(ctx sdk.Context, epochNumber uint64) { + k.Logger(ctx).Info(fmt.Sprintf("Creating Deposit Records for Epoch %d", epochNumber)) + + for _, hostZone := range k.GetAllActiveHostZone(ctx) { + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, "Creating Deposit Record")) + + depositRecord := recordstypes.DepositRecord{ + Amount: sdkmath.ZeroInt(), + Denom: hostZone.HostDenom, + HostZoneId: hostZone.ChainId, + Status: recordstypes.DepositRecord_TRANSFER_QUEUE, + DepositEpochNumber: epochNumber, + DelegationTxsInProgress: 0, + } + k.RecordsKeeper.AppendDepositRecord(ctx, depositRecord) + } +} + +// Creates a new epoch unbonding record for the epoch +func (k Keeper) CreateEpochUnbondingRecord(ctx sdk.Context, epochNumber uint64) bool { + k.Logger(ctx).Info(fmt.Sprintf("Creating Epoch Unbonding Records for Epoch %d", epochNumber)) + + hostZoneUnbondings := []*recordstypes.HostZoneUnbonding{} + + for _, hostZone := range k.GetAllActiveHostZone(ctx) { + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, "Creating Epoch Unbonding Record")) + + hostZoneUnbonding := recordstypes.HostZoneUnbonding{ + NativeTokenAmount: sdkmath.ZeroInt(), + StTokenAmount: sdkmath.ZeroInt(), + StTokensToBurn: sdkmath.ZeroInt(), + NativeTokensToUnbond: sdkmath.ZeroInt(), + ClaimableNativeTokens: sdkmath.ZeroInt(), + Denom: hostZone.HostDenom, + HostZoneId: hostZone.ChainId, + Status: recordstypes.HostZoneUnbonding_UNBONDING_QUEUE, + UndelegationTxsInProgress: 0, + } + hostZoneUnbondings = append(hostZoneUnbondings, &hostZoneUnbonding) + } + + epochUnbondingRecord := recordstypes.EpochUnbondingRecord{ + EpochNumber: cast.ToUint64(epochNumber), + HostZoneUnbondings: hostZoneUnbondings, + } + k.RecordsKeeper.SetEpochUnbondingRecord(ctx, epochUnbondingRecord) + return true +} + +// Deletes any epoch unbonding records that have had all unbondings claimed +func (k Keeper) CleanupEpochUnbondingRecords(ctx sdk.Context, epochNumber uint64) { + k.Logger(ctx).Info("Cleaning Claimed Epoch Unbonding Records...") + + for _, epochUnbondingRecord := range k.RecordsKeeper.GetAllEpochUnbondingRecord(ctx) { + shouldDeleteEpochUnbondingRecord := true + hostZoneUnbondings := epochUnbondingRecord.HostZoneUnbondings + + for _, hostZoneUnbonding := range hostZoneUnbondings { + // if an EpochUnbondingRecord has any HostZoneUnbonding with non-zero balances, we don't delete the EpochUnbondingRecord + // because it has outstanding tokens that need to be claimed + notClaimable := hostZoneUnbonding.Status != recordstypes.HostZoneUnbonding_CLAIMABLE + hasUnclaimedTokens := !hostZoneUnbonding.ClaimableNativeTokens.Equal(sdkmath.ZeroInt()) + if notClaimable || hasUnclaimedTokens { + shouldDeleteEpochUnbondingRecord = false + break + } + } + if shouldDeleteEpochUnbondingRecord { + k.RecordsKeeper.RemoveEpochUnbondingRecord(ctx, epochUnbondingRecord.EpochNumber) + } + } +} diff --git a/x/stakeibc/keeper/records_test.go b/x/stakeibc/keeper/records_test.go new file mode 100644 index 00000000000..c21f745f7de --- /dev/null +++ b/x/stakeibc/keeper/records_test.go @@ -0,0 +1,182 @@ +package keeper_test + +import ( + sdkmath "cosmossdk.io/math" + _ "github.com/stretchr/testify/suite" + + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + recordtypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func (s *KeeperTestSuite) TestCreateDepositRecordsForEpoch_Successful() { + // Set host zones + hostZones := []types.HostZone{ + { + ChainId: "HOST1", + HostDenom: "denom1", + }, + { + ChainId: "HOST2", + HostDenom: "denom2", + }, + { + ChainId: "HOST3", + HostDenom: "denom3", + }, + } + for _, hostZone := range hostZones { + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + } + + // Create depoist records for two epochs + s.App.StakeibcKeeper.CreateDepositRecordsForEpoch(s.Ctx, 1) + s.App.StakeibcKeeper.CreateDepositRecordsForEpoch(s.Ctx, 2) + + expectedDepositRecords := []recordstypes.DepositRecord{ + // Epoch 1 + { + Id: 0, + Amount: sdkmath.ZeroInt(), + Denom: "denom1", + HostZoneId: "HOST1", + Status: recordstypes.DepositRecord_TRANSFER_QUEUE, + DepositEpochNumber: 1, + }, + { + Id: 1, + Amount: sdkmath.ZeroInt(), + Denom: "denom2", + HostZoneId: "HOST2", + Status: recordstypes.DepositRecord_TRANSFER_QUEUE, + DepositEpochNumber: 1, + }, + { + Id: 2, + Amount: sdkmath.ZeroInt(), + Denom: "denom3", + HostZoneId: "HOST3", + Status: recordstypes.DepositRecord_TRANSFER_QUEUE, + DepositEpochNumber: 1, + }, + // Epoch 2 + { + Id: 3, + Amount: sdkmath.ZeroInt(), + Denom: "denom1", + HostZoneId: "HOST1", + Status: recordstypes.DepositRecord_TRANSFER_QUEUE, + DepositEpochNumber: 2, + }, + { + Id: 4, + Amount: sdkmath.ZeroInt(), + Denom: "denom2", + HostZoneId: "HOST2", + Status: recordstypes.DepositRecord_TRANSFER_QUEUE, + DepositEpochNumber: 2, + }, + { + Id: 5, + Amount: sdkmath.ZeroInt(), + Denom: "denom3", + HostZoneId: "HOST3", + Status: recordstypes.DepositRecord_TRANSFER_QUEUE, + DepositEpochNumber: 2, + }, + } + + // Confirm deposit records + actualDepositRecords := s.App.RecordsKeeper.GetAllDepositRecord(s.Ctx) + s.Require().Equal(len(expectedDepositRecords), len(actualDepositRecords), "number of deposit records") + s.Require().Equal(expectedDepositRecords, actualDepositRecords, "deposit records") +} + +func (s *KeeperTestSuite) TestCleanupEpochUnbondingRecords() { + // Epoch unbonding records with different amounts and statuses + epochUnbondingRecords := []recordtypes.EpochUnbondingRecord{ + { + // Has a non-CLAIMABLE record, should not be removed + EpochNumber: 0, + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{ + { + HostZoneId: HostChainId, + ClaimableNativeTokens: sdkmath.ZeroInt(), + Status: recordtypes.HostZoneUnbonding_CLAIMABLE, + }, + { + HostZoneId: OsmoChainId, + ClaimableNativeTokens: sdkmath.NewInt(1_000_000), + Status: recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE, + }, + }, + }, + { + // Has a non-zero CLAIMABLE record, should not be removed + EpochNumber: 1, + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{ + { + HostZoneId: HostChainId, + ClaimableNativeTokens: sdkmath.NewInt(1_000_000), + Status: recordtypes.HostZoneUnbonding_CLAIMABLE, + }, + { + HostZoneId: OsmoChainId, + ClaimableNativeTokens: sdkmath.ZeroInt(), + Status: recordtypes.HostZoneUnbonding_CLAIMABLE, + }, + }, + }, + { + // Has only CLAIMABLE and zero-amounts - should be removed + EpochNumber: 2, + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{ + { + HostZoneId: HostChainId, + ClaimableNativeTokens: sdkmath.ZeroInt(), + Status: recordtypes.HostZoneUnbonding_CLAIMABLE, + }, + { + HostZoneId: OsmoChainId, + ClaimableNativeTokens: sdkmath.ZeroInt(), + Status: recordtypes.HostZoneUnbonding_CLAIMABLE, + }, + }, + }, + { + // Has a non-CLAIMABLE record, should not be removed + EpochNumber: 3, + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{ + { + HostZoneId: HostChainId, + ClaimableNativeTokens: sdkmath.ZeroInt(), + Status: recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE, + }, + { + HostZoneId: OsmoChainId, + ClaimableNativeTokens: sdkmath.NewInt(1_000_000), + Status: recordtypes.HostZoneUnbonding_CLAIMABLE, + }, + }, + }, + } + + for _, epochUnbondingRecord := range epochUnbondingRecords { + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, epochUnbondingRecord) + } + + // Call cleanup on each unbonding record + for i := range epochUnbondingRecords { + s.App.StakeibcKeeper.CleanupEpochUnbondingRecords(s.Ctx, uint64(i)) + } + + // Check one record was removed + finalUnbondingRecords := s.App.RecordsKeeper.GetAllEpochUnbondingRecord(s.Ctx) + expectedNumUnbondingRecords := len(epochUnbondingRecords) - 1 + s.Require().Len(finalUnbondingRecords, expectedNumUnbondingRecords, "two epoch unbonding records should remain") + + // Confirm it was the last record that was removed + _, found := s.App.RecordsKeeper.GetEpochUnbondingRecord(s.Ctx, uint64(2)) + s.Require().False(found, "removed record should not be found") +} diff --git a/x/stakeibc/keeper/redeem_stake.go b/x/stakeibc/keeper/redeem_stake.go new file mode 100644 index 00000000000..88c4ee19779 --- /dev/null +++ b/x/stakeibc/keeper/redeem_stake.go @@ -0,0 +1,143 @@ +package keeper + +import ( + "fmt" + + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + "github.com/osmosis-labs/osmosis/v27/utils" + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// TODO [cleanup]: Cleanup this function (errors, logs, comments, whitespace, operation ordering) +// Exchanges a user's stTokens for native tokens using the current redemption rate +func (k Keeper) RedeemStake(ctx sdk.Context, msg *types.MsgRedeemStake) (*types.MsgRedeemStakeResponse, error) { + k.Logger(ctx).Info(fmt.Sprintf("redeem stake: %s", msg.String())) + + sender, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + return nil, errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "creator address is invalid: %s. err: %s", msg.Creator, err.Error()) + } + + // confirm the host zone is not halted and has redemptions enabled + hostZone, err := k.GetActiveHostZone(ctx, msg.HostZone) + if err != nil { + return nil, err + } + if !hostZone.RedemptionsEnabled { + return nil, errorsmod.Wrapf(types.ErrRedemptionsDisabled, "redemptions disabled for %s", msg.HostZone) + } + + // ensure the recipient address is a valid bech32 address on the hostZone + _, err = utils.AccAddressFromBech32(msg.Receiver, hostZone.Bech32Prefix) + if err != nil { + return nil, errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid receiver address (%s)", err) + } + + // safety check: redemption rate must be within safety bounds + rateIsSafe, err := k.IsRedemptionRateWithinSafetyBounds(ctx, hostZone) + if err != nil { + return nil, errorsmod.Wrap(err, "unable to check if redemption rate is within safety bounds") + } + if !rateIsSafe { + return nil, types.ErrRedemptionRateOutsideSafetyBounds + } + + // construct desired unstaking amount from host zone + nativeAmount := sdkmath.LegacyNewDecFromInt(msg.Amount).Mul(hostZone.RedemptionRate).TruncateInt() + if nativeAmount.LTE(sdkmath.ZeroInt()) { + return nil, errorsmod.Wrapf(sdkerrors.ErrInvalidCoins, "amount must be greater than 0. found: %v", msg.Amount) + } + if nativeAmount.GT(hostZone.TotalDelegations) { + return nil, errorsmod.Wrapf(types.ErrInvalidAmount, "cannot unstake an amount g.t. staked balance on host zone: %v", msg.Amount) + } + + // ----------------- UNBONDING RECORD KEEPING ----------------- + // Fetch the record + epochTracker, found := k.GetEpochTracker(ctx, epochtypes.DAY_EPOCH) + if !found { + return nil, errorsmod.Wrapf(types.ErrEpochNotFound, "epoch tracker found: %s", epochtypes.DAY_EPOCH) + } + + redemptionId := recordstypes.UserRedemptionRecordKeyFormatter(hostZone.ChainId, epochTracker.EpochNumber, msg.Receiver) + userRedemptionRecord, userHasRedeemedThisEpoch := k.RecordsKeeper.GetUserRedemptionRecord(ctx, redemptionId) + if userHasRedeemedThisEpoch { + k.Logger(ctx).Info(fmt.Sprintf("UserRedemptionRecord found for %s", redemptionId)) + // Add the unbonded amount to the UserRedemptionRecord + // The record is set below + userRedemptionRecord.StTokenAmount = userRedemptionRecord.StTokenAmount.Add(msg.Amount) + userRedemptionRecord.NativeTokenAmount = userRedemptionRecord.NativeTokenAmount.Add(nativeAmount) + } else { + // First time a user is redeeming this epoch + userRedemptionRecord = recordstypes.UserRedemptionRecord{ + Id: redemptionId, + Receiver: msg.Receiver, + NativeTokenAmount: nativeAmount, + Denom: hostZone.HostDenom, + HostZoneId: hostZone.ChainId, + EpochNumber: epochTracker.EpochNumber, + StTokenAmount: msg.Amount, + // claimIsPending represents whether a redemption is currently being claimed, + // contingent on the host zone unbonding having status CLAIMABLE + ClaimIsPending: false, + } + k.Logger(ctx).Info(fmt.Sprintf("UserRedemptionRecord not found - creating for %s", redemptionId)) + } + + // then add undelegation amount to epoch unbonding records + epochUnbondingRecord, found := k.RecordsKeeper.GetEpochUnbondingRecord(ctx, epochTracker.EpochNumber) + if !found { + k.Logger(ctx).Error("latest epoch unbonding record not found") + return nil, errorsmod.Wrapf(recordstypes.ErrEpochUnbondingRecordNotFound, "latest epoch unbonding record not found") + } + // get relevant host zone on this epoch unbonding record + hostZoneUnbonding, found := k.RecordsKeeper.GetHostZoneUnbondingByChainId(ctx, epochUnbondingRecord.EpochNumber, hostZone.ChainId) + if !found { + return nil, errorsmod.Wrapf(types.ErrInvalidHostZone, "host zone not found in unbondings: %s", hostZone.ChainId) + } + hostZoneUnbonding.NativeTokenAmount = hostZoneUnbonding.NativeTokenAmount.Add(nativeAmount) + if !userHasRedeemedThisEpoch { + // Only append a UserRedemptionRecord to the HZU if it wasn't previously appended + hostZoneUnbonding.UserRedemptionRecords = append(hostZoneUnbonding.UserRedemptionRecords, userRedemptionRecord.Id) + } + + // Escrow user's balance + stDenom := types.StAssetDenomFromHostZoneDenom(hostZone.HostDenom) + redeemCoin := sdk.NewCoins(sdk.NewCoin(stDenom, msg.Amount)) + depositAddress, err := sdk.AccAddressFromBech32(hostZone.DepositAddress) + if err != nil { + return nil, fmt.Errorf("could not bech32 decode address %s of zone with id: %s", hostZone.DepositAddress, hostZone.ChainId) + } + // Note: checkBlockedAddr=false because depositAddress is a module + err = utils.SafeSendCoins(false, k.bankKeeper, ctx, sender, depositAddress, redeemCoin) + if err != nil { + k.Logger(ctx).Error("Failed to send sdk.NewCoins(inCoins) from account to module") + return nil, errorsmod.Wrapf(types.ErrInsufficientFunds, "couldn't send %v derivative %s tokens to module account. err: %s", msg.Amount, hostZone.HostDenom, err.Error()) + } + + // record the number of stAssets that should be burned after unbonding + hostZoneUnbonding.StTokenAmount = hostZoneUnbonding.StTokenAmount.Add(msg.Amount) + + // Actually set the records, we wait until now to prevent any errors + k.RecordsKeeper.SetUserRedemptionRecord(ctx, userRedemptionRecord) + + // Set the UserUnbondingRecords on the proper HostZoneUnbondingRecord + hostZoneUnbondings := epochUnbondingRecord.GetHostZoneUnbondings() + if hostZoneUnbondings == nil { + hostZoneUnbondings = []*recordstypes.HostZoneUnbonding{} + epochUnbondingRecord.HostZoneUnbondings = hostZoneUnbondings + } + if err := k.RecordsKeeper.SetHostZoneUnbondingRecord(ctx, epochUnbondingRecord.EpochNumber, hostZone.ChainId, *hostZoneUnbonding); err != nil { + return nil, err + } + + k.Logger(ctx).Info(fmt.Sprintf("executed redeem stake: %s", msg.String())) + EmitSuccessfulRedeemStakeEvent(ctx, msg, hostZone, nativeAmount, msg.Amount) + + return &types.MsgRedeemStakeResponse{}, nil +} diff --git a/x/stakeibc/keeper/redeem_stake_test.go b/x/stakeibc/keeper/redeem_stake_test.go new file mode 100644 index 00000000000..35b0d47e76b --- /dev/null +++ b/x/stakeibc/keeper/redeem_stake_test.go @@ -0,0 +1,308 @@ +package keeper_test + +import ( + "fmt" + + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + recordtypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + stakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +type RedeemStakeState struct { + epochNumber uint64 + initialNativeEpochUnbondingAmount sdkmath.Int + initialStTokenEpochUnbondingAmount sdkmath.Int +} +type RedeemStakeTestCase struct { + user Account + hostZone stakeibctypes.HostZone + zoneAccount Account + initialState RedeemStakeState + validMsg stakeibctypes.MsgRedeemStake + expectedNativeAmount sdkmath.Int +} + +func (s *KeeperTestSuite) SetupRedeemStake() RedeemStakeTestCase { + redeemAmount := sdkmath.NewInt(1_000_000) + redemptionRate := sdkmath.LegacyMustNewDecFromStr("1.5") + expectedNativeAmount := sdkmath.NewInt(1_500_000) + + user := Account{ + acc: s.TestAccs[0], + atomBalance: sdk.NewInt64Coin("ibc/uatom", 10_000_000), + stAtomBalance: sdk.NewInt64Coin("stuatom", 10_000_000), + } + s.FundAccount(user.acc, user.atomBalance) + s.FundAccount(user.acc, user.stAtomBalance) + + depositAddress := stakeibctypes.NewHostZoneDepositAddress(HostChainId) + + zoneAccount := Account{ + acc: depositAddress, + atomBalance: sdk.NewInt64Coin("ibc/uatom", 10_000_000), + stAtomBalance: sdk.NewInt64Coin("stuatom", 10_000_000), + } + s.FundAccount(zoneAccount.acc, zoneAccount.atomBalance) + s.FundAccount(zoneAccount.acc, zoneAccount.stAtomBalance) + + // TODO define the host zone with total delegation and validators with staked amounts + hostZone := stakeibctypes.HostZone{ + ChainId: HostChainId, + HostDenom: "uatom", + Bech32Prefix: "cosmos", + RedemptionRate: redemptionRate, + TotalDelegations: sdkmath.NewInt(1234567890), + DepositAddress: depositAddress.String(), + RedemptionsEnabled: true, + } + + epochTrackerDay := stakeibctypes.EpochTracker{ + EpochIdentifier: epochtypes.DAY_EPOCH, + EpochNumber: 1, + } + + epochUnbondingRecord := recordtypes.EpochUnbondingRecord{ + EpochNumber: 1, + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{}, + } + + hostZoneUnbonding := &recordtypes.HostZoneUnbonding{ + NativeTokenAmount: sdkmath.ZeroInt(), + Denom: "uatom", + HostZoneId: HostChainId, + Status: recordtypes.HostZoneUnbonding_UNBONDING_QUEUE, + } + epochUnbondingRecord.HostZoneUnbondings = append(epochUnbondingRecord.HostZoneUnbondings, hostZoneUnbonding) + + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, epochTrackerDay) + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, epochUnbondingRecord) + + return RedeemStakeTestCase{ + user: user, + hostZone: hostZone, + zoneAccount: zoneAccount, + expectedNativeAmount: expectedNativeAmount, + initialState: RedeemStakeState{ + epochNumber: epochTrackerDay.EpochNumber, + initialNativeEpochUnbondingAmount: sdkmath.ZeroInt(), + initialStTokenEpochUnbondingAmount: sdkmath.ZeroInt(), + }, + validMsg: stakeibctypes.MsgRedeemStake{ + Creator: user.acc.String(), + Amount: redeemAmount, + HostZone: HostChainId, + // TODO set this dynamically through test helpers for host zone + Receiver: "cosmos1g6qdx6kdhpf000afvvpte7hp0vnpzapuyxp8uf", + }, + } +} + +func (s *KeeperTestSuite) TestRedeemStake_Successful() { + tc := s.SetupRedeemStake() + initialState := tc.initialState + + msg := tc.validMsg + user := tc.user + redeemAmount := msg.Amount + + // Split the message amount in 2, and call redeem stake twice (each with half the amount) + // This will check that the same user can redeem multiple times + msg1 := msg + msg1.Amount = msg1.Amount.Quo(sdkmath.NewInt(2)) // half the amount + + msg2 := msg + msg2.Amount = msg.Amount.Sub(msg1.Amount) // remaining half + + _, err := s.GetMsgServer().RedeemStake(s.Ctx, &msg1) + s.Require().NoError(err, "no error expected during first redemption") + + _, err = s.GetMsgServer().RedeemStake(s.Ctx, &msg2) + s.Require().NoError(err, "no error expected during second redemption") + + // User STUATOM balance should have DECREASED by the amount to be redeemed + expectedUserStAtomBalance := user.stAtomBalance.SubAmount(redeemAmount) + actualUserStAtomBalance := s.App.BankKeeper.GetBalance(s.Ctx, user.acc, "stuatom") + s.CompareCoins(expectedUserStAtomBalance, actualUserStAtomBalance, "user stuatom balance") + + // Gaia's hostZoneUnbonding NATIVE TOKEN amount should have INCREASED from 0 to the amount redeemed multiplied by the redemption rate + // Gaia's hostZoneUnbonding STTOKEN amount should have INCREASED from 0 to be amount redeemed + epochTracker, found := s.App.StakeibcKeeper.GetEpochTracker(s.Ctx, "day") + s.Require().True(found, "epoch tracker") + epochUnbondingRecord, found := s.App.RecordsKeeper.GetEpochUnbondingRecord(s.Ctx, epochTracker.EpochNumber) + s.Require().True(found, "epoch unbonding record") + hostZoneUnbonding, found := s.App.RecordsKeeper.GetHostZoneUnbondingByChainId(s.Ctx, epochUnbondingRecord.EpochNumber, HostChainId) + s.Require().True(found, "host zone unbondings by chain ID") + + expectedHostZoneUnbondingNativeAmount := initialState.initialNativeEpochUnbondingAmount.Add(tc.expectedNativeAmount) + expectedHostZoneUnbondingStTokenAmount := initialState.initialStTokenEpochUnbondingAmount.Add(redeemAmount) + + s.Require().Equal(expectedHostZoneUnbondingNativeAmount, hostZoneUnbonding.NativeTokenAmount, "host zone native unbonding amount") + s.Require().Equal(expectedHostZoneUnbondingStTokenAmount, hostZoneUnbonding.StTokenAmount, "host zone stToken burn amount") + + // UserRedemptionRecord should have been created with correct amount, sender, receiver, host zone, claimIsPending + userRedemptionRecords := hostZoneUnbonding.UserRedemptionRecords + s.Require().Equal(len(userRedemptionRecords), 1) + userRedemptionRecordId := userRedemptionRecords[0] + userRedemptionRecord, found := s.App.RecordsKeeper.GetUserRedemptionRecord(s.Ctx, userRedemptionRecordId) + s.Require().True(found) + + s.Require().Equal(msg.Amount, userRedemptionRecord.StTokenAmount, "redemption record sttoken amount") + s.Require().Equal(tc.expectedNativeAmount, userRedemptionRecord.NativeTokenAmount, "redemption record native amount") + s.Require().Equal(msg.Receiver, userRedemptionRecord.Receiver, "redemption record receiver") + s.Require().Equal(msg.HostZone, userRedemptionRecord.HostZoneId, "redemption record host zone") + s.Require().False(userRedemptionRecord.ClaimIsPending, "redemption record is not claimable") + s.Require().NotEqual(hostZoneUnbonding.Status, recordtypes.HostZoneUnbonding_CLAIMABLE, "host zone unbonding should NOT be marked as CLAIMABLE") +} + +func (s *KeeperTestSuite) TestRedeemStake_InvalidCreatorAddress() { + tc := s.SetupRedeemStake() + invalidMsg := tc.validMsg + + // cosmos instead of stride address + invalidMsg.Creator = "cosmos1g6qdx6kdhpf000afvvpte7hp0vnpzapuyxp8uf" + _, err := s.GetMsgServer().RedeemStake(s.Ctx, &invalidMsg) + s.Require().EqualError(err, fmt.Sprintf("creator address is invalid: %s. err: invalid Bech32 prefix; expected stride, got cosmos: invalid address", invalidMsg.Creator)) + + // invalid stride address + invalidMsg.Creator = "stride1g6qdx6kdhpf000afvvpte7hp0vnpzapuyxp8uf" + _, err = s.GetMsgServer().RedeemStake(s.Ctx, &invalidMsg) + s.Require().EqualError(err, fmt.Sprintf("creator address is invalid: %s. err: decoding bech32 failed: invalid checksum (expected 8dpmg9 got yxp8uf): invalid address", invalidMsg.Creator)) + + // empty address + invalidMsg.Creator = "" + _, err = s.GetMsgServer().RedeemStake(s.Ctx, &invalidMsg) + s.Require().EqualError(err, fmt.Sprintf("creator address is invalid: %s. err: empty address string is not allowed: invalid address", invalidMsg.Creator)) + + // wrong len address + invalidMsg.Creator = "stride1g6qdx6kdhpf000afvvpte7hp0vnpzapuyxp8ufabc" + _, err = s.GetMsgServer().RedeemStake(s.Ctx, &invalidMsg) + s.Require().EqualError(err, fmt.Sprintf("creator address is invalid: %s. err: decoding bech32 failed: invalid character not part of charset: 98: invalid address", invalidMsg.Creator)) +} + +func (s *KeeperTestSuite) TestRedeemStake_HostZoneNotFound() { + tc := s.SetupRedeemStake() + + invalidMsg := tc.validMsg + invalidMsg.HostZone = "fake_host_zone" + _, err := s.GetMsgServer().RedeemStake(s.Ctx, &invalidMsg) + + s.Require().EqualError(err, "host zone fake_host_zone not found: host zone not found") +} + +func (s *KeeperTestSuite) TestRedeemStake_RateAboveMaxThreshold() { + tc := s.SetupRedeemStake() + + hz := tc.hostZone + hz.RedemptionRate = sdkmath.LegacyNewDec(100) + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hz) + + _, err := s.GetMsgServer().RedeemStake(s.Ctx, &tc.validMsg) + s.Require().Error(err) +} + +func (s *KeeperTestSuite) TestRedeemStake_InvalidReceiverAddress() { + tc := s.SetupRedeemStake() + + invalidMsg := tc.validMsg + + // stride instead of cosmos address + invalidMsg.Receiver = "stride159atdlc3ksl50g0659w5tq42wwer334ajl7xnq" + _, err := s.GetMsgServer().RedeemStake(s.Ctx, &invalidMsg) + s.Require().EqualError(err, "invalid receiver address (invalid Bech32 prefix; expected cosmos, got stride): invalid address") + + // invalid cosmos address + invalidMsg.Receiver = "cosmos1g6qdx6kdhpf000afvvpte7hp0vnpzapuyxp8ua" + _, err = s.GetMsgServer().RedeemStake(s.Ctx, &invalidMsg) + s.Require().EqualError(err, "invalid receiver address (decoding bech32 failed: invalid checksum (expected yxp8uf got yxp8ua)): invalid address") + + // empty address + invalidMsg.Receiver = "" + _, err = s.GetMsgServer().RedeemStake(s.Ctx, &invalidMsg) + s.Require().EqualError(err, "invalid receiver address (empty address string is not allowed): invalid address") + + // wrong len address + invalidMsg.Receiver = "cosmos1g6qdx6kdhpf000afvvpte7hp0vnpzapuyxp8ufa" + _, err = s.GetMsgServer().RedeemStake(s.Ctx, &invalidMsg) + s.Require().EqualError(err, "invalid receiver address (decoding bech32 failed: invalid checksum (expected xp8ugp got xp8ufa)): invalid address") +} + +func (s *KeeperTestSuite) TestRedeemStake_RedeemMoreThanStaked() { + tc := s.SetupRedeemStake() + + invalidMsg := tc.validMsg + invalidMsg.Amount = sdkmath.NewInt(1_000_000_000_000_000) + _, err := s.GetMsgServer().RedeemStake(s.Ctx, &invalidMsg) + + s.Require().EqualError(err, fmt.Sprintf("cannot unstake an amount g.t. staked balance on host zone: %v: invalid amount", invalidMsg.Amount)) +} + +func (s *KeeperTestSuite) TestRedeemStake_NoEpochTrackerDay() { + tc := s.SetupRedeemStake() + + invalidMsg := tc.validMsg + s.App.RecordsKeeper.RemoveEpochUnbondingRecord(s.Ctx, tc.initialState.epochNumber) + _, err := s.GetMsgServer().RedeemStake(s.Ctx, &invalidMsg) + + s.Require().EqualError(err, "latest epoch unbonding record not found: epoch unbonding record not found") +} + +func (s *KeeperTestSuite) TestRedeemStake_HostZoneNoUnbondings() { + tc := s.SetupRedeemStake() + + invalidMsg := tc.validMsg + epochUnbondingRecord := recordtypes.EpochUnbondingRecord{ + EpochNumber: 1, + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{}, + } + hostZoneUnbonding := &recordtypes.HostZoneUnbonding{ + NativeTokenAmount: sdkmath.ZeroInt(), + Denom: "uatom", + HostZoneId: "NOT_GAIA", + } + epochUnbondingRecord.HostZoneUnbondings = append(epochUnbondingRecord.HostZoneUnbondings, hostZoneUnbonding) + + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, epochUnbondingRecord) + _, err := s.GetMsgServer().RedeemStake(s.Ctx, &invalidMsg) + + s.Require().EqualError(err, "host zone not found in unbondings: GAIA: host zone not registered") +} + +func (s *KeeperTestSuite) TestRedeemStake_InvalidHostAddress() { + tc := s.SetupRedeemStake() + + // Update hostzone with invalid address + badHostZone, _ := s.App.StakeibcKeeper.GetHostZone(s.Ctx, tc.validMsg.HostZone) + badHostZone.DepositAddress = "cosmosXXX" + s.App.StakeibcKeeper.SetHostZone(s.Ctx, badHostZone) + + _, err := s.GetMsgServer().RedeemStake(s.Ctx, &tc.validMsg) + s.Require().EqualError(err, "could not bech32 decode address cosmosXXX of zone with id: GAIA") +} + +func (s *KeeperTestSuite) TestRedeemStake_HaltedZone() { + tc := s.SetupRedeemStake() + + // Update hostzone with halted + haltedHostZone, _ := s.App.StakeibcKeeper.GetHostZone(s.Ctx, tc.validMsg.HostZone) + haltedHostZone.Halted = true + s.App.StakeibcKeeper.SetHostZone(s.Ctx, haltedHostZone) + + _, err := s.GetMsgServer().RedeemStake(s.Ctx, &tc.validMsg) + s.Require().EqualError(err, "host zone GAIA is halted: Halted host zone found") +} + +func (s *KeeperTestSuite) TestRedeemStake_RedemptionsDisabled() { + tc := s.SetupRedeemStake() + + // Update hostzone with halted + haltedHostZone, _ := s.App.StakeibcKeeper.GetHostZone(s.Ctx, tc.validMsg.HostZone) + haltedHostZone.RedemptionsEnabled = false + s.App.StakeibcKeeper.SetHostZone(s.Ctx, haltedHostZone) + + _, err := s.GetMsgServer().RedeemStake(s.Ctx, &tc.validMsg) + s.Require().ErrorContains(err, "redemptions disabled") +} diff --git a/x/stakeibc/keeper/redemption_rate.go b/x/stakeibc/keeper/redemption_rate.go new file mode 100644 index 00000000000..875c2b318ac --- /dev/null +++ b/x/stakeibc/keeper/redemption_rate.go @@ -0,0 +1,162 @@ +package keeper + +import ( + "encoding/json" + "fmt" + + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/utils" + icaoracletypes "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// Updates the redemption rate for each host zone +// At a high level, the redemption rate is equal to the amount of native tokens locked divided by the stTokens in existence. +// The equation is broken down further into the following sub-components: +// +// Native Tokens Locked: +// 1. Deposit Account Balance: native tokens deposited from liquid stakes, that are still living on Stride +// 2. Undelegated Balance: native tokens that have been transferred to the host zone, but have not been delegated yet +// 3. Tokenized Delegations: Delegations inherent in LSM Tokens that have not yet been converted to native stake +// 4. Native Delegations: Delegations either from native tokens, or LSM Tokens that have been detokenized +// StToken Amount: +// 1. Total Supply of the stToken +// +// Redemption Rate = +// (Deposit Account Balance + Undelegated Balance + Tokenized Delegation + Native Delegation) / (stToken Supply) +func (k Keeper) UpdateRedemptionRates(ctx sdk.Context, depositRecords []recordstypes.DepositRecord) { + k.Logger(ctx).Info("Updating Redemption Rates...") + + // Update the redemption rate for each host zone + for _, hostZone := range k.GetAllActiveHostZone(ctx) { + k.UpdateRedemptionRateForHostZone(ctx, hostZone, depositRecords) + } +} + +func (k Keeper) UpdateRedemptionRateForHostZone(ctx sdk.Context, hostZone types.HostZone, depositRecords []recordstypes.DepositRecord) { + // Gather redemption rate components + stSupply := k.bankKeeper.GetSupply(ctx, types.StAssetDenomFromHostZoneDenom(hostZone.HostDenom)).Amount + if stSupply.IsZero() { + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, + "No st%s in circulation - redemption rate is unchanged", hostZone.HostDenom)) + return + } + + depositAccountBalance := k.GetDepositAccountBalance(hostZone.ChainId, depositRecords) + undelegatedBalance := k.GetUndelegatedBalance(hostZone.ChainId, depositRecords) + tokenizedDelegation := k.GetTotalTokenizedDelegations(ctx, hostZone) + nativeDelegation := sdkmath.LegacyNewDecFromInt(hostZone.TotalDelegations) + + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, + "Redemption Rate Components - Deposit Account Balance: %v, Undelegated Balance: %v, "+ + "LSM Delegated Balance: %v, Native Delegations: %v, stToken Supply: %v", + depositAccountBalance, undelegatedBalance, tokenizedDelegation, + nativeDelegation, stSupply)) + + // Calculate the redemption rate + nativeTokensLocked := depositAccountBalance.Add(undelegatedBalance).Add(tokenizedDelegation).Add(nativeDelegation) + redemptionRate := nativeTokensLocked.Quo(sdkmath.LegacyNewDecFromInt(stSupply)) + + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, + "New Redemption Rate: %v (vs Prev Rate: %v)", redemptionRate, hostZone.RedemptionRate)) + + // Update the host zone + hostZone.LastRedemptionRate = hostZone.RedemptionRate + hostZone.RedemptionRate = redemptionRate + k.SetHostZone(ctx, hostZone) + + // If the redemption rate is outside of safety bounds, exit so the redemption rate is not pushed to the oracle + redemptionRateSafe, _ := k.IsRedemptionRateWithinSafetyBounds(ctx, hostZone) + if !redemptionRateSafe { + return + } + + // Otherwise, submit the redemption rate to the oracle + if err := k.PostRedemptionRateToOracles(ctx, hostZone.HostDenom, redemptionRate); err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Unable to send redemption rate to oracle: %s", err.Error())) + return + } +} + +// Determine the deposit account balance, representing native tokens that have been deposited +// from liquid stakes, but have not yet been transferred to the host +func (k Keeper) GetDepositAccountBalance(chainId string, depositRecords []recordstypes.DepositRecord) sdkmath.LegacyDec { + // sum on deposit records with status TRANSFER_QUEUE or TRANSFER_IN_PROGRESS + totalAmount := sdkmath.ZeroInt() + for _, depositRecord := range depositRecords { + transferStatus := (depositRecord.Status == recordstypes.DepositRecord_TRANSFER_QUEUE || + depositRecord.Status == recordstypes.DepositRecord_TRANSFER_IN_PROGRESS) + + if depositRecord.HostZoneId == chainId && transferStatus { + totalAmount = totalAmount.Add(depositRecord.Amount) + } + } + + return sdkmath.LegacyNewDecFromInt(totalAmount) +} + +// Determine the undelegated balance from the deposit records queued for staking +func (k Keeper) GetUndelegatedBalance(chainId string, depositRecords []recordstypes.DepositRecord) sdkmath.LegacyDec { + // sum on deposit records with status DELEGATION_QUEUE or DELEGATION_IN_PROGRESS + totalAmount := sdkmath.ZeroInt() + for _, depositRecord := range depositRecords { + delegationStatus := (depositRecord.Status == recordstypes.DepositRecord_DELEGATION_QUEUE || + depositRecord.Status == recordstypes.DepositRecord_DELEGATION_IN_PROGRESS) + + if depositRecord.HostZoneId == chainId && delegationStatus { + totalAmount = totalAmount.Add(depositRecord.Amount) + } + } + + return sdkmath.LegacyNewDecFromInt(totalAmount) +} + +// Returns the total delegated balance that's stored in LSM tokens +// This is used for the redemption rate calculation +// +// The relevant tokens are identified by the deposit records in status "DEPOSIT_PENDING" +// "DEPOSIT_PENDING" means the liquid staker's tokens have not been sent to Stride yet +// so they should *not* be included in the redemption rate. All other statuses indicate +// the LSM tokens have been deposited and should be included in the final calculation +// +// Each LSM token represents a delegator share so the validator's shares to tokens rate +// must be used to denominate it's value in native tokens +func (k Keeper) GetTotalTokenizedDelegations(ctx sdk.Context, hostZone types.HostZone) sdkmath.LegacyDec { + total := sdkmath.ZeroInt() + for _, deposit := range k.RecordsKeeper.GetLSMDepositsForHostZone(ctx, hostZone.ChainId) { + if deposit.Status != recordstypes.LSMTokenDeposit_DEPOSIT_PENDING { + validator, _, found := GetValidatorFromAddress(hostZone.Validators, deposit.ValidatorAddress) + if !found { + k.Logger(ctx).Error(fmt.Sprintf("Validator %s found in LSMTokenDeposit but no longer exists", deposit.ValidatorAddress)) + continue + } + liquidStakedShares := deposit.Amount + liquidStakedTokens := sdkmath.LegacyNewDecFromInt(liquidStakedShares).Mul(validator.SharesToTokensRate) + total = total.Add(liquidStakedTokens.TruncateInt()) + } + } + + return sdkmath.LegacyNewDecFromInt(total) +} + +// Pushes a redemption rate update to the ICA oracle +func (k Keeper) PostRedemptionRateToOracles(ctx sdk.Context, hostDenom string, redemptionRate sdkmath.LegacyDec) error { + stDenom := types.StAssetDenomFromHostZoneDenom(hostDenom) + attributes, err := json.Marshal(icaoracletypes.RedemptionRateAttributes{ + SttokenDenom: stDenom, + }) + if err != nil { + return err + } + + // Metric Key is of format: {stToken}_redemption_rate + metricKey := fmt.Sprintf("%s_%s", stDenom, icaoracletypes.MetricType_RedemptionRate) + metricValue := redemptionRate.String() + metricType := icaoracletypes.MetricType_RedemptionRate + k.ICAOracleKeeper.QueueMetricUpdate(ctx, metricKey, metricValue, metricType, string(attributes)) + + return nil +} diff --git a/x/stakeibc/keeper/redemption_rate_test.go b/x/stakeibc/keeper/redemption_rate_test.go new file mode 100644 index 00000000000..aef8deb7bf1 --- /dev/null +++ b/x/stakeibc/keeper/redemption_rate_test.go @@ -0,0 +1,340 @@ +package keeper_test + +import ( + "math/rand" + "strconv" + + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + _ "github.com/stretchr/testify/suite" + + minttypes "github.com/osmosis-labs/osmosis/v27/x/mint/types" + recordtypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +type UpdateRedemptionRateTestCase struct { + totalDelegation sdkmath.Int + undelegatedBal sdkmath.Int + justDepositedNative sdkmath.Int + justDepositedLSM sdkmath.Int + stSupply sdkmath.Int + initialRedemptionRate sdkmath.LegacyDec +} + +// Helper function to look up the redemption rate and check it against expectations +func (s *KeeperTestSuite) checkRedemptionRateAfterUpdate(expectedRedemptionRate sdkmath.LegacyDec) { + hostZone, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, HostChainId) + s.Require().True(found, "host zone should have been found but was not") + s.Require().Equal(expectedRedemptionRate, hostZone.RedemptionRate, "redemption rate") +} + +func (s *KeeperTestSuite) SetupUpdateRedemptionRates(tc UpdateRedemptionRateTestCase) []recordtypes.DepositRecord { + // add some deposit records with status STAKE + // to comprise the undelegated delegation account balance i.e. "to be staked" + toBeStakedDepositRecord := recordtypes.DepositRecord{ + HostZoneId: HostChainId, + Amount: tc.undelegatedBal, + Status: recordtypes.DepositRecord_DELEGATION_QUEUE, + } + s.App.RecordsKeeper.AppendDepositRecord(s.Ctx, toBeStakedDepositRecord) + + // add a balance to the stakeibc module account (via records) + // to comprise the stakeibc deposit account balance i.e. "to be transferred" + toBeTransferedDepositRecord := recordtypes.DepositRecord{ + HostZoneId: HostChainId, + Amount: tc.justDepositedNative, + Status: recordtypes.DepositRecord_TRANSFER_QUEUE, + } + s.App.RecordsKeeper.AppendDepositRecord(s.Ctx, toBeTransferedDepositRecord) + + // add an LSMTokenDeposit to represent an LSMLiquidStake that has not yet been detokenized + lsmTokenDeposit := recordtypes.LSMTokenDeposit{ + ChainId: HostChainId, + Amount: tc.justDepositedLSM, + Status: recordtypes.LSMTokenDeposit_TRANSFER_IN_PROGRESS, + ValidatorAddress: ValAddress, + } + s.App.RecordsKeeper.SetLSMTokenDeposit(s.Ctx, lsmTokenDeposit) + + // set the stSupply by minting + supply := sdk.NewCoins(sdk.NewCoin(StAtom, tc.stSupply)) + err := s.App.BankKeeper.MintCoins(s.Ctx, minttypes.ModuleName, supply) + s.Require().NoError(err) + + // set the staked balance on the host zone + hostZone := types.HostZone{ + ChainId: HostChainId, + HostDenom: Atom, + TotalDelegations: tc.totalDelegation, + RedemptionRate: tc.initialRedemptionRate, + Validators: []*types.Validator{{Address: ValAddress, SharesToTokensRate: sdkmath.LegacyOneDec()}}, + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + return []recordtypes.DepositRecord{toBeStakedDepositRecord, toBeTransferedDepositRecord} +} + +func (s *KeeperTestSuite) TestUpdateRedemptionRatesSuccessful() { + depositRecords := s.SetupUpdateRedemptionRates(UpdateRedemptionRateTestCase{ + totalDelegation: sdkmath.NewInt(2), + undelegatedBal: sdkmath.NewInt(3), + justDepositedNative: sdkmath.NewInt(4), + justDepositedLSM: sdkmath.NewInt(5), + stSupply: sdkmath.NewInt(10), + initialRedemptionRate: sdkmath.LegacyNewDec(1), + }) + + s.App.StakeibcKeeper.UpdateRedemptionRates(s.Ctx, depositRecords) + + // 2 + 3 + 4 + 5 / 10 = 14 / 10 = 1.4 + expectedNewRate := sdkmath.LegacyMustNewDecFromStr("1.4") + s.checkRedemptionRateAfterUpdate(expectedNewRate) +} + +func (s *KeeperTestSuite) TestUpdateRedemptionRate_ZeroStAssets() { + depositRecords := s.SetupUpdateRedemptionRates(UpdateRedemptionRateTestCase{ + totalDelegation: sdkmath.NewInt(2), + undelegatedBal: sdkmath.NewInt(3), + justDepositedNative: sdkmath.NewInt(4), + justDepositedLSM: sdkmath.NewInt(5), + stSupply: sdkmath.ZeroInt(), + initialRedemptionRate: sdkmath.LegacyNewDec(1), + }) + + s.App.StakeibcKeeper.UpdateRedemptionRates(s.Ctx, depositRecords) + + expectedRedemptionRate := sdkmath.LegacyNewDec(1) + s.checkRedemptionRateAfterUpdate(expectedRedemptionRate) +} + +func (s *KeeperTestSuite) TestUpdateRedemptionRate_ZeroNativeAssets() { + depositRecords := s.SetupUpdateRedemptionRates(UpdateRedemptionRateTestCase{ + totalDelegation: sdkmath.ZeroInt(), + undelegatedBal: sdkmath.ZeroInt(), + justDepositedNative: sdkmath.ZeroInt(), + justDepositedLSM: sdkmath.ZeroInt(), + stSupply: sdkmath.NewInt(10), + initialRedemptionRate: sdkmath.LegacyNewDec(1), + }) + + s.App.StakeibcKeeper.UpdateRedemptionRates(s.Ctx, depositRecords) + + expectedRedemptionRate := sdkmath.LegacyZeroDec() + s.checkRedemptionRateAfterUpdate(expectedRedemptionRate) +} + +func (s *KeeperTestSuite) TestUpdateRedemptionRate_NoDepositAccountRecords() { + depositRecords := s.SetupUpdateRedemptionRates(UpdateRedemptionRateTestCase{ + totalDelegation: sdkmath.NewInt(3), + undelegatedBal: sdkmath.NewInt(4), + justDepositedNative: sdkmath.NewInt(5), // should be ignored from filter below + justDepositedLSM: sdkmath.NewInt(6), + stSupply: sdkmath.NewInt(10), + initialRedemptionRate: sdkmath.LegacyNewDec(1), + }) + + // filter out the TRANSFER_QUEUE record from the records when updating the redemption rate + filteredRecords := []recordtypes.DepositRecord{} + for _, record := range depositRecords { + if record.Status != recordtypes.DepositRecord_TRANSFER_QUEUE { + filteredRecords = append(filteredRecords, record) + } + } + s.App.StakeibcKeeper.UpdateRedemptionRates(s.Ctx, filteredRecords) + + // 3 + 4 + 6 / 10 = 13 / 10 = 1.3 + expectedNewRate := sdkmath.LegacyMustNewDecFromStr("1.3") + s.checkRedemptionRateAfterUpdate(expectedNewRate) +} + +func (s *KeeperTestSuite) TestUpdateRedemptionRate_NoStakeDepositRecords() { + depositRecords := s.SetupUpdateRedemptionRates(UpdateRedemptionRateTestCase{ + totalDelegation: sdkmath.NewInt(3), + undelegatedBal: sdkmath.NewInt(4), // should be ignored from filter below + justDepositedNative: sdkmath.NewInt(5), + justDepositedLSM: sdkmath.NewInt(6), + stSupply: sdkmath.NewInt(10), + initialRedemptionRate: sdkmath.LegacyNewDec(1), + }) + + // filter out the DELEGATION_QUEUE record from the records when updating the redemption rate + filteredRecords := []recordtypes.DepositRecord{} + for _, record := range depositRecords { + if record.Status != recordtypes.DepositRecord_DELEGATION_QUEUE { + filteredRecords = append(filteredRecords, record) + } + } + s.App.StakeibcKeeper.UpdateRedemptionRates(s.Ctx, filteredRecords) + + // 3 + 5 + 6 / 10 = 14 / 10 = 1.4 + expectedNewRate := sdkmath.LegacyMustNewDecFromStr("1.4") + s.checkRedemptionRateAfterUpdate(expectedNewRate) +} + +func (s *KeeperTestSuite) TestUpdateRedemptionRate_NoTotalDelegation() { + depositRecords := s.SetupUpdateRedemptionRates(UpdateRedemptionRateTestCase{ + totalDelegation: sdkmath.ZeroInt(), + undelegatedBal: sdkmath.NewInt(3), + justDepositedNative: sdkmath.NewInt(4), + justDepositedLSM: sdkmath.NewInt(5), + stSupply: sdkmath.NewInt(10), + initialRedemptionRate: sdkmath.LegacyNewDec(1), + }) + + s.App.StakeibcKeeper.UpdateRedemptionRates(s.Ctx, depositRecords) + + // 3 + 4 + 5 / 10 = 12 / 10 = 1.2 + expectedNewRate := sdkmath.LegacyMustNewDecFromStr("1.2") + s.checkRedemptionRateAfterUpdate(expectedNewRate) +} + +func (s *KeeperTestSuite) TestUpdateRedemptionRate_RandomInitialRedemptionRate() { + genRandUintBelowMax := func(max int) int64 { + min := int(1) + n := 1 + rand.Intn(max-min+1) + return int64(n) + } + + // redemption rate random number, biased to be [1,2) + max := 1_000_000 + initialRedemptionRate := sdkmath.LegacyNewDec(genRandUintBelowMax(max)).Quo(sdkmath.LegacyNewDec(genRandUintBelowMax(max / 2))) + + depositRecords := s.SetupUpdateRedemptionRates(UpdateRedemptionRateTestCase{ + totalDelegation: sdkmath.NewInt(2), + undelegatedBal: sdkmath.NewInt(3), + justDepositedNative: sdkmath.NewInt(4), + justDepositedLSM: sdkmath.NewInt(5), + stSupply: sdkmath.NewInt(10), + initialRedemptionRate: initialRedemptionRate, + }) + + s.App.StakeibcKeeper.UpdateRedemptionRates(s.Ctx, depositRecords) + + // 2 + 3 + 4 + 5 / 10 = 14 / 10 = 1.4 + expectedNewRate := sdkmath.LegacyMustNewDecFromStr("1.4") + s.checkRedemptionRateAfterUpdate(expectedNewRate) +} + +// Tests GetDepositAccountBalance and GetUndelegatedBalance +func (s *KeeperTestSuite) TestGetRedemptionRate_DepositRecords() { + // Build combinations of transfer deposit records + toBeTransferedDepositRecords := []recordtypes.DepositRecord{ + // TRANSFER_QUEUE Total: 1 + 2 + 3 = 6 + {HostZoneId: HostChainId, Status: recordtypes.DepositRecord_TRANSFER_QUEUE, Amount: sdkmath.NewInt(1)}, + {HostZoneId: HostChainId, Status: recordtypes.DepositRecord_TRANSFER_QUEUE, Amount: sdkmath.NewInt(2)}, + {HostZoneId: HostChainId, Status: recordtypes.DepositRecord_TRANSFER_QUEUE, Amount: sdkmath.NewInt(3)}, + + // TRANSFER_IN_PROGRESS Total: 4 + 5 + 6 = 15 + {HostZoneId: HostChainId, Status: recordtypes.DepositRecord_TRANSFER_IN_PROGRESS, Amount: sdkmath.NewInt(4)}, + {HostZoneId: HostChainId, Status: recordtypes.DepositRecord_TRANSFER_IN_PROGRESS, Amount: sdkmath.NewInt(5)}, + {HostZoneId: HostChainId, Status: recordtypes.DepositRecord_TRANSFER_IN_PROGRESS, Amount: sdkmath.NewInt(6)}, + + // Different host zone ID - should be ignored + {HostZoneId: "different", Status: recordtypes.DepositRecord_TRANSFER_QUEUE, Amount: sdkmath.NewInt(1)}, + {HostZoneId: "different", Status: recordtypes.DepositRecord_TRANSFER_QUEUE, Amount: sdkmath.NewInt(2)}, + {HostZoneId: "different", Status: recordtypes.DepositRecord_TRANSFER_IN_PROGRESS, Amount: sdkmath.NewInt(4)}, + {HostZoneId: "different", Status: recordtypes.DepositRecord_TRANSFER_IN_PROGRESS, Amount: sdkmath.NewInt(5)}, + } + expectedJustDepositedBalance := int64(1 + 2 + 3 + 4 + 5 + 6) // 6 + 15 = 21 + + // Build combinations of delegation deposit records + toBeStakedDepositRecords := []recordtypes.DepositRecord{ + // DELEGATION_QUEUE Total: 7 + 8 + 9 = 24 + {HostZoneId: HostChainId, Status: recordtypes.DepositRecord_DELEGATION_QUEUE, Amount: sdkmath.NewInt(7)}, + {HostZoneId: HostChainId, Status: recordtypes.DepositRecord_DELEGATION_QUEUE, Amount: sdkmath.NewInt(8)}, + {HostZoneId: HostChainId, Status: recordtypes.DepositRecord_DELEGATION_QUEUE, Amount: sdkmath.NewInt(9)}, + + // DELEGATION_IN_PROGRESS Total: 10 + 11 + 12 = 33 + {HostZoneId: HostChainId, Status: recordtypes.DepositRecord_DELEGATION_IN_PROGRESS, Amount: sdkmath.NewInt(10)}, + {HostZoneId: HostChainId, Status: recordtypes.DepositRecord_DELEGATION_IN_PROGRESS, Amount: sdkmath.NewInt(11)}, + {HostZoneId: HostChainId, Status: recordtypes.DepositRecord_DELEGATION_IN_PROGRESS, Amount: sdkmath.NewInt(12)}, + + // Different host zone ID - should be ignored + {HostZoneId: "different", Status: recordtypes.DepositRecord_DELEGATION_QUEUE, Amount: sdkmath.NewInt(7)}, + {HostZoneId: "different", Status: recordtypes.DepositRecord_DELEGATION_QUEUE, Amount: sdkmath.NewInt(8)}, + {HostZoneId: "different", Status: recordtypes.DepositRecord_DELEGATION_IN_PROGRESS, Amount: sdkmath.NewInt(10)}, + {HostZoneId: "different", Status: recordtypes.DepositRecord_DELEGATION_IN_PROGRESS, Amount: sdkmath.NewInt(11)}, + } + expectedUndelegatedBalance := int64(7 + 8 + 9 + 10 + 11 + 12) // 24 + 33 = 57 + + // Use concatenation of all deposit records when running tests + allDepositRecords := append(toBeTransferedDepositRecords, toBeStakedDepositRecords...) + + // Check the transfer records + actualJustDepositedBalance := s.App.StakeibcKeeper.GetDepositAccountBalance(HostChainId, allDepositRecords) + s.Require().Equal(expectedJustDepositedBalance, actualJustDepositedBalance.TruncateInt64(), "deposit account balance") + + // Check the delegation records + actualUndelegatedBalance := s.App.StakeibcKeeper.GetUndelegatedBalance(HostChainId, allDepositRecords) + s.Require().Equal(expectedUndelegatedBalance, actualUndelegatedBalance.TruncateInt64(), "undelegated balance") +} + +func (s *KeeperTestSuite) TestGetTokenizedDelegation() { + transferQueue := recordtypes.LSMTokenDeposit_TRANSFER_QUEUE + transferInProgress := recordtypes.LSMTokenDeposit_TRANSFER_IN_PROGRESS + detokenizationQueue := recordtypes.LSMTokenDeposit_DETOKENIZATION_QUEUE + detokenizationInProgress := recordtypes.LSMTokenDeposit_DETOKENIZATION_IN_PROGRESS + transferFailed := recordtypes.LSMTokenDeposit_TRANSFER_FAILED + detokenizationFailed := recordtypes.LSMTokenDeposit_DETOKENIZATION_FAILED + + validators := []*types.Validator{ + {Address: "valA", SharesToTokensRate: sdkmath.LegacyOneDec()}, + {Address: "valB", SharesToTokensRate: sdkmath.LegacyMustNewDecFromStr("0.75")}, + {Address: "valC", SharesToTokensRate: sdkmath.LegacyMustNewDecFromStr("0.5")}, + } + + // Total: 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 65 + lsmDeposits := []recordtypes.LSMTokenDeposit{ + // ValidatorA SharesToTokens Rate 1.0 + {ChainId: HostChainId, Status: transferInProgress, Amount: sdkmath.NewInt(1), ValidatorAddress: "valA"}, // 1 * 1.0 = 1 + {ChainId: HostChainId, Status: transferInProgress, Amount: sdkmath.NewInt(2), ValidatorAddress: "valA"}, // 2 * 1.0 = 2 + + {ChainId: HostChainId, Status: detokenizationInProgress, Amount: sdkmath.NewInt(3), ValidatorAddress: "valA"}, // 3 * 1.0 = 3 + {ChainId: HostChainId, Status: detokenizationInProgress, Amount: sdkmath.NewInt(4), ValidatorAddress: "valA"}, // 4 * 1.0 = 4 + + // ValidatorB SharesToTokens Rate 0.75 + {ChainId: HostChainId, Status: transferQueue, Amount: sdkmath.NewInt(7), ValidatorAddress: "valB"}, // 7 * 0.75 = 5.25 (5) + {ChainId: HostChainId, Status: transferQueue, Amount: sdkmath.NewInt(9), ValidatorAddress: "valB"}, // 9 * 0.75 = 6.75 (6) + + {ChainId: HostChainId, Status: detokenizationQueue, Amount: sdkmath.NewInt(10), ValidatorAddress: "valB"}, // 10 * 0.75 = 7.5 (7) + {ChainId: HostChainId, Status: detokenizationQueue, Amount: sdkmath.NewInt(11), ValidatorAddress: "valB"}, // 11 * 0.75 = 8.25 (8) + + // ValidatorC SharesToTokens Rate 0.50 + {ChainId: HostChainId, Status: transferFailed, Amount: sdkmath.NewInt(18), ValidatorAddress: "valC"}, // 18 * 0.5 = 9 + {ChainId: HostChainId, Status: transferFailed, Amount: sdkmath.NewInt(20), ValidatorAddress: "valC"}, // 20 * 0.5 = 10 + + {ChainId: HostChainId, Status: detokenizationFailed, Amount: sdkmath.NewInt(22), ValidatorAddress: "valC"}, // 22 * 0.5 = 11 + {ChainId: HostChainId, Status: detokenizationFailed, Amount: sdkmath.NewInt(24), ValidatorAddress: "valC"}, // 24 * 0.5 = 12 + + // Status DEPOSIT_PENDING - should be ignored + {ChainId: HostChainId, Status: recordtypes.LSMTokenDeposit_DEPOSIT_PENDING, Amount: sdkmath.NewInt(11)}, + {ChainId: HostChainId, Status: recordtypes.LSMTokenDeposit_DEPOSIT_PENDING, Amount: sdkmath.NewInt(12)}, + + // Different chain ID - should be ignored + {ChainId: "different", Status: transferInProgress, Amount: sdkmath.NewInt(1)}, + {ChainId: "different", Status: detokenizationQueue, Amount: sdkmath.NewInt(3)}, + {ChainId: "different", Status: detokenizationInProgress, Amount: sdkmath.NewInt(5)}, + {ChainId: "different", Status: transferFailed, Amount: sdkmath.NewInt(7)}, + {ChainId: "different", Status: detokenizationFailed, Amount: sdkmath.NewInt(9)}, + + // Non-existent validator - should be ignored + {ChainId: HostChainId, Status: transferInProgress, Amount: sdkmath.NewInt(1)}, + {ChainId: HostChainId, Status: detokenizationQueue, Amount: sdkmath.NewInt(3)}, + {ChainId: HostChainId, Status: detokenizationInProgress, Amount: sdkmath.NewInt(5)}, + {ChainId: HostChainId, Status: transferFailed, Amount: sdkmath.NewInt(7)}, + {ChainId: HostChainId, Status: detokenizationFailed, Amount: sdkmath.NewInt(9)}, + } + expectedTokenizedDelegation := int64(1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12) + + // Store deposits + for i, deposit := range lsmDeposits { + deposit.Denom = strconv.Itoa(i) + s.App.RecordsKeeper.SetLSMTokenDeposit(s.Ctx, deposit) + } + + // Check the total delegation from LSM Tokens + hostZone := types.HostZone{ChainId: HostChainId, Validators: validators} + actualTokenizedDelegation := s.App.StakeibcKeeper.GetTotalTokenizedDelegations(s.Ctx, hostZone) + s.Require().Equal(expectedTokenizedDelegation, actualTokenizedDelegation.TruncateInt64()) +} diff --git a/x/stakeibc/keeper/redemption_sweep.go b/x/stakeibc/keeper/redemption_sweep.go new file mode 100644 index 00000000000..0411aa22bc8 --- /dev/null +++ b/x/stakeibc/keeper/redemption_sweep.go @@ -0,0 +1,137 @@ +package keeper + +import ( + "fmt" + + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + "github.com/cosmos/gogoproto/proto" + + "github.com/osmosis-labs/osmosis/v27/utils" + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// Gets the total unbonded amount for the host zone that has finished unbonding +func (k Keeper) GetTotalRedemptionSweepAmountAndRecordIds( + ctx sdk.Context, + chainId string, + hostBlockTime uint64, +) (totalSweepAmount sdkmath.Int, unbondingRecordIds []uint64) { + // Sum the total unbonded amount for each unbonding record + totalSweepAmount = sdkmath.ZeroInt() + for _, epochUnbondingRecord := range k.RecordsKeeper.GetAllEpochUnbondingRecord(ctx) { + // Get all the unbondings associated with the epoch + host zone pair + hostZoneUnbonding, found := k.RecordsKeeper.GetHostZoneUnbondingByChainId(ctx, epochUnbondingRecord.EpochNumber, chainId) + if !found { + continue + } + + k.Logger(ctx).Info(utils.LogWithHostZone(chainId, "Epoch %d - Status: %s, Amount: %v, Unbonding Time: %d, Block Time: %d", + epochUnbondingRecord.EpochNumber, hostZoneUnbonding.Status.String(), + hostZoneUnbonding.NativeTokenAmount, hostZoneUnbonding.UnbondingTime, hostBlockTime)) + + // If the unbonding period has elapsed, then we can send the ICA call to sweep this + // hostZone's unbondings to the redemption account (in a batch). + // Verify: + // 1. the unbonding time is set (g.t. 0) + // 2. the unbonding time is less than the current block time + // 3. the host zone is in the EXIT_TRANSFER_QUEUE state, meaning it's ready to be transferred + inTransferQueue := hostZoneUnbonding.Status == recordstypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE + validUnbondingTime := hostZoneUnbonding.UnbondingTime > 0 && hostZoneUnbonding.UnbondingTime < hostBlockTime + if inTransferQueue && validUnbondingTime { + k.Logger(ctx).Info(utils.LogWithHostZone(chainId, " %v%s included in sweep", hostZoneUnbonding.NativeTokenAmount, hostZoneUnbonding.Denom)) + + totalSweepAmount = totalSweepAmount.Add(hostZoneUnbonding.NativeTokenAmount) + unbondingRecordIds = append(unbondingRecordIds, epochUnbondingRecord.EpochNumber) + } + } + + return totalSweepAmount, unbondingRecordIds +} + +// Batch transfers any unbonded tokens from the delegation account to the redemption account +func (k Keeper) SweepUnbondedTokensForHostZone(ctx sdk.Context, hostZone types.HostZone) error { + chainId := hostZone.ChainId + k.Logger(ctx).Info(utils.LogWithHostZone(chainId, "Sweeping unbonded tokens")) + + // Confirm the delegation (destination) and redemption (source) accounts are registered + if hostZone.DelegationIcaAddress == "" { + return errorsmod.Wrapf(types.ErrICAAccountNotFound, "no delegation account found for %s", chainId) + } + if hostZone.RedemptionIcaAddress == "" { + return errorsmod.Wrapf(types.ErrICAAccountNotFound, "no redemption account found for %s", chainId) + } + + // Get latest blockTime from light client + hostBlockTime, err := k.GetLightClientTime(ctx, hostZone.ConnectionId) + if err != nil { + return errorsmod.Wrapf(err, "could not get light client block time for host zone") + } + + // Determine the total unbonded amount that has finished unbonding + totalSweepAmount, epochUnbondingRecordIds := k.GetTotalRedemptionSweepAmountAndRecordIds(ctx, chainId, hostBlockTime) + + // If we have any amount to sweep, then we can send the ICA call to sweep them + if totalSweepAmount.LTE(sdkmath.ZeroInt()) { + k.Logger(ctx).Info(utils.LogWithHostZone(chainId, "No tokens ready for sweep")) + return nil + } + k.Logger(ctx).Info(utils.LogWithHostZone(chainId, "Batch transferring %v to host zone", totalSweepAmount)) + + // Build transfer message to transfer from the delegation account to redemption account + sweepCoin := sdk.NewCoin(hostZone.HostDenom, totalSweepAmount) + msgs := []proto.Message{ + &banktypes.MsgSend{ + FromAddress: hostZone.DelegationIcaAddress, + ToAddress: hostZone.RedemptionIcaAddress, + Amount: sdk.NewCoins(sweepCoin), + }, + } + k.Logger(ctx).Info(utils.LogWithHostZone(chainId, "Preparing MsgSend from Delegation Account to Redemption Account")) + + // Store the epoch numbers in the callback to identify the epoch unbonding records + redemptionCallback := types.RedemptionCallback{ + HostZoneId: chainId, + EpochUnbondingRecordIds: epochUnbondingRecordIds, + } + marshalledCallbackArgs, err := proto.Marshal(&redemptionCallback) + if err != nil { + return errorsmod.Wrapf(err, "unable to marshal redemption callback") + } + + // Send the bank send ICA + _, err = k.SubmitTxsStrideEpoch(ctx, hostZone.ConnectionId, msgs, types.ICAAccountType_DELEGATION, ICACallbackID_Redemption, marshalledCallbackArgs) + if err != nil { + return errorsmod.Wrapf(err, "unable to submit redemption ICA for %s", chainId) + } + k.Logger(ctx).Info(utils.LogWithHostZone(chainId, "ICA MsgSend Successfully Sent")) + + // Update the host zone unbonding records to status IN_PROGRESS + err = k.RecordsKeeper.SetHostZoneUnbondingStatus(ctx, chainId, epochUnbondingRecordIds, recordstypes.HostZoneUnbonding_EXIT_TRANSFER_IN_PROGRESS) + if err != nil { + return err + } + + EmitRedemptionSweepEvent(ctx, hostZone, totalSweepAmount) + + return nil +} + +// Sends all unbonded tokens that have finished unbonding to the redemption account +// Each host zone acts atomically - if an error is thrown, the state changes are discarded +func (k Keeper) SweepUnbondedTokensAllHostZones(ctx sdk.Context) { + k.Logger(ctx).Info("Sweeping All Unbonded Tokens...") + + for _, hostZone := range k.GetAllActiveHostZone(ctx) { + err := utils.ApplyFuncIfNoError(ctx, func(ctx sdk.Context) error { + return k.SweepUnbondedTokensForHostZone(ctx, hostZone) + }) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Error initiating redemption sweep for host zone %s: %s", hostZone.ChainId, err.Error())) + continue + } + } +} diff --git a/x/stakeibc/keeper/redemption_sweep_test.go b/x/stakeibc/keeper/redemption_sweep_test.go new file mode 100644 index 00000000000..0afe10f933c --- /dev/null +++ b/x/stakeibc/keeper/redemption_sweep_test.go @@ -0,0 +1,356 @@ +package keeper_test + +import ( + "time" + + sdkmath "cosmossdk.io/math" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + recordtypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +type SweepUnbondedTokensTestCase struct { + epochUnbondingRecords []recordtypes.EpochUnbondingRecord + hostZones []types.HostZone + delegationChannelID string + delegationPortID string + channelStartSequence uint64 +} + +func (s *KeeperTestSuite) SetupSweepUnbondedTokens() SweepUnbondedTokensTestCase { + delegationChannelId, delegationPortId := s.CreateICAChannel("GAIA.DELEGATION") + + // Add gaia and osmo host zones + hostZones := []types.HostZone{ + { + ChainId: HostChainId, + HostDenom: Atom, + UnbondingPeriod: 14, + DelegationIcaAddress: "cosmos_DELEGATION", + RedemptionIcaAddress: "cosmos_REDEMPTION", + ConnectionId: ibctesting.FirstConnectionID, + }, + { + // the same connection is used for osmo so we don't have to + // mock out a separate channel + ChainId: OsmoChainId, + HostDenom: Osmo, + UnbondingPeriod: 21, + DelegationIcaAddress: "osmo_DELEGATION", + RedemptionIcaAddress: "osmo_REDEMPTION", + ConnectionId: ibctesting.FirstConnectionID, + }, + } + for _, hostZone := range hostZones { + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + } + + // Add epoch tracker to determine ICA timeout + dayEpochTracker := types.EpochTracker{ + EpochIdentifier: epochtypes.STRIDE_EPOCH, + EpochNumber: 1, + NextEpochStartTime: uint64(s.Coordinator.CurrentTime.UnixNano() + 30_000_000_000), // dictates timeouts + } + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, dayEpochTracker) + + // Add epoch unbonding records that finished unbonding 1 minute ago + unbondingTime := uint64(s.Ctx.BlockTime().Add(-1 * time.Minute).UnixNano()) + epochUnbondingRecords := []recordtypes.EpochUnbondingRecord{ + { + EpochNumber: 1, + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{ + { + HostZoneId: HostChainId, + NativeTokenAmount: sdkmath.NewInt(1_000_000), + Status: recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE, + UnbondingTime: unbondingTime, + }, + { + HostZoneId: OsmoChainId, + NativeTokenAmount: sdkmath.NewInt(2_000_000), + Status: recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE, + UnbondingTime: unbondingTime, + }, + }, + }, + { + EpochNumber: 2, + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{ + { + HostZoneId: HostChainId, + NativeTokenAmount: sdkmath.NewInt(3_000_000), + Status: recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE, + UnbondingTime: unbondingTime, + }, + { + HostZoneId: OsmoChainId, + NativeTokenAmount: sdkmath.NewInt(4_000_000), + Status: recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE, + UnbondingTime: unbondingTime, + }, + }, + }, + } + for _, epochUnbondingRecord := range epochUnbondingRecords { + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, epochUnbondingRecord) + } + + // Get the sequence number before sweep ICAs are sent to confirm it increments after the ICA + startSequence, found := s.App.IBCKeeper.ChannelKeeper.GetNextSequenceSend(s.Ctx, delegationPortId, delegationChannelId) + s.Require().True(found, "sequence number not found before transfer") + + return SweepUnbondedTokensTestCase{ + epochUnbondingRecords: epochUnbondingRecords, + hostZones: hostZones, + delegationChannelID: delegationChannelId, + delegationPortID: delegationPortId, + channelStartSequence: startSequence, + } +} + +func (s *KeeperTestSuite) TestSweepUnbondedTokensForHostZone_Successful() { + tc := s.SetupSweepUnbondedTokens() + hostZone := tc.hostZones[0] + + // Call redemption sweep + err := s.App.StakeibcKeeper.SweepUnbondedTokensForHostZone(s.Ctx, hostZone) + s.Require().NoError(err, "no error expected when sweeping") + + // Confirm ICA was submitted (by checking sequence number was incremented) + endSequence, found := s.App.IBCKeeper.ChannelKeeper.GetNextSequenceSend(s.Ctx, tc.delegationPortID, tc.delegationChannelID) + s.Require().True(found, "sequence number not found after after redemption ICA") + s.Require().Equal(tc.channelStartSequence+1, endSequence, "tx sequence number after redemption ICA") + + // Confirm callback data was stored + allCallbackData := s.App.IcacallbacksKeeper.GetAllCallbackData(s.Ctx) + s.Require().Len(allCallbackData, 1, "length of callback data") + + redemptionCallback, err := s.App.StakeibcKeeper.UnmarshalRedemptionCallbackArgs(s.Ctx, allCallbackData[0].CallbackArgs) + s.Require().NoError(err, "no error expected when unmarshaling redemption callback") + + s.Require().Equal(HostChainId, redemptionCallback.HostZoneId, "callback chain ID") + s.Require().Equal([]uint64{1, 2}, redemptionCallback.EpochUnbondingRecordIds, "callback epoch unbonding IDs") + + // Confirm epoch unbonding record status was updated + epochUnbondingRecords := s.App.RecordsKeeper.GetAllEpochUnbondingRecord(s.Ctx) + for _, epochUnbondingRecord := range epochUnbondingRecords { + for _, hostZoneUnbondingRecord := range epochUnbondingRecord.HostZoneUnbondings { + expectedStatus := recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE.String() + if hostZoneUnbondingRecord.HostZoneId == HostChainId { + expectedStatus = recordtypes.HostZoneUnbonding_EXIT_TRANSFER_IN_PROGRESS.String() + } + s.Require().Equal(expectedStatus, hostZoneUnbondingRecord.Status.String(), + "epoch unbonding record status for record %d and host zone %s", + epochUnbondingRecord.EpochNumber, hostZoneUnbondingRecord.HostZoneId) + } + } + + // Confirm sweep amount was correct + s.CheckEventValueEmitted(types.EventTypeRedemptionSweep, types.AttributeKeyHostZone, HostChainId) + s.CheckEventValueEmitted(types.EventTypeRedemptionSweep, types.AttributeKeySweptAmount, "4000000") +} + +func (s *KeeperTestSuite) TestSweepUnbondedTokensForHostZone_MissingDelegationAccount() { + tc := s.SetupSweepUnbondedTokens() + hostZone := tc.hostZones[0] + + // Remove the delegation account from the host chain, it should cause the redemption to fail + hostZone.DelegationIcaAddress = "" + err := s.App.StakeibcKeeper.SweepUnbondedTokensForHostZone(s.Ctx, hostZone) + s.Require().ErrorContains(err, "no delegation account found") +} + +func (s *KeeperTestSuite) TestSweepUnbondedTokensForHostZone_MissingRedemptionAccount() { + tc := s.SetupSweepUnbondedTokens() + hostZone := tc.hostZones[0] + + // Remove the redemption account from the host chain, it should cause the redemption to fail + hostZone.RedemptionIcaAddress = "" + err := s.App.StakeibcKeeper.SweepUnbondedTokensForHostZone(s.Ctx, hostZone) + s.Require().ErrorContains(err, "no redemption account found") +} + +func (s *KeeperTestSuite) TestSweepUnbondedTokensForHostZone_FailedToGetLightClientTime() { + tc := s.SetupSweepUnbondedTokens() + hostZone := tc.hostZones[0] + + // Change the connection ID on the host zone so that the light client time cannot be found + // It should cause the redemption to fail + hostZone.ConnectionId = "invalid-connection-id" + err := s.App.StakeibcKeeper.SweepUnbondedTokensForHostZone(s.Ctx, hostZone) + s.Require().ErrorContains(err, "could not get light client block time for host zone") +} + +func (s *KeeperTestSuite) TestSweepUnbondedTokensAllHostZones_Successful() { + // tests a successful sweep to both gaia and osmo + s.SetupSweepUnbondedTokens() + + // Sweep for both hosts + s.App.StakeibcKeeper.SweepUnbondedTokensAllHostZones(s.Ctx) + + // An event should be emitted for each if they were successful + s.CheckEventValueEmitted(types.EventTypeRedemptionSweep, types.AttributeKeyHostZone, HostChainId) + s.CheckEventValueEmitted(types.EventTypeRedemptionSweep, types.AttributeKeyHostZone, OsmoChainId) +} + +func (s *KeeperTestSuite) TestSweepUnbondedTokensAllHostZones_GaiaSuccessful() { + s.SetupSweepUnbondedTokens() + + // Remove the osmo epoch unbonding records so that there is nothing to sweep + for _, epochUnbondingRecord := range s.App.RecordsKeeper.GetAllEpochUnbondingRecord(s.Ctx) { + for _, hostZoneUnbondingRecord := range epochUnbondingRecord.HostZoneUnbondings { + if hostZoneUnbondingRecord.HostZoneId == OsmoChainId { + hostZoneUnbondingRecord.NativeTokenAmount = sdkmath.ZeroInt() + } + } + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, epochUnbondingRecord) + } + + // Sweep for both hosts (only gaia should submit an ICA) + s.App.StakeibcKeeper.SweepUnbondedTokensAllHostZones(s.Ctx) + + // An event should only be emitted for Gaia + s.CheckEventValueEmitted(types.EventTypeRedemptionSweep, types.AttributeKeyHostZone, HostChainId) + s.CheckEventValueNotEmitted(types.EventTypeRedemptionSweep, types.AttributeKeyHostZone, OsmoChainId) +} + +func (s *KeeperTestSuite) TestSweepUnbondedTokensAllHostZones_GaiaFailed() { + s.SetupSweepUnbondedTokens() + + // Remove the gaia epoch unbonding records so that there is nothing to sweep + for _, epochUnbondingRecord := range s.App.RecordsKeeper.GetAllEpochUnbondingRecord(s.Ctx) { + for _, hostZoneUnbondingRecord := range epochUnbondingRecord.HostZoneUnbondings { + if hostZoneUnbondingRecord.HostZoneId == HostChainId { + hostZoneUnbondingRecord.NativeTokenAmount = sdkmath.ZeroInt() + } + } + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, epochUnbondingRecord) + } + + // Sweep for both hosts (only osmo should submit an ICA) + s.App.StakeibcKeeper.SweepUnbondedTokensAllHostZones(s.Ctx) + + // An event should only be emitted for Osmo + s.CheckEventValueNotEmitted(types.EventTypeRedemptionSweep, types.AttributeKeyHostZone, HostChainId) + s.CheckEventValueEmitted(types.EventTypeRedemptionSweep, types.AttributeKeyHostZone, OsmoChainId) +} + +func (s *KeeperTestSuite) TestSweepUnbondedTokensAllHostZones_NoneSuccessful() { + s.SetupSweepUnbondedTokens() + + // Remove all epoch unbonding records so no ICAs are submitted + s.App.RecordsKeeper.RemoveEpochUnbondingRecord(s.Ctx, 1) + s.App.RecordsKeeper.RemoveEpochUnbondingRecord(s.Ctx, 2) + + // No event should be emitted for either host + s.CheckEventValueNotEmitted(types.EventTypeRedemptionSweep, types.AttributeKeyHostZone, HostChainId) + s.CheckEventValueNotEmitted(types.EventTypeRedemptionSweep, types.AttributeKeyHostZone, OsmoChainId) +} + +func (s *KeeperTestSuite) TestGetTotalRedemptionSweepAmountAndRecordsIds() { + hostBlockTime := time.Date(2023, 1, 1, 0, 0, 0, 0, time.UTC) + validUnbondTime := uint64(hostBlockTime.Add(-1 * time.Minute).UnixNano()) + + epochUnbondingRecords := []recordtypes.EpochUnbondingRecord{ + { + EpochNumber: uint64(1), + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{ + { + // Summed + HostZoneId: HostChainId, + NativeTokenAmount: sdkmath.NewInt(1), + Status: recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE, + UnbondingTime: validUnbondTime, + }, + { + // Different host zone + HostZoneId: "different", + NativeTokenAmount: sdkmath.NewInt(2), + Status: recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE, + UnbondingTime: validUnbondTime, + }, + }, + }, + { + EpochNumber: uint64(2), + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{ + { + // Different host zone + HostZoneId: "different", + NativeTokenAmount: sdkmath.NewInt(3), + Status: recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE, + UnbondingTime: validUnbondTime, + }, + { + // Summed + HostZoneId: HostChainId, + NativeTokenAmount: sdkmath.NewInt(4), + Status: recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE, + UnbondingTime: validUnbondTime, + }, + }, + }, + { + EpochNumber: uint64(3), + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{ + { + // Different Status + HostZoneId: HostChainId, + NativeTokenAmount: sdkmath.NewInt(5), + Status: recordtypes.HostZoneUnbonding_UNBONDING_QUEUE, + UnbondingTime: validUnbondTime, + }, + }, + }, + { + EpochNumber: uint64(4), + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{ + { + // Unbonding time not set + HostZoneId: HostChainId, + NativeTokenAmount: sdkmath.NewInt(6), + Status: recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE, + UnbondingTime: 0, + }, + }, + }, + { + EpochNumber: uint64(5), + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{ + { + // Unbonding time after block time + HostZoneId: HostChainId, + NativeTokenAmount: sdkmath.NewInt(7), + Status: recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE, + UnbondingTime: uint64(hostBlockTime.Add(time.Minute).UnixNano()), + }, + }, + }, + { + EpochNumber: uint64(6), + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{ + { + // Summed + HostZoneId: HostChainId, + NativeTokenAmount: sdkmath.NewInt(8), + Status: recordtypes.HostZoneUnbonding_EXIT_TRANSFER_QUEUE, + UnbondingTime: validUnbondTime, + }, + }, + }, + } + + for _, epochUnbondingRecord := range epochUnbondingRecords { + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, epochUnbondingRecord) + } + + expectedUnbondAmount := int64(1 + 4 + 8) + expectedRecordIds := []uint64{1, 2, 6} + + hostBlockTimeNano := uint64(hostBlockTime.UnixNano()) + actualUnbondAmount, actualRecordIds := s.App.StakeibcKeeper.GetTotalRedemptionSweepAmountAndRecordIds(s.Ctx, HostChainId, hostBlockTimeNano) + s.Require().Equal(expectedUnbondAmount, actualUnbondAmount.Int64(), "unbonded amount") + s.Require().Equal(expectedRecordIds, actualRecordIds, "epoch unbonding record IDs") +} diff --git a/x/stakeibc/keeper/registration.go b/x/stakeibc/keeper/registration.go new file mode 100644 index 00000000000..608506d236b --- /dev/null +++ b/x/stakeibc/keeper/registration.go @@ -0,0 +1,234 @@ +package keeper + +import ( + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types" + connectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + "github.com/osmosis-labs/osmosis/v27/utils" + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +var ( + CommunityPoolStakeHoldingAddressKey = "community-pool-stake" + CommunityPoolRedeemHoldingAddressKey = "community-pool-redeem" + + DefaultMaxMessagesPerIcaTx = uint64(32) +) + +func (k Keeper) RegisterHostZone(ctx sdk.Context, msg *types.MsgRegisterHostZone) (*types.MsgRegisterHostZoneResponse, error) { + // Get ConnectionEnd (for counterparty connection) + connectionEnd, found := k.IBCKeeper.ConnectionKeeper.GetConnection(ctx, msg.ConnectionId) + if !found { + return nil, errorsmod.Wrapf(connectiontypes.ErrConnectionNotFound, "connection-id %s does not exist", msg.ConnectionId) + } + counterpartyConnection := connectionEnd.Counterparty + + // Get chain id from connection + chainId, err := k.GetChainIdFromConnectionId(ctx, msg.ConnectionId) + if err != nil { + return nil, errorsmod.Wrapf(err, "unable to obtain chain id from connection %s", msg.ConnectionId) + } + + // get zone + _, found = k.GetHostZone(ctx, chainId) + if found { + return nil, errorsmod.Wrapf(types.ErrFailedToRegisterHostZone, "host zone already registered for chain-id %s", chainId) + } + + // check the denom is not already registered + hostZones := k.GetAllHostZone(ctx) + for _, hostZone := range hostZones { + if hostZone.HostDenom == msg.HostDenom { + return nil, errorsmod.Wrapf(types.ErrFailedToRegisterHostZone, "host denom %s already registered", msg.HostDenom) + } + if hostZone.ConnectionId == msg.ConnectionId { + return nil, errorsmod.Wrapf(types.ErrFailedToRegisterHostZone, "connection-id %s already registered", msg.ConnectionId) + } + if hostZone.TransferChannelId == msg.TransferChannelId { + return nil, errorsmod.Wrapf(types.ErrFailedToRegisterHostZone, "transfer channel %s already registered", msg.TransferChannelId) + } + if hostZone.Bech32Prefix == msg.Bech32Prefix { + return nil, errorsmod.Wrapf(types.ErrFailedToRegisterHostZone, "bech32 prefix %s already registered", msg.Bech32Prefix) + } + } + + // create and save the zones's module account + depositAddress := types.NewHostZoneDepositAddress(chainId) + if err := utils.CreateModuleAccount(ctx, k.AccountKeeper, depositAddress); err != nil { + return nil, errorsmod.Wrapf(err, "unable to create deposit account for host zone %s", chainId) + } + + // Create the host zone's community pool holding accounts + communityPoolStakeAddress := types.NewHostZoneModuleAddress(chainId, CommunityPoolStakeHoldingAddressKey) + communityPoolRedeemAddress := types.NewHostZoneModuleAddress(chainId, CommunityPoolRedeemHoldingAddressKey) + if err := utils.CreateModuleAccount(ctx, k.AccountKeeper, communityPoolStakeAddress); err != nil { + return nil, errorsmod.Wrapf(err, "unable to create community pool stake account for host zone %s", chainId) + } + if err := utils.CreateModuleAccount(ctx, k.AccountKeeper, communityPoolRedeemAddress); err != nil { + return nil, errorsmod.Wrapf(err, "unable to create community pool redeem account for host zone %s", chainId) + } + + // Validate the community pool treasury address if it's non-empty + if msg.CommunityPoolTreasuryAddress != "" { + _, err := utils.AccAddressFromBech32(msg.CommunityPoolTreasuryAddress, msg.Bech32Prefix) + if err != nil { + return nil, errorsmod.Wrapf(err, "invalid community pool treasury address (%s)", msg.CommunityPoolTreasuryAddress) + } + } + + params := k.GetParams(ctx) + if msg.MinRedemptionRate.IsNil() || msg.MinRedemptionRate.IsZero() { + msg.MinRedemptionRate = sdkmath.LegacyNewDecWithPrec(utils.UintToInt(params.DefaultMinRedemptionRateThreshold), 2) + } + if msg.MaxRedemptionRate.IsNil() || msg.MaxRedemptionRate.IsZero() { + msg.MaxRedemptionRate = sdkmath.LegacyNewDecWithPrec(utils.UintToInt(params.DefaultMaxRedemptionRateThreshold), 2) + } + + // Set the max messages per ICA tx to the default value if it's not specified + maxMessagesPerIcaTx := msg.MaxMessagesPerIcaTx + if maxMessagesPerIcaTx == 0 { + maxMessagesPerIcaTx = DefaultMaxMessagesPerIcaTx + } + + // set the zone + zone := types.HostZone{ + ChainId: chainId, + ConnectionId: msg.ConnectionId, + Bech32Prefix: msg.Bech32Prefix, + IbcDenom: msg.IbcDenom, + HostDenom: msg.HostDenom, + TransferChannelId: msg.TransferChannelId, + // Start sharesToTokens rate at 1 upon registration + RedemptionRate: sdkmath.LegacyNewDec(1), + LastRedemptionRate: sdkmath.LegacyNewDec(1), + UnbondingPeriod: msg.UnbondingPeriod, + DepositAddress: depositAddress.String(), + CommunityPoolStakeHoldingAddress: communityPoolStakeAddress.String(), + CommunityPoolRedeemHoldingAddress: communityPoolRedeemAddress.String(), + MinRedemptionRate: msg.MinRedemptionRate, + MaxRedemptionRate: msg.MaxRedemptionRate, + // Default the inner bounds to the outer bounds + MinInnerRedemptionRate: msg.MinRedemptionRate, + MaxInnerRedemptionRate: msg.MaxRedemptionRate, + LsmLiquidStakeEnabled: msg.LsmLiquidStakeEnabled, + CommunityPoolTreasuryAddress: msg.CommunityPoolTreasuryAddress, + MaxMessagesPerIcaTx: maxMessagesPerIcaTx, + RedemptionsEnabled: true, + } + // write the zone back to the store + k.SetHostZone(ctx, zone) + + appVersion := string(icatypes.ModuleCdc.MustMarshalJSON(&icatypes.Metadata{ + Version: icatypes.Version, + ControllerConnectionId: zone.ConnectionId, + HostConnectionId: counterpartyConnection.ConnectionId, + Encoding: icatypes.EncodingProtobuf, + TxType: icatypes.TxTypeSDKMultiMsg, + })) + + // generate delegate account + // NOTE: in the future, if we implement proxy governance, we'll need many more delegate accounts + delegateAccount := types.FormatHostZoneICAOwner(chainId, types.ICAAccountType_DELEGATION) + if err := k.ICAControllerKeeper.RegisterInterchainAccountWithOrdering(ctx, zone.ConnectionId, delegateAccount, appVersion, channeltypes.ORDERED); err != nil { + return nil, errorsmod.Wrap(err, "failed to register delegation ICA") + } + + // generate fee account + feeAccount := types.FormatHostZoneICAOwner(chainId, types.ICAAccountType_FEE) + if err := k.ICAControllerKeeper.RegisterInterchainAccountWithOrdering(ctx, zone.ConnectionId, feeAccount, appVersion, channeltypes.ORDERED); err != nil { + return nil, errorsmod.Wrap(err, "failed to register fee ICA") + } + + // generate withdrawal account + withdrawalAccount := types.FormatHostZoneICAOwner(chainId, types.ICAAccountType_WITHDRAWAL) + if err := k.ICAControllerKeeper.RegisterInterchainAccountWithOrdering(ctx, zone.ConnectionId, withdrawalAccount, appVersion, channeltypes.ORDERED); err != nil { + return nil, errorsmod.Wrap(err, "failed to register withdrawal ICA") + } + + // generate redemption account + redemptionAccount := types.FormatHostZoneICAOwner(chainId, types.ICAAccountType_REDEMPTION) + if err := k.ICAControllerKeeper.RegisterInterchainAccountWithOrdering(ctx, zone.ConnectionId, redemptionAccount, appVersion, channeltypes.ORDERED); err != nil { + return nil, errorsmod.Wrap(err, "failed to register redemption ICA") + } + + // create community pool deposit account + communityPoolDepositAccount := types.FormatHostZoneICAOwner(chainId, types.ICAAccountType_COMMUNITY_POOL_DEPOSIT) + if err := k.ICAControllerKeeper.RegisterInterchainAccountWithOrdering(ctx, zone.ConnectionId, communityPoolDepositAccount, appVersion, channeltypes.ORDERED); err != nil { + return nil, errorsmod.Wrap(err, "failed to register community pool deposit ICA") + } + + // create community pool return account + communityPoolReturnAccount := types.FormatHostZoneICAOwner(chainId, types.ICAAccountType_COMMUNITY_POOL_RETURN) + if err := k.ICAControllerKeeper.RegisterInterchainAccountWithOrdering(ctx, zone.ConnectionId, communityPoolReturnAccount, appVersion, channeltypes.ORDERED); err != nil { + return nil, errorsmod.Wrap(err, "failed to register community pool return ICA") + } + + // add this host zone to unbonding hostZones, otherwise users won't be able to unbond + // for this host zone until the following day + dayEpochTracker, found := k.GetEpochTracker(ctx, epochtypes.DAY_EPOCH) + if !found { + return nil, errorsmod.Wrapf(types.ErrEpochNotFound, "epoch tracker (%s) not found", epochtypes.DAY_EPOCH) + } + epochUnbondingRecord, found := k.RecordsKeeper.GetEpochUnbondingRecord(ctx, dayEpochTracker.EpochNumber) + if !found { + return nil, errorsmod.Wrapf(recordstypes.ErrEpochUnbondingRecordNotFound, + "epoch unbonding record not found for epoch %d", dayEpochTracker.EpochNumber) + } + hostZoneUnbonding := recordstypes.HostZoneUnbonding{ + NativeTokenAmount: sdkmath.ZeroInt(), + StTokenAmount: sdkmath.ZeroInt(), + Denom: zone.HostDenom, + HostZoneId: zone.ChainId, + Status: recordstypes.HostZoneUnbonding_UNBONDING_QUEUE, + } + err = k.RecordsKeeper.SetHostZoneUnbondingRecord(ctx, epochUnbondingRecord.EpochNumber, chainId, hostZoneUnbonding) + if err != nil { + return nil, err + } + + // create an empty deposit record for the host zone + strideEpochTracker, found := k.GetEpochTracker(ctx, epochtypes.STRIDE_EPOCH) + if !found { + return nil, errorsmod.Wrapf(types.ErrEpochNotFound, "epoch tracker (%s) not found", epochtypes.STRIDE_EPOCH) + } + depositRecord := recordstypes.DepositRecord{ + Id: 0, + Amount: sdkmath.ZeroInt(), + Denom: zone.HostDenom, + HostZoneId: zone.ChainId, + Status: recordstypes.DepositRecord_TRANSFER_QUEUE, + DepositEpochNumber: strideEpochTracker.EpochNumber, + DelegationTxsInProgress: 0, + } + k.RecordsKeeper.AppendDepositRecord(ctx, depositRecord) + + // register stToken to consumer reward denom whitelist so that + // stToken rewards can be distributed to provider validators + err = k.RegisterStTokenDenomsToWhitelist(ctx, []string{types.StAssetDenomFromHostZoneDenom(zone.HostDenom)}) + if err != nil { + return nil, errorsmod.Wrap(err, "unable to register stToken as ICS reward denom") + } + + // emit events + ctx.EventManager().EmitEvent( + sdk.NewEvent( + sdk.EventTypeMessage, + sdk.NewAttribute(sdk.AttributeKeyModule, types.AttributeValueCategory), + ), + ) + ctx.EventManager().EmitEvent( + sdk.NewEvent( + types.EventTypeRegisterZone, + sdk.NewAttribute(types.AttributeKeyConnectionId, msg.ConnectionId), + sdk.NewAttribute(types.AttributeKeyRecipientChain, chainId), + ), + ) + + return &types.MsgRegisterHostZoneResponse{}, nil +} diff --git a/x/stakeibc/keeper/registration_test.go b/x/stakeibc/keeper/registration_test.go new file mode 100644 index 00000000000..b116e82d9e7 --- /dev/null +++ b/x/stakeibc/keeper/registration_test.go @@ -0,0 +1,452 @@ +package keeper_test + +import ( + "fmt" + + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + icatypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + recordtypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/keeper" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" + stakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// ---------------------------------------------------- +// RegisterHostZone +// ---------------------------------------------------- + +type RegisterHostZoneTestCase struct { + validMsg stakeibctypes.MsgRegisterHostZone + epochUnbondingRecordNumber uint64 + strideEpochNumber uint64 + unbondingPeriod uint64 + defaultRedemptionRate sdkmath.LegacyDec + atomHostZoneChainId string +} + +func (s *KeeperTestSuite) SetupRegisterHostZone() RegisterHostZoneTestCase { + epochUnbondingRecordNumber := uint64(3) + strideEpochNumber := uint64(4) + unbondingPeriod := uint64(14) + defaultRedemptionRate := sdkmath.LegacyNewDec(1) + atomHostZoneChainId := "GAIA" + + s.CreateTransferChannel(HostChainId) + + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, stakeibctypes.EpochTracker{ + EpochIdentifier: epochtypes.DAY_EPOCH, + EpochNumber: epochUnbondingRecordNumber, + }) + + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, stakeibctypes.EpochTracker{ + EpochIdentifier: epochtypes.STRIDE_EPOCH, + EpochNumber: strideEpochNumber, + }) + + epochUnbondingRecord := recordtypes.EpochUnbondingRecord{ + EpochNumber: epochUnbondingRecordNumber, + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{}, + } + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, epochUnbondingRecord) + + defaultMsg := stakeibctypes.MsgRegisterHostZone{ + ConnectionId: ibctesting.FirstConnectionID, + Bech32Prefix: GaiaPrefix, + HostDenom: Atom, + IbcDenom: IbcAtom, + TransferChannelId: ibctesting.FirstChannelID, + UnbondingPeriod: unbondingPeriod, + MinRedemptionRate: sdkmath.LegacyNewDec(0), + MaxRedemptionRate: sdkmath.LegacyNewDec(0), + } + + return RegisterHostZoneTestCase{ + validMsg: defaultMsg, + epochUnbondingRecordNumber: epochUnbondingRecordNumber, + strideEpochNumber: strideEpochNumber, + unbondingPeriod: unbondingPeriod, + defaultRedemptionRate: defaultRedemptionRate, + atomHostZoneChainId: atomHostZoneChainId, + } +} + +// Helper function to test registering a duplicate host zone +// If there's a duplicate connection ID, register_host_zone will error before checking other fields for duplicates +// In order to test those cases, we need to first create a new host zone, +// and then attempt to register with duplicate fields in the message +// This function 1) creates a new host zone and 2) returns what would be a successful register message +func (s *KeeperTestSuite) createNewHostZoneMessage(chainID string, denom string, prefix string) stakeibctypes.MsgRegisterHostZone { + newConnectionID := "connection-1" + s.MockClientAndConnection(chainID, "07-tendermint-1", newConnectionID) + + // Build what would be a successful message to register the host zone + // Note: this is purposefully missing fields because it is used in failure cases that short circuit + return stakeibctypes.MsgRegisterHostZone{ + ConnectionId: newConnectionID, + Bech32Prefix: prefix, + HostDenom: denom, + } +} + +// Helper function to assist in testing a failure to create an ICA account +// This function will occupy one of the specified port with the specified channel +// +// so that the registration fails +func (s *KeeperTestSuite) createActiveChannelOnICAPort(accountName string, channelID string) { + portID := fmt.Sprintf("%s%s.%s", icatypes.ControllerPortPrefix, HostChainId, accountName) + openChannel := channeltypes.Channel{State: channeltypes.OPEN} + + // The channel ID doesn't matter here - all that matters is that theres an open channel on the port + s.App.IBCKeeper.ChannelKeeper.SetChannel(s.Ctx, portID, channelID, openChannel) + s.App.ICAControllerKeeper.SetActiveChannelID(s.Ctx, ibctesting.FirstConnectionID, portID, channelID) +} + +func (s *KeeperTestSuite) TestRegisterHostZone_Success() { + tc := s.SetupRegisterHostZone() + msg := tc.validMsg + + // Register host zone + _, err := s.GetMsgServer().RegisterHostZone(s.Ctx, &msg) + s.Require().NoError(err, "able to successfully register host zone") + + // Confirm host zone unbonding was added + hostZone, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, HostChainId) + s.Require().True(found, "host zone found") + s.Require().Equal(tc.defaultRedemptionRate, hostZone.RedemptionRate, "redemption rate set to default: 1") + s.Require().Equal(tc.defaultRedemptionRate, hostZone.LastRedemptionRate, "last redemption rate set to default: 1") + defaultMinThreshold := sdkmath.LegacyNewDec(int64(stakeibctypes.DefaultMinRedemptionRateThreshold)).Quo(sdkmath.LegacyNewDec(100)) + defaultMaxThreshold := sdkmath.LegacyNewDec(int64(stakeibctypes.DefaultMaxRedemptionRateThreshold)).Quo(sdkmath.LegacyNewDec(100)) + s.Require().Equal(defaultMinThreshold, hostZone.MinRedemptionRate, "min redemption rate set to default") + s.Require().Equal(defaultMaxThreshold, hostZone.MaxRedemptionRate, "max redemption rate set to default") + s.Require().Equal(tc.unbondingPeriod, hostZone.UnbondingPeriod, "unbonding period") + + // Confirm host zone unbonding record was created + epochUnbondingRecord, found := s.App.RecordsKeeper.GetEpochUnbondingRecord(s.Ctx, tc.epochUnbondingRecordNumber) + s.Require().True(found, "epoch unbonding record found") + s.Require().Len(epochUnbondingRecord.HostZoneUnbondings, 1, "host zone unbonding record has one entry") + + // Confirm host zone unbonding was added + hostZoneUnbonding := epochUnbondingRecord.HostZoneUnbondings[0] + s.Require().Equal(HostChainId, hostZoneUnbonding.HostZoneId, "host zone unbonding set for this host zone") + s.Require().Equal(sdkmath.ZeroInt(), hostZoneUnbonding.NativeTokenAmount, "host zone unbonding set to 0 tokens") + s.Require().Equal(recordstypes.HostZoneUnbonding_UNBONDING_QUEUE, hostZoneUnbonding.Status, "host zone unbonding set to bonded") + + // Confirm a module account was created + hostZoneModuleAccount, err := sdk.AccAddressFromBech32(hostZone.DepositAddress) + s.Require().NoError(err, "converting module address to account") + acc := s.App.AccountKeeper.GetAccount(s.Ctx, hostZoneModuleAccount) + s.Require().NotNil(acc, "host zone module account found in account keeper") + + // Confirm an empty deposit record was created + expectedDepositRecord := recordstypes.DepositRecord{ + Id: uint64(0), + Amount: sdkmath.ZeroInt(), + HostZoneId: hostZone.ChainId, + Denom: hostZone.HostDenom, + Status: recordstypes.DepositRecord_TRANSFER_QUEUE, + DepositEpochNumber: tc.strideEpochNumber, + } + + depositRecords := s.App.RecordsKeeper.GetAllDepositRecord(s.Ctx) + s.Require().Len(depositRecords, 1, "number of deposit records") + s.Require().Equal(expectedDepositRecord, depositRecords[0], "deposit record") + + // Confirm max ICA messages was set to default + s.Require().Equal(keeper.DefaultMaxMessagesPerIcaTx, hostZone.MaxMessagesPerIcaTx, "max messages per ica tx") +} + +func (s *KeeperTestSuite) TestRegisterHostZone_Success_SetCommunityPoolTreasuryAddress() { + tc := s.SetupRegisterHostZone() + + // Sets the community pool treasury address to a valid address + msg := tc.validMsg + msg.CommunityPoolTreasuryAddress = ValidHostAddress + + _, err := s.GetMsgServer().RegisterHostZone(s.Ctx, &msg) + s.Require().NoError(err, "no error expected when registering host with valid treasury address") + + // Confirm treasury address was set + hostZone := s.MustGetHostZone(HostChainId) + s.Require().Equal(ValidHostAddress, hostZone.CommunityPoolTreasuryAddress, "treasury address") +} + +func (s *KeeperTestSuite) TestRegisterHostZone_Success_SetMaxIcaMessagesPerTx() { + tc := s.SetupRegisterHostZone() + + // Set the max number of ICA messages + maxMessages := uint64(100) + msg := tc.validMsg + msg.MaxMessagesPerIcaTx = maxMessages + + _, err := s.GetMsgServer().RegisterHostZone(s.Ctx, &msg) + s.Require().NoError(err, "no error expected when registering host with max messages") + + // Confirm max number of messages was set + hostZone := s.MustGetHostZone(HostChainId) + s.Require().Equal(maxMessages, hostZone.MaxMessagesPerIcaTx, "max messages per ica tx") +} + +func (s *KeeperTestSuite) TestRegisterHostZone_Success_Unregister() { + tc := s.SetupRegisterHostZone() + msg := tc.validMsg + + // Register the host zone with the valid message + _, err := s.GetMsgServer().RegisterHostZone(s.Ctx, &msg) + s.Require().NoError(err, "no error expected when registering host") + + // Confirm accounts were created + depositAddress := types.NewHostZoneDepositAddress(chainId) + communityPoolStakeAddress := types.NewHostZoneModuleAddress(chainId, keeper.CommunityPoolStakeHoldingAddressKey) + communityPoolRedeemAddress := types.NewHostZoneModuleAddress(chainId, keeper.CommunityPoolRedeemHoldingAddressKey) + + depositAccount := s.App.AccountKeeper.GetAccount(s.Ctx, depositAddress) + communityPoolStakeAccount := s.App.AccountKeeper.GetAccount(s.Ctx, communityPoolStakeAddress) + communityPoolRedeemAccount := s.App.AccountKeeper.GetAccount(s.Ctx, communityPoolRedeemAddress) + + s.Require().NotNil(depositAccount, "deposit account should exist") + s.Require().NotNil(communityPoolStakeAccount, "community pool stake account should exist") + s.Require().NotNil(communityPoolRedeemAccount, "community pool redeem account should exist") + + // Confirm records were created + depositRecords := s.App.RecordsKeeper.GetAllDepositRecord(s.Ctx) + s.Require().Len(depositRecords, 1, "there should be one deposit record") + + epochUnbondingRecords := s.App.RecordsKeeper.GetAllEpochUnbondingRecord(s.Ctx) + s.Require().Len(epochUnbondingRecords, 1, "there should be one epoch unbonding record") + s.Require().Len(epochUnbondingRecords[0].HostZoneUnbondings, 1, "there should be one host zone unbonding record") + + // Unregister the host zone + err = s.App.StakeibcKeeper.UnregisterHostZone(s.Ctx, HostChainId) + s.Require().NoError(err, "no error expected when unregistering host zone") + + // Confirm accounts were deleted + depositAccount = s.App.AccountKeeper.GetAccount(s.Ctx, depositAddress) + communityPoolStakeAccount = s.App.AccountKeeper.GetAccount(s.Ctx, communityPoolStakeAddress) + communityPoolRedeemAccount = s.App.AccountKeeper.GetAccount(s.Ctx, communityPoolRedeemAddress) + + s.Require().Nil(depositAccount, "deposit account should have been deleted") + s.Require().Nil(communityPoolStakeAccount, "community pool stake account should have been deleted") + s.Require().Nil(communityPoolRedeemAccount, "community pool redeem account should have been deleted") + + // Confirm records were deleted + depositRecords = s.App.RecordsKeeper.GetAllDepositRecord(s.Ctx) + s.Require().Empty(depositRecords, "deposit records should have been deleted") + + epochUnbondingRecords = s.App.RecordsKeeper.GetAllEpochUnbondingRecord(s.Ctx) + s.Require().Empty(epochUnbondingRecords[0].HostZoneUnbondings, "host zone unbonding record should have been deleted") + + // Attempt to re-register, it should succeed + _, err = s.GetMsgServer().RegisterHostZone(s.Ctx, &msg) + s.Require().NoError(err, "no error expected when re-registering host") +} + +func (s *KeeperTestSuite) TestRegisterHostZone_InvalidConnectionId() { + tc := s.SetupRegisterHostZone() + msg := tc.validMsg + msg.ConnectionId = "connection-10" // an invalid connection ID + + _, err := s.GetMsgServer().RegisterHostZone(s.Ctx, &msg) + s.Require().ErrorContains(err, "connection-id connection-10 does not exist") +} + +func (s *KeeperTestSuite) TestRegisterHostZone_DuplicateConnectionIdInIBCState() { + // tests for a failure if we register the same host zone twice + // (with a duplicate connectionId stored in the IBCKeeper's state) + tc := s.SetupRegisterHostZone() + msg := tc.validMsg + + _, err := s.GetMsgServer().RegisterHostZone(s.Ctx, &msg) + s.Require().NoError(err, "able to successfully register host zone once") + + // now all attributes are different, EXCEPT the connection ID + msg.Bech32Prefix = "cosmos-different" // a different Bech32 prefix + msg.HostDenom = "atom-different" // a different host denom + msg.IbcDenom = "ibc-atom-different" // a different IBC denom + + _, err = s.GetMsgServer().RegisterHostZone(s.Ctx, &msg) + s.Require().ErrorContains(err, "host zone already registered for chain-id GAIA") +} + +func (s *KeeperTestSuite) TestRegisterHostZone_DuplicateConnectionIdInStakeibcState() { + // tests for a failure if we register the same host zone twice + // (with a duplicate connectionId stored in a different host zone in stakeibc) + tc := s.SetupRegisterHostZone() + msg := tc.validMsg + + _, err := s.GetMsgServer().RegisterHostZone(s.Ctx, &msg) + s.Require().NoError(err, "able to successfully register host zone once") + + // Create the message for a brand new host zone + // (without modifications, you would expect this to be successful) + newHostZoneMsg := s.createNewHostZoneMessage("OSMO", "osmo", "osmo") + + // Add a different host zone with the same connection Id as OSMO + newHostZone := stakeibctypes.HostZone{ + ChainId: "JUNO", + ConnectionId: newHostZoneMsg.ConnectionId, + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, newHostZone) + + // Registering should fail with a duplicate connection ID + _, err = s.GetMsgServer().RegisterHostZone(s.Ctx, &newHostZoneMsg) + s.Require().ErrorContains(err, "connection-id connection-1 already registered") +} + +func (s *KeeperTestSuite) TestRegisterHostZone_DuplicateHostDenom() { + // tests for a failure if we register the same host zone twice (with a duplicate host denom) + tc := s.SetupRegisterHostZone() + + // Register host zones successfully + _, err := s.GetMsgServer().RegisterHostZone(s.Ctx, &tc.validMsg) + s.Require().NoError(err, "able to successfully register host zone once") + + // Create the message for a brand new host zone + // (without modifications, you would expect this to be successful) + newHostZoneMsg := s.createNewHostZoneMessage("OSMO", "osmo", "osmo") + + // Try to register with a duplicate host denom - it should fail + invalidMsg := newHostZoneMsg + invalidMsg.HostDenom = tc.validMsg.HostDenom + + _, err = s.GetMsgServer().RegisterHostZone(s.Ctx, &invalidMsg) + s.Require().ErrorContains(err, "host denom uatom already registered") +} + +func (s *KeeperTestSuite) TestRegisterHostZone_DuplicateTransferChannel() { + // tests for a failure if we register the same host zone twice (with a duplicate transfer) + tc := s.SetupRegisterHostZone() + + // Register host zones successfully + _, err := s.GetMsgServer().RegisterHostZone(s.Ctx, &tc.validMsg) + s.Require().NoError(err, "able to successfully register host zone once") + + // Create the message for a brand new host zone + // (without modifications, you would expect this to be successful) + newHostZoneMsg := s.createNewHostZoneMessage("OSMO", "osmo", "osmo") + + // Try to register with a duplicate transfer channel - it should fail + invalidMsg := newHostZoneMsg + invalidMsg.TransferChannelId = tc.validMsg.TransferChannelId + + _, err = s.GetMsgServer().RegisterHostZone(s.Ctx, &invalidMsg) + s.Require().ErrorContains(err, "transfer channel channel-0 already registered") +} + +func (s *KeeperTestSuite) TestRegisterHostZone_DuplicateBech32Prefix() { + // tests for a failure if we register the same host zone twice (with a duplicate bech32 prefix) + tc := s.SetupRegisterHostZone() + + // Register host zones successfully + _, err := s.GetMsgServer().RegisterHostZone(s.Ctx, &tc.validMsg) + s.Require().NoError(err, "able to successfully register host zone once") + + // Create the message for a brand new host zone + // (without modifications, you would expect this to be successful) + newHostZoneMsg := s.createNewHostZoneMessage("OSMO", "osmo", "osmo") + + // Try to register with a duplicate bech32prefix - it should fail + invalidMsg := newHostZoneMsg + invalidMsg.Bech32Prefix = tc.validMsg.Bech32Prefix + + _, err = s.GetMsgServer().RegisterHostZone(s.Ctx, &invalidMsg) + s.Require().ErrorContains(err, "bech32 prefix cosmos already registered") +} + +func (s *KeeperTestSuite) TestRegisterHostZone_CannotFindDayEpochTracker() { + // tests for a failure if the epoch tracker cannot be found + tc := s.SetupRegisterHostZone() + msg := tc.validMsg + + // delete the epoch tracker + s.App.StakeibcKeeper.RemoveEpochTracker(s.Ctx, epochtypes.DAY_EPOCH) + + _, err := s.GetMsgServer().RegisterHostZone(s.Ctx, &msg) + expectedErrMsg := "epoch tracker (day) not found: epoch not found" + s.Require().EqualError(err, expectedErrMsg, "day epoch tracker not found") +} + +func (s *KeeperTestSuite) TestRegisterHostZone_CannotFindStrideEpochTracker() { + // tests for a failure if the epoch tracker cannot be found + tc := s.SetupRegisterHostZone() + msg := tc.validMsg + + // delete the epoch tracker + s.App.StakeibcKeeper.RemoveEpochTracker(s.Ctx, epochtypes.STRIDE_EPOCH) + + _, err := s.GetMsgServer().RegisterHostZone(s.Ctx, &msg) + expectedErrMsg := "epoch tracker (stride_epoch) not found: epoch not found" + s.Require().EqualError(err, expectedErrMsg, "stride epoch tracker not found") +} + +func (s *KeeperTestSuite) TestRegisterHostZone_CannotFindEpochUnbondingRecord() { + // tests for a failure if the epoch unbonding record cannot be found + tc := s.SetupRegisterHostZone() + msg := tc.validMsg + + // delete the epoch unbonding record + s.App.RecordsKeeper.RemoveEpochUnbondingRecord(s.Ctx, tc.epochUnbondingRecordNumber) + + _, err := s.GetMsgServer().RegisterHostZone(s.Ctx, &msg) + s.Require().ErrorContains(err, "epoch unbonding record not found for epoch 3") +} + +func (s *KeeperTestSuite) TestRegisterHostZone_CannotRegisterDelegationAccount() { + // tests for a failure if the epoch unbonding record cannot be found + tc := s.SetupRegisterHostZone() + + // Create channel on delegation port + s.createActiveChannelOnICAPort("DELEGATION", "channel-1") + + _, err := s.GetMsgServer().RegisterHostZone(s.Ctx, &tc.validMsg) + s.Require().ErrorContains(err, "failed to register delegation ICA") +} + +func (s *KeeperTestSuite) TestRegisterHostZone_CannotRegisterFeeAccount() { + // tests for a failure if the epoch unbonding record cannot be found + tc := s.SetupRegisterHostZone() + + // Create channel on fee port + s.createActiveChannelOnICAPort("FEE", "channel-1") + + _, err := s.GetMsgServer().RegisterHostZone(s.Ctx, &tc.validMsg) + s.Require().ErrorContains(err, "failed to register fee ICA") +} + +func (s *KeeperTestSuite) TestRegisterHostZone_CannotRegisterWithdrawalAccount() { + // tests for a failure if the epoch unbonding record cannot be found + tc := s.SetupRegisterHostZone() + + // Create channel on withdrawal port + s.createActiveChannelOnICAPort("WITHDRAWAL", "channel-1") + + _, err := s.GetMsgServer().RegisterHostZone(s.Ctx, &tc.validMsg) + s.Require().ErrorContains(err, "failed to register withdrawal ICA") +} + +func (s *KeeperTestSuite) TestRegisterHostZone_CannotRegisterRedemptionAccount() { + // tests for a failure if the epoch unbonding record cannot be found + tc := s.SetupRegisterHostZone() + + // Create channel on redemption port + s.createActiveChannelOnICAPort("REDEMPTION", "channel-1") + + _, err := s.GetMsgServer().RegisterHostZone(s.Ctx, &tc.validMsg) + s.Require().ErrorContains(err, "failed to register redemption ICA") +} + +func (s *KeeperTestSuite) TestRegisterHostZone_InvalidCommunityPoolTreasuryAddress() { + // tests for a failure if the community pool treasury address is invalid + tc := s.SetupRegisterHostZone() + + invalidMsg := tc.validMsg + invalidMsg.CommunityPoolTreasuryAddress = "invalid_address" + + _, err := s.GetMsgServer().RegisterHostZone(s.Ctx, &invalidMsg) + s.Require().ErrorContains(err, "invalid community pool treasury address") +} diff --git a/x/stakeibc/keeper/reward_allocation.go b/x/stakeibc/keeper/reward_allocation.go new file mode 100644 index 00000000000..25740ccd3c7 --- /dev/null +++ b/x/stakeibc/keeper/reward_allocation.go @@ -0,0 +1,91 @@ +package keeper + +import ( + "fmt" + auctiontypes "github.com/skip-mev/block-sdk/v2/x/auction/types" + + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + ccvtypes "github.com/cosmos/interchain-security/v6/x/ccv/consumer/types" + + // auctiontypes "github.com/osmosis-labs/osmosis/v27/x/auction/types" TODO: + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// AuctionOffRewardCollectorBalance distributes rewards from the reward collector: +// Sends 15% to ICS, and the remainder to the auction module +// ConsumerRedistributionFraction = what Stride keeps = 0.85 on mainnet +// ICS Portion = 1 - ConsumerRedistributionFraction = 0.15 +// Fees arrive in the reward collector account as native tokens +func (k Keeper) AuctionOffRewardCollectorBalance(ctx sdk.Context) { + rewardCollectorAddress := k.AccountKeeper.GetModuleAccount(ctx, types.RewardCollectorName).GetAddress() + + // Get consumer redistribution fraction from CCV params + consumerRedistributionFracStr := k.ConsumerKeeper.GetConsumerParams(ctx).ConsumerRedistributionFraction + strideKeepRate, err := sdkmath.LegacyNewDecFromStr(consumerRedistributionFracStr) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Invalid strideKeepRate, cannot send stTokens to ICS provider: %s", err)) + return + } + + // Calculate Hub's keep rate (1 - strideKeepRate) + hubKeepRate := sdkmath.LegacyOneDec().Sub(strideKeepRate) + + // Get all host zones and process their tokens in reward collector balance + for _, hz := range k.GetAllHostZone(ctx) { + // Check if reward collector has this host zone's IBC denom + // These are the fees collected from liquid staking rewards + if hz.IbcDenom == "" { // prevents panic in balance query if the denom field is not set + continue + } + tokenBalance := k.bankKeeper.GetBalance(ctx, rewardCollectorAddress, hz.IbcDenom) + if tokenBalance.IsZero() { + continue + } + + // Calculate the ICS portion to liquid stake + tokensToLiquidStake := sdk.NewDecCoinsFromCoins(tokenBalance).MulDec(hubKeepRate).AmountOf(hz.IbcDenom).TruncateInt() + if tokensToLiquidStake.IsZero() { + continue + } + + // Liquid stake the ICS portion + msg := types.NewMsgLiquidStake(rewardCollectorAddress.String(), tokensToLiquidStake, hz.HostDenom) + if err := msg.ValidateBasic(); err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Liquid stake from reward collector failed validation: %s", err.Error())) + continue + } + liquidStakeResp, err := NewMsgServerImpl(k).LiquidStake(ctx, msg) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Failed to liquid stake %s for hostzone %s: %s", sdk.NewCoin(hz.IbcDenom, tokensToLiquidStake).String(), hz.ChainId, err.Error())) + continue + } + + // Get the resulting stToken balance for this hostzone + if liquidStakeResp.StToken.IsZero() { + continue + } + icsProviderStTokens := sdk.NewCoins(liquidStakeResp.StToken) + + // Send stTokens to ConsumerToSendToProvider module + err = k.bankKeeper.SendCoinsFromModuleToModule(ctx, types.RewardCollectorName, ccvtypes.ConsumerToSendToProviderName, icsProviderStTokens) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Cannot send stTokens from RewardCollector to ConsumerToSendToProvider: %s", err)) + continue + } + + // Send remaining native tokens to auction module + rewardCollectorBalances := sdk.NewCoins(k.bankKeeper.GetBalance(ctx, rewardCollectorAddress, hz.IbcDenom)) + if rewardCollectorBalances.Empty() { + continue + } + + // TODO: + //err = k.bankKeeper.SendCoinsFromModuleToModule(ctx, types.RewardCollectorName, auctiontypes.ModuleName, rewardCollectorBalances) + //if err != nil { + // k.Logger(ctx).Error(fmt.Sprintf("Cannot send rewards from RewardCollector to Auction module: %s", err)) + // continue + //} + } +} diff --git a/x/stakeibc/keeper/reward_allocation_test.go b/x/stakeibc/keeper/reward_allocation_test.go new file mode 100644 index 00000000000..08da2f141eb --- /dev/null +++ b/x/stakeibc/keeper/reward_allocation_test.go @@ -0,0 +1,197 @@ +package keeper_test + +import ( + "strings" + + sdkmath "cosmossdk.io/math" + + abci "github.com/cometbft/cometbft/abci/types" + cmtproto "github.com/cometbft/cometbft/proto/tendermint/types" + simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + teststaking "github.com/cosmos/cosmos-sdk/x/staking/testutil" + + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + _ "github.com/stretchr/testify/suite" + + ccvtypes "github.com/cosmos/interchain-security/v6/x/ccv/consumer/types" + + auctiontypes "github.com/osmosis-labs/osmosis/v27/x/auction/types" + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + recordtypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + stakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func (s *KeeperTestSuite) SetupTestRewardAllocation() { + // Create two host zones so we can map the ibc and st denom's back to a host zone + // We need valid addresses for the module account addresses, otherwise liquid stake will fail + hostZone1 := stakeibctypes.HostZone{ + ChainId: HostChainId, + HostDenom: Atom, + IbcDenom: IbcAtom, + RedemptionRate: sdkmath.LegacyOneDec(), + DepositAddress: stakeibctypes.NewHostZoneDepositAddress(HostChainId).String(), + } + hostZone2 := stakeibctypes.HostZone{ + ChainId: OsmoChainId, + HostDenom: Osmo, + IbcDenom: IbcOsmo, + RedemptionRate: sdkmath.LegacyOneDec(), + DepositAddress: stakeibctypes.NewHostZoneDepositAddress(OsmoChainId).String(), + } + + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone1) + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone2) + // ConsumerRedistributionFraction = how much Stride keeps + // Set consumer redistribution fraction to 0.85 (same as mainnet) + consumerParams := s.App.ConsumerKeeper.GetConsumerParams(s.Ctx) + consumerParams.ConsumerRedistributionFraction = "0.85" + s.App.ConsumerKeeper.SetParams(s.Ctx, consumerParams) + + // Set epoch tracker and deposit records for liquid stake + currentEpoch := uint64(2) + strideEpochTracker := stakeibctypes.EpochTracker{ + EpochIdentifier: epochtypes.STRIDE_EPOCH, + EpochNumber: currentEpoch, + NextEpochStartTime: uint64(10), + } + initialDepositRecord1 := recordtypes.DepositRecord{ + Id: 1, + DepositEpochNumber: currentEpoch, + HostZoneId: HostChainId, + Amount: sdkmath.ZeroInt(), + } + initialDepositRecord2 := recordtypes.DepositRecord{ + Id: 2, + DepositEpochNumber: currentEpoch, + HostZoneId: OsmoChainId, + Amount: sdkmath.ZeroInt(), + } + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, strideEpochTracker) + s.App.RecordsKeeper.SetDepositRecord(s.Ctx, initialDepositRecord1) + s.App.RecordsKeeper.SetDepositRecord(s.Ctx, initialDepositRecord2) +} + +// Helper function to check the balance of a module account +func (s *KeeperTestSuite) checkModuleAccountBalance(moduleName, denom string, expectedBalance sdkmath.Int) { + address := s.App.AccountKeeper.GetModuleAccount(s.Ctx, moduleName).GetAddress() + tokens := s.App.BankKeeper.GetBalance(s.Ctx, address, denom) + s.Require().Equal(expectedBalance.Int64(), tokens.Amount.Int64(), "%s %s balance", moduleName, denom) +} + +func (s *KeeperTestSuite) TestLiquidStakeRewardCollectorBalance_Success() { + s.SetupTestRewardAllocation() + rewardAmount := sdkmath.NewInt(1000) + + // Fund reward collector account with ibc'd reward tokens + s.FundModuleAccount(stakeibctypes.RewardCollectorName, sdk.NewCoin(IbcAtom, rewardAmount)) + s.FundModuleAccount(stakeibctypes.RewardCollectorName, sdk.NewCoin(IbcOsmo, rewardAmount)) + + // Distribute rewards using new logic: 85% liquid staked to ConsumerToSendToProvider, 85% to auction + s.App.StakeibcKeeper.AuctionOffRewardCollectorBalance(s.Ctx) + + // Check ConsumerToSendToProvider module balance (should have liquid staked stTokens - 15% of original) + providerPortion := sdkmath.NewInt(150) // 15% of 1000 + s.checkModuleAccountBalance(ccvtypes.ConsumerToSendToProviderName, StAtom, providerPortion) + s.checkModuleAccountBalance(ccvtypes.ConsumerToSendToProviderName, StOsmo, providerPortion) + + // Check Auction module balance (should have remainder - 85% of original) + auctionPortion := sdkmath.NewInt(850) // 85% of 1000 + s.checkModuleAccountBalance(auctiontypes.ModuleName, IbcAtom, auctionPortion) + s.checkModuleAccountBalance(auctiontypes.ModuleName, IbcOsmo, auctionPortion) + + // Check RewardCollector module balance (should be empty) + s.checkModuleAccountBalance(stakeibctypes.RewardCollectorName, IbcAtom, sdkmath.ZeroInt()) + s.checkModuleAccountBalance(stakeibctypes.RewardCollectorName, IbcOsmo, sdkmath.ZeroInt()) +} + +func (s *KeeperTestSuite) TestLiquidStakeRewardCollectorBalance_NoRewardsAccrued() { + s.SetupTestRewardAllocation() + + // balances should be 0 before + s.checkModuleAccountBalance(stakeibctypes.RewardCollectorName, IbcAtom, sdkmath.ZeroInt()) + s.checkModuleAccountBalance(stakeibctypes.RewardCollectorName, IbcOsmo, sdkmath.ZeroInt()) + s.checkModuleAccountBalance(ccvtypes.ConsumerToSendToProviderName, StAtom, sdkmath.ZeroInt()) + s.checkModuleAccountBalance(ccvtypes.ConsumerToSendToProviderName, StOsmo, sdkmath.ZeroInt()) + s.checkModuleAccountBalance(auctiontypes.ModuleName, IbcAtom, sdkmath.ZeroInt()) + s.checkModuleAccountBalance(auctiontypes.ModuleName, IbcOsmo, sdkmath.ZeroInt()) + + // With no IBC tokens in the rewards collector account, the distribution function should do nothing + s.App.StakeibcKeeper.AuctionOffRewardCollectorBalance(s.Ctx) + + // balances should be 0 after + s.checkModuleAccountBalance(stakeibctypes.RewardCollectorName, IbcAtom, sdkmath.ZeroInt()) + s.checkModuleAccountBalance(stakeibctypes.RewardCollectorName, IbcOsmo, sdkmath.ZeroInt()) + s.checkModuleAccountBalance(ccvtypes.ConsumerToSendToProviderName, StAtom, sdkmath.ZeroInt()) + s.checkModuleAccountBalance(ccvtypes.ConsumerToSendToProviderName, StOsmo, sdkmath.ZeroInt()) + s.checkModuleAccountBalance(auctiontypes.ModuleName, IbcAtom, sdkmath.ZeroInt()) + s.checkModuleAccountBalance(auctiontypes.ModuleName, IbcOsmo, sdkmath.ZeroInt()) +} + +// Test the process of a delegator claiming staking reward stTokens (tests that Fee Account can distribute arbitrary denoms) +func (s *KeeperTestSuite) TestClaimStakingRewardStTokens() { + s.SetupTestRewardAllocation() + amount := sdkmath.NewInt(1000) + + // Fund fee collector account with stTokens + s.FundModuleAccount(authtypes.FeeCollectorName, sdk.NewCoin("st"+Atom, amount)) + + // Set up validators & delegators on Stride + addrs := s.TestAccs + for _, acc := range addrs { + s.FundAccount(acc, sdk.NewCoin(sdk.DefaultBondDenom, sdkmath.NewInt(1000000))) + } + valAddrs := simtestutil.ConvertAddrsToValAddrs(addrs) + tstaking := teststaking.NewHelper(s.T(), s.Ctx, &s.App.StakingKeeper) + + pubkeys := simtestutil.CreateTestPubKeys(2) + stakeAmount := sdkmath.NewInt(100) + + // create validator with 50% commission + commission := sdkmath.LegacyNewDecWithPrec(5, 1) + tstaking.Commission = stakingtypes.NewCommissionRates(commission, commission, sdkmath.LegacyNewDec(0)) + tstaking.CreateValidator(valAddrs[0], pubkeys[0], stakeAmount, true) + + // create second validator with 0% commission + commission = sdkmath.LegacyNewDec(0) + tstaking.Commission = stakingtypes.NewCommissionRates(commission, commission, sdkmath.LegacyNewDec(0)) + tstaking.CreateValidator(valAddrs[1], pubkeys[1], stakeAmount, true) + + _, err := s.App.EndBlocker(s.Ctx) + s.Require().NoError(err) + s.Ctx = s.Ctx.WithBlockHeight(s.Ctx.BlockHeight() + 1) + + // Simulate the token distribution from feeCollector to validators + abciValA := abci.Validator{ + Address: pubkeys[0].Address(), + Power: 100, + } + abciValB := abci.Validator{ + Address: pubkeys[1].Address(), + Power: 100, + } + votes := []abci.VoteInfo{ + { + Validator: abciValA, + BlockIdFlag: cmtproto.BlockIDFlagCommit, + }, + { + Validator: abciValB, + BlockIdFlag: cmtproto.BlockIDFlagCommit, + }, + } + err = s.App.DistrKeeper.AllocateTokens(s.Ctx, 200, votes) + s.Require().NoError(err) + + // Withdraw rewards + rewards1, err := s.App.DistrKeeper.WithdrawDelegationRewards(s.Ctx, sdk.AccAddress(valAddrs[0]), valAddrs[0]) + s.Require().NoError(err, "no error expected with withdrawing delegator rewards") + + rewards2, err := s.App.DistrKeeper.WithdrawDelegationRewards(s.Ctx, sdk.AccAddress(valAddrs[1]), valAddrs[1]) + s.Require().NoError(err, "no error expected with withdrawing delegator rewards") + + // Check balances contains stTokens + s.Require().True(strings.Contains(rewards1.String(), "stuatom")) + s.Require().True(strings.Contains(rewards2.String(), "stuatom")) +} diff --git a/x/stakeibc/keeper/reward_converter.go b/x/stakeibc/keeper/reward_converter.go new file mode 100644 index 00000000000..6a4b8efb6fa --- /dev/null +++ b/x/stakeibc/keeper/reward_converter.go @@ -0,0 +1,452 @@ +package keeper + +import ( + "encoding/json" + "errors" + "fmt" + "time" + + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/bech32" + "github.com/cosmos/cosmos-sdk/x/authz" + bankTypes "github.com/cosmos/cosmos-sdk/x/bank/migrations/v3" + "github.com/cosmos/gogoproto/proto" + + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + + "github.com/osmosis-labs/osmosis/v27/utils" + epochstypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +const ( + OsmosisSwapTypeUrl = "/osmosis.poolmanager.v1beta1.MsgSwapExactAmountIn" + LegacyOsmosisSwapTypeUrl = "/osmosis.gamm.v1beta1.MsgSwapExactAmountIn" +) + +// JSON Memo for PFM transfers +type PacketForwardMetadata struct { + Forward *ForwardMetadata `json:"forward"` +} +type ForwardMetadata struct { + Receiver string `json:"receiver"` + Port string `json:"port"` + Channel string `json:"channel"` + Timeout string `json:"timeout"` + Retries int64 `json:"retries"` +} + +type RewardsSplit struct { + RebateAmount sdkmath.Int + StrideFeeAmount sdkmath.Int + ReinvestAmount sdkmath.Int +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// The goal of this code is to allow certain reward token types to be automatically traded into other types +// This happens before the rest of the staking, allocation, distribution etc. would continue as normal +// +// Reward tokens are any special denoms which are paid out in the withdrawal address +// Most host zones inflate their tokens and their native token is what appears in the withdrawal ICA +// The following allows for chains to use foreign denoms as revenue, which can be traded to any other denom first +// +// 1. Epochly check the reward denom balance in the withdrawal address +// on callback, send all this reward denom from withdrawl ICA to trade ICA on the trade zone (OSMOSIS) +// 2. Off-chain swaps of reward denom to host denom +// 3. Epochly check the host denom balance in trade ICA +// on callback, transfer these host denom tokens from trade ICA to withdrawal ICA on original host zone +// +// Normal staking flow continues from there. So the host denom tokens will land on the original host zone +// and the normal staking and distribution flow will continue from there. +////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// Breaks down the split of native rewards into the portions intended for (a) a rebate, (b) stride commission, +// and (c) reinvestment +// For most host zones, the rewards here were generated from normal staking rewards, but in the case of dYdX, +// this is called on the rewards that were converted from USDC to DYDX during the trade route +// +// The rebate percentage is determined by: (% of total TVL contributed by commuity pool) * (rebate percentage) +// +// E.g. Community pool liquid staked 1M, TVL is 10M, rebate is 20% +// Total rewards this epoch are 1000, and the stride fee is 10% +// => Then the rebate is 1000 rewards * 10% stride fee * (1M / 10M) * 20% rebate = 2 tokens +// => Stride fee is 1000 rewards * 10% stride fee - 2 rebate = 98 tokens +// => Reinvestment is 1000 rewards * (100% - 10% stride fee) = 900 tokens +func (k Keeper) CalculateRewardsSplit( + ctx sdk.Context, + hostZone types.HostZone, + rewardsAmount sdkmath.Int, +) (rewardSplit RewardsSplit, err error) { + // Get the fee rate and total fees from params (e.g. 0.1 for 10% fee) + strideFeeParam := sdkmath.NewIntFromUint64(k.GetParams(ctx).StrideCommission) + totalFeeRate := sdkmath.LegacyNewDecFromInt(strideFeeParam).Quo(sdkmath.LegacyNewDec(100)) + + // Get the total fee amount from the fee percentage + totalFeesAmount := sdkmath.LegacyNewDecFromInt(rewardsAmount).Mul(totalFeeRate).TruncateInt() + reinvestAmount := rewardsAmount.Sub(totalFeesAmount) + + // Check if the chain has a rebate + // If there's no rebate, return 0 rebate and send all fees as stride commission + rebateInfo, chainHasRebate := hostZone.SafelyGetCommunityPoolRebate() + if !chainHasRebate { + rewardSplit = RewardsSplit{ + RebateAmount: sdkmath.ZeroInt(), + StrideFeeAmount: totalFeesAmount, + ReinvestAmount: reinvestAmount, + } + return rewardSplit, nil + } + + // Get supply of stTokens to determine the portion of TVL that the community pool liquid stake makes up + stDenom := utils.StAssetDenomFromHostZoneDenom(hostZone.HostDenom) + stTokenSupply := k.bankKeeper.GetSupply(ctx, stDenom).Amount + + // It shouldn't be possible to have 0 token supply (since there are rewards and there was a community pool stake) + // This will also prevent a division by 0 error + if stTokenSupply.IsZero() { + return rewardSplit, errorsmod.Wrapf(types.ErrDivisionByZero, + "unable to calculate rebate amount for %s since total delegations are 0", hostZone.ChainId) + } + + // It also shouldn't be possible for the liquid stake amount to be greater than the full TVL + if rebateInfo.LiquidStakedStTokenAmount.GT(stTokenSupply) { + return rewardSplit, errorsmod.Wrapf(types.ErrFeeSplitInvariantFailed, + "community pool liquid staked amount greater than total delegations") + } + + // The rebate amount is determined by the contribution of the community pool stake towards the total TVL, + // multiplied by the rebate fee percentage + contributionRate := sdkmath.LegacyNewDecFromInt(rebateInfo.LiquidStakedStTokenAmount).Quo(sdkmath.LegacyNewDecFromInt(stTokenSupply)) + rebateAmount := sdkmath.LegacyNewDecFromInt(totalFeesAmount).Mul(contributionRate).Mul(rebateInfo.RebateRate).TruncateInt() + strideFeeAmount := totalFeesAmount.Sub(rebateAmount) + + rewardSplit = RewardsSplit{ + RebateAmount: rebateAmount, + StrideFeeAmount: strideFeeAmount, + ReinvestAmount: reinvestAmount, + } + + return rewardSplit, nil +} + +// Builds an authz MsgGrant or MsgRevoke to grant an account trade capabilties on behalf of the trade ICA +func (k Keeper) BuildTradeAuthzMsg( + ctx sdk.Context, + tradeRoute types.TradeRoute, + permissionChange types.AuthzPermissionChange, + grantee string, + legacy bool, +) (authzMsg []proto.Message, err error) { + messageTypeUrl := OsmosisSwapTypeUrl + if legacy { + messageTypeUrl = LegacyOsmosisSwapTypeUrl + } + + switch permissionChange { + case types.AuthzPermissionChange_GRANT: + authorization := authz.NewGenericAuthorization(messageTypeUrl) + expiration := ctx.BlockTime().Add(time.Hour * 24 * 365 * 100) // 100 years + + grant, err := authz.NewGrant(ctx.BlockTime(), authorization, &expiration) + if err != nil { + return nil, errorsmod.Wrapf(err, "unable to build grant struct") + } + authzMsg = []proto.Message{&authz.MsgGrant{ + Granter: tradeRoute.TradeAccount.Address, + Grantee: grantee, + Grant: grant, + }} + + case types.AuthzPermissionChange_REVOKE: + authzMsg = []proto.Message{&authz.MsgRevoke{ + Granter: tradeRoute.TradeAccount.Address, + Grantee: grantee, + MsgTypeUrl: messageTypeUrl, + }} + + default: + return nil, errors.New("invalid permission change") + } + + return authzMsg, nil +} + +// Builds a PFM transfer message to send reward tokens from the host zone, +// through the reward zone (to unwind) and finally to the trade zone +func (k Keeper) BuildHostToTradeTransferMsg( + ctx sdk.Context, + amount sdkmath.Int, + route types.TradeRoute, +) (msg transfertypes.MsgTransfer, err error) { + // Get the epoch tracker to determine the timeouts + strideEpochTracker, found := k.GetEpochTracker(ctx, epochstypes.STRIDE_EPOCH) + if !found { + return msg, errorsmod.Wrap(types.ErrEpochNotFound, epochstypes.STRIDE_EPOCH) + } + + // Timeout the first transfer halfway through the epoch, and the second transfer at the end of the epoch + // The pfm transfer requires a duration instead of a timestamp for the timeout, so we just use half the epoch length + halfEpochDuration := strideEpochTracker.Duration / 2 + transfer1TimeoutTimestamp := uint64(strideEpochTracker.NextEpochStartTime - halfEpochDuration) // unix nano + transfer2TimeoutDuration := fmt.Sprintf("%ds", halfEpochDuration/1e9) // string in seconds + + startingDenom := route.RewardDenomOnHostZone + sendTokens := sdk.NewCoin(startingDenom, amount) + + withdrawlIcaAddress := route.HostAccount.Address + unwindIcaAddress := route.RewardAccount.Address + tradeIcaAddress := route.TradeAccount.Address + + // Validate ICAs were registered + if withdrawlIcaAddress == "" { + return msg, errorsmod.Wrapf(types.ErrICAAccountNotFound, "no host account found for %s", route.Description()) + } + if unwindIcaAddress == "" { + return msg, errorsmod.Wrapf(types.ErrICAAccountNotFound, "no reward account found for %s", route.Description()) + } + if tradeIcaAddress == "" { + return msg, errorsmod.Wrapf(types.ErrICAAccountNotFound, "no trade account found for %s", route.Description()) + } + + // Build the pfm memo to specify the forwarding logic + // This transfer channel id is a channel on the reward Zone for transfers to the trade zone + // (not to be confused with a transfer channel on Stride or the Host Zone) + memo := PacketForwardMetadata{ + Forward: &ForwardMetadata{ + Receiver: tradeIcaAddress, + Port: transfertypes.PortID, + Channel: route.RewardToTradeChannelId, + Timeout: transfer2TimeoutDuration, + Retries: 0, + }, + } + memoJSON, err := json.Marshal(memo) + if err != nil { + return msg, err + } + + msg = transfertypes.MsgTransfer{ + SourcePort: transfertypes.PortID, + SourceChannel: route.HostToRewardChannelId, // channel on hostZone for transfers to rewardZone + Token: sendTokens, + Sender: withdrawlIcaAddress, + Receiver: unwindIcaAddress, // could be "pfm" or a real address depending on version + TimeoutTimestamp: transfer1TimeoutTimestamp, + Memo: string(memoJSON), + } + + return msg, nil +} + +// ICA tx will kick off transfering the reward tokens from the hostZone withdrawl ICA to the tradeZone trade ICA +// This will be two hops to unwind the ibc denom through the rewardZone using pfm in the transfer memo +func (k Keeper) TransferRewardTokensHostToTrade(ctx sdk.Context, amount sdkmath.Int, route types.TradeRoute) error { + // Confirm the reward amount exceeds the transfer threshold, otherwise exit prematurely + if route.MinTransferAmount.GT(amount) { + k.Logger(ctx).Info(fmt.Sprintf("Balance of %v is below transfer minimum of %v, skipping transfer", + amount, route.MinTransferAmount)) + return nil + } + + // Build the PFM transfer message from host to trade zone + msg, err := k.BuildHostToTradeTransferMsg(ctx, amount, route) + if err != nil { + return err + } + msgs := []proto.Message{&msg} + + hostZoneId := route.HostAccount.ChainId + rewardZoneId := route.RewardAccount.ChainId + tradeZoneId := route.TradeAccount.ChainId + k.Logger(ctx).Info(utils.LogWithHostZone(hostZoneId, + "Preparing MsgTransfer of %+v from %s to %s to %s", msg.Token, hostZoneId, rewardZoneId, tradeZoneId)) + + // Send the ICA tx to kick off transfer from hostZone through rewardZone to the tradeZone (no callbacks) + hostAccount := route.HostAccount + withdrawalOwner := types.FormatHostZoneICAOwner(hostAccount.ChainId, hostAccount.Type) + err = k.SubmitICATxWithoutCallback(ctx, hostAccount.ConnectionId, withdrawalOwner, msgs, msg.TimeoutTimestamp) + if err != nil { + return errorsmod.Wrapf(err, "Failed to submit ICA tx, Messages: %+v", msgs) + } + + return nil +} + +// ICA tx to kick off transfering the converted tokens back from tradeZone to the hostZone withdrawal ICA +func (k Keeper) TransferConvertedTokensTradeToHost(ctx sdk.Context, amount sdkmath.Int, route types.TradeRoute) error { + // Timeout for ica tx and the transfer msgs is at end of epoch + strideEpochTracker, found := k.GetEpochTracker(ctx, epochstypes.STRIDE_EPOCH) + if !found { + return errorsmod.Wrap(types.ErrEpochNotFound, epochstypes.STRIDE_EPOCH) + } + timeout := uint64(strideEpochTracker.NextEpochStartTime) + + convertedDenom := route.HostDenomOnTradeZone + sendTokens := sdk.NewCoin(convertedDenom, amount) + + // Validate ICAs were registered + tradeIcaAddress := route.TradeAccount.Address + withdrawlIcaAddress := route.HostAccount.Address + if withdrawlIcaAddress == "" { + return errorsmod.Wrapf(types.ErrICAAccountNotFound, "no host account found for %s", route.Description()) + } + if tradeIcaAddress == "" { + return errorsmod.Wrapf(types.ErrICAAccountNotFound, "no trade account found for %s", route.Description()) + } + + var msgs []proto.Message + msgs = append(msgs, &transfertypes.MsgTransfer{ + SourcePort: transfertypes.PortID, + SourceChannel: route.TradeToHostChannelId, // channel on tradeZone for transfers to hostZone + Token: sendTokens, + Sender: tradeIcaAddress, + Receiver: withdrawlIcaAddress, + TimeoutTimestamp: timeout, + Memo: "", + }) + + hostZoneId := route.HostAccount.ChainId + tradeZoneId := route.TradeAccount.ChainId + k.Logger(ctx).Info(utils.LogWithHostZone(hostZoneId, + "Preparing MsgTransfer of %+v from %s to %s", sendTokens, tradeZoneId, hostZoneId)) + + // Send the ICA tx to kick off transfer from hostZone through rewardZone to the tradeZone (no callbacks) + tradeAccount := route.TradeAccount + tradeOwner := types.FormatTradeRouteICAOwnerFromRouteId(tradeAccount.ChainId, route.GetRouteId(), tradeAccount.Type) + err := k.SubmitICATxWithoutCallback(ctx, tradeAccount.ConnectionId, tradeOwner, msgs, timeout) + if err != nil { + return errorsmod.Wrapf(err, "Failed to submit ICA tx, Messages: %+v", msgs) + } + + return nil +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// ICQ calls for remote ICA balances +// There is a single trade zone +// We have to initialize a single hostZone object for the trade zone once in initialization and +// then it can be used in all these calls +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +// Kick off ICQ for the reward denom balance in the withdrawal address +func (k Keeper) WithdrawalRewardBalanceQuery(ctx sdk.Context, route types.TradeRoute) error { + withdrawalAccount := route.HostAccount + k.Logger(ctx).Info(utils.LogWithHostZone(withdrawalAccount.ChainId, "Submitting ICQ for reward denom in withdrawal account")) + + // Encode the withdrawal account address for the query request + // The query request consists of the withdrawal account address and reward denom + _, withdrawalAddressBz, err := bech32.DecodeAndConvert(withdrawalAccount.Address) + if err != nil { + return errorsmod.Wrapf(err, "invalid withdrawal account address (%s), could not decode", withdrawalAccount.Address) + } + queryData := append(bankTypes.CreateAccountBalancesPrefix(withdrawalAddressBz), []byte(route.RewardDenomOnHostZone)...) + + // Timeout the query halfway through the epoch (since that's when the first transfer + // in the pfm sequence will timeout) + strideEpochTracker, found := k.GetEpochTracker(ctx, epochstypes.STRIDE_EPOCH) + if !found { + return errorsmod.Wrap(types.ErrEpochNotFound, epochstypes.STRIDE_EPOCH) + } + timeoutDuration := time.Duration(utils.UintToInt(strideEpochTracker.Duration)) / 2 + + // We need the trade route keys in the callback to look up the tradeRoute struct + callbackData := types.TradeRouteCallback{ + RewardDenom: route.RewardDenomOnRewardZone, + HostDenom: route.HostDenomOnHostZone, + } + callbackDataBz, err := proto.Marshal(&callbackData) + if err != nil { + return errorsmod.Wrapf(err, "unable to marshal TradeRoute callback data") + } + + // Submit the ICQ for the withdrawal account balance + query := icqtypes.Query{ + ChainId: withdrawalAccount.ChainId, + ConnectionId: withdrawalAccount.ConnectionId, + QueryType: icqtypes.BANK_STORE_QUERY_WITH_PROOF, + RequestData: queryData, + CallbackModule: types.ModuleName, + CallbackId: ICQCallbackID_WithdrawalRewardBalance, + CallbackData: callbackDataBz, + TimeoutDuration: timeoutDuration, + TimeoutPolicy: icqtypes.TimeoutPolicy_REJECT_QUERY_RESPONSE, + } + if err := k.InterchainQueryKeeper.SubmitICQRequest(ctx, query, false); err != nil { + return err + } + + return nil +} + +// Kick off ICQ for how many converted tokens are in the trade ICA associated with this host zone +func (k Keeper) TradeConvertedBalanceQuery(ctx sdk.Context, route types.TradeRoute) error { + tradeAccount := route.TradeAccount + k.Logger(ctx).Info(utils.LogWithHostZone(tradeAccount.ChainId, "Submitting ICQ for converted denom in trade ICA account")) + + // Encode the trade account address for the query request + // The query request consists of the trade account address and converted denom + // keep in mind this ICA address actually exists on trade zone but is associated with trades performed for host zone + _, tradeAddressBz, err := bech32.DecodeAndConvert(tradeAccount.Address) + if err != nil { + return errorsmod.Wrapf(err, "invalid trade account address (%s), could not decode", tradeAccount.Address) + } + queryData := append(bankTypes.CreateAccountBalancesPrefix(tradeAddressBz), []byte(route.HostDenomOnTradeZone)...) + + // Timeout query at end of epoch + strideEpochTracker, found := k.GetEpochTracker(ctx, epochstypes.STRIDE_EPOCH) + if !found { + return errorsmod.Wrap(types.ErrEpochNotFound, epochstypes.STRIDE_EPOCH) + } + timeout := time.Unix(0, utils.UintToInt(strideEpochTracker.NextEpochStartTime)) + timeoutDuration := timeout.Sub(ctx.BlockTime()) + + // We need the trade route keys in the callback to look up the tradeRoute struct + callbackData := types.TradeRouteCallback{ + RewardDenom: route.RewardDenomOnRewardZone, + HostDenom: route.HostDenomOnHostZone, + } + callbackDataBz, err := proto.Marshal(&callbackData) + if err != nil { + return errorsmod.Wrapf(err, "unable to marshal trade route as callback data") + } + + // Submit the ICQ for the withdrawal account balance + query := icqtypes.Query{ + ChainId: tradeAccount.ChainId, + ConnectionId: tradeAccount.ConnectionId, // query needs to go to the trade zone, not the host zone + QueryType: icqtypes.BANK_STORE_QUERY_WITH_PROOF, + RequestData: queryData, + CallbackModule: types.ModuleName, + CallbackId: ICQCallbackID_TradeConvertedBalance, + CallbackData: callbackDataBz, + TimeoutDuration: timeoutDuration, + TimeoutPolicy: icqtypes.TimeoutPolicy_REJECT_QUERY_RESPONSE, + } + if err := k.InterchainQueryKeeper.SubmitICQRequest(ctx, query, false); err != nil { + return err + } + + return nil +} + +// Main epochly trigger for the trade route tokens swap +// +// The current design assumes foreign reward tokens start and end in the hostZone withdrawal address +// Step 1: transfer reward tokens to trade chain +// Step 2: (off-chain) perform the swap in small batches +// Step 3: return the swapped tokens to the withdrawal ICA on hostZone +func (k Keeper) TransferAllRewardTokens(ctx sdk.Context) { + for _, route := range k.GetAllTradeRoutes(ctx) { + // Step 1: ICQ reward balance on hostZone, transfer funds with unwinding to trade chain + if err := k.WithdrawalRewardBalanceQuery(ctx, route); err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Unable to submit query for reward balance in withdrawal ICA: %s", err)) + } + // Step 3: ICQ converted tokens in trade ICA, transfer funds back to hostZone withdrawal ICA + if err := k.TradeConvertedBalanceQuery(ctx, route); err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Unable to submit query for converted balance in trade ICA: %s", err)) + } + } +} diff --git a/x/stakeibc/keeper/reward_converter_test.go b/x/stakeibc/keeper/reward_converter_test.go new file mode 100644 index 00000000000..209d8a6d5fe --- /dev/null +++ b/x/stakeibc/keeper/reward_converter_test.go @@ -0,0 +1,793 @@ +package keeper_test + +import ( + "fmt" + "time" + + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/authz" + "github.com/cosmos/gogoproto/proto" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + + "github.com/osmosis-labs/osmosis/v27/utils" + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + icqtypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/keeper" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// Useful across all balance query icqcallback tests +type BalanceQueryCallbackTestCase struct { + TradeRoute types.TradeRoute + Response ICQCallbackArgs + Balance sdkmath.Int + ChannelID string + PortID string +} + +type TransferRewardHostToTradeTestCase struct { + TradeRoute types.TradeRoute + TransferAmount sdkmath.Int + ExpectedTransferMsg transfertypes.MsgTransfer + ChannelID string + PortID string +} + +// -------------------------------------------------------------- +// CalculateRewardsSplit +// -------------------------------------------------------------- + +func (s *KeeperTestSuite) TestCalculateRewardsSplit() { + testCases := []struct { + name string + communityPoolLiquidStake sdkmath.Int + totalStTokenSupply sdkmath.Int + rewardAmount sdkmath.Int + strideFee uint64 + rebateRate sdkmath.LegacyDec + expectedRebateAmount sdkmath.Int + expectedStrideFeeAmount sdkmath.Int + expectedReinvestAmount sdkmath.Int + expectedError string + }{ + { + // 10 CP Liquid Stake, 100 TVL => 10% contribution + // 1000 rewards, 10% stride fee => 100 total fees + // 100 total fees * 10% contribution * 50% rebate => 5 rebate + // 100 total fees - 5 rebate => 95 stride fee + // 1000 rewards - 100 total fees => 900 reinvested + name: "case 1", + communityPoolLiquidStake: sdkmath.NewInt(10), + totalStTokenSupply: sdkmath.NewInt(100), + rewardAmount: sdkmath.NewInt(1000), + strideFee: 10, + rebateRate: sdkmath.LegacyMustNewDecFromStr("0.5"), + + expectedRebateAmount: sdkmath.NewInt(5), + expectedStrideFeeAmount: sdkmath.NewInt(95), + expectedReinvestAmount: sdkmath.NewInt(900), + }, + { + // (Example #1 but with a 2x bigger liquid stake) + // 20 CP Liquid Stake, 100 TVL => 20% contribution + // 1000 rewards, 10% stride fee => 100 total fees + // 100 total fees * 20% contribution * 50% rebate => 10 rebate + // 100 total fees - 10 rebate => 90 stride fee + // 1000 rewards - 100 total fees => 900 reinvested + name: "case 2", + communityPoolLiquidStake: sdkmath.NewInt(20), + totalStTokenSupply: sdkmath.NewInt(100), + rewardAmount: sdkmath.NewInt(1000), + strideFee: 10, + rebateRate: sdkmath.LegacyMustNewDecFromStr("0.5"), + + expectedRebateAmount: sdkmath.NewInt(10), + expectedStrideFeeAmount: sdkmath.NewInt(90), + expectedReinvestAmount: sdkmath.NewInt(900), + }, + { + // (Example #1 but with a 2x larger TVL) + // 10 CP Liquid Stake, 200 TVL => 5% contribution + // 1000 rewards, 10% stride fee => 100 total fees + // 100 total fees * 5% contribution * 50% rebate => 2.5 rebate (truncated to 2) + // 100 total fees - 2 rebate => 98 stride fee + // 1000 rewards - 100 total fees => 900 reinvested + name: "case 3", + communityPoolLiquidStake: sdkmath.NewInt(10), + totalStTokenSupply: sdkmath.NewInt(200), + rewardAmount: sdkmath.NewInt(1000), + strideFee: 10, + rebateRate: sdkmath.LegacyMustNewDecFromStr("0.5"), + + expectedRebateAmount: sdkmath.NewInt(2), + expectedStrideFeeAmount: sdkmath.NewInt(98), + expectedReinvestAmount: sdkmath.NewInt(900), + }, + { + // (Example #1 but with a 2x larger stride fee) + // 10 CP Liquid Stake, 100 TVL => 10% contribution + // 1000 rewards, 20% stride fee => 200 total fees + // 200 total fees * 10% contribution * 50% rebate => 10 rebate + // 200 total fees - 10 rebate => 190 stride fee + // 1000 rewards - 200 total fees => 800 reinvested + name: "case 4", + communityPoolLiquidStake: sdkmath.NewInt(10), + totalStTokenSupply: sdkmath.NewInt(100), + rewardAmount: sdkmath.NewInt(1000), + strideFee: 20, + rebateRate: sdkmath.LegacyMustNewDecFromStr("0.5"), + + expectedRebateAmount: sdkmath.NewInt(10), + expectedStrideFeeAmount: sdkmath.NewInt(190), + expectedReinvestAmount: sdkmath.NewInt(800), + }, + { + // (Example #1 but with a smaller rebate) + // 10 CP Liquid Stake, 100 TVL => 10% contribution + // 1000 rewards, 10% stride fee => 100 total fees + // 100 total fees * 10% contribution * 20% rebate => 2 rebate + // 100 total fees - 2 rebate => 98 stride fee + // 1000 rewards - 100 total fees => 900 reinvested + name: "case 5", + communityPoolLiquidStake: sdkmath.NewInt(10), + totalStTokenSupply: sdkmath.NewInt(100), + rewardAmount: sdkmath.NewInt(1000), + strideFee: 10, + rebateRate: sdkmath.LegacyMustNewDecFromStr("0.2"), + + expectedRebateAmount: sdkmath.NewInt(2), + expectedStrideFeeAmount: sdkmath.NewInt(98), + expectedReinvestAmount: sdkmath.NewInt(900), + }, + { + // (Example #1 but with a larger rebate) + // 10 CP Liquid Stake, 100 TVL => 10% contribution + // 1000 rewards, 10% stride fee => 100 total fees + // 100 total fees * 10% contribution * 79% rebate => 7.9 rebate (truncated to 7) + // 100 total fees - 2 rebate => 98 stride fee + // 1000 rewards - 100 total fees => 900 reinvested + name: "case 6", + communityPoolLiquidStake: sdkmath.NewInt(10), + totalStTokenSupply: sdkmath.NewInt(100), + rewardAmount: sdkmath.NewInt(1000), + strideFee: 10, + rebateRate: sdkmath.LegacyMustNewDecFromStr("0.79"), + + expectedRebateAmount: sdkmath.NewInt(7), + expectedStrideFeeAmount: sdkmath.NewInt(93), + expectedReinvestAmount: sdkmath.NewInt(900), + }, + { + // No rebate + // 10% fees off 1000 rewards = 100 stride fees, 900 reinvest + name: "nil rebate", + totalStTokenSupply: sdkmath.NewInt(100), + rewardAmount: sdkmath.NewInt(1000), + strideFee: 10, + + expectedRebateAmount: sdkmath.NewInt(0), + expectedStrideFeeAmount: sdkmath.NewInt(100), + expectedReinvestAmount: sdkmath.NewInt(900), + }, + { + // 0% rebate - all fees go to stride + // 10% fees off 1000 rewards = 100 stride fees, 900 reinvest + name: "zero rebate", + totalStTokenSupply: sdkmath.NewInt(100), + rewardAmount: sdkmath.NewInt(1000), + strideFee: 10, + rebateRate: sdkmath.LegacyZeroDec(), + + expectedRebateAmount: sdkmath.NewInt(0), + expectedStrideFeeAmount: sdkmath.NewInt(100), + expectedReinvestAmount: sdkmath.NewInt(900), + }, + { + // 100% rebate + // 10 CP Liquid Stake, 100 TVL => 10% contribution + // 1000 rewards, 10% stride fee => 100 total fees + // 100 total fees * 10% contribution * 100% rebate => 10 rebate + // 100 total fees - 10 rebate => 90 stride fee + // 1000 rewards - 100 total fees => 900 reinvested + name: "full rebate", + communityPoolLiquidStake: sdkmath.NewInt(10), + totalStTokenSupply: sdkmath.NewInt(100), + rewardAmount: sdkmath.NewInt(1000), + strideFee: 10, + rebateRate: sdkmath.LegacyOneDec(), + + expectedRebateAmount: sdkmath.NewInt(10), + expectedStrideFeeAmount: sdkmath.NewInt(90), + expectedReinvestAmount: sdkmath.NewInt(900), + }, + { + // Liquid staked amount 0 - effectively the same as no rebate + // 10% fees off 1000 rewards = 100 stride fees, 900 reinvest + name: "zero liquid staked", + communityPoolLiquidStake: sdkmath.NewInt(0), + totalStTokenSupply: sdkmath.NewInt(100), + rewardAmount: sdkmath.NewInt(1000), + strideFee: 10, + rebateRate: sdkmath.LegacyMustNewDecFromStr("0.50"), // ignored since 0 LS'd + + expectedRebateAmount: sdkmath.NewInt(0), + expectedStrideFeeAmount: sdkmath.NewInt(100), + expectedReinvestAmount: sdkmath.NewInt(900), + }, + { + // Liquid stake represents all of TVL + // Community pool liquid stake represents full TVL + // 100 CP Liquid Stake, 100 TVL => 100% contribution + // 1000 rewards, 10% stride fee => 100 total fees + // 100 total fees * 100% contribution * 50% rebate => 50 rebate + // 100 total fees - 50 rebate => 50 stride fee + // 1000 rewards - 100 total fees => 900 reinvested + name: "liquid stake represents full TVL", + communityPoolLiquidStake: sdkmath.NewInt(100), + totalStTokenSupply: sdkmath.NewInt(100), + rewardAmount: sdkmath.NewInt(1000), + strideFee: 10, + rebateRate: sdkmath.LegacyMustNewDecFromStr("0.50"), + + expectedRebateAmount: sdkmath.NewInt(50), + expectedStrideFeeAmount: sdkmath.NewInt(50), + expectedReinvestAmount: sdkmath.NewInt(900), + }, + { + // 100% contribution, 100% rebate + // Community pool gets all fees + // 10% fees off 1000 rewards = 100 rebate, 900 reinvest + name: "liquid stake represents full TVL and full rebate", + communityPoolLiquidStake: sdkmath.NewInt(100), + totalStTokenSupply: sdkmath.NewInt(100), + rewardAmount: sdkmath.NewInt(1000), + strideFee: 10, + rebateRate: sdkmath.LegacyOneDec(), + + expectedRebateAmount: sdkmath.NewInt(100), + expectedStrideFeeAmount: sdkmath.NewInt(0), + expectedReinvestAmount: sdkmath.NewInt(900), + }, + { + // No tvl - should error + name: "no tvl", + communityPoolLiquidStake: sdkmath.NewInt(10), + totalStTokenSupply: sdkmath.NewInt(0), + rewardAmount: sdkmath.NewInt(1000), + strideFee: 10, + rebateRate: sdkmath.LegacyMustNewDecFromStr("0.5"), + + expectedError: "unable to calculate rebate amount", + }, + { + // Liquid staked amount is greater than the TVL - should error + name: "liquid staked more than tvl", + communityPoolLiquidStake: sdkmath.NewInt(1001), + totalStTokenSupply: sdkmath.NewInt(1000), + rewardAmount: sdkmath.NewInt(100), + strideFee: 10, + rebateRate: sdkmath.LegacyMustNewDecFromStr("0.5"), + + expectedError: "community pool liquid staked amount greater than total delegations", + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + s.SetupTest() // resets supply + + // Build out the host zone - only add the rebate struct if one of the rebate fields was provided + hostZone := types.HostZone{ + ChainId: chainId, + HostDenom: HostDenom, + } + if !tc.communityPoolLiquidStake.IsNil() { + hostZone.CommunityPoolRebate = &types.CommunityPoolRebate{ + RebateRate: tc.rebateRate, + LiquidStakedStTokenAmount: tc.communityPoolLiquidStake, + } + } + + // Store the fee as a param + params := types.DefaultParams() + params.StrideCommission = tc.strideFee + s.App.StakeibcKeeper.SetParams(s.Ctx, params) + + // Mint stTokens to populate the supply + stCoin := sdk.NewCoin(utils.StAssetDenomFromHostZoneDenom(HostDenom), tc.totalStTokenSupply) + s.FundAccount(s.TestAccs[0], stCoin) + + // Call the tested function to get the expected amounts + rewardsSplit, actualError := s.App.StakeibcKeeper.CalculateRewardsSplit( + s.Ctx, + hostZone, + tc.rewardAmount, + ) + + // Confirm the amounts and error + if tc.expectedError != "" { + s.Require().ErrorContains(actualError, tc.expectedError, "error expected") + } else { + s.Require().Equal(tc.expectedRebateAmount.Int64(), rewardsSplit.RebateAmount.Int64(), "rebate amount") + s.Require().Equal(tc.expectedStrideFeeAmount.Int64(), rewardsSplit.StrideFeeAmount.Int64(), "stride fee amount") + s.Require().Equal(tc.expectedReinvestAmount.Int64(), rewardsSplit.ReinvestAmount.Int64(), "reinvest amount") + } + }) + } +} + +// -------------------------------------------------------------- +// BuildTradeAuthzMsg +// -------------------------------------------------------------- + +func (s *KeeperTestSuite) TestBuildTradeAuthzMsg() { + granterAddress := "trade_ica" + granteeAddress := "trade_controller" + + tradeRoute := types.TradeRoute{ + TradeAccount: types.ICAAccount{ + Address: granterAddress, + }, + } + + testCases := map[bool]string{ + false: "/osmosis.poolmanager.v1beta1.MsgSwapExactAmountIn", + true: "/osmosis.gamm.v1beta1.MsgSwapExactAmountIn", + } + + for legacy, expectedTypeUrl := range testCases { + // Test granting trade permissions + msgs, err := s.App.StakeibcKeeper.BuildTradeAuthzMsg( + s.Ctx, + tradeRoute, + types.AuthzPermissionChange_GRANT, + granteeAddress, + legacy, + ) + s.Require().NoError(err, "no error expected when building grant message") + s.Require().Len(msgs, 1, "there should be one message") + + grantMsg, ok := msgs[0].(*authz.MsgGrant) + s.Require().True(ok, "message should be of type grant") + s.Require().Equal(granterAddress, grantMsg.Granter, "granter of grant message") + s.Require().Equal(granteeAddress, grantMsg.Grantee, "grantee of grant message") + + authorization, err := grantMsg.Grant.GetAuthorization() + expectedExpiration := s.Ctx.BlockTime().Add(time.Hour * 24 * 365 * 100) + s.Require().NoError(err) + s.Require().Equal(expectedTypeUrl, authorization.MsgTypeURL(), "grant msg type url") + s.Require().Equal(expectedExpiration, *grantMsg.Grant.Expiration, "expiration should be one year from the current block time") + + // Test revoking trade permissions + msgs, err = s.App.StakeibcKeeper.BuildTradeAuthzMsg( + s.Ctx, + tradeRoute, + types.AuthzPermissionChange_REVOKE, + granteeAddress, + legacy, + ) + s.Require().NoError(err, "no error expected when building revoke message") + s.Require().Len(msgs, 1, "there should be one message") + + revokeMsg, ok := msgs[0].(*authz.MsgRevoke) + s.Require().True(ok, "message should be of type revoke") + s.Require().Equal(granterAddress, revokeMsg.Granter, "granter of revoke message") + s.Require().Equal(granteeAddress, revokeMsg.Grantee, "grantee of revoke message") + s.Require().Equal(expectedTypeUrl, revokeMsg.MsgTypeUrl, "revoke msg type url") + + // Test invalid permissions + _, err = s.App.StakeibcKeeper.BuildTradeAuthzMsg(s.Ctx, tradeRoute, 100, granteeAddress, legacy) + s.Require().ErrorContains(err, "invalid permission change") + } +} + +// -------------------------------------------------------------- +// Transfer Host to Trade +// -------------------------------------------------------------- + +func (s *KeeperTestSuite) SetupTransferRewardTokensHostToTradeTestCase() TransferRewardHostToTradeTestCase { + // Create an ICA channel for the transfer submission + owner := types.FormatHostZoneICAOwner(HostChainId, types.ICAAccountType_WITHDRAWAL) + channelId, portId := s.CreateICAChannel(owner) + + // Define components of transfer message + hostToRewardChannelId := "channel-0" + rewardToTradeChannelId := "channel-1" + + rewardDenomOnHostZone := "ibc/reward_on_host" + rewardDenomOnRewardZone := RewardDenom + + withdrawalAddress := "withdrawal_address" + unwindAddress := "unwind_address" + tradeAddress := "trade_address" + + transferAmount := sdkmath.NewInt(1000) + transferToken := sdk.NewCoin(rewardDenomOnHostZone, transferAmount) + minTransferAmount := sdkmath.NewInt(500) + + currentTime := s.Ctx.BlockTime() + epochLength := time.Second * 10 // 10 seconds + transfer1TimeoutTimestamp := currentTime.Add(time.Second * 5) // 5 seconds from now (halfway through) + transfer2TimeoutDuration := "5s" + + // Create a trade route with the relevant addresses and transfer channels + route := types.TradeRoute{ + HostToRewardChannelId: hostToRewardChannelId, + RewardToTradeChannelId: rewardToTradeChannelId, + + RewardDenomOnHostZone: rewardDenomOnHostZone, + RewardDenomOnRewardZone: rewardDenomOnRewardZone, + HostDenomOnHostZone: HostDenom, + + HostAccount: types.ICAAccount{ + ChainId: HostChainId, + Address: withdrawalAddress, + ConnectionId: ibctesting.FirstConnectionID, + Type: types.ICAAccountType_WITHDRAWAL, + }, + RewardAccount: types.ICAAccount{ + Address: unwindAddress, + }, + TradeAccount: types.ICAAccount{ + Address: tradeAddress, + }, + + MinTransferAmount: minTransferAmount, + } + + // Create an epoch tracker to dictate the timeout + s.CreateEpochForICATimeout(epochtypes.STRIDE_EPOCH, epochLength) + + // Define the expected transfer message using all the above + memoJSON := fmt.Sprintf(`{"forward":{"receiver":"%s","port":"transfer","channel":"%s","timeout":"%s","retries":0}}`, + tradeAddress, rewardToTradeChannelId, transfer2TimeoutDuration) + + expectedMsg := transfertypes.MsgTransfer{ + SourcePort: transfertypes.PortID, + SourceChannel: hostToRewardChannelId, + Token: transferToken, + Sender: withdrawalAddress, + Receiver: unwindAddress, + TimeoutTimestamp: uint64(transfer1TimeoutTimestamp.UnixNano()), + Memo: memoJSON, + } + + return TransferRewardHostToTradeTestCase{ + TradeRoute: route, + TransferAmount: transferAmount, + ExpectedTransferMsg: expectedMsg, + ChannelID: channelId, + PortID: portId, + } +} + +func (s *KeeperTestSuite) TestBuildHostToTradeTransferMsg_Success() { + tc := s.SetupTransferRewardTokensHostToTradeTestCase() + + // Confirm the generated message matches expectations + actualMsg, err := s.App.StakeibcKeeper.BuildHostToTradeTransferMsg(s.Ctx, tc.TransferAmount, tc.TradeRoute) + s.Require().NoError(err, "no error expected when building transfer message") + s.Require().Equal(tc.ExpectedTransferMsg, actualMsg, "transfer message should have matched") +} + +func (s *KeeperTestSuite) TestBuildHostToTradeTransferMsg_InvalidICAAddress() { + tc := s.SetupTransferRewardTokensHostToTradeTestCase() + + // Check unregisted ICA addresses cause failures + invalidRoute := tc.TradeRoute + invalidRoute.HostAccount.Address = "" + _, err := s.App.StakeibcKeeper.BuildHostToTradeTransferMsg(s.Ctx, tc.TransferAmount, invalidRoute) + s.Require().ErrorContains(err, "no host account found") + + invalidRoute = tc.TradeRoute + invalidRoute.RewardAccount.Address = "" + _, err = s.App.StakeibcKeeper.BuildHostToTradeTransferMsg(s.Ctx, tc.TransferAmount, invalidRoute) + s.Require().ErrorContains(err, "no reward account found") + + invalidRoute = tc.TradeRoute + invalidRoute.TradeAccount.Address = "" + _, err = s.App.StakeibcKeeper.BuildHostToTradeTransferMsg(s.Ctx, tc.TransferAmount, invalidRoute) + s.Require().ErrorContains(err, "no trade account found") +} + +func (s *KeeperTestSuite) TestBuildHostToTradeTransferMsg_EpochNotFound() { + tc := s.SetupTransferRewardTokensHostToTradeTestCase() + + // Delete the epoch tracker and confirm the message cannot be built + s.App.StakeibcKeeper.RemoveEpochTracker(s.Ctx, epochtypes.STRIDE_EPOCH) + + _, err := s.App.StakeibcKeeper.BuildHostToTradeTransferMsg(s.Ctx, tc.TransferAmount, tc.TradeRoute) + s.Require().ErrorContains(err, "epoch not found") +} + +func (s *KeeperTestSuite) TestTransferRewardTokensHostToTrade_Success() { + tc := s.SetupTransferRewardTokensHostToTradeTestCase() + + // Check that the transfer ICA is submitted when the function is called + s.CheckICATxSubmitted(tc.PortID, tc.ChannelID, func() error { + return s.App.StakeibcKeeper.TransferRewardTokensHostToTrade(s.Ctx, tc.TransferAmount, tc.TradeRoute) + }) +} + +func (s *KeeperTestSuite) TestTransferRewardTokensHostToTrade_TransferAmountBelowMin() { + tc := s.SetupTransferRewardTokensHostToTradeTestCase() + + // Attempt to call the function with an transfer amount below the min, + // it should not submit an ICA + invalidTransferAmount := tc.TradeRoute.MinTransferAmount.Sub(sdkmath.OneInt()) + s.CheckICATxNotSubmitted(tc.PortID, tc.ChannelID, func() error { + return s.App.StakeibcKeeper.TransferRewardTokensHostToTrade(s.Ctx, invalidTransferAmount, tc.TradeRoute) + }) +} + +func (s *KeeperTestSuite) TestTransferRewardTokensHostToTrade_FailedToSubmitICA() { + tc := s.SetupTransferRewardTokensHostToTradeTestCase() + + // Remove the connection ID and confirm the ICA submission fails + invalidRoute := tc.TradeRoute + invalidRoute.HostAccount.ConnectionId = "" + + err := s.App.StakeibcKeeper.TransferRewardTokensHostToTrade(s.Ctx, tc.TransferAmount, invalidRoute) + s.Require().ErrorContains(err, "Failed to submit ICA tx") +} + +func (s *KeeperTestSuite) TestTransferRewardTokensHostToTrade_EpochNotFound() { + tc := s.SetupTransferRewardTokensHostToTradeTestCase() + + // Delete the epoch tracker and confirm the transfer cannot be initiated + s.App.StakeibcKeeper.RemoveEpochTracker(s.Ctx, epochtypes.STRIDE_EPOCH) + + err := s.App.StakeibcKeeper.TransferRewardTokensHostToTrade(s.Ctx, tc.TransferAmount, tc.TradeRoute) + s.Require().ErrorContains(err, "epoch not found") +} + +// -------------------------------------------------------------- +// Transfer Trade to Trade +// -------------------------------------------------------------- + +func (s *KeeperTestSuite) TestTransferConvertedTokensTradeToHost() { + transferAmount := sdkmath.NewInt(1000) + + // Register a trade ICA account for the transfer + owner := types.FormatTradeRouteICAOwner(HostChainId, RewardDenom, HostDenom, types.ICAAccountType_CONVERTER_TRADE) + channelId, portId := s.CreateICAChannel(owner) + + // Create trade route with fields needed for transfer + route := types.TradeRoute{ + RewardDenomOnRewardZone: RewardDenom, + HostDenomOnHostZone: HostDenom, + + HostDenomOnTradeZone: "ibc/host-on-trade", + TradeToHostChannelId: "channel-1", + HostAccount: types.ICAAccount{ + Address: "host_address", + }, + TradeAccount: types.ICAAccount{ + ChainId: HostChainId, + Address: "trade_address", + ConnectionId: ibctesting.FirstConnectionID, + Type: types.ICAAccountType_CONVERTER_TRADE, + }, + } + s.App.StakeibcKeeper.SetTradeRoute(s.Ctx, route) + + // Create epoch tracker to dictate timeout + s.CreateEpochForICATimeout(epochtypes.STRIDE_EPOCH, time.Second*10) + + // Confirm the sequence number was incremented after a successful send + startSequence := s.MustGetNextSequenceNumber(portId, channelId) + + err := s.App.StakeibcKeeper.TransferConvertedTokensTradeToHost(s.Ctx, transferAmount, route) + s.Require().NoError(err, "no error expected when transfering tokens") + + endSequence := s.MustGetNextSequenceNumber(portId, channelId) + s.Require().Equal(startSequence+1, endSequence, "sequence number should have incremented from transfer") + + // Attempt to send without a valid ICA address - it should fail + invalidRoute := route + invalidRoute.HostAccount.Address = "" + err = s.App.StakeibcKeeper.TransferConvertedTokensTradeToHost(s.Ctx, transferAmount, invalidRoute) + s.Require().ErrorContains(err, "no host account found") + + invalidRoute = route + invalidRoute.TradeAccount.Address = "" + err = s.App.StakeibcKeeper.TransferConvertedTokensTradeToHost(s.Ctx, transferAmount, invalidRoute) + s.Require().ErrorContains(err, "no trade account found") +} + +// -------------------------------------------------------------- +// Trade Route ICQ Test Helpers +// -------------------------------------------------------------- + +// Helper function to validate the address and denom from the query request data +func (s *KeeperTestSuite) validateAddressAndDenomInRequest(data []byte, expectedAddress, expectedDenom string) { + actualAddress, actualDenom := s.ExtractAddressAndDenomFromBankPrefix(data) + s.Require().Equal(expectedAddress, actualAddress, "query account address") + s.Require().Equal(expectedDenom, actualDenom, "query denom") +} + +// Helper function to validate the trade route query callback data +func (s *KeeperTestSuite) validateTradeRouteQueryCallback(actualCallbackDataBz []byte) { + expectedCallbackData := types.TradeRouteCallback{ + RewardDenom: RewardDenom, + HostDenom: HostDenom, + } + + var actualCallbackData types.TradeRouteCallback + err := proto.Unmarshal(actualCallbackDataBz, &actualCallbackData) + s.Require().NoError(err) + s.Require().Equal(expectedCallbackData, actualCallbackData, "query callback data") +} + +// -------------------------------------------------------------- +// Withdrawal Account - Reward Balance Query +// -------------------------------------------------------------- + +// Create the traderoute for these tests, only need the withdrawal address and the +// reward_denom_on_host since this will be what is used in the query, no other setup +func (s *KeeperTestSuite) SetupWithdrawalRewardBalanceQueryTestCase() (route types.TradeRoute, expectedTimeout time.Duration) { + // Create a transfer channel so the connection exists for the query submission + s.CreateTransferChannel(HostChainId) + + // Create and set the trade route + tradeRoute := types.TradeRoute{ + RewardDenomOnRewardZone: RewardDenom, + HostDenomOnHostZone: HostDenom, + RewardDenomOnHostZone: "ibc/reward_on_host", + HostAccount: types.ICAAccount{ + ChainId: HostChainId, + ConnectionId: ibctesting.FirstConnectionID, + Address: StrideICAAddress, // must be a valid bech32, easiest to use stride prefix for validation + }, + } + s.App.StakeibcKeeper.SetTradeRoute(s.Ctx, tradeRoute) + + // Create and set the epoch tracker for timeouts (the timeout is halfway through the epoch) + epochDuration := time.Second * 30 + expectedTimeout = epochDuration / 2 + s.CreateEpochForICATimeout(epochtypes.STRIDE_EPOCH, epochDuration) + + return tradeRoute, expectedTimeout +} + +// Tests a successful WithdrawalRewardBalanceQuery +func (s *KeeperTestSuite) TestWithdrawalRewardBalanceQuery_Successful() { + route, timeoutDuration := s.SetupWithdrawalRewardBalanceQueryTestCase() + + err := s.App.StakeibcKeeper.WithdrawalRewardBalanceQuery(s.Ctx, route) + s.Require().NoError(err, "no error expected when querying balance") + + // Validate fields from ICQ submission + expectedRequestData := s.GetBankStoreKeyPrefix(StrideICAAddress, route.RewardDenomOnHostZone) + + query := s.ValidateQuerySubmission( + icqtypes.BANK_STORE_QUERY_WITH_PROOF, + expectedRequestData, + keeper.ICQCallbackID_WithdrawalRewardBalance, + timeoutDuration, + icqtypes.TimeoutPolicy_REJECT_QUERY_RESPONSE, + ) + + s.validateAddressAndDenomInRequest(query.RequestData, route.HostAccount.Address, route.RewardDenomOnHostZone) + s.validateTradeRouteQueryCallback(query.CallbackData) +} + +// Tests a WithdrawalRewardBalanceQuery that fails due to an invalid account address +func (s *KeeperTestSuite) TestWithdrawalRewardBalanceQuery_Failure_InvalidAccountAddress() { + tradeRoute, _ := s.SetupWithdrawalRewardBalanceQueryTestCase() + + // Change the withdrawal ICA account address to be invalid + tradeRoute.HostAccount.Address = "invalid_address" + + err := s.App.StakeibcKeeper.WithdrawalRewardBalanceQuery(s.Ctx, tradeRoute) + s.Require().ErrorContains(err, "invalid withdrawal account address") +} + +// Tests a WithdrawalRewardBalanceQuery that fails due to a missing epoch tracker +func (s *KeeperTestSuite) TestWithdrawalRewardBalanceQuery_Failure_MissingEpoch() { + tradeRoute, _ := s.SetupWithdrawalRewardBalanceQueryTestCase() + + // Remove the stride epoch so the test fails + s.App.StakeibcKeeper.RemoveEpochTracker(s.Ctx, epochtypes.STRIDE_EPOCH) + + err := s.App.StakeibcKeeper.WithdrawalRewardBalanceQuery(s.Ctx, tradeRoute) + s.Require().ErrorContains(err, "stride_epoch: epoch not found") +} + +// Tests a WithdrawalRewardBalanceQuery that fails to submit the query due to bad connection +func (s *KeeperTestSuite) TestWithdrawalRewardBalanceQuery_FailedQuerySubmission() { + tradeRoute, _ := s.SetupWithdrawalRewardBalanceQueryTestCase() + + // Change the withdrawal ICA connection id to be invalid + tradeRoute.HostAccount.ConnectionId = "invalid_connection" + + err := s.App.StakeibcKeeper.WithdrawalRewardBalanceQuery(s.Ctx, tradeRoute) + s.Require().ErrorContains(err, "invalid connection-id (invalid_connection)") +} + +// -------------------------------------------------------------- +// Trade Account - Converted Balance Query +// -------------------------------------------------------------- + +// Create the traderoute for these tests, only need the trade address and the +// host_denom_on_trade since this will be what is used in the query, no other setup +func (s *KeeperTestSuite) SetupTradeConvertedBalanceQueryTestCase() (route types.TradeRoute, expectedTimeout time.Duration) { + // Create a transfer channel so the connection exists for the query submission + s.CreateTransferChannel(HostChainId) + + // Create and set the trade route + tradeRoute := types.TradeRoute{ + RewardDenomOnRewardZone: RewardDenom, + HostDenomOnHostZone: HostDenom, + HostDenomOnTradeZone: "ibc/host_on_trade", + TradeAccount: types.ICAAccount{ + ChainId: HostChainId, + ConnectionId: ibctesting.FirstConnectionID, + Address: StrideICAAddress, // must be a valid bech32, easiest to use stride prefix for validation + }, + } + s.App.StakeibcKeeper.SetTradeRoute(s.Ctx, tradeRoute) + + // Create and set the epoch tracker for timeouts + timeoutDuration := time.Second * 30 + s.CreateEpochForICATimeout(epochtypes.STRIDE_EPOCH, timeoutDuration) + + return tradeRoute, timeoutDuration +} + +// Tests a successful TradeConvertedBalanceQuery +func (s *KeeperTestSuite) TestTradeConvertedBalanceQuery_Successful() { + route, timeoutDuration := s.SetupTradeConvertedBalanceQueryTestCase() + + err := s.App.StakeibcKeeper.TradeConvertedBalanceQuery(s.Ctx, route) + s.Require().NoError(err, "no error expected when querying balance") + + // Validate fields from ICQ submission + expectedRequestData := s.GetBankStoreKeyPrefix(StrideICAAddress, route.HostDenomOnTradeZone) + + query := s.ValidateQuerySubmission( + icqtypes.BANK_STORE_QUERY_WITH_PROOF, + expectedRequestData, + keeper.ICQCallbackID_TradeConvertedBalance, + timeoutDuration, + icqtypes.TimeoutPolicy_REJECT_QUERY_RESPONSE, + ) + + s.validateAddressAndDenomInRequest(query.RequestData, route.TradeAccount.Address, route.HostDenomOnTradeZone) + s.validateTradeRouteQueryCallback(query.CallbackData) +} + +// Tests a TradeConvertedBalanceQuery that fails due to an invalid account address +func (s *KeeperTestSuite) TestTradeConvertedBalanceQuery_Failure_InvalidAccountAddress() { + tradeRoute, _ := s.SetupTradeConvertedBalanceQueryTestCase() + + // Change the trade ICA account address to be invalid + tradeRoute.TradeAccount.Address = "invalid_address" + + err := s.App.StakeibcKeeper.TradeConvertedBalanceQuery(s.Ctx, tradeRoute) + s.Require().ErrorContains(err, "invalid trade account address") +} + +// Tests a TradeConvertedBalanceQuery that fails due to a missing epoch tracker +func (s *KeeperTestSuite) TestTradeConvertedBalanceQuery_Failure_MissingEpoch() { + tradeRoute, _ := s.SetupTradeConvertedBalanceQueryTestCase() + + // Remove the stride epoch so the test fails + s.App.StakeibcKeeper.RemoveEpochTracker(s.Ctx, epochtypes.STRIDE_EPOCH) + + err := s.App.StakeibcKeeper.TradeConvertedBalanceQuery(s.Ctx, tradeRoute) + s.Require().ErrorContains(err, "stride_epoch: epoch not found") +} + +// Tests a TradeConvertedBalanceQuery that fails to submit the query due to bad connection +func (s *KeeperTestSuite) TestTradeConvertedBalanceQuery_FailedQuerySubmission() { + tradeRoute, _ := s.SetupTradeConvertedBalanceQueryTestCase() + + // Change the trade ICA connection id to be invalid + tradeRoute.TradeAccount.ConnectionId = "invalid_connection" + + err := s.App.StakeibcKeeper.TradeConvertedBalanceQuery(s.Ctx, tradeRoute) + s.Require().ErrorContains(err, "invalid connection-id (invalid_connection)") +} diff --git a/x/stakeibc/keeper/trade_route.go b/x/stakeibc/keeper/trade_route.go new file mode 100644 index 00000000000..f775ca1e99d --- /dev/null +++ b/x/stakeibc/keeper/trade_route.go @@ -0,0 +1,65 @@ +package keeper + +import ( + "cosmossdk.io/store/prefix" + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// SetTradeRoute set a specific tradeRoute in the store +func (k Keeper) SetTradeRoute(ctx sdk.Context, tradeRoute types.TradeRoute) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.TradeRouteKeyPrefix)) + key := tradeRoute.GetKey() + b := k.cdc.MustMarshal(&tradeRoute) + store.Set(key, b) +} + +// GetTradeRoute returns a tradeRoute from its start and end denoms +// The start and end denom's are in their native format (e.g. uusdc and udydx) +func (k Keeper) GetTradeRoute(ctx sdk.Context, rewardDenom string, hostDenom string) (val types.TradeRoute, found bool) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.TradeRouteKeyPrefix)) + key := types.TradeRouteKeyFromDenoms(rewardDenom, hostDenom) + b := store.Get(key) + if len(b) == 0 { + return val, false + } + k.cdc.MustUnmarshal(b, &val) + return val, true +} + +// RemoveTradeRoute removes a tradeRoute from the store +// The start and end denom's are in their native format (e.g. uusdc and udydx) +func (k Keeper) RemoveTradeRoute(ctx sdk.Context, rewardDenom string, hostDenom string) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.TradeRouteKeyPrefix)) + key := types.TradeRouteKeyFromDenoms(rewardDenom, hostDenom) + store.Delete(key) +} + +// GetAllTradeRoute returns all tradeRoutes +func (k Keeper) GetAllTradeRoutes(ctx sdk.Context) (list []types.TradeRoute) { + list = []types.TradeRoute{} + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.KeyPrefix(types.TradeRouteKeyPrefix)) + iterator := storetypes.KVStorePrefixIterator(store, []byte{}) + + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + var val types.TradeRoute + k.cdc.MustUnmarshal(iterator.Value(), &val) + list = append(list, val) + } + + return +} + +// Searches for a trade route by the trade account chain ID +func (k Keeper) GetTradeRouteFromTradeAccountChainId(ctx sdk.Context, chainId string) (tradeRoute types.TradeRoute, found bool) { + for _, tradeRoute := range k.GetAllTradeRoutes(ctx) { + if tradeRoute.TradeAccount.ChainId == chainId { + return tradeRoute, true + } + } + return tradeRoute, false +} diff --git a/x/stakeibc/keeper/trade_route_test.go b/x/stakeibc/keeper/trade_route_test.go new file mode 100644 index 00000000000..ed3f015031c --- /dev/null +++ b/x/stakeibc/keeper/trade_route_test.go @@ -0,0 +1,131 @@ +package keeper_test + +import ( + "fmt" + + sdkmath "cosmossdk.io/math" + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func (s *KeeperTestSuite) CreateTradeRoutes() (routes []types.TradeRoute) { + for i := 1; i <= 5; i++ { + hostChain := fmt.Sprintf("chain-H%d", i) + rewardChain := fmt.Sprintf("chain-R%d", i) + tradeChain := fmt.Sprintf("chain-T%d", i) + + hostICA := types.ICAAccount{ + ChainId: hostChain, + Type: types.ICAAccountType_WITHDRAWAL, + ConnectionId: fmt.Sprintf("connection-0%d", i), + Address: "host_ica_address", + } + rewardICA := types.ICAAccount{ + ChainId: rewardChain, + Type: types.ICAAccountType_CONVERTER_UNWIND, + ConnectionId: fmt.Sprintf("connection-1%d", i), + Address: "reward_ica_address", + } + tradeICA := types.ICAAccount{ + ChainId: tradeChain, + Type: types.ICAAccountType_CONVERTER_TRADE, + ConnectionId: fmt.Sprintf("connection-2%d", i), + Address: "trade_ica_address", + } + + hostDenom := fmt.Sprintf("host-denom-%d", i) + rewardDenom := fmt.Sprintf("reward-denom-%d", i) + + route := types.TradeRoute{ + RewardDenomOnHostZone: "ibc-" + rewardDenom + "-on-" + hostChain, + RewardDenomOnRewardZone: rewardDenom, + RewardDenomOnTradeZone: "ibc-" + rewardDenom + "-on-" + tradeChain, + HostDenomOnTradeZone: "ibc-" + hostDenom + "-on-" + tradeChain, + HostDenomOnHostZone: hostDenom, + + HostAccount: hostICA, + RewardAccount: rewardICA, + TradeAccount: tradeICA, + + HostToRewardChannelId: fmt.Sprintf("channel-0%d", i), + RewardToTradeChannelId: fmt.Sprintf("channel-1%d", i), + TradeToHostChannelId: fmt.Sprintf("channel-2%d", i), + + MinTransferAmount: sdkmath.ZeroInt(), + + // TradeConfig is deprecated but we include it so that we can compare with Equals + // which would fail otherwise due to uninitialized types + TradeConfig: types.TradeConfig{ //nolint:staticcheck + SwapPrice: sdkmath.LegacyZeroDec(), + MaxAllowedSwapLossRate: sdkmath.LegacyZeroDec(), + MinSwapAmount: sdkmath.ZeroInt(), + MaxSwapAmount: sdkmath.ZeroInt(), + }, + } + routes = append(routes, route) + + s.App.StakeibcKeeper.SetTradeRoute(s.Ctx, route) + } + + return routes +} + +func (s *KeeperTestSuite) TestGetTradeRoute() { + routes := s.CreateTradeRoutes() + for i, route := range routes { + rewardDenom := route.RewardDenomOnRewardZone + hostDenom := route.HostDenomOnHostZone + + actualRoute, found := s.App.StakeibcKeeper.GetTradeRoute(s.Ctx, rewardDenom, hostDenom) + s.Require().True(found, "route should have been found") + s.Require().Equal(routes[i], actualRoute, "route doesn't match") + } +} + +func (s *KeeperTestSuite) TestRemoveTradeRoute() { + routes := s.CreateTradeRoutes() + for _, route := range routes { + s.App.StakeibcKeeper.RemoveTradeRoute(s.Ctx, route.RewardDenomOnRewardZone, route.HostDenomOnHostZone) + _, found := s.App.StakeibcKeeper.GetTradeRoute(s.Ctx, route.RewardDenomOnRewardZone, route.HostDenomOnHostZone) + s.Require().False(found, "route should not have been found") + } +} + +func (s *KeeperTestSuite) TestGetAllTradeRoutes() { + expectedRoutes := s.CreateTradeRoutes() + actualRoutes := s.App.StakeibcKeeper.GetAllTradeRoutes(s.Ctx) + s.Require().ElementsMatch(expectedRoutes, actualRoutes) +} + +func (s *KeeperTestSuite) TestGetTradeRouteFromTradeAccountChainId() { + // Store 3 trade routes + for i := 1; i <= 3; i++ { + rewardDenom := fmt.Sprintf("reward-%d", i) + hostDenom := fmt.Sprintf("host-%d", i) + chainId := fmt.Sprintf("chain-%d", i) + + s.App.StakeibcKeeper.SetTradeRoute(s.Ctx, types.TradeRoute{ + RewardDenomOnRewardZone: rewardDenom, + HostDenomOnHostZone: hostDenom, + TradeAccount: types.ICAAccount{ + ChainId: chainId, + }, + }) + } + + // Search for each of them by chain ID + for i := 1; i <= 3; i++ { + rewardDenom := fmt.Sprintf("reward-%d", i) + hostDenom := fmt.Sprintf("host-%d", i) + chainId := fmt.Sprintf("chain-%d", i) + + actualRoute, found := s.App.StakeibcKeeper.GetTradeRouteFromTradeAccountChainId(s.Ctx, chainId) + s.Require().True(found, "trade route 1 should have been found") + s.Require().Equal(actualRoute.RewardDenomOnRewardZone, rewardDenom, "reward denom") + s.Require().Equal(actualRoute.HostDenomOnHostZone, hostDenom, "host denom") + } + + // Search for a chainId without a trade route + _, found := s.App.StakeibcKeeper.GetTradeRouteFromTradeAccountChainId(s.Ctx, "chain-4") + s.Require().False(found, "trade route should not have been found") +} diff --git a/x/stakeibc/keeper/transfer.go b/x/stakeibc/keeper/transfer.go new file mode 100644 index 00000000000..3159ea11e68 --- /dev/null +++ b/x/stakeibc/keeper/transfer.go @@ -0,0 +1,224 @@ +package keeper + +import ( + "fmt" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + + sdkmath "cosmossdk.io/math" + "github.com/cosmos/gogoproto/proto" + ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + ibctypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + "github.com/osmosis-labs/osmosis/v27/utils" + epochstypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// Iterate each deposit record marked TRANSFER_QUEUE and IBC transfer tokens from the Stride controller account to the delegation ICAs on each host zone +func (k Keeper) TransferExistingDepositsToHostZones(ctx sdk.Context, epochNumber uint64, depositRecords []recordstypes.DepositRecord) { + k.Logger(ctx).Info("Transfering deposit records...") + + transferDepositRecords := utils.FilterDepositRecords(depositRecords, func(record recordstypes.DepositRecord) (condition bool) { + isTransferRecord := record.Status == recordstypes.DepositRecord_TRANSFER_QUEUE + isBeforeCurrentEpoch := record.DepositEpochNumber < epochNumber + return isTransferRecord && isBeforeCurrentEpoch + }) + + ibcTransferTimeoutNanos := k.GetParam(ctx, types.KeyIBCTransferTimeoutNanos) + + for _, depositRecord := range transferDepositRecords { + k.Logger(ctx).Info(utils.LogWithHostZone(depositRecord.HostZoneId, + "Processing deposit record %d: %v%s", depositRecord.Id, depositRecord.Amount, depositRecord.Denom)) + + // if a TRANSFER_QUEUE record has 0 balance and was created in the previous epoch, it's safe to remove since it will never be updated or used + if depositRecord.Amount.LTE(sdkmath.ZeroInt()) && depositRecord.DepositEpochNumber < epochNumber { + k.Logger(ctx).Info(utils.LogWithHostZone(depositRecord.HostZoneId, "Empty deposit record - Removing.")) + k.RecordsKeeper.RemoveDepositRecord(ctx, depositRecord.Id) + continue + } + + hostZone, hostZoneFound := k.GetHostZone(ctx, depositRecord.HostZoneId) + if !hostZoneFound { + k.Logger(ctx).Error(fmt.Sprintf("[TransferExistingDepositsToHostZones] Host zone not found for deposit record id %d", depositRecord.Id)) + continue + } + + if hostZone.Halted { + k.Logger(ctx).Error(fmt.Sprintf("[TransferExistingDepositsToHostZones] Host zone halted for deposit record id %d", depositRecord.Id)) + continue + } + + if hostZone.DelegationIcaAddress == "" { + k.Logger(ctx).Error(fmt.Sprintf("[TransferExistingDepositsToHostZones] Zone %s is missing a delegation address!", hostZone.ChainId)) + continue + } + + k.Logger(ctx).Info(utils.LogWithHostZone(depositRecord.HostZoneId, "Transferring %v%s", depositRecord.Amount, hostZone.HostDenom)) + transferCoin := sdk.NewCoin(hostZone.IbcDenom, depositRecord.Amount) + + // timeout 30 min in the future + // NOTE: this assumes no clock drift between chains, which tendermint guarantees + // if we onboard non-tendermint chains, we need to use the time on the host chain to + // calculate the timeout + // https://github.com/cometbft/cometbft/blob/v0.34.x/spec/consensus/bft-time.md + timeoutTimestamp := utils.IntToUint(ctx.BlockTime().UnixNano()) + ibcTransferTimeoutNanos + msg := ibctypes.NewMsgTransfer( + ibctransfertypes.PortID, + hostZone.TransferChannelId, + transferCoin, + hostZone.DepositAddress, + hostZone.DelegationIcaAddress, + clienttypes.Height{}, + timeoutTimestamp, + "", + ) + k.Logger(ctx).Info(utils.LogWithHostZone(depositRecord.HostZoneId, "Transfer Msg: %+v", msg)) + + // transfer the deposit record and update its status to TRANSFER_IN_PROGRESS + err := k.RecordsKeeper.IBCTransferNativeTokens(ctx, msg, depositRecord) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("[TransferExistingDepositsToHostZones] Failed to initiate IBC transfer to host zone, HostZone: %v, Channel: %v, Amount: %v, ModuleAddress: %v, DelegateAddress: %v, Timeout: %v", + hostZone.ChainId, hostZone.TransferChannelId, transferCoin, hostZone.DepositAddress, hostZone.DelegationIcaAddress, timeoutTimestamp)) + k.Logger(ctx).Error(fmt.Sprintf("[TransferExistingDepositsToHostZones] err {%s}", err.Error())) + continue + } + + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, "Successfully submitted transfer")) + } +} + +// Transfers tokens from the community pool deposit ICA account to the host zone stake holding module address for that pool +func (k Keeper) TransferCommunityPoolDepositToHolding(ctx sdk.Context, hostZone types.HostZone, token sdk.Coin) error { + // Verify that the deposit ica address exists on the host zone and stake holding address exists on stride + if hostZone.CommunityPoolDepositIcaAddress == "" || hostZone.CommunityPoolStakeHoldingAddress == "" { + return types.ErrICAAccountNotFound.Wrap( + "Invalid deposit address or stake holding address, cannot build valid ICA transfer kickoff command") + } + + // get the hostZone counterparty transfer channel for sending tokens from hostZone to Stride + transferChannel, found := k.IBCKeeper.ChannelKeeper.GetChannel(ctx, transfertypes.PortID, hostZone.TransferChannelId) + if !found { + return errorsmod.Wrapf(channeltypes.ErrChannelNotFound, "transfer channel %s not found", hostZone.TransferChannelId) + } + counterpartyChannelId := transferChannel.Counterparty.ChannelId + + // Timeout both the ICA kick off command and the ibc transfer message at the epoch boundary + strideEpochTracker, found := k.GetEpochTracker(ctx, epochstypes.STRIDE_EPOCH) + if !found { + return errorsmod.Wrap(types.ErrEpochNotFound, epochstypes.STRIDE_EPOCH) + } + endEpochTimestamp := uint64(strideEpochTracker.NextEpochStartTime) + + // Determine the host zone's stToken ibc denom + nativeDenom := hostZone.HostDenom + stIbcDenom, err := k.GetStIbcDenomOnHostZone(ctx, hostZone) + if err != nil { + return err + } + + // If the token is the host zone's native token, we send it to the stake holding address to be liquid staked + // Otherwise, if it's an stToken, we send it to the redeem holding address to be redeemed + var destinationHoldingAddress string + switch token.Denom { + case nativeDenom: + destinationHoldingAddress = hostZone.CommunityPoolStakeHoldingAddress + case stIbcDenom: + destinationHoldingAddress = hostZone.CommunityPoolRedeemHoldingAddress + default: + return fmt.Errorf("Invalid community pool transfer denom: %s", token.Denom) + } + + memo := "" + var msgs []proto.Message + msgs = append(msgs, transfertypes.NewMsgTransfer( + transfertypes.PortID, + counterpartyChannelId, // for transfers of communityPoolHostZone -> Stride + token, + hostZone.CommunityPoolDepositIcaAddress, // ICA controlled address on community pool zone + destinationHoldingAddress, // Stride address, unique to each community pool / hostzone + clienttypes.Height{}, + endEpochTimestamp, + memo, + )) + + // No need to build ICA callback data or input an ICA callback method since the callback Stride can see is only + // the ICA callback, not the actual transfer callback. The transfer ack returns to the hostZone chain not Stride + icaCallbackId := "" + var icaCallbackData []byte + + // Send the transaction through SubmitTx to kick off ICA commands -- no ICA callback method name, or callback args needed + _, err = k.SubmitTxs(ctx, + hostZone.ConnectionId, + msgs, + types.ICAAccountType_COMMUNITY_POOL_DEPOSIT, + endEpochTimestamp, + icaCallbackId, + icaCallbackData) + if err != nil { + return errorsmod.Wrapf(err, "Failed to SubmitTxs, Messages: %v, err: %s", msgs, err.Error()) + } + k.Logger(ctx).Info("Successfully sent ICA command to kick off ibc transfer from deposit ICA to stake holding address") + + return nil +} + +// Transfers a recently minted stToken from the stride-side stake holding address to the return ICA address on the host zone +func (k Keeper) TransferHoldingToCommunityPoolReturn(ctx sdk.Context, hostZone types.HostZone, coin sdk.Coin) error { + memo := "" + strideEpochTracker, found := k.GetEpochTracker(ctx, epochstypes.STRIDE_EPOCH) + if !found { + return errorsmod.Wrap(types.ErrEpochNotFound, epochstypes.STRIDE_EPOCH) + } + endEpochTimestamp := uint64(strideEpochTracker.NextEpochStartTime) + + // build and send an IBC message for the coin to transfer it back to the hostZone + msg := transfertypes.NewMsgTransfer( + transfertypes.PortID, + hostZone.TransferChannelId, + coin, + hostZone.CommunityPoolStakeHoldingAddress, // from Stride address, unique to each community pool / hostzone + hostZone.CommunityPoolReturnIcaAddress, // to ICA controlled address on foreign hub + clienttypes.Height{}, + endEpochTimestamp, + memo, + ) + + msgTransferResponse, err := k.RecordsKeeper.TransferKeeper.Transfer(ctx, msg) + if err != nil { + return errorsmod.Wrapf(err, "Error submitting ibc transfer for %+v", coin) + } + + result := fmt.Sprintf("Successfully submitted ibctransfer for %+v with response %+v", + coin, msgTransferResponse) + k.Logger(ctx).Info(result) + + return nil +} + +// given a hostZone with native denom, returns the ibc denom on the zone for the staked stDenom +func (k Keeper) GetStIbcDenomOnHostZone(ctx sdk.Context, hostZone types.HostZone) (ibcStakedDenom string, err error) { + nativeDenom := hostZone.HostDenom + stDenomOnStride := types.StAssetDenomFromHostZoneDenom(nativeDenom) + + // use counterparty transfer channel because tokens come through this channel to hostZone + transferChannel, found := k.IBCKeeper.ChannelKeeper.GetChannel(ctx, transfertypes.PortID, hostZone.TransferChannelId) + if !found { + return "", channeltypes.ErrChannelNotFound.Wrap(hostZone.TransferChannelId) + } + + counterpartyChannelId := transferChannel.Counterparty.ChannelId + if counterpartyChannelId == "" { + return "", channeltypes.ErrChannelNotFound.Wrapf("counterparty channel not found for %s", hostZone.TransferChannelId) + } + + sourcePrefix := transfertypes.GetDenomPrefix(transfertypes.PortID, counterpartyChannelId) + prefixedDenom := sourcePrefix + stDenomOnStride + + return transfertypes.ParseDenomTrace(prefixedDenom).IBCDenom(), nil +} diff --git a/x/stakeibc/keeper/transfer_test.go b/x/stakeibc/keeper/transfer_test.go new file mode 100644 index 00000000000..e65642fe596 --- /dev/null +++ b/x/stakeibc/keeper/transfer_test.go @@ -0,0 +1,249 @@ +package keeper_test + +import ( + _ "github.com/stretchr/testify/suite" + + sdk "github.com/cosmos/cosmos-sdk/types" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + + sdkmath "cosmossdk.io/math" + + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +const chainId = "GAIA" + +type TransferCommunityPoolDepositToHoldingTestCase struct { + hostZone types.HostZone + coin sdk.Coin + channelId string + portId string +} + +func (s *KeeperTestSuite) SetupTransferCommunityPoolDepositToHolding() TransferCommunityPoolDepositToHoldingTestCase { + owner := types.FormatHostZoneICAOwner(chainId, types.ICAAccountType_COMMUNITY_POOL_DEPOSIT) + channelId, portId := s.CreateICAChannel(owner) + + holdingAddress := s.TestAccs[0].String() + depositIcaAccount := s.TestAccs[1] + depositIcaAddress := depositIcaAccount.String() + hostZone := types.HostZone{ + ChainId: chainId, + ConnectionId: ibctesting.FirstConnectionID, + TransferChannelId: ibctesting.FirstChannelID, + HostDenom: Atom, + CommunityPoolStakeHoldingAddress: holdingAddress, + CommunityPoolDepositIcaAddress: depositIcaAddress, + } + + strideEpoch := types.EpochTracker{ + EpochIdentifier: epochtypes.STRIDE_EPOCH, + NextEpochStartTime: uint64(s.Coordinator.CurrentTime.UnixNano() + 30_000_000_000), // used for transfer timeout + } + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, strideEpoch) + + balanceToTransfer := sdkmath.NewInt(1_000_000) + coin := sdk.NewCoin(Atom, balanceToTransfer) + s.FundAccount(depositIcaAccount, coin) + + return TransferCommunityPoolDepositToHoldingTestCase{ + hostZone: hostZone, + coin: coin, + channelId: channelId, + portId: portId, + } +} + +func (s *KeeperTestSuite) TestTransferCommunityPoolDepositToHolding_Successful() { + tc := s.SetupTransferCommunityPoolDepositToHolding() + + startSequence, found := s.App.IBCKeeper.ChannelKeeper.GetNextSequenceSend(s.Ctx, tc.portId, tc.channelId) + s.Require().True(found) + + // Verify that the ICA msg was successfully sent off + err := s.App.StakeibcKeeper.TransferCommunityPoolDepositToHolding(s.Ctx, tc.hostZone, tc.coin) + s.Require().NoError(err) + + // Verify the ICA sequence number incremented + endSequence, found := s.App.IBCKeeper.ChannelKeeper.GetNextSequenceSend(s.Ctx, tc.portId, tc.channelId) + s.Require().True(found) + s.Require().Equal(endSequence, startSequence+1, "sequence number should have incremented") +} + +func (s *KeeperTestSuite) TestTransferCommunityPoolDepositToHolding_MissingStakeAddressFail() { + tc := s.SetupTransferCommunityPoolDepositToHolding() + tc.hostZone.CommunityPoolStakeHoldingAddress = "" + + // Verify that the ICA msg was successfully sent off + err := s.App.StakeibcKeeper.TransferCommunityPoolDepositToHolding(s.Ctx, tc.hostZone, tc.coin) + s.Require().ErrorContains(err, "holding address") +} + +func (s *KeeperTestSuite) TestTransferCommunityPoolDepositToHolding_MissingDepositFail() { + tc := s.SetupTransferCommunityPoolDepositToHolding() + tc.hostZone.CommunityPoolDepositIcaAddress = "" + + // Verify that the ICA msg was successfully sent off + err := s.App.StakeibcKeeper.TransferCommunityPoolDepositToHolding(s.Ctx, tc.hostZone, tc.coin) + s.Require().ErrorContains(err, "deposit address") +} + +func (s *KeeperTestSuite) TestTransferCommunityPoolDepositToHolding_ConnectionSendFail() { + tc := s.SetupTransferCommunityPoolDepositToHolding() + tc.hostZone.ConnectionId = "MissingConnection" + + // Verify that the ICA msg was successfully sent off + err := s.App.StakeibcKeeper.TransferCommunityPoolDepositToHolding(s.Ctx, tc.hostZone, tc.coin) + s.Require().ErrorContains(err, "connection MissingConnection not found") +} + +type TransferHoldingToCommunityPoolReturnTestCase struct { + hostZone types.HostZone + coin sdk.Coin +} + +func (s *KeeperTestSuite) SetupTransferHoldingToCommunityPoolReturn() TransferHoldingToCommunityPoolReturnTestCase { + s.CreateTransferChannel(chainId) + + holdingAccount := s.TestAccs[0] + holdingAddress := holdingAccount.String() + returnIcaAddress := s.TestAccs[1].String() + hostZone := types.HostZone{ + ChainId: chainId, + TransferChannelId: ibctesting.FirstChannelID, + HostDenom: Atom, + CommunityPoolStakeHoldingAddress: holdingAddress, + CommunityPoolReturnIcaAddress: returnIcaAddress, + } + + strideEpoch := types.EpochTracker{ + EpochIdentifier: epochtypes.STRIDE_EPOCH, + NextEpochStartTime: uint64(s.Coordinator.CurrentTime.UnixNano() + 30_000_000_000), // used for transfer timeout + } + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, strideEpoch) + + balanceToTransfer := sdkmath.NewInt(1_000_000) + coin := sdk.NewCoin(Atom, balanceToTransfer) + s.FundAccount(holdingAccount, coin) + + return TransferHoldingToCommunityPoolReturnTestCase{ + hostZone: hostZone, + coin: coin, + } +} + +func (s *KeeperTestSuite) TestTransferHoldingToCommunityPoolReturn_Successful() { + tc := s.SetupTransferHoldingToCommunityPoolReturn() + + startSequence, found := s.App.IBCKeeper.ChannelKeeper.GetNextSequenceSend(s.Ctx, + transfertypes.PortID, tc.hostZone.TransferChannelId) + s.Require().True(found) + + // Verify that the transfer was successfully sent off + err := s.App.StakeibcKeeper.TransferHoldingToCommunityPoolReturn(s.Ctx, tc.hostZone, tc.coin) + s.Require().NoError(err) + + // Verify the transfer sequence number incremented + endSequence, found := s.App.IBCKeeper.ChannelKeeper.GetNextSequenceSend(s.Ctx, + transfertypes.PortID, tc.hostZone.TransferChannelId) + s.Require().True(found) + s.Require().Equal(endSequence, startSequence+1, "sequence number should have incremented") +} + +func (s *KeeperTestSuite) TestTransferHoldingToCommunityPoolReturn_ChannelTransferFail() { + tc := s.SetupTransferHoldingToCommunityPoolReturn() + tc.hostZone.TransferChannelId = "WrongChannel" + + // Verify that the transfer was successfully sent off + err := s.App.StakeibcKeeper.TransferHoldingToCommunityPoolReturn(s.Ctx, tc.hostZone, tc.coin) + s.Require().ErrorContains(err, "Error submitting ibc transfer") +} + +func (s *KeeperTestSuite) TestTransferHoldingToCommunityPoolReturn_MissingTokens() { + tc := s.SetupTransferHoldingToCommunityPoolReturn() + tc.coin.Denom = "MissingDenom" + + // Verify that the transfer was successfully sent off + err := s.App.StakeibcKeeper.TransferHoldingToCommunityPoolReturn(s.Ctx, tc.hostZone, tc.coin) + s.Require().ErrorContains(err, "Error submitting ibc transfer") + s.Require().ErrorContains(err, "insufficient funds") +} + +func (s *KeeperTestSuite) TestGetStIbcDenomOnHostZone() { + testCases := []struct { + hostDenom string + channelOnStride string + channelOnHost string + expectedIBCDenom string + }{ + { + hostDenom: "uatom", + channelOnStride: "channel-0", + channelOnHost: "channel-391", + expectedIBCDenom: "ibc/B05539B66B72E2739B986B86391E5D08F12B8D5D2C2A7F8F8CF9ADF674DFA231", + }, + { + hostDenom: "uosmo", + channelOnStride: "channel-5", + channelOnHost: "channel-326", + expectedIBCDenom: "ibc/D176154B0C63D1F9C6DCFB4F70349EBF2E2B5A87A05902F57A6AE92B863E9AEC", + }, + { + hostDenom: "ujuno", + channelOnStride: "channel-24", + channelOnHost: "channel-139", + expectedIBCDenom: "ibc/F4F5F27F40F927F8A4FF9F5601F80AD5D77B366570E7C59856B8CE4135AC1F59", + }, + { + hostDenom: "ustars", + channelOnStride: "channel-19", + channelOnHost: "channel-106", + expectedIBCDenom: "ibc/7A58490427EF0092E2BFFB4BEEBA38E29B09E9B98557DFC78335B43F15CF2676", + }, + { + hostDenom: "inj", + channelOnStride: "channel-6", + channelOnHost: "channel-89", + expectedIBCDenom: "ibc/AC87717EA002B0123B10A05063E69BCA274BA2C44D842AEEB41558D2856DCE93", + }, + } + + // Create each channel on stride with the associated host channel as a counterparty + for _, tc := range testCases { + channel := channeltypes.Channel{ + Counterparty: channeltypes.Counterparty{ + ChannelId: tc.channelOnHost, + }, + } + s.App.IBCKeeper.ChannelKeeper.SetChannel(s.Ctx, transfertypes.PortID, tc.channelOnStride, channel) + } + + // For each case, check the generated IBC denom + for _, tc := range testCases { + hostZone := types.HostZone{ + TransferChannelId: tc.channelOnStride, + HostDenom: tc.hostDenom, + } + actualIBCDenom, err := s.App.StakeibcKeeper.GetStIbcDenomOnHostZone(s.Ctx, hostZone) + s.Require().NoError(err, "no error expected when generating IBC denom") + s.Require().Equal(tc.expectedIBCDenom, actualIBCDenom, "stToken ibc denom") + } + + // Test a non-existent channel ID + invalidHostZone := types.HostZone{TransferChannelId: "channel-1000"} + _, err := s.App.StakeibcKeeper.GetStIbcDenomOnHostZone(s.Ctx, invalidHostZone) + s.Require().ErrorContains(err, "channel not found") + + // Test a channel that has a non-transfer port + s.App.IBCKeeper.ChannelKeeper.SetChannel(s.Ctx, "different port", "channel-1000", channeltypes.Channel{}) + _, err = s.App.StakeibcKeeper.GetStIbcDenomOnHostZone(s.Ctx, invalidHostZone) + s.Require().ErrorContains(err, "channel not found") + + // Test a with an empty counterparty channel + s.App.IBCKeeper.ChannelKeeper.SetChannel(s.Ctx, transfertypes.PortID, "channel-1000", channeltypes.Channel{}) + _, err = s.App.StakeibcKeeper.GetStIbcDenomOnHostZone(s.Ctx, invalidHostZone) + s.Require().ErrorContains(err, "counterparty channel not found") +} diff --git a/x/stakeibc/keeper/unbonding.go b/x/stakeibc/keeper/unbonding.go new file mode 100644 index 00000000000..8e54f90591a --- /dev/null +++ b/x/stakeibc/keeper/unbonding.go @@ -0,0 +1,495 @@ +package keeper + +import ( + "errors" + "fmt" + "sort" + + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/cosmos/gogoproto/proto" + + "github.com/osmosis-labs/osmosis/v27/utils" + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +type ValidatorUnbondCapacity struct { + ValidatorAddress string + CurrentDelegation sdkmath.Int + BalancedDelegation sdkmath.Int + Capacity sdkmath.Int +} + +// The ratio of ideal balanced delegation to the current delegation +// This represents how proportionally unbalanced each validator is +// The smaller number means their current delegation is much larger +// then their fair portion of the current total stake +func (c *ValidatorUnbondCapacity) GetBalanceRatio() (sdkmath.LegacyDec, error) { + // ValidatorUnbondCapaciy structs only exist for validators with positive capacity + // capacity is CurrentDelegation - BalancedDelegation + // positive capacity means CurrentDelegation must be >0 + + // Therefore the current delegation here should never be zero + if c.CurrentDelegation.IsZero() { + errMsg := fmt.Sprintf("CurrentDelegation should not be 0 inside GetBalanceRatio(), %+v", c) + return sdkmath.LegacyZeroDec(), errors.New(errMsg) + } + return sdkmath.LegacyNewDecFromInt(c.BalancedDelegation).Quo(sdkmath.LegacyNewDecFromInt(c.CurrentDelegation)), nil +} + +// Returns all the host zone unbonding records that should unbond this epoch +// Records are returned as a mapping of epoch unbonding record ID to host zone unbonding record +// Records ready to be unbonded are identified by status UNBONDING_QUEUE or UNBONDING_RETRY_QUEUE +// and a non-zero native amount +func (k Keeper) GetQueuedHostZoneUnbondingRecords( + ctx sdk.Context, + chainId string, +) (epochNumbers []uint64, epochToHostZoneUnbondingMap map[uint64]recordstypes.HostZoneUnbonding) { + epochToHostZoneUnbondingMap = map[uint64]recordstypes.HostZoneUnbonding{} + for _, epochUnbonding := range k.RecordsKeeper.GetAllEpochUnbondingRecord(ctx) { + hostZoneRecord, found := k.RecordsKeeper.GetHostZoneUnbondingByChainId(ctx, epochUnbonding.EpochNumber, chainId) + if !found { + continue + } + k.Logger(ctx).Info(utils.LogWithHostZone(chainId, "Epoch %d - Status: %s, Amount: %v", + epochUnbonding.EpochNumber, hostZoneRecord.Status, hostZoneRecord.NativeTokenAmount)) + + if hostZoneRecord.ShouldInitiateUnbonding() || hostZoneRecord.ShouldRetryUnbonding() { + epochNumbers = append(epochNumbers, epochUnbonding.EpochNumber) + epochToHostZoneUnbondingMap[epochUnbonding.EpochNumber] = *hostZoneRecord + } + } + return epochNumbers, epochToHostZoneUnbondingMap +} + +// Loops through each epoch unbonding record and returns the total number of native tokens +// that should be unbonded +func (k Keeper) GetTotalUnbondAmount(hostZoneUnbondingRecords map[uint64]recordstypes.HostZoneUnbonding) sdkmath.Int { + totalNativeAmount := sdkmath.ZeroInt() + for _, hostZoneRecord := range hostZoneUnbondingRecords { + totalNativeAmount = totalNativeAmount.Add(hostZoneRecord.NativeTokensToUnbond) + } + return totalNativeAmount +} + +// Given a list of user redemption record IDs and a redemption rate, sets the native token +// amount on each record, calculated from the stAmount and redemption rate, and returns the +// sum of all native token amounts across all user redemption records +func (k Keeper) RefreshUserRedemptionRecordNativeAmounts( + ctx sdk.Context, + chainId string, + userRedemptionRecordIds []string, + redemptionRate sdkmath.LegacyDec, +) (totalNativeAmount sdkmath.Int) { + // Loop and set the native amount for each record, keeping track of the total + totalNativeAmount = sdkmath.ZeroInt() + for _, userRedemptionRecordId := range userRedemptionRecordIds { + userRedemptionRecord, found := k.RecordsKeeper.GetUserRedemptionRecord(ctx, userRedemptionRecordId) + if !found { + k.Logger(ctx).Error(utils.LogWithHostZone(chainId, "No user redemption record found for id %s", userRedemptionRecordId)) + continue + } + + // Calculate the number of native tokens using the redemption rate + nativeAmount := sdkmath.LegacyNewDecFromInt(userRedemptionRecord.StTokenAmount).Mul(redemptionRate).TruncateInt() + totalNativeAmount = totalNativeAmount.Add(nativeAmount) + + // Set the native amount on the record + userRedemptionRecord.NativeTokenAmount = nativeAmount + k.RecordsKeeper.SetUserRedemptionRecord(ctx, userRedemptionRecord) + } + return totalNativeAmount +} + +// Sets the native token amount unbonded on the host zone unbonding record and the associated user redemption records +func (k Keeper) RefreshHostZoneUnbondingNativeTokenAmount( + ctx sdk.Context, + epochNumber uint64, + hostZoneUnbondingRecord recordstypes.HostZoneUnbonding, +) error { + // Grab the redemption rate from the host zone (to use in the native token calculation) + chainId := hostZoneUnbondingRecord.HostZoneId + hostZone, found := k.GetHostZone(ctx, chainId) + if !found { + return errorsmod.Wrapf(types.ErrHostZoneNotFound, "host zone %s not found", chainId) + } + + // Set all native token amount on each user redemption record + redemptionRecordIds := hostZoneUnbondingRecord.UserRedemptionRecords + totalNativeAmount := k.RefreshUserRedemptionRecordNativeAmounts(ctx, chainId, redemptionRecordIds, hostZone.RedemptionRate) + + // Then set the total on the host zone unbonding record + hostZoneUnbondingRecord.NativeTokenAmount = totalNativeAmount + hostZoneUnbondingRecord.NativeTokensToUnbond = totalNativeAmount + hostZoneUnbondingRecord.StTokensToBurn = hostZoneUnbondingRecord.StTokenAmount + return k.RecordsKeeper.SetHostZoneUnbondingRecord(ctx, epochNumber, chainId, hostZoneUnbondingRecord) +} + +// Given a mapping of epoch unbonding record IDs to host zone unbonding records, +// sets the native token amount across all epoch unbonding records, host zone unbonding records, +// and user redemption records, using the most updated redemption rate +// Returns an updated mapping with the refreshed amounts +func (k Keeper) RefreshUnbondingNativeTokenAmounts( + ctx sdk.Context, + chainId string, + hostZoneUnbondings map[uint64]recordstypes.HostZoneUnbonding, +) (refreshedHostZoneUnbondings map[uint64]recordstypes.HostZoneUnbonding, err error) { + // Refresh the amount for all records in status UNBONDING_QUEUE + // We don't want to refresh the failed unbonding records + for _, epochNumber := range utils.Uint64MapKeys(hostZoneUnbondings) { + hostZoneUnbondingRecord := hostZoneUnbondings[epochNumber] + if hostZoneUnbondingRecord.Status != recordstypes.HostZoneUnbonding_UNBONDING_QUEUE { + continue + } + if err := k.RefreshHostZoneUnbondingNativeTokenAmount(ctx, epochNumber, hostZoneUnbondingRecord); err != nil { + return nil, err + } + } + + // Once the values have been refreshed, return an updated map + _, refreshedHostZoneUnbondings = k.GetQueuedHostZoneUnbondingRecords(ctx, chainId) + + return refreshedHostZoneUnbondings, nil +} + +// Determine the unbonding capacity that each validator has +// The capacity is determined by the difference between their current delegation +// and their fair portion of the total stake based on their weights +// (i.e. their balanced delegation) +// +// Validators with a balanced delegation less than their current delegation +// are already at a deficit, are not included in the returned list, +// and thus, will not incur any unbonding +func (k Keeper) GetValidatorUnbondCapacity( + ctx sdk.Context, + validators []*types.Validator, + balancedDelegation map[string]sdkmath.Int, +) (validatorCapacities []ValidatorUnbondCapacity) { + for _, validator := range validators { + // The capacity equals the difference between their current delegation and + // the balanced delegation + // If the capacity is negative, that means the validator has less than their + // balanced portion. Ignore this case so they don't unbond anything + balancedDelegation, ok := balancedDelegation[validator.Address] + if !ok { + continue + } + + capacity := validator.Delegation.Sub(balancedDelegation) + if capacity.IsPositive() { + validatorCapacities = append(validatorCapacities, ValidatorUnbondCapacity{ + ValidatorAddress: validator.Address, + Capacity: capacity, + CurrentDelegation: validator.Delegation, + BalancedDelegation: balancedDelegation, + }) + } + } + + return validatorCapacities +} + +// Sort validators by the ratio of the ideal balanced delegation to their current delegation +// This will sort the validator's by how proportionally unbalanced they are +// +// Ex: +// +// Val1: Ideal Balanced Delegation 80, Current Delegation 100 (surplus of 20), Ratio: 0.8 +// Val2: Ideal Balanced Delegation 480, Current Delegation 500 (surplus of 20), Ratio: 0.96 +// +// While both validators have the same net unbalanced delegation, Val2 is proportionally +// more balanced since the surplus is a smaller percentage of it's overall delegation +// +// This will also sort such that 0-weight validator's will come first as their +// ideal balanced delegation will always be 0, and thus their ratio will always be 0 +// If the ratio's are equal, the validator with the larger delegation/capacity will come first +func SortUnbondingCapacityByPriority(validatorUnbondCapacity []ValidatorUnbondCapacity) ([]ValidatorUnbondCapacity, error) { + // Loop through all validators to make sure none error when getting the balance ratio needed for sorting + for _, validator := range validatorUnbondCapacity { + if _, err := validator.GetBalanceRatio(); err != nil { + return nil, err + } + } + + // Pairwise-compare function for Slice Stable Sort + lessFunc := func(i, j int) bool { + validatorA := validatorUnbondCapacity[i] + validatorB := validatorUnbondCapacity[j] + + balanceRatioValA, _ := validatorA.GetBalanceRatio() + balanceRatioValB, _ := validatorB.GetBalanceRatio() + + // Sort by the balance ratio first - in ascending order - so the more unbalanced validators appear first + if !balanceRatioValA.Equal(balanceRatioValB) { + return balanceRatioValA.LT(balanceRatioValB) + } + + // If the ratio's are equal, use the capacity as a tie breaker + // where the larget capacity comes first + if !validatorA.Capacity.Equal(validatorB.Capacity) { + return validatorA.Capacity.GT(validatorB.Capacity) + } + + // Finally, if the ratio and capacity are both equal, use address as a tie breaker + return validatorA.ValidatorAddress < validatorB.ValidatorAddress + } + sort.SliceStable(validatorUnbondCapacity, lessFunc) + + return validatorUnbondCapacity, nil +} + +// Given a total unbond amount and list of unbond capacity for each validator, sorted by unbond priority +// Iterates through the list and unbonds as much as possible from each validator until all the +// unbonding has been accounted for +// +// Returns the list of messages and the callback data for the ICA +func (k Keeper) GetUnbondingICAMessages( + hostZone types.HostZone, + totalUnbondAmount sdkmath.Int, + prioritizedUnbondCapacity []ValidatorUnbondCapacity, +) (msgs []proto.Message, unbondings []*types.SplitUndelegation, err error) { + // Loop through each validator and unbond as much as possible + remainingUnbondAmount := totalUnbondAmount + for _, validatorCapacity := range prioritizedUnbondCapacity { + // Break once all unbonding has been accounted for + if remainingUnbondAmount.IsZero() { + break + } + + // Unbond either up to the capacity or up to the total remaining unbond amount + // (whichever comes first) + var unbondAmount sdkmath.Int + if validatorCapacity.Capacity.LT(remainingUnbondAmount) { + unbondAmount = validatorCapacity.Capacity + } else { + unbondAmount = remainingUnbondAmount + } + remainingUnbondAmount = remainingUnbondAmount.Sub(unbondAmount) + + // Build the validator splits for the callback + unbondings = append(unbondings, &types.SplitUndelegation{ + Validator: validatorCapacity.ValidatorAddress, + NativeTokenAmount: unbondAmount, + }) + } + + // Build the undelegate ICA messages from the splits + for _, unbonding := range unbondings { + msgs = append(msgs, &stakingtypes.MsgUndelegate{ + DelegatorAddress: hostZone.DelegationIcaAddress, + ValidatorAddress: unbonding.Validator, + Amount: sdk.NewCoin(hostZone.HostDenom, unbonding.NativeTokenAmount), + }) + } + + // Sanity check that we had enough capacity to unbond + if !remainingUnbondAmount.IsZero() { + return msgs, unbondings, + fmt.Errorf("unable to unbond full amount (%v) from %v", totalUnbondAmount, hostZone.ChainId) + } + + return msgs, unbondings, nil +} + +// Submit undelegate ICA messages in small batches to reduce the gas size per tx +func (k Keeper) BatchSubmitUndelegateICAMessages( + ctx sdk.Context, + hostZone types.HostZone, + epochUnbondingRecordIds []uint64, + msgs []proto.Message, + unbondings []*types.SplitUndelegation, + batchSize int, +) (numTxsSubmitted uint64, err error) { + // Iterate the full list of messages and submit in batches + for start := 0; start < len(msgs); start += batchSize { + end := start + batchSize + if end > len(msgs) { + end = len(msgs) + } + + msgsBatch := msgs[start:end] + unbondingsBatch := unbondings[start:end] + + // Store the callback data + undelegateCallback := types.UndelegateCallback{ + HostZoneId: hostZone.ChainId, + SplitUndelegations: unbondingsBatch, + EpochUnbondingRecordIds: epochUnbondingRecordIds, + } + callbackArgsBz, err := proto.Marshal(&undelegateCallback) + if err != nil { + return numTxsSubmitted, errorsmod.Wrap(err, "unable to marshal undelegate callback args") + } + + // Submit the undelegation ICA + if _, err := k.SubmitTxsDayEpoch( + ctx, + hostZone.ConnectionId, + msgsBatch, + types.ICAAccountType_DELEGATION, + ICACallbackID_Undelegate, + callbackArgsBz, + ); err != nil { + return numTxsSubmitted, errorsmod.Wrapf(err, "unable to submit unbonding ICA for %s", hostZone.ChainId) + } + numTxsSubmitted += 1 + + // flag the delegation change in progress on each validator + for _, unbonding := range unbondingsBatch { + if err := k.IncrementValidatorDelegationChangesInProgress(&hostZone, unbonding.Validator); err != nil { + return numTxsSubmitted, err + } + } + k.SetHostZone(ctx, hostZone) + } + + return numTxsSubmitted, nil +} + +// Submits undelegation ICA messages for a given host zone +// +// First, the total unbond amount is determined from the epoch unbonding records +// Then that unbond amount is allowed to cascade across the validators in order of how proportionally +// different their current delegations are from the weight implied target delegation, +// until their capacities have consumed the full amount +// As a result, unbondings lead to a more balanced distribution of stake across validators +// +// Context: Over time, as LSM Liquid stakes are accepted, the total stake managed by the protocol becomes unbalanced +// as liquid stakes are not aligned with the validator weights. This is only rebalanced once per unbonding period +func (k Keeper) UnbondFromHostZone(ctx sdk.Context, hostZone types.HostZone) (err error) { + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, + "Preparing MsgUndelegates from the delegation account to each validator")) + + // Confirm the delegation account was registered + if hostZone.DelegationIcaAddress == "" { + return errorsmod.Wrapf(types.ErrICAAccountNotFound, "no delegation account found for %s", hostZone.ChainId) + } + + // Get the list of relevant records that should unbond + epochUnbondingRecordIds, epochNumbersToHostZoneUnbondings := k.GetQueuedHostZoneUnbondingRecords(ctx, hostZone.ChainId) + + // Update the native unbond amount on all relevant records + // The native amount is calculated from the stTokens + epochNumbersToHostZoneUnbondings, err = k.RefreshUnbondingNativeTokenAmounts(ctx, hostZone.ChainId, epochNumbersToHostZoneUnbondings) + if err != nil { + return err + } + + // Sum the total number of native tokens from the records above that are ready to unbond + totalNativeUnbondAmount := k.GetTotalUnbondAmount(epochNumbersToHostZoneUnbondings) + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, + "Total unbonded amount: %v%s", totalNativeUnbondAmount, hostZone.HostDenom)) + + // If there's nothing to unbond, return and move on to the next host zone + if totalNativeUnbondAmount.IsZero() { + return nil + } + + // Determine the total eligible unbond amount - excluding delegations to validators with a slash query in progress + totalValidDelegationBeforeUnbonding := sdkmath.ZeroInt() + for _, validator := range hostZone.Validators { + if !validator.SlashQueryInProgress { + totalValidDelegationBeforeUnbonding = totalValidDelegationBeforeUnbonding.Add(validator.Delegation) + } + } + + // Determine the ideal balanced delegation for each validator after the unbonding + // (as if we were to unbond and then rebalance) + delegationAfterUnbonding := totalValidDelegationBeforeUnbonding.Sub(totalNativeUnbondAmount) + balancedDelegationsAfterUnbonding, err := k.GetTargetValAmtsForHostZone(ctx, hostZone, delegationAfterUnbonding) + if err != nil { + return errorsmod.Wrapf(err, "unable to get target val amounts for host zone %s", hostZone.ChainId) + } + + // Determine the unbond capacity for each validator + // Each validator can only unbond up to the difference between their current delegation and their balanced delegation + // The validator's current delegation will be above their balanced delegation if they've received LSM Liquid Stakes + // (which is only rebalanced once per unbonding period) + validatorUnbondCapacity := k.GetValidatorUnbondCapacity(ctx, hostZone.Validators, balancedDelegationsAfterUnbonding) + if len(validatorUnbondCapacity) == 0 { + return fmt.Errorf("there are no validators on %s with sufficient unbond capacity", hostZone.ChainId) + } + + // Sort the unbonding capacity by priority + // Priority is determined by checking the how proportionally unbalanced each validator is + // Zero weight validators will come first in the list + prioritizedUnbondCapacity, err := SortUnbondingCapacityByPriority(validatorUnbondCapacity) + if err != nil { + return err + } + + // Get the undelegation ICA messages and split delegations for the callback + undelegateBatchSize := int(utils.UintToInt(hostZone.MaxMessagesPerIcaTx)) + msgs, unbondings, err := k.GetUnbondingICAMessages( + hostZone, + totalNativeUnbondAmount, + prioritizedUnbondCapacity, + ) + if err != nil { + return err + } + + // Shouldn't be possible, but if all the validator's had a target unbonding of zero, do not send an ICA + if len(msgs) == 0 { + return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Target unbonded amount was 0 for each validator") + } + + // Send the messages in batches so the gas limit isn't exceedeed + numTxsSubmitted, err := k.BatchSubmitUndelegateICAMessages( + ctx, + hostZone, + epochUnbondingRecordIds, + msgs, + unbondings, + undelegateBatchSize, + ) + if err != nil { + return err + } + + // Update the epoch unbonding record status and number of undelegation ICAs + for _, epochNumber := range utils.Uint64MapKeys(epochNumbersToHostZoneUnbondings) { + hostZoneUnbonding := epochNumbersToHostZoneUnbondings[epochNumber] + hostZoneUnbonding.Status = recordstypes.HostZoneUnbonding_UNBONDING_IN_PROGRESS + hostZoneUnbonding.UndelegationTxsInProgress += numTxsSubmitted + err := k.RecordsKeeper.SetHostZoneUnbondingRecord(ctx, epochNumber, hostZone.ChainId, hostZoneUnbonding) + if err != nil { + return err + } + } + + EmitUndelegationEvent(ctx, hostZone, totalNativeUnbondAmount) + + return nil +} + +// this function iterates each host zone, and if it's the right time to +// initiate an unbonding, it attempts to unbond all outstanding records +func (k Keeper) InitiateAllHostZoneUnbondings(ctx sdk.Context, dayNumber uint64) { + k.Logger(ctx).Info(fmt.Sprintf("Initiating all host zone unbondings for epoch %d...", dayNumber)) + + for _, hostZone := range k.GetAllActiveHostZone(ctx) { + + // Confirm the unbonding is supposed to be triggered this epoch + unbondingFrequency := hostZone.GetUnbondingFrequency() + if dayNumber%unbondingFrequency != 0 { + k.Logger(ctx).Info(utils.LogWithHostZone(hostZone.ChainId, + "Host does not unbond this epoch (Unbonding Period: %d, Unbonding Frequency: %d, Epoch: %d)", + hostZone.UnbondingPeriod, unbondingFrequency, dayNumber)) + continue + } + + // Get host zone unbonding message by summing up the unbonding records + err := utils.ApplyFuncIfNoError(ctx, func(ctx sdk.Context) error { + return k.UnbondFromHostZone(ctx, hostZone) + }) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("Error initiating host zone unbondings for host zone %s: %s", hostZone.ChainId, err.Error())) + continue + } + } +} diff --git a/x/stakeibc/keeper/unbonding_test.go b/x/stakeibc/keeper/unbonding_test.go new file mode 100644 index 00000000000..811f4b2f04e --- /dev/null +++ b/x/stakeibc/keeper/unbonding_test.go @@ -0,0 +1,1407 @@ +package keeper_test + +import ( + "fmt" + + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/gogoproto/proto" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + _ "github.com/stretchr/testify/suite" + + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + + epochstypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + recordtypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/keeper" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +type ValidatorUnbonding struct { + Validator string + UnbondAmount sdkmath.Int +} + +type UnbondingTestCase struct { + hostZone types.HostZone + totalUnbondAmount sdkmath.Int + delegationChannelID string + delegationPortID string + channelStartSequence uint64 + expectedUnbondingRecordIds []uint64 +} + +func (s *KeeperTestSuite) SetupTestUnbondFromHostZone( + totalWeight int64, + totalStake sdkmath.Int, + unbondAmount sdkmath.Int, + validators []*types.Validator, +) UnbondingTestCase { + delegationAccountOwner := types.FormatHostZoneICAOwner(HostChainId, types.ICAAccountType_DELEGATION) + delegationChannelID, delegationPortID := s.CreateICAChannel(delegationAccountOwner) + + // Sanity checks: + // - total stake matches + // - total weights sum to 100 + actualTotalStake := sdkmath.ZeroInt() + actualTotalWeights := uint64(0) + for _, validator := range validators { + actualTotalStake = actualTotalStake.Add(validator.Delegation) + actualTotalWeights += validator.Weight + } + s.Require().Equal(totalStake.Int64(), actualTotalStake.Int64(), "test setup failed - total stake does not match") + s.Require().Equal(totalWeight, int64(actualTotalWeights), "test setup failed - total weight does not match") + + // Store the validators on the host zone + hostZone := types.HostZone{ + ChainId: HostChainId, + ConnectionId: ibctesting.FirstConnectionID, + HostDenom: Atom, + DelegationIcaAddress: "cosmos_DELEGATION", + Validators: validators, + TotalDelegations: totalStake, + RedemptionRate: sdkmath.LegacyOneDec(), + MaxMessagesPerIcaTx: 32, + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + // Store the total unbond amount across two epoch unbonding records + // and create a user redemption record for each + halfUnbondAmount := unbondAmount.Quo(sdkmath.NewInt(2)) + for i := uint64(1); i <= 2; i++ { + redemptionRecordId := fmt.Sprintf("id-%d", i) + + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, recordtypes.EpochUnbondingRecord{ + EpochNumber: i, + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{ + { + HostZoneId: HostChainId, + Status: recordtypes.HostZoneUnbonding_UNBONDING_QUEUE, + StTokenAmount: halfUnbondAmount, + NativeTokenAmount: halfUnbondAmount, + UserRedemptionRecords: []string{redemptionRecordId}, + }, + }, + }) + + s.App.RecordsKeeper.SetUserRedemptionRecord(s.Ctx, recordtypes.UserRedemptionRecord{ + Id: redemptionRecordId, + StTokenAmount: halfUnbondAmount, + NativeTokenAmount: halfUnbondAmount, + }) + } + + // Mock the epoch tracker to timeout 90% through the epoch + strideEpochTracker := types.EpochTracker{ + EpochIdentifier: epochstypes.DAY_EPOCH, + Duration: 10_000_000_000, // 10 second epochs + NextEpochStartTime: uint64(s.Coordinator.CurrentTime.UnixNano() + 30_000_000_000), // dictates timeout + } + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, strideEpochTracker) + + // Get tx seq number before the ICA was submitted to check whether an ICA was submitted + startSequence, found := s.App.IBCKeeper.ChannelKeeper.GetNextSequenceSend(s.Ctx, delegationPortID, delegationChannelID) + s.Require().True(found, "sequence number not found before ica") + + return UnbondingTestCase{ + hostZone: hostZone, + totalUnbondAmount: unbondAmount, + delegationChannelID: delegationChannelID, + delegationPortID: delegationPortID, + channelStartSequence: startSequence, + expectedUnbondingRecordIds: []uint64{1, 2}, + } +} + +// Helper function to check that an undelegation ICA was submitted and that the callback data +// holds the expected unbondings for each validator +func (s *KeeperTestSuite) CheckUnbondingMessages(tc UnbondingTestCase, expectedUnbondings []ValidatorUnbonding) { + // Trigger unbonding + err := s.App.StakeibcKeeper.UnbondFromHostZone(s.Ctx, tc.hostZone) + s.Require().NoError(err, "no error expected when calling unbond from host") + + // Check that sequence number incremented from a sent ICA + endSequence, found := s.App.IBCKeeper.ChannelKeeper.GetNextSequenceSend(s.Ctx, tc.delegationPortID, tc.delegationChannelID) + s.Require().True(found, "sequence number not found after ica") + s.Require().Equal(tc.channelStartSequence+1, endSequence, "sequence number should have incremented") + + // Check that callback data was stored + callbackData := s.App.IcacallbacksKeeper.GetAllCallbackData(s.Ctx) + s.Require().Len(callbackData, 1, "there should only be one callback data stored") + + // Check host zone and epoch unbonding record id's + var actualCallback types.UndelegateCallback + err = proto.Unmarshal(callbackData[0].CallbackArgs, &actualCallback) + s.Require().NoError(err, "no error expected when unmarshalling callback args") + + s.Require().Equal(HostChainId, actualCallback.HostZoneId, "chain-id on callback") + s.Require().Equal(tc.expectedUnbondingRecordIds, actualCallback.EpochUnbondingRecordIds, "unbonding record id's on callback") + + // Check splits from callback data align with expected unbondings + s.Require().Len(actualCallback.SplitUndelegations, len(expectedUnbondings), "number of unbonding messages") + for i, expected := range expectedUnbondings { + actualSplit := actualCallback.SplitUndelegations[i] + s.Require().Equal(expected.Validator, actualSplit.Validator, "callback message validator - index %d", i) + s.Require().Equal(expected.UnbondAmount.Int64(), actualSplit.NativeTokenAmount.Int64(), "callback message amount - index %d", i) + } + + // Check the delegation change in progress was incremented from each that had an unbonding + actualHostZone, found := s.App.StakeibcKeeper.GetHostZone(s.Ctx, HostChainId) + s.Require().True(found, "host zone should have been found") + + for _, actualValidator := range actualHostZone.Validators { + validatorUnbonded := false + for _, unbondedVal := range expectedUnbondings { + if actualValidator.Address == unbondedVal.Validator { + validatorUnbonded = true + } + } + + expectedDelegationChangesInProgress := 0 + if validatorUnbonded { + expectedDelegationChangesInProgress = 1 + } + s.Require().Equal(expectedDelegationChangesInProgress, int(actualValidator.DelegationChangesInProgress), + "validator %s delegation changes in progress", actualValidator.Address) + } + + // Check that the unbond event was emitted with the proper unbond amount + s.CheckEventValueEmitted(types.EventTypeUndelegation, types.AttributeKeyTotalUnbondAmount, tc.totalUnbondAmount.String()) +} + +func (s *KeeperTestSuite) TestUnbondFromHostZone_Successful_UnbondOnlyZeroWeightVals() { + // Native Stake: 1000 + // LSM Stake: 250 + // Total Stake: 1250 + // + // Unbond Amount: 50 + // Stake After Unbond: 1200 + totalUnbondAmount := sdkmath.NewInt(50) + totalStake := sdkmath.NewInt(1250) + totalWeight := int64(100) + + validators := []*types.Validator{ + // Current: 100, Weight: 10%, Balanced: 10% * 1200 = 120, Capacity: 100-120 = -20 -> 0 + // No capacity -> unbondings + {Address: "valA", Weight: 10, Delegation: sdkmath.NewInt(100)}, + // Current: 420, Weight: 35%, Balanced: 35% * 1200 = 420, Capacity: 420-420 = 0 + // No capacity -> unbondings + {Address: "valB", Weight: 35, Delegation: sdkmath.NewInt(420)}, + // Weight: 0%, Balanced: 0, Capacity: 40 + // >>> Ratio: 0 -> Priority #1 <<< + {Address: "valC", Weight: 0, Delegation: sdkmath.NewInt(40)}, + // Current: 300, Weight: 30%, Balanced: 30% * 1200 = 360, Capacity: 300-360 = -60 -> 0 + // No capacity -> unbondings + {Address: "valD", Weight: 30, Delegation: sdkmath.NewInt(300)}, + // Weight: 0%, Balanced: 0, Capacity: 30 + // >>> Ratio: 0 -> Priority #2 <<< + {Address: "valE", Weight: 0, Delegation: sdkmath.NewInt(30)}, + // Current: 200, Weight: 10%, Balanced: 10% * 1200 = 120, Capacity: 200 - 120 = 80 + // >>> Ratio: 110/200 = 0.55 -> #3 Priority <<<< + {Address: "valF", Weight: 10, Delegation: sdkmath.NewInt(200)}, + // Current: 160, Weight: 15%, Balanced: 15% * 1200 = 180, Capacity: 160-180 = -20 -> 0 + // No capacity -> unbondings + {Address: "valG", Weight: 15, Delegation: sdkmath.NewInt(160)}, + } + + expectedUnbondings := []ValidatorUnbonding{ + // valC has #1 priority - unbond up to capacity at 40 + {Validator: "valC", UnbondAmount: sdkmath.NewInt(40)}, + // 50 - 40 = 10 unbond remaining + // valE has #2 priority - unbond up to remaining + {Validator: "valE", UnbondAmount: sdkmath.NewInt(10)}, + } + + tc := s.SetupTestUnbondFromHostZone(totalWeight, totalStake, totalUnbondAmount, validators) + s.CheckUnbondingMessages(tc, expectedUnbondings) +} + +func (s *KeeperTestSuite) TestUnbondFromHostZone_Successful_UnbondIgnoresSlashQueryInProgress() { + // Native Stake: 100 + // LSM Stake: 0 + // Total Stake: 100 + // + // Slash Query In Progress Stake: 25 + // Eligible Stake: 75 + // + // Unbond Amount: 20 + // Stake After Unbond: 80 + // Eligible Stake After Unbond 45 + totalUnbondAmount := sdkmath.NewInt(20) + totalStake := sdkmath.NewInt(100) + totalWeight := int64(100) + + validators := []*types.Validator{ + // Current: 25, Weight: 15%, Balanced: (15/75) * 55= 11, Capacity: 25-11 = 14 > 0 + {Address: "valA", Weight: 15, Delegation: sdkmath.NewInt(25)}, + // Current: 25, Weight: 20%, Balanced: (20/75) * 55 = 14.66, Capacity: 25-14.66 = 10.44 > 0 + {Address: "valB", Weight: 20, Delegation: sdkmath.NewInt(25)}, + // Current: 25, Weight: 40%, Balanced: (40/75) * 55 = 29.33, Capacity: 25-29.33 < 0 + {Address: "valC", Weight: 40, Delegation: sdkmath.NewInt(25)}, + // Current: 25, Weight: 25%, Slash-Query-In-Progress so ignored + {Address: "valD", Weight: 25, Delegation: sdkmath.NewInt(25), SlashQueryInProgress: true}, + } + + expectedUnbondings := []ValidatorUnbonding{ + // valA has #1 priority - unbond up to 14 + {Validator: "valA", UnbondAmount: sdkmath.NewInt(14)}, + // 20 - 14 = 6 unbond remaining + // valB has #2 priority - unbond up to remaining + {Validator: "valB", UnbondAmount: sdkmath.NewInt(6)}, + } + + tc := s.SetupTestUnbondFromHostZone(totalWeight, totalStake, totalUnbondAmount, validators) + s.CheckUnbondingMessages(tc, expectedUnbondings) +} + +func (s *KeeperTestSuite) TestUnbondFromHostZone_Successful_UnbondTotalLessThanTotalLSM() { + // Native Stake: 1000 + // LSM Stake: 250 + // Total Stake: 1250 + // + // Unbond Amount: 150 + // Stake After Unbond: 1100 + totalUnbondAmount := sdkmath.NewInt(150) + totalStake := sdkmath.NewInt(1250) + totalWeight := int64(100) + + validators := []*types.Validator{ + // Current: 100, Weight: 10%, Balanced: 10% * 1100 = 110, Capacity: 100-110 = -10 -> 0 + // No capacity -> unbondings + {Address: "valA", Weight: 10, Delegation: sdkmath.NewInt(100)}, + // Current: 420, Weight: 35%, Balanced: 35% * 1100 = 385, Capacity: 420-385 = 35 + // >>> Ratio: 385/420 = 0.91 -> Priority #4 <<< + {Address: "valB", Weight: 35, Delegation: sdkmath.NewInt(420)}, + // Weight: 0%, Balanced: 0, Capacity: 40 + // >>> Ratio: 0 -> Priority #1 <<< + {Address: "valC", Weight: 0, Delegation: sdkmath.NewInt(40)}, + // Current: 300, Weight: 30%, Balanced: 30% * 1100 = 330, Capacity: 300-330 = -30 -> 0 + // No capacity -> unbondings + {Address: "valD", Weight: 30, Delegation: sdkmath.NewInt(300)}, + // Weight: 0%, Balanced: 0, Capacity: 30 + // >>> Ratio: 0 -> Priority #2 <<< + {Address: "valE", Weight: 0, Delegation: sdkmath.NewInt(30)}, + // Current: 200, Weight: 10%, Balanced: 10% * 1100 = 110, Capacity: 200 - 110 = 90 + // >>> Ratio: 110/200 = 0.55 -> Priority #3 <<< + {Address: "valF", Weight: 10, Delegation: sdkmath.NewInt(200)}, + // Current: 160, Weight: 15%, Balanced: 15% * 1100 = 165, Capacity: 160-165 = -5 -> 0 + // No capacity -> unbondings + {Address: "valG", Weight: 15, Delegation: sdkmath.NewInt(160)}, + } + + expectedUnbondings := []ValidatorUnbonding{ + // valC has #1 priority - unbond up to capacity at 40 + {Validator: "valC", UnbondAmount: sdkmath.NewInt(40)}, + // 150 - 40 = 110 unbond remaining + // valE has #2 priority - unbond up to capacity at 30 + {Validator: "valE", UnbondAmount: sdkmath.NewInt(30)}, + // 150 - 40 - 30 = 80 unbond remaining + // valF has #3 priority - unbond up to remaining + {Validator: "valF", UnbondAmount: sdkmath.NewInt(80)}, + } + + tc := s.SetupTestUnbondFromHostZone(totalWeight, totalStake, totalUnbondAmount, validators) + s.CheckUnbondingMessages(tc, expectedUnbondings) +} + +func (s *KeeperTestSuite) TestUnbondFromHostZone_Successful_UnbondTotalGreaterThanTotalLSM() { + // Native Stake: 1000 + // LSM Stake: 250 + // Total Stake: 1250 + // + // Unbond Amount: 350 + // Stake After Unbond: 900 + totalUnbondAmount := sdkmath.NewInt(350) + totalStake := sdkmath.NewInt(1250) + totalWeight := int64(100) + + validators := []*types.Validator{ + // Current: 100, Weight: 10%, Balanced: 10% * 900 = 90, Capacity: 100-90 = 10 + // >>> Ratio: 90/100 = 0.9 -> Priority #7 <<< + {Address: "valA", Weight: 10, Delegation: sdkmath.NewInt(100)}, + // Current: 420, Weight: 35%, Balanced: 35% * 900 = 315, Capacity: 420-315 = 105 + // >>> Ratio: 315/420 = 0.75 -> Priority #4 <<< + {Address: "valB", Weight: 35, Delegation: sdkmath.NewInt(420)}, + // Weight: 0%, Balanced: 0, Capacity: 40 + // >>> Ratio: 0 -> Priority #1 <<< + {Address: "valC", Weight: 0, Delegation: sdkmath.NewInt(40)}, + // Current: 300, Weight: 30%, Balanced: 30% * 900 = 270, Capacity: 300-270 = 30 + // >>> Ratio: 270/300 = 0.9 -> Priority #6 <<< + {Address: "valD", Weight: 30, Delegation: sdkmath.NewInt(300)}, + // Weight: 0%, Balanced: 0, Capacity: 30 + // >>> Ratio: 0 -> Priority #2 <<< + {Address: "valE", Weight: 0, Delegation: sdkmath.NewInt(30)}, + // Current: 200, Weight: 10%, Balanced: 10% * 900 = 90, Capacity: 200 - 90 = 110 + // >>> Ratio: 90/200 = 0.45 -> Priority #3 <<< + {Address: "valF", Weight: 10, Delegation: sdkmath.NewInt(200)}, + // Current: 160, Weight: 15%, Balanced: 15% * 900 = 135, Capacity: 160-135 = 25 + // >>> Ratio: 135/160 = 0.85 -> Priority #5 <<< + {Address: "valG", Weight: 15, Delegation: sdkmath.NewInt(160)}, + } + + expectedUnbondings := []ValidatorUnbonding{ + // valC has #1 priority - unbond up to capacity at 40 + {Validator: "valC", UnbondAmount: sdkmath.NewInt(40)}, + // 350 - 40 = 310 unbond remaining + // valE has #2 priority - unbond up to capacity at 30 + {Validator: "valE", UnbondAmount: sdkmath.NewInt(30)}, + // 310 - 30 = 280 unbond remaining + // valF has #3 priority - unbond up to capacity at 110 + {Validator: "valF", UnbondAmount: sdkmath.NewInt(110)}, + // 280 - 110 = 170 unbond remaining + // valB has #4 priority - unbond up to capacity at 105 + {Validator: "valB", UnbondAmount: sdkmath.NewInt(105)}, + // 170 - 105 = 65 unbond remaining + // valG has #5 priority - unbond up to capacity at 25 + {Validator: "valG", UnbondAmount: sdkmath.NewInt(25)}, + // 65 - 25 = 40 unbond remaining + // valD has #6 priority - unbond up to capacity at 30 + {Validator: "valD", UnbondAmount: sdkmath.NewInt(30)}, + // 40 - 30 = 10 unbond remaining + // valA has #7 priority - unbond up to remaining + {Validator: "valA", UnbondAmount: sdkmath.NewInt(10)}, + } + + tc := s.SetupTestUnbondFromHostZone(totalWeight, totalStake, totalUnbondAmount, validators) + s.CheckUnbondingMessages(tc, expectedUnbondings) +} + +func (s *KeeperTestSuite) TestUnbondFromHostZone_Successful_RefreshedNativeAmount() { + // Total Stake: 1000 + // + // Unbond Amount with old redemption rate (RR = 1): 100 + // Unbond Amount with new redemption rate (RR = 1.5): 150 + // + // Stake After Unbond: 850 + updatedRedemptionRate := sdkmath.LegacyMustNewDecFromStr("1.5") + unbondAmountWithOldRate := sdkmath.NewInt(100) + unbondAmountWithNewRate := sdkmath.NewInt(150) + totalStake := sdkmath.NewInt(1000) + totalWeight := int64(100) + + // Since this test is only intended to check the native token refresh, + // we don't need more than 1 validator + // That validator should unbond the full amount with the new redemption rate + validators := []*types.Validator{ + {Address: "valA", Weight: 100, Delegation: totalStake}, + } + expectedUnbondings := []ValidatorUnbonding{ + {Validator: "valA", UnbondAmount: unbondAmountWithNewRate}, + } + + // Setup using default, and then override the redemption rate value to update it from 1.0 to 1.5 + tc := s.SetupTestUnbondFromHostZone(totalWeight, totalStake, unbondAmountWithOldRate, validators) + + hostZone := s.MustGetHostZone(HostChainId) + hostZone.RedemptionRate = updatedRedemptionRate + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + // Finally check that the unbondings matched - mostly checking that there was a greater amount + // unbonded than was originally in the host zone unbonding record + tc.totalUnbondAmount = unbondAmountWithNewRate + s.CheckUnbondingMessages(tc, expectedUnbondings) +} + +func (s *KeeperTestSuite) TestUnbondFromHostZone_NoDelegationAccount() { + // Call unbond on a host zone without a delegation account - it should error + invalidHostZone := types.HostZone{ + ChainId: HostChainId, + DelegationIcaAddress: "", + } + err := s.App.StakeibcKeeper.UnbondFromHostZone(s.Ctx, invalidHostZone) + s.Require().ErrorContains(err, "no delegation account found for GAIA: ICA acccount not found on host zone") +} + +func (s *KeeperTestSuite) TestUnbondFromHostZone_ZeroUnbondAmount() { + totalWeight := int64(0) + totalStake := sdkmath.ZeroInt() + totalUnbondAmount := sdkmath.ZeroInt() + tc := s.SetupTestUnbondFromHostZone(totalWeight, totalStake, totalUnbondAmount, []*types.Validator{}) + + // Call unbond - it should NOT error since the unbond amount was 0 - but it should short circuit + err := s.App.StakeibcKeeper.UnbondFromHostZone(s.Ctx, tc.hostZone) + s.Require().Nil(err, "unbond should not have thrown an error - it should have simply ignored the host zone") + + // Confirm no ICAs were sent + endSequence, found := s.App.IBCKeeper.ChannelKeeper.GetNextSequenceSend(s.Ctx, tc.delegationPortID, tc.delegationChannelID) + s.Require().True(found, "sequence number not found after ica") + s.Require().Equal(tc.channelStartSequence, endSequence, "sequence number should stay the same since no messages were sent") +} + +func (s *KeeperTestSuite) TestUnbondFromHostZone_ZeroValidatorWeights() { + // Setup the test with all zero-weight validators + totalWeight := int64(0) + totalStake := sdkmath.NewInt(100) + totalUnbondAmount := sdkmath.NewInt(10) + validators := []*types.Validator{ + {Address: "valA", Weight: 0, Delegation: sdkmath.NewInt(25)}, + {Address: "valB", Weight: 0, Delegation: sdkmath.NewInt(50)}, + {Address: "valC", Weight: 0, Delegation: sdkmath.NewInt(25)}, + } + tc := s.SetupTestUnbondFromHostZone(totalWeight, totalStake, totalUnbondAmount, validators) + + // Call unbond - it should fail + err := s.App.StakeibcKeeper.UnbondFromHostZone(s.Ctx, tc.hostZone) + s.Require().ErrorContains(err, "No non-zero validators found for host zone") +} + +func (s *KeeperTestSuite) TestUnbondFromHostZone_InsufficientDelegations() { + // Setup the test where the total unbond amount is greater than the current delegations + totalWeight := int64(100) + totalStake := sdkmath.NewInt(100) + totalUnbondAmount := sdkmath.NewInt(200) + validators := []*types.Validator{ + {Address: "valA", Weight: 25, Delegation: sdkmath.NewInt(25)}, + {Address: "valB", Weight: 50, Delegation: sdkmath.NewInt(50)}, + {Address: "valC", Weight: 25, Delegation: sdkmath.NewInt(25)}, + } + tc := s.SetupTestUnbondFromHostZone(totalWeight, totalStake, totalUnbondAmount, validators) + + // Call unbond - it should fail + err := s.App.StakeibcKeeper.UnbondFromHostZone(s.Ctx, tc.hostZone) + s.Require().ErrorContains(err, "Cannot calculate target delegation if final amount is less than or equal to zero") +} + +func (s *KeeperTestSuite) TestUnbondFromHostZone_ICAFailed() { + // Validator setup here is arbitrary as long as the totals match + totalWeight := int64(100) + totalStake := sdkmath.NewInt(100) + totalUnbondAmount := sdkmath.NewInt(10) + validators := []*types.Validator{{Address: "valA", Weight: 100, Delegation: sdkmath.NewInt(100)}} + tc := s.SetupTestUnbondFromHostZone(totalWeight, totalStake, totalUnbondAmount, validators) + + // Remove the connection ID from the host zone so that the ICA fails + invalidHostZone := tc.hostZone + invalidHostZone.ConnectionId = "" + + err := s.App.StakeibcKeeper.UnbondFromHostZone(s.Ctx, invalidHostZone) + s.Require().ErrorContains(err, "unable to submit unbonding ICA for GAIA") +} + +func (s *KeeperTestSuite) TestGetBalanceRatio() { + testCases := []struct { + unbondCapacity keeper.ValidatorUnbondCapacity + expectedRatio sdkmath.LegacyDec + errorExpected bool + }{ + { + unbondCapacity: keeper.ValidatorUnbondCapacity{ + BalancedDelegation: sdkmath.NewInt(0), + CurrentDelegation: sdkmath.NewInt(100), + }, + expectedRatio: sdkmath.LegacyZeroDec(), + errorExpected: false, + }, + { + unbondCapacity: keeper.ValidatorUnbondCapacity{ + BalancedDelegation: sdkmath.NewInt(25), + CurrentDelegation: sdkmath.NewInt(100), + }, + expectedRatio: sdkmath.LegacyMustNewDecFromStr("0.25"), + errorExpected: false, + }, + { + unbondCapacity: keeper.ValidatorUnbondCapacity{ + BalancedDelegation: sdkmath.NewInt(75), + CurrentDelegation: sdkmath.NewInt(100), + }, + expectedRatio: sdkmath.LegacyMustNewDecFromStr("0.75"), + errorExpected: false, + }, + { + unbondCapacity: keeper.ValidatorUnbondCapacity{ + BalancedDelegation: sdkmath.NewInt(150), + CurrentDelegation: sdkmath.NewInt(100), + }, + expectedRatio: sdkmath.LegacyMustNewDecFromStr("1.5"), + errorExpected: false, + }, + { + unbondCapacity: keeper.ValidatorUnbondCapacity{ + BalancedDelegation: sdkmath.NewInt(100), + CurrentDelegation: sdkmath.NewInt(0), + }, + errorExpected: true, + }, + } + for _, tc := range testCases { + balanceRatio, err := tc.unbondCapacity.GetBalanceRatio() + if tc.errorExpected { + s.Require().Error(err) + } else { + s.Require().NoError(err) + s.Require().Equal(tc.expectedRatio.String(), balanceRatio.String()) + } + } +} + +func (s *KeeperTestSuite) TestGetQueuedHostZoneUnbondingRecords() { + // This function returns a mapping of epoch unbonding record ID (i.e. epoch number) -> hostZoneUnbonding + // For the purposes of this test, the NativeTokenAmount is used in place of the host zone unbonding record + // for the purposes of validating the proper record was selected. In other words, after this function, + // we just verify that the native token amounts of the output line up with the expected map below + expectedEpochUnbondingRecordIds := []uint64{1, 2, 4} + expectedHostZoneUnbondingMap := map[uint64]int64{1: 1, 2: 3, 4: 8} // includes only the relevant records below + + epochUnbondingRecords := []recordtypes.EpochUnbondingRecord{ + { + // Has relevant host zone unbonding, so epoch number is included + EpochNumber: uint64(1), + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{ + { + // Included + HostZoneId: HostChainId, + StTokenAmount: sdkmath.NewInt(1), + Status: recordtypes.HostZoneUnbonding_UNBONDING_QUEUE, + }, + { + // Different host zone + HostZoneId: OsmoChainId, + StTokenAmount: sdkmath.NewInt(2), + Status: recordtypes.HostZoneUnbonding_UNBONDING_QUEUE, + }, + }, + }, + { + // Has relevant host zone unbonding, so epoch number is included + EpochNumber: uint64(2), + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{ + { + // Included + HostZoneId: HostChainId, + StTokenAmount: sdkmath.NewInt(3), + Status: recordtypes.HostZoneUnbonding_UNBONDING_QUEUE, + }, + { + // Different host zone + HostZoneId: OsmoChainId, + StTokenAmount: sdkmath.NewInt(4), + Status: recordtypes.HostZoneUnbonding_UNBONDING_QUEUE, + }, + }, + }, + { + // No relevant host zone unbonding, epoch number not included + EpochNumber: uint64(3), + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{ + { + // Different Status + HostZoneId: HostChainId, + StTokenAmount: sdkmath.NewInt(5), + Status: recordtypes.HostZoneUnbonding_UNBONDING_IN_PROGRESS, + }, + { + // Different Status + HostZoneId: OsmoChainId, + StTokenAmount: sdkmath.NewInt(6), + Status: recordtypes.HostZoneUnbonding_UNBONDING_IN_PROGRESS, + }, + }, + }, + { + // Has relevant host zone unbonding (the retry one), so epoch number is included + EpochNumber: uint64(4), + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{ + { + // Different Host and Status + HostZoneId: OsmoChainId, + StTokenAmount: sdkmath.NewInt(7), + Status: recordtypes.HostZoneUnbonding_CLAIMABLE, + }, + { + // Included + HostZoneId: HostChainId, + StTokenAmount: sdkmath.NewInt(8), + Status: recordtypes.HostZoneUnbonding_UNBONDING_RETRY_QUEUE, + UndelegationTxsInProgress: 0, + }, + }, + }, + { + // Has no relevant unbondings + EpochNumber: uint64(5), + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{ + { + // Different Host and Status + HostZoneId: OsmoChainId, + StTokenAmount: sdkmath.NewInt(9), + Status: recordtypes.HostZoneUnbonding_CLAIMABLE, + }, + { + // Retry record, but has an undelegation in progress + HostZoneId: HostChainId, + StTokenAmount: sdkmath.NewInt(10), + Status: recordtypes.HostZoneUnbonding_UNBONDING_RETRY_QUEUE, + UndelegationTxsInProgress: 1, + }, + }, + }, + } + + for _, epochUnbondingRecord := range epochUnbondingRecords { + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, epochUnbondingRecord) + } + + actualEpochIds, actualHostZoneMap := s.App.StakeibcKeeper.GetQueuedHostZoneUnbondingRecords(s.Ctx, HostChainId) + s.Require().Equal(expectedEpochUnbondingRecordIds, actualEpochIds, "epoch unbonding record IDs") + for epochNumber, actualHostZoneUnbonding := range actualHostZoneMap { + expectedHostZoneUnbonding := expectedHostZoneUnbondingMap[epochNumber] + s.Require().Equal(expectedHostZoneUnbonding, actualHostZoneUnbonding.StTokenAmount.Int64(), + "host zone unbonding record sttoken amount") + } +} + +func (s *KeeperTestSuite) TestGetTotalUnbondAmount() { + hostZoneUnbondingRecords := map[uint64]recordtypes.HostZoneUnbonding{ + 1: {NativeTokensToUnbond: sdkmath.NewInt(1)}, + 2: {NativeTokensToUnbond: sdkmath.NewInt(2)}, + 3: {NativeTokensToUnbond: sdkmath.NewInt(3)}, + 4: {NativeTokensToUnbond: sdkmath.NewInt(4)}, + } + expectedUnbondAmount := sdkmath.NewInt(1 + 2 + 3 + 4) + + actualUnbondAmount := s.App.StakeibcKeeper.GetTotalUnbondAmount(hostZoneUnbondingRecords) + s.Require().Equal(expectedUnbondAmount, actualUnbondAmount, "unbond amount") + + emptyUnbondings := map[uint64]recordtypes.HostZoneUnbonding{} + actualUnbondAmount = s.App.StakeibcKeeper.GetTotalUnbondAmount(emptyUnbondings) + s.Require().Zero(actualUnbondAmount.Int64(), "expected zero unbondings") +} + +func (s *KeeperTestSuite) TestRefreshUserRedemptionRecordNativeAmounts() { + // Define the expected redemption records after the function is called + redemptionRate := sdkmath.LegacyMustNewDecFromStr("1.999") + expectedUserRedemptionRecords := []recordtypes.UserRedemptionRecord{ + // StTokenAmount: 1000 * 1.999 = 1999 Native + {Id: "A", StTokenAmount: sdkmath.NewInt(1000), NativeTokenAmount: sdkmath.NewInt(1999)}, + // StTokenAmount: 999 * 1.999 = 1997.001, Truncated to 1997 Native + {Id: "B", StTokenAmount: sdkmath.NewInt(999), NativeTokenAmount: sdkmath.NewInt(1997)}, + // StTokenAmount: 100 * 1.999 = 199.9, Truncated to 199 Native + {Id: "C", StTokenAmount: sdkmath.NewInt(100), NativeTokenAmount: sdkmath.NewInt(199)}, + } + expectedTotalNativeAmount := sdkmath.NewInt(1999 + 1997 + 199) + + // Create the initial records which do not have the end native amount + for _, expectedUserRedemptionRecord := range expectedUserRedemptionRecords { + initialUserRedemptionRecord := expectedUserRedemptionRecord + initialUserRedemptionRecord.NativeTokenAmount = sdkmath.ZeroInt() + s.App.RecordsKeeper.SetUserRedemptionRecord(s.Ctx, initialUserRedemptionRecord) + } + + // Call the refresh user redemption record function + // Note: an extra ID ("D"), is passed into this function that will be ignored + // since there's not user redemption record for "D" + redemptionRecordIds := []string{"A", "B", "C", "D"} + actualTotalNativeAmount := s.App.StakeibcKeeper.RefreshUserRedemptionRecordNativeAmounts( + s.Ctx, + HostChainId, + redemptionRecordIds, + redemptionRate, + ) + + // Confirm the summation is correct and the user redemption records were updated + s.Require().Equal(expectedTotalNativeAmount.Int64(), actualTotalNativeAmount.Int64(), "total native amount") + for _, expectedRecord := range expectedUserRedemptionRecords { + actualRecord, found := s.App.RecordsKeeper.GetUserRedemptionRecord(s.Ctx, expectedRecord.Id) + s.Require().True(found, "record %s should have been found", expectedRecord.Id) + s.Require().Equal(expectedRecord.NativeTokenAmount.Int64(), actualRecord.NativeTokenAmount.Int64(), + "record %s native amount", expectedRecord.Id) + } +} + +// Tests RefreshUnbondingNativeTokenAmounts which indirectly tests +// RefreshHostZoneUnbondingNativeTokenAmount and RefreshUserRedemptionRecordNativeAmounts +func (s *KeeperTestSuite) TestRefreshUnbondingNativeTokenAmounts() { + chainA := "chain-0" + chainB := "chain-1" + epochNumberA := uint64(1) + epochNumberB := uint64(2) + + // Create the epoch unbonding records + // It doesn't need the host zone unbonding records since they'll be added + // in the tested function + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, recordtypes.EpochUnbondingRecord{ + EpochNumber: epochNumberA, + }) + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, recordtypes.EpochUnbondingRecord{ + EpochNumber: epochNumberB, + }) + + // Create two host zones, with different redemption rates + s.App.StakeibcKeeper.SetHostZone(s.Ctx, types.HostZone{ + ChainId: chainA, + RedemptionRate: sdkmath.LegacyMustNewDecFromStr("1.5"), + }) + s.App.StakeibcKeeper.SetHostZone(s.Ctx, types.HostZone{ + ChainId: chainB, + RedemptionRate: sdkmath.LegacyMustNewDecFromStr("2.0"), + }) + + // Create the user redemption records + userRedemptionRecords := []recordtypes.UserRedemptionRecord{ + // chainA - Redemption Rate: 1.5 + {Id: "A", StTokenAmount: sdkmath.NewInt(1000)}, // native: 1500 + {Id: "B", StTokenAmount: sdkmath.NewInt(2000)}, // native: 3000 + // chainB - Redemption Rate: 2.0 + {Id: "C", StTokenAmount: sdkmath.NewInt(3000)}, // native: 6000 + {Id: "D", StTokenAmount: sdkmath.NewInt(4000)}, // native: 8000 + } + expectedUserNativeAmounts := map[string]sdkmath.Int{ + "A": sdkmath.NewInt(1500), + "B": sdkmath.NewInt(3000), + "C": sdkmath.NewInt(6000), + "D": sdkmath.NewInt(8000), + } + for _, redemptionRecord := range userRedemptionRecords { + s.App.RecordsKeeper.SetUserRedemptionRecord(s.Ctx, redemptionRecord) + } + + // Define the two host zone unbonding records + initialHostZoneUnbondingA := recordtypes.HostZoneUnbonding{ + HostZoneId: chainA, + UserRedemptionRecords: []string{"A", "B"}, + StTokenAmount: sdkmath.NewInt(10_000), + Status: recordtypes.HostZoneUnbonding_UNBONDING_QUEUE, + } + expectedHostZoneUnbondAmountA := expectedUserNativeAmounts["A"].Add(expectedUserNativeAmounts["B"]).Int64() + expectedStToBurnAmountA := initialHostZoneUnbondingA.StTokenAmount.Int64() + + initialHostZoneUnbondingB := recordtypes.HostZoneUnbonding{ + HostZoneId: chainB, + UserRedemptionRecords: []string{"C", "D"}, + StTokenAmount: sdkmath.NewInt(20_000), + Status: recordtypes.HostZoneUnbonding_UNBONDING_QUEUE, + } + expectedHostZoneUnbondAmountB := expectedUserNativeAmounts["C"].Add(expectedUserNativeAmounts["D"]).Int64() + expectedStToBurnAmountB := initialHostZoneUnbondingB.StTokenAmount.Int64() + + // Call refresh for both hosts + epochToHostZoneMap := map[uint64]recordtypes.HostZoneUnbonding{ + epochNumberA: initialHostZoneUnbondingA, + epochNumberB: initialHostZoneUnbondingB, + } + refreshedEpochToHostZoneMapA, err := s.App.StakeibcKeeper.RefreshUnbondingNativeTokenAmounts(s.Ctx, chainA, epochToHostZoneMap) + s.Require().NoError(err, "no error expected when refreshing unbond amount") + refreshedEpochToHostZoneMapB, err := s.App.StakeibcKeeper.RefreshUnbondingNativeTokenAmounts(s.Ctx, chainB, epochToHostZoneMap) + s.Require().NoError(err, "no error expected when refreshing unbond amount") + + // Confirm the host zone unbonding records were updated + updatedHostZoneUnbondingA, found := s.App.RecordsKeeper.GetHostZoneUnbondingByChainId(s.Ctx, epochNumberA, chainA) + s.Require().True(found, "host zone unbonding record for %s should have been found", chainA) + + actualNativeAmountA := updatedHostZoneUnbondingA.NativeTokenAmount.Int64() + actualNativeToUnbondAmountA := updatedHostZoneUnbondingA.NativeTokensToUnbond.Int64() + actualStToBurnA := updatedHostZoneUnbondingA.StTokensToBurn.Int64() + s.Require().Equal(expectedHostZoneUnbondAmountA, actualNativeAmountA, "host zone unbonding native amount A") + s.Require().Equal(expectedHostZoneUnbondAmountA, actualNativeToUnbondAmountA, "host zone unbonding amount to unbond A") + s.Require().Equal(expectedStToBurnAmountA, actualStToBurnA, "host zone unbonding amount to burn A") + + updatedHostZoneUnbondingB, found := s.App.RecordsKeeper.GetHostZoneUnbondingByChainId(s.Ctx, epochNumberB, chainB) + s.Require().True(found, "host zone unbonding record for %s should have been found", chainB) + + actualNativeAmountB := updatedHostZoneUnbondingB.NativeTokenAmount.Int64() + actualNativeToUnbondAmountB := updatedHostZoneUnbondingB.NativeTokensToUnbond.Int64() + actualStToBurnB := updatedHostZoneUnbondingB.StTokensToBurn.Int64() + s.Require().Equal(expectedHostZoneUnbondAmountB, actualNativeAmountB, "host zone unbonding native amount B") + s.Require().Equal(expectedHostZoneUnbondAmountB, actualNativeToUnbondAmountB, "host zone unbonding amount to unbond B") + s.Require().Equal(expectedStToBurnAmountB, actualStToBurnB, "host zone unbonding amount to burn B") + + // Confirm all user redemption records were updated + for id, expectedNativeAmount := range expectedUserNativeAmounts { + record, found := s.App.RecordsKeeper.GetUserRedemptionRecord(s.Ctx, id) + s.Require().True(found, "user redemption record for %s should have been found", id) + s.Require().Equal(expectedNativeAmount, record.NativeTokenAmount, "user redemption record %s native amount", id) + } + + // Confirm the returned map also has the updated values + returnedNativeAmountA := refreshedEpochToHostZoneMapA[epochNumberA].NativeTokensToUnbond.Int64() + returnedNativeAmountB := refreshedEpochToHostZoneMapB[epochNumberB].NativeTokensToUnbond.Int64() + s.Require().Equal(expectedHostZoneUnbondAmountA, returnedNativeAmountA, "returned map native amount A") + s.Require().Equal(expectedHostZoneUnbondAmountB, returnedNativeAmountB, "returned map native amount B") + + // Remove one of the host zones and confirm it errors + s.App.StakeibcKeeper.RemoveHostZone(s.Ctx, chainA) + _, err = s.App.StakeibcKeeper.RefreshUnbondingNativeTokenAmounts(s.Ctx, chainA, epochToHostZoneMap) + s.Require().ErrorContains(err, "host zone not found") +} + +func (s *KeeperTestSuite) TestGetValidatorUnbondCapacity() { + // Start with the expected returned list of validator capacities + expectedUnbondCapacity := []keeper.ValidatorUnbondCapacity{ + { + ValidatorAddress: "valA", + CurrentDelegation: sdkmath.NewInt(50), + BalancedDelegation: sdkmath.NewInt(0), + Capacity: sdkmath.NewInt(50), + }, + { + ValidatorAddress: "valB", + CurrentDelegation: sdkmath.NewInt(200), + BalancedDelegation: sdkmath.NewInt(5), + Capacity: sdkmath.NewInt(195), + }, + { + ValidatorAddress: "valC", + CurrentDelegation: sdkmath.NewInt(1089), + BalancedDelegation: sdkmath.NewInt(1000), + Capacity: sdkmath.NewInt(89), + }, + } + + // Build list of input validators and map of balanced delegations from expected list + validators := []*types.Validator{} + balancedDelegations := map[string]sdkmath.Int{} + for _, validatorCapacity := range expectedUnbondCapacity { + validators = append(validators, &types.Validator{ + Address: validatorCapacity.ValidatorAddress, + Delegation: validatorCapacity.CurrentDelegation, + }) + balancedDelegations[validatorCapacity.ValidatorAddress] = validatorCapacity.BalancedDelegation + } + + // Add validators with no capacity - none of these should be in the returned list + deficits := []int64{0, 10, 50} + valAddresses := []string{"valD", "valE", "valF"} + for i, deficit := range deficits { + address := valAddresses[i] + + // the delegation amount is arbitrary here + // all that mattesr is that it's less than the balance delegation + currentDelegation := sdkmath.NewInt(50) + balancedDelegation := currentDelegation.Add(sdkmath.NewInt(deficit)) + + validators = append(validators, &types.Validator{ + Address: address, + Delegation: currentDelegation, + }) + balancedDelegations[address] = balancedDelegation + } + + // Check capacity matches expectations + actualUnbondCapacity := s.App.StakeibcKeeper.GetValidatorUnbondCapacity(s.Ctx, validators, balancedDelegations) + s.Require().Len(actualUnbondCapacity, len(expectedUnbondCapacity), "number of expected unbondings") + + for i, expected := range expectedUnbondCapacity { + address := expected.ValidatorAddress + actual := actualUnbondCapacity[i] + s.Require().Equal(expected.ValidatorAddress, actual.ValidatorAddress, "address for %s", address) + s.Require().Equal(expected.CurrentDelegation.Int64(), actual.CurrentDelegation.Int64(), "current for %s", address) + s.Require().Equal(expected.BalancedDelegation.Int64(), actual.BalancedDelegation.Int64(), "balanced for %s", address) + s.Require().Equal(expected.Capacity.Int64(), actual.Capacity.Int64(), "capacity for %s", address) + } +} + +func (s *KeeperTestSuite) TestSortUnbondingCapacityByPriority() { + // First we define what the ideal list will look like after sorting + expectedSortedCapacities := []keeper.ValidatorUnbondCapacity{ + // Zero-weight validator's + { + // (1) Ratio: 0, Capacity: 100 + ValidatorAddress: "valE", + BalancedDelegation: sdkmath.NewInt(0), + CurrentDelegation: sdkmath.NewInt(100), // ratio = 0/100 + Capacity: sdkmath.NewInt(100), + }, + { + // (2) Ratio: 0, Capacity: 25 + ValidatorAddress: "valC", + BalancedDelegation: sdkmath.NewInt(0), + CurrentDelegation: sdkmath.NewInt(25), // ratio = 0/25 + Capacity: sdkmath.NewInt(25), + }, + { + // (3) Ratio: 0, Capacity: 25 + // Same ratio and capacity as above but name is tie breaker + ValidatorAddress: "valD", + BalancedDelegation: sdkmath.NewInt(0), + CurrentDelegation: sdkmath.NewInt(25), // ratio = 0/25 + Capacity: sdkmath.NewInt(25), + }, + // Non-zero-weight validator's + { + // (4) Ratio: 0.1 + ValidatorAddress: "valB", + BalancedDelegation: sdkmath.NewInt(1), + CurrentDelegation: sdkmath.NewInt(10), // ratio = 1/10 + Capacity: sdkmath.NewInt(9), + }, + { + // (5) Ratio: 0.25 + ValidatorAddress: "valH", + BalancedDelegation: sdkmath.NewInt(250), + CurrentDelegation: sdkmath.NewInt(1000), // ratio = 250/1000 + Capacity: sdkmath.NewInt(750), + }, + { + // (6) Ratio: 0.5, Capacity: 100 + ValidatorAddress: "valF", + BalancedDelegation: sdkmath.NewInt(100), + CurrentDelegation: sdkmath.NewInt(200), // ratio = 100/200 + Capacity: sdkmath.NewInt(100), + }, + { + // (7) Ratio: 0.5, Capacity: 100 + // Same ratio and capacity as above - name is tie breaker + ValidatorAddress: "valI", + BalancedDelegation: sdkmath.NewInt(100), + CurrentDelegation: sdkmath.NewInt(200), // ratio = 100/200 + Capacity: sdkmath.NewInt(100), + }, + { + // (8) Ratio: 0.5, Capacity: 50 + // Same ratio as above but capacity is lower + ValidatorAddress: "valG", + BalancedDelegation: sdkmath.NewInt(50), + CurrentDelegation: sdkmath.NewInt(100), // ratio = 50/100 + Capacity: sdkmath.NewInt(50), + }, + { + // (9) Ratio: 0.6 + ValidatorAddress: "valA", + BalancedDelegation: sdkmath.NewInt(6), + CurrentDelegation: sdkmath.NewInt(10), // ratio = 6/10 + Capacity: sdkmath.NewInt(4), + }, + } + + // Define the shuffled ordering of the array above by just specifying + // the validator addresses an a randomized order + shuffledOrder := []string{ + "valA", + "valD", + "valG", + "valF", + "valE", + "valB", + "valH", + "valI", + "valC", + } + + // Use ordering above in combination with the data structures from the + // expected list to shuffle the expected list into a list that will be the + // input to this function + inputCapacities := []keeper.ValidatorUnbondCapacity{} + for _, shuffledValAddress := range shuffledOrder { + for _, capacity := range expectedSortedCapacities { + if capacity.ValidatorAddress == shuffledValAddress { + inputCapacities = append(inputCapacities, capacity) + } + } + } + + // Sort the list + actualSortedCapacities, err := keeper.SortUnbondingCapacityByPriority(inputCapacities) + s.Require().NoError(err) + s.Require().Len(actualSortedCapacities, len(expectedSortedCapacities), "number of capacities") + + // To make the error easier to understand, we first compare just the list of validator addresses + actualValidators := []string{} + for _, actual := range actualSortedCapacities { + actualValidators = append(actualValidators, actual.ValidatorAddress) + } + expectedValidators := []string{} + for _, expected := range expectedSortedCapacities { + expectedValidators = append(expectedValidators, expected.ValidatorAddress) + } + s.Require().Equal(expectedValidators, actualValidators, "validator order") + + // Then we'll do a sanity check on each field + // If the above passes and this fails, that likely means the test was setup improperly + for i, expected := range expectedSortedCapacities { + actual := actualSortedCapacities[i] + address := expected.ValidatorAddress + s.Require().Equal(expected.ValidatorAddress, actual.ValidatorAddress, "validator %d address", i+1) + s.Require().Equal(expected.BalancedDelegation, actual.BalancedDelegation, "validator %s balanced", address) + s.Require().Equal(expected.CurrentDelegation, actual.CurrentDelegation, "validator %s current", address) + s.Require().Equal(expected.Capacity, actual.Capacity, "validator %s capacity", address) + } +} + +func (s *KeeperTestSuite) TestGetUnbondingICAMessages() { + delegationAddress := "cosmos_DELEGATION" + + hostZone := types.HostZone{ + ChainId: HostChainId, + HostDenom: Atom, + DelegationIcaAddress: delegationAddress, + } + + validatorCapacities := []keeper.ValidatorUnbondCapacity{ + {ValidatorAddress: "val1", Capacity: sdkmath.NewInt(100)}, + {ValidatorAddress: "val2", Capacity: sdkmath.NewInt(200)}, + {ValidatorAddress: "val3", Capacity: sdkmath.NewInt(300)}, + {ValidatorAddress: "val4", Capacity: sdkmath.NewInt(400)}, + } + + testCases := []struct { + name string + totalUnbondAmount sdkmath.Int + expectedUnbondings []ValidatorUnbonding + expectedError string + }{ + { + name: "unbond val1 partially", + totalUnbondAmount: sdkmath.NewInt(50), + expectedUnbondings: []ValidatorUnbonding{ + {Validator: "val1", UnbondAmount: sdkmath.NewInt(50)}, + }, + }, + { + name: "unbond val1 fully", + totalUnbondAmount: sdkmath.NewInt(100), + expectedUnbondings: []ValidatorUnbonding{ + {Validator: "val1", UnbondAmount: sdkmath.NewInt(100)}, + }, + }, + { + name: "unbond val1 fully and val2 partially", + totalUnbondAmount: sdkmath.NewInt(200), + expectedUnbondings: []ValidatorUnbonding{ + {Validator: "val1", UnbondAmount: sdkmath.NewInt(100)}, + {Validator: "val2", UnbondAmount: sdkmath.NewInt(100)}, + }, + }, + { + name: "unbond val1 val2 fully", + totalUnbondAmount: sdkmath.NewInt(300), + expectedUnbondings: []ValidatorUnbonding{ + {Validator: "val1", UnbondAmount: sdkmath.NewInt(100)}, + {Validator: "val2", UnbondAmount: sdkmath.NewInt(200)}, + }, + }, + { + name: "unbond val1 val2 fully and val3 partially", + totalUnbondAmount: sdkmath.NewInt(450), + expectedUnbondings: []ValidatorUnbonding{ + {Validator: "val1", UnbondAmount: sdkmath.NewInt(100)}, + {Validator: "val2", UnbondAmount: sdkmath.NewInt(200)}, + {Validator: "val3", UnbondAmount: sdkmath.NewInt(150)}, + }, + }, + { + name: "unbond val1 val2 and val3 fully", + totalUnbondAmount: sdkmath.NewInt(600), + expectedUnbondings: []ValidatorUnbonding{ + {Validator: "val1", UnbondAmount: sdkmath.NewInt(100)}, + {Validator: "val2", UnbondAmount: sdkmath.NewInt(200)}, + {Validator: "val3", UnbondAmount: sdkmath.NewInt(300)}, + }, + }, + { + name: "full unbonding", + totalUnbondAmount: sdkmath.NewInt(1000), + expectedUnbondings: []ValidatorUnbonding{ + {Validator: "val1", UnbondAmount: sdkmath.NewInt(100)}, + {Validator: "val2", UnbondAmount: sdkmath.NewInt(200)}, + {Validator: "val3", UnbondAmount: sdkmath.NewInt(300)}, + {Validator: "val4", UnbondAmount: sdkmath.NewInt(400)}, + }, + }, + { + name: "insufficient delegation", + totalUnbondAmount: sdkmath.NewInt(1001), + expectedError: "unable to unbond full amount", + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + // Get the unbonding ICA messages for the test case + actualMessages, actualSplits, actualError := s.App.StakeibcKeeper.GetUnbondingICAMessages( + hostZone, + tc.totalUnbondAmount, + validatorCapacities, + ) + + // If this is an error test case, check the error message + if tc.expectedError != "" { + s.Require().ErrorContains(actualError, tc.expectedError, "error expected") + return + } + + // For the success case, check the error number of unbondings + s.Require().NoError(actualError, "no error expected when unbonding %v", tc.totalUnbondAmount) + s.Require().Len(actualMessages, len(tc.expectedUnbondings), "number of undelegate messages") + s.Require().Len(actualSplits, len(tc.expectedUnbondings), "number of validator splits") + + // Check each unbonding + for i, expected := range tc.expectedUnbondings { + valAddress := expected.Validator + actualMsg := actualMessages[i].(*stakingtypes.MsgUndelegate) + actualSplit := actualSplits[i] + + // Check the ICA message + s.Require().Equal(valAddress, actualMsg.ValidatorAddress, "ica message validator") + s.Require().Equal(delegationAddress, actualMsg.DelegatorAddress, "ica message delegator for %s", valAddress) + s.Require().Equal(Atom, actualMsg.Amount.Denom, "ica message denom for %s", valAddress) + s.Require().Equal(expected.UnbondAmount.Int64(), actualMsg.Amount.Amount.Int64(), + "ica message amount for %s", valAddress) + + // Check the callback + s.Require().Equal(expected.Validator, actualSplit.Validator, "callback validator for %s", valAddress) + s.Require().Equal(expected.UnbondAmount.Int64(), actualSplit.NativeTokenAmount.Int64(), "callback native amount %s", valAddress) + } + }) + } +} + +func (s *KeeperTestSuite) TestBatchSubmitUndelegateICAMessages() { + // The test will submit ICA's across 10 validators, in batches of 3 + // There should be 4 ICA's submitted + batchSize := 3 + numValidators := 10 + expectedNumberOfIcas := 4 + epochUnbondingRecordIds := []uint64{1} // arbitrary + + // Create the delegation ICA channel + delegationAccountOwner := types.FormatHostZoneICAOwner(HostChainId, types.ICAAccountType_DELEGATION) + delegationChannelID, delegationPortID := s.CreateICAChannel(delegationAccountOwner) + + // Create a host zone + hostZone := types.HostZone{ + ChainId: HostChainId, + ConnectionId: ibctesting.FirstConnectionID, + HostDenom: Atom, + DelegationIcaAddress: "cosmos_DELEGATION", + } + + // Build the ICA messages and callback for each validator + var validators []*types.Validator + var undelegateMsgs []proto.Message + var unbondings []*types.SplitUndelegation + for i := 0; i < numValidators; i++ { + validatorAddress := fmt.Sprintf("val%d", i) + validators = append(validators, &types.Validator{Address: validatorAddress}) + + undelegateMsgs = append(undelegateMsgs, &stakingtypes.MsgUndelegate{ + DelegatorAddress: hostZone.DelegationIcaAddress, + ValidatorAddress: validatorAddress, + Amount: sdk.NewCoin(hostZone.HostDenom, sdkmath.NewInt(100)), + }) + + unbondings = append(unbondings, &types.SplitUndelegation{ + Validator: validatorAddress, + NativeTokenAmount: sdkmath.NewInt(100), + }) + } + + // Store the validators on the host zone + hostZone.Validators = validators + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + + // Mock the epoch tracker to timeout 90% through the epoch + strideEpochTracker := types.EpochTracker{ + EpochIdentifier: epochstypes.DAY_EPOCH, + Duration: 10_000_000_000, // 10 second epochs + NextEpochStartTime: uint64(s.Coordinator.CurrentTime.UnixNano() + 30_000_000_000), // dictates timeout + } + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, strideEpochTracker) + + // Get tx seq number before the ICA was submitted to check whether an ICA was submitted + startSequence := s.MustGetNextSequenceNumber(delegationPortID, delegationChannelID) + + // Submit the unbondings + numTxsSubmitted, err := s.App.StakeibcKeeper.BatchSubmitUndelegateICAMessages( + s.Ctx, + hostZone, + epochUnbondingRecordIds, + undelegateMsgs, + unbondings, + batchSize, + ) + s.Require().NoError(err, "no error expected when submitting batches") + s.Require().Equal(numTxsSubmitted, uint64(expectedNumberOfIcas), "returned number of txs submitted") + + // Confirm the sequence number iterated by the expected number of ICAs + endSequence := s.MustGetNextSequenceNumber(delegationPortID, delegationChannelID) + s.Require().Equal(startSequence+uint64(expectedNumberOfIcas), endSequence, "expected number of ICA submissions") + + // Confirm the number of callback data's matches the expected number of ICAs + callbackData := s.App.IcacallbacksKeeper.GetAllCallbackData(s.Ctx) + s.Require().Equal(expectedNumberOfIcas, len(callbackData), "number of callback datas") + + // Remove the connection ID from the host zone and try again, it should fail + invalidHostZone := hostZone + invalidHostZone.ConnectionId = "" + _, err = s.App.StakeibcKeeper.BatchSubmitUndelegateICAMessages( + s.Ctx, + invalidHostZone, + epochUnbondingRecordIds, + undelegateMsgs, + unbondings, + batchSize, + ) + s.Require().ErrorContains(err, "unable to submit unbonding ICA") +} + +func (s *KeeperTestSuite) SetupInitiateAllHostZoneUnbondings() { + s.CreateICAChannel("GAIA.DELEGATION") + + gaiaValAddr := "cosmos_VALIDATOR" + osmoValAddr := "osmo_VALIDATOR" + gaiaDelegationAddr := "cosmos_DELEGATION" + osmoDelegationAddr := "osmo_DELEGATION" + + // define the host zone with total delegation and validators with staked amounts + gaiaValidators := []*types.Validator{ + { + Address: gaiaValAddr, + Delegation: sdkmath.NewInt(5_000_000), + Weight: uint64(10), + }, + { + Address: gaiaValAddr + "2", + Delegation: sdkmath.NewInt(3_000_000), + Weight: uint64(6), + }, + } + osmoValidators := []*types.Validator{ + { + Address: osmoValAddr, + Delegation: sdkmath.NewInt(5_000_000), + Weight: uint64(10), + }, + } + hostZones := []types.HostZone{ + { + ChainId: HostChainId, + HostDenom: Atom, + Bech32Prefix: GaiaPrefix, + UnbondingPeriod: 14, + Validators: gaiaValidators, + DelegationIcaAddress: gaiaDelegationAddr, + TotalDelegations: sdkmath.NewInt(5_000_000), + ConnectionId: ibctesting.FirstConnectionID, + RedemptionRate: sdkmath.LegacyOneDec(), + MaxMessagesPerIcaTx: 32, + }, + { + ChainId: OsmoChainId, + HostDenom: Osmo, + Bech32Prefix: OsmoPrefix, + UnbondingPeriod: 21, + Validators: osmoValidators, + DelegationIcaAddress: osmoDelegationAddr, + TotalDelegations: sdkmath.NewInt(5_000_000), + ConnectionId: ibctesting.FirstConnectionID, + RedemptionRate: sdkmath.LegacyOneDec(), + MaxMessagesPerIcaTx: 32, + }, + } + for _, hostZone := range hostZones { + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + } + + // list of epoch unbonding records + epochNumber := uint64(5) + + redemptionRecordId1 := recordtypes.UserRedemptionRecordKeyFormatter(HostChainId, epochNumber, "receiver") + redemptionRecordId2 := recordtypes.UserRedemptionRecordKeyFormatter(OsmoChainId, epochNumber, "receiver") + + epochUnbondingRecord := recordtypes.EpochUnbondingRecord{ + EpochNumber: epochNumber, + HostZoneUnbondings: []*recordtypes.HostZoneUnbonding{ + { + HostZoneId: HostChainId, + StTokenAmount: sdkmath.NewInt(1_900_000), + NativeTokenAmount: sdkmath.NewInt(2_000_000), + Denom: Atom, + Status: recordtypes.HostZoneUnbonding_UNBONDING_QUEUE, + UserRedemptionRecords: []string{redemptionRecordId1}, + }, + { + HostZoneId: OsmoChainId, + StTokenAmount: sdkmath.NewInt(2_800_000), + NativeTokenAmount: sdkmath.NewInt(3), + Denom: Osmo, + Status: recordtypes.HostZoneUnbonding_UNBONDING_QUEUE, + UserRedemptionRecords: []string{redemptionRecordId2}, + }, + }, + } + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, epochUnbondingRecord) + + s.App.RecordsKeeper.SetUserRedemptionRecord(s.Ctx, recordtypes.UserRedemptionRecord{ + Id: redemptionRecordId1, + HostZoneId: HostChainId, + EpochNumber: epochNumber, + StTokenAmount: epochUnbondingRecord.HostZoneUnbondings[0].StTokenAmount, + }) + + s.App.RecordsKeeper.SetUserRedemptionRecord(s.Ctx, recordtypes.UserRedemptionRecord{ + Id: redemptionRecordId2, + HostZoneId: OsmoChainId, + EpochNumber: epochNumber, + StTokenAmount: epochUnbondingRecord.HostZoneUnbondings[1].StTokenAmount, + }) + + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, types.EpochTracker{ + EpochIdentifier: "day", + EpochNumber: 12, + NextEpochStartTime: uint64(2661750006000000000), // arbitrary time in the future, year 2056 I believe + Duration: uint64(1000000000000), // 16 min 40 sec + }) +} + +func (s *KeeperTestSuite) TestInitiateAllHostZoneUnbondings_Successful() { + // tests that we can successful initiate a host zone unbonding for GAIA and OSMO + s.SetupInitiateAllHostZoneUnbondings() + s.App.StakeibcKeeper.InitiateAllHostZoneUnbondings(s.Ctx, 12) + + // An event should be emitted for each if they were successful + s.CheckEventValueEmitted(types.EventTypeUndelegation, types.AttributeKeyHostZone, HostChainId) + s.CheckEventValueEmitted(types.EventTypeUndelegation, types.AttributeKeyHostZone, OsmoChainId) +} + +func (s *KeeperTestSuite) TestInitiateAllHostZoneUnbondings_GaiaSuccessful() { + // Tests that if we initiate unbondings a day where only Gaia is supposed to unbond, it succeeds and Osmo is ignored + s.SetupInitiateAllHostZoneUnbondings() + s.App.StakeibcKeeper.InitiateAllHostZoneUnbondings(s.Ctx, 9) + + // An event should only be emitted for Gaia + s.CheckEventValueEmitted(types.EventTypeUndelegation, types.AttributeKeyHostZone, HostChainId) + s.CheckEventValueNotEmitted(types.EventTypeUndelegation, types.AttributeKeyHostZone, OsmoChainId) +} + +func (s *KeeperTestSuite) TestInitiateAllHostZoneUnbondings_OsmoSuccessful() { + // Tests that if we initiate unbondings a day where only Osmo is supposed to unbond, it succeeds and Gaia is ignored + s.SetupInitiateAllHostZoneUnbondings() + s.App.StakeibcKeeper.InitiateAllHostZoneUnbondings(s.Ctx, 8) + + // An event should only be emitted for Osmo + s.CheckEventValueNotEmitted(types.EventTypeUndelegation, types.AttributeKeyHostZone, HostChainId) + s.CheckEventValueEmitted(types.EventTypeUndelegation, types.AttributeKeyHostZone, OsmoChainId) +} + +func (s *KeeperTestSuite) TestInitiateAllHostZoneUnbondings_NoneSuccessful() { + // Tests that if we initiate unbondings a day where none are supposed to unbond, it works successfully + s.SetupInitiateAllHostZoneUnbondings() + s.App.StakeibcKeeper.InitiateAllHostZoneUnbondings(s.Ctx, 10) + + // No event should be emitted for either host + s.CheckEventValueNotEmitted(types.EventTypeUndelegation, types.AttributeKeyHostZone, HostChainId) + s.CheckEventValueNotEmitted(types.EventTypeUndelegation, types.AttributeKeyHostZone, OsmoChainId) +} + +func (s *KeeperTestSuite) TestInitiateAllHostZoneUnbondings_Failed() { + // Tests that if Gaia doesn't have enough delegated stake to unbond, it fails + // but Osmo does and is successful + s.SetupInitiateAllHostZoneUnbondings() + hostZone, _ := s.App.StakeibcKeeper.GetHostZone(s.Ctx, HostChainId) + hostZone.Validators = []*types.Validator{ + { + Address: "cosmos_VALIDATOR", + Delegation: sdkmath.NewInt(1_000_000), + Weight: uint64(10), + }, + } + s.App.StakeibcKeeper.SetHostZone(s.Ctx, hostZone) + hostZone, _ = s.App.StakeibcKeeper.GetHostZone(s.Ctx, HostChainId) + + s.App.StakeibcKeeper.InitiateAllHostZoneUnbondings(s.Ctx, 12) + + // An event should only be emitted for Osmo + s.CheckEventValueNotEmitted(types.EventTypeUndelegation, types.AttributeKeyHostZone, HostChainId) + s.CheckEventValueEmitted(types.EventTypeUndelegation, types.AttributeKeyHostZone, OsmoChainId) +} diff --git a/x/stakeibc/keeper/validator.go b/x/stakeibc/keeper/validator.go new file mode 100644 index 00000000000..03c35c0839d --- /dev/null +++ b/x/stakeibc/keeper/validator.go @@ -0,0 +1,275 @@ +package keeper + +import ( + "errors" + "fmt" + "math" + + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/utils" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// Get a validator and its index from a list of validators, by address +func GetValidatorFromAddress(validators []*types.Validator, address string) (val types.Validator, index int64, found bool) { + for i, v := range validators { + if v.Address == address { + return *v, int64(i), true + } + } + return types.Validator{}, 0, false +} + +// Appends a validator to host zone (if the host zone is not already at capacity) +// If the validator is added through governance, the weight is equal to the minimum weight across the set +// If the validator is added through an admin transactions, the weight is specified in the message +func (k Keeper) AddValidatorToHostZone(ctx sdk.Context, chainId string, validator types.Validator, fromGovernance bool) error { + // Get the corresponding host zone + hostZone, found := k.GetHostZone(ctx, chainId) + if !found { + return errorsmod.Wrapf(types.ErrHostZoneNotFound, "Host Zone (%s) not found", chainId) + } + + // Check that we don't already have this validator + // Grab the minimum weight in the process (to assign to validator's added through governance) + var minWeight uint64 = math.MaxUint64 + for _, existingValidator := range hostZone.Validators { + if existingValidator.Address == validator.Address { + return errorsmod.Wrapf(types.ErrValidatorAlreadyExists, "Validator address (%s) already exists on Host Zone (%s)", validator.Address, chainId) + } + if existingValidator.Name == validator.Name { + return errorsmod.Wrapf(types.ErrValidatorAlreadyExists, "Validator name (%s) already exists on Host Zone (%s)", validator.Name, chainId) + } + // Store the min weight to assign to new validator added through governance (ignore zero-weight validators) + if existingValidator.Weight < minWeight && existingValidator.Weight > 0 { + minWeight = existingValidator.Weight + } + } + + // If the validator was added via governance, set the weight to the min validator weight of the host zone + valWeight := validator.Weight + if fromGovernance { + valWeight = minWeight + } + + // Determine the slash query checkpoint for LSM liquid stakes + checkpoint := k.GetUpdatedSlashQueryCheckpoint(ctx, hostZone.TotalDelegations) + + // Finally, add the validator to the host + hostZone.Validators = append(hostZone.Validators, &types.Validator{ + Name: validator.Name, + Address: validator.Address, + Weight: valWeight, + Delegation: sdkmath.ZeroInt(), + SlashQueryProgressTracker: sdkmath.ZeroInt(), + SlashQueryCheckpoint: checkpoint, + SharesToTokensRate: sdkmath.LegacyOneDec(), + DelegationChangesInProgress: 0, + SlashQueryInProgress: false, + }) + + k.SetHostZone(ctx, hostZone) + + return nil +} + +// Removes a validator from a host zone +// The validator must be zero-weight and have no delegations in order to be removed +// There must also be no LSMTokenDeposits in progress since this would update the delegation on completion +func (k Keeper) RemoveValidatorFromHostZone(ctx sdk.Context, chainId string, validatorAddress string) error { + hostZone, found := k.GetHostZone(ctx, chainId) + if !found { + return errorsmod.Wrapf(types.ErrHostZoneNotFound, "host zone %s not found", chainId) + } + + // Check for LSMTokenDeposit records with this specific validator address + lsmTokenDeposits := k.RecordsKeeper.GetAllLSMTokenDeposit(ctx) + for _, lsmTokenDeposit := range lsmTokenDeposits { + if lsmTokenDeposit.ValidatorAddress == validatorAddress { + return errorsmod.Wrapf(types.ErrUnableToRemoveValidator, "Validator (%s) still has at least one LSMTokenDeposit (%+v)", validatorAddress, lsmTokenDeposit) + } + } + + for i, val := range hostZone.Validators { + if val.GetAddress() == validatorAddress { + if val.Delegation.IsZero() && val.Weight == 0 { + hostZone.Validators = append(hostZone.Validators[:i], hostZone.Validators[i+1:]...) + k.SetHostZone(ctx, hostZone) + return nil + } + errMsg := fmt.Sprintf("Validator (%s) has non-zero delegation (%v) or weight (%d)", validatorAddress, val.Delegation, val.Weight) + k.Logger(ctx).Error(errMsg) + return errors.New(errMsg) + } + } + return errorsmod.Wrapf(types.ErrValidatorNotFound, "Validator address (%s) not found on host zone (%s)", validatorAddress, chainId) +} + +// Updates a validator's individual delegation, and the corresponding total delegation on the host zone +// Note: This modifies the original host zone struct. The calling function must Set this host zone +// for changes to persist +func (k Keeper) AddDelegationToValidator( + ctx sdk.Context, + hostZone *types.HostZone, + validatorAddress string, + amount sdkmath.Int, + callbackId string, +) error { + for _, validator := range hostZone.Validators { + if validator.Address == validatorAddress { + k.Logger(ctx).Info(utils.LogICACallbackWithHostZone(hostZone.ChainId, callbackId, + " Validator %s, Current Delegation: %v, Delegation Change: %v", validator.Address, validator.Delegation, amount)) + + // If the delegation change is negative, make sure it wont cause the delegation to fall below zero + if amount.IsNegative() { + if amount.Abs().GT(validator.Delegation) { + return errorsmod.Wrapf(types.ErrValidatorDelegationChg, + "Delegation change (%v) is greater than validator (%s) delegation %v", + amount.Abs(), validatorAddress, validator.Delegation) + } + if amount.Abs().GT(hostZone.TotalDelegations) { + return errorsmod.Wrapf(types.ErrValidatorDelegationChg, + "Delegation change (%v) is greater than total delegation amount on host %s (%v)", + amount.Abs(), hostZone.ChainId, hostZone.TotalDelegations) + } + } + + validator.Delegation = validator.Delegation.Add(amount) + hostZone.TotalDelegations = hostZone.TotalDelegations.Add(amount) + + return nil + } + } + + return errorsmod.Wrapf(types.ErrValidatorNotFound, + "Could not find validator %s on host zone %s", validatorAddress, hostZone.ChainId) +} + +// Sum the total weights across each validator for a host zone +func (k Keeper) GetTotalValidatorWeight(validators []types.Validator) uint64 { + totalWeight := uint64(0) + for _, validator := range validators { + totalWeight += validator.Weight + } + return totalWeight +} + +// Increments the validators slash query progress tracker +func (k Keeper) IncrementValidatorSlashQueryProgress( + ctx sdk.Context, + chainId string, + validatorAddress string, + amount sdkmath.Int, +) error { + hostZone, found := k.GetHostZone(ctx, chainId) + if !found { + return types.ErrHostZoneNotFound + } + + validator, valIndex, found := GetValidatorFromAddress(hostZone.Validators, validatorAddress) + if !found { + return types.ErrValidatorNotFound + } + + // Increment the progress tracker + oldProgress := validator.SlashQueryProgressTracker + newProgress := validator.SlashQueryProgressTracker.Add(amount) + validator.SlashQueryProgressTracker = newProgress + + // If the checkpoint is zero, it implies the TVL was 0 last time it was set, and we should + // update it here + // If the checkpoint is non-zero, only update it if it was just breached + shouldUpdateCheckpoint := true + if !validator.SlashQueryCheckpoint.IsZero() { + oldInterval := oldProgress.Quo(validator.SlashQueryCheckpoint) + newInterval := newProgress.Quo(validator.SlashQueryCheckpoint) + shouldUpdateCheckpoint = oldInterval.LT(newInterval) + } + + // Optionally re-calculate the checkpoint + // Threshold of 1% means once 1% of TVL has been breached, the query is issued + if shouldUpdateCheckpoint { + validator.SlashQueryCheckpoint = k.GetUpdatedSlashQueryCheckpoint(ctx, hostZone.TotalDelegations) + } + + hostZone.Validators[valIndex] = &validator + k.SetHostZone(ctx, hostZone) + + return nil +} + +// Increments the number of validator delegation changes in progress by 1 +// Note: This modifies the original host zone struct. The calling function must Set this host zone +// for changes to persist +func (k Keeper) IncrementValidatorDelegationChangesInProgress(hostZone *types.HostZone, validatorAddress string) error { + validator, valIndex, found := GetValidatorFromAddress(hostZone.Validators, validatorAddress) + if !found { + return errorsmod.Wrapf(types.ErrValidatorNotFound, "validator %s not found", validatorAddress) + } + validator.DelegationChangesInProgress += 1 + hostZone.Validators[valIndex] = &validator + return nil +} + +// Decrements the number of validator delegation changes in progress by 1 +// Note: This modifies the original host zone struct. The calling function must Set this host zone +// for changes to persist +func (k Keeper) DecrementValidatorDelegationChangesInProgress(hostZone *types.HostZone, validatorAddress string) error { + validator, valIndex, found := GetValidatorFromAddress(hostZone.Validators, validatorAddress) + if !found { + return errorsmod.Wrapf(types.ErrValidatorNotFound, "validator %s not found", validatorAddress) + } + if validator.DelegationChangesInProgress == 0 { + return errorsmod.Wrapf(types.ErrInvalidValidatorDelegationUpdates, + "cannot decrement the number of delegation updates if the validator has 0 updates in progress") + } + validator.DelegationChangesInProgress -= 1 + hostZone.Validators[valIndex] = &validator + return nil +} + +// Checks if any validator's portion of the weight is greater than the cap +func (k Keeper) CheckValidatorWeightsBelowCap(ctx sdk.Context, chainId string) error { + hostZone, found := k.GetHostZone(ctx, chainId) + if !found { + return types.ErrHostZoneNotFound.Wrapf("host zone %s not found", chainId) + } + validators := hostZone.Validators + + // If there's only a few validators, don't enforce this yet + if len(validators) < MinValidatorsBeforeWeightCapCheck { + return nil + } + + // The weight cap in params is an int representing a percentage (e.g. 10 is 10%) + params := k.GetParams(ctx) + validatorWeightCap := float64(params.ValidatorWeightCap) + + // Store a map of each validator weight, as well as the total + totalWeight := float64(0) + weightsByValidator := map[string]float64{} + for _, validator := range validators { + weightsByValidator[validator.Address] = float64(validator.Weight) + totalWeight += float64(validator.Weight) + } + + // If the total validator weights are 0, exit prematurely + if totalWeight == 0 { + return nil + } + + // Check if any validator exceeds the cap + for _, address := range utils.StringMapKeys(weightsByValidator) { + weightPercentage := weightsByValidator[address] / totalWeight * 100 + if weightPercentage > validatorWeightCap { + return errorsmod.Wrapf(types.ErrValidatorExceedsWeightCap, + "validator %s exceeds weight cap, has %v%% of the total weight when the cap is %v%%", + address, weightPercentage, validatorWeightCap) + } + } + + return nil +} diff --git a/x/stakeibc/keeper/validator_test.go b/x/stakeibc/keeper/validator_test.go new file mode 100644 index 00000000000..d5f42d1071d --- /dev/null +++ b/x/stakeibc/keeper/validator_test.go @@ -0,0 +1,20 @@ +package keeper_test + +import ( + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func (s *KeeperTestSuite) TestGetTotalValidatorWeight() { + validators := []types.Validator{ + {Address: "val1", Weight: 1}, + {Address: "val2", Weight: 2}, + {Address: "val3", Weight: 3}, + {Address: "val4", Weight: 4}, + {Address: "val5", Weight: 5}, + } + expectedTotalWeights := int64(1 + 2 + 3 + 4 + 5) + + actualTotalWeight := s.App.StakeibcKeeper.GetTotalValidatorWeight(validators) + + s.Require().Equal(expectedTotalWeights, int64(actualTotalWeight)) +} diff --git a/x/stakeibc/migrations/v2/convert.go b/x/stakeibc/migrations/v2/convert.go new file mode 100644 index 00000000000..58bcf90db89 --- /dev/null +++ b/x/stakeibc/migrations/v2/convert.go @@ -0,0 +1,65 @@ +package v2 + +import ( + sdkmath "cosmossdk.io/math" + + oldstakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/migrations/v2/types" + stakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/migrations/v3/types" +) + +func convertToNewValidator(oldValidator oldstakeibctypes.Validator) stakeibctypes.Validator { + return stakeibctypes.Validator{ + Name: oldValidator.Name, + Address: oldValidator.Address, + DelegationAmt: sdkmath.NewIntFromUint64(oldValidator.DelegationAmt), + Weight: oldValidator.Weight, + InternalExchangeRate: (*stakeibctypes.ValidatorExchangeRate)(oldValidator.InternalExchangeRate), + } +} + +func convertToNewICAAccount(oldAccount *oldstakeibctypes.ICAAccount) *stakeibctypes.ICAAccount { + if oldAccount == nil { + return nil + } + return &stakeibctypes.ICAAccount{Address: oldAccount.Address, Target: stakeibctypes.ICAAccountType(oldAccount.Target)} +} + +func convertToNewHostZone(oldHostZone oldstakeibctypes.HostZone) stakeibctypes.HostZone { + var validators []*stakeibctypes.Validator + var blacklistValidator []*stakeibctypes.Validator + + for _, oldValidator := range oldHostZone.Validators { + newValidator := convertToNewValidator(*oldValidator) + validators = append(validators, &newValidator) + } + + for _, oldValidator := range oldHostZone.BlacklistedValidators { + newValidator := convertToNewValidator(*oldValidator) + blacklistValidator = append(blacklistValidator, &newValidator) + } + + newWithdrawalAccount := convertToNewICAAccount(oldHostZone.WithdrawalAccount) + newFeeAccount := convertToNewICAAccount(oldHostZone.FeeAccount) + newDelegationAccount := convertToNewICAAccount(oldHostZone.DelegationAccount) + newRedemptionAccount := convertToNewICAAccount(oldHostZone.RedemptionAccount) + + return stakeibctypes.HostZone{ + ChainId: oldHostZone.ChainId, + ConnectionId: oldHostZone.ConnectionId, + Bech32Prefix: oldHostZone.Bech32Prefix, + TransferChannelId: oldHostZone.TransferChannelId, + Validators: validators, + BlacklistedValidators: blacklistValidator, + WithdrawalAccount: newWithdrawalAccount, + FeeAccount: newFeeAccount, + DelegationAccount: newDelegationAccount, + RedemptionAccount: newRedemptionAccount, + IbcDenom: oldHostZone.IbcDenom, + HostDenom: oldHostZone.HostDenom, + LastRedemptionRate: oldHostZone.LastRedemptionRate, + RedemptionRate: oldHostZone.RedemptionRate, + UnbondingFrequency: oldHostZone.UnbondingFrequency, + StakedBal: sdkmath.NewIntFromUint64(oldHostZone.StakedBal), + Address: oldHostZone.Address, + } +} diff --git a/x/stakeibc/migrations/v2/convert_test.go b/x/stakeibc/migrations/v2/convert_test.go new file mode 100644 index 00000000000..ad9a9f5b6e7 --- /dev/null +++ b/x/stakeibc/migrations/v2/convert_test.go @@ -0,0 +1,147 @@ +package v2 + +import ( + "testing" + + sdkmath "cosmossdk.io/math" + + "github.com/stretchr/testify/require" + + oldstakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/migrations/v2/types" + stakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/migrations/v3/types" +) + +func TestConvertToNewValidator(t *testing.T) { + name := "name" + address := "address" + commmissionRate := uint64(2) + weight := uint64(3) + epochNumber := uint64(4) + tokensToShares := sdkmath.LegacyNewDec(5) + + // Only the DelegationAmt field of the Validator should change + oldValidator := oldstakeibctypes.Validator{ + Name: name, + Address: address, + Status: oldstakeibctypes.Validator_ACTIVE, + CommissionRate: commmissionRate, + DelegationAmt: uint64(1), + Weight: weight, + InternalExchangeRate: &oldstakeibctypes.ValidatorExchangeRate{ + InternalTokensToSharesRate: tokensToShares, + EpochNumber: epochNumber, + }, + } + expectedNewValidator := stakeibctypes.Validator{ + Name: name, + Address: address, + DelegationAmt: sdkmath.NewInt(1), + Weight: weight, + InternalExchangeRate: &stakeibctypes.ValidatorExchangeRate{ + InternalTokensToSharesRate: tokensToShares, + EpochNumber: epochNumber, + }, + } + + actualNewValidator := convertToNewValidator(oldValidator) + require.Equal(t, expectedNewValidator, actualNewValidator) +} + +func TestConvertToNewICAAccount(t *testing.T) { + oldAccount := oldstakeibctypes.ICAAccount{Address: "address", Target: oldstakeibctypes.ICAAccountType_FEE} + expectedNewAccount := stakeibctypes.ICAAccount{Address: "address", Target: stakeibctypes.ICAAccountType_FEE} + actualNewAccount := convertToNewICAAccount(&oldAccount) + require.Equal(t, expectedNewAccount, *actualNewAccount) +} + +func TestConvertToNewICAAccount_Nil(t *testing.T) { + actualNewAccount := convertToNewICAAccount(nil) + require.Nil(t, actualNewAccount) +} + +func TestConvertToNewHostZone(t *testing.T) { + chainId := "chain" + connectionId := "connection" + bechPrefix := "bech" + channelId := "channel" + valAddress := "val" + blacklistedValAddress := "black_val" + withdrawalAddress := "withdrawal" + feeAddress := "fee" + delegationAddress := "delegation" + redemptionAddress := "redemption" + ibcDenom := "ibc" + hostDenom := "host" + redemptionRate := sdkmath.LegacyNewDec(1) + lastRedemptionRate := sdkmath.LegacyNewDec(2) + unbondingFrequency := uint64(3) + hostAddress := "address" + + // The stakedBal field and validators get updated on the host zone + oldHostZone := oldstakeibctypes.HostZone{ + ChainId: chainId, + ConnectionId: connectionId, + Bech32Prefix: bechPrefix, + TransferChannelId: channelId, + Validators: []*oldstakeibctypes.Validator{ + {Address: valAddress, DelegationAmt: uint64(1)}, + }, + BlacklistedValidators: []*oldstakeibctypes.Validator{ + {Address: blacklistedValAddress, DelegationAmt: uint64(2)}, + }, + WithdrawalAccount: &oldstakeibctypes.ICAAccount{ + Address: withdrawalAddress, Target: oldstakeibctypes.ICAAccountType_WITHDRAWAL, + }, + FeeAccount: &oldstakeibctypes.ICAAccount{ + Address: feeAddress, Target: oldstakeibctypes.ICAAccountType_FEE, + }, + DelegationAccount: &oldstakeibctypes.ICAAccount{ + Address: delegationAddress, Target: oldstakeibctypes.ICAAccountType_DELEGATION, + }, + RedemptionAccount: &oldstakeibctypes.ICAAccount{ + Address: redemptionAddress, Target: oldstakeibctypes.ICAAccountType_REDEMPTION, + }, + IbcDenom: ibcDenom, + HostDenom: hostDenom, + RedemptionRate: redemptionRate, + LastRedemptionRate: lastRedemptionRate, + UnbondingFrequency: unbondingFrequency, + StakedBal: uint64(3), + Address: hostAddress, + } + + expectedNewHostZone := stakeibctypes.HostZone{ + ChainId: chainId, + ConnectionId: connectionId, + Bech32Prefix: bechPrefix, + TransferChannelId: channelId, + Validators: []*stakeibctypes.Validator{ + {Address: valAddress, DelegationAmt: sdkmath.NewInt(1)}, + }, + BlacklistedValidators: []*stakeibctypes.Validator{ + {Address: blacklistedValAddress, DelegationAmt: sdkmath.NewInt(2)}, + }, + WithdrawalAccount: &stakeibctypes.ICAAccount{ + Address: withdrawalAddress, Target: stakeibctypes.ICAAccountType_WITHDRAWAL, + }, + FeeAccount: &stakeibctypes.ICAAccount{ + Address: feeAddress, Target: stakeibctypes.ICAAccountType_FEE, + }, + DelegationAccount: &stakeibctypes.ICAAccount{ + Address: delegationAddress, Target: stakeibctypes.ICAAccountType_DELEGATION, + }, + RedemptionAccount: &stakeibctypes.ICAAccount{ + Address: redemptionAddress, Target: stakeibctypes.ICAAccountType_REDEMPTION, + }, + IbcDenom: ibcDenom, + HostDenom: hostDenom, + RedemptionRate: redemptionRate, + LastRedemptionRate: lastRedemptionRate, + UnbondingFrequency: unbondingFrequency, + StakedBal: sdkmath.NewInt(3), + Address: hostAddress, + } + + actualNewHostZone := convertToNewHostZone(oldHostZone) + require.Equal(t, expectedNewHostZone, actualNewHostZone) +} diff --git a/x/stakeibc/migrations/v2/migrations.go b/x/stakeibc/migrations/v2/migrations.go new file mode 100644 index 00000000000..2d4df819b40 --- /dev/null +++ b/x/stakeibc/migrations/v2/migrations.go @@ -0,0 +1,46 @@ +package v2 + +import ( + "cosmossdk.io/store/prefix" + storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/codec" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + + oldstakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/migrations/v2/types" + stakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func migrateHostZone(store storetypes.KVStore, cdc codec.BinaryCodec) error { + stakeibcStore := prefix.NewStore(store, []byte(stakeibctypes.HostZoneKey)) + + iterator := stakeibcStore.Iterator(nil, nil) + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + // Deserialize using the old type + var oldHostZone oldstakeibctypes.HostZone + err := cdc.Unmarshal(iterator.Value(), &oldHostZone) + if err != nil { + return errorsmod.Wrapf(err, "unable to unmarshal host zone (%v) using old data type", iterator.Key()) + } + + // Convert and serialize using the new type + newHostZone := convertToNewHostZone(oldHostZone) + newHostZoneBz, err := cdc.Marshal(&newHostZone) + if err != nil { + return errorsmod.Wrapf(err, "unable to marshal host zone (%v) using new data type", iterator.Key()) + } + + // Store new type + stakeibcStore.Set(iterator.Key(), newHostZoneBz) + } + + return nil +} + +func MigrateStore(ctx sdk.Context, storeKey storetypes.StoreKey, cdc codec.BinaryCodec) error { + store := ctx.KVStore(storeKey) + return migrateHostZone(store, cdc) +} diff --git a/x/stakeibc/migrations/v2/types/callbacks.pb.go b/x/stakeibc/migrations/v2/types/callbacks.pb.go new file mode 100644 index 00000000000..a17458ac27a --- /dev/null +++ b/x/stakeibc/migrations/v2/types/callbacks.pb.go @@ -0,0 +1,2238 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/stakeibc/callbacks.proto + +package types + +import ( + fmt "fmt" + types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/gogo/protobuf/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// ---------------------- Delegation Callbacks ---------------------- // +type SplitDelegation struct { + Validator string `protobuf:"bytes,1,opt,name=validator,proto3" json:"validator,omitempty"` + Amount uint64 `protobuf:"varint,2,opt,name=amount,proto3" json:"amount,omitempty"` +} + +func (m *SplitDelegation) Reset() { *m = SplitDelegation{} } +func (m *SplitDelegation) String() string { return proto.CompactTextString(m) } +func (*SplitDelegation) ProtoMessage() {} +func (*SplitDelegation) Descriptor() ([]byte, []int) { + return fileDescriptor_f41c99b09b96a5ac, []int{0} +} +func (m *SplitDelegation) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SplitDelegation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_SplitDelegation.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *SplitDelegation) XXX_Merge(src proto.Message) { + xxx_messageInfo_SplitDelegation.Merge(m, src) +} +func (m *SplitDelegation) XXX_Size() int { + return m.Size() +} +func (m *SplitDelegation) XXX_DiscardUnknown() { + xxx_messageInfo_SplitDelegation.DiscardUnknown(m) +} + +var xxx_messageInfo_SplitDelegation proto.InternalMessageInfo + +func (m *SplitDelegation) GetValidator() string { + if m != nil { + return m.Validator + } + return "" +} + +func (m *SplitDelegation) GetAmount() uint64 { + if m != nil { + return m.Amount + } + return 0 +} + +type DelegateCallback struct { + HostZoneId string `protobuf:"bytes,1,opt,name=host_zone_id,json=hostZoneId,proto3" json:"host_zone_id,omitempty"` + DepositRecordId uint64 `protobuf:"varint,2,opt,name=deposit_record_id,json=depositRecordId,proto3" json:"deposit_record_id,omitempty"` + SplitDelegations []*SplitDelegation `protobuf:"bytes,3,rep,name=split_delegations,json=splitDelegations,proto3" json:"split_delegations,omitempty"` +} + +func (m *DelegateCallback) Reset() { *m = DelegateCallback{} } +func (m *DelegateCallback) String() string { return proto.CompactTextString(m) } +func (*DelegateCallback) ProtoMessage() {} +func (*DelegateCallback) Descriptor() ([]byte, []int) { + return fileDescriptor_f41c99b09b96a5ac, []int{1} +} +func (m *DelegateCallback) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DelegateCallback) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DelegateCallback.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *DelegateCallback) XXX_Merge(src proto.Message) { + xxx_messageInfo_DelegateCallback.Merge(m, src) +} +func (m *DelegateCallback) XXX_Size() int { + return m.Size() +} +func (m *DelegateCallback) XXX_DiscardUnknown() { + xxx_messageInfo_DelegateCallback.DiscardUnknown(m) +} + +var xxx_messageInfo_DelegateCallback proto.InternalMessageInfo + +func (m *DelegateCallback) GetHostZoneId() string { + if m != nil { + return m.HostZoneId + } + return "" +} + +func (m *DelegateCallback) GetDepositRecordId() uint64 { + if m != nil { + return m.DepositRecordId + } + return 0 +} + +func (m *DelegateCallback) GetSplitDelegations() []*SplitDelegation { + if m != nil { + return m.SplitDelegations + } + return nil +} + +type ClaimCallback struct { + UserRedemptionRecordId string `protobuf:"bytes,1,opt,name=user_redemption_record_id,json=userRedemptionRecordId,proto3" json:"user_redemption_record_id,omitempty"` + ChainId string `protobuf:"bytes,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + EpochNumber uint64 `protobuf:"varint,3,opt,name=epoch_number,json=epochNumber,proto3" json:"epoch_number,omitempty"` +} + +func (m *ClaimCallback) Reset() { *m = ClaimCallback{} } +func (m *ClaimCallback) String() string { return proto.CompactTextString(m) } +func (*ClaimCallback) ProtoMessage() {} +func (*ClaimCallback) Descriptor() ([]byte, []int) { + return fileDescriptor_f41c99b09b96a5ac, []int{2} +} +func (m *ClaimCallback) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClaimCallback) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ClaimCallback.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ClaimCallback) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClaimCallback.Merge(m, src) +} +func (m *ClaimCallback) XXX_Size() int { + return m.Size() +} +func (m *ClaimCallback) XXX_DiscardUnknown() { + xxx_messageInfo_ClaimCallback.DiscardUnknown(m) +} + +var xxx_messageInfo_ClaimCallback proto.InternalMessageInfo + +func (m *ClaimCallback) GetUserRedemptionRecordId() string { + if m != nil { + return m.UserRedemptionRecordId + } + return "" +} + +func (m *ClaimCallback) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +func (m *ClaimCallback) GetEpochNumber() uint64 { + if m != nil { + return m.EpochNumber + } + return 0 +} + +// ---------------------- Reinvest Callback ---------------------- // +type ReinvestCallback struct { + ReinvestAmount types.Coin `protobuf:"bytes,1,opt,name=reinvest_amount,json=reinvestAmount,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coin" json:"reinvest_amount"` + HostZoneId string `protobuf:"bytes,3,opt,name=host_zone_id,json=hostZoneId,proto3" json:"host_zone_id,omitempty"` +} + +func (m *ReinvestCallback) Reset() { *m = ReinvestCallback{} } +func (m *ReinvestCallback) String() string { return proto.CompactTextString(m) } +func (*ReinvestCallback) ProtoMessage() {} +func (*ReinvestCallback) Descriptor() ([]byte, []int) { + return fileDescriptor_f41c99b09b96a5ac, []int{3} +} +func (m *ReinvestCallback) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ReinvestCallback) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ReinvestCallback.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ReinvestCallback) XXX_Merge(src proto.Message) { + xxx_messageInfo_ReinvestCallback.Merge(m, src) +} +func (m *ReinvestCallback) XXX_Size() int { + return m.Size() +} +func (m *ReinvestCallback) XXX_DiscardUnknown() { + xxx_messageInfo_ReinvestCallback.DiscardUnknown(m) +} + +var xxx_messageInfo_ReinvestCallback proto.InternalMessageInfo + +func (m *ReinvestCallback) GetReinvestAmount() types.Coin { + if m != nil { + return m.ReinvestAmount + } + return types.Coin{} +} + +func (m *ReinvestCallback) GetHostZoneId() string { + if m != nil { + return m.HostZoneId + } + return "" +} + +// ---------------------- Undelegation Callbacks ---------------------- // +type UndelegateCallback struct { + HostZoneId string `protobuf:"bytes,1,opt,name=host_zone_id,json=hostZoneId,proto3" json:"host_zone_id,omitempty"` + SplitDelegations []*SplitDelegation `protobuf:"bytes,2,rep,name=split_delegations,json=splitDelegations,proto3" json:"split_delegations,omitempty"` + EpochUnbondingRecordIds []uint64 `protobuf:"varint,3,rep,packed,name=epoch_unbonding_record_ids,json=epochUnbondingRecordIds,proto3" json:"epoch_unbonding_record_ids,omitempty"` +} + +func (m *UndelegateCallback) Reset() { *m = UndelegateCallback{} } +func (m *UndelegateCallback) String() string { return proto.CompactTextString(m) } +func (*UndelegateCallback) ProtoMessage() {} +func (*UndelegateCallback) Descriptor() ([]byte, []int) { + return fileDescriptor_f41c99b09b96a5ac, []int{4} +} +func (m *UndelegateCallback) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *UndelegateCallback) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_UndelegateCallback.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *UndelegateCallback) XXX_Merge(src proto.Message) { + xxx_messageInfo_UndelegateCallback.Merge(m, src) +} +func (m *UndelegateCallback) XXX_Size() int { + return m.Size() +} +func (m *UndelegateCallback) XXX_DiscardUnknown() { + xxx_messageInfo_UndelegateCallback.DiscardUnknown(m) +} + +var xxx_messageInfo_UndelegateCallback proto.InternalMessageInfo + +func (m *UndelegateCallback) GetHostZoneId() string { + if m != nil { + return m.HostZoneId + } + return "" +} + +func (m *UndelegateCallback) GetSplitDelegations() []*SplitDelegation { + if m != nil { + return m.SplitDelegations + } + return nil +} + +func (m *UndelegateCallback) GetEpochUnbondingRecordIds() []uint64 { + if m != nil { + return m.EpochUnbondingRecordIds + } + return nil +} + +// ---------------------- Redemption Callbacks ---------------------- // +type RedemptionCallback struct { + HostZoneId string `protobuf:"bytes,1,opt,name=host_zone_id,json=hostZoneId,proto3" json:"host_zone_id,omitempty"` + EpochUnbondingRecordIds []uint64 `protobuf:"varint,2,rep,packed,name=epoch_unbonding_record_ids,json=epochUnbondingRecordIds,proto3" json:"epoch_unbonding_record_ids,omitempty"` +} + +func (m *RedemptionCallback) Reset() { *m = RedemptionCallback{} } +func (m *RedemptionCallback) String() string { return proto.CompactTextString(m) } +func (*RedemptionCallback) ProtoMessage() {} +func (*RedemptionCallback) Descriptor() ([]byte, []int) { + return fileDescriptor_f41c99b09b96a5ac, []int{5} +} +func (m *RedemptionCallback) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RedemptionCallback) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RedemptionCallback.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RedemptionCallback) XXX_Merge(src proto.Message) { + xxx_messageInfo_RedemptionCallback.Merge(m, src) +} +func (m *RedemptionCallback) XXX_Size() int { + return m.Size() +} +func (m *RedemptionCallback) XXX_DiscardUnknown() { + xxx_messageInfo_RedemptionCallback.DiscardUnknown(m) +} + +var xxx_messageInfo_RedemptionCallback proto.InternalMessageInfo + +func (m *RedemptionCallback) GetHostZoneId() string { + if m != nil { + return m.HostZoneId + } + return "" +} + +func (m *RedemptionCallback) GetEpochUnbondingRecordIds() []uint64 { + if m != nil { + return m.EpochUnbondingRecordIds + } + return nil +} + +type Rebalancing struct { + SrcValidator string `protobuf:"bytes,1,opt,name=src_validator,json=srcValidator,proto3" json:"src_validator,omitempty"` + DstValidator string `protobuf:"bytes,2,opt,name=dst_validator,json=dstValidator,proto3" json:"dst_validator,omitempty"` + Amt uint64 `protobuf:"varint,3,opt,name=amt,proto3" json:"amt,omitempty"` +} + +func (m *Rebalancing) Reset() { *m = Rebalancing{} } +func (m *Rebalancing) String() string { return proto.CompactTextString(m) } +func (*Rebalancing) ProtoMessage() {} +func (*Rebalancing) Descriptor() ([]byte, []int) { + return fileDescriptor_f41c99b09b96a5ac, []int{6} +} +func (m *Rebalancing) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Rebalancing) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Rebalancing.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Rebalancing) XXX_Merge(src proto.Message) { + xxx_messageInfo_Rebalancing.Merge(m, src) +} +func (m *Rebalancing) XXX_Size() int { + return m.Size() +} +func (m *Rebalancing) XXX_DiscardUnknown() { + xxx_messageInfo_Rebalancing.DiscardUnknown(m) +} + +var xxx_messageInfo_Rebalancing proto.InternalMessageInfo + +func (m *Rebalancing) GetSrcValidator() string { + if m != nil { + return m.SrcValidator + } + return "" +} + +func (m *Rebalancing) GetDstValidator() string { + if m != nil { + return m.DstValidator + } + return "" +} + +func (m *Rebalancing) GetAmt() uint64 { + if m != nil { + return m.Amt + } + return 0 +} + +type RebalanceCallback struct { + HostZoneId string `protobuf:"bytes,1,opt,name=host_zone_id,json=hostZoneId,proto3" json:"host_zone_id,omitempty"` + Rebalancings []*Rebalancing `protobuf:"bytes,2,rep,name=rebalancings,proto3" json:"rebalancings,omitempty"` +} + +func (m *RebalanceCallback) Reset() { *m = RebalanceCallback{} } +func (m *RebalanceCallback) String() string { return proto.CompactTextString(m) } +func (*RebalanceCallback) ProtoMessage() {} +func (*RebalanceCallback) Descriptor() ([]byte, []int) { + return fileDescriptor_f41c99b09b96a5ac, []int{7} +} +func (m *RebalanceCallback) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RebalanceCallback) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RebalanceCallback.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RebalanceCallback) XXX_Merge(src proto.Message) { + xxx_messageInfo_RebalanceCallback.Merge(m, src) +} +func (m *RebalanceCallback) XXX_Size() int { + return m.Size() +} +func (m *RebalanceCallback) XXX_DiscardUnknown() { + xxx_messageInfo_RebalanceCallback.DiscardUnknown(m) +} + +var xxx_messageInfo_RebalanceCallback proto.InternalMessageInfo + +func (m *RebalanceCallback) GetHostZoneId() string { + if m != nil { + return m.HostZoneId + } + return "" +} + +func (m *RebalanceCallback) GetRebalancings() []*Rebalancing { + if m != nil { + return m.Rebalancings + } + return nil +} + +func init() { + proto.RegisterType((*SplitDelegation)(nil), "stride.stakeibc.V2SplitDelegation") + proto.RegisterType((*DelegateCallback)(nil), "stride.stakeibc.V2DelegateCallback") + proto.RegisterType((*ClaimCallback)(nil), "stride.stakeibc.V2laimCallback") + proto.RegisterType((*ReinvestCallback)(nil), "stride.stakeibc.V2ReinvestCallback") + proto.RegisterType((*UndelegateCallback)(nil), "stride.stakeibc.V2UndelegateCallback") + proto.RegisterType((*RedemptionCallback)(nil), "stride.stakeibc.V2RedemptionCallback") + proto.RegisterType((*Rebalancing)(nil), "stride.stakeibc.V2Rebalancing") + proto.RegisterType((*RebalanceCallback)(nil), "stride.stakeibc.V2RebalanceCallback") +} + +func init() { proto.RegisterFile("stride/stakeibc/callbacks.proto", fileDescriptor_f41c99b09b96a5ac) } + +var fileDescriptor_f41c99b09b96a5ac = []byte{ + // 610 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0xcd, 0x6e, 0xd3, 0x40, + 0x10, 0x8e, 0x9b, 0xaa, 0xd0, 0x49, 0x4a, 0x52, 0x0b, 0x95, 0xb4, 0xaa, 0xdc, 0xe0, 0x1e, 0xa8, + 0x90, 0x6a, 0xab, 0x85, 0x0b, 0xe2, 0x02, 0x2d, 0x12, 0xaa, 0xf8, 0x39, 0xb8, 0x2a, 0x87, 0x5e, + 0xac, 0xf5, 0xee, 0x2a, 0x59, 0xd5, 0xde, 0x8d, 0x76, 0x36, 0xe1, 0xe7, 0x09, 0x38, 0xf2, 0x1a, + 0x70, 0xe1, 0x1d, 0x38, 0xf5, 0xd8, 0x23, 0x27, 0x40, 0xed, 0x8b, 0x20, 0xaf, 0xed, 0x24, 0x4d, + 0x51, 0xa5, 0x72, 0xb2, 0xf7, 0x9b, 0x6f, 0x67, 0xbe, 0xd9, 0x6f, 0x76, 0x61, 0x03, 0x8d, 0x16, + 0x8c, 0x87, 0x68, 0xc8, 0x09, 0x17, 0x09, 0x0d, 0x29, 0x49, 0xd3, 0x84, 0xd0, 0x13, 0x0c, 0x06, + 0x5a, 0x19, 0xe5, 0xb6, 0x0a, 0x42, 0x50, 0x11, 0xd6, 0xee, 0xf6, 0x54, 0x4f, 0xd9, 0x58, 0x98, + 0xff, 0x15, 0xb4, 0x35, 0x8f, 0x2a, 0xcc, 0x14, 0x86, 0x09, 0x41, 0x1e, 0x8e, 0x76, 0x12, 0x6e, + 0xc8, 0x4e, 0x48, 0x95, 0x90, 0x45, 0xdc, 0x7f, 0x09, 0xad, 0xc3, 0x41, 0x2a, 0xcc, 0x0b, 0x9e, + 0xf2, 0x1e, 0x31, 0x42, 0x49, 0x77, 0x1d, 0x16, 0x47, 0x24, 0x15, 0x8c, 0x18, 0xa5, 0x3b, 0x4e, + 0xd7, 0xd9, 0x5a, 0x8c, 0x26, 0x80, 0xbb, 0x02, 0x0b, 0x24, 0x53, 0x43, 0x69, 0x3a, 0x73, 0x5d, + 0x67, 0x6b, 0x3e, 0x2a, 0x57, 0xfe, 0x77, 0x07, 0xda, 0x65, 0x12, 0xbe, 0x5f, 0x6a, 0x75, 0xbb, + 0xd0, 0xec, 0x2b, 0x34, 0xf1, 0x27, 0x25, 0x79, 0x2c, 0x58, 0x99, 0x0d, 0x72, 0xec, 0x58, 0x49, + 0x7e, 0xc0, 0xdc, 0x87, 0xb0, 0xcc, 0xf8, 0x40, 0xa1, 0x30, 0xb1, 0xe6, 0x54, 0x69, 0x96, 0xd3, + 0x8a, 0xcc, 0xad, 0x32, 0x10, 0x59, 0xfc, 0x80, 0xb9, 0x6f, 0x60, 0x19, 0x73, 0xad, 0x31, 0x1b, + 0x8b, 0xc5, 0x4e, 0xbd, 0x5b, 0xdf, 0x6a, 0xec, 0x76, 0x83, 0x99, 0xe3, 0x08, 0x66, 0xba, 0x8a, + 0xda, 0x78, 0x19, 0x40, 0xff, 0xb3, 0x03, 0x4b, 0xfb, 0x29, 0x11, 0xd9, 0x58, 0xee, 0x13, 0x58, + 0x1d, 0x22, 0xd7, 0xb1, 0xe6, 0x8c, 0x67, 0x83, 0x9c, 0x35, 0x25, 0xaa, 0xd0, 0xbe, 0x92, 0x13, + 0xa2, 0x71, 0x7c, 0xac, 0x6d, 0x15, 0x6e, 0xd3, 0x3e, 0x11, 0xb2, 0x92, 0xbf, 0x18, 0xdd, 0xb2, + 0xeb, 0x03, 0xe6, 0xde, 0x87, 0x26, 0x1f, 0x28, 0xda, 0x8f, 0xe5, 0x30, 0x4b, 0xb8, 0xee, 0xd4, + 0x6d, 0x77, 0x0d, 0x8b, 0xbd, 0xb5, 0x90, 0xff, 0xd5, 0x81, 0x76, 0xc4, 0x85, 0x1c, 0x71, 0x34, + 0x63, 0x35, 0x08, 0x2d, 0x5d, 0x62, 0x71, 0x79, 0xe4, 0xb9, 0x86, 0xc6, 0xee, 0x6a, 0x50, 0x98, + 0x1a, 0xe4, 0xa6, 0x06, 0xa5, 0xa9, 0xc1, 0xbe, 0x12, 0x72, 0x2f, 0x3c, 0xfd, 0xb5, 0x51, 0xfb, + 0xf6, 0x7b, 0xe3, 0x41, 0x4f, 0x98, 0xfe, 0x30, 0x09, 0xa8, 0xca, 0xc2, 0x72, 0x02, 0x8a, 0xcf, + 0x36, 0xb2, 0x93, 0xd0, 0x7c, 0x1c, 0x70, 0xb4, 0x1b, 0xa2, 0x3b, 0x55, 0x89, 0xe7, 0xb6, 0xc2, + 0x15, 0xc7, 0xea, 0xb3, 0x8e, 0xf9, 0x3f, 0x1c, 0x70, 0x8f, 0x24, 0xbb, 0xb9, 0xd5, 0xff, 0xb4, + 0x6f, 0xee, 0x7f, 0xed, 0x73, 0x9f, 0xc2, 0x5a, 0x71, 0xac, 0x43, 0x99, 0x28, 0xc9, 0x84, 0xec, + 0x4d, 0xcc, 0x2a, 0xc6, 0x62, 0x3e, 0xba, 0x67, 0x19, 0x47, 0x15, 0xa1, 0x72, 0x0b, 0x7d, 0x04, + 0x77, 0x62, 0xe2, 0x0d, 0x7a, 0xb8, 0xbe, 0xe8, 0xdc, 0xf5, 0x45, 0x05, 0x34, 0x22, 0x9e, 0x90, + 0x94, 0x48, 0x2a, 0x64, 0xcf, 0xdd, 0x84, 0x25, 0xd4, 0x34, 0x9e, 0xbd, 0x6b, 0x4d, 0xd4, 0xf4, + 0xdd, 0xf8, 0xba, 0x6d, 0xc2, 0x12, 0x43, 0x33, 0x45, 0x2a, 0x86, 0xab, 0xc9, 0xd0, 0x4c, 0x48, + 0x6d, 0xa8, 0x93, 0xcc, 0x94, 0x83, 0x95, 0xff, 0xfa, 0xef, 0x61, 0xb9, 0x2a, 0x75, 0x13, 0x8b, + 0x9e, 0x41, 0x53, 0x4f, 0x14, 0x56, 0xee, 0xac, 0x5f, 0x71, 0x67, 0xaa, 0x8d, 0xe8, 0xd2, 0x8e, + 0xbd, 0x57, 0xa7, 0xe7, 0x9e, 0x73, 0x76, 0xee, 0x39, 0x7f, 0xce, 0x3d, 0xe7, 0xcb, 0x85, 0x57, + 0x3b, 0xbb, 0xf0, 0x6a, 0x3f, 0x2f, 0xbc, 0xda, 0xf1, 0xce, 0xd4, 0x48, 0x1e, 0xda, 0x7c, 0xdb, + 0xaf, 0x49, 0x82, 0x61, 0xf9, 0xd0, 0x8d, 0x1e, 0x87, 0x1f, 0x26, 0xaf, 0x9d, 0x9d, 0xd0, 0x64, + 0xc1, 0xbe, 0x51, 0x8f, 0xfe, 0x06, 0x00, 0x00, 0xff, 0xff, 0xe7, 0x83, 0x0f, 0xbb, 0x0d, 0x05, + 0x00, 0x00, +} + +func (m *SplitDelegation) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SplitDelegation) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SplitDelegation) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Amount != 0 { + i = encodeVarintCallbacks(dAtA, i, uint64(m.Amount)) + i-- + dAtA[i] = 0x10 + } + if len(m.Validator) > 0 { + i -= len(m.Validator) + copy(dAtA[i:], m.Validator) + i = encodeVarintCallbacks(dAtA, i, uint64(len(m.Validator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DelegateCallback) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DelegateCallback) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DelegateCallback) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.SplitDelegations) > 0 { + for iNdEx := len(m.SplitDelegations) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.SplitDelegations[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCallbacks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if m.DepositRecordId != 0 { + i = encodeVarintCallbacks(dAtA, i, uint64(m.DepositRecordId)) + i-- + dAtA[i] = 0x10 + } + if len(m.HostZoneId) > 0 { + i -= len(m.HostZoneId) + copy(dAtA[i:], m.HostZoneId) + i = encodeVarintCallbacks(dAtA, i, uint64(len(m.HostZoneId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ClaimCallback) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ClaimCallback) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClaimCallback) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.EpochNumber != 0 { + i = encodeVarintCallbacks(dAtA, i, uint64(m.EpochNumber)) + i-- + dAtA[i] = 0x18 + } + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintCallbacks(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0x12 + } + if len(m.UserRedemptionRecordId) > 0 { + i -= len(m.UserRedemptionRecordId) + copy(dAtA[i:], m.UserRedemptionRecordId) + i = encodeVarintCallbacks(dAtA, i, uint64(len(m.UserRedemptionRecordId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ReinvestCallback) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ReinvestCallback) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ReinvestCallback) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.HostZoneId) > 0 { + i -= len(m.HostZoneId) + copy(dAtA[i:], m.HostZoneId) + i = encodeVarintCallbacks(dAtA, i, uint64(len(m.HostZoneId))) + i-- + dAtA[i] = 0x1a + } + { + size, err := m.ReinvestAmount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCallbacks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *UndelegateCallback) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *UndelegateCallback) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *UndelegateCallback) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.EpochUnbondingRecordIds) > 0 { + dAtA3 := make([]byte, len(m.EpochUnbondingRecordIds)*10) + var j2 int + for _, num := range m.EpochUnbondingRecordIds { + for num >= 1<<7 { + dAtA3[j2] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j2++ + } + dAtA3[j2] = uint8(num) + j2++ + } + i -= j2 + copy(dAtA[i:], dAtA3[:j2]) + i = encodeVarintCallbacks(dAtA, i, uint64(j2)) + i-- + dAtA[i] = 0x1a + } + if len(m.SplitDelegations) > 0 { + for iNdEx := len(m.SplitDelegations) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.SplitDelegations[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCallbacks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if len(m.HostZoneId) > 0 { + i -= len(m.HostZoneId) + copy(dAtA[i:], m.HostZoneId) + i = encodeVarintCallbacks(dAtA, i, uint64(len(m.HostZoneId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *RedemptionCallback) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RedemptionCallback) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RedemptionCallback) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.EpochUnbondingRecordIds) > 0 { + dAtA5 := make([]byte, len(m.EpochUnbondingRecordIds)*10) + var j4 int + for _, num := range m.EpochUnbondingRecordIds { + for num >= 1<<7 { + dAtA5[j4] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j4++ + } + dAtA5[j4] = uint8(num) + j4++ + } + i -= j4 + copy(dAtA[i:], dAtA5[:j4]) + i = encodeVarintCallbacks(dAtA, i, uint64(j4)) + i-- + dAtA[i] = 0x12 + } + if len(m.HostZoneId) > 0 { + i -= len(m.HostZoneId) + copy(dAtA[i:], m.HostZoneId) + i = encodeVarintCallbacks(dAtA, i, uint64(len(m.HostZoneId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Rebalancing) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Rebalancing) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Rebalancing) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Amt != 0 { + i = encodeVarintCallbacks(dAtA, i, uint64(m.Amt)) + i-- + dAtA[i] = 0x18 + } + if len(m.DstValidator) > 0 { + i -= len(m.DstValidator) + copy(dAtA[i:], m.DstValidator) + i = encodeVarintCallbacks(dAtA, i, uint64(len(m.DstValidator))) + i-- + dAtA[i] = 0x12 + } + if len(m.SrcValidator) > 0 { + i -= len(m.SrcValidator) + copy(dAtA[i:], m.SrcValidator) + i = encodeVarintCallbacks(dAtA, i, uint64(len(m.SrcValidator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *RebalanceCallback) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RebalanceCallback) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RebalanceCallback) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Rebalancings) > 0 { + for iNdEx := len(m.Rebalancings) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Rebalancings[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCallbacks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if len(m.HostZoneId) > 0 { + i -= len(m.HostZoneId) + copy(dAtA[i:], m.HostZoneId) + i = encodeVarintCallbacks(dAtA, i, uint64(len(m.HostZoneId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintCallbacks(dAtA []byte, offset int, v uint64) int { + offset -= sovCallbacks(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *SplitDelegation) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Validator) + if l > 0 { + n += 1 + l + sovCallbacks(uint64(l)) + } + if m.Amount != 0 { + n += 1 + sovCallbacks(uint64(m.Amount)) + } + return n +} + +func (m *DelegateCallback) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.HostZoneId) + if l > 0 { + n += 1 + l + sovCallbacks(uint64(l)) + } + if m.DepositRecordId != 0 { + n += 1 + sovCallbacks(uint64(m.DepositRecordId)) + } + if len(m.SplitDelegations) > 0 { + for _, e := range m.SplitDelegations { + l = e.Size() + n += 1 + l + sovCallbacks(uint64(l)) + } + } + return n +} + +func (m *ClaimCallback) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.UserRedemptionRecordId) + if l > 0 { + n += 1 + l + sovCallbacks(uint64(l)) + } + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovCallbacks(uint64(l)) + } + if m.EpochNumber != 0 { + n += 1 + sovCallbacks(uint64(m.EpochNumber)) + } + return n +} + +func (m *ReinvestCallback) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ReinvestAmount.Size() + n += 1 + l + sovCallbacks(uint64(l)) + l = len(m.HostZoneId) + if l > 0 { + n += 1 + l + sovCallbacks(uint64(l)) + } + return n +} + +func (m *UndelegateCallback) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.HostZoneId) + if l > 0 { + n += 1 + l + sovCallbacks(uint64(l)) + } + if len(m.SplitDelegations) > 0 { + for _, e := range m.SplitDelegations { + l = e.Size() + n += 1 + l + sovCallbacks(uint64(l)) + } + } + if len(m.EpochUnbondingRecordIds) > 0 { + l = 0 + for _, e := range m.EpochUnbondingRecordIds { + l += sovCallbacks(uint64(e)) + } + n += 1 + sovCallbacks(uint64(l)) + l + } + return n +} + +func (m *RedemptionCallback) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.HostZoneId) + if l > 0 { + n += 1 + l + sovCallbacks(uint64(l)) + } + if len(m.EpochUnbondingRecordIds) > 0 { + l = 0 + for _, e := range m.EpochUnbondingRecordIds { + l += sovCallbacks(uint64(e)) + } + n += 1 + sovCallbacks(uint64(l)) + l + } + return n +} + +func (m *Rebalancing) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SrcValidator) + if l > 0 { + n += 1 + l + sovCallbacks(uint64(l)) + } + l = len(m.DstValidator) + if l > 0 { + n += 1 + l + sovCallbacks(uint64(l)) + } + if m.Amt != 0 { + n += 1 + sovCallbacks(uint64(m.Amt)) + } + return n +} + +func (m *RebalanceCallback) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.HostZoneId) + if l > 0 { + n += 1 + l + sovCallbacks(uint64(l)) + } + if len(m.Rebalancings) > 0 { + for _, e := range m.Rebalancings { + l = e.Size() + n += 1 + l + sovCallbacks(uint64(l)) + } + } + return n +} + +func sovCallbacks(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozCallbacks(x uint64) (n int) { + return sovCallbacks(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *SplitDelegation) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SplitDelegation: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SplitDelegation: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Validator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Validator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + m.Amount = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Amount |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipCallbacks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbacks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DelegateCallback) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DelegateCallback: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DelegateCallback: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZoneId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZoneId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DepositRecordId", wireType) + } + m.DepositRecordId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DepositRecordId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SplitDelegations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SplitDelegations = append(m.SplitDelegations, &SplitDelegation{}) + if err := m.SplitDelegations[len(m.SplitDelegations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCallbacks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbacks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ClaimCallback) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ClaimCallback: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ClaimCallback: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UserRedemptionRecordId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UserRedemptionRecordId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EpochNumber", wireType) + } + m.EpochNumber = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EpochNumber |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipCallbacks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbacks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ReinvestCallback) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ReinvestCallback: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ReinvestCallback: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ReinvestAmount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ReinvestAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZoneId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZoneId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCallbacks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbacks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *UndelegateCallback) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: UndelegateCallback: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UndelegateCallback: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZoneId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZoneId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SplitDelegations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SplitDelegations = append(m.SplitDelegations, &SplitDelegation{}) + if err := m.SplitDelegations[len(m.SplitDelegations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType == 0 { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.EpochUnbondingRecordIds = append(m.EpochUnbondingRecordIds, v) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + var count int + for _, integer := range dAtA[iNdEx:postIndex] { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.EpochUnbondingRecordIds) == 0 { + m.EpochUnbondingRecordIds = make([]uint64, 0, elementCount) + } + for iNdEx < postIndex { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.EpochUnbondingRecordIds = append(m.EpochUnbondingRecordIds, v) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field EpochUnbondingRecordIds", wireType) + } + default: + iNdEx = preIndex + skippy, err := skipCallbacks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbacks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RedemptionCallback) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RedemptionCallback: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RedemptionCallback: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZoneId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZoneId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType == 0 { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.EpochUnbondingRecordIds = append(m.EpochUnbondingRecordIds, v) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + var count int + for _, integer := range dAtA[iNdEx:postIndex] { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.EpochUnbondingRecordIds) == 0 { + m.EpochUnbondingRecordIds = make([]uint64, 0, elementCount) + } + for iNdEx < postIndex { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.EpochUnbondingRecordIds = append(m.EpochUnbondingRecordIds, v) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field EpochUnbondingRecordIds", wireType) + } + default: + iNdEx = preIndex + skippy, err := skipCallbacks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbacks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Rebalancing) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Rebalancing: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Rebalancing: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SrcValidator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SrcValidator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DstValidator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DstValidator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Amt", wireType) + } + m.Amt = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Amt |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipCallbacks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbacks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RebalanceCallback) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RebalanceCallback: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RebalanceCallback: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZoneId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZoneId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Rebalancings", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Rebalancings = append(m.Rebalancings, &Rebalancing{}) + if err := m.Rebalancings[len(m.Rebalancings)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCallbacks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbacks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipCallbacks(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowCallbacks + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowCallbacks + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowCallbacks + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthCallbacks + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupCallbacks + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthCallbacks + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthCallbacks = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowCallbacks = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupCallbacks = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/stakeibc/migrations/v2/types/host_zone.pb.go b/x/stakeibc/migrations/v2/types/host_zone.pb.go new file mode 100644 index 00000000000..ac4ced446b8 --- /dev/null +++ b/x/stakeibc/migrations/v2/types/host_zone.pb.go @@ -0,0 +1,1193 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/stakeibc/host_zone.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + github_com_cosmos_cosmos_sdk_types "cosmossdk.io/math" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/gogo/protobuf/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// next id: 19 +type HostZone struct { + ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + ConnectionId string `protobuf:"bytes,2,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty"` + Bech32Prefix string `protobuf:"bytes,17,opt,name=bech32prefix,proto3" json:"bech32prefix,omitempty"` + TransferChannelId string `protobuf:"bytes,12,opt,name=transfer_channel_id,json=transferChannelId,proto3" json:"transfer_channel_id,omitempty"` + Validators []*Validator `protobuf:"bytes,3,rep,name=validators,proto3" json:"validators,omitempty"` + BlacklistedValidators []*Validator `protobuf:"bytes,4,rep,name=blacklisted_validators,json=blacklistedValidators,proto3" json:"blacklisted_validators,omitempty"` + WithdrawalAccount *ICAAccount `protobuf:"bytes,5,opt,name=withdrawal_account,json=withdrawalAccount,proto3" json:"withdrawal_account,omitempty"` + FeeAccount *ICAAccount `protobuf:"bytes,6,opt,name=fee_account,json=feeAccount,proto3" json:"fee_account,omitempty"` + DelegationAccount *ICAAccount `protobuf:"bytes,7,opt,name=delegation_account,json=delegationAccount,proto3" json:"delegation_account,omitempty"` + RedemptionAccount *ICAAccount `protobuf:"bytes,16,opt,name=redemption_account,json=redemptionAccount,proto3" json:"redemption_account,omitempty"` + // ibc denom on stride + IbcDenom string `protobuf:"bytes,8,opt,name=ibc_denom,json=ibcDenom,proto3" json:"ibc_denom,omitempty"` + // native denom on host zone + HostDenom string `protobuf:"bytes,9,opt,name=host_denom,json=hostDenom,proto3" json:"host_denom,omitempty"` + // TODO(TEST-68): Should we make this an array and store the last n redemption + // rates then calculate a TWARR? + LastRedemptionRate github_com_cosmos_cosmos_sdk_types.LegacyDec `protobuf:"bytes,10,opt,name=last_redemption_rate,json=lastRedemptionRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"last_redemption_rate"` + RedemptionRate github_com_cosmos_cosmos_sdk_types.LegacyDec `protobuf:"bytes,11,opt,name=redemption_rate,json=redemptionRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"redemption_rate"` + // stores how many days we should wait before issuing unbondings + UnbondingFrequency uint64 `protobuf:"varint,14,opt,name=unbonding_frequency,json=unbondingFrequency,proto3" json:"unbonding_frequency,omitempty"` + // TODO(TEST-101) int to dec + StakedBal uint64 `protobuf:"varint,13,opt,name=staked_bal,json=stakedBal,proto3" json:"staked_bal,omitempty"` + Address string `protobuf:"bytes,18,opt,name=address,proto3" json:"address,omitempty" yaml:"address"` +} + +func (m *HostZone) Reset() { *m = HostZone{} } +func (m *HostZone) String() string { return proto.CompactTextString(m) } +func (*HostZone) ProtoMessage() {} +func (*HostZone) Descriptor() ([]byte, []int) { + return fileDescriptor_f81bf5b42c61245a, []int{0} +} +func (m *HostZone) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HostZone) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_HostZone.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *HostZone) XXX_Merge(src proto.Message) { + xxx_messageInfo_HostZone.Merge(m, src) +} +func (m *HostZone) XXX_Size() int { + return m.Size() +} +func (m *HostZone) XXX_DiscardUnknown() { + xxx_messageInfo_HostZone.DiscardUnknown(m) +} + +var xxx_messageInfo_HostZone proto.InternalMessageInfo + +func (m *HostZone) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +func (m *HostZone) GetConnectionId() string { + if m != nil { + return m.ConnectionId + } + return "" +} + +func (m *HostZone) GetBech32Prefix() string { + if m != nil { + return m.Bech32Prefix + } + return "" +} + +func (m *HostZone) GetTransferChannelId() string { + if m != nil { + return m.TransferChannelId + } + return "" +} + +func (m *HostZone) GetValidators() []*Validator { + if m != nil { + return m.Validators + } + return nil +} + +func (m *HostZone) GetBlacklistedValidators() []*Validator { + if m != nil { + return m.BlacklistedValidators + } + return nil +} + +func (m *HostZone) GetWithdrawalAccount() *ICAAccount { + if m != nil { + return m.WithdrawalAccount + } + return nil +} + +func (m *HostZone) GetFeeAccount() *ICAAccount { + if m != nil { + return m.FeeAccount + } + return nil +} + +func (m *HostZone) GetDelegationAccount() *ICAAccount { + if m != nil { + return m.DelegationAccount + } + return nil +} + +func (m *HostZone) GetRedemptionAccount() *ICAAccount { + if m != nil { + return m.RedemptionAccount + } + return nil +} + +func (m *HostZone) GetIbcDenom() string { + if m != nil { + return m.IbcDenom + } + return "" +} + +func (m *HostZone) GetHostDenom() string { + if m != nil { + return m.HostDenom + } + return "" +} + +func (m *HostZone) GetUnbondingFrequency() uint64 { + if m != nil { + return m.UnbondingFrequency + } + return 0 +} + +func (m *HostZone) GetStakedBal() uint64 { + if m != nil { + return m.StakedBal + } + return 0 +} + +func (m *HostZone) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func init() { + proto.RegisterType((*HostZone)(nil), "stride.stakeibc.V2HostZone") +} + +func init() { proto.RegisterFile("stride/stakeibc/host_zone.proto", fileDescriptor_f81bf5b42c61245a) } + +var fileDescriptor_f81bf5b42c61245a = []byte{ + // 619 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x94, 0xcb, 0x4e, 0x1b, 0x3f, + 0x14, 0xc6, 0x33, 0x7f, 0xf8, 0x93, 0xc4, 0xe1, 0x6a, 0x68, 0x35, 0x80, 0x9a, 0xa4, 0xa9, 0x54, + 0x65, 0x51, 0x66, 0x54, 0xe8, 0x0a, 0xb1, 0xe1, 0xa2, 0xaa, 0xa1, 0xdd, 0x74, 0x2a, 0xb1, 0x60, + 0x33, 0xf2, 0xd8, 0x27, 0x89, 0xc5, 0xc4, 0x4e, 0xc7, 0x0e, 0x97, 0x3e, 0x45, 0x1f, 0xa6, 0x0f, + 0xc1, 0x12, 0x75, 0x55, 0x75, 0x81, 0x2a, 0x90, 0xfa, 0x00, 0x7d, 0x82, 0x6a, 0x3c, 0x33, 0x99, + 0x21, 0x2c, 0x60, 0xd1, 0x55, 0xc6, 0xe7, 0xfb, 0xbe, 0x9f, 0xed, 0x63, 0xc7, 0xa8, 0xa1, 0x74, + 0xc4, 0x19, 0xb8, 0x4a, 0x93, 0x13, 0xe0, 0x01, 0x75, 0xfb, 0x52, 0x69, 0xff, 0x8b, 0x14, 0xe0, + 0x0c, 0x23, 0xa9, 0x25, 0x5e, 0x48, 0x0c, 0x4e, 0x66, 0x58, 0xbb, 0x97, 0x38, 0x25, 0x21, 0x67, + 0x44, 0xcb, 0x28, 0x49, 0xac, 0x3d, 0x9f, 0x34, 0x70, 0x4a, 0x7c, 0x42, 0xa9, 0x1c, 0x09, 0x9d, + 0x5a, 0x56, 0x7a, 0xb2, 0x27, 0xcd, 0xa7, 0x1b, 0x7f, 0xa5, 0xd5, 0x55, 0x2a, 0xd5, 0x40, 0x2a, + 0x3f, 0x11, 0x92, 0x41, 0x22, 0xb5, 0x7e, 0x97, 0x51, 0xe5, 0x9d, 0x54, 0xfa, 0x58, 0x0a, 0xc0, + 0xab, 0xa8, 0x42, 0xfb, 0x84, 0x0b, 0x9f, 0x33, 0xdb, 0x6a, 0x5a, 0xed, 0xaa, 0x57, 0x36, 0xe3, + 0x0e, 0xc3, 0x2f, 0xd0, 0x1c, 0x95, 0x42, 0x00, 0xd5, 0x5c, 0x1a, 0xfd, 0x3f, 0xa3, 0xcf, 0xe6, + 0xc5, 0x0e, 0xc3, 0x2d, 0x34, 0x1b, 0x00, 0xed, 0x6f, 0x6d, 0x0e, 0x23, 0xe8, 0xf2, 0x73, 0x7b, + 0x29, 0xf1, 0x14, 0x6b, 0xd8, 0x41, 0xcb, 0x3a, 0x22, 0x42, 0x75, 0x21, 0xf2, 0x69, 0x9f, 0x08, + 0x01, 0x61, 0x8c, 0x9b, 0x35, 0xd6, 0xa5, 0x4c, 0xda, 0x4f, 0x94, 0x0e, 0xc3, 0xdb, 0x08, 0x8d, + 0xfb, 0xa0, 0xec, 0xa9, 0xe6, 0x54, 0xbb, 0xb6, 0xb9, 0xe6, 0x4c, 0xf4, 0xce, 0x39, 0xca, 0x2c, + 0x5e, 0xc1, 0x8d, 0x3f, 0xa2, 0xa7, 0x41, 0x48, 0xe8, 0x49, 0xc8, 0x95, 0x06, 0xe6, 0x17, 0x38, + 0xd3, 0x0f, 0x72, 0x9e, 0x14, 0x92, 0x47, 0x39, 0xf2, 0x10, 0xe1, 0x33, 0xae, 0xfb, 0x2c, 0x22, + 0x67, 0x24, 0xcc, 0x9a, 0x6f, 0xff, 0xdf, 0xb4, 0xda, 0xb5, 0xcd, 0xf5, 0x7b, 0xb8, 0xce, 0xfe, + 0xee, 0x6e, 0x62, 0xf1, 0x96, 0xf2, 0x58, 0x5a, 0xc2, 0x3b, 0xa8, 0xd6, 0x05, 0x18, 0x43, 0x66, + 0x1e, 0x86, 0xa0, 0x2e, 0x40, 0x96, 0x3e, 0x44, 0x98, 0x41, 0x08, 0x3d, 0x62, 0x4e, 0x24, 0x83, + 0x94, 0x1f, 0xb1, 0x92, 0x3c, 0x56, 0x60, 0x45, 0xc0, 0x60, 0x30, 0xbc, 0xc3, 0x5a, 0x7c, 0x04, + 0x2b, 0x8f, 0x65, 0xac, 0x75, 0x54, 0xe5, 0x01, 0xf5, 0x19, 0x08, 0x39, 0xb0, 0x2b, 0xe6, 0x58, + 0x2b, 0x3c, 0xa0, 0x07, 0xf1, 0x18, 0x3f, 0x43, 0xc8, 0xfc, 0x0f, 0x12, 0xb5, 0x6a, 0xd4, 0x6a, + 0x5c, 0x49, 0x64, 0x81, 0x56, 0x42, 0xa2, 0xb4, 0x5f, 0x58, 0x4c, 0x44, 0x34, 0xd8, 0x28, 0x36, + 0xee, 0xed, 0x5c, 0x5e, 0x37, 0x4a, 0x3f, 0xaf, 0x1b, 0x2f, 0x7b, 0x5c, 0xf7, 0x47, 0x81, 0x43, + 0xe5, 0x20, 0xbd, 0xcc, 0xe9, 0xcf, 0x86, 0x62, 0x27, 0xae, 0xbe, 0x18, 0x82, 0x72, 0x0e, 0x80, + 0x7e, 0xff, 0xb6, 0x81, 0xd2, 0xbb, 0x7e, 0x00, 0xd4, 0xc3, 0x31, 0xd9, 0x1b, 0x83, 0x3d, 0xa2, + 0x01, 0x03, 0x5a, 0x98, 0x9c, 0xaa, 0xf6, 0x0f, 0xa6, 0x9a, 0x8f, 0xee, 0x4e, 0xe3, 0xa2, 0xe5, + 0x91, 0x08, 0xa4, 0x60, 0x5c, 0xf4, 0xfc, 0x6e, 0x04, 0x9f, 0x47, 0x20, 0xe8, 0x85, 0x3d, 0xdf, + 0xb4, 0xda, 0xd3, 0x1e, 0x1e, 0x4b, 0x6f, 0x33, 0x25, 0x6e, 0x93, 0xe9, 0x36, 0xf3, 0x03, 0x12, + 0xda, 0x73, 0xc6, 0x57, 0x4d, 0x2a, 0x7b, 0x24, 0xc4, 0xaf, 0x50, 0x99, 0x30, 0x16, 0x81, 0x52, + 0x36, 0x36, 0xcb, 0xc5, 0x7f, 0xae, 0x1b, 0xf3, 0x17, 0x64, 0x10, 0x6e, 0xb7, 0x52, 0xa1, 0xe5, + 0x65, 0x96, 0xc3, 0xe9, 0xca, 0xc2, 0xe2, 0xe2, 0xde, 0xfb, 0xcb, 0x9b, 0xba, 0x75, 0x75, 0x53, + 0xb7, 0x7e, 0xdd, 0xd4, 0xad, 0xaf, 0xb7, 0xf5, 0xd2, 0xd5, 0x6d, 0xbd, 0xf4, 0xe3, 0xb6, 0x5e, + 0x3a, 0x7e, 0x5d, 0xd8, 0xe3, 0x27, 0x73, 0xd4, 0x1b, 0x1f, 0x48, 0xa0, 0xdc, 0xf4, 0xb5, 0x39, + 0x7d, 0xe3, 0x9e, 0xe7, 0x4f, 0x8e, 0xd9, 0x72, 0x30, 0x63, 0x1e, 0x8f, 0xad, 0xbf, 0x01, 0x00, + 0x00, 0xff, 0xff, 0x55, 0xf2, 0x88, 0xfa, 0xe5, 0x04, 0x00, 0x00, +} + +func (m *HostZone) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HostZone) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HostZone) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x92 + } + if len(m.Bech32Prefix) > 0 { + i -= len(m.Bech32Prefix) + copy(dAtA[i:], m.Bech32Prefix) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.Bech32Prefix))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x8a + } + if m.RedemptionAccount != nil { + { + size, err := m.RedemptionAccount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x82 + } + if m.UnbondingFrequency != 0 { + i = encodeVarintHostZone(dAtA, i, uint64(m.UnbondingFrequency)) + i-- + dAtA[i] = 0x70 + } + if m.StakedBal != 0 { + i = encodeVarintHostZone(dAtA, i, uint64(m.StakedBal)) + i-- + dAtA[i] = 0x68 + } + if len(m.TransferChannelId) > 0 { + i -= len(m.TransferChannelId) + copy(dAtA[i:], m.TransferChannelId) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.TransferChannelId))) + i-- + dAtA[i] = 0x62 + } + { + size := m.RedemptionRate.Size() + i -= size + if _, err := m.RedemptionRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x5a + { + size := m.LastRedemptionRate.Size() + i -= size + if _, err := m.LastRedemptionRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + if len(m.HostDenom) > 0 { + i -= len(m.HostDenom) + copy(dAtA[i:], m.HostDenom) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.HostDenom))) + i-- + dAtA[i] = 0x4a + } + if len(m.IbcDenom) > 0 { + i -= len(m.IbcDenom) + copy(dAtA[i:], m.IbcDenom) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.IbcDenom))) + i-- + dAtA[i] = 0x42 + } + if m.DelegationAccount != nil { + { + size, err := m.DelegationAccount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + if m.FeeAccount != nil { + { + size, err := m.FeeAccount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + if m.WithdrawalAccount != nil { + { + size, err := m.WithdrawalAccount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if len(m.BlacklistedValidators) > 0 { + for iNdEx := len(m.BlacklistedValidators) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.BlacklistedValidators[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + if len(m.Validators) > 0 { + for iNdEx := len(m.Validators) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Validators[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if len(m.ConnectionId) > 0 { + i -= len(m.ConnectionId) + copy(dAtA[i:], m.ConnectionId) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.ConnectionId))) + i-- + dAtA[i] = 0x12 + } + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintHostZone(dAtA []byte, offset int, v uint64) int { + offset -= sovHostZone(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *HostZone) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovHostZone(uint64(l)) + } + l = len(m.ConnectionId) + if l > 0 { + n += 1 + l + sovHostZone(uint64(l)) + } + if len(m.Validators) > 0 { + for _, e := range m.Validators { + l = e.Size() + n += 1 + l + sovHostZone(uint64(l)) + } + } + if len(m.BlacklistedValidators) > 0 { + for _, e := range m.BlacklistedValidators { + l = e.Size() + n += 1 + l + sovHostZone(uint64(l)) + } + } + if m.WithdrawalAccount != nil { + l = m.WithdrawalAccount.Size() + n += 1 + l + sovHostZone(uint64(l)) + } + if m.FeeAccount != nil { + l = m.FeeAccount.Size() + n += 1 + l + sovHostZone(uint64(l)) + } + if m.DelegationAccount != nil { + l = m.DelegationAccount.Size() + n += 1 + l + sovHostZone(uint64(l)) + } + l = len(m.IbcDenom) + if l > 0 { + n += 1 + l + sovHostZone(uint64(l)) + } + l = len(m.HostDenom) + if l > 0 { + n += 1 + l + sovHostZone(uint64(l)) + } + l = m.LastRedemptionRate.Size() + n += 1 + l + sovHostZone(uint64(l)) + l = m.RedemptionRate.Size() + n += 1 + l + sovHostZone(uint64(l)) + l = len(m.TransferChannelId) + if l > 0 { + n += 1 + l + sovHostZone(uint64(l)) + } + if m.StakedBal != 0 { + n += 1 + sovHostZone(uint64(m.StakedBal)) + } + if m.UnbondingFrequency != 0 { + n += 1 + sovHostZone(uint64(m.UnbondingFrequency)) + } + if m.RedemptionAccount != nil { + l = m.RedemptionAccount.Size() + n += 2 + l + sovHostZone(uint64(l)) + } + l = len(m.Bech32Prefix) + if l > 0 { + n += 2 + l + sovHostZone(uint64(l)) + } + l = len(m.Address) + if l > 0 { + n += 2 + l + sovHostZone(uint64(l)) + } + return n +} + +func sovHostZone(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozHostZone(x uint64) (n int) { + return sovHostZone(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *HostZone) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HostZone: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HostZone: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConnectionId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ConnectionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Validators", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Validators = append(m.Validators, &Validator{}) + if err := m.Validators[len(m.Validators)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BlacklistedValidators", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BlacklistedValidators = append(m.BlacklistedValidators, &Validator{}) + if err := m.BlacklistedValidators[len(m.BlacklistedValidators)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field WithdrawalAccount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.WithdrawalAccount == nil { + m.WithdrawalAccount = &ICAAccount{} + } + if err := m.WithdrawalAccount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FeeAccount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.FeeAccount == nil { + m.FeeAccount = &ICAAccount{} + } + if err := m.FeeAccount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DelegationAccount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.DelegationAccount == nil { + m.DelegationAccount = &ICAAccount{} + } + if err := m.DelegationAccount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IbcDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.IbcDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastRedemptionRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LastRedemptionRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RedemptionRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.RedemptionRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TransferChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TransferChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 13: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field StakedBal", wireType) + } + m.StakedBal = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.StakedBal |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 14: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UnbondingFrequency", wireType) + } + m.UnbondingFrequency = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.UnbondingFrequency |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RedemptionAccount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.RedemptionAccount == nil { + m.RedemptionAccount = &ICAAccount{} + } + if err := m.RedemptionAccount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Bech32Prefix", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Bech32Prefix = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 18: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipHostZone(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthHostZone + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipHostZone(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowHostZone + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowHostZone + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowHostZone + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthHostZone + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupHostZone + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthHostZone + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthHostZone = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowHostZone = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupHostZone = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/stakeibc/migrations/v2/types/ica_account.pb.go b/x/stakeibc/migrations/v2/types/ica_account.pb.go new file mode 100644 index 00000000000..6619090e53e --- /dev/null +++ b/x/stakeibc/migrations/v2/types/ica_account.pb.go @@ -0,0 +1,392 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/stakeibc/ica_account.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + proto "github.com/gogo/protobuf/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type ICAAccountType int32 + +const ( + ICAAccountType_DELEGATION ICAAccountType = 0 + ICAAccountType_FEE ICAAccountType = 1 + ICAAccountType_WITHDRAWAL ICAAccountType = 2 + ICAAccountType_REDEMPTION ICAAccountType = 3 +) + +var ICAAccountType_name = map[int32]string{ + 0: "DELEGATION", + 1: "FEE", + 2: "WITHDRAWAL", + 3: "REDEMPTION", +} + +var ICAAccountType_value = map[string]int32{ + "DELEGATION": 0, + "FEE": 1, + "WITHDRAWAL": 2, + "REDEMPTION": 3, +} + +func (x ICAAccountType) String() string { + return proto.EnumName(ICAAccountType_name, int32(x)) +} + +func (ICAAccountType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_2976ae6e7f6ce824, []int{0} +} + +// TODO(TEST-XX): Update these fields to be more useful (e.g. balances should be +// coins, maybe store port name directly) +type ICAAccount struct { + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + Target ICAAccountType `protobuf:"varint,3,opt,name=target,proto3,enum=stride.stakeibc.ICAAccountType" json:"target,omitempty"` +} + +func (m *ICAAccount) Reset() { *m = ICAAccount{} } +func (m *ICAAccount) String() string { return proto.CompactTextString(m) } +func (*ICAAccount) ProtoMessage() {} +func (*ICAAccount) Descriptor() ([]byte, []int) { + return fileDescriptor_2976ae6e7f6ce824, []int{0} +} +func (m *ICAAccount) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ICAAccount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ICAAccount.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ICAAccount) XXX_Merge(src proto.Message) { + xxx_messageInfo_ICAAccount.Merge(m, src) +} +func (m *ICAAccount) XXX_Size() int { + return m.Size() +} +func (m *ICAAccount) XXX_DiscardUnknown() { + xxx_messageInfo_ICAAccount.DiscardUnknown(m) +} + +var xxx_messageInfo_ICAAccount proto.InternalMessageInfo + +func (m *ICAAccount) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func (m *ICAAccount) GetTarget() ICAAccountType { + if m != nil { + return m.Target + } + return ICAAccountType_DELEGATION +} + +func init() { + proto.RegisterEnum("stride.stakeibc.V2ICAAccountType", ICAAccountType_name, ICAAccountType_value) + proto.RegisterType((*ICAAccount)(nil), "stride.stakeibc.V2ICAAccount") +} + +func init() { proto.RegisterFile("stride/stakeibc/ica_account.proto", fileDescriptor_2976ae6e7f6ce824) } + +var fileDescriptor_2976ae6e7f6ce824 = []byte{ + // 285 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x2c, 0x2e, 0x29, 0xca, + 0x4c, 0x49, 0xd5, 0x2f, 0x2e, 0x49, 0xcc, 0x4e, 0xcd, 0x4c, 0x4a, 0xd6, 0xcf, 0x4c, 0x4e, 0x8c, + 0x4f, 0x4c, 0x4e, 0xce, 0x2f, 0xcd, 0x2b, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x87, + 0x28, 0xd1, 0x83, 0x29, 0x91, 0x92, 0x4c, 0xce, 0x2f, 0xce, 0xcd, 0x2f, 0x8e, 0x07, 0x4b, 0xeb, + 0x43, 0x38, 0x10, 0xb5, 0x4a, 0x95, 0x5c, 0x5c, 0x9e, 0xce, 0x8e, 0x8e, 0x10, 0xfd, 0x42, 0x46, + 0x5c, 0xec, 0x89, 0x29, 0x29, 0x45, 0xa9, 0xc5, 0xc5, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x4e, + 0x12, 0x97, 0xb6, 0xe8, 0x8a, 0x40, 0x35, 0x38, 0x42, 0x64, 0x82, 0x4b, 0x8a, 0x32, 0xf3, 0xd2, + 0x83, 0x60, 0x0a, 0x85, 0xcc, 0xb9, 0xd8, 0x4a, 0x12, 0x8b, 0xd2, 0x53, 0x4b, 0x24, 0x98, 0x15, + 0x18, 0x35, 0xf8, 0x8c, 0xe4, 0xf5, 0xd0, 0xac, 0xd7, 0x43, 0x58, 0x10, 0x52, 0x59, 0x90, 0x1a, + 0x04, 0x55, 0xae, 0xe5, 0xc9, 0xc5, 0x87, 0x2a, 0x23, 0xc4, 0xc7, 0xc5, 0xe5, 0xe2, 0xea, 0xe3, + 0xea, 0xee, 0x18, 0xe2, 0xe9, 0xef, 0x27, 0xc0, 0x20, 0xc4, 0xce, 0xc5, 0xec, 0xe6, 0xea, 0x2a, + 0xc0, 0x08, 0x92, 0x08, 0xf7, 0x0c, 0xf1, 0x70, 0x09, 0x72, 0x0c, 0x77, 0xf4, 0x11, 0x60, 0x02, + 0xf1, 0x83, 0x5c, 0x5d, 0x5c, 0x7d, 0x03, 0xc0, 0x0a, 0x99, 0x9d, 0xbc, 0x4f, 0x3c, 0x92, 0x63, + 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, + 0x63, 0xb8, 0xf1, 0x58, 0x8e, 0x21, 0xca, 0x30, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, + 0x3f, 0x57, 0x3f, 0x18, 0xec, 0x2e, 0x5d, 0x9f, 0xc4, 0xa4, 0x62, 0x7d, 0x68, 0x28, 0x96, 0x99, + 0xe8, 0x57, 0x20, 0x82, 0xb2, 0xa4, 0xb2, 0x20, 0xb5, 0x38, 0x89, 0x0d, 0x1c, 0x32, 0xc6, 0x80, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xcd, 0x18, 0xc2, 0x7b, 0x6a, 0x01, 0x00, 0x00, +} + +func (m *ICAAccount) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ICAAccount) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ICAAccount) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Target != 0 { + i = encodeVarintIcaAccount(dAtA, i, uint64(m.Target)) + i-- + dAtA[i] = 0x18 + } + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintIcaAccount(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintIcaAccount(dAtA []byte, offset int, v uint64) int { + offset -= sovIcaAccount(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *ICAAccount) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Address) + if l > 0 { + n += 1 + l + sovIcaAccount(uint64(l)) + } + if m.Target != 0 { + n += 1 + sovIcaAccount(uint64(m.Target)) + } + return n +} + +func sovIcaAccount(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozIcaAccount(x uint64) (n int) { + return sovIcaAccount(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *ICAAccount) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaAccount + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ICAAccount: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ICAAccount: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaAccount + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIcaAccount + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIcaAccount + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Target", wireType) + } + m.Target = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaAccount + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Target |= ICAAccountType(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipIcaAccount(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthIcaAccount + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipIcaAccount(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowIcaAccount + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowIcaAccount + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowIcaAccount + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthIcaAccount + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupIcaAccount + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthIcaAccount + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthIcaAccount = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowIcaAccount = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupIcaAccount = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/stakeibc/migrations/v2/types/validator.pb.go b/x/stakeibc/migrations/v2/types/validator.pb.go new file mode 100644 index 00000000000..176ecb17c96 --- /dev/null +++ b/x/stakeibc/migrations/v2/types/validator.pb.go @@ -0,0 +1,816 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/stakeibc/validator.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + github_com_cosmos_cosmos_sdk_types "cosmossdk.io/math" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/gogo/protobuf/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type Validator_ValidatorStatus int32 + +const ( + Validator_ACTIVE Validator_ValidatorStatus = 0 + Validator_INACTIVE Validator_ValidatorStatus = 1 +) + +var Validator_ValidatorStatus_name = map[int32]string{ + 0: "ACTIVE", + 1: "INACTIVE", +} + +var Validator_ValidatorStatus_value = map[string]int32{ + "ACTIVE": 0, + "INACTIVE": 1, +} + +func (x Validator_ValidatorStatus) String() string { + return proto.EnumName(Validator_ValidatorStatus_name, int32(x)) +} + +func (Validator_ValidatorStatus) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_5d2f32e16bd6ab8f, []int{1, 0} +} + +type ValidatorExchangeRate struct { + InternalTokensToSharesRate github_com_cosmos_cosmos_sdk_types.LegacyDec `protobuf:"bytes,1,opt,name=internal_tokens_to_shares_rate,json=internalTokensToSharesRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"internal_tokens_to_shares_rate"` + EpochNumber uint64 `protobuf:"varint,2,opt,name=epoch_number,json=epochNumber,proto3" json:"epoch_number,omitempty"` +} + +func (m *ValidatorExchangeRate) Reset() { *m = ValidatorExchangeRate{} } +func (m *ValidatorExchangeRate) String() string { return proto.CompactTextString(m) } +func (*ValidatorExchangeRate) ProtoMessage() {} +func (*ValidatorExchangeRate) Descriptor() ([]byte, []int) { + return fileDescriptor_5d2f32e16bd6ab8f, []int{0} +} +func (m *ValidatorExchangeRate) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ValidatorExchangeRate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ValidatorExchangeRate.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ValidatorExchangeRate) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidatorExchangeRate.Merge(m, src) +} +func (m *ValidatorExchangeRate) XXX_Size() int { + return m.Size() +} +func (m *ValidatorExchangeRate) XXX_DiscardUnknown() { + xxx_messageInfo_ValidatorExchangeRate.DiscardUnknown(m) +} + +var xxx_messageInfo_ValidatorExchangeRate proto.InternalMessageInfo + +func (m *ValidatorExchangeRate) GetEpochNumber() uint64 { + if m != nil { + return m.EpochNumber + } + return 0 +} + +type Validator struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` + Status Validator_ValidatorStatus `protobuf:"varint,3,opt,name=status,proto3,enum=stride.stakeibc.Validator_ValidatorStatus" json:"status,omitempty"` + CommissionRate uint64 `protobuf:"varint,4,opt,name=commission_rate,json=commissionRate,proto3" json:"commission_rate,omitempty"` + DelegationAmt uint64 `protobuf:"varint,5,opt,name=delegation_amt,json=delegationAmt,proto3" json:"delegation_amt,omitempty"` + Weight uint64 `protobuf:"varint,6,opt,name=weight,proto3" json:"weight,omitempty"` + InternalExchangeRate *ValidatorExchangeRate `protobuf:"bytes,7,opt,name=internal_exchange_rate,json=internalExchangeRate,proto3" json:"internal_exchange_rate,omitempty"` +} + +func (m *Validator) Reset() { *m = Validator{} } +func (m *Validator) String() string { return proto.CompactTextString(m) } +func (*Validator) ProtoMessage() {} +func (*Validator) Descriptor() ([]byte, []int) { + return fileDescriptor_5d2f32e16bd6ab8f, []int{1} +} +func (m *Validator) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Validator) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Validator.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Validator) XXX_Merge(src proto.Message) { + xxx_messageInfo_Validator.Merge(m, src) +} +func (m *Validator) XXX_Size() int { + return m.Size() +} +func (m *Validator) XXX_DiscardUnknown() { + xxx_messageInfo_Validator.DiscardUnknown(m) +} + +var xxx_messageInfo_Validator proto.InternalMessageInfo + +func (m *Validator) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Validator) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func (m *Validator) GetStatus() Validator_ValidatorStatus { + if m != nil { + return m.Status + } + return Validator_ACTIVE +} + +func (m *Validator) GetCommissionRate() uint64 { + if m != nil { + return m.CommissionRate + } + return 0 +} + +func (m *Validator) GetDelegationAmt() uint64 { + if m != nil { + return m.DelegationAmt + } + return 0 +} + +func (m *Validator) GetWeight() uint64 { + if m != nil { + return m.Weight + } + return 0 +} + +func (m *Validator) GetInternalExchangeRate() *ValidatorExchangeRate { + if m != nil { + return m.InternalExchangeRate + } + return nil +} + +func init() { + proto.RegisterEnum("stride.stakeibc.V2Validator_ValidatorStatus", Validator_ValidatorStatus_name, Validator_ValidatorStatus_value) + proto.RegisterType((*ValidatorExchangeRate)(nil), "stride.stakeibc.V2ValidatorExchangeRate") + proto.RegisterType((*Validator)(nil), "stride.stakeibc.V2Validator") +} + +func init() { proto.RegisterFile("stride/stakeibc/validator.proto", fileDescriptor_5d2f32e16bd6ab8f) } + +var fileDescriptor_5d2f32e16bd6ab8f = []byte{ + // 486 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x52, 0x31, 0x6f, 0xd3, 0x40, + 0x14, 0xce, 0xd1, 0xe0, 0x92, 0x6b, 0x49, 0xd0, 0x29, 0x54, 0x26, 0x83, 0x13, 0x22, 0x51, 0x22, + 0x50, 0x6c, 0x11, 0x18, 0x59, 0x12, 0xda, 0xa1, 0x02, 0x75, 0x70, 0xa2, 0x0e, 0x08, 0xc9, 0x3a, + 0xdb, 0x4f, 0xb6, 0x95, 0xd8, 0x17, 0xf9, 0x5e, 0x4a, 0xd9, 0x98, 0x99, 0xf8, 0x31, 0x5d, 0xd9, + 0x3b, 0x56, 0x9d, 0x10, 0x43, 0x85, 0x92, 0x3f, 0x82, 0x7a, 0x3e, 0x27, 0x51, 0x25, 0xa6, 0x7b, + 0xef, 0x7b, 0xdf, 0xbb, 0xef, 0xbb, 0x7b, 0x8f, 0xb6, 0x25, 0xe6, 0x49, 0x08, 0x8e, 0x44, 0x3e, + 0x85, 0xc4, 0x0f, 0x9c, 0x73, 0x3e, 0x4b, 0x42, 0x8e, 0x22, 0xb7, 0xe7, 0xb9, 0x40, 0xc1, 0x1a, + 0x05, 0xc1, 0x2e, 0x09, 0xad, 0x67, 0x81, 0x90, 0xa9, 0x90, 0x9e, 0x2a, 0x3b, 0x45, 0x52, 0x70, + 0x5b, 0xcd, 0x48, 0x44, 0xa2, 0xc0, 0xef, 0xa2, 0x02, 0xed, 0xfe, 0x22, 0xf4, 0xe9, 0x59, 0x79, + 0xeb, 0xf1, 0x45, 0x10, 0xf3, 0x2c, 0x02, 0x97, 0x23, 0xb0, 0xef, 0x84, 0x5a, 0x49, 0x86, 0x90, + 0x67, 0x7c, 0xe6, 0xa1, 0x98, 0x42, 0x26, 0x3d, 0x14, 0x9e, 0x8c, 0x79, 0x0e, 0xd2, 0xcb, 0x39, + 0x82, 0x49, 0x3a, 0xa4, 0x57, 0x1b, 0xbd, 0xbf, 0xba, 0x6d, 0x57, 0xfe, 0xdc, 0xb6, 0x0f, 0xa3, + 0x04, 0xe3, 0x85, 0x6f, 0x07, 0x22, 0xd5, 0xca, 0xfa, 0xe8, 0xcb, 0x70, 0xea, 0xe0, 0xb7, 0x39, + 0x48, 0xfb, 0x08, 0x82, 0x9b, 0xcb, 0x3e, 0xd5, 0xc6, 0x8e, 0x20, 0x70, 0x5b, 0xa5, 0xc6, 0x44, + 0x49, 0x4c, 0xc4, 0x58, 0x09, 0x28, 0x0b, 0xcf, 0xe9, 0x3e, 0xcc, 0x45, 0x10, 0x7b, 0xd9, 0x22, + 0xf5, 0x21, 0x37, 0x1f, 0x74, 0x48, 0xaf, 0xea, 0xee, 0x29, 0xec, 0x54, 0x41, 0xdd, 0x1f, 0x3b, + 0xb4, 0xb6, 0xf6, 0xcf, 0x18, 0xad, 0x66, 0x3c, 0xd5, 0xc6, 0x5c, 0x15, 0xb3, 0x01, 0xdd, 0xe5, + 0x61, 0x98, 0x83, 0x94, 0xaa, 0xbf, 0x36, 0x32, 0x6f, 0x2e, 0xfb, 0x4d, 0xed, 0x60, 0x58, 0x54, + 0xc6, 0x98, 0x27, 0x59, 0xe4, 0x96, 0x44, 0x36, 0xa2, 0x86, 0x44, 0x8e, 0x0b, 0x69, 0xee, 0x74, + 0x48, 0xaf, 0x3e, 0x78, 0x65, 0xdf, 0xfb, 0x68, 0x7b, 0xad, 0xb9, 0x89, 0xc6, 0xaa, 0xc3, 0xd5, + 0x9d, 0xec, 0x25, 0x6d, 0x04, 0x22, 0x4d, 0x13, 0x29, 0x13, 0x91, 0x15, 0xff, 0x55, 0x55, 0xfe, + 0xeb, 0x1b, 0x58, 0xbd, 0xf2, 0x05, 0xad, 0x87, 0x30, 0x83, 0x88, 0xe3, 0x1d, 0x91, 0xa7, 0x68, + 0x3e, 0x54, 0xbc, 0xc7, 0x1b, 0x74, 0x98, 0x22, 0x3b, 0xa0, 0xc6, 0x57, 0x48, 0xa2, 0x18, 0x4d, + 0x43, 0x95, 0x75, 0xc6, 0xbe, 0xd0, 0x83, 0xf5, 0x98, 0x40, 0x0f, 0xb0, 0x90, 0xdb, 0xed, 0x90, + 0xde, 0xde, 0xe0, 0xf0, 0xff, 0xde, 0xb7, 0xe7, 0xed, 0x36, 0xcb, 0x5b, 0xb6, 0xd1, 0xee, 0x6b, + 0xda, 0xb8, 0xf7, 0x40, 0x46, 0xa9, 0x31, 0xfc, 0x30, 0x39, 0x39, 0x3b, 0x7e, 0x52, 0x61, 0xfb, + 0xf4, 0xd1, 0xc9, 0xa9, 0xce, 0xc8, 0xe8, 0xe3, 0xd5, 0xd2, 0x22, 0xd7, 0x4b, 0x8b, 0xfc, 0x5d, + 0x5a, 0xe4, 0xe7, 0xca, 0xaa, 0x5c, 0xaf, 0xac, 0xca, 0xef, 0x95, 0x55, 0xf9, 0xfc, 0x66, 0x6b, + 0x37, 0xc6, 0xca, 0x4e, 0xff, 0x13, 0xf7, 0xa5, 0xa3, 0x17, 0xfc, 0xfc, 0x9d, 0x73, 0xb1, 0xd9, + 0x72, 0xb5, 0x2a, 0xbe, 0xa1, 0x16, 0xf4, 0xed, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x61, 0x12, + 0xd4, 0xa2, 0x05, 0x03, 0x00, 0x00, +} + +func (m *ValidatorExchangeRate) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ValidatorExchangeRate) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ValidatorExchangeRate) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.EpochNumber != 0 { + i = encodeVarintValidator(dAtA, i, uint64(m.EpochNumber)) + i-- + dAtA[i] = 0x10 + } + { + size := m.InternalTokensToSharesRate.Size() + i -= size + if _, err := m.InternalTokensToSharesRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintValidator(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *Validator) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Validator) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Validator) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.InternalExchangeRate != nil { + { + size, err := m.InternalExchangeRate.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintValidator(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + if m.Weight != 0 { + i = encodeVarintValidator(dAtA, i, uint64(m.Weight)) + i-- + dAtA[i] = 0x30 + } + if m.DelegationAmt != 0 { + i = encodeVarintValidator(dAtA, i, uint64(m.DelegationAmt)) + i-- + dAtA[i] = 0x28 + } + if m.CommissionRate != 0 { + i = encodeVarintValidator(dAtA, i, uint64(m.CommissionRate)) + i-- + dAtA[i] = 0x20 + } + if m.Status != 0 { + i = encodeVarintValidator(dAtA, i, uint64(m.Status)) + i-- + dAtA[i] = 0x18 + } + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintValidator(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0x12 + } + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintValidator(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintValidator(dAtA []byte, offset int, v uint64) int { + offset -= sovValidator(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *ValidatorExchangeRate) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.InternalTokensToSharesRate.Size() + n += 1 + l + sovValidator(uint64(l)) + if m.EpochNumber != 0 { + n += 1 + sovValidator(uint64(m.EpochNumber)) + } + return n +} + +func (m *Validator) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + if l > 0 { + n += 1 + l + sovValidator(uint64(l)) + } + l = len(m.Address) + if l > 0 { + n += 1 + l + sovValidator(uint64(l)) + } + if m.Status != 0 { + n += 1 + sovValidator(uint64(m.Status)) + } + if m.CommissionRate != 0 { + n += 1 + sovValidator(uint64(m.CommissionRate)) + } + if m.DelegationAmt != 0 { + n += 1 + sovValidator(uint64(m.DelegationAmt)) + } + if m.Weight != 0 { + n += 1 + sovValidator(uint64(m.Weight)) + } + if m.InternalExchangeRate != nil { + l = m.InternalExchangeRate.Size() + n += 1 + l + sovValidator(uint64(l)) + } + return n +} + +func sovValidator(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozValidator(x uint64) (n int) { + return sovValidator(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *ValidatorExchangeRate) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ValidatorExchangeRate: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ValidatorExchangeRate: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InternalTokensToSharesRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthValidator + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthValidator + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.InternalTokensToSharesRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EpochNumber", wireType) + } + m.EpochNumber = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EpochNumber |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipValidator(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthValidator + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Validator) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Validator: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Validator: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthValidator + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthValidator + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthValidator + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthValidator + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", wireType) + } + m.Status = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Status |= Validator_ValidatorStatus(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CommissionRate", wireType) + } + m.CommissionRate = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.CommissionRate |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DelegationAmt", wireType) + } + m.DelegationAmt = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DelegationAmt |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Weight", wireType) + } + m.Weight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Weight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InternalExchangeRate", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthValidator + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthValidator + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.InternalExchangeRate == nil { + m.InternalExchangeRate = &ValidatorExchangeRate{} + } + if err := m.InternalExchangeRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipValidator(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthValidator + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipValidator(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowValidator + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowValidator + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowValidator + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthValidator + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupValidator + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthValidator + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthValidator = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowValidator = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupValidator = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/stakeibc/migrations/v3/convert.go b/x/stakeibc/migrations/v3/convert.go new file mode 100644 index 00000000000..58617143569 --- /dev/null +++ b/x/stakeibc/migrations/v3/convert.go @@ -0,0 +1,87 @@ +package v3 + +import ( + sdkmath "cosmossdk.io/math" + + "github.com/osmosis-labs/osmosis/v27/utils" + oldstakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/migrations/v3/types" + newstakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +var ( + // The threshold, denominated in percentage of TVL, of when a slash query should + // be submitted (1 => 1%) + ValidatorSlashQueryThreshold uint64 = 1 + // The exchange rate here does not matter since it will be updated after the slash query + // Setting it to this value makes it easier to verify that we've submitted the query + DefaultExchangeRate = sdkmath.LegacyMustNewDecFromStr("0.999999999999999999") +) + +// Converts an old validator data type to the new schema +// Changes are as follows: +// - Added SlashQueryProgressTracker field +// - Added SlashQueryCheckpoint field +// - Added DelegationsInProgress field +// - Added SlashQueryInProgress field +// - InternalExchangeRate is now a decimal named SharesToTokensRate +// - DelegationAmt renamed to Delegation +func convertToNewValidator(oldValidator oldstakeibctypes.Validator, totalDelegations sdkmath.Int) newstakeibctypes.Validator { + queryThreshold := sdkmath.LegacyNewDecWithPrec(utils.UintToInt(ValidatorSlashQueryThreshold), 2) // percentage + slashQueryCheckpoint := queryThreshold.Mul(sdkmath.LegacyNewDecFromInt(totalDelegations)).TruncateInt() + + // Note: The old name of "TokensToShares" was slightly misleading - it represents the conversion of shares to tokens + sharesToTokensRate := DefaultExchangeRate + if oldValidator.InternalExchangeRate != nil && !oldValidator.InternalExchangeRate.InternalTokensToSharesRate.IsNil() { + sharesToTokensRate = oldValidator.InternalExchangeRate.InternalTokensToSharesRate + } + + return newstakeibctypes.Validator{ + Name: oldValidator.Name, + Address: oldValidator.Address, + Weight: oldValidator.Weight, + Delegation: oldValidator.DelegationAmt, + SlashQueryProgressTracker: sdkmath.ZeroInt(), + SlashQueryCheckpoint: slashQueryCheckpoint, + SharesToTokensRate: sharesToTokensRate, + DelegationChangesInProgress: 0, + SlashQueryInProgress: false, + } +} + +// Converts an old host zone data type to the new schema +// Changes are as follows: +// - ICA Accounts are now strings +// - Address has been renamed to DepositAddress +// - UnbondingFrequency has been changed to UnbondingPeriod +// - StakedBal has been renamed to TotalDelegations +// - Removed blacklisted validators +func convertToNewHostZone(oldHostZone oldstakeibctypes.HostZone) newstakeibctypes.HostZone { + var validators []*newstakeibctypes.Validator + for _, oldValidator := range oldHostZone.Validators { + newValidator := convertToNewValidator(*oldValidator, oldHostZone.StakedBal) + validators = append(validators, &newValidator) + } + + return newstakeibctypes.HostZone{ + ChainId: oldHostZone.ChainId, + Bech32Prefix: oldHostZone.Bech32Prefix, + ConnectionId: oldHostZone.ConnectionId, + TransferChannelId: oldHostZone.TransferChannelId, + IbcDenom: oldHostZone.IbcDenom, + HostDenom: oldHostZone.HostDenom, + UnbondingPeriod: (oldHostZone.UnbondingFrequency - 1) * 7, + Validators: validators, + DepositAddress: oldHostZone.Address, + WithdrawalIcaAddress: oldHostZone.WithdrawalAccount.GetAddress(), + FeeIcaAddress: oldHostZone.FeeAccount.GetAddress(), + DelegationIcaAddress: oldHostZone.DelegationAccount.GetAddress(), + RedemptionIcaAddress: oldHostZone.RedemptionAccount.GetAddress(), + TotalDelegations: oldHostZone.StakedBal, + LastRedemptionRate: oldHostZone.LastRedemptionRate, + RedemptionRate: oldHostZone.RedemptionRate, + MinRedemptionRate: oldHostZone.MinRedemptionRate, + MaxRedemptionRate: oldHostZone.MaxRedemptionRate, + LsmLiquidStakeEnabled: false, + Halted: oldHostZone.Halted, + } +} diff --git a/x/stakeibc/migrations/v3/convert_test.go b/x/stakeibc/migrations/v3/convert_test.go new file mode 100644 index 00000000000..83561577380 --- /dev/null +++ b/x/stakeibc/migrations/v3/convert_test.go @@ -0,0 +1,187 @@ +package v3 + +import ( + "testing" + + sdkmath "cosmossdk.io/math" + + "github.com/stretchr/testify/require" + + oldstakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/migrations/v3/types" + newstakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func TestConvertToNewValidator(t *testing.T) { + name := "name" + address := "address" + weight := uint64(3) + delegation := sdkmath.NewInt(4) + sharesToTokensRate := sdkmath.LegacyNewDec(5) + tvl := sdkmath.NewInt(1_000_000) + slashCheckpoint := sdkmath.NewInt(10_000) // 1% of TVL + + // First convert a validator with no exchange rate + // It should get filled in with the default + oldValidator := oldstakeibctypes.Validator{ + Name: name, + Address: address, + DelegationAmt: delegation, + Weight: weight, + } + expectedNewValidator := newstakeibctypes.Validator{ + Name: name, + Address: address, + Weight: weight, + Delegation: delegation, + SlashQueryProgressTracker: sdkmath.ZeroInt(), + SlashQueryCheckpoint: slashCheckpoint, + DelegationChangesInProgress: 0, + SharesToTokensRate: DefaultExchangeRate, + SlashQueryInProgress: false, + } + + actualNewValidator := convertToNewValidator(oldValidator, tvl) + require.Equal(t, expectedNewValidator, actualNewValidator) + + // Then add an exchange rate and convert again + oldValidator.InternalExchangeRate = &oldstakeibctypes.ValidatorExchangeRate{ + InternalTokensToSharesRate: sharesToTokensRate, + EpochNumber: 1, + } + expectedNewValidator.SharesToTokensRate = sharesToTokensRate + + actualNewValidator = convertToNewValidator(oldValidator, tvl) + require.Equal(t, expectedNewValidator, actualNewValidator) +} + +func TestConvertToNewHostZone(t *testing.T) { + chainId := "chain" + connectionId := "connection" + bechPrefix := "bech" + channelId := "channel" + ibcDenom := "ibc" + hostDenom := "host" + + depositAddress := "address" + withdrawalAddress := "withdrawal" + feeAddress := "fee" + delegationAddress := "delegation" + redemptionAddress := "redemption" + + redemptionRate := sdkmath.LegacyNewDec(1) + lastRedemptionRate := sdkmath.LegacyNewDec(2) + minRedemptionRate := sdkmath.LegacyMustNewDecFromStr("0.95") + maxRedemptionRate := sdkmath.LegacyMustNewDecFromStr("1.25") + unbondingFrequency := uint64(4) + unbondingPeriod := uint64(21) + + halted := true + + valAddress := "val" + valDelegation := sdkmath.NewInt(5) + valWeight := uint64(6) + totalDelegations := sdkmath.NewInt(1_000_000) + slashCheckpoint := sdkmath.NewInt(10_000) // 1% of TVL + sharesToTokensRate := sdkmath.LegacyMustNewDecFromStr("0.99") + + // The stakedBal field and validators get updated on the host zone + oldHostZone := oldstakeibctypes.HostZone{ + ChainId: chainId, + ConnectionId: connectionId, + Bech32Prefix: bechPrefix, + TransferChannelId: channelId, + Validators: []*oldstakeibctypes.Validator{ + { + // Validator with an exchange rate + Address: valAddress, + DelegationAmt: valDelegation, + Weight: valWeight, + InternalExchangeRate: &oldstakeibctypes.ValidatorExchangeRate{ + InternalTokensToSharesRate: sharesToTokensRate, + EpochNumber: 1, + }, + }, + { + // Validator without an exchange rate + Address: valAddress, + DelegationAmt: valDelegation, + Weight: valWeight, + InternalExchangeRate: nil, + }, + }, + BlacklistedValidators: []*oldstakeibctypes.Validator{ + {Address: "black", DelegationAmt: valDelegation}, + }, + WithdrawalAccount: &oldstakeibctypes.ICAAccount{ + Address: withdrawalAddress, Target: oldstakeibctypes.ICAAccountType_WITHDRAWAL, + }, + FeeAccount: &oldstakeibctypes.ICAAccount{ + Address: feeAddress, Target: oldstakeibctypes.ICAAccountType_FEE, + }, + DelegationAccount: &oldstakeibctypes.ICAAccount{ + Address: delegationAddress, Target: oldstakeibctypes.ICAAccountType_DELEGATION, + }, + RedemptionAccount: &oldstakeibctypes.ICAAccount{ + Address: redemptionAddress, Target: oldstakeibctypes.ICAAccountType_REDEMPTION, + }, + IbcDenom: ibcDenom, + HostDenom: hostDenom, + RedemptionRate: redemptionRate, + LastRedemptionRate: lastRedemptionRate, + UnbondingFrequency: unbondingFrequency, + StakedBal: totalDelegations, + Address: depositAddress, + Halted: halted, + MinRedemptionRate: minRedemptionRate, + MaxRedemptionRate: maxRedemptionRate, + } + + expectedNewHostZone := newstakeibctypes.HostZone{ + ChainId: chainId, + ConnectionId: connectionId, + Bech32Prefix: bechPrefix, + TransferChannelId: channelId, + IbcDenom: ibcDenom, + HostDenom: hostDenom, + UnbondingPeriod: unbondingPeriod, + Validators: []*newstakeibctypes.Validator{ + { + // Validator with an exchange rate + Address: valAddress, + Weight: valWeight, + Delegation: valDelegation, + SlashQueryProgressTracker: sdkmath.ZeroInt(), + SlashQueryCheckpoint: slashCheckpoint, + SharesToTokensRate: sharesToTokensRate, + DelegationChangesInProgress: 0, + SlashQueryInProgress: false, + }, + { + // Validator with nil exchange rate coalesced with 1 + Address: valAddress, + Weight: valWeight, + Delegation: valDelegation, + SlashQueryProgressTracker: sdkmath.ZeroInt(), + SlashQueryCheckpoint: slashCheckpoint, + SharesToTokensRate: DefaultExchangeRate, + DelegationChangesInProgress: 0, + SlashQueryInProgress: false, + }, + }, + DepositAddress: depositAddress, + WithdrawalIcaAddress: withdrawalAddress, + FeeIcaAddress: feeAddress, + DelegationIcaAddress: delegationAddress, + RedemptionIcaAddress: redemptionAddress, + TotalDelegations: totalDelegations, + RedemptionRate: redemptionRate, + LastRedemptionRate: lastRedemptionRate, + MinRedemptionRate: minRedemptionRate, + MaxRedemptionRate: maxRedemptionRate, + LsmLiquidStakeEnabled: false, + Halted: halted, + } + + actualNewHostZone := convertToNewHostZone(oldHostZone) + require.Equal(t, expectedNewHostZone, actualNewHostZone) +} diff --git a/x/stakeibc/migrations/v3/migrations.go b/x/stakeibc/migrations/v3/migrations.go new file mode 100644 index 00000000000..b05f2a0ded1 --- /dev/null +++ b/x/stakeibc/migrations/v3/migrations.go @@ -0,0 +1,46 @@ +package v3 + +import ( + "cosmossdk.io/store/prefix" + storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/codec" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + + oldstakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/migrations/v3/types" + stakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func migrateHostZone(store storetypes.KVStore, cdc codec.BinaryCodec) error { + stakeibcStore := prefix.NewStore(store, []byte(stakeibctypes.HostZoneKey)) + + iterator := stakeibcStore.Iterator(nil, nil) + defer iterator.Close() + + for ; iterator.Valid(); iterator.Next() { + // Deserialize using the old type + var oldHostZone oldstakeibctypes.HostZone + err := cdc.Unmarshal(iterator.Value(), &oldHostZone) + if err != nil { + return errorsmod.Wrapf(err, "unable to unmarshal host zone (%v) using old data type", iterator.Key()) + } + + // Convert and serialize using the new type + newHostZone := convertToNewHostZone(oldHostZone) + newHostZoneBz, err := cdc.Marshal(&newHostZone) + if err != nil { + return errorsmod.Wrapf(err, "unable to marshal host zone (%v) using new data type", iterator.Key()) + } + + // Store new type + stakeibcStore.Set(iterator.Key(), newHostZoneBz) + } + + return nil +} + +func MigrateStore(ctx sdk.Context, storeKey storetypes.StoreKey, cdc codec.BinaryCodec) error { + store := ctx.KVStore(storeKey) + return migrateHostZone(store, cdc) +} diff --git a/x/stakeibc/migrations/v3/types/host_zone.pb.go b/x/stakeibc/migrations/v3/types/host_zone.pb.go new file mode 100644 index 00000000000..38049f5073b --- /dev/null +++ b/x/stakeibc/migrations/v3/types/host_zone.pb.go @@ -0,0 +1,1349 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/stakeibc/host_zone.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + github_com_cosmos_cosmos_sdk_types "cosmossdk.io/math" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// next id: 22 +type HostZone struct { + ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + ConnectionId string `protobuf:"bytes,2,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty"` + Bech32Prefix string `protobuf:"bytes,17,opt,name=bech32prefix,proto3" json:"bech32prefix,omitempty"` + TransferChannelId string `protobuf:"bytes,12,opt,name=transfer_channel_id,json=transferChannelId,proto3" json:"transfer_channel_id,omitempty"` + Validators []*Validator `protobuf:"bytes,3,rep,name=validators,proto3" json:"validators,omitempty"` + BlacklistedValidators []*Validator `protobuf:"bytes,4,rep,name=blacklisted_validators,json=blacklistedValidators,proto3" json:"blacklisted_validators,omitempty"` + WithdrawalAccount *ICAAccount `protobuf:"bytes,5,opt,name=withdrawal_account,json=withdrawalAccount,proto3" json:"withdrawal_account,omitempty"` + FeeAccount *ICAAccount `protobuf:"bytes,6,opt,name=fee_account,json=feeAccount,proto3" json:"fee_account,omitempty"` + DelegationAccount *ICAAccount `protobuf:"bytes,7,opt,name=delegation_account,json=delegationAccount,proto3" json:"delegation_account,omitempty"` + RedemptionAccount *ICAAccount `protobuf:"bytes,16,opt,name=redemption_account,json=redemptionAccount,proto3" json:"redemption_account,omitempty"` + // ibc denom on stride + IbcDenom string `protobuf:"bytes,8,opt,name=ibc_denom,json=ibcDenom,proto3" json:"ibc_denom,omitempty"` + // native denom on host zone + HostDenom string `protobuf:"bytes,9,opt,name=host_denom,json=hostDenom,proto3" json:"host_denom,omitempty"` + // TODO(TEST-68): Should we make this an array and store the last n redemption + // rates then calculate a TWARR? + LastRedemptionRate github_com_cosmos_cosmos_sdk_types.LegacyDec `protobuf:"bytes,10,opt,name=last_redemption_rate,json=lastRedemptionRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"last_redemption_rate"` + RedemptionRate github_com_cosmos_cosmos_sdk_types.LegacyDec `protobuf:"bytes,11,opt,name=redemption_rate,json=redemptionRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"redemption_rate"` + // stores how many days we should wait before issuing unbondings + UnbondingFrequency uint64 `protobuf:"varint,14,opt,name=unbonding_frequency,json=unbondingFrequency,proto3" json:"unbonding_frequency,omitempty"` + // TODO(TEST-101) int to dec + StakedBal github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,13,opt,name=staked_bal,json=stakedBal,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"staked_bal"` + Address string `protobuf:"bytes,18,opt,name=address,proto3" json:"address,omitempty" yaml:"address"` + Halted bool `protobuf:"varint,19,opt,name=halted,proto3" json:"halted,omitempty"` + MinRedemptionRate github_com_cosmos_cosmos_sdk_types.LegacyDec `protobuf:"bytes,20,opt,name=min_redemption_rate,json=minRedemptionRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"min_redemption_rate"` + MaxRedemptionRate github_com_cosmos_cosmos_sdk_types.LegacyDec `protobuf:"bytes,21,opt,name=max_redemption_rate,json=maxRedemptionRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"max_redemption_rate"` +} + +func (m *HostZone) Reset() { *m = HostZone{} } +func (m *HostZone) String() string { return proto.CompactTextString(m) } +func (*HostZone) ProtoMessage() {} +func (*HostZone) Descriptor() ([]byte, []int) { + return fileDescriptor_f81bf5b42c61245a, []int{0} +} +func (m *HostZone) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HostZone) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_HostZone.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *HostZone) XXX_Merge(src proto.Message) { + xxx_messageInfo_HostZone.Merge(m, src) +} +func (m *HostZone) XXX_Size() int { + return m.Size() +} +func (m *HostZone) XXX_DiscardUnknown() { + xxx_messageInfo_HostZone.DiscardUnknown(m) +} + +var xxx_messageInfo_HostZone proto.InternalMessageInfo + +func (m *HostZone) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +func (m *HostZone) GetConnectionId() string { + if m != nil { + return m.ConnectionId + } + return "" +} + +func (m *HostZone) GetBech32Prefix() string { + if m != nil { + return m.Bech32Prefix + } + return "" +} + +func (m *HostZone) GetTransferChannelId() string { + if m != nil { + return m.TransferChannelId + } + return "" +} + +func (m *HostZone) GetValidators() []*Validator { + if m != nil { + return m.Validators + } + return nil +} + +func (m *HostZone) GetBlacklistedValidators() []*Validator { + if m != nil { + return m.BlacklistedValidators + } + return nil +} + +func (m *HostZone) GetWithdrawalAccount() *ICAAccount { + if m != nil { + return m.WithdrawalAccount + } + return nil +} + +func (m *HostZone) GetFeeAccount() *ICAAccount { + if m != nil { + return m.FeeAccount + } + return nil +} + +func (m *HostZone) GetDelegationAccount() *ICAAccount { + if m != nil { + return m.DelegationAccount + } + return nil +} + +func (m *HostZone) GetRedemptionAccount() *ICAAccount { + if m != nil { + return m.RedemptionAccount + } + return nil +} + +func (m *HostZone) GetIbcDenom() string { + if m != nil { + return m.IbcDenom + } + return "" +} + +func (m *HostZone) GetHostDenom() string { + if m != nil { + return m.HostDenom + } + return "" +} + +func (m *HostZone) GetUnbondingFrequency() uint64 { + if m != nil { + return m.UnbondingFrequency + } + return 0 +} + +func (m *HostZone) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func (m *HostZone) GetHalted() bool { + if m != nil { + return m.Halted + } + return false +} + +func init() { + proto.RegisterType((*HostZone)(nil), "stride.stakeibc.V3HostZone") +} + +func init() { proto.RegisterFile("stride/stakeibc/host_zone.proto", fileDescriptor_f81bf5b42c61245a) } + +var fileDescriptor_f81bf5b42c61245a = []byte{ + // 671 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x94, 0xcd, 0x4e, 0xdb, 0x4e, + 0x14, 0xc5, 0xe3, 0x3f, 0xfc, 0x21, 0x99, 0xf0, 0x95, 0x09, 0x20, 0x03, 0x6a, 0x92, 0xa6, 0x52, + 0x95, 0x45, 0x71, 0xd4, 0xb0, 0x43, 0x6c, 0xf8, 0x50, 0xd5, 0x20, 0xba, 0xa8, 0x2b, 0xb1, 0x60, + 0x63, 0x8d, 0x67, 0x6e, 0x92, 0x11, 0xce, 0x4c, 0xea, 0x99, 0x40, 0xe8, 0x23, 0x74, 0xd5, 0x87, + 0xe9, 0x43, 0xb0, 0x44, 0x5d, 0x55, 0x5d, 0xa0, 0x0a, 0xde, 0xa0, 0x4f, 0x50, 0x65, 0x6c, 0x27, + 0x26, 0x59, 0x40, 0x25, 0x56, 0xf6, 0xdc, 0x73, 0xee, 0xef, 0x8c, 0xee, 0xd8, 0x83, 0xca, 0x4a, + 0x87, 0x9c, 0x41, 0x5d, 0x69, 0x72, 0x0e, 0xdc, 0xa7, 0xf5, 0x8e, 0x54, 0xda, 0xfb, 0x22, 0x05, + 0x38, 0xbd, 0x50, 0x6a, 0x89, 0x97, 0x23, 0x83, 0x93, 0x18, 0x36, 0xa7, 0x3a, 0x2e, 0x48, 0xc0, + 0x19, 0xd1, 0x32, 0x8c, 0x3a, 0x36, 0x5f, 0x4e, 0x1a, 0x38, 0x25, 0x1e, 0xa1, 0x54, 0xf6, 0x85, + 0x8e, 0x2d, 0xab, 0x6d, 0xd9, 0x96, 0xe6, 0xb5, 0x3e, 0x7c, 0x8b, 0xab, 0x1b, 0x54, 0xaa, 0xae, + 0x54, 0x5e, 0x24, 0x44, 0x8b, 0x48, 0xaa, 0x7e, 0x45, 0x28, 0xfb, 0x5e, 0x2a, 0x7d, 0x26, 0x05, + 0xe0, 0x0d, 0x94, 0xa5, 0x1d, 0xc2, 0x85, 0xc7, 0x99, 0x6d, 0x55, 0xac, 0x5a, 0xce, 0x9d, 0x37, + 0xeb, 0x26, 0xc3, 0xaf, 0xd0, 0x22, 0x95, 0x42, 0x00, 0xd5, 0x5c, 0x1a, 0xfd, 0x3f, 0xa3, 0x2f, + 0x8c, 0x8b, 0x4d, 0x86, 0xab, 0x68, 0xc1, 0x07, 0xda, 0xd9, 0x69, 0xf4, 0x42, 0x68, 0xf1, 0x81, + 0x5d, 0x88, 0x3c, 0xe9, 0x1a, 0x76, 0x50, 0x51, 0x87, 0x44, 0xa8, 0x16, 0x84, 0x1e, 0xed, 0x10, + 0x21, 0x20, 0x18, 0xe2, 0x16, 0x8c, 0xb5, 0x90, 0x48, 0x87, 0x91, 0xd2, 0x64, 0x78, 0x17, 0xa1, + 0xd1, 0x1c, 0x94, 0x3d, 0x53, 0x99, 0xa9, 0xe5, 0x1b, 0x9b, 0xce, 0xc4, 0xec, 0x9c, 0xd3, 0xc4, + 0xe2, 0xa6, 0xdc, 0xf8, 0x23, 0x5a, 0xf7, 0x03, 0x42, 0xcf, 0x03, 0xae, 0x34, 0x30, 0x2f, 0xc5, + 0x99, 0x7d, 0x94, 0xb3, 0x96, 0xea, 0x3c, 0x1d, 0x23, 0x8f, 0x11, 0xbe, 0xe4, 0xba, 0xc3, 0x42, + 0x72, 0x49, 0x82, 0x64, 0xf8, 0xf6, 0xff, 0x15, 0xab, 0x96, 0x6f, 0x6c, 0x4d, 0xe1, 0x9a, 0x87, + 0xfb, 0xfb, 0x91, 0xc5, 0x2d, 0x8c, 0xdb, 0xe2, 0x12, 0xde, 0x43, 0xf9, 0x16, 0xc0, 0x08, 0x32, + 0xf7, 0x38, 0x04, 0xb5, 0x00, 0x92, 0xee, 0x63, 0x84, 0x19, 0x04, 0xd0, 0x26, 0xe6, 0x44, 0x12, + 0xc8, 0xfc, 0x13, 0x76, 0x32, 0x6e, 0x4b, 0xb1, 0x42, 0x60, 0xd0, 0xed, 0x3d, 0x60, 0xad, 0x3c, + 0x81, 0x35, 0x6e, 0x4b, 0x58, 0x5b, 0x28, 0xc7, 0x7d, 0xea, 0x31, 0x10, 0xb2, 0x6b, 0x67, 0xcd, + 0xb1, 0x66, 0xb9, 0x4f, 0x8f, 0x86, 0x6b, 0xfc, 0x02, 0x21, 0xf3, 0x1f, 0x44, 0x6a, 0xce, 0xa8, + 0xb9, 0x61, 0x25, 0x92, 0x05, 0x5a, 0x0d, 0x88, 0xd2, 0x5e, 0x6a, 0x33, 0x21, 0xd1, 0x60, 0xa3, + 0xa1, 0xf1, 0x60, 0xef, 0xfa, 0xb6, 0x9c, 0xf9, 0x75, 0x5b, 0x7e, 0xdd, 0xe6, 0xba, 0xd3, 0xf7, + 0x1d, 0x2a, 0xbb, 0xf1, 0xc7, 0x1c, 0x3f, 0xb6, 0x15, 0x3b, 0xaf, 0xeb, 0xab, 0x1e, 0x28, 0xe7, + 0x08, 0xe8, 0x8f, 0xef, 0xdb, 0x28, 0xfe, 0xd6, 0x8f, 0x80, 0xba, 0x78, 0x48, 0x76, 0x47, 0x60, + 0x97, 0x68, 0xc0, 0x80, 0x96, 0x27, 0xa3, 0xf2, 0xcf, 0x10, 0xb5, 0x14, 0x3e, 0x8c, 0xa9, 0xa3, + 0x62, 0x5f, 0xf8, 0x52, 0x30, 0x2e, 0xda, 0x5e, 0x2b, 0x84, 0xcf, 0x7d, 0x10, 0xf4, 0xca, 0x5e, + 0xaa, 0x58, 0xb5, 0x59, 0x17, 0x8f, 0xa4, 0x77, 0x89, 0x82, 0x3f, 0x20, 0x64, 0xa6, 0xcd, 0x3c, + 0x9f, 0x04, 0xf6, 0xa2, 0xd9, 0x92, 0xf3, 0x0f, 0x5b, 0x6a, 0x0a, 0xed, 0xe6, 0x22, 0xc2, 0x01, + 0x09, 0xf0, 0x1b, 0x34, 0x4f, 0x18, 0x0b, 0x41, 0x29, 0x1b, 0x1b, 0x16, 0xfe, 0x73, 0x5b, 0x5e, + 0xba, 0x22, 0xdd, 0x60, 0xb7, 0x1a, 0x0b, 0x55, 0x37, 0xb1, 0xe0, 0x75, 0x34, 0xd7, 0x21, 0x81, + 0x06, 0x66, 0x17, 0x2b, 0x56, 0x2d, 0xeb, 0xc6, 0x2b, 0x1c, 0xa0, 0x62, 0x97, 0x8b, 0xa9, 0xb3, + 0x59, 0x7d, 0x86, 0x81, 0x15, 0xba, 0x5c, 0x4c, 0x1c, 0xcd, 0x30, 0x8d, 0x0c, 0xa6, 0xd2, 0xd6, + 0x9e, 0x25, 0x8d, 0x0c, 0x1e, 0xa6, 0x1d, 0xcf, 0x66, 0x97, 0x57, 0x56, 0x0e, 0x4e, 0xae, 0xef, + 0x4a, 0xd6, 0xcd, 0x5d, 0xc9, 0xfa, 0x7d, 0x57, 0xb2, 0xbe, 0xdd, 0x97, 0x32, 0x37, 0xf7, 0xa5, + 0xcc, 0xcf, 0xfb, 0x52, 0xe6, 0xac, 0x91, 0x0a, 0xfa, 0x64, 0x7e, 0x87, 0xed, 0x13, 0xe2, 0xab, + 0x7a, 0x7c, 0x23, 0x5f, 0xbc, 0xdd, 0xa9, 0x0f, 0xc6, 0xf7, 0xb2, 0x09, 0xf6, 0xe7, 0xcc, 0x0d, + 0xbb, 0xf3, 0x37, 0x00, 0x00, 0xff, 0xff, 0x99, 0x41, 0x48, 0x70, 0x0a, 0x06, 0x00, 0x00, +} + +func (m *HostZone) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HostZone) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HostZone) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.MaxRedemptionRate.Size() + i -= size + if _, err := m.MaxRedemptionRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xaa + { + size := m.MinRedemptionRate.Size() + i -= size + if _, err := m.MinRedemptionRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xa2 + if m.Halted { + i-- + if m.Halted { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x98 + } + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x92 + } + if len(m.Bech32Prefix) > 0 { + i -= len(m.Bech32Prefix) + copy(dAtA[i:], m.Bech32Prefix) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.Bech32Prefix))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x8a + } + if m.RedemptionAccount != nil { + { + size, err := m.RedemptionAccount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x82 + } + if m.UnbondingFrequency != 0 { + i = encodeVarintHostZone(dAtA, i, uint64(m.UnbondingFrequency)) + i-- + dAtA[i] = 0x70 + } + { + size := m.StakedBal.Size() + i -= size + if _, err := m.StakedBal.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x6a + if len(m.TransferChannelId) > 0 { + i -= len(m.TransferChannelId) + copy(dAtA[i:], m.TransferChannelId) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.TransferChannelId))) + i-- + dAtA[i] = 0x62 + } + { + size := m.RedemptionRate.Size() + i -= size + if _, err := m.RedemptionRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x5a + { + size := m.LastRedemptionRate.Size() + i -= size + if _, err := m.LastRedemptionRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + if len(m.HostDenom) > 0 { + i -= len(m.HostDenom) + copy(dAtA[i:], m.HostDenom) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.HostDenom))) + i-- + dAtA[i] = 0x4a + } + if len(m.IbcDenom) > 0 { + i -= len(m.IbcDenom) + copy(dAtA[i:], m.IbcDenom) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.IbcDenom))) + i-- + dAtA[i] = 0x42 + } + if m.DelegationAccount != nil { + { + size, err := m.DelegationAccount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + if m.FeeAccount != nil { + { + size, err := m.FeeAccount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } + if m.WithdrawalAccount != nil { + { + size, err := m.WithdrawalAccount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + if len(m.BlacklistedValidators) > 0 { + for iNdEx := len(m.BlacklistedValidators) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.BlacklistedValidators[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + if len(m.Validators) > 0 { + for iNdEx := len(m.Validators) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Validators[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if len(m.ConnectionId) > 0 { + i -= len(m.ConnectionId) + copy(dAtA[i:], m.ConnectionId) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.ConnectionId))) + i-- + dAtA[i] = 0x12 + } + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintHostZone(dAtA []byte, offset int, v uint64) int { + offset -= sovHostZone(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *HostZone) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovHostZone(uint64(l)) + } + l = len(m.ConnectionId) + if l > 0 { + n += 1 + l + sovHostZone(uint64(l)) + } + if len(m.Validators) > 0 { + for _, e := range m.Validators { + l = e.Size() + n += 1 + l + sovHostZone(uint64(l)) + } + } + if len(m.BlacklistedValidators) > 0 { + for _, e := range m.BlacklistedValidators { + l = e.Size() + n += 1 + l + sovHostZone(uint64(l)) + } + } + if m.WithdrawalAccount != nil { + l = m.WithdrawalAccount.Size() + n += 1 + l + sovHostZone(uint64(l)) + } + if m.FeeAccount != nil { + l = m.FeeAccount.Size() + n += 1 + l + sovHostZone(uint64(l)) + } + if m.DelegationAccount != nil { + l = m.DelegationAccount.Size() + n += 1 + l + sovHostZone(uint64(l)) + } + l = len(m.IbcDenom) + if l > 0 { + n += 1 + l + sovHostZone(uint64(l)) + } + l = len(m.HostDenom) + if l > 0 { + n += 1 + l + sovHostZone(uint64(l)) + } + l = m.LastRedemptionRate.Size() + n += 1 + l + sovHostZone(uint64(l)) + l = m.RedemptionRate.Size() + n += 1 + l + sovHostZone(uint64(l)) + l = len(m.TransferChannelId) + if l > 0 { + n += 1 + l + sovHostZone(uint64(l)) + } + l = m.StakedBal.Size() + n += 1 + l + sovHostZone(uint64(l)) + if m.UnbondingFrequency != 0 { + n += 1 + sovHostZone(uint64(m.UnbondingFrequency)) + } + if m.RedemptionAccount != nil { + l = m.RedemptionAccount.Size() + n += 2 + l + sovHostZone(uint64(l)) + } + l = len(m.Bech32Prefix) + if l > 0 { + n += 2 + l + sovHostZone(uint64(l)) + } + l = len(m.Address) + if l > 0 { + n += 2 + l + sovHostZone(uint64(l)) + } + if m.Halted { + n += 3 + } + l = m.MinRedemptionRate.Size() + n += 2 + l + sovHostZone(uint64(l)) + l = m.MaxRedemptionRate.Size() + n += 2 + l + sovHostZone(uint64(l)) + return n +} + +func sovHostZone(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozHostZone(x uint64) (n int) { + return sovHostZone(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *HostZone) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HostZone: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HostZone: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConnectionId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ConnectionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Validators", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Validators = append(m.Validators, &Validator{}) + if err := m.Validators[len(m.Validators)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BlacklistedValidators", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BlacklistedValidators = append(m.BlacklistedValidators, &Validator{}) + if err := m.BlacklistedValidators[len(m.BlacklistedValidators)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field WithdrawalAccount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.WithdrawalAccount == nil { + m.WithdrawalAccount = &ICAAccount{} + } + if err := m.WithdrawalAccount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FeeAccount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.FeeAccount == nil { + m.FeeAccount = &ICAAccount{} + } + if err := m.FeeAccount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DelegationAccount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.DelegationAccount == nil { + m.DelegationAccount = &ICAAccount{} + } + if err := m.DelegationAccount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IbcDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.IbcDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastRedemptionRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LastRedemptionRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RedemptionRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.RedemptionRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TransferChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TransferChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StakedBal", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.StakedBal.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 14: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UnbondingFrequency", wireType) + } + m.UnbondingFrequency = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.UnbondingFrequency |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RedemptionAccount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.RedemptionAccount == nil { + m.RedemptionAccount = &ICAAccount{} + } + if err := m.RedemptionAccount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Bech32Prefix", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Bech32Prefix = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 18: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 19: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Halted", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Halted = bool(v != 0) + case 20: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MinRedemptionRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MinRedemptionRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 21: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxRedemptionRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MaxRedemptionRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipHostZone(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthHostZone + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipHostZone(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowHostZone + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowHostZone + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowHostZone + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthHostZone + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupHostZone + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthHostZone + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthHostZone = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowHostZone = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupHostZone = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/stakeibc/migrations/v3/types/ica_account.pb.go b/x/stakeibc/migrations/v3/types/ica_account.pb.go new file mode 100644 index 00000000000..003919641f9 --- /dev/null +++ b/x/stakeibc/migrations/v3/types/ica_account.pb.go @@ -0,0 +1,391 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/stakeibc/ica_account.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type ICAAccountType int32 + +const ( + ICAAccountType_DELEGATION ICAAccountType = 0 + ICAAccountType_FEE ICAAccountType = 1 + ICAAccountType_WITHDRAWAL ICAAccountType = 2 + ICAAccountType_REDEMPTION ICAAccountType = 3 +) + +var ICAAccountType_name = map[int32]string{ + 0: "DELEGATION", + 1: "FEE", + 2: "WITHDRAWAL", + 3: "REDEMPTION", +} + +var ICAAccountType_value = map[string]int32{ + "DELEGATION": 0, + "FEE": 1, + "WITHDRAWAL": 2, + "REDEMPTION": 3, +} + +func (x ICAAccountType) String() string { + return proto.EnumName(ICAAccountType_name, int32(x)) +} + +func (ICAAccountType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_2976ae6e7f6ce824, []int{0} +} + +type ICAAccount struct { + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + Target ICAAccountType `protobuf:"varint,3,opt,name=target,proto3,enum=stride.stakeibc.ICAAccountType" json:"target,omitempty"` +} + +func (m *ICAAccount) Reset() { *m = ICAAccount{} } +func (m *ICAAccount) String() string { return proto.CompactTextString(m) } +func (*ICAAccount) ProtoMessage() {} +func (*ICAAccount) Descriptor() ([]byte, []int) { + return fileDescriptor_2976ae6e7f6ce824, []int{0} +} +func (m *ICAAccount) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ICAAccount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ICAAccount.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ICAAccount) XXX_Merge(src proto.Message) { + xxx_messageInfo_ICAAccount.Merge(m, src) +} +func (m *ICAAccount) XXX_Size() int { + return m.Size() +} +func (m *ICAAccount) XXX_DiscardUnknown() { + xxx_messageInfo_ICAAccount.DiscardUnknown(m) +} + +var xxx_messageInfo_ICAAccount proto.InternalMessageInfo + +func (m *ICAAccount) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func (m *ICAAccount) GetTarget() ICAAccountType { + if m != nil { + return m.Target + } + return ICAAccountType_DELEGATION +} + +func init() { + proto.RegisterEnum("stride.stakeibc.V3ICAAccountType", ICAAccountType_name, ICAAccountType_value) + proto.RegisterType((*ICAAccount)(nil), "stride.stakeibc.V3ICAAccount") +} + +func init() { proto.RegisterFile("stride/stakeibc/ica_account.proto", fileDescriptor_2976ae6e7f6ce824) } + +var fileDescriptor_2976ae6e7f6ce824 = []byte{ + // 292 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x2c, 0x2e, 0x29, 0xca, + 0x4c, 0x49, 0xd5, 0x2f, 0x2e, 0x49, 0xcc, 0x4e, 0xcd, 0x4c, 0x4a, 0xd6, 0xcf, 0x4c, 0x4e, 0x8c, + 0x4f, 0x4c, 0x4e, 0xce, 0x2f, 0xcd, 0x2b, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x87, + 0x28, 0xd1, 0x83, 0x29, 0x91, 0x92, 0x4c, 0xce, 0x2f, 0xce, 0xcd, 0x2f, 0x8e, 0x07, 0x4b, 0xeb, + 0x43, 0x38, 0x10, 0xb5, 0x4a, 0xf5, 0x5c, 0x5c, 0x9e, 0xce, 0x8e, 0x8e, 0x10, 0xfd, 0x42, 0x46, + 0x5c, 0xec, 0x89, 0x29, 0x29, 0x45, 0xa9, 0xc5, 0xc5, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x4e, + 0x12, 0x97, 0xb6, 0xe8, 0x8a, 0x40, 0x35, 0x38, 0x42, 0x64, 0x82, 0x4b, 0x8a, 0x32, 0xf3, 0xd2, + 0x83, 0x60, 0x0a, 0x85, 0xcc, 0xb9, 0xd8, 0x4a, 0x12, 0x8b, 0xd2, 0x53, 0x4b, 0x24, 0x98, 0x15, + 0x18, 0x35, 0xf8, 0x8c, 0xe4, 0xf5, 0xd0, 0xac, 0xd7, 0x43, 0x58, 0x10, 0x52, 0x59, 0x90, 0x1a, + 0x04, 0x55, 0xee, 0xc5, 0xc2, 0xc1, 0x24, 0xc0, 0xac, 0xe5, 0xc9, 0xc5, 0x87, 0x2a, 0x2f, 0xc4, + 0xc7, 0xc5, 0xe5, 0xe2, 0xea, 0xe3, 0xea, 0xee, 0x18, 0xe2, 0xe9, 0xef, 0x27, 0xc0, 0x20, 0xc4, + 0xce, 0xc5, 0xec, 0xe6, 0xea, 0x2a, 0xc0, 0x08, 0x92, 0x08, 0xf7, 0x0c, 0xf1, 0x70, 0x09, 0x72, + 0x0c, 0x77, 0xf4, 0x11, 0x60, 0x02, 0xf1, 0x83, 0x5c, 0x5d, 0x5c, 0x7d, 0x03, 0xc0, 0x0a, 0x99, + 0x9d, 0x7c, 0x4e, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x09, + 0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, 0xf1, 0x58, 0x8e, 0x21, 0xca, 0x28, 0x3d, 0xb3, + 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, 0x3f, 0x18, 0xec, 0x3a, 0x5d, 0x9f, 0xc4, 0xa4, + 0x62, 0x7d, 0x68, 0x58, 0x96, 0x19, 0x1a, 0xeb, 0x57, 0x20, 0x42, 0xb4, 0xa4, 0xb2, 0x20, 0xb5, + 0x38, 0x89, 0x0d, 0x1c, 0x40, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x52, 0x1a, 0x12, 0xf4, + 0x71, 0x01, 0x00, 0x00, +} + +func (m *ICAAccount) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ICAAccount) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ICAAccount) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Target != 0 { + i = encodeVarintIcaAccount(dAtA, i, uint64(m.Target)) + i-- + dAtA[i] = 0x18 + } + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintIcaAccount(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintIcaAccount(dAtA []byte, offset int, v uint64) int { + offset -= sovIcaAccount(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *ICAAccount) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Address) + if l > 0 { + n += 1 + l + sovIcaAccount(uint64(l)) + } + if m.Target != 0 { + n += 1 + sovIcaAccount(uint64(m.Target)) + } + return n +} + +func sovIcaAccount(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozIcaAccount(x uint64) (n int) { + return sovIcaAccount(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *ICAAccount) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaAccount + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ICAAccount: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ICAAccount: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaAccount + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIcaAccount + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIcaAccount + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Target", wireType) + } + m.Target = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaAccount + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Target |= ICAAccountType(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipIcaAccount(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthIcaAccount + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipIcaAccount(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowIcaAccount + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowIcaAccount + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowIcaAccount + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthIcaAccount + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupIcaAccount + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthIcaAccount + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthIcaAccount = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowIcaAccount = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupIcaAccount = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/stakeibc/migrations/v3/types/params.go b/x/stakeibc/migrations/v3/types/params.go new file mode 100644 index 00000000000..7bc603cf19d --- /dev/null +++ b/x/stakeibc/migrations/v3/types/params.go @@ -0,0 +1,6 @@ +package types + +var ( + KeySafetyMaxSlashPercent = []byte("SafetyMaxSlashPercent") + DefaultSafetyMaxSlashPercent uint64 = 0 +) diff --git a/x/stakeibc/migrations/v3/types/validator.pb.go b/x/stakeibc/migrations/v3/types/validator.pb.go new file mode 100644 index 00000000000..36d9559da7c --- /dev/null +++ b/x/stakeibc/migrations/v3/types/validator.pb.go @@ -0,0 +1,729 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/stakeibc/validator.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + github_com_cosmos_cosmos_sdk_types "cosmossdk.io/math" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type ValidatorExchangeRate struct { + InternalTokensToSharesRate github_com_cosmos_cosmos_sdk_types.LegacyDec `protobuf:"bytes,1,opt,name=internal_tokens_to_shares_rate,json=internalTokensToSharesRate,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Dec" json:"internal_tokens_to_shares_rate"` + EpochNumber uint64 `protobuf:"varint,2,opt,name=epoch_number,json=epochNumber,proto3" json:"epoch_number,omitempty"` +} + +func (m *ValidatorExchangeRate) Reset() { *m = ValidatorExchangeRate{} } +func (m *ValidatorExchangeRate) String() string { return proto.CompactTextString(m) } +func (*ValidatorExchangeRate) ProtoMessage() {} +func (*ValidatorExchangeRate) Descriptor() ([]byte, []int) { + return fileDescriptor_5d2f32e16bd6ab8f, []int{0} +} +func (m *ValidatorExchangeRate) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ValidatorExchangeRate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ValidatorExchangeRate.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ValidatorExchangeRate) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidatorExchangeRate.Merge(m, src) +} +func (m *ValidatorExchangeRate) XXX_Size() int { + return m.Size() +} +func (m *ValidatorExchangeRate) XXX_DiscardUnknown() { + xxx_messageInfo_ValidatorExchangeRate.DiscardUnknown(m) +} + +var xxx_messageInfo_ValidatorExchangeRate proto.InternalMessageInfo + +func (m *ValidatorExchangeRate) GetEpochNumber() uint64 { + if m != nil { + return m.EpochNumber + } + return 0 +} + +type Validator struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` + DelegationAmt github_com_cosmos_cosmos_sdk_types.Int `protobuf:"bytes,5,opt,name=delegation_amt,json=delegationAmt,proto3,customtype=github.com/cosmos/cosmos-sdk/types.Int" json:"delegation_amt"` + Weight uint64 `protobuf:"varint,6,opt,name=weight,proto3" json:"weight,omitempty"` + InternalExchangeRate *ValidatorExchangeRate `protobuf:"bytes,7,opt,name=internal_exchange_rate,json=internalExchangeRate,proto3" json:"internal_exchange_rate,omitempty"` +} + +func (m *Validator) Reset() { *m = Validator{} } +func (m *Validator) String() string { return proto.CompactTextString(m) } +func (*Validator) ProtoMessage() {} +func (*Validator) Descriptor() ([]byte, []int) { + return fileDescriptor_5d2f32e16bd6ab8f, []int{1} +} +func (m *Validator) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Validator) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Validator.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Validator) XXX_Merge(src proto.Message) { + xxx_messageInfo_Validator.Merge(m, src) +} +func (m *Validator) XXX_Size() int { + return m.Size() +} +func (m *Validator) XXX_DiscardUnknown() { + xxx_messageInfo_Validator.DiscardUnknown(m) +} + +var xxx_messageInfo_Validator proto.InternalMessageInfo + +func (m *Validator) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Validator) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func (m *Validator) GetWeight() uint64 { + if m != nil { + return m.Weight + } + return 0 +} + +func (m *Validator) GetInternalExchangeRate() *ValidatorExchangeRate { + if m != nil { + return m.InternalExchangeRate + } + return nil +} + +func init() { + proto.RegisterType((*ValidatorExchangeRate)(nil), "stride.stakeibc.V3ValidatorExchangeRate") + proto.RegisterType((*Validator)(nil), "stride.stakeibc.V3Validator") +} + +func init() { proto.RegisterFile("stride/stakeibc/validator.proto", fileDescriptor_5d2f32e16bd6ab8f) } + +var fileDescriptor_5d2f32e16bd6ab8f = []byte{ + // 439 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x52, 0x3d, 0x6f, 0xdb, 0x30, + 0x10, 0x35, 0x53, 0xc5, 0x89, 0x99, 0x7e, 0x04, 0x84, 0x1b, 0xa8, 0x1e, 0x64, 0x37, 0x43, 0xe0, + 0xc5, 0x12, 0xea, 0xac, 0x5d, 0x62, 0xa4, 0x43, 0x83, 0xa0, 0x83, 0x9c, 0x76, 0x28, 0x0a, 0x08, + 0x94, 0x74, 0x90, 0x08, 0x5b, 0xa4, 0x41, 0x5e, 0xd2, 0x74, 0xeb, 0x4f, 0xe8, 0x0f, 0xe9, 0x98, + 0xb5, 0x7b, 0xc6, 0x20, 0x53, 0xd1, 0x21, 0x28, 0xec, 0x3f, 0x52, 0x94, 0xa2, 0x92, 0xa0, 0xe8, + 0x92, 0x89, 0xe4, 0xe3, 0xe3, 0xbd, 0xf7, 0x78, 0x47, 0xfb, 0x06, 0xb5, 0xc8, 0x21, 0x32, 0xc8, + 0x67, 0x20, 0xd2, 0x2c, 0x3a, 0xe3, 0x73, 0x91, 0x73, 0x54, 0x3a, 0x5c, 0x68, 0x85, 0x8a, 0x3d, + 0xab, 0x09, 0x61, 0x43, 0xe8, 0xbd, 0xc8, 0x94, 0xa9, 0x94, 0x49, 0xec, 0x75, 0x54, 0x1f, 0x6a, + 0x6e, 0xaf, 0x5b, 0xa8, 0x42, 0xd5, 0xf8, 0xdf, 0x5d, 0x8d, 0xee, 0xfe, 0x20, 0xf4, 0xf9, 0x87, + 0xa6, 0xea, 0x9b, 0xf3, 0xac, 0xe4, 0xb2, 0x80, 0x98, 0x23, 0xb0, 0xaf, 0x84, 0x06, 0x42, 0x22, + 0x68, 0xc9, 0xe7, 0x09, 0xaa, 0x19, 0x48, 0x93, 0xa0, 0x4a, 0x4c, 0xc9, 0x35, 0x98, 0x44, 0x73, + 0x04, 0x9f, 0x0c, 0xc8, 0xb0, 0x33, 0x79, 0x7d, 0x79, 0xd3, 0x6f, 0xfd, 0xba, 0xe9, 0xef, 0x15, + 0x02, 0xcb, 0xd3, 0x34, 0xcc, 0x54, 0xe5, 0x94, 0xdd, 0x32, 0x32, 0xf9, 0x2c, 0xc2, 0x2f, 0x0b, + 0x30, 0xe1, 0x21, 0x64, 0xd7, 0x17, 0x23, 0xea, 0x8c, 0x1d, 0x42, 0x16, 0xf7, 0x1a, 0x8d, 0x13, + 0x2b, 0x71, 0xa2, 0xa6, 0x56, 0xc0, 0x5a, 0x78, 0x49, 0x1f, 0xc3, 0x42, 0x65, 0x65, 0x22, 0x4f, + 0xab, 0x14, 0xb4, 0xbf, 0x36, 0x20, 0x43, 0x2f, 0xde, 0xb2, 0xd8, 0x3b, 0x0b, 0xed, 0x7e, 0x5f, + 0xa3, 0x9d, 0x5b, 0xff, 0x8c, 0x51, 0x4f, 0xf2, 0xca, 0x19, 0x8b, 0xed, 0x9e, 0x8d, 0xe9, 0x06, + 0xcf, 0x73, 0x0d, 0xc6, 0xd8, 0xf7, 0x9d, 0x89, 0x7f, 0x7d, 0x31, 0xea, 0x3a, 0x07, 0x07, 0xf5, + 0xcd, 0x14, 0xb5, 0x90, 0x45, 0xdc, 0x10, 0xd9, 0x7b, 0xfa, 0x34, 0x87, 0x39, 0x14, 0x1c, 0x85, + 0x92, 0x09, 0xaf, 0xd0, 0x5f, 0xb7, 0x4f, 0xc3, 0x07, 0x44, 0x7d, 0x2b, 0x31, 0x7e, 0x72, 0x57, + 0xe5, 0xa0, 0x42, 0xb6, 0x43, 0xdb, 0x9f, 0x41, 0x14, 0x25, 0xfa, 0x6d, 0x9b, 0xc4, 0x9d, 0xd8, + 0x27, 0xba, 0x73, 0xfb, 0xd3, 0xe0, 0x7a, 0x50, 0xff, 0xf0, 0xc6, 0x80, 0x0c, 0xb7, 0xc6, 0x7b, + 0xe1, 0x3f, 0x7d, 0x0e, 0xff, 0xdb, 0xb2, 0xb8, 0xdb, 0x54, 0xb9, 0x8f, 0x1e, 0x79, 0x9b, 0x8f, + 0xb6, 0xbd, 0x23, 0x6f, 0xd3, 0xdb, 0x5e, 0x9f, 0x1c, 0x5f, 0x2e, 0x03, 0x72, 0xb5, 0x0c, 0xc8, + 0xef, 0x65, 0x40, 0xbe, 0xad, 0x82, 0xd6, 0xd5, 0x2a, 0x68, 0xfd, 0x5c, 0x05, 0xad, 0x8f, 0xe3, + 0x7b, 0x91, 0xa6, 0x56, 0x6d, 0x74, 0xcc, 0x53, 0x13, 0xb9, 0x11, 0x3c, 0x7b, 0xb5, 0x1f, 0x9d, + 0xdf, 0x0d, 0xa2, 0x8d, 0x98, 0xb6, 0xed, 0x0c, 0xed, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0xfe, + 0x29, 0x7a, 0xbe, 0xa8, 0x02, 0x00, 0x00, +} + +func (m *ValidatorExchangeRate) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ValidatorExchangeRate) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ValidatorExchangeRate) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.EpochNumber != 0 { + i = encodeVarintValidator(dAtA, i, uint64(m.EpochNumber)) + i-- + dAtA[i] = 0x10 + } + { + size := m.InternalTokensToSharesRate.Size() + i -= size + if _, err := m.InternalTokensToSharesRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintValidator(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *Validator) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Validator) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Validator) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.InternalExchangeRate != nil { + { + size, err := m.InternalExchangeRate.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintValidator(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + if m.Weight != 0 { + i = encodeVarintValidator(dAtA, i, uint64(m.Weight)) + i-- + dAtA[i] = 0x30 + } + { + size := m.DelegationAmt.Size() + i -= size + if _, err := m.DelegationAmt.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintValidator(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintValidator(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0x12 + } + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintValidator(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintValidator(dAtA []byte, offset int, v uint64) int { + offset -= sovValidator(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *ValidatorExchangeRate) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.InternalTokensToSharesRate.Size() + n += 1 + l + sovValidator(uint64(l)) + if m.EpochNumber != 0 { + n += 1 + sovValidator(uint64(m.EpochNumber)) + } + return n +} + +func (m *Validator) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + if l > 0 { + n += 1 + l + sovValidator(uint64(l)) + } + l = len(m.Address) + if l > 0 { + n += 1 + l + sovValidator(uint64(l)) + } + l = m.DelegationAmt.Size() + n += 1 + l + sovValidator(uint64(l)) + if m.Weight != 0 { + n += 1 + sovValidator(uint64(m.Weight)) + } + if m.InternalExchangeRate != nil { + l = m.InternalExchangeRate.Size() + n += 1 + l + sovValidator(uint64(l)) + } + return n +} + +func sovValidator(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozValidator(x uint64) (n int) { + return sovValidator(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *ValidatorExchangeRate) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ValidatorExchangeRate: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ValidatorExchangeRate: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InternalTokensToSharesRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthValidator + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthValidator + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.InternalTokensToSharesRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EpochNumber", wireType) + } + m.EpochNumber = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EpochNumber |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipValidator(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthValidator + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Validator) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Validator: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Validator: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthValidator + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthValidator + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthValidator + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthValidator + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DelegationAmt", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthValidator + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthValidator + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.DelegationAmt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Weight", wireType) + } + m.Weight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Weight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InternalExchangeRate", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthValidator + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthValidator + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.InternalExchangeRate == nil { + m.InternalExchangeRate = &ValidatorExchangeRate{} + } + if err := m.InternalExchangeRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipValidator(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthValidator + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipValidator(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowValidator + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowValidator + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowValidator + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthValidator + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupValidator + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthValidator + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthValidator = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowValidator = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupValidator = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/stakeibc/module.go b/x/stakeibc/module.go new file mode 100644 index 00000000000..e4502c11f74 --- /dev/null +++ b/x/stakeibc/module.go @@ -0,0 +1,189 @@ +package stakeibc + +import ( + "context" + "encoding/json" + "fmt" + + // this line is used by starport scaffolding # 1 + + "cosmossdk.io/core/appmodule" + "github.com/gorilla/mux" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/client/cli" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/keeper" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +var ( + _ module.AppModuleBasic = AppModuleBasic{} + _ module.HasGenesisBasics = AppModuleBasic{} + + _ appmodule.AppModule = AppModule{} + _ appmodule.HasBeginBlocker = AppModule{} + _ appmodule.HasEndBlocker = AppModule{} + + _ module.HasConsensusVersion = AppModule{} + _ module.HasGenesis = AppModule{} + _ module.HasServices = AppModule{} +) + +// ---------------------------------------------------------------------------- +// AppModuleBasic +// ---------------------------------------------------------------------------- + +// AppModuleBasic implements the AppModuleBasic interface for the capability module. +type AppModuleBasic struct { + cdc codec.BinaryCodec +} + +func NewAppModuleBasic(cdc codec.BinaryCodec) AppModuleBasic { + return AppModuleBasic{cdc: cdc} +} + +// Name returns the capability module's name. +func (AppModuleBasic) Name() string { + return types.ModuleName +} + +func (AppModuleBasic) RegisterCodec(cdc *codec.LegacyAmino) { + types.RegisterCodec(cdc) +} + +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + types.RegisterCodec(cdc) +} + +// RegisterInterfaces registers the module's interface types +func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { + types.RegisterInterfaces(reg) +} + +// DefaultGenesis returns the capability module's default genesis state. +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return cdc.MustMarshalJSON(types.DefaultGenesis()) +} + +// ValidateGenesis performs genesis state validation for the capability module. +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { + var genState types.GenesisState + if err := cdc.UnmarshalJSON(bz, &genState); err != nil { + return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) + } + return genState.Validate() +} + +// RegisterRESTRoutes registers the capability module's REST service handlers. +func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Router) { +} + +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { + if err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)); err != nil { + panic(err) + } + // this line is used by starport scaffolding # 2 +} + +// GetTxCmd returns the capability module's root tx command. +func (a AppModuleBasic) GetTxCmd() *cobra.Command { + return cli.GetTxCmd() +} + +// GetQueryCmd returns the capability module's root query command. +func (AppModuleBasic) GetQueryCmd() *cobra.Command { + return cli.GetQueryCmd(types.StoreKey) +} + +// ---------------------------------------------------------------------------- +// AppModule +// ---------------------------------------------------------------------------- + +// AppModule implements the AppModule interface for the capability module. +type AppModule struct { + AppModuleBasic + + keeper keeper.Keeper + accountKeeper types.AccountKeeper + bankKeeper types.BankKeeper +} + +func NewAppModule( + cdc codec.Codec, + keeper keeper.Keeper, + accountKeeper types.AccountKeeper, + bankKeeper types.BankKeeper, +) AppModule { + return AppModule{ + AppModuleBasic: NewAppModuleBasic(cdc), + keeper: keeper, + accountKeeper: accountKeeper, + bankKeeper: bankKeeper, + } +} + +// Name returns the capability module's name. +func (am AppModule) Name() string { + return am.AppModuleBasic.Name() +} + +// QuerierRoute returns the capability module's query routing key. +func (AppModule) QuerierRoute() string { return types.QuerierRoute } + +// RegisterServices registers a GRPC query service to respond to the +// module-specific GRPC queries. +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) + types.RegisterQueryServer(cfg.QueryServer(), am.keeper) +} + +// RegisterInvariants registers the capability module's invariants. +func (am AppModule) RegisterInvariants(ir sdk.InvariantRegistry) { + keeper.RegisterInvariants(ir, am.keeper) +} + +// InitGenesis performs the capability module's genesis initialization +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) { + var genState types.GenesisState + cdc.MustUnmarshalJSON(gs, &genState) + am.keeper.InitGenesis(ctx, genState) +} + +// ExportGenesis returns the capability module's exported genesis state as raw JSON bytes. +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + genState := am.keeper.ExportGenesis(ctx) + return cdc.MustMarshalJSON(genState) +} + +// ConsensusVersion implements ConsensusVersion. +func (AppModule) ConsensusVersion() uint64 { return 3 } + +// BeginBlock contains the logic that is automatically triggered at the beginning of each block. +// The begin block implementation is optional. +func (am AppModule) BeginBlock(context context.Context) error { + ctx := sdk.UnwrapSDKContext(context) + am.keeper.BeginBlocker(ctx) + return nil +} + +// EndBlock contains the logic that is automatically triggered at the end of each block. +// The end block implementation is optional. +func (am AppModule) EndBlock(context context.Context) error { + ctx := sdk.UnwrapSDKContext(context) + am.keeper.EndBlocker(ctx) + return nil +} + +// IsOnePerModuleType implements the depinject.OnePerModuleType interface. +func (am AppModule) IsOnePerModuleType() {} + +// IsAppModule implements the appmodule.AppModule interface. +func (am AppModule) IsAppModule() {} diff --git a/x/stakeibc/types/address_unbonding.pb.go b/x/stakeibc/types/address_unbonding.pb.go new file mode 100644 index 00000000000..cc131eae4ee --- /dev/null +++ b/x/stakeibc/types/address_unbonding.pb.go @@ -0,0 +1,606 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/stakeibc/address_unbonding.proto + +package types + +import ( + cosmossdk_io_math "cosmossdk.io/math" + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type AddressUnbonding struct { + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + Receiver string `protobuf:"bytes,2,opt,name=receiver,proto3" json:"receiver,omitempty"` + UnbondingEstimatedTime string `protobuf:"bytes,3,opt,name=unbonding_estimated_time,json=unbondingEstimatedTime,proto3" json:"unbonding_estimated_time,omitempty"` + Amount cosmossdk_io_math.Int `protobuf:"bytes,4,opt,name=amount,proto3,customtype=cosmossdk.io/math.Int" json:"amount"` + Denom string `protobuf:"bytes,5,opt,name=denom,proto3" json:"denom,omitempty"` + ClaimIsPending bool `protobuf:"varint,8,opt,name=claim_is_pending,json=claimIsPending,proto3" json:"claim_is_pending,omitempty"` + EpochNumber uint64 `protobuf:"varint,9,opt,name=epoch_number,json=epochNumber,proto3" json:"epoch_number,omitempty"` +} + +func (m *AddressUnbonding) Reset() { *m = AddressUnbonding{} } +func (m *AddressUnbonding) String() string { return proto.CompactTextString(m) } +func (*AddressUnbonding) ProtoMessage() {} +func (*AddressUnbonding) Descriptor() ([]byte, []int) { + return fileDescriptor_6491082275bcb473, []int{0} +} +func (m *AddressUnbonding) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AddressUnbonding) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AddressUnbonding.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *AddressUnbonding) XXX_Merge(src proto.Message) { + xxx_messageInfo_AddressUnbonding.Merge(m, src) +} +func (m *AddressUnbonding) XXX_Size() int { + return m.Size() +} +func (m *AddressUnbonding) XXX_DiscardUnknown() { + xxx_messageInfo_AddressUnbonding.DiscardUnknown(m) +} + +var xxx_messageInfo_AddressUnbonding proto.InternalMessageInfo + +func (m *AddressUnbonding) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func (m *AddressUnbonding) GetReceiver() string { + if m != nil { + return m.Receiver + } + return "" +} + +func (m *AddressUnbonding) GetUnbondingEstimatedTime() string { + if m != nil { + return m.UnbondingEstimatedTime + } + return "" +} + +func (m *AddressUnbonding) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +func (m *AddressUnbonding) GetClaimIsPending() bool { + if m != nil { + return m.ClaimIsPending + } + return false +} + +func (m *AddressUnbonding) GetEpochNumber() uint64 { + if m != nil { + return m.EpochNumber + } + return 0 +} + +func init() { + proto.RegisterType((*AddressUnbonding)(nil), "stride.stakeibc.AddressUnbonding") +} + +func init() { + proto.RegisterFile("stride/stakeibc/address_unbonding.proto", fileDescriptor_6491082275bcb473) +} + +var fileDescriptor_6491082275bcb473 = []byte{ + // 346 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x44, 0x91, 0xc1, 0x4a, 0xeb, 0x40, + 0x14, 0x86, 0x93, 0xde, 0xb6, 0xb7, 0x9d, 0x7b, 0xb9, 0xb7, 0x0c, 0x55, 0x86, 0x82, 0x69, 0x75, + 0x63, 0x36, 0x26, 0x50, 0x11, 0xba, 0xb5, 0xe0, 0xa2, 0x50, 0x44, 0xa2, 0x6e, 0xdc, 0x84, 0x24, + 0x73, 0x48, 0x87, 0x3a, 0x33, 0x21, 0x33, 0x29, 0xfa, 0x16, 0x3e, 0x80, 0x0f, 0xd4, 0x65, 0x97, + 0xe2, 0xa2, 0x48, 0xfb, 0x22, 0xd2, 0x49, 0x53, 0x77, 0xf3, 0xff, 0xff, 0xc7, 0x3f, 0x87, 0x73, + 0xd0, 0xb9, 0xd2, 0x39, 0xa3, 0xe0, 0x2b, 0x1d, 0xcd, 0x81, 0xc5, 0x89, 0x1f, 0x51, 0x9a, 0x83, + 0x52, 0x61, 0x21, 0x62, 0x29, 0x28, 0x13, 0xa9, 0x97, 0xe5, 0x52, 0x4b, 0xfc, 0xbf, 0x04, 0xbd, + 0x0a, 0xec, 0x75, 0x53, 0x99, 0x4a, 0x93, 0xf9, 0xbb, 0x57, 0x89, 0x9d, 0xbd, 0xd7, 0x50, 0xe7, + 0xba, 0xac, 0x78, 0xac, 0x1a, 0x30, 0x41, 0xbf, 0xf7, 0xb5, 0xc4, 0x1e, 0xd8, 0x6e, 0x3b, 0xa8, + 0x24, 0xee, 0xa1, 0x56, 0x0e, 0x09, 0xb0, 0x05, 0xe4, 0xa4, 0x66, 0xa2, 0x83, 0xc6, 0x23, 0x44, + 0x0e, 0x43, 0x84, 0xa0, 0x34, 0xe3, 0x91, 0x06, 0x1a, 0x6a, 0xc6, 0x81, 0xfc, 0x32, 0xec, 0xf1, + 0x21, 0xbf, 0xa9, 0xe2, 0x07, 0xc6, 0x01, 0x5f, 0xa1, 0x66, 0xc4, 0x65, 0x21, 0x34, 0xa9, 0xef, + 0xb8, 0xf1, 0xc9, 0x72, 0xdd, 0xb7, 0x3e, 0xd7, 0xfd, 0xa3, 0x44, 0x2a, 0x2e, 0x95, 0xa2, 0x73, + 0x8f, 0x49, 0x9f, 0x47, 0x7a, 0xe6, 0x4d, 0x84, 0x0e, 0xf6, 0x30, 0xee, 0xa2, 0x06, 0x05, 0x21, + 0x39, 0x69, 0x98, 0xf6, 0x52, 0x60, 0x17, 0x75, 0x92, 0xe7, 0x88, 0xf1, 0x90, 0xa9, 0x30, 0x03, + 0xf3, 0x1b, 0x69, 0x0d, 0x6c, 0xb7, 0x15, 0xfc, 0x33, 0xfe, 0x44, 0xdd, 0x95, 0x2e, 0x3e, 0x45, + 0x7f, 0x21, 0x93, 0xc9, 0x2c, 0x14, 0x05, 0x8f, 0x21, 0x27, 0xed, 0x81, 0xed, 0xd6, 0x83, 0x3f, + 0xc6, 0xbb, 0x35, 0xd6, 0x78, 0xba, 0xdc, 0x38, 0xf6, 0x6a, 0xe3, 0xd8, 0x5f, 0x1b, 0xc7, 0x7e, + 0xdb, 0x3a, 0xd6, 0x6a, 0xeb, 0x58, 0x1f, 0x5b, 0xc7, 0x7a, 0x1a, 0xa6, 0x4c, 0xcf, 0x8a, 0xd8, + 0x4b, 0x24, 0xf7, 0xef, 0xcd, 0xaa, 0x2f, 0xa6, 0x51, 0xac, 0xfc, 0xfd, 0x7d, 0x16, 0xc3, 0x91, + 0xff, 0xf2, 0x73, 0x25, 0xfd, 0x9a, 0x81, 0x8a, 0x9b, 0x66, 0xe7, 0x97, 0xdf, 0x01, 0x00, 0x00, + 0xff, 0xff, 0xd9, 0x98, 0xc4, 0xff, 0xc5, 0x01, 0x00, 0x00, +} + +func (m *AddressUnbonding) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *AddressUnbonding) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AddressUnbonding) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.EpochNumber != 0 { + i = encodeVarintAddressUnbonding(dAtA, i, uint64(m.EpochNumber)) + i-- + dAtA[i] = 0x48 + } + if m.ClaimIsPending { + i-- + if m.ClaimIsPending { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x40 + } + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintAddressUnbonding(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0x2a + } + { + size := m.Amount.Size() + i -= size + if _, err := m.Amount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintAddressUnbonding(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + if len(m.UnbondingEstimatedTime) > 0 { + i -= len(m.UnbondingEstimatedTime) + copy(dAtA[i:], m.UnbondingEstimatedTime) + i = encodeVarintAddressUnbonding(dAtA, i, uint64(len(m.UnbondingEstimatedTime))) + i-- + dAtA[i] = 0x1a + } + if len(m.Receiver) > 0 { + i -= len(m.Receiver) + copy(dAtA[i:], m.Receiver) + i = encodeVarintAddressUnbonding(dAtA, i, uint64(len(m.Receiver))) + i-- + dAtA[i] = 0x12 + } + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintAddressUnbonding(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintAddressUnbonding(dAtA []byte, offset int, v uint64) int { + offset -= sovAddressUnbonding(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *AddressUnbonding) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Address) + if l > 0 { + n += 1 + l + sovAddressUnbonding(uint64(l)) + } + l = len(m.Receiver) + if l > 0 { + n += 1 + l + sovAddressUnbonding(uint64(l)) + } + l = len(m.UnbondingEstimatedTime) + if l > 0 { + n += 1 + l + sovAddressUnbonding(uint64(l)) + } + l = m.Amount.Size() + n += 1 + l + sovAddressUnbonding(uint64(l)) + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovAddressUnbonding(uint64(l)) + } + if m.ClaimIsPending { + n += 2 + } + if m.EpochNumber != 0 { + n += 1 + sovAddressUnbonding(uint64(m.EpochNumber)) + } + return n +} + +func sovAddressUnbonding(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozAddressUnbonding(x uint64) (n int) { + return sovAddressUnbonding(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *AddressUnbonding) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAddressUnbonding + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AddressUnbonding: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AddressUnbonding: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAddressUnbonding + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAddressUnbonding + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAddressUnbonding + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Receiver", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAddressUnbonding + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAddressUnbonding + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAddressUnbonding + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Receiver = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UnbondingEstimatedTime", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAddressUnbonding + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAddressUnbonding + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAddressUnbonding + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UnbondingEstimatedTime = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAddressUnbonding + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAddressUnbonding + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAddressUnbonding + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAddressUnbonding + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthAddressUnbonding + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthAddressUnbonding + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ClaimIsPending", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAddressUnbonding + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ClaimIsPending = bool(v != 0) + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EpochNumber", wireType) + } + m.EpochNumber = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowAddressUnbonding + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EpochNumber |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipAddressUnbonding(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthAddressUnbonding + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipAddressUnbonding(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowAddressUnbonding + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowAddressUnbonding + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowAddressUnbonding + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthAddressUnbonding + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupAddressUnbonding + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthAddressUnbonding + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthAddressUnbonding = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowAddressUnbonding = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupAddressUnbonding = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/stakeibc/types/callbacks.pb.go b/x/stakeibc/types/callbacks.pb.go new file mode 100644 index 00000000000..4440e9a4000 --- /dev/null +++ b/x/stakeibc/types/callbacks.pb.go @@ -0,0 +1,3750 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/stakeibc/callbacks.proto + +package types + +import ( + cosmossdk_io_math "cosmossdk.io/math" + fmt "fmt" + types1 "github.com/osmosis-labs/osmosis/v27/x/records/types" + types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type SplitDelegation struct { + Validator string `protobuf:"bytes,1,opt,name=validator,proto3" json:"validator,omitempty"` + Amount cosmossdk_io_math.Int `protobuf:"bytes,2,opt,name=amount,proto3,customtype=cosmossdk.io/math.Int" json:"amount"` +} + +func (m *SplitDelegation) Reset() { *m = SplitDelegation{} } +func (m *SplitDelegation) String() string { return proto.CompactTextString(m) } +func (*SplitDelegation) ProtoMessage() {} +func (*SplitDelegation) Descriptor() ([]byte, []int) { + return fileDescriptor_f41c99b09b96a5ac, []int{0} +} +func (m *SplitDelegation) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SplitDelegation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_SplitDelegation.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *SplitDelegation) XXX_Merge(src proto.Message) { + xxx_messageInfo_SplitDelegation.Merge(m, src) +} +func (m *SplitDelegation) XXX_Size() int { + return m.Size() +} +func (m *SplitDelegation) XXX_DiscardUnknown() { + xxx_messageInfo_SplitDelegation.DiscardUnknown(m) +} + +var xxx_messageInfo_SplitDelegation proto.InternalMessageInfo + +func (m *SplitDelegation) GetValidator() string { + if m != nil { + return m.Validator + } + return "" +} + +type SplitUndelegation struct { + Validator string `protobuf:"bytes,1,opt,name=validator,proto3" json:"validator,omitempty"` + NativeTokenAmount cosmossdk_io_math.Int `protobuf:"bytes,2,opt,name=native_token_amount,json=nativeTokenAmount,proto3,customtype=cosmossdk.io/math.Int" json:"native_token_amount"` +} + +func (m *SplitUndelegation) Reset() { *m = SplitUndelegation{} } +func (m *SplitUndelegation) String() string { return proto.CompactTextString(m) } +func (*SplitUndelegation) ProtoMessage() {} +func (*SplitUndelegation) Descriptor() ([]byte, []int) { + return fileDescriptor_f41c99b09b96a5ac, []int{1} +} +func (m *SplitUndelegation) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SplitUndelegation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_SplitUndelegation.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *SplitUndelegation) XXX_Merge(src proto.Message) { + xxx_messageInfo_SplitUndelegation.Merge(m, src) +} +func (m *SplitUndelegation) XXX_Size() int { + return m.Size() +} +func (m *SplitUndelegation) XXX_DiscardUnknown() { + xxx_messageInfo_SplitUndelegation.DiscardUnknown(m) +} + +var xxx_messageInfo_SplitUndelegation proto.InternalMessageInfo + +func (m *SplitUndelegation) GetValidator() string { + if m != nil { + return m.Validator + } + return "" +} + +type DelegateCallback struct { + HostZoneId string `protobuf:"bytes,1,opt,name=host_zone_id,json=hostZoneId,proto3" json:"host_zone_id,omitempty"` + DepositRecordId uint64 `protobuf:"varint,2,opt,name=deposit_record_id,json=depositRecordId,proto3" json:"deposit_record_id,omitempty"` + SplitDelegations []*SplitDelegation `protobuf:"bytes,3,rep,name=split_delegations,json=splitDelegations,proto3" json:"split_delegations,omitempty"` +} + +func (m *DelegateCallback) Reset() { *m = DelegateCallback{} } +func (m *DelegateCallback) String() string { return proto.CompactTextString(m) } +func (*DelegateCallback) ProtoMessage() {} +func (*DelegateCallback) Descriptor() ([]byte, []int) { + return fileDescriptor_f41c99b09b96a5ac, []int{2} +} +func (m *DelegateCallback) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DelegateCallback) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DelegateCallback.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *DelegateCallback) XXX_Merge(src proto.Message) { + xxx_messageInfo_DelegateCallback.Merge(m, src) +} +func (m *DelegateCallback) XXX_Size() int { + return m.Size() +} +func (m *DelegateCallback) XXX_DiscardUnknown() { + xxx_messageInfo_DelegateCallback.DiscardUnknown(m) +} + +var xxx_messageInfo_DelegateCallback proto.InternalMessageInfo + +func (m *DelegateCallback) GetHostZoneId() string { + if m != nil { + return m.HostZoneId + } + return "" +} + +func (m *DelegateCallback) GetDepositRecordId() uint64 { + if m != nil { + return m.DepositRecordId + } + return 0 +} + +func (m *DelegateCallback) GetSplitDelegations() []*SplitDelegation { + if m != nil { + return m.SplitDelegations + } + return nil +} + +type ClaimCallback struct { + UserRedemptionRecordId string `protobuf:"bytes,1,opt,name=user_redemption_record_id,json=userRedemptionRecordId,proto3" json:"user_redemption_record_id,omitempty"` + ChainId string `protobuf:"bytes,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + EpochNumber uint64 `protobuf:"varint,3,opt,name=epoch_number,json=epochNumber,proto3" json:"epoch_number,omitempty"` +} + +func (m *ClaimCallback) Reset() { *m = ClaimCallback{} } +func (m *ClaimCallback) String() string { return proto.CompactTextString(m) } +func (*ClaimCallback) ProtoMessage() {} +func (*ClaimCallback) Descriptor() ([]byte, []int) { + return fileDescriptor_f41c99b09b96a5ac, []int{3} +} +func (m *ClaimCallback) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClaimCallback) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ClaimCallback.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ClaimCallback) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClaimCallback.Merge(m, src) +} +func (m *ClaimCallback) XXX_Size() int { + return m.Size() +} +func (m *ClaimCallback) XXX_DiscardUnknown() { + xxx_messageInfo_ClaimCallback.DiscardUnknown(m) +} + +var xxx_messageInfo_ClaimCallback proto.InternalMessageInfo + +func (m *ClaimCallback) GetUserRedemptionRecordId() string { + if m != nil { + return m.UserRedemptionRecordId + } + return "" +} + +func (m *ClaimCallback) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +func (m *ClaimCallback) GetEpochNumber() uint64 { + if m != nil { + return m.EpochNumber + } + return 0 +} + +type ReinvestCallback struct { + ReinvestAmount types.Coin `protobuf:"bytes,1,opt,name=reinvest_amount,json=reinvestAmount,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coin" json:"reinvest_amount"` + HostZoneId string `protobuf:"bytes,3,opt,name=host_zone_id,json=hostZoneId,proto3" json:"host_zone_id,omitempty"` +} + +func (m *ReinvestCallback) Reset() { *m = ReinvestCallback{} } +func (m *ReinvestCallback) String() string { return proto.CompactTextString(m) } +func (*ReinvestCallback) ProtoMessage() {} +func (*ReinvestCallback) Descriptor() ([]byte, []int) { + return fileDescriptor_f41c99b09b96a5ac, []int{4} +} +func (m *ReinvestCallback) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ReinvestCallback) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ReinvestCallback.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ReinvestCallback) XXX_Merge(src proto.Message) { + xxx_messageInfo_ReinvestCallback.Merge(m, src) +} +func (m *ReinvestCallback) XXX_Size() int { + return m.Size() +} +func (m *ReinvestCallback) XXX_DiscardUnknown() { + xxx_messageInfo_ReinvestCallback.DiscardUnknown(m) +} + +var xxx_messageInfo_ReinvestCallback proto.InternalMessageInfo + +func (m *ReinvestCallback) GetReinvestAmount() types.Coin { + if m != nil { + return m.ReinvestAmount + } + return types.Coin{} +} + +func (m *ReinvestCallback) GetHostZoneId() string { + if m != nil { + return m.HostZoneId + } + return "" +} + +type UndelegateCallback struct { + HostZoneId string `protobuf:"bytes,1,opt,name=host_zone_id,json=hostZoneId,proto3" json:"host_zone_id,omitempty"` + SplitUndelegations []*SplitUndelegation `protobuf:"bytes,2,rep,name=split_undelegations,json=splitUndelegations,proto3" json:"split_undelegations,omitempty"` + EpochUnbondingRecordIds []uint64 `protobuf:"varint,3,rep,packed,name=epoch_unbonding_record_ids,json=epochUnbondingRecordIds,proto3" json:"epoch_unbonding_record_ids,omitempty"` +} + +func (m *UndelegateCallback) Reset() { *m = UndelegateCallback{} } +func (m *UndelegateCallback) String() string { return proto.CompactTextString(m) } +func (*UndelegateCallback) ProtoMessage() {} +func (*UndelegateCallback) Descriptor() ([]byte, []int) { + return fileDescriptor_f41c99b09b96a5ac, []int{5} +} +func (m *UndelegateCallback) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *UndelegateCallback) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_UndelegateCallback.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *UndelegateCallback) XXX_Merge(src proto.Message) { + xxx_messageInfo_UndelegateCallback.Merge(m, src) +} +func (m *UndelegateCallback) XXX_Size() int { + return m.Size() +} +func (m *UndelegateCallback) XXX_DiscardUnknown() { + xxx_messageInfo_UndelegateCallback.DiscardUnknown(m) +} + +var xxx_messageInfo_UndelegateCallback proto.InternalMessageInfo + +func (m *UndelegateCallback) GetHostZoneId() string { + if m != nil { + return m.HostZoneId + } + return "" +} + +func (m *UndelegateCallback) GetSplitUndelegations() []*SplitUndelegation { + if m != nil { + return m.SplitUndelegations + } + return nil +} + +func (m *UndelegateCallback) GetEpochUnbondingRecordIds() []uint64 { + if m != nil { + return m.EpochUnbondingRecordIds + } + return nil +} + +type RedemptionCallback struct { + HostZoneId string `protobuf:"bytes,1,opt,name=host_zone_id,json=hostZoneId,proto3" json:"host_zone_id,omitempty"` + EpochUnbondingRecordIds []uint64 `protobuf:"varint,2,rep,packed,name=epoch_unbonding_record_ids,json=epochUnbondingRecordIds,proto3" json:"epoch_unbonding_record_ids,omitempty"` +} + +func (m *RedemptionCallback) Reset() { *m = RedemptionCallback{} } +func (m *RedemptionCallback) String() string { return proto.CompactTextString(m) } +func (*RedemptionCallback) ProtoMessage() {} +func (*RedemptionCallback) Descriptor() ([]byte, []int) { + return fileDescriptor_f41c99b09b96a5ac, []int{6} +} +func (m *RedemptionCallback) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RedemptionCallback) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RedemptionCallback.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RedemptionCallback) XXX_Merge(src proto.Message) { + xxx_messageInfo_RedemptionCallback.Merge(m, src) +} +func (m *RedemptionCallback) XXX_Size() int { + return m.Size() +} +func (m *RedemptionCallback) XXX_DiscardUnknown() { + xxx_messageInfo_RedemptionCallback.DiscardUnknown(m) +} + +var xxx_messageInfo_RedemptionCallback proto.InternalMessageInfo + +func (m *RedemptionCallback) GetHostZoneId() string { + if m != nil { + return m.HostZoneId + } + return "" +} + +func (m *RedemptionCallback) GetEpochUnbondingRecordIds() []uint64 { + if m != nil { + return m.EpochUnbondingRecordIds + } + return nil +} + +type Rebalancing struct { + SrcValidator string `protobuf:"bytes,1,opt,name=src_validator,json=srcValidator,proto3" json:"src_validator,omitempty"` + DstValidator string `protobuf:"bytes,2,opt,name=dst_validator,json=dstValidator,proto3" json:"dst_validator,omitempty"` + Amt cosmossdk_io_math.Int `protobuf:"bytes,3,opt,name=amt,proto3,customtype=cosmossdk.io/math.Int" json:"amt"` +} + +func (m *Rebalancing) Reset() { *m = Rebalancing{} } +func (m *Rebalancing) String() string { return proto.CompactTextString(m) } +func (*Rebalancing) ProtoMessage() {} +func (*Rebalancing) Descriptor() ([]byte, []int) { + return fileDescriptor_f41c99b09b96a5ac, []int{7} +} +func (m *Rebalancing) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Rebalancing) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Rebalancing.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Rebalancing) XXX_Merge(src proto.Message) { + xxx_messageInfo_Rebalancing.Merge(m, src) +} +func (m *Rebalancing) XXX_Size() int { + return m.Size() +} +func (m *Rebalancing) XXX_DiscardUnknown() { + xxx_messageInfo_Rebalancing.DiscardUnknown(m) +} + +var xxx_messageInfo_Rebalancing proto.InternalMessageInfo + +func (m *Rebalancing) GetSrcValidator() string { + if m != nil { + return m.SrcValidator + } + return "" +} + +func (m *Rebalancing) GetDstValidator() string { + if m != nil { + return m.DstValidator + } + return "" +} + +type RebalanceCallback struct { + HostZoneId string `protobuf:"bytes,1,opt,name=host_zone_id,json=hostZoneId,proto3" json:"host_zone_id,omitempty"` + Rebalancings []*Rebalancing `protobuf:"bytes,2,rep,name=rebalancings,proto3" json:"rebalancings,omitempty"` +} + +func (m *RebalanceCallback) Reset() { *m = RebalanceCallback{} } +func (m *RebalanceCallback) String() string { return proto.CompactTextString(m) } +func (*RebalanceCallback) ProtoMessage() {} +func (*RebalanceCallback) Descriptor() ([]byte, []int) { + return fileDescriptor_f41c99b09b96a5ac, []int{8} +} +func (m *RebalanceCallback) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *RebalanceCallback) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_RebalanceCallback.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *RebalanceCallback) XXX_Merge(src proto.Message) { + xxx_messageInfo_RebalanceCallback.Merge(m, src) +} +func (m *RebalanceCallback) XXX_Size() int { + return m.Size() +} +func (m *RebalanceCallback) XXX_DiscardUnknown() { + xxx_messageInfo_RebalanceCallback.DiscardUnknown(m) +} + +var xxx_messageInfo_RebalanceCallback proto.InternalMessageInfo + +func (m *RebalanceCallback) GetHostZoneId() string { + if m != nil { + return m.HostZoneId + } + return "" +} + +func (m *RebalanceCallback) GetRebalancings() []*Rebalancing { + if m != nil { + return m.Rebalancings + } + return nil +} + +type DetokenizeSharesCallback struct { + Deposit *types1.LSMTokenDeposit `protobuf:"bytes,1,opt,name=deposit,proto3" json:"deposit,omitempty"` +} + +func (m *DetokenizeSharesCallback) Reset() { *m = DetokenizeSharesCallback{} } +func (m *DetokenizeSharesCallback) String() string { return proto.CompactTextString(m) } +func (*DetokenizeSharesCallback) ProtoMessage() {} +func (*DetokenizeSharesCallback) Descriptor() ([]byte, []int) { + return fileDescriptor_f41c99b09b96a5ac, []int{9} +} +func (m *DetokenizeSharesCallback) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DetokenizeSharesCallback) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DetokenizeSharesCallback.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *DetokenizeSharesCallback) XXX_Merge(src proto.Message) { + xxx_messageInfo_DetokenizeSharesCallback.Merge(m, src) +} +func (m *DetokenizeSharesCallback) XXX_Size() int { + return m.Size() +} +func (m *DetokenizeSharesCallback) XXX_DiscardUnknown() { + xxx_messageInfo_DetokenizeSharesCallback.DiscardUnknown(m) +} + +var xxx_messageInfo_DetokenizeSharesCallback proto.InternalMessageInfo + +func (m *DetokenizeSharesCallback) GetDeposit() *types1.LSMTokenDeposit { + if m != nil { + return m.Deposit + } + return nil +} + +type LSMLiquidStake struct { + Deposit *types1.LSMTokenDeposit `protobuf:"bytes,1,opt,name=deposit,proto3" json:"deposit,omitempty"` + HostZone *HostZone `protobuf:"bytes,2,opt,name=host_zone,json=hostZone,proto3" json:"host_zone,omitempty"` + Validator *Validator `protobuf:"bytes,3,opt,name=validator,proto3" json:"validator,omitempty"` +} + +func (m *LSMLiquidStake) Reset() { *m = LSMLiquidStake{} } +func (m *LSMLiquidStake) String() string { return proto.CompactTextString(m) } +func (*LSMLiquidStake) ProtoMessage() {} +func (*LSMLiquidStake) Descriptor() ([]byte, []int) { + return fileDescriptor_f41c99b09b96a5ac, []int{10} +} +func (m *LSMLiquidStake) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LSMLiquidStake) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_LSMLiquidStake.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *LSMLiquidStake) XXX_Merge(src proto.Message) { + xxx_messageInfo_LSMLiquidStake.Merge(m, src) +} +func (m *LSMLiquidStake) XXX_Size() int { + return m.Size() +} +func (m *LSMLiquidStake) XXX_DiscardUnknown() { + xxx_messageInfo_LSMLiquidStake.DiscardUnknown(m) +} + +var xxx_messageInfo_LSMLiquidStake proto.InternalMessageInfo + +func (m *LSMLiquidStake) GetDeposit() *types1.LSMTokenDeposit { + if m != nil { + return m.Deposit + } + return nil +} + +func (m *LSMLiquidStake) GetHostZone() *HostZone { + if m != nil { + return m.HostZone + } + return nil +} + +func (m *LSMLiquidStake) GetValidator() *Validator { + if m != nil { + return m.Validator + } + return nil +} + +type ValidatorSharesToTokensQueryCallback struct { + LsmLiquidStake *LSMLiquidStake `protobuf:"bytes,1,opt,name=lsm_liquid_stake,json=lsmLiquidStake,proto3" json:"lsm_liquid_stake,omitempty"` +} + +func (m *ValidatorSharesToTokensQueryCallback) Reset() { *m = ValidatorSharesToTokensQueryCallback{} } +func (m *ValidatorSharesToTokensQueryCallback) String() string { return proto.CompactTextString(m) } +func (*ValidatorSharesToTokensQueryCallback) ProtoMessage() {} +func (*ValidatorSharesToTokensQueryCallback) Descriptor() ([]byte, []int) { + return fileDescriptor_f41c99b09b96a5ac, []int{11} +} +func (m *ValidatorSharesToTokensQueryCallback) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ValidatorSharesToTokensQueryCallback) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ValidatorSharesToTokensQueryCallback.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ValidatorSharesToTokensQueryCallback) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidatorSharesToTokensQueryCallback.Merge(m, src) +} +func (m *ValidatorSharesToTokensQueryCallback) XXX_Size() int { + return m.Size() +} +func (m *ValidatorSharesToTokensQueryCallback) XXX_DiscardUnknown() { + xxx_messageInfo_ValidatorSharesToTokensQueryCallback.DiscardUnknown(m) +} + +var xxx_messageInfo_ValidatorSharesToTokensQueryCallback proto.InternalMessageInfo + +func (m *ValidatorSharesToTokensQueryCallback) GetLsmLiquidStake() *LSMLiquidStake { + if m != nil { + return m.LsmLiquidStake + } + return nil +} + +type DelegatorSharesQueryCallback struct { + // Validator delegation at the time the query is submitted + InitialValidatorDelegation cosmossdk_io_math.Int `protobuf:"bytes,1,opt,name=initial_validator_delegation,json=initialValidatorDelegation,proto3,customtype=cosmossdk.io/math.Int" json:"initial_validator_delegation"` +} + +func (m *DelegatorSharesQueryCallback) Reset() { *m = DelegatorSharesQueryCallback{} } +func (m *DelegatorSharesQueryCallback) String() string { return proto.CompactTextString(m) } +func (*DelegatorSharesQueryCallback) ProtoMessage() {} +func (*DelegatorSharesQueryCallback) Descriptor() ([]byte, []int) { + return fileDescriptor_f41c99b09b96a5ac, []int{12} +} +func (m *DelegatorSharesQueryCallback) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DelegatorSharesQueryCallback) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DelegatorSharesQueryCallback.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *DelegatorSharesQueryCallback) XXX_Merge(src proto.Message) { + xxx_messageInfo_DelegatorSharesQueryCallback.Merge(m, src) +} +func (m *DelegatorSharesQueryCallback) XXX_Size() int { + return m.Size() +} +func (m *DelegatorSharesQueryCallback) XXX_DiscardUnknown() { + xxx_messageInfo_DelegatorSharesQueryCallback.DiscardUnknown(m) +} + +var xxx_messageInfo_DelegatorSharesQueryCallback proto.InternalMessageInfo + +type CommunityPoolBalanceQueryCallback struct { + IcaType ICAAccountType `protobuf:"varint,1,opt,name=ica_type,json=icaType,proto3,enum=stride.stakeibc.ICAAccountType" json:"ica_type,omitempty"` + Denom string `protobuf:"bytes,2,opt,name=denom,proto3" json:"denom,omitempty"` +} + +func (m *CommunityPoolBalanceQueryCallback) Reset() { *m = CommunityPoolBalanceQueryCallback{} } +func (m *CommunityPoolBalanceQueryCallback) String() string { return proto.CompactTextString(m) } +func (*CommunityPoolBalanceQueryCallback) ProtoMessage() {} +func (*CommunityPoolBalanceQueryCallback) Descriptor() ([]byte, []int) { + return fileDescriptor_f41c99b09b96a5ac, []int{13} +} +func (m *CommunityPoolBalanceQueryCallback) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CommunityPoolBalanceQueryCallback) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_CommunityPoolBalanceQueryCallback.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *CommunityPoolBalanceQueryCallback) XXX_Merge(src proto.Message) { + xxx_messageInfo_CommunityPoolBalanceQueryCallback.Merge(m, src) +} +func (m *CommunityPoolBalanceQueryCallback) XXX_Size() int { + return m.Size() +} +func (m *CommunityPoolBalanceQueryCallback) XXX_DiscardUnknown() { + xxx_messageInfo_CommunityPoolBalanceQueryCallback.DiscardUnknown(m) +} + +var xxx_messageInfo_CommunityPoolBalanceQueryCallback proto.InternalMessageInfo + +func (m *CommunityPoolBalanceQueryCallback) GetIcaType() ICAAccountType { + if m != nil { + return m.IcaType + } + return ICAAccountType_DELEGATION +} + +func (m *CommunityPoolBalanceQueryCallback) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +type TradeRouteCallback struct { + RewardDenom string `protobuf:"bytes,1,opt,name=reward_denom,json=rewardDenom,proto3" json:"reward_denom,omitempty"` + HostDenom string `protobuf:"bytes,2,opt,name=host_denom,json=hostDenom,proto3" json:"host_denom,omitempty"` +} + +func (m *TradeRouteCallback) Reset() { *m = TradeRouteCallback{} } +func (m *TradeRouteCallback) String() string { return proto.CompactTextString(m) } +func (*TradeRouteCallback) ProtoMessage() {} +func (*TradeRouteCallback) Descriptor() ([]byte, []int) { + return fileDescriptor_f41c99b09b96a5ac, []int{14} +} +func (m *TradeRouteCallback) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TradeRouteCallback) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TradeRouteCallback.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TradeRouteCallback) XXX_Merge(src proto.Message) { + xxx_messageInfo_TradeRouteCallback.Merge(m, src) +} +func (m *TradeRouteCallback) XXX_Size() int { + return m.Size() +} +func (m *TradeRouteCallback) XXX_DiscardUnknown() { + xxx_messageInfo_TradeRouteCallback.DiscardUnknown(m) +} + +var xxx_messageInfo_TradeRouteCallback proto.InternalMessageInfo + +func (m *TradeRouteCallback) GetRewardDenom() string { + if m != nil { + return m.RewardDenom + } + return "" +} + +func (m *TradeRouteCallback) GetHostDenom() string { + if m != nil { + return m.HostDenom + } + return "" +} + +func init() { + proto.RegisterType((*SplitDelegation)(nil), "stride.stakeibc.SplitDelegation") + proto.RegisterType((*SplitUndelegation)(nil), "stride.stakeibc.SplitUndelegation") + proto.RegisterType((*DelegateCallback)(nil), "stride.stakeibc.DelegateCallback") + proto.RegisterType((*ClaimCallback)(nil), "stride.stakeibc.ClaimCallback") + proto.RegisterType((*ReinvestCallback)(nil), "stride.stakeibc.ReinvestCallback") + proto.RegisterType((*UndelegateCallback)(nil), "stride.stakeibc.UndelegateCallback") + proto.RegisterType((*RedemptionCallback)(nil), "stride.stakeibc.RedemptionCallback") + proto.RegisterType((*Rebalancing)(nil), "stride.stakeibc.Rebalancing") + proto.RegisterType((*RebalanceCallback)(nil), "stride.stakeibc.RebalanceCallback") + proto.RegisterType((*DetokenizeSharesCallback)(nil), "stride.stakeibc.DetokenizeSharesCallback") + proto.RegisterType((*LSMLiquidStake)(nil), "stride.stakeibc.LSMLiquidStake") + proto.RegisterType((*ValidatorSharesToTokensQueryCallback)(nil), "stride.stakeibc.ValidatorSharesToTokensQueryCallback") + proto.RegisterType((*DelegatorSharesQueryCallback)(nil), "stride.stakeibc.DelegatorSharesQueryCallback") + proto.RegisterType((*CommunityPoolBalanceQueryCallback)(nil), "stride.stakeibc.CommunityPoolBalanceQueryCallback") + proto.RegisterType((*TradeRouteCallback)(nil), "stride.stakeibc.TradeRouteCallback") +} + +func init() { proto.RegisterFile("stride/stakeibc/callbacks.proto", fileDescriptor_f41c99b09b96a5ac) } + +var fileDescriptor_f41c99b09b96a5ac = []byte{ + // 984 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0x4d, 0x6f, 0xdb, 0x46, + 0x13, 0x36, 0xad, 0xbc, 0xb1, 0x3d, 0xfe, 0x14, 0x93, 0xb7, 0x95, 0x05, 0x45, 0xb2, 0x99, 0x02, + 0x0d, 0x0a, 0x84, 0x44, 0x5c, 0xb4, 0x48, 0xdb, 0x4b, 0x6d, 0xf9, 0x50, 0x01, 0x72, 0xd1, 0x52, + 0x76, 0x0e, 0xb9, 0x10, 0x4b, 0x72, 0x2b, 0x2d, 0x44, 0xee, 0x2a, 0xdc, 0xa5, 0x52, 0xe7, 0xd2, + 0x1e, 0x73, 0xec, 0xdf, 0x68, 0x2f, 0xfd, 0x05, 0xbd, 0xfb, 0x98, 0x63, 0xd1, 0x43, 0x5a, 0xd8, + 0x7f, 0xa4, 0xd8, 0x0f, 0x52, 0x94, 0x9c, 0x26, 0x35, 0x7a, 0x12, 0x39, 0xfb, 0xcc, 0xce, 0x33, + 0xf3, 0xcc, 0x8c, 0x08, 0x1d, 0x2e, 0x32, 0x12, 0x63, 0x8f, 0x0b, 0x34, 0xc6, 0x24, 0x8c, 0xbc, + 0x08, 0x25, 0x49, 0x88, 0xa2, 0x31, 0x77, 0x27, 0x19, 0x13, 0xcc, 0xde, 0xd6, 0x00, 0xb7, 0x00, + 0x34, 0xdb, 0x11, 0xe3, 0x29, 0xe3, 0x5e, 0x88, 0x38, 0xf6, 0xa6, 0x8f, 0x42, 0x2c, 0xd0, 0x23, + 0x2f, 0x62, 0x84, 0x6a, 0x87, 0xe6, 0xdd, 0x21, 0x1b, 0x32, 0xf5, 0xe8, 0xc9, 0x27, 0x63, 0x6d, + 0x99, 0x38, 0x19, 0x8e, 0x58, 0x16, 0xf3, 0xe2, 0xd7, 0x9c, 0x5e, 0x63, 0x31, 0x62, 0x5c, 0x04, + 0x2f, 0x18, 0xc5, 0x06, 0xb0, 0xbf, 0x08, 0x20, 0x11, 0x0a, 0x50, 0x14, 0xb1, 0x9c, 0x8a, 0x7f, + 0xba, 0x63, 0x8a, 0x12, 0x12, 0x23, 0xc1, 0x32, 0x0d, 0x70, 0xbe, 0x83, 0xed, 0xc1, 0x24, 0x21, + 0xe2, 0x18, 0x27, 0x78, 0x88, 0x04, 0x61, 0xd4, 0x6e, 0xc1, 0x5a, 0x89, 0x6a, 0x58, 0x7b, 0xd6, + 0x83, 0x35, 0x7f, 0x66, 0xb0, 0x3f, 0x81, 0xdb, 0x28, 0x95, 0x11, 0x1a, 0xcb, 0xf2, 0xe8, 0xe8, + 0xde, 0xc5, 0xeb, 0xce, 0xd2, 0x1f, 0xaf, 0x3b, 0xff, 0xd7, 0x15, 0xe0, 0xf1, 0xd8, 0x25, 0xcc, + 0x4b, 0x91, 0x18, 0xb9, 0x3d, 0x2a, 0x7c, 0x03, 0x76, 0x7e, 0xb4, 0xa0, 0xae, 0x02, 0x9d, 0xd1, + 0xf8, 0xdf, 0x86, 0x3a, 0x81, 0x3b, 0x14, 0x09, 0x32, 0xc5, 0x81, 0x60, 0x63, 0x4c, 0x83, 0x9b, + 0xc4, 0xad, 0x6b, 0xcf, 0x53, 0xe9, 0x78, 0xa8, 0x29, 0xfc, 0x6a, 0xc1, 0x8e, 0x49, 0x13, 0x77, + 0x8d, 0xa0, 0xf6, 0x1e, 0x6c, 0x94, 0x65, 0x0d, 0x48, 0x6c, 0x48, 0x80, 0xb4, 0x3d, 0x65, 0x14, + 0xf7, 0x62, 0xfb, 0x23, 0xa8, 0xc7, 0x78, 0xc2, 0x38, 0x11, 0x81, 0xd6, 0x47, 0xc2, 0x24, 0x87, + 0x5b, 0xfe, 0xb6, 0x39, 0xf0, 0x95, 0xbd, 0x17, 0xdb, 0x27, 0x50, 0xe7, 0x32, 0xc9, 0x60, 0x96, + 0x23, 0x6f, 0xd4, 0xf6, 0x6a, 0x0f, 0xd6, 0x0f, 0xf6, 0xdc, 0x85, 0x9e, 0x71, 0x17, 0xea, 0xee, + 0xef, 0xf0, 0x79, 0x03, 0x77, 0x5e, 0x5a, 0xb0, 0xd9, 0x4d, 0x10, 0x49, 0x4b, 0xba, 0x9f, 0xc1, + 0x6e, 0xce, 0x71, 0x16, 0x64, 0x38, 0xc6, 0xe9, 0x44, 0xa2, 0x2a, 0xa4, 0x34, 0xf7, 0xf7, 0x24, + 0xc0, 0x2f, 0xcf, 0x4b, 0x6e, 0xbb, 0xb0, 0x1a, 0x8d, 0x10, 0xa1, 0x05, 0xfd, 0x35, 0x7f, 0x45, + 0xbd, 0xf7, 0x62, 0x7b, 0x1f, 0x36, 0xf0, 0x84, 0x45, 0xa3, 0x80, 0xe6, 0x69, 0x88, 0xb3, 0x46, + 0x4d, 0x65, 0xb7, 0xae, 0x6c, 0x5f, 0x2b, 0x93, 0xf3, 0xb3, 0x05, 0x3b, 0x3e, 0x26, 0x74, 0x8a, + 0xb9, 0x28, 0xd9, 0x70, 0xd8, 0xce, 0x8c, 0xad, 0x10, 0x47, 0x72, 0x58, 0x3f, 0xd8, 0x75, 0xb5, + 0x2a, 0xae, 0x9c, 0x07, 0xd7, 0xcc, 0x83, 0xdb, 0x65, 0x84, 0x1e, 0x79, 0x52, 0xb7, 0x5f, 0xfe, + 0xec, 0x7c, 0x38, 0x24, 0x62, 0x94, 0x87, 0x6e, 0xc4, 0x52, 0xcf, 0x0c, 0x8f, 0xfe, 0x79, 0xc8, + 0xe3, 0xb1, 0x27, 0xce, 0x27, 0x98, 0x2b, 0x07, 0x7f, 0xab, 0x08, 0xa1, 0x65, 0xbc, 0xa6, 0x58, + 0x6d, 0x51, 0x31, 0xe7, 0xc2, 0x02, 0xbb, 0x6c, 0xb3, 0x9b, 0x48, 0x3d, 0x80, 0x3b, 0x5a, 0xbe, + 0x9c, 0x56, 0x05, 0x5c, 0x56, 0x02, 0x3a, 0x6f, 0x16, 0xb0, 0xda, 0xcf, 0xbe, 0xcd, 0x17, 0x4d, + 0xdc, 0xfe, 0x02, 0x9a, 0xba, 0xb8, 0x39, 0x0d, 0x19, 0x8d, 0x09, 0x1d, 0xce, 0x24, 0xd3, 0xcd, + 0x71, 0xcb, 0x7f, 0x5f, 0x21, 0xce, 0x0a, 0x40, 0xa1, 0x19, 0x77, 0x38, 0xd8, 0x33, 0x29, 0x6f, + 0x90, 0xc9, 0xdb, 0x83, 0x2e, 0xbf, 0x3d, 0xe8, 0x4b, 0x0b, 0xd6, 0x7d, 0x1c, 0xa2, 0x04, 0xd1, + 0x88, 0xd0, 0xa1, 0x7d, 0x1f, 0x36, 0x79, 0x16, 0x05, 0x8b, 0x93, 0xba, 0xc1, 0xb3, 0xe8, 0x49, + 0x39, 0xac, 0xf7, 0x61, 0x33, 0xe6, 0xa2, 0x02, 0xd2, 0x3d, 0xb6, 0x11, 0x73, 0x31, 0x03, 0x79, + 0x50, 0x43, 0xa9, 0xd0, 0x92, 0xbd, 0x6b, 0x82, 0x25, 0xd2, 0x79, 0x0e, 0xf5, 0x82, 0xc9, 0x4d, + 0x84, 0xfc, 0x12, 0x36, 0xb2, 0x59, 0x02, 0x85, 0x82, 0xad, 0x6b, 0x0a, 0x56, 0xb2, 0xf4, 0xe7, + 0x3c, 0x9c, 0x33, 0x68, 0x1c, 0x63, 0xb5, 0x76, 0xc8, 0x0b, 0x3c, 0x18, 0xa1, 0x0c, 0xf3, 0xca, + 0x10, 0xae, 0x98, 0xc1, 0x37, 0xed, 0xde, 0x29, 0x2e, 0x2e, 0x16, 0x78, 0x7f, 0x70, 0xa2, 0x36, + 0xcf, 0xb1, 0xd9, 0x0f, 0x05, 0xde, 0xf9, 0xcd, 0x82, 0xad, 0xfe, 0xe0, 0xa4, 0x4f, 0x9e, 0xe5, + 0x24, 0x1e, 0x48, 0x1a, 0xff, 0xe1, 0x36, 0xfb, 0x53, 0x58, 0x2b, 0x0b, 0xa1, 0xea, 0x2d, 0x27, + 0x6f, 0x31, 0xc7, 0xaf, 0x4c, 0x59, 0xfc, 0xd5, 0xa2, 0x40, 0xf6, 0xe3, 0xea, 0xda, 0xad, 0x29, + 0xbf, 0xe6, 0x35, 0xbf, 0x52, 0xb5, 0xca, 0x4a, 0x76, 0x9e, 0xc1, 0x07, 0xa5, 0x5d, 0x57, 0xe5, + 0x94, 0x29, 0x6e, 0xfc, 0xdb, 0x1c, 0x67, 0xe7, 0x65, 0x89, 0x7a, 0xb0, 0x93, 0xf0, 0x34, 0x48, + 0x54, 0x9e, 0x81, 0xba, 0x73, 0x31, 0xbb, 0x32, 0xd0, 0x7c, 0x3d, 0xfc, 0xad, 0x84, 0xa7, 0x95, + 0x77, 0xe7, 0x07, 0x68, 0x99, 0x9d, 0x58, 0x84, 0x9c, 0x0f, 0x15, 0x40, 0x8b, 0x50, 0x22, 0x08, + 0x4a, 0x66, 0xcd, 0x57, 0xd9, 0xbf, 0xba, 0x3b, 0xde, 0xd5, 0x6c, 0x4d, 0x73, 0x45, 0x99, 0xdc, + 0x6c, 0x0d, 0x3b, 0x39, 0xec, 0x77, 0x59, 0x9a, 0xe6, 0x94, 0x88, 0xf3, 0x6f, 0x18, 0x4b, 0x8e, + 0x74, 0x3b, 0xce, 0xb3, 0xf8, 0x1c, 0x56, 0xe5, 0xbf, 0xaf, 0xdc, 0x5b, 0x2a, 0xe2, 0xd6, 0x1b, + 0x12, 0xed, 0x75, 0x0f, 0x0f, 0xf5, 0xbf, 0xf3, 0xe9, 0xf9, 0x04, 0xfb, 0x2b, 0x24, 0x42, 0xf2, + 0xc1, 0xbe, 0x0b, 0xff, 0x8b, 0x31, 0x65, 0xa9, 0x19, 0x19, 0xfd, 0xe2, 0x3c, 0x01, 0xfb, 0x34, + 0x43, 0x31, 0xf6, 0x59, 0x5e, 0x59, 0x62, 0xfb, 0xb2, 0xb3, 0x9f, 0xa3, 0x2c, 0x0e, 0xb4, 0x8b, + 0xee, 0xfd, 0x75, 0x6d, 0x3b, 0x96, 0x26, 0xfb, 0x1e, 0xa8, 0x51, 0x08, 0xaa, 0x77, 0xaa, 0x3e, + 0x51, 0xc7, 0x47, 0xfd, 0x8b, 0xcb, 0xb6, 0xf5, 0xea, 0xb2, 0x6d, 0xfd, 0x75, 0xd9, 0xb6, 0x7e, + 0xba, 0x6a, 0x2f, 0xbd, 0xba, 0x6a, 0x2f, 0xfd, 0x7e, 0xd5, 0x5e, 0x7a, 0x7a, 0x50, 0x59, 0xc9, + 0x03, 0xc5, 0xfd, 0x61, 0x1f, 0x85, 0xdc, 0x33, 0xdf, 0x10, 0xd3, 0x83, 0xc7, 0xde, 0xf7, 0xb3, + 0x2f, 0x09, 0xb5, 0xa2, 0xc3, 0xdb, 0xea, 0x33, 0xe2, 0xe3, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, + 0xc2, 0x78, 0x17, 0x35, 0x33, 0x09, 0x00, 0x00, +} + +func (m *SplitDelegation) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SplitDelegation) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SplitDelegation) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.Amount.Size() + i -= size + if _, err := m.Amount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintCallbacks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Validator) > 0 { + i -= len(m.Validator) + copy(dAtA[i:], m.Validator) + i = encodeVarintCallbacks(dAtA, i, uint64(len(m.Validator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *SplitUndelegation) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SplitUndelegation) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SplitUndelegation) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.NativeTokenAmount.Size() + i -= size + if _, err := m.NativeTokenAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintCallbacks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Validator) > 0 { + i -= len(m.Validator) + copy(dAtA[i:], m.Validator) + i = encodeVarintCallbacks(dAtA, i, uint64(len(m.Validator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DelegateCallback) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DelegateCallback) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DelegateCallback) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.SplitDelegations) > 0 { + for iNdEx := len(m.SplitDelegations) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.SplitDelegations[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCallbacks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if m.DepositRecordId != 0 { + i = encodeVarintCallbacks(dAtA, i, uint64(m.DepositRecordId)) + i-- + dAtA[i] = 0x10 + } + if len(m.HostZoneId) > 0 { + i -= len(m.HostZoneId) + copy(dAtA[i:], m.HostZoneId) + i = encodeVarintCallbacks(dAtA, i, uint64(len(m.HostZoneId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ClaimCallback) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ClaimCallback) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClaimCallback) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.EpochNumber != 0 { + i = encodeVarintCallbacks(dAtA, i, uint64(m.EpochNumber)) + i-- + dAtA[i] = 0x18 + } + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintCallbacks(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0x12 + } + if len(m.UserRedemptionRecordId) > 0 { + i -= len(m.UserRedemptionRecordId) + copy(dAtA[i:], m.UserRedemptionRecordId) + i = encodeVarintCallbacks(dAtA, i, uint64(len(m.UserRedemptionRecordId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ReinvestCallback) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ReinvestCallback) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ReinvestCallback) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.HostZoneId) > 0 { + i -= len(m.HostZoneId) + copy(dAtA[i:], m.HostZoneId) + i = encodeVarintCallbacks(dAtA, i, uint64(len(m.HostZoneId))) + i-- + dAtA[i] = 0x1a + } + { + size, err := m.ReinvestAmount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCallbacks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *UndelegateCallback) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *UndelegateCallback) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *UndelegateCallback) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.EpochUnbondingRecordIds) > 0 { + dAtA3 := make([]byte, len(m.EpochUnbondingRecordIds)*10) + var j2 int + for _, num := range m.EpochUnbondingRecordIds { + for num >= 1<<7 { + dAtA3[j2] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j2++ + } + dAtA3[j2] = uint8(num) + j2++ + } + i -= j2 + copy(dAtA[i:], dAtA3[:j2]) + i = encodeVarintCallbacks(dAtA, i, uint64(j2)) + i-- + dAtA[i] = 0x1a + } + if len(m.SplitUndelegations) > 0 { + for iNdEx := len(m.SplitUndelegations) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.SplitUndelegations[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCallbacks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if len(m.HostZoneId) > 0 { + i -= len(m.HostZoneId) + copy(dAtA[i:], m.HostZoneId) + i = encodeVarintCallbacks(dAtA, i, uint64(len(m.HostZoneId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *RedemptionCallback) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RedemptionCallback) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RedemptionCallback) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.EpochUnbondingRecordIds) > 0 { + dAtA5 := make([]byte, len(m.EpochUnbondingRecordIds)*10) + var j4 int + for _, num := range m.EpochUnbondingRecordIds { + for num >= 1<<7 { + dAtA5[j4] = uint8(uint64(num)&0x7f | 0x80) + num >>= 7 + j4++ + } + dAtA5[j4] = uint8(num) + j4++ + } + i -= j4 + copy(dAtA[i:], dAtA5[:j4]) + i = encodeVarintCallbacks(dAtA, i, uint64(j4)) + i-- + dAtA[i] = 0x12 + } + if len(m.HostZoneId) > 0 { + i -= len(m.HostZoneId) + copy(dAtA[i:], m.HostZoneId) + i = encodeVarintCallbacks(dAtA, i, uint64(len(m.HostZoneId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Rebalancing) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Rebalancing) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Rebalancing) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.Amt.Size() + i -= size + if _, err := m.Amt.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintCallbacks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.DstValidator) > 0 { + i -= len(m.DstValidator) + copy(dAtA[i:], m.DstValidator) + i = encodeVarintCallbacks(dAtA, i, uint64(len(m.DstValidator))) + i-- + dAtA[i] = 0x12 + } + if len(m.SrcValidator) > 0 { + i -= len(m.SrcValidator) + copy(dAtA[i:], m.SrcValidator) + i = encodeVarintCallbacks(dAtA, i, uint64(len(m.SrcValidator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *RebalanceCallback) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *RebalanceCallback) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *RebalanceCallback) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Rebalancings) > 0 { + for iNdEx := len(m.Rebalancings) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Rebalancings[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCallbacks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if len(m.HostZoneId) > 0 { + i -= len(m.HostZoneId) + copy(dAtA[i:], m.HostZoneId) + i = encodeVarintCallbacks(dAtA, i, uint64(len(m.HostZoneId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DetokenizeSharesCallback) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DetokenizeSharesCallback) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DetokenizeSharesCallback) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Deposit != nil { + { + size, err := m.Deposit.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCallbacks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *LSMLiquidStake) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *LSMLiquidStake) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LSMLiquidStake) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Validator != nil { + { + size, err := m.Validator.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCallbacks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.HostZone != nil { + { + size, err := m.HostZone.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCallbacks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.Deposit != nil { + { + size, err := m.Deposit.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCallbacks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ValidatorSharesToTokensQueryCallback) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ValidatorSharesToTokensQueryCallback) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ValidatorSharesToTokensQueryCallback) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.LsmLiquidStake != nil { + { + size, err := m.LsmLiquidStake.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintCallbacks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *DelegatorSharesQueryCallback) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DelegatorSharesQueryCallback) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DelegatorSharesQueryCallback) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.InitialValidatorDelegation.Size() + i -= size + if _, err := m.InitialValidatorDelegation.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintCallbacks(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *CommunityPoolBalanceQueryCallback) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CommunityPoolBalanceQueryCallback) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CommunityPoolBalanceQueryCallback) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintCallbacks(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0x12 + } + if m.IcaType != 0 { + i = encodeVarintCallbacks(dAtA, i, uint64(m.IcaType)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *TradeRouteCallback) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TradeRouteCallback) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TradeRouteCallback) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.HostDenom) > 0 { + i -= len(m.HostDenom) + copy(dAtA[i:], m.HostDenom) + i = encodeVarintCallbacks(dAtA, i, uint64(len(m.HostDenom))) + i-- + dAtA[i] = 0x12 + } + if len(m.RewardDenom) > 0 { + i -= len(m.RewardDenom) + copy(dAtA[i:], m.RewardDenom) + i = encodeVarintCallbacks(dAtA, i, uint64(len(m.RewardDenom))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintCallbacks(dAtA []byte, offset int, v uint64) int { + offset -= sovCallbacks(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *SplitDelegation) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Validator) + if l > 0 { + n += 1 + l + sovCallbacks(uint64(l)) + } + l = m.Amount.Size() + n += 1 + l + sovCallbacks(uint64(l)) + return n +} + +func (m *SplitUndelegation) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Validator) + if l > 0 { + n += 1 + l + sovCallbacks(uint64(l)) + } + l = m.NativeTokenAmount.Size() + n += 1 + l + sovCallbacks(uint64(l)) + return n +} + +func (m *DelegateCallback) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.HostZoneId) + if l > 0 { + n += 1 + l + sovCallbacks(uint64(l)) + } + if m.DepositRecordId != 0 { + n += 1 + sovCallbacks(uint64(m.DepositRecordId)) + } + if len(m.SplitDelegations) > 0 { + for _, e := range m.SplitDelegations { + l = e.Size() + n += 1 + l + sovCallbacks(uint64(l)) + } + } + return n +} + +func (m *ClaimCallback) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.UserRedemptionRecordId) + if l > 0 { + n += 1 + l + sovCallbacks(uint64(l)) + } + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovCallbacks(uint64(l)) + } + if m.EpochNumber != 0 { + n += 1 + sovCallbacks(uint64(m.EpochNumber)) + } + return n +} + +func (m *ReinvestCallback) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ReinvestAmount.Size() + n += 1 + l + sovCallbacks(uint64(l)) + l = len(m.HostZoneId) + if l > 0 { + n += 1 + l + sovCallbacks(uint64(l)) + } + return n +} + +func (m *UndelegateCallback) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.HostZoneId) + if l > 0 { + n += 1 + l + sovCallbacks(uint64(l)) + } + if len(m.SplitUndelegations) > 0 { + for _, e := range m.SplitUndelegations { + l = e.Size() + n += 1 + l + sovCallbacks(uint64(l)) + } + } + if len(m.EpochUnbondingRecordIds) > 0 { + l = 0 + for _, e := range m.EpochUnbondingRecordIds { + l += sovCallbacks(uint64(e)) + } + n += 1 + sovCallbacks(uint64(l)) + l + } + return n +} + +func (m *RedemptionCallback) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.HostZoneId) + if l > 0 { + n += 1 + l + sovCallbacks(uint64(l)) + } + if len(m.EpochUnbondingRecordIds) > 0 { + l = 0 + for _, e := range m.EpochUnbondingRecordIds { + l += sovCallbacks(uint64(e)) + } + n += 1 + sovCallbacks(uint64(l)) + l + } + return n +} + +func (m *Rebalancing) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.SrcValidator) + if l > 0 { + n += 1 + l + sovCallbacks(uint64(l)) + } + l = len(m.DstValidator) + if l > 0 { + n += 1 + l + sovCallbacks(uint64(l)) + } + l = m.Amt.Size() + n += 1 + l + sovCallbacks(uint64(l)) + return n +} + +func (m *RebalanceCallback) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.HostZoneId) + if l > 0 { + n += 1 + l + sovCallbacks(uint64(l)) + } + if len(m.Rebalancings) > 0 { + for _, e := range m.Rebalancings { + l = e.Size() + n += 1 + l + sovCallbacks(uint64(l)) + } + } + return n +} + +func (m *DetokenizeSharesCallback) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Deposit != nil { + l = m.Deposit.Size() + n += 1 + l + sovCallbacks(uint64(l)) + } + return n +} + +func (m *LSMLiquidStake) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Deposit != nil { + l = m.Deposit.Size() + n += 1 + l + sovCallbacks(uint64(l)) + } + if m.HostZone != nil { + l = m.HostZone.Size() + n += 1 + l + sovCallbacks(uint64(l)) + } + if m.Validator != nil { + l = m.Validator.Size() + n += 1 + l + sovCallbacks(uint64(l)) + } + return n +} + +func (m *ValidatorSharesToTokensQueryCallback) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.LsmLiquidStake != nil { + l = m.LsmLiquidStake.Size() + n += 1 + l + sovCallbacks(uint64(l)) + } + return n +} + +func (m *DelegatorSharesQueryCallback) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.InitialValidatorDelegation.Size() + n += 1 + l + sovCallbacks(uint64(l)) + return n +} + +func (m *CommunityPoolBalanceQueryCallback) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.IcaType != 0 { + n += 1 + sovCallbacks(uint64(m.IcaType)) + } + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovCallbacks(uint64(l)) + } + return n +} + +func (m *TradeRouteCallback) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.RewardDenom) + if l > 0 { + n += 1 + l + sovCallbacks(uint64(l)) + } + l = len(m.HostDenom) + if l > 0 { + n += 1 + l + sovCallbacks(uint64(l)) + } + return n +} + +func sovCallbacks(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozCallbacks(x uint64) (n int) { + return sovCallbacks(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *SplitDelegation) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SplitDelegation: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SplitDelegation: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Validator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Validator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCallbacks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbacks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SplitUndelegation) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SplitUndelegation: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SplitUndelegation: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Validator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Validator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NativeTokenAmount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NativeTokenAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCallbacks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbacks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DelegateCallback) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DelegateCallback: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DelegateCallback: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZoneId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZoneId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DepositRecordId", wireType) + } + m.DepositRecordId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DepositRecordId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SplitDelegations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SplitDelegations = append(m.SplitDelegations, &SplitDelegation{}) + if err := m.SplitDelegations[len(m.SplitDelegations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCallbacks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbacks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ClaimCallback) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ClaimCallback: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ClaimCallback: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UserRedemptionRecordId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.UserRedemptionRecordId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EpochNumber", wireType) + } + m.EpochNumber = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EpochNumber |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipCallbacks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbacks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ReinvestCallback) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ReinvestCallback: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ReinvestCallback: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ReinvestAmount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ReinvestAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZoneId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZoneId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCallbacks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbacks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *UndelegateCallback) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: UndelegateCallback: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: UndelegateCallback: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZoneId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZoneId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SplitUndelegations", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SplitUndelegations = append(m.SplitUndelegations, &SplitUndelegation{}) + if err := m.SplitUndelegations[len(m.SplitUndelegations)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType == 0 { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.EpochUnbondingRecordIds = append(m.EpochUnbondingRecordIds, v) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + var count int + for _, integer := range dAtA[iNdEx:postIndex] { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.EpochUnbondingRecordIds) == 0 { + m.EpochUnbondingRecordIds = make([]uint64, 0, elementCount) + } + for iNdEx < postIndex { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.EpochUnbondingRecordIds = append(m.EpochUnbondingRecordIds, v) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field EpochUnbondingRecordIds", wireType) + } + default: + iNdEx = preIndex + skippy, err := skipCallbacks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbacks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RedemptionCallback) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RedemptionCallback: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RedemptionCallback: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZoneId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZoneId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType == 0 { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.EpochUnbondingRecordIds = append(m.EpochUnbondingRecordIds, v) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + var count int + for _, integer := range dAtA[iNdEx:postIndex] { + if integer < 128 { + count++ + } + } + elementCount = count + if elementCount != 0 && len(m.EpochUnbondingRecordIds) == 0 { + m.EpochUnbondingRecordIds = make([]uint64, 0, elementCount) + } + for iNdEx < postIndex { + var v uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.EpochUnbondingRecordIds = append(m.EpochUnbondingRecordIds, v) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field EpochUnbondingRecordIds", wireType) + } + default: + iNdEx = preIndex + skippy, err := skipCallbacks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbacks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Rebalancing) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Rebalancing: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Rebalancing: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SrcValidator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SrcValidator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DstValidator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DstValidator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amt", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Amt.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCallbacks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbacks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RebalanceCallback) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: RebalanceCallback: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RebalanceCallback: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZoneId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZoneId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Rebalancings", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Rebalancings = append(m.Rebalancings, &Rebalancing{}) + if err := m.Rebalancings[len(m.Rebalancings)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCallbacks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbacks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DetokenizeSharesCallback) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DetokenizeSharesCallback: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DetokenizeSharesCallback: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Deposit", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Deposit == nil { + m.Deposit = &types1.LSMTokenDeposit{} + } + if err := m.Deposit.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCallbacks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbacks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LSMLiquidStake) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LSMLiquidStake: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LSMLiquidStake: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Deposit", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Deposit == nil { + m.Deposit = &types1.LSMTokenDeposit{} + } + if err := m.Deposit.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZone", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.HostZone == nil { + m.HostZone = &HostZone{} + } + if err := m.HostZone.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Validator", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Validator == nil { + m.Validator = &Validator{} + } + if err := m.Validator.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCallbacks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbacks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ValidatorSharesToTokensQueryCallback) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ValidatorSharesToTokensQueryCallback: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ValidatorSharesToTokensQueryCallback: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LsmLiquidStake", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LsmLiquidStake == nil { + m.LsmLiquidStake = &LSMLiquidStake{} + } + if err := m.LsmLiquidStake.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCallbacks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbacks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DelegatorSharesQueryCallback) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DelegatorSharesQueryCallback: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DelegatorSharesQueryCallback: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InitialValidatorDelegation", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.InitialValidatorDelegation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCallbacks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbacks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CommunityPoolBalanceQueryCallback) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CommunityPoolBalanceQueryCallback: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CommunityPoolBalanceQueryCallback: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IcaType", wireType) + } + m.IcaType = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.IcaType |= ICAAccountType(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCallbacks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbacks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TradeRouteCallback) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TradeRouteCallback: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TradeRouteCallback: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RewardDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RewardDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowCallbacks + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthCallbacks + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthCallbacks + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipCallbacks(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthCallbacks + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipCallbacks(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowCallbacks + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowCallbacks + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowCallbacks + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthCallbacks + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupCallbacks + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthCallbacks + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthCallbacks = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowCallbacks = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupCallbacks = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/stakeibc/types/codec.go b/x/stakeibc/types/codec.go new file mode 100644 index 00000000000..f514c45c0cf --- /dev/null +++ b/x/stakeibc/types/codec.go @@ -0,0 +1,67 @@ +package types + +import ( + "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/codec/legacy" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" +) + +func RegisterCodec(cdc *codec.LegacyAmino) { + legacy.RegisterAminoMsg(cdc, &MsgLiquidStake{}, "stakeibc/MsgLiquidStake") + legacy.RegisterAminoMsg(cdc, &MsgLSMLiquidStake{}, "stakeibc/MsgLSMLiquidStake") + legacy.RegisterAminoMsg(cdc, &MsgClearBalance{}, "stakeibc/MsgClearBalance") + legacy.RegisterAminoMsg(cdc, &MsgRegisterHostZone{}, "stakeibc/MsgRegisterHostZone") + legacy.RegisterAminoMsg(cdc, &MsgRedeemStake{}, "stakeibc/MsgRedeemStake") + legacy.RegisterAminoMsg(cdc, &MsgClaimUndelegatedTokens{}, "stakeibc/MsgClaimUndelegatedTokens") + legacy.RegisterAminoMsg(cdc, &MsgRebalanceValidators{}, "stakeibc/MsgRebalanceValidators") + legacy.RegisterAminoMsg(cdc, &MsgAddValidators{}, "stakeibc/MsgAddValidators") + legacy.RegisterAminoMsg(cdc, &MsgChangeValidatorWeights{}, "stakeibc/MsgChangeValidatorWeights") + legacy.RegisterAminoMsg(cdc, &MsgDeleteValidator{}, "stakeibc/MsgDeleteValidator") + legacy.RegisterAminoMsg(cdc, &AddValidatorsProposal{}, "stakeibc/AddValidatorsProposal") + legacy.RegisterAminoMsg(cdc, &ToggleLSMProposal{}, "stakeibc/ToggleLSMProposal") + legacy.RegisterAminoMsg(cdc, &MsgRestoreInterchainAccount{}, "stakeibc/MsgRestoreInterchainAccount") + legacy.RegisterAminoMsg(cdc, &MsgCloseDelegationChannel{}, "stakeibc/MsgCloseDelegationChannel") + legacy.RegisterAminoMsg(cdc, &MsgUpdateValidatorSharesExchRate{}, "stakeibc/MsgUpdateValSharesExchRate") + legacy.RegisterAminoMsg(cdc, &MsgCalibrateDelegation{}, "stakeibc/MsgCalibrateDelegation") + legacy.RegisterAminoMsg(cdc, &MsgCreateTradeRoute{}, "stakeibc/MsgCreateTradeRoute") + legacy.RegisterAminoMsg(cdc, &MsgDeleteTradeRoute{}, "stakeibc/MsgDeleteTradeRoute") + legacy.RegisterAminoMsg(cdc, &MsgUpdateTradeRoute{}, "stakeibc/MsgUpdateTradeRoute") + legacy.RegisterAminoMsg(cdc, &MsgUpdateInnerRedemptionRateBounds{}, "stakeibc/MsgUpdateRedemptionRateBounds") + legacy.RegisterAminoMsg(cdc, &MsgResumeHostZone{}, "stakeibc/MsgResumeHostZone") + legacy.RegisterAminoMsg(cdc, &MsgSetCommunityPoolRebate{}, "stakeibc/MsgSetCommunityPoolRebate") + legacy.RegisterAminoMsg(cdc, &MsgToggleTradeController{}, "stakeibc/MsgToggleTradeController") + legacy.RegisterAminoMsg(cdc, &MsgUpdateHostZoneParams{}, "stakeibc/MsgUpdateHostZoneParams") +} + +func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { + registry.RegisterImplementations((*sdk.Msg)(nil), + &MsgLiquidStake{}, + &MsgClearBalance{}, + &MsgRegisterHostZone{}, + &MsgRedeemStake{}, + &MsgClaimUndelegatedTokens{}, + &MsgRebalanceValidators{}, + &MsgAddValidators{}, + &MsgChangeValidatorWeights{}, + &MsgDeleteValidator{}, + &MsgRestoreInterchainAccount{}, + &MsgCloseDelegationChannel{}, + &MsgUpdateValidatorSharesExchRate{}, + &MsgCalibrateDelegation{}, + &MsgUpdateInnerRedemptionRateBounds{}, + &MsgResumeHostZone{}, + &MsgSetCommunityPoolRebate{}, + &MsgToggleTradeController{}, + &MsgUpdateHostZoneParams{}, + ) + + registry.RegisterImplementations((*govtypes.Content)(nil), + &AddValidatorsProposal{}, + &ToggleLSMProposal{}, + ) + + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) +} diff --git a/x/stakeibc/types/epoch_tracker.pb.go b/x/stakeibc/types/epoch_tracker.pb.go new file mode 100644 index 00000000000..38cb4716e8b --- /dev/null +++ b/x/stakeibc/types/epoch_tracker.pb.go @@ -0,0 +1,428 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/stakeibc/epoch_tracker.proto + +package types + +import ( + fmt "fmt" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type EpochTracker struct { + EpochIdentifier string `protobuf:"bytes,1,opt,name=epoch_identifier,json=epochIdentifier,proto3" json:"epoch_identifier,omitempty"` + EpochNumber uint64 `protobuf:"varint,2,opt,name=epoch_number,json=epochNumber,proto3" json:"epoch_number,omitempty"` + NextEpochStartTime uint64 `protobuf:"varint,3,opt,name=next_epoch_start_time,json=nextEpochStartTime,proto3" json:"next_epoch_start_time,omitempty"` + Duration uint64 `protobuf:"varint,4,opt,name=duration,proto3" json:"duration,omitempty"` +} + +func (m *EpochTracker) Reset() { *m = EpochTracker{} } +func (m *EpochTracker) String() string { return proto.CompactTextString(m) } +func (*EpochTracker) ProtoMessage() {} +func (*EpochTracker) Descriptor() ([]byte, []int) { + return fileDescriptor_e7c48143f24adf66, []int{0} +} +func (m *EpochTracker) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *EpochTracker) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_EpochTracker.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *EpochTracker) XXX_Merge(src proto.Message) { + xxx_messageInfo_EpochTracker.Merge(m, src) +} +func (m *EpochTracker) XXX_Size() int { + return m.Size() +} +func (m *EpochTracker) XXX_DiscardUnknown() { + xxx_messageInfo_EpochTracker.DiscardUnknown(m) +} + +var xxx_messageInfo_EpochTracker proto.InternalMessageInfo + +func (m *EpochTracker) GetEpochIdentifier() string { + if m != nil { + return m.EpochIdentifier + } + return "" +} + +func (m *EpochTracker) GetEpochNumber() uint64 { + if m != nil { + return m.EpochNumber + } + return 0 +} + +func (m *EpochTracker) GetNextEpochStartTime() uint64 { + if m != nil { + return m.NextEpochStartTime + } + return 0 +} + +func (m *EpochTracker) GetDuration() uint64 { + if m != nil { + return m.Duration + } + return 0 +} + +func init() { + proto.RegisterType((*EpochTracker)(nil), "stride.stakeibc.EpochTracker") +} + +func init() { + proto.RegisterFile("stride/stakeibc/epoch_tracker.proto", fileDescriptor_e7c48143f24adf66) +} + +var fileDescriptor_e7c48143f24adf66 = []byte{ + // 257 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x2e, 0x2e, 0x29, 0xca, + 0x4c, 0x49, 0xd5, 0x2f, 0x2e, 0x49, 0xcc, 0x4e, 0xcd, 0x4c, 0x4a, 0xd6, 0x4f, 0x2d, 0xc8, 0x4f, + 0xce, 0x88, 0x2f, 0x29, 0x4a, 0x4c, 0xce, 0x4e, 0x2d, 0xd2, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, + 0xe2, 0x87, 0x28, 0xd2, 0x83, 0x29, 0x52, 0x5a, 0xcd, 0xc8, 0xc5, 0xe3, 0x0a, 0x52, 0x18, 0x02, + 0x51, 0x27, 0xa4, 0xc9, 0x25, 0x00, 0xd1, 0x98, 0x99, 0x92, 0x9a, 0x57, 0x92, 0x99, 0x96, 0x99, + 0x5a, 0x24, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x19, 0xc4, 0x0f, 0x16, 0xf7, 0x84, 0x0b, 0x0b, 0x29, + 0x72, 0xf1, 0x40, 0x94, 0xe6, 0x95, 0xe6, 0x26, 0xa5, 0x16, 0x49, 0x30, 0x29, 0x30, 0x6a, 0xb0, + 0x04, 0x71, 0x83, 0xc5, 0xfc, 0xc0, 0x42, 0x42, 0x86, 0x5c, 0xa2, 0x79, 0xa9, 0x15, 0x25, 0xf1, + 0x10, 0x75, 0xc5, 0x25, 0x89, 0x45, 0x25, 0xf1, 0x25, 0x99, 0xb9, 0xa9, 0x12, 0xcc, 0x60, 0xb5, + 0x42, 0x20, 0x49, 0xb0, 0xf5, 0xc1, 0x20, 0xa9, 0x90, 0xcc, 0xdc, 0x54, 0x21, 0x29, 0x2e, 0x8e, + 0x94, 0xd2, 0xa2, 0xc4, 0x92, 0xcc, 0xfc, 0x3c, 0x09, 0x16, 0xb0, 0x2a, 0x38, 0xdf, 0xc9, 0xe7, + 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, 0x18, 0x1f, 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, + 0xe1, 0xc2, 0x63, 0x39, 0x86, 0x1b, 0x8f, 0xe5, 0x18, 0xa2, 0x8c, 0xd2, 0x33, 0x4b, 0x32, 0x4a, + 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0x83, 0xc1, 0x7e, 0xd4, 0xf5, 0x49, 0x4c, 0x2a, 0xd6, 0x87, + 0x06, 0x4a, 0x99, 0x91, 0x85, 0x7e, 0x05, 0x22, 0x68, 0x4a, 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, + 0xc0, 0x61, 0x62, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x5d, 0x93, 0x36, 0xf8, 0x3a, 0x01, 0x00, + 0x00, +} + +func (m *EpochTracker) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *EpochTracker) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *EpochTracker) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Duration != 0 { + i = encodeVarintEpochTracker(dAtA, i, uint64(m.Duration)) + i-- + dAtA[i] = 0x20 + } + if m.NextEpochStartTime != 0 { + i = encodeVarintEpochTracker(dAtA, i, uint64(m.NextEpochStartTime)) + i-- + dAtA[i] = 0x18 + } + if m.EpochNumber != 0 { + i = encodeVarintEpochTracker(dAtA, i, uint64(m.EpochNumber)) + i-- + dAtA[i] = 0x10 + } + if len(m.EpochIdentifier) > 0 { + i -= len(m.EpochIdentifier) + copy(dAtA[i:], m.EpochIdentifier) + i = encodeVarintEpochTracker(dAtA, i, uint64(len(m.EpochIdentifier))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintEpochTracker(dAtA []byte, offset int, v uint64) int { + offset -= sovEpochTracker(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *EpochTracker) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.EpochIdentifier) + if l > 0 { + n += 1 + l + sovEpochTracker(uint64(l)) + } + if m.EpochNumber != 0 { + n += 1 + sovEpochTracker(uint64(m.EpochNumber)) + } + if m.NextEpochStartTime != 0 { + n += 1 + sovEpochTracker(uint64(m.NextEpochStartTime)) + } + if m.Duration != 0 { + n += 1 + sovEpochTracker(uint64(m.Duration)) + } + return n +} + +func sovEpochTracker(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozEpochTracker(x uint64) (n int) { + return sovEpochTracker(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *EpochTracker) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEpochTracker + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: EpochTracker: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: EpochTracker: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EpochIdentifier", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEpochTracker + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthEpochTracker + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEpochTracker + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.EpochIdentifier = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EpochNumber", wireType) + } + m.EpochNumber = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEpochTracker + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EpochNumber |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NextEpochStartTime", wireType) + } + m.NextEpochStartTime = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEpochTracker + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NextEpochStartTime |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) + } + m.Duration = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEpochTracker + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Duration |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipEpochTracker(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEpochTracker + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipEpochTracker(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowEpochTracker + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowEpochTracker + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowEpochTracker + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthEpochTracker + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupEpochTracker + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthEpochTracker + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthEpochTracker = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowEpochTracker = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupEpochTracker = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/stakeibc/types/errors.go b/x/stakeibc/types/errors.go new file mode 100644 index 00000000000..ae38ce7c77a --- /dev/null +++ b/x/stakeibc/types/errors.go @@ -0,0 +1,73 @@ +package types + +// DONTCOVER + +import errorsmod "cosmossdk.io/errors" + +// x/stakeibc module sentinel errors +var ( + ErrInvalidVersion = errorsmod.Register(ModuleName, 1501, "invalid version") + ErrInvalidToken = errorsmod.Register(ModuleName, 1502, "invalid token denom") + ErrInvalidHostZone = errorsmod.Register(ModuleName, 1503, "host zone not registered") + ErrICAStake = errorsmod.Register(ModuleName, 1504, "ICA stake failed") + ErrEpochNotFound = errorsmod.Register(ModuleName, 1505, "epoch not found") + ErrRecordNotFound = errorsmod.Register(ModuleName, 1506, "record not found") + ErrInvalidAmount = errorsmod.Register(ModuleName, 1507, "invalid amount") + ErrValidatorAlreadyExists = errorsmod.Register(ModuleName, 1508, "validator already exists") + ErrNoValidatorWeights = errorsmod.Register(ModuleName, 1509, "no non-zero validator weights") + ErrValidatorNotFound = errorsmod.Register(ModuleName, 1510, "validator not found") + ErrWeightsNotDifferent = errorsmod.Register(ModuleName, 1511, "validator weights haven't changed") + ErrValidatorDelegationChg = errorsmod.Register(ModuleName, 1512, "can't change delegation on validator") + ErrAcctNotScopedForFunc = errorsmod.Register(ModuleName, 1513, "this account can't call this function") + ErrInsufficientFunds = errorsmod.Register(ModuleName, 1514, "balance is insufficient") + ErrInvalidUserRedemptionRecord = errorsmod.Register(ModuleName, 1515, "user redemption record error") + ErrRequiredFieldEmpty = errorsmod.Register(ModuleName, 1516, "required field is missing") + ErrInvalidNumValidator = errorsmod.Register(ModuleName, 1517, "invalid number of validators") + ErrValidatorNotRemoved = errorsmod.Register(ModuleName, 1518, "validator not removed") + ErrHostZoneNotFound = errorsmod.Register(ModuleName, 1519, "host zone not found") + ErrOutsideIcqWindow = errorsmod.Register(ModuleName, 1520, "outside time window that accepts icqs") + ErrParamNotFound = errorsmod.Register(ModuleName, 1521, "param not found") + ErrUnmarshalFailure = errorsmod.Register(ModuleName, 1522, "unable to unmarshal data structure") + ErrMarshalFailure = errorsmod.Register(ModuleName, 1523, "unable to marshal data structure") + ErrInvalidPacketCompletionTime = errorsmod.Register(ModuleName, 1524, "invalid packet completion time") + ErrIntCast = errorsmod.Register(ModuleName, 1525, "unable to cast to safe cast int") + ErrFeeAccountNotRegistered = errorsmod.Register(ModuleName, 1526, "fee account is not registered") + ErrRedemptionRateOutsideSafetyBounds = errorsmod.Register(ModuleName, 1527, "redemption rate outside safety bounds") + ErrTxMsgDataInvalid = errorsmod.Register(ModuleName, 1528, "TxMsgData invalid") + ErrFailedToRegisterHostZone = errorsmod.Register(ModuleName, 1529, "failed to register host zone") + ErrInvalidInterchainAccountAddress = errorsmod.Register(ModuleName, 1530, "invalid interchain account address") + ErrICAAccountNotFound = errorsmod.Register(ModuleName, 1531, "ICA acccount not found on host zone") + ErrICATxFailed = errorsmod.Register(ModuleName, 1532, "failed to submit ICA transaction") + ErrICQFailed = errorsmod.Register(ModuleName, 1533, "failed to submit ICQ") + ErrDivisionByZero = errorsmod.Register(ModuleName, 1534, "division by zero") + ErrSlashExceedsSafetyThreshold = errorsmod.Register(ModuleName, 1535, "slash is greater than safety threshold") + ErrInvalidEpoch = errorsmod.Register(ModuleName, 1536, "invalid epoch tracker") + ErrNoValidatorAmts = errorsmod.Register(ModuleName, 1538, "could not fetch validator amts") + ErrMaxNumValidators = errorsmod.Register(ModuleName, 1539, "max number of validators reached") + ErrUndelegationAmount = errorsmod.Register(ModuleName, 1540, "Undelegation amount is greater than stakedBal") + ErrRewardCollectorAccountNotFound = errorsmod.Register(ModuleName, 1541, "Reward Collector account not found") + ErrHaltedHostZone = errorsmod.Register(ModuleName, 1542, "Halted host zone found") + ErrInsufficientLiquidStake = errorsmod.Register(ModuleName, 1543, "Liquid staked amount is too small") + ErrStTokenNotFound = errorsmod.Register(ModuleName, 1544, "denom not found in stToken list") + ErrInvalidLSMToken = errorsmod.Register(ModuleName, 1545, "Invalid LSM token") + ErrValidatorWasSlashed = errorsmod.Register(ModuleName, 1546, "Validator was slashed") + ErrValidatorSharesToTokensRateNotKnown = errorsmod.Register(ModuleName, 1547, "Validator sharesToTokens rate not known") + ErrInvalidValidatorDelegationUpdates = errorsmod.Register(ModuleName, 1548, "Invalid validator delegation updates") + ErrLSMLiquidStakeDisabledForHostZone = errorsmod.Register(ModuleName, 1549, "LSM liquid stake is disabled for host zone") + ErrUnableToRemoveValidator = errorsmod.Register(ModuleName, 1550, "Unable to remove validator") + ErrInvalidBounds = errorsmod.Register(ModuleName, 1551, "Invalid safety bounds - inner bounds must be within outer bounds") + ErrCalibrationThresholdExceeded = errorsmod.Register(ModuleName, 1552, "Calibration threshold exceeded") + ErrHostZoneNotHalted = errorsmod.Register(ModuleName, 1553, "host zone is not halted") + ErrFailedToLiquidStake = errorsmod.Register(ModuleName, 1554, "Failed to liquid stake") + ErrUnableToRedeemStake = errorsmod.Register(ModuleName, 1555, "Failed to redeem stake") + ErrInvalidDenom = errorsmod.Register(ModuleName, 1556, "Invalid denom") + ErrTradeRouteAlreadyExists = errorsmod.Register(ModuleName, 1557, "Trade route already exists") + ErrClientStateNotTendermint = errorsmod.Register(ModuleName, 1558, "Client state not tendermint") + ErrTradeRouteNotFound = errorsmod.Register(ModuleName, 1559, "trade route not found") + ErrValidatorExceedsWeightCap = errorsmod.Register(ModuleName, 1560, "validator exceeds weight cap") + ErrFeeSplitInvariantFailed = errorsmod.Register(ModuleName, 1561, "failed to calculate fee split") + ErrFailedToRegisterRebate = errorsmod.Register(ModuleName, 1562, "failed to register rebate") + ErrInvalidDelegationsInProgress = errorsmod.Register(ModuleName, 1563, "invalid delegation changes in progress") + ErrInvalidUndelegationsInProgress = errorsmod.Register(ModuleName, 1564, "invalid undelegation changes in progress") + ErrRedemptionsDisabled = errorsmod.Register(ModuleName, 1565, "redemptions disabled") +) diff --git a/x/stakeibc/types/events.go b/x/stakeibc/types/events.go new file mode 100644 index 00000000000..d0c753fcc36 --- /dev/null +++ b/x/stakeibc/types/events.go @@ -0,0 +1,61 @@ +// Package types #nosec G101 +package types + +// Events +const ( + EventTypeTimeout = "timeout" + + AttributeKeyAckSuccess = "success" + AttributeKeyAck = "acknowledgement" + AttributeKeyAckError = "error" +) + +const ( + EventTypeRegisterZone = "register_zone" + EventTypeRedemptionRequest = "request_redemption" + EventTypeLiquidStakeRequest = "liquid_stake" + EventTypeRedeemStakeRequest = "redeem_stake" + EventTypeLSMLiquidStakeRequest = "lsm_liquid_stake" + EventTypeHostZoneHalt = "halt_zone" + EventTypeValidatorSharesToTokensRateChange = "validator_shares_to_tokens_rate_change" + EventTypeValidatorSlash = "validator_slash" + EventTypeUndelegation = "undelegation" + EventTypeRedemptionSweep = "redemption_sweep" + + AttributeKeyHostZone = "host_zone" + AttributeKeyConnectionId = "connection_id" + AttributeKeyRecipientChain = "chain_id" + AttributeKeyRecipientAddress = "recipient" + AttributeKeyBurnAmount = "burn_amount" + AttributeKeyRedeemAmount = "redeem_amount" + AttributeKeySourceAddress = "source" + + AttributeKeyRedemptionRate = "redemption_rate" + + AttributeKeyLiquidStaker = "liquid_staker" + AttributeKeyRedeemer = "redeemer" + AttributeKeyReceiver = "receiver" + AttributeKeyNativeBaseDenom = "native_base_denom" + AttributeKeyNativeIBCDenom = "native_ibc_denom" + AttributeKeyTotalUnbondAmount = "total_unbond_amount" + AttributeKeySweptAmount = "swept_amount" + AttributeKeyLSMTokenBaseDenom = "lsm_token_base_denom" // #nosec G101 + AttributeKeyNativeAmount = "native_amount" + AttributeKeyStTokenAmount = "sttoken_amount" + AttributeKeyValidator = "validator" + AttributeKeyTransactionStatus = "transaction_status" + AttributeKeyLSMLiquidStakeTxId = "lsm_liquid_stake_tx_id" + + AttributeKeyPreviousSharesToTokensRate = "previous_shares_to_tokens_rate" + AttributeKeyCurrentSharesToTokensRate = "current_shares_to_tokens_rate" + AttributeKeySlashPercent = "slash_percent" + AttributeKeySlashAmount = "slash_amount" + AttributeKeyCurrentDelegation = "current_delegation" + + AttributeKeyError = "error" + + AttributeValueCategory = ModuleName + AttributeValueTransactionSucceeded = "success" + AttributeValueTransactionPending = "pending" + AttributeValueTransactionFailed = "failed" +) diff --git a/x/stakeibc/types/expected_keepers.go b/x/stakeibc/types/expected_keepers.go new file mode 100644 index 00000000000..37302d4a74a --- /dev/null +++ b/x/stakeibc/types/expected_keepers.go @@ -0,0 +1,60 @@ +package types + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + + ccvtypes "github.com/cosmos/interchain-security/v6/x/ccv/types" + + ratelimittypes "github.com/cosmos/ibc-apps/modules/rate-limiting/v8/types" +) + +// AccountKeeper defines the expected account keeper used for simulations (noalias) +// Methods imported from account should be defined here +type AccountKeeper interface { + NewAccount(context.Context, sdk.AccountI) sdk.AccountI + SetAccount(ctx context.Context, acc sdk.AccountI) + GetAccount(ctx context.Context, addr sdk.AccAddress) sdk.AccountI + GetAllAccounts(ctx context.Context) []sdk.AccountI + GetModuleAccount(ctx context.Context, moduleName string) sdk.ModuleAccountI + RemoveAccount(ctx context.Context, acc sdk.AccountI) +} + +// BankKeeper defines the expected interface needed to retrieve account balances. +// BankKeeper interface: https://github.com/cosmos/cosmos-sdk/blob/main/x/bank/keeper/keeper.go +// Methods imported from bank should be defined here +type BankKeeper interface { + SpendableCoins(ctx context.Context, addr sdk.AccAddress) sdk.Coins + GetBalance(ctx context.Context, addr sdk.AccAddress, denom string) sdk.Coin + SendCoinsFromModuleToAccount(ctx context.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error + SendCoinsFromAccountToModule(ctx context.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error + MintCoins(ctx context.Context, moduleName string, amt sdk.Coins) error + GetAllBalances(ctx context.Context, addr sdk.AccAddress) sdk.Coins + SendCoinsFromModuleToModule(ctx context.Context, senderModule string, recipientModule string, amt sdk.Coins) error +} + +// Event Hooks +// These can be utilized to communicate between a stakeibc keeper and another +// keeper which must take particular actions when liquid staking happens + +// StakeIBCHooks event hooks for stakeibc +type StakeIBCHooks interface { + AfterLiquidStake(ctx context.Context, addr sdk.AccAddress) // Must be called after liquid stake is completed +} + +type ICAOracleKeeper interface { + QueueMetricUpdate(ctx sdk.Context, key, value, metricType, attributes string) +} + +type RatelimitKeeper interface { + AddDenomToBlacklist(ctx sdk.Context, denom string) + RemoveDenomFromBlacklist(ctx sdk.Context, denom string) + SetWhitelistedAddressPair(ctx sdk.Context, whitelist ratelimittypes.WhitelistedAddressPair) + RemoveWhitelistedAddressPair(ctx sdk.Context, sender, receiver string) +} + +type ConsumerKeeper interface { + GetConsumerParams(ctx sdk.Context) ccvtypes.ConsumerParams + SetParams(ctx sdk.Context, params ccvtypes.ConsumerParams) +} diff --git a/x/stakeibc/types/genesis.go b/x/stakeibc/types/genesis.go new file mode 100644 index 00000000000..f6c10fbc7fc --- /dev/null +++ b/x/stakeibc/types/genesis.go @@ -0,0 +1,50 @@ +package types + +import ( + fmt "fmt" + + host "github.com/cosmos/ibc-go/v8/modules/core/24-host" +) + +// DefaultIndex is the default capability global index +const DefaultIndex uint64 = 1 + +// DefaultGenesis returns the default Capability genesis state +func DefaultGenesis() *GenesisState { + return &GenesisState{ + HostZoneList: []HostZone{}, + EpochTrackerList: []EpochTracker{}, + Params: DefaultParams(), + PortId: PortID, + } +} + +// Validate performs basic genesis state validation returning an error upon any +// failure. +func (gs GenesisState) Validate() error { + if err := host.PortIdentifierValidator(gs.PortId); err != nil { + return err + } + + // Check for duplicated index in hostZoneList + hostZoneList := make(map[string]HostZone) + for _, hostZone := range gs.HostZoneList { + if _, ok := hostZoneList[hostZone.ChainId]; ok { + return fmt.Errorf("duplicated index in hostZoneList: %s", hostZone.ChainId) + } + hostZoneList[hostZone.ChainId] = hostZone + } + + // Check for duplicated index in epochTracker + epochTrackerIndexMap := make(map[string]struct{}) + + for _, elem := range gs.EpochTrackerList { + index := string(EpochTrackerKey(elem.EpochIdentifier)) + if _, ok := epochTrackerIndexMap[index]; ok { + return fmt.Errorf("duplicated index for epochTracker") + } + epochTrackerIndexMap[index] = struct{}{} + } + + return gs.Params.Validate() +} diff --git a/x/stakeibc/types/genesis.pb.go b/x/stakeibc/types/genesis.pb.go new file mode 100644 index 00000000000..8bf9c6834f1 --- /dev/null +++ b/x/stakeibc/types/genesis.pb.go @@ -0,0 +1,569 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/stakeibc/genesis.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// GenesisState defines the stakeibc module's genesis state. +type GenesisState struct { + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` + PortId string `protobuf:"bytes,2,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty"` + HostZoneList []HostZone `protobuf:"bytes,5,rep,name=host_zone_list,json=hostZoneList,proto3" json:"host_zone_list"` + EpochTrackerList []EpochTracker `protobuf:"bytes,10,rep,name=epoch_tracker_list,json=epochTrackerList,proto3" json:"epoch_tracker_list"` + TradeRoutes []TradeRoute `protobuf:"bytes,12,rep,name=trade_routes,json=tradeRoutes,proto3" json:"trade_routes"` +} + +func (m *GenesisState) Reset() { *m = GenesisState{} } +func (m *GenesisState) String() string { return proto.CompactTextString(m) } +func (*GenesisState) ProtoMessage() {} +func (*GenesisState) Descriptor() ([]byte, []int) { + return fileDescriptor_dea81129ed6fb77a, []int{0} +} +func (m *GenesisState) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GenesisState.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GenesisState) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenesisState.Merge(m, src) +} +func (m *GenesisState) XXX_Size() int { + return m.Size() +} +func (m *GenesisState) XXX_DiscardUnknown() { + xxx_messageInfo_GenesisState.DiscardUnknown(m) +} + +var xxx_messageInfo_GenesisState proto.InternalMessageInfo + +func (m *GenesisState) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +func (m *GenesisState) GetPortId() string { + if m != nil { + return m.PortId + } + return "" +} + +func (m *GenesisState) GetHostZoneList() []HostZone { + if m != nil { + return m.HostZoneList + } + return nil +} + +func (m *GenesisState) GetEpochTrackerList() []EpochTracker { + if m != nil { + return m.EpochTrackerList + } + return nil +} + +func (m *GenesisState) GetTradeRoutes() []TradeRoute { + if m != nil { + return m.TradeRoutes + } + return nil +} + +func init() { + proto.RegisterType((*GenesisState)(nil), "stride.stakeibc.GenesisState") +} + +func init() { proto.RegisterFile("stride/stakeibc/genesis.proto", fileDescriptor_dea81129ed6fb77a) } + +var fileDescriptor_dea81129ed6fb77a = []byte{ + // 384 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x91, 0xcf, 0x6f, 0xa2, 0x40, + 0x14, 0xc7, 0x41, 0x47, 0xc4, 0x81, 0xec, 0x12, 0xb2, 0x89, 0xac, 0xbb, 0xa2, 0xbb, 0x7b, 0xf1, + 0xb2, 0x90, 0xb0, 0xd9, 0xa4, 0x67, 0x53, 0xd3, 0x96, 0x78, 0x68, 0xd5, 0x93, 0x17, 0xc2, 0x8f, + 0x09, 0x10, 0xab, 0x43, 0x66, 0xc6, 0xa6, 0xed, 0x5f, 0xd1, 0x3f, 0xcb, 0xa3, 0xc7, 0x1e, 0x9a, + 0xa6, 0xd1, 0x7f, 0xa4, 0x01, 0xa6, 0xc6, 0xe2, 0x8d, 0xf7, 0xbe, 0x9f, 0x7c, 0x78, 0xf3, 0x1e, + 0xec, 0x52, 0x46, 0xd2, 0x08, 0xd9, 0x94, 0xf9, 0x0b, 0x94, 0x06, 0xa1, 0x1d, 0xa3, 0x15, 0xa2, + 0x29, 0xb5, 0x32, 0x82, 0x19, 0xd6, 0xbf, 0x96, 0xb1, 0xf5, 0x11, 0x77, 0xbe, 0xc5, 0x38, 0xc6, + 0x45, 0x66, 0xe7, 0x5f, 0x25, 0xd6, 0xf9, 0x53, 0xb5, 0xa0, 0x0c, 0x87, 0x89, 0xc7, 0x88, 0x1f, + 0x2e, 0x10, 0xe1, 0x50, 0xaf, 0x0a, 0x25, 0x98, 0x32, 0xef, 0x11, 0xaf, 0x10, 0x07, 0x7e, 0x56, + 0x81, 0xcc, 0x27, 0xfe, 0x92, 0x8f, 0xd2, 0xf9, 0x55, 0x4d, 0x19, 0xf1, 0x23, 0xe4, 0x11, 0xbc, + 0x66, 0x5c, 0xf0, 0xfb, 0xa5, 0x06, 0xd5, 0x8b, 0x72, 0xfe, 0x29, 0xf3, 0x19, 0xd2, 0xff, 0x43, + 0xa9, 0x74, 0x18, 0x62, 0x5f, 0x1c, 0x28, 0x4e, 0xdb, 0xaa, 0xbc, 0xc7, 0xba, 0x2e, 0xe2, 0x21, + 0xd8, 0xbc, 0xf6, 0x84, 0x09, 0x87, 0xf5, 0x36, 0x6c, 0x66, 0x98, 0x30, 0x2f, 0x8d, 0x8c, 0x5a, + 0x5f, 0x1c, 0xb4, 0x26, 0x52, 0x5e, 0x5e, 0x45, 0xfa, 0x08, 0x7e, 0x39, 0x0c, 0xed, 0xdd, 0xa6, + 0x94, 0x19, 0x8d, 0x7e, 0x7d, 0xa0, 0x38, 0xdf, 0x4f, 0xbc, 0x97, 0x98, 0xb2, 0x39, 0x5e, 0x21, + 0x6e, 0x56, 0x13, 0x5e, 0x8f, 0x53, 0xca, 0xf4, 0x1b, 0xa8, 0x7f, 0x5a, 0x50, 0xa9, 0x82, 0x85, + 0xaa, 0x7b, 0xa2, 0x1a, 0xe5, 0xe8, 0xac, 0x24, 0xb9, 0x4e, 0x43, 0x47, 0xbd, 0x42, 0x79, 0x0e, + 0xd5, 0xa3, 0x7d, 0x50, 0x43, 0x2d, 0x64, 0x3f, 0x4e, 0x64, 0xb3, 0x1c, 0x9a, 0xe4, 0x0c, 0x57, + 0x29, 0xec, 0xd0, 0xa1, 0x2e, 0x90, 0xeb, 0x1a, 0x70, 0x81, 0x0c, 0xb4, 0x86, 0x0b, 0x64, 0x49, + 0x6b, 0xba, 0x40, 0x6e, 0x69, 0xd0, 0x05, 0xb2, 0xa2, 0xa9, 0xc3, 0xf1, 0x66, 0x67, 0x8a, 0xdb, + 0x9d, 0x29, 0xbe, 0xed, 0x4c, 0xf1, 0x69, 0x6f, 0x0a, 0xdb, 0xbd, 0x29, 0x3c, 0xef, 0x4d, 0x61, + 0xee, 0xc4, 0x29, 0x4b, 0xd6, 0x81, 0x15, 0xe2, 0xa5, 0x3d, 0x2d, 0xfe, 0xf8, 0x77, 0xec, 0x07, + 0xd4, 0xe6, 0x27, 0xbb, 0x73, 0xce, 0xec, 0xfb, 0xa3, 0xc3, 0x3d, 0x64, 0x88, 0x06, 0x52, 0x71, + 0xb3, 0x7f, 0xef, 0x01, 0x00, 0x00, 0xff, 0xff, 0x20, 0x71, 0xfe, 0x09, 0x82, 0x02, 0x00, 0x00, +} + +func (m *GenesisState) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GenesisState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TradeRoutes) > 0 { + for iNdEx := len(m.TradeRoutes) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TradeRoutes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x62 + } + } + if len(m.EpochTrackerList) > 0 { + for iNdEx := len(m.EpochTrackerList) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.EpochTrackerList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + } + } + if len(m.HostZoneList) > 0 { + for iNdEx := len(m.HostZoneList) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.HostZoneList[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + } + } + if len(m.PortId) > 0 { + i -= len(m.PortId) + copy(dAtA[i:], m.PortId) + i = encodeVarintGenesis(dAtA, i, uint64(len(m.PortId))) + i-- + dAtA[i] = 0x12 + } + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { + offset -= sovGenesis(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *GenesisState) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovGenesis(uint64(l)) + l = len(m.PortId) + if l > 0 { + n += 1 + l + sovGenesis(uint64(l)) + } + if len(m.HostZoneList) > 0 { + for _, e := range m.HostZoneList { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + if len(m.EpochTrackerList) > 0 { + for _, e := range m.EpochTrackerList { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + if len(m.TradeRoutes) > 0 { + for _, e := range m.TradeRoutes { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + return n +} + +func sovGenesis(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenesis(x uint64) (n int) { + return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *GenesisState) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PortId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PortId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZoneList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZoneList = append(m.HostZoneList, HostZone{}) + if err := m.HostZoneList[len(m.HostZoneList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EpochTrackerList", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.EpochTrackerList = append(m.EpochTrackerList, EpochTracker{}) + if err := m.EpochTrackerList[len(m.EpochTrackerList)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TradeRoutes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TradeRoutes = append(m.TradeRoutes, TradeRoute{}) + if err := m.TradeRoutes[len(m.TradeRoutes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenesis(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenesis + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenesis + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenesis + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/stakeibc/types/genesis_test.go b/x/stakeibc/types/genesis_test.go new file mode 100644 index 00000000000..19b9c77b3b3 --- /dev/null +++ b/x/stakeibc/types/genesis_test.go @@ -0,0 +1,49 @@ +package types_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func TestGenesisState_Validate(t *testing.T) { + for _, tc := range []struct { + desc string + genState *types.GenesisState + valid bool + }{ + { + desc: "default is valid", + genState: types.DefaultGenesis(), + valid: true, + }, + { + desc: "valid genesis state", + genState: &types.GenesisState{ + PortId: types.PortID, + HostZoneList: []types.HostZone{ + { + ChainId: "0", + }, + { + ChainId: "1", + }, + }, + Params: types.DefaultParams(), + }, + valid: true, + }, + // this line is used by starport scaffolding # types/genesis/testcase + } { + t.Run(tc.desc, func(t *testing.T) { + err := tc.genState.Validate() + if tc.valid { + require.NoError(t, err) + } else { + require.Error(t, err) + } + }) + } +} diff --git a/x/stakeibc/types/gov.go b/x/stakeibc/types/gov.go new file mode 100644 index 00000000000..77e90cb6afb --- /dev/null +++ b/x/stakeibc/types/gov.go @@ -0,0 +1,141 @@ +package types + +import ( + "fmt" + "strings" + + errorsmod "cosmossdk.io/errors" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" +) + +// --------------------------- +// AddValidatorProposal +// --------------------------- +const ( + ProposalTypeAddValidators = "AddValidators" +) + +func init() { + govtypes.RegisterProposalType(ProposalTypeAddValidators) +} + +var ( + _ govtypes.Content = &AddValidatorsProposal{} +) + +func NewAddValidatorsProposal(title, description, hostZone string, validators []*Validator) govtypes.Content { + return &AddValidatorsProposal{ + Title: title, + Description: description, + HostZone: hostZone, + Validators: validators, + } +} + +func (p *AddValidatorsProposal) GetTitle() string { return p.Title } + +func (p *AddValidatorsProposal) GetDescription() string { return p.Description } + +func (p *AddValidatorsProposal) ProposalRoute() string { return RouterKey } + +func (p *AddValidatorsProposal) ProposalType() string { + return ProposalTypeAddValidators +} + +func (p *AddValidatorsProposal) ValidateBasic() error { + err := govtypes.ValidateAbstract(p) + if err != nil { + return err + } + + if len(p.Validators) == 0 { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "at least one validator must be provided") + } + + for i, validator := range p.Validators { + if len(strings.TrimSpace(validator.Name)) == 0 { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "validator name is required (index %d)", i) + } + if len(strings.TrimSpace(validator.Address)) == 0 { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "validator address is required (index %d)", i) + } + } + + return nil +} + +func (p AddValidatorsProposal) String() string { + return fmt.Sprintf(`Add Validators Proposal: + Title: %s + Description: %s + HostZone: %s + Validators: %+v + `, p.Title, p.Description, p.HostZone, p.Validators) +} + +func (v *Validator) Equal(other *Validator) bool { + if v == nil || other == nil { + return false + } + if v.Address != other.Address { + return false + } + if v.Name != other.Name { + return false + } + return true +} + +// --------------------------- +// ToggleLSMProposal +// --------------------------- + +const ( + ProposalTypeToggleLSMProposal = "ToggleLSMProposal" +) + +func init() { + govtypes.RegisterProposalType(ProposalTypeToggleLSMProposal) +} + +var ( + _ govtypes.Content = &ToggleLSMProposal{} +) + +func NewToggleLSMProposal(title, description, hostZone string, enabled bool) govtypes.Content { + return &ToggleLSMProposal{ + Title: title, + Description: description, + HostZone: hostZone, + Enabled: enabled, + } +} + +func (p *ToggleLSMProposal) GetTitle() string { return p.Title } + +func (p *ToggleLSMProposal) GetDescription() string { return p.Description } + +func (p *ToggleLSMProposal) ProposalRoute() string { return RouterKey } + +func (p *ToggleLSMProposal) ProposalType() string { + return ProposalTypeAddValidators +} + +func (p *ToggleLSMProposal) ValidateBasic() error { + err := govtypes.ValidateAbstract(p) + if err != nil { + return err + } + + return nil +} + +func (p ToggleLSMProposal) String() string { + return fmt.Sprintf(`Add Validators Proposal: + Title: %s + Description: %s + HostZone: %s + Enabled: %v + `, p.Title, p.Description, p.HostZone, p.Enabled) +} diff --git a/x/stakeibc/types/gov.pb.go b/x/stakeibc/types/gov.pb.go new file mode 100644 index 00000000000..849c787dce5 --- /dev/null +++ b/x/stakeibc/types/gov.pb.go @@ -0,0 +1,914 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/stakeibc/gov.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type AddValidatorsProposal struct { + Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + HostZone string `protobuf:"bytes,3,opt,name=host_zone,json=hostZone,proto3" json:"host_zone,omitempty"` + Validators []*Validator `protobuf:"bytes,4,rep,name=validators,proto3" json:"validators,omitempty"` + Deposit string `protobuf:"bytes,5,opt,name=deposit,proto3" json:"deposit,omitempty" yaml:"deposit"` +} + +func (m *AddValidatorsProposal) Reset() { *m = AddValidatorsProposal{} } +func (*AddValidatorsProposal) ProtoMessage() {} +func (*AddValidatorsProposal) Descriptor() ([]byte, []int) { + return fileDescriptor_8204317b384c5680, []int{0} +} +func (m *AddValidatorsProposal) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *AddValidatorsProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_AddValidatorsProposal.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *AddValidatorsProposal) XXX_Merge(src proto.Message) { + xxx_messageInfo_AddValidatorsProposal.Merge(m, src) +} +func (m *AddValidatorsProposal) XXX_Size() int { + return m.Size() +} +func (m *AddValidatorsProposal) XXX_DiscardUnknown() { + xxx_messageInfo_AddValidatorsProposal.DiscardUnknown(m) +} + +var xxx_messageInfo_AddValidatorsProposal proto.InternalMessageInfo + +type ToggleLSMProposal struct { + Title string `protobuf:"bytes,1,opt,name=title,proto3" json:"title,omitempty"` + Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` + HostZone string `protobuf:"bytes,3,opt,name=host_zone,json=hostZone,proto3" json:"host_zone,omitempty"` + Enabled bool `protobuf:"varint,4,opt,name=enabled,proto3" json:"enabled,omitempty"` + Deposit string `protobuf:"bytes,5,opt,name=deposit,proto3" json:"deposit,omitempty" yaml:"deposit"` +} + +func (m *ToggleLSMProposal) Reset() { *m = ToggleLSMProposal{} } +func (*ToggleLSMProposal) ProtoMessage() {} +func (*ToggleLSMProposal) Descriptor() ([]byte, []int) { + return fileDescriptor_8204317b384c5680, []int{1} +} +func (m *ToggleLSMProposal) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ToggleLSMProposal) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ToggleLSMProposal.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ToggleLSMProposal) XXX_Merge(src proto.Message) { + xxx_messageInfo_ToggleLSMProposal.Merge(m, src) +} +func (m *ToggleLSMProposal) XXX_Size() int { + return m.Size() +} +func (m *ToggleLSMProposal) XXX_DiscardUnknown() { + xxx_messageInfo_ToggleLSMProposal.DiscardUnknown(m) +} + +var xxx_messageInfo_ToggleLSMProposal proto.InternalMessageInfo + +func init() { + proto.RegisterType((*AddValidatorsProposal)(nil), "stride.stakeibc.AddValidatorsProposal") + proto.RegisterType((*ToggleLSMProposal)(nil), "stride.stakeibc.ToggleLSMProposal") +} + +func init() { proto.RegisterFile("stride/stakeibc/gov.proto", fileDescriptor_8204317b384c5680) } + +var fileDescriptor_8204317b384c5680 = []byte{ + // 379 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x2c, 0x2e, 0x29, 0xca, + 0x4c, 0x49, 0xd5, 0x2f, 0x2e, 0x49, 0xcc, 0x4e, 0xcd, 0x4c, 0x4a, 0xd6, 0x4f, 0xcf, 0x2f, 0xd3, + 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x87, 0x48, 0xe9, 0xc1, 0xa4, 0xa4, 0x04, 0x13, 0x73, + 0x33, 0xf3, 0xf2, 0xf5, 0xc1, 0x24, 0x44, 0x8d, 0x94, 0x48, 0x7a, 0x7e, 0x7a, 0x3e, 0x98, 0xa9, + 0x0f, 0x62, 0x41, 0x45, 0xe5, 0xd1, 0x0d, 0x2d, 0x4b, 0xcc, 0xc9, 0x4c, 0x49, 0x2c, 0xc9, 0x2f, + 0x82, 0x28, 0x50, 0x6a, 0x67, 0xe2, 0x12, 0x75, 0x4c, 0x49, 0x09, 0x83, 0x09, 0x17, 0x07, 0x14, + 0xe5, 0x17, 0xe4, 0x17, 0x27, 0xe6, 0x08, 0x89, 0x70, 0xb1, 0x96, 0x64, 0x96, 0xe4, 0xa4, 0x4a, + 0x30, 0x2a, 0x30, 0x6a, 0x70, 0x06, 0x41, 0x38, 0x42, 0x0a, 0x5c, 0xdc, 0x29, 0xa9, 0xc5, 0xc9, + 0x45, 0x99, 0x05, 0x25, 0x99, 0xf9, 0x79, 0x12, 0x4c, 0x60, 0x39, 0x64, 0x21, 0x21, 0x69, 0x2e, + 0xce, 0x8c, 0xfc, 0xe2, 0x92, 0xf8, 0xaa, 0xfc, 0xbc, 0x54, 0x09, 0x66, 0xb0, 0x3c, 0x07, 0x48, + 0x20, 0x2a, 0x3f, 0x2f, 0x55, 0xc8, 0x8a, 0x8b, 0x0b, 0xee, 0x82, 0x62, 0x09, 0x16, 0x05, 0x66, + 0x0d, 0x6e, 0x23, 0x29, 0x3d, 0x34, 0xef, 0xe9, 0xc1, 0x5d, 0x13, 0x84, 0xa4, 0x5a, 0x48, 0x87, + 0x8b, 0x3d, 0x25, 0xb5, 0x20, 0xbf, 0x38, 0xb3, 0x44, 0x82, 0x15, 0x64, 0xac, 0x93, 0xd0, 0xa7, + 0x7b, 0xf2, 0x7c, 0x95, 0x89, 0xb9, 0x39, 0x56, 0x4a, 0x50, 0x09, 0xa5, 0x20, 0x98, 0x12, 0x2b, + 0xfd, 0x8e, 0x05, 0xf2, 0x0c, 0x33, 0x16, 0xc8, 0x33, 0xbc, 0x58, 0x20, 0xcf, 0xd8, 0xf5, 0x7c, + 0x83, 0x96, 0x1c, 0x3c, 0x0c, 0xb0, 0xfa, 0x57, 0xe9, 0x2e, 0x23, 0x97, 0x60, 0x48, 0x7e, 0x7a, + 0x7a, 0x4e, 0xaa, 0x4f, 0xb0, 0x2f, 0x6d, 0x43, 0x41, 0x82, 0x8b, 0x3d, 0x35, 0x2f, 0x31, 0x29, + 0x27, 0x35, 0x45, 0x82, 0x45, 0x81, 0x51, 0x83, 0x23, 0x08, 0xc6, 0x25, 0xd1, 0x8f, 0xda, 0xe8, + 0x7e, 0x94, 0x82, 0xfb, 0x11, 0xc3, 0x27, 0x4e, 0x3e, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, + 0xc7, 0xf8, 0xe0, 0x91, 0x1c, 0xe3, 0x84, 0xc7, 0x72, 0x0c, 0x17, 0x1e, 0xcb, 0x31, 0xdc, 0x78, + 0x2c, 0xc7, 0x10, 0x65, 0x94, 0x9e, 0x59, 0x92, 0x51, 0x9a, 0xa4, 0x97, 0x9c, 0x9f, 0xab, 0x1f, + 0x0c, 0x8e, 0x0a, 0x5d, 0x9f, 0xc4, 0xa4, 0x62, 0x7d, 0x68, 0xda, 0x29, 0x33, 0xb2, 0xd0, 0xaf, + 0x40, 0xa4, 0xa0, 0x92, 0xca, 0x82, 0xd4, 0xe2, 0x24, 0x36, 0x70, 0xf2, 0x31, 0x06, 0x04, 0x00, + 0x00, 0xff, 0xff, 0x5b, 0xf5, 0x3c, 0xe5, 0xb6, 0x02, 0x00, 0x00, +} + +func (this *AddValidatorsProposal) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*AddValidatorsProposal) + if !ok { + that2, ok := that.(AddValidatorsProposal) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Title != that1.Title { + return false + } + if this.Description != that1.Description { + return false + } + if this.HostZone != that1.HostZone { + return false + } + if len(this.Validators) != len(that1.Validators) { + return false + } + for i := range this.Validators { + if !this.Validators[i].Equal(that1.Validators[i]) { + return false + } + } + if this.Deposit != that1.Deposit { + return false + } + return true +} +func (this *ToggleLSMProposal) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*ToggleLSMProposal) + if !ok { + that2, ok := that.(ToggleLSMProposal) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Title != that1.Title { + return false + } + if this.Description != that1.Description { + return false + } + if this.HostZone != that1.HostZone { + return false + } + if this.Enabled != that1.Enabled { + return false + } + if this.Deposit != that1.Deposit { + return false + } + return true +} +func (m *AddValidatorsProposal) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *AddValidatorsProposal) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *AddValidatorsProposal) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Deposit) > 0 { + i -= len(m.Deposit) + copy(dAtA[i:], m.Deposit) + i = encodeVarintGov(dAtA, i, uint64(len(m.Deposit))) + i-- + dAtA[i] = 0x2a + } + if len(m.Validators) > 0 { + for iNdEx := len(m.Validators) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Validators[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGov(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + if len(m.HostZone) > 0 { + i -= len(m.HostZone) + copy(dAtA[i:], m.HostZone) + i = encodeVarintGov(dAtA, i, uint64(len(m.HostZone))) + i-- + dAtA[i] = 0x1a + } + if len(m.Description) > 0 { + i -= len(m.Description) + copy(dAtA[i:], m.Description) + i = encodeVarintGov(dAtA, i, uint64(len(m.Description))) + i-- + dAtA[i] = 0x12 + } + if len(m.Title) > 0 { + i -= len(m.Title) + copy(dAtA[i:], m.Title) + i = encodeVarintGov(dAtA, i, uint64(len(m.Title))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ToggleLSMProposal) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ToggleLSMProposal) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ToggleLSMProposal) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Deposit) > 0 { + i -= len(m.Deposit) + copy(dAtA[i:], m.Deposit) + i = encodeVarintGov(dAtA, i, uint64(len(m.Deposit))) + i-- + dAtA[i] = 0x2a + } + if m.Enabled { + i-- + if m.Enabled { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + } + if len(m.HostZone) > 0 { + i -= len(m.HostZone) + copy(dAtA[i:], m.HostZone) + i = encodeVarintGov(dAtA, i, uint64(len(m.HostZone))) + i-- + dAtA[i] = 0x1a + } + if len(m.Description) > 0 { + i -= len(m.Description) + copy(dAtA[i:], m.Description) + i = encodeVarintGov(dAtA, i, uint64(len(m.Description))) + i-- + dAtA[i] = 0x12 + } + if len(m.Title) > 0 { + i -= len(m.Title) + copy(dAtA[i:], m.Title) + i = encodeVarintGov(dAtA, i, uint64(len(m.Title))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintGov(dAtA []byte, offset int, v uint64) int { + offset -= sovGov(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *AddValidatorsProposal) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Title) + if l > 0 { + n += 1 + l + sovGov(uint64(l)) + } + l = len(m.Description) + if l > 0 { + n += 1 + l + sovGov(uint64(l)) + } + l = len(m.HostZone) + if l > 0 { + n += 1 + l + sovGov(uint64(l)) + } + if len(m.Validators) > 0 { + for _, e := range m.Validators { + l = e.Size() + n += 1 + l + sovGov(uint64(l)) + } + } + l = len(m.Deposit) + if l > 0 { + n += 1 + l + sovGov(uint64(l)) + } + return n +} + +func (m *ToggleLSMProposal) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Title) + if l > 0 { + n += 1 + l + sovGov(uint64(l)) + } + l = len(m.Description) + if l > 0 { + n += 1 + l + sovGov(uint64(l)) + } + l = len(m.HostZone) + if l > 0 { + n += 1 + l + sovGov(uint64(l)) + } + if m.Enabled { + n += 2 + } + l = len(m.Deposit) + if l > 0 { + n += 1 + l + sovGov(uint64(l)) + } + return n +} + +func sovGov(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGov(x uint64) (n int) { + return sovGov(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *AddValidatorsProposal) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGov + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: AddValidatorsProposal: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: AddValidatorsProposal: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Title", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGov + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGov + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGov + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Title = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGov + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGov + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGov + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Description = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZone", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGov + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGov + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGov + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZone = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Validators", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGov + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGov + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGov + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Validators = append(m.Validators, &Validator{}) + if err := m.Validators[len(m.Validators)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Deposit", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGov + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGov + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGov + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Deposit = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGov(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGov + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ToggleLSMProposal) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGov + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ToggleLSMProposal: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ToggleLSMProposal: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Title", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGov + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGov + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGov + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Title = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGov + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGov + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGov + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Description = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZone", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGov + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGov + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGov + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZone = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Enabled", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGov + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Enabled = bool(v != 0) + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Deposit", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGov + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGov + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGov + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Deposit = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGov(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGov + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGov(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGov + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGov + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGov + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGov + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGov + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGov + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGov = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGov = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGov = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/stakeibc/types/hooks.go b/x/stakeibc/types/hooks.go new file mode 100644 index 00000000000..9779e688a65 --- /dev/null +++ b/x/stakeibc/types/hooks.go @@ -0,0 +1,20 @@ +package types + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// combine multiple staking hooks, all hook functions are run in array sequence +type MultiStakeIBCHooks []StakeIBCHooks + +func NewMultiStakeIBCHooks(hooks ...StakeIBCHooks) MultiStakeIBCHooks { + return hooks +} + +func (h MultiStakeIBCHooks) AfterLiquidStake(ctx context.Context, addr sdk.AccAddress) { + for i := range h { + h[i].AfterLiquidStake(ctx, addr) + } +} diff --git a/x/stakeibc/types/host_zone.go b/x/stakeibc/types/host_zone.go new file mode 100644 index 00000000000..152935df474 --- /dev/null +++ b/x/stakeibc/types/host_zone.go @@ -0,0 +1,66 @@ +package types + +import ( + "strings" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/address" +) + +const ( + MaxUnbondingEntries = 7 +) + +// Per an SDK constraint, we can issue no more than 7 undelegation messages +// in a given unbonding period +// +// The unbonding period dictates the cadence (in number of days) with which we submit +// undelegation messages, such that the 7 messages are spaced out throughout the period +// +// We calculate this by dividing the period by 7 and then adding 1 as a buffer +// Ex: If our unbonding period is 21 days, we issue an undelegation every 4th day +func (h HostZone) GetUnbondingFrequency() uint64 { + return (h.UnbondingPeriod / MaxUnbondingEntries) + 1 +} + +// Gets the rebate struct if it exists on the host zone +func (h HostZone) SafelyGetCommunityPoolRebate() (rebate CommunityPoolRebate, exists bool) { + if h.CommunityPoolRebate == nil { + return CommunityPoolRebate{}, false + } + if h.CommunityPoolRebate.LiquidStakedStTokenAmount.IsNil() || h.CommunityPoolRebate.RebateRate.IsNil() { + return CommunityPoolRebate{}, false + } + return *h.CommunityPoolRebate, true +} + +// Generates a new stride-side address on the host zone to escrow deposits +func NewHostZoneDepositAddress(chainId string) sdk.AccAddress { + key := append([]byte("zone"), []byte(chainId)...) + return address.Module(ModuleName, key) +} + +// Generates a new stride-side module account for a host zone, given an alias +func NewHostZoneModuleAddress(chainId string, accountAlias string) sdk.AccAddress { + key := append([]byte(chainId), []byte(accountAlias)...) + return address.Module(ModuleName, key) +} + +// TODO [cleanup]: Remove this function and use the one from utils +// isIBCToken checks if the token came from the IBC module +// Each IBC token starts with an ibc/ denom, the check is rather simple +func IsIBCToken(denom string) bool { + return strings.HasPrefix(denom, "ibc/") +} + +// TODO [cleanup]: Remove this function and use the one from utils +// Returns the stDenom from a native denom by appending a st prefix +func StAssetDenomFromHostZoneDenom(hostZoneDenom string) string { + return "st" + hostZoneDenom +} + +// TODO [cleanup]: Remove this function and use the one from utils +// Returns the native denom from an stDenom by removing the st prefix +func HostZoneDenomFromStAssetDenom(stAssetDenom string) string { + return stAssetDenom[2:] +} diff --git a/x/stakeibc/types/host_zone.pb.go b/x/stakeibc/types/host_zone.pb.go new file mode 100644 index 00000000000..3719b9abf56 --- /dev/null +++ b/x/stakeibc/types/host_zone.pb.go @@ -0,0 +1,2084 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/stakeibc/host_zone.proto + +package types + +import ( + cosmossdk_io_math "cosmossdk.io/math" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// CommunityPoolRebate stores the size of the community pool liquid stake +// (denominated in stTokens) and the rebate rate as a decimal +type CommunityPoolRebate struct { + // Rebate percentage as a decimal (e.g. 0.2 for 20%) + RebateRate cosmossdk_io_math.LegacyDec `protobuf:"bytes,1,opt,name=rebate_rate,json=rebateRate,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"rebate_rate"` + // Number of stTokens received from the community pool liquid stake + LiquidStakedStTokenAmount cosmossdk_io_math.Int `protobuf:"bytes,2,opt,name=liquid_staked_st_token_amount,json=liquidStakedStTokenAmount,proto3,customtype=cosmossdk.io/math.Int" json:"liquid_staked_st_token_amount"` +} + +func (m *CommunityPoolRebate) Reset() { *m = CommunityPoolRebate{} } +func (m *CommunityPoolRebate) String() string { return proto.CompactTextString(m) } +func (*CommunityPoolRebate) ProtoMessage() {} +func (*CommunityPoolRebate) Descriptor() ([]byte, []int) { + return fileDescriptor_f81bf5b42c61245a, []int{0} +} +func (m *CommunityPoolRebate) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CommunityPoolRebate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_CommunityPoolRebate.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *CommunityPoolRebate) XXX_Merge(src proto.Message) { + xxx_messageInfo_CommunityPoolRebate.Merge(m, src) +} +func (m *CommunityPoolRebate) XXX_Size() int { + return m.Size() +} +func (m *CommunityPoolRebate) XXX_DiscardUnknown() { + xxx_messageInfo_CommunityPoolRebate.DiscardUnknown(m) +} + +var xxx_messageInfo_CommunityPoolRebate proto.InternalMessageInfo + +// Core data structure to track liquid staking zones +type HostZone struct { + // Chain ID of the host zone + ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + // Bech32 prefix of host zone's address + Bech32Prefix string `protobuf:"bytes,17,opt,name=bech32prefix,proto3" json:"bech32prefix,omitempty"` + // ConnectionID from Stride to the host zone (ID is on the stride side) + ConnectionId string `protobuf:"bytes,2,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty"` + // Transfer Channel ID from Stride to the host zone (ID is on the stride side) + TransferChannelId string `protobuf:"bytes,12,opt,name=transfer_channel_id,json=transferChannelId,proto3" json:"transfer_channel_id,omitempty"` + // ibc denom of the host zone's native token on stride + IbcDenom string `protobuf:"bytes,8,opt,name=ibc_denom,json=ibcDenom,proto3" json:"ibc_denom,omitempty"` + // native denom on host zone + HostDenom string `protobuf:"bytes,9,opt,name=host_denom,json=hostDenom,proto3" json:"host_denom,omitempty"` + // The unbonding period in days (e.g. 21) + UnbondingPeriod uint64 `protobuf:"varint,26,opt,name=unbonding_period,json=unbondingPeriod,proto3" json:"unbonding_period,omitempty"` + // List of validators that are delegated to + Validators []*Validator `protobuf:"bytes,3,rep,name=validators,proto3" json:"validators,omitempty"` + // Address that custodies native tokens during a liquid stake + DepositAddress string `protobuf:"bytes,18,opt,name=deposit_address,json=depositAddress,proto3" json:"deposit_address,omitempty"` + // ICA Address on the host zone responsible for collecting rewards + WithdrawalIcaAddress string `protobuf:"bytes,22,opt,name=withdrawal_ica_address,json=withdrawalIcaAddress,proto3" json:"withdrawal_ica_address,omitempty"` + // ICA Address on the host zone responsible for commission + FeeIcaAddress string `protobuf:"bytes,23,opt,name=fee_ica_address,json=feeIcaAddress,proto3" json:"fee_ica_address,omitempty"` + // ICA Address on the host zone responsible for staking and unstaking + DelegationIcaAddress string `protobuf:"bytes,24,opt,name=delegation_ica_address,json=delegationIcaAddress,proto3" json:"delegation_ica_address,omitempty"` + // ICA Address that receives unstaked tokens after they've finished unbonding + RedemptionIcaAddress string `protobuf:"bytes,25,opt,name=redemption_ica_address,json=redemptionIcaAddress,proto3" json:"redemption_ica_address,omitempty"` + // ICA Address that receives tokens from a community pool to liquid stake or + // redeem In the case of a liquid stake, the community pool deposits native + // tokens In the case of a redemption, the community pool deposits stTokens + CommunityPoolDepositIcaAddress string `protobuf:"bytes,30,opt,name=community_pool_deposit_ica_address,json=communityPoolDepositIcaAddress,proto3" json:"community_pool_deposit_ica_address,omitempty"` + // ICA Address that distributes tokens back to the community pool during a + // community pool liquid stake or redeem In the case of a liquid stake, the + // return address sends back stTokens In the case of a redemption, the return + // address sends back native tokens + CommunityPoolReturnIcaAddress string `protobuf:"bytes,31,opt,name=community_pool_return_ica_address,json=communityPoolReturnIcaAddress,proto3" json:"community_pool_return_ica_address,omitempty"` + // Module account on Stride that receives native tokens from the deposit ICA + // and liquid stakes them + CommunityPoolStakeHoldingAddress string `protobuf:"bytes,32,opt,name=community_pool_stake_holding_address,json=communityPoolStakeHoldingAddress,proto3" json:"community_pool_stake_holding_address,omitempty"` + // Module account on Stride that receives stTokens from the deposit ICA and + // redeems them + CommunityPoolRedeemHoldingAddress string `protobuf:"bytes,33,opt,name=community_pool_redeem_holding_address,json=communityPoolRedeemHoldingAddress,proto3" json:"community_pool_redeem_holding_address,omitempty"` + // Optional community pool address to send tokens to after a community pool + // liquid stake or redemption If this address is empty, the tokens are sent to + // the main community pool + CommunityPoolTreasuryAddress string `protobuf:"bytes,35,opt,name=community_pool_treasury_address,json=communityPoolTreasuryAddress,proto3" json:"community_pool_treasury_address,omitempty"` + // The total delegated balance on the host zone + TotalDelegations cosmossdk_io_math.Int `protobuf:"bytes,13,opt,name=total_delegations,json=totalDelegations,proto3,customtype=cosmossdk.io/math.Int" json:"total_delegations"` + // The redemption rate from the previous epoch + LastRedemptionRate cosmossdk_io_math.LegacyDec `protobuf:"bytes,10,opt,name=last_redemption_rate,json=lastRedemptionRate,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"last_redemption_rate"` + // The current redemption rate + RedemptionRate cosmossdk_io_math.LegacyDec `protobuf:"bytes,11,opt,name=redemption_rate,json=redemptionRate,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"redemption_rate"` + // The min outer redemption rate bound - controlled only be governance + // The min inner bound cannot exceed this bound + MinRedemptionRate cosmossdk_io_math.LegacyDec `protobuf:"bytes,20,opt,name=min_redemption_rate,json=minRedemptionRate,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"min_redemption_rate"` + // The max outer redemption rate bound - controlled only be governance + // The max inner bound cannot exceed this bound + MaxRedemptionRate cosmossdk_io_math.LegacyDec `protobuf:"bytes,21,opt,name=max_redemption_rate,json=maxRedemptionRate,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"max_redemption_rate"` + // The min minner redemption rate bound - controlled by the admin + // If the redemption rate exceeds this bound, the host zone is halted + MinInnerRedemptionRate cosmossdk_io_math.LegacyDec `protobuf:"bytes,28,opt,name=min_inner_redemption_rate,json=minInnerRedemptionRate,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"min_inner_redemption_rate"` + // The max minner redemption rate bound - controlled by the admin + // If the redemption rate exceeds this bound, the host zone is halted + MaxInnerRedemptionRate cosmossdk_io_math.LegacyDec `protobuf:"bytes,29,opt,name=max_inner_redemption_rate,json=maxInnerRedemptionRate,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"max_inner_redemption_rate"` + // The max number of messages that can be sent in a delegation + // or undelegation ICA tx + MaxMessagesPerIcaTx uint64 `protobuf:"varint,36,opt,name=max_messages_per_ica_tx,json=maxMessagesPerIcaTx,proto3" json:"max_messages_per_ica_tx,omitempty"` + // Indicates whether redemptions are allowed through this module + RedemptionsEnabled bool `protobuf:"varint,37,opt,name=redemptions_enabled,json=redemptionsEnabled,proto3" json:"redemptions_enabled,omitempty"` + // An optional fee rebate + // If there is no rebate for the host zone, this will be nil + CommunityPoolRebate *CommunityPoolRebate `protobuf:"bytes,34,opt,name=community_pool_rebate,json=communityPoolRebate,proto3" json:"community_pool_rebate,omitempty"` + // A boolean indicating whether the chain has LSM enabled + LsmLiquidStakeEnabled bool `protobuf:"varint,27,opt,name=lsm_liquid_stake_enabled,json=lsmLiquidStakeEnabled,proto3" json:"lsm_liquid_stake_enabled,omitempty"` + // A boolean indicating whether the chain is currently halted + Halted bool `protobuf:"varint,19,opt,name=halted,proto3" json:"halted,omitempty"` +} + +func (m *HostZone) Reset() { *m = HostZone{} } +func (m *HostZone) String() string { return proto.CompactTextString(m) } +func (*HostZone) ProtoMessage() {} +func (*HostZone) Descriptor() ([]byte, []int) { + return fileDescriptor_f81bf5b42c61245a, []int{1} +} +func (m *HostZone) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *HostZone) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_HostZone.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *HostZone) XXX_Merge(src proto.Message) { + xxx_messageInfo_HostZone.Merge(m, src) +} +func (m *HostZone) XXX_Size() int { + return m.Size() +} +func (m *HostZone) XXX_DiscardUnknown() { + xxx_messageInfo_HostZone.DiscardUnknown(m) +} + +var xxx_messageInfo_HostZone proto.InternalMessageInfo + +func (m *HostZone) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +func (m *HostZone) GetBech32Prefix() string { + if m != nil { + return m.Bech32Prefix + } + return "" +} + +func (m *HostZone) GetConnectionId() string { + if m != nil { + return m.ConnectionId + } + return "" +} + +func (m *HostZone) GetTransferChannelId() string { + if m != nil { + return m.TransferChannelId + } + return "" +} + +func (m *HostZone) GetIbcDenom() string { + if m != nil { + return m.IbcDenom + } + return "" +} + +func (m *HostZone) GetHostDenom() string { + if m != nil { + return m.HostDenom + } + return "" +} + +func (m *HostZone) GetUnbondingPeriod() uint64 { + if m != nil { + return m.UnbondingPeriod + } + return 0 +} + +func (m *HostZone) GetValidators() []*Validator { + if m != nil { + return m.Validators + } + return nil +} + +func (m *HostZone) GetDepositAddress() string { + if m != nil { + return m.DepositAddress + } + return "" +} + +func (m *HostZone) GetWithdrawalIcaAddress() string { + if m != nil { + return m.WithdrawalIcaAddress + } + return "" +} + +func (m *HostZone) GetFeeIcaAddress() string { + if m != nil { + return m.FeeIcaAddress + } + return "" +} + +func (m *HostZone) GetDelegationIcaAddress() string { + if m != nil { + return m.DelegationIcaAddress + } + return "" +} + +func (m *HostZone) GetRedemptionIcaAddress() string { + if m != nil { + return m.RedemptionIcaAddress + } + return "" +} + +func (m *HostZone) GetCommunityPoolDepositIcaAddress() string { + if m != nil { + return m.CommunityPoolDepositIcaAddress + } + return "" +} + +func (m *HostZone) GetCommunityPoolReturnIcaAddress() string { + if m != nil { + return m.CommunityPoolReturnIcaAddress + } + return "" +} + +func (m *HostZone) GetCommunityPoolStakeHoldingAddress() string { + if m != nil { + return m.CommunityPoolStakeHoldingAddress + } + return "" +} + +func (m *HostZone) GetCommunityPoolRedeemHoldingAddress() string { + if m != nil { + return m.CommunityPoolRedeemHoldingAddress + } + return "" +} + +func (m *HostZone) GetCommunityPoolTreasuryAddress() string { + if m != nil { + return m.CommunityPoolTreasuryAddress + } + return "" +} + +func (m *HostZone) GetMaxMessagesPerIcaTx() uint64 { + if m != nil { + return m.MaxMessagesPerIcaTx + } + return 0 +} + +func (m *HostZone) GetRedemptionsEnabled() bool { + if m != nil { + return m.RedemptionsEnabled + } + return false +} + +func (m *HostZone) GetCommunityPoolRebate() *CommunityPoolRebate { + if m != nil { + return m.CommunityPoolRebate + } + return nil +} + +func (m *HostZone) GetLsmLiquidStakeEnabled() bool { + if m != nil { + return m.LsmLiquidStakeEnabled + } + return false +} + +func (m *HostZone) GetHalted() bool { + if m != nil { + return m.Halted + } + return false +} + +func init() { + proto.RegisterType((*CommunityPoolRebate)(nil), "stride.stakeibc.CommunityPoolRebate") + proto.RegisterType((*HostZone)(nil), "stride.stakeibc.HostZone") +} + +func init() { proto.RegisterFile("stride/stakeibc/host_zone.proto", fileDescriptor_f81bf5b42c61245a) } + +var fileDescriptor_f81bf5b42c61245a = []byte{ + // 1005 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x96, 0xdd, 0x6e, 0xdb, 0x36, + 0x14, 0xc7, 0xe3, 0xd6, 0x4d, 0x15, 0xa6, 0x89, 0x65, 0x39, 0x49, 0x95, 0xa4, 0x71, 0x9c, 0x8f, + 0x02, 0xd9, 0x45, 0x6c, 0x2c, 0x1d, 0xb0, 0x61, 0x57, 0x4b, 0x9b, 0x01, 0xb5, 0x91, 0x15, 0x81, + 0x12, 0x0c, 0x43, 0x6e, 0x08, 0x8a, 0x64, 0x2c, 0x2e, 0x12, 0xe9, 0x91, 0x74, 0xeb, 0xec, 0x29, + 0xf6, 0x0c, 0x7b, 0x86, 0x5e, 0xee, 0x01, 0x7a, 0x59, 0xf4, 0x6a, 0xd8, 0x45, 0x31, 0x24, 0x2f, + 0x32, 0x88, 0x92, 0x6c, 0xd9, 0xca, 0xe0, 0xc2, 0x57, 0x31, 0xcf, 0xc7, 0xef, 0x7f, 0x18, 0x92, + 0x47, 0x07, 0x6c, 0x2b, 0x2d, 0x19, 0xa1, 0x2d, 0xa5, 0xd1, 0x35, 0x65, 0x3e, 0x6e, 0x05, 0x42, + 0x69, 0xf8, 0xbb, 0xe0, 0xb4, 0xd9, 0x93, 0x42, 0x0b, 0xa7, 0x92, 0x04, 0x34, 0xb3, 0x80, 0x8d, + 0x75, 0x2c, 0x54, 0x24, 0x14, 0x34, 0xee, 0x56, 0xb2, 0x48, 0x62, 0x37, 0x56, 0xba, 0xa2, 0x2b, + 0x12, 0x7b, 0xfc, 0x2b, 0xb5, 0x16, 0x24, 0xde, 0xa2, 0x90, 0x11, 0xa4, 0x85, 0x4c, 0x02, 0x76, + 0xff, 0x2a, 0x81, 0xda, 0x2b, 0x11, 0x45, 0x7d, 0xce, 0xf4, 0xcd, 0x99, 0x10, 0xa1, 0x47, 0x7d, + 0xa4, 0xa9, 0x73, 0x02, 0x16, 0xa5, 0xf9, 0x05, 0x25, 0xd2, 0xd4, 0x2d, 0x35, 0x4a, 0x07, 0x0b, + 0x2f, 0xf7, 0x3e, 0x7c, 0xde, 0x9e, 0xfb, 0xe7, 0xf3, 0xf6, 0x66, 0xa2, 0xac, 0xc8, 0x75, 0x93, + 0x89, 0x56, 0x84, 0x74, 0xd0, 0x3c, 0xa5, 0x5d, 0x84, 0x6f, 0x4e, 0x28, 0xf6, 0x40, 0x92, 0xe7, + 0xc5, 0x14, 0x08, 0xb6, 0x42, 0xf6, 0x5b, 0x9f, 0x11, 0x68, 0x0a, 0x88, 0xff, 0x40, 0x2d, 0xae, + 0x29, 0x87, 0x28, 0x12, 0x7d, 0xae, 0xdd, 0x07, 0x86, 0xbb, 0x95, 0x72, 0x57, 0x8b, 0xdc, 0x36, + 0xd7, 0xde, 0x7a, 0xc2, 0x38, 0x37, 0x88, 0x73, 0x7d, 0x11, 0x03, 0x8e, 0x4d, 0xfe, 0xee, 0x9f, + 0x55, 0x60, 0xbd, 0x16, 0x4a, 0x5f, 0x0a, 0x4e, 0x9d, 0x75, 0x60, 0xe1, 0x00, 0x31, 0x0e, 0x19, + 0x49, 0x0a, 0xf6, 0x1e, 0x9b, 0x75, 0x9b, 0x38, 0xbb, 0xe0, 0x89, 0x4f, 0x71, 0xf0, 0xe2, 0xa8, + 0x27, 0xe9, 0x15, 0x1b, 0xb8, 0x55, 0xe3, 0x1e, 0xb3, 0x39, 0x7b, 0x60, 0x09, 0x0b, 0xce, 0x29, + 0xd6, 0x4c, 0x18, 0xc6, 0x83, 0x24, 0x68, 0x64, 0x6c, 0x13, 0xa7, 0x09, 0x6a, 0x5a, 0x22, 0xae, + 0xae, 0xa8, 0x84, 0x38, 0x40, 0x9c, 0xd3, 0x30, 0x0e, 0x7d, 0x62, 0x42, 0xab, 0x99, 0xeb, 0x55, + 0xe2, 0x69, 0x13, 0x67, 0x13, 0x2c, 0x30, 0x1f, 0x43, 0x42, 0xb9, 0x88, 0x5c, 0xcb, 0x44, 0x59, + 0xcc, 0xc7, 0x27, 0xf1, 0xda, 0xd9, 0x02, 0xc0, 0x1c, 0x79, 0xe2, 0x5d, 0x30, 0xde, 0x85, 0xd8, + 0x92, 0xb8, 0xbf, 0x02, 0x76, 0x9f, 0xfb, 0x82, 0x13, 0xc6, 0xbb, 0xb0, 0x47, 0x25, 0x13, 0xc4, + 0xdd, 0x68, 0x94, 0x0e, 0xca, 0x5e, 0x65, 0x68, 0x3f, 0x33, 0x66, 0xe7, 0x7b, 0x00, 0x86, 0x27, + 0xab, 0xdc, 0x87, 0x8d, 0x87, 0x07, 0x8b, 0x47, 0x1b, 0xcd, 0x89, 0xeb, 0xd3, 0xfc, 0x39, 0x0b, + 0xf1, 0x72, 0xd1, 0xce, 0x31, 0xa8, 0x10, 0xda, 0x13, 0x8a, 0x69, 0x88, 0x08, 0x91, 0x54, 0x29, + 0xd7, 0x31, 0xc7, 0xe2, 0x7e, 0x7a, 0x7f, 0xb8, 0x92, 0x5e, 0xb2, 0xe3, 0xc4, 0x73, 0xae, 0x25, + 0xe3, 0x5d, 0x6f, 0x39, 0x4d, 0x48, 0xad, 0xce, 0x1b, 0xb0, 0xf6, 0x8e, 0xe9, 0x80, 0x48, 0xf4, + 0x0e, 0x85, 0x90, 0x61, 0x34, 0x24, 0xad, 0x4d, 0x21, 0xad, 0x8c, 0xf2, 0xda, 0x18, 0x65, 0xbc, + 0x1f, 0x40, 0xe5, 0x8a, 0xd2, 0x31, 0xd0, 0xd3, 0x29, 0xa0, 0xa5, 0x2b, 0x4a, 0x73, 0x84, 0x37, + 0x60, 0x8d, 0xd0, 0x90, 0x76, 0x51, 0x72, 0x98, 0x39, 0x90, 0x3b, 0xad, 0xa2, 0x51, 0xde, 0x38, + 0x4f, 0x52, 0x42, 0xa3, 0x5e, 0x81, 0xb7, 0x3e, 0x8d, 0x37, 0xca, 0xcb, 0xf1, 0x08, 0xd8, 0xc5, + 0xd9, 0xb3, 0x83, 0x3d, 0x21, 0x42, 0x98, 0x9d, 0x41, 0x9e, 0x5d, 0x9f, 0xc2, 0xae, 0xe3, 0xfc, + 0xd3, 0x3d, 0x49, 0x08, 0x39, 0x15, 0x1f, 0xec, 0x4c, 0xa8, 0x48, 0xaa, 0xfb, 0x72, 0x7c, 0x03, + 0xdb, 0x53, 0x44, 0xb6, 0xf0, 0x78, 0x7f, 0x88, 0x01, 0x39, 0x8d, 0x00, 0xec, 0x4f, 0x68, 0x98, + 0xfb, 0x06, 0x03, 0x11, 0x9a, 0x8b, 0x9b, 0xc9, 0x34, 0xa6, 0xc8, 0x34, 0xc6, 0x64, 0xcc, 0x63, + 0x7f, 0x9d, 0x20, 0x32, 0xa5, 0x5f, 0xc1, 0xf3, 0xc2, 0x6e, 0x08, 0xa5, 0x51, 0x41, 0x6a, 0x67, + 0x8a, 0xd4, 0xce, 0xc4, 0x8e, 0x62, 0xc8, 0x84, 0x16, 0x04, 0xdb, 0x13, 0x5a, 0x5a, 0x52, 0xa4, + 0xfa, 0xf2, 0x66, 0xa8, 0xb2, 0x37, 0x45, 0xe5, 0xd9, 0x98, 0xca, 0x45, 0x9a, 0x9e, 0x09, 0x74, + 0x40, 0x55, 0x0b, 0x8d, 0xe2, 0x73, 0xcf, 0xae, 0x9b, 0x72, 0x97, 0xbe, 0xa4, 0x1d, 0xda, 0x26, + 0xef, 0x64, 0x94, 0xe6, 0x60, 0xb0, 0x12, 0x22, 0xa5, 0x61, 0xee, 0x86, 0x9a, 0xae, 0x0d, 0x0c, + 0xee, 0xeb, 0x2f, 0xe8, 0xda, 0x9f, 0xde, 0x1f, 0x82, 0x74, 0x13, 0x71, 0x0f, 0x77, 0x62, 0x9c, + 0x37, 0xa4, 0x99, 0x5e, 0x7e, 0x09, 0x2a, 0x93, 0xfc, 0xc5, 0x59, 0xf9, 0xcb, 0x72, 0x9c, 0x8d, + 0x40, 0x2d, 0x62, 0xbc, 0x50, 0xff, 0xca, 0xac, 0xfc, 0x6a, 0xc4, 0xb8, 0x57, 0x94, 0x40, 0x83, + 0x82, 0xc4, 0xea, 0xec, 0x12, 0x68, 0x30, 0x21, 0x11, 0x82, 0xf5, 0x78, 0x17, 0x8c, 0x73, 0x2a, + 0x0b, 0x42, 0xcf, 0x66, 0x15, 0x5a, 0x8b, 0x18, 0x6f, 0xc7, 0xc8, 0x7b, 0xd4, 0xd0, 0xe0, 0x7f, + 0xd4, 0xb6, 0x66, 0x57, 0x43, 0x83, 0xfb, 0xd4, 0xbe, 0x01, 0x4f, 0x63, 0xb5, 0x88, 0x2a, 0x85, + 0xba, 0x54, 0xc5, 0x9f, 0x23, 0xd3, 0x44, 0xf4, 0xc0, 0xdd, 0x37, 0x9f, 0xa4, 0xf8, 0xbf, 0xfb, + 0x53, 0xea, 0x3d, 0xa3, 0xb2, 0x8d, 0xd1, 0xc5, 0xc0, 0x69, 0x81, 0xda, 0xa8, 0x32, 0x05, 0x29, + 0x47, 0x7e, 0x48, 0x89, 0xfb, 0xbc, 0x51, 0x3a, 0xb0, 0x3c, 0x27, 0xe7, 0xfa, 0x31, 0xf1, 0x38, + 0xbf, 0x80, 0xd5, 0xc2, 0x13, 0x8f, 0xa7, 0x09, 0x77, 0xb7, 0x51, 0x3a, 0x58, 0x3c, 0xda, 0x2f, + 0x7c, 0xd2, 0xee, 0x99, 0x5d, 0xbc, 0x1a, 0xbe, 0x67, 0xa0, 0xf9, 0x16, 0xb8, 0xa1, 0x8a, 0x60, + 0x7e, 0x1c, 0x19, 0xd6, 0xb3, 0x69, 0xea, 0x59, 0x0d, 0x55, 0x74, 0x3a, 0x9a, 0x34, 0xb2, 0x92, + 0xd6, 0xc0, 0x7c, 0x80, 0x42, 0x4d, 0x89, 0x5b, 0x33, 0x61, 0xe9, 0xaa, 0x53, 0xb6, 0xca, 0xf6, + 0xa3, 0x4e, 0xd9, 0x7a, 0x64, 0xcf, 0x77, 0xca, 0xd6, 0xbc, 0xfd, 0xb8, 0x53, 0xb6, 0x1e, 0xdb, + 0x56, 0xa7, 0x6c, 0x2d, 0xdb, 0x95, 0x4e, 0xd9, 0xaa, 0xd8, 0x76, 0xa7, 0x6c, 0xd9, 0x76, 0xf5, + 0xe5, 0xe9, 0x87, 0xdb, 0x7a, 0xe9, 0xe3, 0x6d, 0xbd, 0xf4, 0xef, 0x6d, 0xbd, 0xf4, 0xc7, 0x5d, + 0x7d, 0xee, 0xe3, 0x5d, 0x7d, 0xee, 0xef, 0xbb, 0xfa, 0xdc, 0xe5, 0x51, 0x97, 0xe9, 0xa0, 0xef, + 0x37, 0xb1, 0x88, 0x5a, 0xe7, 0x66, 0x67, 0x87, 0xa7, 0xc8, 0x57, 0xad, 0x74, 0x6a, 0x7b, 0x7b, + 0xf4, 0x5d, 0x6b, 0x30, 0x9a, 0xdd, 0xf4, 0x4d, 0x8f, 0x2a, 0x7f, 0xde, 0x0c, 0x6e, 0x2f, 0xfe, + 0x0b, 0x00, 0x00, 0xff, 0xff, 0x91, 0x26, 0xd1, 0x28, 0x3e, 0x0a, 0x00, 0x00, +} + +func (m *CommunityPoolRebate) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CommunityPoolRebate) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CommunityPoolRebate) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.LiquidStakedStTokenAmount.Size() + i -= size + if _, err := m.LiquidStakedStTokenAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size := m.RebateRate.Size() + i -= size + if _, err := m.RebateRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *HostZone) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *HostZone) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *HostZone) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.RedemptionsEnabled { + i-- + if m.RedemptionsEnabled { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x2 + i-- + dAtA[i] = 0xa8 + } + if m.MaxMessagesPerIcaTx != 0 { + i = encodeVarintHostZone(dAtA, i, uint64(m.MaxMessagesPerIcaTx)) + i-- + dAtA[i] = 0x2 + i-- + dAtA[i] = 0xa0 + } + if len(m.CommunityPoolTreasuryAddress) > 0 { + i -= len(m.CommunityPoolTreasuryAddress) + copy(dAtA[i:], m.CommunityPoolTreasuryAddress) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.CommunityPoolTreasuryAddress))) + i-- + dAtA[i] = 0x2 + i-- + dAtA[i] = 0x9a + } + if m.CommunityPoolRebate != nil { + { + size, err := m.CommunityPoolRebate.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2 + i-- + dAtA[i] = 0x92 + } + if len(m.CommunityPoolRedeemHoldingAddress) > 0 { + i -= len(m.CommunityPoolRedeemHoldingAddress) + copy(dAtA[i:], m.CommunityPoolRedeemHoldingAddress) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.CommunityPoolRedeemHoldingAddress))) + i-- + dAtA[i] = 0x2 + i-- + dAtA[i] = 0x8a + } + if len(m.CommunityPoolStakeHoldingAddress) > 0 { + i -= len(m.CommunityPoolStakeHoldingAddress) + copy(dAtA[i:], m.CommunityPoolStakeHoldingAddress) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.CommunityPoolStakeHoldingAddress))) + i-- + dAtA[i] = 0x2 + i-- + dAtA[i] = 0x82 + } + if len(m.CommunityPoolReturnIcaAddress) > 0 { + i -= len(m.CommunityPoolReturnIcaAddress) + copy(dAtA[i:], m.CommunityPoolReturnIcaAddress) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.CommunityPoolReturnIcaAddress))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xfa + } + if len(m.CommunityPoolDepositIcaAddress) > 0 { + i -= len(m.CommunityPoolDepositIcaAddress) + copy(dAtA[i:], m.CommunityPoolDepositIcaAddress) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.CommunityPoolDepositIcaAddress))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xf2 + } + { + size := m.MaxInnerRedemptionRate.Size() + i -= size + if _, err := m.MaxInnerRedemptionRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xea + { + size := m.MinInnerRedemptionRate.Size() + i -= size + if _, err := m.MinInnerRedemptionRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xe2 + if m.LsmLiquidStakeEnabled { + i-- + if m.LsmLiquidStakeEnabled { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xd8 + } + if m.UnbondingPeriod != 0 { + i = encodeVarintHostZone(dAtA, i, uint64(m.UnbondingPeriod)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xd0 + } + if len(m.RedemptionIcaAddress) > 0 { + i -= len(m.RedemptionIcaAddress) + copy(dAtA[i:], m.RedemptionIcaAddress) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.RedemptionIcaAddress))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xca + } + if len(m.DelegationIcaAddress) > 0 { + i -= len(m.DelegationIcaAddress) + copy(dAtA[i:], m.DelegationIcaAddress) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.DelegationIcaAddress))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xc2 + } + if len(m.FeeIcaAddress) > 0 { + i -= len(m.FeeIcaAddress) + copy(dAtA[i:], m.FeeIcaAddress) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.FeeIcaAddress))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xba + } + if len(m.WithdrawalIcaAddress) > 0 { + i -= len(m.WithdrawalIcaAddress) + copy(dAtA[i:], m.WithdrawalIcaAddress) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.WithdrawalIcaAddress))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xb2 + } + { + size := m.MaxRedemptionRate.Size() + i -= size + if _, err := m.MaxRedemptionRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xaa + { + size := m.MinRedemptionRate.Size() + i -= size + if _, err := m.MinRedemptionRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xa2 + if m.Halted { + i-- + if m.Halted { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x98 + } + if len(m.DepositAddress) > 0 { + i -= len(m.DepositAddress) + copy(dAtA[i:], m.DepositAddress) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.DepositAddress))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x92 + } + if len(m.Bech32Prefix) > 0 { + i -= len(m.Bech32Prefix) + copy(dAtA[i:], m.Bech32Prefix) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.Bech32Prefix))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x8a + } + { + size := m.TotalDelegations.Size() + i -= size + if _, err := m.TotalDelegations.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x6a + if len(m.TransferChannelId) > 0 { + i -= len(m.TransferChannelId) + copy(dAtA[i:], m.TransferChannelId) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.TransferChannelId))) + i-- + dAtA[i] = 0x62 + } + { + size := m.RedemptionRate.Size() + i -= size + if _, err := m.RedemptionRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x5a + { + size := m.LastRedemptionRate.Size() + i -= size + if _, err := m.LastRedemptionRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + if len(m.HostDenom) > 0 { + i -= len(m.HostDenom) + copy(dAtA[i:], m.HostDenom) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.HostDenom))) + i-- + dAtA[i] = 0x4a + } + if len(m.IbcDenom) > 0 { + i -= len(m.IbcDenom) + copy(dAtA[i:], m.IbcDenom) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.IbcDenom))) + i-- + dAtA[i] = 0x42 + } + if len(m.Validators) > 0 { + for iNdEx := len(m.Validators) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Validators[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintHostZone(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if len(m.ConnectionId) > 0 { + i -= len(m.ConnectionId) + copy(dAtA[i:], m.ConnectionId) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.ConnectionId))) + i-- + dAtA[i] = 0x12 + } + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintHostZone(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintHostZone(dAtA []byte, offset int, v uint64) int { + offset -= sovHostZone(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *CommunityPoolRebate) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.RebateRate.Size() + n += 1 + l + sovHostZone(uint64(l)) + l = m.LiquidStakedStTokenAmount.Size() + n += 1 + l + sovHostZone(uint64(l)) + return n +} + +func (m *HostZone) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovHostZone(uint64(l)) + } + l = len(m.ConnectionId) + if l > 0 { + n += 1 + l + sovHostZone(uint64(l)) + } + if len(m.Validators) > 0 { + for _, e := range m.Validators { + l = e.Size() + n += 1 + l + sovHostZone(uint64(l)) + } + } + l = len(m.IbcDenom) + if l > 0 { + n += 1 + l + sovHostZone(uint64(l)) + } + l = len(m.HostDenom) + if l > 0 { + n += 1 + l + sovHostZone(uint64(l)) + } + l = m.LastRedemptionRate.Size() + n += 1 + l + sovHostZone(uint64(l)) + l = m.RedemptionRate.Size() + n += 1 + l + sovHostZone(uint64(l)) + l = len(m.TransferChannelId) + if l > 0 { + n += 1 + l + sovHostZone(uint64(l)) + } + l = m.TotalDelegations.Size() + n += 1 + l + sovHostZone(uint64(l)) + l = len(m.Bech32Prefix) + if l > 0 { + n += 2 + l + sovHostZone(uint64(l)) + } + l = len(m.DepositAddress) + if l > 0 { + n += 2 + l + sovHostZone(uint64(l)) + } + if m.Halted { + n += 3 + } + l = m.MinRedemptionRate.Size() + n += 2 + l + sovHostZone(uint64(l)) + l = m.MaxRedemptionRate.Size() + n += 2 + l + sovHostZone(uint64(l)) + l = len(m.WithdrawalIcaAddress) + if l > 0 { + n += 2 + l + sovHostZone(uint64(l)) + } + l = len(m.FeeIcaAddress) + if l > 0 { + n += 2 + l + sovHostZone(uint64(l)) + } + l = len(m.DelegationIcaAddress) + if l > 0 { + n += 2 + l + sovHostZone(uint64(l)) + } + l = len(m.RedemptionIcaAddress) + if l > 0 { + n += 2 + l + sovHostZone(uint64(l)) + } + if m.UnbondingPeriod != 0 { + n += 2 + sovHostZone(uint64(m.UnbondingPeriod)) + } + if m.LsmLiquidStakeEnabled { + n += 3 + } + l = m.MinInnerRedemptionRate.Size() + n += 2 + l + sovHostZone(uint64(l)) + l = m.MaxInnerRedemptionRate.Size() + n += 2 + l + sovHostZone(uint64(l)) + l = len(m.CommunityPoolDepositIcaAddress) + if l > 0 { + n += 2 + l + sovHostZone(uint64(l)) + } + l = len(m.CommunityPoolReturnIcaAddress) + if l > 0 { + n += 2 + l + sovHostZone(uint64(l)) + } + l = len(m.CommunityPoolStakeHoldingAddress) + if l > 0 { + n += 2 + l + sovHostZone(uint64(l)) + } + l = len(m.CommunityPoolRedeemHoldingAddress) + if l > 0 { + n += 2 + l + sovHostZone(uint64(l)) + } + if m.CommunityPoolRebate != nil { + l = m.CommunityPoolRebate.Size() + n += 2 + l + sovHostZone(uint64(l)) + } + l = len(m.CommunityPoolTreasuryAddress) + if l > 0 { + n += 2 + l + sovHostZone(uint64(l)) + } + if m.MaxMessagesPerIcaTx != 0 { + n += 2 + sovHostZone(uint64(m.MaxMessagesPerIcaTx)) + } + if m.RedemptionsEnabled { + n += 3 + } + return n +} + +func sovHostZone(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozHostZone(x uint64) (n int) { + return sovHostZone(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *CommunityPoolRebate) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CommunityPoolRebate: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CommunityPoolRebate: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RebateRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.RebateRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LiquidStakedStTokenAmount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LiquidStakedStTokenAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipHostZone(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthHostZone + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *HostZone) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: HostZone: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: HostZone: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConnectionId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ConnectionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Validators", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Validators = append(m.Validators, &Validator{}) + if err := m.Validators[len(m.Validators)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IbcDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.IbcDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastRedemptionRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LastRedemptionRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RedemptionRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.RedemptionRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TransferChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TransferChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TotalDelegations", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.TotalDelegations.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Bech32Prefix", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Bech32Prefix = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 18: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DepositAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DepositAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 19: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Halted", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Halted = bool(v != 0) + case 20: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MinRedemptionRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MinRedemptionRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 21: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxRedemptionRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MaxRedemptionRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 22: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field WithdrawalIcaAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.WithdrawalIcaAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 23: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FeeIcaAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FeeIcaAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 24: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DelegationIcaAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DelegationIcaAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 25: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RedemptionIcaAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RedemptionIcaAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 26: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UnbondingPeriod", wireType) + } + m.UnbondingPeriod = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.UnbondingPeriod |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 27: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LsmLiquidStakeEnabled", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.LsmLiquidStakeEnabled = bool(v != 0) + case 28: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MinInnerRedemptionRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MinInnerRedemptionRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 29: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxInnerRedemptionRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MaxInnerRedemptionRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 30: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CommunityPoolDepositIcaAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CommunityPoolDepositIcaAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 31: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CommunityPoolReturnIcaAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CommunityPoolReturnIcaAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 32: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CommunityPoolStakeHoldingAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CommunityPoolStakeHoldingAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 33: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CommunityPoolRedeemHoldingAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CommunityPoolRedeemHoldingAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 34: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CommunityPoolRebate", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.CommunityPoolRebate == nil { + m.CommunityPoolRebate = &CommunityPoolRebate{} + } + if err := m.CommunityPoolRebate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 35: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CommunityPoolTreasuryAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthHostZone + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthHostZone + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CommunityPoolTreasuryAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 36: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxMessagesPerIcaTx", wireType) + } + m.MaxMessagesPerIcaTx = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MaxMessagesPerIcaTx |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 37: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RedemptionsEnabled", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowHostZone + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.RedemptionsEnabled = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipHostZone(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthHostZone + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipHostZone(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowHostZone + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowHostZone + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowHostZone + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthHostZone + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupHostZone + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthHostZone + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthHostZone = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowHostZone = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupHostZone = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/stakeibc/types/host_zone_test.go b/x/stakeibc/types/host_zone_test.go new file mode 100644 index 00000000000..d0eeb589a79 --- /dev/null +++ b/x/stakeibc/types/host_zone_test.go @@ -0,0 +1,119 @@ +package types_test + +import ( + "testing" + + sdkmath "cosmossdk.io/math" + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func TestHostZoneUnbondingFrequency(t *testing.T) { + testCases := []struct { + unbondingPeriod uint64 + unbondingFrequency uint64 + }{ + { + unbondingPeriod: 1, + unbondingFrequency: 1, + }, + { + unbondingPeriod: 6, + unbondingFrequency: 1, + }, + { + unbondingPeriod: 7, + unbondingFrequency: 2, + }, + { + unbondingPeriod: 13, + unbondingFrequency: 2, + }, + { + unbondingPeriod: 14, + unbondingFrequency: 3, + }, + { + unbondingPeriod: 20, + unbondingFrequency: 3, + }, + { + unbondingPeriod: 21, + unbondingFrequency: 4, + }, + { + unbondingPeriod: 27, + unbondingFrequency: 4, + }, + { + unbondingPeriod: 28, + unbondingFrequency: 5, + }, + } + + for _, tc := range testCases { + hostZone := types.HostZone{ + UnbondingPeriod: tc.unbondingPeriod, + } + require.Equal(t, tc.unbondingFrequency, hostZone.GetUnbondingFrequency(), "unbonding frequency") + } +} + +func TestSafelyGetCommunityPoolRebate(t *testing.T) { + chainId := "chain-0" + + testCases := []struct { + name string + hostZone types.HostZone + expectedRebate bool + }{ + { + name: "no rebate", + hostZone: types.HostZone{ChainId: chainId}, + expectedRebate: false, + }, + { + name: "rebate but empty percentage field", + hostZone: types.HostZone{ + ChainId: chainId, + CommunityPoolRebate: &types.CommunityPoolRebate{ + LiquidStakedStTokenAmount: sdkmath.NewInt(1), + }, + }, + expectedRebate: false, + }, + { + name: "rebate but empty liquid stake amount", + hostZone: types.HostZone{ + ChainId: chainId, + CommunityPoolRebate: &types.CommunityPoolRebate{ + RebateRate: sdkmath.LegacyOneDec(), + }, + }, + expectedRebate: false, + }, + { + name: "valid rebate", + hostZone: types.HostZone{ + ChainId: chainId, + CommunityPoolRebate: &types.CommunityPoolRebate{ + RebateRate: sdkmath.LegacyOneDec(), + LiquidStakedStTokenAmount: sdkmath.NewInt(1), + }, + }, + expectedRebate: true, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + actualRebate, hasRebate := tc.hostZone.SafelyGetCommunityPoolRebate() + require.Equal(t, tc.expectedRebate, hasRebate, "has rebate bool") + + if tc.expectedRebate { + require.Equal(t, *tc.hostZone.CommunityPoolRebate, actualRebate, "rebate") + } + }) + } +} diff --git a/x/stakeibc/types/ica_account.go b/x/stakeibc/types/ica_account.go new file mode 100644 index 00000000000..f3d7e575392 --- /dev/null +++ b/x/stakeibc/types/ica_account.go @@ -0,0 +1,21 @@ +package types + +import fmt "fmt" + +// Helper function to build the host zone ICA owner in the form "{chainId}.{ICA_TYPE}" +func FormatHostZoneICAOwner(chainId string, accountType ICAAccountType) (result string) { + return chainId + "." + accountType.String() +} + +// Helper function to build the ICA owner for a trade route ICA +// in the form "{chainId}.{rewardDenom}-{hostDenom}.{ICA_TYPE}" +func FormatTradeRouteICAOwner(chainId, rewardDenom, hostDenom string, icaAccountType ICAAccountType) string { + tradeRouteId := GetTradeRouteId(rewardDenom, hostDenom) + return FormatTradeRouteICAOwnerFromRouteId(chainId, tradeRouteId, icaAccountType) +} + +// Helper function to build the ICA owner for a trade route ICA +// in the form "{chainId}.{tradeRouteId}.{ICA_TYPE}" +func FormatTradeRouteICAOwnerFromRouteId(chainId, tradeRouteId string, icaAccountType ICAAccountType) string { + return fmt.Sprintf("%s.%s.%s", chainId, tradeRouteId, icaAccountType.String()) +} diff --git a/x/stakeibc/types/ica_account.pb.go b/x/stakeibc/types/ica_account.pb.go new file mode 100644 index 00000000000..e1161e0bb34 --- /dev/null +++ b/x/stakeibc/types/ica_account.pb.go @@ -0,0 +1,508 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/stakeibc/ica_account.proto + +package types + +import ( + fmt "fmt" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type ICAAccountType int32 + +const ( + ICAAccountType_DELEGATION ICAAccountType = 0 + ICAAccountType_FEE ICAAccountType = 1 + ICAAccountType_WITHDRAWAL ICAAccountType = 2 + ICAAccountType_REDEMPTION ICAAccountType = 3 + ICAAccountType_COMMUNITY_POOL_DEPOSIT ICAAccountType = 4 + ICAAccountType_COMMUNITY_POOL_RETURN ICAAccountType = 5 + ICAAccountType_CONVERTER_UNWIND ICAAccountType = 6 + ICAAccountType_CONVERTER_TRADE ICAAccountType = 7 +) + +var ICAAccountType_name = map[int32]string{ + 0: "DELEGATION", + 1: "FEE", + 2: "WITHDRAWAL", + 3: "REDEMPTION", + 4: "COMMUNITY_POOL_DEPOSIT", + 5: "COMMUNITY_POOL_RETURN", + 6: "CONVERTER_UNWIND", + 7: "CONVERTER_TRADE", +} + +var ICAAccountType_value = map[string]int32{ + "DELEGATION": 0, + "FEE": 1, + "WITHDRAWAL": 2, + "REDEMPTION": 3, + "COMMUNITY_POOL_DEPOSIT": 4, + "COMMUNITY_POOL_RETURN": 5, + "CONVERTER_UNWIND": 6, + "CONVERTER_TRADE": 7, +} + +func (x ICAAccountType) String() string { + return proto.EnumName(ICAAccountType_name, int32(x)) +} + +func (ICAAccountType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_2976ae6e7f6ce824, []int{0} +} + +type ICAAccount struct { + ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + Type ICAAccountType `protobuf:"varint,2,opt,name=type,proto3,enum=stride.stakeibc.ICAAccountType" json:"type,omitempty"` + ConnectionId string `protobuf:"bytes,3,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty"` + Address string `protobuf:"bytes,4,opt,name=address,proto3" json:"address,omitempty"` +} + +func (m *ICAAccount) Reset() { *m = ICAAccount{} } +func (m *ICAAccount) String() string { return proto.CompactTextString(m) } +func (*ICAAccount) ProtoMessage() {} +func (*ICAAccount) Descriptor() ([]byte, []int) { + return fileDescriptor_2976ae6e7f6ce824, []int{0} +} +func (m *ICAAccount) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ICAAccount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ICAAccount.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ICAAccount) XXX_Merge(src proto.Message) { + xxx_messageInfo_ICAAccount.Merge(m, src) +} +func (m *ICAAccount) XXX_Size() int { + return m.Size() +} +func (m *ICAAccount) XXX_DiscardUnknown() { + xxx_messageInfo_ICAAccount.DiscardUnknown(m) +} + +var xxx_messageInfo_ICAAccount proto.InternalMessageInfo + +func (m *ICAAccount) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +func (m *ICAAccount) GetType() ICAAccountType { + if m != nil { + return m.Type + } + return ICAAccountType_DELEGATION +} + +func (m *ICAAccount) GetConnectionId() string { + if m != nil { + return m.ConnectionId + } + return "" +} + +func (m *ICAAccount) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func init() { + proto.RegisterEnum("stride.stakeibc.ICAAccountType", ICAAccountType_name, ICAAccountType_value) + proto.RegisterType((*ICAAccount)(nil), "stride.stakeibc.ICAAccount") +} + +func init() { proto.RegisterFile("stride/stakeibc/ica_account.proto", fileDescriptor_2976ae6e7f6ce824) } + +var fileDescriptor_2976ae6e7f6ce824 = []byte{ + // 366 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0x91, 0xc1, 0x4e, 0xe2, 0x40, + 0x18, 0xc7, 0x3b, 0xc0, 0xd2, 0xdd, 0xc9, 0x2e, 0x4c, 0x66, 0x77, 0x4d, 0xf1, 0x50, 0x51, 0x2f, + 0xc4, 0xc4, 0x36, 0x81, 0x8b, 0xd7, 0x4a, 0x47, 0x9d, 0xa4, 0xb4, 0x64, 0x18, 0x24, 0x7a, 0x69, + 0xda, 0x69, 0x23, 0x8d, 0xb1, 0x25, 0xb4, 0x18, 0x79, 0x0b, 0xef, 0x3e, 0x82, 0x2f, 0xe2, 0x91, + 0xa3, 0x47, 0x03, 0x2f, 0x62, 0x28, 0x98, 0x46, 0x8e, 0xff, 0xef, 0xfb, 0xe5, 0xf7, 0x25, 0xdf, + 0x1f, 0x1e, 0xa6, 0xd9, 0x34, 0x0a, 0x42, 0x3d, 0xcd, 0xbc, 0xfb, 0x30, 0xf2, 0x85, 0x1e, 0x09, + 0xcf, 0xf5, 0x84, 0x48, 0x66, 0x71, 0xa6, 0x4d, 0xa6, 0x49, 0x96, 0xe0, 0xfa, 0x06, 0xd1, 0xbe, + 0x90, 0xa3, 0x17, 0x00, 0x21, 0xed, 0x1a, 0xc6, 0x86, 0xc2, 0x0d, 0xf8, 0x53, 0x8c, 0xbd, 0x28, + 0x76, 0xa3, 0x40, 0x01, 0x4d, 0xd0, 0xfa, 0xc5, 0xe4, 0x3c, 0xd3, 0x00, 0x77, 0x60, 0x25, 0x9b, + 0x4f, 0x42, 0xa5, 0xd4, 0x04, 0xad, 0x5a, 0xfb, 0x40, 0xdb, 0x31, 0x69, 0x85, 0x85, 0xcf, 0x27, + 0x21, 0xcb, 0x61, 0x7c, 0x0c, 0xff, 0x88, 0x24, 0x8e, 0x43, 0x91, 0x45, 0x49, 0x2e, 0x2d, 0xe7, + 0xd2, 0xdf, 0xc5, 0x90, 0x06, 0x58, 0x81, 0xb2, 0x17, 0x04, 0xd3, 0x30, 0x4d, 0x95, 0xca, 0xe6, + 0xe6, 0x36, 0x9e, 0xbc, 0x02, 0x58, 0xfb, 0xee, 0xc5, 0x35, 0x08, 0x4d, 0x62, 0x91, 0x4b, 0x83, + 0x53, 0xc7, 0x46, 0x12, 0x96, 0x61, 0xf9, 0x82, 0x10, 0x04, 0xd6, 0x8b, 0x11, 0xe5, 0x57, 0x26, + 0x33, 0x46, 0x86, 0x85, 0x4a, 0xeb, 0xcc, 0x88, 0x49, 0x7a, 0xfd, 0x1c, 0x2c, 0xe3, 0x7d, 0xb8, + 0xd7, 0x75, 0x7a, 0xbd, 0xa1, 0x4d, 0xf9, 0x8d, 0xdb, 0x77, 0x1c, 0xcb, 0x35, 0x49, 0xdf, 0x19, + 0x50, 0x8e, 0x2a, 0xb8, 0x01, 0xff, 0xef, 0xec, 0x18, 0xe1, 0x43, 0x66, 0xa3, 0x1f, 0xf8, 0x1f, + 0x44, 0x5d, 0xc7, 0xbe, 0x26, 0x8c, 0x13, 0xe6, 0x0e, 0xed, 0x11, 0xb5, 0x4d, 0x54, 0xc5, 0x7f, + 0x61, 0xbd, 0x98, 0x72, 0x66, 0x98, 0x04, 0xc9, 0xe7, 0xd6, 0xdb, 0x52, 0x05, 0x8b, 0xa5, 0x0a, + 0x3e, 0x96, 0x2a, 0x78, 0x5e, 0xa9, 0xd2, 0x62, 0xa5, 0x4a, 0xef, 0x2b, 0x55, 0xba, 0x6d, 0xdf, + 0x45, 0xd9, 0x78, 0xe6, 0x6b, 0x22, 0x79, 0xd0, 0x07, 0xf9, 0xdf, 0x4e, 0x2d, 0xcf, 0x4f, 0xf5, + 0x6d, 0x61, 0x8f, 0xed, 0x33, 0xfd, 0xa9, 0xa8, 0x6d, 0xfd, 0xb9, 0xd4, 0xaf, 0xe6, 0x8d, 0x75, + 0x3e, 0x03, 0x00, 0x00, 0xff, 0xff, 0x8a, 0x5d, 0xf7, 0x64, 0xd6, 0x01, 0x00, 0x00, +} + +func (m *ICAAccount) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ICAAccount) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ICAAccount) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintIcaAccount(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0x22 + } + if len(m.ConnectionId) > 0 { + i -= len(m.ConnectionId) + copy(dAtA[i:], m.ConnectionId) + i = encodeVarintIcaAccount(dAtA, i, uint64(len(m.ConnectionId))) + i-- + dAtA[i] = 0x1a + } + if m.Type != 0 { + i = encodeVarintIcaAccount(dAtA, i, uint64(m.Type)) + i-- + dAtA[i] = 0x10 + } + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintIcaAccount(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintIcaAccount(dAtA []byte, offset int, v uint64) int { + offset -= sovIcaAccount(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *ICAAccount) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovIcaAccount(uint64(l)) + } + if m.Type != 0 { + n += 1 + sovIcaAccount(uint64(m.Type)) + } + l = len(m.ConnectionId) + if l > 0 { + n += 1 + l + sovIcaAccount(uint64(l)) + } + l = len(m.Address) + if l > 0 { + n += 1 + l + sovIcaAccount(uint64(l)) + } + return n +} + +func sovIcaAccount(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozIcaAccount(x uint64) (n int) { + return sovIcaAccount(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *ICAAccount) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaAccount + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ICAAccount: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ICAAccount: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaAccount + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIcaAccount + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIcaAccount + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + m.Type = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaAccount + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Type |= ICAAccountType(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConnectionId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaAccount + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIcaAccount + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIcaAccount + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ConnectionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowIcaAccount + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthIcaAccount + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthIcaAccount + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipIcaAccount(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthIcaAccount + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipIcaAccount(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowIcaAccount + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowIcaAccount + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowIcaAccount + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthIcaAccount + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupIcaAccount + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthIcaAccount + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthIcaAccount = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowIcaAccount = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupIcaAccount = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/stakeibc/types/ica_account_test.go b/x/stakeibc/types/ica_account_test.go new file mode 100644 index 00000000000..36de37fa573 --- /dev/null +++ b/x/stakeibc/types/ica_account_test.go @@ -0,0 +1,81 @@ +package types_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func TestFormatHostZoneICAOwner(t *testing.T) { + chainId := "chain-0" + + testCases := []struct { + accountType types.ICAAccountType + owner string + }{ + { + accountType: types.ICAAccountType_DELEGATION, + owner: "chain-0.DELEGATION", + }, + { + accountType: types.ICAAccountType_WITHDRAWAL, + owner: "chain-0.WITHDRAWAL", + }, + { + accountType: types.ICAAccountType_REDEMPTION, + owner: "chain-0.REDEMPTION", + }, + { + accountType: types.ICAAccountType_FEE, + owner: "chain-0.FEE", + }, + { + accountType: types.ICAAccountType_COMMUNITY_POOL_DEPOSIT, + owner: "chain-0.COMMUNITY_POOL_DEPOSIT", + }, + { + accountType: types.ICAAccountType_COMMUNITY_POOL_RETURN, + owner: "chain-0.COMMUNITY_POOL_RETURN", + }, + } + + for _, tc := range testCases { + t.Run(tc.accountType.String(), func(t *testing.T) { + actual := types.FormatHostZoneICAOwner(chainId, tc.accountType) + require.Equal(t, tc.owner, actual) + }) + } +} + +func TestFormatTradeRouteICAOwner(t *testing.T) { + chainId := "chain-0" + rewardDenom := "ureward" + hostDenom := "uhost" + + testCases := []struct { + accountType types.ICAAccountType + owner string + }{ + { + accountType: types.ICAAccountType_CONVERTER_UNWIND, + owner: "chain-0.ureward-uhost.CONVERTER_UNWIND", + }, + { + accountType: types.ICAAccountType_CONVERTER_TRADE, + owner: "chain-0.ureward-uhost.CONVERTER_TRADE", + }, + } + + for _, tc := range testCases { + t.Run(tc.accountType.String(), func(t *testing.T) { + actual := types.FormatTradeRouteICAOwner(chainId, rewardDenom, hostDenom, tc.accountType) + require.Equal(t, actual, tc.owner, "format trade route ICA owner") + + tradeRouteId := "ureward-uhost" + actual = types.FormatTradeRouteICAOwnerFromRouteId(chainId, tradeRouteId, tc.accountType) + require.Equal(t, actual, tc.owner, "format trade route ICA owner by account") + }) + } +} diff --git a/x/stakeibc/types/keys.go b/x/stakeibc/types/keys.go new file mode 100644 index 00000000000..36f8defe953 --- /dev/null +++ b/x/stakeibc/types/keys.go @@ -0,0 +1,64 @@ +package types + +const ( + // ModuleName defines the module name + ModuleName = "stakeibc" + + // StoreKey defines the primary module store key + StoreKey = ModuleName + + // RouterKey is the message route for slashing + RouterKey = ModuleName + + // QuerierRoute defines the module's query routing key + QuerierRoute = ModuleName + + // MemStoreKey defines the in-memory store key + MemStoreKey = "mem_stakeibc" + + // Version defines the current version the IBC module supports + Version = "stakeibc-1" + + // PortID is the default port id that module binds to + PortID = "stakeibc" + + // fee account - F1 + FeeAccount = "stride1czvrk3jkvtj8m27kqsqu2yrkhw3h3ykwj3rxh6" + + RewardCollectorName = "reward_collector" +) + +// PortKey defines the key to store the port ID in store +var PortKey = KeyPrefix("stakeibc-port-") + +// Generates a key byte prefix from a string +func KeyPrefix(p string) []byte { + return []byte(p) +} + +// EpochTrackerKey returns the store key to retrieve a EpochTracker from the index fields +func EpochTrackerKey(epochIdentifier string) []byte { + var key []byte + + epochIdentifierBytes := []byte(epochIdentifier) + key = append(key, epochIdentifierBytes...) + key = append(key, []byte("/")...) + + return key +} + +// Definition for the store key format based on tradeRoute start and end denoms +func TradeRouteKeyFromDenoms(rewardDenom, hostDenom string) (key []byte) { + return []byte(rewardDenom + "-" + hostDenom) +} + +const ( + // Host zone keys prefix the HostZone structs + HostZoneKey = "HostZone-value-" + + // EpochTrackerKeyPrefix is the prefix to retrieve all EpochTracker + EpochTrackerKeyPrefix = "EpochTracker/value/" + + // TradeRoute keys prefix to retrieve all TradeZones + TradeRouteKeyPrefix = "TradeRoute-value-" +) diff --git a/x/stakeibc/types/lsm_msgs.go b/x/stakeibc/types/lsm_msgs.go new file mode 100644 index 00000000000..7b6ed1e93cd --- /dev/null +++ b/x/stakeibc/types/lsm_msgs.go @@ -0,0 +1,56 @@ +// #nosec G101 +package types + +import ( + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" +) + +// staking message types +const ( + TypeMsgRedeemTokensForShares = "redeem_tokens_for_shares" // #nosec G101 +) + +var _ sdk.Msg = &MsgRedeemTokensForShares{} + +// NewMsgRedeemTokensForShares creates a new MsgRedeemTokensForShares instance. +// +//nolint:interfacer +func NewMsgRedeemTokensForShares(delAddr sdk.AccAddress, amount sdk.Coin) *MsgRedeemTokensForShares { + return &MsgRedeemTokensForShares{ + DelegatorAddress: delAddr.String(), + Amount: amount, + } +} + +// Route implements the sdk.Msg interface. +func (msg MsgRedeemTokensForShares) Route() string { return RouterKey } + +// Type implements the sdk.Msg interface. +func (msg MsgRedeemTokensForShares) Type() string { return TypeMsgRedeemTokensForShares } + +// GetSigners implements the sdk.Msg interface. +func (msg MsgRedeemTokensForShares) GetSigners() []sdk.AccAddress { + delegator, err := sdk.AccAddressFromBech32(msg.DelegatorAddress) + if err != nil { + panic(err) + } + return []sdk.AccAddress{delegator} +} + +// ValidateBasic implements the sdk.Msg interface. +func (msg MsgRedeemTokensForShares) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.DelegatorAddress); err != nil { + return sdkerrors.ErrInvalidAddress.Wrapf("invalid delegator address: %s", err) + } + + if !msg.Amount.IsValid() || !msg.Amount.Amount.IsPositive() { + return errorsmod.Wrap( + sdkerrors.ErrInvalidRequest, + "invalid shares amount", + ) + } + + return nil +} diff --git a/x/stakeibc/types/lsm_tx.pb.go b/x/stakeibc/types/lsm_tx.pb.go new file mode 100644 index 00000000000..328d5e73fb8 --- /dev/null +++ b/x/stakeibc/types/lsm_tx.pb.go @@ -0,0 +1,707 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: gaia/liquid/v1beta1/lsm_tx.proto + +package types + +import ( + fmt "fmt" + types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// MsgRedeemTokensForShares redeems a tokenized share back into a native +// delegation +type MsgRedeemTokensForShares struct { + DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty" yaml:"delegator_address"` + Amount types.Coin `protobuf:"bytes,2,opt,name=amount,proto3" json:"amount"` +} + +func (m *MsgRedeemTokensForShares) Reset() { *m = MsgRedeemTokensForShares{} } +func (m *MsgRedeemTokensForShares) String() string { return proto.CompactTextString(m) } +func (*MsgRedeemTokensForShares) ProtoMessage() {} +func (*MsgRedeemTokensForShares) Descriptor() ([]byte, []int) { + return fileDescriptor_e651383000b9c3bc, []int{0} +} +func (m *MsgRedeemTokensForShares) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRedeemTokensForShares) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRedeemTokensForShares.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRedeemTokensForShares) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRedeemTokensForShares.Merge(m, src) +} +func (m *MsgRedeemTokensForShares) XXX_Size() int { + return m.Size() +} +func (m *MsgRedeemTokensForShares) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRedeemTokensForShares.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRedeemTokensForShares proto.InternalMessageInfo + +// MsgRedeemTokensForSharesResponse defines the Msg/MsgRedeemTokensForShares +// response type. +type MsgRedeemTokensForSharesResponse struct { + Amount types.Coin `protobuf:"bytes,1,opt,name=amount,proto3" json:"amount"` +} + +func (m *MsgRedeemTokensForSharesResponse) Reset() { *m = MsgRedeemTokensForSharesResponse{} } +func (m *MsgRedeemTokensForSharesResponse) String() string { return proto.CompactTextString(m) } +func (*MsgRedeemTokensForSharesResponse) ProtoMessage() {} +func (*MsgRedeemTokensForSharesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_e651383000b9c3bc, []int{1} +} +func (m *MsgRedeemTokensForSharesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRedeemTokensForSharesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRedeemTokensForSharesResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRedeemTokensForSharesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRedeemTokensForSharesResponse.Merge(m, src) +} +func (m *MsgRedeemTokensForSharesResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgRedeemTokensForSharesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRedeemTokensForSharesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRedeemTokensForSharesResponse proto.InternalMessageInfo + +func (m *MsgRedeemTokensForSharesResponse) GetAmount() types.Coin { + if m != nil { + return m.Amount + } + return types.Coin{} +} + +// MsgDisableTokenizeShares prevents LSM tokenization of shares for address +type MsgDisableTokenizeShares struct { + DelegatorAddress string `protobuf:"bytes,1,opt,name=delegator_address,json=delegatorAddress,proto3" json:"delegator_address,omitempty" yaml:"delegator_address"` +} + +func (m *MsgDisableTokenizeShares) Reset() { *m = MsgDisableTokenizeShares{} } +func (m *MsgDisableTokenizeShares) String() string { return proto.CompactTextString(m) } +func (*MsgDisableTokenizeShares) ProtoMessage() {} +func (*MsgDisableTokenizeShares) Descriptor() ([]byte, []int) { + return fileDescriptor_e651383000b9c3bc, []int{2} +} +func (m *MsgDisableTokenizeShares) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgDisableTokenizeShares) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgDisableTokenizeShares.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgDisableTokenizeShares) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgDisableTokenizeShares.Merge(m, src) +} +func (m *MsgDisableTokenizeShares) XXX_Size() int { + return m.Size() +} +func (m *MsgDisableTokenizeShares) XXX_DiscardUnknown() { + xxx_messageInfo_MsgDisableTokenizeShares.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgDisableTokenizeShares proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MsgRedeemTokensForShares)(nil), "gaia.liquid.v1beta1.MsgRedeemTokensForShares") + proto.RegisterType((*MsgRedeemTokensForSharesResponse)(nil), "gaia.liquid.v1beta1.MsgRedeemTokensForSharesResponse") + proto.RegisterType((*MsgDisableTokenizeShares)(nil), "gaia.liquid.v1beta1.MsgDisableTokenizeShares") +} + +func init() { proto.RegisterFile("gaia/liquid/v1beta1/lsm_tx.proto", fileDescriptor_e651383000b9c3bc) } + +var fileDescriptor_e651383000b9c3bc = []byte{ + // 351 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x91, 0xb1, 0x4e, 0xe3, 0x40, + 0x10, 0x86, 0xbd, 0xa7, 0x53, 0x74, 0xe7, 0x6b, 0x8e, 0x40, 0x61, 0x22, 0x64, 0x5b, 0xae, 0xd2, + 0xe0, 0x55, 0x42, 0x01, 0x4a, 0x47, 0x40, 0x48, 0x48, 0xa1, 0x71, 0xa8, 0xa0, 0x88, 0xd6, 0xf6, + 0xc8, 0x59, 0xc5, 0xf6, 0x04, 0xcf, 0x26, 0x4a, 0x78, 0x02, 0x4a, 0x1e, 0x21, 0x25, 0x8f, 0x92, + 0x32, 0x25, 0x55, 0x84, 0x92, 0x86, 0x9a, 0x27, 0x40, 0xb1, 0x43, 0x40, 0x42, 0x14, 0x48, 0x74, + 0xa3, 0x99, 0x4f, 0x33, 0xff, 0xff, 0x8f, 0x6e, 0x47, 0x42, 0x0a, 0x1e, 0xcb, 0x9b, 0x81, 0x0c, + 0xf9, 0xb0, 0xe6, 0x83, 0x12, 0x35, 0x1e, 0x53, 0xd2, 0x51, 0x23, 0xb7, 0x9f, 0xa1, 0xc2, 0xf2, + 0xf6, 0x8a, 0x70, 0x0b, 0xc2, 0x5d, 0x13, 0x95, 0x9d, 0x08, 0x23, 0xcc, 0xe7, 0x7c, 0x55, 0x15, + 0x68, 0xc5, 0x0c, 0x90, 0x12, 0x24, 0xee, 0x0b, 0x82, 0xcd, 0xb2, 0x00, 0x65, 0x5a, 0xcc, 0x9d, + 0x07, 0xa6, 0x1b, 0x17, 0x14, 0x79, 0x10, 0x02, 0x24, 0x97, 0xd8, 0x83, 0x94, 0xce, 0x30, 0x6b, + 0x77, 0x45, 0x06, 0x54, 0x3e, 0xd7, 0xb7, 0x42, 0x88, 0x21, 0x12, 0x0a, 0xb3, 0x8e, 0x08, 0xc3, + 0x0c, 0x88, 0x0c, 0x66, 0xb3, 0xea, 0xdf, 0xe6, 0xde, 0xcb, 0xdc, 0x32, 0xc6, 0x22, 0x89, 0x1b, + 0xce, 0x27, 0xc4, 0xf1, 0xfe, 0x6f, 0x7a, 0xc7, 0x45, 0xab, 0x7c, 0xa8, 0x97, 0x44, 0x82, 0x83, + 0x54, 0x19, 0xbf, 0x6c, 0x56, 0xfd, 0x57, 0xdf, 0x75, 0x0b, 0x61, 0xee, 0x4a, 0xd8, 0x9b, 0x07, + 0xf7, 0x04, 0x65, 0xda, 0xfc, 0x3d, 0x9d, 0x5b, 0x9a, 0xb7, 0xc6, 0x1b, 0x7f, 0xee, 0x26, 0x96, + 0xf6, 0x3c, 0xb1, 0x34, 0xe7, 0x5a, 0xb7, 0xbf, 0x52, 0xea, 0x01, 0xf5, 0x31, 0x25, 0xf8, 0x70, + 0x86, 0x7d, 0xeb, 0x8c, 0x83, 0x79, 0x0c, 0xa7, 0x92, 0x84, 0x1f, 0x43, 0xbe, 0x5d, 0xde, 0xc2, + 0x8f, 0xc7, 0xf0, 0xee, 0xa6, 0xd9, 0x9a, 0x2e, 0x4c, 0x36, 0x5b, 0x98, 0xec, 0x69, 0x61, 0xb2, + 0xfb, 0xa5, 0xa9, 0xcd, 0x96, 0xa6, 0xf6, 0xb8, 0x34, 0xb5, 0xab, 0x7a, 0x24, 0x55, 0x77, 0xe0, + 0xbb, 0x01, 0x26, 0xbc, 0xad, 0x32, 0x19, 0xc2, 0x7e, 0x4b, 0xf8, 0xc4, 0x29, 0xaf, 0xf9, 0xb0, + 0x7e, 0xc4, 0x47, 0x9c, 0x94, 0xe8, 0x81, 0xf4, 0x03, 0xae, 0xc6, 0x7d, 0x20, 0xbf, 0x94, 0x7f, + 0xf3, 0xe0, 0x35, 0x00, 0x00, 0xff, 0xff, 0x56, 0xec, 0x1a, 0x37, 0x3c, 0x02, 0x00, 0x00, +} + +func (m *MsgRedeemTokensForShares) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRedeemTokensForShares) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRedeemTokensForShares) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintLsmTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.DelegatorAddress) > 0 { + i -= len(m.DelegatorAddress) + copy(dAtA[i:], m.DelegatorAddress) + i = encodeVarintLsmTx(dAtA, i, uint64(len(m.DelegatorAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgRedeemTokensForSharesResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRedeemTokensForSharesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRedeemTokensForSharesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Amount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintLsmTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *MsgDisableTokenizeShares) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgDisableTokenizeShares) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgDisableTokenizeShares) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.DelegatorAddress) > 0 { + i -= len(m.DelegatorAddress) + copy(dAtA[i:], m.DelegatorAddress) + i = encodeVarintLsmTx(dAtA, i, uint64(len(m.DelegatorAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintLsmTx(dAtA []byte, offset int, v uint64) int { + offset -= sovLsmTx(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MsgRedeemTokensForShares) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.DelegatorAddress) + if l > 0 { + n += 1 + l + sovLsmTx(uint64(l)) + } + l = m.Amount.Size() + n += 1 + l + sovLsmTx(uint64(l)) + return n +} + +func (m *MsgRedeemTokensForSharesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Amount.Size() + n += 1 + l + sovLsmTx(uint64(l)) + return n +} + +func (m *MsgDisableTokenizeShares) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.DelegatorAddress) + if l > 0 { + n += 1 + l + sovLsmTx(uint64(l)) + } + return n +} + +func sovLsmTx(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozLsmTx(x uint64) (n int) { + return sovLsmTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MsgRedeemTokensForShares) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowLsmTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRedeemTokensForShares: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRedeemTokensForShares: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowLsmTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthLsmTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthLsmTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DelegatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowLsmTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthLsmTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthLsmTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipLsmTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthLsmTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRedeemTokensForSharesResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowLsmTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRedeemTokensForSharesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRedeemTokensForSharesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowLsmTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthLsmTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthLsmTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipLsmTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthLsmTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgDisableTokenizeShares) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowLsmTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgDisableTokenizeShares: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgDisableTokenizeShares: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DelegatorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowLsmTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthLsmTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthLsmTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DelegatorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipLsmTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthLsmTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipLsmTx(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowLsmTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowLsmTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowLsmTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthLsmTx + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupLsmTx + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthLsmTx + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthLsmTx = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowLsmTx = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupLsmTx = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/stakeibc/types/message_add_validators.go b/x/stakeibc/types/message_add_validators.go new file mode 100644 index 00000000000..ee5bbb39e03 --- /dev/null +++ b/x/stakeibc/types/message_add_validators.go @@ -0,0 +1,64 @@ +package types + +import ( + "strings" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + "github.com/osmosis-labs/osmosis/v27/utils" +) + +const TypeMsgAddValidators = "add_validators" + +var _ sdk.Msg = &MsgAddValidators{} + +func NewMsgAddValidators(creator string, hostZone string, validators []*Validator) *MsgAddValidators { + return &MsgAddValidators{ + Creator: creator, + HostZone: hostZone, + Validators: validators, + } +} + +func (msg *MsgAddValidators) Route() string { + return RouterKey +} + +func (msg *MsgAddValidators) Type() string { + return TypeMsgAddValidators +} + +func (msg *MsgAddValidators) GetSigners() []sdk.AccAddress { + creator, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + panic(err) + } + return []sdk.AccAddress{creator} +} + +func (msg *MsgAddValidators) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) + } + if err := utils.ValidateAdminAddress(msg.Creator); err != nil { + return err + } + + if len(msg.Validators) == 0 { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "at least one validator must be provided") + } + + for i, validator := range msg.Validators { + if len(strings.TrimSpace(validator.Name)) == 0 { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "validator name is required (index %d)", i) + } + if len(strings.TrimSpace(validator.Address)) == 0 { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "validator address is required (index %d)", i) + } + } + + return nil +} diff --git a/x/stakeibc/types/message_add_validators_test.go b/x/stakeibc/types/message_add_validators_test.go new file mode 100644 index 00000000000..471931ee4ef --- /dev/null +++ b/x/stakeibc/types/message_add_validators_test.go @@ -0,0 +1,93 @@ +package types_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func TestMsgAddValidators_ValidateBasic(t *testing.T) { + validNonAdminAddress, invalidAddress := apptesting.GenerateTestAddrs() + adminAddress, ok := apptesting.GetAdminAddress() + require.True(t, ok) + + valName1 := "val1" + valName2 := "val2" + valAddress1 := "cosmosvaloper1" + valAddress2 := "cosmosvaloper2" + + tests := []struct { + name string + msg types.MsgAddValidators + err string + }{ + { + name: "valid message", + msg: types.MsgAddValidators{ + Creator: adminAddress, + Validators: []*types.Validator{ + {Name: valName1, Address: valAddress1}, + {Name: valName2, Address: valAddress2}, + }, + }, + }, + { + name: "invalid address", + msg: types.MsgAddValidators{ + Creator: invalidAddress, + }, + err: "invalid address", + }, + { + name: "non-admin address", + msg: types.MsgAddValidators{ + Creator: validNonAdminAddress, + }, + err: "invalid address", + }, + { + name: "no validators", + msg: types.MsgAddValidators{ + Creator: adminAddress, + Validators: []*types.Validator{}, + }, + err: "at least one validator must be provided", + }, + { + name: "invalid validator name", + msg: types.MsgAddValidators{ + Creator: adminAddress, + Validators: []*types.Validator{ + {Name: valName1, Address: valAddress1}, + {Name: "", Address: valAddress2}, + }, + }, + err: "validator name is required (index 1)", + }, + { + name: "invalid validator address", + msg: types.MsgAddValidators{ + Creator: adminAddress, + Validators: []*types.Validator{ + {Name: valName1, Address: valAddress1}, + {Name: valName2, Address: ""}, + }, + }, + err: "validator address is required (index 1)", + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + actualError := tc.msg.ValidateBasic() + if tc.err == "" { + require.NoError(t, actualError) + } else { + require.ErrorContains(t, actualError, tc.err) + } + }) + } +} diff --git a/x/stakeibc/types/message_calibrate_delegation.go b/x/stakeibc/types/message_calibrate_delegation.go new file mode 100644 index 00000000000..ca3cd665a0d --- /dev/null +++ b/x/stakeibc/types/message_calibrate_delegation.go @@ -0,0 +1,56 @@ +package types + +import ( + "strings" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" +) + +const TypeMsgCalibrateDelegation = "calibrate_delegation" + +var _ sdk.Msg = &MsgCalibrateDelegation{} + +func NewMsgCalibrateDelegation(creator string, chainid string, valoper string) *MsgCalibrateDelegation { + return &MsgCalibrateDelegation{ + Creator: creator, + ChainId: chainid, + Valoper: valoper, + } +} + +func (msg *MsgCalibrateDelegation) Route() string { + return RouterKey +} + +func (msg *MsgCalibrateDelegation) Type() string { + return TypeMsgCalibrateDelegation +} + +func (msg *MsgCalibrateDelegation) GetSigners() []sdk.AccAddress { + creator, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + panic(err) + } + return []sdk.AccAddress{creator} +} + +func (msg *MsgCalibrateDelegation) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) + } + + if len(msg.ChainId) == 0 { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "chainid is required") + } + if len(msg.Valoper) == 0 { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "valoper is required") + } + if !strings.Contains(msg.Valoper, "valoper") { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "validator operator address must contrain 'valoper'") + } + + return nil +} diff --git a/x/stakeibc/types/message_change_validator_weight.go b/x/stakeibc/types/message_change_validator_weight.go new file mode 100644 index 00000000000..90fec282762 --- /dev/null +++ b/x/stakeibc/types/message_change_validator_weight.go @@ -0,0 +1,59 @@ +package types + +import ( + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + "github.com/osmosis-labs/osmosis/v27/utils" +) + +const TypeMsgChangeValidatorWeights = "change_validator_weight" + +var _ sdk.Msg = &MsgChangeValidatorWeights{} + +func NewMsgChangeValidatorWeights(creator, hostZone string, weights []*ValidatorWeight) *MsgChangeValidatorWeights { + return &MsgChangeValidatorWeights{ + Creator: creator, + HostZone: hostZone, + ValidatorWeights: weights, + } +} + +func (msg *MsgChangeValidatorWeights) Route() string { + return RouterKey +} + +func (msg *MsgChangeValidatorWeights) Type() string { + return TypeMsgChangeValidatorWeights +} + +func (msg *MsgChangeValidatorWeights) GetSigners() []sdk.AccAddress { + creator, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + panic(err) + } + return []sdk.AccAddress{creator} +} + +func (msg *MsgChangeValidatorWeights) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) + } + if err := utils.ValidateAdminAddress(msg.Creator); err != nil { + return err + } + if msg.HostZone == "" { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "host zone must be specified") + } + if len(msg.ValidatorWeights) < 1 { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "at least one validator must be specified") + } + for _, weightUpdate := range msg.ValidatorWeights { + if weightUpdate.Address == "" { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "validator address must be specified") + } + } + return nil +} diff --git a/x/stakeibc/types/message_change_validator_weight_test.go b/x/stakeibc/types/message_change_validator_weight_test.go new file mode 100644 index 00000000000..2886a67c63d --- /dev/null +++ b/x/stakeibc/types/message_change_validator_weight_test.go @@ -0,0 +1,99 @@ +package types_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func TestMsgChangeValidatorWeight_ValidateBasic(t *testing.T) { + validNonAdminAddress, invalidAddress := apptesting.GenerateTestAddrs() + adminAddress, ok := apptesting.GetAdminAddress() + require.True(t, ok) + + validChainId := "chain-0" + validAddress := "val1" + + tests := []struct { + name string + msg types.MsgChangeValidatorWeights + expectedError string + }{ + { + name: "valid message", + msg: types.MsgChangeValidatorWeights{ + Creator: adminAddress, + HostZone: validChainId, + ValidatorWeights: []*types.ValidatorWeight{ + {Address: validAddress, Weight: 1}, + }, + }, + }, + { + name: "invalid address", + msg: types.MsgChangeValidatorWeights{ + Creator: invalidAddress, + HostZone: validChainId, + ValidatorWeights: []*types.ValidatorWeight{ + {Address: validAddress, Weight: 1}, + }, + }, + expectedError: "invalid creator address", + }, + { + name: "non-admin address", + msg: types.MsgChangeValidatorWeights{ + Creator: validNonAdminAddress, + HostZone: validChainId, + ValidatorWeights: []*types.ValidatorWeight{ + {Address: validAddress, Weight: 1}, + }, + }, + expectedError: "is not an admin", + }, + { + name: "missing chain id", + msg: types.MsgChangeValidatorWeights{ + Creator: adminAddress, + HostZone: "", + ValidatorWeights: []*types.ValidatorWeight{ + {Address: validAddress, Weight: 1}, + }, + }, + expectedError: "host zone must be specified", + }, + { + name: "no validators", + msg: types.MsgChangeValidatorWeights{ + Creator: adminAddress, + HostZone: validChainId, + ValidatorWeights: []*types.ValidatorWeight{}, + }, + expectedError: "at least one validator must be specified", + }, + { + name: "missing validator address", + msg: types.MsgChangeValidatorWeights{ + Creator: adminAddress, + HostZone: validChainId, + ValidatorWeights: []*types.ValidatorWeight{ + {Address: "", Weight: 1}, + }, + }, + expectedError: "validator address must be specified", + }, + } + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + err := tc.msg.ValidateBasic() + if tc.expectedError != "" { + require.ErrorContains(t, err, tc.expectedError) + return + } + require.NoError(t, err) + }) + } +} diff --git a/x/stakeibc/types/message_claim_undelegated_tokens.go b/x/stakeibc/types/message_claim_undelegated_tokens.go new file mode 100644 index 00000000000..f2178591888 --- /dev/null +++ b/x/stakeibc/types/message_claim_undelegated_tokens.go @@ -0,0 +1,51 @@ +package types + +import ( + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" +) + +const TypeMsgClaimUndelegatedTokens = "claim_undelegated_tokens" + +var _ sdk.Msg = &MsgClaimUndelegatedTokens{} + +func NewMsgClaimUndelegatedTokens(creator string, hostZone string, epoch uint64, receiver string) *MsgClaimUndelegatedTokens { + return &MsgClaimUndelegatedTokens{ + Creator: creator, + HostZoneId: hostZone, + Epoch: epoch, + Receiver: receiver, + } +} + +func (msg *MsgClaimUndelegatedTokens) Route() string { + return RouterKey +} + +func (msg *MsgClaimUndelegatedTokens) Type() string { + return TypeMsgClaimUndelegatedTokens +} + +func (msg *MsgClaimUndelegatedTokens) GetSigners() []sdk.AccAddress { + creator, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + panic(err) + } + return []sdk.AccAddress{creator} +} + +func (msg *MsgClaimUndelegatedTokens) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) + } + // validate host denom is not empty + if msg.HostZoneId == "" { + return errorsmod.Wrapf(ErrRequiredFieldEmpty, "host zone id cannot be empty") + } + if !(msg.Epoch < (1<<63 - 1)) { + return errorsmod.Wrapf(ErrInvalidAmount, "epoch must be less than math.MaxInt64 %d", 1<<63-1) + } + return nil +} diff --git a/x/stakeibc/types/message_claim_undelegated_tokens_test.go b/x/stakeibc/types/message_claim_undelegated_tokens_test.go new file mode 100644 index 00000000000..7fe7ff159db --- /dev/null +++ b/x/stakeibc/types/message_claim_undelegated_tokens_test.go @@ -0,0 +1,69 @@ +package types_test + +import ( + "math" + "testing" + + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func TestMsgClaimUndelegatedTokens_ValidateBasic(t *testing.T) { + tests := []struct { + name string + msg types.MsgClaimUndelegatedTokens + err error + }{ + { + name: "success", + msg: types.MsgClaimUndelegatedTokens{ + Creator: apptesting.SampleStrideAddress(), + Receiver: apptesting.SampleHostAddress(), + HostZoneId: "GAIA", + Epoch: uint64(1), + }, + }, + { + name: "invalid address", + msg: types.MsgClaimUndelegatedTokens{ + Creator: "invalid_address", + Receiver: apptesting.SampleHostAddress(), + HostZoneId: "GAIA", + Epoch: uint64(1), + }, + err: sdkerrors.ErrInvalidAddress, + }, + { + name: "no host zone", + msg: types.MsgClaimUndelegatedTokens{ + Creator: apptesting.SampleStrideAddress(), + Receiver: apptesting.SampleHostAddress(), + Epoch: uint64(1), + }, + err: types.ErrRequiredFieldEmpty, + }, + { + name: "epoch max int", + msg: types.MsgClaimUndelegatedTokens{ + Creator: apptesting.SampleStrideAddress(), + Receiver: apptesting.SampleHostAddress(), + HostZoneId: "GAIA", + Epoch: math.MaxUint64, + }, + err: types.ErrInvalidAmount, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := tt.msg.ValidateBasic() + if tt.err != nil { + require.ErrorIs(t, err, tt.err) + return + } + require.NoError(t, err) + }) + } +} diff --git a/x/stakeibc/types/message_clear_balance.go b/x/stakeibc/types/message_clear_balance.go new file mode 100644 index 00000000000..9dbd3cdd471 --- /dev/null +++ b/x/stakeibc/types/message_clear_balance.go @@ -0,0 +1,63 @@ +package types + +import ( + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + + errorsmod "cosmossdk.io/errors" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + "github.com/osmosis-labs/osmosis/v27/utils" +) + +const TypeMsgClearBalance = "clear_balance" + +var _ sdk.Msg = &MsgClearBalance{} + +func NewMsgClearBalance(creator string, chainId string, amount sdkmath.Int, channelId string) *MsgClearBalance { + return &MsgClearBalance{ + Creator: creator, + ChainId: chainId, + Amount: amount, + Channel: channelId, + } +} + +func (msg *MsgClearBalance) Route() string { + return RouterKey +} + +func (msg *MsgClearBalance) Type() string { + return TypeMsgClearBalance +} + +func (msg *MsgClearBalance) GetSigners() []sdk.AccAddress { + creator, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + panic(err) + } + return []sdk.AccAddress{creator} +} + +func (msg *MsgClearBalance) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) + } + if err := utils.ValidateAdminAddress(msg.Creator); err != nil { + return err + } + // basic checks on host denom + if len(msg.ChainId) == 0 { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "chainid is required") + } + + if msg.Amount.LTE(sdkmath.ZeroInt()) { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "amount must be greater than 0") + } + if isValid := channeltypes.IsValidChannelID(msg.Channel); !isValid { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "channel is invalid") + } + return nil +} diff --git a/x/stakeibc/types/message_close_delegation_channel.go b/x/stakeibc/types/message_close_delegation_channel.go new file mode 100644 index 00000000000..e5f866f245a --- /dev/null +++ b/x/stakeibc/types/message_close_delegation_channel.go @@ -0,0 +1,52 @@ +package types + +import ( + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + "github.com/osmosis-labs/osmosis/v27/utils" +) + +const TypeMsgCloseDelegationChannel = "close_delegation_channel" + +var _ sdk.Msg = &MsgCloseDelegationChannel{} + +func NewMsgCloseDelegationChannel(creator, chainId string) *MsgCloseDelegationChannel { + return &MsgCloseDelegationChannel{ + Creator: creator, + ChainId: chainId, + } +} + +func (msg *MsgCloseDelegationChannel) Route() string { + return RouterKey +} + +func (msg *MsgCloseDelegationChannel) Type() string { + return TypeMsgCloseDelegationChannel +} + +func (msg *MsgCloseDelegationChannel) GetSigners() []sdk.AccAddress { + creator, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + panic(err) + } + return []sdk.AccAddress{creator} +} + +func (msg *MsgCloseDelegationChannel) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) + } + if err := utils.ValidateAdminAddress(msg.Creator); err != nil { + return err + } + + if msg.ChainId == "" { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "chain ID must be specified") + } + + return nil +} diff --git a/x/stakeibc/types/message_close_delegation_channel_test.go b/x/stakeibc/types/message_close_delegation_channel_test.go new file mode 100644 index 00000000000..4a98c187e6f --- /dev/null +++ b/x/stakeibc/types/message_close_delegation_channel_test.go @@ -0,0 +1,71 @@ +package types_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func TestMsgCloseDelegationChannel(t *testing.T) { + validNotAdminAddress, invalidAddress := apptesting.GenerateTestAddrs() + validAdminAddress, ok := apptesting.GetAdminAddress() + require.True(t, ok) + + validChainId := "chain-0" + + tests := []struct { + name string + msg types.MsgCloseDelegationChannel + err string + }{ + { + name: "successful message", + msg: types.MsgCloseDelegationChannel{ + Creator: validAdminAddress, + ChainId: validChainId, + }, + }, + { + name: "invalid creator address", + msg: types.MsgCloseDelegationChannel{ + Creator: invalidAddress, + ChainId: validChainId, + }, + err: "invalid creator address", + }, + { + name: "invalid admin address", + msg: types.MsgCloseDelegationChannel{ + Creator: validNotAdminAddress, + ChainId: validChainId, + }, + err: "is not an admin", + }, + { + name: "invalid chain-id", + msg: types.MsgCloseDelegationChannel{ + Creator: validAdminAddress, + ChainId: "", + }, + err: "chain ID must be specified", + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + if test.err == "" { + require.NoError(t, test.msg.ValidateBasic(), "test: %v", test.name) + + signers := test.msg.GetSigners() + require.Equal(t, len(signers), 1) + require.Equal(t, signers[0].String(), validAdminAddress) + require.Equal(t, test.msg.Type(), "close_delegation_channel", "type") + } else { + require.ErrorContains(t, test.msg.ValidateBasic(), test.err, "test: %v", test.name) + } + }) + } +} diff --git a/x/stakeibc/types/message_create_trade_route.go b/x/stakeibc/types/message_create_trade_route.go new file mode 100644 index 00000000000..52cad2d91cd --- /dev/null +++ b/x/stakeibc/types/message_create_trade_route.go @@ -0,0 +1,120 @@ +package types + +import ( + "errors" + "regexp" + "strings" + + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" +) + +const TypeMsgCreateTradeRoute = "create_trade_route" + +const ( + ConnectionIdRegex = `^connection-\d+$` + ChannelIdRegex = `^channel-\d+$` + IBCPrefix = "ibc/" +) + +var _ sdk.Msg = &MsgCreateTradeRoute{} + +func (msg *MsgCreateTradeRoute) Type() string { + return TypeMsgCreateTradeRoute +} + +func (msg *MsgCreateTradeRoute) Route() string { + return RouterKey +} + +func (msg *MsgCreateTradeRoute) GetSigners() []sdk.AccAddress { + addr, _ := sdk.AccAddressFromBech32(msg.Authority) + return []sdk.AccAddress{addr} +} + +func (msg *MsgCreateTradeRoute) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.Authority); err != nil { + return errorsmod.Wrap(err, "invalid authority address") + } + + if msg.HostChainId == "" { + return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "host chain ID cannot be empty") + } + + if err := ValidateConnectionId(msg.StrideToRewardConnectionId); err != nil { + return errorsmod.Wrap(err, "invalid stride to reward connection ID") + } + if err := ValidateConnectionId(msg.StrideToTradeConnectionId); err != nil { + return errorsmod.Wrap(err, "invalid stride to trade connection ID") + } + + if err := ValidateChannelId(msg.HostToRewardTransferChannelId); err != nil { + return errorsmod.Wrap(err, "invalid host to reward channel ID") + } + if err := ValidateChannelId(msg.RewardToTradeTransferChannelId); err != nil { + return errorsmod.Wrap(err, "invalid reward to trade channel ID") + } + if err := ValidateChannelId(msg.TradeToHostTransferChannelId); err != nil { + return errorsmod.Wrap(err, "invalid trade to host channel ID") + } + + if err := ValidateDenom(msg.RewardDenomOnHost, true); err != nil { + return errorsmod.Wrap(err, "invalid reward denom on host") + } + if err := ValidateDenom(msg.RewardDenomOnReward, false); err != nil { + return errorsmod.Wrap(err, "invalid reward denom on reward") + } + if err := ValidateDenom(msg.RewardDenomOnTrade, true); err != nil { + return errorsmod.Wrap(err, "invalid reward denom on trade") + } + if err := ValidateDenom(msg.HostDenomOnTrade, true); err != nil { + return errorsmod.Wrap(err, "invalid host denom on trade") + } + if err := ValidateDenom(msg.HostDenomOnHost, false); err != nil { + return errorsmod.Wrap(err, "invalid host denom on host") + } + + if msg.MinTransferAmount.IsNil() || msg.MinTransferAmount.LT(sdkmath.ZeroInt()) { + return errors.New("min transfer amount must be greater than or equal to zero") + } + + return nil +} + +// Helper function to validate a connection Id +func ValidateConnectionId(connectionId string) error { + matched, err := regexp.MatchString(ConnectionIdRegex, connectionId) + if err != nil { + return errorsmod.Wrapf(err, "unable to verify connnection-id (%s)", connectionId) + } + if !matched { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "invalid connection-id (%s), must be of the format 'connection-{N}'", connectionId) + } + return nil +} + +// Helper function to validate a channel Id +func ValidateChannelId(channelId string) error { + matched, err := regexp.MatchString(ChannelIdRegex, channelId) + if err != nil { + return errorsmod.Wrapf(err, "unable to verify channel-id (%s)", channelId) + } + if !matched { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "invalid channel-id (%s), must be of the format 'channel-{N}'", channelId) + } + return nil +} + +// Helper function to validate a denom +func ValidateDenom(denom string, ibc bool) error { + if denom == "" { + return errorsmod.Wrap(ErrInvalidDenom, "denom is empty") + } + if ibc && !strings.HasPrefix(denom, IBCPrefix) { + return errorsmod.Wrapf(ErrInvalidDenom, "denom (%s) should have ibc prefix", denom) + } + return nil +} diff --git a/x/stakeibc/types/message_create_trade_route_test.go b/x/stakeibc/types/message_create_trade_route_test.go new file mode 100644 index 00000000000..33a6a18690c --- /dev/null +++ b/x/stakeibc/types/message_create_trade_route_test.go @@ -0,0 +1,150 @@ +package types_test + +import ( + "testing" + + sdkmath "cosmossdk.io/math" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func TestMsgCreateTradeRoute(t *testing.T) { + apptesting.SetupConfig() + + authority := authtypes.NewModuleAddress(govtypes.ModuleName).String() + + validChainId := "chain-1" + validConnectionId1 := "connection-1" + validConnectionId2 := "connection-17" + validTransferChannelId1 := "channel-2" + validTransferChannelId2 := "channel-202" + validTransferChannelId3 := "channel-40" + + validNativeDenom := "denom" + validIBCDenom := "ibc/denom" + + validMinTransferAmount := sdkmath.NewInt(100) + + validMessage := types.MsgCreateTradeRoute{ + Authority: authority, + + HostChainId: validChainId, + StrideToRewardConnectionId: validConnectionId1, + StrideToTradeConnectionId: validConnectionId2, + + HostToRewardTransferChannelId: validTransferChannelId1, + RewardToTradeTransferChannelId: validTransferChannelId2, + TradeToHostTransferChannelId: validTransferChannelId3, + + RewardDenomOnHost: validIBCDenom, + RewardDenomOnReward: validNativeDenom, + RewardDenomOnTrade: validIBCDenom, + HostDenomOnTrade: validIBCDenom, + HostDenomOnHost: validNativeDenom, + + MinTransferAmount: validMinTransferAmount, + } + + // Validate successful message + require.NoError(t, validMessage.ValidateBasic(), "valid message") + require.Equal(t, validMessage.Route(), types.RouterKey) + require.Equal(t, validMessage.Type(), "create_trade_route") + + signers := validMessage.GetSigners() + require.Equal(t, len(signers), 1) + require.Equal(t, signers[0].String(), authority) + + // Remove authority - confirm invalid + invalidMessage := validMessage + invalidMessage.Authority = "" + require.ErrorContains(t, invalidMessage.ValidateBasic(), "invalid authority address") + + // Set invalid chain ID - confirm invalid + invalidMessage = validMessage + invalidMessage.HostChainId = "" + require.ErrorContains(t, invalidMessage.ValidateBasic(), "host chain ID cannot be empty") + + // Set invalid connection IDs - confirm invalid + invalidMessage = validMessage + invalidMessage.StrideToRewardConnectionId = "" + require.ErrorContains(t, invalidMessage.ValidateBasic(), "invalid stride to reward connection ID") + + invalidMessage = validMessage + invalidMessage.StrideToTradeConnectionId = "connection-X" + require.ErrorContains(t, invalidMessage.ValidateBasic(), "invalid stride to trade connection ID") + + // Set invalid channel IDs - confirm invalid + invalidMessage = validMessage + invalidMessage.HostToRewardTransferChannelId = "" + require.ErrorContains(t, invalidMessage.ValidateBasic(), "invalid host to reward channel ID") + + invalidMessage = validMessage + invalidMessage.RewardToTradeTransferChannelId = "channel-" + require.ErrorContains(t, invalidMessage.ValidateBasic(), "invalid reward to trade channel ID") + + invalidMessage = validMessage + invalidMessage.TradeToHostTransferChannelId = "channel-X" + require.ErrorContains(t, invalidMessage.ValidateBasic(), "invalid trade to host channel ID") + + // Set invalid denom's - confirm invalid + invalidMessage = validMessage + invalidMessage.RewardDenomOnHost = "not-ibc-denom" + require.ErrorContains(t, invalidMessage.ValidateBasic(), "invalid reward denom on host") + + invalidMessage = validMessage + invalidMessage.RewardDenomOnReward = "" + require.ErrorContains(t, invalidMessage.ValidateBasic(), "invalid reward denom on reward") + + invalidMessage = validMessage + invalidMessage.RewardDenomOnTrade = "not-ibc-denom" + require.ErrorContains(t, invalidMessage.ValidateBasic(), "invalid reward denom on trade") + + invalidMessage = validMessage + invalidMessage.HostDenomOnTrade = "not-ibc-denom" + require.ErrorContains(t, invalidMessage.ValidateBasic(), "invalid host denom on trade") + + invalidMessage = validMessage + invalidMessage.HostDenomOnHost = "" + require.ErrorContains(t, invalidMessage.ValidateBasic(), "invalid host denom on host") + + // Set invalid pool configurations - confirm invalid + invalidMessage = validMessage + invalidMessage.MinTransferAmount = sdkmath.Int{} + require.ErrorContains(t, invalidMessage.ValidateBasic(), "min transfer amount must be greater than or equal to zero") + + invalidMessage = validMessage + invalidMessage.MinTransferAmount = sdkmath.OneInt().Neg() + require.ErrorContains(t, invalidMessage.ValidateBasic(), "min transfer amount must be greater than or equal to zero") +} + +func TestValidateConnectionId(t *testing.T) { + require.NoError(t, types.ValidateConnectionId("connection-0")) + require.NoError(t, types.ValidateConnectionId("connection-10")) + require.NoError(t, types.ValidateConnectionId("connection-1203")) + + require.ErrorContains(t, types.ValidateConnectionId("connection-X"), "invalid connection-id (connection-X)") + require.ErrorContains(t, types.ValidateConnectionId(""), "invalid connection-id ()") +} + +func TestValidateChannelId(t *testing.T) { + require.NoError(t, types.ValidateChannelId("channel-0")) + require.NoError(t, types.ValidateChannelId("channel-10")) + require.NoError(t, types.ValidateChannelId("channel-1203")) + + require.ErrorContains(t, types.ValidateChannelId("channel-X"), "invalid channel-id (channel-X)") + require.ErrorContains(t, types.ValidateChannelId(""), "invalid channel-id ()") +} + +func TestValidateDenom(t *testing.T) { + require.NoError(t, types.ValidateDenom("denom", false)) + require.NoError(t, types.ValidateDenom("ibc/denom", false)) + require.NoError(t, types.ValidateDenom("ibc/denom", true)) + + require.ErrorContains(t, types.ValidateDenom("", false), "denom is empty") + require.ErrorContains(t, types.ValidateDenom("", true), "denom is empty") + require.ErrorContains(t, types.ValidateDenom("denom", true), "denom (denom) should have ibc prefix") +} diff --git a/x/stakeibc/types/message_delete_trade_route.go b/x/stakeibc/types/message_delete_trade_route.go new file mode 100644 index 00000000000..d8466f3080a --- /dev/null +++ b/x/stakeibc/types/message_delete_trade_route.go @@ -0,0 +1,40 @@ +package types + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + errorsmod "cosmossdk.io/errors" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" +) + +const TypeMsgDeleteTradeRoute = "delete_trade_route" + +var _ sdk.Msg = &MsgDeleteTradeRoute{} + +func (msg *MsgDeleteTradeRoute) Type() string { + return TypeMsgDeleteTradeRoute +} + +func (msg *MsgDeleteTradeRoute) Route() string { + return RouterKey +} + +func (msg *MsgDeleteTradeRoute) GetSigners() []sdk.AccAddress { + addr, _ := sdk.AccAddressFromBech32(msg.Authority) + return []sdk.AccAddress{addr} +} + +func (msg *MsgDeleteTradeRoute) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.Authority); err != nil { + return errorsmod.Wrap(err, "invalid authority address") + } + + if msg.HostDenom == "" { + return errorsmod.Wrapf(sdkerrors.ErrNotFound, "missing host denom") + } + if msg.RewardDenom == "" { + return errorsmod.Wrapf(sdkerrors.ErrNotFound, "missing reward denom") + } + + return nil +} diff --git a/x/stakeibc/types/message_delete_trade_route_test.go b/x/stakeibc/types/message_delete_trade_route_test.go new file mode 100644 index 00000000000..b3e659248ac --- /dev/null +++ b/x/stakeibc/types/message_delete_trade_route_test.go @@ -0,0 +1,78 @@ +package types_test + +import ( + "testing" + + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func TestMsgDeleteTradeRoute(t *testing.T) { + apptesting.SetupConfig() + + authority := authtypes.NewModuleAddress(govtypes.ModuleName).String() + + validDenom := "denom" + + tests := []struct { + name string + msg types.MsgDeleteTradeRoute + err string + }{ + { + name: "successful message", + msg: types.MsgDeleteTradeRoute{ + Authority: authority, + HostDenom: validDenom, + RewardDenom: validDenom, + }, + }, + { + name: "invalid authority message", + msg: types.MsgDeleteTradeRoute{ + Authority: "", + HostDenom: validDenom, + RewardDenom: validDenom, + }, + err: "invalid authority address", + }, + { + name: "invalid host denom", + msg: types.MsgDeleteTradeRoute{ + Authority: authority, + HostDenom: "", + RewardDenom: validDenom, + }, + err: "missing host denom", + }, + { + name: "invalid reward denom", + msg: types.MsgDeleteTradeRoute{ + Authority: authority, + HostDenom: validDenom, + RewardDenom: "", + }, + err: "missing reward denom", + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + if test.err == "" { + require.NoError(t, test.msg.ValidateBasic(), "test: %v", test.name) + require.Equal(t, test.msg.Route(), types.RouterKey) + require.Equal(t, test.msg.Type(), "delete_trade_route") + + signers := test.msg.GetSigners() + require.Equal(t, len(signers), 1) + require.Equal(t, signers[0].String(), authority) + } else { + require.ErrorContains(t, test.msg.ValidateBasic(), test.err, "test: %v", test.name) + } + }) + } +} diff --git a/x/stakeibc/types/message_delete_validator.go b/x/stakeibc/types/message_delete_validator.go new file mode 100644 index 00000000000..39b6a84f566 --- /dev/null +++ b/x/stakeibc/types/message_delete_validator.go @@ -0,0 +1,48 @@ +package types + +import ( + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + "github.com/osmosis-labs/osmosis/v27/utils" +) + +const TypeMsgDeleteValidator = "delete_validator" + +var _ sdk.Msg = &MsgDeleteValidator{} + +func NewMsgDeleteValidator(creator string, hostZone string, valAddr string) *MsgDeleteValidator { + return &MsgDeleteValidator{ + Creator: creator, + HostZone: hostZone, + ValAddr: valAddr, + } +} + +func (msg *MsgDeleteValidator) Route() string { + return RouterKey +} + +func (msg *MsgDeleteValidator) Type() string { + return TypeMsgDeleteValidator +} + +func (msg *MsgDeleteValidator) GetSigners() []sdk.AccAddress { + creator, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + panic(err) + } + return []sdk.AccAddress{creator} +} + +func (msg *MsgDeleteValidator) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) + } + if err := utils.ValidateAdminAddress(msg.Creator); err != nil { + return err + } + return nil +} diff --git a/x/stakeibc/types/message_delete_validator_test.go b/x/stakeibc/types/message_delete_validator_test.go new file mode 100644 index 00000000000..cee6cf004b7 --- /dev/null +++ b/x/stakeibc/types/message_delete_validator_test.go @@ -0,0 +1,43 @@ +package types_test + +import ( + "testing" + + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func TestMsgDeleteValidator_ValidateBasic(t *testing.T) { + tests := []struct { + name string + msg types.MsgDeleteValidator + err error + }{ + { + name: "invalid address", + msg: types.MsgDeleteValidator{ + Creator: "invalid_address", + }, + err: sdkerrors.ErrInvalidAddress, + }, { + name: "valid address but not whitelisted", + msg: types.MsgDeleteValidator{ + Creator: apptesting.SampleStrideAddress(), + }, + err: sdkerrors.ErrInvalidAddress, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := tt.msg.ValidateBasic() + if tt.err != nil { + require.ErrorIs(t, err, tt.err) + return + } + require.NoError(t, err) + }) + } +} diff --git a/x/stakeibc/types/message_liquid_stake.go b/x/stakeibc/types/message_liquid_stake.go new file mode 100644 index 00000000000..be8d14597f4 --- /dev/null +++ b/x/stakeibc/types/message_liquid_stake.go @@ -0,0 +1,57 @@ +package types + +import ( + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + + errorsmod "cosmossdk.io/errors" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" +) + +const TypeMsgLiquidStake = "liquid_stake" + +var _ sdk.Msg = &MsgLiquidStake{} + +func NewMsgLiquidStake(creator string, amount sdkmath.Int, hostDenom string) *MsgLiquidStake { + return &MsgLiquidStake{ + Creator: creator, + Amount: amount, + HostDenom: hostDenom, + } +} + +func (msg *MsgLiquidStake) Route() string { + return RouterKey +} + +func (msg *MsgLiquidStake) Type() string { + return TypeMsgLiquidStake +} + +func (msg *MsgLiquidStake) GetSigners() []sdk.AccAddress { + creator, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + panic(err) + } + return []sdk.AccAddress{creator} +} + +func (msg *MsgLiquidStake) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) + } + // validate amount is positive nonzero + if msg.Amount.LTE(sdkmath.ZeroInt()) { + return errorsmod.Wrapf(ErrInvalidAmount, "amount liquid staked must be positive and nonzero") + } + // validate host denom is not empty + if msg.HostDenom == "" { + return errorsmod.Wrapf(ErrRequiredFieldEmpty, "host denom cannot be empty") + } + // host denom must be a valid asset denom + if err := sdk.ValidateDenom(msg.HostDenom); err != nil { + return err + } + return nil +} diff --git a/x/stakeibc/types/message_liquid_stake_test.go b/x/stakeibc/types/message_liquid_stake_test.go new file mode 100644 index 00000000000..defa215cac3 --- /dev/null +++ b/x/stakeibc/types/message_liquid_stake_test.go @@ -0,0 +1,78 @@ +package types_test + +import ( + "testing" + + sdkmath "cosmossdk.io/math" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func TestMsgLiquidStake_ValidateBasic(t *testing.T) { + tests := []struct { + name string + msg types.MsgLiquidStake + err error + }{ + { + name: "invalid address", + msg: types.MsgLiquidStake{ + Creator: "invalid_address", + Amount: sdkmath.NewInt(1), + HostDenom: "uatom", + }, + err: sdkerrors.ErrInvalidAddress, + }, + { + name: "invalid address: wrong chain's bech32prefix", + msg: types.MsgLiquidStake{ + Creator: "osmo1yjq0n2ewufluenyyvj2y9sead9jfstpxnqv2xz", + Amount: sdkmath.NewInt(1), + HostDenom: "uatom", + }, + err: sdkerrors.ErrInvalidAddress, + }, + { + name: "valid inputs", + msg: types.MsgLiquidStake{ + Creator: apptesting.SampleStrideAddress(), + Amount: sdkmath.NewInt(1), + HostDenom: "uatom", + }, + }, + { + name: "zero amount", + msg: types.MsgLiquidStake{ + Creator: apptesting.SampleStrideAddress(), + Amount: sdkmath.ZeroInt(), + HostDenom: "uatom", + }, + err: types.ErrInvalidAmount, + }, + { + name: "empty host denom", + msg: types.MsgLiquidStake{ + Creator: apptesting.SampleStrideAddress(), + Amount: sdkmath.NewInt(1), + HostDenom: "", + }, + err: types.ErrRequiredFieldEmpty, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // check validatebasic() + err := tt.msg.ValidateBasic() + if tt.err != nil { + require.ErrorIs(t, err, tt.err) + return + } + require.NoError(t, err) + + // check msg_server + }) + } +} diff --git a/x/stakeibc/types/message_lsm_liquid_stake.go b/x/stakeibc/types/message_lsm_liquid_stake.go new file mode 100644 index 00000000000..eae0aca22e2 --- /dev/null +++ b/x/stakeibc/types/message_lsm_liquid_stake.go @@ -0,0 +1,58 @@ +package types + +import ( + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + + errorsmod "cosmossdk.io/errors" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" +) + +const TypeMsgLSMLiquidStake = "lsm_liquid_stake" + +var _ sdk.Msg = &MsgLSMLiquidStake{} + +func NewMsgLSMLiquidStake(creator string, amount sdkmath.Int, lsmTokenIbcDenom string) *MsgLSMLiquidStake { + return &MsgLSMLiquidStake{ + Creator: creator, + Amount: amount, + LsmTokenIbcDenom: lsmTokenIbcDenom, + } +} + +func (msg *MsgLSMLiquidStake) Route() string { + return RouterKey +} + +func (msg *MsgLSMLiquidStake) Type() string { + return TypeMsgLSMLiquidStake +} + +func (msg *MsgLSMLiquidStake) GetSigners() []sdk.AccAddress { + creator, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + panic(err) + } + return []sdk.AccAddress{creator} +} + +func (msg *MsgLSMLiquidStake) ValidateBasic() error { + // check valid creator address + _, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) + } + // ensure amount is a nonzero positive integer + if msg.Amount.LTE(sdkmath.ZeroInt()) { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "invalid amount (%v)", msg.Amount) + } + // validate host denom is not empty + if msg.LsmTokenIbcDenom == "" { + return errorsmod.Wrapf(ErrRequiredFieldEmpty, "LSM token denom cannot be empty") + } + // lsm token denom must be a valid asset denom matching regex + if err := sdk.ValidateDenom(msg.LsmTokenIbcDenom); err != nil { + return errorsmod.Wrapf(err, "invalid LSM token denom") + } + return nil +} diff --git a/x/stakeibc/types/message_lsm_liquid_stake_test.go b/x/stakeibc/types/message_lsm_liquid_stake_test.go new file mode 100644 index 00000000000..3d623a35ca2 --- /dev/null +++ b/x/stakeibc/types/message_lsm_liquid_stake_test.go @@ -0,0 +1,85 @@ +package types_test + +import ( + "testing" + + sdkmath "cosmossdk.io/math" + + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func TestMsgLSMLiquidStake(t *testing.T) { + apptesting.SetupConfig() + + validNotAdminAddress, invalidAddress := apptesting.GenerateTestAddrs() + + tests := []struct { + name string + msg types.MsgLSMLiquidStake + err string + }{ + { + name: "invalid address", + msg: types.MsgLSMLiquidStake{ + Creator: invalidAddress, + Amount: sdkmath.NewInt(1), + LsmTokenIbcDenom: "validator0032vj2y9sea9d9jfstpxn", + }, + err: "invalid creator address", + }, + { + name: "valid inputs", + msg: types.MsgLSMLiquidStake{ + Creator: validNotAdminAddress, + Amount: sdkmath.NewInt(1), + LsmTokenIbcDenom: "validator0032vj2y9sea9d9jfstpxn", + }, + }, + { + name: "zero amount", + msg: types.MsgLSMLiquidStake{ + Creator: validNotAdminAddress, + Amount: sdkmath.ZeroInt(), + LsmTokenIbcDenom: "validator0032vj2y9sea9d9jfstpxn", + }, + err: "invalid amount", + }, + { + name: "empty lsm token denom", + msg: types.MsgLSMLiquidStake{ + Creator: validNotAdminAddress, + Amount: sdkmath.NewInt(1), + LsmTokenIbcDenom: "", + }, + err: "LSM token denom cannot be empty", + }, + { + name: "bad format lsm token denom", + msg: types.MsgLSMLiquidStake{ + Creator: validNotAdminAddress, + Amount: sdkmath.NewInt(1), + LsmTokenIbcDenom: "38", + }, + err: "invalid LSM token denom", + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + if test.err == "" { + require.NoError(t, test.msg.ValidateBasic(), "test: %v", test.name) + require.Equal(t, test.msg.Route(), types.RouterKey) + require.Equal(t, test.msg.Type(), "lsm_liquid_stake") + + signers := test.msg.GetSigners() + require.Equal(t, len(signers), 1) + require.Equal(t, signers[0].String(), validNotAdminAddress) + } else { + require.ErrorContains(t, test.msg.ValidateBasic(), test.err, "test: %v", test.name) + } + }) + } +} diff --git a/x/stakeibc/types/message_rebalance_validators.go b/x/stakeibc/types/message_rebalance_validators.go new file mode 100644 index 00000000000..76083318547 --- /dev/null +++ b/x/stakeibc/types/message_rebalance_validators.go @@ -0,0 +1,56 @@ +package types + +import ( + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + "github.com/osmosis-labs/osmosis/v27/utils" +) + +const ( + MinNumRebalanceValidators = 1 + MaxNumRebalanceValidators = 1 +) + +const TypeMsgRebalanceValidators = "rebalance_validators" + +var _ sdk.Msg = &MsgRebalanceValidators{} + +func NewMsgRebalanceValidators(creator string, hostZone string, numValidators uint64) *MsgRebalanceValidators { + return &MsgRebalanceValidators{ + Creator: creator, + HostZone: hostZone, + NumRebalance: numValidators, + } +} + +func (msg *MsgRebalanceValidators) Route() string { + return RouterKey +} + +func (msg *MsgRebalanceValidators) Type() string { + return TypeMsgRebalanceValidators +} + +func (msg *MsgRebalanceValidators) GetSigners() []sdk.AccAddress { + creator, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + panic(err) + } + return []sdk.AccAddress{creator} +} + +func (msg *MsgRebalanceValidators) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) + } + if err := utils.ValidateAdminAddress(msg.Creator); err != nil { + return err + } + if (msg.NumRebalance < MinNumRebalanceValidators) || (msg.NumRebalance > MaxNumRebalanceValidators) { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "invalid number of validators to rebalance (%d)", msg.NumRebalance) + } + return nil +} diff --git a/x/stakeibc/types/message_rebalance_validators_test.go b/x/stakeibc/types/message_rebalance_validators_test.go new file mode 100644 index 00000000000..7b8d0fa657e --- /dev/null +++ b/x/stakeibc/types/message_rebalance_validators_test.go @@ -0,0 +1,85 @@ +package types_test + +import ( + "testing" + + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func TestMsgRebalanceValidators_ValidateBasic(t *testing.T) { + validNotAdminAddress, invalidAddress := apptesting.GenerateTestAddrs() + validAdminAddress, ok := apptesting.GetAdminAddress() + require.True(t, ok) + + tests := []struct { + name string + msg types.MsgRebalanceValidators + err error + }{ + { + name: "successful message min vals", + msg: types.MsgRebalanceValidators{ + Creator: validAdminAddress, + NumRebalance: 1, + }, + }, + { + name: "successful message mid vals", + msg: types.MsgRebalanceValidators{ + Creator: validAdminAddress, + NumRebalance: 1, + }, + }, + { + name: "successful message max vals", + msg: types.MsgRebalanceValidators{ + Creator: validAdminAddress, + NumRebalance: 1, + }, + }, + { + name: "too few validators", + msg: types.MsgRebalanceValidators{ + Creator: validAdminAddress, + NumRebalance: 0, + }, + err: sdkerrors.ErrInvalidRequest, + }, + { + name: "too many validators", + msg: types.MsgRebalanceValidators{ + Creator: validAdminAddress, + NumRebalance: 2, + }, + err: sdkerrors.ErrInvalidRequest, + }, + { + name: "invalid address", + msg: types.MsgRebalanceValidators{ + Creator: invalidAddress, + }, + err: sdkerrors.ErrInvalidAddress, + }, + { + name: "invalid admin address", + msg: types.MsgRebalanceValidators{ + Creator: validNotAdminAddress, + }, + err: sdkerrors.ErrInvalidAddress, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := tt.msg.ValidateBasic() + if tt.err != nil { + require.ErrorIs(t, err, tt.err) + return + } + require.NoError(t, err) + }) + } +} diff --git a/x/stakeibc/types/message_redeem_stake.go b/x/stakeibc/types/message_redeem_stake.go new file mode 100644 index 00000000000..574fe645f74 --- /dev/null +++ b/x/stakeibc/types/message_redeem_stake.go @@ -0,0 +1,60 @@ +package types + +import ( + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + + errorsmod "cosmossdk.io/errors" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" +) + +const TypeMsgRedeemStake = "redeem_stake" + +var _ sdk.Msg = &MsgRedeemStake{} + +func NewMsgRedeemStake(creator string, amount sdkmath.Int, hostZone string, receiver string) *MsgRedeemStake { + return &MsgRedeemStake{ + Creator: creator, + Amount: amount, + HostZone: hostZone, + Receiver: receiver, + } +} + +func (msg *MsgRedeemStake) Route() string { + return RouterKey +} + +func (msg *MsgRedeemStake) Type() string { + return TypeMsgRedeemStake +} + +func (msg *MsgRedeemStake) GetSigners() []sdk.AccAddress { + creator, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + panic(err) + } + return []sdk.AccAddress{creator} +} + +func (msg *MsgRedeemStake) ValidateBasic() error { + // check valid creator address + _, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) + } + // validate host zone is not empty + // we check validity in the RedeemState function + if msg.Receiver == "" { + return errorsmod.Wrapf(ErrRequiredFieldEmpty, "receiver cannot be empty") + } + // ensure amount is a nonzero positive integer + if msg.Amount.LTE(sdkmath.ZeroInt()) { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "invalid amount (%v)", msg.Amount) + } + // validate host zone is not empty + if msg.HostZone == "" { + return errorsmod.Wrapf(ErrRequiredFieldEmpty, "host zone cannot be empty") + } + return nil +} diff --git a/x/stakeibc/types/message_redeem_stake_test.go b/x/stakeibc/types/message_redeem_stake_test.go new file mode 100644 index 00000000000..d8e7dd3a99b --- /dev/null +++ b/x/stakeibc/types/message_redeem_stake_test.go @@ -0,0 +1,69 @@ +package types_test + +import ( + "testing" + + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + "github.com/stretchr/testify/require" + + sdkmath "cosmossdk.io/math" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func TestMsgRedeemStake_ValidateBasic(t *testing.T) { + tests := []struct { + name string + msg types.MsgRedeemStake + err error + }{ + { + name: "success", + msg: types.MsgRedeemStake{ + Creator: apptesting.SampleStrideAddress(), + HostZone: "GAIA", + Receiver: apptesting.SampleHostAddress(), + Amount: sdkmath.NewInt(1), + }, + }, + { + name: "invalid creator", + msg: types.MsgRedeemStake{ + Creator: "invalid_address", + HostZone: "GAIA", + Receiver: apptesting.SampleHostAddress(), + Amount: sdkmath.NewInt(1), + }, + err: sdkerrors.ErrInvalidAddress, + }, + { + name: "no host zone", + msg: types.MsgRedeemStake{ + Creator: apptesting.SampleStrideAddress(), + Receiver: apptesting.SampleHostAddress(), + Amount: sdkmath.NewInt(1), + }, + err: types.ErrRequiredFieldEmpty, + }, + { + name: "invalid receiver", + msg: types.MsgRedeemStake{ + Creator: apptesting.SampleStrideAddress(), + HostZone: "GAIA", + Amount: sdkmath.NewInt(1), + }, + err: types.ErrRequiredFieldEmpty, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := tt.msg.ValidateBasic() + if tt.err != nil { + require.ErrorIs(t, err, tt.err) + return + } + require.NoError(t, err) + }) + } +} diff --git a/x/stakeibc/types/message_register_host_zone.go b/x/stakeibc/types/message_register_host_zone.go new file mode 100644 index 00000000000..dbfd20cd742 --- /dev/null +++ b/x/stakeibc/types/message_register_host_zone.go @@ -0,0 +1,136 @@ +package types + +import ( + "strings" + + sdkmath "cosmossdk.io/math" + + sdk "github.com/cosmos/cosmos-sdk/types" + + errorsmod "cosmossdk.io/errors" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + + "github.com/osmosis-labs/osmosis/v27/utils" +) + +const TypeMsgRegisterHostZone = "register_host_zone" + +var _ sdk.Msg = &MsgRegisterHostZone{} + +func NewMsgRegisterHostZone( + creator string, + connectionId string, + bech32prefix string, + hostDenom string, + ibcDenom string, + transferChannelId string, + unbondingPeriod uint64, + minRedemptionRate sdkmath.LegacyDec, + maxRedemptionRate sdkmath.LegacyDec, + lsmLiquidStakeEnabled bool, + communityPoolTreasuryAddress string, + maxMessagePerIcaTx uint64, +) *MsgRegisterHostZone { + return &MsgRegisterHostZone{ + Creator: creator, + ConnectionId: connectionId, + Bech32Prefix: bech32prefix, + HostDenom: hostDenom, + IbcDenom: ibcDenom, + TransferChannelId: transferChannelId, + UnbondingPeriod: unbondingPeriod, + MinRedemptionRate: minRedemptionRate, + MaxRedemptionRate: maxRedemptionRate, + LsmLiquidStakeEnabled: lsmLiquidStakeEnabled, + CommunityPoolTreasuryAddress: communityPoolTreasuryAddress, + MaxMessagesPerIcaTx: maxMessagePerIcaTx, + } +} + +func (msg *MsgRegisterHostZone) Route() string { + return RouterKey +} + +func (msg *MsgRegisterHostZone) Type() string { + return TypeMsgRegisterHostZone +} + +func (msg *MsgRegisterHostZone) GetSigners() []sdk.AccAddress { + creator, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + panic(err) + } + return []sdk.AccAddress{creator} +} + +func (msg *MsgRegisterHostZone) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) + } + if err := utils.ValidateAdminAddress(msg.Creator); err != nil { + return err + } + // VALIDATE DENOMS + // host denom cannot be empty + if msg.HostDenom == "" { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "host denom cannot be empty") + } + // host denom must be a valid asset denom + if err := sdk.ValidateDenom(msg.HostDenom); err != nil { + return err + } + + // ibc denom cannot be empty and must begin with "ibc" + if msg.IbcDenom == "" { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "ibc denom cannot be empty") + } + if !strings.HasPrefix(msg.IbcDenom, "ibc") { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "ibc denom must begin with 'ibc'") + } + // ibc denom must be valid + err = ibctransfertypes.ValidateIBCDenom(msg.IbcDenom) + if err != nil { + return err + } + // bech32 prefix must be non-empty (we validate it fully in msg_server) + if strings.TrimSpace(msg.Bech32Prefix) == "" { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "bech32 prefix must be non-empty") + } + // connection id cannot be empty and must begin with "connection" + if msg.ConnectionId == "" { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "connection id cannot be empty") + } + if !strings.HasPrefix(msg.ConnectionId, "connection") { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "connection id must begin with 'connection'") + } + // transfer channel id cannot be empty + if msg.TransferChannelId == "" { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "transfer channel id cannot be empty") + } + // transfer channel id must begin with "channel" + if !strings.HasPrefix(msg.TransferChannelId, "channel") { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "transfer channel id must begin with 'channel'") + } + // unbonding frequency must be positive nonzero + if msg.UnbondingPeriod < 1 { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "unbonding frequency must be greater than zero") + } + // min/max redemption rate check + if !msg.MinRedemptionRate.IsNil() && msg.MinRedemptionRate.IsNegative() { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "min redemption rate should not be negative") + } + if !msg.MaxRedemptionRate.IsNil() && msg.MaxRedemptionRate.IsNegative() { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "max redemption rate should not be negative") + } + if !msg.MinRedemptionRate.IsNil() && + !msg.MaxRedemptionRate.IsNil() && + !msg.MinRedemptionRate.IsZero() && + !msg.MaxRedemptionRate.IsZero() && + msg.MinRedemptionRate.GTE(msg.MaxRedemptionRate) { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "min redemption rate should be lower than max redemption rate") + } + + return nil +} diff --git a/x/stakeibc/types/message_restore_interchain_account.go b/x/stakeibc/types/message_restore_interchain_account.go new file mode 100644 index 00000000000..f9f9d7a1630 --- /dev/null +++ b/x/stakeibc/types/message_restore_interchain_account.go @@ -0,0 +1,58 @@ +package types + +import ( + "strings" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" +) + +const TypeMsgRestoreInterchainAccount = "restore_interchain_account" + +var _ sdk.Msg = &MsgRestoreInterchainAccount{} + +func NewMsgRestoreInterchainAccount(creator, chainId, connectionId, owner string) *MsgRestoreInterchainAccount { + return &MsgRestoreInterchainAccount{ + Creator: creator, + ChainId: chainId, + ConnectionId: connectionId, + AccountOwner: owner, + } +} + +func (msg *MsgRestoreInterchainAccount) Route() string { + return RouterKey +} + +func (msg *MsgRestoreInterchainAccount) Type() string { + return TypeMsgRestoreInterchainAccount +} + +func (msg *MsgRestoreInterchainAccount) GetSigners() []sdk.AccAddress { + creator, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + panic(err) + } + return []sdk.AccAddress{creator} +} + +func (msg *MsgRestoreInterchainAccount) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) + } + if msg.ChainId == "" { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "chain ID must be specified") + } + if !strings.HasPrefix(msg.ConnectionId, "connection-") { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "connection ID must be specified") + } + if msg.AccountOwner == "" { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "ICA account owner must be specified") + } + if !strings.HasPrefix(msg.AccountOwner, msg.ChainId) { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "ICA account owner does not match chain ID") + } + return nil +} diff --git a/x/stakeibc/types/message_restore_interchain_account_test.go b/x/stakeibc/types/message_restore_interchain_account_test.go new file mode 100644 index 00000000000..ff6694f571a --- /dev/null +++ b/x/stakeibc/types/message_restore_interchain_account_test.go @@ -0,0 +1,99 @@ +package types_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func TestMsgRestoreInterchainAccount_ValidateBasic(t *testing.T) { + validChainId := "chain-0" + validConnectionId := "connection-0" + validHostZoneOwner := "chain-0.DELEGATION" + validTradeRouteOwner := "chain-0.reward.host.CONVERTER_TRADE" + + tests := []struct { + name string + msg types.MsgRestoreInterchainAccount + err string + }{ + { + name: "valid host zone message", + msg: types.MsgRestoreInterchainAccount{ + Creator: apptesting.SampleStrideAddress(), + ChainId: validChainId, + ConnectionId: validConnectionId, + AccountOwner: validHostZoneOwner, + }, + }, + { + name: "valid trade route message", + msg: types.MsgRestoreInterchainAccount{ + Creator: apptesting.SampleStrideAddress(), + ChainId: validChainId, + ConnectionId: validConnectionId, + AccountOwner: validTradeRouteOwner, + }, + }, + { + name: "missing chain id", + msg: types.MsgRestoreInterchainAccount{ + Creator: apptesting.SampleStrideAddress(), + ChainId: "", + ConnectionId: validConnectionId, + AccountOwner: validHostZoneOwner, + }, + err: "chain ID must be specified", + }, + { + name: "missing connection id", + msg: types.MsgRestoreInterchainAccount{ + Creator: apptesting.SampleStrideAddress(), + ChainId: validChainId, + ConnectionId: "con-0", + AccountOwner: validHostZoneOwner, + }, + err: "connection ID must be specified", + }, + { + name: "missing account owner", + msg: types.MsgRestoreInterchainAccount{ + Creator: apptesting.SampleStrideAddress(), + ChainId: validChainId, + ConnectionId: validConnectionId, + AccountOwner: "", + }, + err: "ICA account owner must be specified", + }, + { + name: "chain id does not match owner", + msg: types.MsgRestoreInterchainAccount{ + Creator: apptesting.SampleStrideAddress(), + ChainId: validChainId, + ConnectionId: validConnectionId, + AccountOwner: "chain-1.reward.host.CONVERTER_TRADE", + }, + err: "ICA account owner does not match chain ID", + }, + { + name: "invalid address", + msg: types.MsgRestoreInterchainAccount{ + Creator: "invalid_address", + }, + err: "invalid address", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := tt.msg.ValidateBasic() + if tt.err != "" { + require.ErrorContains(t, err, tt.err) + return + } + require.NoError(t, err) + }) + } +} diff --git a/x/stakeibc/types/message_resume_host_zone.go b/x/stakeibc/types/message_resume_host_zone.go new file mode 100644 index 00000000000..c2ad542c2a6 --- /dev/null +++ b/x/stakeibc/types/message_resume_host_zone.go @@ -0,0 +1,47 @@ +package types + +import ( + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + "github.com/osmosis-labs/osmosis/v27/utils" +) + +const TypeMsgResumeHostZone = "resume_host_zone" + +var _ sdk.Msg = &MsgResumeHostZone{} + +func NewMsgResumeHostZone(creator string, chainId string) *MsgResumeHostZone { + return &MsgResumeHostZone{ + Creator: creator, + ChainId: chainId, + } +} + +func (msg *MsgResumeHostZone) Route() string { + return RouterKey +} + +func (msg *MsgResumeHostZone) Type() string { + return TypeMsgResumeHostZone +} + +func (msg *MsgResumeHostZone) GetSigners() []sdk.AccAddress { + creator, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + panic(err) + } + return []sdk.AccAddress{creator} +} + +func (msg *MsgResumeHostZone) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) + } + if err := utils.ValidateAdminAddress(msg.Creator); err != nil { + return err + } + return nil +} diff --git a/x/stakeibc/types/message_set_community_pool_rebate.go b/x/stakeibc/types/message_set_community_pool_rebate.go new file mode 100644 index 00000000000..af520917338 --- /dev/null +++ b/x/stakeibc/types/message_set_community_pool_rebate.go @@ -0,0 +1,68 @@ +package types + +import ( + "errors" + + sdk "github.com/cosmos/cosmos-sdk/types" + + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + "github.com/osmosis-labs/osmosis/v27/utils" +) + +const TypeMsgSetCommunityPoolRebate = "set_community_pool_rebate" + +var _ sdk.Msg = &MsgSetCommunityPoolRebate{} + +func NewMsgSetCommunityPoolRebate( + creator string, + chainId string, + rebateRate sdkmath.LegacyDec, + liquidStakedStTokenAmount sdkmath.Int, +) *MsgSetCommunityPoolRebate { + return &MsgSetCommunityPoolRebate{ + Creator: creator, + ChainId: chainId, + RebateRate: rebateRate, + LiquidStakedStTokenAmount: liquidStakedStTokenAmount, + } +} + +func (msg *MsgSetCommunityPoolRebate) Route() string { + return RouterKey +} + +func (msg *MsgSetCommunityPoolRebate) Type() string { + return TypeMsgSetCommunityPoolRebate +} + +func (msg *MsgSetCommunityPoolRebate) GetSigners() []sdk.AccAddress { + creator, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + panic(err) + } + return []sdk.AccAddress{creator} +} + +func (msg *MsgSetCommunityPoolRebate) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) + } + if err := utils.ValidateAdminAddress(msg.Creator); err != nil { + return err + } + if msg.ChainId == "" { + return errors.New("chain ID must be specified") + } + if msg.RebateRate.IsNil() || msg.RebateRate.LT(sdkmath.LegacyZeroDec()) || msg.RebateRate.GT(sdkmath.LegacyOneDec()) { + return errors.New("invalid rebate rate, must be a decimal between 0 and 1 (inclusive)") + } + if msg.LiquidStakedStTokenAmount.IsNil() || msg.LiquidStakedStTokenAmount.LT(sdkmath.ZeroInt()) { + return errors.New("invalid liquid stake amount, must be greater than or equal to zero") + } + + return nil +} diff --git a/x/stakeibc/types/message_set_community_pool_rebate_test.go b/x/stakeibc/types/message_set_community_pool_rebate_test.go new file mode 100644 index 00000000000..9806cf045a9 --- /dev/null +++ b/x/stakeibc/types/message_set_community_pool_rebate_test.go @@ -0,0 +1,161 @@ +package types_test + +import ( + "testing" + + sdkmath "cosmossdk.io/math" + + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func TestMsgSetCommunityPoolRebate(t *testing.T) { + apptesting.SetupConfig() + + validNotAdminAddress, invalidAddress := apptesting.GenerateTestAddrs() + validAdminAddress, ok := apptesting.GetAdminAddress() + require.True(t, ok) + + validChainId := "chain-0" + validRebateRate := sdkmath.LegacyMustNewDecFromStr("0.1") + validLiquidStakedAmount := sdkmath.NewInt(1000) + + tests := []struct { + name string + msg types.MsgSetCommunityPoolRebate + err string + }{ + { + name: "valid message", + msg: types.MsgSetCommunityPoolRebate{ + Creator: validAdminAddress, + ChainId: validChainId, + RebateRate: validRebateRate, + LiquidStakedStTokenAmount: validLiquidStakedAmount, + }, + }, + { + name: "invalid address", + msg: types.MsgSetCommunityPoolRebate{ + Creator: invalidAddress, + ChainId: validChainId, + RebateRate: validRebateRate, + LiquidStakedStTokenAmount: validLiquidStakedAmount, + }, + err: "invalid creator address", + }, + { + name: "not admin address", + msg: types.MsgSetCommunityPoolRebate{ + Creator: validNotAdminAddress, + ChainId: validChainId, + RebateRate: validRebateRate, + LiquidStakedStTokenAmount: validLiquidStakedAmount, + }, + err: "not an admin", + }, + { + name: "invalid chain ID", + msg: types.MsgSetCommunityPoolRebate{ + Creator: validAdminAddress, + ChainId: "", + RebateRate: validRebateRate, + LiquidStakedStTokenAmount: validLiquidStakedAmount, + }, + err: "chain ID must be specified", + }, + { + name: "invalid rebate rate - nil", + msg: types.MsgSetCommunityPoolRebate{ + Creator: validAdminAddress, + ChainId: validChainId, + LiquidStakedStTokenAmount: validLiquidStakedAmount, + }, + err: "rebate rate, must be a decimal between 0 and 1 (inclusive)", + }, + { + name: "invalid rebate rate - less than 0", + msg: types.MsgSetCommunityPoolRebate{ + Creator: validAdminAddress, + ChainId: validChainId, + RebateRate: sdkmath.LegacyMustNewDecFromStr("0.5").Neg(), + LiquidStakedStTokenAmount: validLiquidStakedAmount, + }, + err: "rebate rate, must be a decimal between 0 and 1 (inclusive)", + }, + { + name: "valid rebate rate - one", + msg: types.MsgSetCommunityPoolRebate{ + Creator: validAdminAddress, + ChainId: validChainId, + RebateRate: sdkmath.LegacyOneDec(), + LiquidStakedStTokenAmount: validLiquidStakedAmount, + }, + }, + { + name: "invalid rebate rate - greater than one", + msg: types.MsgSetCommunityPoolRebate{ + Creator: validAdminAddress, + ChainId: validChainId, + RebateRate: sdkmath.LegacyMustNewDecFromStr("1.1"), + LiquidStakedStTokenAmount: validLiquidStakedAmount, + }, + err: "rebate rate, must be a decimal between 0 and 1 (inclusive)", + }, + { + name: "valid zero rebate", + msg: types.MsgSetCommunityPoolRebate{ + Creator: validAdminAddress, + ChainId: validChainId, + RebateRate: sdkmath.LegacyZeroDec(), + LiquidStakedStTokenAmount: validLiquidStakedAmount, + }, + }, + { + name: "invalid liquid stake amount - nil", + msg: types.MsgSetCommunityPoolRebate{ + Creator: validAdminAddress, + ChainId: validChainId, + RebateRate: validRebateRate, + }, + err: "invalid liquid stake amount, must be greater than or equal to zero", + }, + { + name: "invalid liquid stake amount - less than 0", + msg: types.MsgSetCommunityPoolRebate{ + Creator: validAdminAddress, + ChainId: validChainId, + RebateRate: validRebateRate, + LiquidStakedStTokenAmount: sdkmath.NewInt(1).Neg(), + }, + err: "invalid liquid stake amount, must be greater than or equal to zero", + }, + { + name: "valid liquid stake amount - zero", + msg: types.MsgSetCommunityPoolRebate{ + Creator: validAdminAddress, + ChainId: validChainId, + RebateRate: validRebateRate, + LiquidStakedStTokenAmount: sdkmath.ZeroInt(), + }, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + if test.err == "" { + require.NoError(t, test.msg.ValidateBasic(), "test: %v", test.name) + require.Equal(t, test.msg.Route(), types.RouterKey) + require.Equal(t, test.msg.Type(), "set_community_pool_rebate") + + signers := test.msg.GetSigners() + require.Equal(t, len(signers), 1) + require.Equal(t, signers[0].String(), validAdminAddress) + } else { + require.ErrorContains(t, test.msg.ValidateBasic(), test.err, "test: %v", test.name) + } + }) + } +} diff --git a/x/stakeibc/types/message_toggle_trade_controller.go b/x/stakeibc/types/message_toggle_trade_controller.go new file mode 100644 index 00000000000..4b25ce71b0d --- /dev/null +++ b/x/stakeibc/types/message_toggle_trade_controller.go @@ -0,0 +1,63 @@ +package types + +import ( + "errors" + + sdk "github.com/cosmos/cosmos-sdk/types" + + errorsmod "cosmossdk.io/errors" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + "github.com/osmosis-labs/osmosis/v27/utils" +) + +const TypeMsgToggleTradeController = "toggle_trade_controller" + +var _ sdk.Msg = &MsgToggleTradeController{} + +func NewMsgToggleTradeController(creator, chainId string, permissionChange AuthzPermissionChange, address string, legacy bool) *MsgToggleTradeController { + return &MsgToggleTradeController{ + Creator: creator, + ChainId: chainId, + PermissionChange: permissionChange, + Address: address, + Legacy: legacy, + } +} + +func (msg *MsgToggleTradeController) Route() string { + return RouterKey +} + +func (msg *MsgToggleTradeController) Type() string { + return TypeMsgToggleTradeController +} + +func (msg *MsgToggleTradeController) GetSigners() []sdk.AccAddress { + creator, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + panic(err) + } + return []sdk.AccAddress{creator} +} + +func (msg *MsgToggleTradeController) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) + } + if err := utils.ValidateAdminAddress(msg.Creator); err != nil { + return err + } + if msg.ChainId == "" { + return errors.New("chain ID must be specified") + } + if msg.Address == "" { + return errors.New("trade controller address must be specified") + } + if _, ok := AuthzPermissionChange_name[int32(msg.PermissionChange)]; !ok { + return errors.New("invalid permission change enum value") + } + + return nil +} diff --git a/x/stakeibc/types/message_toggle_trade_controller_test.go b/x/stakeibc/types/message_toggle_trade_controller_test.go new file mode 100644 index 00000000000..ec7f8974066 --- /dev/null +++ b/x/stakeibc/types/message_toggle_trade_controller_test.go @@ -0,0 +1,104 @@ +package types_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func TestMsgToggleTradeController(t *testing.T) { + apptesting.SetupConfig() + + validNotAdminAddress, invalidAddress := apptesting.GenerateTestAddrs() + validAdminAddress, ok := apptesting.GetAdminAddress() + require.True(t, ok) + + validAddress := "cosmosXXX" + validChainId := "chain-0" + validPermissionChange := types.AuthzPermissionChange_GRANT + + tests := []struct { + name string + msg types.MsgToggleTradeController + err string + }{ + { + name: "valid message", + msg: types.MsgToggleTradeController{ + Creator: validAdminAddress, + ChainId: validChainId, + PermissionChange: validPermissionChange, + Address: validAddress, + }, + }, + { + name: "invalid address", + msg: types.MsgToggleTradeController{ + Creator: invalidAddress, + ChainId: validChainId, + PermissionChange: validPermissionChange, + Address: validAddress, + }, + err: "invalid creator address", + }, + { + name: "not admin address", + msg: types.MsgToggleTradeController{ + Creator: validNotAdminAddress, + ChainId: validChainId, + PermissionChange: validPermissionChange, + Address: validAddress, + }, + err: "not an admin", + }, + { + name: "invalid address", + msg: types.MsgToggleTradeController{ + Creator: validAdminAddress, + ChainId: validChainId, + PermissionChange: validPermissionChange, + Address: "", + }, + err: "address must be specified", + }, + { + name: "invalid chain ID", + msg: types.MsgToggleTradeController{ + Creator: validAdminAddress, + ChainId: "", + PermissionChange: validPermissionChange, + Address: validAddress, + }, + err: "chain ID must be specified", + }, + { + name: "invalid permission change", + msg: types.MsgToggleTradeController{ + Creator: validAdminAddress, + ChainId: validChainId, + PermissionChange: 100, + Address: validAddress, + }, + err: "invalid permission change enum value", + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + if test.err == "" { + require.NoError(t, test.msg.ValidateBasic(), "test: %v", test.name) + require.Equal(t, test.msg.Route(), types.RouterKey) + require.Equal(t, test.msg.Type(), "toggle_trade_controller") + + signers := test.msg.GetSigners() + require.Equal(t, len(signers), 1) + require.Equal(t, signers[0].String(), validAdminAddress) + } else { + require.ErrorContains(t, test.msg.ValidateBasic(), test.err, "test: %v", test.name) + } + }) + } +} diff --git a/x/stakeibc/types/message_update_delegation.go b/x/stakeibc/types/message_update_delegation.go new file mode 100644 index 00000000000..d8d5d8addac --- /dev/null +++ b/x/stakeibc/types/message_update_delegation.go @@ -0,0 +1,58 @@ +package types + +import ( + "strings" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" +) + +const TypeMsgUpdateValidatorSharesExchRate = "update_validator_shares_exch_rate" + +var _ sdk.Msg = &MsgUpdateValidatorSharesExchRate{} + +func NewMsgUpdateValidatorSharesExchRate(creator string, chainid string, valoper string) *MsgUpdateValidatorSharesExchRate { + return &MsgUpdateValidatorSharesExchRate{ + Creator: creator, + ChainId: chainid, + Valoper: valoper, + } +} + +func (msg *MsgUpdateValidatorSharesExchRate) Route() string { + return RouterKey +} + +func (msg *MsgUpdateValidatorSharesExchRate) Type() string { + return TypeMsgUpdateValidatorSharesExchRate +} + +func (msg *MsgUpdateValidatorSharesExchRate) GetSigners() []sdk.AccAddress { + creator, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + panic(err) + } + return []sdk.AccAddress{creator} +} + +func (msg *MsgUpdateValidatorSharesExchRate) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) + } + + // basic checks on host denom + if len(msg.ChainId) == 0 { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "chainid is required") + } + // basic checks on host zone + if len(msg.Valoper) == 0 { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "valoper is required") + } + if !strings.Contains(msg.Valoper, "valoper") { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "validator operator address must contrain 'valoper'") + } + + return nil +} diff --git a/x/stakeibc/types/message_update_host_zone_params.go b/x/stakeibc/types/message_update_host_zone_params.go new file mode 100644 index 00000000000..36f9400dfe9 --- /dev/null +++ b/x/stakeibc/types/message_update_host_zone_params.go @@ -0,0 +1,36 @@ +package types + +import ( + "errors" + + sdk "github.com/cosmos/cosmos-sdk/types" + + errorsmod "cosmossdk.io/errors" +) + +const TypeMsgUpdateHostZoneParams = "update_host_zone_params" + +var _ sdk.Msg = &MsgUpdateHostZoneParams{} + +func (msg *MsgUpdateHostZoneParams) Type() string { + return TypeMsgUpdateHostZoneParams +} + +func (msg *MsgUpdateHostZoneParams) Route() string { + return RouterKey +} + +func (msg *MsgUpdateHostZoneParams) GetSigners() []sdk.AccAddress { + addr, _ := sdk.AccAddressFromBech32(msg.Authority) + return []sdk.AccAddress{addr} +} + +func (msg *MsgUpdateHostZoneParams) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.Authority); err != nil { + return errorsmod.Wrap(err, "invalid authority address") + } + if msg.ChainId == "" { + return errors.New("chain ID must be specified") + } + return nil +} diff --git a/x/stakeibc/types/message_update_host_zone_params_test.go b/x/stakeibc/types/message_update_host_zone_params_test.go new file mode 100644 index 00000000000..ffe710918ca --- /dev/null +++ b/x/stakeibc/types/message_update_host_zone_params_test.go @@ -0,0 +1,68 @@ +package types_test + +import ( + "testing" + + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func TestMsgUpdateHostZoneParams(t *testing.T) { + apptesting.SetupConfig() + + authority := authtypes.NewModuleAddress(govtypes.ModuleName).String() + validChainId := "chain-0" + + tests := []struct { + name string + msg types.MsgUpdateHostZoneParams + err string + }{ + { + name: "successful message", + msg: types.MsgUpdateHostZoneParams{ + Authority: authority, + ChainId: validChainId, + MaxMessagesPerIcaTx: 30, + }, + }, + { + name: "invalid authority", + msg: types.MsgUpdateHostZoneParams{ + Authority: "", + ChainId: validChainId, + MaxMessagesPerIcaTx: 30, + }, + err: "invalid authority address", + }, + { + name: "missing chain ID", + msg: types.MsgUpdateHostZoneParams{ + Authority: authority, + ChainId: "", + MaxMessagesPerIcaTx: 30, + }, + err: "chain ID must be specified", + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + if test.err == "" { + require.NoError(t, test.msg.ValidateBasic(), "test: %v", test.name) + require.Equal(t, test.msg.Route(), types.RouterKey) + require.Equal(t, test.msg.Type(), "update_host_zone_params") + + signers := test.msg.GetSigners() + require.Equal(t, len(signers), 1) + require.Equal(t, signers[0].String(), authority) + } else { + require.ErrorContains(t, test.msg.ValidateBasic(), test.err, "test: %v", test.name) + } + }) + } +} diff --git a/x/stakeibc/types/message_update_inner_redemption_rate_bounds.go b/x/stakeibc/types/message_update_inner_redemption_rate_bounds.go new file mode 100644 index 00000000000..8b9fb149d25 --- /dev/null +++ b/x/stakeibc/types/message_update_inner_redemption_rate_bounds.go @@ -0,0 +1,54 @@ +package types + +import ( + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + "github.com/osmosis-labs/osmosis/v27/utils" +) + +const TypeMsgUpdateInnerRedemptionRateBounds = "update_inner_redemption_rate_bounds" + +var _ sdk.Msg = &MsgUpdateInnerRedemptionRateBounds{} + +func NewMsgUpdateInnerRedemptionRateBounds(creator string, chainId string, minInnerRedemptionRate sdkmath.LegacyDec, maxInnerRedemptionRate sdkmath.LegacyDec) *MsgUpdateInnerRedemptionRateBounds { + return &MsgUpdateInnerRedemptionRateBounds{ + Creator: creator, + ChainId: chainId, + MinInnerRedemptionRate: minInnerRedemptionRate, + MaxInnerRedemptionRate: maxInnerRedemptionRate, + } +} + +func (msg *MsgUpdateInnerRedemptionRateBounds) Route() string { + return RouterKey +} + +func (msg *MsgUpdateInnerRedemptionRateBounds) Type() string { + return TypeMsgUpdateInnerRedemptionRateBounds +} + +func (msg *MsgUpdateInnerRedemptionRateBounds) GetSigners() []sdk.AccAddress { + creator, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + panic(err) + } + return []sdk.AccAddress{creator} +} + +func (msg *MsgUpdateInnerRedemptionRateBounds) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(msg.Creator) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid creator address (%s)", err) + } + // Confirm the max is greater than the min + if msg.MaxInnerRedemptionRate.LTE(msg.MinInnerRedemptionRate) { + return errorsmod.Wrapf(ErrInvalidBounds, "Inner max safety threshold (%s) is less than inner min safety threshold (%s)", msg.MaxInnerRedemptionRate, msg.MinInnerRedemptionRate) + } + if err := utils.ValidateAdminAddress(msg.Creator); err != nil { + return err + } + return nil +} diff --git a/x/stakeibc/types/message_update_trade_route.go b/x/stakeibc/types/message_update_trade_route.go new file mode 100644 index 00000000000..8085477d95b --- /dev/null +++ b/x/stakeibc/types/message_update_trade_route.go @@ -0,0 +1,47 @@ +package types + +import ( + "errors" + + sdk "github.com/cosmos/cosmos-sdk/types" + + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" +) + +const TypeMsgUpdateTradeRoute = "update_trade_route" + +var _ sdk.Msg = &MsgUpdateTradeRoute{} + +func (msg *MsgUpdateTradeRoute) Type() string { + return TypeMsgUpdateTradeRoute +} + +func (msg *MsgUpdateTradeRoute) Route() string { + return RouterKey +} + +func (msg *MsgUpdateTradeRoute) GetSigners() []sdk.AccAddress { + addr, _ := sdk.AccAddressFromBech32(msg.Authority) + return []sdk.AccAddress{addr} +} + +func (msg *MsgUpdateTradeRoute) ValidateBasic() error { + if _, err := sdk.AccAddressFromBech32(msg.Authority); err != nil { + return errorsmod.Wrap(err, "invalid authority address") + } + + if msg.HostDenom == "" { + return errorsmod.Wrapf(sdkerrors.ErrNotFound, "missing host denom") + } + if msg.RewardDenom == "" { + return errorsmod.Wrapf(sdkerrors.ErrNotFound, "missing reward denom") + } + + if msg.MinTransferAmount.IsNil() || msg.MinTransferAmount.LT(sdkmath.ZeroInt()) { + return errors.New("min transfer amount must be greater than or equal to zero") + } + + return nil +} diff --git a/x/stakeibc/types/message_update_trade_route_test.go b/x/stakeibc/types/message_update_trade_route_test.go new file mode 100644 index 00000000000..6cc1755fdb5 --- /dev/null +++ b/x/stakeibc/types/message_update_trade_route_test.go @@ -0,0 +1,103 @@ +package types_test + +import ( + "testing" + + sdkmath "cosmossdk.io/math" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func TestMsgUpdateTradeRoute(t *testing.T) { + apptesting.SetupConfig() + + authority := authtypes.NewModuleAddress(govtypes.ModuleName).String() + + validDenom := "denom" + validMinTransferAmount := sdkmath.NewInt(100) + + tests := []struct { + name string + msg types.MsgUpdateTradeRoute + err string + }{ + { + name: "successful message", + msg: types.MsgUpdateTradeRoute{ + Authority: authority, + HostDenom: validDenom, + RewardDenom: validDenom, + MinTransferAmount: validMinTransferAmount, + }, + }, + { + name: "invalid authority", + msg: types.MsgUpdateTradeRoute{ + Authority: "", + HostDenom: validDenom, + RewardDenom: validDenom, + MinTransferAmount: validMinTransferAmount, + }, + err: "invalid authority address", + }, + { + name: "invalid host denom", + msg: types.MsgUpdateTradeRoute{ + Authority: authority, + HostDenom: "", + RewardDenom: validDenom, + MinTransferAmount: validMinTransferAmount, + }, + err: "missing host denom", + }, + { + name: "invalid reward denom", + msg: types.MsgUpdateTradeRoute{ + Authority: authority, + HostDenom: validDenom, + RewardDenom: "", + MinTransferAmount: validMinTransferAmount, + }, + err: "missing reward denom", + }, + { + name: "invalid min transfer amount - nil", + msg: types.MsgUpdateTradeRoute{ + Authority: authority, + HostDenom: validDenom, + RewardDenom: validDenom, + }, + err: "min transfer amount must be greater than or equal to zero", + }, + { + name: "invalid min transfer amount - negative", + msg: types.MsgUpdateTradeRoute{ + Authority: authority, + HostDenom: validDenom, + RewardDenom: validDenom, + MinTransferAmount: sdkmath.OneInt().Neg(), + }, + err: "min transfer amount must be greater than or equal to zero", + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + if test.err == "" { + require.NoError(t, test.msg.ValidateBasic(), "test: %v", test.name) + require.Equal(t, test.msg.Route(), types.RouterKey) + require.Equal(t, test.msg.Type(), "update_trade_route") + + signers := test.msg.GetSigners() + require.Equal(t, len(signers), 1) + require.Equal(t, signers[0].String(), authority) + } else { + require.ErrorContains(t, test.msg.ValidateBasic(), test.err, "test: %v", test.name) + } + }) + } +} diff --git a/x/stakeibc/types/packet.pb.go b/x/stakeibc/types/packet.pb.go new file mode 100644 index 00000000000..845a04f27a7 --- /dev/null +++ b/x/stakeibc/types/packet.pb.go @@ -0,0 +1,501 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/stakeibc/packet.proto + +package types + +import ( + fmt "fmt" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type StakeibcPacketData struct { + // Types that are valid to be assigned to Packet: + // + // *StakeibcPacketData_NoData + Packet isStakeibcPacketData_Packet `protobuf_oneof:"packet"` +} + +func (m *StakeibcPacketData) Reset() { *m = StakeibcPacketData{} } +func (m *StakeibcPacketData) String() string { return proto.CompactTextString(m) } +func (*StakeibcPacketData) ProtoMessage() {} +func (*StakeibcPacketData) Descriptor() ([]byte, []int) { + return fileDescriptor_a86fa6a12773333f, []int{0} +} +func (m *StakeibcPacketData) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StakeibcPacketData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_StakeibcPacketData.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *StakeibcPacketData) XXX_Merge(src proto.Message) { + xxx_messageInfo_StakeibcPacketData.Merge(m, src) +} +func (m *StakeibcPacketData) XXX_Size() int { + return m.Size() +} +func (m *StakeibcPacketData) XXX_DiscardUnknown() { + xxx_messageInfo_StakeibcPacketData.DiscardUnknown(m) +} + +var xxx_messageInfo_StakeibcPacketData proto.InternalMessageInfo + +type isStakeibcPacketData_Packet interface { + isStakeibcPacketData_Packet() + MarshalTo([]byte) (int, error) + Size() int +} + +type StakeibcPacketData_NoData struct { + NoData *NoData `protobuf:"bytes,1,opt,name=no_data,json=noData,proto3,oneof" json:"no_data,omitempty"` +} + +func (*StakeibcPacketData_NoData) isStakeibcPacketData_Packet() {} + +func (m *StakeibcPacketData) GetPacket() isStakeibcPacketData_Packet { + if m != nil { + return m.Packet + } + return nil +} + +func (m *StakeibcPacketData) GetNoData() *NoData { + if x, ok := m.GetPacket().(*StakeibcPacketData_NoData); ok { + return x.NoData + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*StakeibcPacketData) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*StakeibcPacketData_NoData)(nil), + } +} + +type NoData struct { +} + +func (m *NoData) Reset() { *m = NoData{} } +func (m *NoData) String() string { return proto.CompactTextString(m) } +func (*NoData) ProtoMessage() {} +func (*NoData) Descriptor() ([]byte, []int) { + return fileDescriptor_a86fa6a12773333f, []int{1} +} +func (m *NoData) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *NoData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_NoData.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *NoData) XXX_Merge(src proto.Message) { + xxx_messageInfo_NoData.Merge(m, src) +} +func (m *NoData) XXX_Size() int { + return m.Size() +} +func (m *NoData) XXX_DiscardUnknown() { + xxx_messageInfo_NoData.DiscardUnknown(m) +} + +var xxx_messageInfo_NoData proto.InternalMessageInfo + +func init() { + proto.RegisterType((*StakeibcPacketData)(nil), "stride.stakeibc.StakeibcPacketData") + proto.RegisterType((*NoData)(nil), "stride.stakeibc.NoData") +} + +func init() { proto.RegisterFile("stride/stakeibc/packet.proto", fileDescriptor_a86fa6a12773333f) } + +var fileDescriptor_a86fa6a12773333f = []byte{ + // 190 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x29, 0x2e, 0x29, 0xca, + 0x4c, 0x49, 0xd5, 0x2f, 0x2e, 0x49, 0xcc, 0x4e, 0xcd, 0x4c, 0x4a, 0xd6, 0x2f, 0x48, 0x4c, 0xce, + 0x4e, 0x2d, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x87, 0xc8, 0xea, 0xc1, 0x64, 0x95, + 0x82, 0xb8, 0x84, 0x82, 0xa1, 0xec, 0x00, 0xb0, 0x42, 0x97, 0xc4, 0x92, 0x44, 0x21, 0x23, 0x2e, + 0xf6, 0xbc, 0xfc, 0xf8, 0x94, 0xc4, 0x92, 0x44, 0x09, 0x46, 0x05, 0x46, 0x0d, 0x6e, 0x23, 0x71, + 0x3d, 0x34, 0x8d, 0x7a, 0x7e, 0xf9, 0x20, 0x95, 0x1e, 0x0c, 0x41, 0x6c, 0x79, 0x60, 0x96, 0x13, + 0x07, 0x17, 0x1b, 0xc4, 0x2a, 0x25, 0x0e, 0x2e, 0x36, 0x88, 0xac, 0x93, 0xcf, 0x89, 0x47, 0x72, + 0x8c, 0x17, 0x1e, 0xc9, 0x31, 0x3e, 0x78, 0x24, 0xc7, 0x38, 0xe1, 0xb1, 0x1c, 0xc3, 0x85, 0xc7, + 0x72, 0x0c, 0x37, 0x1e, 0xcb, 0x31, 0x44, 0x19, 0xa5, 0x67, 0x96, 0x64, 0x94, 0x26, 0xe9, 0x25, + 0xe7, 0xe7, 0xea, 0x07, 0x83, 0x8d, 0xd6, 0xf5, 0x49, 0x4c, 0x2a, 0xd6, 0x87, 0xba, 0xbe, 0xcc, + 0xc8, 0x42, 0xbf, 0x02, 0xe1, 0x87, 0x92, 0xca, 0x82, 0xd4, 0xe2, 0x24, 0x36, 0xb0, 0x1f, 0x8c, + 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x31, 0xa6, 0x5b, 0x25, 0xe3, 0x00, 0x00, 0x00, +} + +func (m *StakeibcPacketData) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *StakeibcPacketData) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StakeibcPacketData) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Packet != nil { + { + size := m.Packet.Size() + i -= size + if _, err := m.Packet.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + } + } + return len(dAtA) - i, nil +} + +func (m *StakeibcPacketData_NoData) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StakeibcPacketData_NoData) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.NoData != nil { + { + size, err := m.NoData.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintPacket(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} +func (m *NoData) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *NoData) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *NoData) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintPacket(dAtA []byte, offset int, v uint64) int { + offset -= sovPacket(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *StakeibcPacketData) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Packet != nil { + n += m.Packet.Size() + } + return n +} + +func (m *StakeibcPacketData_NoData) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.NoData != nil { + l = m.NoData.Size() + n += 1 + l + sovPacket(uint64(l)) + } + return n +} +func (m *NoData) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovPacket(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozPacket(x uint64) (n int) { + return sovPacket(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *StakeibcPacketData) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPacket + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StakeibcPacketData: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StakeibcPacketData: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NoData", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPacket + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthPacket + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthPacket + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &NoData{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Packet = &StakeibcPacketData_NoData{v} + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipPacket(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthPacket + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *NoData) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowPacket + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: NoData: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: NoData: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipPacket(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthPacket + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipPacket(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowPacket + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowPacket + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowPacket + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthPacket + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupPacket + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthPacket + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthPacket = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowPacket = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupPacket = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/stakeibc/types/params.go b/x/stakeibc/types/params.go new file mode 100644 index 00000000000..1973b4ecab2 --- /dev/null +++ b/x/stakeibc/types/params.go @@ -0,0 +1,291 @@ +package types + +import ( + fmt "fmt" + + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + "gopkg.in/yaml.v2" +) + +// Default init params +var ( + // these are default intervals _in epochs_ NOT in blocks + DefaultDepositInterval uint64 = 1 + DefaultDelegateInterval uint64 = 1 + DefaultReinvestInterval uint64 = 1 + DefaultRewardsInterval uint64 = 1 + DefaultRedemptionRateInterval uint64 = 1 + // you apparently cannot safely encode floats, so we make commission / 100 + DefaultStrideCommission uint64 = 10 + DefaultICATimeoutNanos uint64 = 600000000000 + DefaultBufferSize uint64 = 5 // 1/5=20% of the epoch + DefaultIbcTimeoutBlocks uint64 = 300 // 300 blocks ~= 30 minutes + DefaultFeeTransferTimeoutNanos uint64 = 1800000000000 // 30 minutes + DefaultMinRedemptionRateThreshold uint64 = 90 // divide by 100, so 90 = 0.9 + DefaultMaxRedemptionRateThreshold uint64 = 150 // divide by 100, so 150 = 1.5 + DefaultMaxStakeICACallsPerEpoch uint64 = 100 + DefaultIBCTransferTimeoutNanos uint64 = 1800000000000 // 30 minutes + DefaultValidatorSlashQueryThreshold uint64 = 1 // denominated in percentage of TVL (1 => 1%) + DefaultValidatorWeightCap uint64 = 10 // percentage (10 => 10%) + + // KeyDepositInterval is store's key for the DepositInterval option + KeyDepositInterval = []byte("DepositInterval") + KeyDelegateInterval = []byte("DelegateInterval") + KeyReinvestInterval = []byte("ReinvestInterval") + KeyRewardsInterval = []byte("RewardsInterval") + KeyRedemptionRateInterval = []byte("RedemptionRateInterval") + KeyStrideCommission = []byte("StrideCommission") + KeyICATimeoutNanos = []byte("ICATimeoutNanos") + KeyFeeTransferTimeoutNanos = []byte("FeeTransferTimeoutNanos") + KeyBufferSize = []byte("BufferSize") + KeyIbcTimeoutBlocks = []byte("IBCTimeoutBlocks") + KeyDefaultMinRedemptionRateThreshold = []byte("DefaultMinRedemptionRateThreshold") + KeyDefaultMaxRedemptionRateThreshold = []byte("DefaultMaxRedemptionRateThreshold") + KeyMaxStakeICACallsPerEpoch = []byte("MaxStakeICACallsPerEpoch") + KeyIBCTransferTimeoutNanos = []byte("IBCTransferTimeoutNanos") + KeyMaxRedemptionRates = []byte("MaxRedemptionRates") + KeyMinRedemptionRates = []byte("MinRedemptionRates") + KeyValidatorSlashQueryThreshold = []byte("ValidatorSlashQueryThreshold") + KeyValidatorWeightCap = []byte("ValidatorWeightCap") +) + +var _ paramtypes.ParamSet = (*Params)(nil) + +// ParamKeyTable the param key table for launch module +func ParamKeyTable() paramtypes.KeyTable { + return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) +} + +// NewParams creates a new Params instance +func NewParams( + depositInterval uint64, + delegateInterval uint64, + rewardsInterval uint64, + redemptionRateInterval uint64, + strideCommission uint64, + reinvestInterval uint64, + icaTimeoutNanos uint64, + bufferSize uint64, + ibcTimeoutBlocks uint64, + feeTransferTimeoutNanos uint64, + maxStakeIcaCallsPerEpoch uint64, + defaultMinRedemptionRateThreshold uint64, + defaultMaxRedemptionRateThreshold uint64, + ibcTransferTimeoutNanos uint64, + validatorSlashQueryInterval uint64, + validatorWeightCap uint64, +) Params { + return Params{ + DepositInterval: depositInterval, + DelegateInterval: delegateInterval, + RewardsInterval: rewardsInterval, + RedemptionRateInterval: redemptionRateInterval, + StrideCommission: strideCommission, + ReinvestInterval: reinvestInterval, + IcaTimeoutNanos: icaTimeoutNanos, + BufferSize: bufferSize, + IbcTimeoutBlocks: ibcTimeoutBlocks, + FeeTransferTimeoutNanos: feeTransferTimeoutNanos, + MaxStakeIcaCallsPerEpoch: maxStakeIcaCallsPerEpoch, + DefaultMinRedemptionRateThreshold: defaultMinRedemptionRateThreshold, + DefaultMaxRedemptionRateThreshold: defaultMaxRedemptionRateThreshold, + IbcTransferTimeoutNanos: ibcTransferTimeoutNanos, + ValidatorSlashQueryThreshold: validatorSlashQueryInterval, + ValidatorWeightCap: validatorWeightCap, + } +} + +// DefaultParams returns a default set of parameters +func DefaultParams() Params { + return NewParams( + DefaultDepositInterval, + DefaultDelegateInterval, + DefaultRewardsInterval, + DefaultRedemptionRateInterval, + DefaultStrideCommission, + DefaultReinvestInterval, + DefaultICATimeoutNanos, + DefaultBufferSize, + DefaultIbcTimeoutBlocks, + DefaultFeeTransferTimeoutNanos, + DefaultMaxStakeICACallsPerEpoch, + DefaultMinRedemptionRateThreshold, + DefaultMaxRedemptionRateThreshold, + DefaultIBCTransferTimeoutNanos, + DefaultValidatorSlashQueryThreshold, + DefaultValidatorWeightCap, + ) +} + +// ParamSetPairs get the params.ParamSet +func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { + return paramtypes.ParamSetPairs{ + paramtypes.NewParamSetPair(KeyDepositInterval, &p.DepositInterval, isPositive), + paramtypes.NewParamSetPair(KeyDelegateInterval, &p.DelegateInterval, isPositive), + paramtypes.NewParamSetPair(KeyRewardsInterval, &p.RewardsInterval, isPositive), + paramtypes.NewParamSetPair(KeyRedemptionRateInterval, &p.RedemptionRateInterval, isPositive), + paramtypes.NewParamSetPair(KeyStrideCommission, &p.StrideCommission, isCommission), + paramtypes.NewParamSetPair(KeyReinvestInterval, &p.ReinvestInterval, isPositive), + paramtypes.NewParamSetPair(KeyICATimeoutNanos, &p.IcaTimeoutNanos, isPositive), + paramtypes.NewParamSetPair(KeyBufferSize, &p.BufferSize, isPositive), + paramtypes.NewParamSetPair(KeyIbcTimeoutBlocks, &p.IbcTimeoutBlocks, isPositive), + paramtypes.NewParamSetPair(KeyFeeTransferTimeoutNanos, &p.FeeTransferTimeoutNanos, validTimeoutNanos), + paramtypes.NewParamSetPair(KeyMaxStakeICACallsPerEpoch, &p.MaxStakeIcaCallsPerEpoch, isPositive), + paramtypes.NewParamSetPair(KeyDefaultMinRedemptionRateThreshold, &p.DefaultMinRedemptionRateThreshold, validMinRedemptionRateThreshold), + paramtypes.NewParamSetPair(KeyDefaultMaxRedemptionRateThreshold, &p.DefaultMaxRedemptionRateThreshold, validMaxRedemptionRateThreshold), + paramtypes.NewParamSetPair(KeyIBCTransferTimeoutNanos, &p.IbcTransferTimeoutNanos, validTimeoutNanos), + paramtypes.NewParamSetPair(KeyValidatorSlashQueryThreshold, &p.ValidatorSlashQueryThreshold, isPositive), + paramtypes.NewParamSetPair(KeyValidatorWeightCap, &p.ValidatorWeightCap, validValidatorWeightCap), + } +} + +func validTimeoutNanos(i interface{}) error { + ival, ok := i.(uint64) + if !ok { + return fmt.Errorf("parameter not accepted: %T", i) + } + + tenMin := uint64(600000000000) + oneHour := uint64(600000000000 * 6) + + if ival < tenMin { + return fmt.Errorf("parameter must be g.t. 600000000000ns: %d", ival) + } + if ival > oneHour { + return fmt.Errorf("parameter must be less than %dns: %d", oneHour, ival) + } + return nil +} + +func validMaxRedemptionRateThreshold(i interface{}) error { + ival, ok := i.(uint64) + if !ok { + return fmt.Errorf("parameter not accepted: %T", i) + } + + maxVal := uint64(1000) // divide by 100, so 1000 => 10 + + if ival > maxVal { + return fmt.Errorf("parameter must be l.t. 1000: %d", ival) + } + + return nil +} + +func validMinRedemptionRateThreshold(i interface{}) error { + ival, ok := i.(uint64) + if !ok { + return fmt.Errorf("parameter not accepted: %T", i) + } + + minVal := uint64(75) // divide by 100, so 75 => 0.75 + + if ival < minVal { + return fmt.Errorf("parameter must be g.t. 75: %d", ival) + } + + return nil +} + +func validValidatorWeightCap(i interface{}) error { + if err := isPositive(i); err != nil { + return err + } + if err := isPercentage(i); err != nil { + return err + } + return nil +} + +func isPositive(i interface{}) error { + ival, ok := i.(uint64) + if !ok { + return fmt.Errorf("parameter not accepted: %T", i) + } + + if ival <= 0 { + return fmt.Errorf("parameter must be positive: %d", ival) + } + return nil +} + +func isPercentage(i interface{}) error { + ival, ok := i.(uint64) + if !ok { + return fmt.Errorf("parameter not accepted: %T", i) + } + + if ival > 100 { + return fmt.Errorf("parameter must be between 0 and 100: %d", ival) + } + return nil +} + +func isCommission(i interface{}) error { + ival, ok := i.(uint64) + if !ok { + return fmt.Errorf("commission not accepted: %T", i) + } + + if ival > 100 { + return fmt.Errorf("commission must be less than 100: %d", ival) + } + return nil +} + +// Validate validates the set of params +func (p Params) Validate() error { + if err := isPositive(p.DepositInterval); err != nil { + return err + } + if err := isPositive(p.DelegateInterval); err != nil { + return err + } + if err := isPositive(p.RewardsInterval); err != nil { + return err + } + if err := isPositive(p.RedemptionRateInterval); err != nil { + return err + } + if err := isCommission(p.StrideCommission); err != nil { + return err + } + if err := isPositive(p.ReinvestInterval); err != nil { + return err + } + if err := isPositive(p.IcaTimeoutNanos); err != nil { + return err + } + if err := isPositive(p.BufferSize); err != nil { + return err + } + if err := isPositive(p.IbcTimeoutBlocks); err != nil { + return err + } + if err := validTimeoutNanos(p.FeeTransferTimeoutNanos); err != nil { + return err + } + if err := isPositive(p.MaxStakeIcaCallsPerEpoch); err != nil { + return err + } + if err := validMinRedemptionRateThreshold(p.DefaultMinRedemptionRateThreshold); err != nil { + return err + } + if err := validMaxRedemptionRateThreshold(p.DefaultMaxRedemptionRateThreshold); err != nil { + return err + } + if err := validTimeoutNanos(p.IbcTransferTimeoutNanos); err != nil { + return err + } + if err := isPercentage(p.ValidatorWeightCap); err != nil { + return err + } + + return nil +} + +// String implements the Stringer interface. +func (p Params) String() string { + out, _ := yaml.Marshal(p) + return string(out) +} diff --git a/x/stakeibc/types/params.pb.go b/x/stakeibc/types/params.pb.go new file mode 100644 index 00000000000..9d154b94fd8 --- /dev/null +++ b/x/stakeibc/types/params.pb.go @@ -0,0 +1,859 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/stakeibc/params.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// Params defines the parameters for the module. +// next id: 20 +type Params struct { + // define epoch lengths, in stride_epochs + RewardsInterval uint64 `protobuf:"varint,1,opt,name=rewards_interval,json=rewardsInterval,proto3" json:"rewards_interval,omitempty"` + DelegateInterval uint64 `protobuf:"varint,6,opt,name=delegate_interval,json=delegateInterval,proto3" json:"delegate_interval,omitempty"` + DepositInterval uint64 `protobuf:"varint,2,opt,name=deposit_interval,json=depositInterval,proto3" json:"deposit_interval,omitempty"` + RedemptionRateInterval uint64 `protobuf:"varint,3,opt,name=redemption_rate_interval,json=redemptionRateInterval,proto3" json:"redemption_rate_interval,omitempty"` + StrideCommission uint64 `protobuf:"varint,4,opt,name=stride_commission,json=strideCommission,proto3" json:"stride_commission,omitempty"` + ReinvestInterval uint64 `protobuf:"varint,7,opt,name=reinvest_interval,json=reinvestInterval,proto3" json:"reinvest_interval,omitempty"` + IcaTimeoutNanos uint64 `protobuf:"varint,9,opt,name=ica_timeout_nanos,json=icaTimeoutNanos,proto3" json:"ica_timeout_nanos,omitempty"` + BufferSize uint64 `protobuf:"varint,10,opt,name=buffer_size,json=bufferSize,proto3" json:"buffer_size,omitempty"` + IbcTimeoutBlocks uint64 `protobuf:"varint,11,opt,name=ibc_timeout_blocks,json=ibcTimeoutBlocks,proto3" json:"ibc_timeout_blocks,omitempty"` + FeeTransferTimeoutNanos uint64 `protobuf:"varint,12,opt,name=fee_transfer_timeout_nanos,json=feeTransferTimeoutNanos,proto3" json:"fee_transfer_timeout_nanos,omitempty"` + MaxStakeIcaCallsPerEpoch uint64 `protobuf:"varint,13,opt,name=max_stake_ica_calls_per_epoch,json=maxStakeIcaCallsPerEpoch,proto3" json:"max_stake_ica_calls_per_epoch,omitempty"` + DefaultMinRedemptionRateThreshold uint64 `protobuf:"varint,14,opt,name=default_min_redemption_rate_threshold,json=defaultMinRedemptionRateThreshold,proto3" json:"default_min_redemption_rate_threshold,omitempty"` + DefaultMaxRedemptionRateThreshold uint64 `protobuf:"varint,15,opt,name=default_max_redemption_rate_threshold,json=defaultMaxRedemptionRateThreshold,proto3" json:"default_max_redemption_rate_threshold,omitempty"` + IbcTransferTimeoutNanos uint64 `protobuf:"varint,16,opt,name=ibc_transfer_timeout_nanos,json=ibcTransferTimeoutNanos,proto3" json:"ibc_transfer_timeout_nanos,omitempty"` + ValidatorSlashQueryThreshold uint64 `protobuf:"varint,19,opt,name=validator_slash_query_threshold,json=validatorSlashQueryThreshold,proto3" json:"validator_slash_query_threshold,omitempty"` + ValidatorWeightCap uint64 `protobuf:"varint,20,opt,name=validator_weight_cap,json=validatorWeightCap,proto3" json:"validator_weight_cap,omitempty"` +} + +func (m *Params) Reset() { *m = Params{} } +func (*Params) ProtoMessage() {} +func (*Params) Descriptor() ([]byte, []int) { + return fileDescriptor_5aeaab6a38c2b438, []int{0} +} +func (m *Params) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Params.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Params) XXX_Merge(src proto.Message) { + xxx_messageInfo_Params.Merge(m, src) +} +func (m *Params) XXX_Size() int { + return m.Size() +} +func (m *Params) XXX_DiscardUnknown() { + xxx_messageInfo_Params.DiscardUnknown(m) +} + +var xxx_messageInfo_Params proto.InternalMessageInfo + +func (m *Params) GetRewardsInterval() uint64 { + if m != nil { + return m.RewardsInterval + } + return 0 +} + +func (m *Params) GetDelegateInterval() uint64 { + if m != nil { + return m.DelegateInterval + } + return 0 +} + +func (m *Params) GetDepositInterval() uint64 { + if m != nil { + return m.DepositInterval + } + return 0 +} + +func (m *Params) GetRedemptionRateInterval() uint64 { + if m != nil { + return m.RedemptionRateInterval + } + return 0 +} + +func (m *Params) GetStrideCommission() uint64 { + if m != nil { + return m.StrideCommission + } + return 0 +} + +func (m *Params) GetReinvestInterval() uint64 { + if m != nil { + return m.ReinvestInterval + } + return 0 +} + +func (m *Params) GetIcaTimeoutNanos() uint64 { + if m != nil { + return m.IcaTimeoutNanos + } + return 0 +} + +func (m *Params) GetBufferSize() uint64 { + if m != nil { + return m.BufferSize + } + return 0 +} + +func (m *Params) GetIbcTimeoutBlocks() uint64 { + if m != nil { + return m.IbcTimeoutBlocks + } + return 0 +} + +func (m *Params) GetFeeTransferTimeoutNanos() uint64 { + if m != nil { + return m.FeeTransferTimeoutNanos + } + return 0 +} + +func (m *Params) GetMaxStakeIcaCallsPerEpoch() uint64 { + if m != nil { + return m.MaxStakeIcaCallsPerEpoch + } + return 0 +} + +func (m *Params) GetDefaultMinRedemptionRateThreshold() uint64 { + if m != nil { + return m.DefaultMinRedemptionRateThreshold + } + return 0 +} + +func (m *Params) GetDefaultMaxRedemptionRateThreshold() uint64 { + if m != nil { + return m.DefaultMaxRedemptionRateThreshold + } + return 0 +} + +func (m *Params) GetIbcTransferTimeoutNanos() uint64 { + if m != nil { + return m.IbcTransferTimeoutNanos + } + return 0 +} + +func (m *Params) GetValidatorSlashQueryThreshold() uint64 { + if m != nil { + return m.ValidatorSlashQueryThreshold + } + return 0 +} + +func (m *Params) GetValidatorWeightCap() uint64 { + if m != nil { + return m.ValidatorWeightCap + } + return 0 +} + +func init() { + proto.RegisterType((*Params)(nil), "stride.stakeibc.Params") +} + +func init() { proto.RegisterFile("stride/stakeibc/params.proto", fileDescriptor_5aeaab6a38c2b438) } + +var fileDescriptor_5aeaab6a38c2b438 = []byte{ + // 580 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x94, 0x41, 0x6f, 0xd3, 0x3e, + 0x18, 0xc6, 0xdb, 0xff, 0x3f, 0xda, 0x3a, 0x0f, 0x58, 0x9a, 0x4d, 0x10, 0x4d, 0x23, 0x03, 0x24, + 0x24, 0xc6, 0x60, 0x41, 0xe3, 0x32, 0xb1, 0x03, 0xd2, 0xa6, 0x1d, 0x36, 0x0d, 0x54, 0xda, 0x4a, + 0x48, 0x5c, 0x2c, 0xc7, 0x79, 0xdb, 0x58, 0x4b, 0xe2, 0x60, 0xbb, 0x5d, 0xb7, 0x8f, 0xc0, 0x89, + 0x23, 0x47, 0x3e, 0x0e, 0xc7, 0x1d, 0x39, 0xa2, 0xf6, 0x8b, 0xa0, 0xd8, 0x69, 0xd2, 0xa0, 0xc1, + 0xad, 0x7a, 0x9e, 0xdf, 0xfb, 0xe4, 0xc9, 0xeb, 0xc6, 0x68, 0x4b, 0x2a, 0xc1, 0x42, 0xf0, 0xa5, + 0x22, 0x17, 0xc0, 0x02, 0xea, 0x67, 0x44, 0x90, 0x44, 0xee, 0x65, 0x82, 0x2b, 0xee, 0xac, 0x19, + 0x77, 0x6f, 0xee, 0x6e, 0x6e, 0x0c, 0xf9, 0x90, 0x6b, 0xcf, 0xcf, 0x7f, 0x19, 0xec, 0xc9, 0x97, + 0x65, 0xb4, 0xd4, 0xd1, 0x73, 0xce, 0x0e, 0xb2, 0x05, 0x5c, 0x12, 0x11, 0x4a, 0xcc, 0x52, 0x05, + 0x62, 0x4c, 0x62, 0xb7, 0xf9, 0xa8, 0xf9, 0xcc, 0xea, 0xae, 0x15, 0xfa, 0x69, 0x21, 0x3b, 0xbb, + 0xa8, 0x1d, 0x42, 0x0c, 0x43, 0xa2, 0xa0, 0x62, 0x97, 0x34, 0x6b, 0xcf, 0x8d, 0x12, 0xde, 0x41, + 0x76, 0x08, 0x19, 0x97, 0x4c, 0x55, 0xec, 0x7f, 0x26, 0xb7, 0xd0, 0x4b, 0xf4, 0x00, 0xb9, 0x02, + 0x42, 0x48, 0x32, 0xc5, 0x78, 0x8a, 0x45, 0x2d, 0xfe, 0x7f, 0x3d, 0x72, 0xbf, 0xf2, 0xbb, 0x8b, + 0x0f, 0xd9, 0x45, 0x6d, 0xf3, 0xc2, 0x98, 0xf2, 0x24, 0x61, 0x52, 0x32, 0x9e, 0xba, 0x96, 0x69, + 0x64, 0x8c, 0xe3, 0x52, 0xcf, 0x61, 0x01, 0x2c, 0x1d, 0x83, 0x5c, 0xa8, 0xb4, 0x6c, 0xe0, 0xb9, + 0x51, 0x26, 0x3f, 0x47, 0x6d, 0x46, 0x09, 0x56, 0x2c, 0x01, 0x3e, 0x52, 0x38, 0x25, 0x29, 0x97, + 0xee, 0x8a, 0xe9, 0xcf, 0x28, 0xe9, 0x1b, 0xfd, 0x7d, 0x2e, 0x3b, 0xdb, 0x68, 0x35, 0x18, 0x0d, + 0x06, 0x20, 0xb0, 0x64, 0xd7, 0xe0, 0x22, 0x4d, 0x21, 0x23, 0xf5, 0xd8, 0x35, 0x38, 0x2f, 0x90, + 0xc3, 0x02, 0x5a, 0x86, 0x05, 0x31, 0xa7, 0x17, 0xd2, 0x5d, 0x35, 0x8f, 0x66, 0x01, 0x2d, 0xd2, + 0x8e, 0xb4, 0xee, 0x1c, 0xa2, 0xcd, 0x01, 0x00, 0x56, 0x82, 0xa4, 0x32, 0x0f, 0xad, 0x77, 0xb8, + 0xa3, 0xa7, 0x1e, 0x0c, 0x00, 0xfa, 0x05, 0x50, 0xeb, 0xf2, 0x16, 0x3d, 0x4c, 0xc8, 0x04, 0xeb, + 0xf3, 0xc7, 0xf9, 0x1b, 0x50, 0x12, 0xc7, 0x12, 0x67, 0x20, 0x30, 0x64, 0x9c, 0x46, 0xee, 0x5d, + 0x3d, 0xef, 0x26, 0x64, 0xd2, 0xcb, 0x99, 0x53, 0x4a, 0x8e, 0x73, 0xa2, 0x03, 0xe2, 0x24, 0xf7, + 0x9d, 0x0e, 0x7a, 0x1a, 0xc2, 0x80, 0x8c, 0x62, 0x85, 0x13, 0x96, 0xe2, 0x3f, 0x0f, 0x46, 0x45, + 0x02, 0x64, 0xc4, 0xe3, 0xd0, 0xbd, 0xa7, 0x83, 0x1e, 0x17, 0xf0, 0x3b, 0x96, 0x76, 0x6b, 0x67, + 0xd4, 0x9f, 0x83, 0xb5, 0x44, 0x32, 0xf9, 0x47, 0xe2, 0x5a, 0x3d, 0x91, 0x4c, 0xfe, 0x96, 0x78, + 0x88, 0x36, 0xf5, 0x3e, 0x6f, 0xdf, 0x90, 0x6d, 0x36, 0x94, 0xef, 0xf5, 0xb6, 0x0d, 0x9d, 0xa0, + 0xed, 0x31, 0x89, 0x59, 0x48, 0x14, 0x17, 0x58, 0xc6, 0x44, 0x46, 0xf8, 0xf3, 0x08, 0xc4, 0xd5, + 0x42, 0x91, 0x75, 0x9d, 0xb0, 0x55, 0x62, 0xbd, 0x9c, 0xfa, 0x90, 0x43, 0x55, 0x87, 0x57, 0x68, + 0xa3, 0x8a, 0xb9, 0x04, 0x36, 0x8c, 0x14, 0xa6, 0x24, 0x73, 0x37, 0xf4, 0xac, 0x53, 0x7a, 0x1f, + 0xb5, 0x75, 0x4c, 0xb2, 0x37, 0xd6, 0xb7, 0xef, 0xdb, 0x8d, 0x33, 0xab, 0xd5, 0xb2, 0x57, 0xce, + 0xac, 0x56, 0xdb, 0x76, 0xce, 0xac, 0x96, 0x63, 0xaf, 0x1f, 0x9d, 0xff, 0x98, 0x7a, 0xcd, 0x9b, + 0xa9, 0xd7, 0xfc, 0x35, 0xf5, 0x9a, 0x5f, 0x67, 0x5e, 0xe3, 0x66, 0xe6, 0x35, 0x7e, 0xce, 0xbc, + 0xc6, 0xa7, 0xfd, 0x21, 0x53, 0xd1, 0x28, 0xd8, 0xa3, 0x3c, 0xf1, 0x7b, 0xfa, 0xef, 0xfc, 0xf2, + 0x9c, 0x04, 0xd2, 0x2f, 0xae, 0x80, 0xf1, 0xfe, 0x81, 0x3f, 0xa9, 0x2e, 0x02, 0x75, 0x95, 0x81, + 0x0c, 0x96, 0xf4, 0x17, 0xfe, 0xfa, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0xba, 0x91, 0x86, 0xac, + 0x28, 0x04, 0x00, 0x00, +} + +func (m *Params) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Params) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ValidatorWeightCap != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ValidatorWeightCap)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xa0 + } + if m.ValidatorSlashQueryThreshold != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ValidatorSlashQueryThreshold)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x98 + } + if m.IbcTransferTimeoutNanos != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.IbcTransferTimeoutNanos)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x80 + } + if m.DefaultMaxRedemptionRateThreshold != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.DefaultMaxRedemptionRateThreshold)) + i-- + dAtA[i] = 0x78 + } + if m.DefaultMinRedemptionRateThreshold != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.DefaultMinRedemptionRateThreshold)) + i-- + dAtA[i] = 0x70 + } + if m.MaxStakeIcaCallsPerEpoch != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.MaxStakeIcaCallsPerEpoch)) + i-- + dAtA[i] = 0x68 + } + if m.FeeTransferTimeoutNanos != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.FeeTransferTimeoutNanos)) + i-- + dAtA[i] = 0x60 + } + if m.IbcTimeoutBlocks != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.IbcTimeoutBlocks)) + i-- + dAtA[i] = 0x58 + } + if m.BufferSize != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.BufferSize)) + i-- + dAtA[i] = 0x50 + } + if m.IcaTimeoutNanos != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.IcaTimeoutNanos)) + i-- + dAtA[i] = 0x48 + } + if m.ReinvestInterval != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ReinvestInterval)) + i-- + dAtA[i] = 0x38 + } + if m.DelegateInterval != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.DelegateInterval)) + i-- + dAtA[i] = 0x30 + } + if m.StrideCommission != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.StrideCommission)) + i-- + dAtA[i] = 0x20 + } + if m.RedemptionRateInterval != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.RedemptionRateInterval)) + i-- + dAtA[i] = 0x18 + } + if m.DepositInterval != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.DepositInterval)) + i-- + dAtA[i] = 0x10 + } + if m.RewardsInterval != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.RewardsInterval)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func encodeVarintParams(dAtA []byte, offset int, v uint64) int { + offset -= sovParams(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Params) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.RewardsInterval != 0 { + n += 1 + sovParams(uint64(m.RewardsInterval)) + } + if m.DepositInterval != 0 { + n += 1 + sovParams(uint64(m.DepositInterval)) + } + if m.RedemptionRateInterval != 0 { + n += 1 + sovParams(uint64(m.RedemptionRateInterval)) + } + if m.StrideCommission != 0 { + n += 1 + sovParams(uint64(m.StrideCommission)) + } + if m.DelegateInterval != 0 { + n += 1 + sovParams(uint64(m.DelegateInterval)) + } + if m.ReinvestInterval != 0 { + n += 1 + sovParams(uint64(m.ReinvestInterval)) + } + if m.IcaTimeoutNanos != 0 { + n += 1 + sovParams(uint64(m.IcaTimeoutNanos)) + } + if m.BufferSize != 0 { + n += 1 + sovParams(uint64(m.BufferSize)) + } + if m.IbcTimeoutBlocks != 0 { + n += 1 + sovParams(uint64(m.IbcTimeoutBlocks)) + } + if m.FeeTransferTimeoutNanos != 0 { + n += 1 + sovParams(uint64(m.FeeTransferTimeoutNanos)) + } + if m.MaxStakeIcaCallsPerEpoch != 0 { + n += 1 + sovParams(uint64(m.MaxStakeIcaCallsPerEpoch)) + } + if m.DefaultMinRedemptionRateThreshold != 0 { + n += 1 + sovParams(uint64(m.DefaultMinRedemptionRateThreshold)) + } + if m.DefaultMaxRedemptionRateThreshold != 0 { + n += 1 + sovParams(uint64(m.DefaultMaxRedemptionRateThreshold)) + } + if m.IbcTransferTimeoutNanos != 0 { + n += 2 + sovParams(uint64(m.IbcTransferTimeoutNanos)) + } + if m.ValidatorSlashQueryThreshold != 0 { + n += 2 + sovParams(uint64(m.ValidatorSlashQueryThreshold)) + } + if m.ValidatorWeightCap != 0 { + n += 2 + sovParams(uint64(m.ValidatorWeightCap)) + } + return n +} + +func sovParams(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozParams(x uint64) (n int) { + return sovParams(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Params) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RewardsInterval", wireType) + } + m.RewardsInterval = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.RewardsInterval |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DepositInterval", wireType) + } + m.DepositInterval = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DepositInterval |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RedemptionRateInterval", wireType) + } + m.RedemptionRateInterval = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.RedemptionRateInterval |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field StrideCommission", wireType) + } + m.StrideCommission = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.StrideCommission |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DelegateInterval", wireType) + } + m.DelegateInterval = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DelegateInterval |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReinvestInterval", wireType) + } + m.ReinvestInterval = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ReinvestInterval |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IcaTimeoutNanos", wireType) + } + m.IcaTimeoutNanos = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.IcaTimeoutNanos |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 10: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field BufferSize", wireType) + } + m.BufferSize = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.BufferSize |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 11: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IbcTimeoutBlocks", wireType) + } + m.IbcTimeoutBlocks = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.IbcTimeoutBlocks |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 12: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field FeeTransferTimeoutNanos", wireType) + } + m.FeeTransferTimeoutNanos = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.FeeTransferTimeoutNanos |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 13: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxStakeIcaCallsPerEpoch", wireType) + } + m.MaxStakeIcaCallsPerEpoch = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MaxStakeIcaCallsPerEpoch |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 14: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DefaultMinRedemptionRateThreshold", wireType) + } + m.DefaultMinRedemptionRateThreshold = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DefaultMinRedemptionRateThreshold |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 15: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DefaultMaxRedemptionRateThreshold", wireType) + } + m.DefaultMaxRedemptionRateThreshold = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DefaultMaxRedemptionRateThreshold |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 16: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IbcTransferTimeoutNanos", wireType) + } + m.IbcTransferTimeoutNanos = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.IbcTransferTimeoutNanos |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 19: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorSlashQueryThreshold", wireType) + } + m.ValidatorSlashQueryThreshold = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ValidatorSlashQueryThreshold |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 20: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorWeightCap", wireType) + } + m.ValidatorWeightCap = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ValidatorWeightCap |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipParams(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthParams + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipParams(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthParams + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupParams + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthParams + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthParams = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowParams = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupParams = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/stakeibc/types/query.pb.go b/x/stakeibc/types/query.pb.go new file mode 100644 index 00000000000..d14b7e1ed39 --- /dev/null +++ b/x/stakeibc/types/query.pb.go @@ -0,0 +1,4500 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/stakeibc/query.proto + +package types + +import ( + context "context" + fmt "fmt" + query "github.com/cosmos/cosmos-sdk/types/query" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// QueryInterchainAccountFromAddressRequest is the request type for the +// Query/InterchainAccountAddress RPC +type QueryInterchainAccountFromAddressRequest struct { + Owner string `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` + ConnectionId string `protobuf:"bytes,2,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty" yaml:"connection_id"` +} + +func (m *QueryInterchainAccountFromAddressRequest) Reset() { + *m = QueryInterchainAccountFromAddressRequest{} +} +func (m *QueryInterchainAccountFromAddressRequest) String() string { return proto.CompactTextString(m) } +func (*QueryInterchainAccountFromAddressRequest) ProtoMessage() {} +func (*QueryInterchainAccountFromAddressRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_494b786fe66f2b80, []int{0} +} +func (m *QueryInterchainAccountFromAddressRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryInterchainAccountFromAddressRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryInterchainAccountFromAddressRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryInterchainAccountFromAddressRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryInterchainAccountFromAddressRequest.Merge(m, src) +} +func (m *QueryInterchainAccountFromAddressRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryInterchainAccountFromAddressRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryInterchainAccountFromAddressRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryInterchainAccountFromAddressRequest proto.InternalMessageInfo + +func (m *QueryInterchainAccountFromAddressRequest) GetOwner() string { + if m != nil { + return m.Owner + } + return "" +} + +func (m *QueryInterchainAccountFromAddressRequest) GetConnectionId() string { + if m != nil { + return m.ConnectionId + } + return "" +} + +// QueryInterchainAccountFromAddressResponse the response type for the +// Query/InterchainAccountAddress RPC +type QueryInterchainAccountFromAddressResponse struct { + InterchainAccountAddress string `protobuf:"bytes,1,opt,name=interchain_account_address,json=interchainAccountAddress,proto3" json:"interchain_account_address,omitempty" yaml:"interchain_account_address"` +} + +func (m *QueryInterchainAccountFromAddressResponse) Reset() { + *m = QueryInterchainAccountFromAddressResponse{} +} +func (m *QueryInterchainAccountFromAddressResponse) String() string { + return proto.CompactTextString(m) +} +func (*QueryInterchainAccountFromAddressResponse) ProtoMessage() {} +func (*QueryInterchainAccountFromAddressResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_494b786fe66f2b80, []int{1} +} +func (m *QueryInterchainAccountFromAddressResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryInterchainAccountFromAddressResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryInterchainAccountFromAddressResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryInterchainAccountFromAddressResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryInterchainAccountFromAddressResponse.Merge(m, src) +} +func (m *QueryInterchainAccountFromAddressResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryInterchainAccountFromAddressResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryInterchainAccountFromAddressResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryInterchainAccountFromAddressResponse proto.InternalMessageInfo + +func (m *QueryInterchainAccountFromAddressResponse) GetInterchainAccountAddress() string { + if m != nil { + return m.InterchainAccountAddress + } + return "" +} + +// QueryParamsRequest is request type for the Query/Params RPC method. +type QueryParamsRequest struct { +} + +func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } +func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryParamsRequest) ProtoMessage() {} +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_494b786fe66f2b80, []int{2} +} +func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsRequest.Merge(m, src) +} +func (m *QueryParamsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo + +// QueryParamsResponse is response type for the Query/Params RPC method. +type QueryParamsResponse struct { + // params holds all the parameters of this module. + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` +} + +func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } +func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryParamsResponse) ProtoMessage() {} +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_494b786fe66f2b80, []int{3} +} +func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsResponse.Merge(m, src) +} +func (m *QueryParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo + +func (m *QueryParamsResponse) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +type QueryGetValidatorsRequest struct { + ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` +} + +func (m *QueryGetValidatorsRequest) Reset() { *m = QueryGetValidatorsRequest{} } +func (m *QueryGetValidatorsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryGetValidatorsRequest) ProtoMessage() {} +func (*QueryGetValidatorsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_494b786fe66f2b80, []int{4} +} +func (m *QueryGetValidatorsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryGetValidatorsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryGetValidatorsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryGetValidatorsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetValidatorsRequest.Merge(m, src) +} +func (m *QueryGetValidatorsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryGetValidatorsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetValidatorsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryGetValidatorsRequest proto.InternalMessageInfo + +func (m *QueryGetValidatorsRequest) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +type QueryGetValidatorsResponse struct { + Validators []*Validator `protobuf:"bytes,1,rep,name=validators,proto3" json:"validators,omitempty"` +} + +func (m *QueryGetValidatorsResponse) Reset() { *m = QueryGetValidatorsResponse{} } +func (m *QueryGetValidatorsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryGetValidatorsResponse) ProtoMessage() {} +func (*QueryGetValidatorsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_494b786fe66f2b80, []int{5} +} +func (m *QueryGetValidatorsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryGetValidatorsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryGetValidatorsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryGetValidatorsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetValidatorsResponse.Merge(m, src) +} +func (m *QueryGetValidatorsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryGetValidatorsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetValidatorsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryGetValidatorsResponse proto.InternalMessageInfo + +func (m *QueryGetValidatorsResponse) GetValidators() []*Validator { + if m != nil { + return m.Validators + } + return nil +} + +type QueryGetHostZoneRequest struct { + ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` +} + +func (m *QueryGetHostZoneRequest) Reset() { *m = QueryGetHostZoneRequest{} } +func (m *QueryGetHostZoneRequest) String() string { return proto.CompactTextString(m) } +func (*QueryGetHostZoneRequest) ProtoMessage() {} +func (*QueryGetHostZoneRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_494b786fe66f2b80, []int{6} +} +func (m *QueryGetHostZoneRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryGetHostZoneRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryGetHostZoneRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryGetHostZoneRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetHostZoneRequest.Merge(m, src) +} +func (m *QueryGetHostZoneRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryGetHostZoneRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetHostZoneRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryGetHostZoneRequest proto.InternalMessageInfo + +func (m *QueryGetHostZoneRequest) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +type QueryGetHostZoneResponse struct { + HostZone HostZone `protobuf:"bytes,1,opt,name=host_zone,json=hostZone,proto3" json:"host_zone"` +} + +func (m *QueryGetHostZoneResponse) Reset() { *m = QueryGetHostZoneResponse{} } +func (m *QueryGetHostZoneResponse) String() string { return proto.CompactTextString(m) } +func (*QueryGetHostZoneResponse) ProtoMessage() {} +func (*QueryGetHostZoneResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_494b786fe66f2b80, []int{7} +} +func (m *QueryGetHostZoneResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryGetHostZoneResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryGetHostZoneResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryGetHostZoneResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetHostZoneResponse.Merge(m, src) +} +func (m *QueryGetHostZoneResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryGetHostZoneResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetHostZoneResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryGetHostZoneResponse proto.InternalMessageInfo + +func (m *QueryGetHostZoneResponse) GetHostZone() HostZone { + if m != nil { + return m.HostZone + } + return HostZone{} +} + +type QueryAllHostZoneRequest struct { + Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryAllHostZoneRequest) Reset() { *m = QueryAllHostZoneRequest{} } +func (m *QueryAllHostZoneRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAllHostZoneRequest) ProtoMessage() {} +func (*QueryAllHostZoneRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_494b786fe66f2b80, []int{8} +} +func (m *QueryAllHostZoneRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllHostZoneRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllHostZoneRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryAllHostZoneRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllHostZoneRequest.Merge(m, src) +} +func (m *QueryAllHostZoneRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryAllHostZoneRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllHostZoneRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAllHostZoneRequest proto.InternalMessageInfo + +func (m *QueryAllHostZoneRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +type QueryAllHostZoneResponse struct { + HostZone []HostZone `protobuf:"bytes,1,rep,name=host_zone,json=hostZone,proto3" json:"host_zone"` + Pagination *query.PageResponse `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *QueryAllHostZoneResponse) Reset() { *m = QueryAllHostZoneResponse{} } +func (m *QueryAllHostZoneResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAllHostZoneResponse) ProtoMessage() {} +func (*QueryAllHostZoneResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_494b786fe66f2b80, []int{9} +} +func (m *QueryAllHostZoneResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllHostZoneResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllHostZoneResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryAllHostZoneResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllHostZoneResponse.Merge(m, src) +} +func (m *QueryAllHostZoneResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryAllHostZoneResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllHostZoneResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAllHostZoneResponse proto.InternalMessageInfo + +func (m *QueryAllHostZoneResponse) GetHostZone() []HostZone { + if m != nil { + return m.HostZone + } + return nil +} + +func (m *QueryAllHostZoneResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil +} + +type QueryModuleAddressRequest struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` +} + +func (m *QueryModuleAddressRequest) Reset() { *m = QueryModuleAddressRequest{} } +func (m *QueryModuleAddressRequest) String() string { return proto.CompactTextString(m) } +func (*QueryModuleAddressRequest) ProtoMessage() {} +func (*QueryModuleAddressRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_494b786fe66f2b80, []int{10} +} +func (m *QueryModuleAddressRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryModuleAddressRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryModuleAddressRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryModuleAddressRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryModuleAddressRequest.Merge(m, src) +} +func (m *QueryModuleAddressRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryModuleAddressRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryModuleAddressRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryModuleAddressRequest proto.InternalMessageInfo + +func (m *QueryModuleAddressRequest) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +type QueryModuleAddressResponse struct { + Addr string `protobuf:"bytes,1,opt,name=addr,proto3" json:"addr,omitempty"` +} + +func (m *QueryModuleAddressResponse) Reset() { *m = QueryModuleAddressResponse{} } +func (m *QueryModuleAddressResponse) String() string { return proto.CompactTextString(m) } +func (*QueryModuleAddressResponse) ProtoMessage() {} +func (*QueryModuleAddressResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_494b786fe66f2b80, []int{11} +} +func (m *QueryModuleAddressResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryModuleAddressResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryModuleAddressResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryModuleAddressResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryModuleAddressResponse.Merge(m, src) +} +func (m *QueryModuleAddressResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryModuleAddressResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryModuleAddressResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryModuleAddressResponse proto.InternalMessageInfo + +func (m *QueryModuleAddressResponse) GetAddr() string { + if m != nil { + return m.Addr + } + return "" +} + +type QueryGetEpochTrackerRequest struct { + EpochIdentifier string `protobuf:"bytes,1,opt,name=epoch_identifier,json=epochIdentifier,proto3" json:"epoch_identifier,omitempty"` +} + +func (m *QueryGetEpochTrackerRequest) Reset() { *m = QueryGetEpochTrackerRequest{} } +func (m *QueryGetEpochTrackerRequest) String() string { return proto.CompactTextString(m) } +func (*QueryGetEpochTrackerRequest) ProtoMessage() {} +func (*QueryGetEpochTrackerRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_494b786fe66f2b80, []int{12} +} +func (m *QueryGetEpochTrackerRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryGetEpochTrackerRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryGetEpochTrackerRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryGetEpochTrackerRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetEpochTrackerRequest.Merge(m, src) +} +func (m *QueryGetEpochTrackerRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryGetEpochTrackerRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetEpochTrackerRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryGetEpochTrackerRequest proto.InternalMessageInfo + +func (m *QueryGetEpochTrackerRequest) GetEpochIdentifier() string { + if m != nil { + return m.EpochIdentifier + } + return "" +} + +type QueryGetEpochTrackerResponse struct { + EpochTracker EpochTracker `protobuf:"bytes,1,opt,name=epoch_tracker,json=epochTracker,proto3" json:"epoch_tracker"` +} + +func (m *QueryGetEpochTrackerResponse) Reset() { *m = QueryGetEpochTrackerResponse{} } +func (m *QueryGetEpochTrackerResponse) String() string { return proto.CompactTextString(m) } +func (*QueryGetEpochTrackerResponse) ProtoMessage() {} +func (*QueryGetEpochTrackerResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_494b786fe66f2b80, []int{13} +} +func (m *QueryGetEpochTrackerResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryGetEpochTrackerResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryGetEpochTrackerResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryGetEpochTrackerResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetEpochTrackerResponse.Merge(m, src) +} +func (m *QueryGetEpochTrackerResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryGetEpochTrackerResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetEpochTrackerResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryGetEpochTrackerResponse proto.InternalMessageInfo + +func (m *QueryGetEpochTrackerResponse) GetEpochTracker() EpochTracker { + if m != nil { + return m.EpochTracker + } + return EpochTracker{} +} + +type QueryAllEpochTrackerRequest struct { +} + +func (m *QueryAllEpochTrackerRequest) Reset() { *m = QueryAllEpochTrackerRequest{} } +func (m *QueryAllEpochTrackerRequest) String() string { return proto.CompactTextString(m) } +func (*QueryAllEpochTrackerRequest) ProtoMessage() {} +func (*QueryAllEpochTrackerRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_494b786fe66f2b80, []int{14} +} +func (m *QueryAllEpochTrackerRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllEpochTrackerRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllEpochTrackerRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryAllEpochTrackerRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllEpochTrackerRequest.Merge(m, src) +} +func (m *QueryAllEpochTrackerRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryAllEpochTrackerRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllEpochTrackerRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAllEpochTrackerRequest proto.InternalMessageInfo + +type QueryAllEpochTrackerResponse struct { + EpochTracker []EpochTracker `protobuf:"bytes,1,rep,name=epoch_tracker,json=epochTracker,proto3" json:"epoch_tracker"` +} + +func (m *QueryAllEpochTrackerResponse) Reset() { *m = QueryAllEpochTrackerResponse{} } +func (m *QueryAllEpochTrackerResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAllEpochTrackerResponse) ProtoMessage() {} +func (*QueryAllEpochTrackerResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_494b786fe66f2b80, []int{15} +} +func (m *QueryAllEpochTrackerResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllEpochTrackerResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllEpochTrackerResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryAllEpochTrackerResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllEpochTrackerResponse.Merge(m, src) +} +func (m *QueryAllEpochTrackerResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryAllEpochTrackerResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllEpochTrackerResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAllEpochTrackerResponse proto.InternalMessageInfo + +func (m *QueryAllEpochTrackerResponse) GetEpochTracker() []EpochTracker { + if m != nil { + return m.EpochTracker + } + return nil +} + +type QueryGetNextPacketSequenceRequest struct { + ChannelId string `protobuf:"bytes,1,opt,name=channel_id,json=channelId,proto3" json:"channel_id,omitempty"` + PortId string `protobuf:"bytes,2,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty"` +} + +func (m *QueryGetNextPacketSequenceRequest) Reset() { *m = QueryGetNextPacketSequenceRequest{} } +func (m *QueryGetNextPacketSequenceRequest) String() string { return proto.CompactTextString(m) } +func (*QueryGetNextPacketSequenceRequest) ProtoMessage() {} +func (*QueryGetNextPacketSequenceRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_494b786fe66f2b80, []int{16} +} +func (m *QueryGetNextPacketSequenceRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryGetNextPacketSequenceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryGetNextPacketSequenceRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryGetNextPacketSequenceRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetNextPacketSequenceRequest.Merge(m, src) +} +func (m *QueryGetNextPacketSequenceRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryGetNextPacketSequenceRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetNextPacketSequenceRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryGetNextPacketSequenceRequest proto.InternalMessageInfo + +func (m *QueryGetNextPacketSequenceRequest) GetChannelId() string { + if m != nil { + return m.ChannelId + } + return "" +} + +func (m *QueryGetNextPacketSequenceRequest) GetPortId() string { + if m != nil { + return m.PortId + } + return "" +} + +type QueryGetNextPacketSequenceResponse struct { + Sequence uint64 `protobuf:"varint,1,opt,name=sequence,proto3" json:"sequence,omitempty"` +} + +func (m *QueryGetNextPacketSequenceResponse) Reset() { *m = QueryGetNextPacketSequenceResponse{} } +func (m *QueryGetNextPacketSequenceResponse) String() string { return proto.CompactTextString(m) } +func (*QueryGetNextPacketSequenceResponse) ProtoMessage() {} +func (*QueryGetNextPacketSequenceResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_494b786fe66f2b80, []int{17} +} +func (m *QueryGetNextPacketSequenceResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryGetNextPacketSequenceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryGetNextPacketSequenceResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryGetNextPacketSequenceResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryGetNextPacketSequenceResponse.Merge(m, src) +} +func (m *QueryGetNextPacketSequenceResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryGetNextPacketSequenceResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryGetNextPacketSequenceResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryGetNextPacketSequenceResponse proto.InternalMessageInfo + +func (m *QueryGetNextPacketSequenceResponse) GetSequence() uint64 { + if m != nil { + return m.Sequence + } + return 0 +} + +type QueryAddressUnbondings struct { + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` +} + +func (m *QueryAddressUnbondings) Reset() { *m = QueryAddressUnbondings{} } +func (m *QueryAddressUnbondings) String() string { return proto.CompactTextString(m) } +func (*QueryAddressUnbondings) ProtoMessage() {} +func (*QueryAddressUnbondings) Descriptor() ([]byte, []int) { + return fileDescriptor_494b786fe66f2b80, []int{18} +} +func (m *QueryAddressUnbondings) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAddressUnbondings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAddressUnbondings.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryAddressUnbondings) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAddressUnbondings.Merge(m, src) +} +func (m *QueryAddressUnbondings) XXX_Size() int { + return m.Size() +} +func (m *QueryAddressUnbondings) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAddressUnbondings.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAddressUnbondings proto.InternalMessageInfo + +func (m *QueryAddressUnbondings) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +type QueryAddressUnbondingsResponse struct { + AddressUnbondings []AddressUnbonding `protobuf:"bytes,1,rep,name=address_unbondings,json=addressUnbondings,proto3" json:"address_unbondings"` +} + +func (m *QueryAddressUnbondingsResponse) Reset() { *m = QueryAddressUnbondingsResponse{} } +func (m *QueryAddressUnbondingsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAddressUnbondingsResponse) ProtoMessage() {} +func (*QueryAddressUnbondingsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_494b786fe66f2b80, []int{19} +} +func (m *QueryAddressUnbondingsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAddressUnbondingsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAddressUnbondingsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryAddressUnbondingsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAddressUnbondingsResponse.Merge(m, src) +} +func (m *QueryAddressUnbondingsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryAddressUnbondingsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAddressUnbondingsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAddressUnbondingsResponse proto.InternalMessageInfo + +func (m *QueryAddressUnbondingsResponse) GetAddressUnbondings() []AddressUnbonding { + if m != nil { + return m.AddressUnbondings + } + return nil +} + +type QueryAllTradeRoutes struct { +} + +func (m *QueryAllTradeRoutes) Reset() { *m = QueryAllTradeRoutes{} } +func (m *QueryAllTradeRoutes) String() string { return proto.CompactTextString(m) } +func (*QueryAllTradeRoutes) ProtoMessage() {} +func (*QueryAllTradeRoutes) Descriptor() ([]byte, []int) { + return fileDescriptor_494b786fe66f2b80, []int{20} +} +func (m *QueryAllTradeRoutes) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllTradeRoutes) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllTradeRoutes.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryAllTradeRoutes) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllTradeRoutes.Merge(m, src) +} +func (m *QueryAllTradeRoutes) XXX_Size() int { + return m.Size() +} +func (m *QueryAllTradeRoutes) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllTradeRoutes.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAllTradeRoutes proto.InternalMessageInfo + +type QueryAllTradeRoutesResponse struct { + TradeRoutes []TradeRoute `protobuf:"bytes,1,rep,name=trade_routes,json=tradeRoutes,proto3" json:"trade_routes"` +} + +func (m *QueryAllTradeRoutesResponse) Reset() { *m = QueryAllTradeRoutesResponse{} } +func (m *QueryAllTradeRoutesResponse) String() string { return proto.CompactTextString(m) } +func (*QueryAllTradeRoutesResponse) ProtoMessage() {} +func (*QueryAllTradeRoutesResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_494b786fe66f2b80, []int{21} +} +func (m *QueryAllTradeRoutesResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryAllTradeRoutesResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryAllTradeRoutesResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryAllTradeRoutesResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryAllTradeRoutesResponse.Merge(m, src) +} +func (m *QueryAllTradeRoutesResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryAllTradeRoutesResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryAllTradeRoutesResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryAllTradeRoutesResponse proto.InternalMessageInfo + +func (m *QueryAllTradeRoutesResponse) GetTradeRoutes() []TradeRoute { + if m != nil { + return m.TradeRoutes + } + return nil +} + +func init() { + proto.RegisterType((*QueryInterchainAccountFromAddressRequest)(nil), "stride.stakeibc.QueryInterchainAccountFromAddressRequest") + proto.RegisterType((*QueryInterchainAccountFromAddressResponse)(nil), "stride.stakeibc.QueryInterchainAccountFromAddressResponse") + proto.RegisterType((*QueryParamsRequest)(nil), "stride.stakeibc.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "stride.stakeibc.QueryParamsResponse") + proto.RegisterType((*QueryGetValidatorsRequest)(nil), "stride.stakeibc.QueryGetValidatorsRequest") + proto.RegisterType((*QueryGetValidatorsResponse)(nil), "stride.stakeibc.QueryGetValidatorsResponse") + proto.RegisterType((*QueryGetHostZoneRequest)(nil), "stride.stakeibc.QueryGetHostZoneRequest") + proto.RegisterType((*QueryGetHostZoneResponse)(nil), "stride.stakeibc.QueryGetHostZoneResponse") + proto.RegisterType((*QueryAllHostZoneRequest)(nil), "stride.stakeibc.QueryAllHostZoneRequest") + proto.RegisterType((*QueryAllHostZoneResponse)(nil), "stride.stakeibc.QueryAllHostZoneResponse") + proto.RegisterType((*QueryModuleAddressRequest)(nil), "stride.stakeibc.QueryModuleAddressRequest") + proto.RegisterType((*QueryModuleAddressResponse)(nil), "stride.stakeibc.QueryModuleAddressResponse") + proto.RegisterType((*QueryGetEpochTrackerRequest)(nil), "stride.stakeibc.QueryGetEpochTrackerRequest") + proto.RegisterType((*QueryGetEpochTrackerResponse)(nil), "stride.stakeibc.QueryGetEpochTrackerResponse") + proto.RegisterType((*QueryAllEpochTrackerRequest)(nil), "stride.stakeibc.QueryAllEpochTrackerRequest") + proto.RegisterType((*QueryAllEpochTrackerResponse)(nil), "stride.stakeibc.QueryAllEpochTrackerResponse") + proto.RegisterType((*QueryGetNextPacketSequenceRequest)(nil), "stride.stakeibc.QueryGetNextPacketSequenceRequest") + proto.RegisterType((*QueryGetNextPacketSequenceResponse)(nil), "stride.stakeibc.QueryGetNextPacketSequenceResponse") + proto.RegisterType((*QueryAddressUnbondings)(nil), "stride.stakeibc.QueryAddressUnbondings") + proto.RegisterType((*QueryAddressUnbondingsResponse)(nil), "stride.stakeibc.QueryAddressUnbondingsResponse") + proto.RegisterType((*QueryAllTradeRoutes)(nil), "stride.stakeibc.QueryAllTradeRoutes") + proto.RegisterType((*QueryAllTradeRoutesResponse)(nil), "stride.stakeibc.QueryAllTradeRoutesResponse") +} + +func init() { proto.RegisterFile("stride/stakeibc/query.proto", fileDescriptor_494b786fe66f2b80) } + +var fileDescriptor_494b786fe66f2b80 = []byte{ + // 1238 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x97, 0xdd, 0x6e, 0x1b, 0x45, + 0x14, 0xc7, 0xb3, 0x6d, 0x9a, 0xa6, 0x27, 0x69, 0x43, 0x87, 0x40, 0x9c, 0x4d, 0xe2, 0x90, 0x69, + 0x68, 0x3e, 0x9a, 0x7a, 0x89, 0x53, 0x10, 0x8d, 0xa8, 0xc0, 0x11, 0x6d, 0x63, 0x14, 0x50, 0x70, + 0x4b, 0x85, 0xca, 0x85, 0x35, 0xde, 0x1d, 0xec, 0x55, 0xd7, 0x3b, 0xee, 0xee, 0x38, 0x24, 0x44, + 0x56, 0x25, 0x1e, 0x00, 0x55, 0x20, 0x84, 0xc4, 0x5d, 0x11, 0x17, 0x5c, 0xf3, 0x14, 0xbd, 0xa3, + 0x12, 0x37, 0x5c, 0x45, 0x28, 0xe1, 0x09, 0xfa, 0x04, 0x68, 0x67, 0x67, 0xd7, 0xeb, 0xfd, 0x30, + 0x4e, 0xef, 0x76, 0x67, 0xce, 0xc7, 0x6f, 0xcf, 0x99, 0x39, 0x7f, 0x1b, 0x66, 0x5c, 0xee, 0x98, + 0x06, 0xd5, 0x5c, 0x4e, 0x1e, 0x51, 0xb3, 0xa6, 0x6b, 0x8f, 0xdb, 0xd4, 0x39, 0x28, 0xb4, 0x1c, + 0xc6, 0x19, 0x9a, 0xf0, 0x37, 0x0b, 0xc1, 0xa6, 0xba, 0xaa, 0x33, 0xb7, 0xc9, 0x5c, 0xad, 0x46, + 0x5c, 0xea, 0x5b, 0x6a, 0x7b, 0xeb, 0x35, 0xca, 0xc9, 0xba, 0xd6, 0x22, 0x75, 0xd3, 0x26, 0xdc, + 0x64, 0xb6, 0xef, 0xac, 0x4e, 0xd6, 0x59, 0x9d, 0x89, 0x47, 0xcd, 0x7b, 0x92, 0xab, 0xb3, 0x75, + 0xc6, 0xea, 0x16, 0xd5, 0x48, 0xcb, 0xd4, 0x88, 0x6d, 0x33, 0x2e, 0x5c, 0x5c, 0xb9, 0xbb, 0x14, + 0xa7, 0x21, 0x86, 0xe1, 0x50, 0xd7, 0xad, 0xb6, 0xed, 0x1a, 0xb3, 0x0d, 0xd3, 0xae, 0x4b, 0xc3, + 0x2b, 0x71, 0x43, 0xda, 0x62, 0x7a, 0xa3, 0xca, 0x1d, 0xa2, 0x3f, 0xa2, 0x8e, 0x34, 0x9a, 0x8f, + 0x1b, 0x35, 0x98, 0xcb, 0xab, 0xdf, 0x32, 0x9b, 0x06, 0x30, 0x71, 0x83, 0x16, 0x71, 0x48, 0x33, + 0x80, 0x59, 0x88, 0xef, 0x72, 0x87, 0x18, 0xb4, 0xea, 0xb0, 0x36, 0xa7, 0x59, 0x19, 0xf6, 0x88, + 0x65, 0x1a, 0x84, 0x33, 0x89, 0x80, 0x9f, 0xc0, 0xf2, 0xe7, 0x5e, 0x99, 0xca, 0x36, 0xa7, 0x8e, + 0xde, 0x20, 0xa6, 0x5d, 0xd2, 0x75, 0xd6, 0xb6, 0xf9, 0x1d, 0x87, 0x35, 0x4b, 0xfe, 0xc7, 0x55, + 0xe8, 0xe3, 0x36, 0x75, 0x39, 0x9a, 0x84, 0x73, 0xec, 0x1b, 0x9b, 0x3a, 0x39, 0xe5, 0x2d, 0x65, + 0xf9, 0x42, 0xc5, 0x7f, 0x41, 0xb7, 0xe0, 0xa2, 0xce, 0x6c, 0x9b, 0xea, 0x5e, 0x9d, 0xaa, 0xa6, + 0x91, 0x3b, 0xe3, 0xed, 0x6e, 0xe5, 0x5e, 0x1e, 0xcd, 0x4f, 0x1e, 0x90, 0xa6, 0xb5, 0x89, 0x7b, + 0xb6, 0x71, 0x65, 0xbc, 0xfb, 0x5e, 0x36, 0xf0, 0x53, 0x05, 0x56, 0x06, 0x20, 0x70, 0x5b, 0xcc, + 0x76, 0x29, 0xd2, 0x41, 0x35, 0x43, 0xbb, 0x2a, 0xf1, 0x0d, 0xab, 0xb2, 0x09, 0x3e, 0xd7, 0xd6, + 0xdb, 0x2f, 0x8f, 0xe6, 0x17, 0xfc, 0xcc, 0xd9, 0xb6, 0xb8, 0x92, 0x33, 0xe3, 0x09, 0x65, 0x32, + 0x3c, 0x09, 0x48, 0x10, 0xed, 0x8a, 0x62, 0xcb, 0xaf, 0xc7, 0x3b, 0xf0, 0x7a, 0xcf, 0xaa, 0x24, + 0x7a, 0x17, 0x46, 0xfc, 0xa6, 0x88, 0xec, 0x63, 0xc5, 0xa9, 0x42, 0xec, 0x4c, 0x16, 0x7c, 0x87, + 0xad, 0xe1, 0xe7, 0x47, 0xf3, 0x43, 0x15, 0x69, 0x8c, 0xdf, 0x83, 0x69, 0x11, 0xed, 0x2e, 0xe5, + 0x0f, 0x82, 0x96, 0x84, 0x85, 0x9e, 0x86, 0x51, 0x1f, 0xda, 0x34, 0x64, 0xad, 0xcf, 0x8b, 0xf7, + 0xb2, 0x81, 0xbf, 0x04, 0x35, 0xcd, 0x4f, 0xc2, 0x6c, 0x02, 0x84, 0x0d, 0xf6, 0x80, 0xce, 0x2e, + 0x8f, 0x15, 0xd5, 0x04, 0x50, 0xe8, 0x58, 0x89, 0x58, 0xe3, 0x1b, 0x30, 0x15, 0x44, 0xde, 0x66, + 0x2e, 0x7f, 0xc8, 0x6c, 0x3a, 0x10, 0x4f, 0x2e, 0xe9, 0x25, 0x69, 0x3e, 0x80, 0x0b, 0xe1, 0x81, + 0x96, 0xd5, 0x99, 0x4e, 0xc0, 0x04, 0x5e, 0xb2, 0x3e, 0xa3, 0x0d, 0xf9, 0x8e, 0x89, 0xe4, 0x29, + 0x59, 0x56, 0x9c, 0xe7, 0x0e, 0x40, 0xf7, 0x36, 0xcb, 0xc8, 0x57, 0x0b, 0xfe, 0xd5, 0x2f, 0x78, + 0x57, 0xbf, 0xe0, 0x0f, 0x09, 0x79, 0xf5, 0x0b, 0xbb, 0xa4, 0x1e, 0xf8, 0x56, 0x22, 0x9e, 0xf8, + 0x99, 0x22, 0xe9, 0x7b, 0x72, 0xa4, 0xd3, 0x9f, 0x3d, 0x15, 0x3d, 0xba, 0xdb, 0x83, 0x78, 0x46, + 0x20, 0x2e, 0xfd, 0x2f, 0xa2, 0x9f, 0xba, 0x87, 0x51, 0x93, 0x07, 0xe5, 0x53, 0x66, 0xb4, 0x2d, + 0x1a, 0xbb, 0x91, 0x08, 0x86, 0x6d, 0xd2, 0xa4, 0xb2, 0x29, 0xe2, 0x19, 0xbf, 0x23, 0x4f, 0x48, + 0xcc, 0x41, 0x7e, 0x15, 0x82, 0x61, 0xef, 0x06, 0x04, 0x1e, 0xde, 0x33, 0xde, 0x86, 0x99, 0xa0, + 0x87, 0xb7, 0xbd, 0x29, 0x75, 0xdf, 0x1f, 0x52, 0x41, 0x92, 0x15, 0x78, 0xcd, 0x1f, 0x5e, 0xa6, + 0x41, 0x6d, 0x6e, 0x7e, 0x6d, 0x86, 0x13, 0x60, 0x42, 0xac, 0x97, 0xc3, 0x65, 0xdc, 0x80, 0xd9, + 0xf4, 0x48, 0x32, 0xfb, 0x36, 0x5c, 0xec, 0x99, 0x83, 0xb2, 0x77, 0x73, 0x89, 0xba, 0x46, 0xbd, + 0x65, 0x6d, 0xc7, 0x69, 0x64, 0x0d, 0xcf, 0x49, 0xe6, 0x92, 0x65, 0xa5, 0x30, 0x87, 0x20, 0x89, + 0xed, 0x6c, 0x90, 0xb3, 0xaf, 0x06, 0xf2, 0x15, 0x2c, 0x04, 0x9f, 0xfc, 0x19, 0xdd, 0xe7, 0xbb, + 0xde, 0x2a, 0xbf, 0xe7, 0x61, 0xd8, 0x7a, 0x78, 0x60, 0xe7, 0x00, 0xf4, 0x06, 0xb1, 0x6d, 0x6a, + 0x75, 0xaf, 0xd0, 0x05, 0xb9, 0x52, 0x36, 0xd0, 0x14, 0x9c, 0x6f, 0x31, 0x87, 0x87, 0xc3, 0xb3, + 0x32, 0xe2, 0xbd, 0x96, 0x0d, 0xfc, 0x11, 0xe0, 0x7e, 0xc1, 0xe5, 0xc7, 0xa8, 0x30, 0xea, 0xca, + 0x35, 0x11, 0x7b, 0xb8, 0x12, 0xbe, 0xe3, 0x22, 0xbc, 0xe9, 0x17, 0xc2, 0x3f, 0x07, 0x5f, 0x04, + 0x32, 0xe5, 0xa2, 0x1c, 0x9c, 0xef, 0x99, 0x9b, 0x95, 0xe0, 0x15, 0xef, 0x43, 0x3e, 0xdd, 0x27, + 0xcc, 0xf8, 0x00, 0x50, 0x42, 0xf8, 0x82, 0x79, 0xb3, 0x90, 0xa8, 0x61, 0x3c, 0x8e, 0xac, 0xe3, + 0x65, 0x12, 0x8f, 0x8f, 0xdf, 0x90, 0x33, 0xb6, 0x64, 0x59, 0xf7, 0x3d, 0x2d, 0xab, 0x78, 0x52, + 0xe6, 0x62, 0xbd, 0xdb, 0xec, 0xc8, 0x72, 0x48, 0xf3, 0x31, 0x8c, 0x47, 0x94, 0x2f, 0xe0, 0x98, + 0x49, 0x70, 0x74, 0x7d, 0x25, 0xc1, 0x18, 0xef, 0x46, 0x2b, 0x7e, 0x7f, 0x09, 0xce, 0x89, 0x2c, + 0xe8, 0x09, 0x8c, 0xf8, 0x33, 0x1b, 0x5d, 0x49, 0xc4, 0x48, 0x0a, 0x83, 0xba, 0xd8, 0xdf, 0xc8, + 0x87, 0xc4, 0xab, 0xdf, 0xfd, 0xf5, 0xef, 0x8f, 0x67, 0x16, 0x11, 0xd6, 0xee, 0x09, 0x6b, 0x8b, + 0xd4, 0x5c, 0x2d, 0x5d, 0xde, 0xd1, 0x33, 0x05, 0xa0, 0x3b, 0xdd, 0xd1, 0x6a, 0x7a, 0x82, 0x34, + 0xe9, 0x50, 0xaf, 0x0d, 0x64, 0x2b, 0x99, 0x36, 0x05, 0xd3, 0x0d, 0x54, 0x94, 0x4c, 0xd7, 0x77, + 0xd2, 0xa0, 0xba, 0x1a, 0xa1, 0x1d, 0x06, 0x32, 0xd0, 0x41, 0xbf, 0x28, 0x30, 0x1a, 0x4c, 0x3f, + 0xb4, 0x9c, 0x99, 0x35, 0x36, 0xba, 0xd5, 0x95, 0x01, 0x2c, 0x25, 0xdd, 0x4d, 0x41, 0xb7, 0x81, + 0xd6, 0xfb, 0xd2, 0x85, 0x33, 0x3a, 0x0a, 0xf7, 0x83, 0x02, 0x63, 0x41, 0xbc, 0x92, 0x65, 0x65, + 0xf1, 0x25, 0xa5, 0x25, 0x8b, 0x2f, 0x45, 0x20, 0x70, 0x41, 0xf0, 0x2d, 0xa3, 0xab, 0x83, 0xf1, + 0xa1, 0xdf, 0x14, 0xb8, 0xd8, 0x33, 0x94, 0xb3, 0x1a, 0x9b, 0x36, 0xea, 0xb3, 0x1a, 0x9b, 0x3a, + 0xe5, 0x07, 0x6c, 0x6c, 0x53, 0xf8, 0x06, 0xbf, 0x88, 0xb4, 0x43, 0x4f, 0x3e, 0x3a, 0xe8, 0x27, + 0x05, 0x66, 0xfb, 0xfd, 0x16, 0x43, 0x37, 0xd3, 0x49, 0x06, 0xf8, 0x05, 0xa9, 0x6e, 0xbe, 0x8a, + 0xab, 0xbc, 0xe5, 0x7f, 0x28, 0x30, 0x1e, 0x9d, 0xc6, 0x68, 0x2d, 0xf3, 0x28, 0xa5, 0x28, 0x82, + 0x7a, 0x7d, 0x40, 0x6b, 0x59, 0xc1, 0xdb, 0xa2, 0x82, 0x1f, 0xa2, 0x5b, 0x7d, 0x2b, 0xd8, 0xa3, + 0x21, 0xda, 0x61, 0x5c, 0x26, 0x3b, 0xe8, 0x57, 0x05, 0x26, 0xa2, 0xf1, 0xbd, 0xc3, 0xb8, 0x96, + 0x79, 0xc4, 0x4e, 0xc1, 0x9d, 0x21, 0x6c, 0xb8, 0x28, 0xb8, 0xd7, 0xd0, 0xea, 0xe0, 0xdc, 0xe8, + 0x4f, 0x05, 0x50, 0x52, 0x5e, 0x50, 0x31, 0xb3, 0x62, 0x99, 0x42, 0xa7, 0x6e, 0x9c, 0xca, 0x47, + 0x32, 0xef, 0x0a, 0xe6, 0x4f, 0xd0, 0x76, 0x5f, 0x66, 0x9b, 0xee, 0xf3, 0x6a, 0x4b, 0x44, 0xa8, + 0x06, 0xf2, 0x26, 0xee, 0xbc, 0x94, 0xd5, 0x8e, 0x76, 0x28, 0x45, 0xb4, 0x83, 0x7e, 0x57, 0xe0, + 0x72, 0x52, 0xf1, 0x96, 0x32, 0x4a, 0x19, 0x37, 0x54, 0xb5, 0x01, 0x0d, 0x4f, 0x39, 0xaa, 0xba, + 0x52, 0xa9, 0x1d, 0xca, 0x4b, 0xd7, 0x41, 0x3f, 0x2b, 0x70, 0xa9, 0x57, 0xd7, 0xd0, 0x62, 0x66, + 0xcb, 0x23, 0x56, 0xea, 0xda, 0x20, 0x56, 0x21, 0xe1, 0xba, 0x20, 0xbc, 0x86, 0x56, 0xfa, 0x12, + 0x46, 0x65, 0x74, 0x6b, 0xe7, 0xf9, 0x71, 0x5e, 0x79, 0x71, 0x9c, 0x57, 0xfe, 0x39, 0xce, 0x2b, + 0x4f, 0x4f, 0xf2, 0x43, 0x2f, 0x4e, 0xf2, 0x43, 0x7f, 0x9f, 0xe4, 0x87, 0x1e, 0x16, 0xeb, 0x26, + 0x6f, 0xb4, 0x6b, 0x05, 0x9d, 0x35, 0xd3, 0xc2, 0xed, 0x15, 0xdf, 0xd7, 0xf6, 0x23, 0x41, 0x0f, + 0x5a, 0xd4, 0xad, 0x8d, 0x88, 0xff, 0x9b, 0x1b, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x18, 0x4d, + 0xd0, 0x43, 0xd0, 0x0f, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type QueryClient interface { + // Parameters queries the parameters of the module. + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + // Queries a Validator by host zone. + Validators(ctx context.Context, in *QueryGetValidatorsRequest, opts ...grpc.CallOption) (*QueryGetValidatorsResponse, error) + // Queries a HostZone by id. + HostZone(ctx context.Context, in *QueryGetHostZoneRequest, opts ...grpc.CallOption) (*QueryGetHostZoneResponse, error) + // Queries a list of HostZone items. + HostZoneAll(ctx context.Context, in *QueryAllHostZoneRequest, opts ...grpc.CallOption) (*QueryAllHostZoneResponse, error) + // Queries a list of ModuleAddress items. + ModuleAddress(ctx context.Context, in *QueryModuleAddressRequest, opts ...grpc.CallOption) (*QueryModuleAddressResponse, error) + // QueryInterchainAccountFromAddress returns the interchain account for given + // owner address on a given connection pair + InterchainAccountFromAddress(ctx context.Context, in *QueryInterchainAccountFromAddressRequest, opts ...grpc.CallOption) (*QueryInterchainAccountFromAddressResponse, error) + // Queries a EpochTracker by index. + EpochTracker(ctx context.Context, in *QueryGetEpochTrackerRequest, opts ...grpc.CallOption) (*QueryGetEpochTrackerResponse, error) + // Queries a list of EpochTracker items. + EpochTrackerAll(ctx context.Context, in *QueryAllEpochTrackerRequest, opts ...grpc.CallOption) (*QueryAllEpochTrackerResponse, error) + // Queries the next packet sequence for one for a given channel + NextPacketSequence(ctx context.Context, in *QueryGetNextPacketSequenceRequest, opts ...grpc.CallOption) (*QueryGetNextPacketSequenceResponse, error) + // Queries an address's unbondings + AddressUnbondings(ctx context.Context, in *QueryAddressUnbondings, opts ...grpc.CallOption) (*QueryAddressUnbondingsResponse, error) + // Queries all trade routes + AllTradeRoutes(ctx context.Context, in *QueryAllTradeRoutes, opts ...grpc.CallOption) (*QueryAllTradeRoutesResponse, error) +} + +type queryClient struct { + cc grpc1.ClientConn +} + +func NewQueryClient(cc grpc1.ClientConn) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Query/Params", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) Validators(ctx context.Context, in *QueryGetValidatorsRequest, opts ...grpc.CallOption) (*QueryGetValidatorsResponse, error) { + out := new(QueryGetValidatorsResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Query/Validators", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) HostZone(ctx context.Context, in *QueryGetHostZoneRequest, opts ...grpc.CallOption) (*QueryGetHostZoneResponse, error) { + out := new(QueryGetHostZoneResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Query/HostZone", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) HostZoneAll(ctx context.Context, in *QueryAllHostZoneRequest, opts ...grpc.CallOption) (*QueryAllHostZoneResponse, error) { + out := new(QueryAllHostZoneResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Query/HostZoneAll", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) ModuleAddress(ctx context.Context, in *QueryModuleAddressRequest, opts ...grpc.CallOption) (*QueryModuleAddressResponse, error) { + out := new(QueryModuleAddressResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Query/ModuleAddress", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) InterchainAccountFromAddress(ctx context.Context, in *QueryInterchainAccountFromAddressRequest, opts ...grpc.CallOption) (*QueryInterchainAccountFromAddressResponse, error) { + out := new(QueryInterchainAccountFromAddressResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Query/InterchainAccountFromAddress", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) EpochTracker(ctx context.Context, in *QueryGetEpochTrackerRequest, opts ...grpc.CallOption) (*QueryGetEpochTrackerResponse, error) { + out := new(QueryGetEpochTrackerResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Query/EpochTracker", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) EpochTrackerAll(ctx context.Context, in *QueryAllEpochTrackerRequest, opts ...grpc.CallOption) (*QueryAllEpochTrackerResponse, error) { + out := new(QueryAllEpochTrackerResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Query/EpochTrackerAll", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) NextPacketSequence(ctx context.Context, in *QueryGetNextPacketSequenceRequest, opts ...grpc.CallOption) (*QueryGetNextPacketSequenceResponse, error) { + out := new(QueryGetNextPacketSequenceResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Query/NextPacketSequence", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) AddressUnbondings(ctx context.Context, in *QueryAddressUnbondings, opts ...grpc.CallOption) (*QueryAddressUnbondingsResponse, error) { + out := new(QueryAddressUnbondingsResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Query/AddressUnbondings", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) AllTradeRoutes(ctx context.Context, in *QueryAllTradeRoutes, opts ...grpc.CallOption) (*QueryAllTradeRoutesResponse, error) { + out := new(QueryAllTradeRoutesResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Query/AllTradeRoutes", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +type QueryServer interface { + // Parameters queries the parameters of the module. + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + // Queries a Validator by host zone. + Validators(context.Context, *QueryGetValidatorsRequest) (*QueryGetValidatorsResponse, error) + // Queries a HostZone by id. + HostZone(context.Context, *QueryGetHostZoneRequest) (*QueryGetHostZoneResponse, error) + // Queries a list of HostZone items. + HostZoneAll(context.Context, *QueryAllHostZoneRequest) (*QueryAllHostZoneResponse, error) + // Queries a list of ModuleAddress items. + ModuleAddress(context.Context, *QueryModuleAddressRequest) (*QueryModuleAddressResponse, error) + // QueryInterchainAccountFromAddress returns the interchain account for given + // owner address on a given connection pair + InterchainAccountFromAddress(context.Context, *QueryInterchainAccountFromAddressRequest) (*QueryInterchainAccountFromAddressResponse, error) + // Queries a EpochTracker by index. + EpochTracker(context.Context, *QueryGetEpochTrackerRequest) (*QueryGetEpochTrackerResponse, error) + // Queries a list of EpochTracker items. + EpochTrackerAll(context.Context, *QueryAllEpochTrackerRequest) (*QueryAllEpochTrackerResponse, error) + // Queries the next packet sequence for one for a given channel + NextPacketSequence(context.Context, *QueryGetNextPacketSequenceRequest) (*QueryGetNextPacketSequenceResponse, error) + // Queries an address's unbondings + AddressUnbondings(context.Context, *QueryAddressUnbondings) (*QueryAddressUnbondingsResponse, error) + // Queries all trade routes + AllTradeRoutes(context.Context, *QueryAllTradeRoutes) (*QueryAllTradeRoutesResponse, error) +} + +// UnimplementedQueryServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +} +func (*UnimplementedQueryServer) Validators(ctx context.Context, req *QueryGetValidatorsRequest) (*QueryGetValidatorsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Validators not implemented") +} +func (*UnimplementedQueryServer) HostZone(ctx context.Context, req *QueryGetHostZoneRequest) (*QueryGetHostZoneResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method HostZone not implemented") +} +func (*UnimplementedQueryServer) HostZoneAll(ctx context.Context, req *QueryAllHostZoneRequest) (*QueryAllHostZoneResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method HostZoneAll not implemented") +} +func (*UnimplementedQueryServer) ModuleAddress(ctx context.Context, req *QueryModuleAddressRequest) (*QueryModuleAddressResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ModuleAddress not implemented") +} +func (*UnimplementedQueryServer) InterchainAccountFromAddress(ctx context.Context, req *QueryInterchainAccountFromAddressRequest) (*QueryInterchainAccountFromAddressResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method InterchainAccountFromAddress not implemented") +} +func (*UnimplementedQueryServer) EpochTracker(ctx context.Context, req *QueryGetEpochTrackerRequest) (*QueryGetEpochTrackerResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EpochTracker not implemented") +} +func (*UnimplementedQueryServer) EpochTrackerAll(ctx context.Context, req *QueryAllEpochTrackerRequest) (*QueryAllEpochTrackerResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EpochTrackerAll not implemented") +} +func (*UnimplementedQueryServer) NextPacketSequence(ctx context.Context, req *QueryGetNextPacketSequenceRequest) (*QueryGetNextPacketSequenceResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method NextPacketSequence not implemented") +} +func (*UnimplementedQueryServer) AddressUnbondings(ctx context.Context, req *QueryAddressUnbondings) (*QueryAddressUnbondingsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AddressUnbondings not implemented") +} +func (*UnimplementedQueryServer) AllTradeRoutes(ctx context.Context, req *QueryAllTradeRoutes) (*QueryAllTradeRoutesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AllTradeRoutes not implemented") +} + +func RegisterQueryServer(s grpc1.Server, srv QueryServer) { + s.RegisterService(&_Query_serviceDesc, srv) +} + +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Params(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Query/Params", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_Validators_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetValidatorsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Validators(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Query/Validators", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Validators(ctx, req.(*QueryGetValidatorsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_HostZone_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetHostZoneRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).HostZone(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Query/HostZone", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).HostZone(ctx, req.(*QueryGetHostZoneRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_HostZoneAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllHostZoneRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).HostZoneAll(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Query/HostZoneAll", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).HostZoneAll(ctx, req.(*QueryAllHostZoneRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_ModuleAddress_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryModuleAddressRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ModuleAddress(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Query/ModuleAddress", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ModuleAddress(ctx, req.(*QueryModuleAddressRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_InterchainAccountFromAddress_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryInterchainAccountFromAddressRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).InterchainAccountFromAddress(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Query/InterchainAccountFromAddress", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).InterchainAccountFromAddress(ctx, req.(*QueryInterchainAccountFromAddressRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_EpochTracker_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetEpochTrackerRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).EpochTracker(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Query/EpochTracker", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).EpochTracker(ctx, req.(*QueryGetEpochTrackerRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_EpochTrackerAll_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllEpochTrackerRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).EpochTrackerAll(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Query/EpochTrackerAll", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).EpochTrackerAll(ctx, req.(*QueryAllEpochTrackerRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_NextPacketSequence_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryGetNextPacketSequenceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).NextPacketSequence(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Query/NextPacketSequence", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).NextPacketSequence(ctx, req.(*QueryGetNextPacketSequenceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_AddressUnbondings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAddressUnbondings) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).AddressUnbondings(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Query/AddressUnbondings", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).AddressUnbondings(ctx, req.(*QueryAddressUnbondings)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_AllTradeRoutes_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryAllTradeRoutes) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).AllTradeRoutes(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Query/AllTradeRoutes", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).AllTradeRoutes(ctx, req.(*QueryAllTradeRoutes)) + } + return interceptor(ctx, in, info, handler) +} + +var _Query_serviceDesc = grpc.ServiceDesc{ + ServiceName: "stride.stakeibc.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + { + MethodName: "Validators", + Handler: _Query_Validators_Handler, + }, + { + MethodName: "HostZone", + Handler: _Query_HostZone_Handler, + }, + { + MethodName: "HostZoneAll", + Handler: _Query_HostZoneAll_Handler, + }, + { + MethodName: "ModuleAddress", + Handler: _Query_ModuleAddress_Handler, + }, + { + MethodName: "InterchainAccountFromAddress", + Handler: _Query_InterchainAccountFromAddress_Handler, + }, + { + MethodName: "EpochTracker", + Handler: _Query_EpochTracker_Handler, + }, + { + MethodName: "EpochTrackerAll", + Handler: _Query_EpochTrackerAll_Handler, + }, + { + MethodName: "NextPacketSequence", + Handler: _Query_NextPacketSequence_Handler, + }, + { + MethodName: "AddressUnbondings", + Handler: _Query_AddressUnbondings_Handler, + }, + { + MethodName: "AllTradeRoutes", + Handler: _Query_AllTradeRoutes_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "stride/stakeibc/query.proto", +} + +func (m *QueryInterchainAccountFromAddressRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryInterchainAccountFromAddressRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryInterchainAccountFromAddressRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ConnectionId) > 0 { + i -= len(m.ConnectionId) + copy(dAtA[i:], m.ConnectionId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ConnectionId))) + i-- + dAtA[i] = 0x12 + } + if len(m.Owner) > 0 { + i -= len(m.Owner) + copy(dAtA[i:], m.Owner) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Owner))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryInterchainAccountFromAddressResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryInterchainAccountFromAddressResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryInterchainAccountFromAddressResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.InterchainAccountAddress) > 0 { + i -= len(m.InterchainAccountAddress) + copy(dAtA[i:], m.InterchainAccountAddress) + i = encodeVarintQuery(dAtA, i, uint64(len(m.InterchainAccountAddress))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryGetValidatorsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryGetValidatorsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryGetValidatorsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryGetValidatorsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryGetValidatorsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryGetValidatorsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Validators) > 0 { + for iNdEx := len(m.Validators) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Validators[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryGetHostZoneRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryGetHostZoneRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryGetHostZoneRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryGetHostZoneResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryGetHostZoneResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryGetHostZoneResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.HostZone.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryAllHostZoneRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryAllHostZoneRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllHostZoneRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryAllHostZoneResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryAllHostZoneResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllHostZoneResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.HostZone) > 0 { + for iNdEx := len(m.HostZone) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.HostZone[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryModuleAddressRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryModuleAddressRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryModuleAddressRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryModuleAddressResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryModuleAddressResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryModuleAddressResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Addr) > 0 { + i -= len(m.Addr) + copy(dAtA[i:], m.Addr) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Addr))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryGetEpochTrackerRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryGetEpochTrackerRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryGetEpochTrackerRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.EpochIdentifier) > 0 { + i -= len(m.EpochIdentifier) + copy(dAtA[i:], m.EpochIdentifier) + i = encodeVarintQuery(dAtA, i, uint64(len(m.EpochIdentifier))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryGetEpochTrackerResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryGetEpochTrackerResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryGetEpochTrackerResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.EpochTracker.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryAllEpochTrackerRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryAllEpochTrackerRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllEpochTrackerRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryAllEpochTrackerResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryAllEpochTrackerResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllEpochTrackerResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.EpochTracker) > 0 { + for iNdEx := len(m.EpochTracker) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.EpochTracker[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryGetNextPacketSequenceRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryGetNextPacketSequenceRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryGetNextPacketSequenceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.PortId) > 0 { + i -= len(m.PortId) + copy(dAtA[i:], m.PortId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.PortId))) + i-- + dAtA[i] = 0x12 + } + if len(m.ChannelId) > 0 { + i -= len(m.ChannelId) + copy(dAtA[i:], m.ChannelId) + i = encodeVarintQuery(dAtA, i, uint64(len(m.ChannelId))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryGetNextPacketSequenceResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryGetNextPacketSequenceResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryGetNextPacketSequenceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Sequence != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Sequence)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *QueryAddressUnbondings) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryAddressUnbondings) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAddressUnbondings) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryAddressUnbondingsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryAddressUnbondingsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAddressUnbondingsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.AddressUnbondings) > 0 { + for iNdEx := len(m.AddressUnbondings) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.AddressUnbondings[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryAllTradeRoutes) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryAllTradeRoutes) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllTradeRoutes) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryAllTradeRoutesResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryAllTradeRoutesResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryAllTradeRoutesResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.TradeRoutes) > 0 { + for iNdEx := len(m.TradeRoutes) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.TradeRoutes[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *QueryInterchainAccountFromAddressRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Owner) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.ConnectionId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryInterchainAccountFromAddressResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.InterchainAccountAddress) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryGetValidatorsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryGetValidatorsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Validators) > 0 { + for _, e := range m.Validators { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryGetHostZoneRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryGetHostZoneResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.HostZone.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryAllHostZoneRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAllHostZoneResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.HostZone) > 0 { + for _, e := range m.HostZone { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryModuleAddressRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryModuleAddressResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Addr) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryGetEpochTrackerRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.EpochIdentifier) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryGetEpochTrackerResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.EpochTracker.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryAllEpochTrackerRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryAllEpochTrackerResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.EpochTracker) > 0 { + for _, e := range m.EpochTracker { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryGetNextPacketSequenceRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ChannelId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.PortId) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryGetNextPacketSequenceResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Sequence != 0 { + n += 1 + sovQuery(uint64(m.Sequence)) + } + return n +} + +func (m *QueryAddressUnbondings) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Address) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryAddressUnbondingsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.AddressUnbondings) > 0 { + for _, e := range m.AddressUnbondings { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryAllTradeRoutes) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryAllTradeRoutesResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.TradeRoutes) > 0 { + for _, e := range m.TradeRoutes { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryInterchainAccountFromAddressRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryInterchainAccountFromAddressRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryInterchainAccountFromAddressRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Owner", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Owner = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConnectionId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ConnectionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryInterchainAccountFromAddressResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryInterchainAccountFromAddressResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryInterchainAccountFromAddressResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field InterchainAccountAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.InterchainAccountAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryGetValidatorsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryGetValidatorsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryGetValidatorsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryGetValidatorsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryGetValidatorsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryGetValidatorsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Validators", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Validators = append(m.Validators, &Validator{}) + if err := m.Validators[len(m.Validators)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryGetHostZoneRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryGetHostZoneRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryGetHostZoneRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryGetHostZoneResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryGetHostZoneResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryGetHostZoneResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZone", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.HostZone.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllHostZoneRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAllHostZoneRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllHostZoneRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllHostZoneResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAllHostZoneResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllHostZoneResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZone", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZone = append(m.HostZone, HostZone{}) + if err := m.HostZone[len(m.HostZone)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryModuleAddressRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryModuleAddressRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryModuleAddressRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryModuleAddressResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryModuleAddressResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryModuleAddressResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Addr", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Addr = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryGetEpochTrackerRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryGetEpochTrackerRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryGetEpochTrackerRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EpochIdentifier", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.EpochIdentifier = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryGetEpochTrackerResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryGetEpochTrackerResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryGetEpochTrackerResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EpochTracker", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.EpochTracker.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllEpochTrackerRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAllEpochTrackerRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllEpochTrackerRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllEpochTrackerResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAllEpochTrackerResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllEpochTrackerResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EpochTracker", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.EpochTracker = append(m.EpochTracker, EpochTracker{}) + if err := m.EpochTracker[len(m.EpochTracker)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryGetNextPacketSequenceRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryGetNextPacketSequenceRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryGetNextPacketSequenceRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PortId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.PortId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryGetNextPacketSequenceResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryGetNextPacketSequenceResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryGetNextPacketSequenceResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Sequence", wireType) + } + m.Sequence = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Sequence |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAddressUnbondings) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAddressUnbondings: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAddressUnbondings: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAddressUnbondingsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAddressUnbondingsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAddressUnbondingsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AddressUnbondings", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AddressUnbondings = append(m.AddressUnbondings, AddressUnbonding{}) + if err := m.AddressUnbondings[len(m.AddressUnbondings)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllTradeRoutes) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAllTradeRoutes: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllTradeRoutes: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryAllTradeRoutesResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryAllTradeRoutesResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryAllTradeRoutesResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TradeRoutes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TradeRoutes = append(m.TradeRoutes, TradeRoute{}) + if err := m.TradeRoutes[len(m.TradeRoutes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipQuery(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthQuery + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupQuery + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthQuery + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/stakeibc/types/query.pb.gw.go b/x/stakeibc/types/query.pb.gw.go new file mode 100644 index 00000000000..09aeee14b9f --- /dev/null +++ b/x/stakeibc/types/query.pb.gw.go @@ -0,0 +1,994 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: stride/stakeibc/query.proto + +/* +Package types is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package types + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage +var _ = metadata.Join + +func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := server.Params(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_Validators_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetValidatorsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["chain_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "chain_id") + } + + protoReq.ChainId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "chain_id", err) + } + + msg, err := client.Validators(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Validators_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetValidatorsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["chain_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "chain_id") + } + + protoReq.ChainId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "chain_id", err) + } + + msg, err := server.Validators(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_HostZone_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetHostZoneRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["chain_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "chain_id") + } + + protoReq.ChainId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "chain_id", err) + } + + msg, err := client.HostZone(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_HostZone_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetHostZoneRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["chain_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "chain_id") + } + + protoReq.ChainId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "chain_id", err) + } + + msg, err := server.HostZone(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_HostZoneAll_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Query_HostZoneAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllHostZoneRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_HostZoneAll_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.HostZoneAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_HostZoneAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllHostZoneRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_HostZoneAll_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.HostZoneAll(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_ModuleAddress_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryModuleAddressRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + + msg, err := client.ModuleAddress(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_ModuleAddress_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryModuleAddressRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["name"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "name") + } + + protoReq.Name, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "name", err) + } + + msg, err := server.ModuleAddress(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_EpochTracker_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetEpochTrackerRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["epoch_identifier"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "epoch_identifier") + } + + protoReq.EpochIdentifier, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "epoch_identifier", err) + } + + msg, err := client.EpochTracker(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_EpochTracker_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetEpochTrackerRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["epoch_identifier"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "epoch_identifier") + } + + protoReq.EpochIdentifier, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "epoch_identifier", err) + } + + msg, err := server.EpochTracker(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_EpochTrackerAll_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllEpochTrackerRequest + var metadata runtime.ServerMetadata + + msg, err := client.EpochTrackerAll(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_EpochTrackerAll_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllEpochTrackerRequest + var metadata runtime.ServerMetadata + + msg, err := server.EpochTrackerAll(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_NextPacketSequence_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetNextPacketSequenceRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["channel_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "channel_id") + } + + protoReq.ChannelId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "channel_id", err) + } + + val, ok = pathParams["port_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "port_id") + } + + protoReq.PortId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "port_id", err) + } + + msg, err := client.NextPacketSequence(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_NextPacketSequence_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryGetNextPacketSequenceRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["channel_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "channel_id") + } + + protoReq.ChannelId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "channel_id", err) + } + + val, ok = pathParams["port_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "port_id") + } + + protoReq.PortId, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "port_id", err) + } + + msg, err := server.NextPacketSequence(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_AddressUnbondings_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAddressUnbondings + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") + } + + protoReq.Address, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) + } + + msg, err := client.AddressUnbondings(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_AddressUnbondings_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAddressUnbondings + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") + } + + protoReq.Address, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) + } + + msg, err := server.AddressUnbondings(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_AllTradeRoutes_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllTradeRoutes + var metadata runtime.ServerMetadata + + msg, err := client.AllTradeRoutes(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_AllTradeRoutes_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryAllTradeRoutes + var metadata runtime.ServerMetadata + + msg, err := server.AllTradeRoutes(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". +// UnaryRPC :call QueryServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_Validators_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_Validators_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Validators_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_HostZone_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_HostZone_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_HostZone_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_HostZoneAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_HostZoneAll_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_HostZoneAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_ModuleAddress_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_ModuleAddress_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_ModuleAddress_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_EpochTracker_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_EpochTracker_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_EpochTracker_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_EpochTrackerAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_EpochTrackerAll_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_EpochTrackerAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_NextPacketSequence_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_NextPacketSequence_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_NextPacketSequence_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_AddressUnbondings_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_AddressUnbondings_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_AddressUnbondings_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_AllTradeRoutes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_AllTradeRoutes_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_AllTradeRoutes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterQueryHandler(ctx, mux, conn) +} + +// RegisterQueryHandler registers the http handlers for service Query to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn)) +} + +// RegisterQueryHandlerClient registers the http handlers for service Query +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "QueryClient" to call the correct interceptors. +func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_Validators_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_Validators_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Validators_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_HostZone_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_HostZone_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_HostZone_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_HostZoneAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_HostZoneAll_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_HostZoneAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_ModuleAddress_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_ModuleAddress_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_ModuleAddress_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_EpochTracker_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_EpochTracker_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_EpochTracker_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_EpochTrackerAll_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_EpochTrackerAll_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_EpochTrackerAll_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_NextPacketSequence_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_NextPacketSequence_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_NextPacketSequence_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_AddressUnbondings_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_AddressUnbondings_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_AddressUnbondings_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_AllTradeRoutes_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_AllTradeRoutes_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_AllTradeRoutes_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"Stridelabs", "stride", "stakeibc", "params"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_Validators_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"Stride-Labs", "stride", "stakeibc", "validators", "chain_id"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_HostZone_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"Stride-Labs", "stride", "stakeibc", "host_zone", "chain_id"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_HostZoneAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"Stride-Labs", "stride", "stakeibc", "host_zone"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_ModuleAddress_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"Stride-Labs", "stride", "stakeibc", "module_address", "name"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_EpochTracker_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"Stride-Labs", "stride", "stakeibc", "epoch_tracker", "epoch_identifier"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_EpochTrackerAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"Stride-Labs", "stride", "stakeibc", "epoch_tracker"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_NextPacketSequence_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"Stride-Labs", "stride", "stakeibc", "next_packet_sequence", "channel_id", "port_id"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_AddressUnbondings_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"Stride-Labs", "stride", "stakeibc", "unbondings", "address"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_AllTradeRoutes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"Stride-Labs", "stride", "stakeibc", "trade_routes"}, "", runtime.AssumeColonVerbOpt(false))) +) + +var ( + forward_Query_Params_0 = runtime.ForwardResponseMessage + + forward_Query_Validators_0 = runtime.ForwardResponseMessage + + forward_Query_HostZone_0 = runtime.ForwardResponseMessage + + forward_Query_HostZoneAll_0 = runtime.ForwardResponseMessage + + forward_Query_ModuleAddress_0 = runtime.ForwardResponseMessage + + forward_Query_EpochTracker_0 = runtime.ForwardResponseMessage + + forward_Query_EpochTrackerAll_0 = runtime.ForwardResponseMessage + + forward_Query_NextPacketSequence_0 = runtime.ForwardResponseMessage + + forward_Query_AddressUnbondings_0 = runtime.ForwardResponseMessage + + forward_Query_AllTradeRoutes_0 = runtime.ForwardResponseMessage +) diff --git a/x/stakeibc/types/query_register_ica.go b/x/stakeibc/types/query_register_ica.go new file mode 100644 index 00000000000..44e349c6403 --- /dev/null +++ b/x/stakeibc/types/query_register_ica.go @@ -0,0 +1,16 @@ +package types + +// NewQueryInterchainAccountRequest creates and returns a new QueryInterchainAccountFromAddressRequest +func NewQueryInterchainAccountRequest(connectionID, owner string) *QueryInterchainAccountFromAddressRequest { + return &QueryInterchainAccountFromAddressRequest{ + ConnectionId: connectionID, + Owner: owner, + } +} + +// NewQueryInterchainAccountResponse creates and returns a new QueryInterchainAccountFromAddressResponse +func NewQueryInterchainAccountResponse(interchainAccAddr string) *QueryInterchainAccountFromAddressResponse { + return &QueryInterchainAccountFromAddressResponse{ + InterchainAccountAddress: interchainAccAddr, + } +} diff --git a/x/stakeibc/types/trade_route.go b/x/stakeibc/types/trade_route.go new file mode 100644 index 00000000000..c2090887182 --- /dev/null +++ b/x/stakeibc/types/trade_route.go @@ -0,0 +1,23 @@ +package types + +import fmt "fmt" + +// Builds the store key (as a string) from the reward and host denom's +func GetTradeRouteId(rewardDenom, hostDenom string) string { + return rewardDenom + "-" + hostDenom +} + +// Builds the store key (as a string) from the reward and host denom's +func (t TradeRoute) GetRouteId() string { + return GetTradeRouteId(t.RewardDenomOnRewardZone, t.HostDenomOnHostZone) +} + +// Builds the store key from the reward and host denom's +func (t TradeRoute) GetKey() []byte { + return TradeRouteKeyFromDenoms(t.RewardDenomOnRewardZone, t.HostDenomOnHostZone) +} + +// Human readable description for logging +func (t TradeRoute) Description() string { + return fmt.Sprintf("TradeRoute from %s to %s", t.RewardDenomOnRewardZone, t.HostDenomOnHostZone) +} diff --git a/x/stakeibc/types/trade_route.pb.go b/x/stakeibc/types/trade_route.pb.go new file mode 100644 index 00000000000..739029f52fa --- /dev/null +++ b/x/stakeibc/types/trade_route.pb.go @@ -0,0 +1,1393 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/stakeibc/trade_route.proto + +package types + +import ( + cosmossdk_io_math "cosmossdk.io/math" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// Deprecated, this configuration is no longer needed since swaps +// are executed off-chain via authz +// +// # Stores pool information needed to execute the swap along a trade route +// +// Deprecated: Do not use. +type TradeConfig struct { + // Currently Osmosis is the only trade chain so this is an osmosis pool id + PoolId uint64 `protobuf:"varint,1,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` + // Spot price in the pool to convert the reward denom to the host denom + // output_tokens = swap_price * input tokens + // This value may be slightly stale as it is updated by an ICQ + SwapPrice cosmossdk_io_math.LegacyDec `protobuf:"bytes,2,opt,name=swap_price,json=swapPrice,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"swap_price"` + // unix time in seconds that the price was last updated + PriceUpdateTimestamp uint64 `protobuf:"varint,3,opt,name=price_update_timestamp,json=priceUpdateTimestamp,proto3" json:"price_update_timestamp,omitempty"` + // Threshold defining the percentage of tokens that could be lost in the trade + // This captures both the loss from slippage and from a stale price on stride + // 0.05 means the output from the trade can be no less than a 5% deviation + // from the current value + MaxAllowedSwapLossRate cosmossdk_io_math.LegacyDec `protobuf:"bytes,4,opt,name=max_allowed_swap_loss_rate,json=maxAllowedSwapLossRate,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"max_allowed_swap_loss_rate"` + // min and max set boundaries of reward denom on trade chain we will swap + // min also decides when reward token transfers are worth it (transfer fees) + MinSwapAmount cosmossdk_io_math.Int `protobuf:"bytes,5,opt,name=min_swap_amount,json=minSwapAmount,proto3,customtype=cosmossdk.io/math.Int" json:"min_swap_amount"` + MaxSwapAmount cosmossdk_io_math.Int `protobuf:"bytes,6,opt,name=max_swap_amount,json=maxSwapAmount,proto3,customtype=cosmossdk.io/math.Int" json:"max_swap_amount"` +} + +func (m *TradeConfig) Reset() { *m = TradeConfig{} } +func (m *TradeConfig) String() string { return proto.CompactTextString(m) } +func (*TradeConfig) ProtoMessage() {} +func (*TradeConfig) Descriptor() ([]byte, []int) { + return fileDescriptor_c252b142ecf88017, []int{0} +} +func (m *TradeConfig) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TradeConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TradeConfig.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TradeConfig) XXX_Merge(src proto.Message) { + xxx_messageInfo_TradeConfig.Merge(m, src) +} +func (m *TradeConfig) XXX_Size() int { + return m.Size() +} +func (m *TradeConfig) XXX_DiscardUnknown() { + xxx_messageInfo_TradeConfig.DiscardUnknown(m) +} + +var xxx_messageInfo_TradeConfig proto.InternalMessageInfo + +func (m *TradeConfig) GetPoolId() uint64 { + if m != nil { + return m.PoolId + } + return 0 +} + +func (m *TradeConfig) GetPriceUpdateTimestamp() uint64 { + if m != nil { + return m.PriceUpdateTimestamp + } + return 0 +} + +// TradeRoute represents a round trip including info on transfer and how to do +// the swap. It makes the assumption that the reward token is always foreign to +// the host so therefore the first two hops are to unwind the ibc denom enroute +// to the trade chain and the last hop is the return so funds start/end in the +// withdrawl ICA on hostZone +// The structure is key'd on reward denom and host denom in their native forms +// (i.e. reward_denom_on_reward_zone and host_denom_on_host_zone) +type TradeRoute struct { + // ibc denom for the reward on the host zone + RewardDenomOnHostZone string `protobuf:"bytes,1,opt,name=reward_denom_on_host_zone,json=rewardDenomOnHostZone,proto3" json:"reward_denom_on_host_zone,omitempty"` + // should be the native denom for the reward chain + RewardDenomOnRewardZone string `protobuf:"bytes,2,opt,name=reward_denom_on_reward_zone,json=rewardDenomOnRewardZone,proto3" json:"reward_denom_on_reward_zone,omitempty"` + // ibc denom of the reward on the trade chain, input to the swap + RewardDenomOnTradeZone string `protobuf:"bytes,3,opt,name=reward_denom_on_trade_zone,json=rewardDenomOnTradeZone,proto3" json:"reward_denom_on_trade_zone,omitempty"` + // ibc of the host denom on the trade chain, output from the swap + HostDenomOnTradeZone string `protobuf:"bytes,4,opt,name=host_denom_on_trade_zone,json=hostDenomOnTradeZone,proto3" json:"host_denom_on_trade_zone,omitempty"` + // should be the same as the native host denom on the host chain + HostDenomOnHostZone string `protobuf:"bytes,5,opt,name=host_denom_on_host_zone,json=hostDenomOnHostZone,proto3" json:"host_denom_on_host_zone,omitempty"` + // ICAAccount on the host zone with the reward tokens + // This is the same as the host zone withdrawal ICA account + HostAccount ICAAccount `protobuf:"bytes,6,opt,name=host_account,json=hostAccount,proto3" json:"host_account"` + // ICAAccount on the reward zone that is acts as the intermediate + // receiver of the transfer from host zone to trade zone + RewardAccount ICAAccount `protobuf:"bytes,7,opt,name=reward_account,json=rewardAccount,proto3" json:"reward_account"` + // ICAAccount responsible for executing the swap of reward + // tokens for host tokens + TradeAccount ICAAccount `protobuf:"bytes,8,opt,name=trade_account,json=tradeAccount,proto3" json:"trade_account"` + // Channel responsible for the transfer of reward tokens from the host + // zone to the reward zone. This is the channel ID on the host zone side + HostToRewardChannelId string `protobuf:"bytes,9,opt,name=host_to_reward_channel_id,json=hostToRewardChannelId,proto3" json:"host_to_reward_channel_id,omitempty"` + // Channel responsible for the transfer of reward tokens from the reward + // zone to the trade zone. This is the channel ID on the reward zone side + RewardToTradeChannelId string `protobuf:"bytes,10,opt,name=reward_to_trade_channel_id,json=rewardToTradeChannelId,proto3" json:"reward_to_trade_channel_id,omitempty"` + // Channel responsible for the transfer of host tokens from the trade + // zone, back to the host zone. This is the channel ID on the trade zone side + TradeToHostChannelId string `protobuf:"bytes,11,opt,name=trade_to_host_channel_id,json=tradeToHostChannelId,proto3" json:"trade_to_host_channel_id,omitempty"` + // Minimum amount of reward token that must be accumulated before + // the tokens are transferred to the trade ICA + MinTransferAmount cosmossdk_io_math.Int `protobuf:"bytes,13,opt,name=min_transfer_amount,json=minTransferAmount,proto3,customtype=cosmossdk.io/math.Int" json:"min_transfer_amount"` + // Deprecated, the trades are now executed off-chain via authz + // so the trade configuration is no longer needed + // + // specifies the configuration needed to execute the swap + // such as pool_id, slippage, min trade amount, etc. + TradeConfig TradeConfig `protobuf:"bytes,12,opt,name=trade_config,json=tradeConfig,proto3" json:"trade_config"` // Deprecated: Do not use. +} + +func (m *TradeRoute) Reset() { *m = TradeRoute{} } +func (m *TradeRoute) String() string { return proto.CompactTextString(m) } +func (*TradeRoute) ProtoMessage() {} +func (*TradeRoute) Descriptor() ([]byte, []int) { + return fileDescriptor_c252b142ecf88017, []int{1} +} +func (m *TradeRoute) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TradeRoute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TradeRoute.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TradeRoute) XXX_Merge(src proto.Message) { + xxx_messageInfo_TradeRoute.Merge(m, src) +} +func (m *TradeRoute) XXX_Size() int { + return m.Size() +} +func (m *TradeRoute) XXX_DiscardUnknown() { + xxx_messageInfo_TradeRoute.DiscardUnknown(m) +} + +var xxx_messageInfo_TradeRoute proto.InternalMessageInfo + +func (m *TradeRoute) GetRewardDenomOnHostZone() string { + if m != nil { + return m.RewardDenomOnHostZone + } + return "" +} + +func (m *TradeRoute) GetRewardDenomOnRewardZone() string { + if m != nil { + return m.RewardDenomOnRewardZone + } + return "" +} + +func (m *TradeRoute) GetRewardDenomOnTradeZone() string { + if m != nil { + return m.RewardDenomOnTradeZone + } + return "" +} + +func (m *TradeRoute) GetHostDenomOnTradeZone() string { + if m != nil { + return m.HostDenomOnTradeZone + } + return "" +} + +func (m *TradeRoute) GetHostDenomOnHostZone() string { + if m != nil { + return m.HostDenomOnHostZone + } + return "" +} + +func (m *TradeRoute) GetHostAccount() ICAAccount { + if m != nil { + return m.HostAccount + } + return ICAAccount{} +} + +func (m *TradeRoute) GetRewardAccount() ICAAccount { + if m != nil { + return m.RewardAccount + } + return ICAAccount{} +} + +func (m *TradeRoute) GetTradeAccount() ICAAccount { + if m != nil { + return m.TradeAccount + } + return ICAAccount{} +} + +func (m *TradeRoute) GetHostToRewardChannelId() string { + if m != nil { + return m.HostToRewardChannelId + } + return "" +} + +func (m *TradeRoute) GetRewardToTradeChannelId() string { + if m != nil { + return m.RewardToTradeChannelId + } + return "" +} + +func (m *TradeRoute) GetTradeToHostChannelId() string { + if m != nil { + return m.TradeToHostChannelId + } + return "" +} + +// Deprecated: Do not use. +func (m *TradeRoute) GetTradeConfig() TradeConfig { + if m != nil { + return m.TradeConfig + } + return TradeConfig{} +} + +func init() { + proto.RegisterType((*TradeConfig)(nil), "stride.stakeibc.TradeConfig") + proto.RegisterType((*TradeRoute)(nil), "stride.stakeibc.TradeRoute") +} + +func init() { proto.RegisterFile("stride/stakeibc/trade_route.proto", fileDescriptor_c252b142ecf88017) } + +var fileDescriptor_c252b142ecf88017 = []byte{ + // 701 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0xcf, 0x4e, 0xdb, 0x4a, + 0x14, 0xc6, 0x63, 0xe0, 0x86, 0x9b, 0x49, 0x72, 0xd1, 0x35, 0xff, 0x4c, 0xb8, 0x37, 0x50, 0x56, + 0x6c, 0x88, 0x55, 0x8a, 0x10, 0x42, 0xdd, 0x04, 0xd2, 0x96, 0x48, 0xa9, 0x8a, 0x4c, 0xba, 0x61, + 0x33, 0x9a, 0xd8, 0x43, 0x62, 0x11, 0xfb, 0x58, 0x9e, 0x49, 0x13, 0xfa, 0x14, 0x7d, 0x93, 0x6e, + 0xfa, 0x10, 0x2c, 0xba, 0x40, 0x5d, 0x55, 0x5d, 0xa0, 0x0a, 0x5e, 0xa4, 0x9a, 0x33, 0x36, 0x38, + 0xa4, 0x8b, 0xa8, 0x3b, 0x7b, 0xce, 0xf9, 0x7d, 0xe7, 0xcc, 0x7c, 0x33, 0x87, 0x3c, 0x13, 0x32, + 0xf6, 0x3d, 0x6e, 0x0b, 0xc9, 0x2e, 0xb9, 0xdf, 0x71, 0x6d, 0x19, 0x33, 0x8f, 0xd3, 0x18, 0x06, + 0x92, 0xd7, 0xa2, 0x18, 0x24, 0x98, 0x0b, 0x3a, 0xa5, 0x96, 0xa6, 0x54, 0xd6, 0x5c, 0x10, 0x01, + 0x08, 0x8a, 0x61, 0x5b, 0xff, 0xe8, 0xdc, 0xca, 0x52, 0x17, 0xba, 0xa0, 0xd7, 0xd5, 0x57, 0xb2, + 0x3a, 0x51, 0xc4, 0x77, 0x19, 0x65, 0xae, 0x0b, 0x83, 0x50, 0xea, 0x94, 0xad, 0xcf, 0xb3, 0xa4, + 0xd8, 0x56, 0xa5, 0x8f, 0x21, 0xbc, 0xf0, 0xbb, 0xe6, 0x2a, 0x99, 0x8f, 0x00, 0xfa, 0xd4, 0xf7, + 0x2c, 0x63, 0xd3, 0xd8, 0x9e, 0x73, 0xf2, 0xea, 0xb7, 0xe9, 0x99, 0xa7, 0x84, 0x88, 0x21, 0x8b, + 0x68, 0x14, 0xfb, 0x2e, 0xb7, 0x66, 0x36, 0x8d, 0xed, 0xc2, 0xd1, 0xf3, 0xeb, 0xdb, 0x8d, 0xdc, + 0x8f, 0xdb, 0x8d, 0x75, 0xdd, 0x8b, 0xf0, 0x2e, 0x6b, 0x3e, 0xd8, 0x01, 0x93, 0xbd, 0x5a, 0x8b, + 0x77, 0x99, 0x7b, 0xd5, 0xe0, 0xee, 0xb7, 0x2f, 0x3b, 0x24, 0x69, 0xb5, 0xc1, 0x5d, 0xa7, 0xa0, + 0x44, 0x4e, 0x95, 0x86, 0xb9, 0x47, 0x56, 0x50, 0x8c, 0x0e, 0x22, 0x8f, 0x49, 0x4e, 0xa5, 0x1f, + 0x70, 0x21, 0x59, 0x10, 0x59, 0xb3, 0x58, 0x79, 0x09, 0xa3, 0xef, 0x31, 0xd8, 0x4e, 0x63, 0x66, + 0x40, 0x2a, 0x01, 0x1b, 0x51, 0xd6, 0xef, 0xc3, 0x90, 0x7b, 0x14, 0x7b, 0xea, 0x83, 0x10, 0x34, + 0x66, 0x92, 0x5b, 0x73, 0x7f, 0xda, 0xd7, 0x4a, 0xc0, 0x46, 0x75, 0xad, 0x79, 0x36, 0x64, 0x51, + 0x0b, 0x84, 0x70, 0x98, 0xe4, 0xe6, 0x2b, 0xb2, 0x10, 0xf8, 0xa1, 0x2e, 0xc3, 0x02, 0x75, 0x70, + 0xd6, 0x5f, 0x58, 0xe3, 0xff, 0xa4, 0xc6, 0xf2, 0x64, 0x8d, 0x66, 0x28, 0x9d, 0x72, 0xe0, 0x87, + 0x4a, 0xa8, 0x8e, 0x0c, 0xca, 0xb0, 0xd1, 0x98, 0x4c, 0x7e, 0x3a, 0x19, 0x36, 0x7a, 0x94, 0x39, + 0x9c, 0xb1, 0x8c, 0xad, 0xaf, 0x79, 0x42, 0xd0, 0x31, 0x47, 0xdd, 0x15, 0xf3, 0x80, 0xac, 0xc5, + 0x7c, 0xc8, 0x62, 0x8f, 0x7a, 0x3c, 0x84, 0x80, 0x42, 0x48, 0x7b, 0x20, 0x24, 0xfd, 0x08, 0x21, + 0x47, 0x0b, 0x0b, 0xce, 0xb2, 0x4e, 0x68, 0xa8, 0xf8, 0xbb, 0xf0, 0x04, 0x84, 0x3c, 0x87, 0x90, + 0x9b, 0x2f, 0xc9, 0xfa, 0x53, 0x32, 0xf9, 0x47, 0x16, 0x2d, 0x76, 0x56, 0xc7, 0x58, 0x07, 0x7f, + 0x90, 0x3e, 0x24, 0x95, 0xa7, 0xb4, 0xbe, 0xc2, 0x08, 0xcf, 0x22, 0xbc, 0x32, 0x06, 0x63, 0xd3, + 0xc8, 0xee, 0x13, 0x0b, 0x7b, 0xfc, 0x1d, 0x89, 0x0e, 0x3a, 0x4b, 0x2a, 0x3e, 0xc1, 0xed, 0x91, + 0xd5, 0x71, 0xee, 0x71, 0xa7, 0x68, 0x8a, 0xb3, 0x98, 0xc1, 0x1e, 0xf6, 0xd9, 0x20, 0x25, 0xcc, + 0x4b, 0x2e, 0x3e, 0x1e, 0x7c, 0x71, 0x77, 0xbd, 0xf6, 0xe4, 0x79, 0xd5, 0x9a, 0xc7, 0xf5, 0xba, + 0x4e, 0x39, 0x9a, 0x53, 0xae, 0x38, 0x45, 0x85, 0x25, 0x4b, 0xe6, 0x09, 0xf9, 0x27, 0xd9, 0x6f, + 0xaa, 0x33, 0x3f, 0xad, 0x4e, 0x59, 0x83, 0xa9, 0xd2, 0x6b, 0x52, 0xd6, 0xfb, 0x4d, 0x85, 0xfe, + 0x9e, 0x56, 0xa8, 0x84, 0x5c, 0xaa, 0x73, 0x40, 0xd6, 0x70, 0x5f, 0x12, 0x52, 0xdf, 0xdc, 0x1e, + 0x0b, 0x43, 0x8e, 0x8f, 0xb7, 0xa0, 0x9d, 0x57, 0x09, 0x6d, 0xd0, 0xb6, 0x1d, 0xeb, 0x68, 0xd3, + 0xcb, 0x78, 0x27, 0x21, 0x39, 0xfb, 0x0c, 0x4a, 0xb2, 0xde, 0xb5, 0x41, 0x4f, 0x87, 0x07, 0x76, + 0x9f, 0x58, 0x9a, 0x90, 0xa0, 0x8f, 0x3f, 0x43, 0x16, 0xb5, 0x77, 0x18, 0x6f, 0x83, 0x32, 0xe0, + 0x91, 0x7b, 0x4b, 0x16, 0xd5, 0x43, 0x92, 0x31, 0x0b, 0xc5, 0x05, 0x8f, 0xd3, 0x57, 0x50, 0x9e, + 0xe6, 0x15, 0xfc, 0x1b, 0xf8, 0xea, 0x16, 0x20, 0x98, 0x3c, 0xa8, 0x37, 0xa4, 0x94, 0x34, 0x8e, + 0x73, 0xcb, 0x2a, 0xe1, 0x19, 0xfe, 0x37, 0x71, 0x86, 0x99, 0xd9, 0x76, 0x94, 0x57, 0x55, 0x2c, + 0xc3, 0x29, 0xca, 0xcc, 0x62, 0xeb, 0xfa, 0xae, 0x6a, 0xdc, 0xdc, 0x55, 0x8d, 0x9f, 0x77, 0x55, + 0xe3, 0xd3, 0x7d, 0x35, 0x77, 0x73, 0x5f, 0xcd, 0x7d, 0xbf, 0xaf, 0xe6, 0xce, 0x77, 0xbb, 0xbe, + 0xec, 0x0d, 0x3a, 0x35, 0x17, 0x02, 0xfb, 0x0c, 0x65, 0x77, 0x5a, 0xac, 0x23, 0xec, 0x64, 0xa8, + 0x7e, 0xd8, 0x3d, 0xb0, 0x47, 0x99, 0xf9, 0x7d, 0x15, 0x71, 0xd1, 0xc9, 0xe3, 0x54, 0x7d, 0xf1, + 0x2b, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xb2, 0xa0, 0xf1, 0xdf, 0x05, 0x00, 0x00, +} + +func (m *TradeConfig) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TradeConfig) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TradeConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.MaxSwapAmount.Size() + i -= size + if _, err := m.MaxSwapAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTradeRoute(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + { + size := m.MinSwapAmount.Size() + i -= size + if _, err := m.MinSwapAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTradeRoute(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + { + size := m.MaxAllowedSwapLossRate.Size() + i -= size + if _, err := m.MaxAllowedSwapLossRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTradeRoute(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + if m.PriceUpdateTimestamp != 0 { + i = encodeVarintTradeRoute(dAtA, i, uint64(m.PriceUpdateTimestamp)) + i-- + dAtA[i] = 0x18 + } + { + size := m.SwapPrice.Size() + i -= size + if _, err := m.SwapPrice.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTradeRoute(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if m.PoolId != 0 { + i = encodeVarintTradeRoute(dAtA, i, uint64(m.PoolId)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *TradeRoute) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TradeRoute) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TradeRoute) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.MinTransferAmount.Size() + i -= size + if _, err := m.MinTransferAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTradeRoute(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x6a + { + size, err := m.TradeConfig.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTradeRoute(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x62 + if len(m.TradeToHostChannelId) > 0 { + i -= len(m.TradeToHostChannelId) + copy(dAtA[i:], m.TradeToHostChannelId) + i = encodeVarintTradeRoute(dAtA, i, uint64(len(m.TradeToHostChannelId))) + i-- + dAtA[i] = 0x5a + } + if len(m.RewardToTradeChannelId) > 0 { + i -= len(m.RewardToTradeChannelId) + copy(dAtA[i:], m.RewardToTradeChannelId) + i = encodeVarintTradeRoute(dAtA, i, uint64(len(m.RewardToTradeChannelId))) + i-- + dAtA[i] = 0x52 + } + if len(m.HostToRewardChannelId) > 0 { + i -= len(m.HostToRewardChannelId) + copy(dAtA[i:], m.HostToRewardChannelId) + i = encodeVarintTradeRoute(dAtA, i, uint64(len(m.HostToRewardChannelId))) + i-- + dAtA[i] = 0x4a + } + { + size, err := m.TradeAccount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTradeRoute(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + { + size, err := m.RewardAccount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTradeRoute(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + { + size, err := m.HostAccount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTradeRoute(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + if len(m.HostDenomOnHostZone) > 0 { + i -= len(m.HostDenomOnHostZone) + copy(dAtA[i:], m.HostDenomOnHostZone) + i = encodeVarintTradeRoute(dAtA, i, uint64(len(m.HostDenomOnHostZone))) + i-- + dAtA[i] = 0x2a + } + if len(m.HostDenomOnTradeZone) > 0 { + i -= len(m.HostDenomOnTradeZone) + copy(dAtA[i:], m.HostDenomOnTradeZone) + i = encodeVarintTradeRoute(dAtA, i, uint64(len(m.HostDenomOnTradeZone))) + i-- + dAtA[i] = 0x22 + } + if len(m.RewardDenomOnTradeZone) > 0 { + i -= len(m.RewardDenomOnTradeZone) + copy(dAtA[i:], m.RewardDenomOnTradeZone) + i = encodeVarintTradeRoute(dAtA, i, uint64(len(m.RewardDenomOnTradeZone))) + i-- + dAtA[i] = 0x1a + } + if len(m.RewardDenomOnRewardZone) > 0 { + i -= len(m.RewardDenomOnRewardZone) + copy(dAtA[i:], m.RewardDenomOnRewardZone) + i = encodeVarintTradeRoute(dAtA, i, uint64(len(m.RewardDenomOnRewardZone))) + i-- + dAtA[i] = 0x12 + } + if len(m.RewardDenomOnHostZone) > 0 { + i -= len(m.RewardDenomOnHostZone) + copy(dAtA[i:], m.RewardDenomOnHostZone) + i = encodeVarintTradeRoute(dAtA, i, uint64(len(m.RewardDenomOnHostZone))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintTradeRoute(dAtA []byte, offset int, v uint64) int { + offset -= sovTradeRoute(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *TradeConfig) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.PoolId != 0 { + n += 1 + sovTradeRoute(uint64(m.PoolId)) + } + l = m.SwapPrice.Size() + n += 1 + l + sovTradeRoute(uint64(l)) + if m.PriceUpdateTimestamp != 0 { + n += 1 + sovTradeRoute(uint64(m.PriceUpdateTimestamp)) + } + l = m.MaxAllowedSwapLossRate.Size() + n += 1 + l + sovTradeRoute(uint64(l)) + l = m.MinSwapAmount.Size() + n += 1 + l + sovTradeRoute(uint64(l)) + l = m.MaxSwapAmount.Size() + n += 1 + l + sovTradeRoute(uint64(l)) + return n +} + +func (m *TradeRoute) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.RewardDenomOnHostZone) + if l > 0 { + n += 1 + l + sovTradeRoute(uint64(l)) + } + l = len(m.RewardDenomOnRewardZone) + if l > 0 { + n += 1 + l + sovTradeRoute(uint64(l)) + } + l = len(m.RewardDenomOnTradeZone) + if l > 0 { + n += 1 + l + sovTradeRoute(uint64(l)) + } + l = len(m.HostDenomOnTradeZone) + if l > 0 { + n += 1 + l + sovTradeRoute(uint64(l)) + } + l = len(m.HostDenomOnHostZone) + if l > 0 { + n += 1 + l + sovTradeRoute(uint64(l)) + } + l = m.HostAccount.Size() + n += 1 + l + sovTradeRoute(uint64(l)) + l = m.RewardAccount.Size() + n += 1 + l + sovTradeRoute(uint64(l)) + l = m.TradeAccount.Size() + n += 1 + l + sovTradeRoute(uint64(l)) + l = len(m.HostToRewardChannelId) + if l > 0 { + n += 1 + l + sovTradeRoute(uint64(l)) + } + l = len(m.RewardToTradeChannelId) + if l > 0 { + n += 1 + l + sovTradeRoute(uint64(l)) + } + l = len(m.TradeToHostChannelId) + if l > 0 { + n += 1 + l + sovTradeRoute(uint64(l)) + } + l = m.TradeConfig.Size() + n += 1 + l + sovTradeRoute(uint64(l)) + l = m.MinTransferAmount.Size() + n += 1 + l + sovTradeRoute(uint64(l)) + return n +} + +func sovTradeRoute(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozTradeRoute(x uint64) (n int) { + return sovTradeRoute(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *TradeConfig) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTradeRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TradeConfig: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TradeConfig: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + } + m.PoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTradeRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SwapPrice", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTradeRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTradeRoute + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTradeRoute + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.SwapPrice.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PriceUpdateTimestamp", wireType) + } + m.PriceUpdateTimestamp = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTradeRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PriceUpdateTimestamp |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxAllowedSwapLossRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTradeRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTradeRoute + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTradeRoute + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MaxAllowedSwapLossRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MinSwapAmount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTradeRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTradeRoute + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTradeRoute + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MinSwapAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxSwapAmount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTradeRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTradeRoute + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTradeRoute + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MaxSwapAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTradeRoute(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTradeRoute + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *TradeRoute) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTradeRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: TradeRoute: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: TradeRoute: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RewardDenomOnHostZone", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTradeRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTradeRoute + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTradeRoute + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RewardDenomOnHostZone = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RewardDenomOnRewardZone", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTradeRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTradeRoute + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTradeRoute + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RewardDenomOnRewardZone = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RewardDenomOnTradeZone", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTradeRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTradeRoute + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTradeRoute + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RewardDenomOnTradeZone = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostDenomOnTradeZone", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTradeRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTradeRoute + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTradeRoute + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostDenomOnTradeZone = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostDenomOnHostZone", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTradeRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTradeRoute + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTradeRoute + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostDenomOnHostZone = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostAccount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTradeRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTradeRoute + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTradeRoute + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.HostAccount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RewardAccount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTradeRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTradeRoute + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTradeRoute + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.RewardAccount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TradeAccount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTradeRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTradeRoute + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTradeRoute + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.TradeAccount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostToRewardChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTradeRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTradeRoute + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTradeRoute + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostToRewardChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RewardToTradeChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTradeRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTradeRoute + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTradeRoute + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RewardToTradeChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TradeToHostChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTradeRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTradeRoute + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTradeRoute + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TradeToHostChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TradeConfig", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTradeRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTradeRoute + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTradeRoute + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.TradeConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MinTransferAmount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTradeRoute + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTradeRoute + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTradeRoute + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MinTransferAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTradeRoute(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTradeRoute + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipTradeRoute(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTradeRoute + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTradeRoute + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTradeRoute + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthTradeRoute + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupTradeRoute + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthTradeRoute + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthTradeRoute = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTradeRoute = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupTradeRoute = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/stakeibc/types/tx.pb.go b/x/stakeibc/types/tx.pb.go new file mode 100644 index 00000000000..bb1149c81f7 --- /dev/null +++ b/x/stakeibc/types/tx.pb.go @@ -0,0 +1,11651 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/stakeibc/tx.proto + +package types + +import ( + context "context" + cosmossdk_io_math "cosmossdk.io/math" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/msgservice" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type AuthzPermissionChange int32 + +const ( + // Grant the address trade permissions + AuthzPermissionChange_GRANT AuthzPermissionChange = 0 + // Revoke trade permissions from the address + AuthzPermissionChange_REVOKE AuthzPermissionChange = 1 +) + +var AuthzPermissionChange_name = map[int32]string{ + 0: "GRANT", + 1: "REVOKE", +} + +var AuthzPermissionChange_value = map[string]int32{ + "GRANT": 0, + "REVOKE": 1, +} + +func (x AuthzPermissionChange) String() string { + return proto.EnumName(AuthzPermissionChange_name, int32(x)) +} + +func (AuthzPermissionChange) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{0} +} + +type MsgUpdateInnerRedemptionRateBounds struct { + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + ChainId string `protobuf:"bytes,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + MinInnerRedemptionRate cosmossdk_io_math.LegacyDec `protobuf:"bytes,3,opt,name=min_inner_redemption_rate,json=minInnerRedemptionRate,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"min_inner_redemption_rate"` + MaxInnerRedemptionRate cosmossdk_io_math.LegacyDec `protobuf:"bytes,4,opt,name=max_inner_redemption_rate,json=maxInnerRedemptionRate,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"max_inner_redemption_rate"` +} + +func (m *MsgUpdateInnerRedemptionRateBounds) Reset() { *m = MsgUpdateInnerRedemptionRateBounds{} } +func (m *MsgUpdateInnerRedemptionRateBounds) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateInnerRedemptionRateBounds) ProtoMessage() {} +func (*MsgUpdateInnerRedemptionRateBounds) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{0} +} +func (m *MsgUpdateInnerRedemptionRateBounds) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateInnerRedemptionRateBounds) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateInnerRedemptionRateBounds.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateInnerRedemptionRateBounds) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateInnerRedemptionRateBounds.Merge(m, src) +} +func (m *MsgUpdateInnerRedemptionRateBounds) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateInnerRedemptionRateBounds) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateInnerRedemptionRateBounds.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateInnerRedemptionRateBounds proto.InternalMessageInfo + +func (m *MsgUpdateInnerRedemptionRateBounds) GetCreator() string { + if m != nil { + return m.Creator + } + return "" +} + +func (m *MsgUpdateInnerRedemptionRateBounds) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +type MsgUpdateInnerRedemptionRateBoundsResponse struct { +} + +func (m *MsgUpdateInnerRedemptionRateBoundsResponse) Reset() { + *m = MsgUpdateInnerRedemptionRateBoundsResponse{} +} +func (m *MsgUpdateInnerRedemptionRateBoundsResponse) String() string { + return proto.CompactTextString(m) +} +func (*MsgUpdateInnerRedemptionRateBoundsResponse) ProtoMessage() {} +func (*MsgUpdateInnerRedemptionRateBoundsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{1} +} +func (m *MsgUpdateInnerRedemptionRateBoundsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateInnerRedemptionRateBoundsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateInnerRedemptionRateBoundsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateInnerRedemptionRateBoundsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateInnerRedemptionRateBoundsResponse.Merge(m, src) +} +func (m *MsgUpdateInnerRedemptionRateBoundsResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateInnerRedemptionRateBoundsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateInnerRedemptionRateBoundsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateInnerRedemptionRateBoundsResponse proto.InternalMessageInfo + +type MsgLiquidStake struct { + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + Amount cosmossdk_io_math.Int `protobuf:"bytes,2,opt,name=amount,proto3,customtype=cosmossdk.io/math.Int" json:"amount"` + HostDenom string `protobuf:"bytes,3,opt,name=host_denom,json=hostDenom,proto3" json:"host_denom,omitempty"` +} + +func (m *MsgLiquidStake) Reset() { *m = MsgLiquidStake{} } +func (m *MsgLiquidStake) String() string { return proto.CompactTextString(m) } +func (*MsgLiquidStake) ProtoMessage() {} +func (*MsgLiquidStake) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{2} +} +func (m *MsgLiquidStake) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgLiquidStake) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgLiquidStake.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgLiquidStake) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgLiquidStake.Merge(m, src) +} +func (m *MsgLiquidStake) XXX_Size() int { + return m.Size() +} +func (m *MsgLiquidStake) XXX_DiscardUnknown() { + xxx_messageInfo_MsgLiquidStake.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgLiquidStake proto.InternalMessageInfo + +func (m *MsgLiquidStake) GetCreator() string { + if m != nil { + return m.Creator + } + return "" +} + +func (m *MsgLiquidStake) GetHostDenom() string { + if m != nil { + return m.HostDenom + } + return "" +} + +type MsgLiquidStakeResponse struct { + StToken types.Coin `protobuf:"bytes,1,opt,name=st_token,json=stToken,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"st_token"` +} + +func (m *MsgLiquidStakeResponse) Reset() { *m = MsgLiquidStakeResponse{} } +func (m *MsgLiquidStakeResponse) String() string { return proto.CompactTextString(m) } +func (*MsgLiquidStakeResponse) ProtoMessage() {} +func (*MsgLiquidStakeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{3} +} +func (m *MsgLiquidStakeResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgLiquidStakeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgLiquidStakeResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgLiquidStakeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgLiquidStakeResponse.Merge(m, src) +} +func (m *MsgLiquidStakeResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgLiquidStakeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgLiquidStakeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgLiquidStakeResponse proto.InternalMessageInfo + +func (m *MsgLiquidStakeResponse) GetStToken() types.Coin { + if m != nil { + return m.StToken + } + return types.Coin{} +} + +type MsgLSMLiquidStake struct { + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + Amount cosmossdk_io_math.Int `protobuf:"bytes,2,opt,name=amount,proto3,customtype=cosmossdk.io/math.Int" json:"amount"` + LsmTokenIbcDenom string `protobuf:"bytes,3,opt,name=lsm_token_ibc_denom,json=lsmTokenIbcDenom,proto3" json:"lsm_token_ibc_denom,omitempty"` +} + +func (m *MsgLSMLiquidStake) Reset() { *m = MsgLSMLiquidStake{} } +func (m *MsgLSMLiquidStake) String() string { return proto.CompactTextString(m) } +func (*MsgLSMLiquidStake) ProtoMessage() {} +func (*MsgLSMLiquidStake) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{4} +} +func (m *MsgLSMLiquidStake) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgLSMLiquidStake) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgLSMLiquidStake.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgLSMLiquidStake) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgLSMLiquidStake.Merge(m, src) +} +func (m *MsgLSMLiquidStake) XXX_Size() int { + return m.Size() +} +func (m *MsgLSMLiquidStake) XXX_DiscardUnknown() { + xxx_messageInfo_MsgLSMLiquidStake.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgLSMLiquidStake proto.InternalMessageInfo + +func (m *MsgLSMLiquidStake) GetCreator() string { + if m != nil { + return m.Creator + } + return "" +} + +func (m *MsgLSMLiquidStake) GetLsmTokenIbcDenom() string { + if m != nil { + return m.LsmTokenIbcDenom + } + return "" +} + +type MsgLSMLiquidStakeResponse struct { + TransactionComplete bool `protobuf:"varint,1,opt,name=transaction_complete,json=transactionComplete,proto3" json:"transaction_complete,omitempty"` +} + +func (m *MsgLSMLiquidStakeResponse) Reset() { *m = MsgLSMLiquidStakeResponse{} } +func (m *MsgLSMLiquidStakeResponse) String() string { return proto.CompactTextString(m) } +func (*MsgLSMLiquidStakeResponse) ProtoMessage() {} +func (*MsgLSMLiquidStakeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{5} +} +func (m *MsgLSMLiquidStakeResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgLSMLiquidStakeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgLSMLiquidStakeResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgLSMLiquidStakeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgLSMLiquidStakeResponse.Merge(m, src) +} +func (m *MsgLSMLiquidStakeResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgLSMLiquidStakeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgLSMLiquidStakeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgLSMLiquidStakeResponse proto.InternalMessageInfo + +func (m *MsgLSMLiquidStakeResponse) GetTransactionComplete() bool { + if m != nil { + return m.TransactionComplete + } + return false +} + +type MsgClearBalance struct { + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + ChainId string `protobuf:"bytes,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + Amount cosmossdk_io_math.Int `protobuf:"bytes,3,opt,name=amount,proto3,customtype=cosmossdk.io/math.Int" json:"amount"` + Channel string `protobuf:"bytes,4,opt,name=channel,proto3" json:"channel,omitempty"` +} + +func (m *MsgClearBalance) Reset() { *m = MsgClearBalance{} } +func (m *MsgClearBalance) String() string { return proto.CompactTextString(m) } +func (*MsgClearBalance) ProtoMessage() {} +func (*MsgClearBalance) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{6} +} +func (m *MsgClearBalance) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgClearBalance) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgClearBalance.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgClearBalance) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgClearBalance.Merge(m, src) +} +func (m *MsgClearBalance) XXX_Size() int { + return m.Size() +} +func (m *MsgClearBalance) XXX_DiscardUnknown() { + xxx_messageInfo_MsgClearBalance.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgClearBalance proto.InternalMessageInfo + +func (m *MsgClearBalance) GetCreator() string { + if m != nil { + return m.Creator + } + return "" +} + +func (m *MsgClearBalance) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +func (m *MsgClearBalance) GetChannel() string { + if m != nil { + return m.Channel + } + return "" +} + +type MsgClearBalanceResponse struct { +} + +func (m *MsgClearBalanceResponse) Reset() { *m = MsgClearBalanceResponse{} } +func (m *MsgClearBalanceResponse) String() string { return proto.CompactTextString(m) } +func (*MsgClearBalanceResponse) ProtoMessage() {} +func (*MsgClearBalanceResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{7} +} +func (m *MsgClearBalanceResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgClearBalanceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgClearBalanceResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgClearBalanceResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgClearBalanceResponse.Merge(m, src) +} +func (m *MsgClearBalanceResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgClearBalanceResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgClearBalanceResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgClearBalanceResponse proto.InternalMessageInfo + +type MsgRedeemStake struct { + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + Amount cosmossdk_io_math.Int `protobuf:"bytes,2,opt,name=amount,proto3,customtype=cosmossdk.io/math.Int" json:"amount"` + HostZone string `protobuf:"bytes,3,opt,name=host_zone,json=hostZone,proto3" json:"host_zone,omitempty"` + Receiver string `protobuf:"bytes,4,opt,name=receiver,proto3" json:"receiver,omitempty"` +} + +func (m *MsgRedeemStake) Reset() { *m = MsgRedeemStake{} } +func (m *MsgRedeemStake) String() string { return proto.CompactTextString(m) } +func (*MsgRedeemStake) ProtoMessage() {} +func (*MsgRedeemStake) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{8} +} +func (m *MsgRedeemStake) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRedeemStake) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRedeemStake.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRedeemStake) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRedeemStake.Merge(m, src) +} +func (m *MsgRedeemStake) XXX_Size() int { + return m.Size() +} +func (m *MsgRedeemStake) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRedeemStake.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRedeemStake proto.InternalMessageInfo + +func (m *MsgRedeemStake) GetCreator() string { + if m != nil { + return m.Creator + } + return "" +} + +func (m *MsgRedeemStake) GetHostZone() string { + if m != nil { + return m.HostZone + } + return "" +} + +func (m *MsgRedeemStake) GetReceiver() string { + if m != nil { + return m.Receiver + } + return "" +} + +type MsgRedeemStakeResponse struct { +} + +func (m *MsgRedeemStakeResponse) Reset() { *m = MsgRedeemStakeResponse{} } +func (m *MsgRedeemStakeResponse) String() string { return proto.CompactTextString(m) } +func (*MsgRedeemStakeResponse) ProtoMessage() {} +func (*MsgRedeemStakeResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{9} +} +func (m *MsgRedeemStakeResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRedeemStakeResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRedeemStakeResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRedeemStakeResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRedeemStakeResponse.Merge(m, src) +} +func (m *MsgRedeemStakeResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgRedeemStakeResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRedeemStakeResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRedeemStakeResponse proto.InternalMessageInfo + +// next: 15 +type MsgRegisterHostZone struct { + ConnectionId string `protobuf:"bytes,2,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty" yaml:"connection_id"` + Bech32Prefix string `protobuf:"bytes,12,opt,name=bech32prefix,proto3" json:"bech32prefix,omitempty"` + HostDenom string `protobuf:"bytes,4,opt,name=host_denom,json=hostDenom,proto3" json:"host_denom,omitempty" yaml:"host_denom"` + IbcDenom string `protobuf:"bytes,5,opt,name=ibc_denom,json=ibcDenom,proto3" json:"ibc_denom,omitempty" yaml:"ibc_denom"` + Creator string `protobuf:"bytes,6,opt,name=creator,proto3" json:"creator,omitempty"` + TransferChannelId string `protobuf:"bytes,10,opt,name=transfer_channel_id,json=transferChannelId,proto3" json:"transfer_channel_id,omitempty" yaml:"transfer_channel_id"` + UnbondingPeriod uint64 `protobuf:"varint,11,opt,name=unbonding_period,json=unbondingPeriod,proto3" json:"unbonding_period,omitempty" yaml:"unbonding_period"` + MinRedemptionRate cosmossdk_io_math.LegacyDec `protobuf:"bytes,13,opt,name=min_redemption_rate,json=minRedemptionRate,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"min_redemption_rate"` + MaxRedemptionRate cosmossdk_io_math.LegacyDec `protobuf:"bytes,14,opt,name=max_redemption_rate,json=maxRedemptionRate,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"max_redemption_rate"` + LsmLiquidStakeEnabled bool `protobuf:"varint,15,opt,name=lsm_liquid_stake_enabled,json=lsmLiquidStakeEnabled,proto3" json:"lsm_liquid_stake_enabled,omitempty"` + CommunityPoolTreasuryAddress string `protobuf:"bytes,16,opt,name=community_pool_treasury_address,json=communityPoolTreasuryAddress,proto3" json:"community_pool_treasury_address,omitempty"` + MaxMessagesPerIcaTx uint64 `protobuf:"varint,17,opt,name=max_messages_per_ica_tx,json=maxMessagesPerIcaTx,proto3" json:"max_messages_per_ica_tx,omitempty"` +} + +func (m *MsgRegisterHostZone) Reset() { *m = MsgRegisterHostZone{} } +func (m *MsgRegisterHostZone) String() string { return proto.CompactTextString(m) } +func (*MsgRegisterHostZone) ProtoMessage() {} +func (*MsgRegisterHostZone) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{10} +} +func (m *MsgRegisterHostZone) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRegisterHostZone) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRegisterHostZone.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRegisterHostZone) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRegisterHostZone.Merge(m, src) +} +func (m *MsgRegisterHostZone) XXX_Size() int { + return m.Size() +} +func (m *MsgRegisterHostZone) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRegisterHostZone.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRegisterHostZone proto.InternalMessageInfo + +type MsgRegisterHostZoneResponse struct { +} + +func (m *MsgRegisterHostZoneResponse) Reset() { *m = MsgRegisterHostZoneResponse{} } +func (m *MsgRegisterHostZoneResponse) String() string { return proto.CompactTextString(m) } +func (*MsgRegisterHostZoneResponse) ProtoMessage() {} +func (*MsgRegisterHostZoneResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{11} +} +func (m *MsgRegisterHostZoneResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRegisterHostZoneResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRegisterHostZoneResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRegisterHostZoneResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRegisterHostZoneResponse.Merge(m, src) +} +func (m *MsgRegisterHostZoneResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgRegisterHostZoneResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRegisterHostZoneResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRegisterHostZoneResponse proto.InternalMessageInfo + +type MsgClaimUndelegatedTokens struct { + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + // UserUnbondingRecords are keyed on {chain_id}.{epoch}.{receiver} + HostZoneId string `protobuf:"bytes,2,opt,name=host_zone_id,json=hostZoneId,proto3" json:"host_zone_id,omitempty"` + Epoch uint64 `protobuf:"varint,3,opt,name=epoch,proto3" json:"epoch,omitempty"` + Receiver string `protobuf:"bytes,5,opt,name=receiver,proto3" json:"receiver,omitempty"` +} + +func (m *MsgClaimUndelegatedTokens) Reset() { *m = MsgClaimUndelegatedTokens{} } +func (m *MsgClaimUndelegatedTokens) String() string { return proto.CompactTextString(m) } +func (*MsgClaimUndelegatedTokens) ProtoMessage() {} +func (*MsgClaimUndelegatedTokens) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{12} +} +func (m *MsgClaimUndelegatedTokens) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgClaimUndelegatedTokens) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgClaimUndelegatedTokens.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgClaimUndelegatedTokens) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgClaimUndelegatedTokens.Merge(m, src) +} +func (m *MsgClaimUndelegatedTokens) XXX_Size() int { + return m.Size() +} +func (m *MsgClaimUndelegatedTokens) XXX_DiscardUnknown() { + xxx_messageInfo_MsgClaimUndelegatedTokens.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgClaimUndelegatedTokens proto.InternalMessageInfo + +func (m *MsgClaimUndelegatedTokens) GetCreator() string { + if m != nil { + return m.Creator + } + return "" +} + +func (m *MsgClaimUndelegatedTokens) GetHostZoneId() string { + if m != nil { + return m.HostZoneId + } + return "" +} + +func (m *MsgClaimUndelegatedTokens) GetEpoch() uint64 { + if m != nil { + return m.Epoch + } + return 0 +} + +func (m *MsgClaimUndelegatedTokens) GetReceiver() string { + if m != nil { + return m.Receiver + } + return "" +} + +type MsgClaimUndelegatedTokensResponse struct { +} + +func (m *MsgClaimUndelegatedTokensResponse) Reset() { *m = MsgClaimUndelegatedTokensResponse{} } +func (m *MsgClaimUndelegatedTokensResponse) String() string { return proto.CompactTextString(m) } +func (*MsgClaimUndelegatedTokensResponse) ProtoMessage() {} +func (*MsgClaimUndelegatedTokensResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{13} +} +func (m *MsgClaimUndelegatedTokensResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgClaimUndelegatedTokensResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgClaimUndelegatedTokensResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgClaimUndelegatedTokensResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgClaimUndelegatedTokensResponse.Merge(m, src) +} +func (m *MsgClaimUndelegatedTokensResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgClaimUndelegatedTokensResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgClaimUndelegatedTokensResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgClaimUndelegatedTokensResponse proto.InternalMessageInfo + +type MsgRebalanceValidators struct { + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + HostZone string `protobuf:"bytes,2,opt,name=host_zone,json=hostZone,proto3" json:"host_zone,omitempty"` + NumRebalance uint64 `protobuf:"varint,3,opt,name=num_rebalance,json=numRebalance,proto3" json:"num_rebalance,omitempty"` +} + +func (m *MsgRebalanceValidators) Reset() { *m = MsgRebalanceValidators{} } +func (m *MsgRebalanceValidators) String() string { return proto.CompactTextString(m) } +func (*MsgRebalanceValidators) ProtoMessage() {} +func (*MsgRebalanceValidators) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{14} +} +func (m *MsgRebalanceValidators) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRebalanceValidators) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRebalanceValidators.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRebalanceValidators) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRebalanceValidators.Merge(m, src) +} +func (m *MsgRebalanceValidators) XXX_Size() int { + return m.Size() +} +func (m *MsgRebalanceValidators) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRebalanceValidators.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRebalanceValidators proto.InternalMessageInfo + +func (m *MsgRebalanceValidators) GetCreator() string { + if m != nil { + return m.Creator + } + return "" +} + +func (m *MsgRebalanceValidators) GetHostZone() string { + if m != nil { + return m.HostZone + } + return "" +} + +func (m *MsgRebalanceValidators) GetNumRebalance() uint64 { + if m != nil { + return m.NumRebalance + } + return 0 +} + +type MsgRebalanceValidatorsResponse struct { +} + +func (m *MsgRebalanceValidatorsResponse) Reset() { *m = MsgRebalanceValidatorsResponse{} } +func (m *MsgRebalanceValidatorsResponse) String() string { return proto.CompactTextString(m) } +func (*MsgRebalanceValidatorsResponse) ProtoMessage() {} +func (*MsgRebalanceValidatorsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{15} +} +func (m *MsgRebalanceValidatorsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRebalanceValidatorsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRebalanceValidatorsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRebalanceValidatorsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRebalanceValidatorsResponse.Merge(m, src) +} +func (m *MsgRebalanceValidatorsResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgRebalanceValidatorsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRebalanceValidatorsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRebalanceValidatorsResponse proto.InternalMessageInfo + +type MsgAddValidators struct { + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + HostZone string `protobuf:"bytes,2,opt,name=host_zone,json=hostZone,proto3" json:"host_zone,omitempty"` + Validators []*Validator `protobuf:"bytes,3,rep,name=validators,proto3" json:"validators,omitempty"` +} + +func (m *MsgAddValidators) Reset() { *m = MsgAddValidators{} } +func (m *MsgAddValidators) String() string { return proto.CompactTextString(m) } +func (*MsgAddValidators) ProtoMessage() {} +func (*MsgAddValidators) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{16} +} +func (m *MsgAddValidators) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgAddValidators) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgAddValidators.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgAddValidators) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgAddValidators.Merge(m, src) +} +func (m *MsgAddValidators) XXX_Size() int { + return m.Size() +} +func (m *MsgAddValidators) XXX_DiscardUnknown() { + xxx_messageInfo_MsgAddValidators.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgAddValidators proto.InternalMessageInfo + +func (m *MsgAddValidators) GetCreator() string { + if m != nil { + return m.Creator + } + return "" +} + +func (m *MsgAddValidators) GetHostZone() string { + if m != nil { + return m.HostZone + } + return "" +} + +func (m *MsgAddValidators) GetValidators() []*Validator { + if m != nil { + return m.Validators + } + return nil +} + +type MsgAddValidatorsResponse struct { +} + +func (m *MsgAddValidatorsResponse) Reset() { *m = MsgAddValidatorsResponse{} } +func (m *MsgAddValidatorsResponse) String() string { return proto.CompactTextString(m) } +func (*MsgAddValidatorsResponse) ProtoMessage() {} +func (*MsgAddValidatorsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{17} +} +func (m *MsgAddValidatorsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgAddValidatorsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgAddValidatorsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgAddValidatorsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgAddValidatorsResponse.Merge(m, src) +} +func (m *MsgAddValidatorsResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgAddValidatorsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgAddValidatorsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgAddValidatorsResponse proto.InternalMessageInfo + +type ValidatorWeight struct { + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + Weight uint64 `protobuf:"varint,2,opt,name=weight,proto3" json:"weight,omitempty"` +} + +func (m *ValidatorWeight) Reset() { *m = ValidatorWeight{} } +func (m *ValidatorWeight) String() string { return proto.CompactTextString(m) } +func (*ValidatorWeight) ProtoMessage() {} +func (*ValidatorWeight) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{18} +} +func (m *ValidatorWeight) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ValidatorWeight) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ValidatorWeight.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ValidatorWeight) XXX_Merge(src proto.Message) { + xxx_messageInfo_ValidatorWeight.Merge(m, src) +} +func (m *ValidatorWeight) XXX_Size() int { + return m.Size() +} +func (m *ValidatorWeight) XXX_DiscardUnknown() { + xxx_messageInfo_ValidatorWeight.DiscardUnknown(m) +} + +var xxx_messageInfo_ValidatorWeight proto.InternalMessageInfo + +func (m *ValidatorWeight) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func (m *ValidatorWeight) GetWeight() uint64 { + if m != nil { + return m.Weight + } + return 0 +} + +type MsgChangeValidatorWeights struct { + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + HostZone string `protobuf:"bytes,2,opt,name=host_zone,json=hostZone,proto3" json:"host_zone,omitempty"` + ValidatorWeights []*ValidatorWeight `protobuf:"bytes,3,rep,name=validator_weights,json=validatorWeights,proto3" json:"validator_weights,omitempty"` +} + +func (m *MsgChangeValidatorWeights) Reset() { *m = MsgChangeValidatorWeights{} } +func (m *MsgChangeValidatorWeights) String() string { return proto.CompactTextString(m) } +func (*MsgChangeValidatorWeights) ProtoMessage() {} +func (*MsgChangeValidatorWeights) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{19} +} +func (m *MsgChangeValidatorWeights) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgChangeValidatorWeights) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgChangeValidatorWeights.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgChangeValidatorWeights) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgChangeValidatorWeights.Merge(m, src) +} +func (m *MsgChangeValidatorWeights) XXX_Size() int { + return m.Size() +} +func (m *MsgChangeValidatorWeights) XXX_DiscardUnknown() { + xxx_messageInfo_MsgChangeValidatorWeights.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgChangeValidatorWeights proto.InternalMessageInfo + +func (m *MsgChangeValidatorWeights) GetCreator() string { + if m != nil { + return m.Creator + } + return "" +} + +func (m *MsgChangeValidatorWeights) GetHostZone() string { + if m != nil { + return m.HostZone + } + return "" +} + +func (m *MsgChangeValidatorWeights) GetValidatorWeights() []*ValidatorWeight { + if m != nil { + return m.ValidatorWeights + } + return nil +} + +type MsgChangeValidatorWeightsResponse struct { +} + +func (m *MsgChangeValidatorWeightsResponse) Reset() { *m = MsgChangeValidatorWeightsResponse{} } +func (m *MsgChangeValidatorWeightsResponse) String() string { return proto.CompactTextString(m) } +func (*MsgChangeValidatorWeightsResponse) ProtoMessage() {} +func (*MsgChangeValidatorWeightsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{20} +} +func (m *MsgChangeValidatorWeightsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgChangeValidatorWeightsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgChangeValidatorWeightsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgChangeValidatorWeightsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgChangeValidatorWeightsResponse.Merge(m, src) +} +func (m *MsgChangeValidatorWeightsResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgChangeValidatorWeightsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgChangeValidatorWeightsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgChangeValidatorWeightsResponse proto.InternalMessageInfo + +type MsgDeleteValidator struct { + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + HostZone string `protobuf:"bytes,2,opt,name=host_zone,json=hostZone,proto3" json:"host_zone,omitempty"` + ValAddr string `protobuf:"bytes,3,opt,name=val_addr,json=valAddr,proto3" json:"val_addr,omitempty"` +} + +func (m *MsgDeleteValidator) Reset() { *m = MsgDeleteValidator{} } +func (m *MsgDeleteValidator) String() string { return proto.CompactTextString(m) } +func (*MsgDeleteValidator) ProtoMessage() {} +func (*MsgDeleteValidator) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{21} +} +func (m *MsgDeleteValidator) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgDeleteValidator) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgDeleteValidator.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgDeleteValidator) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgDeleteValidator.Merge(m, src) +} +func (m *MsgDeleteValidator) XXX_Size() int { + return m.Size() +} +func (m *MsgDeleteValidator) XXX_DiscardUnknown() { + xxx_messageInfo_MsgDeleteValidator.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgDeleteValidator proto.InternalMessageInfo + +func (m *MsgDeleteValidator) GetCreator() string { + if m != nil { + return m.Creator + } + return "" +} + +func (m *MsgDeleteValidator) GetHostZone() string { + if m != nil { + return m.HostZone + } + return "" +} + +func (m *MsgDeleteValidator) GetValAddr() string { + if m != nil { + return m.ValAddr + } + return "" +} + +type MsgDeleteValidatorResponse struct { +} + +func (m *MsgDeleteValidatorResponse) Reset() { *m = MsgDeleteValidatorResponse{} } +func (m *MsgDeleteValidatorResponse) String() string { return proto.CompactTextString(m) } +func (*MsgDeleteValidatorResponse) ProtoMessage() {} +func (*MsgDeleteValidatorResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{22} +} +func (m *MsgDeleteValidatorResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgDeleteValidatorResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgDeleteValidatorResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgDeleteValidatorResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgDeleteValidatorResponse.Merge(m, src) +} +func (m *MsgDeleteValidatorResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgDeleteValidatorResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgDeleteValidatorResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgDeleteValidatorResponse proto.InternalMessageInfo + +type MsgRestoreInterchainAccount struct { + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + ChainId string `protobuf:"bytes,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + ConnectionId string `protobuf:"bytes,3,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty"` + AccountOwner string `protobuf:"bytes,4,opt,name=account_owner,json=accountOwner,proto3" json:"account_owner,omitempty"` +} + +func (m *MsgRestoreInterchainAccount) Reset() { *m = MsgRestoreInterchainAccount{} } +func (m *MsgRestoreInterchainAccount) String() string { return proto.CompactTextString(m) } +func (*MsgRestoreInterchainAccount) ProtoMessage() {} +func (*MsgRestoreInterchainAccount) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{23} +} +func (m *MsgRestoreInterchainAccount) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRestoreInterchainAccount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRestoreInterchainAccount.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRestoreInterchainAccount) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRestoreInterchainAccount.Merge(m, src) +} +func (m *MsgRestoreInterchainAccount) XXX_Size() int { + return m.Size() +} +func (m *MsgRestoreInterchainAccount) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRestoreInterchainAccount.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRestoreInterchainAccount proto.InternalMessageInfo + +func (m *MsgRestoreInterchainAccount) GetCreator() string { + if m != nil { + return m.Creator + } + return "" +} + +func (m *MsgRestoreInterchainAccount) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +func (m *MsgRestoreInterchainAccount) GetConnectionId() string { + if m != nil { + return m.ConnectionId + } + return "" +} + +func (m *MsgRestoreInterchainAccount) GetAccountOwner() string { + if m != nil { + return m.AccountOwner + } + return "" +} + +type MsgRestoreInterchainAccountResponse struct { +} + +func (m *MsgRestoreInterchainAccountResponse) Reset() { *m = MsgRestoreInterchainAccountResponse{} } +func (m *MsgRestoreInterchainAccountResponse) String() string { return proto.CompactTextString(m) } +func (*MsgRestoreInterchainAccountResponse) ProtoMessage() {} +func (*MsgRestoreInterchainAccountResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{24} +} +func (m *MsgRestoreInterchainAccountResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgRestoreInterchainAccountResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgRestoreInterchainAccountResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgRestoreInterchainAccountResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgRestoreInterchainAccountResponse.Merge(m, src) +} +func (m *MsgRestoreInterchainAccountResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgRestoreInterchainAccountResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgRestoreInterchainAccountResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgRestoreInterchainAccountResponse proto.InternalMessageInfo + +type MsgCloseDelegationChannel struct { + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + ChainId string `protobuf:"bytes,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` +} + +func (m *MsgCloseDelegationChannel) Reset() { *m = MsgCloseDelegationChannel{} } +func (m *MsgCloseDelegationChannel) String() string { return proto.CompactTextString(m) } +func (*MsgCloseDelegationChannel) ProtoMessage() {} +func (*MsgCloseDelegationChannel) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{25} +} +func (m *MsgCloseDelegationChannel) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgCloseDelegationChannel) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgCloseDelegationChannel.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgCloseDelegationChannel) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgCloseDelegationChannel.Merge(m, src) +} +func (m *MsgCloseDelegationChannel) XXX_Size() int { + return m.Size() +} +func (m *MsgCloseDelegationChannel) XXX_DiscardUnknown() { + xxx_messageInfo_MsgCloseDelegationChannel.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgCloseDelegationChannel proto.InternalMessageInfo + +func (m *MsgCloseDelegationChannel) GetCreator() string { + if m != nil { + return m.Creator + } + return "" +} + +func (m *MsgCloseDelegationChannel) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +type MsgCloseDelegationChannelResponse struct { +} + +func (m *MsgCloseDelegationChannelResponse) Reset() { *m = MsgCloseDelegationChannelResponse{} } +func (m *MsgCloseDelegationChannelResponse) String() string { return proto.CompactTextString(m) } +func (*MsgCloseDelegationChannelResponse) ProtoMessage() {} +func (*MsgCloseDelegationChannelResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{26} +} +func (m *MsgCloseDelegationChannelResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgCloseDelegationChannelResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgCloseDelegationChannelResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgCloseDelegationChannelResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgCloseDelegationChannelResponse.Merge(m, src) +} +func (m *MsgCloseDelegationChannelResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgCloseDelegationChannelResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgCloseDelegationChannelResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgCloseDelegationChannelResponse proto.InternalMessageInfo + +type MsgUpdateValidatorSharesExchRate struct { + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + ChainId string `protobuf:"bytes,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + Valoper string `protobuf:"bytes,3,opt,name=valoper,proto3" json:"valoper,omitempty"` +} + +func (m *MsgUpdateValidatorSharesExchRate) Reset() { *m = MsgUpdateValidatorSharesExchRate{} } +func (m *MsgUpdateValidatorSharesExchRate) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateValidatorSharesExchRate) ProtoMessage() {} +func (*MsgUpdateValidatorSharesExchRate) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{27} +} +func (m *MsgUpdateValidatorSharesExchRate) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateValidatorSharesExchRate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateValidatorSharesExchRate.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateValidatorSharesExchRate) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateValidatorSharesExchRate.Merge(m, src) +} +func (m *MsgUpdateValidatorSharesExchRate) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateValidatorSharesExchRate) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateValidatorSharesExchRate.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateValidatorSharesExchRate proto.InternalMessageInfo + +func (m *MsgUpdateValidatorSharesExchRate) GetCreator() string { + if m != nil { + return m.Creator + } + return "" +} + +func (m *MsgUpdateValidatorSharesExchRate) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +func (m *MsgUpdateValidatorSharesExchRate) GetValoper() string { + if m != nil { + return m.Valoper + } + return "" +} + +type MsgUpdateValidatorSharesExchRateResponse struct { +} + +func (m *MsgUpdateValidatorSharesExchRateResponse) Reset() { + *m = MsgUpdateValidatorSharesExchRateResponse{} +} +func (m *MsgUpdateValidatorSharesExchRateResponse) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateValidatorSharesExchRateResponse) ProtoMessage() {} +func (*MsgUpdateValidatorSharesExchRateResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{28} +} +func (m *MsgUpdateValidatorSharesExchRateResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateValidatorSharesExchRateResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateValidatorSharesExchRateResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateValidatorSharesExchRateResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateValidatorSharesExchRateResponse.Merge(m, src) +} +func (m *MsgUpdateValidatorSharesExchRateResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateValidatorSharesExchRateResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateValidatorSharesExchRateResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateValidatorSharesExchRateResponse proto.InternalMessageInfo + +type MsgCalibrateDelegation struct { + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + ChainId string `protobuf:"bytes,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + Valoper string `protobuf:"bytes,3,opt,name=valoper,proto3" json:"valoper,omitempty"` +} + +func (m *MsgCalibrateDelegation) Reset() { *m = MsgCalibrateDelegation{} } +func (m *MsgCalibrateDelegation) String() string { return proto.CompactTextString(m) } +func (*MsgCalibrateDelegation) ProtoMessage() {} +func (*MsgCalibrateDelegation) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{29} +} +func (m *MsgCalibrateDelegation) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgCalibrateDelegation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgCalibrateDelegation.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgCalibrateDelegation) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgCalibrateDelegation.Merge(m, src) +} +func (m *MsgCalibrateDelegation) XXX_Size() int { + return m.Size() +} +func (m *MsgCalibrateDelegation) XXX_DiscardUnknown() { + xxx_messageInfo_MsgCalibrateDelegation.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgCalibrateDelegation proto.InternalMessageInfo + +func (m *MsgCalibrateDelegation) GetCreator() string { + if m != nil { + return m.Creator + } + return "" +} + +func (m *MsgCalibrateDelegation) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +func (m *MsgCalibrateDelegation) GetValoper() string { + if m != nil { + return m.Valoper + } + return "" +} + +type MsgCalibrateDelegationResponse struct { +} + +func (m *MsgCalibrateDelegationResponse) Reset() { *m = MsgCalibrateDelegationResponse{} } +func (m *MsgCalibrateDelegationResponse) String() string { return proto.CompactTextString(m) } +func (*MsgCalibrateDelegationResponse) ProtoMessage() {} +func (*MsgCalibrateDelegationResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{30} +} +func (m *MsgCalibrateDelegationResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgCalibrateDelegationResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgCalibrateDelegationResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgCalibrateDelegationResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgCalibrateDelegationResponse.Merge(m, src) +} +func (m *MsgCalibrateDelegationResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgCalibrateDelegationResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgCalibrateDelegationResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgCalibrateDelegationResponse proto.InternalMessageInfo + +type MsgResumeHostZone struct { + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + ChainId string `protobuf:"bytes,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` +} + +func (m *MsgResumeHostZone) Reset() { *m = MsgResumeHostZone{} } +func (m *MsgResumeHostZone) String() string { return proto.CompactTextString(m) } +func (*MsgResumeHostZone) ProtoMessage() {} +func (*MsgResumeHostZone) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{31} +} +func (m *MsgResumeHostZone) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgResumeHostZone) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgResumeHostZone.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgResumeHostZone) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgResumeHostZone.Merge(m, src) +} +func (m *MsgResumeHostZone) XXX_Size() int { + return m.Size() +} +func (m *MsgResumeHostZone) XXX_DiscardUnknown() { + xxx_messageInfo_MsgResumeHostZone.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgResumeHostZone proto.InternalMessageInfo + +func (m *MsgResumeHostZone) GetCreator() string { + if m != nil { + return m.Creator + } + return "" +} + +func (m *MsgResumeHostZone) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +type MsgResumeHostZoneResponse struct { +} + +func (m *MsgResumeHostZoneResponse) Reset() { *m = MsgResumeHostZoneResponse{} } +func (m *MsgResumeHostZoneResponse) String() string { return proto.CompactTextString(m) } +func (*MsgResumeHostZoneResponse) ProtoMessage() {} +func (*MsgResumeHostZoneResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{32} +} +func (m *MsgResumeHostZoneResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgResumeHostZoneResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgResumeHostZoneResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgResumeHostZoneResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgResumeHostZoneResponse.Merge(m, src) +} +func (m *MsgResumeHostZoneResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgResumeHostZoneResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgResumeHostZoneResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgResumeHostZoneResponse proto.InternalMessageInfo + +// Creates a new trade route +type MsgCreateTradeRoute struct { + // authority is the address that controls the module (defaults to x/gov unless + // overwritten). + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + // The chain ID of the host zone + HostChainId string `protobuf:"bytes,2,opt,name=host_chain_id,json=hostChainId,proto3" json:"host_chain_id,omitempty"` + // Connection IDs between stride and the other zones + StrideToRewardConnectionId string `protobuf:"bytes,3,opt,name=stride_to_reward_connection_id,json=strideToRewardConnectionId,proto3" json:"stride_to_reward_connection_id,omitempty"` + StrideToTradeConnectionId string `protobuf:"bytes,4,opt,name=stride_to_trade_connection_id,json=strideToTradeConnectionId,proto3" json:"stride_to_trade_connection_id,omitempty"` + // Transfer channels between the host, reward, and trade zones + HostToRewardTransferChannelId string `protobuf:"bytes,5,opt,name=host_to_reward_transfer_channel_id,json=hostToRewardTransferChannelId,proto3" json:"host_to_reward_transfer_channel_id,omitempty"` + RewardToTradeTransferChannelId string `protobuf:"bytes,6,opt,name=reward_to_trade_transfer_channel_id,json=rewardToTradeTransferChannelId,proto3" json:"reward_to_trade_transfer_channel_id,omitempty"` + TradeToHostTransferChannelId string `protobuf:"bytes,7,opt,name=trade_to_host_transfer_channel_id,json=tradeToHostTransferChannelId,proto3" json:"trade_to_host_transfer_channel_id,omitempty"` + // ibc denom for the reward token on the host zone (e.g. ibc/usdc on dYdX) + RewardDenomOnHost string `protobuf:"bytes,8,opt,name=reward_denom_on_host,json=rewardDenomOnHost,proto3" json:"reward_denom_on_host,omitempty"` + // native denom of reward token on the reward zone (e.g. usdc on Noble) + RewardDenomOnReward string `protobuf:"bytes,9,opt,name=reward_denom_on_reward,json=rewardDenomOnReward,proto3" json:"reward_denom_on_reward,omitempty"` + // ibc denom of the reward token on the trade zone (e.g. ibc/usdc on Osmosis) + RewardDenomOnTrade string `protobuf:"bytes,10,opt,name=reward_denom_on_trade,json=rewardDenomOnTrade,proto3" json:"reward_denom_on_trade,omitempty"` + // ibc denom of the host's token on the trade zone (e.g. ibc/dydx on Osmosis) + HostDenomOnTrade string `protobuf:"bytes,11,opt,name=host_denom_on_trade,json=hostDenomOnTrade,proto3" json:"host_denom_on_trade,omitempty"` + // the host zone's native denom (e.g. dydx on dYdX) + HostDenomOnHost string `protobuf:"bytes,12,opt,name=host_denom_on_host,json=hostDenomOnHost,proto3" json:"host_denom_on_host,omitempty"` + // Deprecated, the trades are now executed off-chain via authz + // + // The osmosis pool ID + PoolId uint64 `protobuf:"varint,13,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` // Deprecated: Do not use. + // Deprecated, the trades are now executed off-chain via authz + // + // Threshold defining the percentage of tokens that could be lost in the trade + // This captures both the loss from slippage and from a stale price on stride + // "0.05" means the output from the trade can be no less than a 5% deviation + // from the current value + MaxAllowedSwapLossRate string `protobuf:"bytes,14,opt,name=max_allowed_swap_loss_rate,json=maxAllowedSwapLossRate,proto3" json:"max_allowed_swap_loss_rate,omitempty"` // Deprecated: Do not use. + // Deprecated, the trades are now executed off-chain via authz + // + // minimum amount of reward tokens to initate a swap + // if not provided, defaults to 0 + MinSwapAmount cosmossdk_io_math.Int `protobuf:"bytes,15,opt,name=min_swap_amount,json=minSwapAmount,proto3,customtype=cosmossdk.io/math.Int" json:"min_swap_amount"` + // Deprecated, the trades are now executed off-chain via authz + // + // maximum amount of reward tokens in a single swap + // if not provided, defaults to 10e24 + MaxSwapAmount cosmossdk_io_math.Int `protobuf:"bytes,16,opt,name=max_swap_amount,json=maxSwapAmount,proto3,customtype=cosmossdk.io/math.Int" json:"max_swap_amount"` + // Minimum amount of reward token that must be accumulated before + // the tokens are transferred to the trade ICA + MinTransferAmount cosmossdk_io_math.Int `protobuf:"bytes,17,opt,name=min_transfer_amount,json=minTransferAmount,proto3,customtype=cosmossdk.io/math.Int" json:"min_transfer_amount"` +} + +func (m *MsgCreateTradeRoute) Reset() { *m = MsgCreateTradeRoute{} } +func (m *MsgCreateTradeRoute) String() string { return proto.CompactTextString(m) } +func (*MsgCreateTradeRoute) ProtoMessage() {} +func (*MsgCreateTradeRoute) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{33} +} +func (m *MsgCreateTradeRoute) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgCreateTradeRoute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgCreateTradeRoute.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgCreateTradeRoute) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgCreateTradeRoute.Merge(m, src) +} +func (m *MsgCreateTradeRoute) XXX_Size() int { + return m.Size() +} +func (m *MsgCreateTradeRoute) XXX_DiscardUnknown() { + xxx_messageInfo_MsgCreateTradeRoute.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgCreateTradeRoute proto.InternalMessageInfo + +func (m *MsgCreateTradeRoute) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +func (m *MsgCreateTradeRoute) GetHostChainId() string { + if m != nil { + return m.HostChainId + } + return "" +} + +func (m *MsgCreateTradeRoute) GetStrideToRewardConnectionId() string { + if m != nil { + return m.StrideToRewardConnectionId + } + return "" +} + +func (m *MsgCreateTradeRoute) GetStrideToTradeConnectionId() string { + if m != nil { + return m.StrideToTradeConnectionId + } + return "" +} + +func (m *MsgCreateTradeRoute) GetHostToRewardTransferChannelId() string { + if m != nil { + return m.HostToRewardTransferChannelId + } + return "" +} + +func (m *MsgCreateTradeRoute) GetRewardToTradeTransferChannelId() string { + if m != nil { + return m.RewardToTradeTransferChannelId + } + return "" +} + +func (m *MsgCreateTradeRoute) GetTradeToHostTransferChannelId() string { + if m != nil { + return m.TradeToHostTransferChannelId + } + return "" +} + +func (m *MsgCreateTradeRoute) GetRewardDenomOnHost() string { + if m != nil { + return m.RewardDenomOnHost + } + return "" +} + +func (m *MsgCreateTradeRoute) GetRewardDenomOnReward() string { + if m != nil { + return m.RewardDenomOnReward + } + return "" +} + +func (m *MsgCreateTradeRoute) GetRewardDenomOnTrade() string { + if m != nil { + return m.RewardDenomOnTrade + } + return "" +} + +func (m *MsgCreateTradeRoute) GetHostDenomOnTrade() string { + if m != nil { + return m.HostDenomOnTrade + } + return "" +} + +func (m *MsgCreateTradeRoute) GetHostDenomOnHost() string { + if m != nil { + return m.HostDenomOnHost + } + return "" +} + +// Deprecated: Do not use. +func (m *MsgCreateTradeRoute) GetPoolId() uint64 { + if m != nil { + return m.PoolId + } + return 0 +} + +// Deprecated: Do not use. +func (m *MsgCreateTradeRoute) GetMaxAllowedSwapLossRate() string { + if m != nil { + return m.MaxAllowedSwapLossRate + } + return "" +} + +type MsgCreateTradeRouteResponse struct { +} + +func (m *MsgCreateTradeRouteResponse) Reset() { *m = MsgCreateTradeRouteResponse{} } +func (m *MsgCreateTradeRouteResponse) String() string { return proto.CompactTextString(m) } +func (*MsgCreateTradeRouteResponse) ProtoMessage() {} +func (*MsgCreateTradeRouteResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{34} +} +func (m *MsgCreateTradeRouteResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgCreateTradeRouteResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgCreateTradeRouteResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgCreateTradeRouteResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgCreateTradeRouteResponse.Merge(m, src) +} +func (m *MsgCreateTradeRouteResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgCreateTradeRouteResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgCreateTradeRouteResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgCreateTradeRouteResponse proto.InternalMessageInfo + +// Deletes a trade route +type MsgDeleteTradeRoute struct { + // authority is the address that controls the module (defaults to x/gov unless + // overwritten). + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + // The reward denom of the route in it's native form (e.g. usdc) + RewardDenom string `protobuf:"bytes,2,opt,name=reward_denom,json=rewardDenom,proto3" json:"reward_denom,omitempty"` + // The host zone's denom in it's native form (e.g. dydx) + HostDenom string `protobuf:"bytes,3,opt,name=host_denom,json=hostDenom,proto3" json:"host_denom,omitempty"` +} + +func (m *MsgDeleteTradeRoute) Reset() { *m = MsgDeleteTradeRoute{} } +func (m *MsgDeleteTradeRoute) String() string { return proto.CompactTextString(m) } +func (*MsgDeleteTradeRoute) ProtoMessage() {} +func (*MsgDeleteTradeRoute) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{35} +} +func (m *MsgDeleteTradeRoute) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgDeleteTradeRoute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgDeleteTradeRoute.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgDeleteTradeRoute) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgDeleteTradeRoute.Merge(m, src) +} +func (m *MsgDeleteTradeRoute) XXX_Size() int { + return m.Size() +} +func (m *MsgDeleteTradeRoute) XXX_DiscardUnknown() { + xxx_messageInfo_MsgDeleteTradeRoute.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgDeleteTradeRoute proto.InternalMessageInfo + +func (m *MsgDeleteTradeRoute) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +func (m *MsgDeleteTradeRoute) GetRewardDenom() string { + if m != nil { + return m.RewardDenom + } + return "" +} + +func (m *MsgDeleteTradeRoute) GetHostDenom() string { + if m != nil { + return m.HostDenom + } + return "" +} + +type MsgDeleteTradeRouteResponse struct { +} + +func (m *MsgDeleteTradeRouteResponse) Reset() { *m = MsgDeleteTradeRouteResponse{} } +func (m *MsgDeleteTradeRouteResponse) String() string { return proto.CompactTextString(m) } +func (*MsgDeleteTradeRouteResponse) ProtoMessage() {} +func (*MsgDeleteTradeRouteResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{36} +} +func (m *MsgDeleteTradeRouteResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgDeleteTradeRouteResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgDeleteTradeRouteResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgDeleteTradeRouteResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgDeleteTradeRouteResponse.Merge(m, src) +} +func (m *MsgDeleteTradeRouteResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgDeleteTradeRouteResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgDeleteTradeRouteResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgDeleteTradeRouteResponse proto.InternalMessageInfo + +// Updates the config of a trade route +type MsgUpdateTradeRoute struct { + // authority is the address that controls the module (defaults to x/gov unless + // overwritten). + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + // The reward denom of the route in it's native form (e.g. usdc) + RewardDenom string `protobuf:"bytes,2,opt,name=reward_denom,json=rewardDenom,proto3" json:"reward_denom,omitempty"` + // The host zone's denom in it's native form (e.g. dydx) + HostDenom string `protobuf:"bytes,3,opt,name=host_denom,json=hostDenom,proto3" json:"host_denom,omitempty"` + // Deprecated, the trades are now executed off-chain via authz + // + // The osmosis pool ID + PoolId uint64 `protobuf:"varint,4,opt,name=pool_id,json=poolId,proto3" json:"pool_id,omitempty"` // Deprecated: Do not use. + // Deprecated, the trades are now executed off-chain via authz + // + // Threshold defining the percentage of tokens that could be lost in the trade + // This captures both the loss from slippage and from a stale price on stride + // "0.05" means the output from the trade can be no less than a 5% deviation + // from the current value + MaxAllowedSwapLossRate string `protobuf:"bytes,5,opt,name=max_allowed_swap_loss_rate,json=maxAllowedSwapLossRate,proto3" json:"max_allowed_swap_loss_rate,omitempty"` // Deprecated: Do not use. + // Deprecated, the trades are now executed off-chain via authz + // + // minimum amount of reward tokens to initate a swap + // if not provided, defaults to 0 + MinSwapAmount cosmossdk_io_math.Int `protobuf:"bytes,6,opt,name=min_swap_amount,json=minSwapAmount,proto3,customtype=cosmossdk.io/math.Int" json:"min_swap_amount"` // Deprecated: Do not use. + // Deprecated, the trades are now executed off-chain via authz + // + // maximum amount of reward tokens in a single swap + // if not provided, defaults to 10e24 + MaxSwapAmount cosmossdk_io_math.Int `protobuf:"bytes,7,opt,name=max_swap_amount,json=maxSwapAmount,proto3,customtype=cosmossdk.io/math.Int" json:"max_swap_amount"` // Deprecated: Do not use. + // Minimum amount of reward token that must be accumulated before + // the tokens are transferred to the trade ICA + MinTransferAmount cosmossdk_io_math.Int `protobuf:"bytes,17,opt,name=min_transfer_amount,json=minTransferAmount,proto3,customtype=cosmossdk.io/math.Int" json:"min_transfer_amount"` +} + +func (m *MsgUpdateTradeRoute) Reset() { *m = MsgUpdateTradeRoute{} } +func (m *MsgUpdateTradeRoute) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateTradeRoute) ProtoMessage() {} +func (*MsgUpdateTradeRoute) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{37} +} +func (m *MsgUpdateTradeRoute) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateTradeRoute) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateTradeRoute.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateTradeRoute) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateTradeRoute.Merge(m, src) +} +func (m *MsgUpdateTradeRoute) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateTradeRoute) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateTradeRoute.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateTradeRoute proto.InternalMessageInfo + +func (m *MsgUpdateTradeRoute) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +func (m *MsgUpdateTradeRoute) GetRewardDenom() string { + if m != nil { + return m.RewardDenom + } + return "" +} + +func (m *MsgUpdateTradeRoute) GetHostDenom() string { + if m != nil { + return m.HostDenom + } + return "" +} + +// Deprecated: Do not use. +func (m *MsgUpdateTradeRoute) GetPoolId() uint64 { + if m != nil { + return m.PoolId + } + return 0 +} + +// Deprecated: Do not use. +func (m *MsgUpdateTradeRoute) GetMaxAllowedSwapLossRate() string { + if m != nil { + return m.MaxAllowedSwapLossRate + } + return "" +} + +type MsgUpdateTradeRouteResponse struct { +} + +func (m *MsgUpdateTradeRouteResponse) Reset() { *m = MsgUpdateTradeRouteResponse{} } +func (m *MsgUpdateTradeRouteResponse) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateTradeRouteResponse) ProtoMessage() {} +func (*MsgUpdateTradeRouteResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{38} +} +func (m *MsgUpdateTradeRouteResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateTradeRouteResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateTradeRouteResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateTradeRouteResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateTradeRouteResponse.Merge(m, src) +} +func (m *MsgUpdateTradeRouteResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateTradeRouteResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateTradeRouteResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateTradeRouteResponse proto.InternalMessageInfo + +// Registers or updates a community pool rebate by specifying the amount liquid +// staked +type MsgSetCommunityPoolRebate struct { + // Message signer (admin only) + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + // Chain id of the chain whose community pool has a liquid staking rebate + // arrangement with stride + ChainId string `protobuf:"bytes,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + // Rebate percentage represented as a decimal (e.g. 0.2 for 20%) + RebateRate cosmossdk_io_math.LegacyDec `protobuf:"bytes,3,opt,name=rebate_rate,json=rebateRate,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"rebate_rate"` + // Number of stTokens recieved by the community pool after liquid staking + LiquidStakedStTokenAmount cosmossdk_io_math.Int `protobuf:"bytes,4,opt,name=liquid_staked_st_token_amount,json=liquidStakedStTokenAmount,proto3,customtype=cosmossdk.io/math.Int" json:"liquid_staked_st_token_amount"` +} + +func (m *MsgSetCommunityPoolRebate) Reset() { *m = MsgSetCommunityPoolRebate{} } +func (m *MsgSetCommunityPoolRebate) String() string { return proto.CompactTextString(m) } +func (*MsgSetCommunityPoolRebate) ProtoMessage() {} +func (*MsgSetCommunityPoolRebate) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{39} +} +func (m *MsgSetCommunityPoolRebate) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSetCommunityPoolRebate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSetCommunityPoolRebate.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgSetCommunityPoolRebate) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSetCommunityPoolRebate.Merge(m, src) +} +func (m *MsgSetCommunityPoolRebate) XXX_Size() int { + return m.Size() +} +func (m *MsgSetCommunityPoolRebate) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSetCommunityPoolRebate.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSetCommunityPoolRebate proto.InternalMessageInfo + +func (m *MsgSetCommunityPoolRebate) GetCreator() string { + if m != nil { + return m.Creator + } + return "" +} + +func (m *MsgSetCommunityPoolRebate) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +type MsgSetCommunityPoolRebateResponse struct { +} + +func (m *MsgSetCommunityPoolRebateResponse) Reset() { *m = MsgSetCommunityPoolRebateResponse{} } +func (m *MsgSetCommunityPoolRebateResponse) String() string { return proto.CompactTextString(m) } +func (*MsgSetCommunityPoolRebateResponse) ProtoMessage() {} +func (*MsgSetCommunityPoolRebateResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{40} +} +func (m *MsgSetCommunityPoolRebateResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSetCommunityPoolRebateResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSetCommunityPoolRebateResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgSetCommunityPoolRebateResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSetCommunityPoolRebateResponse.Merge(m, src) +} +func (m *MsgSetCommunityPoolRebateResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgSetCommunityPoolRebateResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSetCommunityPoolRebateResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSetCommunityPoolRebateResponse proto.InternalMessageInfo + +// Grants or revokes trade permissions to a given address via authz +type MsgToggleTradeController struct { + // Message signer (admin only) + Creator string `protobuf:"bytes,1,opt,name=creator,proto3" json:"creator,omitempty"` + // Chain ID of the trade account + ChainId string `protobuf:"bytes,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + // Permission change (either grant or revoke) + PermissionChange AuthzPermissionChange `protobuf:"varint,3,opt,name=permission_change,json=permissionChange,proto3,enum=stride.stakeibc.AuthzPermissionChange" json:"permission_change,omitempty"` + // Address of trade operator + Address string `protobuf:"bytes,4,opt,name=address,proto3" json:"address,omitempty"` + // Option to grant/revoke the legacy osmosis swap message + Legacy bool `protobuf:"varint,5,opt,name=legacy,proto3" json:"legacy,omitempty"` +} + +func (m *MsgToggleTradeController) Reset() { *m = MsgToggleTradeController{} } +func (m *MsgToggleTradeController) String() string { return proto.CompactTextString(m) } +func (*MsgToggleTradeController) ProtoMessage() {} +func (*MsgToggleTradeController) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{41} +} +func (m *MsgToggleTradeController) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgToggleTradeController) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgToggleTradeController.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgToggleTradeController) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgToggleTradeController.Merge(m, src) +} +func (m *MsgToggleTradeController) XXX_Size() int { + return m.Size() +} +func (m *MsgToggleTradeController) XXX_DiscardUnknown() { + xxx_messageInfo_MsgToggleTradeController.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgToggleTradeController proto.InternalMessageInfo + +func (m *MsgToggleTradeController) GetCreator() string { + if m != nil { + return m.Creator + } + return "" +} + +func (m *MsgToggleTradeController) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +func (m *MsgToggleTradeController) GetPermissionChange() AuthzPermissionChange { + if m != nil { + return m.PermissionChange + } + return AuthzPermissionChange_GRANT +} + +func (m *MsgToggleTradeController) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func (m *MsgToggleTradeController) GetLegacy() bool { + if m != nil { + return m.Legacy + } + return false +} + +type MsgToggleTradeControllerResponse struct { +} + +func (m *MsgToggleTradeControllerResponse) Reset() { *m = MsgToggleTradeControllerResponse{} } +func (m *MsgToggleTradeControllerResponse) String() string { return proto.CompactTextString(m) } +func (*MsgToggleTradeControllerResponse) ProtoMessage() {} +func (*MsgToggleTradeControllerResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{42} +} +func (m *MsgToggleTradeControllerResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgToggleTradeControllerResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgToggleTradeControllerResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgToggleTradeControllerResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgToggleTradeControllerResponse.Merge(m, src) +} +func (m *MsgToggleTradeControllerResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgToggleTradeControllerResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgToggleTradeControllerResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgToggleTradeControllerResponse proto.InternalMessageInfo + +// Updates host zone params +type MsgUpdateHostZoneParams struct { + // authority is the address that controls the module (defaults to x/gov unless + // overwritten). + Authority string `protobuf:"bytes,1,opt,name=authority,proto3" json:"authority,omitempty"` + // Chain ID of the host zone + ChainId string `protobuf:"bytes,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + // Max messages that can be sent in a single ICA message + MaxMessagesPerIcaTx uint64 `protobuf:"varint,3,opt,name=max_messages_per_ica_tx,json=maxMessagesPerIcaTx,proto3" json:"max_messages_per_ica_tx,omitempty"` +} + +func (m *MsgUpdateHostZoneParams) Reset() { *m = MsgUpdateHostZoneParams{} } +func (m *MsgUpdateHostZoneParams) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateHostZoneParams) ProtoMessage() {} +func (*MsgUpdateHostZoneParams) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{43} +} +func (m *MsgUpdateHostZoneParams) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateHostZoneParams) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateHostZoneParams.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateHostZoneParams) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateHostZoneParams.Merge(m, src) +} +func (m *MsgUpdateHostZoneParams) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateHostZoneParams) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateHostZoneParams.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateHostZoneParams proto.InternalMessageInfo + +func (m *MsgUpdateHostZoneParams) GetAuthority() string { + if m != nil { + return m.Authority + } + return "" +} + +func (m *MsgUpdateHostZoneParams) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +func (m *MsgUpdateHostZoneParams) GetMaxMessagesPerIcaTx() uint64 { + if m != nil { + return m.MaxMessagesPerIcaTx + } + return 0 +} + +type MsgUpdateHostZoneParamsResponse struct { +} + +func (m *MsgUpdateHostZoneParamsResponse) Reset() { *m = MsgUpdateHostZoneParamsResponse{} } +func (m *MsgUpdateHostZoneParamsResponse) String() string { return proto.CompactTextString(m) } +func (*MsgUpdateHostZoneParamsResponse) ProtoMessage() {} +func (*MsgUpdateHostZoneParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_9b7e09c9ad51cd54, []int{44} +} +func (m *MsgUpdateHostZoneParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgUpdateHostZoneParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgUpdateHostZoneParamsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgUpdateHostZoneParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgUpdateHostZoneParamsResponse.Merge(m, src) +} +func (m *MsgUpdateHostZoneParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgUpdateHostZoneParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgUpdateHostZoneParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgUpdateHostZoneParamsResponse proto.InternalMessageInfo + +func init() { + proto.RegisterEnum("stride.stakeibc.AuthzPermissionChange", AuthzPermissionChange_name, AuthzPermissionChange_value) + proto.RegisterType((*MsgUpdateInnerRedemptionRateBounds)(nil), "stride.stakeibc.MsgUpdateInnerRedemptionRateBounds") + proto.RegisterType((*MsgUpdateInnerRedemptionRateBoundsResponse)(nil), "stride.stakeibc.MsgUpdateInnerRedemptionRateBoundsResponse") + proto.RegisterType((*MsgLiquidStake)(nil), "stride.stakeibc.MsgLiquidStake") + proto.RegisterType((*MsgLiquidStakeResponse)(nil), "stride.stakeibc.MsgLiquidStakeResponse") + proto.RegisterType((*MsgLSMLiquidStake)(nil), "stride.stakeibc.MsgLSMLiquidStake") + proto.RegisterType((*MsgLSMLiquidStakeResponse)(nil), "stride.stakeibc.MsgLSMLiquidStakeResponse") + proto.RegisterType((*MsgClearBalance)(nil), "stride.stakeibc.MsgClearBalance") + proto.RegisterType((*MsgClearBalanceResponse)(nil), "stride.stakeibc.MsgClearBalanceResponse") + proto.RegisterType((*MsgRedeemStake)(nil), "stride.stakeibc.MsgRedeemStake") + proto.RegisterType((*MsgRedeemStakeResponse)(nil), "stride.stakeibc.MsgRedeemStakeResponse") + proto.RegisterType((*MsgRegisterHostZone)(nil), "stride.stakeibc.MsgRegisterHostZone") + proto.RegisterType((*MsgRegisterHostZoneResponse)(nil), "stride.stakeibc.MsgRegisterHostZoneResponse") + proto.RegisterType((*MsgClaimUndelegatedTokens)(nil), "stride.stakeibc.MsgClaimUndelegatedTokens") + proto.RegisterType((*MsgClaimUndelegatedTokensResponse)(nil), "stride.stakeibc.MsgClaimUndelegatedTokensResponse") + proto.RegisterType((*MsgRebalanceValidators)(nil), "stride.stakeibc.MsgRebalanceValidators") + proto.RegisterType((*MsgRebalanceValidatorsResponse)(nil), "stride.stakeibc.MsgRebalanceValidatorsResponse") + proto.RegisterType((*MsgAddValidators)(nil), "stride.stakeibc.MsgAddValidators") + proto.RegisterType((*MsgAddValidatorsResponse)(nil), "stride.stakeibc.MsgAddValidatorsResponse") + proto.RegisterType((*ValidatorWeight)(nil), "stride.stakeibc.ValidatorWeight") + proto.RegisterType((*MsgChangeValidatorWeights)(nil), "stride.stakeibc.MsgChangeValidatorWeights") + proto.RegisterType((*MsgChangeValidatorWeightsResponse)(nil), "stride.stakeibc.MsgChangeValidatorWeightsResponse") + proto.RegisterType((*MsgDeleteValidator)(nil), "stride.stakeibc.MsgDeleteValidator") + proto.RegisterType((*MsgDeleteValidatorResponse)(nil), "stride.stakeibc.MsgDeleteValidatorResponse") + proto.RegisterType((*MsgRestoreInterchainAccount)(nil), "stride.stakeibc.MsgRestoreInterchainAccount") + proto.RegisterType((*MsgRestoreInterchainAccountResponse)(nil), "stride.stakeibc.MsgRestoreInterchainAccountResponse") + proto.RegisterType((*MsgCloseDelegationChannel)(nil), "stride.stakeibc.MsgCloseDelegationChannel") + proto.RegisterType((*MsgCloseDelegationChannelResponse)(nil), "stride.stakeibc.MsgCloseDelegationChannelResponse") + proto.RegisterType((*MsgUpdateValidatorSharesExchRate)(nil), "stride.stakeibc.MsgUpdateValidatorSharesExchRate") + proto.RegisterType((*MsgUpdateValidatorSharesExchRateResponse)(nil), "stride.stakeibc.MsgUpdateValidatorSharesExchRateResponse") + proto.RegisterType((*MsgCalibrateDelegation)(nil), "stride.stakeibc.MsgCalibrateDelegation") + proto.RegisterType((*MsgCalibrateDelegationResponse)(nil), "stride.stakeibc.MsgCalibrateDelegationResponse") + proto.RegisterType((*MsgResumeHostZone)(nil), "stride.stakeibc.MsgResumeHostZone") + proto.RegisterType((*MsgResumeHostZoneResponse)(nil), "stride.stakeibc.MsgResumeHostZoneResponse") + proto.RegisterType((*MsgCreateTradeRoute)(nil), "stride.stakeibc.MsgCreateTradeRoute") + proto.RegisterType((*MsgCreateTradeRouteResponse)(nil), "stride.stakeibc.MsgCreateTradeRouteResponse") + proto.RegisterType((*MsgDeleteTradeRoute)(nil), "stride.stakeibc.MsgDeleteTradeRoute") + proto.RegisterType((*MsgDeleteTradeRouteResponse)(nil), "stride.stakeibc.MsgDeleteTradeRouteResponse") + proto.RegisterType((*MsgUpdateTradeRoute)(nil), "stride.stakeibc.MsgUpdateTradeRoute") + proto.RegisterType((*MsgUpdateTradeRouteResponse)(nil), "stride.stakeibc.MsgUpdateTradeRouteResponse") + proto.RegisterType((*MsgSetCommunityPoolRebate)(nil), "stride.stakeibc.MsgSetCommunityPoolRebate") + proto.RegisterType((*MsgSetCommunityPoolRebateResponse)(nil), "stride.stakeibc.MsgSetCommunityPoolRebateResponse") + proto.RegisterType((*MsgToggleTradeController)(nil), "stride.stakeibc.MsgToggleTradeController") + proto.RegisterType((*MsgToggleTradeControllerResponse)(nil), "stride.stakeibc.MsgToggleTradeControllerResponse") + proto.RegisterType((*MsgUpdateHostZoneParams)(nil), "stride.stakeibc.MsgUpdateHostZoneParams") + proto.RegisterType((*MsgUpdateHostZoneParamsResponse)(nil), "stride.stakeibc.MsgUpdateHostZoneParamsResponse") +} + +func init() { proto.RegisterFile("stride/stakeibc/tx.proto", fileDescriptor_9b7e09c9ad51cd54) } + +var fileDescriptor_9b7e09c9ad51cd54 = []byte{ + // 2688 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0x4d, 0x6c, 0x24, 0x47, + 0xf5, 0xf7, 0xac, 0x3f, 0xf7, 0xd9, 0x5e, 0xdb, 0x6d, 0x7b, 0x77, 0x3c, 0x8e, 0x3d, 0x76, 0x3b, + 0xff, 0xfc, 0x1d, 0x27, 0xf6, 0xc4, 0xde, 0x0d, 0x01, 0x07, 0x10, 0xb6, 0x77, 0x59, 0x4c, 0xd6, + 0xc9, 0xaa, 0xed, 0x24, 0x52, 0x24, 0xd4, 0xd4, 0x74, 0xd7, 0x8e, 0x5b, 0xdb, 0xdd, 0x35, 0x74, + 0xf5, 0xd8, 0xe3, 0x1c, 0x50, 0xc4, 0x29, 0x42, 0x42, 0x20, 0x71, 0x45, 0x28, 0x07, 0x4e, 0x9c, + 0x72, 0xc8, 0x81, 0x23, 0x07, 0x84, 0x22, 0x71, 0x09, 0x39, 0x00, 0x8a, 0x90, 0x89, 0x12, 0xa4, + 0x20, 0x4e, 0x68, 0x4f, 0x9c, 0x10, 0xaa, 0xaa, 0xee, 0x9a, 0xee, 0x9e, 0xea, 0x99, 0x59, 0xcb, + 0x21, 0xb9, 0xac, 0xb7, 0xab, 0x5e, 0xbd, 0x8f, 0x5f, 0xbd, 0xf7, 0xaa, 0xde, 0xab, 0x81, 0x22, + 0x0d, 0x03, 0xc7, 0xc6, 0x15, 0x1a, 0xa2, 0x87, 0xd8, 0xa9, 0x5a, 0x95, 0xb0, 0xb9, 0x51, 0x0f, + 0x48, 0x48, 0xb4, 0x09, 0x31, 0xb3, 0x11, 0xcf, 0x94, 0xa6, 0x90, 0xe7, 0xf8, 0xa4, 0xc2, 0xff, + 0x15, 0x34, 0xa5, 0x39, 0x8b, 0x50, 0x8f, 0x50, 0x93, 0x7f, 0x55, 0xc4, 0x47, 0x34, 0xb5, 0x28, + 0xbe, 0x2a, 0x55, 0x44, 0x71, 0xe5, 0x64, 0xb3, 0x8a, 0x43, 0xb4, 0x59, 0xb1, 0x88, 0xe3, 0x47, + 0xf3, 0x37, 0xa2, 0x79, 0x8f, 0xd6, 0x2a, 0x27, 0x9b, 0xec, 0x4f, 0x34, 0x31, 0x53, 0x23, 0x35, + 0x22, 0x18, 0xb2, 0xff, 0x45, 0xa3, 0xe5, 0xac, 0x9e, 0x27, 0xc8, 0x75, 0x6c, 0x14, 0x92, 0x40, + 0x10, 0xe8, 0x6f, 0xf7, 0x83, 0x7e, 0x40, 0x6b, 0xaf, 0xd6, 0x6d, 0x14, 0xe2, 0x7d, 0xdf, 0xc7, + 0x81, 0x81, 0x6d, 0xec, 0xd5, 0x43, 0x87, 0xf8, 0x06, 0x0a, 0xf1, 0x2e, 0x69, 0xf8, 0x36, 0xd5, + 0xb6, 0x60, 0xd8, 0x0a, 0x30, 0x5b, 0x57, 0x2c, 0x2c, 0x15, 0x56, 0xaf, 0xee, 0x16, 0x3f, 0x7c, + 0x6f, 0x7d, 0x26, 0xd2, 0x7c, 0xc7, 0xb6, 0x03, 0x4c, 0xe9, 0x61, 0x18, 0x38, 0x7e, 0xcd, 0x88, + 0x09, 0xb5, 0x39, 0x18, 0xb1, 0x8e, 0x91, 0xe3, 0x9b, 0x8e, 0x5d, 0xbc, 0xc2, 0x16, 0x19, 0xc3, + 0xfc, 0x7b, 0xdf, 0xd6, 0x5c, 0x98, 0xf3, 0xd8, 0x04, 0x93, 0x67, 0x06, 0x52, 0xa0, 0x19, 0xa0, + 0x10, 0x17, 0xfb, 0xb9, 0x80, 0xcd, 0xf7, 0xcf, 0xcb, 0x7d, 0x1f, 0x9d, 0x97, 0xe7, 0x85, 0x10, + 0x6a, 0x3f, 0xdc, 0x70, 0x48, 0xc5, 0x43, 0xe1, 0xf1, 0xc6, 0x3d, 0x5c, 0x43, 0xd6, 0xd9, 0x6d, + 0x6c, 0x7d, 0xf8, 0xde, 0x3a, 0x44, 0x3a, 0xdc, 0xc6, 0x96, 0x71, 0xdd, 0x73, 0x7c, 0x85, 0x09, + 0x5c, 0x1a, 0x6a, 0xe6, 0x48, 0x1b, 0xb8, 0xb8, 0x34, 0xd4, 0x54, 0x48, 0xdb, 0x7e, 0xe1, 0x47, + 0x9f, 0xbd, 0xbb, 0x16, 0x83, 0xf0, 0xe3, 0xcf, 0xde, 0x5d, 0x7b, 0x4a, 0x82, 0x2f, 0x81, 0x56, + 0x61, 0xac, 0x3f, 0x0b, 0x6b, 0xdd, 0x77, 0xc2, 0xc0, 0xb4, 0x4e, 0x7c, 0x8a, 0xf5, 0xdf, 0x15, + 0xe0, 0xda, 0x01, 0xad, 0xdd, 0x73, 0x7e, 0xd0, 0x70, 0xec, 0x43, 0x26, 0xe1, 0x42, 0x9b, 0xf4, + 0x3c, 0x0c, 0x21, 0x8f, 0x34, 0xfc, 0x50, 0x6c, 0xd1, 0xee, 0x42, 0x04, 0xc4, 0x6c, 0x3b, 0x10, + 0xfb, 0x7e, 0x68, 0x44, 0xc4, 0xda, 0x02, 0xc0, 0x31, 0xa1, 0xa1, 0x69, 0x63, 0x9f, 0x78, 0x62, + 0xc7, 0x8c, 0xab, 0x6c, 0xe4, 0x36, 0x1b, 0xd8, 0x5e, 0xcd, 0x62, 0x70, 0x23, 0x89, 0x41, 0x42, + 0x67, 0xfd, 0xad, 0x02, 0x5c, 0x4f, 0x0f, 0xc5, 0x16, 0x6a, 0x0f, 0x60, 0x84, 0x86, 0x66, 0x48, + 0x1e, 0x62, 0x9f, 0xdb, 0x33, 0xba, 0x35, 0xb7, 0x11, 0x19, 0xc3, 0xa2, 0x63, 0x23, 0x8a, 0x8e, + 0x8d, 0x3d, 0xe2, 0xf8, 0xbb, 0xcf, 0x31, 0xbd, 0x7f, 0xfd, 0xb7, 0xf2, 0x6a, 0xcd, 0x09, 0x8f, + 0x1b, 0xd5, 0x0d, 0x8b, 0x78, 0x51, 0x60, 0x45, 0x7f, 0xd6, 0xa9, 0xfd, 0xb0, 0x12, 0x9e, 0xd5, + 0x31, 0xe5, 0x0b, 0xa8, 0x31, 0x4c, 0xc3, 0x23, 0xc6, 0x5b, 0xff, 0xa8, 0x00, 0x53, 0x4c, 0x85, + 0xc3, 0x83, 0x2f, 0x08, 0xcc, 0x75, 0x98, 0x76, 0xa9, 0x27, 0x2c, 0x35, 0x9d, 0xaa, 0x95, 0x42, + 0x75, 0xd2, 0xa5, 0x1e, 0xd7, 0x73, 0xbf, 0x6a, 0x09, 0x70, 0x9f, 0xc9, 0x82, 0x5b, 0x4a, 0x81, + 0x9b, 0x32, 0x43, 0x7f, 0x19, 0xe6, 0xda, 0x06, 0x25, 0xc2, 0x9b, 0x30, 0x13, 0x06, 0xc8, 0xa7, + 0xc8, 0xe2, 0xf1, 0x60, 0x11, 0xaf, 0xee, 0xe2, 0x10, 0x73, 0x83, 0x47, 0x8c, 0xe9, 0xc4, 0xdc, + 0x5e, 0x34, 0xa5, 0xff, 0xb5, 0x00, 0x13, 0x07, 0xb4, 0xb6, 0xe7, 0x62, 0x14, 0xec, 0x22, 0x17, + 0xf9, 0x16, 0xbe, 0xec, 0xe4, 0xd0, 0x42, 0xb1, 0xff, 0x71, 0x50, 0x2c, 0x02, 0xe3, 0xe0, 0xfb, + 0xd8, 0x15, 0x31, 0x6d, 0xc4, 0x9f, 0xdb, 0x4f, 0x67, 0x01, 0x2b, 0x26, 0x01, 0x4b, 0x9a, 0xa2, + 0xcf, 0xc1, 0x8d, 0xcc, 0x90, 0x0c, 0xb8, 0x7f, 0x8b, 0x80, 0x63, 0x41, 0x89, 0xbd, 0xff, 0xb9, + 0x8f, 0xcc, 0x03, 0x0f, 0x2f, 0xf3, 0x4d, 0xe2, 0x47, 0x19, 0xd2, 0x18, 0x61, 0x03, 0x6f, 0x10, + 0x1f, 0x6b, 0xb7, 0x60, 0x24, 0xc0, 0x16, 0x76, 0x4e, 0x70, 0x10, 0xe5, 0xb3, 0x7c, 0x45, 0x24, + 0x65, 0x97, 0x20, 0x4d, 0xd8, 0xa9, 0x17, 0x79, 0x8c, 0x26, 0x46, 0x24, 0x28, 0x1f, 0x0f, 0xc1, + 0x34, 0x9f, 0xaa, 0x39, 0x34, 0xc4, 0xc1, 0x77, 0x62, 0x8d, 0xbe, 0x01, 0xe3, 0x16, 0xf1, 0x7d, + 0x2c, 0x1c, 0x2b, 0xde, 0xe3, 0xdd, 0xe2, 0xa3, 0xf3, 0xf2, 0xcc, 0x19, 0xf2, 0xdc, 0x6d, 0x3d, + 0x35, 0xad, 0x1b, 0x63, 0xad, 0xef, 0x7d, 0x5b, 0xd3, 0x61, 0xac, 0x8a, 0xad, 0xe3, 0x9b, 0x5b, + 0xf5, 0x00, 0x3f, 0x70, 0x9a, 0xc5, 0x31, 0x6e, 0x70, 0x6a, 0x4c, 0xbb, 0x95, 0x4a, 0x41, 0xc2, + 0xec, 0xd9, 0x47, 0xe7, 0xe5, 0x29, 0xc1, 0xbf, 0x35, 0xa7, 0x27, 0x32, 0x93, 0xb6, 0x09, 0x57, + 0x5b, 0x11, 0x36, 0xc8, 0x17, 0xcd, 0x3c, 0x3a, 0x2f, 0x4f, 0x8a, 0x45, 0x72, 0x4a, 0x37, 0x46, + 0x9c, 0x28, 0xde, 0x92, 0xbb, 0x3c, 0xd4, 0xeb, 0x2e, 0xbf, 0x0c, 0x22, 0x7a, 0x1e, 0xe0, 0xc0, + 0x8c, 0xdc, 0x90, 0xa1, 0x00, 0x7c, 0xfd, 0xe2, 0xa3, 0xf3, 0x72, 0x49, 0x08, 0x54, 0x10, 0xe9, + 0xc6, 0x54, 0x3c, 0xba, 0x27, 0x06, 0xf7, 0x6d, 0xed, 0xdb, 0x30, 0xd9, 0xf0, 0xab, 0xc4, 0xb7, + 0x1d, 0xbf, 0x66, 0xd6, 0x71, 0xe0, 0x10, 0xbb, 0x38, 0xba, 0x54, 0x58, 0x1d, 0xd8, 0x9d, 0x7f, + 0x74, 0x5e, 0xbe, 0x21, 0x98, 0x65, 0x29, 0x74, 0x63, 0x42, 0x0e, 0xdd, 0xe7, 0x23, 0x1a, 0x82, + 0x69, 0x76, 0xf0, 0x66, 0x0f, 0xc1, 0xf1, 0x8b, 0x1e, 0x82, 0x53, 0x9e, 0xe3, 0x67, 0x4e, 0x5b, + 0x26, 0x02, 0x35, 0xdb, 0x44, 0x5c, 0xbb, 0xb8, 0x08, 0xd4, 0xcc, 0x88, 0x78, 0x01, 0x8a, 0x2c, + 0x61, 0xba, 0x3c, 0xa5, 0x99, 0xdc, 0x6b, 0x4d, 0xec, 0xa3, 0xaa, 0x8b, 0xed, 0xe2, 0x04, 0xcf, + 0x5d, 0xb3, 0x2e, 0xf5, 0x12, 0x19, 0xef, 0x8e, 0x98, 0xd4, 0xee, 0x40, 0xd9, 0x22, 0x9e, 0xd7, + 0xf0, 0x9d, 0xf0, 0xcc, 0xac, 0x13, 0xe2, 0x9a, 0x61, 0x80, 0x11, 0x6d, 0x04, 0x67, 0x26, 0x12, + 0x1b, 0x59, 0x9c, 0xe4, 0xae, 0xf6, 0x84, 0x24, 0xbb, 0x4f, 0x88, 0x7b, 0x14, 0x11, 0x45, 0x9b, + 0xad, 0xdd, 0x82, 0x1b, 0xcc, 0x44, 0x0f, 0x53, 0x8a, 0x6a, 0x98, 0x32, 0xb8, 0x4d, 0xc7, 0x42, + 0x66, 0xd8, 0x2c, 0x4e, 0xb1, 0x4d, 0x31, 0x18, 0x02, 0x07, 0xd1, 0xec, 0x7d, 0x1c, 0xec, 0x5b, + 0xe8, 0xa8, 0xb9, 0xfd, 0xfc, 0xdb, 0xef, 0x94, 0xfb, 0xfe, 0xf1, 0x4e, 0xb9, 0x2f, 0x1b, 0x77, + 0x4f, 0xa4, 0xe3, 0x2e, 0x1d, 0x4a, 0xfa, 0x02, 0xcc, 0x2b, 0x86, 0x65, 0x04, 0x9e, 0x17, 0x78, + 0x86, 0xdf, 0x73, 0x91, 0xe3, 0xbd, 0xea, 0xdb, 0xd8, 0xc5, 0x35, 0x14, 0x62, 0x9b, 0x1f, 0x19, + 0x17, 0xbb, 0xb7, 0x2d, 0xc1, 0x98, 0x4c, 0x35, 0xad, 0xf4, 0x0c, 0x71, 0xb6, 0xd9, 0xb7, 0xb5, + 0x19, 0x18, 0xc4, 0x75, 0x62, 0x1d, 0xf3, 0x44, 0x34, 0x60, 0x88, 0x0f, 0xad, 0x94, 0xc8, 0x42, + 0x83, 0x22, 0x43, 0xc9, 0x5c, 0x73, 0x33, 0x6b, 0xb3, 0x9e, 0x4e, 0xc1, 0x2a, 0xe5, 0xbf, 0x3b, + 0x30, 0x32, 0x30, 0x39, 0xa8, 0xaf, 0xc0, 0x72, 0x2e, 0x89, 0x44, 0xe1, 0xb7, 0x85, 0x28, 0x45, + 0x55, 0x45, 0xd6, 0x7e, 0x2d, 0xbe, 0xe6, 0x5e, 0x0c, 0x82, 0x54, 0xb6, 0xbd, 0x92, 0xc9, 0xb6, + 0x2b, 0x30, 0xee, 0x37, 0x3c, 0x33, 0x88, 0x65, 0x45, 0x28, 0x8c, 0xf9, 0x0d, 0x4f, 0xca, 0xdf, + 0x7e, 0x2e, 0x6b, 0x70, 0x39, 0xbd, 0xc9, 0x6d, 0x7a, 0xea, 0x4b, 0xb0, 0xa8, 0x9e, 0x91, 0x46, + 0xfe, 0xa1, 0x00, 0x93, 0x07, 0xb4, 0xb6, 0x63, 0xdb, 0x9f, 0xa7, 0x79, 0xdb, 0x00, 0xb2, 0x48, + 0xa0, 0xc5, 0xfe, 0xa5, 0xfe, 0xd5, 0xd1, 0xad, 0xd2, 0x46, 0xa6, 0xaa, 0xd9, 0x90, 0x1a, 0x18, + 0x09, 0xea, 0xed, 0xb5, 0xac, 0xd5, 0x73, 0x49, 0xab, 0x53, 0x8a, 0xeb, 0x25, 0x28, 0x66, 0xc7, + 0xa4, 0xa5, 0x0f, 0x60, 0x42, 0x8e, 0xbe, 0x8e, 0x9d, 0xda, 0x71, 0xa8, 0xbd, 0x08, 0xc3, 0x71, + 0x88, 0x0a, 0x3b, 0x97, 0x3f, 0x7c, 0x6f, 0x7d, 0x21, 0xb2, 0x53, 0x12, 0x67, 0x0c, 0x8e, 0x56, + 0x68, 0xd7, 0x61, 0xe8, 0x94, 0xb3, 0xe1, 0xd6, 0x0e, 0x18, 0xd1, 0x97, 0xfe, 0xaf, 0x28, 0x78, + 0x8e, 0x91, 0x5f, 0xc3, 0x19, 0x89, 0x9f, 0x03, 0xb4, 0x07, 0x30, 0x25, 0xc1, 0x32, 0x85, 0x0a, + 0x31, 0xc2, 0x4b, 0xf9, 0x08, 0x0b, 0x75, 0x8c, 0xc9, 0x93, 0x8c, 0x7e, 0xdd, 0x82, 0x4a, 0x69, + 0x54, 0x1c, 0x4e, 0xca, 0x49, 0x89, 0xff, 0x1f, 0x0b, 0xa0, 0x1d, 0xd0, 0xda, 0x6d, 0xcc, 0xee, + 0x7c, 0x92, 0xea, 0xf2, 0x01, 0xf9, 0x3a, 0x8c, 0x9c, 0x20, 0x97, 0xe7, 0xde, 0xe8, 0xb2, 0xd7, + 0xcb, 0xae, 0x9e, 0x20, 0x97, 0x8d, 0x6c, 0x3f, 0x9b, 0xb5, 0x7f, 0x3e, 0x69, 0x7f, 0x46, 0x79, + 0xfd, 0x09, 0x28, 0xb5, 0x8f, 0x4a, 0x8b, 0xff, 0x59, 0x88, 0xd2, 0x2c, 0x0d, 0x49, 0x80, 0xf7, + 0xfd, 0x10, 0x07, 0xfc, 0x3e, 0xba, 0x63, 0x59, 0xfc, 0xfe, 0x75, 0xc9, 0x77, 0xdc, 0x95, 0xec, + 0xfd, 0x48, 0x5c, 0xe9, 0xd2, 0xb7, 0xa0, 0x15, 0x18, 0x47, 0x42, 0xbc, 0x49, 0x4e, 0xfd, 0xf8, + 0x6e, 0x67, 0x8c, 0x45, 0x83, 0xaf, 0xb0, 0xb1, 0xed, 0xad, 0x2c, 0x08, 0xcb, 0xe9, 0x44, 0xa3, + 0xb0, 0x47, 0xff, 0x3f, 0x58, 0xe9, 0x60, 0xab, 0xc4, 0xe4, 0x97, 0xf1, 0xd1, 0x42, 0x28, 0xbe, + 0x2d, 0x12, 0x2f, 0x2b, 0x05, 0xc4, 0xa5, 0xe4, 0x92, 0x11, 0xe9, 0x62, 0x87, 0x52, 0x07, 0x79, + 0x34, 0xa8, 0xf4, 0x93, 0x56, 0xfc, 0xbd, 0x00, 0x4b, 0xb2, 0xae, 0x96, 0x1b, 0x7f, 0x78, 0x8c, + 0x02, 0x4c, 0xef, 0x34, 0xad, 0x63, 0x7e, 0xa3, 0xb8, 0xe4, 0xed, 0x7d, 0x11, 0x98, 0x93, 0x92, + 0x3a, 0x7e, 0x4c, 0xb7, 0x66, 0x2b, 0xb6, 0x6f, 0x65, 0x91, 0x58, 0x69, 0x6f, 0x20, 0xbc, 0x86, + 0xdc, 0xb4, 0x05, 0xfa, 0x1a, 0xac, 0x76, 0xb3, 0x52, 0x42, 0xf2, 0x27, 0x71, 0x5a, 0xee, 0x21, + 0xd7, 0xa9, 0xb2, 0xcb, 0x59, 0x0b, 0xbc, 0x2f, 0x15, 0x10, 0x9d, 0xcf, 0x50, 0x85, 0xf6, 0xd1, + 0x19, 0xaa, 0x98, 0x91, 0xa6, 0xff, 0x54, 0x14, 0xfb, 0x06, 0xa6, 0x0d, 0x0f, 0xcb, 0x72, 0xe5, + 0x92, 0x7d, 0xb9, 0x73, 0x85, 0x9e, 0x96, 0xad, 0xcf, 0xf3, 0x20, 0x4b, 0x0f, 0x4a, 0x75, 0x7f, + 0x33, 0xc2, 0xeb, 0xab, 0x3d, 0xc6, 0x0a, 0x1f, 0x05, 0xc8, 0xc6, 0x06, 0x69, 0x84, 0x58, 0xfb, + 0x0a, 0x5c, 0x45, 0x8d, 0xf0, 0x98, 0x04, 0x4e, 0x78, 0xd6, 0x55, 0xe5, 0x16, 0xa9, 0xa6, 0xc3, + 0x38, 0xcf, 0xc6, 0x19, 0xcd, 0x47, 0xd9, 0xe0, 0x5e, 0xb4, 0x67, 0xbb, 0xb0, 0x28, 0xce, 0x22, + 0x33, 0x24, 0x66, 0x80, 0x4f, 0x51, 0x60, 0x9b, 0xaa, 0x64, 0x55, 0x12, 0x54, 0x47, 0xc4, 0xe0, + 0x34, 0x7b, 0xc9, 0xd4, 0xf5, 0x2d, 0x58, 0x68, 0xf1, 0x08, 0x99, 0xde, 0x19, 0x16, 0x22, 0x95, + 0xcd, 0xc5, 0x2c, 0xb8, 0x69, 0x29, 0x0e, 0xfb, 0x20, 0x4a, 0xb8, 0x96, 0x0e, 0xaa, 0x82, 0x4a, + 0xdc, 0x33, 0x17, 0x18, 0x65, 0xac, 0xc7, 0x51, 0x5b, 0xf1, 0xf4, 0x12, 0xac, 0xc4, 0x2c, 0x62, + 0x65, 0x54, 0xbc, 0x78, 0x71, 0x67, 0x2c, 0x0a, 0xd2, 0x48, 0xa5, 0x76, 0x66, 0x77, 0x61, 0x39, + 0x62, 0x41, 0x4c, 0xa1, 0xa0, 0x82, 0xd5, 0xb0, 0x28, 0x22, 0x38, 0xe1, 0x11, 0x61, 0xbb, 0xda, + 0xce, 0xa8, 0x02, 0x33, 0x91, 0x56, 0xbc, 0xe2, 0x34, 0x89, 0xcf, 0xf9, 0x15, 0x47, 0xf8, 0xda, + 0x29, 0x31, 0xc7, 0x2b, 0xd0, 0x57, 0x7c, 0xc6, 0x41, 0xbb, 0x09, 0xd7, 0xb3, 0x0b, 0xc4, 0x77, + 0xf1, 0x2a, 0x5f, 0x32, 0x9d, 0x5a, 0x22, 0xc0, 0xd0, 0x36, 0x61, 0x36, 0xbb, 0x88, 0x6b, 0x25, + 0x4a, 0x51, 0x43, 0x4b, 0xad, 0xe1, 0x26, 0x6b, 0xeb, 0x30, 0xdd, 0x2a, 0x9e, 0x5b, 0x0b, 0x46, + 0x45, 0x3b, 0x4a, 0x96, 0xd2, 0x31, 0xf9, 0x33, 0xa0, 0xa5, 0xc9, 0xb9, 0x15, 0xa2, 0x62, 0x9f, + 0x48, 0x50, 0x73, 0x1b, 0xe6, 0x61, 0x98, 0x97, 0x5d, 0x8e, 0xcd, 0x6b, 0xce, 0x81, 0xdd, 0x2b, + 0xc5, 0x82, 0x31, 0xc4, 0x86, 0xf6, 0x6d, 0xed, 0x9b, 0x50, 0x62, 0x65, 0x15, 0x72, 0x5d, 0x72, + 0x8a, 0x6d, 0x93, 0x9e, 0xa2, 0xba, 0xe9, 0x12, 0x4a, 0x93, 0x05, 0x24, 0xa3, 0xbf, 0xee, 0xa1, + 0xe6, 0x8e, 0x20, 0x3a, 0x3c, 0x45, 0xf5, 0x7b, 0x84, 0x52, 0x9e, 0xc4, 0xef, 0xc0, 0x04, 0x2b, + 0x6e, 0xf9, 0xba, 0xa8, 0xc7, 0x32, 0xd1, 0x4b, 0x8f, 0x65, 0xdc, 0x73, 0x7c, 0xc6, 0x68, 0x47, + 0xb4, 0x5a, 0x18, 0x1b, 0xd4, 0x4c, 0xb1, 0x99, 0xec, 0x8d, 0x0d, 0x6a, 0x26, 0xd8, 0x1c, 0x88, + 0x52, 0x5b, 0xba, 0x47, 0xc4, 0x6a, 0xaa, 0x17, 0x56, 0xac, 0xac, 0x8e, 0x3d, 0x46, 0xb0, 0xdb, + 0xae, 0xb0, 0x9c, 0xd2, 0x8a, 0xe4, 0xb6, 0xba, 0x31, 0x9b, 0x22, 0xa2, 0xba, 0x31, 0x3b, 0x9c, + 0xac, 0x98, 0xa6, 0xe5, 0x7d, 0xe8, 0x12, 0x32, 0xcb, 0x32, 0x8c, 0x25, 0x1d, 0x2d, 0x4e, 0x2c, + 0x09, 0xff, 0xea, 0xd6, 0x34, 0xee, 0x66, 0x61, 0x56, 0xd5, 0xc8, 0xc2, 0xec, 0xb0, 0xb4, 0xf0, + 0x3f, 0xfd, 0xdc, 0x42, 0x71, 0x24, 0x7e, 0x19, 0x2c, 0x4c, 0x7a, 0xff, 0xc0, 0x63, 0x7a, 0xff, + 0x60, 0x57, 0xef, 0xbf, 0xdb, 0xee, 0xfd, 0xa2, 0x5d, 0x55, 0xee, 0xe8, 0x6b, 0xc5, 0x42, 0xd6, + 0xff, 0xef, 0xb6, 0xfb, 0xff, 0x70, 0xaf, 0x8c, 0xbe, 0xc8, 0x08, 0xc8, 0x6e, 0x74, 0xe4, 0x1f, + 0xd9, 0x61, 0xe9, 0x1f, 0xbf, 0xbf, 0xc2, 0x4f, 0xde, 0x43, 0x1c, 0xee, 0x25, 0x9b, 0x3d, 0xac, + 0x02, 0xbf, 0xfc, 0x1b, 0xe1, 0x6d, 0x18, 0x0d, 0x38, 0xe3, 0xe4, 0x1b, 0xd7, 0x4a, 0x0f, 0xdd, + 0x30, 0x03, 0xc4, 0x3a, 0xbe, 0xc7, 0x26, 0x2c, 0x24, 0x9b, 0x5e, 0xec, 0x4f, 0xf4, 0x6c, 0x10, + 0x61, 0x3b, 0xd0, 0x0b, 0xb6, 0x73, 0x6e, 0xab, 0x33, 0x66, 0x1f, 0x8a, 0x57, 0x90, 0x08, 0xe3, + 0xce, 0x25, 0xa5, 0x1a, 0xaa, 0xe8, 0x1a, 0xae, 0x9e, 0x94, 0x68, 0xff, 0xea, 0x0a, 0xaf, 0xf7, + 0x8f, 0x48, 0xad, 0xe6, 0xe2, 0xf8, 0xb8, 0x0f, 0x03, 0xe2, 0xba, 0x38, 0xb8, 0x6c, 0xb0, 0x0f, + 0x61, 0xaa, 0x8e, 0x03, 0xcf, 0xa1, 0x94, 0x3f, 0x6b, 0xf0, 0x5a, 0x97, 0x43, 0x7e, 0x6d, 0xeb, + 0xa9, 0xb6, 0x3a, 0x7b, 0xa7, 0x11, 0x1e, 0xbf, 0x79, 0x5f, 0x92, 0x8b, 0xca, 0xd8, 0x98, 0xac, + 0x67, 0x46, 0xb4, 0x62, 0xab, 0x01, 0x11, 0xbd, 0x2f, 0x24, 0xba, 0x0b, 0x2e, 0xdf, 0x2e, 0x1e, + 0xa5, 0x23, 0x46, 0xf4, 0xd5, 0xa5, 0xa4, 0x51, 0x22, 0xa1, 0xeb, 0xbc, 0x58, 0x51, 0xce, 0x49, + 0x28, 0xff, 0x5c, 0xe0, 0xaf, 0x14, 0xc2, 0xb1, 0xe3, 0x2b, 0xe3, 0x7d, 0x14, 0x20, 0x8f, 0x5e, + 0x38, 0xb9, 0x75, 0x40, 0xb3, 0x43, 0xb7, 0xb3, 0x3f, 0xbf, 0xdb, 0x79, 0xb3, 0x3d, 0x5a, 0x97, + 0xda, 0xa3, 0x35, 0xad, 0xbd, 0xbe, 0x0c, 0xe5, 0x9c, 0xa9, 0xd8, 0xf8, 0xb5, 0x0d, 0x98, 0x55, + 0xee, 0x98, 0x76, 0x15, 0x06, 0xef, 0x1a, 0x3b, 0x2f, 0x1f, 0x4d, 0xf6, 0x69, 0x00, 0x43, 0xc6, + 0x9d, 0xd7, 0x5e, 0x79, 0xe9, 0xce, 0x64, 0x61, 0xeb, 0x17, 0xd3, 0xd0, 0x7f, 0x40, 0x6b, 0xda, + 0xeb, 0x30, 0x9a, 0x7c, 0xde, 0x2b, 0xb7, 0xf9, 0x41, 0xfa, 0x15, 0xb2, 0xf4, 0xff, 0x5d, 0x08, + 0xe4, 0x23, 0xda, 0xf7, 0xe1, 0x5a, 0xe6, 0xe9, 0x50, 0x57, 0x2e, 0x4d, 0xd1, 0x94, 0xd6, 0xba, + 0xd3, 0x48, 0x09, 0xaf, 0xc3, 0x68, 0xf2, 0xd5, 0x49, 0xa9, 0x7a, 0x82, 0x40, 0xad, 0xba, 0xe2, + 0xf5, 0x46, 0x7b, 0x00, 0x93, 0x6d, 0x2f, 0x37, 0x4f, 0xaa, 0x17, 0xa7, 0xa9, 0x4a, 0xcf, 0xf6, + 0x42, 0x25, 0xe5, 0x34, 0xe1, 0x7a, 0x4e, 0x7f, 0x5a, 0x09, 0x83, 0x9a, 0xb6, 0xb4, 0xd5, 0x3b, + 0xad, 0x94, 0x4c, 0x60, 0x5a, 0xd5, 0x13, 0xce, 0x41, 0xa8, 0x8d, 0xb0, 0x54, 0xe9, 0x91, 0x50, + 0x0a, 0xfc, 0x1e, 0x8c, 0xa7, 0xfb, 0xb3, 0xcb, 0x2a, 0x0e, 0x29, 0x92, 0xd2, 0xd3, 0x5d, 0x49, + 0x24, 0xfb, 0x53, 0x98, 0x55, 0xb6, 0xee, 0x72, 0x80, 0x54, 0x76, 0xf9, 0x72, 0x80, 0xec, 0xd8, + 0x11, 0xd4, 0x2c, 0x98, 0xc8, 0x76, 0x03, 0x57, 0x54, 0x6c, 0x32, 0x44, 0xa5, 0x67, 0x7a, 0x20, + 0x92, 0x42, 0x7e, 0x08, 0xc5, 0xdc, 0x06, 0x5c, 0x8e, 0xc7, 0xa9, 0xa9, 0x4b, 0xb7, 0x1e, 0x87, + 0x3a, 0xed, 0xa7, 0xca, 0x66, 0x57, 0x8e, 0x9f, 0xaa, 0x68, 0xf3, 0xfc, 0xb4, 0x53, 0x93, 0x4a, + 0xfb, 0x49, 0x01, 0x16, 0x3a, 0x77, 0xa8, 0x36, 0x55, 0x5c, 0x3b, 0x2e, 0x29, 0x7d, 0xed, 0xb1, + 0x97, 0x24, 0xe3, 0x46, 0xd5, 0x1d, 0x52, 0xc6, 0x8d, 0x82, 0x50, 0x1d, 0x37, 0x1d, 0xfa, 0x32, + 0xda, 0x1b, 0x30, 0x96, 0xfa, 0x4d, 0xc1, 0x92, 0x1a, 0xc4, 0x16, 0x45, 0x69, 0xb5, 0x1b, 0x85, + 0xe4, 0xfd, 0xf3, 0x02, 0x94, 0xbb, 0xfd, 0xc0, 0xe9, 0x66, 0x3e, 0x56, 0xb9, 0x8b, 0x4a, 0x2f, + 0x5e, 0x60, 0x51, 0xf2, 0xdc, 0xc8, 0x74, 0xa1, 0xf4, 0x1c, 0xa7, 0x4d, 0xd0, 0xa8, 0xcf, 0x0d, + 0x75, 0xf3, 0x88, 0xa5, 0xf7, 0xb6, 0xc6, 0x91, 0x32, 0xbd, 0x67, 0xa9, 0xd4, 0xe9, 0x3d, 0xaf, + 0x94, 0x64, 0x72, 0xda, 0xca, 0xc8, 0x27, 0xf3, 0xe3, 0xbe, 0x9b, 0x9c, 0xbc, 0x82, 0x8e, 0xc9, + 0x69, 0x2b, 0xe6, 0x9e, 0xcc, 0xdf, 0x82, 0x6e, 0x72, 0xf2, 0x0a, 0x03, 0x96, 0x06, 0x72, 0x8a, + 0x02, 0x25, 0xfa, 0x6a, 0x5a, 0x75, 0x1a, 0xe8, 0x7c, 0x49, 0xd6, 0x1a, 0x30, 0xab, 0xbe, 0x20, + 0x2b, 0x8f, 0x08, 0x25, 0x69, 0x69, 0xb3, 0x67, 0x52, 0x29, 0x36, 0x80, 0x19, 0xe5, 0x65, 0x72, + 0x35, 0x1f, 0xb6, 0x34, 0x65, 0xe9, 0xb9, 0x5e, 0x29, 0x63, 0x99, 0xa5, 0xc1, 0xb7, 0x3e, 0x7b, + 0x77, 0xad, 0xb0, 0x7b, 0xef, 0xfd, 0x4f, 0x16, 0x0b, 0x1f, 0x7c, 0xb2, 0x58, 0xf8, 0xf8, 0x93, + 0xc5, 0xc2, 0xcf, 0x3e, 0x5d, 0xec, 0xfb, 0xe0, 0xd3, 0xc5, 0xbe, 0xbf, 0x7c, 0xba, 0xd8, 0xf7, + 0xc6, 0x56, 0xe2, 0x97, 0x5c, 0x87, 0x9c, 0xf9, 0xfa, 0x3d, 0x54, 0xa5, 0x95, 0xe8, 0x17, 0x8d, + 0x27, 0x5b, 0x5f, 0xad, 0x34, 0x13, 0xbf, 0xbf, 0x3c, 0xab, 0x63, 0x5a, 0x1d, 0xe2, 0x3f, 0x6a, + 0xbc, 0xf9, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd7, 0xd3, 0xbb, 0xd8, 0x9f, 0x29, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type MsgClient interface { + LiquidStake(ctx context.Context, in *MsgLiquidStake, opts ...grpc.CallOption) (*MsgLiquidStakeResponse, error) + LSMLiquidStake(ctx context.Context, in *MsgLSMLiquidStake, opts ...grpc.CallOption) (*MsgLSMLiquidStakeResponse, error) + RedeemStake(ctx context.Context, in *MsgRedeemStake, opts ...grpc.CallOption) (*MsgRedeemStakeResponse, error) + RegisterHostZone(ctx context.Context, in *MsgRegisterHostZone, opts ...grpc.CallOption) (*MsgRegisterHostZoneResponse, error) + ClaimUndelegatedTokens(ctx context.Context, in *MsgClaimUndelegatedTokens, opts ...grpc.CallOption) (*MsgClaimUndelegatedTokensResponse, error) + RebalanceValidators(ctx context.Context, in *MsgRebalanceValidators, opts ...grpc.CallOption) (*MsgRebalanceValidatorsResponse, error) + AddValidators(ctx context.Context, in *MsgAddValidators, opts ...grpc.CallOption) (*MsgAddValidatorsResponse, error) + ChangeValidatorWeight(ctx context.Context, in *MsgChangeValidatorWeights, opts ...grpc.CallOption) (*MsgChangeValidatorWeightsResponse, error) + DeleteValidator(ctx context.Context, in *MsgDeleteValidator, opts ...grpc.CallOption) (*MsgDeleteValidatorResponse, error) + RestoreInterchainAccount(ctx context.Context, in *MsgRestoreInterchainAccount, opts ...grpc.CallOption) (*MsgRestoreInterchainAccountResponse, error) + CloseDelegationChannel(ctx context.Context, in *MsgCloseDelegationChannel, opts ...grpc.CallOption) (*MsgCloseDelegationChannelResponse, error) + UpdateValidatorSharesExchRate(ctx context.Context, in *MsgUpdateValidatorSharesExchRate, opts ...grpc.CallOption) (*MsgUpdateValidatorSharesExchRateResponse, error) + CalibrateDelegation(ctx context.Context, in *MsgCalibrateDelegation, opts ...grpc.CallOption) (*MsgCalibrateDelegationResponse, error) + ClearBalance(ctx context.Context, in *MsgClearBalance, opts ...grpc.CallOption) (*MsgClearBalanceResponse, error) + UpdateInnerRedemptionRateBounds(ctx context.Context, in *MsgUpdateInnerRedemptionRateBounds, opts ...grpc.CallOption) (*MsgUpdateInnerRedemptionRateBoundsResponse, error) + ResumeHostZone(ctx context.Context, in *MsgResumeHostZone, opts ...grpc.CallOption) (*MsgResumeHostZoneResponse, error) + CreateTradeRoute(ctx context.Context, in *MsgCreateTradeRoute, opts ...grpc.CallOption) (*MsgCreateTradeRouteResponse, error) + DeleteTradeRoute(ctx context.Context, in *MsgDeleteTradeRoute, opts ...grpc.CallOption) (*MsgDeleteTradeRouteResponse, error) + UpdateTradeRoute(ctx context.Context, in *MsgUpdateTradeRoute, opts ...grpc.CallOption) (*MsgUpdateTradeRouteResponse, error) + SetCommunityPoolRebate(ctx context.Context, in *MsgSetCommunityPoolRebate, opts ...grpc.CallOption) (*MsgSetCommunityPoolRebateResponse, error) + ToggleTradeController(ctx context.Context, in *MsgToggleTradeController, opts ...grpc.CallOption) (*MsgToggleTradeControllerResponse, error) + UpdateHostZoneParams(ctx context.Context, in *MsgUpdateHostZoneParams, opts ...grpc.CallOption) (*MsgUpdateHostZoneParamsResponse, error) +} + +type msgClient struct { + cc grpc1.ClientConn +} + +func NewMsgClient(cc grpc1.ClientConn) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) LiquidStake(ctx context.Context, in *MsgLiquidStake, opts ...grpc.CallOption) (*MsgLiquidStakeResponse, error) { + out := new(MsgLiquidStakeResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/LiquidStake", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) LSMLiquidStake(ctx context.Context, in *MsgLSMLiquidStake, opts ...grpc.CallOption) (*MsgLSMLiquidStakeResponse, error) { + out := new(MsgLSMLiquidStakeResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/LSMLiquidStake", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) RedeemStake(ctx context.Context, in *MsgRedeemStake, opts ...grpc.CallOption) (*MsgRedeemStakeResponse, error) { + out := new(MsgRedeemStakeResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/RedeemStake", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) RegisterHostZone(ctx context.Context, in *MsgRegisterHostZone, opts ...grpc.CallOption) (*MsgRegisterHostZoneResponse, error) { + out := new(MsgRegisterHostZoneResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/RegisterHostZone", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) ClaimUndelegatedTokens(ctx context.Context, in *MsgClaimUndelegatedTokens, opts ...grpc.CallOption) (*MsgClaimUndelegatedTokensResponse, error) { + out := new(MsgClaimUndelegatedTokensResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/ClaimUndelegatedTokens", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) RebalanceValidators(ctx context.Context, in *MsgRebalanceValidators, opts ...grpc.CallOption) (*MsgRebalanceValidatorsResponse, error) { + out := new(MsgRebalanceValidatorsResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/RebalanceValidators", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) AddValidators(ctx context.Context, in *MsgAddValidators, opts ...grpc.CallOption) (*MsgAddValidatorsResponse, error) { + out := new(MsgAddValidatorsResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/AddValidators", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) ChangeValidatorWeight(ctx context.Context, in *MsgChangeValidatorWeights, opts ...grpc.CallOption) (*MsgChangeValidatorWeightsResponse, error) { + out := new(MsgChangeValidatorWeightsResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/ChangeValidatorWeight", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) DeleteValidator(ctx context.Context, in *MsgDeleteValidator, opts ...grpc.CallOption) (*MsgDeleteValidatorResponse, error) { + out := new(MsgDeleteValidatorResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/DeleteValidator", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) RestoreInterchainAccount(ctx context.Context, in *MsgRestoreInterchainAccount, opts ...grpc.CallOption) (*MsgRestoreInterchainAccountResponse, error) { + out := new(MsgRestoreInterchainAccountResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/RestoreInterchainAccount", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) CloseDelegationChannel(ctx context.Context, in *MsgCloseDelegationChannel, opts ...grpc.CallOption) (*MsgCloseDelegationChannelResponse, error) { + out := new(MsgCloseDelegationChannelResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/CloseDelegationChannel", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) UpdateValidatorSharesExchRate(ctx context.Context, in *MsgUpdateValidatorSharesExchRate, opts ...grpc.CallOption) (*MsgUpdateValidatorSharesExchRateResponse, error) { + out := new(MsgUpdateValidatorSharesExchRateResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/UpdateValidatorSharesExchRate", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) CalibrateDelegation(ctx context.Context, in *MsgCalibrateDelegation, opts ...grpc.CallOption) (*MsgCalibrateDelegationResponse, error) { + out := new(MsgCalibrateDelegationResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/CalibrateDelegation", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) ClearBalance(ctx context.Context, in *MsgClearBalance, opts ...grpc.CallOption) (*MsgClearBalanceResponse, error) { + out := new(MsgClearBalanceResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/ClearBalance", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) UpdateInnerRedemptionRateBounds(ctx context.Context, in *MsgUpdateInnerRedemptionRateBounds, opts ...grpc.CallOption) (*MsgUpdateInnerRedemptionRateBoundsResponse, error) { + out := new(MsgUpdateInnerRedemptionRateBoundsResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/UpdateInnerRedemptionRateBounds", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) ResumeHostZone(ctx context.Context, in *MsgResumeHostZone, opts ...grpc.CallOption) (*MsgResumeHostZoneResponse, error) { + out := new(MsgResumeHostZoneResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/ResumeHostZone", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) CreateTradeRoute(ctx context.Context, in *MsgCreateTradeRoute, opts ...grpc.CallOption) (*MsgCreateTradeRouteResponse, error) { + out := new(MsgCreateTradeRouteResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/CreateTradeRoute", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) DeleteTradeRoute(ctx context.Context, in *MsgDeleteTradeRoute, opts ...grpc.CallOption) (*MsgDeleteTradeRouteResponse, error) { + out := new(MsgDeleteTradeRouteResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/DeleteTradeRoute", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) UpdateTradeRoute(ctx context.Context, in *MsgUpdateTradeRoute, opts ...grpc.CallOption) (*MsgUpdateTradeRouteResponse, error) { + out := new(MsgUpdateTradeRouteResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/UpdateTradeRoute", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) SetCommunityPoolRebate(ctx context.Context, in *MsgSetCommunityPoolRebate, opts ...grpc.CallOption) (*MsgSetCommunityPoolRebateResponse, error) { + out := new(MsgSetCommunityPoolRebateResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/SetCommunityPoolRebate", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) ToggleTradeController(ctx context.Context, in *MsgToggleTradeController, opts ...grpc.CallOption) (*MsgToggleTradeControllerResponse, error) { + out := new(MsgToggleTradeControllerResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/ToggleTradeController", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) UpdateHostZoneParams(ctx context.Context, in *MsgUpdateHostZoneParams, opts ...grpc.CallOption) (*MsgUpdateHostZoneParamsResponse, error) { + out := new(MsgUpdateHostZoneParamsResponse) + err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/UpdateHostZoneParams", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +type MsgServer interface { + LiquidStake(context.Context, *MsgLiquidStake) (*MsgLiquidStakeResponse, error) + LSMLiquidStake(context.Context, *MsgLSMLiquidStake) (*MsgLSMLiquidStakeResponse, error) + RedeemStake(context.Context, *MsgRedeemStake) (*MsgRedeemStakeResponse, error) + RegisterHostZone(context.Context, *MsgRegisterHostZone) (*MsgRegisterHostZoneResponse, error) + ClaimUndelegatedTokens(context.Context, *MsgClaimUndelegatedTokens) (*MsgClaimUndelegatedTokensResponse, error) + RebalanceValidators(context.Context, *MsgRebalanceValidators) (*MsgRebalanceValidatorsResponse, error) + AddValidators(context.Context, *MsgAddValidators) (*MsgAddValidatorsResponse, error) + ChangeValidatorWeight(context.Context, *MsgChangeValidatorWeights) (*MsgChangeValidatorWeightsResponse, error) + DeleteValidator(context.Context, *MsgDeleteValidator) (*MsgDeleteValidatorResponse, error) + RestoreInterchainAccount(context.Context, *MsgRestoreInterchainAccount) (*MsgRestoreInterchainAccountResponse, error) + CloseDelegationChannel(context.Context, *MsgCloseDelegationChannel) (*MsgCloseDelegationChannelResponse, error) + UpdateValidatorSharesExchRate(context.Context, *MsgUpdateValidatorSharesExchRate) (*MsgUpdateValidatorSharesExchRateResponse, error) + CalibrateDelegation(context.Context, *MsgCalibrateDelegation) (*MsgCalibrateDelegationResponse, error) + ClearBalance(context.Context, *MsgClearBalance) (*MsgClearBalanceResponse, error) + UpdateInnerRedemptionRateBounds(context.Context, *MsgUpdateInnerRedemptionRateBounds) (*MsgUpdateInnerRedemptionRateBoundsResponse, error) + ResumeHostZone(context.Context, *MsgResumeHostZone) (*MsgResumeHostZoneResponse, error) + CreateTradeRoute(context.Context, *MsgCreateTradeRoute) (*MsgCreateTradeRouteResponse, error) + DeleteTradeRoute(context.Context, *MsgDeleteTradeRoute) (*MsgDeleteTradeRouteResponse, error) + UpdateTradeRoute(context.Context, *MsgUpdateTradeRoute) (*MsgUpdateTradeRouteResponse, error) + SetCommunityPoolRebate(context.Context, *MsgSetCommunityPoolRebate) (*MsgSetCommunityPoolRebateResponse, error) + ToggleTradeController(context.Context, *MsgToggleTradeController) (*MsgToggleTradeControllerResponse, error) + UpdateHostZoneParams(context.Context, *MsgUpdateHostZoneParams) (*MsgUpdateHostZoneParamsResponse, error) +} + +// UnimplementedMsgServer can be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (*UnimplementedMsgServer) LiquidStake(ctx context.Context, req *MsgLiquidStake) (*MsgLiquidStakeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method LiquidStake not implemented") +} +func (*UnimplementedMsgServer) LSMLiquidStake(ctx context.Context, req *MsgLSMLiquidStake) (*MsgLSMLiquidStakeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method LSMLiquidStake not implemented") +} +func (*UnimplementedMsgServer) RedeemStake(ctx context.Context, req *MsgRedeemStake) (*MsgRedeemStakeResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RedeemStake not implemented") +} +func (*UnimplementedMsgServer) RegisterHostZone(ctx context.Context, req *MsgRegisterHostZone) (*MsgRegisterHostZoneResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RegisterHostZone not implemented") +} +func (*UnimplementedMsgServer) ClaimUndelegatedTokens(ctx context.Context, req *MsgClaimUndelegatedTokens) (*MsgClaimUndelegatedTokensResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ClaimUndelegatedTokens not implemented") +} +func (*UnimplementedMsgServer) RebalanceValidators(ctx context.Context, req *MsgRebalanceValidators) (*MsgRebalanceValidatorsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RebalanceValidators not implemented") +} +func (*UnimplementedMsgServer) AddValidators(ctx context.Context, req *MsgAddValidators) (*MsgAddValidatorsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AddValidators not implemented") +} +func (*UnimplementedMsgServer) ChangeValidatorWeight(ctx context.Context, req *MsgChangeValidatorWeights) (*MsgChangeValidatorWeightsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ChangeValidatorWeight not implemented") +} +func (*UnimplementedMsgServer) DeleteValidator(ctx context.Context, req *MsgDeleteValidator) (*MsgDeleteValidatorResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteValidator not implemented") +} +func (*UnimplementedMsgServer) RestoreInterchainAccount(ctx context.Context, req *MsgRestoreInterchainAccount) (*MsgRestoreInterchainAccountResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RestoreInterchainAccount not implemented") +} +func (*UnimplementedMsgServer) CloseDelegationChannel(ctx context.Context, req *MsgCloseDelegationChannel) (*MsgCloseDelegationChannelResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CloseDelegationChannel not implemented") +} +func (*UnimplementedMsgServer) UpdateValidatorSharesExchRate(ctx context.Context, req *MsgUpdateValidatorSharesExchRate) (*MsgUpdateValidatorSharesExchRateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateValidatorSharesExchRate not implemented") +} +func (*UnimplementedMsgServer) CalibrateDelegation(ctx context.Context, req *MsgCalibrateDelegation) (*MsgCalibrateDelegationResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CalibrateDelegation not implemented") +} +func (*UnimplementedMsgServer) ClearBalance(ctx context.Context, req *MsgClearBalance) (*MsgClearBalanceResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ClearBalance not implemented") +} +func (*UnimplementedMsgServer) UpdateInnerRedemptionRateBounds(ctx context.Context, req *MsgUpdateInnerRedemptionRateBounds) (*MsgUpdateInnerRedemptionRateBoundsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateInnerRedemptionRateBounds not implemented") +} +func (*UnimplementedMsgServer) ResumeHostZone(ctx context.Context, req *MsgResumeHostZone) (*MsgResumeHostZoneResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ResumeHostZone not implemented") +} +func (*UnimplementedMsgServer) CreateTradeRoute(ctx context.Context, req *MsgCreateTradeRoute) (*MsgCreateTradeRouteResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateTradeRoute not implemented") +} +func (*UnimplementedMsgServer) DeleteTradeRoute(ctx context.Context, req *MsgDeleteTradeRoute) (*MsgDeleteTradeRouteResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteTradeRoute not implemented") +} +func (*UnimplementedMsgServer) UpdateTradeRoute(ctx context.Context, req *MsgUpdateTradeRoute) (*MsgUpdateTradeRouteResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateTradeRoute not implemented") +} +func (*UnimplementedMsgServer) SetCommunityPoolRebate(ctx context.Context, req *MsgSetCommunityPoolRebate) (*MsgSetCommunityPoolRebateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SetCommunityPoolRebate not implemented") +} +func (*UnimplementedMsgServer) ToggleTradeController(ctx context.Context, req *MsgToggleTradeController) (*MsgToggleTradeControllerResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ToggleTradeController not implemented") +} +func (*UnimplementedMsgServer) UpdateHostZoneParams(ctx context.Context, req *MsgUpdateHostZoneParams) (*MsgUpdateHostZoneParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UpdateHostZoneParams not implemented") +} + +func RegisterMsgServer(s grpc1.Server, srv MsgServer) { + s.RegisterService(&_Msg_serviceDesc, srv) +} + +func _Msg_LiquidStake_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgLiquidStake) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).LiquidStake(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Msg/LiquidStake", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).LiquidStake(ctx, req.(*MsgLiquidStake)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_LSMLiquidStake_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgLSMLiquidStake) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).LSMLiquidStake(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Msg/LSMLiquidStake", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).LSMLiquidStake(ctx, req.(*MsgLSMLiquidStake)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_RedeemStake_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgRedeemStake) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).RedeemStake(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Msg/RedeemStake", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).RedeemStake(ctx, req.(*MsgRedeemStake)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_RegisterHostZone_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgRegisterHostZone) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).RegisterHostZone(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Msg/RegisterHostZone", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).RegisterHostZone(ctx, req.(*MsgRegisterHostZone)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_ClaimUndelegatedTokens_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgClaimUndelegatedTokens) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).ClaimUndelegatedTokens(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Msg/ClaimUndelegatedTokens", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).ClaimUndelegatedTokens(ctx, req.(*MsgClaimUndelegatedTokens)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_RebalanceValidators_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgRebalanceValidators) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).RebalanceValidators(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Msg/RebalanceValidators", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).RebalanceValidators(ctx, req.(*MsgRebalanceValidators)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_AddValidators_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgAddValidators) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).AddValidators(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Msg/AddValidators", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).AddValidators(ctx, req.(*MsgAddValidators)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_ChangeValidatorWeight_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgChangeValidatorWeights) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).ChangeValidatorWeight(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Msg/ChangeValidatorWeight", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).ChangeValidatorWeight(ctx, req.(*MsgChangeValidatorWeights)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_DeleteValidator_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgDeleteValidator) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).DeleteValidator(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Msg/DeleteValidator", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).DeleteValidator(ctx, req.(*MsgDeleteValidator)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_RestoreInterchainAccount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgRestoreInterchainAccount) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).RestoreInterchainAccount(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Msg/RestoreInterchainAccount", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).RestoreInterchainAccount(ctx, req.(*MsgRestoreInterchainAccount)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_CloseDelegationChannel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgCloseDelegationChannel) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).CloseDelegationChannel(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Msg/CloseDelegationChannel", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).CloseDelegationChannel(ctx, req.(*MsgCloseDelegationChannel)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_UpdateValidatorSharesExchRate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateValidatorSharesExchRate) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateValidatorSharesExchRate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Msg/UpdateValidatorSharesExchRate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateValidatorSharesExchRate(ctx, req.(*MsgUpdateValidatorSharesExchRate)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_CalibrateDelegation_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgCalibrateDelegation) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).CalibrateDelegation(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Msg/CalibrateDelegation", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).CalibrateDelegation(ctx, req.(*MsgCalibrateDelegation)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_ClearBalance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgClearBalance) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).ClearBalance(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Msg/ClearBalance", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).ClearBalance(ctx, req.(*MsgClearBalance)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_UpdateInnerRedemptionRateBounds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateInnerRedemptionRateBounds) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateInnerRedemptionRateBounds(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Msg/UpdateInnerRedemptionRateBounds", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateInnerRedemptionRateBounds(ctx, req.(*MsgUpdateInnerRedemptionRateBounds)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_ResumeHostZone_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgResumeHostZone) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).ResumeHostZone(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Msg/ResumeHostZone", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).ResumeHostZone(ctx, req.(*MsgResumeHostZone)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_CreateTradeRoute_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgCreateTradeRoute) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).CreateTradeRoute(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Msg/CreateTradeRoute", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).CreateTradeRoute(ctx, req.(*MsgCreateTradeRoute)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_DeleteTradeRoute_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgDeleteTradeRoute) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).DeleteTradeRoute(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Msg/DeleteTradeRoute", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).DeleteTradeRoute(ctx, req.(*MsgDeleteTradeRoute)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_UpdateTradeRoute_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateTradeRoute) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateTradeRoute(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Msg/UpdateTradeRoute", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateTradeRoute(ctx, req.(*MsgUpdateTradeRoute)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_SetCommunityPoolRebate_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgSetCommunityPoolRebate) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).SetCommunityPoolRebate(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Msg/SetCommunityPoolRebate", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).SetCommunityPoolRebate(ctx, req.(*MsgSetCommunityPoolRebate)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_ToggleTradeController_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgToggleTradeController) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).ToggleTradeController(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Msg/ToggleTradeController", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).ToggleTradeController(ctx, req.(*MsgToggleTradeController)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_UpdateHostZoneParams_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgUpdateHostZoneParams) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).UpdateHostZoneParams(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/stride.stakeibc.Msg/UpdateHostZoneParams", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).UpdateHostZoneParams(ctx, req.(*MsgUpdateHostZoneParams)) + } + return interceptor(ctx, in, info, handler) +} + +var _Msg_serviceDesc = grpc.ServiceDesc{ + ServiceName: "stride.stakeibc.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "LiquidStake", + Handler: _Msg_LiquidStake_Handler, + }, + { + MethodName: "LSMLiquidStake", + Handler: _Msg_LSMLiquidStake_Handler, + }, + { + MethodName: "RedeemStake", + Handler: _Msg_RedeemStake_Handler, + }, + { + MethodName: "RegisterHostZone", + Handler: _Msg_RegisterHostZone_Handler, + }, + { + MethodName: "ClaimUndelegatedTokens", + Handler: _Msg_ClaimUndelegatedTokens_Handler, + }, + { + MethodName: "RebalanceValidators", + Handler: _Msg_RebalanceValidators_Handler, + }, + { + MethodName: "AddValidators", + Handler: _Msg_AddValidators_Handler, + }, + { + MethodName: "ChangeValidatorWeight", + Handler: _Msg_ChangeValidatorWeight_Handler, + }, + { + MethodName: "DeleteValidator", + Handler: _Msg_DeleteValidator_Handler, + }, + { + MethodName: "RestoreInterchainAccount", + Handler: _Msg_RestoreInterchainAccount_Handler, + }, + { + MethodName: "CloseDelegationChannel", + Handler: _Msg_CloseDelegationChannel_Handler, + }, + { + MethodName: "UpdateValidatorSharesExchRate", + Handler: _Msg_UpdateValidatorSharesExchRate_Handler, + }, + { + MethodName: "CalibrateDelegation", + Handler: _Msg_CalibrateDelegation_Handler, + }, + { + MethodName: "ClearBalance", + Handler: _Msg_ClearBalance_Handler, + }, + { + MethodName: "UpdateInnerRedemptionRateBounds", + Handler: _Msg_UpdateInnerRedemptionRateBounds_Handler, + }, + { + MethodName: "ResumeHostZone", + Handler: _Msg_ResumeHostZone_Handler, + }, + { + MethodName: "CreateTradeRoute", + Handler: _Msg_CreateTradeRoute_Handler, + }, + { + MethodName: "DeleteTradeRoute", + Handler: _Msg_DeleteTradeRoute_Handler, + }, + { + MethodName: "UpdateTradeRoute", + Handler: _Msg_UpdateTradeRoute_Handler, + }, + { + MethodName: "SetCommunityPoolRebate", + Handler: _Msg_SetCommunityPoolRebate_Handler, + }, + { + MethodName: "ToggleTradeController", + Handler: _Msg_ToggleTradeController_Handler, + }, + { + MethodName: "UpdateHostZoneParams", + Handler: _Msg_UpdateHostZoneParams_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "stride/stakeibc/tx.proto", +} + +func (m *MsgUpdateInnerRedemptionRateBounds) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateInnerRedemptionRateBounds) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateInnerRedemptionRateBounds) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.MaxInnerRedemptionRate.Size() + i -= size + if _, err := m.MaxInnerRedemptionRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + { + size := m.MinInnerRedemptionRate.Size() + i -= size + if _, err := m.MinInnerRedemptionRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0x12 + } + if len(m.Creator) > 0 { + i -= len(m.Creator) + copy(dAtA[i:], m.Creator) + i = encodeVarintTx(dAtA, i, uint64(len(m.Creator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgUpdateInnerRedemptionRateBoundsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateInnerRedemptionRateBoundsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateInnerRedemptionRateBoundsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgLiquidStake) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgLiquidStake) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgLiquidStake) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.HostDenom) > 0 { + i -= len(m.HostDenom) + copy(dAtA[i:], m.HostDenom) + i = encodeVarintTx(dAtA, i, uint64(len(m.HostDenom))) + i-- + dAtA[i] = 0x1a + } + { + size := m.Amount.Size() + i -= size + if _, err := m.Amount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Creator) > 0 { + i -= len(m.Creator) + copy(dAtA[i:], m.Creator) + i = encodeVarintTx(dAtA, i, uint64(len(m.Creator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgLiquidStakeResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgLiquidStakeResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgLiquidStakeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.StToken.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *MsgLSMLiquidStake) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgLSMLiquidStake) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgLSMLiquidStake) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.LsmTokenIbcDenom) > 0 { + i -= len(m.LsmTokenIbcDenom) + copy(dAtA[i:], m.LsmTokenIbcDenom) + i = encodeVarintTx(dAtA, i, uint64(len(m.LsmTokenIbcDenom))) + i-- + dAtA[i] = 0x1a + } + { + size := m.Amount.Size() + i -= size + if _, err := m.Amount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Creator) > 0 { + i -= len(m.Creator) + copy(dAtA[i:], m.Creator) + i = encodeVarintTx(dAtA, i, uint64(len(m.Creator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgLSMLiquidStakeResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgLSMLiquidStakeResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgLSMLiquidStakeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.TransactionComplete { + i-- + if m.TransactionComplete { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *MsgClearBalance) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgClearBalance) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgClearBalance) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Channel) > 0 { + i -= len(m.Channel) + copy(dAtA[i:], m.Channel) + i = encodeVarintTx(dAtA, i, uint64(len(m.Channel))) + i-- + dAtA[i] = 0x22 + } + { + size := m.Amount.Size() + i -= size + if _, err := m.Amount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0x12 + } + if len(m.Creator) > 0 { + i -= len(m.Creator) + copy(dAtA[i:], m.Creator) + i = encodeVarintTx(dAtA, i, uint64(len(m.Creator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgClearBalanceResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgClearBalanceResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgClearBalanceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgRedeemStake) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRedeemStake) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRedeemStake) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Receiver) > 0 { + i -= len(m.Receiver) + copy(dAtA[i:], m.Receiver) + i = encodeVarintTx(dAtA, i, uint64(len(m.Receiver))) + i-- + dAtA[i] = 0x22 + } + if len(m.HostZone) > 0 { + i -= len(m.HostZone) + copy(dAtA[i:], m.HostZone) + i = encodeVarintTx(dAtA, i, uint64(len(m.HostZone))) + i-- + dAtA[i] = 0x1a + } + { + size := m.Amount.Size() + i -= size + if _, err := m.Amount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + if len(m.Creator) > 0 { + i -= len(m.Creator) + copy(dAtA[i:], m.Creator) + i = encodeVarintTx(dAtA, i, uint64(len(m.Creator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgRedeemStakeResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRedeemStakeResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRedeemStakeResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgRegisterHostZone) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRegisterHostZone) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRegisterHostZone) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.MaxMessagesPerIcaTx != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.MaxMessagesPerIcaTx)) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x88 + } + if len(m.CommunityPoolTreasuryAddress) > 0 { + i -= len(m.CommunityPoolTreasuryAddress) + copy(dAtA[i:], m.CommunityPoolTreasuryAddress) + i = encodeVarintTx(dAtA, i, uint64(len(m.CommunityPoolTreasuryAddress))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x82 + } + if m.LsmLiquidStakeEnabled { + i-- + if m.LsmLiquidStakeEnabled { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x78 + } + { + size := m.MaxRedemptionRate.Size() + i -= size + if _, err := m.MaxRedemptionRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x72 + { + size := m.MinRedemptionRate.Size() + i -= size + if _, err := m.MinRedemptionRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x6a + if len(m.Bech32Prefix) > 0 { + i -= len(m.Bech32Prefix) + copy(dAtA[i:], m.Bech32Prefix) + i = encodeVarintTx(dAtA, i, uint64(len(m.Bech32Prefix))) + i-- + dAtA[i] = 0x62 + } + if m.UnbondingPeriod != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.UnbondingPeriod)) + i-- + dAtA[i] = 0x58 + } + if len(m.TransferChannelId) > 0 { + i -= len(m.TransferChannelId) + copy(dAtA[i:], m.TransferChannelId) + i = encodeVarintTx(dAtA, i, uint64(len(m.TransferChannelId))) + i-- + dAtA[i] = 0x52 + } + if len(m.Creator) > 0 { + i -= len(m.Creator) + copy(dAtA[i:], m.Creator) + i = encodeVarintTx(dAtA, i, uint64(len(m.Creator))) + i-- + dAtA[i] = 0x32 + } + if len(m.IbcDenom) > 0 { + i -= len(m.IbcDenom) + copy(dAtA[i:], m.IbcDenom) + i = encodeVarintTx(dAtA, i, uint64(len(m.IbcDenom))) + i-- + dAtA[i] = 0x2a + } + if len(m.HostDenom) > 0 { + i -= len(m.HostDenom) + copy(dAtA[i:], m.HostDenom) + i = encodeVarintTx(dAtA, i, uint64(len(m.HostDenom))) + i-- + dAtA[i] = 0x22 + } + if len(m.ConnectionId) > 0 { + i -= len(m.ConnectionId) + copy(dAtA[i:], m.ConnectionId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ConnectionId))) + i-- + dAtA[i] = 0x12 + } + return len(dAtA) - i, nil +} + +func (m *MsgRegisterHostZoneResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRegisterHostZoneResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRegisterHostZoneResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgClaimUndelegatedTokens) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgClaimUndelegatedTokens) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgClaimUndelegatedTokens) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Receiver) > 0 { + i -= len(m.Receiver) + copy(dAtA[i:], m.Receiver) + i = encodeVarintTx(dAtA, i, uint64(len(m.Receiver))) + i-- + dAtA[i] = 0x2a + } + if m.Epoch != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.Epoch)) + i-- + dAtA[i] = 0x18 + } + if len(m.HostZoneId) > 0 { + i -= len(m.HostZoneId) + copy(dAtA[i:], m.HostZoneId) + i = encodeVarintTx(dAtA, i, uint64(len(m.HostZoneId))) + i-- + dAtA[i] = 0x12 + } + if len(m.Creator) > 0 { + i -= len(m.Creator) + copy(dAtA[i:], m.Creator) + i = encodeVarintTx(dAtA, i, uint64(len(m.Creator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgClaimUndelegatedTokensResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgClaimUndelegatedTokensResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgClaimUndelegatedTokensResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgRebalanceValidators) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRebalanceValidators) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRebalanceValidators) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.NumRebalance != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.NumRebalance)) + i-- + dAtA[i] = 0x18 + } + if len(m.HostZone) > 0 { + i -= len(m.HostZone) + copy(dAtA[i:], m.HostZone) + i = encodeVarintTx(dAtA, i, uint64(len(m.HostZone))) + i-- + dAtA[i] = 0x12 + } + if len(m.Creator) > 0 { + i -= len(m.Creator) + copy(dAtA[i:], m.Creator) + i = encodeVarintTx(dAtA, i, uint64(len(m.Creator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgRebalanceValidatorsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRebalanceValidatorsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRebalanceValidatorsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgAddValidators) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgAddValidators) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgAddValidators) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Validators) > 0 { + for iNdEx := len(m.Validators) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Validators[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if len(m.HostZone) > 0 { + i -= len(m.HostZone) + copy(dAtA[i:], m.HostZone) + i = encodeVarintTx(dAtA, i, uint64(len(m.HostZone))) + i-- + dAtA[i] = 0x12 + } + if len(m.Creator) > 0 { + i -= len(m.Creator) + copy(dAtA[i:], m.Creator) + i = encodeVarintTx(dAtA, i, uint64(len(m.Creator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgAddValidatorsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgAddValidatorsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgAddValidatorsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *ValidatorWeight) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ValidatorWeight) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ValidatorWeight) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Weight != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.Weight)) + i-- + dAtA[i] = 0x10 + } + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintTx(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgChangeValidatorWeights) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgChangeValidatorWeights) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgChangeValidatorWeights) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ValidatorWeights) > 0 { + for iNdEx := len(m.ValidatorWeights) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ValidatorWeights[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if len(m.HostZone) > 0 { + i -= len(m.HostZone) + copy(dAtA[i:], m.HostZone) + i = encodeVarintTx(dAtA, i, uint64(len(m.HostZone))) + i-- + dAtA[i] = 0x12 + } + if len(m.Creator) > 0 { + i -= len(m.Creator) + copy(dAtA[i:], m.Creator) + i = encodeVarintTx(dAtA, i, uint64(len(m.Creator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgChangeValidatorWeightsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgChangeValidatorWeightsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgChangeValidatorWeightsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgDeleteValidator) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgDeleteValidator) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgDeleteValidator) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ValAddr) > 0 { + i -= len(m.ValAddr) + copy(dAtA[i:], m.ValAddr) + i = encodeVarintTx(dAtA, i, uint64(len(m.ValAddr))) + i-- + dAtA[i] = 0x1a + } + if len(m.HostZone) > 0 { + i -= len(m.HostZone) + copy(dAtA[i:], m.HostZone) + i = encodeVarintTx(dAtA, i, uint64(len(m.HostZone))) + i-- + dAtA[i] = 0x12 + } + if len(m.Creator) > 0 { + i -= len(m.Creator) + copy(dAtA[i:], m.Creator) + i = encodeVarintTx(dAtA, i, uint64(len(m.Creator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgDeleteValidatorResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgDeleteValidatorResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgDeleteValidatorResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgRestoreInterchainAccount) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRestoreInterchainAccount) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRestoreInterchainAccount) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.AccountOwner) > 0 { + i -= len(m.AccountOwner) + copy(dAtA[i:], m.AccountOwner) + i = encodeVarintTx(dAtA, i, uint64(len(m.AccountOwner))) + i-- + dAtA[i] = 0x22 + } + if len(m.ConnectionId) > 0 { + i -= len(m.ConnectionId) + copy(dAtA[i:], m.ConnectionId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ConnectionId))) + i-- + dAtA[i] = 0x1a + } + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0x12 + } + if len(m.Creator) > 0 { + i -= len(m.Creator) + copy(dAtA[i:], m.Creator) + i = encodeVarintTx(dAtA, i, uint64(len(m.Creator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgRestoreInterchainAccountResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgRestoreInterchainAccountResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgRestoreInterchainAccountResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgCloseDelegationChannel) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgCloseDelegationChannel) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgCloseDelegationChannel) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0x12 + } + if len(m.Creator) > 0 { + i -= len(m.Creator) + copy(dAtA[i:], m.Creator) + i = encodeVarintTx(dAtA, i, uint64(len(m.Creator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgCloseDelegationChannelResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgCloseDelegationChannelResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgCloseDelegationChannelResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgUpdateValidatorSharesExchRate) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateValidatorSharesExchRate) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateValidatorSharesExchRate) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Valoper) > 0 { + i -= len(m.Valoper) + copy(dAtA[i:], m.Valoper) + i = encodeVarintTx(dAtA, i, uint64(len(m.Valoper))) + i-- + dAtA[i] = 0x1a + } + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0x12 + } + if len(m.Creator) > 0 { + i -= len(m.Creator) + copy(dAtA[i:], m.Creator) + i = encodeVarintTx(dAtA, i, uint64(len(m.Creator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgUpdateValidatorSharesExchRateResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateValidatorSharesExchRateResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateValidatorSharesExchRateResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgCalibrateDelegation) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgCalibrateDelegation) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgCalibrateDelegation) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Valoper) > 0 { + i -= len(m.Valoper) + copy(dAtA[i:], m.Valoper) + i = encodeVarintTx(dAtA, i, uint64(len(m.Valoper))) + i-- + dAtA[i] = 0x1a + } + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0x12 + } + if len(m.Creator) > 0 { + i -= len(m.Creator) + copy(dAtA[i:], m.Creator) + i = encodeVarintTx(dAtA, i, uint64(len(m.Creator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgCalibrateDelegationResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgCalibrateDelegationResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgCalibrateDelegationResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgResumeHostZone) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgResumeHostZone) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgResumeHostZone) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0x12 + } + if len(m.Creator) > 0 { + i -= len(m.Creator) + copy(dAtA[i:], m.Creator) + i = encodeVarintTx(dAtA, i, uint64(len(m.Creator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgResumeHostZoneResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgResumeHostZoneResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgResumeHostZoneResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgCreateTradeRoute) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgCreateTradeRoute) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgCreateTradeRoute) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.MinTransferAmount.Size() + i -= size + if _, err := m.MinTransferAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x8a + { + size := m.MaxSwapAmount.Size() + i -= size + if _, err := m.MaxSwapAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x82 + { + size := m.MinSwapAmount.Size() + i -= size + if _, err := m.MinSwapAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x7a + if len(m.MaxAllowedSwapLossRate) > 0 { + i -= len(m.MaxAllowedSwapLossRate) + copy(dAtA[i:], m.MaxAllowedSwapLossRate) + i = encodeVarintTx(dAtA, i, uint64(len(m.MaxAllowedSwapLossRate))) + i-- + dAtA[i] = 0x72 + } + if m.PoolId != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.PoolId)) + i-- + dAtA[i] = 0x68 + } + if len(m.HostDenomOnHost) > 0 { + i -= len(m.HostDenomOnHost) + copy(dAtA[i:], m.HostDenomOnHost) + i = encodeVarintTx(dAtA, i, uint64(len(m.HostDenomOnHost))) + i-- + dAtA[i] = 0x62 + } + if len(m.HostDenomOnTrade) > 0 { + i -= len(m.HostDenomOnTrade) + copy(dAtA[i:], m.HostDenomOnTrade) + i = encodeVarintTx(dAtA, i, uint64(len(m.HostDenomOnTrade))) + i-- + dAtA[i] = 0x5a + } + if len(m.RewardDenomOnTrade) > 0 { + i -= len(m.RewardDenomOnTrade) + copy(dAtA[i:], m.RewardDenomOnTrade) + i = encodeVarintTx(dAtA, i, uint64(len(m.RewardDenomOnTrade))) + i-- + dAtA[i] = 0x52 + } + if len(m.RewardDenomOnReward) > 0 { + i -= len(m.RewardDenomOnReward) + copy(dAtA[i:], m.RewardDenomOnReward) + i = encodeVarintTx(dAtA, i, uint64(len(m.RewardDenomOnReward))) + i-- + dAtA[i] = 0x4a + } + if len(m.RewardDenomOnHost) > 0 { + i -= len(m.RewardDenomOnHost) + copy(dAtA[i:], m.RewardDenomOnHost) + i = encodeVarintTx(dAtA, i, uint64(len(m.RewardDenomOnHost))) + i-- + dAtA[i] = 0x42 + } + if len(m.TradeToHostTransferChannelId) > 0 { + i -= len(m.TradeToHostTransferChannelId) + copy(dAtA[i:], m.TradeToHostTransferChannelId) + i = encodeVarintTx(dAtA, i, uint64(len(m.TradeToHostTransferChannelId))) + i-- + dAtA[i] = 0x3a + } + if len(m.RewardToTradeTransferChannelId) > 0 { + i -= len(m.RewardToTradeTransferChannelId) + copy(dAtA[i:], m.RewardToTradeTransferChannelId) + i = encodeVarintTx(dAtA, i, uint64(len(m.RewardToTradeTransferChannelId))) + i-- + dAtA[i] = 0x32 + } + if len(m.HostToRewardTransferChannelId) > 0 { + i -= len(m.HostToRewardTransferChannelId) + copy(dAtA[i:], m.HostToRewardTransferChannelId) + i = encodeVarintTx(dAtA, i, uint64(len(m.HostToRewardTransferChannelId))) + i-- + dAtA[i] = 0x2a + } + if len(m.StrideToTradeConnectionId) > 0 { + i -= len(m.StrideToTradeConnectionId) + copy(dAtA[i:], m.StrideToTradeConnectionId) + i = encodeVarintTx(dAtA, i, uint64(len(m.StrideToTradeConnectionId))) + i-- + dAtA[i] = 0x22 + } + if len(m.StrideToRewardConnectionId) > 0 { + i -= len(m.StrideToRewardConnectionId) + copy(dAtA[i:], m.StrideToRewardConnectionId) + i = encodeVarintTx(dAtA, i, uint64(len(m.StrideToRewardConnectionId))) + i-- + dAtA[i] = 0x1a + } + if len(m.HostChainId) > 0 { + i -= len(m.HostChainId) + copy(dAtA[i:], m.HostChainId) + i = encodeVarintTx(dAtA, i, uint64(len(m.HostChainId))) + i-- + dAtA[i] = 0x12 + } + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgCreateTradeRouteResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgCreateTradeRouteResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgCreateTradeRouteResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgDeleteTradeRoute) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgDeleteTradeRoute) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgDeleteTradeRoute) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.HostDenom) > 0 { + i -= len(m.HostDenom) + copy(dAtA[i:], m.HostDenom) + i = encodeVarintTx(dAtA, i, uint64(len(m.HostDenom))) + i-- + dAtA[i] = 0x1a + } + if len(m.RewardDenom) > 0 { + i -= len(m.RewardDenom) + copy(dAtA[i:], m.RewardDenom) + i = encodeVarintTx(dAtA, i, uint64(len(m.RewardDenom))) + i-- + dAtA[i] = 0x12 + } + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgDeleteTradeRouteResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgDeleteTradeRouteResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgDeleteTradeRouteResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgUpdateTradeRoute) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateTradeRoute) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateTradeRoute) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.MinTransferAmount.Size() + i -= size + if _, err := m.MinTransferAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x8a + { + size := m.MaxSwapAmount.Size() + i -= size + if _, err := m.MaxSwapAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + { + size := m.MinSwapAmount.Size() + i -= size + if _, err := m.MinSwapAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + if len(m.MaxAllowedSwapLossRate) > 0 { + i -= len(m.MaxAllowedSwapLossRate) + copy(dAtA[i:], m.MaxAllowedSwapLossRate) + i = encodeVarintTx(dAtA, i, uint64(len(m.MaxAllowedSwapLossRate))) + i-- + dAtA[i] = 0x2a + } + if m.PoolId != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.PoolId)) + i-- + dAtA[i] = 0x20 + } + if len(m.HostDenom) > 0 { + i -= len(m.HostDenom) + copy(dAtA[i:], m.HostDenom) + i = encodeVarintTx(dAtA, i, uint64(len(m.HostDenom))) + i-- + dAtA[i] = 0x1a + } + if len(m.RewardDenom) > 0 { + i -= len(m.RewardDenom) + copy(dAtA[i:], m.RewardDenom) + i = encodeVarintTx(dAtA, i, uint64(len(m.RewardDenom))) + i-- + dAtA[i] = 0x12 + } + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgUpdateTradeRouteResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateTradeRouteResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateTradeRouteResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgSetCommunityPoolRebate) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgSetCommunityPoolRebate) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSetCommunityPoolRebate) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.LiquidStakedStTokenAmount.Size() + i -= size + if _, err := m.LiquidStakedStTokenAmount.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + { + size := m.RebateRate.Size() + i -= size + if _, err := m.RebateRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0x12 + } + if len(m.Creator) > 0 { + i -= len(m.Creator) + copy(dAtA[i:], m.Creator) + i = encodeVarintTx(dAtA, i, uint64(len(m.Creator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgSetCommunityPoolRebateResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgSetCommunityPoolRebateResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSetCommunityPoolRebateResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgToggleTradeController) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgToggleTradeController) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgToggleTradeController) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Legacy { + i-- + if m.Legacy { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x28 + } + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintTx(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0x22 + } + if m.PermissionChange != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.PermissionChange)) + i-- + dAtA[i] = 0x18 + } + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0x12 + } + if len(m.Creator) > 0 { + i -= len(m.Creator) + copy(dAtA[i:], m.Creator) + i = encodeVarintTx(dAtA, i, uint64(len(m.Creator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgToggleTradeControllerResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgToggleTradeControllerResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgToggleTradeControllerResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgUpdateHostZoneParams) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateHostZoneParams) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateHostZoneParams) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.MaxMessagesPerIcaTx != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.MaxMessagesPerIcaTx)) + i-- + dAtA[i] = 0x18 + } + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0x12 + } + if len(m.Authority) > 0 { + i -= len(m.Authority) + copy(dAtA[i:], m.Authority) + i = encodeVarintTx(dAtA, i, uint64(len(m.Authority))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgUpdateHostZoneParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgUpdateHostZoneParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgUpdateHostZoneParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintTx(dAtA []byte, offset int, v uint64) int { + offset -= sovTx(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MsgUpdateInnerRedemptionRateBounds) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Creator) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.MinInnerRedemptionRate.Size() + n += 1 + l + sovTx(uint64(l)) + l = m.MaxInnerRedemptionRate.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgUpdateInnerRedemptionRateBoundsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgLiquidStake) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Creator) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Amount.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.HostDenom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgLiquidStakeResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.StToken.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgLSMLiquidStake) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Creator) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Amount.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.LsmTokenIbcDenom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgLSMLiquidStakeResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.TransactionComplete { + n += 2 + } + return n +} + +func (m *MsgClearBalance) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Creator) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Amount.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.Channel) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgClearBalanceResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgRedeemStake) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Creator) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.Amount.Size() + n += 1 + l + sovTx(uint64(l)) + l = len(m.HostZone) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Receiver) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgRedeemStakeResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgRegisterHostZone) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.ConnectionId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.HostDenom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.IbcDenom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Creator) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.TransferChannelId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.UnbondingPeriod != 0 { + n += 1 + sovTx(uint64(m.UnbondingPeriod)) + } + l = len(m.Bech32Prefix) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.MinRedemptionRate.Size() + n += 1 + l + sovTx(uint64(l)) + l = m.MaxRedemptionRate.Size() + n += 1 + l + sovTx(uint64(l)) + if m.LsmLiquidStakeEnabled { + n += 2 + } + l = len(m.CommunityPoolTreasuryAddress) + if l > 0 { + n += 2 + l + sovTx(uint64(l)) + } + if m.MaxMessagesPerIcaTx != 0 { + n += 2 + sovTx(uint64(m.MaxMessagesPerIcaTx)) + } + return n +} + +func (m *MsgRegisterHostZoneResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgClaimUndelegatedTokens) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Creator) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.HostZoneId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.Epoch != 0 { + n += 1 + sovTx(uint64(m.Epoch)) + } + l = len(m.Receiver) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgClaimUndelegatedTokensResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgRebalanceValidators) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Creator) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.HostZone) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.NumRebalance != 0 { + n += 1 + sovTx(uint64(m.NumRebalance)) + } + return n +} + +func (m *MsgRebalanceValidatorsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgAddValidators) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Creator) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.HostZone) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if len(m.Validators) > 0 { + for _, e := range m.Validators { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } + return n +} + +func (m *MsgAddValidatorsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *ValidatorWeight) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Address) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.Weight != 0 { + n += 1 + sovTx(uint64(m.Weight)) + } + return n +} + +func (m *MsgChangeValidatorWeights) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Creator) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.HostZone) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if len(m.ValidatorWeights) > 0 { + for _, e := range m.ValidatorWeights { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } + return n +} + +func (m *MsgChangeValidatorWeightsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgDeleteValidator) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Creator) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.HostZone) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ValAddr) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgDeleteValidatorResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgRestoreInterchainAccount) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Creator) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ConnectionId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.AccountOwner) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgRestoreInterchainAccountResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgCloseDelegationChannel) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Creator) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgCloseDelegationChannelResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgUpdateValidatorSharesExchRate) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Creator) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Valoper) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgUpdateValidatorSharesExchRateResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgCalibrateDelegation) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Creator) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Valoper) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgCalibrateDelegationResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgResumeHostZone) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Creator) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgResumeHostZoneResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgCreateTradeRoute) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.HostChainId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.StrideToRewardConnectionId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.StrideToTradeConnectionId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.HostToRewardTransferChannelId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.RewardToTradeTransferChannelId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.TradeToHostTransferChannelId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.RewardDenomOnHost) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.RewardDenomOnReward) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.RewardDenomOnTrade) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.HostDenomOnTrade) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.HostDenomOnHost) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.PoolId != 0 { + n += 1 + sovTx(uint64(m.PoolId)) + } + l = len(m.MaxAllowedSwapLossRate) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.MinSwapAmount.Size() + n += 1 + l + sovTx(uint64(l)) + l = m.MaxSwapAmount.Size() + n += 2 + l + sovTx(uint64(l)) + l = m.MinTransferAmount.Size() + n += 2 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgCreateTradeRouteResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgDeleteTradeRoute) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.RewardDenom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.HostDenom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgDeleteTradeRouteResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgUpdateTradeRoute) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.RewardDenom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.HostDenom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.PoolId != 0 { + n += 1 + sovTx(uint64(m.PoolId)) + } + l = len(m.MaxAllowedSwapLossRate) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.MinSwapAmount.Size() + n += 1 + l + sovTx(uint64(l)) + l = m.MaxSwapAmount.Size() + n += 1 + l + sovTx(uint64(l)) + l = m.MinTransferAmount.Size() + n += 2 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgUpdateTradeRouteResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgSetCommunityPoolRebate) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Creator) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = m.RebateRate.Size() + n += 1 + l + sovTx(uint64(l)) + l = m.LiquidStakedStTokenAmount.Size() + n += 1 + l + sovTx(uint64(l)) + return n +} + +func (m *MsgSetCommunityPoolRebateResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgToggleTradeController) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Creator) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.PermissionChange != 0 { + n += 1 + sovTx(uint64(m.PermissionChange)) + } + l = len(m.Address) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.Legacy { + n += 2 + } + return n +} + +func (m *MsgToggleTradeControllerResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgUpdateHostZoneParams) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Authority) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.MaxMessagesPerIcaTx != 0 { + n += 1 + sovTx(uint64(m.MaxMessagesPerIcaTx)) + } + return n +} + +func (m *MsgUpdateHostZoneParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovTx(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozTx(x uint64) (n int) { + return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MsgUpdateInnerRedemptionRateBounds) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateInnerRedemptionRateBounds: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateInnerRedemptionRateBounds: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MinInnerRedemptionRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MinInnerRedemptionRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxInnerRedemptionRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MaxInnerRedemptionRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgUpdateInnerRedemptionRateBoundsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateInnerRedemptionRateBoundsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateInnerRedemptionRateBoundsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgLiquidStake) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgLiquidStake: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgLiquidStake: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgLiquidStakeResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgLiquidStakeResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgLiquidStakeResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StToken", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.StToken.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgLSMLiquidStake) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgLSMLiquidStake: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgLSMLiquidStake: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LsmTokenIbcDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.LsmTokenIbcDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgLSMLiquidStakeResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgLSMLiquidStakeResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgLSMLiquidStakeResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field TransactionComplete", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.TransactionComplete = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgClearBalance) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgClearBalance: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgClearBalance: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Channel", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Channel = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgClearBalanceResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgClearBalanceResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgClearBalanceResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRedeemStake) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRedeemStake: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRedeemStake: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Amount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZone", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZone = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Receiver", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Receiver = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRedeemStakeResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRedeemStakeResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRedeemStakeResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRegisterHostZone) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRegisterHostZone: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRegisterHostZone: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConnectionId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ConnectionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IbcDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.IbcDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TransferChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TransferChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 11: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UnbondingPeriod", wireType) + } + m.UnbondingPeriod = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.UnbondingPeriod |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Bech32Prefix", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Bech32Prefix = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MinRedemptionRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MinRedemptionRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxRedemptionRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MaxRedemptionRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 15: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field LsmLiquidStakeEnabled", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.LsmLiquidStakeEnabled = bool(v != 0) + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CommunityPoolTreasuryAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CommunityPoolTreasuryAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 17: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxMessagesPerIcaTx", wireType) + } + m.MaxMessagesPerIcaTx = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MaxMessagesPerIcaTx |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRegisterHostZoneResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRegisterHostZoneResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRegisterHostZoneResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgClaimUndelegatedTokens) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgClaimUndelegatedTokens: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgClaimUndelegatedTokens: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZoneId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZoneId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Epoch", wireType) + } + m.Epoch = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Epoch |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Receiver", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Receiver = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgClaimUndelegatedTokensResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgClaimUndelegatedTokensResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgClaimUndelegatedTokensResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRebalanceValidators) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRebalanceValidators: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRebalanceValidators: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZone", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZone = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NumRebalance", wireType) + } + m.NumRebalance = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NumRebalance |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRebalanceValidatorsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRebalanceValidatorsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRebalanceValidatorsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgAddValidators) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgAddValidators: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgAddValidators: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZone", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZone = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Validators", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Validators = append(m.Validators, &Validator{}) + if err := m.Validators[len(m.Validators)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgAddValidatorsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgAddValidatorsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgAddValidatorsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ValidatorWeight) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ValidatorWeight: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ValidatorWeight: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Weight", wireType) + } + m.Weight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Weight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgChangeValidatorWeights) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgChangeValidatorWeights: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgChangeValidatorWeights: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZone", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZone = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorWeights", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ValidatorWeights = append(m.ValidatorWeights, &ValidatorWeight{}) + if err := m.ValidatorWeights[len(m.ValidatorWeights)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgChangeValidatorWeightsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgChangeValidatorWeightsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgChangeValidatorWeightsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgDeleteValidator) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgDeleteValidator: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgDeleteValidator: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostZone", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostZone = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValAddr", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ValAddr = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgDeleteValidatorResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgDeleteValidatorResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgDeleteValidatorResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRestoreInterchainAccount) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRestoreInterchainAccount: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRestoreInterchainAccount: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConnectionId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ConnectionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AccountOwner", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AccountOwner = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgRestoreInterchainAccountResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgRestoreInterchainAccountResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgRestoreInterchainAccountResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgCloseDelegationChannel) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgCloseDelegationChannel: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgCloseDelegationChannel: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgCloseDelegationChannelResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgCloseDelegationChannelResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgCloseDelegationChannelResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgUpdateValidatorSharesExchRate) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateValidatorSharesExchRate: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateValidatorSharesExchRate: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Valoper", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Valoper = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgUpdateValidatorSharesExchRateResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateValidatorSharesExchRateResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateValidatorSharesExchRateResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgCalibrateDelegation) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgCalibrateDelegation: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgCalibrateDelegation: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Valoper", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Valoper = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgCalibrateDelegationResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgCalibrateDelegationResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgCalibrateDelegationResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgResumeHostZone) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgResumeHostZone: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgResumeHostZone: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgResumeHostZoneResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgResumeHostZoneResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgResumeHostZoneResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgCreateTradeRoute) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgCreateTradeRoute: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgCreateTradeRoute: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StrideToRewardConnectionId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.StrideToRewardConnectionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StrideToTradeConnectionId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.StrideToTradeConnectionId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostToRewardTransferChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostToRewardTransferChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RewardToTradeTransferChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RewardToTradeTransferChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TradeToHostTransferChannelId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TradeToHostTransferChannelId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RewardDenomOnHost", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RewardDenomOnHost = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RewardDenomOnReward", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RewardDenomOnReward = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RewardDenomOnTrade", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RewardDenomOnTrade = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostDenomOnTrade", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostDenomOnTrade = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostDenomOnHost", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostDenomOnHost = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 13: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + } + m.PoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxAllowedSwapLossRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MaxAllowedSwapLossRate = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MinSwapAmount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MinSwapAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxSwapAmount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MaxSwapAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MinTransferAmount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MinTransferAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgCreateTradeRouteResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgCreateTradeRouteResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgCreateTradeRouteResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgDeleteTradeRoute) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgDeleteTradeRoute: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgDeleteTradeRoute: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RewardDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RewardDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgDeleteTradeRouteResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgDeleteTradeRouteResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgDeleteTradeRouteResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgUpdateTradeRoute) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateTradeRoute: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateTradeRoute: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RewardDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.RewardDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field HostDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.HostDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PoolId", wireType) + } + m.PoolId = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PoolId |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxAllowedSwapLossRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.MaxAllowedSwapLossRate = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MinSwapAmount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MinSwapAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxSwapAmount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MaxSwapAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MinTransferAmount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MinTransferAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgUpdateTradeRouteResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateTradeRouteResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateTradeRouteResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgSetCommunityPoolRebate) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgSetCommunityPoolRebate: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSetCommunityPoolRebate: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RebateRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.RebateRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LiquidStakedStTokenAmount", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LiquidStakedStTokenAmount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgSetCommunityPoolRebateResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgSetCommunityPoolRebateResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSetCommunityPoolRebateResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgToggleTradeController) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgToggleTradeController: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgToggleTradeController: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Creator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Creator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field PermissionChange", wireType) + } + m.PermissionChange = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.PermissionChange |= AuthzPermissionChange(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Legacy", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Legacy = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgToggleTradeControllerResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgToggleTradeControllerResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgToggleTradeControllerResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgUpdateHostZoneParams) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateHostZoneParams: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateHostZoneParams: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Authority", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Authority = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxMessagesPerIcaTx", wireType) + } + m.MaxMessagesPerIcaTx = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MaxMessagesPerIcaTx |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgUpdateHostZoneParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgUpdateHostZoneParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgUpdateHostZoneParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipTx(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthTx + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupTx + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthTx + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthTx = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTx = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupTx = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/stakeibc/types/validator.pb.go b/x/stakeibc/types/validator.pb.go new file mode 100644 index 00000000000..09fd83b2570 --- /dev/null +++ b/x/stakeibc/types/validator.pb.go @@ -0,0 +1,687 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/stakeibc/validator.proto + +package types + +import ( + cosmossdk_io_math "cosmossdk.io/math" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type Validator struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` + Weight uint64 `protobuf:"varint,6,opt,name=weight,proto3" json:"weight,omitempty"` + Delegation cosmossdk_io_math.Int `protobuf:"bytes,5,opt,name=delegation,proto3,customtype=cosmossdk.io/math.Int" json:"delegation"` + SlashQueryProgressTracker cosmossdk_io_math.Int `protobuf:"bytes,9,opt,name=slash_query_progress_tracker,json=slashQueryProgressTracker,proto3,customtype=cosmossdk.io/math.Int" json:"slash_query_progress_tracker"` + SlashQueryCheckpoint cosmossdk_io_math.Int `protobuf:"bytes,12,opt,name=slash_query_checkpoint,json=slashQueryCheckpoint,proto3,customtype=cosmossdk.io/math.Int" json:"slash_query_checkpoint"` + SharesToTokensRate cosmossdk_io_math.LegacyDec `protobuf:"bytes,10,opt,name=shares_to_tokens_rate,json=sharesToTokensRate,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"shares_to_tokens_rate"` + DelegationChangesInProgress int64 `protobuf:"varint,11,opt,name=delegation_changes_in_progress,json=delegationChangesInProgress,proto3" json:"delegation_changes_in_progress,omitempty"` + SlashQueryInProgress bool `protobuf:"varint,13,opt,name=slash_query_in_progress,json=slashQueryInProgress,proto3" json:"slash_query_in_progress,omitempty"` +} + +func (m *Validator) Reset() { *m = Validator{} } +func (m *Validator) String() string { return proto.CompactTextString(m) } +func (*Validator) ProtoMessage() {} +func (*Validator) Descriptor() ([]byte, []int) { + return fileDescriptor_5d2f32e16bd6ab8f, []int{0} +} +func (m *Validator) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Validator) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Validator.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Validator) XXX_Merge(src proto.Message) { + xxx_messageInfo_Validator.Merge(m, src) +} +func (m *Validator) XXX_Size() int { + return m.Size() +} +func (m *Validator) XXX_DiscardUnknown() { + xxx_messageInfo_Validator.DiscardUnknown(m) +} + +var xxx_messageInfo_Validator proto.InternalMessageInfo + +func (m *Validator) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *Validator) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func (m *Validator) GetWeight() uint64 { + if m != nil { + return m.Weight + } + return 0 +} + +func (m *Validator) GetDelegationChangesInProgress() int64 { + if m != nil { + return m.DelegationChangesInProgress + } + return 0 +} + +func (m *Validator) GetSlashQueryInProgress() bool { + if m != nil { + return m.SlashQueryInProgress + } + return false +} + +func init() { + proto.RegisterType((*Validator)(nil), "stride.stakeibc.Validator") +} + +func init() { proto.RegisterFile("stride/stakeibc/validator.proto", fileDescriptor_5d2f32e16bd6ab8f) } + +var fileDescriptor_5d2f32e16bd6ab8f = []byte{ + // 477 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xc1, 0x6e, 0xd3, 0x30, + 0x1c, 0xc6, 0x1b, 0x96, 0x6d, 0xa9, 0x01, 0x51, 0x59, 0xdd, 0xc8, 0x36, 0x48, 0x2b, 0x4e, 0xbd, + 0x34, 0x11, 0x45, 0x48, 0x5c, 0x38, 0xb0, 0xee, 0xb2, 0xaa, 0x07, 0x48, 0x2b, 0x0e, 0x1c, 0x88, + 0x5c, 0xe7, 0xaf, 0xc4, 0x4a, 0x6b, 0x17, 0xdb, 0x1b, 0xf4, 0x2d, 0x78, 0x98, 0x3d, 0xc4, 0x8e, + 0xd3, 0x4e, 0xc0, 0x61, 0x42, 0xed, 0x8b, 0xa0, 0xc4, 0xe9, 0x12, 0x89, 0xcb, 0x6e, 0xf6, 0xdf, + 0xdf, 0xf7, 0xb3, 0xfe, 0x9f, 0x3e, 0xd4, 0x51, 0x5a, 0xb2, 0x18, 0x02, 0xa5, 0x49, 0x06, 0x6c, + 0x46, 0x83, 0x4b, 0x32, 0x67, 0x31, 0xd1, 0x42, 0xfa, 0x4b, 0x29, 0xb4, 0xc0, 0xcf, 0x8c, 0xc0, + 0xdf, 0x0a, 0x8e, 0x8f, 0xa8, 0x50, 0x0b, 0xa1, 0xa2, 0xe2, 0x39, 0x30, 0x17, 0xa3, 0x3d, 0x6e, + 0x27, 0x22, 0x11, 0x66, 0x9e, 0x9f, 0xcc, 0xf4, 0xd5, 0x6f, 0x1b, 0x35, 0x3f, 0x6f, 0xa9, 0x18, + 0x23, 0x9b, 0x93, 0x05, 0xb8, 0x56, 0xd7, 0xea, 0x35, 0xc3, 0xe2, 0x8c, 0x07, 0x68, 0x9f, 0xc4, + 0xb1, 0x04, 0xa5, 0xdc, 0x47, 0xf9, 0xf8, 0xd4, 0xbd, 0xbd, 0xea, 0xb7, 0x4b, 0xf4, 0x07, 0xf3, + 0x32, 0xd1, 0x92, 0xf1, 0x24, 0xdc, 0x0a, 0xf1, 0x21, 0xda, 0xfb, 0x0e, 0x2c, 0x49, 0xb5, 0xbb, + 0xd7, 0xb5, 0x7a, 0x76, 0x58, 0xde, 0xf0, 0x7b, 0x84, 0x62, 0x98, 0x43, 0x42, 0x34, 0x13, 0xdc, + 0xdd, 0x2d, 0x70, 0x2f, 0xaf, 0xef, 0x3a, 0x8d, 0x3f, 0x77, 0x9d, 0x03, 0x83, 0x54, 0x71, 0xe6, + 0x33, 0x11, 0x2c, 0x88, 0x4e, 0xfd, 0x73, 0xae, 0xc3, 0x9a, 0x01, 0x7f, 0x45, 0x2f, 0xd4, 0x9c, + 0xa8, 0x34, 0xfa, 0x76, 0x01, 0x72, 0x95, 0x2f, 0x99, 0xe4, 0xdf, 0x45, 0x5a, 0x12, 0x9a, 0x81, + 0x74, 0x9b, 0x0f, 0x01, 0x1e, 0x15, 0x88, 0x4f, 0x39, 0xe1, 0x63, 0x09, 0x98, 0x1a, 0x3f, 0x9e, + 0xa0, 0xc3, 0x3a, 0x9f, 0xa6, 0x40, 0xb3, 0xa5, 0x60, 0x5c, 0xbb, 0x4f, 0x1e, 0x42, 0x6e, 0x57, + 0xe4, 0xe1, 0xbd, 0x15, 0xc7, 0xe8, 0x40, 0xa5, 0x44, 0x82, 0x8a, 0xb4, 0x88, 0xb4, 0xc8, 0x80, + 0xab, 0x48, 0x12, 0x0d, 0x2e, 0x2a, 0x98, 0xaf, 0x4b, 0xe6, 0xc9, 0xff, 0xcc, 0x31, 0x24, 0x84, + 0xae, 0xce, 0x80, 0xde, 0x5e, 0xf5, 0x51, 0x19, 0xf8, 0x19, 0xd0, 0x10, 0x1b, 0xde, 0x54, 0x4c, + 0x0b, 0x5a, 0x48, 0x34, 0xe0, 0x21, 0xf2, 0xaa, 0xa0, 0x22, 0x9a, 0x12, 0x9e, 0x80, 0x8a, 0x18, + 0xbf, 0x0f, 0xc9, 0x7d, 0xdc, 0xb5, 0x7a, 0x3b, 0xe1, 0x49, 0xa5, 0x1a, 0x1a, 0xd1, 0x39, 0xdf, + 0xc6, 0x80, 0xdf, 0xa2, 0xe7, 0xf5, 0xfd, 0xeb, 0xee, 0xa7, 0x5d, 0xab, 0xe7, 0xd4, 0x37, 0xac, + 0x6c, 0x23, 0xdb, 0xd9, 0x69, 0xd9, 0x23, 0xdb, 0xb1, 0x5b, 0xbb, 0x23, 0xdb, 0xd9, 0x6f, 0x39, + 0x23, 0xdb, 0x71, 0x5a, 0xcd, 0xd3, 0xf1, 0xf5, 0xda, 0xb3, 0x6e, 0xd6, 0x9e, 0xf5, 0x77, 0xed, + 0x59, 0x3f, 0x37, 0x5e, 0xe3, 0x66, 0xe3, 0x35, 0x7e, 0x6d, 0xbc, 0xc6, 0x97, 0x41, 0xc2, 0x74, + 0x7a, 0x31, 0xf3, 0xa9, 0x58, 0x04, 0x93, 0xa2, 0xc2, 0xfd, 0x31, 0x99, 0xa9, 0xa0, 0xec, 0xfb, + 0xe5, 0xe0, 0x5d, 0xf0, 0xa3, 0x6a, 0xbd, 0x5e, 0x2d, 0x41, 0xcd, 0xf6, 0x8a, 0xc2, 0xbe, 0xf9, + 0x17, 0x00, 0x00, 0xff, 0xff, 0x75, 0xd1, 0x84, 0xf1, 0x15, 0x03, 0x00, 0x00, +} + +func (m *Validator) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Validator) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Validator) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.SlashQueryInProgress { + i-- + if m.SlashQueryInProgress { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x68 + } + { + size := m.SlashQueryCheckpoint.Size() + i -= size + if _, err := m.SlashQueryCheckpoint.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintValidator(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x62 + if m.DelegationChangesInProgress != 0 { + i = encodeVarintValidator(dAtA, i, uint64(m.DelegationChangesInProgress)) + i-- + dAtA[i] = 0x58 + } + { + size := m.SharesToTokensRate.Size() + i -= size + if _, err := m.SharesToTokensRate.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintValidator(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + { + size := m.SlashQueryProgressTracker.Size() + i -= size + if _, err := m.SlashQueryProgressTracker.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintValidator(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + if m.Weight != 0 { + i = encodeVarintValidator(dAtA, i, uint64(m.Weight)) + i-- + dAtA[i] = 0x30 + } + { + size := m.Delegation.Size() + i -= size + if _, err := m.Delegation.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintValidator(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintValidator(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0x12 + } + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintValidator(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintValidator(dAtA []byte, offset int, v uint64) int { + offset -= sovValidator(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Validator) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + if l > 0 { + n += 1 + l + sovValidator(uint64(l)) + } + l = len(m.Address) + if l > 0 { + n += 1 + l + sovValidator(uint64(l)) + } + l = m.Delegation.Size() + n += 1 + l + sovValidator(uint64(l)) + if m.Weight != 0 { + n += 1 + sovValidator(uint64(m.Weight)) + } + l = m.SlashQueryProgressTracker.Size() + n += 1 + l + sovValidator(uint64(l)) + l = m.SharesToTokensRate.Size() + n += 1 + l + sovValidator(uint64(l)) + if m.DelegationChangesInProgress != 0 { + n += 1 + sovValidator(uint64(m.DelegationChangesInProgress)) + } + l = m.SlashQueryCheckpoint.Size() + n += 1 + l + sovValidator(uint64(l)) + if m.SlashQueryInProgress { + n += 2 + } + return n +} + +func sovValidator(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozValidator(x uint64) (n int) { + return sovValidator(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Validator) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Validator: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Validator: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthValidator + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthValidator + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthValidator + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthValidator + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Delegation", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthValidator + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthValidator + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Delegation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Weight", wireType) + } + m.Weight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Weight |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SlashQueryProgressTracker", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthValidator + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthValidator + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.SlashQueryProgressTracker.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SharesToTokensRate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthValidator + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthValidator + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.SharesToTokensRate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DelegationChangesInProgress", wireType) + } + m.DelegationChangesInProgress = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DelegationChangesInProgress |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SlashQueryCheckpoint", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthValidator + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthValidator + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.SlashQueryCheckpoint.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 13: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SlashQueryInProgress", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowValidator + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.SlashQueryInProgress = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipValidator(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthValidator + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipValidator(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowValidator + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowValidator + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowValidator + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthValidator + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupValidator + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthValidator + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthValidator = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowValidator = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupValidator = fmt.Errorf("proto: unexpected end of group") +) From 86ba945bdef6c1f06d23ebd948a1e78a336f9d69 Mon Sep 17 00:00:00 2001 From: P-Yevhenii Date: Thu, 18 Sep 2025 14:15:47 +0300 Subject: [PATCH 2/9] Interchain failed --- app/keepers/keepers.go | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/app/keepers/keepers.go b/app/keepers/keepers.go index df6789639da..64490197379 100644 --- a/app/keepers/keepers.go +++ b/app/keepers/keepers.go @@ -45,7 +45,6 @@ import ( custombankkeeper "github.com/osmosis-labs/osmosis/v27/custom/bank/keeper" icacallbackstypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" icaoracletypes "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" - interchainquerytypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" stakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" appparams "github.com/osmosis-labs/osmosis/v27/app/params" @@ -921,7 +920,7 @@ func (appKeepers *AppKeepers) initParamsKeeper(appCodec codec.BinaryCodec, legac paramsKeeper.Subspace(icaoracletypes.ModuleName) paramsKeeper.Subspace(stakeibctypes.ModuleName) paramsKeeper.Subspace(icacallbackstypes.ModuleName) - paramsKeeper.Subspace(interchainquerytypes.ModuleName) + //paramsKeeper.Subspace(interchainquerytypes.ModuleName) return paramsKeeper } @@ -973,7 +972,7 @@ func (appKeepers *AppKeepers) SetupHooks() { appKeepers.IncentivesKeeper.SetHooks( incentivestypes.NewMultiIncentiveHooks( - // insert incentive hooks receivers here + // insert incentive hooks receivers here ), ) @@ -1001,7 +1000,7 @@ func (appKeepers *AppKeepers) SetupHooks() { appKeepers.GovKeeper.SetHooks( govtypes.NewMultiGovHooks( - // insert governance hooks receivers here + // insert governance hooks receivers here ), ) } From 3d15b37eef2126c6d95f81dec00ae15783c4b54d Mon Sep 17 00:00:00 2001 From: P-Yevhenii Date: Thu, 25 Sep 2025 10:46:47 +0300 Subject: [PATCH 3/9] Multistaking filed --- app/app.go | 40 +- app/keepers/keepers.go | 199 +- app/modules.go | 41 + proto/buf.gen.gogo.yaml | 2 +- proto/buf.lock | 16 +- proto/buf.yaml | 2 +- proto/symphony/autopilot/genesis.proto | 16 + proto/symphony/autopilot/params.proto | 15 + proto/symphony/autopilot/query.proto | 25 + proto/symphony/claim/claim.proto | 36 + proto/symphony/claim/genesis.proto | 23 + proto/symphony/claim/params.proto | 41 + proto/symphony/claim/query.proto | 166 + proto/symphony/claim/tx.proto | 77 + .../symphony/icacallbacks/callback_data.proto | 13 + proto/symphony/icacallbacks/genesis.proto | 15 + proto/symphony/icacallbacks/packet.proto | 10 + proto/symphony/icacallbacks/params.proto | 9 + proto/symphony/icacallbacks/query.proto | 55 + proto/symphony/icaoracle/callbacks.proto | 15 + proto/symphony/icaoracle/contract.proto | 23 + proto/symphony/icaoracle/genesis.proto | 28 + proto/symphony/icaoracle/icaoracle.proto | 42 + proto/symphony/icaoracle/query.proto | 66 + proto/symphony/icaoracle/tx.proto | 83 + proto/symphony/icqoracle/genesis.proto | 16 + proto/symphony/icqoracle/icqoracle.proto | 66 + proto/symphony/icqoracle/query.proto | 89 + proto/symphony/icqoracle/tx.proto | 86 + .../symphony/interchainquery/v1/genesis.proto | 51 + proto/symphony/interchainquery/v1/query.proto | 21 + proto/symphony/interchainquery/v1/tx.proto | 47 + proto/symphony/records/callbacks.proto | 10 + proto/symphony/records/genesis.proto | 24 + proto/symphony/records/params.proto | 7 + proto/symphony/records/query.proto | 182 + proto/symphony/records/records.proto | 129 + .../symphony/stakeibc/address_unbonding.proto | 19 + proto/symphony/stakeibc/callbacks.proto | 102 + proto/symphony/stakeibc/epoch_tracker.proto | 11 + proto/symphony/stakeibc/genesis.proto | 21 + proto/symphony/stakeibc/gov.proto | 34 + proto/symphony/stakeibc/host_zone.proto | 140 + proto/symphony/stakeibc/ica_account.proto | 22 + proto/symphony/stakeibc/packet.proto | 10 + proto/symphony/stakeibc/params.proto | 32 + proto/symphony/stakeibc/query.proto | 161 + proto/symphony/stakeibc/trade_route.proto | 106 + proto/symphony/stakeibc/tx.proto | 481 ++ proto/symphony/stakeibc/validator.proto | 31 + proto/symphony/vesting/vesting.proto | 63 + x/autopilot/README.md | 69 + x/autopilot/client/cli/query.go | 52 + x/autopilot/keeper/airdrop.go | 61 + x/autopilot/keeper/airdrop_test.go | 395 ++ x/autopilot/keeper/fallback.go | 39 + x/autopilot/keeper/fallback_test.go | 22 + x/autopilot/keeper/genesis.go | 20 + x/autopilot/keeper/genesis_test.go | 20 + x/autopilot/keeper/grpc_query_params.go | 20 + x/autopilot/keeper/grpc_query_params_test.go | 29 + x/autopilot/keeper/ibc.go | 98 + x/autopilot/keeper/ibc_test.go | 240 + x/autopilot/keeper/keeper.go | 57 + x/autopilot/keeper/keeper_test.go | 35 + x/autopilot/keeper/liquidstake.go | 157 + x/autopilot/keeper/liquidstake_test.go | 495 ++ x/autopilot/keeper/params.go | 18 + x/autopilot/keeper/params_test.go | 15 + x/autopilot/keeper/redeem_stake.go | 80 + x/autopilot/keeper/redeem_stake_test.go | 444 ++ x/autopilot/module.go | 159 + x/autopilot/module_ibc.go | 319 ++ x/autopilot/types/autopilot.go | 51 + x/autopilot/types/codec.go | 10 + x/autopilot/types/errors.go | 19 + x/autopilot/types/events_ibc.go | 10 + x/autopilot/types/expected_keepers.go | 17 + x/autopilot/types/genesis.go | 19 + x/autopilot/types/genesis.pb.go | 323 ++ x/autopilot/types/genesis_test.go | 32 + x/autopilot/types/keys.go | 35 + x/autopilot/types/params.go | 73 + x/autopilot/types/params.pb.go | 352 ++ x/autopilot/types/parser.go | 126 + x/autopilot/types/parser_test.go | 308 ++ x/autopilot/types/query.pb.go | 536 +++ x/autopilot/types/query.pb.gw.go | 153 + x/claim/README.md | 260 ++ x/claim/client/cli/cli_test.go | 327 ++ x/claim/client/cli/query.go | 313 ++ x/claim/client/cli/tx.go | 27 + x/claim/client/cli/tx_claim_free_amount.go | 38 + x/claim/client/cli/tx_create_airdrop.go | 62 + x/claim/client/cli/tx_delete_airdrop.go | 39 + .../client/cli/tx_set_airdrop_allocations.go | 57 + x/claim/keeper/abci.go | 26 + x/claim/keeper/claim.go | 892 ++++ x/claim/keeper/claim_test.go | 862 ++++ x/claim/keeper/genesis.go | 31 + x/claim/keeper/genesis_test.go | 66 + x/claim/keeper/grpc_query.go | 165 + x/claim/keeper/hooks.go | 173 + x/claim/keeper/hooks_test.go | 101 + x/claim/keeper/keeper.go | 42 + x/claim/keeper/keeper_test.go | 118 + x/claim/keeper/msg_server.go | 130 + x/claim/keeper/msg_server_test.go | 173 + x/claim/keeper/params.go | 27 + x/claim/migrations/v2/convert.go | 28 + x/claim/migrations/v2/convert_test.go | 72 + x/claim/migrations/v2/migrations.go | 38 + x/claim/migrations/v2/types/params.pb.go | 763 +++ x/claim/module.go | 154 + x/claim/types/claim.pb.go | 559 +++ x/claim/types/codec.go | 26 + x/claim/types/errors.go | 33 + x/claim/types/events.go | 6 + x/claim/types/expected_keepers.go | 47 + x/claim/types/genesis.go | 40 + x/claim/types/genesis.pb.go | 389 ++ x/claim/types/keys.go | 36 + x/claim/types/msgs.go | 220 + x/claim/types/params.go | 15 + x/claim/types/params.pb.go | 874 ++++ x/claim/types/query.pb.go | 4079 +++++++++++++++++ x/claim/types/query.pb.gw.go | 888 ++++ x/claim/types/tx.pb.go | 2079 +++++++++ x/claim/vesting/exported/exported.go | 40 + x/claim/vesting/module.go | 122 + x/claim/vesting/types/codec.go | 39 + x/claim/vesting/types/common_test.go | 9 + x/claim/vesting/types/constants.go | 12 + x/claim/vesting/types/expected_keepers.go | 15 + x/claim/vesting/types/msgs.go | 1 + x/claim/vesting/types/period.go | 60 + x/claim/vesting/types/test_common.go | 29 + x/claim/vesting/types/vesting.pb.go | 1058 +++++ x/claim/vesting/types/vesting_account.go | 358 ++ x/claim/vesting/types/vesting_account_test.go | 271 ++ x/concentrated-liquidity/model/pool.pb.go | 2 +- x/concentrated-liquidity/model/position.pb.go | 44 +- .../types/incentive_record.pb.go | 11 +- x/concentrated-liquidity/types/params.pb.go | 2 +- .../client/queryproto/query.pb.go | 3 +- x/downtime-detector/types/genesis.pb.go | 3 +- x/epochs/keeper/abci.go | 2 +- x/epochs/keeper/epoch.go | 4 +- x/epochs/keeper/keeper.go | 3 +- x/epochs/types/genesis.go | 8 + x/epochs/types/genesis.pb.go | 3 +- x/epochs/types/hooks.go | 2 +- .../pool-models/balancer/balancerPool.pb.go | 13 +- x/gamm/pool-models/balancer/tx.pb.go | 2 +- .../stableswap/stableswap_pool.pb.go | 3 +- x/ibc-hooks/types/params.pb.go | 2 +- x/icacallbacks/types/callback_data.pb.go | 46 +- x/icacallbacks/types/genesis.pb.go | 50 +- x/icacallbacks/types/packet.pb.go | 50 +- x/icacallbacks/types/params.pb.go | 35 +- x/icacallbacks/types/query.pb.go | 121 +- x/icacallbacks/types/query.pb.gw.go | 8 +- x/icaoracle/types/callbacks.pb.go | 48 +- x/icaoracle/types/contract.pb.go | 74 +- x/icaoracle/types/genesis.pb.go | 52 +- x/icaoracle/types/icaoracle.pb.go | 98 +- x/icaoracle/types/query.pb.go | 132 +- x/icaoracle/types/query.pb.gw.go | 10 +- x/icaoracle/types/tx.pb.go | 158 +- x/icqoracle/types/genesis.pb.go | 43 +- x/icqoracle/types/icqoracle.pb.go | 94 +- x/icqoracle/types/query.pb.go | 151 +- x/icqoracle/types/query.pb.gw.go | 10 +- x/icqoracle/types/tx.pb.go | 128 +- x/incentives/types/gauge.pb.go | 3 +- x/incentives/types/genesis.pb.go | 2 +- x/incentives/types/group.pb.go | 3 +- x/incentives/types/params.pb.go | 2 +- x/incentives/types/query.pb.go | 2 +- x/incentives/types/tx.pb.go | 2 +- x/interchainquery/types/genesis.pb.go | 116 +- x/interchainquery/types/query.pb.go | 69 +- x/interchainquery/types/query.pb.gw.go | 4 +- x/interchainquery/types/tx.pb.go | 98 +- x/interchainquery/types/tx.pb.gw.go | 4 +- x/lockup/types/lock.pb.go | 7 +- x/lockup/types/query.pb.go | 3 +- x/lockup/types/tx.pb.go | 10 +- x/mint/types/mint.pb.go | 3 +- x/pool-incentives/types/genesis.pb.go | 2 +- x/pool-incentives/types/incentives.pb.go | 2 +- x/pool-incentives/types/query.pb.go | 10 +- x/pool-incentives/types/shared.pb.go | 2 +- x/poolmanager/client/queryproto/query.pb.go | 2 +- x/poolmanager/client/queryprotov2/query.pb.go | 2 +- x/poolmanager/types/genesis.pb.go | 2 +- x/records/types/callbacks.pb.go | 45 +- x/records/types/genesis.pb.go | 66 +- x/records/types/params.pb.go | 30 +- x/records/types/query.pb.go | 300 +- x/records/types/query.pb.gw.go | 24 +- x/records/types/records.pb.go | 198 +- x/stablestaking/keeper/hooks.go | 4 +- x/stablestaking/types/stablestaking.pb.go | 2 +- x/stakeibc/keeper/claim.go | 2 +- x/stakeibc/keeper/hooks.go | 34 +- x/stakeibc/keeper/keeper.go | 2 + x/stakeibc/keeper/reward_allocation.go | 6 +- x/stakeibc/types/address_unbonding.pb.go | 56 +- x/stakeibc/types/callbacks.pb.go | 202 +- x/stakeibc/types/epoch_tracker.pb.go | 46 +- x/stakeibc/types/genesis.pb.go | 61 +- x/stakeibc/types/gov.pb.go | 64 +- x/stakeibc/types/host_zone.pb.go | 142 +- x/stakeibc/types/ica_account.pb.go | 67 +- x/stakeibc/types/packet.pb.go | 47 +- x/stakeibc/types/params.pb.go | 92 +- x/stakeibc/types/query.pb.go | 306 +- x/stakeibc/types/query.pb.gw.go | 22 +- x/stakeibc/types/trade_route.pb.go | 106 +- x/stakeibc/types/tx.pb.go | 629 +-- x/stakeibc/types/validator.pb.go | 72 +- x/superfluid/types/params.pb.go | 2 +- x/superfluid/types/query.pb.go | 3 +- x/superfluid/types/superfluid.pb.go | 3 +- x/superfluid/types/tx.pb.go | 3 +- x/twap/client/queryproto/query.pb.go | 10 +- x/twap/types/genesis.pb.go | 2 +- x/twap/types/twap_record.pb.go | 2 +- x/txfees/types/query.pb.go | 2 +- x/valset-pref/types/tx.pb.go | 2 +- 231 files changed, 26385 insertions(+), 2250 deletions(-) create mode 100644 proto/symphony/autopilot/genesis.proto create mode 100644 proto/symphony/autopilot/params.proto create mode 100644 proto/symphony/autopilot/query.proto create mode 100644 proto/symphony/claim/claim.proto create mode 100644 proto/symphony/claim/genesis.proto create mode 100644 proto/symphony/claim/params.proto create mode 100644 proto/symphony/claim/query.proto create mode 100644 proto/symphony/claim/tx.proto create mode 100755 proto/symphony/icacallbacks/callback_data.proto create mode 100755 proto/symphony/icacallbacks/genesis.proto create mode 100644 proto/symphony/icacallbacks/packet.proto create mode 100755 proto/symphony/icacallbacks/params.proto create mode 100644 proto/symphony/icacallbacks/query.proto create mode 100644 proto/symphony/icaoracle/callbacks.proto create mode 100644 proto/symphony/icaoracle/contract.proto create mode 100644 proto/symphony/icaoracle/genesis.proto create mode 100644 proto/symphony/icaoracle/icaoracle.proto create mode 100644 proto/symphony/icaoracle/query.proto create mode 100644 proto/symphony/icaoracle/tx.proto create mode 100644 proto/symphony/icqoracle/genesis.proto create mode 100644 proto/symphony/icqoracle/icqoracle.proto create mode 100644 proto/symphony/icqoracle/query.proto create mode 100644 proto/symphony/icqoracle/tx.proto create mode 100644 proto/symphony/interchainquery/v1/genesis.proto create mode 100644 proto/symphony/interchainquery/v1/query.proto create mode 100644 proto/symphony/interchainquery/v1/tx.proto create mode 100644 proto/symphony/records/callbacks.proto create mode 100644 proto/symphony/records/genesis.proto create mode 100644 proto/symphony/records/params.proto create mode 100644 proto/symphony/records/query.proto create mode 100644 proto/symphony/records/records.proto create mode 100644 proto/symphony/stakeibc/address_unbonding.proto create mode 100644 proto/symphony/stakeibc/callbacks.proto create mode 100755 proto/symphony/stakeibc/epoch_tracker.proto create mode 100644 proto/symphony/stakeibc/genesis.proto create mode 100644 proto/symphony/stakeibc/gov.proto create mode 100644 proto/symphony/stakeibc/host_zone.proto create mode 100644 proto/symphony/stakeibc/ica_account.proto create mode 100644 proto/symphony/stakeibc/packet.proto create mode 100755 proto/symphony/stakeibc/params.proto create mode 100644 proto/symphony/stakeibc/query.proto create mode 100644 proto/symphony/stakeibc/trade_route.proto create mode 100644 proto/symphony/stakeibc/tx.proto create mode 100644 proto/symphony/stakeibc/validator.proto create mode 100644 proto/symphony/vesting/vesting.proto create mode 100644 x/autopilot/README.md create mode 100644 x/autopilot/client/cli/query.go create mode 100644 x/autopilot/keeper/airdrop.go create mode 100644 x/autopilot/keeper/airdrop_test.go create mode 100644 x/autopilot/keeper/fallback.go create mode 100644 x/autopilot/keeper/fallback_test.go create mode 100644 x/autopilot/keeper/genesis.go create mode 100644 x/autopilot/keeper/genesis_test.go create mode 100644 x/autopilot/keeper/grpc_query_params.go create mode 100644 x/autopilot/keeper/grpc_query_params_test.go create mode 100644 x/autopilot/keeper/ibc.go create mode 100644 x/autopilot/keeper/ibc_test.go create mode 100644 x/autopilot/keeper/keeper.go create mode 100644 x/autopilot/keeper/keeper_test.go create mode 100644 x/autopilot/keeper/liquidstake.go create mode 100644 x/autopilot/keeper/liquidstake_test.go create mode 100644 x/autopilot/keeper/params.go create mode 100644 x/autopilot/keeper/params_test.go create mode 100644 x/autopilot/keeper/redeem_stake.go create mode 100644 x/autopilot/keeper/redeem_stake_test.go create mode 100644 x/autopilot/module.go create mode 100644 x/autopilot/module_ibc.go create mode 100644 x/autopilot/types/autopilot.go create mode 100644 x/autopilot/types/codec.go create mode 100644 x/autopilot/types/errors.go create mode 100644 x/autopilot/types/events_ibc.go create mode 100644 x/autopilot/types/expected_keepers.go create mode 100644 x/autopilot/types/genesis.go create mode 100644 x/autopilot/types/genesis.pb.go create mode 100644 x/autopilot/types/genesis_test.go create mode 100644 x/autopilot/types/keys.go create mode 100644 x/autopilot/types/params.go create mode 100644 x/autopilot/types/params.pb.go create mode 100644 x/autopilot/types/parser.go create mode 100644 x/autopilot/types/parser_test.go create mode 100644 x/autopilot/types/query.pb.go create mode 100644 x/autopilot/types/query.pb.gw.go create mode 100644 x/claim/README.md create mode 100644 x/claim/client/cli/cli_test.go create mode 100644 x/claim/client/cli/query.go create mode 100644 x/claim/client/cli/tx.go create mode 100644 x/claim/client/cli/tx_claim_free_amount.go create mode 100644 x/claim/client/cli/tx_create_airdrop.go create mode 100644 x/claim/client/cli/tx_delete_airdrop.go create mode 100644 x/claim/client/cli/tx_set_airdrop_allocations.go create mode 100644 x/claim/keeper/abci.go create mode 100644 x/claim/keeper/claim.go create mode 100644 x/claim/keeper/claim_test.go create mode 100644 x/claim/keeper/genesis.go create mode 100644 x/claim/keeper/genesis_test.go create mode 100644 x/claim/keeper/grpc_query.go create mode 100644 x/claim/keeper/hooks.go create mode 100644 x/claim/keeper/hooks_test.go create mode 100644 x/claim/keeper/keeper.go create mode 100644 x/claim/keeper/keeper_test.go create mode 100644 x/claim/keeper/msg_server.go create mode 100644 x/claim/keeper/msg_server_test.go create mode 100644 x/claim/keeper/params.go create mode 100644 x/claim/migrations/v2/convert.go create mode 100644 x/claim/migrations/v2/convert_test.go create mode 100644 x/claim/migrations/v2/migrations.go create mode 100644 x/claim/migrations/v2/types/params.pb.go create mode 100644 x/claim/module.go create mode 100644 x/claim/types/claim.pb.go create mode 100644 x/claim/types/codec.go create mode 100644 x/claim/types/errors.go create mode 100644 x/claim/types/events.go create mode 100644 x/claim/types/expected_keepers.go create mode 100644 x/claim/types/genesis.go create mode 100644 x/claim/types/genesis.pb.go create mode 100644 x/claim/types/keys.go create mode 100644 x/claim/types/msgs.go create mode 100644 x/claim/types/params.go create mode 100644 x/claim/types/params.pb.go create mode 100644 x/claim/types/query.pb.go create mode 100644 x/claim/types/query.pb.gw.go create mode 100644 x/claim/types/tx.pb.go create mode 100644 x/claim/vesting/exported/exported.go create mode 100644 x/claim/vesting/module.go create mode 100644 x/claim/vesting/types/codec.go create mode 100644 x/claim/vesting/types/common_test.go create mode 100644 x/claim/vesting/types/constants.go create mode 100644 x/claim/vesting/types/expected_keepers.go create mode 100644 x/claim/vesting/types/msgs.go create mode 100644 x/claim/vesting/types/period.go create mode 100644 x/claim/vesting/types/test_common.go create mode 100644 x/claim/vesting/types/vesting.pb.go create mode 100644 x/claim/vesting/types/vesting_account.go create mode 100644 x/claim/vesting/types/vesting_account_test.go diff --git a/app/app.go b/app/app.go index a385b4f5eb3..260b2d91e32 100644 --- a/app/app.go +++ b/app/app.go @@ -4,6 +4,7 @@ import ( "context" storetypes "cosmossdk.io/store/types" "fmt" + "github.com/cosmos/cosmos-sdk/std" govclient "github.com/cosmos/cosmos-sdk/x/gov/client" paramsclient "github.com/cosmos/cosmos-sdk/x/params/client" "github.com/osmosis-labs/osmosis/osmomath" @@ -229,6 +230,10 @@ func NewSymphonyApp( interfaceRegistry := encodingConfig.InterfaceRegistry txConfig := encodingConfig.TxConfig + legacyAmino := codec.NewLegacyAmino() + std.RegisterLegacyAminoCodec(legacyAmino) + std.RegisterInterfaces(interfaceRegistry) + bApp := baseapp.NewBaseApp(appName, logger, db, txConfig.TxDecoder(), baseAppOptions...) bApp.SetCommitMultiStoreTracer(traceStore) bApp.SetVersion(version.Version) @@ -311,25 +316,6 @@ func NewSymphonyApp( // NOTE: staking module is required if HistoricalEntries param > 0 // NOTE: capability module's beginblocker must come before any modules using capabilities (e.g. IBC) - // Upgrades from v0.50.x onwards happen in pre block - app.mm.SetOrderPreBlockers(upgradetypes.ModuleName) - - // Tell the app's module manager how to set the order of BeginBlockers, which are run at the beginning of every block. - app.mm.SetOrderBeginBlockers(orderBeginBlockers(app.mm.ModuleNames())...) - - // Tell the app's module manager how to set the order of EndBlockers, which are run at the end of every block. - app.mm.SetOrderEndBlockers(OrderEndBlockers(app.mm.ModuleNames())...) - - app.mm.SetOrderInitGenesis(OrderInitGenesis(app.mm.ModuleNames())...) - - app.mm.RegisterInvariants(app.CrisisKeeper) - - app.configurator = module.NewConfigurator(app.AppCodec(), app.MsgServiceRouter(), app.GRPCQueryRouter()) - err = app.mm.RegisterServices(app.configurator) - if err != nil { - panic(err) - } - // Override the gov ModuleBasic with all the custom proposal handers, otherwise we lose them in the CLI. app.ModuleBasics = module.NewBasicManagerFromManager( app.mm, @@ -357,6 +343,22 @@ func NewSymphonyApp( }, ) + app.ModuleBasics.RegisterLegacyAminoCodec(legacyAmino) + app.ModuleBasics.RegisterInterfaces(interfaceRegistry) + + // Upgrades from v0.50.x onwards happen in pre block + app.mm.SetOrderPreBlockers(upgradetypes.ModuleName) + // Tell the app's module manager how to set the order of BeginBlockers, which are run at the beginning of every block. + app.mm.SetOrderBeginBlockers(orderBeginBlockers(app.mm.ModuleNames())...) + // Tell the app's module manager how to set the order of EndBlockers, which are run at the end of every block. + app.mm.SetOrderEndBlockers(OrderEndBlockers(app.mm.ModuleNames())...) + app.mm.SetOrderInitGenesis(OrderInitGenesis(app.mm.ModuleNames())...) + app.mm.RegisterInvariants(app.CrisisKeeper) + app.configurator = module.NewConfigurator(app.AppCodec(), app.MsgServiceRouter(), app.GRPCQueryRouter()) + err = app.mm.RegisterServices(app.configurator) + if err != nil { + panic(err) + } app.setupUpgradeHandlers() app.sm = module.NewSimulationManager( diff --git a/app/keepers/keepers.go b/app/keepers/keepers.go index 64490197379..bb897844443 100644 --- a/app/keepers/keepers.go +++ b/app/keepers/keepers.go @@ -36,19 +36,34 @@ import ( stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" icq "github.com/cosmos/ibc-apps/modules/async-icq/v8" + icqkeeper "github.com/cosmos/ibc-apps/modules/async-icq/v8/keeper" icqtypes "github.com/cosmos/ibc-apps/modules/async-icq/v8/types" + ratelimitkeeper "github.com/cosmos/ibc-apps/modules/rate-limiting/v8/keeper" + ratelimittypes "github.com/cosmos/ibc-apps/modules/rate-limiting/v8/types" capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + ibcwasmkeeper "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/keeper" + ibcwasmtypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" icacontroller "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller" icacontrollerkeeper "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/keeper" icacontrollertypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/controller/types" - custombankkeeper "github.com/osmosis-labs/osmosis/v27/custom/bank/keeper" - icacallbackstypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" - icaoracletypes "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" - stakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" - + icahost "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host" + icahostkeeper "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host/keeper" + icahosttypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host/types" + ibctransferkeeper "github.com/cosmos/ibc-go/v8/modules/apps/transfer/keeper" + ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + ibcclienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + ibcconnectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" + porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" + ibchost "github.com/cosmos/ibc-go/v8/modules/core/exported" + ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" + ccvconsumertypes "github.com/cosmos/interchain-security/v6/x/ccv/consumer/types" appparams "github.com/osmosis-labs/osmosis/v27/app/params" + custombankkeeper "github.com/osmosis-labs/osmosis/v27/custom/bank/keeper" customwasmkeeper "github.com/osmosis-labs/osmosis/v27/custom/wasm/keeper" + autopilottypes "github.com/osmosis-labs/osmosis/v27/x/autopilot/types" + claimkeeper "github.com/osmosis-labs/osmosis/v27/x/claim/keeper" + claimtypes "github.com/osmosis-labs/osmosis/v27/x/claim/types" "github.com/osmosis-labs/osmosis/v27/x/cosmwasmpool" cosmwasmpooltypes "github.com/osmosis-labs/osmosis/v27/x/cosmwasmpool/types" downtimedetector "github.com/osmosis-labs/osmosis/v27/x/downtime-detector" @@ -56,6 +71,12 @@ import ( "github.com/osmosis-labs/osmosis/v27/x/gamm" ibcratelimit "github.com/osmosis-labs/osmosis/v27/x/ibc-rate-limit" ibcratelimittypes "github.com/osmosis-labs/osmosis/v27/x/ibc-rate-limit/types" + icacallbacksmodulekeeper "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/keeper" + icacallbackstypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + icaoraclekeeper "github.com/osmosis-labs/osmosis/v27/x/icaoracle/keeper" + icaoracletypes "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" + interchainquerykeeper "github.com/osmosis-labs/osmosis/v27/x/interchainquery/keeper" + interchainquerytypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" marketkeeper "github.com/osmosis-labs/osmosis/v27/x/market/keeper" markettypes "github.com/osmosis-labs/osmosis/v27/x/market/types" oraclekeeper "github.com/osmosis-labs/osmosis/v27/x/oracle/keeper" @@ -63,30 +84,20 @@ import ( "github.com/osmosis-labs/osmosis/v27/x/poolmanager" poolmanagertypes "github.com/osmosis-labs/osmosis/v27/x/poolmanager/types" "github.com/osmosis-labs/osmosis/v27/x/protorev" + recordsmodulekeeper "github.com/osmosis-labs/osmosis/v27/x/records/keeper" + recordsmoduletypes "github.com/osmosis-labs/osmosis/v27/x/records/types" stablestakingincentviceskeeper "github.com/osmosis-labs/osmosis/v27/x/stable-staking-incentives/keeper" stablestakingincentvicestypes "github.com/osmosis-labs/osmosis/v27/x/stable-staking-incentives/types" stablestakingkeeper "github.com/osmosis-labs/osmosis/v27/x/stablestaking/keeper" stablestakingtypes "github.com/osmosis-labs/osmosis/v27/x/stablestaking/types" + stakeibckeeper "github.com/osmosis-labs/osmosis/v27/x/stakeibc/keeper" + stakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" treasurykeeper "github.com/osmosis-labs/osmosis/v27/x/treasury/keeper" treasurytypes "github.com/osmosis-labs/osmosis/v27/x/treasury/types" ibchooks "github.com/osmosis-labs/osmosis/x/ibc-hooks" ibchookskeeper "github.com/osmosis-labs/osmosis/x/ibc-hooks/keeper" ibchookstypes "github.com/osmosis-labs/osmosis/x/ibc-hooks/types" - icqkeeper "github.com/cosmos/ibc-apps/modules/async-icq/v8/keeper" - ibcwasmkeeper "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/keeper" - ibcwasmtypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" - icahost "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host" - icahostkeeper "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host/keeper" - icahosttypes "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts/host/types" - ibctransferkeeper "github.com/cosmos/ibc-go/v8/modules/apps/transfer/keeper" - ibctransfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" - ibcclienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" - ibcconnectiontypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" - porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" - ibchost "github.com/cosmos/ibc-go/v8/modules/core/exported" - ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" - packetforward "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8/packetforward" packetforwardkeeper "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8/packetforward/keeper" packetforwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8/packetforward/types" @@ -98,14 +109,19 @@ import ( smartaccountkeeper "github.com/osmosis-labs/osmosis/v27/x/smart-account/keeper" smartaccounttypes "github.com/osmosis-labs/osmosis/v27/x/smart-account/types" + storetypes "cosmossdk.io/store/types" + ccvconsumerkeeper "github.com/cosmos/interchain-security/v6/x/ccv/consumer/keeper" _ "github.com/osmosis-labs/osmosis/v27/client/docs/statik" owasm "github.com/osmosis-labs/osmosis/v27/wasmbinding" + autopilotkeeper "github.com/osmosis-labs/osmosis/v27/x/autopilot/keeper" concentratedliquidity "github.com/osmosis-labs/osmosis/v27/x/concentrated-liquidity" concentratedliquiditytypes "github.com/osmosis-labs/osmosis/v27/x/concentrated-liquidity/types" epochskeeper "github.com/osmosis-labs/osmosis/v27/x/epochs/keeper" epochstypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" gammkeeper "github.com/osmosis-labs/osmosis/v27/x/gamm/keeper" gammtypes "github.com/osmosis-labs/osmosis/v27/x/gamm/types" + icqoraclekeeper "github.com/osmosis-labs/osmosis/v27/x/icqoracle/keeper" + icqoracletypes "github.com/osmosis-labs/osmosis/v27/x/icqoracle/types" incentiveskeeper "github.com/osmosis-labs/osmosis/v27/x/incentives/keeper" incentivestypes "github.com/osmosis-labs/osmosis/v27/x/incentives/types" lockupkeeper "github.com/osmosis-labs/osmosis/v27/x/lockup/keeper" @@ -128,11 +144,8 @@ import ( txfeestypes "github.com/osmosis-labs/osmosis/v27/x/txfees/types" valsetpref "github.com/osmosis-labs/osmosis/v27/x/valset-pref" valsetpreftypes "github.com/osmosis-labs/osmosis/v27/x/valset-pref/types" - auctionkeeper "github.com/skip-mev/block-sdk/v2/x/auction/keeper" auctiontypes "github.com/skip-mev/block-sdk/v2/x/auction/types" - - storetypes "cosmossdk.io/store/types" ) const ( @@ -168,6 +181,7 @@ type AppKeepers struct { IBCHooksKeeper *ibchookskeeper.Keeper ICAHostKeeper *icahostkeeper.Keeper ICAControllerKeeper *icacontrollerkeeper.Keeper + InterchainqueryKeeper *interchainquerykeeper.Keeper ICQKeeper *icqkeeper.Keeper TransferKeeper *ibctransferkeeper.Keeper IBCWasmClientKeeper *ibcwasmkeeper.Keeper @@ -198,6 +212,16 @@ type AppKeepers struct { SmartAccountKeeper *smartaccountkeeper.Keeper AuthenticatorManager *authenticator.AuthenticatorManager + // Stride keepers + StakeIbcKeeper *stakeibckeeper.Keeper + IcacallbacksKeeper *icacallbacksmodulekeeper.Keeper + RecordsKeeper *recordsmodulekeeper.Keeper + ICAOracleKeeper *icaoraclekeeper.Keeper + ClaimKeeper *claimkeeper.Keeper + RatelimitKeeper *ratelimitkeeper.Keeper + ConsumerKeeper *ccvconsumerkeeper.Keeper + ICQOracleKeeper *icqoraclekeeper.Keeper + AutopilotKeeper *autopilotkeeper.Keeper // IBC modules // transfer module RawIcs20TransferAppModule transfer.AppModule @@ -315,12 +339,21 @@ func (appKeepers *AppKeepers) InitNormalKeepers( ) appKeepers.SlashingKeeper = &slashingKeeper + // Add ICS Consumer Keeper + consumerKeeper := ccvconsumerkeeper.NewNonZeroKeeper( + appCodec, + appKeepers.keys[ccvconsumertypes.StoreKey], + appKeepers.GetSubspace(ccvconsumertypes.ModuleName), + ) + appKeepers.ConsumerKeeper = &consumerKeeper + // Create IBC Keeper appKeepers.IBCKeeper = ibckeeper.NewKeeper( appCodec, appKeepers.keys[ibchost.StoreKey], appKeepers.GetSubspace(ibchost.ModuleName), - appKeepers.StakingKeeper, + //appKeepers.StakingKeeper, TODO: do we need to replace with consumer? + appKeepers.ConsumerKeeper, appKeepers.UpgradeKeeper, appKeepers.ScopedIBCKeeper, authtypes.NewModuleAddress(govtypes.ModuleName).String(), @@ -335,6 +368,16 @@ func (appKeepers *AppKeepers) InitNormalKeepers( ) appKeepers.IBCHooksKeeper = hooksKeeper + appKeepers.RatelimitKeeper = ratelimitkeeper.NewKeeper( // TODO: do wee need it? + appCodec, + runtime.NewKVStoreService(appKeepers.keys[ratelimittypes.StoreKey]), + appKeepers.GetSubspace(ratelimittypes.ModuleName), + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + *appKeepers.BankKeeper, + appKeepers.IBCKeeper.ChannelKeeper, + appKeepers.IBCKeeper.ChannelKeeper, // ICS4Wrapper + ) + // We are using a separate VM here ibcWasmClientKeeper := ibcwasmkeeper.NewKeeperWithConfig( appCodec, @@ -610,6 +653,92 @@ func (appKeepers *AppKeepers) InitNormalKeepers( appKeepers.OracleKeeper) appKeepers.StableStakingKeeper = &stableStakingKeeper + appKeepers.IcacallbacksKeeper = icacallbacksmodulekeeper.NewKeeper( + appCodec, + appKeepers.keys[icacallbackstypes.StoreKey], + appKeepers.keys[icacallbackstypes.MemStoreKey], + appKeepers.GetSubspace(icacallbackstypes.ModuleName), + *appKeepers.IBCKeeper, + ) + + newInterchainQueryKeeper := interchainquerykeeper.NewKeeper(appCodec, appKeepers.keys[interchainquerytypes.StoreKey], appKeepers.IBCKeeper) + appKeepers.InterchainqueryKeeper = &newInterchainQueryKeeper + + appKeepers.RecordsKeeper = recordsmodulekeeper.NewKeeper( + appCodec, + appKeepers.keys[recordsmoduletypes.StoreKey], + appKeepers.keys[recordsmoduletypes.MemStoreKey], + appKeepers.GetSubspace(recordsmoduletypes.ModuleName), + *appKeepers.AccountKeeper, + *appKeepers.TransferKeeper, + *appKeepers.IBCKeeper, + *appKeepers.IcacallbacksKeeper, + ) + + // Note: Must be above stakeibc keeper + appKeepers.ICAOracleKeeper = icaoraclekeeper.NewKeeper( + appCodec, + appKeepers.keys[icaoracletypes.StoreKey], + appKeepers.GetSubspace(icaoracletypes.ModuleName), + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + appKeepers.IBCKeeper.ChannelKeeper, // ICS4Wrapper - Note: this technically should be ICAController but it doesn't implement ICS4 + appKeepers.IBCKeeper.ClientKeeper, + appKeepers.IBCKeeper.ConnectionKeeper, + appKeepers.IBCKeeper.ChannelKeeper, + *appKeepers.ICAControllerKeeper, + *appKeepers.IcacallbacksKeeper, + ) + + appKeepers.ICQOracleKeeper = icqoraclekeeper.NewKeeper( + appCodec, + appKeepers.keys[icqoracletypes.StoreKey], + appKeepers.InterchainqueryKeeper, + appKeepers.TransferKeeper, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + ) + + appKeepers.ClaimKeeper = claimkeeper.NewKeeper( + appCodec, + appKeepers.keys[claimtypes.StoreKey], + appKeepers.AccountKeeper, + appKeepers.BankKeeper, + appKeepers.StakingKeeper, + appKeepers.DistrKeeper, + appKeepers.EpochsKeeper, + ) + + stakeIbcKeeper := stakeibckeeper.NewKeeper( + appCodec, + appKeepers.keys[stakeibctypes.StoreKey], + appKeepers.keys[stakeibctypes.MemStoreKey], + appKeepers.GetSubspace(stakeibctypes.ModuleName), + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + appKeepers.AccountKeeper, + appKeepers.BankKeeper, + *appKeepers.ICAControllerKeeper, + *appKeepers.IBCKeeper, + *appKeepers.InterchainqueryKeeper, + *appKeepers.RecordsKeeper, + *appKeepers.StakingKeeper, + *appKeepers.IcacallbacksKeeper, + *appKeepers.RatelimitKeeper, + *appKeepers.ICAOracleKeeper, + *appKeepers.ConsumerKeeper, + ) + appKeepers.StakeIbcKeeper = stakeIbcKeeper.SetHooks( + stakeibctypes.NewMultiStakeIBCHooks(appKeepers.ClaimKeeper.Hooks()), + ) + + appKeepers.AutopilotKeeper = autopilotkeeper.NewKeeper( + appCodec, + appKeepers.keys[autopilottypes.StoreKey], + appKeepers.GetSubspace(autopilottypes.ModuleName), + *appKeepers.BankKeeper, + *appKeepers.StakeIbcKeeper, + *appKeepers.ClaimKeeper, + *appKeepers.TransferKeeper, + ) + treasuryKeeper := treasurykeeper.NewKeeper( appCodec, appKeepers.keys[treasurytypes.StoreKey], @@ -917,10 +1046,17 @@ func (appKeepers *AppKeepers) initParamsKeeper(appCodec codec.BinaryCodec, legac paramsKeeper.Subspace(txfeestypes.ModuleName) paramsKeeper.Subspace(auctiontypes.ModuleName) paramsKeeper.Subspace(stablestakingtypes.ModuleName) + + // stride modules paramsKeeper.Subspace(icaoracletypes.ModuleName) paramsKeeper.Subspace(stakeibctypes.ModuleName) paramsKeeper.Subspace(icacallbackstypes.ModuleName) - //paramsKeeper.Subspace(interchainquerytypes.ModuleName) + paramsKeeper.Subspace(ratelimittypes.ModuleName) + paramsKeeper.Subspace(recordsmoduletypes.ModuleName) + paramsKeeper.Subspace(icqoracletypes.ModuleName) + paramsKeeper.Subspace(autopilottypes.ModuleName) + paramsKeeper.Subspace(claimtypes.ModuleName) + paramsKeeper.Subspace(ccvconsumertypes.ModuleName) return paramsKeeper } @@ -972,7 +1108,7 @@ func (appKeepers *AppKeepers) SetupHooks() { appKeepers.IncentivesKeeper.SetHooks( incentivestypes.NewMultiIncentiveHooks( - // insert incentive hooks receivers here + // insert incentive hooks receivers here ), ) @@ -1000,7 +1136,7 @@ func (appKeepers *AppKeepers) SetupHooks() { appKeepers.GovKeeper.SetHooks( govtypes.NewMultiGovHooks( - // insert governance hooks receivers here + // insert governance hooks receivers here ), ) } @@ -1052,5 +1188,16 @@ func KVStoreKeys() []string { cosmwasmpooltypes.StoreKey, auctiontypes.StoreKey, smartaccounttypes.StoreKey, + + // stride stores + ratelimittypes.StoreKey, + icacallbackstypes.StoreKey, + icaoracletypes.StoreKey, + stakeibctypes.StoreKey, + recordsmoduletypes.StoreKey, + icqoracletypes.StoreKey, + autopilottypes.StoreKey, + ccvconsumertypes.StoreKey, + claimtypes.StoreKey, } } diff --git a/app/modules.go b/app/modules.go index 0d12d3c371b..c7904780e0c 100644 --- a/app/modules.go +++ b/app/modules.go @@ -10,11 +10,26 @@ import ( consensusparamtypes "github.com/cosmos/cosmos-sdk/x/consensus/types" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" icq "github.com/cosmos/ibc-apps/modules/async-icq/v8" + ratelimit "github.com/cosmos/ibc-apps/modules/rate-limiting/v8" + ratelimittypes "github.com/cosmos/ibc-apps/modules/rate-limiting/v8/types" capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" + ccvconsumer "github.com/cosmos/interchain-security/v6/x/ccv/consumer" + ccvconsumertypes "github.com/cosmos/interchain-security/v6/x/ccv/consumer/types" + "github.com/osmosis-labs/osmosis/v27/x/autopilot" + autopilottypes "github.com/osmosis-labs/osmosis/v27/x/autopilot/types" + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks" + icacallbackstypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" + "github.com/osmosis-labs/osmosis/v27/x/icaoracle" + icaoracletypes "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types" + "github.com/osmosis-labs/osmosis/v27/x/icqoracle" + "github.com/osmosis-labs/osmosis/v27/x/interchainquery" "github.com/osmosis-labs/osmosis/v27/x/market" markettypes "github.com/osmosis-labs/osmosis/v27/x/market/types" "github.com/osmosis-labs/osmosis/v27/x/oracle" oracletypes "github.com/osmosis-labs/osmosis/v27/x/oracle/types" + "github.com/osmosis-labs/osmosis/v27/x/records" + recordsmoduletypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc" "github.com/osmosis-labs/osmosis/v27/x/treasury" treasurytypes "github.com/osmosis-labs/osmosis/v27/x/treasury/types" @@ -82,6 +97,7 @@ import ( appparams "github.com/osmosis-labs/osmosis/v27/app/params" _ "github.com/osmosis-labs/osmosis/v27/client/docs/statik" "github.com/osmosis-labs/osmosis/v27/simulation/simtypes" + claimtypes "github.com/osmosis-labs/osmosis/v27/x/claim/types" concentratedliquidity "github.com/osmosis-labs/osmosis/v27/x/concentrated-liquidity/clmodule" concentratedliquiditytypes "github.com/osmosis-labs/osmosis/v27/x/concentrated-liquidity/types" cwpoolmodule "github.com/osmosis-labs/osmosis/v27/x/cosmwasmpool/module" @@ -92,6 +108,7 @@ import ( gammtypes "github.com/osmosis-labs/osmosis/v27/x/gamm/types" "github.com/osmosis-labs/osmosis/v27/x/ibc-rate-limit/ibcratelimitmodule" ibcratelimittypes "github.com/osmosis-labs/osmosis/v27/x/ibc-rate-limit/types" + icqoracletypes "github.com/osmosis-labs/osmosis/v27/x/icqoracle/types" "github.com/osmosis-labs/osmosis/v27/x/incentives" incentivestypes "github.com/osmosis-labs/osmosis/v27/x/incentives/types" "github.com/osmosis-labs/osmosis/v27/x/lockup" @@ -108,6 +125,7 @@ import ( stablestakingincentivestypes "github.com/osmosis-labs/osmosis/v27/x/stable-staking-incentives/types" "github.com/osmosis-labs/osmosis/v27/x/stablestaking" stablestakingtypes "github.com/osmosis-labs/osmosis/v27/x/stablestaking/types" + stakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" superfluid "github.com/osmosis-labs/osmosis/v27/x/superfluid" superfluidtypes "github.com/osmosis-labs/osmosis/v27/x/superfluid/types" "github.com/osmosis-labs/osmosis/v27/x/tokenfactory" @@ -127,6 +145,7 @@ var moduleAccountPermissions = map[string][]string{ distrtypes.ModuleName: nil, ibchookstypes.ModuleName: nil, icatypes.ModuleName: nil, + claimtypes.ModuleName: nil, icqtypes.ModuleName: nil, minttypes.ModuleName: {authtypes.Minter, authtypes.Burner}, minttypes.DeveloperVestingModuleAcctName: nil, @@ -155,6 +174,9 @@ var moduleAccountPermissions = map[string][]string{ cosmwasmpooltypes.ModuleName: nil, auctiontypes.ModuleName: nil, smartaccounttypes.ModuleName: nil, + stakeibctypes.ModuleName: {authtypes.Minter, authtypes.Burner, authtypes.Staking}, + stakeibctypes.RewardCollectorName: nil, + icqoracletypes.ModuleName: nil, } // appModules return modules to initialize module manager. @@ -227,6 +249,15 @@ func appModules( crisis.NewAppModule(app.CrisisKeeper, skipGenesisInvariants, app.GetSubspace(crisistypes.ModuleName)), auction.NewAppModule(appCodec, *app.AuctionKeeper), smartaccount.NewAppModule(appCodec, *app.SmartAccountKeeper), + ratelimit.NewAppModule(appCodec, *app.RatelimitKeeper), + icacallbacks.NewAppModule(appCodec, *app.IcacallbacksKeeper, app.AccountKeeper, app.BankKeeper), + ccvconsumer.NewAppModule(*app.ConsumerKeeper, app.GetSubspace(ccvconsumertypes.ModuleName)), + icqoracle.NewAppModule(appCodec, *app.ICQOracleKeeper), + interchainquery.NewAppModule(appCodec, *app.InterchainqueryKeeper), + records.NewAppModule(appCodec, *app.RecordsKeeper, app.AccountKeeper, app.BankKeeper), + icaoracle.NewAppModule(appCodec, *app.ICAOracleKeeper), + stakeibc.NewAppModule(appCodec, *app.StakeIbcKeeper, app.AccountKeeper, app.BankKeeper), + autopilot.NewAppModule(appCodec, *app.AutopilotKeeper), } } @@ -326,6 +357,16 @@ func OrderInitGenesis(allModuleNames []string) []string { cosmwasmpooltypes.ModuleName, auctiontypes.ModuleName, stablestakingtypes.ModuleName, + // stride modules + icaoracletypes.ModuleName, + stakeibctypes.ModuleName, + icacallbackstypes.ModuleName, + ratelimittypes.ModuleName, + recordsmoduletypes.ModuleName, + icqoracletypes.ModuleName, + autopilottypes.ModuleName, + claimtypes.ModuleName, + ccvconsumertypes.ModuleName, } } diff --git a/proto/buf.gen.gogo.yaml b/proto/buf.gen.gogo.yaml index 9c8ba0a4b1f..1e35cc88e70 100644 --- a/proto/buf.gen.gogo.yaml +++ b/proto/buf.gen.gogo.yaml @@ -2,7 +2,7 @@ version: v1 plugins: - name: gocosmos out: .. - opt: plugins=grpc,Mgoogle/protobuf/any.proto=github.com/cosmos/cosmos-sdk/codec/types + opt: plugins=grpc,Mgoogle/protobuf/duration.proto=github.com/cosmos/gogoproto/types,Mgoogle/protobuf/struct.proto=github.com/cosmos/gogoproto/types,Mgoogle/protobuf/timestamp.proto=github.com/cosmos/gogoproto/types,Mgoogle/protobuf/wrappers.proto=github.com/cosmos/gogoproto/types,Mgoogle/protobuf/any.proto=github.com/cosmos/cosmos-sdk/codec/types,Mcosmos/orm/v1alpha1/orm.proto=github.com/cosmos/cosmos-sdk/api/cosmos/orm/v1alpha1 - name: grpc-gateway out: .. opt: logtostderr=true,allow_colon_final_segments=true diff --git a/proto/buf.lock b/proto/buf.lock index f802501e00b..3fe4a0522c0 100644 --- a/proto/buf.lock +++ b/proto/buf.lock @@ -4,20 +4,20 @@ deps: - remote: buf.build owner: cosmos repository: cosmos-proto - commit: 1935555c206d4afb9e94615dfd0fad31 - digest: shake256:c74d91a3ac7ae07d579e90eee33abf9b29664047ac8816500cf22c081fec0d72d62c89ce0bebafc1f6fec7aa5315be72606717740ca95007248425102c365377 + commit: 04467658e59e44bbb22fe568206e1f70 + digest: shake256:73a640bd60e0c523b0f8237ff34eab67c45a38b64bbbde1d80224819d272dbf316ac183526bd245f994af6608b025f5130483d0133c5edd385531326b5990466 - remote: buf.build owner: cosmos repository: cosmos-sdk - commit: 954f7b05f38440fc8250134b15adec47 - digest: shake256:2ab4404fd04a7d1d52df0e2d0f2d477a3d83ffd88d876957bf3fedfd702c8e52833d65b3ce1d89a3c5adf2aab512616b0e4f51d8463f07eda9a8a3317ee3ac54 + commit: 5a6ab7bc14314acaa912d5e53aef1c2f + digest: shake256:02c00c73493720055f9b57553a35b5550023a3c1914123b247956288a78fb913aff70e66552777ae14d759467e119079d484af081264a5dd607a94d9fbc8116b - remote: buf.build owner: cosmos repository: gogo-proto - commit: 5e5b9fdd01804356895f8f79a6f1ddc1 - digest: shake256:0b85da49e2e5f9ebc4806eae058e2f56096ff3b1c59d1fb7c190413dd15f45dd456f0b69ced9059341c80795d2b6c943de15b120a9e0308b499e43e4b5fc2952 + commit: 88ef6483f90f478fb938c37dde52ece3 + digest: shake256:89c45df2aa11e0cff97b0d695436713db3d993d76792e9f8dc1ae90e6ab9a9bec55503d48ceedd6b86069ab07d3041b32001b2bfe0227fa725dd515ff381e5ba - remote: buf.build owner: googleapis repository: googleapis - commit: 28151c0d0a1641bf938a7672c500e01d - digest: shake256:49215edf8ef57f7863004539deff8834cfb2195113f0b890dd1f67815d9353e28e668019165b9d872395871eeafcbab3ccfdb2b5f11734d3cca95be9e8d139de + commit: 61b203b9a9164be9a834f58c37be6f62 + digest: shake256:e619113001d6e284ee8a92b1561e5d4ea89a47b28bf0410815cb2fa23914df8be9f1a6a98dcf069f5bc2d829a2cfb1ac614863be45cd4f8a5ad8606c5f200224 diff --git a/proto/buf.yaml b/proto/buf.yaml index 5604b6cfd65..2d0cd773aad 100644 --- a/proto/buf.yaml +++ b/proto/buf.yaml @@ -2,7 +2,7 @@ version: v1 name: buf.build/symphony-labs/symphony deps: - buf.build/cosmos/gogo-proto - - buf.build/cosmos/cosmos-sdk:v0.50.9 + - buf.build/cosmos/cosmos-sdk:v0.50.0 - buf.build/cosmos/cosmos-proto - buf.build/googleapis/googleapis breaking: diff --git a/proto/symphony/autopilot/genesis.proto b/proto/symphony/autopilot/genesis.proto new file mode 100644 index 00000000000..b19ab074c8c --- /dev/null +++ b/proto/symphony/autopilot/genesis.proto @@ -0,0 +1,16 @@ +syntax = "proto3"; +package symphony.autopilot; + +import "gogoproto/gogo.proto"; +import "symphony/autopilot/params.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/autopilot/types"; + +// GenesisState defines the claim module's genesis state. +message GenesisState { + // params defines all the parameters of the module. + Params params = 1 [ + (gogoproto.moretags) = "yaml:\"params\"", + (gogoproto.nullable) = false + ]; +} diff --git a/proto/symphony/autopilot/params.proto b/proto/symphony/autopilot/params.proto new file mode 100644 index 00000000000..6013f9cef1d --- /dev/null +++ b/proto/symphony/autopilot/params.proto @@ -0,0 +1,15 @@ +syntax = "proto3"; +package symphony.autopilot; + +import "gogoproto/gogo.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/autopilot/types"; + +// Params defines the parameters for the module. +// next id: 1 +message Params { + option (gogoproto.goproto_stringer) = false; + // optionally, turn off each module + bool stakeibc_active = 1; + bool claim_active = 2; +} \ No newline at end of file diff --git a/proto/symphony/autopilot/query.proto b/proto/symphony/autopilot/query.proto new file mode 100644 index 00000000000..e3eb9d2f18a --- /dev/null +++ b/proto/symphony/autopilot/query.proto @@ -0,0 +1,25 @@ +syntax = "proto3"; +package symphony.autopilot; + +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "symphony/autopilot/params.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/autopilot/types"; + +// Query defines the gRPC querier service. +service Query { + // Parameters queries the parameters of the module. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/symphony/autopilot/v1beta1/params"; + } +} + +// QueryParamsRequest is request type for the Query/Params RPC method. +message QueryParamsRequest {} + +// QueryParamsResponse is response type for the Query/Params RPC method. +message QueryParamsResponse { + // params holds all the parameters of this module. + Params params = 1 [ (gogoproto.nullable) = false ]; +} diff --git a/proto/symphony/claim/claim.proto b/proto/symphony/claim/claim.proto new file mode 100644 index 00000000000..6080effeb46 --- /dev/null +++ b/proto/symphony/claim/claim.proto @@ -0,0 +1,36 @@ +syntax = "proto3"; +package symphony.claim; + +import "gogoproto/gogo.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/claim/types"; + +enum Action { + option (gogoproto.goproto_enum_prefix) = false; + + ACTION_FREE = 0; + ACTION_LIQUID_STAKE = 1; + ACTION_DELEGATE_STAKE = 2; +} + +// A Claim Records is the metadata of claim data per address +message ClaimRecord { + // airdrop identifier + string airdrop_identifier = 1 + [ (gogoproto.moretags) = "yaml:\"airdrop_identifier\"" ]; + + // address of claim user + string address = 2 [ (gogoproto.moretags) = "yaml:\"address\"" ]; + + // weight that represent the portion from total allocation + string weight = 3 [ + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (gogoproto.moretags) = "yaml:\"weight\"" + ]; + + // true if action is completed + // index of bool in array refers to action enum # + repeated bool action_completed = 4 + [ (gogoproto.moretags) = "yaml:\"action_completed\"" ]; +} \ No newline at end of file diff --git a/proto/symphony/claim/genesis.proto b/proto/symphony/claim/genesis.proto new file mode 100644 index 00000000000..78e3a576da4 --- /dev/null +++ b/proto/symphony/claim/genesis.proto @@ -0,0 +1,23 @@ +syntax = "proto3"; +package symphony.claim; + +import "gogoproto/gogo.proto"; +import "symphony/claim/claim.proto"; +import "symphony/claim/params.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/claim/types"; + +// GenesisState defines the claim module's genesis state. +message GenesisState { + // params defines all the parameters of the module. + Params params = 1 [ + (gogoproto.moretags) = "yaml:\"params\"", + (gogoproto.nullable) = false + ]; + + // list of claim records, one for every airdrop recipient + repeated ClaimRecord claim_records = 2 [ + (gogoproto.moretags) = "yaml:\"claim_records\"", + (gogoproto.nullable) = false + ]; +} diff --git a/proto/symphony/claim/params.proto b/proto/symphony/claim/params.proto new file mode 100644 index 00000000000..b9d6923fd33 --- /dev/null +++ b/proto/symphony/claim/params.proto @@ -0,0 +1,41 @@ +syntax = "proto3"; +package symphony.claim; + +import "gogoproto/gogo.proto"; +import "google/protobuf/duration.proto"; +import "google/protobuf/timestamp.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/claim/types"; + +// Params defines the claim module's parameters. +message Params { repeated Airdrop airdrops = 1; } + +message Airdrop { + string airdrop_identifier = 1 + [ (gogoproto.moretags) = "yaml:\"airdrop_identifier\"" ]; + string chain_id = 7; + // seconds + google.protobuf.Timestamp airdrop_start_time = 2 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = false, + (gogoproto.moretags) = "yaml:\"airdrop_start_time\"" + ]; + // seconds + google.protobuf.Duration airdrop_duration = 3 [ + (gogoproto.nullable) = false, + (gogoproto.stdduration) = true, + (gogoproto.jsontag) = "airdrop_duration,omitempty", + (gogoproto.moretags) = "yaml:\"airdrop_duration\"" + ]; + // denom of claimable asset + string claim_denom = 4; + // airdrop distribution account + string distributor_address = 5; + // ustrd tokens claimed so far in the current period + string claimed_so_far = 6 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + // indicates the airdrop should be claimed via autopilot + bool autopilot_enabled = 8; +} \ No newline at end of file diff --git a/proto/symphony/claim/query.proto b/proto/symphony/claim/query.proto new file mode 100644 index 00000000000..41624426a3d --- /dev/null +++ b/proto/symphony/claim/query.proto @@ -0,0 +1,166 @@ +syntax = "proto3"; +package symphony.claim; + +import "cosmos/base/v1beta1/coin.proto"; +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "google/protobuf/timestamp.proto"; +import "symphony/claim/claim.proto"; +import "symphony/claim/params.proto"; +import "symphony/vesting/vesting.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/claim/types"; + +// Query defines the gRPC querier service. +service Query { + rpc DistributorAccountBalance(QueryDistributorAccountBalanceRequest) + returns (QueryDistributorAccountBalanceResponse) { + option (google.api.http).get = "/symphony/claim/v1beta1/module_account_balance"; + } + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/symphony/claim/params"; + } + rpc ClaimRecord(QueryClaimRecordRequest) returns (QueryClaimRecordResponse) { + option (google.api.http).get = "/symphony/claim/v1beta1/claim_record/{address}"; + } + rpc ClaimableForAction(QueryClaimableForActionRequest) + returns (QueryClaimableForActionResponse) { + option (google.api.http).get = + "/symphony/claim/v1beta1/claimable_for_action/{address}/{action}"; + } + rpc TotalClaimable(QueryTotalClaimableRequest) + returns (QueryTotalClaimableResponse) { + option (google.api.http).get = "/symphony/claim/v1beta1/total_claimable/{address}"; + } + rpc UserVestings(QueryUserVestingsRequest) + returns (QueryUserVestingsResponse) { + option (google.api.http).get = "/symphony/claim/v1beta1/user_vestings/{address}"; + } + rpc ClaimStatus(QueryClaimStatusRequest) returns (QueryClaimStatusResponse) { + option (google.api.http).get = "/symphony/claim/v1beta1/claim_status/{address}"; + } + rpc ClaimMetadata(QueryClaimMetadataRequest) + returns (QueryClaimMetadataResponse) { + option (google.api.http).get = "/symphony/claim/v1beta1/claim_metadata"; + } +} + +message ClaimStatus { + string airdrop_identifier = 1; + bool claimed = 2; +} +message QueryClaimStatusRequest { + string address = 1 [ (gogoproto.moretags) = "yaml:\"address\"" ]; +} +message QueryClaimStatusResponse { + repeated ClaimStatus claim_status = 1 [ + (gogoproto.moretags) = "yaml:\"claim_status\"", + (gogoproto.nullable) = false + ]; +} + +message ClaimMetadata { + string airdrop_identifier = 1; + string current_round = 2; + google.protobuf.Timestamp current_round_start = 3 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = false, + (gogoproto.moretags) = "yaml:\"current_round_start\"" + ]; + google.protobuf.Timestamp current_round_end = 4 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = false, + (gogoproto.moretags) = "yaml:\"current_round_end\"" + ]; +} +message QueryClaimMetadataRequest {} +message QueryClaimMetadataResponse { + repeated ClaimMetadata claim_metadata = 1 [ + (gogoproto.moretags) = "yaml:\"claim_metadata\"", + (gogoproto.nullable) = false + ]; +} + +// QueryParamsRequest is the request type for the Query/Params RPC method. +message QueryDistributorAccountBalanceRequest { + string airdrop_identifier = 1 + [ (gogoproto.moretags) = "yaml:\"airdrop_identifier\"" ]; +} + +// QueryParamsResponse is the response type for the Query/Params RPC method. +message QueryDistributorAccountBalanceResponse { + // params defines the parameters of the module. + repeated cosmos.base.v1beta1.Coin distributor_account_balance = 1 [ + (gogoproto.moretags) = "yaml:\"distributor_account_balance\"", + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +// QueryParamsRequest is the request type for the Query/Params RPC method. +message QueryParamsRequest {} + +// QueryParamsResponse is the response type for the Query/Params RPC method. +message QueryParamsResponse { + // params defines the parameters of the module. + Params params = 1 [ (gogoproto.nullable) = false ]; +} + +message QueryClaimRecordRequest { + string airdrop_identifier = 1 + [ (gogoproto.moretags) = "yaml:\"airdrop_identifier\"" ]; + string address = 2 [ (gogoproto.moretags) = "yaml:\"address\"" ]; +} + +message QueryClaimRecordResponse { + ClaimRecord claim_record = 1 [ + (gogoproto.moretags) = "yaml:\"claim_record\"", + (gogoproto.nullable) = false + ]; +} + +message QueryClaimableForActionRequest { + string airdrop_identifier = 1 + [ (gogoproto.moretags) = "yaml:\"airdrop_identifier\"" ]; + string address = 2 [ (gogoproto.moretags) = "yaml:\"address\"" ]; + Action action = 3 [ (gogoproto.moretags) = "yaml:\"action\"" ]; +} + +message QueryClaimableForActionResponse { + repeated cosmos.base.v1beta1.Coin coins = 1 [ + (gogoproto.moretags) = "yaml:\"coins\"", + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +message QueryTotalClaimableRequest { + string airdrop_identifier = 1 + [ (gogoproto.moretags) = "yaml:\"airdrop_identifier\"" ]; + string address = 2 [ (gogoproto.moretags) = "yaml:\"address\"" ]; + bool include_claimed = 3; +} + +message QueryTotalClaimableResponse { + repeated cosmos.base.v1beta1.Coin coins = 1 [ + (gogoproto.moretags) = "yaml:\"coins\"", + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +message QueryUserVestingsRequest { + string address = 1 [ (gogoproto.moretags) = "yaml:\"address\"" ]; +} + +message QueryUserVestingsResponse { + repeated cosmos.base.v1beta1.Coin spendable_coins = 3 [ + (gogoproto.moretags) = "yaml:\"spendable_coins\"", + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + repeated symphony.vesting.Period periods = 1 [ + (gogoproto.moretags) = "yaml:\"periods\"", + (gogoproto.nullable) = false + ]; +} \ No newline at end of file diff --git a/proto/symphony/claim/tx.proto b/proto/symphony/claim/tx.proto new file mode 100644 index 00000000000..148cfdf997b --- /dev/null +++ b/proto/symphony/claim/tx.proto @@ -0,0 +1,77 @@ +syntax = "proto3"; +package symphony.claim; + +import "amino/amino.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/msg/v1/msg.proto"; +import "gogoproto/gogo.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/claim/types"; + +// Msg defines the Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + rpc SetAirdropAllocations(MsgSetAirdropAllocations) + returns (MsgSetAirdropAllocationsResponse); + rpc ClaimFreeAmount(MsgClaimFreeAmount) returns (MsgClaimFreeAmountResponse); + rpc CreateAirdrop(MsgCreateAirdrop) returns (MsgCreateAirdropResponse); + rpc DeleteAirdrop(MsgDeleteAirdrop) returns (MsgDeleteAirdropResponse); +} + +message MsgSetAirdropAllocations { + option (cosmos.msg.v1.signer) = "allocator"; + option (amino.name) = "claim/MsgSetAirdropAllocations"; + + string allocator = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string airdrop_identifier = 2 + [ (gogoproto.moretags) = "yaml:\"airdrop_identifier\"" ]; + repeated string users = 3; + repeated string weights = 4 [ + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (gogoproto.moretags) = "yaml:\"weights\"" + ]; +} + +message MsgSetAirdropAllocationsResponse {} + +message MsgClaimFreeAmount { + option (cosmos.msg.v1.signer) = "user"; + option (amino.name) = "claim/MsgClaimFreeAmount"; + + string user = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; +} + +message MsgClaimFreeAmountResponse { + repeated cosmos.base.v1beta1.Coin claimed_amount = 3 [ + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +message MsgCreateAirdrop { + option (cosmos.msg.v1.signer) = "distributor"; + option (amino.name) = "claim/MsgCreateAirdrop"; + + string distributor = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string identifier = 2; + string chain_id = 6; + string denom = 5; + uint64 start_time = 3; + uint64 duration = 4; + bool autopilot_enabled = 7; +} + +message MsgCreateAirdropResponse {} + +message MsgDeleteAirdrop { + option (cosmos.msg.v1.signer) = "distributor"; + option (amino.name) = "claim/MsgDeleteAirdrop"; + + string distributor = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string identifier = 2; +} + +message MsgDeleteAirdropResponse {} diff --git a/proto/symphony/icacallbacks/callback_data.proto b/proto/symphony/icacallbacks/callback_data.proto new file mode 100755 index 00000000000..04348fd3e73 --- /dev/null +++ b/proto/symphony/icacallbacks/callback_data.proto @@ -0,0 +1,13 @@ +syntax = "proto3"; +package symphony.icacallbacks; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types"; + +message CallbackData { + string callback_key = 1; + string port_id = 2; + string channel_id = 3; + uint64 sequence = 4; + string callback_id = 5; + bytes callback_args = 6; +} diff --git a/proto/symphony/icacallbacks/genesis.proto b/proto/symphony/icacallbacks/genesis.proto new file mode 100755 index 00000000000..163b1ef952d --- /dev/null +++ b/proto/symphony/icacallbacks/genesis.proto @@ -0,0 +1,15 @@ +syntax = "proto3"; +package symphony.icacallbacks; + +import "gogoproto/gogo.proto"; +import "symphony/icacallbacks/callback_data.proto"; +import "symphony/icacallbacks/params.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types"; + +// GenesisState defines the icacallbacks module's genesis state. +message GenesisState { + Params params = 1 [ (gogoproto.nullable) = false ]; + string port_id = 2; + repeated CallbackData callback_data_list = 3 [ (gogoproto.nullable) = false ]; +} diff --git a/proto/symphony/icacallbacks/packet.proto b/proto/symphony/icacallbacks/packet.proto new file mode 100644 index 00000000000..8974f393353 --- /dev/null +++ b/proto/symphony/icacallbacks/packet.proto @@ -0,0 +1,10 @@ +syntax = "proto3"; +package symphony.icacallbacks; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types"; + +message IcacallbacksPacketData { + oneof packet { NoData no_data = 1; } +} + +message NoData {} diff --git a/proto/symphony/icacallbacks/params.proto b/proto/symphony/icacallbacks/params.proto new file mode 100755 index 00000000000..fb17d98705f --- /dev/null +++ b/proto/symphony/icacallbacks/params.proto @@ -0,0 +1,9 @@ +syntax = "proto3"; +package symphony.icacallbacks; + +import "gogoproto/gogo.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types"; + +// Params defines the parameters for the module. +message Params { option (gogoproto.goproto_stringer) = false; } diff --git a/proto/symphony/icacallbacks/query.proto b/proto/symphony/icacallbacks/query.proto new file mode 100644 index 00000000000..56ed014b27f --- /dev/null +++ b/proto/symphony/icacallbacks/query.proto @@ -0,0 +1,55 @@ +syntax = "proto3"; +package symphony.icacallbacks; + +import "cosmos/base/query/v1beta1/pagination.proto"; +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "symphony/icacallbacks/callback_data.proto"; +import "symphony/icacallbacks/params.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types"; + +// Query defines the gRPC querier service. +service Query { + // Parameters queries the parameters of the module. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/symphony/icacallbacks/v1beta1/params"; + } + // Queries a CallbackData by index. + rpc CallbackData(QueryGetCallbackDataRequest) + returns (QueryGetCallbackDataResponse) { + option (google.api.http).get = + "/symphony/icacallbacks/v1beta1/callback_data/{callback_key}"; + } + + // Queries a list of CallbackData items. + rpc CallbackDataAll(QueryAllCallbackDataRequest) + returns (QueryAllCallbackDataResponse) { + option (google.api.http).get = + "/symphony/icacallbacks/v1beta1/callback_data"; + } +} + +// QueryParamsRequest is request type for the Query/Params RPC method. +message QueryParamsRequest {} + +// QueryParamsResponse is response type for the Query/Params RPC method. +message QueryParamsResponse { + // params holds all the parameters of this module. + Params params = 1 [ (gogoproto.nullable) = false ]; +} + +message QueryGetCallbackDataRequest { string callback_key = 1; } + +message QueryGetCallbackDataResponse { + CallbackData callback_data = 1 [ (gogoproto.nullable) = false ]; +} + +message QueryAllCallbackDataRequest { + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +message QueryAllCallbackDataResponse { + repeated CallbackData callback_data = 1 [ (gogoproto.nullable) = false ]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} diff --git a/proto/symphony/icaoracle/callbacks.proto b/proto/symphony/icaoracle/callbacks.proto new file mode 100644 index 00000000000..0ce23c88d0d --- /dev/null +++ b/proto/symphony/icaoracle/callbacks.proto @@ -0,0 +1,15 @@ +syntax = "proto3"; +package symphony.icaoracle; + +import "symphony/icaoracle/icaoracle.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types"; + +// Callback data for instantiating an oracle +message InstantiateOracleCallback { string oracle_chain_id = 1; } + +// Callback data for updating a value in the oracle +message UpdateOracleCallback { + string oracle_chain_id = 1; + Metric metric = 2; +} \ No newline at end of file diff --git a/proto/symphony/icaoracle/contract.proto b/proto/symphony/icaoracle/contract.proto new file mode 100644 index 00000000000..65f86ef0602 --- /dev/null +++ b/proto/symphony/icaoracle/contract.proto @@ -0,0 +1,23 @@ +syntax = "proto3"; +package symphony.icaoracle; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types"; + +// InstanitateOracleContract is the contract-specific instantiate message +message MsgInstantiateOracleContract { + string admin_address = 1; + string transfer_channel_id = 2; +} + +// ExecuteContractPostMetric is the contract-specific metric update message +message MsgExecuteContractPostMetric { MsgPostMetric post_metric = 1; } + +// Body of PostMetric contract message +message MsgPostMetric { + string key = 1; + string value = 2; + string metric_type = 3; + int64 update_time = 4; + int64 block_height = 5; + string attributes = 6; +} \ No newline at end of file diff --git a/proto/symphony/icaoracle/genesis.proto b/proto/symphony/icaoracle/genesis.proto new file mode 100644 index 00000000000..07c28f2303a --- /dev/null +++ b/proto/symphony/icaoracle/genesis.proto @@ -0,0 +1,28 @@ +syntax = "proto3"; +package symphony.icaoracle; + +import "gogoproto/gogo.proto"; +import "symphony/icaoracle/icaoracle.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types"; + +// Params defines the icaoracle module parameters. +message Params {} + +// GenesisState defines the icaoracle module's genesis state. +message GenesisState { + Params params = 1 [ + (gogoproto.moretags) = "yaml:\"params\"", + (gogoproto.nullable) = false + ]; + + repeated Oracle oracles = 2 [ + (gogoproto.moretags) = "yaml:\"oracles\"", + (gogoproto.nullable) = false + ]; + + repeated Metric metrics = 3 [ + (gogoproto.moretags) = "yaml:\"metrics\"", + (gogoproto.nullable) = false + ]; +} \ No newline at end of file diff --git a/proto/symphony/icaoracle/icaoracle.proto b/proto/symphony/icaoracle/icaoracle.proto new file mode 100644 index 00000000000..4f0eebde062 --- /dev/null +++ b/proto/symphony/icaoracle/icaoracle.proto @@ -0,0 +1,42 @@ +syntax = "proto3"; +package symphony.icaoracle; + +import "gogoproto/gogo.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types"; + +// Oracle structure stores context about the CW oracle sitting a different chain +message Oracle { + string chain_id = 1; + string connection_id = 2; + string channel_id = 3; + string port_id = 4; + string ica_address = 5; + string contract_address = 6; + bool active = 7; +} + +// MetricStatus indicates whether the Metric update ICA has been sent +enum MetricStatus { + METRIC_STATUS_UNSPECIFIED = 0 + [ (gogoproto.enumvalue_customname) = "UNSPECIFIED" ]; + METRIC_STATUS_QUEUED = 1 [ (gogoproto.enumvalue_customname) = "QUEUED" ]; + METRIC_STATUS_IN_PROGRESS = 2 + [ (gogoproto.enumvalue_customname) = "IN_PROGRESS" ]; +} + +// Metric structure stores a generic metric using a key value structure +// along with additional context +message Metric { + string key = 1; + string value = 2; + string metric_type = 3; + int64 update_time = 4; + int64 block_height = 5; + string attributes = 6; + string destination_oracle = 7; + MetricStatus status = 8; +} + +// Attributes associated with a RedemptionRate metric update +message RedemptionRateAttributes { string sttoken_denom = 1; } diff --git a/proto/symphony/icaoracle/query.proto b/proto/symphony/icaoracle/query.proto new file mode 100644 index 00000000000..61ca133d50a --- /dev/null +++ b/proto/symphony/icaoracle/query.proto @@ -0,0 +1,66 @@ +syntax = "proto3"; +package symphony.icaoracle; + +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "symphony/icaoracle/icaoracle.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types"; + +// Query defines the gRPC querier service. +service Query { + // Query a specific oracle + rpc Oracle(QueryOracleRequest) returns (QueryOracleResponse) { + option (google.api.http).get = + "/symphony/icaoracle/v1beta1/oracle/{chain_id}"; + } + + // Query all oracles + rpc AllOracles(QueryAllOraclesRequest) returns (QueryAllOraclesResponse) { + option (google.api.http).get = "/symphony/icaoracle/v1beta1/oracles"; + } + + // Query oracles with active ffilter: + // - /oracles/by_active?active=true + // - /oracles/by_active?active=false + rpc ActiveOracles(QueryActiveOraclesRequest) + returns (QueryActiveOraclesResponse) { + option (google.api.http).get = + "/symphony/icaoracle/v1beta1/oracles/by_active"; + } + + // Query metrics with optional filters + // + // Ex: + // - /metrics + // - /metrics?metric_key=X + // - /metrics?oracle_chain_id=Y + rpc Metrics(QueryMetricsRequest) returns (QueryMetricsResponse) { + option (google.api.http).get = "/symphony/icaoracle/v1beta1/metrics"; + } +} + +// Query's a specific oracle +message QueryOracleRequest { string chain_id = 1; } +message QueryOracleResponse { Oracle oracle = 1; } + +// Query's all oracle's +message QueryAllOraclesRequest {} +message QueryAllOraclesResponse { + repeated Oracle oracles = 1 [ (gogoproto.nullable) = false ]; +} + +// Query's all oracle with a filter for whether they're active +message QueryActiveOraclesRequest { bool active = 1; } +message QueryActiveOraclesResponse { + repeated Oracle oracles = 1 [ (gogoproto.nullable) = false ]; +} + +// Query's metric's with optional filters +message QueryMetricsRequest { + string metric_key = 1; + string oracle_chain_id = 2; +} +message QueryMetricsResponse { + repeated Metric metrics = 1 [ (gogoproto.nullable) = false ]; +} \ No newline at end of file diff --git a/proto/symphony/icaoracle/tx.proto b/proto/symphony/icaoracle/tx.proto new file mode 100644 index 00000000000..9a87dc54680 --- /dev/null +++ b/proto/symphony/icaoracle/tx.proto @@ -0,0 +1,83 @@ +syntax = "proto3"; +package symphony.icaoracle; + +import "amino/amino.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/msg/v1/msg.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/icaoracle/types"; + +// Msg defines the Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // Adds a new oracle given a provided connection + rpc AddOracle(MsgAddOracle) returns (MsgAddOracleResponse); + // Instantiates an Oracle CW contract + rpc InstantiateOracle(MsgInstantiateOracle) + returns (MsgInstantiateOracleResponse); + // Restores the oracle ICA channel after a closure + rpc RestoreOracleICA(MsgRestoreOracleICA) + returns (MsgRestoreOracleICAResponse); + // Toggle's whether an oracle is active and should receive metric updates + rpc ToggleOracle(MsgToggleOracle) returns (MsgToggleOracleResponse); + // Removes an oracle completely + rpc RemoveOracle(MsgRemoveOracle) returns (MsgRemoveOracleResponse); +} + +// Adds a new oracle +message MsgAddOracle { + option (cosmos.msg.v1.signer) = "creator"; + option (amino.name) = "icaoracle/MsgAddOracle"; + + string creator = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string connection_id = 2; +} +message MsgAddOracleResponse {} + +// Instantiates the oracle's CW contract +message MsgInstantiateOracle { + option (cosmos.msg.v1.signer) = "creator"; + option (amino.name) = "icaoracle/MsgInstantiateOracle"; + + string creator = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string oracle_chain_id = 2; + uint64 contract_code_id = 3; + string transfer_channel_on_oracle = 4; +} +message MsgInstantiateOracleResponse {} + +// Restore's a closed ICA channel for a given oracle +message MsgRestoreOracleICA { + option (cosmos.msg.v1.signer) = "creator"; + option (amino.name) = "icaoracle/MsgRestoreOracleICA"; + + string creator = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string oracle_chain_id = 2; +} +message MsgRestoreOracleICAResponse {} + +// Toggle's whether an oracle is active and should receive metric updates +message MsgToggleOracle { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "icaoracle/MsgToggleOracle"; + + // authority is the address that controls the module (defaults to x/gov unless + // overwritten). + string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string oracle_chain_id = 2; + bool active = 3; +} +message MsgToggleOracleResponse {} + +// Removes an oracle completely +message MsgRemoveOracle { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "icaoracle/MsgRemoveOracle"; + + // authority is the address that controls the module (defaults to x/gov unless + // overwritten). + string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string oracle_chain_id = 2; +} +message MsgRemoveOracleResponse {} \ No newline at end of file diff --git a/proto/symphony/icqoracle/genesis.proto b/proto/symphony/icqoracle/genesis.proto new file mode 100644 index 00000000000..403811ee332 --- /dev/null +++ b/proto/symphony/icqoracle/genesis.proto @@ -0,0 +1,16 @@ +syntax = "proto3"; +package symphony.icqoracle; + +import "gogoproto/gogo.proto"; +import "symphony/icqoracle/icqoracle.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/icqoracle/types"; + +// GenesisState defines the icqoracle module's genesis state +message GenesisState { + // Module parameters + Params params = 1 [ (gogoproto.nullable) = false ]; + + // List of token prices + repeated TokenPrice token_prices = 2 [ (gogoproto.nullable) = false ]; +} \ No newline at end of file diff --git a/proto/symphony/icqoracle/icqoracle.proto b/proto/symphony/icqoracle/icqoracle.proto new file mode 100644 index 00000000000..2c6fc23b28b --- /dev/null +++ b/proto/symphony/icqoracle/icqoracle.proto @@ -0,0 +1,66 @@ +syntax = "proto3"; +package symphony.icqoracle; + +import "gogoproto/gogo.proto"; +import "google/protobuf/timestamp.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/icqoracle/types"; + +// TokenPrice stores latest price data for a token +message TokenPrice { + // Base denom on Stride + string base_denom = 1; + // Quote denom on Stride + string quote_denom = 2; + // Base denom on Osmosis + string osmosis_base_denom = 3; + // Quote denom on Osmosis + string osmosis_quote_denom = 4; + // Pool ID on Osmosis + uint64 osmosis_pool_id = 5; + + // Spot price of base_denom denominated in quote_denom + string spot_price = 6 [ + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; + + // Last time a query request was submitted + google.protobuf.Timestamp last_request_time = 7 + [ (gogoproto.stdtime) = true, (gogoproto.nullable) = false ]; + + // Last time a query response was received + google.protobuf.Timestamp last_response_time = 8 + [ (gogoproto.stdtime) = true, (gogoproto.nullable) = false ]; + + // Whether there is a spot price query currently in progress + bool query_in_progress = 9; +} + +// OracleParams stores global oracle parameters +message Params { + // Osmosis chain identifier + string osmosis_chain_id = 1 [ + (gogoproto.moretags) = "yaml:\"osmosis_chain_id\"", + (gogoproto.jsontag) = "osmosis_chain_id" + ]; + + // Osmosis IBC connection identifier + string osmosis_connection_id = 2 [ + (gogoproto.moretags) = "yaml:\"osmosis_connection_id\"", + (gogoproto.jsontag) = "osmosis_connection_id" + ]; + + // Time between price updates + // Also used to timeout icq requests + uint64 update_interval_sec = 3 [ + (gogoproto.moretags) = "yaml:\"update_interval_sec\"", + (gogoproto.jsontag) = "update_interval_sec" + ]; + + // Max time before price is considered stale/expired + uint64 price_expiration_timeout_sec = 4 [ + (gogoproto.moretags) = "yaml:\"price_expiration_timeout_sec\"", + (gogoproto.jsontag) = "price_expiration_timeout_sec" + ]; +} diff --git a/proto/symphony/icqoracle/query.proto b/proto/symphony/icqoracle/query.proto new file mode 100644 index 00000000000..bf7f7dd7b52 --- /dev/null +++ b/proto/symphony/icqoracle/query.proto @@ -0,0 +1,89 @@ +syntax = "proto3"; +package symphony.icqoracle; + +import "cosmos/base/query/v1beta1/pagination.proto"; +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "symphony/icqoracle/icqoracle.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/icqoracle/types"; + +// Query defines the gRPC querier service. +service Query { + // TokenPrice queries the current price for a specific token + rpc TokenPrice(QueryTokenPriceRequest) returns (TokenPriceResponse) { + option (google.api.http).get = "/symphony/icqoracle/v1beta1/price"; + } + + // TokenPrices queries all token prices + rpc TokenPrices(QueryTokenPricesRequest) returns (QueryTokenPricesResponse) { + option (google.api.http).get = "/symphony/icqoracle/v1beta1/prices"; + } + + // Params queries the oracle parameters + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/symphony/icqoracle/v1beta1/params"; + } + + // TokenPriceForQuoteDenom queries the exchange rate between two tokens + rpc TokenPriceForQuoteDenom(QueryTokenPriceForQuoteDenomRequest) + returns (QueryTokenPriceForQuoteDenomResponse) { + option (google.api.http).get = "/symphony/icqoracle/v1beta1/quote_price"; + } +} + +// QueryTokenPriceRequest is the request type for the Query/TokenPrice RPC +// method +message QueryTokenPriceRequest { + string base_denom = 1; + string quote_denom = 2; + uint64 pool_id = 3; +} + +// QueryTokenPricesRequest is the request type for the Query/TokenPrices RPC +// method +message QueryTokenPricesRequest { + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +// TokenPriceResponse adds human readable info on to of TokenPrice +message TokenPriceResponse { + // If IBC token, base denom unwrapped (e.g. ibc/... -> uatom) + string base_denom_unwrapped = 1; + // If IBC token, Quote denom unwrapped (e.g. ibc/... -> uatom) + string quote_denom_unwrapped = 2; + + // The token price object with the remaining price metadata + TokenPrice token_price = 3 [ (gogoproto.nullable) = false ]; +} + +// QueryTokenPricesResponse is the response type for the Query/TokenPrices RPC +// method +message QueryTokenPricesResponse { + repeated TokenPriceResponse token_prices = 1 [ (gogoproto.nullable) = false ]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryParamsRequest is the request type for the Query/Params RPC method +message QueryParamsRequest {} + +// QueryParamsResponse is the response type for the Query/Params RPC method +message QueryParamsResponse { + Params params = 1 [ (gogoproto.nullable) = false ]; +} + +// QueryTokenPriceForQuoteDenomRequest is the request type for the +// Query/TokenPriceForQuoteDenom RPC method +message QueryTokenPriceForQuoteDenomRequest { + string base_denom = 1; + string quote_denom = 2; +} + +// QueryTokenPriceForQuoteDenomResponse is the response type for the +// Query/TokenPriceForQuoteDenom RPC method +message QueryTokenPriceForQuoteDenomResponse { + string price = 1 [ + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; +} diff --git a/proto/symphony/icqoracle/tx.proto b/proto/symphony/icqoracle/tx.proto new file mode 100644 index 00000000000..bc206bec8b5 --- /dev/null +++ b/proto/symphony/icqoracle/tx.proto @@ -0,0 +1,86 @@ +syntax = "proto3"; +package symphony.icqoracle; + +import "amino/amino.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/msg/v1/msg.proto"; +import "gogoproto/gogo.proto"; +import "symphony/icqoracle/icqoracle.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/icqoracle/types"; + +// Msg defines the Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // RegisterTokenPriceQuery registers a new token to track prices for + rpc RegisterTokenPriceQuery(MsgRegisterTokenPriceQuery) + returns (MsgRegisterTokenPriceQueryResponse); + + // RemoveTokenPriceQuery removes a token from price tracking + rpc RemoveTokenPriceQuery(MsgRemoveTokenPriceQuery) + returns (MsgRemoveTokenPriceQueryResponse); + + // UpdateParams defines a governance operation for updating the x/icqoracle + // module parameters. The authority is defined in the keeper. + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); +} + +// MsgRegisterTokenPriceQuery defines the message for adding a new token to +// track prices +message MsgRegisterTokenPriceQuery { + option (cosmos.msg.v1.signer) = "admin"; + option (amino.name) = "icqoracle/MsgRegisterTokenPriceQuery"; + + string admin = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + + // Token denom on Stride + string base_denom = 2; + // Quote denom on Stride + string quote_denom = 3; + // Token denom on Osmosis + string osmosis_base_denom = 4; + // Quote denom on Osmosis + string osmosis_quote_denom = 5; + // Pool ID on Osmosis + uint64 osmosis_pool_id = 6; +} + +message MsgRegisterTokenPriceQueryResponse {} + +// MsgRemoveTokenPriceQuery defines the message for removing a token from price +// tracking +message MsgRemoveTokenPriceQuery { + option (cosmos.msg.v1.signer) = "admin"; + option (amino.name) = "icqoracle/MsgRemoveTokenPriceQuery"; + + string admin = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // Token denom on Stride + string base_denom = 2; + // Quote denom on Stride + string quote_denom = 3; + // Pool ID on Osmosis + uint64 osmosis_pool_id = 4; +} + +message MsgRemoveTokenPriceQueryResponse {} + +// MsgUpdateParams is the Msg/UpdateParams request type. +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "icqoracle/MsgUpdateParams"; + + // authority is the address that controls the module (defaults to x/gov unless + // overwritten). + string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + + // params defines the x/icqoracle parameters to update. + // + // NOTE: All parameters must be supplied. + Params params = 2 + [ (gogoproto.nullable) = false, (amino.dont_omitempty) = true ]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +message MsgUpdateParamsResponse {} \ No newline at end of file diff --git a/proto/symphony/interchainquery/v1/genesis.proto b/proto/symphony/interchainquery/v1/genesis.proto new file mode 100644 index 00000000000..28365953e14 --- /dev/null +++ b/proto/symphony/interchainquery/v1/genesis.proto @@ -0,0 +1,51 @@ +syntax = "proto3"; +package symphony.interchainquery.v1; + +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "google/protobuf/duration.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types"; + +enum TimeoutPolicy { + REJECT_QUERY_RESPONSE = 0; + RETRY_QUERY_REQUEST = 1; + EXECUTE_QUERY_CALLBACK = 2; +} + +message Query { + string id = 1; + string connection_id = 2; + string chain_id = 3; + string query_type = 4; + bytes request_data = 5; + string callback_module = 13; + string callback_id = 8; + bytes callback_data = 12; + TimeoutPolicy timeout_policy = 15; + google.protobuf.Duration timeout_duration = 14 + [ (gogoproto.nullable) = false, (gogoproto.stdduration) = true ]; + uint64 timeout_timestamp = 9; + bool request_sent = 11; + uint64 submission_height = 16; +} + +message DataPoint { + string id = 1; + string remote_height = 2 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + string local_height = 3 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + bytes value = 4 [ (gogoproto.jsontag) = "result,omitempty" ]; +} + +// GenesisState defines the epochs module's genesis state. +message GenesisState { + repeated Query queries = 1 [ (gogoproto.nullable) = false ]; +} \ No newline at end of file diff --git a/proto/symphony/interchainquery/v1/query.proto b/proto/symphony/interchainquery/v1/query.proto new file mode 100644 index 00000000000..2a3b9a31117 --- /dev/null +++ b/proto/symphony/interchainquery/v1/query.proto @@ -0,0 +1,21 @@ +syntax = "proto3"; +package symphony.interchainquery.v1; + +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "symphony/interchainquery/v1/genesis.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types"; + +service QueryService { + rpc PendingQueries(QueryPendingQueriesRequest) + returns (QueryPendingQueriesResponse) { + option (google.api.http).get = + "/symphony/interchainquery/v1beta1/pending_queries"; + } +} + +message QueryPendingQueriesRequest {} +message QueryPendingQueriesResponse { + repeated Query pending_queries = 1 [ (gogoproto.nullable) = false ]; +} diff --git a/proto/symphony/interchainquery/v1/tx.proto b/proto/symphony/interchainquery/v1/tx.proto new file mode 100644 index 00000000000..2caf089c7cc --- /dev/null +++ b/proto/symphony/interchainquery/v1/tx.proto @@ -0,0 +1,47 @@ +syntax = "proto3"; +package symphony.interchainquery.v1; + +import "amino/amino.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/msg/v1/msg.proto"; +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "tendermint/crypto/proof.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types"; + +// Msg defines the interchainquery Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // SubmitQueryResponse defines a method for submit query responses. + rpc SubmitQueryResponse(MsgSubmitQueryResponse) + returns (MsgSubmitQueryResponseResponse) { + option (google.api.http) = { + post : "/symphony/interchainquery/tx/v1beta1/submitquery" + body : "*" + }; + }; +} + +// MsgSubmitQueryResponse represents a message type to fulfil a query request. +message MsgSubmitQueryResponse { + option (cosmos.msg.v1.signer) = "from_address"; + option (amino.name) = "interchainquery/MsgSubmitQueryResponse"; + + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = true; + + string chain_id = 1 [ (gogoproto.moretags) = "yaml:\"chain_id\"" ]; + string query_id = 2 [ (gogoproto.moretags) = "yaml:\"query_id\"" ]; + bytes result = 3 [ (gogoproto.moretags) = "yaml:\"result\"" ]; + tendermint.crypto.ProofOps proof_ops = 4 + [ (gogoproto.moretags) = "yaml:\"proof_ops\"" ]; + int64 height = 5 [ (gogoproto.moretags) = "yaml:\"height\"" ]; + string from_address = 6 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; +} + +// MsgSubmitQueryResponseResponse defines the MsgSubmitQueryResponse response +// type. +message MsgSubmitQueryResponseResponse {} diff --git a/proto/symphony/records/callbacks.proto b/proto/symphony/records/callbacks.proto new file mode 100644 index 00000000000..43225b84ad2 --- /dev/null +++ b/proto/symphony/records/callbacks.proto @@ -0,0 +1,10 @@ +syntax = "proto3"; +package symphony.records; + +import "symphony/records/records.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/records/types"; + +message TransferCallback { uint64 deposit_record_id = 1; } + +message TransferLSMTokenCallback { LSMTokenDeposit deposit = 1; } diff --git a/proto/symphony/records/genesis.proto b/proto/symphony/records/genesis.proto new file mode 100644 index 00000000000..49b7fbeb63b --- /dev/null +++ b/proto/symphony/records/genesis.proto @@ -0,0 +1,24 @@ +syntax = "proto3"; +package symphony.records; + +import "gogoproto/gogo.proto"; +import "symphony/records/params.proto"; +import "symphony/records/records.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/records/types"; + +// GenesisState defines the records module's genesis state. +message GenesisState { + Params params = 1 [ (gogoproto.nullable) = false ]; + string port_id = 2; + repeated UserRedemptionRecord user_redemption_record_list = 3 + [ (gogoproto.nullable) = false ]; + uint64 user_redemption_record_count = 4; + repeated EpochUnbondingRecord epoch_unbonding_record_list = 5 + [ (gogoproto.nullable) = false ]; + repeated DepositRecord deposit_record_list = 7 + [ (gogoproto.nullable) = false ]; + uint64 deposit_record_count = 8; + repeated LSMTokenDeposit lsm_token_deposit_list = 9 + [ (gogoproto.nullable) = false ]; +} diff --git a/proto/symphony/records/params.proto b/proto/symphony/records/params.proto new file mode 100644 index 00000000000..1692152c0a0 --- /dev/null +++ b/proto/symphony/records/params.proto @@ -0,0 +1,7 @@ +syntax = "proto3"; +package symphony.records; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/records/types"; + +// Params defines the parameters for the module. +message Params {} \ No newline at end of file diff --git a/proto/symphony/records/query.proto b/proto/symphony/records/query.proto new file mode 100644 index 00000000000..2317b3b1977 --- /dev/null +++ b/proto/symphony/records/query.proto @@ -0,0 +1,182 @@ +syntax = "proto3"; +package symphony.records; + +import "cosmos/base/query/v1beta1/pagination.proto"; +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "symphony/records/params.proto"; +import "symphony/records/records.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/records/types"; + +// Query defines the gRPC querier service. +service Query { + // Parameters queries the parameters of the module. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/symphony/records/v1beta1/params"; + } + // Queries a UserRedemptionRecord by id. + rpc UserRedemptionRecord(QueryGetUserRedemptionRecordRequest) + returns (QueryGetUserRedemptionRecordResponse) { + option (google.api.http).get = + "/symphony/records/v1beta1/user_redemption_record/{id}"; + } + + // Queries a list of UserRedemptionRecord items. + rpc UserRedemptionRecordAll(QueryAllUserRedemptionRecordRequest) + returns (QueryAllUserRedemptionRecordResponse) { + option (google.api.http).get = + "/symphony/records/v1beta1/user_redemption_record"; + } + + // Queries a list of UserRedemptionRecord items by chainId / userId pair. + rpc UserRedemptionRecordForUser(QueryAllUserRedemptionRecordForUserRequest) + returns (QueryAllUserRedemptionRecordForUserResponse) { + option (google.api.http).get = + "/symphony/records/v1beta1/user_redemption_record_for_user/{chain_id}/{day}/{address}/{limit}"; + } + + // Queries a EpochUnbondingRecord by id. + rpc EpochUnbondingRecord(QueryGetEpochUnbondingRecordRequest) + returns (QueryGetEpochUnbondingRecordResponse) { + option (google.api.http).get = + "/symphony/records/v1beta1/epoch_unbonding_record/{epoch_number}"; + } + + // Queries a list of EpochUnbondingRecord items. + rpc EpochUnbondingRecordAll(QueryAllEpochUnbondingRecordRequest) + returns (QueryAllEpochUnbondingRecordResponse) { + option (google.api.http).get = + "/symphony/records/v1beta1/epoch_unbonding_record"; + } + + // Queries a DepositRecord by id. + rpc DepositRecord(QueryGetDepositRecordRequest) + returns (QueryGetDepositRecordResponse) { + option (google.api.http).get = + "/symphony/records/v1beta1/deposit_record/{id}"; + } + + // Queries a list of DepositRecord items. + rpc DepositRecordAll(QueryAllDepositRecordRequest) + returns (QueryAllDepositRecordResponse) { + option (google.api.http).get = "/symphony/records/v1beta1/deposit_record"; + } + + // Queries a list of DepositRecord items for a given host zone + rpc DepositRecordByHost(QueryDepositRecordByHostRequest) + returns (QueryDepositRecordByHostResponse) { + option (google.api.http).get = "/symphony/records/v1beta1/deposit_record_by_host_zone/{host_zone_id}"; + } + + // Queries the existing LSMTokenDeposits for one specific deposit + rpc LSMDeposit(QueryLSMDepositRequest) returns (QueryLSMDepositResponse) { + option (google.api.http).get = + "/symphony/stakeibc/v1beta1/lsm_deposit/{chain_id}/{denom}"; + } + + // Queries the existing LSMTokenDeposits for all which match filters + // intended use: + // ...stakeibc/lsm_deposits?chain_id=X&validator_address=Y&status=Z + rpc LSMDeposits(QueryLSMDepositsRequest) returns (QueryLSMDepositsResponse) { + option (google.api.http).get = "/symphony/stakeibc/v1beta1/lsm_deposits"; + } +} + +// QueryParamsRequest is request type for the Query/Params RPC method. +message QueryParamsRequest {} + +// QueryParamsResponse is response type for the Query/Params RPC method. +message QueryParamsResponse { + // params holds all the parameters of this module. + Params params = 1 [ (gogoproto.nullable) = false ]; +} + +message QueryGetDepositRecordRequest { uint64 id = 1; } + +message QueryGetDepositRecordResponse { + DepositRecord deposit_record = 1 [ (gogoproto.nullable) = false ]; +} + +message QueryAllDepositRecordRequest { + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +message QueryAllDepositRecordResponse { + repeated DepositRecord deposit_record = 1 [ (gogoproto.nullable) = false ]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +message QueryDepositRecordByHostRequest { string host_zone_id = 1; } + +message QueryDepositRecordByHostResponse { + repeated DepositRecord deposit_record = 1 [ (gogoproto.nullable) = false ]; +} + +message QueryGetUserRedemptionRecordRequest { string id = 1; } + +message QueryGetUserRedemptionRecordResponse { + UserRedemptionRecord user_redemption_record = 1 + [ (gogoproto.nullable) = false ]; +} + +message QueryAllUserRedemptionRecordRequest { + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +message QueryAllUserRedemptionRecordResponse { + repeated UserRedemptionRecord user_redemption_record = 1 + [ (gogoproto.nullable) = false ]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// Query UserRedemptionRecords by chainId / userId pair +message QueryAllUserRedemptionRecordForUserRequest { + string chain_id = 1; + uint64 day = 2; + string address = 3; + uint64 limit = 4; + cosmos.base.query.v1beta1.PageRequest pagination = 5; +} + +message QueryAllUserRedemptionRecordForUserResponse { + repeated UserRedemptionRecord user_redemption_record = 1 + [ (gogoproto.nullable) = false ]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +message QueryGetEpochUnbondingRecordRequest { uint64 epoch_number = 1; } + +message QueryGetEpochUnbondingRecordResponse { + EpochUnbondingRecord epoch_unbonding_record = 1 + [ (gogoproto.nullable) = false ]; +} + +message QueryAllEpochUnbondingRecordRequest { + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +message QueryAllEpochUnbondingRecordResponse { + repeated EpochUnbondingRecord epoch_unbonding_record = 1 + [ (gogoproto.nullable) = false ]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +message QueryLSMDepositRequest { + string chain_id = 1; + string denom = 2; +} + +message QueryLSMDepositResponse { + LSMTokenDeposit deposit = 1 [ (gogoproto.nullable) = false ]; +} + +message QueryLSMDepositsRequest { + string chain_id = 1; + string validator_address = 2; + string status = 3; +} + +message QueryLSMDepositsResponse { + repeated LSMTokenDeposit deposits = 1 [ (gogoproto.nullable) = false ]; +} diff --git a/proto/symphony/records/records.proto b/proto/symphony/records/records.proto new file mode 100644 index 00000000000..69dc0cf0f45 --- /dev/null +++ b/proto/symphony/records/records.proto @@ -0,0 +1,129 @@ +syntax = "proto3"; +package symphony.records; + +import "cosmos/base/v1beta1/coin.proto"; +import "gogoproto/gogo.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/records/types"; + +message UserRedemptionRecord { + string id = 1; // {chain_id}.{epoch}.{receiver} + string receiver = 3; + string native_token_amount = 4 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + string denom = 5; + string host_zone_id = 6; + uint64 epoch_number = 7; + bool claim_is_pending = 8; + reserved 2; + string st_token_amount = 9 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; +} + +message DepositRecord { + uint64 id = 1; + string amount = 2 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + string denom = 3; + string host_zone_id = 4; + enum Status { + // in transfer queue to be sent to the delegation ICA + TRANSFER_QUEUE = 0; + // transfer in progress (IBC packet sent, ack not received) + TRANSFER_IN_PROGRESS = 2; + // in staking queue on delegation ICA + DELEGATION_QUEUE = 1; + // staking in progress (ICA packet sent, ack not received) + DELEGATION_IN_PROGRESS = 3; + } + enum Source { + STRIDE = 0; + WITHDRAWAL_ICA = 1; + } + Status status = 6; + uint64 deposit_epoch_number = 7; + Source source = 8; + uint64 delegation_txs_in_progress = 9; + + reserved 5; +} + +message HostZoneUnbonding { + enum Status { + // tokens bonded on delegate account + UNBONDING_QUEUE = 0; + // unbonding ICA has been submitted + UNBONDING_IN_PROGRESS = 3; + // unbonding ICA failed for at least one batch and need to be retried + UNBONDING_RETRY_QUEUE = 5; + // unbonding completed on delegate account + EXIT_TRANSFER_QUEUE = 1; + // redemption sweep has been submitted + EXIT_TRANSFER_IN_PROGRESS = 4; + // transfer success + CLAIMABLE = 2; + } + string st_token_amount = 1 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + string native_token_amount = 2 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + string st_tokens_to_burn = 8 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + string native_tokens_to_unbond = 9 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + string claimable_native_tokens = 10 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + uint64 undelegation_txs_in_progress = 11; + string denom = 3; + string host_zone_id = 4; + uint64 unbonding_time = 5; + Status status = 6; + repeated string user_redemption_records = 7; +} + +message EpochUnbondingRecord { + uint64 epoch_number = 1; + repeated HostZoneUnbonding host_zone_unbondings = 3; + reserved 2; +} + +message LSMTokenDeposit { + enum Status { + DEPOSIT_PENDING = 0; + TRANSFER_QUEUE = 1; + TRANSFER_IN_PROGRESS = 2; + TRANSFER_FAILED = 3; + DETOKENIZATION_QUEUE = 4; + DETOKENIZATION_IN_PROGRESS = 5; + DETOKENIZATION_FAILED = 6; + } + + string deposit_id = 1; + string chain_id = 2; + string denom = 3; + string ibc_denom = 4; + string staker_address = 5; + string validator_address = 6; + string amount = 7 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + cosmos.base.v1beta1.Coin st_token = 8 [ (gogoproto.nullable) = false ]; + Status status = 9; +} diff --git a/proto/symphony/stakeibc/address_unbonding.proto b/proto/symphony/stakeibc/address_unbonding.proto new file mode 100644 index 00000000000..ebb39a7b107 --- /dev/null +++ b/proto/symphony/stakeibc/address_unbonding.proto @@ -0,0 +1,19 @@ +syntax = "proto3"; +package symphony.stakeibc; + +import "gogoproto/gogo.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types"; + +message AddressUnbonding { + string address = 1; + string receiver = 2; + string unbonding_estimated_time = 3; + string amount = 4 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + string denom = 5; + bool claim_is_pending = 8; + uint64 epoch_number = 9; +} \ No newline at end of file diff --git a/proto/symphony/stakeibc/callbacks.proto b/proto/symphony/stakeibc/callbacks.proto new file mode 100644 index 00000000000..c78e9bfcb3c --- /dev/null +++ b/proto/symphony/stakeibc/callbacks.proto @@ -0,0 +1,102 @@ +syntax = "proto3"; +package symphony.stakeibc; + +import "cosmos/base/v1beta1/coin.proto"; +import "gogoproto/gogo.proto"; +import "symphony/records/records.proto"; +import "symphony/stakeibc/host_zone.proto"; +import "symphony/stakeibc/ica_account.proto"; +import "symphony/stakeibc/validator.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types"; + +message SplitDelegation { + string validator = 1; + string amount = 2 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; +} + +message SplitUndelegation { + string validator = 1; + string native_token_amount = 2 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; +} + +message DelegateCallback { + string host_zone_id = 1; + uint64 deposit_record_id = 2; + repeated SplitDelegation split_delegations = 3; +} + +message ClaimCallback { + string user_redemption_record_id = 1; + string chain_id = 2; + uint64 epoch_number = 3; +} + +message ReinvestCallback { + cosmos.base.v1beta1.Coin reinvest_amount = 1 [ + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coin" + ]; + string host_zone_id = 3; +} + +message UndelegateCallback { + string host_zone_id = 1; + repeated SplitUndelegation split_undelegations = 2; + repeated uint64 epoch_unbonding_record_ids = 3; +} + +message RedemptionCallback { + string host_zone_id = 1; + repeated uint64 epoch_unbonding_record_ids = 2; +} + +message Rebalancing { + string src_validator = 1; + string dst_validator = 2; + string amt = 3 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; +} + +message RebalanceCallback { + string host_zone_id = 1; + repeated Rebalancing rebalancings = 2; +} + +message DetokenizeSharesCallback { records.LSMTokenDeposit deposit = 1; } + +message LSMLiquidStake { + records.LSMTokenDeposit deposit = 1; + HostZone host_zone = 2; + Validator validator = 3; +} + +message ValidatorSharesToTokensQueryCallback { + LSMLiquidStake lsm_liquid_stake = 1; +} + +message DelegatorSharesQueryCallback { + // Validator delegation at the time the query is submitted + string initial_validator_delegation = 1 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; +} + +message CommunityPoolBalanceQueryCallback { + ICAAccountType ica_type = 1; + string denom = 2; +} + +message TradeRouteCallback { + string reward_denom = 1; + string host_denom = 2; +} diff --git a/proto/symphony/stakeibc/epoch_tracker.proto b/proto/symphony/stakeibc/epoch_tracker.proto new file mode 100755 index 00000000000..51fe760de58 --- /dev/null +++ b/proto/symphony/stakeibc/epoch_tracker.proto @@ -0,0 +1,11 @@ +syntax = "proto3"; +package symphony.stakeibc; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types"; + +message EpochTracker { + string epoch_identifier = 1; + uint64 epoch_number = 2; + uint64 next_epoch_start_time = 3; + uint64 duration = 4; +} diff --git a/proto/symphony/stakeibc/genesis.proto b/proto/symphony/stakeibc/genesis.proto new file mode 100644 index 00000000000..c0e1ac18f18 --- /dev/null +++ b/proto/symphony/stakeibc/genesis.proto @@ -0,0 +1,21 @@ +syntax = "proto3"; +package symphony.stakeibc; + +import "gogoproto/gogo.proto"; +import "symphony/stakeibc/epoch_tracker.proto"; +import "symphony/stakeibc/host_zone.proto"; +import "symphony/stakeibc/params.proto"; +import "symphony/stakeibc/trade_route.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types"; + +// GenesisState defines the stakeibc module's genesis state. +message GenesisState { + Params params = 1 [ (gogoproto.nullable) = false ]; + string port_id = 2; + repeated HostZone host_zone_list = 5 [ (gogoproto.nullable) = false ]; + repeated EpochTracker epoch_tracker_list = 10 + [ (gogoproto.nullable) = false ]; + repeated TradeRoute trade_routes = 12 [ (gogoproto.nullable) = false ]; + reserved 3, 4, 6, 9, 11; +} diff --git a/proto/symphony/stakeibc/gov.proto b/proto/symphony/stakeibc/gov.proto new file mode 100644 index 00000000000..44fa6b9cdf2 --- /dev/null +++ b/proto/symphony/stakeibc/gov.proto @@ -0,0 +1,34 @@ +syntax = "proto3"; +package symphony.stakeibc; + +import "amino/amino.proto"; +import "gogoproto/gogo.proto"; +import "symphony/stakeibc/validator.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types"; + +message AddValidatorsProposal { + option (amino.name) = "stakeibc/AddValidatorsProposal"; + option (gogoproto.equal) = true; + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = false; + + string title = 1; + string description = 2; + string host_zone = 3; + repeated Validator validators = 4; + string deposit = 5 [ (gogoproto.moretags) = "yaml:\"deposit\"" ]; +} + +message ToggleLSMProposal { + option (amino.name) = "stakeibc/ToggleLSMProposal"; + option (gogoproto.equal) = true; + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = false; + + string title = 1; + string description = 2; + string host_zone = 3; + bool enabled = 4; + string deposit = 5 [ (gogoproto.moretags) = "yaml:\"deposit\"" ]; +} \ No newline at end of file diff --git a/proto/symphony/stakeibc/host_zone.proto b/proto/symphony/stakeibc/host_zone.proto new file mode 100644 index 00000000000..9a706a00fa4 --- /dev/null +++ b/proto/symphony/stakeibc/host_zone.proto @@ -0,0 +1,140 @@ +syntax = "proto3"; +package symphony.stakeibc; + +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "symphony/stakeibc/validator.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types"; + +// CommunityPoolRebate stores the size of the community pool liquid stake +// (denominated in stTokens) and the rebate rate as a decimal +message CommunityPoolRebate { + // Rebate percentage as a decimal (e.g. 0.2 for 20%) + string rebate_rate = 1 [ + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; + // Number of stTokens received from the community pool liquid stake + string liquid_staked_st_token_amount = 2 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; +} + +// Core data structure to track liquid staking zones +message HostZone { + // Chain ID of the host zone + string chain_id = 1; + // Bech32 prefix of host zone's address + string bech32prefix = 17; + // ConnectionID from Stride to the host zone (ID is on the stride side) + string connection_id = 2; + // Transfer Channel ID from Stride to the host zone (ID is on the stride side) + string transfer_channel_id = 12; + // ibc denom of the host zone's native token on stride + string ibc_denom = 8; + // native denom on host zone + string host_denom = 9; + // The unbonding period in days (e.g. 21) + uint64 unbonding_period = 26; + // List of validators that are delegated to + repeated Validator validators = 3; + // Address that custodies native tokens during a liquid stake + string deposit_address = 18 + [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // ICA Address on the host zone responsible for collecting rewards + string withdrawal_ica_address = 22 + [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // ICA Address on the host zone responsible for commission + string fee_ica_address = 23 + [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // ICA Address on the host zone responsible for staking and unstaking + string delegation_ica_address = 24 + [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // ICA Address that receives unstaked tokens after they've finished unbonding + string redemption_ica_address = 25 + [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // ICA Address that receives tokens from a community pool to liquid stake or + // redeem In the case of a liquid stake, the community pool deposits native + // tokens In the case of a redemption, the community pool deposits stTokens + string community_pool_deposit_ica_address = 30 + [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // ICA Address that distributes tokens back to the community pool during a + // community pool liquid stake or redeem In the case of a liquid stake, the + // return address sends back stTokens In the case of a redemption, the return + // address sends back native tokens + string community_pool_return_ica_address = 31 + [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // Module account on Stride that receives native tokens from the deposit ICA + // and liquid stakes them + string community_pool_stake_holding_address = 32 + [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // Module account on Stride that receives stTokens from the deposit ICA and + // redeems them + string community_pool_redeem_holding_address = 33 + [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // Optional community pool address to send tokens to after a community pool + // liquid stake or redemption If this address is empty, the tokens are sent to + // the main community pool + string community_pool_treasury_address = 35 + [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // The total delegated balance on the host zone + string total_delegations = 13 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + // The redemption rate from the previous epoch + string last_redemption_rate = 10 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; + // The current redemption rate + string redemption_rate = 11 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; + // The min outer redemption rate bound - controlled only be governance + // The min inner bound cannot exceed this bound + string min_redemption_rate = 20 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; + // The max outer redemption rate bound - controlled only be governance + // The max inner bound cannot exceed this bound + string max_redemption_rate = 21 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; + // The min minner redemption rate bound - controlled by the admin + // If the redemption rate exceeds this bound, the host zone is halted + string min_inner_redemption_rate = 28 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; + // The max minner redemption rate bound - controlled by the admin + // If the redemption rate exceeds this bound, the host zone is halted + string max_inner_redemption_rate = 29 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; + // The max number of messages that can be sent in a delegation + // or undelegation ICA tx + uint64 max_messages_per_ica_tx = 36; + // Indicates whether redemptions are allowed through this module + bool redemptions_enabled = 37; + // An optional fee rebate + // If there is no rebate for the host zone, this will be nil + CommunityPoolRebate community_pool_rebate = 34; + // A boolean indicating whether the chain has LSM enabled + bool lsm_liquid_stake_enabled = 27; + // A boolean indicating whether the chain is currently halted + bool halted = 19; + reserved 4, 5, 6, 7, 14, 15, 16; +} diff --git a/proto/symphony/stakeibc/ica_account.proto b/proto/symphony/stakeibc/ica_account.proto new file mode 100644 index 00000000000..e6d6856f3a3 --- /dev/null +++ b/proto/symphony/stakeibc/ica_account.proto @@ -0,0 +1,22 @@ +syntax = "proto3"; +package symphony.stakeibc; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types"; + +enum ICAAccountType { + DELEGATION = 0; + FEE = 1; + WITHDRAWAL = 2; + REDEMPTION = 3; + COMMUNITY_POOL_DEPOSIT = 4; + COMMUNITY_POOL_RETURN = 5; + CONVERTER_UNWIND = 6; + CONVERTER_TRADE = 7; +} + +message ICAAccount { + string chain_id = 1; + ICAAccountType type = 2; + string connection_id = 3; + string address = 4; +} diff --git a/proto/symphony/stakeibc/packet.proto b/proto/symphony/stakeibc/packet.proto new file mode 100644 index 00000000000..27d893e272d --- /dev/null +++ b/proto/symphony/stakeibc/packet.proto @@ -0,0 +1,10 @@ +syntax = "proto3"; +package symphony.stakeibc; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types"; + +message StakeibcPacketData { + oneof packet { NoData no_data = 1; } +} + +message NoData {} diff --git a/proto/symphony/stakeibc/params.proto b/proto/symphony/stakeibc/params.proto new file mode 100755 index 00000000000..4644c3303a2 --- /dev/null +++ b/proto/symphony/stakeibc/params.proto @@ -0,0 +1,32 @@ +syntax = "proto3"; +package symphony.stakeibc; + +import "gogoproto/gogo.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types"; + +// Params defines the parameters for the module. +// next id: 20 +message Params { + option (gogoproto.goproto_stringer) = false; + + // define epoch lengths, in stride_epochs + uint64 rewards_interval = 1; + uint64 delegate_interval = 6; + uint64 deposit_interval = 2; + uint64 redemption_rate_interval = 3; + uint64 stride_commission = 4; + uint64 reinvest_interval = 7; + uint64 ica_timeout_nanos = 9; + uint64 buffer_size = 10; + uint64 ibc_timeout_blocks = 11; + uint64 fee_transfer_timeout_nanos = 12; + uint64 max_stake_ica_calls_per_epoch = 13; + uint64 default_min_redemption_rate_threshold = 14; + uint64 default_max_redemption_rate_threshold = 15; + uint64 ibc_transfer_timeout_nanos = 16; + uint64 validator_slash_query_threshold = 19; + uint64 validator_weight_cap = 20; + + reserved 8, 17, 18; +} \ No newline at end of file diff --git a/proto/symphony/stakeibc/query.proto b/proto/symphony/stakeibc/query.proto new file mode 100644 index 00000000000..072054a324a --- /dev/null +++ b/proto/symphony/stakeibc/query.proto @@ -0,0 +1,161 @@ +syntax = "proto3"; +package symphony.stakeibc; + +import "cosmos/base/query/v1beta1/pagination.proto"; +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "symphony/stakeibc/address_unbonding.proto"; +import "symphony/stakeibc/epoch_tracker.proto"; +import "symphony/stakeibc/host_zone.proto"; +import "symphony/stakeibc/params.proto"; +import "symphony/stakeibc/trade_route.proto"; +import "symphony/stakeibc/validator.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types"; + +// Query defines the gRPC querier service. +service Query { + // Parameters queries the parameters of the module. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/symphony/stakeibc/v1beta1/params"; + } + // Queries a Validator by host zone. + rpc Validators(QueryGetValidatorsRequest) + returns (QueryGetValidatorsResponse) { + option (google.api.http).get = + "/symphony/stakeibc/v1beta1/validators/{chain_id}"; + } + // Queries a HostZone by id. + rpc HostZone(QueryGetHostZoneRequest) returns (QueryGetHostZoneResponse) { + option (google.api.http).get = + "/symphony/stakeibc/v1beta1/host_zone/{chain_id}"; + } + + // Queries a list of HostZone items. + rpc HostZoneAll(QueryAllHostZoneRequest) returns (QueryAllHostZoneResponse) { + option (google.api.http).get = "/symphony/stakeibc/v1beta1/host_zone"; + } + + // Queries a list of ModuleAddress items. + rpc ModuleAddress(QueryModuleAddressRequest) + returns (QueryModuleAddressResponse) { + option (google.api.http).get = + "/symphony/stakeibc/v1beta1/module_address/{name}"; + } + // QueryInterchainAccountFromAddress returns the interchain account for given + // owner address on a given connection pair + rpc InterchainAccountFromAddress(QueryInterchainAccountFromAddressRequest) + returns (QueryInterchainAccountFromAddressResponse); + + // Queries a EpochTracker by index. + rpc EpochTracker(QueryGetEpochTrackerRequest) + returns (QueryGetEpochTrackerResponse) { + option (google.api.http).get = + "/symphony/stakeibc/v1beta1/epoch_tracker/{epoch_identifier}"; + } + + // Queries a list of EpochTracker items. + rpc EpochTrackerAll(QueryAllEpochTrackerRequest) + returns (QueryAllEpochTrackerResponse) { + option (google.api.http).get = "/symphony/stakeibc/v1beta1/epoch_tracker"; + } + + // Queries the next packet sequence for one for a given channel + rpc NextPacketSequence(QueryGetNextPacketSequenceRequest) + returns (QueryGetNextPacketSequenceResponse) { + option (google.api.http).get = + "/symphony/stakeibc/v1beta1/next_packet_sequence/{channel_id}/" + "{port_id}"; + } + + // Queries an address's unbondings + rpc AddressUnbondings(QueryAddressUnbondings) + returns (QueryAddressUnbondingsResponse) { + option (google.api.http).get = + "/symphony/stakeibc/v1beta1/unbondings/{address}"; + } + + // Queries all trade routes + rpc AllTradeRoutes(QueryAllTradeRoutes) + returns (QueryAllTradeRoutesResponse) { + option (google.api.http).get = "/symphony/stakeibc/v1beta1/trade_routes"; + } +} + +// QueryInterchainAccountFromAddressRequest is the request type for the +// Query/InterchainAccountAddress RPC +message QueryInterchainAccountFromAddressRequest { + string owner = 1; + string connection_id = 2 [ (gogoproto.moretags) = "yaml:\"connection_id\"" ]; +} + +// QueryInterchainAccountFromAddressResponse the response type for the +// Query/InterchainAccountAddress RPC +message QueryInterchainAccountFromAddressResponse { + string interchain_account_address = 1 + [ (gogoproto.moretags) = "yaml:\"interchain_account_address\"" ]; +} + +// QueryParamsRequest is request type for the Query/Params RPC method. +message QueryParamsRequest {} + +// QueryParamsResponse is response type for the Query/Params RPC method. +message QueryParamsResponse { + // params holds all the parameters of this module. + Params params = 1 [ (gogoproto.nullable) = false ]; +} + +message QueryGetValidatorsRequest { string chain_id = 1; } + +message QueryGetValidatorsResponse { repeated Validator validators = 1; } + +message QueryGetHostZoneRequest { string chain_id = 1; } + +message QueryGetHostZoneResponse { + HostZone host_zone = 1 [ (gogoproto.nullable) = false ]; +} + +message QueryAllHostZoneRequest { + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +message QueryAllHostZoneResponse { + repeated HostZone host_zone = 1 [ (gogoproto.nullable) = false ]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +message QueryModuleAddressRequest { string name = 1; } + +message QueryModuleAddressResponse { string addr = 1; } + +message QueryGetEpochTrackerRequest { string epoch_identifier = 1; } + +message QueryGetEpochTrackerResponse { + EpochTracker epoch_tracker = 1 [ (gogoproto.nullable) = false ]; +} + +message QueryAllEpochTrackerRequest {} + +message QueryAllEpochTrackerResponse { + repeated EpochTracker epoch_tracker = 1 [ (gogoproto.nullable) = false ]; +} + +message QueryGetNextPacketSequenceRequest { + string channel_id = 1; + string port_id = 2; +} + +message QueryGetNextPacketSequenceResponse { uint64 sequence = 1; } + +message QueryAddressUnbondings { string address = 1; } + +message QueryAddressUnbondingsResponse { + repeated AddressUnbonding address_unbondings = 1 + [ (gogoproto.nullable) = false ]; +} + +message QueryAllTradeRoutes {}; + +message QueryAllTradeRoutesResponse { + repeated TradeRoute trade_routes = 1 [ (gogoproto.nullable) = false ]; +} diff --git a/proto/symphony/stakeibc/trade_route.proto b/proto/symphony/stakeibc/trade_route.proto new file mode 100644 index 00000000000..3b80aa5a9ea --- /dev/null +++ b/proto/symphony/stakeibc/trade_route.proto @@ -0,0 +1,106 @@ +syntax = "proto3"; +package symphony.stakeibc; + +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "symphony/stakeibc/ica_account.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types"; + +// Deprecated, this configuration is no longer needed since swaps +// are executed off-chain via authz +// +// Stores pool information needed to execute the swap along a trade route +message TradeConfig { + option deprecated = true; + + // Currently Osmosis is the only trade chain so this is an osmosis pool id + uint64 pool_id = 1; + + // Spot price in the pool to convert the reward denom to the host denom + // output_tokens = swap_price * input tokens + // This value may be slightly stale as it is updated by an ICQ + string swap_price = 2 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; + // unix time in seconds that the price was last updated + uint64 price_update_timestamp = 3; + + // Threshold defining the percentage of tokens that could be lost in the trade + // This captures both the loss from slippage and from a stale price on stride + // 0.05 means the output from the trade can be no less than a 5% deviation + // from the current value + string max_allowed_swap_loss_rate = 4 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; + + // min and max set boundaries of reward denom on trade chain we will swap + // min also decides when reward token transfers are worth it (transfer fees) + string min_swap_amount = 5 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + string max_swap_amount = 6 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; +} + +// TradeRoute represents a round trip including info on transfer and how to do +// the swap. It makes the assumption that the reward token is always foreign to +// the host so therefore the first two hops are to unwind the ibc denom enroute +// to the trade chain and the last hop is the return so funds start/end in the +// withdrawl ICA on hostZone +// The structure is key'd on reward denom and host denom in their native forms +// (i.e. reward_denom_on_reward_zone and host_denom_on_host_zone) +message TradeRoute { + // ibc denom for the reward on the host zone + string reward_denom_on_host_zone = 1; + // should be the native denom for the reward chain + string reward_denom_on_reward_zone = 2; + // ibc denom of the reward on the trade chain, input to the swap + string reward_denom_on_trade_zone = 3; + // ibc of the host denom on the trade chain, output from the swap + string host_denom_on_trade_zone = 4; + // should be the same as the native host denom on the host chain + string host_denom_on_host_zone = 5; + + // ICAAccount on the host zone with the reward tokens + // This is the same as the host zone withdrawal ICA account + ICAAccount host_account = 6 [ (gogoproto.nullable) = false ]; + // ICAAccount on the reward zone that is acts as the intermediate + // receiver of the transfer from host zone to trade zone + ICAAccount reward_account = 7 [ (gogoproto.nullable) = false ]; + // ICAAccount responsible for executing the swap of reward + // tokens for host tokens + ICAAccount trade_account = 8 [ (gogoproto.nullable) = false ]; + + // Channel responsible for the transfer of reward tokens from the host + // zone to the reward zone. This is the channel ID on the host zone side + string host_to_reward_channel_id = 9; + // Channel responsible for the transfer of reward tokens from the reward + // zone to the trade zone. This is the channel ID on the reward zone side + string reward_to_trade_channel_id = 10; + // Channel responsible for the transfer of host tokens from the trade + // zone, back to the host zone. This is the channel ID on the trade zone side + string trade_to_host_channel_id = 11; + + // Minimum amount of reward token that must be accumulated before + // the tokens are transferred to the trade ICA + string min_transfer_amount = 13 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + + // Deprecated, the trades are now executed off-chain via authz + // so the trade configuration is no longer needed + // + // specifies the configuration needed to execute the swap + // such as pool_id, slippage, min trade amount, etc. + TradeConfig trade_config = 12 + [ deprecated = true, (gogoproto.nullable) = false ]; +} diff --git a/proto/symphony/stakeibc/tx.proto b/proto/symphony/stakeibc/tx.proto new file mode 100644 index 00000000000..644b627b92c --- /dev/null +++ b/proto/symphony/stakeibc/tx.proto @@ -0,0 +1,481 @@ +syntax = "proto3"; +package symphony.stakeibc; + +import "amino/amino.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/msg/v1/msg.proto"; +import "gogoproto/gogo.proto"; +import "symphony/stakeibc/validator.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types"; + +// Msg defines the Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + rpc LiquidStake(MsgLiquidStake) returns (MsgLiquidStakeResponse); + rpc LSMLiquidStake(MsgLSMLiquidStake) returns (MsgLSMLiquidStakeResponse); + rpc RedeemStake(MsgRedeemStake) returns (MsgRedeemStakeResponse); + rpc RegisterHostZone(MsgRegisterHostZone) + returns (MsgRegisterHostZoneResponse); + rpc ClaimUndelegatedTokens(MsgClaimUndelegatedTokens) + returns (MsgClaimUndelegatedTokensResponse); + rpc RebalanceValidators(MsgRebalanceValidators) + returns (MsgRebalanceValidatorsResponse); + rpc AddValidators(MsgAddValidators) returns (MsgAddValidatorsResponse); + rpc ChangeValidatorWeight(MsgChangeValidatorWeights) + returns (MsgChangeValidatorWeightsResponse); + rpc DeleteValidator(MsgDeleteValidator) returns (MsgDeleteValidatorResponse); + rpc RestoreInterchainAccount(MsgRestoreInterchainAccount) + returns (MsgRestoreInterchainAccountResponse); + rpc CloseDelegationChannel(MsgCloseDelegationChannel) + returns (MsgCloseDelegationChannelResponse); + rpc UpdateValidatorSharesExchRate(MsgUpdateValidatorSharesExchRate) + returns (MsgUpdateValidatorSharesExchRateResponse); + rpc CalibrateDelegation(MsgCalibrateDelegation) + returns (MsgCalibrateDelegationResponse); + rpc ClearBalance(MsgClearBalance) returns (MsgClearBalanceResponse); + rpc UpdateInnerRedemptionRateBounds(MsgUpdateInnerRedemptionRateBounds) + returns (MsgUpdateInnerRedemptionRateBoundsResponse); + rpc ResumeHostZone(MsgResumeHostZone) returns (MsgResumeHostZoneResponse); + rpc CreateTradeRoute(MsgCreateTradeRoute) + returns (MsgCreateTradeRouteResponse); + rpc DeleteTradeRoute(MsgDeleteTradeRoute) + returns (MsgDeleteTradeRouteResponse); + rpc UpdateTradeRoute(MsgUpdateTradeRoute) + returns (MsgUpdateTradeRouteResponse); + rpc SetCommunityPoolRebate(MsgSetCommunityPoolRebate) + returns (MsgSetCommunityPoolRebateResponse); + rpc ToggleTradeController(MsgToggleTradeController) + returns (MsgToggleTradeControllerResponse); + rpc UpdateHostZoneParams(MsgUpdateHostZoneParams) + returns (MsgUpdateHostZoneParamsResponse); +} + +message MsgUpdateInnerRedemptionRateBounds { + option (cosmos.msg.v1.signer) = "creator"; + option (amino.name) = "stakeibc/MsgUpdateRedemptionRateBounds"; + + string creator = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string chain_id = 2; + string min_inner_redemption_rate = 3 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; + string max_inner_redemption_rate = 4 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; +} + +message MsgUpdateInnerRedemptionRateBoundsResponse {} + +message MsgLiquidStake { + option (cosmos.msg.v1.signer) = "creator"; + option (amino.name) = "stakeibc/MsgLiquidStake"; + + string creator = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string amount = 2 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + string host_denom = 3; +} +message MsgLiquidStakeResponse { + cosmos.base.v1beta1.Coin st_token = 1 [ + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +message MsgLSMLiquidStake { + option (cosmos.msg.v1.signer) = "creator"; + option (amino.name) = "stakeibc/MsgLSMLiquidStake"; + + string creator = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string amount = 2 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + string lsm_token_ibc_denom = 3; +} +message MsgLSMLiquidStakeResponse { bool transaction_complete = 1; } + +message MsgClearBalance { + option (cosmos.msg.v1.signer) = "creator"; + option (amino.name) = "stakeibc/MsgClearBalance"; + + string creator = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string chain_id = 2; + string amount = 3 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + string channel = 4; +} +message MsgClearBalanceResponse {} + +message MsgRedeemStake { + option (cosmos.msg.v1.signer) = "creator"; + option (amino.name) = "stakeibc/MsgRedeemStake"; + + string creator = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string amount = 2 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + string host_zone = 3; + string receiver = 4 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; +} +message MsgRedeemStakeResponse {} + +// next: 15 +message MsgRegisterHostZone { + option (cosmos.msg.v1.signer) = "creator"; + option (amino.name) = "stakeibc/MsgRegisterHostZone"; + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string connection_id = 2 [ (gogoproto.moretags) = "yaml:\"connection_id\"" ]; + string bech32prefix = 12; + string host_denom = 4 [ (gogoproto.moretags) = "yaml:\"host_denom\"" ]; + string ibc_denom = 5 [ (gogoproto.moretags) = "yaml:\"ibc_denom\"" ]; + string creator = 6 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string transfer_channel_id = 10 + [ (gogoproto.moretags) = "yaml:\"transfer_channel_id\"" ]; + uint64 unbonding_period = 11 + [ (gogoproto.moretags) = "yaml:\"unbonding_period\"" ]; + string min_redemption_rate = 13 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; + string max_redemption_rate = 14 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; + bool lsm_liquid_stake_enabled = 15; + string community_pool_treasury_address = 16; + uint64 max_messages_per_ica_tx = 17; +} +message MsgRegisterHostZoneResponse {} + +message MsgClaimUndelegatedTokens { + option (cosmos.msg.v1.signer) = "creator"; + option (amino.name) = "stakeibc/MsgClaimUndelegatedTokens"; + + string creator = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // UserUnbondingRecords are keyed on {chain_id}.{epoch}.{receiver} + string host_zone_id = 2; + uint64 epoch = 3; + string receiver = 5; + reserved 4; +} +message MsgClaimUndelegatedTokensResponse {} + +message MsgRebalanceValidators { + option (cosmos.msg.v1.signer) = "creator"; + option (amino.name) = "stakeibc/MsgRebalanceValidators"; + + string creator = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string host_zone = 2; + uint64 num_rebalance = 3; +} +message MsgRebalanceValidatorsResponse {} + +message MsgAddValidators { + option (cosmos.msg.v1.signer) = "creator"; + option (amino.name) = "stakeibc/MsgAddValidators"; + + string creator = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string host_zone = 2; + repeated Validator validators = 3; +} +message MsgAddValidatorsResponse {} + +message ValidatorWeight { + string address = 1 + [ (cosmos_proto.scalar) = "cosmos.ValidatorAddressString" ]; + uint64 weight = 2; +} +message MsgChangeValidatorWeights { + option (cosmos.msg.v1.signer) = "creator"; + option (amino.name) = "stakeibc/MsgChangeValidatorWeights"; + + string creator = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string host_zone = 2; + repeated ValidatorWeight validator_weights = 3; +} +message MsgChangeValidatorWeightsResponse {} + +message MsgDeleteValidator { + option (cosmos.msg.v1.signer) = "creator"; + option (amino.name) = "stakeibc/MsgDeleteValidator"; + + string creator = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string host_zone = 2; + string val_addr = 3 + [ (cosmos_proto.scalar) = "cosmos.ValidatorAddressString" ]; +} +message MsgDeleteValidatorResponse {} + +message MsgRestoreInterchainAccount { + option (cosmos.msg.v1.signer) = "creator"; + option (amino.name) = "stakeibc/MsgRestoreInterchainAcco"; + + string creator = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string chain_id = 2; + string connection_id = 3; + string account_owner = 4; +} +message MsgRestoreInterchainAccountResponse {} + +message MsgCloseDelegationChannel { + option (cosmos.msg.v1.signer) = "creator"; + option (amino.name) = "stakeibc/MsgCloseDelegationChanne"; + + string creator = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string chain_id = 2; +} +message MsgCloseDelegationChannelResponse {} + +message MsgUpdateValidatorSharesExchRate { + option (cosmos.msg.v1.signer) = "creator"; + option (amino.name) = "stakeibc/MsgUpdateValSharesExchRate"; + + string creator = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string chain_id = 2; + string valoper = 3 + [ (cosmos_proto.scalar) = "cosmos.ValidatorAddressString" ]; +} +message MsgUpdateValidatorSharesExchRateResponse {} + +message MsgCalibrateDelegation { + option (cosmos.msg.v1.signer) = "creator"; + option (amino.name) = "stakeibc/MsgCalibrateDelegation"; + + string creator = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string chain_id = 2; + string valoper = 3 + [ (cosmos_proto.scalar) = "cosmos.ValidatorAddressString" ]; +} +message MsgCalibrateDelegationResponse {} + +message MsgResumeHostZone { + option (cosmos.msg.v1.signer) = "creator"; + option (amino.name) = "stakeibc/MsgResumeHostZone"; + + string creator = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + string chain_id = 2; +} +message MsgResumeHostZoneResponse {} + +// Creates a new trade route +message MsgCreateTradeRoute { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "stakeibc/MsgCreateTradeRoute"; + + // authority is the address that controls the module (defaults to x/gov unless + // overwritten). + string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + + // The chain ID of the host zone + string host_chain_id = 2; + + // Connection IDs between stride and the other zones + string stride_to_reward_connection_id = 3; + string stride_to_trade_connection_id = 4; + + // Transfer channels between the host, reward, and trade zones + string host_to_reward_transfer_channel_id = 5; + string reward_to_trade_transfer_channel_id = 6; + string trade_to_host_transfer_channel_id = 7; + + // ibc denom for the reward token on the host zone (e.g. ibc/usdc on dYdX) + string reward_denom_on_host = 8; + // native denom of reward token on the reward zone (e.g. usdc on Noble) + string reward_denom_on_reward = 9; + // ibc denom of the reward token on the trade zone (e.g. ibc/usdc on Osmosis) + string reward_denom_on_trade = 10; + // ibc denom of the host's token on the trade zone (e.g. ibc/dydx on Osmosis) + string host_denom_on_trade = 11; + // the host zone's native denom (e.g. dydx on dYdX) + string host_denom_on_host = 12; + + // Deprecated, the trades are now executed off-chain via authz + // + // The osmosis pool ID + uint64 pool_id = 13 [ deprecated = true ]; + + // Deprecated, the trades are now executed off-chain via authz + // + // Threshold defining the percentage of tokens that could be lost in the trade + // This captures both the loss from slippage and from a stale price on stride + // "0.05" means the output from the trade can be no less than a 5% deviation + // from the current value + string max_allowed_swap_loss_rate = 14 [ deprecated = true ]; + + // Deprecated, the trades are now executed off-chain via authz + // + // minimum amount of reward tokens to initate a swap + // if not provided, defaults to 0 + string min_swap_amount = 15 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + // Deprecated, the trades are now executed off-chain via authz + // + // maximum amount of reward tokens in a single swap + // if not provided, defaults to 10e24 + string max_swap_amount = 16 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + + // Minimum amount of reward token that must be accumulated before + // the tokens are transferred to the trade ICA + string min_transfer_amount = 17 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; +} +message MsgCreateTradeRouteResponse {} + +// Deletes a trade route +message MsgDeleteTradeRoute { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "stakeibc/MsgDeleteTradeRoute"; + + // authority is the address that controls the module (defaults to x/gov unless + // overwritten). + string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + + // The reward denom of the route in it's native form (e.g. usdc) + string reward_denom = 2; + // The host zone's denom in it's native form (e.g. dydx) + string host_denom = 3; +} +message MsgDeleteTradeRouteResponse {} + +// Updates the config of a trade route +message MsgUpdateTradeRoute { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "stakeibc/MsgUpdateTradeRoute"; + + // authority is the address that controls the module (defaults to x/gov unless + // overwritten). + string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + + // The reward denom of the route in it's native form (e.g. usdc) + string reward_denom = 2; + // The host zone's denom in it's native form (e.g. dydx) + string host_denom = 3; + + // Deprecated, the trades are now executed off-chain via authz + // + // The osmosis pool ID + uint64 pool_id = 4 [ deprecated = true ]; + + // Deprecated, the trades are now executed off-chain via authz + // + // Threshold defining the percentage of tokens that could be lost in the trade + // This captures both the loss from slippage and from a stale price on stride + // "0.05" means the output from the trade can be no less than a 5% deviation + // from the current value + string max_allowed_swap_loss_rate = 5 [ deprecated = true ]; + + // Deprecated, the trades are now executed off-chain via authz + // + // minimum amount of reward tokens to initate a swap + // if not provided, defaults to 0 + string min_swap_amount = 6 [ + deprecated = true, + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + // Deprecated, the trades are now executed off-chain via authz + // + // maximum amount of reward tokens in a single swap + // if not provided, defaults to 10e24 + string max_swap_amount = 7 [ + deprecated = true, + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + + // Minimum amount of reward token that must be accumulated before + // the tokens are transferred to the trade ICA + string min_transfer_amount = 17 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; +} +message MsgUpdateTradeRouteResponse {} + +// Registers or updates a community pool rebate by specifying the amount liquid +// staked +message MsgSetCommunityPoolRebate { + option (cosmos.msg.v1.signer) = "creator"; + option (amino.name) = "stakeibc/MsgSetCommunityPoolRebate"; + + // Message signer (admin only) + string creator = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // Chain id of the chain whose community pool has a liquid staking rebate + // arrangement with stride + string chain_id = 2; + // Rebate percentage represented as a decimal (e.g. 0.2 for 20%) + string rebate_rate = 3 [ + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; + // Number of stTokens recieved by the community pool after liquid staking + string liquid_staked_st_token_amount = 4 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; +} +message MsgSetCommunityPoolRebateResponse {} + +enum AuthzPermissionChange { + // Grant the address trade permissions + GRANT = 0; + // Revoke trade permissions from the address + REVOKE = 1; +} + +// Grants or revokes trade permissions to a given address via authz +message MsgToggleTradeController { + option (cosmos.msg.v1.signer) = "creator"; + option (amino.name) = "stakeibc/MsgToggleTradeController"; + + // Message signer (admin only) + string creator = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // Chain ID of the trade account + string chain_id = 2; + // Permission change (either grant or revoke) + AuthzPermissionChange permission_change = 3; + // Address of trade operator + string address = 4; + // Option to grant/revoke the legacy osmosis swap message + bool legacy = 5; +} +message MsgToggleTradeControllerResponse {} + +// Updates host zone params +message MsgUpdateHostZoneParams { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "stakeibc/MsgUpdateHostZoneParams"; + + // authority is the address that controls the module (defaults to x/gov unless + // overwritten). + string authority = 1 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + // Chain ID of the host zone + string chain_id = 2; + // Max messages that can be sent in a single ICA message + uint64 max_messages_per_ica_tx = 3; +} +message MsgUpdateHostZoneParamsResponse {} \ No newline at end of file diff --git a/proto/symphony/stakeibc/validator.proto b/proto/symphony/stakeibc/validator.proto new file mode 100644 index 00000000000..d9732c79128 --- /dev/null +++ b/proto/symphony/stakeibc/validator.proto @@ -0,0 +1,31 @@ +syntax = "proto3"; +package symphony.stakeibc; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +option go_package = "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types"; + +message Validator { + string name = 1; + string address = 2 [ (cosmos_proto.scalar) = "cosmos.AddressString" ]; + uint64 weight = 6; + string delegation = 5 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + string slash_query_progress_tracker = 9 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + string slash_query_checkpoint = 12 [ + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + string shares_to_tokens_rate = 10 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; + int64 delegation_changes_in_progress = 11; + bool slash_query_in_progress = 13; + reserved 3, 4, 7, 8; +} diff --git a/proto/symphony/vesting/vesting.proto b/proto/symphony/vesting/vesting.proto new file mode 100644 index 00000000000..2e622c53819 --- /dev/null +++ b/proto/symphony/vesting/vesting.proto @@ -0,0 +1,63 @@ +syntax = "proto3"; +package symphony.vesting; + +import "amino/amino.proto"; +import "cosmos/auth/v1beta1/auth.proto"; + +import "cosmos/base/v1beta1/coin.proto"; +import "gogoproto/gogo.proto"; + +option go_package = "github.com/osmosis-labs/osmosis/v27/x/claim/vesting/types"; + +// BaseVestingAccount implements the VestingAccount interface. It contains all +// the necessary fields needed for any vesting account implementation. +message BaseVestingAccount { + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = false; + + cosmos.auth.v1beta1.BaseAccount base_account = 1 [ (gogoproto.embed) = true ]; + repeated cosmos.base.v1beta1.Coin original_vesting = 2 [ + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", + (gogoproto.moretags) = "yaml:\"original_vesting\"" + ]; + repeated cosmos.base.v1beta1.Coin delegated_free = 3 [ + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", + (gogoproto.moretags) = "yaml:\"delegated_free\"" + ]; + repeated cosmos.base.v1beta1.Coin delegated_vesting = 4 [ + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", + (gogoproto.moretags) = "yaml:\"delegated_vesting\"" + ]; + int64 end_time = 5 [ (gogoproto.moretags) = "yaml:\"end_time\"" ]; +} + +// Period defines a length of time and amount of coins that will vest. +message Period { + option (gogoproto.goproto_stringer) = false; + + int64 start_time = 1; + int64 length = 2; + repeated cosmos.base.v1beta1.Coin amount = 3 [ + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + int32 action_type = 4; +} + +// StridePeriodicVestingAccount implements the VestingAccount interface. It +// periodically vests by unlocking coins during each specified period. +message StridePeriodicVestingAccount { + option (amino.name) = "cosmos-sdk/SymphonyPeriodicVestingAccount"; + + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = false; + + BaseVestingAccount base_vesting_account = 1 [ (gogoproto.embed) = true ]; + repeated Period vesting_periods = 3 [ + (gogoproto.moretags) = "yaml:\"vesting_periods\"", + (gogoproto.nullable) = false + ]; +} diff --git a/x/autopilot/README.md b/x/autopilot/README.md new file mode 100644 index 00000000000..1c4484b5b4d --- /dev/null +++ b/x/autopilot/README.md @@ -0,0 +1,69 @@ +--- +title: "Autopilot" +excerpt: "" +category: 6392913957c533007128548e +--- + +# The Autopilot Module + +The `Autopilot` module is to route the ibc transfer packets so that it can reduce the steps that users take to use Stride. + +With current implementation of Autopilot module, it supports: + +- Liquid staking as part of IBC transfer if it has functional part of LiquidStaking + +Note: This will support more functions that can reduce number of users' operations. + +## Memo + +### Format + +```json +{ + "autopilot": { + "receiver": "strideXXX", + "{module_name}": { "{additiional_field}": "{value}" } + } +} +``` + +### Example (1-Click Liquid Stake) + +```json +{ + "autopilot": { + "receiver": "strideXXX", + "stakeibc": { + "action": "LiquidStake" + } + } +} +``` + +### Example (Update Airdrop Address) + +```json +{ + "autopilot": { + "receiver": "strideXXX", + "claim": {} + } +} +``` + +### A Note on Parsing + +Since older versions of IBC do not have a `Memo` field, they must pass the routing information in the `Receiver` attribute of the IBC packet. To make autopilot backwards compatible with all older IBC versions, the receiver address must be specified in the JSON string. Before passing the packet down the stack to the transfer module, the address in the JSON string will replace the `Receiver` field in the packet data, regardless of the IBC version. + +The module also enforces a maximum length for both the `Memo` and `Receiver` fields of 4000 and 100 characters respectively. + +## Params + +``` +StakeibcActive (default bool = false) +ClaimActive (default bool = false) +``` + +## Keeper functions + +- `TryLiquidStaking()`: Try liquid staking on IBC transfer packet diff --git a/x/autopilot/client/cli/query.go b/x/autopilot/client/cli/query.go new file mode 100644 index 00000000000..dbb93038696 --- /dev/null +++ b/x/autopilot/client/cli/query.go @@ -0,0 +1,52 @@ +package cli + +import ( + "context" + "fmt" + + "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" + + "github.com/osmosis-labs/osmosis/v27/x/autopilot/types" + + "github.com/cosmos/cosmos-sdk/client/flags" +) + +// GetQueryCmd returns the cli query commands for this module +func GetQueryCmd(queryRoute string) *cobra.Command { + cmd := &cobra.Command{ + Use: types.ModuleName, + Short: fmt.Sprintf("Querying commands for the %s module", types.ModuleName), + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + cmd.AddCommand(CmdQueryParams()) + return cmd +} + +func CmdQueryParams() *cobra.Command { + cmd := &cobra.Command{ + Use: "params", + Short: "shows the parameters of the module", + Args: cobra.NoArgs, + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx := client.GetClientContextFromCmd(cmd) + + queryClient := types.NewQueryClient(clientCtx) + + res, err := queryClient.Params(context.Background(), &types.QueryParamsRequest{}) + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} diff --git a/x/autopilot/keeper/airdrop.go b/x/autopilot/keeper/airdrop.go new file mode 100644 index 00000000000..2b656751279 --- /dev/null +++ b/x/autopilot/keeper/airdrop.go @@ -0,0 +1,61 @@ +package keeper + +import ( + "errors" + "fmt" + + errorsmod "cosmossdk.io/errors" + + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + "github.com/osmosis-labs/osmosis/v27/utils" + claimtypes "github.com/osmosis-labs/osmosis/v27/x/claim/types" + stakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// Attempt to link a host address with a stride address to enable airdrop claims +func (k Keeper) TryUpdateAirdropClaim( + ctx sdk.Context, + packet channeltypes.Packet, + transferMetadata transfertypes.FungibleTokenPacketData, +) error { + params := k.GetParams(ctx) + if !params.ClaimActive { + return errors.New("packet forwarding param is not active") + } + + // verify packet originated on a registered host zone + if packet.GetDestPort() != transfertypes.PortID { + return errors.New("airdrop claim packet should be sent along a transfer channel") + } + hostZone, found := k.stakeibcKeeper.GetHostZoneFromTransferChannelID(ctx, packet.GetDestChannel()) + if !found { + return errorsmod.Wrapf(stakeibctypes.ErrHostZoneNotFound, + "host zone not found for transfer channel %s", packet.GetDestChannel()) + } + + // grab relevant addresses + senderStrideAddress := utils.ConvertAddressToStrideAddress(transferMetadata.Sender) + if senderStrideAddress == "" { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid sender address (%s)", transferMetadata.Sender) + } + newStrideAddress := transferMetadata.Receiver + + // find the airdrop for this host chain ID + airdrop, found := k.claimKeeper.GetAirdropByChainId(ctx, hostZone.ChainId) + if !found { + return errorsmod.Wrapf(claimtypes.ErrAirdropNotFound, "airdrop not found for chain-id %s", hostZone.ChainId) + } + if !airdrop.AutopilotEnabled { + return fmt.Errorf("autopilot claiming is not enabled for host zone %s", hostZone.ChainId) + } + + airdropId := airdrop.AirdropIdentifier + k.Logger(ctx).Info(fmt.Sprintf("updating airdrop address %s (orig %s) to %s for airdrop %s", + senderStrideAddress, transferMetadata.Sender, newStrideAddress, airdropId)) + + return k.claimKeeper.UpdateAirdropAddress(ctx, senderStrideAddress, newStrideAddress, airdropId) +} diff --git a/x/autopilot/keeper/airdrop_test.go b/x/autopilot/keeper/airdrop_test.go new file mode 100644 index 00000000000..72eb311e27e --- /dev/null +++ b/x/autopilot/keeper/airdrop_test.go @@ -0,0 +1,395 @@ +package keeper_test + +import ( + "fmt" + "strings" + + sdkmath "cosmossdk.io/math" + + "github.com/cosmos/ibc-go/v8/modules/apps/transfer" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/utils" + "github.com/osmosis-labs/osmosis/v27/x/autopilot" + "github.com/osmosis-labs/osmosis/v27/x/autopilot/types" + claimtypes "github.com/osmosis-labs/osmosis/v27/x/claim/types" + stakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +// TODO: Separate out tests cases that are not necessarily Claim or Stakeibc related, +// but more just test the parsing that occurs in OnRecvPacket +// Move them to a different test file + +var EvmosChainId = "evmos-1" + +func getClaimPacketMetadata(address string) string { + return fmt.Sprintf(` + { + "autopilot": { + "receiver": "%[1]s", + "claim": { } + } + }`, address) +} + +func (s *KeeperTestSuite) TestAirdropOnRecvPacket() { + evmosAirdropId := "evmos" + evmosDenom := "aevmos" + + // The evmos addresses represent the airdrop recipient + evmosAddress := "evmos1wg6vh689gw93umxqquhe3yaqf0h9wt9d4q7550" + + // Each evmos address has a serialized mapping that was used to store the claim record + // This is in the form of an "incorrect" stride address and was stored during the upgrade + evmosAddressKeyString := utils.ConvertAddressToStrideAddress(evmosAddress) + evmosAddressKey := sdk.MustAccAddressFromBech32(evmosAddressKeyString) + + // For each evmos address, there is a corresponding stride address that will specified + // in the transfer packet - so for the sake of this test, we'll use arbitrary stride addresses + strideAccAddress := s.TestAccs[0] + strideAddress := strideAccAddress.String() + differentAddress := s.TestAccs[1].String() + + // Build the template for the transfer packet (the data and channel fields will get updated from each unit test) + packetTemplate := channeltypes.Packet{ + Sequence: 1, + SourcePort: transfertypes.PortID, + SourceChannel: ibctesting.FirstChannelID, + DestinationPort: transfertypes.PortID, + Data: []byte{}, + TimeoutHeight: clienttypes.Height{}, + TimeoutTimestamp: 0, + } + packetDataTemplate := transfertypes.FungibleTokenPacketData{ + Denom: evmosDenom, + Amount: "1000000", + Sender: evmosAddress, + } + + // To test the case where the packet has a valid channel but for a host zone without an airdrop + channelIdForDifferentHostZone := "channel-1" + + testCases := []struct { + name string + autopilotClaimActive bool + autopilotClaimEnabledForHost bool + packetData transfertypes.FungibleTokenPacketData + destinationChannelID string + destinationPortID string + transferShouldSucceed bool + airdropShouldUpdate bool + }{ + { + name: "successful airdrop update", + autopilotClaimActive: true, + autopilotClaimEnabledForHost: true, + destinationChannelID: ibctesting.FirstChannelID, + destinationPortID: transfertypes.PortID, + packetData: transfertypes.FungibleTokenPacketData{ + Receiver: strideAddress, + Memo: getClaimPacketMetadata(strideAddress), + }, + transferShouldSucceed: true, + airdropShouldUpdate: true, + }, + { + name: "valid routing schema, but routing inactive", + autopilotClaimActive: false, + autopilotClaimEnabledForHost: true, + destinationChannelID: ibctesting.FirstChannelID, + destinationPortID: transfertypes.PortID, + packetData: transfertypes.FungibleTokenPacketData{ + Receiver: strideAddress, + Memo: getClaimPacketMetadata(strideAddress), + }, + transferShouldSucceed: false, + airdropShouldUpdate: false, + }, + { + name: "valid routing schema, but routing inactive for airdrop", + autopilotClaimActive: true, + autopilotClaimEnabledForHost: false, + destinationChannelID: ibctesting.FirstChannelID, + destinationPortID: transfertypes.PortID, + packetData: transfertypes.FungibleTokenPacketData{ + Receiver: strideAddress, + Memo: getClaimPacketMetadata(strideAddress), + }, + transferShouldSucceed: false, + airdropShouldUpdate: false, + }, + { + name: "invalid stride address in memo", + autopilotClaimActive: true, + autopilotClaimEnabledForHost: true, + destinationChannelID: ibctesting.FirstChannelID, + destinationPortID: transfertypes.PortID, + packetData: transfertypes.FungibleTokenPacketData{ + Receiver: strideAddress, + Memo: getClaimPacketMetadata("invalid_address"), + }, + transferShouldSucceed: false, + airdropShouldUpdate: false, + }, + { + name: "invalid stride address in receiver", + autopilotClaimActive: true, + autopilotClaimEnabledForHost: true, + destinationChannelID: ibctesting.FirstChannelID, + destinationPortID: transfertypes.PortID, + packetData: transfertypes.FungibleTokenPacketData{ + Receiver: "invalid-address", + Memo: getClaimPacketMetadata(strideAddress), + }, + transferShouldSucceed: false, + airdropShouldUpdate: false, + }, + { + name: "memo receiver doesn't match transfer receiver", + autopilotClaimActive: true, + autopilotClaimEnabledForHost: true, + destinationChannelID: ibctesting.FirstChannelID, + destinationPortID: transfertypes.PortID, + packetData: transfertypes.FungibleTokenPacketData{ + Receiver: differentAddress, + Memo: getClaimPacketMetadata(strideAddress), + }, + transferShouldSucceed: false, + airdropShouldUpdate: false, + }, + { + name: "normal transfer packet - no memo", + autopilotClaimActive: true, + autopilotClaimEnabledForHost: true, + destinationChannelID: ibctesting.FirstChannelID, + destinationPortID: transfertypes.PortID, + packetData: transfertypes.FungibleTokenPacketData{ + Receiver: strideAddress, + Memo: "", + }, + transferShouldSucceed: true, + airdropShouldUpdate: false, + }, + { + name: "normal transfer packet - empty JSON memo", + autopilotClaimActive: true, + autopilotClaimEnabledForHost: true, + destinationChannelID: ibctesting.FirstChannelID, + destinationPortID: transfertypes.PortID, + packetData: transfertypes.FungibleTokenPacketData{ + Receiver: strideAddress, + Memo: "{}", + }, + transferShouldSucceed: true, + airdropShouldUpdate: false, + }, + { + name: "normal transfer packet - different middleware", + autopilotClaimActive: true, + autopilotClaimEnabledForHost: true, + destinationChannelID: ibctesting.FirstChannelID, + destinationPortID: transfertypes.PortID, + packetData: transfertypes.FungibleTokenPacketData{ + Receiver: strideAddress, + Memo: `{ "other_module": { } }`, + }, + transferShouldSucceed: true, + airdropShouldUpdate: false, + }, + { + name: "invalid autopilot JSON - no receiver", + autopilotClaimActive: true, + autopilotClaimEnabledForHost: true, + destinationChannelID: ibctesting.FirstChannelID, + destinationPortID: transfertypes.PortID, + packetData: transfertypes.FungibleTokenPacketData{ + Receiver: strideAddress, + Memo: `{ "autopilot": {} }`, + }, + transferShouldSucceed: false, + airdropShouldUpdate: false, + }, + { + name: "invalid autopilot JSON - no routing module", + autopilotClaimActive: true, + autopilotClaimEnabledForHost: true, + destinationChannelID: ibctesting.FirstChannelID, + destinationPortID: transfertypes.PortID, + packetData: transfertypes.FungibleTokenPacketData{ + Receiver: strideAddress, + Memo: fmt.Sprintf(`{ "autopilot": { "receiver": "%s" } }`, strideAddress), + }, + transferShouldSucceed: false, + airdropShouldUpdate: false, + }, + { + name: "memo too long", + autopilotClaimActive: true, + autopilotClaimEnabledForHost: true, + destinationChannelID: ibctesting.FirstChannelID, + destinationPortID: transfertypes.PortID, + packetData: transfertypes.FungibleTokenPacketData{ + Receiver: strideAddress, + Memo: strings.Repeat("X", 4001), + }, + transferShouldSucceed: false, + airdropShouldUpdate: false, + }, + { + name: "receiver too long", + autopilotClaimActive: true, + autopilotClaimEnabledForHost: true, + destinationChannelID: ibctesting.FirstChannelID, + destinationPortID: transfertypes.PortID, + packetData: transfertypes.FungibleTokenPacketData{ + Receiver: strings.Repeat("X", 101), + Memo: "", + }, + transferShouldSucceed: false, + airdropShouldUpdate: false, + }, + { + name: "not transfer channel", + autopilotClaimActive: true, + autopilotClaimEnabledForHost: true, + destinationChannelID: ibctesting.FirstChannelID, + destinationPortID: "invalid_port", + packetData: transfertypes.FungibleTokenPacketData{ + Receiver: strideAddress, + Memo: getClaimPacketMetadata(strideAddress), + }, + transferShouldSucceed: false, + airdropShouldUpdate: false, + }, + { + name: "transfer channel from a different host zone", + autopilotClaimActive: true, + autopilotClaimEnabledForHost: true, + destinationChannelID: channelIdForDifferentHostZone, + destinationPortID: transfertypes.PortID, + packetData: transfertypes.FungibleTokenPacketData{ + Receiver: strideAddress, + Memo: getClaimPacketMetadata(strideAddress), + }, + transferShouldSucceed: false, + airdropShouldUpdate: false, + }, + { + name: "transfer channel does not exist", + autopilotClaimActive: true, + autopilotClaimEnabledForHost: true, + destinationChannelID: "channel-XXX", + destinationPortID: transfertypes.PortID, + packetData: transfertypes.FungibleTokenPacketData{ + Receiver: strideAddress, + Memo: getClaimPacketMetadata(strideAddress), + }, + transferShouldSucceed: false, + airdropShouldUpdate: false, + }, + } + + for i, tc := range testCases { + s.Run(fmt.Sprintf("Case %d_%s", i, tc.name), func() { + s.SetupTest() + + // Update the autopilot active flag + s.App.AutopilotKeeper.SetParams(s.Ctx, types.Params{ + ClaimActive: tc.autopilotClaimActive, + }) + + // Set evmos airdrop + airdrops := claimtypes.Params{ + Airdrops: []*claimtypes.Airdrop{{ + AirdropIdentifier: evmosAirdropId, + ChainId: EvmosChainId, + AutopilotEnabled: tc.autopilotClaimEnabledForHost, + }}, + } + err := s.App.ClaimKeeper.SetParams(s.Ctx, airdrops) + s.Require().NoError(err, "no error expected when setting airdrop params") + + // Store the host zone so that we can verify the channel + s.App.StakeibcKeeper.SetHostZone(s.Ctx, stakeibctypes.HostZone{ + ChainId: EvmosChainId, + TransferChannelId: ibctesting.FirstChannelID, + }) + + // Store a second host zone that does not have an airdrop + s.App.StakeibcKeeper.SetHostZone(s.Ctx, stakeibctypes.HostZone{ + ChainId: "differnet_host_zone", + TransferChannelId: channelIdForDifferentHostZone, + }) + + // Set claim records using key'd address + oldClaimRecord := claimtypes.ClaimRecord{ + AirdropIdentifier: evmosAirdropId, + Address: evmosAddressKeyString, + Weight: sdkmath.LegacyNewDec(10), + ActionCompleted: []bool{false, false, false}, + } + err = s.App.ClaimKeeper.SetClaimRecord(s.Ctx, oldClaimRecord) + s.Require().NoError(err, "no error expected when setting claim record") + + // Store the expected new claim record which should have the address changed + expectedNewClaimRecord := oldClaimRecord + expectedNewClaimRecord.Address = strideAddress + + // Replicate middleware stack + transferIBCModule := transfer.NewIBCModule(s.App.TransferKeeper) + autopilotStack := autopilot.NewIBCModule(s.App.AutopilotKeeper, transferIBCModule) + + // Update packet and packet data + packetData := packetDataTemplate + packetData.Memo = tc.packetData.Memo + packetData.Receiver = tc.packetData.Receiver + + packet := packetTemplate + packet.DestinationChannel = tc.destinationChannelID + packet.DestinationPort = tc.destinationPortID + packet.Data = transfertypes.ModuleCdc.MustMarshalJSON(&packetData) + + // Build the evmos denom from the packet + prefixedDenom := transfertypes.GetPrefixedDenom(packet.DestinationPort, packet.DestinationChannel, evmosDenom) + evmosIbcDenom := transfertypes.ParseDenomTrace(prefixedDenom).IBCDenom() + + // Call OnRecvPacket for autopilot + ack := autopilotStack.OnRecvPacket( + s.Ctx, + packet, + sdk.AccAddress{}, + ) + + if tc.transferShouldSucceed { + s.Require().True(ack.Success(), "ack should be successful - ack: %+v", string(ack.Acknowledgement())) + + // Check funds were transferred + coin := s.App.BankKeeper.GetBalance(s.Ctx, sdk.MustAccAddressFromBech32(strideAddress), evmosIbcDenom) + s.Require().Equal(packetDataTemplate.Amount, coin.Amount.String(), "balance should have updated after successful transfer") + + if tc.airdropShouldUpdate { + // Check that we have a new record for the user + actualNewClaimRecord, err := s.App.ClaimKeeper.GetClaimRecord(s.Ctx, strideAccAddress, evmosAirdropId) + s.Require().NoError(err, "no error expected when getting new claim record") + s.Require().Equal(expectedNewClaimRecord, actualNewClaimRecord) + + // Check that the old record was removed (GetClaimRecord returns a zero-struct if not found) + oldClaimRecord, _ := s.App.ClaimKeeper.GetClaimRecord(s.Ctx, evmosAddressKey, evmosAirdropId) + s.Require().Equal("", oldClaimRecord.Address) + } else { + // If the airdrop code was never called, check that the old record claim record is still there + oldClaimRecordAfterTransfer, err := s.App.ClaimKeeper.GetClaimRecord(s.Ctx, evmosAddressKey, evmosAirdropId) + s.Require().NoError(err, "no error expected when getting old claim record") + s.Require().Equal(oldClaimRecord, oldClaimRecordAfterTransfer) + } + } else { + s.Require().False(ack.Success(), "ack should have failed - ack: %+v", string(ack.Acknowledgement())) + } + }) + } +} diff --git a/x/autopilot/keeper/fallback.go b/x/autopilot/keeper/fallback.go new file mode 100644 index 00000000000..ffa87430254 --- /dev/null +++ b/x/autopilot/keeper/fallback.go @@ -0,0 +1,39 @@ +package keeper + +import ( + "cosmossdk.io/store/prefix" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/autopilot/types" +) + +// Stores a fallback address for an outbound transfer +func (k Keeper) SetTransferFallbackAddress(ctx sdk.Context, channelId string, sequence uint64, address string) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.TransferFallbackAddressPrefix) + key := types.GetTransferFallbackAddressKey(channelId, sequence) + value := []byte(address) + store.Set(key, value) +} + +// Removes a fallback address from the store +// This is used after the ack or timeout for a packet has been received +func (k Keeper) RemoveTransferFallbackAddress(ctx sdk.Context, channelId string, sequence uint64) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.TransferFallbackAddressPrefix) + key := types.GetTransferFallbackAddressKey(channelId, sequence) + store.Delete(key) +} + +// Returns a fallback address, given the channel ID and sequence number of the packet +// If no fallback address has been stored, return false +func (k Keeper) GetTransferFallbackAddress(ctx sdk.Context, channelId string, sequence uint64) (address string, found bool) { + store := prefix.NewStore(ctx.KVStore(k.storeKey), types.TransferFallbackAddressPrefix) + + key := types.GetTransferFallbackAddressKey(channelId, sequence) + valueBz := store.Get(key) + + if len(valueBz) == 0 { + return "", false + } + + return string(valueBz), true +} diff --git a/x/autopilot/keeper/fallback_test.go b/x/autopilot/keeper/fallback_test.go new file mode 100644 index 00000000000..a70c5900fc7 --- /dev/null +++ b/x/autopilot/keeper/fallback_test.go @@ -0,0 +1,22 @@ +package keeper_test + +// Tests Get/Set/RemoveTransferFallbackAddress +func (s *KeeperTestSuite) TestTransferFallbackAddress() { + channelId := "channel-0" + sequence := uint64(100) + expectedAddress := "stride1xjp08gxef09fck6yj2lg0vrgpcjhqhp055ffhj" + + // Add a new fallback address + s.App.AutopilotKeeper.SetTransferFallbackAddress(s.Ctx, channelId, sequence, expectedAddress) + + // Confirm we can retrieve it + actualAddress, found := s.App.AutopilotKeeper.GetTransferFallbackAddress(s.Ctx, channelId, sequence) + s.Require().True(found, "address should have been found") + s.Require().Equal(expectedAddress, actualAddress, "fallback addres") + + // Remove it and confirm we can no longer retrieve it + s.App.AutopilotKeeper.RemoveTransferFallbackAddress(s.Ctx, channelId, sequence) + + _, found = s.App.AutopilotKeeper.GetTransferFallbackAddress(s.Ctx, channelId, sequence) + s.Require().False(found, "address should have been removed") +} diff --git a/x/autopilot/keeper/genesis.go b/x/autopilot/keeper/genesis.go new file mode 100644 index 00000000000..6485516c870 --- /dev/null +++ b/x/autopilot/keeper/genesis.go @@ -0,0 +1,20 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/autopilot/types" +) + +// InitGenesis initializes the capability module's state from a provided genesis +// state. +func (k Keeper) InitGenesis(ctx sdk.Context, genState types.GenesisState) { + k.SetParams(ctx, genState.Params) +} + +// ExportGenesis returns the capability module's exported genesis. +func (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { + genesis := types.DefaultGenesis() + genesis.Params = k.GetParams(ctx) + return genesis +} diff --git a/x/autopilot/keeper/genesis_test.go b/x/autopilot/keeper/genesis_test.go new file mode 100644 index 00000000000..d40884862e0 --- /dev/null +++ b/x/autopilot/keeper/genesis_test.go @@ -0,0 +1,20 @@ +package keeper_test + +import ( + "github.com/osmosis-labs/osmosis/v27/x/autopilot/types" +) + +func (s *KeeperTestSuite) TestGenesis() { + expectedGenesisState := types.GenesisState{ + Params: types.Params{ + StakeibcActive: true, + ClaimActive: true, + }, + } + + s.App.AutopilotKeeper.InitGenesis(s.Ctx, expectedGenesisState) + + actualGenesisState := s.App.AutopilotKeeper.ExportGenesis(s.Ctx) + s.Require().NotNil(actualGenesisState) + s.Require().Equal(expectedGenesisState.Params, actualGenesisState.Params) +} diff --git a/x/autopilot/keeper/grpc_query_params.go b/x/autopilot/keeper/grpc_query_params.go new file mode 100644 index 00000000000..9f21793313b --- /dev/null +++ b/x/autopilot/keeper/grpc_query_params.go @@ -0,0 +1,20 @@ +package keeper + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/osmosis-labs/osmosis/v27/x/autopilot/types" +) + +func (k Keeper) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "invalid request") + } + ctx := sdk.UnwrapSDKContext(c) + + return &types.QueryParamsResponse{Params: k.GetParams(ctx)}, nil +} diff --git a/x/autopilot/keeper/grpc_query_params_test.go b/x/autopilot/keeper/grpc_query_params_test.go new file mode 100644 index 00000000000..9e2d4ea85d3 --- /dev/null +++ b/x/autopilot/keeper/grpc_query_params_test.go @@ -0,0 +1,29 @@ +package keeper_test + +import ( + "context" + + "github.com/osmosis-labs/osmosis/v27/x/autopilot/types" +) + +func (s *KeeperTestSuite) TestParamsQuery() { + // Test with stakeibc enabled and claim disabled + s.App.AutopilotKeeper.SetParams(s.Ctx, types.Params{ + StakeibcActive: true, + ClaimActive: false, + }) + queryResponse, err := s.QueryClient.Params(context.Background(), &types.QueryParamsRequest{}) + s.Require().NoError(err) + s.Require().True(queryResponse.Params.StakeibcActive) + s.Require().False(queryResponse.Params.ClaimActive) + + // Test with claim enabled and stakeibc disabled + s.App.AutopilotKeeper.SetParams(s.Ctx, types.Params{ + StakeibcActive: false, + ClaimActive: true, + }) + queryResponse, err = s.QueryClient.Params(context.Background(), &types.QueryParamsRequest{}) + s.Require().NoError(err) + s.Require().False(queryResponse.Params.StakeibcActive) + s.Require().True(queryResponse.Params.ClaimActive) +} diff --git a/x/autopilot/keeper/ibc.go b/x/autopilot/keeper/ibc.go new file mode 100644 index 00000000000..d5985f0ed3b --- /dev/null +++ b/x/autopilot/keeper/ibc.go @@ -0,0 +1,98 @@ +package keeper + +import ( + "fmt" + + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + "github.com/osmosis-labs/osmosis/v27/utils" + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks" + icacallbacktypes "github.com/osmosis-labs/osmosis/v27/x/icacallbacks/types" +) + +// In the event of an ack error after a outbound transfer, we'll have to bank send to a fallback address +func (k Keeper) SendToFallbackAddress(ctx sdk.Context, packetData []byte, fallbackAddress string) error { + // First unmarshal the transfer metadata to get the sender/reciever, and token amount/denom + var transferMetadata transfertypes.FungibleTokenPacketData + if err := transfertypes.ModuleCdc.UnmarshalJSON(packetData, &transferMetadata); err != nil { + return err + } + + // Pull out the original sender of the transfer which will also be the bank sender + sender := transferMetadata.Sender + senderAccount, err := sdk.AccAddressFromBech32(sender) + if err != nil { + return errorsmod.Wrapf(err, "invalid sender address") + } + fallbackAccount, err := sdk.AccAddressFromBech32(fallbackAddress) + if err != nil { + return errorsmod.Wrapf(err, "invalid fallback address") + } + + // Build the token from the transfer metadata + amount, ok := sdkmath.NewIntFromString(transferMetadata.Amount) + if !ok { + return fmt.Errorf("unable to parse amount from transfer packet: %v", transferMetadata) + } + token := sdk.NewCoin(transferMetadata.Denom, amount) + + // Finally send to the fallback account + if err := utils.SafeSendCoins(true, k.bankKeeper, ctx, senderAccount, fallbackAccount, sdk.NewCoins(token)); err != nil { + return err + } + + return nil +} + +// If there was a timeout or failed ack from an outbound transfer of one of the autopilot actions, +// we'll need to check if there was a fallback address. If one was stored, bank send to that address +// If the ack was successful, we should delete the address (if it exists) +func (k Keeper) HandleFallbackAddress(ctx sdk.Context, packet channeltypes.Packet, acknowledgement []byte, packetTimedOut bool) error { + // Retrieve the fallback address for the given packet + // We use the packet source channel here since this will correspond with the channel on Stride + channelId := packet.SourceChannel + sequence := packet.Sequence + fallbackAddress, fallbackAddressFound := k.GetTransferFallbackAddress(ctx, channelId, sequence) + + // If there was no fallback address, there's nothing else to do + if !fallbackAddressFound { + return nil + } + + // Remove the fallback address since the packet is no longer pending + k.RemoveTransferFallbackAddress(ctx, channelId, sequence) + + // If the packet timed out, send to the fallback address + if packetTimedOut { + return k.SendToFallbackAddress(ctx, packet.Data, fallbackAddress) + } + + // If the packet did not timeout, check whether the ack was successful or was an ack error + isICATx := false + ackResponse, err := icacallbacks.UnpackAcknowledgementResponse(ctx, k.Logger(ctx), acknowledgement, isICATx) + if err != nil { + return err + } + + // If successful, no additional action is necessary + if ackResponse.Status == icacallbacktypes.AckResponseStatus_SUCCESS { + return nil + } + + // If there was an ack error, we'll need to bank send to the fallback address + return k.SendToFallbackAddress(ctx, packet.Data, fallbackAddress) +} + +// OnTimeoutPacket should always send to the fallback address +func (k Keeper) OnTimeoutPacket(ctx sdk.Context, packet channeltypes.Packet) error { + return k.HandleFallbackAddress(ctx, packet, []byte{}, true) +} + +// OnAcknowledgementPacket should send to the fallback address if the ack is an ack error +func (k Keeper) OnAcknowledgementPacket(ctx sdk.Context, packet channeltypes.Packet, acknowledgement []byte) error { + return k.HandleFallbackAddress(ctx, packet, acknowledgement, false) +} diff --git a/x/autopilot/keeper/ibc_test.go b/x/autopilot/keeper/ibc_test.go new file mode 100644 index 00000000000..de1f6d4a97b --- /dev/null +++ b/x/autopilot/keeper/ibc_test.go @@ -0,0 +1,240 @@ +package keeper_test + +import ( + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" +) + +type PacketCallbackTestCase struct { + ChannelId string + OriginalSequence uint64 + RetrySequence uint64 + Token sdk.Coin + Packet channeltypes.Packet + SenderAccount sdk.AccAddress + FallbackAccount sdk.AccAddress +} + +func (s *KeeperTestSuite) SetupTestHandleFallbackPacket() PacketCallbackTestCase { + senderAccount := s.TestAccs[0] + fallbackAccount := s.TestAccs[1] + + sequence := uint64(1) + channelId := "channel-0" + denom := "denom" + amount := sdkmath.NewInt(10000) + token := sdk.NewCoin(denom, amount) + + // Set a fallback addresses + s.App.AutopilotKeeper.SetTransferFallbackAddress(s.Ctx, channelId, sequence, fallbackAccount.String()) + + // Fund the sender account + s.FundAccount(senderAccount, token) + + // Build the IBC packet + transferMetadata := transfertypes.FungibleTokenPacketData{ + Denom: "denom", + Amount: amount.String(), + Sender: senderAccount.String(), + } + packet := channeltypes.Packet{ + Sequence: sequence, + SourceChannel: channelId, + Data: transfertypes.ModuleCdc.MustMarshalJSON(&transferMetadata), + } + + return PacketCallbackTestCase{ + ChannelId: channelId, + OriginalSequence: sequence, + Token: token, + Packet: packet, + SenderAccount: senderAccount, + FallbackAccount: fallbackAccount, + } +} + +// -------------------------------------------------------------- +// IBC Callback Helpers +// -------------------------------------------------------------- + +func (s *KeeperTestSuite) TestSendToFallbackAddress() { + senderAccount := s.TestAccs[0] + fallbackAccount := s.TestAccs[1] + + denom := "denom" + amount := sdkmath.NewInt(10000) + + // Fund the sender + zeroCoin := sdk.NewCoin(denom, sdkmath.ZeroInt()) + balanceCoin := sdk.NewCoin(denom, amount) + s.FundAccount(senderAccount, balanceCoin) + + // Send to the fallback address with a valid input + packetDataBz := transfertypes.ModuleCdc.MustMarshalJSON(&transfertypes.FungibleTokenPacketData{ + Denom: denom, + Amount: amount.String(), + Sender: senderAccount.String(), + }) + err := s.App.AutopilotKeeper.SendToFallbackAddress(s.Ctx, packetDataBz, fallbackAccount.String()) + s.Require().NoError(err, "no error expected when sending to fallback address") + + // Check that the funds were transferred + senderBalance := s.App.BankKeeper.GetBalance(s.Ctx, senderAccount, denom) + s.CompareCoins(zeroCoin, senderBalance, "sender should have lost tokens") + + fallbackBalance := s.App.BankKeeper.GetBalance(s.Ctx, fallbackAccount, denom) + s.CompareCoins(balanceCoin, fallbackBalance, "fallback should have gained tokens") + + // Test with an invalid sender address - it should error + invalidPacketDataBz := transfertypes.ModuleCdc.MustMarshalJSON(&transfertypes.FungibleTokenPacketData{ + Denom: denom, + Amount: amount.String(), + Sender: "invalid_sender", + }) + err = s.App.AutopilotKeeper.SendToFallbackAddress(s.Ctx, invalidPacketDataBz, fallbackAccount.String()) + s.Require().ErrorContains(err, "invalid sender address") + + // Test with an invalid fallback address - it should error + err = s.App.AutopilotKeeper.SendToFallbackAddress(s.Ctx, packetDataBz, "invalid_fallback") + s.Require().ErrorContains(err, "invalid fallback address") + + // Test with an invalid amount - it should error + invalidPacketDataBz = transfertypes.ModuleCdc.MustMarshalJSON(&transfertypes.FungibleTokenPacketData{ + Denom: denom, + Amount: "", + Sender: senderAccount.String(), + }) + err = s.App.AutopilotKeeper.SendToFallbackAddress(s.Ctx, invalidPacketDataBz, fallbackAccount.String()) + s.Require().ErrorContains(err, "unable to parse amount") + + // Finally, try to call the send function again with a valid input, + // it should fail since the sender now has an insufficient balance + err = s.App.AutopilotKeeper.SendToFallbackAddress(s.Ctx, packetDataBz, fallbackAccount.String()) + s.Require().ErrorContains(err, "insufficient funds") +} + +// -------------------------------------------------------------- +// OnAcknowledgementPacket +// -------------------------------------------------------------- + +func (s *KeeperTestSuite) TestOnAcknowledgementPacket_AckSuccess() { + tc := s.SetupTestHandleFallbackPacket() + + // Build a successful ack + ackSuccess := transfertypes.ModuleCdc.MustMarshalJSON(&channeltypes.Acknowledgement{ + Response: &channeltypes.Acknowledgement_Result{ + Result: []byte{1}, // just has to be non-empty + }, + }) + + // Call OnAckPacket with the successful ack + err := s.App.AutopilotKeeper.OnAcknowledgementPacket(s.Ctx, tc.Packet, ackSuccess) + s.Require().NoError(err, "no error expected during OnAckPacket") + + // Confirm the fallback address was removed + _, found := s.App.AutopilotKeeper.GetTransferFallbackAddress(s.Ctx, tc.ChannelId, tc.OriginalSequence) + s.Require().False(found, "fallback address should have been removed") + + // Confirm the fallback address has not received any coins + zeroCoin := sdk.NewCoin(tc.Token.Denom, sdkmath.ZeroInt()) + fallbackBalance := s.App.BankKeeper.GetBalance(s.Ctx, tc.FallbackAccount, tc.Token.Denom) + s.CompareCoins(zeroCoin, fallbackBalance, "fallback account should not have received funds") +} + +func (s *KeeperTestSuite) TestOnAcknowledgementPacket_AckFailure() { + tc := s.SetupTestHandleFallbackPacket() + + // Build an error ack + ackFailure := transfertypes.ModuleCdc.MustMarshalJSON(&channeltypes.Acknowledgement{ + Response: &channeltypes.Acknowledgement_Error{}, + }) + + // Call OnAckPacket with the successful ack + err := s.App.AutopilotKeeper.OnAcknowledgementPacket(s.Ctx, tc.Packet, ackFailure) + s.Require().NoError(err, "no error expected during OnAckPacket") + + // Confirm tokens were sent to the fallback address + zeroCoin := sdk.NewCoin(tc.Token.Denom, sdkmath.ZeroInt()) + senderBalance := s.App.BankKeeper.GetBalance(s.Ctx, tc.SenderAccount, tc.Token.Denom) + fallbackBalance := s.App.BankKeeper.GetBalance(s.Ctx, tc.FallbackAccount, tc.Token.Denom) + s.CompareCoins(zeroCoin, senderBalance, "sender account should have lost funds") + s.CompareCoins(tc.Token, fallbackBalance, "fallback account should have received funds") + + // Confirm the fallback address was removed + _, found := s.App.AutopilotKeeper.GetTransferFallbackAddress(s.Ctx, tc.ChannelId, tc.OriginalSequence) + s.Require().False(found, "fallback address should have been removed") +} + +func (s *KeeperTestSuite) TestOnAcknowledgementPacket_InvalidAck() { + tc := s.SetupTestHandleFallbackPacket() + + // Build an invalid ack to force an error + invalidAck := transfertypes.ModuleCdc.MustMarshalJSON(&channeltypes.Acknowledgement{ + Response: &channeltypes.Acknowledgement_Result{ + Result: []byte{}, // empty result causes an error + }, + }) + + // Call OnAckPacket with the invalid ack + err := s.App.AutopilotKeeper.OnAcknowledgementPacket(s.Ctx, tc.Packet, invalidAck) + s.Require().ErrorContains(err, "invalid acknowledgement") +} + +func (s *KeeperTestSuite) TestOnAcknowledgementPacket_NoOp() { + tc := s.SetupTestHandleFallbackPacket() + + // Remove the fallback address so that there is no action necessary in the callback + s.App.AutopilotKeeper.RemoveTransferFallbackAddress(s.Ctx, tc.ChannelId, tc.OriginalSequence) + + // Call OnAckPacket and confirm there was no error + // The ack argument here doesn't matter cause the no-op check is upstream + err := s.App.AutopilotKeeper.OnAcknowledgementPacket(s.Ctx, tc.Packet, []byte{}) + s.Require().NoError(err, "no error expected during on ack packet") + + // Check that no funds were moved + zeroCoin := sdk.NewCoin(tc.Token.Denom, sdkmath.ZeroInt()) + senderBalance := s.App.BankKeeper.GetBalance(s.Ctx, tc.SenderAccount, tc.Token.Denom) + fallbackBalance := s.App.BankKeeper.GetBalance(s.Ctx, tc.FallbackAccount, tc.Token.Denom) + s.CompareCoins(tc.Token, senderBalance, "sender account should have lost funds") + s.CompareCoins(zeroCoin, fallbackBalance, "fallback account should have received funds") +} + +// -------------------------------------------------------------- +// OnTimeoutPacket +// -------------------------------------------------------------- + +func (s *KeeperTestSuite) TestOnTimeoutPacket_Successful() { + tc := s.SetupTestHandleFallbackPacket() + + // Call OnTimeoutPacket + err := s.App.AutopilotKeeper.OnTimeoutPacket(s.Ctx, tc.Packet) + s.Require().NoError(err, "no error expected when calling OnTimeoutPacket") + + // Confirm tokens were sent to the fallback address + zeroCoin := sdk.NewCoin(tc.Token.Denom, sdkmath.ZeroInt()) + senderBalance := s.App.BankKeeper.GetBalance(s.Ctx, tc.SenderAccount, tc.Token.Denom) + fallbackBalance := s.App.BankKeeper.GetBalance(s.Ctx, tc.FallbackAccount, tc.Token.Denom) + s.CompareCoins(zeroCoin, senderBalance, "sender account should have lost funds") + s.CompareCoins(tc.Token, fallbackBalance, "fallback account should have received funds") + + // Confirm the fallback address was removed + _, found := s.App.AutopilotKeeper.GetTransferFallbackAddress(s.Ctx, tc.ChannelId, tc.OriginalSequence) + s.Require().False(found, "fallback address should have been removed") +} + +func (s *KeeperTestSuite) TestOnTimeoutPacket_NoOp() { + tc := s.SetupTestHandleFallbackPacket() + + // Remove the fallback address + s.App.AutopilotKeeper.RemoveTransferFallbackAddress(s.Ctx, tc.ChannelId, tc.OriginalSequence) + + // Call OnTimeoutPacket - this should be a no-op since there's no fallback data + err := s.App.AutopilotKeeper.OnTimeoutPacket(s.Ctx, tc.Packet) + s.Require().NoError(err, "no error expected when calling OnTimeoutPacket") + + // Confirm the sender still has his original tokens (since the retry was not submitted) + senderBalance := s.App.BankKeeper.GetBalance(s.Ctx, tc.SenderAccount, tc.Token.Denom) + s.CompareCoins(tc.Token, senderBalance, "the sender balance should not have changed") +} diff --git a/x/autopilot/keeper/keeper.go b/x/autopilot/keeper/keeper.go new file mode 100644 index 00000000000..22b0ed0ef71 --- /dev/null +++ b/x/autopilot/keeper/keeper.go @@ -0,0 +1,57 @@ +package keeper + +import ( + "fmt" + + "cosmossdk.io/log" + storetypes "cosmossdk.io/store/types" + + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + + "github.com/osmosis-labs/osmosis/v27/x/autopilot/types" + claimkeeper "github.com/osmosis-labs/osmosis/v27/x/claim/keeper" + stakeibckeeper "github.com/osmosis-labs/osmosis/v27/x/stakeibc/keeper" +) + +type ( + Keeper struct { + Cdc codec.BinaryCodec + storeKey storetypes.StoreKey + paramstore paramtypes.Subspace + bankKeeper types.BankKeeper + stakeibcKeeper stakeibckeeper.Keeper + claimKeeper claimkeeper.Keeper + transferKeeper types.IbcTransferKeeper + } +) + +func NewKeeper( + Cdc codec.BinaryCodec, + storeKey storetypes.StoreKey, + ps paramtypes.Subspace, + bankKeeper types.BankKeeper, + stakeibcKeeper stakeibckeeper.Keeper, + claimKeeper claimkeeper.Keeper, + transferKeeper types.IbcTransferKeeper, +) *Keeper { + // set KeyTable if it has not already been set + if !ps.HasKeyTable() { + ps = ps.WithKeyTable(types.ParamKeyTable()) + } + + return &Keeper{ + Cdc: Cdc, + storeKey: storeKey, + paramstore: ps, + bankKeeper: bankKeeper, + stakeibcKeeper: stakeibcKeeper, + claimKeeper: claimKeeper, + transferKeeper: transferKeeper, + } +} + +func (k Keeper) Logger(ctx sdk.Context) log.Logger { + return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) +} diff --git a/x/autopilot/keeper/keeper_test.go b/x/autopilot/keeper/keeper_test.go new file mode 100644 index 00000000000..6364bd9b36c --- /dev/null +++ b/x/autopilot/keeper/keeper_test.go @@ -0,0 +1,35 @@ +package keeper_test + +import ( + "testing" + + "github.com/stretchr/testify/suite" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/autopilot/types" +) + +const ( + HostChainId = "chain-0" + HostBechPrefix = "cosmos" + HostAddress = "cosmos16plylpsgxechajltx9yeseqexzdzut9g8vla4k" + HostDenom = "uatom" + + Atom = "uatom" + Strd = "ustrd" + Osmo = "uosmo" +) + +type KeeperTestSuite struct { + apptesting.AppTestHelper + QueryClient types.QueryClient +} + +func (s *KeeperTestSuite) SetupTest() { + s.Setup() + s.QueryClient = types.NewQueryClient(s.QueryHelper) +} + +func TestKeeperTestSuite(t *testing.T) { + suite.Run(t, new(KeeperTestSuite)) +} diff --git a/x/autopilot/keeper/liquidstake.go b/x/autopilot/keeper/liquidstake.go new file mode 100644 index 00000000000..9112c69eda9 --- /dev/null +++ b/x/autopilot/keeper/liquidstake.go @@ -0,0 +1,157 @@ +package keeper + +import ( + "errors" + "fmt" + "time" + + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + "github.com/osmosis-labs/osmosis/v27/utils" + "github.com/osmosis-labs/osmosis/v27/x/autopilot/types" + stakeibckeeper "github.com/osmosis-labs/osmosis/v27/x/stakeibc/keeper" + stakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +const ( + // If the forward transfer fails, the tokens are sent to the fallback address + // which is a less than ideal UX + // As a result, we decided to use a long timeout here such, even in the case + // of high activity, a timeout should be very unlikely to occur + // Empirically we found that times of high market stress took roughly + // 2 hours for transfers to complete + LiquidStakeForwardTransferTimeout = (time.Hour * 3) +) + +// Attempts to do an autopilot liquid stake (and optional forward) +// The liquid stake is only allowed if the inbound packet came along a trusted channel +func (k Keeper) TryLiquidStaking( + ctx sdk.Context, + packet channeltypes.Packet, + transferMetadata transfertypes.FungibleTokenPacketData, + autopilotMetadata types.StakeibcPacketMetadata, +) error { + params := k.GetParams(ctx) + if !params.StakeibcActive { + return errorsmod.Wrapf(types.ErrPacketForwardingInactive, "autopilot stakeibc routing is inactive") + } + + // Verify the amount is valid + amount, ok := sdkmath.NewIntFromString(transferMetadata.Amount) + if !ok { + return errors.New("not a parsable amount field") + } + + // In this case, we can't process a liquid staking transaction, because we're dealing with native tokens (e.g. STRD, stATOM) + if transfertypes.ReceiverChainIsSource(packet.GetSourcePort(), packet.GetSourceChannel(), transferMetadata.Denom) { + return fmt.Errorf("native token is not supported for liquid staking (%s)", transferMetadata.Denom) + } + + // Note: the denom in the packet is the base denom e.g. uatom - not ibc/xxx + // We need to use the port and channel to build the IBC denom + prefixedDenom := transfertypes.GetPrefixedDenom(packet.GetDestPort(), packet.GetDestChannel(), transferMetadata.Denom) + ibcDenom := transfertypes.ParseDenomTrace(prefixedDenom).IBCDenom() + + hostZone, err := k.stakeibcKeeper.GetHostZoneFromHostDenom(ctx, transferMetadata.Denom) + if err != nil { + return err + } + + // Verify the IBC denom of the packet matches the host zone, to confirm the packet + // was sent over a trusted channel + if hostZone.IbcDenom != ibcDenom { + return fmt.Errorf("ibc denom %s is not equal to host zone ibc denom %s", ibcDenom, hostZone.IbcDenom) + } + + return k.RunLiquidStake(ctx, amount, transferMetadata, autopilotMetadata) +} + +// Submits a LiquidStake message from the transfer receiver +// If a forwarding recipient is specified, the stTokens are ibc transferred +func (k Keeper) RunLiquidStake( + ctx sdk.Context, + amount sdkmath.Int, + transferMetadata transfertypes.FungibleTokenPacketData, + autopilotMetadata types.StakeibcPacketMetadata, +) error { + msg := &stakeibctypes.MsgLiquidStake{ + Creator: transferMetadata.Receiver, + Amount: amount, + HostDenom: transferMetadata.Denom, + } + + if err := msg.ValidateBasic(); err != nil { + return err + } + + msgServer := stakeibckeeper.NewMsgServerImpl(k.stakeibcKeeper) + msgResponse, err := msgServer.LiquidStake( + ctx, + msg, + ) + if err != nil { + return errorsmod.Wrapf(err, "failed to liquid stake") + } + + // If the IBCReceiver is empty, there is no forwarding step + if autopilotMetadata.IbcReceiver == "" { + return nil + } + + // Otherwise, if there is forwarding info, submit the IBC transfer + return k.IBCTransferStToken(ctx, msgResponse.StToken, transferMetadata, autopilotMetadata) +} + +// Submits an IBC transfer of the stToken to a non-stride zone (either back to the host zone or to a different zone) +// The sender of the transfer is the hashed receiver of the original autopilot inbound transfer +func (k Keeper) IBCTransferStToken( + ctx sdk.Context, + stToken sdk.Coin, + transferMetadata transfertypes.FungibleTokenPacketData, + autopilotMetadata types.StakeibcPacketMetadata, +) error { + hostZone, err := k.stakeibcKeeper.GetHostZoneFromHostDenom(ctx, transferMetadata.Denom) + if err != nil { + return err + } + + // If there's no channelID specified in the packet, default to the channel on the host zone + channelId := autopilotMetadata.TransferChannel + if channelId == "" { + channelId = hostZone.TransferChannelId + } + + // Use a long timeout for the transfer + timeoutTimestamp := utils.IntToUint(ctx.BlockTime().UnixNano() + LiquidStakeForwardTransferTimeout.Nanoseconds()) + + // Submit the transfer from the hashed address + transferMsg := &transfertypes.MsgTransfer{ + SourcePort: transfertypes.PortID, + SourceChannel: channelId, + Token: stToken, + Sender: transferMetadata.Receiver, + Receiver: autopilotMetadata.IbcReceiver, + TimeoutTimestamp: timeoutTimestamp, + Memo: "autopilot-liquid-stake-and-forward", + } + + transferResponse, err := k.transferKeeper.Transfer(ctx, transferMsg) + if err != nil { + return errorsmod.Wrapf(err, "failed to submit transfer during autopilot liquid stake and forward") + } + + // Store the original receiver as the fallback address in case the transfer fails + // autopilotMetadata.StrideAddress is never the hashed address, because the autopilotMetadata struct + // is parsed upstream of hashing the receiver + // So StrideAddress is used as the fallback (which is always the original receiver) + if k.bankKeeper.BlockedAddr(sdk.MustAccAddressFromBech32(autopilotMetadata.StrideAddress)) { + return errorsmod.Wrapf(types.ErrBlockedFallbackAddress, "fallback address %s is blocked", autopilotMetadata.StrideAddress) + } + k.SetTransferFallbackAddress(ctx, channelId, transferResponse.Sequence, autopilotMetadata.StrideAddress) + + return err +} diff --git a/x/autopilot/keeper/liquidstake_test.go b/x/autopilot/keeper/liquidstake_test.go new file mode 100644 index 00000000000..5924a786e09 --- /dev/null +++ b/x/autopilot/keeper/liquidstake_test.go @@ -0,0 +1,495 @@ +package keeper_test + +import ( + "fmt" + + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/ibc-go/v8/modules/apps/transfer" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + ibctesting "github.com/cosmos/ibc-go/v8/testing" + + "github.com/osmosis-labs/osmosis/v27/x/autopilot" + "github.com/osmosis-labs/osmosis/v27/x/autopilot/types" + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + recordsmodule "github.com/osmosis-labs/osmosis/v27/x/records" + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + stakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +var ( + // Arbitrary channel ID on the non-stride zone + SourceChannelOnHost = "channel-1000" + + // Building a mapping to of base denom to expected denom traces for the transfer packet data + // This is all assuming the packet has been sent to stride (the FungibleTokenPacketData has + // a denom-trace for the Denom field, instead of an IBC hash) + ReceivePacketDenomTraces = map[string]string{ + // For host zone tokens, since stride is the first hop, there's no port/channel in the denom trace path + Atom: Atom, + Osmo: Osmo, + // For strd, the other zone's channel ID is appended to the denom trace + Strd: transfertypes.GetPrefixedDenom(transfertypes.PortID, SourceChannelOnHost, Strd), + } +) + +// Helper function to create the autopilot JSON payload for a liquid stake +func getLiquidStakePacketMetadata(receiver, ibcReceiver, transferChannelId string) string { + return fmt.Sprintf(` + { + "autopilot": { + "receiver": "%[1]s", + "stakeibc": { "action": "LiquidStake", "ibc_receiver": "%[2]s", "transfer_channel": "%[3]s" } + } + }`, receiver, ibcReceiver, transferChannelId) +} + +// Helper function to mock out all the state needed to test autopilot liquid stake +// A transfer channel-0 is created, and the state is mocked out with an atom host zone +// +// Note: The testing framework is limited to one transfer channel per test, which is channel-0. +// If there's an outbound transfer, it must be on channel-0. So when testing a transfer along +// a non-host-zone channel (e.g. a transfer of statom to Osmosis), a different `strideToHostChannelId` +// channel ID must be passed to this function +// +// Returns the ibc denom of the native token +func (s *KeeperTestSuite) SetupAutopilotLiquidStake( + featureEnabled bool, + strideToHostChannelId string, + depositAddress sdk.AccAddress, + liquidStaker sdk.AccAddress, +) (nativeTokenIBCDenom string) { + // Create a transfer channel on channel-0 for the outbound transfer + // Note: We pass a dummy chain ID cause all that matters here is + // that channel-0 exists, it does not have to line up with the host zone + s.CreateTransferChannel("chain-0") + + // Set whether the feature is active + params := s.App.AutopilotKeeper.GetParams(s.Ctx) + params.StakeibcActive = featureEnabled + s.App.AutopilotKeeper.SetParams(s.Ctx, params) + + // Set the epoch tracker to lookup the deposit record + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, stakeibctypes.EpochTracker{ + EpochIdentifier: epochtypes.STRIDE_EPOCH, + EpochNumber: 1, + }) + + // Set deposit record to store the new liquid stake + s.App.RecordsKeeper.SetDepositRecord(s.Ctx, recordstypes.DepositRecord{ + Id: 1, + DepositEpochNumber: 1, + Amount: sdkmath.ZeroInt(), + HostZoneId: HostChainId, + Status: recordstypes.DepositRecord_TRANSFER_QUEUE, + }) + + // Set the host zone - this should have the actual IBC denom + prefixedDenom := transfertypes.GetPrefixedDenom(transfertypes.PortID, strideToHostChannelId, HostDenom) + nativeTokenIBCDenom = transfertypes.ParseDenomTrace(prefixedDenom).IBCDenom() + + s.App.StakeibcKeeper.SetHostZone(s.Ctx, stakeibctypes.HostZone{ + ChainId: HostChainId, + HostDenom: HostDenom, + RedemptionRate: sdkmath.LegacyNewDec(1), // used to determine the stAmount + DepositAddress: depositAddress.String(), + IbcDenom: nativeTokenIBCDenom, + TransferChannelId: strideToHostChannelId, + }) + + return nativeTokenIBCDenom +} + +func (s *KeeperTestSuite) CheckLiquidStakeSucceeded( + liquidStakeAmount sdkmath.Int, + liquidStakerAddress sdk.AccAddress, + depositAddress sdk.AccAddress, + nativeTokenIBCDenom string, + expectedForwardChannelId string, +) { + // If there was a forwarding step, the stTokens will end up in the escrow account + // Otherwise, they'll be in the liquid staker's account + stTokenRecipient := liquidStakerAddress + if expectedForwardChannelId != "" { + escrowAddress := transfertypes.GetEscrowAddress(transfertypes.PortID, expectedForwardChannelId) + stTokenRecipient = escrowAddress + } + + // Confirm the liquid staker has lost his native tokens + stakerBalance := s.App.BankKeeper.GetBalance(s.Ctx, liquidStakerAddress, nativeTokenIBCDenom) + s.Require().Zero(stakerBalance.Amount.Int64(), "liquid staker should have lost host tokens") + + // Confirm the deposit address now has the native tokens + depositBalance := s.App.BankKeeper.GetBalance(s.Ctx, depositAddress, nativeTokenIBCDenom) + s.Require().Equal(liquidStakeAmount.Int64(), depositBalance.Amount.Int64(), "deposit address should have gained host tokens") + + // Confirm the stToken's were minted and sent to the recipient + recipientBalance := s.App.BankKeeper.GetBalance(s.Ctx, stTokenRecipient, "st"+HostDenom) + s.Require().Equal(liquidStakeAmount.Int64(), recipientBalance.Amount.Int64(), "st token recipient balance") + + // If there was a forwarding step, confirm the fallback address was stored + // The fallback address in all these tests is the same as the liquid staker + if expectedForwardChannelId != "" { + address, found := s.App.AutopilotKeeper.GetTransferFallbackAddress(s.Ctx, expectedForwardChannelId, 1) + s.Require().True(found, "fallback address should have been found") + s.Require().Equal(liquidStakerAddress.String(), address, "fallback address") + } +} + +// Tests TryLiquidStake directly - beginning after the inbound autopilot transfer has passed down the stack +func (s *KeeperTestSuite) TestTryLiquidStake() { + liquidStakerOnStride := s.TestAccs[0] + depositAddress := s.TestAccs[1] + forwardRecipientOnHost := HostAddress + + stakeAmount := sdkmath.NewInt(1000000) + + testCases := []struct { + name string + enabled bool + liquidStakeDenom string + liquidStakeAmount string + autopilotMetadata types.StakeibcPacketMetadata + hostZoneChannelID string // defaults to channel-0 if not specified + inboundTransferChannnelId string // defaults to channel-0 if not specified + expectedForwardChannelId string // defaults to empty (no forwarding) + expectedError string + }{ + { + // Normal autopilot liquid stake with no transfer + name: "successful liquid stake with atom", + enabled: true, + liquidStakeDenom: Atom, + liquidStakeAmount: stakeAmount.String(), + }, + { + // Liquid stake and forward, using the default host channel ID + name: "successful liquid stake and forward atom to the hub", + enabled: true, + liquidStakeDenom: Atom, + liquidStakeAmount: stakeAmount.String(), + autopilotMetadata: types.StakeibcPacketMetadata{ + StrideAddress: liquidStakerOnStride.String(), // fallback address + IbcReceiver: forwardRecipientOnHost, + }, + expectedForwardChannelId: ibctesting.FirstChannelID, // default for host zone + }, + { + // Liquid stake and forward, using a custom channel ID + // Host Zone Channel: channel-1, Outbound Transfer Channel: channel-0 + name: "successful liquid stake and forward atom to osmo", + enabled: true, + liquidStakeDenom: Atom, + liquidStakeAmount: stakeAmount.String(), + autopilotMetadata: types.StakeibcPacketMetadata{ + StrideAddress: liquidStakerOnStride.String(), // fallback address + IbcReceiver: forwardRecipientOnHost, + TransferChannel: "channel-0", // custom channel (different than host channel below) + }, + inboundTransferChannnelId: "channel-1", + hostZoneChannelID: "channel-1", + expectedForwardChannelId: "channel-0", + }, + { + // Error caused by autopilot disabled + name: "autopilot disabled", + enabled: false, + liquidStakeDenom: Atom, + liquidStakeAmount: stakeAmount.String(), + expectedError: "autopilot stakeibc routing is inactive", + }, + { + // Error caused an invalid amount in the packet + name: "invalid token amount", + enabled: true, + liquidStakeDenom: Atom, + liquidStakeAmount: "", + expectedError: "not a parsable amount field", + }, + { + // Error caused by the transfer of a non-native token + // (i.e. a token that originated on stride) + name: "unable to liquid stake native token", + enabled: true, + liquidStakeDenom: Strd, + liquidStakeAmount: stakeAmount.String(), + expectedError: "native token is not supported for liquid staking", + }, + { + // Error caused by the transfer of non-host zone token + name: "unable to liquid stake non-host zone token", + enabled: true, + liquidStakeDenom: Osmo, + liquidStakeAmount: stakeAmount.String(), + expectedError: "No HostZone for uosmo denom found", + }, + { + // Error caused by a mismatched IBC denom + // Invoked by specifiying a different host zone channel ID + name: "ibc denom does not match host zone", + enabled: true, + liquidStakeDenom: Atom, + liquidStakeAmount: stakeAmount.String(), + hostZoneChannelID: "channel-0", + inboundTransferChannnelId: "channel-1", // Different than host zone + expectedError: "is not equal to host zone ibc denom", + }, + { + // Error caused by a failed validate basic before the liquid stake + // Invoked by passing a negative amount + name: "failed liquid stake validate basic", + enabled: true, + liquidStakeDenom: Atom, + liquidStakeAmount: "-10000", + expectedError: "amount liquid staked must be positive and nonzero", + }, + { + // Error caused by a failed liquid stake + // Invoked by trying to liquid stake more tokens than the staker has available + name: "failed to liquid stake", + enabled: true, + liquidStakeDenom: Atom, + liquidStakeAmount: stakeAmount.Add(sdkmath.NewInt(100000)).String(), // greater than balance + expectedError: "failed to liquid stake", + }, + { + // Failed to send transfer during forwarding step + // Invoked by specifying a non-existent channel ID + name: "failed to forward transfer", + enabled: true, + liquidStakeDenom: Atom, + liquidStakeAmount: stakeAmount.String(), + autopilotMetadata: types.StakeibcPacketMetadata{ + IbcReceiver: forwardRecipientOnHost, + TransferChannel: "channel-100", // does not exist + }, + expectedError: "failed to submit transfer during autopilot liquid stake and forward", + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + // Fill in the default channel ID's if they weren't specified + if tc.hostZoneChannelID == "" { + tc.hostZoneChannelID = ibctesting.FirstChannelID + } + if tc.inboundTransferChannnelId == "" { + tc.inboundTransferChannnelId = ibctesting.FirstChannelID + } + + transferMetadata := transfertypes.FungibleTokenPacketData{ + Denom: ReceivePacketDenomTraces[tc.liquidStakeDenom], + Amount: tc.liquidStakeAmount, + Receiver: liquidStakerOnStride.String(), + } + packet := channeltypes.Packet{ + SourcePort: transfertypes.PortID, + SourceChannel: SourceChannelOnHost, + DestinationPort: transfertypes.PortID, + DestinationChannel: tc.inboundTransferChannnelId, + } + + s.SetupTest() + nativeTokenIBCDenom := s.SetupAutopilotLiquidStake(tc.enabled, tc.hostZoneChannelID, depositAddress, liquidStakerOnStride) + + // Since this tested function is normally downstream of the inbound IBC transfer, + // we have to fund the staker with ibc/atom before calling this function so + // they can liquid stake + s.FundAccount(liquidStakerOnStride, sdk.NewCoin(nativeTokenIBCDenom, stakeAmount)) + + err := s.App.AutopilotKeeper.TryLiquidStaking(s.Ctx, packet, transferMetadata, tc.autopilotMetadata) + + if tc.expectedError == "" { + s.Require().NoError(err, "%s - no error expected when attempting liquid stake", tc.name) + s.CheckLiquidStakeSucceeded( + stakeAmount, + liquidStakerOnStride, + depositAddress, + nativeTokenIBCDenom, + tc.expectedForwardChannelId, + ) + } else { + s.Require().ErrorContains(err, tc.expectedError, tc.name) + } + }) + } +} + +// Tests the full OnRecvPacket callback, with liquid staking specific test cases +func (s *KeeperTestSuite) TestOnRecvPacket_LiquidStake() { + liquidStakerOnStride := s.TestAccs[0] + depositAddress := s.TestAccs[1] + differentAddress := s.TestAccs[2].String() + forwardRecipientOnHost := HostAddress + + stakeAmount := sdkmath.NewInt(1000000) + + testCases := []struct { + name string + enabled bool + liquidStakeDenom string + transferReceiver string + transferMemo string + hostZoneChannelID string // defaults to channel-0 if not specified + inboundTransferChannnelId string // defaults to channel-0 if not specified + expectedForwardChannelId string // defaults to empty (no forwarding) + expectedSuccess bool + expectedLiquidStake bool + }{ + { + name: "successful liquid stake", + enabled: true, + liquidStakeDenom: Atom, + transferReceiver: liquidStakerOnStride.String(), + transferMemo: getLiquidStakePacketMetadata(liquidStakerOnStride.String(), "", ""), + expectedSuccess: true, + expectedLiquidStake: true, + }, + { + name: "successful liquid stake and forward to default host", + enabled: true, + liquidStakeDenom: Atom, + transferReceiver: liquidStakerOnStride.String(), + transferMemo: getLiquidStakePacketMetadata(liquidStakerOnStride.String(), forwardRecipientOnHost, ""), + expectedForwardChannelId: ibctesting.FirstChannelID, + expectedSuccess: true, + expectedLiquidStake: true, + }, + { + name: "successful liquid stake and forward to custom transfer channel", + enabled: true, + liquidStakeDenom: Atom, + transferReceiver: liquidStakerOnStride.String(), + transferMemo: getLiquidStakePacketMetadata(liquidStakerOnStride.String(), forwardRecipientOnHost, "channel-0"), + hostZoneChannelID: "channel-1", + inboundTransferChannnelId: "channel-1", + expectedForwardChannelId: "channel-0", // different than host zone, specified in memo + expectedSuccess: true, + expectedLiquidStake: true, + }, + { + name: "normal transfer with no liquid stake", + enabled: true, + liquidStakeDenom: Atom, + transferReceiver: liquidStakerOnStride.String(), + transferMemo: "", + expectedSuccess: true, + expectedLiquidStake: false, + }, + { + name: "autopilot disabled", + enabled: false, + liquidStakeDenom: Atom, + transferReceiver: liquidStakerOnStride.String(), + transferMemo: getLiquidStakePacketMetadata(liquidStakerOnStride.String(), "", ""), + expectedSuccess: false, + }, + { + name: "invalid stride address (receiver)", + enabled: true, + liquidStakeDenom: Osmo, + transferReceiver: getLiquidStakePacketMetadata("XXX", "", ""), + transferMemo: "", + expectedSuccess: false, + }, + { + name: "invalid stride address (memo)", + enabled: true, + liquidStakeDenom: Osmo, + transferReceiver: liquidStakerOnStride.String(), + transferMemo: getLiquidStakePacketMetadata("XXX", "", ""), + expectedSuccess: false, + }, + { + name: "memo and transfer address mismatch", + enabled: true, + liquidStakeDenom: Osmo, + transferReceiver: liquidStakerOnStride.String(), + transferMemo: getLiquidStakePacketMetadata(differentAddress, "", ""), + expectedSuccess: false, + }, + { + name: "not host denom", + enabled: true, + liquidStakeDenom: Osmo, + transferReceiver: liquidStakerOnStride.String(), + transferMemo: getLiquidStakePacketMetadata(liquidStakerOnStride.String(), "", ""), + expectedSuccess: false, + }, + { + name: "failed to outbound transfer", + enabled: true, + liquidStakeDenom: Atom, + transferReceiver: liquidStakerOnStride.String(), + transferMemo: getLiquidStakePacketMetadata(liquidStakerOnStride.String(), forwardRecipientOnHost, "channel-999"), // channel DNE + expectedSuccess: false, + }, + { + name: "valid uatom token from invalid channel", + enabled: true, + liquidStakeDenom: Atom, + transferReceiver: liquidStakerOnStride.String(), + transferMemo: getLiquidStakePacketMetadata(liquidStakerOnStride.String(), "", ""), + hostZoneChannelID: "channel-0", + inboundTransferChannnelId: "channel-999", // channel DNE + expectedSuccess: false, + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + s.SetupTest() // reset + + // Fill in the default channel ID's if they weren't specified + if tc.hostZoneChannelID == "" { + tc.hostZoneChannelID = ibctesting.FirstChannelID + } + if tc.inboundTransferChannnelId == "" { + tc.inboundTransferChannnelId = ibctesting.FirstChannelID + } + + transferMetadata := transfertypes.FungibleTokenPacketData{ + Sender: HostAddress, + Receiver: tc.transferReceiver, + Denom: ReceivePacketDenomTraces[tc.liquidStakeDenom], + Amount: stakeAmount.String(), + Memo: tc.transferMemo, + } + packet := channeltypes.Packet{ + SourcePort: transfertypes.PortID, + SourceChannel: SourceChannelOnHost, + DestinationPort: transfertypes.PortID, + DestinationChannel: tc.inboundTransferChannnelId, + Data: transfertypes.ModuleCdc.MustMarshalJSON(&transferMetadata), + } + + nativeTokenIBCDenom := s.SetupAutopilotLiquidStake(tc.enabled, tc.hostZoneChannelID, depositAddress, liquidStakerOnStride) + + transferIBCModule := transfer.NewIBCModule(s.App.TransferKeeper) + recordsStack := recordsmodule.NewIBCModule(s.App.RecordsKeeper, transferIBCModule) + routerIBCModule := autopilot.NewIBCModule(s.App.AutopilotKeeper, recordsStack) + ack := routerIBCModule.OnRecvPacket( + s.Ctx, + packet, + s.TestAccs[2], // arbitrary relayer address - not actually used + ) + + if tc.expectedSuccess { + s.Require().True(ack.Success(), "ack should be successful - ack: %+v", string(ack.Acknowledgement())) + + if tc.expectedLiquidStake { + s.CheckLiquidStakeSucceeded( + stakeAmount, + liquidStakerOnStride, + depositAddress, + nativeTokenIBCDenom, + tc.expectedForwardChannelId, + ) + } + } else { + s.Require().False(ack.Success(), "ack should have failed - ack: %+v", string(ack.Acknowledgement())) + } + }) + } +} diff --git a/x/autopilot/keeper/params.go b/x/autopilot/keeper/params.go new file mode 100644 index 00000000000..f1f44ab1e2c --- /dev/null +++ b/x/autopilot/keeper/params.go @@ -0,0 +1,18 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/autopilot/types" +) + +// GetParams get all parameters as types.Params +func (k Keeper) GetParams(ctx sdk.Context) (params types.Params) { + k.paramstore.GetParamSet(ctx, ¶ms) + return params +} + +// SetParams set the params +func (k Keeper) SetParams(ctx sdk.Context, params types.Params) { + k.paramstore.SetParamSet(ctx, ¶ms) +} diff --git a/x/autopilot/keeper/params_test.go b/x/autopilot/keeper/params_test.go new file mode 100644 index 00000000000..e98ede94bb7 --- /dev/null +++ b/x/autopilot/keeper/params_test.go @@ -0,0 +1,15 @@ +package keeper_test + +import ( + "github.com/osmosis-labs/osmosis/v27/x/autopilot/types" +) + +func (s *KeeperTestSuite) TestGetParams() { + params := types.DefaultParams() + params.StakeibcActive = false + params.ClaimActive = true + + s.App.AutopilotKeeper.SetParams(s.Ctx, params) + + s.Require().Equal(params, s.App.AutopilotKeeper.GetParams(s.Ctx)) +} diff --git a/x/autopilot/keeper/redeem_stake.go b/x/autopilot/keeper/redeem_stake.go new file mode 100644 index 00000000000..496b7909f1d --- /dev/null +++ b/x/autopilot/keeper/redeem_stake.go @@ -0,0 +1,80 @@ +package keeper + +import ( + "fmt" + + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + "github.com/osmosis-labs/osmosis/v27/x/autopilot/types" + stakeibckeeper "github.com/osmosis-labs/osmosis/v27/x/stakeibc/keeper" + stakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func (k Keeper) TryRedeemStake( + ctx sdk.Context, + packet channeltypes.Packet, + transferPacketData transfertypes.FungibleTokenPacketData, + autopilotMetadata types.StakeibcPacketMetadata, +) error { + params := k.GetParams(ctx) + if !params.StakeibcActive { + return fmt.Errorf("packet forwarding param is not active") + } + + // At this point in the stack, the denom's in the packet data appear as they existed on the sender zone, + // but as a denom trace instead of a hash + // Meaning, for native stTokens, the port and channel on the host zone are part of the denom + // (e.g. transfer/{channel-on-hub}/stuatom) + // Only stride native stTokens can be redeemed, so we confirm that the denom's prefix matches + // the packet's "source" channel (i.e. the channel on the host zone) + if !transfertypes.ReceiverChainIsSource(packet.GetSourcePort(), packet.GetSourceChannel(), transferPacketData.Denom) { + return fmt.Errorf("the ibc token %s is not supported for redeem stake", transferPacketData.Denom) + } + + voucherPrefix := transfertypes.GetDenomPrefix(packet.GetSourcePort(), packet.GetSourceChannel()) + stAssetDenom := transferPacketData.Denom[len(voucherPrefix):] + if !k.stakeibcKeeper.CheckIsStToken(ctx, stAssetDenom) { + return fmt.Errorf("not a liquid staking token") + } + + hostZoneDenom := stakeibctypes.HostZoneDenomFromStAssetDenom(stAssetDenom) + + amount, ok := sdkmath.NewIntFromString(transferPacketData.Amount) + if !ok { + return fmt.Errorf("not a parsable amount field") + } + + strideAddress := transferPacketData.Receiver + redemptionReceiver := autopilotMetadata.IbcReceiver + + return k.RunRedeemStake(ctx, strideAddress, redemptionReceiver, hostZoneDenom, amount) +} + +func (k Keeper) RunRedeemStake(ctx sdk.Context, strideAddress string, redemptionReceiver string, hostZoneDenom string, amount sdkmath.Int) error { + hostZone, err := k.stakeibcKeeper.GetHostZoneFromHostDenom(ctx, hostZoneDenom) + if err != nil { + return err + } + + msg := &stakeibctypes.MsgRedeemStake{ + Creator: strideAddress, + Amount: amount, + HostZone: hostZone.ChainId, + Receiver: redemptionReceiver, + } + + if err := msg.ValidateBasic(); err != nil { + return err + } + + msgServer := stakeibckeeper.NewMsgServerImpl(k.stakeibcKeeper) + if _, err = msgServer.RedeemStake(ctx, msg); err != nil { + return errorsmod.Wrapf(err, "redeem stake failed") + } + + return nil +} diff --git a/x/autopilot/keeper/redeem_stake_test.go b/x/autopilot/keeper/redeem_stake_test.go new file mode 100644 index 00000000000..e71a7db6c46 --- /dev/null +++ b/x/autopilot/keeper/redeem_stake_test.go @@ -0,0 +1,444 @@ +package keeper_test + +import ( + "fmt" + + sdkmath "cosmossdk.io/math" + "github.com/cosmos/ibc-go/v8/modules/apps/transfer" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + + recordsmodule "github.com/osmosis-labs/osmosis/v27/x/records" + + sdk "github.com/cosmos/cosmos-sdk/types" + + router "github.com/osmosis-labs/osmosis/v27/x/autopilot" + "github.com/osmosis-labs/osmosis/v27/x/autopilot/types" + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + recordstypes "github.com/osmosis-labs/osmosis/v27/x/records/types" + stakeibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" +) + +func getRedeemStakeStakeibcPacketMetadata(strideAddress, redemptionReceiver string) string { + return fmt.Sprintf(` + { + "autopilot": { + "receiver": "%[1]s", + "stakeibc": { "action": "RedeemStake", "ibc_receiver": "%[2]s" } + } + }`, strideAddress, redemptionReceiver) +} + +// Helper function to mock out all the state needed to test redeem stake +// The state is mocked out with an atom host zone +func (s *KeeperTestSuite) SetupAutopilotRedeemStake(featureEnabled bool, redeemAmount sdkmath.Int, depositAddress, redeemerOnStride sdk.AccAddress) { + // Set whether the feature is active + params := s.App.AutopilotKeeper.GetParams(s.Ctx) + params.StakeibcActive = featureEnabled + s.App.AutopilotKeeper.SetParams(s.Ctx, params) + + // set epoch tracker to look up epoch unbonding record + s.App.StakeibcKeeper.SetEpochTracker(s.Ctx, stakeibctypes.EpochTracker{ + EpochIdentifier: epochtypes.DAY_EPOCH, + EpochNumber: 1, + }) + + // set epoch unbonding record which will store the new user redemption record + s.App.RecordsKeeper.SetEpochUnbondingRecord(s.Ctx, recordstypes.EpochUnbondingRecord{ + EpochNumber: 1, + HostZoneUnbondings: []*recordstypes.HostZoneUnbonding{ + { + HostZoneId: HostChainId, + UserRedemptionRecords: []string{}, + NativeTokenAmount: sdkmath.NewInt(1000000), + }, + }, + }) + + // store the host zone + s.App.StakeibcKeeper.SetHostZone(s.Ctx, stakeibctypes.HostZone{ + ChainId: HostChainId, + Bech32Prefix: HostBechPrefix, // required to validate claim receiver + HostDenom: HostDenom, + RedemptionRate: sdkmath.LegacyNewDec(1), // used to determine native token amount + DepositAddress: depositAddress.String(), + TotalDelegations: redeemAmount, // there must be enough stake to cover the redemption + RedemptionsEnabled: true, + }) + + // fund the user with sttokens so they can redeem + // (the function being tested is invoked downstream of the IBC transfer) + s.FundAccount(redeemerOnStride, sdk.NewCoin("st"+HostDenom, redeemAmount)) +} + +// Helper function to confirm that an autopilot redemption succeeded by confirming a redemption +// record was created and tokens were escrowed in the deposit account +func (s *KeeperTestSuite) CheckRedeemStakeSucceeded(redeemAmount sdkmath.Int, redeemDenom string, depositAddress sdk.AccAddress) { + // check if redeem record is created + hostZoneUnbonding, found := s.App.RecordsKeeper.GetHostZoneUnbondingByChainId(s.Ctx, 1, HostChainId) + s.Require().True(found) + s.Require().True(len(hostZoneUnbonding.UserRedemptionRecords) > 0, + "user redemption record should have been created") + + // check that tokens were escrowed + escrowBalance := s.App.BankKeeper.GetBalance(s.Ctx, depositAddress, redeemDenom) + s.Require().Equal(redeemAmount.Int64(), escrowBalance.Amount.Int64(), "tokens should have been escrowed") +} + +func (s *KeeperTestSuite) TestTryRedeemStake() { + redeemerOnStride := s.TestAccs[0] + depositAddress := s.TestAccs[1] + redeemerOnHost := HostAddress + + redeemAmount := sdkmath.NewInt(1000000) + + strideToHubChannel := "channel-0" + hubToStrideChannel := "channel-1" + + packet := channeltypes.Packet{ + SourcePort: transfertypes.PortID, + SourceChannel: hubToStrideChannel, + DestinationPort: transfertypes.PortID, + DestinationChannel: strideToHubChannel, + } + + // Building on expected denom's in the packet data below - this is all assuming the packet has been sent to stride + // For host zone tokens, since stride is the first hop, there's no port/channel in the denom trace path + atom := "uatom" + atomTrace := atom + + // For strd, the hub's channel ID would have been appended to the denom trace + strd := "ustrd" + strdTrace := transfertypes.GetPrefixedDenom(transfertypes.PortID, hubToStrideChannel, strd) + + // Similarly for stTokens, the hub's channel ID would be appended + stAtom := "stuatom" + stAtomTrace := transfertypes.GetPrefixedDenom(transfertypes.PortID, hubToStrideChannel, stAtom) + + // StOsmo will have a valid denom but no host zone + stOsmo := "stuosmo" + stOsmoTrace := transfertypes.GetPrefixedDenom(transfertypes.PortID, hubToStrideChannel, stOsmo) + + testCases := []struct { + name string + enabled bool + redeemDenom string + packetData transfertypes.FungibleTokenPacketData + packetMetadata types.StakeibcPacketMetadata + expectedError string + }{ + { + name: "successful redemption with stuatom", + enabled: true, + redeemDenom: stAtom, + packetData: transfertypes.FungibleTokenPacketData{ + Denom: stAtomTrace, + Amount: redeemAmount.String(), + Receiver: redeemerOnStride.String(), + }, + packetMetadata: types.StakeibcPacketMetadata{ + Action: types.RedeemStake, + IbcReceiver: redeemerOnHost, + }, + }, + { + name: "failed because param not enabled", + enabled: false, + redeemDenom: stAtom, + packetData: transfertypes.FungibleTokenPacketData{ + Denom: stAtomTrace, + Amount: redeemAmount.String(), + Receiver: redeemerOnStride.String(), + }, + packetMetadata: types.StakeibcPacketMetadata{ + Action: types.RedeemStake, + IbcReceiver: redeemerOnHost, + }, + expectedError: "packet forwarding param is not active", + }, + { + name: "failed redemption with atom", + enabled: true, + redeemDenom: atom, + packetData: transfertypes.FungibleTokenPacketData{ + Denom: atomTrace, + Amount: redeemAmount.String(), + Receiver: redeemerOnStride.String(), + }, + packetMetadata: types.StakeibcPacketMetadata{ + Action: types.RedeemStake, + IbcReceiver: redeemerOnHost, + }, + expectedError: "the ibc token uatom is not supported for redeem stake", + }, + { + name: "failed redemption with ustrd", + enabled: true, + redeemDenom: strd, + packetData: transfertypes.FungibleTokenPacketData{ + Denom: strdTrace, + Amount: redeemAmount.String(), + Receiver: redeemerOnStride.String(), + }, + packetMetadata: types.StakeibcPacketMetadata{ + Action: types.RedeemStake, + IbcReceiver: redeemerOnHost, + }, + expectedError: "not a liquid staking token", + }, + { + name: "failed to parse amount", + enabled: true, + redeemDenom: stAtom, + packetData: transfertypes.FungibleTokenPacketData{ + Denom: stAtomTrace, + Amount: "XXX", + Receiver: redeemerOnStride.String(), + }, + packetMetadata: types.StakeibcPacketMetadata{ + Action: types.RedeemStake, + IbcReceiver: redeemerOnHost, + }, + expectedError: "not a parsable amount field", + }, + { + name: "negative amount", + enabled: true, + redeemDenom: stAtom, + packetData: transfertypes.FungibleTokenPacketData{ + Denom: stAtomTrace, + Amount: "-1000", + Receiver: redeemerOnStride.String(), + }, + packetMetadata: types.StakeibcPacketMetadata{ + Action: types.RedeemStake, + IbcReceiver: redeemerOnHost, + }, + expectedError: "invalid amount", + }, + { + name: "not a host zone denom", + enabled: true, + redeemDenom: stOsmo, + packetData: transfertypes.FungibleTokenPacketData{ + Denom: stOsmoTrace, + Amount: redeemAmount.String(), + Receiver: redeemerOnStride.String(), + }, + packetMetadata: types.StakeibcPacketMetadata{ + Action: types.RedeemStake, + IbcReceiver: redeemerOnHost, + }, + expectedError: "not a liquid staking token", + }, + { + name: "invalid stride address", + enabled: true, + redeemDenom: stAtom, + packetData: transfertypes.FungibleTokenPacketData{ + Denom: stAtomTrace, + Amount: redeemAmount.String(), + Receiver: "", + }, + packetMetadata: types.StakeibcPacketMetadata{ + Action: types.RedeemStake, + IbcReceiver: redeemerOnHost, + }, + expectedError: "invalid creator address", + }, + { + name: "invalid claim receiver", + enabled: true, + redeemDenom: stAtom, + packetData: transfertypes.FungibleTokenPacketData{ + Denom: stAtomTrace, + Amount: redeemAmount.String(), + Receiver: redeemerOnStride.String(), + }, + packetMetadata: types.StakeibcPacketMetadata{ + Action: types.RedeemStake, + IbcReceiver: "", + }, + expectedError: "receiver cannot be empty", + }, + { + name: "redeem msg failed", + enabled: true, + redeemDenom: stAtom, + packetData: transfertypes.FungibleTokenPacketData{ + Denom: stAtomTrace, + Amount: "100000000000000", // amount is too large - causes failure + Receiver: redeemerOnStride.String(), + }, + packetMetadata: types.StakeibcPacketMetadata{ + Action: types.RedeemStake, + IbcReceiver: redeemerOnHost, + }, + expectedError: "redeem stake failed", + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + s.SetupAutopilotRedeemStake(tc.enabled, redeemAmount, depositAddress, redeemerOnStride) + + err := s.App.AutopilotKeeper.TryRedeemStake(s.Ctx, packet, tc.packetData, tc.packetMetadata) + if tc.expectedError == "" { + s.Require().NoError(err, "%s - no error expected when attempting redeem stake", tc.name) + + s.CheckRedeemStakeSucceeded(redeemAmount, tc.redeemDenom, depositAddress) + } else { + s.Require().ErrorContains(err, tc.expectedError, tc.name) + } + }) + } +} + +// TODO: Move to ibc_test.go when OnRecvPacket is moved +func (s *KeeperTestSuite) TestOnRecvPacket_RedeemStake() { + redeemerOnStride := s.TestAccs[0] + depositAddress := s.TestAccs[1] + differentAddress := s.TestAccs[2].String() + redeemerOnHost := HostAddress + + redeemAmount := sdkmath.NewInt(1000000) + + strideToHubChannel := "channel-0" + hubToStrideChannel := "channel-1" + + packet := channeltypes.Packet{ + SourcePort: transfertypes.PortID, + SourceChannel: hubToStrideChannel, + DestinationPort: transfertypes.PortID, + DestinationChannel: strideToHubChannel, + } + + // For stTokens, the hub's channel ID would have been appended to the denom trace + stAtom := "stuatom" + stAtomTrace := transfertypes.GetPrefixedDenom(transfertypes.PortID, hubToStrideChannel, stAtom) + + testCases := []struct { + name string + enabled bool + packetData transfertypes.FungibleTokenPacketData + expSuccess bool + }{ + { + name: "successful redemption", + enabled: true, + packetData: transfertypes.FungibleTokenPacketData{ + Denom: stAtomTrace, + Amount: redeemAmount.String(), + Sender: redeemerOnHost, + Receiver: redeemerOnStride.String(), + Memo: getRedeemStakeStakeibcPacketMetadata(redeemerOnStride.String(), redeemerOnHost), + }, + expSuccess: true, + }, + { + name: "failed because param not enabled", + enabled: false, + packetData: transfertypes.FungibleTokenPacketData{ + Denom: stAtomTrace, + Amount: redeemAmount.String(), + Sender: redeemerOnHost, + Receiver: redeemerOnStride.String(), + Memo: getRedeemStakeStakeibcPacketMetadata(redeemerOnStride.String(), redeemerOnHost), + }, + expSuccess: false, + }, + { + name: "failed because invalid stride address in memo", + enabled: true, + packetData: transfertypes.FungibleTokenPacketData{ + Denom: stAtomTrace, + Amount: redeemAmount.String(), + Sender: "cosmos16plylpsgxechajltx9yeseqexzdzut9g8vla4k", + Receiver: redeemerOnStride.String(), + Memo: getRedeemStakeStakeibcPacketMetadata("XXX", redeemerOnHost), + }, + expSuccess: false, + }, + { + name: "failed because invalid stride address in reciever", + enabled: true, + packetData: transfertypes.FungibleTokenPacketData{ + Denom: stAtomTrace, + Amount: redeemAmount.String(), + Sender: "cosmos16plylpsgxechajltx9yeseqexzdzut9g8vla4k", + Receiver: "XXX", + Memo: getRedeemStakeStakeibcPacketMetadata(redeemerOnStride.String(), redeemerOnHost), + }, + expSuccess: false, + }, + { + name: "failed because transfer receiver address does not match memo receiver", + enabled: true, + packetData: transfertypes.FungibleTokenPacketData{ + Denom: stAtomTrace, + Amount: redeemAmount.String(), + Sender: "cosmos16plylpsgxechajltx9yeseqexzdzut9g8vla4k", + Receiver: differentAddress, + Memo: getRedeemStakeStakeibcPacketMetadata(redeemerOnStride.String(), redeemerOnHost), + }, + expSuccess: false, + }, + { + name: "failed because not stride address", + enabled: true, + packetData: transfertypes.FungibleTokenPacketData{ + Denom: stAtomTrace, + Amount: redeemAmount.String(), + Sender: "cosmos16plylpsgxechajltx9yeseqexzdzut9g8vla4k", + Receiver: getRedeemStakeStakeibcPacketMetadata("osmo15440wjgs208zm6dz8wvk23z5lmcx9hyxk0ew3c", redeemerOnHost), + Memo: "", + }, + expSuccess: false, + }, + { + name: "failed because invalid redeem address", + enabled: true, + packetData: transfertypes.FungibleTokenPacketData{ + Denom: stAtomTrace, + Amount: redeemAmount.String(), + Sender: "cosmos16plylpsgxechajltx9yeseqexzdzut9g8vla4k", + Receiver: getRedeemStakeStakeibcPacketMetadata(redeemerOnStride.String(), "XXX"), + Memo: "", + }, + expSuccess: false, + }, + } + + for _, tc := range testCases { + s.Run(tc.name, func() { + s.SetupTest() // required since testing full ibc module + + s.SetupAutopilotRedeemStake(tc.enabled, redeemAmount, depositAddress, redeemerOnStride) + + // send tokens to ibc transfer channel escrow address + stAtomCoin := sdk.NewInt64Coin(stAtom, 1000000) + escrowAddr := transfertypes.GetEscrowAddress(packet.DestinationPort, packet.DestinationChannel) + s.FundAccount(escrowAddr, stAtomCoin) + s.App.TransferKeeper.SetTotalEscrowForDenom(s.Ctx, stAtomCoin) + + transferIBCModule := transfer.NewIBCModule(s.App.TransferKeeper) + recordsStack := recordsmodule.NewIBCModule(s.App.RecordsKeeper, transferIBCModule) + routerIBCModule := router.NewIBCModule(s.App.AutopilotKeeper, recordsStack) + + packet.Data = transfertypes.ModuleCdc.MustMarshalJSON(&tc.packetData) + ack := routerIBCModule.OnRecvPacket( + s.Ctx, + packet, + s.TestAccs[2], + ) + + if tc.expSuccess { + s.Require().True(ack.Success(), string(ack.Acknowledgement())) + + s.CheckRedeemStakeSucceeded(redeemAmount, stAtom, depositAddress) + } else { + s.Require().False(ack.Success(), string(ack.Acknowledgement())) + } + }) + } +} diff --git a/x/autopilot/module.go b/x/autopilot/module.go new file mode 100644 index 00000000000..c7efb623f29 --- /dev/null +++ b/x/autopilot/module.go @@ -0,0 +1,159 @@ +package autopilot + +import ( + "context" + "encoding/json" + "fmt" + + "cosmossdk.io/core/appmodule" + "github.com/gorilla/mux" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + + "github.com/osmosis-labs/osmosis/v27/x/autopilot/client/cli" + "github.com/osmosis-labs/osmosis/v27/x/autopilot/keeper" + "github.com/osmosis-labs/osmosis/v27/x/autopilot/types" +) + +var ( + _ module.AppModuleBasic = AppModuleBasic{} + _ module.HasGenesisBasics = AppModuleBasic{} + + _ appmodule.AppModule = AppModule{} + + _ module.HasConsensusVersion = AppModule{} + _ module.HasGenesis = AppModule{} + _ module.HasServices = AppModule{} +) + +// ---------------------------------------------------------------------------- +// AppModuleBasic +// ---------------------------------------------------------------------------- + +// AppModuleBasic implements the AppModuleBasic interface for the capability module. +type AppModuleBasic struct { + cdc codec.BinaryCodec +} + +func NewAppModuleBasic(cdc codec.BinaryCodec) AppModuleBasic { + return AppModuleBasic{cdc: cdc} +} + +// Name returns the capability module's name. +func (AppModuleBasic) Name() string { + return types.ModuleName +} + +func (AppModuleBasic) RegisterCodec(cdc *codec.LegacyAmino) { + types.RegisterCodec(cdc) +} + +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + types.RegisterCodec(cdc) +} + +// RegisterInterfaces registers the module's interface types +func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { + types.RegisterInterfaces(reg) +} + +// DefaultGenesis returns the capability module's default genesis state. +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return cdc.MustMarshalJSON(types.DefaultGenesis()) +} + +// ValidateGenesis performs genesis state validation for the capability module. +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { + var genState types.GenesisState + if err := cdc.UnmarshalJSON(bz, &genState); err != nil { + return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) + } + return genState.Validate() +} + +// RegisterRESTRoutes registers the capability module's REST service handlers. +func (AppModuleBasic) RegisterRESTRoutes(clientCtx client.Context, rtr *mux.Router) { +} + +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { + if err := types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)); err != nil { + panic(err) + } +} + +// GetTxCmd returns the capability module's root tx command. +func (a AppModuleBasic) GetTxCmd() *cobra.Command { + return nil +} + +// GetQueryCmd returns the capability module's root query command. +func (AppModuleBasic) GetQueryCmd() *cobra.Command { + return cli.GetQueryCmd(types.StoreKey) +} + +// ---------------------------------------------------------------------------- +// AppModule +// ---------------------------------------------------------------------------- + +// AppModule implements the AppModule interface for the capability module. +type AppModule struct { + AppModuleBasic + + keeper keeper.Keeper +} + +func NewAppModule( + cdc codec.Codec, + keeper keeper.Keeper, +) AppModule { + return AppModule{ + AppModuleBasic: NewAppModuleBasic(cdc), + keeper: keeper, + } +} + +// Name returns the capability module's name. +func (am AppModule) Name() string { + return am.AppModuleBasic.Name() +} + +// QuerierRoute returns the capability module's query routing key. +func (AppModule) QuerierRoute() string { return types.QuerierRoute } + +// RegisterServices registers a GRPC query service to respond to the +// module-specific GRPC queries. +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterQueryServer(cfg.QueryServer(), am.keeper) +} + +// RegisterInvariants registers the capability module's invariants. +func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} + +// InitGenesis performs the capability module's genesis initialization +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) { + var genState types.GenesisState + cdc.MustUnmarshalJSON(gs, &genState) + am.keeper.InitGenesis(ctx, genState) +} + +// ExportGenesis returns the capability module's exported genesis state as raw JSON bytes. +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + genState := am.keeper.ExportGenesis(ctx) + return cdc.MustMarshalJSON(genState) +} + +// ConsensusVersion implements ConsensusVersion. +func (AppModule) ConsensusVersion() uint64 { return 1 } + +// IsOnePerModuleType implements the depinject.OnePerModuleType interface. +func (am AppModule) IsOnePerModuleType() {} + +// IsAppModule implements the appmodule.AppModule interface. +func (am AppModule) IsAppModule() {} diff --git a/x/autopilot/module_ibc.go b/x/autopilot/module_ibc.go new file mode 100644 index 00000000000..1de70e9db49 --- /dev/null +++ b/x/autopilot/module_ibc.go @@ -0,0 +1,319 @@ +package autopilot + +import ( + "fmt" + + errorsmod "cosmossdk.io/errors" + + sdk "github.com/cosmos/cosmos-sdk/types" + capabilitytypes "github.com/cosmos/ibc-go/modules/capability/types" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" + channeltypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" + + "github.com/osmosis-labs/osmosis/v27/x/autopilot/keeper" + "github.com/osmosis-labs/osmosis/v27/x/autopilot/types" + + ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" +) + +const ( + MaxMemoCharLength = 4000 + MaxReceiverCharLength = 100 +) + +// IBC MODULE IMPLEMENTATION +// IBCModule implements the ICS26 interface for transfer given the transfer keeper. +// TODO: Use IBCMiddleware struct +type IBCModule struct { + keeper keeper.Keeper + app porttypes.IBCModule +} + +// NewIBCModule creates a new IBCModule given the keeper +func NewIBCModule(k keeper.Keeper, app porttypes.IBCModule) IBCModule { + return IBCModule{ + keeper: k, + app: app, + } +} + +// OnChanOpenInit implements the IBCModule interface +func (im IBCModule) OnChanOpenInit( + ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID string, + channelID string, + channelCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, + version string, +) (string, error) { + return im.app.OnChanOpenInit( + ctx, + order, + connectionHops, + portID, + channelID, + channelCap, + counterparty, + version, + ) +} + +// OnChanOpenTry implements the IBCModule interface. +func (im IBCModule) OnChanOpenTry( + ctx sdk.Context, + order channeltypes.Order, + connectionHops []string, + portID, + channelID string, + chanCap *capabilitytypes.Capability, + counterparty channeltypes.Counterparty, + counterpartyVersion string, +) (string, error) { + return im.app.OnChanOpenTry(ctx, order, connectionHops, portID, channelID, chanCap, counterparty, counterpartyVersion) +} + +// OnChanOpenAck implements the IBCModule interface +func (im IBCModule) OnChanOpenAck( + ctx sdk.Context, + portID, + channelID string, + counterpartyChannelId string, + counterpartyVersion string, +) error { + return im.app.OnChanOpenAck(ctx, portID, channelID, counterpartyChannelId, counterpartyVersion) +} + +// OnChanOpenConfirm implements the IBCModule interface +func (im IBCModule) OnChanOpenConfirm( + ctx sdk.Context, + portID, + channelID string, +) error { + return im.app.OnChanOpenConfirm(ctx, portID, channelID) +} + +// OnChanCloseInit implements the IBCModule interface +func (im IBCModule) OnChanCloseInit( + ctx sdk.Context, + portID, + channelID string, +) error { + // doCustomLogic() + return im.app.OnChanCloseInit(ctx, portID, channelID) +} + +// OnChanCloseConfirm implements the IBCModule interface +func (im IBCModule) OnChanCloseConfirm( + ctx sdk.Context, + portID, + channelID string, +) error { + // doCustomLogic() + return im.app.OnChanCloseConfirm(ctx, portID, channelID) +} + +// OnRecvPacket implements the IBCModule interface. A successful acknowledgement +// is returned if the packet data is successfully decoded and the receive application +// logic returns without error. +// TODO: Move this to the keeper so there's more transparency into errors +// Otherwise, it's difficult to debug tests and it's unclear when there are false positive test cases +func (im IBCModule) OnRecvPacket( + ctx sdk.Context, + packet channeltypes.Packet, + relayer sdk.AccAddress, +) ibcexported.Acknowledgement { + im.keeper.Logger(ctx).Info(fmt.Sprintf("OnRecvPacket (autopilot): Sequence: %d, Source: %s, %s; Destination: %s, %s", + packet.Sequence, packet.SourcePort, packet.SourceChannel, packet.DestinationPort, packet.DestinationChannel)) + + // NOTE: acknowledgement will be written synchronously during IBC handler execution. + var tokenPacketData transfertypes.FungibleTokenPacketData + if err := transfertypes.ModuleCdc.UnmarshalJSON(packet.GetData(), &tokenPacketData); err != nil { + return channeltypes.NewErrorAcknowledgement(err) + } + + // Error any transactions with a Memo or Receiver field are greater than the max characters + if len(tokenPacketData.Memo) > MaxMemoCharLength { + return channeltypes.NewErrorAcknowledgement(errorsmod.Wrapf(types.ErrInvalidMemoLength, "memo length: %d", len(tokenPacketData.Memo))) + } + if len(tokenPacketData.Receiver) > MaxReceiverCharLength { + return channeltypes.NewErrorAcknowledgement(errorsmod.Wrapf(types.ErrInvalidReceiverLength, "receiver length: %d", len(tokenPacketData.Receiver))) + } + + // The receiver must always be a valid address + // In the case of autopilot, this address is also duplicated in the autopilot payload + if _, err := sdk.AccAddressFromBech32(tokenPacketData.Receiver); err != nil { + return channeltypes.NewErrorAcknowledgement(errorsmod.Wrap(types.ErrInvalidReceiverAddress, tokenPacketData.Receiver)) + } + + // If a valid receiver address has been provided and no memo, + // this is clearly just an normal IBC transfer + // Pass down the stack immediately instead of parsing + if tokenPacketData.Memo == "" { + return im.app.OnRecvPacket(ctx, packet, relayer) + } + + // parse out any autopilot forwarding info + autopilotMetadata, err := types.ParseAutopilotMetadata(tokenPacketData.Memo) + if err != nil { + return channeltypes.NewErrorAcknowledgement(err) + } + + // If the parsed metadata is nil, that means there is no autopilot forwarding logic + // Pass the packet down to the next middleware + // PFM packets will also go down this path + if autopilotMetadata == nil { + return im.app.OnRecvPacket(ctx, packet, relayer) + } + + //// At this point, we are officially dealing with an autopilot packet + + // Confirm the receiver in the autopilot metadata matched the transfer receiver + if tokenPacketData.Receiver != autopilotMetadata.Receiver { + return channeltypes.NewErrorAcknowledgement(errorsmod.Wrapf(types.ErrInvalidReceiverAddress, + "the transfer receiver (%s) must match the autopilot receiver (%s)", + tokenPacketData.Receiver, autopilotMetadata.Receiver)) + } + + // For autopilot liquid stake and forward, we'll override the receiver with a hashed address + // The hashed address will also be the sender of the outbound transfer + // This is to prevent impersonation at downstream zones + // We can identify the forwarding step by whether there's a non-empty IBC receiver field + if routingInfo, ok := autopilotMetadata.RoutingInfo.(types.StakeibcPacketMetadata); ok && + routingInfo.Action == types.LiquidStake && routingInfo.IbcReceiver != "" { + + var err error + hashedReceiver, err := types.GenerateHashedAddress(packet.DestinationChannel, tokenPacketData.Sender) + if err != nil { + return channeltypes.NewErrorAcknowledgement(err) + } + tokenPacketData.Receiver = hashedReceiver + } + + // Now that the receiver's been updated on the transfer metadata, + // modify the original packet so that we can send it down the stack + bz, err := transfertypes.ModuleCdc.MarshalJSON(&tokenPacketData) + if err != nil { + return channeltypes.NewErrorAcknowledgement(err) + } + newPacket := packet + newPacket.Data = bz + + // Pass the new packet down the middleware stack first to complete the transfer + ack := im.app.OnRecvPacket(ctx, newPacket, relayer) + if !ack.Success() { + return ack + } + + autopilotParams := im.keeper.GetParams(ctx) + sender := tokenPacketData.Sender + + // If the transfer was successful, then route to the corresponding module, if applicable + switch routingInfo := autopilotMetadata.RoutingInfo.(type) { + case types.StakeibcPacketMetadata: + // If stakeibc routing is inactive (but the packet had routing info in the memo) return an ack error + if !autopilotParams.StakeibcActive { + im.keeper.Logger(ctx).Error(fmt.Sprintf("Packet from %s had stakeibc routing info but autopilot stakeibc routing is disabled", sender)) + return channeltypes.NewErrorAcknowledgement(types.ErrPacketForwardingInactive) + } + im.keeper.Logger(ctx).Info(fmt.Sprintf("Forwaring packet from %s to stakeibc", sender)) + + switch routingInfo.Action { + case types.LiquidStake: + // Try to liquid stake - return an ack error if it fails, otherwise return the ack generated from the earlier packet propogation + if err := im.keeper.TryLiquidStaking(ctx, packet, tokenPacketData, routingInfo); err != nil { + im.keeper.Logger(ctx).Error(fmt.Sprintf("Error liquid staking packet from autopilot for %s: %s", sender, err.Error())) + return channeltypes.NewErrorAcknowledgement(err) + } + case types.RedeemStake: + // Try to redeem stake - return an ack error if it fails, otherwise return the ack generated from the earlier packet propogation + if err := im.keeper.TryRedeemStake(ctx, packet, tokenPacketData, routingInfo); err != nil { + im.keeper.Logger(ctx).Error(fmt.Sprintf("Error redeem staking packet from autopilot for %s: %s", sender, err.Error())) + return channeltypes.NewErrorAcknowledgement(err) + } + } + + return ack + + case types.ClaimPacketMetadata: + // If claim routing is inactive (but the packet had routing info in the memo) return an ack error + if !autopilotParams.ClaimActive { + im.keeper.Logger(ctx).Error(fmt.Sprintf("Packet from %s had claim routing info but autopilot claim routing is disabled", sender)) + return channeltypes.NewErrorAcknowledgement(types.ErrPacketForwardingInactive) + } + im.keeper.Logger(ctx).Info(fmt.Sprintf("Forwaring packet from %s to claim", sender)) + + if err := im.keeper.TryUpdateAirdropClaim(ctx, packet, tokenPacketData); err != nil { + im.keeper.Logger(ctx).Error(fmt.Sprintf("Error updating airdrop claim from autopilot for %s: %s", sender, err.Error())) + return channeltypes.NewErrorAcknowledgement(err) + } + + return ack + + default: + return channeltypes.NewErrorAcknowledgement(errorsmod.Wrapf(types.ErrUnsupportedAutopilotRoute, "%T", routingInfo)) + } +} + +// OnAcknowledgementPacket implements the IBCModule interface +func (im IBCModule) OnAcknowledgementPacket( + ctx sdk.Context, + packet channeltypes.Packet, + acknowledgement []byte, + relayer sdk.AccAddress, +) error { + im.keeper.Logger(ctx).Info(fmt.Sprintf("OnAcknowledgementPacket (Autopilot): Packet %v, Acknowledgement %v", packet, acknowledgement)) + // First pass the packet down the stack so that, in the event of an ack failure, + // the tokens are refunded to the original sender + if err := im.app.OnAcknowledgementPacket(ctx, packet, acknowledgement, relayer); err != nil { + return err + } + // Then process the autopilot-specific callback + // This will handle bank sending to a fallback address if the original transfer failed + return im.keeper.OnAcknowledgementPacket(ctx, packet, acknowledgement) +} + +// OnTimeoutPacket implements the IBCModule interface +func (im IBCModule) OnTimeoutPacket( + ctx sdk.Context, + packet channeltypes.Packet, + relayer sdk.AccAddress, +) error { + im.keeper.Logger(ctx).Error(fmt.Sprintf("OnTimeoutPacket (Autopilot): Packet %v", packet)) + // First pass the packet down the stack so that the tokens are refunded to the original sender + if err := im.app.OnTimeoutPacket(ctx, packet, relayer); err != nil { + return err + } + // Then process the autopilot-specific callback + // This will handle a retry in the event that there was a timeout during an autopilot action + return im.keeper.OnTimeoutPacket(ctx, packet) +} + +// This is implemented by ICS4 and all middleware that are wrapping base application. +// The base application will call `sendPacket` or `writeAcknowledgement` of the middleware directly above them +// which will call the next middleware until it reaches the core IBC handler. +// SendPacket implements the ICS4 Wrapper interface +func (im IBCModule) SendPacket( + ctx sdk.Context, + chanCap *capabilitytypes.Capability, + packet ibcexported.PacketI, +) error { + return nil +} + +// WriteAcknowledgement implements the ICS4 Wrapper interface +func (im IBCModule) WriteAcknowledgement( + ctx sdk.Context, + chanCap *capabilitytypes.Capability, + packet ibcexported.PacketI, + ack ibcexported.Acknowledgement, +) error { + return nil +} + +// GetAppVersion returns the interchain accounts metadata. +func (im IBCModule) GetAppVersion(ctx sdk.Context, portID, channelID string) (string, bool) { + return transfertypes.Version, true // im.keeper.GetAppVersion(ctx, portID, channelID) +} diff --git a/x/autopilot/types/autopilot.go b/x/autopilot/types/autopilot.go new file mode 100644 index 00000000000..e599e84ace4 --- /dev/null +++ b/x/autopilot/types/autopilot.go @@ -0,0 +1,51 @@ +package types + +import ( + fmt "fmt" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/address" +) + +// RawPacketMetadata defines the raw JSON memo that's used in an autopilot transfer +// The PFM forward key and wasm keys are also used here to validate that the packet +// was not trying to use more than one of autopilot PFM, and wasm at the same time +// As a result, only the key is needed, cause the actual parsing of the PFM/wasm +// packet will occur in the respective module +type RawPacketMetadata struct { + Autopilot *struct { + Receiver string `json:"receiver"` + Stakeibc *StakeibcPacketMetadata `json:"stakeibc,omitempty"` + Claim *ClaimPacketMetadata `json:"claim,omitempty"` + } `json:"autopilot"` + Forward *interface{} `json:"forward"` + Wasm *interface{} `json:"wasm"` +} + +// AutopilotActionMetadata stores the metadata that's specific to the autopilot action +// e.g. Fields required for LiquidStake +type AutopilotMetadata struct { + Receiver string + RoutingInfo ModuleRoutingInfo +} + +// ModuleRoutingInfo defines the interface required for each autopilot action +type ModuleRoutingInfo interface { + Validate() error +} + +// GenerateHashedSender generates a new address for a packet, by hashing +// the channel and original sender. +// This makes the address deterministic and can used to identify the sender +// from the preivous hop +// Additionally, this prevents a forwarded packet from impersonating a different account +// when moving to the next hop (i.e. receiver of one hop, becomes sender of next) +// +// This function was borrowed from PFM +func GenerateHashedAddress(channelId, originalSender string) (string, error) { + senderStr := fmt.Sprintf("%s/%s", channelId, originalSender) + senderHash32 := address.Hash(ModuleName, []byte(senderStr)) + sender := sdk.AccAddress(senderHash32[:20]) + bech32Prefix := sdk.GetConfig().GetBech32AccountAddrPrefix() + return sdk.Bech32ifyAddressBytes(bech32Prefix, sender) +} diff --git a/x/autopilot/types/codec.go b/x/autopilot/types/codec.go new file mode 100644 index 00000000000..ea3c002a9eb --- /dev/null +++ b/x/autopilot/types/codec.go @@ -0,0 +1,10 @@ +package types + +import ( + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" +) + +func RegisterCodec(cdc *codec.LegacyAmino) {} + +func RegisterInterfaces(registry cdctypes.InterfaceRegistry) {} diff --git a/x/autopilot/types/errors.go b/x/autopilot/types/errors.go new file mode 100644 index 00000000000..5ba41d1cb45 --- /dev/null +++ b/x/autopilot/types/errors.go @@ -0,0 +1,19 @@ +package types + +import ( + errorsmod "cosmossdk.io/errors" +) + +// x/autopilot module sentinel errors +var ( + ErrInvalidPacketMetadata = errorsmod.Register(ModuleName, 1501, "invalid packet metadata") + ErrUnsupportedStakeibcAction = errorsmod.Register(ModuleName, 1502, "unsupported stakeibc action") + ErrInvalidClaimAirdropId = errorsmod.Register(ModuleName, 1503, "invalid claim airdrop ID (cannot be empty)") + ErrInvalidModuleRoutes = errorsmod.Register(ModuleName, 1504, "invalid number of module routes, only 1 module is allowed at a time") + ErrUnsupportedAutopilotRoute = errorsmod.Register(ModuleName, 1505, "unsupported autpilot route") + ErrInvalidReceiverAddress = errorsmod.Register(ModuleName, 1506, "receiver address must be specified when using autopilot") + ErrPacketForwardingInactive = errorsmod.Register(ModuleName, 1507, "autopilot packet forwarding is disabled") + ErrInvalidMemoLength = errorsmod.Register(ModuleName, 1508, "the memo field exceeded the max allowable size") + ErrInvalidReceiverLength = errorsmod.Register(ModuleName, 1509, "the receiver field exceeded the max allowable size") + ErrBlockedFallbackAddress = errorsmod.Register(ModuleName, 1510, "autopilot metadata fallback address is blocked") +) diff --git a/x/autopilot/types/events_ibc.go b/x/autopilot/types/events_ibc.go new file mode 100644 index 00000000000..733bc89fd18 --- /dev/null +++ b/x/autopilot/types/events_ibc.go @@ -0,0 +1,10 @@ +package types + +// IBC events +const ( + EventTypeTimeout = "timeout" + + AttributeKeyAckSuccess = "success" + AttributeKeyAck = "acknowledgement" + AttributeKeyAckError = "error" +) diff --git a/x/autopilot/types/expected_keepers.go b/x/autopilot/types/expected_keepers.go new file mode 100644 index 00000000000..a2aa28d3059 --- /dev/null +++ b/x/autopilot/types/expected_keepers.go @@ -0,0 +1,17 @@ +package types + +import ( + context "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + transfertypes "github.com/cosmos/ibc-go/v8/modules/apps/transfer/types" +) + +type BankKeeper interface { + BlockedAddr(addr sdk.AccAddress) bool + SendCoins(ctx context.Context, senderAddr sdk.AccAddress, recipientAddr sdk.AccAddress, amt sdk.Coins) error +} + +type IbcTransferKeeper interface { + Transfer(goCtx context.Context, msg *transfertypes.MsgTransfer) (*transfertypes.MsgTransferResponse, error) +} diff --git a/x/autopilot/types/genesis.go b/x/autopilot/types/genesis.go new file mode 100644 index 00000000000..dda49cf696e --- /dev/null +++ b/x/autopilot/types/genesis.go @@ -0,0 +1,19 @@ +package types + +// TODO: fix this file + +// DefaultIndex is the default capability global index +const DefaultIndex uint64 = 1 + +// DefaultGenesis returns the default Capability genesis state +func DefaultGenesis() *GenesisState { + return &GenesisState{ + Params: DefaultParams(), + } +} + +// Validate performs basic genesis state validation returning an error upon any +// failure. +func (gs GenesisState) Validate() error { + return gs.Params.Validate() +} diff --git a/x/autopilot/types/genesis.pb.go b/x/autopilot/types/genesis.pb.go new file mode 100644 index 00000000000..1d2c615bad4 --- /dev/null +++ b/x/autopilot/types/genesis.pb.go @@ -0,0 +1,323 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: symphony/autopilot/genesis.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// GenesisState defines the claim module's genesis state. +type GenesisState struct { + // params defines all the parameters of the module. + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params" yaml:"params"` +} + +func (m *GenesisState) Reset() { *m = GenesisState{} } +func (m *GenesisState) String() string { return proto.CompactTextString(m) } +func (*GenesisState) ProtoMessage() {} +func (*GenesisState) Descriptor() ([]byte, []int) { + return fileDescriptor_280c1ebb127fe858, []int{0} +} +func (m *GenesisState) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GenesisState.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GenesisState) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenesisState.Merge(m, src) +} +func (m *GenesisState) XXX_Size() int { + return m.Size() +} +func (m *GenesisState) XXX_DiscardUnknown() { + xxx_messageInfo_GenesisState.DiscardUnknown(m) +} + +var xxx_messageInfo_GenesisState proto.InternalMessageInfo + +func (m *GenesisState) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +func init() { + proto.RegisterType((*GenesisState)(nil), "symphony.autopilot.GenesisState") +} + +func init() { proto.RegisterFile("symphony/autopilot/genesis.proto", fileDescriptor_280c1ebb127fe858) } + +var fileDescriptor_280c1ebb127fe858 = []byte{ + // 218 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x28, 0xae, 0xcc, 0x2d, + 0xc8, 0xc8, 0xcf, 0xab, 0xd4, 0x4f, 0x2c, 0x2d, 0xc9, 0x2f, 0xc8, 0xcc, 0xc9, 0x2f, 0xd1, 0x4f, + 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x82, 0xa9, + 0xd0, 0x83, 0xab, 0x90, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0x4b, 0xeb, 0x83, 0x58, 0x10, 0x95, + 0x52, 0xf2, 0x58, 0xcc, 0x2a, 0x48, 0x2c, 0x4a, 0xcc, 0x85, 0x1a, 0xa5, 0x14, 0xc9, 0xc5, 0xe3, + 0x0e, 0x31, 0x3b, 0xb8, 0x24, 0xb1, 0x24, 0x55, 0xc8, 0x93, 0x8b, 0x0d, 0x22, 0x2f, 0xc1, 0xa8, + 0xc0, 0xa8, 0xc1, 0x6d, 0x24, 0xa5, 0x87, 0x69, 0x97, 0x5e, 0x00, 0x58, 0x85, 0x93, 0xe8, 0x89, + 0x7b, 0xf2, 0x0c, 0x9f, 0xee, 0xc9, 0xf3, 0x56, 0x26, 0xe6, 0xe6, 0x58, 0x29, 0x41, 0xf4, 0x29, + 0x05, 0x41, 0x0d, 0x70, 0xf2, 0x3f, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, + 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, + 0xd3, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0xfd, 0xfc, 0xe2, 0xdc, 0xfc, + 0xe2, 0xcc, 0x62, 0xdd, 0x9c, 0xc4, 0xa4, 0x62, 0x18, 0x47, 0xbf, 0xcc, 0xc8, 0x5c, 0xbf, 0x02, + 0xc9, 0xc9, 0x25, 0x95, 0x05, 0xa9, 0xc5, 0x49, 0x6c, 0x60, 0x27, 0x1b, 0x03, 0x02, 0x00, 0x00, + 0xff, 0xff, 0xf4, 0xae, 0x31, 0xd0, 0x21, 0x01, 0x00, 0x00, +} + +func (m *GenesisState) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GenesisState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { + offset -= sovGenesis(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *GenesisState) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovGenesis(uint64(l)) + return n +} + +func sovGenesis(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenesis(x uint64) (n int) { + return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *GenesisState) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenesis(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenesis + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenesis + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenesis + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/autopilot/types/genesis_test.go b/x/autopilot/types/genesis_test.go new file mode 100644 index 00000000000..8d8f39203b1 --- /dev/null +++ b/x/autopilot/types/genesis_test.go @@ -0,0 +1,32 @@ +package types_test + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/x/autopilot/types" +) + +func TestGenesisState_Validate(t *testing.T) { + for _, tc := range []struct { + desc string + genState *types.GenesisState + valid bool + }{ + { + desc: "default is valid", + genState: types.DefaultGenesis(), + valid: true, + }, + } { + t.Run(tc.desc, func(t *testing.T) { + err := tc.genState.Validate() + if tc.valid { + require.NoError(t, err) + } else { + require.Error(t, err) + } + }) + } +} diff --git a/x/autopilot/types/keys.go b/x/autopilot/types/keys.go new file mode 100644 index 00000000000..2b225e6ad18 --- /dev/null +++ b/x/autopilot/types/keys.go @@ -0,0 +1,35 @@ +package types + +import "encoding/binary" + +const ( + // ModuleName defines the module name + ModuleName = "autopilot" + + // StoreKey defines the primary module store key + StoreKey = ModuleName + + // RouterKey is the message route for slashing + RouterKey = ModuleName + + // QuerierRoute defines the module's query routing key + QuerierRoute = ModuleName +) + +var ( + TransferFallbackAddressPrefix = []byte("fallback") + + FallbackAddressChannelPrefixLength int = 16 +) + +// Builds the store key for a fallback address, key'd by channel ID and sequence number +// The serialized channelId is set to a fixed array size to assist deserialization +func GetTransferFallbackAddressKey(channelId string, sequenceNumber uint64) []byte { + channelIdBz := make([]byte, FallbackAddressChannelPrefixLength) + copy(channelIdBz[:], channelId) + + sequenceNumberBz := make([]byte, 8) + binary.BigEndian.PutUint64(sequenceNumberBz, sequenceNumber) + + return append(channelIdBz, sequenceNumberBz...) +} diff --git a/x/autopilot/types/params.go b/x/autopilot/types/params.go new file mode 100644 index 00000000000..935abe51943 --- /dev/null +++ b/x/autopilot/types/params.go @@ -0,0 +1,73 @@ +package types + +import ( + "fmt" + + paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" + "gopkg.in/yaml.v2" +) + +const ( + // Default active value for each autopilot supported module + DefaultStakeibcActive = true + DefaultClaimActive = true +) + +// KeyActive is the store key for Params +var KeyStakeibcActive = []byte("StakeibcActive") +var KeyClaimActive = []byte("ClaimActive") + +var _ paramtypes.ParamSet = (*Params)(nil) + +// ParamKeyTable the param key table for launch module +func ParamKeyTable() paramtypes.KeyTable { + return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) +} + +// NewParams creates a new Params instance +func NewParams(stakeibcActive, claimActive bool) Params { + return Params{ + StakeibcActive: stakeibcActive, + ClaimActive: claimActive, + } +} + +// DefaultParams returns a default set of parameters +func DefaultParams() Params { + return NewParams(DefaultStakeibcActive, DefaultClaimActive) +} + +// ParamSetPairs get the params.ParamSet +func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { + return paramtypes.ParamSetPairs{ + paramtypes.NewParamSetPair(KeyStakeibcActive, &p.StakeibcActive, validateBool), + paramtypes.NewParamSetPair(KeyClaimActive, &p.ClaimActive, validateBool), + } +} + +// Validate validates the set of params +func (p Params) Validate() error { + if err := validateBool(p.StakeibcActive); err != nil { + return err + } + if err := validateBool(p.ClaimActive); err != nil { + return err + } + + return nil +} + +// String implements the Stringer interface. +func (p Params) String() string { + out, _ := yaml.Marshal(p) + return string(out) +} + +func validateBool(i interface{}) error { + _, ok := i.(bool) + if !ok { + return fmt.Errorf("invalid parameter type: %T", i) + } + + return nil +} diff --git a/x/autopilot/types/params.pb.go b/x/autopilot/types/params.pb.go new file mode 100644 index 00000000000..6595742861e --- /dev/null +++ b/x/autopilot/types/params.pb.go @@ -0,0 +1,352 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: symphony/autopilot/params.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// Params defines the parameters for the module. +// next id: 1 +type Params struct { + // optionally, turn off each module + StakeibcActive bool `protobuf:"varint,1,opt,name=stakeibc_active,json=stakeibcActive,proto3" json:"stakeibc_active,omitempty"` + ClaimActive bool `protobuf:"varint,2,opt,name=claim_active,json=claimActive,proto3" json:"claim_active,omitempty"` +} + +func (m *Params) Reset() { *m = Params{} } +func (*Params) ProtoMessage() {} +func (*Params) Descriptor() ([]byte, []int) { + return fileDescriptor_76710a961b2e2fa3, []int{0} +} +func (m *Params) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Params.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Params) XXX_Merge(src proto.Message) { + xxx_messageInfo_Params.Merge(m, src) +} +func (m *Params) XXX_Size() int { + return m.Size() +} +func (m *Params) XXX_DiscardUnknown() { + xxx_messageInfo_Params.DiscardUnknown(m) +} + +var xxx_messageInfo_Params proto.InternalMessageInfo + +func (m *Params) GetStakeibcActive() bool { + if m != nil { + return m.StakeibcActive + } + return false +} + +func (m *Params) GetClaimActive() bool { + if m != nil { + return m.ClaimActive + } + return false +} + +func init() { + proto.RegisterType((*Params)(nil), "symphony.autopilot.Params") +} + +func init() { proto.RegisterFile("symphony/autopilot/params.proto", fileDescriptor_76710a961b2e2fa3) } + +var fileDescriptor_76710a961b2e2fa3 = []byte{ + // 213 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x2f, 0xae, 0xcc, 0x2d, + 0xc8, 0xc8, 0xcf, 0xab, 0xd4, 0x4f, 0x2c, 0x2d, 0xc9, 0x2f, 0xc8, 0xcc, 0xc9, 0x2f, 0xd1, 0x2f, + 0x48, 0x2c, 0x4a, 0xcc, 0x2d, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x82, 0x29, 0xd0, + 0x83, 0x2b, 0x90, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0x4b, 0xeb, 0x83, 0x58, 0x10, 0x95, 0x4a, + 0x51, 0x5c, 0x6c, 0x01, 0x60, 0x9d, 0x42, 0xea, 0x5c, 0xfc, 0xc5, 0x25, 0x89, 0xd9, 0xa9, 0x99, + 0x49, 0xc9, 0xf1, 0x89, 0xc9, 0x25, 0x99, 0x65, 0xa9, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x1c, 0x41, + 0x7c, 0x30, 0x61, 0x47, 0xb0, 0xa8, 0x90, 0x22, 0x17, 0x4f, 0x72, 0x4e, 0x62, 0x66, 0x2e, 0x4c, + 0x15, 0x13, 0x58, 0x15, 0x37, 0x58, 0x0c, 0xa2, 0xc4, 0x8a, 0x65, 0xc6, 0x02, 0x79, 0x06, 0x27, + 0xff, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x71, 0xc2, 0x63, + 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, 0x32, 0x4d, 0xcf, 0x2c, 0xc9, + 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0xcf, 0x2f, 0xce, 0xcd, 0x2f, 0xce, 0x2c, 0xd6, 0xcd, + 0x49, 0x4c, 0x2a, 0x86, 0x71, 0xf4, 0xcb, 0x8c, 0xcc, 0xf5, 0x2b, 0x90, 0x7c, 0x57, 0x52, 0x59, + 0x90, 0x5a, 0x9c, 0xc4, 0x06, 0x76, 0xb3, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x65, 0xb2, 0xa3, + 0x8a, 0x00, 0x01, 0x00, 0x00, +} + +func (m *Params) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Params) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ClaimActive { + i-- + if m.ClaimActive { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + } + if m.StakeibcActive { + i-- + if m.StakeibcActive { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func encodeVarintParams(dAtA []byte, offset int, v uint64) int { + offset -= sovParams(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Params) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.StakeibcActive { + n += 2 + } + if m.ClaimActive { + n += 2 + } + return n +} + +func sovParams(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozParams(x uint64) (n int) { + return sovParams(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Params) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field StakeibcActive", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.StakeibcActive = bool(v != 0) + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ClaimActive", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ClaimActive = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipParams(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthParams + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipParams(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthParams + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupParams + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthParams + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthParams = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowParams = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupParams = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/autopilot/types/parser.go b/x/autopilot/types/parser.go new file mode 100644 index 00000000000..4afd1691c5b --- /dev/null +++ b/x/autopilot/types/parser.go @@ -0,0 +1,126 @@ +package types + +import ( + "encoding/json" + + errorsmod "cosmossdk.io/errors" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +const LiquidStake = "LiquidStake" +const RedeemStake = "RedeemStake" + +// Packet metadata info specific to Stakeibc (e.g. 1-click liquid staking) +type StakeibcPacketMetadata struct { + Action string `json:"action"` + // TODO [cleanup]: Rename to FallbackAddress + StrideAddress string + IbcReceiver string `json:"ibc_receiver,omitempty"` + TransferChannel string `json:"transfer_channel,omitempty"` +} + +// Packet metadata info specific to Claim (e.g. airdrops for non-118 coins) +// TODO: remove this struct +type ClaimPacketMetadata struct { + StrideAddress string +} + +// Validate stakeibc packet metadata fields +// including the stride address and action type +func (m StakeibcPacketMetadata) Validate() error { + _, err := sdk.AccAddressFromBech32(m.StrideAddress) + if err != nil { + return err + } + switch m.Action { + case LiquidStake: + case RedeemStake: + default: + return errorsmod.Wrapf(ErrUnsupportedStakeibcAction, "action %s is not supported", m.Action) + } + + return nil +} + +// Validate claim packet metadata includes the stride address +// TODO: remove this function +func (m ClaimPacketMetadata) Validate() error { + _, err := sdk.AccAddressFromBech32(m.StrideAddress) + if err != nil { + return err + } + + return nil +} + +// Parse packet metadata intended for autopilot +// In the ICS-20 packet, the metadata can optionally indicate a module to route to (e.g. stakeibc) +// The AutopilotMetadata returned from this function contains attributes for each autopilot supported module +// It can only be forward to one module per packet +// Returns nil if there was no autopilot metadata found +func ParseAutopilotMetadata(metadata string) (*AutopilotMetadata, error) { + // If we can't unmarshal the metadata into a PacketMetadata struct, + // assume packet forwarding was no used and pass back nil so that autopilot is ignored + var raw RawPacketMetadata + if err := json.Unmarshal([]byte(metadata), &raw); err != nil { + return nil, nil + } + + // Packets cannot be used for more than one of autopilot, pfm, or wasmhooks at the same time + // If more than one module key was provided, reject the packet + middlewareModulesEnabled := 0 + if raw.Autopilot != nil { + middlewareModulesEnabled++ + } + if raw.Forward != nil { + middlewareModulesEnabled++ + } + if raw.Wasm != nil { + middlewareModulesEnabled++ + } + if middlewareModulesEnabled > 1 { + return nil, errorsmod.Wrap(ErrInvalidPacketMetadata, + "only one of autopilot, pfm, and wasm can both be used in the same packet") + } + + // If no forwarding logic was used for autopilot, return nil to indicate that + // there's no autopilot action needed + if raw.Autopilot == nil { + return nil, nil + } + + // Confirm a receiver address was supplied + if _, err := sdk.AccAddressFromBech32(raw.Autopilot.Receiver); err != nil { + return nil, errorsmod.Wrap(ErrInvalidPacketMetadata, ErrInvalidReceiverAddress.Error()) + } + + // Parse the packet info into the specific module type + // We increment the module count to ensure only one module type was provided + moduleCount := 0 + var routingInfo ModuleRoutingInfo + if raw.Autopilot.Stakeibc != nil { + // override the stride address with the receiver address + raw.Autopilot.Stakeibc.StrideAddress = raw.Autopilot.Receiver + moduleCount++ + routingInfo = *raw.Autopilot.Stakeibc + } + if raw.Autopilot.Claim != nil { + // override the stride address with the receiver address + raw.Autopilot.Claim.StrideAddress = raw.Autopilot.Receiver + moduleCount++ + routingInfo = *raw.Autopilot.Claim + } + if moduleCount != 1 { + return nil, errorsmod.Wrap(ErrInvalidPacketMetadata, ErrInvalidModuleRoutes.Error()) + } + + // Validate the packet info according to the specific module type + if err := routingInfo.Validate(); err != nil { + return nil, errorsmod.Wrap(err, ErrInvalidPacketMetadata.Error()) + } + + return &AutopilotMetadata{ + Receiver: raw.Autopilot.Receiver, + RoutingInfo: routingInfo, + }, nil +} diff --git a/x/autopilot/types/parser_test.go b/x/autopilot/types/parser_test.go new file mode 100644 index 00000000000..622d8811492 --- /dev/null +++ b/x/autopilot/types/parser_test.go @@ -0,0 +1,308 @@ +package types_test + +import ( + fmt "fmt" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/autopilot/types" +) + +func init() { + apptesting.SetupConfig() +} + +func getStakeibcMemo(address, action string) string { + return fmt.Sprintf(` + { + "autopilot": { + "receiver": "%[1]s", + "stakeibc": { "action": "%[2]s" } + } + }`, address, action) +} + +func getStakeibcMemoWithStrideAddress(receiverAddress, action, strideAddress string) string { + return fmt.Sprintf(` + { + "autopilot": { + "receiver": "%[1]s", + "stakeibc": { "stride_address": "%[2]s", "action": "%[3]s" } + } + }`, receiverAddress, strideAddress, action) +} + +func getClaimMemo(address string) string { + return fmt.Sprintf(` + { + "autopilot": { + "receiver": "%[1]s", + "claim": { } + } + }`, address) +} + +func getClaimMemoWithStrideAddress(receiverAddress, strideAddress string) string { + return fmt.Sprintf(` + { + "autopilot": { + "receiver": "%[1]s", + "claim": { "stride_address": "%[2]s" } + } + }`, receiverAddress, strideAddress) +} + +func getClaimAndStakeibcMemo(address, action string) string { + return fmt.Sprintf(` + { + "autopilot": { + "receiver": "%[1]s", + "stakeibc": { "action": "%[2]s" }, + "claim": { } + } + }`, address, action) +} + +// Helper function to check the routingInfo with a switch statement +// This isn't the most efficient way to check the type (require.TypeOf could be used instead) +// but it better aligns with how the routing info is checked in module_ibc +func checkModuleRoutingInfoType(routingInfo types.ModuleRoutingInfo, expectedType string) bool { + switch routingInfo.(type) { + case types.StakeibcPacketMetadata: + return expectedType == "stakeibc" + case types.ClaimPacketMetadata: + return expectedType == "claim" + default: + return false + } +} + +func TestParsePacketMetadata(t *testing.T) { + validAddress, invalidAddress := apptesting.GenerateTestAddrs() + validStakeibcAction := "LiquidStake" + + validParsedStakeibcPacketMetadata := types.StakeibcPacketMetadata{ + StrideAddress: validAddress, + Action: validStakeibcAction, + } + + validParsedClaimPacketMetadata := types.ClaimPacketMetadata{ + StrideAddress: validAddress, + } + + testCases := []struct { + name string + metadata string + parsedStakeibc *types.StakeibcPacketMetadata + parsedClaim *types.ClaimPacketMetadata + expectedNilMetadata bool + expectedErr string + }{ + { + name: "valid stakeibc memo", + metadata: getStakeibcMemo(validAddress, validStakeibcAction), + parsedStakeibc: &validParsedStakeibcPacketMetadata, + }, + { + name: "valid claim memo", + metadata: getClaimMemo(validAddress), + parsedClaim: &validParsedClaimPacketMetadata, + }, + { + name: "valid stakeibc memo with stride address override", + metadata: getStakeibcMemoWithStrideAddress(validAddress, validStakeibcAction, "different_address"), + parsedStakeibc: &validParsedStakeibcPacketMetadata, + }, + { + name: "valid claim memo with stride address override", + metadata: getClaimMemoWithStrideAddress(validAddress, "different_address"), + parsedClaim: &validParsedClaimPacketMetadata, + }, + { + name: "normal IBC transfer", + metadata: validAddress, // normal address - not autopilot JSON + expectedNilMetadata: true, + }, + { + name: "PFM transfer", + metadata: `{"forward": {}}`, + expectedNilMetadata: true, + }, + { + name: "empty memo", + metadata: "", + expectedNilMetadata: true, + }, + { + name: "empty JSON memo", + metadata: "{}", + expectedNilMetadata: true, + }, + { + name: "different module specified", + metadata: `{ "other_module": { } }`, + expectedNilMetadata: true, + }, + { + name: "both autopilot and pfm in the memo", + metadata: `{"autopilot": {}, "forward": {}}`, + expectedErr: "only one of autopilot, pfm, and wasm can both be used in the same packet", + }, + { + name: "both autopilot and wasm in the memo", + metadata: `{"autopilot": {}, "wasm": {}}`, + expectedErr: "only one of autopilot, pfm, and wasm can both be used in the same packet", + }, + { + name: "both pfm and wasm in the memo", + metadata: `{"forward": {}, "wasm": {}}`, + expectedErr: "only one of autopilot, pfm, and wasm can both be used in the same packet", + }, + { + name: "autopilot, pfm, and wasm in the memo", + metadata: `{"autopilot": {}, "pfm": {}, "wasm": {}}`, + expectedErr: "only one of autopilot, pfm, and wasm can both be used in the same packet", + }, + { + name: "empty receiver address", + metadata: `{ "autopilot": { } }`, + expectedErr: "receiver address must be specified when using autopilot", + }, + { + name: "invalid receiver address", + metadata: `{ "autopilot": { "receiver": "invalid_address" } }`, + expectedErr: "receiver address must be specified when using autopilot", + }, + { + name: "invalid stakeibc address", + metadata: getStakeibcMemo(invalidAddress, validStakeibcAction), + expectedErr: "receiver address must be specified when using autopilot", + }, + { + name: "invalid stakeibc action", + metadata: getStakeibcMemo(validAddress, "bad_action"), + expectedErr: "unsupported stakeibc action", + }, + { + name: "invalid claim address", + metadata: getClaimMemo(invalidAddress), + expectedErr: "receiver address must be specified when using autopilot", + }, + { + name: "both claim and stakeibc memo set", + metadata: getClaimAndStakeibcMemo(validAddress, validStakeibcAction), + expectedErr: "invalid number of module routes", + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + parsedData, actualErr := types.ParseAutopilotMetadata(tc.metadata) + + if tc.expectedErr == "" { + require.NoError(t, actualErr) + if tc.expectedNilMetadata { + require.Nil(t, parsedData, "parsed data response should be nil") + } else { + if tc.parsedStakeibc != nil { + checkModuleRoutingInfoType(parsedData.RoutingInfo, "stakeibc") + routingInfo, ok := parsedData.RoutingInfo.(types.StakeibcPacketMetadata) + require.True(t, ok, "routing info should be stakeibc") + require.Equal(t, *tc.parsedStakeibc, routingInfo, "parsed stakeibc value") + } else if tc.parsedClaim != nil { + checkModuleRoutingInfoType(parsedData.RoutingInfo, "claim") + routingInfo, ok := parsedData.RoutingInfo.(types.ClaimPacketMetadata) + require.True(t, ok, "routing info should be claim") + require.Equal(t, *tc.parsedClaim, routingInfo, "parsed claim value") + } + } + } else { + require.ErrorContains(t, actualErr, types.ErrInvalidPacketMetadata.Error(), "expected error type for %s", tc.name) + require.ErrorContains(t, actualErr, tc.expectedErr, "expected error for %s", tc.name) + } + }) + } +} + +func TestValidateStakeibcPacketMetadata(t *testing.T) { + validAddress, _ := apptesting.GenerateTestAddrs() + validAction := "LiquidStake" + + testCases := []struct { + name string + metadata *types.StakeibcPacketMetadata + expectedErr string + }{ + { + name: "valid Metadata data", + metadata: &types.StakeibcPacketMetadata{ + StrideAddress: validAddress, + Action: validAction, + }, + }, + { + name: "invalid address", + metadata: &types.StakeibcPacketMetadata{ + StrideAddress: "bad_address", + Action: validAction, + }, + expectedErr: "decoding bech32 failed", + }, + { + name: "invalid action", + metadata: &types.StakeibcPacketMetadata{ + StrideAddress: validAddress, + Action: "bad_action", + }, + expectedErr: "unsupported stakeibc action", + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + actualErr := tc.metadata.Validate() + if tc.expectedErr == "" { + require.NoError(t, actualErr, "no error expected for %s", tc.name) + } else { + require.ErrorContains(t, actualErr, tc.expectedErr, "error expected for %s", tc.name) + } + }) + } +} + +func TestValidateClaimPacketMetadata(t *testing.T) { + validAddress, _ := apptesting.GenerateTestAddrs() + + testCases := []struct { + name string + metadata *types.ClaimPacketMetadata + expectedErr string + }{ + { + name: "valid metadata", + metadata: &types.ClaimPacketMetadata{ + StrideAddress: validAddress, + }, + }, + { + name: "invalid address", + metadata: &types.ClaimPacketMetadata{ + StrideAddress: "bad_address", + }, + expectedErr: "decoding bech32 failed", + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + actualErr := tc.metadata.Validate() + if tc.expectedErr == "" { + require.NoError(t, actualErr, "no error expected for %s", tc.name) + } else { + require.ErrorContains(t, actualErr, tc.expectedErr, "error expected for %s", tc.name) + } + }) + } +} diff --git a/x/autopilot/types/query.pb.go b/x/autopilot/types/query.pb.go new file mode 100644 index 00000000000..195c4dc704a --- /dev/null +++ b/x/autopilot/types/query.pb.go @@ -0,0 +1,536 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: symphony/autopilot/query.proto + +package types + +import ( + context "context" + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// QueryParamsRequest is request type for the Query/Params RPC method. +type QueryParamsRequest struct { +} + +func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } +func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryParamsRequest) ProtoMessage() {} +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_8b30e1cfe78c18e1, []int{0} +} +func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsRequest.Merge(m, src) +} +func (m *QueryParamsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo + +// QueryParamsResponse is response type for the Query/Params RPC method. +type QueryParamsResponse struct { + // params holds all the parameters of this module. + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` +} + +func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } +func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryParamsResponse) ProtoMessage() {} +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_8b30e1cfe78c18e1, []int{1} +} +func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsResponse.Merge(m, src) +} +func (m *QueryParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo + +func (m *QueryParamsResponse) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +func init() { + proto.RegisterType((*QueryParamsRequest)(nil), "symphony.autopilot.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "symphony.autopilot.QueryParamsResponse") +} + +func init() { proto.RegisterFile("symphony/autopilot/query.proto", fileDescriptor_8b30e1cfe78c18e1) } + +var fileDescriptor_8b30e1cfe78c18e1 = []byte{ + // 293 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x90, 0xc1, 0x4a, 0xc3, 0x40, + 0x10, 0x86, 0xb3, 0xa2, 0x3d, 0xac, 0xb7, 0xb5, 0x07, 0x09, 0xb2, 0x95, 0x20, 0x2a, 0x82, 0x59, + 0x1a, 0x11, 0x3d, 0xf7, 0x05, 0xaa, 0x3d, 0x7a, 0xdb, 0xc8, 0x92, 0x06, 0x92, 0xcc, 0x36, 0xb3, + 0x29, 0xe6, 0x2a, 0x78, 0x56, 0xf0, 0xa5, 0x7a, 0x2c, 0x78, 0xf1, 0x24, 0x92, 0xf8, 0x20, 0xd2, + 0x6c, 0x2a, 0x4a, 0x03, 0xde, 0x76, 0xe7, 0xff, 0xfe, 0x99, 0x7f, 0x86, 0x72, 0x2c, 0x53, 0x3d, + 0x85, 0xac, 0x14, 0xb2, 0x30, 0xa0, 0xe3, 0x04, 0x8c, 0x98, 0x15, 0x2a, 0x2f, 0x7d, 0x9d, 0x83, + 0x01, 0xc6, 0xd6, 0xba, 0xff, 0xa3, 0xbb, 0xfd, 0x08, 0x22, 0x68, 0x64, 0xb1, 0x7a, 0x59, 0xd2, + 0x3d, 0x88, 0x00, 0xa2, 0x44, 0x09, 0xa9, 0x63, 0x21, 0xb3, 0x0c, 0x8c, 0x34, 0x31, 0x64, 0xd8, + 0xaa, 0x83, 0x8e, 0x39, 0x5a, 0xe6, 0x32, 0x6d, 0x01, 0xaf, 0x4f, 0xd9, 0xed, 0x6a, 0xee, 0x4d, + 0x53, 0x9c, 0xa8, 0x59, 0xa1, 0xd0, 0x78, 0x63, 0xba, 0xf7, 0xa7, 0x8a, 0x1a, 0x32, 0x54, 0xec, + 0x9a, 0xf6, 0xac, 0x79, 0x9f, 0x1c, 0x92, 0xd3, 0xdd, 0xc0, 0xf5, 0x37, 0x63, 0xfa, 0xd6, 0x33, + 0xda, 0x5e, 0x7c, 0x0c, 0x9c, 0x49, 0xcb, 0x07, 0xcf, 0x84, 0xee, 0x34, 0x1d, 0xd9, 0x13, 0xa1, + 0x3d, 0x8b, 0xb0, 0xe3, 0x2e, 0xfb, 0x66, 0x1a, 0xf7, 0xe4, 0x5f, 0xce, 0xe6, 0xf3, 0xce, 0x1e, + 0xdf, 0xbe, 0x5e, 0xb7, 0x8e, 0x98, 0x27, 0x3a, 0xd6, 0x9e, 0x0f, 0x43, 0x65, 0xe4, 0xb0, 0x5d, + 0x7f, 0x34, 0x5e, 0x54, 0x9c, 0x2c, 0x2b, 0x4e, 0x3e, 0x2b, 0x4e, 0x5e, 0x6a, 0xee, 0x2c, 0x6b, + 0xee, 0xbc, 0xd7, 0xdc, 0xb9, 0xbb, 0x8c, 0x62, 0x33, 0x2d, 0x42, 0xff, 0x1e, 0x52, 0x01, 0x98, + 0x02, 0xc6, 0x78, 0x9e, 0xc8, 0x10, 0xd7, 0x1f, 0x31, 0x0f, 0xae, 0xc4, 0xc3, 0xaf, 0xce, 0xa6, + 0xd4, 0x0a, 0xc3, 0x5e, 0x73, 0xd0, 0x8b, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0x89, 0x8e, 0xdf, + 0x81, 0xdb, 0x01, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type QueryClient interface { + // Parameters queries the parameters of the module. + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) +} + +type queryClient struct { + cc grpc1.ClientConn +} + +func NewQueryClient(cc grpc1.ClientConn) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, "/symphony.autopilot.Query/Params", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +type QueryServer interface { + // Parameters queries the parameters of the module. + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) +} + +// UnimplementedQueryServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +} + +func RegisterQueryServer(s grpc1.Server, srv QueryServer) { + s.RegisterService(&_Query_serviceDesc, srv) +} + +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Params(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/symphony.autopilot.Query/Params", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Query_serviceDesc = grpc.ServiceDesc{ + ServiceName: "symphony.autopilot.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "symphony/autopilot/query.proto", +} + +func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *QueryParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipQuery(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthQuery + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupQuery + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthQuery + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/autopilot/types/query.pb.gw.go b/x/autopilot/types/query.pb.gw.go new file mode 100644 index 00000000000..da2197ce42a --- /dev/null +++ b/x/autopilot/types/query.pb.gw.go @@ -0,0 +1,153 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: symphony/autopilot/query.proto + +/* +Package types is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package types + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage +var _ = metadata.Join + +func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := server.Params(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". +// UnaryRPC :call QueryServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterQueryHandler(ctx, mux, conn) +} + +// RegisterQueryHandler registers the http handlers for service Query to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn)) +} + +// RegisterQueryHandlerClient registers the http handlers for service Query +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "QueryClient" to call the correct interceptors. +func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"symphony", "autopilot", "v1beta1", "params"}, "", runtime.AssumeColonVerbOpt(false))) +) + +var ( + forward_Query_Params_0 = runtime.ForwardResponseMessage +) diff --git a/x/claim/README.md b/x/claim/README.md new file mode 100644 index 00000000000..eb1546d0f37 --- /dev/null +++ b/x/claim/README.md @@ -0,0 +1,260 @@ +--- +title: "Claim" +excerpt: "" +category: 6392913957c533007128548e +--- + +# The Claim Module + +Users are required to participate in core network activities to claim their airdrop. An Airdrop recipient is given 20% of the airdrop amount which is not in vesting, and then they have to perform the following activities to get the rest: + +* 20% vesting over 3 months by staking +* 60% vesting over 3 months by liquid staking + +These claimable assets 'expire' if not claimed. Users have three months (`AirdropDuration`) to claim their full airdrop amount. After three months from launch, all unclaimed tokens get sent to the community pool. At initialization, module stores all airdrop users with amounts from genesis inside KVStore. Airdrop users are eligible to claim their vesting or free amount only once in the initial period of 3 months. After the initial period, users can claim tokens monthly. + +## Actions + +There are 2 types of actions, each of which release another 50% of the airdrop allocation. +The 2 actions are as follows: + +```golang +ActionLiquidStake Action = 0 +ActionDelegateStake Action = 1 +``` + +These actions are monitored by registering claim **hooks** to the stakeibc, and staking modules. +This means that when you perform an action, the claims module will immediately unlock those coins if they are applicable. +These actions can be performed in any order. + +The code is structured by separating out a segment of the tokens as "claimable", indexed by each action type. +So if Alice delegates tokens, the claims module will move the 50% of the claimables associated with staking to her liquid balance. +If she delegates again, there will not be additional tokens given, as the relevant action has already been performed. +Every action must be performed to claim the full amount. + +## ClaimRecords + +A claim record is a struct that contains data about the claims process of each airdrop recipient. + +It contains an address, the initial claimable airdrop amount, and an array of bools representing +whether each action has been completed. The position in the array refers to enum number of the action. + +So for example, `[true, true]` means that `ActionLiquidStake` and `ActionDelegateStake` are completed. + +```golang +type ClaimRecord struct { + // address of claim user + Address string + // weight that represents the portion from total allocation + Weight sdkmath.LegacyDec + // true if action is completed + // index of bool in array refers to action enum # + ActionCompleted []bool +} + +``` + +## A Note on Address Mappings + +When an airdrop is created, we call `LoadAllocationData` to load the airdrop data from the allocations file. +This will apply `utils.ConvertAddressToStrideAddress` on each of those addresses, and then store those with the `ClaimRecords`. +For an airdrop to, say, the Cosmos Hub, this will be the proper Stride address associated with that account. +`claim` state will only ever store this Stride address. + +However, for zones with a different coin type, _this will be an incorrect Stride address_. This should not cause any issues though, +as this Stride address will be unusable. + +In order to claim that airdrop, the user will have to verify that they own the corresponding Evmos address. When the user tries to verify, +we call `utils.ConvertAddressToStrideAddress` on that address, and verify it gives the same "incorrect" Stride address from earlier. +Through this, we can confirm that the user owns the Evmos address. +We then replace the Stride address with a "correct" one that the user verifies they own. + +## Params + +The airdrop logic has 4 parameters: + +```golang +type Params struct { + // Time that marks the beginning of the airdrop disbursal, + // should be set to chain launch time. + AirdropStartTime time.Time + AirdropDuration time.Duration + // denom of claimable asset + ClaimDenom string + // address of distributor account + DistributorAddress string +} +``` + +## Keeper functions + +Claim keeper module provides utility functions to manage epochs. + +```go + GetModuleAccountAddress(ctx sdk.Context) sdk.AccAddress + GetDistributorAccountBalance(ctx sdk.Context) sdk.Coin + EndAirdrop(ctx sdk.Context) error + GetClaimRecord(ctx sdk.Context, addr sdk.AccAddress) (types.ClaimRecord, error) + GetClaimRecords(ctx sdk.Context) []types.ClaimRecord + SetClaimRecord(ctx sdk.Context, claimRecord types.ClaimRecord) error + SetClaimRecords(ctx sdk.Context, claimRecords []types.ClaimRecord) error + GetClaimableAmountForAction(ctx sdk.Context, addr sdk.AccAddress, action types.Action, includeClaimed bool) (sdk.Coins, error) + GetUserTotalClaimable(ctx sdk.Context, addr sdk.AccAddress) (sdk.Coins, error) + ClaimCoinsForAction(ctx sdk.Context, addr sdk.AccAddress, action types.Action) (sdk.Coins, error) + clearInitialClaimables(ctx sdk.Context) + fundRemainingsToCommunity(ctx sdk.Context) error +``` + +## React Hooks + +The claim module reacts on the following hooks, executed in external modules. + +20% of airdrop is sent to a vesting account when `staking.AfterDelegationModified` hook is triggered. +20% of airdrop is sent to a vesting account when `stakeibc.AfterLiquidStake` hook is triggered. + +Once the airdrop is claimed for a specific hook type, it can't be claimed again. + +### Claim Records + +```protobuf +// A Claim Records is the metadata of claim data per address +message ClaimRecord { + // address of claim user + string address = 1 [ (gogoproto.moretags) = "yaml:\"address\"" ]; + + // weight that represents the portion from total allocations + double weight = 2; + + // true if action is completed + // index of bool in array refers to action enum # + repeated bool action_completed = 3 [ + (gogoproto.moretags) = "yaml:\"action_completed\"" + ]; +} +``` + +When a user get airdrop for his/her action, claim record is created to prevent duplicated actions on future actions. + +### State + +```protobuf +message GenesisState { + // params defines all the parameters of the module. + Params params = 2 [ + (gogoproto.moretags) = "yaml:\"params\"", + (gogoproto.nullable) = false + ]; + + // list of claim records, one for every airdrop recipient + repeated ClaimRecord claim_records = 3 [ + (gogoproto.moretags) = "yaml:\"claim_records\"", + (gogoproto.nullable) = false + ]; +} +``` + +Claim module's state consists of `params`, and `claim_records`. + +Claim module provides below params + +```protobuf +// Params defines the claim module's parameters. +message Params { + google.protobuf.Timestamp airdrop_start_time = 1 [ + (gogoproto.stdtime) = true, + (gogoproto.nullable) = false, + (gogoproto.moretags) = "yaml:\"airdrop_start_time\"" + ]; + google.protobuf.Timestamp airdrop_duration = 2 [ + (gogoproto.nullable) = false, + (gogoproto.stdduration) = true, + (gogoproto.jsontag) = "airdrop_duration,omitempty", + (gogoproto.moretags) = "yaml:\"airdrop_duration\"" + ]; + // denom of claimable asset + string claim_denom = 3; + // airdrop distribution account + string distributor_address = 4; +} +``` + +1. `airdrop_start_time` refers to the time when user can start to claim airdrop. +2. `airdrop_duration` refers to the duration from start time to end time. +3. `claim_denom` refers to the denomination of claiming tokens. As a default, it's `ustrd`. +4. `distributor_address` refers to the address of distribution account. + +## Queries + +### GRPC queries + +Claim module provides below GRPC queries to query claim status + +```protobuf +service Query { + rpc DistributorAccountBalance(QueryDistributorAccountBalanceRequest) returns (QueryDistributorAccountBalanceResponse) {} + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) {} + rpc ClaimRecord(QueryClaimRecordRequest) returns (QueryClaimRecordResponse) {} + rpc ClaimableForAction(QueryClaimableForActionRequest) returns (QueryClaimableForActionResponse) {} + rpc TotalClaimable(QueryTotalClaimableRequest) returns (QueryTotalClaimableResponse) {} + rpc ClaimStatus(QueryClaimStatusRequest) returns (QueryClaimStatusResponse) {} + rpc ClaimMetadata(QueryClaimMetadataRequest) returns (QueryClaimMetadataResponse) {} +} +``` + +### CLI commands + +For the following commands, you can change `$(strided keys show -a {your key name})` with the address directly. + +Query the claim record for a given address + +```sh +strided query claim claim-record $(strided keys show -a {your key name}) +``` + +Query the claimable amount that would be earned if a specific action is completed right now. + +```sh + +strided query claim claimable-for-action $(strided keys show -a {your key name}) ActionAddLiquidity +``` + +Query the total claimable amount that would be earned if all remaining actions were completed right now. + +```sh +strided query claim total-claimable $(strided keys show -a {your key name}) ActionAddLiquidity +``` + +Query claim status, across all claims, for an address. Returns a list of `ClaimStatus` structs. +``` +message ClaimStatus { + string airdrop_identifier = 1; + bool claimed = 2; +} +``` + +```sh +strided query claim claim-status $(strided keys show -a {your key name}) +``` + +Query claim metadata, across all claims. Returns a `ClaimMetadata` struct, which contains data about the status of each claim. +``` +message ClaimMetadata { + string airdrop_identifier = 1; + string current_round = 2; + google.protobuf.Timestamp current_round_start = 3; + google.protobuf.Timestamp current_round_end = 4; +} +``` + +```sh +strided query claim claim-metadata +``` + +## Events + +`claim` module emits the following events at the time of hooks: + +| Type | Attribute Key | Attribute Value | +| ----- | ------------- | --------------- | +| claim | sender | {receiver} | +| claim | amount | {claim_amount} | diff --git a/x/claim/client/cli/cli_test.go b/x/claim/client/cli/cli_test.go new file mode 100644 index 00000000000..aa22fed15dc --- /dev/null +++ b/x/claim/client/cli/cli_test.go @@ -0,0 +1,327 @@ +package cli_test + +import ( + "fmt" + "strconv" + "testing" + "time" + + sdkmath "cosmossdk.io/math" + tmcli "github.com/cometbft/cometbft/libs/cli" + "github.com/cosmos/cosmos-sdk/client/flags" + addresscodec "github.com/cosmos/cosmos-sdk/codec/address" + "github.com/cosmos/cosmos-sdk/crypto/hd" + "github.com/cosmos/cosmos-sdk/crypto/keyring" + "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" + clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli" + + strideclitestutil "github.com/osmosis-labs/osmosis/v27/testutil/cli" + + "github.com/osmosis-labs/osmosis/v27/testutil/network" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/suite" + + strideapp "github.com/osmosis-labs/osmosis/v27/app" + cmdcfg "github.com/osmosis-labs/osmosis/v27/cmd/strided/config" + + "github.com/osmosis-labs/osmosis/v27/x/claim/client/cli" + + "github.com/osmosis-labs/osmosis/v27/x/claim/types" + claimtypes "github.com/osmosis-labs/osmosis/v27/x/claim/types" +) + +var ( + addr1 sdk.AccAddress + addr2 sdk.AccAddress + distributorMnemonics []string + distributorAddrs []string +) + +func init() { + cmdcfg.SetupConfig() + addr1 = ed25519.GenPrivKey().PubKey().Address().Bytes() + addr2 = ed25519.GenPrivKey().PubKey().Address().Bytes() + distributorMnemonics = []string{ + "chronic learn inflict great answer reward evidence stool open moon skate resource arch raccoon decade tell improve stay onion section blouse carry primary fabric", + "catalog govern other escape eye resemble dirt hundred birth build dirt jacket network blame credit palace similar carry knock auction exotic bus business machine", + } + + distributorAddrs = []string{ + "stride1ajerf2nmxsg0u728ga7665fmlfguqxcd8e36vf", + "stride1zkfk3q70ranm3han4lvutvcvetncxg829j972a", + } +} + +type IntegrationTestSuite struct { + suite.Suite + + cfg network.Config + network *network.Network +} + +func (s *IntegrationTestSuite) SetupSuite() { + s.T().Log("setting up integration test suite") + + s.cfg = network.DefaultConfig() + + app := strideapp.InitStrideTestApp(false) + genState := app.DefaultGenesis() + + claimGenState := claimtypes.DefaultGenesis() + claimGenState.ClaimRecords = []types.ClaimRecord{ + { + Address: addr2.String(), + Weight: sdkmath.LegacyNewDecWithPrec(50, 2), // 50% + ActionCompleted: []bool{false, false, false}, + AirdropIdentifier: claimtypes.DefaultAirdropIdentifier, + }, + } + claimGenStateBz := s.cfg.Codec.MustMarshalJSON(claimGenState) + genState[claimtypes.ModuleName] = claimGenStateBz + + s.cfg.GenesisState = genState + s.network = network.New(s.T(), s.cfg) + + _, err := s.network.WaitForHeight(1) + s.Require().NoError(err) + + // Initiate distributor accounts + val := s.network.Validators[0] + for idx := range distributorMnemonics { + info, _ := val.ClientCtx.Keyring.NewAccount("distributor"+strconv.Itoa(idx), distributorMnemonics[idx], keyring.DefaultBIP39Passphrase, sdk.FullFundraiserPath, hd.Secp256k1) + pubkey, _ := info.GetPubKey() + distributorAddr := sdk.AccAddress(pubkey.Address()) + _, err = clitestutil.MsgSendExec( + val.ClientCtx, + val.Address, + distributorAddr, + sdk.NewCoins(sdk.NewInt64Coin(s.cfg.BondDenom, 1020)), + addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()), + fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), + strideclitestutil.DefaultFeeString(s.cfg), + ) + s.Require().NoError(err) + s.Require().NoError(s.network.WaitForNextBlock()) + } + + // Create a new airdrop + cmd := cli.CmdCreateAirdrop() + clientCtx := val.ClientCtx + + strideChainId := "stride-1" + autopilotEnabled := "false" + + _, err = clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{ + claimtypes.DefaultAirdropIdentifier, + strideChainId, + s.cfg.BondDenom, + strconv.Itoa(int(time.Now().Unix())), + strconv.Itoa(int(claimtypes.DefaultAirdropDuration.Seconds())), + autopilotEnabled, + // common args + fmt.Sprintf("--%s=json", tmcli.OutputFlag), + fmt.Sprintf("--%s=%s", flags.FlagFrom, distributorAddrs[0]), + fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), + strideclitestutil.DefaultFeeString(s.cfg), + }) + + s.Require().NoError(err) +} + +func (s *IntegrationTestSuite) TearDownSuite() { + // s.T().Log("tearing down integration test suite") + // s.network.Cleanup() +} + +func (s *IntegrationTestSuite) TestCmdQueryClaimRecord() { + val := s.network.Validators[0] + + testCases := []struct { + name string + args []string + }{ + { + "query claim record", + []string{ + claimtypes.DefaultAirdropIdentifier, + addr1.String(), + fmt.Sprintf("--%s=json", tmcli.OutputFlag), + }, + }, + } + + for _, tc := range testCases { + tc := tc + + s.Run(tc.name, func() { + cmd := cli.GetCmdQueryClaimRecord() + clientCtx := val.ClientCtx + + out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args) + s.Require().NoError(err) + + var result types.QueryClaimRecordResponse + s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), &result)) + }) + } +} + +func (s *IntegrationTestSuite) TestCmdTxSetAirdropAllocations() { + val := s.network.Validators[0] + + claimRecords := []claimtypes.ClaimRecord{ + { + Address: "stride1k8g9sagjpdwreqqf0qgqmd46l37595ea5ft9x6", + Weight: sdkmath.LegacyNewDecWithPrec(50, 2), // 50% + ActionCompleted: []bool{false, false, false}, + AirdropIdentifier: claimtypes.DefaultAirdropIdentifier, + }, + { + Address: "stride1av5lwh0msnafn04xkhdyk6mrykxthrawy7uf3d", + Weight: sdkmath.LegacyNewDecWithPrec(30, 2), // 30% + ActionCompleted: []bool{false, false, false}, + AirdropIdentifier: claimtypes.DefaultAirdropIdentifier, + }, + } + + testCases := []struct { + name string + args []string + expClaimableAmounts []sdk.Coins + }{ + { + "set-airdrop-allocations tx", + []string{ + claimtypes.DefaultAirdropIdentifier, + fmt.Sprintf("%s,%s", claimRecords[0].Address, claimRecords[1].Address), + fmt.Sprintf("%s,%s", claimRecords[0].Weight.String(), claimRecords[1].Weight.String()), + fmt.Sprintf("--%s=json", tmcli.OutputFlag), + fmt.Sprintf("--%s=%s", flags.FlagFrom, distributorAddrs[0]), + // common args + fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), + strideclitestutil.DefaultFeeString(s.cfg), + }, + []sdk.Coins{ + sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdkmath.NewInt(77))), + sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdkmath.NewInt(46))), + }, + }, + } + + for _, tc := range testCases { + tc := tc + + s.Require().NoError(s.network.WaitForNextBlock()) + + s.Run(tc.name, func() { + cmd := cli.CmdSetAirdropAllocations() + clientCtx := val.ClientCtx + + _, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args) + s.Require().NoError(err) + s.Require().NoError(s.network.WaitForNextBlock()) + + // Check if claim record is properly set + cmd = cli.GetCmdQueryClaimRecord() + out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{ + claimtypes.DefaultAirdropIdentifier, + claimRecords[0].Address, + fmt.Sprintf("--%s=json", tmcli.OutputFlag), + }) + s.Require().NoError(err) + + var result types.QueryClaimRecordResponse + s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), &result)) + s.Require().Equal(result.ClaimRecord.String(), claimRecords[0].String()) + + // Check if claimable amount for actions is correct + cmd = cli.GetCmdQueryClaimableForAction() + clientCtx = val.ClientCtx + + out, err = clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{ + claimtypes.DefaultAirdropIdentifier, + claimRecords[0].Address, + types.ACTION_FREE.String(), + fmt.Sprintf("--%s=json", tmcli.OutputFlag), + }) + s.Require().NoError(err) + + var result1 types.QueryClaimableForActionResponse + s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), &result1)) + s.Require().Equal(tc.expClaimableAmounts[0].String(), result1.Coins.String()) + }) + } +} + +func (s *IntegrationTestSuite) TestCmdTxCreateAirdrop() { + val := s.network.Validators[0] + + airdrop := claimtypes.Airdrop{ + AirdropIdentifier: "evmos", + ChainId: "evmos-1", + AirdropStartTime: time.Now(), + AirdropDuration: claimtypes.DefaultAirdropDuration, + DistributorAddress: distributorAddrs[1], + ClaimDenom: claimtypes.DefaultClaimDenom, + AutopilotEnabled: true, + } + + testCases := []struct { + name string + args []string + expAirdrop claimtypes.Airdrop + }{ + { + "create-airdrop tx", + []string{ + airdrop.AirdropIdentifier, + airdrop.ChainId, + airdrop.ClaimDenom, + strconv.Itoa(int(time.Now().Unix())), // start time + strconv.Itoa(int(claimtypes.DefaultAirdropDuration.Seconds())), // duration + fmt.Sprintf("%v", airdrop.AutopilotEnabled), + // common args + fmt.Sprintf("--%s=json", tmcli.OutputFlag), + fmt.Sprintf("--%s=%s", flags.FlagFrom, distributorAddrs[1]), + fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), + strideclitestutil.DefaultFeeString(s.cfg), + }, + airdrop, + }, + } + + for _, tc := range testCases { + tc := tc + + s.Require().NoError(s.network.WaitForNextBlock()) + + s.Run(tc.name, func() { + cmd := cli.CmdCreateAirdrop() + clientCtx := val.ClientCtx + + _, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, tc.args) + s.Require().NoError(err) + s.Require().NoError(s.network.WaitForNextBlock()) + + // Check if airdrop was created properly + cmd = cli.GetCmdQueryParams() + out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{ + fmt.Sprintf("--%s=json", tmcli.OutputFlag), + }) + s.Require().NoError(err) + + var result types.Params + s.Require().NoError(clientCtx.Codec.UnmarshalJSON(out.Bytes(), &result)) + s.Require().Equal(tc.expAirdrop.AirdropDuration, result.Airdrops[1].AirdropDuration) + }) + } +} + +func TestIntegrationTestSuite(t *testing.T) { + suite.Run(t, new(IntegrationTestSuite)) +} diff --git a/x/claim/client/cli/query.go b/x/claim/client/cli/query.go new file mode 100644 index 00000000000..133e0a02705 --- /dev/null +++ b/x/claim/client/cli/query.go @@ -0,0 +1,313 @@ +package cli + +import ( + "context" + "fmt" + "strings" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/version" + "github.com/spf13/cobra" + + "github.com/osmosis-labs/osmosis/v27/x/claim/types" +) + +// GetQueryCmd returns the cli query commands for this module +func GetQueryCmd(queryRoute string) *cobra.Command { + claimQueryCmd := &cobra.Command{ + Use: types.ModuleName, + Short: fmt.Sprintf("Querying commands for the %s module", types.ModuleName), + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + claimQueryCmd.AddCommand( + GetCmdQueryDistributorAccountBalance(), + GetCmdQueryParams(), + GetCmdQueryClaimRecord(), + GetCmdQueryClaimableForAction(), + GetCmdQueryTotalClaimable(), + GetCmdQueryUserVestings(), + GetCmdClaimStatus(), + GetCmdQueryClaimMetadata(), + ) + + return claimQueryCmd +} + +// GetCmdQueryParams implements a command to return the current minting +// parameters. +func GetCmdQueryDistributorAccountBalance() *cobra.Command { + cmd := &cobra.Command{ + Use: "distributor-account-balance [airdrop-identifier]", + Short: "Query the current distributor's account balance", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + argAirdropIdentifier := args[0] + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + req := &types.QueryDistributorAccountBalanceRequest{ + AirdropIdentifier: argAirdropIdentifier, + } + res, err := queryClient.DistributorAccountBalance(context.Background(), req) + + if err != nil { + return err + } + + return clientCtx.PrintProto(res) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +// GetCmdQueryParams implements a command to return the current minting +// parameters. +func GetCmdQueryParams() *cobra.Command { + cmd := &cobra.Command{ + Use: "params", + Short: "Query the current claims parameters", + Args: cobra.NoArgs, + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + params := &types.QueryParamsRequest{} + res, err := queryClient.Params(context.Background(), params) + + if err != nil { + return err + } + + return clientCtx.PrintProto(&res.Params) + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +// GetCmdQueryClaimRecord implements the query claim-records command. +func GetCmdQueryClaimRecord() *cobra.Command { + cmd := &cobra.Command{ + Use: "claim-record [airdrop-identifier] [address]", + Args: cobra.ExactArgs(2), + Short: "Query the claim record for an account.", + Long: strings.TrimSpace( + fmt.Sprintf(`Query the claim record for an account. +This contains an address' initial claimable amounts, and the completed actions. + +Example: +$ %s query claim claim-record
+`, + version.AppName, + ), + ), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + // Query store + res, err := queryClient.ClaimRecord(context.Background(), &types.QueryClaimRecordRequest{AirdropIdentifier: args[0], Address: args[1]}) + if err != nil { + return err + } + return clientCtx.PrintObjectLegacy(res) + }, + } + flags.AddQueryFlagsToCmd(cmd) + return cmd +} + +// GetCmdQueryClaimableForAction implements the query claimable for action command. +func GetCmdQueryClaimableForAction() *cobra.Command { + cmd := &cobra.Command{ + Use: "claimable-for-action [airdrop-identifier] [address] [action]", + Args: cobra.ExactArgs(3), + Short: "Query an address' claimable amount for a specific action", + Long: strings.TrimSpace( + fmt.Sprintf(`Query an address' claimable amount for a specific action + +Example: +$ %s query claim claimable-for-action stride1h4astdfzjhcwahtfrh24qtvndzzh49xvqtfftk ActionLiquidStake +`, + version.AppName, + ), + ), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + + action, ok := types.Action_value[args[2]] + if !ok { + return fmt.Errorf("invalid Action type: %s. Valid actions are %s, %s, %s", args[2], + types.ACTION_FREE, types.ACTION_LIQUID_STAKE, types.ACTION_DELEGATE_STAKE) + } + + // Query store + res, err := queryClient.ClaimableForAction(context.Background(), &types.QueryClaimableForActionRequest{ + AirdropIdentifier: args[0], + Address: args[1], + Action: types.Action(action), + }) + if err != nil { + return err + } + return clientCtx.PrintObjectLegacy(res) + }, + } + flags.AddQueryFlagsToCmd(cmd) + return cmd +} + +// GetCmdQueryClaimable implements the query claimables command. +func GetCmdQueryTotalClaimable() *cobra.Command { + cmd := &cobra.Command{ + Use: "total-claimable [airdrop-identifier] [address] [include-claimed]", + Args: cobra.ExactArgs(3), + Short: "Query the total claimable amount remaining for an account.", + Long: strings.TrimSpace( + fmt.Sprintf(`Query the total claimable amount remaining for an account. +Example: +$ %s query claim total-claimable stride stride1h4astdfzjhcwahtfrh24qtvndzzh49xvqtfftk true +`, + version.AppName, + ), + ), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + // Query store + res, err := queryClient.TotalClaimable(context.Background(), &types.QueryTotalClaimableRequest{ + AirdropIdentifier: args[0], + Address: args[1], + IncludeClaimed: args[2] == "true", + }) + if err != nil { + return err + } + return clientCtx.PrintObjectLegacy(res) + }, + } + flags.AddQueryFlagsToCmd(cmd) + return cmd +} + +// GetCmdQueryUserVestings implements the query user vestings command. +func GetCmdQueryUserVestings() *cobra.Command { + cmd := &cobra.Command{ + Use: "user-vestings [address]", + Args: cobra.ExactArgs(1), + Short: "Query user vestings.", + Long: strings.TrimSpace( + fmt.Sprintf(`Query user vestings for an account. +Example: +$ %s query claim user-vestings stride1h4astdfzjhcwahtfrh24qtvndzzh49xvqtfftk +`, + version.AppName, + ), + ), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + // Query store + res, err := queryClient.UserVestings(context.Background(), &types.QueryUserVestingsRequest{ + Address: args[0], + }) + if err != nil { + return err + } + return clientCtx.PrintObjectLegacy(res) + }, + } + flags.AddQueryFlagsToCmd(cmd) + return cmd +} + +// GetCmdClaimStatus implements the query user vestings command. +func GetCmdClaimStatus() *cobra.Command { + cmd := &cobra.Command{ + Use: "claim-status [address]", + Args: cobra.ExactArgs(1), + Short: "Query claim status for an address, across all claims.", + Long: strings.TrimSpace( + fmt.Sprintf(`Query claim status for an address, across all claims. +Example: +$ %s query claim claim-status stride1h4astdfzjhcwahtfrh24qtvndzzh49xvqtfftk +`, + version.AppName, + ), + ), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + // Query store + res, err := queryClient.ClaimStatus(context.Background(), &types.QueryClaimStatusRequest{ + Address: args[0], + }) + if err != nil { + return err + } + return clientCtx.PrintObjectLegacy(res) + }, + } + flags.AddQueryFlagsToCmd(cmd) + return cmd +} + +// GetCmdQueryClaimMetadata implements the query user vestings command. +func GetCmdQueryClaimMetadata() *cobra.Command { + cmd := &cobra.Command{ + Use: "claim-metadata", + Args: cobra.ExactArgs(0), + Short: "Query claim metadata.", + Long: strings.TrimSpace( + fmt.Sprintf(`Query claim-metadata. Returns the current round, start and end time for claims. %s`, + version.AppName, + ), + ), + RunE: func(cmd *cobra.Command, args []string) error { + clientCtx, err := client.GetClientQueryContext(cmd) + if err != nil { + return err + } + queryClient := types.NewQueryClient(clientCtx) + // Query store + res, err := queryClient.ClaimMetadata(context.Background(), &types.QueryClaimMetadataRequest{}) + if err != nil { + return err + } + return clientCtx.PrintObjectLegacy(res) + }, + } + flags.AddQueryFlagsToCmd(cmd) + return cmd +} diff --git a/x/claim/client/cli/tx.go b/x/claim/client/cli/tx.go new file mode 100644 index 00000000000..cd80955bc38 --- /dev/null +++ b/x/claim/client/cli/tx.go @@ -0,0 +1,27 @@ +package cli + +import ( + "fmt" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/spf13/cobra" + + "github.com/osmosis-labs/osmosis/v27/x/claim/types" +) + +// GetTxCmd returns the transaction commands for this module +func GetTxCmd() *cobra.Command { + claimTxCmd := &cobra.Command{ + Use: types.ModuleName, + Short: fmt.Sprintf("%s transactions subcommands", types.ModuleName), + DisableFlagParsing: true, + SuggestionsMinimumDistance: 2, + RunE: client.ValidateCmd, + } + + claimTxCmd.AddCommand(CmdClaimFreeAmount()) + claimTxCmd.AddCommand(CmdSetAirdropAllocations()) + claimTxCmd.AddCommand(CmdCreateAirdrop()) + claimTxCmd.AddCommand(CmdDeleteAirdrop()) + return claimTxCmd +} diff --git a/x/claim/client/cli/tx_claim_free_amount.go b/x/claim/client/cli/tx_claim_free_amount.go new file mode 100644 index 00000000000..c689902605a --- /dev/null +++ b/x/claim/client/cli/tx_claim_free_amount.go @@ -0,0 +1,38 @@ +package cli + +import ( + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/client/tx" + "github.com/spf13/cobra" + + "github.com/osmosis-labs/osmosis/v27/x/claim/types" +) + +func CmdClaimFreeAmount() *cobra.Command { + cmd := &cobra.Command{ + Use: "claim-free-amount", + Short: "Broadcast message claim-free-amount", + Args: cobra.ExactArgs(0), + RunE: func(cmd *cobra.Command, args []string) (err error) { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := types.NewMsgClaimFreeAmount( + clientCtx.GetFromAddress().String(), + ) + + if err := msg.ValidateBasic(); err != nil { + return err + } + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} diff --git a/x/claim/client/cli/tx_create_airdrop.go b/x/claim/client/cli/tx_create_airdrop.go new file mode 100644 index 00000000000..15290f454f4 --- /dev/null +++ b/x/claim/client/cli/tx_create_airdrop.go @@ -0,0 +1,62 @@ +package cli + +import ( + "strconv" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/client/tx" + "github.com/spf13/cobra" + + "github.com/osmosis-labs/osmosis/v27/x/claim/types" +) + +func CmdCreateAirdrop() *cobra.Command { + cmd := &cobra.Command{ + Use: "create-airdrop [identifier] [chain-id] [denom] [start] [duration] [autopilot-enabled]", + Short: "Broadcast message create-airdrop", + Args: cobra.ExactArgs(6), + RunE: func(cmd *cobra.Command, args []string) (err error) { + identifier := args[0] + chainId := args[1] + denom := args[2] + argStartTime, err := strconv.ParseUint(args[3], 10, 64) + if err != nil { + return err + } + argDuration, err := strconv.ParseUint(args[4], 10, 64) + if err != nil { + return err + } + autopilotEnabled, err := strconv.ParseBool(args[5]) + if err != nil { + return err + } + + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + distributor := clientCtx.GetFromAddress().String() + msg := types.NewMsgCreateAirdrop( + distributor, + identifier, + chainId, + denom, + argStartTime, + argDuration, + autopilotEnabled, + ) + + if err := msg.ValidateBasic(); err != nil { + return err + } + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} diff --git a/x/claim/client/cli/tx_delete_airdrop.go b/x/claim/client/cli/tx_delete_airdrop.go new file mode 100644 index 00000000000..943ce31909a --- /dev/null +++ b/x/claim/client/cli/tx_delete_airdrop.go @@ -0,0 +1,39 @@ +package cli + +import ( + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/client/tx" + "github.com/spf13/cobra" + + "github.com/osmosis-labs/osmosis/v27/x/claim/types" +) + +func CmdDeleteAirdrop() *cobra.Command { + cmd := &cobra.Command{ + Use: "delete-airdrop [identifier]", + Short: "Broadcast message delete-airdrop", + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) (err error) { + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := types.NewMsgDeleteAirdrop( + clientCtx.GetFromAddress().String(), + args[0], + ) + + if err := msg.ValidateBasic(); err != nil { + return err + } + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} diff --git a/x/claim/client/cli/tx_set_airdrop_allocations.go b/x/claim/client/cli/tx_set_airdrop_allocations.go new file mode 100644 index 00000000000..fbbb87ef23f --- /dev/null +++ b/x/claim/client/cli/tx_set_airdrop_allocations.go @@ -0,0 +1,57 @@ +package cli + +import ( + "strings" + + sdkmath "cosmossdk.io/math" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/client/flags" + "github.com/cosmos/cosmos-sdk/client/tx" + "github.com/spf13/cobra" + + "github.com/osmosis-labs/osmosis/v27/x/claim/types" +) + +func CmdSetAirdropAllocations() *cobra.Command { + cmd := &cobra.Command{ + Use: "set-airdrop-allocations [airdrop-identifier] [user-addresses] [user-weights]", + Short: "Broadcast message set-airdrop-allocations", + Args: cobra.ExactArgs(3), + RunE: func(cmd *cobra.Command, args []string) (err error) { + argAddresses := strings.Split(args[1], ",") + argWeights := strings.Split(args[2], ",") + weights := []sdkmath.LegacyDec{} + + for _, weight := range argWeights { + weightDec, err := sdkmath.LegacyNewDecFromStr(weight) + if err != nil { + return err + } + weights = append(weights, weightDec) + } + + clientCtx, err := client.GetClientTxContext(cmd) + if err != nil { + return err + } + + msg := types.NewMsgSetAirdropAllocations( + clientCtx.GetFromAddress().String(), + args[0], + argAddresses, + weights, + ) + + if err := msg.ValidateBasic(); err != nil { + return err + } + + return tx.GenerateOrBroadcastTxCLI(clientCtx, cmd.Flags(), msg) + }, + } + + flags.AddTxFlagsToCmd(cmd) + + return cmd +} diff --git a/x/claim/keeper/abci.go b/x/claim/keeper/abci.go new file mode 100644 index 00000000000..5d0726c7f70 --- /dev/null +++ b/x/claim/keeper/abci.go @@ -0,0 +1,26 @@ +package keeper + +import sdk "github.com/cosmos/cosmos-sdk/types" + +// Endblocker handler +func (k Keeper) EndBlocker(ctx sdk.Context) { + // Check airdrop elapsed time every 1000 blocks + if ctx.BlockHeight()%1000 == 0 { + params, err := k.GetParams(ctx) + if err != nil { + panic(err) + } + + // End Airdrop + for _, airdrop := range params.Airdrops { + goneTime := ctx.BlockTime().Sub(airdrop.AirdropStartTime) + if goneTime > airdrop.AirdropDuration { + // airdrop time has passed + err := k.EndAirdrop(ctx, airdrop.AirdropIdentifier) + if err != nil { + panic(err) + } + } + } + } +} diff --git a/x/claim/keeper/claim.go b/x/claim/keeper/claim.go new file mode 100644 index 00000000000..6de32614054 --- /dev/null +++ b/x/claim/keeper/claim.go @@ -0,0 +1,892 @@ +package keeper + +import ( + "fmt" + "strconv" + "strings" + "time" + + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + "cosmossdk.io/store/prefix" + storetypes "cosmossdk.io/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + "github.com/cosmos/gogoproto/proto" + + "github.com/osmosis-labs/osmosis/v27/utils" + "github.com/osmosis-labs/osmosis/v27/x/claim/types" + vestingtypes "github.com/osmosis-labs/osmosis/v27/x/claim/vesting/types" + epochstypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" +) + +func (k Keeper) LoadAllocationData(ctx sdk.Context, allocationData string) bool { + records := []types.ClaimRecord{} + + lines := strings.Split(allocationData, "\n") + allocatedFlags := map[string]bool{} + for _, line := range lines { + data := strings.Split(line, ",") + if data[0] == "" || data[1] == "" || data[2] == "" { + continue + } + + airdropIdentifier := data[0] + sourceChainAddr := data[1] + airdropWeight := data[2] + strideAddr := utils.ConvertAddressToStrideAddress(sourceChainAddr) + if strideAddr == "" { + continue + } + allocationIdentifier := airdropIdentifier + strideAddr + + // Round weight value so that it always has 10 decimal places + weightFloat64, err := strconv.ParseFloat(airdropWeight, 64) + if err != nil { + continue + } + + weightStr := fmt.Sprintf("%.10f", weightFloat64) + weight, err := sdkmath.LegacyNewDecFromStr(weightStr) + if weight.IsNegative() || weight.IsZero() { + continue + } + + if err != nil || allocatedFlags[allocationIdentifier] { + continue + } + + _, err = sdk.AccAddressFromBech32(strideAddr) + if err != nil { + continue + } + + records = append(records, types.ClaimRecord{ + AirdropIdentifier: airdropIdentifier, + Address: strideAddr, + Weight: weight, + ActionCompleted: []bool{false, false, false}, + }) + + allocatedFlags[allocationIdentifier] = true + } + + if err := k.SetClaimRecordsWithWeights(ctx, records); err != nil { + panic(err) + } + return true +} + +// Remove duplicated airdrops for given params +func (k Keeper) GetUnallocatedUsers(ctx sdk.Context, identifier string, users []string, weights []sdkmath.LegacyDec) ([]string, []sdkmath.LegacyDec) { + store := ctx.KVStore(k.storeKey) + prefixStore := prefix.NewStore(store, append([]byte(types.ClaimRecordsStorePrefix), []byte(identifier)...)) + newUsers := []string{} + newWeights := []sdkmath.LegacyDec{} + for idx, user := range users { + strideAddr := utils.ConvertAddressToStrideAddress(user) + addr, _ := sdk.AccAddressFromBech32(strideAddr) + // If new user, then append user and weight + if !prefixStore.Has(addr) { + newUsers = append(newUsers, user) + newWeights = append(newWeights, weights[idx]) + } + } + + return newUsers, newWeights +} + +// Get airdrop duration for action +func GetAirdropDurationForAction(action types.Action) int64 { + if action == types.ACTION_DELEGATE_STAKE { + return int64(types.DefaultVestingDurationForDelegateStake.Seconds()) + } else if action == types.ACTION_LIQUID_STAKE { + return int64(types.DefaultVestingDurationForLiquidStake.Seconds()) + } + return int64(0) +} + +// Get airdrop by distributor +func (k Keeper) GetAirdropByDistributor(ctx sdk.Context, distributor string) *types.Airdrop { + params, err := k.GetParams(ctx) + if err != nil { + panic(err) + } + + if distributor == "" { + return nil + } + + for _, airdrop := range params.Airdrops { + if airdrop.DistributorAddress == distributor { + return airdrop + } + } + + return nil +} + +// Get airdrop by identifier +func (k Keeper) GetAirdropByIdentifier(ctx sdk.Context, airdropIdentifier string) *types.Airdrop { + params, err := k.GetParams(ctx) + if err != nil { + panic(err) + } + + if airdropIdentifier == "" { + return nil + } + + for _, airdrop := range params.Airdrops { + if airdrop.AirdropIdentifier == airdropIdentifier { + return airdrop + } + } + + return nil +} + +// Get airdrop by chain id +func (k Keeper) GetAirdropByChainId(ctx sdk.Context, chainId string) (airdrop *types.Airdrop, found bool) { + params, err := k.GetParams(ctx) + if err != nil { + panic(err) + } + + if chainId == "" { + return nil, false + } + + for _, airdrop := range params.Airdrops { + if airdrop.ChainId == chainId { + return airdrop, true + } + } + + return nil, false +} + +func (k Keeper) GetAirdropIds(ctx sdk.Context) []string { + params, err := k.GetParams(ctx) + if err != nil { + panic(err) + } + + // init airdrop ids + airdropIds := []string{} + + for _, airdrop := range params.Airdrops { + // append airdrop to airdrop ids + airdropIds = append(airdropIds, airdrop.AirdropIdentifier) + } + + return airdropIds +} + +// GetDistributorAccountBalance gets the airdrop coin balance of module account +func (k Keeper) GetDistributorAccountBalance(ctx sdk.Context, airdropIdentifier string) (sdk.Coin, error) { + airdrop := k.GetAirdropByIdentifier(ctx, airdropIdentifier) + if airdrop == nil { + return sdk.Coin{}, errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid airdrop identifier: GetDistributorAccountBalance") + } + + addr, err := k.GetAirdropDistributor(ctx, airdropIdentifier) + if err != nil { + return sdk.Coin{}, err + } + return k.bankKeeper.GetBalance(ctx, addr, airdrop.ClaimDenom), nil +} + +// EndAirdrop ends airdrop and clear all user claim records +func (k Keeper) EndAirdrop(ctx sdk.Context, airdropIdentifier string) error { + ctx.Logger().Info("Clearing claims module state entries") + k.clearInitialClaimables(ctx, airdropIdentifier) + k.DeleteTotalWeight(ctx, airdropIdentifier) + return k.DeleteAirdropAndEpoch(ctx, airdropIdentifier) +} + +func (k Keeper) IsInitialPeriodPassed(ctx sdk.Context, airdropIdentifier string) bool { + airdrop := k.GetAirdropByIdentifier(ctx, airdropIdentifier) + if airdrop == nil { + k.Logger(ctx).Info("[CLAIM] airdrop is nil") + return false + } + goneTime := ctx.BlockTime().Sub(airdrop.AirdropStartTime) + k.Logger(ctx).Info(fmt.Sprintf("[CLAIM] goneTime %v", goneTime)) + // Check if elapsed time since airdrop start is over the initial period of vesting + k.Logger(ctx).Info(fmt.Sprintf("[CLAIM] goneTime.Seconds() %v", goneTime.Seconds())) + k.Logger(ctx).Info(fmt.Sprintf("[CLAIM] types.DefaultVestingInitialPeriod.Seconds() %v", types.DefaultVestingInitialPeriod.Seconds())) + return goneTime.Seconds() >= types.DefaultVestingInitialPeriod.Seconds() +} + +// ResetClaimStatus clear users' claimed status only after initial period of vesting is passed +func (k Keeper) ResetClaimStatus(ctx sdk.Context, airdropIdentifier string) error { + passed := k.IsInitialPeriodPassed(ctx, airdropIdentifier) + k.Logger(ctx).Info(fmt.Sprintf("[CLAIM] k.IsInitialPeriodPassed(ctx, airdropIdentifier) %v", passed)) + if passed { + k.Logger(ctx).Info("Resetting claim status") + // first, reset the claim records + records := k.GetClaimRecords(ctx, airdropIdentifier) + k.Logger(ctx).Info(fmt.Sprintf("[CLAIM] len(records) %v", len(records))) + for idx := range records { + records[idx].ActionCompleted = []bool{false, false, false} + } + + k.Logger(ctx).Info("[CLAIM] SetClaimRecords...") + if err := k.SetClaimRecords(ctx, records); err != nil { + k.Logger(ctx).Info(fmt.Sprintf("[CLAIM] SetClaimRecords %v", err.Error())) + return err + } + // then, reset the airdrop ClaimedSoFar + k.Logger(ctx).Info("[CLAIM] ResetClaimedSoFar...") + if err := k.ResetClaimedSoFar(ctx, airdropIdentifier); err != nil { + k.Logger(ctx).Info(fmt.Sprintf("[CLAIM] ResetClaimedSoFar %v", err.Error())) + return err + } + } + return nil +} + +// ClearClaimables clear claimable amounts +func (k Keeper) clearInitialClaimables(ctx sdk.Context, airdropIdentifier string) { + store := ctx.KVStore(k.storeKey) + iterator := storetypes.KVStorePrefixIterator(store, append([]byte(types.ClaimRecordsStorePrefix), []byte(airdropIdentifier)...)) + defer iterator.Close() + for ; iterator.Valid(); iterator.Next() { + key := iterator.Key() + store.Delete(key) + } +} + +func (k Keeper) SetClaimRecordsWithWeights(ctx sdk.Context, claimRecords []types.ClaimRecord) error { + // Set total weights + weights := make(map[string]sdkmath.LegacyDec) + for _, record := range claimRecords { + if weights[record.AirdropIdentifier].IsNil() { + weights[record.AirdropIdentifier] = sdkmath.LegacyZeroDec() + } + + weights[record.AirdropIdentifier] = weights[record.AirdropIdentifier].Add(record.Weight) + } + + // DO NOT REMOVE: StringMapKeys fixes non-deterministic map iteration + for _, identifier := range utils.StringMapKeys(weights) { + weight := weights[identifier] + k.SetTotalWeight(ctx, weight, identifier) + } + + // Set claim records + return k.SetClaimRecords(ctx, claimRecords) +} + +// SetClaimRecords set claim records and total weights +func (k Keeper) SetClaimRecords(ctx sdk.Context, claimRecords []types.ClaimRecord) error { + for _, claimRecord := range claimRecords { + err := k.SetClaimRecord(ctx, claimRecord) + if err != nil { + return err + } + } + return nil +} + +// GetClaimables get claimables for genesis export +func (k Keeper) GetClaimRecords(ctx sdk.Context, airdropIdentifier string) []types.ClaimRecord { + store := ctx.KVStore(k.storeKey) + prefixStore := prefix.NewStore(store, append([]byte(types.ClaimRecordsStorePrefix), []byte(airdropIdentifier)...)) + + iterator := prefixStore.Iterator(nil, nil) + defer iterator.Close() + + claimRecords := []types.ClaimRecord{} + for ; iterator.Valid(); iterator.Next() { + + claimRecord := types.ClaimRecord{} + + err := proto.Unmarshal(iterator.Value(), &claimRecord) + if err != nil { + panic(err) + } + + claimRecords = append(claimRecords, claimRecord) + } + return claimRecords +} + +// GetClaimRecord returns the claim record for a specific address +func (k Keeper) GetClaimRecord(ctx sdk.Context, addr sdk.AccAddress, airdropIdentifier string) (types.ClaimRecord, error) { + store := ctx.KVStore(k.storeKey) + prefixStore := prefix.NewStore(store, append([]byte(types.ClaimRecordsStorePrefix), []byte(airdropIdentifier)...)) + if !prefixStore.Has(addr) { + return types.ClaimRecord{}, nil + } + bz := prefixStore.Get(addr) + + claimRecord := types.ClaimRecord{} + err := proto.Unmarshal(bz, &claimRecord) + if err != nil { + return types.ClaimRecord{}, err + } + + return claimRecord, nil +} + +// SetTotalWeight sets total sum of user weights in store +func (k Keeper) SetTotalWeight(ctx sdk.Context, totalWeight sdkmath.LegacyDec, airdropIdentifier string) { + store := ctx.KVStore(k.storeKey) + store.Set(append([]byte(types.TotalWeightKey), []byte(airdropIdentifier)...), []byte(totalWeight.String())) +} + +// DeleteTotalWeight deletes total weights for airdrop +func (k Keeper) DeleteTotalWeight(ctx sdk.Context, airdropIdentifier string) { + store := ctx.KVStore(k.storeKey) + store.Delete(append([]byte(types.TotalWeightKey), []byte(airdropIdentifier)...)) +} + +// GetTotalWeight gets total sum of user weights in store +func (k Keeper) GetTotalWeight(ctx sdk.Context, airdropIdentifier string) (sdkmath.LegacyDec, error) { + store := ctx.KVStore(k.storeKey) + b := store.Get(append([]byte(types.TotalWeightKey), []byte(airdropIdentifier)...)) + if b == nil { + return sdkmath.LegacyZeroDec(), nil + } + totalWeight, err := sdkmath.LegacyNewDecFromStr(string(b)) + if err != nil { + return sdkmath.LegacyZeroDec(), types.ErrTotalWeightParse + } + return totalWeight, nil +} + +// SetClaimRecord sets a claim record for an address in store +func (k Keeper) SetClaimRecord(ctx sdk.Context, claimRecord types.ClaimRecord) error { + store := ctx.KVStore(k.storeKey) + prefixStore := prefix.NewStore(store, append([]byte(types.ClaimRecordsStorePrefix), []byte(claimRecord.AirdropIdentifier)...)) + + bz, err := proto.Marshal(&claimRecord) + if err != nil { + return err + } + + addr, err := sdk.AccAddressFromBech32(claimRecord.Address) + if err != nil { + return err + } + + prefixStore.Set(addr, bz) + return nil +} + +func (k Keeper) DeleteClaimRecord(ctx sdk.Context, addr sdk.AccAddress, airdropId string) error { + store := ctx.KVStore(k.storeKey) + prefixStore := prefix.NewStore(store, append([]byte(types.ClaimRecordsStorePrefix), []byte(airdropId)...)) + + prefixStore.Delete(addr) + + return nil +} + +// Get airdrop distributor address +func (k Keeper) GetAirdropDistributor(ctx sdk.Context, airdropIdentifier string) (sdk.AccAddress, error) { + airdrop := k.GetAirdropByIdentifier(ctx, airdropIdentifier) + if airdrop == nil { + return sdk.AccAddress{}, errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid airdrop identifier: GetAirdropDistributor") + } + return sdk.AccAddressFromBech32(airdrop.DistributorAddress) +} + +// Get airdrop claim denom +func (k Keeper) GetAirdropClaimDenom(ctx sdk.Context, airdropIdentifier string) (string, error) { + airdrop := k.GetAirdropByIdentifier(ctx, airdropIdentifier) + if airdrop == nil { + return "", errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "invalid airdrop identifier: GetAirdropClaimDenom") + } + return airdrop.ClaimDenom, nil +} + +// GetClaimable returns claimable amount for a specific action done by an address +func (k Keeper) GetClaimableAmountForAction(ctx sdk.Context, addr sdk.AccAddress, action types.Action, airdropIdentifier string, includeClaimed bool) (sdk.Coins, error) { + claimRecord, err := k.GetClaimRecord(ctx, addr, airdropIdentifier) + if err != nil { + return nil, err + } + + if claimRecord.Address == "" { + return sdk.Coins{}, nil + } + + // if action already completed (and we're not including claimed tokens), nothing is claimable + if !includeClaimed && claimRecord.ActionCompleted[action] { + return sdk.Coins{}, nil + } + + airdrop := k.GetAirdropByIdentifier(ctx, airdropIdentifier) + if ctx.BlockTime().Before(airdrop.AirdropStartTime) { + return sdk.Coins{}, nil + } + + totalWeight, err := k.GetTotalWeight(ctx, airdropIdentifier) + if err != nil { + return nil, types.ErrFailedToGetTotalWeight + } + + percentageForAction := types.PercentageForFree + if action == types.ACTION_DELEGATE_STAKE { + percentageForAction = types.PercentageForStake + } else if action == types.ACTION_LIQUID_STAKE { + percentageForAction = types.PercentageForLiquidStake + } + + distributorAccountBalance, err := k.GetDistributorAccountBalance(ctx, airdropIdentifier) + if err != nil { + return sdk.Coins{}, err + } + + poolBal := distributorAccountBalance.AddAmount(airdrop.ClaimedSoFar) + + claimableAmount := sdkmath.LegacyNewDec(poolBal.Amount.Int64()). + Mul(percentageForAction). + Mul(claimRecord.Weight). + Quo(totalWeight).RoundInt() + claimableCoins := sdk.NewCoins(sdk.NewCoin(airdrop.ClaimDenom, claimableAmount)) + + elapsedAirdropTime := ctx.BlockTime().Sub(airdrop.AirdropStartTime) + // The entire airdrop has completed + if elapsedAirdropTime > airdrop.AirdropDuration { + return sdk.Coins{}, nil + } + return claimableCoins, nil +} + +// GetUserVestings returns all vestings associated to the user account +func (k Keeper) GetUserVestings(ctx sdk.Context, addr sdk.AccAddress) (vestingtypes.Periods, sdk.Coins) { + acc := k.accountKeeper.GetAccount(ctx, addr) + strideVestingAcc, isStrideVestingAccount := acc.(*vestingtypes.StridePeriodicVestingAccount) + if !isStrideVestingAccount { + return vestingtypes.Periods{}, sdk.Coins{} + } else { + return strideVestingAcc.VestingPeriods, strideVestingAcc.GetVestedCoins(ctx.BlockTime()) + } +} + +func AreAllTrue(bools []bool) bool { + for _, b := range bools { + if !b { + return false + } + } + return true +} + +// GetClaimStatus returns all claim status associated with the user account +func (k Keeper) GetClaimStatus(ctx sdk.Context, addr sdk.AccAddress) ([]types.ClaimStatus, error) { + // Get all airdrop identifiers + airdropIdentifiers := k.GetAirdropIds(ctx) + var claimStatusList []types.ClaimStatus + for _, airdropId := range airdropIdentifiers { + + // Get the claim record for a user, airdrop pair + claimRecord, err := k.GetClaimRecord(ctx, addr, airdropId) + if err != nil { + return nil, err + } + if claimRecord.Address == "" { + // if there's no claim record, the user is not eligible + // for this airdrop, so skip it + continue + } + + // If all actions are completed, the user has claimed + claimed := AreAllTrue(claimRecord.ActionCompleted) + claimStatus := types.ClaimStatus{ + AirdropIdentifier: airdropId, + Claimed: claimed, + } + claimStatusList = append(claimStatusList, claimStatus) + } + + return claimStatusList, nil +} + +func CurrentAirdropRound(start time.Time) int { + // Define constants for 90 days and 30 days + const initialRoundDuration = 90 * 24 * time.Hour + const subsequentRoundDuration = 30 * 24 * time.Hour + + // Calculate the time passed since the start + timePassed := time.Since(start) + + // Check if the initial round is still ongoing + if timePassed < initialRoundDuration { + return 1 + } + + // Calculate the time passed after the initial round + timePassedAfterInitialRound := timePassed - initialRoundDuration + + // Calculate the number of subsequent rounds passed + subsequentRoundsPassed := timePassedAfterInitialRound / subsequentRoundDuration + + // Add 1 for the initial round and 1 for the current round + return 1 + 1 + int(subsequentRoundsPassed) +} + +// GetClaimMetadata returns all claim status associated with the user account +func (k Keeper) GetClaimMetadata(ctx sdk.Context) []types.ClaimMetadata { + var claimMetadataList []types.ClaimMetadata + + airdropIdentifiers := k.GetAirdropIds(ctx) + epochs := k.epochsKeeper.AllEpochInfos(ctx) + + for _, airdropId := range airdropIdentifiers { + // loop over epochs to match epochs to airdrop identifier + var currentRoundStart time.Time + var currentRoundEnd time.Time + var absoluteStartTime time.Time + var duration time.Duration + for _, epoch := range epochs { + epochIdentifier := strings.TrimPrefix(epoch.Identifier, "airdrop-") + if epochIdentifier == airdropId { + // found the epoch for this airdrop + currentRoundStart = epoch.CurrentEpochStartTime + absoluteStartTime = epoch.StartTime + duration = epoch.Duration + } + } + + currentRoundEnd = currentRoundStart.Add(duration) + currentRound := strconv.Itoa(CurrentAirdropRound(absoluteStartTime)) + + claimMetadata := types.ClaimMetadata{ + AirdropIdentifier: airdropId, + CurrentRound: currentRound, + CurrentRoundStart: currentRoundStart, + CurrentRoundEnd: currentRoundEnd, + } + + claimMetadataList = append(claimMetadataList, claimMetadata) + } + + return claimMetadataList +} + +// GetClaimable returns claimable amount for a specific action done by an address +func (k Keeper) GetUserTotalClaimable(ctx sdk.Context, addr sdk.AccAddress, airdropIdentifier string, includeClaimed bool) (sdk.Coins, error) { + claimRecord, err := k.GetClaimRecord(ctx, addr, airdropIdentifier) + if err != nil { + return sdk.Coins{}, err + } + if claimRecord.Address == "" { + return sdk.Coins{}, nil + } + + totalClaimable := sdk.Coins{} + + for _, action := range utils.Int32MapKeys(types.Action_name) { + claimableForAction, err := k.GetClaimableAmountForAction(ctx, addr, types.Action(action), airdropIdentifier, includeClaimed) + if err != nil { + return sdk.Coins{}, err + } + if !claimableForAction.Empty() { + totalClaimable = totalClaimable.Add(claimableForAction...) + } + } + return totalClaimable, nil +} + +// Get airdrop identifier corresponding to the user address +func (k Keeper) GetAirdropIdentifiersForUser(ctx sdk.Context, addr sdk.AccAddress) []string { + store := ctx.KVStore(k.storeKey) + params, err := k.GetParams(ctx) + identifiers := []string{} + if err != nil { + return identifiers + } + + for _, airdrop := range params.Airdrops { + prefixStore := prefix.NewStore(store, append([]byte(types.ClaimRecordsStorePrefix), []byte(airdrop.AirdropIdentifier)...)) + if prefixStore.Has(addr) { + identifiers = append(identifiers, airdrop.AirdropIdentifier) + } + } + return identifiers +} + +func (k Keeper) AfterClaim(ctx sdk.Context, airdropIdentifier string, claimAmount sdkmath.Int) error { + // Increment ClaimedSoFar on the airdrop record + // fetch the airdrop + airdrop := k.GetAirdropByIdentifier(ctx, airdropIdentifier) + if airdrop == nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "invalid airdrop identifier: AfterClaim") + } + // increment the claimed so far + err := k.IncrementClaimedSoFar(ctx, airdropIdentifier, claimAmount) + if err != nil { + return err + } + return nil +} + +func (k Keeper) ClaimAllCoinsForAction(ctx sdk.Context, addr sdk.AccAddress, action types.Action) (sdk.Coins, error) { + // get all airdrops for the user + airdropIdentifiers := k.GetAirdropIdentifiersForUser(ctx, addr) + // claim all coins for the action + totalClaimable := sdk.Coins{} + for _, airdropIdentifier := range airdropIdentifiers { + claimable, err := k.ClaimCoinsForAction(ctx, addr, action, airdropIdentifier) + if err != nil { + return sdk.Coins{}, err + } + totalClaimable = totalClaimable.Add(claimable...) + } + return totalClaimable, nil +} + +// ClaimCoins remove claimable amount entry and transfer it to user's account +func (k Keeper) ClaimCoinsForAction(ctx sdk.Context, addr sdk.AccAddress, action types.Action, airdropIdentifier string) (sdk.Coins, error) { + isPassed := k.IsInitialPeriodPassed(ctx, airdropIdentifier) + if airdropIdentifier == "" { + return nil, errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "invalid airdrop identifier: ClaimCoinsForAction") + } + + claimableAmount, err := k.GetClaimableAmountForAction(ctx, addr, action, airdropIdentifier, false) + if err != nil { + return claimableAmount, err + } + + if claimableAmount.Empty() { + return claimableAmount, nil + } + + claimRecord, err := k.GetClaimRecord(ctx, addr, airdropIdentifier) + if err != nil { + return nil, err + } + + // Only BaseAccounts and StridePeriodicVestingAccount can claim + acc := k.accountKeeper.GetAccount(ctx, addr) + _, isStrideVestingAccount := acc.(*vestingtypes.StridePeriodicVestingAccount) + _, isBaseAcc := acc.(*authtypes.BaseAccount) + canClaim := isStrideVestingAccount || isBaseAcc + if !canClaim { + return nil, errorsmod.Wrapf(types.ErrInvalidAccount, "Account: %v", acc) + } + + // Claims don't vest if action type is ActionFree or initial period of vesting is passed + if !isPassed { + acc = k.accountKeeper.GetAccount(ctx, addr) + strideVestingAcc, isStrideVestingAccount := acc.(*vestingtypes.StridePeriodicVestingAccount) + // Check if vesting tokens already exist for this account. + if !isStrideVestingAccount { + // Convert user account into stride veting account. + baseAccount := k.accountKeeper.NewAccountWithAddress(ctx, addr) + if _, ok := baseAccount.(*authtypes.BaseAccount); !ok { + return nil, errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "invalid account type; expected: BaseAccount, got: %T", baseAccount) + } + + periodLength := GetAirdropDurationForAction(action) + vestingAcc := vestingtypes.NewStridePeriodicVestingAccount(baseAccount.(*authtypes.BaseAccount), claimableAmount, []vestingtypes.Period{{ + StartTime: ctx.BlockTime().Unix(), + Length: periodLength, + Amount: claimableAmount, + ActionType: int32(action), + }}) + k.accountKeeper.SetAccount(ctx, vestingAcc) + } else { + // Grant a new vesting to the existing stride vesting account + periodLength := GetAirdropDurationForAction(action) + strideVestingAcc.AddNewGrant(vestingtypes.Period{ + StartTime: ctx.BlockTime().Unix(), + Length: periodLength, + Amount: claimableAmount, + ActionType: int32(action), + }) + k.accountKeeper.SetAccount(ctx, strideVestingAcc) + } + } + + distributor, err := k.GetAirdropDistributor(ctx, airdropIdentifier) + if err != nil { + return nil, err + } + + err = utils.SafeSendCoins(true, k.bankKeeper, ctx, distributor, addr, claimableAmount) + if err != nil { + return nil, err + } + + claimRecord.ActionCompleted[action] = true + + err = k.SetClaimRecord(ctx, claimRecord) + if err != nil { + return claimableAmount, err + } + + airdrop := k.GetAirdropByIdentifier(ctx, airdropIdentifier) + if airdrop == nil { + return nil, errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "invalid airdrop identifier: ClaimCoinsForAction") + } + err = k.AfterClaim(ctx, airdropIdentifier, claimableAmount.AmountOf(airdrop.ClaimDenom)) + if err != nil { + return nil, err + } + + ctx.EventManager().EmitEvents(sdk.Events{ + sdk.NewEvent( + types.EventTypeClaim, + sdk.NewAttribute(sdk.AttributeKeySender, addr.String()), + sdk.NewAttribute(sdk.AttributeKeyAmount, claimableAmount.String()), + ), + }) + + return claimableAmount, nil +} + +// CreateAirdropAndEpoch creates a new airdrop and epoch for that. +func (k Keeper) CreateAirdropAndEpoch(ctx sdk.Context, msg types.MsgCreateAirdrop) error { + params, err := k.GetParams(ctx) + if err != nil { + panic(err) + } + + // re-run validate basic in case this function is called directly from an upgrade handler + if err := msg.ValidateBasic(); err != nil { + return err + } + + for _, airdrop := range params.Airdrops { + if airdrop.AirdropIdentifier == msg.Identifier { + return types.ErrAirdropAlreadyExists + } + if airdrop.ChainId == msg.ChainId { + return types.ErrAirdropChainIdAlreadyExists + } + } + + airdrop := types.Airdrop{ + AirdropIdentifier: msg.Identifier, + ChainId: msg.ChainId, + AirdropDuration: time.Duration(utils.UintToInt(msg.Duration) * int64(time.Second)), + ClaimDenom: msg.Denom, + DistributorAddress: msg.Distributor, + AirdropStartTime: time.Unix(utils.UintToInt(msg.StartTime), 0), + AutopilotEnabled: msg.AutopilotEnabled, + } + + params.Airdrops = append(params.Airdrops, &airdrop) + k.epochsKeeper.SetEpochInfo(ctx, epochstypes.EpochInfo{ + Identifier: fmt.Sprintf("airdrop-%s", msg.Identifier), + StartTime: airdrop.AirdropStartTime.Add(time.Minute), + Duration: types.DefaultEpochDuration, + CurrentEpoch: 0, + CurrentEpochStartHeight: 0, + CurrentEpochStartTime: time.Time{}, + EpochCountingStarted: false, + }) + return k.SetParams(ctx, params) +} + +// IncrementClaimedSoFar increments ClaimedSoFar for a single airdrop +func (k Keeper) IncrementClaimedSoFar(ctx sdk.Context, identifier string, amount sdkmath.Int) error { + params, err := k.GetParams(ctx) + if err != nil { + panic(err) + } + + if amount.LT(sdkmath.ZeroInt()) { + return types.ErrInvalidAmount + } + + newAirdrops := []*types.Airdrop{} + for _, airdrop := range params.Airdrops { + if airdrop.AirdropIdentifier == identifier { + airdrop.ClaimedSoFar = airdrop.ClaimedSoFar.Add(amount) + } + newAirdrops = append(newAirdrops, airdrop) + } + params.Airdrops = newAirdrops + return k.SetParams(ctx, params) +} + +// ResetClaimedSoFar resets ClaimedSoFar for a all airdrops +func (k Keeper) ResetClaimedSoFar(ctx sdk.Context, airdropIdentifier string) error { + params, err := k.GetParams(ctx) + k.Logger(ctx).Info(fmt.Sprintf("[CLAIM] params.Airdrops %v", params.Airdrops)) + if err != nil { + panic(err) + } + + newAirdrops := []*types.Airdrop{} + for _, airdrop := range params.Airdrops { + if airdrop.AirdropIdentifier == airdropIdentifier { + airdrop.ClaimedSoFar = sdkmath.ZeroInt() + k.Logger(ctx).Info(fmt.Sprintf("[CLAIM] resetting claimSoFar for %s", airdropIdentifier)) + } + newAirdrops = append(newAirdrops, airdrop) + } + params.Airdrops = newAirdrops + k.Logger(ctx).Info(fmt.Sprintf("[CLAIM] params.Airdrops %v", params.Airdrops)) + return k.SetParams(ctx, params) +} + +// DeleteAirdropAndEpoch deletes existing airdrop and corresponding epoch. +func (k Keeper) DeleteAirdropAndEpoch(ctx sdk.Context, identifier string) error { + params, err := k.GetParams(ctx) + if err != nil { + panic(err) + } + + newAirdrops := []*types.Airdrop{} + for _, airdrop := range params.Airdrops { + if airdrop.AirdropIdentifier != identifier { + newAirdrops = append(newAirdrops, airdrop) + } + } + params.Airdrops = newAirdrops + k.epochsKeeper.DeleteEpochInfo(ctx, fmt.Sprintf("airdrop-%s", identifier)) + return k.SetParams(ctx, params) +} + +func (k Keeper) UpdateAirdropAddress(ctx sdk.Context, existingStrideAddress string, newStrideAddress string, airdropId string) error { + airdrop := k.GetAirdropByIdentifier(ctx, airdropId) + if airdrop == nil { + return errorsmod.Wrapf(types.ErrAirdropNotFound, "airdrop not found for identifier %s", airdropId) + } + + // verify that the strideAddress is valid + _, err := sdk.AccAddressFromBech32(newStrideAddress) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid stride address %s", newStrideAddress) + } + + // note: existingAccAddress will be a STRIDE address with the same coin type as existingAddress + // when new airdrops are ingested, we call utils.ConvertAddressToStrideAddress to convert + // the host zone (e.g. Evmos) address to a Stride address. The same conversion must be done + // if you're attempting to access a claim record for a non-Stride-address. + existingAccAddress, err := sdk.AccAddressFromBech32(existingStrideAddress) + if err != nil { + return errorsmod.Wrapf(types.ErrClaimNotFound, + "error getting claim record for address %s on airdrop %s", existingStrideAddress, airdropId) + } + claimRecord, err := k.GetClaimRecord(ctx, existingAccAddress, airdrop.AirdropIdentifier) + if (err != nil) || (claimRecord.Address == "") { + return errorsmod.Wrapf(types.ErrClaimNotFound, + "error getting claim record for address %s on airdrop %s", existingStrideAddress, airdropId) + } + + claimRecord.Address = newStrideAddress + err = k.SetClaimRecord(ctx, claimRecord) // this does NOT delete the old record, because claims are indexed by address + if err != nil { + return errorsmod.Wrapf(types.ErrModifyingClaimRecord, + "error setting claim record from address %s to address %s on airdrop %s", existingStrideAddress, newStrideAddress, airdropId) + } + + // this deletes the old record + err = k.DeleteClaimRecord(ctx, existingAccAddress, airdrop.AirdropIdentifier) + if err != nil { + return errorsmod.Wrapf(types.ErrModifyingClaimRecord, + "error deleting claim record for address %s on airdrop %s", existingStrideAddress, airdropId) + } + + return nil +} diff --git a/x/claim/keeper/claim_test.go b/x/claim/keeper/claim_test.go new file mode 100644 index 00000000000..0564225b7ed --- /dev/null +++ b/x/claim/keeper/claim_test.go @@ -0,0 +1,862 @@ +package keeper_test + +import ( + "fmt" + "strings" + "time" + + sdkmath "cosmossdk.io/math" + + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + + vestingtypes "github.com/cosmos/cosmos-sdk/x/auth/vesting/types" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/utils" + claimkeeper "github.com/osmosis-labs/osmosis/v27/x/claim/keeper" + + "github.com/osmosis-labs/osmosis/v27/x/claim/types" + stridevestingtypes "github.com/osmosis-labs/osmosis/v27/x/claim/vesting/types" +) + +// Test functionality for loading allocation data(csv) +func (s *KeeperTestSuite) TestLoadAllocationData() { + s.SetupTest() + allocations := `identifier,address,weight +osmosis,osmo1g7yxhuppp5x3yqkah5mw29eqq5s4sv2fp6e2eg,0.5 +osmosis,osmo1h4astdfzjhcwahtfrh24qtvndzzh49xvtm69fg,0.3 +stride,stride1av5lwh0msnafn04xkhdyk6mrykxthrawy7uf3d,0.7 +stride,stride1g7yxhuppp5x3yqkah5mw29eqq5s4sv2f222xmk,0.3 +stride,stride1g7yxhuppp5x3yqkah5mw29eqq5s4sv2f222xmk,0.5` + + ok := s.App.ClaimKeeper.LoadAllocationData(s.Ctx, allocations) + s.Require().True(ok) + + totalWeight, err := s.App.ClaimKeeper.GetTotalWeight(s.Ctx, "osmosis") + s.Require().NoError(err) + s.Require().True(totalWeight.Equal(sdkmath.LegacyMustNewDecFromStr("0.8"))) + + totalWeight, err = s.App.ClaimKeeper.GetTotalWeight(s.Ctx, "stride") + s.Require().NoError(err) + s.Require().True(totalWeight.Equal(sdkmath.LegacyMustNewDecFromStr("1"))) + + addr, _ := sdk.AccAddressFromBech32("stride1g7yxhuppp5x3yqkah5mw29eqq5s4sv2f222xmk") // hex(stride1g7yxhuppp5x3yqkah5mw29eqq5s4sv2f222xmk) = hex(osmo1g7yxhuppp5x3yqkah5mw29eqq5s4sv2fp6e2eg) + claimRecord, err := s.App.ClaimKeeper.GetClaimRecord(s.Ctx, addr, "osmosis") + s.Require().NoError(err) + s.Require().Equal(claimRecord.Address, "stride1g7yxhuppp5x3yqkah5mw29eqq5s4sv2f222xmk") + s.Require().True(claimRecord.Weight.Equal(sdkmath.LegacyMustNewDecFromStr("0.5"))) + s.Require().Equal(claimRecord.ActionCompleted, []bool{false, false, false}) + + claimRecord, err = s.App.ClaimKeeper.GetClaimRecord(s.Ctx, addr, "stride") + s.Require().NoError(err) + s.Require().True(claimRecord.Weight.Equal(sdkmath.LegacyMustNewDecFromStr("0.3"))) + s.Require().Equal(claimRecord.ActionCompleted, []bool{false, false, false}) +} + +// Check unclaimable account's balance after staking +func (s *KeeperTestSuite) TestHookOfUnclaimableAccount() { + s.SetupTest() + + // Set a normal user account + pub1 := secp256k1.GenPrivKey().PubKey() + addr1 := sdk.AccAddress(pub1.Address()) + s.SetNewAccount(addr1) + + claim, err := s.App.ClaimKeeper.GetClaimRecord(s.Ctx, addr1, "stride") + s.NoError(err) + s.Equal(types.ClaimRecord{}, claim) + + s.App.ClaimKeeper.AfterLiquidStake(s.Ctx, addr1) + + // Get balances for the account + balances := s.App.BankKeeper.GetAllBalances(s.Ctx, addr1) + s.Equal(sdk.Coins{}, balances) +} + +// Check balances before and after airdrop starts +func (s *KeeperTestSuite) TestHookBeforeAirdropStart() { + s.SetupTest() + + airdropStartTime := time.Now().Add(time.Hour) + + err := s.App.ClaimKeeper.SetParams(s.Ctx, types.Params{ + Airdrops: []*types.Airdrop{ + { + AirdropIdentifier: types.DefaultAirdropIdentifier, + AirdropStartTime: airdropStartTime, + AirdropDuration: types.DefaultAirdropDuration, + ClaimDenom: sdk.DefaultBondDenom, + DistributorAddress: distributors[types.DefaultAirdropIdentifier].String(), + }, + }, + }) + s.Require().NoError(err) + + pub1 := secp256k1.GenPrivKey().PubKey() + addr1 := sdk.AccAddress(pub1.Address()) + val1 := sdk.ValAddress(addr1) + + claimRecords := []types.ClaimRecord{ + { + Address: addr1.String(), + Weight: sdkmath.LegacyNewDecWithPrec(50, 2), // 50% + ActionCompleted: []bool{false, false, false}, + AirdropIdentifier: types.DefaultAirdropIdentifier, + }, + } + s.SetNewAccount(addr1) + err = s.App.ClaimKeeper.SetClaimRecordsWithWeights(s.Ctx, claimRecords) + s.Require().NoError(err) + + coins, err := s.App.ClaimKeeper.GetUserTotalClaimable(s.Ctx, addr1, "stride", false) + s.NoError(err) + // Now, it is before starting air drop, so this value should return the empty coins + s.True(coins.Empty()) + + coins, err = s.App.ClaimKeeper.GetClaimableAmountForAction(s.Ctx, addr1, types.ACTION_FREE, "stride", false) + s.NoError(err) + // Now, it is before starting air drop, so this value should return the empty coins + s.True(coins.Empty()) + + err = s.App.ClaimKeeper.AfterDelegationModified(s.Ctx, addr1, val1) + s.NoError(err) + balances := s.App.BankKeeper.GetAllBalances(s.Ctx, addr1) + // Now, it is before starting air drop, so claim module should not send the balances to the user after swap. + s.True(balances.Empty()) + + s.App.ClaimKeeper.AfterLiquidStake(s.Ctx.WithBlockTime(airdropStartTime), addr1) + balances = s.App.BankKeeper.GetAllBalances(s.Ctx, addr1) + // Now, it is the time for air drop, so claim module should send the balances to the user after liquid stake. + claimableAmountForLiquidStake := sdkmath.LegacyNewDecWithPrec(60, 2). + Mul(sdkmath.LegacyNewDec(100_000_000)). + RoundInt64() // 60% for liquid stake + s.Require().Equal(balances.String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, claimableAmountForLiquidStake)).String()) +} + +// Check original user balances after being converted into stride vesting account +func (s *KeeperTestSuite) TestBalancesAfterAccountConversion() { + s.SetupTest() + + // set a normal account + addr := sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()) + s.SetNewAccount(addr) + + initialBal := int64(1000) + err := s.App.BankKeeper.SendCoins(s.Ctx, distributors["stride"], addr, sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, initialBal))) + s.Require().NoError(err) + + claimRecords := []types.ClaimRecord{ + { + Address: addr.String(), + Weight: sdkmath.LegacyNewDecWithPrec(50, 2), // 50% + ActionCompleted: []bool{false, false, false}, + AirdropIdentifier: types.DefaultAirdropIdentifier, + }, + } + + err = s.App.ClaimKeeper.SetClaimRecordsWithWeights(s.Ctx, claimRecords) + s.Require().NoError(err) + + // check if original account tokens are not affected after stride vesting + _, err = s.App.ClaimKeeper.ClaimCoinsForAction(s.Ctx, addr, types.ACTION_DELEGATE_STAKE, "stride") + s.Require().NoError(err) + claimableAmountForStake := sdkmath.LegacyNewDecWithPrec(20, 2). + Mul(sdkmath.LegacyNewDec(100_000_000 - initialBal)). + RoundInt64() // remaining balance is 100000000*(80/100), claim 20% for stake + + coinsBal := s.App.BankKeeper.GetAllBalances(s.Ctx, addr) + s.Require().Equal(coinsBal.String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, initialBal+claimableAmountForStake)).String()) + + spendableCoinsBal := s.App.BankKeeper.SpendableCoins(s.Ctx, addr) + s.Require().Equal(spendableCoinsBal.String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, initialBal)).String()) +} + +// Check original user balances after being converted into stride vesting account +func (s *KeeperTestSuite) TestClaimAccountTypes() { + s.SetupTest() + + // set a normal account + addr := sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()) + // Base Account can claim + s.SetNewAccount(addr) + + initialBal := int64(1000) + initialCoins := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, initialBal)) + err := s.App.BankKeeper.SendCoins(s.Ctx, distributors["stride"], addr, initialCoins) + s.Require().NoError(err) + + claimRecords := []types.ClaimRecord{ + { + Address: addr.String(), + Weight: sdkmath.LegacyNewDecWithPrec(50, 2), // 50% + ActionCompleted: []bool{false, false, false}, + AirdropIdentifier: types.DefaultAirdropIdentifier, + }, + } + + err = s.App.ClaimKeeper.SetClaimRecordsWithWeights(s.Ctx, claimRecords) + s.Require().NoError(err) + + // check if original account tokens are not affected after stride vesting + _, err = s.App.ClaimKeeper.ClaimCoinsForAction(s.Ctx, addr, types.ACTION_DELEGATE_STAKE, "stride") + s.Require().NoError(err) + claimableAmountForStake := sdkmath.LegacyNewDecWithPrec(20, 2). + Mul(sdkmath.LegacyNewDec(100_000_000 - initialBal)). + RoundInt64() // remaining balance is 100000000*(80/100), claim 20% for stake + + coinsBal := s.App.BankKeeper.GetAllBalances(s.Ctx, addr) + s.Require().Equal(coinsBal.String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, initialBal+claimableAmountForStake)).String()) + + spendableCoinsBal := s.App.BankKeeper.SpendableCoins(s.Ctx, addr) + s.Require().Equal(spendableCoinsBal.String(), initialCoins.String()) + + // Verify the account type has changed to stride vesting account + acc := s.App.AccountKeeper.GetAccount(s.Ctx, addr) + _, isVestingAcc := acc.(*stridevestingtypes.StridePeriodicVestingAccount) + s.Require().True(isVestingAcc) + + // Initialize vesting accounts + addr2 := sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()) + account := s.App.AccountKeeper.NewAccountWithAddress(s.Ctx, addr2) + err = s.App.BankKeeper.SendCoins(s.Ctx, distributors["stride"], addr2, initialCoins) + s.Require().NoError(err) + baseVestingAccount, err := vestingtypes.NewBaseVestingAccount(account.(*authtypes.BaseAccount), initialCoins, 0) + s.Require().NoError(err) + s.App.AccountKeeper.SetAccount(s.Ctx, baseVestingAccount) + + addr3 := sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()) + account = s.App.AccountKeeper.NewAccountWithAddress(s.Ctx, addr3) + err = s.App.BankKeeper.SendCoins(s.Ctx, distributors["stride"], addr3, initialCoins) + s.Require().NoError(err) + continuousVestingAccount, err := vestingtypes.NewContinuousVestingAccount(account.(*authtypes.BaseAccount), initialCoins, 0, 1) + s.Require().NoError(err) + s.App.AccountKeeper.SetAccount(s.Ctx, continuousVestingAccount) + + addr4 := sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()) + account = s.App.AccountKeeper.NewAccountWithAddress(s.Ctx, addr4) + err = s.App.BankKeeper.SendCoins(s.Ctx, distributors["stride"], addr4, initialCoins) + s.Require().NoError(err) + periodicVestingAccount, err := vestingtypes.NewPeriodicVestingAccount(account.(*authtypes.BaseAccount), initialCoins, 1, []vestingtypes.Period{{ + Length: 1, + Amount: initialCoins, + }}) + s.Require().NoError(err) + s.App.AccountKeeper.SetAccount(s.Ctx, periodicVestingAccount) + + // Init claim records + for _, addr := range []sdk.AccAddress{addr2, addr3, addr4} { + claimRecords := []types.ClaimRecord{ + { + Address: addr.String(), + Weight: sdkmath.LegacyNewDecWithPrec(50, 2), + ActionCompleted: []bool{false, false, false}, + AirdropIdentifier: types.DefaultAirdropIdentifier, + }, + } + err = s.App.ClaimKeeper.SetClaimRecordsWithWeights(s.Ctx, claimRecords) + s.Require().NoError(err) + } + + // Try to claim tokens with each account type + for _, addr := range []sdk.AccAddress{addr2, addr3, addr4} { + _, err = s.App.ClaimKeeper.ClaimCoinsForAction(s.Ctx, addr, types.ACTION_DELEGATE_STAKE, "stride") + s.Require().ErrorContains(err, "only BaseAccount and StridePeriodicVestingAccount can claim") + } +} + +// Run all airdrop flow +func (s *KeeperTestSuite) TestAirdropFlow() { + s.SetupTest() + + addr1 := sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()) + addr2 := sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()) + addr3 := sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()) + weight := sdkmath.LegacyNewDecWithPrec(50, 2) + + for _, addr := range []sdk.AccAddress{addr1, addr2, addr3} { + initialBal := int64(1000) + err := s.App.BankKeeper.SendCoins(s.Ctx, distributors["stride"], addr, sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, initialBal))) + s.Require().NoError(err) + err = s.App.BankKeeper.SendCoins(s.Ctx, addr, distributors["stride"], sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, initialBal))) + s.Require().NoError(err) + } + + claimRecords := []types.ClaimRecord{ + { + Address: addr1.String(), + Weight: weight, // 50% + ActionCompleted: []bool{false, false, false}, + AirdropIdentifier: types.DefaultAirdropIdentifier, + }, + { + Address: addr2.String(), + Weight: weight, // 50% + ActionCompleted: []bool{false, false, false}, + AirdropIdentifier: types.DefaultAirdropIdentifier, + }, + } + + err := s.App.ClaimKeeper.SetClaimRecordsWithWeights(s.Ctx, claimRecords) + s.Require().NoError(err) + + coins, err := s.App.ClaimKeeper.GetUserTotalClaimable(s.Ctx, addr1, "stride", false) + s.Require().NoError(err) + s.Require().Equal(coins.String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 50_000_000)).String()) + + coins, err = s.App.ClaimKeeper.GetUserTotalClaimable(s.Ctx, addr2, "stride", false) + s.Require().NoError(err) + s.Require().Equal(coins.String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 50_000_000)).String()) + + coins, err = s.App.ClaimKeeper.GetUserTotalClaimable(s.Ctx, addr3, "stride", false) + s.Require().NoError(err) + s.Require().Equal(coins, sdk.Coins{}) + + // get rewards amount for free + coins, err = s.App.ClaimKeeper.ClaimCoinsForAction(s.Ctx, addr1, types.ACTION_FREE, "stride") + s.Require().NoError(err) + claimableAmountForFree := sdkmath.LegacyNewDecWithPrec(20, 2). + Mul(sdkmath.LegacyNewDec(100_000_000)). + Mul(weight). + RoundInt64() // remaining balance is 100000000, claim 20% for free + s.Require().Equal(coins.String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, claimableAmountForFree)).String()) + + // get rewards amount for stake + coins, err = s.App.ClaimKeeper.ClaimCoinsForAction(s.Ctx, addr1, types.ACTION_DELEGATE_STAKE, "stride") + s.Require().NoError(err) + claimableAmountForStake := sdkmath.LegacyNewDecWithPrec(20, 2). + Mul(sdkmath.LegacyNewDec(100_000_000)). + Mul(weight). + RoundInt64() // remaining balance is 90000000, claim 20% for stake + s.Require().Equal(coins.String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, claimableAmountForStake)).String()) + + // get rewards amount for liquid stake + coins, err = s.App.ClaimKeeper.ClaimCoinsForAction(s.Ctx, addr1, types.ACTION_LIQUID_STAKE, "stride") + s.Require().NoError(err) + claimableAmountForLiquidStake := sdkmath.LegacyNewDecWithPrec(60, 2). + Mul(sdkmath.LegacyNewDec(100_000_000)). + Mul(weight). + RoundInt64() // remaining balance = 80000000, claim 60% for liquid stake + s.Require().Equal(coins.String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, claimableAmountForLiquidStake)).String()) + + // get balance after all claim + coins = s.App.BankKeeper.GetAllBalances(s.Ctx, addr1) + s.Require().Equal(coins.String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, claimableAmountForFree+claimableAmountForStake+claimableAmountForLiquidStake)).String()) + + // get spendable balances 3 months later + ctx := s.Ctx.WithBlockTime(time.Now().Add(types.DefaultVestingDurationForDelegateStake)) + coinsSpendable := s.App.BankKeeper.SpendableCoins(ctx, addr1) + s.Require().Equal(coins.String(), coinsSpendable.String()) + + // check if claims don't vest after initial period of 3 months + s.Ctx = s.Ctx.WithBlockTime(time.Now().Add(types.DefaultVestingInitialPeriod)) + err = s.App.ClaimKeeper.ResetClaimStatus(s.Ctx, "stride") + s.Require().NoError(err) + _, err = s.App.ClaimKeeper.ClaimCoinsForAction(s.Ctx, addr1, types.ACTION_LIQUID_STAKE, "stride") + s.Require().NoError(err) + claimableAmountForLiquidStake2 := sdkmath.LegacyNewDecWithPrec(60, 2). + Mul(sdkmath.LegacyNewDec(50_000_000)). + Mul(weight). + RoundInt64() // remaining balance = 50000000*(60/100), claim 60% for liquid stake + + coins = s.App.BankKeeper.GetAllBalances(s.Ctx, addr1) + s.Require().Equal(coins.String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, claimableAmountForFree+claimableAmountForStake+claimableAmountForLiquidStake+claimableAmountForLiquidStake2)).String()) + coinsSpendable = s.App.BankKeeper.SpendableCoins(ctx, addr1) + s.Require().Equal(coins.String(), coinsSpendable.String()) + + // end airdrop + err = s.App.ClaimKeeper.EndAirdrop(s.Ctx, "stride") + s.Require().NoError(err) +} + +// Run multi chain airdrop flow +func (s *KeeperTestSuite) TestMultiChainAirdropFlow() { + s.SetupTest() + + addr1 := sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()) + addr2 := sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()) + + for _, addr := range []sdk.AccAddress{addr1, addr2} { + initialBal := int64(1000) + err := s.App.BankKeeper.SendCoins(s.Ctx, distributors["stride"], addr, sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, initialBal))) + s.Require().NoError(err) + err = s.App.BankKeeper.SendCoins(s.Ctx, addr, distributors["stride"], sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, initialBal))) + s.Require().NoError(err) + } + + claimRecords := []types.ClaimRecord{ + { + Address: addr1.String(), + Weight: sdkmath.LegacyNewDecWithPrec(50, 2), // 50% + ActionCompleted: []bool{false, false, false}, + AirdropIdentifier: types.DefaultAirdropIdentifier, + }, + { + Address: addr2.String(), + Weight: sdkmath.LegacyNewDecWithPrec(50, 2), // 50% + ActionCompleted: []bool{false, false, false}, + AirdropIdentifier: "juno", + }, + { + Address: addr1.String(), + Weight: sdkmath.LegacyNewDecWithPrec(30, 2), // 30% + ActionCompleted: []bool{false, false, false}, + AirdropIdentifier: "osmosis", + }, + } + + err := s.App.ClaimKeeper.SetClaimRecordsWithWeights(s.Ctx, claimRecords) + s.Require().NoError(err) + + coins, err := s.App.ClaimKeeper.GetUserTotalClaimable(s.Ctx, addr1, "stride", false) + s.Require().NoError(err) + s.Require().Equal(coins.String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 100_000_000)).String()) + + coins, err = s.App.ClaimKeeper.GetUserTotalClaimable(s.Ctx, addr2, "juno", false) + s.Require().NoError(err) + s.Require().Equal(coins.String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 0)).String()) + + identifiers := s.App.ClaimKeeper.GetAirdropIdentifiersForUser(s.Ctx, addr1) + s.Require().Equal(identifiers[0], types.DefaultAirdropIdentifier) + s.Require().Equal(identifiers[1], "osmosis") + + // get rewards amount for free (stride, osmosis addresses) + coins, err = s.App.ClaimKeeper.ClaimCoinsForAction(s.Ctx, addr1, types.ACTION_FREE, "stride") + s.Require().NoError(err) + + coins1, err := s.App.ClaimKeeper.ClaimCoinsForAction(s.Ctx, addr1, types.ACTION_FREE, "osmosis") + s.Require().NoError(err) + + claimableAmountForFree := sdkmath.LegacyNewDecWithPrec(20, 2). + Mul(sdkmath.LegacyNewDec(100_000_000)). + RoundInt64() // remaining balance is 100000000, claim 20% for free + s.Require().Equal(coins.String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, claimableAmountForFree)).String()) + s.Require().Equal(coins1.String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, claimableAmountForFree)).String()) + + // get rewards amount for stake (stride, osmosis addresses) + coins, err = s.App.ClaimKeeper.ClaimCoinsForAction(s.Ctx, addr1, types.ACTION_DELEGATE_STAKE, "stride") + s.Require().NoError(err) + + coins1, err = s.App.ClaimKeeper.ClaimCoinsForAction(s.Ctx, addr1, types.ACTION_DELEGATE_STAKE, "osmosis") + s.Require().NoError(err) + + claimableAmountForStake := sdkmath.LegacyNewDecWithPrec(20, 2). + Mul(sdkmath.LegacyNewDec(100_000_000)). + RoundInt64() // remaining balance is 100000000*(80/100), claim 20% for stake + s.Require().Equal(coins.String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, claimableAmountForStake)).String()) + s.Require().Equal(coins1.String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, claimableAmountForStake)).String()) + + // get rewards amount for liquid stake (stride, osmosis addresses) + coins, err = s.App.ClaimKeeper.ClaimCoinsForAction(s.Ctx, addr1, types.ACTION_LIQUID_STAKE, "stride") + s.Require().NoError(err) + + coins1, err = s.App.ClaimKeeper.ClaimCoinsForAction(s.Ctx, addr1, types.ACTION_LIQUID_STAKE, "osmosis") + s.Require().NoError(err) + + claimableAmountForLiquidStake := sdkmath.LegacyNewDecWithPrec(60, 2). + Mul(sdkmath.LegacyNewDec(100_000_000)). + RoundInt64() // remaining balance = 100000000*(80/100)*(80/100), claim 60% for liquid stake + s.Require().Equal(coins.String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, claimableAmountForLiquidStake)).String()) + s.Require().Equal(coins1.String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, claimableAmountForLiquidStake)).String()) + + // get balance after all claim + coins = s.App.BankKeeper.GetAllBalances(s.Ctx, addr1) + s.Require().Equal(coins.String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, (claimableAmountForFree+claimableAmountForStake+claimableAmountForLiquidStake)*2)).String()) + + // Verify that the max claimable amount is unchanged, even after claims + maxCoins, err := s.App.ClaimKeeper.GetUserTotalClaimable(s.Ctx, addr1, "stride", true) + s.Require().NoError(err) + s.Require().Equal(maxCoins.String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 100_000_000)).String()) + claimableCoins, err := s.App.ClaimKeeper.GetUserTotalClaimable(s.Ctx, addr1, "stride", false) + s.Require().NoError(err) + s.Require().Equal(claimableCoins.String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 0)).String()) + + // check if stride and osmosis airdrops ended properly + s.Ctx = s.Ctx.WithBlockHeight(1000) + s.App.ClaimKeeper.EndBlocker(s.Ctx.WithBlockTime(time.Now().Add(types.DefaultAirdropDuration))) + // for stride + weight, err := s.App.ClaimKeeper.GetTotalWeight(s.Ctx, types.DefaultAirdropIdentifier) + s.Require().NoError(err) + s.Require().Equal(weight, sdkmath.LegacyZeroDec()) + + records := s.App.ClaimKeeper.GetClaimRecords(s.Ctx, types.DefaultAirdropIdentifier) + s.Require().Equal(0, len(records)) + + // for osmosis + weight, err = s.App.ClaimKeeper.GetTotalWeight(s.Ctx, "osmosis") + s.Require().NoError(err) + s.Require().Equal(weight, sdkmath.LegacyZeroDec()) + + records = s.App.ClaimKeeper.GetClaimRecords(s.Ctx, "osmosis") + s.Require().Equal(0, len(records)) + + //*********************** End of Stride, Osmosis airdrop ************************* + + // claim airdrops for juno users after ending stride airdrop + // get rewards amount for stake (juno user) + coins, err = s.App.ClaimKeeper.ClaimCoinsForAction(s.Ctx.WithBlockTime(time.Now().Add(time.Hour)), addr2, types.ACTION_DELEGATE_STAKE, "juno") + s.Require().NoError(err) + claimableAmountForStake = sdkmath.LegacyNewDecWithPrec(20, 2). + Mul(sdkmath.LegacyNewDec(100_000_000)). + RoundInt64() // remaining balance is 100000000*(80/100), claim 20% for stake + s.Require().Equal(coins.String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, claimableAmountForStake)).String()) + + // get rewards amount for liquid stake (juno user) + coins, err = s.App.ClaimKeeper.ClaimCoinsForAction(s.Ctx.WithBlockTime(time.Now().Add(time.Hour)), addr2, types.ACTION_LIQUID_STAKE, "juno") + s.Require().NoError(err) + claimableAmountForLiquidStake = sdkmath.LegacyNewDecWithPrec(60, 2). + Mul(sdkmath.LegacyNewDec(100_000_000)). + RoundInt64() // remaining balance = 100000000*(80/100)*(80/100), claim 60% for liquid stake + s.Require().Equal(coins.String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, claimableAmountForLiquidStake)).String()) + + // get balance after all claim + coins = s.App.BankKeeper.GetAllBalances(s.Ctx, addr2) + s.Require().Equal(coins.String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, claimableAmountForStake+claimableAmountForLiquidStake)).String()) + + // after 3 years, juno users should be still able to claim + s.Ctx = s.Ctx.WithBlockTime(time.Now().Add(types.DefaultAirdropDuration)) + err = s.App.ClaimKeeper.ResetClaimStatus(s.Ctx, "juno") + s.Require().NoError(err) + coins, err = s.App.ClaimKeeper.ClaimCoinsForAction(s.Ctx, addr2, types.ACTION_FREE, "juno") + s.Require().NoError(err) + + claimableAmountForFree = sdkmath.LegacyNewDecWithPrec(20, 2). + Mul(sdkmath.LegacyNewDec(20_000_000)). + RoundInt64() // remaining balance = 20000000*(20/100), claim 20% for free + s.Require().Equal(coins.String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, claimableAmountForFree)).String()) + + // after 3 years + 1 hour, juno users shouldn't be able to claim anymore + s.Ctx = s.Ctx.WithBlockTime(time.Now().Add(time.Hour).Add(types.DefaultAirdropDuration)) + s.App.ClaimKeeper.EndBlocker(s.Ctx) + err = s.App.ClaimKeeper.ResetClaimStatus(s.Ctx, "juno") + s.Require().NoError(err) + coins, err = s.App.ClaimKeeper.ClaimCoinsForAction(s.Ctx.WithBlockTime(time.Now().Add(time.Hour).Add(types.DefaultAirdropDuration)), addr2, types.ACTION_FREE, "juno") + s.Require().NoError(err) + s.Require().Equal(coins.String(), sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 0)).String()) + + weight, err = s.App.ClaimKeeper.GetTotalWeight(s.Ctx, types.DefaultAirdropIdentifier) + s.Require().NoError(err) + s.Require().Equal(weight, sdkmath.LegacyZeroDec()) + + records = s.App.ClaimKeeper.GetClaimRecords(s.Ctx, types.DefaultAirdropIdentifier) + s.Require().Equal(0, len(records)) + //*********************** End of Juno airdrop ************************* +} + +func (s *KeeperTestSuite) TestAreAllTrue() { + s.Require().True(claimkeeper.AreAllTrue([]bool{true, true, true})) + s.Require().False(claimkeeper.AreAllTrue([]bool{true, false, true})) + s.Require().False(claimkeeper.AreAllTrue([]bool{false, false, false})) +} + +func (s *KeeperTestSuite) TestCurrentAirdropRound() { + startTime := time.Now().Add(-50 * 24 * time.Hour) // 50 days ago + round := claimkeeper.CurrentAirdropRound(startTime) + s.Require().Equal(1, round) + + startTime = time.Now().Add(-100 * 24 * time.Hour) // 100 days ago + round = claimkeeper.CurrentAirdropRound(startTime) + s.Require().Equal(2, round) + + startTime = time.Now().Add(-130 * 24 * time.Hour) // 130 days ago + round = claimkeeper.CurrentAirdropRound(startTime) + s.Require().Equal(3, round) +} + +func (s *KeeperTestSuite) TestGetClaimStatus() { + addresses := apptesting.CreateRandomAccounts(2) + address := addresses[0].String() + otherAddress := addresses[1].String() + + // Add 5 airdrops + airdrops := types.Params{ + Airdrops: []*types.Airdrop{ + {AirdropIdentifier: types.DefaultAirdropIdentifier}, + {AirdropIdentifier: "juno"}, + {AirdropIdentifier: "osmosis"}, + {AirdropIdentifier: "terra"}, + {AirdropIdentifier: "stargaze"}, + }, + } + err := s.App.ClaimKeeper.SetParams(s.Ctx, airdrops) + s.Require().NoError(err) + + // For the given user, add 4 claim records + // Stride and Juno are incomplete + // Osmosis and terra are complete + // User is not eligible for stargaze + claimRecords := []types.ClaimRecord{ + { + Address: address, + ActionCompleted: []bool{false, false, false}, + AirdropIdentifier: types.DefaultAirdropIdentifier, + }, + { + Address: address, + ActionCompleted: []bool{false, true, false}, + AirdropIdentifier: "juno", + }, + { + Address: address, + ActionCompleted: []bool{true, true, true}, + AirdropIdentifier: "osmosis", + }, + { + Address: otherAddress, // different address + ActionCompleted: []bool{true, true, true}, + AirdropIdentifier: "terra", + }, + } + for _, claimRecord := range claimRecords { + err := s.App.ClaimKeeper.SetClaimRecord(s.Ctx, claimRecord) + s.Require().NoError(err) + } + + expectedClaimStatus := []types.ClaimStatus{ + {AirdropIdentifier: types.DefaultAirdropIdentifier, Claimed: false}, + {AirdropIdentifier: "juno", Claimed: false}, + {AirdropIdentifier: "osmosis", Claimed: true}, + } + + // Confirm status lines up with expectations + status, err := s.App.ClaimKeeper.GetClaimStatus(s.Ctx, sdk.MustAccAddressFromBech32(address)) + s.Require().NoError(err, "no error expected when getting claim status") + + s.Require().Equal(len(expectedClaimStatus), len(status), "number of airdrops") + for i := 0; i < len(expectedClaimStatus); i++ { + s.Require().Equal(expectedClaimStatus[i].AirdropIdentifier, status[i].AirdropIdentifier, "airdrop ID for %d", i) + s.Require().Equal(expectedClaimStatus[i].AirdropIdentifier, status[i].AirdropIdentifier, "airdrop claimed for %i", i) + } +} + +func (s *KeeperTestSuite) TestGetClaimMetadata() { + // Update airdrop epochs timing + now := time.Now().UTC() + epochs := s.App.EpochsKeeper.AllEpochInfos(s.Ctx) + for _, epoch := range epochs { + // Each airdrop's round will end 10 days from now + // Round 1 epoch started 80 days ago + // Round 2 and 3 epochs have their current epoch started 20 days ago + // but had their genesis 110 and 140 days ago respectively + epoch.CurrentEpochStartTime = now.Add(-20 * 24 * time.Hour) // 20 day ago + + switch epoch.Identifier { + case "airdrop-" + types.DefaultAirdropIdentifier: + epoch.Duration = time.Hour * 24 * 90 // 90 days + epoch.StartTime = now.Add(-80 * 24 * time.Hour) // 80 days ago - round 1 + epoch.CurrentEpochStartTime = now.Add(-80 * 24 * time.Hour) // 80 days ago + case "airdrop-juno": + epoch.Duration = time.Hour * 24 * 30 // 30 days + epoch.StartTime = now.Add(-110 * 24 * time.Hour) // 110 days ago - round 2 + epoch.CurrentEpochStartTime = now.Add(-20 * 24 * time.Hour) // 20 days ago + case "airdrop-osmosis": + epoch.Duration = time.Hour * 24 * 30 // 30 days + epoch.StartTime = now.Add(-140 * 24 * time.Hour) // 140 days ago - round 3 + epoch.CurrentEpochStartTime = now.Add(-20 * 24 * time.Hour) // 20 days ago + } + s.App.EpochsKeeper.SetEpochInfo(s.Ctx, epoch) + } + + // Get claim metadata + claimMetadataList := s.App.ClaimKeeper.GetClaimMetadata(s.Ctx) + s.Require().NotNil(claimMetadataList) + s.Require().Len(claimMetadataList, 3) + + // Check the contents of the metadata + for _, metadata := range claimMetadataList { + s.Require().Contains([]string{types.DefaultAirdropIdentifier, "juno", "osmosis"}, metadata.AirdropIdentifier, "airdrop ID") + s.Require().Equal(now.Add(10*24*time.Hour), metadata.CurrentRoundEnd, "%s round end time", metadata.AirdropIdentifier) // 10 days from now + + switch metadata.AirdropIdentifier { + case types.DefaultAirdropIdentifier: + s.Require().Equal("1", metadata.CurrentRound, "stride current round") + s.Require().Equal(now.Add(-80*24*time.Hour), metadata.CurrentRoundStart, "stride round start time") // 80 days ago + case "juno": + s.Require().Equal("2", metadata.CurrentRound, "juno current round") + s.Require().Equal(now.Add(-20*24*time.Hour), metadata.CurrentRoundStart, "juno round start time") // 20 days ago + case "osmosis": + s.Require().Equal("3", metadata.CurrentRound, "osmo current round") + s.Require().Equal(now.Add(-20*24*time.Hour), metadata.CurrentRoundStart, "osmo round start time") // 20 days ago + } + } +} + +type UpdateAirdropTestCase struct { + airdropId string + evmosAddress string + strideAddress string + recordKey sdk.AccAddress +} + +func (s *KeeperTestSuite) SetupUpdateAirdropAddressChangeTests() UpdateAirdropTestCase { + s.SetupTest() + + airdropId := "osmosis" + + evmosAddress := "evmos1wg6vh689gw93umxqquhe3yaqf0h9wt9d4q7550" + strideAddress := "stride1svy5pga6g2er2wjrcujcrg0efce4pref8dksr9" + + recordKeyString := utils.ConvertAddressToStrideAddress(evmosAddress) + recordKey := sdk.MustAccAddressFromBech32(recordKeyString) + + claimRecord := types.ClaimRecord{ + Address: recordKeyString, + Weight: sdkmath.LegacyNewDecWithPrec(50, 2), // 50% + ActionCompleted: []bool{false, false, false}, + AirdropIdentifier: airdropId, + } + + err := s.App.ClaimKeeper.SetClaimRecordsWithWeights(s.Ctx, []types.ClaimRecord{claimRecord}) + s.Require().NoError(err) + + // Create stride account so that it can claim + s.SetNewAccount(sdk.MustAccAddressFromBech32(strideAddress)) + + return UpdateAirdropTestCase{ + airdropId: airdropId, + evmosAddress: evmosAddress, + recordKey: recordKey, + strideAddress: strideAddress, + } +} + +func (s *KeeperTestSuite) TestUpdateAirdropAddress() { + tc := s.SetupUpdateAirdropAddressChangeTests() + + strideAccAddress := sdk.MustAccAddressFromBech32(tc.strideAddress) + airdropClaimCoins := sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 100_000_000)) + + // verify that the Evmos address is different from the address in the key used to store the claim + s.Require().NotEqual(tc.evmosAddress, tc.recordKey.String(), "evmos address should not equal the address key") + // verify new Evmos address starts with "stride" + s.Require().True(strings.HasPrefix(tc.recordKey.String(), "stride"), "evmos address should start with stride") + + // Confirm that the user (using the old key'd address) has claimable tokens + coins, err := s.App.ClaimKeeper.GetUserTotalClaimable(s.Ctx, tc.recordKey, tc.airdropId, false) + s.Require().NoError(err) + s.Require().Equal(coins.String(), airdropClaimCoins.String()) + + // verify that we can't yet claim with the stride address (because it hasn't been remapped yet) + coins, err = s.App.ClaimKeeper.GetUserTotalClaimable(s.Ctx, strideAccAddress, tc.airdropId, false) + s.Require().NoError(err) + s.Require().Equal(coins, sdk.NewCoins(), "stride address should claim 0 coins before update", strideAccAddress) + + claims, err := s.App.ClaimKeeper.GetClaimStatus(s.Ctx, strideAccAddress) + s.Require().NoError(err) + s.Require().Empty(claims, "stride address should have 0 claim records before update") + + // verify that we can claim the airdrop with the current airdrop key (which represents the incorrect stride address) + coins, err = s.App.ClaimKeeper.GetUserTotalClaimable(s.Ctx, tc.recordKey, tc.airdropId, false) + s.Require().NoError(err) + s.Require().Equal(coins, sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewIntFromUint64(100_000_000))), "parsed evmos address should be allowed to claim") + + claims, err = s.App.ClaimKeeper.GetClaimStatus(s.Ctx, tc.recordKey) + s.Require().NoError(err) + + properClaims := []types.ClaimStatus{{AirdropIdentifier: tc.airdropId, Claimed: false}} + s.Require().Equal(claims, properClaims, "evmos address should have 1 claim record before update") + + // update the stride address so that there's now a correct mapping from evmos -> stride address + err = s.App.ClaimKeeper.UpdateAirdropAddress(s.Ctx, tc.recordKey.String(), tc.strideAddress, tc.airdropId) + s.Require().NoError(err, "airdrop update address should succeed") + + // verify that the old key CAN NOT claim after the update + coins, err = s.App.ClaimKeeper.GetUserTotalClaimable(s.Ctx, tc.recordKey, tc.airdropId, false) + s.Require().NoError(err) + s.Require().Equal(coins, sdk.NewCoins(), "evmos address should claim 0 coins after update", tc.recordKey) + + claims, err = s.App.ClaimKeeper.GetClaimStatus(s.Ctx, tc.recordKey) + s.Require().NoError(err) + s.Require().Empty(claims, "evmos address should have 0 claim records after update") + + // verify that the stride address CAN claim after the update + coins, err = s.App.ClaimKeeper.GetUserTotalClaimable(s.Ctx, strideAccAddress, tc.airdropId, false) + s.Require().NoError(err) + s.Require().Equal(coins, sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewIntFromUint64(100_000_000))), "stride address should be allowed to claim after update") + + claims, err = s.App.ClaimKeeper.GetClaimStatus(s.Ctx, strideAccAddress) + s.Require().NoError(err) + s.Require().Equal(claims, properClaims, "stride address should have 1 claim record after update") + + // claim with the Stride address + coins, err = s.App.ClaimKeeper.ClaimCoinsForAction(s.Ctx, strideAccAddress, types.ACTION_FREE, tc.airdropId) + s.Require().NoError(err) + s.Require().Equal(coins, sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewIntFromUint64(20_000_000))), "stride address should be allowed to claim after update") + + // verify Stride address can't claim again + coins, err = s.App.ClaimKeeper.ClaimCoinsForAction(s.Ctx, strideAccAddress, types.ACTION_FREE, tc.airdropId) + s.Require().NoError(err) + s.Require().Equal(coins, sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewIntFromUint64(0))), "can't claim twice after update") + + // verify Stride address balance went up + strideBalance := s.App.BankKeeper.GetBalance(s.Ctx, strideAccAddress, "stake") + s.Require().Equal(strideBalance.Amount, sdkmath.NewIntFromUint64(20_000_000), "stride address balance should have increased after claiming") +} + +func (s *KeeperTestSuite) TestUpdateAirdropAddress_AirdropNotFound() { + tc := s.SetupUpdateAirdropAddressChangeTests() + + // update the address + err := s.App.ClaimKeeper.UpdateAirdropAddress(s.Ctx, tc.evmosAddress, tc.strideAddress, "stride") + s.Require().Error(err, "airdrop address update should fail with incorrect airdrop id") +} + +func (s *KeeperTestSuite) TestUpdateAirdropAddress_StrideAddressIncorrect() { + tc := s.SetupUpdateAirdropAddressChangeTests() + + // update the address + incorrectStrideAddress := tc.strideAddress + "a" + err := s.App.ClaimKeeper.UpdateAirdropAddress(s.Ctx, tc.evmosAddress, incorrectStrideAddress, tc.airdropId) + s.Require().Error(err, "airdrop address update should fail with incorrect stride address") +} + +func (s *KeeperTestSuite) TestUpdateAirdropAddress_HostAddressIncorrect() { + tc := s.SetupUpdateAirdropAddressChangeTests() + + // should fail with a clearly wrong host address + err := s.App.ClaimKeeper.UpdateAirdropAddress(s.Ctx, "evmostest", tc.strideAddress, tc.airdropId) + s.Require().Error(err, "airdrop address update should fail with clearly incorrect host address") + + // should fail if host address is not a stride address + err = s.App.ClaimKeeper.UpdateAirdropAddress(s.Ctx, tc.evmosAddress, tc.strideAddress, tc.airdropId) + s.Require().Error(err, "airdrop address update should fail with host address in wrong zone") + + // should fail is host address (record key) is slightly incorrect + recordKeyString := tc.recordKey.String() + modifiedAddress := recordKeyString[:len(recordKeyString)-1] + "a" + err = s.App.ClaimKeeper.UpdateAirdropAddress(s.Ctx, modifiedAddress, tc.strideAddress, tc.airdropId) + s.Require().Error(err, "airdrop address update should fail with incorrect host address") + + // should fail is host address is correct but doesn't have a claimrecord + randomStrideAddress := "stride16qv5wnkwwvd2qj5ttwznmngc09cet8l9zhm2ru" + err = s.App.ClaimKeeper.UpdateAirdropAddress(s.Ctx, randomStrideAddress, tc.strideAddress, tc.airdropId) + s.Require().Error(err, "airdrop address update should fail with not present host address") +} + +func (s *KeeperTestSuite) TestGetAirdropByChainId() { + // Store 5 airdrops + airdrops := []*types.Airdrop{} + for i := 0; i < 5; i++ { + airdropId := fmt.Sprintf("airdrop-%d", i) + chainId := fmt.Sprintf("chain-%d", i) + + airdrops = append(airdrops, &types.Airdrop{ + AirdropIdentifier: airdropId, + ChainId: chainId, + }) + } + err := s.App.ClaimKeeper.SetParams(s.Ctx, types.Params{Airdrops: airdrops}) + s.Require().NoError(err, "no error expected when setting airdrops") + + // Lookup each airdrop by chain-id + for i, expected := range airdrops { + actual, found := s.App.ClaimKeeper.GetAirdropByChainId(s.Ctx, expected.ChainId) + s.Require().True(found, "should have found airdrop %d", i) + s.Require().Equal(expected.AirdropIdentifier, actual.AirdropIdentifier, "airdrop identifier for %d", i) + } + + // Lookup a non-existent airdrop - it should not be found + _, found := s.App.ClaimKeeper.GetAirdropByChainId(s.Ctx, "fake_chain_id") + s.Require().False(found, "fake_chain_id should not have been found") +} diff --git a/x/claim/keeper/genesis.go b/x/claim/keeper/genesis.go new file mode 100644 index 00000000000..caabf142060 --- /dev/null +++ b/x/claim/keeper/genesis.go @@ -0,0 +1,31 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/claim/types" +) + +// InitGenesis initializes the capability module's state from a provided genesis +// state. +func (k Keeper) InitGenesis(ctx sdk.Context, genState types.GenesisState) { + // If its the chain genesis, set the airdrop start time to be now, and setup the needed module accounts. + if err := k.SetParams(ctx, genState.Params); err != nil { + panic(err) + } + if err := k.SetClaimRecordsWithWeights(ctx, genState.ClaimRecords); err != nil { + panic(err) + } +} + +// ExportGenesis returns the capability module's exported genesis. +func (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { + params, err := k.GetParams(ctx) + if err != nil { + panic(err) + } + genesis := types.DefaultGenesis() + genesis.Params = params + genesis.ClaimRecords = k.GetClaimRecords(ctx, "") + return genesis +} diff --git a/x/claim/keeper/genesis_test.go b/x/claim/keeper/genesis_test.go new file mode 100644 index 00000000000..e027eca708b --- /dev/null +++ b/x/claim/keeper/genesis_test.go @@ -0,0 +1,66 @@ +package keeper_test + +import ( + sdkmath "cosmossdk.io/math" + + "github.com/cometbft/cometbft/crypto/secp256k1" + + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/claim/types" +) + +func (s *KeeperTestSuite) TestGenesis() { + pub1 := secp256k1.GenPrivKey().PubKey() + addr1 := sdk.AccAddress(pub1.Address()) + + pub2 := secp256k1.GenPrivKey().PubKey() + addr2 := sdk.AccAddress(pub2.Address()) + + pub3 := secp256k1.GenPrivKey().PubKey() + addr3 := sdk.AccAddress(pub3.Address()) + + genesisState := types.GenesisState{ + Params: types.Params{ + Airdrops: []*types.Airdrop{ + { + AirdropIdentifier: types.DefaultAirdropIdentifier, + AirdropStartTime: s.Ctx.BlockTime(), + AirdropDuration: types.DefaultAirdropDuration, + ClaimDenom: sdk.DefaultBondDenom, + DistributorAddress: addr3.String(), + ClaimedSoFar: sdkmath.ZeroInt(), + }, + }, + }, + ClaimRecords: []types.ClaimRecord{ + { + Address: addr1.String(), + Weight: sdkmath.LegacyNewDecWithPrec(50, 2), // 50% + ActionCompleted: []bool{false, false, false}, + AirdropIdentifier: types.DefaultAirdropIdentifier, + }, + { + Address: addr2.String(), + Weight: sdkmath.LegacyNewDecWithPrec(50, 2), // 50% + ActionCompleted: []bool{false, false, false}, + AirdropIdentifier: "juno", + }, + }, + } + + s.App.ClaimKeeper.InitGenesis(s.Ctx, genesisState) + got := s.App.ClaimKeeper.ExportGenesis(s.Ctx) + s.Require().NotNil(got) + + totalWeightStride, err := s.App.ClaimKeeper.GetTotalWeight(s.Ctx, types.DefaultAirdropIdentifier) + s.Require().NoError(err) + s.Require().Equal(totalWeightStride, genesisState.ClaimRecords[0].Weight) + + totalWeightJuno, err := s.App.ClaimKeeper.GetTotalWeight(s.Ctx, types.DefaultAirdropIdentifier) + s.Require().NoError(err) + s.Require().Equal(totalWeightJuno, genesisState.ClaimRecords[1].Weight) + + s.Require().Equal(genesisState.Params, got.Params) + s.Require().ElementsMatch(genesisState.ClaimRecords, got.ClaimRecords) +} diff --git a/x/claim/keeper/grpc_query.go b/x/claim/keeper/grpc_query.go new file mode 100644 index 00000000000..80b32a8876c --- /dev/null +++ b/x/claim/keeper/grpc_query.go @@ -0,0 +1,165 @@ +package keeper + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "github.com/osmosis-labs/osmosis/v27/x/claim/types" +) + +var _ types.QueryServer = Keeper{} + +// Params returns balances of the distributor account +func (k Keeper) DistributorAccountBalance(c context.Context, req *types.QueryDistributorAccountBalanceRequest) (*types.QueryDistributorAccountBalanceResponse, error) { + ctx := sdk.UnwrapSDKContext(c) + bal, err := k.GetDistributorAccountBalance(ctx, req.AirdropIdentifier) + if err != nil { + return nil, err + } + return &types.QueryDistributorAccountBalanceResponse{DistributorAccountBalance: sdk.NewCoins(bal)}, nil +} + +// Params returns params of the claim module. +func (k Keeper) Params(c context.Context, _ *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { + ctx := sdk.UnwrapSDKContext(c) + params, err := k.GetParams(ctx) + if err != nil { + return nil, err + } + + return &types.QueryParamsResponse{Params: params}, nil +} + +// ClaimRecord returns user claim record by address and airdrop identifier +func (k Keeper) ClaimRecord( + goCtx context.Context, + req *types.QueryClaimRecordRequest, +) (*types.QueryClaimRecordResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + + ctx := sdk.UnwrapSDKContext(goCtx) + + addr, err := sdk.AccAddressFromBech32(req.Address) + if err != nil { + return nil, err + } + + claimRecord, err := k.GetClaimRecord(ctx, addr, req.AirdropIdentifier) + if err != nil { + return nil, err + } + return &types.QueryClaimRecordResponse{ClaimRecord: claimRecord}, nil +} + +// ClaimableForAction returns claimable amount per action +func (k Keeper) ClaimableForAction( + goCtx context.Context, + req *types.QueryClaimableForActionRequest, +) (*types.QueryClaimableForActionResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + + ctx := sdk.UnwrapSDKContext(goCtx) + addr, err := sdk.AccAddressFromBech32(req.Address) + if err != nil { + return nil, err + } + + coins, err := k.GetClaimableAmountForAction(ctx, addr, req.Action, req.AirdropIdentifier, false) + if err != nil { + return nil, err + } + + return &types.QueryClaimableForActionResponse{Coins: coins}, nil +} + +// TotalClaimable returns total claimable amount for user +func (k Keeper) TotalClaimable( + goCtx context.Context, + req *types.QueryTotalClaimableRequest, +) (*types.QueryTotalClaimableResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + + ctx := sdk.UnwrapSDKContext(goCtx) + addr, err := sdk.AccAddressFromBech32(req.Address) + if err != nil { + return nil, err + } + + coins, err := k.GetUserTotalClaimable(ctx, addr, req.AirdropIdentifier, req.IncludeClaimed) + if err != nil { + return nil, err + } + + return &types.QueryTotalClaimableResponse{Coins: coins}, nil +} + +// UserVestings returns all vestings for user +func (k Keeper) UserVestings( + goCtx context.Context, + req *types.QueryUserVestingsRequest, +) (*types.QueryUserVestingsResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + + ctx := sdk.UnwrapSDKContext(goCtx) + addr, err := sdk.AccAddressFromBech32(req.Address) + if err != nil { + return nil, err + } + + vestings, spendableCoins := k.GetUserVestings(ctx, addr) + + return &types.QueryUserVestingsResponse{ + SpendableCoins: spendableCoins, + Periods: vestings, + }, nil +} + +// ClaimStatus returns all vestings for user +func (k Keeper) ClaimStatus( + goCtx context.Context, + req *types.QueryClaimStatusRequest, +) (*types.QueryClaimStatusResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + + ctx := sdk.UnwrapSDKContext(goCtx) + addr, err := sdk.AccAddressFromBech32(req.Address) + if err != nil { + return nil, err + } + + claimStatus, err := k.GetClaimStatus(ctx, addr) + if err != nil { + return nil, err + } + + return &types.QueryClaimStatusResponse{ClaimStatus: claimStatus}, nil +} + +// ClaimMetadata returns all vestings for user +func (k Keeper) ClaimMetadata( + goCtx context.Context, + req *types.QueryClaimMetadataRequest, +) (*types.QueryClaimMetadataResponse, error) { + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + + ctx := sdk.UnwrapSDKContext(goCtx) + + claimMetadata := k.GetClaimMetadata(ctx) + + return &types.QueryClaimMetadataResponse{ClaimMetadata: claimMetadata}, nil +} diff --git a/x/claim/keeper/hooks.go b/x/claim/keeper/hooks.go new file mode 100644 index 00000000000..b1441b092ff --- /dev/null +++ b/x/claim/keeper/hooks.go @@ -0,0 +1,173 @@ +package keeper + +import ( + "context" + "fmt" + "strings" + + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + + epochstypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" + stakingibctypes "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types" + + "github.com/osmosis-labs/osmosis/v27/x/claim/types" +) + +func (k Keeper) AfterDelegationModified(context context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) error { + ctx := sdk.UnwrapSDKContext(context) + identifiers := k.GetAirdropIdentifiersForUser(ctx, delAddr) + for _, identifier := range identifiers { + cacheCtx, write := ctx.CacheContext() + _, err := k.ClaimCoinsForAction(cacheCtx, delAddr, types.ACTION_DELEGATE_STAKE, identifier) + if err == nil { + write() + } else { + k.Logger(ctx).Error(fmt.Sprintf("airdrop claim failure for %s on delegation hook: %s", delAddr.String(), err.Error())) + return err + } + } + return nil +} + +func (k Keeper) AfterLiquidStake(context context.Context, addr sdk.AccAddress) { + ctx := sdk.UnwrapSDKContext(context) + identifiers := k.GetAirdropIdentifiersForUser(ctx, addr) + for _, identifier := range identifiers { + cacheCtx, write := ctx.CacheContext() + _, err := k.ClaimCoinsForAction(cacheCtx, addr, types.ACTION_LIQUID_STAKE, identifier) + if err == nil { + write() + } else { + k.Logger(ctx).Error(fmt.Sprintf("airdrop claim failure for %s on liquid staking hook: %s", addr.String(), err.Error())) + } + } +} + +func (k Keeper) BeforeEpochStart(ctx context.Context, epochInfo epochstypes.EpochInfo) { +} + +func (k Keeper) AfterEpochEnd(context context.Context, epochInfo epochstypes.EpochInfo) { + // check if epochInfo.Identifier is an airdrop epoch + // if yes, reset claim status for all users + // check if epochInfo.Identifier starts with "airdrop" + ctx := sdk.UnwrapSDKContext(context) + k.Logger(ctx).Info(fmt.Sprintf("[CLAIM] checking if epoch %s is an airdrop epoch", epochInfo.Identifier)) + if strings.HasPrefix(epochInfo.Identifier, "airdrop-") { + + airdropIdentifier := strings.TrimPrefix(epochInfo.Identifier, "airdrop-") + k.Logger(ctx).Info(fmt.Sprintf("[CLAIM] trimmed airdrop identifier: %s", airdropIdentifier)) + + airdrop := k.GetAirdropByIdentifier(ctx, airdropIdentifier) + k.Logger(ctx).Info(fmt.Sprintf("[CLAIM] airdrop found: %v", airdrop)) + + if airdrop != nil { + k.Logger(ctx).Info(fmt.Sprintf("[CLAIM] resetting claims for airdrop %s", epochInfo.Identifier)) + err := k.ResetClaimStatus(ctx, airdropIdentifier) + if err != nil { + k.Logger(ctx).Error(fmt.Sprintf("[CLAIM] failed to reset claim status for epoch %s: %s", epochInfo.Identifier, err.Error())) + } + } else { + k.Logger(ctx).Info(fmt.Sprintf("[CLAIM] airdrop %s not found, skipping reset", airdropIdentifier)) + } + } +} + +// ________________________________________________________________________________________ + +// Hooks wrapper struct for claim keeper +type Hooks struct { + k Keeper +} + +func (Hooks) GetModuleName() string { + return types.ModuleName +} + +var ( + _ stakingtypes.StakingHooks = Hooks{} + _ stakingibctypes.StakeIBCHooks = Hooks{} + _ epochstypes.EpochHooks = Hooks{} +) + +// Return the wrapper struct +func (k Keeper) Hooks() Hooks { + return Hooks{k} +} + +// ibcstaking hooks +func (h Hooks) AfterLiquidStake(ctx context.Context, addr sdk.AccAddress) { + h.k.AfterLiquidStake(ctx, addr) +} + +// epochs hooks +func (h Hooks) BeforeEpochStart(ctx sdk.Context, epochIdentifier string, epochNumber int64) error { + epochInfo := h.k.epochsKeeper.GetEpochInfo(ctx, epochIdentifier) + h.k.BeforeEpochStart(ctx, epochInfo) + + return nil +} + +func (h Hooks) AfterEpochEnd(ctx sdk.Context, epochIdentifier string, epochNumber int64) error { + epochInfo := h.k.epochsKeeper.GetEpochInfo(ctx, epochIdentifier) + h.k.AfterEpochEnd(ctx, epochInfo) + return nil +} + +func (h Hooks) AfterUnbondingInitiated(ctx context.Context, id uint64) error { + return nil +} + +// staking hooks +func (h Hooks) AfterValidatorCreated(ctx context.Context, valAddr sdk.ValAddress) error { + return nil +} + +func (h Hooks) BeforeValidatorModified(ctx context.Context, valAddr sdk.ValAddress) error { + return nil +} + +func (h Hooks) AfterValidatorRemoved(ctx context.Context, consAddr sdk.ConsAddress, valAddr sdk.ValAddress) error { + return nil +} + +func (h Hooks) AfterValidatorBonded(ctx context.Context, consAddr sdk.ConsAddress, valAddr sdk.ValAddress) error { + return nil +} + +func (h Hooks) AfterValidatorBeginUnbonding(ctx context.Context, consAddr sdk.ConsAddress, valAddr sdk.ValAddress) error { + return nil +} + +func (h Hooks) BeforeDelegationCreated(ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) error { + return nil +} + +func (h Hooks) BeforeDelegationSharesModified(ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) error { + return nil +} + +func (h Hooks) BeforeDelegationRemoved(ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) error { + return nil +} + +func (h Hooks) AfterDelegationModified(ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) error { + return h.k.AfterDelegationModified(ctx, delAddr, valAddr) +} + +func (h Hooks) BeforeValidatorSlashed(ctx context.Context, valAddr sdk.ValAddress, fraction sdkmath.LegacyDec) error { + return nil +} + +func (h Hooks) BeforeSlashingUnbondingDelegation(ctx context.Context, unbondingDelegation stakingtypes.UnbondingDelegation, + infractionHeight int64, slashFactor sdkmath.LegacyDec, +) error { + return nil +} + +func (h Hooks) BeforeSlashingRedelegation(ctx context.Context, srcValidator stakingtypes.Validator, redelegation stakingtypes.Redelegation, + infractionHeight int64, slashFactor sdkmath.LegacyDec, +) error { + return nil +} diff --git a/x/claim/keeper/hooks_test.go b/x/claim/keeper/hooks_test.go new file mode 100644 index 00000000000..7f594993540 --- /dev/null +++ b/x/claim/keeper/hooks_test.go @@ -0,0 +1,101 @@ +package keeper_test + +import ( + "time" + + sdkmath "cosmossdk.io/math" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/claim/types" + epochtypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" +) + +func (s *KeeperTestSuite) TestAfterEpochEnd() { + addresses := apptesting.CreateRandomAccounts(3) + + airdropEndedId := "ended" + airdropInProgressId := "in-progress" + + epochEndedId := "airdrop-" + airdropEndedId + epochInProgressId := "airdrop-" + airdropInProgressId + + claimedSoFar := sdkmath.NewInt(1000) + + // Add two airdrops - one that ended, and one that's in progress + types.DefaultVestingInitialPeriod = time.Minute * 2 // vesting period of 2 minutes + err := s.App.ClaimKeeper.SetParams(s.Ctx, types.Params{ + Airdrops: []*types.Airdrop{ + { + AirdropIdentifier: airdropEndedId, + ClaimedSoFar: claimedSoFar, + AirdropStartTime: s.Ctx.BlockTime().Add(-3 * time.Minute), // started 3 minutes ago + }, + { + AirdropIdentifier: airdropInProgressId, + ClaimedSoFar: claimedSoFar, + AirdropStartTime: s.Ctx.BlockTime().Add(-1 * time.Minute), // started 1 minute ago + }, + }, + }) + s.Require().NoError(err, "no error expected when setting claims params") + + // Add the corresponding epoch for each airdrop + epochEnded := epochtypes.EpochInfo{Identifier: epochEndedId} + epochInProgress := epochtypes.EpochInfo{Identifier: epochInProgressId} + s.App.EpochsKeeper.SetEpochInfo(s.Ctx, epochEnded) + s.App.EpochsKeeper.SetEpochInfo(s.Ctx, epochInProgress) + + // Add claim records for each airdrop + actions := [][]bool{ + {false, false, false}, + {true, false, true}, + {true, true, true}, + } + addressToAction := map[string][]bool{} + for i, action := range actions { + address := addresses[i].String() + + err := s.App.ClaimKeeper.SetClaimRecord(s.Ctx, types.ClaimRecord{ + AirdropIdentifier: airdropEndedId, + Address: address, + ActionCompleted: action, + }) + s.Require().NoError(err, "no error expected when setting claims record for airdrop-ended, claim %d", i) + + err = s.App.ClaimKeeper.SetClaimRecord(s.Ctx, types.ClaimRecord{ + AirdropIdentifier: airdropInProgressId, + Address: address, + ActionCompleted: action, + }) + s.Require().NoError(err, "no error expected when setting claims record for airdrop-in-progress, claim %d", i) + addressToAction[address] = action + } + + // Call AfterEpochEnds with each epoch + s.App.ClaimKeeper.AfterEpochEnd(s.Ctx, epochEnded) + s.App.ClaimKeeper.AfterEpochEnd(s.Ctx, epochInProgress) + + // Check that the airdrop that ended had everything reset and the actions were reset + airdropEnded := s.App.ClaimKeeper.GetAirdropByIdentifier(s.Ctx, airdropEndedId) + s.Require().Equal(int64(0), airdropEnded.ClaimedSoFar.Int64(), "claimed so far for airdrop that ended") + + actionsReset := []bool{false, false, false} + endedClaimRecords := s.App.ClaimKeeper.GetClaimRecords(s.Ctx, airdropEndedId) + s.Require().Len(endedClaimRecords, 3) + + for i, claimRecord := range endedClaimRecords { + s.Require().Equal(actionsReset, claimRecord.ActionCompleted, "actions for claim record %d, for airdrop %s", i, airdropEndedId) + } + + // And check that the airdrop that was still in progress has been unchanged + airdropInProgress := s.App.ClaimKeeper.GetAirdropByIdentifier(s.Ctx, airdropInProgressId) + s.Require().Equal(claimedSoFar.Int64(), airdropInProgress.ClaimedSoFar.Int64(), "claimed so far for airdrop in progress") + + inProgressClaimRecords := s.App.ClaimKeeper.GetClaimRecords(s.Ctx, airdropInProgressId) + s.Require().Len(inProgressClaimRecords, 3) + + for i, claimRecord := range inProgressClaimRecords { + s.Require().Equal(addressToAction[claimRecord.Address], claimRecord.ActionCompleted, + "actions for claim record %d, for airdrop %s", i, airdropInProgressId) + } +} diff --git a/x/claim/keeper/keeper.go b/x/claim/keeper/keeper.go new file mode 100644 index 00000000000..1eae713722e --- /dev/null +++ b/x/claim/keeper/keeper.go @@ -0,0 +1,42 @@ +package keeper + +import ( + "fmt" + + "cosmossdk.io/log" + + storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/claim/types" +) + +// Keeper struct +type Keeper struct { + cdc codec.Codec + storeKey storetypes.StoreKey + accountKeeper types.AccountKeeper + bankKeeper types.BankKeeper + stakingKeeper types.StakingKeeper + distrKeeper types.DistrKeeper + epochsKeeper types.EpochsKeeper +} + +// NewKeeper returns keeper +func NewKeeper(cdc codec.Codec, storeKey storetypes.StoreKey, ak types.AccountKeeper, bk types.BankKeeper, sk types.StakingKeeper, dk types.DistrKeeper, ek types.EpochsKeeper) *Keeper { + return &Keeper{ + cdc: cdc, + storeKey: storeKey, + accountKeeper: ak, + bankKeeper: bk, + stakingKeeper: sk, + distrKeeper: dk, + epochsKeeper: ek, + } +} + +// Logger returns logger +func (k Keeper) Logger(ctx sdk.Context) log.Logger { + return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName)) +} diff --git a/x/claim/keeper/keeper_test.go b/x/claim/keeper/keeper_test.go new file mode 100644 index 00000000000..ec6c1f36a71 --- /dev/null +++ b/x/claim/keeper/keeper_test.go @@ -0,0 +1,118 @@ +package keeper_test + +import ( + "testing" + "time" + + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/suite" + + sdkmath "cosmossdk.io/math" + + "github.com/osmosis-labs/osmosis/v27/app/apptesting" + "github.com/osmosis-labs/osmosis/v27/x/claim/types" + minttypes "github.com/osmosis-labs/osmosis/v27/x/mint/types" +) + +type KeeperTestSuite struct { + apptesting.AppTestHelper +} + +var distributors map[string]sdk.AccAddress + +func (s *KeeperTestSuite) SetupTest() { + s.SetT(s.T()) + s.Setup() + + distributors = make(map[string]sdk.AccAddress) + + // Initiate a distributor account for stride user airdrop + pub1 := secp256k1.GenPrivKey().PubKey() + addr1 := sdk.AccAddress(pub1.Address()) + s.SetNewAccount(addr1) + distributors[types.DefaultAirdropIdentifier] = addr1 + + // Initiate a distributor account for juno user airdrop + pub2 := secp256k1.GenPrivKey().PubKey() + addr2 := sdk.AccAddress(pub2.Address()) + s.SetNewAccount(addr2) + distributors["juno"] = addr2 + + // Initiate a distributor account for juno user airdrop + pub3 := secp256k1.GenPrivKey().PubKey() + addr3 := sdk.AccAddress(pub3.Address()) + s.SetNewAccount(addr3) + distributors["osmosis"] = addr3 + + // Initiate a distributor account for evmos user airdrop + pub4 := secp256k1.GenPrivKey().PubKey() + addr4 := sdk.AccAddress(pub4.Address()) + s.SetNewAccount(addr4) + distributors["evmos"] = addr4 + + // Mint coins to airdrop module + err := s.App.BankKeeper.MintCoins(s.Ctx, minttypes.ModuleName, sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdkmath.NewInt(300000000)))) + if err != nil { + panic(err) + } + err = s.App.BankKeeper.SendCoinsFromModuleToAccount(s.Ctx, minttypes.ModuleName, addr1, sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdkmath.NewInt(100000000)))) + if err != nil { + panic(err) + } + err = s.App.BankKeeper.SendCoinsFromModuleToAccount(s.Ctx, minttypes.ModuleName, addr2, sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdkmath.NewInt(100000000)))) + if err != nil { + panic(err) + } + err = s.App.BankKeeper.SendCoinsFromModuleToAccount(s.Ctx, minttypes.ModuleName, addr3, sdk.NewCoins(sdk.NewCoin(sdk.DefaultBondDenom, sdkmath.NewInt(100000000)))) + if err != nil { + panic(err) + } + + // Stride airdrop + airdropStartTime := time.Now() + err = s.App.ClaimKeeper.CreateAirdropAndEpoch(s.Ctx, types.MsgCreateAirdrop{ + Distributor: addr1.String(), + Identifier: types.DefaultAirdropIdentifier, + ChainId: "stride-1", + Denom: sdk.DefaultBondDenom, + StartTime: uint64(airdropStartTime.Unix()), + Duration: uint64(types.DefaultAirdropDuration.Seconds()), + AutopilotEnabled: false, + }) + if err != nil { + panic(err) + } + + // Juno airdrop + err = s.App.ClaimKeeper.CreateAirdropAndEpoch(s.Ctx, types.MsgCreateAirdrop{ + Distributor: addr2.String(), + Identifier: "juno", + ChainId: "juno-1", + Denom: sdk.DefaultBondDenom, + StartTime: uint64(airdropStartTime.Add(time.Hour).Unix()), + Duration: uint64(types.DefaultAirdropDuration.Seconds()), + }) + if err != nil { + panic(err) + } + + // Osmosis airdrop + err = s.App.ClaimKeeper.CreateAirdropAndEpoch(s.Ctx, types.MsgCreateAirdrop{ + Distributor: addr3.String(), + Identifier: "osmosis", + ChainId: "osmosis-1", + Denom: sdk.DefaultBondDenom, + StartTime: uint64(airdropStartTime.Unix()), + Duration: uint64(types.DefaultAirdropDuration.Seconds()), + }) + if err != nil { + panic(err) + } + + s.Ctx = s.Ctx.WithBlockTime(airdropStartTime) +} + +func TestKeeperTestSuite(t *testing.T) { + suite.Run(t, new(KeeperTestSuite)) +} diff --git a/x/claim/keeper/msg_server.go b/x/claim/keeper/msg_server.go new file mode 100644 index 00000000000..3311e1d85ab --- /dev/null +++ b/x/claim/keeper/msg_server.go @@ -0,0 +1,130 @@ +package keeper + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + + errorsmod "cosmossdk.io/errors" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + "github.com/osmosis-labs/osmosis/v27/x/claim/types" +) + +type msgServer struct { + keeper Keeper +} + +func NewMsgServerImpl(keeper Keeper) types.MsgServer { + return &msgServer{ + keeper: keeper, + } +} + +var _ types.MsgServer = msgServer{} + +func (server msgServer) SetAirdropAllocations(goCtx context.Context, msg *types.MsgSetAirdropAllocations) (*types.MsgSetAirdropAllocationsResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + records := []types.ClaimRecord{} + totalWeight, err := server.keeper.GetTotalWeight(ctx, msg.AirdropIdentifier) + if err != nil { + return nil, err + } + + airdropDistributor, err := server.keeper.GetAirdropDistributor(ctx, msg.AirdropIdentifier) + if err != nil { + return nil, err + } + + addr, err := sdk.AccAddressFromBech32(msg.Allocator) + if err != nil { + return nil, err + } + + if !addr.Equals(airdropDistributor) { + return nil, errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid distributor address") + } + + users, weights := server.keeper.GetUnallocatedUsers(ctx, msg.AirdropIdentifier, msg.Users, msg.Weights) + for idx, user := range users { + record := types.ClaimRecord{ + Address: user, + Weight: weights[idx], + ActionCompleted: []bool{false, false, false}, + AirdropIdentifier: msg.AirdropIdentifier, + } + + records = append(records, record) + totalWeight = totalWeight.Add(weights[idx]) + } + + server.keeper.SetTotalWeight(ctx, totalWeight, msg.AirdropIdentifier) + err = server.keeper.SetClaimRecords(ctx, records) + if err != nil { + return nil, err + } + + return &types.MsgSetAirdropAllocationsResponse{}, nil +} + +func (server msgServer) ClaimFreeAmount(goCtx context.Context, msg *types.MsgClaimFreeAmount) (*types.MsgClaimFreeAmountResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + addr, err := sdk.AccAddressFromBech32(msg.User) + if err != nil { + return nil, err + } + + coins, err := server.keeper.ClaimAllCoinsForAction(ctx, addr, types.ACTION_FREE) + if err != nil { + return nil, err + } + + return &types.MsgClaimFreeAmountResponse{ClaimedAmount: coins}, nil +} + +func (server msgServer) CreateAirdrop(goCtx context.Context, msg *types.MsgCreateAirdrop) (*types.MsgCreateAirdropResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + _, err := sdk.AccAddressFromBech32(msg.Distributor) + if err != nil { + return nil, err + } + + airdrop := server.keeper.GetAirdropByDistributor(ctx, msg.Distributor) + if airdrop != nil { + return nil, types.ErrDistributorAlreadyExists + } + + err = server.keeper.CreateAirdropAndEpoch(ctx, *msg) + if err != nil { + return nil, err + } + + return &types.MsgCreateAirdropResponse{}, nil +} + +func (server msgServer) DeleteAirdrop(goCtx context.Context, msg *types.MsgDeleteAirdrop) (*types.MsgDeleteAirdropResponse, error) { + ctx := sdk.UnwrapSDKContext(goCtx) + + addr, err := sdk.AccAddressFromBech32(msg.Distributor) + if err != nil { + return nil, err + } + + distributor, err := server.keeper.GetAirdropDistributor(ctx, msg.Identifier) + if err != nil { + return nil, err + } + + if !addr.Equals(distributor) { + return nil, errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid distributor address") + } + + err = server.keeper.DeleteAirdropAndEpoch(ctx, msg.Identifier) + if err != nil { + return nil, err + } + + return &types.MsgDeleteAirdropResponse{}, nil +} diff --git a/x/claim/keeper/msg_server_test.go b/x/claim/keeper/msg_server_test.go new file mode 100644 index 00000000000..d418ef844fa --- /dev/null +++ b/x/claim/keeper/msg_server_test.go @@ -0,0 +1,173 @@ +package keeper_test + +import ( + sdkmath "cosmossdk.io/math" + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/claim/keeper" + "github.com/osmosis-labs/osmosis/v27/x/claim/types" +) + +func (s *KeeperTestSuite) TestSetAirdropAllocationsForMultiAirdrops() { + s.SetupTest() + msgServer := keeper.NewMsgServerImpl(s.App.ClaimKeeper) + + // Set initial allocations for each airdrop + addr1 := sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()) + addr2 := sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()) + + allocations := []types.ClaimRecord{ + { + Address: addr1.String(), + Weight: sdkmath.LegacyNewDecWithPrec(50, 2), // 50% + ActionCompleted: []bool{false, false, false}, + AirdropIdentifier: types.DefaultAirdropIdentifier, + }, + { + Address: addr2.String(), + Weight: sdkmath.LegacyNewDecWithPrec(30, 2), // 30% + ActionCompleted: []bool{false, false, false}, + AirdropIdentifier: "juno", + }, + } + + for _, record := range allocations { + _, err := msgServer.SetAirdropAllocations(s.Ctx, &types.MsgSetAirdropAllocations{ + Allocator: distributors[record.AirdropIdentifier].String(), + AirdropIdentifier: record.AirdropIdentifier, + Users: []string{record.Address}, + Weights: []sdkmath.LegacyDec{record.Weight}, + }) + s.Require().NoError(err) + } + + // Set second allocations for each airdrop + addr1 = sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()) + addr2 = sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()) + + allocations2 := []types.ClaimRecord{ + { + Address: addr1.String(), + Weight: sdkmath.LegacyNewDecWithPrec(40, 2), // 40% + ActionCompleted: []bool{false, false, false}, + AirdropIdentifier: types.DefaultAirdropIdentifier, + }, + { + Address: addr2.String(), + Weight: sdkmath.LegacyNewDecWithPrec(20, 2), // 20% + ActionCompleted: []bool{false, false, false}, + AirdropIdentifier: "juno", + }, + } + + for _, record := range allocations2 { + _, err := msgServer.SetAirdropAllocations(s.Ctx, &types.MsgSetAirdropAllocations{ + Allocator: distributors[record.AirdropIdentifier].String(), + AirdropIdentifier: record.AirdropIdentifier, + Users: []string{record.Address}, + Weights: []sdkmath.LegacyDec{record.Weight}, + }) + s.Require().NoError(err) + } + + totalWeightStride, err := s.App.ClaimKeeper.GetTotalWeight(s.Ctx, types.DefaultAirdropIdentifier) + s.Require().NoError(err) + s.Require().Equal(totalWeightStride, sdkmath.LegacyNewDecWithPrec(90, 2)) + + totalWeightJuno, err := s.App.ClaimKeeper.GetTotalWeight(s.Ctx, "juno") + s.Require().NoError(err) + s.Require().Equal(totalWeightJuno, sdkmath.LegacyNewDecWithPrec(50, 2)) + + claimRecords := s.App.ClaimKeeper.GetClaimRecords(s.Ctx, types.DefaultAirdropIdentifier) + s.Require().Equal(2, len(claimRecords)) + + claimRecords = s.App.ClaimKeeper.GetClaimRecords(s.Ctx, "juno") + s.Require().Equal(2, len(claimRecords)) + + // Multiple airdrop allocations for same user should be ignored + addr2 = sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address()) + allocations3 := []types.ClaimRecord{ + { + Address: addr1.String(), // duplicated airdrop address + Weight: sdkmath.LegacyNewDecWithPrec(40, 2), // 40% + ActionCompleted: []bool{false, false, false}, + AirdropIdentifier: types.DefaultAirdropIdentifier, + }, + { + Address: addr2.String(), + Weight: sdkmath.LegacyNewDecWithPrec(20, 2), // 20% + ActionCompleted: []bool{false, false, false}, + AirdropIdentifier: "juno", + }, + } + for _, record := range allocations3 { + _, err := msgServer.SetAirdropAllocations(s.Ctx, &types.MsgSetAirdropAllocations{ + Allocator: distributors[record.AirdropIdentifier].String(), + AirdropIdentifier: record.AirdropIdentifier, + Users: []string{record.Address}, + Weights: []sdkmath.LegacyDec{record.Weight}, + }) + s.Require().NoError(err) + } + + claimRecords = s.App.ClaimKeeper.GetClaimRecords(s.Ctx, types.DefaultAirdropIdentifier) + s.Require().Equal(2, len(claimRecords)) + + claimRecords = s.App.ClaimKeeper.GetClaimRecords(s.Ctx, "juno") + s.Require().Equal(3, len(claimRecords)) +} + +func getValidCreateEvmosAirdropMsg(ctx sdk.Context) types.MsgCreateAirdrop { + return types.MsgCreateAirdrop{ + Distributor: distributors["evmos"].String(), + Identifier: "evmos", + ChainId: "evmos-1", + Denom: sdk.DefaultBondDenom, + StartTime: uint64(ctx.BlockTime().Unix()), + Duration: uint64(types.DefaultAirdropDuration.Seconds()), + AutopilotEnabled: true, + } +} + +func (s *KeeperTestSuite) TestCreateAirdrop_Successful() { + s.SetupTest() + msgServer := keeper.NewMsgServerImpl(s.App.ClaimKeeper) + + // Successfully create a new airdrop + validMsg := getValidCreateEvmosAirdropMsg(s.Ctx) + _, err := msgServer.CreateAirdrop(s.Ctx, &validMsg) + s.Require().NoError(err, "no error expected when adding evmos airdrop") + + // Check that it matches the evmos airdrop + airdrop := s.App.ClaimKeeper.GetAirdropByIdentifier(s.Ctx, "evmos") + s.Require().Equal("evmos", airdrop.AirdropIdentifier, "airdrop identifier") + s.Require().Equal("evmos-1", airdrop.ChainId, "airdrop chain-id") + s.Require().Equal(true, airdrop.AutopilotEnabled, "airdrop autopilot enabled") +} + +func (s *KeeperTestSuite) TestCreateAirdrop_IdentifierAlreadyExists() { + s.SetupTest() + msgServer := keeper.NewMsgServerImpl(s.App.ClaimKeeper) + + // Attempt to create an airdrop with an identifier that already exists, it should fail + validMsg := getValidCreateEvmosAirdropMsg(s.Ctx) + invalidMsg := validMsg + invalidMsg.Identifier = types.DefaultAirdropIdentifier + + _, err := msgServer.CreateAirdrop(s.Ctx, &invalidMsg) + s.Require().ErrorContains(err, "airdrop with same identifier already exists") +} + +func (s *KeeperTestSuite) TestCreateAirdrop_ChainIdAlreadyExists() { + s.SetupTest() + msgServer := keeper.NewMsgServerImpl(s.App.ClaimKeeper) + + // Attempt to create an airdrop with a chain-id that already exists, it should fail + validMsg := getValidCreateEvmosAirdropMsg(s.Ctx) + invalidMsg := validMsg + invalidMsg.ChainId = "stride-1" + + _, err := msgServer.CreateAirdrop(s.Ctx, &invalidMsg) + s.Require().ErrorContains(err, "airdrop with same chain-id already exists") +} diff --git a/x/claim/keeper/params.go b/x/claim/keeper/params.go new file mode 100644 index 00000000000..ebaa8d0bf59 --- /dev/null +++ b/x/claim/keeper/params.go @@ -0,0 +1,27 @@ +package keeper + +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + + "github.com/osmosis-labs/osmosis/v27/x/claim/types" +) + +// GetParams get params +func (k Keeper) GetParams(ctx sdk.Context) (types.Params, error) { + store := ctx.KVStore(k.storeKey) + bz := store.Get([]byte(types.ParamsKey)) + params := types.Params{} + err := k.cdc.UnmarshalJSON(bz, ¶ms) + return params, err +} + +// SetParams set params +func (k Keeper) SetParams(ctx sdk.Context, params types.Params) error { + store := ctx.KVStore(k.storeKey) + bz, err := k.cdc.MarshalJSON(¶ms) + if err != nil { + return err + } + store.Set([]byte(types.ParamsKey), bz) + return nil +} diff --git a/x/claim/migrations/v2/convert.go b/x/claim/migrations/v2/convert.go new file mode 100644 index 00000000000..264e8c12769 --- /dev/null +++ b/x/claim/migrations/v2/convert.go @@ -0,0 +1,28 @@ +package v2 + +import ( + sdkmath "cosmossdk.io/math" + + oldclaimtypes "github.com/osmosis-labs/osmosis/v27/x/claim/migrations/v2/types" + claimtypes "github.com/osmosis-labs/osmosis/v27/x/claim/types" +) + +func convertToNewAirdrop(oldAirdrop oldclaimtypes.Airdrop) claimtypes.Airdrop { + return claimtypes.Airdrop{ + AirdropIdentifier: oldAirdrop.AirdropIdentifier, + AirdropStartTime: oldAirdrop.AirdropStartTime, + AirdropDuration: oldAirdrop.AirdropDuration, + ClaimDenom: oldAirdrop.ClaimDenom, + DistributorAddress: oldAirdrop.DistributorAddress, + ClaimedSoFar: sdkmath.NewInt(oldAirdrop.ClaimedSoFar), + } +} + +func convertToNewClaimParams(oldParams oldclaimtypes.Params) claimtypes.Params { + var newParams claimtypes.Params + for _, oldAirdrop := range oldParams.Airdrops { + newAirDrop := convertToNewAirdrop(*oldAirdrop) + newParams.Airdrops = append(newParams.Airdrops, &newAirDrop) + } + return newParams +} diff --git a/x/claim/migrations/v2/convert_test.go b/x/claim/migrations/v2/convert_test.go new file mode 100644 index 00000000000..d25678fe291 --- /dev/null +++ b/x/claim/migrations/v2/convert_test.go @@ -0,0 +1,72 @@ +package v2 + +import ( + "fmt" + "testing" + "time" + + sdkmath "cosmossdk.io/math" + + "github.com/stretchr/testify/require" + + oldclaimtypes "github.com/osmosis-labs/osmosis/v27/x/claim/migrations/v2/types" + claimtypes "github.com/osmosis-labs/osmosis/v27/x/claim/types" +) + +func TestConvertToNewAirdrop(t *testing.T) { + id := "id1" + startTime := time.Date(2021, 1, 1, 0, 0, 0, 0, time.Local) + duration := time.Duration(1) + denom := "denom1" + address := "address1" + + // Only the ClaimedSoFar field of the Airdrop should change + oldAirdrop := oldclaimtypes.Airdrop{ + AirdropIdentifier: id, + AirdropStartTime: startTime, + AirdropDuration: duration, + ClaimDenom: denom, + DistributorAddress: address, + ClaimedSoFar: 1, + } + expectedNewAirdrop := claimtypes.Airdrop{ + AirdropIdentifier: id, + AirdropStartTime: startTime, + AirdropDuration: duration, + ClaimDenom: denom, + DistributorAddress: address, + ClaimedSoFar: sdkmath.NewInt(1), + } + actualNewAirdrop := convertToNewAirdrop(oldAirdrop) + require.Equal(t, expectedNewAirdrop, actualNewAirdrop) +} + +func TestConvertToNewClaimParams(t *testing.T) { + numAirdrops := 3 + + // Build a list of old airdrops as well as the new expected type + oldParams := oldclaimtypes.Params{} + expectedNewParams := claimtypes.Params{} + for i := 0; i <= numAirdrops-1; i++ { + id := fmt.Sprintf("id-%d", i) + + oldParams.Airdrops = append(oldParams.Airdrops, &oldclaimtypes.Airdrop{ + AirdropIdentifier: id, + ClaimedSoFar: int64(i), + }) + + expectedNewParams.Airdrops = append(expectedNewParams.Airdrops, &claimtypes.Airdrop{ + AirdropIdentifier: id, + ClaimedSoFar: sdkmath.NewInt(int64(i)), + }) + } + + // Convert airdrop params + actualNewParams := convertToNewClaimParams(oldParams) + + // Confirm new params align with expectations + require.Equal(t, len(expectedNewParams.Airdrops), len(actualNewParams.Airdrops)) + for i := 0; i <= numAirdrops-1; i++ { + require.Equal(t, expectedNewParams.Airdrops[i], actualNewParams.Airdrops[i], "index: %d", i) + } +} diff --git a/x/claim/migrations/v2/migrations.go b/x/claim/migrations/v2/migrations.go new file mode 100644 index 00000000000..4749465fd1c --- /dev/null +++ b/x/claim/migrations/v2/migrations.go @@ -0,0 +1,38 @@ +package v2 + +import ( + storetypes "cosmossdk.io/store/types" + "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + + errorsmod "cosmossdk.io/errors" + + oldclaimtypes "github.com/osmosis-labs/osmosis/v27/x/claim/migrations/v2/types" + claimtypes "github.com/osmosis-labs/osmosis/v27/x/claim/types" +) + +func migrateClaimParams(store storetypes.KVStore, cdc codec.Codec) error { + // Deserialize with old data type + oldParamsBz := store.Get([]byte(claimtypes.ParamsKey)) + var oldParams oldclaimtypes.Params + err := cdc.UnmarshalJSON(oldParamsBz, &oldParams) + if err != nil { + return errorsmod.Wrapf(err, "unable to unmarshal claims params using old data types") + } + + // Convert and serialize using the new type + newParams := convertToNewClaimParams(oldParams) + newParamsBz, err := cdc.MarshalJSON(&newParams) + if err != nil { + return errorsmod.Wrapf(err, "unable to marshal claims params using new data types") + } + + // Store new type + store.Set([]byte(claimtypes.ParamsKey), newParamsBz) + return nil +} + +func MigrateStore(ctx sdk.Context, storeKey storetypes.StoreKey, cdc codec.Codec) error { + store := ctx.KVStore(storeKey) + return migrateClaimParams(store, cdc) +} diff --git a/x/claim/migrations/v2/types/params.pb.go b/x/claim/migrations/v2/types/params.pb.go new file mode 100644 index 00000000000..dd99dc2c06f --- /dev/null +++ b/x/claim/migrations/v2/types/params.pb.go @@ -0,0 +1,763 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: stride/claim/params.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/gogo/protobuf/proto" + _ "github.com/gogo/protobuf/types" + github_com_gogo_protobuf_types "github.com/gogo/protobuf/types" + io "io" + math "math" + math_bits "math/bits" + time "time" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf +var _ = time.Kitchen + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// Params defines the claim module's parameters. +type Params struct { + Airdrops []*Airdrop `protobuf:"bytes,1,rep,name=airdrops,proto3" json:"airdrops,omitempty"` +} + +func (m *Params) Reset() { *m = Params{} } +func (m *Params) String() string { return proto.CompactTextString(m) } +func (*Params) ProtoMessage() {} +func (*Params) Descriptor() ([]byte, []int) { + return fileDescriptor_dd7ac871d3875dc3, []int{0} +} +func (m *Params) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Params.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Params) XXX_Merge(src proto.Message) { + xxx_messageInfo_Params.Merge(m, src) +} +func (m *Params) XXX_Size() int { + return m.Size() +} +func (m *Params) XXX_DiscardUnknown() { + xxx_messageInfo_Params.DiscardUnknown(m) +} + +var xxx_messageInfo_Params proto.InternalMessageInfo + +func (m *Params) GetAirdrops() []*Airdrop { + if m != nil { + return m.Airdrops + } + return nil +} + +type Airdrop struct { + AirdropIdentifier string `protobuf:"bytes,1,opt,name=airdrop_identifier,json=airdropIdentifier,proto3" json:"airdrop_identifier,omitempty" yaml:"airdrop_identifier"` + // seconds + AirdropStartTime time.Time `protobuf:"bytes,2,opt,name=airdrop_start_time,json=airdropStartTime,proto3,stdtime" json:"airdrop_start_time" yaml:"airdrop_start_time"` + // seconds + AirdropDuration time.Duration `protobuf:"bytes,3,opt,name=airdrop_duration,json=airdropDuration,proto3,stdduration" json:"airdrop_duration,omitempty" yaml:"airdrop_duration"` + // denom of claimable asset + ClaimDenom string `protobuf:"bytes,4,opt,name=claim_denom,json=claimDenom,proto3" json:"claim_denom,omitempty"` + // airdrop distribution account + DistributorAddress string `protobuf:"bytes,5,opt,name=distributor_address,json=distributorAddress,proto3" json:"distributor_address,omitempty"` + // ustrd tokens claimed so far in the current period + ClaimedSoFar int64 `protobuf:"varint,6,opt,name=claimed_so_far,json=claimedSoFar,proto3" json:"claimed_so_far,omitempty"` +} + +func (m *Airdrop) Reset() { *m = Airdrop{} } +func (m *Airdrop) String() string { return proto.CompactTextString(m) } +func (*Airdrop) ProtoMessage() {} +func (*Airdrop) Descriptor() ([]byte, []int) { + return fileDescriptor_dd7ac871d3875dc3, []int{1} +} +func (m *Airdrop) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Airdrop) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Airdrop.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Airdrop) XXX_Merge(src proto.Message) { + xxx_messageInfo_Airdrop.Merge(m, src) +} +func (m *Airdrop) XXX_Size() int { + return m.Size() +} +func (m *Airdrop) XXX_DiscardUnknown() { + xxx_messageInfo_Airdrop.DiscardUnknown(m) +} + +var xxx_messageInfo_Airdrop proto.InternalMessageInfo + +func (m *Airdrop) GetAirdropIdentifier() string { + if m != nil { + return m.AirdropIdentifier + } + return "" +} + +func (m *Airdrop) GetAirdropStartTime() time.Time { + if m != nil { + return m.AirdropStartTime + } + return time.Time{} +} + +func (m *Airdrop) GetAirdropDuration() time.Duration { + if m != nil { + return m.AirdropDuration + } + return 0 +} + +func (m *Airdrop) GetClaimDenom() string { + if m != nil { + return m.ClaimDenom + } + return "" +} + +func (m *Airdrop) GetDistributorAddress() string { + if m != nil { + return m.DistributorAddress + } + return "" +} + +func (m *Airdrop) GetClaimedSoFar() int64 { + if m != nil { + return m.ClaimedSoFar + } + return 0 +} + +func init() { + proto.RegisterType((*Params)(nil), "stride.claim.V2Params") + proto.RegisterType((*Airdrop)(nil), "stride.claim.V2Airdrop") +} + +func init() { proto.RegisterFile("stride/claim/params.proto", fileDescriptor_dd7ac871d3875dc3) } + +var fileDescriptor_dd7ac871d3875dc3 = []byte{ + // 445 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x92, 0x3d, 0x8f, 0xd3, 0x30, + 0x18, 0xc7, 0x6b, 0x0a, 0x05, 0xdc, 0x13, 0x2f, 0x06, 0x44, 0x5a, 0x89, 0xa4, 0x8a, 0x40, 0xea, + 0x00, 0xb6, 0x38, 0x98, 0x60, 0x6a, 0x75, 0x42, 0x20, 0xdd, 0x80, 0x52, 0x26, 0x96, 0xc8, 0x39, + 0xbb, 0xc1, 0x52, 0x5d, 0x47, 0xb6, 0x8b, 0xe8, 0x27, 0x60, 0xbd, 0x91, 0x8f, 0x74, 0x62, 0xba, + 0x91, 0x29, 0xa0, 0x76, 0x63, 0xbc, 0x4f, 0x80, 0xec, 0x38, 0x77, 0xc7, 0x75, 0x4b, 0x7e, 0xff, + 0xff, 0xf3, 0xea, 0x07, 0x0e, 0x8c, 0xd5, 0x82, 0x71, 0x72, 0xb4, 0xa0, 0x42, 0x92, 0x8a, 0x6a, + 0x2a, 0x0d, 0xae, 0xb4, 0xb2, 0x0a, 0xed, 0x35, 0x12, 0xf6, 0xd2, 0xf0, 0x61, 0xa9, 0x4a, 0xe5, + 0x05, 0xe2, 0xbe, 0x1a, 0xcf, 0x30, 0x2e, 0x95, 0x2a, 0x17, 0x9c, 0xf8, 0xbf, 0x62, 0x35, 0x27, + 0x6c, 0xa5, 0xa9, 0x15, 0x6a, 0x19, 0xf4, 0xe4, 0xaa, 0x6e, 0x85, 0xe4, 0xc6, 0x52, 0x59, 0x35, + 0x86, 0xf4, 0x2d, 0xec, 0x7d, 0xf4, 0x45, 0xd1, 0x4b, 0x78, 0x8b, 0x0a, 0xcd, 0xb4, 0xaa, 0x4c, + 0x04, 0x46, 0xdd, 0x71, 0x7f, 0xff, 0x11, 0xbe, 0xdc, 0x01, 0x9e, 0x34, 0x6a, 0x76, 0x6e, 0x4b, + 0x7f, 0x76, 0xe1, 0xcd, 0x40, 0xd1, 0x21, 0x44, 0x81, 0xe7, 0x82, 0xf1, 0xa5, 0x15, 0x73, 0xc1, + 0x75, 0x04, 0x46, 0x60, 0x7c, 0x7b, 0xfa, 0xe4, 0xac, 0x4e, 0x06, 0x6b, 0x2a, 0x17, 0x6f, 0xd2, + 0x5d, 0x4f, 0x9a, 0xdd, 0x0f, 0xf0, 0xc3, 0x39, 0x43, 0xea, 0x22, 0x9b, 0xb1, 0x54, 0xdb, 0xdc, + 0xf5, 0x1d, 0x5d, 0x1b, 0x81, 0x71, 0x7f, 0x7f, 0x88, 0x9b, 0xa1, 0x70, 0x3b, 0x14, 0xfe, 0xd4, + 0x0e, 0x35, 0x7d, 0x76, 0x52, 0x27, 0x9d, 0xdd, 0x6a, 0x17, 0x39, 0xd2, 0xe3, 0xdf, 0x09, 0xc8, + 0xee, 0x05, 0x61, 0xe6, 0xb8, 0x8b, 0x46, 0xdf, 0x01, 0x6c, 0x61, 0xde, 0xee, 0x30, 0xea, 0xfa, + 0x7a, 0x83, 0x9d, 0x7a, 0x07, 0xc1, 0x30, 0x9d, 0xb8, 0x72, 0x7f, 0xeb, 0x64, 0x78, 0x35, 0xf4, + 0xb9, 0x92, 0xc2, 0x72, 0x59, 0xd9, 0xf5, 0x59, 0x9d, 0x3c, 0xfe, 0xbf, 0x99, 0xd6, 0x93, 0xfe, + 0x70, 0xad, 0xdc, 0x0d, 0xb8, 0xcd, 0x89, 0x12, 0xd8, 0xf7, 0xfb, 0xce, 0x19, 0x5f, 0x2a, 0x19, + 0x5d, 0x77, 0x1b, 0xcc, 0xa0, 0x47, 0x07, 0x8e, 0x20, 0x02, 0x1f, 0x30, 0xe1, 0x5e, 0xa6, 0x58, + 0x59, 0xa5, 0x73, 0xca, 0x98, 0xe6, 0xc6, 0x44, 0x37, 0xbc, 0x11, 0x5d, 0x92, 0x26, 0x8d, 0x82, + 0x9e, 0xc2, 0x3b, 0x3e, 0x9c, 0xb3, 0xdc, 0xa8, 0x7c, 0x4e, 0x75, 0xd4, 0x1b, 0x81, 0x71, 0x37, + 0xdb, 0x0b, 0x74, 0xa6, 0xde, 0x51, 0x3d, 0x7d, 0x7f, 0xb2, 0x89, 0xc1, 0xe9, 0x26, 0x06, 0x7f, + 0x36, 0x31, 0x38, 0xde, 0xc6, 0x9d, 0xd3, 0x6d, 0xdc, 0xf9, 0xb5, 0x8d, 0x3b, 0x9f, 0x71, 0x29, + 0xec, 0x97, 0x55, 0x81, 0x8f, 0x94, 0x24, 0x33, 0x7f, 0x11, 0x2f, 0x0e, 0x69, 0x61, 0x48, 0x38, + 0xdd, 0xaf, 0xaf, 0xc9, 0xb7, 0x70, 0xbf, 0x76, 0x5d, 0x71, 0x53, 0xf4, 0xfc, 0xa2, 0x5e, 0xfd, + 0x0b, 0x00, 0x00, 0xff, 0xff, 0x1a, 0xdb, 0x32, 0x0a, 0xdc, 0x02, 0x00, 0x00, +} + +func (m *Params) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Params) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Airdrops) > 0 { + for iNdEx := len(m.Airdrops) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Airdrops[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintParams(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *Airdrop) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Airdrop) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Airdrop) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ClaimedSoFar != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.ClaimedSoFar)) + i-- + dAtA[i] = 0x30 + } + if len(m.DistributorAddress) > 0 { + i -= len(m.DistributorAddress) + copy(dAtA[i:], m.DistributorAddress) + i = encodeVarintParams(dAtA, i, uint64(len(m.DistributorAddress))) + i-- + dAtA[i] = 0x2a + } + if len(m.ClaimDenom) > 0 { + i -= len(m.ClaimDenom) + copy(dAtA[i:], m.ClaimDenom) + i = encodeVarintParams(dAtA, i, uint64(len(m.ClaimDenom))) + i-- + dAtA[i] = 0x22 + } + n1, err1 := github_com_gogo_protobuf_types.StdDurationMarshalTo(m.AirdropDuration, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdDuration(m.AirdropDuration):]) + if err1 != nil { + return 0, err1 + } + i -= n1 + i = encodeVarintParams(dAtA, i, uint64(n1)) + i-- + dAtA[i] = 0x1a + n2, err2 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.AirdropStartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.AirdropStartTime):]) + if err2 != nil { + return 0, err2 + } + i -= n2 + i = encodeVarintParams(dAtA, i, uint64(n2)) + i-- + dAtA[i] = 0x12 + if len(m.AirdropIdentifier) > 0 { + i -= len(m.AirdropIdentifier) + copy(dAtA[i:], m.AirdropIdentifier) + i = encodeVarintParams(dAtA, i, uint64(len(m.AirdropIdentifier))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintParams(dAtA []byte, offset int, v uint64) int { + offset -= sovParams(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Params) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Airdrops) > 0 { + for _, e := range m.Airdrops { + l = e.Size() + n += 1 + l + sovParams(uint64(l)) + } + } + return n +} + +func (m *Airdrop) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.AirdropIdentifier) + if l > 0 { + n += 1 + l + sovParams(uint64(l)) + } + l = github_com_gogo_protobuf_types.SizeOfStdTime(m.AirdropStartTime) + n += 1 + l + sovParams(uint64(l)) + l = github_com_gogo_protobuf_types.SizeOfStdDuration(m.AirdropDuration) + n += 1 + l + sovParams(uint64(l)) + l = len(m.ClaimDenom) + if l > 0 { + n += 1 + l + sovParams(uint64(l)) + } + l = len(m.DistributorAddress) + if l > 0 { + n += 1 + l + sovParams(uint64(l)) + } + if m.ClaimedSoFar != 0 { + n += 1 + sovParams(uint64(m.ClaimedSoFar)) + } + return n +} + +func sovParams(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozParams(x uint64) (n int) { + return sovParams(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Params) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Airdrops", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthParams + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthParams + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Airdrops = append(m.Airdrops, &Airdrop{}) + if err := m.Airdrops[len(m.Airdrops)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipParams(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthParams + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Airdrop) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Airdrop: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Airdrop: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AirdropIdentifier", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthParams + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthParams + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AirdropIdentifier = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AirdropStartTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthParams + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthParams + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdTimeUnmarshal(&m.AirdropStartTime, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AirdropDuration", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthParams + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthParams + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_gogo_protobuf_types.StdDurationUnmarshal(&m.AirdropDuration, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClaimDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthParams + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthParams + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClaimDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DistributorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthParams + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthParams + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DistributorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ClaimedSoFar", wireType) + } + m.ClaimedSoFar = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ClaimedSoFar |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipParams(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthParams + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipParams(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthParams + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupParams + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthParams + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthParams = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowParams = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupParams = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/claim/module.go b/x/claim/module.go new file mode 100644 index 00000000000..4f66a0e0506 --- /dev/null +++ b/x/claim/module.go @@ -0,0 +1,154 @@ +package claim + +import ( + "context" + "encoding/json" + "fmt" + + "cosmossdk.io/core/appmodule" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + + "github.com/osmosis-labs/osmosis/v27/x/claim/client/cli" + "github.com/osmosis-labs/osmosis/v27/x/claim/keeper" + "github.com/osmosis-labs/osmosis/v27/x/claim/types" +) + +var ( + _ module.AppModuleBasic = AppModuleBasic{} + _ module.HasGenesisBasics = AppModuleBasic{} + + _ appmodule.AppModule = AppModule{} + _ appmodule.HasEndBlocker = AppModule{} + + _ module.HasConsensusVersion = AppModule{} + _ module.HasGenesis = AppModule{} + _ module.HasServices = AppModule{} +) + +// ---------------------------------------------------------------------------- +// AppModuleBasic +// ---------------------------------------------------------------------------- + +// AppModuleBasic implements the AppModuleBasic interface for the capability module. +type AppModuleBasic struct { + cdc codec.Codec +} + +func NewAppModuleBasic(cdc codec.Codec) AppModuleBasic { + return AppModuleBasic{cdc: cdc} +} + +// Name returns the capability module's name. +func (AppModuleBasic) Name() string { + return types.ModuleName +} + +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { +} + +// RegisterInterfaces registers the module's interface types +func (a AppModuleBasic) RegisterInterfaces(reg cdctypes.InterfaceRegistry) { + types.RegisterInterfaces(reg) +} + +// DefaultGenesis returns the capability module's default genesis state. +func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { + return cdc.MustMarshalJSON(types.DefaultGenesis()) +} + +// ValidateGenesis performs genesis state validation for the capability module. +func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { + var genState types.GenesisState + if err := cdc.UnmarshalJSON(bz, &genState); err != nil { + return fmt.Errorf("failed to unmarshal %s genesis state: %w", types.ModuleName, err) + } + return genState.Validate() +} + +// RegisterGRPCGatewayRoutes registers the gRPC Gateway routes for the module. +func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) { + types.RegisterQueryHandlerClient(context.Background(), mux, types.NewQueryClient(clientCtx)) //nolint:errcheck +} + +// GetTxCmd returns the capability module's root tx command. +func (a AppModuleBasic) GetTxCmd() *cobra.Command { + return cli.GetTxCmd() +} + +// GetQueryCmd returns the capability module's root query command. +func (AppModuleBasic) GetQueryCmd() *cobra.Command { + return cli.GetQueryCmd(types.StoreKey) +} + +// ---------------------------------------------------------------------------- +// AppModule +// ---------------------------------------------------------------------------- + +// AppModule implements the AppModule interface for the capability module. +type AppModule struct { + AppModuleBasic + + keeper keeper.Keeper +} + +func NewAppModule(cdc codec.Codec, keeper keeper.Keeper) AppModule { + return AppModule{ + AppModuleBasic: NewAppModuleBasic(cdc), + keeper: keeper, + } +} + +// Name returns the capability module's name. +func (am AppModule) Name() string { + return am.AppModuleBasic.Name() +} + +// QuerierRoute returns the capability module's query routing key. +func (AppModule) QuerierRoute() string { return types.QuerierRoute } + +// RegisterServices registers a GRPC query service to respond to the +// module-specific GRPC queries. +func (am AppModule) RegisterServices(cfg module.Configurator) { + types.RegisterQueryServer(cfg.QueryServer(), am.keeper) + types.RegisterMsgServer(cfg.MsgServer(), keeper.NewMsgServerImpl(am.keeper)) +} + +// RegisterInvariants registers the capability module's invariants. +func (am AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} + +// InitGenesis performs the capability module's genesis initialization +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) { + var genState types.GenesisState + cdc.MustUnmarshalJSON(gs, &genState) + am.keeper.InitGenesis(ctx, genState) +} + +// ExportGenesis returns the capability module's exported genesis state as raw JSON bytes. +func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { + genState := am.keeper.ExportGenesis(ctx) + return cdc.MustMarshalJSON(genState) +} + +// EndBlock executes all ABCI EndBlock logic respective to the capability module. It +// returns no validator updates. +func (am AppModule) EndBlock(context context.Context) error { + ctx := sdk.UnwrapSDKContext(context) + am.keeper.EndBlocker(ctx) + return nil +} + +// ConsensusVersion implements AppModule/ConsensusVersion. +func (AppModule) ConsensusVersion() uint64 { return 2 } + +// IsOnePerModuleType implements the depinject.OnePerModuleType interface. +func (am AppModule) IsOnePerModuleType() {} + +// IsAppModule implements the appmodule.AppModule interface. +func (am AppModule) IsAppModule() {} diff --git a/x/claim/types/claim.pb.go b/x/claim/types/claim.pb.go new file mode 100644 index 00000000000..5376ee4aeb9 --- /dev/null +++ b/x/claim/types/claim.pb.go @@ -0,0 +1,559 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: symphony/claim/claim.proto + +package types + +import ( + cosmossdk_io_math "cosmossdk.io/math" + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type Action int32 + +const ( + ACTION_FREE Action = 0 + ACTION_LIQUID_STAKE Action = 1 + ACTION_DELEGATE_STAKE Action = 2 +) + +var Action_name = map[int32]string{ + 0: "ACTION_FREE", + 1: "ACTION_LIQUID_STAKE", + 2: "ACTION_DELEGATE_STAKE", +} + +var Action_value = map[string]int32{ + "ACTION_FREE": 0, + "ACTION_LIQUID_STAKE": 1, + "ACTION_DELEGATE_STAKE": 2, +} + +func (x Action) String() string { + return proto.EnumName(Action_name, int32(x)) +} + +func (Action) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_2ddd47661ff116b7, []int{0} +} + +// A Claim Records is the metadata of claim data per address +type ClaimRecord struct { + // airdrop identifier + AirdropIdentifier string `protobuf:"bytes,1,opt,name=airdrop_identifier,json=airdropIdentifier,proto3" json:"airdrop_identifier,omitempty" yaml:"airdrop_identifier"` + // address of claim user + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty" yaml:"address"` + // weight that represent the portion from total allocation + Weight cosmossdk_io_math.LegacyDec `protobuf:"bytes,3,opt,name=weight,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"weight" yaml:"weight"` + // true if action is completed + // index of bool in array refers to action enum # + ActionCompleted []bool `protobuf:"varint,4,rep,packed,name=action_completed,json=actionCompleted,proto3" json:"action_completed,omitempty" yaml:"action_completed"` +} + +func (m *ClaimRecord) Reset() { *m = ClaimRecord{} } +func (m *ClaimRecord) String() string { return proto.CompactTextString(m) } +func (*ClaimRecord) ProtoMessage() {} +func (*ClaimRecord) Descriptor() ([]byte, []int) { + return fileDescriptor_2ddd47661ff116b7, []int{0} +} +func (m *ClaimRecord) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClaimRecord) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ClaimRecord.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ClaimRecord) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClaimRecord.Merge(m, src) +} +func (m *ClaimRecord) XXX_Size() int { + return m.Size() +} +func (m *ClaimRecord) XXX_DiscardUnknown() { + xxx_messageInfo_ClaimRecord.DiscardUnknown(m) +} + +var xxx_messageInfo_ClaimRecord proto.InternalMessageInfo + +func (m *ClaimRecord) GetAirdropIdentifier() string { + if m != nil { + return m.AirdropIdentifier + } + return "" +} + +func (m *ClaimRecord) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func (m *ClaimRecord) GetActionCompleted() []bool { + if m != nil { + return m.ActionCompleted + } + return nil +} + +func init() { + proto.RegisterEnum("symphony.claim.Action", Action_name, Action_value) + proto.RegisterType((*ClaimRecord)(nil), "symphony.claim.ClaimRecord") +} + +func init() { proto.RegisterFile("symphony/claim/claim.proto", fileDescriptor_2ddd47661ff116b7) } + +var fileDescriptor_2ddd47661ff116b7 = []byte{ + // 401 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x91, 0x4d, 0x8e, 0xd3, 0x30, + 0x18, 0x86, 0x93, 0xce, 0xa8, 0x80, 0x47, 0xcc, 0x14, 0x03, 0x9a, 0x4c, 0x47, 0x24, 0xa3, 0xac, + 0x2a, 0x04, 0x89, 0xf8, 0x91, 0x90, 0xd8, 0xa5, 0x6d, 0x8a, 0xa2, 0x46, 0x20, 0xd2, 0xb2, 0x61, + 0x13, 0xb9, 0x8e, 0x49, 0x2c, 0x92, 0x3a, 0x8a, 0xcd, 0x4f, 0x6e, 0xc0, 0x92, 0x1b, 0xb0, 0xe0, + 0x32, 0x5d, 0x76, 0x89, 0x58, 0x44, 0xa8, 0xbd, 0x41, 0x4e, 0x80, 0x9a, 0x38, 0x2c, 0x98, 0x8d, + 0x65, 0x3f, 0xcf, 0xeb, 0x57, 0xb6, 0x3e, 0x30, 0xe4, 0x65, 0x96, 0x27, 0x6c, 0x5d, 0xda, 0x38, + 0x45, 0x34, 0x6b, 0x57, 0x2b, 0x2f, 0x98, 0x60, 0xf0, 0xb4, 0x73, 0x56, 0x43, 0x87, 0xf7, 0x62, + 0x16, 0xb3, 0x46, 0xd9, 0x87, 0x5d, 0x9b, 0x32, 0x7f, 0xf4, 0xc0, 0xc9, 0xe4, 0xe0, 0x03, 0x82, + 0x59, 0x11, 0x41, 0x1f, 0x40, 0x44, 0x8b, 0xa8, 0x60, 0x79, 0x48, 0x23, 0xb2, 0x16, 0xf4, 0x03, + 0x25, 0x85, 0xa6, 0x5e, 0xa9, 0xa3, 0x5b, 0xe3, 0x07, 0x75, 0x65, 0x5c, 0x94, 0x28, 0x4b, 0x5f, + 0x9a, 0xd7, 0x33, 0x66, 0x70, 0x47, 0x42, 0xef, 0x1f, 0x83, 0x8f, 0xc0, 0x0d, 0x14, 0x45, 0x05, + 0xe1, 0x5c, 0xeb, 0x35, 0x15, 0xb0, 0xae, 0x8c, 0x53, 0x59, 0xd1, 0x0a, 0x33, 0xe8, 0x22, 0xd0, + 0x07, 0xfd, 0x2f, 0x84, 0xc6, 0x89, 0xd0, 0x8e, 0x9a, 0xf0, 0xf3, 0x4d, 0x65, 0x28, 0xbf, 0x2b, + 0xe3, 0x12, 0x33, 0x9e, 0x31, 0xce, 0xa3, 0x8f, 0x16, 0x65, 0x76, 0x86, 0x44, 0x62, 0xf9, 0x24, + 0x46, 0xb8, 0x9c, 0x12, 0x5c, 0x57, 0xc6, 0xed, 0xb6, 0xaf, 0xbd, 0x6a, 0x06, 0xb2, 0x03, 0xce, + 0xc0, 0x00, 0x61, 0x41, 0xd9, 0x3a, 0xc4, 0x2c, 0xcb, 0x53, 0x22, 0x48, 0xa4, 0x1d, 0x5f, 0x1d, + 0x8d, 0x6e, 0x8e, 0x2f, 0xeb, 0xca, 0x38, 0x97, 0x8f, 0xf8, 0x2f, 0x61, 0x06, 0x67, 0x2d, 0x9a, + 0x74, 0xe4, 0xe1, 0x02, 0xf4, 0x9d, 0x06, 0xc1, 0x33, 0x70, 0xe2, 0x4c, 0x96, 0xde, 0x9b, 0xd7, + 0xe1, 0x2c, 0x70, 0xdd, 0x81, 0x02, 0xcf, 0xc1, 0x5d, 0x09, 0x7c, 0xef, 0xed, 0x3b, 0x6f, 0x1a, + 0x2e, 0x96, 0xce, 0xdc, 0x1d, 0xa8, 0xf0, 0x02, 0xdc, 0x97, 0x62, 0xea, 0xfa, 0xee, 0x2b, 0x67, + 0xe9, 0x4a, 0xd5, 0x1b, 0x1e, 0x7f, 0xfb, 0xa9, 0x2b, 0xe3, 0xf9, 0x66, 0xa7, 0xab, 0xdb, 0x9d, + 0xae, 0xfe, 0xd9, 0xe9, 0xea, 0xf7, 0xbd, 0xae, 0x6c, 0xf7, 0xba, 0xf2, 0x6b, 0xaf, 0x2b, 0xef, + 0x9f, 0xc4, 0x54, 0x24, 0x9f, 0x56, 0x16, 0x66, 0x99, 0xdd, 0x7c, 0x9b, 0xf2, 0xc7, 0x29, 0x5a, + 0xf1, 0xee, 0x60, 0x7f, 0x7e, 0xfa, 0xc2, 0xfe, 0x2a, 0xe7, 0x2d, 0xca, 0x9c, 0xf0, 0x55, 0xbf, + 0x19, 0xe5, 0xb3, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x2a, 0x01, 0x78, 0x91, 0x0e, 0x02, 0x00, + 0x00, +} + +func (m *ClaimRecord) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ClaimRecord) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClaimRecord) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ActionCompleted) > 0 { + for iNdEx := len(m.ActionCompleted) - 1; iNdEx >= 0; iNdEx-- { + i-- + if m.ActionCompleted[iNdEx] { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + } + i = encodeVarintClaim(dAtA, i, uint64(len(m.ActionCompleted))) + i-- + dAtA[i] = 0x22 + } + { + size := m.Weight.Size() + i -= size + if _, err := m.Weight.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintClaim(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintClaim(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0x12 + } + if len(m.AirdropIdentifier) > 0 { + i -= len(m.AirdropIdentifier) + copy(dAtA[i:], m.AirdropIdentifier) + i = encodeVarintClaim(dAtA, i, uint64(len(m.AirdropIdentifier))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintClaim(dAtA []byte, offset int, v uint64) int { + offset -= sovClaim(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *ClaimRecord) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.AirdropIdentifier) + if l > 0 { + n += 1 + l + sovClaim(uint64(l)) + } + l = len(m.Address) + if l > 0 { + n += 1 + l + sovClaim(uint64(l)) + } + l = m.Weight.Size() + n += 1 + l + sovClaim(uint64(l)) + if len(m.ActionCompleted) > 0 { + n += 1 + sovClaim(uint64(len(m.ActionCompleted))) + len(m.ActionCompleted)*1 + } + return n +} + +func sovClaim(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozClaim(x uint64) (n int) { + return sovClaim(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *ClaimRecord) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowClaim + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ClaimRecord: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ClaimRecord: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AirdropIdentifier", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowClaim + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthClaim + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthClaim + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AirdropIdentifier = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowClaim + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthClaim + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthClaim + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Weight", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowClaim + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthClaim + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthClaim + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Weight.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType == 0 { + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowClaim + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ActionCompleted = append(m.ActionCompleted, bool(v != 0)) + } else if wireType == 2 { + var packedLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowClaim + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + packedLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if packedLen < 0 { + return ErrInvalidLengthClaim + } + postIndex := iNdEx + packedLen + if postIndex < 0 { + return ErrInvalidLengthClaim + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var elementCount int + elementCount = packedLen + if elementCount != 0 && len(m.ActionCompleted) == 0 { + m.ActionCompleted = make([]bool, 0, elementCount) + } + for iNdEx < postIndex { + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowClaim + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.ActionCompleted = append(m.ActionCompleted, bool(v != 0)) + } + } else { + return fmt.Errorf("proto: wrong wireType = %d for field ActionCompleted", wireType) + } + default: + iNdEx = preIndex + skippy, err := skipClaim(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthClaim + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipClaim(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowClaim + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowClaim + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowClaim + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthClaim + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupClaim + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthClaim + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthClaim = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowClaim = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupClaim = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/claim/types/codec.go b/x/claim/types/codec.go new file mode 100644 index 00000000000..ea9e9eed314 --- /dev/null +++ b/x/claim/types/codec.go @@ -0,0 +1,26 @@ +package types + +import ( + "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/codec/legacy" + cdctypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/msgservice" +) + +func RegisterCodec(cdc *codec.LegacyAmino) { + legacy.RegisterAminoMsg(cdc, &MsgSetAirdropAllocations{}, "claim/MsgSetAirdropAllocations") + legacy.RegisterAminoMsg(cdc, &MsgClaimFreeAmount{}, "claim/MsgClaimFreeAmount") + legacy.RegisterAminoMsg(cdc, &MsgCreateAirdrop{}, "claim/MsgCreateAirdrop") + legacy.RegisterAminoMsg(cdc, &MsgDeleteAirdrop{}, "claim/MsgDeleteAirdrop") +} + +func RegisterInterfaces(registry cdctypes.InterfaceRegistry) { + registry.RegisterImplementations((*sdk.Msg)(nil), + &MsgSetAirdropAllocations{}, + &MsgClaimFreeAmount{}, + &MsgCreateAirdrop{}, + &MsgDeleteAirdrop{}, + ) + msgservice.RegisterMsgServiceDesc(registry, &_Msg_serviceDesc) +} diff --git a/x/claim/types/errors.go b/x/claim/types/errors.go new file mode 100644 index 00000000000..ad52edaa3da --- /dev/null +++ b/x/claim/types/errors.go @@ -0,0 +1,33 @@ +package types + +// DONTCOVER + +import errorsmod "cosmossdk.io/errors" + +// x/claim module sentinel errors +var ( + ErrTotalWeightNotSet = errorsmod.Register(ModuleName, 1101, + "total weight not set") + ErrTotalWeightParse = errorsmod.Register(ModuleName, 1102, + "total weight parse error") + ErrFailedToGetTotalWeight = errorsmod.Register(ModuleName, 1104, + "failed to get total weight") + ErrFailedToParseDec = errorsmod.Register(ModuleName, 1105, + "failed to parse dec from str") + ErrAirdropAlreadyExists = errorsmod.Register(ModuleName, 1106, + "airdrop with same identifier already exists") + ErrDistributorAlreadyExists = errorsmod.Register(ModuleName, 1107, + "airdrop with same distributor already exists") + ErrInvalidAmount = errorsmod.Register(ModuleName, 1108, + "cannot claim negative tokens") + ErrInvalidAccount = errorsmod.Register(ModuleName, 1109, + "only BaseAccount and StridePeriodicVestingAccount can claim") + ErrAirdropNotFound = errorsmod.Register(ModuleName, 1110, + "the airdrop was not found") + ErrClaimNotFound = errorsmod.Register(ModuleName, 1111, + "the claim record was not found") + ErrModifyingClaimRecord = errorsmod.Register(ModuleName, 1112, + "failed to modify claim record") + ErrAirdropChainIdAlreadyExists = errorsmod.Register(ModuleName, 1113, + "airdrop with same chain-id already exists") +) diff --git a/x/claim/types/events.go b/x/claim/types/events.go new file mode 100644 index 00000000000..de74ec9d57c --- /dev/null +++ b/x/claim/types/events.go @@ -0,0 +1,6 @@ +package types + +// claim module event typs +const ( + EventTypeClaim = "claim" +) diff --git a/x/claim/types/expected_keepers.go b/x/claim/types/expected_keepers.go new file mode 100644 index 00000000000..4e78c2f1d28 --- /dev/null +++ b/x/claim/types/expected_keepers.go @@ -0,0 +1,47 @@ +package types + +import ( + context "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + + epochstypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" +) + +// BankKeeper defines the banking contract that must be fulfilled when +// creating a x/claim keeper. +type BankKeeper interface { + BlockedAddr(addr sdk.AccAddress) bool + SendCoins(ctx context.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error + GetBalance(ctx context.Context, addr sdk.AccAddress, denom string) sdk.Coin +} + +// AccountKeeper defines the expected account keeper used for simulations (noalias) +type AccountKeeper interface { + GetModuleAddress(name string) sdk.AccAddress + SetModuleAccount(ctx context.Context, macc sdk.ModuleAccountI) + GetAccount(context.Context, sdk.AccAddress) sdk.AccountI + SetAccount(context.Context, sdk.AccountI) + NewAccountWithAddress(context.Context, sdk.AccAddress) sdk.AccountI + // Fetch the sequence of an account at a specified address. + GetSequence(context.Context, sdk.AccAddress) (uint64, error) +} + +// DistrKeeper is the keeper of the distribution store +type DistrKeeper interface { + FundCommunityPool(ctx context.Context, amount sdk.Coins, sender sdk.AccAddress) error +} + +// StakingKeeper expected staking keeper (noalias) +type StakingKeeper interface { + // BondDenom - Bondable coin denomination + BondDenom(context.Context) (string, error) +} + +// EpochsKeeper expected epoch keeper +type EpochsKeeper interface { + SetEpochInfo(ctx sdk.Context, epoch epochstypes.EpochInfo) + DeleteEpochInfo(ctx sdk.Context, identifier string) + AllEpochInfos(ctx sdk.Context) []epochstypes.EpochInfo + GetEpochInfo(ctx sdk.Context, identifier string) epochstypes.EpochInfo +} diff --git a/x/claim/types/genesis.go b/x/claim/types/genesis.go new file mode 100644 index 00000000000..be27bb144e1 --- /dev/null +++ b/x/claim/types/genesis.go @@ -0,0 +1,40 @@ +package types + +import ( + "encoding/json" + + "github.com/cosmos/cosmos-sdk/codec" +) + +type Actions []Action + +// DefaultIndex is the default capability global index +const DefaultIndex uint64 = 1 + +// DefaultGenesis returns the default Capability genesis state +func DefaultGenesis() *GenesisState { + return &GenesisState{ + Params: Params{ + Airdrops: []*Airdrop{}, + }, + ClaimRecords: []ClaimRecord{}, + } +} + +// GetGenesisStateFromAppState returns x/claims GenesisState given raw application +// genesis state. +func GetGenesisStateFromAppState(cdc codec.JSONCodec, appState map[string]json.RawMessage) *GenesisState { + var genesisState GenesisState + + if appState[ModuleName] != nil { + cdc.MustUnmarshalJSON(appState[ModuleName], &genesisState) + } + + return &genesisState +} + +// Validate performs basic genesis state validation returning an error upon any +// failure. +func (gs GenesisState) Validate() error { + return nil +} diff --git a/x/claim/types/genesis.pb.go b/x/claim/types/genesis.pb.go new file mode 100644 index 00000000000..15962864652 --- /dev/null +++ b/x/claim/types/genesis.pb.go @@ -0,0 +1,389 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: symphony/claim/genesis.proto + +package types + +import ( + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// GenesisState defines the claim module's genesis state. +type GenesisState struct { + // params defines all the parameters of the module. + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params" yaml:"params"` + // list of claim records, one for every airdrop recipient + ClaimRecords []ClaimRecord `protobuf:"bytes,2,rep,name=claim_records,json=claimRecords,proto3" json:"claim_records" yaml:"claim_records"` +} + +func (m *GenesisState) Reset() { *m = GenesisState{} } +func (m *GenesisState) String() string { return proto.CompactTextString(m) } +func (*GenesisState) ProtoMessage() {} +func (*GenesisState) Descriptor() ([]byte, []int) { + return fileDescriptor_06de9f8af4836e29, []int{0} +} +func (m *GenesisState) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GenesisState) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GenesisState.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GenesisState) XXX_Merge(src proto.Message) { + xxx_messageInfo_GenesisState.Merge(m, src) +} +func (m *GenesisState) XXX_Size() int { + return m.Size() +} +func (m *GenesisState) XXX_DiscardUnknown() { + xxx_messageInfo_GenesisState.DiscardUnknown(m) +} + +var xxx_messageInfo_GenesisState proto.InternalMessageInfo + +func (m *GenesisState) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +func (m *GenesisState) GetClaimRecords() []ClaimRecord { + if m != nil { + return m.ClaimRecords + } + return nil +} + +func init() { + proto.RegisterType((*GenesisState)(nil), "symphony.claim.GenesisState") +} + +func init() { proto.RegisterFile("symphony/claim/genesis.proto", fileDescriptor_06de9f8af4836e29) } + +var fileDescriptor_06de9f8af4836e29 = []byte{ + // 268 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x29, 0xae, 0xcc, 0x2d, + 0xc8, 0xc8, 0xcf, 0xab, 0xd4, 0x4f, 0xce, 0x49, 0xcc, 0xcc, 0xd5, 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, + 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x83, 0xc9, 0xea, 0x81, 0x65, 0xa5, + 0x44, 0xd2, 0xf3, 0xd3, 0xf3, 0xc1, 0x52, 0xfa, 0x20, 0x16, 0x44, 0x95, 0x94, 0x14, 0x9a, 0x19, + 0x60, 0x12, 0x2a, 0x27, 0x8d, 0x26, 0x57, 0x90, 0x58, 0x94, 0x98, 0x0b, 0x35, 0x5e, 0x69, 0x2b, + 0x23, 0x17, 0x8f, 0x3b, 0xc4, 0xc2, 0xe0, 0x92, 0xc4, 0x92, 0x54, 0x21, 0x57, 0x2e, 0x36, 0x88, + 0x02, 0x09, 0x46, 0x05, 0x46, 0x0d, 0x6e, 0x23, 0x31, 0x3d, 0x54, 0x07, 0xe8, 0x05, 0x80, 0x65, + 0x9d, 0x44, 0x4f, 0xdc, 0x93, 0x67, 0xf8, 0x74, 0x4f, 0x9e, 0xb7, 0x32, 0x31, 0x37, 0xc7, 0x4a, + 0x09, 0xa2, 0x47, 0x29, 0x08, 0xaa, 0x59, 0x28, 0x8e, 0x8b, 0x17, 0xac, 0x3c, 0xbe, 0x28, 0x35, + 0x39, 0xbf, 0x28, 0xa5, 0x58, 0x82, 0x49, 0x81, 0x59, 0x83, 0xdb, 0x48, 0x1a, 0xdd, 0x34, 0x67, + 0x10, 0x19, 0x04, 0x56, 0xe3, 0x24, 0x03, 0x35, 0x52, 0x04, 0x62, 0x24, 0x8a, 0x7e, 0xa5, 0x20, + 0x9e, 0x64, 0x84, 0xd2, 0x62, 0x27, 0xef, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, + 0xf0, 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, + 0x88, 0x32, 0x4c, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0xcf, 0x2f, 0xce, + 0xcd, 0x2f, 0xce, 0x2c, 0xd6, 0xcd, 0x49, 0x4c, 0x2a, 0x86, 0x71, 0xf4, 0xcb, 0x8c, 0xcc, 0xf5, + 0x2b, 0xa0, 0x61, 0x51, 0x52, 0x59, 0x90, 0x5a, 0x9c, 0xc4, 0x06, 0x0e, 0x0b, 0x63, 0x40, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x30, 0x67, 0x95, 0x3a, 0x8a, 0x01, 0x00, 0x00, +} + +func (m *GenesisState) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GenesisState) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GenesisState) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ClaimRecords) > 0 { + for iNdEx := len(m.ClaimRecords) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ClaimRecords[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenesis(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintGenesis(dAtA []byte, offset int, v uint64) int { + offset -= sovGenesis(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *GenesisState) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovGenesis(uint64(l)) + if len(m.ClaimRecords) > 0 { + for _, e := range m.ClaimRecords { + l = e.Size() + n += 1 + l + sovGenesis(uint64(l)) + } + } + return n +} + +func sovGenesis(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozGenesis(x uint64) (n int) { + return sovGenesis(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *GenesisState) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GenesisState: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GenesisState: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClaimRecords", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenesis + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenesis + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenesis + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClaimRecords = append(m.ClaimRecords, ClaimRecord{}) + if err := m.ClaimRecords[len(m.ClaimRecords)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenesis(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenesis + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipGenesis(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenesis + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthGenesis + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupGenesis + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthGenesis + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthGenesis = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenesis = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupGenesis = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/claim/types/keys.go b/x/claim/types/keys.go new file mode 100644 index 00000000000..6479d5b13c7 --- /dev/null +++ b/x/claim/types/keys.go @@ -0,0 +1,36 @@ +package types + +import sdkmath "cosmossdk.io/math" + +const ( + // ModuleName defines the module name + ModuleName = "claim" + + // StoreKey defines the primary module store key + StoreKey = ModuleName + + // RouterKey is the message route for slashing + RouterKey = ModuleName + + // QuerierRoute defines the module's query routing key + QuerierRoute = ModuleName + + // ClaimRecordsStorePrefix defines the store prefix for the claim records + ClaimRecordsStorePrefix = "claimrecords" + + // ParamsKey defines the store key for claim module parameters + ParamsKey = "params" + + // ActionKey defines the store key to store user accomplished actions + ActionKey = "action" + + // TotalWeightKey defines the store key for total weight + TotalWeightKey = "totalweight" +) + +var ( + // Percentages for actions + PercentageForFree = sdkmath.LegacyNewDecWithPrec(20, 2) // 20% + PercentageForStake = sdkmath.LegacyNewDecWithPrec(20, 2) // 20% + PercentageForLiquidStake = sdkmath.LegacyNewDecWithPrec(60, 2) // 60% +) diff --git a/x/claim/types/msgs.go b/x/claim/types/msgs.go new file mode 100644 index 00000000000..26c06e3cfbf --- /dev/null +++ b/x/claim/types/msgs.go @@ -0,0 +1,220 @@ +package types + +import ( + errorsmod "cosmossdk.io/errors" + sdkmath "cosmossdk.io/math" + sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + + "github.com/osmosis-labs/osmosis/v27/utils" +) + +// Msg type for MsgSetAirdropAllocations +const TypeMsgSetAirdropAllocations = "set_airdrop_allocation" + +var _ sdk.Msg = &MsgSetAirdropAllocations{} + +func NewMsgSetAirdropAllocations(allocator string, airdropIdentifier string, users []string, weights []sdkmath.LegacyDec) *MsgSetAirdropAllocations { + return &MsgSetAirdropAllocations{ + Allocator: allocator, + AirdropIdentifier: airdropIdentifier, + Users: users, + Weights: weights, + } +} + +func (msg *MsgSetAirdropAllocations) Route() string { + return RouterKey +} + +func (msg *MsgSetAirdropAllocations) Type() string { + return TypeMsgSetAirdropAllocations +} + +func (msg *MsgSetAirdropAllocations) GetSigners() []sdk.AccAddress { + allocator, err := sdk.AccAddressFromBech32(msg.Allocator) + if err != nil { + panic(err) + } + return []sdk.AccAddress{allocator} +} + +func (msg *MsgSetAirdropAllocations) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(msg.Allocator) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid allocator address (%s)", err) + } + + if msg.AirdropIdentifier == "" { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "airdrop identifier not set") + } + + if len(msg.Users) == 0 { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "empty users list") + } + + if len(msg.Weights) == 0 { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "empty weights list") + } + + if len(msg.Users) != len(msg.Weights) { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "different length") + } + + for _, user := range msg.Users { + strideAddr := utils.ConvertAddressToStrideAddress(user) + if strideAddr == "" { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid bech32 address") + } + + _, err := sdk.AccAddressFromBech32(strideAddr) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid user address (%s)", err) + } + } + + for _, weight := range msg.Weights { + if weight.Equal(sdkmath.LegacyNewDec(0)) { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "invalid user weight") + } + } + + return nil +} + +// Msg type for MsgClaimFreeAmount +const TypeMsgClaimFreeAmount = "claim_free_amount" + +var _ sdk.Msg = &MsgClaimFreeAmount{} + +func NewMsgClaimFreeAmount(user string) *MsgClaimFreeAmount { + return &MsgClaimFreeAmount{ + User: user, + } +} + +func (msg *MsgClaimFreeAmount) Route() string { + return RouterKey +} + +func (msg *MsgClaimFreeAmount) Type() string { + return TypeMsgClaimFreeAmount +} + +func (msg *MsgClaimFreeAmount) GetSigners() []sdk.AccAddress { + allocator, err := sdk.AccAddressFromBech32(msg.User) + if err != nil { + panic(err) + } + return []sdk.AccAddress{allocator} +} + +func (msg *MsgClaimFreeAmount) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(msg.User) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid user address (%s)", err) + } + + return nil +} + +// Msg type for MsgCreateAirdrop +const TypeMsgCreateAirdrop = "create_airdrop" + +var _ sdk.Msg = &MsgCreateAirdrop{} + +func NewMsgCreateAirdrop(distributor, identifier, chainId, denom string, startTime, duration uint64, autopilotEnabled bool) *MsgCreateAirdrop { + return &MsgCreateAirdrop{ + Distributor: distributor, + Identifier: identifier, + ChainId: chainId, + Denom: denom, + StartTime: startTime, + Duration: duration, + AutopilotEnabled: autopilotEnabled, + } +} + +func (msg *MsgCreateAirdrop) Route() string { + return RouterKey +} + +func (msg *MsgCreateAirdrop) Type() string { + return TypeMsgCreateAirdrop +} + +func (msg *MsgCreateAirdrop) GetSigners() []sdk.AccAddress { + distributor, err := sdk.AccAddressFromBech32(msg.Distributor) + if err != nil { + panic(err) + } + return []sdk.AccAddress{distributor} +} + +func (msg *MsgCreateAirdrop) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(msg.Distributor) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid distributor address (%s)", err) + } + + if msg.Identifier == "" { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "airdrop identifier not set") + } + + if msg.ChainId == "" { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "airdrop chain-id not set") + } + + if msg.Denom == "" { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "airdrop denom not set") + } + + if msg.StartTime == 0 { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "airdrop start time not set") + } + + if msg.Duration == 0 { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "airdrop duration not set") + } + return nil +} + +// Msg type for MsgDeleteAirdrop +const TypeMsgDeleteAirdrop = "delete_airdrop" + +var _ sdk.Msg = &MsgDeleteAirdrop{} + +func NewMsgDeleteAirdrop(distributor string, identifier string) *MsgDeleteAirdrop { + return &MsgDeleteAirdrop{ + Distributor: distributor, + Identifier: identifier, + } +} + +func (msg *MsgDeleteAirdrop) Route() string { + return RouterKey +} + +func (msg *MsgDeleteAirdrop) Type() string { + return TypeMsgDeleteAirdrop +} + +func (msg *MsgDeleteAirdrop) GetSigners() []sdk.AccAddress { + distributor, err := sdk.AccAddressFromBech32(msg.Distributor) + if err != nil { + panic(err) + } + return []sdk.AccAddress{distributor} +} + +func (msg *MsgDeleteAirdrop) ValidateBasic() error { + _, err := sdk.AccAddressFromBech32(msg.Distributor) + if err != nil { + return errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid distributor address (%s)", err) + } + + if msg.Identifier == "" { + return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "airdrop identifier not set") + } + return nil +} diff --git a/x/claim/types/params.go b/x/claim/types/params.go new file mode 100644 index 00000000000..c89b0f0a2c9 --- /dev/null +++ b/x/claim/types/params.go @@ -0,0 +1,15 @@ +package types + +import ( + "time" +) + +var ( + DefaultClaimDenom = "ustrd" + DefaultEpochDuration = time.Hour * 24 * 30 // 1 month + DefaultAirdropDuration = time.Hour * 24 * 30 * 12 * 3 // 3 years + DefaultVestingDurationForDelegateStake = time.Hour * 24 * 30 * 3 // 3 months + DefaultVestingDurationForLiquidStake = time.Hour * 24 * 30 * 3 // 3 months + DefaultVestingInitialPeriod = time.Hour * 24 * 30 * 3 // 3 months + DefaultAirdropIdentifier = "stride" +) diff --git a/x/claim/types/params.pb.go b/x/claim/types/params.pb.go new file mode 100644 index 00000000000..767c51a4fe7 --- /dev/null +++ b/x/claim/types/params.pb.go @@ -0,0 +1,874 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: symphony/claim/params.proto + +package types + +import ( + cosmossdk_io_math "cosmossdk.io/math" + fmt "fmt" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + io "io" + math "math" + math_bits "math/bits" + time "time" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf +var _ = time.Kitchen + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// Params defines the claim module's parameters. +type Params struct { + Airdrops []*Airdrop `protobuf:"bytes,1,rep,name=airdrops,proto3" json:"airdrops,omitempty"` +} + +func (m *Params) Reset() { *m = Params{} } +func (m *Params) String() string { return proto.CompactTextString(m) } +func (*Params) ProtoMessage() {} +func (*Params) Descriptor() ([]byte, []int) { + return fileDescriptor_d4b3e58c454e2358, []int{0} +} +func (m *Params) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Params) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Params.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Params) XXX_Merge(src proto.Message) { + xxx_messageInfo_Params.Merge(m, src) +} +func (m *Params) XXX_Size() int { + return m.Size() +} +func (m *Params) XXX_DiscardUnknown() { + xxx_messageInfo_Params.DiscardUnknown(m) +} + +var xxx_messageInfo_Params proto.InternalMessageInfo + +func (m *Params) GetAirdrops() []*Airdrop { + if m != nil { + return m.Airdrops + } + return nil +} + +type Airdrop struct { + AirdropIdentifier string `protobuf:"bytes,1,opt,name=airdrop_identifier,json=airdropIdentifier,proto3" json:"airdrop_identifier,omitempty" yaml:"airdrop_identifier"` + ChainId string `protobuf:"bytes,7,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + // seconds + AirdropStartTime time.Time `protobuf:"bytes,2,opt,name=airdrop_start_time,json=airdropStartTime,proto3,stdtime" json:"airdrop_start_time" yaml:"airdrop_start_time"` + // seconds + AirdropDuration time.Duration `protobuf:"bytes,3,opt,name=airdrop_duration,json=airdropDuration,proto3,stdduration" json:"airdrop_duration,omitempty" yaml:"airdrop_duration"` + // denom of claimable asset + ClaimDenom string `protobuf:"bytes,4,opt,name=claim_denom,json=claimDenom,proto3" json:"claim_denom,omitempty"` + // airdrop distribution account + DistributorAddress string `protobuf:"bytes,5,opt,name=distributor_address,json=distributorAddress,proto3" json:"distributor_address,omitempty"` + // ustrd tokens claimed so far in the current period + ClaimedSoFar cosmossdk_io_math.Int `protobuf:"bytes,6,opt,name=claimed_so_far,json=claimedSoFar,proto3,customtype=cosmossdk.io/math.Int" json:"claimed_so_far"` + // indicates the airdrop should be claimed via autopilot + AutopilotEnabled bool `protobuf:"varint,8,opt,name=autopilot_enabled,json=autopilotEnabled,proto3" json:"autopilot_enabled,omitempty"` +} + +func (m *Airdrop) Reset() { *m = Airdrop{} } +func (m *Airdrop) String() string { return proto.CompactTextString(m) } +func (*Airdrop) ProtoMessage() {} +func (*Airdrop) Descriptor() ([]byte, []int) { + return fileDescriptor_d4b3e58c454e2358, []int{1} +} +func (m *Airdrop) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Airdrop) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Airdrop.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Airdrop) XXX_Merge(src proto.Message) { + xxx_messageInfo_Airdrop.Merge(m, src) +} +func (m *Airdrop) XXX_Size() int { + return m.Size() +} +func (m *Airdrop) XXX_DiscardUnknown() { + xxx_messageInfo_Airdrop.DiscardUnknown(m) +} + +var xxx_messageInfo_Airdrop proto.InternalMessageInfo + +func (m *Airdrop) GetAirdropIdentifier() string { + if m != nil { + return m.AirdropIdentifier + } + return "" +} + +func (m *Airdrop) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +func (m *Airdrop) GetAirdropStartTime() time.Time { + if m != nil { + return m.AirdropStartTime + } + return time.Time{} +} + +func (m *Airdrop) GetAirdropDuration() time.Duration { + if m != nil { + return m.AirdropDuration + } + return 0 +} + +func (m *Airdrop) GetClaimDenom() string { + if m != nil { + return m.ClaimDenom + } + return "" +} + +func (m *Airdrop) GetDistributorAddress() string { + if m != nil { + return m.DistributorAddress + } + return "" +} + +func (m *Airdrop) GetAutopilotEnabled() bool { + if m != nil { + return m.AutopilotEnabled + } + return false +} + +func init() { + proto.RegisterType((*Params)(nil), "symphony.claim.Params") + proto.RegisterType((*Airdrop)(nil), "symphony.claim.Airdrop") +} + +func init() { proto.RegisterFile("symphony/claim/params.proto", fileDescriptor_d4b3e58c454e2358) } + +var fileDescriptor_d4b3e58c454e2358 = []byte{ + // 517 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x53, 0x4d, 0x6f, 0xd3, 0x40, + 0x10, 0x8d, 0x69, 0x49, 0xc2, 0x06, 0x95, 0x76, 0x01, 0xd5, 0x09, 0xc2, 0x8e, 0x2c, 0x21, 0x45, + 0x02, 0x6c, 0x91, 0x1e, 0x90, 0x90, 0x38, 0x24, 0x14, 0xa4, 0x08, 0x0e, 0xc8, 0xe5, 0xc4, 0xc5, + 0x5a, 0x67, 0x37, 0xc9, 0x0a, 0xaf, 0xc7, 0xda, 0xdd, 0x20, 0xf2, 0x0b, 0xb8, 0xf6, 0xc8, 0xdf, + 0xe0, 0x5f, 0xf4, 0xd8, 0x23, 0xe2, 0x10, 0x50, 0x72, 0xe3, 0xd8, 0x5f, 0x80, 0xbc, 0xb6, 0xd3, + 0x8f, 0xdc, 0x3c, 0xef, 0xbd, 0x99, 0xf7, 0x66, 0x56, 0x46, 0x8f, 0xd4, 0x42, 0x64, 0x33, 0x48, + 0x17, 0xc1, 0x38, 0x21, 0x5c, 0x04, 0x19, 0x91, 0x44, 0x28, 0x3f, 0x93, 0xa0, 0x01, 0xef, 0x55, + 0xa4, 0x6f, 0xc8, 0xce, 0x83, 0x29, 0x4c, 0xc1, 0x50, 0x41, 0xfe, 0x55, 0xa8, 0x3a, 0xce, 0x14, + 0x60, 0x9a, 0xb0, 0xc0, 0x54, 0xf1, 0x7c, 0x12, 0xd0, 0xb9, 0x24, 0x9a, 0x43, 0x5a, 0xf2, 0xee, + 0x4d, 0x5e, 0x73, 0xc1, 0x94, 0x26, 0x22, 0x2b, 0x04, 0xde, 0x6b, 0x54, 0xff, 0x68, 0x6c, 0xf1, + 0x11, 0x6a, 0x12, 0x2e, 0xa9, 0x84, 0x4c, 0xd9, 0x56, 0x77, 0xa7, 0xd7, 0xea, 0x1f, 0xfa, 0xd7, + 0x33, 0xf8, 0x83, 0x82, 0x0f, 0x37, 0x42, 0xef, 0xe7, 0x2e, 0x6a, 0x94, 0x28, 0xfe, 0x80, 0x70, + 0x89, 0x47, 0x9c, 0xb2, 0x54, 0xf3, 0x09, 0x67, 0xd2, 0xb6, 0xba, 0x56, 0xef, 0xce, 0xf0, 0xf1, + 0xc5, 0xd2, 0x6d, 0x2f, 0x88, 0x48, 0x5e, 0x79, 0xdb, 0x1a, 0x2f, 0x3c, 0x28, 0xc1, 0xd1, 0x06, + 0xc3, 0x6d, 0xd4, 0x1c, 0xcf, 0x08, 0x4f, 0x23, 0x4e, 0xed, 0x46, 0x3e, 0x23, 0x6c, 0x98, 0x7a, + 0x44, 0x31, 0x5c, 0x1a, 0x29, 0x4d, 0xa4, 0x8e, 0xf2, 0xa5, 0xec, 0x5b, 0x5d, 0xab, 0xd7, 0xea, + 0x77, 0xfc, 0x62, 0x63, 0xbf, 0xda, 0xd8, 0xff, 0x54, 0x6d, 0x3c, 0x7c, 0x72, 0xb6, 0x74, 0x6b, + 0xdb, 0x41, 0x2e, 0x67, 0x78, 0xa7, 0x7f, 0x5c, 0x2b, 0xdc, 0x2f, 0x89, 0x93, 0x1c, 0xcf, 0xbb, + 0xf1, 0x77, 0x0b, 0x55, 0x60, 0x54, 0x1d, 0xd8, 0xde, 0x31, 0x7e, 0xed, 0x2d, 0xbf, 0xe3, 0x52, + 0x30, 0x1c, 0xe4, 0x76, 0xff, 0x96, 0x6e, 0xe7, 0x66, 0xeb, 0x33, 0x10, 0x5c, 0x33, 0x91, 0xe9, + 0xc5, 0xc5, 0xd2, 0x3d, 0xbc, 0x1e, 0xa6, 0xd2, 0x78, 0x3f, 0xf2, 0x28, 0xf7, 0x4a, 0xb8, 0x9a, + 0x89, 0x5d, 0xd4, 0x32, 0x4f, 0x11, 0x51, 0x96, 0x82, 0xb0, 0x77, 0xcd, 0x61, 0x90, 0x81, 0x8e, + 0x73, 0x04, 0x07, 0xe8, 0x3e, 0xe5, 0x4a, 0x4b, 0x1e, 0xcf, 0x35, 0xc8, 0x88, 0x50, 0x2a, 0x99, + 0x52, 0xf6, 0x6d, 0x23, 0xc4, 0x57, 0xa8, 0x41, 0xc1, 0xe0, 0x37, 0x68, 0xcf, 0xb4, 0x33, 0x1a, + 0x29, 0x88, 0x26, 0x44, 0xda, 0xf5, 0xe2, 0xc5, 0xf2, 0xf4, 0xbf, 0x97, 0xee, 0xc3, 0x31, 0x28, + 0x01, 0x4a, 0xd1, 0x2f, 0x3e, 0x87, 0x40, 0x10, 0x3d, 0xf3, 0x47, 0xa9, 0x0e, 0xef, 0x96, 0x4d, + 0x27, 0xf0, 0x8e, 0x48, 0xfc, 0x14, 0x1d, 0x90, 0xb9, 0x86, 0x8c, 0x27, 0xa0, 0x23, 0x96, 0x92, + 0x38, 0x61, 0xd4, 0x6e, 0x76, 0xad, 0x5e, 0x33, 0xdc, 0xdf, 0x10, 0x6f, 0x0b, 0x7c, 0xf8, 0xfe, + 0x6c, 0xe5, 0x58, 0xe7, 0x2b, 0xc7, 0xfa, 0xbb, 0x72, 0xac, 0xd3, 0xb5, 0x53, 0x3b, 0x5f, 0x3b, + 0xb5, 0x5f, 0x6b, 0xa7, 0xf6, 0xf9, 0xc5, 0x94, 0xeb, 0xd9, 0x3c, 0xf6, 0xc7, 0x20, 0x02, 0xe3, + 0xca, 0xd5, 0xf3, 0x84, 0xc4, 0xaa, 0x2a, 0x82, 0xaf, 0xfd, 0x97, 0xc1, 0xb7, 0xf2, 0x6f, 0xd1, + 0x8b, 0x8c, 0xa9, 0xb8, 0x6e, 0xee, 0x7e, 0xf4, 0x3f, 0x00, 0x00, 0xff, 0xff, 0xac, 0x5d, 0x1f, + 0x24, 0x4c, 0x03, 0x00, 0x00, +} + +func (m *Params) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Params) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Airdrops) > 0 { + for iNdEx := len(m.Airdrops) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Airdrops[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintParams(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *Airdrop) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Airdrop) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Airdrop) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.AutopilotEnabled { + i-- + if m.AutopilotEnabled { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x40 + } + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintParams(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0x3a + } + { + size := m.ClaimedSoFar.Size() + i -= size + if _, err := m.ClaimedSoFar.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintParams(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + if len(m.DistributorAddress) > 0 { + i -= len(m.DistributorAddress) + copy(dAtA[i:], m.DistributorAddress) + i = encodeVarintParams(dAtA, i, uint64(len(m.DistributorAddress))) + i-- + dAtA[i] = 0x2a + } + if len(m.ClaimDenom) > 0 { + i -= len(m.ClaimDenom) + copy(dAtA[i:], m.ClaimDenom) + i = encodeVarintParams(dAtA, i, uint64(len(m.ClaimDenom))) + i-- + dAtA[i] = 0x22 + } + n1, err1 := github_com_cosmos_gogoproto_types.StdDurationMarshalTo(m.AirdropDuration, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdDuration(m.AirdropDuration):]) + if err1 != nil { + return 0, err1 + } + i -= n1 + i = encodeVarintParams(dAtA, i, uint64(n1)) + i-- + dAtA[i] = 0x1a + n2, err2 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.AirdropStartTime, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.AirdropStartTime):]) + if err2 != nil { + return 0, err2 + } + i -= n2 + i = encodeVarintParams(dAtA, i, uint64(n2)) + i-- + dAtA[i] = 0x12 + if len(m.AirdropIdentifier) > 0 { + i -= len(m.AirdropIdentifier) + copy(dAtA[i:], m.AirdropIdentifier) + i = encodeVarintParams(dAtA, i, uint64(len(m.AirdropIdentifier))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintParams(dAtA []byte, offset int, v uint64) int { + offset -= sovParams(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Params) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Airdrops) > 0 { + for _, e := range m.Airdrops { + l = e.Size() + n += 1 + l + sovParams(uint64(l)) + } + } + return n +} + +func (m *Airdrop) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.AirdropIdentifier) + if l > 0 { + n += 1 + l + sovParams(uint64(l)) + } + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.AirdropStartTime) + n += 1 + l + sovParams(uint64(l)) + l = github_com_cosmos_gogoproto_types.SizeOfStdDuration(m.AirdropDuration) + n += 1 + l + sovParams(uint64(l)) + l = len(m.ClaimDenom) + if l > 0 { + n += 1 + l + sovParams(uint64(l)) + } + l = len(m.DistributorAddress) + if l > 0 { + n += 1 + l + sovParams(uint64(l)) + } + l = m.ClaimedSoFar.Size() + n += 1 + l + sovParams(uint64(l)) + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovParams(uint64(l)) + } + if m.AutopilotEnabled { + n += 2 + } + return n +} + +func sovParams(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozParams(x uint64) (n int) { + return sovParams(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Params) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Params: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Params: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Airdrops", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthParams + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthParams + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Airdrops = append(m.Airdrops, &Airdrop{}) + if err := m.Airdrops[len(m.Airdrops)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipParams(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthParams + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Airdrop) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Airdrop: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Airdrop: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AirdropIdentifier", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthParams + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthParams + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AirdropIdentifier = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AirdropStartTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthParams + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthParams + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.AirdropStartTime, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AirdropDuration", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthParams + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthParams + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_cosmos_gogoproto_types.StdDurationUnmarshal(&m.AirdropDuration, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClaimDenom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthParams + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthParams + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClaimDenom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DistributorAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthParams + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthParams + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DistributorAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClaimedSoFar", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthParams + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthParams + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ClaimedSoFar.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthParams + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthParams + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AutopilotEnabled", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowParams + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.AutopilotEnabled = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipParams(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthParams + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipParams(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowParams + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthParams + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupParams + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthParams + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthParams = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowParams = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupParams = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/claim/types/query.pb.go b/x/claim/types/query.pb.go new file mode 100644 index 00000000000..1962fe7f74e --- /dev/null +++ b/x/claim/types/query.pb.go @@ -0,0 +1,4079 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: symphony/claim/query.proto + +package types + +import ( + context "context" + fmt "fmt" + github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + types1 "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + types2 "github.com/osmosis-labs/osmosis/v27/x/claim/vesting/types" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" + time "time" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf +var _ = time.Kitchen + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type ClaimStatus struct { + AirdropIdentifier string `protobuf:"bytes,1,opt,name=airdrop_identifier,json=airdropIdentifier,proto3" json:"airdrop_identifier,omitempty"` + Claimed bool `protobuf:"varint,2,opt,name=claimed,proto3" json:"claimed,omitempty"` +} + +func (m *ClaimStatus) Reset() { *m = ClaimStatus{} } +func (m *ClaimStatus) String() string { return proto.CompactTextString(m) } +func (*ClaimStatus) ProtoMessage() {} +func (*ClaimStatus) Descriptor() ([]byte, []int) { + return fileDescriptor_b5dc288c1de46a4b, []int{0} +} +func (m *ClaimStatus) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClaimStatus) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ClaimStatus.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ClaimStatus) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClaimStatus.Merge(m, src) +} +func (m *ClaimStatus) XXX_Size() int { + return m.Size() +} +func (m *ClaimStatus) XXX_DiscardUnknown() { + xxx_messageInfo_ClaimStatus.DiscardUnknown(m) +} + +var xxx_messageInfo_ClaimStatus proto.InternalMessageInfo + +func (m *ClaimStatus) GetAirdropIdentifier() string { + if m != nil { + return m.AirdropIdentifier + } + return "" +} + +func (m *ClaimStatus) GetClaimed() bool { + if m != nil { + return m.Claimed + } + return false +} + +type QueryClaimStatusRequest struct { + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty" yaml:"address"` +} + +func (m *QueryClaimStatusRequest) Reset() { *m = QueryClaimStatusRequest{} } +func (m *QueryClaimStatusRequest) String() string { return proto.CompactTextString(m) } +func (*QueryClaimStatusRequest) ProtoMessage() {} +func (*QueryClaimStatusRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_b5dc288c1de46a4b, []int{1} +} +func (m *QueryClaimStatusRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryClaimStatusRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryClaimStatusRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryClaimStatusRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryClaimStatusRequest.Merge(m, src) +} +func (m *QueryClaimStatusRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryClaimStatusRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryClaimStatusRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryClaimStatusRequest proto.InternalMessageInfo + +func (m *QueryClaimStatusRequest) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +type QueryClaimStatusResponse struct { + ClaimStatus []ClaimStatus `protobuf:"bytes,1,rep,name=claim_status,json=claimStatus,proto3" json:"claim_status" yaml:"claim_status"` +} + +func (m *QueryClaimStatusResponse) Reset() { *m = QueryClaimStatusResponse{} } +func (m *QueryClaimStatusResponse) String() string { return proto.CompactTextString(m) } +func (*QueryClaimStatusResponse) ProtoMessage() {} +func (*QueryClaimStatusResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_b5dc288c1de46a4b, []int{2} +} +func (m *QueryClaimStatusResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryClaimStatusResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryClaimStatusResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryClaimStatusResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryClaimStatusResponse.Merge(m, src) +} +func (m *QueryClaimStatusResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryClaimStatusResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryClaimStatusResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryClaimStatusResponse proto.InternalMessageInfo + +func (m *QueryClaimStatusResponse) GetClaimStatus() []ClaimStatus { + if m != nil { + return m.ClaimStatus + } + return nil +} + +type ClaimMetadata struct { + AirdropIdentifier string `protobuf:"bytes,1,opt,name=airdrop_identifier,json=airdropIdentifier,proto3" json:"airdrop_identifier,omitempty"` + CurrentRound string `protobuf:"bytes,2,opt,name=current_round,json=currentRound,proto3" json:"current_round,omitempty"` + CurrentRoundStart time.Time `protobuf:"bytes,3,opt,name=current_round_start,json=currentRoundStart,proto3,stdtime" json:"current_round_start" yaml:"current_round_start"` + CurrentRoundEnd time.Time `protobuf:"bytes,4,opt,name=current_round_end,json=currentRoundEnd,proto3,stdtime" json:"current_round_end" yaml:"current_round_end"` +} + +func (m *ClaimMetadata) Reset() { *m = ClaimMetadata{} } +func (m *ClaimMetadata) String() string { return proto.CompactTextString(m) } +func (*ClaimMetadata) ProtoMessage() {} +func (*ClaimMetadata) Descriptor() ([]byte, []int) { + return fileDescriptor_b5dc288c1de46a4b, []int{3} +} +func (m *ClaimMetadata) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ClaimMetadata) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ClaimMetadata.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ClaimMetadata) XXX_Merge(src proto.Message) { + xxx_messageInfo_ClaimMetadata.Merge(m, src) +} +func (m *ClaimMetadata) XXX_Size() int { + return m.Size() +} +func (m *ClaimMetadata) XXX_DiscardUnknown() { + xxx_messageInfo_ClaimMetadata.DiscardUnknown(m) +} + +var xxx_messageInfo_ClaimMetadata proto.InternalMessageInfo + +func (m *ClaimMetadata) GetAirdropIdentifier() string { + if m != nil { + return m.AirdropIdentifier + } + return "" +} + +func (m *ClaimMetadata) GetCurrentRound() string { + if m != nil { + return m.CurrentRound + } + return "" +} + +func (m *ClaimMetadata) GetCurrentRoundStart() time.Time { + if m != nil { + return m.CurrentRoundStart + } + return time.Time{} +} + +func (m *ClaimMetadata) GetCurrentRoundEnd() time.Time { + if m != nil { + return m.CurrentRoundEnd + } + return time.Time{} +} + +type QueryClaimMetadataRequest struct { +} + +func (m *QueryClaimMetadataRequest) Reset() { *m = QueryClaimMetadataRequest{} } +func (m *QueryClaimMetadataRequest) String() string { return proto.CompactTextString(m) } +func (*QueryClaimMetadataRequest) ProtoMessage() {} +func (*QueryClaimMetadataRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_b5dc288c1de46a4b, []int{4} +} +func (m *QueryClaimMetadataRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryClaimMetadataRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryClaimMetadataRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryClaimMetadataRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryClaimMetadataRequest.Merge(m, src) +} +func (m *QueryClaimMetadataRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryClaimMetadataRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryClaimMetadataRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryClaimMetadataRequest proto.InternalMessageInfo + +type QueryClaimMetadataResponse struct { + ClaimMetadata []ClaimMetadata `protobuf:"bytes,1,rep,name=claim_metadata,json=claimMetadata,proto3" json:"claim_metadata" yaml:"claim_metadata"` +} + +func (m *QueryClaimMetadataResponse) Reset() { *m = QueryClaimMetadataResponse{} } +func (m *QueryClaimMetadataResponse) String() string { return proto.CompactTextString(m) } +func (*QueryClaimMetadataResponse) ProtoMessage() {} +func (*QueryClaimMetadataResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_b5dc288c1de46a4b, []int{5} +} +func (m *QueryClaimMetadataResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryClaimMetadataResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryClaimMetadataResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryClaimMetadataResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryClaimMetadataResponse.Merge(m, src) +} +func (m *QueryClaimMetadataResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryClaimMetadataResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryClaimMetadataResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryClaimMetadataResponse proto.InternalMessageInfo + +func (m *QueryClaimMetadataResponse) GetClaimMetadata() []ClaimMetadata { + if m != nil { + return m.ClaimMetadata + } + return nil +} + +// QueryParamsRequest is the request type for the Query/Params RPC method. +type QueryDistributorAccountBalanceRequest struct { + AirdropIdentifier string `protobuf:"bytes,1,opt,name=airdrop_identifier,json=airdropIdentifier,proto3" json:"airdrop_identifier,omitempty" yaml:"airdrop_identifier"` +} + +func (m *QueryDistributorAccountBalanceRequest) Reset() { *m = QueryDistributorAccountBalanceRequest{} } +func (m *QueryDistributorAccountBalanceRequest) String() string { return proto.CompactTextString(m) } +func (*QueryDistributorAccountBalanceRequest) ProtoMessage() {} +func (*QueryDistributorAccountBalanceRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_b5dc288c1de46a4b, []int{6} +} +func (m *QueryDistributorAccountBalanceRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryDistributorAccountBalanceRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryDistributorAccountBalanceRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryDistributorAccountBalanceRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryDistributorAccountBalanceRequest.Merge(m, src) +} +func (m *QueryDistributorAccountBalanceRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryDistributorAccountBalanceRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryDistributorAccountBalanceRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryDistributorAccountBalanceRequest proto.InternalMessageInfo + +func (m *QueryDistributorAccountBalanceRequest) GetAirdropIdentifier() string { + if m != nil { + return m.AirdropIdentifier + } + return "" +} + +// QueryParamsResponse is the response type for the Query/Params RPC method. +type QueryDistributorAccountBalanceResponse struct { + // params defines the parameters of the module. + DistributorAccountBalance github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=distributor_account_balance,json=distributorAccountBalance,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"distributor_account_balance" yaml:"distributor_account_balance"` +} + +func (m *QueryDistributorAccountBalanceResponse) Reset() { + *m = QueryDistributorAccountBalanceResponse{} +} +func (m *QueryDistributorAccountBalanceResponse) String() string { return proto.CompactTextString(m) } +func (*QueryDistributorAccountBalanceResponse) ProtoMessage() {} +func (*QueryDistributorAccountBalanceResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_b5dc288c1de46a4b, []int{7} +} +func (m *QueryDistributorAccountBalanceResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryDistributorAccountBalanceResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryDistributorAccountBalanceResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryDistributorAccountBalanceResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryDistributorAccountBalanceResponse.Merge(m, src) +} +func (m *QueryDistributorAccountBalanceResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryDistributorAccountBalanceResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryDistributorAccountBalanceResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryDistributorAccountBalanceResponse proto.InternalMessageInfo + +func (m *QueryDistributorAccountBalanceResponse) GetDistributorAccountBalance() github_com_cosmos_cosmos_sdk_types.Coins { + if m != nil { + return m.DistributorAccountBalance + } + return nil +} + +// QueryParamsRequest is the request type for the Query/Params RPC method. +type QueryParamsRequest struct { +} + +func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } +func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryParamsRequest) ProtoMessage() {} +func (*QueryParamsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_b5dc288c1de46a4b, []int{8} +} +func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryParamsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsRequest.Merge(m, src) +} +func (m *QueryParamsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsRequest proto.InternalMessageInfo + +// QueryParamsResponse is the response type for the Query/Params RPC method. +type QueryParamsResponse struct { + // params defines the parameters of the module. + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` +} + +func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } +func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryParamsResponse) ProtoMessage() {} +func (*QueryParamsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_b5dc288c1de46a4b, []int{9} +} +func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryParamsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryParamsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryParamsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryParamsResponse.Merge(m, src) +} +func (m *QueryParamsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryParamsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryParamsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryParamsResponse proto.InternalMessageInfo + +func (m *QueryParamsResponse) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +type QueryClaimRecordRequest struct { + AirdropIdentifier string `protobuf:"bytes,1,opt,name=airdrop_identifier,json=airdropIdentifier,proto3" json:"airdrop_identifier,omitempty" yaml:"airdrop_identifier"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty" yaml:"address"` +} + +func (m *QueryClaimRecordRequest) Reset() { *m = QueryClaimRecordRequest{} } +func (m *QueryClaimRecordRequest) String() string { return proto.CompactTextString(m) } +func (*QueryClaimRecordRequest) ProtoMessage() {} +func (*QueryClaimRecordRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_b5dc288c1de46a4b, []int{10} +} +func (m *QueryClaimRecordRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryClaimRecordRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryClaimRecordRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryClaimRecordRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryClaimRecordRequest.Merge(m, src) +} +func (m *QueryClaimRecordRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryClaimRecordRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryClaimRecordRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryClaimRecordRequest proto.InternalMessageInfo + +func (m *QueryClaimRecordRequest) GetAirdropIdentifier() string { + if m != nil { + return m.AirdropIdentifier + } + return "" +} + +func (m *QueryClaimRecordRequest) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +type QueryClaimRecordResponse struct { + ClaimRecord ClaimRecord `protobuf:"bytes,1,opt,name=claim_record,json=claimRecord,proto3" json:"claim_record" yaml:"claim_record"` +} + +func (m *QueryClaimRecordResponse) Reset() { *m = QueryClaimRecordResponse{} } +func (m *QueryClaimRecordResponse) String() string { return proto.CompactTextString(m) } +func (*QueryClaimRecordResponse) ProtoMessage() {} +func (*QueryClaimRecordResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_b5dc288c1de46a4b, []int{11} +} +func (m *QueryClaimRecordResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryClaimRecordResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryClaimRecordResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryClaimRecordResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryClaimRecordResponse.Merge(m, src) +} +func (m *QueryClaimRecordResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryClaimRecordResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryClaimRecordResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryClaimRecordResponse proto.InternalMessageInfo + +func (m *QueryClaimRecordResponse) GetClaimRecord() ClaimRecord { + if m != nil { + return m.ClaimRecord + } + return ClaimRecord{} +} + +type QueryClaimableForActionRequest struct { + AirdropIdentifier string `protobuf:"bytes,1,opt,name=airdrop_identifier,json=airdropIdentifier,proto3" json:"airdrop_identifier,omitempty" yaml:"airdrop_identifier"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty" yaml:"address"` + Action Action `protobuf:"varint,3,opt,name=action,proto3,enum=symphony.claim.Action" json:"action,omitempty" yaml:"action"` +} + +func (m *QueryClaimableForActionRequest) Reset() { *m = QueryClaimableForActionRequest{} } +func (m *QueryClaimableForActionRequest) String() string { return proto.CompactTextString(m) } +func (*QueryClaimableForActionRequest) ProtoMessage() {} +func (*QueryClaimableForActionRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_b5dc288c1de46a4b, []int{12} +} +func (m *QueryClaimableForActionRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryClaimableForActionRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryClaimableForActionRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryClaimableForActionRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryClaimableForActionRequest.Merge(m, src) +} +func (m *QueryClaimableForActionRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryClaimableForActionRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryClaimableForActionRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryClaimableForActionRequest proto.InternalMessageInfo + +func (m *QueryClaimableForActionRequest) GetAirdropIdentifier() string { + if m != nil { + return m.AirdropIdentifier + } + return "" +} + +func (m *QueryClaimableForActionRequest) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func (m *QueryClaimableForActionRequest) GetAction() Action { + if m != nil { + return m.Action + } + return ACTION_FREE +} + +type QueryClaimableForActionResponse struct { + Coins github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=coins,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"coins" yaml:"coins"` +} + +func (m *QueryClaimableForActionResponse) Reset() { *m = QueryClaimableForActionResponse{} } +func (m *QueryClaimableForActionResponse) String() string { return proto.CompactTextString(m) } +func (*QueryClaimableForActionResponse) ProtoMessage() {} +func (*QueryClaimableForActionResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_b5dc288c1de46a4b, []int{13} +} +func (m *QueryClaimableForActionResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryClaimableForActionResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryClaimableForActionResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryClaimableForActionResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryClaimableForActionResponse.Merge(m, src) +} +func (m *QueryClaimableForActionResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryClaimableForActionResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryClaimableForActionResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryClaimableForActionResponse proto.InternalMessageInfo + +func (m *QueryClaimableForActionResponse) GetCoins() github_com_cosmos_cosmos_sdk_types.Coins { + if m != nil { + return m.Coins + } + return nil +} + +type QueryTotalClaimableRequest struct { + AirdropIdentifier string `protobuf:"bytes,1,opt,name=airdrop_identifier,json=airdropIdentifier,proto3" json:"airdrop_identifier,omitempty" yaml:"airdrop_identifier"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty" yaml:"address"` + IncludeClaimed bool `protobuf:"varint,3,opt,name=include_claimed,json=includeClaimed,proto3" json:"include_claimed,omitempty"` +} + +func (m *QueryTotalClaimableRequest) Reset() { *m = QueryTotalClaimableRequest{} } +func (m *QueryTotalClaimableRequest) String() string { return proto.CompactTextString(m) } +func (*QueryTotalClaimableRequest) ProtoMessage() {} +func (*QueryTotalClaimableRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_b5dc288c1de46a4b, []int{14} +} +func (m *QueryTotalClaimableRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTotalClaimableRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTotalClaimableRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryTotalClaimableRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTotalClaimableRequest.Merge(m, src) +} +func (m *QueryTotalClaimableRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryTotalClaimableRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTotalClaimableRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryTotalClaimableRequest proto.InternalMessageInfo + +func (m *QueryTotalClaimableRequest) GetAirdropIdentifier() string { + if m != nil { + return m.AirdropIdentifier + } + return "" +} + +func (m *QueryTotalClaimableRequest) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func (m *QueryTotalClaimableRequest) GetIncludeClaimed() bool { + if m != nil { + return m.IncludeClaimed + } + return false +} + +type QueryTotalClaimableResponse struct { + Coins github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,1,rep,name=coins,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"coins" yaml:"coins"` +} + +func (m *QueryTotalClaimableResponse) Reset() { *m = QueryTotalClaimableResponse{} } +func (m *QueryTotalClaimableResponse) String() string { return proto.CompactTextString(m) } +func (*QueryTotalClaimableResponse) ProtoMessage() {} +func (*QueryTotalClaimableResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_b5dc288c1de46a4b, []int{15} +} +func (m *QueryTotalClaimableResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryTotalClaimableResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryTotalClaimableResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryTotalClaimableResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryTotalClaimableResponse.Merge(m, src) +} +func (m *QueryTotalClaimableResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryTotalClaimableResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryTotalClaimableResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryTotalClaimableResponse proto.InternalMessageInfo + +func (m *QueryTotalClaimableResponse) GetCoins() github_com_cosmos_cosmos_sdk_types.Coins { + if m != nil { + return m.Coins + } + return nil +} + +type QueryUserVestingsRequest struct { + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty" yaml:"address"` +} + +func (m *QueryUserVestingsRequest) Reset() { *m = QueryUserVestingsRequest{} } +func (m *QueryUserVestingsRequest) String() string { return proto.CompactTextString(m) } +func (*QueryUserVestingsRequest) ProtoMessage() {} +func (*QueryUserVestingsRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_b5dc288c1de46a4b, []int{16} +} +func (m *QueryUserVestingsRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryUserVestingsRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryUserVestingsRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryUserVestingsRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryUserVestingsRequest.Merge(m, src) +} +func (m *QueryUserVestingsRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryUserVestingsRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryUserVestingsRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryUserVestingsRequest proto.InternalMessageInfo + +func (m *QueryUserVestingsRequest) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +type QueryUserVestingsResponse struct { + SpendableCoins github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,3,rep,name=spendable_coins,json=spendableCoins,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"spendable_coins" yaml:"spendable_coins"` + Periods []types2.Period `protobuf:"bytes,1,rep,name=periods,proto3" json:"periods" yaml:"periods"` +} + +func (m *QueryUserVestingsResponse) Reset() { *m = QueryUserVestingsResponse{} } +func (m *QueryUserVestingsResponse) String() string { return proto.CompactTextString(m) } +func (*QueryUserVestingsResponse) ProtoMessage() {} +func (*QueryUserVestingsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_b5dc288c1de46a4b, []int{17} +} +func (m *QueryUserVestingsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryUserVestingsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryUserVestingsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryUserVestingsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryUserVestingsResponse.Merge(m, src) +} +func (m *QueryUserVestingsResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryUserVestingsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryUserVestingsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryUserVestingsResponse proto.InternalMessageInfo + +func (m *QueryUserVestingsResponse) GetSpendableCoins() github_com_cosmos_cosmos_sdk_types.Coins { + if m != nil { + return m.SpendableCoins + } + return nil +} + +func (m *QueryUserVestingsResponse) GetPeriods() []types2.Period { + if m != nil { + return m.Periods + } + return nil +} + +func init() { + proto.RegisterType((*ClaimStatus)(nil), "symphony.claim.ClaimStatus") + proto.RegisterType((*QueryClaimStatusRequest)(nil), "symphony.claim.QueryClaimStatusRequest") + proto.RegisterType((*QueryClaimStatusResponse)(nil), "symphony.claim.QueryClaimStatusResponse") + proto.RegisterType((*ClaimMetadata)(nil), "symphony.claim.ClaimMetadata") + proto.RegisterType((*QueryClaimMetadataRequest)(nil), "symphony.claim.QueryClaimMetadataRequest") + proto.RegisterType((*QueryClaimMetadataResponse)(nil), "symphony.claim.QueryClaimMetadataResponse") + proto.RegisterType((*QueryDistributorAccountBalanceRequest)(nil), "symphony.claim.QueryDistributorAccountBalanceRequest") + proto.RegisterType((*QueryDistributorAccountBalanceResponse)(nil), "symphony.claim.QueryDistributorAccountBalanceResponse") + proto.RegisterType((*QueryParamsRequest)(nil), "symphony.claim.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "symphony.claim.QueryParamsResponse") + proto.RegisterType((*QueryClaimRecordRequest)(nil), "symphony.claim.QueryClaimRecordRequest") + proto.RegisterType((*QueryClaimRecordResponse)(nil), "symphony.claim.QueryClaimRecordResponse") + proto.RegisterType((*QueryClaimableForActionRequest)(nil), "symphony.claim.QueryClaimableForActionRequest") + proto.RegisterType((*QueryClaimableForActionResponse)(nil), "symphony.claim.QueryClaimableForActionResponse") + proto.RegisterType((*QueryTotalClaimableRequest)(nil), "symphony.claim.QueryTotalClaimableRequest") + proto.RegisterType((*QueryTotalClaimableResponse)(nil), "symphony.claim.QueryTotalClaimableResponse") + proto.RegisterType((*QueryUserVestingsRequest)(nil), "symphony.claim.QueryUserVestingsRequest") + proto.RegisterType((*QueryUserVestingsResponse)(nil), "symphony.claim.QueryUserVestingsResponse") +} + +func init() { proto.RegisterFile("symphony/claim/query.proto", fileDescriptor_b5dc288c1de46a4b) } + +var fileDescriptor_b5dc288c1de46a4b = []byte{ + // 1243 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x57, 0x4f, 0x6f, 0x1b, 0x45, + 0x14, 0xcf, 0x24, 0x6d, 0x4a, 0x27, 0x89, 0xab, 0x4c, 0x4b, 0x70, 0xd6, 0xc4, 0x8e, 0xa6, 0x90, + 0xba, 0x85, 0xec, 0x92, 0x14, 0x5a, 0xc1, 0x05, 0xe2, 0x00, 0x85, 0x16, 0xa4, 0xb2, 0x2d, 0x39, + 0xc0, 0xc1, 0x1a, 0xef, 0x4e, 0xdc, 0x15, 0xf6, 0x8e, 0xb3, 0xb3, 0x1b, 0x88, 0xaa, 0x1e, 0xe0, + 0x03, 0xa0, 0x48, 0x50, 0xc4, 0x81, 0x23, 0x27, 0x6e, 0x7c, 0x01, 0x24, 0x90, 0x90, 0x7a, 0xac, + 0xc4, 0x85, 0x03, 0x4a, 0x50, 0xc2, 0x27, 0xc8, 0x89, 0x23, 0xda, 0x99, 0xb7, 0xf6, 0xda, 0x5e, + 0x3b, 0x0e, 0x12, 0xa2, 0x97, 0xc4, 0x3b, 0xef, 0xdf, 0xef, 0xbd, 0x37, 0xf3, 0x7b, 0x33, 0xd8, + 0x90, 0x3b, 0xcd, 0xd6, 0x3d, 0xe1, 0xef, 0x58, 0x4e, 0x83, 0x79, 0x4d, 0x6b, 0x2b, 0xe2, 0xc1, + 0x8e, 0xd9, 0x0a, 0x44, 0x28, 0x48, 0x2e, 0x91, 0x99, 0x4a, 0x66, 0x14, 0x1d, 0x21, 0x9b, 0x42, + 0x5a, 0x35, 0x26, 0xb9, 0xb5, 0xbd, 0x52, 0xe3, 0x21, 0x5b, 0xb1, 0x1c, 0xe1, 0xf9, 0x5a, 0xdf, + 0xb8, 0x50, 0x17, 0x75, 0xa1, 0x7e, 0x5a, 0xf1, 0x2f, 0x58, 0x7d, 0xb6, 0x2e, 0x44, 0xbd, 0xc1, + 0x2d, 0xd6, 0xf2, 0x2c, 0xe6, 0xfb, 0x22, 0x64, 0xa1, 0x27, 0x7c, 0x09, 0xd2, 0x12, 0x48, 0xd5, + 0x57, 0x2d, 0xda, 0xb4, 0x42, 0xaf, 0xc9, 0x65, 0xc8, 0x9a, 0x2d, 0x50, 0xe8, 0x05, 0xa8, 0xfe, + 0x82, 0xac, 0xd0, 0x23, 0x6b, 0xb1, 0x80, 0x35, 0x13, 0xcf, 0xc5, 0xb6, 0x70, 0x9b, 0xcb, 0xd0, + 0xf3, 0xeb, 0xc9, 0x7f, 0x2d, 0xa7, 0x1b, 0x78, 0x6a, 0x3d, 0xb6, 0xba, 0x13, 0xb2, 0x30, 0x92, + 0x64, 0x19, 0x13, 0xe6, 0x05, 0x6e, 0x20, 0x5a, 0x55, 0xcf, 0xe5, 0x7e, 0xe8, 0x6d, 0x7a, 0x3c, + 0xc8, 0xa3, 0x45, 0x54, 0x3e, 0x6b, 0xcf, 0x82, 0xe4, 0xdd, 0xb6, 0x80, 0xe4, 0xf1, 0x19, 0x15, + 0x93, 0xbb, 0xf9, 0xf1, 0x45, 0x54, 0x7e, 0xca, 0x4e, 0x3e, 0xe9, 0x0d, 0xfc, 0xcc, 0x07, 0x71, + 0x11, 0x53, 0xce, 0x6d, 0xbe, 0x15, 0x71, 0x19, 0x92, 0x17, 0xf1, 0x19, 0xe6, 0xba, 0x01, 0x97, + 0x52, 0x3b, 0xae, 0x90, 0xa3, 0xbd, 0x52, 0x6e, 0x87, 0x35, 0x1b, 0xaf, 0x51, 0x10, 0x50, 0x3b, + 0x51, 0xa1, 0x9f, 0xe2, 0x7c, 0xbf, 0x23, 0xd9, 0x12, 0xbe, 0xe4, 0xe4, 0x63, 0x3c, 0xad, 0xe2, + 0x55, 0xa5, 0x5a, 0xcf, 0xa3, 0xc5, 0x89, 0xf2, 0xd4, 0x6a, 0xc1, 0xec, 0xee, 0x98, 0x99, 0x32, + 0xad, 0x14, 0x1e, 0xed, 0x95, 0xc6, 0x8e, 0xf6, 0x4a, 0xe7, 0x75, 0xbc, 0xb4, 0x39, 0xb5, 0xa7, + 0x9c, 0x8e, 0x26, 0xfd, 0x75, 0x1c, 0xcf, 0x28, 0xcb, 0xf7, 0x79, 0xc8, 0x5c, 0x16, 0xb2, 0x93, + 0x16, 0xe7, 0x22, 0x9e, 0x71, 0xa2, 0x20, 0xe0, 0x7e, 0x58, 0x0d, 0x44, 0xe4, 0xeb, 0x12, 0x9d, + 0xb5, 0xa7, 0x61, 0xd1, 0x8e, 0xd7, 0x48, 0x80, 0xcf, 0x77, 0x29, 0xc5, 0x58, 0x82, 0x30, 0x3f, + 0xb1, 0x88, 0xca, 0x53, 0xab, 0x86, 0xa9, 0xf7, 0x85, 0x99, 0xec, 0x0b, 0xf3, 0x6e, 0xb2, 0x2f, + 0x2a, 0x4b, 0x90, 0x88, 0x01, 0x89, 0xf4, 0x3b, 0xa1, 0xbb, 0xfb, 0x25, 0x64, 0xcf, 0xa6, 0xc3, + 0xdd, 0x89, 0xd7, 0x49, 0x03, 0xcf, 0x76, 0xab, 0x73, 0xdf, 0xcd, 0x9f, 0x3a, 0x36, 0xe2, 0x73, + 0x10, 0x31, 0x9f, 0x15, 0x91, 0xfb, 0xae, 0x8e, 0x77, 0x2e, 0x1d, 0xef, 0x2d, 0xdf, 0xa5, 0x05, + 0x3c, 0xdf, 0x69, 0x60, 0x52, 0x4b, 0xd8, 0x0b, 0xf4, 0x73, 0x84, 0x8d, 0x2c, 0x29, 0x34, 0xd8, + 0xc1, 0x39, 0xdd, 0xa1, 0x26, 0x48, 0xa0, 0xc5, 0x0b, 0x99, 0x2d, 0x4e, 0xcc, 0x2b, 0x0b, 0x80, + 0xf4, 0xe9, 0x74, 0x93, 0x13, 0x17, 0xd4, 0x9e, 0x71, 0xd2, 0xda, 0x34, 0xc2, 0xcf, 0x2b, 0x08, + 0x6f, 0x7a, 0x32, 0x0c, 0xbc, 0x5a, 0x14, 0x8a, 0x60, 0xcd, 0x71, 0x44, 0xe4, 0x87, 0x15, 0xd6, + 0x60, 0xbe, 0xc3, 0x93, 0x8d, 0xfb, 0xde, 0xe0, 0xfe, 0x57, 0x16, 0x8e, 0xf6, 0x4a, 0xf3, 0xb0, + 0x87, 0xfb, 0x74, 0x68, 0xc6, 0xf6, 0xa0, 0x7f, 0x20, 0xbc, 0x74, 0x5c, 0x5c, 0x28, 0xc3, 0x8f, + 0x08, 0x17, 0xdc, 0x8e, 0x56, 0x95, 0x69, 0xb5, 0x6a, 0x4d, 0xeb, 0x41, 0x51, 0xe6, 0x4d, 0xcd, + 0x4c, 0x66, 0xcc, 0x4c, 0x26, 0x30, 0x93, 0xb9, 0x2e, 0x3c, 0xbf, 0xb2, 0x01, 0x05, 0xa1, 0x1a, + 0xe1, 0x10, 0x5f, 0xf4, 0x87, 0xfd, 0x52, 0xb9, 0xee, 0x85, 0xf7, 0xa2, 0x9a, 0xe9, 0x88, 0xa6, + 0x05, 0x64, 0xa7, 0xff, 0x2d, 0x4b, 0xf7, 0x13, 0x2b, 0xdc, 0x69, 0x71, 0xa9, 0xdc, 0x4a, 0x7b, + 0xde, 0x1d, 0x84, 0x9d, 0x5e, 0xc0, 0x44, 0x65, 0x77, 0x5b, 0xb1, 0x51, 0xd2, 0xef, 0x5b, 0xf8, + 0x7c, 0xd7, 0x2a, 0x24, 0xf8, 0x32, 0x9e, 0xd4, 0xac, 0xa5, 0xaa, 0x39, 0xb5, 0x3a, 0xd7, 0xdb, + 0x5f, 0xad, 0x5f, 0x39, 0x15, 0xe7, 0x61, 0x83, 0x2e, 0x7d, 0x88, 0xd2, 0x24, 0x63, 0x73, 0x47, + 0x04, 0xee, 0x7f, 0xd2, 0xab, 0x34, 0x65, 0x8d, 0x9f, 0x90, 0xb2, 0x12, 0x58, 0xbd, 0x94, 0x15, + 0xa8, 0x75, 0xc8, 0x37, 0x9b, 0xb2, 0xb4, 0x69, 0x36, 0x65, 0x69, 0xf3, 0x84, 0xb2, 0xb4, 0x26, + 0xdd, 0x47, 0xb8, 0xd8, 0x89, 0xcc, 0x6a, 0x0d, 0xfe, 0x76, 0xdc, 0x97, 0x78, 0xd2, 0x3c, 0x01, + 0x75, 0x21, 0x6b, 0x78, 0x92, 0x29, 0x30, 0x8a, 0xde, 0x72, 0xfd, 0x5d, 0xd6, 0x50, 0x2b, 0xb3, + 0x47, 0x7b, 0xa5, 0x19, 0x70, 0xa2, 0x56, 0xa8, 0x0d, 0x86, 0xf4, 0x6b, 0x84, 0x4b, 0x03, 0x33, + 0x84, 0x12, 0x6f, 0xe1, 0xd3, 0xf1, 0x38, 0x96, 0xc7, 0x1f, 0x8b, 0x37, 0xa0, 0xb2, 0xd3, 0x50, + 0xd9, 0xd8, 0xea, 0x64, 0x07, 0x40, 0x47, 0xa2, 0x3f, 0x27, 0x34, 0x76, 0x57, 0x84, 0xac, 0xd1, + 0xc6, 0xf6, 0x24, 0x14, 0xfd, 0x12, 0x3e, 0xe7, 0xf9, 0x4e, 0x23, 0x72, 0x79, 0x35, 0x19, 0xd5, + 0x13, 0x6a, 0x54, 0xe7, 0x60, 0x79, 0x1d, 0x26, 0xf6, 0x2e, 0xc2, 0x85, 0xcc, 0x1c, 0xfe, 0xbf, + 0xb2, 0xbe, 0x03, 0x07, 0xe9, 0x43, 0xc9, 0x83, 0x0d, 0x7d, 0x6d, 0xf9, 0x97, 0xb7, 0x88, 0xbf, + 0x11, 0x4c, 0xa1, 0x6e, 0x57, 0x90, 0xda, 0x97, 0x08, 0x9f, 0x93, 0x2d, 0xee, 0xbb, 0x71, 0xc2, + 0x55, 0x9d, 0xe5, 0xc4, 0x71, 0x59, 0xde, 0x84, 0x2c, 0xe7, 0x74, 0xcc, 0x1e, 0xfb, 0x93, 0xe5, + 0x9b, 0x6b, 0x5b, 0xab, 0x6f, 0x72, 0x13, 0x9f, 0x69, 0xf1, 0xc0, 0x13, 0x6e, 0x52, 0xed, 0x7c, + 0xe7, 0xa8, 0x24, 0xf7, 0xb7, 0xdb, 0x4a, 0xa1, 0x32, 0x07, 0x30, 0x20, 0x75, 0x30, 0xa3, 0x76, + 0xe2, 0x60, 0xf5, 0x21, 0xc6, 0xa7, 0x55, 0xea, 0xe4, 0x17, 0x84, 0xe7, 0x07, 0x0e, 0x1b, 0xf2, + 0x4a, 0xef, 0x69, 0x1c, 0x69, 0x28, 0x1a, 0xd7, 0x4e, 0x6a, 0xa6, 0x6b, 0x4e, 0xaf, 0x7d, 0xf1, + 0xdb, 0x5f, 0x5f, 0x8d, 0xbf, 0x44, 0x4c, 0xab, 0xe7, 0xfa, 0x9a, 0x5c, 0xa9, 0x9b, 0xc2, 0x8d, + 0x1a, 0xbc, 0x77, 0x3e, 0x91, 0x2d, 0x3c, 0xa9, 0x87, 0x01, 0xa1, 0x99, 0x91, 0xbb, 0xe6, 0x8d, + 0x71, 0x71, 0xa8, 0x0e, 0x40, 0x29, 0x2a, 0x28, 0x79, 0x32, 0x67, 0x65, 0xde, 0xa4, 0xc9, 0xb7, + 0x08, 0x2e, 0xc9, 0x9a, 0x66, 0xc9, 0xa5, 0x4c, 0xa7, 0xfd, 0x43, 0xc8, 0x28, 0x1f, 0xaf, 0x38, + 0x6a, 0x35, 0xd2, 0xac, 0x6f, 0xdd, 0x87, 0x6d, 0xfd, 0x80, 0xfc, 0x84, 0x30, 0xe9, 0xa7, 0x42, + 0x62, 0x0e, 0x0e, 0x9c, 0x35, 0x15, 0x0c, 0x6b, 0x64, 0x7d, 0xc0, 0x7b, 0x43, 0xe1, 0x5d, 0x23, + 0xaf, 0x0f, 0xc5, 0xab, 0x8e, 0xc3, 0xa6, 0xba, 0x64, 0xc4, 0xd6, 0x1d, 0xdc, 0xd6, 0x7d, 0xbd, + 0xf2, 0x80, 0x7c, 0x8f, 0x70, 0xae, 0x9b, 0x70, 0xc8, 0x95, 0x4c, 0x30, 0x99, 0xcc, 0x6a, 0xbc, + 0x30, 0x92, 0x2e, 0x80, 0x7e, 0x55, 0x81, 0xbe, 0x4a, 0x56, 0x06, 0x81, 0x0e, 0x63, 0xbb, 0x6a, + 0x1b, 0x7a, 0xaa, 0xce, 0xdf, 0x21, 0x3c, 0x9d, 0xa6, 0x0e, 0x92, 0xdd, 0xda, 0x0c, 0xa2, 0x32, + 0x2e, 0x8f, 0xa0, 0x09, 0x00, 0xaf, 0x2b, 0x80, 0x2b, 0xc4, 0x1a, 0x04, 0x30, 0x92, 0x3c, 0xa8, + 0x02, 0x01, 0xc8, 0x14, 0xbc, 0xf6, 0x0e, 0x85, 0x67, 0xdc, 0x90, 0x1d, 0xda, 0xf5, 0x16, 0x1b, + 0xb6, 0x43, 0xbb, 0xdf, 0x5a, 0xa3, 0xee, 0x50, 0xfd, 0x94, 0x4a, 0x41, 0xfb, 0x06, 0xf5, 0x3e, + 0xa3, 0x2e, 0x0f, 0x8e, 0xd9, 0xf3, 0x3c, 0x30, 0xae, 0x8c, 0xa2, 0x0a, 0x00, 0x4d, 0x05, 0xb0, + 0x4c, 0x96, 0x86, 0x03, 0x4c, 0x9e, 0x01, 0x95, 0x5b, 0x8f, 0x0e, 0x8a, 0xe8, 0xf1, 0x41, 0x11, + 0xfd, 0x79, 0x50, 0x44, 0xbb, 0x87, 0xc5, 0xb1, 0xc7, 0x87, 0xc5, 0xb1, 0xdf, 0x0f, 0x8b, 0x63, + 0x1f, 0xad, 0xa4, 0x78, 0x5b, 0xf1, 0xb5, 0x27, 0x97, 0x1b, 0xac, 0x26, 0x93, 0x0f, 0x6b, 0x7b, + 0xf5, 0xba, 0xf5, 0x19, 0x78, 0x57, 0x34, 0x5e, 0x9b, 0x54, 0xef, 0xa5, 0xab, 0xff, 0x04, 0x00, + 0x00, 0xff, 0xff, 0x5c, 0x1a, 0x9c, 0x98, 0x49, 0x10, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// QueryClient is the client API for Query service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type QueryClient interface { + DistributorAccountBalance(ctx context.Context, in *QueryDistributorAccountBalanceRequest, opts ...grpc.CallOption) (*QueryDistributorAccountBalanceResponse, error) + Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) + ClaimRecord(ctx context.Context, in *QueryClaimRecordRequest, opts ...grpc.CallOption) (*QueryClaimRecordResponse, error) + ClaimableForAction(ctx context.Context, in *QueryClaimableForActionRequest, opts ...grpc.CallOption) (*QueryClaimableForActionResponse, error) + TotalClaimable(ctx context.Context, in *QueryTotalClaimableRequest, opts ...grpc.CallOption) (*QueryTotalClaimableResponse, error) + UserVestings(ctx context.Context, in *QueryUserVestingsRequest, opts ...grpc.CallOption) (*QueryUserVestingsResponse, error) + ClaimStatus(ctx context.Context, in *QueryClaimStatusRequest, opts ...grpc.CallOption) (*QueryClaimStatusResponse, error) + ClaimMetadata(ctx context.Context, in *QueryClaimMetadataRequest, opts ...grpc.CallOption) (*QueryClaimMetadataResponse, error) +} + +type queryClient struct { + cc grpc1.ClientConn +} + +func NewQueryClient(cc grpc1.ClientConn) QueryClient { + return &queryClient{cc} +} + +func (c *queryClient) DistributorAccountBalance(ctx context.Context, in *QueryDistributorAccountBalanceRequest, opts ...grpc.CallOption) (*QueryDistributorAccountBalanceResponse, error) { + out := new(QueryDistributorAccountBalanceResponse) + err := c.cc.Invoke(ctx, "/symphony.claim.Query/DistributorAccountBalance", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { + out := new(QueryParamsResponse) + err := c.cc.Invoke(ctx, "/symphony.claim.Query/Params", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) ClaimRecord(ctx context.Context, in *QueryClaimRecordRequest, opts ...grpc.CallOption) (*QueryClaimRecordResponse, error) { + out := new(QueryClaimRecordResponse) + err := c.cc.Invoke(ctx, "/symphony.claim.Query/ClaimRecord", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) ClaimableForAction(ctx context.Context, in *QueryClaimableForActionRequest, opts ...grpc.CallOption) (*QueryClaimableForActionResponse, error) { + out := new(QueryClaimableForActionResponse) + err := c.cc.Invoke(ctx, "/symphony.claim.Query/ClaimableForAction", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) TotalClaimable(ctx context.Context, in *QueryTotalClaimableRequest, opts ...grpc.CallOption) (*QueryTotalClaimableResponse, error) { + out := new(QueryTotalClaimableResponse) + err := c.cc.Invoke(ctx, "/symphony.claim.Query/TotalClaimable", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) UserVestings(ctx context.Context, in *QueryUserVestingsRequest, opts ...grpc.CallOption) (*QueryUserVestingsResponse, error) { + out := new(QueryUserVestingsResponse) + err := c.cc.Invoke(ctx, "/symphony.claim.Query/UserVestings", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) ClaimStatus(ctx context.Context, in *QueryClaimStatusRequest, opts ...grpc.CallOption) (*QueryClaimStatusResponse, error) { + out := new(QueryClaimStatusResponse) + err := c.cc.Invoke(ctx, "/symphony.claim.Query/ClaimStatus", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *queryClient) ClaimMetadata(ctx context.Context, in *QueryClaimMetadataRequest, opts ...grpc.CallOption) (*QueryClaimMetadataResponse, error) { + out := new(QueryClaimMetadataResponse) + err := c.cc.Invoke(ctx, "/symphony.claim.Query/ClaimMetadata", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// QueryServer is the server API for Query service. +type QueryServer interface { + DistributorAccountBalance(context.Context, *QueryDistributorAccountBalanceRequest) (*QueryDistributorAccountBalanceResponse, error) + Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) + ClaimRecord(context.Context, *QueryClaimRecordRequest) (*QueryClaimRecordResponse, error) + ClaimableForAction(context.Context, *QueryClaimableForActionRequest) (*QueryClaimableForActionResponse, error) + TotalClaimable(context.Context, *QueryTotalClaimableRequest) (*QueryTotalClaimableResponse, error) + UserVestings(context.Context, *QueryUserVestingsRequest) (*QueryUserVestingsResponse, error) + ClaimStatus(context.Context, *QueryClaimStatusRequest) (*QueryClaimStatusResponse, error) + ClaimMetadata(context.Context, *QueryClaimMetadataRequest) (*QueryClaimMetadataResponse, error) +} + +// UnimplementedQueryServer can be embedded to have forward compatible implementations. +type UnimplementedQueryServer struct { +} + +func (*UnimplementedQueryServer) DistributorAccountBalance(ctx context.Context, req *QueryDistributorAccountBalanceRequest) (*QueryDistributorAccountBalanceResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DistributorAccountBalance not implemented") +} +func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") +} +func (*UnimplementedQueryServer) ClaimRecord(ctx context.Context, req *QueryClaimRecordRequest) (*QueryClaimRecordResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ClaimRecord not implemented") +} +func (*UnimplementedQueryServer) ClaimableForAction(ctx context.Context, req *QueryClaimableForActionRequest) (*QueryClaimableForActionResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ClaimableForAction not implemented") +} +func (*UnimplementedQueryServer) TotalClaimable(ctx context.Context, req *QueryTotalClaimableRequest) (*QueryTotalClaimableResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method TotalClaimable not implemented") +} +func (*UnimplementedQueryServer) UserVestings(ctx context.Context, req *QueryUserVestingsRequest) (*QueryUserVestingsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method UserVestings not implemented") +} +func (*UnimplementedQueryServer) ClaimStatus(ctx context.Context, req *QueryClaimStatusRequest) (*QueryClaimStatusResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ClaimStatus not implemented") +} +func (*UnimplementedQueryServer) ClaimMetadata(ctx context.Context, req *QueryClaimMetadataRequest) (*QueryClaimMetadataResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ClaimMetadata not implemented") +} + +func RegisterQueryServer(s grpc1.Server, srv QueryServer) { + s.RegisterService(&_Query_serviceDesc, srv) +} + +func _Query_DistributorAccountBalance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryDistributorAccountBalanceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).DistributorAccountBalance(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/symphony.claim.Query/DistributorAccountBalance", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).DistributorAccountBalance(ctx, req.(*QueryDistributorAccountBalanceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryParamsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).Params(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/symphony.claim.Query/Params", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_ClaimRecord_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryClaimRecordRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ClaimRecord(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/symphony.claim.Query/ClaimRecord", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ClaimRecord(ctx, req.(*QueryClaimRecordRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_ClaimableForAction_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryClaimableForActionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ClaimableForAction(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/symphony.claim.Query/ClaimableForAction", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ClaimableForAction(ctx, req.(*QueryClaimableForActionRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_TotalClaimable_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryTotalClaimableRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).TotalClaimable(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/symphony.claim.Query/TotalClaimable", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).TotalClaimable(ctx, req.(*QueryTotalClaimableRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_UserVestings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryUserVestingsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).UserVestings(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/symphony.claim.Query/UserVestings", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).UserVestings(ctx, req.(*QueryUserVestingsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_ClaimStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryClaimStatusRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ClaimStatus(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/symphony.claim.Query/ClaimStatus", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ClaimStatus(ctx, req.(*QueryClaimStatusRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Query_ClaimMetadata_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryClaimMetadataRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).ClaimMetadata(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/symphony.claim.Query/ClaimMetadata", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).ClaimMetadata(ctx, req.(*QueryClaimMetadataRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Query_serviceDesc = grpc.ServiceDesc{ + ServiceName: "symphony.claim.Query", + HandlerType: (*QueryServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "DistributorAccountBalance", + Handler: _Query_DistributorAccountBalance_Handler, + }, + { + MethodName: "Params", + Handler: _Query_Params_Handler, + }, + { + MethodName: "ClaimRecord", + Handler: _Query_ClaimRecord_Handler, + }, + { + MethodName: "ClaimableForAction", + Handler: _Query_ClaimableForAction_Handler, + }, + { + MethodName: "TotalClaimable", + Handler: _Query_TotalClaimable_Handler, + }, + { + MethodName: "UserVestings", + Handler: _Query_UserVestings_Handler, + }, + { + MethodName: "ClaimStatus", + Handler: _Query_ClaimStatus_Handler, + }, + { + MethodName: "ClaimMetadata", + Handler: _Query_ClaimMetadata_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "symphony/claim/query.proto", +} + +func (m *ClaimStatus) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ClaimStatus) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClaimStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Claimed { + i-- + if m.Claimed { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x10 + } + if len(m.AirdropIdentifier) > 0 { + i -= len(m.AirdropIdentifier) + copy(dAtA[i:], m.AirdropIdentifier) + i = encodeVarintQuery(dAtA, i, uint64(len(m.AirdropIdentifier))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryClaimStatusRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryClaimStatusRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryClaimStatusRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryClaimStatusResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryClaimStatusResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryClaimStatusResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ClaimStatus) > 0 { + for iNdEx := len(m.ClaimStatus) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ClaimStatus[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *ClaimMetadata) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ClaimMetadata) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ClaimMetadata) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + n1, err1 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.CurrentRoundEnd, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CurrentRoundEnd):]) + if err1 != nil { + return 0, err1 + } + i -= n1 + i = encodeVarintQuery(dAtA, i, uint64(n1)) + i-- + dAtA[i] = 0x22 + n2, err2 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.CurrentRoundStart, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CurrentRoundStart):]) + if err2 != nil { + return 0, err2 + } + i -= n2 + i = encodeVarintQuery(dAtA, i, uint64(n2)) + i-- + dAtA[i] = 0x1a + if len(m.CurrentRound) > 0 { + i -= len(m.CurrentRound) + copy(dAtA[i:], m.CurrentRound) + i = encodeVarintQuery(dAtA, i, uint64(len(m.CurrentRound))) + i-- + dAtA[i] = 0x12 + } + if len(m.AirdropIdentifier) > 0 { + i -= len(m.AirdropIdentifier) + copy(dAtA[i:], m.AirdropIdentifier) + i = encodeVarintQuery(dAtA, i, uint64(len(m.AirdropIdentifier))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryClaimMetadataRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryClaimMetadataRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryClaimMetadataRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryClaimMetadataResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryClaimMetadataResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryClaimMetadataResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ClaimMetadata) > 0 { + for iNdEx := len(m.ClaimMetadata) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ClaimMetadata[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryDistributorAccountBalanceRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryDistributorAccountBalanceRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryDistributorAccountBalanceRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.AirdropIdentifier) > 0 { + i -= len(m.AirdropIdentifier) + copy(dAtA[i:], m.AirdropIdentifier) + i = encodeVarintQuery(dAtA, i, uint64(len(m.AirdropIdentifier))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryDistributorAccountBalanceResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryDistributorAccountBalanceResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryDistributorAccountBalanceResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.DistributorAccountBalance) > 0 { + for iNdEx := len(m.DistributorAccountBalance) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.DistributorAccountBalance[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryParamsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *QueryParamsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryParamsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryParamsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryClaimRecordRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryClaimRecordRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryClaimRecordRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0x12 + } + if len(m.AirdropIdentifier) > 0 { + i -= len(m.AirdropIdentifier) + copy(dAtA[i:], m.AirdropIdentifier) + i = encodeVarintQuery(dAtA, i, uint64(len(m.AirdropIdentifier))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryClaimRecordResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryClaimRecordResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryClaimRecordResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size, err := m.ClaimRecord.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *QueryClaimableForActionRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryClaimableForActionRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryClaimableForActionRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Action != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Action)) + i-- + dAtA[i] = 0x18 + } + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0x12 + } + if len(m.AirdropIdentifier) > 0 { + i -= len(m.AirdropIdentifier) + copy(dAtA[i:], m.AirdropIdentifier) + i = encodeVarintQuery(dAtA, i, uint64(len(m.AirdropIdentifier))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryClaimableForActionResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryClaimableForActionResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryClaimableForActionResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Coins) > 0 { + for iNdEx := len(m.Coins) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Coins[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryTotalClaimableRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryTotalClaimableRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTotalClaimableRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.IncludeClaimed { + i-- + if m.IncludeClaimed { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x18 + } + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0x12 + } + if len(m.AirdropIdentifier) > 0 { + i -= len(m.AirdropIdentifier) + copy(dAtA[i:], m.AirdropIdentifier) + i = encodeVarintQuery(dAtA, i, uint64(len(m.AirdropIdentifier))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryTotalClaimableResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryTotalClaimableResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryTotalClaimableResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Coins) > 0 { + for iNdEx := len(m.Coins) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Coins[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func (m *QueryUserVestingsRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryUserVestingsRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryUserVestingsRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *QueryUserVestingsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *QueryUserVestingsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *QueryUserVestingsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.SpendableCoins) > 0 { + for iNdEx := len(m.SpendableCoins) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.SpendableCoins[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if len(m.Periods) > 0 { + for iNdEx := len(m.Periods) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Periods[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *ClaimStatus) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.AirdropIdentifier) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Claimed { + n += 2 + } + return n +} + +func (m *QueryClaimStatusRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Address) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryClaimStatusResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.ClaimStatus) > 0 { + for _, e := range m.ClaimStatus { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *ClaimMetadata) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.AirdropIdentifier) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.CurrentRound) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CurrentRoundStart) + n += 1 + l + sovQuery(uint64(l)) + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.CurrentRoundEnd) + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryClaimMetadataRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryClaimMetadataResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.ClaimMetadata) > 0 { + for _, e := range m.ClaimMetadata { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryDistributorAccountBalanceRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.AirdropIdentifier) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryDistributorAccountBalanceResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.DistributorAccountBalance) > 0 { + for _, e := range m.DistributorAccountBalance { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryClaimRecordRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.AirdropIdentifier) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.Address) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryClaimRecordResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.ClaimRecord.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryClaimableForActionRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.AirdropIdentifier) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.Address) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Action != 0 { + n += 1 + sovQuery(uint64(m.Action)) + } + return n +} + +func (m *QueryClaimableForActionResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Coins) > 0 { + for _, e := range m.Coins { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryTotalClaimableRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.AirdropIdentifier) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.Address) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.IncludeClaimed { + n += 2 + } + return n +} + +func (m *QueryTotalClaimableResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Coins) > 0 { + for _, e := range m.Coins { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func (m *QueryUserVestingsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Address) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *QueryUserVestingsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Periods) > 0 { + for _, e := range m.Periods { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if len(m.SpendableCoins) > 0 { + for _, e := range m.SpendableCoins { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *ClaimStatus) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ClaimStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ClaimStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AirdropIdentifier", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AirdropIdentifier = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Claimed", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Claimed = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryClaimStatusRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryClaimStatusRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryClaimStatusRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryClaimStatusResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryClaimStatusResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryClaimStatusResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClaimStatus", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClaimStatus = append(m.ClaimStatus, ClaimStatus{}) + if err := m.ClaimStatus[len(m.ClaimStatus)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ClaimMetadata) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ClaimMetadata: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ClaimMetadata: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AirdropIdentifier", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AirdropIdentifier = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CurrentRound", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CurrentRound = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CurrentRoundStart", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.CurrentRoundStart, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CurrentRoundEnd", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.CurrentRoundEnd, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryClaimMetadataRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryClaimMetadataRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryClaimMetadataRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryClaimMetadataResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryClaimMetadataResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryClaimMetadataResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClaimMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClaimMetadata = append(m.ClaimMetadata, ClaimMetadata{}) + if err := m.ClaimMetadata[len(m.ClaimMetadata)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryDistributorAccountBalanceRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryDistributorAccountBalanceRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryDistributorAccountBalanceRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AirdropIdentifier", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AirdropIdentifier = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryDistributorAccountBalanceResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryDistributorAccountBalanceResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryDistributorAccountBalanceResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DistributorAccountBalance", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DistributorAccountBalance = append(m.DistributorAccountBalance, types1.Coin{}) + if err := m.DistributorAccountBalance[len(m.DistributorAccountBalance)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryClaimRecordRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryClaimRecordRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryClaimRecordRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AirdropIdentifier", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AirdropIdentifier = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryClaimRecordResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryClaimRecordResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryClaimRecordResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClaimRecord", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ClaimRecord.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryClaimableForActionRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryClaimableForActionRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryClaimableForActionRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AirdropIdentifier", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AirdropIdentifier = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Action", wireType) + } + m.Action = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Action |= Action(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryClaimableForActionResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryClaimableForActionResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryClaimableForActionResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Coins", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Coins = append(m.Coins, types1.Coin{}) + if err := m.Coins[len(m.Coins)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryTotalClaimableRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryTotalClaimableRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryTotalClaimableRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AirdropIdentifier", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AirdropIdentifier = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IncludeClaimed", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.IncludeClaimed = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryTotalClaimableResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryTotalClaimableResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryTotalClaimableResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Coins", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Coins = append(m.Coins, types1.Coin{}) + if err := m.Coins[len(m.Coins)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryUserVestingsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryUserVestingsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryUserVestingsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryUserVestingsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryUserVestingsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryUserVestingsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Periods", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Periods = append(m.Periods, types2.Period{}) + if err := m.Periods[len(m.Periods)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SpendableCoins", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SpendableCoins = append(m.SpendableCoins, types1.Coin{}) + if err := m.SpendableCoins[len(m.SpendableCoins)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipQuery(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthQuery + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupQuery + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthQuery + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/claim/types/query.pb.gw.go b/x/claim/types/query.pb.gw.go new file mode 100644 index 00000000000..affb4957051 --- /dev/null +++ b/x/claim/types/query.pb.gw.go @@ -0,0 +1,888 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: symphony/claim/query.proto + +/* +Package types is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package types + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage +var _ = metadata.Join + +var ( + filter_Query_DistributorAccountBalance_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Query_DistributorAccountBalance_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryDistributorAccountBalanceRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_DistributorAccountBalance_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.DistributorAccountBalance(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_DistributorAccountBalance_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryDistributorAccountBalanceRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_DistributorAccountBalance_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.DistributorAccountBalance(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := client.Params(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryParamsRequest + var metadata runtime.ServerMetadata + + msg, err := server.Params(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_ClaimRecord_0 = &utilities.DoubleArray{Encoding: map[string]int{"address": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Query_ClaimRecord_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryClaimRecordRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") + } + + protoReq.Address, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ClaimRecord_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ClaimRecord(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_ClaimRecord_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryClaimRecordRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") + } + + protoReq.Address, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ClaimRecord_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ClaimRecord(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_ClaimableForAction_0 = &utilities.DoubleArray{Encoding: map[string]int{"address": 0, "action": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} +) + +func request_Query_ClaimableForAction_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryClaimableForActionRequest + var metadata runtime.ServerMetadata + + var ( + val string + e int32 + ok bool + err error + _ = err + ) + + val, ok = pathParams["address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") + } + + protoReq.Address, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) + } + + val, ok = pathParams["action"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "action") + } + + e, err = runtime.Enum(val, Action_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "action", err) + } + + protoReq.Action = Action(e) + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ClaimableForAction_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ClaimableForAction(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_ClaimableForAction_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryClaimableForActionRequest + var metadata runtime.ServerMetadata + + var ( + val string + e int32 + ok bool + err error + _ = err + ) + + val, ok = pathParams["address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") + } + + protoReq.Address, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) + } + + val, ok = pathParams["action"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "action") + } + + e, err = runtime.Enum(val, Action_value) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "action", err) + } + + protoReq.Action = Action(e) + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_ClaimableForAction_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ClaimableForAction(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Query_TotalClaimable_0 = &utilities.DoubleArray{Encoding: map[string]int{"address": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Query_TotalClaimable_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTotalClaimableRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") + } + + protoReq.Address, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_TotalClaimable_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.TotalClaimable(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_TotalClaimable_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryTotalClaimableRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") + } + + protoReq.Address, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Query_TotalClaimable_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.TotalClaimable(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_UserVestings_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryUserVestingsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") + } + + protoReq.Address, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) + } + + msg, err := client.UserVestings(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_UserVestings_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryUserVestingsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") + } + + protoReq.Address, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) + } + + msg, err := server.UserVestings(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_ClaimStatus_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryClaimStatusRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") + } + + protoReq.Address, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) + } + + msg, err := client.ClaimStatus(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_ClaimStatus_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryClaimStatusRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["address"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "address") + } + + protoReq.Address, err = runtime.String(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "address", err) + } + + msg, err := server.ClaimStatus(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Query_ClaimMetadata_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryClaimMetadataRequest + var metadata runtime.ServerMetadata + + msg, err := client.ClaimMetadata(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_ClaimMetadata_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryClaimMetadataRequest + var metadata runtime.ServerMetadata + + msg, err := server.ClaimMetadata(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterQueryHandlerServer registers the http handlers for service Query to "mux". +// UnaryRPC :call QueryServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterQueryHandlerFromEndpoint instead. +func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, server QueryServer) error { + + mux.Handle("GET", pattern_Query_DistributorAccountBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_DistributorAccountBalance_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_DistributorAccountBalance_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_Params_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_ClaimRecord_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_ClaimRecord_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_ClaimRecord_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_ClaimableForAction_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_ClaimableForAction_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_ClaimableForAction_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_TotalClaimable_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_TotalClaimable_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_TotalClaimable_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_UserVestings_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_UserVestings_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_UserVestings_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_ClaimStatus_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_ClaimStatus_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_ClaimStatus_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_ClaimMetadata_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_ClaimMetadata_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_ClaimMetadata_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterQueryHandlerFromEndpoint is same as RegisterQueryHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterQueryHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterQueryHandler(ctx, mux, conn) +} + +// RegisterQueryHandler registers the http handlers for service Query to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterQueryHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterQueryHandlerClient(ctx, mux, NewQueryClient(conn)) +} + +// RegisterQueryHandlerClient registers the http handlers for service Query +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "QueryClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "QueryClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "QueryClient" to call the correct interceptors. +func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, client QueryClient) error { + + mux.Handle("GET", pattern_Query_DistributorAccountBalance_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_DistributorAccountBalance_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_DistributorAccountBalance_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_Params_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_Params_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_Params_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_ClaimRecord_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_ClaimRecord_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_ClaimRecord_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_ClaimableForAction_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_ClaimableForAction_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_ClaimableForAction_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_TotalClaimable_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_TotalClaimable_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_TotalClaimable_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_UserVestings_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_UserVestings_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_UserVestings_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_ClaimStatus_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_ClaimStatus_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_ClaimStatus_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Query_ClaimMetadata_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_ClaimMetadata_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_ClaimMetadata_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Query_DistributorAccountBalance_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"symphony", "claim", "v1beta1", "module_account_balance"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"symphony", "claim", "params"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_ClaimRecord_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"symphony", "claim", "v1beta1", "claim_record", "address"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_ClaimableForAction_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"symphony", "claim", "v1beta1", "claimable_for_action", "address", "action"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_TotalClaimable_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"symphony", "claim", "v1beta1", "total_claimable", "address"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_UserVestings_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"symphony", "claim", "v1beta1", "user_vestings", "address"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_ClaimStatus_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"symphony", "claim", "v1beta1", "claim_status", "address"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_ClaimMetadata_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"symphony", "claim", "v1beta1", "claim_metadata"}, "", runtime.AssumeColonVerbOpt(false))) +) + +var ( + forward_Query_DistributorAccountBalance_0 = runtime.ForwardResponseMessage + + forward_Query_Params_0 = runtime.ForwardResponseMessage + + forward_Query_ClaimRecord_0 = runtime.ForwardResponseMessage + + forward_Query_ClaimableForAction_0 = runtime.ForwardResponseMessage + + forward_Query_TotalClaimable_0 = runtime.ForwardResponseMessage + + forward_Query_UserVestings_0 = runtime.ForwardResponseMessage + + forward_Query_ClaimStatus_0 = runtime.ForwardResponseMessage + + forward_Query_ClaimMetadata_0 = runtime.ForwardResponseMessage +) diff --git a/x/claim/types/tx.pb.go b/x/claim/types/tx.pb.go new file mode 100644 index 00000000000..d6f731853f0 --- /dev/null +++ b/x/claim/types/tx.pb.go @@ -0,0 +1,2079 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: symphony/claim/tx.proto + +package types + +import ( + context "context" + cosmossdk_io_math "cosmossdk.io/math" + fmt "fmt" + _ "github.com/cosmos/cosmos-proto" + github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + types "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/msgservice" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +type MsgSetAirdropAllocations struct { + Allocator string `protobuf:"bytes,1,opt,name=allocator,proto3" json:"allocator,omitempty"` + AirdropIdentifier string `protobuf:"bytes,2,opt,name=airdrop_identifier,json=airdropIdentifier,proto3" json:"airdrop_identifier,omitempty" yaml:"airdrop_identifier"` + Users []string `protobuf:"bytes,3,rep,name=users,proto3" json:"users,omitempty"` + Weights []cosmossdk_io_math.LegacyDec `protobuf:"bytes,4,rep,name=weights,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"weights" yaml:"weights"` +} + +func (m *MsgSetAirdropAllocations) Reset() { *m = MsgSetAirdropAllocations{} } +func (m *MsgSetAirdropAllocations) String() string { return proto.CompactTextString(m) } +func (*MsgSetAirdropAllocations) ProtoMessage() {} +func (*MsgSetAirdropAllocations) Descriptor() ([]byte, []int) { + return fileDescriptor_f8fa7290a993a598, []int{0} +} +func (m *MsgSetAirdropAllocations) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSetAirdropAllocations) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSetAirdropAllocations.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgSetAirdropAllocations) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSetAirdropAllocations.Merge(m, src) +} +func (m *MsgSetAirdropAllocations) XXX_Size() int { + return m.Size() +} +func (m *MsgSetAirdropAllocations) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSetAirdropAllocations.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSetAirdropAllocations proto.InternalMessageInfo + +func (m *MsgSetAirdropAllocations) GetAllocator() string { + if m != nil { + return m.Allocator + } + return "" +} + +func (m *MsgSetAirdropAllocations) GetAirdropIdentifier() string { + if m != nil { + return m.AirdropIdentifier + } + return "" +} + +func (m *MsgSetAirdropAllocations) GetUsers() []string { + if m != nil { + return m.Users + } + return nil +} + +type MsgSetAirdropAllocationsResponse struct { +} + +func (m *MsgSetAirdropAllocationsResponse) Reset() { *m = MsgSetAirdropAllocationsResponse{} } +func (m *MsgSetAirdropAllocationsResponse) String() string { return proto.CompactTextString(m) } +func (*MsgSetAirdropAllocationsResponse) ProtoMessage() {} +func (*MsgSetAirdropAllocationsResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_f8fa7290a993a598, []int{1} +} +func (m *MsgSetAirdropAllocationsResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgSetAirdropAllocationsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgSetAirdropAllocationsResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgSetAirdropAllocationsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgSetAirdropAllocationsResponse.Merge(m, src) +} +func (m *MsgSetAirdropAllocationsResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgSetAirdropAllocationsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgSetAirdropAllocationsResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgSetAirdropAllocationsResponse proto.InternalMessageInfo + +type MsgClaimFreeAmount struct { + User string `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` +} + +func (m *MsgClaimFreeAmount) Reset() { *m = MsgClaimFreeAmount{} } +func (m *MsgClaimFreeAmount) String() string { return proto.CompactTextString(m) } +func (*MsgClaimFreeAmount) ProtoMessage() {} +func (*MsgClaimFreeAmount) Descriptor() ([]byte, []int) { + return fileDescriptor_f8fa7290a993a598, []int{2} +} +func (m *MsgClaimFreeAmount) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgClaimFreeAmount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgClaimFreeAmount.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgClaimFreeAmount) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgClaimFreeAmount.Merge(m, src) +} +func (m *MsgClaimFreeAmount) XXX_Size() int { + return m.Size() +} +func (m *MsgClaimFreeAmount) XXX_DiscardUnknown() { + xxx_messageInfo_MsgClaimFreeAmount.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgClaimFreeAmount proto.InternalMessageInfo + +func (m *MsgClaimFreeAmount) GetUser() string { + if m != nil { + return m.User + } + return "" +} + +type MsgClaimFreeAmountResponse struct { + ClaimedAmount github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,3,rep,name=claimed_amount,json=claimedAmount,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"claimed_amount"` +} + +func (m *MsgClaimFreeAmountResponse) Reset() { *m = MsgClaimFreeAmountResponse{} } +func (m *MsgClaimFreeAmountResponse) String() string { return proto.CompactTextString(m) } +func (*MsgClaimFreeAmountResponse) ProtoMessage() {} +func (*MsgClaimFreeAmountResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_f8fa7290a993a598, []int{3} +} +func (m *MsgClaimFreeAmountResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgClaimFreeAmountResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgClaimFreeAmountResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgClaimFreeAmountResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgClaimFreeAmountResponse.Merge(m, src) +} +func (m *MsgClaimFreeAmountResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgClaimFreeAmountResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgClaimFreeAmountResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgClaimFreeAmountResponse proto.InternalMessageInfo + +func (m *MsgClaimFreeAmountResponse) GetClaimedAmount() github_com_cosmos_cosmos_sdk_types.Coins { + if m != nil { + return m.ClaimedAmount + } + return nil +} + +type MsgCreateAirdrop struct { + Distributor string `protobuf:"bytes,1,opt,name=distributor,proto3" json:"distributor,omitempty"` + Identifier string `protobuf:"bytes,2,opt,name=identifier,proto3" json:"identifier,omitempty"` + ChainId string `protobuf:"bytes,6,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + Denom string `protobuf:"bytes,5,opt,name=denom,proto3" json:"denom,omitempty"` + StartTime uint64 `protobuf:"varint,3,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` + Duration uint64 `protobuf:"varint,4,opt,name=duration,proto3" json:"duration,omitempty"` + AutopilotEnabled bool `protobuf:"varint,7,opt,name=autopilot_enabled,json=autopilotEnabled,proto3" json:"autopilot_enabled,omitempty"` +} + +func (m *MsgCreateAirdrop) Reset() { *m = MsgCreateAirdrop{} } +func (m *MsgCreateAirdrop) String() string { return proto.CompactTextString(m) } +func (*MsgCreateAirdrop) ProtoMessage() {} +func (*MsgCreateAirdrop) Descriptor() ([]byte, []int) { + return fileDescriptor_f8fa7290a993a598, []int{4} +} +func (m *MsgCreateAirdrop) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgCreateAirdrop) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgCreateAirdrop.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgCreateAirdrop) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgCreateAirdrop.Merge(m, src) +} +func (m *MsgCreateAirdrop) XXX_Size() int { + return m.Size() +} +func (m *MsgCreateAirdrop) XXX_DiscardUnknown() { + xxx_messageInfo_MsgCreateAirdrop.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgCreateAirdrop proto.InternalMessageInfo + +func (m *MsgCreateAirdrop) GetDistributor() string { + if m != nil { + return m.Distributor + } + return "" +} + +func (m *MsgCreateAirdrop) GetIdentifier() string { + if m != nil { + return m.Identifier + } + return "" +} + +func (m *MsgCreateAirdrop) GetChainId() string { + if m != nil { + return m.ChainId + } + return "" +} + +func (m *MsgCreateAirdrop) GetDenom() string { + if m != nil { + return m.Denom + } + return "" +} + +func (m *MsgCreateAirdrop) GetStartTime() uint64 { + if m != nil { + return m.StartTime + } + return 0 +} + +func (m *MsgCreateAirdrop) GetDuration() uint64 { + if m != nil { + return m.Duration + } + return 0 +} + +func (m *MsgCreateAirdrop) GetAutopilotEnabled() bool { + if m != nil { + return m.AutopilotEnabled + } + return false +} + +type MsgCreateAirdropResponse struct { +} + +func (m *MsgCreateAirdropResponse) Reset() { *m = MsgCreateAirdropResponse{} } +func (m *MsgCreateAirdropResponse) String() string { return proto.CompactTextString(m) } +func (*MsgCreateAirdropResponse) ProtoMessage() {} +func (*MsgCreateAirdropResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_f8fa7290a993a598, []int{5} +} +func (m *MsgCreateAirdropResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgCreateAirdropResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgCreateAirdropResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgCreateAirdropResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgCreateAirdropResponse.Merge(m, src) +} +func (m *MsgCreateAirdropResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgCreateAirdropResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgCreateAirdropResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgCreateAirdropResponse proto.InternalMessageInfo + +type MsgDeleteAirdrop struct { + Distributor string `protobuf:"bytes,1,opt,name=distributor,proto3" json:"distributor,omitempty"` + Identifier string `protobuf:"bytes,2,opt,name=identifier,proto3" json:"identifier,omitempty"` +} + +func (m *MsgDeleteAirdrop) Reset() { *m = MsgDeleteAirdrop{} } +func (m *MsgDeleteAirdrop) String() string { return proto.CompactTextString(m) } +func (*MsgDeleteAirdrop) ProtoMessage() {} +func (*MsgDeleteAirdrop) Descriptor() ([]byte, []int) { + return fileDescriptor_f8fa7290a993a598, []int{6} +} +func (m *MsgDeleteAirdrop) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgDeleteAirdrop) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgDeleteAirdrop.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgDeleteAirdrop) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgDeleteAirdrop.Merge(m, src) +} +func (m *MsgDeleteAirdrop) XXX_Size() int { + return m.Size() +} +func (m *MsgDeleteAirdrop) XXX_DiscardUnknown() { + xxx_messageInfo_MsgDeleteAirdrop.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgDeleteAirdrop proto.InternalMessageInfo + +func (m *MsgDeleteAirdrop) GetDistributor() string { + if m != nil { + return m.Distributor + } + return "" +} + +func (m *MsgDeleteAirdrop) GetIdentifier() string { + if m != nil { + return m.Identifier + } + return "" +} + +type MsgDeleteAirdropResponse struct { +} + +func (m *MsgDeleteAirdropResponse) Reset() { *m = MsgDeleteAirdropResponse{} } +func (m *MsgDeleteAirdropResponse) String() string { return proto.CompactTextString(m) } +func (*MsgDeleteAirdropResponse) ProtoMessage() {} +func (*MsgDeleteAirdropResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_f8fa7290a993a598, []int{7} +} +func (m *MsgDeleteAirdropResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MsgDeleteAirdropResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MsgDeleteAirdropResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MsgDeleteAirdropResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_MsgDeleteAirdropResponse.Merge(m, src) +} +func (m *MsgDeleteAirdropResponse) XXX_Size() int { + return m.Size() +} +func (m *MsgDeleteAirdropResponse) XXX_DiscardUnknown() { + xxx_messageInfo_MsgDeleteAirdropResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_MsgDeleteAirdropResponse proto.InternalMessageInfo + +func init() { + proto.RegisterType((*MsgSetAirdropAllocations)(nil), "symphony.claim.MsgSetAirdropAllocations") + proto.RegisterType((*MsgSetAirdropAllocationsResponse)(nil), "symphony.claim.MsgSetAirdropAllocationsResponse") + proto.RegisterType((*MsgClaimFreeAmount)(nil), "symphony.claim.MsgClaimFreeAmount") + proto.RegisterType((*MsgClaimFreeAmountResponse)(nil), "symphony.claim.MsgClaimFreeAmountResponse") + proto.RegisterType((*MsgCreateAirdrop)(nil), "symphony.claim.MsgCreateAirdrop") + proto.RegisterType((*MsgCreateAirdropResponse)(nil), "symphony.claim.MsgCreateAirdropResponse") + proto.RegisterType((*MsgDeleteAirdrop)(nil), "symphony.claim.MsgDeleteAirdrop") + proto.RegisterType((*MsgDeleteAirdropResponse)(nil), "symphony.claim.MsgDeleteAirdropResponse") +} + +func init() { proto.RegisterFile("symphony/claim/tx.proto", fileDescriptor_f8fa7290a993a598) } + +var fileDescriptor_f8fa7290a993a598 = []byte{ + // 775 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0xcf, 0x4f, 0xdb, 0x48, + 0x14, 0x8e, 0x49, 0xf8, 0x91, 0x41, 0xb0, 0x30, 0x62, 0x17, 0xc7, 0x2b, 0x9c, 0xc8, 0x87, 0x55, + 0x14, 0x16, 0x9b, 0xb0, 0xda, 0x56, 0xca, 0x2d, 0x81, 0x56, 0x42, 0x05, 0x55, 0x32, 0x3d, 0xb5, + 0x87, 0x68, 0x62, 0x4f, 0x9d, 0x29, 0xb6, 0x27, 0xf2, 0x4c, 0x28, 0xb9, 0x55, 0x3d, 0xf6, 0xc4, + 0xbd, 0x52, 0xff, 0x80, 0x9e, 0x38, 0x70, 0xea, 0x5f, 0xc0, 0x11, 0xf5, 0x54, 0xf5, 0x90, 0x56, + 0x70, 0xe0, 0xce, 0x5f, 0x50, 0x79, 0x3c, 0x09, 0x49, 0x08, 0x0a, 0xa7, 0x5e, 0x12, 0xbf, 0xef, + 0xfb, 0xe6, 0xcd, 0xe7, 0xf7, 0xde, 0x8c, 0xc1, 0x2a, 0xeb, 0x04, 0xad, 0x26, 0x0d, 0x3b, 0x96, + 0xe3, 0x23, 0x12, 0x58, 0xfc, 0xd8, 0x6c, 0x45, 0x94, 0x53, 0xb8, 0xd8, 0x23, 0x4c, 0x41, 0x68, + 0xcb, 0x28, 0x20, 0x21, 0xb5, 0xc4, 0x6f, 0x22, 0xd1, 0x72, 0x0e, 0x65, 0x01, 0x65, 0x75, 0x11, + 0x59, 0x49, 0x20, 0x29, 0x3d, 0x89, 0xac, 0x06, 0x62, 0xd8, 0x3a, 0x2a, 0x37, 0x30, 0x47, 0x65, + 0xcb, 0xa1, 0x24, 0x94, 0xfc, 0xaa, 0xe4, 0x03, 0xe6, 0x59, 0x47, 0xe5, 0xf8, 0x4f, 0x12, 0x2b, + 0x1e, 0xf5, 0x68, 0x92, 0x30, 0x7e, 0x4a, 0x50, 0xe3, 0xcb, 0x14, 0x50, 0xf7, 0x99, 0x77, 0x80, + 0x79, 0x95, 0x44, 0x6e, 0x44, 0x5b, 0x55, 0xdf, 0xa7, 0x0e, 0xe2, 0x84, 0x86, 0x0c, 0x3e, 0x02, + 0x59, 0x94, 0x84, 0x34, 0x52, 0x95, 0x82, 0x52, 0xcc, 0xd6, 0xd4, 0xaf, 0x67, 0x1b, 0x2b, 0xd2, + 0x50, 0xd5, 0x75, 0x23, 0xcc, 0xd8, 0x01, 0x8f, 0x48, 0xe8, 0xd9, 0xb7, 0x52, 0xb8, 0x07, 0x20, + 0x4a, 0xb2, 0xd5, 0x89, 0x8b, 0x43, 0x4e, 0x5e, 0x13, 0x1c, 0xa9, 0x53, 0x22, 0xc1, 0xda, 0x4d, + 0x37, 0x9f, 0xeb, 0xa0, 0xc0, 0xaf, 0x18, 0x77, 0x35, 0x86, 0xbd, 0x2c, 0xc1, 0xdd, 0x3e, 0x06, + 0x57, 0xc0, 0x74, 0x9b, 0xe1, 0x88, 0xa9, 0xe9, 0x42, 0xba, 0x98, 0xb5, 0x93, 0x00, 0x3e, 0x07, + 0xb3, 0x6f, 0x31, 0xf1, 0x9a, 0x9c, 0xa9, 0x99, 0x18, 0xaf, 0xfd, 0x7f, 0xde, 0xcd, 0xa7, 0xbe, + 0x77, 0xf3, 0x7f, 0x27, 0xee, 0x98, 0x7b, 0x68, 0x12, 0x6a, 0x05, 0x88, 0x37, 0xcd, 0x3d, 0xec, + 0x21, 0xa7, 0xb3, 0x83, 0x9d, 0x9b, 0x6e, 0x7e, 0x31, 0xd9, 0x5b, 0xae, 0x35, 0xec, 0x5e, 0x96, + 0x4a, 0xf9, 0xfd, 0xf5, 0x69, 0xe9, 0xf6, 0x25, 0x3e, 0x5c, 0x9f, 0x96, 0xf4, 0xa4, 0x73, 0xf7, + 0xd5, 0xc7, 0x30, 0x40, 0xe1, 0x3e, 0xce, 0xc6, 0xac, 0x45, 0x43, 0x86, 0x8d, 0x37, 0x00, 0xee, + 0x33, 0x6f, 0x3b, 0x4e, 0xf4, 0x34, 0xc2, 0xb8, 0x1a, 0xd0, 0x76, 0xc8, 0xe1, 0xbf, 0x20, 0x13, + 0xbf, 0xc6, 0xc4, 0xa2, 0x0a, 0x55, 0xe5, 0x9f, 0xd8, 0x9a, 0x78, 0x8c, 0x5d, 0xa9, 0x7d, 0x57, + 0x23, 0x59, 0x8d, 0x13, 0x05, 0x68, 0x77, 0xe1, 0x9e, 0x15, 0x18, 0x81, 0x45, 0xb1, 0x14, 0xbb, + 0x75, 0x24, 0x18, 0x51, 0xd1, 0xf9, 0xad, 0x9c, 0x29, 0xf7, 0x8e, 0x67, 0xca, 0x94, 0x33, 0x65, + 0x6e, 0x53, 0x12, 0xd6, 0x36, 0xe3, 0xa2, 0x7e, 0xfe, 0x91, 0x2f, 0x7a, 0x84, 0x37, 0xdb, 0x0d, + 0xd3, 0xa1, 0x81, 0x1c, 0x47, 0xf9, 0xb7, 0xc1, 0xdc, 0x43, 0x8b, 0x77, 0x5a, 0x98, 0x89, 0x05, + 0xcc, 0x5e, 0x90, 0x5b, 0x48, 0x4b, 0x67, 0x53, 0x60, 0x29, 0xb6, 0x14, 0x61, 0xc4, 0xb1, 0x2c, + 0x13, 0xac, 0x80, 0x79, 0x97, 0x30, 0x1e, 0x91, 0x46, 0xfb, 0x21, 0x93, 0x35, 0x28, 0x86, 0x3a, + 0x00, 0xa3, 0x33, 0x65, 0x0f, 0x20, 0x30, 0x07, 0xe6, 0x9c, 0x26, 0x22, 0x61, 0x9d, 0xb8, 0xea, + 0x8c, 0x60, 0x67, 0x45, 0xbc, 0xeb, 0xc6, 0x83, 0xe4, 0xe2, 0x90, 0x06, 0xea, 0xb4, 0xc0, 0x93, + 0x00, 0xae, 0x01, 0xc0, 0x38, 0x8a, 0x78, 0x9d, 0x93, 0x00, 0xab, 0xe9, 0x82, 0x52, 0xcc, 0xd8, + 0x59, 0x81, 0xbc, 0x20, 0x01, 0x86, 0x1a, 0x98, 0x73, 0xdb, 0x91, 0x68, 0xaa, 0x9a, 0x11, 0x64, + 0x3f, 0x86, 0xeb, 0x60, 0x19, 0xb5, 0x39, 0x6d, 0x11, 0x9f, 0xf2, 0x3a, 0x0e, 0x51, 0xc3, 0xc7, + 0xae, 0x3a, 0x5b, 0x50, 0x8a, 0x73, 0xf6, 0x52, 0x9f, 0x78, 0x92, 0xe0, 0x95, 0xf5, 0xb8, 0x89, + 0x83, 0xaf, 0x12, 0xf7, 0xf2, 0xaf, 0xdb, 0x5e, 0x0e, 0x56, 0xc8, 0xd0, 0xc4, 0xa9, 0x1c, 0xc2, + 0xfa, 0x13, 0xf5, 0x51, 0x11, 0x25, 0xdd, 0xc1, 0x3e, 0xfe, 0x2d, 0x25, 0x9d, 0xe4, 0x7c, 0xc8, + 0x88, 0x74, 0x3e, 0x84, 0xf5, 0x9c, 0x6f, 0x7d, 0x4a, 0x83, 0xf4, 0x3e, 0xf3, 0x20, 0x03, 0x7f, + 0x8e, 0xbf, 0x70, 0x8a, 0xe6, 0xf0, 0xdd, 0x68, 0xde, 0x77, 0xbc, 0xb4, 0xcd, 0x87, 0x2a, 0xfb, + 0xd3, 0x8f, 0xc0, 0x1f, 0xa3, 0xa7, 0xd0, 0x18, 0x93, 0x64, 0x44, 0xa3, 0x95, 0x26, 0x6b, 0xfa, + 0x5b, 0xbc, 0x02, 0x0b, 0xc3, 0x83, 0x5e, 0x18, 0xb7, 0x78, 0x50, 0xa1, 0x15, 0x27, 0x29, 0x06, + 0x93, 0x0f, 0xb7, 0x7c, 0x5c, 0xf2, 0x21, 0xc5, 0xd8, 0xe4, 0x63, 0x3b, 0xa3, 0x4d, 0xbf, 0xbb, + 0x3e, 0x2d, 0x29, 0xb5, 0x67, 0xe7, 0x97, 0xba, 0x72, 0x71, 0xa9, 0x2b, 0x3f, 0x2f, 0x75, 0xe5, + 0xe4, 0x4a, 0x4f, 0x5d, 0x5c, 0xe9, 0xa9, 0x6f, 0x57, 0x7a, 0xea, 0x65, 0x79, 0xe0, 0x02, 0x10, + 0x03, 0x45, 0xd8, 0x86, 0x8f, 0x1a, 0xac, 0x17, 0x58, 0x47, 0x5b, 0x8f, 0xad, 0xe3, 0xde, 0xa7, + 0x2e, 0xbe, 0x0f, 0x1a, 0x33, 0xe2, 0x0b, 0xf3, 0xdf, 0xaf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x73, + 0x05, 0x16, 0x74, 0x09, 0x07, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// MsgClient is the client API for Msg service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type MsgClient interface { + SetAirdropAllocations(ctx context.Context, in *MsgSetAirdropAllocations, opts ...grpc.CallOption) (*MsgSetAirdropAllocationsResponse, error) + ClaimFreeAmount(ctx context.Context, in *MsgClaimFreeAmount, opts ...grpc.CallOption) (*MsgClaimFreeAmountResponse, error) + CreateAirdrop(ctx context.Context, in *MsgCreateAirdrop, opts ...grpc.CallOption) (*MsgCreateAirdropResponse, error) + DeleteAirdrop(ctx context.Context, in *MsgDeleteAirdrop, opts ...grpc.CallOption) (*MsgDeleteAirdropResponse, error) +} + +type msgClient struct { + cc grpc1.ClientConn +} + +func NewMsgClient(cc grpc1.ClientConn) MsgClient { + return &msgClient{cc} +} + +func (c *msgClient) SetAirdropAllocations(ctx context.Context, in *MsgSetAirdropAllocations, opts ...grpc.CallOption) (*MsgSetAirdropAllocationsResponse, error) { + out := new(MsgSetAirdropAllocationsResponse) + err := c.cc.Invoke(ctx, "/symphony.claim.Msg/SetAirdropAllocations", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) ClaimFreeAmount(ctx context.Context, in *MsgClaimFreeAmount, opts ...grpc.CallOption) (*MsgClaimFreeAmountResponse, error) { + out := new(MsgClaimFreeAmountResponse) + err := c.cc.Invoke(ctx, "/symphony.claim.Msg/ClaimFreeAmount", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) CreateAirdrop(ctx context.Context, in *MsgCreateAirdrop, opts ...grpc.CallOption) (*MsgCreateAirdropResponse, error) { + out := new(MsgCreateAirdropResponse) + err := c.cc.Invoke(ctx, "/symphony.claim.Msg/CreateAirdrop", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *msgClient) DeleteAirdrop(ctx context.Context, in *MsgDeleteAirdrop, opts ...grpc.CallOption) (*MsgDeleteAirdropResponse, error) { + out := new(MsgDeleteAirdropResponse) + err := c.cc.Invoke(ctx, "/symphony.claim.Msg/DeleteAirdrop", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// MsgServer is the server API for Msg service. +type MsgServer interface { + SetAirdropAllocations(context.Context, *MsgSetAirdropAllocations) (*MsgSetAirdropAllocationsResponse, error) + ClaimFreeAmount(context.Context, *MsgClaimFreeAmount) (*MsgClaimFreeAmountResponse, error) + CreateAirdrop(context.Context, *MsgCreateAirdrop) (*MsgCreateAirdropResponse, error) + DeleteAirdrop(context.Context, *MsgDeleteAirdrop) (*MsgDeleteAirdropResponse, error) +} + +// UnimplementedMsgServer can be embedded to have forward compatible implementations. +type UnimplementedMsgServer struct { +} + +func (*UnimplementedMsgServer) SetAirdropAllocations(ctx context.Context, req *MsgSetAirdropAllocations) (*MsgSetAirdropAllocationsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SetAirdropAllocations not implemented") +} +func (*UnimplementedMsgServer) ClaimFreeAmount(ctx context.Context, req *MsgClaimFreeAmount) (*MsgClaimFreeAmountResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ClaimFreeAmount not implemented") +} +func (*UnimplementedMsgServer) CreateAirdrop(ctx context.Context, req *MsgCreateAirdrop) (*MsgCreateAirdropResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method CreateAirdrop not implemented") +} +func (*UnimplementedMsgServer) DeleteAirdrop(ctx context.Context, req *MsgDeleteAirdrop) (*MsgDeleteAirdropResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method DeleteAirdrop not implemented") +} + +func RegisterMsgServer(s grpc1.Server, srv MsgServer) { + s.RegisterService(&_Msg_serviceDesc, srv) +} + +func _Msg_SetAirdropAllocations_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgSetAirdropAllocations) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).SetAirdropAllocations(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/symphony.claim.Msg/SetAirdropAllocations", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).SetAirdropAllocations(ctx, req.(*MsgSetAirdropAllocations)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_ClaimFreeAmount_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgClaimFreeAmount) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).ClaimFreeAmount(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/symphony.claim.Msg/ClaimFreeAmount", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).ClaimFreeAmount(ctx, req.(*MsgClaimFreeAmount)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_CreateAirdrop_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgCreateAirdrop) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).CreateAirdrop(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/symphony.claim.Msg/CreateAirdrop", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).CreateAirdrop(ctx, req.(*MsgCreateAirdrop)) + } + return interceptor(ctx, in, info, handler) +} + +func _Msg_DeleteAirdrop_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MsgDeleteAirdrop) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MsgServer).DeleteAirdrop(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/symphony.claim.Msg/DeleteAirdrop", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MsgServer).DeleteAirdrop(ctx, req.(*MsgDeleteAirdrop)) + } + return interceptor(ctx, in, info, handler) +} + +var _Msg_serviceDesc = grpc.ServiceDesc{ + ServiceName: "symphony.claim.Msg", + HandlerType: (*MsgServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "SetAirdropAllocations", + Handler: _Msg_SetAirdropAllocations_Handler, + }, + { + MethodName: "ClaimFreeAmount", + Handler: _Msg_ClaimFreeAmount_Handler, + }, + { + MethodName: "CreateAirdrop", + Handler: _Msg_CreateAirdrop_Handler, + }, + { + MethodName: "DeleteAirdrop", + Handler: _Msg_DeleteAirdrop_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "symphony/claim/tx.proto", +} + +func (m *MsgSetAirdropAllocations) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgSetAirdropAllocations) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSetAirdropAllocations) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Weights) > 0 { + for iNdEx := len(m.Weights) - 1; iNdEx >= 0; iNdEx-- { + { + size := m.Weights[iNdEx].Size() + i -= size + if _, err := m.Weights[iNdEx].MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + if len(m.Users) > 0 { + for iNdEx := len(m.Users) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Users[iNdEx]) + copy(dAtA[i:], m.Users[iNdEx]) + i = encodeVarintTx(dAtA, i, uint64(len(m.Users[iNdEx]))) + i-- + dAtA[i] = 0x1a + } + } + if len(m.AirdropIdentifier) > 0 { + i -= len(m.AirdropIdentifier) + copy(dAtA[i:], m.AirdropIdentifier) + i = encodeVarintTx(dAtA, i, uint64(len(m.AirdropIdentifier))) + i-- + dAtA[i] = 0x12 + } + if len(m.Allocator) > 0 { + i -= len(m.Allocator) + copy(dAtA[i:], m.Allocator) + i = encodeVarintTx(dAtA, i, uint64(len(m.Allocator))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgSetAirdropAllocationsResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgSetAirdropAllocationsResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgSetAirdropAllocationsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgClaimFreeAmount) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgClaimFreeAmount) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgClaimFreeAmount) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.User) > 0 { + i -= len(m.User) + copy(dAtA[i:], m.User) + i = encodeVarintTx(dAtA, i, uint64(len(m.User))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgClaimFreeAmountResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgClaimFreeAmountResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgClaimFreeAmountResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ClaimedAmount) > 0 { + for iNdEx := len(m.ClaimedAmount) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.ClaimedAmount[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTx(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + return len(dAtA) - i, nil +} + +func (m *MsgCreateAirdrop) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgCreateAirdrop) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgCreateAirdrop) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.AutopilotEnabled { + i-- + if m.AutopilotEnabled { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x38 + } + if len(m.ChainId) > 0 { + i -= len(m.ChainId) + copy(dAtA[i:], m.ChainId) + i = encodeVarintTx(dAtA, i, uint64(len(m.ChainId))) + i-- + dAtA[i] = 0x32 + } + if len(m.Denom) > 0 { + i -= len(m.Denom) + copy(dAtA[i:], m.Denom) + i = encodeVarintTx(dAtA, i, uint64(len(m.Denom))) + i-- + dAtA[i] = 0x2a + } + if m.Duration != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.Duration)) + i-- + dAtA[i] = 0x20 + } + if m.StartTime != 0 { + i = encodeVarintTx(dAtA, i, uint64(m.StartTime)) + i-- + dAtA[i] = 0x18 + } + if len(m.Identifier) > 0 { + i -= len(m.Identifier) + copy(dAtA[i:], m.Identifier) + i = encodeVarintTx(dAtA, i, uint64(len(m.Identifier))) + i-- + dAtA[i] = 0x12 + } + if len(m.Distributor) > 0 { + i -= len(m.Distributor) + copy(dAtA[i:], m.Distributor) + i = encodeVarintTx(dAtA, i, uint64(len(m.Distributor))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgCreateAirdropResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgCreateAirdropResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgCreateAirdropResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *MsgDeleteAirdrop) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgDeleteAirdrop) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgDeleteAirdrop) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Identifier) > 0 { + i -= len(m.Identifier) + copy(dAtA[i:], m.Identifier) + i = encodeVarintTx(dAtA, i, uint64(len(m.Identifier))) + i-- + dAtA[i] = 0x12 + } + if len(m.Distributor) > 0 { + i -= len(m.Distributor) + copy(dAtA[i:], m.Distributor) + i = encodeVarintTx(dAtA, i, uint64(len(m.Distributor))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *MsgDeleteAirdropResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MsgDeleteAirdropResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MsgDeleteAirdropResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func encodeVarintTx(dAtA []byte, offset int, v uint64) int { + offset -= sovTx(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *MsgSetAirdropAllocations) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Allocator) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.AirdropIdentifier) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if len(m.Users) > 0 { + for _, s := range m.Users { + l = len(s) + n += 1 + l + sovTx(uint64(l)) + } + } + if len(m.Weights) > 0 { + for _, e := range m.Weights { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } + return n +} + +func (m *MsgSetAirdropAllocationsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgClaimFreeAmount) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.User) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgClaimFreeAmountResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.ClaimedAmount) > 0 { + for _, e := range m.ClaimedAmount { + l = e.Size() + n += 1 + l + sovTx(uint64(l)) + } + } + return n +} + +func (m *MsgCreateAirdrop) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Distributor) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Identifier) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.StartTime != 0 { + n += 1 + sovTx(uint64(m.StartTime)) + } + if m.Duration != 0 { + n += 1 + sovTx(uint64(m.Duration)) + } + l = len(m.Denom) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.ChainId) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + if m.AutopilotEnabled { + n += 2 + } + return n +} + +func (m *MsgCreateAirdropResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *MsgDeleteAirdrop) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Distributor) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + l = len(m.Identifier) + if l > 0 { + n += 1 + l + sovTx(uint64(l)) + } + return n +} + +func (m *MsgDeleteAirdropResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func sovTx(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozTx(x uint64) (n int) { + return sovTx(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *MsgSetAirdropAllocations) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgSetAirdropAllocations: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSetAirdropAllocations: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Allocator", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Allocator = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AirdropIdentifier", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AirdropIdentifier = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Users", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Users = append(m.Users, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Weights", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + var v cosmossdk_io_math.LegacyDec + m.Weights = append(m.Weights, v) + if err := m.Weights[len(m.Weights)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgSetAirdropAllocationsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgSetAirdropAllocationsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgSetAirdropAllocationsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgClaimFreeAmount) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgClaimFreeAmount: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgClaimFreeAmount: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field User", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.User = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgClaimFreeAmountResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgClaimFreeAmountResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgClaimFreeAmountResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ClaimedAmount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ClaimedAmount = append(m.ClaimedAmount, types.Coin{}) + if err := m.ClaimedAmount[len(m.ClaimedAmount)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgCreateAirdrop) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgCreateAirdrop: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgCreateAirdrop: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Distributor", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Distributor = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Identifier", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Identifier = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field StartTime", wireType) + } + m.StartTime = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.StartTime |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Duration", wireType) + } + m.Duration = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Duration |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Denom = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field AutopilotEnabled", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.AutopilotEnabled = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgCreateAirdropResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgCreateAirdropResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgCreateAirdropResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgDeleteAirdrop) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgDeleteAirdrop: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgDeleteAirdrop: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Distributor", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Distributor = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Identifier", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTx + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTx + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Identifier = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MsgDeleteAirdropResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTx + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MsgDeleteAirdropResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MsgDeleteAirdropResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipTx(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTx + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipTx(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTx + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthTx + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupTx + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthTx + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthTx = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTx = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupTx = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/claim/vesting/exported/exported.go b/x/claim/vesting/exported/exported.go new file mode 100644 index 00000000000..bfc15f7175c --- /dev/null +++ b/x/claim/vesting/exported/exported.go @@ -0,0 +1,40 @@ +package exported + +import ( + "time" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// VestingAccount defines an account type that vests coins via a vesting schedule. +type VestingAccount interface { + sdk.AccountI + + // LockedCoins returns the set of coins that are not spendable (i.e. locked), + // defined as the vesting coins that are not delegated. + // + // To get spendable coins of a vesting account, first the total balance must + // be retrieved and the locked tokens can be subtracted from the total balance. + // Note, the spendable balance can be negative. + LockedCoins(blockTime time.Time) sdk.Coins + + // TrackDelegation performs internal vesting accounting necessary when + // delegating from a vesting account. It accepts the current block time, the + // delegation amount and balance of all coins whose denomination exists in + // the account's original vesting balance. + TrackDelegation(blockTime time.Time, balance, amount sdk.Coins) + + // TrackUndelegation performs internal vesting accounting necessary when a + // vesting account performs an undelegation. + TrackUndelegation(amount sdk.Coins) + + GetVestedCoins(blockTime time.Time) sdk.Coins + GetVestingCoins(blockTime time.Time) sdk.Coins + + GetStartTime() int64 + GetEndTime() int64 + + GetOriginalVesting() sdk.Coins + GetDelegatedFree() sdk.Coins + GetDelegatedVesting() sdk.Coins +} diff --git a/x/claim/vesting/module.go b/x/claim/vesting/module.go new file mode 100644 index 00000000000..908daca3004 --- /dev/null +++ b/x/claim/vesting/module.go @@ -0,0 +1,122 @@ +package vesting + +import ( + "encoding/json" + + "cosmossdk.io/core/appmodule" + "github.com/gorilla/mux" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client" + "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/module" + "github.com/cosmos/cosmos-sdk/x/auth/keeper" + + "github.com/osmosis-labs/osmosis/v27/x/claim/vesting/types" +) + +var ( + _ module.AppModuleBasic = AppModuleBasic{} + _ module.HasGenesisBasics = AppModuleBasic{} + + _ appmodule.AppModule = AppModule{} + + _ module.HasConsensusVersion = AppModule{} + _ module.HasGenesis = AppModule{} + _ module.HasServices = AppModule{} +) + +// AppModuleBasic defines the basic application module used by the sub-vesting +// module. The module itself contain no special logic or state other than message +// handling. +type AppModuleBasic struct{} + +// Name returns the module's name. +func (AppModuleBasic) Name() string { + return types.ModuleName +} + +// RegisterCodec registers the module's types with the given codec. +func (AppModuleBasic) RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + types.RegisterLegacyAminoCodec(cdc) +} + +// RegisterInterfaces registers the module's interfaces and implementations with +// the given interface registry. +func (AppModuleBasic) RegisterInterfaces(registry codectypes.InterfaceRegistry) { + types.RegisterInterfaces(registry) +} + +// DefaultGenesis returns the module's default genesis state as raw bytes. +func (AppModuleBasic) DefaultGenesis(_ codec.JSONCodec) json.RawMessage { + return []byte("{}") +} + +// ValidateGenesis performs genesis state validation. Currently, this is a no-op. +func (AppModuleBasic) ValidateGenesis(_ codec.JSONCodec, _ client.TxEncodingConfig, bz json.RawMessage) error { + return nil +} + +// RegisterRESTRoutes registers module's REST handlers. Currently, this is a no-op. +func (AppModuleBasic) RegisterRESTRoutes(_ client.Context, _ *mux.Router) {} + +// RegisterGRPCGatewayRoutes registers the module's gRPC Gateway routes. Currently, this +// is a no-op. +func (a AppModuleBasic) RegisterGRPCGatewayRoutes(_ client.Context, _ *runtime.ServeMux) {} + +// GetTxCmd returns the root tx command for the auth module. +func (AppModuleBasic) GetTxCmd() *cobra.Command { + return nil +} + +// GetQueryCmd returns the module's root query command. Currently, this is a no-op. +func (AppModuleBasic) GetQueryCmd() *cobra.Command { + return nil +} + +// AppModule extends the AppModuleBasic implementation by implementing the +// AppModule interface. +type AppModule struct { + AppModuleBasic + + accountKeeper keeper.AccountKeeper + bankKeeper types.BankKeeper +} + +func NewAppModule(ak keeper.AccountKeeper, bk types.BankKeeper) AppModule { + return AppModule{ + AppModuleBasic: AppModuleBasic{}, + accountKeeper: ak, + bankKeeper: bk, + } +} + +// RegisterInvariants performs a no-op; there are no invariants to enforce. +func (AppModule) RegisterInvariants(_ sdk.InvariantRegistry) {} + +// QuerierRoute returns an empty string as the module contains no query +// functionality. +func (AppModule) QuerierRoute() string { return "" } + +// RegisterServices registers module services. +func (am AppModule) RegisterServices(cfg module.Configurator) {} + +// InitGenesis performs a no-op. +func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, gs json.RawMessage) {} + +// ExportGenesis is always empty, as InitGenesis does nothing either. +func (am AppModule) ExportGenesis(_ sdk.Context, cdc codec.JSONCodec) json.RawMessage { + return am.DefaultGenesis(cdc) +} + +// ConsensusVersion implements AppModule/ConsensusVersion. +func (AppModule) ConsensusVersion() uint64 { return 1 } + +// IsOnePerModuleType implements the depinject.OnePerModuleType interface. +func (am AppModule) IsOnePerModuleType() {} + +// IsAppModule implements the appmodule.AppModule interface. +func (am AppModule) IsAppModule() {} diff --git a/x/claim/vesting/types/codec.go b/x/claim/vesting/types/codec.go new file mode 100644 index 00000000000..70c34861fa8 --- /dev/null +++ b/x/claim/vesting/types/codec.go @@ -0,0 +1,39 @@ +package types + +import ( + "github.com/cosmos/cosmos-sdk/codec" + "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + + "github.com/osmosis-labs/osmosis/v27/x/claim/vesting/exported" +) + +// RegisterLegacyAminoCodec registers the vesting interfaces and concrete types on the +// provided LegacyAmino codec. These types are used for Amino JSON serialization +func RegisterLegacyAminoCodec(cdc *codec.LegacyAmino) { + cdc.RegisterInterface((*exported.VestingAccount)(nil), nil) + cdc.RegisterConcrete(&StridePeriodicVestingAccount{}, "cosmos-sdk/StridePeriodicVestingAccount", nil) +} + +// RegisterInterface associates protoName with AccountI and VestingAccount +// Interfaces and creates a registry of it's concrete implementations +func RegisterInterfaces(registry types.InterfaceRegistry) { + registry.RegisterInterface( + "stride.vesting.v1beta1.VestingAccount", + (*exported.VestingAccount)(nil), + &StridePeriodicVestingAccount{}, + ) + + registry.RegisterImplementations( + (*sdk.AccountI)(nil), + &BaseVestingAccount{}, + &StridePeriodicVestingAccount{}, + ) + + registry.RegisterImplementations( + (*authtypes.GenesisAccount)(nil), + &BaseVestingAccount{}, + &StridePeriodicVestingAccount{}, + ) +} diff --git a/x/claim/vesting/types/common_test.go b/x/claim/vesting/types/common_test.go new file mode 100644 index 00000000000..5a2972f3a84 --- /dev/null +++ b/x/claim/vesting/types/common_test.go @@ -0,0 +1,9 @@ +package types_test + +import ( + strideApp "github.com/osmosis-labs/osmosis/v27/app" +) + +var ( + app = strideApp.InitStrideTestApp(true) +) diff --git a/x/claim/vesting/types/constants.go b/x/claim/vesting/types/constants.go new file mode 100644 index 00000000000..17f6e919362 --- /dev/null +++ b/x/claim/vesting/types/constants.go @@ -0,0 +1,12 @@ +package types + +const ( + // ModuleName defines the module's name. + ModuleName = "stridevesting" + + // AttributeValueCategory is an alias for the message event value. + AttributeValueCategory = ModuleName + + // RouterKey defines the module's message routing key + RouterKey = ModuleName +) diff --git a/x/claim/vesting/types/expected_keepers.go b/x/claim/vesting/types/expected_keepers.go new file mode 100644 index 00000000000..95abe25b2f7 --- /dev/null +++ b/x/claim/vesting/types/expected_keepers.go @@ -0,0 +1,15 @@ +package types + +import ( + context "context" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// BankKeeper defines the expected interface contract the vesting module requires +// for creating vesting accounts with funds. +type BankKeeper interface { + IsSendEnabledCoins(ctx context.Context, coins ...sdk.Coin) error + SendCoins(ctx context.Context, fromAddr sdk.AccAddress, toAddr sdk.AccAddress, amt sdk.Coins) error + BlockedAddr(addr sdk.AccAddress) bool +} diff --git a/x/claim/vesting/types/msgs.go b/x/claim/vesting/types/msgs.go new file mode 100644 index 00000000000..ab1254f4c2b --- /dev/null +++ b/x/claim/vesting/types/msgs.go @@ -0,0 +1 @@ +package types diff --git a/x/claim/vesting/types/period.go b/x/claim/vesting/types/period.go new file mode 100644 index 00000000000..eb686522eae --- /dev/null +++ b/x/claim/vesting/types/period.go @@ -0,0 +1,60 @@ +package types + +import ( + "fmt" + "strings" + "time" + + yaml "gopkg.in/yaml.v2" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// Periods stores all vesting periods passed as part of a StridePeriodicVestingAccount +type Periods []Period + +// Duration is converts the period Length from seconds to a time.Duration +func (p Period) Duration() time.Duration { + return time.Duration(p.Length) * time.Second +} + +// String implements the fmt.Stringer interface +func (p Period) String() string { + out, _ := yaml.Marshal(p) + return string(out) +} + +// TotalLength return the total length in seconds for a period +func (p Periods) TotalLength() int64 { + var total int64 + for _, period := range p { + total += period.Length + } + return total +} + +// TotalDuration returns the total duration of the period +func (p Periods) TotalDuration() time.Duration { + len := p.TotalLength() + return time.Duration(len) * time.Second +} + +// TotalDuration returns the sum of coins for the period +func (p Periods) TotalAmount() sdk.Coins { + total := sdk.Coins{} + for _, period := range p { + total = total.Add(period.Amount...) + } + return total +} + +// String implements the fmt.Stringer interface +func (p Periods) String() string { + periodsListString := make([]string, len(p)) + for _, period := range p { + periodsListString = append(periodsListString, period.String()) + } + + return strings.TrimSpace(fmt.Sprintf(`Vesting Periods: + %s`, strings.Join(periodsListString, ", "))) +} diff --git a/x/claim/vesting/types/test_common.go b/x/claim/vesting/types/test_common.go new file mode 100644 index 00000000000..0e22ea2352d --- /dev/null +++ b/x/claim/vesting/types/test_common.go @@ -0,0 +1,29 @@ +package types + +import ( + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" + "github.com/cosmos/cosmos-sdk/testutil/testdata" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// NewTestMsg generates a test message +func NewTestMsg(addrs ...sdk.AccAddress) *testdata.TestMsg { + return testdata.NewTestMsg(addrs...) +} + +// NewTestCoins coins to more than cover the fee +func NewTestCoins() sdk.Coins { + return sdk.Coins{ + sdk.NewInt64Coin("atom", 10000000), + } +} + +// KeyTestPubAddr generates a test key pair +func KeyTestPubAddr() (cryptotypes.PrivKey, cryptotypes.PubKey, sdk.AccAddress) { + key := secp256k1.GenPrivKey() + pub := key.PubKey() + addr := sdk.AccAddress(pub.Address()) + return key, pub, addr +} diff --git a/x/claim/vesting/types/vesting.pb.go b/x/claim/vesting/types/vesting.pb.go new file mode 100644 index 00000000000..1573dd32997 --- /dev/null +++ b/x/claim/vesting/types/vesting.pb.go @@ -0,0 +1,1058 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: symphony/vesting/vesting.proto + +package types + +import ( + fmt "fmt" + github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" + types1 "github.com/cosmos/cosmos-sdk/types" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + types "github.com/cosmos/cosmos-sdk/x/auth/types" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// BaseVestingAccount implements the VestingAccount interface. It contains all +// the necessary fields needed for any vesting account implementation. +type BaseVestingAccount struct { + *types.BaseAccount `protobuf:"bytes,1,opt,name=base_account,json=baseAccount,proto3,embedded=base_account" json:"base_account,omitempty"` + OriginalVesting github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,2,rep,name=original_vesting,json=originalVesting,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"original_vesting" yaml:"original_vesting"` + DelegatedFree github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,3,rep,name=delegated_free,json=delegatedFree,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"delegated_free" yaml:"delegated_free"` + DelegatedVesting github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,4,rep,name=delegated_vesting,json=delegatedVesting,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"delegated_vesting" yaml:"delegated_vesting"` + EndTime int64 `protobuf:"varint,5,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty" yaml:"end_time"` +} + +func (m *BaseVestingAccount) Reset() { *m = BaseVestingAccount{} } +func (*BaseVestingAccount) ProtoMessage() {} +func (*BaseVestingAccount) Descriptor() ([]byte, []int) { + return fileDescriptor_54d44f6c29cd3df2, []int{0} +} +func (m *BaseVestingAccount) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *BaseVestingAccount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_BaseVestingAccount.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *BaseVestingAccount) XXX_Merge(src proto.Message) { + xxx_messageInfo_BaseVestingAccount.Merge(m, src) +} +func (m *BaseVestingAccount) XXX_Size() int { + return m.Size() +} +func (m *BaseVestingAccount) XXX_DiscardUnknown() { + xxx_messageInfo_BaseVestingAccount.DiscardUnknown(m) +} + +var xxx_messageInfo_BaseVestingAccount proto.InternalMessageInfo + +// Period defines a length of time and amount of coins that will vest. +type Period struct { + StartTime int64 `protobuf:"varint,1,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` + Length int64 `protobuf:"varint,2,opt,name=length,proto3" json:"length,omitempty"` + Amount github_com_cosmos_cosmos_sdk_types.Coins `protobuf:"bytes,3,rep,name=amount,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coins" json:"amount"` + ActionType int32 `protobuf:"varint,4,opt,name=action_type,json=actionType,proto3" json:"action_type,omitempty"` +} + +func (m *Period) Reset() { *m = Period{} } +func (*Period) ProtoMessage() {} +func (*Period) Descriptor() ([]byte, []int) { + return fileDescriptor_54d44f6c29cd3df2, []int{1} +} +func (m *Period) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Period) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Period.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Period) XXX_Merge(src proto.Message) { + xxx_messageInfo_Period.Merge(m, src) +} +func (m *Period) XXX_Size() int { + return m.Size() +} +func (m *Period) XXX_DiscardUnknown() { + xxx_messageInfo_Period.DiscardUnknown(m) +} + +var xxx_messageInfo_Period proto.InternalMessageInfo + +func (m *Period) GetStartTime() int64 { + if m != nil { + return m.StartTime + } + return 0 +} + +func (m *Period) GetLength() int64 { + if m != nil { + return m.Length + } + return 0 +} + +func (m *Period) GetAmount() github_com_cosmos_cosmos_sdk_types.Coins { + if m != nil { + return m.Amount + } + return nil +} + +func (m *Period) GetActionType() int32 { + if m != nil { + return m.ActionType + } + return 0 +} + +// StridePeriodicVestingAccount implements the VestingAccount interface. It +// periodically vests by unlocking coins during each specified period. +type StridePeriodicVestingAccount struct { + *BaseVestingAccount `protobuf:"bytes,1,opt,name=base_vesting_account,json=baseVestingAccount,proto3,embedded=base_vesting_account" json:"base_vesting_account,omitempty"` + VestingPeriods []Period `protobuf:"bytes,3,rep,name=vesting_periods,json=vestingPeriods,proto3" json:"vesting_periods" yaml:"vesting_periods"` +} + +func (m *StridePeriodicVestingAccount) Reset() { *m = StridePeriodicVestingAccount{} } +func (*StridePeriodicVestingAccount) ProtoMessage() {} +func (*StridePeriodicVestingAccount) Descriptor() ([]byte, []int) { + return fileDescriptor_54d44f6c29cd3df2, []int{2} +} +func (m *StridePeriodicVestingAccount) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *StridePeriodicVestingAccount) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_StridePeriodicVestingAccount.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *StridePeriodicVestingAccount) XXX_Merge(src proto.Message) { + xxx_messageInfo_StridePeriodicVestingAccount.Merge(m, src) +} +func (m *StridePeriodicVestingAccount) XXX_Size() int { + return m.Size() +} +func (m *StridePeriodicVestingAccount) XXX_DiscardUnknown() { + xxx_messageInfo_StridePeriodicVestingAccount.DiscardUnknown(m) +} + +var xxx_messageInfo_StridePeriodicVestingAccount proto.InternalMessageInfo + +func init() { + proto.RegisterType((*BaseVestingAccount)(nil), "symphony.vesting.BaseVestingAccount") + proto.RegisterType((*Period)(nil), "symphony.vesting.Period") + proto.RegisterType((*StridePeriodicVestingAccount)(nil), "symphony.vesting.StridePeriodicVestingAccount") +} + +func init() { proto.RegisterFile("symphony/vesting/vesting.proto", fileDescriptor_54d44f6c29cd3df2) } + +var fileDescriptor_54d44f6c29cd3df2 = []byte{ + // 621 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x4f, 0x6b, 0xd4, 0x40, + 0x14, 0xcf, 0x74, 0xb7, 0x6b, 0x9d, 0xd5, 0xfe, 0x89, 0xb5, 0xc6, 0xa2, 0xc9, 0x12, 0x3c, 0xac, + 0x42, 0x13, 0x5b, 0x41, 0x71, 0x6f, 0x46, 0x10, 0x8a, 0x1e, 0x24, 0x2d, 0x1e, 0x44, 0x58, 0x26, + 0xc9, 0x98, 0x1d, 0x4c, 0x32, 0x4b, 0x66, 0x5a, 0xdc, 0x6f, 0x20, 0x7a, 0x51, 0x10, 0xf4, 0xd8, + 0xb3, 0x27, 0x3f, 0x46, 0xc1, 0x4b, 0xf1, 0xe4, 0x69, 0x95, 0xdd, 0x83, 0xf7, 0x7e, 0x02, 0xc9, + 0xcc, 0x64, 0x5b, 0xb3, 0xc2, 0x52, 0x2f, 0x49, 0xde, 0x7b, 0xf3, 0xfb, 0xbd, 0xdf, 0x7b, 0x6f, + 0x5e, 0xa0, 0xc9, 0x06, 0x69, 0xbf, 0x47, 0xb3, 0x81, 0xbb, 0x8f, 0x19, 0x27, 0x59, 0x5c, 0xbe, + 0x9d, 0x7e, 0x4e, 0x39, 0xd5, 0x97, 0xcb, 0xb8, 0xa3, 0xfc, 0xeb, 0x2b, 0x28, 0x25, 0x19, 0x75, + 0xc5, 0x53, 0x1e, 0x5a, 0x37, 0x43, 0xca, 0x52, 0xca, 0x5c, 0xb4, 0xc7, 0x7b, 0xee, 0xfe, 0x66, + 0x80, 0x39, 0xda, 0x14, 0x46, 0x25, 0x1e, 0x20, 0x86, 0x27, 0xf1, 0x90, 0x92, 0x4c, 0xc5, 0x57, + 0x63, 0x1a, 0x53, 0xf1, 0xe9, 0x16, 0x5f, 0xd2, 0x6b, 0x7f, 0xaf, 0x43, 0xdd, 0x43, 0x0c, 0x3f, + 0x93, 0x89, 0x1f, 0x84, 0x21, 0xdd, 0xcb, 0xb8, 0xbe, 0x0d, 0x2f, 0x14, 0x3c, 0x5d, 0x24, 0x6d, + 0x03, 0xb4, 0x40, 0xbb, 0xb9, 0xd5, 0x72, 0x64, 0x0e, 0x47, 0xa4, 0x55, 0x39, 0x9c, 0x02, 0xae, + 0x70, 0x5e, 0xfd, 0x68, 0x68, 0x01, 0xbf, 0x19, 0x9c, 0xb8, 0xf4, 0x0f, 0x00, 0x2e, 0xd3, 0x9c, + 0xc4, 0x24, 0x43, 0x49, 0x57, 0xd5, 0x67, 0xcc, 0xb5, 0x6a, 0xed, 0xe6, 0xd6, 0xd5, 0x92, 0xaf, + 0x38, 0x3f, 0xe1, 0x7b, 0x48, 0x49, 0xe6, 0x3d, 0x3e, 0x1c, 0x5a, 0xda, 0xf1, 0xd0, 0xba, 0x32, + 0x40, 0x69, 0xd2, 0xb1, 0xab, 0x04, 0xf6, 0x97, 0x9f, 0x56, 0x3b, 0x26, 0xbc, 0xb7, 0x17, 0x38, + 0x21, 0x4d, 0x5d, 0x55, 0xbb, 0x7c, 0x6d, 0xb0, 0xe8, 0x95, 0xcb, 0x07, 0x7d, 0xcc, 0x04, 0x17, + 0xf3, 0x97, 0x4a, 0xb8, 0xaa, 0x52, 0x7f, 0x07, 0xe0, 0x62, 0x84, 0x13, 0x1c, 0x23, 0x8e, 0xa3, + 0xee, 0xcb, 0x1c, 0x63, 0xa3, 0x36, 0x4b, 0xd1, 0xb6, 0x52, 0x74, 0x59, 0x2a, 0xfa, 0x1b, 0x7e, + 0x36, 0x3d, 0x17, 0x27, 0xe0, 0x47, 0x39, 0xc6, 0xfa, 0x47, 0x00, 0x57, 0x4e, 0xe8, 0xca, 0x16, + 0xd5, 0x67, 0x09, 0x7a, 0xa2, 0x04, 0x19, 0x55, 0x41, 0xff, 0xd5, 0xa3, 0xe5, 0x09, 0xbe, 0x6c, + 0x92, 0x03, 0x17, 0x70, 0x16, 0x75, 0x39, 0x49, 0xb1, 0x31, 0xdf, 0x02, 0xed, 0x9a, 0x77, 0xe9, + 0x78, 0x68, 0x2d, 0xc9, 0x6c, 0x65, 0xc4, 0xf6, 0xcf, 0xe1, 0x2c, 0xda, 0x25, 0x29, 0xee, 0x2c, + 0xbc, 0x39, 0xb0, 0xb4, 0xcf, 0x07, 0x96, 0x66, 0x7f, 0x03, 0xb0, 0xf1, 0x14, 0xe7, 0x84, 0x46, + 0xfa, 0x75, 0x08, 0x19, 0x47, 0x39, 0x97, 0x34, 0xc5, 0x35, 0xaa, 0xf9, 0xe7, 0x85, 0xa7, 0xc0, + 0xe8, 0x6b, 0xb0, 0x91, 0xe0, 0x2c, 0xe6, 0x3d, 0x63, 0x4e, 0x84, 0x94, 0xa5, 0x87, 0xb0, 0x81, + 0x52, 0x71, 0xf3, 0x66, 0xce, 0xe5, 0x76, 0xd1, 0x86, 0x33, 0x95, 0xaa, 0xa8, 0x75, 0x0b, 0x36, + 0x51, 0xc8, 0x09, 0xcd, 0xba, 0x45, 0xd4, 0xa8, 0xb7, 0x40, 0x7b, 0xde, 0x87, 0xd2, 0xb5, 0x3b, + 0xe8, 0xe3, 0x4e, 0x5d, 0x54, 0xf3, 0x69, 0x0e, 0x5e, 0xdb, 0xe1, 0x39, 0x89, 0xb0, 0xac, 0x89, + 0x84, 0x95, 0x65, 0x79, 0x01, 0x57, 0xc5, 0xb2, 0xa8, 0xbe, 0x57, 0x96, 0xe6, 0x86, 0x53, 0xdd, + 0x6e, 0x67, 0x7a, 0xe1, 0xd4, 0xe2, 0xe8, 0xc1, 0xf4, 0x2a, 0x22, 0xb8, 0x54, 0x12, 0xf7, 0x45, + 0x7e, 0xa6, 0x7a, 0x62, 0x4c, 0x13, 0x4b, 0x81, 0x9e, 0xa9, 0x6e, 0xc6, 0x9a, 0x9c, 0x55, 0x05, + 0x6e, 0xfb, 0x8b, 0xca, 0x23, 0x8f, 0xb3, 0xce, 0xdd, 0x72, 0x72, 0x6f, 0x7f, 0x7f, 0xbd, 0x75, + 0xf3, 0x54, 0xd7, 0x76, 0x54, 0x82, 0x7f, 0x17, 0xee, 0xed, 0x1c, 0x8e, 0x4c, 0x70, 0x34, 0x32, + 0xc1, 0xaf, 0x91, 0x09, 0xde, 0x8f, 0x4d, 0xed, 0x68, 0x6c, 0x6a, 0x3f, 0xc6, 0xa6, 0xf6, 0xfc, + 0xfe, 0xa9, 0x61, 0x08, 0x3a, 0xc2, 0x36, 0x12, 0x14, 0xb0, 0xd2, 0x70, 0xf7, 0xb7, 0xee, 0xb9, + 0xaf, 0xdd, 0x30, 0x41, 0x24, 0x9d, 0xfc, 0x14, 0xc5, 0x8c, 0x82, 0x86, 0xf8, 0x31, 0xdd, 0xf9, + 0x13, 0x00, 0x00, 0xff, 0xff, 0xfb, 0x8e, 0x77, 0xa4, 0x35, 0x05, 0x00, 0x00, +} + +func (m *BaseVestingAccount) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *BaseVestingAccount) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *BaseVestingAccount) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.EndTime != 0 { + i = encodeVarintVesting(dAtA, i, uint64(m.EndTime)) + i-- + dAtA[i] = 0x28 + } + if len(m.DelegatedVesting) > 0 { + for iNdEx := len(m.DelegatedVesting) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.DelegatedVesting[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintVesting(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + } + if len(m.DelegatedFree) > 0 { + for iNdEx := len(m.DelegatedFree) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.DelegatedFree[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintVesting(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if len(m.OriginalVesting) > 0 { + for iNdEx := len(m.OriginalVesting) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.OriginalVesting[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintVesting(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if m.BaseAccount != nil { + { + size, err := m.BaseAccount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintVesting(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Period) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Period) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Period) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ActionType != 0 { + i = encodeVarintVesting(dAtA, i, uint64(m.ActionType)) + i-- + dAtA[i] = 0x20 + } + if len(m.Amount) > 0 { + for iNdEx := len(m.Amount) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Amount[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintVesting(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if m.Length != 0 { + i = encodeVarintVesting(dAtA, i, uint64(m.Length)) + i-- + dAtA[i] = 0x10 + } + if m.StartTime != 0 { + i = encodeVarintVesting(dAtA, i, uint64(m.StartTime)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *StridePeriodicVestingAccount) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *StridePeriodicVestingAccount) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *StridePeriodicVestingAccount) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.VestingPeriods) > 0 { + for iNdEx := len(m.VestingPeriods) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.VestingPeriods[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintVesting(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + } + if m.BaseVestingAccount != nil { + { + size, err := m.BaseVestingAccount.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintVesting(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func encodeVarintVesting(dAtA []byte, offset int, v uint64) int { + offset -= sovVesting(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *BaseVestingAccount) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.BaseAccount != nil { + l = m.BaseAccount.Size() + n += 1 + l + sovVesting(uint64(l)) + } + if len(m.OriginalVesting) > 0 { + for _, e := range m.OriginalVesting { + l = e.Size() + n += 1 + l + sovVesting(uint64(l)) + } + } + if len(m.DelegatedFree) > 0 { + for _, e := range m.DelegatedFree { + l = e.Size() + n += 1 + l + sovVesting(uint64(l)) + } + } + if len(m.DelegatedVesting) > 0 { + for _, e := range m.DelegatedVesting { + l = e.Size() + n += 1 + l + sovVesting(uint64(l)) + } + } + if m.EndTime != 0 { + n += 1 + sovVesting(uint64(m.EndTime)) + } + return n +} + +func (m *Period) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.StartTime != 0 { + n += 1 + sovVesting(uint64(m.StartTime)) + } + if m.Length != 0 { + n += 1 + sovVesting(uint64(m.Length)) + } + if len(m.Amount) > 0 { + for _, e := range m.Amount { + l = e.Size() + n += 1 + l + sovVesting(uint64(l)) + } + } + if m.ActionType != 0 { + n += 1 + sovVesting(uint64(m.ActionType)) + } + return n +} + +func (m *StridePeriodicVestingAccount) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.BaseVestingAccount != nil { + l = m.BaseVestingAccount.Size() + n += 1 + l + sovVesting(uint64(l)) + } + if len(m.VestingPeriods) > 0 { + for _, e := range m.VestingPeriods { + l = e.Size() + n += 1 + l + sovVesting(uint64(l)) + } + } + return n +} + +func sovVesting(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozVesting(x uint64) (n int) { + return sovVesting(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *BaseVestingAccount) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVesting + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: BaseVestingAccount: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: BaseVestingAccount: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BaseAccount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVesting + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthVesting + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthVesting + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.BaseAccount == nil { + m.BaseAccount = &types.BaseAccount{} + } + if err := m.BaseAccount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OriginalVesting", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVesting + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthVesting + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthVesting + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OriginalVesting = append(m.OriginalVesting, types1.Coin{}) + if err := m.OriginalVesting[len(m.OriginalVesting)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DelegatedFree", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVesting + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthVesting + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthVesting + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DelegatedFree = append(m.DelegatedFree, types1.Coin{}) + if err := m.DelegatedFree[len(m.DelegatedFree)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DelegatedVesting", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVesting + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthVesting + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthVesting + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DelegatedVesting = append(m.DelegatedVesting, types1.Coin{}) + if err := m.DelegatedVesting[len(m.DelegatedVesting)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EndTime", wireType) + } + m.EndTime = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVesting + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.EndTime |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipVesting(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthVesting + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Period) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVesting + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Period: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Period: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field StartTime", wireType) + } + m.StartTime = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVesting + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.StartTime |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Length", wireType) + } + m.Length = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVesting + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Length |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVesting + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthVesting + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthVesting + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Amount = append(m.Amount, types1.Coin{}) + if err := m.Amount[len(m.Amount)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ActionType", wireType) + } + m.ActionType = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVesting + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ActionType |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipVesting(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthVesting + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *StridePeriodicVestingAccount) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVesting + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: StridePeriodicVestingAccount: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: StridePeriodicVestingAccount: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BaseVestingAccount", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVesting + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthVesting + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthVesting + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.BaseVestingAccount == nil { + m.BaseVestingAccount = &BaseVestingAccount{} + } + if err := m.BaseVestingAccount.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field VestingPeriods", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVesting + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthVesting + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthVesting + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.VestingPeriods = append(m.VestingPeriods, Period{}) + if err := m.VestingPeriods[len(m.VestingPeriods)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipVesting(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthVesting + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipVesting(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowVesting + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowVesting + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowVesting + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthVesting + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupVesting + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthVesting + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthVesting = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowVesting = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupVesting = fmt.Errorf("proto: unexpected end of group") +) diff --git a/x/claim/vesting/types/vesting_account.go b/x/claim/vesting/types/vesting_account.go new file mode 100644 index 00000000000..52a4f4cc2c2 --- /dev/null +++ b/x/claim/vesting/types/vesting_account.go @@ -0,0 +1,358 @@ +package types + +import ( + "errors" + "time" + + sdkmath "cosmossdk.io/math" + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + yaml "gopkg.in/yaml.v2" + + "github.com/osmosis-labs/osmosis/v27/utils" + vestexported "github.com/osmosis-labs/osmosis/v27/x/claim/vesting/exported" +) + +// Compile-time type assertions +var ( + _ sdk.AccountI = (*BaseVestingAccount)(nil) + _ vestexported.VestingAccount = (*StridePeriodicVestingAccount)(nil) +) + +// Base Vesting Account + +// NewBaseVestingAccount creates a new BaseVestingAccount object. It is the +// callers responsibility to ensure the base account has sufficient funds with +// regards to the original vesting amount. +func NewBaseVestingAccount(baseAccount *authtypes.BaseAccount, originalVesting sdk.Coins, endTime int64) *BaseVestingAccount { + return &BaseVestingAccount{ + BaseAccount: baseAccount, + OriginalVesting: originalVesting, + DelegatedFree: sdk.NewCoins(), + DelegatedVesting: sdk.NewCoins(), + EndTime: endTime, + } +} + +// LockedCoinsFromVesting returns all the coins that are not spendable (i.e. locked) +// for a vesting account given the current vesting coins. If no coins are locked, +// an empty slice of Coins is returned. +// +// CONTRACT: Delegated vesting coins and vestingCoins must be sorted. +func (bva BaseVestingAccount) LockedCoinsFromVesting(vestingCoins sdk.Coins) sdk.Coins { + lockedCoins := vestingCoins.Sub(vestingCoins.Min(bva.DelegatedVesting)...) + if lockedCoins == nil { + return sdk.Coins{} + } + return lockedCoins +} + +// TrackDelegation tracks a delegation amount for any given vesting account type +// given the amount of coins currently vesting and the current account balance +// of the delegation denominations. +// +// CONTRACT: The account's coins, delegation coins, vesting coins, and delegated +// vesting coins must be sorted. +func (bva *BaseVestingAccount) TrackDelegation(balance, vestingCoins, amount sdk.Coins) { + for _, coin := range amount { + baseAmt := balance.AmountOf(coin.Denom) + vestingAmt := vestingCoins.AmountOf(coin.Denom) + delVestingAmt := bva.DelegatedVesting.AmountOf(coin.Denom) + + // Panic if the delegation amount is zero or if the base coins does not + // exceed the desired delegation amount. + if coin.Amount.IsZero() || baseAmt.LT(coin.Amount) { + panic("delegation attempt with zero coins or insufficient funds") + } + + // compute x and y per the specification, where: + // X := min(max(V - DV, 0), D) + // Y := D - X + x := sdkmath.MinInt(sdkmath.MaxInt(vestingAmt.Sub(delVestingAmt), sdkmath.ZeroInt()), coin.Amount) + y := coin.Amount.Sub(x) + + if !x.IsZero() { + xCoin := sdk.NewCoin(coin.Denom, x) + bva.DelegatedVesting = bva.DelegatedVesting.Add(xCoin) + } + + if !y.IsZero() { + yCoin := sdk.NewCoin(coin.Denom, y) + bva.DelegatedFree = bva.DelegatedFree.Add(yCoin) + } + } +} + +// TrackUndelegation tracks an undelegation amount by setting the necessary +// values by which delegated vesting and delegated vesting need to decrease and +// by which amount the base coins need to increase. +// +// NOTE: The undelegation (bond refund) amount may exceed the delegated +// vesting (bond) amount due to the way undelegation truncates the bond refund, +// which can increase the validator's sharesToTokens rate slightly if +// the undelegated tokens are non-integral. +// +// CONTRACT: The account's coins and undelegation coins must be sorted. +func (bva *BaseVestingAccount) TrackUndelegation(amount sdk.Coins) { + for _, coin := range amount { + // panic if the undelegation amount is zero + if coin.Amount.IsZero() { + panic("undelegation attempt with zero coins") + } + delegatedFree := bva.DelegatedFree.AmountOf(coin.Denom) + delegatedVesting := bva.DelegatedVesting.AmountOf(coin.Denom) + + // compute x and y per the specification, where: + // X := min(DF, D) + // Y := min(DV, D - X) + x := sdkmath.MinInt(delegatedFree, coin.Amount) + y := sdkmath.MinInt(delegatedVesting, coin.Amount.Sub(x)) + + if !x.IsZero() { + xCoin := sdk.NewCoin(coin.Denom, x) + bva.DelegatedFree = bva.DelegatedFree.Sub(sdk.Coins{xCoin}...) + } + + if !y.IsZero() { + yCoin := sdk.NewCoin(coin.Denom, y) + bva.DelegatedVesting = bva.DelegatedVesting.Sub(sdk.Coins{yCoin}...) + } + } +} + +// GetOriginalVesting returns a vesting account's original vesting amount +func (bva BaseVestingAccount) GetOriginalVesting() sdk.Coins { + return bva.OriginalVesting +} + +// GetDelegatedFree returns a vesting account's delegation amount that is not +// vesting. +func (bva BaseVestingAccount) GetDelegatedFree() sdk.Coins { + return bva.DelegatedFree +} + +// GetDelegatedVesting returns a vesting account's delegation amount that is +// still vesting. +func (bva BaseVestingAccount) GetDelegatedVesting() sdk.Coins { + return bva.DelegatedVesting +} + +// GetEndTime returns a vesting account's end time +func (bva BaseVestingAccount) GetEndTime() int64 { + return bva.EndTime +} + +// Validate checks for errors on the account fields +func (bva BaseVestingAccount) Validate() error { + if !(bva.DelegatedVesting.IsAllLTE(bva.OriginalVesting)) { + return errors.New("delegated vesting amount cannot be greater than original vesting amount") + } + return bva.BaseAccount.Validate() +} + +type vestingAccountYAML struct { + Address sdk.AccAddress `json:"address" yaml:"address"` + PubKey string `json:"public_key" yaml:"public_key"` + AccountNumber uint64 `json:"account_number" yaml:"account_number"` + Sequence uint64 `json:"sequence" yaml:"sequence"` + OriginalVesting sdk.Coins `json:"original_vesting" yaml:"original_vesting"` + DelegatedFree sdk.Coins `json:"delegated_free" yaml:"delegated_free"` + DelegatedVesting sdk.Coins `json:"delegated_vesting" yaml:"delegated_vesting"` + EndTime int64 `json:"end_time" yaml:"end_time"` + + // custom fields based on concrete vesting type which can be omitted + StartTime int64 `json:"start_time,omitempty" yaml:"start_time,omitempty"` + VestingPeriods Periods `json:"vesting_periods,omitempty" yaml:"vesting_periods,omitempty"` +} + +func (bva BaseVestingAccount) String() string { + out, _ := bva.MarshalYAML() + return out.(string) +} + +// MarshalYAML returns the YAML representation of a BaseVestingAccount. +func (bva BaseVestingAccount) MarshalYAML() (interface{}, error) { + accAddr, err := sdk.AccAddressFromBech32(bva.Address) + if err != nil { + return nil, err + } + + out := vestingAccountYAML{ + Address: accAddr, + AccountNumber: bva.AccountNumber, + PubKey: getPKString(bva), + Sequence: bva.Sequence, + OriginalVesting: bva.OriginalVesting, + DelegatedFree: bva.DelegatedFree, + DelegatedVesting: bva.DelegatedVesting, + EndTime: bva.EndTime, + } + return marshalYaml(out) +} + +// Periodic Vesting Account (only for stride) +// This vesting account works differently from the core periodic vesting account. +var ( + _ vestexported.VestingAccount = (*StridePeriodicVestingAccount)(nil) + _ authtypes.GenesisAccount = (*StridePeriodicVestingAccount)(nil) +) + +// NewStridePeriodicVestingAccountRaw creates a new StridePeriodicVestingAccount object from BaseVestingAccount +func NewStridePeriodicVestingAccountRaw(bva *BaseVestingAccount, startTime int64, periods Periods) *StridePeriodicVestingAccount { + return &StridePeriodicVestingAccount{ + BaseVestingAccount: bva, + VestingPeriods: periods, + } +} + +// NewStridePeriodicVestingAccount returns a new StridePeriodicVestingAccount +func NewStridePeriodicVestingAccount(baseAcc *authtypes.BaseAccount, originalVesting sdk.Coins, periods Periods) *StridePeriodicVestingAccount { + if len(periods) == 0 { + return &StridePeriodicVestingAccount{} + } + + endTime := int64(0) + for _, p := range periods { + endTime = utils.Max64(endTime, p.StartTime+p.Length) + } + + baseVestingAcc := &BaseVestingAccount{ + BaseAccount: baseAcc, + OriginalVesting: originalVesting, + EndTime: endTime, + } + + return &StridePeriodicVestingAccount{ + BaseVestingAccount: baseVestingAcc, + VestingPeriods: periods, + } +} + +// AddNewGrant adds a new grant +func (pva *StridePeriodicVestingAccount) AddNewGrant(grantedPeriod Period) { + // Starting time for new period must be greater than original starting time + pva.VestingPeriods = append(pva.VestingPeriods, grantedPeriod) + pva.EndTime = utils.Max64(pva.EndTime, grantedPeriod.Length+grantedPeriod.StartTime) + pva.OriginalVesting = pva.OriginalVesting.Add(grantedPeriod.Amount...) +} + +// GetVestedCoins returns the total number of vested coins. If no coins are vested, +// nil is returned. +func (pva StridePeriodicVestingAccount) GetVestedCoins(blockTime time.Time) sdk.Coins { + var vestedCoins sdk.Coins + + // We must handle the case where the start time for a vesting account has + // been set into the future or when the start of the chain is not exactly + // known. + if len(pva.VestingPeriods) == 0 { + return vestedCoins + } else if blockTime.Unix() <= pva.VestingPeriods[0].StartTime { + return vestedCoins + } else if blockTime.Unix() >= pva.EndTime { + return pva.OriginalVesting + } + + for _, period := range pva.VestingPeriods { + vestedCoins = vestedCoins.Add(utils.GetVestedCoinsAt(blockTime.Unix(), period.StartTime, period.Length, period.Amount)...) + } + + return vestedCoins +} + +// GetVestingCoins returns the total number of vesting coins. If no coins are +// vesting, nil is returned. +func (pva StridePeriodicVestingAccount) GetVestingCoins(blockTime time.Time) sdk.Coins { + return pva.OriginalVesting.Sub(pva.GetVestedCoins(blockTime)...) +} + +// LockedCoins returns the set of coins that are not spendable (i.e. locked), +// defined as the vesting coins that are not delegated. +func (pva StridePeriodicVestingAccount) LockedCoins(blockTime time.Time) sdk.Coins { + return pva.BaseVestingAccount.LockedCoinsFromVesting(pva.GetVestingCoins(blockTime)) +} + +// TrackDelegation tracks a desired delegation amount by setting the appropriate +// values for the amount of delegated vesting, delegated free, and reducing the +// overall amount of base coins. +func (pva *StridePeriodicVestingAccount) TrackDelegation(blockTime time.Time, balance, amount sdk.Coins) { + pva.BaseVestingAccount.TrackDelegation(balance, pva.GetVestingCoins(blockTime), amount) +} + +// GetStartTime returns the time when vesting starts for a periodic vesting +// account. +func (pva StridePeriodicVestingAccount) GetStartTime() int64 { + return pva.VestingPeriods[0].StartTime +} + +// GetVestingPeriods returns vesting periods associated with periodic vesting account. +func (pva StridePeriodicVestingAccount) GetVestingPeriods() Periods { + return pva.VestingPeriods +} + +// Validate checks for errors on the account fields +func (pva StridePeriodicVestingAccount) Validate() error { + if pva.GetStartTime() >= pva.GetEndTime() { + return errors.New("vesting start-time cannot be before end-time") + } + endTime := pva.VestingPeriods[0].StartTime + originalVesting := sdk.NewCoins() + for _, p := range pva.VestingPeriods { + endTime += p.Length + originalVesting = originalVesting.Add(p.Amount...) + } + if endTime != pva.EndTime { + return errors.New("vesting end time does not match length of all vesting periods") + } + if !originalVesting.Equal(pva.OriginalVesting) { + return errors.New("original vesting coins does not match the sum of all coins in vesting periods") + } + + return pva.BaseVestingAccount.Validate() +} + +func (pva StridePeriodicVestingAccount) String() string { + out, _ := pva.MarshalYAML() + return out.(string) +} + +// MarshalYAML returns the YAML representation of a StridePeriodicVestingAccount. +func (pva StridePeriodicVestingAccount) MarshalYAML() (interface{}, error) { + accAddr, err := sdk.AccAddressFromBech32(pva.Address) + if err != nil { + return nil, err + } + + out := vestingAccountYAML{ + Address: accAddr, + AccountNumber: pva.AccountNumber, + PubKey: getPKString(pva), + Sequence: pva.Sequence, + OriginalVesting: pva.OriginalVesting, + DelegatedFree: pva.DelegatedFree, + DelegatedVesting: pva.DelegatedVesting, + EndTime: pva.EndTime, + StartTime: pva.VestingPeriods[0].StartTime, + VestingPeriods: pva.VestingPeriods, + } + return marshalYaml(out) +} + +type getPK interface { + GetPubKey() cryptotypes.PubKey +} + +func getPKString(g getPK) string { + if pk := g.GetPubKey(); pk != nil { + return pk.String() + } + return "" +} + +func marshalYaml(i interface{}) (interface{}, error) { + bz, err := yaml.Marshal(i) + if err != nil { + return nil, err + } + return string(bz), nil +} diff --git a/x/claim/vesting/types/vesting_account_test.go b/x/claim/vesting/types/vesting_account_test.go new file mode 100644 index 00000000000..978b8bb16f1 --- /dev/null +++ b/x/claim/vesting/types/vesting_account_test.go @@ -0,0 +1,271 @@ +package types_test + +import ( + "testing" + "time" + + tmtime "github.com/cometbft/cometbft/types/time" + "github.com/stretchr/testify/require" + + "github.com/cosmos/cosmos-sdk/testutil/testdata" + sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + + "github.com/osmosis-labs/osmosis/v27/x/claim/vesting/types" +) + +var ( + stakeDenom = "stake" + feeDenom = "fee" + emptyCoins = sdk.Coins{} +) + +func TestGetVestedCoinsPeriodicVestingAcc(t *testing.T) { + now := tmtime.Now() + endTime := now.Add(24 * time.Hour) + periods := types.Periods{ + types.Period{StartTime: now.Unix(), Length: int64(12 * 60 * 60), Amount: sdk.Coins{sdk.NewInt64Coin(feeDenom, 500), sdk.NewInt64Coin(stakeDenom, 50)}}, + types.Period{StartTime: now.Unix() + int64(12*60*60), Length: int64(6 * 60 * 60), Amount: sdk.Coins{sdk.NewInt64Coin(feeDenom, 250), sdk.NewInt64Coin(stakeDenom, 25)}}, + types.Period{StartTime: now.Unix() + int64(18*60*60), Length: int64(6 * 60 * 60), Amount: sdk.Coins{sdk.NewInt64Coin(feeDenom, 250), sdk.NewInt64Coin(stakeDenom, 25)}}, + } + + bacc, origCoins := initBaseAccount() + pva := types.NewStridePeriodicVestingAccount(bacc, origCoins, periods) + + // require no coins vested at the beginning of the vesting schedule + vestedCoins := pva.GetVestedCoins(now) + require.Nil(t, vestedCoins) + + // require all coins vested at the end of the vesting schedule + vestedCoins = pva.GetVestedCoins(endTime) + require.Equal(t, origCoins, vestedCoins) + + // require 50% of coins vested after period 1 + vestedCoins = pva.GetVestedCoins(now.Add(12 * time.Hour)) + require.Equal(t, sdk.Coins{sdk.NewInt64Coin(feeDenom, 500), sdk.NewInt64Coin(stakeDenom, 50)}, vestedCoins) + + // require 62.5% of coins vested after 15 hrs passed (in the middle of period 2) + vestedCoins = pva.GetVestedCoins(now.Add(15 * time.Hour)) + require.Equal(t, sdk.Coins{sdk.NewInt64Coin(feeDenom, 625), sdk.NewInt64Coin(stakeDenom, 62)}, vestedCoins) + + // require 75% of coins vested after period 2 + vestedCoins = pva.GetVestedCoins(now.Add(18 * time.Hour)) + require.Equal(t, + sdk.Coins{ + sdk.NewInt64Coin(feeDenom, 750), sdk.NewInt64Coin(stakeDenom, 75), + }, vestedCoins) + + // require 100% of coins vested + vestedCoins = pva.GetVestedCoins(now.Add(48 * time.Hour)) + require.Equal(t, origCoins, vestedCoins) +} + +func TestGetVestingCoinsPeriodicVestingAcc(t *testing.T) { + now := tmtime.Now() + endTime := now.Add(24 * time.Hour) + periods := types.Periods{ + types.Period{StartTime: now.Unix(), Length: int64(12 * 60 * 60), Amount: sdk.Coins{sdk.NewInt64Coin(feeDenom, 500), sdk.NewInt64Coin(stakeDenom, 50)}}, + types.Period{StartTime: now.Unix() + int64(12*60*60), Length: int64(6 * 60 * 60), Amount: sdk.Coins{sdk.NewInt64Coin(feeDenom, 250), sdk.NewInt64Coin(stakeDenom, 25)}}, + types.Period{StartTime: now.Unix() + int64(18*60*60), Length: int64(6 * 60 * 60), Amount: sdk.Coins{sdk.NewInt64Coin(feeDenom, 250), sdk.NewInt64Coin(stakeDenom, 25)}}, + } + + bacc, origCoins := initBaseAccount() + pva := types.NewStridePeriodicVestingAccount(bacc, origCoins, periods) + + // require all coins vesting at the beginning of the vesting schedule + vestingCoins := pva.GetVestingCoins(now) + require.Equal(t, origCoins, vestingCoins) + + // require no coins vesting at the end of the vesting schedule + vestingCoins = pva.GetVestingCoins(endTime) + require.Equal(t, emptyCoins, vestingCoins) + + // require 50% of coins vesting + vestingCoins = pva.GetVestingCoins(now.Add(12 * time.Hour)) + require.Equal(t, sdk.Coins{sdk.NewInt64Coin(feeDenom, 500), sdk.NewInt64Coin(stakeDenom, 50)}, vestingCoins) + + // require 37.5% of coins vesting after 15 hrs passed (in the middle of period 2) + vestingCoins = pva.GetVestingCoins(now.Add(15 * time.Hour)) + require.Equal(t, sdk.Coins{sdk.NewInt64Coin(feeDenom, 375), sdk.NewInt64Coin(stakeDenom, 38)}, vestingCoins) + + // require 25% of coins vesting after period 2 + vestingCoins = pva.GetVestingCoins(now.Add(18 * time.Hour)) + require.Equal(t, sdk.Coins{sdk.NewInt64Coin(feeDenom, 250), sdk.NewInt64Coin(stakeDenom, 25)}, vestingCoins) + + // require 0% of coins vesting after vesting complete + vestingCoins = pva.GetVestingCoins(now.Add(48 * time.Hour)) + require.Equal(t, emptyCoins, vestingCoins) +} + +func TestSpendableCoinsPeriodicVestingAcc(t *testing.T) { + now := tmtime.Now() + endTime := now.Add(24 * time.Hour) + periods := types.Periods{ + types.Period{StartTime: now.Unix(), Length: int64(12 * 60 * 60), Amount: sdk.Coins{sdk.NewInt64Coin(feeDenom, 500), sdk.NewInt64Coin(stakeDenom, 50)}}, + types.Period{StartTime: now.Unix() + int64(12*60*60), Length: int64(6 * 60 * 60), Amount: sdk.Coins{sdk.NewInt64Coin(feeDenom, 250), sdk.NewInt64Coin(stakeDenom, 25)}}, + types.Period{StartTime: now.Unix() + int64(15*60*60), Length: int64(6 * 60 * 60), Amount: sdk.Coins{sdk.NewInt64Coin(feeDenom, 250), sdk.NewInt64Coin(stakeDenom, 25)}}, + } + + bacc, origCoins := initBaseAccount() + pva := types.NewStridePeriodicVestingAccount(bacc, origCoins, periods) + + // require that there exist no spendable coins at the beginning of the + // vesting schedule + lockedCoins := pva.LockedCoins(now) + require.Equal(t, origCoins, lockedCoins) + + // require that all original coins are spendable at the end of the vesting + // schedule + lockedCoins = pva.LockedCoins(endTime) + require.Equal(t, sdk.NewCoins(), lockedCoins) + + // require that vesting coins (50%) are locked + lockedCoins = pva.LockedCoins(now.Add(12 * time.Hour)) + require.Equal(t, sdk.Coins{sdk.NewInt64Coin(feeDenom, 500), sdk.NewInt64Coin(stakeDenom, 50)}, lockedCoins) + + // require that vesting coins (0%) are locked + lockedCoins = pva.LockedCoins(now.Add(21 * time.Hour)) + require.Equal(t, emptyCoins, lockedCoins) +} + +func TestTrackDelegationPeriodicVestingAcc(t *testing.T) { + now := tmtime.Now() + endTime := now.Add(24 * time.Hour) + periods := types.Periods{ + types.Period{StartTime: now.Unix(), Length: int64(12 * 60 * 60), Amount: sdk.Coins{sdk.NewInt64Coin(feeDenom, 500), sdk.NewInt64Coin(stakeDenom, 50)}}, + types.Period{StartTime: now.Unix() + int64(12*60*60), Length: int64(6 * 60 * 60), Amount: sdk.Coins{sdk.NewInt64Coin(feeDenom, 250), sdk.NewInt64Coin(stakeDenom, 25)}}, + types.Period{StartTime: now.Unix() + int64(18*60*60), Length: int64(6 * 60 * 60), Amount: sdk.Coins{sdk.NewInt64Coin(feeDenom, 250), sdk.NewInt64Coin(stakeDenom, 25)}}, + } + + bacc, origCoins := initBaseAccount() + + // require the ability to delegate all vesting coins + pva := types.NewStridePeriodicVestingAccount(bacc, origCoins, periods) + pva.TrackDelegation(now, origCoins, origCoins) + require.Equal(t, origCoins, pva.DelegatedVesting) + require.Nil(t, pva.DelegatedFree) + + // require the ability to delegate all vested coins + pva = types.NewStridePeriodicVestingAccount(bacc, origCoins, periods) + pva.TrackDelegation(endTime, origCoins, origCoins) + require.Nil(t, pva.DelegatedVesting) + require.Equal(t, origCoins, pva.DelegatedFree) + + // delegate half of vesting coins + pva = types.NewStridePeriodicVestingAccount(bacc, origCoins, periods) + pva.TrackDelegation(now, origCoins, periods[0].Amount) + // require that all delegated coins are delegated vesting + require.Equal(t, pva.DelegatedVesting, periods[0].Amount) + require.Nil(t, pva.DelegatedFree) + + // delegate 75% of coins, split between vested and vesting + pva = types.NewStridePeriodicVestingAccount(bacc, origCoins, periods) + pva.TrackDelegation(now.Add(12*time.Hour), origCoins, periods[0].Amount.Add(periods[1].Amount...)) + // require that the maximum possible amount of vesting coins are chosen for delegation. + require.Equal(t, pva.DelegatedFree, periods[1].Amount) + require.Equal(t, pva.DelegatedVesting, periods[0].Amount) + + // require the ability to delegate all vesting coins (50%) and all vested coins (50%) + pva = types.NewStridePeriodicVestingAccount(bacc, origCoins, periods) + pva.TrackDelegation(now.Add(12*time.Hour), origCoins, sdk.Coins{sdk.NewInt64Coin(stakeDenom, 50)}) + require.Equal(t, sdk.Coins{sdk.NewInt64Coin(stakeDenom, 50)}, pva.DelegatedVesting) + require.Nil(t, pva.DelegatedFree) + + pva.TrackDelegation(now.Add(12*time.Hour), origCoins, sdk.Coins{sdk.NewInt64Coin(stakeDenom, 50)}) + require.Equal(t, sdk.Coins{sdk.NewInt64Coin(stakeDenom, 50)}, pva.DelegatedVesting) + require.Equal(t, sdk.Coins{sdk.NewInt64Coin(stakeDenom, 50)}, pva.DelegatedFree) + + // require no modifications when delegation amount is zero or not enough funds + pva = types.NewStridePeriodicVestingAccount(bacc, origCoins, periods) + require.Panics(t, func() { + pva.TrackDelegation(endTime, origCoins, sdk.Coins{sdk.NewInt64Coin(stakeDenom, 1000000)}) + }) + require.Nil(t, pva.DelegatedVesting) + require.Nil(t, pva.DelegatedFree) +} + +func TestTrackUndelegationPeriodicVestingAcc(t *testing.T) { + now := tmtime.Now() + endTime := now.Add(24 * time.Hour) + periods := types.Periods{ + types.Period{StartTime: now.Unix(), Length: int64(12 * 60 * 60), Amount: sdk.Coins{sdk.NewInt64Coin(feeDenom, 500), sdk.NewInt64Coin(stakeDenom, 50)}}, + types.Period{StartTime: now.Unix() + int64(12*60*60), Length: int64(6 * 60 * 60), Amount: sdk.Coins{sdk.NewInt64Coin(feeDenom, 250), sdk.NewInt64Coin(stakeDenom, 25)}}, + types.Period{StartTime: now.Unix() + int64(18*60*60), Length: int64(6 * 60 * 60), Amount: sdk.Coins{sdk.NewInt64Coin(feeDenom, 250), sdk.NewInt64Coin(stakeDenom, 25)}}, + } + + bacc, origCoins := initBaseAccount() + + // require the ability to undelegate all vesting coins at the beginning of vesting + pva := types.NewStridePeriodicVestingAccount(bacc, origCoins, periods) + pva.TrackDelegation(now, origCoins, origCoins) + pva.TrackUndelegation(origCoins) + require.Nil(t, pva.DelegatedFree) + require.Equal(t, emptyCoins, pva.DelegatedVesting) + + // require the ability to undelegate all vested coins at the end of vesting + pva = types.NewStridePeriodicVestingAccount(bacc, origCoins, periods) + + pva.TrackDelegation(endTime, origCoins, origCoins) + pva.TrackUndelegation(origCoins) + require.Equal(t, emptyCoins, pva.DelegatedFree) + require.Nil(t, pva.DelegatedVesting) + + // require the ability to undelegate half of coins + pva = types.NewStridePeriodicVestingAccount(bacc, origCoins, periods) + pva.TrackDelegation(endTime, origCoins, periods[0].Amount) + pva.TrackUndelegation(periods[0].Amount) + require.Equal(t, emptyCoins, pva.DelegatedFree) + require.Nil(t, pva.DelegatedVesting) + + // require no modifications when the undelegation amount is zero + pva = types.NewStridePeriodicVestingAccount(bacc, origCoins, periods) + + require.Panics(t, func() { + pva.TrackUndelegation(sdk.Coins{sdk.NewInt64Coin(stakeDenom, 0)}) + }) + require.Nil(t, pva.DelegatedFree) + require.Nil(t, pva.DelegatedVesting) + + // vest 50% and delegate to two validators + pva = types.NewStridePeriodicVestingAccount(bacc, origCoins, periods) + pva.TrackDelegation(now.Add(12*time.Hour), origCoins, sdk.Coins{sdk.NewInt64Coin(stakeDenom, 50)}) + pva.TrackDelegation(now.Add(12*time.Hour), origCoins, sdk.Coins{sdk.NewInt64Coin(stakeDenom, 50)}) + + // undelegate from one validator that got slashed 50% + pva.TrackUndelegation(sdk.Coins{sdk.NewInt64Coin(stakeDenom, 25)}) + require.Equal(t, sdk.Coins{sdk.NewInt64Coin(stakeDenom, 25)}, pva.DelegatedFree) + require.Equal(t, sdk.Coins{sdk.NewInt64Coin(stakeDenom, 50)}, pva.DelegatedVesting) + + // undelegate from the other validator that did not get slashed + pva.TrackUndelegation(sdk.Coins{sdk.NewInt64Coin(stakeDenom, 50)}) + require.Equal(t, emptyCoins, pva.DelegatedFree) + require.Equal(t, sdk.Coins{sdk.NewInt64Coin(stakeDenom, 25)}, pva.DelegatedVesting) +} + +func TestStridePeriodicVestingAccountMarshal(t *testing.T) { + baseAcc, coins := initBaseAccount() + now := tmtime.Now() + acc := types.NewStridePeriodicVestingAccount(baseAcc, coins, types.Periods{types.Period{now.Unix(), 3600, coins, 0}}) + + bz, err := app.AppCodec().Marshal(acc) + require.NoError(t, err) + + var acc2 types.StridePeriodicVestingAccount + err = app.AppCodec().Unmarshal(bz, &acc2) + require.NoError(t, err) + require.IsType(t, &types.StridePeriodicVestingAccount{}, &acc2) + require.Equal(t, acc.String(), acc2.String()) + + // error on bad bytes + var acc3 types.StridePeriodicVestingAccount + err = app.AppCodec().Unmarshal(bz[:len(bz)/2], &acc3) + require.Error(t, err) +} + +func initBaseAccount() (*authtypes.BaseAccount, sdk.Coins) { + _, _, addr := testdata.KeyTestPubAddr() + origCoins := sdk.Coins{sdk.NewInt64Coin(feeDenom, 1000), sdk.NewInt64Coin(stakeDenom, 100)} + bacc := authtypes.NewBaseAccountWithAddress(addr) + + return bacc, origCoins +} diff --git a/x/concentrated-liquidity/model/pool.pb.go b/x/concentrated-liquidity/model/pool.pb.go index d3ef9f77197..7c8ee44ac3c 100644 --- a/x/concentrated-liquidity/model/pool.pb.go +++ b/x/concentrated-liquidity/model/pool.pb.go @@ -14,9 +14,9 @@ import ( _ "github.com/cosmos/cosmos-proto" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" github_com_osmosis_labs_osmosis_osmomath "github.com/osmosis-labs/osmosis/osmomath" - _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" diff --git a/x/concentrated-liquidity/model/position.pb.go b/x/concentrated-liquidity/model/position.pb.go index fb4ee40933f..48aabc08b2f 100644 --- a/x/concentrated-liquidity/model/position.pb.go +++ b/x/concentrated-liquidity/model/position.pb.go @@ -11,12 +11,12 @@ package model import ( cosmossdk_io_math "cosmossdk.io/math" fmt "fmt" - types "github.com/cosmos/cosmos-sdk/types" + types1 "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" - types1 "github.com/osmosis-labs/osmosis/v27/x/lockup/types" - _ "google.golang.org/protobuf/types/known/timestamppb" + types2 "github.com/osmosis-labs/osmosis/v27/x/lockup/types" io "io" math "math" math_bits "math/bits" @@ -130,12 +130,12 @@ func (m *Position) GetJoinTime() time.Time { // - the amount of incentives that would be forfeited if the position was closed // now type FullPositionBreakdown struct { - Position Position `protobuf:"bytes,1,opt,name=position,proto3" json:"position"` - Asset0 types.Coin `protobuf:"bytes,2,opt,name=asset0,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coin" json:"asset0"` - Asset1 types.Coin `protobuf:"bytes,3,opt,name=asset1,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coin" json:"asset1"` - ClaimableSpreadRewards []types.Coin `protobuf:"bytes,4,rep,name=claimable_spread_rewards,json=claimableSpreadRewards,proto3" json:"claimable_spread_rewards" yaml:"claimable_spread_rewards"` - ClaimableIncentives []types.Coin `protobuf:"bytes,5,rep,name=claimable_incentives,json=claimableIncentives,proto3" json:"claimable_incentives" yaml:"claimable_incentives"` - ForfeitedIncentives []types.Coin `protobuf:"bytes,6,rep,name=forfeited_incentives,json=forfeitedIncentives,proto3" json:"forfeited_incentives" yaml:"forfeited_incentives"` + Position Position `protobuf:"bytes,1,opt,name=position,proto3" json:"position"` + Asset0 types1.Coin `protobuf:"bytes,2,opt,name=asset0,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coin" json:"asset0"` + Asset1 types1.Coin `protobuf:"bytes,3,opt,name=asset1,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.Coin" json:"asset1"` + ClaimableSpreadRewards []types1.Coin `protobuf:"bytes,4,rep,name=claimable_spread_rewards,json=claimableSpreadRewards,proto3" json:"claimable_spread_rewards" yaml:"claimable_spread_rewards"` + ClaimableIncentives []types1.Coin `protobuf:"bytes,5,rep,name=claimable_incentives,json=claimableIncentives,proto3" json:"claimable_incentives" yaml:"claimable_incentives"` + ForfeitedIncentives []types1.Coin `protobuf:"bytes,6,rep,name=forfeited_incentives,json=forfeitedIncentives,proto3" json:"forfeited_incentives" yaml:"forfeited_incentives"` } func (m *FullPositionBreakdown) Reset() { *m = FullPositionBreakdown{} } @@ -178,35 +178,35 @@ func (m *FullPositionBreakdown) GetPosition() Position { return Position{} } -func (m *FullPositionBreakdown) GetAsset0() types.Coin { +func (m *FullPositionBreakdown) GetAsset0() types1.Coin { if m != nil { return m.Asset0 } - return types.Coin{} + return types1.Coin{} } -func (m *FullPositionBreakdown) GetAsset1() types.Coin { +func (m *FullPositionBreakdown) GetAsset1() types1.Coin { if m != nil { return m.Asset1 } - return types.Coin{} + return types1.Coin{} } -func (m *FullPositionBreakdown) GetClaimableSpreadRewards() []types.Coin { +func (m *FullPositionBreakdown) GetClaimableSpreadRewards() []types1.Coin { if m != nil { return m.ClaimableSpreadRewards } return nil } -func (m *FullPositionBreakdown) GetClaimableIncentives() []types.Coin { +func (m *FullPositionBreakdown) GetClaimableIncentives() []types1.Coin { if m != nil { return m.ClaimableIncentives } return nil } -func (m *FullPositionBreakdown) GetForfeitedIncentives() []types.Coin { +func (m *FullPositionBreakdown) GetForfeitedIncentives() []types1.Coin { if m != nil { return m.ForfeitedIncentives } @@ -215,7 +215,7 @@ func (m *FullPositionBreakdown) GetForfeitedIncentives() []types.Coin { type PositionWithPeriodLock struct { Position Position `protobuf:"bytes,1,opt,name=position,proto3" json:"position"` - Locks types1.PeriodLock `protobuf:"bytes,2,opt,name=locks,proto3" json:"locks"` + Locks types2.PeriodLock `protobuf:"bytes,2,opt,name=locks,proto3" json:"locks"` } func (m *PositionWithPeriodLock) Reset() { *m = PositionWithPeriodLock{} } @@ -258,11 +258,11 @@ func (m *PositionWithPeriodLock) GetPosition() Position { return Position{} } -func (m *PositionWithPeriodLock) GetLocks() types1.PeriodLock { +func (m *PositionWithPeriodLock) GetLocks() types2.PeriodLock { if m != nil { return m.Locks } - return types1.PeriodLock{} + return types2.PeriodLock{} } func init() { @@ -1003,7 +1003,7 @@ func (m *FullPositionBreakdown) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ClaimableSpreadRewards = append(m.ClaimableSpreadRewards, types.Coin{}) + m.ClaimableSpreadRewards = append(m.ClaimableSpreadRewards, types1.Coin{}) if err := m.ClaimableSpreadRewards[len(m.ClaimableSpreadRewards)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -1037,7 +1037,7 @@ func (m *FullPositionBreakdown) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ClaimableIncentives = append(m.ClaimableIncentives, types.Coin{}) + m.ClaimableIncentives = append(m.ClaimableIncentives, types1.Coin{}) if err := m.ClaimableIncentives[len(m.ClaimableIncentives)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -1071,7 +1071,7 @@ func (m *FullPositionBreakdown) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ForfeitedIncentives = append(m.ForfeitedIncentives, types.Coin{}) + m.ForfeitedIncentives = append(m.ForfeitedIncentives, types1.Coin{}) if err := m.ForfeitedIncentives[len(m.ForfeitedIncentives)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } diff --git a/x/concentrated-liquidity/types/incentive_record.pb.go b/x/concentrated-liquidity/types/incentive_record.pb.go index 69ff5fb21d5..85d76d75b68 100644 --- a/x/concentrated-liquidity/types/incentive_record.pb.go +++ b/x/concentrated-liquidity/types/incentive_record.pb.go @@ -6,12 +6,11 @@ package types import ( cosmossdk_io_math "cosmossdk.io/math" fmt "fmt" - types "github.com/cosmos/cosmos-sdk/types" + types1 "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" - _ "google.golang.org/protobuf/types/known/durationpb" - _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -111,7 +110,7 @@ func (m *IncentiveRecord) GetMinUptime() time.Duration { // record. type IncentiveRecordBody struct { // remaining_coin is the total amount of incentives to be distributed - RemainingCoin types.DecCoin `protobuf:"bytes,1,opt,name=remaining_coin,json=remainingCoin,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.DecCoin" json:"remaining_coin" yaml:"remaining_coins"` + RemainingCoin types1.DecCoin `protobuf:"bytes,1,opt,name=remaining_coin,json=remainingCoin,proto3,castrepeated=github.com/cosmos/cosmos-sdk/types.DecCoin" json:"remaining_coin" yaml:"remaining_coins"` // emission_rate is the incentive emission rate per second EmissionRate cosmossdk_io_math.LegacyDec `protobuf:"bytes,2,opt,name=emission_rate,json=emissionRate,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"emission_rate" yaml:"emission_rate"` // start_time is the time when the incentive starts distributing @@ -151,11 +150,11 @@ func (m *IncentiveRecordBody) XXX_DiscardUnknown() { var xxx_messageInfo_IncentiveRecordBody proto.InternalMessageInfo -func (m *IncentiveRecordBody) GetRemainingCoin() types.DecCoin { +func (m *IncentiveRecordBody) GetRemainingCoin() types1.DecCoin { if m != nil { return m.RemainingCoin } - return types.DecCoin{} + return types1.DecCoin{} } func (m *IncentiveRecordBody) GetStartTime() time.Time { diff --git a/x/concentrated-liquidity/types/params.pb.go b/x/concentrated-liquidity/types/params.pb.go index 20927015d46..21cf1a9e4fd 100644 --- a/x/concentrated-liquidity/types/params.pb.go +++ b/x/concentrated-liquidity/types/params.pb.go @@ -8,8 +8,8 @@ import ( fmt "fmt" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" - _ "google.golang.org/protobuf/types/known/durationpb" io "io" math "math" math_bits "math/bits" diff --git a/x/downtime-detector/client/queryproto/query.pb.go b/x/downtime-detector/client/queryproto/query.pb.go index 1cc989742aa..c67505a7663 100644 --- a/x/downtime-detector/client/queryproto/query.pb.go +++ b/x/downtime-detector/client/queryproto/query.pb.go @@ -13,14 +13,13 @@ import ( _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" types "github.com/osmosis-labs/osmosis/v27/x/downtime-detector/types" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - _ "google.golang.org/protobuf/types/known/durationpb" - _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" diff --git a/x/downtime-detector/types/genesis.pb.go b/x/downtime-detector/types/genesis.pb.go index 4ebe933d069..10b7c2e4a88 100644 --- a/x/downtime-detector/types/genesis.pb.go +++ b/x/downtime-detector/types/genesis.pb.go @@ -9,9 +9,8 @@ import ( _ "github.com/cosmos/cosmos-sdk/codec/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" - _ "google.golang.org/protobuf/types/known/durationpb" - _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" diff --git a/x/epochs/keeper/abci.go b/x/epochs/keeper/abci.go index fa97dd284fd..9871aa3942f 100644 --- a/x/epochs/keeper/abci.go +++ b/x/epochs/keeper/abci.go @@ -57,7 +57,7 @@ func (k Keeper) BeginBlocker(ctx sdk.Context) { sdk.NewAttribute(types.AttributeEpochStartTime, fmt.Sprintf("%d", epochInfo.CurrentEpochStartTime.Unix())), ), ) - k.setEpochInfo(ctx, epochInfo) + k.SetEpochInfo(ctx, epochInfo) k.BeforeEpochStart(ctx, epochInfo.Identifier, epochInfo.CurrentEpoch) return false diff --git a/x/epochs/keeper/epoch.go b/x/epochs/keeper/epoch.go index c9d3f771601..13531c686bf 100644 --- a/x/epochs/keeper/epoch.go +++ b/x/epochs/keeper/epoch.go @@ -45,12 +45,12 @@ func (k Keeper) AddEpochInfo(ctx sdk.Context, epoch types.EpochInfo) error { epoch.StartTime = ctx.BlockTime() } epoch.CurrentEpochStartHeight = ctx.BlockHeight() - k.setEpochInfo(ctx, epoch) + k.SetEpochInfo(ctx, epoch) return nil } // setEpochInfo set epoch info. -func (k Keeper) setEpochInfo(ctx sdk.Context, epoch types.EpochInfo) { +func (k Keeper) SetEpochInfo(ctx sdk.Context, epoch types.EpochInfo) { store := ctx.KVStore(k.storeKey) value, err := proto.Marshal(&epoch) if err != nil { diff --git a/x/epochs/keeper/keeper.go b/x/epochs/keeper/keeper.go index 6fb351e4bdf..bf4d36c24ee 100644 --- a/x/epochs/keeper/keeper.go +++ b/x/epochs/keeper/keeper.go @@ -1,9 +1,8 @@ package keeper import ( - "fmt" - "cosmossdk.io/log" + "fmt" "github.com/osmosis-labs/osmosis/v27/x/epochs/types" diff --git a/x/epochs/types/genesis.go b/x/epochs/types/genesis.go index 1cdea892df4..d63f2a8a779 100644 --- a/x/epochs/types/genesis.go +++ b/x/epochs/types/genesis.go @@ -12,6 +12,14 @@ func NewGenesisState(epochs []EpochInfo) *GenesisState { return &GenesisState{Epochs: epochs} } +var ( + HOUR_EPOCH = "hour" + DAY_EPOCH = "day" + WEEK_EPOCH = "week" + STRIDE_EPOCH = "stride_epoch" + MINT_EPOCH = "mint" +) + // DefaultGenesis returns the default Capability genesis state. func DefaultGenesis() *GenesisState { epochs := []EpochInfo{ diff --git a/x/epochs/types/genesis.pb.go b/x/epochs/types/genesis.pb.go index 048a786780a..a4de60f00ba 100644 --- a/x/epochs/types/genesis.pb.go +++ b/x/epochs/types/genesis.pb.go @@ -7,9 +7,8 @@ import ( fmt "fmt" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" - _ "google.golang.org/protobuf/types/known/durationpb" - _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" diff --git a/x/epochs/types/hooks.go b/x/epochs/types/hooks.go index 985c21ab5c4..9707e8a96bc 100644 --- a/x/epochs/types/hooks.go +++ b/x/epochs/types/hooks.go @@ -1,7 +1,7 @@ package types import ( - fmt "fmt" + "fmt" "strconv" "github.com/cosmos/cosmos-sdk/telemetry" diff --git a/x/gamm/pool-models/balancer/balancerPool.pb.go b/x/gamm/pool-models/balancer/balancerPool.pb.go index 34ac97f3c7d..68970f8b330 100644 --- a/x/gamm/pool-models/balancer/balancerPool.pb.go +++ b/x/gamm/pool-models/balancer/balancerPool.pb.go @@ -12,14 +12,13 @@ import ( cosmossdk_io_math "cosmossdk.io/math" fmt "fmt" _ "github.com/cosmos/cosmos-proto" - types "github.com/cosmos/cosmos-sdk/types" + types1 "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/cosmos-sdk/x/auth/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" - _ "google.golang.org/protobuf/types/known/durationpb" - _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -191,7 +190,7 @@ func (m *PoolParams) GetSmoothWeightChangeParams() *SmoothWeightChangeParams { type PoolAsset struct { // Coins we are talking about, // the denomination must be unique amongst all PoolAssets for this pool. - Token types.Coin `protobuf:"bytes,1,opt,name=token,proto3" json:"token" yaml:"token"` + Token types1.Coin `protobuf:"bytes,1,opt,name=token,proto3" json:"token" yaml:"token"` // Weight that is not normalized. This weight must be less than 2^50 Weight cosmossdk_io_math.Int `protobuf:"bytes,2,opt,name=weight,proto3,customtype=cosmossdk.io/math.Int" json:"weight" yaml:"weight"` } @@ -229,11 +228,11 @@ func (m *PoolAsset) XXX_DiscardUnknown() { var xxx_messageInfo_PoolAsset proto.InternalMessageInfo -func (m *PoolAsset) GetToken() types.Coin { +func (m *PoolAsset) GetToken() types1.Coin { if m != nil { return m.Token } - return types.Coin{} + return types1.Coin{} } type Pool struct { @@ -251,7 +250,7 @@ type Pool struct { // TODO: Further improve these docs FuturePoolGovernor string `protobuf:"bytes,4,opt,name=future_pool_governor,json=futurePoolGovernor,proto3" json:"future_pool_governor,omitempty" yaml:"future_pool_governor"` // sum of all LP tokens sent out - TotalShares types.Coin `protobuf:"bytes,5,opt,name=total_shares,json=totalShares,proto3" json:"total_shares" yaml:"total_shares"` + TotalShares types1.Coin `protobuf:"bytes,5,opt,name=total_shares,json=totalShares,proto3" json:"total_shares" yaml:"total_shares"` // These are assumed to be sorted by denomiation. // They contain the pool asset and the information about the weight PoolAssets []PoolAsset `protobuf:"bytes,6,rep,name=pool_assets,json=poolAssets,proto3" json:"pool_assets" yaml:"pool_assets"` diff --git a/x/gamm/pool-models/balancer/tx.pb.go b/x/gamm/pool-models/balancer/tx.pb.go index 59cb8975cff..eff2f904c37 100644 --- a/x/gamm/pool-models/balancer/tx.pb.go +++ b/x/gamm/pool-models/balancer/tx.pb.go @@ -12,10 +12,10 @@ import ( _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" diff --git a/x/gamm/pool-models/stableswap/stableswap_pool.pb.go b/x/gamm/pool-models/stableswap/stableswap_pool.pb.go index c1c033470ae..434409b7847 100644 --- a/x/gamm/pool-models/stableswap/stableswap_pool.pb.go +++ b/x/gamm/pool-models/stableswap/stableswap_pool.pb.go @@ -13,8 +13,7 @@ import ( _ "github.com/cosmos/cosmos-sdk/x/auth/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - _ "google.golang.org/protobuf/types/known/durationpb" - _ "google.golang.org/protobuf/types/known/timestamppb" + _ "github.com/cosmos/gogoproto/types" io "io" math "math" math_bits "math/bits" diff --git a/x/ibc-hooks/types/params.pb.go b/x/ibc-hooks/types/params.pb.go index 979ff622779..ec84cb8523f 100644 --- a/x/ibc-hooks/types/params.pb.go +++ b/x/ibc-hooks/types/params.pb.go @@ -8,7 +8,7 @@ import ( _ "github.com/cosmos/cosmos-proto" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - _ "google.golang.org/protobuf/types/known/durationpb" + _ "github.com/cosmos/gogoproto/types" io "io" math "math" math_bits "math/bits" diff --git a/x/icacallbacks/types/callback_data.pb.go b/x/icacallbacks/types/callback_data.pb.go index 1f9b3c2fe9a..a6d46544d6c 100644 --- a/x/icacallbacks/types/callback_data.pb.go +++ b/x/icacallbacks/types/callback_data.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/icacallbacks/callback_data.proto +// source: symphony/icacallbacks/callback_data.proto package types @@ -35,7 +35,7 @@ func (m *CallbackData) Reset() { *m = CallbackData{} } func (m *CallbackData) String() string { return proto.CompactTextString(m) } func (*CallbackData) ProtoMessage() {} func (*CallbackData) Descriptor() ([]byte, []int) { - return fileDescriptor_19b6f19ce856679b, []int{0} + return fileDescriptor_320f20726a267f58, []int{0} } func (m *CallbackData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -107,32 +107,32 @@ func (m *CallbackData) GetCallbackArgs() []byte { } func init() { - proto.RegisterType((*CallbackData)(nil), "stride.icacallbacks.CallbackData") + proto.RegisterType((*CallbackData)(nil), "symphony.icacallbacks.CallbackData") } func init() { - proto.RegisterFile("stride/icacallbacks/callback_data.proto", fileDescriptor_19b6f19ce856679b) + proto.RegisterFile("symphony/icacallbacks/callback_data.proto", fileDescriptor_320f20726a267f58) } -var fileDescriptor_19b6f19ce856679b = []byte{ - // 269 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x2f, 0x2e, 0x29, 0xca, - 0x4c, 0x49, 0xd5, 0xcf, 0x4c, 0x4e, 0x4c, 0x4e, 0xcc, 0xc9, 0x49, 0x4a, 0x4c, 0xce, 0x2e, 0xd6, - 0x87, 0xb1, 0xe2, 0x53, 0x12, 0x4b, 0x12, 0xf5, 0x0a, 0x8a, 0xf2, 0x4b, 0xf2, 0x85, 0x84, 0x21, - 0x0a, 0xf5, 0x90, 0x15, 0x2a, 0x9d, 0x66, 0xe4, 0xe2, 0x71, 0x86, 0xf2, 0x5c, 0x12, 0x4b, 0x12, - 0x85, 0x14, 0xb9, 0x78, 0xe0, 0x9a, 0xb3, 0x53, 0x2b, 0x25, 0x18, 0x15, 0x18, 0x35, 0x38, 0x83, - 0xb8, 0x61, 0x62, 0xde, 0xa9, 0x95, 0x42, 0xe2, 0x5c, 0xec, 0x05, 0xf9, 0x45, 0x25, 0xf1, 0x99, - 0x29, 0x12, 0x4c, 0x60, 0x59, 0x36, 0x10, 0xd7, 0x33, 0x45, 0x48, 0x96, 0x8b, 0x2b, 0x39, 0x23, - 0x31, 0x2f, 0x2f, 0x35, 0x07, 0x24, 0xc7, 0x0c, 0x96, 0xe3, 0x84, 0x8a, 0x78, 0xa6, 0x08, 0x49, - 0x71, 0x71, 0x14, 0xa7, 0x16, 0x96, 0xa6, 0xe6, 0x25, 0xa7, 0x4a, 0xb0, 0x28, 0x30, 0x6a, 0xb0, - 0x04, 0xc1, 0xf9, 0x42, 0xf2, 0x5c, 0x70, 0x2b, 0x40, 0x7a, 0x59, 0xc1, 0x7a, 0xb9, 0x60, 0x42, - 0x9e, 0x29, 0x42, 0xca, 0x5c, 0xbc, 0x70, 0x05, 0x89, 0x45, 0xe9, 0xc5, 0x12, 0x6c, 0x0a, 0x8c, - 0x1a, 0x3c, 0x41, 0x70, 0xc7, 0x3a, 0x16, 0xa5, 0x17, 0x3b, 0x05, 0x9c, 0x78, 0x24, 0xc7, 0x78, - 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, - 0x70, 0xe3, 0xb1, 0x1c, 0x43, 0x94, 0x59, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, - 0xae, 0x7e, 0x30, 0x38, 0x1c, 0x74, 0x7d, 0x12, 0x93, 0x8a, 0xf5, 0xa1, 0x81, 0x57, 0x66, 0x64, - 0xa1, 0x5f, 0x81, 0x1a, 0x84, 0x25, 0x95, 0x05, 0xa9, 0xc5, 0x49, 0x6c, 0xe0, 0xb0, 0x33, 0x06, - 0x04, 0x00, 0x00, 0xff, 0xff, 0x8d, 0xc7, 0x33, 0x49, 0x66, 0x01, 0x00, 0x00, +var fileDescriptor_320f20726a267f58 = []byte{ + // 272 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x54, 0x90, 0xbb, 0x4e, 0x84, 0x40, + 0x14, 0x86, 0x19, 0x5d, 0xd1, 0x1d, 0xb1, 0x99, 0xc4, 0x48, 0x4c, 0x1c, 0x51, 0x1b, 0x2c, 0x84, + 0x44, 0x0b, 0x6d, 0xbd, 0x34, 0xc4, 0x8e, 0xd2, 0x66, 0x73, 0x18, 0x26, 0x40, 0x16, 0x18, 0xe4, + 0xcc, 0x1a, 0x79, 0x0b, 0x1f, 0xcb, 0xc4, 0x66, 0x4b, 0x4b, 0x03, 0x2f, 0x62, 0x20, 0x0b, 0xd1, + 0x6e, 0xbe, 0xff, 0x92, 0x39, 0xf9, 0xe9, 0x25, 0x36, 0x45, 0x95, 0xaa, 0xb2, 0xf1, 0x33, 0x01, + 0x02, 0xf2, 0x3c, 0x02, 0xb1, 0x44, 0x7f, 0x7c, 0x2d, 0x62, 0xd0, 0xe0, 0x55, 0xb5, 0xd2, 0x8a, + 0x1d, 0x8e, 0x51, 0xef, 0x6f, 0xf4, 0xfc, 0x8b, 0x50, 0xeb, 0x71, 0x43, 0x4f, 0xa0, 0x81, 0x9d, + 0x51, 0x6b, 0xaa, 0x2f, 0x65, 0x63, 0x13, 0x87, 0xb8, 0xf3, 0x70, 0x7f, 0xd4, 0x9e, 0x65, 0xc3, + 0x8e, 0xe8, 0x6e, 0xa5, 0x6a, 0xbd, 0xc8, 0x62, 0x7b, 0x6b, 0x70, 0xcd, 0x1e, 0x83, 0x98, 0x9d, + 0x50, 0x2a, 0x52, 0x28, 0x4b, 0x99, 0xf7, 0xde, 0xf6, 0xe0, 0xcd, 0x37, 0x4a, 0x10, 0xb3, 0x63, + 0xba, 0x87, 0xf2, 0x75, 0x25, 0x4b, 0x21, 0xed, 0x99, 0x43, 0xdc, 0x59, 0x38, 0x31, 0x3b, 0xa5, + 0xd3, 0x17, 0x7d, 0x77, 0x67, 0xe8, 0xd2, 0x51, 0x0a, 0x62, 0x76, 0x41, 0x0f, 0xa6, 0x00, 0xd4, + 0x09, 0xda, 0xa6, 0x43, 0x5c, 0x2b, 0x9c, 0x8e, 0xbd, 0xaf, 0x13, 0x7c, 0x08, 0x3f, 0x5b, 0x4e, + 0xd6, 0x2d, 0x27, 0x3f, 0x2d, 0x27, 0x1f, 0x1d, 0x37, 0xd6, 0x1d, 0x37, 0xbe, 0x3b, 0x6e, 0xbc, + 0xdc, 0x25, 0x99, 0x4e, 0x57, 0x91, 0x27, 0x54, 0xe1, 0x2b, 0x2c, 0x14, 0x66, 0x78, 0x95, 0x43, + 0x84, 0x23, 0xf8, 0x6f, 0xd7, 0xb7, 0xfe, 0xfb, 0xff, 0x19, 0x75, 0x53, 0x49, 0x8c, 0xcc, 0x61, + 0xbf, 0x9b, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6c, 0xc9, 0x6f, 0x7e, 0x6c, 0x01, 0x00, 0x00, } func (m *CallbackData) Marshal() (dAtA []byte, err error) { diff --git a/x/icacallbacks/types/genesis.pb.go b/x/icacallbacks/types/genesis.pb.go index ec7b94dca12..27eb839b2b6 100644 --- a/x/icacallbacks/types/genesis.pb.go +++ b/x/icacallbacks/types/genesis.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/icacallbacks/genesis.proto +// source: symphony/icacallbacks/genesis.proto package types @@ -34,7 +34,7 @@ func (m *GenesisState) Reset() { *m = GenesisState{} } func (m *GenesisState) String() string { return proto.CompactTextString(m) } func (*GenesisState) ProtoMessage() {} func (*GenesisState) Descriptor() ([]byte, []int) { - return fileDescriptor_8c333baddfa20681, []int{0} + return fileDescriptor_d973163c8855402b, []int{0} } func (m *GenesisState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -85,31 +85,33 @@ func (m *GenesisState) GetCallbackDataList() []CallbackData { } func init() { - proto.RegisterType((*GenesisState)(nil), "stride.icacallbacks.GenesisState") + proto.RegisterType((*GenesisState)(nil), "symphony.icacallbacks.GenesisState") } -func init() { proto.RegisterFile("stride/icacallbacks/genesis.proto", fileDescriptor_8c333baddfa20681) } +func init() { + proto.RegisterFile("symphony/icacallbacks/genesis.proto", fileDescriptor_d973163c8855402b) +} -var fileDescriptor_8c333baddfa20681 = []byte{ - // 278 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x2c, 0x2e, 0x29, 0xca, - 0x4c, 0x49, 0xd5, 0xcf, 0x4c, 0x4e, 0x4c, 0x4e, 0xcc, 0xc9, 0x49, 0x4a, 0x4c, 0xce, 0x2e, 0xd6, - 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x86, - 0x28, 0xd1, 0x43, 0x56, 0x22, 0x25, 0x92, 0x9e, 0x9f, 0x9e, 0x0f, 0x96, 0xd7, 0x07, 0xb1, 0x20, - 0x4a, 0xa5, 0xd4, 0xb1, 0x99, 0x06, 0x63, 0xc5, 0xa7, 0x24, 0x96, 0x24, 0x42, 0x15, 0x2a, 0x60, - 0x53, 0x58, 0x90, 0x58, 0x94, 0x98, 0x0b, 0xb5, 0x55, 0x69, 0x27, 0x23, 0x17, 0x8f, 0x3b, 0xc4, - 0x1d, 0xc1, 0x25, 0x89, 0x25, 0xa9, 0x42, 0x96, 0x5c, 0x6c, 0x10, 0x05, 0x12, 0x8c, 0x0a, 0x8c, - 0x1a, 0xdc, 0x46, 0xd2, 0x7a, 0x58, 0xdc, 0xa5, 0x17, 0x00, 0x56, 0xe2, 0xc4, 0x72, 0xe2, 0x9e, - 0x3c, 0x43, 0x10, 0x54, 0x83, 0x90, 0x38, 0x17, 0x7b, 0x41, 0x7e, 0x51, 0x49, 0x7c, 0x66, 0x8a, - 0x04, 0x93, 0x02, 0xa3, 0x06, 0x67, 0x10, 0x1b, 0x88, 0xeb, 0x99, 0x22, 0x14, 0xca, 0x25, 0x84, - 0xe2, 0xba, 0xf8, 0x9c, 0xcc, 0xe2, 0x12, 0x09, 0x66, 0x05, 0x66, 0x0d, 0x6e, 0x23, 0x45, 0xac, - 0xe6, 0x3b, 0x43, 0x59, 0x2e, 0x89, 0x25, 0x89, 0x50, 0x5b, 0x04, 0x92, 0x91, 0xc4, 0x7c, 0x32, - 0x8b, 0x4b, 0x9c, 0x02, 0x4e, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, - 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, 0xf1, 0x58, 0x8e, 0x21, 0xca, 0x2c, - 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, 0x3f, 0x18, 0x6c, 0xbc, 0xae, 0x4f, - 0x62, 0x52, 0xb1, 0x3e, 0x34, 0x38, 0xca, 0x8c, 0x2c, 0xf4, 0x2b, 0x50, 0x03, 0xa5, 0xa4, 0xb2, - 0x20, 0xb5, 0x38, 0x89, 0x0d, 0x1c, 0x28, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x65, 0x3f, - 0xcf, 0x8c, 0xaf, 0x01, 0x00, 0x00, +var fileDescriptor_d973163c8855402b = []byte{ + // 283 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x2e, 0xae, 0xcc, 0x2d, + 0xc8, 0xc8, 0xcf, 0xab, 0xd4, 0xcf, 0x4c, 0x4e, 0x4c, 0x4e, 0xcc, 0xc9, 0x49, 0x4a, 0x4c, 0xce, + 0x2e, 0xd6, 0x4f, 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, + 0x12, 0x85, 0x29, 0xd2, 0x43, 0x56, 0x24, 0x25, 0x92, 0x9e, 0x9f, 0x9e, 0x0f, 0x56, 0xa1, 0x0f, + 0x62, 0x41, 0x14, 0x4b, 0x69, 0x62, 0x37, 0x11, 0xc6, 0x8a, 0x4f, 0x49, 0x2c, 0x49, 0x84, 0x2a, + 0x55, 0xc2, 0xae, 0xb4, 0x20, 0xb1, 0x28, 0x31, 0x17, 0x6a, 0xb7, 0xd2, 0x5e, 0x46, 0x2e, 0x1e, + 0x77, 0x88, 0x6b, 0x82, 0x4b, 0x12, 0x4b, 0x52, 0x85, 0xac, 0xb9, 0xd8, 0x20, 0x0a, 0x24, 0x18, + 0x15, 0x18, 0x35, 0xb8, 0x8d, 0x64, 0xf5, 0xb0, 0xba, 0x4e, 0x2f, 0x00, 0xac, 0xc8, 0x89, 0xe5, + 0xc4, 0x3d, 0x79, 0x86, 0x20, 0xa8, 0x16, 0x21, 0x71, 0x2e, 0xf6, 0x82, 0xfc, 0xa2, 0x92, 0xf8, + 0xcc, 0x14, 0x09, 0x26, 0x05, 0x46, 0x0d, 0xce, 0x20, 0x36, 0x10, 0xd7, 0x33, 0x45, 0x28, 0x9c, + 0x4b, 0x08, 0xc5, 0x85, 0xf1, 0x39, 0x99, 0xc5, 0x25, 0x12, 0xcc, 0x0a, 0xcc, 0x1a, 0xdc, 0x46, + 0xca, 0x38, 0x6c, 0x70, 0x86, 0xb2, 0x5c, 0x12, 0x4b, 0x12, 0xa1, 0xf6, 0x08, 0x24, 0x23, 0x89, + 0xf9, 0x64, 0x16, 0x97, 0x38, 0x05, 0x9d, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, + 0x47, 0x72, 0x8c, 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, + 0x94, 0x45, 0x7a, 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0xae, 0x7e, 0x7e, 0x71, 0x6e, + 0x7e, 0x71, 0x66, 0xb1, 0x6e, 0x4e, 0x62, 0x52, 0x31, 0x8c, 0xa3, 0x5f, 0x66, 0x64, 0xae, 0x5f, + 0x81, 0x1a, 0x34, 0x25, 0x95, 0x05, 0xa9, 0xc5, 0x49, 0x6c, 0xe0, 0xa0, 0x31, 0x06, 0x04, 0x00, + 0x00, 0xff, 0xff, 0x00, 0x81, 0xf1, 0x92, 0xbd, 0x01, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/x/icacallbacks/types/packet.pb.go b/x/icacallbacks/types/packet.pb.go index c129acb9945..1a3b4a17e2e 100644 --- a/x/icacallbacks/types/packet.pb.go +++ b/x/icacallbacks/types/packet.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/icacallbacks/packet.proto +// source: symphony/icacallbacks/packet.proto package types @@ -33,7 +33,7 @@ func (m *IcacallbacksPacketData) Reset() { *m = IcacallbacksPacketData{} func (m *IcacallbacksPacketData) String() string { return proto.CompactTextString(m) } func (*IcacallbacksPacketData) ProtoMessage() {} func (*IcacallbacksPacketData) Descriptor() ([]byte, []int) { - return fileDescriptor_e68b4c401320f2a0, []int{0} + return fileDescriptor_8dabd3d72482bcc6, []int{0} } func (m *IcacallbacksPacketData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -102,7 +102,7 @@ func (m *NoData) Reset() { *m = NoData{} } func (m *NoData) String() string { return proto.CompactTextString(m) } func (*NoData) ProtoMessage() {} func (*NoData) Descriptor() ([]byte, []int) { - return fileDescriptor_e68b4c401320f2a0, []int{1} + return fileDescriptor_8dabd3d72482bcc6, []int{1} } func (m *NoData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -132,27 +132,29 @@ func (m *NoData) XXX_DiscardUnknown() { var xxx_messageInfo_NoData proto.InternalMessageInfo func init() { - proto.RegisterType((*IcacallbacksPacketData)(nil), "stride.icacallbacks.IcacallbacksPacketData") - proto.RegisterType((*NoData)(nil), "stride.icacallbacks.NoData") -} - -func init() { proto.RegisterFile("stride/icacallbacks/packet.proto", fileDescriptor_e68b4c401320f2a0) } - -var fileDescriptor_e68b4c401320f2a0 = []byte{ - // 195 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x28, 0x2e, 0x29, 0xca, - 0x4c, 0x49, 0xd5, 0xcf, 0x4c, 0x4e, 0x4c, 0x4e, 0xcc, 0xc9, 0x49, 0x4a, 0x4c, 0xce, 0x2e, 0xd6, - 0x2f, 0x48, 0x4c, 0xce, 0x4e, 0x2d, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x86, 0xa8, - 0xd0, 0x43, 0x56, 0xa1, 0x14, 0xc5, 0x25, 0xe6, 0x89, 0xc4, 0x0f, 0x00, 0x6b, 0x70, 0x49, 0x2c, - 0x49, 0x14, 0x32, 0xe3, 0x62, 0xcf, 0xcb, 0x8f, 0x4f, 0x49, 0x2c, 0x49, 0x94, 0x60, 0x54, 0x60, - 0xd4, 0xe0, 0x36, 0x92, 0xd6, 0xc3, 0x62, 0x80, 0x9e, 0x5f, 0x3e, 0x48, 0xb5, 0x07, 0x43, 0x10, - 0x5b, 0x1e, 0x98, 0xe5, 0xc4, 0xc1, 0xc5, 0x06, 0xb1, 0x56, 0x89, 0x83, 0x8b, 0x0d, 0x22, 0xeb, - 0x14, 0x70, 0xe2, 0x91, 0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, 0x0f, 0x1e, 0xc9, 0x31, 0x4e, 0x78, - 0x2c, 0xc7, 0x70, 0xe1, 0xb1, 0x1c, 0xc3, 0x8d, 0xc7, 0x72, 0x0c, 0x51, 0x66, 0xe9, 0x99, 0x25, - 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0xc1, 0x60, 0xe3, 0x75, 0x7d, 0x12, 0x93, 0x8a, - 0xf5, 0xa1, 0xbe, 0x29, 0x33, 0xb2, 0xd0, 0xaf, 0x40, 0xf5, 0x53, 0x49, 0x65, 0x41, 0x6a, 0x71, - 0x12, 0x1b, 0xd8, 0x4f, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x12, 0xb0, 0xae, 0x83, 0xf7, - 0x00, 0x00, 0x00, + proto.RegisterType((*IcacallbacksPacketData)(nil), "symphony.icacallbacks.IcacallbacksPacketData") + proto.RegisterType((*NoData)(nil), "symphony.icacallbacks.NoData") +} + +func init() { + proto.RegisterFile("symphony/icacallbacks/packet.proto", fileDescriptor_8dabd3d72482bcc6) +} + +var fileDescriptor_8dabd3d72482bcc6 = []byte{ + // 200 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x2a, 0xae, 0xcc, 0x2d, + 0xc8, 0xc8, 0xcf, 0xab, 0xd4, 0xcf, 0x4c, 0x4e, 0x4c, 0x4e, 0xcc, 0xc9, 0x49, 0x4a, 0x4c, 0xce, + 0x2e, 0xd6, 0x2f, 0x48, 0x4c, 0xce, 0x4e, 0x2d, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, + 0x85, 0xa9, 0xd1, 0x43, 0x56, 0xa3, 0x14, 0xc3, 0x25, 0xe6, 0x89, 0xc4, 0x0f, 0x00, 0x6b, 0x71, + 0x49, 0x2c, 0x49, 0x14, 0xb2, 0xe0, 0x62, 0xcf, 0xcb, 0x8f, 0x4f, 0x49, 0x2c, 0x49, 0x94, 0x60, + 0x54, 0x60, 0xd4, 0xe0, 0x36, 0x92, 0xd5, 0xc3, 0x6a, 0x84, 0x9e, 0x5f, 0x3e, 0x48, 0xbd, 0x07, + 0x43, 0x10, 0x5b, 0x1e, 0x98, 0xe5, 0xc4, 0xc1, 0xc5, 0x06, 0xb1, 0x5a, 0x89, 0x83, 0x8b, 0x0d, + 0x22, 0xeb, 0x14, 0x74, 0xe2, 0x91, 0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, 0x0f, 0x1e, 0xc9, 0x31, + 0x4e, 0x78, 0x2c, 0xc7, 0x70, 0xe1, 0xb1, 0x1c, 0xc3, 0x8d, 0xc7, 0x72, 0x0c, 0x51, 0x16, 0xe9, + 0x99, 0x25, 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0xf9, 0xc5, 0xb9, 0xf9, 0xc5, 0x99, + 0xc5, 0xba, 0x39, 0x89, 0x49, 0xc5, 0x30, 0x8e, 0x7e, 0x99, 0x91, 0xb9, 0x7e, 0x05, 0xaa, 0xcf, + 0x4a, 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0x3e, 0x33, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, + 0x0c, 0xf1, 0xf1, 0xf0, 0xff, 0x00, 0x00, 0x00, } func (m *IcacallbacksPacketData) Marshal() (dAtA []byte, err error) { diff --git a/x/icacallbacks/types/params.pb.go b/x/icacallbacks/types/params.pb.go index 8d4c4808e73..09484794057 100644 --- a/x/icacallbacks/types/params.pb.go +++ b/x/icacallbacks/types/params.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/icacallbacks/params.proto +// source: symphony/icacallbacks/params.proto package types @@ -30,7 +30,7 @@ type Params struct { func (m *Params) Reset() { *m = Params{} } func (*Params) ProtoMessage() {} func (*Params) Descriptor() ([]byte, []int) { - return fileDescriptor_4c402599e6cfed62, []int{0} + return fileDescriptor_088a01e121a7bcbb, []int{0} } func (m *Params) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -60,23 +60,26 @@ func (m *Params) XXX_DiscardUnknown() { var xxx_messageInfo_Params proto.InternalMessageInfo func init() { - proto.RegisterType((*Params)(nil), "stride.icacallbacks.Params") + proto.RegisterType((*Params)(nil), "symphony.icacallbacks.Params") } -func init() { proto.RegisterFile("stride/icacallbacks/params.proto", fileDescriptor_4c402599e6cfed62) } +func init() { + proto.RegisterFile("symphony/icacallbacks/params.proto", fileDescriptor_088a01e121a7bcbb) +} -var fileDescriptor_4c402599e6cfed62 = []byte{ - // 160 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x28, 0x2e, 0x29, 0xca, - 0x4c, 0x49, 0xd5, 0xcf, 0x4c, 0x4e, 0x4c, 0x4e, 0xcc, 0xc9, 0x49, 0x4a, 0x4c, 0xce, 0x2e, 0xd6, - 0x2f, 0x48, 0x2c, 0x4a, 0xcc, 0x2d, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x86, 0xa8, - 0xd0, 0x43, 0x56, 0x21, 0x25, 0x92, 0x9e, 0x9f, 0x9e, 0x0f, 0x96, 0xd7, 0x07, 0xb1, 0x20, 0x4a, - 0x95, 0xf8, 0xb8, 0xd8, 0x02, 0xc0, 0x5a, 0xad, 0x58, 0x66, 0x2c, 0x90, 0x67, 0x70, 0x0a, 0x38, - 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, - 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0xb3, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, - 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0xfd, 0x60, 0xb0, 0xf9, 0xba, 0x3e, 0x89, 0x49, 0xc5, 0xfa, 0x50, - 0xd7, 0x94, 0x19, 0x59, 0xe8, 0x57, 0xa0, 0xba, 0xa9, 0xa4, 0xb2, 0x20, 0xb5, 0x38, 0x89, 0x0d, - 0x6c, 0x91, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0xc4, 0xac, 0xf9, 0x95, 0xb7, 0x00, 0x00, 0x00, +var fileDescriptor_088a01e121a7bcbb = []byte{ + // 166 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x2a, 0xae, 0xcc, 0x2d, + 0xc8, 0xc8, 0xcf, 0xab, 0xd4, 0xcf, 0x4c, 0x4e, 0x4c, 0x4e, 0xcc, 0xc9, 0x49, 0x4a, 0x4c, 0xce, + 0x2e, 0xd6, 0x2f, 0x48, 0x2c, 0x4a, 0xcc, 0x2d, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, + 0x85, 0xa9, 0xd1, 0x43, 0x56, 0x23, 0x25, 0x92, 0x9e, 0x9f, 0x9e, 0x0f, 0x56, 0xa1, 0x0f, 0x62, + 0x41, 0x14, 0x2b, 0xf1, 0x71, 0xb1, 0x05, 0x80, 0x35, 0x5b, 0xb1, 0xcc, 0x58, 0x20, 0xcf, 0xe0, + 0x14, 0x74, 0xe2, 0x91, 0x1c, 0xe3, 0x85, 0x47, 0x72, 0x8c, 0x0f, 0x1e, 0xc9, 0x31, 0x4e, 0x78, + 0x2c, 0xc7, 0x70, 0xe1, 0xb1, 0x1c, 0xc3, 0x8d, 0xc7, 0x72, 0x0c, 0x51, 0x16, 0xe9, 0x99, 0x25, + 0x19, 0xa5, 0x49, 0x7a, 0xc9, 0xf9, 0xb9, 0xfa, 0xf9, 0xc5, 0xb9, 0xf9, 0xc5, 0x99, 0xc5, 0xba, + 0x39, 0x89, 0x49, 0xc5, 0x30, 0x8e, 0x7e, 0x99, 0x91, 0xb9, 0x7e, 0x05, 0xaa, 0xbb, 0x4a, 0x2a, + 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0x56, 0x19, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x01, 0xbe, + 0xd3, 0x56, 0xbd, 0x00, 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { diff --git a/x/icacallbacks/types/query.pb.go b/x/icacallbacks/types/query.pb.go index cccb884ff8f..ba97e80b6d6 100644 --- a/x/icacallbacks/types/query.pb.go +++ b/x/icacallbacks/types/query.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/icacallbacks/query.proto +// source: symphony/icacallbacks/query.proto package types @@ -38,7 +38,7 @@ func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } func (*QueryParamsRequest) ProtoMessage() {} func (*QueryParamsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_5e73b99abb7e91c2, []int{0} + return fileDescriptor_c30780fb2dcf6733, []int{0} } func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -77,7 +77,7 @@ func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } func (*QueryParamsResponse) ProtoMessage() {} func (*QueryParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_5e73b99abb7e91c2, []int{1} + return fileDescriptor_c30780fb2dcf6733, []int{1} } func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -121,7 +121,7 @@ func (m *QueryGetCallbackDataRequest) Reset() { *m = QueryGetCallbackDat func (m *QueryGetCallbackDataRequest) String() string { return proto.CompactTextString(m) } func (*QueryGetCallbackDataRequest) ProtoMessage() {} func (*QueryGetCallbackDataRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_5e73b99abb7e91c2, []int{2} + return fileDescriptor_c30780fb2dcf6733, []int{2} } func (m *QueryGetCallbackDataRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -165,7 +165,7 @@ func (m *QueryGetCallbackDataResponse) Reset() { *m = QueryGetCallbackDa func (m *QueryGetCallbackDataResponse) String() string { return proto.CompactTextString(m) } func (*QueryGetCallbackDataResponse) ProtoMessage() {} func (*QueryGetCallbackDataResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_5e73b99abb7e91c2, []int{3} + return fileDescriptor_c30780fb2dcf6733, []int{3} } func (m *QueryGetCallbackDataResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -209,7 +209,7 @@ func (m *QueryAllCallbackDataRequest) Reset() { *m = QueryAllCallbackDat func (m *QueryAllCallbackDataRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllCallbackDataRequest) ProtoMessage() {} func (*QueryAllCallbackDataRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_5e73b99abb7e91c2, []int{4} + return fileDescriptor_c30780fb2dcf6733, []int{4} } func (m *QueryAllCallbackDataRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -254,7 +254,7 @@ func (m *QueryAllCallbackDataResponse) Reset() { *m = QueryAllCallbackDa func (m *QueryAllCallbackDataResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllCallbackDataResponse) ProtoMessage() {} func (*QueryAllCallbackDataResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_5e73b99abb7e91c2, []int{5} + return fileDescriptor_c30780fb2dcf6733, []int{5} } func (m *QueryAllCallbackDataResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -298,51 +298,52 @@ func (m *QueryAllCallbackDataResponse) GetPagination() *query.PageResponse { } func init() { - proto.RegisterType((*QueryParamsRequest)(nil), "stride.icacallbacks.QueryParamsRequest") - proto.RegisterType((*QueryParamsResponse)(nil), "stride.icacallbacks.QueryParamsResponse") - proto.RegisterType((*QueryGetCallbackDataRequest)(nil), "stride.icacallbacks.QueryGetCallbackDataRequest") - proto.RegisterType((*QueryGetCallbackDataResponse)(nil), "stride.icacallbacks.QueryGetCallbackDataResponse") - proto.RegisterType((*QueryAllCallbackDataRequest)(nil), "stride.icacallbacks.QueryAllCallbackDataRequest") - proto.RegisterType((*QueryAllCallbackDataResponse)(nil), "stride.icacallbacks.QueryAllCallbackDataResponse") -} - -func init() { proto.RegisterFile("stride/icacallbacks/query.proto", fileDescriptor_5e73b99abb7e91c2) } - -var fileDescriptor_5e73b99abb7e91c2 = []byte{ - // 521 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0xcf, 0x6b, 0x13, 0x41, - 0x14, 0xc7, 0x33, 0xb5, 0x06, 0x9c, 0x56, 0x84, 0x69, 0x0f, 0x92, 0x96, 0x6d, 0xbb, 0x07, 0x53, - 0x05, 0x67, 0x9a, 0x08, 0x45, 0x0f, 0xa2, 0xad, 0x3f, 0x7a, 0xb0, 0x87, 0x18, 0x6f, 0x5e, 0xe4, - 0xed, 0x76, 0x58, 0x97, 0x4e, 0x76, 0xb6, 0x99, 0x49, 0x31, 0x88, 0x17, 0xf1, 0xe8, 0x41, 0xf0, - 0xff, 0xf0, 0xe6, 0xc5, 0xbf, 0xa0, 0xc7, 0x82, 0x17, 0x4f, 0x22, 0x89, 0x7f, 0x88, 0x64, 0x66, - 0x5a, 0x77, 0xe9, 0x6c, 0x43, 0x7b, 0x1b, 0x5e, 0xde, 0xf7, 0xfb, 0x3e, 0x6f, 0xdf, 0x97, 0xe0, - 0x15, 0xa5, 0xfb, 0xe9, 0x1e, 0x67, 0x69, 0x0c, 0x31, 0x08, 0x11, 0x41, 0xbc, 0xaf, 0xd8, 0xc1, - 0x80, 0xf7, 0x87, 0x34, 0xef, 0x4b, 0x2d, 0xc9, 0x82, 0x6d, 0xa0, 0xc5, 0x86, 0xc6, 0x9d, 0x58, - 0xaa, 0x9e, 0x54, 0x2c, 0x02, 0xc5, 0x6d, 0x37, 0x3b, 0x6c, 0x45, 0x5c, 0x43, 0x8b, 0xe5, 0x90, - 0xa4, 0x19, 0xe8, 0x54, 0x66, 0xd6, 0xa0, 0xb1, 0x98, 0xc8, 0x44, 0x9a, 0x27, 0x9b, 0xbc, 0x5c, - 0x75, 0x39, 0x91, 0x32, 0x11, 0x9c, 0x41, 0x9e, 0x32, 0xc8, 0x32, 0xa9, 0x8d, 0x44, 0xb9, 0x5f, - 0x9b, 0x3e, 0xaa, 0x93, 0xd7, 0x9b, 0x3d, 0xd0, 0xe0, 0x1a, 0x57, 0x7d, 0x8d, 0x39, 0xf4, 0xa1, - 0xe7, 0xac, 0xc2, 0x45, 0x4c, 0x5e, 0x4e, 0x00, 0x3b, 0xa6, 0xd8, 0xe5, 0x07, 0x03, 0xae, 0x74, - 0xd8, 0xc1, 0x0b, 0xa5, 0xaa, 0xca, 0x65, 0xa6, 0x38, 0x79, 0x80, 0xeb, 0x56, 0x7c, 0x13, 0xad, - 0xa2, 0xf5, 0xb9, 0xf6, 0x12, 0xf5, 0x6c, 0x4f, 0xad, 0x68, 0x7b, 0xf6, 0xe8, 0xf7, 0x4a, 0xad, - 0xeb, 0x04, 0xe1, 0x63, 0xbc, 0x64, 0x1c, 0x77, 0xb8, 0x7e, 0xe2, 0x3a, 0x9f, 0x82, 0x06, 0x37, - 0x90, 0xac, 0xe1, 0xf9, 0x53, 0xfe, 0x7d, 0x3e, 0x34, 0xfe, 0xd7, 0xba, 0x73, 0x27, 0xb5, 0x17, - 0x7c, 0x18, 0x0a, 0xbc, 0xec, 0x77, 0x70, 0x70, 0xbb, 0xf8, 0x7a, 0xe9, 0x13, 0x38, 0xc6, 0x35, - 0x2f, 0x63, 0xd1, 0xc1, 0x91, 0x9e, 0x02, 0x4c, 0x6a, 0x21, 0x77, 0xbc, 0x5b, 0x42, 0xf8, 0x78, - 0x9f, 0x63, 0xfc, 0xff, 0x92, 0x6e, 0xd2, 0x2d, 0x6a, 0xcf, 0x4e, 0x27, 0x67, 0xa7, 0x36, 0x24, - 0xee, 0xec, 0xb4, 0x03, 0x09, 0x77, 0xda, 0x6e, 0x41, 0x19, 0x7e, 0x47, 0x6e, 0xab, 0x33, 0x73, - 0xaa, 0xb7, 0xba, 0x72, 0xe9, 0xad, 0xc8, 0x4e, 0x09, 0x7b, 0xc6, 0x60, 0x37, 0xa7, 0x62, 0x5b, - 0x94, 0x22, 0x77, 0xfb, 0xd3, 0x2c, 0xbe, 0x6a, 0xb8, 0xc9, 0x67, 0x84, 0xeb, 0xf6, 0xe2, 0xa4, - 0xe9, 0x85, 0x3a, 0x1b, 0xaf, 0xc6, 0xfa, 0xf4, 0x46, 0x3b, 0x33, 0x64, 0x1f, 0x7f, 0xfe, 0xfd, - 0x3a, 0x73, 0x9b, 0x34, 0xd9, 0x2b, 0xa3, 0xb8, 0xbb, 0x0b, 0x91, 0x62, 0xd5, 0xa9, 0x26, 0x3f, - 0x10, 0x9e, 0x2f, 0x7e, 0x06, 0xb2, 0x51, 0x3d, 0xcb, 0x9f, 0xc5, 0x46, 0xeb, 0x02, 0x0a, 0x87, - 0xf9, 0xcc, 0x60, 0x3e, 0x22, 0x0f, 0xa7, 0x62, 0x96, 0x8e, 0xc9, 0xde, 0x17, 0x43, 0xff, 0x81, - 0x7c, 0x43, 0xf8, 0x46, 0xd1, 0x7f, 0x4b, 0x88, 0xf3, 0xf8, 0xfd, 0xd9, 0x3c, 0x8f, 0xbf, 0x22, - 0x65, 0xe1, 0xa6, 0xe1, 0xdf, 0x20, 0xf4, 0x62, 0xfc, 0xdb, 0x9d, 0xa3, 0x51, 0x80, 0x8e, 0x47, - 0x01, 0xfa, 0x33, 0x0a, 0xd0, 0x97, 0x71, 0x50, 0x3b, 0x1e, 0x07, 0xb5, 0x5f, 0xe3, 0xa0, 0xf6, - 0x7a, 0x33, 0x49, 0xf5, 0xdb, 0x41, 0x44, 0x63, 0xd9, 0xf3, 0x79, 0x1e, 0xb6, 0xef, 0xb3, 0x77, - 0x65, 0x67, 0x3d, 0xcc, 0xb9, 0x8a, 0xea, 0xe6, 0x6f, 0xe9, 0xde, 0xbf, 0x00, 0x00, 0x00, 0xff, - 0xff, 0x4e, 0xe1, 0x07, 0xbf, 0x79, 0x05, 0x00, 0x00, + proto.RegisterType((*QueryParamsRequest)(nil), "symphony.icacallbacks.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "symphony.icacallbacks.QueryParamsResponse") + proto.RegisterType((*QueryGetCallbackDataRequest)(nil), "symphony.icacallbacks.QueryGetCallbackDataRequest") + proto.RegisterType((*QueryGetCallbackDataResponse)(nil), "symphony.icacallbacks.QueryGetCallbackDataResponse") + proto.RegisterType((*QueryAllCallbackDataRequest)(nil), "symphony.icacallbacks.QueryAllCallbackDataRequest") + proto.RegisterType((*QueryAllCallbackDataResponse)(nil), "symphony.icacallbacks.QueryAllCallbackDataResponse") +} + +func init() { proto.RegisterFile("symphony/icacallbacks/query.proto", fileDescriptor_c30780fb2dcf6733) } + +var fileDescriptor_c30780fb2dcf6733 = []byte{ + // 529 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x94, 0x4f, 0x6b, 0xd4, 0x40, + 0x18, 0xc6, 0x77, 0x6a, 0x5d, 0x70, 0x5a, 0x11, 0xc6, 0x0a, 0xb2, 0xd6, 0x68, 0x47, 0xb4, 0xb6, + 0xd8, 0x19, 0xba, 0x15, 0x14, 0x8a, 0x60, 0x5b, 0xb1, 0x07, 0x41, 0x6a, 0x8e, 0x5e, 0xe4, 0x4d, + 0x1c, 0xd2, 0xd0, 0x6c, 0x26, 0xdd, 0x99, 0x2d, 0x06, 0xf1, 0xe2, 0xd1, 0x83, 0x08, 0x7e, 0x11, + 0x6f, 0x5e, 0xfc, 0x00, 0x3d, 0x16, 0xbc, 0x78, 0x12, 0xd9, 0xf5, 0x83, 0xc8, 0xce, 0xcc, 0xb6, + 0x09, 0x4d, 0xb6, 0x2e, 0xbd, 0x4d, 0xde, 0xbc, 0x7f, 0x7e, 0xcf, 0xbc, 0x4f, 0x82, 0x17, 0x54, + 0xde, 0xc9, 0x76, 0x65, 0x9a, 0xf3, 0x38, 0x84, 0x10, 0x92, 0x24, 0x80, 0x70, 0x4f, 0xf1, 0xfd, + 0x9e, 0xe8, 0xe6, 0x2c, 0xeb, 0x4a, 0x2d, 0xc9, 0xb5, 0x51, 0x0a, 0x2b, 0xa6, 0xb4, 0x96, 0x43, + 0xa9, 0x3a, 0x52, 0xf1, 0x00, 0x94, 0xb0, 0xf9, 0xfc, 0x60, 0x35, 0x10, 0x1a, 0x56, 0x79, 0x06, + 0x51, 0x9c, 0x82, 0x8e, 0x65, 0x6a, 0x5b, 0xb4, 0xe6, 0x22, 0x19, 0x49, 0x73, 0xe4, 0xc3, 0x93, + 0x8b, 0xce, 0x47, 0x52, 0x46, 0x89, 0xe0, 0x90, 0xc5, 0x1c, 0xd2, 0x54, 0x6a, 0x53, 0xa2, 0xdc, + 0xdb, 0xa5, 0x6a, 0xb2, 0xd1, 0xe9, 0xcd, 0x5b, 0xd0, 0xe0, 0x52, 0x69, 0x75, 0x6a, 0x06, 0x5d, + 0xe8, 0xb8, 0x76, 0x74, 0x0e, 0x93, 0x57, 0x43, 0xc8, 0x1d, 0x13, 0xf4, 0xc5, 0x7e, 0x4f, 0x28, + 0x4d, 0x7d, 0x7c, 0xb5, 0x14, 0x55, 0x99, 0x4c, 0x95, 0x20, 0xeb, 0xb8, 0x69, 0x8b, 0xaf, 0xa3, + 0xdb, 0xe8, 0xfe, 0x4c, 0xfb, 0x26, 0xab, 0xbc, 0x03, 0x66, 0xcb, 0x36, 0xa7, 0x0f, 0x7f, 0xdf, + 0x6a, 0xf8, 0xae, 0x84, 0x3e, 0xc5, 0x37, 0x4c, 0xcf, 0x6d, 0xa1, 0xb7, 0x5c, 0xe6, 0x33, 0xd0, + 0xe0, 0x46, 0x92, 0x05, 0x3c, 0x7b, 0xac, 0x61, 0x4f, 0xe4, 0x66, 0xc2, 0x25, 0x7f, 0x66, 0x14, + 0x7b, 0x21, 0x72, 0x9a, 0xe2, 0xf9, 0xea, 0x0e, 0x0e, 0xef, 0x25, 0xbe, 0x5c, 0xba, 0x06, 0x47, + 0x79, 0xa7, 0x86, 0xb2, 0xd8, 0xc3, 0xb1, 0x1e, 0x23, 0x0c, 0x63, 0x54, 0x38, 0xe2, 0x8d, 0x24, + 0xa9, 0x22, 0x7e, 0x8e, 0xf1, 0xc9, 0x46, 0xdd, 0xac, 0x7b, 0xcc, 0xae, 0x9f, 0x0d, 0xd7, 0xcf, + 0xac, 0x5d, 0xdc, 0xfa, 0xd9, 0x0e, 0x44, 0xc2, 0xd5, 0xfa, 0x85, 0x4a, 0xfa, 0x1d, 0x39, 0x5d, + 0xa7, 0xe6, 0xd4, 0xeb, 0xba, 0x70, 0x0e, 0x5d, 0x64, 0xbb, 0x04, 0x3e, 0x65, 0xc0, 0x17, 0xcf, + 0x04, 0xb7, 0x30, 0x45, 0xf2, 0xf6, 0xa7, 0x69, 0x7c, 0xd1, 0x90, 0x93, 0xcf, 0x08, 0x37, 0xed, + 0xd6, 0xc9, 0x52, 0x0d, 0xd6, 0x69, 0x9b, 0xb5, 0x96, 0xff, 0x27, 0xd5, 0xce, 0xa5, 0x2b, 0x1f, + 0x7f, 0xfe, 0xfd, 0x3a, 0xb5, 0x48, 0xee, 0xf2, 0x6a, 0x57, 0x9f, 0x7c, 0x64, 0x86, 0xe2, 0x07, + 0xc2, 0xb3, 0xc5, 0x8b, 0x20, 0xed, 0x71, 0xb3, 0xaa, 0x3d, 0xd9, 0x5a, 0x9b, 0xa8, 0xc6, 0x81, + 0x6e, 0x19, 0xd0, 0x27, 0x64, 0xfd, 0x0c, 0xd0, 0xd2, 0x4a, 0xf9, 0xfb, 0xa2, 0xf9, 0x3f, 0x90, + 0x6f, 0x08, 0x5f, 0x29, 0x76, 0xdf, 0x48, 0x92, 0xf1, 0x0a, 0xaa, 0x3d, 0x3a, 0x5e, 0x41, 0x8d, + 0xdf, 0xe8, 0x43, 0xa3, 0x80, 0x91, 0x07, 0x93, 0x28, 0xd8, 0xf4, 0x0f, 0xfb, 0x1e, 0x3a, 0xea, + 0x7b, 0xe8, 0x4f, 0xdf, 0x43, 0x5f, 0x06, 0x5e, 0xe3, 0x68, 0xe0, 0x35, 0x7e, 0x0d, 0xbc, 0xc6, + 0xeb, 0xc7, 0x51, 0xac, 0x77, 0x7b, 0x01, 0x0b, 0x65, 0x87, 0x1b, 0x93, 0xc5, 0x6a, 0x25, 0x81, + 0x40, 0x8d, 0x1e, 0xf8, 0x41, 0xfb, 0x11, 0x7f, 0x57, 0x9e, 0xa1, 0xf3, 0x4c, 0xa8, 0xa0, 0x69, + 0x7e, 0x52, 0x6b, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x08, 0x45, 0x4a, 0x93, 0x8f, 0x05, 0x00, + 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -375,7 +376,7 @@ func NewQueryClient(cc grpc1.ClientConn) QueryClient { func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { out := new(QueryParamsResponse) - err := c.cc.Invoke(ctx, "/stride.icacallbacks.Query/Params", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.icacallbacks.Query/Params", in, out, opts...) if err != nil { return nil, err } @@ -384,7 +385,7 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts . func (c *queryClient) CallbackData(ctx context.Context, in *QueryGetCallbackDataRequest, opts ...grpc.CallOption) (*QueryGetCallbackDataResponse, error) { out := new(QueryGetCallbackDataResponse) - err := c.cc.Invoke(ctx, "/stride.icacallbacks.Query/CallbackData", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.icacallbacks.Query/CallbackData", in, out, opts...) if err != nil { return nil, err } @@ -393,7 +394,7 @@ func (c *queryClient) CallbackData(ctx context.Context, in *QueryGetCallbackData func (c *queryClient) CallbackDataAll(ctx context.Context, in *QueryAllCallbackDataRequest, opts ...grpc.CallOption) (*QueryAllCallbackDataResponse, error) { out := new(QueryAllCallbackDataResponse) - err := c.cc.Invoke(ctx, "/stride.icacallbacks.Query/CallbackDataAll", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.icacallbacks.Query/CallbackDataAll", in, out, opts...) if err != nil { return nil, err } @@ -438,7 +439,7 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.icacallbacks.Query/Params", + FullMethod: "/symphony.icacallbacks.Query/Params", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) @@ -456,7 +457,7 @@ func _Query_CallbackData_Handler(srv interface{}, ctx context.Context, dec func( } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.icacallbacks.Query/CallbackData", + FullMethod: "/symphony.icacallbacks.Query/CallbackData", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).CallbackData(ctx, req.(*QueryGetCallbackDataRequest)) @@ -474,7 +475,7 @@ func _Query_CallbackDataAll_Handler(srv interface{}, ctx context.Context, dec fu } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.icacallbacks.Query/CallbackDataAll", + FullMethod: "/symphony.icacallbacks.Query/CallbackDataAll", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).CallbackDataAll(ctx, req.(*QueryAllCallbackDataRequest)) @@ -483,7 +484,7 @@ func _Query_CallbackDataAll_Handler(srv interface{}, ctx context.Context, dec fu } var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "stride.icacallbacks.Query", + ServiceName: "symphony.icacallbacks.Query", HandlerType: (*QueryServer)(nil), Methods: []grpc.MethodDesc{ { @@ -500,7 +501,7 @@ var _Query_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "stride/icacallbacks/query.proto", + Metadata: "symphony/icacallbacks/query.proto", } func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { diff --git a/x/icacallbacks/types/query.pb.gw.go b/x/icacallbacks/types/query.pb.gw.go index 0874f2e19a5..5f77d3038a7 100644 --- a/x/icacallbacks/types/query.pb.gw.go +++ b/x/icacallbacks/types/query.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: stride/icacallbacks/query.proto +// source: symphony/icacallbacks/query.proto /* Package types is a reverse proxy. @@ -321,11 +321,11 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } var ( - pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"Stride-Labs", "stride", "icacallbacks", "params"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"symphony", "icacallbacks", "v1beta1", "params"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_CallbackData_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"Stride-Labs", "stride", "icacallbacks", "callback_data", "callback_key"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_CallbackData_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"symphony", "icacallbacks", "v1beta1", "callback_data", "callback_key"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_CallbackDataAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"Stride-Labs", "stride", "icacallbacks", "callback_data"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_CallbackDataAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"symphony", "icacallbacks", "v1beta1", "callback_data"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( diff --git a/x/icaoracle/types/callbacks.pb.go b/x/icaoracle/types/callbacks.pb.go index de452fb2e24..18c8f43d6b3 100644 --- a/x/icaoracle/types/callbacks.pb.go +++ b/x/icaoracle/types/callbacks.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/icaoracle/callbacks.proto +// source: symphony/icaoracle/callbacks.proto package types @@ -31,7 +31,7 @@ func (m *InstantiateOracleCallback) Reset() { *m = InstantiateOracleCall func (m *InstantiateOracleCallback) String() string { return proto.CompactTextString(m) } func (*InstantiateOracleCallback) ProtoMessage() {} func (*InstantiateOracleCallback) Descriptor() ([]byte, []int) { - return fileDescriptor_7b4c39df2554f0a2, []int{0} + return fileDescriptor_ad8b47bd8705b827, []int{0} } func (m *InstantiateOracleCallback) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -77,7 +77,7 @@ func (m *UpdateOracleCallback) Reset() { *m = UpdateOracleCallback{} } func (m *UpdateOracleCallback) String() string { return proto.CompactTextString(m) } func (*UpdateOracleCallback) ProtoMessage() {} func (*UpdateOracleCallback) Descriptor() ([]byte, []int) { - return fileDescriptor_7b4c39df2554f0a2, []int{1} + return fileDescriptor_ad8b47bd8705b827, []int{1} } func (m *UpdateOracleCallback) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -121,29 +121,31 @@ func (m *UpdateOracleCallback) GetMetric() *Metric { } func init() { - proto.RegisterType((*InstantiateOracleCallback)(nil), "stride.icaoracle.InstantiateOracleCallback") - proto.RegisterType((*UpdateOracleCallback)(nil), "stride.icaoracle.UpdateOracleCallback") + proto.RegisterType((*InstantiateOracleCallback)(nil), "symphony.icaoracle.InstantiateOracleCallback") + proto.RegisterType((*UpdateOracleCallback)(nil), "symphony.icaoracle.UpdateOracleCallback") } -func init() { proto.RegisterFile("stride/icaoracle/callbacks.proto", fileDescriptor_7b4c39df2554f0a2) } +func init() { + proto.RegisterFile("symphony/icaoracle/callbacks.proto", fileDescriptor_ad8b47bd8705b827) +} -var fileDescriptor_7b4c39df2554f0a2 = []byte{ - // 230 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x28, 0x2e, 0x29, 0xca, - 0x4c, 0x49, 0xd5, 0xcf, 0x4c, 0x4e, 0xcc, 0x2f, 0x4a, 0x4c, 0xce, 0x49, 0xd5, 0x4f, 0x4e, 0xcc, - 0xc9, 0x49, 0x4a, 0x4c, 0xce, 0x2e, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x80, 0xa8, - 0xd0, 0x83, 0xab, 0x90, 0xc2, 0xd4, 0x03, 0x67, 0x41, 0xf4, 0x28, 0x39, 0x73, 0x49, 0x7a, 0xe6, - 0x15, 0x97, 0x24, 0xe6, 0x95, 0x64, 0x26, 0x96, 0xa4, 0xfa, 0x83, 0xa5, 0x9c, 0xa1, 0xe6, 0x0a, - 0xa9, 0x71, 0xf1, 0x43, 0x14, 0xc7, 0x27, 0x67, 0x24, 0x66, 0xe6, 0xc5, 0x67, 0xa6, 0x48, 0x30, - 0x2a, 0x30, 0x6a, 0x70, 0x06, 0xf1, 0x42, 0x84, 0x9d, 0x41, 0xa2, 0x9e, 0x29, 0x4a, 0x05, 0x5c, - 0x22, 0xa1, 0x05, 0x29, 0x64, 0xeb, 0x17, 0x32, 0xe0, 0x62, 0xcb, 0x4d, 0x2d, 0x29, 0xca, 0x4c, - 0x96, 0x60, 0x52, 0x60, 0xd4, 0xe0, 0x36, 0x92, 0xd0, 0x43, 0xf7, 0x89, 0x9e, 0x2f, 0x58, 0x3e, - 0x08, 0xaa, 0xce, 0xc9, 0xf7, 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, 0x18, 0x1f, 0x3c, 0x92, - 0x63, 0x9c, 0xf0, 0x58, 0x8e, 0xe1, 0xc2, 0x63, 0x39, 0x86, 0x1b, 0x8f, 0xe5, 0x18, 0xa2, 0x8c, - 0xd3, 0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0x83, 0xc1, 0xa6, 0xe8, 0xfa, - 0x24, 0x26, 0x15, 0xeb, 0x43, 0x43, 0xa2, 0xcc, 0xc8, 0x42, 0xbf, 0x02, 0x29, 0x3c, 0x4a, 0x2a, - 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0x81, 0x61, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x96, 0x2a, - 0x9d, 0x80, 0x64, 0x01, 0x00, 0x00, +var fileDescriptor_ad8b47bd8705b827 = []byte{ + // 236 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x2a, 0xae, 0xcc, 0x2d, + 0xc8, 0xc8, 0xcf, 0xab, 0xd4, 0xcf, 0x4c, 0x4e, 0xcc, 0x2f, 0x4a, 0x4c, 0xce, 0x49, 0xd5, 0x4f, + 0x4e, 0xcc, 0xc9, 0x49, 0x4a, 0x4c, 0xce, 0x2e, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, + 0x82, 0xa9, 0xd1, 0x83, 0xab, 0x91, 0xc2, 0xa6, 0x0f, 0xce, 0x82, 0xe8, 0x53, 0x72, 0xe6, 0x92, + 0xf4, 0xcc, 0x2b, 0x2e, 0x49, 0xcc, 0x2b, 0xc9, 0x4c, 0x2c, 0x49, 0xf5, 0x07, 0x4b, 0x39, 0x43, + 0xcd, 0x16, 0x52, 0xe3, 0xe2, 0x87, 0x28, 0x8e, 0x4f, 0xce, 0x48, 0xcc, 0xcc, 0x8b, 0xcf, 0x4c, + 0x91, 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x0c, 0xe2, 0x85, 0x08, 0x3b, 0x83, 0x44, 0x3d, 0x53, 0x94, + 0x8a, 0xb8, 0x44, 0x42, 0x0b, 0x52, 0xc8, 0xd6, 0x2f, 0x64, 0xc4, 0xc5, 0x96, 0x9b, 0x5a, 0x52, + 0x94, 0x99, 0x2c, 0xc1, 0xa4, 0xc0, 0xa8, 0xc1, 0x6d, 0x24, 0xa5, 0x87, 0xe9, 0x1b, 0x3d, 0x5f, + 0xb0, 0x8a, 0x20, 0xa8, 0x4a, 0x27, 0xff, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, + 0xf0, 0x48, 0x8e, 0x71, 0xc2, 0x63, 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, + 0x88, 0x32, 0x4d, 0xcf, 0x2c, 0xc9, 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0xcf, 0x2f, 0xce, + 0xcd, 0x2f, 0xce, 0x2c, 0xd6, 0xcd, 0x49, 0x4c, 0x2a, 0x86, 0x71, 0xf4, 0xcb, 0x8c, 0xcc, 0xf5, + 0x2b, 0x90, 0xc2, 0xa4, 0xa4, 0xb2, 0x20, 0xb5, 0x38, 0x89, 0x0d, 0x1c, 0x20, 0xc6, 0x80, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x31, 0xcb, 0xbd, 0x84, 0x6e, 0x01, 0x00, 0x00, } func (m *InstantiateOracleCallback) Marshal() (dAtA []byte, err error) { diff --git a/x/icaoracle/types/contract.pb.go b/x/icaoracle/types/contract.pb.go index aa672c7b353..abb29eb2320 100644 --- a/x/icaoracle/types/contract.pb.go +++ b/x/icaoracle/types/contract.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/icaoracle/contract.proto +// source: symphony/icaoracle/contract.proto package types @@ -32,7 +32,7 @@ func (m *MsgInstantiateOracleContract) Reset() { *m = MsgInstantiateOrac func (m *MsgInstantiateOracleContract) String() string { return proto.CompactTextString(m) } func (*MsgInstantiateOracleContract) ProtoMessage() {} func (*MsgInstantiateOracleContract) Descriptor() ([]byte, []int) { - return fileDescriptor_8bf036e49b48ee03, []int{0} + return fileDescriptor_249a054d40eafcdf, []int{0} } func (m *MsgInstantiateOracleContract) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -84,7 +84,7 @@ func (m *MsgExecuteContractPostMetric) Reset() { *m = MsgExecuteContract func (m *MsgExecuteContractPostMetric) String() string { return proto.CompactTextString(m) } func (*MsgExecuteContractPostMetric) ProtoMessage() {} func (*MsgExecuteContractPostMetric) Descriptor() ([]byte, []int) { - return fileDescriptor_8bf036e49b48ee03, []int{1} + return fileDescriptor_249a054d40eafcdf, []int{1} } func (m *MsgExecuteContractPostMetric) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -134,7 +134,7 @@ func (m *MsgPostMetric) Reset() { *m = MsgPostMetric{} } func (m *MsgPostMetric) String() string { return proto.CompactTextString(m) } func (*MsgPostMetric) ProtoMessage() {} func (*MsgPostMetric) Descriptor() ([]byte, []int) { - return fileDescriptor_8bf036e49b48ee03, []int{2} + return fileDescriptor_249a054d40eafcdf, []int{2} } func (m *MsgPostMetric) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -206,39 +206,39 @@ func (m *MsgPostMetric) GetAttributes() string { } func init() { - proto.RegisterType((*MsgInstantiateOracleContract)(nil), "stride.icaoracle.MsgInstantiateOracleContract") - proto.RegisterType((*MsgExecuteContractPostMetric)(nil), "stride.icaoracle.MsgExecuteContractPostMetric") - proto.RegisterType((*MsgPostMetric)(nil), "stride.icaoracle.MsgPostMetric") -} - -func init() { proto.RegisterFile("stride/icaoracle/contract.proto", fileDescriptor_8bf036e49b48ee03) } - -var fileDescriptor_8bf036e49b48ee03 = []byte{ - // 375 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0x91, 0xc1, 0xce, 0xd2, 0x40, - 0x10, 0xc7, 0xa9, 0x08, 0x89, 0x5b, 0x48, 0x70, 0xf5, 0xd0, 0x83, 0x29, 0x88, 0x17, 0x2e, 0xb6, - 0x09, 0x5c, 0x3c, 0xaa, 0xc4, 0x44, 0x12, 0x1b, 0x0d, 0x72, 0xf2, 0x52, 0xb7, 0xdb, 0xb1, 0xdd, - 0xd0, 0x76, 0x9b, 0xdd, 0x29, 0x81, 0xb7, 0xf0, 0x81, 0x7c, 0x00, 0x8f, 0x1c, 0x3d, 0x1a, 0x78, - 0x11, 0xc3, 0x6e, 0x85, 0xef, 0xfb, 0x6e, 0x33, 0xbf, 0xff, 0x7f, 0xf2, 0x9f, 0xdd, 0x21, 0x63, - 0x8d, 0x4a, 0xa4, 0x10, 0x0a, 0xce, 0xa4, 0x62, 0xbc, 0x80, 0x90, 0xcb, 0x0a, 0x15, 0xe3, 0x18, - 0xd4, 0x4a, 0xa2, 0xa4, 0x23, 0x6b, 0x08, 0xae, 0x86, 0xa9, 0x26, 0x2f, 0x22, 0x9d, 0xad, 0x2a, - 0x8d, 0xac, 0x42, 0xc1, 0x10, 0x3e, 0x1b, 0xbe, 0x6c, 0xe7, 0xe8, 0x2b, 0x32, 0x64, 0x69, 0x29, - 0xaa, 0x98, 0xa5, 0xa9, 0x02, 0xad, 0x3d, 0x67, 0xe2, 0xcc, 0x9e, 0xac, 0x07, 0x06, 0xbe, 0xb3, - 0x8c, 0x06, 0xe4, 0x19, 0x2a, 0x56, 0xe9, 0x1f, 0xa0, 0x62, 0x9e, 0xb3, 0xaa, 0x82, 0x22, 0x16, - 0xa9, 0xf7, 0xc8, 0x58, 0x9f, 0xfe, 0x97, 0x96, 0x56, 0x59, 0xa5, 0xd3, 0xef, 0x26, 0xf4, 0xc3, - 0x1e, 0x78, 0x83, 0xd7, 0xa8, 0x2f, 0x52, 0x63, 0x04, 0xa8, 0x04, 0xa7, 0x6f, 0x89, 0x5b, 0x4b, - 0x8d, 0x71, 0x69, 0x5a, 0x13, 0xe9, 0xce, 0xc7, 0xc1, 0xc3, 0xe5, 0x83, 0x48, 0x67, 0xb7, 0xa9, - 0x35, 0xa9, 0xaf, 0xf5, 0xf4, 0x97, 0x43, 0x86, 0xf7, 0x54, 0x3a, 0x22, 0xdd, 0x2d, 0x1c, 0xda, - 0xf5, 0x2f, 0x25, 0x7d, 0x4e, 0x7a, 0x3b, 0x56, 0x34, 0xd0, 0xee, 0x69, 0x1b, 0x3a, 0x26, 0xae, - 0x8d, 0x8d, 0xf1, 0x50, 0x83, 0xd7, 0x35, 0x1a, 0xb1, 0x68, 0x73, 0xa8, 0x8d, 0xa1, 0xa9, 0x53, - 0x86, 0x10, 0xa3, 0x28, 0xc1, 0x7b, 0x3c, 0x71, 0x66, 0xdd, 0x35, 0xb1, 0x68, 0x23, 0x4a, 0xa0, - 0x2f, 0xc9, 0x20, 0x29, 0x24, 0xdf, 0xc6, 0x39, 0x88, 0x2c, 0x47, 0xaf, 0x67, 0x1c, 0xae, 0x61, - 0x1f, 0x0d, 0xa2, 0x3e, 0x21, 0x0c, 0x51, 0x89, 0xa4, 0x41, 0xd0, 0x5e, 0xdf, 0x66, 0xdc, 0xc8, - 0xfb, 0xe8, 0xf7, 0xc9, 0x77, 0x8e, 0x27, 0xdf, 0xf9, 0x7b, 0xf2, 0x9d, 0x9f, 0x67, 0xbf, 0x73, - 0x3c, 0xfb, 0x9d, 0x3f, 0x67, 0xbf, 0xf3, 0x6d, 0x91, 0x09, 0xcc, 0x9b, 0x24, 0xe0, 0xb2, 0x0c, - 0xbf, 0x9a, 0xff, 0x78, 0xfd, 0x89, 0x25, 0x3a, 0x6c, 0x2f, 0xbf, 0x9b, 0xbf, 0x09, 0xf7, 0x77, - 0xee, 0x7f, 0x79, 0x83, 0x4e, 0xfa, 0xe6, 0xfa, 0x8b, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x3f, - 0x13, 0x78, 0x77, 0x20, 0x02, 0x00, 0x00, + proto.RegisterType((*MsgInstantiateOracleContract)(nil), "symphony.icaoracle.MsgInstantiateOracleContract") + proto.RegisterType((*MsgExecuteContractPostMetric)(nil), "symphony.icaoracle.MsgExecuteContractPostMetric") + proto.RegisterType((*MsgPostMetric)(nil), "symphony.icaoracle.MsgPostMetric") +} + +func init() { proto.RegisterFile("symphony/icaoracle/contract.proto", fileDescriptor_249a054d40eafcdf) } + +var fileDescriptor_249a054d40eafcdf = []byte{ + // 379 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x92, 0xbf, 0x8e, 0xda, 0x40, + 0x10, 0xc6, 0x71, 0x08, 0x48, 0x59, 0x83, 0x94, 0x6c, 0x52, 0xb8, 0x88, 0x1c, 0x20, 0x0d, 0x4d, + 0x6c, 0x89, 0x28, 0x4a, 0x1d, 0x50, 0xa4, 0x50, 0x20, 0x22, 0x44, 0x95, 0xc6, 0x5a, 0xaf, 0x37, + 0xf6, 0x0a, 0x7b, 0xd7, 0xda, 0x19, 0x23, 0xfc, 0x16, 0x79, 0xa0, 0x3c, 0xc0, 0x95, 0x94, 0x57, + 0x9e, 0xe0, 0x45, 0x4e, 0xac, 0xf9, 0x73, 0xa7, 0xeb, 0x66, 0x7e, 0xdf, 0x37, 0xfa, 0x66, 0xa4, + 0x21, 0x43, 0xa8, 0x8b, 0x32, 0xd3, 0xaa, 0x0e, 0x25, 0x67, 0xda, 0x30, 0x9e, 0x8b, 0x90, 0x6b, + 0x85, 0x86, 0x71, 0x0c, 0x4a, 0xa3, 0x51, 0x53, 0x7a, 0xb1, 0x04, 0x57, 0xcb, 0x08, 0xc8, 0xc7, + 0x05, 0xa4, 0x73, 0x05, 0xc8, 0x14, 0x4a, 0x86, 0x62, 0x69, 0xf9, 0xec, 0x3c, 0x49, 0x3f, 0x93, + 0x3e, 0x4b, 0x0a, 0xa9, 0x22, 0x96, 0x24, 0x46, 0x00, 0x78, 0xce, 0xc0, 0x19, 0xbf, 0x59, 0xf5, + 0x2c, 0xfc, 0xd1, 0x30, 0x1a, 0x90, 0xf7, 0x68, 0x98, 0x82, 0xbf, 0xc2, 0x44, 0x3c, 0x63, 0x4a, + 0x89, 0x3c, 0x92, 0x89, 0xf7, 0xca, 0x5a, 0xdf, 0x5d, 0xa4, 0x59, 0xa3, 0xcc, 0x93, 0x51, 0x6c, + 0x43, 0x7f, 0xee, 0x04, 0xaf, 0xf0, 0x1a, 0xf5, 0x5b, 0x03, 0x2e, 0x04, 0x1a, 0xc9, 0xe9, 0x94, + 0xb8, 0xa5, 0x06, 0x8c, 0x0a, 0xdb, 0xda, 0x48, 0x77, 0x32, 0x0c, 0x5e, 0xae, 0x1f, 0x2c, 0x20, + 0xbd, 0xcd, 0xad, 0x48, 0x79, 0xad, 0x47, 0xff, 0x1d, 0xd2, 0x7f, 0xa6, 0xd2, 0xb7, 0xa4, 0xbd, + 0x11, 0xf5, 0xf9, 0x80, 0x53, 0x49, 0x3f, 0x90, 0xce, 0x96, 0xe5, 0x95, 0x38, 0x6f, 0xda, 0x34, + 0xf4, 0x13, 0x71, 0x9b, 0xe0, 0x08, 0xeb, 0x52, 0x78, 0x6d, 0xab, 0x91, 0x06, 0xad, 0xeb, 0xd2, + 0x1a, 0xaa, 0x32, 0x61, 0x28, 0x22, 0x94, 0x85, 0xf0, 0x5e, 0x0f, 0x9c, 0x71, 0x7b, 0x45, 0x1a, + 0xb4, 0x96, 0x85, 0xa0, 0x43, 0xd2, 0x8b, 0x73, 0xcd, 0x37, 0x51, 0x26, 0x64, 0x9a, 0xa1, 0xd7, + 0xb1, 0x0e, 0xd7, 0xb2, 0x5f, 0x16, 0x51, 0x9f, 0x10, 0x86, 0x68, 0x64, 0x5c, 0xa1, 0x00, 0xaf, + 0xdb, 0x64, 0xdc, 0xc8, 0x74, 0x79, 0x77, 0xf0, 0x9d, 0xfd, 0xc1, 0x77, 0x1e, 0x0e, 0xbe, 0xf3, + 0xef, 0xe8, 0xb7, 0xf6, 0x47, 0xbf, 0x75, 0x7f, 0xf4, 0x5b, 0x7f, 0xbe, 0xa5, 0x12, 0xb3, 0x2a, + 0x0e, 0xb8, 0x2e, 0x42, 0x0d, 0x85, 0x06, 0x09, 0x5f, 0x72, 0x16, 0xc3, 0xa5, 0x09, 0xb7, 0x93, + 0xef, 0xe1, 0xee, 0xc9, 0x17, 0x9c, 0xae, 0x80, 0xb8, 0x6b, 0x7f, 0xe0, 0xeb, 0x63, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x10, 0x6e, 0xe7, 0x9c, 0x28, 0x02, 0x00, 0x00, } func (m *MsgInstantiateOracleContract) Marshal() (dAtA []byte, err error) { diff --git a/x/icaoracle/types/genesis.pb.go b/x/icaoracle/types/genesis.pb.go index 5b2dab069e1..f0276cebb7e 100644 --- a/x/icaoracle/types/genesis.pb.go +++ b/x/icaoracle/types/genesis.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/icaoracle/genesis.proto +// source: symphony/icaoracle/genesis.proto package types @@ -31,7 +31,7 @@ func (m *Params) Reset() { *m = Params{} } func (m *Params) String() string { return proto.CompactTextString(m) } func (*Params) ProtoMessage() {} func (*Params) Descriptor() ([]byte, []int) { - return fileDescriptor_89fd81957c6adfb8, []int{0} + return fileDescriptor_2db8c819175aa794, []int{0} } func (m *Params) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -71,7 +71,7 @@ func (m *GenesisState) Reset() { *m = GenesisState{} } func (m *GenesisState) String() string { return proto.CompactTextString(m) } func (*GenesisState) ProtoMessage() {} func (*GenesisState) Descriptor() ([]byte, []int) { - return fileDescriptor_89fd81957c6adfb8, []int{1} + return fileDescriptor_2db8c819175aa794, []int{1} } func (m *GenesisState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -122,32 +122,32 @@ func (m *GenesisState) GetMetrics() []Metric { } func init() { - proto.RegisterType((*Params)(nil), "stride.icaoracle.Params") - proto.RegisterType((*GenesisState)(nil), "stride.icaoracle.GenesisState") + proto.RegisterType((*Params)(nil), "symphony.icaoracle.Params") + proto.RegisterType((*GenesisState)(nil), "symphony.icaoracle.GenesisState") } -func init() { proto.RegisterFile("stride/icaoracle/genesis.proto", fileDescriptor_89fd81957c6adfb8) } +func init() { proto.RegisterFile("symphony/icaoracle/genesis.proto", fileDescriptor_2db8c819175aa794) } -var fileDescriptor_89fd81957c6adfb8 = []byte{ - // 274 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x2b, 0x2e, 0x29, 0xca, - 0x4c, 0x49, 0xd5, 0xcf, 0x4c, 0x4e, 0xcc, 0x2f, 0x4a, 0x4c, 0xce, 0x49, 0xd5, 0x4f, 0x4f, 0xcd, - 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x80, 0xc8, 0xeb, 0xc1, - 0xe5, 0xa5, 0x44, 0xd2, 0xf3, 0xd3, 0xf3, 0xc1, 0x92, 0xfa, 0x20, 0x16, 0x44, 0x9d, 0x94, 0x02, - 0x86, 0x39, 0x70, 0x16, 0x44, 0x85, 0x12, 0x07, 0x17, 0x5b, 0x40, 0x62, 0x51, 0x62, 0x6e, 0xb1, - 0xd2, 0x7b, 0x46, 0x2e, 0x1e, 0x77, 0x88, 0x2d, 0xc1, 0x25, 0x89, 0x25, 0xa9, 0x42, 0xee, 0x5c, - 0x6c, 0x05, 0x60, 0x29, 0x09, 0x46, 0x05, 0x46, 0x0d, 0x6e, 0x23, 0x09, 0x3d, 0x74, 0x5b, 0xf5, - 0x20, 0x5a, 0x9d, 0x44, 0x4f, 0xdc, 0x93, 0x67, 0xf8, 0x74, 0x4f, 0x9e, 0xb7, 0x32, 0x31, 0x37, - 0xc7, 0x4a, 0x09, 0xa2, 0x4b, 0x29, 0x08, 0xaa, 0x5d, 0xc8, 0x8b, 0x8b, 0x1d, 0xa2, 0xbe, 0x58, - 0x82, 0x49, 0x81, 0x19, 0xbb, 0x49, 0xfe, 0x60, 0xca, 0x49, 0x0c, 0x6a, 0x12, 0x1f, 0xc4, 0x24, - 0xa8, 0x36, 0xa5, 0x20, 0x98, 0x01, 0x20, 0xb3, 0x72, 0x53, 0x4b, 0x8a, 0x32, 0x93, 0x8b, 0x25, - 0x98, 0x71, 0x99, 0xe5, 0x0b, 0x56, 0x80, 0x6e, 0x16, 0x54, 0x9b, 0x52, 0x10, 0xcc, 0x00, 0x27, - 0xdf, 0x13, 0x8f, 0xe4, 0x18, 0x2f, 0x3c, 0x92, 0x63, 0x7c, 0xf0, 0x48, 0x8e, 0x71, 0xc2, 0x63, - 0x39, 0x86, 0x0b, 0x8f, 0xe5, 0x18, 0x6e, 0x3c, 0x96, 0x63, 0x88, 0x32, 0x4e, 0xcf, 0x2c, 0xc9, - 0x28, 0x4d, 0xd2, 0x4b, 0xce, 0xcf, 0xd5, 0x0f, 0x06, 0x1b, 0xaf, 0xeb, 0x93, 0x98, 0x54, 0xac, - 0x0f, 0x0d, 0xce, 0x32, 0x23, 0x0b, 0xfd, 0x0a, 0xa4, 0x40, 0x2d, 0xa9, 0x2c, 0x48, 0x2d, 0x4e, - 0x62, 0x03, 0x87, 0xa8, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x10, 0x79, 0xcc, 0x14, 0xbd, 0x01, - 0x00, 0x00, +var fileDescriptor_2db8c819175aa794 = []byte{ + // 280 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x28, 0xae, 0xcc, 0x2d, + 0xc8, 0xc8, 0xcf, 0xab, 0xd4, 0xcf, 0x4c, 0x4e, 0xcc, 0x2f, 0x4a, 0x4c, 0xce, 0x49, 0xd5, 0x4f, + 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x82, 0xa9, + 0xd0, 0x83, 0xab, 0x90, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0x4b, 0xeb, 0x83, 0x58, 0x10, 0x95, + 0x52, 0x4a, 0x58, 0xcc, 0x82, 0xb3, 0x20, 0x6a, 0x94, 0x38, 0xb8, 0xd8, 0x02, 0x12, 0x8b, 0x12, + 0x73, 0x8b, 0x95, 0xbe, 0x32, 0x72, 0xf1, 0xb8, 0x43, 0x6c, 0x0a, 0x2e, 0x49, 0x2c, 0x49, 0x15, + 0xf2, 0xe4, 0x62, 0x2b, 0x00, 0x4b, 0x49, 0x30, 0x2a, 0x30, 0x6a, 0x70, 0x1b, 0x49, 0xe9, 0x61, + 0xda, 0xac, 0x07, 0xd1, 0xec, 0x24, 0x7a, 0xe2, 0x9e, 0x3c, 0xc3, 0xa7, 0x7b, 0xf2, 0xbc, 0x95, + 0x89, 0xb9, 0x39, 0x56, 0x4a, 0x10, 0x7d, 0x4a, 0x41, 0x50, 0x03, 0x84, 0x7c, 0xb8, 0xd8, 0x21, + 0xea, 0x8b, 0x25, 0x98, 0x14, 0x98, 0x71, 0x99, 0xe5, 0x0f, 0xa6, 0x9c, 0xc4, 0xa0, 0x66, 0xf1, + 0x41, 0xcc, 0x82, 0x6a, 0x54, 0x0a, 0x82, 0x19, 0x01, 0x32, 0x2d, 0x37, 0xb5, 0xa4, 0x28, 0x33, + 0xb9, 0x58, 0x82, 0x19, 0xb7, 0x69, 0xbe, 0x60, 0x25, 0xe8, 0xa6, 0x41, 0x35, 0x2a, 0x05, 0xc1, + 0x8c, 0x70, 0xf2, 0x3f, 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, + 0x27, 0x3c, 0x96, 0x63, 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0xd3, 0xf4, + 0xcc, 0x92, 0x8c, 0xd2, 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0xfd, 0xfc, 0xe2, 0xdc, 0xfc, 0xe2, 0xcc, + 0x62, 0xdd, 0x9c, 0xc4, 0xa4, 0x62, 0x18, 0x47, 0xbf, 0xcc, 0xc8, 0x5c, 0xbf, 0x02, 0x29, 0x70, + 0x4b, 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0x21, 0x6b, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, + 0x60, 0x63, 0x2d, 0xf2, 0xcb, 0x01, 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { diff --git a/x/icaoracle/types/icaoracle.pb.go b/x/icaoracle/types/icaoracle.pb.go index 01ac9ed654c..9cd19e295ea 100644 --- a/x/icaoracle/types/icaoracle.pb.go +++ b/x/icaoracle/types/icaoracle.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/icaoracle/icaoracle.proto +// source: symphony/icaoracle/icaoracle.proto package types @@ -49,7 +49,7 @@ func (x MetricStatus) String() string { } func (MetricStatus) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_842e38c1f0da9e66, []int{0} + return fileDescriptor_a166b56e448fb089, []int{0} } // Oracle structure stores context about the CW oracle sitting a different chain @@ -67,7 +67,7 @@ func (m *Oracle) Reset() { *m = Oracle{} } func (m *Oracle) String() string { return proto.CompactTextString(m) } func (*Oracle) ProtoMessage() {} func (*Oracle) Descriptor() ([]byte, []int) { - return fileDescriptor_842e38c1f0da9e66, []int{0} + return fileDescriptor_a166b56e448fb089, []int{0} } func (m *Oracle) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -155,14 +155,14 @@ type Metric struct { BlockHeight int64 `protobuf:"varint,5,opt,name=block_height,json=blockHeight,proto3" json:"block_height,omitempty"` Attributes string `protobuf:"bytes,6,opt,name=attributes,proto3" json:"attributes,omitempty"` DestinationOracle string `protobuf:"bytes,7,opt,name=destination_oracle,json=destinationOracle,proto3" json:"destination_oracle,omitempty"` - Status MetricStatus `protobuf:"varint,8,opt,name=status,proto3,enum=stride.icaoracle.MetricStatus" json:"status,omitempty"` + Status MetricStatus `protobuf:"varint,8,opt,name=status,proto3,enum=symphony.icaoracle.MetricStatus" json:"status,omitempty"` } func (m *Metric) Reset() { *m = Metric{} } func (m *Metric) String() string { return proto.CompactTextString(m) } func (*Metric) ProtoMessage() {} func (*Metric) Descriptor() ([]byte, []int) { - return fileDescriptor_842e38c1f0da9e66, []int{1} + return fileDescriptor_a166b56e448fb089, []int{1} } func (m *Metric) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -256,7 +256,7 @@ func (m *RedemptionRateAttributes) Reset() { *m = RedemptionRateAttribut func (m *RedemptionRateAttributes) String() string { return proto.CompactTextString(m) } func (*RedemptionRateAttributes) ProtoMessage() {} func (*RedemptionRateAttributes) Descriptor() ([]byte, []int) { - return fileDescriptor_842e38c1f0da9e66, []int{2} + return fileDescriptor_a166b56e448fb089, []int{2} } func (m *RedemptionRateAttributes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -293,51 +293,53 @@ func (m *RedemptionRateAttributes) GetSttokenDenom() string { } func init() { - proto.RegisterEnum("stride.icaoracle.MetricStatus", MetricStatus_name, MetricStatus_value) - proto.RegisterType((*Oracle)(nil), "stride.icaoracle.Oracle") - proto.RegisterType((*Metric)(nil), "stride.icaoracle.Metric") - proto.RegisterType((*RedemptionRateAttributes)(nil), "stride.icaoracle.RedemptionRateAttributes") + proto.RegisterEnum("symphony.icaoracle.MetricStatus", MetricStatus_name, MetricStatus_value) + proto.RegisterType((*Oracle)(nil), "symphony.icaoracle.Oracle") + proto.RegisterType((*Metric)(nil), "symphony.icaoracle.Metric") + proto.RegisterType((*RedemptionRateAttributes)(nil), "symphony.icaoracle.RedemptionRateAttributes") } -func init() { proto.RegisterFile("stride/icaoracle/icaoracle.proto", fileDescriptor_842e38c1f0da9e66) } +func init() { + proto.RegisterFile("symphony/icaoracle/icaoracle.proto", fileDescriptor_a166b56e448fb089) +} -var fileDescriptor_842e38c1f0da9e66 = []byte{ - // 558 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x93, 0xc1, 0x6e, 0xd3, 0x4c, - 0x14, 0x85, 0xe3, 0xe6, 0xaf, 0xdb, 0xde, 0xa6, 0x7f, 0xcd, 0x28, 0x82, 0x34, 0x12, 0xc6, 0xa4, - 0x2c, 0x02, 0x52, 0x1d, 0xa9, 0x95, 0x10, 0x3b, 0x14, 0x1a, 0x03, 0x96, 0x48, 0x5b, 0xec, 0x64, - 0xc3, 0xc6, 0x9a, 0xcc, 0x8c, 0x92, 0x51, 0x62, 0x8f, 0x65, 0x4f, 0x22, 0xf2, 0x0a, 0x5d, 0xb1, - 0x60, 0x49, 0xdf, 0x87, 0x65, 0x97, 0x2c, 0x51, 0xc2, 0x83, 0x20, 0x8f, 0x9d, 0xd6, 0xc0, 0x6e, - 0xee, 0x77, 0x8e, 0xaf, 0x7c, 0xee, 0xcc, 0x05, 0x2b, 0x95, 0x09, 0xa7, 0xac, 0xc3, 0x09, 0x16, - 0x09, 0x26, 0xb3, 0xd2, 0xc9, 0x8e, 0x13, 0x21, 0x05, 0x32, 0x72, 0x87, 0x7d, 0xc7, 0x9b, 0xf5, - 0xb1, 0x18, 0x0b, 0x25, 0x76, 0xb2, 0x53, 0xee, 0x6b, 0xfd, 0xd2, 0x40, 0xbf, 0x54, 0x06, 0x74, - 0x04, 0xbb, 0x64, 0x82, 0x79, 0x14, 0x70, 0xda, 0xd0, 0x2c, 0xad, 0xbd, 0xe7, 0xed, 0xa8, 0xda, - 0xa5, 0xe8, 0x18, 0x0e, 0x88, 0x88, 0x22, 0x46, 0x24, 0x17, 0x4a, 0xdf, 0x52, 0x7a, 0xed, 0x1e, - 0xba, 0x14, 0x3d, 0x06, 0x20, 0x13, 0x1c, 0x45, 0x6c, 0x96, 0x39, 0xaa, 0xca, 0xb1, 0x57, 0x10, - 0x97, 0xa2, 0x47, 0xb0, 0x13, 0x8b, 0x44, 0x66, 0xda, 0x7f, 0x4a, 0xd3, 0xb3, 0xd2, 0xa5, 0xe8, - 0x09, 0xec, 0x73, 0x82, 0x03, 0x4c, 0x69, 0xc2, 0xd2, 0xb4, 0xb1, 0xad, 0x44, 0xe0, 0x04, 0x77, - 0x73, 0x82, 0x9e, 0x83, 0x41, 0x44, 0x24, 0x13, 0x4c, 0xe4, 0x9d, 0x4b, 0x57, 0xae, 0xc3, 0x0d, - 0xdf, 0x58, 0x1f, 0x82, 0x8e, 0x89, 0xe4, 0x0b, 0xd6, 0xd8, 0xb1, 0xb4, 0xf6, 0xae, 0x57, 0x54, - 0xad, 0x6f, 0x5b, 0xa0, 0xf7, 0x99, 0x4c, 0x38, 0x41, 0x06, 0x54, 0xa7, 0x6c, 0x59, 0x24, 0xcc, - 0x8e, 0xa8, 0x0e, 0xdb, 0x0b, 0x3c, 0x9b, 0xb3, 0x22, 0x55, 0x5e, 0x64, 0xbf, 0x15, 0xaa, 0x2f, - 0x02, 0xb9, 0x8c, 0x59, 0x91, 0x07, 0x72, 0x34, 0x58, 0xc6, 0xca, 0x30, 0x8f, 0x29, 0x96, 0x2c, - 0x90, 0x3c, 0x64, 0x2a, 0x54, 0xd5, 0x83, 0x1c, 0x0d, 0x78, 0xc8, 0xd0, 0x53, 0xa8, 0x8d, 0x66, - 0x82, 0x4c, 0x83, 0x09, 0xe3, 0xe3, 0x89, 0x54, 0xc9, 0xaa, 0xde, 0xbe, 0x62, 0xef, 0x15, 0x42, - 0x26, 0x00, 0x96, 0x32, 0xe1, 0xa3, 0xb9, 0x64, 0x9b, 0x50, 0x25, 0x82, 0x4e, 0x00, 0x51, 0x96, - 0x4a, 0x1e, 0x61, 0x35, 0xf9, 0xfc, 0x2a, 0x55, 0xb6, 0x3d, 0xef, 0x41, 0x49, 0x29, 0xae, 0xf0, - 0x25, 0xe8, 0xa9, 0xc4, 0x72, 0x9e, 0x36, 0x76, 0x2d, 0xad, 0xfd, 0xff, 0xa9, 0x69, 0xff, 0xfd, - 0x0c, 0xec, 0x7c, 0x0a, 0xbe, 0x72, 0x79, 0x85, 0xbb, 0xf5, 0x1a, 0x1a, 0x1e, 0xa3, 0x2c, 0x8c, - 0xb3, 0x5e, 0x1e, 0x96, 0xac, 0x7b, 0xff, 0x0b, 0xc7, 0x70, 0x90, 0x4a, 0x29, 0xa6, 0x2c, 0x0a, - 0x28, 0x8b, 0x44, 0x58, 0x4c, 0xae, 0x56, 0xc0, 0x5e, 0xc6, 0x5e, 0x7c, 0xd5, 0xa0, 0x56, 0xee, - 0x8c, 0x6c, 0x38, 0xea, 0x3b, 0x03, 0xcf, 0x3d, 0x0f, 0xfc, 0x41, 0x77, 0x30, 0xf4, 0x83, 0xe1, - 0x85, 0x7f, 0xe5, 0x9c, 0xbb, 0x6f, 0x5d, 0xa7, 0x67, 0x54, 0x9a, 0x87, 0xd7, 0x37, 0xd6, 0x7e, - 0x09, 0xa1, 0x67, 0x50, 0xff, 0xd3, 0xff, 0x71, 0xe8, 0x0c, 0x9d, 0x9e, 0xa1, 0x35, 0xe1, 0xfa, - 0xc6, 0xd2, 0xf3, 0xea, 0xdf, 0xae, 0xee, 0x45, 0x70, 0xe5, 0x5d, 0xbe, 0xf3, 0x1c, 0xdf, 0x37, - 0xb6, 0xf2, 0xae, 0x25, 0xf4, 0xa6, 0xff, 0x7d, 0x65, 0x6a, 0xb7, 0x2b, 0x53, 0xfb, 0xb9, 0x32, - 0xb5, 0x2f, 0x6b, 0xb3, 0x72, 0xbb, 0x36, 0x2b, 0x3f, 0xd6, 0x66, 0xe5, 0xd3, 0xd9, 0x98, 0xcb, - 0xc9, 0x7c, 0x64, 0x13, 0x11, 0x76, 0x7c, 0x35, 0xa3, 0x93, 0x0f, 0x78, 0x94, 0x76, 0x8a, 0xc5, - 0x5a, 0x9c, 0xbe, 0xea, 0x7c, 0x2e, 0xad, 0x57, 0xf6, 0x04, 0xd2, 0x91, 0xae, 0x76, 0xe6, 0xec, - 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4e, 0x28, 0x56, 0xb5, 0x7f, 0x03, 0x00, 0x00, +var fileDescriptor_a166b56e448fb089 = []byte{ + // 559 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x93, 0x3f, 0x6f, 0xd3, 0x40, + 0x18, 0xc6, 0xe3, 0x86, 0xba, 0xed, 0xdb, 0x94, 0x86, 0x53, 0x05, 0x69, 0x24, 0x8c, 0x49, 0x19, + 0x02, 0x52, 0x1d, 0xa9, 0x08, 0xc1, 0x86, 0x42, 0x63, 0xc0, 0x43, 0x9b, 0x62, 0x27, 0x0b, 0x8b, + 0x75, 0x39, 0x9f, 0xe2, 0x53, 0x62, 0x9f, 0xe5, 0xbb, 0x44, 0xe4, 0x2b, 0x74, 0x62, 0x60, 0x2d, + 0x9f, 0x87, 0xb1, 0x23, 0x23, 0x4a, 0xf8, 0x20, 0xc8, 0x67, 0xa7, 0x31, 0xea, 0x76, 0xcf, 0xef, + 0x79, 0xfc, 0xca, 0xcf, 0xfd, 0x81, 0x96, 0x58, 0x44, 0x49, 0xc8, 0xe3, 0x45, 0x87, 0x11, 0xcc, + 0x53, 0x4c, 0xa6, 0x74, 0xb3, 0xb2, 0x92, 0x94, 0x4b, 0x8e, 0xd0, 0x3a, 0x63, 0xdd, 0x39, 0xcd, + 0xa3, 0x31, 0x1f, 0x73, 0x65, 0x77, 0xb2, 0x55, 0x9e, 0x6c, 0xfd, 0xd5, 0x40, 0xef, 0xab, 0x00, + 0x3a, 0x86, 0x5d, 0x12, 0x62, 0x16, 0xfb, 0x2c, 0x68, 0x68, 0xa6, 0xd6, 0xde, 0x73, 0x77, 0x94, + 0x76, 0x02, 0x74, 0x02, 0x07, 0x84, 0xc7, 0x31, 0x25, 0x92, 0x71, 0xe5, 0x6f, 0x29, 0xbf, 0xb6, + 0x81, 0x4e, 0x80, 0x9e, 0x02, 0x90, 0x10, 0xc7, 0x31, 0x9d, 0x66, 0x89, 0xaa, 0x4a, 0xec, 0x15, + 0xc4, 0x09, 0xd0, 0x13, 0xd8, 0x49, 0x78, 0x2a, 0x33, 0xef, 0x81, 0xf2, 0xf4, 0x4c, 0x3a, 0x01, + 0x7a, 0x06, 0xfb, 0x8c, 0x60, 0x1f, 0x07, 0x41, 0x4a, 0x85, 0x68, 0x6c, 0x2b, 0x13, 0x18, 0xc1, + 0xdd, 0x9c, 0xa0, 0x97, 0x50, 0x27, 0x3c, 0x96, 0x29, 0x26, 0xf2, 0x2e, 0xa5, 0xab, 0xd4, 0xe1, + 0x9a, 0xaf, 0xa3, 0x8f, 0x41, 0xc7, 0x44, 0xb2, 0x39, 0x6d, 0xec, 0x98, 0x5a, 0x7b, 0xd7, 0x2d, + 0x54, 0xeb, 0xe7, 0x16, 0xe8, 0x17, 0x54, 0xa6, 0x8c, 0xa0, 0x3a, 0x54, 0x27, 0x74, 0x51, 0x34, + 0xcc, 0x96, 0xe8, 0x08, 0xb6, 0xe7, 0x78, 0x3a, 0xa3, 0x45, 0xab, 0x5c, 0x64, 0xbf, 0x15, 0xa9, + 0x2f, 0x7c, 0xb9, 0x48, 0x68, 0xd1, 0x07, 0x72, 0x34, 0x58, 0x24, 0x2a, 0x30, 0x4b, 0x02, 0x2c, + 0xa9, 0x2f, 0x59, 0x44, 0x55, 0xa9, 0xaa, 0x0b, 0x39, 0x1a, 0xb0, 0x88, 0xa2, 0xe7, 0x50, 0x1b, + 0x4d, 0x39, 0x99, 0xf8, 0x21, 0x65, 0xe3, 0x50, 0xaa, 0x66, 0x55, 0x77, 0x5f, 0xb1, 0xcf, 0x0a, + 0x21, 0x03, 0x00, 0x4b, 0x99, 0xb2, 0xd1, 0x4c, 0xd2, 0x75, 0xa9, 0x12, 0x41, 0xa7, 0x80, 0x02, + 0x2a, 0x24, 0x8b, 0xb1, 0xda, 0xf9, 0xfc, 0x28, 0x55, 0xb7, 0x3d, 0xf7, 0x51, 0xc9, 0x29, 0x8e, + 0xf0, 0x1d, 0xe8, 0x42, 0x62, 0x39, 0x13, 0x8d, 0x5d, 0x53, 0x6b, 0x3f, 0x3c, 0x33, 0xad, 0xfb, + 0x17, 0xc1, 0xca, 0xf7, 0xc1, 0x53, 0x39, 0xb7, 0xc8, 0xb7, 0xde, 0x43, 0xc3, 0xa5, 0x01, 0x8d, + 0x92, 0x6c, 0x9a, 0x8b, 0x25, 0xed, 0x6e, 0x7e, 0xe2, 0x04, 0x0e, 0x84, 0x94, 0x7c, 0x42, 0x63, + 0x3f, 0xa0, 0x31, 0x8f, 0x8a, 0xbd, 0xab, 0x15, 0xb0, 0x97, 0xb1, 0x57, 0x3f, 0x34, 0xa8, 0x95, + 0x27, 0x23, 0x0b, 0x8e, 0x2f, 0xec, 0x81, 0xeb, 0x9c, 0xfb, 0xde, 0xa0, 0x3b, 0x18, 0x7a, 0xfe, + 0xf0, 0xd2, 0xbb, 0xb2, 0xcf, 0x9d, 0x8f, 0x8e, 0xdd, 0xab, 0x57, 0x9a, 0x87, 0xd7, 0x37, 0xe6, + 0x7e, 0x09, 0xa1, 0x17, 0x70, 0xf4, 0x7f, 0xfe, 0xcb, 0xd0, 0x1e, 0xda, 0xbd, 0xba, 0xd6, 0x84, + 0xeb, 0x1b, 0x53, 0xcf, 0xd5, 0xfd, 0xa9, 0xce, 0xa5, 0x7f, 0xe5, 0xf6, 0x3f, 0xb9, 0xb6, 0xe7, + 0xd5, 0xb7, 0xf2, 0xa9, 0x25, 0xf4, 0xa1, 0xff, 0x6b, 0x69, 0x68, 0xb7, 0x4b, 0x43, 0xfb, 0xb3, + 0x34, 0xb4, 0xef, 0x2b, 0xa3, 0x72, 0xbb, 0x32, 0x2a, 0xbf, 0x57, 0x46, 0xe5, 0xeb, 0x9b, 0x31, + 0x93, 0xe1, 0x6c, 0x64, 0x11, 0x1e, 0x75, 0xb8, 0x88, 0xb8, 0x60, 0xe2, 0x74, 0x8a, 0x47, 0x62, + 0x2d, 0x3a, 0xf3, 0xb3, 0xb7, 0x9d, 0x6f, 0xa5, 0x47, 0x96, 0x5d, 0x03, 0x31, 0xd2, 0xd5, 0xbb, + 0x79, 0xfd, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xea, 0xfb, 0xa9, 0x08, 0x87, 0x03, 0x00, 0x00, } func (m *Oracle) Marshal() (dAtA []byte, err error) { diff --git a/x/icaoracle/types/query.pb.go b/x/icaoracle/types/query.pb.go index 0fdaaa04bff..f921022d086 100644 --- a/x/icaoracle/types/query.pb.go +++ b/x/icaoracle/types/query.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/icaoracle/query.proto +// source: symphony/icaoracle/query.proto package types @@ -38,7 +38,7 @@ func (m *QueryOracleRequest) Reset() { *m = QueryOracleRequest{} } func (m *QueryOracleRequest) String() string { return proto.CompactTextString(m) } func (*QueryOracleRequest) ProtoMessage() {} func (*QueryOracleRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d4d4563f64cd9510, []int{0} + return fileDescriptor_c61da60d239df1c1, []int{0} } func (m *QueryOracleRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -82,7 +82,7 @@ func (m *QueryOracleResponse) Reset() { *m = QueryOracleResponse{} } func (m *QueryOracleResponse) String() string { return proto.CompactTextString(m) } func (*QueryOracleResponse) ProtoMessage() {} func (*QueryOracleResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d4d4563f64cd9510, []int{1} + return fileDescriptor_c61da60d239df1c1, []int{1} } func (m *QueryOracleResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -126,7 +126,7 @@ func (m *QueryAllOraclesRequest) Reset() { *m = QueryAllOraclesRequest{} func (m *QueryAllOraclesRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllOraclesRequest) ProtoMessage() {} func (*QueryAllOraclesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d4d4563f64cd9510, []int{2} + return fileDescriptor_c61da60d239df1c1, []int{2} } func (m *QueryAllOraclesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -163,7 +163,7 @@ func (m *QueryAllOraclesResponse) Reset() { *m = QueryAllOraclesResponse func (m *QueryAllOraclesResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllOraclesResponse) ProtoMessage() {} func (*QueryAllOraclesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d4d4563f64cd9510, []int{3} + return fileDescriptor_c61da60d239df1c1, []int{3} } func (m *QueryAllOraclesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -208,7 +208,7 @@ func (m *QueryActiveOraclesRequest) Reset() { *m = QueryActiveOraclesReq func (m *QueryActiveOraclesRequest) String() string { return proto.CompactTextString(m) } func (*QueryActiveOraclesRequest) ProtoMessage() {} func (*QueryActiveOraclesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d4d4563f64cd9510, []int{4} + return fileDescriptor_c61da60d239df1c1, []int{4} } func (m *QueryActiveOraclesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -252,7 +252,7 @@ func (m *QueryActiveOraclesResponse) Reset() { *m = QueryActiveOraclesRe func (m *QueryActiveOraclesResponse) String() string { return proto.CompactTextString(m) } func (*QueryActiveOraclesResponse) ProtoMessage() {} func (*QueryActiveOraclesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d4d4563f64cd9510, []int{5} + return fileDescriptor_c61da60d239df1c1, []int{5} } func (m *QueryActiveOraclesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -298,7 +298,7 @@ func (m *QueryMetricsRequest) Reset() { *m = QueryMetricsRequest{} } func (m *QueryMetricsRequest) String() string { return proto.CompactTextString(m) } func (*QueryMetricsRequest) ProtoMessage() {} func (*QueryMetricsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_d4d4563f64cd9510, []int{6} + return fileDescriptor_c61da60d239df1c1, []int{6} } func (m *QueryMetricsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -349,7 +349,7 @@ func (m *QueryMetricsResponse) Reset() { *m = QueryMetricsResponse{} } func (m *QueryMetricsResponse) String() string { return proto.CompactTextString(m) } func (*QueryMetricsResponse) ProtoMessage() {} func (*QueryMetricsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_d4d4563f64cd9510, []int{7} + return fileDescriptor_c61da60d239df1c1, []int{7} } func (m *QueryMetricsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -386,53 +386,53 @@ func (m *QueryMetricsResponse) GetMetrics() []Metric { } func init() { - proto.RegisterType((*QueryOracleRequest)(nil), "stride.icaoracle.QueryOracleRequest") - proto.RegisterType((*QueryOracleResponse)(nil), "stride.icaoracle.QueryOracleResponse") - proto.RegisterType((*QueryAllOraclesRequest)(nil), "stride.icaoracle.QueryAllOraclesRequest") - proto.RegisterType((*QueryAllOraclesResponse)(nil), "stride.icaoracle.QueryAllOraclesResponse") - proto.RegisterType((*QueryActiveOraclesRequest)(nil), "stride.icaoracle.QueryActiveOraclesRequest") - proto.RegisterType((*QueryActiveOraclesResponse)(nil), "stride.icaoracle.QueryActiveOraclesResponse") - proto.RegisterType((*QueryMetricsRequest)(nil), "stride.icaoracle.QueryMetricsRequest") - proto.RegisterType((*QueryMetricsResponse)(nil), "stride.icaoracle.QueryMetricsResponse") -} - -func init() { proto.RegisterFile("stride/icaoracle/query.proto", fileDescriptor_d4d4563f64cd9510) } - -var fileDescriptor_d4d4563f64cd9510 = []byte{ - // 518 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0x41, 0x6b, 0x13, 0x41, - 0x14, 0xce, 0xd4, 0x9a, 0xb4, 0x4f, 0x8a, 0xf2, 0x2c, 0x35, 0x5d, 0xea, 0x1a, 0x16, 0x5b, 0x2b, - 0xda, 0x1d, 0x4d, 0x0e, 0xf6, 0x6a, 0x3d, 0x88, 0x68, 0x51, 0x53, 0xf0, 0x20, 0x42, 0xd8, 0x6c, - 0x86, 0xed, 0x60, 0xba, 0x93, 0xee, 0x4c, 0x8a, 0x8b, 0x78, 0xf1, 0xe2, 0x4d, 0x0a, 0xfe, 0x04, - 0xff, 0x4c, 0x8f, 0x05, 0x2f, 0x82, 0x20, 0x92, 0xf8, 0x43, 0xa4, 0x33, 0x93, 0xd4, 0x75, 0x93, - 0x26, 0xea, 0x29, 0x3b, 0xef, 0x7d, 0xef, 0xfb, 0xbe, 0x79, 0xf3, 0x11, 0x58, 0x91, 0x2a, 0xe1, - 0x2d, 0x46, 0x79, 0x18, 0x88, 0x24, 0x08, 0xdb, 0x8c, 0xee, 0x77, 0x59, 0x92, 0xfa, 0x9d, 0x44, - 0x28, 0x81, 0x97, 0x4c, 0xd7, 0x1f, 0x76, 0x9d, 0xc5, 0x48, 0x44, 0x42, 0x37, 0xe9, 0xc9, 0x97, - 0xc1, 0x39, 0x2b, 0x91, 0x10, 0x51, 0x9b, 0xd1, 0xa0, 0xc3, 0x69, 0x10, 0xc7, 0x42, 0x05, 0x8a, - 0x8b, 0x58, 0xda, 0x6e, 0x25, 0xa7, 0x31, 0xfc, 0x32, 0x08, 0x8f, 0x02, 0x3e, 0x3f, 0x91, 0x7d, - 0xaa, 0x8b, 0x75, 0xb6, 0xdf, 0x65, 0x52, 0xe1, 0x32, 0xcc, 0x85, 0xbb, 0x01, 0x8f, 0x1b, 0xbc, - 0x55, 0x26, 0x15, 0xb2, 0x3e, 0x5f, 0x2f, 0xe9, 0xf3, 0xa3, 0x96, 0xf7, 0x10, 0x2e, 0x67, 0x06, - 0x64, 0x47, 0xc4, 0x92, 0xe1, 0x1d, 0x28, 0x1a, 0x5e, 0x8d, 0xbf, 0x50, 0x2d, 0xfb, 0x7f, 0x5e, - 0xc0, 0xb7, 0x13, 0x16, 0xe7, 0x95, 0x61, 0x49, 0x13, 0xdd, 0x6f, 0xb7, 0x4d, 0x47, 0x5a, 0x75, - 0x6f, 0x07, 0xae, 0xe4, 0x3a, 0x56, 0x66, 0x13, 0x4a, 0x66, 0x5c, 0x96, 0x49, 0xe5, 0xdc, 0x59, - 0x3a, 0x5b, 0xb3, 0x47, 0xdf, 0xaf, 0x15, 0xea, 0x03, 0xb8, 0x57, 0x83, 0x65, 0x43, 0x1a, 0x2a, - 0x7e, 0xc0, 0xb2, 0x8a, 0xb8, 0x04, 0xc5, 0x40, 0xd7, 0xb5, 0xfb, 0xb9, 0xba, 0x3d, 0x79, 0x2f, - 0xc0, 0x19, 0x35, 0xf4, 0xdf, 0x66, 0x5e, 0xd9, 0x25, 0x6e, 0x33, 0x95, 0xf0, 0x70, 0x68, 0xe3, - 0x2a, 0xc0, 0x9e, 0xae, 0x34, 0x5e, 0xb3, 0xd4, 0x2e, 0x7e, 0xde, 0x54, 0x1e, 0xb3, 0x14, 0xd7, - 0xe0, 0xa2, 0x21, 0x68, 0x0c, 0x1f, 0x67, 0x46, 0x63, 0x16, 0x4c, 0xf9, 0x81, 0x7d, 0xa2, 0x67, - 0xb0, 0x98, 0x65, 0x3f, 0xf5, 0x6b, 0xc8, 0xce, 0xf0, 0x6b, 0x66, 0x06, 0x7e, 0x2d, 0xbc, 0xfa, - 0x6d, 0x16, 0xce, 0x6b, 0x4a, 0xfc, 0x48, 0xa0, 0x68, 0xee, 0x84, 0xd7, 0xf3, 0xd3, 0xf9, 0x28, - 0x39, 0xab, 0x13, 0x50, 0xc6, 0x9b, 0x77, 0xef, 0xfd, 0x97, 0x9f, 0x9f, 0x66, 0xee, 0x22, 0xa5, - 0x3b, 0x1a, 0xbe, 0xf1, 0x24, 0x68, 0x4a, 0x9a, 0x8b, 0xaf, 0xfd, 0x79, 0x3b, 0x58, 0xc0, 0x3b, - 0x3c, 0x24, 0x00, 0xa7, 0x41, 0xc1, 0xf5, 0x31, 0x72, 0xb9, 0x94, 0x39, 0x37, 0xa7, 0x40, 0x5a, - 0x73, 0x1b, 0xda, 0xdc, 0x0d, 0x5c, 0x9d, 0xc6, 0x9c, 0xc4, 0xcf, 0x04, 0x16, 0x32, 0x89, 0xc1, - 0x5b, 0xe3, 0xb4, 0x46, 0x84, 0xd1, 0xb9, 0x3d, 0x1d, 0xf8, 0x5f, 0x16, 0x27, 0x69, 0x33, 0x6d, - 0x98, 0x6c, 0xe3, 0x07, 0x02, 0x25, 0x9b, 0x10, 0x1c, 0xf7, 0x48, 0xd9, 0x7c, 0x3a, 0x6b, 0x93, - 0x60, 0x7f, 0xb7, 0x2f, 0x9b, 0xae, 0xad, 0xed, 0xa3, 0x9e, 0x4b, 0x8e, 0x7b, 0x2e, 0xf9, 0xd1, - 0x73, 0xc9, 0x61, 0xdf, 0x2d, 0x1c, 0xf7, 0xdd, 0xc2, 0xd7, 0xbe, 0x5b, 0x78, 0x59, 0x8b, 0xb8, - 0xda, 0xed, 0x36, 0xfd, 0x50, 0xec, 0x8d, 0xa2, 0x3a, 0xa8, 0x6e, 0xd2, 0x37, 0xbf, 0x11, 0xaa, - 0xb4, 0xc3, 0x64, 0xb3, 0xa8, 0xff, 0xd9, 0x6a, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0xdb, 0x72, - 0x5c, 0x2a, 0x61, 0x05, 0x00, 0x00, + proto.RegisterType((*QueryOracleRequest)(nil), "symphony.icaoracle.QueryOracleRequest") + proto.RegisterType((*QueryOracleResponse)(nil), "symphony.icaoracle.QueryOracleResponse") + proto.RegisterType((*QueryAllOraclesRequest)(nil), "symphony.icaoracle.QueryAllOraclesRequest") + proto.RegisterType((*QueryAllOraclesResponse)(nil), "symphony.icaoracle.QueryAllOraclesResponse") + proto.RegisterType((*QueryActiveOraclesRequest)(nil), "symphony.icaoracle.QueryActiveOraclesRequest") + proto.RegisterType((*QueryActiveOraclesResponse)(nil), "symphony.icaoracle.QueryActiveOraclesResponse") + proto.RegisterType((*QueryMetricsRequest)(nil), "symphony.icaoracle.QueryMetricsRequest") + proto.RegisterType((*QueryMetricsResponse)(nil), "symphony.icaoracle.QueryMetricsResponse") +} + +func init() { proto.RegisterFile("symphony/icaoracle/query.proto", fileDescriptor_c61da60d239df1c1) } + +var fileDescriptor_c61da60d239df1c1 = []byte{ + // 526 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0x51, 0x6b, 0x13, 0x4d, + 0x14, 0xcd, 0xf4, 0xeb, 0x97, 0xb4, 0x57, 0x8a, 0x30, 0x96, 0x9a, 0x2e, 0xba, 0x96, 0x15, 0x6b, + 0xb1, 0x64, 0x87, 0xa6, 0x14, 0xc1, 0x37, 0xeb, 0x53, 0x11, 0x29, 0x2e, 0x08, 0x22, 0x42, 0x98, + 0xdd, 0x0e, 0x9b, 0xc1, 0xcd, 0xce, 0x36, 0x33, 0x09, 0x2e, 0xe2, 0x8b, 0x6f, 0xbe, 0x15, 0xfd, + 0x0d, 0xfe, 0x97, 0x3e, 0x16, 0x7c, 0xf1, 0x49, 0x24, 0xf1, 0x87, 0x48, 0x67, 0x66, 0x53, 0x97, + 0x6c, 0x9a, 0x16, 0x7c, 0xdb, 0xb9, 0xf7, 0xdc, 0x73, 0xce, 0xdc, 0x39, 0x2c, 0xb8, 0x32, 0xef, + 0x65, 0x5d, 0x91, 0xe6, 0x84, 0x47, 0x54, 0xf4, 0x69, 0x94, 0x30, 0x72, 0x3c, 0x60, 0xfd, 0xdc, + 0xcf, 0xfa, 0x42, 0x09, 0x8c, 0x8b, 0xbe, 0x3f, 0xe9, 0x3b, 0xab, 0xb1, 0x88, 0x85, 0x6e, 0x93, + 0xf3, 0x2f, 0x83, 0x74, 0xee, 0xc4, 0x42, 0xc4, 0x09, 0x23, 0x34, 0xe3, 0x84, 0xa6, 0xa9, 0x50, + 0x54, 0x71, 0x91, 0x4a, 0xdb, 0xf5, 0x2a, 0x74, 0x26, 0x5f, 0x06, 0xe3, 0x11, 0xc0, 0x2f, 0xcf, + 0xa5, 0x0f, 0x75, 0x31, 0x60, 0xc7, 0x03, 0x26, 0x15, 0x5e, 0x87, 0xa5, 0xa8, 0x4b, 0x79, 0xda, + 0xe1, 0x47, 0x4d, 0xb4, 0x81, 0xb6, 0x96, 0x83, 0x86, 0x3e, 0x1f, 0x1c, 0x79, 0x07, 0x70, 0xab, + 0x34, 0x20, 0x33, 0x91, 0x4a, 0x86, 0xdb, 0x50, 0x37, 0xbc, 0x1a, 0x7f, 0xa3, 0xed, 0xf8, 0xd3, + 0x97, 0xf0, 0xed, 0x8c, 0x45, 0x7a, 0x4d, 0x58, 0xd3, 0x54, 0x4f, 0x93, 0xc4, 0x74, 0xa4, 0xd5, + 0xf7, 0x5e, 0xc1, 0xed, 0xa9, 0x8e, 0x15, 0x7a, 0x02, 0x0d, 0x33, 0x2e, 0x9b, 0x68, 0xe3, 0xbf, + 0xcb, 0x95, 0xf6, 0x17, 0x4f, 0x7f, 0xde, 0xab, 0x05, 0xc5, 0x80, 0xb7, 0x0b, 0xeb, 0x86, 0x36, + 0x52, 0x7c, 0xc8, 0xca, 0x9a, 0x78, 0x0d, 0xea, 0x54, 0xd7, 0xf5, 0x0d, 0x96, 0x02, 0x7b, 0xf2, + 0x5e, 0x83, 0x53, 0x35, 0xf4, 0x0f, 0xec, 0xbc, 0xb5, 0xab, 0x7c, 0xc1, 0x54, 0x9f, 0x47, 0x13, + 0x23, 0x77, 0x01, 0x7a, 0xba, 0xd2, 0x79, 0xc7, 0x72, 0xbb, 0xfe, 0x65, 0x53, 0x79, 0xce, 0x72, + 0xbc, 0x09, 0x37, 0x0d, 0x41, 0x67, 0xf2, 0x44, 0x0b, 0x1a, 0xb3, 0x62, 0xca, 0xcf, 0xec, 0x43, + 0x05, 0xb0, 0x5a, 0x66, 0xbf, 0x70, 0x6c, 0xc8, 0x2e, 0x75, 0x6c, 0xa6, 0x0a, 0xc7, 0x76, 0xa0, + 0x3d, 0x5e, 0x84, 0xff, 0x35, 0x29, 0x3e, 0x41, 0x50, 0x37, 0xb7, 0xc2, 0x9b, 0x55, 0xf3, 0xd3, + 0xa1, 0x72, 0x1e, 0xce, 0xc5, 0x19, 0x87, 0xde, 0xde, 0xa7, 0xef, 0xbf, 0xbf, 0x2e, 0x10, 0xdc, + 0x22, 0x15, 0x01, 0x1e, 0xee, 0x84, 0x4c, 0xd1, 0x1d, 0x62, 0x8f, 0x1f, 0x8a, 0x25, 0x7c, 0xc4, + 0x5f, 0x10, 0xc0, 0x45, 0x60, 0xf0, 0xa3, 0x99, 0x72, 0x53, 0x79, 0x73, 0xb6, 0xaf, 0x84, 0xb5, + 0xf6, 0xb6, 0xb5, 0xbd, 0x07, 0xf8, 0xfe, 0x7c, 0x7b, 0x12, 0x7f, 0x43, 0xb0, 0x52, 0x4a, 0x0e, + 0x6e, 0xcd, 0xd6, 0xaa, 0x88, 0xa5, 0xe3, 0x5f, 0x15, 0x7e, 0xfd, 0xe5, 0x49, 0x12, 0xe6, 0x1d, + 0x93, 0x72, 0xfc, 0x19, 0x41, 0xc3, 0x26, 0x05, 0xcf, 0x7e, 0xa8, 0x72, 0x52, 0x9d, 0xad, 0xf9, + 0xc0, 0xeb, 0xec, 0xcc, 0xa6, 0x6c, 0xff, 0xf0, 0x74, 0xe4, 0xa2, 0xb3, 0x91, 0x8b, 0x7e, 0x8d, + 0x5c, 0x74, 0x32, 0x76, 0x6b, 0x67, 0x63, 0xb7, 0xf6, 0x63, 0xec, 0xd6, 0xde, 0xec, 0xc5, 0x5c, + 0x75, 0x07, 0xa1, 0x1f, 0x89, 0x1e, 0x11, 0xb2, 0x27, 0x24, 0x97, 0xad, 0x84, 0x86, 0xb2, 0x38, + 0x90, 0x61, 0xfb, 0x31, 0x79, 0xff, 0x17, 0xb5, 0xca, 0x33, 0x26, 0xc3, 0xba, 0xfe, 0xd7, 0xed, + 0xfe, 0x09, 0x00, 0x00, 0xff, 0xff, 0xf7, 0x29, 0x2b, 0x90, 0x79, 0x05, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -474,7 +474,7 @@ func NewQueryClient(cc grpc1.ClientConn) QueryClient { func (c *queryClient) Oracle(ctx context.Context, in *QueryOracleRequest, opts ...grpc.CallOption) (*QueryOracleResponse, error) { out := new(QueryOracleResponse) - err := c.cc.Invoke(ctx, "/stride.icaoracle.Query/Oracle", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.icaoracle.Query/Oracle", in, out, opts...) if err != nil { return nil, err } @@ -483,7 +483,7 @@ func (c *queryClient) Oracle(ctx context.Context, in *QueryOracleRequest, opts . func (c *queryClient) AllOracles(ctx context.Context, in *QueryAllOraclesRequest, opts ...grpc.CallOption) (*QueryAllOraclesResponse, error) { out := new(QueryAllOraclesResponse) - err := c.cc.Invoke(ctx, "/stride.icaoracle.Query/AllOracles", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.icaoracle.Query/AllOracles", in, out, opts...) if err != nil { return nil, err } @@ -492,7 +492,7 @@ func (c *queryClient) AllOracles(ctx context.Context, in *QueryAllOraclesRequest func (c *queryClient) ActiveOracles(ctx context.Context, in *QueryActiveOraclesRequest, opts ...grpc.CallOption) (*QueryActiveOraclesResponse, error) { out := new(QueryActiveOraclesResponse) - err := c.cc.Invoke(ctx, "/stride.icaoracle.Query/ActiveOracles", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.icaoracle.Query/ActiveOracles", in, out, opts...) if err != nil { return nil, err } @@ -501,7 +501,7 @@ func (c *queryClient) ActiveOracles(ctx context.Context, in *QueryActiveOraclesR func (c *queryClient) Metrics(ctx context.Context, in *QueryMetricsRequest, opts ...grpc.CallOption) (*QueryMetricsResponse, error) { out := new(QueryMetricsResponse) - err := c.cc.Invoke(ctx, "/stride.icaoracle.Query/Metrics", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.icaoracle.Query/Metrics", in, out, opts...) if err != nil { return nil, err } @@ -558,7 +558,7 @@ func _Query_Oracle_Handler(srv interface{}, ctx context.Context, dec func(interf } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.icaoracle.Query/Oracle", + FullMethod: "/symphony.icaoracle.Query/Oracle", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).Oracle(ctx, req.(*QueryOracleRequest)) @@ -576,7 +576,7 @@ func _Query_AllOracles_Handler(srv interface{}, ctx context.Context, dec func(in } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.icaoracle.Query/AllOracles", + FullMethod: "/symphony.icaoracle.Query/AllOracles", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).AllOracles(ctx, req.(*QueryAllOraclesRequest)) @@ -594,7 +594,7 @@ func _Query_ActiveOracles_Handler(srv interface{}, ctx context.Context, dec func } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.icaoracle.Query/ActiveOracles", + FullMethod: "/symphony.icaoracle.Query/ActiveOracles", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).ActiveOracles(ctx, req.(*QueryActiveOraclesRequest)) @@ -612,7 +612,7 @@ func _Query_Metrics_Handler(srv interface{}, ctx context.Context, dec func(inter } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.icaoracle.Query/Metrics", + FullMethod: "/symphony.icaoracle.Query/Metrics", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).Metrics(ctx, req.(*QueryMetricsRequest)) @@ -621,7 +621,7 @@ func _Query_Metrics_Handler(srv interface{}, ctx context.Context, dec func(inter } var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "stride.icaoracle.Query", + ServiceName: "symphony.icaoracle.Query", HandlerType: (*QueryServer)(nil), Methods: []grpc.MethodDesc{ { @@ -642,7 +642,7 @@ var _Query_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "stride/icaoracle/query.proto", + Metadata: "symphony/icaoracle/query.proto", } func (m *QueryOracleRequest) Marshal() (dAtA []byte, err error) { diff --git a/x/icaoracle/types/query.pb.gw.go b/x/icaoracle/types/query.pb.gw.go index 3638baf3842..3f15f7f8e91 100644 --- a/x/icaoracle/types/query.pb.gw.go +++ b/x/icaoracle/types/query.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: stride/icaoracle/query.proto +// source: symphony/icaoracle/query.proto /* Package types is a reverse proxy. @@ -400,13 +400,13 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } var ( - pattern_Query_Oracle_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"Stride-Labs", "stride", "icaoracle", "oracle", "chain_id"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Oracle_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"symphony", "icaoracle", "v1beta1", "oracle", "chain_id"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_AllOracles_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"Stride-Labs", "stride", "icaoracle", "oracles"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_AllOracles_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"symphony", "icaoracle", "v1beta1", "oracles"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_ActiveOracles_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"Stride-Labs", "stride", "icaoracle", "oracles", "by_active"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_ActiveOracles_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"symphony", "icaoracle", "v1beta1", "oracles", "by_active"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Metrics_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"Stride-Labs", "stride", "icaoracle", "metrics"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Metrics_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"symphony", "icaoracle", "v1beta1", "metrics"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( diff --git a/x/icaoracle/types/tx.pb.go b/x/icaoracle/types/tx.pb.go index 1eee6adba35..9aa49075d1a 100644 --- a/x/icaoracle/types/tx.pb.go +++ b/x/icaoracle/types/tx.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/icaoracle/tx.proto +// source: symphony/icaoracle/tx.proto package types @@ -40,7 +40,7 @@ func (m *MsgAddOracle) Reset() { *m = MsgAddOracle{} } func (m *MsgAddOracle) String() string { return proto.CompactTextString(m) } func (*MsgAddOracle) ProtoMessage() {} func (*MsgAddOracle) Descriptor() ([]byte, []int) { - return fileDescriptor_6e58a377bb8520d3, []int{0} + return fileDescriptor_c71d17979ded0a4c, []int{0} } func (m *MsgAddOracle) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -90,7 +90,7 @@ func (m *MsgAddOracleResponse) Reset() { *m = MsgAddOracleResponse{} } func (m *MsgAddOracleResponse) String() string { return proto.CompactTextString(m) } func (*MsgAddOracleResponse) ProtoMessage() {} func (*MsgAddOracleResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6e58a377bb8520d3, []int{1} + return fileDescriptor_c71d17979ded0a4c, []int{1} } func (m *MsgAddOracleResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -131,7 +131,7 @@ func (m *MsgInstantiateOracle) Reset() { *m = MsgInstantiateOracle{} } func (m *MsgInstantiateOracle) String() string { return proto.CompactTextString(m) } func (*MsgInstantiateOracle) ProtoMessage() {} func (*MsgInstantiateOracle) Descriptor() ([]byte, []int) { - return fileDescriptor_6e58a377bb8520d3, []int{2} + return fileDescriptor_c71d17979ded0a4c, []int{2} } func (m *MsgInstantiateOracle) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -195,7 +195,7 @@ func (m *MsgInstantiateOracleResponse) Reset() { *m = MsgInstantiateOrac func (m *MsgInstantiateOracleResponse) String() string { return proto.CompactTextString(m) } func (*MsgInstantiateOracleResponse) ProtoMessage() {} func (*MsgInstantiateOracleResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6e58a377bb8520d3, []int{3} + return fileDescriptor_c71d17979ded0a4c, []int{3} } func (m *MsgInstantiateOracleResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -234,7 +234,7 @@ func (m *MsgRestoreOracleICA) Reset() { *m = MsgRestoreOracleICA{} } func (m *MsgRestoreOracleICA) String() string { return proto.CompactTextString(m) } func (*MsgRestoreOracleICA) ProtoMessage() {} func (*MsgRestoreOracleICA) Descriptor() ([]byte, []int) { - return fileDescriptor_6e58a377bb8520d3, []int{4} + return fileDescriptor_c71d17979ded0a4c, []int{4} } func (m *MsgRestoreOracleICA) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -284,7 +284,7 @@ func (m *MsgRestoreOracleICAResponse) Reset() { *m = MsgRestoreOracleICA func (m *MsgRestoreOracleICAResponse) String() string { return proto.CompactTextString(m) } func (*MsgRestoreOracleICAResponse) ProtoMessage() {} func (*MsgRestoreOracleICAResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6e58a377bb8520d3, []int{5} + return fileDescriptor_c71d17979ded0a4c, []int{5} } func (m *MsgRestoreOracleICAResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -326,7 +326,7 @@ func (m *MsgToggleOracle) Reset() { *m = MsgToggleOracle{} } func (m *MsgToggleOracle) String() string { return proto.CompactTextString(m) } func (*MsgToggleOracle) ProtoMessage() {} func (*MsgToggleOracle) Descriptor() ([]byte, []int) { - return fileDescriptor_6e58a377bb8520d3, []int{6} + return fileDescriptor_c71d17979ded0a4c, []int{6} } func (m *MsgToggleOracle) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -383,7 +383,7 @@ func (m *MsgToggleOracleResponse) Reset() { *m = MsgToggleOracleResponse func (m *MsgToggleOracleResponse) String() string { return proto.CompactTextString(m) } func (*MsgToggleOracleResponse) ProtoMessage() {} func (*MsgToggleOracleResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6e58a377bb8520d3, []int{7} + return fileDescriptor_c71d17979ded0a4c, []int{7} } func (m *MsgToggleOracleResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -424,7 +424,7 @@ func (m *MsgRemoveOracle) Reset() { *m = MsgRemoveOracle{} } func (m *MsgRemoveOracle) String() string { return proto.CompactTextString(m) } func (*MsgRemoveOracle) ProtoMessage() {} func (*MsgRemoveOracle) Descriptor() ([]byte, []int) { - return fileDescriptor_6e58a377bb8520d3, []int{8} + return fileDescriptor_c71d17979ded0a4c, []int{8} } func (m *MsgRemoveOracle) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -474,7 +474,7 @@ func (m *MsgRemoveOracleResponse) Reset() { *m = MsgRemoveOracleResponse func (m *MsgRemoveOracleResponse) String() string { return proto.CompactTextString(m) } func (*MsgRemoveOracleResponse) ProtoMessage() {} func (*MsgRemoveOracleResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_6e58a377bb8520d3, []int{9} + return fileDescriptor_c71d17979ded0a4c, []int{9} } func (m *MsgRemoveOracleResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -504,62 +504,62 @@ func (m *MsgRemoveOracleResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgRemoveOracleResponse proto.InternalMessageInfo func init() { - proto.RegisterType((*MsgAddOracle)(nil), "stride.icaoracle.MsgAddOracle") - proto.RegisterType((*MsgAddOracleResponse)(nil), "stride.icaoracle.MsgAddOracleResponse") - proto.RegisterType((*MsgInstantiateOracle)(nil), "stride.icaoracle.MsgInstantiateOracle") - proto.RegisterType((*MsgInstantiateOracleResponse)(nil), "stride.icaoracle.MsgInstantiateOracleResponse") - proto.RegisterType((*MsgRestoreOracleICA)(nil), "stride.icaoracle.MsgRestoreOracleICA") - proto.RegisterType((*MsgRestoreOracleICAResponse)(nil), "stride.icaoracle.MsgRestoreOracleICAResponse") - proto.RegisterType((*MsgToggleOracle)(nil), "stride.icaoracle.MsgToggleOracle") - proto.RegisterType((*MsgToggleOracleResponse)(nil), "stride.icaoracle.MsgToggleOracleResponse") - proto.RegisterType((*MsgRemoveOracle)(nil), "stride.icaoracle.MsgRemoveOracle") - proto.RegisterType((*MsgRemoveOracleResponse)(nil), "stride.icaoracle.MsgRemoveOracleResponse") -} - -func init() { proto.RegisterFile("stride/icaoracle/tx.proto", fileDescriptor_6e58a377bb8520d3) } - -var fileDescriptor_6e58a377bb8520d3 = []byte{ - // 628 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0xcf, 0x6a, 0x13, 0x41, - 0x1c, 0xee, 0xb6, 0xb5, 0xda, 0xa1, 0xb5, 0xed, 0x5a, 0xda, 0x64, 0xb5, 0x4b, 0xbb, 0x62, 0xad, - 0xc5, 0xee, 0x62, 0x0a, 0x22, 0xf1, 0x94, 0xe6, 0x14, 0x30, 0x14, 0x36, 0x9e, 0x44, 0x58, 0x26, - 0xb3, 0xe3, 0x66, 0x31, 0x99, 0x09, 0x33, 0xd3, 0xd0, 0xde, 0xc4, 0x63, 0x4f, 0x7d, 0x03, 0xf1, - 0x0d, 0x72, 0x10, 0x7c, 0x05, 0x8f, 0xc5, 0x93, 0x47, 0x49, 0x0e, 0x79, 0x01, 0x1f, 0x40, 0xf6, - 0xff, 0x66, 0xb3, 0x35, 0x01, 0xd1, 0x4b, 0xc2, 0xef, 0xfb, 0x7d, 0xf3, 0xcd, 0xf7, 0xcd, 0xec, - 0xcc, 0x80, 0x22, 0x17, 0xcc, 0xb5, 0xb1, 0xe1, 0x22, 0x48, 0x19, 0x44, 0x6d, 0x6c, 0x88, 0x73, - 0xbd, 0xcb, 0xa8, 0xa0, 0xf2, 0x7a, 0xd0, 0xd2, 0xe3, 0x96, 0xb2, 0x01, 0x3b, 0x2e, 0xa1, 0x86, - 0xff, 0x1b, 0x90, 0x94, 0x22, 0xa2, 0xbc, 0x43, 0xb9, 0xe5, 0x57, 0x46, 0x50, 0x84, 0xad, 0xed, - 0xa0, 0x32, 0x3a, 0xdc, 0x31, 0x7a, 0xcf, 0xbc, 0xbf, 0xa0, 0xa1, 0x5d, 0x49, 0x60, 0xa5, 0xce, - 0x9d, 0x8a, 0x6d, 0x9f, 0xfa, 0xba, 0x72, 0x09, 0xdc, 0x46, 0x0c, 0x43, 0x41, 0x59, 0x41, 0xda, - 0x95, 0x0e, 0x96, 0x4f, 0x0a, 0xdf, 0xbf, 0x1c, 0x6d, 0x86, 0x62, 0x15, 0xdb, 0x66, 0x98, 0xf3, - 0x86, 0x60, 0x2e, 0x71, 0xcc, 0x88, 0x28, 0x3f, 0x04, 0xab, 0x88, 0x12, 0x82, 0x91, 0x70, 0x29, - 0xb1, 0x5c, 0xbb, 0x30, 0xef, 0x8d, 0x34, 0x57, 0x12, 0xb0, 0x66, 0x97, 0x1f, 0x7f, 0x1c, 0xf5, - 0x0f, 0xa3, 0x21, 0x97, 0xa3, 0xfe, 0xe1, 0x56, 0x92, 0x33, 0xed, 0x40, 0xdb, 0x02, 0x9b, 0xe9, - 0xda, 0xc4, 0xbc, 0x4b, 0x09, 0xc7, 0xda, 0xe5, 0xbc, 0xdf, 0xa8, 0x11, 0x2e, 0x20, 0x11, 0x2e, - 0x14, 0xf8, 0x2f, 0x2c, 0xef, 0x83, 0xb5, 0x60, 0x6e, 0x0b, 0xb5, 0xa0, 0x9b, 0x32, 0xbd, 0x1a, - 0xc0, 0x55, 0x0f, 0xad, 0xd9, 0xf2, 0x01, 0x58, 0x47, 0x94, 0x08, 0x06, 0x91, 0xb0, 0x10, 0xb5, - 0xb1, 0x47, 0x5c, 0xd8, 0x95, 0x0e, 0x16, 0xcd, 0xbb, 0x11, 0x5e, 0xa5, 0x36, 0xae, 0xd9, 0xf2, - 0x4b, 0xa0, 0x08, 0x06, 0x09, 0x7f, 0x87, 0x99, 0xa7, 0x49, 0x08, 0x6e, 0x5b, 0x94, 0x58, 0x81, - 0x5c, 0x61, 0xd1, 0x17, 0xdf, 0x8e, 0x18, 0xd5, 0x80, 0x70, 0x4a, 0x82, 0x08, 0x65, 0x23, 0xbb, - 0x38, 0xea, 0xd8, 0xe2, 0x4c, 0x64, 0xd6, 0x54, 0xf0, 0x20, 0x0f, 0x8f, 0x17, 0xeb, 0xb3, 0x04, - 0xee, 0xd5, 0xb9, 0x63, 0x62, 0x2e, 0x28, 0x0b, 0x9b, 0xb5, 0x6a, 0xe5, 0x5f, 0xae, 0x55, 0x59, - 0xcf, 0x86, 0xd8, 0x19, 0x0b, 0x91, 0xf5, 0xa2, 0xed, 0x80, 0xfb, 0x39, 0x70, 0x1c, 0xe1, 0xab, - 0x04, 0xd6, 0xea, 0xdc, 0x79, 0x4d, 0x1d, 0xa7, 0x1d, 0x6d, 0xf5, 0x73, 0xb0, 0x0c, 0xcf, 0x44, - 0x8b, 0x32, 0x57, 0x5c, 0x4c, 0x0d, 0x90, 0x50, 0x67, 0xde, 0xee, 0x2d, 0xb0, 0x04, 0x91, 0x70, - 0x7b, 0xd8, 0xdf, 0xe4, 0x3b, 0x66, 0x58, 0x95, 0x9f, 0x7a, 0xd1, 0x12, 0x3d, 0x2f, 0x5c, 0x71, - 0x2c, 0x5c, 0xda, 0xa5, 0x56, 0x04, 0xdb, 0x19, 0x28, 0x0e, 0xf5, 0x29, 0x08, 0x65, 0xe2, 0x0e, - 0xed, 0xfd, 0xa7, 0x50, 0xd3, 0xcd, 0xa7, 0xdd, 0x84, 0xe6, 0xd3, 0x50, 0x64, 0xbe, 0xf4, 0x6b, - 0x01, 0x2c, 0xd4, 0xb9, 0x23, 0x37, 0xc0, 0x72, 0x72, 0x61, 0xa8, 0x7a, 0xf6, 0x6e, 0xd2, 0xd3, - 0xc7, 0x57, 0xd9, 0xff, 0x73, 0x3f, 0x12, 0x97, 0xdf, 0x83, 0x8d, 0xc9, 0xa3, 0x9d, 0x3f, 0x78, - 0x82, 0xa7, 0xe8, 0xb3, 0xf1, 0xe2, 0xc9, 0x5a, 0x60, 0x7d, 0xe2, 0x68, 0x3c, 0xca, 0xd5, 0xc8, - 0xd2, 0x94, 0xa3, 0x99, 0x68, 0xf1, 0x4c, 0x6f, 0xc1, 0xca, 0xd8, 0x17, 0xbc, 0x97, 0x3b, 0x3c, - 0x4d, 0x51, 0x9e, 0x4c, 0xa5, 0xa4, 0xd5, 0xc7, 0x3e, 0xa5, 0xbd, 0x1b, 0xcc, 0x25, 0x94, 0x1b, - 0xd4, 0xf3, 0xf6, 0x5b, 0xb9, 0xf5, 0x61, 0xd4, 0x3f, 0x94, 0x4e, 0xea, 0xdf, 0x06, 0xaa, 0x74, - 0x3d, 0x50, 0xa5, 0x9f, 0x03, 0x55, 0xba, 0x1a, 0xaa, 0x73, 0xd7, 0x43, 0x75, 0xee, 0xc7, 0x50, - 0x9d, 0x7b, 0x73, 0xec, 0xb8, 0xa2, 0x75, 0xd6, 0xd4, 0x11, 0xed, 0x18, 0x0d, 0x5f, 0xf5, 0xe8, - 0x15, 0x6c, 0x72, 0x23, 0x7c, 0xc8, 0x7a, 0xa5, 0x17, 0xc6, 0x79, 0xfa, 0x39, 0xbb, 0xe8, 0x62, - 0xde, 0x5c, 0xf2, 0x5f, 0x9e, 0xe3, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xf8, 0x64, 0x42, 0x8c, - 0xef, 0x06, 0x00, 0x00, + proto.RegisterType((*MsgAddOracle)(nil), "symphony.icaoracle.MsgAddOracle") + proto.RegisterType((*MsgAddOracleResponse)(nil), "symphony.icaoracle.MsgAddOracleResponse") + proto.RegisterType((*MsgInstantiateOracle)(nil), "symphony.icaoracle.MsgInstantiateOracle") + proto.RegisterType((*MsgInstantiateOracleResponse)(nil), "symphony.icaoracle.MsgInstantiateOracleResponse") + proto.RegisterType((*MsgRestoreOracleICA)(nil), "symphony.icaoracle.MsgRestoreOracleICA") + proto.RegisterType((*MsgRestoreOracleICAResponse)(nil), "symphony.icaoracle.MsgRestoreOracleICAResponse") + proto.RegisterType((*MsgToggleOracle)(nil), "symphony.icaoracle.MsgToggleOracle") + proto.RegisterType((*MsgToggleOracleResponse)(nil), "symphony.icaoracle.MsgToggleOracleResponse") + proto.RegisterType((*MsgRemoveOracle)(nil), "symphony.icaoracle.MsgRemoveOracle") + proto.RegisterType((*MsgRemoveOracleResponse)(nil), "symphony.icaoracle.MsgRemoveOracleResponse") +} + +func init() { proto.RegisterFile("symphony/icaoracle/tx.proto", fileDescriptor_c71d17979ded0a4c) } + +var fileDescriptor_c71d17979ded0a4c = []byte{ + // 631 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0xcd, 0x6e, 0xd3, 0x4c, + 0x14, 0xad, 0xdb, 0x7e, 0xfd, 0xc8, 0x28, 0xa5, 0xad, 0xa9, 0xf2, 0xe3, 0x52, 0x2b, 0x72, 0x24, + 0x1a, 0x05, 0x6a, 0x43, 0x10, 0x20, 0x85, 0x55, 0x9a, 0x55, 0x16, 0x51, 0x24, 0x83, 0x84, 0xc4, + 0xc6, 0x4c, 0xc6, 0x83, 0x63, 0x29, 0x9e, 0x89, 0x3c, 0xd3, 0xa8, 0xd9, 0x21, 0x56, 0xa8, 0xab, + 0xbe, 0x01, 0xe2, 0x0d, 0xb2, 0x40, 0xe2, 0x15, 0x58, 0x56, 0xac, 0x58, 0xa2, 0x64, 0x91, 0xd7, + 0x40, 0xb6, 0xe3, 0x9f, 0xfc, 0x29, 0x91, 0x10, 0x6c, 0x12, 0xdd, 0x7b, 0xcf, 0x9c, 0x7b, 0xce, + 0xcc, 0x1d, 0x0f, 0x38, 0x61, 0x03, 0xa7, 0xd7, 0xa1, 0x64, 0xa0, 0xd9, 0x08, 0x52, 0x17, 0xa2, + 0x2e, 0xd6, 0xf8, 0x95, 0xda, 0x73, 0x29, 0xa7, 0xa2, 0x18, 0x16, 0xd5, 0xa8, 0x28, 0x1d, 0x41, + 0xc7, 0x26, 0x54, 0xf3, 0x7f, 0x03, 0x98, 0x94, 0x47, 0x94, 0x39, 0x94, 0x19, 0x7e, 0xa4, 0x05, + 0xc1, 0xb4, 0x94, 0x0d, 0x22, 0xcd, 0x61, 0x96, 0xd6, 0x7f, 0xe2, 0xfd, 0x05, 0x05, 0xe5, 0x46, + 0x00, 0xe9, 0x26, 0xb3, 0x6a, 0xa6, 0xd9, 0xf2, 0x79, 0xc5, 0x0a, 0xf8, 0x1f, 0xb9, 0x18, 0x72, + 0xea, 0xe6, 0x84, 0x82, 0x50, 0x4a, 0x5d, 0xe4, 0x7e, 0x7c, 0x3d, 0x3f, 0x9e, 0x92, 0xd5, 0x4c, + 0xd3, 0xc5, 0x8c, 0xbd, 0xe2, 0xae, 0x4d, 0x2c, 0x3d, 0x04, 0x8a, 0x45, 0xb0, 0x8f, 0x28, 0x21, + 0x18, 0x71, 0x9b, 0x12, 0xc3, 0x36, 0x73, 0xdb, 0xde, 0x4a, 0x3d, 0x1d, 0x27, 0x1b, 0x66, 0xf5, + 0xec, 0xe3, 0x64, 0x58, 0x0e, 0x97, 0x5c, 0x4f, 0x86, 0xe5, 0x4c, 0xec, 0x34, 0xa9, 0x40, 0xc9, + 0x80, 0xe3, 0x64, 0xac, 0x63, 0xd6, 0xa3, 0x84, 0x61, 0xe5, 0x7a, 0xdb, 0x2f, 0x34, 0x08, 0xe3, + 0x90, 0x70, 0x1b, 0x72, 0xfc, 0x07, 0x92, 0x1f, 0x80, 0x83, 0xa0, 0xb7, 0x81, 0x3a, 0xd0, 0x4e, + 0x88, 0xde, 0x0f, 0xd2, 0x75, 0x2f, 0xdb, 0x30, 0xc5, 0x12, 0x38, 0x44, 0x94, 0x70, 0x17, 0x22, + 0x6e, 0x20, 0x6a, 0x62, 0x0f, 0xb8, 0x53, 0x10, 0x4a, 0xbb, 0xfa, 0xdd, 0x30, 0x5f, 0xa7, 0x26, + 0x6e, 0x98, 0xe2, 0x4b, 0x20, 0x71, 0x17, 0x12, 0xf6, 0x1e, 0xbb, 0x1e, 0x27, 0x21, 0xb8, 0x6b, + 0x50, 0x62, 0x04, 0x74, 0xb9, 0x5d, 0x9f, 0x3c, 0x1b, 0x22, 0xea, 0x01, 0xa0, 0x45, 0x02, 0x0b, + 0x55, 0x6d, 0x7e, 0x73, 0xe4, 0x99, 0xcd, 0x59, 0xf0, 0xac, 0xc8, 0xe0, 0xfe, 0xb2, 0x7c, 0xb4, + 0x59, 0x5f, 0x04, 0x70, 0xaf, 0xc9, 0x2c, 0x1d, 0x33, 0x4e, 0xdd, 0x69, 0xb1, 0x51, 0xaf, 0xfd, + 0xcd, 0xbd, 0xaa, 0xaa, 0xf3, 0x26, 0x4e, 0x67, 0x4c, 0xcc, 0x6b, 0x51, 0x4e, 0xc1, 0xc9, 0x92, + 0x74, 0x64, 0xe1, 0x9b, 0x00, 0x0e, 0x9a, 0xcc, 0x7a, 0x4d, 0x2d, 0xab, 0x1b, 0x1e, 0xf5, 0x73, + 0x90, 0x82, 0x97, 0xbc, 0x43, 0x5d, 0x9b, 0x0f, 0xd6, 0x1a, 0x88, 0xa1, 0x1b, 0x1f, 0x77, 0x06, + 0xec, 0x41, 0xc4, 0xed, 0x3e, 0xf6, 0x0f, 0xf9, 0x8e, 0x3e, 0x8d, 0xaa, 0x8f, 0x3c, 0x6b, 0x31, + 0x9f, 0x67, 0x2e, 0x3f, 0x63, 0x2e, 0xa9, 0x52, 0xc9, 0x83, 0xec, 0x5c, 0x2a, 0x32, 0xf5, 0x39, + 0x30, 0xa5, 0x63, 0x87, 0xf6, 0xff, 0x91, 0xa9, 0xf5, 0xe2, 0x93, 0x6a, 0xa6, 0xe2, 0x93, 0xa9, + 0x50, 0x7c, 0xe5, 0xd3, 0x2e, 0xd8, 0x69, 0x32, 0x4b, 0x7c, 0x03, 0x52, 0xf1, 0x07, 0xa3, 0xa0, + 0x2e, 0x7e, 0x9d, 0xd4, 0xe4, 0x05, 0x96, 0x4a, 0xeb, 0x10, 0x61, 0x03, 0x91, 0x82, 0xa3, 0xc5, + 0xeb, 0xbd, 0x6a, 0xf9, 0x02, 0x52, 0x7a, 0xbc, 0x29, 0x32, 0x6a, 0xd8, 0x05, 0x87, 0x0b, 0x57, + 0xe4, 0x6c, 0x05, 0xcb, 0x3c, 0x50, 0xd2, 0x36, 0x04, 0x46, 0xdd, 0xde, 0x81, 0xf4, 0xcc, 0x34, + 0x17, 0x57, 0x10, 0x24, 0x41, 0xd2, 0xc3, 0x0d, 0x40, 0xc9, 0x0e, 0x33, 0xa3, 0x55, 0x5c, 0x29, + 0x31, 0x06, 0xad, 0xec, 0xb0, 0x6c, 0x06, 0xa4, 0xff, 0x3e, 0x4c, 0x86, 0x65, 0xe1, 0xa2, 0xf5, + 0x7d, 0x24, 0x0b, 0xb7, 0x23, 0x59, 0xf8, 0x35, 0x92, 0x85, 0x9b, 0xb1, 0xbc, 0x75, 0x3b, 0x96, + 0xb7, 0x7e, 0x8e, 0xe5, 0xad, 0xb7, 0xcf, 0x2c, 0x9b, 0x77, 0x2e, 0xdb, 0x2a, 0xa2, 0x8e, 0xe6, + 0x0f, 0xb0, 0xcd, 0xce, 0xbb, 0xb0, 0xcd, 0xc2, 0x40, 0xeb, 0x57, 0x5e, 0x68, 0x57, 0xc9, 0x67, + 0x6e, 0xd0, 0xc3, 0xac, 0xbd, 0xe7, 0xbf, 0x47, 0x4f, 0x7f, 0x07, 0x00, 0x00, 0xff, 0xff, 0x1b, + 0xae, 0x98, 0x2c, 0x09, 0x07, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -596,7 +596,7 @@ func NewMsgClient(cc grpc1.ClientConn) MsgClient { func (c *msgClient) AddOracle(ctx context.Context, in *MsgAddOracle, opts ...grpc.CallOption) (*MsgAddOracleResponse, error) { out := new(MsgAddOracleResponse) - err := c.cc.Invoke(ctx, "/stride.icaoracle.Msg/AddOracle", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.icaoracle.Msg/AddOracle", in, out, opts...) if err != nil { return nil, err } @@ -605,7 +605,7 @@ func (c *msgClient) AddOracle(ctx context.Context, in *MsgAddOracle, opts ...grp func (c *msgClient) InstantiateOracle(ctx context.Context, in *MsgInstantiateOracle, opts ...grpc.CallOption) (*MsgInstantiateOracleResponse, error) { out := new(MsgInstantiateOracleResponse) - err := c.cc.Invoke(ctx, "/stride.icaoracle.Msg/InstantiateOracle", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.icaoracle.Msg/InstantiateOracle", in, out, opts...) if err != nil { return nil, err } @@ -614,7 +614,7 @@ func (c *msgClient) InstantiateOracle(ctx context.Context, in *MsgInstantiateOra func (c *msgClient) RestoreOracleICA(ctx context.Context, in *MsgRestoreOracleICA, opts ...grpc.CallOption) (*MsgRestoreOracleICAResponse, error) { out := new(MsgRestoreOracleICAResponse) - err := c.cc.Invoke(ctx, "/stride.icaoracle.Msg/RestoreOracleICA", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.icaoracle.Msg/RestoreOracleICA", in, out, opts...) if err != nil { return nil, err } @@ -623,7 +623,7 @@ func (c *msgClient) RestoreOracleICA(ctx context.Context, in *MsgRestoreOracleIC func (c *msgClient) ToggleOracle(ctx context.Context, in *MsgToggleOracle, opts ...grpc.CallOption) (*MsgToggleOracleResponse, error) { out := new(MsgToggleOracleResponse) - err := c.cc.Invoke(ctx, "/stride.icaoracle.Msg/ToggleOracle", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.icaoracle.Msg/ToggleOracle", in, out, opts...) if err != nil { return nil, err } @@ -632,7 +632,7 @@ func (c *msgClient) ToggleOracle(ctx context.Context, in *MsgToggleOracle, opts func (c *msgClient) RemoveOracle(ctx context.Context, in *MsgRemoveOracle, opts ...grpc.CallOption) (*MsgRemoveOracleResponse, error) { out := new(MsgRemoveOracleResponse) - err := c.cc.Invoke(ctx, "/stride.icaoracle.Msg/RemoveOracle", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.icaoracle.Msg/RemoveOracle", in, out, opts...) if err != nil { return nil, err } @@ -687,7 +687,7 @@ func _Msg_AddOracle_Handler(srv interface{}, ctx context.Context, dec func(inter } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.icaoracle.Msg/AddOracle", + FullMethod: "/symphony.icaoracle.Msg/AddOracle", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).AddOracle(ctx, req.(*MsgAddOracle)) @@ -705,7 +705,7 @@ func _Msg_InstantiateOracle_Handler(srv interface{}, ctx context.Context, dec fu } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.icaoracle.Msg/InstantiateOracle", + FullMethod: "/symphony.icaoracle.Msg/InstantiateOracle", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).InstantiateOracle(ctx, req.(*MsgInstantiateOracle)) @@ -723,7 +723,7 @@ func _Msg_RestoreOracleICA_Handler(srv interface{}, ctx context.Context, dec fun } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.icaoracle.Msg/RestoreOracleICA", + FullMethod: "/symphony.icaoracle.Msg/RestoreOracleICA", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).RestoreOracleICA(ctx, req.(*MsgRestoreOracleICA)) @@ -741,7 +741,7 @@ func _Msg_ToggleOracle_Handler(srv interface{}, ctx context.Context, dec func(in } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.icaoracle.Msg/ToggleOracle", + FullMethod: "/symphony.icaoracle.Msg/ToggleOracle", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).ToggleOracle(ctx, req.(*MsgToggleOracle)) @@ -759,7 +759,7 @@ func _Msg_RemoveOracle_Handler(srv interface{}, ctx context.Context, dec func(in } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.icaoracle.Msg/RemoveOracle", + FullMethod: "/symphony.icaoracle.Msg/RemoveOracle", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).RemoveOracle(ctx, req.(*MsgRemoveOracle)) @@ -768,7 +768,7 @@ func _Msg_RemoveOracle_Handler(srv interface{}, ctx context.Context, dec func(in } var _Msg_serviceDesc = grpc.ServiceDesc{ - ServiceName: "stride.icaoracle.Msg", + ServiceName: "symphony.icaoracle.Msg", HandlerType: (*MsgServer)(nil), Methods: []grpc.MethodDesc{ { @@ -793,7 +793,7 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "stride/icaoracle/tx.proto", + Metadata: "symphony/icaoracle/tx.proto", } func (m *MsgAddOracle) Marshal() (dAtA []byte, err error) { diff --git a/x/icqoracle/types/genesis.pb.go b/x/icqoracle/types/genesis.pb.go index 8e55fdcc537..b14d9b2eb5b 100644 --- a/x/icqoracle/types/genesis.pb.go +++ b/x/icqoracle/types/genesis.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/icqoracle/genesis.proto +// source: symphony/icqoracle/genesis.proto package types @@ -35,7 +35,7 @@ func (m *GenesisState) Reset() { *m = GenesisState{} } func (m *GenesisState) String() string { return proto.CompactTextString(m) } func (*GenesisState) ProtoMessage() {} func (*GenesisState) Descriptor() ([]byte, []int) { - return fileDescriptor_a0cfd8712dde4d4a, []int{0} + return fileDescriptor_99c416c3529660c9, []int{0} } func (m *GenesisState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -79,28 +79,29 @@ func (m *GenesisState) GetTokenPrices() []TokenPrice { } func init() { - proto.RegisterType((*GenesisState)(nil), "stride.icqoracle.GenesisState") + proto.RegisterType((*GenesisState)(nil), "symphony.icqoracle.GenesisState") } -func init() { proto.RegisterFile("stride/icqoracle/genesis.proto", fileDescriptor_a0cfd8712dde4d4a) } +func init() { proto.RegisterFile("symphony/icqoracle/genesis.proto", fileDescriptor_99c416c3529660c9) } -var fileDescriptor_a0cfd8712dde4d4a = []byte{ - // 240 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x2b, 0x2e, 0x29, 0xca, - 0x4c, 0x49, 0xd5, 0xcf, 0x4c, 0x2e, 0xcc, 0x2f, 0x4a, 0x4c, 0xce, 0x49, 0xd5, 0x4f, 0x4f, 0xcd, - 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x80, 0xc8, 0xeb, 0xc1, - 0xe5, 0xa5, 0x44, 0xd2, 0xf3, 0xd3, 0xf3, 0xc1, 0x92, 0xfa, 0x20, 0x16, 0x44, 0x9d, 0x94, 0x02, - 0x86, 0x39, 0x70, 0x16, 0x44, 0x85, 0x52, 0x2f, 0x23, 0x17, 0x8f, 0x3b, 0xc4, 0xec, 0xe0, 0x92, - 0xc4, 0x92, 0x54, 0x21, 0x33, 0x2e, 0xb6, 0x82, 0xc4, 0xa2, 0xc4, 0xdc, 0x62, 0x09, 0x46, 0x05, - 0x46, 0x0d, 0x6e, 0x23, 0x09, 0x3d, 0x74, 0xbb, 0xf4, 0x02, 0xc0, 0xf2, 0x4e, 0x2c, 0x27, 0xee, - 0xc9, 0x33, 0x04, 0x41, 0x55, 0x0b, 0xb9, 0x72, 0xf1, 0x94, 0xe4, 0x67, 0xa7, 0xe6, 0xc5, 0x17, - 0x14, 0x65, 0x26, 0xa7, 0x16, 0x4b, 0x30, 0x29, 0x30, 0x6b, 0x70, 0x1b, 0xc9, 0x60, 0xea, 0x0e, - 0x01, 0xa9, 0x0a, 0x00, 0x29, 0x82, 0x9a, 0xc0, 0x5d, 0x02, 0x17, 0x29, 0x76, 0xf2, 0x3d, 0xf1, - 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, 0xb8, - 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0xe3, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, 0x24, - 0xbd, 0xe4, 0xfc, 0x5c, 0xfd, 0x60, 0xb0, 0xa1, 0xba, 0x3e, 0x89, 0x49, 0xc5, 0xfa, 0x50, 0x2f, - 0x96, 0x19, 0x59, 0xe8, 0x57, 0x20, 0x79, 0xb4, 0xa4, 0xb2, 0x20, 0xb5, 0x38, 0x89, 0x0d, 0xec, - 0x4b, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0xee, 0xf7, 0x99, 0x59, 0x51, 0x01, 0x00, 0x00, +var fileDescriptor_99c416c3529660c9 = []byte{ + // 246 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x28, 0xae, 0xcc, 0x2d, + 0xc8, 0xc8, 0xcf, 0xab, 0xd4, 0xcf, 0x4c, 0x2e, 0xcc, 0x2f, 0x4a, 0x4c, 0xce, 0x49, 0xd5, 0x4f, + 0x4f, 0xcd, 0x4b, 0x2d, 0xce, 0x2c, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x82, 0xa9, + 0xd0, 0x83, 0xab, 0x90, 0x12, 0x49, 0xcf, 0x4f, 0xcf, 0x07, 0x4b, 0xeb, 0x83, 0x58, 0x10, 0x95, + 0x52, 0x4a, 0x58, 0xcc, 0x82, 0xb3, 0x20, 0x6a, 0x94, 0x26, 0x32, 0x72, 0xf1, 0xb8, 0x43, 0xcc, + 0x0f, 0x2e, 0x49, 0x2c, 0x49, 0x15, 0xb2, 0xe0, 0x62, 0x2b, 0x48, 0x2c, 0x4a, 0xcc, 0x2d, 0x96, + 0x60, 0x54, 0x60, 0xd4, 0xe0, 0x36, 0x92, 0xd2, 0xc3, 0xb4, 0x4f, 0x2f, 0x00, 0xac, 0xc2, 0x89, + 0xe5, 0xc4, 0x3d, 0x79, 0x86, 0x20, 0xa8, 0x7a, 0x21, 0x77, 0x2e, 0x9e, 0x92, 0xfc, 0xec, 0xd4, + 0xbc, 0xf8, 0x82, 0xa2, 0xcc, 0xe4, 0xd4, 0x62, 0x09, 0x26, 0x05, 0x66, 0x0d, 0x6e, 0x23, 0x39, + 0x6c, 0xfa, 0x43, 0x40, 0xea, 0x02, 0x40, 0xca, 0xa0, 0x66, 0x70, 0x97, 0xc0, 0x45, 0x8a, 0x9d, + 0xfc, 0x4f, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x09, 0x8f, + 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, 0xf1, 0x58, 0x8e, 0x21, 0xca, 0x34, 0x3d, 0xb3, 0x24, + 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, 0x3f, 0xbf, 0x38, 0x37, 0xbf, 0x38, 0xb3, 0x58, 0x37, + 0x27, 0x31, 0xa9, 0x18, 0xc6, 0xd1, 0x2f, 0x33, 0x32, 0xd7, 0xaf, 0x40, 0xf2, 0x6e, 0x49, 0x65, + 0x41, 0x6a, 0x71, 0x12, 0x1b, 0xd8, 0xaf, 0xc6, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0x90, 0xc1, + 0x73, 0x73, 0x5d, 0x01, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/x/icqoracle/types/icqoracle.pb.go b/x/icqoracle/types/icqoracle.pb.go index a6ed9f3c373..3b908d87aeb 100644 --- a/x/icqoracle/types/icqoracle.pb.go +++ b/x/icqoracle/types/icqoracle.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/icqoracle/icqoracle.proto +// source: symphony/icqoracle/icqoracle.proto package types @@ -54,7 +54,7 @@ func (m *TokenPrice) Reset() { *m = TokenPrice{} } func (m *TokenPrice) String() string { return proto.CompactTextString(m) } func (*TokenPrice) ProtoMessage() {} func (*TokenPrice) Descriptor() ([]byte, []int) { - return fileDescriptor_08ead8ab9516d7fc, []int{0} + return fileDescriptor_55e8df01f0023274, []int{0} } func (m *TokenPrice) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -156,7 +156,7 @@ func (m *Params) Reset() { *m = Params{} } func (m *Params) String() string { return proto.CompactTextString(m) } func (*Params) ProtoMessage() {} func (*Params) Descriptor() ([]byte, []int) { - return fileDescriptor_08ead8ab9516d7fc, []int{1} + return fileDescriptor_55e8df01f0023274, []int{1} } func (m *Params) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -214,53 +214,55 @@ func (m *Params) GetPriceExpirationTimeoutSec() uint64 { } func init() { - proto.RegisterType((*TokenPrice)(nil), "stride.icqoracle.TokenPrice") - proto.RegisterType((*Params)(nil), "stride.icqoracle.Params") + proto.RegisterType((*TokenPrice)(nil), "symphony.icqoracle.TokenPrice") + proto.RegisterType((*Params)(nil), "symphony.icqoracle.Params") } -func init() { proto.RegisterFile("stride/icqoracle/icqoracle.proto", fileDescriptor_08ead8ab9516d7fc) } +func init() { + proto.RegisterFile("symphony/icqoracle/icqoracle.proto", fileDescriptor_55e8df01f0023274) +} -var fileDescriptor_08ead8ab9516d7fc = []byte{ +var fileDescriptor_55e8df01f0023274 = []byte{ // 621 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0x41, 0x6f, 0xd3, 0x3e, - 0x18, 0xc6, 0x9b, 0xff, 0xfa, 0x1f, 0xab, 0x27, 0xd8, 0x9a, 0x81, 0x28, 0x65, 0xc4, 0x55, 0x26, - 0xa1, 0x0a, 0x41, 0x22, 0x6d, 0x42, 0x02, 0x8e, 0xd9, 0x10, 0xaa, 0x34, 0xa4, 0x92, 0xed, 0x02, - 0x97, 0xc8, 0x75, 0x4c, 0x66, 0x2d, 0x89, 0xd3, 0xd8, 0x99, 0xd6, 0x6f, 0xc0, 0x71, 0x1f, 0x8a, - 0xc3, 0x8e, 0x3b, 0x22, 0x0e, 0x01, 0x6d, 0x17, 0xd4, 0x63, 0x3f, 0x01, 0xb2, 0x9d, 0x94, 0x6a, - 0x4c, 0x93, 0xb8, 0xb9, 0xcf, 0xef, 0x79, 0x9f, 0xb7, 0x79, 0xfd, 0xca, 0xa0, 0xc7, 0x45, 0x4e, - 0x43, 0xe2, 0x52, 0x3c, 0x66, 0x39, 0xc2, 0xf1, 0xc2, 0xc9, 0xc9, 0x72, 0x26, 0x98, 0xb9, 0xae, - 0x1d, 0xce, 0x5c, 0xef, 0xde, 0x8f, 0x58, 0xc4, 0x14, 0x74, 0xe5, 0x49, 0xfb, 0xba, 0x30, 0x62, - 0x2c, 0x8a, 0x89, 0xab, 0x7e, 0x8d, 0x8a, 0xcf, 0xae, 0xa0, 0x09, 0xe1, 0x02, 0x25, 0x99, 0x36, - 0xd8, 0xbf, 0x96, 0x00, 0x38, 0x64, 0xc7, 0x24, 0x1d, 0xe6, 0x14, 0x13, 0xf3, 0x09, 0x00, 0x23, - 0xc4, 0x49, 0x10, 0x92, 0x94, 0x25, 0x1d, 0xa3, 0x67, 0xf4, 0x5b, 0x7e, 0x4b, 0x2a, 0x7b, 0x52, - 0x30, 0x21, 0x58, 0x1d, 0x17, 0x4c, 0xd4, 0xfc, 0x3f, 0xc5, 0x81, 0x92, 0xb4, 0xe1, 0x39, 0x30, - 0x19, 0x4f, 0x18, 0xa7, 0x3c, 0x58, 0xc8, 0x59, 0x52, 0xbe, 0xf5, 0x8a, 0x78, 0xf3, 0x38, 0x07, - 0x6c, 0xd4, 0xee, 0xc5, 0xd8, 0xa6, 0xb2, 0xb7, 0x2b, 0xf4, 0xe1, 0x4f, 0xfa, 0x53, 0xb0, 0x56, - 0xfb, 0x33, 0xc6, 0xe2, 0x80, 0x86, 0x9d, 0xff, 0x7b, 0x46, 0xbf, 0xe9, 0xdf, 0xad, 0xe4, 0x21, - 0x63, 0xf1, 0x20, 0x34, 0x3d, 0x00, 0x78, 0xc6, 0x44, 0x90, 0xc9, 0x6f, 0xea, 0x2c, 0xcb, 0x38, - 0x6f, 0xeb, 0xbc, 0x84, 0x8d, 0xef, 0x25, 0x7c, 0x8c, 0x95, 0x97, 0x87, 0xc7, 0x0e, 0x65, 0x6e, - 0x82, 0xc4, 0x91, 0xb3, 0x4f, 0x22, 0x84, 0x27, 0x7b, 0x04, 0xfb, 0x2d, 0x59, 0xa6, 0x27, 0x31, - 0x04, 0xed, 0x18, 0x71, 0x11, 0xe4, 0x64, 0x5c, 0x10, 0x2e, 0x02, 0x39, 0xb8, 0xce, 0x9d, 0x9e, - 0xd1, 0x5f, 0xdd, 0xee, 0x3a, 0x7a, 0xaa, 0x4e, 0x3d, 0x55, 0xe7, 0xb0, 0x9e, 0xaa, 0xb7, 0x22, - 0xdb, 0x9c, 0xfd, 0x80, 0x86, 0xbf, 0x26, 0xcb, 0x7d, 0x5d, 0x2d, 0xb9, 0xe9, 0x03, 0xb3, 0x4a, - 0xe4, 0x19, 0x4b, 0x39, 0xd1, 0x91, 0x2b, 0xff, 0x10, 0xb9, 0xae, 0x23, 0x75, 0xb9, 0xca, 0x7c, - 0x06, 0xda, 0xe3, 0x82, 0xe4, 0x93, 0x80, 0xa6, 0x41, 0x96, 0xb3, 0x28, 0x27, 0x9c, 0x77, 0x5a, - 0x3d, 0xa3, 0xbf, 0xe2, 0xaf, 0x29, 0x30, 0x48, 0x87, 0x95, 0x6c, 0x7f, 0x5d, 0x02, 0xcb, 0x43, - 0x94, 0xa3, 0x84, 0x9b, 0x1f, 0x41, 0x7d, 0x19, 0x01, 0x3e, 0x42, 0x34, 0x95, 0x93, 0x54, 0x97, - 0xed, 0xb9, 0xd3, 0x12, 0xfe, 0xc5, 0x66, 0x25, 0x7c, 0x38, 0x41, 0x49, 0xfc, 0xc6, 0xbe, 0x4e, - 0x6c, 0xff, 0x5e, 0x25, 0xed, 0x4a, 0x65, 0x10, 0x9a, 0x09, 0x78, 0x30, 0x37, 0xb1, 0x34, 0x25, - 0x58, 0x50, 0xa6, 0xf2, 0xd5, 0xb2, 0x78, 0xaf, 0xa7, 0x25, 0xbc, 0xd9, 0x30, 0x2b, 0xe1, 0xe6, - 0xb5, 0x26, 0x8b, 0xd8, 0xf6, 0xeb, 0x5d, 0xd9, 0x9d, 0xcb, 0x83, 0xd0, 0x24, 0x60, 0xa3, 0xc8, - 0x42, 0x24, 0x48, 0x40, 0x53, 0x41, 0xf2, 0x13, 0x14, 0x07, 0x9c, 0x60, 0xb5, 0x71, 0x4d, 0xef, - 0xe5, 0xb4, 0x84, 0x37, 0xe1, 0x59, 0x09, 0xbb, 0xba, 0xd5, 0x0d, 0xd0, 0xf6, 0xdb, 0x5a, 0x1d, - 0x54, 0xe2, 0x01, 0xc1, 0xe6, 0x17, 0x03, 0x6c, 0xaa, 0x6d, 0x0a, 0xc8, 0x69, 0x46, 0x73, 0xa4, - 0xfe, 0x94, 0xbc, 0x3f, 0x56, 0x08, 0xd5, 0xb0, 0xa9, 0x1a, 0xbe, 0x9b, 0x96, 0xf0, 0x56, 0xdf, - 0xac, 0x84, 0x5b, 0xba, 0xf3, 0x6d, 0x2e, 0xdb, 0x7f, 0xa4, 0xf0, 0xdb, 0x39, 0x3d, 0xd4, 0xf0, - 0x80, 0x60, 0xef, 0xfd, 0xf9, 0xa5, 0x65, 0x5c, 0x5c, 0x5a, 0xc6, 0xcf, 0x4b, 0xcb, 0x38, 0xbb, - 0xb2, 0x1a, 0x17, 0x57, 0x56, 0xe3, 0xdb, 0x95, 0xd5, 0xf8, 0xb4, 0x13, 0x51, 0x71, 0x54, 0x8c, - 0x1c, 0xcc, 0x12, 0xf7, 0x40, 0xbd, 0x0f, 0x2f, 0xf6, 0xd1, 0x88, 0xbb, 0xd5, 0x6b, 0x72, 0xb2, - 0xfd, 0xca, 0x3d, 0x5d, 0x78, 0x53, 0xc4, 0x24, 0x23, 0x7c, 0xb4, 0xac, 0x36, 0x6e, 0xe7, 0x77, - 0x00, 0x00, 0x00, 0xff, 0xff, 0xa7, 0xe2, 0x4c, 0x72, 0x74, 0x04, 0x00, 0x00, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0xc1, 0x6e, 0xd3, 0x4c, + 0x14, 0x85, 0xe3, 0xbf, 0xf9, 0x4b, 0x33, 0x15, 0xb4, 0x71, 0x41, 0x84, 0x50, 0x32, 0x91, 0x2b, + 0xa1, 0x08, 0x81, 0x2d, 0x15, 0x55, 0x08, 0x96, 0x6e, 0x11, 0x8a, 0x84, 0x44, 0x70, 0xbb, 0x81, + 0x8d, 0x35, 0xb1, 0x07, 0xc7, 0xaa, 0xed, 0xeb, 0x78, 0xc6, 0x55, 0xf3, 0x06, 0x2c, 0xfb, 0x50, + 0x2c, 0xba, 0xec, 0x12, 0xb1, 0x30, 0xa8, 0xdd, 0xa0, 0x2c, 0xf3, 0x04, 0x68, 0x66, 0xec, 0x34, + 0x2a, 0x51, 0x25, 0x76, 0x33, 0xe7, 0x3b, 0xf7, 0xdc, 0xe4, 0xce, 0x95, 0x91, 0xc1, 0x26, 0x71, + 0x3a, 0x82, 0x64, 0x62, 0x85, 0xde, 0x18, 0x32, 0xe2, 0x45, 0xf4, 0xfa, 0x64, 0xa6, 0x19, 0x70, + 0xd0, 0xf5, 0xca, 0x63, 0xce, 0x49, 0xfb, 0x7e, 0x00, 0x01, 0x48, 0x6c, 0x89, 0x93, 0x72, 0xb6, + 0x71, 0x00, 0x10, 0x44, 0xd4, 0x92, 0xb7, 0x61, 0xfe, 0xc5, 0xe2, 0x61, 0x4c, 0x19, 0x27, 0x71, + 0xaa, 0x0c, 0xc6, 0xef, 0x15, 0x84, 0x8e, 0xe0, 0x98, 0x26, 0x83, 0x2c, 0xf4, 0xa8, 0xfe, 0x04, + 0xa1, 0x21, 0x61, 0xd4, 0xf5, 0x69, 0x02, 0x71, 0x4b, 0xeb, 0x6a, 0xbd, 0x86, 0xd3, 0x10, 0xca, + 0x81, 0x10, 0x74, 0x8c, 0xd6, 0xc7, 0x39, 0xf0, 0x8a, 0xff, 0x27, 0x39, 0x92, 0x92, 0x32, 0x3c, + 0x47, 0x3a, 0xb0, 0x18, 0x58, 0xc8, 0xdc, 0x85, 0x9c, 0x15, 0xe9, 0xdb, 0x2c, 0x89, 0x3d, 0x8f, + 0x33, 0xd1, 0x56, 0xe5, 0x5e, 0x8c, 0xad, 0x4b, 0x7b, 0xb3, 0x44, 0x1f, 0xaf, 0xd3, 0x9f, 0xa2, + 0x8d, 0xca, 0x9f, 0x02, 0x44, 0x6e, 0xe8, 0xb7, 0xfe, 0xef, 0x6a, 0xbd, 0xba, 0x73, 0xb7, 0x94, + 0x07, 0x00, 0x51, 0xdf, 0xd7, 0x6d, 0x84, 0x58, 0x0a, 0xdc, 0x4d, 0xc5, 0x7f, 0x6a, 0xad, 0x8a, + 0x38, 0x7b, 0xe7, 0xbc, 0xc0, 0xb5, 0x1f, 0x05, 0x7e, 0xec, 0x49, 0x2f, 0xf3, 0x8f, 0xcd, 0x10, + 0xac, 0x98, 0xf0, 0x91, 0xf9, 0x9e, 0x06, 0xc4, 0x9b, 0x1c, 0x50, 0xcf, 0x69, 0x88, 0x32, 0x35, + 0x89, 0x01, 0x6a, 0x46, 0x84, 0x71, 0x37, 0xa3, 0xe3, 0x9c, 0x32, 0xee, 0x8a, 0xc1, 0xb5, 0xee, + 0x74, 0xb5, 0xde, 0xfa, 0x6e, 0xdb, 0x54, 0x53, 0x35, 0xab, 0xa9, 0x9a, 0x47, 0xd5, 0x54, 0xed, + 0x35, 0xd1, 0xe6, 0xec, 0x27, 0xd6, 0x9c, 0x0d, 0x51, 0xee, 0xa8, 0x6a, 0xc1, 0x75, 0x07, 0xe9, + 0x65, 0x22, 0x4b, 0x21, 0x61, 0x54, 0x45, 0xae, 0xfd, 0x43, 0xe4, 0xa6, 0x8a, 0x54, 0xe5, 0x32, + 0xf3, 0x19, 0x6a, 0x8e, 0x73, 0x9a, 0x4d, 0xdc, 0x30, 0x71, 0xd3, 0x0c, 0x82, 0x8c, 0x32, 0xd6, + 0x6a, 0x74, 0xb5, 0xde, 0x9a, 0xb3, 0x21, 0x41, 0x3f, 0x19, 0x94, 0xb2, 0xf1, 0x6d, 0x05, 0xad, + 0x0e, 0x48, 0x46, 0x62, 0xa6, 0x7f, 0x42, 0xd5, 0x63, 0xb8, 0xde, 0x88, 0x84, 0x89, 0x98, 0xa4, + 0x7c, 0x6c, 0xdb, 0x9a, 0x16, 0xf8, 0x2f, 0x36, 0x2b, 0xf0, 0xc3, 0x09, 0x89, 0xa3, 0x37, 0xc6, + 0x4d, 0x62, 0x38, 0xf7, 0x4a, 0x69, 0x5f, 0x28, 0x7d, 0x5f, 0x8f, 0xd1, 0x83, 0xb9, 0x09, 0x92, + 0x84, 0x7a, 0x3c, 0x04, 0x99, 0x2f, 0x97, 0xc5, 0x7e, 0x3d, 0x2d, 0xf0, 0x72, 0xc3, 0xac, 0xc0, + 0xdb, 0x37, 0x9a, 0x2c, 0x62, 0xc3, 0xa9, 0x76, 0x65, 0x7f, 0x2e, 0xf7, 0x7d, 0x9d, 0xa2, 0xad, + 0x3c, 0xf5, 0x09, 0xa7, 0x6e, 0x98, 0x70, 0x9a, 0x9d, 0x90, 0xc8, 0x65, 0xd4, 0x93, 0x1b, 0x57, + 0xb7, 0xf7, 0xa6, 0x05, 0x5e, 0x86, 0x67, 0x05, 0x6e, 0xab, 0x56, 0x4b, 0xa0, 0xe1, 0x34, 0x95, + 0xda, 0x2f, 0xc5, 0x43, 0xea, 0xe9, 0x5f, 0x35, 0xb4, 0x2d, 0xb7, 0xc9, 0xa5, 0xa7, 0x69, 0x98, + 0x11, 0xf9, 0xa3, 0xc4, 0xfb, 0x41, 0xce, 0x65, 0xc3, 0xba, 0x6c, 0xf8, 0x6e, 0x5a, 0xe0, 0x5b, + 0x7d, 0xb3, 0x02, 0xef, 0xa8, 0xce, 0xb7, 0xb9, 0x0c, 0xe7, 0x91, 0xc4, 0x6f, 0xe7, 0xf4, 0x48, + 0xc1, 0x43, 0xea, 0xd9, 0x1f, 0xce, 0x2f, 0x3b, 0xda, 0xc5, 0x65, 0x47, 0xfb, 0x75, 0xd9, 0xd1, + 0xce, 0xae, 0x3a, 0xb5, 0x8b, 0xab, 0x4e, 0xed, 0xfb, 0x55, 0xa7, 0xf6, 0x79, 0x2f, 0x08, 0xf9, + 0x28, 0x1f, 0x9a, 0x1e, 0xc4, 0x56, 0x39, 0xab, 0x17, 0x11, 0x19, 0xb2, 0xea, 0x62, 0x9d, 0xec, + 0xbe, 0xb2, 0x4e, 0x17, 0xbe, 0x2b, 0x7c, 0x92, 0x52, 0x36, 0x5c, 0x95, 0x3b, 0xf7, 0xf2, 0x4f, + 0x00, 0x00, 0x00, 0xff, 0xff, 0x5e, 0xd6, 0x96, 0x93, 0x7a, 0x04, 0x00, 0x00, } func (m *TokenPrice) Marshal() (dAtA []byte, err error) { diff --git a/x/icqoracle/types/query.pb.go b/x/icqoracle/types/query.pb.go index 3cc722e1d44..bde73f665cc 100644 --- a/x/icqoracle/types/query.pb.go +++ b/x/icqoracle/types/query.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/icqoracle/query.proto +// source: symphony/icqoracle/query.proto package types @@ -43,7 +43,7 @@ func (m *QueryTokenPriceRequest) Reset() { *m = QueryTokenPriceRequest{} func (m *QueryTokenPriceRequest) String() string { return proto.CompactTextString(m) } func (*QueryTokenPriceRequest) ProtoMessage() {} func (*QueryTokenPriceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_51a2bacbcf1e1cb4, []int{0} + return fileDescriptor_6b3f4df683141a8b, []int{0} } func (m *QueryTokenPriceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -103,7 +103,7 @@ func (m *QueryTokenPricesRequest) Reset() { *m = QueryTokenPricesRequest func (m *QueryTokenPricesRequest) String() string { return proto.CompactTextString(m) } func (*QueryTokenPricesRequest) ProtoMessage() {} func (*QueryTokenPricesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_51a2bacbcf1e1cb4, []int{1} + return fileDescriptor_6b3f4df683141a8b, []int{1} } func (m *QueryTokenPricesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -153,7 +153,7 @@ func (m *TokenPriceResponse) Reset() { *m = TokenPriceResponse{} } func (m *TokenPriceResponse) String() string { return proto.CompactTextString(m) } func (*TokenPriceResponse) ProtoMessage() {} func (*TokenPriceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_51a2bacbcf1e1cb4, []int{2} + return fileDescriptor_6b3f4df683141a8b, []int{2} } func (m *TokenPriceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -214,7 +214,7 @@ func (m *QueryTokenPricesResponse) Reset() { *m = QueryTokenPricesRespon func (m *QueryTokenPricesResponse) String() string { return proto.CompactTextString(m) } func (*QueryTokenPricesResponse) ProtoMessage() {} func (*QueryTokenPricesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_51a2bacbcf1e1cb4, []int{3} + return fileDescriptor_6b3f4df683141a8b, []int{3} } func (m *QueryTokenPricesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -265,7 +265,7 @@ func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } func (*QueryParamsRequest) ProtoMessage() {} func (*QueryParamsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_51a2bacbcf1e1cb4, []int{4} + return fileDescriptor_6b3f4df683141a8b, []int{4} } func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -303,7 +303,7 @@ func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } func (*QueryParamsResponse) ProtoMessage() {} func (*QueryParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_51a2bacbcf1e1cb4, []int{5} + return fileDescriptor_6b3f4df683141a8b, []int{5} } func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -350,7 +350,7 @@ func (m *QueryTokenPriceForQuoteDenomRequest) Reset() { *m = QueryTokenP func (m *QueryTokenPriceForQuoteDenomRequest) String() string { return proto.CompactTextString(m) } func (*QueryTokenPriceForQuoteDenomRequest) ProtoMessage() {} func (*QueryTokenPriceForQuoteDenomRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_51a2bacbcf1e1cb4, []int{6} + return fileDescriptor_6b3f4df683141a8b, []int{6} } func (m *QueryTokenPriceForQuoteDenomRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -403,7 +403,7 @@ func (m *QueryTokenPriceForQuoteDenomResponse) Reset() { *m = QueryToken func (m *QueryTokenPriceForQuoteDenomResponse) String() string { return proto.CompactTextString(m) } func (*QueryTokenPriceForQuoteDenomResponse) ProtoMessage() {} func (*QueryTokenPriceForQuoteDenomResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_51a2bacbcf1e1cb4, []int{7} + return fileDescriptor_6b3f4df683141a8b, []int{7} } func (m *QueryTokenPriceForQuoteDenomResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -433,62 +433,63 @@ func (m *QueryTokenPriceForQuoteDenomResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryTokenPriceForQuoteDenomResponse proto.InternalMessageInfo func init() { - proto.RegisterType((*QueryTokenPriceRequest)(nil), "stride.icqoracle.QueryTokenPriceRequest") - proto.RegisterType((*QueryTokenPricesRequest)(nil), "stride.icqoracle.QueryTokenPricesRequest") - proto.RegisterType((*TokenPriceResponse)(nil), "stride.icqoracle.TokenPriceResponse") - proto.RegisterType((*QueryTokenPricesResponse)(nil), "stride.icqoracle.QueryTokenPricesResponse") - proto.RegisterType((*QueryParamsRequest)(nil), "stride.icqoracle.QueryParamsRequest") - proto.RegisterType((*QueryParamsResponse)(nil), "stride.icqoracle.QueryParamsResponse") - proto.RegisterType((*QueryTokenPriceForQuoteDenomRequest)(nil), "stride.icqoracle.QueryTokenPriceForQuoteDenomRequest") - proto.RegisterType((*QueryTokenPriceForQuoteDenomResponse)(nil), "stride.icqoracle.QueryTokenPriceForQuoteDenomResponse") -} - -func init() { proto.RegisterFile("stride/icqoracle/query.proto", fileDescriptor_51a2bacbcf1e1cb4) } - -var fileDescriptor_51a2bacbcf1e1cb4 = []byte{ - // 671 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0xcd, 0x4f, 0x13, 0x41, - 0x14, 0xef, 0xf2, 0x51, 0xc3, 0x5b, 0x0f, 0x66, 0x40, 0x5b, 0x57, 0x68, 0x9b, 0x05, 0xb4, 0x92, - 0xb8, 0x23, 0x25, 0x12, 0xbd, 0x22, 0xc1, 0x98, 0x40, 0x02, 0x55, 0x2f, 0x5e, 0x9a, 0xe9, 0x76, - 0xb2, 0x6c, 0xa0, 0x3b, 0xdb, 0x9d, 0x29, 0xc8, 0xc1, 0x8b, 0x07, 0xcf, 0x26, 0xfe, 0x21, 0x26, - 0x1e, 0xbd, 0x78, 0xe5, 0x48, 0xe2, 0xc5, 0x78, 0x20, 0x06, 0xfc, 0x43, 0xcc, 0xce, 0xcc, 0x76, - 0xb7, 0x14, 0x68, 0x4d, 0xbc, 0x0d, 0xef, 0xeb, 0xf7, 0xf1, 0x1e, 0x5d, 0x98, 0xe5, 0x22, 0xf2, - 0x5b, 0x14, 0xfb, 0x6e, 0x87, 0x45, 0xc4, 0xdd, 0xa7, 0xb8, 0xd3, 0xa5, 0xd1, 0x91, 0x13, 0x46, - 0x4c, 0x30, 0x74, 0x4b, 0x65, 0x9d, 0x5e, 0xd6, 0x5a, 0x72, 0x19, 0x6f, 0x33, 0x8e, 0x9b, 0x84, - 0xeb, 0x52, 0x7c, 0xb0, 0xdc, 0xa4, 0x82, 0x2c, 0xe3, 0x90, 0x78, 0x7e, 0x40, 0x84, 0xcf, 0x02, - 0xd5, 0x6d, 0xcd, 0x78, 0xcc, 0x63, 0xf2, 0x89, 0xe3, 0x97, 0x8e, 0xce, 0x7a, 0x8c, 0x79, 0xfb, - 0x14, 0x93, 0xd0, 0xc7, 0x24, 0x08, 0x98, 0x90, 0x2d, 0x5c, 0x67, 0x2b, 0x03, 0x7c, 0x7a, 0x2f, - 0x55, 0x61, 0x77, 0xe0, 0xce, 0x4e, 0x8c, 0xfb, 0x9a, 0xed, 0xd1, 0x60, 0x3b, 0xf2, 0x5d, 0x5a, - 0xa7, 0x9d, 0x2e, 0xe5, 0x02, 0xcd, 0x01, 0xc4, 0xb4, 0x1a, 0x2d, 0x1a, 0xb0, 0x76, 0xd1, 0xa8, - 0x18, 0xd5, 0xa9, 0xfa, 0x54, 0x1c, 0x59, 0x8f, 0x03, 0xa8, 0x0c, 0x66, 0xa7, 0xcb, 0x44, 0x92, - 0x1f, 0x93, 0x79, 0x90, 0x21, 0x55, 0x50, 0x80, 0x1b, 0x21, 0x63, 0xfb, 0x0d, 0xbf, 0x55, 0x1c, - 0xaf, 0x18, 0xd5, 0x89, 0x7a, 0x3e, 0xfe, 0xf3, 0x65, 0xcb, 0x26, 0x50, 0xb8, 0x00, 0xc9, 0x13, - 0xcc, 0x0d, 0x80, 0x54, 0xb7, 0xc4, 0x34, 0x6b, 0xf7, 0x1d, 0x65, 0x92, 0x13, 0x63, 0x3b, 0xca, - 0x4f, 0x6d, 0x92, 0xb3, 0x4d, 0xbc, 0x84, 0x6f, 0x3d, 0xd3, 0x69, 0x7f, 0x37, 0x00, 0x65, 0x15, - 0xf1, 0x90, 0x05, 0x9c, 0xa2, 0xc7, 0x30, 0x93, 0x4a, 0x6a, 0x74, 0x83, 0xc3, 0x88, 0x84, 0x21, - 0x6d, 0x69, 0x71, 0xa8, 0x27, 0xee, 0x4d, 0x92, 0x41, 0x35, 0xb8, 0x9d, 0x51, 0x99, 0x69, 0x51, - 0x7a, 0xa7, 0x53, 0xbd, 0x69, 0xcf, 0x73, 0x30, 0x45, 0x8c, 0xdd, 0x08, 0x63, 0x70, 0x29, 0xde, - 0xac, 0xcd, 0x3a, 0x17, 0x97, 0xef, 0xa4, 0x04, 0xd7, 0x26, 0x8e, 0x4f, 0xcb, 0xb9, 0x3a, 0x88, - 0x5e, 0xc4, 0xfe, 0x6a, 0x40, 0x71, 0xd0, 0x25, 0xad, 0x63, 0x0b, 0x6e, 0x66, 0x10, 0x78, 0xd1, - 0xa8, 0x8c, 0x57, 0xcd, 0xda, 0xc2, 0x75, 0x10, 0x49, 0xaf, 0x86, 0x32, 0x53, 0x28, 0x8e, 0x5e, - 0xf4, 0xb9, 0x3e, 0x26, 0xf9, 0x3e, 0x18, 0xea, 0xba, 0x9a, 0xd7, 0x67, 0xfb, 0x0c, 0x20, 0xc9, - 0x79, 0x9b, 0x44, 0xa4, 0x9d, 0x2c, 0xd5, 0xde, 0x82, 0xe9, 0xbe, 0xa8, 0x16, 0xb1, 0x0a, 0xf9, - 0x50, 0x46, 0xf4, 0x9e, 0x8b, 0x83, 0xf4, 0x55, 0x87, 0xa6, 0xac, 0xab, 0x6d, 0x0a, 0xf3, 0x17, - 0x8c, 0xd9, 0x60, 0xd1, 0x4e, 0x6f, 0x0f, 0xff, 0xe9, 0x7c, 0x6d, 0x02, 0x0b, 0xd7, 0xc3, 0x68, - 0x19, 0xcf, 0x60, 0x52, 0xed, 0x59, 0x42, 0xac, 0xcd, 0xc7, 0x5c, 0x7f, 0x9d, 0x96, 0xef, 0x29, - 0xfb, 0x78, 0x6b, 0xcf, 0xf1, 0x19, 0x6e, 0x13, 0xb1, 0xeb, 0x6c, 0x52, 0x8f, 0xb8, 0x47, 0xeb, - 0xd4, 0xad, 0xab, 0x8e, 0xda, 0xb7, 0x09, 0x98, 0x94, 0x18, 0xe8, 0x3d, 0x40, 0x8a, 0x83, 0xaa, - 0x83, 0x4e, 0x5c, 0xfe, 0x3f, 0x6a, 0x8d, 0xb4, 0x72, 0xbb, 0xfc, 0xe1, 0xc7, 0x9f, 0xcf, 0x63, - 0x77, 0x51, 0x01, 0x0f, 0xfc, 0x1c, 0x48, 0x22, 0xe8, 0xa3, 0x01, 0x66, 0xe6, 0xce, 0xd0, 0xc3, - 0xa1, 0x04, 0x92, 0xe5, 0x5a, 0x4b, 0xa3, 0x94, 0x6a, 0x1e, 0x15, 0xc9, 0xc3, 0x42, 0xc5, 0x2b, - 0x78, 0x70, 0x74, 0x08, 0x79, 0xb5, 0x73, 0xb4, 0x70, 0xc5, 0xdc, 0xbe, 0xd3, 0xb2, 0x16, 0x87, - 0x54, 0x8d, 0x00, 0xac, 0xe0, 0xbe, 0x18, 0x50, 0xb8, 0x62, 0xd3, 0xe8, 0xc9, 0x50, 0x89, 0x97, - 0x1d, 0xa0, 0xb5, 0xfa, 0xaf, 0x6d, 0x9a, 0xec, 0xa2, 0x24, 0x5b, 0x46, 0x73, 0xf8, 0x92, 0x8f, - 0x49, 0x7c, 0xb1, 0xd2, 0xab, 0xb5, 0xad, 0xe3, 0xb3, 0x92, 0x71, 0x72, 0x56, 0x32, 0x7e, 0x9f, - 0x95, 0x8c, 0x4f, 0xe7, 0xa5, 0xdc, 0xc9, 0x79, 0x29, 0xf7, 0xf3, 0xbc, 0x94, 0x7b, 0xbb, 0xe2, - 0xf9, 0x62, 0xb7, 0xdb, 0x74, 0x5c, 0xd6, 0xc6, 0xaf, 0xe4, 0x88, 0x47, 0x9b, 0xa4, 0xc9, 0x93, - 0x71, 0x07, 0xb5, 0xa7, 0xf8, 0x5d, 0x66, 0xa8, 0x38, 0x0a, 0x29, 0x6f, 0xe6, 0xe5, 0xe7, 0x60, - 0xe5, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xef, 0x20, 0x57, 0x46, 0xc2, 0x06, 0x00, 0x00, + proto.RegisterType((*QueryTokenPriceRequest)(nil), "symphony.icqoracle.QueryTokenPriceRequest") + proto.RegisterType((*QueryTokenPricesRequest)(nil), "symphony.icqoracle.QueryTokenPricesRequest") + proto.RegisterType((*TokenPriceResponse)(nil), "symphony.icqoracle.TokenPriceResponse") + proto.RegisterType((*QueryTokenPricesResponse)(nil), "symphony.icqoracle.QueryTokenPricesResponse") + proto.RegisterType((*QueryParamsRequest)(nil), "symphony.icqoracle.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "symphony.icqoracle.QueryParamsResponse") + proto.RegisterType((*QueryTokenPriceForQuoteDenomRequest)(nil), "symphony.icqoracle.QueryTokenPriceForQuoteDenomRequest") + proto.RegisterType((*QueryTokenPriceForQuoteDenomResponse)(nil), "symphony.icqoracle.QueryTokenPriceForQuoteDenomResponse") +} + +func init() { proto.RegisterFile("symphony/icqoracle/query.proto", fileDescriptor_6b3f4df683141a8b) } + +var fileDescriptor_6b3f4df683141a8b = []byte{ + // 676 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x55, 0x4d, 0x4f, 0x13, 0x4f, + 0x18, 0xef, 0xf0, 0xd2, 0x7f, 0x78, 0xfa, 0x3f, 0x0d, 0x28, 0xcd, 0xaa, 0x0b, 0x2e, 0x84, 0x37, + 0x75, 0x47, 0x6a, 0x0c, 0x78, 0x25, 0x88, 0x31, 0x31, 0x01, 0x1a, 0xbd, 0x78, 0x69, 0xa6, 0xdb, + 0xc9, 0xb2, 0xa1, 0xdd, 0xd9, 0xee, 0x6c, 0xd1, 0x5e, 0x4d, 0x3c, 0x79, 0x31, 0xd1, 0x8f, 0xe2, + 0xd5, 0x83, 0x37, 0x8e, 0x24, 0x5e, 0x8c, 0x07, 0x62, 0xc0, 0x8f, 0xe0, 0x07, 0x30, 0x3b, 0x33, + 0xfb, 0x52, 0x58, 0xa0, 0x24, 0xde, 0x66, 0x9f, 0x97, 0xf9, 0xbd, 0x3c, 0x4f, 0xa7, 0x60, 0x8a, + 0x7e, 0x27, 0xd8, 0xe3, 0x7e, 0x9f, 0x78, 0x4e, 0x97, 0x87, 0xd4, 0x69, 0x33, 0xd2, 0xed, 0xb1, + 0xb0, 0x6f, 0x07, 0x21, 0x8f, 0x38, 0xc6, 0x49, 0xde, 0x4e, 0xf3, 0xc6, 0x8a, 0xc3, 0x45, 0x87, + 0x0b, 0xd2, 0xa4, 0x42, 0x17, 0x93, 0x83, 0xd5, 0x26, 0x8b, 0xe8, 0x2a, 0x09, 0xa8, 0xeb, 0xf9, + 0x34, 0xf2, 0xb8, 0xaf, 0xfa, 0x8d, 0x29, 0x97, 0xbb, 0x5c, 0x1e, 0x49, 0x7c, 0xd2, 0xd1, 0xdb, + 0x2e, 0xe7, 0x6e, 0x9b, 0x11, 0x1a, 0x78, 0x84, 0xfa, 0x3e, 0x8f, 0x64, 0x8b, 0xd0, 0x59, 0xab, + 0x80, 0x53, 0x7a, 0x52, 0x35, 0x56, 0x17, 0x6e, 0xee, 0xc6, 0xc8, 0x2f, 0xf9, 0x3e, 0xf3, 0x77, + 0x42, 0xcf, 0x61, 0x75, 0xd6, 0xed, 0x31, 0x11, 0xe1, 0x3b, 0x00, 0x31, 0xb1, 0x46, 0x8b, 0xf9, + 0xbc, 0x53, 0x45, 0xb3, 0x68, 0x69, 0xa2, 0x3e, 0x11, 0x47, 0x36, 0xe3, 0x00, 0x9e, 0x81, 0x4a, + 0xb7, 0xc7, 0xa3, 0x24, 0x3f, 0x22, 0xf3, 0x20, 0x43, 0xaa, 0x60, 0x1a, 0xfe, 0x0b, 0x38, 0x6f, + 0x37, 0xbc, 0x56, 0x75, 0x74, 0x16, 0x2d, 0x8d, 0xd5, 0xcb, 0xf1, 0xe7, 0xf3, 0x96, 0x45, 0x61, + 0xfa, 0x0c, 0xa4, 0x48, 0x30, 0xb7, 0x00, 0x32, 0xe5, 0x12, 0xb3, 0x52, 0x5b, 0xb0, 0x95, 0x4d, + 0x76, 0x8c, 0x6d, 0x2b, 0x4f, 0xb5, 0x4d, 0xf6, 0x0e, 0x75, 0x13, 0xbe, 0xf5, 0x5c, 0xa7, 0xf5, + 0x0d, 0x01, 0xce, 0x2b, 0x12, 0x01, 0xf7, 0x05, 0xc3, 0x0f, 0x61, 0x2a, 0x93, 0xd4, 0xe8, 0xf9, + 0x6f, 0x42, 0x1a, 0x04, 0xac, 0xa5, 0xc5, 0xe1, 0x54, 0xdc, 0xab, 0x24, 0x83, 0x6b, 0x70, 0x23, + 0xa7, 0x32, 0xd7, 0xa2, 0xf4, 0x4e, 0x66, 0x7a, 0xb3, 0x9e, 0xa7, 0x50, 0x89, 0x62, 0xec, 0x46, + 0x10, 0x83, 0x4b, 0xf1, 0x95, 0x9a, 0x69, 0x9f, 0x5f, 0x00, 0x3b, 0xa3, 0xb8, 0x31, 0x76, 0x78, + 0x3c, 0x53, 0xaa, 0x43, 0x94, 0x46, 0xac, 0x2f, 0x08, 0xaa, 0xe7, 0x7d, 0xd2, 0x4a, 0xb6, 0xe1, + 0xff, 0x1c, 0x86, 0xa8, 0xa2, 0xd9, 0x51, 0x69, 0xd5, 0xa5, 0x20, 0x49, 0xb7, 0x06, 0xab, 0x64, + 0x60, 0x02, 0x3f, 0x1b, 0x70, 0x7e, 0x44, 0x72, 0x5e, 0xbc, 0xd2, 0x79, 0x75, 0xdf, 0x80, 0xf5, + 0x53, 0x80, 0x25, 0xeb, 0x1d, 0x1a, 0xd2, 0x4e, 0x32, 0x58, 0x6b, 0x1b, 0x26, 0x07, 0xa2, 0x5a, + 0xc6, 0x3a, 0x94, 0x03, 0x19, 0xd1, 0xb3, 0x36, 0x8a, 0x04, 0xa8, 0x1e, 0x4d, 0x5a, 0xd7, 0x5b, + 0x0c, 0xe6, 0xce, 0x98, 0xb3, 0xc5, 0xc3, 0xdd, 0x74, 0x1a, 0xff, 0x68, 0x89, 0x2d, 0x0a, 0xf3, + 0x97, 0xc3, 0x68, 0x21, 0x4f, 0x60, 0x5c, 0x4d, 0x5b, 0x42, 0x6c, 0xcc, 0xc5, 0x5c, 0x7f, 0x1e, + 0xcf, 0xdc, 0x52, 0x06, 0x8a, 0xd6, 0xbe, 0xed, 0x71, 0xd2, 0xa1, 0xd1, 0x9e, 0xfd, 0x82, 0xb9, + 0xd4, 0xe9, 0x6f, 0x32, 0xa7, 0xae, 0x3a, 0x6a, 0x7f, 0xc6, 0x60, 0x5c, 0x62, 0xe0, 0x0f, 0x08, + 0x20, 0x03, 0xc2, 0x2b, 0x45, 0x66, 0x14, 0xff, 0x58, 0x8d, 0x21, 0x27, 0x6f, 0x2d, 0xbf, 0xfb, + 0xfe, 0xfb, 0xd3, 0xc8, 0x1c, 0xbe, 0x4b, 0x0a, 0xde, 0x86, 0xf4, 0xf1, 0x91, 0xf0, 0x9f, 0x11, + 0x54, 0x72, 0xab, 0x87, 0xef, 0x0d, 0x41, 0x27, 0x99, 0xb7, 0x71, 0x7f, 0xb8, 0x62, 0xcd, 0x6a, + 0x45, 0xb2, 0x9a, 0xc7, 0xd6, 0x95, 0xac, 0x04, 0x7e, 0x8f, 0xa0, 0xac, 0x36, 0x02, 0x2f, 0x5c, + 0x08, 0x32, 0xb0, 0x7c, 0xc6, 0xe2, 0x95, 0x75, 0xd7, 0xe2, 0xa1, 0xc0, 0xbf, 0x22, 0x98, 0xbe, + 0x60, 0x2b, 0xf0, 0xda, 0x10, 0xea, 0x8b, 0xd6, 0xd5, 0x58, 0xbf, 0x7e, 0xa3, 0xa6, 0x4e, 0x24, + 0xf5, 0x65, 0xbc, 0x78, 0x19, 0x75, 0xb5, 0xeb, 0xd2, 0xc8, 0x8d, 0xed, 0xc3, 0x13, 0x13, 0x1d, + 0x9d, 0x98, 0xe8, 0xd7, 0x89, 0x89, 0x3e, 0x9e, 0x9a, 0xa5, 0xa3, 0x53, 0xb3, 0xf4, 0xe3, 0xd4, + 0x2c, 0xbd, 0x7e, 0xec, 0x7a, 0xd1, 0x5e, 0xaf, 0x69, 0x3b, 0xbc, 0x43, 0xe4, 0xfa, 0x7a, 0xe2, + 0x41, 0x9b, 0x36, 0x45, 0xf2, 0x41, 0x0e, 0x6a, 0x6b, 0xe4, 0x6d, 0xee, 0xfa, 0xa8, 0x1f, 0x30, + 0xd1, 0x2c, 0xcb, 0x3f, 0x94, 0x47, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x84, 0xa6, 0x80, 0x7c, + 0x0a, 0x07, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -523,7 +524,7 @@ func NewQueryClient(cc grpc1.ClientConn) QueryClient { func (c *queryClient) TokenPrice(ctx context.Context, in *QueryTokenPriceRequest, opts ...grpc.CallOption) (*TokenPriceResponse, error) { out := new(TokenPriceResponse) - err := c.cc.Invoke(ctx, "/stride.icqoracle.Query/TokenPrice", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.icqoracle.Query/TokenPrice", in, out, opts...) if err != nil { return nil, err } @@ -532,7 +533,7 @@ func (c *queryClient) TokenPrice(ctx context.Context, in *QueryTokenPriceRequest func (c *queryClient) TokenPrices(ctx context.Context, in *QueryTokenPricesRequest, opts ...grpc.CallOption) (*QueryTokenPricesResponse, error) { out := new(QueryTokenPricesResponse) - err := c.cc.Invoke(ctx, "/stride.icqoracle.Query/TokenPrices", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.icqoracle.Query/TokenPrices", in, out, opts...) if err != nil { return nil, err } @@ -541,7 +542,7 @@ func (c *queryClient) TokenPrices(ctx context.Context, in *QueryTokenPricesReque func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { out := new(QueryParamsResponse) - err := c.cc.Invoke(ctx, "/stride.icqoracle.Query/Params", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.icqoracle.Query/Params", in, out, opts...) if err != nil { return nil, err } @@ -550,7 +551,7 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts . func (c *queryClient) TokenPriceForQuoteDenom(ctx context.Context, in *QueryTokenPriceForQuoteDenomRequest, opts ...grpc.CallOption) (*QueryTokenPriceForQuoteDenomResponse, error) { out := new(QueryTokenPriceForQuoteDenomResponse) - err := c.cc.Invoke(ctx, "/stride.icqoracle.Query/TokenPriceForQuoteDenom", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.icqoracle.Query/TokenPriceForQuoteDenom", in, out, opts...) if err != nil { return nil, err } @@ -600,7 +601,7 @@ func _Query_TokenPrice_Handler(srv interface{}, ctx context.Context, dec func(in } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.icqoracle.Query/TokenPrice", + FullMethod: "/symphony.icqoracle.Query/TokenPrice", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).TokenPrice(ctx, req.(*QueryTokenPriceRequest)) @@ -618,7 +619,7 @@ func _Query_TokenPrices_Handler(srv interface{}, ctx context.Context, dec func(i } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.icqoracle.Query/TokenPrices", + FullMethod: "/symphony.icqoracle.Query/TokenPrices", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).TokenPrices(ctx, req.(*QueryTokenPricesRequest)) @@ -636,7 +637,7 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.icqoracle.Query/Params", + FullMethod: "/symphony.icqoracle.Query/Params", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) @@ -654,7 +655,7 @@ func _Query_TokenPriceForQuoteDenom_Handler(srv interface{}, ctx context.Context } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.icqoracle.Query/TokenPriceForQuoteDenom", + FullMethod: "/symphony.icqoracle.Query/TokenPriceForQuoteDenom", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).TokenPriceForQuoteDenom(ctx, req.(*QueryTokenPriceForQuoteDenomRequest)) @@ -663,7 +664,7 @@ func _Query_TokenPriceForQuoteDenom_Handler(srv interface{}, ctx context.Context } var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "stride.icqoracle.Query", + ServiceName: "symphony.icqoracle.Query", HandlerType: (*QueryServer)(nil), Methods: []grpc.MethodDesc{ { @@ -684,7 +685,7 @@ var _Query_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "stride/icqoracle/query.proto", + Metadata: "symphony/icqoracle/query.proto", } func (m *QueryTokenPriceRequest) Marshal() (dAtA []byte, err error) { diff --git a/x/icqoracle/types/query.pb.gw.go b/x/icqoracle/types/query.pb.gw.go index 26446a8d16f..a389bd6232b 100644 --- a/x/icqoracle/types/query.pb.gw.go +++ b/x/icqoracle/types/query.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: stride/icqoracle/query.proto +// source: symphony/icqoracle/query.proto /* Package types is a reverse proxy. @@ -382,13 +382,13 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } var ( - pattern_Query_TokenPrice_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"stride", "icqoracle", "price"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_TokenPrice_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"symphony", "icqoracle", "v1beta1", "price"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_TokenPrices_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"stride", "icqoracle", "prices"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_TokenPrices_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"symphony", "icqoracle", "v1beta1", "prices"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"stride", "icqoracle", "params"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"symphony", "icqoracle", "v1beta1", "params"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_TokenPriceForQuoteDenom_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"stride", "icqoracle", "quote_price"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_TokenPriceForQuoteDenom_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"symphony", "icqoracle", "v1beta1", "quote_price"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( diff --git a/x/icqoracle/types/tx.pb.go b/x/icqoracle/types/tx.pb.go index 6eda5ad9cad..83594fc491b 100644 --- a/x/icqoracle/types/tx.pb.go +++ b/x/icqoracle/types/tx.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/icqoracle/tx.proto +// source: symphony/icqoracle/tx.proto package types @@ -51,7 +51,7 @@ func (m *MsgRegisterTokenPriceQuery) Reset() { *m = MsgRegisterTokenPric func (m *MsgRegisterTokenPriceQuery) String() string { return proto.CompactTextString(m) } func (*MsgRegisterTokenPriceQuery) ProtoMessage() {} func (*MsgRegisterTokenPriceQuery) Descriptor() ([]byte, []int) { - return fileDescriptor_be640eb75c1babd5, []int{0} + return fileDescriptor_e5d64df02fac2707, []int{0} } func (m *MsgRegisterTokenPriceQuery) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -129,7 +129,7 @@ func (m *MsgRegisterTokenPriceQueryResponse) Reset() { *m = MsgRegisterT func (m *MsgRegisterTokenPriceQueryResponse) String() string { return proto.CompactTextString(m) } func (*MsgRegisterTokenPriceQueryResponse) ProtoMessage() {} func (*MsgRegisterTokenPriceQueryResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_be640eb75c1babd5, []int{1} + return fileDescriptor_e5d64df02fac2707, []int{1} } func (m *MsgRegisterTokenPriceQueryResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -174,7 +174,7 @@ func (m *MsgRemoveTokenPriceQuery) Reset() { *m = MsgRemoveTokenPriceQue func (m *MsgRemoveTokenPriceQuery) String() string { return proto.CompactTextString(m) } func (*MsgRemoveTokenPriceQuery) ProtoMessage() {} func (*MsgRemoveTokenPriceQuery) Descriptor() ([]byte, []int) { - return fileDescriptor_be640eb75c1babd5, []int{2} + return fileDescriptor_e5d64df02fac2707, []int{2} } func (m *MsgRemoveTokenPriceQuery) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -238,7 +238,7 @@ func (m *MsgRemoveTokenPriceQueryResponse) Reset() { *m = MsgRemoveToken func (m *MsgRemoveTokenPriceQueryResponse) String() string { return proto.CompactTextString(m) } func (*MsgRemoveTokenPriceQueryResponse) ProtoMessage() {} func (*MsgRemoveTokenPriceQueryResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_be640eb75c1babd5, []int{3} + return fileDescriptor_e5d64df02fac2707, []int{3} } func (m *MsgRemoveTokenPriceQueryResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -282,7 +282,7 @@ func (m *MsgUpdateParams) Reset() { *m = MsgUpdateParams{} } func (m *MsgUpdateParams) String() string { return proto.CompactTextString(m) } func (*MsgUpdateParams) ProtoMessage() {} func (*MsgUpdateParams) Descriptor() ([]byte, []int) { - return fileDescriptor_be640eb75c1babd5, []int{4} + return fileDescriptor_e5d64df02fac2707, []int{4} } func (m *MsgUpdateParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -334,7 +334,7 @@ func (m *MsgUpdateParamsResponse) Reset() { *m = MsgUpdateParamsResponse func (m *MsgUpdateParamsResponse) String() string { return proto.CompactTextString(m) } func (*MsgUpdateParamsResponse) ProtoMessage() {} func (*MsgUpdateParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_be640eb75c1babd5, []int{5} + return fileDescriptor_e5d64df02fac2707, []int{5} } func (m *MsgUpdateParamsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -364,55 +364,55 @@ func (m *MsgUpdateParamsResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgUpdateParamsResponse proto.InternalMessageInfo func init() { - proto.RegisterType((*MsgRegisterTokenPriceQuery)(nil), "stride.icqoracle.MsgRegisterTokenPriceQuery") - proto.RegisterType((*MsgRegisterTokenPriceQueryResponse)(nil), "stride.icqoracle.MsgRegisterTokenPriceQueryResponse") - proto.RegisterType((*MsgRemoveTokenPriceQuery)(nil), "stride.icqoracle.MsgRemoveTokenPriceQuery") - proto.RegisterType((*MsgRemoveTokenPriceQueryResponse)(nil), "stride.icqoracle.MsgRemoveTokenPriceQueryResponse") - proto.RegisterType((*MsgUpdateParams)(nil), "stride.icqoracle.MsgUpdateParams") - proto.RegisterType((*MsgUpdateParamsResponse)(nil), "stride.icqoracle.MsgUpdateParamsResponse") -} - -func init() { proto.RegisterFile("stride/icqoracle/tx.proto", fileDescriptor_be640eb75c1babd5) } - -var fileDescriptor_be640eb75c1babd5 = []byte{ - // 582 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x94, 0x5f, 0x6b, 0xd3, 0x50, - 0x18, 0xc6, 0x9b, 0xad, 0x2d, 0xf4, 0x9d, 0xb2, 0x2d, 0x4e, 0x9a, 0x06, 0xcc, 0x6a, 0x18, 0x32, - 0x4b, 0x97, 0xb0, 0x56, 0x44, 0xe6, 0x95, 0xc5, 0x1b, 0xc1, 0x42, 0x97, 0xe9, 0x8d, 0x08, 0x25, - 0x6d, 0x0e, 0xd9, 0xc1, 0x26, 0x27, 0xcb, 0x49, 0xeb, 0x7a, 0x21, 0x88, 0x97, 0x5e, 0xf9, 0x31, - 0xbc, 0xec, 0xc5, 0xbe, 0x83, 0xbb, 0x1c, 0x5e, 0x79, 0x25, 0xd2, 0x22, 0xfd, 0x1a, 0x92, 0x73, - 0x92, 0xfe, 0x5b, 0xc2, 0xf4, 0xca, 0x9b, 0x36, 0xe7, 0x7d, 0x7e, 0xe7, 0xc9, 0xfb, 0x3e, 0x49, - 0x0e, 0x94, 0x68, 0xe0, 0x63, 0x0b, 0xe9, 0xb8, 0x7b, 0x46, 0x7c, 0xb3, 0xdb, 0x43, 0x7a, 0x70, - 0xae, 0x79, 0x3e, 0x09, 0x88, 0xb8, 0xc5, 0x25, 0x6d, 0x26, 0xc9, 0xdb, 0xa6, 0x83, 0x5d, 0xa2, - 0xb3, 0x5f, 0x0e, 0xc9, 0xa5, 0x2e, 0xa1, 0x0e, 0xa1, 0x6d, 0xb6, 0xd2, 0xf9, 0x22, 0x92, 0x8a, - 0x7c, 0xa5, 0x3b, 0xd4, 0xd6, 0x07, 0x87, 0xe1, 0x5f, 0x24, 0xec, 0xd8, 0xc4, 0x26, 0x7c, 0x43, - 0x78, 0x15, 0x55, 0xcb, 0xd7, 0x3a, 0x99, 0x5d, 0x71, 0x42, 0xfd, 0xb6, 0x06, 0x72, 0x93, 0xda, - 0x06, 0xb2, 0x31, 0x0d, 0x90, 0xff, 0x8a, 0xbc, 0x43, 0x6e, 0xcb, 0xc7, 0x5d, 0x74, 0xdc, 0x47, - 0xfe, 0x50, 0xd4, 0x20, 0x67, 0x5a, 0x0e, 0x76, 0x25, 0xa1, 0x2c, 0xec, 0x17, 0x1a, 0xd2, 0xf7, - 0x8b, 0x83, 0x9d, 0xa8, 0xa1, 0x67, 0x96, 0xe5, 0x23, 0x4a, 0x4f, 0x02, 0x1f, 0xbb, 0xb6, 0xc1, - 0x31, 0xf1, 0x1e, 0x40, 0xc7, 0xa4, 0xa8, 0x6d, 0x21, 0x97, 0x38, 0xd2, 0x5a, 0xb8, 0xc9, 0x28, - 0x84, 0x95, 0xe7, 0x61, 0x41, 0xdc, 0x85, 0x8d, 0xb3, 0x3e, 0x09, 0x62, 0x7d, 0x9d, 0xe9, 0xc0, - 0x4a, 0x1c, 0xa8, 0x82, 0xc8, 0xdc, 0x31, 0x6d, 0x2f, 0xf8, 0x64, 0x19, 0xb7, 0x15, 0x29, 0x8d, - 0x99, 0x9d, 0x06, 0x77, 0x62, 0x7a, 0xd1, 0x36, 0xc7, 0xf0, 0xed, 0x48, 0x3a, 0x9e, 0xbb, 0x3f, - 0x80, 0xcd, 0x98, 0xf7, 0x08, 0xe9, 0xb5, 0xb1, 0x25, 0xe5, 0xcb, 0xc2, 0x7e, 0xd6, 0xb8, 0x1d, - 0x95, 0x5b, 0x84, 0xf4, 0x5e, 0x58, 0x47, 0xf5, 0x4f, 0xd3, 0x51, 0x85, 0x4f, 0xf4, 0x79, 0x3a, - 0xaa, 0xec, 0xcd, 0xe3, 0x4b, 0x8f, 0x4a, 0xdd, 0x03, 0x35, 0x5d, 0x35, 0x10, 0xf5, 0x88, 0x4b, - 0x91, 0xfa, 0x5b, 0x00, 0x89, 0x61, 0x0e, 0x19, 0xa0, 0xff, 0x9d, 0x76, 0x42, 0x1e, 0xd9, 0xa4, - 0x3c, 0x0e, 0x97, 0xf3, 0x50, 0x57, 0xf2, 0x48, 0x18, 0x45, 0x55, 0xa1, 0x9c, 0xa6, 0xcd, 0xb2, - 0xb8, 0x10, 0x60, 0xb3, 0x49, 0xed, 0xd7, 0x9e, 0x65, 0x06, 0xa8, 0x65, 0xfa, 0xa6, 0x43, 0xc5, - 0xc7, 0x50, 0x30, 0xfb, 0xc1, 0x29, 0xf1, 0x71, 0x30, 0xbc, 0x31, 0x86, 0x39, 0x2a, 0x3e, 0x85, - 0xbc, 0xc7, 0x1c, 0x58, 0x0c, 0x1b, 0x35, 0x49, 0x5b, 0xfd, 0xd2, 0x34, 0x7e, 0x87, 0x46, 0xe1, - 0xf2, 0xe7, 0x6e, 0xe6, 0xeb, 0x74, 0x54, 0x11, 0x8c, 0x68, 0xcb, 0x51, 0x35, 0x9c, 0x6f, 0x6e, - 0x16, 0xce, 0x58, 0x5a, 0x9a, 0x71, 0xb1, 0x45, 0xb5, 0x04, 0xc5, 0x95, 0x52, 0x3c, 0x51, 0x6d, - 0xbc, 0x06, 0xeb, 0x4d, 0x6a, 0x8b, 0x1f, 0xa0, 0x98, 0xf6, 0x45, 0x55, 0xaf, 0x37, 0x96, 0xfe, - 0xda, 0xc8, 0x8f, 0xfe, 0x85, 0x8e, 0xdb, 0x10, 0xdf, 0xc3, 0xdd, 0xe4, 0x17, 0xac, 0x92, 0x62, - 0x97, 0xc0, 0xca, 0xb5, 0xbf, 0x67, 0x67, 0x37, 0x7e, 0x0b, 0xb7, 0x96, 0x9e, 0xe6, 0xfd, 0x44, - 0x8f, 0x45, 0x44, 0x7e, 0x78, 0x23, 0x12, 0xbb, 0xcb, 0xb9, 0x8f, 0xe1, 0x53, 0x6b, 0x34, 0x2f, - 0xc7, 0x8a, 0x70, 0x35, 0x56, 0x84, 0x5f, 0x63, 0x45, 0xf8, 0x32, 0x51, 0x32, 0x57, 0x13, 0x25, - 0xf3, 0x63, 0xa2, 0x64, 0xde, 0xd4, 0x6d, 0x1c, 0x9c, 0xf6, 0x3b, 0x5a, 0x97, 0x38, 0xfa, 0x09, - 0x73, 0x3d, 0x78, 0x69, 0x76, 0xa8, 0x1e, 0x9d, 0x82, 0x83, 0xda, 0x13, 0xfd, 0x7c, 0xf1, 0x54, - 0x1e, 0x7a, 0x88, 0x76, 0xf2, 0xec, 0x20, 0xac, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0xbf, 0x62, - 0x75, 0x60, 0xb6, 0x05, 0x00, 0x00, + proto.RegisterType((*MsgRegisterTokenPriceQuery)(nil), "symphony.icqoracle.MsgRegisterTokenPriceQuery") + proto.RegisterType((*MsgRegisterTokenPriceQueryResponse)(nil), "symphony.icqoracle.MsgRegisterTokenPriceQueryResponse") + proto.RegisterType((*MsgRemoveTokenPriceQuery)(nil), "symphony.icqoracle.MsgRemoveTokenPriceQuery") + proto.RegisterType((*MsgRemoveTokenPriceQueryResponse)(nil), "symphony.icqoracle.MsgRemoveTokenPriceQueryResponse") + proto.RegisterType((*MsgUpdateParams)(nil), "symphony.icqoracle.MsgUpdateParams") + proto.RegisterType((*MsgUpdateParamsResponse)(nil), "symphony.icqoracle.MsgUpdateParamsResponse") +} + +func init() { proto.RegisterFile("symphony/icqoracle/tx.proto", fileDescriptor_e5d64df02fac2707) } + +var fileDescriptor_e5d64df02fac2707 = []byte{ + // 585 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x54, 0x3f, 0x6f, 0xd3, 0x5e, + 0x14, 0x8d, 0xd3, 0x24, 0x52, 0x6e, 0x7f, 0x3f, 0x95, 0x9a, 0xa2, 0x24, 0x46, 0xb8, 0x91, 0xa9, + 0x50, 0x15, 0x52, 0x5b, 0x4d, 0xa1, 0x48, 0x95, 0x18, 0x88, 0x58, 0x18, 0x22, 0x52, 0x03, 0x0b, + 0x4b, 0x70, 0xe2, 0x27, 0xc7, 0x22, 0xf6, 0x75, 0xfd, 0x9c, 0xa8, 0x11, 0x0b, 0x30, 0x32, 0xf1, + 0x31, 0x18, 0x33, 0x20, 0xbe, 0x02, 0x1d, 0x2b, 0x26, 0x26, 0x84, 0x12, 0xa1, 0x8c, 0x7c, 0x05, + 0xe4, 0x67, 0x3b, 0x71, 0x8a, 0x2d, 0xe8, 0xc4, 0x62, 0xbf, 0x7b, 0xcf, 0x79, 0xe7, 0xdd, 0x7b, + 0xde, 0x1f, 0xb8, 0x4e, 0xc7, 0x96, 0xd3, 0x47, 0x7b, 0xac, 0x98, 0xbd, 0x13, 0x74, 0xb5, 0xde, + 0x80, 0x28, 0xde, 0xa9, 0xec, 0xb8, 0xe8, 0x21, 0xcf, 0x47, 0xa0, 0xbc, 0x00, 0x85, 0x4d, 0xcd, + 0x32, 0x6d, 0x54, 0xd8, 0x37, 0xa0, 0x09, 0x95, 0x1e, 0x52, 0x0b, 0x69, 0x87, 0x45, 0x4a, 0x10, + 0x84, 0x50, 0x29, 0x88, 0x14, 0x8b, 0x1a, 0xca, 0x68, 0xdf, 0xff, 0x85, 0xc0, 0x96, 0x81, 0x06, + 0x06, 0x13, 0xfc, 0x51, 0x98, 0x95, 0x12, 0xaa, 0x59, 0x8c, 0x02, 0x8e, 0xf4, 0x39, 0x0b, 0x42, + 0x8b, 0x1a, 0x2a, 0x31, 0x4c, 0xea, 0x11, 0xf7, 0x29, 0xbe, 0x24, 0x76, 0xdb, 0x35, 0x7b, 0xe4, + 0x78, 0x48, 0xdc, 0x31, 0x2f, 0x43, 0x5e, 0xd3, 0x2d, 0xd3, 0x2e, 0x73, 0x55, 0x6e, 0xb7, 0xd8, + 0x2c, 0x7f, 0xf9, 0xb8, 0xb7, 0x15, 0x96, 0xf4, 0x40, 0xd7, 0x5d, 0x42, 0xe9, 0x13, 0xcf, 0x35, + 0x6d, 0x43, 0x0d, 0x68, 0xfc, 0x0d, 0x80, 0xae, 0x46, 0x49, 0x47, 0x27, 0x36, 0x5a, 0xe5, 0xac, + 0x3f, 0x49, 0x2d, 0xfa, 0x99, 0x87, 0x7e, 0x82, 0xdf, 0x86, 0xf5, 0x93, 0x21, 0x7a, 0x11, 0xbe, + 0xc6, 0x70, 0x60, 0xa9, 0x80, 0x50, 0x07, 0x9e, 0xa9, 0x9b, 0xb4, 0x13, 0xd3, 0xc9, 0x31, 0xde, + 0x95, 0x10, 0x69, 0x2e, 0xe4, 0x64, 0xb8, 0x1a, 0xb1, 0xe3, 0xb2, 0x79, 0x46, 0xdf, 0x0c, 0xa1, + 0xe3, 0xa5, 0xfa, 0x2d, 0xd8, 0x88, 0xf8, 0x0e, 0xe2, 0xa0, 0x63, 0xea, 0xe5, 0x42, 0x95, 0xdb, + 0xcd, 0xa9, 0xff, 0x87, 0xe9, 0x36, 0xe2, 0xe0, 0x91, 0x7e, 0x74, 0xf0, 0x76, 0x3e, 0xa9, 0x05, + 0x1d, 0xbd, 0x9b, 0x4f, 0x6a, 0x3b, 0x4b, 0xfb, 0xd2, 0xad, 0x92, 0x76, 0x40, 0x4a, 0x47, 0x55, + 0x42, 0x1d, 0xb4, 0x29, 0x91, 0x7e, 0x70, 0x50, 0x66, 0x34, 0x0b, 0x47, 0xe4, 0x5f, 0xbb, 0x9d, + 0xe0, 0x47, 0x2e, 0xc9, 0x8f, 0xfd, 0x55, 0x3f, 0xa4, 0x0b, 0x7e, 0x24, 0xb4, 0x22, 0x49, 0x50, + 0x4d, 0xc3, 0x16, 0x5e, 0x7c, 0xe2, 0x60, 0xa3, 0x45, 0x8d, 0x67, 0x8e, 0xae, 0x79, 0xa4, 0xad, + 0xb9, 0x9a, 0x45, 0xf9, 0x43, 0x28, 0x6a, 0x43, 0xaf, 0x8f, 0xae, 0xe9, 0x8d, 0xff, 0x68, 0xc3, + 0x92, 0xca, 0xdf, 0x87, 0x82, 0xc3, 0x14, 0x98, 0x0d, 0xeb, 0x0d, 0x41, 0xfe, 0xfd, 0xb6, 0xc9, + 0xc1, 0x1a, 0xcd, 0xe2, 0xd9, 0xb7, 0xed, 0xcc, 0x87, 0xf9, 0xa4, 0xc6, 0xa9, 0xe1, 0xa4, 0xa3, + 0xba, 0xdf, 0xe1, 0x52, 0xce, 0xef, 0xb2, 0xb2, 0xd2, 0x65, 0xbc, 0x48, 0xa9, 0x02, 0xa5, 0x0b, + 0xa9, 0xa8, 0xa7, 0xc6, 0xcf, 0x2c, 0xac, 0xb5, 0xa8, 0xc1, 0xbf, 0xe1, 0xa0, 0x94, 0x7a, 0xa9, + 0x92, 0x6a, 0x4b, 0x3f, 0x3b, 0xc2, 0xe1, 0xe5, 0xf8, 0x51, 0x2d, 0xfc, 0x2b, 0xb8, 0x96, 0x7c, + 0xce, 0xea, 0xa9, 0x82, 0x09, 0x6c, 0xe1, 0xce, 0x65, 0xd8, 0x8b, 0xc5, 0x5f, 0xc0, 0x7f, 0x2b, + 0x1b, 0x7b, 0x33, 0x45, 0x25, 0x4e, 0x12, 0x6e, 0xff, 0x05, 0x29, 0x5a, 0x41, 0xc8, 0xbf, 0xf6, + 0xb7, 0xb0, 0xf9, 0xf8, 0x6c, 0x2a, 0x72, 0xe7, 0x53, 0x91, 0xfb, 0x3e, 0x15, 0xb9, 0xf7, 0x33, + 0x31, 0x73, 0x3e, 0x13, 0x33, 0x5f, 0x67, 0x62, 0xe6, 0xf9, 0x5d, 0xc3, 0xf4, 0xfa, 0xc3, 0xae, + 0xdc, 0x43, 0x4b, 0x09, 0x0f, 0xf4, 0xde, 0x40, 0xeb, 0xd2, 0x28, 0x50, 0x46, 0x8d, 0x7b, 0xca, + 0x69, 0xfc, 0xa9, 0x1e, 0x3b, 0x84, 0x76, 0x0b, 0xec, 0x65, 0x3c, 0xf8, 0x15, 0x00, 0x00, 0xff, + 0xff, 0xa0, 0x24, 0x4f, 0x07, 0xcd, 0x05, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -446,7 +446,7 @@ func NewMsgClient(cc grpc1.ClientConn) MsgClient { func (c *msgClient) RegisterTokenPriceQuery(ctx context.Context, in *MsgRegisterTokenPriceQuery, opts ...grpc.CallOption) (*MsgRegisterTokenPriceQueryResponse, error) { out := new(MsgRegisterTokenPriceQueryResponse) - err := c.cc.Invoke(ctx, "/stride.icqoracle.Msg/RegisterTokenPriceQuery", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.icqoracle.Msg/RegisterTokenPriceQuery", in, out, opts...) if err != nil { return nil, err } @@ -455,7 +455,7 @@ func (c *msgClient) RegisterTokenPriceQuery(ctx context.Context, in *MsgRegister func (c *msgClient) RemoveTokenPriceQuery(ctx context.Context, in *MsgRemoveTokenPriceQuery, opts ...grpc.CallOption) (*MsgRemoveTokenPriceQueryResponse, error) { out := new(MsgRemoveTokenPriceQueryResponse) - err := c.cc.Invoke(ctx, "/stride.icqoracle.Msg/RemoveTokenPriceQuery", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.icqoracle.Msg/RemoveTokenPriceQuery", in, out, opts...) if err != nil { return nil, err } @@ -464,7 +464,7 @@ func (c *msgClient) RemoveTokenPriceQuery(ctx context.Context, in *MsgRemoveToke func (c *msgClient) UpdateParams(ctx context.Context, in *MsgUpdateParams, opts ...grpc.CallOption) (*MsgUpdateParamsResponse, error) { out := new(MsgUpdateParamsResponse) - err := c.cc.Invoke(ctx, "/stride.icqoracle.Msg/UpdateParams", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.icqoracle.Msg/UpdateParams", in, out, opts...) if err != nil { return nil, err } @@ -510,7 +510,7 @@ func _Msg_RegisterTokenPriceQuery_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.icqoracle.Msg/RegisterTokenPriceQuery", + FullMethod: "/symphony.icqoracle.Msg/RegisterTokenPriceQuery", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).RegisterTokenPriceQuery(ctx, req.(*MsgRegisterTokenPriceQuery)) @@ -528,7 +528,7 @@ func _Msg_RemoveTokenPriceQuery_Handler(srv interface{}, ctx context.Context, de } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.icqoracle.Msg/RemoveTokenPriceQuery", + FullMethod: "/symphony.icqoracle.Msg/RemoveTokenPriceQuery", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).RemoveTokenPriceQuery(ctx, req.(*MsgRemoveTokenPriceQuery)) @@ -546,7 +546,7 @@ func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(in } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.icqoracle.Msg/UpdateParams", + FullMethod: "/symphony.icqoracle.Msg/UpdateParams", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).UpdateParams(ctx, req.(*MsgUpdateParams)) @@ -555,7 +555,7 @@ func _Msg_UpdateParams_Handler(srv interface{}, ctx context.Context, dec func(in } var _Msg_serviceDesc = grpc.ServiceDesc{ - ServiceName: "stride.icqoracle.Msg", + ServiceName: "symphony.icqoracle.Msg", HandlerType: (*MsgServer)(nil), Methods: []grpc.MethodDesc{ { @@ -572,7 +572,7 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "stride/icqoracle/tx.proto", + Metadata: "symphony/icqoracle/tx.proto", } func (m *MsgRegisterTokenPriceQuery) Marshal() (dAtA []byte, err error) { diff --git a/x/incentives/types/gauge.pb.go b/x/incentives/types/gauge.pb.go index d4bdf2644db..6af99792420 100644 --- a/x/incentives/types/gauge.pb.go +++ b/x/incentives/types/gauge.pb.go @@ -9,10 +9,9 @@ import ( types1 "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" types "github.com/osmosis-labs/osmosis/v27/x/lockup/types" - _ "google.golang.org/protobuf/types/known/durationpb" - _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" diff --git a/x/incentives/types/genesis.pb.go b/x/incentives/types/genesis.pb.go index fe140db4a01..bd4924c216a 100644 --- a/x/incentives/types/genesis.pb.go +++ b/x/incentives/types/genesis.pb.go @@ -7,8 +7,8 @@ import ( fmt "fmt" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" - _ "google.golang.org/protobuf/types/known/durationpb" io "io" math "math" math_bits "math/bits" diff --git a/x/incentives/types/group.pb.go b/x/incentives/types/group.pb.go index 05810fbd8f6..71ff9b20133 100644 --- a/x/incentives/types/group.pb.go +++ b/x/incentives/types/group.pb.go @@ -9,9 +9,8 @@ import ( _ "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" _ "github.com/osmosis-labs/osmosis/v27/x/lockup/types" - _ "google.golang.org/protobuf/types/known/durationpb" - _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" diff --git a/x/incentives/types/params.pb.go b/x/incentives/types/params.pb.go index 6b830d817fa..7ee72192a51 100644 --- a/x/incentives/types/params.pb.go +++ b/x/incentives/types/params.pb.go @@ -9,8 +9,8 @@ import ( types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" - _ "google.golang.org/protobuf/types/known/durationpb" io "io" math "math" math_bits "math/bits" diff --git a/x/incentives/types/query.pb.go b/x/incentives/types/query.pb.go index a7e9225785d..aee1f5fd9ab 100644 --- a/x/incentives/types/query.pb.go +++ b/x/incentives/types/query.pb.go @@ -13,13 +13,13 @@ import ( _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" _ "github.com/osmosis-labs/osmosis/v27/x/lockup/types" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - _ "google.golang.org/protobuf/types/known/durationpb" io "io" math "math" math_bits "math/bits" diff --git a/x/incentives/types/tx.pb.go b/x/incentives/types/tx.pb.go index cad559513ca..6c1c7d2d1d1 100644 --- a/x/incentives/types/tx.pb.go +++ b/x/incentives/types/tx.pb.go @@ -13,12 +13,12 @@ import ( _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" types "github.com/osmosis-labs/osmosis/v27/x/lockup/types" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" diff --git a/x/interchainquery/types/genesis.pb.go b/x/interchainquery/types/genesis.pb.go index 51ea6707fc2..c59a77a5fd6 100644 --- a/x/interchainquery/types/genesis.pb.go +++ b/x/interchainquery/types/genesis.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/interchainquery/v1/genesis.proto +// source: symphony/interchainquery/v1/genesis.proto package types @@ -54,7 +54,7 @@ func (x TimeoutPolicy) String() string { } func (TimeoutPolicy) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_74cd646eb05658fd, []int{0} + return fileDescriptor_c37b922954370dd6, []int{0} } type Query struct { @@ -66,7 +66,7 @@ type Query struct { CallbackModule string `protobuf:"bytes,13,opt,name=callback_module,json=callbackModule,proto3" json:"callback_module,omitempty"` CallbackId string `protobuf:"bytes,8,opt,name=callback_id,json=callbackId,proto3" json:"callback_id,omitempty"` CallbackData []byte `protobuf:"bytes,12,opt,name=callback_data,json=callbackData,proto3" json:"callback_data,omitempty"` - TimeoutPolicy TimeoutPolicy `protobuf:"varint,15,opt,name=timeout_policy,json=timeoutPolicy,proto3,enum=stride.interchainquery.v1.TimeoutPolicy" json:"timeout_policy,omitempty"` + TimeoutPolicy TimeoutPolicy `protobuf:"varint,15,opt,name=timeout_policy,json=timeoutPolicy,proto3,enum=symphony.interchainquery.v1.TimeoutPolicy" json:"timeout_policy,omitempty"` TimeoutDuration time.Duration `protobuf:"bytes,14,opt,name=timeout_duration,json=timeoutDuration,proto3,stdduration" json:"timeout_duration"` TimeoutTimestamp uint64 `protobuf:"varint,9,opt,name=timeout_timestamp,json=timeoutTimestamp,proto3" json:"timeout_timestamp,omitempty"` RequestSent bool `protobuf:"varint,11,opt,name=request_sent,json=requestSent,proto3" json:"request_sent,omitempty"` @@ -77,7 +77,7 @@ func (m *Query) Reset() { *m = Query{} } func (m *Query) String() string { return proto.CompactTextString(m) } func (*Query) ProtoMessage() {} func (*Query) Descriptor() ([]byte, []int) { - return fileDescriptor_74cd646eb05658fd, []int{0} + return fileDescriptor_c37b922954370dd6, []int{0} } func (m *Query) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -208,7 +208,7 @@ func (m *DataPoint) Reset() { *m = DataPoint{} } func (m *DataPoint) String() string { return proto.CompactTextString(m) } func (*DataPoint) ProtoMessage() {} func (*DataPoint) Descriptor() ([]byte, []int) { - return fileDescriptor_74cd646eb05658fd, []int{1} + return fileDescriptor_c37b922954370dd6, []int{1} } func (m *DataPoint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -260,7 +260,7 @@ func (m *GenesisState) Reset() { *m = GenesisState{} } func (m *GenesisState) String() string { return proto.CompactTextString(m) } func (*GenesisState) ProtoMessage() {} func (*GenesisState) Descriptor() ([]byte, []int) { - return fileDescriptor_74cd646eb05658fd, []int{2} + return fileDescriptor_c37b922954370dd6, []int{2} } func (m *GenesisState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -297,63 +297,63 @@ func (m *GenesisState) GetQueries() []Query { } func init() { - proto.RegisterEnum("stride.interchainquery.v1.TimeoutPolicy", TimeoutPolicy_name, TimeoutPolicy_value) - proto.RegisterType((*Query)(nil), "stride.interchainquery.v1.Query") - proto.RegisterType((*DataPoint)(nil), "stride.interchainquery.v1.DataPoint") - proto.RegisterType((*GenesisState)(nil), "stride.interchainquery.v1.GenesisState") + proto.RegisterEnum("symphony.interchainquery.v1.TimeoutPolicy", TimeoutPolicy_name, TimeoutPolicy_value) + proto.RegisterType((*Query)(nil), "symphony.interchainquery.v1.Query") + proto.RegisterType((*DataPoint)(nil), "symphony.interchainquery.v1.DataPoint") + proto.RegisterType((*GenesisState)(nil), "symphony.interchainquery.v1.GenesisState") } func init() { - proto.RegisterFile("stride/interchainquery/v1/genesis.proto", fileDescriptor_74cd646eb05658fd) + proto.RegisterFile("symphony/interchainquery/v1/genesis.proto", fileDescriptor_c37b922954370dd6) } -var fileDescriptor_74cd646eb05658fd = []byte{ - // 713 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xc1, 0x6e, 0xd3, 0x4a, - 0x14, 0x8d, 0xd3, 0xf4, 0x35, 0x99, 0x38, 0x69, 0xde, 0xbc, 0xf6, 0x3d, 0xa7, 0xd2, 0x4b, 0x4c, - 0x59, 0xd4, 0x6a, 0xa9, 0xad, 0x86, 0x0d, 0xec, 0x68, 0x52, 0x0b, 0x02, 0xa5, 0x4d, 0x9d, 0x54, - 0xa2, 0x6c, 0x2c, 0xc7, 0x1e, 0x92, 0x51, 0x6d, 0x4f, 0xea, 0x19, 0x47, 0xe4, 0x2f, 0x58, 0xf2, - 0x05, 0x7c, 0x01, 0x1f, 0xd1, 0x65, 0xc5, 0x0a, 0xb1, 0x28, 0xa8, 0x5d, 0xc1, 0x57, 0x20, 0xcf, - 0xd8, 0x6d, 0xa1, 0x02, 0x89, 0x55, 0x32, 0xe7, 0x9c, 0x39, 0x77, 0x7c, 0xef, 0x99, 0x01, 0x6b, - 0x94, 0x45, 0xd8, 0x43, 0x06, 0x0e, 0x19, 0x8a, 0xdc, 0xb1, 0x83, 0xc3, 0x93, 0x18, 0x45, 0x33, - 0x63, 0xba, 0x65, 0x8c, 0x50, 0x88, 0x28, 0xa6, 0xfa, 0x24, 0x22, 0x8c, 0xc0, 0xba, 0x10, 0xea, - 0x3f, 0x09, 0xf5, 0xe9, 0xd6, 0x4a, 0xdd, 0x25, 0x34, 0x20, 0xd4, 0xe6, 0x42, 0x43, 0x2c, 0xc4, - 0xae, 0x95, 0xa5, 0x11, 0x19, 0x11, 0x81, 0x27, 0xff, 0x52, 0xb4, 0x31, 0x22, 0x64, 0xe4, 0x23, - 0x83, 0xaf, 0x86, 0xf1, 0x2b, 0xc3, 0x8b, 0x23, 0x87, 0x61, 0x12, 0x0a, 0x7e, 0xf5, 0x5d, 0x01, - 0xcc, 0x1f, 0x24, 0xee, 0xb0, 0x0a, 0xf2, 0xd8, 0x53, 0x24, 0x55, 0xd2, 0x4a, 0x56, 0x1e, 0x7b, - 0xf0, 0x2e, 0xa8, 0xb8, 0x24, 0x0c, 0x91, 0x9b, 0xa8, 0x6d, 0xec, 0x29, 0x79, 0x4e, 0xc9, 0xd7, - 0x60, 0xd7, 0x83, 0x75, 0x50, 0xe4, 0x07, 0x4c, 0xf8, 0x39, 0xce, 0x2f, 0xf0, 0x75, 0xd7, 0x83, - 0xff, 0x03, 0xc0, 0x8f, 0x6d, 0xb3, 0xd9, 0x04, 0x29, 0x05, 0x4e, 0x96, 0x38, 0x32, 0x98, 0x4d, - 0x10, 0xbc, 0x03, 0xe4, 0x08, 0x9d, 0xc4, 0x88, 0x32, 0xdb, 0x73, 0x98, 0xa3, 0xcc, 0xab, 0x92, - 0x26, 0x5b, 0xe5, 0x14, 0xdb, 0x71, 0x98, 0x03, 0xd7, 0xc0, 0xa2, 0xeb, 0xf8, 0xfe, 0xd0, 0x71, - 0x8f, 0xed, 0x80, 0x78, 0xb1, 0x8f, 0x94, 0x0a, 0xb7, 0xa9, 0x66, 0xf0, 0x73, 0x8e, 0xc2, 0x26, - 0x28, 0x5f, 0x09, 0xb1, 0xa7, 0x14, 0xb9, 0x08, 0x64, 0x50, 0x57, 0x7c, 0x4b, 0x26, 0xe0, 0xd5, - 0x64, 0x5e, 0x4d, 0xce, 0x40, 0x5e, 0x6e, 0x1f, 0x54, 0x19, 0x0e, 0x10, 0x89, 0x99, 0x3d, 0x21, - 0x3e, 0x76, 0x67, 0xca, 0xa2, 0x2a, 0x69, 0xd5, 0x96, 0xa6, 0xff, 0x72, 0x1e, 0xfa, 0x40, 0x6c, - 0xe8, 0x71, 0xbd, 0x55, 0x61, 0x37, 0x97, 0x70, 0x0f, 0xd4, 0x32, 0xc3, 0xac, 0xeb, 0x4a, 0x55, - 0x95, 0xb4, 0x72, 0xab, 0xae, 0x8b, 0xb1, 0xe8, 0xd9, 0x58, 0xf4, 0x9d, 0x54, 0xd0, 0x2e, 0x9e, - 0x9e, 0x37, 0x73, 0x6f, 0x3f, 0x37, 0x25, 0x6b, 0x31, 0xdd, 0x9c, 0x51, 0x70, 0x03, 0xfc, 0x9d, - 0xf9, 0x25, 0xbf, 0x94, 0x39, 0xc1, 0x44, 0x29, 0xa9, 0x92, 0x56, 0xb0, 0xb2, 0x42, 0x83, 0x0c, - 0xbf, 0xd9, 0x5f, 0x8a, 0x42, 0xa6, 0x94, 0x55, 0x49, 0x2b, 0x5e, 0xf5, 0xb7, 0x8f, 0x42, 0x96, - 0xf8, 0xd1, 0x78, 0x18, 0x60, 0x4a, 0x93, 0x09, 0x8f, 0x11, 0x1e, 0x8d, 0x99, 0x52, 0x13, 0x7e, - 0xd7, 0xc4, 0x13, 0x8e, 0xaf, 0x7e, 0x95, 0x40, 0x29, 0x69, 0x53, 0x8f, 0xe0, 0x90, 0xdd, 0x0a, - 0x4b, 0x0f, 0x54, 0x22, 0x14, 0x10, 0x86, 0x32, 0x1b, 0x1e, 0x96, 0xf6, 0x46, 0xf2, 0x31, 0x9f, - 0xce, 0x9b, 0xcb, 0x22, 0xa9, 0xd4, 0x3b, 0xd6, 0x31, 0x31, 0x02, 0x87, 0x8d, 0xf5, 0x6e, 0xc8, - 0x3e, 0xbc, 0xdf, 0x04, 0x69, 0x84, 0xbb, 0x21, 0xb3, 0x64, 0xe1, 0x20, 0xea, 0xc1, 0x3d, 0x20, - 0xfb, 0xc4, 0x75, 0xfc, 0xcc, 0x70, 0xee, 0xcf, 0x0d, 0xcb, 0xdc, 0x20, 0xf5, 0x5b, 0x07, 0xf3, - 0x53, 0xc7, 0x8f, 0x45, 0x12, 0xe5, 0xf6, 0xd2, 0xb7, 0xf3, 0x66, 0x2d, 0x42, 0x34, 0xf6, 0xd9, - 0x3d, 0x12, 0x60, 0x86, 0x82, 0x09, 0x9b, 0x59, 0x42, 0xb2, 0xda, 0x03, 0xf2, 0x63, 0x71, 0x23, - 0xfb, 0xcc, 0x61, 0x08, 0x3e, 0x02, 0x0b, 0xc9, 0xc4, 0x31, 0xa2, 0x8a, 0xa4, 0xce, 0x69, 0xe5, - 0x96, 0xfa, 0x9b, 0x48, 0xf0, 0xdb, 0xd4, 0x2e, 0x24, 0x07, 0xb5, 0xb2, 0x6d, 0xeb, 0x36, 0xa8, - 0xfc, 0x10, 0x15, 0x58, 0x07, 0xcb, 0x96, 0xf9, 0xd4, 0xec, 0x0c, 0xec, 0x83, 0x43, 0xd3, 0x3a, - 0xb2, 0x2d, 0xb3, 0xdf, 0xdb, 0xdf, 0xeb, 0x9b, 0xb5, 0x1c, 0xfc, 0x0f, 0xfc, 0x63, 0x99, 0x03, - 0xeb, 0xe8, 0x8a, 0x39, 0x38, 0x34, 0xfb, 0x83, 0x9a, 0x04, 0x57, 0xc0, 0xbf, 0xe6, 0x0b, 0xb3, - 0x73, 0x38, 0x30, 0x53, 0xaa, 0xb3, 0xbd, 0xbb, 0xdb, 0xde, 0xee, 0x3c, 0xab, 0xe5, 0xdb, 0xfd, - 0xd3, 0x8b, 0x86, 0x74, 0x76, 0xd1, 0x90, 0xbe, 0x5c, 0x34, 0xa4, 0x37, 0x97, 0x8d, 0xdc, 0xd9, - 0x65, 0x23, 0xf7, 0xf1, 0xb2, 0x91, 0x7b, 0xf9, 0x70, 0x84, 0xd9, 0x38, 0x1e, 0xea, 0x2e, 0x09, - 0x8c, 0x3e, 0x3f, 0xf5, 0xe6, 0xae, 0x33, 0xa4, 0x46, 0xfa, 0x1a, 0x4d, 0x5b, 0x0f, 0x8c, 0xd7, - 0xb7, 0xde, 0xa4, 0xe4, 0xce, 0xd2, 0xe1, 0x5f, 0x3c, 0x9e, 0xf7, 0xbf, 0x07, 0x00, 0x00, 0xff, - 0xff, 0x49, 0x80, 0xca, 0xba, 0xba, 0x04, 0x00, 0x00, +var fileDescriptor_c37b922954370dd6 = []byte{ + // 712 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0x41, 0x73, 0xd2, 0x40, + 0x14, 0x26, 0x94, 0x5a, 0x58, 0x02, 0xc5, 0xb5, 0xd5, 0x50, 0x47, 0x40, 0x3c, 0x88, 0xad, 0x4d, + 0xa6, 0x78, 0xf0, 0xe0, 0xa9, 0xd0, 0x8c, 0xa2, 0xb5, 0x42, 0x80, 0x19, 0xeb, 0x25, 0x13, 0x92, + 0x15, 0x76, 0x9a, 0x64, 0x29, 0xbb, 0x61, 0xe4, 0x5f, 0x78, 0xf4, 0x27, 0xf8, 0x03, 0xfc, 0x11, + 0x3d, 0x76, 0x3c, 0x39, 0x1e, 0xaa, 0xd3, 0x9e, 0xf4, 0x57, 0x38, 0xd9, 0x65, 0xdb, 0x6a, 0x67, + 0x3a, 0xe3, 0x09, 0xde, 0xf7, 0x7d, 0xef, 0x7b, 0xbb, 0xef, 0xbd, 0x0d, 0x78, 0x44, 0x67, 0xc1, + 0x78, 0x44, 0xc2, 0x99, 0x81, 0x43, 0x86, 0x26, 0xee, 0xc8, 0xc1, 0xe1, 0x61, 0x84, 0x26, 0x33, + 0x63, 0xba, 0x65, 0x0c, 0x51, 0x88, 0x28, 0xa6, 0xfa, 0x78, 0x42, 0x18, 0x81, 0x77, 0xa5, 0x54, + 0xff, 0x47, 0xaa, 0x4f, 0xb7, 0xd6, 0x8a, 0x2e, 0xa1, 0x01, 0xa1, 0x36, 0x97, 0x1a, 0x22, 0x10, + 0x79, 0x6b, 0x2b, 0x43, 0x32, 0x24, 0x02, 0x8f, 0xff, 0xcd, 0xd1, 0xd2, 0x90, 0x90, 0xa1, 0x8f, + 0x0c, 0x1e, 0x0d, 0xa2, 0xf7, 0x86, 0x17, 0x4d, 0x1c, 0x86, 0x49, 0x28, 0xf8, 0xea, 0xe7, 0x14, + 0x58, 0xec, 0xc4, 0xee, 0x30, 0x0f, 0x92, 0xd8, 0xd3, 0x94, 0x8a, 0x52, 0xcb, 0x58, 0x49, 0xec, + 0xc1, 0x07, 0x20, 0xe7, 0x92, 0x30, 0x44, 0x6e, 0xac, 0xb6, 0xb1, 0xa7, 0x25, 0x39, 0xa5, 0x5e, + 0x80, 0x2d, 0x0f, 0x16, 0x41, 0x9a, 0x1f, 0x30, 0xe6, 0x17, 0x38, 0xbf, 0xc4, 0xe3, 0x96, 0x07, + 0xef, 0x01, 0xc0, 0x8f, 0x6d, 0xb3, 0xd9, 0x18, 0x69, 0x29, 0x4e, 0x66, 0x38, 0xd2, 0x9b, 0x8d, + 0x11, 0xbc, 0x0f, 0xd4, 0x09, 0x3a, 0x8c, 0x10, 0x65, 0xb6, 0xe7, 0x30, 0x47, 0x5b, 0xac, 0x28, + 0x35, 0xd5, 0xca, 0xce, 0xb1, 0x1d, 0x87, 0x39, 0xf0, 0x21, 0x58, 0x76, 0x1d, 0xdf, 0x1f, 0x38, + 0xee, 0x81, 0x1d, 0x10, 0x2f, 0xf2, 0x91, 0x96, 0xe3, 0x36, 0x79, 0x09, 0xbf, 0xe6, 0x28, 0x2c, + 0x83, 0xec, 0xb9, 0x10, 0x7b, 0x5a, 0x9a, 0x8b, 0x80, 0x84, 0x5a, 0xe2, 0x2e, 0x52, 0xc0, 0xab, + 0xa9, 0xbc, 0x9a, 0x2a, 0x41, 0x5e, 0xae, 0x03, 0xf2, 0x0c, 0x07, 0x88, 0x44, 0xcc, 0x1e, 0x13, + 0x1f, 0xbb, 0x33, 0x6d, 0xb9, 0xa2, 0xd4, 0xf2, 0xf5, 0x75, 0xfd, 0x9a, 0x89, 0xe8, 0x3d, 0x91, + 0xd2, 0xe6, 0x19, 0x56, 0x8e, 0x5d, 0x0e, 0xe1, 0x1e, 0x28, 0x48, 0x4b, 0xd9, 0x77, 0x2d, 0x5f, + 0x51, 0x6a, 0xd9, 0x7a, 0x51, 0x17, 0x83, 0xd1, 0xe5, 0x60, 0xf4, 0x9d, 0xb9, 0xa0, 0x91, 0x3e, + 0x3a, 0x29, 0x27, 0x3e, 0xfd, 0x28, 0x2b, 0xd6, 0xf2, 0x3c, 0x59, 0x52, 0x70, 0x03, 0xdc, 0x94, + 0x7e, 0xf1, 0x2f, 0x65, 0x4e, 0x30, 0xd6, 0x32, 0x15, 0xa5, 0x96, 0xb2, 0x64, 0xa1, 0x9e, 0xc4, + 0x2f, 0x77, 0x98, 0xa2, 0x90, 0x69, 0xd9, 0x8a, 0x52, 0x4b, 0x9f, 0x77, 0xb8, 0x8b, 0x42, 0x16, + 0xfb, 0xd1, 0x68, 0x10, 0x60, 0x4a, 0xe3, 0x19, 0x8f, 0x10, 0x1e, 0x8e, 0x98, 0x56, 0x10, 0x7e, + 0x17, 0xc4, 0x0b, 0x8e, 0x57, 0x7f, 0x29, 0x20, 0x13, 0x37, 0xaa, 0x4d, 0x70, 0xc8, 0xae, 0xac, + 0x4b, 0x1b, 0xe4, 0x26, 0x28, 0x20, 0x0c, 0x49, 0x1b, 0xbe, 0x2e, 0x8d, 0x8d, 0xf8, 0x32, 0xdf, + 0x4f, 0xca, 0xab, 0x62, 0x57, 0xa9, 0x77, 0xa0, 0x63, 0x62, 0x04, 0x0e, 0x1b, 0xe9, 0xad, 0x90, + 0x7d, 0xfd, 0xb2, 0x09, 0xe6, 0x4b, 0xdc, 0x0a, 0x99, 0xa5, 0x0a, 0x07, 0x51, 0x0f, 0xee, 0x01, + 0xd5, 0x27, 0xae, 0xe3, 0x4b, 0xc3, 0x85, 0xff, 0x37, 0xcc, 0x72, 0x83, 0xb9, 0xdf, 0x3a, 0x58, + 0x9c, 0x3a, 0x7e, 0x24, 0x76, 0x51, 0x6d, 0xac, 0xfc, 0x3e, 0x29, 0x17, 0x26, 0x88, 0x46, 0x3e, + 0x7b, 0x4c, 0x02, 0xcc, 0x50, 0x30, 0x66, 0x33, 0x4b, 0x48, 0xaa, 0x16, 0x50, 0x9f, 0x8b, 0x57, + 0xd9, 0x65, 0x0e, 0x43, 0xb0, 0x01, 0x96, 0xe2, 0x89, 0x63, 0x44, 0x35, 0xa5, 0xb2, 0x50, 0xcb, + 0xd6, 0xab, 0xd7, 0x2e, 0x05, 0x7f, 0x51, 0x8d, 0x54, 0x7c, 0x54, 0x4b, 0x26, 0xae, 0xdb, 0x20, + 0xf7, 0xd7, 0xb2, 0xc0, 0x22, 0x58, 0xb5, 0xcc, 0x97, 0x66, 0xb3, 0x67, 0x77, 0xfa, 0xa6, 0xb5, + 0x6f, 0x5b, 0x66, 0xb7, 0xfd, 0x66, 0xaf, 0x6b, 0x16, 0x12, 0xf0, 0x0e, 0xb8, 0x65, 0x99, 0x3d, + 0x6b, 0xff, 0x9c, 0xe9, 0xf4, 0xcd, 0x6e, 0xaf, 0xa0, 0xc0, 0x35, 0x70, 0xdb, 0x7c, 0x6b, 0x36, + 0xfb, 0x3d, 0x73, 0x4e, 0x35, 0xb7, 0x77, 0x77, 0x1b, 0xdb, 0xcd, 0x57, 0x85, 0x64, 0xa3, 0x7f, + 0x74, 0x5a, 0x52, 0x8e, 0x4f, 0x4b, 0xca, 0xcf, 0xd3, 0x92, 0xf2, 0xf1, 0xac, 0x94, 0x38, 0x3e, + 0x2b, 0x25, 0xbe, 0x9d, 0x95, 0x12, 0xef, 0x9e, 0x0d, 0x31, 0x1b, 0x45, 0x03, 0xdd, 0x25, 0x81, + 0xc1, 0xbb, 0x83, 0xe9, 0xa6, 0xef, 0x0c, 0xa8, 0x0c, 0x8c, 0x69, 0xfd, 0xa9, 0xf1, 0xe1, 0xca, + 0xb7, 0x29, 0x7e, 0xb9, 0x74, 0x70, 0x83, 0xaf, 0xe8, 0x93, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, + 0xd5, 0x1a, 0xbe, 0x61, 0xc4, 0x04, 0x00, 0x00, } func (m *Query) Marshal() (dAtA []byte, err error) { diff --git a/x/interchainquery/types/query.pb.go b/x/interchainquery/types/query.pb.go index 5a7192e8988..51004a3b180 100644 --- a/x/interchainquery/types/query.pb.go +++ b/x/interchainquery/types/query.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/interchainquery/v1/query.proto +// source: symphony/interchainquery/v1/query.proto package types @@ -36,7 +36,7 @@ func (m *QueryPendingQueriesRequest) Reset() { *m = QueryPendingQueriesR func (m *QueryPendingQueriesRequest) String() string { return proto.CompactTextString(m) } func (*QueryPendingQueriesRequest) ProtoMessage() {} func (*QueryPendingQueriesRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_b720c147b9144d5b, []int{0} + return fileDescriptor_76ba56aa09d0ed81, []int{0} } func (m *QueryPendingQueriesRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -73,7 +73,7 @@ func (m *QueryPendingQueriesResponse) Reset() { *m = QueryPendingQueries func (m *QueryPendingQueriesResponse) String() string { return proto.CompactTextString(m) } func (*QueryPendingQueriesResponse) ProtoMessage() {} func (*QueryPendingQueriesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_b720c147b9144d5b, []int{1} + return fileDescriptor_76ba56aa09d0ed81, []int{1} } func (m *QueryPendingQueriesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -110,36 +110,37 @@ func (m *QueryPendingQueriesResponse) GetPendingQueries() []Query { } func init() { - proto.RegisterType((*QueryPendingQueriesRequest)(nil), "stride.interchainquery.v1.QueryPendingQueriesRequest") - proto.RegisterType((*QueryPendingQueriesResponse)(nil), "stride.interchainquery.v1.QueryPendingQueriesResponse") + proto.RegisterType((*QueryPendingQueriesRequest)(nil), "symphony.interchainquery.v1.QueryPendingQueriesRequest") + proto.RegisterType((*QueryPendingQueriesResponse)(nil), "symphony.interchainquery.v1.QueryPendingQueriesResponse") } func init() { - proto.RegisterFile("stride/interchainquery/v1/query.proto", fileDescriptor_b720c147b9144d5b) -} - -var fileDescriptor_b720c147b9144d5b = []byte{ - // 314 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x2d, 0x2e, 0x29, 0xca, - 0x4c, 0x49, 0xd5, 0xcf, 0xcc, 0x2b, 0x49, 0x2d, 0x4a, 0xce, 0x48, 0xcc, 0xcc, 0x2b, 0x2c, 0x4d, - 0x2d, 0xaa, 0xd4, 0x2f, 0x33, 0xd4, 0x07, 0x33, 0xf4, 0x0a, 0x8a, 0xf2, 0x4b, 0xf2, 0x85, 0x24, - 0x21, 0xca, 0xf4, 0xd0, 0x94, 0xe9, 0x95, 0x19, 0x4a, 0x89, 0xa4, 0xe7, 0xa7, 0xe7, 0x83, 0x55, - 0xe9, 0x83, 0x58, 0x10, 0x0d, 0x52, 0x32, 0xe9, 0xf9, 0xf9, 0xe9, 0x39, 0xa9, 0xfa, 0x89, 0x05, - 0x99, 0xfa, 0x89, 0x79, 0x79, 0xf9, 0x25, 0x89, 0x25, 0x99, 0xf9, 0x79, 0xc5, 0x50, 0x59, 0x75, - 0xdc, 0xb6, 0xa6, 0xa7, 0xe6, 0xa5, 0x16, 0x67, 0x42, 0x15, 0x2a, 0xc9, 0x70, 0x49, 0x05, 0x82, - 0x64, 0x02, 0x52, 0xf3, 0x52, 0x32, 0xf3, 0xd2, 0x41, 0xec, 0xcc, 0xd4, 0xe2, 0xa0, 0xd4, 0xc2, - 0xd2, 0xd4, 0xe2, 0x12, 0xa5, 0x3c, 0x2e, 0x69, 0xac, 0xb2, 0xc5, 0x05, 0xf9, 0x79, 0xc5, 0xa9, - 0x42, 0xfe, 0x5c, 0xfc, 0x05, 0x10, 0x99, 0xf8, 0x42, 0x88, 0x94, 0x04, 0xa3, 0x02, 0xb3, 0x06, - 0xb7, 0x91, 0x82, 0x1e, 0x4e, 0xef, 0xe8, 0x81, 0x0d, 0x74, 0x62, 0x39, 0x71, 0x4f, 0x9e, 0x21, - 0x88, 0xaf, 0x00, 0xc5, 0x60, 0xa3, 0xb3, 0x8c, 0x5c, 0x3c, 0x60, 0xf9, 0xe0, 0xd4, 0xa2, 0xb2, - 0xcc, 0xe4, 0x54, 0xa1, 0x3d, 0x8c, 0x5c, 0x7c, 0xa8, 0x96, 0x0b, 0x99, 0x12, 0x32, 0x1b, 0xab, - 0x57, 0xa4, 0xcc, 0x48, 0xd5, 0x06, 0xf1, 0xa3, 0x92, 0x75, 0xd3, 0xe5, 0x27, 0x93, 0x99, 0x4c, - 0x85, 0x8c, 0xf5, 0x83, 0xc1, 0xfa, 0x75, 0x7d, 0x12, 0x93, 0x8a, 0xf5, 0x71, 0x04, 0x2f, 0x5a, - 0x68, 0x38, 0x05, 0x9f, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, - 0x13, 0x1e, 0xcb, 0x31, 0x5c, 0x78, 0x2c, 0xc7, 0x70, 0xe3, 0xb1, 0x1c, 0x43, 0x94, 0x65, 0x7a, - 0x66, 0x49, 0x46, 0x69, 0x92, 0x5e, 0x72, 0x7e, 0x2e, 0x36, 0x83, 0xcb, 0x8c, 0x2c, 0xf4, 0x2b, - 0x30, 0x8c, 0x2f, 0xa9, 0x2c, 0x48, 0x2d, 0x4e, 0x62, 0x03, 0xc7, 0x9c, 0x31, 0x20, 0x00, 0x00, - 0xff, 0xff, 0x61, 0x9f, 0xc8, 0xf4, 0x5a, 0x02, 0x00, 0x00, + proto.RegisterFile("symphony/interchainquery/v1/query.proto", fileDescriptor_76ba56aa09d0ed81) +} + +var fileDescriptor_76ba56aa09d0ed81 = []byte{ + // 326 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x91, 0xc1, 0x4a, 0xf3, 0x40, + 0x14, 0x85, 0x93, 0xff, 0x17, 0x17, 0x51, 0x2a, 0x04, 0x17, 0x92, 0x96, 0x28, 0xd9, 0xa8, 0x0b, + 0x33, 0xa4, 0x5d, 0x54, 0x71, 0xd7, 0x27, 0xb0, 0x15, 0x37, 0x6e, 0x64, 0x52, 0x2f, 0xd3, 0x81, + 0x76, 0xee, 0x34, 0x77, 0x1a, 0xcc, 0xd6, 0x27, 0x10, 0x7c, 0x1f, 0xd7, 0xdd, 0x59, 0x70, 0xe3, + 0x4a, 0xa4, 0xf5, 0x41, 0xa4, 0x49, 0xbb, 0x68, 0x2d, 0x11, 0x77, 0x77, 0xf8, 0xce, 0x3d, 0x87, + 0x73, 0xc7, 0x39, 0xa6, 0x6c, 0xa0, 0x7b, 0xa8, 0x32, 0x26, 0x95, 0x81, 0xa4, 0xdb, 0xe3, 0x52, + 0x0d, 0x47, 0x90, 0x64, 0x2c, 0x8d, 0x58, 0x3e, 0x84, 0x3a, 0x41, 0x83, 0x6e, 0x75, 0x29, 0x0c, + 0xd7, 0x84, 0x61, 0x1a, 0x79, 0xfb, 0x02, 0x05, 0xe6, 0x3a, 0x36, 0x9f, 0x8a, 0x15, 0xaf, 0x26, + 0x10, 0x45, 0x1f, 0x18, 0xd7, 0x92, 0x71, 0xa5, 0xd0, 0x70, 0x23, 0x51, 0xd1, 0x82, 0x9e, 0x96, + 0x25, 0x0b, 0x50, 0x40, 0x72, 0x21, 0x0d, 0x6a, 0x8e, 0xd7, 0x9e, 0x93, 0x2b, 0x50, 0xf7, 0x52, + 0x89, 0xf9, 0x2c, 0x81, 0x3a, 0x30, 0x1c, 0x01, 0x99, 0x40, 0x3b, 0xd5, 0x8d, 0x94, 0x34, 0x2a, + 0x02, 0xb7, 0xed, 0xec, 0xe9, 0x82, 0xdc, 0x0d, 0x0b, 0x74, 0x60, 0x1f, 0xfd, 0x3f, 0xd9, 0xa9, + 0x07, 0x61, 0x49, 0xa5, 0x30, 0xb7, 0x6c, 0x6d, 0x8d, 0x3f, 0x0e, 0xad, 0x4e, 0x45, 0xaf, 0x58, + 0xd7, 0x5f, 0x6d, 0x67, 0x37, 0xe7, 0xd7, 0x90, 0xa4, 0xb2, 0x0b, 0xee, 0x8b, 0xed, 0x54, 0x56, + 0xe3, 0xdd, 0xe6, 0xef, 0xee, 0x1b, 0xeb, 0x78, 0xe7, 0x7f, 0x5f, 0x2c, 0x9a, 0x06, 0x17, 0x8f, + 0x6f, 0x5f, 0xcf, 0xff, 0x1a, 0x6e, 0xc4, 0x4a, 0x4e, 0x1b, 0x83, 0xe1, 0x11, 0x5b, 0xbb, 0x48, + 0xeb, 0x66, 0x3c, 0xf5, 0xed, 0xc9, 0xd4, 0xb7, 0x3f, 0xa7, 0xbe, 0xfd, 0x34, 0xf3, 0xad, 0xc9, + 0xcc, 0xb7, 0xde, 0x67, 0xbe, 0x75, 0x7b, 0x29, 0xa4, 0xe9, 0x8d, 0xe2, 0xb0, 0x8b, 0x03, 0x86, + 0x34, 0x40, 0x92, 0x74, 0xd6, 0xe7, 0x31, 0x2d, 0x1f, 0x2c, 0xad, 0x37, 0xd9, 0xc3, 0x8f, 0x20, + 0x93, 0x69, 0xa0, 0x78, 0x3b, 0xff, 0xbf, 0xc6, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x98, 0xb0, + 0xb8, 0xa6, 0x66, 0x02, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -167,7 +168,7 @@ func NewQueryServiceClient(cc grpc1.ClientConn) QueryServiceClient { func (c *queryServiceClient) PendingQueries(ctx context.Context, in *QueryPendingQueriesRequest, opts ...grpc.CallOption) (*QueryPendingQueriesResponse, error) { out := new(QueryPendingQueriesResponse) - err := c.cc.Invoke(ctx, "/stride.interchainquery.v1.QueryService/PendingQueries", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.interchainquery.v1.QueryService/PendingQueries", in, out, opts...) if err != nil { return nil, err } @@ -201,7 +202,7 @@ func _QueryService_PendingQueries_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.interchainquery.v1.QueryService/PendingQueries", + FullMethod: "/symphony.interchainquery.v1.QueryService/PendingQueries", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServiceServer).PendingQueries(ctx, req.(*QueryPendingQueriesRequest)) @@ -210,7 +211,7 @@ func _QueryService_PendingQueries_Handler(srv interface{}, ctx context.Context, } var _QueryService_serviceDesc = grpc.ServiceDesc{ - ServiceName: "stride.interchainquery.v1.QueryService", + ServiceName: "symphony.interchainquery.v1.QueryService", HandlerType: (*QueryServiceServer)(nil), Methods: []grpc.MethodDesc{ { @@ -219,7 +220,7 @@ var _QueryService_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "stride/interchainquery/v1/query.proto", + Metadata: "symphony/interchainquery/v1/query.proto", } func (m *QueryPendingQueriesRequest) Marshal() (dAtA []byte, err error) { diff --git a/x/interchainquery/types/query.pb.gw.go b/x/interchainquery/types/query.pb.gw.go index aaf3eb83c58..7f4931ffe67 100644 --- a/x/interchainquery/types/query.pb.gw.go +++ b/x/interchainquery/types/query.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: stride/interchainquery/v1/query.proto +// source: symphony/interchainquery/v1/query.proto /* Package types is a reverse proxy. @@ -145,7 +145,7 @@ func RegisterQueryServiceHandlerClient(ctx context.Context, mux *runtime.ServeMu } var ( - pattern_QueryService_PendingQueries_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"Stride-Labs", "stride", "interchainquery", "pending_queries"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_QueryService_PendingQueries_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"symphony", "interchainquery", "v1beta1", "pending_queries"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( diff --git a/x/interchainquery/types/tx.pb.go b/x/interchainquery/types/tx.pb.go index bd11b07144a..6d934e1951c 100644 --- a/x/interchainquery/types/tx.pb.go +++ b/x/interchainquery/types/tx.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/interchainquery/v1/tx.proto +// source: symphony/interchainquery/v1/tx.proto package types @@ -47,7 +47,7 @@ func (m *MsgSubmitQueryResponse) Reset() { *m = MsgSubmitQueryResponse{} func (m *MsgSubmitQueryResponse) String() string { return proto.CompactTextString(m) } func (*MsgSubmitQueryResponse) ProtoMessage() {} func (*MsgSubmitQueryResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_10c13e8ba12d0950, []int{0} + return fileDescriptor_61f3676526d23906, []int{0} } func (m *MsgSubmitQueryResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -85,7 +85,7 @@ func (m *MsgSubmitQueryResponseResponse) Reset() { *m = MsgSubmitQueryRe func (m *MsgSubmitQueryResponseResponse) String() string { return proto.CompactTextString(m) } func (*MsgSubmitQueryResponseResponse) ProtoMessage() {} func (*MsgSubmitQueryResponseResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_10c13e8ba12d0950, []int{1} + return fileDescriptor_61f3676526d23906, []int{1} } func (m *MsgSubmitQueryResponseResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -115,51 +115,51 @@ func (m *MsgSubmitQueryResponseResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgSubmitQueryResponseResponse proto.InternalMessageInfo func init() { - proto.RegisterType((*MsgSubmitQueryResponse)(nil), "stride.interchainquery.v1.MsgSubmitQueryResponse") - proto.RegisterType((*MsgSubmitQueryResponseResponse)(nil), "stride.interchainquery.v1.MsgSubmitQueryResponseResponse") + proto.RegisterType((*MsgSubmitQueryResponse)(nil), "symphony.interchainquery.v1.MsgSubmitQueryResponse") + proto.RegisterType((*MsgSubmitQueryResponseResponse)(nil), "symphony.interchainquery.v1.MsgSubmitQueryResponseResponse") } func init() { - proto.RegisterFile("stride/interchainquery/v1/tx.proto", fileDescriptor_10c13e8ba12d0950) -} - -var fileDescriptor_10c13e8ba12d0950 = []byte{ - // 554 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x93, 0x3d, 0x6f, 0xd3, 0x40, - 0x18, 0xc7, 0x73, 0x0d, 0x7d, 0x73, 0x8b, 0xa0, 0x6e, 0x04, 0x6e, 0x00, 0x3b, 0xf2, 0x00, 0x21, - 0xa2, 0x3e, 0x25, 0x2c, 0x34, 0x4c, 0x64, 0xa2, 0x12, 0xe5, 0xc5, 0xd9, 0x58, 0x22, 0x3b, 0xbe, - 0x5e, 0x4e, 0x8a, 0x7d, 0xe6, 0xee, 0x12, 0x25, 0x1b, 0xea, 0x84, 0x98, 0x90, 0x58, 0x18, 0xb3, - 0xb0, 0x67, 0x40, 0xe2, 0x1b, 0x20, 0xc6, 0x0a, 0x16, 0xa6, 0x08, 0x25, 0x48, 0x61, 0xce, 0x27, - 0x40, 0xbe, 0x73, 0x0a, 0xa4, 0x61, 0x60, 0xb1, 0xef, 0x9e, 0xff, 0xef, 0x79, 0xd3, 0xf3, 0x9c, - 0x66, 0x73, 0xc1, 0x48, 0x80, 0x20, 0x89, 0x04, 0x62, 0xcd, 0x96, 0x47, 0xa2, 0x17, 0x1d, 0xc4, - 0xfa, 0xb0, 0x5b, 0x86, 0xa2, 0xe7, 0xc4, 0x8c, 0x0a, 0xaa, 0xef, 0x29, 0xc6, 0x59, 0x60, 0x9c, - 0x6e, 0x39, 0xbf, 0xe3, 0x85, 0x24, 0xa2, 0x50, 0x7e, 0x15, 0x9d, 0xdf, 0x6b, 0x52, 0x1e, 0x52, - 0xde, 0x90, 0x37, 0xa8, 0x2e, 0xa9, 0x74, 0x55, 0xdd, 0x60, 0xc8, 0x71, 0x92, 0x20, 0xe4, 0x38, - 0x15, 0x72, 0x98, 0x62, 0xaa, 0x1c, 0x92, 0x53, 0x6a, 0xbd, 0x8e, 0x29, 0xc5, 0x6d, 0x04, 0xbd, - 0x98, 0x40, 0x2f, 0x8a, 0xa8, 0xf0, 0x04, 0xa1, 0xd1, 0x3c, 0xd8, 0x0d, 0x81, 0xa2, 0x00, 0xb1, - 0x90, 0x44, 0x02, 0x36, 0x59, 0x3f, 0x16, 0x14, 0xc6, 0x8c, 0xd2, 0x63, 0x25, 0xdb, 0xef, 0xb3, - 0xda, 0x95, 0x23, 0x8e, 0xeb, 0x1d, 0x3f, 0x24, 0xe2, 0x59, 0x52, 0xaf, 0x8b, 0x78, 0x4c, 0x23, - 0x8e, 0x74, 0x47, 0xdb, 0x90, 0x5d, 0x34, 0x48, 0x60, 0x80, 0x02, 0x28, 0x6e, 0xd6, 0x76, 0x67, - 0x23, 0xeb, 0x52, 0xdf, 0x0b, 0xdb, 0x55, 0x7b, 0xae, 0xd8, 0xee, 0xba, 0x3c, 0x1e, 0x06, 0x09, - 0x2f, 0x1b, 0x4e, 0xf8, 0x95, 0x45, 0x7e, 0xae, 0xd8, 0xee, 0xba, 0x3c, 0x1e, 0x06, 0xfa, 0x6d, - 0x6d, 0x8d, 0x21, 0xde, 0x69, 0x0b, 0x23, 0x5b, 0x00, 0xc5, 0xed, 0xda, 0xce, 0x6c, 0x64, 0x5d, - 0x54, 0xb4, 0xb2, 0xdb, 0x6e, 0x0a, 0xe8, 0x8f, 0xb5, 0x4d, 0x59, 0x74, 0x83, 0xc6, 0xdc, 0xb8, - 0x50, 0x00, 0xc5, 0xad, 0xca, 0x35, 0xe7, 0x77, 0x63, 0x8e, 0x6a, 0xcc, 0x79, 0x9a, 0x30, 0x4f, - 0x62, 0x5e, 0xcb, 0xcd, 0x46, 0xd6, 0x65, 0x15, 0xea, 0xcc, 0xcf, 0x76, 0x37, 0xe2, 0x54, 0x4f, - 0x52, 0xb7, 0x10, 0xc1, 0x2d, 0x61, 0xac, 0x16, 0x40, 0x31, 0xfb, 0x67, 0x6a, 0x65, 0xb7, 0xdd, - 0x14, 0xd0, 0xef, 0x6b, 0xdb, 0xc7, 0x8c, 0x86, 0x0d, 0x2f, 0x08, 0x18, 0xe2, 0xdc, 0x58, 0x93, - 0x9d, 0x19, 0x5f, 0x3e, 0xec, 0xe7, 0xd2, 0xa1, 0x3d, 0x50, 0x4a, 0x5d, 0x30, 0x12, 0x61, 0x77, - 0x2b, 0xa1, 0x53, 0x53, 0xf5, 0xe1, 0xab, 0x81, 0x95, 0x79, 0x37, 0xb0, 0xc0, 0xcf, 0x81, 0x95, - 0x39, 0x99, 0x0e, 0x4b, 0x7f, 0xc5, 0x7a, 0x3d, 0x1d, 0x96, 0x6e, 0x2e, 0x6e, 0xd4, 0xf2, 0x61, - 0xd8, 0x05, 0xcd, 0x5c, 0xae, 0xcc, 0xff, 0x95, 0x4f, 0x40, 0xcb, 0x1e, 0x71, 0xac, 0x7f, 0x04, - 0xda, 0xee, 0xb2, 0x71, 0x96, 0x9d, 0x7f, 0xee, 0xa7, 0xb3, 0x3c, 0x74, 0xfe, 0xe0, 0xbf, 0x5d, - 0xce, 0xea, 0xad, 0x9c, 0x7c, 0xfd, 0xf1, 0x76, 0xe5, 0x4e, 0x15, 0x94, 0xec, 0x5b, 0xe7, 0x5e, - 0x8d, 0xe8, 0xc1, 0x6e, 0xd9, 0x47, 0xc2, 0x2b, 0x43, 0x2e, 0x63, 0x48, 0x73, 0x7e, 0xf5, 0xe5, - 0x74, 0x58, 0x02, 0xb5, 0xfa, 0xe7, 0xb1, 0x09, 0x4e, 0xc7, 0x26, 0xf8, 0x3e, 0x36, 0xc1, 0x9b, - 0x89, 0x99, 0x39, 0x9d, 0x98, 0x99, 0x6f, 0x13, 0x33, 0xf3, 0xfc, 0x00, 0x13, 0xd1, 0xea, 0xf8, - 0x4e, 0x93, 0x86, 0xb0, 0x2e, 0x2b, 0xdb, 0x7f, 0xe4, 0xf9, 0x1c, 0xa6, 0x8f, 0xb3, 0x5b, 0xb9, - 0x07, 0x7b, 0xe7, 0x93, 0xf5, 0x63, 0xc4, 0xfd, 0x35, 0xb9, 0xee, 0x77, 0x7f, 0x05, 0x00, 0x00, - 0xff, 0xff, 0x31, 0x26, 0x5d, 0x3c, 0xc9, 0x03, 0x00, 0x00, + proto.RegisterFile("symphony/interchainquery/v1/tx.proto", fileDescriptor_61f3676526d23906) +} + +var fileDescriptor_61f3676526d23906 = []byte{ + // 559 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x93, 0xbf, 0x6f, 0xd3, 0x40, + 0x14, 0xc7, 0x73, 0x0d, 0x4d, 0x5b, 0xb7, 0x08, 0xea, 0x46, 0x60, 0x52, 0xb0, 0x23, 0x0b, 0xa1, + 0x10, 0xa9, 0x3e, 0x92, 0x0a, 0x21, 0x25, 0x13, 0x99, 0xe8, 0x50, 0x7e, 0xb8, 0x62, 0x61, 0x89, + 0x9c, 0xf8, 0xea, 0x9c, 0x14, 0xdf, 0x19, 0xdf, 0x25, 0x8a, 0x37, 0xd4, 0x09, 0x31, 0x21, 0xb1, + 0x30, 0x66, 0x61, 0xcf, 0xc0, 0x9f, 0xc0, 0xc0, 0x58, 0xd1, 0x85, 0x29, 0x42, 0x09, 0x52, 0x98, + 0xf3, 0x17, 0x20, 0xdf, 0xd9, 0x05, 0x42, 0x60, 0xe8, 0x92, 0xdc, 0x7b, 0xdf, 0xcf, 0xfb, 0xa5, + 0xf7, 0xac, 0xdc, 0x66, 0x91, 0x1f, 0x74, 0x28, 0x89, 0x20, 0x26, 0x1c, 0x85, 0xed, 0x8e, 0x83, + 0xc9, 0xcb, 0x1e, 0x0a, 0x23, 0xd8, 0xaf, 0x40, 0x3e, 0xb0, 0x82, 0x90, 0x72, 0xaa, 0xee, 0xa6, + 0x94, 0xb5, 0x40, 0x59, 0xfd, 0x4a, 0x61, 0xdb, 0xf1, 0x31, 0xa1, 0x50, 0xfc, 0x4a, 0xbe, 0x70, + 0xa3, 0x4d, 0x99, 0x4f, 0x59, 0x53, 0x58, 0x50, 0x1a, 0x89, 0x74, 0x5d, 0x5a, 0xd0, 0x67, 0x5e, + 0x5c, 0xc2, 0x67, 0x5e, 0x22, 0xe4, 0x3d, 0xea, 0x51, 0x19, 0x10, 0xbf, 0x12, 0xef, 0x4d, 0x8f, + 0x52, 0xaf, 0x8b, 0xa0, 0x13, 0x60, 0xe8, 0x10, 0x42, 0xb9, 0xc3, 0x31, 0x25, 0x69, 0xb2, 0x5b, + 0x1c, 0x11, 0x17, 0x85, 0x3e, 0x26, 0x1c, 0xb6, 0xc3, 0x28, 0xe0, 0x14, 0x06, 0x21, 0xa5, 0xc7, + 0x52, 0x36, 0x3f, 0x64, 0x95, 0x6b, 0x87, 0xcc, 0x3b, 0xea, 0xb5, 0x7c, 0xcc, 0x9f, 0xc5, 0xfd, + 0xda, 0x88, 0x05, 0x94, 0x30, 0xa4, 0x5a, 0xca, 0xba, 0x98, 0xa2, 0x89, 0x5d, 0x0d, 0x14, 0x41, + 0x69, 0xa3, 0xb1, 0x33, 0x1f, 0x1b, 0x57, 0x22, 0xc7, 0xef, 0xd6, 0xcc, 0x54, 0x31, 0xed, 0x35, + 0xf1, 0x3c, 0x70, 0x63, 0x5e, 0x0c, 0x1c, 0xf3, 0x2b, 0x8b, 0x7c, 0xaa, 0x98, 0xf6, 0x9a, 0x78, + 0x1e, 0xb8, 0xea, 0x5d, 0x25, 0x17, 0x22, 0xd6, 0xeb, 0x72, 0x2d, 0x5b, 0x04, 0xa5, 0xad, 0xc6, + 0xf6, 0x7c, 0x6c, 0x5c, 0x96, 0xb4, 0xf4, 0x9b, 0x76, 0x02, 0xa8, 0x8f, 0x95, 0x0d, 0xd1, 0x74, + 0x93, 0x06, 0x4c, 0xbb, 0x54, 0x04, 0xa5, 0xcd, 0xea, 0xae, 0xf5, 0x6b, 0x30, 0x4b, 0x0e, 0x66, + 0x3d, 0x8d, 0x99, 0x27, 0x01, 0x6b, 0xe4, 0xe7, 0x63, 0xe3, 0xaa, 0x4c, 0x75, 0x1e, 0x67, 0xda, + 0xeb, 0x41, 0xa2, 0xc7, 0xa5, 0x3b, 0x08, 0x7b, 0x1d, 0xae, 0xad, 0x16, 0x41, 0x29, 0xfb, 0x7b, + 0x69, 0xe9, 0x37, 0xed, 0x04, 0x50, 0xeb, 0xca, 0xd6, 0x71, 0x48, 0xfd, 0xa6, 0xe3, 0xba, 0x21, + 0x62, 0x4c, 0xcb, 0x89, 0xc9, 0xb4, 0x2f, 0x1f, 0xf7, 0xf2, 0xc9, 0xd2, 0x1e, 0x4a, 0xe5, 0x88, + 0x87, 0x98, 0x78, 0xf6, 0x66, 0x4c, 0x27, 0xae, 0xda, 0xa3, 0xd7, 0x43, 0x23, 0xf3, 0x7e, 0x68, + 0x80, 0x1f, 0x43, 0x23, 0x73, 0x32, 0x1b, 0x95, 0xff, 0xc8, 0xf5, 0x66, 0x36, 0x2a, 0xdf, 0x59, + 0xbc, 0xa9, 0xe5, 0xcb, 0x30, 0x8b, 0x8a, 0xbe, 0x5c, 0x49, 0xff, 0xab, 0x67, 0x40, 0xc9, 0x1e, + 0x32, 0x4f, 0xfd, 0x04, 0x94, 0x9d, 0x65, 0xeb, 0xdc, 0xb7, 0xfe, 0x73, 0xa1, 0xd6, 0xf2, 0xe4, + 0x85, 0xfa, 0x05, 0x82, 0xce, 0x7b, 0xae, 0x9f, 0x9c, 0x7d, 0x7f, 0xb7, 0x72, 0xbf, 0x06, 0xca, + 0xe6, 0x3d, 0xf8, 0xcf, 0x8f, 0x88, 0x0f, 0x60, 0xbf, 0xd2, 0x42, 0xdc, 0xa9, 0x40, 0x26, 0x92, + 0x09, 0x77, 0x61, 0xf5, 0xd5, 0x6c, 0x54, 0x06, 0x8d, 0xe7, 0x9f, 0x27, 0x3a, 0x38, 0x9d, 0xe8, + 0xe0, 0xdb, 0x44, 0x07, 0x6f, 0xa7, 0x7a, 0xe6, 0x74, 0xaa, 0x67, 0xbe, 0x4e, 0xf5, 0xcc, 0x8b, + 0xba, 0x87, 0x79, 0xa7, 0xd7, 0xb2, 0xda, 0xd4, 0x87, 0x62, 0x11, 0x98, 0xed, 0x75, 0x9d, 0x16, + 0x4b, 0x0d, 0xd8, 0xaf, 0x3e, 0x80, 0x83, 0xbf, 0xcb, 0x45, 0x01, 0x62, 0xad, 0x9c, 0xb8, 0xfe, + 0xfd, 0x9f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x04, 0xd2, 0xa7, 0x5b, 0xdc, 0x03, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -188,7 +188,7 @@ func NewMsgClient(cc grpc1.ClientConn) MsgClient { func (c *msgClient) SubmitQueryResponse(ctx context.Context, in *MsgSubmitQueryResponse, opts ...grpc.CallOption) (*MsgSubmitQueryResponseResponse, error) { out := new(MsgSubmitQueryResponseResponse) - err := c.cc.Invoke(ctx, "/stride.interchainquery.v1.Msg/SubmitQueryResponse", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.interchainquery.v1.Msg/SubmitQueryResponse", in, out, opts...) if err != nil { return nil, err } @@ -223,7 +223,7 @@ func _Msg_SubmitQueryResponse_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.interchainquery.v1.Msg/SubmitQueryResponse", + FullMethod: "/symphony.interchainquery.v1.Msg/SubmitQueryResponse", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).SubmitQueryResponse(ctx, req.(*MsgSubmitQueryResponse)) @@ -232,7 +232,7 @@ func _Msg_SubmitQueryResponse_Handler(srv interface{}, ctx context.Context, dec } var _Msg_serviceDesc = grpc.ServiceDesc{ - ServiceName: "stride.interchainquery.v1.Msg", + ServiceName: "symphony.interchainquery.v1.Msg", HandlerType: (*MsgServer)(nil), Methods: []grpc.MethodDesc{ { @@ -241,7 +241,7 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "stride/interchainquery/v1/tx.proto", + Metadata: "symphony/interchainquery/v1/tx.proto", } func (m *MsgSubmitQueryResponse) Marshal() (dAtA []byte, err error) { diff --git a/x/interchainquery/types/tx.pb.gw.go b/x/interchainquery/types/tx.pb.gw.go index cb7e61b54d6..c2718119993 100644 --- a/x/interchainquery/types/tx.pb.gw.go +++ b/x/interchainquery/types/tx.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: stride/interchainquery/v1/tx.proto +// source: symphony/interchainquery/v1/tx.proto /* Package types is a reverse proxy. @@ -161,7 +161,7 @@ func RegisterMsgHandlerClient(ctx context.Context, mux *runtime.ServeMux, client } var ( - pattern_Msg_SubmitQueryResponse_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"interchainquery", "tx", "v1beta1", "submitquery"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Msg_SubmitQueryResponse_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"symphony", "interchainquery", "tx", "v1beta1", "submitquery"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( diff --git a/x/lockup/types/lock.pb.go b/x/lockup/types/lock.pb.go index 07dfb7aef1b..fdc4ae68a6a 100644 --- a/x/lockup/types/lock.pb.go +++ b/x/lockup/types/lock.pb.go @@ -6,12 +6,11 @@ package types import ( fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - types "github.com/cosmos/cosmos-sdk/types" + types1 "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" - _ "google.golang.org/protobuf/types/known/durationpb" - _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -816,7 +815,7 @@ func (m *PeriodLock) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Coins = append(m.Coins, types.Coin{}) + m.Coins = append(m.Coins, types1.Coin{}) if err := m.Coins[len(m.Coins)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } diff --git a/x/lockup/types/query.pb.go b/x/lockup/types/query.pb.go index 0adc16c432d..1a021bc307e 100644 --- a/x/lockup/types/query.pb.go +++ b/x/lockup/types/query.pb.go @@ -12,13 +12,12 @@ import ( _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - _ "google.golang.org/protobuf/types/known/durationpb" - _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" diff --git a/x/lockup/types/tx.pb.go b/x/lockup/types/tx.pb.go index c4afe68d0c0..1903e33bf74 100644 --- a/x/lockup/types/tx.pb.go +++ b/x/lockup/types/tx.pb.go @@ -7,17 +7,17 @@ import ( context "context" fmt "fmt" github_com_cosmos_cosmos_sdk_types "github.com/cosmos/cosmos-sdk/types" - types "github.com/cosmos/cosmos-sdk/types" + types1 "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/cosmos-sdk/types/msgservice" _ "github.com/cosmos/cosmos-sdk/types/tx/amino" _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - _ "google.golang.org/protobuf/types/known/durationpb" io "io" math "math" math_bits "math/bits" @@ -1805,7 +1805,7 @@ func (m *MsgLockTokens) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Coins = append(m.Coins, types.Coin{}) + m.Coins = append(m.Coins, types1.Coin{}) if err := m.Coins[len(m.Coins)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -2175,7 +2175,7 @@ func (m *MsgBeginUnlocking) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Coins = append(m.Coins, types.Coin{}) + m.Coins = append(m.Coins, types1.Coin{}) if err := m.Coins[len(m.Coins)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -2603,7 +2603,7 @@ func (m *MsgForceUnlock) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Coins = append(m.Coins, types.Coin{}) + m.Coins = append(m.Coins, types1.Coin{}) if err := m.Coins[len(m.Coins)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } diff --git a/x/mint/types/mint.pb.go b/x/mint/types/mint.pb.go index d1ec55c7e14..b4fcfaaeb4e 100644 --- a/x/mint/types/mint.pb.go +++ b/x/mint/types/mint.pb.go @@ -9,8 +9,7 @@ import ( _ "github.com/cosmos/cosmos-sdk/codec/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - _ "google.golang.org/protobuf/types/known/durationpb" - _ "google.golang.org/protobuf/types/known/timestamppb" + _ "github.com/cosmos/gogoproto/types" io "io" math "math" math_bits "math/bits" diff --git a/x/pool-incentives/types/genesis.pb.go b/x/pool-incentives/types/genesis.pb.go index af5ba77fe7f..5a7d724f963 100644 --- a/x/pool-incentives/types/genesis.pb.go +++ b/x/pool-incentives/types/genesis.pb.go @@ -7,8 +7,8 @@ import ( fmt "fmt" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" - _ "google.golang.org/protobuf/types/known/durationpb" io "io" math "math" math_bits "math/bits" diff --git a/x/pool-incentives/types/incentives.pb.go b/x/pool-incentives/types/incentives.pb.go index a186899a884..6c5dbd05f43 100644 --- a/x/pool-incentives/types/incentives.pb.go +++ b/x/pool-incentives/types/incentives.pb.go @@ -8,8 +8,8 @@ import ( fmt "fmt" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" - _ "google.golang.org/protobuf/types/known/durationpb" io "io" math "math" math_bits "math/bits" diff --git a/x/pool-incentives/types/query.pb.go b/x/pool-incentives/types/query.pb.go index c4306849a9f..8d35255be36 100644 --- a/x/pool-incentives/types/query.pb.go +++ b/x/pool-incentives/types/query.pb.go @@ -9,13 +9,13 @@ import ( _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" - types "github.com/osmosis-labs/osmosis/v27/x/incentives/types" + types1 "github.com/osmosis-labs/osmosis/v27/x/incentives/types" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - _ "google.golang.org/protobuf/types/known/durationpb" io "io" math "math" math_bits "math/bits" @@ -603,7 +603,7 @@ func (m *QueryExternalIncentiveGaugesRequest) XXX_DiscardUnknown() { var xxx_messageInfo_QueryExternalIncentiveGaugesRequest proto.InternalMessageInfo type QueryExternalIncentiveGaugesResponse struct { - Data []types.Gauge `protobuf:"bytes,1,rep,name=data,proto3" json:"data"` + Data []types1.Gauge `protobuf:"bytes,1,rep,name=data,proto3" json:"data"` } func (m *QueryExternalIncentiveGaugesResponse) Reset() { *m = QueryExternalIncentiveGaugesResponse{} } @@ -639,7 +639,7 @@ func (m *QueryExternalIncentiveGaugesResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryExternalIncentiveGaugesResponse proto.InternalMessageInfo -func (m *QueryExternalIncentiveGaugesResponse) GetData() []types.Gauge { +func (m *QueryExternalIncentiveGaugesResponse) GetData() []types1.Gauge { if m != nil { return m.Data } @@ -2682,7 +2682,7 @@ func (m *QueryExternalIncentiveGaugesResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Data = append(m.Data, types.Gauge{}) + m.Data = append(m.Data, types1.Gauge{}) if err := m.Data[len(m.Data)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } diff --git a/x/pool-incentives/types/shared.pb.go b/x/pool-incentives/types/shared.pb.go index d8d4f564e07..fbb21ac22a2 100644 --- a/x/pool-incentives/types/shared.pb.go +++ b/x/pool-incentives/types/shared.pb.go @@ -7,7 +7,7 @@ import ( fmt "fmt" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - _ "google.golang.org/protobuf/types/known/durationpb" + _ "github.com/cosmos/gogoproto/types" io "io" math "math" math_bits "math/bits" diff --git a/x/poolmanager/client/queryproto/query.pb.go b/x/poolmanager/client/queryproto/query.pb.go index e90795de29b..0a5e42969f2 100644 --- a/x/poolmanager/client/queryproto/query.pb.go +++ b/x/poolmanager/client/queryproto/query.pb.go @@ -15,12 +15,12 @@ import ( _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" types "github.com/osmosis-labs/osmosis/v27/x/poolmanager/types" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" diff --git a/x/poolmanager/client/queryprotov2/query.pb.go b/x/poolmanager/client/queryprotov2/query.pb.go index bc350ecde1e..7262305fb6e 100644 --- a/x/poolmanager/client/queryprotov2/query.pb.go +++ b/x/poolmanager/client/queryprotov2/query.pb.go @@ -11,12 +11,12 @@ import ( _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" github_com_osmosis_labs_osmosis_osmomath "github.com/osmosis-labs/osmosis/osmomath" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" diff --git a/x/poolmanager/types/genesis.pb.go b/x/poolmanager/types/genesis.pb.go index a323ae082b8..29c31a58684 100644 --- a/x/poolmanager/types/genesis.pb.go +++ b/x/poolmanager/types/genesis.pb.go @@ -12,7 +12,7 @@ import ( types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - _ "google.golang.org/protobuf/types/known/durationpb" + _ "github.com/cosmos/gogoproto/types" io "io" math "math" math_bits "math/bits" diff --git a/x/records/types/callbacks.pb.go b/x/records/types/callbacks.pb.go index be18bea5fec..55d82aa66ba 100644 --- a/x/records/types/callbacks.pb.go +++ b/x/records/types/callbacks.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/records/callbacks.proto +// source: symphony/records/callbacks.proto package types @@ -30,7 +30,7 @@ func (m *TransferCallback) Reset() { *m = TransferCallback{} } func (m *TransferCallback) String() string { return proto.CompactTextString(m) } func (*TransferCallback) ProtoMessage() {} func (*TransferCallback) Descriptor() ([]byte, []int) { - return fileDescriptor_6f7cdd5c1d8b3a46, []int{0} + return fileDescriptor_6e9fbf2aa9d588f4, []int{0} } func (m *TransferCallback) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -74,7 +74,7 @@ func (m *TransferLSMTokenCallback) Reset() { *m = TransferLSMTokenCallba func (m *TransferLSMTokenCallback) String() string { return proto.CompactTextString(m) } func (*TransferLSMTokenCallback) ProtoMessage() {} func (*TransferLSMTokenCallback) Descriptor() ([]byte, []int) { - return fileDescriptor_6f7cdd5c1d8b3a46, []int{1} + return fileDescriptor_6e9fbf2aa9d588f4, []int{1} } func (m *TransferLSMTokenCallback) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -111,28 +111,29 @@ func (m *TransferLSMTokenCallback) GetDeposit() *LSMTokenDeposit { } func init() { - proto.RegisterType((*TransferCallback)(nil), "stride.records.TransferCallback") - proto.RegisterType((*TransferLSMTokenCallback)(nil), "stride.records.TransferLSMTokenCallback") + proto.RegisterType((*TransferCallback)(nil), "symphony.records.TransferCallback") + proto.RegisterType((*TransferLSMTokenCallback)(nil), "symphony.records.TransferLSMTokenCallback") } -func init() { proto.RegisterFile("stride/records/callbacks.proto", fileDescriptor_6f7cdd5c1d8b3a46) } +func init() { proto.RegisterFile("symphony/records/callbacks.proto", fileDescriptor_6e9fbf2aa9d588f4) } -var fileDescriptor_6f7cdd5c1d8b3a46 = []byte{ - // 224 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x2b, 0x2e, 0x29, 0xca, - 0x4c, 0x49, 0xd5, 0x2f, 0x4a, 0x4d, 0xce, 0x2f, 0x4a, 0x29, 0xd6, 0x4f, 0x4e, 0xcc, 0xc9, 0x49, - 0x4a, 0x4c, 0xce, 0x2e, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x83, 0xc8, 0xeb, 0x41, - 0xe5, 0xa5, 0x64, 0xd0, 0xd4, 0x43, 0x69, 0x88, 0x6a, 0x25, 0x3b, 0x2e, 0x81, 0x90, 0xa2, 0xc4, - 0xbc, 0xe2, 0xb4, 0xd4, 0x22, 0x67, 0xa8, 0x41, 0x42, 0x5a, 0x5c, 0x82, 0x29, 0xa9, 0x05, 0xf9, - 0xc5, 0x99, 0x25, 0xf1, 0x10, 0xc5, 0xf1, 0x99, 0x29, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x2c, 0x41, - 0xfc, 0x50, 0x89, 0x20, 0xb0, 0xb8, 0x67, 0x8a, 0x52, 0x28, 0x97, 0x04, 0x4c, 0xbf, 0x4f, 0xb0, - 0x6f, 0x48, 0x7e, 0x76, 0x6a, 0x1e, 0xdc, 0x1c, 0x4b, 0x2e, 0x76, 0xa8, 0x72, 0xb0, 0x6e, 0x6e, - 0x23, 0x79, 0x3d, 0x54, 0xb7, 0xe9, 0xc1, 0xb4, 0xb8, 0x40, 0x4d, 0x85, 0xa9, 0x77, 0xf2, 0x3e, - 0xf1, 0x48, 0x8e, 0xf1, 0xc2, 0x23, 0x39, 0xc6, 0x07, 0x8f, 0xe4, 0x18, 0x27, 0x3c, 0x96, 0x63, - 0xb8, 0xf0, 0x58, 0x8e, 0xe1, 0xc6, 0x63, 0x39, 0x86, 0x28, 0xc3, 0xf4, 0xcc, 0x92, 0x8c, 0xd2, - 0x24, 0xbd, 0xe4, 0xfc, 0x5c, 0xfd, 0x60, 0xb0, 0x69, 0xba, 0x3e, 0x89, 0x49, 0xc5, 0xfa, 0x50, - 0x5f, 0x96, 0x19, 0x59, 0xe8, 0x57, 0xc0, 0xfd, 0x5a, 0x52, 0x59, 0x90, 0x5a, 0x9c, 0xc4, 0x06, - 0xf6, 0xaa, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x31, 0x92, 0x1b, 0x4f, 0x3a, 0x01, 0x00, 0x00, +var fileDescriptor_6e9fbf2aa9d588f4 = []byte{ + // 230 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x28, 0xae, 0xcc, 0x2d, + 0xc8, 0xc8, 0xcf, 0xab, 0xd4, 0x2f, 0x4a, 0x4d, 0xce, 0x2f, 0x4a, 0x29, 0xd6, 0x4f, 0x4e, 0xcc, + 0xc9, 0x49, 0x4a, 0x4c, 0xce, 0x2e, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x80, 0xa9, + 0xd0, 0x83, 0xaa, 0x90, 0x92, 0xc3, 0xd0, 0x03, 0xa5, 0x21, 0x3a, 0x94, 0xec, 0xb8, 0x04, 0x42, + 0x8a, 0x12, 0xf3, 0x8a, 0xd3, 0x52, 0x8b, 0x9c, 0xa1, 0x86, 0x09, 0x69, 0x71, 0x09, 0xa6, 0xa4, + 0x16, 0xe4, 0x17, 0x67, 0x96, 0xc4, 0x43, 0x14, 0xc7, 0x67, 0xa6, 0x48, 0x30, 0x2a, 0x30, 0x6a, + 0xb0, 0x04, 0xf1, 0x43, 0x25, 0x82, 0xc0, 0xe2, 0x9e, 0x29, 0x4a, 0xe1, 0x5c, 0x12, 0x30, 0xfd, + 0x3e, 0xc1, 0xbe, 0x21, 0xf9, 0xd9, 0xa9, 0x79, 0x70, 0x73, 0xac, 0xb9, 0xd8, 0xa1, 0xca, 0xc1, + 0xba, 0xb9, 0x8d, 0x14, 0xf5, 0xd0, 0xdd, 0xa7, 0x07, 0xd3, 0xe4, 0x02, 0x35, 0x17, 0xa6, 0xc3, + 0xc9, 0xf7, 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, 0x18, 0x1f, 0x3c, 0x92, 0x63, 0x9c, 0xf0, + 0x58, 0x8e, 0xe1, 0xc2, 0x63, 0x39, 0x86, 0x1b, 0x8f, 0xe5, 0x18, 0xa2, 0x8c, 0xd3, 0x33, 0x4b, + 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0xf3, 0x8b, 0x73, 0xf3, 0x8b, 0x33, 0x8b, 0x75, + 0x73, 0x12, 0x93, 0x8a, 0x61, 0x1c, 0xfd, 0x32, 0x23, 0x73, 0xfd, 0x0a, 0xb8, 0x7f, 0x4b, 0x2a, + 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0xde, 0x35, 0x06, 0x04, 0x00, 0x00, 0xff, 0xff, 0x05, 0xf3, + 0xb8, 0xed, 0x44, 0x01, 0x00, 0x00, } func (m *TransferCallback) Marshal() (dAtA []byte, err error) { diff --git a/x/records/types/genesis.pb.go b/x/records/types/genesis.pb.go index b571cd38f84..84cf806d9d6 100644 --- a/x/records/types/genesis.pb.go +++ b/x/records/types/genesis.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/records/genesis.proto +// source: symphony/records/genesis.proto package types @@ -39,7 +39,7 @@ func (m *GenesisState) Reset() { *m = GenesisState{} } func (m *GenesisState) String() string { return proto.CompactTextString(m) } func (*GenesisState) ProtoMessage() {} func (*GenesisState) Descriptor() ([]byte, []int) { - return fileDescriptor_98cfd0253c8b6797, []int{0} + return fileDescriptor_09546cfc30b2238f, []int{0} } func (m *GenesisState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -125,40 +125,40 @@ func (m *GenesisState) GetLsmTokenDepositList() []LSMTokenDeposit { } func init() { - proto.RegisterType((*GenesisState)(nil), "stride.records.GenesisState") + proto.RegisterType((*GenesisState)(nil), "symphony.records.GenesisState") } -func init() { proto.RegisterFile("stride/records/genesis.proto", fileDescriptor_98cfd0253c8b6797) } +func init() { proto.RegisterFile("symphony/records/genesis.proto", fileDescriptor_09546cfc30b2238f) } -var fileDescriptor_98cfd0253c8b6797 = []byte{ - // 420 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0xc1, 0xae, 0x93, 0x40, - 0x18, 0x85, 0xc1, 0x8b, 0xbd, 0xde, 0xa9, 0x31, 0x91, 0x36, 0x15, 0xdb, 0x4a, 0x89, 0x71, 0xc1, - 0x46, 0xd0, 0xea, 0xc2, 0x9d, 0x49, 0xd5, 0x18, 0x63, 0x4d, 0x0c, 0xd8, 0x4d, 0x37, 0x04, 0x98, - 0x09, 0x9d, 0x58, 0x18, 0x32, 0x33, 0x18, 0x7d, 0x0b, 0x1f, 0xab, 0xcb, 0xee, 0x74, 0x65, 0x4c, - 0xfb, 0x22, 0x86, 0x99, 0x69, 0x53, 0x08, 0xae, 0x5a, 0xe6, 0xfc, 0xe7, 0x9c, 0xef, 0x4f, 0x7e, - 0x30, 0x65, 0x9c, 0x62, 0x88, 0x7c, 0x8a, 0x52, 0x42, 0x21, 0xf3, 0x33, 0x54, 0x20, 0x86, 0x99, - 0x57, 0x52, 0xc2, 0x89, 0x79, 0x4f, 0xaa, 0x9e, 0x52, 0xc7, 0xc3, 0x8c, 0x64, 0x44, 0x48, 0x7e, - 0xfd, 0x4f, 0x4e, 0x8d, 0x27, 0xad, 0x8c, 0x32, 0xa6, 0x71, 0xae, 0x22, 0xc6, 0xed, 0x02, 0xf5, - 0x2b, 0xd5, 0xc7, 0xbf, 0x0c, 0x70, 0xf7, 0xbd, 0xac, 0x0c, 0x79, 0xcc, 0x91, 0xf9, 0x12, 0xf4, - 0xa4, 0xdd, 0xd2, 0x1d, 0xdd, 0xed, 0xcf, 0x47, 0x5e, 0x13, 0xc1, 0xfb, 0x2c, 0xd4, 0x85, 0xb1, - 0xfb, 0x33, 0xd3, 0x02, 0x35, 0x6b, 0x3e, 0x00, 0xd7, 0x25, 0xa1, 0x3c, 0xc2, 0xd0, 0xba, 0xe5, - 0xe8, 0xee, 0x4d, 0xd0, 0xab, 0x3f, 0x3f, 0x40, 0x13, 0x83, 0x49, 0xc5, 0x10, 0x8d, 0x28, 0x82, - 0x28, 0x2f, 0x39, 0x26, 0x45, 0x24, 0x83, 0xa2, 0x2d, 0x66, 0xdc, 0xba, 0x72, 0xae, 0xdc, 0xfe, - 0xfc, 0x49, 0xbb, 0x63, 0xc5, 0x10, 0x0d, 0xce, 0x8e, 0x40, 0xbc, 0xaa, 0x46, 0xab, 0xea, 0xd0, - 0x96, 0x98, 0x71, 0xf3, 0x35, 0x98, 0xfe, 0xa7, 0x2a, 0x25, 0x55, 0xc1, 0x2d, 0xc3, 0xd1, 0x5d, - 0x23, 0x78, 0xd8, 0xe5, 0x7f, 0x53, 0x0f, 0xd4, 0xac, 0xa8, 0x24, 0xe9, 0x26, 0xaa, 0x8a, 0x84, - 0x14, 0x10, 0x17, 0x59, 0x83, 0xf5, 0x76, 0x37, 0xeb, 0xbb, 0xda, 0xb2, 0x3a, 0x39, 0x9a, 0xac, - 0xa8, 0x43, 0x13, 0xac, 0x21, 0x18, 0x40, 0x54, 0x12, 0x86, 0x79, 0xa3, 0xe2, 0x5a, 0x54, 0x3c, - 0x6a, 0x57, 0xbc, 0x95, 0xa3, 0x8d, 0xec, 0xfb, 0xf0, 0xf2, 0x51, 0x84, 0x3e, 0x03, 0xc3, 0x56, - 0xa8, 0x5c, 0xfc, 0x8e, 0x58, 0xdc, 0x6c, 0x18, 0xe4, 0xc6, 0x6b, 0x30, 0xda, 0xb2, 0x3c, 0xe2, - 0xe4, 0x2b, 0x2a, 0xa2, 0x93, 0x57, 0x90, 0xdc, 0x08, 0x92, 0x59, 0x9b, 0x64, 0x19, 0x7e, 0xfa, - 0x52, 0x0f, 0x2b, 0x22, 0xc5, 0x32, 0xd8, 0xb2, 0xfc, 0xf2, 0xb9, 0xa6, 0x59, 0x7c, 0xdc, 0x1d, - 0x6c, 0x7d, 0x7f, 0xb0, 0xf5, 0xbf, 0x07, 0x5b, 0xff, 0x79, 0xb4, 0xb5, 0xfd, 0xd1, 0xd6, 0x7e, - 0x1f, 0x6d, 0x6d, 0xfd, 0x3c, 0xc3, 0x7c, 0x53, 0x25, 0x5e, 0x4a, 0x72, 0x3f, 0x14, 0xf9, 0x4f, - 0x97, 0x71, 0xc2, 0x7c, 0x75, 0xa8, 0xdf, 0xe6, 0xaf, 0xfc, 0xef, 0xe7, 0x73, 0xe5, 0x3f, 0x4a, - 0xc4, 0x92, 0x9e, 0xb8, 0xd6, 0x17, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x7f, 0xd6, 0xa7, 0x41, - 0x2e, 0x03, 0x00, 0x00, +var fileDescriptor_09546cfc30b2238f = []byte{ + // 427 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0x4f, 0x6b, 0xd4, 0x40, + 0x18, 0xc6, 0x37, 0x76, 0xdd, 0xda, 0xa9, 0x07, 0x4d, 0x8b, 0xc6, 0x55, 0xd3, 0xe8, 0x41, 0x72, + 0x31, 0x91, 0x2d, 0xe8, 0x51, 0xa8, 0x8a, 0x08, 0x2d, 0x48, 0xea, 0x5e, 0x44, 0x08, 0xf9, 0x33, + 0x64, 0x87, 0x26, 0xf3, 0x0e, 0xf3, 0x4e, 0xc4, 0xfd, 0x16, 0x7e, 0xac, 0x1e, 0x7b, 0xf4, 0x24, + 0xba, 0xfb, 0x45, 0x4a, 0x66, 0x92, 0xd2, 0x34, 0xdb, 0x53, 0x32, 0xf3, 0xbc, 0xcf, 0xf3, 0xfc, + 0x5e, 0x18, 0xe2, 0xe2, 0xb2, 0x12, 0x0b, 0xe0, 0xcb, 0x50, 0xd2, 0x0c, 0x64, 0x8e, 0x61, 0x41, + 0x39, 0x45, 0x86, 0x81, 0x90, 0xa0, 0xc0, 0x7e, 0xd0, 0xe9, 0x41, 0xab, 0x4f, 0xf7, 0x0b, 0x28, + 0x40, 0x8b, 0x61, 0xf3, 0x67, 0xe6, 0xa6, 0xcf, 0x07, 0x39, 0x22, 0x91, 0x49, 0xd5, 0xc6, 0x4c, + 0x87, 0x35, 0xed, 0xd7, 0xe8, 0x2f, 0xff, 0x8f, 0xc9, 0xfd, 0xcf, 0xa6, 0xf8, 0x54, 0x25, 0x8a, + 0xda, 0x6f, 0xc9, 0xc4, 0x04, 0x38, 0x96, 0x67, 0xf9, 0xbb, 0x33, 0x27, 0xb8, 0x09, 0x12, 0x7c, + 0xd5, 0xfa, 0xd1, 0xf8, 0xfc, 0xef, 0xc1, 0x28, 0x6a, 0xa7, 0xed, 0xc7, 0x64, 0x5b, 0x80, 0x54, + 0x31, 0xcb, 0x9d, 0x3b, 0x9e, 0xe5, 0xef, 0x44, 0x93, 0xe6, 0xf8, 0x25, 0xb7, 0xcf, 0xc8, 0xd3, + 0x1a, 0xa9, 0x8c, 0x25, 0xcd, 0x69, 0x25, 0x14, 0x03, 0x1e, 0x9b, 0xa0, 0xb8, 0x64, 0xa8, 0x9c, + 0x2d, 0x6f, 0xcb, 0xdf, 0x9d, 0xbd, 0x1a, 0xb6, 0xcc, 0x91, 0xca, 0xe8, 0xca, 0x13, 0xe9, 0xdb, + 0xb6, 0xd3, 0xa9, 0x37, 0x68, 0xc7, 0x0c, 0x95, 0xfd, 0x9e, 0x3c, 0xbb, 0xa5, 0x2c, 0x83, 0x9a, + 0x2b, 0x67, 0xec, 0x59, 0xfe, 0x38, 0x7a, 0xb2, 0xc9, 0xff, 0xa1, 0x19, 0x68, 0x68, 0xa9, 0x80, + 0x6c, 0x11, 0xd7, 0x3c, 0x05, 0x9e, 0x33, 0x5e, 0xf4, 0x68, 0xef, 0xde, 0x46, 0xfb, 0xa9, 0x31, + 0xcd, 0x3b, 0x4f, 0x9f, 0x96, 0x6e, 0xd0, 0x34, 0xed, 0x9c, 0xec, 0xe5, 0x54, 0x00, 0x32, 0xd5, + 0x2b, 0xd9, 0xd6, 0x25, 0x07, 0xc3, 0x92, 0x8f, 0x66, 0xb8, 0x97, 0xfe, 0x30, 0xbf, 0x7e, 0xa9, + 0x63, 0xdf, 0x90, 0xfd, 0x1b, 0xb1, 0x66, 0xf9, 0x7b, 0x7a, 0x79, 0xbb, 0x67, 0x30, 0x5b, 0xff, + 0x20, 0x8f, 0x4a, 0xac, 0x62, 0x05, 0x67, 0x94, 0xc7, 0x9d, 0x57, 0xb3, 0xec, 0x68, 0x96, 0x17, + 0x43, 0x96, 0xe3, 0xd3, 0x93, 0x6f, 0xcd, 0x78, 0xcb, 0xd4, 0xd2, 0xec, 0x95, 0x58, 0x5d, 0xbf, + 0x6e, 0x78, 0x8e, 0x4e, 0xce, 0x57, 0xae, 0x75, 0xb1, 0x72, 0xad, 0x7f, 0x2b, 0xd7, 0xfa, 0xbd, + 0x76, 0x47, 0x17, 0x6b, 0x77, 0xf4, 0x67, 0xed, 0x8e, 0xbe, 0x1f, 0x16, 0x4c, 0x2d, 0xea, 0x34, + 0xc8, 0xa0, 0x0a, 0x01, 0x2b, 0x40, 0x86, 0xaf, 0xcb, 0x24, 0xc5, 0xee, 0x10, 0xfe, 0x9c, 0xbd, + 0x0b, 0x7f, 0x5d, 0x3d, 0x5d, 0xb5, 0x14, 0x14, 0xd3, 0x89, 0x7e, 0xb9, 0x87, 0x97, 0x01, 0x00, + 0x00, 0xff, 0xff, 0x79, 0x68, 0x15, 0x5f, 0x42, 0x03, 0x00, 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/x/records/types/params.pb.go b/x/records/types/params.pb.go index e73f8920c7e..aa033d62800 100644 --- a/x/records/types/params.pb.go +++ b/x/records/types/params.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/records/params.proto +// source: symphony/records/params.proto package types @@ -30,7 +30,7 @@ func (m *Params) Reset() { *m = Params{} } func (m *Params) String() string { return proto.CompactTextString(m) } func (*Params) ProtoMessage() {} func (*Params) Descriptor() ([]byte, []int) { - return fileDescriptor_5d92633ea4bee482, []int{0} + return fileDescriptor_3be9a134f5aa9c5d, []int{0} } func (m *Params) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -60,22 +60,22 @@ func (m *Params) XXX_DiscardUnknown() { var xxx_messageInfo_Params proto.InternalMessageInfo func init() { - proto.RegisterType((*Params)(nil), "stride.records.Params") + proto.RegisterType((*Params)(nil), "symphony.records.Params") } -func init() { proto.RegisterFile("stride/records/params.proto", fileDescriptor_5d92633ea4bee482) } +func init() { proto.RegisterFile("symphony/records/params.proto", fileDescriptor_3be9a134f5aa9c5d) } -var fileDescriptor_5d92633ea4bee482 = []byte{ - // 136 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x2e, 0x2e, 0x29, 0xca, - 0x4c, 0x49, 0xd5, 0x2f, 0x4a, 0x4d, 0xce, 0x2f, 0x4a, 0x29, 0xd6, 0x2f, 0x48, 0x2c, 0x4a, 0xcc, - 0x2d, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x83, 0x48, 0xea, 0x41, 0x25, 0x95, 0x38, - 0xb8, 0xd8, 0x02, 0xc0, 0xf2, 0x4e, 0xde, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, 0xc7, 0xf8, - 0xe0, 0x91, 0x1c, 0xe3, 0x84, 0xc7, 0x72, 0x0c, 0x17, 0x1e, 0xcb, 0x31, 0xdc, 0x78, 0x2c, 0xc7, - 0x10, 0x65, 0x98, 0x9e, 0x59, 0x92, 0x51, 0x9a, 0xa4, 0x97, 0x9c, 0x9f, 0xab, 0x1f, 0x0c, 0xd6, - 0xae, 0xeb, 0x93, 0x98, 0x54, 0xac, 0x0f, 0xb5, 0xa7, 0xcc, 0xc8, 0x42, 0xbf, 0x02, 0x6e, 0x5b, - 0x49, 0x65, 0x41, 0x6a, 0x71, 0x12, 0x1b, 0xd8, 0x36, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xb7, 0x2e, 0xde, 0x39, 0x8c, 0x00, 0x00, 0x00, +var fileDescriptor_3be9a134f5aa9c5d = []byte{ + // 141 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x2d, 0xae, 0xcc, 0x2d, + 0xc8, 0xc8, 0xcf, 0xab, 0xd4, 0x2f, 0x4a, 0x4d, 0xce, 0x2f, 0x4a, 0x29, 0xd6, 0x2f, 0x48, 0x2c, + 0x4a, 0xcc, 0x2d, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x80, 0x49, 0xeb, 0x41, 0xa5, + 0x95, 0x38, 0xb8, 0xd8, 0x02, 0xc0, 0x2a, 0x9c, 0x7c, 0x4f, 0x3c, 0x92, 0x63, 0xbc, 0xf0, 0x48, + 0x8e, 0xf1, 0xc1, 0x23, 0x39, 0xc6, 0x09, 0x8f, 0xe5, 0x18, 0x2e, 0x3c, 0x96, 0x63, 0xb8, 0xf1, + 0x58, 0x8e, 0x21, 0xca, 0x38, 0x3d, 0xb3, 0x24, 0xa3, 0x34, 0x49, 0x2f, 0x39, 0x3f, 0x57, 0x3f, + 0xbf, 0x38, 0x37, 0xbf, 0x38, 0xb3, 0x58, 0x37, 0x27, 0x31, 0xa9, 0x18, 0xc6, 0xd1, 0x2f, 0x33, + 0x32, 0xd7, 0xaf, 0x80, 0xdb, 0x58, 0x52, 0x59, 0x90, 0x5a, 0x9c, 0xc4, 0x06, 0xb6, 0xd1, 0x18, + 0x10, 0x00, 0x00, 0xff, 0xff, 0xbc, 0xbd, 0xac, 0x1f, 0x92, 0x00, 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { diff --git a/x/records/types/query.pb.go b/x/records/types/query.pb.go index 9f99116152a..1f171a2e749 100644 --- a/x/records/types/query.pb.go +++ b/x/records/types/query.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/records/query.proto +// source: symphony/records/query.proto package types @@ -38,7 +38,7 @@ func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } func (*QueryParamsRequest) ProtoMessage() {} func (*QueryParamsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_25e7cc311be81f7b, []int{0} + return fileDescriptor_850df8dcb4d85cd0, []int{0} } func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -77,7 +77,7 @@ func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } func (*QueryParamsResponse) ProtoMessage() {} func (*QueryParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_25e7cc311be81f7b, []int{1} + return fileDescriptor_850df8dcb4d85cd0, []int{1} } func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -121,7 +121,7 @@ func (m *QueryGetDepositRecordRequest) Reset() { *m = QueryGetDepositRec func (m *QueryGetDepositRecordRequest) String() string { return proto.CompactTextString(m) } func (*QueryGetDepositRecordRequest) ProtoMessage() {} func (*QueryGetDepositRecordRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_25e7cc311be81f7b, []int{2} + return fileDescriptor_850df8dcb4d85cd0, []int{2} } func (m *QueryGetDepositRecordRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -165,7 +165,7 @@ func (m *QueryGetDepositRecordResponse) Reset() { *m = QueryGetDepositRe func (m *QueryGetDepositRecordResponse) String() string { return proto.CompactTextString(m) } func (*QueryGetDepositRecordResponse) ProtoMessage() {} func (*QueryGetDepositRecordResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_25e7cc311be81f7b, []int{3} + return fileDescriptor_850df8dcb4d85cd0, []int{3} } func (m *QueryGetDepositRecordResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -209,7 +209,7 @@ func (m *QueryAllDepositRecordRequest) Reset() { *m = QueryAllDepositRec func (m *QueryAllDepositRecordRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllDepositRecordRequest) ProtoMessage() {} func (*QueryAllDepositRecordRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_25e7cc311be81f7b, []int{4} + return fileDescriptor_850df8dcb4d85cd0, []int{4} } func (m *QueryAllDepositRecordRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -254,7 +254,7 @@ func (m *QueryAllDepositRecordResponse) Reset() { *m = QueryAllDepositRe func (m *QueryAllDepositRecordResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllDepositRecordResponse) ProtoMessage() {} func (*QueryAllDepositRecordResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_25e7cc311be81f7b, []int{5} + return fileDescriptor_850df8dcb4d85cd0, []int{5} } func (m *QueryAllDepositRecordResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -305,7 +305,7 @@ func (m *QueryDepositRecordByHostRequest) Reset() { *m = QueryDepositRec func (m *QueryDepositRecordByHostRequest) String() string { return proto.CompactTextString(m) } func (*QueryDepositRecordByHostRequest) ProtoMessage() {} func (*QueryDepositRecordByHostRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_25e7cc311be81f7b, []int{6} + return fileDescriptor_850df8dcb4d85cd0, []int{6} } func (m *QueryDepositRecordByHostRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -349,7 +349,7 @@ func (m *QueryDepositRecordByHostResponse) Reset() { *m = QueryDepositRe func (m *QueryDepositRecordByHostResponse) String() string { return proto.CompactTextString(m) } func (*QueryDepositRecordByHostResponse) ProtoMessage() {} func (*QueryDepositRecordByHostResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_25e7cc311be81f7b, []int{7} + return fileDescriptor_850df8dcb4d85cd0, []int{7} } func (m *QueryDepositRecordByHostResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -393,7 +393,7 @@ func (m *QueryGetUserRedemptionRecordRequest) Reset() { *m = QueryGetUse func (m *QueryGetUserRedemptionRecordRequest) String() string { return proto.CompactTextString(m) } func (*QueryGetUserRedemptionRecordRequest) ProtoMessage() {} func (*QueryGetUserRedemptionRecordRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_25e7cc311be81f7b, []int{8} + return fileDescriptor_850df8dcb4d85cd0, []int{8} } func (m *QueryGetUserRedemptionRecordRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -437,7 +437,7 @@ func (m *QueryGetUserRedemptionRecordResponse) Reset() { *m = QueryGetUs func (m *QueryGetUserRedemptionRecordResponse) String() string { return proto.CompactTextString(m) } func (*QueryGetUserRedemptionRecordResponse) ProtoMessage() {} func (*QueryGetUserRedemptionRecordResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_25e7cc311be81f7b, []int{9} + return fileDescriptor_850df8dcb4d85cd0, []int{9} } func (m *QueryGetUserRedemptionRecordResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -481,7 +481,7 @@ func (m *QueryAllUserRedemptionRecordRequest) Reset() { *m = QueryAllUse func (m *QueryAllUserRedemptionRecordRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllUserRedemptionRecordRequest) ProtoMessage() {} func (*QueryAllUserRedemptionRecordRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_25e7cc311be81f7b, []int{10} + return fileDescriptor_850df8dcb4d85cd0, []int{10} } func (m *QueryAllUserRedemptionRecordRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -526,7 +526,7 @@ func (m *QueryAllUserRedemptionRecordResponse) Reset() { *m = QueryAllUs func (m *QueryAllUserRedemptionRecordResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllUserRedemptionRecordResponse) ProtoMessage() {} func (*QueryAllUserRedemptionRecordResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_25e7cc311be81f7b, []int{11} + return fileDescriptor_850df8dcb4d85cd0, []int{11} } func (m *QueryAllUserRedemptionRecordResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -586,7 +586,7 @@ func (m *QueryAllUserRedemptionRecordForUserRequest) String() string { } func (*QueryAllUserRedemptionRecordForUserRequest) ProtoMessage() {} func (*QueryAllUserRedemptionRecordForUserRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_25e7cc311be81f7b, []int{12} + return fileDescriptor_850df8dcb4d85cd0, []int{12} } func (m *QueryAllUserRedemptionRecordForUserRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -663,7 +663,7 @@ func (m *QueryAllUserRedemptionRecordForUserResponse) String() string { } func (*QueryAllUserRedemptionRecordForUserResponse) ProtoMessage() {} func (*QueryAllUserRedemptionRecordForUserResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_25e7cc311be81f7b, []int{13} + return fileDescriptor_850df8dcb4d85cd0, []int{13} } func (m *QueryAllUserRedemptionRecordForUserResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -714,7 +714,7 @@ func (m *QueryGetEpochUnbondingRecordRequest) Reset() { *m = QueryGetEpo func (m *QueryGetEpochUnbondingRecordRequest) String() string { return proto.CompactTextString(m) } func (*QueryGetEpochUnbondingRecordRequest) ProtoMessage() {} func (*QueryGetEpochUnbondingRecordRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_25e7cc311be81f7b, []int{14} + return fileDescriptor_850df8dcb4d85cd0, []int{14} } func (m *QueryGetEpochUnbondingRecordRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -758,7 +758,7 @@ func (m *QueryGetEpochUnbondingRecordResponse) Reset() { *m = QueryGetEp func (m *QueryGetEpochUnbondingRecordResponse) String() string { return proto.CompactTextString(m) } func (*QueryGetEpochUnbondingRecordResponse) ProtoMessage() {} func (*QueryGetEpochUnbondingRecordResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_25e7cc311be81f7b, []int{15} + return fileDescriptor_850df8dcb4d85cd0, []int{15} } func (m *QueryGetEpochUnbondingRecordResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -802,7 +802,7 @@ func (m *QueryAllEpochUnbondingRecordRequest) Reset() { *m = QueryAllEpo func (m *QueryAllEpochUnbondingRecordRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllEpochUnbondingRecordRequest) ProtoMessage() {} func (*QueryAllEpochUnbondingRecordRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_25e7cc311be81f7b, []int{16} + return fileDescriptor_850df8dcb4d85cd0, []int{16} } func (m *QueryAllEpochUnbondingRecordRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -847,7 +847,7 @@ func (m *QueryAllEpochUnbondingRecordResponse) Reset() { *m = QueryAllEp func (m *QueryAllEpochUnbondingRecordResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllEpochUnbondingRecordResponse) ProtoMessage() {} func (*QueryAllEpochUnbondingRecordResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_25e7cc311be81f7b, []int{17} + return fileDescriptor_850df8dcb4d85cd0, []int{17} } func (m *QueryAllEpochUnbondingRecordResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -899,7 +899,7 @@ func (m *QueryLSMDepositRequest) Reset() { *m = QueryLSMDepositRequest{} func (m *QueryLSMDepositRequest) String() string { return proto.CompactTextString(m) } func (*QueryLSMDepositRequest) ProtoMessage() {} func (*QueryLSMDepositRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_25e7cc311be81f7b, []int{18} + return fileDescriptor_850df8dcb4d85cd0, []int{18} } func (m *QueryLSMDepositRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -950,7 +950,7 @@ func (m *QueryLSMDepositResponse) Reset() { *m = QueryLSMDepositResponse func (m *QueryLSMDepositResponse) String() string { return proto.CompactTextString(m) } func (*QueryLSMDepositResponse) ProtoMessage() {} func (*QueryLSMDepositResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_25e7cc311be81f7b, []int{19} + return fileDescriptor_850df8dcb4d85cd0, []int{19} } func (m *QueryLSMDepositResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -996,7 +996,7 @@ func (m *QueryLSMDepositsRequest) Reset() { *m = QueryLSMDepositsRequest func (m *QueryLSMDepositsRequest) String() string { return proto.CompactTextString(m) } func (*QueryLSMDepositsRequest) ProtoMessage() {} func (*QueryLSMDepositsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_25e7cc311be81f7b, []int{20} + return fileDescriptor_850df8dcb4d85cd0, []int{20} } func (m *QueryLSMDepositsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1054,7 +1054,7 @@ func (m *QueryLSMDepositsResponse) Reset() { *m = QueryLSMDepositsRespon func (m *QueryLSMDepositsResponse) String() string { return proto.CompactTextString(m) } func (*QueryLSMDepositsResponse) ProtoMessage() {} func (*QueryLSMDepositsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_25e7cc311be81f7b, []int{21} + return fileDescriptor_850df8dcb4d85cd0, []int{21} } func (m *QueryLSMDepositsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1091,109 +1091,109 @@ func (m *QueryLSMDepositsResponse) GetDeposits() []LSMTokenDeposit { } func init() { - proto.RegisterType((*QueryParamsRequest)(nil), "stride.records.QueryParamsRequest") - proto.RegisterType((*QueryParamsResponse)(nil), "stride.records.QueryParamsResponse") - proto.RegisterType((*QueryGetDepositRecordRequest)(nil), "stride.records.QueryGetDepositRecordRequest") - proto.RegisterType((*QueryGetDepositRecordResponse)(nil), "stride.records.QueryGetDepositRecordResponse") - proto.RegisterType((*QueryAllDepositRecordRequest)(nil), "stride.records.QueryAllDepositRecordRequest") - proto.RegisterType((*QueryAllDepositRecordResponse)(nil), "stride.records.QueryAllDepositRecordResponse") - proto.RegisterType((*QueryDepositRecordByHostRequest)(nil), "stride.records.QueryDepositRecordByHostRequest") - proto.RegisterType((*QueryDepositRecordByHostResponse)(nil), "stride.records.QueryDepositRecordByHostResponse") - proto.RegisterType((*QueryGetUserRedemptionRecordRequest)(nil), "stride.records.QueryGetUserRedemptionRecordRequest") - proto.RegisterType((*QueryGetUserRedemptionRecordResponse)(nil), "stride.records.QueryGetUserRedemptionRecordResponse") - proto.RegisterType((*QueryAllUserRedemptionRecordRequest)(nil), "stride.records.QueryAllUserRedemptionRecordRequest") - proto.RegisterType((*QueryAllUserRedemptionRecordResponse)(nil), "stride.records.QueryAllUserRedemptionRecordResponse") - proto.RegisterType((*QueryAllUserRedemptionRecordForUserRequest)(nil), "stride.records.QueryAllUserRedemptionRecordForUserRequest") - proto.RegisterType((*QueryAllUserRedemptionRecordForUserResponse)(nil), "stride.records.QueryAllUserRedemptionRecordForUserResponse") - proto.RegisterType((*QueryGetEpochUnbondingRecordRequest)(nil), "stride.records.QueryGetEpochUnbondingRecordRequest") - proto.RegisterType((*QueryGetEpochUnbondingRecordResponse)(nil), "stride.records.QueryGetEpochUnbondingRecordResponse") - proto.RegisterType((*QueryAllEpochUnbondingRecordRequest)(nil), "stride.records.QueryAllEpochUnbondingRecordRequest") - proto.RegisterType((*QueryAllEpochUnbondingRecordResponse)(nil), "stride.records.QueryAllEpochUnbondingRecordResponse") - proto.RegisterType((*QueryLSMDepositRequest)(nil), "stride.records.QueryLSMDepositRequest") - proto.RegisterType((*QueryLSMDepositResponse)(nil), "stride.records.QueryLSMDepositResponse") - proto.RegisterType((*QueryLSMDepositsRequest)(nil), "stride.records.QueryLSMDepositsRequest") - proto.RegisterType((*QueryLSMDepositsResponse)(nil), "stride.records.QueryLSMDepositsResponse") -} - -func init() { proto.RegisterFile("stride/records/query.proto", fileDescriptor_25e7cc311be81f7b) } - -var fileDescriptor_25e7cc311be81f7b = []byte{ - // 1193 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x58, 0x4d, 0x4f, 0x1b, 0xc7, - 0x1b, 0x67, 0x79, 0x0d, 0x0f, 0x09, 0x7f, 0xfe, 0x13, 0x8b, 0x50, 0x87, 0x18, 0xb2, 0x44, 0x79, - 0x01, 0xe2, 0x29, 0x84, 0x2a, 0x6d, 0xa2, 0x2a, 0x72, 0x68, 0x09, 0x34, 0x24, 0x4a, 0x4d, 0x73, - 0x41, 0x6a, 0x37, 0x6b, 0xef, 0x60, 0x56, 0xd8, 0x3b, 0xce, 0xce, 0x1a, 0xd5, 0x75, 0x7d, 0xe9, - 0xa9, 0xc7, 0x4a, 0xf9, 0x06, 0xad, 0xfa, 0x0d, 0xfa, 0x01, 0xaa, 0x9e, 0x38, 0xf4, 0x90, 0xa8, - 0x97, 0x9c, 0xaa, 0x0a, 0xfa, 0x11, 0x7a, 0xae, 0x2a, 0xcf, 0xcc, 0x1a, 0xaf, 0x3d, 0xbb, 0x5e, - 0x23, 0xf7, 0xd0, 0x13, 0xde, 0x79, 0xde, 0x7e, 0xbf, 0x79, 0x9e, 0x79, 0x9e, 0x19, 0x20, 0xc9, - 0x3c, 0xd7, 0xb6, 0x08, 0x76, 0x49, 0x9e, 0xba, 0x16, 0xc3, 0x2f, 0x2b, 0xc4, 0xad, 0xa6, 0xcb, - 0x2e, 0xf5, 0x28, 0x9a, 0x14, 0xb2, 0xb4, 0x94, 0x25, 0x17, 0xf3, 0x94, 0x95, 0x28, 0xc3, 0x39, - 0x93, 0x11, 0xa1, 0x88, 0x0f, 0x57, 0x72, 0xc4, 0x33, 0x57, 0x70, 0xd9, 0x2c, 0xd8, 0x8e, 0xe9, - 0xd9, 0xd4, 0x11, 0xb6, 0xc9, 0x44, 0x81, 0x16, 0x28, 0xff, 0x89, 0x1b, 0xbf, 0xe4, 0xea, 0x6c, - 0x81, 0xd2, 0x42, 0x91, 0x60, 0xb3, 0x6c, 0x63, 0xd3, 0x71, 0xa8, 0xc7, 0x4d, 0x98, 0x94, 0x5e, - 0x6e, 0xc3, 0x52, 0x36, 0x5d, 0xb3, 0xe4, 0x0b, 0x67, 0xdb, 0x84, 0xf2, 0xaf, 0x90, 0xea, 0x09, - 0x40, 0x9f, 0x36, 0x00, 0x3d, 0xe3, 0x26, 0x59, 0xf2, 0xb2, 0x42, 0x98, 0xa7, 0x3f, 0x86, 0x8b, - 0x81, 0x55, 0x56, 0xa6, 0x0e, 0x23, 0x68, 0x0d, 0x46, 0x85, 0xeb, 0x19, 0x6d, 0x5e, 0xbb, 0x39, - 0xb1, 0x3a, 0x9d, 0x0e, 0x12, 0x4d, 0x0b, 0xfd, 0x87, 0xc3, 0x47, 0xbf, 0xcf, 0x0d, 0x64, 0xa5, - 0xae, 0x9e, 0x86, 0x59, 0xee, 0xec, 0x11, 0xf1, 0x3e, 0x22, 0x65, 0xca, 0x6c, 0x2f, 0xcb, 0xd5, - 0x65, 0x30, 0x34, 0x09, 0x83, 0xb6, 0xc5, 0x3d, 0x0e, 0x67, 0x07, 0x6d, 0x4b, 0x3f, 0x80, 0x2b, - 0x21, 0xfa, 0x12, 0xc6, 0x27, 0x30, 0x69, 0x09, 0x81, 0x21, 0x02, 0x4b, 0x38, 0x57, 0xda, 0xe1, - 0x04, 0xcc, 0x25, 0xaa, 0x0b, 0x56, 0xeb, 0xa2, 0xbe, 0x27, 0xc1, 0x65, 0x8a, 0x45, 0x25, 0xb8, - 0x0d, 0x80, 0xd3, 0x14, 0xc9, 0x38, 0xd7, 0xd3, 0x22, 0x9f, 0xe9, 0x46, 0x3e, 0xd3, 0x22, 0xf1, - 0x32, 0x9f, 0xe9, 0x67, 0x66, 0x81, 0x48, 0xdb, 0x6c, 0x8b, 0xa5, 0xfe, 0x93, 0x26, 0x59, 0x75, - 0x06, 0x8a, 0x60, 0x35, 0x74, 0x36, 0x56, 0xe8, 0x51, 0x00, 0xf5, 0x20, 0x47, 0x7d, 0xa3, 0x2b, - 0x6a, 0x01, 0x24, 0x00, 0x7b, 0x1d, 0xe6, 0x38, 0xea, 0x60, 0xcc, 0xea, 0x26, 0x65, 0x9e, 0xbf, - 0x43, 0xf3, 0x70, 0x7e, 0x9f, 0x32, 0xcf, 0xf8, 0x8a, 0x3a, 0xc4, 0x90, 0x89, 0x1c, 0xcf, 0x42, - 0x63, 0x6d, 0x97, 0x3a, 0x64, 0xcb, 0xd2, 0x1d, 0x98, 0x0f, 0x77, 0xd2, 0x7f, 0xf6, 0xfa, 0x7b, - 0xb0, 0xe0, 0x17, 0xd0, 0x73, 0x46, 0xdc, 0x2c, 0xb1, 0x48, 0xa9, 0xdc, 0xa0, 0x13, 0x56, 0x77, - 0xe3, 0xbc, 0xee, 0xbe, 0xd5, 0xe0, 0x5a, 0xb4, 0x9d, 0xc4, 0xfa, 0x02, 0xa6, 0x2b, 0x8c, 0xb8, - 0x86, 0xdb, 0x54, 0x08, 0xd6, 0xe1, 0xb5, 0x76, 0xcc, 0x2a, 0x6f, 0x12, 0x7a, 0xa2, 0xa2, 0x90, - 0xe9, 0x25, 0xc9, 0x20, 0x53, 0x2c, 0x46, 0x31, 0xe8, 0x57, 0x71, 0xbe, 0xf1, 0x99, 0x87, 0xc6, - 0x8b, 0xc1, 0x7c, 0xa8, 0x1f, 0xcc, 0xfb, 0x57, 0xb9, 0x6f, 0x34, 0x58, 0x8c, 0xe2, 0xb4, 0x41, - 0x5d, 0xb1, 0x2c, 0xb6, 0xf2, 0x1d, 0x38, 0x97, 0xdf, 0x37, 0x6d, 0xe7, 0xb4, 0x82, 0xc7, 0xf8, - 0xf7, 0x96, 0x85, 0xa6, 0x60, 0xc8, 0x32, 0xab, 0x1c, 0xcb, 0x70, 0xb6, 0xf1, 0x13, 0xcd, 0xc0, - 0x98, 0x69, 0x59, 0x2e, 0x61, 0x6c, 0x66, 0x48, 0xe8, 0xca, 0x4f, 0x94, 0x80, 0x91, 0xa2, 0x5d, - 0xb2, 0xbd, 0x99, 0x61, 0xae, 0x2d, 0x3e, 0xda, 0xf2, 0x34, 0x72, 0xe6, 0x3c, 0xbd, 0xd5, 0x60, - 0x29, 0x16, 0xa7, 0xff, 0x5e, 0xba, 0x36, 0x4f, 0xcf, 0xec, 0xc7, 0x65, 0x9a, 0xdf, 0x7f, 0xee, - 0xe4, 0xa8, 0x63, 0xd9, 0x4e, 0x21, 0x58, 0xf1, 0x57, 0xe1, 0x3c, 0x69, 0x88, 0x0d, 0xa7, 0x52, - 0xca, 0x11, 0x57, 0x4e, 0x8d, 0x09, 0xbe, 0xf6, 0x94, 0x2f, 0x05, 0x8e, 0xb1, 0xda, 0xd5, 0xe9, - 0xee, 0x08, 0x5f, 0x15, 0x5f, 0xa1, 0xcb, 0x31, 0x56, 0x79, 0xf3, 0x77, 0x87, 0x28, 0x64, 0xad, - 0xc7, 0x38, 0x8a, 0xd4, 0xbf, 0x71, 0x8c, 0xcf, 0xcc, 0x7c, 0xa8, 0x1f, 0xcc, 0xfb, 0x57, 0x17, - 0x5b, 0x30, 0xcd, 0x29, 0x6d, 0xef, 0x3c, 0x69, 0x76, 0xfe, 0xae, 0x27, 0x36, 0x01, 0x23, 0x16, - 0x71, 0x68, 0x89, 0x07, 0x1e, 0xcf, 0x8a, 0x0f, 0x7d, 0x17, 0x2e, 0x75, 0xb8, 0x92, 0x1b, 0xf2, - 0x00, 0xc6, 0xe4, 0x08, 0x91, 0xdb, 0x3f, 0xd7, 0xbe, 0x03, 0xdb, 0x3b, 0x4f, 0x3e, 0xa3, 0x07, - 0xc4, 0x91, 0x96, 0x92, 0xbc, 0x6f, 0xa5, 0x57, 0x3b, 0x7c, 0xb3, 0x18, 0x38, 0x97, 0xe0, 0xff, - 0x87, 0x66, 0xd1, 0xb6, 0x4c, 0x8f, 0xba, 0x86, 0xdf, 0x51, 0x04, 0xe6, 0xa9, 0xa6, 0x20, 0x23, - 0x5b, 0xcb, 0x34, 0x8c, 0x32, 0xcf, 0xf4, 0x2a, 0x7e, 0xcf, 0x91, 0x5f, 0xfa, 0xe7, 0x30, 0xd3, - 0x19, 0x5a, 0xf2, 0xca, 0xc0, 0x39, 0x89, 0x90, 0xc9, 0xd4, 0xc6, 0x24, 0xd6, 0x34, 0x5b, 0xfd, - 0xeb, 0x7f, 0x30, 0xc2, 0xfd, 0xa3, 0xaf, 0x61, 0x54, 0xdc, 0xef, 0x90, 0xde, 0xee, 0xa4, 0xf3, - 0x0a, 0x99, 0x5c, 0x88, 0xd4, 0x11, 0xf8, 0xf4, 0x5b, 0xdf, 0xfc, 0xf6, 0xe7, 0xab, 0xc1, 0x05, - 0x74, 0x15, 0xef, 0x70, 0xe5, 0x6d, 0x33, 0xc7, 0xb0, 0xf2, 0x32, 0x8b, 0x7e, 0xd1, 0x20, 0xa1, - 0x6a, 0x4f, 0xe8, 0x8e, 0x32, 0x50, 0xf4, 0xec, 0x4f, 0xae, 0xf5, 0x66, 0x24, 0xe1, 0x3e, 0xe0, - 0x70, 0x3f, 0x40, 0x77, 0x25, 0xdc, 0xdb, 0x2a, 0xbc, 0xea, 0x8e, 0x8b, 0x6b, 0xb6, 0x55, 0x47, - 0x3f, 0x6b, 0x70, 0x49, 0x15, 0x21, 0x53, 0x2c, 0x86, 0xf0, 0x88, 0xbe, 0x01, 0x84, 0xf0, 0xe8, - 0x32, 0xc6, 0xf5, 0x7b, 0x9c, 0xc7, 0x1a, 0x5a, 0xed, 0x9d, 0x07, 0xfa, 0x5b, 0x83, 0xcb, 0x11, - 0xb3, 0x07, 0xdd, 0xeb, 0x05, 0x51, 0x70, 0x08, 0x27, 0xef, 0x9f, 0xc9, 0x56, 0x92, 0xda, 0xe3, - 0xa4, 0x5e, 0xa0, 0x2f, 0x7a, 0x27, 0x65, 0xec, 0x51, 0xd7, 0x68, 0x88, 0x70, 0xcd, 0x3f, 0xaa, - 0x75, 0x5c, 0xb3, 0xcc, 0x6a, 0x1d, 0xd7, 0xe4, 0xb1, 0xac, 0xe3, 0x1a, 0x9f, 0xe5, 0x75, 0xf4, - 0xab, 0x06, 0x09, 0x55, 0x3f, 0x0c, 0x2f, 0xc4, 0x88, 0xde, 0x1f, 0x5e, 0x88, 0x51, 0x0d, 0x5c, - 0xdf, 0xe2, 0x5c, 0xd7, 0x51, 0x26, 0x8a, 0xab, 0xba, 0xc5, 0xe3, 0x5a, 0xeb, 0x00, 0x15, 0x25, - 0xa9, 0x8a, 0x15, 0x59, 0x92, 0xbd, 0x33, 0xea, 0x32, 0x92, 0xe2, 0x95, 0xa4, 0x9a, 0x11, 0xfa, - 0x51, 0x83, 0x0b, 0x81, 0x67, 0x01, 0x5a, 0x0e, 0xdb, 0x55, 0xd5, 0x1b, 0x2f, 0x79, 0x3b, 0xa6, - 0xb6, 0x84, 0x7a, 0x97, 0x43, 0x5d, 0x41, 0x38, 0x0a, 0x6a, 0xf0, 0x31, 0x23, 0x4e, 0xff, 0x0f, - 0x1a, 0x4c, 0x05, 0x5c, 0x36, 0xf6, 0x78, 0x39, 0x6c, 0xbb, 0x7a, 0x80, 0x1a, 0xf6, 0xa6, 0xd4, - 0x57, 0x39, 0xd4, 0x65, 0xb4, 0x18, 0x1f, 0x2a, 0x3a, 0xd2, 0xe0, 0xa2, 0xe2, 0xa5, 0x86, 0xb0, - 0x32, 0x74, 0xf8, 0xc3, 0x30, 0xf9, 0x6e, 0x7c, 0x03, 0x09, 0xf7, 0x29, 0x87, 0xbb, 0x89, 0x36, - 0xe2, 0xc3, 0x35, 0x72, 0x55, 0xa3, 0xf9, 0xfc, 0xc4, 0xb5, 0xd6, 0x97, 0x68, 0x1d, 0x7d, 0xaf, - 0x01, 0x9c, 0x8e, 0x45, 0x74, 0x5d, 0x09, 0xa8, 0xe3, 0x66, 0x91, 0xbc, 0xd1, 0x55, 0x4f, 0xe2, - 0x5d, 0xe7, 0x78, 0x3f, 0x44, 0xf7, 0x55, 0x78, 0x99, 0x67, 0x1e, 0x10, 0x3b, 0x97, 0xc7, 0x45, - 0x56, 0x32, 0x24, 0xe8, 0x60, 0x7f, 0x69, 0xdc, 0x4a, 0xea, 0xe8, 0x95, 0x06, 0x13, 0x2d, 0xb3, - 0x1b, 0x75, 0x8b, 0xde, 0x9c, 0xb0, 0x37, 0xbb, 0x2b, 0x4a, 0x9c, 0x2b, 0x1c, 0xe7, 0x12, 0xba, - 0x15, 0x17, 0x27, 0x7b, 0xf8, 0xf8, 0xe8, 0x38, 0xa5, 0xbd, 0x3e, 0x4e, 0x69, 0x7f, 0x1c, 0xa7, - 0xb4, 0xef, 0x4e, 0x52, 0x03, 0xaf, 0x4f, 0x52, 0x03, 0x6f, 0x4f, 0x52, 0x03, 0xbb, 0x2b, 0x05, - 0xdb, 0xdb, 0xaf, 0xe4, 0xd2, 0x79, 0x5a, 0x52, 0xb9, 0x3b, 0x5c, 0x7d, 0x1f, 0x7f, 0xd9, 0x4c, - 0x96, 0x57, 0x2d, 0x13, 0x96, 0x1b, 0xe5, 0xff, 0x6b, 0xba, 0xf3, 0x4f, 0x00, 0x00, 0x00, 0xff, - 0xff, 0x37, 0x10, 0xd2, 0xba, 0x34, 0x13, 0x00, 0x00, + proto.RegisterType((*QueryParamsRequest)(nil), "symphony.records.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "symphony.records.QueryParamsResponse") + proto.RegisterType((*QueryGetDepositRecordRequest)(nil), "symphony.records.QueryGetDepositRecordRequest") + proto.RegisterType((*QueryGetDepositRecordResponse)(nil), "symphony.records.QueryGetDepositRecordResponse") + proto.RegisterType((*QueryAllDepositRecordRequest)(nil), "symphony.records.QueryAllDepositRecordRequest") + proto.RegisterType((*QueryAllDepositRecordResponse)(nil), "symphony.records.QueryAllDepositRecordResponse") + proto.RegisterType((*QueryDepositRecordByHostRequest)(nil), "symphony.records.QueryDepositRecordByHostRequest") + proto.RegisterType((*QueryDepositRecordByHostResponse)(nil), "symphony.records.QueryDepositRecordByHostResponse") + proto.RegisterType((*QueryGetUserRedemptionRecordRequest)(nil), "symphony.records.QueryGetUserRedemptionRecordRequest") + proto.RegisterType((*QueryGetUserRedemptionRecordResponse)(nil), "symphony.records.QueryGetUserRedemptionRecordResponse") + proto.RegisterType((*QueryAllUserRedemptionRecordRequest)(nil), "symphony.records.QueryAllUserRedemptionRecordRequest") + proto.RegisterType((*QueryAllUserRedemptionRecordResponse)(nil), "symphony.records.QueryAllUserRedemptionRecordResponse") + proto.RegisterType((*QueryAllUserRedemptionRecordForUserRequest)(nil), "symphony.records.QueryAllUserRedemptionRecordForUserRequest") + proto.RegisterType((*QueryAllUserRedemptionRecordForUserResponse)(nil), "symphony.records.QueryAllUserRedemptionRecordForUserResponse") + proto.RegisterType((*QueryGetEpochUnbondingRecordRequest)(nil), "symphony.records.QueryGetEpochUnbondingRecordRequest") + proto.RegisterType((*QueryGetEpochUnbondingRecordResponse)(nil), "symphony.records.QueryGetEpochUnbondingRecordResponse") + proto.RegisterType((*QueryAllEpochUnbondingRecordRequest)(nil), "symphony.records.QueryAllEpochUnbondingRecordRequest") + proto.RegisterType((*QueryAllEpochUnbondingRecordResponse)(nil), "symphony.records.QueryAllEpochUnbondingRecordResponse") + proto.RegisterType((*QueryLSMDepositRequest)(nil), "symphony.records.QueryLSMDepositRequest") + proto.RegisterType((*QueryLSMDepositResponse)(nil), "symphony.records.QueryLSMDepositResponse") + proto.RegisterType((*QueryLSMDepositsRequest)(nil), "symphony.records.QueryLSMDepositsRequest") + proto.RegisterType((*QueryLSMDepositsResponse)(nil), "symphony.records.QueryLSMDepositsResponse") +} + +func init() { proto.RegisterFile("symphony/records/query.proto", fileDescriptor_850df8dcb4d85cd0) } + +var fileDescriptor_850df8dcb4d85cd0 = []byte{ + // 1197 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x58, 0x4d, 0x6f, 0x1b, 0xc5, + 0x1b, 0xcf, 0xe6, 0xb5, 0x79, 0xd2, 0x56, 0xf9, 0x4f, 0xad, 0xd4, 0x7f, 0x93, 0x3a, 0xe9, 0x52, + 0xda, 0x34, 0x55, 0x77, 0x9a, 0x54, 0x69, 0x41, 0x50, 0x21, 0xb7, 0x25, 0x69, 0xa4, 0x04, 0x15, + 0x97, 0x5e, 0xaa, 0x8a, 0xd5, 0xda, 0x3b, 0x75, 0x56, 0xdd, 0xdd, 0xd9, 0xee, 0xac, 0x23, 0x8c, + 0x65, 0x81, 0x38, 0xc2, 0x05, 0x09, 0xf1, 0x0d, 0x40, 0x7c, 0x03, 0x3e, 0x00, 0xe2, 0x50, 0x71, + 0x40, 0x45, 0xbd, 0x20, 0x0e, 0x08, 0x25, 0x7c, 0x10, 0xe4, 0x99, 0x59, 0xdb, 0xdb, 0x7d, 0xf1, + 0x3a, 0x4a, 0x0f, 0x9c, 0xbc, 0x33, 0xcf, 0xdb, 0xef, 0x37, 0xcf, 0x33, 0xf3, 0xcc, 0x18, 0x16, + 0x59, 0xcb, 0xf1, 0xf6, 0xa8, 0xdb, 0xc2, 0x3e, 0xa9, 0x53, 0xdf, 0x64, 0xf8, 0x59, 0x93, 0xf8, + 0x2d, 0xcd, 0xf3, 0x69, 0x40, 0xd1, 0x7c, 0x28, 0xd5, 0xa4, 0xb4, 0xb4, 0x5a, 0xa7, 0xcc, 0xa1, + 0x0c, 0xd7, 0x0c, 0x46, 0x84, 0x2a, 0xde, 0x5f, 0xab, 0x91, 0xc0, 0x58, 0xc3, 0x9e, 0xd1, 0xb0, + 0x5c, 0x23, 0xb0, 0xa8, 0x2b, 0xac, 0x4b, 0x85, 0x06, 0x6d, 0x50, 0xfe, 0x89, 0xbb, 0x5f, 0x72, + 0x76, 0xb1, 0x41, 0x69, 0xc3, 0x26, 0xd8, 0xf0, 0x2c, 0x6c, 0xb8, 0x2e, 0x0d, 0xb8, 0x09, 0x93, + 0xd2, 0x73, 0x31, 0x3c, 0x9e, 0xe1, 0x1b, 0x4e, 0x28, 0x2e, 0xc7, 0xc4, 0xf2, 0x57, 0xc8, 0xd5, + 0x02, 0xa0, 0x8f, 0xba, 0xa0, 0xee, 0x73, 0xa3, 0x2a, 0x79, 0xd6, 0x24, 0x2c, 0x50, 0x77, 0xe1, + 0x4c, 0x64, 0x96, 0x79, 0xd4, 0x65, 0x04, 0xdd, 0x80, 0x69, 0xe1, 0xbc, 0xa8, 0x2c, 0x2b, 0x2b, + 0x73, 0xeb, 0x45, 0xed, 0x55, 0xba, 0x9a, 0xb0, 0xb8, 0x3d, 0xf9, 0xfc, 0xaf, 0xa5, 0xb1, 0xaa, + 0xd4, 0x56, 0x35, 0x58, 0xe4, 0xee, 0xb6, 0x48, 0x70, 0x97, 0x78, 0x94, 0x59, 0x41, 0x95, 0xab, + 0xcb, 0x70, 0xe8, 0x34, 0x8c, 0x5b, 0x26, 0xf7, 0x39, 0x59, 0x1d, 0xb7, 0x4c, 0xd5, 0x81, 0x73, + 0x29, 0xfa, 0x12, 0xc8, 0x0e, 0x9c, 0x36, 0x85, 0x40, 0x17, 0x81, 0x25, 0xa0, 0xa5, 0x38, 0xa0, + 0x88, 0x03, 0x89, 0xeb, 0x94, 0x39, 0x38, 0xa9, 0x3e, 0x91, 0xf0, 0x2a, 0xb6, 0x9d, 0x08, 0x6f, + 0x13, 0xa0, 0x9f, 0x2a, 0x19, 0xe9, 0xa2, 0x26, 0xf2, 0xaa, 0x75, 0xf3, 0xaa, 0x89, 0x12, 0x90, + 0x79, 0xd5, 0xee, 0x1b, 0x0d, 0x22, 0x6d, 0xab, 0x03, 0x96, 0xea, 0x4f, 0x8a, 0xe4, 0x15, 0x0f, + 0x94, 0xc1, 0x6b, 0xe2, 0xa8, 0xbc, 0xd0, 0x56, 0x04, 0xf7, 0x38, 0xc7, 0x7d, 0x69, 0x28, 0x6e, + 0x01, 0x25, 0x02, 0xfc, 0x0e, 0x2c, 0x71, 0xdc, 0xd1, 0x98, 0xad, 0x7b, 0x94, 0x05, 0xe1, 0x1a, + 0x2d, 0xc3, 0xc9, 0x3d, 0xca, 0x02, 0xfd, 0x33, 0xea, 0x12, 0x5d, 0x26, 0x73, 0xb6, 0x0a, 0xdd, + 0xb9, 0x47, 0xd4, 0x25, 0xdb, 0xa6, 0xea, 0xc1, 0x72, 0xba, 0x93, 0xd7, 0xc1, 0x5f, 0xdd, 0x80, + 0x37, 0xc3, 0x32, 0x7a, 0xc8, 0x88, 0x5f, 0x25, 0x26, 0x71, 0xbc, 0x2e, 0xa1, 0xb4, 0xea, 0x9b, + 0xe5, 0xd5, 0xf7, 0x95, 0x02, 0x17, 0xb2, 0xed, 0x24, 0xda, 0x1a, 0x2c, 0x34, 0x19, 0xf1, 0x75, + 0xbf, 0xa7, 0x10, 0xad, 0xc6, 0x8b, 0x71, 0xd4, 0x49, 0xfe, 0x24, 0xf8, 0x42, 0x33, 0x41, 0xa6, + 0x3a, 0x92, 0x43, 0xc5, 0xb6, 0xb3, 0x38, 0x1c, 0x57, 0x89, 0xbe, 0x0c, 0xb9, 0xa7, 0xc6, 0xcb, + 0xc1, 0x7d, 0xe2, 0x78, 0xb8, 0x1f, 0x5f, 0xfd, 0xfe, 0xae, 0xc0, 0x6a, 0x16, 0xab, 0x4d, 0xea, + 0x8b, 0x69, 0xb1, 0x98, 0xff, 0x87, 0x13, 0xf5, 0x3d, 0xc3, 0x72, 0xfb, 0x75, 0x3c, 0xc3, 0xc7, + 0xdb, 0x26, 0x9a, 0x87, 0x09, 0xd3, 0x68, 0x71, 0x2c, 0x93, 0xd5, 0xee, 0x27, 0x2a, 0xc2, 0x8c, + 0x61, 0x9a, 0x3e, 0x61, 0xac, 0x38, 0x21, 0x74, 0xe5, 0x10, 0x15, 0x60, 0xca, 0xb6, 0x1c, 0x2b, + 0x28, 0x4e, 0x72, 0x6d, 0x31, 0x78, 0x25, 0x53, 0x53, 0x47, 0xce, 0xd4, 0x9f, 0x0a, 0x5c, 0xc9, + 0xc5, 0xe9, 0xbf, 0x98, 0xb0, 0x7b, 0xfd, 0x9d, 0xfb, 0x81, 0x47, 0xeb, 0x7b, 0x0f, 0xdd, 0x1a, + 0x75, 0x4d, 0xcb, 0x6d, 0x44, 0xab, 0xfe, 0x3c, 0x9c, 0x24, 0x5d, 0xb1, 0xee, 0x36, 0x9d, 0x1a, + 0xf1, 0x65, 0x07, 0x99, 0xe3, 0x73, 0x1f, 0xf2, 0xa9, 0xc8, 0x66, 0x4e, 0x76, 0xd5, 0x5f, 0x1f, + 0xe1, 0xab, 0x19, 0x2a, 0x0c, 0xdd, 0xcc, 0x49, 0xfe, 0xc2, 0xf5, 0x21, 0x09, 0xb2, 0xc1, 0xcd, + 0x9c, 0x45, 0xeb, 0x75, 0x6c, 0xe6, 0x23, 0x73, 0x9f, 0x38, 0x1e, 0xee, 0xc7, 0x57, 0x1b, 0xdb, + 0xb0, 0xc0, 0x49, 0xed, 0x3c, 0xd8, 0xed, 0xf5, 0x80, 0xa1, 0xfb, 0xb6, 0x00, 0x53, 0x26, 0x71, + 0xa9, 0xc3, 0x03, 0xcf, 0x56, 0xc5, 0x40, 0x7d, 0x0c, 0x67, 0x63, 0xae, 0xe4, 0x92, 0x54, 0x60, + 0x46, 0x36, 0x13, 0x99, 0x80, 0xf3, 0xf1, 0x35, 0xd8, 0x79, 0xb0, 0xfb, 0x31, 0x7d, 0x4a, 0x5c, + 0x69, 0x2b, 0xe9, 0x87, 0x76, 0x6a, 0x2b, 0xe6, 0x9d, 0xe5, 0x40, 0x7a, 0x05, 0xfe, 0xb7, 0x6f, + 0xd8, 0x96, 0x69, 0x04, 0xd4, 0xd7, 0xc3, 0x93, 0x45, 0xa0, 0x9e, 0xef, 0x09, 0x2a, 0xf2, 0x88, + 0x59, 0x80, 0x69, 0x16, 0x18, 0x41, 0x33, 0x3c, 0x7b, 0xe4, 0x48, 0xd5, 0xa1, 0x18, 0x0f, 0x2d, + 0x99, 0xdd, 0x81, 0x13, 0x12, 0x21, 0x93, 0xe9, 0xcd, 0x4d, 0xad, 0x67, 0xb8, 0xfe, 0xf5, 0x3c, + 0x4c, 0xf1, 0x08, 0xe8, 0x73, 0x98, 0x16, 0x77, 0x3e, 0x74, 0x21, 0xee, 0x26, 0x7e, 0xb5, 0x2c, + 0xbd, 0x35, 0x44, 0x4b, 0xa0, 0x54, 0x57, 0xbe, 0x7c, 0xf9, 0xcf, 0xb7, 0xe3, 0x2a, 0x5a, 0xc6, + 0xb1, 0x0b, 0x6c, 0xff, 0xfa, 0xcc, 0xc3, 0xfe, 0xa2, 0x40, 0x21, 0xe9, 0xa4, 0x42, 0x1b, 0x29, + 0x91, 0xb2, 0xaf, 0x03, 0xa5, 0x1b, 0xa3, 0x9a, 0x49, 0xc4, 0xb7, 0x38, 0xe2, 0x9b, 0x68, 0x23, + 0x1d, 0x71, 0xf2, 0x01, 0x8c, 0xdb, 0x96, 0xd9, 0x41, 0x3f, 0x2b, 0x70, 0x36, 0xc9, 0x7f, 0xc5, + 0xb6, 0x53, 0x99, 0x64, 0x5f, 0x0a, 0x52, 0x99, 0x0c, 0xe9, 0xed, 0xea, 0xdb, 0x9c, 0xc9, 0x3a, + 0xba, 0x36, 0x2a, 0x13, 0xf4, 0xc5, 0x38, 0xbc, 0x91, 0xd1, 0x8c, 0xd0, 0x7b, 0xa3, 0x21, 0x8a, + 0xf6, 0xe5, 0xd2, 0xad, 0x23, 0x5a, 0x4b, 0x5a, 0x26, 0xa7, 0xf5, 0x09, 0x7a, 0x3c, 0x2a, 0x2d, + 0xfd, 0x09, 0xf5, 0xf5, 0xae, 0x08, 0xb7, 0xc3, 0x5d, 0xdb, 0xc1, 0x6d, 0xd3, 0x68, 0x75, 0x70, + 0x5b, 0xee, 0xd0, 0x0e, 0x6e, 0xf3, 0xf6, 0xde, 0x41, 0xbf, 0x29, 0x50, 0x48, 0x3a, 0x1c, 0xb3, + 0xca, 0x31, 0xa3, 0x19, 0x64, 0x95, 0x63, 0xd6, 0x99, 0xae, 0x6e, 0x71, 0xb6, 0x15, 0xf4, 0x7e, + 0x3a, 0xdb, 0xe4, 0x33, 0x1f, 0xb7, 0x07, 0x7b, 0xaa, 0x28, 0xcc, 0xa4, 0x48, 0x43, 0x0a, 0xf3, + 0x28, 0x9c, 0x86, 0xf4, 0xa9, 0x3c, 0x85, 0x99, 0xcc, 0x09, 0xfd, 0xa8, 0xc0, 0xa9, 0xc8, 0x8b, + 0x01, 0x69, 0xe9, 0xeb, 0x9a, 0xf4, 0x08, 0x2c, 0xe1, 0xdc, 0xfa, 0x12, 0xec, 0x06, 0x07, 0x8b, + 0xd1, 0xd5, 0x74, 0xb0, 0xd1, 0xb7, 0x8e, 0x38, 0x07, 0x7e, 0x50, 0x60, 0x3e, 0xe2, 0xb0, 0xbb, + 0xce, 0x5a, 0xfa, 0x82, 0x8d, 0x04, 0x36, 0xed, 0xe1, 0xa9, 0x5e, 0xe3, 0x60, 0x57, 0xd1, 0x4a, + 0x5e, 0xb0, 0xe8, 0x57, 0x05, 0xce, 0x24, 0x3c, 0xe5, 0xd0, 0x5a, 0x4a, 0xe8, 0xf4, 0xb7, 0x63, + 0x69, 0x7d, 0x14, 0x13, 0x09, 0x78, 0x87, 0x03, 0xde, 0x44, 0x77, 0xf3, 0x02, 0xd6, 0x6b, 0x2d, + 0xbd, 0xf7, 0x42, 0xc5, 0xed, 0xc1, 0xc7, 0x6a, 0x07, 0x7d, 0xaf, 0x00, 0xf4, 0x7b, 0x25, 0x5a, + 0x49, 0x01, 0x14, 0xbb, 0x72, 0x94, 0x2e, 0xe7, 0xd0, 0x94, 0x88, 0x2b, 0x1c, 0xf1, 0xbb, 0xe8, + 0x9d, 0x3e, 0x62, 0x16, 0x18, 0x4f, 0x89, 0x55, 0xab, 0xf7, 0x20, 0xdb, 0xcc, 0xd1, 0x25, 0xec, + 0xe8, 0x59, 0xd3, 0xbd, 0xae, 0x74, 0xd0, 0x77, 0x0a, 0xcc, 0x0d, 0xb4, 0x74, 0x34, 0x3c, 0x7a, + 0xaf, 0xed, 0xae, 0xe6, 0x51, 0x95, 0x48, 0x31, 0x47, 0x7a, 0x19, 0x5d, 0xca, 0x87, 0x94, 0xdd, + 0xde, 0x7d, 0x7e, 0x50, 0x56, 0x5e, 0x1c, 0x94, 0x95, 0xbf, 0x0f, 0xca, 0xca, 0x37, 0x87, 0xe5, + 0xb1, 0x17, 0x87, 0xe5, 0xb1, 0x3f, 0x0e, 0xcb, 0x63, 0x8f, 0xae, 0x37, 0xac, 0x60, 0xaf, 0x59, + 0xd3, 0xea, 0xd4, 0xc1, 0xfc, 0xaa, 0x67, 0xb1, 0xab, 0xb6, 0x51, 0x63, 0xe1, 0x00, 0xef, 0xaf, + 0xdf, 0xc4, 0x9f, 0xf6, 0x52, 0x17, 0xb4, 0x3c, 0xc2, 0x6a, 0xd3, 0xfc, 0xaf, 0xa9, 0xeb, 0xff, + 0x06, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xa9, 0xdc, 0x5e, 0x6b, 0x13, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1244,7 +1244,7 @@ func NewQueryClient(cc grpc1.ClientConn) QueryClient { func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { out := new(QueryParamsResponse) - err := c.cc.Invoke(ctx, "/stride.records.Query/Params", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.records.Query/Params", in, out, opts...) if err != nil { return nil, err } @@ -1253,7 +1253,7 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts . func (c *queryClient) UserRedemptionRecord(ctx context.Context, in *QueryGetUserRedemptionRecordRequest, opts ...grpc.CallOption) (*QueryGetUserRedemptionRecordResponse, error) { out := new(QueryGetUserRedemptionRecordResponse) - err := c.cc.Invoke(ctx, "/stride.records.Query/UserRedemptionRecord", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.records.Query/UserRedemptionRecord", in, out, opts...) if err != nil { return nil, err } @@ -1262,7 +1262,7 @@ func (c *queryClient) UserRedemptionRecord(ctx context.Context, in *QueryGetUser func (c *queryClient) UserRedemptionRecordAll(ctx context.Context, in *QueryAllUserRedemptionRecordRequest, opts ...grpc.CallOption) (*QueryAllUserRedemptionRecordResponse, error) { out := new(QueryAllUserRedemptionRecordResponse) - err := c.cc.Invoke(ctx, "/stride.records.Query/UserRedemptionRecordAll", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.records.Query/UserRedemptionRecordAll", in, out, opts...) if err != nil { return nil, err } @@ -1271,7 +1271,7 @@ func (c *queryClient) UserRedemptionRecordAll(ctx context.Context, in *QueryAllU func (c *queryClient) UserRedemptionRecordForUser(ctx context.Context, in *QueryAllUserRedemptionRecordForUserRequest, opts ...grpc.CallOption) (*QueryAllUserRedemptionRecordForUserResponse, error) { out := new(QueryAllUserRedemptionRecordForUserResponse) - err := c.cc.Invoke(ctx, "/stride.records.Query/UserRedemptionRecordForUser", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.records.Query/UserRedemptionRecordForUser", in, out, opts...) if err != nil { return nil, err } @@ -1280,7 +1280,7 @@ func (c *queryClient) UserRedemptionRecordForUser(ctx context.Context, in *Query func (c *queryClient) EpochUnbondingRecord(ctx context.Context, in *QueryGetEpochUnbondingRecordRequest, opts ...grpc.CallOption) (*QueryGetEpochUnbondingRecordResponse, error) { out := new(QueryGetEpochUnbondingRecordResponse) - err := c.cc.Invoke(ctx, "/stride.records.Query/EpochUnbondingRecord", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.records.Query/EpochUnbondingRecord", in, out, opts...) if err != nil { return nil, err } @@ -1289,7 +1289,7 @@ func (c *queryClient) EpochUnbondingRecord(ctx context.Context, in *QueryGetEpoc func (c *queryClient) EpochUnbondingRecordAll(ctx context.Context, in *QueryAllEpochUnbondingRecordRequest, opts ...grpc.CallOption) (*QueryAllEpochUnbondingRecordResponse, error) { out := new(QueryAllEpochUnbondingRecordResponse) - err := c.cc.Invoke(ctx, "/stride.records.Query/EpochUnbondingRecordAll", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.records.Query/EpochUnbondingRecordAll", in, out, opts...) if err != nil { return nil, err } @@ -1298,7 +1298,7 @@ func (c *queryClient) EpochUnbondingRecordAll(ctx context.Context, in *QueryAllE func (c *queryClient) DepositRecord(ctx context.Context, in *QueryGetDepositRecordRequest, opts ...grpc.CallOption) (*QueryGetDepositRecordResponse, error) { out := new(QueryGetDepositRecordResponse) - err := c.cc.Invoke(ctx, "/stride.records.Query/DepositRecord", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.records.Query/DepositRecord", in, out, opts...) if err != nil { return nil, err } @@ -1307,7 +1307,7 @@ func (c *queryClient) DepositRecord(ctx context.Context, in *QueryGetDepositReco func (c *queryClient) DepositRecordAll(ctx context.Context, in *QueryAllDepositRecordRequest, opts ...grpc.CallOption) (*QueryAllDepositRecordResponse, error) { out := new(QueryAllDepositRecordResponse) - err := c.cc.Invoke(ctx, "/stride.records.Query/DepositRecordAll", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.records.Query/DepositRecordAll", in, out, opts...) if err != nil { return nil, err } @@ -1316,7 +1316,7 @@ func (c *queryClient) DepositRecordAll(ctx context.Context, in *QueryAllDepositR func (c *queryClient) DepositRecordByHost(ctx context.Context, in *QueryDepositRecordByHostRequest, opts ...grpc.CallOption) (*QueryDepositRecordByHostResponse, error) { out := new(QueryDepositRecordByHostResponse) - err := c.cc.Invoke(ctx, "/stride.records.Query/DepositRecordByHost", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.records.Query/DepositRecordByHost", in, out, opts...) if err != nil { return nil, err } @@ -1325,7 +1325,7 @@ func (c *queryClient) DepositRecordByHost(ctx context.Context, in *QueryDepositR func (c *queryClient) LSMDeposit(ctx context.Context, in *QueryLSMDepositRequest, opts ...grpc.CallOption) (*QueryLSMDepositResponse, error) { out := new(QueryLSMDepositResponse) - err := c.cc.Invoke(ctx, "/stride.records.Query/LSMDeposit", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.records.Query/LSMDeposit", in, out, opts...) if err != nil { return nil, err } @@ -1334,7 +1334,7 @@ func (c *queryClient) LSMDeposit(ctx context.Context, in *QueryLSMDepositRequest func (c *queryClient) LSMDeposits(ctx context.Context, in *QueryLSMDepositsRequest, opts ...grpc.CallOption) (*QueryLSMDepositsResponse, error) { out := new(QueryLSMDepositsResponse) - err := c.cc.Invoke(ctx, "/stride.records.Query/LSMDeposits", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.records.Query/LSMDeposits", in, out, opts...) if err != nil { return nil, err } @@ -1421,7 +1421,7 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.records.Query/Params", + FullMethod: "/symphony.records.Query/Params", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) @@ -1439,7 +1439,7 @@ func _Query_UserRedemptionRecord_Handler(srv interface{}, ctx context.Context, d } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.records.Query/UserRedemptionRecord", + FullMethod: "/symphony.records.Query/UserRedemptionRecord", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).UserRedemptionRecord(ctx, req.(*QueryGetUserRedemptionRecordRequest)) @@ -1457,7 +1457,7 @@ func _Query_UserRedemptionRecordAll_Handler(srv interface{}, ctx context.Context } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.records.Query/UserRedemptionRecordAll", + FullMethod: "/symphony.records.Query/UserRedemptionRecordAll", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).UserRedemptionRecordAll(ctx, req.(*QueryAllUserRedemptionRecordRequest)) @@ -1475,7 +1475,7 @@ func _Query_UserRedemptionRecordForUser_Handler(srv interface{}, ctx context.Con } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.records.Query/UserRedemptionRecordForUser", + FullMethod: "/symphony.records.Query/UserRedemptionRecordForUser", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).UserRedemptionRecordForUser(ctx, req.(*QueryAllUserRedemptionRecordForUserRequest)) @@ -1493,7 +1493,7 @@ func _Query_EpochUnbondingRecord_Handler(srv interface{}, ctx context.Context, d } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.records.Query/EpochUnbondingRecord", + FullMethod: "/symphony.records.Query/EpochUnbondingRecord", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).EpochUnbondingRecord(ctx, req.(*QueryGetEpochUnbondingRecordRequest)) @@ -1511,7 +1511,7 @@ func _Query_EpochUnbondingRecordAll_Handler(srv interface{}, ctx context.Context } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.records.Query/EpochUnbondingRecordAll", + FullMethod: "/symphony.records.Query/EpochUnbondingRecordAll", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).EpochUnbondingRecordAll(ctx, req.(*QueryAllEpochUnbondingRecordRequest)) @@ -1529,7 +1529,7 @@ func _Query_DepositRecord_Handler(srv interface{}, ctx context.Context, dec func } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.records.Query/DepositRecord", + FullMethod: "/symphony.records.Query/DepositRecord", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).DepositRecord(ctx, req.(*QueryGetDepositRecordRequest)) @@ -1547,7 +1547,7 @@ func _Query_DepositRecordAll_Handler(srv interface{}, ctx context.Context, dec f } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.records.Query/DepositRecordAll", + FullMethod: "/symphony.records.Query/DepositRecordAll", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).DepositRecordAll(ctx, req.(*QueryAllDepositRecordRequest)) @@ -1565,7 +1565,7 @@ func _Query_DepositRecordByHost_Handler(srv interface{}, ctx context.Context, de } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.records.Query/DepositRecordByHost", + FullMethod: "/symphony.records.Query/DepositRecordByHost", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).DepositRecordByHost(ctx, req.(*QueryDepositRecordByHostRequest)) @@ -1583,7 +1583,7 @@ func _Query_LSMDeposit_Handler(srv interface{}, ctx context.Context, dec func(in } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.records.Query/LSMDeposit", + FullMethod: "/symphony.records.Query/LSMDeposit", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).LSMDeposit(ctx, req.(*QueryLSMDepositRequest)) @@ -1601,7 +1601,7 @@ func _Query_LSMDeposits_Handler(srv interface{}, ctx context.Context, dec func(i } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.records.Query/LSMDeposits", + FullMethod: "/symphony.records.Query/LSMDeposits", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).LSMDeposits(ctx, req.(*QueryLSMDepositsRequest)) @@ -1610,7 +1610,7 @@ func _Query_LSMDeposits_Handler(srv interface{}, ctx context.Context, dec func(i } var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "stride.records.Query", + ServiceName: "symphony.records.Query", HandlerType: (*QueryServer)(nil), Methods: []grpc.MethodDesc{ { @@ -1659,7 +1659,7 @@ var _Query_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "stride/records/query.proto", + Metadata: "symphony/records/query.proto", } func (m *QueryParamsRequest) Marshal() (dAtA []byte, err error) { diff --git a/x/records/types/query.pb.gw.go b/x/records/types/query.pb.gw.go index 11571cb441b..22ad0dff83e 100644 --- a/x/records/types/query.pb.gw.go +++ b/x/records/types/query.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: stride/records/query.proto +// source: symphony/records/query.proto /* Package types is a reverse proxy. @@ -1149,27 +1149,27 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } var ( - pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"StrideLabs", "stride", "records", "params"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"symphony", "records", "v1beta1", "params"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_UserRedemptionRecord_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"Stride-Labs", "stride", "records", "user_redemption_record", "id"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_UserRedemptionRecord_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"symphony", "records", "v1beta1", "user_redemption_record", "id"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_UserRedemptionRecordAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"Stride-Labs", "stride", "records", "user_redemption_record"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_UserRedemptionRecordAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"symphony", "records", "v1beta1", "user_redemption_record"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_UserRedemptionRecordForUser_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"Stride-Labs", "stride", "records", "user_redemption_record_for_user", "chain_id", "day", "address", "limit"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_UserRedemptionRecordForUser_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 1, 0, 4, 1, 5, 7}, []string{"symphony", "records", "v1beta1", "user_redemption_record_for_user", "chain_id", "day", "address", "limit"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_EpochUnbondingRecord_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"Stride-Labs", "stride", "records", "epoch_unbonding_record", "epoch_number"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_EpochUnbondingRecord_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"symphony", "records", "v1beta1", "epoch_unbonding_record", "epoch_number"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_EpochUnbondingRecordAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"Stride-Labs", "stride", "records", "epoch_unbonding_record"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_EpochUnbondingRecordAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"symphony", "records", "v1beta1", "epoch_unbonding_record"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_DepositRecord_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"Stride-Labs", "stride", "records", "deposit_record", "id"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_DepositRecord_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"symphony", "records", "v1beta1", "deposit_record", "id"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_DepositRecordAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"Stride-Labs", "stride", "records", "deposit_record"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_DepositRecordAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"symphony", "records", "v1beta1", "deposit_record"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_DepositRecordByHost_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"Stride-Labs", "stride", "records", "deposit_record_by_host_zone", "host_zone_id"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_DepositRecordByHost_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"symphony", "records", "v1beta1", "deposit_record_by_host_zone", "host_zone_id"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_LSMDeposit_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"Stride-Labs", "stride", "stakeibc", "lsm_deposit", "chain_id", "denom"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_LSMDeposit_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"symphony", "stakeibc", "v1beta1", "lsm_deposit", "chain_id", "denom"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_LSMDeposits_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"Stride-Labs", "stride", "stakeibc", "lsm_deposits"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_LSMDeposits_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"symphony", "stakeibc", "v1beta1", "lsm_deposits"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( diff --git a/x/records/types/records.pb.go b/x/records/types/records.pb.go index 2a8fde6c32c..9db8258d4b0 100644 --- a/x/records/types/records.pb.go +++ b/x/records/types/records.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/records/records.proto +// source: symphony/records/records.proto package types @@ -57,7 +57,7 @@ func (x DepositRecord_Status) String() string { } func (DepositRecord_Status) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_295ee594cc85d8ca, []int{1, 0} + return fileDescriptor_b025c6b1d33d7a37, []int{1, 0} } type DepositRecord_Source int32 @@ -82,7 +82,7 @@ func (x DepositRecord_Source) String() string { } func (DepositRecord_Source) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_295ee594cc85d8ca, []int{1, 1} + return fileDescriptor_b025c6b1d33d7a37, []int{1, 1} } type HostZoneUnbonding_Status int32 @@ -125,7 +125,7 @@ func (x HostZoneUnbonding_Status) String() string { } func (HostZoneUnbonding_Status) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_295ee594cc85d8ca, []int{2, 0} + return fileDescriptor_b025c6b1d33d7a37, []int{2, 0} } type LSMTokenDeposit_Status int32 @@ -165,7 +165,7 @@ func (x LSMTokenDeposit_Status) String() string { } func (LSMTokenDeposit_Status) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_295ee594cc85d8ca, []int{4, 0} + return fileDescriptor_b025c6b1d33d7a37, []int{4, 0} } type UserRedemptionRecord struct { @@ -183,7 +183,7 @@ func (m *UserRedemptionRecord) Reset() { *m = UserRedemptionRecord{} } func (m *UserRedemptionRecord) String() string { return proto.CompactTextString(m) } func (*UserRedemptionRecord) ProtoMessage() {} func (*UserRedemptionRecord) Descriptor() ([]byte, []int) { - return fileDescriptor_295ee594cc85d8ca, []int{0} + return fileDescriptor_b025c6b1d33d7a37, []int{0} } func (m *UserRedemptionRecord) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -259,9 +259,9 @@ type DepositRecord struct { Amount cosmossdk_io_math.Int `protobuf:"bytes,2,opt,name=amount,proto3,customtype=cosmossdk.io/math.Int" json:"amount"` Denom string `protobuf:"bytes,3,opt,name=denom,proto3" json:"denom,omitempty"` HostZoneId string `protobuf:"bytes,4,opt,name=host_zone_id,json=hostZoneId,proto3" json:"host_zone_id,omitempty"` - Status DepositRecord_Status `protobuf:"varint,6,opt,name=status,proto3,enum=stride.records.DepositRecord_Status" json:"status,omitempty"` + Status DepositRecord_Status `protobuf:"varint,6,opt,name=status,proto3,enum=symphony.records.DepositRecord_Status" json:"status,omitempty"` DepositEpochNumber uint64 `protobuf:"varint,7,opt,name=deposit_epoch_number,json=depositEpochNumber,proto3" json:"deposit_epoch_number,omitempty"` - Source DepositRecord_Source `protobuf:"varint,8,opt,name=source,proto3,enum=stride.records.DepositRecord_Source" json:"source,omitempty"` + Source DepositRecord_Source `protobuf:"varint,8,opt,name=source,proto3,enum=symphony.records.DepositRecord_Source" json:"source,omitempty"` DelegationTxsInProgress uint64 `protobuf:"varint,9,opt,name=delegation_txs_in_progress,json=delegationTxsInProgress,proto3" json:"delegation_txs_in_progress,omitempty"` } @@ -269,7 +269,7 @@ func (m *DepositRecord) Reset() { *m = DepositRecord{} } func (m *DepositRecord) String() string { return proto.CompactTextString(m) } func (*DepositRecord) ProtoMessage() {} func (*DepositRecord) Descriptor() ([]byte, []int) { - return fileDescriptor_295ee594cc85d8ca, []int{1} + return fileDescriptor_b025c6b1d33d7a37, []int{1} } func (m *DepositRecord) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -357,7 +357,7 @@ type HostZoneUnbonding struct { Denom string `protobuf:"bytes,3,opt,name=denom,proto3" json:"denom,omitempty"` HostZoneId string `protobuf:"bytes,4,opt,name=host_zone_id,json=hostZoneId,proto3" json:"host_zone_id,omitempty"` UnbondingTime uint64 `protobuf:"varint,5,opt,name=unbonding_time,json=unbondingTime,proto3" json:"unbonding_time,omitempty"` - Status HostZoneUnbonding_Status `protobuf:"varint,6,opt,name=status,proto3,enum=stride.records.HostZoneUnbonding_Status" json:"status,omitempty"` + Status HostZoneUnbonding_Status `protobuf:"varint,6,opt,name=status,proto3,enum=symphony.records.HostZoneUnbonding_Status" json:"status,omitempty"` UserRedemptionRecords []string `protobuf:"bytes,7,rep,name=user_redemption_records,json=userRedemptionRecords,proto3" json:"user_redemption_records,omitempty"` } @@ -365,7 +365,7 @@ func (m *HostZoneUnbonding) Reset() { *m = HostZoneUnbonding{} } func (m *HostZoneUnbonding) String() string { return proto.CompactTextString(m) } func (*HostZoneUnbonding) ProtoMessage() {} func (*HostZoneUnbonding) Descriptor() ([]byte, []int) { - return fileDescriptor_295ee594cc85d8ca, []int{2} + return fileDescriptor_b025c6b1d33d7a37, []int{2} } func (m *HostZoneUnbonding) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -445,7 +445,7 @@ func (m *EpochUnbondingRecord) Reset() { *m = EpochUnbondingRecord{} } func (m *EpochUnbondingRecord) String() string { return proto.CompactTextString(m) } func (*EpochUnbondingRecord) ProtoMessage() {} func (*EpochUnbondingRecord) Descriptor() ([]byte, []int) { - return fileDescriptor_295ee594cc85d8ca, []int{3} + return fileDescriptor_b025c6b1d33d7a37, []int{3} } func (m *EpochUnbondingRecord) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -497,14 +497,14 @@ type LSMTokenDeposit struct { ValidatorAddress string `protobuf:"bytes,6,opt,name=validator_address,json=validatorAddress,proto3" json:"validator_address,omitempty"` Amount cosmossdk_io_math.Int `protobuf:"bytes,7,opt,name=amount,proto3,customtype=cosmossdk.io/math.Int" json:"amount"` StToken types.Coin `protobuf:"bytes,8,opt,name=st_token,json=stToken,proto3" json:"st_token"` - Status LSMTokenDeposit_Status `protobuf:"varint,9,opt,name=status,proto3,enum=stride.records.LSMTokenDeposit_Status" json:"status,omitempty"` + Status LSMTokenDeposit_Status `protobuf:"varint,9,opt,name=status,proto3,enum=symphony.records.LSMTokenDeposit_Status" json:"status,omitempty"` } func (m *LSMTokenDeposit) Reset() { *m = LSMTokenDeposit{} } func (m *LSMTokenDeposit) String() string { return proto.CompactTextString(m) } func (*LSMTokenDeposit) ProtoMessage() {} func (*LSMTokenDeposit) Descriptor() ([]byte, []int) { - return fileDescriptor_295ee594cc85d8ca, []int{4} + return fileDescriptor_b025c6b1d33d7a37, []int{4} } func (m *LSMTokenDeposit) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -590,91 +590,91 @@ func (m *LSMTokenDeposit) GetStatus() LSMTokenDeposit_Status { } func init() { - proto.RegisterEnum("stride.records.DepositRecord_Status", DepositRecord_Status_name, DepositRecord_Status_value) - proto.RegisterEnum("stride.records.DepositRecord_Source", DepositRecord_Source_name, DepositRecord_Source_value) - proto.RegisterEnum("stride.records.HostZoneUnbonding_Status", HostZoneUnbonding_Status_name, HostZoneUnbonding_Status_value) - proto.RegisterEnum("stride.records.LSMTokenDeposit_Status", LSMTokenDeposit_Status_name, LSMTokenDeposit_Status_value) - proto.RegisterType((*UserRedemptionRecord)(nil), "stride.records.UserRedemptionRecord") - proto.RegisterType((*DepositRecord)(nil), "stride.records.DepositRecord") - proto.RegisterType((*HostZoneUnbonding)(nil), "stride.records.HostZoneUnbonding") - proto.RegisterType((*EpochUnbondingRecord)(nil), "stride.records.EpochUnbondingRecord") - proto.RegisterType((*LSMTokenDeposit)(nil), "stride.records.LSMTokenDeposit") -} - -func init() { proto.RegisterFile("stride/records/records.proto", fileDescriptor_295ee594cc85d8ca) } - -var fileDescriptor_295ee594cc85d8ca = []byte{ - // 1119 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0x5d, 0x6f, 0x1a, 0x47, - 0x17, 0xf6, 0xc2, 0x1a, 0xc3, 0x71, 0x8c, 0xf1, 0x18, 0xbf, 0xc6, 0xbc, 0x09, 0x21, 0xa8, 0xa9, - 0x90, 0xaa, 0x2e, 0x8d, 0xab, 0x56, 0x55, 0x5b, 0xb5, 0x05, 0xb3, 0xb1, 0x37, 0xc1, 0xd8, 0x5d, - 0x16, 0xa5, 0xf5, 0xcd, 0x68, 0x61, 0x47, 0x30, 0xb2, 0xd9, 0x41, 0x3b, 0xb3, 0x96, 0xdb, 0x5f, - 0x51, 0xa9, 0xbd, 0xea, 0xff, 0xe8, 0x65, 0xef, 0x73, 0x99, 0xbb, 0x56, 0xbd, 0x88, 0x2a, 0xfb, - 0x8f, 0x54, 0x3b, 0xbb, 0x2c, 0x1f, 0x8e, 0x63, 0x27, 0x57, 0xb0, 0xcf, 0xf9, 0x98, 0x99, 0x33, - 0xcf, 0x73, 0xce, 0xc0, 0x7d, 0x2e, 0x3c, 0xea, 0x90, 0x9a, 0x47, 0xfa, 0xcc, 0x73, 0xf8, 0xe4, - 0x57, 0x1b, 0x7b, 0x4c, 0x30, 0x94, 0x0d, 0xad, 0x5a, 0x84, 0x16, 0x4b, 0x7d, 0xc6, 0x47, 0x8c, - 0xd7, 0x7a, 0x36, 0x27, 0xb5, 0xf3, 0x27, 0x3d, 0x22, 0xec, 0x27, 0xb5, 0x3e, 0xa3, 0x6e, 0xe8, - 0x5f, 0xcc, 0x0f, 0xd8, 0x80, 0xc9, 0xbf, 0xb5, 0xe0, 0x5f, 0x88, 0x56, 0xae, 0x12, 0x90, 0xef, - 0x72, 0xe2, 0x99, 0xc4, 0x21, 0xa3, 0xb1, 0xa0, 0xcc, 0x35, 0x65, 0x3e, 0x94, 0x85, 0x04, 0x75, - 0x0a, 0x4a, 0x59, 0xa9, 0x66, 0xcc, 0x04, 0x75, 0x50, 0x11, 0xd2, 0x1e, 0xe9, 0x13, 0x7a, 0x4e, - 0xbc, 0x42, 0x52, 0xa2, 0xf1, 0x37, 0x3a, 0x84, 0x4d, 0xd7, 0x16, 0xf4, 0x9c, 0x60, 0xc1, 0x4e, - 0x89, 0x8b, 0xed, 0x11, 0xf3, 0x5d, 0x51, 0x50, 0x03, 0xb7, 0xc6, 0x83, 0x97, 0xaf, 0x1f, 0x2e, - 0xfd, 0xf3, 0xfa, 0xe1, 0x56, 0xb8, 0x3f, 0xee, 0x9c, 0x6a, 0x94, 0xd5, 0x46, 0xb6, 0x18, 0x6a, - 0x86, 0x2b, 0xcc, 0x8d, 0x30, 0xd2, 0x0a, 0x02, 0xeb, 0x32, 0x0e, 0xe5, 0x61, 0xd9, 0x21, 0x2e, - 0x1b, 0x15, 0x96, 0xe5, 0x3a, 0xe1, 0x07, 0x2a, 0xc3, 0xbd, 0x21, 0xe3, 0x02, 0xff, 0xcc, 0x5c, - 0x82, 0xa9, 0x53, 0x48, 0x49, 0x23, 0x04, 0xd8, 0x09, 0x73, 0x89, 0xe1, 0xa0, 0x47, 0x70, 0x8f, - 0x8c, 0x59, 0x7f, 0x88, 0x5d, 0x7f, 0xd4, 0x23, 0x5e, 0x61, 0xa5, 0xac, 0x54, 0x55, 0x73, 0x55, - 0x62, 0x6d, 0x09, 0xa1, 0x2a, 0xe4, 0xfa, 0x67, 0x36, 0x1d, 0x61, 0xca, 0xf1, 0x98, 0xb8, 0x0e, - 0x75, 0x07, 0x85, 0x74, 0x59, 0xa9, 0xa6, 0xcd, 0xac, 0xc4, 0x0d, 0x7e, 0x1c, 0xa2, 0x48, 0x87, - 0x75, 0x2e, 0xe6, 0xcf, 0x93, 0xb9, 0xcb, 0x79, 0xd6, 0xb8, 0x98, 0x39, 0xcb, 0x33, 0x35, 0x9d, - 0xc8, 0x25, 0x2b, 0xbf, 0xaa, 0xb0, 0xd6, 0x24, 0x63, 0xc6, 0xa9, 0xb8, 0x56, 0x5e, 0x55, 0x96, - 0xf7, 0x33, 0x48, 0x45, 0xab, 0x24, 0xee, 0xb2, 0x4a, 0xe4, 0x3c, 0x2d, 0x55, 0xf2, 0x6d, 0xa5, - 0x52, 0xaf, 0x95, 0xea, 0x6b, 0x48, 0x71, 0x61, 0x0b, 0x9f, 0xcb, 0x32, 0x66, 0x77, 0x3f, 0xd0, - 0xe6, 0xd9, 0xa4, 0xcd, 0xed, 0x56, 0xeb, 0x48, 0x5f, 0x33, 0x8a, 0x41, 0x9f, 0x40, 0xde, 0x09, - 0xed, 0xf8, 0x0d, 0x05, 0x47, 0x91, 0x4d, 0x9f, 0xa9, 0x7b, 0xb0, 0x1e, 0xf3, 0xbd, 0x3e, 0x91, - 0xd5, 0xbe, 0x7d, 0x3d, 0xe9, 0x6b, 0x46, 0x31, 0xe8, 0x2b, 0x28, 0x3a, 0xe4, 0x8c, 0x0c, 0xec, - 0x80, 0x9f, 0x58, 0x5c, 0x70, 0x4c, 0x5d, 0x3c, 0xf6, 0xd8, 0xc0, 0x23, 0x9c, 0xcb, 0x6b, 0x51, - 0xcd, 0xed, 0xa9, 0x87, 0x75, 0xc1, 0x0d, 0xf7, 0x38, 0x32, 0x57, 0x86, 0x90, 0x0a, 0xb7, 0x8f, - 0x10, 0x64, 0x2d, 0xb3, 0xde, 0xee, 0x3c, 0xd5, 0x4d, 0xfc, 0x7d, 0x57, 0xef, 0xea, 0xb9, 0x25, - 0x54, 0x80, 0x7c, 0x8c, 0x19, 0x6d, 0x7c, 0x6c, 0x1e, 0xed, 0x9b, 0x7a, 0xa7, 0x93, 0x4b, 0xa0, - 0x3c, 0xe4, 0x9a, 0x7a, 0x4b, 0xdf, 0xaf, 0x5b, 0xc6, 0x51, 0x3b, 0xf2, 0x57, 0x50, 0x11, 0xfe, - 0x37, 0x83, 0xce, 0x46, 0x24, 0x2b, 0x55, 0x48, 0x85, 0x1b, 0x47, 0x00, 0xa9, 0x8e, 0x65, 0x1a, - 0xcd, 0x60, 0x05, 0x04, 0xd9, 0x17, 0x86, 0x75, 0xd0, 0x34, 0xeb, 0x2f, 0xea, 0x2d, 0x6c, 0xec, - 0xd5, 0x73, 0xca, 0x33, 0x35, 0xbd, 0x9c, 0x4b, 0x55, 0xfe, 0x4a, 0xc1, 0xc6, 0x41, 0x74, 0x27, - 0x5d, 0xb7, 0xc7, 0x6e, 0x24, 0x9e, 0xf2, 0xee, 0xc4, 0xbb, 0x49, 0x93, 0x89, 0xf7, 0xd4, 0xe4, - 0x01, 0x6c, 0x4c, 0x76, 0xc5, 0xb1, 0x60, 0xb8, 0xe7, 0x7b, 0xae, 0xbc, 0xcb, 0x5b, 0x93, 0x65, - 0xa3, 0x7d, 0x71, 0x8b, 0x35, 0x7c, 0xcf, 0x45, 0x16, 0x6c, 0xcf, 0x6e, 0x4c, 0x66, 0xf3, 0xe5, - 0xe9, 0xef, 0x26, 0xb0, 0xfc, 0xcc, 0xe6, 0xb8, 0xc5, 0xc2, 0xc2, 0xa1, 0x2e, 0x6c, 0x4b, 0x01, - 0xdb, 0xbd, 0x33, 0x82, 0xe7, 0xf2, 0x17, 0xe0, 0x2e, 0x59, 0xb7, 0xe2, 0xe8, 0xf6, 0x4c, 0x7a, - 0xf4, 0x2d, 0xdc, 0xf7, 0xdd, 0xb7, 0x70, 0x6f, 0x55, 0x72, 0x6f, 0x67, 0xd6, 0x67, 0x8e, 0x7d, - 0xef, 0x2d, 0xd0, 0xc7, 0x90, 0xf5, 0x27, 0x94, 0xc0, 0x82, 0x8e, 0x88, 0x6c, 0x86, 0xaa, 0xb9, - 0x16, 0xa3, 0x16, 0x1d, 0x11, 0xf4, 0xdd, 0x82, 0x8e, 0xab, 0x8b, 0xba, 0xba, 0xc6, 0xaf, 0x45, - 0x2d, 0x7f, 0x0e, 0xdb, 0x3e, 0x27, 0x1e, 0xf6, 0xe2, 0x01, 0x80, 0xa3, 0xd8, 0xc2, 0x4a, 0x39, - 0x59, 0xcd, 0x98, 0x5b, 0xfe, 0x1b, 0xc6, 0x03, 0xaf, 0xfc, 0xae, 0xc4, 0xba, 0xda, 0x84, 0xf5, - 0x6e, 0xbb, 0x71, 0xd4, 0x6e, 0x1a, 0xed, 0xfd, 0x58, 0x58, 0x3b, 0xb0, 0x35, 0x05, 0xe7, 0x74, - 0x32, 0x6f, 0x32, 0x75, 0xcb, 0xfc, 0x31, 0x8a, 0x5a, 0x46, 0xdb, 0xb0, 0xa9, 0xff, 0x60, 0x58, - 0x78, 0x41, 0xa7, 0x0a, 0x7a, 0x00, 0x3b, 0xf3, 0x86, 0xd9, 0x94, 0x2a, 0x5a, 0x83, 0xcc, 0x5e, - 0xab, 0x6e, 0x1c, 0xd6, 0x1b, 0x2d, 0x3d, 0x97, 0xa8, 0xfc, 0xa6, 0x40, 0x5e, 0xb6, 0x9f, 0xf8, - 0xd8, 0x51, 0xdb, 0x5d, 0x1c, 0x11, 0xca, 0xf5, 0x11, 0xd1, 0x81, 0xfc, 0xf4, 0x6e, 0xe2, 0x6a, - 0xf3, 0x42, 0xb2, 0x9c, 0xac, 0xae, 0xee, 0x3e, 0xba, 0xb5, 0xc0, 0x26, 0x1a, 0x2e, 0x42, 0x3c, - 0x1a, 0x03, 0x7f, 0xaa, 0xb0, 0xde, 0xea, 0x1c, 0x4a, 0x6e, 0x45, 0x0d, 0x0f, 0x3d, 0x00, 0x98, - 0xf4, 0xd2, 0x78, 0xde, 0x66, 0x22, 0xc4, 0x70, 0xd0, 0x0e, 0xa4, 0xfb, 0x43, 0x9b, 0xba, 0x81, - 0x51, 0x6a, 0xd7, 0x5c, 0x91, 0xdf, 0x86, 0x73, 0x03, 0xb5, 0xfe, 0x0f, 0x19, 0xda, 0xeb, 0xe3, - 0xd0, 0x12, 0xf2, 0x2a, 0x4d, 0x7b, 0xfd, 0xa6, 0x34, 0x3e, 0x86, 0x2c, 0x17, 0xf6, 0x29, 0xf1, - 0xb0, 0xed, 0x38, 0x92, 0xc0, 0xe1, 0x88, 0x5d, 0x0b, 0xd1, 0x7a, 0x08, 0xa2, 0x8f, 0x60, 0xe3, - 0xdc, 0x3e, 0xa3, 0x8e, 0x2d, 0xd8, 0xd4, 0x33, 0x9c, 0xb7, 0xb9, 0xd8, 0x30, 0x71, 0x9e, 0x4e, - 0xae, 0x95, 0x77, 0x99, 0x5c, 0x5f, 0x42, 0x7a, 0xd2, 0x50, 0x64, 0x1f, 0x59, 0xdd, 0xdd, 0xd1, - 0xc2, 0x08, 0x2d, 0x78, 0xc1, 0x68, 0xd1, 0x0b, 0x46, 0xdb, 0x63, 0xd4, 0x6d, 0xa8, 0x41, 0x4e, - 0x73, 0x25, 0xea, 0x24, 0xe8, 0x9b, 0x98, 0xf5, 0x19, 0xc9, 0xfa, 0x0f, 0x17, 0x2f, 0x65, 0xa1, - 0xc8, 0x0b, 0x9c, 0xaf, 0xfc, 0x31, 0xc7, 0xdd, 0xa6, 0x7e, 0x7c, 0xd4, 0x31, 0x2c, 0x7c, 0xac, - 0x4b, 0x46, 0x86, 0x2d, 0xfb, 0x1a, 0x01, 0x6f, 0x1e, 0x14, 0x9b, 0xb0, 0x1e, 0x5b, 0x9e, 0xd6, - 0x8d, 0x96, 0xde, 0xcc, 0x25, 0x03, 0xf7, 0xa6, 0x6e, 0x1d, 0x3d, 0xd7, 0xdb, 0xc6, 0xc9, 0xec, - 0x04, 0x51, 0x51, 0x09, 0x8a, 0x0b, 0x96, 0xd9, 0x74, 0xcb, 0x81, 0x3a, 0x16, 0xec, 0x51, 0xd2, - 0x54, 0xe3, 0xf9, 0xcb, 0xcb, 0x92, 0xf2, 0xea, 0xb2, 0xa4, 0xfc, 0x7b, 0x59, 0x52, 0x7e, 0xb9, - 0x2a, 0x2d, 0xbd, 0xba, 0x2a, 0x2d, 0xfd, 0x7d, 0x55, 0x5a, 0x3a, 0x79, 0x32, 0xa0, 0x62, 0xe8, - 0xf7, 0xb4, 0x3e, 0x1b, 0xd5, 0x3a, 0xb2, 0x16, 0x1f, 0xb7, 0xec, 0x1e, 0xaf, 0x45, 0x2f, 0xc8, - 0xf3, 0xdd, 0x2f, 0x6a, 0x17, 0xf1, 0x3b, 0x52, 0xfc, 0x34, 0x26, 0xbc, 0x97, 0x92, 0x0f, 0xc0, - 0x4f, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x70, 0xb9, 0xe9, 0x4d, 0x66, 0x0a, 0x00, 0x00, + proto.RegisterEnum("symphony.records.DepositRecord_Status", DepositRecord_Status_name, DepositRecord_Status_value) + proto.RegisterEnum("symphony.records.DepositRecord_Source", DepositRecord_Source_name, DepositRecord_Source_value) + proto.RegisterEnum("symphony.records.HostZoneUnbonding_Status", HostZoneUnbonding_Status_name, HostZoneUnbonding_Status_value) + proto.RegisterEnum("symphony.records.LSMTokenDeposit_Status", LSMTokenDeposit_Status_name, LSMTokenDeposit_Status_value) + proto.RegisterType((*UserRedemptionRecord)(nil), "symphony.records.UserRedemptionRecord") + proto.RegisterType((*DepositRecord)(nil), "symphony.records.DepositRecord") + proto.RegisterType((*HostZoneUnbonding)(nil), "symphony.records.HostZoneUnbonding") + proto.RegisterType((*EpochUnbondingRecord)(nil), "symphony.records.EpochUnbondingRecord") + proto.RegisterType((*LSMTokenDeposit)(nil), "symphony.records.LSMTokenDeposit") +} + +func init() { proto.RegisterFile("symphony/records/records.proto", fileDescriptor_b025c6b1d33d7a37) } + +var fileDescriptor_b025c6b1d33d7a37 = []byte{ + // 1120 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0x4f, 0x6f, 0xe2, 0xc6, + 0x1b, 0x8e, 0xc1, 0x21, 0xf0, 0x66, 0x43, 0xc8, 0x84, 0xfc, 0x42, 0xf8, 0x35, 0x2c, 0xa5, 0xda, + 0x0a, 0xb5, 0xaa, 0xe9, 0x66, 0xd5, 0x56, 0x6a, 0xa5, 0xb6, 0x10, 0xbc, 0x89, 0xb7, 0x84, 0xa4, + 0xc6, 0x68, 0xdb, 0x5c, 0x46, 0x06, 0x8f, 0x60, 0x94, 0xe0, 0x41, 0x1e, 0x3b, 0x4a, 0xfa, 0x29, + 0x7a, 0x6a, 0xa5, 0x7e, 0x8f, 0x9e, 0x7b, 0xdd, 0xe3, 0x1e, 0xdb, 0x1e, 0x56, 0x55, 0xf2, 0x45, + 0x2a, 0x8f, 0x8d, 0x31, 0xb0, 0xd9, 0xb2, 0x7b, 0x02, 0x3f, 0xef, 0x9f, 0x99, 0x79, 0xe7, 0x79, + 0xde, 0x77, 0xa0, 0xc4, 0x6f, 0x46, 0xe3, 0x21, 0xb3, 0x6f, 0x6a, 0x0e, 0xe9, 0x33, 0xc7, 0xe2, + 0x93, 0x5f, 0x65, 0xec, 0x30, 0x97, 0xa1, 0xdc, 0xc4, 0xae, 0x84, 0x78, 0xb1, 0xd4, 0x67, 0x7c, + 0xc4, 0x78, 0xad, 0x67, 0x72, 0x52, 0xbb, 0x7a, 0xdc, 0x23, 0xae, 0xf9, 0xb8, 0xd6, 0x67, 0xd4, + 0x0e, 0x22, 0x8a, 0xf9, 0x01, 0x1b, 0x30, 0xf1, 0xb7, 0xe6, 0xff, 0x0b, 0xd0, 0xca, 0x5d, 0x02, + 0xf2, 0x5d, 0x4e, 0x1c, 0x9d, 0x58, 0x64, 0x34, 0x76, 0x29, 0xb3, 0x75, 0x91, 0x0f, 0x65, 0x21, + 0x41, 0xad, 0x82, 0x54, 0x96, 0xaa, 0x19, 0x3d, 0x41, 0x2d, 0x54, 0x84, 0xb4, 0x43, 0xfa, 0x84, + 0x5e, 0x11, 0xa7, 0x90, 0x14, 0x68, 0xf4, 0x8d, 0x4e, 0x60, 0xdb, 0x36, 0x5d, 0x7a, 0x45, 0xb0, + 0xcb, 0x2e, 0x88, 0x8d, 0xcd, 0x11, 0xf3, 0x6c, 0xb7, 0x20, 0xfb, 0x6e, 0x8d, 0xfd, 0x17, 0xaf, + 0x1e, 0xae, 0xfc, 0xfd, 0xea, 0xe1, 0x4e, 0xb0, 0x3f, 0x6e, 0x5d, 0x28, 0x94, 0xd5, 0x46, 0xa6, + 0x3b, 0x54, 0x34, 0xdb, 0xd5, 0xb7, 0x82, 0x48, 0xc3, 0x0f, 0xac, 0x8b, 0x38, 0x94, 0x87, 0x55, + 0x8b, 0xd8, 0x6c, 0x54, 0x58, 0x15, 0xeb, 0x04, 0x1f, 0xa8, 0x0c, 0x0f, 0x86, 0x8c, 0xbb, 0xf8, + 0x27, 0x66, 0x13, 0x4c, 0xad, 0x42, 0x4a, 0x18, 0xc1, 0xc7, 0xce, 0x99, 0x4d, 0x34, 0x0b, 0xbd, + 0x0f, 0x0f, 0xc8, 0x98, 0xf5, 0x87, 0xd8, 0xf6, 0x46, 0x3d, 0xe2, 0x14, 0xd6, 0xca, 0x52, 0x55, + 0xd6, 0xd7, 0x05, 0xd6, 0x16, 0x10, 0xaa, 0x42, 0xae, 0x7f, 0x69, 0xd2, 0x11, 0xa6, 0x1c, 0x8f, + 0x89, 0x6d, 0x51, 0x7b, 0x50, 0x48, 0x97, 0xa5, 0x6a, 0x5a, 0xcf, 0x0a, 0x5c, 0xe3, 0x67, 0x01, + 0x8a, 0x54, 0xd8, 0xe4, 0xee, 0xec, 0x79, 0x32, 0xcb, 0x9c, 0x67, 0x83, 0xbb, 0xb1, 0xb3, 0x3c, + 0x93, 0xd3, 0x89, 0x5c, 0xb2, 0xf2, 0xab, 0x0c, 0x1b, 0x4d, 0x32, 0x66, 0x9c, 0xba, 0x0b, 0xe5, + 0x95, 0x45, 0x79, 0x3f, 0x83, 0x54, 0xb8, 0x4a, 0x62, 0x99, 0x55, 0x42, 0xe7, 0x69, 0xa9, 0x92, + 0x6f, 0x2a, 0x95, 0xbc, 0x50, 0xaa, 0xaf, 0x21, 0xc5, 0x5d, 0xd3, 0xf5, 0xb8, 0x28, 0x63, 0xf6, + 0xe0, 0x43, 0x65, 0x9e, 0x4f, 0xca, 0xcc, 0x7e, 0x95, 0x8e, 0xf0, 0xd6, 0xc3, 0x28, 0xf4, 0x29, + 0xe4, 0xad, 0xc0, 0x8e, 0x5f, 0x53, 0x72, 0x14, 0xda, 0xd4, 0x58, 0xe5, 0xfd, 0x15, 0x99, 0xe7, + 0xf4, 0x89, 0xa8, 0xf7, 0x32, 0x2b, 0x0a, 0x6f, 0x3d, 0x8c, 0x42, 0x5f, 0x41, 0xd1, 0x22, 0x97, + 0x64, 0x60, 0xfa, 0x1c, 0xc5, 0xee, 0x35, 0xc7, 0xd4, 0xc6, 0x63, 0x87, 0x0d, 0x1c, 0xc2, 0xb9, + 0xb8, 0x1a, 0x59, 0xdf, 0x9d, 0x7a, 0x18, 0xd7, 0x5c, 0xb3, 0xcf, 0x42, 0x73, 0x65, 0x08, 0xa9, + 0xe0, 0x00, 0x08, 0x41, 0xd6, 0xd0, 0xeb, 0xed, 0xce, 0x53, 0x55, 0xc7, 0xdf, 0x77, 0xd5, 0xae, + 0x9a, 0x5b, 0x41, 0x05, 0xc8, 0x47, 0x98, 0xd6, 0xc6, 0x67, 0xfa, 0xe9, 0x91, 0xae, 0x76, 0x3a, + 0xb9, 0x04, 0xca, 0x43, 0xae, 0xa9, 0xb6, 0xd4, 0xa3, 0xba, 0xa1, 0x9d, 0xb6, 0x43, 0x7f, 0x09, + 0x15, 0xe1, 0x7f, 0x31, 0x34, 0x1e, 0x91, 0xac, 0x54, 0x21, 0x15, 0x6c, 0x1c, 0x01, 0xa4, 0x3a, + 0x86, 0xae, 0x35, 0xfd, 0x15, 0x10, 0x64, 0x9f, 0x6b, 0xc6, 0x71, 0x53, 0xaf, 0x3f, 0xaf, 0xb7, + 0xb0, 0x76, 0x58, 0xcf, 0x49, 0xcf, 0xe4, 0xf4, 0x6a, 0x2e, 0x55, 0xf9, 0x2b, 0x05, 0x5b, 0xc7, + 0xe1, 0xbd, 0x74, 0xed, 0x1e, 0xbb, 0x97, 0x7c, 0xd2, 0xdb, 0x93, 0xef, 0x3e, 0x5d, 0x26, 0xde, + 0x51, 0x97, 0xc7, 0xb0, 0x35, 0xd9, 0x15, 0xc7, 0x2e, 0xc3, 0x3d, 0xcf, 0xb1, 0xc5, 0x6d, 0xfe, + 0x67, 0xb2, 0x6c, 0xb8, 0x2f, 0x6e, 0xb0, 0x86, 0xe7, 0xd8, 0xc8, 0x80, 0xdd, 0xf8, 0xc6, 0x44, + 0x36, 0x4f, 0x9c, 0x7e, 0x39, 0x91, 0xe5, 0x63, 0x9b, 0xe3, 0x06, 0x0b, 0x0a, 0x87, 0xba, 0xb0, + 0x2b, 0x44, 0x6c, 0xf6, 0x2e, 0x09, 0x9e, 0xc9, 0x5f, 0x80, 0x65, 0xb2, 0xee, 0x44, 0xd1, 0xed, + 0x58, 0x7a, 0xf4, 0x0d, 0xbc, 0xe7, 0xd9, 0x6f, 0xe0, 0xde, 0xba, 0xe0, 0xde, 0x5e, 0xdc, 0x67, + 0x86, 0x7d, 0xef, 0x2c, 0xd2, 0x47, 0x90, 0xf5, 0x26, 0x94, 0xc0, 0x2e, 0x1d, 0x11, 0xd1, 0x10, + 0x65, 0x7d, 0x23, 0x42, 0x0d, 0x3a, 0x22, 0xa8, 0x31, 0xa7, 0xe5, 0x8f, 0x16, 0x95, 0xb5, 0xc0, + 0xb0, 0x79, 0x3d, 0x7f, 0x0e, 0xbb, 0x1e, 0x27, 0x0e, 0x76, 0xa2, 0x31, 0x80, 0xc3, 0xd8, 0xc2, + 0x5a, 0x39, 0x59, 0xcd, 0xe8, 0x3b, 0xde, 0x6b, 0x86, 0x04, 0xaf, 0xfc, 0x26, 0x45, 0xca, 0xda, + 0x86, 0xcd, 0x6e, 0xbb, 0x71, 0xda, 0x6e, 0x6a, 0xed, 0xa3, 0x48, 0x5a, 0x7b, 0xb0, 0x33, 0x05, + 0x67, 0x94, 0x32, 0x6b, 0xd2, 0x55, 0x43, 0xff, 0x31, 0x8c, 0x5a, 0x45, 0xbb, 0xb0, 0xad, 0xfe, + 0xa0, 0x19, 0x78, 0x4e, 0xa9, 0x12, 0xda, 0x87, 0xbd, 0x59, 0x43, 0x3c, 0xa5, 0x8c, 0x36, 0x20, + 0x73, 0xd8, 0xaa, 0x6b, 0x27, 0xf5, 0x46, 0x4b, 0xcd, 0x25, 0x2a, 0xbf, 0x48, 0x90, 0x17, 0x2d, + 0x28, 0x3a, 0x76, 0xd8, 0x7c, 0xe7, 0x07, 0x85, 0xb4, 0x38, 0x28, 0xba, 0x90, 0x9f, 0xde, 0x4e, + 0x54, 0x6f, 0x5e, 0x48, 0x96, 0x93, 0xd5, 0xf5, 0x83, 0x0f, 0x96, 0x28, 0xb1, 0x8e, 0x86, 0xf3, + 0x10, 0x0f, 0xc7, 0xc1, 0x1f, 0x32, 0x6c, 0xb6, 0x3a, 0x27, 0x82, 0x5f, 0x61, 0xd3, 0x43, 0xfb, + 0x00, 0x93, 0x8e, 0x1a, 0xcd, 0xdd, 0x4c, 0x88, 0x68, 0x16, 0xda, 0x83, 0x74, 0x7f, 0x68, 0x52, + 0xdb, 0x37, 0x0a, 0xfd, 0xea, 0x6b, 0xe2, 0x5b, 0xb3, 0xee, 0xa1, 0xd7, 0xff, 0x21, 0x43, 0x7b, + 0x7d, 0x1c, 0x58, 0x02, 0x6e, 0xa5, 0x69, 0xaf, 0xdf, 0x14, 0xc6, 0x47, 0x90, 0xe5, 0xae, 0x79, + 0x41, 0x1c, 0x6c, 0x5a, 0x96, 0x20, 0x71, 0x30, 0x6a, 0x37, 0x02, 0xb4, 0x1e, 0x80, 0xe8, 0x63, + 0xd8, 0xba, 0x32, 0x2f, 0xa9, 0x65, 0xba, 0x6c, 0xea, 0x19, 0xcc, 0xdd, 0x5c, 0x64, 0x98, 0x38, + 0x4f, 0x27, 0xd8, 0xda, 0xdb, 0x4c, 0xb0, 0x2f, 0x21, 0x3d, 0x69, 0x2a, 0xa2, 0x97, 0xac, 0x1f, + 0xec, 0x29, 0x41, 0x84, 0xe2, 0xbf, 0x64, 0x94, 0xf0, 0x25, 0xa3, 0x1c, 0x32, 0x6a, 0x37, 0x64, + 0x3f, 0xa7, 0xbe, 0x16, 0x76, 0x13, 0xf4, 0x6d, 0xc4, 0xfc, 0x8c, 0x60, 0x7e, 0x75, 0xf1, 0x5a, + 0xe6, 0xca, 0x3c, 0xc7, 0xfb, 0xca, 0xef, 0x33, 0xfc, 0x6d, 0xaa, 0x67, 0xa7, 0x1d, 0xcd, 0xc0, + 0x67, 0xaa, 0x60, 0x65, 0xd0, 0xb8, 0x17, 0x48, 0x78, 0xff, 0xb8, 0xd8, 0x86, 0xcd, 0xc8, 0xf2, + 0xb4, 0xae, 0xb5, 0xd4, 0x66, 0x2e, 0xe9, 0xbb, 0x37, 0x55, 0xe3, 0xf4, 0x3b, 0xb5, 0xad, 0x9d, + 0xc7, 0xe7, 0x88, 0x8c, 0x4a, 0x50, 0x9c, 0xb3, 0xc4, 0xd3, 0xad, 0xfa, 0x0a, 0x99, 0xb3, 0x87, + 0x49, 0x53, 0x8d, 0x93, 0x17, 0xb7, 0x25, 0xe9, 0xe5, 0x6d, 0x49, 0xfa, 0xe7, 0xb6, 0x24, 0xfd, + 0x7c, 0x57, 0x5a, 0x79, 0x79, 0x57, 0x5a, 0xf9, 0xf3, 0xae, 0xb4, 0x72, 0xfe, 0x64, 0x40, 0xdd, + 0xa1, 0xd7, 0x53, 0xfa, 0x6c, 0x54, 0x13, 0x65, 0xa4, 0xfc, 0x93, 0x4b, 0xb3, 0xc7, 0x27, 0x1f, + 0xb5, 0xab, 0x83, 0x2f, 0x6a, 0xd7, 0xd1, 0xab, 0xd2, 0xbd, 0x19, 0x13, 0xde, 0x4b, 0x89, 0xc7, + 0xe0, 0x93, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0xbc, 0xbb, 0x1d, 0x11, 0x76, 0x0a, 0x00, 0x00, } func (m *UserRedemptionRecord) Marshal() (dAtA []byte, err error) { diff --git a/x/stablestaking/keeper/hooks.go b/x/stablestaking/keeper/hooks.go index ac5db289274..467a9acb5a8 100644 --- a/x/stablestaking/keeper/hooks.go +++ b/x/stablestaking/keeper/hooks.go @@ -4,7 +4,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" epochstypes "github.com/osmosis-labs/osmosis/v27/x/epochs/types" - txfeestypes "github.com/osmosis-labs/osmosis/v27/x/txfees/types" + stablestakingtypes "github.com/osmosis-labs/osmosis/v27/x/stablestaking/types" ) type Hooks struct { @@ -20,7 +20,7 @@ func (k Keeper) Hooks() Hooks { return Hooks{k} } // GetModuleName implements types.EpochHooks. func (Hooks) GetModuleName() string { - return txfeestypes.ModuleName + return stablestakingtypes.ModuleName } func (h Hooks) BeforeEpochStart(ctx sdk.Context, epochIdentifier string, epochNumber int64) error { diff --git a/x/stablestaking/types/stablestaking.pb.go b/x/stablestaking/types/stablestaking.pb.go index 18117d578da..8c23636d4b2 100644 --- a/x/stablestaking/types/stablestaking.pb.go +++ b/x/stablestaking/types/stablestaking.pb.go @@ -10,8 +10,8 @@ import ( _ "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" - _ "google.golang.org/protobuf/types/known/durationpb" io "io" math "math" math_bits "math/bits" diff --git a/x/stakeibc/keeper/claim.go b/x/stakeibc/keeper/claim.go index 2ebcd49da0f..ee8189d65c5 100644 --- a/x/stakeibc/keeper/claim.go +++ b/x/stakeibc/keeper/claim.go @@ -73,7 +73,7 @@ func (k Keeper) GetClaimableRedemptionRecord(ctx sdk.Context, msg *types.MsgClai } // check that the record is claimable - hostZoneUnbonding, found := k.RecordsKeeper.GetHostZoneUnbondingByChainId(ctx, userRedemptionRecord, msg.HostZoneId) + hostZoneUnbonding, found := k.RecordsKeeper.GetHostZoneUnbondingByChainId(ctx, userRedemptionRecord.EpochNumber, msg.HostZoneId) if !found { return nil, errorsmod.Wrapf(types.ErrInvalidUserRedemptionRecord, "host zone unbonding record %s not found on host zone %s", userRedemptionRecordKey, msg.HostZoneId) diff --git a/x/stakeibc/keeper/hooks.go b/x/stakeibc/keeper/hooks.go index dca57acfa13..677df0a6177 100644 --- a/x/stakeibc/keeper/hooks.go +++ b/x/stakeibc/keeper/hooks.go @@ -1,7 +1,6 @@ package keeper import ( - "context" "fmt" "time" @@ -15,7 +14,7 @@ import ( const StrideEpochsPerDayEpoch = uint64(4) -func (k Keeper) BeforeEpochStart(context context.Context, epochInfo epochstypes.EpochInfo) { +func (k Keeper) BeforeEpochStart(context sdk.Context, epochInfo epochstypes.EpochInfo) { ctx := sdk.UnwrapSDKContext(context) // Update the stakeibc epoch tracker @@ -36,7 +35,7 @@ func (k Keeper) BeforeEpochStart(context context.Context, epochInfo epochstypes. } // Stride Epoch - Process Deposits and Delegations - if epochInfo.Identifier == epochstypes.STRIDE_EPOCH { + if epochInfo.Identifier == epochstypes.STRIDE_EPOCH { // TODO: do we need this, if yes we need to add that epoch // Get cadence intervals redemptionRateInterval := k.GetParam(ctx, types.KeyRedemptionRateInterval) depositInterval := k.GetParam(ctx, types.KeyDepositInterval) @@ -93,12 +92,13 @@ func (k Keeper) BeforeEpochStart(context context.Context, epochInfo epochstypes. // Do transfers for all reward and swapped tokens defined by the trade routes every stride epoch k.TransferAllRewardTokens(ctx) } - if epochInfo.Identifier == epochstypes.MINT_EPOCH { - k.AuctionOffRewardCollectorBalance(ctx) - } + + //if epochInfo.Identifier == epochstypes.MINT_EPOCH { TODO: do we need this? + // k.AuctionOffRewardCollectorBalance(ctx) + //} } -func (k Keeper) AfterEpochEnd(context context.Context, epochInfo epochstypes.EpochInfo) {} +func (k Keeper) AfterEpochEnd(context sdk.Context, epochInfo epochstypes.EpochInfo) {} // Hooks wrapper struct for incentives keeper type Hooks struct { @@ -112,20 +112,30 @@ func (k Keeper) Hooks() Hooks { } // epochs hooks -func (h Hooks) BeforeEpochStart(context context.Context, epochInfo epochstypes.EpochInfo) { +func (h Hooks) BeforeEpochStart(context sdk.Context, epochIdentifier string, epochNumber int64) error { ctx := sdk.UnwrapSDKContext(context) + epochInfo := h.k.epochKeeper.GetEpochInfo(ctx, epochIdentifier) h.k.BeforeEpochStart(ctx, epochInfo) + + return nil } -func (h Hooks) AfterEpochEnd(context context.Context, epochInfo epochstypes.EpochInfo) { +func (h Hooks) AfterEpochEnd(context sdk.Context, epochIdentifier string, epochNumber int64) error { ctx := sdk.UnwrapSDKContext(context) + epochInfo := h.k.epochKeeper.GetEpochInfo(ctx, epochIdentifier) h.k.AfterEpochEnd(ctx, epochInfo) + + return nil +} + +func (Hooks) GetModuleName() string { + return types.ModuleName } // Set the withdrawal account address for each host zone -func (k Keeper) SetWithdrawalAddress(context context.Context) { +func (k Keeper) SetWithdrawalAddress(context sdk.Context) { ctx := sdk.UnwrapSDKContext(context) k.Logger(ctx).Info("Setting Withdrawal Addresses...") @@ -139,7 +149,7 @@ func (k Keeper) SetWithdrawalAddress(context context.Context) { } // Claim staking rewards for each host zone -func (k Keeper) ClaimAccruedStakingRewards(context context.Context) { +func (k Keeper) ClaimAccruedStakingRewards(context sdk.Context) { ctx := sdk.UnwrapSDKContext(context) k.Logger(ctx).Info("Claiming Accrued Staking Rewards...") @@ -153,7 +163,7 @@ func (k Keeper) ClaimAccruedStakingRewards(context context.Context) { } // TODO [cleanup]: Remove after v17 upgrade -func (k Keeper) DisableHubTokenization(context context.Context) { +func (k Keeper) DisableHubTokenization(context sdk.Context) { ctx := sdk.UnwrapSDKContext(context) k.Logger(ctx).Info("Disabling the ability to tokenize Gaia delegations") diff --git a/x/stakeibc/keeper/keeper.go b/x/stakeibc/keeper/keeper.go index 60aeaf8662a..1acaac3ca8e 100644 --- a/x/stakeibc/keeper/keeper.go +++ b/x/stakeibc/keeper/keeper.go @@ -2,6 +2,7 @@ package keeper import ( "fmt" + epochskeeper "github.com/osmosis-labs/osmosis/v27/x/epochs/keeper" errorsmod "cosmossdk.io/errors" "cosmossdk.io/log" @@ -44,6 +45,7 @@ type ( RatelimitKeeper types.RatelimitKeeper ICAOracleKeeper types.ICAOracleKeeper ConsumerKeeper types.ConsumerKeeper + epochKeeper epochskeeper.Keeper } ) diff --git a/x/stakeibc/keeper/reward_allocation.go b/x/stakeibc/keeper/reward_allocation.go index 25740ccd3c7..fc2e4f35374 100644 --- a/x/stakeibc/keeper/reward_allocation.go +++ b/x/stakeibc/keeper/reward_allocation.go @@ -1,10 +1,8 @@ package keeper import ( - "fmt" - auctiontypes "github.com/skip-mev/block-sdk/v2/x/auction/types" - sdkmath "cosmossdk.io/math" + "fmt" sdk "github.com/cosmos/cosmos-sdk/types" ccvtypes "github.com/cosmos/interchain-security/v6/x/ccv/consumer/types" @@ -25,7 +23,7 @@ func (k Keeper) AuctionOffRewardCollectorBalance(ctx sdk.Context) { consumerRedistributionFracStr := k.ConsumerKeeper.GetConsumerParams(ctx).ConsumerRedistributionFraction strideKeepRate, err := sdkmath.LegacyNewDecFromStr(consumerRedistributionFracStr) if err != nil { - k.Logger(ctx).Error(fmt.Sprintf("Invalid strideKeepRate, cannot send stTokens to ICS provider: %s", err)) + k.Logger(ctx).Error(fmt.Sprintf("Invalid symphonyKeepRate, cannot send stTokens to ICS provider: %s", err)) return } diff --git a/x/stakeibc/types/address_unbonding.pb.go b/x/stakeibc/types/address_unbonding.pb.go index cc131eae4ee..56bfbf72084 100644 --- a/x/stakeibc/types/address_unbonding.pb.go +++ b/x/stakeibc/types/address_unbonding.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/stakeibc/address_unbonding.proto +// source: symphony/stakeibc/address_unbonding.proto package types @@ -38,7 +38,7 @@ func (m *AddressUnbonding) Reset() { *m = AddressUnbonding{} } func (m *AddressUnbonding) String() string { return proto.CompactTextString(m) } func (*AddressUnbonding) ProtoMessage() {} func (*AddressUnbonding) Descriptor() ([]byte, []int) { - return fileDescriptor_6491082275bcb473, []int{0} + return fileDescriptor_1ef256a608c6e0fe, []int{0} } func (m *AddressUnbonding) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -110,37 +110,37 @@ func (m *AddressUnbonding) GetEpochNumber() uint64 { } func init() { - proto.RegisterType((*AddressUnbonding)(nil), "stride.stakeibc.AddressUnbonding") + proto.RegisterType((*AddressUnbonding)(nil), "symphony.stakeibc.AddressUnbonding") } func init() { - proto.RegisterFile("stride/stakeibc/address_unbonding.proto", fileDescriptor_6491082275bcb473) + proto.RegisterFile("symphony/stakeibc/address_unbonding.proto", fileDescriptor_1ef256a608c6e0fe) } -var fileDescriptor_6491082275bcb473 = []byte{ - // 346 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x44, 0x91, 0xc1, 0x4a, 0xeb, 0x40, - 0x14, 0x86, 0x93, 0xde, 0xb6, 0xb7, 0x9d, 0x7b, 0xb9, 0xb7, 0x0c, 0x55, 0x86, 0x82, 0x69, 0x75, - 0x63, 0x36, 0x26, 0x50, 0x11, 0xba, 0xb5, 0xe0, 0xa2, 0x50, 0x44, 0xa2, 0x6e, 0xdc, 0x84, 0x24, - 0x73, 0x48, 0x87, 0x3a, 0x33, 0x21, 0x33, 0x29, 0xfa, 0x16, 0x3e, 0x80, 0x0f, 0xd4, 0x65, 0x97, - 0xe2, 0xa2, 0x48, 0xfb, 0x22, 0xd2, 0x49, 0x53, 0x77, 0xf3, 0xff, 0xff, 0xc7, 0x3f, 0x87, 0x73, - 0xd0, 0xb9, 0xd2, 0x39, 0xa3, 0xe0, 0x2b, 0x1d, 0xcd, 0x81, 0xc5, 0x89, 0x1f, 0x51, 0x9a, 0x83, - 0x52, 0x61, 0x21, 0x62, 0x29, 0x28, 0x13, 0xa9, 0x97, 0xe5, 0x52, 0x4b, 0xfc, 0xbf, 0x04, 0xbd, - 0x0a, 0xec, 0x75, 0x53, 0x99, 0x4a, 0x93, 0xf9, 0xbb, 0x57, 0x89, 0x9d, 0xbd, 0xd7, 0x50, 0xe7, - 0xba, 0xac, 0x78, 0xac, 0x1a, 0x30, 0x41, 0xbf, 0xf7, 0xb5, 0xc4, 0x1e, 0xd8, 0x6e, 0x3b, 0xa8, - 0x24, 0xee, 0xa1, 0x56, 0x0e, 0x09, 0xb0, 0x05, 0xe4, 0xa4, 0x66, 0xa2, 0x83, 0xc6, 0x23, 0x44, - 0x0e, 0x43, 0x84, 0xa0, 0x34, 0xe3, 0x91, 0x06, 0x1a, 0x6a, 0xc6, 0x81, 0xfc, 0x32, 0xec, 0xf1, - 0x21, 0xbf, 0xa9, 0xe2, 0x07, 0xc6, 0x01, 0x5f, 0xa1, 0x66, 0xc4, 0x65, 0x21, 0x34, 0xa9, 0xef, - 0xb8, 0xf1, 0xc9, 0x72, 0xdd, 0xb7, 0x3e, 0xd7, 0xfd, 0xa3, 0x44, 0x2a, 0x2e, 0x95, 0xa2, 0x73, - 0x8f, 0x49, 0x9f, 0x47, 0x7a, 0xe6, 0x4d, 0x84, 0x0e, 0xf6, 0x30, 0xee, 0xa2, 0x06, 0x05, 0x21, - 0x39, 0x69, 0x98, 0xf6, 0x52, 0x60, 0x17, 0x75, 0x92, 0xe7, 0x88, 0xf1, 0x90, 0xa9, 0x30, 0x03, - 0xf3, 0x1b, 0x69, 0x0d, 0x6c, 0xb7, 0x15, 0xfc, 0x33, 0xfe, 0x44, 0xdd, 0x95, 0x2e, 0x3e, 0x45, - 0x7f, 0x21, 0x93, 0xc9, 0x2c, 0x14, 0x05, 0x8f, 0x21, 0x27, 0xed, 0x81, 0xed, 0xd6, 0x83, 0x3f, - 0xc6, 0xbb, 0x35, 0xd6, 0x78, 0xba, 0xdc, 0x38, 0xf6, 0x6a, 0xe3, 0xd8, 0x5f, 0x1b, 0xc7, 0x7e, - 0xdb, 0x3a, 0xd6, 0x6a, 0xeb, 0x58, 0x1f, 0x5b, 0xc7, 0x7a, 0x1a, 0xa6, 0x4c, 0xcf, 0x8a, 0xd8, - 0x4b, 0x24, 0xf7, 0xef, 0xcd, 0xaa, 0x2f, 0xa6, 0x51, 0xac, 0xfc, 0xfd, 0x7d, 0x16, 0xc3, 0x91, - 0xff, 0xf2, 0x73, 0x25, 0xfd, 0x9a, 0x81, 0x8a, 0x9b, 0x66, 0xe7, 0x97, 0xdf, 0x01, 0x00, 0x00, - 0xff, 0xff, 0xd9, 0x98, 0xc4, 0xff, 0xc5, 0x01, 0x00, 0x00, +var fileDescriptor_1ef256a608c6e0fe = []byte{ + // 345 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x44, 0x91, 0xcb, 0x4e, 0xf2, 0x40, + 0x1c, 0xc5, 0x5b, 0x3e, 0xe0, 0x83, 0xd1, 0x18, 0x9c, 0xa0, 0x99, 0x90, 0x58, 0xd0, 0x55, 0x5d, + 0xd8, 0x26, 0x5e, 0xa2, 0x5b, 0x49, 0x5c, 0xb0, 0x21, 0xa6, 0xd1, 0x8d, 0x9b, 0xa6, 0x97, 0x7f, + 0xda, 0x09, 0xcc, 0x4c, 0xd3, 0x99, 0x12, 0x79, 0x0b, 0x1f, 0xc0, 0x07, 0x62, 0xc9, 0xd2, 0xb8, + 0x20, 0x06, 0x5e, 0xc4, 0x30, 0xa5, 0xb8, 0x9b, 0x73, 0xce, 0x2f, 0x67, 0x4e, 0x66, 0xd0, 0xa5, + 0x9c, 0xb3, 0x2c, 0x15, 0x7c, 0xee, 0x4a, 0x15, 0x4c, 0x80, 0x86, 0x91, 0x1b, 0xc4, 0x71, 0x0e, + 0x52, 0xfa, 0x05, 0x0f, 0x05, 0x8f, 0x29, 0x4f, 0x9c, 0x2c, 0x17, 0x4a, 0xe0, 0xe3, 0x0a, 0x75, + 0x2a, 0xb4, 0xd7, 0x4d, 0x44, 0x22, 0x74, 0xea, 0x6e, 0x4f, 0x25, 0x78, 0xf1, 0x59, 0x43, 0x9d, + 0xc7, 0xb2, 0xe4, 0xb5, 0xea, 0xc0, 0x04, 0xfd, 0xdf, 0x15, 0x13, 0x73, 0x60, 0xda, 0x6d, 0xaf, + 0x92, 0xb8, 0x87, 0x5a, 0x39, 0x44, 0x40, 0x67, 0x90, 0x93, 0x9a, 0x8e, 0xf6, 0x1a, 0x3f, 0x20, + 0xb2, 0x9f, 0xe1, 0x83, 0x54, 0x94, 0x05, 0x0a, 0x62, 0x5f, 0x51, 0x06, 0xe4, 0x9f, 0x66, 0x4f, + 0xf7, 0xf9, 0x53, 0x15, 0xbf, 0x50, 0x06, 0xf8, 0x0e, 0x35, 0x03, 0x26, 0x0a, 0xae, 0x48, 0x7d, + 0xcb, 0x0d, 0xcf, 0x16, 0xab, 0xbe, 0xf1, 0xbd, 0xea, 0x9f, 0x44, 0x42, 0x32, 0x21, 0x65, 0x3c, + 0x71, 0xa8, 0x70, 0x59, 0xa0, 0x52, 0x67, 0xc4, 0x95, 0xb7, 0x83, 0x71, 0x17, 0x35, 0x62, 0xe0, + 0x82, 0x91, 0x86, 0x6e, 0x2f, 0x05, 0xb6, 0x51, 0x27, 0x9a, 0x06, 0x94, 0xf9, 0x54, 0xfa, 0x19, + 0xe8, 0xdb, 0x48, 0x6b, 0x60, 0xda, 0x2d, 0xef, 0x48, 0xfb, 0x23, 0xf9, 0x5c, 0xba, 0xf8, 0x1c, + 0x1d, 0x42, 0x26, 0xa2, 0xd4, 0xe7, 0x05, 0x0b, 0x21, 0x27, 0xed, 0x81, 0x69, 0xd7, 0xbd, 0x03, + 0xed, 0x8d, 0xb5, 0x35, 0x1c, 0x2f, 0xd6, 0x96, 0xb9, 0x5c, 0x5b, 0xe6, 0xcf, 0xda, 0x32, 0x3f, + 0x36, 0x96, 0xb1, 0xdc, 0x58, 0xc6, 0xd7, 0xc6, 0x32, 0xde, 0x6e, 0x13, 0xaa, 0xd2, 0x22, 0x74, + 0x22, 0xc1, 0x5c, 0xbd, 0x92, 0xca, 0xab, 0x69, 0x10, 0xca, 0x4a, 0xb8, 0xb3, 0xeb, 0x7b, 0xf7, + 0xfd, 0xef, 0xa7, 0xd4, 0x3c, 0x03, 0x19, 0x36, 0xf5, 0xab, 0xdf, 0xfc, 0x06, 0x00, 0x00, 0xff, + 0xff, 0xdb, 0x6e, 0xe5, 0x62, 0xcb, 0x01, 0x00, 0x00, } func (m *AddressUnbonding) Marshal() (dAtA []byte, err error) { diff --git a/x/stakeibc/types/callbacks.pb.go b/x/stakeibc/types/callbacks.pb.go index 4440e9a4000..491993dc667 100644 --- a/x/stakeibc/types/callbacks.pb.go +++ b/x/stakeibc/types/callbacks.pb.go @@ -1,15 +1,15 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/stakeibc/callbacks.proto +// source: symphony/stakeibc/callbacks.proto package types import ( cosmossdk_io_math "cosmossdk.io/math" fmt "fmt" - types1 "github.com/osmosis-labs/osmosis/v27/x/records/types" types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + types1 "github.com/osmosis-labs/osmosis/v27/x/records/types" io "io" math "math" math_bits "math/bits" @@ -35,7 +35,7 @@ func (m *SplitDelegation) Reset() { *m = SplitDelegation{} } func (m *SplitDelegation) String() string { return proto.CompactTextString(m) } func (*SplitDelegation) ProtoMessage() {} func (*SplitDelegation) Descriptor() ([]byte, []int) { - return fileDescriptor_f41c99b09b96a5ac, []int{0} + return fileDescriptor_76ca5bd8a3692f4d, []int{0} } func (m *SplitDelegation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -80,7 +80,7 @@ func (m *SplitUndelegation) Reset() { *m = SplitUndelegation{} } func (m *SplitUndelegation) String() string { return proto.CompactTextString(m) } func (*SplitUndelegation) ProtoMessage() {} func (*SplitUndelegation) Descriptor() ([]byte, []int) { - return fileDescriptor_f41c99b09b96a5ac, []int{1} + return fileDescriptor_76ca5bd8a3692f4d, []int{1} } func (m *SplitUndelegation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -126,7 +126,7 @@ func (m *DelegateCallback) Reset() { *m = DelegateCallback{} } func (m *DelegateCallback) String() string { return proto.CompactTextString(m) } func (*DelegateCallback) ProtoMessage() {} func (*DelegateCallback) Descriptor() ([]byte, []int) { - return fileDescriptor_f41c99b09b96a5ac, []int{2} + return fileDescriptor_76ca5bd8a3692f4d, []int{2} } func (m *DelegateCallback) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -186,7 +186,7 @@ func (m *ClaimCallback) Reset() { *m = ClaimCallback{} } func (m *ClaimCallback) String() string { return proto.CompactTextString(m) } func (*ClaimCallback) ProtoMessage() {} func (*ClaimCallback) Descriptor() ([]byte, []int) { - return fileDescriptor_f41c99b09b96a5ac, []int{3} + return fileDescriptor_76ca5bd8a3692f4d, []int{3} } func (m *ClaimCallback) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -245,7 +245,7 @@ func (m *ReinvestCallback) Reset() { *m = ReinvestCallback{} } func (m *ReinvestCallback) String() string { return proto.CompactTextString(m) } func (*ReinvestCallback) ProtoMessage() {} func (*ReinvestCallback) Descriptor() ([]byte, []int) { - return fileDescriptor_f41c99b09b96a5ac, []int{4} + return fileDescriptor_76ca5bd8a3692f4d, []int{4} } func (m *ReinvestCallback) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -298,7 +298,7 @@ func (m *UndelegateCallback) Reset() { *m = UndelegateCallback{} } func (m *UndelegateCallback) String() string { return proto.CompactTextString(m) } func (*UndelegateCallback) ProtoMessage() {} func (*UndelegateCallback) Descriptor() ([]byte, []int) { - return fileDescriptor_f41c99b09b96a5ac, []int{5} + return fileDescriptor_76ca5bd8a3692f4d, []int{5} } func (m *UndelegateCallback) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -357,7 +357,7 @@ func (m *RedemptionCallback) Reset() { *m = RedemptionCallback{} } func (m *RedemptionCallback) String() string { return proto.CompactTextString(m) } func (*RedemptionCallback) ProtoMessage() {} func (*RedemptionCallback) Descriptor() ([]byte, []int) { - return fileDescriptor_f41c99b09b96a5ac, []int{6} + return fileDescriptor_76ca5bd8a3692f4d, []int{6} } func (m *RedemptionCallback) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -410,7 +410,7 @@ func (m *Rebalancing) Reset() { *m = Rebalancing{} } func (m *Rebalancing) String() string { return proto.CompactTextString(m) } func (*Rebalancing) ProtoMessage() {} func (*Rebalancing) Descriptor() ([]byte, []int) { - return fileDescriptor_f41c99b09b96a5ac, []int{7} + return fileDescriptor_76ca5bd8a3692f4d, []int{7} } func (m *Rebalancing) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -462,7 +462,7 @@ func (m *RebalanceCallback) Reset() { *m = RebalanceCallback{} } func (m *RebalanceCallback) String() string { return proto.CompactTextString(m) } func (*RebalanceCallback) ProtoMessage() {} func (*RebalanceCallback) Descriptor() ([]byte, []int) { - return fileDescriptor_f41c99b09b96a5ac, []int{8} + return fileDescriptor_76ca5bd8a3692f4d, []int{8} } func (m *RebalanceCallback) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -513,7 +513,7 @@ func (m *DetokenizeSharesCallback) Reset() { *m = DetokenizeSharesCallba func (m *DetokenizeSharesCallback) String() string { return proto.CompactTextString(m) } func (*DetokenizeSharesCallback) ProtoMessage() {} func (*DetokenizeSharesCallback) Descriptor() ([]byte, []int) { - return fileDescriptor_f41c99b09b96a5ac, []int{9} + return fileDescriptor_76ca5bd8a3692f4d, []int{9} } func (m *DetokenizeSharesCallback) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -559,7 +559,7 @@ func (m *LSMLiquidStake) Reset() { *m = LSMLiquidStake{} } func (m *LSMLiquidStake) String() string { return proto.CompactTextString(m) } func (*LSMLiquidStake) ProtoMessage() {} func (*LSMLiquidStake) Descriptor() ([]byte, []int) { - return fileDescriptor_f41c99b09b96a5ac, []int{10} + return fileDescriptor_76ca5bd8a3692f4d, []int{10} } func (m *LSMLiquidStake) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -617,7 +617,7 @@ func (m *ValidatorSharesToTokensQueryCallback) Reset() { *m = ValidatorS func (m *ValidatorSharesToTokensQueryCallback) String() string { return proto.CompactTextString(m) } func (*ValidatorSharesToTokensQueryCallback) ProtoMessage() {} func (*ValidatorSharesToTokensQueryCallback) Descriptor() ([]byte, []int) { - return fileDescriptor_f41c99b09b96a5ac, []int{11} + return fileDescriptor_76ca5bd8a3692f4d, []int{11} } func (m *ValidatorSharesToTokensQueryCallback) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -662,7 +662,7 @@ func (m *DelegatorSharesQueryCallback) Reset() { *m = DelegatorSharesQue func (m *DelegatorSharesQueryCallback) String() string { return proto.CompactTextString(m) } func (*DelegatorSharesQueryCallback) ProtoMessage() {} func (*DelegatorSharesQueryCallback) Descriptor() ([]byte, []int) { - return fileDescriptor_f41c99b09b96a5ac, []int{12} + return fileDescriptor_76ca5bd8a3692f4d, []int{12} } func (m *DelegatorSharesQueryCallback) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -692,7 +692,7 @@ func (m *DelegatorSharesQueryCallback) XXX_DiscardUnknown() { var xxx_messageInfo_DelegatorSharesQueryCallback proto.InternalMessageInfo type CommunityPoolBalanceQueryCallback struct { - IcaType ICAAccountType `protobuf:"varint,1,opt,name=ica_type,json=icaType,proto3,enum=stride.stakeibc.ICAAccountType" json:"ica_type,omitempty"` + IcaType ICAAccountType `protobuf:"varint,1,opt,name=ica_type,json=icaType,proto3,enum=symphony.stakeibc.ICAAccountType" json:"ica_type,omitempty"` Denom string `protobuf:"bytes,2,opt,name=denom,proto3" json:"denom,omitempty"` } @@ -700,7 +700,7 @@ func (m *CommunityPoolBalanceQueryCallback) Reset() { *m = CommunityPool func (m *CommunityPoolBalanceQueryCallback) String() string { return proto.CompactTextString(m) } func (*CommunityPoolBalanceQueryCallback) ProtoMessage() {} func (*CommunityPoolBalanceQueryCallback) Descriptor() ([]byte, []int) { - return fileDescriptor_f41c99b09b96a5ac, []int{13} + return fileDescriptor_76ca5bd8a3692f4d, []int{13} } func (m *CommunityPoolBalanceQueryCallback) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -752,7 +752,7 @@ func (m *TradeRouteCallback) Reset() { *m = TradeRouteCallback{} } func (m *TradeRouteCallback) String() string { return proto.CompactTextString(m) } func (*TradeRouteCallback) ProtoMessage() {} func (*TradeRouteCallback) Descriptor() ([]byte, []int) { - return fileDescriptor_f41c99b09b96a5ac, []int{14} + return fileDescriptor_76ca5bd8a3692f4d, []int{14} } func (m *TradeRouteCallback) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -796,89 +796,89 @@ func (m *TradeRouteCallback) GetHostDenom() string { } func init() { - proto.RegisterType((*SplitDelegation)(nil), "stride.stakeibc.SplitDelegation") - proto.RegisterType((*SplitUndelegation)(nil), "stride.stakeibc.SplitUndelegation") - proto.RegisterType((*DelegateCallback)(nil), "stride.stakeibc.DelegateCallback") - proto.RegisterType((*ClaimCallback)(nil), "stride.stakeibc.ClaimCallback") - proto.RegisterType((*ReinvestCallback)(nil), "stride.stakeibc.ReinvestCallback") - proto.RegisterType((*UndelegateCallback)(nil), "stride.stakeibc.UndelegateCallback") - proto.RegisterType((*RedemptionCallback)(nil), "stride.stakeibc.RedemptionCallback") - proto.RegisterType((*Rebalancing)(nil), "stride.stakeibc.Rebalancing") - proto.RegisterType((*RebalanceCallback)(nil), "stride.stakeibc.RebalanceCallback") - proto.RegisterType((*DetokenizeSharesCallback)(nil), "stride.stakeibc.DetokenizeSharesCallback") - proto.RegisterType((*LSMLiquidStake)(nil), "stride.stakeibc.LSMLiquidStake") - proto.RegisterType((*ValidatorSharesToTokensQueryCallback)(nil), "stride.stakeibc.ValidatorSharesToTokensQueryCallback") - proto.RegisterType((*DelegatorSharesQueryCallback)(nil), "stride.stakeibc.DelegatorSharesQueryCallback") - proto.RegisterType((*CommunityPoolBalanceQueryCallback)(nil), "stride.stakeibc.CommunityPoolBalanceQueryCallback") - proto.RegisterType((*TradeRouteCallback)(nil), "stride.stakeibc.TradeRouteCallback") -} - -func init() { proto.RegisterFile("stride/stakeibc/callbacks.proto", fileDescriptor_f41c99b09b96a5ac) } - -var fileDescriptor_f41c99b09b96a5ac = []byte{ - // 984 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0x4d, 0x6f, 0xdb, 0x46, - 0x13, 0x36, 0xad, 0xbc, 0xb1, 0x3d, 0xfe, 0x14, 0x93, 0xb7, 0x95, 0x05, 0x45, 0xb2, 0x99, 0x02, - 0x0d, 0x0a, 0x84, 0x44, 0x5c, 0xb4, 0x48, 0xdb, 0x4b, 0x6d, 0xf9, 0x50, 0x01, 0x72, 0xd1, 0x52, - 0x76, 0x0e, 0xb9, 0x10, 0x4b, 0x72, 0x2b, 0x2d, 0x44, 0xee, 0x2a, 0xdc, 0xa5, 0x52, 0xe7, 0xd2, - 0x1e, 0x73, 0xec, 0xdf, 0x68, 0x2f, 0xfd, 0x05, 0xbd, 0xfb, 0x98, 0x63, 0xd1, 0x43, 0x5a, 0xd8, - 0x7f, 0xa4, 0xd8, 0x0f, 0x52, 0x94, 0x9c, 0x26, 0x35, 0x7a, 0x12, 0x39, 0xfb, 0xcc, 0xce, 0x33, - 0xf3, 0xcc, 0x8c, 0x08, 0x1d, 0x2e, 0x32, 0x12, 0x63, 0x8f, 0x0b, 0x34, 0xc6, 0x24, 0x8c, 0xbc, - 0x08, 0x25, 0x49, 0x88, 0xa2, 0x31, 0x77, 0x27, 0x19, 0x13, 0xcc, 0xde, 0xd6, 0x00, 0xb7, 0x00, - 0x34, 0xdb, 0x11, 0xe3, 0x29, 0xe3, 0x5e, 0x88, 0x38, 0xf6, 0xa6, 0x8f, 0x42, 0x2c, 0xd0, 0x23, - 0x2f, 0x62, 0x84, 0x6a, 0x87, 0xe6, 0xdd, 0x21, 0x1b, 0x32, 0xf5, 0xe8, 0xc9, 0x27, 0x63, 0x6d, - 0x99, 0x38, 0x19, 0x8e, 0x58, 0x16, 0xf3, 0xe2, 0xd7, 0x9c, 0x5e, 0x63, 0x31, 0x62, 0x5c, 0x04, - 0x2f, 0x18, 0xc5, 0x06, 0xb0, 0xbf, 0x08, 0x20, 0x11, 0x0a, 0x50, 0x14, 0xb1, 0x9c, 0x8a, 0x7f, - 0xba, 0x63, 0x8a, 0x12, 0x12, 0x23, 0xc1, 0x32, 0x0d, 0x70, 0xbe, 0x83, 0xed, 0xc1, 0x24, 0x21, - 0xe2, 0x18, 0x27, 0x78, 0x88, 0x04, 0x61, 0xd4, 0x6e, 0xc1, 0x5a, 0x89, 0x6a, 0x58, 0x7b, 0xd6, - 0x83, 0x35, 0x7f, 0x66, 0xb0, 0x3f, 0x81, 0xdb, 0x28, 0x95, 0x11, 0x1a, 0xcb, 0xf2, 0xe8, 0xe8, - 0xde, 0xc5, 0xeb, 0xce, 0xd2, 0x1f, 0xaf, 0x3b, 0xff, 0xd7, 0x15, 0xe0, 0xf1, 0xd8, 0x25, 0xcc, - 0x4b, 0x91, 0x18, 0xb9, 0x3d, 0x2a, 0x7c, 0x03, 0x76, 0x7e, 0xb4, 0xa0, 0xae, 0x02, 0x9d, 0xd1, - 0xf8, 0xdf, 0x86, 0x3a, 0x81, 0x3b, 0x14, 0x09, 0x32, 0xc5, 0x81, 0x60, 0x63, 0x4c, 0x83, 0x9b, - 0xc4, 0xad, 0x6b, 0xcf, 0x53, 0xe9, 0x78, 0xa8, 0x29, 0xfc, 0x6a, 0xc1, 0x8e, 0x49, 0x13, 0x77, - 0x8d, 0xa0, 0xf6, 0x1e, 0x6c, 0x94, 0x65, 0x0d, 0x48, 0x6c, 0x48, 0x80, 0xb4, 0x3d, 0x65, 0x14, - 0xf7, 0x62, 0xfb, 0x23, 0xa8, 0xc7, 0x78, 0xc2, 0x38, 0x11, 0x81, 0xd6, 0x47, 0xc2, 0x24, 0x87, - 0x5b, 0xfe, 0xb6, 0x39, 0xf0, 0x95, 0xbd, 0x17, 0xdb, 0x27, 0x50, 0xe7, 0x32, 0xc9, 0x60, 0x96, - 0x23, 0x6f, 0xd4, 0xf6, 0x6a, 0x0f, 0xd6, 0x0f, 0xf6, 0xdc, 0x85, 0x9e, 0x71, 0x17, 0xea, 0xee, - 0xef, 0xf0, 0x79, 0x03, 0x77, 0x5e, 0x5a, 0xb0, 0xd9, 0x4d, 0x10, 0x49, 0x4b, 0xba, 0x9f, 0xc1, - 0x6e, 0xce, 0x71, 0x16, 0x64, 0x38, 0xc6, 0xe9, 0x44, 0xa2, 0x2a, 0xa4, 0x34, 0xf7, 0xf7, 0x24, - 0xc0, 0x2f, 0xcf, 0x4b, 0x6e, 0xbb, 0xb0, 0x1a, 0x8d, 0x10, 0xa1, 0x05, 0xfd, 0x35, 0x7f, 0x45, - 0xbd, 0xf7, 0x62, 0x7b, 0x1f, 0x36, 0xf0, 0x84, 0x45, 0xa3, 0x80, 0xe6, 0x69, 0x88, 0xb3, 0x46, - 0x4d, 0x65, 0xb7, 0xae, 0x6c, 0x5f, 0x2b, 0x93, 0xf3, 0xb3, 0x05, 0x3b, 0x3e, 0x26, 0x74, 0x8a, - 0xb9, 0x28, 0xd9, 0x70, 0xd8, 0xce, 0x8c, 0xad, 0x10, 0x47, 0x72, 0x58, 0x3f, 0xd8, 0x75, 0xb5, - 0x2a, 0xae, 0x9c, 0x07, 0xd7, 0xcc, 0x83, 0xdb, 0x65, 0x84, 0x1e, 0x79, 0x52, 0xb7, 0x5f, 0xfe, - 0xec, 0x7c, 0x38, 0x24, 0x62, 0x94, 0x87, 0x6e, 0xc4, 0x52, 0xcf, 0x0c, 0x8f, 0xfe, 0x79, 0xc8, - 0xe3, 0xb1, 0x27, 0xce, 0x27, 0x98, 0x2b, 0x07, 0x7f, 0xab, 0x08, 0xa1, 0x65, 0xbc, 0xa6, 0x58, - 0x6d, 0x51, 0x31, 0xe7, 0xc2, 0x02, 0xbb, 0x6c, 0xb3, 0x9b, 0x48, 0x3d, 0x80, 0x3b, 0x5a, 0xbe, - 0x9c, 0x56, 0x05, 0x5c, 0x56, 0x02, 0x3a, 0x6f, 0x16, 0xb0, 0xda, 0xcf, 0xbe, 0xcd, 0x17, 0x4d, - 0xdc, 0xfe, 0x02, 0x9a, 0xba, 0xb8, 0x39, 0x0d, 0x19, 0x8d, 0x09, 0x1d, 0xce, 0x24, 0xd3, 0xcd, - 0x71, 0xcb, 0x7f, 0x5f, 0x21, 0xce, 0x0a, 0x40, 0xa1, 0x19, 0x77, 0x38, 0xd8, 0x33, 0x29, 0x6f, - 0x90, 0xc9, 0xdb, 0x83, 0x2e, 0xbf, 0x3d, 0xe8, 0x4b, 0x0b, 0xd6, 0x7d, 0x1c, 0xa2, 0x04, 0xd1, - 0x88, 0xd0, 0xa1, 0x7d, 0x1f, 0x36, 0x79, 0x16, 0x05, 0x8b, 0x93, 0xba, 0xc1, 0xb3, 0xe8, 0x49, - 0x39, 0xac, 0xf7, 0x61, 0x33, 0xe6, 0xa2, 0x02, 0xd2, 0x3d, 0xb6, 0x11, 0x73, 0x31, 0x03, 0x79, - 0x50, 0x43, 0xa9, 0xd0, 0x92, 0xbd, 0x6b, 0x82, 0x25, 0xd2, 0x79, 0x0e, 0xf5, 0x82, 0xc9, 0x4d, - 0x84, 0xfc, 0x12, 0x36, 0xb2, 0x59, 0x02, 0x85, 0x82, 0xad, 0x6b, 0x0a, 0x56, 0xb2, 0xf4, 0xe7, - 0x3c, 0x9c, 0x33, 0x68, 0x1c, 0x63, 0xb5, 0x76, 0xc8, 0x0b, 0x3c, 0x18, 0xa1, 0x0c, 0xf3, 0xca, - 0x10, 0xae, 0x98, 0xc1, 0x37, 0xed, 0xde, 0x29, 0x2e, 0x2e, 0x16, 0x78, 0x7f, 0x70, 0xa2, 0x36, - 0xcf, 0xb1, 0xd9, 0x0f, 0x05, 0xde, 0xf9, 0xcd, 0x82, 0xad, 0xfe, 0xe0, 0xa4, 0x4f, 0x9e, 0xe5, - 0x24, 0x1e, 0x48, 0x1a, 0xff, 0xe1, 0x36, 0xfb, 0x53, 0x58, 0x2b, 0x0b, 0xa1, 0xea, 0x2d, 0x27, - 0x6f, 0x31, 0xc7, 0xaf, 0x4c, 0x59, 0xfc, 0xd5, 0xa2, 0x40, 0xf6, 0xe3, 0xea, 0xda, 0xad, 0x29, - 0xbf, 0xe6, 0x35, 0xbf, 0x52, 0xb5, 0xca, 0x4a, 0x76, 0x9e, 0xc1, 0x07, 0xa5, 0x5d, 0x57, 0xe5, - 0x94, 0x29, 0x6e, 0xfc, 0xdb, 0x1c, 0x67, 0xe7, 0x65, 0x89, 0x7a, 0xb0, 0x93, 0xf0, 0x34, 0x48, - 0x54, 0x9e, 0x81, 0xba, 0x73, 0x31, 0xbb, 0x32, 0xd0, 0x7c, 0x3d, 0xfc, 0xad, 0x84, 0xa7, 0x95, - 0x77, 0xe7, 0x07, 0x68, 0x99, 0x9d, 0x58, 0x84, 0x9c, 0x0f, 0x15, 0x40, 0x8b, 0x50, 0x22, 0x08, - 0x4a, 0x66, 0xcd, 0x57, 0xd9, 0xbf, 0xba, 0x3b, 0xde, 0xd5, 0x6c, 0x4d, 0x73, 0x45, 0x99, 0xdc, - 0x6c, 0x0d, 0x3b, 0x39, 0xec, 0x77, 0x59, 0x9a, 0xe6, 0x94, 0x88, 0xf3, 0x6f, 0x18, 0x4b, 0x8e, - 0x74, 0x3b, 0xce, 0xb3, 0xf8, 0x1c, 0x56, 0xe5, 0xbf, 0xaf, 0xdc, 0x5b, 0x2a, 0xe2, 0xd6, 0x1b, - 0x12, 0xed, 0x75, 0x0f, 0x0f, 0xf5, 0xbf, 0xf3, 0xe9, 0xf9, 0x04, 0xfb, 0x2b, 0x24, 0x42, 0xf2, - 0xc1, 0xbe, 0x0b, 0xff, 0x8b, 0x31, 0x65, 0xa9, 0x19, 0x19, 0xfd, 0xe2, 0x3c, 0x01, 0xfb, 0x34, - 0x43, 0x31, 0xf6, 0x59, 0x5e, 0x59, 0x62, 0xfb, 0xb2, 0xb3, 0x9f, 0xa3, 0x2c, 0x0e, 0xb4, 0x8b, - 0xee, 0xfd, 0x75, 0x6d, 0x3b, 0x96, 0x26, 0xfb, 0x1e, 0xa8, 0x51, 0x08, 0xaa, 0x77, 0xaa, 0x3e, - 0x51, 0xc7, 0x47, 0xfd, 0x8b, 0xcb, 0xb6, 0xf5, 0xea, 0xb2, 0x6d, 0xfd, 0x75, 0xd9, 0xb6, 0x7e, - 0xba, 0x6a, 0x2f, 0xbd, 0xba, 0x6a, 0x2f, 0xfd, 0x7e, 0xd5, 0x5e, 0x7a, 0x7a, 0x50, 0x59, 0xc9, - 0x03, 0xc5, 0xfd, 0x61, 0x1f, 0x85, 0xdc, 0x33, 0xdf, 0x10, 0xd3, 0x83, 0xc7, 0xde, 0xf7, 0xb3, - 0x2f, 0x09, 0xb5, 0xa2, 0xc3, 0xdb, 0xea, 0x33, 0xe2, 0xe3, 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, - 0xc2, 0x78, 0x17, 0x35, 0x33, 0x09, 0x00, 0x00, + proto.RegisterType((*SplitDelegation)(nil), "symphony.stakeibc.SplitDelegation") + proto.RegisterType((*SplitUndelegation)(nil), "symphony.stakeibc.SplitUndelegation") + proto.RegisterType((*DelegateCallback)(nil), "symphony.stakeibc.DelegateCallback") + proto.RegisterType((*ClaimCallback)(nil), "symphony.stakeibc.ClaimCallback") + proto.RegisterType((*ReinvestCallback)(nil), "symphony.stakeibc.ReinvestCallback") + proto.RegisterType((*UndelegateCallback)(nil), "symphony.stakeibc.UndelegateCallback") + proto.RegisterType((*RedemptionCallback)(nil), "symphony.stakeibc.RedemptionCallback") + proto.RegisterType((*Rebalancing)(nil), "symphony.stakeibc.Rebalancing") + proto.RegisterType((*RebalanceCallback)(nil), "symphony.stakeibc.RebalanceCallback") + proto.RegisterType((*DetokenizeSharesCallback)(nil), "symphony.stakeibc.DetokenizeSharesCallback") + proto.RegisterType((*LSMLiquidStake)(nil), "symphony.stakeibc.LSMLiquidStake") + proto.RegisterType((*ValidatorSharesToTokensQueryCallback)(nil), "symphony.stakeibc.ValidatorSharesToTokensQueryCallback") + proto.RegisterType((*DelegatorSharesQueryCallback)(nil), "symphony.stakeibc.DelegatorSharesQueryCallback") + proto.RegisterType((*CommunityPoolBalanceQueryCallback)(nil), "symphony.stakeibc.CommunityPoolBalanceQueryCallback") + proto.RegisterType((*TradeRouteCallback)(nil), "symphony.stakeibc.TradeRouteCallback") +} + +func init() { proto.RegisterFile("symphony/stakeibc/callbacks.proto", fileDescriptor_76ca5bd8a3692f4d) } + +var fileDescriptor_76ca5bd8a3692f4d = []byte{ + // 991 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0x4f, 0x73, 0xdb, 0x44, + 0x14, 0x8f, 0xe2, 0xd2, 0x24, 0xcf, 0xf9, 0x67, 0xb5, 0x40, 0x12, 0x52, 0x27, 0x56, 0x3a, 0x43, + 0x87, 0x99, 0x4a, 0xd3, 0x00, 0xc3, 0x9f, 0x72, 0x89, 0x9d, 0x03, 0x1e, 0x92, 0x02, 0x72, 0x52, + 0x66, 0x7a, 0xd1, 0xac, 0xa4, 0xc5, 0xde, 0xb1, 0xb4, 0x6b, 0xb4, 0x2b, 0x17, 0xf7, 0x02, 0xc7, + 0x1e, 0xf9, 0x1a, 0x70, 0xe3, 0x33, 0x70, 0xe9, 0x70, 0xea, 0x91, 0xe1, 0x50, 0x98, 0xe4, 0x8b, + 0x30, 0xbb, 0xab, 0x7f, 0x4e, 0xdc, 0x96, 0x4c, 0x4f, 0x96, 0xde, 0xfe, 0xde, 0xbe, 0xdf, 0x7b, + 0xbf, 0xf7, 0x9e, 0x05, 0x2d, 0x3e, 0x89, 0x47, 0x03, 0x46, 0x27, 0x0e, 0x17, 0x68, 0x88, 0x89, + 0x1f, 0x38, 0x01, 0x8a, 0x22, 0x1f, 0x05, 0x43, 0x6e, 0x8f, 0x12, 0x26, 0x98, 0xd9, 0xc8, 0x21, + 0x76, 0x0e, 0xd9, 0x6a, 0x06, 0x8c, 0xc7, 0x8c, 0x3b, 0x3e, 0xe2, 0xd8, 0x19, 0xdf, 0xf3, 0xb1, + 0x40, 0xf7, 0x9c, 0x80, 0x11, 0xaa, 0x5d, 0xb6, 0x6e, 0xf6, 0x59, 0x9f, 0xa9, 0x47, 0x47, 0x3e, + 0x65, 0xd6, 0x66, 0x11, 0x2b, 0xc1, 0x01, 0x4b, 0x42, 0x9e, 0xff, 0x66, 0xe7, 0x33, 0xb8, 0x0c, + 0x18, 0x17, 0xde, 0x13, 0x46, 0x71, 0x06, 0xd9, 0xbb, 0x0c, 0x21, 0x01, 0xf2, 0x50, 0x10, 0xb0, + 0x94, 0x8a, 0x97, 0xdf, 0x33, 0x46, 0x11, 0x09, 0x91, 0x60, 0x89, 0x86, 0x58, 0xdf, 0xc3, 0x5a, + 0x6f, 0x14, 0x11, 0x71, 0x88, 0x23, 0xdc, 0x47, 0x82, 0x30, 0x6a, 0x6e, 0xc3, 0x52, 0x81, 0xda, + 0x30, 0x76, 0x8d, 0x3b, 0x4b, 0x6e, 0x69, 0x30, 0x3f, 0x86, 0xeb, 0x28, 0x96, 0x31, 0x36, 0xe6, + 0xe5, 0x51, 0xfb, 0xd6, 0xb3, 0x17, 0x3b, 0x73, 0x7f, 0xbf, 0xd8, 0x79, 0x5b, 0x57, 0x82, 0x87, + 0x43, 0x9b, 0x30, 0x27, 0x46, 0x62, 0x60, 0x77, 0xa9, 0x70, 0x33, 0xb0, 0xf5, 0xb3, 0x01, 0x0d, + 0x15, 0xe8, 0x94, 0x86, 0xff, 0x37, 0xd4, 0x31, 0xdc, 0xa0, 0x48, 0x90, 0x31, 0xf6, 0x04, 0x1b, + 0x62, 0xea, 0x5d, 0x25, 0x6e, 0x43, 0x7b, 0x9e, 0x48, 0xc7, 0x03, 0x4d, 0xe1, 0x77, 0x03, 0xd6, + 0xb3, 0x34, 0x71, 0x27, 0x93, 0xd6, 0xdc, 0x85, 0xe5, 0xa2, 0xb4, 0x1e, 0x09, 0x33, 0x12, 0x20, + 0x6d, 0x8f, 0x18, 0xc5, 0xdd, 0xd0, 0xfc, 0x00, 0x1a, 0x21, 0x1e, 0x31, 0x4e, 0x84, 0xa7, 0x55, + 0x92, 0x30, 0xc9, 0xe1, 0x9a, 0xbb, 0x96, 0x1d, 0xb8, 0xca, 0xde, 0x0d, 0xcd, 0xaf, 0xa1, 0xc1, + 0x65, 0x92, 0x5e, 0x99, 0x23, 0xdf, 0xa8, 0xed, 0xd6, 0xee, 0xd4, 0xf7, 0x2d, 0xfb, 0x52, 0xf7, + 0xd8, 0x17, 0x2a, 0xef, 0xae, 0xf3, 0x69, 0x03, 0xb7, 0x9e, 0x1a, 0xb0, 0xd2, 0x89, 0x10, 0x89, + 0x0b, 0xc2, 0x9f, 0xc1, 0x66, 0xca, 0x71, 0xe2, 0x25, 0x38, 0xc4, 0xf1, 0x48, 0xa2, 0x2a, 0xb4, + 0x34, 0xfb, 0x77, 0x24, 0xc0, 0x2d, 0xce, 0x0b, 0x76, 0x9b, 0xb0, 0x18, 0x0c, 0x10, 0xa1, 0x79, + 0x02, 0x4b, 0xee, 0x82, 0x7a, 0xef, 0x86, 0x66, 0x0b, 0x96, 0xf1, 0x88, 0x05, 0x03, 0x8f, 0xa6, + 0xb1, 0x8f, 0x93, 0x8d, 0x9a, 0xca, 0xaf, 0xae, 0x6c, 0x0f, 0x94, 0xc9, 0xfa, 0xd5, 0x80, 0x75, + 0x17, 0x13, 0x3a, 0xc6, 0x5c, 0x14, 0x6c, 0x38, 0xac, 0x25, 0x99, 0x2d, 0x97, 0x47, 0x72, 0xa8, + 0xef, 0x6f, 0xda, 0x5a, 0x17, 0x5b, 0x4e, 0x86, 0x9d, 0x4d, 0x86, 0xdd, 0x61, 0x84, 0xb6, 0x1d, + 0xa9, 0xdc, 0x6f, 0xff, 0xec, 0xbc, 0xdf, 0x27, 0x62, 0x90, 0xfa, 0x76, 0xc0, 0x62, 0x27, 0x1b, + 0x23, 0xfd, 0x73, 0x97, 0x87, 0x43, 0x47, 0x4c, 0x46, 0x98, 0x2b, 0x07, 0x77, 0x35, 0x0f, 0xa1, + 0x85, 0xbc, 0xa4, 0x59, 0xed, 0xa2, 0x66, 0xd6, 0x9f, 0x06, 0x98, 0x45, 0xa3, 0x5d, 0x45, 0xec, + 0x53, 0xb8, 0xa1, 0x05, 0x4c, 0x69, 0x55, 0xc2, 0x79, 0x25, 0xe1, 0xed, 0x97, 0x49, 0x58, 0xed, + 0x69, 0xd7, 0xe4, 0x17, 0x4d, 0xdc, 0xbc, 0x0f, 0x5b, 0xba, 0xbc, 0x29, 0xf5, 0x19, 0x0d, 0x09, + 0xed, 0x97, 0xa2, 0xe9, 0x06, 0xb9, 0xe6, 0xbe, 0xab, 0x10, 0xa7, 0x39, 0x20, 0x57, 0x8d, 0x5b, + 0x1c, 0xcc, 0x52, 0xcc, 0x2b, 0xe4, 0xf2, 0xea, 0xa0, 0xf3, 0xaf, 0x0e, 0xfa, 0xd4, 0x80, 0xba, + 0x8b, 0x7d, 0x14, 0x21, 0x1a, 0x10, 0xda, 0x37, 0xf7, 0x60, 0x85, 0x27, 0x81, 0x77, 0x71, 0x5a, + 0x97, 0x79, 0x12, 0x3c, 0x2c, 0x06, 0x76, 0x0f, 0x56, 0x42, 0x2e, 0x2a, 0x20, 0xdd, 0x65, 0xcb, + 0x21, 0x17, 0x25, 0xc8, 0x81, 0x1a, 0x8a, 0x85, 0x16, 0xed, 0x75, 0x53, 0x2c, 0x91, 0xd6, 0x04, + 0x1a, 0x39, 0x93, 0xab, 0x48, 0xd9, 0x86, 0xe5, 0xa4, 0x4c, 0x20, 0xd7, 0xb0, 0x39, 0x43, 0xc3, + 0x4a, 0x9e, 0xee, 0x94, 0x8f, 0xf5, 0x1d, 0x6c, 0x1c, 0x62, 0xb5, 0x7c, 0xc8, 0x13, 0xdc, 0x1b, + 0xa0, 0x04, 0xf3, 0x82, 0xc1, 0x7d, 0x58, 0xc8, 0xc6, 0x3f, 0x6b, 0xf9, 0x56, 0x79, 0x75, 0xbe, + 0xce, 0x8f, 0x7a, 0xc7, 0x6a, 0x03, 0x1d, 0x66, 0x7b, 0x22, 0xf7, 0xb0, 0xfe, 0x30, 0x60, 0xf5, + 0xa8, 0x77, 0x7c, 0x44, 0x7e, 0x48, 0x49, 0xd8, 0x93, 0x44, 0xde, 0xe8, 0x3e, 0xf3, 0x53, 0x58, + 0x2a, 0xca, 0xa1, 0xaa, 0x5e, 0xdf, 0x7f, 0x6f, 0x46, 0xa6, 0x5f, 0x66, 0xe5, 0x71, 0x17, 0xf3, + 0x42, 0x99, 0x9f, 0x57, 0x57, 0x70, 0x4d, 0x79, 0x6e, 0xcf, 0xf0, 0x2c, 0xf4, 0xab, 0x2c, 0x68, + 0x8b, 0xc3, 0xed, 0xc2, 0xae, 0xab, 0x73, 0xc2, 0x14, 0x3f, 0xfe, 0x6d, 0x8a, 0x93, 0x49, 0x51, + 0xaa, 0xaf, 0x60, 0x3d, 0xe2, 0xb1, 0x17, 0xa9, 0x6c, 0x3d, 0x75, 0xe7, 0xe5, 0x1c, 0x8b, 0x50, + 0xd3, 0x75, 0x71, 0x57, 0x23, 0x1e, 0x57, 0xde, 0xad, 0x9f, 0x60, 0x3b, 0xdb, 0x90, 0x79, 0xd0, + 0xe9, 0x60, 0x1e, 0x6c, 0x13, 0x4a, 0x04, 0x41, 0x51, 0xd9, 0x88, 0x95, 0x7d, 0xac, 0x3b, 0xe5, + 0x75, 0x8d, 0xb7, 0x95, 0x5d, 0x51, 0xa4, 0x57, 0x2e, 0x65, 0xeb, 0x31, 0xb4, 0x3a, 0x2c, 0x8e, + 0x53, 0x4a, 0xc4, 0xe4, 0x1b, 0xc6, 0xa2, 0xb6, 0x6e, 0xcd, 0x69, 0x16, 0x5f, 0xc0, 0xa2, 0xfc, + 0x3f, 0x96, 0x5b, 0x4c, 0x45, 0x5c, 0x9d, 0x99, 0x6a, 0xb7, 0x73, 0x70, 0xa0, 0xff, 0xb1, 0x4f, + 0x26, 0x23, 0xec, 0x2e, 0x90, 0x00, 0xc9, 0x07, 0xf3, 0x26, 0xbc, 0x15, 0x62, 0xca, 0xe2, 0x6c, + 0x80, 0xf4, 0x8b, 0xf5, 0x10, 0xcc, 0x93, 0x04, 0x85, 0xd8, 0x65, 0x69, 0x65, 0xa9, 0xb5, 0x64, + 0x9f, 0x3f, 0x46, 0x49, 0xe8, 0x69, 0x17, 0x3d, 0x09, 0x75, 0x6d, 0x3b, 0x94, 0x26, 0xf3, 0x16, + 0xa8, 0xc1, 0xf0, 0xaa, 0x77, 0xaa, 0x7e, 0x51, 0xc7, 0xed, 0x07, 0xcf, 0xce, 0x9a, 0xc6, 0xf3, + 0xb3, 0xa6, 0xf1, 0xef, 0x59, 0xd3, 0xf8, 0xe5, 0xbc, 0x39, 0xf7, 0xfc, 0xbc, 0x39, 0xf7, 0xd7, + 0x79, 0x73, 0xee, 0xd1, 0x47, 0x95, 0x15, 0xad, 0xea, 0x44, 0xf8, 0xdd, 0x08, 0xf9, 0x3c, 0x7f, + 0x71, 0xc6, 0xfb, 0x9f, 0x38, 0x3f, 0x96, 0x5f, 0x17, 0x6a, 0x69, 0xfb, 0xd7, 0xd5, 0xa7, 0xc5, + 0x87, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0xf3, 0x14, 0x7b, 0xd3, 0x53, 0x09, 0x00, 0x00, } func (m *SplitDelegation) Marshal() (dAtA []byte, err error) { diff --git a/x/stakeibc/types/epoch_tracker.pb.go b/x/stakeibc/types/epoch_tracker.pb.go index 38cb4716e8b..d1ec05c54b3 100644 --- a/x/stakeibc/types/epoch_tracker.pb.go +++ b/x/stakeibc/types/epoch_tracker.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/stakeibc/epoch_tracker.proto +// source: symphony/stakeibc/epoch_tracker.proto package types @@ -33,7 +33,7 @@ func (m *EpochTracker) Reset() { *m = EpochTracker{} } func (m *EpochTracker) String() string { return proto.CompactTextString(m) } func (*EpochTracker) ProtoMessage() {} func (*EpochTracker) Descriptor() ([]byte, []int) { - return fileDescriptor_e7c48143f24adf66, []int{0} + return fileDescriptor_7372b3dc102537ed, []int{0} } func (m *EpochTracker) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -91,32 +91,32 @@ func (m *EpochTracker) GetDuration() uint64 { } func init() { - proto.RegisterType((*EpochTracker)(nil), "stride.stakeibc.EpochTracker") + proto.RegisterType((*EpochTracker)(nil), "symphony.stakeibc.EpochTracker") } func init() { - proto.RegisterFile("stride/stakeibc/epoch_tracker.proto", fileDescriptor_e7c48143f24adf66) + proto.RegisterFile("symphony/stakeibc/epoch_tracker.proto", fileDescriptor_7372b3dc102537ed) } -var fileDescriptor_e7c48143f24adf66 = []byte{ - // 257 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x2e, 0x2e, 0x29, 0xca, - 0x4c, 0x49, 0xd5, 0x2f, 0x2e, 0x49, 0xcc, 0x4e, 0xcd, 0x4c, 0x4a, 0xd6, 0x4f, 0x2d, 0xc8, 0x4f, - 0xce, 0x88, 0x2f, 0x29, 0x4a, 0x4c, 0xce, 0x4e, 0x2d, 0xd2, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, - 0xe2, 0x87, 0x28, 0xd2, 0x83, 0x29, 0x52, 0x5a, 0xcd, 0xc8, 0xc5, 0xe3, 0x0a, 0x52, 0x18, 0x02, - 0x51, 0x27, 0xa4, 0xc9, 0x25, 0x00, 0xd1, 0x98, 0x99, 0x92, 0x9a, 0x57, 0x92, 0x99, 0x96, 0x99, - 0x5a, 0x24, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x19, 0xc4, 0x0f, 0x16, 0xf7, 0x84, 0x0b, 0x0b, 0x29, - 0x72, 0xf1, 0x40, 0x94, 0xe6, 0x95, 0xe6, 0x26, 0xa5, 0x16, 0x49, 0x30, 0x29, 0x30, 0x6a, 0xb0, - 0x04, 0x71, 0x83, 0xc5, 0xfc, 0xc0, 0x42, 0x42, 0x86, 0x5c, 0xa2, 0x79, 0xa9, 0x15, 0x25, 0xf1, - 0x10, 0x75, 0xc5, 0x25, 0x89, 0x45, 0x25, 0xf1, 0x25, 0x99, 0xb9, 0xa9, 0x12, 0xcc, 0x60, 0xb5, - 0x42, 0x20, 0x49, 0xb0, 0xf5, 0xc1, 0x20, 0xa9, 0x90, 0xcc, 0xdc, 0x54, 0x21, 0x29, 0x2e, 0x8e, - 0x94, 0xd2, 0xa2, 0xc4, 0x92, 0xcc, 0xfc, 0x3c, 0x09, 0x16, 0xb0, 0x2a, 0x38, 0xdf, 0xc9, 0xe7, - 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, 0x18, 0x1f, 0x3c, 0x92, 0x63, 0x9c, 0xf0, 0x58, 0x8e, - 0xe1, 0xc2, 0x63, 0x39, 0x86, 0x1b, 0x8f, 0xe5, 0x18, 0xa2, 0x8c, 0xd2, 0x33, 0x4b, 0x32, 0x4a, - 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0x83, 0xc1, 0x7e, 0xd4, 0xf5, 0x49, 0x4c, 0x2a, 0xd6, 0x87, - 0x06, 0x4a, 0x99, 0x91, 0x85, 0x7e, 0x05, 0x22, 0x68, 0x4a, 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, - 0xc0, 0x61, 0x62, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x5d, 0x93, 0x36, 0xf8, 0x3a, 0x01, 0x00, - 0x00, +var fileDescriptor_7372b3dc102537ed = []byte{ + // 262 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x2d, 0xae, 0xcc, 0x2d, + 0xc8, 0xc8, 0xcf, 0xab, 0xd4, 0x2f, 0x2e, 0x49, 0xcc, 0x4e, 0xcd, 0x4c, 0x4a, 0xd6, 0x4f, 0x2d, + 0xc8, 0x4f, 0xce, 0x88, 0x2f, 0x29, 0x4a, 0x4c, 0xce, 0x4e, 0x2d, 0xd2, 0x2b, 0x28, 0xca, 0x2f, + 0xc9, 0x17, 0x12, 0x84, 0x29, 0xd3, 0x83, 0x29, 0x53, 0x5a, 0xcd, 0xc8, 0xc5, 0xe3, 0x0a, 0x52, + 0x1a, 0x02, 0x51, 0x29, 0xa4, 0xc9, 0x25, 0x00, 0xd1, 0x9a, 0x99, 0x92, 0x9a, 0x57, 0x92, 0x99, + 0x96, 0x99, 0x5a, 0x24, 0xc1, 0xa8, 0xc0, 0xa8, 0xc1, 0x19, 0xc4, 0x0f, 0x16, 0xf7, 0x84, 0x0b, + 0x0b, 0x29, 0x72, 0xf1, 0x40, 0x94, 0xe6, 0x95, 0xe6, 0x26, 0xa5, 0x16, 0x49, 0x30, 0x29, 0x30, + 0x6a, 0xb0, 0x04, 0x71, 0x83, 0xc5, 0xfc, 0xc0, 0x42, 0x42, 0x86, 0x5c, 0xa2, 0x79, 0xa9, 0x15, + 0x25, 0xf1, 0x10, 0x75, 0xc5, 0x25, 0x89, 0x45, 0x25, 0xf1, 0x25, 0x99, 0xb9, 0xa9, 0x12, 0xcc, + 0x60, 0xb5, 0x42, 0x20, 0x49, 0xb0, 0xf5, 0xc1, 0x20, 0xa9, 0x90, 0xcc, 0xdc, 0x54, 0x21, 0x29, + 0x2e, 0x8e, 0x94, 0xd2, 0xa2, 0xc4, 0x92, 0xcc, 0xfc, 0x3c, 0x09, 0x16, 0xb0, 0x2a, 0x38, 0xdf, + 0xc9, 0xef, 0xc4, 0x23, 0x39, 0xc6, 0x0b, 0x8f, 0xe4, 0x18, 0x1f, 0x3c, 0x92, 0x63, 0x9c, 0xf0, + 0x58, 0x8e, 0xe1, 0xc2, 0x63, 0x39, 0x86, 0x1b, 0x8f, 0xe5, 0x18, 0xa2, 0x4c, 0xd2, 0x33, 0x4b, + 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0xf3, 0x8b, 0x73, 0xf3, 0x8b, 0x33, 0x8b, 0x75, + 0x73, 0x12, 0x93, 0x8a, 0x61, 0x1c, 0xfd, 0x32, 0x23, 0x73, 0xfd, 0x0a, 0x44, 0xf0, 0x94, 0x54, + 0x16, 0xa4, 0x16, 0x27, 0xb1, 0x81, 0xc3, 0xc5, 0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0xd6, 0x13, + 0x3c, 0x66, 0x40, 0x01, 0x00, 0x00, } func (m *EpochTracker) Marshal() (dAtA []byte, err error) { diff --git a/x/stakeibc/types/genesis.pb.go b/x/stakeibc/types/genesis.pb.go index 8bf9c6834f1..85340564afc 100644 --- a/x/stakeibc/types/genesis.pb.go +++ b/x/stakeibc/types/genesis.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/stakeibc/genesis.proto +// source: symphony/stakeibc/genesis.proto package types @@ -36,7 +36,7 @@ func (m *GenesisState) Reset() { *m = GenesisState{} } func (m *GenesisState) String() string { return proto.CompactTextString(m) } func (*GenesisState) ProtoMessage() {} func (*GenesisState) Descriptor() ([]byte, []int) { - return fileDescriptor_dea81129ed6fb77a, []int{0} + return fileDescriptor_bf7f27004da8efcb, []int{0} } func (m *GenesisState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -101,37 +101,38 @@ func (m *GenesisState) GetTradeRoutes() []TradeRoute { } func init() { - proto.RegisterType((*GenesisState)(nil), "stride.stakeibc.GenesisState") + proto.RegisterType((*GenesisState)(nil), "symphony.stakeibc.GenesisState") } -func init() { proto.RegisterFile("stride/stakeibc/genesis.proto", fileDescriptor_dea81129ed6fb77a) } +func init() { proto.RegisterFile("symphony/stakeibc/genesis.proto", fileDescriptor_bf7f27004da8efcb) } -var fileDescriptor_dea81129ed6fb77a = []byte{ - // 384 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x91, 0xcf, 0x6f, 0xa2, 0x40, - 0x14, 0xc7, 0x41, 0x47, 0xc4, 0x81, 0xec, 0x12, 0xb2, 0x89, 0xac, 0xbb, 0xa2, 0xbb, 0x7b, 0xf1, - 0xb2, 0x90, 0xb0, 0xd9, 0xa4, 0x67, 0x53, 0xd3, 0x96, 0x78, 0x68, 0xd5, 0x93, 0x17, 0xc2, 0x8f, - 0x09, 0x10, 0xab, 0x43, 0x66, 0xc6, 0xa6, 0xed, 0x5f, 0xd1, 0x3f, 0xcb, 0xa3, 0xc7, 0x1e, 0x9a, - 0xa6, 0xd1, 0x7f, 0xa4, 0x01, 0xa6, 0xc6, 0xe2, 0x8d, 0xf7, 0xbe, 0x9f, 0x7c, 0x78, 0xf3, 0x1e, - 0xec, 0x52, 0x46, 0xd2, 0x08, 0xd9, 0x94, 0xf9, 0x0b, 0x94, 0x06, 0xa1, 0x1d, 0xa3, 0x15, 0xa2, - 0x29, 0xb5, 0x32, 0x82, 0x19, 0xd6, 0xbf, 0x96, 0xb1, 0xf5, 0x11, 0x77, 0xbe, 0xc5, 0x38, 0xc6, - 0x45, 0x66, 0xe7, 0x5f, 0x25, 0xd6, 0xf9, 0x53, 0xb5, 0xa0, 0x0c, 0x87, 0x89, 0xc7, 0x88, 0x1f, - 0x2e, 0x10, 0xe1, 0x50, 0xaf, 0x0a, 0x25, 0x98, 0x32, 0xef, 0x11, 0xaf, 0x10, 0x07, 0x7e, 0x56, - 0x81, 0xcc, 0x27, 0xfe, 0x92, 0x8f, 0xd2, 0xf9, 0x55, 0x4d, 0x19, 0xf1, 0x23, 0xe4, 0x11, 0xbc, - 0x66, 0x5c, 0xf0, 0xfb, 0xa5, 0x06, 0xd5, 0x8b, 0x72, 0xfe, 0x29, 0xf3, 0x19, 0xd2, 0xff, 0x43, - 0xa9, 0x74, 0x18, 0x62, 0x5f, 0x1c, 0x28, 0x4e, 0xdb, 0xaa, 0xbc, 0xc7, 0xba, 0x2e, 0xe2, 0x21, - 0xd8, 0xbc, 0xf6, 0x84, 0x09, 0x87, 0xf5, 0x36, 0x6c, 0x66, 0x98, 0x30, 0x2f, 0x8d, 0x8c, 0x5a, - 0x5f, 0x1c, 0xb4, 0x26, 0x52, 0x5e, 0x5e, 0x45, 0xfa, 0x08, 0x7e, 0x39, 0x0c, 0xed, 0xdd, 0xa6, - 0x94, 0x19, 0x8d, 0x7e, 0x7d, 0xa0, 0x38, 0xdf, 0x4f, 0xbc, 0x97, 0x98, 0xb2, 0x39, 0x5e, 0x21, - 0x6e, 0x56, 0x13, 0x5e, 0x8f, 0x53, 0xca, 0xf4, 0x1b, 0xa8, 0x7f, 0x5a, 0x50, 0xa9, 0x82, 0x85, - 0xaa, 0x7b, 0xa2, 0x1a, 0xe5, 0xe8, 0xac, 0x24, 0xb9, 0x4e, 0x43, 0x47, 0xbd, 0x42, 0x79, 0x0e, - 0xd5, 0xa3, 0x7d, 0x50, 0x43, 0x2d, 0x64, 0x3f, 0x4e, 0x64, 0xb3, 0x1c, 0x9a, 0xe4, 0x0c, 0x57, - 0x29, 0xec, 0xd0, 0xa1, 0x2e, 0x90, 0xeb, 0x1a, 0x70, 0x81, 0x0c, 0xb4, 0x86, 0x0b, 0x64, 0x49, - 0x6b, 0xba, 0x40, 0x6e, 0x69, 0xd0, 0x05, 0xb2, 0xa2, 0xa9, 0xc3, 0xf1, 0x66, 0x67, 0x8a, 0xdb, - 0x9d, 0x29, 0xbe, 0xed, 0x4c, 0xf1, 0x69, 0x6f, 0x0a, 0xdb, 0xbd, 0x29, 0x3c, 0xef, 0x4d, 0x61, - 0xee, 0xc4, 0x29, 0x4b, 0xd6, 0x81, 0x15, 0xe2, 0xa5, 0x3d, 0x2d, 0xfe, 0xf8, 0x77, 0xec, 0x07, - 0xd4, 0xe6, 0x27, 0xbb, 0x73, 0xce, 0xec, 0xfb, 0xa3, 0xc3, 0x3d, 0x64, 0x88, 0x06, 0x52, 0x71, - 0xb3, 0x7f, 0xef, 0x01, 0x00, 0x00, 0xff, 0xff, 0x20, 0x71, 0xfe, 0x09, 0x82, 0x02, 0x00, 0x00, +var fileDescriptor_bf7f27004da8efcb = []byte{ + // 385 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x91, 0x4f, 0x6b, 0xe2, 0x40, + 0x18, 0x87, 0x13, 0x1d, 0x63, 0x9c, 0x84, 0x25, 0x1b, 0x16, 0x36, 0xeb, 0xd2, 0x68, 0x5b, 0x0a, + 0x5e, 0x9a, 0x80, 0x2d, 0x78, 0x17, 0x5a, 0xdb, 0x50, 0x4a, 0x51, 0x4f, 0x5e, 0x42, 0x12, 0x87, + 0x24, 0x68, 0x32, 0x21, 0x33, 0x96, 0xda, 0x4f, 0xd1, 0x8f, 0xe5, 0xd1, 0x63, 0x4f, 0xa5, 0x68, + 0x3f, 0x48, 0x49, 0x32, 0x8a, 0x25, 0xde, 0xe6, 0x37, 0xef, 0xc3, 0xc3, 0xfb, 0x07, 0xb6, 0xc8, + 0x32, 0x4a, 0x02, 0x1c, 0x2f, 0x4d, 0x42, 0x9d, 0x19, 0x0a, 0x5d, 0xcf, 0xf4, 0x51, 0x8c, 0x48, + 0x48, 0x8c, 0x24, 0xc5, 0x14, 0xab, 0xbf, 0x77, 0x80, 0xb1, 0x03, 0x9a, 0x7f, 0x7c, 0xec, 0xe3, + 0xbc, 0x6a, 0x66, 0xaf, 0x02, 0x6c, 0x5e, 0x94, 0x4d, 0x28, 0xc1, 0x5e, 0x60, 0xd3, 0xd4, 0xf1, + 0x66, 0x28, 0x65, 0xd8, 0x69, 0x19, 0x0b, 0x30, 0xa1, 0xf6, 0x2b, 0x8e, 0x11, 0x43, 0xf4, 0x32, + 0x92, 0x38, 0xa9, 0x13, 0xb1, 0x96, 0x9a, 0xe7, 0xe5, 0x3a, 0x4d, 0x9d, 0x29, 0xb2, 0x53, 0xbc, + 0xa0, 0x4c, 0x72, 0xf6, 0x55, 0x81, 0xf2, 0xa0, 0x98, 0x64, 0x44, 0x1d, 0x8a, 0xd4, 0x1e, 0x14, + 0x0a, 0x8b, 0xc6, 0xb7, 0xf9, 0x8e, 0xd4, 0xfd, 0x67, 0x94, 0x26, 0x33, 0x9e, 0x72, 0xa0, 0x0f, + 0x56, 0x1f, 0x2d, 0x6e, 0xc8, 0x70, 0xf5, 0x2f, 0xac, 0x27, 0x38, 0xa5, 0x76, 0x38, 0xd5, 0x2a, + 0x6d, 0xbe, 0xd3, 0x18, 0x0a, 0x59, 0xbc, 0x9f, 0xaa, 0x03, 0xf8, 0x6b, 0xdf, 0xba, 0x3d, 0x0f, + 0x09, 0xd5, 0x6a, 0xed, 0x6a, 0x47, 0xea, 0xfe, 0x3f, 0x62, 0xbe, 0xc3, 0x84, 0x4e, 0x70, 0x8c, + 0x98, 0x5b, 0x0e, 0x58, 0x7e, 0x08, 0x09, 0x55, 0x47, 0x50, 0xfd, 0xb1, 0xaa, 0x42, 0x06, 0x73, + 0x59, 0xeb, 0x88, 0xec, 0x26, 0x83, 0xc7, 0x05, 0xcb, 0x84, 0x0a, 0x3a, 0xf8, 0xcb, 0xa5, 0xb7, + 0x50, 0x3e, 0xd8, 0x0a, 0xd1, 0xe4, 0x5c, 0x77, 0x72, 0x44, 0x37, 0xce, 0xb0, 0x61, 0x46, 0x31, + 0x99, 0x44, 0xf7, 0x3f, 0xc4, 0x02, 0x62, 0x55, 0x01, 0x16, 0x10, 0x81, 0x52, 0xb3, 0x80, 0x28, + 0x28, 0x75, 0x0b, 0x88, 0x0d, 0x05, 0x5a, 0x40, 0x94, 0x14, 0xb9, 0xff, 0xb8, 0xda, 0xe8, 0xfc, + 0x7a, 0xa3, 0xf3, 0x9f, 0x1b, 0x9d, 0x7f, 0xdb, 0xea, 0xdc, 0x7a, 0xab, 0x73, 0xef, 0x5b, 0x9d, + 0x9b, 0x5c, 0xfb, 0x21, 0x0d, 0x16, 0xae, 0xe1, 0xe1, 0xc8, 0xc4, 0x24, 0xc2, 0x24, 0x24, 0x97, + 0x73, 0xc7, 0x25, 0xbb, 0x60, 0x3e, 0x77, 0x7b, 0xe6, 0xcb, 0xc1, 0x09, 0x97, 0x09, 0x22, 0xae, + 0x90, 0x5f, 0xef, 0xea, 0x3b, 0x00, 0x00, 0xff, 0xff, 0xde, 0x08, 0xf5, 0x21, 0x98, 0x02, 0x00, + 0x00, } func (m *GenesisState) Marshal() (dAtA []byte, err error) { diff --git a/x/stakeibc/types/gov.pb.go b/x/stakeibc/types/gov.pb.go index 849c787dce5..dd2a214b836 100644 --- a/x/stakeibc/types/gov.pb.go +++ b/x/stakeibc/types/gov.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/stakeibc/gov.proto +// source: symphony/stakeibc/gov.proto package types @@ -35,7 +35,7 @@ type AddValidatorsProposal struct { func (m *AddValidatorsProposal) Reset() { *m = AddValidatorsProposal{} } func (*AddValidatorsProposal) ProtoMessage() {} func (*AddValidatorsProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_8204317b384c5680, []int{0} + return fileDescriptor_1e666326c57bae0c, []int{0} } func (m *AddValidatorsProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -75,7 +75,7 @@ type ToggleLSMProposal struct { func (m *ToggleLSMProposal) Reset() { *m = ToggleLSMProposal{} } func (*ToggleLSMProposal) ProtoMessage() {} func (*ToggleLSMProposal) Descriptor() ([]byte, []int) { - return fileDescriptor_8204317b384c5680, []int{1} + return fileDescriptor_1e666326c57bae0c, []int{1} } func (m *ToggleLSMProposal) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -105,38 +105,38 @@ func (m *ToggleLSMProposal) XXX_DiscardUnknown() { var xxx_messageInfo_ToggleLSMProposal proto.InternalMessageInfo func init() { - proto.RegisterType((*AddValidatorsProposal)(nil), "stride.stakeibc.AddValidatorsProposal") - proto.RegisterType((*ToggleLSMProposal)(nil), "stride.stakeibc.ToggleLSMProposal") + proto.RegisterType((*AddValidatorsProposal)(nil), "symphony.stakeibc.AddValidatorsProposal") + proto.RegisterType((*ToggleLSMProposal)(nil), "symphony.stakeibc.ToggleLSMProposal") } -func init() { proto.RegisterFile("stride/stakeibc/gov.proto", fileDescriptor_8204317b384c5680) } +func init() { proto.RegisterFile("symphony/stakeibc/gov.proto", fileDescriptor_1e666326c57bae0c) } -var fileDescriptor_8204317b384c5680 = []byte{ - // 379 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x2c, 0x2e, 0x29, 0xca, - 0x4c, 0x49, 0xd5, 0x2f, 0x2e, 0x49, 0xcc, 0x4e, 0xcd, 0x4c, 0x4a, 0xd6, 0x4f, 0xcf, 0x2f, 0xd3, - 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x87, 0x48, 0xe9, 0xc1, 0xa4, 0xa4, 0x04, 0x13, 0x73, - 0x33, 0xf3, 0xf2, 0xf5, 0xc1, 0x24, 0x44, 0x8d, 0x94, 0x48, 0x7a, 0x7e, 0x7a, 0x3e, 0x98, 0xa9, - 0x0f, 0x62, 0x41, 0x45, 0xe5, 0xd1, 0x0d, 0x2d, 0x4b, 0xcc, 0xc9, 0x4c, 0x49, 0x2c, 0xc9, 0x2f, - 0x82, 0x28, 0x50, 0x6a, 0x67, 0xe2, 0x12, 0x75, 0x4c, 0x49, 0x09, 0x83, 0x09, 0x17, 0x07, 0x14, - 0xe5, 0x17, 0xe4, 0x17, 0x27, 0xe6, 0x08, 0x89, 0x70, 0xb1, 0x96, 0x64, 0x96, 0xe4, 0xa4, 0x4a, - 0x30, 0x2a, 0x30, 0x6a, 0x70, 0x06, 0x41, 0x38, 0x42, 0x0a, 0x5c, 0xdc, 0x29, 0xa9, 0xc5, 0xc9, - 0x45, 0x99, 0x05, 0x25, 0x99, 0xf9, 0x79, 0x12, 0x4c, 0x60, 0x39, 0x64, 0x21, 0x21, 0x69, 0x2e, - 0xce, 0x8c, 0xfc, 0xe2, 0x92, 0xf8, 0xaa, 0xfc, 0xbc, 0x54, 0x09, 0x66, 0xb0, 0x3c, 0x07, 0x48, - 0x20, 0x2a, 0x3f, 0x2f, 0x55, 0xc8, 0x8a, 0x8b, 0x0b, 0xee, 0x82, 0x62, 0x09, 0x16, 0x05, 0x66, - 0x0d, 0x6e, 0x23, 0x29, 0x3d, 0x34, 0xef, 0xe9, 0xc1, 0x5d, 0x13, 0x84, 0xa4, 0x5a, 0x48, 0x87, - 0x8b, 0x3d, 0x25, 0xb5, 0x20, 0xbf, 0x38, 0xb3, 0x44, 0x82, 0x15, 0x64, 0xac, 0x93, 0xd0, 0xa7, - 0x7b, 0xf2, 0x7c, 0x95, 0x89, 0xb9, 0x39, 0x56, 0x4a, 0x50, 0x09, 0xa5, 0x20, 0x98, 0x12, 0x2b, - 0xfd, 0x8e, 0x05, 0xf2, 0x0c, 0x33, 0x16, 0xc8, 0x33, 0xbc, 0x58, 0x20, 0xcf, 0xd8, 0xf5, 0x7c, - 0x83, 0x96, 0x1c, 0x3c, 0x0c, 0xb0, 0xfa, 0x57, 0xe9, 0x2e, 0x23, 0x97, 0x60, 0x48, 0x7e, 0x7a, - 0x7a, 0x4e, 0xaa, 0x4f, 0xb0, 0x2f, 0x6d, 0x43, 0x41, 0x82, 0x8b, 0x3d, 0x35, 0x2f, 0x31, 0x29, - 0x27, 0x35, 0x45, 0x82, 0x45, 0x81, 0x51, 0x83, 0x23, 0x08, 0xc6, 0x25, 0xd1, 0x8f, 0xda, 0xe8, - 0x7e, 0x94, 0x82, 0xfb, 0x11, 0xc3, 0x27, 0x4e, 0x3e, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, - 0xc7, 0xf8, 0xe0, 0x91, 0x1c, 0xe3, 0x84, 0xc7, 0x72, 0x0c, 0x17, 0x1e, 0xcb, 0x31, 0xdc, 0x78, - 0x2c, 0xc7, 0x10, 0x65, 0x94, 0x9e, 0x59, 0x92, 0x51, 0x9a, 0xa4, 0x97, 0x9c, 0x9f, 0xab, 0x1f, - 0x0c, 0x8e, 0x0a, 0x5d, 0x9f, 0xc4, 0xa4, 0x62, 0x7d, 0x68, 0xda, 0x29, 0x33, 0xb2, 0xd0, 0xaf, - 0x40, 0xa4, 0xa0, 0x92, 0xca, 0x82, 0xd4, 0xe2, 0x24, 0x36, 0x70, 0xf2, 0x31, 0x06, 0x04, 0x00, - 0x00, 0xff, 0xff, 0x5b, 0xf5, 0x3c, 0xe5, 0xb6, 0x02, 0x00, 0x00, +var fileDescriptor_1e666326c57bae0c = []byte{ + // 384 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x2e, 0xae, 0xcc, 0x2d, + 0xc8, 0xc8, 0xcf, 0xab, 0xd4, 0x2f, 0x2e, 0x49, 0xcc, 0x4e, 0xcd, 0x4c, 0x4a, 0xd6, 0x4f, 0xcf, + 0x2f, 0xd3, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x84, 0x49, 0xea, 0xc1, 0x24, 0xa5, 0x04, + 0x13, 0x73, 0x33, 0xf3, 0xf2, 0xf5, 0xc1, 0x24, 0x44, 0x95, 0x94, 0x48, 0x7a, 0x7e, 0x7a, 0x3e, + 0x98, 0xa9, 0x0f, 0x62, 0x41, 0x45, 0x15, 0x31, 0x0d, 0x2e, 0x4b, 0xcc, 0xc9, 0x4c, 0x49, 0x2c, + 0xc9, 0x2f, 0x82, 0x28, 0x51, 0xea, 0x64, 0xe2, 0x12, 0x75, 0x4c, 0x49, 0x09, 0x83, 0x09, 0x17, + 0x07, 0x14, 0xe5, 0x17, 0xe4, 0x17, 0x27, 0xe6, 0x08, 0x89, 0x70, 0xb1, 0x96, 0x64, 0x96, 0xe4, + 0xa4, 0x4a, 0x30, 0x2a, 0x30, 0x6a, 0x70, 0x06, 0x41, 0x38, 0x42, 0x0a, 0x5c, 0xdc, 0x29, 0xa9, + 0xc5, 0xc9, 0x45, 0x99, 0x05, 0x25, 0x99, 0xf9, 0x79, 0x12, 0x4c, 0x60, 0x39, 0x64, 0x21, 0x21, + 0x69, 0x2e, 0xce, 0x8c, 0xfc, 0xe2, 0x92, 0xf8, 0xaa, 0xfc, 0xbc, 0x54, 0x09, 0x66, 0xb0, 0x3c, + 0x07, 0x48, 0x20, 0x2a, 0x3f, 0x2f, 0x55, 0xc8, 0x86, 0x8b, 0x0b, 0xee, 0x82, 0x62, 0x09, 0x16, + 0x05, 0x66, 0x0d, 0x6e, 0x23, 0x19, 0x3d, 0x0c, 0x2f, 0xea, 0xc1, 0xdd, 0x13, 0x84, 0xa4, 0x5e, + 0x48, 0x87, 0x8b, 0x3d, 0x25, 0xb5, 0x20, 0xbf, 0x38, 0xb3, 0x44, 0x82, 0x15, 0x64, 0xb0, 0x93, + 0xd0, 0xa7, 0x7b, 0xf2, 0x7c, 0x95, 0x89, 0xb9, 0x39, 0x56, 0x4a, 0x50, 0x09, 0xa5, 0x20, 0x98, + 0x12, 0x2b, 0xfd, 0x8e, 0x05, 0xf2, 0x0c, 0x33, 0x16, 0xc8, 0x33, 0xbc, 0x58, 0x20, 0xcf, 0xd8, + 0xf5, 0x7c, 0x83, 0x96, 0x1c, 0x3c, 0x14, 0xb0, 0xfa, 0x58, 0xe9, 0x2e, 0x23, 0x97, 0x60, 0x48, + 0x7e, 0x7a, 0x7a, 0x4e, 0xaa, 0x4f, 0xb0, 0x2f, 0x6d, 0xc3, 0x41, 0x82, 0x8b, 0x3d, 0x35, 0x2f, + 0x31, 0x29, 0x27, 0x35, 0x45, 0x82, 0x45, 0x81, 0x51, 0x83, 0x23, 0x08, 0xc6, 0x25, 0xd1, 0x8f, + 0xda, 0xe8, 0x7e, 0x94, 0x82, 0xfb, 0x11, 0xc3, 0x27, 0x4e, 0x7e, 0x27, 0x1e, 0xc9, 0x31, 0x5e, + 0x78, 0x24, 0xc7, 0xf8, 0xe0, 0x91, 0x1c, 0xe3, 0x84, 0xc7, 0x72, 0x0c, 0x17, 0x1e, 0xcb, 0x31, + 0xdc, 0x78, 0x2c, 0xc7, 0x10, 0x65, 0x92, 0x9e, 0x59, 0x92, 0x51, 0x9a, 0xa4, 0x97, 0x9c, 0x9f, + 0xab, 0x9f, 0x5f, 0x9c, 0x9b, 0x5f, 0x9c, 0x59, 0xac, 0x9b, 0x93, 0x98, 0x54, 0x0c, 0xe3, 0xe8, + 0x97, 0x19, 0x99, 0xeb, 0x57, 0x20, 0x52, 0x51, 0x49, 0x65, 0x41, 0x6a, 0x71, 0x12, 0x1b, 0x38, + 0x09, 0x19, 0x03, 0x02, 0x00, 0x00, 0xff, 0xff, 0x39, 0x54, 0xc3, 0xdb, 0xc0, 0x02, 0x00, 0x00, } func (this *AddValidatorsProposal) Equal(that interface{}) bool { diff --git a/x/stakeibc/types/host_zone.pb.go b/x/stakeibc/types/host_zone.pb.go index 3719b9abf56..28b84d409f8 100644 --- a/x/stakeibc/types/host_zone.pb.go +++ b/x/stakeibc/types/host_zone.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/stakeibc/host_zone.proto +// source: symphony/stakeibc/host_zone.proto package types @@ -38,7 +38,7 @@ func (m *CommunityPoolRebate) Reset() { *m = CommunityPoolRebate{} } func (m *CommunityPoolRebate) String() string { return proto.CompactTextString(m) } func (*CommunityPoolRebate) ProtoMessage() {} func (*CommunityPoolRebate) Descriptor() ([]byte, []int) { - return fileDescriptor_f81bf5b42c61245a, []int{0} + return fileDescriptor_f22456d67e86547d, []int{0} } func (m *CommunityPoolRebate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -150,7 +150,7 @@ func (m *HostZone) Reset() { *m = HostZone{} } func (m *HostZone) String() string { return proto.CompactTextString(m) } func (*HostZone) ProtoMessage() {} func (*HostZone) Descriptor() ([]byte, []int) { - return fileDescriptor_f81bf5b42c61245a, []int{1} + return fileDescriptor_f22456d67e86547d, []int{1} } func (m *HostZone) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -341,77 +341,77 @@ func (m *HostZone) GetHalted() bool { } func init() { - proto.RegisterType((*CommunityPoolRebate)(nil), "stride.stakeibc.CommunityPoolRebate") - proto.RegisterType((*HostZone)(nil), "stride.stakeibc.HostZone") + proto.RegisterType((*CommunityPoolRebate)(nil), "symphony.stakeibc.CommunityPoolRebate") + proto.RegisterType((*HostZone)(nil), "symphony.stakeibc.HostZone") } -func init() { proto.RegisterFile("stride/stakeibc/host_zone.proto", fileDescriptor_f81bf5b42c61245a) } +func init() { proto.RegisterFile("symphony/stakeibc/host_zone.proto", fileDescriptor_f22456d67e86547d) } -var fileDescriptor_f81bf5b42c61245a = []byte{ - // 1005 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x96, 0xdd, 0x6e, 0xdb, 0x36, - 0x14, 0xc7, 0xe3, 0xd6, 0x4d, 0x15, 0xa6, 0x89, 0x65, 0x39, 0x49, 0x95, 0xa4, 0x71, 0x9c, 0x8f, - 0x02, 0xd9, 0x45, 0x6c, 0x2c, 0x1d, 0xb0, 0x61, 0x57, 0x4b, 0x9b, 0x01, 0xb5, 0x91, 0x15, 0x81, - 0x12, 0x0c, 0x43, 0x6e, 0x08, 0x8a, 0x64, 0x2c, 0x2e, 0x12, 0xe9, 0x91, 0x74, 0xeb, 0xec, 0x29, - 0xf6, 0x0c, 0x7b, 0x86, 0x5e, 0xee, 0x01, 0x7a, 0x59, 0xf4, 0x6a, 0xd8, 0x45, 0x31, 0x24, 0x2f, - 0x32, 0x88, 0x92, 0x6c, 0xd9, 0xca, 0xe0, 0xc2, 0x57, 0x31, 0xcf, 0xc7, 0xef, 0x7f, 0x18, 0x92, - 0x47, 0x07, 0x6c, 0x2b, 0x2d, 0x19, 0xa1, 0x2d, 0xa5, 0xd1, 0x35, 0x65, 0x3e, 0x6e, 0x05, 0x42, - 0x69, 0xf8, 0xbb, 0xe0, 0xb4, 0xd9, 0x93, 0x42, 0x0b, 0xa7, 0x92, 0x04, 0x34, 0xb3, 0x80, 0x8d, - 0x75, 0x2c, 0x54, 0x24, 0x14, 0x34, 0xee, 0x56, 0xb2, 0x48, 0x62, 0x37, 0x56, 0xba, 0xa2, 0x2b, - 0x12, 0x7b, 0xfc, 0x2b, 0xb5, 0x16, 0x24, 0xde, 0xa2, 0x90, 0x11, 0xa4, 0x85, 0x4c, 0x02, 0x76, - 0xff, 0x2a, 0x81, 0xda, 0x2b, 0x11, 0x45, 0x7d, 0xce, 0xf4, 0xcd, 0x99, 0x10, 0xa1, 0x47, 0x7d, - 0xa4, 0xa9, 0x73, 0x02, 0x16, 0xa5, 0xf9, 0x05, 0x25, 0xd2, 0xd4, 0x2d, 0x35, 0x4a, 0x07, 0x0b, - 0x2f, 0xf7, 0x3e, 0x7c, 0xde, 0x9e, 0xfb, 0xe7, 0xf3, 0xf6, 0x66, 0xa2, 0xac, 0xc8, 0x75, 0x93, - 0x89, 0x56, 0x84, 0x74, 0xd0, 0x3c, 0xa5, 0x5d, 0x84, 0x6f, 0x4e, 0x28, 0xf6, 0x40, 0x92, 0xe7, - 0xc5, 0x14, 0x08, 0xb6, 0x42, 0xf6, 0x5b, 0x9f, 0x11, 0x68, 0x0a, 0x88, 0xff, 0x40, 0x2d, 0xae, - 0x29, 0x87, 0x28, 0x12, 0x7d, 0xae, 0xdd, 0x07, 0x86, 0xbb, 0x95, 0x72, 0x57, 0x8b, 0xdc, 0x36, - 0xd7, 0xde, 0x7a, 0xc2, 0x38, 0x37, 0x88, 0x73, 0x7d, 0x11, 0x03, 0x8e, 0x4d, 0xfe, 0xee, 0x9f, - 0x55, 0x60, 0xbd, 0x16, 0x4a, 0x5f, 0x0a, 0x4e, 0x9d, 0x75, 0x60, 0xe1, 0x00, 0x31, 0x0e, 0x19, - 0x49, 0x0a, 0xf6, 0x1e, 0x9b, 0x75, 0x9b, 0x38, 0xbb, 0xe0, 0x89, 0x4f, 0x71, 0xf0, 0xe2, 0xa8, - 0x27, 0xe9, 0x15, 0x1b, 0xb8, 0x55, 0xe3, 0x1e, 0xb3, 0x39, 0x7b, 0x60, 0x09, 0x0b, 0xce, 0x29, - 0xd6, 0x4c, 0x18, 0xc6, 0x83, 0x24, 0x68, 0x64, 0x6c, 0x13, 0xa7, 0x09, 0x6a, 0x5a, 0x22, 0xae, - 0xae, 0xa8, 0x84, 0x38, 0x40, 0x9c, 0xd3, 0x30, 0x0e, 0x7d, 0x62, 0x42, 0xab, 0x99, 0xeb, 0x55, - 0xe2, 0x69, 0x13, 0x67, 0x13, 0x2c, 0x30, 0x1f, 0x43, 0x42, 0xb9, 0x88, 0x5c, 0xcb, 0x44, 0x59, - 0xcc, 0xc7, 0x27, 0xf1, 0xda, 0xd9, 0x02, 0xc0, 0x1c, 0x79, 0xe2, 0x5d, 0x30, 0xde, 0x85, 0xd8, - 0x92, 0xb8, 0xbf, 0x02, 0x76, 0x9f, 0xfb, 0x82, 0x13, 0xc6, 0xbb, 0xb0, 0x47, 0x25, 0x13, 0xc4, - 0xdd, 0x68, 0x94, 0x0e, 0xca, 0x5e, 0x65, 0x68, 0x3f, 0x33, 0x66, 0xe7, 0x7b, 0x00, 0x86, 0x27, - 0xab, 0xdc, 0x87, 0x8d, 0x87, 0x07, 0x8b, 0x47, 0x1b, 0xcd, 0x89, 0xeb, 0xd3, 0xfc, 0x39, 0x0b, - 0xf1, 0x72, 0xd1, 0xce, 0x31, 0xa8, 0x10, 0xda, 0x13, 0x8a, 0x69, 0x88, 0x08, 0x91, 0x54, 0x29, - 0xd7, 0x31, 0xc7, 0xe2, 0x7e, 0x7a, 0x7f, 0xb8, 0x92, 0x5e, 0xb2, 0xe3, 0xc4, 0x73, 0xae, 0x25, - 0xe3, 0x5d, 0x6f, 0x39, 0x4d, 0x48, 0xad, 0xce, 0x1b, 0xb0, 0xf6, 0x8e, 0xe9, 0x80, 0x48, 0xf4, - 0x0e, 0x85, 0x90, 0x61, 0x34, 0x24, 0xad, 0x4d, 0x21, 0xad, 0x8c, 0xf2, 0xda, 0x18, 0x65, 0xbc, - 0x1f, 0x40, 0xe5, 0x8a, 0xd2, 0x31, 0xd0, 0xd3, 0x29, 0xa0, 0xa5, 0x2b, 0x4a, 0x73, 0x84, 0x37, - 0x60, 0x8d, 0xd0, 0x90, 0x76, 0x51, 0x72, 0x98, 0x39, 0x90, 0x3b, 0xad, 0xa2, 0x51, 0xde, 0x38, - 0x4f, 0x52, 0x42, 0xa3, 0x5e, 0x81, 0xb7, 0x3e, 0x8d, 0x37, 0xca, 0xcb, 0xf1, 0x08, 0xd8, 0xc5, - 0xd9, 0xb3, 0x83, 0x3d, 0x21, 0x42, 0x98, 0x9d, 0x41, 0x9e, 0x5d, 0x9f, 0xc2, 0xae, 0xe3, 0xfc, - 0xd3, 0x3d, 0x49, 0x08, 0x39, 0x15, 0x1f, 0xec, 0x4c, 0xa8, 0x48, 0xaa, 0xfb, 0x72, 0x7c, 0x03, - 0xdb, 0x53, 0x44, 0xb6, 0xf0, 0x78, 0x7f, 0x88, 0x01, 0x39, 0x8d, 0x00, 0xec, 0x4f, 0x68, 0x98, - 0xfb, 0x06, 0x03, 0x11, 0x9a, 0x8b, 0x9b, 0xc9, 0x34, 0xa6, 0xc8, 0x34, 0xc6, 0x64, 0xcc, 0x63, - 0x7f, 0x9d, 0x20, 0x32, 0xa5, 0x5f, 0xc1, 0xf3, 0xc2, 0x6e, 0x08, 0xa5, 0x51, 0x41, 0x6a, 0x67, - 0x8a, 0xd4, 0xce, 0xc4, 0x8e, 0x62, 0xc8, 0x84, 0x16, 0x04, 0xdb, 0x13, 0x5a, 0x5a, 0x52, 0xa4, - 0xfa, 0xf2, 0x66, 0xa8, 0xb2, 0x37, 0x45, 0xe5, 0xd9, 0x98, 0xca, 0x45, 0x9a, 0x9e, 0x09, 0x74, - 0x40, 0x55, 0x0b, 0x8d, 0xe2, 0x73, 0xcf, 0xae, 0x9b, 0x72, 0x97, 0xbe, 0xa4, 0x1d, 0xda, 0x26, - 0xef, 0x64, 0x94, 0xe6, 0x60, 0xb0, 0x12, 0x22, 0xa5, 0x61, 0xee, 0x86, 0x9a, 0xae, 0x0d, 0x0c, - 0xee, 0xeb, 0x2f, 0xe8, 0xda, 0x9f, 0xde, 0x1f, 0x82, 0x74, 0x13, 0x71, 0x0f, 0x77, 0x62, 0x9c, - 0x37, 0xa4, 0x99, 0x5e, 0x7e, 0x09, 0x2a, 0x93, 0xfc, 0xc5, 0x59, 0xf9, 0xcb, 0x72, 0x9c, 0x8d, - 0x40, 0x2d, 0x62, 0xbc, 0x50, 0xff, 0xca, 0xac, 0xfc, 0x6a, 0xc4, 0xb8, 0x57, 0x94, 0x40, 0x83, - 0x82, 0xc4, 0xea, 0xec, 0x12, 0x68, 0x30, 0x21, 0x11, 0x82, 0xf5, 0x78, 0x17, 0x8c, 0x73, 0x2a, - 0x0b, 0x42, 0xcf, 0x66, 0x15, 0x5a, 0x8b, 0x18, 0x6f, 0xc7, 0xc8, 0x7b, 0xd4, 0xd0, 0xe0, 0x7f, - 0xd4, 0xb6, 0x66, 0x57, 0x43, 0x83, 0xfb, 0xd4, 0xbe, 0x01, 0x4f, 0x63, 0xb5, 0x88, 0x2a, 0x85, - 0xba, 0x54, 0xc5, 0x9f, 0x23, 0xd3, 0x44, 0xf4, 0xc0, 0xdd, 0x37, 0x9f, 0xa4, 0xf8, 0xbf, 0xfb, - 0x53, 0xea, 0x3d, 0xa3, 0xb2, 0x8d, 0xd1, 0xc5, 0xc0, 0x69, 0x81, 0xda, 0xa8, 0x32, 0x05, 0x29, - 0x47, 0x7e, 0x48, 0x89, 0xfb, 0xbc, 0x51, 0x3a, 0xb0, 0x3c, 0x27, 0xe7, 0xfa, 0x31, 0xf1, 0x38, - 0xbf, 0x80, 0xd5, 0xc2, 0x13, 0x8f, 0xa7, 0x09, 0x77, 0xb7, 0x51, 0x3a, 0x58, 0x3c, 0xda, 0x2f, - 0x7c, 0xd2, 0xee, 0x99, 0x5d, 0xbc, 0x1a, 0xbe, 0x67, 0xa0, 0xf9, 0x16, 0xb8, 0xa1, 0x8a, 0x60, - 0x7e, 0x1c, 0x19, 0xd6, 0xb3, 0x69, 0xea, 0x59, 0x0d, 0x55, 0x74, 0x3a, 0x9a, 0x34, 0xb2, 0x92, - 0xd6, 0xc0, 0x7c, 0x80, 0x42, 0x4d, 0x89, 0x5b, 0x33, 0x61, 0xe9, 0xaa, 0x53, 0xb6, 0xca, 0xf6, - 0xa3, 0x4e, 0xd9, 0x7a, 0x64, 0xcf, 0x77, 0xca, 0xd6, 0xbc, 0xfd, 0xb8, 0x53, 0xb6, 0x1e, 0xdb, - 0x56, 0xa7, 0x6c, 0x2d, 0xdb, 0x95, 0x4e, 0xd9, 0xaa, 0xd8, 0x76, 0xa7, 0x6c, 0xd9, 0x76, 0xf5, - 0xe5, 0xe9, 0x87, 0xdb, 0x7a, 0xe9, 0xe3, 0x6d, 0xbd, 0xf4, 0xef, 0x6d, 0xbd, 0xf4, 0xc7, 0x5d, - 0x7d, 0xee, 0xe3, 0x5d, 0x7d, 0xee, 0xef, 0xbb, 0xfa, 0xdc, 0xe5, 0x51, 0x97, 0xe9, 0xa0, 0xef, - 0x37, 0xb1, 0x88, 0x5a, 0xe7, 0x66, 0x67, 0x87, 0xa7, 0xc8, 0x57, 0xad, 0x74, 0x6a, 0x7b, 0x7b, - 0xf4, 0x5d, 0x6b, 0x30, 0x9a, 0xdd, 0xf4, 0x4d, 0x8f, 0x2a, 0x7f, 0xde, 0x0c, 0x6e, 0x2f, 0xfe, - 0x0b, 0x00, 0x00, 0xff, 0xff, 0x91, 0x26, 0xd1, 0x28, 0x3e, 0x0a, 0x00, 0x00, +var fileDescriptor_f22456d67e86547d = []byte{ + // 1006 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x96, 0xcf, 0x6e, 0xdb, 0x36, + 0x18, 0xc0, 0xe3, 0xd6, 0x4d, 0x14, 0xa6, 0x89, 0x65, 0x39, 0x49, 0x95, 0x7f, 0x8e, 0xe3, 0xb4, + 0x83, 0x77, 0x88, 0x8d, 0xa5, 0x05, 0x7a, 0xd9, 0x61, 0x69, 0x3d, 0xa0, 0x36, 0xba, 0x20, 0x50, + 0x82, 0x1d, 0x72, 0x21, 0x28, 0x92, 0xb1, 0xb8, 0x48, 0xa4, 0x27, 0xd2, 0xad, 0xbd, 0xa7, 0xd8, + 0x53, 0xec, 0x09, 0x7a, 0xdc, 0x03, 0xf4, 0x58, 0xf4, 0x34, 0xec, 0x50, 0x0c, 0xc9, 0x8b, 0x0c, + 0xa2, 0x2c, 0x5b, 0xb6, 0x5c, 0xb8, 0xf0, 0x29, 0x26, 0xbf, 0xef, 0xfb, 0xfd, 0xc8, 0xf0, 0x8f, + 0x08, 0x8e, 0xe4, 0x20, 0xe8, 0x7a, 0x82, 0x0f, 0x1a, 0x52, 0xa1, 0x5b, 0xca, 0x5c, 0xdc, 0xf0, + 0x84, 0x54, 0xf0, 0x0f, 0xc1, 0x69, 0xbd, 0x1b, 0x0a, 0x25, 0xac, 0x62, 0x92, 0x52, 0x4f, 0x52, + 0x76, 0x77, 0xb0, 0x90, 0x81, 0x90, 0x50, 0x27, 0x34, 0xe2, 0x46, 0x9c, 0xbd, 0xbb, 0xd9, 0x11, + 0x1d, 0x11, 0xf7, 0x47, 0xbf, 0x86, 0xbd, 0x33, 0x34, 0xef, 0x90, 0xcf, 0x08, 0x52, 0x22, 0x8c, + 0x53, 0xaa, 0x7f, 0xe7, 0x40, 0xe9, 0xb5, 0x08, 0x82, 0x1e, 0x67, 0x6a, 0x70, 0x21, 0x84, 0xef, + 0x50, 0x17, 0x29, 0x6a, 0x35, 0xc1, 0x5a, 0xa8, 0x7f, 0xc1, 0x10, 0x29, 0x6a, 0xe7, 0x2a, 0xb9, + 0xda, 0xea, 0xab, 0xe3, 0x8f, 0x5f, 0x0e, 0x97, 0xfe, 0xfd, 0x72, 0xb8, 0x17, 0xbb, 0x25, 0xb9, + 0xad, 0x33, 0xd1, 0x08, 0x90, 0xf2, 0xea, 0x6f, 0x69, 0x07, 0xe1, 0x41, 0x93, 0x62, 0x07, 0xc4, + 0x75, 0x4e, 0x44, 0x81, 0xe0, 0xc0, 0x67, 0xbf, 0xf7, 0x18, 0x81, 0x7a, 0x00, 0xd1, 0x1f, 0xa8, + 0xc4, 0x2d, 0xe5, 0x10, 0x05, 0xa2, 0xc7, 0x95, 0xfd, 0x40, 0x73, 0x0f, 0x86, 0xdc, 0xad, 0x2c, + 0xb7, 0xc5, 0x95, 0xb3, 0x13, 0x33, 0x2e, 0x35, 0xe2, 0x52, 0x5d, 0x45, 0x80, 0x33, 0x5d, 0x5f, + 0xfd, 0xab, 0x08, 0x8c, 0x37, 0x42, 0xaa, 0x6b, 0xc1, 0xa9, 0xb5, 0x03, 0x0c, 0xec, 0x21, 0xc6, + 0x21, 0x23, 0xf1, 0x80, 0x9d, 0x15, 0xdd, 0x6e, 0x11, 0xab, 0x0a, 0x1e, 0xbb, 0x14, 0x7b, 0xcf, + 0x4f, 0xbb, 0x21, 0xbd, 0x61, 0x7d, 0xbb, 0xa8, 0xc3, 0x13, 0x7d, 0xd6, 0x31, 0x58, 0xc7, 0x82, + 0x73, 0x8a, 0x15, 0x13, 0x9a, 0xf1, 0x20, 0x4e, 0x1a, 0x77, 0xb6, 0x88, 0x55, 0x07, 0x25, 0x15, + 0x22, 0x2e, 0x6f, 0x68, 0x08, 0xb1, 0x87, 0x38, 0xa7, 0x7e, 0x94, 0xfa, 0x58, 0xa7, 0x16, 0x93, + 0xd0, 0xeb, 0x38, 0xd2, 0x22, 0xd6, 0x1e, 0x58, 0x65, 0x2e, 0x86, 0x84, 0x72, 0x11, 0xd8, 0x86, + 0xce, 0x32, 0x98, 0x8b, 0x9b, 0x51, 0xdb, 0x3a, 0x00, 0x40, 0x2f, 0x7b, 0x1c, 0x5d, 0xd5, 0xd1, + 0xd5, 0xa8, 0x27, 0x0e, 0x7f, 0x0f, 0xcc, 0x1e, 0x77, 0x05, 0x27, 0x8c, 0x77, 0x60, 0x97, 0x86, + 0x4c, 0x10, 0x7b, 0xb7, 0x92, 0xab, 0xe5, 0x9d, 0xc2, 0xa8, 0xff, 0x42, 0x77, 0x5b, 0x3f, 0x02, + 0x30, 0x5a, 0x59, 0x69, 0x3f, 0xac, 0x3c, 0xac, 0xad, 0x9d, 0xee, 0xd7, 0x33, 0x5b, 0xa8, 0xfe, + 0x6b, 0x92, 0xe4, 0xa4, 0xf2, 0xad, 0x33, 0x50, 0x20, 0xb4, 0x2b, 0x24, 0x53, 0x10, 0x11, 0x12, + 0x52, 0x29, 0x6d, 0x4b, 0x2f, 0x8c, 0xfd, 0xf9, 0xc3, 0xc9, 0xe6, 0x70, 0xa3, 0x9d, 0xc5, 0x91, + 0x4b, 0x15, 0x32, 0xde, 0x71, 0x36, 0x86, 0x05, 0xc3, 0x5e, 0xeb, 0x1c, 0x6c, 0xbf, 0x67, 0xca, + 0x23, 0x21, 0x7a, 0x8f, 0x7c, 0xc8, 0x30, 0x1a, 0x91, 0xb6, 0xe7, 0x90, 0x36, 0xc7, 0x75, 0x2d, + 0x8c, 0x12, 0xde, 0x4f, 0xa0, 0x70, 0x43, 0xe9, 0x04, 0xe8, 0xc9, 0x1c, 0xd0, 0xfa, 0x0d, 0xa5, + 0x29, 0xc2, 0x39, 0xd8, 0x26, 0xd4, 0xa7, 0x1d, 0x14, 0x2f, 0x67, 0x0a, 0x64, 0xcf, 0x1b, 0xd1, + 0xb8, 0x6e, 0x92, 0x17, 0x52, 0x42, 0x83, 0x6e, 0x86, 0xb7, 0x33, 0x8f, 0x37, 0xae, 0x4b, 0xf1, + 0x08, 0xa8, 0xe2, 0xe4, 0xe0, 0xc1, 0xae, 0x10, 0x3e, 0x4c, 0xd6, 0x20, 0xcd, 0x2e, 0xcf, 0x61, + 0x97, 0x71, 0xfa, 0xf0, 0x36, 0x63, 0x42, 0xca, 0xe2, 0x82, 0xa3, 0x29, 0x4b, 0x48, 0x55, 0x2f, + 0x9c, 0x9c, 0xc0, 0xe1, 0x1c, 0xc9, 0x01, 0x9e, 0xbc, 0x21, 0x22, 0x40, 0xca, 0xe1, 0x81, 0xa7, + 0x53, 0x0e, 0xbd, 0xdf, 0xa0, 0x27, 0x7c, 0xbd, 0x75, 0x13, 0x4d, 0x65, 0x8e, 0xa6, 0x32, 0xa1, + 0xd1, 0xc7, 0xfd, 0x4d, 0x8c, 0x48, 0x4c, 0xbf, 0x81, 0x67, 0x99, 0xd9, 0x10, 0x4a, 0x83, 0x8c, + 0xea, 0x68, 0x8e, 0xea, 0x68, 0x6a, 0x46, 0x11, 0x64, 0xca, 0x05, 0xc1, 0xe1, 0x94, 0x4b, 0x85, + 0x14, 0xc9, 0x5e, 0x38, 0x18, 0x59, 0x8e, 0xe7, 0x58, 0xf6, 0x27, 0x2c, 0x57, 0xc3, 0xf2, 0x44, + 0xd0, 0x06, 0x45, 0x25, 0x14, 0x8a, 0xd6, 0x3d, 0xd9, 0x6e, 0xd2, 0x5e, 0xff, 0x96, 0x0b, 0xd1, + 0xd4, 0x75, 0xcd, 0x71, 0x99, 0x85, 0xc1, 0xa6, 0x8f, 0xa4, 0x82, 0xa9, 0x1d, 0xaa, 0xef, 0x6d, + 0xa0, 0x71, 0x3f, 0x7c, 0xc3, 0xbd, 0xfd, 0xf9, 0xc3, 0x09, 0x18, 0x4e, 0x22, 0xba, 0xc5, 0xad, + 0x08, 0xe7, 0x8c, 0x68, 0xfa, 0x36, 0xbf, 0x06, 0x85, 0x69, 0xfe, 0xda, 0xa2, 0xfc, 0x8d, 0x70, + 0x92, 0x8d, 0x40, 0x29, 0x60, 0x3c, 0x33, 0xfe, 0xcd, 0x45, 0xf9, 0xc5, 0x80, 0x71, 0x27, 0xab, + 0x40, 0xfd, 0x8c, 0x62, 0x6b, 0x71, 0x05, 0xea, 0x4f, 0x29, 0x7c, 0xb0, 0x13, 0xcd, 0x82, 0x71, + 0x4e, 0xc3, 0x8c, 0x68, 0x7f, 0x51, 0xd1, 0x76, 0xc0, 0x78, 0x2b, 0x42, 0xce, 0xb0, 0xa1, 0xfe, + 0x57, 0x6c, 0x07, 0x8b, 0xdb, 0x50, 0x7f, 0x96, 0xed, 0x05, 0x78, 0x12, 0xd9, 0x02, 0x2a, 0x25, + 0xea, 0x50, 0x19, 0x7d, 0x90, 0xf4, 0x25, 0xa2, 0xfa, 0xf6, 0x53, 0xfd, 0x51, 0x8a, 0xfe, 0xbb, + 0xbf, 0x0c, 0xa3, 0x17, 0x34, 0x6c, 0x61, 0x74, 0xd5, 0xb7, 0x1a, 0xa0, 0x34, 0x1e, 0x99, 0x84, + 0x94, 0x23, 0xd7, 0xa7, 0xc4, 0x7e, 0x56, 0xc9, 0xd5, 0x0c, 0xc7, 0x4a, 0x85, 0x7e, 0x8e, 0x23, + 0xd6, 0x35, 0xd8, 0xca, 0x1c, 0xf1, 0xe8, 0x3d, 0x61, 0x57, 0x2b, 0xb9, 0xda, 0xda, 0xe9, 0x77, + 0x33, 0x3e, 0x6a, 0x33, 0xde, 0x2f, 0x4e, 0x09, 0xcf, 0x78, 0xd4, 0xbc, 0x04, 0xb6, 0x2f, 0x03, + 0x98, 0x7e, 0x92, 0x8c, 0x46, 0xb4, 0xa7, 0x47, 0xb4, 0xe5, 0xcb, 0xe0, 0xed, 0xf8, 0xb5, 0x91, + 0x0c, 0x6a, 0x1b, 0x2c, 0x7b, 0xc8, 0x57, 0x94, 0xd8, 0x25, 0x9d, 0x36, 0x6c, 0xb5, 0xf3, 0x46, + 0xde, 0x7c, 0xd4, 0xce, 0x1b, 0x8f, 0xcc, 0xe5, 0x76, 0xde, 0x58, 0x36, 0x57, 0xda, 0x79, 0x63, + 0xc5, 0x34, 0xda, 0x79, 0x63, 0xc3, 0x2c, 0xb4, 0xf3, 0x46, 0xc1, 0x34, 0xdb, 0x79, 0xc3, 0x34, + 0x8b, 0xaf, 0xce, 0x3f, 0xde, 0x95, 0x73, 0x9f, 0xee, 0xca, 0xb9, 0xff, 0xee, 0xca, 0xb9, 0x3f, + 0xef, 0xcb, 0x4b, 0x9f, 0xee, 0xcb, 0x4b, 0xff, 0xdc, 0x97, 0x97, 0xae, 0x5f, 0x74, 0x98, 0xf2, + 0x7a, 0x6e, 0x1d, 0x8b, 0xa0, 0xa1, 0x57, 0x81, 0xc9, 0x13, 0x1f, 0xb9, 0x32, 0x69, 0x34, 0xde, + 0x9d, 0xbe, 0x6c, 0xf4, 0xc7, 0x2f, 0x38, 0x35, 0xe8, 0x52, 0xe9, 0x2e, 0xeb, 0xe7, 0xdb, 0xf3, + 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0xe0, 0xf4, 0x5b, 0xf1, 0x4a, 0x0a, 0x00, 0x00, } func (m *CommunityPoolRebate) Marshal() (dAtA []byte, err error) { diff --git a/x/stakeibc/types/ica_account.pb.go b/x/stakeibc/types/ica_account.pb.go index e1161e0bb34..c7649f178c9 100644 --- a/x/stakeibc/types/ica_account.pb.go +++ b/x/stakeibc/types/ica_account.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/stakeibc/ica_account.proto +// source: symphony/stakeibc/ica_account.proto package types @@ -62,12 +62,12 @@ func (x ICAAccountType) String() string { } func (ICAAccountType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_2976ae6e7f6ce824, []int{0} + return fileDescriptor_d44194790bb46fd3, []int{0} } type ICAAccount struct { ChainId string `protobuf:"bytes,1,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` - Type ICAAccountType `protobuf:"varint,2,opt,name=type,proto3,enum=stride.stakeibc.ICAAccountType" json:"type,omitempty"` + Type ICAAccountType `protobuf:"varint,2,opt,name=type,proto3,enum=symphony.stakeibc.ICAAccountType" json:"type,omitempty"` ConnectionId string `protobuf:"bytes,3,opt,name=connection_id,json=connectionId,proto3" json:"connection_id,omitempty"` Address string `protobuf:"bytes,4,opt,name=address,proto3" json:"address,omitempty"` } @@ -76,7 +76,7 @@ func (m *ICAAccount) Reset() { *m = ICAAccount{} } func (m *ICAAccount) String() string { return proto.CompactTextString(m) } func (*ICAAccount) ProtoMessage() {} func (*ICAAccount) Descriptor() ([]byte, []int) { - return fileDescriptor_2976ae6e7f6ce824, []int{0} + return fileDescriptor_d44194790bb46fd3, []int{0} } func (m *ICAAccount) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -134,37 +134,40 @@ func (m *ICAAccount) GetAddress() string { } func init() { - proto.RegisterEnum("stride.stakeibc.ICAAccountType", ICAAccountType_name, ICAAccountType_value) - proto.RegisterType((*ICAAccount)(nil), "stride.stakeibc.ICAAccount") + proto.RegisterEnum("symphony.stakeibc.ICAAccountType", ICAAccountType_name, ICAAccountType_value) + proto.RegisterType((*ICAAccount)(nil), "symphony.stakeibc.ICAAccount") } -func init() { proto.RegisterFile("stride/stakeibc/ica_account.proto", fileDescriptor_2976ae6e7f6ce824) } +func init() { + proto.RegisterFile("symphony/stakeibc/ica_account.proto", fileDescriptor_d44194790bb46fd3) +} -var fileDescriptor_2976ae6e7f6ce824 = []byte{ - // 366 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x5c, 0x91, 0xc1, 0x4e, 0xe2, 0x40, - 0x18, 0xc7, 0x3b, 0xc0, 0xd2, 0xdd, 0xc9, 0x2e, 0x4c, 0x66, 0x77, 0x4d, 0xf1, 0x50, 0x51, 0x2f, - 0xc4, 0xc4, 0x36, 0x81, 0x8b, 0xd7, 0x4a, 0x47, 0x9d, 0xa4, 0xb4, 0x64, 0x18, 0x24, 0x7a, 0x69, - 0xda, 0x69, 0x23, 0x8d, 0xb1, 0x25, 0xb4, 0x18, 0x79, 0x0b, 0xef, 0x3e, 0x82, 0x2f, 0xe2, 0x91, - 0xa3, 0x47, 0x03, 0x2f, 0x62, 0x28, 0x98, 0x46, 0x8e, 0xff, 0xef, 0xfb, 0xe5, 0xf7, 0x25, 0xdf, - 0x1f, 0x1e, 0xa6, 0xd9, 0x34, 0x0a, 0x42, 0x3d, 0xcd, 0xbc, 0xfb, 0x30, 0xf2, 0x85, 0x1e, 0x09, - 0xcf, 0xf5, 0x84, 0x48, 0x66, 0x71, 0xa6, 0x4d, 0xa6, 0x49, 0x96, 0xe0, 0xfa, 0x06, 0xd1, 0xbe, - 0x90, 0xa3, 0x17, 0x00, 0x21, 0xed, 0x1a, 0xc6, 0x86, 0xc2, 0x0d, 0xf8, 0x53, 0x8c, 0xbd, 0x28, - 0x76, 0xa3, 0x40, 0x01, 0x4d, 0xd0, 0xfa, 0xc5, 0xe4, 0x3c, 0xd3, 0x00, 0x77, 0x60, 0x25, 0x9b, - 0x4f, 0x42, 0xa5, 0xd4, 0x04, 0xad, 0x5a, 0xfb, 0x40, 0xdb, 0x31, 0x69, 0x85, 0x85, 0xcf, 0x27, - 0x21, 0xcb, 0x61, 0x7c, 0x0c, 0xff, 0x88, 0x24, 0x8e, 0x43, 0x91, 0x45, 0x49, 0x2e, 0x2d, 0xe7, - 0xd2, 0xdf, 0xc5, 0x90, 0x06, 0x58, 0x81, 0xb2, 0x17, 0x04, 0xd3, 0x30, 0x4d, 0x95, 0xca, 0xe6, - 0xe6, 0x36, 0x9e, 0xbc, 0x02, 0x58, 0xfb, 0xee, 0xc5, 0x35, 0x08, 0x4d, 0x62, 0x91, 0x4b, 0x83, - 0x53, 0xc7, 0x46, 0x12, 0x96, 0x61, 0xf9, 0x82, 0x10, 0x04, 0xd6, 0x8b, 0x11, 0xe5, 0x57, 0x26, - 0x33, 0x46, 0x86, 0x85, 0x4a, 0xeb, 0xcc, 0x88, 0x49, 0x7a, 0xfd, 0x1c, 0x2c, 0xe3, 0x7d, 0xb8, - 0xd7, 0x75, 0x7a, 0xbd, 0xa1, 0x4d, 0xf9, 0x8d, 0xdb, 0x77, 0x1c, 0xcb, 0x35, 0x49, 0xdf, 0x19, - 0x50, 0x8e, 0x2a, 0xb8, 0x01, 0xff, 0xef, 0xec, 0x18, 0xe1, 0x43, 0x66, 0xa3, 0x1f, 0xf8, 0x1f, - 0x44, 0x5d, 0xc7, 0xbe, 0x26, 0x8c, 0x13, 0xe6, 0x0e, 0xed, 0x11, 0xb5, 0x4d, 0x54, 0xc5, 0x7f, - 0x61, 0xbd, 0x98, 0x72, 0x66, 0x98, 0x04, 0xc9, 0xe7, 0xd6, 0xdb, 0x52, 0x05, 0x8b, 0xa5, 0x0a, - 0x3e, 0x96, 0x2a, 0x78, 0x5e, 0xa9, 0xd2, 0x62, 0xa5, 0x4a, 0xef, 0x2b, 0x55, 0xba, 0x6d, 0xdf, - 0x45, 0xd9, 0x78, 0xe6, 0x6b, 0x22, 0x79, 0xd0, 0x07, 0xf9, 0xdf, 0x4e, 0x2d, 0xcf, 0x4f, 0xf5, - 0x6d, 0x61, 0x8f, 0xed, 0x33, 0xfd, 0xa9, 0xa8, 0x6d, 0xfd, 0xb9, 0xd4, 0xaf, 0xe6, 0x8d, 0x75, - 0x3e, 0x03, 0x00, 0x00, 0xff, 0xff, 0x8a, 0x5d, 0xf7, 0x64, 0xd6, 0x01, 0x00, 0x00, +var fileDescriptor_d44194790bb46fd3 = []byte{ + // 373 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x64, 0x91, 0xcf, 0x8e, 0xd2, 0x40, + 0x18, 0xc0, 0x3b, 0x80, 0x54, 0x27, 0x8a, 0xe3, 0xf8, 0x27, 0xc5, 0x43, 0x83, 0x72, 0x21, 0x26, + 0xb6, 0x09, 0x6a, 0x3c, 0x57, 0x3a, 0xea, 0x24, 0xd0, 0x92, 0x71, 0x90, 0xe8, 0xa5, 0x69, 0xa7, + 0x8d, 0x34, 0x4a, 0xa7, 0x61, 0x8a, 0xd9, 0xbe, 0xc5, 0xbe, 0xc0, 0x3e, 0xc1, 0xbe, 0xc8, 0x1e, + 0x39, 0xee, 0x71, 0x03, 0x2f, 0xb2, 0xa1, 0x2c, 0x69, 0x76, 0xf7, 0xf8, 0xfb, 0xbe, 0x5f, 0x7e, + 0x93, 0xcc, 0x07, 0xfb, 0xaa, 0x5c, 0xe6, 0x0b, 0x99, 0x95, 0xb6, 0x2a, 0xc2, 0xbf, 0x49, 0x1a, + 0x09, 0x3b, 0x15, 0x61, 0x10, 0x0a, 0x21, 0xd7, 0x59, 0x61, 0xe5, 0x2b, 0x59, 0x48, 0xfc, 0xec, + 0x28, 0x59, 0x47, 0xe9, 0xed, 0x19, 0x80, 0x90, 0x8e, 0x1c, 0xe7, 0xe0, 0xe1, 0x2e, 0x7c, 0x28, + 0x16, 0x61, 0x9a, 0x05, 0x69, 0x6c, 0x80, 0x1e, 0x18, 0x3c, 0x62, 0x7a, 0xc5, 0x34, 0xc6, 0x9f, + 0x60, 0xab, 0x28, 0xf3, 0xc4, 0x68, 0xf4, 0xc0, 0xa0, 0x33, 0x7c, 0x63, 0xdd, 0x6b, 0x59, 0x75, + 0x87, 0x97, 0x79, 0xc2, 0x2a, 0x1d, 0xf7, 0xe1, 0x13, 0x21, 0xb3, 0x2c, 0x11, 0x45, 0x2a, 0xab, + 0x6c, 0xb3, 0xca, 0x3e, 0xae, 0x87, 0x34, 0xc6, 0x06, 0xd4, 0xc3, 0x38, 0x5e, 0x25, 0x4a, 0x19, + 0xad, 0xc3, 0xab, 0x37, 0xf8, 0xee, 0x1c, 0xc0, 0xce, 0xed, 0x2e, 0xee, 0x40, 0xe8, 0x92, 0x31, + 0xf9, 0xe6, 0x70, 0xea, 0x7b, 0x48, 0xc3, 0x3a, 0x6c, 0x7e, 0x25, 0x04, 0x81, 0xfd, 0x62, 0x4e, + 0xf9, 0x77, 0x97, 0x39, 0x73, 0x67, 0x8c, 0x1a, 0x7b, 0x66, 0xc4, 0x25, 0x93, 0x69, 0x25, 0x36, + 0xf1, 0x6b, 0xf8, 0x6a, 0xe4, 0x4f, 0x26, 0x33, 0x8f, 0xf2, 0x5f, 0xc1, 0xd4, 0xf7, 0xc7, 0x81, + 0x4b, 0xa6, 0xfe, 0x0f, 0xca, 0x51, 0x0b, 0x77, 0xe1, 0xcb, 0x3b, 0x3b, 0x46, 0xf8, 0x8c, 0x79, + 0xe8, 0x01, 0x7e, 0x01, 0xd1, 0xc8, 0xf7, 0x7e, 0x12, 0xc6, 0x09, 0x0b, 0x66, 0xde, 0x9c, 0x7a, + 0x2e, 0x6a, 0xe3, 0xe7, 0xf0, 0x69, 0x3d, 0xe5, 0xcc, 0x71, 0x09, 0xd2, 0xbf, 0x78, 0x17, 0x5b, + 0x13, 0x6c, 0xb6, 0x26, 0xb8, 0xda, 0x9a, 0xe0, 0x74, 0x67, 0x6a, 0x9b, 0x9d, 0xa9, 0x5d, 0xee, + 0x4c, 0xed, 0xf7, 0xc7, 0x3f, 0x69, 0xb1, 0x58, 0x47, 0x96, 0x90, 0x4b, 0x5b, 0xaa, 0xa5, 0x54, + 0xa9, 0x7a, 0xff, 0x2f, 0x8c, 0xd4, 0x11, 0xec, 0xff, 0xc3, 0xcf, 0xf6, 0x49, 0x7d, 0xbc, 0xfd, + 0xdf, 0xa9, 0xa8, 0x5d, 0xdd, 0xed, 0xc3, 0x75, 0x00, 0x00, 0x00, 0xff, 0xff, 0x2a, 0xfd, 0xef, + 0x98, 0xde, 0x01, 0x00, 0x00, } func (m *ICAAccount) Marshal() (dAtA []byte, err error) { diff --git a/x/stakeibc/types/packet.pb.go b/x/stakeibc/types/packet.pb.go index 845a04f27a7..a614d25104c 100644 --- a/x/stakeibc/types/packet.pb.go +++ b/x/stakeibc/types/packet.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/stakeibc/packet.proto +// source: symphony/stakeibc/packet.proto package types @@ -33,7 +33,7 @@ func (m *StakeibcPacketData) Reset() { *m = StakeibcPacketData{} } func (m *StakeibcPacketData) String() string { return proto.CompactTextString(m) } func (*StakeibcPacketData) ProtoMessage() {} func (*StakeibcPacketData) Descriptor() ([]byte, []int) { - return fileDescriptor_a86fa6a12773333f, []int{0} + return fileDescriptor_043c17e7b98176d3, []int{0} } func (m *StakeibcPacketData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -102,7 +102,7 @@ func (m *NoData) Reset() { *m = NoData{} } func (m *NoData) String() string { return proto.CompactTextString(m) } func (*NoData) ProtoMessage() {} func (*NoData) Descriptor() ([]byte, []int) { - return fileDescriptor_a86fa6a12773333f, []int{1} + return fileDescriptor_043c17e7b98176d3, []int{1} } func (m *NoData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -132,26 +132,27 @@ func (m *NoData) XXX_DiscardUnknown() { var xxx_messageInfo_NoData proto.InternalMessageInfo func init() { - proto.RegisterType((*StakeibcPacketData)(nil), "stride.stakeibc.StakeibcPacketData") - proto.RegisterType((*NoData)(nil), "stride.stakeibc.NoData") -} - -func init() { proto.RegisterFile("stride/stakeibc/packet.proto", fileDescriptor_a86fa6a12773333f) } - -var fileDescriptor_a86fa6a12773333f = []byte{ - // 190 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x29, 0x2e, 0x29, 0xca, - 0x4c, 0x49, 0xd5, 0x2f, 0x2e, 0x49, 0xcc, 0x4e, 0xcd, 0x4c, 0x4a, 0xd6, 0x2f, 0x48, 0x4c, 0xce, - 0x4e, 0x2d, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x87, 0xc8, 0xea, 0xc1, 0x64, 0x95, - 0x82, 0xb8, 0x84, 0x82, 0xa1, 0xec, 0x00, 0xb0, 0x42, 0x97, 0xc4, 0x92, 0x44, 0x21, 0x23, 0x2e, - 0xf6, 0xbc, 0xfc, 0xf8, 0x94, 0xc4, 0x92, 0x44, 0x09, 0x46, 0x05, 0x46, 0x0d, 0x6e, 0x23, 0x71, - 0x3d, 0x34, 0x8d, 0x7a, 0x7e, 0xf9, 0x20, 0x95, 0x1e, 0x0c, 0x41, 0x6c, 0x79, 0x60, 0x96, 0x13, - 0x07, 0x17, 0x1b, 0xc4, 0x2a, 0x25, 0x0e, 0x2e, 0x36, 0x88, 0xac, 0x93, 0xcf, 0x89, 0x47, 0x72, - 0x8c, 0x17, 0x1e, 0xc9, 0x31, 0x3e, 0x78, 0x24, 0xc7, 0x38, 0xe1, 0xb1, 0x1c, 0xc3, 0x85, 0xc7, - 0x72, 0x0c, 0x37, 0x1e, 0xcb, 0x31, 0x44, 0x19, 0xa5, 0x67, 0x96, 0x64, 0x94, 0x26, 0xe9, 0x25, - 0xe7, 0xe7, 0xea, 0x07, 0x83, 0x8d, 0xd6, 0xf5, 0x49, 0x4c, 0x2a, 0xd6, 0x87, 0xba, 0xbe, 0xcc, - 0xc8, 0x42, 0xbf, 0x02, 0xe1, 0x87, 0x92, 0xca, 0x82, 0xd4, 0xe2, 0x24, 0x36, 0xb0, 0x1f, 0x8c, - 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x31, 0xa6, 0x5b, 0x25, 0xe3, 0x00, 0x00, 0x00, + proto.RegisterType((*StakeibcPacketData)(nil), "symphony.stakeibc.StakeibcPacketData") + proto.RegisterType((*NoData)(nil), "symphony.stakeibc.NoData") +} + +func init() { proto.RegisterFile("symphony/stakeibc/packet.proto", fileDescriptor_043c17e7b98176d3) } + +var fileDescriptor_043c17e7b98176d3 = []byte{ + // 195 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x92, 0x2b, 0xae, 0xcc, 0x2d, + 0xc8, 0xc8, 0xcf, 0xab, 0xd4, 0x2f, 0x2e, 0x49, 0xcc, 0x4e, 0xcd, 0x4c, 0x4a, 0xd6, 0x2f, 0x48, + 0x4c, 0xce, 0x4e, 0x2d, 0xd1, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x12, 0x84, 0xc9, 0xeb, 0xc1, + 0xe4, 0x95, 0x42, 0xb8, 0x84, 0x82, 0xa1, 0xec, 0x00, 0xb0, 0x52, 0x97, 0xc4, 0x92, 0x44, 0x21, + 0x13, 0x2e, 0xf6, 0xbc, 0xfc, 0xf8, 0x94, 0xc4, 0x92, 0x44, 0x09, 0x46, 0x05, 0x46, 0x0d, 0x6e, + 0x23, 0x49, 0x3d, 0x0c, 0xad, 0x7a, 0x7e, 0xf9, 0x20, 0xb5, 0x1e, 0x0c, 0x41, 0x6c, 0x79, 0x60, + 0x96, 0x13, 0x07, 0x17, 0x1b, 0xc4, 0x3a, 0x25, 0x0e, 0x2e, 0x36, 0x88, 0xac, 0x93, 0xdf, 0x89, + 0x47, 0x72, 0x8c, 0x17, 0x1e, 0xc9, 0x31, 0x3e, 0x78, 0x24, 0xc7, 0x38, 0xe1, 0xb1, 0x1c, 0xc3, + 0x85, 0xc7, 0x72, 0x0c, 0x37, 0x1e, 0xcb, 0x31, 0x44, 0x99, 0xa4, 0x67, 0x96, 0x64, 0x94, 0x26, + 0xe9, 0x25, 0xe7, 0xe7, 0xea, 0xe7, 0x17, 0xe7, 0xe6, 0x17, 0x67, 0x16, 0xeb, 0xe6, 0x24, 0x26, + 0x15, 0xc3, 0x38, 0xfa, 0x65, 0x46, 0xe6, 0xfa, 0x15, 0x08, 0x9f, 0x94, 0x54, 0x16, 0xa4, 0x16, + 0x27, 0xb1, 0x81, 0x7d, 0x62, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x50, 0x5d, 0xfe, 0x44, 0xeb, + 0x00, 0x00, 0x00, } func (m *StakeibcPacketData) Marshal() (dAtA []byte, err error) { diff --git a/x/stakeibc/types/params.pb.go b/x/stakeibc/types/params.pb.go index 9d154b94fd8..03d388c92e3 100644 --- a/x/stakeibc/types/params.pb.go +++ b/x/stakeibc/types/params.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/stakeibc/params.proto +// source: symphony/stakeibc/params.proto package types @@ -48,7 +48,7 @@ type Params struct { func (m *Params) Reset() { *m = Params{} } func (*Params) ProtoMessage() {} func (*Params) Descriptor() ([]byte, []int) { - return fileDescriptor_5aeaab6a38c2b438, []int{0} + return fileDescriptor_a3f649d622d90f8b, []int{0} } func (m *Params) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -190,50 +190,50 @@ func (m *Params) GetValidatorWeightCap() uint64 { } func init() { - proto.RegisterType((*Params)(nil), "stride.stakeibc.Params") -} - -func init() { proto.RegisterFile("stride/stakeibc/params.proto", fileDescriptor_5aeaab6a38c2b438) } - -var fileDescriptor_5aeaab6a38c2b438 = []byte{ - // 580 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x94, 0x41, 0x6f, 0xd3, 0x3e, - 0x18, 0xc6, 0xdb, 0xff, 0x3f, 0xda, 0x3a, 0x0f, 0x58, 0x9a, 0x4d, 0x10, 0x4d, 0x23, 0x03, 0x24, - 0x24, 0xc6, 0x60, 0x41, 0xe3, 0x32, 0xb1, 0x03, 0xd2, 0xa6, 0x1d, 0x36, 0x0d, 0x54, 0xda, 0x4a, - 0x48, 0x5c, 0x2c, 0xc7, 0x79, 0xdb, 0x58, 0x4b, 0xe2, 0x60, 0xbb, 0x5d, 0xb7, 0x8f, 0xc0, 0x89, - 0x23, 0x47, 0x3e, 0x0e, 0xc7, 0x1d, 0x39, 0xa2, 0xf6, 0x8b, 0xa0, 0xd8, 0x69, 0xd2, 0xa0, 0xc1, - 0xad, 0x7a, 0x9e, 0xdf, 0xfb, 0xe4, 0xc9, 0xeb, 0xc6, 0x68, 0x4b, 0x2a, 0xc1, 0x42, 0xf0, 0xa5, - 0x22, 0x17, 0xc0, 0x02, 0xea, 0x67, 0x44, 0x90, 0x44, 0xee, 0x65, 0x82, 0x2b, 0xee, 0xac, 0x19, - 0x77, 0x6f, 0xee, 0x6e, 0x6e, 0x0c, 0xf9, 0x90, 0x6b, 0xcf, 0xcf, 0x7f, 0x19, 0xec, 0xc9, 0x97, - 0x65, 0xb4, 0xd4, 0xd1, 0x73, 0xce, 0x0e, 0xb2, 0x05, 0x5c, 0x12, 0x11, 0x4a, 0xcc, 0x52, 0x05, - 0x62, 0x4c, 0x62, 0xb7, 0xf9, 0xa8, 0xf9, 0xcc, 0xea, 0xae, 0x15, 0xfa, 0x69, 0x21, 0x3b, 0xbb, - 0xa8, 0x1d, 0x42, 0x0c, 0x43, 0xa2, 0xa0, 0x62, 0x97, 0x34, 0x6b, 0xcf, 0x8d, 0x12, 0xde, 0x41, - 0x76, 0x08, 0x19, 0x97, 0x4c, 0x55, 0xec, 0x7f, 0x26, 0xb7, 0xd0, 0x4b, 0xf4, 0x00, 0xb9, 0x02, - 0x42, 0x48, 0x32, 0xc5, 0x78, 0x8a, 0x45, 0x2d, 0xfe, 0x7f, 0x3d, 0x72, 0xbf, 0xf2, 0xbb, 0x8b, - 0x0f, 0xd9, 0x45, 0x6d, 0xf3, 0xc2, 0x98, 0xf2, 0x24, 0x61, 0x52, 0x32, 0x9e, 0xba, 0x96, 0x69, - 0x64, 0x8c, 0xe3, 0x52, 0xcf, 0x61, 0x01, 0x2c, 0x1d, 0x83, 0x5c, 0xa8, 0xb4, 0x6c, 0xe0, 0xb9, - 0x51, 0x26, 0x3f, 0x47, 0x6d, 0x46, 0x09, 0x56, 0x2c, 0x01, 0x3e, 0x52, 0x38, 0x25, 0x29, 0x97, - 0xee, 0x8a, 0xe9, 0xcf, 0x28, 0xe9, 0x1b, 0xfd, 0x7d, 0x2e, 0x3b, 0xdb, 0x68, 0x35, 0x18, 0x0d, - 0x06, 0x20, 0xb0, 0x64, 0xd7, 0xe0, 0x22, 0x4d, 0x21, 0x23, 0xf5, 0xd8, 0x35, 0x38, 0x2f, 0x90, - 0xc3, 0x02, 0x5a, 0x86, 0x05, 0x31, 0xa7, 0x17, 0xd2, 0x5d, 0x35, 0x8f, 0x66, 0x01, 0x2d, 0xd2, - 0x8e, 0xb4, 0xee, 0x1c, 0xa2, 0xcd, 0x01, 0x00, 0x56, 0x82, 0xa4, 0x32, 0x0f, 0xad, 0x77, 0xb8, - 0xa3, 0xa7, 0x1e, 0x0c, 0x00, 0xfa, 0x05, 0x50, 0xeb, 0xf2, 0x16, 0x3d, 0x4c, 0xc8, 0x04, 0xeb, - 0xf3, 0xc7, 0xf9, 0x1b, 0x50, 0x12, 0xc7, 0x12, 0x67, 0x20, 0x30, 0x64, 0x9c, 0x46, 0xee, 0x5d, - 0x3d, 0xef, 0x26, 0x64, 0xd2, 0xcb, 0x99, 0x53, 0x4a, 0x8e, 0x73, 0xa2, 0x03, 0xe2, 0x24, 0xf7, - 0x9d, 0x0e, 0x7a, 0x1a, 0xc2, 0x80, 0x8c, 0x62, 0x85, 0x13, 0x96, 0xe2, 0x3f, 0x0f, 0x46, 0x45, - 0x02, 0x64, 0xc4, 0xe3, 0xd0, 0xbd, 0xa7, 0x83, 0x1e, 0x17, 0xf0, 0x3b, 0x96, 0x76, 0x6b, 0x67, - 0xd4, 0x9f, 0x83, 0xb5, 0x44, 0x32, 0xf9, 0x47, 0xe2, 0x5a, 0x3d, 0x91, 0x4c, 0xfe, 0x96, 0x78, - 0x88, 0x36, 0xf5, 0x3e, 0x6f, 0xdf, 0x90, 0x6d, 0x36, 0x94, 0xef, 0xf5, 0xb6, 0x0d, 0x9d, 0xa0, - 0xed, 0x31, 0x89, 0x59, 0x48, 0x14, 0x17, 0x58, 0xc6, 0x44, 0x46, 0xf8, 0xf3, 0x08, 0xc4, 0xd5, - 0x42, 0x91, 0x75, 0x9d, 0xb0, 0x55, 0x62, 0xbd, 0x9c, 0xfa, 0x90, 0x43, 0x55, 0x87, 0x57, 0x68, - 0xa3, 0x8a, 0xb9, 0x04, 0x36, 0x8c, 0x14, 0xa6, 0x24, 0x73, 0x37, 0xf4, 0xac, 0x53, 0x7a, 0x1f, - 0xb5, 0x75, 0x4c, 0xb2, 0x37, 0xd6, 0xb7, 0xef, 0xdb, 0x8d, 0x33, 0xab, 0xd5, 0xb2, 0x57, 0xce, - 0xac, 0x56, 0xdb, 0x76, 0xce, 0xac, 0x96, 0x63, 0xaf, 0x1f, 0x9d, 0xff, 0x98, 0x7a, 0xcd, 0x9b, - 0xa9, 0xd7, 0xfc, 0x35, 0xf5, 0x9a, 0x5f, 0x67, 0x5e, 0xe3, 0x66, 0xe6, 0x35, 0x7e, 0xce, 0xbc, - 0xc6, 0xa7, 0xfd, 0x21, 0x53, 0xd1, 0x28, 0xd8, 0xa3, 0x3c, 0xf1, 0x7b, 0xfa, 0xef, 0xfc, 0xf2, - 0x9c, 0x04, 0xd2, 0x2f, 0xae, 0x80, 0xf1, 0xfe, 0x81, 0x3f, 0xa9, 0x2e, 0x02, 0x75, 0x95, 0x81, - 0x0c, 0x96, 0xf4, 0x17, 0xfe, 0xfa, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0xba, 0x91, 0x86, 0xac, - 0x28, 0x04, 0x00, 0x00, + proto.RegisterType((*Params)(nil), "symphony.stakeibc.Params") +} + +func init() { proto.RegisterFile("symphony/stakeibc/params.proto", fileDescriptor_a3f649d622d90f8b) } + +var fileDescriptor_a3f649d622d90f8b = []byte{ + // 583 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x94, 0xcf, 0x6e, 0xd3, 0x4c, + 0x14, 0xc5, 0x93, 0xef, 0xb3, 0xda, 0x74, 0x0a, 0xd4, 0x71, 0x2b, 0xb0, 0x2a, 0x70, 0x01, 0x09, + 0x89, 0x52, 0xa8, 0x11, 0x20, 0x81, 0xe8, 0x02, 0xa9, 0x51, 0x17, 0x8d, 0x44, 0x15, 0x92, 0x48, + 0x48, 0x6c, 0x46, 0xe3, 0xf1, 0x4d, 0x3c, 0xaa, 0xed, 0x31, 0x33, 0x93, 0x34, 0xe9, 0x23, 0xb0, + 0x62, 0xc9, 0x92, 0xc7, 0x61, 0xd9, 0x25, 0x4b, 0x94, 0xbc, 0x08, 0xf2, 0xf8, 0x5f, 0x8c, 0x0a, + 0xbb, 0xe4, 0x9c, 0xdf, 0x3d, 0x73, 0x7c, 0x47, 0x36, 0x72, 0xe4, 0x3c, 0x4a, 0x02, 0x1e, 0xcf, + 0x5d, 0xa9, 0xc8, 0x39, 0x30, 0x8f, 0xba, 0x09, 0x11, 0x24, 0x92, 0x87, 0x89, 0xe0, 0x8a, 0x5b, + 0xed, 0xc2, 0x3f, 0x2c, 0xfc, 0xdd, 0x9d, 0x31, 0x1f, 0x73, 0xed, 0xba, 0xe9, 0xaf, 0x0c, 0x7c, + 0xf8, 0x65, 0x1d, 0xad, 0xf5, 0xf4, 0xa4, 0xb5, 0x8f, 0x4c, 0x01, 0x17, 0x44, 0xf8, 0x12, 0xb3, + 0x58, 0x81, 0x98, 0x92, 0xd0, 0x6e, 0xde, 0x6f, 0x3e, 0x36, 0xfa, 0x5b, 0xb9, 0x7e, 0x9a, 0xcb, + 0xd6, 0x01, 0x6a, 0xfb, 0x10, 0xc2, 0x98, 0x28, 0xa8, 0xd8, 0x35, 0xcd, 0x9a, 0x85, 0x51, 0xc2, + 0xfb, 0xc8, 0xf4, 0x21, 0xe1, 0x92, 0xa9, 0x8a, 0xfd, 0x2f, 0xcb, 0xcd, 0xf5, 0x12, 0x7d, 0x83, + 0x6c, 0x01, 0x3e, 0x44, 0x89, 0x62, 0x3c, 0xc6, 0xa2, 0x16, 0xff, 0xbf, 0x1e, 0xb9, 0x5d, 0xf9, + 0xfd, 0xd5, 0x43, 0x0e, 0x50, 0x5b, 0x2a, 0xc1, 0x7c, 0xc0, 0x94, 0x47, 0x11, 0x93, 0x92, 0xf1, + 0xd8, 0x36, 0xb2, 0x46, 0x99, 0xd1, 0x29, 0xf5, 0x14, 0x16, 0xc0, 0xe2, 0x29, 0xc8, 0x95, 0x4a, + 0xeb, 0x19, 0x5c, 0x18, 0x65, 0xf2, 0x13, 0xd4, 0x66, 0x94, 0x60, 0xc5, 0x22, 0xe0, 0x13, 0x85, + 0x63, 0x12, 0x73, 0x69, 0x6f, 0x64, 0xfd, 0x19, 0x25, 0xc3, 0x4c, 0x3f, 0x4b, 0x65, 0x6b, 0x0f, + 0x6d, 0x7a, 0x93, 0xd1, 0x08, 0x04, 0x96, 0xec, 0x12, 0x6c, 0xa4, 0x29, 0x94, 0x49, 0x03, 0x76, + 0x09, 0xd6, 0x53, 0x64, 0x31, 0x8f, 0x96, 0x61, 0x5e, 0xc8, 0xe9, 0xb9, 0xb4, 0x37, 0xb3, 0xa3, + 0x99, 0x47, 0xf3, 0xb4, 0x63, 0xad, 0x5b, 0x47, 0x68, 0x77, 0x04, 0x80, 0x95, 0x20, 0xb1, 0x4c, + 0x43, 0xeb, 0x1d, 0x6e, 0xe8, 0xa9, 0x3b, 0x23, 0x80, 0x61, 0x0e, 0xd4, 0xba, 0xbc, 0x43, 0xf7, + 0x22, 0x32, 0xc3, 0xfa, 0xfe, 0x71, 0xfa, 0x04, 0x94, 0x84, 0xa1, 0xc4, 0x09, 0x08, 0x0c, 0x09, + 0xa7, 0x81, 0x7d, 0x53, 0xcf, 0xdb, 0x11, 0x99, 0x0d, 0x52, 0xe6, 0x94, 0x92, 0x4e, 0x4a, 0xf4, + 0x40, 0x9c, 0xa4, 0xbe, 0xd5, 0x43, 0x8f, 0x7c, 0x18, 0x91, 0x49, 0xa8, 0x70, 0xc4, 0x62, 0xfc, + 0xe7, 0xc5, 0xa8, 0x40, 0x80, 0x0c, 0x78, 0xe8, 0xdb, 0xb7, 0x74, 0xd0, 0x83, 0x1c, 0x7e, 0xcf, + 0xe2, 0x7e, 0xed, 0x8e, 0x86, 0x05, 0x58, 0x4b, 0x24, 0xb3, 0x7f, 0x24, 0x6e, 0xd5, 0x13, 0xc9, + 0xec, 0x6f, 0x89, 0x47, 0x68, 0x57, 0xef, 0xf3, 0xfa, 0x0d, 0x99, 0xd9, 0x86, 0xd2, 0xbd, 0x5e, + 0xb7, 0xa1, 0x13, 0xb4, 0x37, 0x25, 0x21, 0xf3, 0x89, 0xe2, 0x02, 0xcb, 0x90, 0xc8, 0x00, 0x7f, + 0x9e, 0x80, 0x98, 0xaf, 0x14, 0xd9, 0xd6, 0x09, 0x77, 0x4b, 0x6c, 0x90, 0x52, 0x1f, 0x52, 0xa8, + 0xea, 0xf0, 0x1c, 0xed, 0x54, 0x31, 0x17, 0xc0, 0xc6, 0x81, 0xc2, 0x94, 0x24, 0xf6, 0x8e, 0x9e, + 0xb5, 0x4a, 0xef, 0xa3, 0xb6, 0x3a, 0x24, 0x79, 0x6b, 0x7c, 0xfb, 0xbe, 0xd7, 0xe8, 0x1a, 0xad, + 0x96, 0xb9, 0xd1, 0x35, 0x5a, 0x6d, 0xd3, 0xea, 0x1a, 0x2d, 0xcb, 0xdc, 0x3e, 0x3e, 0xfb, 0xb1, + 0x70, 0x9a, 0x57, 0x0b, 0xa7, 0xf9, 0x6b, 0xe1, 0x34, 0xbf, 0x2e, 0x9d, 0xc6, 0xd5, 0xd2, 0x69, + 0xfc, 0x5c, 0x3a, 0x8d, 0x4f, 0xaf, 0xc6, 0x4c, 0x05, 0x13, 0xef, 0x90, 0xf2, 0xc8, 0xe5, 0x32, + 0xe2, 0x92, 0xc9, 0x67, 0x21, 0xf1, 0x64, 0xf1, 0xc7, 0x9d, 0xbe, 0x78, 0xed, 0xce, 0xaa, 0x8f, + 0x81, 0x9a, 0x27, 0x20, 0xbd, 0x35, 0xfd, 0x8e, 0xbf, 0xfc, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x8a, + 0x6d, 0xe3, 0x29, 0x2e, 0x04, 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { diff --git a/x/stakeibc/types/query.pb.go b/x/stakeibc/types/query.pb.go index d14b7e1ed39..2b4ef2bc82f 100644 --- a/x/stakeibc/types/query.pb.go +++ b/x/stakeibc/types/query.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/stakeibc/query.proto +// source: symphony/stakeibc/query.proto package types @@ -43,7 +43,7 @@ func (m *QueryInterchainAccountFromAddressRequest) Reset() { func (m *QueryInterchainAccountFromAddressRequest) String() string { return proto.CompactTextString(m) } func (*QueryInterchainAccountFromAddressRequest) ProtoMessage() {} func (*QueryInterchainAccountFromAddressRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_494b786fe66f2b80, []int{0} + return fileDescriptor_8488dc3be1ad8834, []int{0} } func (m *QueryInterchainAccountFromAddressRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -100,7 +100,7 @@ func (m *QueryInterchainAccountFromAddressResponse) String() string { } func (*QueryInterchainAccountFromAddressResponse) ProtoMessage() {} func (*QueryInterchainAccountFromAddressResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_494b786fe66f2b80, []int{1} + return fileDescriptor_8488dc3be1ad8834, []int{1} } func (m *QueryInterchainAccountFromAddressResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -144,7 +144,7 @@ func (m *QueryParamsRequest) Reset() { *m = QueryParamsRequest{} } func (m *QueryParamsRequest) String() string { return proto.CompactTextString(m) } func (*QueryParamsRequest) ProtoMessage() {} func (*QueryParamsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_494b786fe66f2b80, []int{2} + return fileDescriptor_8488dc3be1ad8834, []int{2} } func (m *QueryParamsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -183,7 +183,7 @@ func (m *QueryParamsResponse) Reset() { *m = QueryParamsResponse{} } func (m *QueryParamsResponse) String() string { return proto.CompactTextString(m) } func (*QueryParamsResponse) ProtoMessage() {} func (*QueryParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_494b786fe66f2b80, []int{3} + return fileDescriptor_8488dc3be1ad8834, []int{3} } func (m *QueryParamsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -227,7 +227,7 @@ func (m *QueryGetValidatorsRequest) Reset() { *m = QueryGetValidatorsReq func (m *QueryGetValidatorsRequest) String() string { return proto.CompactTextString(m) } func (*QueryGetValidatorsRequest) ProtoMessage() {} func (*QueryGetValidatorsRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_494b786fe66f2b80, []int{4} + return fileDescriptor_8488dc3be1ad8834, []int{4} } func (m *QueryGetValidatorsRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -271,7 +271,7 @@ func (m *QueryGetValidatorsResponse) Reset() { *m = QueryGetValidatorsRe func (m *QueryGetValidatorsResponse) String() string { return proto.CompactTextString(m) } func (*QueryGetValidatorsResponse) ProtoMessage() {} func (*QueryGetValidatorsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_494b786fe66f2b80, []int{5} + return fileDescriptor_8488dc3be1ad8834, []int{5} } func (m *QueryGetValidatorsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -315,7 +315,7 @@ func (m *QueryGetHostZoneRequest) Reset() { *m = QueryGetHostZoneRequest func (m *QueryGetHostZoneRequest) String() string { return proto.CompactTextString(m) } func (*QueryGetHostZoneRequest) ProtoMessage() {} func (*QueryGetHostZoneRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_494b786fe66f2b80, []int{6} + return fileDescriptor_8488dc3be1ad8834, []int{6} } func (m *QueryGetHostZoneRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -359,7 +359,7 @@ func (m *QueryGetHostZoneResponse) Reset() { *m = QueryGetHostZoneRespon func (m *QueryGetHostZoneResponse) String() string { return proto.CompactTextString(m) } func (*QueryGetHostZoneResponse) ProtoMessage() {} func (*QueryGetHostZoneResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_494b786fe66f2b80, []int{7} + return fileDescriptor_8488dc3be1ad8834, []int{7} } func (m *QueryGetHostZoneResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -403,7 +403,7 @@ func (m *QueryAllHostZoneRequest) Reset() { *m = QueryAllHostZoneRequest func (m *QueryAllHostZoneRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllHostZoneRequest) ProtoMessage() {} func (*QueryAllHostZoneRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_494b786fe66f2b80, []int{8} + return fileDescriptor_8488dc3be1ad8834, []int{8} } func (m *QueryAllHostZoneRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -448,7 +448,7 @@ func (m *QueryAllHostZoneResponse) Reset() { *m = QueryAllHostZoneRespon func (m *QueryAllHostZoneResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllHostZoneResponse) ProtoMessage() {} func (*QueryAllHostZoneResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_494b786fe66f2b80, []int{9} + return fileDescriptor_8488dc3be1ad8834, []int{9} } func (m *QueryAllHostZoneResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -499,7 +499,7 @@ func (m *QueryModuleAddressRequest) Reset() { *m = QueryModuleAddressReq func (m *QueryModuleAddressRequest) String() string { return proto.CompactTextString(m) } func (*QueryModuleAddressRequest) ProtoMessage() {} func (*QueryModuleAddressRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_494b786fe66f2b80, []int{10} + return fileDescriptor_8488dc3be1ad8834, []int{10} } func (m *QueryModuleAddressRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -543,7 +543,7 @@ func (m *QueryModuleAddressResponse) Reset() { *m = QueryModuleAddressRe func (m *QueryModuleAddressResponse) String() string { return proto.CompactTextString(m) } func (*QueryModuleAddressResponse) ProtoMessage() {} func (*QueryModuleAddressResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_494b786fe66f2b80, []int{11} + return fileDescriptor_8488dc3be1ad8834, []int{11} } func (m *QueryModuleAddressResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -587,7 +587,7 @@ func (m *QueryGetEpochTrackerRequest) Reset() { *m = QueryGetEpochTracke func (m *QueryGetEpochTrackerRequest) String() string { return proto.CompactTextString(m) } func (*QueryGetEpochTrackerRequest) ProtoMessage() {} func (*QueryGetEpochTrackerRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_494b786fe66f2b80, []int{12} + return fileDescriptor_8488dc3be1ad8834, []int{12} } func (m *QueryGetEpochTrackerRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -631,7 +631,7 @@ func (m *QueryGetEpochTrackerResponse) Reset() { *m = QueryGetEpochTrack func (m *QueryGetEpochTrackerResponse) String() string { return proto.CompactTextString(m) } func (*QueryGetEpochTrackerResponse) ProtoMessage() {} func (*QueryGetEpochTrackerResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_494b786fe66f2b80, []int{13} + return fileDescriptor_8488dc3be1ad8834, []int{13} } func (m *QueryGetEpochTrackerResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -674,7 +674,7 @@ func (m *QueryAllEpochTrackerRequest) Reset() { *m = QueryAllEpochTracke func (m *QueryAllEpochTrackerRequest) String() string { return proto.CompactTextString(m) } func (*QueryAllEpochTrackerRequest) ProtoMessage() {} func (*QueryAllEpochTrackerRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_494b786fe66f2b80, []int{14} + return fileDescriptor_8488dc3be1ad8834, []int{14} } func (m *QueryAllEpochTrackerRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -711,7 +711,7 @@ func (m *QueryAllEpochTrackerResponse) Reset() { *m = QueryAllEpochTrack func (m *QueryAllEpochTrackerResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllEpochTrackerResponse) ProtoMessage() {} func (*QueryAllEpochTrackerResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_494b786fe66f2b80, []int{15} + return fileDescriptor_8488dc3be1ad8834, []int{15} } func (m *QueryAllEpochTrackerResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -756,7 +756,7 @@ func (m *QueryGetNextPacketSequenceRequest) Reset() { *m = QueryGetNextP func (m *QueryGetNextPacketSequenceRequest) String() string { return proto.CompactTextString(m) } func (*QueryGetNextPacketSequenceRequest) ProtoMessage() {} func (*QueryGetNextPacketSequenceRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_494b786fe66f2b80, []int{16} + return fileDescriptor_8488dc3be1ad8834, []int{16} } func (m *QueryGetNextPacketSequenceRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -807,7 +807,7 @@ func (m *QueryGetNextPacketSequenceResponse) Reset() { *m = QueryGetNext func (m *QueryGetNextPacketSequenceResponse) String() string { return proto.CompactTextString(m) } func (*QueryGetNextPacketSequenceResponse) ProtoMessage() {} func (*QueryGetNextPacketSequenceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_494b786fe66f2b80, []int{17} + return fileDescriptor_8488dc3be1ad8834, []int{17} } func (m *QueryGetNextPacketSequenceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -851,7 +851,7 @@ func (m *QueryAddressUnbondings) Reset() { *m = QueryAddressUnbondings{} func (m *QueryAddressUnbondings) String() string { return proto.CompactTextString(m) } func (*QueryAddressUnbondings) ProtoMessage() {} func (*QueryAddressUnbondings) Descriptor() ([]byte, []int) { - return fileDescriptor_494b786fe66f2b80, []int{18} + return fileDescriptor_8488dc3be1ad8834, []int{18} } func (m *QueryAddressUnbondings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -895,7 +895,7 @@ func (m *QueryAddressUnbondingsResponse) Reset() { *m = QueryAddressUnbo func (m *QueryAddressUnbondingsResponse) String() string { return proto.CompactTextString(m) } func (*QueryAddressUnbondingsResponse) ProtoMessage() {} func (*QueryAddressUnbondingsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_494b786fe66f2b80, []int{19} + return fileDescriptor_8488dc3be1ad8834, []int{19} } func (m *QueryAddressUnbondingsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -938,7 +938,7 @@ func (m *QueryAllTradeRoutes) Reset() { *m = QueryAllTradeRoutes{} } func (m *QueryAllTradeRoutes) String() string { return proto.CompactTextString(m) } func (*QueryAllTradeRoutes) ProtoMessage() {} func (*QueryAllTradeRoutes) Descriptor() ([]byte, []int) { - return fileDescriptor_494b786fe66f2b80, []int{20} + return fileDescriptor_8488dc3be1ad8834, []int{20} } func (m *QueryAllTradeRoutes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -975,7 +975,7 @@ func (m *QueryAllTradeRoutesResponse) Reset() { *m = QueryAllTradeRoutes func (m *QueryAllTradeRoutesResponse) String() string { return proto.CompactTextString(m) } func (*QueryAllTradeRoutesResponse) ProtoMessage() {} func (*QueryAllTradeRoutesResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_494b786fe66f2b80, []int{21} + return fileDescriptor_8488dc3be1ad8834, []int{21} } func (m *QueryAllTradeRoutesResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1012,112 +1012,112 @@ func (m *QueryAllTradeRoutesResponse) GetTradeRoutes() []TradeRoute { } func init() { - proto.RegisterType((*QueryInterchainAccountFromAddressRequest)(nil), "stride.stakeibc.QueryInterchainAccountFromAddressRequest") - proto.RegisterType((*QueryInterchainAccountFromAddressResponse)(nil), "stride.stakeibc.QueryInterchainAccountFromAddressResponse") - proto.RegisterType((*QueryParamsRequest)(nil), "stride.stakeibc.QueryParamsRequest") - proto.RegisterType((*QueryParamsResponse)(nil), "stride.stakeibc.QueryParamsResponse") - proto.RegisterType((*QueryGetValidatorsRequest)(nil), "stride.stakeibc.QueryGetValidatorsRequest") - proto.RegisterType((*QueryGetValidatorsResponse)(nil), "stride.stakeibc.QueryGetValidatorsResponse") - proto.RegisterType((*QueryGetHostZoneRequest)(nil), "stride.stakeibc.QueryGetHostZoneRequest") - proto.RegisterType((*QueryGetHostZoneResponse)(nil), "stride.stakeibc.QueryGetHostZoneResponse") - proto.RegisterType((*QueryAllHostZoneRequest)(nil), "stride.stakeibc.QueryAllHostZoneRequest") - proto.RegisterType((*QueryAllHostZoneResponse)(nil), "stride.stakeibc.QueryAllHostZoneResponse") - proto.RegisterType((*QueryModuleAddressRequest)(nil), "stride.stakeibc.QueryModuleAddressRequest") - proto.RegisterType((*QueryModuleAddressResponse)(nil), "stride.stakeibc.QueryModuleAddressResponse") - proto.RegisterType((*QueryGetEpochTrackerRequest)(nil), "stride.stakeibc.QueryGetEpochTrackerRequest") - proto.RegisterType((*QueryGetEpochTrackerResponse)(nil), "stride.stakeibc.QueryGetEpochTrackerResponse") - proto.RegisterType((*QueryAllEpochTrackerRequest)(nil), "stride.stakeibc.QueryAllEpochTrackerRequest") - proto.RegisterType((*QueryAllEpochTrackerResponse)(nil), "stride.stakeibc.QueryAllEpochTrackerResponse") - proto.RegisterType((*QueryGetNextPacketSequenceRequest)(nil), "stride.stakeibc.QueryGetNextPacketSequenceRequest") - proto.RegisterType((*QueryGetNextPacketSequenceResponse)(nil), "stride.stakeibc.QueryGetNextPacketSequenceResponse") - proto.RegisterType((*QueryAddressUnbondings)(nil), "stride.stakeibc.QueryAddressUnbondings") - proto.RegisterType((*QueryAddressUnbondingsResponse)(nil), "stride.stakeibc.QueryAddressUnbondingsResponse") - proto.RegisterType((*QueryAllTradeRoutes)(nil), "stride.stakeibc.QueryAllTradeRoutes") - proto.RegisterType((*QueryAllTradeRoutesResponse)(nil), "stride.stakeibc.QueryAllTradeRoutesResponse") -} - -func init() { proto.RegisterFile("stride/stakeibc/query.proto", fileDescriptor_494b786fe66f2b80) } - -var fileDescriptor_494b786fe66f2b80 = []byte{ - // 1238 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x97, 0xdd, 0x6e, 0x1b, 0x45, - 0x14, 0xc7, 0xb3, 0x6d, 0x9a, 0xa6, 0x27, 0x69, 0x43, 0x87, 0x40, 0x9c, 0x4d, 0xe2, 0x90, 0x69, - 0x68, 0x3e, 0x9a, 0x7a, 0x89, 0x53, 0x10, 0x8d, 0xa8, 0xc0, 0x11, 0x6d, 0x63, 0x14, 0x50, 0x70, - 0x4b, 0x85, 0xca, 0x85, 0x35, 0xde, 0x1d, 0xec, 0x55, 0xd7, 0x3b, 0xee, 0xee, 0x38, 0x24, 0x44, - 0x56, 0x25, 0x1e, 0x00, 0x55, 0x20, 0x84, 0xc4, 0x5d, 0x11, 0x17, 0x5c, 0xf3, 0x14, 0xbd, 0xa3, - 0x12, 0x37, 0x5c, 0x45, 0x28, 0xe1, 0x09, 0xfa, 0x04, 0x68, 0x67, 0x67, 0xd7, 0xeb, 0xfd, 0x30, - 0x4e, 0xef, 0x76, 0x67, 0xce, 0xc7, 0x6f, 0xcf, 0x99, 0x39, 0x7f, 0x1b, 0x66, 0x5c, 0xee, 0x98, - 0x06, 0xd5, 0x5c, 0x4e, 0x1e, 0x51, 0xb3, 0xa6, 0x6b, 0x8f, 0xdb, 0xd4, 0x39, 0x28, 0xb4, 0x1c, - 0xc6, 0x19, 0x9a, 0xf0, 0x37, 0x0b, 0xc1, 0xa6, 0xba, 0xaa, 0x33, 0xb7, 0xc9, 0x5c, 0xad, 0x46, - 0x5c, 0xea, 0x5b, 0x6a, 0x7b, 0xeb, 0x35, 0xca, 0xc9, 0xba, 0xd6, 0x22, 0x75, 0xd3, 0x26, 0xdc, - 0x64, 0xb6, 0xef, 0xac, 0x4e, 0xd6, 0x59, 0x9d, 0x89, 0x47, 0xcd, 0x7b, 0x92, 0xab, 0xb3, 0x75, - 0xc6, 0xea, 0x16, 0xd5, 0x48, 0xcb, 0xd4, 0x88, 0x6d, 0x33, 0x2e, 0x5c, 0x5c, 0xb9, 0xbb, 0x14, - 0xa7, 0x21, 0x86, 0xe1, 0x50, 0xd7, 0xad, 0xb6, 0xed, 0x1a, 0xb3, 0x0d, 0xd3, 0xae, 0x4b, 0xc3, - 0x2b, 0x71, 0x43, 0xda, 0x62, 0x7a, 0xa3, 0xca, 0x1d, 0xa2, 0x3f, 0xa2, 0x8e, 0x34, 0x9a, 0x8f, - 0x1b, 0x35, 0x98, 0xcb, 0xab, 0xdf, 0x32, 0x9b, 0x06, 0x30, 0x71, 0x83, 0x16, 0x71, 0x48, 0x33, - 0x80, 0x59, 0x88, 0xef, 0x72, 0x87, 0x18, 0xb4, 0xea, 0xb0, 0x36, 0xa7, 0x59, 0x19, 0xf6, 0x88, - 0x65, 0x1a, 0x84, 0x33, 0x89, 0x80, 0x9f, 0xc0, 0xf2, 0xe7, 0x5e, 0x99, 0xca, 0x36, 0xa7, 0x8e, - 0xde, 0x20, 0xa6, 0x5d, 0xd2, 0x75, 0xd6, 0xb6, 0xf9, 0x1d, 0x87, 0x35, 0x4b, 0xfe, 0xc7, 0x55, - 0xe8, 0xe3, 0x36, 0x75, 0x39, 0x9a, 0x84, 0x73, 0xec, 0x1b, 0x9b, 0x3a, 0x39, 0xe5, 0x2d, 0x65, - 0xf9, 0x42, 0xc5, 0x7f, 0x41, 0xb7, 0xe0, 0xa2, 0xce, 0x6c, 0x9b, 0xea, 0x5e, 0x9d, 0xaa, 0xa6, - 0x91, 0x3b, 0xe3, 0xed, 0x6e, 0xe5, 0x5e, 0x1e, 0xcd, 0x4f, 0x1e, 0x90, 0xa6, 0xb5, 0x89, 0x7b, - 0xb6, 0x71, 0x65, 0xbc, 0xfb, 0x5e, 0x36, 0xf0, 0x53, 0x05, 0x56, 0x06, 0x20, 0x70, 0x5b, 0xcc, - 0x76, 0x29, 0xd2, 0x41, 0x35, 0x43, 0xbb, 0x2a, 0xf1, 0x0d, 0xab, 0xb2, 0x09, 0x3e, 0xd7, 0xd6, - 0xdb, 0x2f, 0x8f, 0xe6, 0x17, 0xfc, 0xcc, 0xd9, 0xb6, 0xb8, 0x92, 0x33, 0xe3, 0x09, 0x65, 0x32, - 0x3c, 0x09, 0x48, 0x10, 0xed, 0x8a, 0x62, 0xcb, 0xaf, 0xc7, 0x3b, 0xf0, 0x7a, 0xcf, 0xaa, 0x24, - 0x7a, 0x17, 0x46, 0xfc, 0xa6, 0x88, 0xec, 0x63, 0xc5, 0xa9, 0x42, 0xec, 0x4c, 0x16, 0x7c, 0x87, - 0xad, 0xe1, 0xe7, 0x47, 0xf3, 0x43, 0x15, 0x69, 0x8c, 0xdf, 0x83, 0x69, 0x11, 0xed, 0x2e, 0xe5, - 0x0f, 0x82, 0x96, 0x84, 0x85, 0x9e, 0x86, 0x51, 0x1f, 0xda, 0x34, 0x64, 0xad, 0xcf, 0x8b, 0xf7, - 0xb2, 0x81, 0xbf, 0x04, 0x35, 0xcd, 0x4f, 0xc2, 0x6c, 0x02, 0x84, 0x0d, 0xf6, 0x80, 0xce, 0x2e, - 0x8f, 0x15, 0xd5, 0x04, 0x50, 0xe8, 0x58, 0x89, 0x58, 0xe3, 0x1b, 0x30, 0x15, 0x44, 0xde, 0x66, - 0x2e, 0x7f, 0xc8, 0x6c, 0x3a, 0x10, 0x4f, 0x2e, 0xe9, 0x25, 0x69, 0x3e, 0x80, 0x0b, 0xe1, 0x81, - 0x96, 0xd5, 0x99, 0x4e, 0xc0, 0x04, 0x5e, 0xb2, 0x3e, 0xa3, 0x0d, 0xf9, 0x8e, 0x89, 0xe4, 0x29, - 0x59, 0x56, 0x9c, 0xe7, 0x0e, 0x40, 0xf7, 0x36, 0xcb, 0xc8, 0x57, 0x0b, 0xfe, 0xd5, 0x2f, 0x78, - 0x57, 0xbf, 0xe0, 0x0f, 0x09, 0x79, 0xf5, 0x0b, 0xbb, 0xa4, 0x1e, 0xf8, 0x56, 0x22, 0x9e, 0xf8, - 0x99, 0x22, 0xe9, 0x7b, 0x72, 0xa4, 0xd3, 0x9f, 0x3d, 0x15, 0x3d, 0xba, 0xdb, 0x83, 0x78, 0x46, - 0x20, 0x2e, 0xfd, 0x2f, 0xa2, 0x9f, 0xba, 0x87, 0x51, 0x93, 0x07, 0xe5, 0x53, 0x66, 0xb4, 0x2d, - 0x1a, 0xbb, 0x91, 0x08, 0x86, 0x6d, 0xd2, 0xa4, 0xb2, 0x29, 0xe2, 0x19, 0xbf, 0x23, 0x4f, 0x48, - 0xcc, 0x41, 0x7e, 0x15, 0x82, 0x61, 0xef, 0x06, 0x04, 0x1e, 0xde, 0x33, 0xde, 0x86, 0x99, 0xa0, - 0x87, 0xb7, 0xbd, 0x29, 0x75, 0xdf, 0x1f, 0x52, 0x41, 0x92, 0x15, 0x78, 0xcd, 0x1f, 0x5e, 0xa6, - 0x41, 0x6d, 0x6e, 0x7e, 0x6d, 0x86, 0x13, 0x60, 0x42, 0xac, 0x97, 0xc3, 0x65, 0xdc, 0x80, 0xd9, - 0xf4, 0x48, 0x32, 0xfb, 0x36, 0x5c, 0xec, 0x99, 0x83, 0xb2, 0x77, 0x73, 0x89, 0xba, 0x46, 0xbd, - 0x65, 0x6d, 0xc7, 0x69, 0x64, 0x0d, 0xcf, 0x49, 0xe6, 0x92, 0x65, 0xa5, 0x30, 0x87, 0x20, 0x89, - 0xed, 0x6c, 0x90, 0xb3, 0xaf, 0x06, 0xf2, 0x15, 0x2c, 0x04, 0x9f, 0xfc, 0x19, 0xdd, 0xe7, 0xbb, - 0xde, 0x2a, 0xbf, 0xe7, 0x61, 0xd8, 0x7a, 0x78, 0x60, 0xe7, 0x00, 0xf4, 0x06, 0xb1, 0x6d, 0x6a, - 0x75, 0xaf, 0xd0, 0x05, 0xb9, 0x52, 0x36, 0xd0, 0x14, 0x9c, 0x6f, 0x31, 0x87, 0x87, 0xc3, 0xb3, - 0x32, 0xe2, 0xbd, 0x96, 0x0d, 0xfc, 0x11, 0xe0, 0x7e, 0xc1, 0xe5, 0xc7, 0xa8, 0x30, 0xea, 0xca, - 0x35, 0x11, 0x7b, 0xb8, 0x12, 0xbe, 0xe3, 0x22, 0xbc, 0xe9, 0x17, 0xc2, 0x3f, 0x07, 0x5f, 0x04, - 0x32, 0xe5, 0xa2, 0x1c, 0x9c, 0xef, 0x99, 0x9b, 0x95, 0xe0, 0x15, 0xef, 0x43, 0x3e, 0xdd, 0x27, - 0xcc, 0xf8, 0x00, 0x50, 0x42, 0xf8, 0x82, 0x79, 0xb3, 0x90, 0xa8, 0x61, 0x3c, 0x8e, 0xac, 0xe3, - 0x65, 0x12, 0x8f, 0x8f, 0xdf, 0x90, 0x33, 0xb6, 0x64, 0x59, 0xf7, 0x3d, 0x2d, 0xab, 0x78, 0x52, - 0xe6, 0x62, 0xbd, 0xdb, 0xec, 0xc8, 0x72, 0x48, 0xf3, 0x31, 0x8c, 0x47, 0x94, 0x2f, 0xe0, 0x98, - 0x49, 0x70, 0x74, 0x7d, 0x25, 0xc1, 0x18, 0xef, 0x46, 0x2b, 0x7e, 0x7f, 0x09, 0xce, 0x89, 0x2c, - 0xe8, 0x09, 0x8c, 0xf8, 0x33, 0x1b, 0x5d, 0x49, 0xc4, 0x48, 0x0a, 0x83, 0xba, 0xd8, 0xdf, 0xc8, - 0x87, 0xc4, 0xab, 0xdf, 0xfd, 0xf5, 0xef, 0x8f, 0x67, 0x16, 0x11, 0xd6, 0xee, 0x09, 0x6b, 0x8b, - 0xd4, 0x5c, 0x2d, 0x5d, 0xde, 0xd1, 0x33, 0x05, 0xa0, 0x3b, 0xdd, 0xd1, 0x6a, 0x7a, 0x82, 0x34, - 0xe9, 0x50, 0xaf, 0x0d, 0x64, 0x2b, 0x99, 0x36, 0x05, 0xd3, 0x0d, 0x54, 0x94, 0x4c, 0xd7, 0x77, - 0xd2, 0xa0, 0xba, 0x1a, 0xa1, 0x1d, 0x06, 0x32, 0xd0, 0x41, 0xbf, 0x28, 0x30, 0x1a, 0x4c, 0x3f, - 0xb4, 0x9c, 0x99, 0x35, 0x36, 0xba, 0xd5, 0x95, 0x01, 0x2c, 0x25, 0xdd, 0x4d, 0x41, 0xb7, 0x81, - 0xd6, 0xfb, 0xd2, 0x85, 0x33, 0x3a, 0x0a, 0xf7, 0x83, 0x02, 0x63, 0x41, 0xbc, 0x92, 0x65, 0x65, - 0xf1, 0x25, 0xa5, 0x25, 0x8b, 0x2f, 0x45, 0x20, 0x70, 0x41, 0xf0, 0x2d, 0xa3, 0xab, 0x83, 0xf1, - 0xa1, 0xdf, 0x14, 0xb8, 0xd8, 0x33, 0x94, 0xb3, 0x1a, 0x9b, 0x36, 0xea, 0xb3, 0x1a, 0x9b, 0x3a, - 0xe5, 0x07, 0x6c, 0x6c, 0x53, 0xf8, 0x06, 0xbf, 0x88, 0xb4, 0x43, 0x4f, 0x3e, 0x3a, 0xe8, 0x27, - 0x05, 0x66, 0xfb, 0xfd, 0x16, 0x43, 0x37, 0xd3, 0x49, 0x06, 0xf8, 0x05, 0xa9, 0x6e, 0xbe, 0x8a, - 0xab, 0xbc, 0xe5, 0x7f, 0x28, 0x30, 0x1e, 0x9d, 0xc6, 0x68, 0x2d, 0xf3, 0x28, 0xa5, 0x28, 0x82, - 0x7a, 0x7d, 0x40, 0x6b, 0x59, 0xc1, 0xdb, 0xa2, 0x82, 0x1f, 0xa2, 0x5b, 0x7d, 0x2b, 0xd8, 0xa3, - 0x21, 0xda, 0x61, 0x5c, 0x26, 0x3b, 0xe8, 0x57, 0x05, 0x26, 0xa2, 0xf1, 0xbd, 0xc3, 0xb8, 0x96, - 0x79, 0xc4, 0x4e, 0xc1, 0x9d, 0x21, 0x6c, 0xb8, 0x28, 0xb8, 0xd7, 0xd0, 0xea, 0xe0, 0xdc, 0xe8, - 0x4f, 0x05, 0x50, 0x52, 0x5e, 0x50, 0x31, 0xb3, 0x62, 0x99, 0x42, 0xa7, 0x6e, 0x9c, 0xca, 0x47, - 0x32, 0xef, 0x0a, 0xe6, 0x4f, 0xd0, 0x76, 0x5f, 0x66, 0x9b, 0xee, 0xf3, 0x6a, 0x4b, 0x44, 0xa8, - 0x06, 0xf2, 0x26, 0xee, 0xbc, 0x94, 0xd5, 0x8e, 0x76, 0x28, 0x45, 0xb4, 0x83, 0x7e, 0x57, 0xe0, - 0x72, 0x52, 0xf1, 0x96, 0x32, 0x4a, 0x19, 0x37, 0x54, 0xb5, 0x01, 0x0d, 0x4f, 0x39, 0xaa, 0xba, - 0x52, 0xa9, 0x1d, 0xca, 0x4b, 0xd7, 0x41, 0x3f, 0x2b, 0x70, 0xa9, 0x57, 0xd7, 0xd0, 0x62, 0x66, - 0xcb, 0x23, 0x56, 0xea, 0xda, 0x20, 0x56, 0x21, 0xe1, 0xba, 0x20, 0xbc, 0x86, 0x56, 0xfa, 0x12, - 0x46, 0x65, 0x74, 0x6b, 0xe7, 0xf9, 0x71, 0x5e, 0x79, 0x71, 0x9c, 0x57, 0xfe, 0x39, 0xce, 0x2b, - 0x4f, 0x4f, 0xf2, 0x43, 0x2f, 0x4e, 0xf2, 0x43, 0x7f, 0x9f, 0xe4, 0x87, 0x1e, 0x16, 0xeb, 0x26, - 0x6f, 0xb4, 0x6b, 0x05, 0x9d, 0x35, 0xd3, 0xc2, 0xed, 0x15, 0xdf, 0xd7, 0xf6, 0x23, 0x41, 0x0f, - 0x5a, 0xd4, 0xad, 0x8d, 0x88, 0xff, 0x9b, 0x1b, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x18, 0x4d, - 0xd0, 0x43, 0xd0, 0x0f, 0x00, 0x00, + proto.RegisterType((*QueryInterchainAccountFromAddressRequest)(nil), "symphony.stakeibc.QueryInterchainAccountFromAddressRequest") + proto.RegisterType((*QueryInterchainAccountFromAddressResponse)(nil), "symphony.stakeibc.QueryInterchainAccountFromAddressResponse") + proto.RegisterType((*QueryParamsRequest)(nil), "symphony.stakeibc.QueryParamsRequest") + proto.RegisterType((*QueryParamsResponse)(nil), "symphony.stakeibc.QueryParamsResponse") + proto.RegisterType((*QueryGetValidatorsRequest)(nil), "symphony.stakeibc.QueryGetValidatorsRequest") + proto.RegisterType((*QueryGetValidatorsResponse)(nil), "symphony.stakeibc.QueryGetValidatorsResponse") + proto.RegisterType((*QueryGetHostZoneRequest)(nil), "symphony.stakeibc.QueryGetHostZoneRequest") + proto.RegisterType((*QueryGetHostZoneResponse)(nil), "symphony.stakeibc.QueryGetHostZoneResponse") + proto.RegisterType((*QueryAllHostZoneRequest)(nil), "symphony.stakeibc.QueryAllHostZoneRequest") + proto.RegisterType((*QueryAllHostZoneResponse)(nil), "symphony.stakeibc.QueryAllHostZoneResponse") + proto.RegisterType((*QueryModuleAddressRequest)(nil), "symphony.stakeibc.QueryModuleAddressRequest") + proto.RegisterType((*QueryModuleAddressResponse)(nil), "symphony.stakeibc.QueryModuleAddressResponse") + proto.RegisterType((*QueryGetEpochTrackerRequest)(nil), "symphony.stakeibc.QueryGetEpochTrackerRequest") + proto.RegisterType((*QueryGetEpochTrackerResponse)(nil), "symphony.stakeibc.QueryGetEpochTrackerResponse") + proto.RegisterType((*QueryAllEpochTrackerRequest)(nil), "symphony.stakeibc.QueryAllEpochTrackerRequest") + proto.RegisterType((*QueryAllEpochTrackerResponse)(nil), "symphony.stakeibc.QueryAllEpochTrackerResponse") + proto.RegisterType((*QueryGetNextPacketSequenceRequest)(nil), "symphony.stakeibc.QueryGetNextPacketSequenceRequest") + proto.RegisterType((*QueryGetNextPacketSequenceResponse)(nil), "symphony.stakeibc.QueryGetNextPacketSequenceResponse") + proto.RegisterType((*QueryAddressUnbondings)(nil), "symphony.stakeibc.QueryAddressUnbondings") + proto.RegisterType((*QueryAddressUnbondingsResponse)(nil), "symphony.stakeibc.QueryAddressUnbondingsResponse") + proto.RegisterType((*QueryAllTradeRoutes)(nil), "symphony.stakeibc.QueryAllTradeRoutes") + proto.RegisterType((*QueryAllTradeRoutesResponse)(nil), "symphony.stakeibc.QueryAllTradeRoutesResponse") +} + +func init() { proto.RegisterFile("symphony/stakeibc/query.proto", fileDescriptor_8488dc3be1ad8834) } + +var fileDescriptor_8488dc3be1ad8834 = []byte{ + // 1247 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x97, 0xdf, 0x6e, 0xdc, 0xc4, + 0x17, 0xc7, 0xe3, 0x26, 0xcd, 0x9f, 0x93, 0xa4, 0xfd, 0x65, 0x7e, 0x81, 0x6e, 0xdc, 0x64, 0x43, + 0x26, 0x24, 0xcd, 0x86, 0xd6, 0x4e, 0x96, 0x40, 0x10, 0x6d, 0x11, 0x1b, 0x44, 0x9a, 0x45, 0x22, + 0x0a, 0x4b, 0x41, 0x28, 0x5c, 0xac, 0xbc, 0xf6, 0xb0, 0x6b, 0xea, 0x9d, 0xd9, 0xda, 0xde, 0x90, + 0x34, 0x8a, 0x90, 0xfa, 0x04, 0x95, 0xe0, 0x06, 0x89, 0xbb, 0x22, 0x84, 0xb8, 0xe6, 0x21, 0x7a, + 0x59, 0xc4, 0x0d, 0x57, 0x11, 0x4a, 0x78, 0x82, 0x3e, 0x01, 0xf2, 0x78, 0xec, 0xf5, 0xae, 0xff, + 0x74, 0xd3, 0x3b, 0xcf, 0xcc, 0x39, 0x73, 0x3e, 0x3e, 0x67, 0xe6, 0x7c, 0x6d, 0x98, 0x73, 0x8e, + 0x9a, 0xad, 0x06, 0xa3, 0x47, 0xaa, 0xe3, 0x6a, 0x0f, 0x88, 0x59, 0xd3, 0xd5, 0x87, 0x6d, 0x62, + 0x1f, 0x29, 0x2d, 0x9b, 0xb9, 0x0c, 0x4d, 0x05, 0xcb, 0x4a, 0xb0, 0x2c, 0xaf, 0xea, 0xcc, 0x69, + 0x32, 0x47, 0xad, 0x69, 0x0e, 0xf1, 0x6d, 0xd5, 0x83, 0xf5, 0x1a, 0x71, 0xb5, 0x75, 0xb5, 0xa5, + 0xd5, 0x4d, 0xaa, 0xb9, 0x26, 0xa3, 0xbe, 0xbb, 0x3c, 0x5d, 0x67, 0x75, 0xc6, 0x1f, 0x55, 0xef, + 0x49, 0xcc, 0xce, 0xd6, 0x19, 0xab, 0x5b, 0x44, 0xd5, 0x5a, 0xa6, 0xaa, 0x51, 0xca, 0x5c, 0xee, + 0xe2, 0x88, 0xd5, 0x42, 0x9c, 0x48, 0x33, 0x0c, 0x9b, 0x38, 0x4e, 0xb5, 0x4d, 0x6b, 0x8c, 0x1a, + 0x26, 0xad, 0x0b, 0xd3, 0xa5, 0xb8, 0x29, 0x69, 0x31, 0xbd, 0x51, 0x75, 0x6d, 0x4d, 0x7f, 0x40, + 0x6c, 0x61, 0xb6, 0x10, 0x37, 0x6b, 0x30, 0xc7, 0xad, 0x3e, 0x62, 0x94, 0x08, 0x93, 0x7c, 0xdc, + 0xa4, 0xa5, 0xd9, 0x5a, 0x33, 0x80, 0x5a, 0x8c, 0xaf, 0xbb, 0xb6, 0x66, 0x90, 0xaa, 0xcd, 0xda, + 0x2e, 0x49, 0x8f, 0x73, 0xa0, 0x59, 0xa6, 0xa1, 0xb9, 0x4c, 0xa0, 0xe0, 0xef, 0x61, 0xe5, 0x33, + 0x2f, 0x65, 0x65, 0xea, 0x12, 0x5b, 0x6f, 0x68, 0x26, 0x2d, 0xe9, 0x3a, 0x6b, 0x53, 0x77, 0xdb, + 0x66, 0xcd, 0x92, 0xff, 0x9a, 0x15, 0xf2, 0xb0, 0x4d, 0x1c, 0x17, 0x4d, 0xc3, 0x65, 0xf6, 0x1d, + 0x25, 0x76, 0x4e, 0x7a, 0x43, 0x5a, 0x19, 0xab, 0xf8, 0x03, 0x74, 0x17, 0x26, 0x75, 0x46, 0x29, + 0xd1, 0xbd, 0x9c, 0x55, 0x4d, 0x23, 0x77, 0xc9, 0x5b, 0xdd, 0xca, 0xbd, 0x38, 0x9d, 0x9f, 0x3e, + 0xd2, 0x9a, 0xd6, 0xfb, 0xb8, 0x6b, 0x19, 0x57, 0x26, 0x3a, 0xe3, 0xb2, 0x81, 0x9f, 0x48, 0x50, + 0xe8, 0x83, 0xc0, 0x69, 0x31, 0xea, 0x10, 0xa4, 0x83, 0x6c, 0x86, 0x76, 0x55, 0xcd, 0x37, 0xac, + 0x8a, 0x72, 0xf8, 0x5c, 0x5b, 0x4b, 0x2f, 0x4e, 0xe7, 0x17, 0xfc, 0xc8, 0xe9, 0xb6, 0xb8, 0x92, + 0x33, 0x7b, 0x03, 0x8a, 0x60, 0x78, 0x1a, 0x10, 0x27, 0xda, 0xe3, 0x09, 0x17, 0x6f, 0x8f, 0x77, + 0xe1, 0xff, 0x5d, 0xb3, 0x82, 0x68, 0x13, 0x86, 0xfd, 0xc2, 0xf0, 0xe8, 0xe3, 0xc5, 0x19, 0x25, + 0x76, 0x42, 0x15, 0xdf, 0x65, 0x6b, 0xe8, 0xd9, 0xe9, 0xfc, 0x40, 0x45, 0x98, 0xe3, 0x77, 0x61, + 0x86, 0xef, 0x77, 0x8f, 0xb8, 0x5f, 0x06, 0x45, 0x09, 0x53, 0x3d, 0x03, 0xa3, 0x3e, 0xb6, 0x69, + 0x88, 0x6c, 0x8f, 0xf0, 0x71, 0xd9, 0xc0, 0xfb, 0x20, 0x27, 0xf9, 0x09, 0x9c, 0x3b, 0x00, 0x61, + 0x89, 0x3d, 0xa4, 0xc1, 0x95, 0xf1, 0xe2, 0x6c, 0x02, 0x52, 0xe8, 0x5a, 0x89, 0xd8, 0xe3, 0x0d, + 0xb8, 0x16, 0xec, 0xbd, 0xc3, 0x1c, 0x77, 0x9f, 0x51, 0xd2, 0x17, 0x51, 0x2e, 0xee, 0x25, 0x78, + 0x3e, 0x80, 0xb1, 0xf0, 0x68, 0x8b, 0x0c, 0x5d, 0x4f, 0xc0, 0x09, 0xfc, 0x44, 0x8e, 0x46, 0x1b, + 0x62, 0x8c, 0x35, 0x41, 0x54, 0xb2, 0xac, 0x5e, 0xa2, 0x6d, 0x80, 0xce, 0xfd, 0x16, 0x7b, 0x2f, + 0x2b, 0x7e, 0x33, 0x50, 0xbc, 0x66, 0xa0, 0xf8, 0x8d, 0x43, 0x34, 0x03, 0x65, 0x4f, 0xab, 0x07, + 0xbe, 0x95, 0x88, 0x27, 0x7e, 0x2a, 0x09, 0xfe, 0xae, 0x18, 0xc9, 0xfc, 0x83, 0x17, 0xe4, 0x47, + 0xf7, 0xba, 0x20, 0x2f, 0x71, 0xc8, 0x1b, 0x2f, 0x85, 0xf4, 0x83, 0x77, 0x51, 0xaa, 0xe2, 0xb8, + 0x7c, 0xca, 0x8c, 0xb6, 0x45, 0x7a, 0x6e, 0x26, 0x82, 0x21, 0xaa, 0x35, 0x89, 0x28, 0x0c, 0x7f, + 0xc6, 0x6b, 0xe2, 0x9c, 0xf4, 0x38, 0x88, 0xf7, 0x42, 0x30, 0xe4, 0xdd, 0x84, 0xc0, 0xc3, 0x7b, + 0xc6, 0x3b, 0x70, 0x3d, 0xa8, 0xe3, 0xc7, 0x5e, 0xd7, 0xba, 0xef, 0x37, 0xad, 0x20, 0x48, 0x01, + 0xfe, 0xe7, 0x37, 0x33, 0xd3, 0x20, 0xd4, 0x35, 0xbf, 0x31, 0xc3, 0x4e, 0x70, 0x95, 0xcf, 0x97, + 0xc3, 0x69, 0xfc, 0x2d, 0xcc, 0x26, 0xef, 0x24, 0xa2, 0x7f, 0x02, 0x93, 0x5d, 0x7d, 0x51, 0x54, + 0x6f, 0x3e, 0x21, 0xb3, 0x51, 0x7f, 0x91, 0xdd, 0x09, 0x12, 0x99, 0xc3, 0x73, 0x82, 0xba, 0x64, + 0x59, 0x09, 0xd4, 0x21, 0x4a, 0x6c, 0x39, 0x1d, 0x65, 0xf0, 0x55, 0x51, 0xbe, 0x86, 0x85, 0xe0, + 0xb5, 0x77, 0xc9, 0xa1, 0xbb, 0xe7, 0xcd, 0xba, 0x9f, 0x7b, 0x20, 0x54, 0x0f, 0x8f, 0xed, 0x1c, + 0x80, 0xde, 0xd0, 0x28, 0x25, 0x56, 0xe7, 0x2a, 0x8d, 0x89, 0x99, 0xb2, 0x81, 0xae, 0xc1, 0x48, + 0x8b, 0xd9, 0x6e, 0xd8, 0x48, 0x2b, 0xc3, 0xde, 0xb0, 0x6c, 0xe0, 0x0f, 0x01, 0x67, 0x6d, 0x2e, + 0x5e, 0x47, 0x86, 0x51, 0x47, 0xcc, 0xf1, 0xbd, 0x87, 0x2a, 0xe1, 0x18, 0x17, 0xe1, 0x75, 0x3f, + 0x15, 0xfe, 0x59, 0xf8, 0x22, 0x10, 0x2f, 0x07, 0xe5, 0x60, 0xa4, 0xab, 0x87, 0x56, 0x82, 0x21, + 0x7e, 0x04, 0xf9, 0x64, 0x9f, 0x30, 0xe2, 0x57, 0x80, 0x62, 0x72, 0x18, 0x74, 0x9e, 0xc5, 0x84, + 0x2c, 0xf6, 0xee, 0x24, 0x32, 0x39, 0xa5, 0xf5, 0x46, 0xc0, 0xaf, 0x89, 0x8e, 0x5b, 0xb2, 0xac, + 0xfb, 0x9e, 0xb6, 0x55, 0x3c, 0x69, 0x73, 0x30, 0xe9, 0x14, 0x3c, 0x32, 0x1d, 0xf2, 0x6c, 0xc3, + 0x44, 0x44, 0x09, 0x03, 0x92, 0xb9, 0x04, 0x92, 0x8e, 0xb7, 0x60, 0x18, 0x77, 0x3b, 0xfb, 0x15, + 0x7f, 0xbb, 0x02, 0x97, 0x79, 0x1c, 0xf4, 0x58, 0x82, 0x61, 0xbf, 0x85, 0xa3, 0xa5, 0x84, 0x6d, + 0xe2, 0x5a, 0x21, 0x2f, 0xbf, 0xcc, 0xcc, 0x67, 0xc5, 0x85, 0xc7, 0x7f, 0xfd, 0xfb, 0xc3, 0xa5, + 0x45, 0xb4, 0xa0, 0x26, 0x28, 0x75, 0xf8, 0x0d, 0xc3, 0x23, 0x3f, 0x95, 0x00, 0x3a, 0xfd, 0x1e, + 0xdd, 0x4c, 0x8b, 0x90, 0x24, 0x27, 0xf2, 0xad, 0x3e, 0xad, 0x05, 0xd6, 0x7b, 0x1c, 0xab, 0x88, + 0xd6, 0x32, 0xb0, 0x3a, 0xaa, 0xa1, 0x1e, 0x07, 0xc2, 0x70, 0x82, 0x7e, 0x96, 0x60, 0x34, 0xe8, + 0x85, 0x68, 0x35, 0x23, 0x6a, 0x4f, 0x33, 0x97, 0xdf, 0xea, 0xcb, 0x56, 0xf0, 0x6d, 0x72, 0xbe, + 0x75, 0xa4, 0x66, 0xf0, 0x85, 0x5d, 0x3b, 0x8a, 0xf7, 0xa3, 0x04, 0xe3, 0xc1, 0x6e, 0x25, 0xcb, + 0x4a, 0x27, 0x8c, 0xcb, 0x4d, 0x3a, 0x61, 0x82, 0x6c, 0xe0, 0x9b, 0x9c, 0x70, 0x19, 0xbd, 0xd9, + 0x0f, 0x21, 0xfa, 0x55, 0x82, 0xc9, 0xae, 0x36, 0x9d, 0x5e, 0xde, 0xa4, 0xf6, 0x9f, 0x5e, 0xde, + 0xc4, 0xde, 0xdf, 0x57, 0x79, 0x9b, 0xdc, 0x33, 0xf8, 0x5a, 0x52, 0x8f, 0x3d, 0x49, 0x39, 0x41, + 0x3f, 0x49, 0x30, 0x9b, 0xf5, 0x9d, 0x86, 0x6e, 0xa7, 0x91, 0xf4, 0xf1, 0x7d, 0x29, 0xdf, 0x79, + 0x35, 0x67, 0x71, 0xef, 0xff, 0x90, 0x60, 0x22, 0xda, 0xa1, 0x91, 0x92, 0x71, 0xa4, 0x12, 0x94, + 0x42, 0x56, 0xfb, 0xb6, 0x17, 0x79, 0xfc, 0x88, 0xe7, 0xf1, 0x2e, 0xba, 0x9d, 0x91, 0xc7, 0x2e, + 0x6d, 0x51, 0x8f, 0x7b, 0x05, 0xf4, 0x04, 0xfd, 0x22, 0xc1, 0xd5, 0xe8, 0xee, 0xde, 0xb1, 0x54, + 0x32, 0x8e, 0xda, 0x85, 0xc8, 0x53, 0x44, 0x0f, 0xaf, 0x71, 0xf2, 0x55, 0xb4, 0xd2, 0x2f, 0x39, + 0xfa, 0x53, 0x02, 0x14, 0x97, 0x1d, 0xb4, 0x91, 0x91, 0xb3, 0x54, 0x09, 0x94, 0xdf, 0xb9, 0xa0, + 0x97, 0xa0, 0xde, 0xe5, 0xd4, 0x3b, 0x68, 0x3b, 0x83, 0x9a, 0x92, 0x43, 0xb7, 0xda, 0xe2, 0xfe, + 0xd5, 0x40, 0xf8, 0x78, 0x07, 0x10, 0x82, 0x7b, 0xa2, 0x1e, 0x0b, 0x79, 0x3d, 0x41, 0xbf, 0x4b, + 0x30, 0x15, 0xd7, 0xc2, 0x42, 0x6a, 0x32, 0x7b, 0x4d, 0xe5, 0xf5, 0xbe, 0x4d, 0x2f, 0xd4, 0xba, + 0x3a, 0x32, 0xaa, 0x1e, 0x8b, 0x0b, 0xc8, 0xaf, 0xde, 0x95, 0x6e, 0xc5, 0x43, 0xcb, 0x19, 0x65, + 0x8f, 0xd8, 0xc9, 0x4a, 0x7f, 0x76, 0x21, 0xa3, 0xca, 0x19, 0x0b, 0xe8, 0x46, 0x06, 0x63, 0x54, + 0x62, 0xb7, 0x76, 0x9f, 0x9d, 0xe5, 0xa5, 0xe7, 0x67, 0x79, 0xe9, 0x9f, 0xb3, 0xbc, 0xf4, 0xe4, + 0x3c, 0x3f, 0xf0, 0xfc, 0x3c, 0x3f, 0xf0, 0xf7, 0x79, 0x7e, 0x60, 0x7f, 0xa3, 0x6e, 0xba, 0x8d, + 0x76, 0x4d, 0xd1, 0x59, 0x53, 0xe5, 0xdf, 0xbc, 0xa6, 0x73, 0xcb, 0xd2, 0x6a, 0x4e, 0x30, 0x50, + 0x0f, 0x8a, 0x9b, 0xea, 0x61, 0xe4, 0x1f, 0xf6, 0xa8, 0x45, 0x9c, 0xda, 0x30, 0xff, 0x37, 0x7d, + 0xfb, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0d, 0xee, 0x83, 0xbb, 0x0c, 0x10, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1167,7 +1167,7 @@ func NewQueryClient(cc grpc1.ClientConn) QueryClient { func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) { out := new(QueryParamsResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Query/Params", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Query/Params", in, out, opts...) if err != nil { return nil, err } @@ -1176,7 +1176,7 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts . func (c *queryClient) Validators(ctx context.Context, in *QueryGetValidatorsRequest, opts ...grpc.CallOption) (*QueryGetValidatorsResponse, error) { out := new(QueryGetValidatorsResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Query/Validators", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Query/Validators", in, out, opts...) if err != nil { return nil, err } @@ -1185,7 +1185,7 @@ func (c *queryClient) Validators(ctx context.Context, in *QueryGetValidatorsRequ func (c *queryClient) HostZone(ctx context.Context, in *QueryGetHostZoneRequest, opts ...grpc.CallOption) (*QueryGetHostZoneResponse, error) { out := new(QueryGetHostZoneResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Query/HostZone", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Query/HostZone", in, out, opts...) if err != nil { return nil, err } @@ -1194,7 +1194,7 @@ func (c *queryClient) HostZone(ctx context.Context, in *QueryGetHostZoneRequest, func (c *queryClient) HostZoneAll(ctx context.Context, in *QueryAllHostZoneRequest, opts ...grpc.CallOption) (*QueryAllHostZoneResponse, error) { out := new(QueryAllHostZoneResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Query/HostZoneAll", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Query/HostZoneAll", in, out, opts...) if err != nil { return nil, err } @@ -1203,7 +1203,7 @@ func (c *queryClient) HostZoneAll(ctx context.Context, in *QueryAllHostZoneReque func (c *queryClient) ModuleAddress(ctx context.Context, in *QueryModuleAddressRequest, opts ...grpc.CallOption) (*QueryModuleAddressResponse, error) { out := new(QueryModuleAddressResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Query/ModuleAddress", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Query/ModuleAddress", in, out, opts...) if err != nil { return nil, err } @@ -1212,7 +1212,7 @@ func (c *queryClient) ModuleAddress(ctx context.Context, in *QueryModuleAddressR func (c *queryClient) InterchainAccountFromAddress(ctx context.Context, in *QueryInterchainAccountFromAddressRequest, opts ...grpc.CallOption) (*QueryInterchainAccountFromAddressResponse, error) { out := new(QueryInterchainAccountFromAddressResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Query/InterchainAccountFromAddress", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Query/InterchainAccountFromAddress", in, out, opts...) if err != nil { return nil, err } @@ -1221,7 +1221,7 @@ func (c *queryClient) InterchainAccountFromAddress(ctx context.Context, in *Quer func (c *queryClient) EpochTracker(ctx context.Context, in *QueryGetEpochTrackerRequest, opts ...grpc.CallOption) (*QueryGetEpochTrackerResponse, error) { out := new(QueryGetEpochTrackerResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Query/EpochTracker", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Query/EpochTracker", in, out, opts...) if err != nil { return nil, err } @@ -1230,7 +1230,7 @@ func (c *queryClient) EpochTracker(ctx context.Context, in *QueryGetEpochTracker func (c *queryClient) EpochTrackerAll(ctx context.Context, in *QueryAllEpochTrackerRequest, opts ...grpc.CallOption) (*QueryAllEpochTrackerResponse, error) { out := new(QueryAllEpochTrackerResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Query/EpochTrackerAll", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Query/EpochTrackerAll", in, out, opts...) if err != nil { return nil, err } @@ -1239,7 +1239,7 @@ func (c *queryClient) EpochTrackerAll(ctx context.Context, in *QueryAllEpochTrac func (c *queryClient) NextPacketSequence(ctx context.Context, in *QueryGetNextPacketSequenceRequest, opts ...grpc.CallOption) (*QueryGetNextPacketSequenceResponse, error) { out := new(QueryGetNextPacketSequenceResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Query/NextPacketSequence", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Query/NextPacketSequence", in, out, opts...) if err != nil { return nil, err } @@ -1248,7 +1248,7 @@ func (c *queryClient) NextPacketSequence(ctx context.Context, in *QueryGetNextPa func (c *queryClient) AddressUnbondings(ctx context.Context, in *QueryAddressUnbondings, opts ...grpc.CallOption) (*QueryAddressUnbondingsResponse, error) { out := new(QueryAddressUnbondingsResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Query/AddressUnbondings", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Query/AddressUnbondings", in, out, opts...) if err != nil { return nil, err } @@ -1257,7 +1257,7 @@ func (c *queryClient) AddressUnbondings(ctx context.Context, in *QueryAddressUnb func (c *queryClient) AllTradeRoutes(ctx context.Context, in *QueryAllTradeRoutes, opts ...grpc.CallOption) (*QueryAllTradeRoutesResponse, error) { out := new(QueryAllTradeRoutesResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Query/AllTradeRoutes", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Query/AllTradeRoutes", in, out, opts...) if err != nil { return nil, err } @@ -1343,7 +1343,7 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Query/Params", + FullMethod: "/symphony.stakeibc.Query/Params", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).Params(ctx, req.(*QueryParamsRequest)) @@ -1361,7 +1361,7 @@ func _Query_Validators_Handler(srv interface{}, ctx context.Context, dec func(in } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Query/Validators", + FullMethod: "/symphony.stakeibc.Query/Validators", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).Validators(ctx, req.(*QueryGetValidatorsRequest)) @@ -1379,7 +1379,7 @@ func _Query_HostZone_Handler(srv interface{}, ctx context.Context, dec func(inte } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Query/HostZone", + FullMethod: "/symphony.stakeibc.Query/HostZone", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).HostZone(ctx, req.(*QueryGetHostZoneRequest)) @@ -1397,7 +1397,7 @@ func _Query_HostZoneAll_Handler(srv interface{}, ctx context.Context, dec func(i } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Query/HostZoneAll", + FullMethod: "/symphony.stakeibc.Query/HostZoneAll", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).HostZoneAll(ctx, req.(*QueryAllHostZoneRequest)) @@ -1415,7 +1415,7 @@ func _Query_ModuleAddress_Handler(srv interface{}, ctx context.Context, dec func } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Query/ModuleAddress", + FullMethod: "/symphony.stakeibc.Query/ModuleAddress", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).ModuleAddress(ctx, req.(*QueryModuleAddressRequest)) @@ -1433,7 +1433,7 @@ func _Query_InterchainAccountFromAddress_Handler(srv interface{}, ctx context.Co } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Query/InterchainAccountFromAddress", + FullMethod: "/symphony.stakeibc.Query/InterchainAccountFromAddress", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).InterchainAccountFromAddress(ctx, req.(*QueryInterchainAccountFromAddressRequest)) @@ -1451,7 +1451,7 @@ func _Query_EpochTracker_Handler(srv interface{}, ctx context.Context, dec func( } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Query/EpochTracker", + FullMethod: "/symphony.stakeibc.Query/EpochTracker", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).EpochTracker(ctx, req.(*QueryGetEpochTrackerRequest)) @@ -1469,7 +1469,7 @@ func _Query_EpochTrackerAll_Handler(srv interface{}, ctx context.Context, dec fu } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Query/EpochTrackerAll", + FullMethod: "/symphony.stakeibc.Query/EpochTrackerAll", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).EpochTrackerAll(ctx, req.(*QueryAllEpochTrackerRequest)) @@ -1487,7 +1487,7 @@ func _Query_NextPacketSequence_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Query/NextPacketSequence", + FullMethod: "/symphony.stakeibc.Query/NextPacketSequence", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).NextPacketSequence(ctx, req.(*QueryGetNextPacketSequenceRequest)) @@ -1505,7 +1505,7 @@ func _Query_AddressUnbondings_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Query/AddressUnbondings", + FullMethod: "/symphony.stakeibc.Query/AddressUnbondings", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).AddressUnbondings(ctx, req.(*QueryAddressUnbondings)) @@ -1523,7 +1523,7 @@ func _Query_AllTradeRoutes_Handler(srv interface{}, ctx context.Context, dec fun } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Query/AllTradeRoutes", + FullMethod: "/symphony.stakeibc.Query/AllTradeRoutes", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(QueryServer).AllTradeRoutes(ctx, req.(*QueryAllTradeRoutes)) @@ -1532,7 +1532,7 @@ func _Query_AllTradeRoutes_Handler(srv interface{}, ctx context.Context, dec fun } var _Query_serviceDesc = grpc.ServiceDesc{ - ServiceName: "stride.stakeibc.Query", + ServiceName: "symphony.stakeibc.Query", HandlerType: (*QueryServer)(nil), Methods: []grpc.MethodDesc{ { @@ -1581,7 +1581,7 @@ var _Query_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "stride/stakeibc/query.proto", + Metadata: "symphony/stakeibc/query.proto", } func (m *QueryInterchainAccountFromAddressRequest) Marshal() (dAtA []byte, err error) { diff --git a/x/stakeibc/types/query.pb.gw.go b/x/stakeibc/types/query.pb.gw.go index 09aeee14b9f..6c0620071c5 100644 --- a/x/stakeibc/types/query.pb.gw.go +++ b/x/stakeibc/types/query.pb.gw.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. -// source: stride/stakeibc/query.proto +// source: symphony/stakeibc/query.proto /* Package types is a reverse proxy. @@ -950,25 +950,25 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } var ( - pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"Stridelabs", "stride", "stakeibc", "params"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"symphony", "stakeibc", "v1beta1", "params"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Validators_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"Stride-Labs", "stride", "stakeibc", "validators", "chain_id"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Validators_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"symphony", "stakeibc", "v1beta1", "validators", "chain_id"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_HostZone_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"Stride-Labs", "stride", "stakeibc", "host_zone", "chain_id"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_HostZone_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"symphony", "stakeibc", "v1beta1", "host_zone", "chain_id"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_HostZoneAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"Stride-Labs", "stride", "stakeibc", "host_zone"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_HostZoneAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"symphony", "stakeibc", "v1beta1", "host_zone"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_ModuleAddress_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"Stride-Labs", "stride", "stakeibc", "module_address", "name"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_ModuleAddress_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"symphony", "stakeibc", "v1beta1", "module_address", "name"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_EpochTracker_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"Stride-Labs", "stride", "stakeibc", "epoch_tracker", "epoch_identifier"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_EpochTracker_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"symphony", "stakeibc", "v1beta1", "epoch_tracker", "epoch_identifier"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_EpochTrackerAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"Stride-Labs", "stride", "stakeibc", "epoch_tracker"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_EpochTrackerAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"symphony", "stakeibc", "v1beta1", "epoch_tracker"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_NextPacketSequence_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"Stride-Labs", "stride", "stakeibc", "next_packet_sequence", "channel_id", "port_id"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_NextPacketSequence_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"symphony", "stakeibc", "v1beta1", "next_packet_sequence", "channel_id", "port_id"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_AddressUnbondings_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"Stride-Labs", "stride", "stakeibc", "unbondings", "address"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_AddressUnbondings_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"symphony", "stakeibc", "v1beta1", "unbondings", "address"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_AllTradeRoutes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"Stride-Labs", "stride", "stakeibc", "trade_routes"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_AllTradeRoutes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"symphony", "stakeibc", "v1beta1", "trade_routes"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( diff --git a/x/stakeibc/types/trade_route.pb.go b/x/stakeibc/types/trade_route.pb.go index 739029f52fa..65a251c8df7 100644 --- a/x/stakeibc/types/trade_route.pb.go +++ b/x/stakeibc/types/trade_route.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/stakeibc/trade_route.proto +// source: symphony/stakeibc/trade_route.proto package types @@ -55,7 +55,7 @@ func (m *TradeConfig) Reset() { *m = TradeConfig{} } func (m *TradeConfig) String() string { return proto.CompactTextString(m) } func (*TradeConfig) ProtoMessage() {} func (*TradeConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_c252b142ecf88017, []int{0} + return fileDescriptor_739efe1f74f95f1e, []int{0} } func (m *TradeConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -149,7 +149,7 @@ func (m *TradeRoute) Reset() { *m = TradeRoute{} } func (m *TradeRoute) String() string { return proto.CompactTextString(m) } func (*TradeRoute) ProtoMessage() {} func (*TradeRoute) Descriptor() ([]byte, []int) { - return fileDescriptor_c252b142ecf88017, []int{1} + return fileDescriptor_739efe1f74f95f1e, []int{1} } func (m *TradeRoute) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -264,58 +264,60 @@ func (m *TradeRoute) GetTradeConfig() TradeConfig { } func init() { - proto.RegisterType((*TradeConfig)(nil), "stride.stakeibc.TradeConfig") - proto.RegisterType((*TradeRoute)(nil), "stride.stakeibc.TradeRoute") + proto.RegisterType((*TradeConfig)(nil), "symphony.stakeibc.TradeConfig") + proto.RegisterType((*TradeRoute)(nil), "symphony.stakeibc.TradeRoute") } -func init() { proto.RegisterFile("stride/stakeibc/trade_route.proto", fileDescriptor_c252b142ecf88017) } +func init() { + proto.RegisterFile("symphony/stakeibc/trade_route.proto", fileDescriptor_739efe1f74f95f1e) +} -var fileDescriptor_c252b142ecf88017 = []byte{ - // 701 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0xcf, 0x4e, 0xdb, 0x4a, - 0x14, 0xc6, 0x63, 0xe0, 0x86, 0x9b, 0x49, 0x72, 0xd1, 0x35, 0xff, 0x4c, 0xb8, 0x37, 0x50, 0x56, - 0x6c, 0x88, 0x55, 0x8a, 0x10, 0x42, 0xdd, 0x04, 0xd2, 0x96, 0x48, 0xa9, 0x8a, 0x4c, 0xba, 0x61, - 0x33, 0x9a, 0xd8, 0x43, 0x62, 0x11, 0xfb, 0x58, 0x9e, 0x49, 0x13, 0xfa, 0x14, 0x7d, 0x93, 0x6e, - 0xfa, 0x10, 0x2c, 0xba, 0x40, 0x5d, 0x55, 0x5d, 0xa0, 0x0a, 0x5e, 0xa4, 0x9a, 0x33, 0x36, 0x38, - 0xa4, 0x8b, 0xa8, 0x3b, 0x7b, 0xce, 0xf9, 0x7d, 0xe7, 0xcc, 0x7c, 0x33, 0x87, 0x3c, 0x13, 0x32, - 0xf6, 0x3d, 0x6e, 0x0b, 0xc9, 0x2e, 0xb9, 0xdf, 0x71, 0x6d, 0x19, 0x33, 0x8f, 0xd3, 0x18, 0x06, - 0x92, 0xd7, 0xa2, 0x18, 0x24, 0x98, 0x0b, 0x3a, 0xa5, 0x96, 0xa6, 0x54, 0xd6, 0x5c, 0x10, 0x01, - 0x08, 0x8a, 0x61, 0x5b, 0xff, 0xe8, 0xdc, 0xca, 0x52, 0x17, 0xba, 0xa0, 0xd7, 0xd5, 0x57, 0xb2, - 0x3a, 0x51, 0xc4, 0x77, 0x19, 0x65, 0xae, 0x0b, 0x83, 0x50, 0xea, 0x94, 0xad, 0xcf, 0xb3, 0xa4, - 0xd8, 0x56, 0xa5, 0x8f, 0x21, 0xbc, 0xf0, 0xbb, 0xe6, 0x2a, 0x99, 0x8f, 0x00, 0xfa, 0xd4, 0xf7, - 0x2c, 0x63, 0xd3, 0xd8, 0x9e, 0x73, 0xf2, 0xea, 0xb7, 0xe9, 0x99, 0xa7, 0x84, 0x88, 0x21, 0x8b, - 0x68, 0x14, 0xfb, 0x2e, 0xb7, 0x66, 0x36, 0x8d, 0xed, 0xc2, 0xd1, 0xf3, 0xeb, 0xdb, 0x8d, 0xdc, - 0x8f, 0xdb, 0x8d, 0x75, 0xdd, 0x8b, 0xf0, 0x2e, 0x6b, 0x3e, 0xd8, 0x01, 0x93, 0xbd, 0x5a, 0x8b, - 0x77, 0x99, 0x7b, 0xd5, 0xe0, 0xee, 0xb7, 0x2f, 0x3b, 0x24, 0x69, 0xb5, 0xc1, 0x5d, 0xa7, 0xa0, - 0x44, 0x4e, 0x95, 0x86, 0xb9, 0x47, 0x56, 0x50, 0x8c, 0x0e, 0x22, 0x8f, 0x49, 0x4e, 0xa5, 0x1f, - 0x70, 0x21, 0x59, 0x10, 0x59, 0xb3, 0x58, 0x79, 0x09, 0xa3, 0xef, 0x31, 0xd8, 0x4e, 0x63, 0x66, - 0x40, 0x2a, 0x01, 0x1b, 0x51, 0xd6, 0xef, 0xc3, 0x90, 0x7b, 0x14, 0x7b, 0xea, 0x83, 0x10, 0x34, - 0x66, 0x92, 0x5b, 0x73, 0x7f, 0xda, 0xd7, 0x4a, 0xc0, 0x46, 0x75, 0xad, 0x79, 0x36, 0x64, 0x51, - 0x0b, 0x84, 0x70, 0x98, 0xe4, 0xe6, 0x2b, 0xb2, 0x10, 0xf8, 0xa1, 0x2e, 0xc3, 0x02, 0x75, 0x70, - 0xd6, 0x5f, 0x58, 0xe3, 0xff, 0xa4, 0xc6, 0xf2, 0x64, 0x8d, 0x66, 0x28, 0x9d, 0x72, 0xe0, 0x87, - 0x4a, 0xa8, 0x8e, 0x0c, 0xca, 0xb0, 0xd1, 0x98, 0x4c, 0x7e, 0x3a, 0x19, 0x36, 0x7a, 0x94, 0x39, - 0x9c, 0xb1, 0x8c, 0xad, 0xaf, 0x79, 0x42, 0xd0, 0x31, 0x47, 0xdd, 0x15, 0xf3, 0x80, 0xac, 0xc5, - 0x7c, 0xc8, 0x62, 0x8f, 0x7a, 0x3c, 0x84, 0x80, 0x42, 0x48, 0x7b, 0x20, 0x24, 0xfd, 0x08, 0x21, - 0x47, 0x0b, 0x0b, 0xce, 0xb2, 0x4e, 0x68, 0xa8, 0xf8, 0xbb, 0xf0, 0x04, 0x84, 0x3c, 0x87, 0x90, - 0x9b, 0x2f, 0xc9, 0xfa, 0x53, 0x32, 0xf9, 0x47, 0x16, 0x2d, 0x76, 0x56, 0xc7, 0x58, 0x07, 0x7f, - 0x90, 0x3e, 0x24, 0x95, 0xa7, 0xb4, 0xbe, 0xc2, 0x08, 0xcf, 0x22, 0xbc, 0x32, 0x06, 0x63, 0xd3, - 0xc8, 0xee, 0x13, 0x0b, 0x7b, 0xfc, 0x1d, 0x89, 0x0e, 0x3a, 0x4b, 0x2a, 0x3e, 0xc1, 0xed, 0x91, - 0xd5, 0x71, 0xee, 0x71, 0xa7, 0x68, 0x8a, 0xb3, 0x98, 0xc1, 0x1e, 0xf6, 0xd9, 0x20, 0x25, 0xcc, - 0x4b, 0x2e, 0x3e, 0x1e, 0x7c, 0x71, 0x77, 0xbd, 0xf6, 0xe4, 0x79, 0xd5, 0x9a, 0xc7, 0xf5, 0xba, - 0x4e, 0x39, 0x9a, 0x53, 0xae, 0x38, 0x45, 0x85, 0x25, 0x4b, 0xe6, 0x09, 0xf9, 0x27, 0xd9, 0x6f, - 0xaa, 0x33, 0x3f, 0xad, 0x4e, 0x59, 0x83, 0xa9, 0xd2, 0x6b, 0x52, 0xd6, 0xfb, 0x4d, 0x85, 0xfe, - 0x9e, 0x56, 0xa8, 0x84, 0x5c, 0xaa, 0x73, 0x40, 0xd6, 0x70, 0x5f, 0x12, 0x52, 0xdf, 0xdc, 0x1e, - 0x0b, 0x43, 0x8e, 0x8f, 0xb7, 0xa0, 0x9d, 0x57, 0x09, 0x6d, 0xd0, 0xb6, 0x1d, 0xeb, 0x68, 0xd3, - 0xcb, 0x78, 0x27, 0x21, 0x39, 0xfb, 0x0c, 0x4a, 0xb2, 0xde, 0xb5, 0x41, 0x4f, 0x87, 0x07, 0x76, - 0x9f, 0x58, 0x9a, 0x90, 0xa0, 0x8f, 0x3f, 0x43, 0x16, 0xb5, 0x77, 0x18, 0x6f, 0x83, 0x32, 0xe0, - 0x91, 0x7b, 0x4b, 0x16, 0xd5, 0x43, 0x92, 0x31, 0x0b, 0xc5, 0x05, 0x8f, 0xd3, 0x57, 0x50, 0x9e, - 0xe6, 0x15, 0xfc, 0x1b, 0xf8, 0xea, 0x16, 0x20, 0x98, 0x3c, 0xa8, 0x37, 0xa4, 0x94, 0x34, 0x8e, - 0x73, 0xcb, 0x2a, 0xe1, 0x19, 0xfe, 0x37, 0x71, 0x86, 0x99, 0xd9, 0x76, 0x94, 0x57, 0x55, 0x2c, - 0xc3, 0x29, 0xca, 0xcc, 0x62, 0xeb, 0xfa, 0xae, 0x6a, 0xdc, 0xdc, 0x55, 0x8d, 0x9f, 0x77, 0x55, - 0xe3, 0xd3, 0x7d, 0x35, 0x77, 0x73, 0x5f, 0xcd, 0x7d, 0xbf, 0xaf, 0xe6, 0xce, 0x77, 0xbb, 0xbe, - 0xec, 0x0d, 0x3a, 0x35, 0x17, 0x02, 0xfb, 0x0c, 0x65, 0x77, 0x5a, 0xac, 0x23, 0xec, 0x64, 0xa8, - 0x7e, 0xd8, 0x3d, 0xb0, 0x47, 0x99, 0xf9, 0x7d, 0x15, 0x71, 0xd1, 0xc9, 0xe3, 0x54, 0x7d, 0xf1, - 0x2b, 0x00, 0x00, 0xff, 0xff, 0xcc, 0xb2, 0xa0, 0xf1, 0xdf, 0x05, 0x00, 0x00, +var fileDescriptor_739efe1f74f95f1e = []byte{ + // 702 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x94, 0xcf, 0x4e, 0xdb, 0x4e, + 0x10, 0xc7, 0x63, 0xe0, 0x17, 0x7e, 0xd9, 0x24, 0xad, 0x30, 0xff, 0x4c, 0x10, 0x01, 0xd1, 0x0b, + 0x17, 0x62, 0x95, 0x22, 0x8a, 0x50, 0x2f, 0x01, 0x5a, 0x91, 0x8a, 0xb6, 0xc8, 0x4d, 0x2f, 0x5c, + 0xac, 0x8d, 0xbd, 0x24, 0x16, 0xf1, 0x8e, 0xe5, 0xdd, 0x34, 0x49, 0x9f, 0xa2, 0x6f, 0xd2, 0x4b, + 0x1f, 0x82, 0x23, 0xaa, 0x7a, 0xa8, 0x7a, 0x40, 0x15, 0xbc, 0x48, 0xb5, 0xb3, 0x36, 0x38, 0xc0, + 0x21, 0xea, 0xcd, 0xeb, 0x99, 0xcf, 0x77, 0x66, 0xf7, 0xbb, 0xb3, 0xe4, 0x99, 0x18, 0x86, 0x51, + 0x07, 0xf8, 0xd0, 0x16, 0x92, 0x9e, 0xb3, 0xa0, 0xe5, 0xd9, 0x32, 0xa6, 0x3e, 0x73, 0x63, 0xe8, + 0x49, 0x56, 0x8b, 0x62, 0x90, 0x60, 0xce, 0xa4, 0x49, 0xb5, 0x34, 0xa9, 0xb2, 0xe4, 0x81, 0x08, + 0x41, 0xb8, 0x98, 0x60, 0xeb, 0x85, 0xce, 0xae, 0xcc, 0xb5, 0xa1, 0x0d, 0xfa, 0xbf, 0xfa, 0x4a, + 0xfe, 0x3e, 0x52, 0x28, 0xf0, 0xa8, 0x4b, 0x3d, 0x0f, 0x7a, 0x5c, 0xea, 0xa4, 0xf5, 0x6f, 0x93, + 0xa4, 0xd8, 0x54, 0xe5, 0x0f, 0x80, 0x9f, 0x05, 0x6d, 0x73, 0x91, 0x4c, 0x47, 0x00, 0x5d, 0x37, + 0xf0, 0x2d, 0x63, 0xcd, 0xd8, 0x98, 0x72, 0xf2, 0x6a, 0xd9, 0xf0, 0xcd, 0x13, 0x42, 0x44, 0x9f, + 0x46, 0x6e, 0x14, 0x07, 0x1e, 0xb3, 0x26, 0xd6, 0x8c, 0x8d, 0xc2, 0xfe, 0xf3, 0x8b, 0xab, 0xd5, + 0xdc, 0xef, 0xab, 0xd5, 0x65, 0xdd, 0x8d, 0xf0, 0xcf, 0x6b, 0x01, 0xd8, 0x21, 0x95, 0x9d, 0xda, + 0x31, 0x6b, 0x53, 0x6f, 0x78, 0xc8, 0xbc, 0x1f, 0xdf, 0x37, 0x49, 0xd2, 0xec, 0x21, 0xf3, 0x9c, + 0x82, 0x12, 0x39, 0x51, 0x1a, 0xe6, 0x36, 0x59, 0x40, 0x31, 0xb7, 0x17, 0xf9, 0x54, 0x32, 0x57, + 0x06, 0x21, 0x13, 0x92, 0x86, 0x91, 0x35, 0x89, 0x95, 0xe7, 0x30, 0xfa, 0x09, 0x83, 0xcd, 0x34, + 0x66, 0x86, 0xa4, 0x12, 0xd2, 0x81, 0x4b, 0xbb, 0x5d, 0xe8, 0x33, 0xdf, 0xc5, 0x9e, 0xba, 0x20, + 0x84, 0x1b, 0x53, 0xc9, 0xac, 0xa9, 0x7f, 0xed, 0x6b, 0x21, 0xa4, 0x83, 0xba, 0xd6, 0xfc, 0xd8, + 0xa7, 0xd1, 0x31, 0x08, 0xe1, 0x50, 0xc9, 0xcc, 0xd7, 0xe4, 0x69, 0x18, 0x70, 0x5d, 0x86, 0x86, + 0xea, 0xe0, 0xac, 0xff, 0xb0, 0xc6, 0x4a, 0x52, 0x63, 0xfe, 0x61, 0x8d, 0x06, 0x97, 0x4e, 0x39, + 0x0c, 0xb8, 0x12, 0xaa, 0x23, 0x83, 0x32, 0x74, 0x30, 0x22, 0x93, 0x1f, 0x4f, 0x86, 0x0e, 0xee, + 0x64, 0xf6, 0x26, 0x2c, 0x63, 0xfd, 0x67, 0x9e, 0x10, 0x74, 0xcc, 0x51, 0xf7, 0xc5, 0xdc, 0x25, + 0x4b, 0x31, 0xeb, 0xd3, 0xd8, 0x77, 0x7d, 0xc6, 0x21, 0x74, 0x81, 0xbb, 0x1d, 0x10, 0xd2, 0xfd, + 0x02, 0x9c, 0xa1, 0x85, 0x05, 0x67, 0x5e, 0x27, 0x1c, 0xaa, 0xf8, 0x07, 0x7e, 0x04, 0x42, 0x9e, + 0x02, 0x67, 0xe6, 0x2b, 0xb2, 0x7c, 0x9f, 0x4c, 0xd6, 0xc8, 0xa2, 0xc5, 0xce, 0xe2, 0x08, 0xeb, + 0xe0, 0x02, 0xe9, 0x3d, 0x52, 0xb9, 0x4f, 0xeb, 0x6b, 0x8c, 0xf0, 0x24, 0xc2, 0x0b, 0x23, 0x30, + 0x36, 0x8d, 0xec, 0x0e, 0xb1, 0xb0, 0xc7, 0xc7, 0x48, 0x74, 0xd0, 0x99, 0x53, 0xf1, 0x07, 0xdc, + 0x36, 0x59, 0x1c, 0xe5, 0xee, 0x76, 0x8a, 0xa6, 0x38, 0xb3, 0x19, 0xec, 0x76, 0x9f, 0x6f, 0x48, + 0x09, 0xf3, 0x92, 0x8b, 0x8f, 0x07, 0x5f, 0xdc, 0x5a, 0xa9, 0x3d, 0x18, 0xb1, 0x5a, 0xe3, 0xa0, + 0x5e, 0xd7, 0x49, 0xfb, 0x53, 0xca, 0x17, 0xa7, 0xa8, 0xc0, 0xe4, 0x97, 0xf9, 0x96, 0x3c, 0x49, + 0x76, 0x9c, 0x2a, 0x4d, 0x8f, 0xaf, 0x54, 0xd6, 0x68, 0xaa, 0x75, 0x44, 0xca, 0x7a, 0xcf, 0xa9, + 0xd4, 0xff, 0xe3, 0x4b, 0x95, 0x90, 0x4c, 0x95, 0x76, 0xc9, 0x12, 0xee, 0x4e, 0x42, 0xea, 0x9e, + 0xd7, 0xa1, 0x9c, 0x33, 0x1c, 0xe1, 0x82, 0xf6, 0x5f, 0x25, 0x34, 0x41, 0x9b, 0x77, 0xa0, 0xa3, + 0x0d, 0x3f, 0xe3, 0xa0, 0x84, 0xc4, 0x81, 0x0c, 0x4a, 0xb2, 0x0e, 0x36, 0x41, 0xbf, 0x11, 0xb7, + 0xec, 0x0e, 0xb1, 0x34, 0x21, 0x41, 0x9b, 0x90, 0x21, 0x8b, 0xda, 0x41, 0x8c, 0x37, 0x41, 0xd9, + 0x70, 0xc7, 0xbd, 0x23, 0xb3, 0x6a, 0x9c, 0x64, 0x4c, 0xb9, 0x38, 0x63, 0x71, 0x3a, 0x0b, 0xe5, + 0x71, 0x66, 0x61, 0x26, 0x0c, 0xd4, 0x5d, 0x40, 0x30, 0x19, 0xab, 0x06, 0x29, 0x25, 0x8d, 0xe3, + 0xeb, 0x65, 0x95, 0xf0, 0x14, 0xab, 0x8f, 0x9c, 0x62, 0xe6, 0x8d, 0xdb, 0xcf, 0xab, 0x3a, 0x96, + 0xe1, 0x14, 0x65, 0xe6, 0xe7, 0xfb, 0x8b, 0xeb, 0xaa, 0x71, 0x79, 0x5d, 0x35, 0xfe, 0x5c, 0x57, + 0x8d, 0xaf, 0x37, 0xd5, 0xdc, 0xe5, 0x4d, 0x35, 0xf7, 0xeb, 0xa6, 0x9a, 0x3b, 0xdd, 0x6e, 0x07, + 0xb2, 0xd3, 0x6b, 0xd5, 0x3c, 0x08, 0x6d, 0x6c, 0x2c, 0x10, 0x9b, 0x5d, 0xda, 0x12, 0xe9, 0xc2, + 0xfe, 0xbc, 0xf5, 0xd2, 0x1e, 0x64, 0x5e, 0xf3, 0x61, 0xc4, 0x44, 0x2b, 0x8f, 0xef, 0xeb, 0x8b, + 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0xa4, 0xf6, 0x87, 0x1d, 0xef, 0x05, 0x00, 0x00, } func (m *TradeConfig) Marshal() (dAtA []byte, err error) { diff --git a/x/stakeibc/types/tx.pb.go b/x/stakeibc/types/tx.pb.go index bb1149c81f7..d80c616cf3d 100644 --- a/x/stakeibc/types/tx.pb.go +++ b/x/stakeibc/types/tx.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/stakeibc/tx.proto +// source: symphony/stakeibc/tx.proto package types @@ -57,7 +57,7 @@ func (x AuthzPermissionChange) String() string { } func (AuthzPermissionChange) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{0} + return fileDescriptor_c5b8d3ef903e18f4, []int{0} } type MsgUpdateInnerRedemptionRateBounds struct { @@ -71,7 +71,7 @@ func (m *MsgUpdateInnerRedemptionRateBounds) Reset() { *m = MsgUpdateInn func (m *MsgUpdateInnerRedemptionRateBounds) String() string { return proto.CompactTextString(m) } func (*MsgUpdateInnerRedemptionRateBounds) ProtoMessage() {} func (*MsgUpdateInnerRedemptionRateBounds) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{0} + return fileDescriptor_c5b8d3ef903e18f4, []int{0} } func (m *MsgUpdateInnerRedemptionRateBounds) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -125,7 +125,7 @@ func (m *MsgUpdateInnerRedemptionRateBoundsResponse) String() string { } func (*MsgUpdateInnerRedemptionRateBoundsResponse) ProtoMessage() {} func (*MsgUpdateInnerRedemptionRateBoundsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{1} + return fileDescriptor_c5b8d3ef903e18f4, []int{1} } func (m *MsgUpdateInnerRedemptionRateBoundsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -164,7 +164,7 @@ func (m *MsgLiquidStake) Reset() { *m = MsgLiquidStake{} } func (m *MsgLiquidStake) String() string { return proto.CompactTextString(m) } func (*MsgLiquidStake) ProtoMessage() {} func (*MsgLiquidStake) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{2} + return fileDescriptor_c5b8d3ef903e18f4, []int{2} } func (m *MsgLiquidStake) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -215,7 +215,7 @@ func (m *MsgLiquidStakeResponse) Reset() { *m = MsgLiquidStakeResponse{} func (m *MsgLiquidStakeResponse) String() string { return proto.CompactTextString(m) } func (*MsgLiquidStakeResponse) ProtoMessage() {} func (*MsgLiquidStakeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{3} + return fileDescriptor_c5b8d3ef903e18f4, []int{3} } func (m *MsgLiquidStakeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -261,7 +261,7 @@ func (m *MsgLSMLiquidStake) Reset() { *m = MsgLSMLiquidStake{} } func (m *MsgLSMLiquidStake) String() string { return proto.CompactTextString(m) } func (*MsgLSMLiquidStake) ProtoMessage() {} func (*MsgLSMLiquidStake) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{4} + return fileDescriptor_c5b8d3ef903e18f4, []int{4} } func (m *MsgLSMLiquidStake) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -312,7 +312,7 @@ func (m *MsgLSMLiquidStakeResponse) Reset() { *m = MsgLSMLiquidStakeResp func (m *MsgLSMLiquidStakeResponse) String() string { return proto.CompactTextString(m) } func (*MsgLSMLiquidStakeResponse) ProtoMessage() {} func (*MsgLSMLiquidStakeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{5} + return fileDescriptor_c5b8d3ef903e18f4, []int{5} } func (m *MsgLSMLiquidStakeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -359,7 +359,7 @@ func (m *MsgClearBalance) Reset() { *m = MsgClearBalance{} } func (m *MsgClearBalance) String() string { return proto.CompactTextString(m) } func (*MsgClearBalance) ProtoMessage() {} func (*MsgClearBalance) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{6} + return fileDescriptor_c5b8d3ef903e18f4, []int{6} } func (m *MsgClearBalance) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -416,7 +416,7 @@ func (m *MsgClearBalanceResponse) Reset() { *m = MsgClearBalanceResponse func (m *MsgClearBalanceResponse) String() string { return proto.CompactTextString(m) } func (*MsgClearBalanceResponse) ProtoMessage() {} func (*MsgClearBalanceResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{7} + return fileDescriptor_c5b8d3ef903e18f4, []int{7} } func (m *MsgClearBalanceResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -456,7 +456,7 @@ func (m *MsgRedeemStake) Reset() { *m = MsgRedeemStake{} } func (m *MsgRedeemStake) String() string { return proto.CompactTextString(m) } func (*MsgRedeemStake) ProtoMessage() {} func (*MsgRedeemStake) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{8} + return fileDescriptor_c5b8d3ef903e18f4, []int{8} } func (m *MsgRedeemStake) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -513,7 +513,7 @@ func (m *MsgRedeemStakeResponse) Reset() { *m = MsgRedeemStakeResponse{} func (m *MsgRedeemStakeResponse) String() string { return proto.CompactTextString(m) } func (*MsgRedeemStakeResponse) ProtoMessage() {} func (*MsgRedeemStakeResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{9} + return fileDescriptor_c5b8d3ef903e18f4, []int{9} } func (m *MsgRedeemStakeResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -562,7 +562,7 @@ func (m *MsgRegisterHostZone) Reset() { *m = MsgRegisterHostZone{} } func (m *MsgRegisterHostZone) String() string { return proto.CompactTextString(m) } func (*MsgRegisterHostZone) ProtoMessage() {} func (*MsgRegisterHostZone) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{10} + return fileDescriptor_c5b8d3ef903e18f4, []int{10} } func (m *MsgRegisterHostZone) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -598,7 +598,7 @@ func (m *MsgRegisterHostZoneResponse) Reset() { *m = MsgRegisterHostZone func (m *MsgRegisterHostZoneResponse) String() string { return proto.CompactTextString(m) } func (*MsgRegisterHostZoneResponse) ProtoMessage() {} func (*MsgRegisterHostZoneResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{11} + return fileDescriptor_c5b8d3ef903e18f4, []int{11} } func (m *MsgRegisterHostZoneResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -639,7 +639,7 @@ func (m *MsgClaimUndelegatedTokens) Reset() { *m = MsgClaimUndelegatedTo func (m *MsgClaimUndelegatedTokens) String() string { return proto.CompactTextString(m) } func (*MsgClaimUndelegatedTokens) ProtoMessage() {} func (*MsgClaimUndelegatedTokens) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{12} + return fileDescriptor_c5b8d3ef903e18f4, []int{12} } func (m *MsgClaimUndelegatedTokens) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -703,7 +703,7 @@ func (m *MsgClaimUndelegatedTokensResponse) Reset() { *m = MsgClaimUndel func (m *MsgClaimUndelegatedTokensResponse) String() string { return proto.CompactTextString(m) } func (*MsgClaimUndelegatedTokensResponse) ProtoMessage() {} func (*MsgClaimUndelegatedTokensResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{13} + return fileDescriptor_c5b8d3ef903e18f4, []int{13} } func (m *MsgClaimUndelegatedTokensResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -742,7 +742,7 @@ func (m *MsgRebalanceValidators) Reset() { *m = MsgRebalanceValidators{} func (m *MsgRebalanceValidators) String() string { return proto.CompactTextString(m) } func (*MsgRebalanceValidators) ProtoMessage() {} func (*MsgRebalanceValidators) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{14} + return fileDescriptor_c5b8d3ef903e18f4, []int{14} } func (m *MsgRebalanceValidators) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -799,7 +799,7 @@ func (m *MsgRebalanceValidatorsResponse) Reset() { *m = MsgRebalanceVali func (m *MsgRebalanceValidatorsResponse) String() string { return proto.CompactTextString(m) } func (*MsgRebalanceValidatorsResponse) ProtoMessage() {} func (*MsgRebalanceValidatorsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{15} + return fileDescriptor_c5b8d3ef903e18f4, []int{15} } func (m *MsgRebalanceValidatorsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -838,7 +838,7 @@ func (m *MsgAddValidators) Reset() { *m = MsgAddValidators{} } func (m *MsgAddValidators) String() string { return proto.CompactTextString(m) } func (*MsgAddValidators) ProtoMessage() {} func (*MsgAddValidators) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{16} + return fileDescriptor_c5b8d3ef903e18f4, []int{16} } func (m *MsgAddValidators) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -895,7 +895,7 @@ func (m *MsgAddValidatorsResponse) Reset() { *m = MsgAddValidatorsRespon func (m *MsgAddValidatorsResponse) String() string { return proto.CompactTextString(m) } func (*MsgAddValidatorsResponse) ProtoMessage() {} func (*MsgAddValidatorsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{17} + return fileDescriptor_c5b8d3ef903e18f4, []int{17} } func (m *MsgAddValidatorsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -933,7 +933,7 @@ func (m *ValidatorWeight) Reset() { *m = ValidatorWeight{} } func (m *ValidatorWeight) String() string { return proto.CompactTextString(m) } func (*ValidatorWeight) ProtoMessage() {} func (*ValidatorWeight) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{18} + return fileDescriptor_c5b8d3ef903e18f4, []int{18} } func (m *ValidatorWeight) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -986,7 +986,7 @@ func (m *MsgChangeValidatorWeights) Reset() { *m = MsgChangeValidatorWei func (m *MsgChangeValidatorWeights) String() string { return proto.CompactTextString(m) } func (*MsgChangeValidatorWeights) ProtoMessage() {} func (*MsgChangeValidatorWeights) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{19} + return fileDescriptor_c5b8d3ef903e18f4, []int{19} } func (m *MsgChangeValidatorWeights) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1043,7 +1043,7 @@ func (m *MsgChangeValidatorWeightsResponse) Reset() { *m = MsgChangeVali func (m *MsgChangeValidatorWeightsResponse) String() string { return proto.CompactTextString(m) } func (*MsgChangeValidatorWeightsResponse) ProtoMessage() {} func (*MsgChangeValidatorWeightsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{20} + return fileDescriptor_c5b8d3ef903e18f4, []int{20} } func (m *MsgChangeValidatorWeightsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1082,7 +1082,7 @@ func (m *MsgDeleteValidator) Reset() { *m = MsgDeleteValidator{} } func (m *MsgDeleteValidator) String() string { return proto.CompactTextString(m) } func (*MsgDeleteValidator) ProtoMessage() {} func (*MsgDeleteValidator) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{21} + return fileDescriptor_c5b8d3ef903e18f4, []int{21} } func (m *MsgDeleteValidator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1139,7 +1139,7 @@ func (m *MsgDeleteValidatorResponse) Reset() { *m = MsgDeleteValidatorRe func (m *MsgDeleteValidatorResponse) String() string { return proto.CompactTextString(m) } func (*MsgDeleteValidatorResponse) ProtoMessage() {} func (*MsgDeleteValidatorResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{22} + return fileDescriptor_c5b8d3ef903e18f4, []int{22} } func (m *MsgDeleteValidatorResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1179,7 +1179,7 @@ func (m *MsgRestoreInterchainAccount) Reset() { *m = MsgRestoreInterchai func (m *MsgRestoreInterchainAccount) String() string { return proto.CompactTextString(m) } func (*MsgRestoreInterchainAccount) ProtoMessage() {} func (*MsgRestoreInterchainAccount) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{23} + return fileDescriptor_c5b8d3ef903e18f4, []int{23} } func (m *MsgRestoreInterchainAccount) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1243,7 +1243,7 @@ func (m *MsgRestoreInterchainAccountResponse) Reset() { *m = MsgRestoreI func (m *MsgRestoreInterchainAccountResponse) String() string { return proto.CompactTextString(m) } func (*MsgRestoreInterchainAccountResponse) ProtoMessage() {} func (*MsgRestoreInterchainAccountResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{24} + return fileDescriptor_c5b8d3ef903e18f4, []int{24} } func (m *MsgRestoreInterchainAccountResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1281,7 +1281,7 @@ func (m *MsgCloseDelegationChannel) Reset() { *m = MsgCloseDelegationCha func (m *MsgCloseDelegationChannel) String() string { return proto.CompactTextString(m) } func (*MsgCloseDelegationChannel) ProtoMessage() {} func (*MsgCloseDelegationChannel) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{25} + return fileDescriptor_c5b8d3ef903e18f4, []int{25} } func (m *MsgCloseDelegationChannel) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1331,7 +1331,7 @@ func (m *MsgCloseDelegationChannelResponse) Reset() { *m = MsgCloseDeleg func (m *MsgCloseDelegationChannelResponse) String() string { return proto.CompactTextString(m) } func (*MsgCloseDelegationChannelResponse) ProtoMessage() {} func (*MsgCloseDelegationChannelResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{26} + return fileDescriptor_c5b8d3ef903e18f4, []int{26} } func (m *MsgCloseDelegationChannelResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1370,7 +1370,7 @@ func (m *MsgUpdateValidatorSharesExchRate) Reset() { *m = MsgUpdateValid func (m *MsgUpdateValidatorSharesExchRate) String() string { return proto.CompactTextString(m) } func (*MsgUpdateValidatorSharesExchRate) ProtoMessage() {} func (*MsgUpdateValidatorSharesExchRate) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{27} + return fileDescriptor_c5b8d3ef903e18f4, []int{27} } func (m *MsgUpdateValidatorSharesExchRate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1429,7 +1429,7 @@ func (m *MsgUpdateValidatorSharesExchRateResponse) Reset() { func (m *MsgUpdateValidatorSharesExchRateResponse) String() string { return proto.CompactTextString(m) } func (*MsgUpdateValidatorSharesExchRateResponse) ProtoMessage() {} func (*MsgUpdateValidatorSharesExchRateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{28} + return fileDescriptor_c5b8d3ef903e18f4, []int{28} } func (m *MsgUpdateValidatorSharesExchRateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1468,7 +1468,7 @@ func (m *MsgCalibrateDelegation) Reset() { *m = MsgCalibrateDelegation{} func (m *MsgCalibrateDelegation) String() string { return proto.CompactTextString(m) } func (*MsgCalibrateDelegation) ProtoMessage() {} func (*MsgCalibrateDelegation) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{29} + return fileDescriptor_c5b8d3ef903e18f4, []int{29} } func (m *MsgCalibrateDelegation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1525,7 +1525,7 @@ func (m *MsgCalibrateDelegationResponse) Reset() { *m = MsgCalibrateDele func (m *MsgCalibrateDelegationResponse) String() string { return proto.CompactTextString(m) } func (*MsgCalibrateDelegationResponse) ProtoMessage() {} func (*MsgCalibrateDelegationResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{30} + return fileDescriptor_c5b8d3ef903e18f4, []int{30} } func (m *MsgCalibrateDelegationResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1563,7 +1563,7 @@ func (m *MsgResumeHostZone) Reset() { *m = MsgResumeHostZone{} } func (m *MsgResumeHostZone) String() string { return proto.CompactTextString(m) } func (*MsgResumeHostZone) ProtoMessage() {} func (*MsgResumeHostZone) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{31} + return fileDescriptor_c5b8d3ef903e18f4, []int{31} } func (m *MsgResumeHostZone) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1613,7 +1613,7 @@ func (m *MsgResumeHostZoneResponse) Reset() { *m = MsgResumeHostZoneResp func (m *MsgResumeHostZoneResponse) String() string { return proto.CompactTextString(m) } func (*MsgResumeHostZoneResponse) ProtoMessage() {} func (*MsgResumeHostZoneResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{32} + return fileDescriptor_c5b8d3ef903e18f4, []int{32} } func (m *MsgResumeHostZoneResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1696,7 +1696,7 @@ func (m *MsgCreateTradeRoute) Reset() { *m = MsgCreateTradeRoute{} } func (m *MsgCreateTradeRoute) String() string { return proto.CompactTextString(m) } func (*MsgCreateTradeRoute) ProtoMessage() {} func (*MsgCreateTradeRoute) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{33} + return fileDescriptor_c5b8d3ef903e18f4, []int{33} } func (m *MsgCreateTradeRoute) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1832,7 +1832,7 @@ func (m *MsgCreateTradeRouteResponse) Reset() { *m = MsgCreateTradeRoute func (m *MsgCreateTradeRouteResponse) String() string { return proto.CompactTextString(m) } func (*MsgCreateTradeRouteResponse) ProtoMessage() {} func (*MsgCreateTradeRouteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{34} + return fileDescriptor_c5b8d3ef903e18f4, []int{34} } func (m *MsgCreateTradeRouteResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1876,7 +1876,7 @@ func (m *MsgDeleteTradeRoute) Reset() { *m = MsgDeleteTradeRoute{} } func (m *MsgDeleteTradeRoute) String() string { return proto.CompactTextString(m) } func (*MsgDeleteTradeRoute) ProtoMessage() {} func (*MsgDeleteTradeRoute) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{35} + return fileDescriptor_c5b8d3ef903e18f4, []int{35} } func (m *MsgDeleteTradeRoute) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1933,7 +1933,7 @@ func (m *MsgDeleteTradeRouteResponse) Reset() { *m = MsgDeleteTradeRoute func (m *MsgDeleteTradeRouteResponse) String() string { return proto.CompactTextString(m) } func (*MsgDeleteTradeRouteResponse) ProtoMessage() {} func (*MsgDeleteTradeRouteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{36} + return fileDescriptor_c5b8d3ef903e18f4, []int{36} } func (m *MsgDeleteTradeRouteResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2001,7 +2001,7 @@ func (m *MsgUpdateTradeRoute) Reset() { *m = MsgUpdateTradeRoute{} } func (m *MsgUpdateTradeRoute) String() string { return proto.CompactTextString(m) } func (*MsgUpdateTradeRoute) ProtoMessage() {} func (*MsgUpdateTradeRoute) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{37} + return fileDescriptor_c5b8d3ef903e18f4, []int{37} } func (m *MsgUpdateTradeRoute) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2074,7 +2074,7 @@ func (m *MsgUpdateTradeRouteResponse) Reset() { *m = MsgUpdateTradeRoute func (m *MsgUpdateTradeRouteResponse) String() string { return proto.CompactTextString(m) } func (*MsgUpdateTradeRouteResponse) ProtoMessage() {} func (*MsgUpdateTradeRouteResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{38} + return fileDescriptor_c5b8d3ef903e18f4, []int{38} } func (m *MsgUpdateTradeRouteResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2121,7 +2121,7 @@ func (m *MsgSetCommunityPoolRebate) Reset() { *m = MsgSetCommunityPoolRe func (m *MsgSetCommunityPoolRebate) String() string { return proto.CompactTextString(m) } func (*MsgSetCommunityPoolRebate) ProtoMessage() {} func (*MsgSetCommunityPoolRebate) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{39} + return fileDescriptor_c5b8d3ef903e18f4, []int{39} } func (m *MsgSetCommunityPoolRebate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2171,7 +2171,7 @@ func (m *MsgSetCommunityPoolRebateResponse) Reset() { *m = MsgSetCommuni func (m *MsgSetCommunityPoolRebateResponse) String() string { return proto.CompactTextString(m) } func (*MsgSetCommunityPoolRebateResponse) ProtoMessage() {} func (*MsgSetCommunityPoolRebateResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{40} + return fileDescriptor_c5b8d3ef903e18f4, []int{40} } func (m *MsgSetCommunityPoolRebateResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2207,7 +2207,7 @@ type MsgToggleTradeController struct { // Chain ID of the trade account ChainId string `protobuf:"bytes,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` // Permission change (either grant or revoke) - PermissionChange AuthzPermissionChange `protobuf:"varint,3,opt,name=permission_change,json=permissionChange,proto3,enum=stride.stakeibc.AuthzPermissionChange" json:"permission_change,omitempty"` + PermissionChange AuthzPermissionChange `protobuf:"varint,3,opt,name=permission_change,json=permissionChange,proto3,enum=symphony.stakeibc.AuthzPermissionChange" json:"permission_change,omitempty"` // Address of trade operator Address string `protobuf:"bytes,4,opt,name=address,proto3" json:"address,omitempty"` // Option to grant/revoke the legacy osmosis swap message @@ -2218,7 +2218,7 @@ func (m *MsgToggleTradeController) Reset() { *m = MsgToggleTradeControll func (m *MsgToggleTradeController) String() string { return proto.CompactTextString(m) } func (*MsgToggleTradeController) ProtoMessage() {} func (*MsgToggleTradeController) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{41} + return fileDescriptor_c5b8d3ef903e18f4, []int{41} } func (m *MsgToggleTradeController) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2289,7 +2289,7 @@ func (m *MsgToggleTradeControllerResponse) Reset() { *m = MsgToggleTrade func (m *MsgToggleTradeControllerResponse) String() string { return proto.CompactTextString(m) } func (*MsgToggleTradeControllerResponse) ProtoMessage() {} func (*MsgToggleTradeControllerResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{42} + return fileDescriptor_c5b8d3ef903e18f4, []int{42} } func (m *MsgToggleTradeControllerResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2333,7 +2333,7 @@ func (m *MsgUpdateHostZoneParams) Reset() { *m = MsgUpdateHostZoneParams func (m *MsgUpdateHostZoneParams) String() string { return proto.CompactTextString(m) } func (*MsgUpdateHostZoneParams) ProtoMessage() {} func (*MsgUpdateHostZoneParams) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{43} + return fileDescriptor_c5b8d3ef903e18f4, []int{43} } func (m *MsgUpdateHostZoneParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2390,7 +2390,7 @@ func (m *MsgUpdateHostZoneParamsResponse) Reset() { *m = MsgUpdateHostZo func (m *MsgUpdateHostZoneParamsResponse) String() string { return proto.CompactTextString(m) } func (*MsgUpdateHostZoneParamsResponse) ProtoMessage() {} func (*MsgUpdateHostZoneParamsResponse) Descriptor() ([]byte, []int) { - return fileDescriptor_9b7e09c9ad51cd54, []int{44} + return fileDescriptor_c5b8d3ef903e18f4, []int{44} } func (m *MsgUpdateHostZoneParamsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2420,226 +2420,227 @@ func (m *MsgUpdateHostZoneParamsResponse) XXX_DiscardUnknown() { var xxx_messageInfo_MsgUpdateHostZoneParamsResponse proto.InternalMessageInfo func init() { - proto.RegisterEnum("stride.stakeibc.AuthzPermissionChange", AuthzPermissionChange_name, AuthzPermissionChange_value) - proto.RegisterType((*MsgUpdateInnerRedemptionRateBounds)(nil), "stride.stakeibc.MsgUpdateInnerRedemptionRateBounds") - proto.RegisterType((*MsgUpdateInnerRedemptionRateBoundsResponse)(nil), "stride.stakeibc.MsgUpdateInnerRedemptionRateBoundsResponse") - proto.RegisterType((*MsgLiquidStake)(nil), "stride.stakeibc.MsgLiquidStake") - proto.RegisterType((*MsgLiquidStakeResponse)(nil), "stride.stakeibc.MsgLiquidStakeResponse") - proto.RegisterType((*MsgLSMLiquidStake)(nil), "stride.stakeibc.MsgLSMLiquidStake") - proto.RegisterType((*MsgLSMLiquidStakeResponse)(nil), "stride.stakeibc.MsgLSMLiquidStakeResponse") - proto.RegisterType((*MsgClearBalance)(nil), "stride.stakeibc.MsgClearBalance") - proto.RegisterType((*MsgClearBalanceResponse)(nil), "stride.stakeibc.MsgClearBalanceResponse") - proto.RegisterType((*MsgRedeemStake)(nil), "stride.stakeibc.MsgRedeemStake") - proto.RegisterType((*MsgRedeemStakeResponse)(nil), "stride.stakeibc.MsgRedeemStakeResponse") - proto.RegisterType((*MsgRegisterHostZone)(nil), "stride.stakeibc.MsgRegisterHostZone") - proto.RegisterType((*MsgRegisterHostZoneResponse)(nil), "stride.stakeibc.MsgRegisterHostZoneResponse") - proto.RegisterType((*MsgClaimUndelegatedTokens)(nil), "stride.stakeibc.MsgClaimUndelegatedTokens") - proto.RegisterType((*MsgClaimUndelegatedTokensResponse)(nil), "stride.stakeibc.MsgClaimUndelegatedTokensResponse") - proto.RegisterType((*MsgRebalanceValidators)(nil), "stride.stakeibc.MsgRebalanceValidators") - proto.RegisterType((*MsgRebalanceValidatorsResponse)(nil), "stride.stakeibc.MsgRebalanceValidatorsResponse") - proto.RegisterType((*MsgAddValidators)(nil), "stride.stakeibc.MsgAddValidators") - proto.RegisterType((*MsgAddValidatorsResponse)(nil), "stride.stakeibc.MsgAddValidatorsResponse") - proto.RegisterType((*ValidatorWeight)(nil), "stride.stakeibc.ValidatorWeight") - proto.RegisterType((*MsgChangeValidatorWeights)(nil), "stride.stakeibc.MsgChangeValidatorWeights") - proto.RegisterType((*MsgChangeValidatorWeightsResponse)(nil), "stride.stakeibc.MsgChangeValidatorWeightsResponse") - proto.RegisterType((*MsgDeleteValidator)(nil), "stride.stakeibc.MsgDeleteValidator") - proto.RegisterType((*MsgDeleteValidatorResponse)(nil), "stride.stakeibc.MsgDeleteValidatorResponse") - proto.RegisterType((*MsgRestoreInterchainAccount)(nil), "stride.stakeibc.MsgRestoreInterchainAccount") - proto.RegisterType((*MsgRestoreInterchainAccountResponse)(nil), "stride.stakeibc.MsgRestoreInterchainAccountResponse") - proto.RegisterType((*MsgCloseDelegationChannel)(nil), "stride.stakeibc.MsgCloseDelegationChannel") - proto.RegisterType((*MsgCloseDelegationChannelResponse)(nil), "stride.stakeibc.MsgCloseDelegationChannelResponse") - proto.RegisterType((*MsgUpdateValidatorSharesExchRate)(nil), "stride.stakeibc.MsgUpdateValidatorSharesExchRate") - proto.RegisterType((*MsgUpdateValidatorSharesExchRateResponse)(nil), "stride.stakeibc.MsgUpdateValidatorSharesExchRateResponse") - proto.RegisterType((*MsgCalibrateDelegation)(nil), "stride.stakeibc.MsgCalibrateDelegation") - proto.RegisterType((*MsgCalibrateDelegationResponse)(nil), "stride.stakeibc.MsgCalibrateDelegationResponse") - proto.RegisterType((*MsgResumeHostZone)(nil), "stride.stakeibc.MsgResumeHostZone") - proto.RegisterType((*MsgResumeHostZoneResponse)(nil), "stride.stakeibc.MsgResumeHostZoneResponse") - proto.RegisterType((*MsgCreateTradeRoute)(nil), "stride.stakeibc.MsgCreateTradeRoute") - proto.RegisterType((*MsgCreateTradeRouteResponse)(nil), "stride.stakeibc.MsgCreateTradeRouteResponse") - proto.RegisterType((*MsgDeleteTradeRoute)(nil), "stride.stakeibc.MsgDeleteTradeRoute") - proto.RegisterType((*MsgDeleteTradeRouteResponse)(nil), "stride.stakeibc.MsgDeleteTradeRouteResponse") - proto.RegisterType((*MsgUpdateTradeRoute)(nil), "stride.stakeibc.MsgUpdateTradeRoute") - proto.RegisterType((*MsgUpdateTradeRouteResponse)(nil), "stride.stakeibc.MsgUpdateTradeRouteResponse") - proto.RegisterType((*MsgSetCommunityPoolRebate)(nil), "stride.stakeibc.MsgSetCommunityPoolRebate") - proto.RegisterType((*MsgSetCommunityPoolRebateResponse)(nil), "stride.stakeibc.MsgSetCommunityPoolRebateResponse") - proto.RegisterType((*MsgToggleTradeController)(nil), "stride.stakeibc.MsgToggleTradeController") - proto.RegisterType((*MsgToggleTradeControllerResponse)(nil), "stride.stakeibc.MsgToggleTradeControllerResponse") - proto.RegisterType((*MsgUpdateHostZoneParams)(nil), "stride.stakeibc.MsgUpdateHostZoneParams") - proto.RegisterType((*MsgUpdateHostZoneParamsResponse)(nil), "stride.stakeibc.MsgUpdateHostZoneParamsResponse") -} - -func init() { proto.RegisterFile("stride/stakeibc/tx.proto", fileDescriptor_9b7e09c9ad51cd54) } - -var fileDescriptor_9b7e09c9ad51cd54 = []byte{ - // 2688 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0x4d, 0x6c, 0x24, 0x47, - 0xf5, 0xf7, 0xac, 0x3f, 0xf7, 0xd9, 0x5e, 0xdb, 0x6d, 0x7b, 0x77, 0x3c, 0x8e, 0x3d, 0x76, 0x3b, - 0xff, 0xfc, 0x1d, 0x27, 0xf6, 0xc4, 0xde, 0x0d, 0x01, 0x07, 0x10, 0xb6, 0x77, 0x59, 0x4c, 0xd6, - 0xc9, 0xaa, 0xed, 0x24, 0x52, 0x24, 0xd4, 0xd4, 0x74, 0xd7, 0x8e, 0x5b, 0xdb, 0xdd, 0x35, 0x74, - 0xf5, 0xd8, 0xe3, 0x1c, 0x50, 0xc4, 0x29, 0x42, 0x42, 0x20, 0x71, 0x45, 0x28, 0x07, 0x4e, 0x9c, - 0x72, 0xc8, 0x81, 0x23, 0x07, 0x84, 0x22, 0x71, 0x09, 0x39, 0x00, 0x8a, 0x90, 0x89, 0x12, 0xa4, - 0x20, 0x4e, 0x68, 0x4f, 0x9c, 0x10, 0xaa, 0xaa, 0xee, 0x9a, 0xee, 0x9e, 0xea, 0x99, 0x59, 0xcb, - 0x21, 0xb9, 0xac, 0xb7, 0xab, 0x5e, 0xbd, 0x8f, 0x5f, 0xbd, 0xf7, 0xaa, 0xde, 0xab, 0x81, 0x22, - 0x0d, 0x03, 0xc7, 0xc6, 0x15, 0x1a, 0xa2, 0x87, 0xd8, 0xa9, 0x5a, 0x95, 0xb0, 0xb9, 0x51, 0x0f, - 0x48, 0x48, 0xb4, 0x09, 0x31, 0xb3, 0x11, 0xcf, 0x94, 0xa6, 0x90, 0xe7, 0xf8, 0xa4, 0xc2, 0xff, - 0x15, 0x34, 0xa5, 0x39, 0x8b, 0x50, 0x8f, 0x50, 0x93, 0x7f, 0x55, 0xc4, 0x47, 0x34, 0xb5, 0x28, - 0xbe, 0x2a, 0x55, 0x44, 0x71, 0xe5, 0x64, 0xb3, 0x8a, 0x43, 0xb4, 0x59, 0xb1, 0x88, 0xe3, 0x47, - 0xf3, 0x37, 0xa2, 0x79, 0x8f, 0xd6, 0x2a, 0x27, 0x9b, 0xec, 0x4f, 0x34, 0x31, 0x53, 0x23, 0x35, - 0x22, 0x18, 0xb2, 0xff, 0x45, 0xa3, 0xe5, 0xac, 0x9e, 0x27, 0xc8, 0x75, 0x6c, 0x14, 0x92, 0x40, - 0x10, 0xe8, 0x6f, 0xf7, 0x83, 0x7e, 0x40, 0x6b, 0xaf, 0xd6, 0x6d, 0x14, 0xe2, 0x7d, 0xdf, 0xc7, - 0x81, 0x81, 0x6d, 0xec, 0xd5, 0x43, 0x87, 0xf8, 0x06, 0x0a, 0xf1, 0x2e, 0x69, 0xf8, 0x36, 0xd5, - 0xb6, 0x60, 0xd8, 0x0a, 0x30, 0x5b, 0x57, 0x2c, 0x2c, 0x15, 0x56, 0xaf, 0xee, 0x16, 0x3f, 0x7c, - 0x6f, 0x7d, 0x26, 0xd2, 0x7c, 0xc7, 0xb6, 0x03, 0x4c, 0xe9, 0x61, 0x18, 0x38, 0x7e, 0xcd, 0x88, - 0x09, 0xb5, 0x39, 0x18, 0xb1, 0x8e, 0x91, 0xe3, 0x9b, 0x8e, 0x5d, 0xbc, 0xc2, 0x16, 0x19, 0xc3, - 0xfc, 0x7b, 0xdf, 0xd6, 0x5c, 0x98, 0xf3, 0xd8, 0x04, 0x93, 0x67, 0x06, 0x52, 0xa0, 0x19, 0xa0, - 0x10, 0x17, 0xfb, 0xb9, 0x80, 0xcd, 0xf7, 0xcf, 0xcb, 0x7d, 0x1f, 0x9d, 0x97, 0xe7, 0x85, 0x10, - 0x6a, 0x3f, 0xdc, 0x70, 0x48, 0xc5, 0x43, 0xe1, 0xf1, 0xc6, 0x3d, 0x5c, 0x43, 0xd6, 0xd9, 0x6d, - 0x6c, 0x7d, 0xf8, 0xde, 0x3a, 0x44, 0x3a, 0xdc, 0xc6, 0x96, 0x71, 0xdd, 0x73, 0x7c, 0x85, 0x09, - 0x5c, 0x1a, 0x6a, 0xe6, 0x48, 0x1b, 0xb8, 0xb8, 0x34, 0xd4, 0x54, 0x48, 0xdb, 0x7e, 0xe1, 0x47, - 0x9f, 0xbd, 0xbb, 0x16, 0x83, 0xf0, 0xe3, 0xcf, 0xde, 0x5d, 0x7b, 0x4a, 0x82, 0x2f, 0x81, 0x56, - 0x61, 0xac, 0x3f, 0x0b, 0x6b, 0xdd, 0x77, 0xc2, 0xc0, 0xb4, 0x4e, 0x7c, 0x8a, 0xf5, 0xdf, 0x15, - 0xe0, 0xda, 0x01, 0xad, 0xdd, 0x73, 0x7e, 0xd0, 0x70, 0xec, 0x43, 0x26, 0xe1, 0x42, 0x9b, 0xf4, - 0x3c, 0x0c, 0x21, 0x8f, 0x34, 0xfc, 0x50, 0x6c, 0xd1, 0xee, 0x42, 0x04, 0xc4, 0x6c, 0x3b, 0x10, - 0xfb, 0x7e, 0x68, 0x44, 0xc4, 0xda, 0x02, 0xc0, 0x31, 0xa1, 0xa1, 0x69, 0x63, 0x9f, 0x78, 0x62, - 0xc7, 0x8c, 0xab, 0x6c, 0xe4, 0x36, 0x1b, 0xd8, 0x5e, 0xcd, 0x62, 0x70, 0x23, 0x89, 0x41, 0x42, - 0x67, 0xfd, 0xad, 0x02, 0x5c, 0x4f, 0x0f, 0xc5, 0x16, 0x6a, 0x0f, 0x60, 0x84, 0x86, 0x66, 0x48, - 0x1e, 0x62, 0x9f, 0xdb, 0x33, 0xba, 0x35, 0xb7, 0x11, 0x19, 0xc3, 0xa2, 0x63, 0x23, 0x8a, 0x8e, - 0x8d, 0x3d, 0xe2, 0xf8, 0xbb, 0xcf, 0x31, 0xbd, 0x7f, 0xfd, 0xb7, 0xf2, 0x6a, 0xcd, 0x09, 0x8f, - 0x1b, 0xd5, 0x0d, 0x8b, 0x78, 0x51, 0x60, 0x45, 0x7f, 0xd6, 0xa9, 0xfd, 0xb0, 0x12, 0x9e, 0xd5, - 0x31, 0xe5, 0x0b, 0xa8, 0x31, 0x4c, 0xc3, 0x23, 0xc6, 0x5b, 0xff, 0xa8, 0x00, 0x53, 0x4c, 0x85, - 0xc3, 0x83, 0x2f, 0x08, 0xcc, 0x75, 0x98, 0x76, 0xa9, 0x27, 0x2c, 0x35, 0x9d, 0xaa, 0x95, 0x42, - 0x75, 0xd2, 0xa5, 0x1e, 0xd7, 0x73, 0xbf, 0x6a, 0x09, 0x70, 0x9f, 0xc9, 0x82, 0x5b, 0x4a, 0x81, - 0x9b, 0x32, 0x43, 0x7f, 0x19, 0xe6, 0xda, 0x06, 0x25, 0xc2, 0x9b, 0x30, 0x13, 0x06, 0xc8, 0xa7, - 0xc8, 0xe2, 0xf1, 0x60, 0x11, 0xaf, 0xee, 0xe2, 0x10, 0x73, 0x83, 0x47, 0x8c, 0xe9, 0xc4, 0xdc, - 0x5e, 0x34, 0xa5, 0xff, 0xb5, 0x00, 0x13, 0x07, 0xb4, 0xb6, 0xe7, 0x62, 0x14, 0xec, 0x22, 0x17, - 0xf9, 0x16, 0xbe, 0xec, 0xe4, 0xd0, 0x42, 0xb1, 0xff, 0x71, 0x50, 0x2c, 0x02, 0xe3, 0xe0, 0xfb, - 0xd8, 0x15, 0x31, 0x6d, 0xc4, 0x9f, 0xdb, 0x4f, 0x67, 0x01, 0x2b, 0x26, 0x01, 0x4b, 0x9a, 0xa2, - 0xcf, 0xc1, 0x8d, 0xcc, 0x90, 0x0c, 0xb8, 0x7f, 0x8b, 0x80, 0x63, 0x41, 0x89, 0xbd, 0xff, 0xb9, - 0x8f, 0xcc, 0x03, 0x0f, 0x2f, 0xf3, 0x4d, 0xe2, 0x47, 0x19, 0xd2, 0x18, 0x61, 0x03, 0x6f, 0x10, - 0x1f, 0x6b, 0xb7, 0x60, 0x24, 0xc0, 0x16, 0x76, 0x4e, 0x70, 0x10, 0xe5, 0xb3, 0x7c, 0x45, 0x24, - 0x65, 0x97, 0x20, 0x4d, 0xd8, 0xa9, 0x17, 0x79, 0x8c, 0x26, 0x46, 0x24, 0x28, 0x1f, 0x0f, 0xc1, - 0x34, 0x9f, 0xaa, 0x39, 0x34, 0xc4, 0xc1, 0x77, 0x62, 0x8d, 0xbe, 0x01, 0xe3, 0x16, 0xf1, 0x7d, - 0x2c, 0x1c, 0x2b, 0xde, 0xe3, 0xdd, 0xe2, 0xa3, 0xf3, 0xf2, 0xcc, 0x19, 0xf2, 0xdc, 0x6d, 0x3d, - 0x35, 0xad, 0x1b, 0x63, 0xad, 0xef, 0x7d, 0x5b, 0xd3, 0x61, 0xac, 0x8a, 0xad, 0xe3, 0x9b, 0x5b, - 0xf5, 0x00, 0x3f, 0x70, 0x9a, 0xc5, 0x31, 0x6e, 0x70, 0x6a, 0x4c, 0xbb, 0x95, 0x4a, 0x41, 0xc2, - 0xec, 0xd9, 0x47, 0xe7, 0xe5, 0x29, 0xc1, 0xbf, 0x35, 0xa7, 0x27, 0x32, 0x93, 0xb6, 0x09, 0x57, - 0x5b, 0x11, 0x36, 0xc8, 0x17, 0xcd, 0x3c, 0x3a, 0x2f, 0x4f, 0x8a, 0x45, 0x72, 0x4a, 0x37, 0x46, - 0x9c, 0x28, 0xde, 0x92, 0xbb, 0x3c, 0xd4, 0xeb, 0x2e, 0xbf, 0x0c, 0x22, 0x7a, 0x1e, 0xe0, 0xc0, - 0x8c, 0xdc, 0x90, 0xa1, 0x00, 0x7c, 0xfd, 0xe2, 0xa3, 0xf3, 0x72, 0x49, 0x08, 0x54, 0x10, 0xe9, - 0xc6, 0x54, 0x3c, 0xba, 0x27, 0x06, 0xf7, 0x6d, 0xed, 0xdb, 0x30, 0xd9, 0xf0, 0xab, 0xc4, 0xb7, - 0x1d, 0xbf, 0x66, 0xd6, 0x71, 0xe0, 0x10, 0xbb, 0x38, 0xba, 0x54, 0x58, 0x1d, 0xd8, 0x9d, 0x7f, - 0x74, 0x5e, 0xbe, 0x21, 0x98, 0x65, 0x29, 0x74, 0x63, 0x42, 0x0e, 0xdd, 0xe7, 0x23, 0x1a, 0x82, - 0x69, 0x76, 0xf0, 0x66, 0x0f, 0xc1, 0xf1, 0x8b, 0x1e, 0x82, 0x53, 0x9e, 0xe3, 0x67, 0x4e, 0x5b, - 0x26, 0x02, 0x35, 0xdb, 0x44, 0x5c, 0xbb, 0xb8, 0x08, 0xd4, 0xcc, 0x88, 0x78, 0x01, 0x8a, 0x2c, - 0x61, 0xba, 0x3c, 0xa5, 0x99, 0xdc, 0x6b, 0x4d, 0xec, 0xa3, 0xaa, 0x8b, 0xed, 0xe2, 0x04, 0xcf, - 0x5d, 0xb3, 0x2e, 0xf5, 0x12, 0x19, 0xef, 0x8e, 0x98, 0xd4, 0xee, 0x40, 0xd9, 0x22, 0x9e, 0xd7, - 0xf0, 0x9d, 0xf0, 0xcc, 0xac, 0x13, 0xe2, 0x9a, 0x61, 0x80, 0x11, 0x6d, 0x04, 0x67, 0x26, 0x12, - 0x1b, 0x59, 0x9c, 0xe4, 0xae, 0xf6, 0x84, 0x24, 0xbb, 0x4f, 0x88, 0x7b, 0x14, 0x11, 0x45, 0x9b, - 0xad, 0xdd, 0x82, 0x1b, 0xcc, 0x44, 0x0f, 0x53, 0x8a, 0x6a, 0x98, 0x32, 0xb8, 0x4d, 0xc7, 0x42, - 0x66, 0xd8, 0x2c, 0x4e, 0xb1, 0x4d, 0x31, 0x18, 0x02, 0x07, 0xd1, 0xec, 0x7d, 0x1c, 0xec, 0x5b, - 0xe8, 0xa8, 0xb9, 0xfd, 0xfc, 0xdb, 0xef, 0x94, 0xfb, 0xfe, 0xf1, 0x4e, 0xb9, 0x2f, 0x1b, 0x77, - 0x4f, 0xa4, 0xe3, 0x2e, 0x1d, 0x4a, 0xfa, 0x02, 0xcc, 0x2b, 0x86, 0x65, 0x04, 0x9e, 0x17, 0x78, - 0x86, 0xdf, 0x73, 0x91, 0xe3, 0xbd, 0xea, 0xdb, 0xd8, 0xc5, 0x35, 0x14, 0x62, 0x9b, 0x1f, 0x19, - 0x17, 0xbb, 0xb7, 0x2d, 0xc1, 0x98, 0x4c, 0x35, 0xad, 0xf4, 0x0c, 0x71, 0xb6, 0xd9, 0xb7, 0xb5, - 0x19, 0x18, 0xc4, 0x75, 0x62, 0x1d, 0xf3, 0x44, 0x34, 0x60, 0x88, 0x0f, 0xad, 0x94, 0xc8, 0x42, - 0x83, 0x22, 0x43, 0xc9, 0x5c, 0x73, 0x33, 0x6b, 0xb3, 0x9e, 0x4e, 0xc1, 0x2a, 0xe5, 0xbf, 0x3b, - 0x30, 0x32, 0x30, 0x39, 0xa8, 0xaf, 0xc0, 0x72, 0x2e, 0x89, 0x44, 0xe1, 0xb7, 0x85, 0x28, 0x45, - 0x55, 0x45, 0xd6, 0x7e, 0x2d, 0xbe, 0xe6, 0x5e, 0x0c, 0x82, 0x54, 0xb6, 0xbd, 0x92, 0xc9, 0xb6, - 0x2b, 0x30, 0xee, 0x37, 0x3c, 0x33, 0x88, 0x65, 0x45, 0x28, 0x8c, 0xf9, 0x0d, 0x4f, 0xca, 0xdf, - 0x7e, 0x2e, 0x6b, 0x70, 0x39, 0xbd, 0xc9, 0x6d, 0x7a, 0xea, 0x4b, 0xb0, 0xa8, 0x9e, 0x91, 0x46, - 0xfe, 0xa1, 0x00, 0x93, 0x07, 0xb4, 0xb6, 0x63, 0xdb, 0x9f, 0xa7, 0x79, 0xdb, 0x00, 0xb2, 0x48, - 0xa0, 0xc5, 0xfe, 0xa5, 0xfe, 0xd5, 0xd1, 0xad, 0xd2, 0x46, 0xa6, 0xaa, 0xd9, 0x90, 0x1a, 0x18, - 0x09, 0xea, 0xed, 0xb5, 0xac, 0xd5, 0x73, 0x49, 0xab, 0x53, 0x8a, 0xeb, 0x25, 0x28, 0x66, 0xc7, - 0xa4, 0xa5, 0x0f, 0x60, 0x42, 0x8e, 0xbe, 0x8e, 0x9d, 0xda, 0x71, 0xa8, 0xbd, 0x08, 0xc3, 0x71, - 0x88, 0x0a, 0x3b, 0x97, 0x3f, 0x7c, 0x6f, 0x7d, 0x21, 0xb2, 0x53, 0x12, 0x67, 0x0c, 0x8e, 0x56, - 0x68, 0xd7, 0x61, 0xe8, 0x94, 0xb3, 0xe1, 0xd6, 0x0e, 0x18, 0xd1, 0x97, 0xfe, 0xaf, 0x28, 0x78, - 0x8e, 0x91, 0x5f, 0xc3, 0x19, 0x89, 0x9f, 0x03, 0xb4, 0x07, 0x30, 0x25, 0xc1, 0x32, 0x85, 0x0a, - 0x31, 0xc2, 0x4b, 0xf9, 0x08, 0x0b, 0x75, 0x8c, 0xc9, 0x93, 0x8c, 0x7e, 0xdd, 0x82, 0x4a, 0x69, - 0x54, 0x1c, 0x4e, 0xca, 0x49, 0x89, 0xff, 0x1f, 0x0b, 0xa0, 0x1d, 0xd0, 0xda, 0x6d, 0xcc, 0xee, - 0x7c, 0x92, 0xea, 0xf2, 0x01, 0xf9, 0x3a, 0x8c, 0x9c, 0x20, 0x97, 0xe7, 0xde, 0xe8, 0xb2, 0xd7, - 0xcb, 0xae, 0x9e, 0x20, 0x97, 0x8d, 0x6c, 0x3f, 0x9b, 0xb5, 0x7f, 0x3e, 0x69, 0x7f, 0x46, 0x79, - 0xfd, 0x09, 0x28, 0xb5, 0x8f, 0x4a, 0x8b, 0xff, 0x59, 0x88, 0xd2, 0x2c, 0x0d, 0x49, 0x80, 0xf7, - 0xfd, 0x10, 0x07, 0xfc, 0x3e, 0xba, 0x63, 0x59, 0xfc, 0xfe, 0x75, 0xc9, 0x77, 0xdc, 0x95, 0xec, - 0xfd, 0x48, 0x5c, 0xe9, 0xd2, 0xb7, 0xa0, 0x15, 0x18, 0x47, 0x42, 0xbc, 0x49, 0x4e, 0xfd, 0xf8, - 0x6e, 0x67, 0x8c, 0x45, 0x83, 0xaf, 0xb0, 0xb1, 0xed, 0xad, 0x2c, 0x08, 0xcb, 0xe9, 0x44, 0xa3, - 0xb0, 0x47, 0xff, 0x3f, 0x58, 0xe9, 0x60, 0xab, 0xc4, 0xe4, 0x97, 0xf1, 0xd1, 0x42, 0x28, 0xbe, - 0x2d, 0x12, 0x2f, 0x2b, 0x05, 0xc4, 0xa5, 0xe4, 0x92, 0x11, 0xe9, 0x62, 0x87, 0x52, 0x07, 0x79, - 0x34, 0xa8, 0xf4, 0x93, 0x56, 0xfc, 0xbd, 0x00, 0x4b, 0xb2, 0xae, 0x96, 0x1b, 0x7f, 0x78, 0x8c, - 0x02, 0x4c, 0xef, 0x34, 0xad, 0x63, 0x7e, 0xa3, 0xb8, 0xe4, 0xed, 0x7d, 0x11, 0x98, 0x93, 0x92, - 0x3a, 0x7e, 0x4c, 0xb7, 0x66, 0x2b, 0xb6, 0x6f, 0x65, 0x91, 0x58, 0x69, 0x6f, 0x20, 0xbc, 0x86, - 0xdc, 0xb4, 0x05, 0xfa, 0x1a, 0xac, 0x76, 0xb3, 0x52, 0x42, 0xf2, 0x27, 0x71, 0x5a, 0xee, 0x21, - 0xd7, 0xa9, 0xb2, 0xcb, 0x59, 0x0b, 0xbc, 0x2f, 0x15, 0x10, 0x9d, 0xcf, 0x50, 0x85, 0xf6, 0xd1, - 0x19, 0xaa, 0x98, 0x91, 0xa6, 0xff, 0x54, 0x14, 0xfb, 0x06, 0xa6, 0x0d, 0x0f, 0xcb, 0x72, 0xe5, - 0x92, 0x7d, 0xb9, 0x73, 0x85, 0x9e, 0x96, 0xad, 0xcf, 0xf3, 0x20, 0x4b, 0x0f, 0x4a, 0x75, 0x7f, - 0x33, 0xc2, 0xeb, 0xab, 0x3d, 0xc6, 0x0a, 0x1f, 0x05, 0xc8, 0xc6, 0x06, 0x69, 0x84, 0x58, 0xfb, - 0x0a, 0x5c, 0x45, 0x8d, 0xf0, 0x98, 0x04, 0x4e, 0x78, 0xd6, 0x55, 0xe5, 0x16, 0xa9, 0xa6, 0xc3, - 0x38, 0xcf, 0xc6, 0x19, 0xcd, 0x47, 0xd9, 0xe0, 0x5e, 0xb4, 0x67, 0xbb, 0xb0, 0x28, 0xce, 0x22, - 0x33, 0x24, 0x66, 0x80, 0x4f, 0x51, 0x60, 0x9b, 0xaa, 0x64, 0x55, 0x12, 0x54, 0x47, 0xc4, 0xe0, - 0x34, 0x7b, 0xc9, 0xd4, 0xf5, 0x2d, 0x58, 0x68, 0xf1, 0x08, 0x99, 0xde, 0x19, 0x16, 0x22, 0x95, - 0xcd, 0xc5, 0x2c, 0xb8, 0x69, 0x29, 0x0e, 0xfb, 0x20, 0x4a, 0xb8, 0x96, 0x0e, 0xaa, 0x82, 0x4a, - 0xdc, 0x33, 0x17, 0x18, 0x65, 0xac, 0xc7, 0x51, 0x5b, 0xf1, 0xf4, 0x12, 0xac, 0xc4, 0x2c, 0x62, - 0x65, 0x54, 0xbc, 0x78, 0x71, 0x67, 0x2c, 0x0a, 0xd2, 0x48, 0xa5, 0x76, 0x66, 0x77, 0x61, 0x39, - 0x62, 0x41, 0x4c, 0xa1, 0xa0, 0x82, 0xd5, 0xb0, 0x28, 0x22, 0x38, 0xe1, 0x11, 0x61, 0xbb, 0xda, - 0xce, 0xa8, 0x02, 0x33, 0x91, 0x56, 0xbc, 0xe2, 0x34, 0x89, 0xcf, 0xf9, 0x15, 0x47, 0xf8, 0xda, - 0x29, 0x31, 0xc7, 0x2b, 0xd0, 0x57, 0x7c, 0xc6, 0x41, 0xbb, 0x09, 0xd7, 0xb3, 0x0b, 0xc4, 0x77, - 0xf1, 0x2a, 0x5f, 0x32, 0x9d, 0x5a, 0x22, 0xc0, 0xd0, 0x36, 0x61, 0x36, 0xbb, 0x88, 0x6b, 0x25, - 0x4a, 0x51, 0x43, 0x4b, 0xad, 0xe1, 0x26, 0x6b, 0xeb, 0x30, 0xdd, 0x2a, 0x9e, 0x5b, 0x0b, 0x46, - 0x45, 0x3b, 0x4a, 0x96, 0xd2, 0x31, 0xf9, 0x33, 0xa0, 0xa5, 0xc9, 0xb9, 0x15, 0xa2, 0x62, 0x9f, - 0x48, 0x50, 0x73, 0x1b, 0xe6, 0x61, 0x98, 0x97, 0x5d, 0x8e, 0xcd, 0x6b, 0xce, 0x81, 0xdd, 0x2b, - 0xc5, 0x82, 0x31, 0xc4, 0x86, 0xf6, 0x6d, 0xed, 0x9b, 0x50, 0x62, 0x65, 0x15, 0x72, 0x5d, 0x72, - 0x8a, 0x6d, 0x93, 0x9e, 0xa2, 0xba, 0xe9, 0x12, 0x4a, 0x93, 0x05, 0x24, 0xa3, 0xbf, 0xee, 0xa1, - 0xe6, 0x8e, 0x20, 0x3a, 0x3c, 0x45, 0xf5, 0x7b, 0x84, 0x52, 0x9e, 0xc4, 0xef, 0xc0, 0x04, 0x2b, - 0x6e, 0xf9, 0xba, 0xa8, 0xc7, 0x32, 0xd1, 0x4b, 0x8f, 0x65, 0xdc, 0x73, 0x7c, 0xc6, 0x68, 0x47, - 0xb4, 0x5a, 0x18, 0x1b, 0xd4, 0x4c, 0xb1, 0x99, 0xec, 0x8d, 0x0d, 0x6a, 0x26, 0xd8, 0x1c, 0x88, - 0x52, 0x5b, 0xba, 0x47, 0xc4, 0x6a, 0xaa, 0x17, 0x56, 0xac, 0xac, 0x8e, 0x3d, 0x46, 0xb0, 0xdb, - 0xae, 0xb0, 0x9c, 0xd2, 0x8a, 0xe4, 0xb6, 0xba, 0x31, 0x9b, 0x22, 0xa2, 0xba, 0x31, 0x3b, 0x9c, - 0xac, 0x98, 0xa6, 0xe5, 0x7d, 0xe8, 0x12, 0x32, 0xcb, 0x32, 0x8c, 0x25, 0x1d, 0x2d, 0x4e, 0x2c, - 0x09, 0xff, 0xea, 0xd6, 0x34, 0xee, 0x66, 0x61, 0x56, 0xd5, 0xc8, 0xc2, 0xec, 0xb0, 0xb4, 0xf0, - 0x3f, 0xfd, 0xdc, 0x42, 0x71, 0x24, 0x7e, 0x19, 0x2c, 0x4c, 0x7a, 0xff, 0xc0, 0x63, 0x7a, 0xff, - 0x60, 0x57, 0xef, 0xbf, 0xdb, 0xee, 0xfd, 0xa2, 0x5d, 0x55, 0xee, 0xe8, 0x6b, 0xc5, 0x42, 0xd6, - 0xff, 0xef, 0xb6, 0xfb, 0xff, 0x70, 0xaf, 0x8c, 0xbe, 0xc8, 0x08, 0xc8, 0x6e, 0x74, 0xe4, 0x1f, - 0xd9, 0x61, 0xe9, 0x1f, 0xbf, 0xbf, 0xc2, 0x4f, 0xde, 0x43, 0x1c, 0xee, 0x25, 0x9b, 0x3d, 0xac, - 0x02, 0xbf, 0xfc, 0x1b, 0xe1, 0x6d, 0x18, 0x0d, 0x38, 0xe3, 0xe4, 0x1b, 0xd7, 0x4a, 0x0f, 0xdd, - 0x30, 0x03, 0xc4, 0x3a, 0xbe, 0xc7, 0x26, 0x2c, 0x24, 0x9b, 0x5e, 0xec, 0x4f, 0xf4, 0x6c, 0x10, - 0x61, 0x3b, 0xd0, 0x0b, 0xb6, 0x73, 0x6e, 0xab, 0x33, 0x66, 0x1f, 0x8a, 0x57, 0x90, 0x08, 0xe3, - 0xce, 0x25, 0xa5, 0x1a, 0xaa, 0xe8, 0x1a, 0xae, 0x9e, 0x94, 0x68, 0xff, 0xea, 0x0a, 0xaf, 0xf7, - 0x8f, 0x48, 0xad, 0xe6, 0xe2, 0xf8, 0xb8, 0x0f, 0x03, 0xe2, 0xba, 0x38, 0xb8, 0x6c, 0xb0, 0x0f, - 0x61, 0xaa, 0x8e, 0x03, 0xcf, 0xa1, 0x94, 0x3f, 0x6b, 0xf0, 0x5a, 0x97, 0x43, 0x7e, 0x6d, 0xeb, - 0xa9, 0xb6, 0x3a, 0x7b, 0xa7, 0x11, 0x1e, 0xbf, 0x79, 0x5f, 0x92, 0x8b, 0xca, 0xd8, 0x98, 0xac, - 0x67, 0x46, 0xb4, 0x62, 0xab, 0x01, 0x11, 0xbd, 0x2f, 0x24, 0xba, 0x0b, 0x2e, 0xdf, 0x2e, 0x1e, - 0xa5, 0x23, 0x46, 0xf4, 0xd5, 0xa5, 0xa4, 0x51, 0x22, 0xa1, 0xeb, 0xbc, 0x58, 0x51, 0xce, 0x49, - 0x28, 0xff, 0x5c, 0xe0, 0xaf, 0x14, 0xc2, 0xb1, 0xe3, 0x2b, 0xe3, 0x7d, 0x14, 0x20, 0x8f, 0x5e, - 0x38, 0xb9, 0x75, 0x40, 0xb3, 0x43, 0xb7, 0xb3, 0x3f, 0xbf, 0xdb, 0x79, 0xb3, 0x3d, 0x5a, 0x97, - 0xda, 0xa3, 0x35, 0xad, 0xbd, 0xbe, 0x0c, 0xe5, 0x9c, 0xa9, 0xd8, 0xf8, 0xb5, 0x0d, 0x98, 0x55, - 0xee, 0x98, 0x76, 0x15, 0x06, 0xef, 0x1a, 0x3b, 0x2f, 0x1f, 0x4d, 0xf6, 0x69, 0x00, 0x43, 0xc6, - 0x9d, 0xd7, 0x5e, 0x79, 0xe9, 0xce, 0x64, 0x61, 0xeb, 0x17, 0xd3, 0xd0, 0x7f, 0x40, 0x6b, 0xda, - 0xeb, 0x30, 0x9a, 0x7c, 0xde, 0x2b, 0xb7, 0xf9, 0x41, 0xfa, 0x15, 0xb2, 0xf4, 0xff, 0x5d, 0x08, - 0xe4, 0x23, 0xda, 0xf7, 0xe1, 0x5a, 0xe6, 0xe9, 0x50, 0x57, 0x2e, 0x4d, 0xd1, 0x94, 0xd6, 0xba, - 0xd3, 0x48, 0x09, 0xaf, 0xc3, 0x68, 0xf2, 0xd5, 0x49, 0xa9, 0x7a, 0x82, 0x40, 0xad, 0xba, 0xe2, - 0xf5, 0x46, 0x7b, 0x00, 0x93, 0x6d, 0x2f, 0x37, 0x4f, 0xaa, 0x17, 0xa7, 0xa9, 0x4a, 0xcf, 0xf6, - 0x42, 0x25, 0xe5, 0x34, 0xe1, 0x7a, 0x4e, 0x7f, 0x5a, 0x09, 0x83, 0x9a, 0xb6, 0xb4, 0xd5, 0x3b, - 0xad, 0x94, 0x4c, 0x60, 0x5a, 0xd5, 0x13, 0xce, 0x41, 0xa8, 0x8d, 0xb0, 0x54, 0xe9, 0x91, 0x50, - 0x0a, 0xfc, 0x1e, 0x8c, 0xa7, 0xfb, 0xb3, 0xcb, 0x2a, 0x0e, 0x29, 0x92, 0xd2, 0xd3, 0x5d, 0x49, - 0x24, 0xfb, 0x53, 0x98, 0x55, 0xb6, 0xee, 0x72, 0x80, 0x54, 0x76, 0xf9, 0x72, 0x80, 0xec, 0xd8, - 0x11, 0xd4, 0x2c, 0x98, 0xc8, 0x76, 0x03, 0x57, 0x54, 0x6c, 0x32, 0x44, 0xa5, 0x67, 0x7a, 0x20, - 0x92, 0x42, 0x7e, 0x08, 0xc5, 0xdc, 0x06, 0x5c, 0x8e, 0xc7, 0xa9, 0xa9, 0x4b, 0xb7, 0x1e, 0x87, - 0x3a, 0xed, 0xa7, 0xca, 0x66, 0x57, 0x8e, 0x9f, 0xaa, 0x68, 0xf3, 0xfc, 0xb4, 0x53, 0x93, 0x4a, - 0xfb, 0x49, 0x01, 0x16, 0x3a, 0x77, 0xa8, 0x36, 0x55, 0x5c, 0x3b, 0x2e, 0x29, 0x7d, 0xed, 0xb1, - 0x97, 0x24, 0xe3, 0x46, 0xd5, 0x1d, 0x52, 0xc6, 0x8d, 0x82, 0x50, 0x1d, 0x37, 0x1d, 0xfa, 0x32, - 0xda, 0x1b, 0x30, 0x96, 0xfa, 0x4d, 0xc1, 0x92, 0x1a, 0xc4, 0x16, 0x45, 0x69, 0xb5, 0x1b, 0x85, - 0xe4, 0xfd, 0xf3, 0x02, 0x94, 0xbb, 0xfd, 0xc0, 0xe9, 0x66, 0x3e, 0x56, 0xb9, 0x8b, 0x4a, 0x2f, - 0x5e, 0x60, 0x51, 0xf2, 0xdc, 0xc8, 0x74, 0xa1, 0xf4, 0x1c, 0xa7, 0x4d, 0xd0, 0xa8, 0xcf, 0x0d, - 0x75, 0xf3, 0x88, 0xa5, 0xf7, 0xb6, 0xc6, 0x91, 0x32, 0xbd, 0x67, 0xa9, 0xd4, 0xe9, 0x3d, 0xaf, - 0x94, 0x64, 0x72, 0xda, 0xca, 0xc8, 0x27, 0xf3, 0xe3, 0xbe, 0x9b, 0x9c, 0xbc, 0x82, 0x8e, 0xc9, - 0x69, 0x2b, 0xe6, 0x9e, 0xcc, 0xdf, 0x82, 0x6e, 0x72, 0xf2, 0x0a, 0x03, 0x96, 0x06, 0x72, 0x8a, - 0x02, 0x25, 0xfa, 0x6a, 0x5a, 0x75, 0x1a, 0xe8, 0x7c, 0x49, 0xd6, 0x1a, 0x30, 0xab, 0xbe, 0x20, - 0x2b, 0x8f, 0x08, 0x25, 0x69, 0x69, 0xb3, 0x67, 0x52, 0x29, 0x36, 0x80, 0x19, 0xe5, 0x65, 0x72, - 0x35, 0x1f, 0xb6, 0x34, 0x65, 0xe9, 0xb9, 0x5e, 0x29, 0x63, 0x99, 0xa5, 0xc1, 0xb7, 0x3e, 0x7b, - 0x77, 0xad, 0xb0, 0x7b, 0xef, 0xfd, 0x4f, 0x16, 0x0b, 0x1f, 0x7c, 0xb2, 0x58, 0xf8, 0xf8, 0x93, - 0xc5, 0xc2, 0xcf, 0x3e, 0x5d, 0xec, 0xfb, 0xe0, 0xd3, 0xc5, 0xbe, 0xbf, 0x7c, 0xba, 0xd8, 0xf7, - 0xc6, 0x56, 0xe2, 0x97, 0x5c, 0x87, 0x9c, 0xf9, 0xfa, 0x3d, 0x54, 0xa5, 0x95, 0xe8, 0x17, 0x8d, - 0x27, 0x5b, 0x5f, 0xad, 0x34, 0x13, 0xbf, 0xbf, 0x3c, 0xab, 0x63, 0x5a, 0x1d, 0xe2, 0x3f, 0x6a, - 0xbc, 0xf9, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd7, 0xd3, 0xbb, 0xd8, 0x9f, 0x29, 0x00, 0x00, + proto.RegisterEnum("symphony.stakeibc.AuthzPermissionChange", AuthzPermissionChange_name, AuthzPermissionChange_value) + proto.RegisterType((*MsgUpdateInnerRedemptionRateBounds)(nil), "symphony.stakeibc.MsgUpdateInnerRedemptionRateBounds") + proto.RegisterType((*MsgUpdateInnerRedemptionRateBoundsResponse)(nil), "symphony.stakeibc.MsgUpdateInnerRedemptionRateBoundsResponse") + proto.RegisterType((*MsgLiquidStake)(nil), "symphony.stakeibc.MsgLiquidStake") + proto.RegisterType((*MsgLiquidStakeResponse)(nil), "symphony.stakeibc.MsgLiquidStakeResponse") + proto.RegisterType((*MsgLSMLiquidStake)(nil), "symphony.stakeibc.MsgLSMLiquidStake") + proto.RegisterType((*MsgLSMLiquidStakeResponse)(nil), "symphony.stakeibc.MsgLSMLiquidStakeResponse") + proto.RegisterType((*MsgClearBalance)(nil), "symphony.stakeibc.MsgClearBalance") + proto.RegisterType((*MsgClearBalanceResponse)(nil), "symphony.stakeibc.MsgClearBalanceResponse") + proto.RegisterType((*MsgRedeemStake)(nil), "symphony.stakeibc.MsgRedeemStake") + proto.RegisterType((*MsgRedeemStakeResponse)(nil), "symphony.stakeibc.MsgRedeemStakeResponse") + proto.RegisterType((*MsgRegisterHostZone)(nil), "symphony.stakeibc.MsgRegisterHostZone") + proto.RegisterType((*MsgRegisterHostZoneResponse)(nil), "symphony.stakeibc.MsgRegisterHostZoneResponse") + proto.RegisterType((*MsgClaimUndelegatedTokens)(nil), "symphony.stakeibc.MsgClaimUndelegatedTokens") + proto.RegisterType((*MsgClaimUndelegatedTokensResponse)(nil), "symphony.stakeibc.MsgClaimUndelegatedTokensResponse") + proto.RegisterType((*MsgRebalanceValidators)(nil), "symphony.stakeibc.MsgRebalanceValidators") + proto.RegisterType((*MsgRebalanceValidatorsResponse)(nil), "symphony.stakeibc.MsgRebalanceValidatorsResponse") + proto.RegisterType((*MsgAddValidators)(nil), "symphony.stakeibc.MsgAddValidators") + proto.RegisterType((*MsgAddValidatorsResponse)(nil), "symphony.stakeibc.MsgAddValidatorsResponse") + proto.RegisterType((*ValidatorWeight)(nil), "symphony.stakeibc.ValidatorWeight") + proto.RegisterType((*MsgChangeValidatorWeights)(nil), "symphony.stakeibc.MsgChangeValidatorWeights") + proto.RegisterType((*MsgChangeValidatorWeightsResponse)(nil), "symphony.stakeibc.MsgChangeValidatorWeightsResponse") + proto.RegisterType((*MsgDeleteValidator)(nil), "symphony.stakeibc.MsgDeleteValidator") + proto.RegisterType((*MsgDeleteValidatorResponse)(nil), "symphony.stakeibc.MsgDeleteValidatorResponse") + proto.RegisterType((*MsgRestoreInterchainAccount)(nil), "symphony.stakeibc.MsgRestoreInterchainAccount") + proto.RegisterType((*MsgRestoreInterchainAccountResponse)(nil), "symphony.stakeibc.MsgRestoreInterchainAccountResponse") + proto.RegisterType((*MsgCloseDelegationChannel)(nil), "symphony.stakeibc.MsgCloseDelegationChannel") + proto.RegisterType((*MsgCloseDelegationChannelResponse)(nil), "symphony.stakeibc.MsgCloseDelegationChannelResponse") + proto.RegisterType((*MsgUpdateValidatorSharesExchRate)(nil), "symphony.stakeibc.MsgUpdateValidatorSharesExchRate") + proto.RegisterType((*MsgUpdateValidatorSharesExchRateResponse)(nil), "symphony.stakeibc.MsgUpdateValidatorSharesExchRateResponse") + proto.RegisterType((*MsgCalibrateDelegation)(nil), "symphony.stakeibc.MsgCalibrateDelegation") + proto.RegisterType((*MsgCalibrateDelegationResponse)(nil), "symphony.stakeibc.MsgCalibrateDelegationResponse") + proto.RegisterType((*MsgResumeHostZone)(nil), "symphony.stakeibc.MsgResumeHostZone") + proto.RegisterType((*MsgResumeHostZoneResponse)(nil), "symphony.stakeibc.MsgResumeHostZoneResponse") + proto.RegisterType((*MsgCreateTradeRoute)(nil), "symphony.stakeibc.MsgCreateTradeRoute") + proto.RegisterType((*MsgCreateTradeRouteResponse)(nil), "symphony.stakeibc.MsgCreateTradeRouteResponse") + proto.RegisterType((*MsgDeleteTradeRoute)(nil), "symphony.stakeibc.MsgDeleteTradeRoute") + proto.RegisterType((*MsgDeleteTradeRouteResponse)(nil), "symphony.stakeibc.MsgDeleteTradeRouteResponse") + proto.RegisterType((*MsgUpdateTradeRoute)(nil), "symphony.stakeibc.MsgUpdateTradeRoute") + proto.RegisterType((*MsgUpdateTradeRouteResponse)(nil), "symphony.stakeibc.MsgUpdateTradeRouteResponse") + proto.RegisterType((*MsgSetCommunityPoolRebate)(nil), "symphony.stakeibc.MsgSetCommunityPoolRebate") + proto.RegisterType((*MsgSetCommunityPoolRebateResponse)(nil), "symphony.stakeibc.MsgSetCommunityPoolRebateResponse") + proto.RegisterType((*MsgToggleTradeController)(nil), "symphony.stakeibc.MsgToggleTradeController") + proto.RegisterType((*MsgToggleTradeControllerResponse)(nil), "symphony.stakeibc.MsgToggleTradeControllerResponse") + proto.RegisterType((*MsgUpdateHostZoneParams)(nil), "symphony.stakeibc.MsgUpdateHostZoneParams") + proto.RegisterType((*MsgUpdateHostZoneParamsResponse)(nil), "symphony.stakeibc.MsgUpdateHostZoneParamsResponse") +} + +func init() { proto.RegisterFile("symphony/stakeibc/tx.proto", fileDescriptor_c5b8d3ef903e18f4) } + +var fileDescriptor_c5b8d3ef903e18f4 = []byte{ + // 2696 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0x4d, 0x6c, 0xdc, 0xc6, + 0xf5, 0xd7, 0x5a, 0x9f, 0x7e, 0x92, 0x2c, 0x89, 0x92, 0xec, 0x15, 0x65, 0x69, 0x25, 0x2a, 0x31, + 0x14, 0x25, 0xd2, 0x46, 0x92, 0x93, 0x00, 0xca, 0x3f, 0x7f, 0x54, 0x92, 0x5d, 0x57, 0x4d, 0x64, + 0x1b, 0x94, 0x92, 0x02, 0x09, 0x50, 0x62, 0x96, 0x1c, 0xef, 0xb2, 0x26, 0x39, 0x5b, 0x0e, 0x57, + 0x5e, 0xa5, 0x3d, 0x04, 0x39, 0x05, 0xbd, 0xb4, 0x3d, 0xf5, 0x56, 0xe4, 0xd4, 0x43, 0x4f, 0x39, + 0xe4, 0xd0, 0x63, 0x0f, 0x45, 0x91, 0x4b, 0x81, 0x34, 0x87, 0xb6, 0x08, 0x0a, 0x35, 0x48, 0x0a, + 0xa4, 0xe8, 0xd1, 0x40, 0x81, 0x9e, 0x8a, 0x62, 0x66, 0xc8, 0x59, 0x92, 0x4b, 0xee, 0xae, 0x05, + 0xa5, 0xc9, 0xc5, 0x32, 0x67, 0xde, 0xbc, 0x8f, 0xdf, 0xbc, 0xf7, 0x66, 0xde, 0x9b, 0x05, 0x95, + 0x9e, 0xba, 0xf5, 0x1a, 0xf1, 0x4e, 0xcb, 0x34, 0x40, 0x0f, 0xb1, 0x5d, 0x31, 0xcb, 0x41, 0x73, + 0xa3, 0xee, 0x93, 0x80, 0x28, 0x53, 0xd1, 0xdc, 0x46, 0x34, 0xa7, 0x4e, 0x21, 0xd7, 0xf6, 0x48, + 0x99, 0xff, 0x2b, 0xa8, 0xd4, 0x39, 0x93, 0x50, 0x97, 0x50, 0x83, 0x7f, 0x95, 0xc5, 0x47, 0x38, + 0xb5, 0x28, 0xbe, 0xca, 0x15, 0x44, 0x71, 0xf9, 0x64, 0xb3, 0x82, 0x03, 0xb4, 0x59, 0x36, 0x89, + 0xed, 0x85, 0xf3, 0xd7, 0xc2, 0x79, 0x97, 0x56, 0xcb, 0x27, 0x9b, 0xec, 0x4f, 0x38, 0x31, 0x53, + 0x25, 0x55, 0x22, 0x18, 0xb2, 0xff, 0x85, 0xa3, 0xcb, 0xed, 0xba, 0x9e, 0x20, 0xc7, 0xb6, 0x50, + 0x40, 0x7c, 0x41, 0xa2, 0xbd, 0xd7, 0x0f, 0xda, 0x21, 0xad, 0xbe, 0x5e, 0xb7, 0x50, 0x80, 0x0f, + 0x3c, 0x0f, 0xfb, 0x3a, 0xb6, 0xb0, 0x5b, 0x0f, 0x6c, 0xe2, 0xe9, 0x28, 0xc0, 0x7b, 0xa4, 0xe1, + 0x59, 0x54, 0xd9, 0x82, 0x61, 0xd3, 0xc7, 0x6c, 0x5d, 0xb1, 0xb0, 0x54, 0x58, 0xbd, 0xbc, 0x57, + 0xfc, 0xe4, 0xc3, 0xf5, 0x99, 0x50, 0xf7, 0x5d, 0xcb, 0xf2, 0x31, 0xa5, 0x47, 0x81, 0x6f, 0x7b, + 0x55, 0x3d, 0x22, 0x54, 0xe6, 0x60, 0xc4, 0xac, 0x21, 0xdb, 0x33, 0x6c, 0xab, 0x78, 0x89, 0x2d, + 0xd2, 0x87, 0xf9, 0xf7, 0x81, 0xa5, 0x38, 0x30, 0xe7, 0xb2, 0x09, 0x26, 0xcf, 0xf0, 0xa5, 0x40, + 0xc3, 0x47, 0x01, 0x2e, 0xf6, 0x73, 0x01, 0x9b, 0x1f, 0x9d, 0x95, 0xfa, 0x3e, 0x3d, 0x2b, 0xcd, + 0x0b, 0x21, 0xd4, 0x7a, 0xb8, 0x61, 0x93, 0xb2, 0x8b, 0x82, 0xda, 0xc6, 0x6b, 0xb8, 0x8a, 0xcc, + 0xd3, 0x5b, 0xd8, 0xfc, 0xe4, 0xc3, 0x75, 0x08, 0x75, 0xb8, 0x85, 0x4d, 0xfd, 0xaa, 0x6b, 0x7b, + 0x19, 0x26, 0x70, 0x69, 0xa8, 0x99, 0x23, 0x6d, 0xe0, 0xfc, 0xd2, 0x50, 0x33, 0x43, 0xda, 0xce, + 0x4b, 0xef, 0x7e, 0xf9, 0xc1, 0x5a, 0x04, 0xc2, 0x4f, 0xbe, 0xfc, 0x60, 0xed, 0x86, 0x04, 0x5f, + 0x02, 0x9d, 0x85, 0xb1, 0xf6, 0x1c, 0xac, 0x75, 0xdf, 0x09, 0x1d, 0xd3, 0x3a, 0xf1, 0x28, 0xd6, + 0x7e, 0x57, 0x80, 0x2b, 0x87, 0xb4, 0xfa, 0x9a, 0xfd, 0xc3, 0x86, 0x6d, 0x1d, 0x31, 0x09, 0xe7, + 0xda, 0xa4, 0x17, 0x60, 0x08, 0xb9, 0xa4, 0xe1, 0x05, 0x62, 0x8b, 0xf6, 0x16, 0x42, 0x20, 0x66, + 0xdb, 0x81, 0x38, 0xf0, 0x02, 0x3d, 0x24, 0x56, 0x16, 0x00, 0x6a, 0x84, 0x06, 0x86, 0x85, 0x3d, + 0xe2, 0x8a, 0x1d, 0xd3, 0x2f, 0xb3, 0x91, 0x5b, 0x6c, 0x60, 0x67, 0x35, 0x8d, 0xc1, 0xb5, 0x38, + 0x06, 0x31, 0x9d, 0xb5, 0x77, 0x0a, 0x70, 0x35, 0x39, 0x14, 0x59, 0xa8, 0x3c, 0x80, 0x11, 0x1a, + 0x18, 0x01, 0x79, 0x88, 0x3d, 0x6e, 0xcf, 0xe8, 0xd6, 0xdc, 0x46, 0x68, 0x0c, 0x8b, 0x8f, 0x8d, + 0x30, 0x3e, 0x36, 0xf6, 0x89, 0xed, 0xed, 0x3d, 0xcf, 0xf4, 0xfe, 0xf5, 0xdf, 0x4a, 0xab, 0x55, + 0x3b, 0xa8, 0x35, 0x2a, 0x1b, 0x26, 0x71, 0xc3, 0xd0, 0x0a, 0xff, 0xac, 0x53, 0xeb, 0x61, 0x39, + 0x38, 0xad, 0x63, 0xca, 0x17, 0x50, 0x7d, 0x98, 0x06, 0xc7, 0x8c, 0xb7, 0xf6, 0x69, 0x01, 0xa6, + 0x98, 0x0a, 0x47, 0x87, 0x5f, 0x13, 0x98, 0xeb, 0x30, 0xed, 0x50, 0x57, 0x58, 0x6a, 0xd8, 0x15, + 0x33, 0x81, 0xea, 0xa4, 0x43, 0x5d, 0xae, 0xe7, 0x41, 0xc5, 0x14, 0xe0, 0x3e, 0x9b, 0x06, 0x57, + 0x4d, 0x80, 0x9b, 0x30, 0x43, 0xbb, 0x0b, 0x73, 0x6d, 0x83, 0x12, 0xe1, 0x4d, 0x98, 0x09, 0x7c, + 0xe4, 0x51, 0x64, 0xf2, 0x78, 0x30, 0x89, 0x5b, 0x77, 0x70, 0x80, 0xb9, 0xc1, 0x23, 0xfa, 0x74, + 0x6c, 0x6e, 0x3f, 0x9c, 0xd2, 0xfe, 0x5a, 0x80, 0x89, 0x43, 0x5a, 0xdd, 0x77, 0x30, 0xf2, 0xf7, + 0x90, 0x83, 0x3c, 0x13, 0x5f, 0x74, 0x72, 0x68, 0xa1, 0xd8, 0xff, 0x24, 0x28, 0x16, 0x81, 0x71, + 0xf0, 0x3c, 0xec, 0x88, 0x98, 0xd6, 0xa3, 0xcf, 0x9d, 0x67, 0xd2, 0x80, 0x15, 0xe3, 0x80, 0xc5, + 0x4d, 0xd1, 0xe6, 0xe0, 0x5a, 0x6a, 0x48, 0x06, 0xdc, 0xbf, 0x45, 0xc0, 0xb1, 0xa0, 0xc4, 0xee, + 0xff, 0xdc, 0x47, 0xe6, 0x81, 0x87, 0x97, 0xf1, 0x36, 0xf1, 0xc2, 0x0c, 0xa9, 0x8f, 0xb0, 0x81, + 0x37, 0x89, 0x87, 0x95, 0x9b, 0x30, 0xe2, 0x63, 0x13, 0xdb, 0x27, 0xd8, 0x0f, 0xf3, 0x59, 0xbe, + 0x22, 0x92, 0xb2, 0x4b, 0x90, 0xc6, 0xec, 0xd4, 0x8a, 0x3c, 0x46, 0x63, 0x23, 0x12, 0x94, 0xcf, + 0x86, 0x60, 0x9a, 0x4f, 0x55, 0x6d, 0x1a, 0x60, 0xff, 0x3b, 0x91, 0x46, 0xaf, 0xc0, 0xb8, 0x49, + 0x3c, 0x0f, 0x0b, 0xc7, 0x8a, 0xf6, 0x78, 0xaf, 0xf8, 0xf8, 0xac, 0x34, 0x73, 0x8a, 0x5c, 0x67, + 0x47, 0x4b, 0x4c, 0x6b, 0xfa, 0x58, 0xeb, 0xfb, 0xc0, 0x52, 0x34, 0x18, 0xab, 0x60, 0xb3, 0xb6, + 0xbd, 0x55, 0xf7, 0xf1, 0x03, 0xbb, 0x59, 0x1c, 0xe3, 0x06, 0x27, 0xc6, 0x94, 0x9b, 0x89, 0x14, + 0x24, 0xcc, 0x9e, 0x7d, 0x7c, 0x56, 0x9a, 0x12, 0xfc, 0x5b, 0x73, 0x5a, 0x2c, 0x33, 0x29, 0x9b, + 0x70, 0xb9, 0x15, 0x61, 0x83, 0x7c, 0xd1, 0xcc, 0xe3, 0xb3, 0xd2, 0xa4, 0x58, 0x24, 0xa7, 0x34, + 0x7d, 0xc4, 0x0e, 0xe3, 0x2d, 0xbe, 0xcb, 0x43, 0xbd, 0xee, 0xf2, 0x5d, 0x10, 0xd1, 0xf3, 0x00, + 0xfb, 0x46, 0xe8, 0x86, 0x0c, 0x05, 0xe0, 0xeb, 0x17, 0x1f, 0x9f, 0x95, 0x54, 0x21, 0x30, 0x83, + 0x48, 0xd3, 0xa7, 0xa2, 0xd1, 0x7d, 0x31, 0x78, 0x60, 0x29, 0xdf, 0x86, 0xc9, 0x86, 0x57, 0x21, + 0x9e, 0x65, 0x7b, 0x55, 0xa3, 0x8e, 0x7d, 0x9b, 0x58, 0xc5, 0xd1, 0xa5, 0xc2, 0xea, 0xc0, 0xde, + 0xfc, 0xe3, 0xb3, 0xd2, 0x35, 0xc1, 0x2c, 0x4d, 0xa1, 0xe9, 0x13, 0x72, 0xe8, 0x3e, 0x1f, 0x51, + 0x10, 0x4c, 0xb3, 0x83, 0x37, 0x7d, 0x08, 0x8e, 0x9f, 0xf7, 0x10, 0x9c, 0x72, 0x6d, 0x2f, 0x75, + 0xda, 0x32, 0x11, 0xa8, 0xd9, 0x26, 0xe2, 0xca, 0xf9, 0x45, 0xa0, 0x66, 0x4a, 0xc4, 0x4b, 0x50, + 0x64, 0x09, 0xd3, 0xe1, 0x29, 0xcd, 0xe0, 0x5e, 0x6b, 0x60, 0x0f, 0x55, 0x1c, 0x6c, 0x15, 0x27, + 0x78, 0xee, 0x9a, 0x75, 0xa8, 0x1b, 0xcb, 0x78, 0xb7, 0xc5, 0xa4, 0x72, 0x1b, 0x4a, 0x26, 0x71, + 0xdd, 0x86, 0x67, 0x07, 0xa7, 0x46, 0x9d, 0x10, 0xc7, 0x08, 0x7c, 0x8c, 0x68, 0xc3, 0x3f, 0x35, + 0x90, 0xd8, 0xc8, 0xe2, 0x24, 0x77, 0xb5, 0xeb, 0x92, 0xec, 0x3e, 0x21, 0xce, 0x71, 0x48, 0x14, + 0x6e, 0xb6, 0x72, 0x13, 0xae, 0x31, 0x13, 0x5d, 0x4c, 0x29, 0xaa, 0x62, 0xca, 0xe0, 0x36, 0x6c, + 0x13, 0x19, 0x41, 0xb3, 0x38, 0xc5, 0x36, 0x45, 0x67, 0x08, 0x1c, 0x86, 0xb3, 0xf7, 0xb1, 0x7f, + 0x60, 0xa2, 0xe3, 0xe6, 0xce, 0x0b, 0xef, 0xbd, 0x5f, 0xea, 0xfb, 0xc7, 0xfb, 0xa5, 0xbe, 0x74, + 0xdc, 0x5d, 0x4f, 0xc6, 0x5d, 0x32, 0x94, 0xb4, 0x05, 0x98, 0xcf, 0x18, 0x96, 0x11, 0x78, 0x56, + 0xe0, 0x19, 0x7e, 0xdf, 0x41, 0xb6, 0xfb, 0xba, 0x67, 0x61, 0x07, 0x57, 0x51, 0x80, 0x2d, 0x7e, + 0x64, 0x9c, 0xef, 0xde, 0xb6, 0x04, 0x63, 0x32, 0xd5, 0xb4, 0xd2, 0x33, 0x44, 0xd9, 0xe6, 0xc0, + 0x52, 0x66, 0x60, 0x10, 0xd7, 0x89, 0x59, 0xe3, 0x89, 0x68, 0x40, 0x17, 0x1f, 0x8a, 0x1a, 0xcb, + 0x42, 0x83, 0x22, 0x43, 0xc9, 0x5c, 0xb3, 0x9d, 0xb6, 0x59, 0x4b, 0xa6, 0xe0, 0x2c, 0xe5, 0xbf, + 0x3b, 0x30, 0x32, 0x30, 0x39, 0xa8, 0xad, 0xc0, 0x72, 0x2e, 0x89, 0x44, 0xe1, 0xb7, 0x85, 0x30, + 0x45, 0x55, 0x44, 0xd6, 0x7e, 0x23, 0xba, 0xe6, 0x9e, 0x0f, 0x82, 0x44, 0xb6, 0xbd, 0x94, 0xca, + 0xb6, 0x2b, 0x30, 0xee, 0x35, 0x5c, 0xc3, 0x8f, 0x64, 0x85, 0x28, 0x8c, 0x79, 0x0d, 0x57, 0xca, + 0xdf, 0x79, 0x3e, 0x6d, 0x70, 0x29, 0xb9, 0xc9, 0x6d, 0x7a, 0x6a, 0x4b, 0xb0, 0x98, 0x3d, 0x23, + 0x8d, 0xfc, 0x43, 0x01, 0x26, 0x0f, 0x69, 0x75, 0xd7, 0xb2, 0xbe, 0x4a, 0xf3, 0xfe, 0x0f, 0x40, + 0x16, 0x09, 0xb4, 0xd8, 0xbf, 0xd4, 0xbf, 0x3a, 0xba, 0x75, 0x7d, 0xa3, 0xad, 0xb2, 0xd9, 0x90, + 0x3a, 0xe8, 0x31, 0xfa, 0x9d, 0xb5, 0xb4, 0xdd, 0x73, 0x71, 0xbb, 0x13, 0xaa, 0x6b, 0x2a, 0x14, + 0xd3, 0x63, 0xd2, 0xd6, 0x07, 0x30, 0x21, 0x47, 0xbf, 0x87, 0xed, 0x6a, 0x2d, 0x50, 0x5e, 0x86, + 0xe1, 0x28, 0x48, 0x85, 0xa5, 0xcb, 0x9f, 0x7c, 0xb8, 0xbe, 0x10, 0x5a, 0x2a, 0x89, 0x53, 0x26, + 0x87, 0x2b, 0x94, 0xab, 0x30, 0xf4, 0x88, 0xb3, 0xe1, 0xf6, 0x0e, 0xe8, 0xe1, 0x97, 0xf6, 0x38, + 0x0c, 0x9f, 0x1a, 0xf2, 0xaa, 0x38, 0x25, 0xf1, 0x2b, 0x00, 0xf7, 0x1e, 0x4c, 0x49, 0xb0, 0x0c, + 0xa1, 0x42, 0x84, 0xb1, 0xd6, 0x09, 0x63, 0xa1, 0x90, 0x3e, 0x79, 0x92, 0xd2, 0xb0, 0x5b, 0x60, + 0x65, 0x9a, 0x15, 0x85, 0x54, 0xe6, 0xa4, 0xdc, 0x81, 0x3f, 0x16, 0x40, 0x39, 0xa4, 0xd5, 0x5b, + 0x98, 0xdd, 0xfb, 0x24, 0xd5, 0x57, 0xe1, 0x6f, 0x23, 0x27, 0xc8, 0xe1, 0xf9, 0x37, 0xbc, 0xf0, + 0xf5, 0xb2, 0xaf, 0x27, 0xc8, 0x61, 0x23, 0x3b, 0xcf, 0xa5, 0xed, 0x9f, 0x8f, 0xdb, 0x9f, 0x52, + 0x5e, 0xbb, 0x0e, 0x6a, 0xfb, 0xa8, 0xb4, 0xf8, 0x9f, 0x85, 0x30, 0xd5, 0xd2, 0x80, 0xf8, 0xf8, + 0xc0, 0x0b, 0xb0, 0xcf, 0xef, 0xa4, 0xbb, 0xa6, 0xc9, 0xef, 0x60, 0x17, 0x7c, 0xcf, 0x5d, 0x49, + 0xdf, 0x91, 0xc4, 0xb5, 0x2e, 0x79, 0x13, 0x5a, 0x81, 0x71, 0x24, 0xc4, 0x1b, 0xe4, 0x91, 0x17, + 0xdd, 0xef, 0xf4, 0xb1, 0x70, 0xf0, 0x1e, 0x1b, 0xdb, 0xd9, 0x4a, 0x83, 0xb0, 0x9c, 0x4c, 0x36, + 0x19, 0xf6, 0x68, 0x4f, 0xc3, 0x4a, 0x07, 0x5b, 0x25, 0x26, 0xbf, 0x8c, 0x8e, 0x17, 0x42, 0xf1, + 0x2d, 0x91, 0x7c, 0x59, 0x39, 0x20, 0x2e, 0x26, 0x17, 0x8c, 0x48, 0x17, 0x3b, 0x32, 0x75, 0x90, + 0xc7, 0x43, 0x96, 0x7e, 0xd2, 0x8a, 0xbf, 0x17, 0x60, 0x49, 0xd6, 0xd6, 0x72, 0xe3, 0x8f, 0x6a, + 0xc8, 0xc7, 0xf4, 0x76, 0xd3, 0xac, 0xf1, 0x5b, 0xc5, 0x05, 0x6f, 0xef, 0xcb, 0xc0, 0x9c, 0x94, + 0xd4, 0xf1, 0x13, 0xba, 0x35, 0x5b, 0xb1, 0x73, 0x33, 0x8d, 0xc4, 0x4a, 0x7b, 0x13, 0xe1, 0x0d, + 0xe4, 0x24, 0x2d, 0xd0, 0xd6, 0x60, 0xb5, 0x9b, 0x95, 0x12, 0x92, 0x3f, 0x89, 0x13, 0x73, 0x1f, + 0x39, 0x76, 0x85, 0x5d, 0xd0, 0x5a, 0xe0, 0x7d, 0xa3, 0x80, 0xe8, 0x7c, 0x8e, 0x66, 0x68, 0x1f, + 0x9e, 0xa3, 0x19, 0x33, 0xd2, 0xf4, 0x9f, 0x8a, 0x82, 0x5f, 0xc7, 0xb4, 0xe1, 0x62, 0x59, 0xb2, + 0x5c, 0xb0, 0x2f, 0x77, 0xae, 0xd2, 0x93, 0xb2, 0xb5, 0x79, 0x1e, 0x64, 0xc9, 0x41, 0xa9, 0xee, + 0x6f, 0x46, 0x78, 0x8d, 0xb5, 0xcf, 0x58, 0xe1, 0x63, 0x1f, 0x59, 0x58, 0x27, 0x8d, 0x00, 0x2b, + 0x2f, 0xc2, 0x65, 0xd4, 0x08, 0x6a, 0xc4, 0xb7, 0x83, 0xd3, 0xae, 0x2a, 0xb7, 0x48, 0x15, 0x0d, + 0xc6, 0x79, 0x36, 0x4e, 0x69, 0x3e, 0xca, 0x06, 0xf7, 0xc3, 0x3d, 0xdb, 0x83, 0x45, 0x1a, 0xf8, + 0xb6, 0x85, 0x8d, 0x80, 0x18, 0x3e, 0x7e, 0x84, 0x7c, 0xcb, 0xc8, 0x4a, 0x56, 0xaa, 0xa0, 0x3a, + 0x26, 0x3a, 0xa7, 0xd9, 0x8f, 0xa7, 0xae, 0x6f, 0xc1, 0x42, 0x8b, 0x47, 0xc0, 0xf4, 0x4e, 0xb1, + 0x10, 0xa9, 0x6c, 0x2e, 0x62, 0xc1, 0x4d, 0x4b, 0x70, 0x38, 0x00, 0x51, 0xc6, 0xb5, 0x74, 0xc8, + 0x2a, 0xaa, 0xc4, 0x5d, 0x73, 0x81, 0x51, 0x46, 0x7a, 0x1c, 0xb7, 0x15, 0x50, 0xaf, 0xc2, 0x4a, + 0xc4, 0x22, 0x52, 0x26, 0x8b, 0x17, 0x2f, 0xf0, 0xf4, 0x45, 0x41, 0x1a, 0xaa, 0xd4, 0xce, 0xec, + 0x0e, 0x2c, 0x87, 0x2c, 0x88, 0x21, 0x14, 0xcc, 0x60, 0x35, 0x2c, 0x0a, 0x09, 0x4e, 0x78, 0x4c, + 0xd8, 0xae, 0xb6, 0x33, 0x2a, 0xc3, 0x4c, 0xa8, 0x15, 0xaf, 0x3a, 0x0d, 0xe2, 0x71, 0x7e, 0xc5, + 0x11, 0xbe, 0x76, 0x4a, 0xcc, 0xf1, 0x2a, 0xf4, 0x9e, 0xc7, 0x38, 0x28, 0xdb, 0x70, 0x35, 0xbd, + 0x40, 0x7c, 0x17, 0x2f, 0xf3, 0x25, 0xd3, 0x89, 0x25, 0x02, 0x0c, 0x65, 0x13, 0x66, 0xd3, 0x8b, + 0xb8, 0x56, 0xa2, 0x1c, 0xd5, 0x95, 0xc4, 0x1a, 0x6e, 0xb2, 0xb2, 0x0e, 0xd3, 0xad, 0x02, 0xba, + 0xb5, 0x60, 0x54, 0xb4, 0xa4, 0x64, 0x39, 0x1d, 0x91, 0x3f, 0x0b, 0x4a, 0x92, 0x9c, 0x5b, 0x21, + 0xaa, 0xf6, 0x89, 0x18, 0x35, 0xb7, 0x61, 0x1e, 0x86, 0x79, 0xe9, 0x65, 0x5b, 0xbc, 0xee, 0x1c, + 0xd8, 0xbb, 0x54, 0x2c, 0xe8, 0x43, 0x6c, 0xe8, 0xc0, 0x52, 0xfe, 0x1f, 0x54, 0x56, 0x5a, 0x21, + 0xc7, 0x21, 0x8f, 0xb0, 0x65, 0xd0, 0x47, 0xa8, 0x6e, 0x38, 0x84, 0xd2, 0x78, 0x11, 0xc9, 0xe8, + 0xaf, 0xba, 0xa8, 0xb9, 0x2b, 0x88, 0x8e, 0x1e, 0xa1, 0xfa, 0x6b, 0x84, 0x52, 0x9e, 0xc4, 0x6f, + 0xc3, 0x04, 0x2b, 0x70, 0xf9, 0xba, 0xb0, 0xcf, 0x32, 0xd1, 0x4b, 0x9f, 0x65, 0xdc, 0xb5, 0x3d, + 0xc6, 0x68, 0x57, 0xb4, 0x5b, 0x18, 0x1b, 0xd4, 0x4c, 0xb0, 0x99, 0xec, 0x8d, 0x0d, 0x6a, 0xc6, + 0xd8, 0x1c, 0x8a, 0x72, 0x5b, 0xba, 0x47, 0xc8, 0x6a, 0xaa, 0x17, 0x56, 0xac, 0xb4, 0x8e, 0x3c, + 0x46, 0xb0, 0xdb, 0x29, 0xb3, 0x9c, 0xd2, 0x8a, 0xe4, 0xb6, 0xda, 0x31, 0x9d, 0x22, 0xc2, 0xda, + 0x31, 0x3d, 0x1c, 0xaf, 0x9a, 0xa6, 0xe5, 0x7d, 0xe8, 0x02, 0x32, 0xcb, 0x32, 0x8c, 0xc5, 0x1d, + 0x2d, 0x4a, 0x2c, 0x31, 0xff, 0xea, 0xd6, 0x38, 0xee, 0x66, 0x61, 0x5a, 0xd5, 0xd0, 0xc2, 0xf4, + 0xb0, 0xb4, 0xf0, 0x3f, 0xfd, 0xdc, 0x42, 0x71, 0x24, 0x7e, 0x13, 0x2c, 0x8c, 0x7b, 0xff, 0xc0, + 0x13, 0x7a, 0xff, 0x60, 0x57, 0xef, 0xbf, 0xd3, 0xee, 0xfd, 0xa2, 0x65, 0x55, 0xea, 0xe8, 0x6b, + 0xc5, 0x42, 0xda, 0xff, 0xef, 0xb4, 0xfb, 0xff, 0x70, 0xaf, 0x8c, 0xbe, 0xce, 0x08, 0x48, 0x6f, + 0x74, 0xe8, 0x1f, 0xe9, 0x61, 0xe9, 0x1f, 0xbf, 0xbf, 0xc4, 0x4f, 0xde, 0x23, 0x1c, 0xec, 0xc7, + 0x1b, 0x3e, 0xac, 0x0a, 0xbf, 0xf8, 0x1b, 0xe1, 0x2d, 0x18, 0xf5, 0x39, 0xe3, 0xf8, 0x3b, 0xd7, + 0x4a, 0x0f, 0x1d, 0x31, 0x1d, 0xc4, 0x3a, 0xbe, 0xc7, 0x06, 0x2c, 0xc4, 0x1b, 0x5f, 0xec, 0x4f, + 0xf8, 0x74, 0x10, 0x62, 0x3b, 0xd0, 0x0b, 0xb6, 0x73, 0x4e, 0xab, 0x3b, 0x66, 0x1d, 0x89, 0x97, + 0x90, 0x10, 0xe3, 0xce, 0x25, 0x65, 0x36, 0x54, 0xe1, 0x35, 0x3c, 0x7b, 0x52, 0xa2, 0xfd, 0xab, + 0x4b, 0xbc, 0xe2, 0x3f, 0x26, 0xd5, 0xaa, 0x83, 0xa3, 0xe3, 0x3e, 0xf0, 0x89, 0xe3, 0x60, 0xff, + 0xa2, 0xc1, 0x7e, 0x1d, 0xa6, 0xea, 0xd8, 0x77, 0x6d, 0x4a, 0xf9, 0xd3, 0x06, 0xaf, 0x75, 0x39, + 0xe4, 0x57, 0xb6, 0x56, 0x33, 0x2a, 0xed, 0xdd, 0x46, 0x50, 0x7b, 0xfb, 0xbe, 0x5c, 0x20, 0x6a, + 0x63, 0x7d, 0xb2, 0x9e, 0x1a, 0x51, 0x8a, 0xad, 0x26, 0x44, 0xf8, 0xca, 0x10, 0xeb, 0x30, 0x38, + 0x7c, 0xc3, 0x78, 0x9c, 0x8e, 0xe8, 0xe1, 0x57, 0x97, 0xa2, 0x26, 0x13, 0x0b, 0x4d, 0xe3, 0xe5, + 0x4a, 0xe6, 0x9c, 0x04, 0xf3, 0xcf, 0x05, 0xfe, 0x56, 0x21, 0x5c, 0x3b, 0xba, 0x34, 0xde, 0x47, + 0x3e, 0x72, 0xe9, 0xb9, 0xd3, 0x5b, 0x07, 0x3c, 0x3b, 0xf4, 0x3c, 0xfb, 0xf3, 0x7b, 0x9e, 0xdb, + 0xed, 0xf1, 0xba, 0xd4, 0x1e, 0xaf, 0x49, 0xed, 0xb5, 0x65, 0x28, 0xe5, 0x4c, 0x45, 0xc6, 0xaf, + 0x6d, 0xc0, 0x6c, 0xe6, 0x8e, 0x29, 0x97, 0x61, 0xf0, 0x8e, 0xbe, 0x7b, 0xf7, 0x78, 0xb2, 0x4f, + 0x01, 0x18, 0xd2, 0x6f, 0xbf, 0x71, 0xef, 0xd5, 0xdb, 0x93, 0x85, 0xad, 0x7f, 0x4d, 0x43, 0xff, + 0x21, 0xad, 0x2a, 0x6f, 0xc1, 0x68, 0xfc, 0x91, 0x6f, 0x39, 0xc3, 0x13, 0x92, 0xaf, 0x91, 0xea, + 0x33, 0x5d, 0x49, 0xe4, 0x73, 0x9a, 0x05, 0x57, 0x52, 0x8f, 0x88, 0x4f, 0xe5, 0x2c, 0x4e, 0x50, + 0xa9, 0xcf, 0xf5, 0x42, 0x25, 0xa5, 0xbc, 0x05, 0xa3, 0xf1, 0x37, 0xa8, 0x1c, 0x13, 0x62, 0x24, + 0x79, 0x26, 0x64, 0xbc, 0xe7, 0x28, 0x3f, 0x80, 0xc9, 0xb6, 0xb7, 0x9c, 0x1b, 0x79, 0xcb, 0x93, + 0x74, 0xea, 0x46, 0x6f, 0x74, 0x52, 0xd6, 0x8f, 0xe1, 0x6a, 0x4e, 0xd7, 0x3a, 0x07, 0x90, 0x6c, + 0x6a, 0xf5, 0xe6, 0x93, 0x50, 0x4b, 0xe9, 0x14, 0xa6, 0xb3, 0xba, 0xc5, 0xb9, 0x58, 0xb5, 0x91, + 0xaa, 0x9b, 0x3d, 0x93, 0x4a, 0xa1, 0x08, 0xc6, 0x93, 0xdd, 0xdb, 0x95, 0x6c, 0x1e, 0x09, 0x22, + 0xf5, 0xd9, 0x1e, 0x88, 0xa4, 0x88, 0x1f, 0xc1, 0x6c, 0x66, 0x63, 0x2f, 0x17, 0xd4, 0xcc, 0x2e, + 0x60, 0x2e, 0xa8, 0x1d, 0x7b, 0x86, 0x4a, 0x15, 0x26, 0xd2, 0xfd, 0xc2, 0xa7, 0xb3, 0x19, 0xa5, + 0xc8, 0xd4, 0xf5, 0x9e, 0xc8, 0xa4, 0xa0, 0x77, 0x0b, 0x50, 0xcc, 0xed, 0xd3, 0xe5, 0x3a, 0x62, + 0x36, 0xbd, 0xfa, 0xe2, 0x93, 0xd1, 0x27, 0x1d, 0x38, 0xb3, 0x2f, 0x96, 0xeb, 0xc0, 0x59, 0xd4, + 0xf9, 0x0e, 0xdc, 0xa9, 0xa7, 0xa5, 0xfc, 0xbc, 0x00, 0x0b, 0x9d, 0x1b, 0x5a, 0xdb, 0xd9, 0x7c, + 0x3b, 0x2e, 0x52, 0x5f, 0x3e, 0xc7, 0xa2, 0x78, 0x50, 0x65, 0x35, 0x94, 0x72, 0x82, 0x2a, 0x83, + 0x34, 0x2f, 0xa8, 0x3a, 0xb4, 0x73, 0x94, 0xef, 0xc3, 0x58, 0xe2, 0xe7, 0x08, 0x5a, 0x1e, 0x9c, + 0x2d, 0x1a, 0x75, 0xad, 0x3b, 0x8d, 0xe4, 0xff, 0x8b, 0x02, 0x94, 0xba, 0xfd, 0x3e, 0xea, 0x85, + 0x4e, 0xa8, 0xe5, 0x2e, 0x53, 0x5f, 0x39, 0xd7, 0xb2, 0xf8, 0x81, 0x93, 0x6a, 0x62, 0x3d, 0x95, + 0xeb, 0xca, 0x31, 0xaa, 0xbc, 0x03, 0x27, 0xbb, 0xff, 0xc4, 0xce, 0x84, 0xb6, 0xde, 0x53, 0xce, + 0x99, 0x90, 0xa6, 0xcb, 0x3b, 0x13, 0xf2, 0x2a, 0x52, 0x26, 0xab, 0xad, 0x1a, 0xbd, 0xd1, 0x29, + 0x35, 0x74, 0x97, 0x95, 0x57, 0x1b, 0x32, 0x59, 0x6d, 0x75, 0xe1, 0x8d, 0x4e, 0x1b, 0xd2, 0x5d, + 0x56, 0x5e, 0x9d, 0xc1, 0x52, 0x45, 0x4e, 0x8d, 0x91, 0xb3, 0x17, 0xd9, 0xd4, 0x79, 0xa9, 0xa2, + 0xf3, 0xbd, 0x5b, 0x39, 0x85, 0xd9, 0xec, 0x3b, 0x77, 0xce, 0xc9, 0x92, 0x49, 0xac, 0x6e, 0x3f, + 0x01, 0xb1, 0x14, 0x7d, 0x02, 0x33, 0x99, 0x37, 0xd4, 0xb5, 0x4e, 0x00, 0x26, 0x69, 0xd5, 0xad, + 0xde, 0x69, 0x23, 0xb9, 0xea, 0xe0, 0x3b, 0x5f, 0x7e, 0xb0, 0x56, 0xd8, 0xbb, 0xfb, 0xd1, 0xe7, + 0x8b, 0x85, 0x8f, 0x3f, 0x5f, 0x2c, 0x7c, 0xf6, 0xf9, 0x62, 0xe1, 0x67, 0x5f, 0x2c, 0xf6, 0x7d, + 0xfc, 0xc5, 0x62, 0xdf, 0x5f, 0xbe, 0x58, 0xec, 0x7b, 0xf3, 0x66, 0xec, 0x87, 0x62, 0xfc, 0x56, + 0x6c, 0xd3, 0x75, 0x07, 0x55, 0x68, 0xf4, 0x51, 0x3e, 0xd9, 0x7a, 0xa9, 0xdc, 0x8c, 0xfd, 0xc8, + 0xf3, 0xb4, 0x8e, 0x69, 0x65, 0x88, 0xff, 0x6a, 0x72, 0xfb, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, + 0x13, 0x3f, 0x49, 0xba, 0x06, 0x2a, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -2688,7 +2689,7 @@ func NewMsgClient(cc grpc1.ClientConn) MsgClient { func (c *msgClient) LiquidStake(ctx context.Context, in *MsgLiquidStake, opts ...grpc.CallOption) (*MsgLiquidStakeResponse, error) { out := new(MsgLiquidStakeResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/LiquidStake", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Msg/LiquidStake", in, out, opts...) if err != nil { return nil, err } @@ -2697,7 +2698,7 @@ func (c *msgClient) LiquidStake(ctx context.Context, in *MsgLiquidStake, opts .. func (c *msgClient) LSMLiquidStake(ctx context.Context, in *MsgLSMLiquidStake, opts ...grpc.CallOption) (*MsgLSMLiquidStakeResponse, error) { out := new(MsgLSMLiquidStakeResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/LSMLiquidStake", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Msg/LSMLiquidStake", in, out, opts...) if err != nil { return nil, err } @@ -2706,7 +2707,7 @@ func (c *msgClient) LSMLiquidStake(ctx context.Context, in *MsgLSMLiquidStake, o func (c *msgClient) RedeemStake(ctx context.Context, in *MsgRedeemStake, opts ...grpc.CallOption) (*MsgRedeemStakeResponse, error) { out := new(MsgRedeemStakeResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/RedeemStake", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Msg/RedeemStake", in, out, opts...) if err != nil { return nil, err } @@ -2715,7 +2716,7 @@ func (c *msgClient) RedeemStake(ctx context.Context, in *MsgRedeemStake, opts .. func (c *msgClient) RegisterHostZone(ctx context.Context, in *MsgRegisterHostZone, opts ...grpc.CallOption) (*MsgRegisterHostZoneResponse, error) { out := new(MsgRegisterHostZoneResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/RegisterHostZone", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Msg/RegisterHostZone", in, out, opts...) if err != nil { return nil, err } @@ -2724,7 +2725,7 @@ func (c *msgClient) RegisterHostZone(ctx context.Context, in *MsgRegisterHostZon func (c *msgClient) ClaimUndelegatedTokens(ctx context.Context, in *MsgClaimUndelegatedTokens, opts ...grpc.CallOption) (*MsgClaimUndelegatedTokensResponse, error) { out := new(MsgClaimUndelegatedTokensResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/ClaimUndelegatedTokens", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Msg/ClaimUndelegatedTokens", in, out, opts...) if err != nil { return nil, err } @@ -2733,7 +2734,7 @@ func (c *msgClient) ClaimUndelegatedTokens(ctx context.Context, in *MsgClaimUnde func (c *msgClient) RebalanceValidators(ctx context.Context, in *MsgRebalanceValidators, opts ...grpc.CallOption) (*MsgRebalanceValidatorsResponse, error) { out := new(MsgRebalanceValidatorsResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/RebalanceValidators", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Msg/RebalanceValidators", in, out, opts...) if err != nil { return nil, err } @@ -2742,7 +2743,7 @@ func (c *msgClient) RebalanceValidators(ctx context.Context, in *MsgRebalanceVal func (c *msgClient) AddValidators(ctx context.Context, in *MsgAddValidators, opts ...grpc.CallOption) (*MsgAddValidatorsResponse, error) { out := new(MsgAddValidatorsResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/AddValidators", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Msg/AddValidators", in, out, opts...) if err != nil { return nil, err } @@ -2751,7 +2752,7 @@ func (c *msgClient) AddValidators(ctx context.Context, in *MsgAddValidators, opt func (c *msgClient) ChangeValidatorWeight(ctx context.Context, in *MsgChangeValidatorWeights, opts ...grpc.CallOption) (*MsgChangeValidatorWeightsResponse, error) { out := new(MsgChangeValidatorWeightsResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/ChangeValidatorWeight", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Msg/ChangeValidatorWeight", in, out, opts...) if err != nil { return nil, err } @@ -2760,7 +2761,7 @@ func (c *msgClient) ChangeValidatorWeight(ctx context.Context, in *MsgChangeVali func (c *msgClient) DeleteValidator(ctx context.Context, in *MsgDeleteValidator, opts ...grpc.CallOption) (*MsgDeleteValidatorResponse, error) { out := new(MsgDeleteValidatorResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/DeleteValidator", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Msg/DeleteValidator", in, out, opts...) if err != nil { return nil, err } @@ -2769,7 +2770,7 @@ func (c *msgClient) DeleteValidator(ctx context.Context, in *MsgDeleteValidator, func (c *msgClient) RestoreInterchainAccount(ctx context.Context, in *MsgRestoreInterchainAccount, opts ...grpc.CallOption) (*MsgRestoreInterchainAccountResponse, error) { out := new(MsgRestoreInterchainAccountResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/RestoreInterchainAccount", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Msg/RestoreInterchainAccount", in, out, opts...) if err != nil { return nil, err } @@ -2778,7 +2779,7 @@ func (c *msgClient) RestoreInterchainAccount(ctx context.Context, in *MsgRestore func (c *msgClient) CloseDelegationChannel(ctx context.Context, in *MsgCloseDelegationChannel, opts ...grpc.CallOption) (*MsgCloseDelegationChannelResponse, error) { out := new(MsgCloseDelegationChannelResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/CloseDelegationChannel", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Msg/CloseDelegationChannel", in, out, opts...) if err != nil { return nil, err } @@ -2787,7 +2788,7 @@ func (c *msgClient) CloseDelegationChannel(ctx context.Context, in *MsgCloseDele func (c *msgClient) UpdateValidatorSharesExchRate(ctx context.Context, in *MsgUpdateValidatorSharesExchRate, opts ...grpc.CallOption) (*MsgUpdateValidatorSharesExchRateResponse, error) { out := new(MsgUpdateValidatorSharesExchRateResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/UpdateValidatorSharesExchRate", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Msg/UpdateValidatorSharesExchRate", in, out, opts...) if err != nil { return nil, err } @@ -2796,7 +2797,7 @@ func (c *msgClient) UpdateValidatorSharesExchRate(ctx context.Context, in *MsgUp func (c *msgClient) CalibrateDelegation(ctx context.Context, in *MsgCalibrateDelegation, opts ...grpc.CallOption) (*MsgCalibrateDelegationResponse, error) { out := new(MsgCalibrateDelegationResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/CalibrateDelegation", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Msg/CalibrateDelegation", in, out, opts...) if err != nil { return nil, err } @@ -2805,7 +2806,7 @@ func (c *msgClient) CalibrateDelegation(ctx context.Context, in *MsgCalibrateDel func (c *msgClient) ClearBalance(ctx context.Context, in *MsgClearBalance, opts ...grpc.CallOption) (*MsgClearBalanceResponse, error) { out := new(MsgClearBalanceResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/ClearBalance", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Msg/ClearBalance", in, out, opts...) if err != nil { return nil, err } @@ -2814,7 +2815,7 @@ func (c *msgClient) ClearBalance(ctx context.Context, in *MsgClearBalance, opts func (c *msgClient) UpdateInnerRedemptionRateBounds(ctx context.Context, in *MsgUpdateInnerRedemptionRateBounds, opts ...grpc.CallOption) (*MsgUpdateInnerRedemptionRateBoundsResponse, error) { out := new(MsgUpdateInnerRedemptionRateBoundsResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/UpdateInnerRedemptionRateBounds", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Msg/UpdateInnerRedemptionRateBounds", in, out, opts...) if err != nil { return nil, err } @@ -2823,7 +2824,7 @@ func (c *msgClient) UpdateInnerRedemptionRateBounds(ctx context.Context, in *Msg func (c *msgClient) ResumeHostZone(ctx context.Context, in *MsgResumeHostZone, opts ...grpc.CallOption) (*MsgResumeHostZoneResponse, error) { out := new(MsgResumeHostZoneResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/ResumeHostZone", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Msg/ResumeHostZone", in, out, opts...) if err != nil { return nil, err } @@ -2832,7 +2833,7 @@ func (c *msgClient) ResumeHostZone(ctx context.Context, in *MsgResumeHostZone, o func (c *msgClient) CreateTradeRoute(ctx context.Context, in *MsgCreateTradeRoute, opts ...grpc.CallOption) (*MsgCreateTradeRouteResponse, error) { out := new(MsgCreateTradeRouteResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/CreateTradeRoute", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Msg/CreateTradeRoute", in, out, opts...) if err != nil { return nil, err } @@ -2841,7 +2842,7 @@ func (c *msgClient) CreateTradeRoute(ctx context.Context, in *MsgCreateTradeRout func (c *msgClient) DeleteTradeRoute(ctx context.Context, in *MsgDeleteTradeRoute, opts ...grpc.CallOption) (*MsgDeleteTradeRouteResponse, error) { out := new(MsgDeleteTradeRouteResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/DeleteTradeRoute", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Msg/DeleteTradeRoute", in, out, opts...) if err != nil { return nil, err } @@ -2850,7 +2851,7 @@ func (c *msgClient) DeleteTradeRoute(ctx context.Context, in *MsgDeleteTradeRout func (c *msgClient) UpdateTradeRoute(ctx context.Context, in *MsgUpdateTradeRoute, opts ...grpc.CallOption) (*MsgUpdateTradeRouteResponse, error) { out := new(MsgUpdateTradeRouteResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/UpdateTradeRoute", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Msg/UpdateTradeRoute", in, out, opts...) if err != nil { return nil, err } @@ -2859,7 +2860,7 @@ func (c *msgClient) UpdateTradeRoute(ctx context.Context, in *MsgUpdateTradeRout func (c *msgClient) SetCommunityPoolRebate(ctx context.Context, in *MsgSetCommunityPoolRebate, opts ...grpc.CallOption) (*MsgSetCommunityPoolRebateResponse, error) { out := new(MsgSetCommunityPoolRebateResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/SetCommunityPoolRebate", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Msg/SetCommunityPoolRebate", in, out, opts...) if err != nil { return nil, err } @@ -2868,7 +2869,7 @@ func (c *msgClient) SetCommunityPoolRebate(ctx context.Context, in *MsgSetCommun func (c *msgClient) ToggleTradeController(ctx context.Context, in *MsgToggleTradeController, opts ...grpc.CallOption) (*MsgToggleTradeControllerResponse, error) { out := new(MsgToggleTradeControllerResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/ToggleTradeController", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Msg/ToggleTradeController", in, out, opts...) if err != nil { return nil, err } @@ -2877,7 +2878,7 @@ func (c *msgClient) ToggleTradeController(ctx context.Context, in *MsgToggleTrad func (c *msgClient) UpdateHostZoneParams(ctx context.Context, in *MsgUpdateHostZoneParams, opts ...grpc.CallOption) (*MsgUpdateHostZoneParamsResponse, error) { out := new(MsgUpdateHostZoneParamsResponse) - err := c.cc.Invoke(ctx, "/stride.stakeibc.Msg/UpdateHostZoneParams", in, out, opts...) + err := c.cc.Invoke(ctx, "/symphony.stakeibc.Msg/UpdateHostZoneParams", in, out, opts...) if err != nil { return nil, err } @@ -2995,7 +2996,7 @@ func _Msg_LiquidStake_Handler(srv interface{}, ctx context.Context, dec func(int } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Msg/LiquidStake", + FullMethod: "/symphony.stakeibc.Msg/LiquidStake", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).LiquidStake(ctx, req.(*MsgLiquidStake)) @@ -3013,7 +3014,7 @@ func _Msg_LSMLiquidStake_Handler(srv interface{}, ctx context.Context, dec func( } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Msg/LSMLiquidStake", + FullMethod: "/symphony.stakeibc.Msg/LSMLiquidStake", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).LSMLiquidStake(ctx, req.(*MsgLSMLiquidStake)) @@ -3031,7 +3032,7 @@ func _Msg_RedeemStake_Handler(srv interface{}, ctx context.Context, dec func(int } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Msg/RedeemStake", + FullMethod: "/symphony.stakeibc.Msg/RedeemStake", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).RedeemStake(ctx, req.(*MsgRedeemStake)) @@ -3049,7 +3050,7 @@ func _Msg_RegisterHostZone_Handler(srv interface{}, ctx context.Context, dec fun } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Msg/RegisterHostZone", + FullMethod: "/symphony.stakeibc.Msg/RegisterHostZone", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).RegisterHostZone(ctx, req.(*MsgRegisterHostZone)) @@ -3067,7 +3068,7 @@ func _Msg_ClaimUndelegatedTokens_Handler(srv interface{}, ctx context.Context, d } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Msg/ClaimUndelegatedTokens", + FullMethod: "/symphony.stakeibc.Msg/ClaimUndelegatedTokens", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).ClaimUndelegatedTokens(ctx, req.(*MsgClaimUndelegatedTokens)) @@ -3085,7 +3086,7 @@ func _Msg_RebalanceValidators_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Msg/RebalanceValidators", + FullMethod: "/symphony.stakeibc.Msg/RebalanceValidators", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).RebalanceValidators(ctx, req.(*MsgRebalanceValidators)) @@ -3103,7 +3104,7 @@ func _Msg_AddValidators_Handler(srv interface{}, ctx context.Context, dec func(i } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Msg/AddValidators", + FullMethod: "/symphony.stakeibc.Msg/AddValidators", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).AddValidators(ctx, req.(*MsgAddValidators)) @@ -3121,7 +3122,7 @@ func _Msg_ChangeValidatorWeight_Handler(srv interface{}, ctx context.Context, de } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Msg/ChangeValidatorWeight", + FullMethod: "/symphony.stakeibc.Msg/ChangeValidatorWeight", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).ChangeValidatorWeight(ctx, req.(*MsgChangeValidatorWeights)) @@ -3139,7 +3140,7 @@ func _Msg_DeleteValidator_Handler(srv interface{}, ctx context.Context, dec func } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Msg/DeleteValidator", + FullMethod: "/symphony.stakeibc.Msg/DeleteValidator", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).DeleteValidator(ctx, req.(*MsgDeleteValidator)) @@ -3157,7 +3158,7 @@ func _Msg_RestoreInterchainAccount_Handler(srv interface{}, ctx context.Context, } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Msg/RestoreInterchainAccount", + FullMethod: "/symphony.stakeibc.Msg/RestoreInterchainAccount", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).RestoreInterchainAccount(ctx, req.(*MsgRestoreInterchainAccount)) @@ -3175,7 +3176,7 @@ func _Msg_CloseDelegationChannel_Handler(srv interface{}, ctx context.Context, d } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Msg/CloseDelegationChannel", + FullMethod: "/symphony.stakeibc.Msg/CloseDelegationChannel", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).CloseDelegationChannel(ctx, req.(*MsgCloseDelegationChannel)) @@ -3193,7 +3194,7 @@ func _Msg_UpdateValidatorSharesExchRate_Handler(srv interface{}, ctx context.Con } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Msg/UpdateValidatorSharesExchRate", + FullMethod: "/symphony.stakeibc.Msg/UpdateValidatorSharesExchRate", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).UpdateValidatorSharesExchRate(ctx, req.(*MsgUpdateValidatorSharesExchRate)) @@ -3211,7 +3212,7 @@ func _Msg_CalibrateDelegation_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Msg/CalibrateDelegation", + FullMethod: "/symphony.stakeibc.Msg/CalibrateDelegation", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).CalibrateDelegation(ctx, req.(*MsgCalibrateDelegation)) @@ -3229,7 +3230,7 @@ func _Msg_ClearBalance_Handler(srv interface{}, ctx context.Context, dec func(in } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Msg/ClearBalance", + FullMethod: "/symphony.stakeibc.Msg/ClearBalance", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).ClearBalance(ctx, req.(*MsgClearBalance)) @@ -3247,7 +3248,7 @@ func _Msg_UpdateInnerRedemptionRateBounds_Handler(srv interface{}, ctx context.C } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Msg/UpdateInnerRedemptionRateBounds", + FullMethod: "/symphony.stakeibc.Msg/UpdateInnerRedemptionRateBounds", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).UpdateInnerRedemptionRateBounds(ctx, req.(*MsgUpdateInnerRedemptionRateBounds)) @@ -3265,7 +3266,7 @@ func _Msg_ResumeHostZone_Handler(srv interface{}, ctx context.Context, dec func( } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Msg/ResumeHostZone", + FullMethod: "/symphony.stakeibc.Msg/ResumeHostZone", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).ResumeHostZone(ctx, req.(*MsgResumeHostZone)) @@ -3283,7 +3284,7 @@ func _Msg_CreateTradeRoute_Handler(srv interface{}, ctx context.Context, dec fun } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Msg/CreateTradeRoute", + FullMethod: "/symphony.stakeibc.Msg/CreateTradeRoute", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).CreateTradeRoute(ctx, req.(*MsgCreateTradeRoute)) @@ -3301,7 +3302,7 @@ func _Msg_DeleteTradeRoute_Handler(srv interface{}, ctx context.Context, dec fun } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Msg/DeleteTradeRoute", + FullMethod: "/symphony.stakeibc.Msg/DeleteTradeRoute", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).DeleteTradeRoute(ctx, req.(*MsgDeleteTradeRoute)) @@ -3319,7 +3320,7 @@ func _Msg_UpdateTradeRoute_Handler(srv interface{}, ctx context.Context, dec fun } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Msg/UpdateTradeRoute", + FullMethod: "/symphony.stakeibc.Msg/UpdateTradeRoute", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).UpdateTradeRoute(ctx, req.(*MsgUpdateTradeRoute)) @@ -3337,7 +3338,7 @@ func _Msg_SetCommunityPoolRebate_Handler(srv interface{}, ctx context.Context, d } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Msg/SetCommunityPoolRebate", + FullMethod: "/symphony.stakeibc.Msg/SetCommunityPoolRebate", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).SetCommunityPoolRebate(ctx, req.(*MsgSetCommunityPoolRebate)) @@ -3355,7 +3356,7 @@ func _Msg_ToggleTradeController_Handler(srv interface{}, ctx context.Context, de } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Msg/ToggleTradeController", + FullMethod: "/symphony.stakeibc.Msg/ToggleTradeController", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).ToggleTradeController(ctx, req.(*MsgToggleTradeController)) @@ -3373,7 +3374,7 @@ func _Msg_UpdateHostZoneParams_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/stride.stakeibc.Msg/UpdateHostZoneParams", + FullMethod: "/symphony.stakeibc.Msg/UpdateHostZoneParams", } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(MsgServer).UpdateHostZoneParams(ctx, req.(*MsgUpdateHostZoneParams)) @@ -3382,7 +3383,7 @@ func _Msg_UpdateHostZoneParams_Handler(srv interface{}, ctx context.Context, dec } var _Msg_serviceDesc = grpc.ServiceDesc{ - ServiceName: "stride.stakeibc.Msg", + ServiceName: "symphony.stakeibc.Msg", HandlerType: (*MsgServer)(nil), Methods: []grpc.MethodDesc{ { @@ -3475,7 +3476,7 @@ var _Msg_serviceDesc = grpc.ServiceDesc{ }, }, Streams: []grpc.StreamDesc{}, - Metadata: "stride/stakeibc/tx.proto", + Metadata: "symphony/stakeibc/tx.proto", } func (m *MsgUpdateInnerRedemptionRateBounds) Marshal() (dAtA []byte, err error) { diff --git a/x/stakeibc/types/validator.pb.go b/x/stakeibc/types/validator.pb.go index 09fd83b2570..852da44133e 100644 --- a/x/stakeibc/types/validator.pb.go +++ b/x/stakeibc/types/validator.pb.go @@ -1,5 +1,5 @@ // Code generated by protoc-gen-gogo. DO NOT EDIT. -// source: stride/stakeibc/validator.proto +// source: symphony/stakeibc/validator.proto package types @@ -41,7 +41,7 @@ func (m *Validator) Reset() { *m = Validator{} } func (m *Validator) String() string { return proto.CompactTextString(m) } func (*Validator) ProtoMessage() {} func (*Validator) Descriptor() ([]byte, []int) { - return fileDescriptor_5d2f32e16bd6ab8f, []int{0} + return fileDescriptor_63901e609a6ad1ec, []int{0} } func (m *Validator) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -106,43 +106,43 @@ func (m *Validator) GetSlashQueryInProgress() bool { } func init() { - proto.RegisterType((*Validator)(nil), "stride.stakeibc.Validator") + proto.RegisterType((*Validator)(nil), "symphony.stakeibc.Validator") } -func init() { proto.RegisterFile("stride/stakeibc/validator.proto", fileDescriptor_5d2f32e16bd6ab8f) } +func init() { proto.RegisterFile("symphony/stakeibc/validator.proto", fileDescriptor_63901e609a6ad1ec) } -var fileDescriptor_5d2f32e16bd6ab8f = []byte{ - // 477 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xc1, 0x6e, 0xd3, 0x30, - 0x1c, 0xc6, 0x1b, 0x96, 0x6d, 0xa9, 0x01, 0x51, 0x59, 0xdd, 0xc8, 0x36, 0x48, 0x2b, 0x4e, 0xbd, - 0x34, 0x11, 0x45, 0x48, 0x5c, 0x38, 0xb0, 0xee, 0xb2, 0xaa, 0x07, 0x48, 0x2b, 0x0e, 0x1c, 0x88, - 0x5c, 0xe7, 0xaf, 0xc4, 0x4a, 0x6b, 0x17, 0xdb, 0x1b, 0xf4, 0x2d, 0x78, 0x98, 0x3d, 0xc4, 0x8e, - 0xd3, 0x4e, 0xc0, 0x61, 0x42, 0xed, 0x8b, 0xa0, 0xc4, 0xe9, 0x12, 0x89, 0xcb, 0x6e, 0xf6, 0xdf, - 0xdf, 0xf7, 0xb3, 0xfe, 0x9f, 0x3e, 0xd4, 0x51, 0x5a, 0xb2, 0x18, 0x02, 0xa5, 0x49, 0x06, 0x6c, - 0x46, 0x83, 0x4b, 0x32, 0x67, 0x31, 0xd1, 0x42, 0xfa, 0x4b, 0x29, 0xb4, 0xc0, 0xcf, 0x8c, 0xc0, - 0xdf, 0x0a, 0x8e, 0x8f, 0xa8, 0x50, 0x0b, 0xa1, 0xa2, 0xe2, 0x39, 0x30, 0x17, 0xa3, 0x3d, 0x6e, - 0x27, 0x22, 0x11, 0x66, 0x9e, 0x9f, 0xcc, 0xf4, 0xd5, 0x6f, 0x1b, 0x35, 0x3f, 0x6f, 0xa9, 0x18, - 0x23, 0x9b, 0x93, 0x05, 0xb8, 0x56, 0xd7, 0xea, 0x35, 0xc3, 0xe2, 0x8c, 0x07, 0x68, 0x9f, 0xc4, - 0xb1, 0x04, 0xa5, 0xdc, 0x47, 0xf9, 0xf8, 0xd4, 0xbd, 0xbd, 0xea, 0xb7, 0x4b, 0xf4, 0x07, 0xf3, - 0x32, 0xd1, 0x92, 0xf1, 0x24, 0xdc, 0x0a, 0xf1, 0x21, 0xda, 0xfb, 0x0e, 0x2c, 0x49, 0xb5, 0xbb, - 0xd7, 0xb5, 0x7a, 0x76, 0x58, 0xde, 0xf0, 0x7b, 0x84, 0x62, 0x98, 0x43, 0x42, 0x34, 0x13, 0xdc, - 0xdd, 0x2d, 0x70, 0x2f, 0xaf, 0xef, 0x3a, 0x8d, 0x3f, 0x77, 0x9d, 0x03, 0x83, 0x54, 0x71, 0xe6, - 0x33, 0x11, 0x2c, 0x88, 0x4e, 0xfd, 0x73, 0xae, 0xc3, 0x9a, 0x01, 0x7f, 0x45, 0x2f, 0xd4, 0x9c, - 0xa8, 0x34, 0xfa, 0x76, 0x01, 0x72, 0x95, 0x2f, 0x99, 0xe4, 0xdf, 0x45, 0x5a, 0x12, 0x9a, 0x81, - 0x74, 0x9b, 0x0f, 0x01, 0x1e, 0x15, 0x88, 0x4f, 0x39, 0xe1, 0x63, 0x09, 0x98, 0x1a, 0x3f, 0x9e, - 0xa0, 0xc3, 0x3a, 0x9f, 0xa6, 0x40, 0xb3, 0xa5, 0x60, 0x5c, 0xbb, 0x4f, 0x1e, 0x42, 0x6e, 0x57, - 0xe4, 0xe1, 0xbd, 0x15, 0xc7, 0xe8, 0x40, 0xa5, 0x44, 0x82, 0x8a, 0xb4, 0x88, 0xb4, 0xc8, 0x80, - 0xab, 0x48, 0x12, 0x0d, 0x2e, 0x2a, 0x98, 0xaf, 0x4b, 0xe6, 0xc9, 0xff, 0xcc, 0x31, 0x24, 0x84, - 0xae, 0xce, 0x80, 0xde, 0x5e, 0xf5, 0x51, 0x19, 0xf8, 0x19, 0xd0, 0x10, 0x1b, 0xde, 0x54, 0x4c, - 0x0b, 0x5a, 0x48, 0x34, 0xe0, 0x21, 0xf2, 0xaa, 0xa0, 0x22, 0x9a, 0x12, 0x9e, 0x80, 0x8a, 0x18, - 0xbf, 0x0f, 0xc9, 0x7d, 0xdc, 0xb5, 0x7a, 0x3b, 0xe1, 0x49, 0xa5, 0x1a, 0x1a, 0xd1, 0x39, 0xdf, - 0xc6, 0x80, 0xdf, 0xa2, 0xe7, 0xf5, 0xfd, 0xeb, 0xee, 0xa7, 0x5d, 0xab, 0xe7, 0xd4, 0x37, 0xac, - 0x6c, 0x23, 0xdb, 0xd9, 0x69, 0xd9, 0x23, 0xdb, 0xb1, 0x5b, 0xbb, 0x23, 0xdb, 0xd9, 0x6f, 0x39, - 0x23, 0xdb, 0x71, 0x5a, 0xcd, 0xd3, 0xf1, 0xf5, 0xda, 0xb3, 0x6e, 0xd6, 0x9e, 0xf5, 0x77, 0xed, - 0x59, 0x3f, 0x37, 0x5e, 0xe3, 0x66, 0xe3, 0x35, 0x7e, 0x6d, 0xbc, 0xc6, 0x97, 0x41, 0xc2, 0x74, - 0x7a, 0x31, 0xf3, 0xa9, 0x58, 0x04, 0x93, 0xa2, 0xc2, 0xfd, 0x31, 0x99, 0xa9, 0xa0, 0xec, 0xfb, - 0xe5, 0xe0, 0x5d, 0xf0, 0xa3, 0x6a, 0xbd, 0x5e, 0x2d, 0x41, 0xcd, 0xf6, 0x8a, 0xc2, 0xbe, 0xf9, - 0x17, 0x00, 0x00, 0xff, 0xff, 0x75, 0xd1, 0x84, 0xf1, 0x15, 0x03, 0x00, 0x00, +var fileDescriptor_63901e609a6ad1ec = []byte{ + // 479 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xc1, 0x6e, 0xd3, 0x40, + 0x14, 0x45, 0x63, 0xea, 0xa6, 0xce, 0x00, 0x52, 0x18, 0xa5, 0xc5, 0x6d, 0xc1, 0x0d, 0xac, 0xb2, + 0x89, 0x2d, 0x0a, 0x88, 0x15, 0x0b, 0x9a, 0x6e, 0x1a, 0x21, 0x04, 0x6e, 0xc4, 0x82, 0x05, 0xd6, + 0x64, 0xfc, 0x64, 0x8f, 0x1c, 0xcf, 0x04, 0xcf, 0xb4, 0xe0, 0xbf, 0xe0, 0x63, 0xfa, 0x11, 0x5d, + 0x56, 0x5d, 0x01, 0x8b, 0x0a, 0x25, 0x3f, 0x82, 0xec, 0xb1, 0x6b, 0x4b, 0x6c, 0xba, 0x9b, 0xf7, + 0x7c, 0xef, 0xb1, 0xee, 0xd5, 0x43, 0xcf, 0x64, 0x9e, 0x2e, 0x63, 0xc1, 0x73, 0x4f, 0x2a, 0x92, + 0x00, 0x9b, 0x53, 0xef, 0x9c, 0x2c, 0x58, 0x48, 0x94, 0xc8, 0xdc, 0x65, 0x26, 0x94, 0xc0, 0x8f, + 0x6a, 0x89, 0x5b, 0x4b, 0xf6, 0x76, 0xa9, 0x90, 0xa9, 0x90, 0x41, 0x29, 0xf0, 0xf4, 0xa0, 0xd5, + 0x7b, 0x83, 0x48, 0x44, 0x42, 0xef, 0x8b, 0x97, 0xde, 0x3e, 0xff, 0x6d, 0xa2, 0xde, 0xe7, 0x9a, + 0x8b, 0x31, 0x32, 0x39, 0x49, 0xc1, 0x36, 0x86, 0xc6, 0xa8, 0xe7, 0x97, 0x6f, 0x7c, 0x88, 0xb6, + 0x48, 0x18, 0x66, 0x20, 0xa5, 0x7d, 0xaf, 0x58, 0x1f, 0xd9, 0xd7, 0x17, 0xe3, 0x41, 0x85, 0x7e, + 0xa7, 0xbf, 0x9c, 0xaa, 0x8c, 0xf1, 0xc8, 0xaf, 0x85, 0x78, 0x07, 0x75, 0xbf, 0x03, 0x8b, 0x62, + 0x65, 0x77, 0x87, 0xc6, 0xc8, 0xf4, 0xab, 0x09, 0xbf, 0x45, 0x28, 0x84, 0x05, 0x44, 0x44, 0x31, + 0xc1, 0xed, 0xcd, 0x12, 0xf7, 0xf4, 0xf2, 0xe6, 0xa0, 0xf3, 0xe7, 0xe6, 0x60, 0x5b, 0x23, 0x65, + 0x98, 0xb8, 0x4c, 0x78, 0x29, 0x51, 0xb1, 0x7b, 0xc2, 0x95, 0xdf, 0x32, 0xe0, 0xaf, 0xe8, 0x89, + 0x5c, 0x10, 0x19, 0x07, 0xdf, 0xce, 0x20, 0xcb, 0x8b, 0x90, 0x51, 0xf1, 0xbb, 0x40, 0x65, 0x84, + 0x26, 0x90, 0xd9, 0xbd, 0xbb, 0x00, 0x77, 0x4b, 0xc4, 0xa7, 0x82, 0xf0, 0xb1, 0x02, 0xcc, 0xb4, + 0x1f, 0x9f, 0xa2, 0x9d, 0x36, 0x9f, 0xc6, 0x40, 0x93, 0xa5, 0x60, 0x5c, 0xd9, 0x0f, 0xee, 0x42, + 0x1e, 0x34, 0xe4, 0xc9, 0xad, 0x15, 0x87, 0x68, 0x5b, 0xc6, 0x24, 0x03, 0x19, 0x28, 0x11, 0x28, + 0x91, 0x00, 0x97, 0x41, 0x46, 0x14, 0xd8, 0xa8, 0x64, 0xbe, 0xa8, 0x98, 0xfb, 0xff, 0x33, 0xdf, + 0x43, 0x44, 0x68, 0x7e, 0x0c, 0xf4, 0xfa, 0x62, 0x8c, 0xaa, 0xc2, 0x8f, 0x81, 0xfa, 0x58, 0xf3, + 0x66, 0x62, 0x56, 0xd2, 0x7c, 0xa2, 0x00, 0x4f, 0x90, 0xd3, 0x14, 0x15, 0xd0, 0x98, 0xf0, 0x08, + 0x64, 0xc0, 0xf8, 0x6d, 0x49, 0xf6, 0xfd, 0xa1, 0x31, 0xda, 0xf0, 0xf7, 0x1b, 0xd5, 0x44, 0x8b, + 0x4e, 0x78, 0x5d, 0x03, 0x7e, 0x8d, 0x1e, 0xb7, 0xf3, 0xb7, 0xdd, 0x0f, 0x87, 0xc6, 0xc8, 0x6a, + 0x27, 0x6c, 0x6c, 0x53, 0xd3, 0xda, 0xe8, 0x9b, 0x53, 0xd3, 0x32, 0xfb, 0x9b, 0x53, 0xd3, 0xda, + 0xea, 0x5b, 0x53, 0xd3, 0xb2, 0xfa, 0xbd, 0xa3, 0x0f, 0x97, 0x2b, 0xc7, 0xb8, 0x5a, 0x39, 0xc6, + 0xdf, 0x95, 0x63, 0xfc, 0x5c, 0x3b, 0x9d, 0xab, 0xb5, 0xd3, 0xf9, 0xb5, 0x76, 0x3a, 0x5f, 0x5e, + 0x45, 0x4c, 0xc5, 0x67, 0x73, 0x97, 0x8a, 0xd4, 0x2b, 0x73, 0x31, 0x39, 0x5e, 0x90, 0xb9, 0xac, + 0x07, 0xef, 0xfc, 0xf0, 0x8d, 0xf7, 0xa3, 0xb9, 0x7c, 0x95, 0x2f, 0x41, 0xce, 0xbb, 0xe5, 0xc9, + 0xbe, 0xfc, 0x17, 0x00, 0x00, 0xff, 0xff, 0xfc, 0xe7, 0x26, 0x83, 0x1b, 0x03, 0x00, 0x00, } func (m *Validator) Marshal() (dAtA []byte, err error) { diff --git a/x/superfluid/types/params.pb.go b/x/superfluid/types/params.pb.go index defd30247b2..e54f7fd3faa 100644 --- a/x/superfluid/types/params.pb.go +++ b/x/superfluid/types/params.pb.go @@ -8,7 +8,7 @@ import ( fmt "fmt" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" - _ "google.golang.org/protobuf/types/known/durationpb" + _ "github.com/cosmos/gogoproto/types" io "io" math "math" math_bits "math/bits" diff --git a/x/superfluid/types/query.pb.go b/x/superfluid/types/query.pb.go index dabbe622c99..ce9d5879e83 100644 --- a/x/superfluid/types/query.pb.go +++ b/x/superfluid/types/query.pb.go @@ -14,13 +14,12 @@ import ( _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" types1 "github.com/osmosis-labs/osmosis/v27/x/lockup/types" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - _ "google.golang.org/protobuf/types/known/durationpb" - _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" diff --git a/x/superfluid/types/superfluid.pb.go b/x/superfluid/types/superfluid.pb.go index 5509560c9e6..f47c8aa8bed 100644 --- a/x/superfluid/types/superfluid.pb.go +++ b/x/superfluid/types/superfluid.pb.go @@ -9,9 +9,8 @@ import ( types "github.com/cosmos/cosmos-sdk/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" types1 "github.com/osmosis-labs/osmosis/v27/x/lockup/types" - _ "google.golang.org/protobuf/types/known/durationpb" - _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" diff --git a/x/superfluid/types/tx.pb.go b/x/superfluid/types/tx.pb.go index 83092191d97..65bfe6b4d3a 100644 --- a/x/superfluid/types/tx.pb.go +++ b/x/superfluid/types/tx.pb.go @@ -14,12 +14,11 @@ import ( _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - _ "google.golang.org/protobuf/types/known/durationpb" - _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" diff --git a/x/twap/client/queryproto/query.pb.go b/x/twap/client/queryproto/query.pb.go index f6f2d7516c1..5eed3f9175b 100644 --- a/x/twap/client/queryproto/query.pb.go +++ b/x/twap/client/queryproto/query.pb.go @@ -14,13 +14,13 @@ import ( _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" - types "github.com/osmosis-labs/osmosis/v27/x/twap/types" + types1 "github.com/osmosis-labs/osmosis/v27/x/twap/types" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" @@ -512,7 +512,7 @@ func (m *ParamsRequest) XXX_DiscardUnknown() { var xxx_messageInfo_ParamsRequest proto.InternalMessageInfo type ParamsResponse struct { - Params types.Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` + Params types1.Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` } func (m *ParamsResponse) Reset() { *m = ParamsResponse{} } @@ -548,11 +548,11 @@ func (m *ParamsResponse) XXX_DiscardUnknown() { var xxx_messageInfo_ParamsResponse proto.InternalMessageInfo -func (m *ParamsResponse) GetParams() types.Params { +func (m *ParamsResponse) GetParams() types1.Params { if m != nil { return m.Params } - return types.Params{} + return types1.Params{} } func init() { diff --git a/x/twap/types/genesis.pb.go b/x/twap/types/genesis.pb.go index 59dd1935289..b73dc654314 100644 --- a/x/twap/types/genesis.pb.go +++ b/x/twap/types/genesis.pb.go @@ -9,8 +9,8 @@ import ( _ "github.com/cosmos/cosmos-sdk/codec/types" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" - _ "google.golang.org/protobuf/types/known/durationpb" io "io" math "math" math_bits "math/bits" diff --git a/x/twap/types/twap_record.pb.go b/x/twap/types/twap_record.pb.go index f3823ac48e8..13f8592f7a1 100644 --- a/x/twap/types/twap_record.pb.go +++ b/x/twap/types/twap_record.pb.go @@ -8,8 +8,8 @@ import ( fmt "fmt" _ "github.com/cosmos/gogoproto/gogoproto" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" - _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" diff --git a/x/txfees/types/query.pb.go b/x/txfees/types/query.pb.go index 1d0cebb94d9..cf5ef95b423 100644 --- a/x/txfees/types/query.pb.go +++ b/x/txfees/types/query.pb.go @@ -10,11 +10,11 @@ import ( _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - _ "google.golang.org/protobuf/types/known/durationpb" io "io" math "math" math_bits "math/bits" diff --git a/x/valset-pref/types/tx.pb.go b/x/valset-pref/types/tx.pb.go index 68a7535a285..ab1b4cc236d 100644 --- a/x/valset-pref/types/tx.pb.go +++ b/x/valset-pref/types/tx.pb.go @@ -12,10 +12,10 @@ import ( _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" + _ "github.com/cosmos/gogoproto/types" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" - _ "google.golang.org/protobuf/types/known/timestamppb" io "io" math "math" math_bits "math/bits" From 43f97d8264384788316bee1e7edec1dc6c51c7c5 Mon Sep 17 00:00:00 2001 From: P-Yevhenii Date: Thu, 9 Oct 2025 21:06:35 +0300 Subject: [PATCH 4/9] Update deps --- .../capability/v1/capability.proto | 32 -- .../third_party/capability/v1/genesis.proto | 28 - .../cosmos/app/runtime/v1alpha1/module.proto | 10 - .../cosmos/app/runtime/v2/module.proto | 81 --- .../cosmos/app/v1alpha1/config.proto | 2 - .../cosmos/app/v1alpha1/module.proto | 2 - .../cosmos/app/v1alpha1/query.proto | 8 +- .../cosmos/auth/module/v1/module.proto | 31 ++ .../cosmos/auth/v1beta1/auth.proto | 63 +++ .../cosmos/auth/v1beta1/genesis.proto | 18 + .../cosmos/auth/v1beta1/query.proto | 236 +++++++++ .../third_party/cosmos/auth/v1beta1/tx.proto | 43 ++ .../cosmos/authz/module/v1/module.proto | 12 + .../cosmos/authz/v1beta1/authz.proto | 48 ++ .../cosmos/authz/v1beta1/event.proto | 27 + .../cosmos/authz/v1beta1/genesis.proto | 14 + .../cosmos/authz/v1beta1/query.proto | 82 +++ .../third_party/cosmos/authz/v1beta1/tx.proto | 81 +++ .../cosmos/autocli/v1/options.proto | 21 +- .../cosmos/bank/module/v1/module.proto | 26 + .../cosmos/bank/v1beta1/authz.proto | 31 ++ .../cosmos/bank/v1beta1/bank.proto | 125 +++++ .../cosmos/bank/v1beta1/genesis.proto | 54 ++ .../cosmos/bank/v1beta1/query.proto | 461 +++++++++++++++++ .../third_party/cosmos/bank/v1beta1/tx.proto | 124 +++++ .../cosmos/base/abci/v1beta1/abci.proto | 20 +- .../cosmos/base/node/v1beta1/query.proto | 4 +- .../base/query/v1beta1/pagination.proto | 6 +- .../base/reflection/v2alpha1/reflection.proto | 4 +- .../base/tendermint/v1beta1/query.proto | 77 ++- .../base/tendermint/v1beta1/types.proto | 24 +- .../cosmos/base/v1beta1/coin.proto | 20 + .../cosmos/circuit/module/v1/module.proto | 15 + .../third_party/cosmos/circuit/v1/query.proto | 61 +++ .../third_party/cosmos/circuit/v1/tx.proto | 83 +++ .../third_party/cosmos/circuit/v1/types.proto | 49 ++ .../cosmos/consensus/module/v1/module.proto | 15 + .../cosmos/consensus/v1/query.proto | 27 + .../third_party/cosmos/consensus/v1/tx.proto | 46 ++ .../cosmos/crisis/module/v1/module.proto | 18 + .../cosmos/crisis/v1beta1/genesis.proto | 15 + .../cosmos/crisis/v1beta1/tx.proto | 65 +++ .../distribution/module/v1/module.proto | 17 + .../distribution/v1beta1/distribution.proto | 194 +++++++ .../cosmos/distribution/v1beta1/genesis.proto | 155 ++++++ .../cosmos/distribution/v1beta1/query.proto | 255 +++++++++ .../cosmos/distribution/v1beta1/tx.proto | 215 ++++++++ .../cosmos/evidence/module/v1/module.proto | 12 + .../cosmos/evidence/v1beta1/evidence.proto | 31 ++ .../cosmos/evidence/v1beta1/genesis.proto | 12 + .../cosmos/evidence/v1beta1/query.proto | 56 ++ .../cosmos/evidence/v1beta1/tx.proto | 42 ++ .../cosmos/feegrant/module/v1/module.proto | 12 + .../cosmos/feegrant/v1beta1/feegrant.proto | 96 ++++ .../cosmos/feegrant/v1beta1/genesis.proto | 14 + .../cosmos/feegrant/v1beta1/query.proto | 84 +++ .../cosmos/feegrant/v1beta1/tx.proto | 77 +++ .../cosmos/genutil/module/v1/module.proto | 12 + .../cosmos/genutil/v1beta1/genesis.proto | 18 + .../cosmos/gov/module/v1/module.proto | 19 + .../third_party/cosmos/gov/v1/genesis.proto | 40 ++ .../third_party/cosmos/gov/v1/gov.proto | 271 ++++++++++ .../third_party/cosmos/gov/v1/query.proto | 205 ++++++++ .../third_party/cosmos/gov/v1/tx.proto | 213 ++++++++ .../cosmos/gov/v1beta1/genesis.proto | 30 ++ .../third_party/cosmos/gov/v1beta1/gov.proto | 254 +++++++++ .../cosmos/gov/v1beta1/query.proto | 194 +++++++ .../third_party/cosmos/gov/v1beta1/tx.proto | 134 +++++ .../cosmos/group/module/v1/module.proto | 24 + .../third_party/cosmos/group/v1/events.proto | 94 ++++ .../third_party/cosmos/group/v1/genesis.proto | 39 ++ .../third_party/cosmos/group/v1/query.proto | 320 ++++++++++++ .../third_party/cosmos/group/v1/tx.proto | 394 ++++++++++++++ .../third_party/cosmos/group/v1/types.proto | 339 ++++++++++++ .../third_party/cosmos/ics23/v1/proofs.proto | 4 +- .../cosmos/mint/module/v1/module.proto | 17 + .../cosmos/mint/v1beta1/genesis.proto | 17 + .../cosmos/mint/v1beta1/mint.proto | 62 +++ .../cosmos/mint/v1beta1/query.proto | 68 +++ .../third_party/cosmos/mint/v1beta1/tx.proto | 43 ++ .../cosmos/msg/textual/v1/textual.proto | 2 +- .../cosmos/nft/module/v1/module.proto | 12 + .../cosmos/nft/v1beta1/event.proto | 43 ++ .../cosmos/nft/v1beta1/genesis.proto | 24 + .../third_party/cosmos/nft/v1beta1/nft.proto | 48 ++ .../cosmos/nft/v1beta1/query.proto | 152 ++++++ .../third_party/cosmos/nft/v1beta1/tx.proto | 34 ++ .../cosmos/orm/query/v1alpha1/query.proto | 2 - .../cosmos/params/module/v1/module.proto | 12 + .../cosmos/params/v1beta1/params.proto | 28 + .../cosmos/params/v1beta1/query.proto | 63 +++ .../third_party/cosmos/query/v1/query.proto | 6 +- .../cosmos/slashing/module/v1/module.proto | 15 + .../cosmos/slashing/v1beta1/genesis.proto | 48 ++ .../cosmos/slashing/v1beta1/query.proto | 66 +++ .../cosmos/slashing/v1beta1/slashing.proto | 62 +++ .../cosmos/slashing/v1beta1/tx.proto | 67 +++ .../cosmos/staking/module/v1/module.proto | 26 + .../cosmos/staking/v1beta1/authz.proto | 51 ++ .../cosmos/staking/v1beta1/genesis.proto | 55 ++ .../cosmos/staking/v1beta1/query.proto | 387 ++++++++++++++ .../cosmos/staking/v1beta1/staking.proto | 394 ++++++++++++++ .../cosmos/staking/v1beta1/tx.proto | 206 ++++++++ .../cosmos/store/internal/kv/v1beta1/kv.proto | 13 +- .../cosmos/store/snapshots/v1/snapshot.proto | 28 +- .../cosmos/store/snapshots/v2/snapshot.proto | 63 --- .../cosmos/store/streaming/abci/grpc.proto | 19 +- .../cosmos/store/v1beta1/commit_info.proto | 1 - .../cosmos/store/v1beta1/listening.proto | 20 +- .../cosmos/streaming/v1/grpc.proto | 71 --- .../cosmos/tx/config/v1/config.proto | 4 +- .../cosmos/tx/signing/v1beta1/signing.proto | 7 +- .../cosmos/tx/v1beta1/service.proto | 88 ++-- .../third_party/cosmos/tx/v1beta1/tx.proto | 63 +-- .../cosmos/upgrade/module/v1/module.proto | 15 + .../cosmos/upgrade/v1beta1/query.proto | 122 +++++ .../cosmos/upgrade/v1beta1/tx.proto | 62 +++ .../cosmos/upgrade/v1beta1/upgrade.proto | 94 ++++ .../cosmos/vesting/module/v1/module.proto | 12 + .../cosmos/vesting/v1beta1/tx.proto | 155 ++++++ .../cosmos/vesting/v1beta1/vesting.proto | 114 ++++ .../third_party/google/api/annotations.proto | 2 +- .../third_party/google/api/http.proto | 3 +- .../ibc/applications/fee/v1/ack.proto | 15 - .../ibc/applications/fee/v1/fee.proto | 61 --- .../ibc/applications/fee/v1/genesis.proto | 60 --- .../ibc/applications/fee/v1/metadata.proto | 14 - .../ibc/applications/fee/v1/query.proto | 219 -------- .../ibc/applications/fee/v1/tx.proto | 122 ----- .../controller/v1/controller.proto | 2 +- .../controller/v1/query.proto | 2 +- .../controller/v1/tx.proto | 4 +- .../genesis/v1/genesis.proto | 4 +- .../interchain_accounts/host/v1/host.proto | 2 +- .../interchain_accounts/host/v1/query.proto | 2 +- .../interchain_accounts/host/v1/tx.proto | 2 +- .../interchain_accounts/v1/account.proto | 2 +- .../interchain_accounts/v1/metadata.proto | 2 +- .../interchain_accounts/v1/packet.proto | 2 +- .../v1/genesis.proto | 34 ++ .../rate_limiting/v1/genesis.proto | 16 + .../applications/rate_limiting/v1/query.proto | 100 ++++ .../rate_limiting/v1/rate_limiting.proto | 76 +++ .../applications/rate_limiting/v1/tx.proto | 109 ++++ .../ibc/applications/transfer/v1/authz.proto | 12 +- .../applications/transfer/v1/denomtrace.proto | 2 +- .../transfer/{v2 => v1}/genesis.proto | 16 +- .../ibc/applications/transfer/v1/packet.proto | 21 + .../ibc/applications/transfer/v1/query.proto | 46 +- .../transfer/{v2 => v1}/token.proto | 16 +- .../applications/transfer/v1/transfer.proto | 22 +- .../ibc/applications/transfer/v1/tx.proto | 25 +- .../ibc/applications/transfer/v2/packet.proto | 51 -- .../applications/transfer/v2/queryv2.proto | 53 -- .../ibc/core/channel/v1/channel.proto | 26 +- .../ibc/core/channel/v1/genesis.proto | 3 +- .../ibc/core/channel/v1/query.proto | 59 +-- .../third_party/ibc/core/channel/v1/tx.proto | 236 +-------- .../ibc/core/channel/v1/upgrade.proto | 43 -- .../ibc/core/channel/v2/genesis.proto | 39 ++ .../ibc/core/channel/v2/packet.proto | 68 +++ .../ibc/core/channel/v2/query.proto | 199 +++++++ .../third_party/ibc/core/channel/v2/tx.proto | 117 +++++ .../ibc/core/client/v1/client.proto | 2 +- .../ibc/core/client/v1/genesis.proto | 2 +- .../ibc/core/client/v1/query.proto | 23 +- .../third_party/ibc/core/client/v1/tx.proto | 46 +- .../ibc/core/client/v2/config.proto | 14 + .../ibc/core/client/v2/counterparty.proto | 13 + .../ibc/core/client/v2/genesis.proto | 23 + .../ibc/core/client/v2/query.proto | 46 ++ .../third_party/ibc/core/client/v2/tx.proto | 58 +++ .../ibc/core/commitment/v1/commitment.proto | 2 +- .../ibc/core/commitment/v2/commitment.proto | 34 +- .../ibc/core/connection/v1/connection.proto | 2 +- .../ibc/core/connection/v1/genesis.proto | 2 +- .../ibc/core/connection/v1/query.proto | 4 +- .../ibc/core/connection/v1/tx.proto | 2 +- .../ibc/core/types/v1/genesis.proto | 8 +- .../solomachine/v2/solomachine.proto | 4 +- .../solomachine/v3/solomachine.proto | 4 +- .../tendermint/v1/tendermint.proto | 2 +- .../ibc/lightclients/wasm/v1/genesis.proto | 4 +- .../ibc/lightclients/wasm/v1/query.proto | 2 +- .../ibc/lightclients/wasm/v1/tx.proto | 2 +- .../ibc/lightclients/wasm/v1/wasm.proto | 12 +- .../third_party/tendermint/abci/types.proto | 486 ++++++++++++++++++ .../third_party/tendermint/crypto/keys.proto | 17 + .../third_party/tendermint/crypto/proof.proto | 41 ++ .../tendermint/libs/bits/types.proto | 9 + .../third_party/tendermint/p2p/types.proto | 34 ++ .../third_party/tendermint/types/block.proto | 15 + .../tendermint/types/evidence.proto | 38 ++ .../third_party/tendermint/types/params.proto | 91 ++++ .../third_party/tendermint/types/types.proto | 172 +++++++ .../tendermint/types/validator.proto | 37 ++ .../tendermint/version/types.proto | 24 + 197 files changed, 10629 insertions(+), 1601 deletions(-) delete mode 100644 scripts/makefiles/swagger-proto/third_party/capability/v1/capability.proto delete mode 100644 scripts/makefiles/swagger-proto/third_party/capability/v1/genesis.proto delete mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/app/runtime/v2/module.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/auth/module/v1/module.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/auth/v1beta1/auth.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/auth/v1beta1/genesis.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/auth/v1beta1/query.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/auth/v1beta1/tx.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/authz/module/v1/module.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/authz/v1beta1/authz.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/authz/v1beta1/event.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/authz/v1beta1/genesis.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/authz/v1beta1/query.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/authz/v1beta1/tx.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/bank/module/v1/module.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/bank/v1beta1/authz.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/bank/v1beta1/bank.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/bank/v1beta1/genesis.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/bank/v1beta1/query.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/bank/v1beta1/tx.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/circuit/module/v1/module.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/circuit/v1/query.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/circuit/v1/tx.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/circuit/v1/types.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/consensus/module/v1/module.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/consensus/v1/query.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/consensus/v1/tx.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/crisis/module/v1/module.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/crisis/v1beta1/genesis.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/crisis/v1beta1/tx.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/distribution/module/v1/module.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/distribution/v1beta1/distribution.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/distribution/v1beta1/genesis.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/distribution/v1beta1/query.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/distribution/v1beta1/tx.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/evidence/module/v1/module.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/evidence/v1beta1/evidence.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/evidence/v1beta1/genesis.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/evidence/v1beta1/query.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/evidence/v1beta1/tx.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/feegrant/module/v1/module.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/feegrant/v1beta1/feegrant.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/feegrant/v1beta1/genesis.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/feegrant/v1beta1/query.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/feegrant/v1beta1/tx.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/genutil/module/v1/module.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/genutil/v1beta1/genesis.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/gov/module/v1/module.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1/genesis.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1/gov.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1/query.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1/tx.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1beta1/genesis.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1beta1/gov.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1beta1/query.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1beta1/tx.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/group/module/v1/module.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/group/v1/events.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/group/v1/genesis.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/group/v1/query.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/group/v1/tx.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/group/v1/types.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/mint/module/v1/module.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/mint/v1beta1/genesis.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/mint/v1beta1/mint.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/mint/v1beta1/query.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/mint/v1beta1/tx.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/nft/module/v1/module.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/nft/v1beta1/event.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/nft/v1beta1/genesis.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/nft/v1beta1/nft.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/nft/v1beta1/query.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/nft/v1beta1/tx.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/params/module/v1/module.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/params/v1beta1/params.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/params/v1beta1/query.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/slashing/module/v1/module.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/slashing/v1beta1/genesis.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/slashing/v1beta1/query.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/slashing/v1beta1/slashing.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/slashing/v1beta1/tx.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/staking/module/v1/module.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/staking/v1beta1/authz.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/staking/v1beta1/genesis.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/staking/v1beta1/query.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/staking/v1beta1/staking.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/staking/v1beta1/tx.proto delete mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/store/snapshots/v2/snapshot.proto delete mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/streaming/v1/grpc.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/upgrade/module/v1/module.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/upgrade/v1beta1/query.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/upgrade/v1beta1/tx.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/upgrade/v1beta1/upgrade.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/vesting/module/v1/module.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/vesting/v1beta1/tx.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/cosmos/vesting/v1beta1/vesting.proto delete mode 100644 scripts/makefiles/swagger-proto/third_party/ibc/applications/fee/v1/ack.proto delete mode 100644 scripts/makefiles/swagger-proto/third_party/ibc/applications/fee/v1/fee.proto delete mode 100644 scripts/makefiles/swagger-proto/third_party/ibc/applications/fee/v1/genesis.proto delete mode 100644 scripts/makefiles/swagger-proto/third_party/ibc/applications/fee/v1/metadata.proto delete mode 100644 scripts/makefiles/swagger-proto/third_party/ibc/applications/fee/v1/query.proto delete mode 100644 scripts/makefiles/swagger-proto/third_party/ibc/applications/fee/v1/tx.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/ibc/applications/packet_forward_middleware/v1/genesis.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/ibc/applications/rate_limiting/v1/genesis.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/ibc/applications/rate_limiting/v1/query.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/ibc/applications/rate_limiting/v1/rate_limiting.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/ibc/applications/rate_limiting/v1/tx.proto rename scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/{v2 => v1}/genesis.proto (51%) create mode 100644 scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/packet.proto rename scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/{v2 => v1}/token.proto (60%) delete mode 100644 scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v2/packet.proto delete mode 100644 scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v2/queryv2.proto delete mode 100644 scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v1/upgrade.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v2/genesis.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v2/packet.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v2/query.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v2/tx.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/ibc/core/client/v2/config.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/ibc/core/client/v2/counterparty.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/ibc/core/client/v2/genesis.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/ibc/core/client/v2/query.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/ibc/core/client/v2/tx.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/tendermint/abci/types.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/tendermint/crypto/keys.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/tendermint/crypto/proof.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/tendermint/libs/bits/types.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/tendermint/p2p/types.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/tendermint/types/block.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/tendermint/types/evidence.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/tendermint/types/params.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/tendermint/types/types.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/tendermint/types/validator.proto create mode 100644 scripts/makefiles/swagger-proto/third_party/tendermint/version/types.proto diff --git a/scripts/makefiles/swagger-proto/third_party/capability/v1/capability.proto b/scripts/makefiles/swagger-proto/third_party/capability/v1/capability.proto deleted file mode 100644 index 31136cc5de2..00000000000 --- a/scripts/makefiles/swagger-proto/third_party/capability/v1/capability.proto +++ /dev/null @@ -1,32 +0,0 @@ -syntax = "proto3"; - -package capability.v1; - -import "gogoproto/gogo.proto"; -import "amino/amino.proto"; - -option go_package = "github.com/cosmos/ibc-go/modules/capability/types"; - -// Capability defines an implementation of an object capability. The index -// provided to a Capability must be globally unique. -message Capability { - option (gogoproto.goproto_stringer) = false; - - uint64 index = 1; -} - -// Owner defines a single capability owner. An owner is defined by the name of -// capability and the module name. -message Owner { - option (gogoproto.goproto_stringer) = false; - option (gogoproto.goproto_getters) = false; - - string module = 1; - string name = 2; -} - -// CapabilityOwners defines a set of owners of a single Capability. The set of -// owners must be unique. -message CapabilityOwners { - repeated Owner owners = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; -} diff --git a/scripts/makefiles/swagger-proto/third_party/capability/v1/genesis.proto b/scripts/makefiles/swagger-proto/third_party/capability/v1/genesis.proto deleted file mode 100644 index f345f6b2cf3..00000000000 --- a/scripts/makefiles/swagger-proto/third_party/capability/v1/genesis.proto +++ /dev/null @@ -1,28 +0,0 @@ -syntax = "proto3"; - -package capability.v1; - -import "gogoproto/gogo.proto"; -import "capability/v1/capability.proto"; -import "amino/amino.proto"; - -option go_package = "github.com/cosmos/ibc-go/modules/capability/types"; - -// GenesisOwners defines the capability owners with their corresponding index. -message GenesisOwners { - // index is the index of the capability owner. - uint64 index = 1; - - // index_owners are the owners at the given index. - CapabilityOwners index_owners = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; -} - -// GenesisState defines the capability module's genesis state. -message GenesisState { - // index is the capability global index. - uint64 index = 1; - - // owners represents a map from index to owners of the capability index - // index key is string to allow amino marshalling. - repeated GenesisOwners owners = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; -} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/app/runtime/v1alpha1/module.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/app/runtime/v1alpha1/module.proto index 516156dcb7d..c0261217027 100644 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/app/runtime/v1alpha1/module.proto +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/app/runtime/v1alpha1/module.proto @@ -38,11 +38,6 @@ message Module { // to be used in keeper construction. repeated StoreKeyConfig override_store_keys = 6; - // skip_store_keys is an optional list of store keys to skip when constructing the - // module's keeper. This is useful when a module does not have a store key. - // NOTE: the provided environment variable will have a fake store service. - repeated string skip_store_keys = 11; - // order_migrations defines the order in which module migrations are performed. // If this is left empty, it uses the default migration order. // https://pkg.go.dev/github.com/cosmos/cosmos-sdk@v0.47.0-alpha2/types/module#DefaultMigrationsOrder @@ -57,11 +52,6 @@ message Module { // to call in the order in which they should be called. If this is left empty // no preparecheckstate function will be registered. repeated string prepare_check_staters = 9; - - // pre_blockers specifies the module names of pre blockers - // to call in the order in which they should be called. If this is left empty - // no pre blocker will be registered. - repeated string pre_blockers = 10; } // StoreKeyConfig may be supplied to override the default module store key, which diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/app/runtime/v2/module.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/app/runtime/v2/module.proto deleted file mode 100644 index 482493087d6..00000000000 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/app/runtime/v2/module.proto +++ /dev/null @@ -1,81 +0,0 @@ -syntax = "proto3"; - -package cosmos.app.runtime.v2; - -import "cosmos/app/v1alpha1/module.proto"; - -// Module is the config object for the runtime module. -message Module { - option (cosmos.app.v1alpha1.module) = { - go_import: "cosmossdk.io/runtime/v2" - use_package: {name: "cosmos.app.v1alpha1"} - }; - - // app_name is the name of the app. - string app_name = 1; - - // pre_blockers specifies the module names of pre blockers - // to call in the order in which they should be called. If this is left empty - // no pre blocker will be registered. - repeated string pre_blockers = 2; - - // begin_blockers specifies the module names of begin blockers - // to call in the order in which they should be called. If this is left empty - // no begin blocker will be registered. - repeated string begin_blockers = 3; - - // end_blockers specifies the module names of the end blockers - // to call in the order in which they should be called. If this is left empty - // no end blocker will be registered. - repeated string end_blockers = 4; - - // tx_validators specifies the module names for tx validators - // If this is left empty, no tx validation will be registered. - repeated string tx_validators = 5; - - // init_genesis specifies the module names of init genesis functions - // to call in the order in which they should be called. If this is left empty - // no init genesis function will be registered. - repeated string init_genesis = 6; - - // export_genesis specifies the order in which to export module genesis data. - // If this is left empty, the init_genesis order will be used for export genesis - // if it is specified. - repeated string export_genesis = 7; - - // order_migrations defines the order in which module migrations are performed. - // If this is left empty, it uses the default migration order (alphabetically). - repeated string order_migrations = 8; - - // GasConfig is the config object for gas limits. - GasConfig gas_config = 9; - - // override_store_keys is an optional list of overrides for the module store keys - // to be used in keeper construction. - repeated StoreKeyConfig override_store_keys = 10; - - // skip_store_keys is an optional list of store keys to skip when constructing the - // module's keeper. This is useful when a module does not have a store key. - // NOTE: the provided environment variable will have a fake store service. - repeated string skip_store_keys = 11; -} - -// GasConfig is the config object for gas limits. -message GasConfig { - // validate_tx_gas_limit is the gas limit for validating a tx. - uint64 validate_tx_gas_limit = 1; - // query_gas_limit is the gas limit for querying. - uint64 query_gas_limit = 2; - // simulation_gas_limit is the gas limit for simulation. - uint64 simulation_gas_limit = 3; -} - -// StoreKeyConfig may be supplied to override the default module store key, which -// is the module name. -message StoreKeyConfig { - // name of the module to override the store key of - string module_name = 1; - - // the kv store key to use instead of the module name. - string kv_store_key = 2; -} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/app/v1alpha1/config.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/app/v1alpha1/config.proto index 1aac4b4396f..ee3e70659e4 100644 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/app/v1alpha1/config.proto +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/app/v1alpha1/config.proto @@ -4,8 +4,6 @@ package cosmos.app.v1alpha1; import "google/protobuf/any.proto"; -option go_package = "cosmossdk.io/depinject/appconfig/v1alpha1"; - // Config represents the configuration for a Cosmos SDK ABCI app. // It is intended that all state machine logic including the version of // baseapp and tx handlers (and possibly even Tendermint) that an app needs diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/app/v1alpha1/module.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/app/v1alpha1/module.proto index ea475f35e17..e5413786509 100644 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/app/v1alpha1/module.proto +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/app/v1alpha1/module.proto @@ -4,8 +4,6 @@ package cosmos.app.v1alpha1; import "google/protobuf/descriptor.proto"; -option go_package = "cosmossdk.io/depinject/appconfig/v1alpha1"; - extend google.protobuf.MessageOptions { // module indicates that this proto type is a config object for an app module // and optionally provides other descriptive information about the module. diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/app/v1alpha1/query.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/app/v1alpha1/query.proto index a51aea691db..efec9c81ad7 100644 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/app/v1alpha1/query.proto +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/app/v1alpha1/query.proto @@ -4,21 +4,17 @@ package cosmos.app.v1alpha1; import "cosmos/app/v1alpha1/config.proto"; -option go_package = "cosmossdk.io/depinject/appconfig/v1alpha1"; - // Query is the app module query service. service Query { // Config returns the current app config. - rpc Config(QueryConfigRequest) returns (QueryConfigResponse) { - option deprecated = true; - } + rpc Config(QueryConfigRequest) returns (QueryConfigResponse) {} } // QueryConfigRequest is the Query/Config request type. message QueryConfigRequest {} -// QueryConfigResponse is the Query/Config response type. +// QueryConfigRequest is the Query/Config response type. message QueryConfigResponse { // config is the current app config. diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/auth/module/v1/module.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/auth/module/v1/module.proto new file mode 100644 index 00000000000..dbe46a157c7 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/auth/module/v1/module.proto @@ -0,0 +1,31 @@ +syntax = "proto3"; + +package cosmos.auth.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object for the auth module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/auth" + }; + + // bech32_prefix is the bech32 account prefix for the app. + string bech32_prefix = 1; + + // module_account_permissions are module account permissions. + repeated ModuleAccountPermission module_account_permissions = 2; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 3; +} + +// ModuleAccountPermission represents permissions for a module account. +message ModuleAccountPermission { + // account is the name of the module. + string account = 1; + + // permissions are the permissions this module has. Currently recognized + // values are minter, burner and staking. + repeated string permissions = 2; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/auth/v1beta1/auth.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/auth/v1beta1/auth.proto new file mode 100644 index 00000000000..ebc18b69f05 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/auth/v1beta1/auth.proto @@ -0,0 +1,63 @@ +syntax = "proto3"; +package cosmos.auth.v1beta1; + +import "amino/amino.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "google/protobuf/any.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/auth/types"; + +// BaseAccount defines a base account type. It contains all the necessary fields +// for basic account functionality. Any custom account type should extend this +// type for additional functionality (e.g. vesting). +message BaseAccount { + option (amino.name) = "cosmos-sdk/BaseAccount"; + option (gogoproto.goproto_getters) = false; + option (gogoproto.equal) = false; + + option (cosmos_proto.implements_interface) = "cosmos.auth.v1beta1.AccountI"; + + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + google.protobuf.Any pub_key = 2 [(gogoproto.jsontag) = "public_key,omitempty", (amino.field_name) = "public_key"]; + + uint64 account_number = 3; + uint64 sequence = 4; +} + +// ModuleAccount defines an account for modules that holds coins on a pool. +message ModuleAccount { + option (amino.name) = "cosmos-sdk/ModuleAccount"; + option (amino.message_encoding) = "module_account"; + option (gogoproto.goproto_getters) = false; + option (cosmos_proto.implements_interface) = "cosmos.auth.v1beta1.ModuleAccountI"; + + BaseAccount base_account = 1 [(gogoproto.embed) = true]; + string name = 2; + repeated string permissions = 3; +} + +// ModuleCredential represents a unclaimable pubkey for base accounts controlled by modules. +// +// Since: cosmos-sdk 0.47 +message ModuleCredential { + option (amino.name) = "cosmos-sdk/GroupAccountCredential"; + // module_name is the name of the module used for address derivation (passed into address.Module). + string module_name = 1; + // derivation_keys is for deriving a module account address (passed into address.Module) + // adding more keys creates sub-account addresses (passed into address.Derive) + repeated bytes derivation_keys = 2; +} + +// Params defines the parameters for the auth module. +message Params { + option (amino.name) = "cosmos-sdk/x/auth/Params"; + option (gogoproto.equal) = true; + + uint64 max_memo_characters = 1; + uint64 tx_sig_limit = 2; + uint64 tx_size_cost_per_byte = 3; + uint64 sig_verify_cost_ed25519 = 4 [(gogoproto.customname) = "SigVerifyCostED25519"]; + uint64 sig_verify_cost_secp256k1 = 5 [(gogoproto.customname) = "SigVerifyCostSecp256k1"]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/auth/v1beta1/genesis.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/auth/v1beta1/genesis.proto new file mode 100644 index 00000000000..d1aa66e4626 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/auth/v1beta1/genesis.proto @@ -0,0 +1,18 @@ +syntax = "proto3"; +package cosmos.auth.v1beta1; + +import "google/protobuf/any.proto"; +import "gogoproto/gogo.proto"; +import "cosmos/auth/v1beta1/auth.proto"; +import "amino/amino.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/auth/types"; + +// GenesisState defines the auth module's genesis state. +message GenesisState { + // params defines all the parameters of the module. + Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // accounts are the accounts present at genesis. + repeated google.protobuf.Any accounts = 2; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/auth/v1beta1/query.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/auth/v1beta1/query.proto new file mode 100644 index 00000000000..804f2ff0800 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/auth/v1beta1/query.proto @@ -0,0 +1,236 @@ +syntax = "proto3"; +package cosmos.auth.v1beta1; + +import "cosmos/base/query/v1beta1/pagination.proto"; +import "gogoproto/gogo.proto"; +import "google/protobuf/any.proto"; +import "google/api/annotations.proto"; +import "cosmos/auth/v1beta1/auth.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/query/v1/query.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/auth/types"; + +// Query defines the gRPC querier service. +service Query { + // Accounts returns all the existing accounts. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + // + // Since: cosmos-sdk 0.43 + rpc Accounts(QueryAccountsRequest) returns (QueryAccountsResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/auth/v1beta1/accounts"; + } + + // Account returns account details based on address. + rpc Account(QueryAccountRequest) returns (QueryAccountResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/auth/v1beta1/accounts/{address}"; + } + + // AccountAddressByID returns account address based on account number. + // + // Since: cosmos-sdk 0.46.2 + rpc AccountAddressByID(QueryAccountAddressByIDRequest) returns (QueryAccountAddressByIDResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/auth/v1beta1/address_by_id/{id}"; + } + + // Params queries all parameters. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/auth/v1beta1/params"; + } + + // ModuleAccounts returns all the existing module accounts. + // + // Since: cosmos-sdk 0.46 + rpc ModuleAccounts(QueryModuleAccountsRequest) returns (QueryModuleAccountsResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/auth/v1beta1/module_accounts"; + } + + // ModuleAccountByName returns the module account info by module name + rpc ModuleAccountByName(QueryModuleAccountByNameRequest) returns (QueryModuleAccountByNameResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/auth/v1beta1/module_accounts/{name}"; + } + + // Bech32Prefix queries bech32Prefix + // + // Since: cosmos-sdk 0.46 + rpc Bech32Prefix(Bech32PrefixRequest) returns (Bech32PrefixResponse) { + option (google.api.http).get = "/cosmos/auth/v1beta1/bech32"; + } + + // AddressBytesToString converts Account Address bytes to string + // + // Since: cosmos-sdk 0.46 + rpc AddressBytesToString(AddressBytesToStringRequest) returns (AddressBytesToStringResponse) { + option (google.api.http).get = "/cosmos/auth/v1beta1/bech32/{address_bytes}"; + } + + // AddressStringToBytes converts Address string to bytes + // + // Since: cosmos-sdk 0.46 + rpc AddressStringToBytes(AddressStringToBytesRequest) returns (AddressStringToBytesResponse) { + option (google.api.http).get = "/cosmos/auth/v1beta1/bech32/{address_string}"; + } + + // AccountInfo queries account info which is common to all account types. + // + // Since: cosmos-sdk 0.47 + rpc AccountInfo(QueryAccountInfoRequest) returns (QueryAccountInfoResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/auth/v1beta1/account_info/{address}"; + } +} + +// QueryAccountsRequest is the request type for the Query/Accounts RPC method. +// +// Since: cosmos-sdk 0.43 +message QueryAccountsRequest { + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +// QueryAccountsResponse is the response type for the Query/Accounts RPC method. +// +// Since: cosmos-sdk 0.43 +message QueryAccountsResponse { + // accounts are the existing accounts + repeated google.protobuf.Any accounts = 1 [(cosmos_proto.accepts_interface) = "cosmos.auth.v1beta1.AccountI"]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryAccountRequest is the request type for the Query/Account RPC method. +message QueryAccountRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // address defines the address to query for. + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// QueryAccountResponse is the response type for the Query/Account RPC method. +message QueryAccountResponse { + // account defines the account of the corresponding address. + google.protobuf.Any account = 1 [(cosmos_proto.accepts_interface) = "cosmos.auth.v1beta1.AccountI"]; +} + +// QueryParamsRequest is the request type for the Query/Params RPC method. +message QueryParamsRequest {} + +// QueryParamsResponse is the response type for the Query/Params RPC method. +message QueryParamsResponse { + // params defines the parameters of the module. + Params params = 1 [(gogoproto.nullable) = false]; +} + +// QueryModuleAccountsRequest is the request type for the Query/ModuleAccounts RPC method. +// +// Since: cosmos-sdk 0.46 +message QueryModuleAccountsRequest {} + +// QueryModuleAccountsResponse is the response type for the Query/ModuleAccounts RPC method. +// +// Since: cosmos-sdk 0.46 +message QueryModuleAccountsResponse { + repeated google.protobuf.Any accounts = 1 [(cosmos_proto.accepts_interface) = "cosmos.auth.v1beta1.ModuleAccountI"]; +} + +// QueryModuleAccountByNameRequest is the request type for the Query/ModuleAccountByName RPC method. +message QueryModuleAccountByNameRequest { + string name = 1; +} + +// QueryModuleAccountByNameResponse is the response type for the Query/ModuleAccountByName RPC method. +message QueryModuleAccountByNameResponse { + google.protobuf.Any account = 1 [(cosmos_proto.accepts_interface) = "cosmos.auth.v1beta1.ModuleAccountI"]; +} + +// Bech32PrefixRequest is the request type for Bech32Prefix rpc method. +// +// Since: cosmos-sdk 0.46 +message Bech32PrefixRequest {} + +// Bech32PrefixResponse is the response type for Bech32Prefix rpc method. +// +// Since: cosmos-sdk 0.46 +message Bech32PrefixResponse { + string bech32_prefix = 1; +} + +// AddressBytesToStringRequest is the request type for AddressString rpc method. +// +// Since: cosmos-sdk 0.46 +message AddressBytesToStringRequest { + bytes address_bytes = 1; +} + +// AddressBytesToStringResponse is the response type for AddressString rpc method. +// +// Since: cosmos-sdk 0.46 +message AddressBytesToStringResponse { + string address_string = 1; +} + +// AddressStringToBytesRequest is the request type for AccountBytes rpc method. +// +// Since: cosmos-sdk 0.46 +message AddressStringToBytesRequest { + string address_string = 1; +} + +// AddressStringToBytesResponse is the response type for AddressBytes rpc method. +// +// Since: cosmos-sdk 0.46 +message AddressStringToBytesResponse { + bytes address_bytes = 1; +} + +// QueryAccountAddressByIDRequest is the request type for AccountAddressByID rpc method +// +// Since: cosmos-sdk 0.46.2 +message QueryAccountAddressByIDRequest { + // Deprecated, use account_id instead + // + // id is the account number of the address to be queried. This field + // should have been an uint64 (like all account numbers), and will be + // updated to uint64 in a future version of the auth query. + int64 id = 1 [deprecated = true]; + + // account_id is the account number of the address to be queried. + // + // Since: cosmos-sdk 0.47 + uint64 account_id = 2; +} + +// QueryAccountAddressByIDResponse is the response type for AccountAddressByID rpc method +// +// Since: cosmos-sdk 0.46.2 +message QueryAccountAddressByIDResponse { + string account_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// QueryAccountInfoRequest is the Query/AccountInfo request type. +// +// Since: cosmos-sdk 0.47 +message QueryAccountInfoRequest { + + // address is the account address string. + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// QueryAccountInfoResponse is the Query/AccountInfo response type. +// +// Since: cosmos-sdk 0.47 +message QueryAccountInfoResponse { + + // info is the account info which is represented by BaseAccount. + BaseAccount info = 1; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/auth/v1beta1/tx.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/auth/v1beta1/tx.proto new file mode 100644 index 00000000000..1edee037092 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/auth/v1beta1/tx.proto @@ -0,0 +1,43 @@ +syntax = "proto3"; +package cosmos.auth.v1beta1; + +import "gogoproto/gogo.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; +import "cosmos/auth/v1beta1/auth.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/auth/types"; + +// Msg defines the x/auth Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // UpdateParams defines a (governance) operation for updating the x/auth module + // parameters. The authority defaults to the x/gov module account. + // + // Since: cosmos-sdk 0.47 + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); +} + +// MsgUpdateParams is the Msg/UpdateParams request type. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "cosmos-sdk/x/auth/MsgUpdateParams"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // params defines the x/auth parameters to update. + // + // NOTE: All parameters must be supplied. + Params params = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParamsResponse {} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/authz/module/v1/module.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/authz/module/v1/module.proto new file mode 100644 index 00000000000..80058668268 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/authz/module/v1/module.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; + +package cosmos.authz.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the authz module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/authz" + }; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/authz/v1beta1/authz.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/authz/v1beta1/authz.proto new file mode 100644 index 00000000000..3fee7364365 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/authz/v1beta1/authz.proto @@ -0,0 +1,48 @@ +// Since: cosmos-sdk 0.43 +syntax = "proto3"; +package cosmos.authz.v1beta1; + +import "amino/amino.proto"; +import "cosmos_proto/cosmos.proto"; +import "google/protobuf/timestamp.proto"; +import "gogoproto/gogo.proto"; +import "google/protobuf/any.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/authz"; +option (gogoproto.goproto_getters_all) = false; + +// GenericAuthorization gives the grantee unrestricted permissions to execute +// the provided method on behalf of the granter's account. +message GenericAuthorization { + option (amino.name) = "cosmos-sdk/GenericAuthorization"; + option (cosmos_proto.implements_interface) = "cosmos.authz.v1beta1.Authorization"; + + // Msg, identified by it's type URL, to grant unrestricted permissions to execute + string msg = 1; +} + +// Grant gives permissions to execute +// the provide method with expiration time. +message Grant { + google.protobuf.Any authorization = 1 [(cosmos_proto.accepts_interface) = "cosmos.authz.v1beta1.Authorization"]; + // time when the grant will expire and will be pruned. If null, then the grant + // doesn't have a time expiration (other conditions in `authorization` + // may apply to invalidate the grant) + google.protobuf.Timestamp expiration = 2 [(gogoproto.stdtime) = true, (gogoproto.nullable) = true]; +} + +// GrantAuthorization extends a grant with both the addresses of the grantee and granter. +// It is used in genesis.proto and query.proto +message GrantAuthorization { + string granter = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string grantee = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + google.protobuf.Any authorization = 3 [(cosmos_proto.accepts_interface) = "cosmos.authz.v1beta1.Authorization"]; + google.protobuf.Timestamp expiration = 4 [(gogoproto.stdtime) = true]; +} + +// GrantQueueItem contains the list of TypeURL of a sdk.Msg. +message GrantQueueItem { + // msg_type_urls contains the list of TypeURL of a sdk.Msg. + repeated string msg_type_urls = 1; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/authz/v1beta1/event.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/authz/v1beta1/event.proto new file mode 100644 index 00000000000..0476649afc1 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/authz/v1beta1/event.proto @@ -0,0 +1,27 @@ +// Since: cosmos-sdk 0.43 +syntax = "proto3"; +package cosmos.authz.v1beta1; + +import "cosmos_proto/cosmos.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/authz"; + +// EventGrant is emitted on Msg/Grant +message EventGrant { + // Msg type URL for which an autorization is granted + string msg_type_url = 2; + // Granter account address + string granter = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // Grantee account address + string grantee = 4 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// EventRevoke is emitted on Msg/Revoke +message EventRevoke { + // Msg type URL for which an autorization is revoked + string msg_type_url = 2; + // Granter account address + string granter = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // Grantee account address + string grantee = 4 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/authz/v1beta1/genesis.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/authz/v1beta1/genesis.proto new file mode 100644 index 00000000000..9fefff45068 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/authz/v1beta1/genesis.proto @@ -0,0 +1,14 @@ +// Since: cosmos-sdk 0.43 +syntax = "proto3"; +package cosmos.authz.v1beta1; + +import "gogoproto/gogo.proto"; +import "cosmos/authz/v1beta1/authz.proto"; +import "amino/amino.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/authz"; + +// GenesisState defines the authz module's genesis state. +message GenesisState { + repeated GrantAuthorization authorization = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/authz/v1beta1/query.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/authz/v1beta1/query.proto new file mode 100644 index 00000000000..fcd56815a64 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/authz/v1beta1/query.proto @@ -0,0 +1,82 @@ +// Since: cosmos-sdk 0.43 +syntax = "proto3"; +package cosmos.authz.v1beta1; + +import "google/api/annotations.proto"; +import "cosmos/base/query/v1beta1/pagination.proto"; +import "cosmos/authz/v1beta1/authz.proto"; +import "cosmos_proto/cosmos.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/authz"; + +// Query defines the gRPC querier service. +service Query { + // Returns list of `Authorization`, granted to the grantee by the granter. + rpc Grants(QueryGrantsRequest) returns (QueryGrantsResponse) { + option (google.api.http).get = "/cosmos/authz/v1beta1/grants"; + } + + // GranterGrants returns list of `GrantAuthorization`, granted by granter. + // + // Since: cosmos-sdk 0.46 + rpc GranterGrants(QueryGranterGrantsRequest) returns (QueryGranterGrantsResponse) { + option (google.api.http).get = "/cosmos/authz/v1beta1/grants/granter/{granter}"; + } + + // GranteeGrants returns a list of `GrantAuthorization` by grantee. + // + // Since: cosmos-sdk 0.46 + rpc GranteeGrants(QueryGranteeGrantsRequest) returns (QueryGranteeGrantsResponse) { + option (google.api.http).get = "/cosmos/authz/v1beta1/grants/grantee/{grantee}"; + } +} + +// QueryGrantsRequest is the request type for the Query/Grants RPC method. +message QueryGrantsRequest { + string granter = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string grantee = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // Optional, msg_type_url, when set, will query only grants matching given msg type. + string msg_type_url = 3; + // pagination defines an pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 4; +} + +// QueryGrantsResponse is the response type for the Query/Authorizations RPC method. +message QueryGrantsResponse { + // authorizations is a list of grants granted for grantee by granter. + repeated Grant grants = 1; + // pagination defines an pagination for the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryGranterGrantsRequest is the request type for the Query/GranterGrants RPC method. +message QueryGranterGrantsRequest { + string granter = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // pagination defines an pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryGranterGrantsResponse is the response type for the Query/GranterGrants RPC method. +message QueryGranterGrantsResponse { + // grants is a list of grants granted by the granter. + repeated GrantAuthorization grants = 1; + // pagination defines an pagination for the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryGranteeGrantsRequest is the request type for the Query/GranteeGrants RPC method. +message QueryGranteeGrantsRequest { + string grantee = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // pagination defines an pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryGranteeGrantsResponse is the response type for the Query/GranteeGrants RPC method. +message QueryGranteeGrantsResponse { + // grants is a list of grants granted to the grantee. + repeated GrantAuthorization grants = 1; + // pagination defines an pagination for the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/authz/v1beta1/tx.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/authz/v1beta1/tx.proto new file mode 100644 index 00000000000..a1abff0d6f0 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/authz/v1beta1/tx.proto @@ -0,0 +1,81 @@ +// Since: cosmos-sdk 0.43 +syntax = "proto3"; +package cosmos.authz.v1beta1; + +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "google/protobuf/any.proto"; +import "cosmos/authz/v1beta1/authz.proto"; +import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/authz"; +option (gogoproto.goproto_getters_all) = false; + +// Msg defines the authz Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // Grant grants the provided authorization to the grantee on the granter's + // account with the provided expiration time. If there is already a grant + // for the given (granter, grantee, Authorization) triple, then the grant + // will be overwritten. + rpc Grant(MsgGrant) returns (MsgGrantResponse); + + // Exec attempts to execute the provided messages using + // authorizations granted to the grantee. Each message should have only + // one signer corresponding to the granter of the authorization. + rpc Exec(MsgExec) returns (MsgExecResponse); + + // Revoke revokes any authorization corresponding to the provided method name on the + // granter's account that has been granted to the grantee. + rpc Revoke(MsgRevoke) returns (MsgRevokeResponse); +} + +// MsgGrant is a request type for Grant method. It declares authorization to the grantee +// on behalf of the granter with the provided expiration time. +message MsgGrant { + option (cosmos.msg.v1.signer) = "granter"; + option (amino.name) = "cosmos-sdk/MsgGrant"; + + string granter = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string grantee = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + cosmos.authz.v1beta1.Grant grant = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// MsgGrantResponse defines the Msg/MsgGrant response type. +message MsgGrantResponse {} + +// MsgExec attempts to execute the provided messages using +// authorizations granted to the grantee. Each message should have only +// one signer corresponding to the granter of the authorization. +message MsgExec { + option (cosmos.msg.v1.signer) = "grantee"; + option (amino.name) = "cosmos-sdk/MsgExec"; + + string grantee = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // Execute Msg. + // The x/authz will try to find a grant matching (msg.signers[0], grantee, MsgTypeURL(msg)) + // triple and validate it. + repeated google.protobuf.Any msgs = 2 [(cosmos_proto.accepts_interface) = "cosmos.base.v1beta1.Msg"]; +} + +// MsgExecResponse defines the Msg/MsgExecResponse response type. +message MsgExecResponse { + repeated bytes results = 1; +} + +// MsgRevoke revokes any authorization with the provided sdk.Msg type on the +// granter's account with that has been granted to the grantee. +message MsgRevoke { + option (cosmos.msg.v1.signer) = "granter"; + option (amino.name) = "cosmos-sdk/MsgRevoke"; + + string granter = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string grantee = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string msg_type_url = 3; +} + +// MsgRevokeResponse defines the Msg/MsgRevokeResponse response type. +message MsgRevokeResponse {} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/autocli/v1/options.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/autocli/v1/options.proto index 8160a6e0276..b023490c970 100644 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/autocli/v1/options.proto +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/autocli/v1/options.proto @@ -2,7 +2,6 @@ syntax = "proto3"; package cosmos.autocli.v1; -import "cosmos_proto/cosmos.proto"; option go_package = "cosmossdk.io/api/cosmos/base/cli/v1;cliv1"; // ModuleOptions describes the CLI options for a Cosmos SDK module. @@ -31,14 +30,6 @@ message ServiceCommandDescriptor { // different protobuf services. The map key is used as the name of the // sub-command. map sub_commands = 3; - - // enhance_custom_commands specifies whether to skip the service when generating commands, if a custom command already - // exists, or enhance the existing command. If set to true, the custom command will be enhanced with the services from - // gRPC. otherwise when a custom command exists, no commands will be generated for the service. - bool enhance_custom_command = 4; - - // short is an optional parameter used to override the short description of the auto generated command. - string short = 5; } // RpcCommandOptions specifies options for commands generated from protobuf @@ -90,12 +81,6 @@ message RpcCommandOptions { // skip specifies whether to skip this rpc method when generating commands. bool skip = 12; - - // gov_proposal specifies whether autocli should generate a gov proposal transaction for this rpc method. - // Normally autocli generates a transaction containing the message and broadcast it. - // However, when true, autocli generates a proposal transaction containing the message and broadcast it. - // This option is ineffective for query commands. - bool gov_proposal = 13 [(cosmos_proto.field_added_in) = "client/v2 v2.0.0-beta.2"]; } // FlagOptions are options for flags generated from rpc request fields. @@ -134,10 +119,6 @@ message PositionalArgDescriptor { // varargs makes a positional parameter a varargs parameter. This can only be // applied to last positional parameter and the proto_field must a repeated - // field. Note: It is mutually exclusive with optional. + // field. bool varargs = 2; - - // optional makes the last positional parameter optional. - // Note: It is mutually exclusive with varargs. - bool optional = 3; } diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/bank/module/v1/module.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/bank/module/v1/module.proto new file mode 100644 index 00000000000..d7d4a7fafdf --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/bank/module/v1/module.proto @@ -0,0 +1,26 @@ +syntax = "proto3"; + +package cosmos.bank.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the bank module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/bank" + }; + + // blocked_module_accounts_override configures exceptional module accounts which should be blocked from receiving + // funds. If left empty it defaults to the list of account names supplied in the auth module configuration as + // module_account_permissions + repeated string blocked_module_accounts_override = 1; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 2; + + // restrictions_order specifies the order of send restrictions and should be + // a list of module names which provide a send restriction instance. If no + // order is provided, then restrictions will be applied in alphabetical order + // of module names. + repeated string restrictions_order = 3; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/bank/v1beta1/authz.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/bank/v1beta1/authz.proto new file mode 100644 index 00000000000..d42c619a5b7 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/bank/v1beta1/authz.proto @@ -0,0 +1,31 @@ +syntax = "proto3"; +package cosmos.bank.v1beta1; + +import "amino/amino.proto"; +import "gogoproto/gogo.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/base/v1beta1/coin.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/bank/types"; + +// SendAuthorization allows the grantee to spend up to spend_limit coins from +// the granter's account. +// +// Since: cosmos-sdk 0.43 +message SendAuthorization { + option (cosmos_proto.implements_interface) = "cosmos.authz.v1beta1.Authorization"; + option (amino.name) = "cosmos-sdk/SendAuthorization"; + + repeated cosmos.base.v1beta1.Coin spend_limit = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + + // allow_list specifies an optional list of addresses to whom the grantee can send tokens on behalf of the + // granter. If omitted, any recipient is allowed. + // + // Since: cosmos-sdk 0.47 + repeated string allow_list = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/bank/v1beta1/bank.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/bank/v1beta1/bank.proto new file mode 100644 index 00000000000..cbf6a41cf88 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/bank/v1beta1/bank.proto @@ -0,0 +1,125 @@ +syntax = "proto3"; +package cosmos.bank.v1beta1; + +import "gogoproto/gogo.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/bank/types"; + +// Params defines the parameters for the bank module. +message Params { + option (amino.name) = "cosmos-sdk/x/bank/Params"; + // Deprecated: Use of SendEnabled in params is deprecated. + // For genesis, use the newly added send_enabled field in the genesis object. + // Storage, lookup, and manipulation of this information is now in the keeper. + // + // As of cosmos-sdk 0.47, this only exists for backwards compatibility of genesis files. + repeated SendEnabled send_enabled = 1 [deprecated = true]; + bool default_send_enabled = 2; +} + +// SendEnabled maps coin denom to a send_enabled status (whether a denom is +// sendable). +message SendEnabled { + option (gogoproto.equal) = true; + string denom = 1; + bool enabled = 2; +} + +// Input models transaction input. +message Input { + option (cosmos.msg.v1.signer) = "address"; + + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + repeated cosmos.base.v1beta1.Coin coins = 2 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +// Output models transaction outputs. +message Output { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + repeated cosmos.base.v1beta1.Coin coins = 2 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +// Supply represents a struct that passively keeps track of the total supply +// amounts in the network. +// This message is deprecated now that supply is indexed by denom. +message Supply { + option deprecated = true; + + option (gogoproto.equal) = true; + option (gogoproto.goproto_getters) = false; + + option (cosmos_proto.implements_interface) = "cosmos.bank.v1beta1.SupplyI"; + + repeated cosmos.base.v1beta1.Coin total = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +// DenomUnit represents a struct that describes a given +// denomination unit of the basic token. +message DenomUnit { + // denom represents the string name of the given denom unit (e.g uatom). + string denom = 1; + // exponent represents power of 10 exponent that one must + // raise the base_denom to in order to equal the given DenomUnit's denom + // 1 denom = 10^exponent base_denom + // (e.g. with a base_denom of uatom, one can create a DenomUnit of 'atom' with + // exponent = 6, thus: 1 atom = 10^6 uatom). + uint32 exponent = 2; + // aliases is a list of string aliases for the given denom + repeated string aliases = 3; +} + +// Metadata represents a struct that describes +// a basic token. +message Metadata { + string description = 1; + // denom_units represents the list of DenomUnit's for a given coin + repeated DenomUnit denom_units = 2; + // base represents the base denom (should be the DenomUnit with exponent = 0). + string base = 3; + // display indicates the suggested denom that should be + // displayed in clients. + string display = 4; + // name defines the name of the token (eg: Cosmos Atom) + // + // Since: cosmos-sdk 0.43 + string name = 5; + // symbol is the token symbol usually shown on exchanges (eg: ATOM). This can + // be the same as the display. + // + // Since: cosmos-sdk 0.43 + string symbol = 6; + // URI to a document (on or off-chain) that contains additional information. Optional. + // + // Since: cosmos-sdk 0.46 + string uri = 7 [(gogoproto.customname) = "URI"]; + // URIHash is a sha256 hash of a document pointed by URI. It's used to verify that + // the document didn't change. Optional. + // + // Since: cosmos-sdk 0.46 + string uri_hash = 8 [(gogoproto.customname) = "URIHash"]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/bank/v1beta1/genesis.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/bank/v1beta1/genesis.proto new file mode 100644 index 00000000000..caf05a95bb2 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/bank/v1beta1/genesis.proto @@ -0,0 +1,54 @@ +syntax = "proto3"; +package cosmos.bank.v1beta1; + +import "gogoproto/gogo.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/bank/v1beta1/bank.proto"; +import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/bank/types"; + +// GenesisState defines the bank module's genesis state. +message GenesisState { + // params defines all the parameters of the module. + Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // balances is an array containing the balances of all the accounts. + repeated Balance balances = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // supply represents the total supply. If it is left empty, then supply will be calculated based on the provided + // balances. Otherwise, it will be used to validate that the sum of the balances equals this amount. + repeated cosmos.base.v1beta1.Coin supply = 3 [ + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + + // denom_metadata defines the metadata of the different coins. + repeated Metadata denom_metadata = 4 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // send_enabled defines the denoms where send is enabled or disabled. + // + // Since: cosmos-sdk 0.47 + repeated SendEnabled send_enabled = 5 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// Balance defines an account address and balance pair used in the bank module's +// genesis state. +message Balance { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // address is the address of the balance holder. + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // coins defines the different coins this balance holds. + repeated cosmos.base.v1beta1.Coin coins = 2 [ + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/bank/v1beta1/query.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/bank/v1beta1/query.proto new file mode 100644 index 00000000000..3edd2b369e4 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/bank/v1beta1/query.proto @@ -0,0 +1,461 @@ +syntax = "proto3"; +package cosmos.bank.v1beta1; + +import "cosmos/base/query/v1beta1/pagination.proto"; +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/bank/v1beta1/bank.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/query/v1/query.proto"; +import "amino/amino.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/bank/types"; + +// Query defines the gRPC querier service. +service Query { + // Balance queries the balance of a single coin for a single account. + rpc Balance(QueryBalanceRequest) returns (QueryBalanceResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/balances/{address}/by_denom"; + } + + // AllBalances queries the balance of all coins for a single account. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + rpc AllBalances(QueryAllBalancesRequest) returns (QueryAllBalancesResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/balances/{address}"; + } + + // SpendableBalances queries the spendable balance of all coins for a single + // account. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + // + // Since: cosmos-sdk 0.46 + rpc SpendableBalances(QuerySpendableBalancesRequest) returns (QuerySpendableBalancesResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/spendable_balances/{address}"; + } + + // SpendableBalanceByDenom queries the spendable balance of a single denom for + // a single account. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + // + // Since: cosmos-sdk 0.47 + rpc SpendableBalanceByDenom(QuerySpendableBalanceByDenomRequest) returns (QuerySpendableBalanceByDenomResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/spendable_balances/{address}/by_denom"; + } + + // TotalSupply queries the total supply of all coins. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + rpc TotalSupply(QueryTotalSupplyRequest) returns (QueryTotalSupplyResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/supply"; + } + + // SupplyOf queries the supply of a single coin. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + rpc SupplyOf(QuerySupplyOfRequest) returns (QuerySupplyOfResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/supply/by_denom"; + } + + // TotalSupplyWithoutOffset queries the total supply of all coins. + rpc TotalSupplyWithoutOffset(QueryTotalSupplyWithoutOffsetRequest) returns (QueryTotalSupplyWithoutOffsetResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/supply_without_offset"; + } + + // SupplyOf queries the supply of a single coin. + rpc SupplyOfWithoutOffset(QuerySupplyOfWithoutOffsetRequest) returns (QuerySupplyOfWithoutOffsetResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/supply_without_offset/{denom}"; + } + + // Params queries the parameters of x/bank module. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/params"; + } + + // DenomMetadata queries the client metadata of a given coin denomination. + rpc DenomMetadata(QueryDenomMetadataRequest) returns (QueryDenomMetadataResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/denoms_metadata/{denom}"; + } + + // DenomMetadataByQueryString queries the client metadata of a given coin denomination. + rpc DenomMetadataByQueryString(QueryDenomMetadataByQueryStringRequest) + returns (QueryDenomMetadataByQueryStringResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/denoms_metadata_by_query_string"; + } + // DenomsMetadata queries the client metadata for all registered coin + // denominations. + rpc DenomsMetadata(QueryDenomsMetadataRequest) returns (QueryDenomsMetadataResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/denoms_metadata"; + } + + // DenomOwners queries for all account addresses that own a particular token + // denomination. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + // + // Since: cosmos-sdk 0.46 + rpc DenomOwners(QueryDenomOwnersRequest) returns (QueryDenomOwnersResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/denom_owners/{denom}"; + } + + // DenomOwnersByQuery queries for all account addresses that own a particular token + // denomination. + // + // Since: cosmos-sdk 0.50.3 + rpc DenomOwnersByQuery(QueryDenomOwnersByQueryRequest) returns (QueryDenomOwnersByQueryResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/denom_owners_by_query"; + } + + // SendEnabled queries for SendEnabled entries. + // + // This query only returns denominations that have specific SendEnabled settings. + // Any denomination that does not have a specific setting will use the default + // params.default_send_enabled, and will not be returned by this query. + // + // Since: cosmos-sdk 0.47 + rpc SendEnabled(QuerySendEnabledRequest) returns (QuerySendEnabledResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/bank/v1beta1/send_enabled"; + } +} + +// QueryBalanceRequest is the request type for the Query/Balance RPC method. +message QueryBalanceRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // address is the address to query balances for. + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // denom is the coin denom to query balances for. + string denom = 2; +} + +// QueryBalanceResponse is the response type for the Query/Balance RPC method. +message QueryBalanceResponse { + // balance is the balance of the coin. + cosmos.base.v1beta1.Coin balance = 1; +} + +// QueryBalanceRequest is the request type for the Query/AllBalances RPC method. +message QueryAllBalancesRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // address is the address to query balances for. + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; + + // resolve_denom is the flag to resolve the denom into a human-readable form from the metadata. + // + // Since: cosmos-sdk 0.50 + bool resolve_denom = 3; +} + +// QueryAllBalancesResponse is the response type for the Query/AllBalances RPC +// method. +message QueryAllBalancesResponse { + // balances is the balances of all the coins. + repeated cosmos.base.v1beta1.Coin balances = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QuerySpendableBalancesRequest defines the gRPC request structure for querying +// an account's spendable balances. +// +// Since: cosmos-sdk 0.46 +message QuerySpendableBalancesRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // address is the address to query spendable balances for. + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QuerySpendableBalancesResponse defines the gRPC response structure for querying +// an account's spendable balances. +// +// Since: cosmos-sdk 0.46 +message QuerySpendableBalancesResponse { + // balances is the spendable balances of all the coins. + repeated cosmos.base.v1beta1.Coin balances = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QuerySpendableBalanceByDenomRequest defines the gRPC request structure for +// querying an account's spendable balance for a specific denom. +// +// Since: cosmos-sdk 0.47 +message QuerySpendableBalanceByDenomRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // address is the address to query balances for. + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // denom is the coin denom to query balances for. + string denom = 2; +} + +// QuerySpendableBalanceByDenomResponse defines the gRPC response structure for +// querying an account's spendable balance for a specific denom. +// +// Since: cosmos-sdk 0.47 +message QuerySpendableBalanceByDenomResponse { + // balance is the balance of the coin. + cosmos.base.v1beta1.Coin balance = 1; +} + +// QueryTotalSupplyRequest is the request type for the Query/TotalSupply RPC +// method. +message QueryTotalSupplyRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // pagination defines an optional pagination for the request. + // + // Since: cosmos-sdk 0.43 + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +// QueryTotalSupplyResponse is the response type for the Query/TotalSupply RPC +// method +message QueryTotalSupplyResponse { + // supply is the supply of the coins + repeated cosmos.base.v1beta1.Coin supply = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + + // pagination defines the pagination in the response. + // + // Since: cosmos-sdk 0.43 + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QuerySupplyOfRequest is the request type for the Query/SupplyOf RPC method. +message QuerySupplyOfRequest { + // denom is the coin denom to query balances for. + string denom = 1; +} + +// QuerySupplyOfResponse is the response type for the Query/SupplyOf RPC method. +message QuerySupplyOfResponse { + // amount is the supply of the coin. + cosmos.base.v1beta1.Coin amount = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// QueryTotalSupplyWithoutOffsetRequest is the request type for the Query/TotalSupplyWithoutOffset RPC +// method. +message QueryTotalSupplyWithoutOffsetRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // pagination defines an optional pagination for the request. + // + // Since: cosmos-sdk 0.43 + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +// QueryTotalSupplyWithoutOffsetResponse is the response type for the Query/TotalSupplyWithoutOffset RPC +// method +message QueryTotalSupplyWithoutOffsetResponse { + // supply is the supply of the coins + repeated cosmos.base.v1beta1.Coin supply = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + + // pagination defines the pagination in the response. + // + // Since: cosmos-sdk 0.43 + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QuerySupplyOfWithoutOffsetRequest is the request type for the Query/SupplyOfWithoutOffset RPC method. +message QuerySupplyOfWithoutOffsetRequest { + // denom is the coin denom to query balances for. + string denom = 1; +} + +// QuerySupplyOfWithoutOffsetResponse is the response type for the Query/SupplyOfWithoutOffset RPC method. +message QuerySupplyOfWithoutOffsetResponse { + // amount is the supply of the coin. + cosmos.base.v1beta1.Coin amount = 1 [(gogoproto.nullable) = false]; +} + +// QueryParamsRequest defines the request type for querying x/bank parameters. +message QueryParamsRequest {} + +// QueryParamsResponse defines the response type for querying x/bank parameters. +message QueryParamsResponse { + // params provides the parameters of the bank module. + Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// QueryDenomsMetadataRequest is the request type for the Query/DenomsMetadata RPC method. +message QueryDenomsMetadataRequest { + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +// QueryDenomsMetadataResponse is the response type for the Query/DenomsMetadata RPC +// method. +message QueryDenomsMetadataResponse { + // metadata provides the client information for all the registered tokens. + repeated Metadata metadatas = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryDenomMetadataRequest is the request type for the Query/DenomMetadata RPC method. +message QueryDenomMetadataRequest { + // denom is the coin denom to query the metadata for. + string denom = 1; +} + +// QueryDenomMetadataResponse is the response type for the Query/DenomMetadata RPC +// method. +message QueryDenomMetadataResponse { + // metadata describes and provides all the client information for the requested token. + Metadata metadata = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// QueryDenomMetadataByQueryStringRequest is the request type for the Query/DenomMetadata RPC method. +// Identical with QueryDenomMetadataRequest but receives denom as query string. +message QueryDenomMetadataByQueryStringRequest { + // denom is the coin denom to query the metadata for. + string denom = 1; +} + +// QueryDenomMetadataByQueryStringResponse is the response type for the Query/DenomMetadata RPC +// method. Identical with QueryDenomMetadataResponse but receives denom as query string in request. +message QueryDenomMetadataByQueryStringResponse { + // metadata describes and provides all the client information for the requested token. + Metadata metadata = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// QueryDenomOwnersRequest defines the request type for the DenomOwners RPC query, +// which queries for a paginated set of all account holders of a particular +// denomination. +message QueryDenomOwnersRequest { + // denom defines the coin denomination to query all account holders for. + string denom = 1; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// DenomOwner defines structure representing an account that owns or holds a +// particular denominated token. It contains the account address and account +// balance of the denominated token. +// +// Since: cosmos-sdk 0.46 +message DenomOwner { + // address defines the address that owns a particular denomination. + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // balance is the balance of the denominated coin for an account. + cosmos.base.v1beta1.Coin balance = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// QueryDenomOwnersResponse defines the RPC response of a DenomOwners RPC query. +// +// Since: cosmos-sdk 0.46 +message QueryDenomOwnersResponse { + repeated DenomOwner denom_owners = 1; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryDenomOwnersByQueryRequest defines the request type for the DenomOwnersByQuery RPC query, +// which queries for a paginated set of all account holders of a particular +// denomination. +// +// Since: cosmos-sdk 0.50.3 +message QueryDenomOwnersByQueryRequest { + // denom defines the coin denomination to query all account holders for. + string denom = 1; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryDenomOwnersByQueryResponse defines the RPC response of a DenomOwnersByQuery RPC query. +// +// Since: cosmos-sdk 0.50.3 +message QueryDenomOwnersByQueryResponse { + repeated DenomOwner denom_owners = 1; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QuerySendEnabledRequest defines the RPC request for looking up SendEnabled entries. +// +// Since: cosmos-sdk 0.47 +message QuerySendEnabledRequest { + // denoms is the specific denoms you want look up. Leave empty to get all entries. + repeated string denoms = 1; + // pagination defines an optional pagination for the request. This field is + // only read if the denoms field is empty. + cosmos.base.query.v1beta1.PageRequest pagination = 99; +} + +// QuerySendEnabledResponse defines the RPC response of a SendEnable query. +// +// Since: cosmos-sdk 0.47 +message QuerySendEnabledResponse { + repeated SendEnabled send_enabled = 1; + // pagination defines the pagination in the response. This field is only + // populated if the denoms field in the request is empty. + cosmos.base.query.v1beta1.PageResponse pagination = 99; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/bank/v1beta1/tx.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/bank/v1beta1/tx.proto new file mode 100644 index 00000000000..a4e8fae41f8 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/bank/v1beta1/tx.proto @@ -0,0 +1,124 @@ +syntax = "proto3"; +package cosmos.bank.v1beta1; + +import "gogoproto/gogo.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/bank/v1beta1/bank.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/bank/types"; + +// Msg defines the bank Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // Send defines a method for sending coins from one account to another account. + rpc Send(MsgSend) returns (MsgSendResponse); + + // MultiSend defines a method for sending coins from some accounts to other accounts. + rpc MultiSend(MsgMultiSend) returns (MsgMultiSendResponse); + + // UpdateParams defines a governance operation for updating the x/bank module parameters. + // The authority is defined in the keeper. + // + // Since: cosmos-sdk 0.47 + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); + + // SetSendEnabled is a governance operation for setting the SendEnabled flag + // on any number of Denoms. Only the entries to add or update should be + // included. Entries that already exist in the store, but that aren't + // included in this message, will be left unchanged. + // + // Since: cosmos-sdk 0.47 + rpc SetSendEnabled(MsgSetSendEnabled) returns (MsgSetSendEnabledResponse); +} + +// MsgSend represents a message to send coins from one account to another. +message MsgSend { + option (cosmos.msg.v1.signer) = "from_address"; + option (amino.name) = "cosmos-sdk/MsgSend"; + + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string from_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string to_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + repeated cosmos.base.v1beta1.Coin amount = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +// MsgSendResponse defines the Msg/Send response type. +message MsgSendResponse {} + +// MsgMultiSend represents an arbitrary multi-in, multi-out send message. +message MsgMultiSend { + option (cosmos.msg.v1.signer) = "inputs"; + option (amino.name) = "cosmos-sdk/MsgMultiSend"; + + option (gogoproto.equal) = false; + + // Inputs, despite being `repeated`, only allows one sender input. This is + // checked in MsgMultiSend's ValidateBasic. + repeated Input inputs = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + repeated Output outputs = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// MsgMultiSendResponse defines the Msg/MultiSend response type. +message MsgMultiSendResponse {} + +// MsgUpdateParams is the Msg/UpdateParams request type. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + option (amino.name) = "cosmos-sdk/x/bank/MsgUpdateParams"; + + // params defines the x/bank parameters to update. + // + // NOTE: All parameters must be supplied. + Params params = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParamsResponse {} + +// MsgSetSendEnabled is the Msg/SetSendEnabled request type. +// +// Only entries to add/update/delete need to be included. +// Existing SendEnabled entries that are not included in this +// message are left unchanged. +// +// Since: cosmos-sdk 0.47 +message MsgSetSendEnabled { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "cosmos-sdk/MsgSetSendEnabled"; + + // authority is the address that controls the module. + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // send_enabled is the list of entries to add or update. + repeated SendEnabled send_enabled = 2; + + // use_default_for is a list of denoms that should use the params.default_send_enabled value. + // Denoms listed here will have their SendEnabled entries deleted. + // If a denom is included that doesn't have a SendEnabled entry, + // it will be ignored. + repeated string use_default_for = 3; +} + +// MsgSetSendEnabledResponse defines the Msg/SetSendEnabled response type. +// +// Since: cosmos-sdk 0.47 +message MsgSetSendEnabledResponse {} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/base/abci/v1beta1/abci.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/base/abci/v1beta1/abci.proto index 5a8fe622716..9e3b4e55dbc 100644 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/base/abci/v1beta1/abci.proto +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/base/abci/v1beta1/abci.proto @@ -2,10 +2,9 @@ syntax = "proto3"; package cosmos.base.abci.v1beta1; import "gogoproto/gogo.proto"; -import "cometbft/abci/v1/types.proto"; -import "cometbft/types/v1/block.proto"; +import "tendermint/abci/types.proto"; +import "tendermint/types/block.proto"; import "google/protobuf/any.proto"; -import "cosmos_proto/cosmos.proto"; option go_package = "github.com/cosmos/cosmos-sdk/types"; option (gogoproto.goproto_stringer_all) = false; @@ -47,8 +46,7 @@ message TxResponse { // additional metadata, emitted only by processing the messages. // // Since: cosmos-sdk 0.42.11, 0.44.5, 0.45 - repeated cometbft.abci.v1.Event events = 13 - [(gogoproto.nullable) = false, (cosmos_proto.field_added_in) = "cosmos-sdk 0.45"]; + repeated tendermint.abci.Event events = 13 [(gogoproto.nullable) = false]; } // ABCIMessageLog defines a structure containing an indexed tx ABCI message log. @@ -103,10 +101,12 @@ message Result { // Events contains a slice of Event objects that were emitted during message // or handler execution. - repeated cometbft.abci.v1.Event events = 3 [(gogoproto.nullable) = false]; + repeated tendermint.abci.Event events = 3 [(gogoproto.nullable) = false]; // msg_responses contains the Msg handler responses type packed in Anys. - repeated google.protobuf.Any msg_responses = 4 [(cosmos_proto.field_added_in) = "cosmos-sdk 0.46"]; + // + // Since: cosmos-sdk 0.46 + repeated google.protobuf.Any msg_responses = 4; } // SimulationResponse defines the response generated when a transaction is @@ -135,7 +135,9 @@ message TxMsgData { repeated MsgData data = 1 [deprecated = true]; // msg_responses contains the Msg handler responses packed into Anys. - repeated google.protobuf.Any msg_responses = 2 [(cosmos_proto.field_added_in) = "cosmos-sdk 0.46"]; + // + // Since: cosmos-sdk 0.46 + repeated google.protobuf.Any msg_responses = 2; } // SearchTxsResult defines a structure for querying txs pageable @@ -171,5 +173,5 @@ message SearchBlocksResult { // Max count blocks per page int64 limit = 5; // List of blocks in current page - repeated cometbft.types.v1.Block blocks = 6; + repeated tendermint.types.Block blocks = 6; } diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/base/node/v1beta1/query.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/base/node/v1beta1/query.proto index 268c85b79d5..95df568f117 100644 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/base/node/v1beta1/query.proto +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/base/node/v1beta1/query.proto @@ -30,10 +30,10 @@ message ConfigResponse { uint64 halt_height = 4; } -// StatusRequest defines the request structure for the status of a node. +// StateRequest defines the request structure for the status of a node. message StatusRequest {} -// StatusResponse defines the response structure for the status of a node. +// StateResponse defines the response structure for the status of a node. message StatusResponse { uint64 earliest_store_height = 1; // earliest block height available in the store uint64 height = 2; // current block height diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/base/query/v1beta1/pagination.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/base/query/v1beta1/pagination.proto index fc5f376db52..0a368144aba 100644 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/base/query/v1beta1/pagination.proto +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/base/query/v1beta1/pagination.proto @@ -1,8 +1,6 @@ syntax = "proto3"; package cosmos.base.query.v1beta1; -import "cosmos_proto/cosmos.proto"; - option go_package = "github.com/cosmos/cosmos-sdk/types/query"; // PageRequest is to be embedded in gRPC request messages for efficient @@ -34,7 +32,9 @@ message PageRequest { bool count_total = 4; // reverse is set to true if results are to be returned in the descending order. - bool reverse = 5 [(cosmos_proto.field_added_in) = "cosmos-sdk 0.43"]; + // + // Since: cosmos-sdk 0.43 + bool reverse = 5; } // PageResponse is to be embedded in gRPC response messages where the diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/base/reflection/v2alpha1/reflection.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/base/reflection/v2alpha1/reflection.proto index ec8bf2f1d80..d5b048558fa 100644 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/base/reflection/v2alpha1/reflection.proto +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/base/reflection/v2alpha1/reflection.proto @@ -17,7 +17,7 @@ message AppDescriptor { CodecDescriptor codec = 3; // configuration provides metadata information regarding the sdk.Config type ConfigurationDescriptor configuration = 4; - // query_services provides metadata information regarding the available queryable endpoints + // query_services provides metadata information regarding the available queriable endpoints QueryServicesDescriptor query_services = 5; // tx provides metadata information regarding how to send transactions to the given application TxDescriptor tx = 6; @@ -190,7 +190,7 @@ message GetTxDescriptorResponse { TxDescriptor tx = 1; } -// QueryServicesDescriptor contains the list of cosmos-sdk queryable services +// QueryServicesDescriptor contains the list of cosmos-sdk queriable services message QueryServicesDescriptor { // query_services is a list of cosmos-sdk QueryServiceDescriptor repeated QueryServiceDescriptor query_services = 1; diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/base/tendermint/v1beta1/query.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/base/tendermint/v1beta1/query.proto index 9e17e952118..6de6f2cdbc7 100644 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/base/tendermint/v1beta1/query.proto +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/base/tendermint/v1beta1/query.proto @@ -4,13 +4,12 @@ package cosmos.base.tendermint.v1beta1; import "gogoproto/gogo.proto"; import "google/protobuf/any.proto"; import "google/api/annotations.proto"; -import "cometbft/p2p/v1/types.proto"; -import "cometbft/types/v1/types.proto"; +import "tendermint/p2p/types.proto"; +import "tendermint/types/types.proto"; import "cosmos/base/query/v1beta1/pagination.proto"; import "cosmos/base/tendermint/v1beta1/types.proto"; import "cosmos_proto/cosmos.proto"; -import "cometbft/types/v1/block.proto"; -import "cometbft/crypto/v1/proof.proto"; +import "tendermint/types/block.proto"; import "amino/amino.proto"; option go_package = "github.com/cosmos/cosmos-sdk/client/grpc/cmtservice"; @@ -50,9 +49,10 @@ service Service { // ABCIQuery defines a query handler that supports ABCI queries directly to the // application, bypassing Tendermint completely. The ABCI query must contain // a valid and supported path, including app, custom, p2p, and store. + // + // Since: cosmos-sdk 0.46 rpc ABCIQuery(ABCIQueryRequest) returns (ABCIQueryResponse) { - option (google.api.http).get = "/cosmos/base/tendermint/v1beta1/abci_query"; - option (cosmos_proto.method_added_in) = "cosmos-sdk 0.46"; + option (google.api.http).get = "/cosmos/base/tendermint/v1beta1/abci_query"; } } @@ -100,12 +100,13 @@ message GetBlockByHeightRequest { // GetBlockByHeightResponse is the response type for the Query/GetBlockByHeight RPC method. message GetBlockByHeightResponse { - .cometbft.types.v1.BlockID block_id = 1; + .tendermint.types.BlockID block_id = 1; // Deprecated: please use `sdk_block` instead - .cometbft.types.v1.Block block = 2; + .tendermint.types.Block block = 2; - Block sdk_block = 3 [(cosmos_proto.field_added_in) = "cosmos-sdk 0.47"]; + // Since: cosmos-sdk 0.47 + Block sdk_block = 3; } // GetLatestBlockRequest is the request type for the Query/GetLatestBlock RPC method. @@ -113,12 +114,13 @@ message GetLatestBlockRequest {} // GetLatestBlockResponse is the response type for the Query/GetLatestBlock RPC method. message GetLatestBlockResponse { - .cometbft.types.v1.BlockID block_id = 1; + .tendermint.types.BlockID block_id = 1; // Deprecated: please use `sdk_block` instead - .cometbft.types.v1.Block block = 2; + .tendermint.types.Block block = 2; - Block sdk_block = 3 [(cosmos_proto.field_added_in) = "cosmos-sdk 0.47"]; + // Since: cosmos-sdk 0.47 + Block sdk_block = 3; } // GetSyncingRequest is the request type for the Query/GetSyncing RPC method. @@ -134,20 +136,21 @@ message GetNodeInfoRequest {} // GetNodeInfoResponse is the response type for the Query/GetNodeInfo RPC method. message GetNodeInfoResponse { - .cometbft.p2p.v1.DefaultNodeInfo default_node_info = 1; - VersionInfo application_version = 2; + .tendermint.p2p.DefaultNodeInfo default_node_info = 1; + VersionInfo application_version = 2; } // VersionInfo is the type for the GetNodeInfoResponse message. message VersionInfo { - string name = 1; - string app_name = 2; - string version = 3; - string git_commit = 4; - string build_tags = 5; - string go_version = 6; - repeated Module build_deps = 7; - string cosmos_sdk_version = 8 [(cosmos_proto.field_added_in) = "cosmos-sdk 0.43"]; + string name = 1; + string app_name = 2; + string version = 3; + string git_commit = 4; + string build_tags = 5; + string go_version = 6; + repeated Module build_deps = 7; + // Since: cosmos-sdk 0.43 + string cosmos_sdk_version = 8; } // Module is the type for VersionInfo @@ -174,18 +177,16 @@ message ABCIQueryRequest { // Tendermint. message ABCIQueryResponse { uint32 code = 1; - // Deprecated: use "value" instead + // DEPRECATED: use "value" instead reserved 2; - string log = 3; // nondeterministic - string info = 4; // nondeterministic - int64 index = 5; - bytes key = 6; - bytes value = 7; - // deprecated in favor of comet proof type - reserved 8; - int64 height = 9; - string codespace = 10; - .cometbft.crypto.v1.ProofOps proof_ops = 11; + string log = 3; // nondeterministic + string info = 4; // nondeterministic + int64 index = 5; + bytes key = 6; + bytes value = 7; + ProofOps proof_ops = 8; + int64 height = 9; + string codespace = 10; } // ProofOp defines an operation used for calculating Merkle root. The data could @@ -194,16 +195,14 @@ message ABCIQueryResponse { // // Note: This type is a duplicate of the ProofOp proto type defined in Tendermint. message ProofOp { - option deprecated = true; - string type = 1; - bytes key = 2; - bytes data = 3; + string type = 1; + bytes key = 2; + bytes data = 3; } // ProofOps is Merkle proof defined by the list of ProofOps. // // Note: This type is a duplicate of the ProofOps proto type defined in Tendermint. message ProofOps { - option deprecated = true; - repeated ProofOp ops = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + repeated ProofOp ops = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; } diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/base/tendermint/v1beta1/types.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/base/tendermint/v1beta1/types.proto index ba1748abbd1..624ff414910 100644 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/base/tendermint/v1beta1/types.proto +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/base/tendermint/v1beta1/types.proto @@ -2,9 +2,9 @@ syntax = "proto3"; package cosmos.base.tendermint.v1beta1; import "gogoproto/gogo.proto"; -import "cometbft/types/v1/types.proto"; -import "cometbft/types/v1/evidence.proto"; -import "cometbft/version/v1/types.proto"; +import "tendermint/types/types.proto"; +import "tendermint/types/evidence.proto"; +import "tendermint/version/types.proto"; import "google/protobuf/timestamp.proto"; import "amino/amino.proto"; @@ -13,23 +13,23 @@ option go_package = "github.com/cosmos/cosmos-sdk/client/grpc/cmtservice"; // Block is tendermint type Block, with the Header proposer address // field converted to bech32 string. message Block { - Header header = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; - .cometbft.types.v1.Data data = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; - .cometbft.types.v1.EvidenceList evidence = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; - .cometbft.types.v1.Commit last_commit = 4; + Header header = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + .tendermint.types.Data data = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + .tendermint.types.EvidenceList evidence = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + .tendermint.types.Commit last_commit = 4; } // Header defines the structure of a Tendermint block header. message Header { // basic block info - .cometbft.version.v1.Consensus version = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; - string chain_id = 2 [(gogoproto.customname) = "ChainID"]; - int64 height = 3; - google.protobuf.Timestamp time = 4 + .tendermint.version.Consensus version = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + string chain_id = 2 [(gogoproto.customname) = "ChainID"]; + int64 height = 3; + google.protobuf.Timestamp time = 4 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; // prev block info - .cometbft.types.v1.BlockID last_block_id = 5 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + .tendermint.types.BlockID last_block_id = 5 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // hashes of block data bytes last_commit_hash = 6; // commit from validators from the last block diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/base/v1beta1/coin.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/base/v1beta1/coin.proto index b4bd2e1e724..1447d642d51 100644 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/base/v1beta1/coin.proto +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/base/v1beta1/coin.proto @@ -39,3 +39,23 @@ message DecCoin { (gogoproto.nullable) = false ]; } + +// IntProto defines a Protobuf wrapper around an Int object. +// Deprecated: Prefer to use math.Int directly. It supports binary Marshal and Unmarshal. +message IntProto { + string int = 1 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; +} + +// DecProto defines a Protobuf wrapper around a Dec object. +// Deprecated: Prefer to use math.LegacyDec directly. It supports binary Marshal and Unmarshal. +message DecProto { + string dec = 1 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/circuit/module/v1/module.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/circuit/module/v1/module.proto new file mode 100644 index 00000000000..7104bad4c98 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/circuit/module/v1/module.proto @@ -0,0 +1,15 @@ +syntax = "proto3"; + +package cosmos.circuit.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the circuit module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "cosmossdk.io/x/circuit" + }; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 1; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/circuit/v1/query.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/circuit/v1/query.proto new file mode 100644 index 00000000000..0115d335f43 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/circuit/v1/query.proto @@ -0,0 +1,61 @@ +syntax = "proto3"; +package cosmos.circuit.v1; + +option go_package = "cosmossdk.io/x/circuit/types"; + +import "cosmos/base/query/v1beta1/pagination.proto"; +import "cosmos/circuit/v1/types.proto"; +import "google/api/annotations.proto"; +import "cosmos/query/v1/query.proto"; + +// Query defines the circuit gRPC querier service. +service Query { + // Account returns account permissions. + rpc Account(QueryAccountRequest) returns (AccountResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/circuit/v1/accounts/{address}"; + } + + // Account returns account permissions. + rpc Accounts(QueryAccountsRequest) returns (AccountsResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/circuit/v1/accounts"; + } + + // DisabledList returns a list of disabled message urls + rpc DisabledList(QueryDisabledListRequest) returns (DisabledListResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/circuit/v1/disable_list"; + } +} + +// QueryAccountRequest is the request type for the Query/Account RPC method. +message QueryAccountRequest { + string address = 1; +} + +// AccountResponse is the response type for the Query/Account RPC method. +message AccountResponse { + Permissions permission = 1; +} + +// QueryAccountsRequest is the request type for the Query/Accounts RPC method. +message QueryAccountsRequest { + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +// AccountsResponse is the response type for the Query/Accounts RPC method. +message AccountsResponse { + repeated GenesisAccountPermissions accounts = 1; + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryDisableListRequest is the request type for the Query/DisabledList RPC method. +message QueryDisabledListRequest {} + +// DisabledListResponse is the response type for the Query/DisabledList RPC method. +message DisabledListResponse { + repeated string disabled_list = 1; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/circuit/v1/tx.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/circuit/v1/tx.proto new file mode 100644 index 00000000000..71f708bb2ad --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/circuit/v1/tx.proto @@ -0,0 +1,83 @@ +syntax = "proto3"; +package cosmos.circuit.v1; + +option go_package = "cosmossdk.io/x/circuit/types"; + +import "cosmos/msg/v1/msg.proto"; +import "cosmos/circuit/v1/types.proto"; + +// Msg defines the circuit Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // AuthorizeCircuitBreaker allows a super-admin to grant (or revoke) another + // account's circuit breaker permissions. + rpc AuthorizeCircuitBreaker(MsgAuthorizeCircuitBreaker) returns (MsgAuthorizeCircuitBreakerResponse); + + // TripCircuitBreaker pauses processing of Msg's in the state machine. + rpc TripCircuitBreaker(MsgTripCircuitBreaker) returns (MsgTripCircuitBreakerResponse); + + // ResetCircuitBreaker resumes processing of Msg's in the state machine that + // have been been paused using TripCircuitBreaker. + rpc ResetCircuitBreaker(MsgResetCircuitBreaker) returns (MsgResetCircuitBreakerResponse); +} + +// MsgAuthorizeCircuitBreaker defines the Msg/AuthorizeCircuitBreaker request type. +message MsgAuthorizeCircuitBreaker { + option (cosmos.msg.v1.signer) = "granter"; + + // granter is the granter of the circuit breaker permissions and must have + // LEVEL_SUPER_ADMIN. + string granter = 1; + + // grantee is the account authorized with the provided permissions. + string grantee = 2; + + // permissions are the circuit breaker permissions that the grantee receives. + // These will overwrite any existing permissions. LEVEL_NONE_UNSPECIFIED can + // be specified to revoke all permissions. + Permissions permissions = 3; +} + +// MsgAuthorizeCircuitBreakerResponse defines the Msg/AuthorizeCircuitBreaker response type. +message MsgAuthorizeCircuitBreakerResponse { + bool success = 1; +} + +// MsgTripCircuitBreaker defines the Msg/TripCircuitBreaker request type. +message MsgTripCircuitBreaker { + option (cosmos.msg.v1.signer) = "authority"; + + // authority is the account authorized to trip the circuit breaker. + string authority = 1; + + // msg_type_urls specifies a list of type URLs to immediately stop processing. + // IF IT IS LEFT EMPTY, ALL MSG PROCESSING WILL STOP IMMEDIATELY. + // This value is validated against the authority's permissions and if the + // authority does not have permissions to trip the specified msg type URLs + // (or all URLs), the operation will fail. + repeated string msg_type_urls = 2; +} + +// MsgTripCircuitBreakerResponse defines the Msg/TripCircuitBreaker response type. +message MsgTripCircuitBreakerResponse { + bool success = 1; +} + +// MsgResetCircuitBreaker defines the Msg/ResetCircuitBreaker request type. +message MsgResetCircuitBreaker { + option (cosmos.msg.v1.signer) = "authority"; + + // authority is the account authorized to trip or reset the circuit breaker. + string authority = 1; + + // msg_type_urls specifies a list of Msg type URLs to resume processing. If + // it is left empty all Msg processing for type URLs that the account is + // authorized to trip will resume. + repeated string msg_type_urls = 3; +} + +// MsgResetCircuitBreakerResponse defines the Msg/ResetCircuitBreaker response type. +message MsgResetCircuitBreakerResponse { + bool success = 1; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/circuit/v1/types.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/circuit/v1/types.proto new file mode 100644 index 00000000000..1bd8d9d4484 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/circuit/v1/types.proto @@ -0,0 +1,49 @@ +syntax = "proto3"; +package cosmos.circuit.v1; + +option go_package = "cosmossdk.io/x/circuit/types"; + +// Permissions are the permissions that an account has to trip +// or reset the circuit breaker. +message Permissions { + // level is the level of permissions granted to this account. + Level level = 1; + + // limit_type_urls is used with LEVEL_SOME_MSGS to limit the lists of Msg type + // URLs that the account can trip. It is an error to use limit_type_urls with + // a level other than LEVEL_SOME_MSGS. + repeated string limit_type_urls = 2; + + // Level is the permission level. + enum Level { + // LEVEL_NONE_UNSPECIFIED indicates that the account will have no circuit + // breaker permissions. + LEVEL_NONE_UNSPECIFIED = 0; + + // LEVEL_SOME_MSGS indicates that the account will have permission to + // trip or reset the circuit breaker for some Msg type URLs. If this level + // is chosen, a non-empty list of Msg type URLs must be provided in + // limit_type_urls. + LEVEL_SOME_MSGS = 1; + + // LEVEL_ALL_MSGS indicates that the account can trip or reset the circuit + // breaker for Msg's of all type URLs. + LEVEL_ALL_MSGS = 2; + + // LEVEL_SUPER_ADMIN indicates that the account can take all circuit breaker + // actions and can grant permissions to other accounts. + LEVEL_SUPER_ADMIN = 3; + } +} + +// GenesisAccountPermissions is the account permissions for the circuit breaker in genesis +message GenesisAccountPermissions { + string address = 1; + Permissions permissions = 2; +} + +// GenesisState is the state that must be provided at genesis. +message GenesisState { + repeated GenesisAccountPermissions account_permissions = 1; + repeated string disabled_type_urls = 2; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/consensus/module/v1/module.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/consensus/module/v1/module.proto new file mode 100644 index 00000000000..8e188cc77c4 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/consensus/module/v1/module.proto @@ -0,0 +1,15 @@ +syntax = "proto3"; + +package cosmos.consensus.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the consensus module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/consensus" + }; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 1; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/consensus/v1/query.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/consensus/v1/query.proto new file mode 100644 index 00000000000..84648d97c09 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/consensus/v1/query.proto @@ -0,0 +1,27 @@ +// Since: cosmos-sdk 0.47 +syntax = "proto3"; +package cosmos.consensus.v1; + +import "google/api/annotations.proto"; +import "tendermint/types/params.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/consensus/types"; + +// Query defines the gRPC querier service. +service Query { + // Params queries the parameters of x/consensus module. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/cosmos/consensus/v1/params"; + } +} + +// QueryParamsRequest defines the request type for querying x/consensus parameters. +message QueryParamsRequest {} + +// QueryParamsResponse defines the response type for querying x/consensus parameters. +message QueryParamsResponse { + // params are the tendermint consensus params stored in the consensus module. + // Please note that `params.version` is not populated in this response, it is + // tracked separately in the x/upgrade module. + tendermint.types.ConsensusParams params = 1; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/consensus/v1/tx.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/consensus/v1/tx.proto new file mode 100644 index 00000000000..4323de703a5 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/consensus/v1/tx.proto @@ -0,0 +1,46 @@ +// Since: cosmos-sdk 0.47 +syntax = "proto3"; +package cosmos.consensus.v1; + +import "amino/amino.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/msg/v1/msg.proto"; +import "tendermint/types/params.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/consensus/types"; + +// Msg defines the consensus Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // UpdateParams defines a governance operation for updating the x/consensus module parameters. + // The authority is defined in the keeper. + // + // Since: cosmos-sdk 0.47 + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); +} + +// MsgUpdateParams is the Msg/UpdateParams request type. +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "cosmos-sdk/x/consensus/MsgUpdateParams"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // params defines the x/consensus parameters to update. + // VersionsParams is not included in this Msg because it is tracked + // separarately in x/upgrade. + // + // NOTE: All parameters must be supplied. + tendermint.types.BlockParams block = 2; + tendermint.types.EvidenceParams evidence = 3; + tendermint.types.ValidatorParams validator = 4; + + // Since: cosmos-sdk 0.50 + tendermint.types.ABCIParams abci = 5; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +message MsgUpdateParamsResponse {} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/crisis/module/v1/module.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/crisis/module/v1/module.proto new file mode 100644 index 00000000000..fe9249626a2 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/crisis/module/v1/module.proto @@ -0,0 +1,18 @@ +syntax = "proto3"; + +package cosmos.crisis.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the crisis module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/crisis" + }; + + // fee_collector_name is the name of the FeeCollector ModuleAccount. + string fee_collector_name = 1; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 2; +} \ No newline at end of file diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/crisis/v1beta1/genesis.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/crisis/v1beta1/genesis.proto new file mode 100644 index 00000000000..b0ddb9b66f7 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/crisis/v1beta1/genesis.proto @@ -0,0 +1,15 @@ +syntax = "proto3"; +package cosmos.crisis.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/crisis/types"; + +import "gogoproto/gogo.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "amino/amino.proto"; + +// GenesisState defines the crisis module's genesis state. +message GenesisState { + // constant_fee is the fee used to verify the invariant in the crisis + // module. + cosmos.base.v1beta1.Coin constant_fee = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/crisis/v1beta1/tx.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/crisis/v1beta1/tx.proto new file mode 100644 index 00000000000..4fcf5bf6598 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/crisis/v1beta1/tx.proto @@ -0,0 +1,65 @@ +syntax = "proto3"; +package cosmos.crisis.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/crisis/types"; + +import "gogoproto/gogo.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; +import "cosmos/base/v1beta1/coin.proto"; + +// Msg defines the bank Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // VerifyInvariant defines a method to verify a particular invariant. + rpc VerifyInvariant(MsgVerifyInvariant) returns (MsgVerifyInvariantResponse); + + // UpdateParams defines a governance operation for updating the x/crisis module + // parameters. The authority is defined in the keeper. + // + // Since: cosmos-sdk 0.47 + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); +} + +// MsgVerifyInvariant represents a message to verify a particular invariance. +message MsgVerifyInvariant { + option (cosmos.msg.v1.signer) = "sender"; + option (amino.name) = "cosmos-sdk/MsgVerifyInvariant"; + + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // sender is the account address of private key to send coins to fee collector account. + string sender = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // name of the invariant module. + string invariant_module_name = 2; + + // invariant_route is the msg's invariant route. + string invariant_route = 3; +} + +// MsgVerifyInvariantResponse defines the Msg/VerifyInvariant response type. +message MsgVerifyInvariantResponse {} + +// MsgUpdateParams is the Msg/UpdateParams request type. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "cosmos-sdk/x/crisis/MsgUpdateParams"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // constant_fee defines the x/crisis parameter. + cosmos.base.v1beta1.Coin constant_fee = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParamsResponse {} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/distribution/module/v1/module.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/distribution/module/v1/module.proto new file mode 100644 index 00000000000..accf920cb5b --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/distribution/module/v1/module.proto @@ -0,0 +1,17 @@ +syntax = "proto3"; + +package cosmos.distribution.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the distribution module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/distribution" + }; + + string fee_collector_name = 1; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 2; +} \ No newline at end of file diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/distribution/v1beta1/distribution.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/distribution/v1beta1/distribution.proto new file mode 100644 index 00000000000..0c20286f9a0 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/distribution/v1beta1/distribution.proto @@ -0,0 +1,194 @@ +syntax = "proto3"; +package cosmos.distribution.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/distribution/types"; +option (gogoproto.equal_all) = true; + +import "gogoproto/gogo.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; + +// Params defines the set of params for the distribution module. +message Params { + option (amino.name) = "cosmos-sdk/x/distribution/Params"; + + string community_tax = 1 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (amino.dont_omitempty) = true, + (gogoproto.nullable) = false + ]; + + // Deprecated: The base_proposer_reward field is deprecated and is no longer used + // in the x/distribution module's reward mechanism. + string base_proposer_reward = 2 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + deprecated = true + ]; + + // Deprecated: The bonus_proposer_reward field is deprecated and is no longer used + // in the x/distribution module's reward mechanism. + string bonus_proposer_reward = 3 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + deprecated = true + ]; + + bool withdraw_addr_enabled = 4; +} + +// ValidatorHistoricalRewards represents historical rewards for a validator. +// Height is implicit within the store key. +// Cumulative reward ratio is the sum from the zeroeth period +// until this period of rewards / tokens, per the spec. +// The reference count indicates the number of objects +// which might need to reference this historical entry at any point. +// ReferenceCount = +// number of outstanding delegations which ended the associated period (and +// might need to read that record) +// + number of slashes which ended the associated period (and might need to +// read that record) +// + one per validator for the zeroeth period, set on initialization +message ValidatorHistoricalRewards { + repeated cosmos.base.v1beta1.DecCoin cumulative_reward_ratio = 1 [ + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + uint32 reference_count = 2; +} + +// ValidatorCurrentRewards represents current rewards and current +// period for a validator kept as a running counter and incremented +// each block as long as the validator's tokens remain constant. +message ValidatorCurrentRewards { + repeated cosmos.base.v1beta1.DecCoin rewards = 1 [ + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + uint64 period = 2; +} + +// ValidatorAccumulatedCommission represents accumulated commission +// for a validator kept as a running counter, can be withdrawn at any time. +message ValidatorAccumulatedCommission { + repeated cosmos.base.v1beta1.DecCoin commission = 1 [ + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} + +// ValidatorOutstandingRewards represents outstanding (un-withdrawn) rewards +// for a validator inexpensive to track, allows simple sanity checks. +message ValidatorOutstandingRewards { + repeated cosmos.base.v1beta1.DecCoin rewards = 1 [ + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} + +// ValidatorSlashEvent represents a validator slash event. +// Height is implicit within the store key. +// This is needed to calculate appropriate amount of staking tokens +// for delegations which are withdrawn after a slash has occurred. +message ValidatorSlashEvent { + uint64 validator_period = 1; + string fraction = 2 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; +} + +// ValidatorSlashEvents is a collection of ValidatorSlashEvent messages. +message ValidatorSlashEvents { + repeated ValidatorSlashEvent validator_slash_events = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// FeePool is the global fee pool for distribution. +message FeePool { + repeated cosmos.base.v1beta1.DecCoin community_pool = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins" + ]; +} + +// CommunityPoolSpendProposal details a proposal for use of community funds, +// together with how many coins are proposed to be spent, and to which +// recipient account. +// +// Deprecated: Do not use. As of the Cosmos SDK release v0.47.x, there is no +// longer a need for an explicit CommunityPoolSpendProposal. To spend community +// pool funds, a simple MsgCommunityPoolSpend can be invoked from the x/gov +// module via a v1 governance proposal. +message CommunityPoolSpendProposal { + option deprecated = true; + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; + + string title = 1; + string description = 2; + string recipient = 3; + repeated cosmos.base.v1beta1.Coin amount = 4 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +// DelegatorStartingInfo represents the starting info for a delegator reward +// period. It tracks the previous validator period, the delegation's amount of +// staking token, and the creation height (to check later on if any slashes have +// occurred). NOTE: Even though validators are slashed to whole staking tokens, +// the delegators within the validator may be left with less than a full token, +// thus sdk.Dec is used. +message DelegatorStartingInfo { + uint64 previous_period = 1; + string stake = 2 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + uint64 height = 3 + [(gogoproto.jsontag) = "creation_height", (amino.field_name) = "creation_height", (amino.dont_omitempty) = true]; +} + +// DelegationDelegatorReward represents the properties +// of a delegator's delegation reward. +message DelegationDelegatorReward { + option (gogoproto.goproto_getters) = false; + + string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + + repeated cosmos.base.v1beta1.DecCoin reward = 2 [ + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} + +// CommunityPoolSpendProposalWithDeposit defines a CommunityPoolSpendProposal +// with a deposit +message CommunityPoolSpendProposalWithDeposit { + option (gogoproto.goproto_getters) = false; + option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; + + string title = 1; + string description = 2; + string recipient = 3; + string amount = 4; + string deposit = 5; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/distribution/v1beta1/genesis.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/distribution/v1beta1/genesis.proto new file mode 100644 index 00000000000..5608bfb982d --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/distribution/v1beta1/genesis.proto @@ -0,0 +1,155 @@ +syntax = "proto3"; +package cosmos.distribution.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/distribution/types"; +option (gogoproto.equal_all) = true; + +import "gogoproto/gogo.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/distribution/v1beta1/distribution.proto"; +import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; + +// DelegatorWithdrawInfo is the address for where distributions rewards are +// withdrawn to by default this struct is only used at genesis to feed in +// default withdraw addresses. +message DelegatorWithdrawInfo { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // delegator_address is the address of the delegator. + string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // withdraw_address is the address to withdraw the delegation rewards to. + string withdraw_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// ValidatorOutstandingRewardsRecord is used for import/export via genesis json. +message ValidatorOutstandingRewardsRecord { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // validator_address is the address of the validator. + string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + + // outstanding_rewards represents the outstanding rewards of a validator. + repeated cosmos.base.v1beta1.DecCoin outstanding_rewards = 2 [ + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} + +// ValidatorAccumulatedCommissionRecord is used for import / export via genesis +// json. +message ValidatorAccumulatedCommissionRecord { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // validator_address is the address of the validator. + string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + + // accumulated is the accumulated commission of a validator. + ValidatorAccumulatedCommission accumulated = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// ValidatorHistoricalRewardsRecord is used for import / export via genesis +// json. +message ValidatorHistoricalRewardsRecord { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // validator_address is the address of the validator. + string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + + // period defines the period the historical rewards apply to. + uint64 period = 2; + + // rewards defines the historical rewards of a validator. + ValidatorHistoricalRewards rewards = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// ValidatorCurrentRewardsRecord is used for import / export via genesis json. +message ValidatorCurrentRewardsRecord { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // validator_address is the address of the validator. + string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + + // rewards defines the current rewards of a validator. + ValidatorCurrentRewards rewards = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// DelegatorStartingInfoRecord used for import / export via genesis json. +message DelegatorStartingInfoRecord { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // delegator_address is the address of the delegator. + string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // validator_address is the address of the validator. + string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + + // starting_info defines the starting info of a delegator. + DelegatorStartingInfo starting_info = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// ValidatorSlashEventRecord is used for import / export via genesis json. +message ValidatorSlashEventRecord { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // validator_address is the address of the validator. + string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + // height defines the block height at which the slash event occurred. + uint64 height = 2; + // period is the period of the slash event. + uint64 period = 3; + // validator_slash_event describes the slash event. + ValidatorSlashEvent validator_slash_event = 4 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// GenesisState defines the distribution module's genesis state. +message GenesisState { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // params defines all the parameters of the module. + Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // fee_pool defines the fee pool at genesis. + FeePool fee_pool = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // fee_pool defines the delegator withdraw infos at genesis. + repeated DelegatorWithdrawInfo delegator_withdraw_infos = 3 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // fee_pool defines the previous proposer at genesis. + string previous_proposer = 4 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // fee_pool defines the outstanding rewards of all validators at genesis. + repeated ValidatorOutstandingRewardsRecord outstanding_rewards = 5 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // fee_pool defines the accumulated commissions of all validators at genesis. + repeated ValidatorAccumulatedCommissionRecord validator_accumulated_commissions = 6 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // fee_pool defines the historical rewards of all validators at genesis. + repeated ValidatorHistoricalRewardsRecord validator_historical_rewards = 7 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // fee_pool defines the current rewards of all validators at genesis. + repeated ValidatorCurrentRewardsRecord validator_current_rewards = 8 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // fee_pool defines the delegator starting infos at genesis. + repeated DelegatorStartingInfoRecord delegator_starting_infos = 9 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // fee_pool defines the validator slash events at genesis. + repeated ValidatorSlashEventRecord validator_slash_events = 10 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/distribution/v1beta1/query.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/distribution/v1beta1/query.proto new file mode 100644 index 00000000000..ffb8912135a --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/distribution/v1beta1/query.proto @@ -0,0 +1,255 @@ +syntax = "proto3"; +package cosmos.distribution.v1beta1; + +import "cosmos/base/query/v1beta1/pagination.proto"; +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/distribution/v1beta1/distribution.proto"; +import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/distribution/types"; + +// Query defines the gRPC querier service for distribution module. +service Query { + // Params queries params of the distribution module. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/cosmos/distribution/v1beta1/params"; + } + + // ValidatorDistributionInfo queries validator commission and self-delegation rewards for validator + rpc ValidatorDistributionInfo(QueryValidatorDistributionInfoRequest) + returns (QueryValidatorDistributionInfoResponse) { + option (google.api.http).get = "/cosmos/distribution/v1beta1/validators/{validator_address}"; + } + + // ValidatorOutstandingRewards queries rewards of a validator address. + rpc ValidatorOutstandingRewards(QueryValidatorOutstandingRewardsRequest) + returns (QueryValidatorOutstandingRewardsResponse) { + option (google.api.http).get = "/cosmos/distribution/v1beta1/validators/" + "{validator_address}/outstanding_rewards"; + } + + // ValidatorCommission queries accumulated commission for a validator. + rpc ValidatorCommission(QueryValidatorCommissionRequest) returns (QueryValidatorCommissionResponse) { + option (google.api.http).get = "/cosmos/distribution/v1beta1/validators/" + "{validator_address}/commission"; + } + + // ValidatorSlashes queries slash events of a validator. + rpc ValidatorSlashes(QueryValidatorSlashesRequest) returns (QueryValidatorSlashesResponse) { + option (google.api.http).get = "/cosmos/distribution/v1beta1/validators/{validator_address}/slashes"; + } + + // DelegationRewards queries the total rewards accrued by a delegation. + rpc DelegationRewards(QueryDelegationRewardsRequest) returns (QueryDelegationRewardsResponse) { + option (google.api.http).get = "/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards/" + "{validator_address}"; + } + + // DelegationTotalRewards queries the total rewards accrued by each + // validator. + rpc DelegationTotalRewards(QueryDelegationTotalRewardsRequest) returns (QueryDelegationTotalRewardsResponse) { + option (google.api.http).get = "/cosmos/distribution/v1beta1/delegators/{delegator_address}/rewards"; + } + + // DelegatorValidators queries the validators of a delegator. + rpc DelegatorValidators(QueryDelegatorValidatorsRequest) returns (QueryDelegatorValidatorsResponse) { + option (google.api.http).get = "/cosmos/distribution/v1beta1/delegators/" + "{delegator_address}/validators"; + } + + // DelegatorWithdrawAddress queries withdraw address of a delegator. + rpc DelegatorWithdrawAddress(QueryDelegatorWithdrawAddressRequest) returns (QueryDelegatorWithdrawAddressResponse) { + option (google.api.http).get = "/cosmos/distribution/v1beta1/delegators/" + "{delegator_address}/withdraw_address"; + } + + // CommunityPool queries the community pool coins. + rpc CommunityPool(QueryCommunityPoolRequest) returns (QueryCommunityPoolResponse) { + option (google.api.http).get = "/cosmos/distribution/v1beta1/community_pool"; + } +} + +// QueryParamsRequest is the request type for the Query/Params RPC method. +message QueryParamsRequest {} + +// QueryParamsResponse is the response type for the Query/Params RPC method. +message QueryParamsResponse { + // params defines the parameters of the module. + Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// QueryValidatorDistributionInfoRequest is the request type for the Query/ValidatorDistributionInfo RPC method. +message QueryValidatorDistributionInfoRequest { + // validator_address defines the validator address to query for. + string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; +} + +// QueryValidatorDistributionInfoResponse is the response type for the Query/ValidatorDistributionInfo RPC method. +message QueryValidatorDistributionInfoResponse { + // operator_address defines the validator operator address. + string operator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + // self_bond_rewards defines the self delegations rewards. + repeated cosmos.base.v1beta1.DecCoin self_bond_rewards = 2 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins" + ]; + // commission defines the commission the validator received. + repeated cosmos.base.v1beta1.DecCoin commission = 3 + [(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", (gogoproto.nullable) = false]; +} + +// QueryValidatorOutstandingRewardsRequest is the request type for the +// Query/ValidatorOutstandingRewards RPC method. +message QueryValidatorOutstandingRewardsRequest { + // validator_address defines the validator address to query for. + string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; +} + +// QueryValidatorOutstandingRewardsResponse is the response type for the +// Query/ValidatorOutstandingRewards RPC method. +message QueryValidatorOutstandingRewardsResponse { + ValidatorOutstandingRewards rewards = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// QueryValidatorCommissionRequest is the request type for the +// Query/ValidatorCommission RPC method +message QueryValidatorCommissionRequest { + // validator_address defines the validator address to query for. + string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; +} + +// QueryValidatorCommissionResponse is the response type for the +// Query/ValidatorCommission RPC method +message QueryValidatorCommissionResponse { + // commission defines the commission the validator received. + ValidatorAccumulatedCommission commission = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// QueryValidatorSlashesRequest is the request type for the +// Query/ValidatorSlashes RPC method +message QueryValidatorSlashesRequest { + option (gogoproto.goproto_getters) = false; + + // validator_address defines the validator address to query for. + string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + // starting_height defines the optional starting height to query the slashes. + uint64 starting_height = 2; + // starting_height defines the optional ending height to query the slashes. + uint64 ending_height = 3; + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 4; +} + +// QueryValidatorSlashesResponse is the response type for the +// Query/ValidatorSlashes RPC method. +message QueryValidatorSlashesResponse { + // slashes defines the slashes the validator received. + repeated ValidatorSlashEvent slashes = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryDelegationRewardsRequest is the request type for the +// Query/DelegationRewards RPC method. +message QueryDelegationRewardsRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // delegator_address defines the delegator address to query for. + string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // validator_address defines the validator address to query for. + string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; +} + +// QueryDelegationRewardsResponse is the response type for the +// Query/DelegationRewards RPC method. +message QueryDelegationRewardsResponse { + // rewards defines the rewards accrued by a delegation. + repeated cosmos.base.v1beta1.DecCoin rewards = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins" + ]; +} + +// QueryDelegationTotalRewardsRequest is the request type for the +// Query/DelegationTotalRewards RPC method. +message QueryDelegationTotalRewardsRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + // delegator_address defines the delegator address to query for. + string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// QueryDelegationTotalRewardsResponse is the response type for the +// Query/DelegationTotalRewards RPC method. +message QueryDelegationTotalRewardsResponse { + // rewards defines all the rewards accrued by a delegator. + repeated DelegationDelegatorReward rewards = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + // total defines the sum of all the rewards. + repeated cosmos.base.v1beta1.DecCoin total = 2 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins" + ]; +} + +// QueryDelegatorValidatorsRequest is the request type for the +// Query/DelegatorValidators RPC method. +message QueryDelegatorValidatorsRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // delegator_address defines the delegator address to query for. + string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// QueryDelegatorValidatorsResponse is the response type for the +// Query/DelegatorValidators RPC method. +message QueryDelegatorValidatorsResponse { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // validators defines the validators a delegator is delegating for. + repeated string validators = 1; +} + +// QueryDelegatorWithdrawAddressRequest is the request type for the +// Query/DelegatorWithdrawAddress RPC method. +message QueryDelegatorWithdrawAddressRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // delegator_address defines the delegator address to query for. + string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// QueryDelegatorWithdrawAddressResponse is the response type for the +// Query/DelegatorWithdrawAddress RPC method. +message QueryDelegatorWithdrawAddressResponse { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // withdraw_address defines the delegator address to query for. + string withdraw_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// QueryCommunityPoolRequest is the request type for the Query/CommunityPool RPC +// method. +message QueryCommunityPoolRequest {} + +// QueryCommunityPoolResponse is the response type for the Query/CommunityPool +// RPC method. +message QueryCommunityPoolResponse { + // pool defines community pool's coins. + repeated cosmos.base.v1beta1.DecCoin pool = 1 [ + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.DecCoins", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/distribution/v1beta1/tx.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/distribution/v1beta1/tx.proto new file mode 100644 index 00000000000..32318bd8121 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/distribution/v1beta1/tx.proto @@ -0,0 +1,215 @@ +syntax = "proto3"; +package cosmos.distribution.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/distribution/types"; +option (gogoproto.equal_all) = true; + +import "gogoproto/gogo.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; +import "cosmos/distribution/v1beta1/distribution.proto"; + +// Msg defines the distribution Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // SetWithdrawAddress defines a method to change the withdraw address + // for a delegator (or validator self-delegation). + rpc SetWithdrawAddress(MsgSetWithdrawAddress) returns (MsgSetWithdrawAddressResponse); + + // WithdrawDelegatorReward defines a method to withdraw rewards of delegator + // from a single validator. + rpc WithdrawDelegatorReward(MsgWithdrawDelegatorReward) returns (MsgWithdrawDelegatorRewardResponse); + + // WithdrawValidatorCommission defines a method to withdraw the + // full commission to the validator address. + rpc WithdrawValidatorCommission(MsgWithdrawValidatorCommission) returns (MsgWithdrawValidatorCommissionResponse); + + // FundCommunityPool defines a method to allow an account to directly + // fund the community pool. + rpc FundCommunityPool(MsgFundCommunityPool) returns (MsgFundCommunityPoolResponse); + + // UpdateParams defines a governance operation for updating the x/distribution + // module parameters. The authority is defined in the keeper. + // + // Since: cosmos-sdk 0.47 + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); + + // CommunityPoolSpend defines a governance operation for sending tokens from + // the community pool in the x/distribution module to another account, which + // could be the governance module itself. The authority is defined in the + // keeper. + // + // Since: cosmos-sdk 0.47 + rpc CommunityPoolSpend(MsgCommunityPoolSpend) returns (MsgCommunityPoolSpendResponse); + + // DepositValidatorRewardsPool defines a method to provide additional rewards + // to delegators to a specific validator. + // + // Since: cosmos-sdk 0.50 + rpc DepositValidatorRewardsPool(MsgDepositValidatorRewardsPool) returns (MsgDepositValidatorRewardsPoolResponse); +} + +// MsgSetWithdrawAddress sets the withdraw address for +// a delegator (or validator self-delegation). +message MsgSetWithdrawAddress { + option (cosmos.msg.v1.signer) = "delegator_address"; + option (amino.name) = "cosmos-sdk/MsgModifyWithdrawAddress"; + + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string withdraw_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// MsgSetWithdrawAddressResponse defines the Msg/SetWithdrawAddress response +// type. +message MsgSetWithdrawAddressResponse {} + +// MsgWithdrawDelegatorReward represents delegation withdrawal to a delegator +// from a single validator. +message MsgWithdrawDelegatorReward { + option (cosmos.msg.v1.signer) = "delegator_address"; + option (amino.name) = "cosmos-sdk/MsgWithdrawDelegationReward"; + + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; +} + +// MsgWithdrawDelegatorRewardResponse defines the Msg/WithdrawDelegatorReward +// response type. +message MsgWithdrawDelegatorRewardResponse { + // Since: cosmos-sdk 0.46 + repeated cosmos.base.v1beta1.Coin amount = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +// MsgWithdrawValidatorCommission withdraws the full commission to the validator +// address. +message MsgWithdrawValidatorCommission { + option (cosmos.msg.v1.signer) = "validator_address"; + option (amino.name) = "cosmos-sdk/MsgWithdrawValCommission"; + + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string validator_address = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; +} + +// MsgWithdrawValidatorCommissionResponse defines the +// Msg/WithdrawValidatorCommission response type. +message MsgWithdrawValidatorCommissionResponse { + // Since: cosmos-sdk 0.46 + repeated cosmos.base.v1beta1.Coin amount = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +// MsgFundCommunityPool allows an account to directly +// fund the community pool. +message MsgFundCommunityPool { + option (cosmos.msg.v1.signer) = "depositor"; + option (amino.name) = "cosmos-sdk/MsgFundCommunityPool"; + + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + repeated cosmos.base.v1beta1.Coin amount = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + string depositor = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// MsgFundCommunityPoolResponse defines the Msg/FundCommunityPool response type. +message MsgFundCommunityPoolResponse {} + +// MsgUpdateParams is the Msg/UpdateParams request type. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "cosmos-sdk/distribution/MsgUpdateParams"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // params defines the x/distribution parameters to update. + // + // NOTE: All parameters must be supplied. + Params params = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParamsResponse {} + +// MsgCommunityPoolSpend defines a message for sending tokens from the community +// pool to another account. This message is typically executed via a governance +// proposal with the governance module being the executing authority. +// +// Since: cosmos-sdk 0.47 +message MsgCommunityPoolSpend { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "cosmos-sdk/distr/MsgCommunityPoolSpend"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string recipient = 2; + repeated cosmos.base.v1beta1.Coin amount = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +// MsgCommunityPoolSpendResponse defines the response to executing a +// MsgCommunityPoolSpend message. +// +// Since: cosmos-sdk 0.47 +message MsgCommunityPoolSpendResponse {} + +// DepositValidatorRewardsPool defines the request structure to provide +// additional rewards to delegators from a specific validator. +// +// Since: cosmos-sdk 0.50 +message MsgDepositValidatorRewardsPool { + option (amino.name) = "cosmos-sdk/distr/MsgDepositValRewards"; + option (cosmos.msg.v1.signer) = "depositor"; + + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string depositor = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + repeated cosmos.base.v1beta1.Coin amount = 3 [ + (gogoproto.nullable) = false, + (amino.encoding) = "legacy_coins", + (amino.dont_omitempty) = true, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +// MsgDepositValidatorRewardsPoolResponse defines the response to executing a +// MsgDepositValidatorRewardsPool message. +// +// Since: cosmos-sdk 0.50 +message MsgDepositValidatorRewardsPoolResponse {} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/evidence/module/v1/module.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/evidence/module/v1/module.proto new file mode 100644 index 00000000000..5b2ede65133 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/evidence/module/v1/module.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; + +package cosmos.evidence.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the evidence module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "cosmossdk.io/x/evidence" + }; +} \ No newline at end of file diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/evidence/v1beta1/evidence.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/evidence/v1beta1/evidence.proto new file mode 100644 index 00000000000..21b2c5d8e9b --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/evidence/v1beta1/evidence.proto @@ -0,0 +1,31 @@ +syntax = "proto3"; +package cosmos.evidence.v1beta1; + +option go_package = "cosmossdk.io/x/evidence/types"; +option (gogoproto.equal_all) = true; + +import "amino/amino.proto"; +import "gogoproto/gogo.proto"; +import "google/protobuf/timestamp.proto"; +import "cosmos_proto/cosmos.proto"; + +// Equivocation implements the Evidence interface and defines evidence of double +// signing misbehavior. +message Equivocation { + option (amino.name) = "cosmos-sdk/Equivocation"; + option (gogoproto.goproto_getters) = false; + option (gogoproto.equal) = false; + + // height is the equivocation height. + int64 height = 1; + + // time is the equivocation time. + google.protobuf.Timestamp time = 2 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; + + // power is the equivocation validator power. + int64 power = 3; + + // consensus_address is the equivocation validator consensus address. + string consensus_address = 4 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} \ No newline at end of file diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/evidence/v1beta1/genesis.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/evidence/v1beta1/genesis.proto new file mode 100644 index 00000000000..33b354e247c --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/evidence/v1beta1/genesis.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; +package cosmos.evidence.v1beta1; + +option go_package = "cosmossdk.io/x/evidence/types"; + +import "google/protobuf/any.proto"; + +// GenesisState defines the evidence module's genesis state. +message GenesisState { + // evidence defines all the evidence at genesis. + repeated google.protobuf.Any evidence = 1; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/evidence/v1beta1/query.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/evidence/v1beta1/query.proto new file mode 100644 index 00000000000..f4af8ab7f88 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/evidence/v1beta1/query.proto @@ -0,0 +1,56 @@ +syntax = "proto3"; +package cosmos.evidence.v1beta1; + +import "cosmos/base/query/v1beta1/pagination.proto"; +import "google/protobuf/any.proto"; +import "google/api/annotations.proto"; + +option go_package = "cosmossdk.io/x/evidence/types"; + +// Query defines the gRPC querier service. +service Query { + // Evidence queries evidence based on evidence hash. + rpc Evidence(QueryEvidenceRequest) returns (QueryEvidenceResponse) { + option (google.api.http).get = "/cosmos/evidence/v1beta1/evidence/{hash}"; + } + + // AllEvidence queries all evidence. + rpc AllEvidence(QueryAllEvidenceRequest) returns (QueryAllEvidenceResponse) { + option (google.api.http).get = "/cosmos/evidence/v1beta1/evidence"; + } +} + +// QueryEvidenceRequest is the request type for the Query/Evidence RPC method. +message QueryEvidenceRequest { + // evidence_hash defines the hash of the requested evidence. + // Deprecated: Use hash, a HEX encoded string, instead. + bytes evidence_hash = 1 [deprecated = true]; + + // hash defines the evidence hash of the requested evidence. + // + // Since: cosmos-sdk 0.47 + string hash = 2; +} + +// QueryEvidenceResponse is the response type for the Query/Evidence RPC method. +message QueryEvidenceResponse { + // evidence returns the requested evidence. + google.protobuf.Any evidence = 1; +} + +// QueryEvidenceRequest is the request type for the Query/AllEvidence RPC +// method. +message QueryAllEvidenceRequest { + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +// QueryAllEvidenceResponse is the response type for the Query/AllEvidence RPC +// method. +message QueryAllEvidenceResponse { + // evidence returns all evidences. + repeated google.protobuf.Any evidence = 1; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/evidence/v1beta1/tx.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/evidence/v1beta1/tx.proto new file mode 100644 index 00000000000..5eeaa6e9092 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/evidence/v1beta1/tx.proto @@ -0,0 +1,42 @@ +syntax = "proto3"; +package cosmos.evidence.v1beta1; + +option go_package = "cosmossdk.io/x/evidence/types"; +option (gogoproto.equal_all) = true; + +import "gogoproto/gogo.proto"; +import "google/protobuf/any.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; + +// Msg defines the evidence Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // SubmitEvidence submits an arbitrary Evidence of misbehavior such as equivocation or + // counterfactual signing. + rpc SubmitEvidence(MsgSubmitEvidence) returns (MsgSubmitEvidenceResponse); +} + +// MsgSubmitEvidence represents a message that supports submitting arbitrary +// Evidence of misbehavior such as equivocation or counterfactual signing. +message MsgSubmitEvidence { + option (cosmos.msg.v1.signer) = "submitter"; + option (amino.name) = "cosmos-sdk/MsgSubmitEvidence"; + + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // submitter is the signer account address of evidence. + string submitter = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // evidence defines the evidence of misbehavior. + google.protobuf.Any evidence = 2 [(cosmos_proto.accepts_interface) = "cosmos.evidence.v1beta1.Evidence"]; +} + +// MsgSubmitEvidenceResponse defines the Msg/SubmitEvidence response type. +message MsgSubmitEvidenceResponse { + // hash defines the hash of the evidence. + bytes hash = 4; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/feegrant/module/v1/module.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/feegrant/module/v1/module.proto new file mode 100644 index 00000000000..c5d6c24e07c --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/feegrant/module/v1/module.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; + +package cosmos.feegrant.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the feegrant module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "cosmossdk.io/x/feegrant" + }; +} \ No newline at end of file diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/feegrant/v1beta1/feegrant.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/feegrant/v1beta1/feegrant.proto new file mode 100644 index 00000000000..a1c67eafbd1 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/feegrant/v1beta1/feegrant.proto @@ -0,0 +1,96 @@ +// Since: cosmos-sdk 0.43 +syntax = "proto3"; +package cosmos.feegrant.v1beta1; + +import "gogoproto/gogo.proto"; +import "google/protobuf/any.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "amino/amino.proto"; +import "google/protobuf/timestamp.proto"; +import "google/protobuf/duration.proto"; + +option go_package = "cosmossdk.io/x/feegrant"; + +// BasicAllowance implements Allowance with a one-time grant of coins +// that optionally expires. The grantee can use up to SpendLimit to cover fees. +message BasicAllowance { + option (cosmos_proto.implements_interface) = "cosmos.feegrant.v1beta1.FeeAllowanceI"; + option (amino.name) = "cosmos-sdk/BasicAllowance"; + + // spend_limit specifies the maximum amount of coins that can be spent + // by this allowance and will be updated as coins are spent. If it is + // empty, there is no spend limit and any amount of coins can be spent. + repeated cosmos.base.v1beta1.Coin spend_limit = 1 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + + // expiration specifies an optional time when this allowance expires + google.protobuf.Timestamp expiration = 2 [(gogoproto.stdtime) = true]; +} + +// PeriodicAllowance extends Allowance to allow for both a maximum cap, +// as well as a limit per time period. +message PeriodicAllowance { + option (cosmos_proto.implements_interface) = "cosmos.feegrant.v1beta1.FeeAllowanceI"; + option (amino.name) = "cosmos-sdk/PeriodicAllowance"; + + // basic specifies a struct of `BasicAllowance` + BasicAllowance basic = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // period specifies the time duration in which period_spend_limit coins can + // be spent before that allowance is reset + google.protobuf.Duration period = 2 + [(gogoproto.stdduration) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // period_spend_limit specifies the maximum number of coins that can be spent + // in the period + repeated cosmos.base.v1beta1.Coin period_spend_limit = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + + // period_can_spend is the number of coins left to be spent before the period_reset time + repeated cosmos.base.v1beta1.Coin period_can_spend = 4 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + + // period_reset is the time at which this period resets and a new one begins, + // it is calculated from the start time of the first transaction after the + // last period ended + google.protobuf.Timestamp period_reset = 5 + [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// AllowedMsgAllowance creates allowance only for specified message types. +message AllowedMsgAllowance { + option (gogoproto.goproto_getters) = false; + option (cosmos_proto.implements_interface) = "cosmos.feegrant.v1beta1.FeeAllowanceI"; + option (amino.name) = "cosmos-sdk/AllowedMsgAllowance"; + + // allowance can be any of basic and periodic fee allowance. + google.protobuf.Any allowance = 1 [(cosmos_proto.accepts_interface) = "cosmos.feegrant.v1beta1.FeeAllowanceI"]; + + // allowed_messages are the messages for which the grantee has the access. + repeated string allowed_messages = 2; +} + +// Grant is stored in the KVStore to record a grant with full context +message Grant { + // granter is the address of the user granting an allowance of their funds. + string granter = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // grantee is the address of the user being granted an allowance of another user's funds. + string grantee = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // allowance can be any of basic, periodic, allowed fee allowance. + google.protobuf.Any allowance = 3 [(cosmos_proto.accepts_interface) = "cosmos.feegrant.v1beta1.FeeAllowanceI"]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/feegrant/v1beta1/genesis.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/feegrant/v1beta1/genesis.proto new file mode 100644 index 00000000000..ac7e57e1e44 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/feegrant/v1beta1/genesis.proto @@ -0,0 +1,14 @@ +// Since: cosmos-sdk 0.43 +syntax = "proto3"; +package cosmos.feegrant.v1beta1; + +import "gogoproto/gogo.proto"; +import "cosmos/feegrant/v1beta1/feegrant.proto"; +import "amino/amino.proto"; + +option go_package = "cosmossdk.io/x/feegrant"; + +// GenesisState contains a set of fee allowances, persisted from the store +message GenesisState { + repeated Grant allowances = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/feegrant/v1beta1/query.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/feegrant/v1beta1/query.proto new file mode 100644 index 00000000000..591537acd9e --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/feegrant/v1beta1/query.proto @@ -0,0 +1,84 @@ +// Since: cosmos-sdk 0.43 +syntax = "proto3"; +package cosmos.feegrant.v1beta1; + +import "cosmos/feegrant/v1beta1/feegrant.proto"; +import "cosmos/base/query/v1beta1/pagination.proto"; +import "google/api/annotations.proto"; +import "cosmos_proto/cosmos.proto"; + +option go_package = "cosmossdk.io/x/feegrant"; + +// Query defines the gRPC querier service. +service Query { + + // Allowance returns granted allwance to the grantee by the granter. + rpc Allowance(QueryAllowanceRequest) returns (QueryAllowanceResponse) { + option (google.api.http).get = "/cosmos/feegrant/v1beta1/allowance/{granter}/{grantee}"; + } + + // Allowances returns all the grants for the given grantee address. + rpc Allowances(QueryAllowancesRequest) returns (QueryAllowancesResponse) { + option (google.api.http).get = "/cosmos/feegrant/v1beta1/allowances/{grantee}"; + } + + // AllowancesByGranter returns all the grants given by an address + // + // Since: cosmos-sdk 0.46 + rpc AllowancesByGranter(QueryAllowancesByGranterRequest) returns (QueryAllowancesByGranterResponse) { + option (google.api.http).get = "/cosmos/feegrant/v1beta1/issued/{granter}"; + } +} + +// QueryAllowanceRequest is the request type for the Query/Allowance RPC method. +message QueryAllowanceRequest { + // granter is the address of the user granting an allowance of their funds. + string granter = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // grantee is the address of the user being granted an allowance of another user's funds. + string grantee = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// QueryAllowanceResponse is the response type for the Query/Allowance RPC method. +message QueryAllowanceResponse { + // allowance is a allowance granted for grantee by granter. + cosmos.feegrant.v1beta1.Grant allowance = 1; +} + +// QueryAllowancesRequest is the request type for the Query/Allowances RPC method. +message QueryAllowancesRequest { + string grantee = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // pagination defines an pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryAllowancesResponse is the response type for the Query/Allowances RPC method. +message QueryAllowancesResponse { + // allowances are allowance's granted for grantee by granter. + repeated cosmos.feegrant.v1beta1.Grant allowances = 1; + + // pagination defines an pagination for the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryAllowancesByGranterRequest is the request type for the Query/AllowancesByGranter RPC method. +// +// Since: cosmos-sdk 0.46 +message QueryAllowancesByGranterRequest { + string granter = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // pagination defines an pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryAllowancesByGranterResponse is the response type for the Query/AllowancesByGranter RPC method. +// +// Since: cosmos-sdk 0.46 +message QueryAllowancesByGranterResponse { + // allowances that have been issued by the granter. + repeated cosmos.feegrant.v1beta1.Grant allowances = 1; + + // pagination defines an pagination for the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/feegrant/v1beta1/tx.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/feegrant/v1beta1/tx.proto new file mode 100644 index 00000000000..a45eec3ba36 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/feegrant/v1beta1/tx.proto @@ -0,0 +1,77 @@ +// Since: cosmos-sdk 0.43 +syntax = "proto3"; +package cosmos.feegrant.v1beta1; + +import "google/protobuf/any.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; + +option go_package = "cosmossdk.io/x/feegrant"; + +// Msg defines the feegrant msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // GrantAllowance grants fee allowance to the grantee on the granter's + // account with the provided expiration time. + rpc GrantAllowance(MsgGrantAllowance) returns (MsgGrantAllowanceResponse); + + // RevokeAllowance revokes any fee allowance of granter's account that + // has been granted to the grantee. + rpc RevokeAllowance(MsgRevokeAllowance) returns (MsgRevokeAllowanceResponse); + + // PruneAllowances prunes expired fee allowances, currently up to 75 at a time. + // + // Since cosmos-sdk 0.50 + rpc PruneAllowances(MsgPruneAllowances) returns (MsgPruneAllowancesResponse); +} + +// MsgGrantAllowance adds permission for Grantee to spend up to Allowance +// of fees from the account of Granter. +message MsgGrantAllowance { + option (cosmos.msg.v1.signer) = "granter"; + option (amino.name) = "cosmos-sdk/MsgGrantAllowance"; + + // granter is the address of the user granting an allowance of their funds. + string granter = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // grantee is the address of the user being granted an allowance of another user's funds. + string grantee = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // allowance can be any of basic, periodic, allowed fee allowance. + google.protobuf.Any allowance = 3 [(cosmos_proto.accepts_interface) = "cosmos.feegrant.v1beta1.FeeAllowanceI"]; +} + +// MsgGrantAllowanceResponse defines the Msg/GrantAllowanceResponse response type. +message MsgGrantAllowanceResponse {} + +// MsgRevokeAllowance removes any existing Allowance from Granter to Grantee. +message MsgRevokeAllowance { + option (cosmos.msg.v1.signer) = "granter"; + option (amino.name) = "cosmos-sdk/MsgRevokeAllowance"; + + // granter is the address of the user granting an allowance of their funds. + string granter = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // grantee is the address of the user being granted an allowance of another user's funds. + string grantee = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// MsgRevokeAllowanceResponse defines the Msg/RevokeAllowanceResponse response type. +message MsgRevokeAllowanceResponse {} + +// MsgPruneAllowances prunes expired fee allowances. +// +// Since cosmos-sdk 0.50 +message MsgPruneAllowances { + option (cosmos.msg.v1.signer) = "pruner"; + + // pruner is the address of the user pruning expired allowances. + string pruner = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// MsgPruneAllowancesResponse defines the Msg/PruneAllowancesResponse response type. +// +// Since cosmos-sdk 0.50 +message MsgPruneAllowancesResponse {} \ No newline at end of file diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/genutil/module/v1/module.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/genutil/module/v1/module.proto new file mode 100644 index 00000000000..86e6f5763d2 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/genutil/module/v1/module.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; + +package cosmos.genutil.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object for the genutil module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/genutil" + }; +} \ No newline at end of file diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/genutil/v1beta1/genesis.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/genutil/v1beta1/genesis.proto new file mode 100644 index 00000000000..dfd34943ea5 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/genutil/v1beta1/genesis.proto @@ -0,0 +1,18 @@ +syntax = "proto3"; +package cosmos.genutil.v1beta1; + +import "gogoproto/gogo.proto"; +import "amino/amino.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/genutil/types"; + +// GenesisState defines the raw genesis transaction in JSON. +message GenesisState { + // gen_txs defines the genesis transactions. + repeated bytes gen_txs = 1 [ + (gogoproto.casttype) = "encoding/json.RawMessage", + (gogoproto.jsontag) = "gentxs", + (amino.field_name) = "gentxs", + (amino.dont_omitempty) = true + ]; +} \ No newline at end of file diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/gov/module/v1/module.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/gov/module/v1/module.proto new file mode 100644 index 00000000000..9cade9af015 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/gov/module/v1/module.proto @@ -0,0 +1,19 @@ +syntax = "proto3"; + +package cosmos.gov.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the gov module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/gov" + }; + + // max_metadata_len defines the maximum proposal metadata length. + // Defaults to 255 if not explicitly set. + uint64 max_metadata_len = 1; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 2; +} \ No newline at end of file diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1/genesis.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1/genesis.proto new file mode 100644 index 00000000000..1398b332681 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1/genesis.proto @@ -0,0 +1,40 @@ +// Since: cosmos-sdk 0.46 +syntax = "proto3"; + +package cosmos.gov.v1; + +import "cosmos/gov/v1/gov.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/gov/types/v1"; + +// GenesisState defines the gov module's genesis state. +message GenesisState { + // starting_proposal_id is the ID of the starting proposal. + uint64 starting_proposal_id = 1; + // deposits defines all the deposits present at genesis. + repeated Deposit deposits = 2; + // votes defines all the votes present at genesis. + repeated Vote votes = 3; + // proposals defines all the proposals present at genesis. + repeated Proposal proposals = 4; + // Deprecated: Prefer to use `params` instead. + // deposit_params defines all the paramaters of related to deposit. + DepositParams deposit_params = 5 [deprecated = true]; + // Deprecated: Prefer to use `params` instead. + // voting_params defines all the paramaters of related to voting. + VotingParams voting_params = 6 [deprecated = true]; + // Deprecated: Prefer to use `params` instead. + // tally_params defines all the paramaters of related to tally. + TallyParams tally_params = 7 [deprecated = true]; + // params defines all the paramaters of x/gov module. + // + // Since: cosmos-sdk 0.47 + Params params = 8; + // The constitution allows builders to lay a foundation and define purpose. + // This is an immutable string set in genesis. + // There are no amendments, to go outside of scope, just fork. + // constitution is an immutable string in genesis for a chain builder to lay out their vision, ideas and ideals. + // + // Since: cosmos-sdk 0.50 + string constitution = 9; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1/gov.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1/gov.proto new file mode 100644 index 00000000000..0ebfbc1d1f0 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1/gov.proto @@ -0,0 +1,271 @@ +// Since: cosmos-sdk 0.46 +syntax = "proto3"; +package cosmos.gov.v1; + +import "cosmos/base/v1beta1/coin.proto"; +import "gogoproto/gogo.proto"; +import "google/protobuf/timestamp.proto"; +import "google/protobuf/any.proto"; +import "google/protobuf/duration.proto"; +import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/gov/types/v1"; + +// VoteOption enumerates the valid vote options for a given governance proposal. +enum VoteOption { + // VOTE_OPTION_UNSPECIFIED defines a no-op vote option. + VOTE_OPTION_UNSPECIFIED = 0; + // VOTE_OPTION_YES defines a yes vote option. + VOTE_OPTION_YES = 1; + // VOTE_OPTION_ABSTAIN defines an abstain vote option. + VOTE_OPTION_ABSTAIN = 2; + // VOTE_OPTION_NO defines a no vote option. + VOTE_OPTION_NO = 3; + // VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option. + VOTE_OPTION_NO_WITH_VETO = 4; +} + +// WeightedVoteOption defines a unit of vote for vote split. +message WeightedVoteOption { + // option defines the valid vote options, it must not contain duplicate vote options. + VoteOption option = 1; + + // weight is the vote weight associated with the vote option. + string weight = 2 [(cosmos_proto.scalar) = "cosmos.Dec"]; +} + +// Deposit defines an amount deposited by an account address to an active +// proposal. +message Deposit { + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; + + // depositor defines the deposit addresses from the proposals. + string depositor = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // amount to be deposited by depositor. + repeated cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// Proposal defines the core field members of a governance proposal. +message Proposal { + // id defines the unique id of the proposal. + uint64 id = 1; + + // messages are the arbitrary messages to be executed if the proposal passes. + repeated google.protobuf.Any messages = 2; + + // status defines the proposal status. + ProposalStatus status = 3; + + // final_tally_result is the final tally result of the proposal. When + // querying a proposal via gRPC, this field is not populated until the + // proposal's voting period has ended. + TallyResult final_tally_result = 4; + + // submit_time is the time of proposal submission. + google.protobuf.Timestamp submit_time = 5 [(gogoproto.stdtime) = true]; + + // deposit_end_time is the end time for deposition. + google.protobuf.Timestamp deposit_end_time = 6 [(gogoproto.stdtime) = true]; + + // total_deposit is the total deposit on the proposal. + repeated cosmos.base.v1beta1.Coin total_deposit = 7 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // voting_start_time is the starting time to vote on a proposal. + google.protobuf.Timestamp voting_start_time = 8 [(gogoproto.stdtime) = true]; + + // voting_end_time is the end time of voting on a proposal. + google.protobuf.Timestamp voting_end_time = 9 [(gogoproto.stdtime) = true]; + + // metadata is any arbitrary metadata attached to the proposal. + // the recommended format of the metadata is to be found here: + // https://docs.cosmos.network/v0.47/modules/gov#proposal-3 + string metadata = 10; + + // title is the title of the proposal + // + // Since: cosmos-sdk 0.47 + string title = 11; + + // summary is a short summary of the proposal + // + // Since: cosmos-sdk 0.47 + string summary = 12; + + // proposer is the address of the proposal sumbitter + // + // Since: cosmos-sdk 0.47 + string proposer = 13 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // expedited defines if the proposal is expedited + // + // Since: cosmos-sdk 0.50 + bool expedited = 14; + + // failed_reason defines the reason why the proposal failed + // + // Since: cosmos-sdk 0.50 + string failed_reason = 15; +} + +// ProposalStatus enumerates the valid statuses of a proposal. +enum ProposalStatus { + // PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status. + PROPOSAL_STATUS_UNSPECIFIED = 0; + // PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit + // period. + PROPOSAL_STATUS_DEPOSIT_PERIOD = 1; + // PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting + // period. + PROPOSAL_STATUS_VOTING_PERIOD = 2; + // PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has + // passed. + PROPOSAL_STATUS_PASSED = 3; + // PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has + // been rejected. + PROPOSAL_STATUS_REJECTED = 4; + // PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has + // failed. + PROPOSAL_STATUS_FAILED = 5; +} + +// TallyResult defines a standard tally for a governance proposal. +message TallyResult { + // yes_count is the number of yes votes on a proposal. + string yes_count = 1 [(cosmos_proto.scalar) = "cosmos.Int"]; + // abstain_count is the number of abstain votes on a proposal. + string abstain_count = 2 [(cosmos_proto.scalar) = "cosmos.Int"]; + // no_count is the number of no votes on a proposal. + string no_count = 3 [(cosmos_proto.scalar) = "cosmos.Int"]; + // no_with_veto_count is the number of no with veto votes on a proposal. + string no_with_veto_count = 4 [(cosmos_proto.scalar) = "cosmos.Int"]; +} + +// Vote defines a vote on a governance proposal. +// A Vote consists of a proposal ID, the voter, and the vote option. +message Vote { + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; + + // voter is the voter address of the proposal. + string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + reserved 3; + + // options is the weighted vote options. + repeated WeightedVoteOption options = 4; + + // metadata is any arbitrary metadata attached to the vote. + // the recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/gov#vote-5 + string metadata = 5; +} + +// DepositParams defines the params for deposits on governance proposals. +message DepositParams { + option deprecated = true; + + // Minimum deposit for a proposal to enter voting period. + repeated cosmos.base.v1beta1.Coin min_deposit = 1 + [(gogoproto.nullable) = false, (gogoproto.jsontag) = "min_deposit,omitempty"]; + + // Maximum period for Atom holders to deposit on a proposal. Initial value: 2 + // months. + google.protobuf.Duration max_deposit_period = 2 + [(gogoproto.stdduration) = true, (gogoproto.jsontag) = "max_deposit_period,omitempty"]; +} + +// VotingParams defines the params for voting on governance proposals. +message VotingParams { + option deprecated = true; + + // Duration of the voting period. + google.protobuf.Duration voting_period = 1 [(gogoproto.stdduration) = true]; +} + +// TallyParams defines the params for tallying votes on governance proposals. +message TallyParams { + option deprecated = true; + + // Minimum percentage of total stake needed to vote for a result to be + // considered valid. + string quorum = 1 [(cosmos_proto.scalar) = "cosmos.Dec"]; + + // Minimum proportion of Yes votes for proposal to pass. Default value: 0.5. + string threshold = 2 [(cosmos_proto.scalar) = "cosmos.Dec"]; + + // Minimum value of Veto votes to Total votes ratio for proposal to be + // vetoed. Default value: 1/3. + string veto_threshold = 3 [(cosmos_proto.scalar) = "cosmos.Dec"]; +} + +// Params defines the parameters for the x/gov module. +// +// Since: cosmos-sdk 0.47 +message Params { + // Minimum deposit for a proposal to enter voting period. + repeated cosmos.base.v1beta1.Coin min_deposit = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // Maximum period for Atom holders to deposit on a proposal. Initial value: 2 + // months. + google.protobuf.Duration max_deposit_period = 2 [(gogoproto.stdduration) = true]; + + // Duration of the voting period. + google.protobuf.Duration voting_period = 3 [(gogoproto.stdduration) = true]; + + // Minimum percentage of total stake needed to vote for a result to be + // considered valid. + string quorum = 4 [(cosmos_proto.scalar) = "cosmos.Dec"]; + + // Minimum proportion of Yes votes for proposal to pass. Default value: 0.5. + string threshold = 5 [(cosmos_proto.scalar) = "cosmos.Dec"]; + + // Minimum value of Veto votes to Total votes ratio for proposal to be + // vetoed. Default value: 1/3. + string veto_threshold = 6 [(cosmos_proto.scalar) = "cosmos.Dec"]; + + // The ratio representing the proportion of the deposit value that must be paid at proposal submission. + string min_initial_deposit_ratio = 7 [(cosmos_proto.scalar) = "cosmos.Dec"]; + + // The cancel ratio which will not be returned back to the depositors when a proposal is cancelled. + // + // Since: cosmos-sdk 0.50 + string proposal_cancel_ratio = 8 [(cosmos_proto.scalar) = "cosmos.Dec"]; + + // The address which will receive (proposal_cancel_ratio * deposit) proposal deposits. + // If empty, the (proposal_cancel_ratio * deposit) proposal deposits will be burned. + // + // Since: cosmos-sdk 0.50 + string proposal_cancel_dest = 9 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // Duration of the voting period of an expedited proposal. + // + // Since: cosmos-sdk 0.50 + google.protobuf.Duration expedited_voting_period = 10 [(gogoproto.stdduration) = true]; + + // Minimum proportion of Yes votes for proposal to pass. Default value: 0.67. + // + // Since: cosmos-sdk 0.50 + string expedited_threshold = 11 [(cosmos_proto.scalar) = "cosmos.Dec"]; + + // Minimum expedited deposit for a proposal to enter voting period. + repeated cosmos.base.v1beta1.Coin expedited_min_deposit = 12 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // burn deposits if a proposal does not meet quorum + bool burn_vote_quorum = 13; + + // burn deposits if the proposal does not enter voting period + bool burn_proposal_deposit_prevote = 14; + + // burn deposits if quorum with vote type no_veto is met + bool burn_vote_veto = 15; + + // The ratio representing the proportion of the deposit value minimum that must be met when making a deposit. + // Default value: 0.01. Meaning that for a chain with a min_deposit of 100stake, a deposit of 1stake would be + // required. + // + // Since: cosmos-sdk 0.50 + string min_deposit_ratio = 16 [(cosmos_proto.scalar) = "cosmos.Dec"]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1/query.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1/query.proto new file mode 100644 index 00000000000..006d12fd614 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1/query.proto @@ -0,0 +1,205 @@ +// Since: cosmos-sdk 0.46 +syntax = "proto3"; +package cosmos.gov.v1; + +import "cosmos/base/query/v1beta1/pagination.proto"; +import "google/api/annotations.proto"; +import "cosmos/gov/v1/gov.proto"; +import "cosmos_proto/cosmos.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/gov/types/v1"; + +// Query defines the gRPC querier service for gov module +service Query { + // Constitution queries the chain's constitution. + rpc Constitution(QueryConstitutionRequest) returns (QueryConstitutionResponse) { + option (google.api.http).get = "/cosmos/gov/v1/constitution"; + } + + // Proposal queries proposal details based on ProposalID. + rpc Proposal(QueryProposalRequest) returns (QueryProposalResponse) { + option (google.api.http).get = "/cosmos/gov/v1/proposals/{proposal_id}"; + } + + // Proposals queries all proposals based on given status. + rpc Proposals(QueryProposalsRequest) returns (QueryProposalsResponse) { + option (google.api.http).get = "/cosmos/gov/v1/proposals"; + } + + // Vote queries voted information based on proposalID, voterAddr. + rpc Vote(QueryVoteRequest) returns (QueryVoteResponse) { + option (google.api.http).get = "/cosmos/gov/v1/proposals/{proposal_id}/votes/{voter}"; + } + + // Votes queries votes of a given proposal. + rpc Votes(QueryVotesRequest) returns (QueryVotesResponse) { + option (google.api.http).get = "/cosmos/gov/v1/proposals/{proposal_id}/votes"; + } + + // Params queries all parameters of the gov module. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/cosmos/gov/v1/params/{params_type}"; + } + + // Deposit queries single deposit information based on proposalID, depositAddr. + rpc Deposit(QueryDepositRequest) returns (QueryDepositResponse) { + option (google.api.http).get = "/cosmos/gov/v1/proposals/{proposal_id}/deposits/{depositor}"; + } + + // Deposits queries all deposits of a single proposal. + rpc Deposits(QueryDepositsRequest) returns (QueryDepositsResponse) { + option (google.api.http).get = "/cosmos/gov/v1/proposals/{proposal_id}/deposits"; + } + + // TallyResult queries the tally of a proposal vote. + rpc TallyResult(QueryTallyResultRequest) returns (QueryTallyResultResponse) { + option (google.api.http).get = "/cosmos/gov/v1/proposals/{proposal_id}/tally"; + } +} + +// QueryConstitutionRequest is the request type for the Query/Constitution RPC method +message QueryConstitutionRequest {} + +// QueryConstitutionResponse is the response type for the Query/Constitution RPC method +message QueryConstitutionResponse { + string constitution = 1; +} + +// QueryProposalRequest is the request type for the Query/Proposal RPC method. +message QueryProposalRequest { + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; +} + +// QueryProposalResponse is the response type for the Query/Proposal RPC method. +message QueryProposalResponse { + // proposal is the requested governance proposal. + Proposal proposal = 1; +} + +// QueryProposalsRequest is the request type for the Query/Proposals RPC method. +message QueryProposalsRequest { + // proposal_status defines the status of the proposals. + ProposalStatus proposal_status = 1; + + // voter defines the voter address for the proposals. + string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // depositor defines the deposit addresses from the proposals. + string depositor = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 4; +} + +// QueryProposalsResponse is the response type for the Query/Proposals RPC +// method. +message QueryProposalsResponse { + // proposals defines all the requested governance proposals. + repeated Proposal proposals = 1; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryVoteRequest is the request type for the Query/Vote RPC method. +message QueryVoteRequest { + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; + + // voter defines the voter address for the proposals. + string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// QueryVoteResponse is the response type for the Query/Vote RPC method. +message QueryVoteResponse { + // vote defines the queried vote. + Vote vote = 1; +} + +// QueryVotesRequest is the request type for the Query/Votes RPC method. +message QueryVotesRequest { + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryVotesResponse is the response type for the Query/Votes RPC method. +message QueryVotesResponse { + // votes defines the queried votes. + repeated Vote votes = 1; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryParamsRequest is the request type for the Query/Params RPC method. +message QueryParamsRequest { + // params_type defines which parameters to query for, can be one of "voting", + // "tallying" or "deposit". + string params_type = 1; +} + +// QueryParamsResponse is the response type for the Query/Params RPC method. +message QueryParamsResponse { + // Deprecated: Prefer to use `params` instead. + // voting_params defines the parameters related to voting. + VotingParams voting_params = 1 [deprecated = true]; + // Deprecated: Prefer to use `params` instead. + // deposit_params defines the parameters related to deposit. + DepositParams deposit_params = 2 [deprecated = true]; + // Deprecated: Prefer to use `params` instead. + // tally_params defines the parameters related to tally. + TallyParams tally_params = 3 [deprecated = true]; + // params defines all the paramaters of x/gov module. + // + // Since: cosmos-sdk 0.47 + Params params = 4; +} + +// QueryDepositRequest is the request type for the Query/Deposit RPC method. +message QueryDepositRequest { + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; + + // depositor defines the deposit addresses from the proposals. + string depositor = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// QueryDepositResponse is the response type for the Query/Deposit RPC method. +message QueryDepositResponse { + // deposit defines the requested deposit. + Deposit deposit = 1; +} + +// QueryDepositsRequest is the request type for the Query/Deposits RPC method. +message QueryDepositsRequest { + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryDepositsResponse is the response type for the Query/Deposits RPC method. +message QueryDepositsResponse { + // deposits defines the requested deposits. + repeated Deposit deposits = 1; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryTallyResultRequest is the request type for the Query/Tally RPC method. +message QueryTallyResultRequest { + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; +} + +// QueryTallyResultResponse is the response type for the Query/Tally RPC method. +message QueryTallyResultResponse { + // tally defines the requested tally. + TallyResult tally = 1; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1/tx.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1/tx.proto new file mode 100644 index 00000000000..21920a5ffcf --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1/tx.proto @@ -0,0 +1,213 @@ +// Since: cosmos-sdk 0.46 +syntax = "proto3"; +package cosmos.gov.v1; + +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/gov/v1/gov.proto"; +import "gogoproto/gogo.proto"; +import "cosmos_proto/cosmos.proto"; +import "google/protobuf/any.proto"; +import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; +import "google/protobuf/timestamp.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/gov/types/v1"; + +// Msg defines the gov Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // SubmitProposal defines a method to create new proposal given the messages. + rpc SubmitProposal(MsgSubmitProposal) returns (MsgSubmitProposalResponse); + + // ExecLegacyContent defines a Msg to be in included in a MsgSubmitProposal + // to execute a legacy content-based proposal. + rpc ExecLegacyContent(MsgExecLegacyContent) returns (MsgExecLegacyContentResponse); + + // Vote defines a method to add a vote on a specific proposal. + rpc Vote(MsgVote) returns (MsgVoteResponse); + + // VoteWeighted defines a method to add a weighted vote on a specific proposal. + rpc VoteWeighted(MsgVoteWeighted) returns (MsgVoteWeightedResponse); + + // Deposit defines a method to add deposit on a specific proposal. + rpc Deposit(MsgDeposit) returns (MsgDepositResponse); + + // UpdateParams defines a governance operation for updating the x/gov module + // parameters. The authority is defined in the keeper. + // + // Since: cosmos-sdk 0.47 + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); + + // CancelProposal defines a method to cancel governance proposal + // + // Since: cosmos-sdk 0.50 + rpc CancelProposal(MsgCancelProposal) returns (MsgCancelProposalResponse); +} + +// MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary +// proposal Content. +message MsgSubmitProposal { + option (cosmos.msg.v1.signer) = "proposer"; + option (amino.name) = "cosmos-sdk/v1/MsgSubmitProposal"; + + // messages are the arbitrary messages to be executed if proposal passes. + repeated google.protobuf.Any messages = 1; + + // initial_deposit is the deposit value that must be paid at proposal submission. + repeated cosmos.base.v1beta1.Coin initial_deposit = 2 [ + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins" + ]; + + // proposer is the account address of the proposer. + string proposer = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // metadata is any arbitrary metadata attached to the proposal. + string metadata = 4; + + // title is the title of the proposal. + // + // Since: cosmos-sdk 0.47 + string title = 5; + + // summary is the summary of the proposal + // + // Since: cosmos-sdk 0.47 + string summary = 6; + + // expedited defines if the proposal is expedited or not + // + // Since: cosmos-sdk 0.50 + bool expedited = 7; +} + +// MsgSubmitProposalResponse defines the Msg/SubmitProposal response type. +message MsgSubmitProposalResponse { + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; +} + +// MsgExecLegacyContent is used to wrap the legacy content field into a message. +// This ensures backwards compatibility with v1beta1.MsgSubmitProposal. +message MsgExecLegacyContent { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "cosmos-sdk/v1/MsgExecLegacyContent"; + + // content is the proposal's content. + google.protobuf.Any content = 1 [(cosmos_proto.accepts_interface) = "cosmos.gov.v1beta1.Content"]; + // authority must be the gov module address. + string authority = 2; +} + +// MsgExecLegacyContentResponse defines the Msg/ExecLegacyContent response type. +message MsgExecLegacyContentResponse {} + +// MsgVote defines a message to cast a vote. +message MsgVote { + option (cosmos.msg.v1.signer) = "voter"; + option (amino.name) = "cosmos-sdk/v1/MsgVote"; + + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1 [(gogoproto.jsontag) = "proposal_id", (amino.dont_omitempty) = true]; + + // voter is the voter address for the proposal. + string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // option defines the vote option. + VoteOption option = 3; + + // metadata is any arbitrary metadata attached to the Vote. + string metadata = 4; +} + +// MsgVoteResponse defines the Msg/Vote response type. +message MsgVoteResponse {} + +// MsgVoteWeighted defines a message to cast a vote. +message MsgVoteWeighted { + option (cosmos.msg.v1.signer) = "voter"; + option (amino.name) = "cosmos-sdk/v1/MsgVoteWeighted"; + + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1 [(gogoproto.jsontag) = "proposal_id", (amino.dont_omitempty) = true]; + + // voter is the voter address for the proposal. + string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // options defines the weighted vote options. + repeated WeightedVoteOption options = 3; + + // metadata is any arbitrary metadata attached to the VoteWeighted. + string metadata = 4; +} + +// MsgVoteWeightedResponse defines the Msg/VoteWeighted response type. +message MsgVoteWeightedResponse {} + +// MsgDeposit defines a message to submit a deposit to an existing proposal. +message MsgDeposit { + option (cosmos.msg.v1.signer) = "depositor"; + option (amino.name) = "cosmos-sdk/v1/MsgDeposit"; + + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1 [(gogoproto.jsontag) = "proposal_id", (amino.dont_omitempty) = true]; + + // depositor defines the deposit addresses from the proposals. + string depositor = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // amount to be deposited by depositor. + repeated cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// MsgDepositResponse defines the Msg/Deposit response type. +message MsgDepositResponse {} + +// MsgUpdateParams is the Msg/UpdateParams request type. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "cosmos-sdk/x/gov/v1/MsgUpdateParams"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // params defines the x/gov parameters to update. + // + // NOTE: All parameters must be supplied. + Params params = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParamsResponse {} + +// MsgCancelProposal is the Msg/CancelProposal request type. +// +// Since: cosmos-sdk 0.50 +message MsgCancelProposal { + option (cosmos.msg.v1.signer) = "proposer"; + + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1 [(gogoproto.jsontag) = "proposal_id"]; + // proposer is the account address of the proposer. + string proposer = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// MsgCancelProposalResponse defines the response structure for executing a +// MsgCancelProposal message. +// +// Since: cosmos-sdk 0.50 +message MsgCancelProposalResponse { + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1 [(gogoproto.jsontag) = "proposal_id"]; + // canceled_time is the time when proposal is canceled. + google.protobuf.Timestamp canceled_time = 2 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + // canceled_height defines the block height at which the proposal is canceled. + uint64 canceled_height = 3; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1beta1/genesis.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1beta1/genesis.proto new file mode 100644 index 00000000000..f0c679a3187 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1beta1/genesis.proto @@ -0,0 +1,30 @@ +syntax = "proto3"; + +package cosmos.gov.v1beta1; + +import "gogoproto/gogo.proto"; +import "cosmos/gov/v1beta1/gov.proto"; +import "amino/amino.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"; + +// GenesisState defines the gov module's genesis state. +message GenesisState { + // starting_proposal_id is the ID of the starting proposal. + uint64 starting_proposal_id = 1; + // deposits defines all the deposits present at genesis. + repeated Deposit deposits = 2 + [(gogoproto.castrepeated) = "Deposits", (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + // votes defines all the votes present at genesis. + repeated Vote votes = 3 + [(gogoproto.castrepeated) = "Votes", (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + // proposals defines all the proposals present at genesis. + repeated Proposal proposals = 4 + [(gogoproto.castrepeated) = "Proposals", (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + // deposit_params defines all the parameters related to deposit. + DepositParams deposit_params = 5 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + // voting_params defines all the parameters related to voting. + VotingParams voting_params = 6 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + // tally_params defines all the parameters related to tally. + TallyParams tally_params = 7 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1beta1/gov.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1beta1/gov.proto new file mode 100644 index 00000000000..99b97191c16 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1beta1/gov.proto @@ -0,0 +1,254 @@ +syntax = "proto3"; +package cosmos.gov.v1beta1; + +import "cosmos/base/v1beta1/coin.proto"; +import "gogoproto/gogo.proto"; +import "google/protobuf/timestamp.proto"; +import "google/protobuf/any.proto"; +import "google/protobuf/duration.proto"; +import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"; + +option (gogoproto.goproto_getters_all) = false; + +// VoteOption enumerates the valid vote options for a given governance proposal. +enum VoteOption { + option (gogoproto.goproto_enum_prefix) = false; + + // VOTE_OPTION_UNSPECIFIED defines a no-op vote option. + VOTE_OPTION_UNSPECIFIED = 0 [(gogoproto.enumvalue_customname) = "OptionEmpty"]; + // VOTE_OPTION_YES defines a yes vote option. + VOTE_OPTION_YES = 1 [(gogoproto.enumvalue_customname) = "OptionYes"]; + // VOTE_OPTION_ABSTAIN defines an abstain vote option. + VOTE_OPTION_ABSTAIN = 2 [(gogoproto.enumvalue_customname) = "OptionAbstain"]; + // VOTE_OPTION_NO defines a no vote option. + VOTE_OPTION_NO = 3 [(gogoproto.enumvalue_customname) = "OptionNo"]; + // VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option. + VOTE_OPTION_NO_WITH_VETO = 4 [(gogoproto.enumvalue_customname) = "OptionNoWithVeto"]; +} + +// WeightedVoteOption defines a unit of vote for vote split. +// +// Since: cosmos-sdk 0.43 +message WeightedVoteOption { + // option defines the valid vote options, it must not contain duplicate vote options. + VoteOption option = 1; + + // weight is the vote weight associated with the vote option. + string weight = 2 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (amino.dont_omitempty) = true, + (gogoproto.nullable) = false + ]; +} + +// TextProposal defines a standard text proposal whose changes need to be +// manually updated in case of approval. +message TextProposal { + option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; + option (amino.name) = "cosmos-sdk/TextProposal"; + + option (gogoproto.equal) = true; + + // title of the proposal. + string title = 1; + + // description associated with the proposal. + string description = 2; +} + +// Deposit defines an amount deposited by an account address to an active +// proposal. +message Deposit { + option (gogoproto.goproto_getters) = false; + option (gogoproto.equal) = false; + + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; + + // depositor defines the deposit addresses from the proposals. + string depositor = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // amount to be deposited by depositor. + repeated cosmos.base.v1beta1.Coin amount = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +// Proposal defines the core field members of a governance proposal. +message Proposal { + option (gogoproto.equal) = true; + + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; + + // content is the proposal's content. + google.protobuf.Any content = 2 [(cosmos_proto.accepts_interface) = "cosmos.gov.v1beta1.Content"]; + + // status defines the proposal status. + ProposalStatus status = 3; + + // final_tally_result is the final tally result of the proposal. When + // querying a proposal via gRPC, this field is not populated until the + // proposal's voting period has ended. + TallyResult final_tally_result = 4 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // submit_time is the time of proposal submission. + google.protobuf.Timestamp submit_time = 5 + [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // deposit_end_time is the end time for deposition. + google.protobuf.Timestamp deposit_end_time = 6 + [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // total_deposit is the total deposit on the proposal. + repeated cosmos.base.v1beta1.Coin total_deposit = 7 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + + // voting_start_time is the starting time to vote on a proposal. + google.protobuf.Timestamp voting_start_time = 8 + [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // voting_end_time is the end time of voting on a proposal. + google.protobuf.Timestamp voting_end_time = 9 + [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// ProposalStatus enumerates the valid statuses of a proposal. +enum ProposalStatus { + option (gogoproto.goproto_enum_prefix) = false; + + // PROPOSAL_STATUS_UNSPECIFIED defines the default proposal status. + PROPOSAL_STATUS_UNSPECIFIED = 0 [(gogoproto.enumvalue_customname) = "StatusNil"]; + // PROPOSAL_STATUS_DEPOSIT_PERIOD defines a proposal status during the deposit + // period. + PROPOSAL_STATUS_DEPOSIT_PERIOD = 1 [(gogoproto.enumvalue_customname) = "StatusDepositPeriod"]; + // PROPOSAL_STATUS_VOTING_PERIOD defines a proposal status during the voting + // period. + PROPOSAL_STATUS_VOTING_PERIOD = 2 [(gogoproto.enumvalue_customname) = "StatusVotingPeriod"]; + // PROPOSAL_STATUS_PASSED defines a proposal status of a proposal that has + // passed. + PROPOSAL_STATUS_PASSED = 3 [(gogoproto.enumvalue_customname) = "StatusPassed"]; + // PROPOSAL_STATUS_REJECTED defines a proposal status of a proposal that has + // been rejected. + PROPOSAL_STATUS_REJECTED = 4 [(gogoproto.enumvalue_customname) = "StatusRejected"]; + // PROPOSAL_STATUS_FAILED defines a proposal status of a proposal that has + // failed. + PROPOSAL_STATUS_FAILED = 5 [(gogoproto.enumvalue_customname) = "StatusFailed"]; +} + +// TallyResult defines a standard tally for a governance proposal. +message TallyResult { + option (gogoproto.equal) = true; + + // yes is the number of yes votes on a proposal. + string yes = 1 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + + // abstain is the number of abstain votes on a proposal. + string abstain = 2 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + + // no is the number of no votes on a proposal. + string no = 3 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + + // no_with_veto is the number of no with veto votes on a proposal. + string no_with_veto = 4 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; +} + +// Vote defines a vote on a governance proposal. +// A Vote consists of a proposal ID, the voter, and the vote option. +message Vote { + option (gogoproto.equal) = false; + + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1 [(gogoproto.jsontag) = "id", (amino.field_name) = "id", (amino.dont_omitempty) = true]; + + // voter is the voter address of the proposal. + string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // Deprecated: Prefer to use `options` instead. This field is set in queries + // if and only if `len(options) == 1` and that option has weight 1. In all + // other cases, this field will default to VOTE_OPTION_UNSPECIFIED. + VoteOption option = 3 [deprecated = true]; + + // options is the weighted vote options. + // + // Since: cosmos-sdk 0.43 + repeated WeightedVoteOption options = 4 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// DepositParams defines the params for deposits on governance proposals. +message DepositParams { + // Minimum deposit for a proposal to enter voting period. + repeated cosmos.base.v1beta1.Coin min_deposit = 1 [ + (gogoproto.nullable) = false, + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", + (gogoproto.jsontag) = "min_deposit,omitempty" + ]; + + // Maximum period for Atom holders to deposit on a proposal. Initial value: 2 + // months. + google.protobuf.Duration max_deposit_period = 2 [ + (gogoproto.nullable) = false, + (gogoproto.stdduration) = true, + (gogoproto.jsontag) = "max_deposit_period,omitempty" + ]; +} + +// VotingParams defines the params for voting on governance proposals. +message VotingParams { + // Duration of the voting period. + google.protobuf.Duration voting_period = 1 + [(gogoproto.nullable) = false, (gogoproto.stdduration) = true, (gogoproto.jsontag) = "voting_period,omitempty"]; +} + +// TallyParams defines the params for tallying votes on governance proposals. +message TallyParams { + // Minimum percentage of total stake needed to vote for a result to be + // considered valid. + bytes quorum = 1 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "quorum,omitempty" + ]; + + // Minimum proportion of Yes votes for proposal to pass. Default value: 0.5. + bytes threshold = 2 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "threshold,omitempty" + ]; + + // Minimum value of Veto votes to Total votes ratio for proposal to be + // vetoed. Default value: 1/3. + bytes veto_threshold = 3 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "veto_threshold,omitempty" + ]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1beta1/query.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1beta1/query.proto new file mode 100644 index 00000000000..28352ed40c0 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1beta1/query.proto @@ -0,0 +1,194 @@ +syntax = "proto3"; +package cosmos.gov.v1beta1; + +import "cosmos/base/query/v1beta1/pagination.proto"; +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "cosmos/gov/v1beta1/gov.proto"; +import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"; + +// Query defines the gRPC querier service for gov module +service Query { + // Proposal queries proposal details based on ProposalID. + rpc Proposal(QueryProposalRequest) returns (QueryProposalResponse) { + option (google.api.http).get = "/cosmos/gov/v1beta1/proposals/{proposal_id}"; + } + + // Proposals queries all proposals based on given status. + rpc Proposals(QueryProposalsRequest) returns (QueryProposalsResponse) { + option (google.api.http).get = "/cosmos/gov/v1beta1/proposals"; + } + + // Vote queries voted information based on proposalID, voterAddr. + rpc Vote(QueryVoteRequest) returns (QueryVoteResponse) { + option (google.api.http).get = "/cosmos/gov/v1beta1/proposals/{proposal_id}/votes/{voter}"; + } + + // Votes queries votes of a given proposal. + rpc Votes(QueryVotesRequest) returns (QueryVotesResponse) { + option (google.api.http).get = "/cosmos/gov/v1beta1/proposals/{proposal_id}/votes"; + } + + // Params queries all parameters of the gov module. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/cosmos/gov/v1beta1/params/{params_type}"; + } + + // Deposit queries single deposit information based on proposalID, depositor address. + rpc Deposit(QueryDepositRequest) returns (QueryDepositResponse) { + option (google.api.http).get = "/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits/{depositor}"; + } + + // Deposits queries all deposits of a single proposal. + rpc Deposits(QueryDepositsRequest) returns (QueryDepositsResponse) { + option (google.api.http).get = "/cosmos/gov/v1beta1/proposals/{proposal_id}/deposits"; + } + + // TallyResult queries the tally of a proposal vote. + rpc TallyResult(QueryTallyResultRequest) returns (QueryTallyResultResponse) { + option (google.api.http).get = "/cosmos/gov/v1beta1/proposals/{proposal_id}/tally"; + } +} + +// QueryProposalRequest is the request type for the Query/Proposal RPC method. +message QueryProposalRequest { + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; +} + +// QueryProposalResponse is the response type for the Query/Proposal RPC method. +message QueryProposalResponse { + Proposal proposal = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// QueryProposalsRequest is the request type for the Query/Proposals RPC method. +message QueryProposalsRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // proposal_status defines the status of the proposals. + ProposalStatus proposal_status = 1; + + // voter defines the voter address for the proposals. + string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // depositor defines the deposit addresses from the proposals. + string depositor = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 4; +} + +// QueryProposalsResponse is the response type for the Query/Proposals RPC +// method. +message QueryProposalsResponse { + // proposals defines all the requested governance proposals. + repeated Proposal proposals = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryVoteRequest is the request type for the Query/Vote RPC method. +message QueryVoteRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; + + // voter defines the voter address for the proposals. + string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// QueryVoteResponse is the response type for the Query/Vote RPC method. +message QueryVoteResponse { + // vote defines the queried vote. + Vote vote = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// QueryVotesRequest is the request type for the Query/Votes RPC method. +message QueryVotesRequest { + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryVotesResponse is the response type for the Query/Votes RPC method. +message QueryVotesResponse { + // votes defines the queried votes. + repeated Vote votes = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryParamsRequest is the request type for the Query/Params RPC method. +message QueryParamsRequest { + // params_type defines which parameters to query for, can be one of "voting", + // "tallying" or "deposit". + string params_type = 1; +} + +// QueryParamsResponse is the response type for the Query/Params RPC method. +message QueryParamsResponse { + // voting_params defines the parameters related to voting. + VotingParams voting_params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + // deposit_params defines the parameters related to deposit. + DepositParams deposit_params = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + // tally_params defines the parameters related to tally. + TallyParams tally_params = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// QueryDepositRequest is the request type for the Query/Deposit RPC method. +message QueryDepositRequest { + option (gogoproto.goproto_getters) = false; + option (gogoproto.equal) = false; + + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; + + // depositor defines the deposit addresses from the proposals. + string depositor = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// QueryDepositResponse is the response type for the Query/Deposit RPC method. +message QueryDepositResponse { + // deposit defines the requested deposit. + Deposit deposit = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// QueryDepositsRequest is the request type for the Query/Deposits RPC method. +message QueryDepositsRequest { + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryDepositsResponse is the response type for the Query/Deposits RPC method. +message QueryDepositsResponse { + // deposits defines the requested deposits. + repeated Deposit deposits = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryTallyResultRequest is the request type for the Query/Tally RPC method. +message QueryTallyResultRequest { + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; +} + +// QueryTallyResultResponse is the response type for the Query/Tally RPC method. +message QueryTallyResultResponse { + // tally defines the requested tally. + TallyResult tally = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1beta1/tx.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1beta1/tx.proto new file mode 100644 index 00000000000..9de763be360 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/gov/v1beta1/tx.proto @@ -0,0 +1,134 @@ +syntax = "proto3"; +package cosmos.gov.v1beta1; + +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/gov/v1beta1/gov.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; +import "google/protobuf/any.proto"; +import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"; + +// Msg defines the gov Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // SubmitProposal defines a method to create new proposal given a content. + rpc SubmitProposal(MsgSubmitProposal) returns (MsgSubmitProposalResponse); + + // Vote defines a method to add a vote on a specific proposal. + rpc Vote(MsgVote) returns (MsgVoteResponse); + + // VoteWeighted defines a method to add a weighted vote on a specific proposal. + // + // Since: cosmos-sdk 0.43 + rpc VoteWeighted(MsgVoteWeighted) returns (MsgVoteWeightedResponse); + + // Deposit defines a method to add deposit on a specific proposal. + rpc Deposit(MsgDeposit) returns (MsgDepositResponse); +} + +// MsgSubmitProposal defines an sdk.Msg type that supports submitting arbitrary +// proposal Content. +message MsgSubmitProposal { + option (cosmos.msg.v1.signer) = "proposer"; + option (amino.name) = "cosmos-sdk/MsgSubmitProposal"; + + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // content is the proposal's content. + google.protobuf.Any content = 1 [(cosmos_proto.accepts_interface) = "cosmos.gov.v1beta1.Content"]; + + // initial_deposit is the deposit value that must be paid at proposal submission. + repeated cosmos.base.v1beta1.Coin initial_deposit = 2 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + + // proposer is the account address of the proposer. + string proposer = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// MsgSubmitProposalResponse defines the Msg/SubmitProposal response type. +message MsgSubmitProposalResponse { + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1 [(gogoproto.jsontag) = "proposal_id", (amino.dont_omitempty) = true]; +} + +// MsgVote defines a message to cast a vote. +message MsgVote { + option (cosmos.msg.v1.signer) = "voter"; + option (amino.name) = "cosmos-sdk/MsgVote"; + + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1; + + // voter is the voter address for the proposal. + string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // option defines the vote option. + VoteOption option = 3; +} + +// MsgVoteResponse defines the Msg/Vote response type. +message MsgVoteResponse {} + +// MsgVoteWeighted defines a message to cast a vote. +// +// Since: cosmos-sdk 0.43 +message MsgVoteWeighted { + option (cosmos.msg.v1.signer) = "voter"; + option (amino.name) = "cosmos-sdk/MsgVoteWeighted"; + + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1 [(gogoproto.jsontag) = "proposal_id", (amino.dont_omitempty) = true]; + + // voter is the voter address for the proposal. + string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // options defines the weighted vote options. + repeated WeightedVoteOption options = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// MsgVoteWeightedResponse defines the Msg/VoteWeighted response type. +// +// Since: cosmos-sdk 0.43 +message MsgVoteWeightedResponse {} + +// MsgDeposit defines a message to submit a deposit to an existing proposal. +message MsgDeposit { + option (cosmos.msg.v1.signer) = "depositor"; + option (amino.name) = "cosmos-sdk/MsgDeposit"; + + option (gogoproto.equal) = false; + option (gogoproto.stringer) = false; + option (gogoproto.goproto_getters) = false; + + // proposal_id defines the unique id of the proposal. + uint64 proposal_id = 1 [(gogoproto.jsontag) = "proposal_id", (amino.dont_omitempty) = true]; + + // depositor defines the deposit addresses from the proposals. + string depositor = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // amount to be deposited by depositor. + repeated cosmos.base.v1beta1.Coin amount = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +// MsgDepositResponse defines the Msg/Deposit response type. +message MsgDepositResponse {} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/group/module/v1/module.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/group/module/v1/module.proto new file mode 100644 index 00000000000..d1e7ffb206f --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/group/module/v1/module.proto @@ -0,0 +1,24 @@ +syntax = "proto3"; + +package cosmos.group.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; +import "gogoproto/gogo.proto"; +import "google/protobuf/duration.proto"; +import "amino/amino.proto"; + +// Module is the config object of the group module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/group" + }; + + // max_execution_period defines the max duration after a proposal's voting period ends that members can send a MsgExec + // to execute the proposal. + google.protobuf.Duration max_execution_period = 1 + [(gogoproto.stdduration) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // max_metadata_len defines the max length of the metadata bytes field for various entities within the group module. + // Defaults to 255 if not explicitly set. + uint64 max_metadata_len = 2; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/group/v1/events.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/group/v1/events.proto new file mode 100644 index 00000000000..2b98ec9abc3 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/group/v1/events.proto @@ -0,0 +1,94 @@ +// Since: cosmos-sdk 0.46 +syntax = "proto3"; + +package cosmos.group.v1; + +import "cosmos_proto/cosmos.proto"; +import "cosmos/group/v1/types.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/group"; + +// EventCreateGroup is an event emitted when a group is created. +message EventCreateGroup { + + // group_id is the unique ID of the group. + uint64 group_id = 1; +} + +// EventUpdateGroup is an event emitted when a group is updated. +message EventUpdateGroup { + + // group_id is the unique ID of the group. + uint64 group_id = 1; +} + +// EventCreateGroupPolicy is an event emitted when a group policy is created. +message EventCreateGroupPolicy { + + // address is the account address of the group policy. + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// EventUpdateGroupPolicy is an event emitted when a group policy is updated. +message EventUpdateGroupPolicy { + + // address is the account address of the group policy. + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// EventSubmitProposal is an event emitted when a proposal is created. +message EventSubmitProposal { + + // proposal_id is the unique ID of the proposal. + uint64 proposal_id = 1; +} + +// EventWithdrawProposal is an event emitted when a proposal is withdrawn. +message EventWithdrawProposal { + + // proposal_id is the unique ID of the proposal. + uint64 proposal_id = 1; +} + +// EventVote is an event emitted when a voter votes on a proposal. +message EventVote { + + // proposal_id is the unique ID of the proposal. + uint64 proposal_id = 1; +} + +// EventExec is an event emitted when a proposal is executed. +message EventExec { + + // proposal_id is the unique ID of the proposal. + uint64 proposal_id = 1; + + // result is the proposal execution result. + ProposalExecutorResult result = 2; + + // logs contains error logs in case the execution result is FAILURE. + string logs = 3; +} + +// EventLeaveGroup is an event emitted when group member leaves the group. +message EventLeaveGroup { + + // group_id is the unique ID of the group. + uint64 group_id = 1; + + // address is the account address of the group member. + string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// EventProposalPruned is an event emitted when a proposal is pruned. +message EventProposalPruned { + + // proposal_id is the unique ID of the proposal. + uint64 proposal_id = 1; + + // status is the proposal status (UNSPECIFIED, SUBMITTED, ACCEPTED, REJECTED, ABORTED, WITHDRAWN). + ProposalStatus status = 2; + + // tally_result is the proposal tally result (when applicable). + TallyResult tally_result = 3; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/group/v1/genesis.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/group/v1/genesis.proto new file mode 100644 index 00000000000..e4c895e96ee --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/group/v1/genesis.proto @@ -0,0 +1,39 @@ +// Since: cosmos-sdk 0.46 +syntax = "proto3"; + +package cosmos.group.v1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/group"; + +import "cosmos/group/v1/types.proto"; + +// GenesisState defines the group module's genesis state. +message GenesisState { + + // group_seq is the group table orm.Sequence, + // it is used to get the next group ID. + uint64 group_seq = 1; + + // groups is the list of groups info. + repeated GroupInfo groups = 2; + + // group_members is the list of groups members. + repeated GroupMember group_members = 3; + + // group_policy_seq is the group policy table orm.Sequence, + // it is used to generate the next group policy account address. + uint64 group_policy_seq = 4; + + // group_policies is the list of group policies info. + repeated GroupPolicyInfo group_policies = 5; + + // proposal_seq is the proposal table orm.Sequence, + // it is used to get the next proposal ID. + uint64 proposal_seq = 6; + + // proposals is the list of proposals. + repeated Proposal proposals = 7; + + // votes is the list of votes. + repeated Vote votes = 8; +} \ No newline at end of file diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/group/v1/query.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/group/v1/query.proto new file mode 100644 index 00000000000..80b09255afe --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/group/v1/query.proto @@ -0,0 +1,320 @@ +// Since: cosmos-sdk 0.46 +syntax = "proto3"; + +package cosmos.group.v1; + +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "cosmos/group/v1/types.proto"; +import "cosmos/base/query/v1beta1/pagination.proto"; +import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/group"; + +// Query is the cosmos.group.v1 Query service. +service Query { + + // GroupInfo queries group info based on group id. + rpc GroupInfo(QueryGroupInfoRequest) returns (QueryGroupInfoResponse) { + option (google.api.http).get = "/cosmos/group/v1/group_info/{group_id}"; + }; + + // GroupPolicyInfo queries group policy info based on account address of group policy. + rpc GroupPolicyInfo(QueryGroupPolicyInfoRequest) returns (QueryGroupPolicyInfoResponse) { + option (google.api.http).get = "/cosmos/group/v1/group_policy_info/{address}"; + }; + + // GroupMembers queries members of a group by group id. + rpc GroupMembers(QueryGroupMembersRequest) returns (QueryGroupMembersResponse) { + option (google.api.http).get = "/cosmos/group/v1/group_members/{group_id}"; + }; + + // GroupsByAdmin queries groups by admin address. + rpc GroupsByAdmin(QueryGroupsByAdminRequest) returns (QueryGroupsByAdminResponse) { + option (google.api.http).get = "/cosmos/group/v1/groups_by_admin/{admin}"; + }; + + // GroupPoliciesByGroup queries group policies by group id. + rpc GroupPoliciesByGroup(QueryGroupPoliciesByGroupRequest) returns (QueryGroupPoliciesByGroupResponse) { + option (google.api.http).get = "/cosmos/group/v1/group_policies_by_group/{group_id}"; + }; + + // GroupPoliciesByAdmin queries group policies by admin address. + rpc GroupPoliciesByAdmin(QueryGroupPoliciesByAdminRequest) returns (QueryGroupPoliciesByAdminResponse) { + option (google.api.http).get = "/cosmos/group/v1/group_policies_by_admin/{admin}"; + }; + + // Proposal queries a proposal based on proposal id. + rpc Proposal(QueryProposalRequest) returns (QueryProposalResponse) { + option (google.api.http).get = "/cosmos/group/v1/proposal/{proposal_id}"; + }; + + // ProposalsByGroupPolicy queries proposals based on account address of group policy. + rpc ProposalsByGroupPolicy(QueryProposalsByGroupPolicyRequest) returns (QueryProposalsByGroupPolicyResponse) { + option (google.api.http).get = "/cosmos/group/v1/proposals_by_group_policy/{address}"; + }; + + // VoteByProposalVoter queries a vote by proposal id and voter. + rpc VoteByProposalVoter(QueryVoteByProposalVoterRequest) returns (QueryVoteByProposalVoterResponse) { + option (google.api.http).get = "/cosmos/group/v1/vote_by_proposal_voter/{proposal_id}/{voter}"; + }; + + // VotesByProposal queries a vote by proposal id. + rpc VotesByProposal(QueryVotesByProposalRequest) returns (QueryVotesByProposalResponse) { + option (google.api.http).get = "/cosmos/group/v1/votes_by_proposal/{proposal_id}"; + }; + + // VotesByVoter queries a vote by voter. + rpc VotesByVoter(QueryVotesByVoterRequest) returns (QueryVotesByVoterResponse) { + option (google.api.http).get = "/cosmos/group/v1/votes_by_voter/{voter}"; + }; + + // GroupsByMember queries groups by member address. + rpc GroupsByMember(QueryGroupsByMemberRequest) returns (QueryGroupsByMemberResponse) { + option (google.api.http).get = "/cosmos/group/v1/groups_by_member/{address}"; + }; + + // TallyResult returns the tally result of a proposal. If the proposal is + // still in voting period, then this query computes the current tally state, + // which might not be final. On the other hand, if the proposal is final, + // then it simply returns the `final_tally_result` state stored in the + // proposal itself. + rpc TallyResult(QueryTallyResultRequest) returns (QueryTallyResultResponse) { + option (google.api.http).get = "/cosmos/group/v1/proposals/{proposal_id}/tally"; + }; + + // Groups queries all groups in state. + // + // Since: cosmos-sdk 0.47.1 + rpc Groups(QueryGroupsRequest) returns (QueryGroupsResponse) { + option (google.api.http).get = "/cosmos/group/v1/groups"; + }; +} + +// QueryGroupInfoRequest is the Query/GroupInfo request type. +message QueryGroupInfoRequest { + // group_id is the unique ID of the group. + uint64 group_id = 1; +} + +// QueryGroupInfoResponse is the Query/GroupInfo response type. +message QueryGroupInfoResponse { + // info is the GroupInfo of the group. + GroupInfo info = 1; +} + +// QueryGroupPolicyInfoRequest is the Query/GroupPolicyInfo request type. +message QueryGroupPolicyInfoRequest { + // address is the account address of the group policy. + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// QueryGroupPolicyInfoResponse is the Query/GroupPolicyInfo response type. +message QueryGroupPolicyInfoResponse { + // info is the GroupPolicyInfo of the group policy. + GroupPolicyInfo info = 1; +} + +// QueryGroupMembersRequest is the Query/GroupMembers request type. +message QueryGroupMembersRequest { + // group_id is the unique ID of the group. + uint64 group_id = 1; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryGroupMembersResponse is the Query/GroupMembersResponse response type. +message QueryGroupMembersResponse { + // members are the members of the group with given group_id. + repeated GroupMember members = 1; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryGroupsByAdminRequest is the Query/GroupsByAdmin request type. +message QueryGroupsByAdminRequest { + // admin is the account address of a group's admin. + string admin = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryGroupsByAdminResponse is the Query/GroupsByAdminResponse response type. +message QueryGroupsByAdminResponse { + // groups are the groups info with the provided admin. + repeated GroupInfo groups = 1; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryGroupPoliciesByGroupRequest is the Query/GroupPoliciesByGroup request type. +message QueryGroupPoliciesByGroupRequest { + // group_id is the unique ID of the group policy's group. + uint64 group_id = 1; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryGroupPoliciesByGroupResponse is the Query/GroupPoliciesByGroup response type. +message QueryGroupPoliciesByGroupResponse { + // group_policies are the group policies info associated with the provided group. + repeated GroupPolicyInfo group_policies = 1; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryGroupPoliciesByAdminRequest is the Query/GroupPoliciesByAdmin request type. +message QueryGroupPoliciesByAdminRequest { + // admin is the admin address of the group policy. + string admin = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryGroupPoliciesByAdminResponse is the Query/GroupPoliciesByAdmin response type. +message QueryGroupPoliciesByAdminResponse { + // group_policies are the group policies info with provided admin. + repeated GroupPolicyInfo group_policies = 1; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryProposalRequest is the Query/Proposal request type. +message QueryProposalRequest { + // proposal_id is the unique ID of a proposal. + uint64 proposal_id = 1; +} + +// QueryProposalResponse is the Query/Proposal response type. +message QueryProposalResponse { + // proposal is the proposal info. + Proposal proposal = 1; +} + +// QueryProposalsByGroupPolicyRequest is the Query/ProposalByGroupPolicy request type. +message QueryProposalsByGroupPolicyRequest { + // address is the account address of the group policy related to proposals. + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryProposalsByGroupPolicyResponse is the Query/ProposalByGroupPolicy response type. +message QueryProposalsByGroupPolicyResponse { + // proposals are the proposals with given group policy. + repeated Proposal proposals = 1; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryVoteByProposalVoterRequest is the Query/VoteByProposalVoter request type. +message QueryVoteByProposalVoterRequest { + // proposal_id is the unique ID of a proposal. + uint64 proposal_id = 1; + + // voter is a proposal voter account address. + string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// QueryVoteByProposalVoterResponse is the Query/VoteByProposalVoter response type. +message QueryVoteByProposalVoterResponse { + // vote is the vote with given proposal_id and voter. + Vote vote = 1; +} + +// QueryVotesByProposalRequest is the Query/VotesByProposal request type. +message QueryVotesByProposalRequest { + // proposal_id is the unique ID of a proposal. + uint64 proposal_id = 1; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryVotesByProposalResponse is the Query/VotesByProposal response type. +message QueryVotesByProposalResponse { + // votes are the list of votes for given proposal_id. + repeated Vote votes = 1; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryVotesByVoterRequest is the Query/VotesByVoter request type. +message QueryVotesByVoterRequest { + // voter is a proposal voter account address. + string voter = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryVotesByVoterResponse is the Query/VotesByVoter response type. +message QueryVotesByVoterResponse { + // votes are the list of votes by given voter. + repeated Vote votes = 1; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryGroupsByMemberRequest is the Query/GroupsByMember request type. +message QueryGroupsByMemberRequest { + // address is the group member address. + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryGroupsByMemberResponse is the Query/GroupsByMember response type. +message QueryGroupsByMemberResponse { + // groups are the groups info with the provided group member. + repeated GroupInfo groups = 1; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryTallyResultRequest is the Query/TallyResult request type. +message QueryTallyResultRequest { + // proposal_id is the unique id of a proposal. + uint64 proposal_id = 1; +} + +// QueryTallyResultResponse is the Query/TallyResult response type. +message QueryTallyResultResponse { + // tally defines the requested tally. + TallyResult tally = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// QueryGroupsRequest is the Query/Groups request type. +// +// Since: cosmos-sdk 0.47.1 +message QueryGroupsRequest { + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryGroupsResponse is the Query/Groups response type. +// +// Since: cosmos-sdk 0.47.1 +message QueryGroupsResponse { + // `groups` is all the groups present in state. + repeated GroupInfo groups = 1; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/group/v1/tx.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/group/v1/tx.proto new file mode 100644 index 00000000000..5a5f028bb36 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/group/v1/tx.proto @@ -0,0 +1,394 @@ +// Since: cosmos-sdk 0.46 +syntax = "proto3"; + +package cosmos.group.v1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/group"; + +import "gogoproto/gogo.proto"; +import "cosmos_proto/cosmos.proto"; +import "google/protobuf/any.proto"; +import "cosmos/group/v1/types.proto"; +import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; + +// Msg is the cosmos.group.v1 Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // CreateGroup creates a new group with an admin account address, a list of members and some optional metadata. + rpc CreateGroup(MsgCreateGroup) returns (MsgCreateGroupResponse); + + // UpdateGroupMembers updates the group members with given group id and admin address. + rpc UpdateGroupMembers(MsgUpdateGroupMembers) returns (MsgUpdateGroupMembersResponse); + + // UpdateGroupAdmin updates the group admin with given group id and previous admin address. + rpc UpdateGroupAdmin(MsgUpdateGroupAdmin) returns (MsgUpdateGroupAdminResponse); + + // UpdateGroupMetadata updates the group metadata with given group id and admin address. + rpc UpdateGroupMetadata(MsgUpdateGroupMetadata) returns (MsgUpdateGroupMetadataResponse); + + // CreateGroupPolicy creates a new group policy using given DecisionPolicy. + rpc CreateGroupPolicy(MsgCreateGroupPolicy) returns (MsgCreateGroupPolicyResponse); + + // CreateGroupWithPolicy creates a new group with policy. + rpc CreateGroupWithPolicy(MsgCreateGroupWithPolicy) returns (MsgCreateGroupWithPolicyResponse); + + // UpdateGroupPolicyAdmin updates a group policy admin. + rpc UpdateGroupPolicyAdmin(MsgUpdateGroupPolicyAdmin) returns (MsgUpdateGroupPolicyAdminResponse); + + // UpdateGroupPolicyDecisionPolicy allows a group policy's decision policy to be updated. + rpc UpdateGroupPolicyDecisionPolicy(MsgUpdateGroupPolicyDecisionPolicy) + returns (MsgUpdateGroupPolicyDecisionPolicyResponse); + + // UpdateGroupPolicyMetadata updates a group policy metadata. + rpc UpdateGroupPolicyMetadata(MsgUpdateGroupPolicyMetadata) returns (MsgUpdateGroupPolicyMetadataResponse); + + // SubmitProposal submits a new proposal. + rpc SubmitProposal(MsgSubmitProposal) returns (MsgSubmitProposalResponse); + + // WithdrawProposal withdraws a proposal. + rpc WithdrawProposal(MsgWithdrawProposal) returns (MsgWithdrawProposalResponse); + + // Vote allows a voter to vote on a proposal. + rpc Vote(MsgVote) returns (MsgVoteResponse); + + // Exec executes a proposal. + rpc Exec(MsgExec) returns (MsgExecResponse); + + // LeaveGroup allows a group member to leave the group. + rpc LeaveGroup(MsgLeaveGroup) returns (MsgLeaveGroupResponse); +} + +// +// Groups +// + +// MsgCreateGroup is the Msg/CreateGroup request type. +message MsgCreateGroup { + option (cosmos.msg.v1.signer) = "admin"; + option (amino.name) = "cosmos-sdk/MsgCreateGroup"; + + // admin is the account address of the group admin. + string admin = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // members defines the group members. + repeated MemberRequest members = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // metadata is any arbitrary metadata to attached to the group. + string metadata = 3; +} + +// MsgCreateGroupResponse is the Msg/CreateGroup response type. +message MsgCreateGroupResponse { + // group_id is the unique ID of the newly created group. + uint64 group_id = 1; +} + +// MsgUpdateGroupMembers is the Msg/UpdateGroupMembers request type. +message MsgUpdateGroupMembers { + option (cosmos.msg.v1.signer) = "admin"; + option (amino.name) = "cosmos-sdk/MsgUpdateGroupMembers"; + + // admin is the account address of the group admin. + string admin = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // group_id is the unique ID of the group. + uint64 group_id = 2; + + // member_updates is the list of members to update, + // set weight to 0 to remove a member. + repeated MemberRequest member_updates = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// MsgUpdateGroupMembersResponse is the Msg/UpdateGroupMembers response type. +message MsgUpdateGroupMembersResponse {} + +// MsgUpdateGroupAdmin is the Msg/UpdateGroupAdmin request type. +message MsgUpdateGroupAdmin { + option (cosmos.msg.v1.signer) = "admin"; + option (amino.name) = "cosmos-sdk/MsgUpdateGroupAdmin"; + + // admin is the current account address of the group admin. + string admin = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // group_id is the unique ID of the group. + uint64 group_id = 2; + + // new_admin is the group new admin account address. + string new_admin = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// MsgUpdateGroupAdminResponse is the Msg/UpdateGroupAdmin response type. +message MsgUpdateGroupAdminResponse {} + +// MsgUpdateGroupMetadata is the Msg/UpdateGroupMetadata request type. +message MsgUpdateGroupMetadata { + option (cosmos.msg.v1.signer) = "admin"; + option (amino.name) = "cosmos-sdk/MsgUpdateGroupMetadata"; + + // admin is the account address of the group admin. + string admin = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // group_id is the unique ID of the group. + uint64 group_id = 2; + + // metadata is the updated group's metadata. + string metadata = 3; +} + +// MsgUpdateGroupMetadataResponse is the Msg/UpdateGroupMetadata response type. +message MsgUpdateGroupMetadataResponse {} + +// +// Group Policies +// + +// MsgCreateGroupPolicy is the Msg/CreateGroupPolicy request type. +message MsgCreateGroupPolicy { + option (cosmos.msg.v1.signer) = "admin"; + option (amino.name) = "cosmos-sdk/MsgCreateGroupPolicy"; + + option (gogoproto.goproto_getters) = false; + + // admin is the account address of the group admin. + string admin = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // group_id is the unique ID of the group. + uint64 group_id = 2; + + // metadata is any arbitrary metadata attached to the group policy. + string metadata = 3; + + // decision_policy specifies the group policy's decision policy. + google.protobuf.Any decision_policy = 4 [(cosmos_proto.accepts_interface) = "cosmos.group.v1.DecisionPolicy"]; +} + +// MsgCreateGroupPolicyResponse is the Msg/CreateGroupPolicy response type. +message MsgCreateGroupPolicyResponse { + // address is the account address of the newly created group policy. + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// MsgUpdateGroupPolicyAdmin is the Msg/UpdateGroupPolicyAdmin request type. +message MsgUpdateGroupPolicyAdmin { + option (cosmos.msg.v1.signer) = "admin"; + option (amino.name) = "cosmos-sdk/MsgUpdateGroupPolicyAdmin"; + + // admin is the account address of the group admin. + string admin = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // group_policy_address is the account address of the group policy. + string group_policy_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // new_admin is the new group policy admin. + string new_admin = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// MsgUpdateGroupPolicyAdminResponse is the Msg/UpdateGroupPolicyAdmin response type. +message MsgUpdateGroupPolicyAdminResponse {} + +// MsgCreateGroupWithPolicy is the Msg/CreateGroupWithPolicy request type. +message MsgCreateGroupWithPolicy { + option (cosmos.msg.v1.signer) = "admin"; + option (amino.name) = "cosmos-sdk/MsgCreateGroupWithPolicy"; + option (gogoproto.goproto_getters) = false; + + // admin is the account address of the group and group policy admin. + string admin = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // members defines the group members. + repeated MemberRequest members = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // group_metadata is any arbitrary metadata attached to the group. + string group_metadata = 3; + + // group_policy_metadata is any arbitrary metadata attached to the group policy. + string group_policy_metadata = 4; + + // group_policy_as_admin is a boolean field, if set to true, the group policy account address will be used as group + // and group policy admin. + bool group_policy_as_admin = 5; + + // decision_policy specifies the group policy's decision policy. + google.protobuf.Any decision_policy = 6 [(cosmos_proto.accepts_interface) = "cosmos.group.v1.DecisionPolicy"]; +} + +// MsgCreateGroupWithPolicyResponse is the Msg/CreateGroupWithPolicy response type. +message MsgCreateGroupWithPolicyResponse { + // group_id is the unique ID of the newly created group with policy. + uint64 group_id = 1; + + // group_policy_address is the account address of the newly created group policy. + string group_policy_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// MsgUpdateGroupPolicyDecisionPolicy is the Msg/UpdateGroupPolicyDecisionPolicy request type. +message MsgUpdateGroupPolicyDecisionPolicy { + option (cosmos.msg.v1.signer) = "admin"; + option (amino.name) = "cosmos-sdk/MsgUpdateGroupDecisionPolicy"; + + option (gogoproto.goproto_getters) = false; + + // admin is the account address of the group admin. + string admin = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // group_policy_address is the account address of group policy. + string group_policy_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // decision_policy is the updated group policy's decision policy. + google.protobuf.Any decision_policy = 3 [(cosmos_proto.accepts_interface) = "cosmos.group.v1.DecisionPolicy"]; +} + +// MsgUpdateGroupPolicyDecisionPolicyResponse is the Msg/UpdateGroupPolicyDecisionPolicy response type. +message MsgUpdateGroupPolicyDecisionPolicyResponse {} + +// MsgUpdateGroupPolicyMetadata is the Msg/UpdateGroupPolicyMetadata request type. +message MsgUpdateGroupPolicyMetadata { + option (cosmos.msg.v1.signer) = "admin"; + option (amino.name) = "cosmos-sdk/MsgUpdateGroupPolicyMetadata"; + + // admin is the account address of the group admin. + string admin = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // group_policy_address is the account address of group policy. + string group_policy_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // metadata is the group policy metadata to be updated. + string metadata = 3; +} + +// MsgUpdateGroupPolicyMetadataResponse is the Msg/UpdateGroupPolicyMetadata response type. +message MsgUpdateGroupPolicyMetadataResponse {} + +// +// Proposals and Voting +// + +// Exec defines modes of execution of a proposal on creation or on new vote. +enum Exec { + // An empty value means that there should be a separate + // MsgExec request for the proposal to execute. + EXEC_UNSPECIFIED = 0; + + // Try to execute the proposal immediately. + // If the proposal is not allowed per the DecisionPolicy, + // the proposal will still be open and could + // be executed at a later point. + EXEC_TRY = 1; +} + +// MsgSubmitProposal is the Msg/SubmitProposal request type. +message MsgSubmitProposal { + option (cosmos.msg.v1.signer) = "proposers"; + option (amino.name) = "cosmos-sdk/group/MsgSubmitProposal"; + + option (gogoproto.goproto_getters) = false; + + // group_policy_address is the account address of group policy. + string group_policy_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // proposers are the account addresses of the proposers. + // Proposers signatures will be counted as yes votes. + repeated string proposers = 2; + + // metadata is any arbitrary metadata attached to the proposal. + string metadata = 3; + + // messages is a list of `sdk.Msg`s that will be executed if the proposal passes. + repeated google.protobuf.Any messages = 4; + + // exec defines the mode of execution of the proposal, + // whether it should be executed immediately on creation or not. + // If so, proposers signatures are considered as Yes votes. + Exec exec = 5; + + // title is the title of the proposal. + // + // Since: cosmos-sdk 0.47 + string title = 6; + + // summary is the summary of the proposal. + // + // Since: cosmos-sdk 0.47 + string summary = 7; +} + +// MsgSubmitProposalResponse is the Msg/SubmitProposal response type. +message MsgSubmitProposalResponse { + // proposal is the unique ID of the proposal. + uint64 proposal_id = 1; +} + +// MsgWithdrawProposal is the Msg/WithdrawProposal request type. +message MsgWithdrawProposal { + option (cosmos.msg.v1.signer) = "address"; + option (amino.name) = "cosmos-sdk/group/MsgWithdrawProposal"; + + // proposal is the unique ID of the proposal. + uint64 proposal_id = 1; + + // address is the admin of the group policy or one of the proposer of the proposal. + string address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// MsgWithdrawProposalResponse is the Msg/WithdrawProposal response type. +message MsgWithdrawProposalResponse {} + +// MsgVote is the Msg/Vote request type. +message MsgVote { + option (cosmos.msg.v1.signer) = "voter"; + option (amino.name) = "cosmos-sdk/group/MsgVote"; + + // proposal is the unique ID of the proposal. + uint64 proposal_id = 1; + + // voter is the voter account address. + string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // option is the voter's choice on the proposal. + VoteOption option = 3; + + // metadata is any arbitrary metadata attached to the vote. + string metadata = 4; + + // exec defines whether the proposal should be executed + // immediately after voting or not. + Exec exec = 5; +} + +// MsgVoteResponse is the Msg/Vote response type. +message MsgVoteResponse {} + +// MsgExec is the Msg/Exec request type. +message MsgExec { + option (cosmos.msg.v1.signer) = "executor"; + option (amino.name) = "cosmos-sdk/group/MsgExec"; + + // proposal is the unique ID of the proposal. + uint64 proposal_id = 1; + + // executor is the account address used to execute the proposal. + string executor = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// MsgExecResponse is the Msg/Exec request type. +message MsgExecResponse { + // result is the final result of the proposal execution. + ProposalExecutorResult result = 2; +} + +// MsgLeaveGroup is the Msg/LeaveGroup request type. +message MsgLeaveGroup { + option (cosmos.msg.v1.signer) = "address"; + option (amino.name) = "cosmos-sdk/group/MsgLeaveGroup"; + + // address is the account address of the group member. + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // group_id is the unique ID of the group. + uint64 group_id = 2; +} + +// MsgLeaveGroupResponse is the Msg/LeaveGroup response type. +message MsgLeaveGroupResponse {} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/group/v1/types.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/group/v1/types.proto new file mode 100644 index 00000000000..97af45fff7a --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/group/v1/types.proto @@ -0,0 +1,339 @@ +// Since: cosmos-sdk 0.46 +syntax = "proto3"; + +package cosmos.group.v1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/group"; + +import "gogoproto/gogo.proto"; +import "google/protobuf/duration.proto"; +import "google/protobuf/timestamp.proto"; +import "cosmos_proto/cosmos.proto"; +import "google/protobuf/any.proto"; +import "amino/amino.proto"; + +// Member represents a group member with an account address, +// non-zero weight, metadata and added_at timestamp. +message Member { + // address is the member's account address. + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // weight is the member's voting weight that should be greater than 0. + string weight = 2; + + // metadata is any arbitrary metadata attached to the member. + string metadata = 3; + + // added_at is a timestamp specifying when a member was added. + google.protobuf.Timestamp added_at = 4 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; +} + +// MemberRequest represents a group member to be used in Msg server requests. +// Contrary to `Member`, it doesn't have any `added_at` field +// since this field cannot be set as part of requests. +message MemberRequest { + // address is the member's account address. + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // weight is the member's voting weight that should be greater than 0. + string weight = 2; + + // metadata is any arbitrary metadata attached to the member. + string metadata = 3; +} + +// ThresholdDecisionPolicy is a decision policy where a proposal passes when it +// satisfies the two following conditions: +// 1. The sum of all `YES` voter's weights is greater or equal than the defined +// `threshold`. +// 2. The voting and execution periods of the proposal respect the parameters +// given by `windows`. +message ThresholdDecisionPolicy { + option (cosmos_proto.implements_interface) = "cosmos.group.v1.DecisionPolicy"; + option (amino.name) = "cosmos-sdk/ThresholdDecisionPolicy"; + + // threshold is the minimum weighted sum of `YES` votes that must be met or + // exceeded for a proposal to succeed. + string threshold = 1; + + // windows defines the different windows for voting and execution. + DecisionPolicyWindows windows = 2; +} + +// PercentageDecisionPolicy is a decision policy where a proposal passes when +// it satisfies the two following conditions: +// 1. The percentage of all `YES` voters' weights out of the total group weight +// is greater or equal than the given `percentage`. +// 2. The voting and execution periods of the proposal respect the parameters +// given by `windows`. +message PercentageDecisionPolicy { + option (cosmos_proto.implements_interface) = "cosmos.group.v1.DecisionPolicy"; + option (amino.name) = "cosmos-sdk/PercentageDecisionPolicy"; + + // percentage is the minimum percentage of the weighted sum of `YES` votes must + // meet for a proposal to succeed. + string percentage = 1; + + // windows defines the different windows for voting and execution. + DecisionPolicyWindows windows = 2; +} + +// DecisionPolicyWindows defines the different windows for voting and execution. +message DecisionPolicyWindows { + // voting_period is the duration from submission of a proposal to the end of voting period + // Within this times votes can be submitted with MsgVote. + google.protobuf.Duration voting_period = 1 + [(gogoproto.stdduration) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // min_execution_period is the minimum duration after the proposal submission + // where members can start sending MsgExec. This means that the window for + // sending a MsgExec transaction is: + // `[ submission + min_execution_period ; submission + voting_period + max_execution_period]` + // where max_execution_period is a app-specific config, defined in the keeper. + // If not set, min_execution_period will default to 0. + // + // Please make sure to set a `min_execution_period` that is smaller than + // `voting_period + max_execution_period`, or else the above execution window + // is empty, meaning that all proposals created with this decision policy + // won't be able to be executed. + google.protobuf.Duration min_execution_period = 2 + [(gogoproto.stdduration) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// VoteOption enumerates the valid vote options for a given proposal. +enum VoteOption { + option (gogoproto.goproto_enum_prefix) = false; + + // VOTE_OPTION_UNSPECIFIED defines an unspecified vote option which will + // return an error. + VOTE_OPTION_UNSPECIFIED = 0; + // VOTE_OPTION_YES defines a yes vote option. + VOTE_OPTION_YES = 1; + // VOTE_OPTION_ABSTAIN defines an abstain vote option. + VOTE_OPTION_ABSTAIN = 2; + // VOTE_OPTION_NO defines a no vote option. + VOTE_OPTION_NO = 3; + // VOTE_OPTION_NO_WITH_VETO defines a no with veto vote option. + VOTE_OPTION_NO_WITH_VETO = 4; +} + +// +// State +// + +// GroupInfo represents the high-level on-chain information for a group. +message GroupInfo { + // id is the unique ID of the group. + uint64 id = 1; + + // admin is the account address of the group's admin. + string admin = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // metadata is any arbitrary metadata to attached to the group. + // the recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/group#group-1 + string metadata = 3; + + // version is used to track changes to a group's membership structure that + // would break existing proposals. Whenever any members weight is changed, + // or any member is added or removed this version is incremented and will + // cause proposals based on older versions of this group to fail + uint64 version = 4; + + // total_weight is the sum of the group members' weights. + string total_weight = 5; + + // created_at is a timestamp specifying when a group was created. + google.protobuf.Timestamp created_at = 6 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; +} + +// GroupMember represents the relationship between a group and a member. +message GroupMember { + // group_id is the unique ID of the group. + uint64 group_id = 1; + + // member is the member data. + Member member = 2; +} + +// GroupPolicyInfo represents the high-level on-chain information for a group policy. +message GroupPolicyInfo { + option (gogoproto.equal) = true; + option (gogoproto.goproto_getters) = false; + + // address is the account address of group policy. + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // group_id is the unique ID of the group. + uint64 group_id = 2; + + // admin is the account address of the group admin. + string admin = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // metadata is any arbitrary metadata attached to the group policy. + // the recommended format of the metadata is to be found here: + // https://docs.cosmos.network/v0.47/modules/group#decision-policy-1 + string metadata = 4; + + // version is used to track changes to a group's GroupPolicyInfo structure that + // would create a different result on a running proposal. + uint64 version = 5; + + // decision_policy specifies the group policy's decision policy. + google.protobuf.Any decision_policy = 6 [(cosmos_proto.accepts_interface) = "cosmos.group.v1.DecisionPolicy"]; + + // created_at is a timestamp specifying when a group policy was created. + google.protobuf.Timestamp created_at = 7 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; +} + +// Proposal defines a group proposal. Any member of a group can submit a proposal +// for a group policy to decide upon. +// A proposal consists of a set of `sdk.Msg`s that will be executed if the proposal +// passes as well as some optional metadata associated with the proposal. +message Proposal { + option (gogoproto.goproto_getters) = false; + + // id is the unique id of the proposal. + uint64 id = 1; + + // group_policy_address is the account address of group policy. + string group_policy_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // metadata is any arbitrary metadata attached to the proposal. + // the recommended format of the metadata is to be found here: + // https://docs.cosmos.network/v0.47/modules/group#proposal-4 + string metadata = 3; + + // proposers are the account addresses of the proposers. + repeated string proposers = 4 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // submit_time is a timestamp specifying when a proposal was submitted. + google.protobuf.Timestamp submit_time = 5 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; + + // group_version tracks the version of the group at proposal submission. + // This field is here for informational purposes only. + uint64 group_version = 6; + + // group_policy_version tracks the version of the group policy at proposal submission. + // When a decision policy is changed, existing proposals from previous policy + // versions will become invalid with the `ABORTED` status. + // This field is here for informational purposes only. + uint64 group_policy_version = 7; + + // status represents the high level position in the life cycle of the proposal. Initial value is Submitted. + ProposalStatus status = 8; + + // final_tally_result contains the sums of all weighted votes for this + // proposal for each vote option. It is empty at submission, and only + // populated after tallying, at voting period end or at proposal execution, + // whichever happens first. + TallyResult final_tally_result = 9 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // voting_period_end is the timestamp before which voting must be done. + // Unless a successful MsgExec is called before (to execute a proposal whose + // tally is successful before the voting period ends), tallying will be done + // at this point, and the `final_tally_result`and `status` fields will be + // accordingly updated. + google.protobuf.Timestamp voting_period_end = 10 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; + + // executor_result is the final result of the proposal execution. Initial value is NotRun. + ProposalExecutorResult executor_result = 11; + + // messages is a list of `sdk.Msg`s that will be executed if the proposal passes. + repeated google.protobuf.Any messages = 12; + + // title is the title of the proposal + // + // Since: cosmos-sdk 0.47 + string title = 13; + + // summary is a short summary of the proposal + // + // Since: cosmos-sdk 0.47 + string summary = 14; +} + +// ProposalStatus defines proposal statuses. +enum ProposalStatus { + option (gogoproto.goproto_enum_prefix) = false; + + // An empty value is invalid and not allowed. + PROPOSAL_STATUS_UNSPECIFIED = 0; + + // Initial status of a proposal when submitted. + PROPOSAL_STATUS_SUBMITTED = 1; + + // Final status of a proposal when the final tally is done and the outcome + // passes the group policy's decision policy. + PROPOSAL_STATUS_ACCEPTED = 2; + + // Final status of a proposal when the final tally is done and the outcome + // is rejected by the group policy's decision policy. + PROPOSAL_STATUS_REJECTED = 3; + + // Final status of a proposal when the group policy is modified before the + // final tally. + PROPOSAL_STATUS_ABORTED = 4; + + // A proposal can be withdrawn before the voting start time by the owner. + // When this happens the final status is Withdrawn. + PROPOSAL_STATUS_WITHDRAWN = 5; +} + +// ProposalExecutorResult defines types of proposal executor results. +enum ProposalExecutorResult { + option (gogoproto.goproto_enum_prefix) = false; + + // An empty value is not allowed. + PROPOSAL_EXECUTOR_RESULT_UNSPECIFIED = 0; + + // We have not yet run the executor. + PROPOSAL_EXECUTOR_RESULT_NOT_RUN = 1; + + // The executor was successful and proposed action updated state. + PROPOSAL_EXECUTOR_RESULT_SUCCESS = 2; + + // The executor returned an error and proposed action didn't update state. + PROPOSAL_EXECUTOR_RESULT_FAILURE = 3; +} + +// TallyResult represents the sum of weighted votes for each vote option. +message TallyResult { + option (gogoproto.goproto_getters) = false; + + // yes_count is the weighted sum of yes votes. + string yes_count = 1; + + // abstain_count is the weighted sum of abstainers. + string abstain_count = 2; + + // no_count is the weighted sum of no votes. + string no_count = 3; + + // no_with_veto_count is the weighted sum of veto. + string no_with_veto_count = 4; +} + +// Vote represents a vote for a proposal.string metadata +message Vote { + // proposal is the unique ID of the proposal. + uint64 proposal_id = 1; + + // voter is the account address of the voter. + string voter = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // option is the voter's choice on the proposal. + VoteOption option = 3; + + // metadata is any arbitrary metadata attached to the vote. + // the recommended format of the metadata is to be found here: https://docs.cosmos.network/v0.47/modules/group#vote-2 + string metadata = 4; + + // submit_time is the timestamp when the vote was submitted. + google.protobuf.Timestamp submit_time = 5 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/ics23/v1/proofs.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/ics23/v1/proofs.proto index 1c8b6ad7992..940f68024ac 100644 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/ics23/v1/proofs.proto +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/ics23/v1/proofs.proto @@ -163,6 +163,7 @@ message ProofSpec { LeafOp leaf_spec = 1; InnerSpec inner_spec = 2; // max_depth (if > 0) is the maximum number of InnerOps allowed (mainly for fixed-depth tries) + // the max_depth is interpreted as 128 if set to 0 int32 max_depth = 3; // min_depth (if > 0) is the minimum number of InnerOps allowed (mainly for fixed-depth tries) int32 min_depth = 4; @@ -189,7 +190,8 @@ message InnerSpec { repeated int32 child_order = 1; int32 child_size = 2; int32 min_prefix_length = 3; - int32 max_prefix_length = 4; + // the max prefix length must be less than the minimum prefix length + child size + int32 max_prefix_length = 4; // empty child is the prehash image that is used when one child is nil (eg. 20 bytes of 0) bytes empty_child = 5; // hash is the algorithm that must be used for each InnerOp diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/mint/module/v1/module.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/mint/module/v1/module.proto new file mode 100644 index 00000000000..2ea1ef3d8fd --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/mint/module/v1/module.proto @@ -0,0 +1,17 @@ +syntax = "proto3"; + +package cosmos.mint.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the mint module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/mint" + }; + + string fee_collector_name = 1; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 2; +} \ No newline at end of file diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/mint/v1beta1/genesis.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/mint/v1beta1/genesis.proto new file mode 100644 index 00000000000..b6cc1504c17 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/mint/v1beta1/genesis.proto @@ -0,0 +1,17 @@ +syntax = "proto3"; +package cosmos.mint.v1beta1; + +import "gogoproto/gogo.proto"; +import "cosmos/mint/v1beta1/mint.proto"; +import "amino/amino.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/mint/types"; + +// GenesisState defines the mint module's genesis state. +message GenesisState { + // minter is a space for holding current inflation information. + Minter minter = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // params defines all the parameters of the module. + Params params = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/mint/v1beta1/mint.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/mint/v1beta1/mint.proto new file mode 100644 index 00000000000..440a392dbd8 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/mint/v1beta1/mint.proto @@ -0,0 +1,62 @@ +syntax = "proto3"; +package cosmos.mint.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/mint/types"; + +import "gogoproto/gogo.proto"; +import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; + +// Minter represents the minting state. +message Minter { + // current annual inflation rate + string inflation = 1 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; + // current annual expected provisions + string annual_provisions = 2 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; +} + +// Params defines the parameters for the x/mint module. +message Params { + option (amino.name) = "cosmos-sdk/x/mint/Params"; + + // type of coin to mint + string mint_denom = 1; + // maximum annual change in inflation rate + string inflation_rate_change = 2 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + // maximum inflation rate + string inflation_max = 3 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + // minimum inflation rate + string inflation_min = 4 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + // goal of percent bonded atoms + string goal_bonded = 5 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + // expected blocks per year + uint64 blocks_per_year = 6; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/mint/v1beta1/query.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/mint/v1beta1/query.proto new file mode 100644 index 00000000000..db5c90fb31c --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/mint/v1beta1/query.proto @@ -0,0 +1,68 @@ +syntax = "proto3"; +package cosmos.mint.v1beta1; + +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "cosmos/mint/v1beta1/mint.proto"; +import "amino/amino.proto"; +import "cosmos_proto/cosmos.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/mint/types"; + +// Query provides defines the gRPC querier service. +service Query { + // Params returns the total set of minting parameters. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/cosmos/mint/v1beta1/params"; + } + + // Inflation returns the current minting inflation value. + rpc Inflation(QueryInflationRequest) returns (QueryInflationResponse) { + option (google.api.http).get = "/cosmos/mint/v1beta1/inflation"; + } + + // AnnualProvisions current minting annual provisions value. + rpc AnnualProvisions(QueryAnnualProvisionsRequest) returns (QueryAnnualProvisionsResponse) { + option (google.api.http).get = "/cosmos/mint/v1beta1/annual_provisions"; + } +} + +// QueryParamsRequest is the request type for the Query/Params RPC method. +message QueryParamsRequest {} + +// QueryParamsResponse is the response type for the Query/Params RPC method. +message QueryParamsResponse { + // params defines the parameters of the module. + Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// QueryInflationRequest is the request type for the Query/Inflation RPC method. +message QueryInflationRequest {} + +// QueryInflationResponse is the response type for the Query/Inflation RPC +// method. +message QueryInflationResponse { + // inflation is the current minting inflation value. + bytes inflation = 1 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} + +// QueryAnnualProvisionsRequest is the request type for the +// Query/AnnualProvisions RPC method. +message QueryAnnualProvisionsRequest {} + +// QueryAnnualProvisionsResponse is the response type for the +// Query/AnnualProvisions RPC method. +message QueryAnnualProvisionsResponse { + // annual_provisions is the current minting annual provisions value. + bytes annual_provisions = 1 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/mint/v1beta1/tx.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/mint/v1beta1/tx.proto new file mode 100644 index 00000000000..ec71fb73aa7 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/mint/v1beta1/tx.proto @@ -0,0 +1,43 @@ +syntax = "proto3"; +package cosmos.mint.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/mint/types"; + +import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; +import "cosmos/mint/v1beta1/mint.proto"; +import "gogoproto/gogo.proto"; +import "cosmos_proto/cosmos.proto"; + +// Msg defines the x/mint Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // UpdateParams defines a governance operation for updating the x/mint module + // parameters. The authority is defaults to the x/gov module account. + // + // Since: cosmos-sdk 0.47 + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); +} + +// MsgUpdateParams is the Msg/UpdateParams request type. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "cosmos-sdk/x/mint/MsgUpdateParams"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // params defines the x/mint parameters to update. + // + // NOTE: All parameters must be supplied. + Params params = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParamsResponse {} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/msg/textual/v1/textual.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/msg/textual/v1/textual.proto index 63f71d5b662..4f8cd141b06 100644 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/msg/textual/v1/textual.proto +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/msg/textual/v1/textual.proto @@ -9,7 +9,7 @@ extend google.protobuf.MessageOptions { // algorithm used to generate the custom textual representation of the // protobuf message where this annotation is applied. We recommend to use a // short, versioned name as this identifier, e.g. "replace_with_username_v1". - // We also recommend providing a human-readable description as protobuf + // We also recommand providing a human-readable description as protobuf // comments on this annotation, for example a short specification or a link // to the relevant documentation. // diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/nft/module/v1/module.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/nft/module/v1/module.proto new file mode 100644 index 00000000000..a5c2c63429e --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/nft/module/v1/module.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; + +package cosmos.nft.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the nft module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "cosmossdk.io/x/nft" + }; +} \ No newline at end of file diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/nft/v1beta1/event.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/nft/v1beta1/event.proto new file mode 100644 index 00000000000..d2cb29d2b2a --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/nft/v1beta1/event.proto @@ -0,0 +1,43 @@ +syntax = "proto3"; +package cosmos.nft.v1beta1; + +option go_package = "cosmossdk.io/x/nft"; + +// EventSend is emitted on Msg/Send +message EventSend { + // class_id associated with the nft + string class_id = 1; + + // id is a unique identifier of the nft + string id = 2; + + // sender is the address of the owner of nft + string sender = 3; + + // receiver is the receiver address of nft + string receiver = 4; +} + +// EventMint is emitted on Mint +message EventMint { + // class_id associated with the nft + string class_id = 1; + + // id is a unique identifier of the nft + string id = 2; + + // owner is the owner address of the nft + string owner = 3; +} + +// EventBurn is emitted on Burn +message EventBurn { + // class_id associated with the nft + string class_id = 1; + + // id is a unique identifier of the nft + string id = 2; + + // owner is the owner address of the nft + string owner = 3; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/nft/v1beta1/genesis.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/nft/v1beta1/genesis.proto new file mode 100644 index 00000000000..441b48b1b1f --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/nft/v1beta1/genesis.proto @@ -0,0 +1,24 @@ +syntax = "proto3"; +package cosmos.nft.v1beta1; + +import "cosmos/nft/v1beta1/nft.proto"; + +option go_package = "cosmossdk.io/x/nft"; + +// GenesisState defines the nft module's genesis state. +message GenesisState { + // class defines the class of the nft type. + repeated cosmos.nft.v1beta1.Class classes = 1; + + // entry defines all nft owned by a person. + repeated Entry entries = 2; +} + +// Entry Defines all nft owned by a person +message Entry { + // owner is the owner address of the following nft + string owner = 1; + + // nfts is a group of nfts of the same owner + repeated cosmos.nft.v1beta1.NFT nfts = 2; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/nft/v1beta1/nft.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/nft/v1beta1/nft.proto new file mode 100644 index 00000000000..4234bd42912 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/nft/v1beta1/nft.proto @@ -0,0 +1,48 @@ +syntax = "proto3"; +package cosmos.nft.v1beta1; + +import "google/protobuf/any.proto"; + +option go_package = "cosmossdk.io/x/nft"; + +// Class defines the class of the nft type. +message Class { + // id defines the unique identifier of the NFT classification, similar to the contract address of ERC721 + string id = 1; + + // name defines the human-readable name of the NFT classification. Optional + string name = 2; + + // symbol is an abbreviated name for nft classification. Optional + string symbol = 3; + + // description is a brief description of nft classification. Optional + string description = 4; + + // uri for the class metadata stored off chain. It can define schema for Class and NFT `Data` attributes. Optional + string uri = 5; + + // uri_hash is a hash of the document pointed by uri. Optional + string uri_hash = 6; + + // data is the app specific metadata of the NFT class. Optional + google.protobuf.Any data = 7; +} + +// NFT defines the NFT. +message NFT { + // class_id associated with the NFT, similar to the contract address of ERC721 + string class_id = 1; + + // id is a unique identifier of the NFT + string id = 2; + + // uri for the NFT metadata stored off chain + string uri = 3; + + // uri_hash is a hash of the document pointed by uri + string uri_hash = 4; + + // data is an app specific data of the NFT. Optional + google.protobuf.Any data = 10; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/nft/v1beta1/query.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/nft/v1beta1/query.proto new file mode 100644 index 00000000000..bdc794ff6c5 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/nft/v1beta1/query.proto @@ -0,0 +1,152 @@ +syntax = "proto3"; +package cosmos.nft.v1beta1; + +import "cosmos/base/query/v1beta1/pagination.proto"; +import "google/api/annotations.proto"; +import "cosmos/nft/v1beta1/nft.proto"; + +option go_package = "cosmossdk.io/x/nft"; + +// Query defines the gRPC querier service. +service Query { + // Balance queries the number of NFTs of a given class owned by the owner, same as balanceOf in ERC721 + rpc Balance(QueryBalanceRequest) returns (QueryBalanceResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/balance/{owner}/{class_id}"; + } + + // Owner queries the owner of the NFT based on its class and id, same as ownerOf in ERC721 + rpc Owner(QueryOwnerRequest) returns (QueryOwnerResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/owner/{class_id}/{id}"; + } + + // Supply queries the number of NFTs from the given class, same as totalSupply of ERC721. + rpc Supply(QuerySupplyRequest) returns (QuerySupplyResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/supply/{class_id}"; + } + + // NFTs queries all NFTs of a given class or owner,choose at least one of the two, similar to tokenByIndex in + // ERC721Enumerable + rpc NFTs(QueryNFTsRequest) returns (QueryNFTsResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/nfts"; + } + + // NFT queries an NFT based on its class and id. + rpc NFT(QueryNFTRequest) returns (QueryNFTResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/nfts/{class_id}/{id}"; + } + + // Class queries an NFT class based on its id + rpc Class(QueryClassRequest) returns (QueryClassResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/classes/{class_id}"; + } + + // Classes queries all NFT classes + rpc Classes(QueryClassesRequest) returns (QueryClassesResponse) { + option (google.api.http).get = "/cosmos/nft/v1beta1/classes"; + } +} + +// QueryBalanceRequest is the request type for the Query/Balance RPC method +message QueryBalanceRequest { + // class_id associated with the nft + string class_id = 1; + + // owner is the owner address of the nft + string owner = 2; +} + +// QueryBalanceResponse is the response type for the Query/Balance RPC method +message QueryBalanceResponse { + // amount is the number of all NFTs of a given class owned by the owner + uint64 amount = 1; +} + +// QueryOwnerRequest is the request type for the Query/Owner RPC method +message QueryOwnerRequest { + // class_id associated with the nft + string class_id = 1; + + // id is a unique identifier of the NFT + string id = 2; +} + +// QueryOwnerResponse is the response type for the Query/Owner RPC method +message QueryOwnerResponse { + // owner is the owner address of the nft + string owner = 1; +} + +// QuerySupplyRequest is the request type for the Query/Supply RPC method +message QuerySupplyRequest { + // class_id associated with the nft + string class_id = 1; +} + +// QuerySupplyResponse is the response type for the Query/Supply RPC method +message QuerySupplyResponse { + // amount is the number of all NFTs from the given class + uint64 amount = 1; +} + +// QueryNFTstRequest is the request type for the Query/NFTs RPC method +message QueryNFTsRequest { + // class_id associated with the nft + string class_id = 1; + + // owner is the owner address of the nft + string owner = 2; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 3; +} + +// QueryNFTsResponse is the response type for the Query/NFTs RPC methods +message QueryNFTsResponse { + // NFT defines the NFT + repeated cosmos.nft.v1beta1.NFT nfts = 1; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryNFTRequest is the request type for the Query/NFT RPC method +message QueryNFTRequest { + // class_id associated with the nft + string class_id = 1; + + // id is a unique identifier of the NFT + string id = 2; +} + +// QueryNFTResponse is the response type for the Query/NFT RPC method +message QueryNFTResponse { + // owner is the owner address of the nft + cosmos.nft.v1beta1.NFT nft = 1; +} + +// QueryClassRequest is the request type for the Query/Class RPC method +message QueryClassRequest { + // class_id associated with the nft + string class_id = 1; +} + +// QueryClassResponse is the response type for the Query/Class RPC method +message QueryClassResponse { + // class defines the class of the nft type. + cosmos.nft.v1beta1.Class class = 1; +} + +// QueryClassesRequest is the request type for the Query/Classes RPC method +message QueryClassesRequest { + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +// QueryClassesResponse is the response type for the Query/Classes RPC method +message QueryClassesResponse { + // class defines the class of the nft type. + repeated cosmos.nft.v1beta1.Class classes = 1; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/nft/v1beta1/tx.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/nft/v1beta1/tx.proto new file mode 100644 index 00000000000..9eecfdd2d56 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/nft/v1beta1/tx.proto @@ -0,0 +1,34 @@ +syntax = "proto3"; +package cosmos.nft.v1beta1; + +option go_package = "cosmossdk.io/x/nft"; + +import "cosmos_proto/cosmos.proto"; +import "cosmos/msg/v1/msg.proto"; + +// Msg defines the nft Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // Send defines a method to send a nft from one account to another account. + rpc Send(MsgSend) returns (MsgSendResponse); +} + +// MsgSend represents a message to send a nft from one account to another account. +message MsgSend { + option (cosmos.msg.v1.signer) = "sender"; + + // class_id defines the unique identifier of the nft classification, similar to the contract address of ERC721 + string class_id = 1; + + // id defines the unique identification of nft + string id = 2; + + // sender is the address of the owner of nft + string sender = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // receiver is the receiver address of nft + string receiver = 4 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} +// MsgSendResponse defines the Msg/Send response type. +message MsgSendResponse {} \ No newline at end of file diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/orm/query/v1alpha1/query.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/orm/query/v1alpha1/query.proto index 2ee19c12073..4500e99d5dc 100644 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/orm/query/v1alpha1/query.proto +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/orm/query/v1alpha1/query.proto @@ -7,8 +7,6 @@ import "google/protobuf/duration.proto"; import "google/protobuf/any.proto"; import "cosmos/base/query/v1beta1/pagination.proto"; -option go_package = "cosmossdk.io/api/app/cosmos/orm/query/v1alpha1"; - // Query is a generic gRPC service for querying ORM data. service Query { diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/params/module/v1/module.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/params/module/v1/module.proto new file mode 100644 index 00000000000..75e7f99583d --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/params/module/v1/module.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; + +package cosmos.params.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the params module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/params" + }; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/params/v1beta1/params.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/params/v1beta1/params.proto new file mode 100644 index 00000000000..c8efa13106d --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/params/v1beta1/params.proto @@ -0,0 +1,28 @@ +syntax = "proto3"; +package cosmos.params.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/params/types/proposal"; +option (gogoproto.equal_all) = true; + +import "gogoproto/gogo.proto"; +import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; + +// ParameterChangeProposal defines a proposal to change one or more parameters. +message ParameterChangeProposal { + option (gogoproto.goproto_getters) = false; + option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; + option (amino.name) = "cosmos-sdk/ParameterChangeProposal"; + + string title = 1; + string description = 2; + repeated ParamChange changes = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// ParamChange defines an individual parameter change, for use in +// ParameterChangeProposal. +message ParamChange { + string subspace = 1; + string key = 2; + string value = 3; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/params/v1beta1/query.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/params/v1beta1/query.proto new file mode 100644 index 00000000000..827422eac9f --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/params/v1beta1/query.proto @@ -0,0 +1,63 @@ +syntax = "proto3"; +package cosmos.params.v1beta1; + +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "cosmos/params/v1beta1/params.proto"; +import "amino/amino.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/params/types/proposal"; + +// Query defines the gRPC querier service. +service Query { + // Params queries a specific parameter of a module, given its subspace and + // key. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/cosmos/params/v1beta1/params"; + } + + // Subspaces queries for all registered subspaces and all keys for a subspace. + // + // Since: cosmos-sdk 0.46 + rpc Subspaces(QuerySubspacesRequest) returns (QuerySubspacesResponse) { + option (google.api.http).get = "/cosmos/params/v1beta1/subspaces"; + } +} + +// QueryParamsRequest is request type for the Query/Params RPC method. +message QueryParamsRequest { + // subspace defines the module to query the parameter for. + string subspace = 1; + + // key defines the key of the parameter in the subspace. + string key = 2; +} + +// QueryParamsResponse is response type for the Query/Params RPC method. +message QueryParamsResponse { + // param defines the queried parameter. + ParamChange param = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// QuerySubspacesRequest defines a request type for querying for all registered +// subspaces and all keys for a subspace. +// +// Since: cosmos-sdk 0.46 +message QuerySubspacesRequest {} + +// QuerySubspacesResponse defines the response types for querying for all +// registered subspaces and all keys for a subspace. +// +// Since: cosmos-sdk 0.46 +message QuerySubspacesResponse { + repeated Subspace subspaces = 1; +} + +// Subspace defines a parameter subspace name and all the keys that exist for +// the subspace. +// +// Since: cosmos-sdk 0.46 +message Subspace { + string subspace = 1; + repeated string keys = 2; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/query/v1/query.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/query/v1/query.proto index f9811f09ad4..e42e73d74d0 100644 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/query/v1/query.proto +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/query/v1/query.proto @@ -11,9 +11,7 @@ option go_package = "github.com/cosmos/cosmos-sdk/types/query"; extend google.protobuf.MethodOptions { // module_query_safe is set to true when the query is safe to be called from // within the state machine, for example from another module's Keeper, via - // a query router calls or from CosmWasm contracts. - // WARNING: marking a query as safe in a non consensus breaking release may cause non determinism. - // It is recommended to only mark a query as safe in a consensus breaking release. + // ADR-033 calls or from CosmWasm contracts. // Concretely, it means that the query is: // 1. deterministic: given a block height, returns the exact same response // upon multiple calls; and doesn't introduce any state-machine-breaking @@ -34,4 +32,4 @@ extend google.protobuf.MethodOptions { // // When set to true, the query can safely be called bool module_query_safe = 11110001; -} +} \ No newline at end of file diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/slashing/module/v1/module.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/slashing/module/v1/module.proto new file mode 100644 index 00000000000..524330757bd --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/slashing/module/v1/module.proto @@ -0,0 +1,15 @@ +syntax = "proto3"; + +package cosmos.slashing.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the slashing module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/slashing" + }; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 1; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/slashing/v1beta1/genesis.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/slashing/v1beta1/genesis.proto new file mode 100644 index 00000000000..a2f516bbe72 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/slashing/v1beta1/genesis.proto @@ -0,0 +1,48 @@ +syntax = "proto3"; +package cosmos.slashing.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/slashing/types"; + +import "gogoproto/gogo.proto"; +import "cosmos/slashing/v1beta1/slashing.proto"; +import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; + +// GenesisState defines the slashing module's genesis state. +message GenesisState { + // params defines all the parameters of the module. + Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // signing_infos represents a map between validator addresses and their + // signing infos. + repeated SigningInfo signing_infos = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // missed_blocks represents a map between validator addresses and their + // missed blocks. + repeated ValidatorMissedBlocks missed_blocks = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// SigningInfo stores validator signing info of corresponding address. +message SigningInfo { + // address is the validator address. + string address = 1 [(cosmos_proto.scalar) = "cosmos.ConsensusAddressString"]; + // validator_signing_info represents the signing info of this validator. + ValidatorSigningInfo validator_signing_info = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// ValidatorMissedBlocks contains array of missed blocks of corresponding +// address. +message ValidatorMissedBlocks { + // address is the validator address. + string address = 1 [(cosmos_proto.scalar) = "cosmos.ConsensusAddressString"]; + // missed_blocks is an array of missed blocks by the validator. + repeated MissedBlock missed_blocks = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// MissedBlock contains height and missed status as boolean. +message MissedBlock { + // index is the height at which the block was missed. + int64 index = 1; + // missed is the missed status. + bool missed = 2; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/slashing/v1beta1/query.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/slashing/v1beta1/query.proto new file mode 100644 index 00000000000..e7279709ede --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/slashing/v1beta1/query.proto @@ -0,0 +1,66 @@ +syntax = "proto3"; +package cosmos.slashing.v1beta1; + +import "cosmos/base/query/v1beta1/pagination.proto"; +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "cosmos/slashing/v1beta1/slashing.proto"; +import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/slashing/types"; + +// Query provides defines the gRPC querier service +service Query { + // Params queries the parameters of slashing module + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (google.api.http).get = "/cosmos/slashing/v1beta1/params"; + } + + // SigningInfo queries the signing info of given cons address + rpc SigningInfo(QuerySigningInfoRequest) returns (QuerySigningInfoResponse) { + option (google.api.http).get = "/cosmos/slashing/v1beta1/signing_infos/{cons_address}"; + } + + // SigningInfos queries signing info of all validators + rpc SigningInfos(QuerySigningInfosRequest) returns (QuerySigningInfosResponse) { + option (google.api.http).get = "/cosmos/slashing/v1beta1/signing_infos"; + } +} + +// QueryParamsRequest is the request type for the Query/Params RPC method +message QueryParamsRequest {} + +// QueryParamsResponse is the response type for the Query/Params RPC method +message QueryParamsResponse { + Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// QuerySigningInfoRequest is the request type for the Query/SigningInfo RPC +// method +message QuerySigningInfoRequest { + // cons_address is the address to query signing info of + string cons_address = 1 [(cosmos_proto.scalar) = "cosmos.ConsensusAddressString"]; +} + +// QuerySigningInfoResponse is the response type for the Query/SigningInfo RPC +// method +message QuerySigningInfoResponse { + // val_signing_info is the signing info of requested val cons address + ValidatorSigningInfo val_signing_info = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// QuerySigningInfosRequest is the request type for the Query/SigningInfos RPC +// method +message QuerySigningInfosRequest { + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +// QuerySigningInfosResponse is the response type for the Query/SigningInfos RPC +// method +message QuerySigningInfosResponse { + // info is the signing info of all validators + repeated cosmos.slashing.v1beta1.ValidatorSigningInfo info = 1 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/slashing/v1beta1/slashing.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/slashing/v1beta1/slashing.proto new file mode 100644 index 00000000000..924b39c97bd --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/slashing/v1beta1/slashing.proto @@ -0,0 +1,62 @@ +syntax = "proto3"; +package cosmos.slashing.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/slashing/types"; +option (gogoproto.equal_all) = true; + +import "gogoproto/gogo.proto"; +import "google/protobuf/duration.proto"; +import "google/protobuf/timestamp.proto"; +import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; + +// ValidatorSigningInfo defines a validator's signing info for monitoring their +// liveness activity. +message ValidatorSigningInfo { + option (gogoproto.equal) = true; + + string address = 1 [(cosmos_proto.scalar) = "cosmos.ConsensusAddressString"]; + // Height at which validator was first a candidate OR was un-jailed + int64 start_height = 2; + // DEPRECATED: Index which is incremented every time a validator is bonded in a block and + // _may_ have signed a pre-commit or not. This in conjunction with the + // signed_blocks_window param determines the index in the missed block bitmap. + int64 index_offset = 3 [deprecated = true]; + // Timestamp until which the validator is jailed due to liveness downtime. + google.protobuf.Timestamp jailed_until = 4 + [(gogoproto.stdtime) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + // Whether or not a validator has been tombstoned (killed out of validator + // set). It is set once the validator commits an equivocation or for any other + // configured misbehavior. + bool tombstoned = 5; + // A counter of missed (unsigned) blocks. It is used to avoid unnecessary + // reads in the missed block bitmap. + int64 missed_blocks_counter = 6; +} + +// Params represents the parameters used for by the slashing module. +message Params { + option (amino.name) = "cosmos-sdk/x/slashing/Params"; + + int64 signed_blocks_window = 1; + bytes min_signed_per_window = 2 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + google.protobuf.Duration downtime_jail_duration = 3 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdduration) = true]; + bytes slash_fraction_double_sign = 4 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + bytes slash_fraction_downtime = 5 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/slashing/v1beta1/tx.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/slashing/v1beta1/tx.proto new file mode 100644 index 00000000000..2499b4fd05e --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/slashing/v1beta1/tx.proto @@ -0,0 +1,67 @@ +syntax = "proto3"; +package cosmos.slashing.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/slashing/types"; +option (gogoproto.equal_all) = true; + +import "gogoproto/gogo.proto"; +import "cosmos/slashing/v1beta1/slashing.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; + +// Msg defines the slashing Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // Unjail defines a method for unjailing a jailed validator, thus returning + // them into the bonded validator set, so they can begin receiving provisions + // and rewards again. + rpc Unjail(MsgUnjail) returns (MsgUnjailResponse); + + // UpdateParams defines a governance operation for updating the x/slashing module + // parameters. The authority defaults to the x/gov module account. + // + // Since: cosmos-sdk 0.47 + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); +} + +// MsgUnjail defines the Msg/Unjail request type +message MsgUnjail { + option (cosmos.msg.v1.signer) = "validator_addr"; + option (amino.name) = "cosmos-sdk/MsgUnjail"; + + option (gogoproto.goproto_getters) = false; + + string validator_addr = 1 [ + (cosmos_proto.scalar) = "cosmos.ValidatorAddressString", + (gogoproto.jsontag) = "address", + (amino.field_name) = "address", + (amino.dont_omitempty) = true + ]; +} + +// MsgUnjailResponse defines the Msg/Unjail response type +message MsgUnjailResponse {} + +// MsgUpdateParams is the Msg/UpdateParams request type. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "cosmos-sdk/x/slashing/MsgUpdateParams"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // params defines the x/slashing parameters to update. + // + // NOTE: All parameters must be supplied. + Params params = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParamsResponse {} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/staking/module/v1/module.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/staking/module/v1/module.proto new file mode 100644 index 00000000000..fd92a54805d --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/staking/module/v1/module.proto @@ -0,0 +1,26 @@ +syntax = "proto3"; + +package cosmos.staking.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the staking module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/staking" + }; + + // hooks_order specifies the order of staking hooks and should be a list + // of module names which provide a staking hooks instance. If no order is + // provided, then hooks will be applied in alphabetical order of module names. + repeated string hooks_order = 1; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 2; + + // bech32_prefix_validator is the bech32 validator prefix for the app. + string bech32_prefix_validator = 3; + + // bech32_prefix_consensus is the bech32 consensus node prefix for the app. + string bech32_prefix_consensus = 4; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/staking/v1beta1/authz.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/staking/v1beta1/authz.proto new file mode 100644 index 00000000000..409280c1eda --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/staking/v1beta1/authz.proto @@ -0,0 +1,51 @@ +syntax = "proto3"; +package cosmos.staking.v1beta1; + +import "gogoproto/gogo.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "amino/amino.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/staking/types"; + +// StakeAuthorization defines authorization for delegate/undelegate/redelegate. +// +// Since: cosmos-sdk 0.43 +message StakeAuthorization { + option (cosmos_proto.implements_interface) = "cosmos.authz.v1beta1.Authorization"; + option (amino.name) = "cosmos-sdk/StakeAuthorization"; + + // max_tokens specifies the maximum amount of tokens can be delegate to a validator. If it is + // empty, there is no spend limit and any amount of coins can be delegated. + cosmos.base.v1beta1.Coin max_tokens = 1 [(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coin"]; + // validators is the oneof that represents either allow_list or deny_list + oneof validators { + // allow_list specifies list of validator addresses to whom grantee can delegate tokens on behalf of granter's + // account. + Validators allow_list = 2 [(amino.oneof_name) = "cosmos-sdk/StakeAuthorization/AllowList"]; + // deny_list specifies list of validator addresses to whom grantee can not delegate tokens. + Validators deny_list = 3 [(amino.oneof_name) = "cosmos-sdk/StakeAuthorization/DenyList"]; + } + // Validators defines list of validator addresses. + message Validators { + repeated string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + } + // authorization_type defines one of AuthorizationType. + AuthorizationType authorization_type = 4; +} + +// AuthorizationType defines the type of staking module authorization type +// +// Since: cosmos-sdk 0.43 +enum AuthorizationType { + // AUTHORIZATION_TYPE_UNSPECIFIED specifies an unknown authorization type + AUTHORIZATION_TYPE_UNSPECIFIED = 0; + // AUTHORIZATION_TYPE_DELEGATE defines an authorization type for Msg/Delegate + AUTHORIZATION_TYPE_DELEGATE = 1; + // AUTHORIZATION_TYPE_UNDELEGATE defines an authorization type for Msg/Undelegate + AUTHORIZATION_TYPE_UNDELEGATE = 2; + // AUTHORIZATION_TYPE_REDELEGATE defines an authorization type for Msg/BeginRedelegate + AUTHORIZATION_TYPE_REDELEGATE = 3; + // AUTHORIZATION_TYPE_CANCEL_UNBONDING_DELEGATION defines an authorization type for Msg/MsgCancelUnbondingDelegation + AUTHORIZATION_TYPE_CANCEL_UNBONDING_DELEGATION = 4; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/staking/v1beta1/genesis.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/staking/v1beta1/genesis.proto new file mode 100644 index 00000000000..c3f1ce5dee9 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/staking/v1beta1/genesis.proto @@ -0,0 +1,55 @@ +syntax = "proto3"; +package cosmos.staking.v1beta1; + +option go_package = "github.com/cosmos/cosmos-sdk/x/staking/types"; + +import "gogoproto/gogo.proto"; +import "cosmos/staking/v1beta1/staking.proto"; +import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; + +// GenesisState defines the staking module's genesis state. +message GenesisState { + // params defines all the parameters of related to deposit. + Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // last_total_power tracks the total amounts of bonded tokens recorded during + // the previous end block. + bytes last_total_power = 2 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + + // last_validator_powers is a special index that provides a historical list + // of the last-block's bonded validators. + repeated LastValidatorPower last_validator_powers = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // validators defines the validator set at genesis. + repeated Validator validators = 4 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // delegations defines the delegations active at genesis. + repeated Delegation delegations = 5 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // unbonding_delegations defines the unbonding delegations active at genesis. + repeated UnbondingDelegation unbonding_delegations = 6 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // redelegations defines the redelegations active at genesis. + repeated Redelegation redelegations = 7 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // exported defines a bool to identify whether the chain dealing with exported or initialized genesis. + bool exported = 8; +} + +// LastValidatorPower required for validator set update logic. +message LastValidatorPower { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // address is the address of the validator. + string address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // power defines the power of the validator. + int64 power = 2; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/staking/v1beta1/query.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/staking/v1beta1/query.proto new file mode 100644 index 00000000000..08eb9f3245f --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/staking/v1beta1/query.proto @@ -0,0 +1,387 @@ +syntax = "proto3"; +package cosmos.staking.v1beta1; + +import "cosmos/base/query/v1beta1/pagination.proto"; +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "cosmos/staking/v1beta1/staking.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/query/v1/query.proto"; +import "amino/amino.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/staking/types"; + +// Query defines the gRPC querier service. +service Query { + // Validators queries all validators that match the given status. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + rpc Validators(QueryValidatorsRequest) returns (QueryValidatorsResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/validators"; + } + + // Validator queries validator info for given validator address. + rpc Validator(QueryValidatorRequest) returns (QueryValidatorResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/validators/{validator_addr}"; + } + + // ValidatorDelegations queries delegate info for given validator. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + rpc ValidatorDelegations(QueryValidatorDelegationsRequest) returns (QueryValidatorDelegationsResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/validators/{validator_addr}/delegations"; + } + + // ValidatorUnbondingDelegations queries unbonding delegations of a validator. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + rpc ValidatorUnbondingDelegations(QueryValidatorUnbondingDelegationsRequest) + returns (QueryValidatorUnbondingDelegationsResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/validators/" + "{validator_addr}/unbonding_delegations"; + } + + // Delegation queries delegate info for given validator delegator pair. + rpc Delegation(QueryDelegationRequest) returns (QueryDelegationResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/" + "{delegator_addr}"; + } + + // UnbondingDelegation queries unbonding info for given validator delegator + // pair. + rpc UnbondingDelegation(QueryUnbondingDelegationRequest) returns (QueryUnbondingDelegationResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/validators/{validator_addr}/delegations/" + "{delegator_addr}/unbonding_delegation"; + } + + // DelegatorDelegations queries all delegations of a given delegator address. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + rpc DelegatorDelegations(QueryDelegatorDelegationsRequest) returns (QueryDelegatorDelegationsResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/delegations/{delegator_addr}"; + } + + // DelegatorUnbondingDelegations queries all unbonding delegations of a given + // delegator address. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + rpc DelegatorUnbondingDelegations(QueryDelegatorUnbondingDelegationsRequest) + returns (QueryDelegatorUnbondingDelegationsResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/delegators/" + "{delegator_addr}/unbonding_delegations"; + } + + // Redelegations queries redelegations of given address. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + rpc Redelegations(QueryRedelegationsRequest) returns (QueryRedelegationsResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/delegators/{delegator_addr}/redelegations"; + } + + // DelegatorValidators queries all validators info for given delegator + // address. + // + // When called from another module, this query might consume a high amount of + // gas if the pagination field is incorrectly set. + rpc DelegatorValidators(QueryDelegatorValidatorsRequest) returns (QueryDelegatorValidatorsResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators"; + } + + // DelegatorValidator queries validator info for given delegator validator + // pair. + rpc DelegatorValidator(QueryDelegatorValidatorRequest) returns (QueryDelegatorValidatorResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/delegators/{delegator_addr}/validators/" + "{validator_addr}"; + } + + // HistoricalInfo queries the historical info for given height. + rpc HistoricalInfo(QueryHistoricalInfoRequest) returns (QueryHistoricalInfoResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/historical_info/{height}"; + } + + // Pool queries the pool info. + rpc Pool(QueryPoolRequest) returns (QueryPoolResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/pool"; + } + + // Parameters queries the staking parameters. + rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { + option (cosmos.query.v1.module_query_safe) = true; + option (google.api.http).get = "/cosmos/staking/v1beta1/params"; + } +} + +// QueryValidatorsRequest is request type for Query/Validators RPC method. +message QueryValidatorsRequest { + // status enables to query for validators matching a given status. + string status = 1; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryValidatorsResponse is response type for the Query/Validators RPC method +message QueryValidatorsResponse { + // validators contains all the queried validators. + repeated Validator validators = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryValidatorRequest is response type for the Query/Validator RPC method +message QueryValidatorRequest { + // validator_addr defines the validator address to query for. + string validator_addr = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; +} + +// QueryValidatorResponse is response type for the Query/Validator RPC method +message QueryValidatorResponse { + // validator defines the validator info. + Validator validator = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// QueryValidatorDelegationsRequest is request type for the +// Query/ValidatorDelegations RPC method +message QueryValidatorDelegationsRequest { + // validator_addr defines the validator address to query for. + string validator_addr = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryValidatorDelegationsResponse is response type for the +// Query/ValidatorDelegations RPC method +message QueryValidatorDelegationsResponse { + repeated DelegationResponse delegation_responses = 1 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.castrepeated) = "DelegationResponses"]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryValidatorUnbondingDelegationsRequest is required type for the +// Query/ValidatorUnbondingDelegations RPC method +message QueryValidatorUnbondingDelegationsRequest { + // validator_addr defines the validator address to query for. + string validator_addr = 1 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryValidatorUnbondingDelegationsResponse is response type for the +// Query/ValidatorUnbondingDelegations RPC method. +message QueryValidatorUnbondingDelegationsResponse { + repeated UnbondingDelegation unbonding_responses = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryDelegationRequest is request type for the Query/Delegation RPC method. +message QueryDelegationRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // delegator_addr defines the delegator address to query for. + string delegator_addr = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // validator_addr defines the validator address to query for. + string validator_addr = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; +} + +// QueryDelegationResponse is response type for the Query/Delegation RPC method. +message QueryDelegationResponse { + // delegation_responses defines the delegation info of a delegation. + DelegationResponse delegation_response = 1; +} + +// QueryUnbondingDelegationRequest is request type for the +// Query/UnbondingDelegation RPC method. +message QueryUnbondingDelegationRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // delegator_addr defines the delegator address to query for. + string delegator_addr = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // validator_addr defines the validator address to query for. + string validator_addr = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; +} + +// QueryDelegationResponse is response type for the Query/UnbondingDelegation +// RPC method. +message QueryUnbondingDelegationResponse { + // unbond defines the unbonding information of a delegation. + UnbondingDelegation unbond = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// QueryDelegatorDelegationsRequest is request type for the +// Query/DelegatorDelegations RPC method. +message QueryDelegatorDelegationsRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // delegator_addr defines the delegator address to query for. + string delegator_addr = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryDelegatorDelegationsResponse is response type for the +// Query/DelegatorDelegations RPC method. +message QueryDelegatorDelegationsResponse { + // delegation_responses defines all the delegations' info of a delegator. + repeated DelegationResponse delegation_responses = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryDelegatorUnbondingDelegationsRequest is request type for the +// Query/DelegatorUnbondingDelegations RPC method. +message QueryDelegatorUnbondingDelegationsRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // delegator_addr defines the delegator address to query for. + string delegator_addr = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryUnbondingDelegatorDelegationsResponse is response type for the +// Query/UnbondingDelegatorDelegations RPC method. +message QueryDelegatorUnbondingDelegationsResponse { + repeated UnbondingDelegation unbonding_responses = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryRedelegationsRequest is request type for the Query/Redelegations RPC +// method. +message QueryRedelegationsRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // delegator_addr defines the delegator address to query for. + string delegator_addr = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // src_validator_addr defines the validator address to redelegate from. + string src_validator_addr = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // dst_validator_addr defines the validator address to redelegate to. + string dst_validator_addr = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 4; +} + +// QueryRedelegationsResponse is response type for the Query/Redelegations RPC +// method. +message QueryRedelegationsResponse { + repeated RedelegationResponse redelegation_responses = 1 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryDelegatorValidatorsRequest is request type for the +// Query/DelegatorValidators RPC method. +message QueryDelegatorValidatorsRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // delegator_addr defines the delegator address to query for. + string delegator_addr = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryDelegatorValidatorsResponse is response type for the +// Query/DelegatorValidators RPC method. +message QueryDelegatorValidatorsResponse { + // validators defines the validators' info of a delegator. + repeated Validator validators = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + +// QueryDelegatorValidatorRequest is request type for the +// Query/DelegatorValidator RPC method. +message QueryDelegatorValidatorRequest { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // delegator_addr defines the delegator address to query for. + string delegator_addr = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // validator_addr defines the validator address to query for. + string validator_addr = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; +} + +// QueryDelegatorValidatorResponse response type for the +// Query/DelegatorValidator RPC method. +message QueryDelegatorValidatorResponse { + // validator defines the validator info. + Validator validator = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// QueryHistoricalInfoRequest is request type for the Query/HistoricalInfo RPC +// method. +message QueryHistoricalInfoRequest { + // height defines at which height to query the historical info. + int64 height = 1; +} + +// QueryHistoricalInfoResponse is response type for the Query/HistoricalInfo RPC +// method. +message QueryHistoricalInfoResponse { + // hist defines the historical info at the given height. + HistoricalInfo hist = 1; +} + +// QueryPoolRequest is request type for the Query/Pool RPC method. +message QueryPoolRequest {} + +// QueryPoolResponse is response type for the Query/Pool RPC method. +message QueryPoolResponse { + // pool defines the pool info. + Pool pool = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// QueryParamsRequest is request type for the Query/Params RPC method. +message QueryParamsRequest {} + +// QueryParamsResponse is response type for the Query/Params RPC method. +message QueryParamsResponse { + // params holds all the parameters of this module. + Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/staking/v1beta1/staking.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/staking/v1beta1/staking.proto new file mode 100644 index 00000000000..24ec65d1020 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/staking/v1beta1/staking.proto @@ -0,0 +1,394 @@ +syntax = "proto3"; +package cosmos.staking.v1beta1; + +import "gogoproto/gogo.proto"; +import "google/protobuf/any.proto"; +import "google/protobuf/duration.proto"; +import "google/protobuf/timestamp.proto"; + +import "cosmos_proto/cosmos.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "amino/amino.proto"; +import "tendermint/types/types.proto"; +import "tendermint/abci/types.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/staking/types"; + +// HistoricalInfo contains header and validator information for a given block. +// It is stored as part of staking module's state, which persists the `n` most +// recent HistoricalInfo +// (`n` is set by the staking module's `historical_entries` parameter). +message HistoricalInfo { + tendermint.types.Header header = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + repeated Validator valset = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// CommissionRates defines the initial commission rates to be used for creating +// a validator. +message CommissionRates { + option (gogoproto.equal) = true; + + // rate is the commission rate charged to delegators, as a fraction. + string rate = 1 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + // max_rate defines the maximum commission rate which validator can ever charge, as a fraction. + string max_rate = 2 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + // max_change_rate defines the maximum daily increase of the validator commission, as a fraction. + string max_change_rate = 3 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} + +// Commission defines commission parameters for a given validator. +message Commission { + option (gogoproto.equal) = true; + + // commission_rates defines the initial commission rates to be used for creating a validator. + CommissionRates commission_rates = 1 + [(gogoproto.embed) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + // update_time is the last time the commission rate was changed. + google.protobuf.Timestamp update_time = 2 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; +} + +// Description defines a validator description. +message Description { + option (gogoproto.equal) = true; + + // moniker defines a human-readable name for the validator. + string moniker = 1; + // identity defines an optional identity signature (ex. UPort or Keybase). + string identity = 2; + // website defines an optional website link. + string website = 3; + // security_contact defines an optional email for security contact. + string security_contact = 4; + // details define other optional details. + string details = 5; +} + +// Validator defines a validator, together with the total amount of the +// Validator's bond shares and their exchange rate to coins. Slashing results in +// a decrease in the exchange rate, allowing correct calculation of future +// undelegations without iterating over delegators. When coins are delegated to +// this validator, the validator is credited with a delegation whose number of +// bond shares is based on the amount of coins delegated divided by the current +// exchange rate. Voting power can be calculated as total bonded shares +// multiplied by exchange rate. +message Validator { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // operator_address defines the address of the validator's operator; bech encoded in JSON. + string operator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // consensus_pubkey is the consensus public key of the validator, as a Protobuf Any. + google.protobuf.Any consensus_pubkey = 2 [(cosmos_proto.accepts_interface) = "cosmos.crypto.PubKey"]; + // jailed defined whether the validator has been jailed from bonded status or not. + bool jailed = 3; + // status is the validator status (bonded/unbonding/unbonded). + BondStatus status = 4; + // tokens define the delegated tokens (incl. self-delegation). + string tokens = 5 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + // delegator_shares defines total shares issued to a validator's delegators. + string delegator_shares = 6 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; + // description defines the description terms for the validator. + Description description = 7 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + // unbonding_height defines, if unbonding, the height at which this validator has begun unbonding. + int64 unbonding_height = 8; + // unbonding_time defines, if unbonding, the min time for the validator to complete unbonding. + google.protobuf.Timestamp unbonding_time = 9 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; + // commission defines the commission parameters. + Commission commission = 10 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + // min_self_delegation is the validator's self declared minimum self delegation. + // + // Since: cosmos-sdk 0.46 + string min_self_delegation = 11 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + + // strictly positive if this validator's unbonding has been stopped by external modules + int64 unbonding_on_hold_ref_count = 12; + + // list of unbonding ids, each uniquely identifing an unbonding of this validator + repeated uint64 unbonding_ids = 13; +} + +// BondStatus is the status of a validator. +enum BondStatus { + option (gogoproto.goproto_enum_prefix) = false; + + // UNSPECIFIED defines an invalid validator status. + BOND_STATUS_UNSPECIFIED = 0 [(gogoproto.enumvalue_customname) = "Unspecified"]; + // UNBONDED defines a validator that is not bonded. + BOND_STATUS_UNBONDED = 1 [(gogoproto.enumvalue_customname) = "Unbonded"]; + // UNBONDING defines a validator that is unbonding. + BOND_STATUS_UNBONDING = 2 [(gogoproto.enumvalue_customname) = "Unbonding"]; + // BONDED defines a validator that is bonded. + BOND_STATUS_BONDED = 3 [(gogoproto.enumvalue_customname) = "Bonded"]; +} + +// ValAddresses defines a repeated set of validator addresses. +message ValAddresses { + repeated string addresses = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// DVPair is struct that just has a delegator-validator pair with no other data. +// It is intended to be used as a marshalable pointer. For example, a DVPair can +// be used to construct the key to getting an UnbondingDelegation from state. +message DVPair { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; +} + +// DVPairs defines an array of DVPair objects. +message DVPairs { + repeated DVPair pairs = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// DVVTriplet is struct that just has a delegator-validator-validator triplet +// with no other data. It is intended to be used as a marshalable pointer. For +// example, a DVVTriplet can be used to construct the key to getting a +// Redelegation from state. +message DVVTriplet { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_src_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + string validator_dst_address = 3 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; +} + +// DVVTriplets defines an array of DVVTriplet objects. +message DVVTriplets { + repeated DVVTriplet triplets = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// Delegation represents the bond with tokens held by an account. It is +// owned by one delegator, and is associated with the voting power of one +// validator. +message Delegation { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // delegator_address is the encoded address of the delegator. + string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // validator_address is the encoded address of the validator. + string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + // shares define the delegation shares received. + string shares = 3 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; +} + +// UnbondingDelegation stores all of a single delegator's unbonding bonds +// for a single validator in an time-ordered list. +message UnbondingDelegation { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // delegator_address is the encoded address of the delegator. + string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // validator_address is the encoded address of the validator. + string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + // entries are the unbonding delegation entries. + repeated UnbondingDelegationEntry entries = 3 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // unbonding delegation entries +} + +// UnbondingDelegationEntry defines an unbonding object with relevant metadata. +message UnbondingDelegationEntry { + option (gogoproto.equal) = true; + + // creation_height is the height which the unbonding took place. + int64 creation_height = 1; + // completion_time is the unix time for unbonding completion. + google.protobuf.Timestamp completion_time = 2 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; + // initial_balance defines the tokens initially scheduled to receive at completion. + string initial_balance = 3 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + // balance defines the tokens to receive at completion. + string balance = 4 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + // Incrementing id that uniquely identifies this entry + uint64 unbonding_id = 5; + + // Strictly positive if this entry's unbonding has been stopped by external modules + int64 unbonding_on_hold_ref_count = 6; +} + +// RedelegationEntry defines a redelegation object with relevant metadata. +message RedelegationEntry { + option (gogoproto.equal) = true; + + // creation_height defines the height which the redelegation took place. + int64 creation_height = 1; + // completion_time defines the unix time for redelegation completion. + google.protobuf.Timestamp completion_time = 2 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; + // initial_balance defines the initial balance when redelegation started. + string initial_balance = 3 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; + // shares_dst is the amount of destination-validator shares created by redelegation. + string shares_dst = 4 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false + ]; + // Incrementing id that uniquely identifies this entry + uint64 unbonding_id = 5; + + // Strictly positive if this entry's unbonding has been stopped by external modules + int64 unbonding_on_hold_ref_count = 6; +} + +// Redelegation contains the list of a particular delegator's redelegating bonds +// from a particular source validator to a particular destination validator. +message Redelegation { + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + // delegator_address is the bech32-encoded address of the delegator. + string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // validator_src_address is the validator redelegation source operator address. + string validator_src_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + // validator_dst_address is the validator redelegation destination operator address. + string validator_dst_address = 3 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + // entries are the redelegation entries. + repeated RedelegationEntry entries = 4 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // redelegation entries +} + +// Params defines the parameters for the x/staking module. +message Params { + option (amino.name) = "cosmos-sdk/x/staking/Params"; + option (gogoproto.equal) = true; + + // unbonding_time is the time duration of unbonding. + google.protobuf.Duration unbonding_time = 1 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdduration) = true]; + // max_validators is the maximum number of validators. + uint32 max_validators = 2; + // max_entries is the max entries for either unbonding delegation or redelegation (per pair/trio). + uint32 max_entries = 3; + // historical_entries is the number of historical entries to persist. + uint32 historical_entries = 4; + // bond_denom defines the bondable coin denomination. + string bond_denom = 5; + // min_commission_rate is the chain-wide minimum commission rate that a validator can charge their delegators + string min_commission_rate = 6 [ + (gogoproto.moretags) = "yaml:\"min_commission_rate\"", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (cosmos_proto.scalar) = "cosmos.Dec" + ]; +} + +// DelegationResponse is equivalent to Delegation except that it contains a +// balance in addition to shares which is more suitable for client responses. +message DelegationResponse { + option (gogoproto.equal) = false; + + Delegation delegation = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + cosmos.base.v1beta1.Coin balance = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// RedelegationEntryResponse is equivalent to a RedelegationEntry except that it +// contains a balance in addition to shares which is more suitable for client +// responses. +message RedelegationEntryResponse { + option (gogoproto.equal) = true; + + RedelegationEntry redelegation_entry = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + string balance = 4 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false + ]; +} + +// RedelegationResponse is equivalent to a Redelegation except that its entries +// contain a balance in addition to shares which is more suitable for client +// responses. +message RedelegationResponse { + option (gogoproto.equal) = false; + + Redelegation redelegation = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + repeated RedelegationEntryResponse entries = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// Pool is used for tracking bonded and not-bonded token supply of the bond +// denomination. +message Pool { + option (gogoproto.description) = true; + option (gogoproto.equal) = true; + string not_bonded_tokens = 1 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "not_bonded_tokens", + (amino.dont_omitempty) = true + ]; + string bonded_tokens = 2 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false, + (gogoproto.jsontag) = "bonded_tokens", + (amino.dont_omitempty) = true + ]; +} + +// Infraction indicates the infraction a validator commited. +enum Infraction { + // UNSPECIFIED defines an empty infraction. + INFRACTION_UNSPECIFIED = 0; + // DOUBLE_SIGN defines a validator that double-signs a block. + INFRACTION_DOUBLE_SIGN = 1; + // DOWNTIME defines a validator that missed signing too many blocks. + INFRACTION_DOWNTIME = 2; +} + +// ValidatorUpdates defines an array of abci.ValidatorUpdate objects. +// TODO: explore moving this to proto/cosmos/base to separate modules from tendermint dependence +message ValidatorUpdates { + repeated tendermint.abci.ValidatorUpdate updates = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/staking/v1beta1/tx.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/staking/v1beta1/tx.proto new file mode 100644 index 00000000000..238645ba923 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/staking/v1beta1/tx.proto @@ -0,0 +1,206 @@ +syntax = "proto3"; +package cosmos.staking.v1beta1; + +import "google/protobuf/any.proto"; +import "google/protobuf/timestamp.proto"; +import "gogoproto/gogo.proto"; + +import "cosmos_proto/cosmos.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/staking/v1beta1/staking.proto"; +import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/staking/types"; + +// Msg defines the staking Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // CreateValidator defines a method for creating a new validator. + rpc CreateValidator(MsgCreateValidator) returns (MsgCreateValidatorResponse); + + // EditValidator defines a method for editing an existing validator. + rpc EditValidator(MsgEditValidator) returns (MsgEditValidatorResponse); + + // Delegate defines a method for performing a delegation of coins + // from a delegator to a validator. + rpc Delegate(MsgDelegate) returns (MsgDelegateResponse); + + // BeginRedelegate defines a method for performing a redelegation + // of coins from a delegator and source validator to a destination validator. + rpc BeginRedelegate(MsgBeginRedelegate) returns (MsgBeginRedelegateResponse); + + // Undelegate defines a method for performing an undelegation from a + // delegate and a validator. + rpc Undelegate(MsgUndelegate) returns (MsgUndelegateResponse); + + // CancelUnbondingDelegation defines a method for performing canceling the unbonding delegation + // and delegate back to previous validator. + // + // Since: cosmos-sdk 0.46 + rpc CancelUnbondingDelegation(MsgCancelUnbondingDelegation) returns (MsgCancelUnbondingDelegationResponse); + + // UpdateParams defines an operation for updating the x/staking module + // parameters. + // Since: cosmos-sdk 0.47 + rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); +} + +// MsgCreateValidator defines a SDK message for creating a new validator. +message MsgCreateValidator { + option (cosmos.msg.v1.signer) = "validator_address"; + option (amino.name) = "cosmos-sdk/MsgCreateValidator"; + + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + Description description = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + CommissionRates commission = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + string min_self_delegation = 3 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + // Deprecated: Use of Delegator Address in MsgCreateValidator is deprecated. + // The validator address bytes and delegator address bytes refer to the same account while creating validator (defer + // only in bech32 notation). + string delegator_address = 4 [(cosmos_proto.scalar) = "cosmos.AddressString", deprecated = true]; + string validator_address = 5 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + google.protobuf.Any pubkey = 6 [(cosmos_proto.accepts_interface) = "cosmos.crypto.PubKey"]; + cosmos.base.v1beta1.Coin value = 7 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// MsgCreateValidatorResponse defines the Msg/CreateValidator response type. +message MsgCreateValidatorResponse {} + +// MsgEditValidator defines a SDK message for editing an existing validator. +message MsgEditValidator { + option (cosmos.msg.v1.signer) = "validator_address"; + option (amino.name) = "cosmos-sdk/MsgEditValidator"; + + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + Description description = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + + // We pass a reference to the new commission rate and min self delegation as + // it's not mandatory to update. If not updated, the deserialized rate will be + // zero with no way to distinguish if an update was intended. + // REF: #2373 + string commission_rate = 3 + [(cosmos_proto.scalar) = "cosmos.Dec", (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec"]; + string min_self_delegation = 4 + [(cosmos_proto.scalar) = "cosmos.Int", (gogoproto.customtype) = "cosmossdk.io/math.Int"]; +} + +// MsgEditValidatorResponse defines the Msg/EditValidator response type. +message MsgEditValidatorResponse {} + +// MsgDelegate defines a SDK message for performing a delegation of coins +// from a delegator to a validator. +message MsgDelegate { + option (cosmos.msg.v1.signer) = "delegator_address"; + option (amino.name) = "cosmos-sdk/MsgDelegate"; + + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// MsgDelegateResponse defines the Msg/Delegate response type. +message MsgDelegateResponse {} + +// MsgBeginRedelegate defines a SDK message for performing a redelegation +// of coins from a delegator and source validator to a destination validator. +message MsgBeginRedelegate { + option (cosmos.msg.v1.signer) = "delegator_address"; + option (amino.name) = "cosmos-sdk/MsgBeginRedelegate"; + + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_src_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + string validator_dst_address = 3 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + cosmos.base.v1beta1.Coin amount = 4 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// MsgBeginRedelegateResponse defines the Msg/BeginRedelegate response type. +message MsgBeginRedelegateResponse { + google.protobuf.Timestamp completion_time = 1 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; +} + +// MsgUndelegate defines a SDK message for performing an undelegation from a +// delegate and a validator. +message MsgUndelegate { + option (cosmos.msg.v1.signer) = "delegator_address"; + option (amino.name) = "cosmos-sdk/MsgUndelegate"; + + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// MsgUndelegateResponse defines the Msg/Undelegate response type. +message MsgUndelegateResponse { + google.protobuf.Timestamp completion_time = 1 + [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, (gogoproto.stdtime) = true]; + + // amount returns the amount of undelegated coins + // + // Since: cosmos-sdk 0.50 + cosmos.base.v1beta1.Coin amount = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// MsgCancelUnbondingDelegation defines the SDK message for performing a cancel unbonding delegation for delegator +// +// Since: cosmos-sdk 0.46 +message MsgCancelUnbondingDelegation { + option (cosmos.msg.v1.signer) = "delegator_address"; + option (amino.name) = "cosmos-sdk/MsgCancelUnbondingDelegation"; + option (gogoproto.equal) = false; + option (gogoproto.goproto_getters) = false; + + string delegator_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string validator_address = 2 [(cosmos_proto.scalar) = "cosmos.ValidatorAddressString"]; + // amount is always less than or equal to unbonding delegation entry balance + cosmos.base.v1beta1.Coin amount = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + // creation_height is the height which the unbonding took place. + int64 creation_height = 4; +} + +// MsgCancelUnbondingDelegationResponse +// +// Since: cosmos-sdk 0.46 +message MsgCancelUnbondingDelegationResponse {} + +// MsgUpdateParams is the Msg/UpdateParams request type. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParams { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "cosmos-sdk/x/staking/MsgUpdateParams"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // params defines the x/staking parameters to update. + // + // NOTE: All parameters must be supplied. + Params params = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +}; + +// MsgUpdateParamsResponse defines the response structure for executing a +// MsgUpdateParams message. +// +// Since: cosmos-sdk 0.47 +message MsgUpdateParamsResponse {}; diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/store/internal/kv/v1beta1/kv.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/store/internal/kv/v1beta1/kv.proto index cccb47b6c1a..4243444acc7 100644 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/store/internal/kv/v1beta1/kv.proto +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/store/internal/kv/v1beta1/kv.proto @@ -5,26 +5,15 @@ import "gogoproto/gogo.proto"; option go_package = "cosmossdk.io/store/internal/kv"; -// This is duplicated from the base kv directory to avoid a circular dependency -// with the cosmos-sdk +// This is duplicated from the base kv directory to avoid a circular dependency with the cosmos-sdk // Pairs defines a repeated slice of Pair objects. -// -// Deprecated: Store v1 is deprecated as of v0.50.x, please use Store v2 types -// instead. message Pairs { - option deprecated = true; - repeated Pair pairs = 1 [(gogoproto.nullable) = false]; } // Pair defines a key/value bytes tuple. -// -// Deprecated: Store v1 is deprecated as of v0.50.x, please use Store v2 types -// instead. message Pair { - option deprecated = true; - bytes key = 1; bytes value = 2; } diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/store/snapshots/v1/snapshot.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/store/snapshots/v1/snapshot.proto index 387fc82e4d5..af49bdaa531 100644 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/store/snapshots/v1/snapshot.proto +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/store/snapshots/v1/snapshot.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package cosmos.store.snapshots.v1; import "gogoproto/gogo.proto"; -import "cosmos_proto/cosmos.proto"; + option go_package = "cosmossdk.io/store/snapshots/types"; // Snapshot contains Tendermint state sync snapshot info. @@ -21,6 +21,7 @@ message Metadata { // SnapshotItem is an item contained in a rootmulti.Store snapshot. // +// Since: cosmos-sdk 0.46 message SnapshotItem { // item is the specific type of snapshot item. oneof item { @@ -29,35 +30,38 @@ message SnapshotItem { SnapshotExtensionMeta extension = 3; SnapshotExtensionPayload extension_payload = 4; } - option (cosmos_proto.message_added_in) = "cosmos-sdk 0.46"; } // SnapshotStoreItem contains metadata about a snapshotted store. +// +// Since: cosmos-sdk 0.46 message SnapshotStoreItem { - string name = 1; - option (cosmos_proto.message_added_in) = "cosmos-sdk 0.46"; + string name = 1; } // SnapshotIAVLItem is an exported IAVL node. +// +// Since: cosmos-sdk 0.46 message SnapshotIAVLItem { bytes key = 1; bytes value = 2; // version is block height int64 version = 3; // height is depth of the tree. - int32 height = 4; - option (cosmos_proto.message_added_in) = "cosmos-sdk 0.46"; + int32 height = 4; } // SnapshotExtensionMeta contains metadata about an external snapshotter. +// +// Since: cosmos-sdk 0.46 message SnapshotExtensionMeta { - string name = 1; - uint32 format = 2; - option (cosmos_proto.message_added_in) = "cosmos-sdk 0.46"; + string name = 1; + uint32 format = 2; } // SnapshotExtensionPayload contains payloads of an external snapshotter. +// +// Since: cosmos-sdk 0.46 message SnapshotExtensionPayload { - bytes payload = 1; - option (cosmos_proto.message_added_in) = "cosmos-sdk 0.46"; -} + bytes payload = 1; +} \ No newline at end of file diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/store/snapshots/v2/snapshot.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/store/snapshots/v2/snapshot.proto deleted file mode 100644 index cc75ed73ef0..00000000000 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/store/snapshots/v2/snapshot.proto +++ /dev/null @@ -1,63 +0,0 @@ -syntax = "proto3"; -package cosmos.store.snapshots.v2; - -import "gogoproto/gogo.proto"; -import "cosmos_proto/cosmos.proto"; -option go_package = "cosmossdk.io/store/v2/snapshots/types"; - -// Snapshot contains Tendermint state sync snapshot info. -message Snapshot { - uint64 height = 1; - uint32 format = 2; - uint32 chunks = 3; - bytes hash = 4; - Metadata metadata = 5 [(gogoproto.nullable) = false]; -} - -// Metadata contains SDK-specific snapshot metadata. -message Metadata { - repeated bytes chunk_hashes = 1; // SHA-256 chunk hashes -} - -// SnapshotItem is an item contained in a rootmulti.Store snapshot. -// -message SnapshotItem { - // item is the specific type of snapshot item. - oneof item { - SnapshotStoreItem store = 1; - SnapshotIAVLItem iavl = 2 [(gogoproto.customname) = "IAVL"]; - SnapshotExtensionMeta extension = 3; - SnapshotExtensionPayload extension_payload = 4; - } - option (cosmos_proto.message_added_in) = "cosmos-sdk 0.46"; -} - -// SnapshotStoreItem contains metadata about a snapshotted store. -message SnapshotStoreItem { - string name = 1; - option (cosmos_proto.message_added_in) = "cosmos-sdk 0.46"; -} - -// SnapshotIAVLItem is an exported IAVL node. -message SnapshotIAVLItem { - bytes key = 1; - bytes value = 2; - // version is block height - int64 version = 3; - // height is depth of the tree. - int32 height = 4; - option (cosmos_proto.message_added_in) = "cosmos-sdk 0.46"; -} - -// SnapshotExtensionMeta contains metadata about an external snapshotter. -message SnapshotExtensionMeta { - string name = 1; - uint32 format = 2; - option (cosmos_proto.message_added_in) = "cosmos-sdk 0.46"; -} - -// SnapshotExtensionPayload contains payloads of an external snapshotter. -message SnapshotExtensionPayload { - bytes payload = 1; - option (cosmos_proto.message_added_in) = "cosmos-sdk 0.46"; -} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/store/streaming/abci/grpc.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/store/streaming/abci/grpc.proto index ed77c4c0fb1..25366cdbdcd 100644 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/store/streaming/abci/grpc.proto +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/store/streaming/abci/grpc.proto @@ -2,16 +2,15 @@ syntax = "proto3"; package cosmos.store.streaming.abci; -import "cometbft/abci/v1/types.proto"; +import "tendermint/abci/types.proto"; import "cosmos/store/v1beta1/listening.proto"; option go_package = "cosmossdk.io/store/streaming/abci"; // ListenEndBlockRequest is the request type for the ListenEndBlock RPC method message ListenFinalizeBlockRequest { - - cometbft.abci.v1.FinalizeBlockRequest req = 1; - cometbft.abci.v1.FinalizeBlockResponse res = 2; + tendermint.abci.RequestFinalizeBlock req = 1; + tendermint.abci.ResponseFinalizeBlock res = 2; } // ListenEndBlockResponse is the response type for the ListenEndBlock RPC method @@ -19,11 +18,9 @@ message ListenFinalizeBlockResponse {} // ListenCommitRequest is the request type for the ListenCommit RPC method message ListenCommitRequest { - - // explicitly pass in block height as ResponseCommit does not contain this - // info - int64 block_height = 1; - cometbft.abci.v1.CommitResponse res = 2; + // explicitly pass in block height as ResponseCommit does not contain this info + int64 block_height = 1; + tendermint.abci.ResponseCommit res = 2; repeated cosmos.store.v1beta1.StoreKVPair change_set = 3; } @@ -32,9 +29,7 @@ message ListenCommitResponse {} // ABCIListenerService is the service for the BaseApp ABCIListener interface service ABCIListenerService { - - // ListenFinalizeBlock is the corresponding endpoint for - // ABCIListener.ListenEndBlock + // ListenFinalizeBlock is the corresponding endpoint for ABCIListener.ListenEndBlock rpc ListenFinalizeBlock(ListenFinalizeBlockRequest) returns (ListenFinalizeBlockResponse); // ListenCommit is the corresponding endpoint for ABCIListener.ListenCommit rpc ListenCommit(ListenCommitRequest) returns (ListenCommitResponse); diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/store/v1beta1/commit_info.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/store/v1beta1/commit_info.proto index 36410eb8ef3..37459a0d05a 100644 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/store/v1beta1/commit_info.proto +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/store/v1beta1/commit_info.proto @@ -16,7 +16,6 @@ message CommitInfo { // StoreInfo defines store-specific commit information. It contains a reference // between a store name and the commit ID. -// message StoreInfo { string name = 1; CommitID commit_id = 2 [(gogoproto.nullable) = false]; diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/store/v1beta1/listening.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/store/v1beta1/listening.proto index 93a932ef45f..14bc2e7a78f 100644 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/store/v1beta1/listening.proto +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/store/v1beta1/listening.proto @@ -1,17 +1,16 @@ syntax = "proto3"; package cosmos.store.v1beta1; -import "cometbft/abci/v1/types.proto"; -import "cosmos_proto/cosmos.proto"; +import "tendermint/abci/types.proto"; option go_package = "cosmossdk.io/store/types"; -// StoreKVPair is a KVStore KVPair used for listening to state changes (Sets and -// Deletes) It optionally includes the StoreKey for the originating KVStore and -// a Boolean flag to distinguish between Sets and Deletes +// StoreKVPair is a KVStore KVPair used for listening to state changes (Sets and Deletes) +// It optionally includes the StoreKey for the originating KVStore and a Boolean flag to distinguish between Sets and +// Deletes +// +// Since: cosmos-sdk 0.43 message StoreKVPair { - option (cosmos_proto.message_added_in) = "cosmos-sdk 0.43"; - string store_key = 1; // the store key for the KVStore this pair originates from bool delete = 2; // true indicates a delete operation, false indicates a set operation bytes key = 3; @@ -21,10 +20,9 @@ message StoreKVPair { // BlockMetadata contains all the abci event data of a block // the file streamer dump them into files together with the state changes. message BlockMetadata { - - cometbft.abci.v1.CommitResponse response_commit = 6; - cometbft.abci.v1.FinalizeBlockRequest request_finalize_block = 7; - cometbft.abci.v1.FinalizeBlockResponse response_finalize_block = 8; + tendermint.abci.ResponseCommit response_commit = 6; + tendermint.abci.RequestFinalizeBlock request_finalize_block = 7; + tendermint.abci.ResponseFinalizeBlock response_finalize_block = 8; // TODO: should we renumber this? reserved 1, 2, 3, 4, 5; // reserved for from previous use in comet <= 0.37 } diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/streaming/v1/grpc.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/streaming/v1/grpc.proto deleted file mode 100644 index 280510e11ea..00000000000 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/streaming/v1/grpc.proto +++ /dev/null @@ -1,71 +0,0 @@ -syntax = "proto3"; - -package cosmos.streaming.v1; - -option go_package = "cosmossdk.io/server/v2/streaming"; - -// ListenDeliverBlockRequest is the request type for the ListenDeliverBlock RPC method -message ListenDeliverBlockRequest { - int64 block_height = 1; - repeated bytes txs = 2; - repeated Event events = 3; - repeated ExecTxResult tx_results = 4; -} - -// ListenDeliverBlockResponse is the response type for the ListenDeliverBlock RPC method -message ListenDeliverBlockResponse {} - -// ListenStateChangesRequest is the request type for the ListenStateChanges RPC method -message ListenStateChangesRequest { - int64 block_height = 1; - repeated StoreKVPair change_set = 2; - bytes app_hash = 3; -} - -// ListenStateChangesResponse is the response type for the ListenStateChanges RPC method -message ListenStateChangesResponse {} - -// ListenerService is the service for the Listener interface -service ListenerService { - // ListenDeliverBlock is the corresponding endpoint for Listener.ListenDeliverBlock - rpc ListenDeliverBlock(ListenDeliverBlockRequest) returns (ListenDeliverBlockResponse); - // ListenStateChanges is the corresponding endpoint for Listener.ListenStateChanges - rpc ListenStateChanges(ListenStateChangesRequest) returns (ListenStateChangesResponse); -} - -// StoreKVPair is a single key-value pair, associated with a store. -message StoreKVPair { - // address defines the address of the account the state changes are coming from. - // In case of modules you can expect a stringified - bytes address = 1; - // key defines the key of the address that changed. - bytes key = 2; - // value defines the value that changed, empty in case of removal. - bytes value = 3; - // delete defines if the key was removed. - bool delete = 4; // true indicates a delete operation, false indicates a set operation -} - -// Event is a single event, associated with a transaction. -message Event { - string type = 1; - repeated EventAttribute attributes = 2; -} - -// EventAttribute is a single key-value pair, associated with an event. -message EventAttribute { - string key = 1; - string value = 2; -} - -// ExecTxResult contains results of executing one individual transaction. -message ExecTxResult { - uint32 code = 1; - bytes data = 2; - string log = 3; - string info = 4; - int64 gas_wanted = 5; - int64 gas_used = 6; - repeated Event events = 7; - string codespace = 8; -} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/tx/config/v1/config.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/tx/config/v1/config.proto index ec3b3b1b244..15553a2821e 100644 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/tx/config/v1/config.proto +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/tx/config/v1/config.proto @@ -7,7 +7,7 @@ import "cosmos/app/v1alpha1/module.proto"; // Config is the config object of the x/auth/tx package. message Config { option (cosmos.app.v1alpha1.module) = { - go_import: "cosmossdk.io/x/auth/tx" + go_import: "github.com/cosmos/cosmos-sdk/x/auth/tx" }; // skip_ante_handler defines whether the ante handler registration should be skipped in case an app wants to override @@ -17,4 +17,4 @@ message Config { // skip_post_handler defines whether the post handler registration should be skipped in case an app wants to override // this functionality. bool skip_post_handler = 2; -} +} \ No newline at end of file diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/tx/signing/v1beta1/signing.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/tx/signing/v1beta1/signing.proto index 73b199815a0..584eff4e41f 100644 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/tx/signing/v1beta1/signing.proto +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/tx/signing/v1beta1/signing.proto @@ -51,12 +51,7 @@ enum SignMode { // EIP-191 in the future. // // Since: cosmos-sdk 0.45.2 - // Deprecated: post 0.47.x Sign mode refers to a method of encoding string data for - // signing, but in the SDK, it also refers to how to encode a transaction into a string. - // This opens the possibility for additional EIP191 sign modes, like SIGN_MODE_EIP_191_TEXTUAL, - // SIGN_MODE_EIP_191_LEGACY_JSON, and more. - // Each new EIP191 sign mode should be accompanied by an associated ADR. - SIGN_MODE_EIP_191 = 191 [deprecated = true]; + SIGN_MODE_EIP_191 = 191; } // SignatureDescriptors wraps multiple SignatureDescriptor's. diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/tx/v1beta1/service.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/tx/v1beta1/service.proto index fbd50344430..7e19a186525 100644 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/tx/v1beta1/service.proto +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/tx/v1beta1/service.proto @@ -5,9 +5,8 @@ import "google/api/annotations.proto"; import "cosmos/base/abci/v1beta1/abci.proto"; import "cosmos/tx/v1beta1/tx.proto"; import "cosmos/base/query/v1beta1/pagination.proto"; -import "cometbft/types/v1/block.proto"; -import "cometbft/types/v1/types.proto"; -import "cosmos_proto/cosmos.proto"; +import "tendermint/types/block.proto"; +import "tendermint/types/types.proto"; option go_package = "github.com/cosmos/cosmos-sdk/types/tx"; @@ -36,41 +35,46 @@ service Service { option (google.api.http).get = "/cosmos/tx/v1beta1/txs"; } // GetBlockWithTxs fetches a block with decoded txs. + // + // Since: cosmos-sdk 0.45.2 rpc GetBlockWithTxs(GetBlockWithTxsRequest) returns (GetBlockWithTxsResponse) { - option (google.api.http).get = "/cosmos/tx/v1beta1/txs/block/{height}"; - option (cosmos_proto.method_added_in) = "cosmos-sdk 0.45.2"; + option (google.api.http).get = "/cosmos/tx/v1beta1/txs/block/{height}"; } // TxDecode decodes the transaction. + // + // Since: cosmos-sdk 0.47 rpc TxDecode(TxDecodeRequest) returns (TxDecodeResponse) { option (google.api.http) = { post: "/cosmos/tx/v1beta1/decode" body: "*" }; - option (cosmos_proto.method_added_in) = "cosmos-sdk 0.47"; } // TxEncode encodes the transaction. + // + // Since: cosmos-sdk 0.47 rpc TxEncode(TxEncodeRequest) returns (TxEncodeResponse) { option (google.api.http) = { post: "/cosmos/tx/v1beta1/encode" body: "*" }; - option (cosmos_proto.method_added_in) = "cosmos-sdk 0.47"; } // TxEncodeAmino encodes an Amino transaction from JSON to encoded bytes. + // + // Since: cosmos-sdk 0.47 rpc TxEncodeAmino(TxEncodeAminoRequest) returns (TxEncodeAminoResponse) { option (google.api.http) = { post: "/cosmos/tx/v1beta1/encode/amino" body: "*" }; - option (cosmos_proto.method_added_in) = "cosmos-sdk 0.47"; } // TxDecodeAmino decodes an Amino transaction from encoded bytes to JSON. + // + // Since: cosmos-sdk 0.47 rpc TxDecodeAmino(TxDecodeAminoRequest) returns (TxDecodeAminoResponse) { option (google.api.http) = { post: "/cosmos/tx/v1beta1/decode/amino" body: "*" }; - option (cosmos_proto.method_added_in) = "cosmos-sdk 0.47"; } } @@ -78,12 +82,12 @@ service Service { // RPC method. message GetTxsEventRequest { // events is the list of transaction event type. - // Deprecated: post v0.47.x use query instead, which should contain a valid + // Deprecated post v0.47.x: use query instead, which should contain a valid // events query. repeated string events = 1 [deprecated = true]; // pagination defines a pagination for the request. - // Deprecated: post v0.46.x use page and limit instead. + // Deprecated post v0.46.x: use page and limit instead. cosmos.base.query.v1beta1.PageRequest pagination = 2 [deprecated = true]; OrderBy order_by = 3; @@ -98,7 +102,9 @@ message GetTxsEventRequest { // query defines the transaction event query that is proxied to Tendermint's // TxSearch RPC method. The query must be valid. - string query = 6 [(cosmos_proto.field_added_in) = "cosmos-sdk 0.50"]; + // + // Since cosmos-sdk 0.50 + string query = 6; } // OrderBy defines the sorting order @@ -120,7 +126,7 @@ message GetTxsEventResponse { // tx_responses is the list of queried TxResponses. repeated cosmos.base.abci.v1beta1.TxResponse tx_responses = 2; // pagination defines a pagination for the response. - // Deprecated: post v0.46.x use total instead. + // Deprecated post v0.46.x: use total instead. cosmos.base.query.v1beta1.PageResponse pagination = 3 [deprecated = true]; // total is total number of results available uint64 total = 4; @@ -139,7 +145,7 @@ message BroadcastTxRequest { enum BroadcastMode { // zero-value for mode ordering BROADCAST_MODE_UNSPECIFIED = 0; - // Deprecated: use BROADCAST_MODE_SYNC instead, + // DEPRECATED: use BROADCAST_MODE_SYNC instead, // BROADCAST_MODE_BLOCK is not supported by the SDK from v0.47.x onwards. BROADCAST_MODE_BLOCK = 1 [deprecated = true]; // BROADCAST_MODE_SYNC defines a tx broadcasting mode where the client waits @@ -164,7 +170,9 @@ message SimulateRequest { // Deprecated. Send raw tx bytes instead. cosmos.tx.v1beta1.Tx tx = 1 [deprecated = true]; // tx_bytes is the raw transaction. - bytes tx_bytes = 2 [(cosmos_proto.field_added_in) = "cosmos-sdk 0.43"]; + // + // Since: cosmos-sdk 0.43 + bytes tx_bytes = 2; } // SimulateResponse is the response type for the @@ -193,82 +201,92 @@ message GetTxResponse { // GetBlockWithTxsRequest is the request type for the Service.GetBlockWithTxs // RPC method. +// +// Since: cosmos-sdk 0.45.2 message GetBlockWithTxsRequest { // height is the height of the block to query. int64 height = 1; // pagination defines a pagination for the request. cosmos.base.query.v1beta1.PageRequest pagination = 2; - option (cosmos_proto.message_added_in) = "cosmos-sdk 0.45.2"; } // GetBlockWithTxsResponse is the response type for the Service.GetBlockWithTxs // method. +// +// Since: cosmos-sdk 0.45.2 message GetBlockWithTxsResponse { // txs are the transactions in the block. repeated cosmos.tx.v1beta1.Tx txs = 1; - .cometbft.types.v1.BlockID block_id = 2; - .cometbft.types.v1.Block block = 3; + .tendermint.types.BlockID block_id = 2; + .tendermint.types.Block block = 3; // pagination defines a pagination for the response. cosmos.base.query.v1beta1.PageResponse pagination = 4; - option (cosmos_proto.message_added_in) = "cosmos-sdk 0.45.2"; } // TxDecodeRequest is the request type for the Service.TxDecode // RPC method. +// +// Since: cosmos-sdk 0.47 message TxDecodeRequest { // tx_bytes is the raw transaction. - bytes tx_bytes = 1; - option (cosmos_proto.message_added_in) = "cosmos-sdk 0.47"; + bytes tx_bytes = 1; } // TxDecodeResponse is the response type for the // Service.TxDecode method. +// +// Since: cosmos-sdk 0.47 message TxDecodeResponse { // tx is the decoded transaction. - cosmos.tx.v1beta1.Tx tx = 1; - option (cosmos_proto.message_added_in) = "cosmos-sdk 0.47"; + cosmos.tx.v1beta1.Tx tx = 1; } // TxEncodeRequest is the request type for the Service.TxEncode // RPC method. +// +// Since: cosmos-sdk 0.47 message TxEncodeRequest { // tx is the transaction to encode. - cosmos.tx.v1beta1.Tx tx = 1; - option (cosmos_proto.message_added_in) = "cosmos-sdk 0.47"; + cosmos.tx.v1beta1.Tx tx = 1; } // TxEncodeResponse is the response type for the // Service.TxEncode method. +// +// Since: cosmos-sdk 0.47 message TxEncodeResponse { // tx_bytes is the encoded transaction bytes. - bytes tx_bytes = 1; - option (cosmos_proto.message_added_in) = "cosmos-sdk 0.47"; + bytes tx_bytes = 1; } // TxEncodeAminoRequest is the request type for the Service.TxEncodeAmino // RPC method. +// +// Since: cosmos-sdk 0.47 message TxEncodeAminoRequest { - string amino_json = 1; - option (cosmos_proto.message_added_in) = "cosmos-sdk 0.47"; + string amino_json = 1; } // TxEncodeAminoResponse is the response type for the Service.TxEncodeAmino // RPC method. +// +// Since: cosmos-sdk 0.47 message TxEncodeAminoResponse { - bytes amino_binary = 1; - option (cosmos_proto.message_added_in) = "cosmos-sdk 0.47"; + bytes amino_binary = 1; } // TxDecodeAminoRequest is the request type for the Service.TxDecodeAmino // RPC method. +// +// Since: cosmos-sdk 0.47 message TxDecodeAminoRequest { - bytes amino_binary = 1; - option (cosmos_proto.message_added_in) = "cosmos-sdk 0.47"; + bytes amino_binary = 1; } // TxDecodeAminoResponse is the response type for the Service.TxDecodeAmino // RPC method. +// +// Since: cosmos-sdk 0.47 message TxDecodeAminoResponse { - string amino_json = 1; - option (cosmos_proto.message_added_in) = "cosmos-sdk 0.47"; + string amino_json = 1; } diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/tx/v1beta1/tx.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/tx/v1beta1/tx.proto index 7b78cd6d07e..cfaac70449f 100644 --- a/scripts/makefiles/swagger-proto/third_party/cosmos/tx/v1beta1/tx.proto +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/tx/v1beta1/tx.proto @@ -1,14 +1,13 @@ syntax = "proto3"; package cosmos.tx.v1beta1; -import "cosmos_proto/cosmos.proto"; import "amino/amino.proto"; import "gogoproto/gogo.proto"; import "cosmos/crypto/multisig/v1beta1/multisig.proto"; import "cosmos/base/v1beta1/coin.proto"; import "cosmos/tx/signing/v1beta1/signing.proto"; import "google/protobuf/any.proto"; -import "google/protobuf/timestamp.proto"; +import "cosmos_proto/cosmos.proto"; option go_package = "github.com/cosmos/cosmos-sdk/types/tx"; @@ -68,8 +67,9 @@ message SignDoc { // SignDocDirectAux is the type used for generating sign bytes for // SIGN_MODE_DIRECT_AUX. +// +// Since: cosmos-sdk 0.46 message SignDocDirectAux { - option (cosmos_proto.message_added_in) = "cosmos-sdk 0.46"; // body_bytes is protobuf serialization of a TxBody that matches the // representation in TxRaw. bytes body_bytes = 1; @@ -88,7 +88,7 @@ message SignDocDirectAux { // sequence is the sequence number of the signing account. uint64 sequence = 5; - // tips have been deprecated and should not be used + // tips have been depreacted and should not be used Tip tip = 6 [deprecated = true]; } @@ -105,33 +105,13 @@ message TxBody { // memo is any arbitrary note/comment to be added to the transaction. // WARNING: in clients, any publicly exposed text should not be called memo, - // but should be called `note` instead (see - // https://github.com/cosmos/cosmos-sdk/issues/9122). + // but should be called `note` instead (see https://github.com/cosmos/cosmos-sdk/issues/9122). string memo = 2; - // timeout_height is the block height after which this transaction will not - // be processed by the chain. + // timeout is the block height after which this transaction will not + // be processed by the chain uint64 timeout_height = 3; - // unordered, when set to true, indicates that the transaction signer(s) - // intend for the transaction to be evaluated and executed in an un-ordered - // fashion. Specifically, the account's nonce will NOT be checked or - // incremented, which allows for fire-and-forget as well as concurrent - // transaction execution. - // - // Note, when set to true, the existing 'timeout_height' value must - // be set and will be used to correspond to a time_stamp in which the transaction is deemed - // valid. - bool unordered = 4; - - // timeout_timestamp is the block time after which this transaction will not - // be processed by the chain. - // - // Note, if unordered=true this value MUST be set - // and will act as a short-lived TTL in which the transaction is deemed valid - // and kept in memory to prevent duplicates. - google.protobuf.Timestamp timeout_timestamp = 5 [(gogoproto.nullable) = true, (gogoproto.stdtime) = true]; - // extension_options are arbitrary options that can be added by chains // when the default options are not sufficient. If any of these are present // and can't be handled, the transaction will be rejected @@ -161,7 +141,9 @@ message AuthInfo { // // This field is ignored if the chain didn't enable tips, i.e. didn't add the // `TipDecorator` in its posthandler. - Tip tip = 3 [deprecated = true, (cosmos_proto.field_added_in) = "cosmos-sdk 0.46"]; + // + // Since: cosmos-sdk 0.46 + Tip tip = 3 [deprecated = true]; } // SignerInfo describes the public key and signing mode of a single top-level @@ -215,7 +197,7 @@ message ModeInfo { // Fee includes the amount of coins paid in fees and the maximum // gas to be used by the transaction. The ratio yields an effective "gasprice", -// which must be above some minimum to be accepted into the mempool. +// which must be above some miminum to be accepted into the mempool. message Fee { // amount is the amount of coins to be paid as a fee repeated cosmos.base.v1beta1.Coin amount = 1 [ @@ -229,23 +211,22 @@ message Fee { // before an out of gas error occurs uint64 gas_limit = 2; - // if unset, the first signer is responsible for paying the fees. If set, the - // specified account must pay the fees. the payer must be a tx signer (and - // thus have signed this field in AuthInfo). setting this field does *not* - // change the ordering of required signers for the transaction. + // if unset, the first signer is responsible for paying the fees. If set, the specified account must pay the fees. + // the payer must be a tx signer (and thus have signed this field in AuthInfo). + // setting this field does *not* change the ordering of required signers for the transaction. string payer = 3 [(cosmos_proto.scalar) = "cosmos.AddressString"]; - // if set, the fee payer (either the first signer or the value of the payer - // field) requests that a fee grant be used to pay fees instead of the fee - // payer's own balance. If an appropriate fee grant does not exist or the - // chain does not support fee grants, this will fail + // if set, the fee payer (either the first signer or the value of the payer field) requests that a fee grant be used + // to pay fees instead of the fee payer's own balance. If an appropriate fee grant does not exist or the chain does + // not support fee grants, this will fail string granter = 4 [(cosmos_proto.scalar) = "cosmos.AddressString"]; } // Tip is the tip used for meta-transactions. +// +// Since: cosmos-sdk 0.46 message Tip { - option deprecated = true; - option (cosmos_proto.message_added_in) = "cosmos-sdk 0.46"; + option deprecated = true; // amount is the amount of the tip repeated cosmos.base.v1beta1.Coin amount = 1 [ (gogoproto.nullable) = false, @@ -261,9 +242,9 @@ message Tip { // tipper) builds and sends to the fee payer (who will build and broadcast the // actual tx). AuxSignerData is not a valid tx in itself, and will be rejected // by the node if sent directly as-is. +// +// Since: cosmos-sdk 0.46 message AuxSignerData { - option (cosmos_proto.message_added_in) = "cosmos-sdk 0.46"; - // address is the bech32-encoded address of the auxiliary signer. If using // AuxSignerData across different chains, the bech32 prefix of the target // chain (where the final transaction is broadcasted) should be used. diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/upgrade/module/v1/module.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/upgrade/module/v1/module.proto new file mode 100644 index 00000000000..6493f5c7ff8 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/upgrade/module/v1/module.proto @@ -0,0 +1,15 @@ +syntax = "proto3"; + +package cosmos.upgrade.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the upgrade module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "cosmossdk.io/x/upgrade" + }; + + // authority defines the custom module authority. If not set, defaults to the governance module. + string authority = 1; +} \ No newline at end of file diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/upgrade/v1beta1/query.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/upgrade/v1beta1/query.proto new file mode 100644 index 00000000000..2b90a78888f --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/upgrade/v1beta1/query.proto @@ -0,0 +1,122 @@ +syntax = "proto3"; +package cosmos.upgrade.v1beta1; + +import "google/api/annotations.proto"; +import "cosmos/upgrade/v1beta1/upgrade.proto"; + +option go_package = "cosmossdk.io/x/upgrade/types"; + +// Query defines the gRPC upgrade querier service. +service Query { + // CurrentPlan queries the current upgrade plan. + rpc CurrentPlan(QueryCurrentPlanRequest) returns (QueryCurrentPlanResponse) { + option (google.api.http).get = "/cosmos/upgrade/v1beta1/current_plan"; + } + + // AppliedPlan queries a previously applied upgrade plan by its name. + rpc AppliedPlan(QueryAppliedPlanRequest) returns (QueryAppliedPlanResponse) { + option (google.api.http).get = "/cosmos/upgrade/v1beta1/applied_plan/{name}"; + } + + // UpgradedConsensusState queries the consensus state that will serve + // as a trusted kernel for the next version of this chain. It will only be + // stored at the last height of this chain. + // UpgradedConsensusState RPC not supported with legacy querier + // This rpc is deprecated now that IBC has its own replacement + // (https://github.com/cosmos/ibc-go/blob/2c880a22e9f9cc75f62b527ca94aa75ce1106001/proto/ibc/core/client/v1/query.proto#L54) + rpc UpgradedConsensusState(QueryUpgradedConsensusStateRequest) returns (QueryUpgradedConsensusStateResponse) { + option deprecated = true; + option (google.api.http).get = "/cosmos/upgrade/v1beta1/upgraded_consensus_state/{last_height}"; + } + + // ModuleVersions queries the list of module versions from state. + // + // Since: cosmos-sdk 0.43 + rpc ModuleVersions(QueryModuleVersionsRequest) returns (QueryModuleVersionsResponse) { + option (google.api.http).get = "/cosmos/upgrade/v1beta1/module_versions"; + } + + // Returns the account with authority to conduct upgrades + // + // Since: cosmos-sdk 0.46 + rpc Authority(QueryAuthorityRequest) returns (QueryAuthorityResponse) { + option (google.api.http).get = "/cosmos/upgrade/v1beta1/authority"; + } +} + +// QueryCurrentPlanRequest is the request type for the Query/CurrentPlan RPC +// method. +message QueryCurrentPlanRequest {} + +// QueryCurrentPlanResponse is the response type for the Query/CurrentPlan RPC +// method. +message QueryCurrentPlanResponse { + // plan is the current upgrade plan. + Plan plan = 1; +} + +// QueryCurrentPlanRequest is the request type for the Query/AppliedPlan RPC +// method. +message QueryAppliedPlanRequest { + // name is the name of the applied plan to query for. + string name = 1; +} + +// QueryAppliedPlanResponse is the response type for the Query/AppliedPlan RPC +// method. +message QueryAppliedPlanResponse { + // height is the block height at which the plan was applied. + int64 height = 1; +} + +// QueryUpgradedConsensusStateRequest is the request type for the Query/UpgradedConsensusState +// RPC method. +message QueryUpgradedConsensusStateRequest { + option deprecated = true; + + // last height of the current chain must be sent in request + // as this is the height under which next consensus state is stored + int64 last_height = 1; +} + +// QueryUpgradedConsensusStateResponse is the response type for the Query/UpgradedConsensusState +// RPC method. +message QueryUpgradedConsensusStateResponse { + option deprecated = true; + reserved 1; + + // Since: cosmos-sdk 0.43 + bytes upgraded_consensus_state = 2; +} + +// QueryModuleVersionsRequest is the request type for the Query/ModuleVersions +// RPC method. +// +// Since: cosmos-sdk 0.43 +message QueryModuleVersionsRequest { + // module_name is a field to query a specific module + // consensus version from state. Leaving this empty will + // fetch the full list of module versions from state + string module_name = 1; +} + +// QueryModuleVersionsResponse is the response type for the Query/ModuleVersions +// RPC method. +// +// Since: cosmos-sdk 0.43 +message QueryModuleVersionsResponse { + // module_versions is a list of module names with their consensus versions. + repeated ModuleVersion module_versions = 1; +} + +// QueryAuthorityRequest is the request type for Query/Authority +// +// Since: cosmos-sdk 0.46 +message QueryAuthorityRequest {} + +// QueryAuthorityResponse is the response type for Query/Authority +// +// Since: cosmos-sdk 0.46 +message QueryAuthorityResponse { + string address = 1; +} \ No newline at end of file diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/upgrade/v1beta1/tx.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/upgrade/v1beta1/tx.proto new file mode 100644 index 00000000000..4a6c9ee11fb --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/upgrade/v1beta1/tx.proto @@ -0,0 +1,62 @@ +// Since: cosmos-sdk 0.46 +syntax = "proto3"; +package cosmos.upgrade.v1beta1; + +import "gogoproto/gogo.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/upgrade/v1beta1/upgrade.proto"; +import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; + +option go_package = "cosmossdk.io/x/upgrade/types"; + +// Msg defines the upgrade Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // SoftwareUpgrade is a governance operation for initiating a software upgrade. + // + // Since: cosmos-sdk 0.46 + rpc SoftwareUpgrade(MsgSoftwareUpgrade) returns (MsgSoftwareUpgradeResponse); + + // CancelUpgrade is a governance operation for cancelling a previously + // approved software upgrade. + // + // Since: cosmos-sdk 0.46 + rpc CancelUpgrade(MsgCancelUpgrade) returns (MsgCancelUpgradeResponse); +} + +// MsgSoftwareUpgrade is the Msg/SoftwareUpgrade request type. +// +// Since: cosmos-sdk 0.46 +message MsgSoftwareUpgrade { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "cosmos-sdk/MsgSoftwareUpgrade"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + + // plan is the upgrade plan. + Plan plan = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// MsgSoftwareUpgradeResponse is the Msg/SoftwareUpgrade response type. +// +// Since: cosmos-sdk 0.46 +message MsgSoftwareUpgradeResponse {} + +// MsgCancelUpgrade is the Msg/CancelUpgrade request type. +// +// Since: cosmos-sdk 0.46 +message MsgCancelUpgrade { + option (cosmos.msg.v1.signer) = "authority"; + option (amino.name) = "cosmos-sdk/MsgCancelUpgrade"; + + // authority is the address that controls the module (defaults to x/gov unless overwritten). + string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; +} + +// MsgCancelUpgradeResponse is the Msg/CancelUpgrade response type. +// +// Since: cosmos-sdk 0.46 +message MsgCancelUpgradeResponse {} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/upgrade/v1beta1/upgrade.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/upgrade/v1beta1/upgrade.proto new file mode 100644 index 00000000000..5dfb289db53 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/upgrade/v1beta1/upgrade.proto @@ -0,0 +1,94 @@ +syntax = "proto3"; +package cosmos.upgrade.v1beta1; + +import "google/protobuf/any.proto"; +import "gogoproto/gogo.proto"; +import "google/protobuf/timestamp.proto"; +import "cosmos_proto/cosmos.proto"; +import "amino/amino.proto"; + +option go_package = "cosmossdk.io/x/upgrade/types"; +option (gogoproto.goproto_getters_all) = false; + +// Plan specifies information about a planned upgrade and when it should occur. +message Plan { + option (amino.name) = "cosmos-sdk/Plan"; + option (gogoproto.equal) = true; + + // Sets the name for the upgrade. This name will be used by the upgraded + // version of the software to apply any special "on-upgrade" commands during + // the first BeginBlock method after the upgrade is applied. It is also used + // to detect whether a software version can handle a given upgrade. If no + // upgrade handler with this name has been set in the software, it will be + // assumed that the software is out-of-date when the upgrade Time or Height is + // reached and the software will exit. + string name = 1; + + // Deprecated: Time based upgrades have been deprecated. Time based upgrade logic + // has been removed from the SDK. + // If this field is not empty, an error will be thrown. + google.protobuf.Timestamp time = 2 + [deprecated = true, (gogoproto.stdtime) = true, (gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + // The height at which the upgrade must be performed. + int64 height = 3; + + // Any application specific upgrade info to be included on-chain + // such as a git commit that validators could automatically upgrade to + string info = 4; + + // Deprecated: UpgradedClientState field has been deprecated. IBC upgrade logic has been + // moved to the IBC module in the sub module 02-client. + // If this field is not empty, an error will be thrown. + google.protobuf.Any upgraded_client_state = 5 [deprecated = true]; +} + +// SoftwareUpgradeProposal is a gov Content type for initiating a software +// upgrade. +// Deprecated: This legacy proposal is deprecated in favor of Msg-based gov +// proposals, see MsgSoftwareUpgrade. +message SoftwareUpgradeProposal { + option deprecated = true; + option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; + option (amino.name) = "cosmos-sdk/SoftwareUpgradeProposal"; + option (gogoproto.equal) = true; + + // title of the proposal + string title = 1; + + // description of the proposal + string description = 2; + + // plan of the proposal + Plan plan = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// CancelSoftwareUpgradeProposal is a gov Content type for cancelling a software +// upgrade. +// Deprecated: This legacy proposal is deprecated in favor of Msg-based gov +// proposals, see MsgCancelUpgrade. +message CancelSoftwareUpgradeProposal { + option deprecated = true; + option (cosmos_proto.implements_interface) = "cosmos.gov.v1beta1.Content"; + option (amino.name) = "cosmos-sdk/CancelSoftwareUpgradeProposal"; + option (gogoproto.equal) = true; + + // title of the proposal + string title = 1; + + // description of the proposal + string description = 2; +} + +// ModuleVersion specifies a module and its consensus version. +// +// Since: cosmos-sdk 0.43 +message ModuleVersion { + option (gogoproto.equal) = true; + + // name of the app module + string name = 1; + + // consensus version of the app module + uint64 version = 2; +} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/vesting/module/v1/module.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/vesting/module/v1/module.proto new file mode 100644 index 00000000000..88bb89c1871 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/vesting/module/v1/module.proto @@ -0,0 +1,12 @@ +syntax = "proto3"; + +package cosmos.vesting.module.v1; + +import "cosmos/app/v1alpha1/module.proto"; + +// Module is the config object of the vesting module. +message Module { + option (cosmos.app.v1alpha1.module) = { + go_import: "github.com/cosmos/cosmos-sdk/x/auth/vesting" + }; +} \ No newline at end of file diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/vesting/v1beta1/tx.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/vesting/v1beta1/tx.proto new file mode 100644 index 00000000000..fab5b4e31d9 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/vesting/v1beta1/tx.proto @@ -0,0 +1,155 @@ +syntax = "proto3"; +package cosmos.vesting.v1beta1; + +import "gogoproto/gogo.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos_proto/cosmos.proto"; +import "cosmos/vesting/v1beta1/vesting.proto"; +import "cosmos/msg/v1/msg.proto"; +import "amino/amino.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/auth/vesting/types"; + +// Msg defines the bank Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // CreateVestingAccount defines a method that enables creating a vesting + // account. + rpc CreateVestingAccount(MsgCreateVestingAccount) returns (MsgCreateVestingAccountResponse); + // CreatePermanentLockedAccount defines a method that enables creating a permanent + // locked account. + // + // Since: cosmos-sdk 0.46 + rpc CreatePermanentLockedAccount(MsgCreatePermanentLockedAccount) returns (MsgCreatePermanentLockedAccountResponse); + // CreatePeriodicVestingAccount defines a method that enables creating a + // periodic vesting account. + // + // Since: cosmos-sdk 0.46 + rpc CreatePeriodicVestingAccount(MsgCreatePeriodicVestingAccount) returns (MsgCreatePeriodicVestingAccountResponse); + // CreateClawbackVestingAccount creats a vesting account that is subject to + // clawback and the configuration of vesting and lockup schedules. + rpc CreateClawbackVestingAccount(MsgCreateClawbackVestingAccount) returns (MsgCreateClawbackVestingAccountResponse); + // Clawback removes the unvested tokens from a ClawbackVestingAccount. + rpc Clawback(MsgClawback) returns (MsgClawbackResponse); +} + +// MsgCreateVestingAccount defines a message that enables creating a vesting +// account. +message MsgCreateVestingAccount { + option (cosmos.msg.v1.signer) = "from_address"; + option (amino.name) = "cosmos-sdk/MsgCreateVestingAccount"; + + option (gogoproto.equal) = true; + + string from_address = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + string to_address = 2 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + repeated cosmos.base.v1beta1.Coin amount = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + + // end of vesting as unix time (in seconds). + int64 end_time = 4; + bool delayed = 5; +} + +// MsgCreateVestingAccountResponse defines the Msg/CreateVestingAccount response type. +message MsgCreateVestingAccountResponse {} + +// MsgCreatePermanentLockedAccount defines a message that enables creating a permanent +// locked account. +// +// Since: cosmos-sdk 0.46 +message MsgCreatePermanentLockedAccount { + option (cosmos.msg.v1.signer) = "from_address"; + option (amino.name) = "cosmos-sdk/MsgCreatePermLockedAccount"; + option (gogoproto.equal) = true; + + string from_address = 1 [(gogoproto.moretags) = "yaml:\"from_address\""]; + string to_address = 2 [(gogoproto.moretags) = "yaml:\"to_address\""]; + repeated cosmos.base.v1beta1.Coin amount = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +// MsgCreatePermanentLockedAccountResponse defines the Msg/CreatePermanentLockedAccount response type. +// +// Since: cosmos-sdk 0.46 +message MsgCreatePermanentLockedAccountResponse {} + +// MsgCreateVestingAccount defines a message that enables creating a vesting +// account. +// +// Since: cosmos-sdk 0.46 +message MsgCreatePeriodicVestingAccount { + option (cosmos.msg.v1.signer) = "from_address"; + option (amino.name) = "cosmos-sdk/MsgCreatePeriodVestAccount"; + + option (gogoproto.equal) = false; + + string from_address = 1; + string to_address = 2; + // start of vesting as unix time (in seconds). + int64 start_time = 3; + repeated Period vesting_periods = 4 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// MsgCreateVestingAccountResponse defines the Msg/CreatePeriodicVestingAccount +// response type. +// +// Since: cosmos-sdk 0.46 +message MsgCreatePeriodicVestingAccountResponse {} +// MsgCreateClawbackVestingAccount defines a message that enables creating a ClawbackVestingAccount. +message MsgCreateClawbackVestingAccount { + option (cosmos.msg.v1.signer) = "from_address"; + option (amino.name) = "cosmos-sdk/MsgCreateClawbackVestingAccount"; + + option (gogoproto.equal) = false; + + // from_address specifies the account to provide the funds and sign the + // clawback request + string from_address = 1; + // to_address specifies the account to receive the funds + string to_address = 2; + // start_time defines the time at which the vesting period begins + int64 start_time = 3 [(gogoproto.moretags) = "yaml:\"start_time\""]; + // lockup_periods defines the unlocking schedule relative to the start_time + repeated Period lockup_periods = 4 [(gogoproto.nullable) = false]; + // vesting_periods defines the vesting schedule relative to the start_time + repeated Period vesting_periods = 5 [(gogoproto.nullable) = false]; + // merge specifies a creation mechanism for existing + // ClawbackVestingAccounts. If true, merge this new grant into an existing + // ClawbackVestingAccount, or create it if it does not exist. If false, + // creates a new account. New grants to an existing account must be from the + // same from_address. + bool merge = 6; +} + +// MsgCreateClawbackVestingAccountResponse defines the +// MsgCreateClawbackVestingAccount response type. +message MsgCreateClawbackVestingAccountResponse {} + +// MsgClawback defines a message that removes unvested tokens from a +// ClawbackVestingAccount. +message MsgClawback { + option (cosmos.msg.v1.signer) = "funder_address"; + option (amino.name) = "cosmos-sdk/MsgClawback"; + + // funder_address is the address which funded the account + string funder_address = 1; + // address is the address of the ClawbackVestingAccount to claw back from. + string address = 2; + // dest_address specifies where the clawed-back tokens should be transferred + // to. If empty, the tokens will be transferred back to the original funder of + // the account. + string dest_address = 3; +} + +// MsgClawbackResponse defines the MsgClawback response type. +message MsgClawbackResponse {} diff --git a/scripts/makefiles/swagger-proto/third_party/cosmos/vesting/v1beta1/vesting.proto b/scripts/makefiles/swagger-proto/third_party/cosmos/vesting/v1beta1/vesting.proto new file mode 100644 index 00000000000..fdd31c01245 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/cosmos/vesting/v1beta1/vesting.proto @@ -0,0 +1,114 @@ +syntax = "proto3"; +package cosmos.vesting.v1beta1; + +import "amino/amino.proto"; +import "gogoproto/gogo.proto"; +import "cosmos/base/v1beta1/coin.proto"; +import "cosmos/auth/v1beta1/auth.proto"; + +option go_package = "github.com/cosmos/cosmos-sdk/x/auth/vesting/types"; + +// BaseVestingAccount implements the VestingAccount interface. It contains all +// the necessary fields needed for any vesting account implementation. +message BaseVestingAccount { + option (amino.name) = "cosmos-sdk/BaseVestingAccount"; + option (gogoproto.goproto_getters) = false; + + cosmos.auth.v1beta1.BaseAccount base_account = 1 [(gogoproto.embed) = true]; + repeated cosmos.base.v1beta1.Coin original_vesting = 2 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + repeated cosmos.base.v1beta1.Coin delegated_free = 3 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + repeated cosmos.base.v1beta1.Coin delegated_vesting = 4 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; + // Vesting end time, as unix timestamp (in seconds). + int64 end_time = 5; +} + +// ContinuousVestingAccount implements the VestingAccount interface. It +// continuously vests by unlocking coins linearly with respect to time. +message ContinuousVestingAccount { + option (amino.name) = "cosmos-sdk/ContinuousVestingAccount"; + option (gogoproto.goproto_getters) = false; + + BaseVestingAccount base_vesting_account = 1 [(gogoproto.embed) = true]; + // Vesting start time, as unix timestamp (in seconds). + int64 start_time = 2; +} + +// DelayedVestingAccount implements the VestingAccount interface. It vests all +// coins after a specific time, but non prior. In other words, it keeps them +// locked until a specified time. +message DelayedVestingAccount { + option (amino.name) = "cosmos-sdk/DelayedVestingAccount"; + option (gogoproto.goproto_getters) = false; + + BaseVestingAccount base_vesting_account = 1 [(gogoproto.embed) = true]; +} + +// Period defines a length of time and amount of coins that will vest. +message Period { + // Period duration in seconds. + int64 length = 1; + repeated cosmos.base.v1beta1.Coin amount = 2 [ + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true, + (amino.encoding) = "legacy_coins", + (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins" + ]; +} + +// PeriodicVestingAccount implements the VestingAccount interface. It +// periodically vests by unlocking coins during each specified period. +message PeriodicVestingAccount { + option (amino.name) = "cosmos-sdk/PeriodicVestingAccount"; + option (gogoproto.goproto_getters) = false; + + BaseVestingAccount base_vesting_account = 1 [(gogoproto.embed) = true]; + int64 start_time = 2; + repeated Period vesting_periods = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; +} + +// PermanentLockedAccount implements the VestingAccount interface. It does +// not ever release coins, locking them indefinitely. Coins in this account can +// still be used for delegating and for governance votes even while locked. +// +// Since: cosmos-sdk 0.43 +message PermanentLockedAccount { + option (amino.name) = "cosmos-sdk/PermanentLockedAccount"; + option (gogoproto.goproto_getters) = false; + + BaseVestingAccount base_vesting_account = 1 [(gogoproto.embed) = true]; +} + +// ClawbackVestingAccount implements the VestingAccount interface. It provides +// an account that can hold contributions subject to "lockup" (like a +// PeriodicVestingAccount), or vesting which is subject to clawback +// of unvested tokens, or a combination (tokens vest, but are still locked). +message ClawbackVestingAccount { + option (amino.name) = "cosmos-sdk/ClawbackVestingAccount"; + option (gogoproto.goproto_getters) = false; + option (gogoproto.goproto_stringer) = false; + + BaseVestingAccount base_vesting_account = 1 [(gogoproto.embed) = true]; + + // funder_address specifies the account which can perform clawback. + string funder_address = 2 [(gogoproto.moretags) = "yaml:\"funder_address\""]; + int64 start_time = 3 [(gogoproto.moretags) = "yaml:\"start_time\""]; + // unlocking schedule relative to the BaseVestingAccount start_time. + repeated Period lockup_periods = 4 [(gogoproto.moretags) = "yaml:\"lockup_periods\"", (gogoproto.nullable) = false]; + // vesting (i.e. immunity from clawback) schedule relative to the BaseVestingAccount start_time. + repeated Period vesting_periods = 5 [(gogoproto.moretags) = "yaml:\"vesting_periods\"", (gogoproto.nullable) = false]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/google/api/annotations.proto b/scripts/makefiles/swagger-proto/third_party/google/api/annotations.proto index 84c48164aa9..417edd8fa19 100644 --- a/scripts/makefiles/swagger-proto/third_party/google/api/annotations.proto +++ b/scripts/makefiles/swagger-proto/third_party/google/api/annotations.proto @@ -1,4 +1,4 @@ -// Copyright 2024 Google LLC +// Copyright 2025 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/scripts/makefiles/swagger-proto/third_party/google/api/http.proto b/scripts/makefiles/swagger-proto/third_party/google/api/http.proto index e3270371d44..57621b53743 100644 --- a/scripts/makefiles/swagger-proto/third_party/google/api/http.proto +++ b/scripts/makefiles/swagger-proto/third_party/google/api/http.proto @@ -1,4 +1,4 @@ -// Copyright 2024 Google LLC +// Copyright 2025 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -16,7 +16,6 @@ syntax = "proto3"; package google.api; -option cc_enable_arenas = true; option go_package = "google.golang.org/genproto/googleapis/api/annotations;annotations"; option java_multiple_files = true; option java_outer_classname = "HttpProto"; diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/fee/v1/ack.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/fee/v1/ack.proto deleted file mode 100644 index 28c7ff7dfb3..00000000000 --- a/scripts/makefiles/swagger-proto/third_party/ibc/applications/fee/v1/ack.proto +++ /dev/null @@ -1,15 +0,0 @@ -syntax = "proto3"; - -package ibc.applications.fee.v1; - -option go_package = "github.com/cosmos/ibc-go/v9/modules/apps/29-fee/types"; - -// IncentivizedAcknowledgement is the acknowledgement format to be used by applications wrapped in the fee middleware -message IncentivizedAcknowledgement { - // the underlying app acknowledgement bytes - bytes app_acknowledgement = 1; - // the relayer address which submits the recv packet message - string forward_relayer_address = 2; - // success flag of the base application callback - bool underlying_app_success = 3; -} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/fee/v1/fee.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/fee/v1/fee.proto deleted file mode 100644 index d616b382750..00000000000 --- a/scripts/makefiles/swagger-proto/third_party/ibc/applications/fee/v1/fee.proto +++ /dev/null @@ -1,61 +0,0 @@ -syntax = "proto3"; - -package ibc.applications.fee.v1; - -option go_package = "github.com/cosmos/ibc-go/v9/modules/apps/29-fee/types"; - -import "amino/amino.proto"; -import "cosmos/base/v1beta1/coin.proto"; -import "gogoproto/gogo.proto"; -import "ibc/core/channel/v1/channel.proto"; -import "cosmos/msg/v1/msg.proto"; - -// Fee defines the ICS29 receive, acknowledgement and timeout fees -message Fee { - // the packet receive fee - repeated cosmos.base.v1beta1.Coin recv_fee = 1 [ - (gogoproto.nullable) = false, - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", - (amino.encoding) = "legacy_coins" - ]; - - // the packet acknowledgement fee - repeated cosmos.base.v1beta1.Coin ack_fee = 2 [ - (gogoproto.nullable) = false, - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", - (amino.encoding) = "legacy_coins" - ]; - - // the packet timeout fee - repeated cosmos.base.v1beta1.Coin timeout_fee = 3 [ - (gogoproto.nullable) = false, - (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", - (amino.encoding) = "legacy_coins" - ]; -} - -// PacketFee contains ICS29 relayer fees, refund address and optional list of permitted relayers -message PacketFee { - option (cosmos.msg.v1.signer) = "refund_address"; - - // fee encapsulates the recv, ack and timeout fees associated with an IBC packet - Fee fee = 1 [(gogoproto.nullable) = false]; - // the refund address for unspent fees - string refund_address = 2; - // optional list of relayers permitted to receive fees - repeated string relayers = 3; -} - -// PacketFees contains a list of type PacketFee -message PacketFees { - // list of packet fees - repeated PacketFee packet_fees = 1 [(gogoproto.nullable) = false]; -} - -// IdentifiedPacketFees contains a list of type PacketFee and associated PacketId -message IdentifiedPacketFees { - // unique packet identifier comprised of the channel ID, port ID and sequence - ibc.core.channel.v1.PacketId packet_id = 1 [(gogoproto.nullable) = false]; - // list of packet fees - repeated PacketFee packet_fees = 2 [(gogoproto.nullable) = false]; -} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/fee/v1/genesis.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/fee/v1/genesis.proto deleted file mode 100644 index 792d4354fa1..00000000000 --- a/scripts/makefiles/swagger-proto/third_party/ibc/applications/fee/v1/genesis.proto +++ /dev/null @@ -1,60 +0,0 @@ -syntax = "proto3"; - -package ibc.applications.fee.v1; - -option go_package = "github.com/cosmos/ibc-go/v9/modules/apps/29-fee/types"; - -import "gogoproto/gogo.proto"; -import "ibc/applications/fee/v1/fee.proto"; -import "ibc/core/channel/v1/channel.proto"; - -// GenesisState defines the ICS29 fee middleware genesis state -message GenesisState { - // list of identified packet fees - repeated IdentifiedPacketFees identified_fees = 1 [(gogoproto.nullable) = false]; - // list of fee enabled channels - repeated FeeEnabledChannel fee_enabled_channels = 2 [(gogoproto.nullable) = false]; - // list of registered payees - repeated RegisteredPayee registered_payees = 3 [(gogoproto.nullable) = false]; - // list of registered counterparty payees - repeated RegisteredCounterpartyPayee registered_counterparty_payees = 4 [(gogoproto.nullable) = false]; - // list of forward relayer addresses - repeated ForwardRelayerAddress forward_relayers = 5 [(gogoproto.nullable) = false]; -} - -// FeeEnabledChannel contains the PortID & ChannelID for a fee enabled channel -message FeeEnabledChannel { - // unique port identifier - string port_id = 1; - // unique channel identifier - string channel_id = 2; -} - -// RegisteredPayee contains the relayer address and payee address for a specific channel -message RegisteredPayee { - // unique channel identifier - string channel_id = 1; - // the relayer address - string relayer = 2; - // the payee address - string payee = 3; -} - -// RegisteredCounterpartyPayee contains the relayer address and counterparty payee address for a specific channel (used -// for recv fee distribution) -message RegisteredCounterpartyPayee { - // unique channel identifier - string channel_id = 1; - // the relayer address - string relayer = 2; - // the counterparty payee address - string counterparty_payee = 3; -} - -// ForwardRelayerAddress contains the forward relayer address and PacketId used for async acknowledgements -message ForwardRelayerAddress { - // the forward relayer address - string address = 1; - // unique packet identifier comprised of the channel ID, port ID and sequence - ibc.core.channel.v1.PacketId packet_id = 2 [(gogoproto.nullable) = false]; -} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/fee/v1/metadata.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/fee/v1/metadata.proto deleted file mode 100644 index 38150d8fc56..00000000000 --- a/scripts/makefiles/swagger-proto/third_party/ibc/applications/fee/v1/metadata.proto +++ /dev/null @@ -1,14 +0,0 @@ -syntax = "proto3"; - -package ibc.applications.fee.v1; - -option go_package = "github.com/cosmos/ibc-go/v9/modules/apps/29-fee/types"; - -// Metadata defines the ICS29 channel specific metadata encoded into the channel version bytestring -// See ICS004: https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel-and-packet-semantics#Versioning -message Metadata { - // fee_version defines the ICS29 fee version - string fee_version = 1; - // app_version defines the underlying application version, which may or may not be a JSON encoded bytestring - string app_version = 2; -} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/fee/v1/query.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/fee/v1/query.proto deleted file mode 100644 index 59018306ab9..00000000000 --- a/scripts/makefiles/swagger-proto/third_party/ibc/applications/fee/v1/query.proto +++ /dev/null @@ -1,219 +0,0 @@ -syntax = "proto3"; - -package ibc.applications.fee.v1; - -option go_package = "github.com/cosmos/ibc-go/v9/modules/apps/29-fee/types"; - -import "gogoproto/gogo.proto"; -import "google/api/annotations.proto"; -import "cosmos/base/v1beta1/coin.proto"; -import "cosmos/base/query/v1beta1/pagination.proto"; -import "ibc/applications/fee/v1/fee.proto"; -import "ibc/applications/fee/v1/genesis.proto"; -import "ibc/core/channel/v1/channel.proto"; - -// Query defines the ICS29 gRPC querier service. -service Query { - // IncentivizedPackets returns all incentivized packets and their associated fees - rpc IncentivizedPackets(QueryIncentivizedPacketsRequest) returns (QueryIncentivizedPacketsResponse) { - option (google.api.http).get = "/ibc/apps/fee/v1/incentivized_packets"; - } - - // IncentivizedPacket returns all packet fees for a packet given its identifier - rpc IncentivizedPacket(QueryIncentivizedPacketRequest) returns (QueryIncentivizedPacketResponse) { - option (google.api.http).get = - "/ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/sequences/" - "{packet_id.sequence}/incentivized_packet"; - } - - // Gets all incentivized packets for a specific channel - rpc IncentivizedPacketsForChannel(QueryIncentivizedPacketsForChannelRequest) - returns (QueryIncentivizedPacketsForChannelResponse) { - option (google.api.http).get = "/ibc/apps/fee/v1/channels/{channel_id}/ports/{port_id}/incentivized_packets"; - } - - // TotalRecvFees returns the total receive fees for a packet given its identifier - rpc TotalRecvFees(QueryTotalRecvFeesRequest) returns (QueryTotalRecvFeesResponse) { - option (google.api.http).get = "/ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/" - "sequences/{packet_id.sequence}/total_recv_fees"; - } - - // TotalAckFees returns the total acknowledgement fees for a packet given its identifier - rpc TotalAckFees(QueryTotalAckFeesRequest) returns (QueryTotalAckFeesResponse) { - option (google.api.http).get = "/ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/" - "sequences/{packet_id.sequence}/total_ack_fees"; - } - - // TotalTimeoutFees returns the total timeout fees for a packet given its identifier - rpc TotalTimeoutFees(QueryTotalTimeoutFeesRequest) returns (QueryTotalTimeoutFeesResponse) { - option (google.api.http).get = "/ibc/apps/fee/v1/channels/{packet_id.channel_id}/ports/{packet_id.port_id}/" - "sequences/{packet_id.sequence}/total_timeout_fees"; - } - - // Payee returns the registered payee address for a specific channel given the relayer address - rpc Payee(QueryPayeeRequest) returns (QueryPayeeResponse) { - option (google.api.http).get = "/ibc/apps/fee/v1/channels/{channel_id}/relayers/{relayer}/payee"; - } - - // CounterpartyPayee returns the registered counterparty payee for forward relaying - rpc CounterpartyPayee(QueryCounterpartyPayeeRequest) returns (QueryCounterpartyPayeeResponse) { - option (google.api.http).get = "/ibc/apps/fee/v1/channels/{channel_id}/relayers/{relayer}/counterparty_payee"; - } - - // FeeEnabledChannels returns a list of all fee enabled channels - rpc FeeEnabledChannels(QueryFeeEnabledChannelsRequest) returns (QueryFeeEnabledChannelsResponse) { - option (google.api.http).get = "/ibc/apps/fee/v1/fee_enabled"; - } - - // FeeEnabledChannel returns true if the provided port and channel identifiers belong to a fee enabled channel - rpc FeeEnabledChannel(QueryFeeEnabledChannelRequest) returns (QueryFeeEnabledChannelResponse) { - option (google.api.http).get = "/ibc/apps/fee/v1/channels/{channel_id}/ports/{port_id}/fee_enabled"; - } -} - -// QueryIncentivizedPacketsRequest defines the request type for the IncentivizedPackets rpc -message QueryIncentivizedPacketsRequest { - // pagination defines an optional pagination for the request. - cosmos.base.query.v1beta1.PageRequest pagination = 1; - // block height at which to query - uint64 query_height = 2; -} - -// QueryIncentivizedPacketsResponse defines the response type for the IncentivizedPackets rpc -message QueryIncentivizedPacketsResponse { - // list of identified fees for incentivized packets - repeated ibc.applications.fee.v1.IdentifiedPacketFees incentivized_packets = 1 [(gogoproto.nullable) = false]; - // pagination defines the pagination in the response. - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - -// QueryIncentivizedPacketRequest defines the request type for the IncentivizedPacket rpc -message QueryIncentivizedPacketRequest { - // unique packet identifier comprised of channel ID, port ID and sequence - ibc.core.channel.v1.PacketId packet_id = 1 [(gogoproto.nullable) = false]; - // block height at which to query - uint64 query_height = 2; -} - -// QueryIncentivizedPacketResponse defines the response type for the IncentivizedPacket rpc -message QueryIncentivizedPacketResponse { - // the identified fees for the incentivized packet - ibc.applications.fee.v1.IdentifiedPacketFees incentivized_packet = 1 [(gogoproto.nullable) = false]; -} - -// QueryIncentivizedPacketsForChannelRequest defines the request type for querying for all incentivized packets -// for a specific channel -message QueryIncentivizedPacketsForChannelRequest { - // pagination defines an optional pagination for the request. - cosmos.base.query.v1beta1.PageRequest pagination = 1; - string port_id = 2; - string channel_id = 3; - // Height to query at - uint64 query_height = 4; -} - -// QueryIncentivizedPacketsForChannelResponse defines the response type for querying for all incentivized packets -// for a specific channel -message QueryIncentivizedPacketsForChannelResponse { - // Map of all incentivized_packets - repeated ibc.applications.fee.v1.IdentifiedPacketFees incentivized_packets = 1; - // pagination defines the pagination in the response. - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - -// QueryTotalRecvFeesRequest defines the request type for the TotalRecvFees rpc -message QueryTotalRecvFeesRequest { - // the packet identifier for the associated fees - ibc.core.channel.v1.PacketId packet_id = 1 [(gogoproto.nullable) = false]; -} - -// QueryTotalRecvFeesResponse defines the response type for the TotalRecvFees rpc -message QueryTotalRecvFeesResponse { - // the total packet receive fees - repeated cosmos.base.v1beta1.Coin recv_fees = 1 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; -} - -// QueryTotalAckFeesRequest defines the request type for the TotalAckFees rpc -message QueryTotalAckFeesRequest { - // the packet identifier for the associated fees - ibc.core.channel.v1.PacketId packet_id = 1 [(gogoproto.nullable) = false]; -} - -// QueryTotalAckFeesResponse defines the response type for the TotalAckFees rpc -message QueryTotalAckFeesResponse { - // the total packet acknowledgement fees - repeated cosmos.base.v1beta1.Coin ack_fees = 1 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; -} - -// QueryTotalTimeoutFeesRequest defines the request type for the TotalTimeoutFees rpc -message QueryTotalTimeoutFeesRequest { - // the packet identifier for the associated fees - ibc.core.channel.v1.PacketId packet_id = 1 [(gogoproto.nullable) = false]; -} - -// QueryTotalTimeoutFeesResponse defines the response type for the TotalTimeoutFees rpc -message QueryTotalTimeoutFeesResponse { - // the total packet timeout fees - repeated cosmos.base.v1beta1.Coin timeout_fees = 1 - [(gogoproto.nullable) = false, (gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins"]; -} - -// QueryPayeeRequest defines the request type for the Payee rpc -message QueryPayeeRequest { - // unique channel identifier - string channel_id = 1; - // the relayer address to which the distribution address is registered - string relayer = 2; -} - -// QueryPayeeResponse defines the response type for the Payee rpc -message QueryPayeeResponse { - // the payee address to which packet fees are paid out - string payee_address = 1; -} - -// QueryCounterpartyPayeeRequest defines the request type for the CounterpartyPayee rpc -message QueryCounterpartyPayeeRequest { - // unique channel identifier - string channel_id = 1; - // the relayer address to which the counterparty is registered - string relayer = 2; -} - -// QueryCounterpartyPayeeResponse defines the response type for the CounterpartyPayee rpc -message QueryCounterpartyPayeeResponse { - // the counterparty payee address used to compensate forward relaying - string counterparty_payee = 1; -} - -// QueryFeeEnabledChannelsRequest defines the request type for the FeeEnabledChannels rpc -message QueryFeeEnabledChannelsRequest { - // pagination defines an optional pagination for the request. - cosmos.base.query.v1beta1.PageRequest pagination = 1; - // block height at which to query - uint64 query_height = 2; -} - -// QueryFeeEnabledChannelsResponse defines the response type for the FeeEnabledChannels rpc -message QueryFeeEnabledChannelsResponse { - // list of fee enabled channels - repeated ibc.applications.fee.v1.FeeEnabledChannel fee_enabled_channels = 1 [(gogoproto.nullable) = false]; - // pagination defines the pagination in the response. - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} - -// QueryFeeEnabledChannelRequest defines the request type for the FeeEnabledChannel rpc -message QueryFeeEnabledChannelRequest { - // unique port identifier - string port_id = 1; - // unique channel identifier - string channel_id = 2; -} - -// QueryFeeEnabledChannelResponse defines the response type for the FeeEnabledChannel rpc -message QueryFeeEnabledChannelResponse { - // boolean flag representing the fee enabled channel status - bool fee_enabled = 1; -} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/fee/v1/tx.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/fee/v1/tx.proto deleted file mode 100644 index 89e21f63bee..00000000000 --- a/scripts/makefiles/swagger-proto/third_party/ibc/applications/fee/v1/tx.proto +++ /dev/null @@ -1,122 +0,0 @@ -syntax = "proto3"; - -package ibc.applications.fee.v1; - -option go_package = "github.com/cosmos/ibc-go/v9/modules/apps/29-fee/types"; - -import "amino/amino.proto"; -import "gogoproto/gogo.proto"; -import "ibc/applications/fee/v1/fee.proto"; -import "ibc/core/channel/v1/channel.proto"; -import "cosmos/msg/v1/msg.proto"; - -// Msg defines the ICS29 Msg service. -service Msg { - option (cosmos.msg.v1.service) = true; - - // RegisterPayee defines a rpc handler method for MsgRegisterPayee - // RegisterPayee is called by the relayer on each channelEnd and allows them to set an optional - // payee to which reverse and timeout relayer packet fees will be paid out. The payee should be registered on - // the source chain from which packets originate as this is where fee distribution takes place. This function may be - // called more than once by a relayer, in which case, the latest payee is always used. - rpc RegisterPayee(MsgRegisterPayee) returns (MsgRegisterPayeeResponse); - - // RegisterCounterpartyPayee defines a rpc handler method for MsgRegisterCounterpartyPayee - // RegisterCounterpartyPayee is called by the relayer on each channelEnd and allows them to specify the counterparty - // payee address before relaying. This ensures they will be properly compensated for forward relaying since - // the destination chain must include the registered counterparty payee address in the acknowledgement. This function - // may be called more than once by a relayer, in which case, the latest counterparty payee address is always used. - rpc RegisterCounterpartyPayee(MsgRegisterCounterpartyPayee) returns (MsgRegisterCounterpartyPayeeResponse); - - // PayPacketFee defines a rpc handler method for MsgPayPacketFee - // PayPacketFee is an open callback that may be called by any module/user that wishes to escrow funds in order to - // incentivize the relaying of the packet at the next sequence - // NOTE: This method is intended to be used within a multi msg transaction, where the subsequent msg that follows - // initiates the lifecycle of the incentivized packet - rpc PayPacketFee(MsgPayPacketFee) returns (MsgPayPacketFeeResponse); - - // PayPacketFeeAsync defines a rpc handler method for MsgPayPacketFeeAsync - // PayPacketFeeAsync is an open callback that may be called by any module/user that wishes to escrow funds in order to - // incentivize the relaying of a known packet (i.e. at a particular sequence) - rpc PayPacketFeeAsync(MsgPayPacketFeeAsync) returns (MsgPayPacketFeeAsyncResponse); -} - -// MsgRegisterPayee defines the request type for the RegisterPayee rpc -message MsgRegisterPayee { - option (amino.name) = "cosmos-sdk/MsgRegisterPayee"; - option (cosmos.msg.v1.signer) = "relayer"; - - option (gogoproto.goproto_getters) = false; - - // unique port identifier - string port_id = 1; - // unique channel identifier - string channel_id = 2; - // the relayer address - string relayer = 3; - // the payee address - string payee = 4; -} - -// MsgRegisterPayeeResponse defines the response type for the RegisterPayee rpc -message MsgRegisterPayeeResponse {} - -// MsgRegisterCounterpartyPayee defines the request type for the RegisterCounterpartyPayee rpc -message MsgRegisterCounterpartyPayee { - option (amino.name) = "cosmos-sdk/MsgRegisterCounterpartyPayee"; - option (cosmos.msg.v1.signer) = "relayer"; - - option (gogoproto.goproto_getters) = false; - - // unique port identifier - string port_id = 1; - // unique channel identifier - string channel_id = 2; - // the relayer address - string relayer = 3; - // the counterparty payee address - string counterparty_payee = 4; -} - -// MsgRegisterCounterpartyPayeeResponse defines the response type for the RegisterCounterpartyPayee rpc -message MsgRegisterCounterpartyPayeeResponse {} - -// MsgPayPacketFee defines the request type for the PayPacketFee rpc -// This Msg can be used to pay for a packet at the next sequence send & should be combined with the Msg that will be -// paid for -message MsgPayPacketFee { - option (amino.name) = "cosmos-sdk/MsgPayPacketFee"; - option (cosmos.msg.v1.signer) = "signer"; - - option (gogoproto.goproto_getters) = false; - - // fee encapsulates the recv, ack and timeout fees associated with an IBC packet - ibc.applications.fee.v1.Fee fee = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; - // the source port unique identifier - string source_port_id = 2; - // the source channel unique identifier - string source_channel_id = 3; - // account address to refund fee if necessary - string signer = 4; - // optional list of relayers permitted to the receive packet fees - repeated string relayers = 5; -} - -// MsgPayPacketFeeResponse defines the response type for the PayPacketFee rpc -message MsgPayPacketFeeResponse {} - -// MsgPayPacketFeeAsync defines the request type for the PayPacketFeeAsync rpc -// This Msg can be used to pay for a packet at a specified sequence (instead of the next sequence send) -message MsgPayPacketFeeAsync { - option (amino.name) = "cosmos-sdk/MsgPayPacketFeeAsync"; - option (cosmos.msg.v1.signer) = "packet_fee"; - option (gogoproto.goproto_getters) = false; - - // unique packet identifier comprised of the channel ID, port ID and sequence - ibc.core.channel.v1.PacketId packet_id = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; - // the packet fee associated with a particular IBC packet - PacketFee packet_fee = 2 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; -} - -// MsgPayPacketFeeAsyncResponse defines the response type for the PayPacketFeeAsync rpc -message MsgPayPacketFeeAsyncResponse {} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/controller/v1/controller.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/controller/v1/controller.proto index 62a3fad81fb..2cb37ed8072 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/controller/v1/controller.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/controller/v1/controller.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.applications.interchain_accounts.controller.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/apps/27-interchain-accounts/controller/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/controller/types"; // Params defines the set of on-chain interchain accounts parameters. // The following parameters may be used to disable the controller submodule. diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/controller/v1/query.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/controller/v1/query.proto index 743da1a8ac0..ecee046ddf4 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/controller/v1/query.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/controller/v1/query.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.applications.interchain_accounts.controller.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/apps/27-interchain-accounts/controller/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/controller/types"; import "ibc/applications/interchain_accounts/controller/v1/controller.proto"; import "google/api/annotations.proto"; diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/controller/v1/tx.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/controller/v1/tx.proto index b4a2df51e3a..8416a36b3a4 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/controller/v1/tx.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/controller/v1/tx.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.applications.interchain_accounts.controller.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/apps/27-interchain-accounts/controller/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/controller/types"; import "gogoproto/gogo.proto"; import "ibc/applications/interchain_accounts/v1/packet.proto"; @@ -79,4 +79,4 @@ message MsgUpdateParams { } // MsgUpdateParamsResponse defines the response for Msg/UpdateParams -message MsgUpdateParamsResponse {} \ No newline at end of file +message MsgUpdateParamsResponse {} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/genesis/v1/genesis.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/genesis/v1/genesis.proto index 84a67985c32..c4cd7855475 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/genesis/v1/genesis.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/genesis/v1/genesis.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.applications.interchain_accounts.genesis.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/apps/27-interchain-accounts/genesis/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/genesis/types"; import "gogoproto/gogo.proto"; import "ibc/applications/interchain_accounts/controller/v1/controller.proto"; @@ -44,4 +44,4 @@ message RegisteredInterchainAccount { string connection_id = 1; string port_id = 2; string account_address = 3; -} \ No newline at end of file +} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/host/v1/host.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/host/v1/host.proto index 4f28bcd9a10..580d88eab7b 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/host/v1/host.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/host/v1/host.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.applications.interchain_accounts.host.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/apps/27-interchain-accounts/host/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/host/types"; // Params defines the set of on-chain interchain accounts parameters. // The following parameters may be used to disable the host submodule. diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/host/v1/query.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/host/v1/query.proto index 8840e2260d5..346288c4440 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/host/v1/query.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/host/v1/query.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.applications.interchain_accounts.host.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/apps/27-interchain-accounts/host/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/host/types"; import "google/api/annotations.proto"; import "ibc/applications/interchain_accounts/host/v1/host.proto"; diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/host/v1/tx.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/host/v1/tx.proto index ec5506c25cf..29eea2ede8c 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/host/v1/tx.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/host/v1/tx.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.applications.interchain_accounts.host.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/apps/27-interchain-accounts/host/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/host/types"; import "gogoproto/gogo.proto"; import "cosmos/msg/v1/msg.proto"; diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/v1/account.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/v1/account.proto index bfa97d94cdb..7ef67a106d1 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/v1/account.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/v1/account.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.applications.interchain_accounts.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/apps/27-interchain-accounts/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/types"; import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/v1/metadata.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/v1/metadata.proto index ff0ff513cb3..38b9de8ba6e 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/v1/metadata.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/v1/metadata.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.applications.interchain_accounts.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/apps/27-interchain-accounts/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/types"; // Metadata defines a set of protocol specific data encoded into the ICS27 channel version bytestring // See ICS004: https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel-and-packet-semantics#Versioning diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/v1/packet.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/v1/packet.proto index 83dc0eee653..4da358d56ce 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/v1/packet.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/applications/interchain_accounts/v1/packet.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.applications.interchain_accounts.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/apps/27-interchain-accounts/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/types"; import "google/protobuf/any.proto"; import "gogoproto/gogo.proto"; diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/packet_forward_middleware/v1/genesis.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/packet_forward_middleware/v1/genesis.proto new file mode 100644 index 00000000000..57af0b1a9d3 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/ibc/applications/packet_forward_middleware/v1/genesis.proto @@ -0,0 +1,34 @@ +syntax = "proto3"; + +package ibc.applications.packet_forward_middleware.v1; + +import "gogoproto/gogo.proto"; + +option go_package = "github.com/cosmos/ibc-go/v10/modules/apps/packet-forward-middleware/types"; + +// GenesisState defines the packetforward genesis state +message GenesisState { + // key - information about forwarded packet: src_channel + // (parsedReceiver.Channel), src_port (parsedReceiver.Port), sequence value - + // information about original packet for refunding if necessary: retries, + // srcPacketSender, srcPacket.DestinationChannel, srcPacket.DestinationPort + map in_flight_packets = 2 + [(gogoproto.moretags) = "yaml:\"in_flight_packets\"", (gogoproto.nullable) = false]; +} + +// InFlightPacket contains information about original packet for +// writing the acknowledgement and refunding if necessary. +message InFlightPacket { + string original_sender_address = 1; + string refund_channel_id = 2; + string refund_port_id = 3; + string packet_src_channel_id = 4; + string packet_src_port_id = 5; + uint64 packet_timeout_timestamp = 6; + string packet_timeout_height = 7; + bytes packet_data = 8; + uint64 refund_sequence = 9; + int32 retries_remaining = 10; + uint64 timeout = 11; + bool nonrefundable = 12; +} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/rate_limiting/v1/genesis.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/rate_limiting/v1/genesis.proto new file mode 100644 index 00000000000..6e734b4d4c1 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/ibc/applications/rate_limiting/v1/genesis.proto @@ -0,0 +1,16 @@ +syntax = "proto3"; +package ibc.applications.rate_limiting.v1; + +import "gogoproto/gogo.proto"; +import "ibc/applications/rate_limiting/v1/rate_limiting.proto"; + +option go_package = "github.com/cosmos/ibc-go/v10/modules/apps/rate-limiting/types"; + +// GenesisState defines the ratelimit module's genesis state. +message GenesisState { + repeated RateLimit rate_limits = 1 [(gogoproto.nullable) = false]; + repeated WhitelistedAddressPair whitelisted_address_pairs = 2 [(gogoproto.nullable) = false]; + repeated string blacklisted_denoms = 3; + repeated string pending_send_packet_sequence_numbers = 4; + HourEpoch hour_epoch = 5 [(gogoproto.nullable) = false]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/rate_limiting/v1/query.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/rate_limiting/v1/query.proto new file mode 100644 index 00000000000..6d9b594159d --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/ibc/applications/rate_limiting/v1/query.proto @@ -0,0 +1,100 @@ +syntax = "proto3"; +package ibc.applications.rate_limiting.v1; + +import "gogoproto/gogo.proto"; +import "google/api/annotations.proto"; +import "ibc/applications/rate_limiting/v1/rate_limiting.proto"; + +option go_package = "github.com/cosmos/ibc-go/v10/modules/apps/rate-limiting/types"; + +// Query defines the gRPC querier service. +service Query { + // Queries all rate limits + rpc AllRateLimits(QueryAllRateLimitsRequest) returns (QueryAllRateLimitsResponse) { + option (google.api.http).get = "/ibc/apps/rate-limiting/v1/ratelimits"; + } + + // Queries a specific rate limit by channel ID and denom + // Ex: + // - /ratelimit/{channel_or_client_id}/by_denom?denom={denom} + rpc RateLimit(QueryRateLimitRequest) returns (QueryRateLimitResponse) { + option (google.api.http).get = "/ibc/apps/rate-limiting/v1/ratelimit/" + "ratelimit/{channel_or_client_id}/by_denom"; + } + + // Queries all the rate limits for a given chain + rpc RateLimitsByChainID(QueryRateLimitsByChainIDRequest) returns (QueryRateLimitsByChainIDResponse) { + option (google.api.http).get = "/ibc/apps/rate-limiting/v1/ratelimit/ratelimits/{chain_id}"; + } + + // Queries all the rate limits for a given channel ID + rpc RateLimitsByChannelOrClientID(QueryRateLimitsByChannelOrClientIDRequest) + returns (QueryRateLimitsByChannelOrClientIDResponse) { + option (google.api.http).get = "/ibc/apps/rate-limiting/v1/ratelimit/ratelimits/{channel_or_client_id}"; + } + + // Queries all blacklisted denoms + rpc AllBlacklistedDenoms(QueryAllBlacklistedDenomsRequest) returns (QueryAllBlacklistedDenomsResponse) { + option (google.api.http).get = "/ibc/apps/rate-limiting/v1/ratelimit/blacklisted_denoms"; + } + + // Queries all whitelisted address pairs + rpc AllWhitelistedAddresses(QueryAllWhitelistedAddressesRequest) returns (QueryAllWhitelistedAddressesResponse) { + option (google.api.http).get = "/ibc/apps/rate-limiting/v1/ratelimit/whitelisted_addresses"; + } +} + +// Queries all rate limits +message QueryAllRateLimitsRequest {} + +// QueryAllRateLimitsResponse returns all the rate limits stored on the chain. +message QueryAllRateLimitsResponse { + repeated RateLimit rate_limits = 1 [(gogoproto.nullable) = false]; +} + +// Queries a specific rate limit by channel ID and denom +message QueryRateLimitRequest { + string denom = 1; + string channel_or_client_id = 2; +} + +// QueryRateLimitResponse returns a rate limit by denom and channel_or_client_id combination. +message QueryRateLimitResponse { + RateLimit rate_limit = 1; +} + +// Queries all the rate limits for a given chain +message QueryRateLimitsByChainIDRequest { + string chain_id = 1; +} + +// QueryRateLimitsByChainIDResponse returns all rate-limits by a chain. +message QueryRateLimitsByChainIDResponse { + repeated RateLimit rate_limits = 1 [(gogoproto.nullable) = false]; +} + +// Queries all the rate limits for a given channel or client ID +message QueryRateLimitsByChannelOrClientIDRequest { + string channel_or_client_id = 1; +} + +// QueryRateLimitsByChannelOrClientIDResponse returns all rate-limits by a channel or client id. +message QueryRateLimitsByChannelOrClientIDResponse { + repeated RateLimit rate_limits = 1 [(gogoproto.nullable) = false]; +} + +// Queries all blacklisted denoms +message QueryAllBlacklistedDenomsRequest {} + +// QueryAllBlacklistedDenomsResponse returns all the blacklisted denosm. +message QueryAllBlacklistedDenomsResponse { + repeated string denoms = 1; +} + +// Queries all whitelisted address pairs +message QueryAllWhitelistedAddressesRequest {} + +// QueryAllWhitelistedAddressesResponse returns all whitelisted pairs. +message QueryAllWhitelistedAddressesResponse { + repeated WhitelistedAddressPair address_pairs = 1 [(gogoproto.nullable) = false]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/rate_limiting/v1/rate_limiting.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/rate_limiting/v1/rate_limiting.proto new file mode 100644 index 00000000000..81fb84e5e3e --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/ibc/applications/rate_limiting/v1/rate_limiting.proto @@ -0,0 +1,76 @@ +syntax = "proto3"; +package ibc.applications.rate_limiting.v1; + +import "gogoproto/gogo.proto"; +import "google/protobuf/duration.proto"; +import "google/protobuf/timestamp.proto"; + +option go_package = "github.com/cosmos/ibc-go/v10/modules/apps/rate-limiting/types"; + +// PacketDirection defines whether the transfer packet is being sent from +// this chain or is being received on this chain +enum PacketDirection { + option (gogoproto.goproto_enum_prefix) = false; + + PACKET_SEND = 0; + PACKET_RECV = 1; +} + +// Path holds the denom and channelID that define the rate limited route +message Path { + string denom = 1; + string channel_or_client_id = 2; +} + +// Quota defines the rate limit thresholds for transfer packets +message Quota { + // MaxPercentSend defines the threshold for outflows + // The threshold is defined as a percentage (e.g. 10 indicates 10%) + string max_percent_send = 1 [(gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false]; + // MaxPercentSend defines the threshold for inflows + // The threshold is defined as a percentage (e.g. 10 indicates 10%) + string max_percent_recv = 2 [(gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false]; + // DurationHours specifies the number of hours before the rate limit + // is reset (e.g. 24 indicates that the rate limit is reset each day) + uint64 duration_hours = 3; +} + +// Flow tracks all the inflows and outflows of a channel. +message Flow { + // Inflow defines the total amount of inbound transfers for the given + // rate limit in the current window + string inflow = 1 [(gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false]; + // Outflow defines the total amount of outbound transfers for the given + // rate limit in the current window + string outflow = 2 [(gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false]; + // ChannelValue stores the total supply of the denom at the start of + // the rate limit. This is used as the denominator when checking + // the rate limit threshold + // The ChannelValue is fixed for the duration of the rate limit window + string channel_value = 3 [(gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false]; +} + +// RateLimit stores all the context about a given rate limit, including +// the relevant denom and channel, rate limit thresholds, and current +// progress towards the limits +message RateLimit { + Path path = 1; + Quota quota = 2; + Flow flow = 3; +} + +// WhitelistedAddressPair represents a sender-receiver combo that is +// not subject to rate limit restrictions +message WhitelistedAddressPair { + string sender = 1; + string receiver = 2; +} + +// HourEpoch is the epoch type. +message HourEpoch { + uint64 epoch_number = 1; + google.protobuf.Duration duration = 2 + [(gogoproto.nullable) = false, (gogoproto.stdduration) = true, (gogoproto.jsontag) = "duration,omitempty"]; + google.protobuf.Timestamp epoch_start_time = 3 [(gogoproto.stdtime) = true, (gogoproto.nullable) = false]; + int64 epoch_start_height = 4; +} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/rate_limiting/v1/tx.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/rate_limiting/v1/tx.proto new file mode 100644 index 00000000000..9c5b6c25deb --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/ibc/applications/rate_limiting/v1/tx.proto @@ -0,0 +1,109 @@ +syntax = "proto3"; +package ibc.applications.rate_limiting.v1; + +import "amino/amino.proto"; +import "cosmos/msg/v1/msg.proto"; +import "cosmos_proto/cosmos.proto"; +import "gogoproto/gogo.proto"; + +option go_package = "github.com/cosmos/ibc-go/v10/modules/apps/rate-limiting/types"; + +// Msg service for rate limit txs +service Msg { + option (cosmos.msg.v1.service) = true; + + // Gov tx to add a new rate limit + rpc AddRateLimit(MsgAddRateLimit) returns (MsgAddRateLimitResponse); + // Gov tx to update an existing rate limit + rpc UpdateRateLimit(MsgUpdateRateLimit) returns (MsgUpdateRateLimitResponse); + // Gov tx to remove a rate limit + rpc RemoveRateLimit(MsgRemoveRateLimit) returns (MsgRemoveRateLimitResponse); + // Gov tx to reset the flow on a rate limit + rpc ResetRateLimit(MsgResetRateLimit) returns (MsgResetRateLimitResponse); +} + +// Gov tx to add a new rate limit +message MsgAddRateLimit { + option (cosmos.msg.v1.signer) = "signer"; + option (amino.name) = "ratelimit/MsgAddRateLimit"; + + // signer defines the x/gov module account address or other authority signing the message + string signer = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // Denom for the rate limit, as it appears on the rate limited chain + // When rate limiting a non-native token, this will be an ibc denom + string denom = 2; + // ChannelId for the rate limit, on the side of the rate limited chain + string channel_or_client_id = 3; + // MaxPercentSend defines the threshold for outflows + // The threshold is defined as a percentage (e.g. 10 indicates 10%) + string max_percent_send = 4 [(gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false]; + // MaxPercentSend defines the threshold for inflows + // The threshold is defined as a percentage (e.g. 10 indicates 10%) + string max_percent_recv = 5 [(gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false]; + // DurationHours specifies the number of hours before the rate limit + // is reset (e.g. 24 indicates that the rate limit is reset each day) + uint64 duration_hours = 6; +} + +// MsgAddRateLimitResponse is the return type for AddRateLimit function. +message MsgAddRateLimitResponse {} + +// Gov tx to update an existing rate limit +message MsgUpdateRateLimit { + option (cosmos.msg.v1.signer) = "signer"; + option (amino.name) = "ratelimit/MsgUpdateRateLimit"; + + // signer defines the x/gov module account address or other authority signing the message + string signer = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // Denom for the rate limit, as it appears on the rate limited chain + // When rate limiting a non-native token, this will be an ibc denom + string denom = 2; + // ChannelId for the rate limit, on the side of the rate limited chain + string channel_or_client_id = 3; + // MaxPercentSend defines the threshold for outflows + // The threshold is defined as a percentage (e.g. 10 indicates 10%) + string max_percent_send = 4 [(gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false]; + // MaxPercentSend defines the threshold for inflows + // The threshold is defined as a percentage (e.g. 10 indicates 10%) + string max_percent_recv = 5 [(gogoproto.customtype) = "cosmossdk.io/math.Int", (gogoproto.nullable) = false]; + // DurationHours specifies the number of hours before the rate limit + // is reset (e.g. 24 indicates that the rate limit is reset each day) + uint64 duration_hours = 6; +} + +// MsgUpdateRateLimitResponse is the return type for UpdateRateLimit. +message MsgUpdateRateLimitResponse {} + +// Gov tx to remove a rate limit +message MsgRemoveRateLimit { + option (cosmos.msg.v1.signer) = "signer"; + option (amino.name) = "ratelimit/MsgRemoveRateLimit"; + + // signer defines the x/gov module account address or other authority signing the message + string signer = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // Denom for the rate limit, as it appears on the rate limited chain + // When rate limiting a non-native token, this will be an ibc denom + string denom = 2; + // ChannelId for the rate limit, on the side of the rate limited chain + string channel_or_client_id = 3; +} + +// MsgRemoveRateLimitResponse is the response type for RemoveRateLimit +message MsgRemoveRateLimitResponse {} + +// Gov tx to reset the flow on a rate limit +message MsgResetRateLimit { + option (cosmos.msg.v1.signer) = "signer"; + option (amino.name) = "ratelimit/MsgResetRateLimit"; + + // signer defines the x/gov module account address or other authority signing the message + string signer = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"]; + // Denom for the rate limit, as it appears on the rate limited chain + // When rate limiting a non-native token, this will be an ibc denom + string denom = 2; + // ChannelId for the rate limit, on the side of the rate limited chain + string channel_or_client_id = 3; +} + +// MsgResetRateLimitResponse is the response type for ResetRateLimit. +message MsgResetRateLimitResponse {} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/authz.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/authz.proto index 9d0280888c0..4ffa2681f55 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/authz.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/authz.proto @@ -2,12 +2,11 @@ syntax = "proto3"; package ibc.applications.transfer.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/apps/transfer/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types"; import "cosmos_proto/cosmos.proto"; import "gogoproto/gogo.proto"; import "cosmos/base/v1beta1/coin.proto"; -import "ibc/applications/transfer/v1/transfer.proto"; // Allocation defines the spend limit for a particular port and channel message Allocation { @@ -23,15 +22,6 @@ message Allocation { // allow list of memo strings, an empty list prohibits all memo strings; // a list only with "*" permits any memo string repeated string allowed_packet_data = 5; - // Forwarding options that are allowed. - repeated AllowedForwarding allowed_forwarding = 6 [(gogoproto.nullable) = false]; -} - -// AllowedForwarding defines which options are allowed for forwarding. -message AllowedForwarding { - // a list of allowed source port ID/channel ID pairs through which the packet is allowed to be forwarded until final - // destination - repeated ibc.applications.transfer.v1.Hop hops = 1 [(gogoproto.nullable) = false]; } // TransferAuthorization allows the grantee to spend up to spend_limit coins from diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/denomtrace.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/denomtrace.proto index 11a55bb0f5e..3aef3a8f6dd 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/denomtrace.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/denomtrace.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.applications.transfer.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/apps/transfer/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types"; // DenomTrace contains the base denomination for ICS20 fungible tokens and the // source tracing information path. diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v2/genesis.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/genesis.proto similarity index 51% rename from scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v2/genesis.proto rename to scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/genesis.proto index 6b3545d2f39..6d5a5ca26fa 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v2/genesis.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/genesis.proto @@ -1,12 +1,11 @@ syntax = "proto3"; -package ibc.applications.transfer.v2; +package ibc.applications.transfer.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/apps/transfer/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types"; import "ibc/applications/transfer/v1/transfer.proto"; -import "ibc/applications/transfer/v2/token.proto"; -import "ibc/core/channel/v1/channel.proto"; +import "ibc/applications/transfer/v1/token.proto"; import "cosmos/base/v1beta1/coin.proto"; import "gogoproto/gogo.proto"; @@ -19,13 +18,4 @@ message GenesisState { // by the transfer module repeated cosmos.base.v1beta1.Coin total_escrowed = 4 [(gogoproto.castrepeated) = "github.com/cosmos/cosmos-sdk/types.Coins", (gogoproto.nullable) = false]; - // forwarded_packets contains the forwarded packets stored as part of the - // packet forwarding lifecycle - repeated ForwardedPacket forwarded_packets = 5 [(gogoproto.nullable) = false]; -} - -// ForwardedPacket defines the genesis type necessary to retrieve and store forwarded packets. -message ForwardedPacket { - ibc.core.channel.v1.PacketId forward_key = 1 [(gogoproto.nullable) = false]; - ibc.core.channel.v1.Packet packet = 2 [(gogoproto.nullable) = false]; } diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/packet.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/packet.proto new file mode 100644 index 00000000000..d7ecb32021b --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/packet.proto @@ -0,0 +1,21 @@ +syntax = "proto3"; + +package ibc.applications.transfer.v1; + +option go_package = "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types"; + +// FungibleTokenPacketData defines a struct for the packet payload +// See FungibleTokenPacketData spec: +// https://github.com/cosmos/ibc/tree/master/spec/app/ics-020-fungible-token-transfer#data-structures +message FungibleTokenPacketData { + // the token denomination to be transferred + string denom = 1; + // the token amount to be transferred + string amount = 2; + // the sender address + string sender = 3; + // the recipient address on the destination chain + string receiver = 4; + // optional memo + string memo = 5; +} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/query.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/query.proto index 5e8f01f576f..317963e770e 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/query.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/query.proto @@ -5,9 +5,11 @@ package ibc.applications.transfer.v1; import "gogoproto/gogo.proto"; import "cosmos/base/v1beta1/coin.proto"; import "ibc/applications/transfer/v1/transfer.proto"; +import "ibc/applications/transfer/v1/token.proto"; +import "cosmos/base/query/v1beta1/pagination.proto"; import "google/api/annotations.proto"; -option go_package = "github.com/cosmos/ibc-go/v9/modules/apps/transfer/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types"; // Query provides defines the gRPC querier service. service Query { @@ -16,6 +18,16 @@ service Query { option (google.api.http).get = "/ibc/apps/transfer/v1/params"; } + // Denoms queries all denominations + rpc Denoms(QueryDenomsRequest) returns (QueryDenomsResponse) { + option (google.api.http).get = "/ibc/apps/transfer/v1/denoms"; + } + + // Denom queries a denomination + rpc Denom(QueryDenomRequest) returns (QueryDenomResponse) { + option (google.api.http).get = "/ibc/apps/transfer/v1/denoms/{hash=**}"; + } + // DenomHash queries a denomination hash information. rpc DenomHash(QueryDenomHashRequest) returns (QueryDenomHashResponse) { option (google.api.http).get = "/ibc/apps/transfer/v1/denom_hashes/{trace=**}"; @@ -28,7 +40,7 @@ service Query { // TotalEscrowForDenom returns the total amount of tokens in escrow based on the denom. rpc TotalEscrowForDenom(QueryTotalEscrowForDenomRequest) returns (QueryTotalEscrowForDenomResponse) { - option (google.api.http).get = "/ibc/apps/transfer/v1/denoms/{denom=**}/total_escrow"; + option (google.api.http).get = "/ibc/apps/transfer/v1/total_escrow/{denom=**}"; } } @@ -41,6 +53,36 @@ message QueryParamsResponse { Params params = 1; } +// QueryDenomRequest is the request type for the Query/Denom RPC +// method +message QueryDenomRequest { + // hash (in hex format) or denom (full denom with ibc prefix) of the on chain denomination. + string hash = 1; +} + +// QueryDenomResponse is the response type for the Query/Denom RPC +// method. +message QueryDenomResponse { + // denom returns the requested denomination. + Denom denom = 1; +} + +// QueryDenomsRequest is the request type for the Query/Denoms RPC +// method +message QueryDenomsRequest { + // pagination defines an optional pagination for the request. + cosmos.base.query.v1beta1.PageRequest pagination = 1; +} + +// QueryDenomsResponse is the response type for the Query/Denoms RPC +// method. +message QueryDenomsResponse { + // denoms returns all denominations. + repeated Denom denoms = 1 [(gogoproto.castrepeated) = "Denoms", (gogoproto.nullable) = false]; + // pagination defines the pagination in the response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; +} + // QueryDenomHashRequest is the request type for the Query/DenomHash RPC // method message QueryDenomHashRequest { diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v2/token.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/token.proto similarity index 60% rename from scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v2/token.proto rename to scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/token.proto index d251a44299e..cf8ac485b80 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v2/token.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/token.proto @@ -1,12 +1,11 @@ syntax = "proto3"; -package ibc.applications.transfer.v2; +package ibc.applications.transfer.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/apps/transfer/types"; - -import "ibc/applications/transfer/v1/transfer.proto"; import "gogoproto/gogo.proto"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types"; + // Token defines a struct which represents a token to be transferred. message Token { // the token denomination @@ -20,5 +19,12 @@ message Denom { // the base token denomination string base = 1; // the trace of the token - repeated ibc.applications.transfer.v1.Hop trace = 3 [(gogoproto.nullable) = false]; + repeated Hop trace = 3 [(gogoproto.nullable) = false]; +} + +// Hop defines a port ID, channel ID pair specifying a unique "hop" in a trace +message Hop { + option (gogoproto.goproto_stringer) = false; + string port_id = 1; + string channel_id = 2; } diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/transfer.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/transfer.proto index 8ae82cb64d7..c4b1f9daaab 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/transfer.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/transfer.proto @@ -2,9 +2,7 @@ syntax = "proto3"; package ibc.applications.transfer.v1; -import "gogoproto/gogo.proto"; - -option go_package = "github.com/cosmos/ibc-go/v9/modules/apps/transfer/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types"; // Params defines the set of IBC transfer parameters. // NOTE: To prevent a single token from being transferred, set the @@ -18,21 +16,3 @@ message Params { // chain. bool receive_enabled = 2; } - -// Forwarding defines a list of port ID, channel ID pairs determining the path -// through which a packet must be forwarded, and an unwind boolean indicating if -// the coin should be unwinded to its native chain before forwarding. -message Forwarding { - // optional unwinding for the token transfered - bool unwind = 1; - // optional intermediate path through which packet will be forwarded - repeated Hop hops = 2 [(gogoproto.nullable) = false]; -} - -// Hop defines a port ID, channel ID pair specifying where tokens must be forwarded -// next in a multihop transfer. -message Hop { - option (gogoproto.goproto_stringer) = false; - string port_id = 1; - string channel_id = 2; -} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/tx.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/tx.proto index 6968968854b..8250bb48373 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/tx.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v1/tx.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.applications.transfer.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/apps/transfer/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types"; import "amino/amino.proto"; import "gogoproto/gogo.proto"; @@ -35,24 +35,31 @@ message MsgTransfer { string source_port = 1; // the channel by which the packet will be sent string source_channel = 2; - // the token to be transferred. this field has been replaced by the tokens field. - cosmos.base.v1beta1.Coin token = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true, deprecated = true]; + // token to be transferred + cosmos.base.v1beta1.Coin token = 3 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // the sender address string sender = 4; // the recipient address on the destination chain string receiver = 5; // Timeout height relative to the current block height. - // The timeout is disabled when set to 0. + // If you are sending with IBC v1 protocol, either timeout_height or timeout_timestamp must be set. + // If you are sending with IBC v2 protocol, timeout_timestamp must be set, and timeout_height must be omitted. ibc.core.client.v1.Height timeout_height = 6 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; // Timeout timestamp in absolute nanoseconds since unix epoch. - // The timeout is disabled when set to 0. + // If you are sending with IBC v1 protocol, either timeout_height or timeout_timestamp must be set. + // If you are sending with IBC v2 protocol, timeout_timestamp must be set. uint64 timeout_timestamp = 7; // optional memo string memo = 8; - // tokens to be transferred - repeated cosmos.base.v1beta1.Coin tokens = 9 [(gogoproto.nullable) = false]; - // optional forwarding information - Forwarding forwarding = 10; + // optional encoding + string encoding = 9; + // boolean flag to indicate if the transfer message + // is sent with the IBC v2 protocol but uses v1 channel identifiers. + // In this case, the v1 channel identifiers function as aliases to the + // underlying client ids. + // This only needs to be set if the channel IDs + // are V1 channel identifiers. + bool use_aliasing = 10 [(amino.dont_omitempty) = true]; } // MsgTransferResponse defines the Msg/Transfer response type. diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v2/packet.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v2/packet.proto deleted file mode 100644 index 5b84afe9742..00000000000 --- a/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v2/packet.proto +++ /dev/null @@ -1,51 +0,0 @@ -syntax = "proto3"; - -package ibc.applications.transfer.v2; - -option go_package = "github.com/cosmos/ibc-go/v9/modules/apps/transfer/types"; - -import "ibc/applications/transfer/v2/token.proto"; -import "gogoproto/gogo.proto"; -import "ibc/applications/transfer/v1/transfer.proto"; - -// FungibleTokenPacketData defines a struct for the packet payload -// See FungibleTokenPacketData spec: -// https://github.com/cosmos/ibc/tree/master/spec/app/ics-020-fungible-token-transfer#data-structures -message FungibleTokenPacketData { - // the token denomination to be transferred - string denom = 1; - // the token amount to be transferred - string amount = 2; - // the sender address - string sender = 3; - // the recipient address on the destination chain - string receiver = 4; - // optional memo - string memo = 5; -} - -// FungibleTokenPacketDataV2 defines a struct for the packet payload -// See FungibleTokenPacketDataV2 spec: -// https://github.com/cosmos/ibc/tree/master/spec/app/ics-020-fungible-token-transfer#data-structures -message FungibleTokenPacketDataV2 { - // the tokens to be transferred - repeated Token tokens = 1 [(gogoproto.nullable) = false]; - // the sender address - string sender = 2; - // the recipient address on the destination chain - string receiver = 3; - // optional memo - string memo = 4; - // optional forwarding information - ForwardingPacketData forwarding = 5 [(gogoproto.nullable) = false]; -} - -// ForwardingPacketData defines a list of port ID, channel ID pairs determining the path -// through which a packet must be forwarded, and the destination memo string to be used in the -// final destination of the tokens. -message ForwardingPacketData { - // optional memo consumed by final destination chain - string destination_memo = 1; - // optional intermediate path through which packet will be forwarded. - repeated ibc.applications.transfer.v1.Hop hops = 2 [(gogoproto.nullable) = false]; -} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v2/queryv2.proto b/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v2/queryv2.proto deleted file mode 100644 index 93f2fdae39e..00000000000 --- a/scripts/makefiles/swagger-proto/third_party/ibc/applications/transfer/v2/queryv2.proto +++ /dev/null @@ -1,53 +0,0 @@ -syntax = "proto3"; - -package ibc.applications.transfer.v2; - -option go_package = "github.com/cosmos/ibc-go/v9/modules/apps/transfer/types"; - -import "gogoproto/gogo.proto"; -import "cosmos/base/query/v1beta1/pagination.proto"; -import "ibc/applications/transfer/v2/token.proto"; -import "google/api/annotations.proto"; - -// QueryV2 provides defines the gRPC querier service for ics20-v2. -service QueryV2 { - // Denoms queries all denominations - rpc Denoms(QueryDenomsRequest) returns (QueryDenomsResponse) { - option (google.api.http).get = "/ibc/apps/transfer/v2/denoms"; - } - - // Denom queries a denomination - rpc Denom(QueryDenomRequest) returns (QueryDenomResponse) { - option (google.api.http).get = "/ibc/apps/transfer/v2/denoms/{hash=**}"; - } -} - -// QueryDenomRequest is the request type for the Query/Denom RPC -// method -message QueryDenomRequest { - // hash (in hex format) or denom (full denom with ibc prefix) of the on chain denomination. - string hash = 1; -} - -// QueryDenomResponse is the response type for the Query/Denom RPC -// method. -message QueryDenomResponse { - // denom returns the requested denomination. - Denom denom = 1; -} - -// QueryDenomsRequest is the request type for the Query/Denoms RPC -// method -message QueryDenomsRequest { - // pagination defines an optional pagination for the request. - cosmos.base.query.v1beta1.PageRequest pagination = 1; -} - -// QueryDenomsResponse is the response type for the Query/Denoms RPC -// method. -message QueryDenomsResponse { - // denoms returns all denominations. - repeated Denom denoms = 1 [(gogoproto.castrepeated) = "Denoms", (gogoproto.nullable) = false]; - // pagination defines the pagination in the response. - cosmos.base.query.v1beta1.PageResponse pagination = 2; -} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v1/channel.proto b/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v1/channel.proto index 78df62bdbb4..b37cf972f04 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v1/channel.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v1/channel.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.core.channel.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/core/04-channel/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types"; import "gogoproto/gogo.proto"; import "ibc/core/client/v1/client.proto"; @@ -24,9 +24,6 @@ message Channel { repeated string connection_hops = 4; // opaque channel version, which is agreed upon during the handshake string version = 5; - // upgrade sequence indicates the latest upgrade attempt performed by this channel - // the value of 0 indicates the channel has never been upgraded - uint64 upgrade_sequence = 6; } // IdentifiedChannel defines a channel with additional port and channel @@ -49,13 +46,10 @@ message IdentifiedChannel { string port_id = 6; // channel identifier string channel_id = 7; - // upgrade sequence indicates the latest upgrade attempt performed by this channel - // the value of 0 indicates the channel has never been upgraded - uint64 upgrade_sequence = 8; } // State defines if a channel is in one of the following states: -// CLOSED, INIT, TRYOPEN, OPEN, FLUSHING, FLUSHCOMPLETE or UNINITIALIZED. +// CLOSED, INIT, TRYOPEN, OPEN, or UNINITIALIZED. enum State { option (gogoproto.goproto_enum_prefix) = false; @@ -71,10 +65,6 @@ enum State { // A channel has been closed and can no longer be used to send or receive // packets. STATE_CLOSED = 4 [(gogoproto.enumvalue_customname) = "CLOSED"]; - // A channel has just accepted the upgrade handshake attempt and is flushing in-flight packets. - STATE_FLUSHING = 5 [(gogoproto.enumvalue_customname) = "FLUSHING"]; - // A channel has just completed flushing any in-flight packets. - STATE_FLUSHCOMPLETE = 6 [(gogoproto.enumvalue_customname) = "FLUSHCOMPLETE"]; } // Order defines if a channel is ORDERED or UNORDERED @@ -171,17 +161,11 @@ message Acknowledgement { } // Timeout defines an execution deadline structure for 04-channel handlers. -// This includes packet lifecycle handlers as well as the upgrade handshake handlers. +// This includes packet lifecycle handlers. // A valid Timeout contains either one or both of a timestamp and block height (sequence). message Timeout { - // block height after which the packet or upgrade times out + // block height after which the packet times out ibc.core.client.v1.Height height = 1 [(gogoproto.nullable) = false]; - // block timestamp (in nanoseconds) after which the packet or upgrade times out + // block timestamp (in nanoseconds) after which the packet times out uint64 timestamp = 2; } - -// Params defines the set of IBC channel parameters. -message Params { - // the relative timeout after which channel upgrades will time out. - Timeout upgrade_timeout = 1 [(gogoproto.nullable) = false]; -} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v1/genesis.proto b/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v1/genesis.proto index 2f0cc448230..f03e4db4dc2 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v1/genesis.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v1/genesis.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.core.channel.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/core/04-channel/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types"; import "gogoproto/gogo.proto"; import "ibc/core/channel/v1/channel.proto"; @@ -18,7 +18,6 @@ message GenesisState { repeated PacketSequence ack_sequences = 7 [(gogoproto.nullable) = false]; // the sequence for the next generated channel identifier uint64 next_channel_sequence = 8; - Params params = 9 [(gogoproto.nullable) = false]; } // PacketSequence defines the genesis type necessary to retrieve and store diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v1/query.proto b/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v1/query.proto index f44a3e5aa62..ca4041b47f3 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v1/query.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v1/query.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.core.channel.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/core/04-channel/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types"; import "ibc/core/client/v1/client.proto"; import "cosmos/base/query/v1beta1/pagination.proto"; @@ -10,7 +10,6 @@ import "ibc/core/channel/v1/channel.proto"; import "google/api/annotations.proto"; import "google/protobuf/any.proto"; import "gogoproto/gogo.proto"; -import "ibc/core/channel/v1/upgrade.proto"; // Query provides defines the gRPC querier service service Query { @@ -105,23 +104,6 @@ service Query { option (google.api.http).get = "/ibc/core/channel/v1/channels/{channel_id}/" "ports/{port_id}/next_sequence_send"; } - - // UpgradeError returns the error receipt if the upgrade handshake failed. - rpc UpgradeError(QueryUpgradeErrorRequest) returns (QueryUpgradeErrorResponse) { - option (google.api.http).get = "/ibc/core/channel/v1/channels/{channel_id}/" - "ports/{port_id}/upgrade_error"; - } - - // Upgrade returns the upgrade for a given port and channel id. - rpc Upgrade(QueryUpgradeRequest) returns (QueryUpgradeResponse) { - option (google.api.http).get = "/ibc/core/channel/v1/channels/{channel_id}/" - "ports/{port_id}/upgrade"; - } - - // ChannelParams queries all parameters of the ibc channel submodule. - rpc ChannelParams(QueryChannelParamsRequest) returns (QueryChannelParamsResponse) { - option (google.api.http).get = "/ibc/core/channel/v1/params"; - } } // QueryChannelRequest is the request type for the Query/Channel RPC method @@ -418,42 +400,3 @@ message QueryNextSequenceSendResponse { // height at which the proof was retrieved ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; } - -// QueryUpgradeErrorRequest is the request type for the Query/QueryUpgradeError RPC method -message QueryUpgradeErrorRequest { - string port_id = 1; - string channel_id = 2; -} - -// QueryUpgradeErrorResponse is the response type for the Query/QueryUpgradeError RPC method -message QueryUpgradeErrorResponse { - ErrorReceipt error_receipt = 1 [(gogoproto.nullable) = false]; - // merkle proof of existence - bytes proof = 2; - // height at which the proof was retrieved - ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; -} - -// QueryUpgradeRequest is the request type for the QueryUpgradeRequest RPC method -message QueryUpgradeRequest { - string port_id = 1; - string channel_id = 2; -} - -// QueryUpgradeResponse is the response type for the QueryUpgradeResponse RPC method -message QueryUpgradeResponse { - Upgrade upgrade = 1 [(gogoproto.nullable) = false]; - // merkle proof of existence - bytes proof = 2; - // height at which the proof was retrieved - ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; -} - -// QueryChannelParamsRequest is the request type for the Query/ChannelParams RPC method. -message QueryChannelParamsRequest {} - -// QueryChannelParamsResponse is the response type for the Query/ChannelParams RPC method. -message QueryChannelParamsResponse { - // params defines the parameters of the module. - Params params = 1; -} \ No newline at end of file diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v1/tx.proto b/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v1/tx.proto index 06e8523284a..d1e82e7ae05 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v1/tx.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v1/tx.proto @@ -2,13 +2,12 @@ syntax = "proto3"; package ibc.core.channel.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/core/04-channel/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/core/04-channel/types"; import "gogoproto/gogo.proto"; import "cosmos/msg/v1/msg.proto"; import "ibc/core/client/v1/client.proto"; import "ibc/core/channel/v1/channel.proto"; -import "ibc/core/channel/v1/upgrade.proto"; // Msg defines the ibc/channel Msg service. service Msg { @@ -44,33 +43,6 @@ service Msg { // Acknowledgement defines a rpc handler method for MsgAcknowledgement. rpc Acknowledgement(MsgAcknowledgement) returns (MsgAcknowledgementResponse); - - // ChannelUpgradeInit defines a rpc handler method for MsgChannelUpgradeInit. - rpc ChannelUpgradeInit(MsgChannelUpgradeInit) returns (MsgChannelUpgradeInitResponse); - - // ChannelUpgradeTry defines a rpc handler method for MsgChannelUpgradeTry. - rpc ChannelUpgradeTry(MsgChannelUpgradeTry) returns (MsgChannelUpgradeTryResponse); - - // ChannelUpgradeAck defines a rpc handler method for MsgChannelUpgradeAck. - rpc ChannelUpgradeAck(MsgChannelUpgradeAck) returns (MsgChannelUpgradeAckResponse); - - // ChannelUpgradeConfirm defines a rpc handler method for MsgChannelUpgradeConfirm. - rpc ChannelUpgradeConfirm(MsgChannelUpgradeConfirm) returns (MsgChannelUpgradeConfirmResponse); - - // ChannelUpgradeOpen defines a rpc handler method for MsgChannelUpgradeOpen. - rpc ChannelUpgradeOpen(MsgChannelUpgradeOpen) returns (MsgChannelUpgradeOpenResponse); - - // ChannelUpgradeTimeout defines a rpc handler method for MsgChannelUpgradeTimeout. - rpc ChannelUpgradeTimeout(MsgChannelUpgradeTimeout) returns (MsgChannelUpgradeTimeoutResponse); - - // ChannelUpgradeCancel defines a rpc handler method for MsgChannelUpgradeCancel. - rpc ChannelUpgradeCancel(MsgChannelUpgradeCancel) returns (MsgChannelUpgradeCancelResponse); - - // UpdateChannelParams defines a rpc handler method for MsgUpdateParams. - rpc UpdateChannelParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); - - // PruneAcknowledgements defines a rpc handler method for MsgPruneAcknowledgements. - rpc PruneAcknowledgements(MsgPruneAcknowledgements) returns (MsgPruneAcknowledgementsResponse); } // ResponseResultType defines the possible outcomes of the execution of a message @@ -136,9 +108,6 @@ message MsgChannelOpenTryResponse { // MsgChannelOpenAck defines a msg sent by a Relayer to Chain A to acknowledge // the change of channel state to TRYOPEN on Chain B. -// WARNING: a channel upgrade MUST NOT initialize an upgrade for this channel -// in the same block as executing this message otherwise the counterparty will -// be incapable of opening. message MsgChannelOpenAck { option (cosmos.msg.v1.signer) = "signer"; @@ -196,12 +165,11 @@ message MsgChannelCloseConfirm { option (gogoproto.goproto_getters) = false; - string port_id = 1; - string channel_id = 2; - bytes proof_init = 3; - ibc.core.client.v1.Height proof_height = 4 [(gogoproto.nullable) = false]; - string signer = 5; - uint64 counterparty_upgrade_sequence = 6; + string port_id = 1; + string channel_id = 2; + bytes proof_init = 3; + ibc.core.client.v1.Height proof_height = 4 [(gogoproto.nullable) = false]; + string signer = 5; } // MsgChannelCloseConfirmResponse defines the Msg/ChannelCloseConfirm response @@ -253,13 +221,12 @@ message MsgTimeoutOnClose { option (gogoproto.goproto_getters) = false; - Packet packet = 1 [(gogoproto.nullable) = false]; - bytes proof_unreceived = 2; - bytes proof_close = 3; - ibc.core.client.v1.Height proof_height = 4 [(gogoproto.nullable) = false]; - uint64 next_sequence_recv = 5; - string signer = 6; - uint64 counterparty_upgrade_sequence = 7; + Packet packet = 1 [(gogoproto.nullable) = false]; + bytes proof_unreceived = 2; + bytes proof_close = 3; + ibc.core.client.v1.Height proof_height = 4 [(gogoproto.nullable) = false]; + uint64 next_sequence_recv = 5; + string signer = 6; } // MsgTimeoutOnCloseResponse defines the Msg/TimeoutOnClose response type. @@ -288,182 +255,3 @@ message MsgAcknowledgementResponse { ResponseResultType result = 1; } - -// MsgChannelUpgradeInit defines the request type for the ChannelUpgradeInit rpc -// WARNING: Initializing a channel upgrade in the same block as opening the channel -// may result in the counterparty being incapable of opening. -message MsgChannelUpgradeInit { - option (cosmos.msg.v1.signer) = "signer"; - - option (gogoproto.goproto_getters) = false; - - string port_id = 1; - string channel_id = 2; - UpgradeFields fields = 3 [(gogoproto.nullable) = false]; - string signer = 4; -} - -// MsgChannelUpgradeInitResponse defines the MsgChannelUpgradeInit response type -message MsgChannelUpgradeInitResponse { - option (gogoproto.goproto_getters) = false; - - Upgrade upgrade = 1 [(gogoproto.nullable) = false]; - uint64 upgrade_sequence = 2; -} - -// MsgChannelUpgradeTry defines the request type for the ChannelUpgradeTry rpc -message MsgChannelUpgradeTry { - option (cosmos.msg.v1.signer) = "signer"; - - option (gogoproto.goproto_getters) = false; - - string port_id = 1; - string channel_id = 2; - repeated string proposed_upgrade_connection_hops = 3; - UpgradeFields counterparty_upgrade_fields = 4 [(gogoproto.nullable) = false]; - uint64 counterparty_upgrade_sequence = 5; - bytes proof_channel = 6; - bytes proof_upgrade = 7; - ibc.core.client.v1.Height proof_height = 8 [(gogoproto.nullable) = false]; - string signer = 9; -} - -// MsgChannelUpgradeTryResponse defines the MsgChannelUpgradeTry response type -message MsgChannelUpgradeTryResponse { - option (gogoproto.goproto_getters) = false; - - Upgrade upgrade = 1 [(gogoproto.nullable) = false]; - uint64 upgrade_sequence = 2; - ResponseResultType result = 3; -} - -// MsgChannelUpgradeAck defines the request type for the ChannelUpgradeAck rpc -message MsgChannelUpgradeAck { - option (cosmos.msg.v1.signer) = "signer"; - - option (gogoproto.goproto_getters) = false; - string port_id = 1; - string channel_id = 2; - Upgrade counterparty_upgrade = 3 [(gogoproto.nullable) = false]; - bytes proof_channel = 4; - bytes proof_upgrade = 5; - ibc.core.client.v1.Height proof_height = 6 [(gogoproto.nullable) = false]; - string signer = 7; -} - -// MsgChannelUpgradeAckResponse defines MsgChannelUpgradeAck response type -message MsgChannelUpgradeAckResponse { - option (gogoproto.goproto_getters) = false; - - ResponseResultType result = 1; -} - -// MsgChannelUpgradeConfirm defines the request type for the ChannelUpgradeConfirm rpc -message MsgChannelUpgradeConfirm { - option (cosmos.msg.v1.signer) = "signer"; - - option (gogoproto.goproto_getters) = false; - string port_id = 1; - string channel_id = 2; - State counterparty_channel_state = 3; - Upgrade counterparty_upgrade = 4 [(gogoproto.nullable) = false]; - bytes proof_channel = 5; - bytes proof_upgrade = 6; - ibc.core.client.v1.Height proof_height = 7 [(gogoproto.nullable) = false]; - string signer = 8; -} - -// MsgChannelUpgradeConfirmResponse defines MsgChannelUpgradeConfirm response type -message MsgChannelUpgradeConfirmResponse { - option (gogoproto.goproto_getters) = false; - - ResponseResultType result = 1; -} - -// MsgChannelUpgradeOpen defines the request type for the ChannelUpgradeOpen rpc -message MsgChannelUpgradeOpen { - option (cosmos.msg.v1.signer) = "signer"; - - option (gogoproto.goproto_getters) = false; - string port_id = 1; - string channel_id = 2; - State counterparty_channel_state = 3; - uint64 counterparty_upgrade_sequence = 4; - bytes proof_channel = 5; - ibc.core.client.v1.Height proof_height = 6 [(gogoproto.nullable) = false]; - string signer = 7; -} - -// MsgChannelUpgradeOpenResponse defines the MsgChannelUpgradeOpen response type -message MsgChannelUpgradeOpenResponse {} - -// MsgChannelUpgradeTimeout defines the request type for the ChannelUpgradeTimeout rpc -message MsgChannelUpgradeTimeout { - option (cosmos.msg.v1.signer) = "signer"; - - option (gogoproto.goproto_getters) = false; - - string port_id = 1; - string channel_id = 2; - Channel counterparty_channel = 3 [(gogoproto.nullable) = false]; - bytes proof_channel = 4; - ibc.core.client.v1.Height proof_height = 5 [(gogoproto.nullable) = false]; - string signer = 6; -} - -// MsgChannelUpgradeTimeoutResponse defines the MsgChannelUpgradeTimeout response type -message MsgChannelUpgradeTimeoutResponse {} - -// MsgChannelUpgradeCancel defines the request type for the ChannelUpgradeCancel rpc -message MsgChannelUpgradeCancel { - option (cosmos.msg.v1.signer) = "signer"; - - option (gogoproto.goproto_getters) = false; - - string port_id = 1; - string channel_id = 2; - ErrorReceipt error_receipt = 3 [(gogoproto.nullable) = false]; - bytes proof_error_receipt = 4; - ibc.core.client.v1.Height proof_height = 5 [(gogoproto.nullable) = false]; - string signer = 6; -} - -// MsgChannelUpgradeCancelResponse defines the MsgChannelUpgradeCancel response type -message MsgChannelUpgradeCancelResponse {} - -// MsgUpdateParams is the MsgUpdateParams request type. -message MsgUpdateParams { - option (cosmos.msg.v1.signer) = "authority"; - - option (gogoproto.goproto_getters) = false; - - // authority is the address that controls the module (defaults to x/gov unless overwritten). - string authority = 1; - - // params defines the channel parameters to update. - // - // NOTE: All parameters must be supplied. - Params params = 2 [(gogoproto.nullable) = false]; -} - -// MsgUpdateParamsResponse defines the MsgUpdateParams response type. -message MsgUpdateParamsResponse {} - -// MsgPruneAcknowledgements defines the request type for the PruneAcknowledgements rpc. -message MsgPruneAcknowledgements { - option (cosmos.msg.v1.signer) = "signer"; - option (gogoproto.goproto_getters) = false; - - string port_id = 1; - string channel_id = 2; - uint64 limit = 3; - string signer = 4; -} - -// MsgPruneAcknowledgementsResponse defines the response type for the PruneAcknowledgements rpc. -message MsgPruneAcknowledgementsResponse { - // Number of sequences pruned (includes both packet acknowledgements and packet receipts where appropriate). - uint64 total_pruned_sequences = 1; - // Number of sequences left after pruning. - uint64 total_remaining_sequences = 2; -} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v1/upgrade.proto b/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v1/upgrade.proto deleted file mode 100644 index ea5ae929b46..00000000000 --- a/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v1/upgrade.proto +++ /dev/null @@ -1,43 +0,0 @@ -syntax = "proto3"; - -package ibc.core.channel.v1; - -option go_package = "github.com/cosmos/ibc-go/v9/modules/core/04-channel/types"; - -import "gogoproto/gogo.proto"; -import "ibc/core/channel/v1/channel.proto"; - -// Upgrade is a verifiable type which contains the relevant information -// for an attempted upgrade. It provides the proposed changes to the channel -// end, the timeout for this upgrade attempt and the next packet sequence -// which allows the counterparty to efficiently know the highest sequence it has received. -// The next sequence send is used for pruning and upgrading from unordered to ordered channels. -message Upgrade { - option (gogoproto.goproto_getters) = false; - - UpgradeFields fields = 1 [(gogoproto.nullable) = false]; - Timeout timeout = 2 [(gogoproto.nullable) = false]; - uint64 next_sequence_send = 3; -} - -// UpgradeFields are the fields in a channel end which may be changed -// during a channel upgrade. -message UpgradeFields { - option (gogoproto.goproto_getters) = false; - - Order ordering = 1; - repeated string connection_hops = 2; - string version = 3; -} - -// ErrorReceipt defines a type which encapsulates the upgrade sequence and error associated with the -// upgrade handshake failure. When a channel upgrade handshake is aborted both chains are expected to increment to the -// next sequence. -message ErrorReceipt { - option (gogoproto.goproto_getters) = false; - - // the channel upgrade sequence - uint64 sequence = 1; - // the error message detailing the cause of failure - string message = 2; -} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v2/genesis.proto b/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v2/genesis.proto new file mode 100644 index 00000000000..5208044f331 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v2/genesis.proto @@ -0,0 +1,39 @@ +syntax = "proto3"; + +package ibc.core.channel.v2; + +option go_package = "github.com/cosmos/ibc-go/v10/modules/core/04-channel/v2/types"; + +import "gogoproto/gogo.proto"; + +// GenesisState defines the ibc channel/v2 submodule's genesis state. +message GenesisState { + repeated PacketState acknowledgements = 2 [(gogoproto.nullable) = false]; + repeated PacketState commitments = 3 [(gogoproto.nullable) = false]; + repeated PacketState receipts = 4 [(gogoproto.nullable) = false]; + repeated PacketState async_packets = 5 [(gogoproto.nullable) = false]; + repeated PacketSequence send_sequences = 6 [(gogoproto.nullable) = false]; +} + +// PacketState defines the generic type necessary to retrieve and store +// packet commitments, acknowledgements, and receipts. +// Caller is responsible for knowing the context necessary to interpret this +// state as a commitment, acknowledgement, or a receipt. +message PacketState { + option (gogoproto.goproto_getters) = false; + + // client unique identifier. + string client_id = 1; + // packet sequence. + uint64 sequence = 2; + // embedded data that represents packet state. + bytes data = 3; +} + +// PacketSequence defines the genesis type necessary to retrieve and store next send sequences. +message PacketSequence { + // client unique identifier. + string client_id = 1; + // packet sequence + uint64 sequence = 2; +} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v2/packet.proto b/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v2/packet.proto new file mode 100644 index 00000000000..c7683f6ede0 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v2/packet.proto @@ -0,0 +1,68 @@ + +syntax = "proto3"; + +package ibc.core.channel.v2; + +option go_package = "github.com/cosmos/ibc-go/v10/modules/core/04-channel/v2/types"; + +import "gogoproto/gogo.proto"; + +// Packet defines a type that carries data across different chains through IBC +message Packet { + // number corresponds to the order of sends and receives, where a Packet + // with an earlier sequence number must be sent and received before a Packet + // with a later sequence number. + uint64 sequence = 1; + // identifies the sending client on the sending chain. + string source_client = 2; + // identifies the receiving client on the receiving chain. + string destination_client = 3; + // timeout timestamp in seconds after which the packet times out. + uint64 timeout_timestamp = 4; + // a list of payloads, each one for a specific application. + repeated Payload payloads = 5 [(gogoproto.nullable) = false]; +} + +// Payload contains the source and destination ports and payload for the application (version, encoding, raw bytes) +message Payload { + // specifies the source port of the packet. + string source_port = 1; + // specifies the destination port of the packet. + string destination_port = 2; + // version of the specified application. + string version = 3; + // the encoding used for the provided value. + string encoding = 4; + // the raw bytes for the payload. + bytes value = 5; +} + +// Acknowledgement contains a list of all ack results associated with a single packet. +// In the case of a successful receive, the acknowledgement will contain an app acknowledgement +// for each application that received a payload in the same order that the payloads were sent +// in the packet. +// If the receive is not successful, the acknowledgement will contain a single app acknowledgment +// which will be a constant error acknowledgment as defined by the IBC v2 protocol. +message Acknowledgement { + repeated bytes app_acknowledgements = 1; +} + +// PacketStatus specifies the status of a RecvPacketResult. +enum PacketStatus { + // PACKET_STATUS_UNSPECIFIED indicates an unknown packet status. + PACKET_STATUS_UNSPECIFIED = 0 [(gogoproto.enumvalue_customname) = "NONE"]; + // PACKET_STATUS_SUCCESS indicates a successful packet receipt. + PACKET_STATUS_SUCCESS = 1 [(gogoproto.enumvalue_customname) = "Success"]; + // PACKET_STATUS_FAILURE indicates a failed packet receipt. + PACKET_STATUS_FAILURE = 2 [(gogoproto.enumvalue_customname) = "Failure"]; + // PACKET_STATUS_ASYNC indicates an async packet receipt. + PACKET_STATUS_ASYNC = 3 [(gogoproto.enumvalue_customname) = "Async"]; +} + +// RecvPacketResult speecifies the status of a packet as well as the acknowledgement bytes. +message RecvPacketResult { + // status of the packet + PacketStatus status = 1; + // acknowledgement of the packet + bytes acknowledgement = 2; +} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v2/query.proto b/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v2/query.proto new file mode 100644 index 00000000000..2a19de89c9b --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v2/query.proto @@ -0,0 +1,199 @@ +syntax = "proto3"; + +package ibc.core.channel.v2; + +option go_package = "github.com/cosmos/ibc-go/v10/modules/core/04-channel/v2/types"; + +import "cosmos/base/query/v1beta1/pagination.proto"; +import "ibc/core/channel/v2/genesis.proto"; +import "ibc/core/client/v1/client.proto"; +import "google/api/annotations.proto"; +import "gogoproto/gogo.proto"; + +// Query provides defines the gRPC querier service +service Query { + // NextSequenceSend returns the next send sequence for a given channel. + rpc NextSequenceSend(QueryNextSequenceSendRequest) returns (QueryNextSequenceSendResponse) { + option (google.api.http).get = "/ibc/core/channel/v2/clients/{client_id}/next_sequence_send"; + } + + // PacketCommitment queries a stored packet commitment hash. + rpc PacketCommitment(QueryPacketCommitmentRequest) returns (QueryPacketCommitmentResponse) { + option (google.api.http).get = "/ibc/core/channel/v2/clients/{client_id}/packet_commitments/{sequence}"; + } + + // PacketCommitments queries a stored packet commitment hash. + rpc PacketCommitments(QueryPacketCommitmentsRequest) returns (QueryPacketCommitmentsResponse) { + option (google.api.http).get = "/ibc/core/channel/v2/clients/{client_id}/packet_commitments"; + } + + // PacketAcknowledgement queries a stored acknowledgement commitment hash. + rpc PacketAcknowledgement(QueryPacketAcknowledgementRequest) returns (QueryPacketAcknowledgementResponse) { + option (google.api.http).get = "/ibc/core/channel/v2/clients/{client_id}/packet_acks/{sequence}"; + } + + // PacketAcknowledgements returns all packet acknowledgements associated with a channel. + rpc PacketAcknowledgements(QueryPacketAcknowledgementsRequest) returns (QueryPacketAcknowledgementsResponse) { + option (google.api.http).get = "/ibc/core/channel/v2/clients/{client_id}/packet_acknowledgements"; + } + + // PacketReceipt queries a stored packet receipt. + rpc PacketReceipt(QueryPacketReceiptRequest) returns (QueryPacketReceiptResponse) { + option (google.api.http).get = "/ibc/core/channel/v2/clients/{client_id}/packet_receipts/{sequence}"; + } + + // UnreceivedPackets returns all the unreceived IBC packets associated with a channel and sequences. + rpc UnreceivedPackets(QueryUnreceivedPacketsRequest) returns (QueryUnreceivedPacketsResponse) { + option (google.api.http).get = "/ibc/core/channel/v2/clients/{client_id}/packet_commitments/" + "{sequences}/unreceived_packets"; + } + + // UnreceivedAcks returns all the unreceived IBC acknowledgements associated with a channel and sequences. + rpc UnreceivedAcks(QueryUnreceivedAcksRequest) returns (QueryUnreceivedAcksResponse) { + option (google.api.http).get = + "/ibc/core/channel/v2/clients/{client_id}/packet_commitments/{packet_ack_sequences}/unreceived_acks"; + } +} + +// QueryNextSequenceSendRequest is the request type for the Query/QueryNextSequenceSend RPC method +message QueryNextSequenceSendRequest { + // client unique identifier + string client_id = 1; +} + +// QueryNextSequenceSendResponse is the response type for the Query/QueryNextSequenceSend RPC method +message QueryNextSequenceSendResponse { + // next sequence send number + uint64 next_sequence_send = 1; + // merkle proof of existence + bytes proof = 2; + // height at which the proof was retrieved + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; +} + +// QueryPacketCommitmentRequest is the request type for the Query/PacketCommitment RPC method. +message QueryPacketCommitmentRequest { + // client unique identifier + string client_id = 1; + // packet sequence + uint64 sequence = 2; +} + +// QueryPacketCommitmentResponse is the response type for the Query/PacketCommitment RPC method. +message QueryPacketCommitmentResponse { + // packet associated with the request fields + bytes commitment = 1; + // merkle proof of existence + bytes proof = 2; + // height at which the proof was retrieved + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; +} + +// QueryPacketCommitmentsRequest is the request type for the Query/PacketCommitments RPC method. +message QueryPacketCommitmentsRequest { + // client unique identifier + string client_id = 1; + // pagination request + cosmos.base.query.v1beta1.PageRequest pagination = 2; +} + +// QueryPacketCommitmentResponse is the response type for the Query/PacketCommitment RPC method. +message QueryPacketCommitmentsResponse { + // collection of packet commitments for the requested channel identifier. + repeated ibc.core.channel.v2.PacketState commitments = 1; + // pagination response. + cosmos.base.query.v1beta1.PageResponse pagination = 2; + // query block height. + ibc.core.client.v1.Height height = 3 [(gogoproto.nullable) = false]; +} + +// QueryPacketAcknowledgementRequest is the request type for the Query/PacketAcknowledgement RPC method. +message QueryPacketAcknowledgementRequest { + // client unique identifier + string client_id = 1; + // packet sequence + uint64 sequence = 2; +} + +// QueryPacketAcknowledgementResponse is the response type for the Query/PacketAcknowledgement RPC method. +message QueryPacketAcknowledgementResponse { + // acknowledgement associated with the request fields + bytes acknowledgement = 1; + // merkle proof of existence + bytes proof = 2; + // height at which the proof was retrieved + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; +} + +// QueryPacketAcknowledgementsRequest is the request type for the +// Query/QueryPacketCommitments RPC method +message QueryPacketAcknowledgementsRequest { + // client unique identifier + string client_id = 1; + // pagination request + cosmos.base.query.v1beta1.PageRequest pagination = 2; + // list of packet sequences + repeated uint64 packet_commitment_sequences = 3; +} + +// QueryPacketAcknowledgemetsResponse is the request type for the +// Query/QueryPacketAcknowledgements RPC method +message QueryPacketAcknowledgementsResponse { + repeated ibc.core.channel.v2.PacketState acknowledgements = 1; + // pagination response + cosmos.base.query.v1beta1.PageResponse pagination = 2; + // query block height + ibc.core.client.v1.Height height = 3 [(gogoproto.nullable) = false]; +} + +// QueryPacketReceiptRequest is the request type for the Query/PacketReceipt RPC method. +message QueryPacketReceiptRequest { + // client unique identifier + string client_id = 1; + // packet sequence + uint64 sequence = 2; +} + +// QueryPacketReceiptResponse is the response type for the Query/PacketReceipt RPC method. +message QueryPacketReceiptResponse { + // success flag for if receipt exists + bool received = 2; + // merkle proof of existence or absence + bytes proof = 3; + // height at which the proof was retrieved + ibc.core.client.v1.Height proof_height = 4 [(gogoproto.nullable) = false]; +} + +// QueryUnreceivedPacketsRequest is the request type for the Query/UnreceivedPackets RPC method +message QueryUnreceivedPacketsRequest { + // client unique identifier + string client_id = 1; + // list of packet sequences + repeated uint64 sequences = 2; +} + +// QueryUnreceivedPacketsResponse is the response type for the Query/UnreceivedPacketCommitments RPC method +message QueryUnreceivedPacketsResponse { + // list of unreceived packet sequences + repeated uint64 sequences = 1; + // query block height + ibc.core.client.v1.Height height = 2 [(gogoproto.nullable) = false]; +} + +// QueryUnreceivedAcks is the request type for the +// Query/UnreceivedAcks RPC method +message QueryUnreceivedAcksRequest { + // client unique identifier + string client_id = 1; + // list of acknowledgement sequences + repeated uint64 packet_ack_sequences = 2; +} + +// QueryUnreceivedAcksResponse is the response type for the +// Query/UnreceivedAcks RPC method +message QueryUnreceivedAcksResponse { + // list of unreceived acknowledgement sequences + repeated uint64 sequences = 1; + // query block height + ibc.core.client.v1.Height height = 2 [(gogoproto.nullable) = false]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v2/tx.proto b/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v2/tx.proto new file mode 100644 index 00000000000..534c8ddd3c5 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/ibc/core/channel/v2/tx.proto @@ -0,0 +1,117 @@ +syntax = "proto3"; + +package ibc.core.channel.v2; + +option go_package = "github.com/cosmos/ibc-go/v10/modules/core/04-channel/v2/types"; + +import "gogoproto/gogo.proto"; +import "cosmos/msg/v1/msg.proto"; +import "ibc/core/channel/v2/packet.proto"; +import "ibc/core/client/v1/client.proto"; + +// Msg defines the ibc/channel/v2 Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // SendPacket defines a rpc handler method for MsgSendPacket. + rpc SendPacket(MsgSendPacket) returns (MsgSendPacketResponse); + + // RecvPacket defines a rpc handler method for MsgRecvPacket. + rpc RecvPacket(MsgRecvPacket) returns (MsgRecvPacketResponse); + + // Timeout defines a rpc handler method for MsgTimeout. + rpc Timeout(MsgTimeout) returns (MsgTimeoutResponse); + + // Acknowledgement defines a rpc handler method for MsgAcknowledgement. + rpc Acknowledgement(MsgAcknowledgement) returns (MsgAcknowledgementResponse); +} + +// MsgSendPacket sends an outgoing IBC packet. +message MsgSendPacket { + option (cosmos.msg.v1.signer) = "signer"; + option (gogoproto.goproto_getters) = false; + + string source_client = 1; + uint64 timeout_timestamp = 2; + repeated Payload payloads = 3 [(gogoproto.nullable) = false]; + string signer = 4; +} + +// MsgSendPacketResponse defines the Msg/SendPacket response type. +message MsgSendPacketResponse { + option (gogoproto.goproto_getters) = false; + + uint64 sequence = 1; +} + +// MsgRecvPacket receives an incoming IBC packet. +message MsgRecvPacket { + option (cosmos.msg.v1.signer) = "signer"; + + option (gogoproto.goproto_getters) = false; + + Packet packet = 1 [(gogoproto.nullable) = false]; + bytes proof_commitment = 2; + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; + string signer = 4; +} + +// ResponseResultType defines the possible outcomes of the execution of a message +enum ResponseResultType { + option (gogoproto.goproto_enum_prefix) = false; + + // Default zero value enumeration + RESPONSE_RESULT_TYPE_UNSPECIFIED = 0 [(gogoproto.enumvalue_customname) = "UNSPECIFIED"]; + // The message did not call the IBC application callbacks (because, for example, the packet had already been relayed) + RESPONSE_RESULT_TYPE_NOOP = 1 [(gogoproto.enumvalue_customname) = "NOOP"]; + // The message was executed successfully + RESPONSE_RESULT_TYPE_SUCCESS = 2 [(gogoproto.enumvalue_customname) = "SUCCESS"]; + // The message was executed unsuccessfully + RESPONSE_RESULT_TYPE_FAILURE = 3 [(gogoproto.enumvalue_customname) = "FAILURE"]; +} + +// MsgRecvPacketResponse defines the Msg/RecvPacket response type. +message MsgRecvPacketResponse { + option (gogoproto.goproto_getters) = false; + + ResponseResultType result = 1; +} + +// MsgTimeout receives timed-out packet +message MsgTimeout { + option (cosmos.msg.v1.signer) = "signer"; + + option (gogoproto.goproto_getters) = false; + + Packet packet = 1 [(gogoproto.nullable) = false]; + bytes proof_unreceived = 2; + ibc.core.client.v1.Height proof_height = 3 [(gogoproto.nullable) = false]; + string signer = 5; +} + +// MsgTimeoutResponse defines the Msg/Timeout response type. +message MsgTimeoutResponse { + option (gogoproto.goproto_getters) = false; + + ResponseResultType result = 1; +} + +// MsgAcknowledgement receives incoming IBC acknowledgement. +message MsgAcknowledgement { + option (cosmos.msg.v1.signer) = "signer"; + + option (gogoproto.goproto_getters) = false; + + Packet packet = 1 [(gogoproto.nullable) = false]; + Acknowledgement acknowledgement = 2 [(gogoproto.nullable) = false]; + bytes proof_acked = 3; + ibc.core.client.v1.Height proof_height = 4 [(gogoproto.nullable) = false]; + string signer = 5; +} + +// MsgAcknowledgementResponse defines the Msg/Acknowledgement response type. +message MsgAcknowledgementResponse { + option (gogoproto.goproto_getters) = false; + + ResponseResultType result = 1; +} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v1/client.proto b/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v1/client.proto index d2ff2a2801c..f22a7b581eb 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v1/client.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v1/client.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.core.client.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/core/02-client/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/core/02-client/types"; import "gogoproto/gogo.proto"; import "google/protobuf/any.proto"; diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v1/genesis.proto b/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v1/genesis.proto index f5d7b258735..ba588282ab7 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v1/genesis.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v1/genesis.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.core.client.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/core/02-client/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/core/02-client/types"; import "ibc/core/client/v1/client.proto"; import "gogoproto/gogo.proto"; diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v1/query.proto b/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v1/query.proto index 1cc773e5990..0c436d5ef1e 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v1/query.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v1/query.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.core.client.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/core/02-client/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/core/02-client/types"; import "cosmos/base/query/v1beta1/pagination.proto"; import "cosmos/query/v1/query.proto"; @@ -53,6 +53,11 @@ service Query { option (google.api.http).get = "/ibc/core/client/v1/params"; } + // ClientCreator queries the creator of a given client. + rpc ClientCreator(QueryClientCreatorRequest) returns (QueryClientCreatorResponse) { + option (google.api.http).get = "/ibc/core/client/v1/client_creator/{client_id}"; + } + // UpgradedClientState queries an Upgraded IBC light client. rpc UpgradedClientState(QueryUpgradedClientStateRequest) returns (QueryUpgradedClientStateResponse) { option (google.api.http).get = "/ibc/core/client/v1/upgraded_client_states"; @@ -195,6 +200,20 @@ message QueryClientParamsResponse { Params params = 1; } +// QueryClientCreatorRequest is the request type for the Query/ClientCreator RPC +// method. +message QueryClientCreatorRequest { + // client unique identifier + string client_id = 1; +} + +// QueryClientCreatorResponse is the response type for the Query/ClientCreator RPC +// method. +message QueryClientCreatorResponse { + // creator of the client + string creator = 1; +} + // QueryUpgradedClientStateRequest is the request type for the // Query/UpgradedClientState RPC method message QueryUpgradedClientStateRequest {} @@ -241,4 +260,4 @@ message QueryVerifyMembershipRequest { message QueryVerifyMembershipResponse { // boolean indicating success or failure of proof verification. bool success = 1; -} \ No newline at end of file +} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v1/tx.proto b/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v1/tx.proto index 1e9e4f47ada..0cebe2bfbbd 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v1/tx.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v1/tx.proto @@ -2,8 +2,9 @@ syntax = "proto3"; package ibc.core.client.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/core/02-client/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/core/02-client/types"; +import "amino/amino.proto"; import "cosmos/msg/v1/msg.proto"; import "cosmos/upgrade/v1beta1/upgrade.proto"; import "gogoproto/gogo.proto"; @@ -23,9 +24,6 @@ service Msg { // UpgradeClient defines a rpc handler method for MsgUpgradeClient. rpc UpgradeClient(MsgUpgradeClient) returns (MsgUpgradeClientResponse); - // SubmitMisbehaviour defines a rpc handler method for MsgSubmitMisbehaviour. - rpc SubmitMisbehaviour(MsgSubmitMisbehaviour) returns (MsgSubmitMisbehaviourResponse); - // RecoverClient defines a rpc handler method for MsgRecoverClient. rpc RecoverClient(MsgRecoverClient) returns (MsgRecoverClientResponse); @@ -34,6 +32,9 @@ service Msg { // UpdateClientParams defines a rpc handler method for MsgUpdateParams. rpc UpdateClientParams(MsgUpdateParams) returns (MsgUpdateParamsResponse); + + // DeleteClientCreator defines a rpc handler method for MsgDeleteClientCreator. + rpc DeleteClientCreator(MsgDeleteClientCreator) returns (MsgDeleteClientCreatorResponse); } // MsgCreateClient defines a message to create an IBC client @@ -101,29 +102,9 @@ message MsgUpgradeClient { // MsgUpgradeClientResponse defines the Msg/UpgradeClient response type. message MsgUpgradeClientResponse {} -// MsgSubmitMisbehaviour defines an sdk.Msg type that submits Evidence for -// light client misbehaviour. -// This message has been deprecated. Use MsgUpdateClient instead. -message MsgSubmitMisbehaviour { - option deprecated = true; - option (cosmos.msg.v1.signer) = "signer"; - - option (gogoproto.goproto_getters) = false; - - // client unique identifier - string client_id = 1; - // misbehaviour used for freezing the light client - google.protobuf.Any misbehaviour = 2; - // signer address - string signer = 3; -} - -// MsgSubmitMisbehaviourResponse defines the Msg/SubmitMisbehaviour response -// type. -message MsgSubmitMisbehaviourResponse {} - // MsgRecoverClient defines the message used to recover a frozen or expired client. message MsgRecoverClient { + option (amino.name) = "cosmos-sdk/MsgRecoverClient"; option (gogoproto.goproto_getters) = false; option (cosmos.msg.v1.signer) = "signer"; @@ -177,3 +158,18 @@ message MsgUpdateParams { // MsgUpdateParamsResponse defines the MsgUpdateParams response type. message MsgUpdateParamsResponse {} + +// MsgDeleteClientCreator defines a message to delete the client creator of a client +message MsgDeleteClientCreator { + option (cosmos.msg.v1.signer) = "signer"; + + option (gogoproto.goproto_getters) = false; + + // client identifier + string client_id = 1; + // signer address + string signer = 2; +} + +// MsgDeleteClientCreatorResponse defines the Msg/DeleteClientCreator response type. +message MsgDeleteClientCreatorResponse {} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v2/config.proto b/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v2/config.proto new file mode 100644 index 00000000000..8f1c5273242 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v2/config.proto @@ -0,0 +1,14 @@ +syntax = "proto3"; + +package ibc.core.client.v2; + +option go_package = "github.com/cosmos/ibc-go/v10/modules/core/02-client/v2/types"; + +// Config is a **per-client** configuration struct that sets which relayers are allowed to relay v2 IBC messages +// for a given client. +// If it is set, then only relayers in the allow list can send v2 messages +// If it is not set, then the client allows permissionless relaying of v2 messages +message Config { + // allowed_relayers defines the set of allowed relayers for IBC V2 protocol for the given client + repeated string allowed_relayers = 1; +} \ No newline at end of file diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v2/counterparty.proto b/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v2/counterparty.proto new file mode 100644 index 00000000000..494ac0b436e --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v2/counterparty.proto @@ -0,0 +1,13 @@ +syntax = "proto3"; + +package ibc.core.client.v2; + +option go_package = "github.com/cosmos/ibc-go/v10/modules/core/02-client/v2/types"; + +// CounterpartyInfo defines the key that the counterparty will use to message our client +message CounterpartyInfo { + // merkle prefix key is the prefix that ics provable keys are stored under + repeated bytes merkle_prefix = 1; + // client identifier is the identifier used to send packet messages to our client + string client_id = 2; +} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v2/genesis.proto b/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v2/genesis.proto new file mode 100644 index 00000000000..b2b0e3d6def --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v2/genesis.proto @@ -0,0 +1,23 @@ +syntax = "proto3"; + +package ibc.core.client.v2; + +option go_package = "github.com/cosmos/ibc-go/v10/modules/core/02-client/v2/types"; + +import "ibc/core/client/v2/counterparty.proto"; +import "gogoproto/gogo.proto"; + +// GenesisCounterpartyInfo defines the state associating a client with a counterparty. +message GenesisCounterpartyInfo { + // ClientId is the ID of the given client. + string client_id = 1; + + // CounterpartyInfo is the counterparty info of the given client. + CounterpartyInfo counterparty_info = 2 [(gogoproto.nullable) = false]; +} + +// GenesisState defines the ibc client v2 submodule's genesis state. +message GenesisState { + // counterparty info for each client + repeated GenesisCounterpartyInfo counterparty_infos = 1 [(gogoproto.nullable) = false]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v2/query.proto b/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v2/query.proto new file mode 100644 index 00000000000..6e3b509c0cb --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v2/query.proto @@ -0,0 +1,46 @@ +syntax = "proto3"; + +package ibc.core.client.v2; + +option go_package = "github.com/cosmos/ibc-go/v10/modules/core/02-client/v2/types"; + +import "ibc/core/client/v2/counterparty.proto"; +import "ibc/core/client/v2/config.proto"; +import "google/api/annotations.proto"; + +// Query provides defines the gRPC querier service +service Query { + // CounterpartyInfo queries an IBC light counter party info. + rpc CounterpartyInfo(QueryCounterpartyInfoRequest) returns (QueryCounterpartyInfoResponse) { + option (google.api.http).get = "/ibc/core/client/v2/counterparty_info/{client_id}"; + } + + // Config queries the IBC client v2 configuration for a given client. + rpc Config(QueryConfigRequest) returns (QueryConfigResponse) { + option (google.api.http).get = "/ibc/core/client/v2/config/{client_id}"; + } +} + +// QueryCounterpartyInfoRequest is the request type for the Query/CounterpartyInfo RPC +// method +message QueryCounterpartyInfoRequest { + // client state unique identifier + string client_id = 1; +} + +// QueryCounterpartyInfoResponse is the response type for the +// Query/CounterpartyInfo RPC method. +message QueryCounterpartyInfoResponse { + CounterpartyInfo counterparty_info = 1; +} + +// QueryConfigRequest is the request type for the Query/Config RPC method +message QueryConfigRequest { + // client state unique identifier + string client_id = 1; +} + +// QueryConfigResponse is the response type for the Query/Config RPC method +message QueryConfigResponse { + Config config = 1; +} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v2/tx.proto b/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v2/tx.proto new file mode 100644 index 00000000000..ae39c0a7e69 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/ibc/core/client/v2/tx.proto @@ -0,0 +1,58 @@ +syntax = "proto3"; + +package ibc.core.client.v2; + +option go_package = "github.com/cosmos/ibc-go/v10/modules/core/02-client/v2/types"; + +import "cosmos/msg/v1/msg.proto"; +import "gogoproto/gogo.proto"; +import "ibc/core/client/v2/config.proto"; + +// Msg defines the ibc/client/v2 Msg service. +service Msg { + option (cosmos.msg.v1.service) = true; + + // RegisterCounterparty defines a rpc handler method for MsgRegisterCounterparty. + rpc RegisterCounterparty(MsgRegisterCounterparty) returns (MsgRegisterCounterpartyResponse); + + // UpdateClientConfig defines a rpc handler method for MsgUpdateClientConfig. + rpc UpdateClientConfig(MsgUpdateClientConfig) returns (MsgUpdateClientConfigResponse); +} + +// MsgRegisterCounterparty defines a message to register a counterparty on a client +message MsgRegisterCounterparty { + option (cosmos.msg.v1.signer) = "signer"; + + option (gogoproto.goproto_getters) = false; + + // client identifier + string client_id = 1; + // counterparty merkle prefix + repeated bytes counterparty_merkle_prefix = 2; + // counterparty client identifier + string counterparty_client_id = 3; + // signer address + string signer = 4; +} + +// MsgRegisterCounterpartyResponse defines the Msg/RegisterCounterparty response type. +message MsgRegisterCounterpartyResponse {} + +// MsgUpdateClientConfig defines the sdk.Msg type to update the configuration for a given client +message MsgUpdateClientConfig { + option (cosmos.msg.v1.signer) = "signer"; + + option (gogoproto.goproto_getters) = false; + + // client identifier + string client_id = 1; + // allowed relayers + // + // NOTE: All fields in the config must be supplied. + Config config = 2 [(gogoproto.nullable) = false]; + // signer address + string signer = 3; +} + +// MsgUpdateClientConfigResponse defines the MsgUpdateClientConfig response type. +message MsgUpdateClientConfigResponse {} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/core/commitment/v1/commitment.proto b/scripts/makefiles/swagger-proto/third_party/ibc/core/commitment/v1/commitment.proto index d3431f71ab1..07b143bd320 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/core/commitment/v1/commitment.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/core/commitment/v1/commitment.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.core.commitment.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/core/23-commitment/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/core/23-commitment/types"; import "gogoproto/gogo.proto"; import "cosmos/ics23/v1/proofs.proto"; diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/core/commitment/v2/commitment.proto b/scripts/makefiles/swagger-proto/third_party/ibc/core/commitment/v2/commitment.proto index 5c1b5f40279..54018675ff7 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/core/commitment/v2/commitment.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/core/commitment/v2/commitment.proto @@ -2,11 +2,39 @@ syntax = "proto3"; package ibc.core.commitment.v2; -option go_package = "github.com/cosmos/ibc-go/v9/modules/core/23-commitment/types/v2"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/core/23-commitment/types/v2"; // MerklePath is the path used to verify commitment proofs, which can be an // arbitrary structured object (defined by a commitment type). -// MerklePath is represented from root-to-leaf +// ICS-23 verification supports membership proofs for nested merkle trees. +// The ICS-24 standard provable keys MUST be stored in the lowest level tree with an optional prefix. +// The IC24 provable tree may then be stored in a higher level tree(s) that hash up to the root hash +// stored in the consensus state of the client. +// Each element of the path represents the key of a merkle tree from the root to the leaf. +// The elements of the path before the final element must be the path to the tree that contains +// the ICS24 provable store. Thus, it should remain constant for all ICS24 proofs. +// The final element of the path is the key of the leaf in the ICS24 provable store, +// Thus IBC core will append the ICS24 path to the final element of the MerklePath +// stored in the counterparty to create the full path to the leaf for proof verification. +// Examples: +// Cosmos SDK: +// The Cosmos SDK commits to a multi-tree where each store is an IAVL tree and all store hashes +// are hashed in a simple merkle tree to get the final root hash. Thus, the MerklePath in the counterparty +// MerklePrefix has the following structure: ["ibc", ""] +// The core IBC handler will append the ICS24 path to the final element of the MerklePath +// like so: ["ibc", "{packetCommitmentPath}"] which will then be used for final verification. +// Ethereum: +// The Ethereum client commits to a single Patricia merkle trie. The ICS24 provable store is managed +// by the smart contract state. Each smart contract has a specific prefix reserved within the global trie. +// Thus the MerklePath in the counterparty is the prefix to the smart contract state in the global trie. +// Since there is only one tree in the commitment structure of ethereum the MerklePath in the counterparty +// MerklePrefix has the following structure: ["IBCCoreContractAddressStoragePrefix"] +// The core IBC handler will append the ICS24 path to the final element of the MerklePath +// like so: ["IBCCoreContractAddressStoragePrefix{packetCommitmentPath}"] which will then be used for final +// verification. Thus the MerklePath in the counterparty MerklePrefix is the nested key path from the root hash of the +// consensus state down to the ICS24 provable store. The IBC handler retrieves the counterparty key path to the ICS24 +// provable store from the MerklePath and appends the ICS24 path to get the final key path to the value being verified +// by the client against the root hash in the client's consensus state. message MerklePath { repeated bytes key_path = 1; -} \ No newline at end of file +} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/core/connection/v1/connection.proto b/scripts/makefiles/swagger-proto/third_party/ibc/core/connection/v1/connection.proto index c5aa79dabcf..5ef00982627 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/core/connection/v1/connection.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/core/connection/v1/connection.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.core.connection.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/core/03-connection/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/core/03-connection/types"; import "gogoproto/gogo.proto"; import "ibc/core/commitment/v1/commitment.proto"; diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/core/connection/v1/genesis.proto b/scripts/makefiles/swagger-proto/third_party/ibc/core/connection/v1/genesis.proto index 9db9c1748ed..b8456373c79 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/core/connection/v1/genesis.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/core/connection/v1/genesis.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.core.connection.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/core/03-connection/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/core/03-connection/types"; import "gogoproto/gogo.proto"; import "ibc/core/connection/v1/connection.proto"; diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/core/connection/v1/query.proto b/scripts/makefiles/swagger-proto/third_party/ibc/core/connection/v1/query.proto index 5b6547282f3..090dcc60dbc 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/core/connection/v1/query.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/core/connection/v1/query.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.core.connection.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/core/03-connection/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/core/03-connection/types"; import "gogoproto/gogo.proto"; import "cosmos/base/query/v1beta1/pagination.proto"; @@ -149,4 +149,4 @@ message QueryConnectionParamsRequest {} message QueryConnectionParamsResponse { // params defines the parameters of the module. Params params = 1; -} \ No newline at end of file +} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/core/connection/v1/tx.proto b/scripts/makefiles/swagger-proto/third_party/ibc/core/connection/v1/tx.proto index 894a8bcddd6..ac45fddbd56 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/core/connection/v1/tx.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/core/connection/v1/tx.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.core.connection.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/core/03-connection/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/core/03-connection/types"; import "gogoproto/gogo.proto"; import "cosmos/msg/v1/msg.proto"; diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/core/types/v1/genesis.proto b/scripts/makefiles/swagger-proto/third_party/ibc/core/types/v1/genesis.proto index 4c6571da60a..bbf5524b862 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/core/types/v1/genesis.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/core/types/v1/genesis.proto @@ -2,12 +2,14 @@ syntax = "proto3"; package ibc.core.types.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/core/types"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/core/types"; import "gogoproto/gogo.proto"; import "ibc/core/client/v1/genesis.proto"; +import "ibc/core/client/v2/genesis.proto"; import "ibc/core/connection/v1/genesis.proto"; import "ibc/core/channel/v1/genesis.proto"; +import "ibc/core/channel/v2/genesis.proto"; // GenesisState defines the ibc module's genesis state. message GenesisState { @@ -17,4 +19,8 @@ message GenesisState { ibc.core.connection.v1.GenesisState connection_genesis = 2 [(gogoproto.nullable) = false]; // ICS004 - Channel genesis state ibc.core.channel.v1.GenesisState channel_genesis = 3 [(gogoproto.nullable) = false]; + // ICS002 - Clients/v2 genesis state + ibc.core.client.v2.GenesisState client_v2_genesis = 4 [(gogoproto.nullable) = false]; + // ICS004 - Channel/v2 genesis state + ibc.core.channel.v2.GenesisState channel_v2_genesis = 5 [(gogoproto.nullable) = false]; } diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/solomachine/v2/solomachine.proto b/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/solomachine/v2/solomachine.proto index aab7140b47b..3a43e208b42 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/solomachine/v2/solomachine.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/solomachine/v2/solomachine.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.lightclients.solomachine.v2; -option go_package = "github.com/cosmos/ibc-go/v9/modules/core/02-client/migrations/v7"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/core/02-client/migrations/v7"; import "ibc/core/connection/v1/connection.proto"; import "ibc/core/channel/v1/channel.proto"; @@ -30,7 +30,7 @@ message ConsensusState { option (gogoproto.goproto_getters) = false; // public key of the solo machine google.protobuf.Any public_key = 1; - // diversifier allows the same public key to be re-used across different solo + // diversifier allows the same public key to be reused across different solo // machine clients (potentially on different chains) without being considered // misbehaviour. string diversifier = 2; diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/solomachine/v3/solomachine.proto b/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/solomachine/v3/solomachine.proto index bb0d2aec99d..d8e0adcbf6f 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/solomachine/v3/solomachine.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/solomachine/v3/solomachine.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.lightclients.solomachine.v3; -option go_package = "github.com/cosmos/ibc-go/v9/modules/light-clients/06-solomachine;solomachine"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/light-clients/06-solomachine;solomachine"; import "gogoproto/gogo.proto"; import "google/protobuf/any.proto"; @@ -25,7 +25,7 @@ message ConsensusState { option (gogoproto.goproto_getters) = false; // public key of the solo machine google.protobuf.Any public_key = 1; - // diversifier allows the same public key to be re-used across different solo + // diversifier allows the same public key to be reused across different solo // machine clients (potentially on different chains) without being considered // misbehaviour. string diversifier = 2; diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/tendermint/v1/tendermint.proto b/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/tendermint/v1/tendermint.proto index 9069fd6fa5a..89c9f88961c 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/tendermint/v1/tendermint.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/tendermint/v1/tendermint.proto @@ -2,7 +2,7 @@ syntax = "proto3"; package ibc.lightclients.tendermint.v1; -option go_package = "github.com/cosmos/ibc-go/v9/modules/light-clients/07-tendermint;tendermint"; +option go_package = "github.com/cosmos/ibc-go/v10/modules/light-clients/07-tendermint;tendermint"; import "tendermint/types/validator.proto"; import "tendermint/types/types.proto"; diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/wasm/v1/genesis.proto b/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/wasm/v1/genesis.proto index 637ba1677e3..127b5d38b8b 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/wasm/v1/genesis.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/wasm/v1/genesis.proto @@ -4,7 +4,7 @@ package ibc.lightclients.wasm.v1; import "gogoproto/gogo.proto"; -option go_package = "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types"; +option go_package = "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/v10/types"; // GenesisState defines 08-wasm's keeper genesis state message GenesisState { @@ -17,4 +17,4 @@ message Contract { option (gogoproto.goproto_getters) = false; // contract byte code bytes code_bytes = 1; -} \ No newline at end of file +} diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/wasm/v1/query.proto b/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/wasm/v1/query.proto index bbbed29dda1..730813726cd 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/wasm/v1/query.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/wasm/v1/query.proto @@ -4,7 +4,7 @@ package ibc.lightclients.wasm.v1; import "google/api/annotations.proto"; import "cosmos/base/query/v1beta1/pagination.proto"; -option go_package = "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types"; +option go_package = "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/v10/types"; // Query service for wasm module service Query { diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/wasm/v1/tx.proto b/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/wasm/v1/tx.proto index d2fc465919c..0ff5c69baeb 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/wasm/v1/tx.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/wasm/v1/tx.proto @@ -1,7 +1,7 @@ syntax = "proto3"; package ibc.lightclients.wasm.v1; -option go_package = "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types"; +option go_package = "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/v10/types"; import "cosmos/msg/v1/msg.proto"; diff --git a/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/wasm/v1/wasm.proto b/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/wasm/v1/wasm.proto index b6a45e3d8ab..370b394dc2e 100644 --- a/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/wasm/v1/wasm.proto +++ b/scripts/makefiles/swagger-proto/third_party/ibc/lightclients/wasm/v1/wasm.proto @@ -5,7 +5,7 @@ package ibc.lightclients.wasm.v1; import "gogoproto/gogo.proto"; import "ibc/core/client/v1/client.proto"; -option go_package = "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types"; +option go_package = "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/v10/types"; // Wasm light client's Client state message ClientState { @@ -31,13 +31,3 @@ message ClientMessage { bytes data = 1; } - -// Checksums defines a list of all checksums that are stored -// -// Deprecated: This message is deprecated in favor of storing the checksums -// using a Collections.KeySet. -message Checksums { - option deprecated = true; - - repeated bytes checksums = 1; -} \ No newline at end of file diff --git a/scripts/makefiles/swagger-proto/third_party/tendermint/abci/types.proto b/scripts/makefiles/swagger-proto/third_party/tendermint/abci/types.proto new file mode 100644 index 00000000000..78eeccebf46 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/tendermint/abci/types.proto @@ -0,0 +1,486 @@ +syntax = "proto3"; +package tendermint.abci; + +option go_package = "github.com/cometbft/cometbft/abci/types"; + +// For more information on gogo.proto, see: +// https://github.com/cosmos/gogoproto/blob/master/extensions.md +import "tendermint/crypto/proof.proto"; +import "tendermint/crypto/keys.proto"; +import "tendermint/types/params.proto"; +import "tendermint/types/validator.proto"; +import "google/protobuf/timestamp.proto"; +import "gogoproto/gogo.proto"; + +// NOTE: When using custom types, mind the warnings. +// https://github.com/cosmos/gogoproto/blob/master/custom_types.md#warnings-and-issues + +service ABCI { + rpc Echo(RequestEcho) returns (ResponseEcho); + rpc Flush(RequestFlush) returns (ResponseFlush); + rpc Info(RequestInfo) returns (ResponseInfo); + rpc CheckTx(RequestCheckTx) returns (ResponseCheckTx); + rpc Query(RequestQuery) returns (ResponseQuery); + rpc Commit(RequestCommit) returns (ResponseCommit); + rpc InitChain(RequestInitChain) returns (ResponseInitChain); + rpc ListSnapshots(RequestListSnapshots) returns (ResponseListSnapshots); + rpc OfferSnapshot(RequestOfferSnapshot) returns (ResponseOfferSnapshot); + rpc LoadSnapshotChunk(RequestLoadSnapshotChunk) returns (ResponseLoadSnapshotChunk); + rpc ApplySnapshotChunk(RequestApplySnapshotChunk) returns (ResponseApplySnapshotChunk); + rpc PrepareProposal(RequestPrepareProposal) returns (ResponsePrepareProposal); + rpc ProcessProposal(RequestProcessProposal) returns (ResponseProcessProposal); + rpc ExtendVote(RequestExtendVote) returns (ResponseExtendVote); + rpc VerifyVoteExtension(RequestVerifyVoteExtension) returns (ResponseVerifyVoteExtension); + rpc FinalizeBlock(RequestFinalizeBlock) returns (ResponseFinalizeBlock); +} + +//---------------------------------------- +// Request types + +message Request { + oneof value { + RequestEcho echo = 1; + RequestFlush flush = 2; + RequestInfo info = 3; + RequestInitChain init_chain = 5; + RequestQuery query = 6; + RequestCheckTx check_tx = 8; + RequestCommit commit = 11; + RequestListSnapshots list_snapshots = 12; + RequestOfferSnapshot offer_snapshot = 13; + RequestLoadSnapshotChunk load_snapshot_chunk = 14; + RequestApplySnapshotChunk apply_snapshot_chunk = 15; + RequestPrepareProposal prepare_proposal = 16; + RequestProcessProposal process_proposal = 17; + RequestExtendVote extend_vote = 18; + RequestVerifyVoteExtension verify_vote_extension = 19; + RequestFinalizeBlock finalize_block = 20; + } + reserved 4, 7, 9, 10; // SetOption, BeginBlock, DeliverTx, EndBlock +} + +message RequestEcho { + string message = 1; +} + +message RequestFlush {} + +message RequestInfo { + string version = 1; + uint64 block_version = 2; + uint64 p2p_version = 3; + string abci_version = 4; +} + +message RequestInitChain { + google.protobuf.Timestamp time = 1 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + string chain_id = 2; + tendermint.types.ConsensusParams consensus_params = 3; + repeated ValidatorUpdate validators = 4 [(gogoproto.nullable) = false]; + bytes app_state_bytes = 5; + int64 initial_height = 6; +} + +message RequestQuery { + bytes data = 1; + string path = 2; + int64 height = 3; + bool prove = 4; +} + +enum CheckTxType { + NEW = 0 [(gogoproto.enumvalue_customname) = "New"]; + RECHECK = 1 [(gogoproto.enumvalue_customname) = "Recheck"]; +} + +message RequestCheckTx { + bytes tx = 1; + CheckTxType type = 2; +} + +message RequestCommit {} + +// lists available snapshots +message RequestListSnapshots {} + +// offers a snapshot to the application +message RequestOfferSnapshot { + Snapshot snapshot = 1; // snapshot offered by peers + bytes app_hash = 2; // light client-verified app hash for snapshot height +} + +// loads a snapshot chunk +message RequestLoadSnapshotChunk { + uint64 height = 1; + uint32 format = 2; + uint32 chunk = 3; +} + +// Applies a snapshot chunk +message RequestApplySnapshotChunk { + uint32 index = 1; + bytes chunk = 2; + string sender = 3; +} + +message RequestPrepareProposal { + // the modified transactions cannot exceed this size. + int64 max_tx_bytes = 1; + // txs is an array of transactions that will be included in a block, + // sent to the app for possible modifications. + repeated bytes txs = 2; + ExtendedCommitInfo local_last_commit = 3 [(gogoproto.nullable) = false]; + repeated Misbehavior misbehavior = 4 [(gogoproto.nullable) = false]; + int64 height = 5; + google.protobuf.Timestamp time = 6 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + bytes next_validators_hash = 7; + // address of the public key of the validator proposing the block. + bytes proposer_address = 8; +} + +message RequestProcessProposal { + repeated bytes txs = 1; + CommitInfo proposed_last_commit = 2 [(gogoproto.nullable) = false]; + repeated Misbehavior misbehavior = 3 [(gogoproto.nullable) = false]; + // hash is the merkle root hash of the fields of the proposed block. + bytes hash = 4; + int64 height = 5; + google.protobuf.Timestamp time = 6 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + bytes next_validators_hash = 7; + // address of the public key of the original proposer of the block. + bytes proposer_address = 8; +} + +// Extends a vote with application-injected data +message RequestExtendVote { + // the hash of the block that this vote may be referring to + bytes hash = 1; + // the height of the extended vote + int64 height = 2; + // info of the block that this vote may be referring to + google.protobuf.Timestamp time = 3 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + repeated bytes txs = 4; + CommitInfo proposed_last_commit = 5 [(gogoproto.nullable) = false]; + repeated Misbehavior misbehavior = 6 [(gogoproto.nullable) = false]; + bytes next_validators_hash = 7; + // address of the public key of the original proposer of the block. + bytes proposer_address = 8; +} + +// Verify the vote extension +message RequestVerifyVoteExtension { + // the hash of the block that this received vote corresponds to + bytes hash = 1; + // the validator that signed the vote extension + bytes validator_address = 2; + int64 height = 3; + bytes vote_extension = 4; +} + +message RequestFinalizeBlock { + repeated bytes txs = 1; + CommitInfo decided_last_commit = 2 [(gogoproto.nullable) = false]; + repeated Misbehavior misbehavior = 3 [(gogoproto.nullable) = false]; + // hash is the merkle root hash of the fields of the decided block. + bytes hash = 4; + int64 height = 5; + google.protobuf.Timestamp time = 6 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + bytes next_validators_hash = 7; + // proposer_address is the address of the public key of the original proposer of the block. + bytes proposer_address = 8; +} + +//---------------------------------------- +// Response types + +message Response { + oneof value { + ResponseException exception = 1; + ResponseEcho echo = 2; + ResponseFlush flush = 3; + ResponseInfo info = 4; + ResponseInitChain init_chain = 6; + ResponseQuery query = 7; + ResponseCheckTx check_tx = 9; + ResponseCommit commit = 12; + ResponseListSnapshots list_snapshots = 13; + ResponseOfferSnapshot offer_snapshot = 14; + ResponseLoadSnapshotChunk load_snapshot_chunk = 15; + ResponseApplySnapshotChunk apply_snapshot_chunk = 16; + ResponsePrepareProposal prepare_proposal = 17; + ResponseProcessProposal process_proposal = 18; + ResponseExtendVote extend_vote = 19; + ResponseVerifyVoteExtension verify_vote_extension = 20; + ResponseFinalizeBlock finalize_block = 21; + } + reserved 5, 8, 10, 11; // SetOption, BeginBlock, DeliverTx, EndBlock +} + +// nondeterministic +message ResponseException { + string error = 1; +} + +message ResponseEcho { + string message = 1; +} + +message ResponseFlush {} + +message ResponseInfo { + string data = 1; + + string version = 2; + uint64 app_version = 3; + + int64 last_block_height = 4; + bytes last_block_app_hash = 5; +} + +message ResponseInitChain { + tendermint.types.ConsensusParams consensus_params = 1; + repeated ValidatorUpdate validators = 2 [(gogoproto.nullable) = false]; + bytes app_hash = 3; +} + +message ResponseQuery { + uint32 code = 1; + // bytes data = 2; // use "value" instead. + string log = 3; // nondeterministic + string info = 4; // nondeterministic + int64 index = 5; + bytes key = 6; + bytes value = 7; + tendermint.crypto.ProofOps proof_ops = 8; + int64 height = 9; + string codespace = 10; +} + +message ResponseCheckTx { + uint32 code = 1; + bytes data = 2; + string log = 3; // nondeterministic + string info = 4; // nondeterministic + int64 gas_wanted = 5 [json_name = "gas_wanted"]; + int64 gas_used = 6 [json_name = "gas_used"]; + repeated Event events = 7 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; + string codespace = 8; + + // These reserved fields were used until v0.37 by the priority mempool (now + // removed). + reserved 9 to 11; + reserved "sender", "priority", "mempool_error"; +} + +message ResponseCommit { + reserved 1, 2; // data was previously returned here + int64 retain_height = 3; +} + +message ResponseListSnapshots { + repeated Snapshot snapshots = 1; +} + +message ResponseOfferSnapshot { + Result result = 1; + + enum Result { + UNKNOWN = 0; // Unknown result, abort all snapshot restoration + ACCEPT = 1; // Snapshot accepted, apply chunks + ABORT = 2; // Abort all snapshot restoration + REJECT = 3; // Reject this specific snapshot, try others + REJECT_FORMAT = 4; // Reject all snapshots of this format, try others + REJECT_SENDER = 5; // Reject all snapshots from the sender(s), try others + } +} + +message ResponseLoadSnapshotChunk { + bytes chunk = 1; +} + +message ResponseApplySnapshotChunk { + Result result = 1; + repeated uint32 refetch_chunks = 2; // Chunks to refetch and reapply + repeated string reject_senders = 3; // Chunk senders to reject and ban + + enum Result { + UNKNOWN = 0; // Unknown result, abort all snapshot restoration + ACCEPT = 1; // Chunk successfully accepted + ABORT = 2; // Abort all snapshot restoration + RETRY = 3; // Retry chunk (combine with refetch and reject) + RETRY_SNAPSHOT = 4; // Retry snapshot (combine with refetch and reject) + REJECT_SNAPSHOT = 5; // Reject this snapshot, try others + } +} + +message ResponsePrepareProposal { + repeated bytes txs = 1; +} + +message ResponseProcessProposal { + ProposalStatus status = 1; + + enum ProposalStatus { + UNKNOWN = 0; + ACCEPT = 1; + REJECT = 2; + } +} + +message ResponseExtendVote { + bytes vote_extension = 1; +} + +message ResponseVerifyVoteExtension { + VerifyStatus status = 1; + + enum VerifyStatus { + UNKNOWN = 0; + ACCEPT = 1; + // Rejecting the vote extension will reject the entire precommit by the sender. + // Incorrectly implementing this thus has liveness implications as it may affect + // CometBFT's ability to receive 2/3+ valid votes to finalize the block. + // Honest nodes should never be rejected. + REJECT = 2; + } +} + +message ResponseFinalizeBlock { + // set of block events emmitted as part of executing the block + repeated Event events = 1 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; + // the result of executing each transaction including the events + // the particular transction emitted. This should match the order + // of the transactions delivered in the block itself + repeated ExecTxResult tx_results = 2; + // a list of updates to the validator set. These will reflect the validator set at current height + 2. + repeated ValidatorUpdate validator_updates = 3 [(gogoproto.nullable) = false]; + // updates to the consensus params, if any. + tendermint.types.ConsensusParams consensus_param_updates = 4; + // app_hash is the hash of the applications' state which is used to confirm that execution of the transactions was + // deterministic. It is up to the application to decide which algorithm to use. + bytes app_hash = 5; +} + +//---------------------------------------- +// Misc. + +message CommitInfo { + int32 round = 1; + repeated VoteInfo votes = 2 [(gogoproto.nullable) = false]; +} + +// ExtendedCommitInfo is similar to CommitInfo except that it is only used in +// the PrepareProposal request such that CometBFT can provide vote extensions +// to the application. +message ExtendedCommitInfo { + // The round at which the block proposer decided in the previous height. + int32 round = 1; + // List of validators' addresses in the last validator set with their voting + // information, including vote extensions. + repeated ExtendedVoteInfo votes = 2 [(gogoproto.nullable) = false]; +} + +// Event allows application developers to attach additional information to +// ResponseFinalizeBlock and ResponseCheckTx. +// Later, transactions may be queried using these events. +message Event { + string type = 1; + repeated EventAttribute attributes = 2 [(gogoproto.nullable) = false, (gogoproto.jsontag) = "attributes,omitempty"]; +} + +// EventAttribute is a single key-value pair, associated with an event. +message EventAttribute { + string key = 1; + string value = 2; + bool index = 3; // nondeterministic +} + +// ExecTxResult contains results of executing one individual transaction. +// +// * Its structure is equivalent to #ResponseDeliverTx which will be deprecated/deleted +message ExecTxResult { + uint32 code = 1; + bytes data = 2; + string log = 3; // nondeterministic + string info = 4; // nondeterministic + int64 gas_wanted = 5 [json_name = "gas_wanted"]; + int64 gas_used = 6 [json_name = "gas_used"]; + repeated Event events = 7 + [(gogoproto.nullable) = false, (gogoproto.jsontag) = "events,omitempty"]; // nondeterministic + string codespace = 8; +} + +// TxResult contains results of executing the transaction. +// +// One usage is indexing transaction results. +message TxResult { + int64 height = 1; + uint32 index = 2; + bytes tx = 3; + ExecTxResult result = 4 [(gogoproto.nullable) = false]; +} + +//---------------------------------------- +// Blockchain Types + +message Validator { + bytes address = 1; // The first 20 bytes of SHA256(public key) + // PubKey pub_key = 2 [(gogoproto.nullable)=false]; + int64 power = 3; // The voting power +} + +message ValidatorUpdate { + tendermint.crypto.PublicKey pub_key = 1 [(gogoproto.nullable) = false]; + int64 power = 2; +} + +message VoteInfo { + Validator validator = 1 [(gogoproto.nullable) = false]; + tendermint.types.BlockIDFlag block_id_flag = 3; + + reserved 2; // signed_last_block +} + +message ExtendedVoteInfo { + // The validator that sent the vote. + Validator validator = 1 [(gogoproto.nullable) = false]; + // Non-deterministic extension provided by the sending validator's application. + bytes vote_extension = 3; + // Vote extension signature created by CometBFT + bytes extension_signature = 4; + // block_id_flag indicates whether the validator voted for a block, nil, or did not vote at all + tendermint.types.BlockIDFlag block_id_flag = 5; + + reserved 2; // signed_last_block +} + +enum MisbehaviorType { + UNKNOWN = 0; + DUPLICATE_VOTE = 1; + LIGHT_CLIENT_ATTACK = 2; +} + +message Misbehavior { + MisbehaviorType type = 1; + // The offending validator + Validator validator = 2 [(gogoproto.nullable) = false]; + // The height when the offense occurred + int64 height = 3; + // The corresponding time where the offense occurred + google.protobuf.Timestamp time = 4 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + // Total voting power of the validator set in case the ABCI application does + // not store historical validators. + // https://github.com/tendermint/tendermint/issues/4581 + int64 total_voting_power = 5; +} + +//---------------------------------------- +// State Sync Types + +message Snapshot { + uint64 height = 1; // The height at which the snapshot was taken + uint32 format = 2; // The application-specific snapshot format + uint32 chunks = 3; // Number of chunks in the snapshot + bytes hash = 4; // Arbitrary snapshot hash, equal only if identical + bytes metadata = 5; // Arbitrary application metadata +} diff --git a/scripts/makefiles/swagger-proto/third_party/tendermint/crypto/keys.proto b/scripts/makefiles/swagger-proto/third_party/tendermint/crypto/keys.proto new file mode 100644 index 00000000000..8fa192fa4bc --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/tendermint/crypto/keys.proto @@ -0,0 +1,17 @@ +syntax = "proto3"; +package tendermint.crypto; + +option go_package = "github.com/cometbft/cometbft/proto/tendermint/crypto"; + +import "gogoproto/gogo.proto"; + +// PublicKey defines the keys available for use with Validators +message PublicKey { + option (gogoproto.compare) = true; + option (gogoproto.equal) = true; + + oneof sum { + bytes ed25519 = 1; + bytes secp256k1 = 2; + } +} diff --git a/scripts/makefiles/swagger-proto/third_party/tendermint/crypto/proof.proto b/scripts/makefiles/swagger-proto/third_party/tendermint/crypto/proof.proto new file mode 100644 index 00000000000..ae72195e868 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/tendermint/crypto/proof.proto @@ -0,0 +1,41 @@ +syntax = "proto3"; +package tendermint.crypto; + +option go_package = "github.com/cometbft/cometbft/proto/tendermint/crypto"; + +import "gogoproto/gogo.proto"; + +message Proof { + int64 total = 1; + int64 index = 2; + bytes leaf_hash = 3; + repeated bytes aunts = 4; +} + +message ValueOp { + // Encoded in ProofOp.Key. + bytes key = 1; + + // To encode in ProofOp.Data + Proof proof = 2; +} + +message DominoOp { + string key = 1; + string input = 2; + string output = 3; +} + +// ProofOp defines an operation used for calculating Merkle root +// The data could be arbitrary format, providing nessecary data +// for example neighbouring node hash +message ProofOp { + string type = 1; + bytes key = 2; + bytes data = 3; +} + +// ProofOps is Merkle proof defined by the list of ProofOps +message ProofOps { + repeated ProofOp ops = 1 [(gogoproto.nullable) = false]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/tendermint/libs/bits/types.proto b/scripts/makefiles/swagger-proto/third_party/tendermint/libs/bits/types.proto new file mode 100644 index 00000000000..e6afc5e8ec2 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/tendermint/libs/bits/types.proto @@ -0,0 +1,9 @@ +syntax = "proto3"; +package tendermint.libs.bits; + +option go_package = "github.com/cometbft/cometbft/proto/tendermint/libs/bits"; + +message BitArray { + int64 bits = 1; + repeated uint64 elems = 2; +} diff --git a/scripts/makefiles/swagger-proto/third_party/tendermint/p2p/types.proto b/scripts/makefiles/swagger-proto/third_party/tendermint/p2p/types.proto new file mode 100644 index 00000000000..157d8ba1ca1 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/tendermint/p2p/types.proto @@ -0,0 +1,34 @@ +syntax = "proto3"; +package tendermint.p2p; + +option go_package = "github.com/cometbft/cometbft/proto/tendermint/p2p"; + +import "gogoproto/gogo.proto"; + +message NetAddress { + string id = 1 [(gogoproto.customname) = "ID"]; + string ip = 2 [(gogoproto.customname) = "IP"]; + uint32 port = 3; +} + +message ProtocolVersion { + uint64 p2p = 1 [(gogoproto.customname) = "P2P"]; + uint64 block = 2; + uint64 app = 3; +} + +message DefaultNodeInfo { + ProtocolVersion protocol_version = 1 [(gogoproto.nullable) = false]; + string default_node_id = 2 [(gogoproto.customname) = "DefaultNodeID"]; + string listen_addr = 3; + string network = 4; + string version = 5; + bytes channels = 6; + string moniker = 7; + DefaultNodeInfoOther other = 8 [(gogoproto.nullable) = false]; +} + +message DefaultNodeInfoOther { + string tx_index = 1; + string rpc_address = 2 [(gogoproto.customname) = "RPCAddress"]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/tendermint/types/block.proto b/scripts/makefiles/swagger-proto/third_party/tendermint/types/block.proto new file mode 100644 index 00000000000..d531c06a005 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/tendermint/types/block.proto @@ -0,0 +1,15 @@ +syntax = "proto3"; +package tendermint.types; + +option go_package = "github.com/cometbft/cometbft/proto/tendermint/types"; + +import "gogoproto/gogo.proto"; +import "tendermint/types/types.proto"; +import "tendermint/types/evidence.proto"; + +message Block { + Header header = 1 [(gogoproto.nullable) = false]; + Data data = 2 [(gogoproto.nullable) = false]; + tendermint.types.EvidenceList evidence = 3 [(gogoproto.nullable) = false]; + Commit last_commit = 4; +} diff --git a/scripts/makefiles/swagger-proto/third_party/tendermint/types/evidence.proto b/scripts/makefiles/swagger-proto/third_party/tendermint/types/evidence.proto new file mode 100644 index 00000000000..06f30ec2f5f --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/tendermint/types/evidence.proto @@ -0,0 +1,38 @@ +syntax = "proto3"; +package tendermint.types; + +option go_package = "github.com/cometbft/cometbft/proto/tendermint/types"; + +import "gogoproto/gogo.proto"; +import "google/protobuf/timestamp.proto"; +import "tendermint/types/types.proto"; +import "tendermint/types/validator.proto"; + +message Evidence { + oneof sum { + DuplicateVoteEvidence duplicate_vote_evidence = 1; + LightClientAttackEvidence light_client_attack_evidence = 2; + } +} + +// DuplicateVoteEvidence contains evidence of a validator signed two conflicting votes. +message DuplicateVoteEvidence { + tendermint.types.Vote vote_a = 1; + tendermint.types.Vote vote_b = 2; + int64 total_voting_power = 3; + int64 validator_power = 4; + google.protobuf.Timestamp timestamp = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; +} + +// LightClientAttackEvidence contains evidence of a set of validators attempting to mislead a light client. +message LightClientAttackEvidence { + tendermint.types.LightBlock conflicting_block = 1; + int64 common_height = 2; + repeated tendermint.types.Validator byzantine_validators = 3; + int64 total_voting_power = 4; + google.protobuf.Timestamp timestamp = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; +} + +message EvidenceList { + repeated Evidence evidence = 1 [(gogoproto.nullable) = false]; +} diff --git a/scripts/makefiles/swagger-proto/third_party/tendermint/types/params.proto b/scripts/makefiles/swagger-proto/third_party/tendermint/types/params.proto new file mode 100644 index 00000000000..6a42d5ef0da --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/tendermint/types/params.proto @@ -0,0 +1,91 @@ +syntax = "proto3"; +package tendermint.types; + +option go_package = "github.com/cometbft/cometbft/proto/tendermint/types"; + +import "gogoproto/gogo.proto"; +import "google/protobuf/duration.proto"; + +option (gogoproto.equal_all) = true; + +// ConsensusParams contains consensus critical parameters that determine the +// validity of blocks. +message ConsensusParams { + BlockParams block = 1; + EvidenceParams evidence = 2; + ValidatorParams validator = 3; + VersionParams version = 4; + ABCIParams abci = 5; +} + +// BlockParams contains limits on the block size. +message BlockParams { + // Max block size, in bytes. + // Note: must be greater than 0 + int64 max_bytes = 1; + // Max gas per block. + // Note: must be greater or equal to -1 + int64 max_gas = 2; + + reserved 3; // was TimeIotaMs see https://github.com/tendermint/tendermint/pull/5792 +} + +// EvidenceParams determine how we handle evidence of malfeasance. +message EvidenceParams { + // Max age of evidence, in blocks. + // + // The basic formula for calculating this is: MaxAgeDuration / {average block + // time}. + int64 max_age_num_blocks = 1; + + // Max age of evidence, in time. + // + // It should correspond with an app's "unbonding period" or other similar + // mechanism for handling [Nothing-At-Stake + // attacks](https://github.com/ethereum/wiki/wiki/Proof-of-Stake-FAQ#what-is-the-nothing-at-stake-problem-and-how-can-it-be-fixed). + google.protobuf.Duration max_age_duration = 2 [(gogoproto.nullable) = false, (gogoproto.stdduration) = true]; + + // This sets the maximum size of total evidence in bytes that can be committed in a single block. + // and should fall comfortably under the max block bytes. + // Default is 1048576 or 1MB + int64 max_bytes = 3; +} + +// ValidatorParams restrict the public key types validators can use. +// NOTE: uses ABCI pubkey naming, not Amino names. +message ValidatorParams { + option (gogoproto.populate) = true; + option (gogoproto.equal) = true; + + repeated string pub_key_types = 1; +} + +// VersionParams contains the ABCI application version. +message VersionParams { + option (gogoproto.populate) = true; + option (gogoproto.equal) = true; + + uint64 app = 1; +} + +// HashedParams is a subset of ConsensusParams. +// +// It is hashed into the Header.ConsensusHash. +message HashedParams { + int64 block_max_bytes = 1; + int64 block_max_gas = 2; +} + +// ABCIParams configure functionality specific to the Application Blockchain Interface. +message ABCIParams { + // vote_extensions_enable_height configures the first height during which + // vote extensions will be enabled. During this specified height, and for all + // subsequent heights, precommit messages that do not contain valid extension data + // will be considered invalid. Prior to this height, vote extensions will not + // be used or accepted by validators on the network. + // + // Once enabled, vote extensions will be created by the application in ExtendVote, + // passed to the application for validation in VerifyVoteExtension and given + // to the application to use when proposing a block during PrepareProposal. + int64 vote_extensions_enable_height = 1; +} diff --git a/scripts/makefiles/swagger-proto/third_party/tendermint/types/types.proto b/scripts/makefiles/swagger-proto/third_party/tendermint/types/types.proto new file mode 100644 index 00000000000..a0d545ad9ee --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/tendermint/types/types.proto @@ -0,0 +1,172 @@ +syntax = "proto3"; +package tendermint.types; + +option go_package = "github.com/cometbft/cometbft/proto/tendermint/types"; + +import "gogoproto/gogo.proto"; +import "google/protobuf/timestamp.proto"; +import "tendermint/crypto/proof.proto"; +import "tendermint/version/types.proto"; +import "tendermint/types/validator.proto"; + +// SignedMsgType is a type of signed message in the consensus. +enum SignedMsgType { + option (gogoproto.goproto_enum_stringer) = true; + option (gogoproto.goproto_enum_prefix) = false; + + SIGNED_MSG_TYPE_UNKNOWN = 0 [(gogoproto.enumvalue_customname) = "UnknownType"]; + // Votes + SIGNED_MSG_TYPE_PREVOTE = 1 [(gogoproto.enumvalue_customname) = "PrevoteType"]; + SIGNED_MSG_TYPE_PRECOMMIT = 2 [(gogoproto.enumvalue_customname) = "PrecommitType"]; + + // Proposals + SIGNED_MSG_TYPE_PROPOSAL = 32 [(gogoproto.enumvalue_customname) = "ProposalType"]; +} + +// PartsetHeader +message PartSetHeader { + uint32 total = 1; + bytes hash = 2; +} + +message Part { + uint32 index = 1; + bytes bytes = 2; + tendermint.crypto.Proof proof = 3 [(gogoproto.nullable) = false]; +} + +// BlockID +message BlockID { + bytes hash = 1; + PartSetHeader part_set_header = 2 [(gogoproto.nullable) = false]; +} + +// -------------------------------- + +// Header defines the structure of a block header. +message Header { + // basic block info + tendermint.version.Consensus version = 1 [(gogoproto.nullable) = false]; + string chain_id = 2 [(gogoproto.customname) = "ChainID"]; + int64 height = 3; + google.protobuf.Timestamp time = 4 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + + // prev block info + BlockID last_block_id = 5 [(gogoproto.nullable) = false]; + + // hashes of block data + bytes last_commit_hash = 6; // commit from validators from the last block + bytes data_hash = 7; // transactions + + // hashes from the app output from the prev block + bytes validators_hash = 8; // validators for the current block + bytes next_validators_hash = 9; // validators for the next block + bytes consensus_hash = 10; // consensus params for current block + bytes app_hash = 11; // state after txs from the previous block + bytes last_results_hash = 12; // root hash of all results from the txs from the previous block + + // consensus info + bytes evidence_hash = 13; // evidence included in the block + bytes proposer_address = 14; // original proposer of the block +} + +// Data contains the set of transactions included in the block +message Data { + // Txs that will be applied by state @ block.Height+1. + // NOTE: not all txs here are valid. We're just agreeing on the order first. + // This means that block.AppHash does not include these txs. + repeated bytes txs = 1; +} + +// Vote represents a prevote or precommit vote from validators for +// consensus. +message Vote { + SignedMsgType type = 1; + int64 height = 2; + int32 round = 3; + BlockID block_id = 4 [(gogoproto.nullable) = false, (gogoproto.customname) = "BlockID"]; // zero if vote is nil. + google.protobuf.Timestamp timestamp = 5 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + bytes validator_address = 6; + int32 validator_index = 7; + // Vote signature by the validator if they participated in consensus for the + // associated block. + bytes signature = 8; + // Vote extension provided by the application. Only valid for precommit + // messages. + bytes extension = 9; + // Vote extension signature by the validator if they participated in + // consensus for the associated block. + // Only valid for precommit messages. + bytes extension_signature = 10; +} + +// Commit contains the evidence that a block was committed by a set of validators. +message Commit { + int64 height = 1; + int32 round = 2; + BlockID block_id = 3 [(gogoproto.nullable) = false, (gogoproto.customname) = "BlockID"]; + repeated CommitSig signatures = 4 [(gogoproto.nullable) = false]; +} + +// CommitSig is a part of the Vote included in a Commit. +message CommitSig { + tendermint.types.BlockIDFlag block_id_flag = 1; + bytes validator_address = 2; + google.protobuf.Timestamp timestamp = 3 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + bytes signature = 4; +} + +message ExtendedCommit { + int64 height = 1; + int32 round = 2; + BlockID block_id = 3 [(gogoproto.nullable) = false, (gogoproto.customname) = "BlockID"]; + repeated ExtendedCommitSig extended_signatures = 4 [(gogoproto.nullable) = false]; +} + +// ExtendedCommitSig retains all the same fields as CommitSig but adds vote +// extension-related fields. We use two signatures to ensure backwards compatibility. +// That is the digest of the original signature is still the same in prior versions +message ExtendedCommitSig { + tendermint.types.BlockIDFlag block_id_flag = 1; + bytes validator_address = 2; + google.protobuf.Timestamp timestamp = 3 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + bytes signature = 4; + // Vote extension data + bytes extension = 5; + // Vote extension signature + bytes extension_signature = 6; +} + +message Proposal { + SignedMsgType type = 1; + int64 height = 2; + int32 round = 3; + int32 pol_round = 4; + BlockID block_id = 5 [(gogoproto.customname) = "BlockID", (gogoproto.nullable) = false]; + google.protobuf.Timestamp timestamp = 6 [(gogoproto.nullable) = false, (gogoproto.stdtime) = true]; + bytes signature = 7; +} + +message SignedHeader { + Header header = 1; + Commit commit = 2; +} + +message LightBlock { + SignedHeader signed_header = 1; + tendermint.types.ValidatorSet validator_set = 2; +} + +message BlockMeta { + BlockID block_id = 1 [(gogoproto.customname) = "BlockID", (gogoproto.nullable) = false]; + int64 block_size = 2; + Header header = 3 [(gogoproto.nullable) = false]; + int64 num_txs = 4; +} + +// TxProof represents a Merkle proof of the presence of a transaction in the Merkle tree. +message TxProof { + bytes root_hash = 1; + bytes data = 2; + tendermint.crypto.Proof proof = 3; +} diff --git a/scripts/makefiles/swagger-proto/third_party/tendermint/types/validator.proto b/scripts/makefiles/swagger-proto/third_party/tendermint/types/validator.proto new file mode 100644 index 00000000000..cd5105fac76 --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/tendermint/types/validator.proto @@ -0,0 +1,37 @@ +syntax = "proto3"; +package tendermint.types; + +option go_package = "github.com/cometbft/cometbft/proto/tendermint/types"; + +import "gogoproto/gogo.proto"; +import "tendermint/crypto/keys.proto"; + +// BlockIdFlag indicates which BlockID the signature is for +enum BlockIDFlag { + option (gogoproto.goproto_enum_stringer) = true; + option (gogoproto.goproto_enum_prefix) = false; + + BLOCK_ID_FLAG_UNKNOWN = 0 [(gogoproto.enumvalue_customname) = "BlockIDFlagUnknown"]; // indicates an error condition + BLOCK_ID_FLAG_ABSENT = 1 [(gogoproto.enumvalue_customname) = "BlockIDFlagAbsent"]; // the vote was not received + BLOCK_ID_FLAG_COMMIT = 2 + [(gogoproto.enumvalue_customname) = "BlockIDFlagCommit"]; // voted for the block that received the majority + BLOCK_ID_FLAG_NIL = 3 [(gogoproto.enumvalue_customname) = "BlockIDFlagNil"]; // voted for nil +} + +message ValidatorSet { + repeated Validator validators = 1; + Validator proposer = 2; + int64 total_voting_power = 3; +} + +message Validator { + bytes address = 1; + tendermint.crypto.PublicKey pub_key = 2 [(gogoproto.nullable) = false]; + int64 voting_power = 3; + int64 proposer_priority = 4; +} + +message SimpleValidator { + tendermint.crypto.PublicKey pub_key = 1; + int64 voting_power = 2; +} diff --git a/scripts/makefiles/swagger-proto/third_party/tendermint/version/types.proto b/scripts/makefiles/swagger-proto/third_party/tendermint/version/types.proto new file mode 100644 index 00000000000..3b6ef45479e --- /dev/null +++ b/scripts/makefiles/swagger-proto/third_party/tendermint/version/types.proto @@ -0,0 +1,24 @@ +syntax = "proto3"; +package tendermint.version; + +option go_package = "github.com/cometbft/cometbft/proto/tendermint/version"; + +import "gogoproto/gogo.proto"; + +// App includes the protocol and software version for the application. +// This information is included in ResponseInfo. The App.Protocol can be +// updated in ResponseEndBlock. +message App { + uint64 protocol = 1; + string software = 2; +} + +// Consensus captures the consensus rules for processing a block in the blockchain, +// including all blockchain data structures and the rules of the application's +// state transition machine. +message Consensus { + option (gogoproto.equal) = true; + + uint64 block = 1; + uint64 app = 2; +} From 68df6d923bf9e07a14d5589534ae190b4182e4a9 Mon Sep 17 00:00:00 2001 From: P-Yevhenii Date: Tue, 21 Oct 2025 15:51:44 +0300 Subject: [PATCH 5/9] Failed consumer: check if it can replace with default staking --- app/keepers/keepers.go | 40 ++++++++++++++++++++++++++++++++++++--- app/modules.go | 2 -- cmd/symphonyd/cmd/root.go | 21 +++++++++++++++++++- go.mod | 2 +- 4 files changed, 58 insertions(+), 7 deletions(-) diff --git a/app/keepers/keepers.go b/app/keepers/keepers.go index bb897844443..6c22f62c36d 100644 --- a/app/keepers/keepers.go +++ b/app/keepers/keepers.go @@ -57,6 +57,7 @@ import ( porttypes "github.com/cosmos/ibc-go/v8/modules/core/05-port/types" ibchost "github.com/cosmos/ibc-go/v8/modules/core/exported" ibckeeper "github.com/cosmos/ibc-go/v8/modules/core/keeper" + ccvconsumer "github.com/cosmos/interchain-security/v6/x/ccv/consumer" ccvconsumertypes "github.com/cosmos/interchain-security/v6/x/ccv/consumer/types" appparams "github.com/osmosis-labs/osmosis/v27/app/params" custombankkeeper "github.com/osmosis-labs/osmosis/v27/custom/bank/keeper" @@ -169,6 +170,7 @@ type AppKeepers struct { ScopedTransferKeeper capabilitykeeper.ScopedKeeper ScopedWasmKeeper capabilitykeeper.ScopedKeeper ScopedICQKeeper capabilitykeeper.ScopedKeeper + ScopedCCVConsumerKeeper capabilitykeeper.ScopedKeeper // "Normal" keepers AccountKeeper *authkeeper.AccountKeeper @@ -222,6 +224,7 @@ type AppKeepers struct { ConsumerKeeper *ccvconsumerkeeper.Keeper ICQOracleKeeper *icqoraclekeeper.Keeper AutopilotKeeper *autopilotkeeper.Keeper + // IBC modules // transfer module RawIcs20TransferAppModule transfer.AppModule @@ -334,7 +337,8 @@ func (appKeepers *AppKeepers) InitNormalKeepers( appCodec, legacyAmino, runtime.NewKVStoreService(appKeepers.keys[slashingtypes.StoreKey]), - appKeepers.StakingKeeper, + appKeepers.StakingKeeper, //TODO: what happens if we replace it with consumer? + //appKeepers.ConsumerKeeper, authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) appKeepers.SlashingKeeper = &slashingKeeper @@ -352,7 +356,7 @@ func (appKeepers *AppKeepers) InitNormalKeepers( appCodec, appKeepers.keys[ibchost.StoreKey], appKeepers.GetSubspace(ibchost.ModuleName), - //appKeepers.StakingKeeper, TODO: do we need to replace with consumer? + //appKeepers.StakingKeeper, //TODO: do we need to replace with consumer? appKeepers.ConsumerKeeper, appKeepers.UpgradeKeeper, appKeepers.ScopedIBCKeeper, @@ -439,6 +443,33 @@ func (appKeepers *AppKeepers) InitNormalKeepers( ) appKeepers.ICQKeeper = &icqKeeper + // Create CCV consumer and modules + consumerKeeper = ccvconsumerkeeper.NewKeeper( + appCodec, + appKeepers.keys[ccvconsumertypes.StoreKey], + appKeepers.GetSubspace(ccvconsumertypes.ModuleName), + appKeepers.ScopedCCVConsumerKeeper, + appKeepers.IBCKeeper.ChannelKeeper, + appKeepers.IBCKeeper.PortKeeper, + appKeepers.IBCKeeper.ConnectionKeeper, + appKeepers.IBCKeeper.ClientKeeper, + appKeepers.SlashingKeeper, + appKeepers.BankKeeper, + appKeepers.AccountKeeper, + appKeepers.TransferKeeper, + appKeepers.IBCKeeper, + authtypes.FeeCollectorName, + authtypes.NewModuleAddress(govtypes.ModuleName).String(), + addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32ValidatorAddrPrefix()), + addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32ConsensusAddrPrefix()), + ) + appKeepers.ConsumerKeeper = &consumerKeeper + appKeepers.ConsumerKeeper.SetStandaloneStakingKeeper(appKeepers.StakingKeeper) + + // register slashing module StakingHooks to the consumer keeper + appKeepers.ConsumerKeeper = appKeepers.ConsumerKeeper.SetHooks(appKeepers.SlashingKeeper.Hooks()) + consumerModule := ccvconsumer.NewAppModule(*appKeepers.ConsumerKeeper, appKeepers.GetSubspace(ccvconsumertypes.ModuleName)) + // Create Async ICQ module icqModule := icq.NewIBCModule(*appKeepers.ICQKeeper) @@ -449,7 +480,8 @@ func (appKeepers *AppKeepers) InitNormalKeepers( // The transferIBC module is replaced by rateLimitingTransferModule AddRoute(ibctransfertypes.ModuleName, appKeepers.TransferStack). // Add icq modules to IBC router - AddRoute(icqtypes.ModuleName, icqModule) + AddRoute(icqtypes.ModuleName, icqModule). + AddRoute(ccvconsumertypes.ModuleName, consumerModule) // Note: the sealing is done after creating wasmd and wiring that up // create evidence keeper with router @@ -983,6 +1015,8 @@ func (appKeepers *AppKeepers) InitSpecialKeepers( appKeepers.ScopedTransferKeeper = appKeepers.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName) appKeepers.ScopedWasmKeeper = appKeepers.CapabilityKeeper.ScopeToModule(wasmtypes.ModuleName) appKeepers.ScopedICQKeeper = appKeepers.CapabilityKeeper.ScopeToModule(icqtypes.ModuleName) + appKeepers.ScopedCCVConsumerKeeper = appKeepers.CapabilityKeeper.ScopeToModule(ccvconsumertypes.ModuleName) + appKeepers.CapabilityKeeper.Seal() // TODO: Make a SetInvCheckPeriod fn on CrisisKeeper. diff --git a/app/modules.go b/app/modules.go index c7904780e0c..63a80e22a88 100644 --- a/app/modules.go +++ b/app/modules.go @@ -13,7 +13,6 @@ import ( ratelimit "github.com/cosmos/ibc-apps/modules/rate-limiting/v8" ratelimittypes "github.com/cosmos/ibc-apps/modules/rate-limiting/v8/types" capabilitykeeper "github.com/cosmos/ibc-go/modules/capability/keeper" - ccvconsumer "github.com/cosmos/interchain-security/v6/x/ccv/consumer" ccvconsumertypes "github.com/cosmos/interchain-security/v6/x/ccv/consumer/types" "github.com/osmosis-labs/osmosis/v27/x/autopilot" autopilottypes "github.com/osmosis-labs/osmosis/v27/x/autopilot/types" @@ -251,7 +250,6 @@ func appModules( smartaccount.NewAppModule(appCodec, *app.SmartAccountKeeper), ratelimit.NewAppModule(appCodec, *app.RatelimitKeeper), icacallbacks.NewAppModule(appCodec, *app.IcacallbacksKeeper, app.AccountKeeper, app.BankKeeper), - ccvconsumer.NewAppModule(*app.ConsumerKeeper, app.GetSubspace(ccvconsumertypes.ModuleName)), icqoracle.NewAppModule(appCodec, *app.ICQOracleKeeper), interchainquery.NewAppModule(appCodec, *app.InterchainqueryKeeper), records.NewAppModule(appCodec, *app.RecordsKeeper, app.AccountKeeper, app.BankKeeper), diff --git a/cmd/symphonyd/cmd/root.go b/cmd/symphonyd/cmd/root.go index e253b2eb0b1..7a0ef648857 100644 --- a/cmd/symphonyd/cmd/root.go +++ b/cmd/symphonyd/cmd/root.go @@ -2,9 +2,11 @@ package cmd import ( "bufio" + autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" "embed" "encoding/json" "fmt" + interchainquerytypes "github.com/osmosis-labs/osmosis/v27/x/interchainquery/types" "io" "net/http" "os" @@ -1230,7 +1232,7 @@ func autoCliOpts(initClientCtx client.Context, tempApp *symphony.SymphonyApp) au } } - return autocli.AppOptions{ + appOptions := autocli.AppOptions{ Modules: modules, ModuleOptions: runtimeservices.ExtractAutoCLIOptions(tempApp.ModuleManager().Modules), AddressCodec: authcodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()), @@ -1238,4 +1240,21 @@ func autoCliOpts(initClientCtx client.Context, tempApp *symphony.SymphonyApp) au ConsensusAddressCodec: authcodec.NewBech32Codec(sdk.GetConfig().GetBech32ConsensusAddrPrefix()), ClientCtx: initClientCtx, } + + // Disable the autocli command for ICQ SubmitQueryResponse which has a conflict + // with the chain-id flag and also doesn't need a CLI function + moduleOptions, exists := appOptions.ModuleOptions[interchainquerytypes.ModuleName] + if !exists { + moduleOptions = &autocliv1.ModuleOptions{} + appOptions.ModuleOptions[interchainquerytypes.ModuleName] = moduleOptions + } + if moduleOptions.Tx == nil { + moduleOptions.Tx = &autocliv1.ServiceCommandDescriptor{} + } + moduleOptions.Tx.RpcCommandOptions = append(moduleOptions.Tx.RpcCommandOptions, &autocliv1.RpcCommandOptions{ + RpcMethod: "SubmitQueryResponse", + Skip: true, + }) + + return appOptions } diff --git a/go.mod b/go.mod index 6c891f1114f..b6b11aa69fd 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module github.com/osmosis-labs/osmosis/v27 go 1.23.0 -toolchain go1.24.1 +toolchain go1.23.13 require ( cosmossdk.io/api v0.7.6 From 83663b53f160909c40b0bc7eebc4fda6177b7374 Mon Sep 17 00:00:00 2001 From: P-Yevhenii Date: Thu, 23 Oct 2025 21:46:23 +0300 Subject: [PATCH 6/9] Redefined base module for restaking --- app/keepers/modules.go | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/app/keepers/modules.go b/app/keepers/modules.go index cc7fd3c2a16..1e3a2f0e16c 100644 --- a/app/keepers/modules.go +++ b/app/keepers/modules.go @@ -21,12 +21,12 @@ import ( paramsclient "github.com/cosmos/cosmos-sdk/x/params/client" "github.com/cosmos/cosmos-sdk/x/slashing" "github.com/cosmos/cosmos-sdk/x/staking" - packetforward "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8/packetforward" + "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v8/packetforward" icq "github.com/cosmos/ibc-apps/modules/async-icq/v8" "github.com/cosmos/ibc-go/modules/capability" ibcwasm "github.com/cosmos/ibc-go/modules/light-clients/08-wasm" ica "github.com/cosmos/ibc-go/v8/modules/apps/27-interchain-accounts" - transfer "github.com/cosmos/ibc-go/v8/modules/apps/transfer" + "github.com/cosmos/ibc-go/v8/modules/apps/transfer" ibc "github.com/cosmos/ibc-go/v8/modules/core" tendermint "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" stablestakingincentives "github.com/osmosis-labs/osmosis/v27/x/stable-staking-incentives" @@ -41,6 +41,8 @@ import ( "github.com/skip-mev/block-sdk/v2/x/auction" _ "github.com/osmosis-labs/osmosis/v27/client/docs/statik" + "github.com/osmosis-labs/osmosis/v27/x/autopilot" + "github.com/osmosis-labs/osmosis/v27/x/claim" clclient "github.com/osmosis-labs/osmosis/v27/x/concentrated-liquidity/client" concentratedliquidity "github.com/osmosis-labs/osmosis/v27/x/concentrated-liquidity/clmodule" cwpoolclient "github.com/osmosis-labs/osmosis/v27/x/cosmwasmpool/client" @@ -50,8 +52,12 @@ import ( "github.com/osmosis-labs/osmosis/v27/x/gamm" gammclient "github.com/osmosis-labs/osmosis/v27/x/gamm/client" "github.com/osmosis-labs/osmosis/v27/x/ibc-rate-limit/ibcratelimitmodule" + "github.com/osmosis-labs/osmosis/v27/x/icacallbacks" + "github.com/osmosis-labs/osmosis/v27/x/icaoracle" + "github.com/osmosis-labs/osmosis/v27/x/icqoracle" "github.com/osmosis-labs/osmosis/v27/x/incentives" incentivesclient "github.com/osmosis-labs/osmosis/v27/x/incentives/client" + "github.com/osmosis-labs/osmosis/v27/x/interchainquery" "github.com/osmosis-labs/osmosis/v27/x/lockup" "github.com/osmosis-labs/osmosis/v27/x/market" "github.com/osmosis-labs/osmosis/v27/x/mint" @@ -61,7 +67,9 @@ import ( poolmanagerclient "github.com/osmosis-labs/osmosis/v27/x/poolmanager/client" poolmanager "github.com/osmosis-labs/osmosis/v27/x/poolmanager/module" "github.com/osmosis-labs/osmosis/v27/x/protorev" - superfluid "github.com/osmosis-labs/osmosis/v27/x/superfluid" + "github.com/osmosis-labs/osmosis/v27/x/records" + "github.com/osmosis-labs/osmosis/v27/x/stakeibc" + "github.com/osmosis-labs/osmosis/v27/x/superfluid" superfluidclient "github.com/osmosis-labs/osmosis/v27/x/superfluid/client" "github.com/osmosis-labs/osmosis/v27/x/tokenfactory" "github.com/osmosis-labs/osmosis/v27/x/treasury" @@ -140,4 +148,12 @@ var AppModuleBasics = module.NewBasicManager( auction.AppModuleBasic{}, smartaccount.AppModuleBasic{}, stablestaking.AppModuleBasic{}, + stakeibc.AppModuleBasic{}, + icacallbacks.AppModuleBasic{}, + records.AppModuleBasic{}, + icaoracle.AppModuleBasic{}, + claim.AppModuleBasic{}, + interchainquery.AppModuleBasic{}, + icqoracle.AppModuleBasic{}, + autopilot.AppModuleBasic{}, ) From 1aa145641b0de9bce2aff7dcb7c898ad6a91dcce Mon Sep 17 00:00:00 2001 From: P-Yevhenii Date: Fri, 7 Nov 2025 10:47:02 +0200 Subject: [PATCH 7/9] Update params for stakeibc --- proto/symphony/stakeibc/params.proto | 2 +- scripts/multinode-local-testnet.sh | 8 +- x/stakeibc/keeper/reward_converter.go | 2 +- .../types/message_create_trade_route.go | 4 +- x/stakeibc/types/params.go | 14 +-- x/stakeibc/types/params.pb.go | 96 +++++++++---------- 6 files changed, 63 insertions(+), 63 deletions(-) diff --git a/proto/symphony/stakeibc/params.proto b/proto/symphony/stakeibc/params.proto index 4644c3303a2..fe340e94178 100755 --- a/proto/symphony/stakeibc/params.proto +++ b/proto/symphony/stakeibc/params.proto @@ -15,7 +15,7 @@ message Params { uint64 delegate_interval = 6; uint64 deposit_interval = 2; uint64 redemption_rate_interval = 3; - uint64 stride_commission = 4; + uint64 symphony_commission = 4; uint64 reinvest_interval = 7; uint64 ica_timeout_nanos = 9; uint64 buffer_size = 10; diff --git a/scripts/multinode-local-testnet.sh b/scripts/multinode-local-testnet.sh index bb9c0443b3b..6f7d3e6a5ce 100755 --- a/scripts/multinode-local-testnet.sh +++ b/scripts/multinode-local-testnet.sh @@ -158,9 +158,9 @@ sed -i -E 's|allow_duplicate_ip = false|allow_duplicate_ip = true|g' $VALIDATOR1 sed -i -E 's|prometheus = false|prometheus = true|g' $VALIDATOR1_CONFIG # validator2 -sed -i -E 's|tcp://127.0.0.1:26658|tcp://127.0.0.1:26655|g' $VALIDATOR2_CONFIG -sed -i -E 's|tcp://127.0.0.1:26657|tcp://127.0.0.1:26654|g' $VALIDATOR2_CONFIG -sed -i -E 's|tcp://0.0.0.0:26656|tcp://0.0.0.0:26653|g' $VALIDATOR2_CONFIG +sed -i -E 's|tcp://127.0.0.1:26668|tcp://127.0.0.1:26655|g' $VALIDATOR2_CONFIG +sed -i -E 's|tcp://127.0.0.1:26667|tcp://127.0.0.1:26654|g' $VALIDATOR2_CONFIG +sed -i -E 's|tcp://0.0.0.0:26666|tcp://0.0.0.0:26653|g' $VALIDATOR2_CONFIG sed -i -E 's|allow_duplicate_ip = false|allow_duplicate_ip = true|g' $VALIDATOR2_CONFIG sed -i -E 's|prometheus = false|prometheus = true|g' $VALIDATOR2_CONFIG sed -i -E 's|prometheus_listen_addr = ":26660"|prometheus_listen_addr = ":26630"|g' $VALIDATOR2_CONFIG @@ -183,7 +183,7 @@ sed -i -E 's|prometheus_listen_addr = ":26660"|prometheus_listen_addr = ":26610" # copy tendermint node id of validator1 to persistent peers of validator2-4 -sed -i -E "s|persistent_peers = \"\"|persistent_peers = \"$(symphonyd tendermint show-node-id --home=$HOME/.symphonyd/validator1)@localhost:26656\"|g" $HOME/.symphonyd/validator2/config/config.toml +sed -i -E "s|persistent_peers = \"\"|persistent_peers = \"$(symphonyd tendermint show-node-id --home=$HOME/.symphonyd/validator1)@localhost:26667\"|g" $HOME/.symphonyd/validator2/config/config.toml sed -i -E "s|persistent_peers = \"\"|persistent_peers = \"$(symphonyd tendermint show-node-id --home=$HOME/.symphonyd/validator1)@localhost:26656\"|g" $HOME/.symphonyd/validator3/config/config.toml sed -i -E "s|persistent_peers = \"\"|persistent_peers = \"$(symphonyd tendermint show-node-id --home=$HOME/.symphonyd/validator1)@localhost:26656\"|g" $HOME/.symphonyd/validator4/config/config.toml diff --git a/x/stakeibc/keeper/reward_converter.go b/x/stakeibc/keeper/reward_converter.go index 6a4b8efb6fa..7baa893fead 100644 --- a/x/stakeibc/keeper/reward_converter.go +++ b/x/stakeibc/keeper/reward_converter.go @@ -81,7 +81,7 @@ func (k Keeper) CalculateRewardsSplit( rewardsAmount sdkmath.Int, ) (rewardSplit RewardsSplit, err error) { // Get the fee rate and total fees from params (e.g. 0.1 for 10% fee) - strideFeeParam := sdkmath.NewIntFromUint64(k.GetParams(ctx).StrideCommission) + strideFeeParam := sdkmath.NewIntFromUint64(k.GetParams(ctx).SymphonyCommission) totalFeeRate := sdkmath.LegacyNewDecFromInt(strideFeeParam).Quo(sdkmath.LegacyNewDec(100)) // Get the total fee amount from the fee percentage diff --git a/x/stakeibc/types/message_create_trade_route.go b/x/stakeibc/types/message_create_trade_route.go index 52cad2d91cd..609ce60855e 100644 --- a/x/stakeibc/types/message_create_trade_route.go +++ b/x/stakeibc/types/message_create_trade_route.go @@ -45,10 +45,10 @@ func (msg *MsgCreateTradeRoute) ValidateBasic() error { } if err := ValidateConnectionId(msg.StrideToRewardConnectionId); err != nil { - return errorsmod.Wrap(err, "invalid stride to reward connection ID") + return errorsmod.Wrap(err, "invalid symphony to reward connection ID") } if err := ValidateConnectionId(msg.StrideToTradeConnectionId); err != nil { - return errorsmod.Wrap(err, "invalid stride to trade connection ID") + return errorsmod.Wrap(err, "invalid symphony to trade connection ID") } if err := ValidateChannelId(msg.HostToRewardTransferChannelId); err != nil { diff --git a/x/stakeibc/types/params.go b/x/stakeibc/types/params.go index 1973b4ecab2..922fa7af05a 100644 --- a/x/stakeibc/types/params.go +++ b/x/stakeibc/types/params.go @@ -16,7 +16,7 @@ var ( DefaultRewardsInterval uint64 = 1 DefaultRedemptionRateInterval uint64 = 1 // you apparently cannot safely encode floats, so we make commission / 100 - DefaultStrideCommission uint64 = 10 + DefaultSymphonyCommission uint64 = 10 DefaultICATimeoutNanos uint64 = 600000000000 DefaultBufferSize uint64 = 5 // 1/5=20% of the epoch DefaultIbcTimeoutBlocks uint64 = 300 // 300 blocks ~= 30 minutes @@ -34,7 +34,7 @@ var ( KeyReinvestInterval = []byte("ReinvestInterval") KeyRewardsInterval = []byte("RewardsInterval") KeyRedemptionRateInterval = []byte("RedemptionRateInterval") - KeyStrideCommission = []byte("StrideCommission") + KeySymphonyCommission = []byte("SymphonyCommission") KeyICATimeoutNanos = []byte("ICATimeoutNanos") KeyFeeTransferTimeoutNanos = []byte("FeeTransferTimeoutNanos") KeyBufferSize = []byte("BufferSize") @@ -62,7 +62,7 @@ func NewParams( delegateInterval uint64, rewardsInterval uint64, redemptionRateInterval uint64, - strideCommission uint64, + symphonyCommission uint64, reinvestInterval uint64, icaTimeoutNanos uint64, bufferSize uint64, @@ -80,7 +80,7 @@ func NewParams( DelegateInterval: delegateInterval, RewardsInterval: rewardsInterval, RedemptionRateInterval: redemptionRateInterval, - StrideCommission: strideCommission, + SymphonyCommission: symphonyCommission, ReinvestInterval: reinvestInterval, IcaTimeoutNanos: icaTimeoutNanos, BufferSize: bufferSize, @@ -102,7 +102,7 @@ func DefaultParams() Params { DefaultDelegateInterval, DefaultRewardsInterval, DefaultRedemptionRateInterval, - DefaultStrideCommission, + DefaultSymphonyCommission, DefaultReinvestInterval, DefaultICATimeoutNanos, DefaultBufferSize, @@ -124,7 +124,7 @@ func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { paramtypes.NewParamSetPair(KeyDelegateInterval, &p.DelegateInterval, isPositive), paramtypes.NewParamSetPair(KeyRewardsInterval, &p.RewardsInterval, isPositive), paramtypes.NewParamSetPair(KeyRedemptionRateInterval, &p.RedemptionRateInterval, isPositive), - paramtypes.NewParamSetPair(KeyStrideCommission, &p.StrideCommission, isCommission), + paramtypes.NewParamSetPair(KeySymphonyCommission, &p.SymphonyCommission, isCommission), paramtypes.NewParamSetPair(KeyReinvestInterval, &p.ReinvestInterval, isPositive), paramtypes.NewParamSetPair(KeyICATimeoutNanos, &p.IcaTimeoutNanos, isPositive), paramtypes.NewParamSetPair(KeyBufferSize, &p.BufferSize, isPositive), @@ -247,7 +247,7 @@ func (p Params) Validate() error { if err := isPositive(p.RedemptionRateInterval); err != nil { return err } - if err := isCommission(p.StrideCommission); err != nil { + if err := isCommission(p.SymphonyCommission); err != nil { return err } if err := isPositive(p.ReinvestInterval); err != nil { diff --git a/x/stakeibc/types/params.pb.go b/x/stakeibc/types/params.pb.go index 03d388c92e3..3160bc2d528 100644 --- a/x/stakeibc/types/params.pb.go +++ b/x/stakeibc/types/params.pb.go @@ -31,7 +31,7 @@ type Params struct { DelegateInterval uint64 `protobuf:"varint,6,opt,name=delegate_interval,json=delegateInterval,proto3" json:"delegate_interval,omitempty"` DepositInterval uint64 `protobuf:"varint,2,opt,name=deposit_interval,json=depositInterval,proto3" json:"deposit_interval,omitempty"` RedemptionRateInterval uint64 `protobuf:"varint,3,opt,name=redemption_rate_interval,json=redemptionRateInterval,proto3" json:"redemption_rate_interval,omitempty"` - StrideCommission uint64 `protobuf:"varint,4,opt,name=stride_commission,json=strideCommission,proto3" json:"stride_commission,omitempty"` + SymphonyCommission uint64 `protobuf:"varint,4,opt,name=symphony_commission,json=symphonyCommission,proto3" json:"symphony_commission,omitempty"` ReinvestInterval uint64 `protobuf:"varint,7,opt,name=reinvest_interval,json=reinvestInterval,proto3" json:"reinvest_interval,omitempty"` IcaTimeoutNanos uint64 `protobuf:"varint,9,opt,name=ica_timeout_nanos,json=icaTimeoutNanos,proto3" json:"ica_timeout_nanos,omitempty"` BufferSize uint64 `protobuf:"varint,10,opt,name=buffer_size,json=bufferSize,proto3" json:"buffer_size,omitempty"` @@ -105,9 +105,9 @@ func (m *Params) GetRedemptionRateInterval() uint64 { return 0 } -func (m *Params) GetStrideCommission() uint64 { +func (m *Params) GetSymphonyCommission() uint64 { if m != nil { - return m.StrideCommission + return m.SymphonyCommission } return 0 } @@ -196,44 +196,44 @@ func init() { func init() { proto.RegisterFile("symphony/stakeibc/params.proto", fileDescriptor_a3f649d622d90f8b) } var fileDescriptor_a3f649d622d90f8b = []byte{ - // 583 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x94, 0xcf, 0x6e, 0xd3, 0x4c, - 0x14, 0xc5, 0x93, 0xef, 0xb3, 0xda, 0x74, 0x0a, 0xd4, 0x71, 0x2b, 0xb0, 0x2a, 0x70, 0x01, 0x09, - 0x89, 0x52, 0xa8, 0x11, 0x20, 0x81, 0xe8, 0x02, 0xa9, 0x51, 0x17, 0x8d, 0x44, 0x15, 0x92, 0x48, - 0x48, 0x6c, 0x46, 0xe3, 0xf1, 0x4d, 0x3c, 0xaa, 0xed, 0x31, 0x33, 0x93, 0x34, 0xe9, 0x23, 0xb0, - 0x62, 0xc9, 0x92, 0xc7, 0x61, 0xd9, 0x25, 0x4b, 0x94, 0xbc, 0x08, 0xf2, 0xf8, 0x5f, 0x8c, 0x0a, - 0xbb, 0xe4, 0x9c, 0xdf, 0x3d, 0x73, 0x7c, 0x47, 0x36, 0x72, 0xe4, 0x3c, 0x4a, 0x02, 0x1e, 0xcf, - 0x5d, 0xa9, 0xc8, 0x39, 0x30, 0x8f, 0xba, 0x09, 0x11, 0x24, 0x92, 0x87, 0x89, 0xe0, 0x8a, 0x5b, - 0xed, 0xc2, 0x3f, 0x2c, 0xfc, 0xdd, 0x9d, 0x31, 0x1f, 0x73, 0xed, 0xba, 0xe9, 0xaf, 0x0c, 0x7c, - 0xf8, 0x65, 0x1d, 0xad, 0xf5, 0xf4, 0xa4, 0xb5, 0x8f, 0x4c, 0x01, 0x17, 0x44, 0xf8, 0x12, 0xb3, - 0x58, 0x81, 0x98, 0x92, 0xd0, 0x6e, 0xde, 0x6f, 0x3e, 0x36, 0xfa, 0x5b, 0xb9, 0x7e, 0x9a, 0xcb, - 0xd6, 0x01, 0x6a, 0xfb, 0x10, 0xc2, 0x98, 0x28, 0xa8, 0xd8, 0x35, 0xcd, 0x9a, 0x85, 0x51, 0xc2, - 0xfb, 0xc8, 0xf4, 0x21, 0xe1, 0x92, 0xa9, 0x8a, 0xfd, 0x2f, 0xcb, 0xcd, 0xf5, 0x12, 0x7d, 0x83, - 0x6c, 0x01, 0x3e, 0x44, 0x89, 0x62, 0x3c, 0xc6, 0xa2, 0x16, 0xff, 0xbf, 0x1e, 0xb9, 0x5d, 0xf9, - 0xfd, 0xd5, 0x43, 0x0e, 0x50, 0x5b, 0x2a, 0xc1, 0x7c, 0xc0, 0x94, 0x47, 0x11, 0x93, 0x92, 0xf1, - 0xd8, 0x36, 0xb2, 0x46, 0x99, 0xd1, 0x29, 0xf5, 0x14, 0x16, 0xc0, 0xe2, 0x29, 0xc8, 0x95, 0x4a, - 0xeb, 0x19, 0x5c, 0x18, 0x65, 0xf2, 0x13, 0xd4, 0x66, 0x94, 0x60, 0xc5, 0x22, 0xe0, 0x13, 0x85, - 0x63, 0x12, 0x73, 0x69, 0x6f, 0x64, 0xfd, 0x19, 0x25, 0xc3, 0x4c, 0x3f, 0x4b, 0x65, 0x6b, 0x0f, - 0x6d, 0x7a, 0x93, 0xd1, 0x08, 0x04, 0x96, 0xec, 0x12, 0x6c, 0xa4, 0x29, 0x94, 0x49, 0x03, 0x76, - 0x09, 0xd6, 0x53, 0x64, 0x31, 0x8f, 0x96, 0x61, 0x5e, 0xc8, 0xe9, 0xb9, 0xb4, 0x37, 0xb3, 0xa3, - 0x99, 0x47, 0xf3, 0xb4, 0x63, 0xad, 0x5b, 0x47, 0x68, 0x77, 0x04, 0x80, 0x95, 0x20, 0xb1, 0x4c, - 0x43, 0xeb, 0x1d, 0x6e, 0xe8, 0xa9, 0x3b, 0x23, 0x80, 0x61, 0x0e, 0xd4, 0xba, 0xbc, 0x43, 0xf7, - 0x22, 0x32, 0xc3, 0xfa, 0xfe, 0x71, 0xfa, 0x04, 0x94, 0x84, 0xa1, 0xc4, 0x09, 0x08, 0x0c, 0x09, - 0xa7, 0x81, 0x7d, 0x53, 0xcf, 0xdb, 0x11, 0x99, 0x0d, 0x52, 0xe6, 0x94, 0x92, 0x4e, 0x4a, 0xf4, - 0x40, 0x9c, 0xa4, 0xbe, 0xd5, 0x43, 0x8f, 0x7c, 0x18, 0x91, 0x49, 0xa8, 0x70, 0xc4, 0x62, 0xfc, - 0xe7, 0xc5, 0xa8, 0x40, 0x80, 0x0c, 0x78, 0xe8, 0xdb, 0xb7, 0x74, 0xd0, 0x83, 0x1c, 0x7e, 0xcf, - 0xe2, 0x7e, 0xed, 0x8e, 0x86, 0x05, 0x58, 0x4b, 0x24, 0xb3, 0x7f, 0x24, 0x6e, 0xd5, 0x13, 0xc9, - 0xec, 0x6f, 0x89, 0x47, 0x68, 0x57, 0xef, 0xf3, 0xfa, 0x0d, 0x99, 0xd9, 0x86, 0xd2, 0xbd, 0x5e, - 0xb7, 0xa1, 0x13, 0xb4, 0x37, 0x25, 0x21, 0xf3, 0x89, 0xe2, 0x02, 0xcb, 0x90, 0xc8, 0x00, 0x7f, - 0x9e, 0x80, 0x98, 0xaf, 0x14, 0xd9, 0xd6, 0x09, 0x77, 0x4b, 0x6c, 0x90, 0x52, 0x1f, 0x52, 0xa8, - 0xea, 0xf0, 0x1c, 0xed, 0x54, 0x31, 0x17, 0xc0, 0xc6, 0x81, 0xc2, 0x94, 0x24, 0xf6, 0x8e, 0x9e, - 0xb5, 0x4a, 0xef, 0xa3, 0xb6, 0x3a, 0x24, 0x79, 0x6b, 0x7c, 0xfb, 0xbe, 0xd7, 0xe8, 0x1a, 0xad, - 0x96, 0xb9, 0xd1, 0x35, 0x5a, 0x6d, 0xd3, 0xea, 0x1a, 0x2d, 0xcb, 0xdc, 0x3e, 0x3e, 0xfb, 0xb1, - 0x70, 0x9a, 0x57, 0x0b, 0xa7, 0xf9, 0x6b, 0xe1, 0x34, 0xbf, 0x2e, 0x9d, 0xc6, 0xd5, 0xd2, 0x69, - 0xfc, 0x5c, 0x3a, 0x8d, 0x4f, 0xaf, 0xc6, 0x4c, 0x05, 0x13, 0xef, 0x90, 0xf2, 0xc8, 0xe5, 0x32, - 0xe2, 0x92, 0xc9, 0x67, 0x21, 0xf1, 0x64, 0xf1, 0xc7, 0x9d, 0xbe, 0x78, 0xed, 0xce, 0xaa, 0x8f, - 0x81, 0x9a, 0x27, 0x20, 0xbd, 0x35, 0xfd, 0x8e, 0xbf, 0xfc, 0x1d, 0x00, 0x00, 0xff, 0xff, 0x8a, - 0x6d, 0xe3, 0x29, 0x2e, 0x04, 0x00, 0x00, + // 582 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x94, 0xcd, 0x6e, 0xd3, 0x40, + 0x14, 0x85, 0x13, 0xb0, 0xda, 0x74, 0x0a, 0xd4, 0x71, 0x2b, 0xb0, 0x2a, 0x70, 0x01, 0x09, 0x89, + 0xf2, 0x53, 0x23, 0x40, 0x02, 0xd1, 0x05, 0x52, 0xa3, 0x2e, 0x1a, 0x89, 0x2a, 0x24, 0x91, 0x90, + 0xd8, 0x8c, 0xc6, 0xe3, 0x9b, 0x78, 0x54, 0xdb, 0x63, 0x66, 0x26, 0x69, 0xd2, 0x87, 0x40, 0x2c, + 0x59, 0xf2, 0x38, 0x2c, 0xbb, 0x64, 0x89, 0x92, 0x17, 0x41, 0x1e, 0xff, 0xc5, 0xa8, 0xb0, 0x4b, + 0xce, 0xf9, 0xee, 0x99, 0x7b, 0xef, 0x4c, 0x82, 0x1c, 0x39, 0x8f, 0x92, 0x80, 0xc7, 0x73, 0x57, + 0x2a, 0x72, 0x06, 0xcc, 0xa3, 0x6e, 0x42, 0x04, 0x89, 0xe4, 0x41, 0x22, 0xb8, 0xe2, 0x56, 0xbb, + 0xf0, 0x0f, 0x0a, 0x7f, 0x77, 0x67, 0xcc, 0xc7, 0x5c, 0xbb, 0x6e, 0xfa, 0x29, 0x03, 0x1f, 0x7e, + 0x5d, 0x47, 0x6b, 0x3d, 0x5d, 0x69, 0xed, 0x23, 0x53, 0xc0, 0x39, 0x11, 0xbe, 0xc4, 0x2c, 0x56, + 0x20, 0xa6, 0x24, 0xb4, 0x9b, 0xf7, 0x9b, 0x8f, 0x8d, 0xfe, 0x56, 0xae, 0x9f, 0xe4, 0xb2, 0xf5, + 0x14, 0xb5, 0x7d, 0x08, 0x61, 0x4c, 0x14, 0x54, 0xec, 0x9a, 0x66, 0xcd, 0xc2, 0x28, 0xe1, 0x7d, + 0x64, 0xfa, 0x90, 0x70, 0xc9, 0x54, 0xc5, 0x5e, 0xcb, 0x72, 0x73, 0xbd, 0x44, 0xdf, 0x22, 0x5b, + 0x80, 0x0f, 0x51, 0xa2, 0x18, 0x8f, 0xb1, 0xa8, 0xc5, 0x5f, 0xd7, 0x25, 0xb7, 0x2b, 0xbf, 0xbf, + 0x7a, 0x88, 0x8b, 0xb6, 0x8b, 0x91, 0x31, 0xe5, 0x51, 0xc4, 0xa4, 0x64, 0x3c, 0xb6, 0x0d, 0x5d, + 0x64, 0x15, 0x56, 0xa7, 0x74, 0xd2, 0x11, 0x04, 0xb0, 0x78, 0x0a, 0x72, 0xa5, 0xad, 0xf5, 0x6c, + 0x84, 0xc2, 0x28, 0xd3, 0x9f, 0xa0, 0x36, 0xa3, 0x04, 0x2b, 0x16, 0x01, 0x9f, 0x28, 0x1c, 0x93, + 0x98, 0x4b, 0x7b, 0x23, 0x9b, 0x81, 0x51, 0x32, 0xcc, 0xf4, 0xd3, 0x54, 0xb6, 0xf6, 0xd0, 0xa6, + 0x37, 0x19, 0x8d, 0x40, 0x60, 0xc9, 0x2e, 0xc0, 0x46, 0x9a, 0x42, 0x99, 0x34, 0x60, 0x17, 0x60, + 0x3d, 0x43, 0x16, 0xf3, 0x68, 0x19, 0xe6, 0x85, 0x9c, 0x9e, 0x49, 0x7b, 0x33, 0x3b, 0x9a, 0x79, + 0x34, 0x4f, 0x3b, 0xd2, 0xba, 0x75, 0x88, 0x76, 0x47, 0x00, 0x58, 0x09, 0x12, 0xcb, 0x34, 0xb4, + 0xde, 0xc3, 0x0d, 0x5d, 0x75, 0x67, 0x04, 0x30, 0xcc, 0x81, 0x5a, 0x2f, 0xef, 0xd1, 0xbd, 0x88, + 0xcc, 0xb0, 0x7e, 0x03, 0x38, 0x9d, 0x80, 0x92, 0x30, 0x94, 0x38, 0x01, 0x81, 0x21, 0xe1, 0x34, + 0xb0, 0x6f, 0xea, 0x7a, 0x3b, 0x22, 0xb3, 0x41, 0xca, 0x9c, 0x50, 0xd2, 0x49, 0x89, 0x1e, 0x88, + 0xe3, 0xd4, 0xb7, 0x7a, 0xe8, 0x91, 0x0f, 0x23, 0x32, 0x09, 0x15, 0x8e, 0x58, 0x8c, 0xff, 0xbe, + 0x1c, 0x15, 0x08, 0x90, 0x01, 0x0f, 0x7d, 0xfb, 0x96, 0x0e, 0x7a, 0x90, 0xc3, 0x1f, 0x58, 0xdc, + 0xaf, 0xdd, 0xd3, 0xb0, 0x00, 0x6b, 0x89, 0x64, 0xf6, 0x9f, 0xc4, 0xad, 0x7a, 0x22, 0x99, 0xfd, + 0x2b, 0xf1, 0x10, 0xed, 0xea, 0x7d, 0x5e, 0xbd, 0x21, 0x33, 0xdb, 0x50, 0xba, 0xd7, 0xab, 0x36, + 0x74, 0x8c, 0xf6, 0xa6, 0x24, 0x64, 0x3e, 0x51, 0x5c, 0x60, 0x19, 0x12, 0x19, 0xe0, 0x2f, 0x13, + 0x10, 0xf3, 0x95, 0x46, 0xb6, 0x75, 0xc2, 0xdd, 0x12, 0x1b, 0xa4, 0xd4, 0xc7, 0x14, 0xaa, 0x7a, + 0x78, 0x81, 0x76, 0xaa, 0x98, 0x73, 0x60, 0xe3, 0x40, 0x61, 0x4a, 0x12, 0x7b, 0x27, 0x7b, 0x7f, + 0xa5, 0xf7, 0x49, 0x5b, 0x1d, 0x92, 0xbc, 0x33, 0xbe, 0xff, 0xd8, 0x6b, 0x74, 0x8d, 0x56, 0xcb, + 0xdc, 0xe8, 0x1a, 0xad, 0xb6, 0x69, 0x75, 0x8d, 0x96, 0x65, 0x6e, 0x1f, 0x9d, 0xfe, 0x5c, 0x38, + 0xcd, 0xcb, 0x85, 0xd3, 0xfc, 0xbd, 0x70, 0x9a, 0xdf, 0x96, 0x4e, 0xe3, 0x72, 0xe9, 0x34, 0x7e, + 0x2d, 0x9d, 0xc6, 0xe7, 0xd7, 0x63, 0xa6, 0x82, 0x89, 0x77, 0x40, 0x79, 0xe4, 0x72, 0x19, 0x71, + 0xc9, 0xe4, 0xf3, 0x90, 0x78, 0xb2, 0xf8, 0xe2, 0x4e, 0x5f, 0xbe, 0x71, 0x67, 0xd5, 0x1f, 0x82, + 0x9a, 0x27, 0x20, 0xbd, 0x35, 0xfd, 0x3b, 0x7f, 0xf5, 0x27, 0x00, 0x00, 0xff, 0xff, 0x07, 0x94, + 0xb8, 0xea, 0x32, 0x04, 0x00, 0x00, } func (m *Params) Marshal() (dAtA []byte, err error) { @@ -322,8 +322,8 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x30 } - if m.StrideCommission != 0 { - i = encodeVarintParams(dAtA, i, uint64(m.StrideCommission)) + if m.SymphonyCommission != 0 { + i = encodeVarintParams(dAtA, i, uint64(m.SymphonyCommission)) i-- dAtA[i] = 0x20 } @@ -371,8 +371,8 @@ func (m *Params) Size() (n int) { if m.RedemptionRateInterval != 0 { n += 1 + sovParams(uint64(m.RedemptionRateInterval)) } - if m.StrideCommission != 0 { - n += 1 + sovParams(uint64(m.StrideCommission)) + if m.SymphonyCommission != 0 { + n += 1 + sovParams(uint64(m.SymphonyCommission)) } if m.DelegateInterval != 0 { n += 1 + sovParams(uint64(m.DelegateInterval)) @@ -507,9 +507,9 @@ func (m *Params) Unmarshal(dAtA []byte) error { } case 4: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field StrideCommission", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SymphonyCommission", wireType) } - m.StrideCommission = 0 + m.SymphonyCommission = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowParams @@ -519,7 +519,7 @@ func (m *Params) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.StrideCommission |= uint64(b&0x7F) << shift + m.SymphonyCommission |= uint64(b&0x7F) << shift if b < 0x80 { break } From 3e18fa87996073a6b137ad12e48278423db04fea Mon Sep 17 00:00:00 2001 From: P-Yevhenii Date: Mon, 29 Dec 2025 14:04:00 +0200 Subject: [PATCH 8/9] Added stake ibc docs --- client/docs/config.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/client/docs/config.json b/client/docs/config.json index 0587d54dbd2..591afc6634b 100644 --- a/client/docs/config.json +++ b/client/docs/config.json @@ -96,6 +96,22 @@ } } }, + { + "url": "./tmp-swagger-gen/symphony/stakeibc/query.swagger.json", + "operationIds": { + "rename": { + "Params": "StakeCustomIbcParams" + } + } + }, + { + "url": "./tmp-swagger-gen/symphony/stakeibc/tx.swagger.json", + "operationIds": { + "rename": { + "Params": "StakeCustomIbcTxParams" + } + } + }, { "url": "./tmp-swagger-gen/symphony/market/v1beta1/query.swagger.json", "operationIds": { From 9d8fb8bc827c9ec4e57a2b51c1c61ce12b9ee740 Mon Sep 17 00:00:00 2001 From: P-Yevhenii Date: Tue, 30 Dec 2025 01:42:35 +0200 Subject: [PATCH 9/9] Update deps --- client/docs/config.json | 4 +- client/docs/static/swagger/swagger.yaml | 5116 ++++++++++++++++++----- client/docs/statik/statik.go | 2 +- proto/symphony/stakeibc/query.proto | 24 +- proto/symphony/stakeibc/tx.proto | 38 +- x/stakeibc/client/cli/query.go | 29 - x/stakeibc/types/query.pb.go | 194 +- x/stakeibc/types/query.pb.gw.go | 119 +- x/stakeibc/types/tx.pb.go | 347 +- x/stakeibc/types/tx.pb.gw.go | 493 +++ 10 files changed, 4786 insertions(+), 1580 deletions(-) create mode 100644 x/stakeibc/types/tx.pb.gw.go diff --git a/client/docs/config.json b/client/docs/config.json index 591afc6634b..d34abe0281a 100644 --- a/client/docs/config.json +++ b/client/docs/config.json @@ -100,7 +100,7 @@ "url": "./tmp-swagger-gen/symphony/stakeibc/query.swagger.json", "operationIds": { "rename": { - "Params": "StakeCustomIbcParams" + "Params": "StakeIbcParams" } } }, @@ -108,7 +108,7 @@ "url": "./tmp-swagger-gen/symphony/stakeibc/tx.swagger.json", "operationIds": { "rename": { - "Params": "StakeCustomIbcTxParams" + "Params": "StakeIbcTxParams" } } }, diff --git a/client/docs/static/swagger/swagger.yaml b/client/docs/static/swagger/swagger.yaml index 86fe4cae522..c28e6eb0a3a 100644 --- a/client/docs/static/swagger/swagger.yaml +++ b/client/docs/static/swagger/swagger.yaml @@ -16189,55 +16189,32 @@ paths: signatures required by gogoproto. tags: - Msg - /symphony/market/v1beta1/exchange_requirements: + /symphony/stakeibc/epoch_tracker: get: - operationId: ExchangeRequirements + summary: Queries a list of EpochTracker items. + operationId: EpochTrackerAll responses: '200': description: A successful response. schema: type: object properties: - exchange_requirements: + epoch_tracker: type: array items: type: object properties: - base_currency: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the - custom method - - signatures required by gogoproto. - exchange_rate: + epoch_identifier: type: string - total: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - description: |- - QueryExchangeRequirementsResponse is the response type for the - Query/ExchangeRequirements RPC method. + epoch_number: + type: string + format: uint64 + next_epoch_start_time: + type: string + format: uint64 + duration: + type: string + format: uint64 default: description: An unexpected error response. schema: @@ -16262,31 +16239,30 @@ paths: format: byte tags: - Query - /symphony/market/v1beta1/params: + /symphony/stakeibc/epoch_tracker/{epoch_identifier}: get: - summary: Params queries all parameters. - operationId: MarketParams + summary: Queries a EpochTracker by index. + operationId: EpochTracker responses: '200': description: A successful response. schema: type: object properties: - params: - description: params defines the parameters of the module. + epoch_tracker: type: object properties: - exchange_pool: + epoch_identifier: type: string - format: byte - min_stability_spread: + epoch_number: type: string - format: byte - tax_receiver: + format: uint64 + next_epoch_start_time: type: string - description: >- - QueryParamsResponse is the response type for the Query/Params RPC - method. + format: uint64 + duration: + type: string + format: uint64 default: description: An unexpected error response. schema: @@ -16309,36 +16285,256 @@ paths: value: type: string format: byte + parameters: + - name: epoch_identifier + in: path + required: true + type: string tags: - Query - /symphony/market/v1beta1/swap: + /symphony/stakeibc/host_zone: get: - summary: Swap returns simulated swap amount. - operationId: Swap + summary: Queries a list of HostZone items. + operationId: HostZoneAll responses: '200': description: A successful response. schema: type: object properties: - return_coin: + host_zone: + type: array + items: + type: object + properties: + chain_id: + type: string + title: Chain ID of the host zone + bech32prefix: + type: string + title: Bech32 prefix of host zone's address + connection_id: + type: string + title: >- + ConnectionID from Stride to the host zone (ID is on the + stride side) + transfer_channel_id: + type: string + title: >- + Transfer Channel ID from Stride to the host zone (ID is + on the stride side) + ibc_denom: + type: string + title: ibc denom of the host zone's native token on stride + host_denom: + type: string + title: native denom on host zone + unbonding_period: + type: string + format: uint64 + title: The unbonding period in days (e.g. 21) + validators: + type: array + items: + type: object + properties: + name: + type: string + address: + type: string + weight: + type: string + format: uint64 + delegation: + type: string + slash_query_progress_tracker: + type: string + slash_query_checkpoint: + type: string + shares_to_tokens_rate: + type: string + delegation_changes_in_progress: + type: string + format: int64 + slash_query_in_progress: + type: boolean + title: List of validators that are delegated to + deposit_address: + type: string + title: >- + Address that custodies native tokens during a liquid + stake + withdrawal_ica_address: + type: string + title: >- + ICA Address on the host zone responsible for collecting + rewards + fee_ica_address: + type: string + title: ICA Address on the host zone responsible for commission + delegation_ica_address: + type: string + title: >- + ICA Address on the host zone responsible for staking and + unstaking + redemption_ica_address: + type: string + title: >- + ICA Address that receives unstaked tokens after they've + finished unbonding + community_pool_deposit_ica_address: + type: string + title: >- + ICA Address that receives tokens from a community pool + to liquid stake or + + redeem In the case of a liquid stake, the community pool + deposits native + + tokens In the case of a redemption, the community pool + deposits stTokens + community_pool_return_ica_address: + type: string + title: >- + ICA Address that distributes tokens back to the + community pool during a + + community pool liquid stake or redeem In the case of a + liquid stake, the + + return address sends back stTokens In the case of a + redemption, the return + + address sends back native tokens + community_pool_stake_holding_address: + type: string + title: >- + Module account on Stride that receives native tokens + from the deposit ICA + + and liquid stakes them + community_pool_redeem_holding_address: + type: string + title: >- + Module account on Stride that receives stTokens from the + deposit ICA and + + redeems them + community_pool_treasury_address: + type: string + title: >- + Optional community pool address to send tokens to after + a community pool + + liquid stake or redemption If this address is empty, the + tokens are sent to + + the main community pool + total_delegations: + type: string + title: The total delegated balance on the host zone + last_redemption_rate: + type: string + title: The redemption rate from the previous epoch + redemption_rate: + type: string + title: The current redemption rate + min_redemption_rate: + type: string + title: >- + The min outer redemption rate bound - controlled only be + governance + + The min inner bound cannot exceed this bound + max_redemption_rate: + type: string + title: >- + The max outer redemption rate bound - controlled only be + governance + + The max inner bound cannot exceed this bound + min_inner_redemption_rate: + type: string + title: >- + The min minner redemption rate bound - controlled by the + admin + + If the redemption rate exceeds this bound, the host zone + is halted + max_inner_redemption_rate: + type: string + title: >- + The max minner redemption rate bound - controlled by the + admin + + If the redemption rate exceeds this bound, the host zone + is halted + max_messages_per_ica_tx: + type: string + format: uint64 + title: >- + The max number of messages that can be sent in a + delegation + + or undelegation ICA tx + redemptions_enabled: + type: boolean + title: >- + Indicates whether redemptions are allowed through this + module + community_pool_rebate: + title: >- + An optional fee rebate + + If there is no rebate for the host zone, this will be + nil + type: object + properties: + rebate_rate: + type: string + title: Rebate percentage as a decimal (e.g. 0.2 for 20%) + liquid_staked_st_token_amount: + type: string + title: >- + Number of stTokens received from the community pool + liquid stake + lsm_liquid_stake_enabled: + type: boolean + title: A boolean indicating whether the chain has LSM enabled + halted: + type: boolean + title: >- + A boolean indicating whether the chain is currently + halted + title: Core data structure to track liquid staking zones + pagination: type: object properties: - denom: + next_key: type: string - amount: + format: byte + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + total: type: string - description: >- - Coin defines a token with a denomination and an amount. + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total + was set, its value is undefined otherwise + description: >- + PageResponse is to be embedded in gRPC response messages where + the - NOTE: The amount field is an Int which implements the custom - method + corresponding request message has used PageRequest. - signatures required by gogoproto. - description: >- - QuerySwapResponse is the response type for the Query/Swap RPC - method. + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } default: description: An unexpected error response. schema: @@ -16362,229 +16558,271 @@ paths: type: string format: byte parameters: - - name: offer_coin - description: offer_coin defines the coin being offered (i.e. 1000000uluna). + - name: pagination.key + description: |- + key is a value returned in PageResponse.next_key to begin + querying the next page most efficiently. Only one of offset or key + should be set. in: query required: false type: string - - name: ask_denom - description: ask_denom defines the denom of the coin to swap to. + format: byte + - name: pagination.offset + description: >- + offset is a numeric offset that can be used when key is unavailable. + + It is less efficient than using key. Only one of offset or key + should + + be set. + in: query + required: false + type: string + format: uint64 + - name: pagination.limit + description: >- + limit is the total number of results to be returned in the result + page. + + If left empty it will default to a value to be set by each app. in: query required: false type: string + format: uint64 + - name: pagination.count_total + description: >- + count_total is set to true to indicate that the result set should + include + + a count of the total number of items available for pagination in + UIs. + + count_total is only respected when offset is used. It is ignored + when key + + is set. + in: query + required: false + type: boolean + - name: pagination.reverse + description: >- + reverse is set to true if results are to be returned in the + descending order. + + + Since: cosmos-sdk 0.43 + in: query + required: false + type: boolean tags: - Query - /cosmos/auth/v1beta1/account_info/{address}: + /symphony/stakeibc/host_zone/{chain_id}: get: - summary: AccountInfo queries account info which is common to all account types. - description: 'Since: cosmos-sdk 0.47' - operationId: AccountInfo + summary: Queries a HostZone by id. + operationId: HostZone responses: '200': description: A successful response. schema: type: object properties: - info: - description: info is the account info which is represented by BaseAccount. + host_zone: type: object properties: - address: + chain_id: type: string - pub_key: - type: object - properties: - type_url: - type: string - description: >- - A URL/resource name that uniquely identifies the type - of the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be - in a canonical form - - (e.g., leading "." is not accepted). - - - In practice, teams usually precompile into the binary - all types that they - - expect it to use in the context of Any. However, for - URLs which use the - - scheme `http`, `https`, or no scheme, one can - optionally set up a type - - server that maps type URLs to message definitions as - follows: - - - * If no scheme is provided, `https` is assumed. - - * An HTTP GET on the URL must yield a - [google.protobuf.Type][] - value in binary format, or produce an error. - * Applications are allowed to cache lookup results - based on the - URL, or have them precompiled into a binary to avoid any - lookup. Therefore, binary compatibility needs to be preserved - on changes to types. (Use versioned type names to manage - breaking changes.) - - Note: this functionality is not currently available in - the official - - protobuf release, and it is not used for type URLs - beginning with - - type.googleapis.com. As of May 2023, there are no - widely used type server - - implementations and no plans to implement one. - - - Schemes other than `http`, `https` (or the empty - scheme) might be - - used with implementation specific semantics. - value: - type: string - format: byte - description: >- - Must be a valid serialized protocol buffer of the - above specified type. - description: >- - `Any` contains an arbitrary serialized protocol buffer - message along with a - - URL that describes the type of the serialized message. - - - Protobuf library provides support to pack/unpack Any - values in the form - - of utility functions or additional generated methods of - the Any type. - - - Example 1: Pack and unpack a message in C++. - - Foo foo = ...; - Any any; - any.PackFrom(foo); - ... - if (any.UnpackTo(&foo)) { - ... - } - - Example 2: Pack and unpack a message in Java. - - Foo foo = ...; - Any any = Any.pack(foo); - ... - if (any.is(Foo.class)) { - foo = any.unpack(Foo.class); - } - // or ... - if (any.isSameTypeAs(Foo.getDefaultInstance())) { - foo = any.unpack(Foo.getDefaultInstance()); - } - - Example 3: Pack and unpack a message in Python. - - foo = Foo(...) - any = Any() - any.Pack(foo) - ... - if any.Is(Foo.DESCRIPTOR): - any.Unpack(foo) - ... - - Example 4: Pack and unpack a message in Go - - foo := &pb.Foo{...} - any, err := anypb.New(foo) - if err != nil { - ... - } - ... - foo := &pb.Foo{} - if err := any.UnmarshalTo(foo); err != nil { - ... - } - - The pack methods provided by protobuf library will by - default use - - 'type.googleapis.com/full.type.name' as the type URL and - the unpack - - methods only use the fully qualified type name after the - last '/' - - in the type URL, for example "foo.bar.com/x/y.z" will - yield type - - name "y.z". - + title: Chain ID of the host zone + bech32prefix: + type: string + title: Bech32 prefix of host zone's address + connection_id: + type: string + title: >- + ConnectionID from Stride to the host zone (ID is on the + stride side) + transfer_channel_id: + type: string + title: >- + Transfer Channel ID from Stride to the host zone (ID is on + the stride side) + ibc_denom: + type: string + title: ibc denom of the host zone's native token on stride + host_denom: + type: string + title: native denom on host zone + unbonding_period: + type: string + format: uint64 + title: The unbonding period in days (e.g. 21) + validators: + type: array + items: + type: object + properties: + name: + type: string + address: + type: string + weight: + type: string + format: uint64 + delegation: + type: string + slash_query_progress_tracker: + type: string + slash_query_checkpoint: + type: string + shares_to_tokens_rate: + type: string + delegation_changes_in_progress: + type: string + format: int64 + slash_query_in_progress: + type: boolean + title: List of validators that are delegated to + deposit_address: + type: string + title: Address that custodies native tokens during a liquid stake + withdrawal_ica_address: + type: string + title: >- + ICA Address on the host zone responsible for collecting + rewards + fee_ica_address: + type: string + title: ICA Address on the host zone responsible for commission + delegation_ica_address: + type: string + title: >- + ICA Address on the host zone responsible for staking and + unstaking + redemption_ica_address: + type: string + title: >- + ICA Address that receives unstaked tokens after they've + finished unbonding + community_pool_deposit_ica_address: + type: string + title: >- + ICA Address that receives tokens from a community pool to + liquid stake or - JSON + redeem In the case of a liquid stake, the community pool + deposits native - ==== + tokens In the case of a redemption, the community pool + deposits stTokens + community_pool_return_ica_address: + type: string + title: >- + ICA Address that distributes tokens back to the community + pool during a - The JSON representation of an `Any` value uses the regular + community pool liquid stake or redeem In the case of a + liquid stake, the - representation of the deserialized, embedded message, with - an + return address sends back stTokens In the case of a + redemption, the return - additional field `@type` which contains the type URL. - Example: + address sends back native tokens + community_pool_stake_holding_address: + type: string + title: >- + Module account on Stride that receives native tokens from + the deposit ICA - package google.profile; - message Person { - string first_name = 1; - string last_name = 2; - } + and liquid stakes them + community_pool_redeem_holding_address: + type: string + title: >- + Module account on Stride that receives stTokens from the + deposit ICA and - { - "@type": "type.googleapis.com/google.profile.Person", - "firstName": , - "lastName": - } + redeems them + community_pool_treasury_address: + type: string + title: >- + Optional community pool address to send tokens to after a + community pool - If the embedded message type is well-known and has a - custom JSON + liquid stake or redemption If this address is empty, the + tokens are sent to - representation, that representation will be embedded - adding a field + the main community pool + total_delegations: + type: string + title: The total delegated balance on the host zone + last_redemption_rate: + type: string + title: The redemption rate from the previous epoch + redemption_rate: + type: string + title: The current redemption rate + min_redemption_rate: + type: string + title: >- + The min outer redemption rate bound - controlled only be + governance - `value` which holds the custom JSON in addition to the - `@type` + The min inner bound cannot exceed this bound + max_redemption_rate: + type: string + title: >- + The max outer redemption rate bound - controlled only be + governance - field. Example (for message [google.protobuf.Duration][]): + The max inner bound cannot exceed this bound + min_inner_redemption_rate: + type: string + title: >- + The min minner redemption rate bound - controlled by the + admin - { - "@type": "type.googleapis.com/google.protobuf.Duration", - "value": "1.212s" - } - account_number: + If the redemption rate exceeds this bound, the host zone + is halted + max_inner_redemption_rate: type: string - format: uint64 - sequence: + title: >- + The max minner redemption rate bound - controlled by the + admin + + If the redemption rate exceeds this bound, the host zone + is halted + max_messages_per_ica_tx: type: string format: uint64 - description: |- - QueryAccountInfoResponse is the Query/AccountInfo response type. + title: >- + The max number of messages that can be sent in a + delegation - Since: cosmos-sdk 0.47 + or undelegation ICA tx + redemptions_enabled: + type: boolean + title: >- + Indicates whether redemptions are allowed through this + module + community_pool_rebate: + title: |- + An optional fee rebate + If there is no rebate for the host zone, this will be nil + type: object + properties: + rebate_rate: + type: string + title: Rebate percentage as a decimal (e.g. 0.2 for 20%) + liquid_staked_st_token_amount: + type: string + title: >- + Number of stTokens received from the community pool + liquid stake + lsm_liquid_stake_enabled: + type: boolean + title: A boolean indicating whether the chain has LSM enabled + halted: + type: boolean + title: A boolean indicating whether the chain is currently halted + title: Core data structure to track liquid staking zones default: description: An unexpected error response. schema: @@ -16604,19 +16842,1195 @@ paths: properties: type_url: type: string - description: >- - A URL/resource name that uniquely identifies the type of - the serialized - - protocol buffer message. This string must contain at - least - - one "/" character. The last segment of the URL's path - must represent - - the fully qualified name of the type (as in - - `path/google.protobuf.Duration`). The name should be in + value: + type: string + format: byte + parameters: + - name: chain_id + in: path + required: true + type: string + tags: + - Query + /symphony/stakeibc/module_address/{name}: + get: + summary: Queries a list of ModuleAddress items. + operationId: ModuleAddress + responses: + '200': + description: A successful response. + schema: + type: object + properties: + addr: + type: string + default: + description: An unexpected error response. + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte + parameters: + - name: name + in: path + required: true + type: string + tags: + - Query + /symphony/stakeibc/next_packet_sequence/{channel_id}/{port_id}: + get: + summary: Queries the next packet sequence for one for a given channel + operationId: NextPacketSequence + responses: + '200': + description: A successful response. + schema: + type: object + properties: + sequence: + type: string + format: uint64 + default: + description: An unexpected error response. + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte + parameters: + - name: channel_id + in: path + required: true + type: string + - name: port_id + in: path + required: true + type: string + tags: + - Query + /symphony/stakeibc/params: + get: + summary: Parameters queries the parameters of the module. + operationId: StakeIbcParams + responses: + '200': + description: A successful response. + schema: + type: object + properties: + params: + description: params holds all the parameters of this module. + type: object + properties: + rewards_interval: + type: string + format: uint64 + title: define epoch lengths, in stride_epochs + delegate_interval: + type: string + format: uint64 + deposit_interval: + type: string + format: uint64 + redemption_rate_interval: + type: string + format: uint64 + symphony_commission: + type: string + format: uint64 + reinvest_interval: + type: string + format: uint64 + ica_timeout_nanos: + type: string + format: uint64 + buffer_size: + type: string + format: uint64 + ibc_timeout_blocks: + type: string + format: uint64 + fee_transfer_timeout_nanos: + type: string + format: uint64 + max_stake_ica_calls_per_epoch: + type: string + format: uint64 + default_min_redemption_rate_threshold: + type: string + format: uint64 + default_max_redemption_rate_threshold: + type: string + format: uint64 + ibc_transfer_timeout_nanos: + type: string + format: uint64 + validator_slash_query_threshold: + type: string + format: uint64 + validator_weight_cap: + type: string + format: uint64 + title: |- + Params defines the parameters for the module. + next id: 20 + description: >- + QueryParamsResponse is response type for the Query/Params RPC + method. + default: + description: An unexpected error response. + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte + tags: + - Query + /symphony/stakeibc/trade_routes: + get: + summary: Queries all trade routes + operationId: AllTradeRoutes + responses: + '200': + description: A successful response. + schema: + type: object + properties: + trade_routes: + type: array + items: + type: object + properties: + reward_denom_on_host_zone: + type: string + title: ibc denom for the reward on the host zone + reward_denom_on_reward_zone: + type: string + title: should be the native denom for the reward chain + reward_denom_on_trade_zone: + type: string + title: >- + ibc denom of the reward on the trade chain, input to the + swap + host_denom_on_trade_zone: + type: string + title: >- + ibc of the host denom on the trade chain, output from + the swap + host_denom_on_host_zone: + type: string + title: >- + should be the same as the native host denom on the host + chain + host_account: + title: |- + ICAAccount on the host zone with the reward tokens + This is the same as the host zone withdrawal ICA account + type: object + properties: + chain_id: + type: string + type: + type: string + enum: + - DELEGATION + - FEE + - WITHDRAWAL + - REDEMPTION + - COMMUNITY_POOL_DEPOSIT + - COMMUNITY_POOL_RETURN + - CONVERTER_UNWIND + - CONVERTER_TRADE + default: DELEGATION + connection_id: + type: string + address: + type: string + reward_account: + title: >- + ICAAccount on the reward zone that is acts as the + intermediate + + receiver of the transfer from host zone to trade zone + type: object + properties: + chain_id: + type: string + type: + type: string + enum: + - DELEGATION + - FEE + - WITHDRAWAL + - REDEMPTION + - COMMUNITY_POOL_DEPOSIT + - COMMUNITY_POOL_RETURN + - CONVERTER_UNWIND + - CONVERTER_TRADE + default: DELEGATION + connection_id: + type: string + address: + type: string + trade_account: + title: |- + ICAAccount responsible for executing the swap of reward + tokens for host tokens + type: object + properties: + chain_id: + type: string + type: + type: string + enum: + - DELEGATION + - FEE + - WITHDRAWAL + - REDEMPTION + - COMMUNITY_POOL_DEPOSIT + - COMMUNITY_POOL_RETURN + - CONVERTER_UNWIND + - CONVERTER_TRADE + default: DELEGATION + connection_id: + type: string + address: + type: string + host_to_reward_channel_id: + type: string + title: >- + Channel responsible for the transfer of reward tokens + from the host + + zone to the reward zone. This is the channel ID on the + host zone side + reward_to_trade_channel_id: + type: string + title: >- + Channel responsible for the transfer of reward tokens + from the reward + + zone to the trade zone. This is the channel ID on the + reward zone side + trade_to_host_channel_id: + type: string + title: >- + Channel responsible for the transfer of host tokens from + the trade + + zone, back to the host zone. This is the channel ID on + the trade zone side + min_transfer_amount: + type: string + title: >- + Minimum amount of reward token that must be accumulated + before + + the tokens are transferred to the trade ICA + trade_config: + description: |- + specifies the configuration needed to execute the swap + such as pool_id, slippage, min trade amount, etc. + title: >- + Deprecated, the trades are now executed off-chain via + authz + + so the trade configuration is no longer needed + type: object + properties: + pool_id: + type: string + format: uint64 + title: >- + Currently Osmosis is the only trade chain so this is + an osmosis pool id + swap_price: + type: string + title: >- + Spot price in the pool to convert the reward denom + to the host denom + + output_tokens = swap_price * input tokens + + This value may be slightly stale as it is updated by + an ICQ + price_update_timestamp: + type: string + format: uint64 + title: unix time in seconds that the price was last updated + max_allowed_swap_loss_rate: + type: string + title: >- + Threshold defining the percentage of tokens that + could be lost in the trade + + This captures both the loss from slippage and from a + stale price on stride + + 0.05 means the output from the trade can be no less + than a 5% deviation + + from the current value + min_swap_amount: + type: string + title: >- + min and max set boundaries of reward denom on trade + chain we will swap + + min also decides when reward token transfers are + worth it (transfer fees) + max_swap_amount: + type: string + title: >- + TradeRoute represents a round trip including info on + transfer and how to do + + the swap. It makes the assumption that the reward token is + always foreign to + + the host so therefore the first two hops are to unwind the + ibc denom enroute + + to the trade chain and the last hop is the return so funds + start/end in the + + withdrawl ICA on hostZone + + The structure is key'd on reward denom and host denom in + their native forms + + (i.e. reward_denom_on_reward_zone and + host_denom_on_host_zone) + default: + description: An unexpected error response. + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte + tags: + - Query + /symphony/stakeibc/unbondings/{address}: + get: + summary: Queries an address's unbondings + operationId: AddressUnbondings + responses: + '200': + description: A successful response. + schema: + type: object + properties: + address_unbondings: + type: array + items: + type: object + properties: + address: + type: string + receiver: + type: string + unbonding_estimated_time: + type: string + amount: + type: string + denom: + type: string + claim_is_pending: + type: boolean + epoch_number: + type: string + format: uint64 + default: + description: An unexpected error response. + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte + parameters: + - name: address + in: path + required: true + type: string + tags: + - Query + /symphony/stakeibc/claim_undelegated_tokens: + post: + operationId: ClaimUndelegatedTokens + responses: + '200': + description: A successful response. + schema: + type: object + default: + description: An unexpected error response. + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte + parameters: + - name: body + in: body + required: true + schema: + type: object + properties: + creator: + type: string + host_zone_id: + type: string + title: >- + UserUnbondingRecords are keyed on + {chain_id}.{epoch}.{receiver} + epoch: + type: string + format: uint64 + receiver: + type: string + tags: + - Msg + /symphony/stakeibc/liquid_stake: + post: + operationId: LiquidStake + responses: + '200': + description: A successful response. + schema: + type: object + properties: + st_token: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + default: + description: An unexpected error response. + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte + parameters: + - name: body + in: body + required: true + schema: + type: object + properties: + creator: + type: string + amount: + type: string + host_denom: + type: string + tags: + - Msg + /symphony/stakeibc/lsm_liquid_stake: + post: + operationId: LSMLiquidStake + responses: + '200': + description: A successful response. + schema: + type: object + properties: + transaction_complete: + type: boolean + default: + description: An unexpected error response. + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte + parameters: + - name: body + in: body + required: true + schema: + type: object + properties: + creator: + type: string + amount: + type: string + lsm_token_ibc_denom: + type: string + tags: + - Msg + /symphony/stakeibc/redeem_stake: + post: + operationId: RedeemStake + responses: + '200': + description: A successful response. + schema: + type: object + default: + description: An unexpected error response. + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte + parameters: + - name: body + in: body + required: true + schema: + type: object + properties: + creator: + type: string + amount: + type: string + host_zone: + type: string + receiver: + type: string + tags: + - Msg + /symphony/stakeibc/register_host_zone: + post: + operationId: RegisterHostZone + responses: + '200': + description: A successful response. + schema: + type: object + default: + description: An unexpected error response. + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte + parameters: + - name: body + in: body + required: true + schema: + type: object + properties: + connection_id: + type: string + bech32prefix: + type: string + host_denom: + type: string + ibc_denom: + type: string + creator: + type: string + transfer_channel_id: + type: string + unbonding_period: + type: string + format: uint64 + min_redemption_rate: + type: string + max_redemption_rate: + type: string + lsm_liquid_stake_enabled: + type: boolean + community_pool_treasury_address: + type: string + max_messages_per_ica_tx: + type: string + format: uint64 + title: 'next: 15' + tags: + - Msg + /symphony/market/v1beta1/exchange_requirements: + get: + operationId: ExchangeRequirements + responses: + '200': + description: A successful response. + schema: + type: object + properties: + exchange_requirements: + type: array + items: + type: object + properties: + base_currency: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the + custom method + + signatures required by gogoproto. + exchange_rate: + type: string + total: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + description: |- + QueryExchangeRequirementsResponse is the response type for the + Query/ExchangeRequirements RPC method. + default: + description: An unexpected error response. + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte + tags: + - Query + /symphony/market/v1beta1/params: + get: + summary: Params queries all parameters. + operationId: MarketParams + responses: + '200': + description: A successful response. + schema: + type: object + properties: + params: + description: params defines the parameters of the module. + type: object + properties: + exchange_pool: + type: string + format: byte + min_stability_spread: + type: string + format: byte + tax_receiver: + type: string + description: >- + QueryParamsResponse is the response type for the Query/Params RPC + method. + default: + description: An unexpected error response. + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte + tags: + - Query + /symphony/market/v1beta1/swap: + get: + summary: Swap returns simulated swap amount. + operationId: Swap + responses: + '200': + description: A successful response. + schema: + type: object + properties: + return_coin: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + description: >- + QuerySwapResponse is the response type for the Query/Swap RPC + method. + default: + description: An unexpected error response. + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + value: + type: string + format: byte + parameters: + - name: offer_coin + description: offer_coin defines the coin being offered (i.e. 1000000uluna). + in: query + required: false + type: string + - name: ask_denom + description: ask_denom defines the denom of the coin to swap to. + in: query + required: false + type: string + tags: + - Query + /cosmos/auth/v1beta1/account_info/{address}: + get: + summary: AccountInfo queries account info which is common to all account types. + description: 'Since: cosmos-sdk 0.47' + operationId: AccountInfo + responses: + '200': + description: A successful response. + schema: + type: object + properties: + info: + description: info is the account info which is represented by BaseAccount. + type: object + properties: + address: + type: string + pub_key: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type + of the serialized + + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's path + must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be + in a canonical form + + (e.g., leading "." is not accepted). + + + In practice, teams usually precompile into the binary + all types that they + + expect it to use in the context of Any. However, for + URLs which use the + + scheme `http`, `https`, or no scheme, one can + optionally set up a type + + server that maps type URLs to message definitions as + follows: + + + * If no scheme is provided, `https` is assumed. + + * An HTTP GET on the URL must yield a + [google.protobuf.Type][] + value in binary format, or produce an error. + * Applications are allowed to cache lookup results + based on the + URL, or have them precompiled into a binary to avoid any + lookup. Therefore, binary compatibility needs to be preserved + on changes to types. (Use versioned type names to manage + breaking changes.) + + Note: this functionality is not currently available in + the official + + protobuf release, and it is not used for type URLs + beginning with + + type.googleapis.com. As of May 2023, there are no + widely used type server + + implementations and no plans to implement one. + + + Schemes other than `http`, `https` (or the empty + scheme) might be + + used with implementation specific semantics. + value: + type: string + format: byte + description: >- + Must be a valid serialized protocol buffer of the + above specified type. + description: >- + `Any` contains an arbitrary serialized protocol buffer + message along with a + + URL that describes the type of the serialized message. + + + Protobuf library provides support to pack/unpack Any + values in the form + + of utility functions or additional generated methods of + the Any type. + + + Example 1: Pack and unpack a message in C++. + + Foo foo = ...; + Any any; + any.PackFrom(foo); + ... + if (any.UnpackTo(&foo)) { + ... + } + + Example 2: Pack and unpack a message in Java. + + Foo foo = ...; + Any any = Any.pack(foo); + ... + if (any.is(Foo.class)) { + foo = any.unpack(Foo.class); + } + // or ... + if (any.isSameTypeAs(Foo.getDefaultInstance())) { + foo = any.unpack(Foo.getDefaultInstance()); + } + + Example 3: Pack and unpack a message in Python. + + foo = Foo(...) + any = Any() + any.Pack(foo) + ... + if any.Is(Foo.DESCRIPTOR): + any.Unpack(foo) + ... + + Example 4: Pack and unpack a message in Go + + foo := &pb.Foo{...} + any, err := anypb.New(foo) + if err != nil { + ... + } + ... + foo := &pb.Foo{} + if err := any.UnmarshalTo(foo); err != nil { + ... + } + + The pack methods provided by protobuf library will by + default use + + 'type.googleapis.com/full.type.name' as the type URL and + the unpack + + methods only use the fully qualified type name after the + last '/' + + in the type URL, for example "foo.bar.com/x/y.z" will + yield type + + name "y.z". + + + JSON + + ==== + + The JSON representation of an `Any` value uses the regular + + representation of the deserialized, embedded message, with + an + + additional field `@type` which contains the type URL. + Example: + + package google.profile; + message Person { + string first_name = 1; + string last_name = 2; + } + + { + "@type": "type.googleapis.com/google.profile.Person", + "firstName": , + "lastName": + } + + If the embedded message type is well-known and has a + custom JSON + + representation, that representation will be embedded + adding a field + + `value` which holds the custom JSON in addition to the + `@type` + + field. Example (for message [google.protobuf.Duration][]): + + { + "@type": "type.googleapis.com/google.protobuf.Duration", + "value": "1.212s" + } + account_number: + type: string + format: uint64 + sequence: + type: string + format: uint64 + description: |- + QueryAccountInfoResponse is the Query/AccountInfo response type. + + Since: cosmos-sdk 0.47 + default: + description: An unexpected error response. + schema: + type: object + properties: + error: + type: string + code: + type: integer + format: int32 + message: + type: string + details: + type: array + items: + type: object + properties: + type_url: + type: string + description: >- + A URL/resource name that uniquely identifies the type of + the serialized + + protocol buffer message. This string must contain at + least + + one "/" character. The last segment of the URL's path + must represent + + the fully qualified name of the type (as in + + `path/google.protobuf.Duration`). The name should be in a canonical form (e.g., leading "." is not accepted). @@ -49776,36 +51190,451 @@ definitions: used for unbonding synthetic lockups, for active synthetic lockups, this - value is set to uninitialized value - duration: - type: string - description: |- - Duration is the duration for a synthetic lock to mature - at the point of unbonding has started. - description: >- - SyntheticLock is creating virtual lockup where new denom is - combination of + value is set to uninitialized value + duration: + type: string + description: |- + Duration is the duration for a synthetic lock to mature + at the point of unbonding has started. + description: >- + SyntheticLock is creating virtual lockup where new denom is + combination of + + original denom and synthetic suffix. At the time of synthetic lockup + creation + + and deletion, accumulation store is also being updated and on querier + side, + + they can query as freely as native lockup. + delegation_amount: + type: object + properties: + denom: + type: string + amount: + type: string + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + equivalent_staked_amount: + type: object + properties: + denom: + type: string + amount: + type: string + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + symphony.superfluid.ConnectedIntermediaryAccountResponse: + type: object + properties: + account: + type: object + properties: + denom: + type: string + val_addr: + type: string + gauge_id: + type: string + format: uint64 + address: + type: string + symphony.superfluid.Delegations: + type: object + properties: + val_addr: + type: string + amount_sfsd: + type: string + osmo_equivalent: + type: string + symphony.superfluid.EstimateSuperfluidDelegatedAmountByValidatorDenomResponse: + type: object + properties: + total_delegated_coins: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + symphony.superfluid.OsmoEquivalentMultiplierRecord: + type: object + properties: + epoch_number: + type: string + format: int64 + denom: + type: string + title: superfluid asset denom, can be LP token or native token + multiplier: + type: string + description: >- + The Osmo-Equivalent-Multiplier Record for epoch N refers to the osmo worth + we + + treat an LP share as having, for all of epoch N. Eventually this is + intended + + to be set as the Time-weighted-average-osmo-backing for the entire + duration + + of epoch N-1. (Thereby locking what's in use for epoch N as based on the + + prior epochs rewards) However for now, this is not the TWAP but instead + the + + spot price at the boundary. For different types of assets in the future, + it + + could change. + symphony.superfluid.Params: + type: object + properties: + minimum_risk_factor: + type: string + description: >- + minimum_risk_factor is to be cut on OSMO equivalent value of lp tokens + for + + superfluid staking, default: 5%. The minimum risk factor works + + to counter-balance the staked amount on chain's exposure to various + asset + + volatilities, and have base staking be 'resistant' to volatility. + title: Params holds parameters for the superfluid module + symphony.superfluid.QueryParamsResponse: + type: object + properties: + params: + description: params defines the parameters of the module. + type: object + properties: + minimum_risk_factor: + type: string + description: >- + minimum_risk_factor is to be cut on OSMO equivalent value of lp + tokens for + + superfluid staking, default: 5%. The minimum risk factor works + + to counter-balance the staked amount on chain's exposure to + various asset + + volatilities, and have base staking be 'resistant' to volatility. + title: Params holds parameters for the superfluid module + symphony.superfluid.QueryRestSupplyResponse: + type: object + properties: + amount: + type: object + properties: + denom: + type: string + amount: + type: string + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + symphony.superfluid.QueryTotalDelegationByDelegatorResponse: + type: object + properties: + superfluid_delegation_records: + type: array + items: + type: object + properties: + delegator_address: + type: string + validator_address: + type: string + delegation_amount: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + equivalent_staked_amount: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + description: >- + SuperfluidDelegationRecord is a struct used to indicate superfluid + + delegations of an account in the state machine in a user friendly + form. + delegation_response: + type: array + items: + type: object + properties: + delegation: + type: object + properties: + delegator_address: + type: string + description: delegator_address is the encoded address of the delegator. + validator_address: + type: string + description: validator_address is the encoded address of the validator. + shares: + type: string + description: shares define the delegation shares received. + description: >- + Delegation represents the bond with tokens held by an account. + It is + + owned by one delegator, and is associated with the voting power + of one + + validator. + balance: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + description: >- + DelegationResponse is equivalent to Delegation except that it + contains a + + balance in addition to shares which is more suitable for client + responses. + total_delegated_coins: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + total_equivalent_staked_amount: + type: object + properties: + denom: + type: string + amount: + type: string + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + symphony.superfluid.QueryTotalDelegationByValidatorForDenomResponse: + type: object + properties: + assets: + type: array + items: + type: object + properties: + val_addr: + type: string + amount_sfsd: + type: string + osmo_equivalent: + type: string + symphony.superfluid.QueryUnpoolWhitelistResponse: + type: object + properties: + pool_ids: + type: array + items: + type: string + format: uint64 + symphony.superfluid.SuperfluidAsset: + type: object + properties: + denom: + type: string + asset_type: + title: >- + AssetType indicates whether the superfluid asset is a native token or + an lp + + share + type: string + enum: + - SuperfluidAssetTypeNative + - SuperfluidAssetTypeLPShare + - SuperfluidAssetTypeConcentratedShare + default: SuperfluidAssetTypeNative + title: SuperfluidAsset stores the pair of superfluid asset type and denom pair + symphony.superfluid.SuperfluidAssetType: + type: string + enum: + - SuperfluidAssetTypeNative + - SuperfluidAssetTypeLPShare + - SuperfluidAssetTypeConcentratedShare + default: SuperfluidAssetTypeNative + title: |- + SuperfluidAssetType indicates whether the superfluid asset is + a native token, lp share of a pool, or concentrated share of a pool + symphony.superfluid.SuperfluidDelegationAmountResponse: + type: object + properties: + amount: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + symphony.superfluid.SuperfluidDelegationRecord: + type: object + properties: + delegator_address: + type: string + validator_address: + type: string + delegation_amount: + type: object + properties: + denom: + type: string + amount: + type: string + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + equivalent_staked_amount: + type: object + properties: + denom: + type: string + amount: + type: string + description: |- + Coin defines a token with a denomination and an amount. + + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + description: |- + SuperfluidDelegationRecord is a struct used to indicate superfluid + delegations of an account in the state machine in a user friendly form. + symphony.superfluid.SuperfluidDelegationsByDelegatorResponse: + type: object + properties: + superfluid_delegation_records: + type: array + items: + type: object + properties: + delegator_address: + type: string + validator_address: + type: string + delegation_amount: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + equivalent_staked_amount: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + - original denom and synthetic suffix. At the time of synthetic lockup - creation + NOTE: The amount field is an Int which implements the custom + method - and deletion, accumulation store is also being updated and on querier - side, + signatures required by gogoproto. + description: >- + SuperfluidDelegationRecord is a struct used to indicate superfluid - they can query as freely as native lockup. - delegation_amount: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. + delegations of an account in the state machine in a user friendly + form. + total_delegated_coins: + type: array + items: + type: object + properties: + denom: + type: string + amount: + type: string + description: |- + Coin defines a token with a denomination and an amount. - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - equivalent_staked_amount: + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + total_equivalent_staked_amount: type: object properties: denom: @@ -49817,34 +51646,113 @@ definitions: NOTE: The amount field is an Int which implements the custom method signatures required by gogoproto. - symphony.superfluid.ConnectedIntermediaryAccountResponse: + symphony.superfluid.SuperfluidDelegationsByValidatorDenomResponse: type: object properties: - account: - type: object - properties: - denom: - type: string - val_addr: - type: string - gauge_id: - type: string - format: uint64 - address: - type: string - symphony.superfluid.Delegations: + superfluid_delegation_records: + type: array + items: + type: object + properties: + delegator_address: + type: string + validator_address: + type: string + delegation_amount: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + equivalent_staked_amount: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + description: >- + SuperfluidDelegationRecord is a struct used to indicate superfluid + + delegations of an account in the state machine in a user friendly + form. + symphony.superfluid.SuperfluidIntermediaryAccountInfo: type: object properties: + denom: + type: string val_addr: type: string - amount_sfsd: + gauge_id: type: string - osmo_equivalent: + format: uint64 + address: type: string - symphony.superfluid.EstimateSuperfluidDelegatedAmountByValidatorDenomResponse: + symphony.superfluid.SuperfluidUndelegationsByDelegatorResponse: type: object properties: - total_delegated_coins: + superfluid_delegation_records: + type: array + items: + type: object + properties: + delegator_address: + type: string + validator_address: + type: string + delegation_amount: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + equivalent_staked_amount: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + description: >- + SuperfluidDelegationRecord is a struct used to indicate superfluid + + delegations of an account in the state machine in a user friendly + form. + total_undelegated_coins: type: array items: type: object @@ -49858,99 +51766,195 @@ definitions: NOTE: The amount field is an Int which implements the custom method signatures required by gogoproto. - symphony.superfluid.OsmoEquivalentMultiplierRecord: - type: object - properties: - epoch_number: - type: string - format: int64 - denom: - type: string - title: superfluid asset denom, can be LP token or native token - multiplier: - type: string - description: >- - The Osmo-Equivalent-Multiplier Record for epoch N refers to the osmo worth - we - - treat an LP share as having, for all of epoch N. Eventually this is - intended + synthetic_locks: + type: array + items: + type: object + properties: + underlying_lock_id: + type: string + format: uint64 + description: >- + Underlying Lock ID is the underlying native lock's id for this + synthetic - to be set as the Time-weighted-average-osmo-backing for the entire - duration + lockup. A synthetic lock MUST have an underlying lock. + synth_denom: + type: string + description: |- + SynthDenom is the synthetic denom that is a combination of + gamm share + bonding status + validator address. + end_time: + type: string + format: date-time + title: >- + used for unbonding synthetic lockups, for active synthetic + lockups, this - of epoch N-1. (Thereby locking what's in use for epoch N as based on the + value is set to uninitialized value + duration: + type: string + description: |- + Duration is the duration for a synthetic lock to mature + at the point of unbonding has started. + description: >- + SyntheticLock is creating virtual lockup where new denom is + combination of - prior epochs rewards) However for now, this is not the TWAP but instead - the + original denom and synthetic suffix. At the time of synthetic lockup + creation - spot price at the boundary. For different types of assets in the future, - it + and deletion, accumulation store is also being updated and on + querier side, - could change. - symphony.superfluid.Params: + they can query as freely as native lockup. + symphony.superfluid.TotalSuperfluidDelegationsResponse: type: object properties: - minimum_risk_factor: + total_delegations: type: string - description: >- - minimum_risk_factor is to be cut on OSMO equivalent value of lp tokens - for + symphony.superfluid.UserConcentratedSuperfluidPositionsDelegatedResponse: + type: object + properties: + cl_pool_user_position_records: + type: array + items: + type: object + properties: + validator_address: + type: string + position_id: + type: string + format: uint64 + lock_id: + type: string + format: uint64 + synthetic_lock: + type: object + properties: + underlying_lock_id: + type: string + format: uint64 + description: >- + Underlying Lock ID is the underlying native lock's id for + this synthetic - superfluid staking, default: 5%. The minimum risk factor works + lockup. A synthetic lock MUST have an underlying lock. + synth_denom: + type: string + description: |- + SynthDenom is the synthetic denom that is a combination of + gamm share + bonding status + validator address. + end_time: + type: string + format: date-time + title: >- + used for unbonding synthetic lockups, for active synthetic + lockups, this - to counter-balance the staked amount on chain's exposure to various - asset + value is set to uninitialized value + duration: + type: string + description: |- + Duration is the duration for a synthetic lock to mature + at the point of unbonding has started. + description: >- + SyntheticLock is creating virtual lockup where new denom is + combination of - volatilities, and have base staking be 'resistant' to volatility. - title: Params holds parameters for the superfluid module - symphony.superfluid.QueryParamsResponse: - type: object - properties: - params: - description: params defines the parameters of the module. - type: object - properties: - minimum_risk_factor: - type: string - description: >- - minimum_risk_factor is to be cut on OSMO equivalent value of lp - tokens for + original denom and synthetic suffix. At the time of synthetic + lockup creation - superfluid staking, default: 5%. The minimum risk factor works + and deletion, accumulation store is also being updated and on + querier side, - to counter-balance the staked amount on chain's exposure to - various asset + they can query as freely as native lockup. + delegation_amount: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. - volatilities, and have base staking be 'resistant' to volatility. - title: Params holds parameters for the superfluid module - symphony.superfluid.QueryRestSupplyResponse: - type: object - properties: - amount: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - symphony.superfluid.QueryTotalDelegationByDelegatorResponse: + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + equivalent_staked_amount: + type: object + properties: + denom: + type: string + amount: + type: string + description: >- + Coin defines a token with a denomination and an amount. + + + NOTE: The amount field is an Int which implements the custom + method + + signatures required by gogoproto. + symphony.superfluid.UserConcentratedSuperfluidPositionsUndelegatingResponse: type: object properties: - superfluid_delegation_records: + cl_pool_user_position_records: type: array items: type: object properties: - delegator_address: - type: string validator_address: type: string + position_id: + type: string + format: uint64 + lock_id: + type: string + format: uint64 + synthetic_lock: + type: object + properties: + underlying_lock_id: + type: string + format: uint64 + description: >- + Underlying Lock ID is the underlying native lock's id for + this synthetic + + lockup. A synthetic lock MUST have an underlying lock. + synth_denom: + type: string + description: |- + SynthDenom is the synthetic denom that is a combination of + gamm share + bonding status + validator address. + end_time: + type: string + format: date-time + title: >- + used for unbonding synthetic lockups, for active synthetic + lockups, this + + value is set to uninitialized value + duration: + type: string + description: |- + Duration is the duration for a synthetic lock to mature + at the point of unbonding has started. + description: >- + SyntheticLock is creating virtual lockup where new denom is + combination of + + original denom and synthetic suffix. At the time of synthetic + lockup creation + + and deletion, accumulation store is also being updated and on + querier side, + + they can query as freely as native lockup. delegation_amount: type: object properties: @@ -49981,37 +51985,113 @@ definitions: method signatures required by gogoproto. - description: >- - SuperfluidDelegationRecord is a struct used to indicate superfluid - - delegations of an account in the state machine in a user friendly - form. - delegation_response: + symphony.tokenfactory.v1beta1.DenomAuthorityMetadata: + type: object + properties: + admin: + type: string + title: Can be empty for no admin, or a valid osmosis address + description: |- + DenomAuthorityMetadata specifies metadata for addresses that have specific + capabilities over a token factory denom. Right now there is only one Admin + permission, but is planned to be extended to the future. + symphony.tokenfactory.v1beta1.Params: + type: object + properties: + denom_creation_fee: type: array items: type: object properties: - delegation: - type: object - properties: - delegator_address: - type: string - description: delegator_address is the encoded address of the delegator. - validator_address: - type: string - description: validator_address is the encoded address of the validator. - shares: - type: string - description: shares define the delegation shares received. - description: >- - Delegation represents the bond with tokens held by an account. - It is + denom: + type: string + amount: + type: string + description: |- + Coin defines a token with a denomination and an amount. - owned by one delegator, and is associated with the voting power - of one + NOTE: The amount field is an Int which implements the custom method + signatures required by gogoproto. + description: >- + DenomCreationFee defines the fee to be charged on the creation of a + new - validator. - balance: + denom. The fee is drawn from the MsgCreateDenom's sender account, and + + transferred to the community pool. + denom_creation_gas_consume: + type: string + format: uint64 + description: |- + DenomCreationGasConsume defines the gas cost for creating a new denom. + This is intended as a spam deterrence mechanism. + + See: https://github.com/CosmWasm/token-factory/issues/11 + description: Params defines the parameters for the tokenfactory module. + symphony.tokenfactory.v1beta1.QueryAllBeforeSendHooksAddressesResponse: + type: object + properties: + denoms: + type: array + items: + type: string + before_send_hook_addresses: + type: array + items: + type: string + description: >- + QueryAllBeforeSendHooksAddressesResponse defines the response structure + for + + the AllBeforeSendHooksAddresses gRPC query. + symphony.tokenfactory.v1beta1.QueryBeforeSendHookAddressResponse: + type: object + properties: + cosmwasm_address: + type: string + description: |- + QueryBeforeSendHookAddressResponse defines the response structure for the + DenomBeforeSendHook gRPC query. + symphony.tokenfactory.v1beta1.QueryDenomAuthorityMetadataResponse: + type: object + properties: + authority_metadata: + type: object + properties: + admin: + type: string + title: Can be empty for no admin, or a valid osmosis address + description: >- + DenomAuthorityMetadata specifies metadata for addresses that have + specific + + capabilities over a token factory denom. Right now there is only one + Admin + + permission, but is planned to be extended to the future. + description: |- + QueryDenomAuthorityMetadataResponse defines the response structure for the + DenomAuthorityMetadata gRPC query. + symphony.tokenfactory.v1beta1.QueryDenomsFromCreatorResponse: + type: object + properties: + denoms: + type: array + items: + type: string + description: |- + QueryDenomsFromCreatorRequest defines the response structure for the + DenomsFromCreator gRPC query. + symphony.tokenfactory.v1beta1.QueryParamsResponse: + type: object + properties: + params: + description: params defines the parameters of the module. + type: object + properties: + denom_creation_fee: + type: array + items: type: object properties: denom: @@ -50026,27 +52106,144 @@ definitions: method signatures required by gogoproto. - description: >- - DelegationResponse is equivalent to Delegation except that it - contains a + description: >- + DenomCreationFee defines the fee to be charged on the creation of + a new - balance in addition to shares which is more suitable for client - responses. - total_delegated_coins: + denom. The fee is drawn from the MsgCreateDenom's sender account, + and + + transferred to the community pool. + denom_creation_gas_consume: + type: string + format: uint64 + description: >- + DenomCreationGasConsume defines the gas cost for creating a new + denom. + + This is intended as a spam deterrence mechanism. + + + See: https://github.com/CosmWasm/token-factory/issues/11 + description: QueryParamsResponse is the response type for the Query/Params RPC method. + symphony.txfees.v1beta1.QueryDenomSpotPriceResponse: + type: object + properties: + spot_price: + type: string + title: >- + QueryDenomSpotPriceRequest defines grpc response structure for querying + spot + + price for the specified tx fee denom + symphony.txfees.v1beta1.QueryEipBaseFeeResponse: + type: object + properties: + base_fee: + type: string + symphony.txfees.v1beta1.QueryFeeTokensResponse: + type: object + properties: + fee_tokens: + type: array + items: + type: string + cosmos.base.v1beta1.DecCoin: + type: object + properties: + denom: + type: string + amount: + type: string + description: |- + DecCoin defines a token with a denomination and a decimal amount. + + NOTE: The amount field is an Dec which implements the custom method + signatures required by gogoproto. + symphony.stablestaking.v1beta1.Params: + type: object + properties: + reward_rate: + type: string + unbonding_duration: + type: string + supported_tokens: + type: array + items: + type: string + reward_epoch_identifier: + type: string + unbonding_epoch_identifier: + type: string + max_staking_amount: + type: string + format: byte + symphony.stablestaking.v1beta1.QueryParamsResponse: + type: object + properties: + params: + type: object + properties: + reward_rate: + type: string + unbonding_duration: + type: string + supported_tokens: + type: array + items: + type: string + reward_epoch_identifier: + type: string + unbonding_epoch_identifier: + type: string + max_staking_amount: + type: string + format: byte + symphony.stablestaking.v1beta1.QueryPoolResponse: + type: object + properties: + pool: + type: object + properties: + denom: + type: string + total_staked: + type: string + format: byte + total_shares: + type: string + format: byte + symphony.stablestaking.v1beta1.QueryPoolsResponse: + type: object + properties: + pools: type: array items: type: object properties: denom: type: string - amount: + total_staked: type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - total_equivalent_staked_amount: + format: byte + total_shares: + type: string + format: byte + symphony.stablestaking.v1beta1.QueryRewardPerPoolResponse: + type: object + properties: + pool: + type: object + properties: + denom: + type: string + total_staked: + type: string + format: byte + total_shares: + type: string + format: byte + reward: type: object properties: denom: @@ -50058,60 +52255,46 @@ definitions: NOTE: The amount field is an Int which implements the custom method signatures required by gogoproto. - symphony.superfluid.QueryTotalDelegationByValidatorForDenomResponse: + symphony.stablestaking.v1beta1.QueryTotalStakersPerPoolResponse: type: object properties: - assets: + stakers: + type: object + properties: + denom: + type: string + count: + type: string + symphony.stablestaking.v1beta1.QueryTotalStakersResponse: + type: object + properties: + stakers: type: array items: type: object properties: - val_addr: - type: string - amount_sfsd: + denom: type: string - osmo_equivalent: + count: type: string - symphony.superfluid.QueryUnpoolWhitelistResponse: - type: object - properties: - pool_ids: - type: array - items: - type: string - format: uint64 - symphony.superfluid.SuperfluidAsset: + symphony.stablestaking.v1beta1.QueryUserStakeResponse: type: object properties: - denom: - type: string - asset_type: - title: >- - AssetType indicates whether the superfluid asset is a native token or - an lp - - share - type: string - enum: - - SuperfluidAssetTypeNative - - SuperfluidAssetTypeLPShare - - SuperfluidAssetTypeConcentratedShare - default: SuperfluidAssetTypeNative - title: SuperfluidAsset stores the pair of superfluid asset type and denom pair - symphony.superfluid.SuperfluidAssetType: - type: string - enum: - - SuperfluidAssetTypeNative - - SuperfluidAssetTypeLPShare - - SuperfluidAssetTypeConcentratedShare - default: SuperfluidAssetTypeNative - title: |- - SuperfluidAssetType indicates whether the superfluid asset is - a native token, lp share of a pool, or concentrated share of a pool - symphony.superfluid.SuperfluidDelegationAmountResponse: + stakes: + type: object + properties: + address: + type: string + shares: + type: string + format: byte + epoch: + type: string + format: int64 + symphony.stablestaking.v1beta1.QueryUserTotalStakeResponse: type: object properties: - amount: + stakes: type: array items: type: object @@ -50121,18 +52304,92 @@ definitions: amount: type: string description: |- - Coin defines a token with a denomination and an amount. + DecCoin defines a token with a denomination and a decimal amount. - NOTE: The amount field is an Int which implements the custom method + NOTE: The amount field is an Dec which implements the custom method signatures required by gogoproto. - symphony.superfluid.SuperfluidDelegationRecord: + symphony.stablestaking.v1beta1.QueryUserTotalUnbondingResponse: type: object properties: - delegator_address: + info: + type: array + items: + type: object + properties: + address: + type: string + amount: + type: string + format: byte + denom: + type: string + unbond_epoch: + type: string + format: int64 + symphony.stablestaking.v1beta1.QueryUserUnbondingResponse: + type: object + properties: + info: + type: object + properties: + address: + type: string + amount: + type: string + format: byte + denom: + type: string + unbond_epoch: + type: string + format: int64 + symphony.stablestaking.v1beta1.StakingPool: + type: object + properties: + denom: type: string - validator_address: + total_staked: type: string - delegation_amount: + format: byte + total_shares: + type: string + format: byte + symphony.stablestaking.v1beta1.TotalStakers: + type: object + properties: + denom: + type: string + count: + type: string + symphony.stablestaking.v1beta1.UnbondingInfo: + type: object + properties: + address: + type: string + amount: + type: string + format: byte + denom: + type: string + unbond_epoch: + type: string + format: int64 + symphony.stablestaking.v1beta1.UserStake: + type: object + properties: + address: + type: string + shares: + type: string + format: byte + epoch: + type: string + format: int64 + symphony.stablestaking.v1beta1.MsgStakeTokens: + type: object + properties: + staker: + type: string + amount: type: object properties: denom: @@ -50144,7 +52401,12 @@ definitions: NOTE: The amount field is an Int which implements the custom method signatures required by gogoproto. - equivalent_staked_amount: + symphony.stablestaking.v1beta1.MsgStakeTokensResponse: + type: object + properties: + staker: + type: string + amount: type: object properties: denom: @@ -50156,71 +52418,18 @@ definitions: NOTE: The amount field is an Int which implements the custom method signatures required by gogoproto. - description: |- - SuperfluidDelegationRecord is a struct used to indicate superfluid - delegations of an account in the state machine in a user friendly form. - symphony.superfluid.SuperfluidDelegationsByDelegatorResponse: + total_staked: + type: string + format: byte + total_shares: + type: string + format: byte + symphony.stablestaking.v1beta1.MsgUnstakeTokens: type: object properties: - superfluid_delegation_records: - type: array - items: - type: object - properties: - delegator_address: - type: string - validator_address: - type: string - delegation_amount: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - equivalent_staked_amount: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - description: >- - SuperfluidDelegationRecord is a struct used to indicate superfluid - - delegations of an account in the state machine in a user friendly - form. - total_delegated_coins: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - total_equivalent_staked_amount: + staker: + type: string + amount: type: object properties: denom: @@ -50232,790 +52441,1391 @@ definitions: NOTE: The amount field is an Int which implements the custom method signatures required by gogoproto. - symphony.superfluid.SuperfluidDelegationsByValidatorDenomResponse: + symphony.stablestaking.v1beta1.MsgUnstakeTokensResponse: type: object properties: - superfluid_delegation_records: + staker: + type: string + amount: + type: object + properties: + denom: + type: string + amount: + type: string + description: |- + DecCoin defines a token with a denomination and a decimal amount. + + NOTE: The amount field is an Dec which implements the custom method + signatures required by gogoproto. + total_staked: + type: string + format: byte + total_shares: + type: string + format: byte + symphony.stakeibc.AddressUnbonding: + type: object + properties: + address: + type: string + receiver: + type: string + unbonding_estimated_time: + type: string + amount: + type: string + denom: + type: string + claim_is_pending: + type: boolean + epoch_number: + type: string + format: uint64 + symphony.stakeibc.CommunityPoolRebate: + type: object + properties: + rebate_rate: + type: string + title: Rebate percentage as a decimal (e.g. 0.2 for 20%) + liquid_staked_st_token_amount: + type: string + title: Number of stTokens received from the community pool liquid stake + title: |- + CommunityPoolRebate stores the size of the community pool liquid stake + (denominated in stTokens) and the rebate rate as a decimal + symphony.stakeibc.EpochTracker: + type: object + properties: + epoch_identifier: + type: string + epoch_number: + type: string + format: uint64 + next_epoch_start_time: + type: string + format: uint64 + duration: + type: string + format: uint64 + symphony.stakeibc.HostZone: + type: object + properties: + chain_id: + type: string + title: Chain ID of the host zone + bech32prefix: + type: string + title: Bech32 prefix of host zone's address + connection_id: + type: string + title: ConnectionID from Stride to the host zone (ID is on the stride side) + transfer_channel_id: + type: string + title: >- + Transfer Channel ID from Stride to the host zone (ID is on the stride + side) + ibc_denom: + type: string + title: ibc denom of the host zone's native token on stride + host_denom: + type: string + title: native denom on host zone + unbonding_period: + type: string + format: uint64 + title: The unbonding period in days (e.g. 21) + validators: type: array items: type: object properties: - delegator_address: + name: type: string - validator_address: + address: type: string - delegation_amount: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. + weight: + type: string + format: uint64 + delegation: + type: string + slash_query_progress_tracker: + type: string + slash_query_checkpoint: + type: string + shares_to_tokens_rate: + type: string + delegation_changes_in_progress: + type: string + format: int64 + slash_query_in_progress: + type: boolean + title: List of validators that are delegated to + deposit_address: + type: string + title: Address that custodies native tokens during a liquid stake + withdrawal_ica_address: + type: string + title: ICA Address on the host zone responsible for collecting rewards + fee_ica_address: + type: string + title: ICA Address on the host zone responsible for commission + delegation_ica_address: + type: string + title: ICA Address on the host zone responsible for staking and unstaking + redemption_ica_address: + type: string + title: >- + ICA Address that receives unstaked tokens after they've finished + unbonding + community_pool_deposit_ica_address: + type: string + title: >- + ICA Address that receives tokens from a community pool to liquid stake + or + redeem In the case of a liquid stake, the community pool deposits + native - NOTE: The amount field is an Int which implements the custom - method + tokens In the case of a redemption, the community pool deposits + stTokens + community_pool_return_ica_address: + type: string + title: >- + ICA Address that distributes tokens back to the community pool during + a - signatures required by gogoproto. - equivalent_staked_amount: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. + community pool liquid stake or redeem In the case of a liquid stake, + the + + return address sends back stTokens In the case of a redemption, the + return + + address sends back native tokens + community_pool_stake_holding_address: + type: string + title: >- + Module account on Stride that receives native tokens from the deposit + ICA + and liquid stakes them + community_pool_redeem_holding_address: + type: string + title: >- + Module account on Stride that receives stTokens from the deposit ICA + and - NOTE: The amount field is an Int which implements the custom - method + redeems them + community_pool_treasury_address: + type: string + title: >- + Optional community pool address to send tokens to after a community + pool - signatures required by gogoproto. - description: >- - SuperfluidDelegationRecord is a struct used to indicate superfluid + liquid stake or redemption If this address is empty, the tokens are + sent to - delegations of an account in the state machine in a user friendly - form. - symphony.superfluid.SuperfluidIntermediaryAccountInfo: + the main community pool + total_delegations: + type: string + title: The total delegated balance on the host zone + last_redemption_rate: + type: string + title: The redemption rate from the previous epoch + redemption_rate: + type: string + title: The current redemption rate + min_redemption_rate: + type: string + title: |- + The min outer redemption rate bound - controlled only be governance + The min inner bound cannot exceed this bound + max_redemption_rate: + type: string + title: |- + The max outer redemption rate bound - controlled only be governance + The max inner bound cannot exceed this bound + min_inner_redemption_rate: + type: string + title: |- + The min minner redemption rate bound - controlled by the admin + If the redemption rate exceeds this bound, the host zone is halted + max_inner_redemption_rate: + type: string + title: |- + The max minner redemption rate bound - controlled by the admin + If the redemption rate exceeds this bound, the host zone is halted + max_messages_per_ica_tx: + type: string + format: uint64 + title: |- + The max number of messages that can be sent in a delegation + or undelegation ICA tx + redemptions_enabled: + type: boolean + title: Indicates whether redemptions are allowed through this module + community_pool_rebate: + title: |- + An optional fee rebate + If there is no rebate for the host zone, this will be nil + type: object + properties: + rebate_rate: + type: string + title: Rebate percentage as a decimal (e.g. 0.2 for 20%) + liquid_staked_st_token_amount: + type: string + title: Number of stTokens received from the community pool liquid stake + lsm_liquid_stake_enabled: + type: boolean + title: A boolean indicating whether the chain has LSM enabled + halted: + type: boolean + title: A boolean indicating whether the chain is currently halted + title: Core data structure to track liquid staking zones + symphony.stakeibc.ICAAccount: type: object properties: - denom: + chain_id: type: string - val_addr: + type: type: string - gauge_id: + enum: + - DELEGATION + - FEE + - WITHDRAWAL + - REDEMPTION + - COMMUNITY_POOL_DEPOSIT + - COMMUNITY_POOL_RETURN + - CONVERTER_UNWIND + - CONVERTER_TRADE + default: DELEGATION + connection_id: type: string - format: uint64 address: type: string - symphony.superfluid.SuperfluidUndelegationsByDelegatorResponse: + symphony.stakeibc.ICAAccountType: + type: string + enum: + - DELEGATION + - FEE + - WITHDRAWAL + - REDEMPTION + - COMMUNITY_POOL_DEPOSIT + - COMMUNITY_POOL_RETURN + - CONVERTER_UNWIND + - CONVERTER_TRADE + default: DELEGATION + symphony.stakeibc.Params: type: object properties: - superfluid_delegation_records: + rewards_interval: + type: string + format: uint64 + title: define epoch lengths, in stride_epochs + delegate_interval: + type: string + format: uint64 + deposit_interval: + type: string + format: uint64 + redemption_rate_interval: + type: string + format: uint64 + symphony_commission: + type: string + format: uint64 + reinvest_interval: + type: string + format: uint64 + ica_timeout_nanos: + type: string + format: uint64 + buffer_size: + type: string + format: uint64 + ibc_timeout_blocks: + type: string + format: uint64 + fee_transfer_timeout_nanos: + type: string + format: uint64 + max_stake_ica_calls_per_epoch: + type: string + format: uint64 + default_min_redemption_rate_threshold: + type: string + format: uint64 + default_max_redemption_rate_threshold: + type: string + format: uint64 + ibc_transfer_timeout_nanos: + type: string + format: uint64 + validator_slash_query_threshold: + type: string + format: uint64 + validator_weight_cap: + type: string + format: uint64 + title: |- + Params defines the parameters for the module. + next id: 20 + symphony.stakeibc.QueryAddressUnbondingsResponse: + type: object + properties: + address_unbondings: type: array items: type: object properties: - delegator_address: + address: type: string - validator_address: + receiver: type: string - delegation_amount: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - equivalent_staked_amount: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. - - - NOTE: The amount field is an Int which implements the custom - method - - signatures required by gogoproto. - description: >- - SuperfluidDelegationRecord is a struct used to indicate superfluid - - delegations of an account in the state machine in a user friendly - form. - total_undelegated_coins: - type: array - items: - type: object - properties: - denom: + unbonding_estimated_time: type: string amount: type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - synthetic_locks: + denom: + type: string + claim_is_pending: + type: boolean + epoch_number: + type: string + format: uint64 + symphony.stakeibc.QueryAllEpochTrackerResponse: + type: object + properties: + epoch_tracker: type: array items: type: object properties: - underlying_lock_id: + epoch_identifier: type: string - format: uint64 - description: >- - Underlying Lock ID is the underlying native lock's id for this - synthetic - - lockup. A synthetic lock MUST have an underlying lock. - synth_denom: + epoch_number: type: string - description: |- - SynthDenom is the synthetic denom that is a combination of - gamm share + bonding status + validator address. - end_time: + format: uint64 + next_epoch_start_time: type: string - format: date-time - title: >- - used for unbonding synthetic lockups, for active synthetic - lockups, this - - value is set to uninitialized value + format: uint64 duration: type: string - description: |- - Duration is the duration for a synthetic lock to mature - at the point of unbonding has started. - description: >- - SyntheticLock is creating virtual lockup where new denom is - combination of - - original denom and synthetic suffix. At the time of synthetic lockup - creation - - and deletion, accumulation store is also being updated and on - querier side, - - they can query as freely as native lockup. - symphony.superfluid.TotalSuperfluidDelegationsResponse: - type: object - properties: - total_delegations: - type: string - symphony.superfluid.UserConcentratedSuperfluidPositionsDelegatedResponse: + format: uint64 + symphony.stakeibc.QueryAllHostZoneResponse: type: object properties: - cl_pool_user_position_records: + host_zone: type: array items: type: object properties: - validator_address: + chain_id: type: string - position_id: + title: Chain ID of the host zone + bech32prefix: type: string - format: uint64 - lock_id: + title: Bech32 prefix of host zone's address + connection_id: + type: string + title: >- + ConnectionID from Stride to the host zone (ID is on the stride + side) + transfer_channel_id: + type: string + title: >- + Transfer Channel ID from Stride to the host zone (ID is on the + stride side) + ibc_denom: + type: string + title: ibc denom of the host zone's native token on stride + host_denom: + type: string + title: native denom on host zone + unbonding_period: type: string format: uint64 - synthetic_lock: - type: object - properties: - underlying_lock_id: - type: string - format: uint64 - description: >- - Underlying Lock ID is the underlying native lock's id for - this synthetic + title: The unbonding period in days (e.g. 21) + validators: + type: array + items: + type: object + properties: + name: + type: string + address: + type: string + weight: + type: string + format: uint64 + delegation: + type: string + slash_query_progress_tracker: + type: string + slash_query_checkpoint: + type: string + shares_to_tokens_rate: + type: string + delegation_changes_in_progress: + type: string + format: int64 + slash_query_in_progress: + type: boolean + title: List of validators that are delegated to + deposit_address: + type: string + title: Address that custodies native tokens during a liquid stake + withdrawal_ica_address: + type: string + title: ICA Address on the host zone responsible for collecting rewards + fee_ica_address: + type: string + title: ICA Address on the host zone responsible for commission + delegation_ica_address: + type: string + title: >- + ICA Address on the host zone responsible for staking and + unstaking + redemption_ica_address: + type: string + title: >- + ICA Address that receives unstaked tokens after they've finished + unbonding + community_pool_deposit_ica_address: + type: string + title: >- + ICA Address that receives tokens from a community pool to liquid + stake or - lockup. A synthetic lock MUST have an underlying lock. - synth_denom: - type: string - description: |- - SynthDenom is the synthetic denom that is a combination of - gamm share + bonding status + validator address. - end_time: - type: string - format: date-time - title: >- - used for unbonding synthetic lockups, for active synthetic - lockups, this + redeem In the case of a liquid stake, the community pool + deposits native - value is set to uninitialized value - duration: - type: string - description: |- - Duration is the duration for a synthetic lock to mature - at the point of unbonding has started. - description: >- - SyntheticLock is creating virtual lockup where new denom is - combination of + tokens In the case of a redemption, the community pool deposits + stTokens + community_pool_return_ica_address: + type: string + title: >- + ICA Address that distributes tokens back to the community pool + during a - original denom and synthetic suffix. At the time of synthetic - lockup creation + community pool liquid stake or redeem In the case of a liquid + stake, the - and deletion, accumulation store is also being updated and on - querier side, + return address sends back stTokens In the case of a redemption, + the return - they can query as freely as native lockup. - delegation_amount: - type: object - properties: - denom: - type: string - amount: - type: string - description: >- - Coin defines a token with a denomination and an amount. + address sends back native tokens + community_pool_stake_holding_address: + type: string + title: >- + Module account on Stride that receives native tokens from the + deposit ICA + and liquid stakes them + community_pool_redeem_holding_address: + type: string + title: >- + Module account on Stride that receives stTokens from the deposit + ICA and - NOTE: The amount field is an Int which implements the custom - method + redeems them + community_pool_treasury_address: + type: string + title: >- + Optional community pool address to send tokens to after a + community pool - signatures required by gogoproto. - equivalent_staked_amount: + liquid stake or redemption If this address is empty, the tokens + are sent to + + the main community pool + total_delegations: + type: string + title: The total delegated balance on the host zone + last_redemption_rate: + type: string + title: The redemption rate from the previous epoch + redemption_rate: + type: string + title: The current redemption rate + min_redemption_rate: + type: string + title: >- + The min outer redemption rate bound - controlled only be + governance + + The min inner bound cannot exceed this bound + max_redemption_rate: + type: string + title: >- + The max outer redemption rate bound - controlled only be + governance + + The max inner bound cannot exceed this bound + min_inner_redemption_rate: + type: string + title: >- + The min minner redemption rate bound - controlled by the admin + + If the redemption rate exceeds this bound, the host zone is + halted + max_inner_redemption_rate: + type: string + title: >- + The max minner redemption rate bound - controlled by the admin + + If the redemption rate exceeds this bound, the host zone is + halted + max_messages_per_ica_tx: + type: string + format: uint64 + title: |- + The max number of messages that can be sent in a delegation + or undelegation ICA tx + redemptions_enabled: + type: boolean + title: Indicates whether redemptions are allowed through this module + community_pool_rebate: + title: |- + An optional fee rebate + If there is no rebate for the host zone, this will be nil type: object properties: - denom: + rebate_rate: type: string - amount: + title: Rebate percentage as a decimal (e.g. 0.2 for 20%) + liquid_staked_st_token_amount: type: string - description: >- - Coin defines a token with a denomination and an amount. - + title: >- + Number of stTokens received from the community pool liquid + stake + lsm_liquid_stake_enabled: + type: boolean + title: A boolean indicating whether the chain has LSM enabled + halted: + type: boolean + title: A boolean indicating whether the chain is currently halted + title: Core data structure to track liquid staking zones + pagination: + type: object + properties: + next_key: + type: string + format: byte + description: |- + next_key is the key to be passed to PageRequest.key to + query the next page most efficiently. It will be empty if + there are no more results. + total: + type: string + format: uint64 + title: >- + total is total number of results available if + PageRequest.count_total - NOTE: The amount field is an Int which implements the custom - method + was set, its value is undefined otherwise + description: |- + PageResponse is to be embedded in gRPC response messages where the + corresponding request message has used PageRequest. - signatures required by gogoproto. - symphony.superfluid.UserConcentratedSuperfluidPositionsUndelegatingResponse: + message SomeResponse { + repeated Bar results = 1; + PageResponse page = 2; + } + symphony.stakeibc.QueryAllTradeRoutesResponse: type: object properties: - cl_pool_user_position_records: + trade_routes: type: array items: type: object properties: - validator_address: + reward_denom_on_host_zone: type: string - position_id: + title: ibc denom for the reward on the host zone + reward_denom_on_reward_zone: type: string - format: uint64 - lock_id: + title: should be the native denom for the reward chain + reward_denom_on_trade_zone: type: string - format: uint64 - synthetic_lock: + title: ibc denom of the reward on the trade chain, input to the swap + host_denom_on_trade_zone: + type: string + title: ibc of the host denom on the trade chain, output from the swap + host_denom_on_host_zone: + type: string + title: should be the same as the native host denom on the host chain + host_account: + title: |- + ICAAccount on the host zone with the reward tokens + This is the same as the host zone withdrawal ICA account type: object properties: - underlying_lock_id: + chain_id: type: string - format: uint64 - description: >- - Underlying Lock ID is the underlying native lock's id for - this synthetic - - lockup. A synthetic lock MUST have an underlying lock. - synth_denom: + type: type: string - description: |- - SynthDenom is the synthetic denom that is a combination of - gamm share + bonding status + validator address. - end_time: + enum: + - DELEGATION + - FEE + - WITHDRAWAL + - REDEMPTION + - COMMUNITY_POOL_DEPOSIT + - COMMUNITY_POOL_RETURN + - CONVERTER_UNWIND + - CONVERTER_TRADE + default: DELEGATION + connection_id: type: string - format: date-time - title: >- - used for unbonding synthetic lockups, for active synthetic - lockups, this - - value is set to uninitialized value - duration: + address: type: string - description: |- - Duration is the duration for a synthetic lock to mature - at the point of unbonding has started. - description: >- - SyntheticLock is creating virtual lockup where new denom is - combination of - - original denom and synthetic suffix. At the time of synthetic - lockup creation - - and deletion, accumulation store is also being updated and on - querier side, - - they can query as freely as native lockup. - delegation_amount: + reward_account: + title: |- + ICAAccount on the reward zone that is acts as the intermediate + receiver of the transfer from host zone to trade zone type: object properties: - denom: + chain_id: type: string - amount: + type: type: string - description: >- - Coin defines a token with a denomination and an amount. + enum: + - DELEGATION + - FEE + - WITHDRAWAL + - REDEMPTION + - COMMUNITY_POOL_DEPOSIT + - COMMUNITY_POOL_RETURN + - CONVERTER_UNWIND + - CONVERTER_TRADE + default: DELEGATION + connection_id: + type: string + address: + type: string + trade_account: + title: |- + ICAAccount responsible for executing the swap of reward + tokens for host tokens + type: object + properties: + chain_id: + type: string + type: + type: string + enum: + - DELEGATION + - FEE + - WITHDRAWAL + - REDEMPTION + - COMMUNITY_POOL_DEPOSIT + - COMMUNITY_POOL_RETURN + - CONVERTER_UNWIND + - CONVERTER_TRADE + default: DELEGATION + connection_id: + type: string + address: + type: string + host_to_reward_channel_id: + type: string + title: >- + Channel responsible for the transfer of reward tokens from the + host + zone to the reward zone. This is the channel ID on the host zone + side + reward_to_trade_channel_id: + type: string + title: >- + Channel responsible for the transfer of reward tokens from the + reward - NOTE: The amount field is an Int which implements the custom - method + zone to the trade zone. This is the channel ID on the reward + zone side + trade_to_host_channel_id: + type: string + title: >- + Channel responsible for the transfer of host tokens from the + trade - signatures required by gogoproto. - equivalent_staked_amount: + zone, back to the host zone. This is the channel ID on the trade + zone side + min_transfer_amount: + type: string + title: |- + Minimum amount of reward token that must be accumulated before + the tokens are transferred to the trade ICA + trade_config: + description: |- + specifies the configuration needed to execute the swap + such as pool_id, slippage, min trade amount, etc. + title: |- + Deprecated, the trades are now executed off-chain via authz + so the trade configuration is no longer needed type: object properties: - denom: + pool_id: type: string - amount: + format: uint64 + title: >- + Currently Osmosis is the only trade chain so this is an + osmosis pool id + swap_price: type: string - description: >- - Coin defines a token with a denomination and an amount. + title: >- + Spot price in the pool to convert the reward denom to the + host denom + output_tokens = swap_price * input tokens - NOTE: The amount field is an Int which implements the custom - method + This value may be slightly stale as it is updated by an ICQ + price_update_timestamp: + type: string + format: uint64 + title: unix time in seconds that the price was last updated + max_allowed_swap_loss_rate: + type: string + title: >- + Threshold defining the percentage of tokens that could be + lost in the trade - signatures required by gogoproto. - symphony.tokenfactory.v1beta1.DenomAuthorityMetadata: - type: object - properties: - admin: - type: string - title: Can be empty for no admin, or a valid osmosis address - description: |- - DenomAuthorityMetadata specifies metadata for addresses that have specific - capabilities over a token factory denom. Right now there is only one Admin - permission, but is planned to be extended to the future. - symphony.tokenfactory.v1beta1.Params: - type: object - properties: - denom_creation_fee: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. + This captures both the loss from slippage and from a stale + price on stride - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - description: >- - DenomCreationFee defines the fee to be charged on the creation of a - new + 0.05 means the output from the trade can be no less than a + 5% deviation - denom. The fee is drawn from the MsgCreateDenom's sender account, and + from the current value + min_swap_amount: + type: string + title: >- + min and max set boundaries of reward denom on trade chain we + will swap - transferred to the community pool. - denom_creation_gas_consume: - type: string - format: uint64 - description: |- - DenomCreationGasConsume defines the gas cost for creating a new denom. - This is intended as a spam deterrence mechanism. + min also decides when reward token transfers are worth it + (transfer fees) + max_swap_amount: + type: string + title: >- + TradeRoute represents a round trip including info on transfer and + how to do - See: https://github.com/CosmWasm/token-factory/issues/11 - description: Params defines the parameters for the tokenfactory module. - symphony.tokenfactory.v1beta1.QueryAllBeforeSendHooksAddressesResponse: - type: object - properties: - denoms: - type: array - items: - type: string - before_send_hook_addresses: - type: array - items: - type: string - description: >- - QueryAllBeforeSendHooksAddressesResponse defines the response structure - for + the swap. It makes the assumption that the reward token is always + foreign to - the AllBeforeSendHooksAddresses gRPC query. - symphony.tokenfactory.v1beta1.QueryBeforeSendHookAddressResponse: - type: object - properties: - cosmwasm_address: - type: string - description: |- - QueryBeforeSendHookAddressResponse defines the response structure for the - DenomBeforeSendHook gRPC query. - symphony.tokenfactory.v1beta1.QueryDenomAuthorityMetadataResponse: - type: object - properties: - authority_metadata: - type: object - properties: - admin: - type: string - title: Can be empty for no admin, or a valid osmosis address - description: >- - DenomAuthorityMetadata specifies metadata for addresses that have - specific + the host so therefore the first two hops are to unwind the ibc denom + enroute - capabilities over a token factory denom. Right now there is only one - Admin + to the trade chain and the last hop is the return so funds start/end + in the - permission, but is planned to be extended to the future. - description: |- - QueryDenomAuthorityMetadataResponse defines the response structure for the - DenomAuthorityMetadata gRPC query. - symphony.tokenfactory.v1beta1.QueryDenomsFromCreatorResponse: + withdrawl ICA on hostZone + + The structure is key'd on reward denom and host denom in their + native forms + + (i.e. reward_denom_on_reward_zone and host_denom_on_host_zone) + symphony.stakeibc.QueryGetEpochTrackerResponse: type: object properties: - denoms: - type: array - items: - type: string - description: |- - QueryDenomsFromCreatorRequest defines the response structure for the - DenomsFromCreator gRPC query. - symphony.tokenfactory.v1beta1.QueryParamsResponse: + epoch_tracker: + type: object + properties: + epoch_identifier: + type: string + epoch_number: + type: string + format: uint64 + next_epoch_start_time: + type: string + format: uint64 + duration: + type: string + format: uint64 + symphony.stakeibc.QueryGetHostZoneResponse: type: object properties: - params: - description: params defines the parameters of the module. + host_zone: type: object properties: - denom_creation_fee: + chain_id: + type: string + title: Chain ID of the host zone + bech32prefix: + type: string + title: Bech32 prefix of host zone's address + connection_id: + type: string + title: >- + ConnectionID from Stride to the host zone (ID is on the stride + side) + transfer_channel_id: + type: string + title: >- + Transfer Channel ID from Stride to the host zone (ID is on the + stride side) + ibc_denom: + type: string + title: ibc denom of the host zone's native token on stride + host_denom: + type: string + title: native denom on host zone + unbonding_period: + type: string + format: uint64 + title: The unbonding period in days (e.g. 21) + validators: type: array items: type: object properties: - denom: + name: type: string - amount: + address: type: string - description: >- - Coin defines a token with a denomination and an amount. + weight: + type: string + format: uint64 + delegation: + type: string + slash_query_progress_tracker: + type: string + slash_query_checkpoint: + type: string + shares_to_tokens_rate: + type: string + delegation_changes_in_progress: + type: string + format: int64 + slash_query_in_progress: + type: boolean + title: List of validators that are delegated to + deposit_address: + type: string + title: Address that custodies native tokens during a liquid stake + withdrawal_ica_address: + type: string + title: ICA Address on the host zone responsible for collecting rewards + fee_ica_address: + type: string + title: ICA Address on the host zone responsible for commission + delegation_ica_address: + type: string + title: ICA Address on the host zone responsible for staking and unstaking + redemption_ica_address: + type: string + title: >- + ICA Address that receives unstaked tokens after they've finished + unbonding + community_pool_deposit_ica_address: + type: string + title: >- + ICA Address that receives tokens from a community pool to liquid + stake or + redeem In the case of a liquid stake, the community pool deposits + native - NOTE: The amount field is an Int which implements the custom - method + tokens In the case of a redemption, the community pool deposits + stTokens + community_pool_return_ica_address: + type: string + title: >- + ICA Address that distributes tokens back to the community pool + during a - signatures required by gogoproto. - description: >- - DenomCreationFee defines the fee to be charged on the creation of - a new + community pool liquid stake or redeem In the case of a liquid + stake, the - denom. The fee is drawn from the MsgCreateDenom's sender account, - and + return address sends back stTokens In the case of a redemption, + the return - transferred to the community pool. - denom_creation_gas_consume: + address sends back native tokens + community_pool_stake_holding_address: type: string - format: uint64 - description: >- - DenomCreationGasConsume defines the gas cost for creating a new - denom. + title: >- + Module account on Stride that receives native tokens from the + deposit ICA - This is intended as a spam deterrence mechanism. + and liquid stakes them + community_pool_redeem_holding_address: + type: string + title: >- + Module account on Stride that receives stTokens from the deposit + ICA and + redeems them + community_pool_treasury_address: + type: string + title: >- + Optional community pool address to send tokens to after a + community pool - See: https://github.com/CosmWasm/token-factory/issues/11 - description: QueryParamsResponse is the response type for the Query/Params RPC method. - symphony.txfees.v1beta1.QueryDenomSpotPriceResponse: - type: object - properties: - spot_price: - type: string - title: >- - QueryDenomSpotPriceRequest defines grpc response structure for querying - spot + liquid stake or redemption If this address is empty, the tokens + are sent to - price for the specified tx fee denom - symphony.txfees.v1beta1.QueryEipBaseFeeResponse: + the main community pool + total_delegations: + type: string + title: The total delegated balance on the host zone + last_redemption_rate: + type: string + title: The redemption rate from the previous epoch + redemption_rate: + type: string + title: The current redemption rate + min_redemption_rate: + type: string + title: >- + The min outer redemption rate bound - controlled only be + governance + + The min inner bound cannot exceed this bound + max_redemption_rate: + type: string + title: >- + The max outer redemption rate bound - controlled only be + governance + + The max inner bound cannot exceed this bound + min_inner_redemption_rate: + type: string + title: |- + The min minner redemption rate bound - controlled by the admin + If the redemption rate exceeds this bound, the host zone is halted + max_inner_redemption_rate: + type: string + title: |- + The max minner redemption rate bound - controlled by the admin + If the redemption rate exceeds this bound, the host zone is halted + max_messages_per_ica_tx: + type: string + format: uint64 + title: |- + The max number of messages that can be sent in a delegation + or undelegation ICA tx + redemptions_enabled: + type: boolean + title: Indicates whether redemptions are allowed through this module + community_pool_rebate: + title: |- + An optional fee rebate + If there is no rebate for the host zone, this will be nil + type: object + properties: + rebate_rate: + type: string + title: Rebate percentage as a decimal (e.g. 0.2 for 20%) + liquid_staked_st_token_amount: + type: string + title: >- + Number of stTokens received from the community pool liquid + stake + lsm_liquid_stake_enabled: + type: boolean + title: A boolean indicating whether the chain has LSM enabled + halted: + type: boolean + title: A boolean indicating whether the chain is currently halted + title: Core data structure to track liquid staking zones + symphony.stakeibc.QueryGetNextPacketSequenceResponse: type: object properties: - base_fee: + sequence: type: string - symphony.txfees.v1beta1.QueryFeeTokensResponse: - type: object - properties: - fee_tokens: - type: array - items: - type: string - cosmos.base.v1beta1.DecCoin: + format: uint64 + symphony.stakeibc.QueryInterchainAccountFromAddressResponse: type: object properties: - denom: - type: string - amount: + interchain_account_address: type: string - description: |- - DecCoin defines a token with a denomination and a decimal amount. - - NOTE: The amount field is an Dec which implements the custom method - signatures required by gogoproto. - symphony.stablestaking.v1beta1.Params: + title: |- + QueryInterchainAccountFromAddressResponse the response type for the + Query/InterchainAccountAddress RPC + symphony.stakeibc.QueryModuleAddressResponse: type: object properties: - reward_rate: - type: string - unbonding_duration: - type: string - supported_tokens: - type: array - items: - type: string - reward_epoch_identifier: - type: string - unbonding_epoch_identifier: - type: string - max_staking_amount: + addr: type: string - format: byte - symphony.stablestaking.v1beta1.QueryParamsResponse: + symphony.stakeibc.QueryParamsResponse: type: object properties: params: + description: params holds all the parameters of this module. type: object properties: - reward_rate: + rewards_interval: type: string - unbonding_duration: + format: uint64 + title: define epoch lengths, in stride_epochs + delegate_interval: type: string - supported_tokens: - type: array - items: - type: string - reward_epoch_identifier: + format: uint64 + deposit_interval: type: string - unbonding_epoch_identifier: + format: uint64 + redemption_rate_interval: type: string - max_staking_amount: + format: uint64 + symphony_commission: type: string - format: byte - symphony.stablestaking.v1beta1.QueryPoolResponse: - type: object - properties: - pool: - type: object - properties: - denom: + format: uint64 + reinvest_interval: type: string - total_staked: + format: uint64 + ica_timeout_nanos: type: string - format: byte - total_shares: + format: uint64 + buffer_size: type: string - format: byte - symphony.stablestaking.v1beta1.QueryPoolsResponse: + format: uint64 + ibc_timeout_blocks: + type: string + format: uint64 + fee_transfer_timeout_nanos: + type: string + format: uint64 + max_stake_ica_calls_per_epoch: + type: string + format: uint64 + default_min_redemption_rate_threshold: + type: string + format: uint64 + default_max_redemption_rate_threshold: + type: string + format: uint64 + ibc_transfer_timeout_nanos: + type: string + format: uint64 + validator_slash_query_threshold: + type: string + format: uint64 + validator_weight_cap: + type: string + format: uint64 + title: |- + Params defines the parameters for the module. + next id: 20 + description: QueryParamsResponse is response type for the Query/Params RPC method. + symphony.stakeibc.TradeConfig: type: object properties: - pools: - type: array - items: - type: object - properties: - denom: - type: string - total_staked: - type: string - format: byte - total_shares: - type: string - format: byte - symphony.stablestaking.v1beta1.QueryRewardPerPoolResponse: + pool_id: + type: string + format: uint64 + title: >- + Currently Osmosis is the only trade chain so this is an osmosis pool + id + swap_price: + type: string + title: |- + Spot price in the pool to convert the reward denom to the host denom + output_tokens = swap_price * input tokens + This value may be slightly stale as it is updated by an ICQ + price_update_timestamp: + type: string + format: uint64 + title: unix time in seconds that the price was last updated + max_allowed_swap_loss_rate: + type: string + title: >- + Threshold defining the percentage of tokens that could be lost in the + trade + + This captures both the loss from slippage and from a stale price on + stride + + 0.05 means the output from the trade can be no less than a 5% + deviation + + from the current value + min_swap_amount: + type: string + title: >- + min and max set boundaries of reward denom on trade chain we will swap + + min also decides when reward token transfers are worth it (transfer + fees) + max_swap_amount: + type: string + description: Stores pool information needed to execute the swap along a trade route + title: |- + Deprecated, this configuration is no longer needed since swaps + are executed off-chain via authz + symphony.stakeibc.TradeRoute: type: object properties: - pool: + reward_denom_on_host_zone: + type: string + title: ibc denom for the reward on the host zone + reward_denom_on_reward_zone: + type: string + title: should be the native denom for the reward chain + reward_denom_on_trade_zone: + type: string + title: ibc denom of the reward on the trade chain, input to the swap + host_denom_on_trade_zone: + type: string + title: ibc of the host denom on the trade chain, output from the swap + host_denom_on_host_zone: + type: string + title: should be the same as the native host denom on the host chain + host_account: + title: |- + ICAAccount on the host zone with the reward tokens + This is the same as the host zone withdrawal ICA account type: object properties: - denom: + chain_id: type: string - total_staked: + type: type: string - format: byte - total_shares: + enum: + - DELEGATION + - FEE + - WITHDRAWAL + - REDEMPTION + - COMMUNITY_POOL_DEPOSIT + - COMMUNITY_POOL_RETURN + - CONVERTER_UNWIND + - CONVERTER_TRADE + default: DELEGATION + connection_id: type: string - format: byte - reward: + address: + type: string + reward_account: + title: |- + ICAAccount on the reward zone that is acts as the intermediate + receiver of the transfer from host zone to trade zone type: object properties: - denom: + chain_id: type: string - amount: + type: type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - symphony.stablestaking.v1beta1.QueryTotalStakersPerPoolResponse: - type: object - properties: - stakers: - type: object - properties: - denom: + enum: + - DELEGATION + - FEE + - WITHDRAWAL + - REDEMPTION + - COMMUNITY_POOL_DEPOSIT + - COMMUNITY_POOL_RETURN + - CONVERTER_UNWIND + - CONVERTER_TRADE + default: DELEGATION + connection_id: type: string - count: + address: type: string - symphony.stablestaking.v1beta1.QueryTotalStakersResponse: - type: object - properties: - stakers: - type: array - items: - type: object - properties: - denom: - type: string - count: - type: string - symphony.stablestaking.v1beta1.QueryUserStakeResponse: - type: object - properties: - stakes: + trade_account: + title: |- + ICAAccount responsible for executing the swap of reward + tokens for host tokens type: object properties: - address: + chain_id: type: string - shares: + type: type: string - format: byte - epoch: + enum: + - DELEGATION + - FEE + - WITHDRAWAL + - REDEMPTION + - COMMUNITY_POOL_DEPOSIT + - COMMUNITY_POOL_RETURN + - CONVERTER_UNWIND + - CONVERTER_TRADE + default: DELEGATION + connection_id: type: string - format: int64 - symphony.stablestaking.v1beta1.QueryUserTotalStakeResponse: - type: object - properties: - stakes: - type: array - items: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - DecCoin defines a token with a denomination and a decimal amount. + address: + type: string + host_to_reward_channel_id: + type: string + title: |- + Channel responsible for the transfer of reward tokens from the host + zone to the reward zone. This is the channel ID on the host zone side + reward_to_trade_channel_id: + type: string + title: |- + Channel responsible for the transfer of reward tokens from the reward + zone to the trade zone. This is the channel ID on the reward zone side + trade_to_host_channel_id: + type: string + title: >- + Channel responsible for the transfer of host tokens from the trade - NOTE: The amount field is an Dec which implements the custom method - signatures required by gogoproto. - symphony.stablestaking.v1beta1.QueryUserTotalUnbondingResponse: - type: object - properties: - info: - type: array - items: - type: object - properties: - address: - type: string - amount: - type: string - format: byte - denom: - type: string - unbond_epoch: - type: string - format: int64 - symphony.stablestaking.v1beta1.QueryUserUnbondingResponse: - type: object - properties: - info: + zone, back to the host zone. This is the channel ID on the trade zone + side + min_transfer_amount: + type: string + title: |- + Minimum amount of reward token that must be accumulated before + the tokens are transferred to the trade ICA + trade_config: + description: |- + specifies the configuration needed to execute the swap + such as pool_id, slippage, min trade amount, etc. + title: |- + Deprecated, the trades are now executed off-chain via authz + so the trade configuration is no longer needed type: object properties: - address: + pool_id: type: string - amount: + format: uint64 + title: >- + Currently Osmosis is the only trade chain so this is an osmosis + pool id + swap_price: type: string - format: byte - denom: + title: >- + Spot price in the pool to convert the reward denom to the host + denom + + output_tokens = swap_price * input tokens + + This value may be slightly stale as it is updated by an ICQ + price_update_timestamp: type: string - unbond_epoch: + format: uint64 + title: unix time in seconds that the price was last updated + max_allowed_swap_loss_rate: type: string - format: int64 - symphony.stablestaking.v1beta1.StakingPool: + title: >- + Threshold defining the percentage of tokens that could be lost in + the trade + + This captures both the loss from slippage and from a stale price + on stride + + 0.05 means the output from the trade can be no less than a 5% + deviation + + from the current value + min_swap_amount: + type: string + title: >- + min and max set boundaries of reward denom on trade chain we will + swap + + min also decides when reward token transfers are worth it + (transfer fees) + max_swap_amount: + type: string + title: >- + TradeRoute represents a round trip including info on transfer and how to + do + + the swap. It makes the assumption that the reward token is always foreign + to + + the host so therefore the first two hops are to unwind the ibc denom + enroute + + to the trade chain and the last hop is the return so funds start/end in + the + + withdrawl ICA on hostZone + + The structure is key'd on reward denom and host denom in their native + forms + + (i.e. reward_denom_on_reward_zone and host_denom_on_host_zone) + symphony.stakeibc.Validator: type: object properties: - denom: - type: string - total_staked: + name: type: string - format: byte - total_shares: + address: type: string - format: byte - symphony.stablestaking.v1beta1.TotalStakers: - type: object - properties: - denom: + weight: type: string - count: + format: uint64 + delegation: type: string - symphony.stablestaking.v1beta1.UnbondingInfo: - type: object - properties: - address: + slash_query_progress_tracker: type: string - amount: + slash_query_checkpoint: type: string - format: byte - denom: + shares_to_tokens_rate: type: string - unbond_epoch: + delegation_changes_in_progress: type: string format: int64 - symphony.stablestaking.v1beta1.UserStake: + slash_query_in_progress: + type: boolean + symphony.stakeibc.AuthzPermissionChange: + type: string + enum: + - GRANT + - REVOKE + default: GRANT + title: |- + - GRANT: Grant the address trade permissions + - REVOKE: Revoke trade permissions from the address + symphony.stakeibc.MsgAddValidatorsResponse: + type: object + symphony.stakeibc.MsgCalibrateDelegationResponse: + type: object + symphony.stakeibc.MsgChangeValidatorWeightsResponse: + type: object + symphony.stakeibc.MsgClaimUndelegatedTokens: type: object properties: - address: + creator: type: string - shares: + host_zone_id: type: string - format: byte + title: UserUnbondingRecords are keyed on {chain_id}.{epoch}.{receiver} epoch: type: string - format: int64 - symphony.stablestaking.v1beta1.MsgStakeTokens: + format: uint64 + receiver: + type: string + symphony.stakeibc.MsgClaimUndelegatedTokensResponse: + type: object + symphony.stakeibc.MsgClearBalanceResponse: + type: object + symphony.stakeibc.MsgCloseDelegationChannelResponse: + type: object + symphony.stakeibc.MsgCreateTradeRouteResponse: + type: object + symphony.stakeibc.MsgDeleteTradeRouteResponse: + type: object + symphony.stakeibc.MsgDeleteValidatorResponse: + type: object + symphony.stakeibc.MsgLSMLiquidStake: type: object properties: - staker: + creator: type: string amount: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - symphony.stablestaking.v1beta1.MsgStakeTokensResponse: + type: string + lsm_token_ibc_denom: + type: string + symphony.stakeibc.MsgLSMLiquidStakeResponse: type: object properties: - staker: + transaction_complete: + type: boolean + symphony.stakeibc.MsgLiquidStake: + type: object + properties: + creator: type: string amount: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - Coin defines a token with a denomination and an amount. - - NOTE: The amount field is an Int which implements the custom method - signatures required by gogoproto. - total_staked: type: string - format: byte - total_shares: + host_denom: type: string - format: byte - symphony.stablestaking.v1beta1.MsgUnstakeTokens: + symphony.stakeibc.MsgLiquidStakeResponse: type: object properties: - staker: - type: string - amount: + st_token: type: object properties: denom: @@ -51027,29 +53837,77 @@ definitions: NOTE: The amount field is an Int which implements the custom method signatures required by gogoproto. - symphony.stablestaking.v1beta1.MsgUnstakeTokensResponse: + symphony.stakeibc.MsgRebalanceValidatorsResponse: + type: object + symphony.stakeibc.MsgRedeemStake: type: object properties: - staker: + creator: type: string amount: - type: object - properties: - denom: - type: string - amount: - type: string - description: |- - DecCoin defines a token with a denomination and a decimal amount. - - NOTE: The amount field is an Dec which implements the custom method - signatures required by gogoproto. - total_staked: type: string - format: byte - total_shares: + host_zone: type: string - format: byte + receiver: + type: string + symphony.stakeibc.MsgRedeemStakeResponse: + type: object + symphony.stakeibc.MsgRegisterHostZone: + type: object + properties: + connection_id: + type: string + bech32prefix: + type: string + host_denom: + type: string + ibc_denom: + type: string + creator: + type: string + transfer_channel_id: + type: string + unbonding_period: + type: string + format: uint64 + min_redemption_rate: + type: string + max_redemption_rate: + type: string + lsm_liquid_stake_enabled: + type: boolean + community_pool_treasury_address: + type: string + max_messages_per_ica_tx: + type: string + format: uint64 + title: 'next: 15' + symphony.stakeibc.MsgRegisterHostZoneResponse: + type: object + symphony.stakeibc.MsgRestoreInterchainAccountResponse: + type: object + symphony.stakeibc.MsgResumeHostZoneResponse: + type: object + symphony.stakeibc.MsgSetCommunityPoolRebateResponse: + type: object + symphony.stakeibc.MsgToggleTradeControllerResponse: + type: object + symphony.stakeibc.MsgUpdateHostZoneParamsResponse: + type: object + symphony.stakeibc.MsgUpdateInnerRedemptionRateBoundsResponse: + type: object + symphony.stakeibc.MsgUpdateTradeRouteResponse: + type: object + symphony.stakeibc.MsgUpdateValidatorSharesExchRateResponse: + type: object + symphony.stakeibc.ValidatorWeight: + type: object + properties: + address: + type: string + weight: + type: string + format: uint64 symphony.market.v1beta1.ExchangeRequirement: type: object properties: diff --git a/client/docs/statik/statik.go b/client/docs/statik/statik.go index 7305f7b73fe..a151ef5a11a 100644 --- a/client/docs/statik/statik.go +++ b/client/docs/statik/statik.go @@ -8,7 +8,7 @@ import ( func init() { - data := "PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00 \x00openapi/index.htmlUT\x05\x00\x01\x80Cm8\xec\xbdkw\xdb6\xb60\xfc=\xbf\x82\xe2\xf40@\x05\xcbR:\x9ds\x86\n\xa2Ql'q\xebX\x19\xdb\xe9eT\x8d\x87\x96 \x8b\x89\x04\xaa \xe4K-\xbe\xbf\xfd]\xd8\x00H\xf0\"\xc7\x9d3s\x9e\xcbz\xba\xbab\x8a\xc4ucc\xdf\xb1\xf1\xb2u8:\xb8\xf8\xf9\xc3\x91\xb7\x90\xab\xe5\xabg/\xf5\x9fg/\x17,\x9a\xbdz\xe6y/WLF\xdet\x11\x89\x94I\xeao\xe4\xfc\xbf|o\x1f\xbe\xc8X.\xd9\xab\xf3\xfb\xd5z\x91\xf0{o\xcf\xbb>\xfbp\xe0\xbd\x8d$\xbb\x8d\xee\xbdY2M_\xee\xeb2\xaatko\xcf\xe3\x8c\xcd\xd8\xcc\x9b'\xc2\x8bf\xd1Z\xc67\xcc\x9b\xb14\xbe\xe6\xde\xde^\xd1\x1b\x8fV\x8c\xfa71\xbb]'B\xfa\xde4\xe1\x92qI\xfd\xdbx&\x17t\xc6n\xe2)\xdb\x83\x1f\xc4\x8by,\xe3h\xb9\x97N\xa3%\xa3=\x1f\x9aI\xe5\xbd\xee\xd6\xf3\xae\x92\xd9\xbd\xf7\x00\x8f\x9e\xb7\x8ef\xb3\x98_\x87^\xb7o\xde\xac\"q\x1d\xf3\xfcE\xa6j\xef\xe7\xd5_\xa6S\x11\xaf\xe5\xab\xfd\xaf[\xcf\xbc\xaf\xbd3v\x98L\xbd=o\xb4f|\xf8\xe1x\xff\xfc6\xba\xbefb\xef\x9aq&\"\xc9f\xde\xf0\xc3\xb1w\xc6\xe6L0>e\xdea2\xdd\xac\x18\x97\x91\x8c\x13\xae\x1a\xd8\xfb\xef\xfc\xa7\x1a\xf0\xbc\x1f\x98H\xe3\x84\x87\x9e\xff\xa2\xd3\xedt\xf7\xc4\xb4\xf3\xc7\xae\xaf\xbf\x9d\xb1u\x12z\x0b)\xd7i\xb8\xbf\x7f\x1d\xcb\xc5\xe6\xaa3MV\xfbgl\x96L\x97\xf7\xfbB\xfd}\xe6}\xbd\xff\xac5\xdf\xf0\xa9\x1a\x16bD\xe2\x07?\xb9\xfa\xc4\xa6\xd2\xa7T\xde\xafY2\xf7\xd8\x9d\x82}\x1a\x04\xb5/\xabd\xb6Y\xb2\x81\xfe\xd31\xe5\xa8D\x82\xfd\xba\x89\x05C>\xdf,\x97>&y\x07\xf8A\x8a\xfb\x07\xc1\xe4Fp//\xc5\xd2\xb5\x88W\x91\x8f\xb3i$\xa7\x0b\xc4\xf0C\x96!\x8cC\xdfV,\xba\x9c\xb1y\xccY\x10\xe8\xbf\x9dh5\x1b\xe8G4\xd6\xbd\x91\xbc\xb9 \x918\xdc5\x9b\x81\xf9\xdb\x01x\xfc\x0b\xc7\xcc\xf2\x16YG5EX\xc7\x94\xc5\x19\x92\x8b8%\xa8\x0co\xd3r\xf1\x12?\xdcD\xc2\x93\xf4!\xeb\xdb\x97\x1eG\x02?\xc4s$\xc7b\x82M\x0d\xf5l\x81\xdeWU\x12\xaa^\xd1\x878\x14d\x19\xb6z\xc4|\x0c\x1f\xb2\xaco*1Ui\x1a-\x97(\xb1uIB\x8ag\x8eI\xd2Y\xd2V\xb7x\x97\x99\xaa\xbc\xb3\xa2\x8c\xf0\xce\x94J\xc2;3\xeaN\x83\x08\xfc\xc0; \xcch\xbb\x1d\x01\xcc;za>\x88d\xcd\x84\xbc\x87b\x0f\x8coVLDWK\x16\xb6\xba\xe4\x9a\xc9Pd8#\xbc#\xa8\x0b\x01\x7f\xc3u\xed\x99\xdf\xb2+w~\xbf\xbaJ\x96A\xa0\xffvdr.E\xcc\xaf/\xa2\xeb \xd8\xd5c\xbd,y\xb8\x89\x96\x1b\x16\xfa\xef\x01k\xfd\x0c\x93]\x95\xfd\xcbK\x96\x9ab\xb6Z\xab\xab\x87+iy\x15\xe39\xea\x052\x08\x10\xa3j\x02\x98\xfcW \xedB\xb1~Nx\xe7\xd9\xb3\x0fL\xac\xe2T\x89\x8f\x9eL\xbcM\xca\x887M\xd6\xf7D\xc9t\xf1\xfc\x9ex\x11\x9f\xed'\xc2\x9b\xc5\x8ax]m$\xf3\x94\xf0\xe2\xa9\xa6n#\xc1\xb4\xe4\xce\xef\x9f\xad7b\x9d\xa4\xcc\xbb\x8d\xe5\xc2K\x04\xfcM6\xd2\x9b3\xe6\xc5\xa9\xb7`\x82]\xdd{\xd7\"\xe2\x92\xcd:\xcf\x9e]\xbc;\xf2\xceGo.~\x1c\x9e\x1dy\xc7\xe7\xde\x87\xb3\xd1\x0f\xc7\x87G\x87\x9e?<\xf7\x8e\xcf}oxz\xe8\xa9B\xc3\x8f\x17\xefFg\xde\xe1\xf1\xf9\xc1\xc9\xf0\xf8\xfd\xb97<9\xf1~\x1c\x9e\x9d\x0dO/\x8e\x8f\xce\xbd\x1f\x8f/\xde=;;z;<;\xf4.F\xde\xc5\xbb\xe3s\xa7\xe1\xd3\x83\x93\x8f\x87\xc7\xa7o\xa1\xd6\xf1\xfb\x0f'\xc7G\x87n\xed\xd1\x1b\xef\xfd\xd1\xd9\xc1\xbb\xe1\xe9\xc5\xf0\xf5\xf1\xc9\xf1\xc5\xcf\xcfT\xc7o\x8e/N\x8f\xce\xcf;\xde\xf1\xa9w:\xf2\x8e~8:\xbd\xf0\xce\xdf\xa9F\x9c1\xbd>\xf2N\x8e\x87\xafO\x8e\xbc7\xa33ox\xfa\xb3w\xfe\xe1\xe8\xe0xxB\xbc\xc3\xe3\xb3\xa3\x83\x0b\xf2\xec\xf8\xd4\xeeZ\x95Ui\x0d?\xe4\x1eM*\x1d\xc9\xec\xc8 \xe3\xa3\xfe_\x88\x02(\x8cP\xb8\"\xc7\x9916\xdb\xb6\x14\x9b\xb6B\x9cE\xc0\x91\xfa\x8d\x89,\xe0{\xe9\xf0\x9f\xaas\x96\x85\x0fV!a\xce\x92\x9c\xe7\xb6\x8b\x16\xf4\xad\xf4\xfb\xc6\xcd\x13I\xc9Vk\xc9f\x9eL\xbck&\xbd\xb5\xf6\x8bx\xf3\x98-g^\xc2=\x9e\xf0=KW\xfd|\x94`T*q\xb9\x0b\x97\xcb\xfd\x8eN\xd3\xdf\xd3i\xaa:%\x1c\x13\x9e}\xc1\x91\xeb\xee \x88|\xb0\xbe\xe8/x\x95\xae\x1aK\xbcaN\x91i\xb3/\xce-\xd2\xec6\x9c\xbbE\x9a\x1d\xbbk\xb7\xc8\xbc\xb1\xc8[\xb7H\xb3\x17U\xbaE\x16\x8dE\xb8t\x8a\xc4\x8dE>9%>5{\xac\xddF>7\x169p\x8b,\x1b\x8b\x9c\xbaE\x9a\xfd\xd8\xbf\xbaE\x9a\x9d\xec\x7fuJ$\xcd\xb0u\x1bY77\xe2\x02\xee\xd7\xe6\xa1\xb8Ev\xf8\xa5\xdd\x8e\x9a]\xabK\xf6\xbf\xd0\xb7\xe8\x0d\x97K\x0f\n\xa5\x9e`)\x137l\xd6yv\x12O\x19O\xd9\xcc\xdb\xf0\x19\x13\x9e\\0o\xb8\x8e\xa6\x0b\xe6\x99/\xc4\x86\xb3y/:]\x0f\xa9\x02\xbe\xf9\xe4\xe3\xbew\x9fl\xbcUt\x0f|w\x93\xb2g *\xcf\xe3%\xf3\xd8\xdd\x94\xad\xa5\xa2\x87\xd3d\xb5^\xc6jWko\xa4,Z\xefx?\x9b\x06\x92+\x19\xc5\xdc\x8b\xc0\xdd\xe9%sU\xca\x8e\xce\x8b$\x84\xcc\x85\xfb\xfb\xb7\xb7\xb7\x9d\x08\x06\xd8I\xc4\xf5\xfeR\x17H\xf7O\x8e\x0f\x8eN\xcf\x8f\xf6^t\xba\xcf\x9e\x81\xd3\xeb`tXvd\x8e\xc0\x11\xf75\xb83\xbf\xf6^\x0f\xcf\x8f\xcf \xb8\xcfF\x1f/J.Hp\x0c\x1e\x1e_\x1c\x8fN\xc1\xbf7<\xfd\xf9\xd9\xf7\xc7\xa7\x87\xc4;:\x06'\xdd\xd1O\x1f\xce\x8e\xce\xa1\xa4qa\x12\xc7\xb3i\x9b<9~\x7f|1\x04'\xdd\xf0\xf4g[\xf2\xd9c=]\x1c_\x9c\x1c\x11\xeb\xed\xd4^L\xef\xc3\xf0\xec\xe2\xf8\xe0\xe3\xc9\xf0\xcc\xfb\xf0\xf1\xec\xc3\xe8\xfc\x88<+|\xa4'\xc7\x17?\xab\x86NG\xa7{\xc7\xa7o\xce\x8eO\xdf\x1e\xbd?:\xbd\xe8<{v\xce\x98\xbb\xa0\xee:Z\xc0\xce\x13\xe1\xa5k6\x8d\xe7\xf1\xd4[F\xfcz\x13]3\xef:\xb9a\x82\xc7\xfc\xda[\xe7\xee\xe8\xf4Y\xc4g\xde2^\xc5:V2u0\xc6.\xe6\xbf\xc7\xbd\xd8\x1c?\x84\x92\xff\x9d\xdd\x8b\xff\x97{\xf8\x9e`n\xaa[P\x08\xa7\xdd\x9c\xa9\x0fd.p?b>\xe2O0\x1f\xf1\xb2\xf9\xa8\xa64\xfe?[\x8f\xe6\xda\xae2\xfbO\xd9z\xd2\x9d\xb6\x1e\xd5\xd0T\xc1\xc3 \xdf\\0\xf6\x1bCS\xad\x7fmJ\x11\xb3\xeb|\x81\xdb\xed\x03\xd6Y%Wwo7\xf1\xac\x18\xdd\xbc\xd0ag\xa8\xd5Sb\xb1\xff\x93_|\x9f\x15R.s$M#e\x8eU\x83\x13\xcfo#\xb9\xdd\xfaC\xb5oo\"\x11G\\z\xf3(^\xb2\x19\xf1\x16\xc9-\xbb1\x94\x0b`\xa4\xf4\xc6\xe4j\xbeI\xa7\x10 ~\xc5\xa6\x91\x12*\xb5\xd5'\xf5\"o-\x92\xd9F\xf7~\xb5\x89\x97J\xb3\xc4Yy\xae\x1bG\xafs\xec\xb1\xad\x9e\x85\x92\x83\xdf +\xe7\xd1\xc2\xb4\xd5%l\xc7\xa6\x03\xc8\xae\\:\xe2@\xf2\xda\xd1\x10\xb4\x1e\x02\xde\xf0Z(\xabk\x8a\xd3\xaa\x8dq\x16\xb3\xed\xd6\x96v\xe2Lu\x8b\xad\x9e\xd1s\no\xb2Cd\x11+\xc4sJi\x95\xe6l\xb766\xa2dO\xd3\x02\xfb\x13\x83\x90{\xe4V\xc4\xd2\xeap\xd3\x84\xcf\xe3\xebME\xa7\xe3Y\xd5\xe0\x96o\xf78}\x9f\\\xfd\xe4\xb7Y\xa1F\xe4\xc3S\xe4\xba\xd5%.\xe95\x85\x14H\x83\xa0\xa5\xf61\x03\x0b\x7f\xde\xfa\x9d\xab\x8e\xb9&\xa7\xf7\xd1\xbab\xc8h*u\xcedIu\xb6\xf8\xa10\xf7\x9c\xc9~E\x7f\x94\x9dh6C\x8ez\xf8x\x8cBg\x9e\x88\xa3h\xbap\x0dl9\xa0w\xc6\x01(\x95\xaaS\x80<\x08l\xafJ\x8e\x05^\xd9\x99\x8bd\x85\\\x87\xf5\xa8\xaa\x95\xda\x08\xeeA\xf1\x88\xb49\xd4\xfc`\xd8\xf9P4tTA^\x05\xf1\x81zh8\x190\xf0\xfd6\x0b5\x99\xb9\xa4z\xda\xc8W\x1b\xdd\x8bf\xab\x98\xc7\xa9\xd42\xae\x8f\xc9\xb9\xbbY\xf2\xde\x18@\xdc\x92h\x06\xbc\xc4\x1f\xcad\xf5\x17\xbf\xbdF\x18\x83\x15\xb7\x03\x87Z\xb4E\xb7\x13\xa7\x1f\x18\x04\xac~\xe4\xc9\x95\x12\x96\xa1\x03\xda\xea\xd9\xcf\xafY\xcc\xafGWZ\x8e\xce\xdf\xeb\xb2L\xa4ve\xf5\xebY<\x9fC\xc8%\xed\xea\x17\xcb(\x95\xc3\xe9\x94\xa5)\x9b\xbd\xbe\xcf\xdf&\xb7,\x95\xa6Qq.#\xc9\xe8\xf7\x9d\xd3\xd1\xc5\xe5\xc5\xd9\xf0\xe0\xfb\xe3\xd3\xb7\x96\x9a;qH\x9d\x84\xbff\xd3d\xc5\xf2\xc18\x10\xd0\x83\xaa\x148\x89S\xc98\x13i\x10<\xfe\xbd\x01\xaf\x9c\xe5G`\x12\"MC\xb1@{d0E\x91]\xc3i(\xf1\xbb\x07$\xd8:\x11\xb2 2\xa6\xd2{\x06D\xb7\xb1\xda\xc1\"\xe2\xd7\xe5Z\xa7\x0c\xe1\x12\xe1\x88\xe7\x885\xae\x1b\xa5\xdfw\xce/\x86'G\x86\xa0\xf6\x9b\x8b\x99B\x84\x15\xa8\xd30I\x89\x1f\x14\xc5\\3>c|\x1a\xb3\xb4\xe8\xe3\xe3\x87\xcb\x8b\xd1\xe5\xe1\xf0\xe2(\x08\x90\xec\xc4\xe9\x85\x88\xa61\xbfnQ\xfa]\xe7ttz\x14\x04\x87\xccX\x97r\xd0\x9e\xcbh\xc9\x00\xef\x1bZ5CR\xb0\xd4\xb0!'\n\xb4%\x00\xd9-\xbd\xc3\xce [)#,C\x98\\\xd0+\x04{\xcd'\xe7\x0e\x93\xfcd\xf9A!9\xa9 \xd0\x15&\xf9\x1b\x0e\x12\xcf\xcaqw\xa8M\xe52\x9f\x16\xa5\xab \x90\x12\xf9U$\xf6I\x02\xc7_\x08\xd7e\x98D \x9c\xa2\x0122\xa4\x0f\xf1\x8cq\x19\xcb\xfb\x8aQ\xd0\"\x13p/\xa2#\x007\"Z6\x17{+\xb5\xc0O\xac=\xae\xb1\x94\xa1\xc4\xb1\xf1m\x90t\x11-\x97\xc9\xedcM\x92\x1e\xce2rP\xa6v\xb3x\xe6\x89\x0d\xf7\x96\xd1o\xf7\xf6T]\xfc\x1b\x13\xa9\x8f\xc9q\xb9\xe8ZS/\xcf\x84f%P\xe6\x03}\xc8\xc8YI\x1c;u\xb9\xa6\x1c|\x08\xcfr\x9b\xf8\x98M\xb6[\xa4\xfe\xd0\x87*\xffu8\xb5\xdc\xe1\"?1\xc8\xa3\xfe\x1d\xb3IFR\xb7\x98\xc4\x0f\x95\x02Tf.;?q\xfd\x1fJb\xea*\xf9f|0\xd1o\x05e\xe3c\x10\xd4\x05~P\xb2\xc5\x01iu\xb19n\xb5D\x8f2\xcc\xe2|\xcegv\xaf~\xe2\\\x907\xfeC\x94`\xf0\x19j\xd1\xbd\xdfJ\xb5\xf0^\xbc\xd2\x83\x98R1NM\x00K\x7f\x9a\x87\xfd\x1d\x08\x16i\x06\xab\xdf\x91ig\x96\xb3]\xf8a\xd6\xe4\"\x12\xd7L\xbao\x86\x8e\xec\x97k\x06r\x87f\x90\x06\x81\x19\xd9\x934\x03i\xa4ei5\x03WYz\x8f\x1a\xc3\xe4\xf2\xb0\xabb\xa3+E(\"\xa9\x16c\xd5.MsQ\xd6|\x13`\xab\xdd,\x97\xb0nORH\x05960]R\xa1\x16\xf6F\xbd\"1z\xc8\xc8\x12\xe7\xc1\x91\xea\x93\xd2Y\x1f\x14X\xc3\x84T \x1eJR\x00:\x8cH\x05\xd0\xa1 u@\x87<#\xa7(!\x0c\xe7\x91`\x87\x85\xa2\x83\x07\x88\xd3)\xb1\x81jp\x9c\xaa\xf8\x88C\xc4\xb5O\xda\x99^\xba\x8c\xa7&\xda\xb3(I\x84\xeb\xdb;,\xb8\x16z\xa1\x04\x12\xa3qm\xb7\xdf8\xbf\x94\x86n\xcf\x81\x15\xc2\xd0\xb87\xd9n\xfd\x14P\xb9\xfc\x1ao\xb7\x7ft\xaa\xe7r\xec7\x93\xa2\xe77\x96\xea\x9a\xa9n$bx\xc0B=\x898\xb5\x0e\xf6\xc1_;\x91~$\x0f\x8a\x96+Q;4\x1f\xb4|\x86\x98\xa1\xd3N\x81;]`\x15\xadK\xf5n\xf5km\xc6/^;\x8a\xc9o.\x1b/^\x7fTdb\x86\xa4\xde\xd7\x9c\xbeG\xad\xae\xeb\xeb$&\x1ePcND\xc5@t\x1c\xb2X\xfe\x95\xdb\x1b\x8c\xeam\x82\x8a\xfa\xbf)\x10(\xc9Ws\x0eE\xd3\x14n\"N\"\xed\x88&\x82\x1a\xf5^kX\xac\xc3\xf8\x8d\xe3\xbb\x11\x1d\xc6\x17J\xce\x17T\x12\x01\xec\xe55}\x981\xb6V\x94\x12\xa6k\xe3\x974\x938\xb4Hh\xdf\xafErw\x1f\xb6\xba\x0e]\xfe\xaa&\x1f\xb3\xc1\xeb\xb0\x8e\x0e\x03\x0dOFl\x7fy[!\xab\xa8\xa8\xaf5\x18\x7f\xa4\x1f\xd1\x1bL~\xa5\x1fQ\xc5\x85X\xedp\xbb\xfdU\xc1f\xbb=\xd0\x7fN\xf5\x9f\xc3'\xe3\x8c\x19T\xef\x8b\xb8\xe3\x14l\xc2!\xe7s\x13.9\x9f\xe7\xa8\xd5\x835{G?\xa2\xdf0\xf9\xe1\x91Y\x1a\xde=\x90!\x98\xe5s\xd0\xff\xec\"c\xa7\xbaf\x83\xfa\xab|\xfd\xc3V\x0f6\xa0\x1a\xcf\xe0\xb7\xf0\x0d\xe0\xc2[\xfap\x95\xdcUx}\xd5\xd6\xf2\xeaE\x10\xfc\x84\xfc\xab\xe4\xce\xb7\xc8\xfe\x95\xc2{\xbb \xec\xd6\xfb\xcc\x10#?#EZA\xbc\"\n\xb9:\xec\xd7M\xb4T\xe2+\x80\xfei\xbd@\xd1\xc6~.e\xb9\x0f\x9c\x91U\xb4~Z\xab\xabh\xbds\xecg\xf5vK\xd2\xc0c\xed\xa6L\xeel\xf7}\xbd]\x8daau\xcdk;\xa7\xb0e\xf5&\xd0\x8fQ;\x8d\xb0I\xbfR\xea\xb7\xe2_jIE\x07\xb6\x95etB*\xbe\xa4\x8fW\x1b\x91#\x91J\xac\x88\xa9\xfed\xb0\xdb\xfc\x11\x98D\xf4^\xa2\xb8\x08b\x97(\x82\xfa &QF\x04\x9b\x87\xefr\xa9\xf0W\x8d\xcf?\x1a\xe13\xfc!#\x7f\xa5\xd5\xf9\xc4\xf3:op\xa7\xd4\xc0#\xdc\xcfv&?6365q`\x0d\xd5S\xcf\xd5m\x0cg \x1e!\x04\xb2\xb2\xa1ee\x07K\x1c\xc2)l\xa1Hk\x0e\xde\xbe\xde\xc6\xc5\x96\xfc \xcc\xe3\xc8?\xba[\xb3\xa9d3/\xe1\xccK\x84'o\x93bZ\x9eL\xbc$\xa7\xe1\x1d\xbf\xcd\xda~\xc7;\x8cg\xe0\xa4\x8a\xa6S\x90\xf8\x954\xe4Iqo\x8e\xd7\xd5jxQZ\x08\xcd\x03?\xb7\xf3\x81\xa8\xf8\xb6\xc9\xd4RP\x8b\xbf*1\xf6\xad\x12v\xb1\xc6\x8b\xef\xc9w\xe4o\x8am\xf5H-\\\x83$\x96mq%\xa7\x92\x94r\x05\x14\xb2\xa4\xc9\xb8;\xd9n\x1f\xb2\x825\x1d$\xab\xf5F\xb2\x190&U?F\x0fJ\xa0\x89`\x1b\xa5\x04\xd2o\xdc)B\x06\xd2\x12\xc6\x841\xfa7\xf4\xa0\xa9C8\xec\x14zL\x86\x89dOB\xa7\xdcD\xf9\xb7\xddH\xf2\x98\xdd1\x08\xd4\xd6\xa9\xee\xea/5\xaa\xf1\xac\xd6\x9a\x1c\xc8\xf0!+X\xee5\x93\x94\x11\xd1\x81\x94'v6\xe5\xe2\xf0\x91\x08m\xd6\xd1\x7f\xb6[f\xfe\xfa>\x1c\xc6\x1a1$p\xd6\x97\xcc@\x882VR\xef\xd9\x98\x95\xec/t\xaf7\xa1\xbe\xfb\xc6'\xaaL\xa1\x85\xd3\xee\x84\xfa\xc5O\xfd\xf9\xc3\xe8\xfc\xfc\xf8\xf5\xc9\xcf\x97\xa0YS\xd5F\xf9\x95.\xa6\xbf\xbe\x98P_\xbf\xcc\xd0\xf7\xdb-\xfa\x9e>\xa8\x15\xad\x0f\xebTw\xa6\x1et\xfd\x93\xd1[h\xfbdd\x86\xf5\xfa\xech\xf8=4\x08O~\x86\xbe\xdbn\xd1w\xd0\xa0&\xa9\xac\x94\x0b@\x1f|\x8b6)\xa3\xcc\xd9~\x82\xed\xb2krGZK\xa0\x94\x89\xf4gu\xc3\x82 \xeewM\x16&\x9e\xbf\xd5\xeb\x9bO.dC\xf3\x0e`aKvm\xc92\xfc\xc2\xdcwF\xd7\x0c\xb5\xba\x98p:eH\xc9n\xd6\xb2\x12\xf3k\x92P{\x96\x8b\xc4\xb4\xdb\x8f_&\xfd\xb8\xdd\xce\xc5\xc7q\x0c\x1a\xe5\x11C\x11\x86=q\xc0:\xb38U\xc4\x01\xdc\x0b\xaf\x93\x0d\x9fE\"f)\x8e \x14\xc6\x1ctR\xca\x98yQhmV\xc2f\x8a=\xcd!\x08\xb0\x05Q\xef\x0d\xa0\xa9Y\x8b\xaa\xd5\xac\x024S0&\xa5\x8f=G\xb1\x88YaZv-Ji\xfc\x1b{\xd5\xed\x1f\xb0\xce\x14( \x183\x0f\xd9Z\x9f[\x90A\x00\x04\x97\x1c\xb0\x0e\xb0 \x18\x93\xb6~\xa5\xdbm\xcb\xe6\xa3\x00?\x01=P\xf2\xef<\x11S6\x84N\xd3\xedV\x93\xeb|\x14\x11\xcbm;\xb0\x99\xf5\x8a\xf4\xf5\xd8Y\x87\xb3\xdb\x91]\x11\xb0\xe8\x18\xbeQ\xac\x93Y\xa3v\xaf\xdbU\x156\xfcJ\x01\xfe\x90\xad\xd3\x83d\xc3%\xed\x12\xd6\x11\x1b~<\xa3\xe0C\x82G\xcd\x87I\xac\xc6'E4\xfd\x1c\xf3\xebC\x06!Fq\x02\x16\x84\xc6\x0fT\xc9Q\x14f\xb5c\xa5\x13{\xb0\x81;\xab\xed\xbct=xp\xf6IM\xd3\xaeWs\x9fqi3\x17\xa8\xeb\xa2*w\x7f\xd12\xd4\x88(\x19\xfeHB\xbb$\xa6u@\x91\x88v\xfb\xd1\xcb\xb8\x1f)$W\xd3D)\xe5\xe3h\x82\x0b\x8bt\x10 \xd7>\xdd#I\x8b\xd2\x08\x0e(&\x13\x9ab\x08\x94&i\x1dg_\xe9\xf3\x0d\x0d_p\xc6\xcd\n\xd2\xa4\xb6\xde\x8a\xdc\xc7TZ\x1f#xO\xe3\xbd\xbd~>>9\x8e\xcb\xe3\xfb\xc0PJ\x18\x8c\xa10\xa3gP1\x81\x8a\nxi\xbfg\xa7\x97<2\xbd.9\xd6\xad\xe1L\x89\x1c\x15\xf3i\xd3\xce\x14\x84\xd5\xcc\xa6\x99B\xe4\xb9b\x1d$q\xfc\xcd\x0d\x9b/\xe6\xd7}w\x1d\xc7\x93\xc2\xd5S\x00\x81\xabi|`H\x8e\xf9\x840\xdco\x1aG\xc5\x0f\x90\xf7\xbatzU\x14\xaf\xefdEb\xa80\x00m\xe0\x10\x9e\x13\xb7\xcc\x8cq\x87\xed\xd81\x8fb\xb0\xce\xa0\xe4\x84:\xc3(v\xec\xb0\xa2\xd8\xda\x19l\x89\xd8\x9c\xb1h\x96:]V\xbeP\xe6\x86F\xcemg\xb5R\x8e\x97\x98\xe5\xd6\xf9\x1a,+\x0b\xaf\x03A\xeb\xf0.J\xf4wm\xd1\xf2\n\xaa\xe5\xdba\xe4/\xda\xd2>\xdd\x85B\xc5\x95\xdan\xd7\xec\x8b\x07v\xddH\xb2\x0c\x13_I0>\xee_\xb3 \xb8\x06\xef|n\x9a-X\xf6}\x85\x06;M\x18(\xdf\x98\x12\xdbm-\xd4#\x97\xb2\xc0\x8bz\xa7\xe9\xa28\xedk\x0eTWeJ\xddq\xd7(H\x80\x9b\xa7\xea\x9f\x1b\xb0\xb1\xdei6\x1dY~\x9d\xd2\x87\xb5`7\x05\xde\x80y\x8f\xdd\x0c\xab\x0c)\x8c+\xefa\xed\xc3\x88\xf0D\xc6\xf3\xfb\xf3\xf5}\xd8\xea\x91TFB^\xc4+\x16\n\x12\xc1\xb0\x8eg\xe1\x8a\xb5\xdbd\x1d \xc6\xe5\xd0\xbe[\x14\xa9\x8b\x16\x8c\xa6\x1d[\x98\xa4Yy3I+\xb0\x12\xe1\xd0\xfcR\xb0\x05ejO\x98\x0d\xd7ri\xfcB!\x1d\xcb\x1bW\x0c\xd7\x8f\xf9M\xb4\x8cg^d\xc8\x87\x8c\xa6\x9f;`\xe3W\xfa\xca<\x11\xd7L*-e\x1e\xf38]x\x117%\x07>\xee/\x18e\x9d\xf2LHa\xa3\xd2\xa3 \x02\xc5\xf2\xd2\xcdz-X\x9a\x9e1]\x1b\xd8[J\x15C\xbee\x88u\x1aa\x0c\xd4\xad\xfa\x0d\xe0\xac\x9dAJ\x02\xd1\x9f\x8b\xf5\x02\xd6n\x97 \x08Z\xbd\xfe#\xbd\xf72\x94\xb8\xd4\xe8\x8a9~\x08\"\x14v0\x0d}N\xa5C\xc5nA^\xb7\x16\x00\xc7=\xbf\x8b\xb0\x98 5\x92\x16\xf3\xadL\\n\xeb\xc4%/\x07[\xf7sYd\xce+J$\x1d{d\xf9\x10\xa0_\xd8\x16\x81\x0fY\xb7s^,\x81\xa3\xb8j\x1f\xe4\xafb8';\xb4\xd6&\xbdo\"jL\xcb\xb0g\x05\xd6\x9b\xd7\xce.*,\x91\x9cDF\xf1!\x911\x12\xd1\x98D\x9dE\x94~\xe4\xda\xbd\xc9fzb\xb4\xd5#\x91\xb6\x89R\x8e\xa4k\xb5\xb0\x90v\xb7\xf6\x97se\xe8\x94\x1a\xff\xa2\\\x19\xd6uY\x18\xd8g\x0c\xe6\xa8\x19z\x83\x16\x9e\xef\x03\xedz\xd7\xa5\xc5\xa0\xf4\x0b1\xac\x94e\xb7Y\xa5I\xd6t!\x80\x8a\x12\x1e\x11\xd3\xcd\xad\x05S\xdb\xee\x94\xddB\xff\x88a\xace\xe2\x8f\xa7\x07\xef\x86\xa7o\x8f\x0e\xf1\x83\xf1\xe6\xa7L:\xc5\xb2ro\x95vJ=\xc7s\x14\x1b\xb74\xb9\x91\xfa\xc1\"\xf7\x9d\xfeM\x1e\x8c\x9d\x0b~\xa8\x16C\x7f\xb3\x9eA\xe60n\xda\x0cY\xa6-X\xb9\"\xef\x0e\xb3\xaf\xa0m\x8b\xe6a\x05z\x92\x16\x8b\x90 \x860'\xfd\xadc\xd7\x84Kh\xacBN \x86\x07n\x17\x0d\x10n\x9c\xaf\x9e\x99\x03\xef\xe2\xd1\x86c\x94\x1c\xf2\x08\x93[\x03\x96 \x18Y\x80\x94\x81\xe0\x82\xa7\x00\x08I\x96\xb3\x1f\xf2\xe3 \xa5\xc1]\xbb\xcb_vf\x97\x83\x08\x90\x99\xbe\x8b\x86\x0e\x10*\xcd\xc6\\21ek\xd9\x84\xa9Wf\xec\xd5JFqk\xce\x9b'\x83\x80\xa1\xa7,\xbf\xb30\xf9\xb4\xf5\xde\xc80\xf9\xbc\xa3k\x99|w>:\xdd\x05 \xad\xe2V*|9\x12\xa0\xed\x8f\xfdv1\x9c\xb6?\xf1\xcb\x8d\xc0\xeb\xd1\xbc\xa1\x8d#Tt\\\xeey\x9c\xe7\x90\xfc \xe2U,\xe3\x1b\xb6\xeb\xd8\x95m\x1f\xc6\x9e\xa1sLF\x8c\xa2+T%\xcb>\xf9\xccJ\x19FsJ\xc7r\x8a\xf0%\xc9\xdc\x8d\x03\xd2\x12\xbf\xd985-\x08^\xef\n$\xfaB\xfc\xd1S\xe3\x8c\xb4\x96\xfcO\x04\x1d9\xda%\x94j\xd0\xc1\xe1\xfd\xe5\xe5*Z\xc73\xea\xff\x01X\x9aC/\xac2\x0c\xa91\xed\xa4\xb4!S\x81\xa0\x98\xe8\xd9\x86\xf3\x98_\x9f3)\x99p\xde\x9b@\x16\x13\xc6Bf\x086)\xf1! \x9d_{\xc9\x1a\x96f\x9e\x08oj\xec\xa3\xa1w\xcd\xa4\x9fo\xd0B\x05\x81\x9a9>\xd2\xdc\nh\x0d\xab\x0eW&@\xa8\x82@#^\xaaGuo\xb6\xb8\xc6\xe6=\xfd\xd6\xd7Eq\x89\x1e*\xe9\x0b\x1e\xb6[\xa4\xcd-\x91`\xe7\xb9\xf9u\xbb\xb5\xa6\xc6\x81k\x95\x0d\x0b>o\x98\xc74Y\x9b\xd8[\xc9\xee\xa4\xa5\x82\x90\xe56\x97\xa6h\xab\xc5j/u\xd1\xcf\x8c\xad\x87\xcb\xf8\x86A\x99\xfc\xd7c\xf1c\xa0\xdd\xba;\xa8UaJ\x8d\x11LUeJw\xb03\xda\xa9l\xb6\xfb\x97\x85=5\xed\xcaJW\xbf76\xaa\x88\x7fj\x8eq\xfb\x7f\xe1v\xf5\x01U\x98hu\xd3\x83\xdasp?]2o\xc6\xa4\xf6\xe4\x98\xf3A\xc6&\xe9\x19>\xa1\xf7Yh\x7f\xce\x1c-\xa3\xab\xe5\xad\x98\xbfV:\xd8v\x9bKzes\xa7\x96\x8c\x0b\xcc\x1f \x1b\xeaG\x12f\x85\x07(\x02&\x8b!\xb7N\x16\x84\xdd#\"\xff\x1bD\xf8\x95\xf1x\xf0H\xc8^\xf8\xa4\xdd\xb2k\x98\xce&.p\x1f\x87\x05\xb44 \xbc\x8d\x04\x1f^%\x1b\xf9\x91\x03\xe4\xd8L)\x86\x08\x13\x88\x8dt\xe8?<\x1a\xca\xac\xa5\xa4VO\xab\x8fZ\x97a\xae\xc8\x17\xcf\x11x\x19L\x8c\x12\xd3^\x88\xe2\x88A \xcd\xd6\x8c}v\xf1\xcci\xad\xda\xdf\xefk\xb8\xaa\x03\xc4s\x97\x0b\xe0\x87\x19j51-\xe2_,\x98\xa7\x0by\xc9\x90\xcb\xc0\x86\x9b5\xb3\xea,\x03\x8b8\x9c\xd3h\xf5\xaa1\xa2\xe5}\xb5c\xc1\x8cna\x95\xb5&\xec-\x89W\xbci\x9d\xbb\x98\x08*\xb7[Xi\xf8\xc3\xf1v\xab\xd7\xca\xa8)\xeeikaq\xd9\x08*\x98\x88\xf2\xd0\xdd\xd6\xeb\xaaJ\xdf\xa2EI\x9e\xe9\x92\x06\xf7J\xbbM\x18\x964\xd2{\xa8*\x978\xac\xde\xf8\x16lL\xddnwD\x0e)\xdbHu\xd9\x1c/\xc5\x97\xcb\xbaA\x86M\xce\x8b\xea|\xf6\xf6\x9a%\xb9\xca6\xda\xa4j\x1dk\xac '\xc6\xdb-J\x99\x13\xfei\x16\xc2\x1c\xef\xaa0\xb9Fe\xc8X\xd0\xc1\n\x02Y\xf1Me\xbb\xc4\xdf\xb3\x92\xd9T\xdb\x1c\xb9q\xda)(\x8b\xedVZ\xc7\x1f\xd8&\x19jV!y\xa1Q\xc5\x85\"\x95d`\x04\x8bp\x06\"kB\xe3\x1a3l&\x94.P\xaa1\xd5OP\xbd~o\x10v\xa1z9XP\x1c\xc8\xd0\xaa\x18\xfbgT1\xf6\xdfV\xc5X\x860&G\x8c^\xa1\xb2 \xee\x93\x11\xc3\xe4\x92\xd5\x10\xe8F\x1fa\xa5\xdfj\xac\xc9-\x0d\xf4!\xd3ov\xb9*\x1c\x9aQ s\xa3\x92d\x0f\xa4\xd9\xdfF\xce\xb0?\xd7\x0dZY\x9a+y\xe6\xab\x15\xc5\x8b\x0f9\xe9,>YE\xa7nglu\xab_\xb4{\xc3\xbe/\xbb_\xf3\x86\xd2\xf5}.\xb9\xe5\x1d_/\x93\xabhY2\xbf\xbe\x8b\xf8l\xe9\x96\xb1L\xe3\xac\xa6^\xf4\xac\xde\xa1_\xd8\x02\x85\xda\\QH\xd5\xab\x9d\xad\xd8n\x0e\x1c\x87E\xfe\xb1\x99\xda\x15s\xdbiG&\xe7\xac\x14\xd0~\xc1r\x84k\xba\xac\xe26\xe6\xb3\xe4v\xa0\xff\x84\xb9\xa9P\x0cD\xd8T\\1\xe5\x81\xfa'<\xd7\xd6\xdfOL-\xc3\x10\x06~\xd0\xc0\xd3T\xf7\xb9p\xa1\xb4\xe3\xe4\xea\xee\xd8\xc4K\x80\xe2\xfc\xaa\x1b\x04-\xfb\xe5-\xacN\x1a\x04H\xb5\xdbS\xbag\xe5C\xe5\x85\xdd\x01-J\x91\xa2\xd7\x97\x0c\xdbWE#\x9f\xd8\xa0Rm\x80\x1a\xc7\xd2\xa6\xbdj\x8f\xc5\x9e\x02\xfdu\xc77\xfa\x90\xd5\xc6\x8a\xc3\xe6N\xea}P3\xf2\x10\xa5\x0c|4\xc9F\x96\xa8\xf5\x90m\xb7s\xa4\x84*\xc1\xbcH0o\xb5Y\xcax\xbdd\xc4\x9b\xc5s\xb8\xbaGzf\xda\xa9\x12}\xde'W?\x81w\xe4\x86u\xbc\xf7\xd1g\xe6\xa5\x1b\xc1\xf4\xeb8\xf5\x96I4\x83\xa0\xb1\xe5\xbd\x97\xf0)\x84\x8emR\xe6\xfd\xc3\xfa\xce\x18z\xf0\xe24YF\x92\xe91\xc2\xae\x0b=)6\xcc\xcb\xf0?|\x9ca\xd2\xc3\xc4\x0c\xf3V\x11\xbf\xf7V\x89`\xd8\xc7}\xfb\xc5o\x171P\x02w>%1G\xfe/\xd2\xc7f\\\xd5CzAP\xfe\xddlL\xc8\x8d40\xc8vO\xab\xf4\x91T@\xe5\x96\x94\xbd\xb1\x15\xfc\x19\xbb\xda\\_3\xd1\xff\x85\xef\x7f\xfd\x0b7\x10(\x01\xf3\x17\xfe\x0b\xff9\xd9\x00=f\\2\x01\n\xec\"N=H\x14\xeb\xad\x93\x98\xcb\xfc\xf0|!m\xd6V\xe4\x8aAM\xb5\\3O\x81\xc5]\x02\x9d\xc3\xed\xd6S\x12\x8e*\x16\xcbB\x07\xee\xfc\xc2\xbf\xdb\xa4\xd2\x9b'J0\x02}\x17\x9c\xe6\xd0\x14h\xcd\xe9\"\xd9,g\xd0@\xca\x18d\xc7X\xa8\xb1\xdc\xc8$Y\xa6:\xf1\x14\xf3\xd6\x82M\xe3\x94-\xef\xbd\xdbE$\xbdu\xcc\x14K\x98\xab\x16\x847MfpA\x86\x9aF>C\xdd\xff/\xfc\xc2v9\x17\xd1Jw\xa9\xc0\xb1L\x12\xb5)\xc1\x14\x1d\xa7^$\xbd%\x8bR\xe9\xfd\x7f\x7f\xda\xfb/]~\x0f*\xa8\x86:\n\x8e~\x1b\xb12q\x80c\x05\x0d\x02zG\xb0\xf52\x9a2\xb4?\xfez\xf2\xcb\xfe\xfe5\xf1\xf7}\x1c\xfa>n\xfb\xaa\xa5\x0b\x98_\x81\x0d0\x06\x18\xb3\xb3\x02\x91`\xa1\xee\x96[\xfc\xe2\xba\x81\xaf\xf7\x7f\xe1\x9e\xe7y>F&\xdb\xc0\x9b\x92P\xe3`{=\xc1\xad9Gme\xb2\x9aS[\xfb\xbe\x95D\x92\xab#\xd6\x9f\x97\xf0\xe3|_Rc\xddf\x8epJy\xd9\xe2\xedH\x9c\xc2\x158wzX\xec\xcb\xa7\xb9k\x1e\xf7\x9b\xfc.\xdfG\x9c\x1e\xc6\xe9:I\x1d_\xcee\x9c\x9eO\x17l\xb6Y\x96_\xaa]\xf6\xd90%\xf7\xbdQ\x15v\xbaB~\x97\x11_\x8b\xcf\xa6\xfb\xaa\x06i\xdf\xd7*\xb8C\xdenQ\xc34\\\xc6\x9f+5\x9a\xa4I\xd0\xeb?\xb2\xaa\x9a\xd8q\x1b\xd8\xa1\x1e\xba\x9dT\xcedox\xaeR8\x95\xc1\xc1]\x06<\xbc,\xac\x91U\xf0[\x83f1\xd5\xf2B8\x861\x17M\x9d\xe6\xdc\xf2n(P\xee+>\x82\xdcW\xb1\xaa^pj\x08\x02\x80\xa3\xd4\x0dv\xb2\xaa\xd9\xb1>'\x88\x9d\xea\xd6\x91\xa4k\x12uX\x1b\x93=[\x85\xfb\xbb\xf0i\x17\xea\x15\xbd\x05An\x9e\x11J\x964\x96\xf2\xc7&'\xb5a\xd5\x1c\x16o:N\xdfXoG @nbs\x89\x02\xae\xbd1\x01\n\xda\xe4\xf5x\xc0\xb61\xff\x9a\x83D6O\xcc\x11\x9f\xaa\x1d\xcd\x04\xb0\"o\xc3\xa7\xd1\xe6z!M\xf22\x08\xebQ,\xe26J=h\x80{W\xf7^\xe4Y\x85X)\x12V\x8c\x01\xdbk\xc2\x19\x97$\x17,\x16q\xaa\xc4\x8a\xdd\x91P\x03+\xc8\xdcF\x82\xe7\xd9k\x90IK\xc3\x8b\x8e\xaa6d\xdb\x1c\x9b\x11o\x1e\xdf\x99D6\xc9<\xe7[\xa6\xde\x15[&\xb7\xd8\xc7\xa1\xed\x08\n\"N\x18\x84{?b\x1ehN*b\xa5M\x90\xc4 %hi\xa5g\x1a\x81\x1a\x9c@\x16\xb5,5q\xe9d\x0d\xab\xb7[\xbd\x7fs,\x04\xafA\xdd\xd9d\x9a\x10;l\xcbf4\xfa*D\x8d(\x96t\x8e/'\xdaz\xc8\x9ejS\xcb\xf9\xdc\xb8\xb4\x14U\xfb\x19\x08#e\xac.\xf3K\xc5\x0f]\x0e\xfb\xd4DLc9)%\xb66\x98\xdc\xea\xf5\xfd\xab$Y\xb2\x88\xbb\xc7\x81\x8b\x1bW&p8\x9c\xe9|\xfd\xf6|\xcd\\\x9a\xf4\xee-a\xc5U\x08\xe2\xef\x8b\x8a\xfc\xab\xbd\xa4\x8f\x8a\xdb\"GJi\xc4F\xc6\xd5\x0e\x9c\xf9\xe5\xe6\xf8\xc0\x88\xd3\xe1w\x9d\x93\xd1\xdb\xac\x08@a\x99 \x0b\xfd\xad1\xa0K\x11\x94B\xdf\xfeXV\"_u\xb7[\xf5\xabf`\xdbn\x7fc\xe8\xb5\xab\xeb\xbe\xb65\x1b\x8cq\xddF\x1d3/\x00+\xc3\xf2\xbb\x1e\xfa\xf8\xa1\xd7\xedR\xdan\xcb @\xe5\xad\x95\xe3\x897KX\xca\x9fKo\x9a\xf0\x1b&\xae\x8d\xee\x91BR#\xf5G2/\x9aK&\xbc^\xb7\xab\x13\xdak&\xea}\x10\xc9Ut\xb5\xbcW\xd2\xab`:\x07\xd5\x14\xdc\xa6F\xa2\xd5d\xe1\x86\xe5\x81y\xa1\xe7\xb7\xd9\xb8;\x81\xe8\x85\xf52\x9e2\xd4\xc5\xd8\x895w^\x13\xb8\x85\x83Z\x9d\xa5/^&}\xd1nc>\x16\x13\x97\xcb\"\xd0Q\x1b-\x97 )~\x05\x86[\xfb\xda'o\x98c\x15\xf9\xd1\xd1[\x7fc}wa\xb9\xb3\xb0MiLu\x06\"G\x07\xfe\xd5=~\xd4@0;\xe9\xfa~\xe2\x1d+(\xf1d/Y+(USv\xa5\xe5\xab\x83\x9d\xd6\xdf)\xac\xa8\x9c`\xf9\xc1\xed\xb1P\xabr}\xcf\xfck\"\xbet9\x93\x93\x0e\x02\xaf\xed\x17R\xcehU\xcd\xa2\xe1d\xb8\xcaL\x98t\xe9\xc8\xba\xa1V\x0fOn\x858\x95\x1bRr\xc0\xd8\x92\xc2 \x04\x19\x9d\xcd\xb7\x9f\x19\x9c5lNC\x96\x03\xe6\xe7\xc7\x00\xb3\xfbJ\xa6\xc7\xf2\x87\xb4z\xd5\x04\"\xf5T!7zH\x9c\xbc\xd5&\x00\x9ceF]y[=\xcb\xe8\xdc\xa5\xd4t\xfc\xb0\xf1\xf6&6P\x90\xb11A/7\\=\xd9\xc0\xecW>a8|\xf1\xd4\xb6\xe4@\x87\xde\xe3pG\xf7\xf5#\xfc\x80maK\xdb\xa1\x7fP\xf2V\xf3\xd9Hm\xae\xd6\x89\xd4\x9c\x01K\xc2\x9d\x08M\xec\xd2\xca\xbf\x1a\x8bI\xbdS{\x12\xd22\xc4\x1b\x86\xbaM\xb7\x1b\xb1\x01\x0b\xb5~f\xc5\xca\x02\x19~*\xce\x18\xd81\xa9\xb1\x00\xb7e\xd85\xfc}o\xc3\xbb\xcb\xb9~6\xe6\x10\"\x11\xea\x85\xac\x1e\xd1\x1cnd\"6F\xaf\xd4\x91\xac\xb9\xc6\"\x82\xa0\xa5Pm\x19\xddc\x0e\x06\xe57\x0c\x89R\xd2]`\xd2 \\\xa3\x08R\x9cw\x8c\x84Cd\x83^idH\xbd\x0b\xff\xa6s\xf6+\xe6\xba\xa3\xf1x\xbbE18\x1eK4,\xd6\xf6@W\xdc\xe1\xce\x18\xf0\x13\xc6\xe1\x9c\xa3C\xf8\x81)jh\x85.G\x8f#\xdc\x95\x7f\x10\xce\xde\xb2\x0eh\xa9;\xb7\x03\xf8\x95\xc5\x00\xd9U\xb3$\n\xe2\xf3B>\xf8}{\xd4\x0c\xe9'\xeb\xd8\xb6\xed\xa9\xf9\xd6\x92nh\xbc\x04,\x1aK\x93 \xe8\x1d\xcb\xc2/\x10\xb6r\x8a\x00\xfcPt\xa6\x84\x86*\xd1\xc84 \xfd\xee \"\xc4\xdfJ\xe7Y\x0b\x9c\x1a8\xcf!\xd3\xd8\xd5p\xe1\x81\xe7\xb8-$1\xe5p\x16~\xe7\x9c?b\xf6t|\xce\xd6\x9c\x1cU\x85\x99\xd8'\xbaTQQ\xca\xea\xb9\x9a\x86])\x06\xef\xa4\xbe\xc7O\xfdU\x98\xdaXH\x84\x9cD\x94\xb5\xfd\xdc/\xe8\xdb\xfd\x9e\x8c\xa3\xc9@\xfd\x03\xbe\x8a\x18\x87\xea\xd9\x06\x93\xa2q<\xc1\x0e5\xc8\xdda\xc9\x98M\x06\xc0+]\xd0k\xa9I5\xd0g\xe6\x14\x1d\xf8 b\xeb\x83\xd0\xf6]\xfd\x16zvY\n\x97\xc896W\xf6m\xc2)\xc8]\xeeI8\xdb\xdb\xe4T$ \xdd\xa5\x06\xc21I\xabTY\xab\x80P@z\xc4\xc9I\xd2\xdcZ\xdd\xe4\xe0\xec\xdb\xa0\x0d%,U}HA\x80P\x93\xa1\xc4&\xfcq#\xd9\x1a\xa5-\xac\xcf\n\xd5\x1a\xb6\xb6\xce+\xe6\xa9=\x06yK\xe7\x89\xe3\xf4\x12\xba!/\xe2\xf7\xb9\x1a\xa9\xa4\xa0!x0?\xa9\x91\x81\xb3\xe5\x82!\xdc\xe4\xb7\x0b\x02\xe4|\xb2\xae;\x9b\x81\xf7\x80Y/\x1e.\x0e\x1e\x99\x80\x8a\xa5\x8d\xc50g\xc1\xa5>\xf9\xdd\xd2\xd7\xba\xf99\xee\x87K%w\x17\xf7\xbb\xb5z\xba\x00g7L\xc0\xd7\x9e\xf3\xd5\x1eA\xd6e\xa2\xe5mt\x9f\xaaB\xf6\xbd)\x9a'bC\xbe\xb1\xdd\x98(\xacy\"\xbc\xe7e\xf4z\xae\xb5\xf4\xb6\xff\x9cx\xcc\xa6\x96x\x0e\xdd?'\xdes\xdd\xc7s\xa5\xe4?\xb7\x83~\xee\x83T\\q\xc1/\x1b\x8fNS`\xe9\xcb\xd2\xe9\xe9e\x96C\x8b\xeb\x03Z\xbb\xbd\xef-\xee\xc06\xd2\xa5\x1fs\xc5\xb7\"\xa7|\xaa\xcb?\xe6\x97o\xa5\xa4\xe1\x10e\xeb\xd1ZN\x0f\xa2<\xfe\xb2[\xbf%\x9c\x92I\x10\xe8\x1d\x92\x14\xaa\xa4\x96\xdf\x7f\x1c\x9e\x9d\x1e\x9f\xbe\x0d\xbdCv\xb5\xb9\xf6\xe6,\x92\x1b\xc1\xc0S\xdb\xd1\x98|\x1b/\x97\xde\xe9\xe8\xc2\x13l\x9a\xdc0\xe1\xcdE\xb2\xd2\xe6\x8e\xd4\xbb]0\xee\xfd\xa3y\xab\xffCm\x02\xa3\x89v|\xb0v\xec\n2h%\x98\xc4A\xf0#\x83\x8ci\x960\x89\x1a%N$\x12\xf4+H\x18g\xc8\xe8 b\x98\xfc&A\xe4WR\x0bI\xf2\xc33\x98\xc8 \x88m\x1b v\x8f\xcb&\x12=\x96ch\xbbEn&\xa1w\xe1\x8f\xce\xb0\xe2\xea\xb0H\xac\xcfUJq\xaf\x8fB\xd3\xcfH\x96S\xda-i\x84RL\xa6t\x99\xa7\xb4\x9b\xea\x94v\xc5+\xdd\xda\x86N\x8d0\xb9\xfe\xe2\xb9TI6\xb8\xaf\xcd\x8fs\x8ax\x10l\x94\xe6\xc5\x07|\xbc\x99\x84kUo\xf0\xb7P`\xc4\xc8\x86\xac!=\xdf|\xd7\xbd\xad\xaa\xc8\xdc\xcdy\xb7+\x1b\xf64\x08\xcc\xd0\xe1x\xdc\xb2\xc8y\x17kYc\xf9x6\xec\xfc\xa36S\x16\xb2\x96,\x1d\xb2I%z'\x8d\xaa\x91\x97I\x0bN\xa5\xc0OM\xea-X\xf8\xac\x08\xfa\xc8=\x13AP\xcfi\xf0\xaa\x1b\x04H\x94\xdc\x12\x14U\x8f\x15\x8f'D6\xc7^\xef\xf5\xc0Wm\xaf f\x90\xeb\xcf8\xda\xe1\xfa \x0c\x89vR\x89\xb1{Xw)\xad<\xbcbi\x1a]3\xea\xbf9\x19\xfdxy0<=8:99:t\xf2kO\xcb\x90\xc8\xafY.r\xa0\xc9A\xab\x05\x99\xc1\x82\x80\x8d/'\x1a_R\xb8\xfcE\xe2\xd0\xe4\x0ck\xb5\xd4\xb7\xed\xf6\x02~}\xa5\x033\x8fX9 `\xe3\xee\x83^\xabI_\xd2\x99)\xa6\xe5kg\xd6\xb2*\xdd6\xc8?\xbc\xe1\"H\xd3\xd5\x0fz\x8e\xd6\x05\xad\xcf\xf4\xe6\xa5j\xc9\xa3\x9cZE\x1d\x10\xdbL\x89l\xe9\x1cL*\xdf^\x84\x80\xda\x14_\x1d\x1b \x18\xe1\x8a\x84)&?\x8e\xbd\x02\xd5t\xda\xec\xf47\xf7\xa3\x9a2\nU\xc7\xdd \xd6\xaf_T^\x13V\xb9Zl&\x1b\xb51\xcb\xdaO\xabY\x04\xacU\x00\xef\xda<\x8b\x129\x1b_: \x07W\xce\xa7&-\xb4~\xb7dSvCP\xf5\xaf%}XDi%kX\xad\x03xo \xa2m\xd8\x16\xa7r\xb5E\xe7\x11^G\"e\xc7\\\xb5\xdb\xebbLf\x88\xbf\xa2]\xe2\x9f&\xd2\x8b<-*\x02a\x05\xa9\x90\xebx\x10pC\xf0Wy\xa6\x078md\x92\x9b\xf0v\x0f\x13\xb8\xbfMh\xaf\x17\x0c*\xcfq\x10Q^b\xc2\xa9\xc2\xad\x08+\x90\xa7$\x1a\xa7\x93\xea~\xb2\xd4D\xb1\xca\x8chu\xc9r\xc8\xc6\\\xc1\xc5\x82\x02\xa2u\x04[%7&e\x10\xceHr\xcb\xbfg\xf7i\xd8\xa0\x0f\xeb\xf2\x9f\xd9}:\x94\xc9\xaa~\xc2\xd5\xde[n\x9aP\xc4\x17\xb2.0.\x8f\xee$\xe3\x10y\xd7\xd4\xf0\x1c\xf9\x87\xf7\x81\xc8]\xba\x1a\x9c\xe5\xf0\x9aG9\xcd\xc1\xdcw\xc7T\xd9|g$\"\xe6\x10\xb8bl\x90\x914\xa1\xe6\x98EJbzI\"\x9a\xee\xb8\xee\\U\xdfy\xe9J\xdd\x1e\xab\x1d\\Q\xa6\xfb^:\x04:\xef\xefH\x0b7\xa9!\xd0K\x02\xf9\x92\xadd{\x039\xd3u\xe6\x9f~j6\xd6\x8f\xb1\\\xe8\xe8\xc7.\xe9\x12\x86\xc9-C\xd3\xdc\xe6\xbd\x04\xfc?\x97\x8f\x05\xa5\xd9\xa3\xae\xb7\x9c\xcdl\xe0\x98\x1eOq0\x03\x86c2\x9b\xc0\x9be\x94\xca\xefyr\xcb5z\xd9\x98\xaeH&+{\xcd\xc0v\xbbk9t \x8a\xcd\xb5\x92\x0f\xcdU1@|!\xac\xed\x8f;\x9d\x89\x8f\xb3\xa6\xa0\xad\x7fa&\x93]\xcd\xa6Oo\xb7X\xa9W\xdd\x01\x03=\xb2\xf4\xbd\xd6\xcf\x93s[|\xf98WU\xde\xd5\x1a \x84\x0eV\xd3]\xe8\xb54I/4\n\xf9D\xcbm]\x12\xcdfl\xe6d\xbeH-\x95\xd5_\xc0\xb0Y\xfal\xb2Aj\xc9i\x16\x8e'\xf6Q\x17\xad\xa6\xca\xa8\xc4\x9f8\xf4iW@[\xd4(_\xd5\x87P;\x88\xda\xd8\xb6\x0e\x0e\xab \xb8l\xbbe/\xbb;n\xc3\xd2\xc9x'\xdeh#\xbdd\xee \xc5\x9e ^\xc0\\\x8fL\xeb\x83\x81\x8b\xff\xc1\xa0\xab\x1e^\xb9\x17\xe1\xb9\x19\x1b\xf7$\x04\x13\xf4\xc5K\xb6'\xf3\x18\x02k\xfd\x85f\xab{\\\x92\xae\xd2\x97\xf5\x11\xc5\xa6\x02\x8c\xc8\xbd*\xa4u\xf8m3@\x8cn\xc6,6W\xf6\xf5\xce\x1b\xc2\xde'\xb3x\x1eOu\x80l\x1e\xee\x15Bx\x05 6\x8f\x96\x9eM\xd0\x00\xe1\xc1\x11wEZ\x00*\x04\x86i\x86\x0f\xd7M7\x8d\xa0M\xab\xa7#\xcb3\xa6U\x86\xa8\x05< Qp&\xed\x84B\"\x9bi\xbay\xb5\x8a \xa3\x01\xa3\xdd\x90\xbdJ\x06\x8c&!{\xd9\x85\xa0\xa3\xf7\x91\\tV\xd1\x1d\xea\x92\xa4\xcd\x14\x05\xa3M\xee\xe9A\xb2\xc7B\x9d\xabI\x0e\xba\xa1SK?\xc6\x1cI\x92\xec1\\\xbb\xa4eZMU\x147\xa6*zd\xf3\xb2\xf2\xce\x93f/s\x93\xc4(\xb6:\xde\xb4/\xe1\xaa\x8b\xa2,\xe14\xee@\xe9\x8cS}\x98\xc3L\x87\x87\x1c\xe8XS\xfe\x02\xe1\xa69\xb2\xbemlU7\x077\x8f%[\xa5\xc7\\&\x9a\xa0\x9ae\xb2\"\xa5\xa1Vn\xb7&\xf5\x80N\x86\x06k|nEHN\xa2\x86\xf4A)\x8a\xaa\x81\xb9M=7cJ\xdf9\x7f\xf0\xb2\xc7\xfeh\xe0\x84\x84\x8b)\xd8\xb4hL9\x82,\xe1\xda\xfd \xe1\xb8 \xafR3\\\xd6.\xf4.\x97\xad\xd6\xcb*\xcem/\n,\xb1`\xdbV[bL\x92\xf2,\x1d\x08\x1d,\xe2\xe5\xec#\xec\xf3\x1d\x1bBG\xc4\x02\x93\x0f\x028rk\x93@\x91\x98&\xdb\xad\x18\xecD4{\xa2\xd7\"Z\x91\"\xa98\xd0\xcb3@\xfc~\x95h\x179\xa7\x92\"\xd9T\x8cwND/\xf5\xbf~\x0e;6K\xc8-\xcf+o\x1f\x8b\x11%\xbegY\xcd\xef\x9d)\\\xe3$\xe9C\xce\xf0\x9bdaU\\\x89\xedy!\xa4\xd3\xf1\x03\xcfk\xd6\\\x9a\xd8\xbdi\xc5ZY!\xcc\x94L\x97,j\nhrv)\xea\xe2\x8c\x98\xc3\x12\xa5\xe1\x15Z7\xdb\xa2\xdc,\x87Z\x0e\x1f\x7f\x92\x13\xfa\xc1\xbc\xbf\xb4.\x1f\xfa \xe5\x05\xdb\xbe\xbe\xdd\x06\x9b\\QE:\x17\xbd^\x17\xd1\xf5\x84\xfa\xefa\xe9\xed\xc8\x0b\xdb\xc3\xfbh]\xc7f@\xe6U\xb4\xf6l\x80\xab*\xe6\xad\x93\xe5\xfd\\Q\x08}H\x95y\xd3\x8d\x80\\\x0eW\"\xb9M\x99\xe8x\x07@h\xae\xa2+\xb6\xdc\xcbKC\x82G\xc1\xf6>\xa5\xfb,\xfd\xd3\xfe*Zw>\xa5V\xdb\xbe\x9cE2\x02\xa3\xc4\xfbhm&\xb9\x88\xd2\xf7\xd1\xba\xfcr\xc5\xc4\xb5\x9b\xdc\xc8\x15\xdfU\x85&\x1bV\xd1\x01\xb8X\xabf\x89j\xad\x9b\xd2\xf1\xb5V\xa3\xe7\x1e\x97\x9a\xd6\xad:L\xd8\x8e\x1d\x1c\xaa\xe6\x84N\xae=h\xdb\xcbgc\x130\x95\xc9o\xc4]H\xbf=B\x0c\xb7\xfd\x81OZ=\x0b\"\xd3\xa6\xberI`\xc2d%\x9a9gH\xb6\xa8\x89\xe0\x84\xa0\x92\"\xfc\xb8!\x07Q9cZ\x99\xa0\xe7\xf3\xd3TZ\x16\xc6\x01Q\x18\x07\x80V\xf3\x81\xa5\xd6\xa1\x1f\xcdf;\xd2\xf7J}\x99\x9eMk,\\X\xf6%\x15\xb5t\xc6\\\x9bJ/u\xdb\x9a\x9b\x82\x83C\xbf\x8ef\xb3\xe2\x1d@\xb1jGU@xd\x89o\xf2,\xc4-T\x9d\x92\xafkW\xa6b\xc6\x8f\x8b[\xd6\xedAG\x03+\x0b\xbf\\/\x14\x94\x0f\x1ei\xb1Hh\\\xe0\xaa\xc6\x1d\x13\xc6e\xba\xd4*\x9f\x81\xcb\xac\x9cnE\x16d\xa1\xa6\nJ\x0b\xbdw\x80\x18G\\\n\xc5V@U+w\xe7\xa6\xbb\xb6\xa1$\xb6\x88\x8bN\x84\x17\xda\xa5\x00_\x8b\x85E\x19\xfa\xf5~\x1fG4g\xd7pp\xdb9\xe3\x91\xb8\xb1\xed\xaa\xe1\xbd\xda\xaa3=\xc8\x01\xaeD\x81j\x02p\xd9\x90\x00\\\xa3x\xbe\x84 \x15\x83G\xd2S\x17&\x88\xd2\x92\xb9\x02\x8a^\xbd.\xa9\xce\x8a\x88\x02\x96I\xf5,f\x8e\xdf;g\x98\xdb\x17\xf3\xf5\xc7\xa4\x82\x1b\x86\xf2\x18\xbaC\nQ\xc8\xdc\xb8\x97\x93\x1c 7\xdc\xc0,\xa74jW\x9aI\xed@\xa4\xae\xd2*v\xe2_\x96\x9fXl\x82f\x9dT\xec\x80\\\x19LU+\xfeN\xd2\xaf\xb7d\xc9\xdfb _\xdbl:+ZX/j-\x8b;=4Ow\xd0|\xd1\xf1\xa3\xa0\xb8\xcb\x0fQ\x05q\xd5\x19\xa1g\xa3\xe5\x80\x86\x8cpiU.\xd3*\x9eR6\x89\xbd\x03w.\x92\x95\x06\x8dn&\x17\xbd\xbe\x97\xe8\x81\xb3\xbbF\x0d\xf7en\xac5\x07\xe8\x98\x0e&\x1a\xcbv{\x82\xc9,\xe1,l\xf5\xb2\xf0A?u\xb3,\xab\x8c\x8fq a\xbc\xff\xe2\x01*\xc2\x9c\x0f.\xdf\x080,{.O\x0fx,\x88\x1e\xb3\xc0\x93|\xbc\x86\xa8\xed\x1c\xf5\x18}\x92\xf4\x92\x18IK\x1f\xfeL\x04\xde\x996\xcfL\xb2\xba6F\x8en\xda\xe1D\x94BF\x12\x1a\x15\x96\xc6<\n8\xd6Q\xc0\xc5+]yIS\x14\x9b\x8d\xfb\x02\xe2\x86\xc7\xdd \xd9\xd0\xe5\xb87\xe9\xdb\x1b(\xc8\x86L\xf5\x913'n\x97\xef\x88\xdb\x8d\x83\xc0t\x06\x0e\xec\xa4\x88\xdb5g\x84\x92R\xdc.\xb7\"e\x1e\xb7[\x9a6\x08s\xbb\x18\xb3\x01\xdb\xa9\x8ePE\x8c2c\x83\xab\x117\xb8\xac\xf2\xb3\xda\xbe\x8f\x9du\xb7\xc1hl\xcc'\x8a \xd5\xef\xbbd\xcd\xfa\x8c&\xb4)\x02\x18*\xdc\xe9NHB\xb9\x82a\xa9i\xa1\x88\x1267eB\xd2\xf0<\xbe\xb0E\xe9\xfbh\xad\xf3&\xeb\xb0\x82\xe2p\x95\x8e\x84\x9f.\xa34e\xa9Q\xeb\xf9\x82\x89X\xea/\xef\xa35\xb8\xf9\xdc\xf6LF\xa1\xc6\x01\x93\x86)\xc3\x99\xb50\x8f\x01n\x1c\x86\x12\xf3\xa1C\xbf\xad\x19\xbc\xacIR`\xbfm\xde\xa0\xfd\xca\x9a,\xeb\x89;%\xe1\x95\xe8\xa7\x081\xbb\x85\xe1N?\x8b\xce\x89F\xe7\xe2\x95\xb5\x0b\x98@\xc5\xbes6\xe9 \x17\xac'A`\x9a\x04\xfdK\xd4.X\x17_\xb8`\x1d\xd7Sd\x1b\x13\xf5\x17\x90\xb7\x81\x0bs\"\xe8=\xe2\x94\xe1\x81{%i\xed\xfeU\x8e\x07\xbb\x9d^)\x841\x8d\xbb\x13\x8do\\\xdf\xea\xcc\xf1\xc0!\x90\xdc\x826,\x96\xfb\x9aIO\xbd\xd5\x0b\x9d\x87G\xf6]\xbaj\xabu\xb4Y\xa1\xa9\xff=}\x99nag\xcb\xf0\xe37\xaa\xca\xb2\xe8(\x0b5.\xc7\xb3\x1d\x07\n\n\x90\x13?\x8d\x7fc>yh>\xc2\xf8;\xb8\xa3j'+\x9d\x8b\xecV\x83d2\\I'\xf1a\xf4\xdd\xa8\x86\xf9J\xe7\xa7\x0fY\x0d\xabs \xe7\xcb\x18\x9d\xa2\xa4 \xd0K\x1a+\xe22\xa5\xb1\".|\\\x8b\x80Z\x0e\x96\xe1\x08-\xf1\x84N-\xdeK\xfc\xc0,\xde\xcbG\xf0^\xbax/\x9b\xf0\x9e\xe5\xb9\xb5\x0d\xde[\xf5\xab\x9aZ\xe3\xbb\xf3\x06\xf6f\xb4t=\xf7z\x8d\xdd\x19q5l\x9f\x92\x14\xd7\xa16n\x03&?\xee\x83\xe7\xb7w\xc8\x07\x95}Tx\xaeFHb\x9d\x9f\x9e\x99\x98n\x85\xc9:\xb7\x16\xf1|\xdc\xf6\xbd\xac\x9a\x19\xe4\xd1\xc8\x97]A&O\x8f\xb1\xc9\x10&\xa7\x15\x03\x16\xd8l\xce$&'`\x84z\xff\xaf5B\x9d3Y2B\xb9F\xa7c9\xa1'\xd2\xd9<\xe5\x8bJ.\xa3\x8a\x0d\xea1\xcb\xd39\x93\x8d\x96\xa7s&wX\x9eR&\x0b\xcb\xd39\x93\xff\"\xcbS\xca\xa4cy\xaa\xc7\x7f\xb1R\xfc\x17#\x02\x1cX\xac\xc8\x9e\x04\x99\xdc\x9amP\xff&\x95\xe0\xdf\xc1y51\xd4j\xc1\xff\x81\x1c\xf8\xdf$3\xa74\xce\xa7h\x04\xe4\x94\xa4\xff\x83\x02\xf2\xbf\x86\x11>\x12\xaf\xf6\xcf2\xc1h6{\xc4\x88\x86r#\x04xw\x8a0\xa2F\xab\xdan\xeb\xa0cV\xf3l\xdb:\xde\xc2Z\xd6\xeaf/\x98\x10$\xebm\x08\x06\x02\xf3US|D~yv\xa3\x95\xee\xb1\x11\xe6v\x1c\xd7\x04\x969\x83\xfew\x1b s[S\xb3\x11\xf2\xbfi\x83\xfc\xa2\x99\xb11\xda\xe4\xbfc$|\xd4p\xffET\x86sS5\x8b\x0d\xab\x12\x8c\x9d\x06\x86.\x91\xbb,\x0b\x0d6\x87\x9c`>fu\xd0T\xb6\xb8\x9f\xa4M{D\xd4l$c9\x16\x13\xc2\xc7b2y\x8a\x85\xe41\xbb\x90\x1d\xd5\x97l>\x8f\x80\xb4\xffEsK\x85c\xfc\x93v\xa1\xd2*\xfd\x0e\x03\xd1\xd3T\xae\xc3/\xdb\x0b\xaa\x8a\xffv{\x0b*\xbb\xd4l\x16\xedP\xac\x1dmF\xd1\x9a')\xd5J\x82\xf9\x82R\xfdo\x96'\x9f&\xb9\x9f3\xd9,\xb9?\xe9j\x8a\xba\xe4]\x11\xa2+2\xf4\x18\x1d\xff.\xab\x99\x83\xdcJ<>\xac\x88\xc7 X\xbe\x97\x98\xbcyT0.\x9d\xd3\xd0r\xb1QZ\x0c5\x91\x91\xb8f\x92\xba\xb7e\xa6\x0d\x9e\xd8\xea\xa9G\x9b\xca6\xf7\xc9\xeas\x07\xdc\xf8c\xfdF9Q\x94\xee\x10aM\xf3-\xd9\xa4\xcb\xeb\x02\x873\x9b$\x1f\xeaL\x84\x94BG\x1d\x07\x88(\xe7,\xc6\x02\xccD\xb28\x8dYx\xf9\x14\xf3Eq\x95%5\xb8?:\x10\x95\xb1\xdd\xf2\x06\xe3}\xce\xa2\xca!\x19\xda\x15#\x9e\xec\x8a)GY>\xe2\x8a)\xc6\x92\xb34\xf1E\x9f\x8c\xa8\xfad\xca\xd1\x93\xd9\xe3\x0c\xab\xa0C6G\xcc\xf7\xec>\xb5I2\x9dW\x05\xcaq*\x9d5\xc9=\xca\xf6r\x1b\xcdAZ\xad\x86%\xb4%\xad?G<\xea<&\xd2\xf8q\xb8\xc96UE\xa6\xda\xe1\xde\x12bA\xd4kYwl\xda\x04v\xc0\x0e\xfe\xd5\xfd\xc5\xc9#\xc1\xe4\xdb\xad\xb0\xab\xe3\x08`\xb5\xe8\x9e\xa4@\xa5\xa4@%\xad\x9b\x14\xee\xad\x06p\x14~t\x03L\x0d\x94\x18\x13i%\xfe\x1d\xa2\xb7 \x8c4\xec\xd4\x8fr\xcc&\xdb-\x82\xbf\xf4\xd1\xb4[\xdd\x1di\xb7\xa4\x89(T\xc4\x00\xc2\x12\xaa \xf3l\x01}\x18\x1b\xe253\x9c!\x96\xab\xea\x10\xb2dG:\x9c\xcd\xe2\x9c\x1e\xd4\xd6\xd8^\xcd\xd3\xbc\xc2j\xf1\x08\x9cC+-!7\x84\xcf\xe6\xa8\xab\x80U\x96\x8f\xc0\x00\x19\x81\x94\xf4#\x868\xc6\x041Ji\xb4\xdd\"A\x19I\xa8$\x8a\x98|)\x1f\x89 \xc6\xdbm\xab\xd7\xa24.\xdd\x8b\x1f\x04\xe6\xa5=\xde\xa6\xb4\x8b]\x99Hd\xd3\xa2\xbd6\x8b\xf6\xbaa\xd1v$\xc1yR\x02\xb5\xaf\x0c\x9e\xef^\xca\xbcDe-e\xdd\xb2\xbcJn\xcaR\x8e\x95\xeb\x0d\x98]\xf1^\xee\xdcq@\xba\xa3Gw\x9c,\xef8\xdd\xb3\xef\xd2kq_\x1c\x84/i\x12u\xb2D\x12*\x94\x96\x9b\xdf\xcd\x05\xbf\x14J\xe4a\x04.\x97\xac\xeb\x0fN\x8b\xb9\x0eA\xaa\xf4\xd3\xda!\xaa\xefsR\x1a\x041t\xda\xea\xe1\xcc\xa4*s 4f\x13{\xa8\xdf2\x103\xeb&\x06\xe2\x9c+H\xca\x11\x18%\xdd/\xaae\x00(\xcbj\xcb%\xbb\x8e\x96\xfa\xb2\x8e\n\xd3.\xc7\x81Z\xec\xb5\xe9\xac\xbcd\x0e\xd7.\xa8\xc7\xdb(\xf5\"s\xdf\x07$\xb1\xde\\/\xc0\x04\x96w\xe4M\x17Q\xcc;\xde\xc7\x94y\xcfg: \x11{\x9e_-(\x13o\xc6\xa6\xcbH0[m\x0dG\xc2\xa1M/\x96\x90\xca6\x9e\xaai\xe4\xed\xc7\xf2y\xea%\xb7\x9c \x1f\xff\xaf\x92Z\x9bi\\\xa3\xf0\xf3\x14=>_[GP\xda%\x15(\xbe\\R`\x9b\xb11\xd9\x89\x8dI\x10$\x1a\x1b\xbb8{\x14\xfd\xcbs\xbef\xf2\xfb\x8a\xb2w\xa3\x1d\x0e\xfd\xa6VjQ\x94\xe3I\xa3O\xc2\xc6R>\xcd\xd4\xd7\xe0\x9a\xe8\xc7\xe3\xde\xc4\x11\x1e?\xb3\x1b\xe9 r\x94\x82\xacfb\x1eG\xfa({\x9eHF\x0dI!\xa2\x00\x91\xe7\xa3\xac$)\xd2\x97t\xbfn|]@\xeb+';\x07sO\xd3l\xb7\x082\xa1\x15\x81\xaf?VT-\xddn5\x96\xf6\x8d\x1bK\xfb\xab\x13K\xdbj\xe9`Z\xdd\xec\x8f&\xa4\xd6I\xbe`\xb2s\xc1iX\x93\x93\xa2H\x17\x14\x04\xe66$\xcd\x02!H\xb7t+\x0f\xd8\xd1mn)H6\x10\xc9d\xd5\xd7ifXy\xe9tR\x9a\xc2*\xc6j\xc9y\xe4\xc0\x89`\n\x11\x12\x94;\xc1A\x12o\xb7\xbc\x14\xa1\x06Y8t\xdfBC\x0b\x0e\xf1\xc1Te\x10@\xe2\xac `c9!\xbf\xba\xc3\x91\x03\xd5\xb6\x9br\xab\xd6Z8\xb7\x97\xde^\x14 \xb7L\xfa\xad|Vy\xb2\x9d\xa6|\xbfA\xa0\n\x03\xb4](\x98\xe7j\x9e\xecr\xae0}m\xdb\x11dR\x8c\xf9\xb5\x97&+'cH\x01\xf9\xc1\x0fEz\xb5\xb0>P\xf0I\xab?\xb0\x18\x03\x16\x16\xc8\xa5\xd3\\@K0\x14\x0d\xbe\x9fs\xbc\xad[ \n\xfcz[M\xc9Z\xd9\xdc{Nb~\x9b\x18II\xb6y\xee\xa7\\\xd5\x82Il\xb7\xbd}Iio\x1f\x12\x80\x9aC\xb3\xdb\xad~\xe0e\xdbj\x8b\xca\\MkQn\xcf\x98\x9a\xec\x14\xfd\xd2R\xe8\\\x8f\x16\xa9\xab\xbfL\x1d\xa7\xfd\x1b\xf0=\xfcl\xe8\xa0\xc9\xbf\xd0\xa2\xf9\x1b\xee\xd8y\xcd!\xb1T\x9f\n\xf3\xc7\xbaY\xef\x8c]\x1f\xdd\xad'&\xb5\xa6}\xab\xe17\xf1\xcd90\xdfoKJ}\xbf\xad\xb3\x8f\xe5\xc5N\xe1,z^\xac-[\xb4-\x07m\xde\xa2m\x1ev\xa9\xfa\xd1\xdbokH\x85\xeao\xb5\x81\xc3H\xb2j\xdf\xaf\xf5\x8d\x06N\xab\xf5z\xda\nT\x8c\xaf\xe1\xfaF]$\x08\x8c\xc1\x08v\xcdhn!E)m\xfa\xc0q\xb9\x9f\xf7Q\x1d4L\xaa~_\xd1n\x10\x88v;\x93\xf4\xaf:w\x88\xfa\xcbm~\x8c\xbc8\xd8\xb8&>\xa5T{%\x96%\xba\xe5fY\xf9\xd2BO\xa9t\xf9\x07\xd9P\xee\xfeV\xadO[\x94n\x82\xa0\xd5\xb4\xbb\xa7A0um8\xd3\xc6\x14\xe6\x1b\x9d\xc91/\xb5\xc1APJz\x16sO\xd6_\x15C\xcd\xf4E~T\x14\x83\x17p\x10]\xa8M\xd6\x8fi\xbc\xdd\x8e\xb5<\xbd\xa6(\xa1 d/\xb2\x07\xd5\x94\xf0\xd1_\xef\xed\xf5\x95&\x92\x8c\xd7\x13Eb\xed\xf6\x89\xf5o\xd8sI\x9e\xcd'\xd6O\x1c\x13\x0dZ\xb4\xce\x13v\xe1Vq0\xbb\x18N\xa9\x8f\x16Cr\xbc\x9e\x10\xae\xfe\x11{=\xd8\xf4\xc5d\xf2\xbc\xe0s\xea\x06\xdeHLf6\xd5A\\3 \x89zO\x95\xde\xd3\xa4\xc1\xb9IB\x0d\x87\xb7 AK<\x1dRi\x86\xef@\xba\xd1\xf9S3\xf2\x95Z\x87\xf02\xc3\x19.\xd2\xc6\x13\x8ez\x7f\xc4\x84\xa3o1\xceH\xd5\xfaT\n\xcd\xd1\xe2Y\x83\x82\x089\x88\xdeGrA!\x0fF\x10\xb0\xac\xcf:\xecN\xadSJy]\x80\xd4\xb7\"],\xe24\x08\x8ag%\xc7\xd5\xcb\xea\x9b\x84\x83@\xffm.\x93\xb2\xe5<\x08\xd4\xbf\xcd\xdfe\x10()\xb1\xb8\x8e\xd1At\xb8\x99\xaf\x0c\x90FP\x18=\x00}\xa3\x944\x8e\xfe\xf4gLb\xcaQ\xaf\x87ID9\xfa\xf6\x05&j\xae\xff *\x19G\xbd.\xc4\xf5&\xc8\xbf\xfd\x9c\xfa\x98l\xa8\xe8h\x94%k\xba\x1clB\xc5\x04:\xb7\xb1\\$\x1b\xa9\xef\xfb\xdfn#\x07l\x0dp\x8e\xd1\x94\x80\x9a\x93\x06A\x8c6\x84\xe1\xc1t\xcc&t3f\x93\x10\x9e\xd6\xc87\xfb\xdc\x87,$\xeaeV\x9e\x8bY\xc7>\xdf\xe1\xd3\xc9L*f\x8e \xa7\xeb\x98\x84;\xb2QZ\"\xbc>\x9a\xcf\x15RV\x03}\x8b\x803\xea,0s\xe65(z3@\xa0\xadn\x88\x8a\xa1>\xe4\xb3\xd8 \xbf\x08b'\x89\x85Ao\xbf\x9b\x91\x08\xe1\xd2\xcd|\xf5I\xed\x84r\xa6w\x1f\xb937l\x95\x82\x0d\xc5\xfd\xc3\x0de\xae\x14xEY\xa6\xba\xbf2\x84\xf6*7\xe4:\xd9\x9fs\xab\xb2\x8b[\xda9B\x04x\xb9\x97H\x11\xc1\xdbH\xcc\xce\xd8]F\xf7\xa7\xce%fdS\xe0@\xc9\xf2\x88\x1aX\x8f\xb9R\x00\x93)\xceo\x93\xd8\xb8\xad\xd2)\xe14\xea\x14\xbd\x0fr\xe2\xb5b\xab\x04\xa3\xfcgQ\x04\xa3\x0d\xc6a\xa5\xdc\x062\x15+\xa6V\x92\x07\xc5\x0e\xe1\xe1\x0e\\\xdf\xcd\xee\xf2\x98\xe4\xd1\x0f\x8f\xf8\xe5\x99\xa6\x14\xbc:\x1b@\xe6;\xfa\xf0\xd5WZ0\x0f[]\"\x18\x9f1\xa1\xa3\x8aW\xebH@\x18\x04\xb8\xe4Z]\x87\xaa\xdc:\xae\x88\xcet\x11/g\x82q\xb8/J7@\x04Xc\x0d \x1bN\x0f\x88\x81\xc2\xa1\xf0\x06\\G\xb6\xd5\xcf6\xe2\x8b$\xd6\x9b\xe5\xdb\xc6uVe_7\xef\x87\xc5{\x125]\xbf\x05\xf6\xfb\xb4\xf9K\x9c\xb3\x9f(\x08\xd2\x81\xc3\xf2\xc1\x12`\xdcr\"\xf4\x0e\x13\xc8\xa6\xb3\x81\x1c<\xba;\xb0H\xe8A\xd8\xeb@\xd3h\xc5<\x19\xaf\x98\x17\xf3\x7f\xf8m\x8e\xc3h\xbbM\xf5\xfc\x9c\xb6\xed}H\xe0\xc1\xfd\x87\xdfN\xda\xfe?\x94x\xae\x86\xa5~;\x03W_\x94\x80\xb2T\x92\x9bL\xd4W\xde\xf6\xff\xe1\\\x93\xf4\x0f;\xaf\x7ft|\x9c\xdd*^\xbe\xbe\xb8_\xb3\x94>\xd8\x91\x86\x9f\xedb~\xce\xc8mi\xed};E\xffK\xba-~h\xd69\x8b\x0b*Z\xad\xd26\xcf\xf5\x81\x9ab\xf9\x98\xf2Zw\"\x0d\xac\x0f)lZ\xc2/I\xad\xb9\x08\xf9\xe2\xcfZ\x88|\xf1M\xcf\xf1u\xc56\xa2\x16D\xa0i\xb2\xa4\x8e\x0e\xb0\x8c\xd2\x05K\x9d7\xd1F.\x9c\x9f\x8b$\x95\xceO5\xa5\xcaW\x1d{S\xbc\x8aR\xb7~\xca\"1u_\xfc\xbaa\xe2\xdem1\x92\x8bJ\x13\xea\x95\xdb\xa2`sM\x83e\x07\x92g\xd3+\x92\xabg\xcd\xbe\xfd+H\x1bAZ]l\xcbAZ\x86\xbc\x96\xa6\"\xcdu\xd9\xa0^\xdb\xd04\x89C\x99\xe9\xebrVQ9> \xe9\xc4\xa9QnLd\xef\x15bE\xf41sm\xdc\xb1>\xc4\xbb\x8a$\xc2a\xdc)\x9d\x16YE6Q8\x8c\xf7\xa3X\xd2\xd8\x08\xd6\xfb\x7fG\xe3h\xef\xb7\xee\xde\x9f;\xed\xbdI;\xc4\xfb1I\xe9~8\xee\xee\xfdy\xf2\xf5W\xfbd\xa9\x8a\xfc\xb2\xff\xcb\xfe\x00\x0dZ\xbf\xec\xe3\xf1\xdf\x7f\x19\xfc\x92N\xbe\xc6\xe8\x97\xc1\xf8\xef\xf04\xf8j\x9fL\xe9\xd8\x7f\xf0\x89\x9f\xf9\xc4\xdf\xfa\xc4\xff\xe5\x17\x9f\xf8\x7f\xf7\x89\xff\x0f\x7fb\xd3j\x8e\xfd\x97>\xf1_\xf9\xe4\xb9\xff\\} \xbe\xa7J\n\xf5\x0fW\xffH\x7f\x82\xc9\x86\x8e\xfd\xe7E\xa5)&k:\xf6\xff\xc3'\xfe\xbeO\xfc\x81O\xfc\xbeO\xfc?\x14%6\x98\xcc\xe98\xff\xfa\x07\x7fBft\xff\xef\xe3\xb6\x9e\xd7p\xefo\x97{\x93\x87.\xf9\xd37\xd9W\xfbd\x01Sn\xf8\x86Q\xe7k\xfc\xd5>Y\xd1\x87O\xd1M\xa4\x89\xbf\"\xdd\xbe\xf3\xd3W4\x9c\\\x7f\xb9\xc8=}XH\xb9V\x1f\xd5\xdfT=\xcc\xf5\xef\xebd\xbd\xd0\xfca\x1e\xeb\x189\x1f\x8a\xfa\xf9cj\x9e\xe7\xf9[S\xc7\xbcV\xd5t77\xb01_8\x1b\xf3\xca\x91EY\x10(\x142\x88\x06\xd7\x1d\x95P\xa6,\x1fh'|l\xb1K\xe8}a\x9a#\"s\x91Jo\x99*\x01\xd1\xba\xa5\x83\xb3\x8eF\xa8H\xab!\xe3\x1f\"\x11\xad\x98d\xc2{\xbe\x11\xcb\xe7\xdej\x93B\xbe\xb5\xc8\xd3i\xfb \xb0\x8c\x82\x9ck\xc18\x86\xbb,\xb42\xef\x0f|LR\nW\x1c\xc4A\x10\xbft>\xfd\xc1\xc7\x03\x7f\xe0\x87\xfe\x1f|\x90j\xd2\xf52\x96(\xc5\xfd\xe9\xb8;\xa1\xea\x9f\xfc \xdb\xfe/\xbf\xec_+\xbc\xd2=\\QF\xa7:|;\x05\xc9\xfa\x8a^u\xa4\x88W\x08\x93\x16\x0f\x02}\xa3\x99nOuSJ\xad\xa0\xa4Yv\xc7\xa6\xe8\n\xaa\xde\x95\xf2$\x01\xf1\xb9r(\xcfU\x85N\xdd\x8d{\x13r7~1\x19 \x97\xc2\xa97.\x85\x93\x83\x1b\xb3*N\xa9N\xba\xb9J\xa5@=\x9b\xbe\xa3\xe1u\x9e\x02P\xb7\xeb\xfbn\xab\x0f\x99\x89\xceW\xf3\xb8\xa5\x91;\x8f[=\xbb\xcf\x14\xdd\xd2\xdbqw\x82;29In\x998\x88R\xb8\xd4\xa3\xc4\x03>\x13\x052\xd3\xf1\xad\x85O\x16\xcf\x11\xdfno\xb7\xdb\xab\xce\n\xb8\xdc\xfe\xdf\x15E\x19\xff\xfd/\xbf\xecO\xda\x7f1\x7f\xf7M\x84\xc2\x88\xfa\xfb\xfbJV\xc9[\xea\x92\x17\xb8\xdf\x1am\xb7\xb7Ap=\xbe\x9dl\xb7\xc8\xe9\xe7\x05.\xb3\x9dV\x17zl\xa9\x92A\x80t\xb5\xd6\xfd\xf8v\x82\x0b\xf5\xff\x88\\\x92s\xba\xd7#\x17\xb4\xdb\xbfxi]_\xfd\x0b\xa5\xff\x03^\xa1O\xf4*\xc7\xaa\xf9\xf8b\x82\x15 \x06\xab\xd2\xf9v\xfb\xe9\xe5\xb9\xfayN?\xe1L\x17\xbf\xa4\xfa\xdb\xe0\xaa\xe3\xa4\x9cC\xfe_|\x1c\xd6^\x91sh\xedH\xcd\xc2$\xc7\xbc\xc4\x1ax\xf0\xf3\xb2mR\xc9j\xd69c\xd3d\xc6>\x9e\x1d\x1f$\xabu\xc2\x19\x97\xe8\x08c\x98\x00X&\xf4$\xd6\xa5I\xa8Y~\xea\xd7\xa7\xb2~|*\xea\x1d\xfc\xba\xb2\xcb\xe7\xf0\xecb\xb4\xe7\xeeh\xcfm|\x98B\xcdwI*\x11\xae\xb0\xf2\xd2\xaf\xed\xd6\xd7\xf2\xc5\x90\xfac\x10J\xdd\xaf\xe3\xee$\x08\xfcI\xfd}\xe9W\x9e\x84\x14\xe2[ZCl\x17\xf6\xa0\\\xcbl\xd7\xfd_:\xfb\x98\x1cS\x05)r\x90'\x1c\xbcxy\\\x00\xeb\x03=\x18_@s\x1f\x82\xa0\xf5\xc1\xa0\xea\xccA\x9a3\xb5qNi\x97\x9c\xd0\x0f\x16\xd6\xa7/O\xfa\xa7\xed6\xfe\xd0\x99.\"q\x90\xcc\xd8P\xa2S\xfc\xaa\xf7\xe2?\x07gm\xea\xdf\xf9\xe1Y\x9b~\x18\x9f\xea\x81\x9e9\xcd\xaa&\xdf\xd3\x83\x1c\xa6\x17\x98\x1c\xe6?/\x14\x06\xbc\xa1v\x18\x0b\xdc\x7f\x13\x04\xe8\xbd\xf6\x13\xbf\x19\xf7&\x98\x1cvL&U\xf4f\xfcb\x82\xd5\x0b=\xa8 @W\xd4\xdf\xf7\xdb\x87\xe60J\xc7\xc7\xed\xab\xea\x9a\xbc/>\xea\xabG\xb3,k\x82\xf1\xab\x17\xdf~;(W\xf5\xfd\xf0\x91\xf5-\x93\x082\xb4\x87\x01\xf2\xd2\xa2#\x93\xe1\xf9\xc1\xf1q\xf9\xbd1\\\xfef\x82\n\x13!\x15\x19o\xe7\xbfB\xdf'\x1f\x1bP\xa9\xc0\xcf\x8f\xed\xdf\n\"\xdb.\x8a\x92\xa1%\x80;Fli%iD\xb2\x17X1\x89\x16\xa5W\x80\x9c\x06\xb8WX\xd3\x99\xd5\xf8\xf3\x04\x9b]H\x8e\xe9&\xdf\x85.r\xbd\xa6\x1b\x83\\\xb0#\x8b\xed\xf8\xda \xc2W\x94\xf1\xda&\x7f\x8d\xfb_QJ_\x07\x01\xfa\x8a\xb2t\x1a\xad\x99\xaa\xa0\xb7\x1e \xf6ks\xde\xe8+s\xd1\xce\x8fN\xd3\x8aGi\x02\xf0c>}%H\xe7\x94\xf3Gw\x13w\xc9\x8ff\x01~u\xdb\x18h\xfb.4\xf3k\x99;\xe5\xed\xfc\x8a]vR\xbcn\xeb\xeb/\x90\xf3\xb1\xc4\xbf\xe0\x15.\x0f\xe2\xd7'\xb1\xab+[\"\xe7\xa0W\x98\xdc\x8f?O\xccQu\xbb\x82A\xd0*\x15\xabUS\xcc\xbf\xcc\x8bM\x80\xac\xee\x1a?Xl\xcc\xbf\x1a\xda\xf5\x8e:\xc5\n4\x04N\xff[\xfb\x9d{&V\xb3|x\xb2\x12\xba\xe6\xb7\xa4.\xa7\xd7\x02_u=\xc5\x05\xa0\x13\xb8\x9f\x9a\"\xd6\x84-\x0c\xe3B\xb4\xf9\x8fo\x86\xfb1\xf1C\x1f\x13\xd6\xa6\x8a\x0b\xf5o\x9c\xa3:\x86c\xab6 \xafO\xd1\xc6\xb9+|\x81\xdfp/|D\xdd\xdd6\x88)k\xe7\xbf\xc2\n\xdc\x91\xfa\xaayLyO\xe5\x98\x15\xfa\xb8LVB\x7f\xec\xb7Ko\xda\xfe$_\x9eD(\xb4\x88\xdb\xb4D\x13\xb0\x8bz%q\xd7\xc1\xb0\xb2\x8b\xc9\xf9P\xd0\xcb\x88\xdet\xb4\xf4\x19\xcf\xefK\xd8i\xe2\xd3J\xab\x1d\x05\x81?\xf0\xdb\x11,\x89]\xe9 \xf0CE$\xa4\xc5\xff\xbd\x9e\xe2\xab\x12F\\\x96Q\xb6[\xd4\x92\xdb\xed\xfdXN\xb0=\xda1@1\x08>m\x14\xabf\xe1\x04\xb1\xa6:\x1cX\xcbP\xa2.\xd6\x19,\xf6\xfd6\xc78\x8c\xb7[U\xc7\x87,z\xfe\x1f|H\xcf\xeb\x16\x15\xd4\xff\x83\xdf\x16\x98\xa40\xde\x16\xa5i\xe9{J\xd5,RLd;n#Ny\x81>\xe3\xc1\x1f&\xfb\xd7\xa4\xd1q\xd0\x84y\x19\xc6\xb8\x8dRZd\x89P\xf2\xb7\xff\x1f/\xbe\xf11n\x8b2\xaa\xd7\xd5\xec\x92\x87\xbc\xa2 \x17\x9a3\xce\xf7Oc{5\x05\x1c4\x92\xb2Bb,nZ\xd3\x91\xb9\x8a\xa3\xdb'\x8c\xca\xac|QLL\x04\xad\"\x0f&\x11\xed\xf6\xa3<\xb7s?\xb2T>\xa5b\x1cM\xfa|\x9cN\x00a\xc6\xe9\x04\x84_Mw\xc1K\xb4 \xbe\x0fz\x84\"\n\xc5\xd17m\x8f(\xe8\x03X\xc2\x99\xc5\x97 h\xb1|\xcfb\xe7Vdwh\x0c\x93)\xed\xf6\xa7/\x97v\\S;\xae\x0d]\x8e\xa7\x93\xbeo\x9b\xf0u\x88\x1d\xe2\xe3\xcd\x84\xb2\xf1\xa6pM\xdd\x8fy\xde\xd1\x04\xae\xe6,()w\xc9(7\x16\x95\n)m\x98I\x063\xb1\x8d\x06A\xf1\x0c\xb8]LK1\xd3\xfbq\xf1yR\xcct]\x9d\xe9\x9cv\xfb\xf3B\xe2\x9d\xdb\x99\xce\xe8z\xda\xf0Pdk\xe93\xebG\xd8\x99\xa2\x01\xcb\xc8\x12\x19\x82\x86\xb4\xd5Bv\xc1\xf5\xdfB \xfb\x8b\x8f_uq\xfe\xde\xe0\xd8_|\xb0\x16\x98\xbd>\xcc\xdb2\x8d;\xdd\x0d\x0bbVl\xcd/@\xcc\xce\x08\x15\xfb\x00k1\xce\xbc5\x93\xdbn-\xc7qJ\x0e\x8a\xc7\xd0\xf7q;/>\xb0\x0f\xea\xf5N\xa6\xd4\x1a\x95\xc3\xaa=\x87:\x9a\x9d\x917\x07]\x83\xe0e[\xb6\x0c\xd0l\xa1\x1a\xff\xb6<\xe1R\xc1\x1f\x94\x9b=H\\H\xce\xa9Y\x01K\x1b\xb7[;\x90W 1\xfa\x1d\xdf\\\xd4\xdd\xd1O\xd8`\xe8%Q*\xe6'j\x8b\xf7?\xbd\xa2\xdd\xfe\xa7\xbd=\xac\xab\xa0K:\x1a\x7f\x9a\xe0\xc1\xc8\xde\xf5\xf1\x89\xf4ph\x9b\x19\xa0\xd2{\xa2\x94\xd3\xf0\"\x08\xaa\xaf\xf7\xf6t\\\xc1m\x10\xb4>\x83f\xdb\xbf\xd8\xdb\xeb_\xe0\x82\x14\xa8&q\xbfu\xebl\xc4\xedv\xa4M7\xfb\xf6MA\x12\xd5\x0c]6tnE\xdbQ\xc1\x84JR\xf3H\xdb9|\xa3\xb5\x0c\xc9\x01}RG\xfd\n\xa93Hz0\xf0\xfd\xd0Bm\x90\xef\x87\xd0\xf7\xff\xc7\xb6\x84\xdd\x13\xe8\x96\xde\x16\xac!\xc7\xc0 h\x1d\xa8\x9f.\x94\xf2\x01;x\xe9\x00,Du|\xcdQ\x12\xffO\xed,G\x02P\xd32\x92\xc0\xef\xe6\xc8\xa4\xe6]x\xa7@\xd9\xac\x0d\x03)\x974\xd5\x86j\x86\xfb\xc0X@\xf9B\x92J\xc5\x15rE_q \xe9\xd8\xc2\x89\xa2\xfc\xb9]97\xf1\xe4\xa7-0a5[\x11\xab\xc6\xf8\xd9H\xa4\x87\xac\x12\xf8\xb53\x925\xa70\xc5A\x82GB\xa0\xbf\xd5.\xd7^\xcf\xc4@\xbf\xf8/\x1d\x04\xdd\xfb\x13\xee\xccw\xc40k\xc5\xc6\x06Ao\xb7\xc8>\xd2\x87\x0c\xf7\x13$!\xb49R\x7f\x89\xc9H\x14wt\n\xd3/\xf9\x82yG \x89KY\x05L\x0c\xe29\xf8\xc0!\n\xf4|\xc1\x98l\x0cI|\xcf\x9c\xa8\xc5\xa2\xecA\xc2\xd3\xcd\x8a\x89\xc6:?\xed\xaa\"\xd9]s/\x7fm\xac\xf1>\xe2\xd1\xf5\x8e>\xb8;\xae\x8b\x05[\xb1G\x87t\xd1T|\xe7p\xcek\xa5?\x88\xe4&\x9e\xedh\xfc\x93[\xfc\xf2\xf2\xc3\xd9\xf1\x0f\xc3\x8b\xa3\xcb\xcb\xc6\xc2\xbf\xb9\x85\xf5I\xd7\xb7\x10\xe5o\x02\xb0\x1b\xaa\x9c\x96\xaa\xa4ic\xa1\x8d[Hi\xcd\xf7K6\xcb\xb5\xfc\xc6*wN\x8d\xcf\xec~.\xa2\x15kn\xfc\xc4m|\x932\x80Ic\xc97nI\x13\x1b\xdaX\xf0\xa3[\xf06\x96\x8b\xddm\x1e27.\xf6O\x7f\xac\x05\xc6\xea\xfd\xf5m\x0fN\x19t8\x8a\xcc1\x83o\xe1\x98\x81z\xf8\x06\x93\x0d\xe5\xe8\xcf\x7f\xc6d\xad\xfe~\xab\xb4PUt\xed\xb8_gE\x18\xea\xec\xff\xdc0T\xad\xcb\x96)\x98s\xd3\x1f\x1bw'\x13\"h\x97$\xf91\xb5\xbex\x99\xf4E\x9b\xf6\xb0\xbd\xa3~,&\x84\x8dE\xbb\xe7\\_\x9f5\x06\x15z6R\xa58(\xea\x9e\xe7\xcd\x8f!\xea\xe9\x82k\x08\x15\x07d\x07\xc5#\xb2\x91b\x0d\xe7hm\x04\x84b\xb5yd\xab*1\x9aCx+\xb9\xb6\xeb5\x17\x8c\xfd\xc6\x90\x92\xd8\xef+\xef\x14)\xcd\xd7\xfa\xc6\x89\xbe\xb1/\xdd\x08\x9b\xbc\xe0\x95k=k\n\xb3\xdbn\xfdb\x9b\x15\xf5\xee\xcag\x80\xec\xad\xf6E\x17:\xb8\xbe\xd8\xa2\xc73\xe3\xc3\xcdO1\x81\xbd\xb8\xc3\xf8M\xe7\xechxpq9\xfc\xf0\xe1\xf2\xfc\xe0rxqq\xa6:W\x1f\xccO%d\xce\"\x19\xed\xe96}\xf2\x996\x9dH\xb5'O\xfcw\x17\xefO\x8e\x96La\x8c\x1fs\xf3\x9e\x8c\xa8\x7f\xa5\x8f\xbe:\xe7\xd6\x0e.\x0f\x8f\xcf\x87\xafO\x8e.\xcf?\x1c\x1d\x1d\xfe\x1c\x04\xb5W\xdb\xed\x97\x86\\-\x9f\x0f\xbe\xfc\x01\xf2\xe7\x90#\xfa\x90\x91\xcb\x86\x138\xbc\xc3\xa7N\x10\xdeyy/V\xf7!qo\x8b\x96\xafz\x03\xb9\xd7\x0b\xbb\x98\x08\xda\xeb\x8b\x97\xf9\x8d\xd1{\xbd\xca\xcd\x96\xb5@\xf8!\xf7 \x91\x83\x97L!\x00t\xd6\xf1\xce\x19\xf3t\xb0\xc7\xfe\xfeu,\x17\x9b\xab\xce4Y\xedk\xe8\xefM\xed\x92\xa6\x0do\xae\x96\xc9\xd5\xfe*J%\x13\xfb\xebh\xfa9\xfa\xff\xb9{\xfb\xed\xb6mlq\xf4\xff\xf3\x14\x12'C\x03&\xf4\xe9\x8f$\x94`\x9d4M\xa69\xa7Mr\xeat\xe67#)\x1eZ\x82d\xd6\x14\xa8\x92\x90\x13\xd7\xe4\xac\xfb4\xf7\xc1\xee\x93\xdc\x85\x0d\x80\x04)\xcaI\xdb3\xeb\xaeu\xdb\x15\x99\x1f \xb0\x01ll\xec\xbd\xb1?\xd6\xac\xa9X\x9a,z;\x11Fi\x0f\xdaN\xbb\x9b\xe5\x9fT\x0e\xb6U\x9c\xb46q\xc2Z!W\xb0\xcfB\x8e.\x02\xde^\x1dXH&\xaa\xaeRg\xeaqa>\xa4nG\xe5L\x15\xf5\xa6\x05#&g\xacO\x12k\xd6\xc6\xc9\x88\x9bm..&-\x86\xec\xc2\x89\x04\x83R\xcaL\x1bq~\x89\x06O!j\x94\x02L\xd5B\xfb\xb9\xc1\x8d\x82\xe2\x97\xb9)\xd4\xa0\xfd\xb8\x8b\xea\x16}\xa5\xede\xab\xec\xa5U\x1c\x98e\xbb\x1d\xcf#\xed\xfe\x9e\x89\xe6 \xcf\x89 \xf0_kE[G\xaa\x8a\xcb\x12\xa8Zm\xa7#+X\xb3:\x8c\x95\xf9Su,\xd2T\x16J\xa7l^\x8d\xdf\xa1\"\x81\xec\xed\x0d\xf0\x85\x9c\xd0Iq\xe5;\x8e\x8e#\xf9\xe2w \xce\x0dD][\xb2\x94\n{\x1d\xfe\xf1\xc9\x80<\x99\xd4\xaa\x07\x9c:\xfa\x86\xff9\x84\xa3\xa2\x08\xc6\x05PY\xe3b\x03_]8\x9c$\xca\x05\xadar\x8b9\xfd\xc2\x94\x9a\x8aU\xf4,\xb5\x8e*`|\xe5\x0c\x9b\xc53\xb6JO*\x15u\xa5p\x012\x06\xb7\xe6\xee\xe5\xe1\xb9S\x87g\x12K \x8d\xee\x1f\x9e\x99\x02\xc4\xea\xec\xa0\xb2\x1d\xa38b\xa4O\xc4\xfe\xa0\xe2/\x0df\xad\x92\xc1\x1f\x1e\xbbD\xaf\x91r\xbc\xde|a\xbc\xd6I\xbc\xdb^\x86\xbf2\x15\xa1\xf2\xa7\x90\x8b\x93\xa1\xda\xf1\xcf\x06\xc3*\xb59\x1b\x0c\xd5=\xf8|>>\xa6\xa0A\xfa\x8b\xac\xfc\xc0v\xd6\x97\x14q\xc4\xc7\x0c\xc8\xa0\xd0\xe6*%8\x92 \x9a\xfa\xe4@\x94\xd3TW.\xc8\x15tQ\xff\xdc(4,\xc6\xbdV\x02\x92\xd5jF'\xa6\xc9\x88]\xd0x\x84Q<\x1e\xd3\x01\x1e\xf7]\xf7\x12\x0d\xce\x89\xe3xf\xf9?2T\xb1\x1e(\xab}\xc8\xc0S\x1d\xbf\xb8\xd8#B\x9a\x8c\xc2q<\ne\xd7k\xfd\x0e\xe7\xb4_\x1c\xc3\xea\xa8\x8c\xf6x\"\xe6\x81\x98\xd6'Q\xb9\x9d\xa4\xe3h\x94\x9a\xcaD\xb0\xb6\xa9y@\xc44-uBVSl\xeey$\xf0<@T\x88\x81\xbc?c*\x03r\xd9\x8b\n\x8d\xac\xd4e,)\xaa\xc0BP6O\xd4\x87p\xca\xe6\xb4?*#\xf5\xf3Q\x04k\x84mR\x89\"\x92`\xc9\x9d\x17;!\x9c\xa6%JI\x11@\xcc\xca'\xf4\x96\xfc\x8d>\x84\xa9Rg\xfa\xed[\xb2K\xd9\xcb\xcb\xcbw?\xbc\x81X\"a\xcc\xfd\xf6\xbb\x9c\xfcrh/\xa9E\x0bVVZ\x7f\xb3\\>\x957\xa8\xb1\xb4\xee\xaa\xb8\x03)]\xa2\x87\x9c\xfc\x8d<\xe4\x05\xbf\xb9\xae\x04\xde.\xa2&KJ\xda\xb6?\xed\x1ah]\xf7\xd6u\x9f\x80\x85`{@\x9a\xb7\x9a\x82\x87\x82C\xb7K\x16\xb1\x85\x88\x93\x17Q\x84^\xe3\xaf\xe1\xcbc\xd75\x82\x8e\x94\x8c\xe4@\xdbB\x94\xeb\xa2o\x10#1&qw\x1b$\x8c\x03\x87\xe6\xba\xf6]\x85_\x8a1\xceseK\x83\xf3\x12\x1b\xdf4\x06\x06\xff^\xae\xd2\xd1#{m\xc2\x8a8 \x7f\x0b\xc5\xcd;=\xb6EU\x96\xfa\x9d}j1\x04\x83n\x8f\xa5\x1c\x7fQ\x8c\xbf5\xfa\xb0-\x04Q\x14/\x02\xc1\xfer\xf9F\xfbN4A\xa9?\x96T\x1d\x95\xd7Y\xd6\xc7\xde@S\xee\x0f\xc1\xc1p\xf2\"X\x1b+Y\xc9Z \xbd\xbb\x18\xf8`\x0d\xea\xf9\x86\xb9\xdaCO\xd0\xc4\xe9\xa0\x9e\x8cr\xf0\xc8{\x89b\xec'p\xf9\xb3\xbc\x04U\x86\xdc\xa9\xe5\xc5\x1bISu\xe6\x03\xe31(\xe1\xbc RI\x14^\xc7\xd5\xd9\xb0\xd8\xc1rx4i\xd66\x97\xea\x91\x0e\xdd\x0e\x99)\xb4wTIj\xf6\xf9\x96\xef\x0b\x89\xc8\xae\x11\xefW\x08INt\xa0\xf6\xbb\xc2<\xeb\x12\"5\xabwv5&\xeew\xfe\x18\xe3$\x97,|S\xa1\x86\xacD\x85&r\x02\x00\xf3\x92_x\x0b\xabt\x8f\xb1\xfd\xd2\xf8\xe8|\x0bE5u\xe8\x0csj@(y\x13\x80@CXB\xa0]\xbb\xe0A\x0d\xcf\n\xacR\xc4H\x16{$\xbbA3\x01)i\xab\xa5x! u\x1cI\xf9G\xf1\x98\x97\xe4>\xa4?\xe8@\x13\x85\x80\x1a\x9a\x8d\x80Y\xa3\x10J\x1e\xaedi\xea\xdf\x04\xae\xdb\x07\x8bE\x9b\xeb\x8a\xe8'\xcf\xe9\xae\x1d/\xf6\x8e`\xd3<\xf2B\xefHn\xb1\x0b\xc9\x00\xd9\x1f\x07\xcd\xbe\xc0\x85U{\xdfu\xd1\xc2\xa3\xcc\x93{f.\xb7\x08\x8f:\x8e\x97z\x91w\xf4\xb00R\xd7\x91\xb7\xf0\x8e\x9c\xbc\xd8\xef\x8e\xf2\"\x16k\xa2)\x98\xe6h\xbe{d\xff4\xa4u\x84\x19=99f\x1f\x85\xed-\xd0\xe9\x94qNYN\xfe\xdaD^\xbeCg'\xcf\x06\xc4P\xc2\xbf\xd3\xde\xc7Yz<\xeb\xcdz\xdd\xe3'\xbd\xf5\xc6\x8a\x12Y\xb0\x84jQ\xd3rW\x9a\xdc\xfb\x0c2A\x19\xba\x12\x94/\xc3\xc9\xbd\x1f\x92\x94\xc6\xddm\xb4[\x87<%\x8b\xf2e:Y\xfb)\xd9\xc1\x92\x8b\xba\x01\n\xc0)oNVU\xd1\xc6\x80 t\x10\x1e\x81Er\xff\xc0\x90\xf0\x9c\xdc\xb1<\\\x8b!,\xbe\xd6\x91*I@R\x12\x91\x05\xd9\x91-~\xd0\xc1\x1e\xb9\n\xf6\xd8\x1a\xf8:*\xdf\xceu\xcfO\xa91v\xd5\x83\xd8\xb7\")$\x9e3\x02\xfb8\xe5\xd7\x00\xd1\x10[C\xf3\xf9\xa2\xd0\xf9I\x065;\xeeU\x8a\x9d\xf8\xba\xd9\x85i\xb6?\xf4\xd5\xc5`\xe8\x17M\xc4\xd3\xfe\xdcK\xa0\x0d\x1d\n\xc7/j\x85V\xb6\x13]\xb9\xef@\xd7S\xd6\x19\xfaI\xc9?e\xc7\xbd\xdc)\xfd\xd5\x85dD\xaa\x98\xbaU,\x8a\xca\x9eR\xa1\xc5\xe0\xdcm\x9a\x93\x88\x0c\xd6\xf9qaC\x9f\xe0\xc2\x82\x81\xc3\x99\xbfz\x91t\nq/\x81\xa8\x82\x13\xa7\xebx\xc2g\xb9\x1d\xc5\x83\xa9\x89\xb0\xb8\x99\x00\xec\xa3\x1d\xd71\xb6\xd0EF\x1a\xf4w\xe28\x98D4v\xddp\x12zN\x0b\x9c\xb2[\x0f-\xb9\x90\x9cV\xee\xf8e\xc6B\x1a\x10Nc\x92Tx\xe1\xd9\x0c\x1c\xb3g\xb3k\x878k\x07\x93\x1d\n\xb3\xac\x1dO\x1c\xc7\x8fIT\x9cU\xed\xe4\x96\x87\xa6\xa5[(\x99VHy\x8c\x1f\x86\x8a\xf1\x8a\x0b=\x85\x9c\xa3\x8a\xe3\x15\xc7\xb0\xea\xe5s\x1a\xdb\x8e\x80 Y\x82\xdb6\xa9 \x1f\x1d\xa8\xd3HX[\xd3\x15\xc0}\x91\xe7s\x8c\xc9\x8d\xb2\xed]\x18-\xc4\xa2\x9b\xb0\xe5nQ\x89\xb9bo\x9e\xfa\xbc\xe7\x12\x0d\xce0\xf9N\xbeS\xe9\x03sL\xe4\n\xc7\xf6Y\x96\xe3\x90\x1bP2\xfc\x0f\x04\xfeP\n0}\xe8\x8c0\xf9?\xf4\x7f\xba\xe6\xc4\x9a\xfcwc\x91\xff\xa2\xe8\xbf\xcb2r\xe0\x7f\xc1\xe4\x1f\xf4/v\x08i\xc6J\xea_ &\xa3j\xc1\xe8\x7fp\x96\xfdWy*%\xbeT\xfe\xbfq\x96\xfd\xa3,\xcf-\xbdbC0\x1bu\x88\x15\xa6\xef\x15\xd9\x81\x0df\xda\x07\xe1S\xf2\xfe\x01e\x108\xa3\xf2\xe9\x0f\x10\x05\xa2\x1e\x03D\xd0\xa0 \xa3Jk:\x91;\x17\\\xf9LsG\xc0\x87\x1f\xe2\x19\xd1\x83*T\x94\xce\xc1\x10q\x19\xa6\xc1uT\xe3\xb8\xbePQ\x83\x001\x80\x90a9&\xd3\x03U\x12\x0d,1\xcd\xcf\xa5\xdc\xf3x\xc7u\x87\xff\x82\x1e4Q\xf7\x1f\xb6 [\x85\x9f\xfdv\xd1\xca_\x19_\xc6\xc9{x\xcc\xd2\x9ch\n\xef\xf3\x1cW\xa0\xa9\x96#\xbc<\xb8\xb5aP\x11X\xaaP\xa4\x08#\x00\xbf2\x95Y\x96\xecM\xafj\xb0\xf2l\xae\x82\xbbTO\x83\xfe\xa7k\xec%\x8c\xb5J\x947\x14\xfb\xef\xbdb\x8b\x9c\x94\xf14\xf4\xe1T\xc2\x0e\x0bnF\xcf,\xf7\xf2\x91\xd6w\xec\xf9\x11\xb0\n_\x8cx7\\\x12\x95\x1a\x04g\x19\xab0\x88\xd6;\xf2\x0f}\xbe\xaeH)\xe1\xa5\x8b\xc9\x8bd-e\x1f\xadM<\xcc\x8e]\xa2\xc1\x90h\x82\xa0\x1b4_)\xd3$u-Y\xa1t\xd1),0:\x8e\xa7\xdfTZ\xa4\xa2)#\xd3\x9a\x89*s\xbe\xcf\xeak\x1e'f\xb4\x87\xa6/:\xff\x98\xe3\xde\x9a\x84\x8c\xf6>n\xd2N\xaf\xa4%\x01\xb3\xd5\xb3\x05}\x8d\x19q:O\x06N\xcd{\xb8x\x1f\xca\xf7\x9b\xb4\xe3\xa8\xe9J\x1b%,\x0e\x81\xa9Y\x96\xb5\xc1\x11\xdbX\xed\xe6\xc4R\x0e\xeb\x184\xfa pZ\x0b\x92\xf5H\xd4@\xed\xbd\x9e2$\x05^eK\xbb\xd1\xd7f\xa7\x85\xfdX\xcfhBTI\xc2%\xe7\x08\x8ckSi\x140\xc4\xb1\xe7\xf8\x0e\x81\xd2\xc0\x97$\xa3\xda\xcb\x96\xe3\xa1\x98r\xa2\x83p\xa3\x10\xa4n\x9ce\xfbg\xe9\xa1\xeev(7H\x87C\xe8\xea\xf2p>T\n\xbf0\xcb\xe2V\xc8[\x8bn0\xd1\xb8\x13b\xad\x7f\xf1C\xcf\xd9~v0\xb0Hj\xb8cR:\xfd\x83A\xcdd\xca\xe5&^\x86XH\xc8\xd4\xc9\x9d9\xf6\x13\x8bUX\xd8iw\xeb\x99\xe5\xaa\xea\xa9\xe9\\+\xa5XU)E\x07\x18\x9c\x18PBem\xd3p\x0e\x15b\xd7\xadU\x98\xe0Il\x0f\x7fL\x12\xec\xeb\xf0\xc9Iio\x1c\x1b\xf4N%\x1e\xca!\x82\x94\xf4\x92\xcdi\xb0\x95\xf0\xef\xe0\xa5\xe9P1\x8c(\xa5rY\xa7\xe5\x12q]\xeb\xa6\x1b\xa6\x10\x0b\xaf\xa8)\xcb\xdab\xc2|\xd9\x03\x10C \xc7~%\xd0B\xc2&|\x82\x98&,\x88k]\x15\x88\x9b\x18\xfb\xcc\xdfH@\xe0t\xd0\xb7\x8dY\x14\xbbe\x05gc\xe8\xdfb\xae\xa0\x07\xed\x0e\xe2\xdb\x02,\x0b\x86n\xd0\x9aLY\x81\x02\x1cc\xecC\xf0\xb2\x82\xbfR\xf1\x10\xcc\xdd\xbeu\xca\xb4?W\xc3r\x03\xb2\xb8\x8e \xd7\xb4\xb6\x9b\xccg\xcaX\xe2My\x11\\\xb7]G\xb9\x9c\xac\x1a\xeb\xbe\xba\x82\xa9\xbb\xbar\xb4\x89\x91\x1d\xf6[?*&\x17\x1eXH\xbedU\xe3L6\xe5\xf3\xd1V\xce\xb3\xebn\x99\xc4\xcb\x1b\xc9>\n\xec\xcb7T\x94\x93u\xf3o\x9a\xac\xf2\xc4\x004\xae\xa3x\x1c\x16Z\xd7R\xe3\x1aNc8N\xdf2\x14\xe0\xc29>\x95T!\xc0+\x86R\xec\xba\xd0\xb7`\x9a\xceIj\xd9\x84\xc9r\x1bI\xe7\x03\x8c\x96\xb8\xb7\x0e\xc9\xba\x91\x1ck\xab\xaaU\x12o^j1\x0c1\x0f\xb1\x8b\xe1\xd9\xe4\xe4\xb9\xff\xfc)\xc6v\x0c=f\x89\xa5RT\x97 \x08g\xdc\x0d\xaeS8a\xbe8\x1b\x8e\x04\x15\xbd\xb3a\xd6\xc7\x9c\xae\x19\x12\x7f>\x1bb\xcf\xc4\xc0B\xe5\x93r\xeb\xd80\xe2<\x19t\x9e\x0c\x1d+\n\xd6]m\xec\xfb#1.H\x8f\x90dGo\xfal*\xe6\x8axKA\xa9\xfd\xd9N6`N\x84\xd5\xd9\xe9\xf5\xa3,\x84R#\x81\x0e\xa7\xd8w\x03\x11.\x80%x\xb3,<\x98\xc3\xf4\x12\x9e\xd3\xbb\xd2\x14`QR$\xa3\xfa\xbd\x0eR\xf6\x9d\x14+\xfe* \xca/\x96\x82T\n\x8a\x8d[8gI \xd8\x0b\xbeT\xdc$\xd8n\xee\xab\xbb\xee\xcaTuV\xb3#\x93f\xcb\x80\x07\xce~R\xae)3pU\xfa\xe3\xbaUE!J\x1a:]If\\}\xa5\"\x1dJ\x9a_\x0e\x1c\x91\x03\xa9M\x8b\xe0\x10\xe3\x9e\xa1\xefPe8\x88\x91\xed\xf0\xc5\xc5E_9)\xec\x01\x12\xe2\xe2\xd4\x01\xc5D\x92\xfeP\xab\xe1I\x82G\x15m \x82\x80x\x95\xfc\xc5\xb5y\x0bIX\x9cDj\x1f`ud\xad\xd7pD\xeb \xeaq\x03}\x14\xd9\xd1\xfeh7NG;\xb30\xb7V\x1d\xd3\x1d\xa0\xde\x1e\xdd\xdc\xe2\x85G\xb7#+j\xff\x82\xa1-\x0c\x0fY\xd2*\xd5[\xe1\xc9\xaa\x183\x7f5\x92\xf0Dd\xe9\xed0Yxt\x99kK\xce{\x86\xa2G\x86\xecF\x0f\xd9\x86r\xb4\x80!\xbbyd\xc8n\xc8\xa6\x18\xb2\x1b\xcd\x18~f\x14i}\xec\x9e)\xb9\xd9]\xaa\xd1/\xef\xe5&(n\xd8\x86\x81\x17(\\\xb9\xae~\x94e\"\xcb\xf4\xc3\x1c\x93O\x8c\xf6\xa6m\xe7OO\xfe\xec\x1e!|\xec\x91n\xcf\x1f\x8d\xe9\xc5\xe4?\xa7\xb3\xd9l\xfe\xf1\x9f\x0fY\xfe\xaf\xce\xdc\xeb\xad\xc9\xad\xa4\\\x1f;Y\xe7 \xeeY\xa9S\xde5\xf3\xa5\x9f$\xdf\xe9\x94\xc4\xe4\x96\x11\xc7\xa6#\xaf\xac\xcf\xf6\xf77\xd7\xd5\xb4\xe1\xaa\x91@\xde3\xf4W\xc4\x14\xaa*\xad\xdd%k\x14\xd2?0z\xc9\n)\xbd\x04\xfa\xe7\x03\x82s!h_2)-\x7f\x95|hOJ9\x10\x13\xe0\x80\xe4n\xe6\xef\xa7\x06\xdeK\xe5\xc1&\x97\xe8\x19\xf6\xc5D\x1d\xa0\xa8S+\x9f\xf9\x97hp\x8as\xa4\xe7\x8e\x08-\xe3\xe9\xbbR\x88,\xc5\xb2\xc9\xbe w\xc9\xf6$9^\x91\xe4\xc0\x00\x0f\x86\xfb\x05\xab\x84g}Y\xdf\xa2\xbb\x81\x10IJB\xcaJ\"\x07\xf4\x10\x18P\xad\xae{\x9f\xc4\xdb\x94\xa4\x94uWq\xb4\xac\xf0\x85)\x89@m\x10\xef\xa2\xe5k\x15\x88R\x96V\xd1\xa4\xeaL$\xd9R#\xad\x8f\xec\x99(\xc3\x97b\xb4P\x9c\xdcj\x9f\x1cW\x0f\x0c\xef\x8d\x85\xba\x19`\x18B_.\x81Xv\xd9\x08B\xcd\x9am\xbd\xb9B\x8cO\xa6\xf6W\xb9\xdd\xdf\xa1\x00\x83\x02/\x90\x9c2 p2\x15s\x1a\xcb\x1fg\x11\x05)P\x02\x15\x1a\x12qxNB\x1a\xc8?\xdcu\xc3 \x07\xa5^\xe8\xf3,\x0b\xb1/\x9fK\x11a\x9a\x90x\x9e\xa3\xcfR\xdc:\x88\x9a\x01\xce\xb2{\"H\x82\xc9\x0d]M\xfbs\xb2\xa1\xab\xe9`N\xd6\xb5\x81\x80\xfc\xc4*\xc4\x17C\x98\x04T\xc8?rn\xac\x0dIL\x0ens\xe8\x1e\xe8\xb8\x7f\xb8\x00\x8cJ\xa36\xc3\x9e\xa7\x14\x934GaqX|\xd1'7\x98\\SN>\xd3M\xf7I\x90f\x99P\x7f6]u#\x7f\xb7\xe4\x13}\xc5\xd0gLn\xe9\x06\x12G\x94\xebc\x83}A\xde\xd1\x08bP\xed\xba\x01\x18&\x97\xae\x81r~n\xb1\xf3Dr\x9dW\xca\xa9-H\xe1\xc6u\x91\xa3\x83\xa0\xb2\xe5\x8bT\xf9\xef\xbd\xea\x06)\xbd\x9d^\xcd\xfdw\xae\xdb~\x87\xae\xc8\xae+\x07\x19\xbd\x9a^\xcd\xe1E)\ni\xdbK\xd7\xdd\xa8\x0b\x15\x98B=B\xaf\xd4\x95\xc63u\x03\xe0\xaaK\x8c\xc9\xabn\x81\x1bz\xcb)\x99\x0d-\x11\xa4dA\xd6mJ\x17\x13e\x1c\x0b\xc7O\xfa\x1b\xb2)\xafqw\x15F\x82%H\xe7D2\x9b|\xcb\x91\xcd\xa8hh\xc5\x8cT\x88\x02F\x9f\xc9+\x8b\x1c\xbf\xa9\xad\xf4\xcf\xca\x1a\xa5\x0ddZ\xa2\x8dm[O\xd2\xf2\xfc\"\x984\xd0\xe7WJFT+ZJ\x88\xbe\xf2\x1bZ\"\xc7\xbb\x864\xc2\xd8\xc9\xa5H\x16\x80\x9d\x91\xc5/\xd9G#\xd1\xa4JZ\x15_i6\x0b\x8bv:\xe9\xc2\xf1a\x1f\x1a\xbd\x00Y\x01\xc1\x1fuBl\x00\xdb`]N\x12\x0ca\x92\x14\x05\xf9by5Q\x07\xc8B\xac)w\xb2G\xb9sh$Go\x18\xd8&L\x9d\xc0!Np}\x9d\xc8?\xcbe\xc2\xd2T^%\x0c\x9e'\"\\@\x86\xa0 \x0d\x97\xf0w\xb7\x0cc\x07\xb2\x9d8R\x84\x96\x7f\x96!\xfc\xc2\xe3p-\x7f\xa3xq\xfb\xcb.\x86\xb4C\xd7\xf1\xf2^\xfe\x91\x0d\\\xef\x84\x00\xaf\x9aE\xc0\xef\x82\x14.\xe0\x10L^\x85B\xa52Z\xaa?\x91\xfa\x05\x03W\x87\x80w\x8e\xfe\x13\x85)\xe40ZB\"\xa3\x08~E\x10F\xb2\xbe\xe5J\xd6\xb5\x0c\x83(^\xc3\xc5\x9d\xfc\x852\xf2\x1b\xb6\x81\x9fk&\xbf]\x85,Z\xa6L\xc0\xe5\xba\x84\x04\xf2\xa9K Vq,X\x02\x17\x89\xfc\xf0f \x7f\x86\xf2\xe7D\xfe\x9c\xca\x9f3\xf9s.\x7fX\xb0\xd4\x7f\xe0\xa3\x1b\x03\xfa\x0d\xdc\x89\x8d\x84B\x0eU\x08G>\xf2b\xb3\x86\x84M\xdb\x9dN\xdc\xe4\x10\xe7\xf6ZVr\xcb\xee\xd7L\xc2\x12\x05\xd7\xd0\xc3\x88\xad\x19$}\x8aB\xf8\xe1\xb7\x90\x8f)\xe4*-\x13\xfc&\xeaY\xf2\xcb\x8eA\xb6&\xc6w\xfaO(\xa0\xe3\x1b\x06c\x08\xa1|\x1d\xe2\xf0@\x0e\x0e\x8fU\x1cd\x87\x18\xf9\x9180\xf8\xf1V\x98\x1e\xc4fh\xe2\x9dP\xc0\xca\xa7\xdb d\xb5\xdbp!\xd4\x80m\xf5o\xbc\xd6x\xf4\x8bC\x9cD\x96M\xe4G\xc9\xeeZ\xa2\x82|\x91\x06\x1b\xf9\xb8h:U\x07\xaap\x15) \xd2M\x10I8\xd2x\x97@\xfa\xa9t\x1b@\x01\x91\xc4|m\xb2V\xc9\xbf\xbbk\xf8\xddl\x82\x04\xea\x07\x98!\xeb\xbe\xfc\xab\x11P\xc8\xd1\x93\xb2\x8e\xc6m!gW\xfe\xbd\x81\x1f5y\"\x84\x89\x11\xa1P\xdf&\xf0\x13,\xe4\xc8\xca\xc1\xdcI\x80\xee /\x96\x94|%\xca\x7f\x02\xcc^\x84\x89Z(\x8b(\xdc\xbe\x0f\xa0\xd2%[\xc9\xae\xb2(\n\xb7\xa9\xc2\xa7\x84\x85k\xfe\xce\x0c3\xcc\xfe&X35\xa5\xe6O\x90\xfc% \x96\xa1\xca\xd4%\xa7\x15fk\x13\xa4\xb70\xe8P\xf76\x10\x82%r8\xb6qt\xbf\x8e\xcd\x95\xaeF~\x1fDV5\x89\x1eS\x11\xc3\xb0\xdf\xad\xf5`\xc8?0\xaeM\xc9\x9a\x18~x\xcf\xa6lN\xdf3e\xd5\x02D\xf1\xc7\xdf\xa8XmP\x97V\xb5\xaa\x8f\xb9e(\xf1\xa2Q9j\x84\xd0\x98&\xa8\xaa\x98\x94\x12G\xa9\x98T\xca\xc9:(\x1e\x1b\xf1\x8a\x9e,$!\x89\xb5\x01\xe4&\xbekj\x13?\xd8\xc6\x7fh\xbfJ\xfd9_\xea\x10\x0bM W\x95\xc3\xfbU\xa8\x11\xb2a\x80\xc3\x18=\x96\xd6p\x14U\xd6S\x8c\xbf\xfd7\x1dd(%m}\xe7\xab\x1e9\x91\x14\xce\xb5U\x0eC%\x1a\xfd\xd7\xe5\xbb\xb7V\xa8\xc6\x00\x83\xa3>\x98\x14\xa1\x80\xa4\x16\xe0\x8bR}\x06z\x05\xae\xf4\n\xc9aeZXy\x05\xd9G\xc0[l\xa4\x98O\x1a\x9a\xf4-\xae\x8b\x8ak\xdad\"\x8cRl\x9c<\x8b\x82\xa3p\x85\xa2\x02YqT\x99Z\x14\x90W\x80i\xa5\xe2w\xa7\xe4sf\xf4@\x9f\x19\xd8~-*\xac\x1a\xce\xf1h\xaf\xa6\x9d\xca\xa2\xda\xa0\xeeh2\xde\xa8\xab\x08\x8b'Q\x15o\x02\x88Z\x82\xc9\x1aC\xf2\xb6\xbc\xe0K\x02H\xcb\x82\x16\x96\xa8\xfe\xfd\xbf\x11i\xe2/ \x8d}\x88p\xc5P\\\x86\x1f`\x9fZ C!\x99\xc6$$\xce\x7f\x96\x01+t\xd2\xf7\x1f\x0e\xd1\"\x85G\xcc2\x12\xb9b\x9bP\xa8\xa0$\x97\x97\xf6W\x86\xfa\x98\xf3_\xeb<\x97p\xcb\xe3\xd7\x19\xc3\x86\xd3r\xbc)w\xdd#p\xf6\xa5\xce\x91\xc7\xbd#\xe7\x88|\xf2\x8e\xa8#\x92\x1ds\x8e\xc8\xd1#\xce%G\xf3\xc3\xda\x15\xcf\xb9p<\xe19c\xe5\x1b~\xe1\xe4\x85]3\xcc\xe8\x87`\x9d6p\xa4\x10\xab+b\xcb\xc9%\x1ab\x9fU{\x8ap\xad\x12\xcd\xfd\xee\x8d\x80\x8e_ 5\x95,\xf1P-\nN\x91\xf2\x86\x98~\x9a\xc3\xd9\xd8\xb4\xd1]znzIDw\x19\xf05K\xe2]\x1a\xdd_2\xf1\xc68\xa4\xd0\x87\xab+\xc9\x0b\xf9\x8d\x03\x0ef\xfd\x89\xedf\x9d@\xdc&5\xd8 &\xd3}E\xb4\xe1\x03`\xedq\xf2p\xcb\xee}I\x83\xfa\x9d\xbe\x93c<\xd7\xfd\x97=\xb3;m\xfaJ\x8bD\x8e\x06\x1e@\xf4_\x90\xe5^\xd27n \xe6\x93\xc1\xa3{V\x1cEM'zU1\xd0\x9e\xb3\xfdNqF\x1e\x94\x1d\\\x05\xb4\x9c\xa8=&\xe4\x82%\x11\x0b\xee\xd8\xdfBq\xf36^\xb2K\x91\xb0\xa01V\xc7%:1&\xcf\xdf6\xf9,\xd7\x94\x18%\xa1\xb1\x14w\x87U\xc6\xfb\nz\xd01'\x96\xf6v\xbfwZ\xd6.\x14\xe6)I\xd8\xca\xe7*\x17\xa4\xf9L\x8a\xa4\xca#\xac\x9a\xc8\xe7o&n\x8c\xa5\xf6#\"'\xaf\x9b\x0c\xa2\x0e\x01\x9e\x93_\x19}(\xc3\x0e\xf9\xbf\x10\x15\x9fA\xdd\xfdWN~b\x06\x99GE\xf6L\xfa\x9e\xe5\xf5L\xc1{\xd9\x83J5G\x19\xf7\xc9>\xfeP\x99xj\xf1&\xca\xcc{\xad\x9b \x85|\x1a\xd7\x8c\xe9\xb4\xa6li\x9fq\x05M\xdf+?\x82\xaf\xac!\xd5\xd6\xb2\x9cR+\xe5\x9fY\xf4V\x12@F\xd4 $\x94\x0c\xb3\xac\xcd\xb1\xeb\xee\x7f\xc1\xadZH\xfds\xcbu\x9f\xc3\x13mV^\xf5\xea\xd7q\xb6T\xe8\xc9J\xa1j\x01\x18w(\x90\xe7mk\xbaU\x82\xde\x06\xb3\x94\x12\x9cIy\xe9\x87\xa5m;\xa7a\x0e\x804}m\x0f\xeb\xc4\xbe\xf1\x03+\xb8\x00\x0d\xf2\\\x1b\xffDdA\xa7s\xb2\xa3\xed\x01\xd9B\xb6\x073\xe8+\x84\x1fv\xae\x1b\xb9.\x82\xb7Qa\x80L\xa32w\x8e/?\"\x8b\xc2Hg\x89\xec\x1c\x8cK\xa4\xac\xdevf{K\xd1\n\x8fv\xb4\xdd\xb7b9,\n\xbb\x89\x91\xda\xd0#\xba\x00\xa8F\x9e\xb7\x1d\x8b\x11\x8e\\7\x9an\xe7\xddd\xc7\x11\x1eA\x83\xe5W\xb9N\x0c\xb5\xab;\xa7\x85+\x94PJ\xedA0\xf3o?CLa\x8c,\x1bdY;\xc1\xae\xdb\xf4MR\xa9\x89\xd4\xab\x80\x19\x91\xb2A\x13\xb2$6\xb2\xec\xa3Jb\xa3\n\x98\xe9\xcb\xdfb\x10o,Ae\xb5\xe3FL $gc\xdb\x03m\x10~\xc8UH\x91\x0f\xe1\xe2\xb6\x81r\x96\x0cQ\x9d[\xea\x0c\x94\xdfd\xed\xf1\xc5\x00\x97^&\x83\x11\xdf\x8f#\x05\x9e\xe5S^e\xa3\xf8|\xb4P\xa6s\xb2E\x05?&\x836-f-\xcbvY\x96\xa2%\xce\xc9\x8d\x1dg{WIjm\xba\xacy\xb12\xb9\x16\xf4\x1d\xe7$\xee\x82\xe4K\x9d\xeb$\xfe\x94J\xb13\xee\xeaK\xda\xee\x93\xb8\xcb\xf8\x1d}\x90\xe5\x82d}\x07n\xa4\xdd\x82\xbfq\xca\x9bT\x15\x8a9\xdd\xc8\xb2\xcb\xe5\xf7R\xe0\xe1,\x81{\xd8\xcb\xe1b\xb5\x82\xbf\x8ai\xad\x94Q\x8f^D\x91y\x9a\xc2c\xc9\xd9\xc0\xc56a[\xc6\xab\xf5\xeag\xef\xf8\xa2ZWTT\xb1\xbf;N\xe7\x12\xd0\xeb\x90/+*S\xd6@b\xb7I\xbc`ij\n\xb7BEduV]\xa0\xb0$\xee.>-\x1b4\xaf=\x07\xde\xdd,\xc3\xe4\xeb\x1a\x81\xa2\x07\x9a\xd8m\x82\xf4\xb6a\xaf\xeb\x7f),`E\xb2\xff\x8f\xdeq\xfb?Z\xc7\xad\x0f7\xacu\xbd[\xadX\xd2\xda\xc4\xcb]\xc4Z\xab$\xde\xb4x\xbcd\xdd\x9fS\x02\xa1\x87\x84,\xa3\xf0\xa0\xfb\x1f\xadc\xf9\xd9\x7f\x06;q\x13'\xadV\xeb5K\xe24m\xbd\xb8\x8ew\xb77\xc12\xfc\x99\xdd\xb4\xc6\x90 \xab\xd7[\xc1\xbbn\x9c\xac/\xe0\xa3(\\0\x9e\xb2V\xeb\x877\x1f\xfe\xa3u\xdc\xfb\x8f;\x93\xb5\xee\xe4\xdcd\xad{\xaac(\x9e\xf4-\xd10\xb0\x85\x9c\x0f\x7f\x7f\xff\xea\xdb\xab\x17?\xfe\xf8\xe2\xefW\x97?\xbd\x7f\xff\xee\xc7\x0f\x93\xe1\xe0\xf4\xe9\xe9\xb3\x93\xf3\xd3\xa7\xfe\xa0\xff\xf4\xe4\xe9\xe9\xe0\xd9\xf0\xa4\xb2\xe5\xe9c\x89\x00\xe1\xb1\xb0\xf2\\\xfd(\xf9\xd4Z\xbeB\xb9x\x96-X\x15-\xb5\xc0\x9c\x82-in\x1e\xb1\"\xc2\xc23-#a\xdc-,\x19iT\xaeJ_\x9f\x8ch\x1b\x02p\xd1B*\x80\xb2vy\x16\x980;Q\xb2\x95\xad\x0b56\xafR`\xd8\x16\xacQ\xa1\xd6V\xf5\xab*\xc0|I\xdb \x97f1P\xf3~<\x9a\xfd\xec\xd0oV*\x97\x80\xc6\xfe2\xd3\xb6\xb8a*/\xe4*LRQD\x9f\xdaK\x14V\x8e\xe2\xb6 \xcff\x0f1[;\x08\xc2E\xe7\x17\xa5\xe2\xa4 v\xd1\x98\xb0\xec\xc8\x01{\x14\xa7\x06\x88b\x89ZAK\xd5rT\x08v\x0dQ\xd3`\x0e\xbf\x81e\xe1\xba\xc2\x1eY\xeb\xcd\xa4\xba\xda4\x90\xa2{}/\xd8\xf7Zj\x1e\xf7\xb3\xcc~2\xe6\x07p\xef(^\xadR&\x8e\xe4\xc8J&.^\xb5\xae\xe3\x1d_\xa6*\x9fK\xb5\x0e\x0f%Y\xd6\xc7\x87\xaaRx\xd4X\x95\xa0\xb6]Wq\xad\xbc\x8e+\xe8\xeb?\xf2\x92p\xe5\x9d\\}F\x12<:\xb8<\xc4\xa1\xe5\xc0\xe8\n\x16g\xe9QY\x0c\xa7\xbf\x8f\x95\x93=\nW/\xc2]\x17l\xd4y\x96!N\x9d\x9dX=sL\xde\xe50}\xa5\x11\x18\xf1\xe6dwG\x8eAq\xc7B_E\x16TK\xc5\x1a82\xd6?\xfd\xec\x06\x86\x84\xc4\x14I\x9e\x8c\x91\x04\xe3\xee\xa7$\x14\xca\xbba\x14\xb7)M`\xb5\xb3\xc2\xe7/\xc6{=\xc6~U\x92\xd0\xea'\x85l\x92Dhc\x85~\xb6DE\xfc[SI\x1f\x82,R\xa5-\xc4\x05_ \xc5\xd1\xed=\xc4\xfb\xe9K\x10Y\x0e~\x9e\xb0\x9a\xbe\x88\xf7]\xbd14\xa3\x7f\x969\x9a8\x86\xbce\x18\xbb=\x17\x07Q\x80\x82\xca\xa0\x05\xb8M\x93I\n\xe2\x80\xafg_\x02\xa4\xea\x05\xdb\xa6\xae2\xe3\x0f\x91\xe8.\x03\x11\x14\xe4\x0cJ\xabG\xcaSh\xd4\x98\xb2\xf0\xf5\xe3\x84\x88\xb4TS\xc4\xee\x8f\xbe!\xad8Q\xb4\xbf\x13\x85\xb7\xac\xa5NE\xba\x0e\x86Y\xaa\xa7^\xb7\xa8Ri;r\x00\xb3\xd2\xf0\xd7=\xa2T%H\x10\xba\xa6\xdf\xbc\xac\x9b\xbf\xd7D\x8d\xb3u \xc2;vd\xc1\xb7-\xb0h\x87\xe4\x96\x02\xb8!\xc6\xfdI\xdf\x07\x0c\xc2\x98\xb4\x1b\x97\xab\xc5\xa4\xf6G|,F\x9e\xc71\x98\xc0\xf4K\x94\xb5\x04\x1b\xdb)KOp\xd9J\x81\xa7\x067\xcb\x98\xa8p\xda\xcfU\x10R\x88v:<;s\x85\xe5\xe0\xc0l\xd1\x87\x99\xb8I\x01:D\xf8^\x08\xc16[\xd1\x12q\xcbhx\xf5D\xb7\xa2 Y3\xc9\xc9\x04\xbc\xb5 >\x87\x9b\xdd\xa6%\xc7\xd3o\xf5?;^\x80,?\xce\xc19\xf6\x9c\x96$\xb7i\xb9a\xf53\xb6'BT\xd7g\x19\xf2\xa6t\x9a\xf9\x8aE\xd6 uZ\xef\xbba\xfa\xd7\x90}2\xfe5\x95\x87`\xf4\xc9\x0e,N\x0b\x98r\xe3\x18\xed\x9b9\x01UR!\xa3\xd4\x0c\xda\xc0\xc3.a*\xea[\x13\xd7\x1e\x8cFX\xfb]\x0b\xe5w\xed\x04\xe9\"\x0c\x1dp\xbdv\xa2@\x84|\xa0o\xaeC\x1e$\xf7\x8e\xf1\xb7\xe6\xe0\xb7\xad\xe8\xb2o.;\xfaZ[\x1d\x9b\xb2?!fH\x99\xfej\x91\x0e\xcdW\x8b\xb43,k\x18\x9cG\xcc\xaaO\xdd\xeaj\x86\xc7\xba\xd1\x1b\xf6\xb9\x84\xe3\xe2\xe2b\xa0\x1e_\x07);?-\xde|c\xb5j\x9c\xc5\xa5\xf8\x8b\x1b\xa0\x12\x149\x8e'j\x8erD\xcaK\xb9-KV\xec\xe0\xda\x03\x90\x91\xcb`3Y&\xc6\x90\xe1I\xd0>&\xe2\x02\xa42\xbdp4]u\xaa\x9f\xf0,\xe3\x95b`\xa4m? |L\xfb\xd5\xafe\x97i\x1f\x8f)\x12\xea\xaa|-\xe7\x16R\xd6\x14;f1\xc1LO\xb0=x/\x14\xbb\x06\xbb\xdb\x81\xe9\xd4%/\xeb%5\x9e\xe8\xd7\x1f\xea\xaf\x1fC\x9d\x9f\xeb\x85k\x13w\xb5\x07\xd5\xefB\x97\x97V5\x95\xf9o\xdcj~\xe2\xb7<\xfe\xc4\x0b\xb6\xc0o\xc1jb\x141\xcf\xa9{P\xd6\x11c\x8dj\xdeJb>\x92?`\xd9D\x80\xe6&e\xe9{T\x84~\x01\xea\xd3\xb7\x1c\xba\xf4Tv\x06\x8d>\n|\x82\x12\xca \xa7}\xec\xf3\x8bRX\x9apjIN|\xdc)\xee\x9e\x01BY\xf7\x98p\xeaq\x12\xa6o\x83\xb7\xe0}\x838\x8d'}\xbfL\xed)Q\xae\x0f\xcf\xcd3\x8fc\xc2/J\x18!\xbfW iY\xb03\xc8M\xd2\x14>\xee+Y\xa7R\xb0\x9f7\n)\xb0d\"pj\x82\xb0X\x98T9&\x8b92;\xd1\xa43\xf0\xef\xac\x81l\x14\x8a\n=\x95p\xe5\xaeD\x1a\xf7\xc9F\xe2]\xb2\xc4\xb6\x07\xa22^\x9b\xc4\x93\xc7^\x17\xb9\x06$+\xd8X\xd0\n\x8eP),\xfb\x03\x16\xe0\xaaG\x8dxz\x17D\x05\xcbQ\xe4m\x86nK\x86G\xb3^\xb6O\x96\x8dl\x12=C\x12\xd0\x01Xy\xab\x81\xb4\xa3\xf9\xd9\x81`$\xa7\xabV\x1e\x05OQ\xbd\xad&\xb5\xa5\x80\xb3L/J)b\xc8\x1b\xbd*\xcb\xdbNq\x8fu\x1c[\xcd]\x0c%ck\xaeK4 \xe8\x90\xa4=:$\x91\xfc\xe1=:\xacI\x92\x85\x12a\x00F\xc6r\xa5\xf9\xac\x9b\xb0`\xf9\xd3\x1b.\x06\xe7\xdf\xbcB\xe28\x80\xfcZ\xba\xd3;\x93\xb27\xa4|\x14\x8eS\x88\xcc\x16\xae\x90\xac.\xc4\x94\xd2\x05\x12\x04\xb2&\xee&}?\xec\xec\x14\xa4\xea \xe8zCL\xc2\xce\xce\x93\x0f\"\x83U\xbb\xe3\x00\xf0\x1d\xe2\x80\xc8ba\x87\xcao\x89lN\xad\x04\xd9&\xf7\xa2\x8b\x14\x16T\xda\x89@-2\n/h\x7f\x14v:v\xaa\xb5v_\xa7W\x8b \xaf\x9a\x81\xce[\xe1\xb6\x82o\x85\xf1\xc3V\xee:*ml\xb8B[\x03I\x98\x9b\xd1\xab\x84?7\xf2,\xa7o\x01E\x10\xc7Y\xd6\xd7\xa7\xb9\xc5\xa2\xe5\xa3D\xd2\x15]$\xc1\xf8\"\x86,\x861\xf6\x13\x1ak\x13:\x1bG\xc2?\x0f\xdb\xb4\xdfLG\x8d\xf2\xe5\x86}\xb6\xd4\x05\x17ao\x08u\x86\xbda\xc9:\xea|~#\xcf+B\xd3\x15\x11\xe8\x8a\xe4!\xc3\xe3\x80\x0c1\x19\x9c\xc3\x12Wt+-HB0bS\xee\x05s\x9a\x1a\x15DP \xe4nF@\xbf|\x82~B\xa2L?\"%)e|Q|\xf3\xa9\xe1\x1b[\xe1Vj\xe8\xa7s\x13I\xd4\x0c\x8dd\xb0\x85R\xf1J\x1e\x98\xd9\x81r\xb8\xe5#\x00\xe1\x94\xeb\x0d\xdf\xee5\\\x82R\x96z\xd7\x00\xde7M\xd5\xbdz\xb4\x1f\x95HI*\x08\x90\xec\x8f\x9a\x90\xd2\xb9\xb8\x8d\x90\xe8\xd0!\x1e\xf71L\x12\xa7\x95>\x05\x10c\xf3\xe2\xe2\x19\x89)\xff\xf3\xf0\xec\x9c\x84\xaa\xf716WIy~\x98\x7fa\xe4\xafP\xd5sM\xc7\xef\xe3\xd6\xee8I`\x8f\xf8\xe6^0\xe30\xe5\xef=\xd2\xb29x\xb4\x97\xb5_\x9a\xda\xb9\xf2~\xdd\x84\xbc DUq\x06\xc2*\n\x08\xaeUPL\x15\x1f\x89\xb2i<';u\xb4\xb2\xa5\x8b\x8b\xe1\xc9\xf3\xc9\xa9\xbf\xb8\x18\x0eO&'\xfe\xe2b\xf0|0\x19\xfa\xb0w\xc7\xdevL\xb9a\xbe\xb6E0\xa5\xc5x0|\x06\x14e\x81\xabq\x92\x06\xc3g\x94\xa2\xc1\xf3!$q\x9d\xc6\xde@%\x0c\x8f(:\x19\xb8\x0b<\x1e\x9fg\xe7'n\x08I\xae\xa1\x86\x08WC(\x99\xcfH\x00\x17\xc39)\xeb\x0c\xb1\xeb\x96w\x81\xaexp\x06\x15\x0f\x86\x19\x82\xaau\x1b\x01\xbe\x18\xf6Oe#\xd1\xf8\xecl\xf8\xfc<\xcb\xa2\x8b\xb3\xa7'\xa7'\xb8\xa1\xe1\xd3\x86\x86S\xb88y\x1c\x82\xf2.\xad\xc1\xf3\xac\x80G\x83\x16\x18\xd0R|q~vvr\xe6\xba\xd1x0\x18\x9c\x0e\x06C\x0dR\xae\x15\xb2\xbb \xdaQY\xe6\x84l\xe9\x00\xfb;\xf3\x01\xdau\xe0\xf99\xd1\x81 vRv\xe8\xbb\x83\xfe\xf0$\x83nJ\xca}v~2\xecg\xf2\x99\xbb\xc3EILb\x8fn\xf7\x02h\x95\x96N\x16y\x14cz\xda\x7f~^\x98_\xec{l\xeb\xa3\x1b\xf5\x86\x14B\x1b$\x00V\x02\x1aX\xe3`\xee\xd1/\x7fm\xc2L\x91\xc4S\xedZy?P\x82s\xd1U\\\x01\x8d\x88\xe8^F\xf1'}kw\xc2cm\xad\xc8\xee[*r\x90\xbe\x916\x88{\xf3\xf6\xf2\xfd\xab\x97\x1f\xae~x\xf1\x7f\xae\xbe\xf9\xfb\x87W\x97\xf4\xac\xdf\xccPYi0\x1a\xd5\x88\x8dOm;{\x91\xdc\xeb\x93\xd1\x9avr`95\x96j\xc8\x87\xe2\xb2\x91\xdd\"\xab8n\xb0\xe2?\x1d\xe699\x85HS\xddU\x1c#\xdc\xc8\x07B\xd2*P#\xb9\xae\xe2\xd3\xcd=\x1a\x90\x01\xb6\xa4\xf2\xa60\xf5\x08\x13\xd1\xbd\xfd!\xf8\xac\x8a\xd0\x00I\xcev\x1b\xc7\xd1e\xf8+\xa3\xcf\x06\xcf\x87$\xea^\x05\xbb\xf5\xa6\xee\x9e\xd1\xd0OK\xddJXN\x14\xbf\xbc\xe7\xdc\xa8?\\\x98Sx\xd0\xc4\x1f\xe2|\x91U\xa7\xd5R\xe30F\x8d\x05H\x93jDe\xc0r]\xf5\xb7\x0bG\x0c,u\xddhZ}2\xa7\x10V\xb6\xd9\x1d#\"\xd5\xc2\x85\x7f\xaa\xec\xd7\x02\xec\xf1wIp\x0d^\x0d9\x88\x0c\x80\xaf\x87\x06\xa4\xfa\xd8\xda\x17A\xad&\xc6\xb4?Q\xc7K~\x81\xbe|\xb2'\xaa$\xbaPw\x15\xea\x1c?~\xe5\x81\xb9\xcd\xeb\xc3\x0f\xb0\xfd\xc4\xd3\xa01ZFk[\x9c\x83W\xcb\xca\xf5\xfa\xc5\xf2FTj(\xd8Fe\xfc\x1e\xd6\xbd2%\xe1\xb3E\xbc\xd9\x06ICt\xd0vE\x1f\x96e\xed\xaa4\xd6\xc8\xf7\xbd0\xe7\xdc\x85t\xa2>\xd0\x07\x1fLn\xe6\xfb:\xa8Rt\xb4b\xe1\xea\xa8\xc6\xc56\x0d'\x12\xf18\x1cy^,\xd9b\xb9\x0b\xb7)\x15\xd3x.\xb7s\xd8\x94\x13\xb8\xd5\x9c\xb1!\x7f\xe3DJ\x89\xc9\x98O\x06~_\x0d\x9498\xa8\x0c\x95\xde\xa4\x8bt\xd55 \xc7\xd2\x9b<\xa2\xf3\xfa\xb2\xe6\xac\xa2\xeb\xf8\xfd\x8a\x8dv\xbf\x16\xfb\x10\x12b\x18\xeb\x93\x86\xd9\x0cUh\xd7&]68a4\xe8\xb2\xb9RB\xb6\xe2\x95\x99F\xa5\xd6nPU\x14\xfbD_oc#\xdb\x7fG`\x15q\xa4\xdf\xc8+{\xa0 1\x8f\x14\xfbUA\x7f\xb94c\xbd%6T\xa0#N0\x9d\xc4\xc4\xc6\xd3\xe0\x7f\xa5\xcb\x81:wI \xc8\xb2G\x03\xddx\x19\x8b\x94D\xd6\x16@oH\x85\x9e\x16\xeb\xb2\xdd\xaf\xbcH?\x05\xdb\xc1y\xddv\x93\xd9z?X3u1\xcbV\x92k\x85x\x1a\xfe\xca\xac#\x88\xcd.\x12\xe16b\xb2\x17\x83\xf3\xceu(\xe4\xfa\xabEd\x19 \x8f\x0e\xf1\xda\xa8\xc7\x84Wn\xab\xf2Q\xbe\x07\xeb\xc9\xf0+`=\xfd#\xb0\x9e\x0c\x1f\x81\xf5\xd4\x86\xf5\x04\x13s\xe7\x0d\x88\xf0\x86_\x80\xfd\xfc\xf4+`\x7f\xf6G`??}\x04\xf6g6\xecOk\xb0\x9f[\xf7C\"\xbc3\xeb\xfe\x84\x08\xef\xf4\x91\xbe59\x08\xaa\xde\xf53\xbb\x7f\x960\xc5&\x8e\x03\xb1\xa4\xea\xf6J\x13\xad\xdd\xed\x13\x86\xfd\xcd\x81\xe4t\x95\xd6\xd9/\xbb \xaaZ\xe2\xec\xed\x1b\x8f\xef\x13\xd6`\x1a\xa5\x95\xddY\x15j\x0e<\xbd\xcd>U\xd8\x1aT \xb9d\x0f\x1aR\x96:\x0e\xc4L\xdec[\xedVt\xff!<\xa9F\x8b\xe2\xfc\x08\x08>\x9c\xb6\xeah\xf9\xbd\xee\xc30\xef\xadm?z\xbb\x0e.\xeb\xf0\xa8\xd3\xeav\xbb-\x07c\xe2\x8c5\xee@\xf2\xaf\x0b\xa7\nw\xd3\xe6k\xe9\x84\xff\xe8PVh\xb09\x91\xa8\xc5\x82a\x13CL}\xfbe\x02\x8a\x1a\xfb\x89r\xc2\xac\x9cJ\x88q?\xcb\xf8\x85\xa9 \xcb\x12\xf9 \xae\x9ce4/(m\xca\x90\xc8G-P\x99*p\x93\x0b\xd9\x8e\xb8\xb0\x8f\xaa\xf4\xe3\x8aR\xdc.\xa1\x1eht\xd9\xe7.B\x8abuB\xd2A\x89\xba \x015\xe7'\x1ds|B\xd2\x92\xd7\x08I\x80\xc9Bg\x80\xd2rU,\xc5B[\xad@\xb6\xb4?\xda\x8e\xd3\x91\xe7mAO7\xddJ\x86d7\xdd\xce\xf1CH\xe5- \xe0\xb6\xca\x90\x84\xe3@2$\xc184\x0c\x89\x8d\xc7\x8bh\xb7l\x88\x1de\xfa\xde\xa6\x95\xb4 \xa8d-\xf74\xd0\x87X\xe0{\xcb:G\xa5 \x8a\x9a\xb5\xd2_W\xc1\xa0V\x01\x98J\xec!t\xd5\x9fW\xe0D\x1fM\x91\xca9\x17\x914\xd3\x9c\x1d\xd8x\xda`\xd1\x94Pq\xe0c\xc5\xee\xa4\xafC\x0eF\x1bx\xdf\xf8I\x1f\xbd*\xab\x0e\xa3?7g>\xa4\xa5\xacw\xa6D\xdb\x8b\xcd\xb12\xdekE1_\xcb]\xa04\xe1\x1b\x89Lr\xa9\xa6-\x8e'\x88\xcb'\xb5e\xa4\x8f\xe1\xb0\xaf\x0fn\xd4k\x1d\x00\xd2\xeeCG4\x9c\x0c\xc6\xfa|\xa6\xb4*\x03R\xa5\xcc\x91\xc6}\x9ce\xe2+V\x9cu\x9e\x0e\xfdn\xc5;\x91\x86\xcb\xc2`\xb0\xb0*J\xc0\xba\xc3\x9c\x1c\x96\xab\xc8>'N\x1a\x8e\x11\xafm\xab\xaf/\x1c$~\xde/[=J\xfc\xb4_\xe0\xb1\xc3\xc4\xdb\xfd\xe2\xb5\xe3\xc4w\x0d\xd0\xfd\x1e\xbe\xbb\xf5\xaaR\x91u\xa4\x18~\xfd\x91b\x82G \x9c5\xd7\xcfQH\x08G\x8a\xb5=\xfe\xbf.\xdf\xbd\xdd\xb7\x11}\x90o}cgC\x96\x81\x08\xf6\\\xc8\x81Z\x95&\xd4\xdd\xab I\x94\x81!\x98\xdd\x976\x99\x1f\xaag\x97\x8e3\xfa\x82\x86\xd4(G\xa54\x964*\xa8\xd0`\xf8\xd4\x95bY\xe9\xffS*b\x7f\xfe7\xb4w\xa8\xad\x17\xd5\xb6\n\xd9\x01\xb5kg\xf5\xa8-\xd7\x9b\xda\xd3\x12\xb5\xe8\x12\x1b\x02\xc7!!\x15\xa3\x10\xc0\x08q\xec\xd1_!n\xaa\x15\xb5\xa2h\xf4\xa5i\xb4T)W6\x0f][\x7f\x14\x8e\x93\x82\x0b\x95\x1cy\xdc\xdc\xb9d\x1a\xce\xbd\xe1\xd9\xf9q2\x0d\xed\xac\xbeV\x93oL\x93\xc0\xcd\x0e\xda\xb4\x9fe\x07-\x90\x1cE\xe4\x8cY\xf2.\xe4B\xcb\xe8\x9e\xb88d\xd7\xf8!\xb9\x0f\xf9\x1aLr\x16\x0b\x96\xa6\xadkv\x1f\xf3\xa5!!\xaa\x1b\xf6\xb9\xe3\xfb\x92\xa1!\xe1\xd7\xb24G\x8e\xaa\xaf\xd1\xbcJsS\xc6PF \xa4\xe2\"\x963\x19\x1e2\xb6\xaa\x9b\x90\xd6m)U-\xdcK\nV\xe6\xa0Q\xf1\x92}n\xd9\xcc\x8b\xdd\xdb\x1f\xcb\xddN\xc0\xe1\xb9\x00M\xf3\x99\x07\xc2\xd5\xaa\x12;t\x0f\xd9;\x9c\x0cK\x05\x07\x9br/\x9eS$\xdc\xe1\xd9\xd9x\xfc\xec\x18%\x93\xd8\x1ftb\x8c/..\xac\xdb\xb2\xf5\xb7\xfb\xad\x9f\x0e\x9f\x9f>?\x7f:|\xfe\xd5 \x9c\xee\x81 \xca\xf6N:1\x96\xf0\x94m~\xbf7\xbf\xbfs\x10G\xdaX\xe0\xeb\xbf(\x81\xf8\xa1\x00\",x\x940\xcb\xbe\x07CI\xd9%\x12\xeb\xad\xde\x94\x1b\x9e\xc8\xa7\xdc;-+\xf9\xf6\xf1J\x9e\xedWr6\x94O\xb9\xf7,\x8f\xea\x14\xb7\xa6~\xd1\xe7ku\x89\x131\xfa\xaf\x7f1<\xeeO\xa4\xc8\x90@\xd6?\xd0\xbd\xfb\xecBY\x98&\x98 \xcb\xc8WL\x12\xff_\xff\x12\xf0\x85(\xbe\x90\xa4\xcb\x17\xf0\x85\x90_\x881\x83K\x86\x9b\xf5\xbd\xd8\xd8\x16\x15:l\xf0AiV1\x97\x0e\xd11\x15\x1d6\xe2\xda\xc6=\xd6,\x8e\xcd \xf4!%\x9d\xa4\x8c|\x1a\xce\xa1\x8di\xe8\xb1y\xa1\x89\xab\xeek\xe6\xa4\xfe\xfbW{\x8c&\x93<\x14\xb0V<\xcb\x14Y\xb3\x19\x1c\xeb\x98\x0e\x1aas\x12\xd3\x01PS\xcf\x0b\xc7R\xd2\x89\x8f\xe9\xf0\xec\x1c\x8f\xe4^\xa1\xcax\xe1\xfc8\x1e\xd9*\x9b}P\xbe\xf9\xe3\xa0x\x9d\x8e\x00pFB\xe5\xbb\xd8\x07D\x96\xf8\"(\xcfj8d\xe4U\x05\xc4\x80T\xe505\n\xcd5\x0d\xcek#\\\xafl\xd8XY\xa6\xa1\x1d\xcc\xc7\xe3g\x87j\xfe\xe6\xf7\xd4<\x1e?++o\xae\xf9d\xf8\x05\x98O\xab5\xa3&\xa0\xcd\xcdp>\x1e\x0f\xce\xb178\x7f\xfa\xf4\xe9pp~\xac\x9f\x9f\x1cl\xfc\x0b\xdd\xaa5^\xabw\xee!\x0b\x8a\xc1\xb9\x0dF\x01\xd3\xc9\x1c\xef7\xfe\xff\xd5b\xb8\xa0\xb2\xc8`\xf8L\xf2\xc4\xa7\x07;\xf1\xdb\x87\xf87u\xa2\xde\x85A\xbd\x0b\xc3\xdaL\x9c4vbp\xa8\x13\x87\xc8\x15\x98<\x18\xf8\xdbE\x8c\xb3\xea\xba\xef\x0c\xf0\xa8B\x16\xe2\xce\x80H\xc9^KU\xdaR\xfb1\xd2\x15\x18B\xc0\xa4D(E\xc5T%\xf04\xa4\xac3\x98\xbb.J\xe9\xc0\xacJI\xdd\x10\xeb\x05\x17\x17}\xdcI\xbfL2\x0e\xd1\xb8\xff\x8d\x1eJZ\xb7\xdfG \xa1\xa1w\xa1\xa2w_\xec\xa6\xf7\xbf\xd0\xcd\xdfA\x18\x07\xc3\xa7\xa4#\xd9\xd1\xaf\xa7\x8dL\x0b\xfb\xc3\xb33\x0f2\xea\x7f\x0d\xb1\xfc\xdd\xb4R2tOI\x07\xf8\xba/.\x95?B0\x7f7\xbd\xfcM\x10\xfe\x11\xa2\xf9\xbbif\xe9ZC*\x8e4\xbfg4\x0f\x92\xd2\x82\xd8~%\xf5\xfc\xdd\xc4\xf3Po\x0c^Z\x9aC@\xcf\xaf\x98\x91\x7f\x1fym\xe2\xbe\xad^\xfe`\x8f\xd4\xdeihY\xc3\xe1q\xb2k\x184\xd7\xd0\xc8K[U|\xfbe \x1aY\xe6\x03U\xecC\xb1\x88\xb7\xf7\xcd\x04X9\xc7\xf71I\x94\xad\x84:\xc0\x13\x15 \xe8\xc2J\x16\x86JCeLD\x96\xa9\xc3\x0f\x10\xbe\x13\xd8N\x12\xca1I\xaa\xfe\xa25\xb3/\xd5\x92\xdd\x86]R\x1c\xd4\xe4\xaa\x00\xd1\x97\"HDSd\x04}\xf8R\xa9\xb8\xb9\"\x15I\xf6`E\xc9A\x08\xd4\x87\xaf\xf8r\xef\xb3\xc4>E\x85a\xa8\x8ca\xa1%\x17\xe3\xa4\xa3\x86\xa9|\xe4q\xcd\xb9\x93\x90&\x1dn[$\xb8.\x1f\x0b\xd7\x15\xe3\x04\xac\xe0b\x1av\x06#\xc9\xc1KF\x1e\xb3i\xec \xad,\x8d=>/\x8e\xbf\xc3\xf1\x80\x9d\x80\xd5\xe5!\xafn\x95\xfc\xdb(\xeb\x9b\xaai\xf4;K\x99(\xfc\xcd*j`N\xb8\x17b+zCM\x8d\xb2\n\xa3\xa8\x19\x03\xf7\xd3\xf3\x1c\x88C2\x91\x83J\x94!\xa0=\xb8\xfb\xc1!4\x1e\xd6\xca\x11;\xed\x9da6X5\x15\xf5(\x1e\x0f\xcf\xce\x81\x8a\xc5\xe0\xfde;\xb3\xed9M\x1fp\x04-b\xa34\x84=i\xeaY\xe2\xba\xd5\x90\x14\xc9\x01s\x9d\xe6\xe3`p\x13\xdb\x8f\xe6\";\x01>\x8bX\xaf\xaa\xcc\xb6\xea\x1a\x8b\xea\xed\xa1S\xbbw\x07lm\xf8\xb84\xc6\x95\xf5(\x1f/u\x9evq\x01sT\x1a\"L\xac\x96|~qq\xd1'\xca\xc5\xb8\x8fIC\x18\x9a\x15x\xd9\x95g\xa5\x80\x98R\xa2.\x0f\x14\x02Z9\n\x9c0\xff'\xc4u\x80\x9b\xc4N\xc5\x8cIZ\xd8\\j\xf7\xbd\xbe\xac\xb8#\xac\xaa%\xf6\x07\xd3\xf0\xcf\xe9\xdc\xce(\xa6\x12\x15\xbc\xa6\xbd\xe9Go\xd6\xebw\x9e\xbf\xe8\xfc#\xe8\xfc\xda\xb9\x9a\xdb \xaa~\xb5M\xed\xc7\x83\xf3\x89\xd3w$\xe7'.\xcfd\xbd\xd6\xb7\x00u\xf1\xf1I\xd3\xc7\x83a6\x1c\x9e\x12Y\x8d{~\"+\xa8\xd5\x04\x13\x86\xb8qOj\xb0B2N\x92\x8bx\xc9Z\xdb\xb88\x81\x97m\x9e6\xb6\xf9,\x1b\x9e\xf6 \xb4n\x1am\x06\xa0\xb05+\x11\xf5\x1b\x0b\xc9\x93\xae\x88K_\xb9\x92\xa4\xab.7\xba&0Ha;a&\x93m\x99\xc7\xad\xf7q\x96z\xd9,\xf5\x9e\xf4\xd6\x90\xc1\x0d\xb12\xa9\xdbk\xf9\xc4\x04X(\xdc{u\x8c\x82\x91Y\x1c`6<\xc2\xcc\xa3\x0eu\xecH:\xb6\xef\xde\x93r\xcb\xb1\xce\xb1G\xf1X\xd2^\x14{\x92m(\xb8\x93\xd8rT\x87\x0dR\xc0\xb6\x08n\x02\xa5\xe9D\x8e+\x11@\xcf\xea\x01@K\xa3\x11\x8e\x06\xcfTP\xb3A\x7f\xa0\x83\x9a=\xc7$\xa0\x1c\x9d\x0d$\x81j\xf4^\x19\x89\xee\x8a&\x93\xd4\xafW*\xf7w\xc8AI\x03\xa4\xf8\xfb\x10qLblEF\xd4A\xc1q\xe9R\x04n\xf3k&\x9c\x90\xb7x\x969\xa9\xbe\xd4\xa8e\x1b\x85\x82yF\x9c\xec\xc5\x9c\xd3}\xd7\x16\x11\xf2c\xb9\xc7H\x16\x9ew\xe1\x19&\xac!\xf4\x9c\x19\x84\x135\x06''\xb8\xbb\x82A\x18\x9e\xa8A\x18\x9e\xcaA\xe0\xe8i\x1f\"\x82\xa3A\xff\x0c\x93\x05\xe5\xe8\xd9\x00\x8f\xca\xd8\xa9Ue\xb1:\x17\xdf\x91-Y\x91%\xb9)r\xb9\x91\x0de]\x15v\x9c\xac!\xef[\x00vq\x9cn&\x89\xbf\x9e$\xd3\x9by\x96\xa5\xe8\x86<\xe4\xd8G\xea\xf6!\xc7%\xaf\x02\xfb\xcf\xae\x05\xb1\x8c\xe4`\xaf\xa8\x98\xee\xe6\x90.\x8e\xc7\x1f\xa0\x91\xbf01AK\x1a#Nv\x18\xbb\xee\xb2\xab\x1d\x8bd\xc1\xf6\x02m&;\xff\xc6C\xeb\x89\xd3u|\xe7O\x0e\xf6v\x84uWq\xb2`Kl\xa2m\xb5)\xddB\x03z\xe3[\xd9\x89$5\x15\x1cEhE\xb6\x90\xa3/\xbd 6Y\xb6u\xdd-\\b\xd7\x0d\xd1\x8a8\xf2\xda\x01,\x08$4d\xa5B]\x1e\x9c\x85g\xf6\x90\xb6\x93\xa6x\xe2O\xdb\xcd\x18\x89\x1er28\x94\xd2\xe6i\x9e\xe3\xe9`\x9e?\xb6\x0c\x9e7O\xa7\xda\x9f,\x93\x9e\x12\x19\x0b\x87\x1a\xcf1\xd6F\x01\xd7\x91\x98\x1c+n\xd6~\x9beC\x1c\x0d\x87O1j\x80\xab\x12\x14\xd1\x009|>\xb4\xe2\x0d\xc6\xd6\xaa;i0|7\xae\x14\xa0\xa8\xe0\x9b y@\xf3\x89j~O0\xdd\x96\xd6\xaa! \xc8@\xb3dK\x161\xc1Z\xe14\x81\x00\xaf\xcbpQ_\x0dj\x18\xcb$\x9dq\xf7S\x10\xdd\"Fj\xc1\x0e8\xe8\xaar)\xe3\x12.\xeb\x92\xc5\xf6\xb0S\x0d\xcbt>\xe2\x94g\x99M\xe3\xee\xact\xb0\x16\xe0F2\xd0bu\xb1\xc9N\xd5\xd2\xd2\x81\xcb\xe7\x8e\x8a\x0eU<\x86\xfe\xab\xa7%]k1\x14\xe0\x87\x04\x05\x16\xec \x91b\x82b\x0355\x0d0&\x1c%x\xc2P\x82}\x81\x12\x12\x833I\x1819Q$\xecn\xe3-\x82\x0cQ\x90\x9d\x1dhPm\xd4$\xafQ\xd2\xb1\x06\xcfe}\xd1\x97\x9f\xb3t\x114\xa6\x8fo\xd91\xffK\xa6\xf0_\x92\x19\xfcW\xdf\xca\xef\xdb\x9b\xf5\xe0\xd9@G\xbe\xe5\x8fUY\xd63\x90\x1f\xf5\xecz\xfe\xd5\x87zT5\xb0L\xea\x1b\x11\xa0\xa6q\x05\x99*2\xd7\x83\xec\xf2 e\x81\x9a\xe00i\xb3W\x8e\x0e\x00U\xc0\xa5\xc2\x91\x80\x14\x88\x01a\x05\xf4\x0bw7\xc1\x16\x95\x9dR\xe1\x83\xd5|4u\xd0V\xa5M\x1c\xc7wzR\xe0Tu\xe8\x1a\xb4\x83Q\xcf\xc1y=*\xbd\xb5\xf9\x0f\xbe\x82a=W\xfc\xeai\xdf\xde\xba\xeb\x01O\x0b\xd0\xe2\xae\xf2* \xd1\x00bg\xec\xf1\xaef,\x80i\xfc\x1anQ\xf2\x88\xc00\x0f\x14\xaf\xf8\xb4\xafy\xc5\x13\xc5+\x9e\x0c%\xab\x18IL$;\x1au\x19\x07.\x8blM\xb4!\xf5\xc7\x8c\xb7si\x141\xa8\x99\xb1$\x9c\xa4\n\x88\x88\xb6\xdb\xa9\xeb\xb6\xdbiw\x07\x9e\xa4dQ>a|\xb7a\xe0:NV\xe5S\x8b=\x1c5D\x02\x90\xec\xf2\x9e\x0eIdY\x888qx\xb0a\x0e\xce\xb2\xb8\xb8\x91\x84f\x878\xee*\xad#\xdd\xeaY\xddW\x8c _\nJ\x84\xb5)M&(\x9a\xb4W\xae+\x87\xd8u\xd1\x82\xb6\xfb\xd8\xd7TP>#\x8b\x89\x1a}\xdf\xb06\xd8/\x1e\x05`_\x9ec\xf4Z\x03_\x12*\xe2\x98\x95\xea\x90}\x9e\xb1\xa1\xb7r\xefr]\x15\xce\xd7\xf4A2\xdep\xdf\xc8&\x1e\x88Q]\x1c\x0c\xf6>~\ny\xaf+X*P\xd2\xddF\x81X\xc5\xc9F\xe2\x87\"\x0f\x01\x95;\xf1\xa7\x87!\xc9\xb1?\x93\xcfB\x88R\xa5\xe7\x99Dt\xda\x9bM\xe4\xfa\xff\xf3\xc9k\x87\xf4f\x7f\x82\xeb\xe1\x893'\x0b\xf9\xee\xcf\xc3\x13\xf9\xe4O\xf2\xdd\x9f\x87\xa7\xf2\xfa\x89\xba>\x97\xd7\xae\xba~)\xaf \\\x9f\x025\xf9Og>\x12\x9a\x98H\xe9\x05\xabkH\x01\x95\xc6\xd1\x9dy\xaa\xef\x88h\x0e\x0e\xdeJL\x8c\xf5 \x84\xac\x94\xc3\x7f\x93\xb0\x95\x9f\xc8\xf2\x08{\x10=\\HT\x7f/ge\x11Gt\x7f\x83 \xba\xec3[\xe8\xe8\xfb\xa5\x8an:\x98W\xbdEtM\xaf>\x0b\xc6!n\xfb~U\x15\x87.\xe4t-\xff\xca\x0b\xda\x9f\x18\x82\x86\xeaA\x0f}\xc7\xc0\xf9]\x90\xde4Vl\\\xd0\xa4lt\xa8R)8\xa9$\xc7I\xb8\xfd\xcd5\x99(\xbb\xaa\xb6>D\xcag\x902%\xfdN\x88mC]\xa9=\xb2\xd6N|#\xc4\xd6l\xbf\xf2:\xd57\xb6wd1u\xaa\x85\xd7a\xc4.\xefS\xc16\xef\x03qS\xdfa\x8a\xc2\xd8\xec\x96\xa3G!h\xd9\xf1!\x9dU\xa8B\xa1 \xd9\xd4*\x897\x8f4\x16\xebQ(\xb7\xd1\x99\xde\x11\x81/\xe5\x8bx\xc9~\xfa\xf1\x0dbu\xcfc\x93\x94B9z\xdbUD\x92\x86DpPg\xc9_DtE|\x10\x10\xd8w\xe8\x9254\xa7\\\xf2\x8bT\x15\xbc\xde\xdcb\xca\xe7d1\xe5\xd0\x9c\xda\x1b`\x04\xfc^\xcf1\xc1T\xd4\x04?\xadaa!\x0f\xa9\xc8\xa6\xaa\xf8\xf4\xe9\xbcD\xb1g\xd8/\xae\x9fb\x12\xbb\xae)\x05\xa6\x00\x92q\xef\xcf=\xc7\x97\xdb\xab.6\xc0\x98\x88 +`\x90[\xaf\x8f\x12\xda\x1e\x10F\xe3 S\x9b1\x86\xca\xda\x89\xeb:\xfel\xe6\xa8\x80\xcce\x9fB\xe2\xccf\x0e\xc6E\xa5d\x88\x8b\xf6\xba\"\xfei\xbb5\x9d\xa8\xb6\xcc\xeaJ\xa7\xfd\xb43\xc5\x16Jb\x12\x8eb*g\xab@\x1f\x146\xe46A\xd5\xa0\x1f\x15\"\xcc\xbaWW,\xfd\x01\xd2\x01\xd0v_\xa3\xe9CN\xf8>#[\x95SI\xb2\xb7\xc2\x92=\x81xL\x07\xd62*\xf3\\\x0c\xe6\x13\xe1\xdb\xb7$\xa6Iw\x11,nX\x96\x95\x9c\xbaEAK\xec\xdd\xcbW\x16R#\x1aiYP\x8c\x02\xcf\xc3\xe14\xb0Sk\x04*CYj\xd8\x86p\xda/\xf0\xbb\x0d\xea\xef\xee\"H\xd9\xa5$\x96\"\xbcc \x1c\xa6\xb50\x1fD'\xa7\x89I\x8a'\xf14\x9d\xfb\xf2\x872\xdb\x1f>\x94,YC\x96\xe4\xa6\x1d\xd4\x08'l\xc4\xe0\xe4\x8b\xabH\xd7\x92\xe0\x88\xee\x92E\xc1}\x96\x89,\xeb\x93X\x1f\xb6\x90\xd0\\\x04\xfa\xe2\xb7\x8d\x15/\xc7*\xa5\xfdQ:\x16\xa3\x14\xf2\xb9\xa5\xf6X\xa5\xf3QL\xb9\xb6\xbf&A\x96\xa1\xc0J\xfcS\xd1(\x99\xae\x87\x10\xfe\x82\x864\x00m|\x8e!\xc9mN\xc2F\x01*1\nE\x0d\xfdC-V\x0f\xa9\xa9\xa0\xee\xc0]?Q\xca\x10\xe0/L\xb7\x9b\xf5X\x00\xb70\xd1\x80X=\x14\x10\xf9\x94\x84\xa2\x08\x0b$W]N\x02\xba@\x89\x1c\x95\x05\x8a%\xe7\xb9@5\xf1\xb0\xe0\xf2\x15\x108\xc7\x0dlR+\xccq5\xcf\xa1\xed\xe2\x83\xe0\x08\x88u%\xa1L\x02\xc1\xe0h\x9eU\x92\xef\x1c\xe4\xb6\xd8D\xbe\xb7RG\xab8\x00\xb1\x1aG\xca\x91\xbe\x02\x0b\x01\xf9*\xcf1.\x89d\x03z\xf0}\xf4\x885zp\xac\xbd\x0f9D\xc1\x8c\xa7\xa1\x8d\x1e\xa1\xc9\x10\x19\x1b\xaa\xae\x1aA\xc1x(\xd7\xf5\xc5p\x92\xf8\x0cW\x13\x01J\x80\x18d#\x0c\x7fe4\x80\xb4\xd6\xd7\xf1\x8e/\x18M\x89\x1aT\x1a\x95\xc9\xae\xe9\x83.\xea\x07\xc4\x14\xf4S\"\x8b\xf9Q\x9e\xe3Ib\xd6\x1c\x89\xb1\x9f\xe0,\xb3\xf8\xfd\xb09U\x17}\xc8\x0bi\xf4\x80\x9eR\x8f\x167\xc2\xba\xd6z<#\x9dA]\xd2\xaa\xc82gZ\xf5\x8d+\x08\xff\xe8t2\x1dD*?\xa8\x01\xd7\xc0\xec\x11\xd5\xe1$D\xc9\x94\xcd\xb1\x94,by\xe1\xcb[\xd7\x95\xbfS1\xcf\xb2\x18ncu\xfb\x08\xdc\x83s\xdc])9P\x9f[\x9cbT\xc8\x01\x1f\x02)G\x1d\x12\xa3\xf0\x03s\xddv\x8c\x18\xe5\x13\xe6[\xf9\xf1H\x88]7A\x8c\x84do]\xab\x05)\xf2\xa6\xc1lV\xd6\x9e\x0f\xb1AK[\x1b$\xa7\x85\x84t\xaa%)g\xc3\xd2T\xe5\xd7ME\xb0\xb8u\xe6$hz\xb9d*\x11\xb1\xca@\xacO\xa6\x8b\\\xd4r\xcf\x7f\xab>\x89B\xce\xde\x96\xaf\xa3\xdd\x86\x17\xb7J\xd4\xf9\xe9\xc7\xef\xcbl\xbe\xaaD\xd9zI\x02R+_U\xd1c\xf0$$\x85\x9ar:'[\xea8\xa3\xa6`\xce)\x8d\x152\x96qV\x08\xa7\x89\x89\x12\xb0o\x1b\x914}C\x06\x98<\xf2M\x08\xbb\xdd\xdeGC\x8c\x89\xc1:\xf0\xbe\xd9\x96\xc2VW\x8af\x90\x9b\xd8N2\x95\xca=\xd2uyW\x0f\xb9\xfc\xc6\xa3h;qZ3\xeeH)\xd6+\xde)vo\x05>\x83\x02m\xcb\xa0\x82hE8&\x0b\xb4\x92\xe2\xf1\x8a$\x98\xac\xac@\xda\x91Z\x1c\xed\xeaZi\xdb\xab.\\\xa1\xf6\xa6\xce{\xeb\x9db\xcd\x84\xc5\xc5|\xab\xf1!\x96\xf8\xaa'O\xa5\x10\x11\xe5\xf7\x87%`Y[\x0e\xe6 ]\xf8\x96\x8a\xc9\x12\xe9k\x10l\x82\xc5-\xf6o\xcc#\xecW\xb3\x9a\x18\xba\xf4\x1b@k\xde\xef\x8a\x02\x87\x0eo\x96\x88\xcb\xea\xf5TA\xaaE\x05QNJM\x87\xdf\x1e\xec\x07\xcdS\xb90|\xd8\xa8\x92/B\xca\x0bHI3\xa4\xfcK\x90\xde\xa0\xc4\x82\x94\xe3/C\xa8\x9d\x96H\xa2@%;\xa5\xb1\xb47a\xc9\xa7\xe8H [b\x05\x04*\x0b\xed\n>M\xb8\xae9\xf5\xb0\x18\xb5r\xd3\xd4\xfd\xbae\xf7i\xc3\x19J\xe2yF\x9ba\xceP\xda(,\x84\xd8\x18C0~\x91\xdc?\xb0i<\x87\x88t\xd6\x11\xae\x85\xe6\xdb\x82\xedy\xc8\x89\xa8\xb6\n\x0c\x90\xa0\xc2d\x13\x0c\xea\xe2\x96(\xc5-\xcfP{!\x05-\x15Od\x9a\xcc%s\xa7\xfa\x16\x8f*\xe1\x19ih\x07\xb9T\xf7\x08rv\xc4\xb8<\xba)\xc0\\\x953WK\xff\xac$\x18I\x14\x86\xb6\x9aw\xc6\xa5\x80:\xe3N%\xdb\xa1\xb5\xdf!F\xe5``\xd7\x15\x13\xe693>\xe3\x8e'|\x96eV\xca\xbe\x1b\xbd\xcc-=\x81\xd6\xff\xc9\x9aA3R7+h\xb1G\x07I~2\xe5\xf3R\xdd\x10\xf3\xf8u\xb0\x10qr\xef\xc0\xa4\x19\xd5\x83>\x89@\\\xd2T\xa1Uv\xd0\x9fbt\xac\x03\xba\x14\x81\xfe\x18\x93\x92p2\xf9\xa0\xf1\xc5]\x10\xc9\xe7wA\xb4\xf7\x0e\xec\xb3h\x8aJ\xd3\xad\xca[s\xde&K\x98\xeb\xbdR\xe9=\x17\xc1g\x9a\xa2K\xb8\xd8{/\x11\x82\xa6\xa88\x9c\xb5\xdf\xed\x92\x90\xa6\xe8\xa7\x1f\xdf\xec\xbd)\xf6\x01\x9a\xc0B\xdc\xd06j\x7f\x81NdY\xbb\x91\xb2T\xba\xd4\x06\xcc\x06_n\xb9\xdc~\xd2\xb5\xa0\xa6\xec\xa0y\x01\x89%\xdb\x02\x8c\xe3P\xa9\xe9\xb5\x96\xfe\xb9\xb2\xe7\x18\x9e`\xb2\xd3\xdc\xe4\x96rtv\x82\xc9Jr\x95\x03L\x964\xed\xfe\x8d\x05\xb7?\x04[\xb9>5\xf3s\x03\xb0,\xc9\x86\xde\x80\x8a\x7fMo\xba7AJ\xee\xe9M7eb\x944\xf3\xc4\xf7\x8aU\xb9!@\xf1EU\xe0.Jm\x8aR8\xcb\x1ej\xd2hQj]\x96\xca\xf3\xc2\x00\xf1\x8en\x91\xdc\xaa\x04s\xf0h5\xbd\x9b\xd3v\x9f\x1c\x80F\x8ayw\x8f\x01\"w\x97;\xfe\xf0\x1b\xbe\x0f%#\x12C\xbcs\xc4\xc8C\x8es\xf9\xa5`\xc9\xeb8i*_<*,\x14!\x02\x0b\x12\x18\xe4\xd2\x18\x12\x1bJ\xe4hS\xca\xf6\xad\x88\xdep\x88O'\xc2\xeb\x88\xb5\x12\xb6`\xe1\x1dK\x88\x8ad\xd7J\xd8/\xbb0\xb1l\x8aZ<\x7f\xcch\xc5\x1cG=-\x8f\xa3\x00\xcfN\xb4\xe5\xd0\xd9@[\x0e\x0d\x14\xa2\x81\x9d\xd5\xeeK\xec\x88\xb6\xb0\xda\xedg[c4P\x16V\xa9\xb6\xb0Z\xd8\xc6U\x9a\x83\xa8\x98V)\xb6\xb3H\xa6\x80\xdaq\xb7\xcc\xcc\x81 \x9b\x8a\xf9c\x12\xe2\xd3\xa7\xaa\x83\xa7\xc3C&2\xba\xe6\x04\xc5`\xd9\xf6\xd8\xc1\x99}R\xf7H\x93\xa7\xb2I\x13\xc7\xe5\xf1V\xd9E\x7f\x12\xa3D\x8e\xc9\xf3~\xff\xe9\xe0\xf9\xf3\xe1\xd9\xe9\xd3\xd3\xfe\xf3\xe7\x03\xec\x7f1\xdd\xa8i\xf1Tw\xf2L\xcf\xe2y%\xafg\x05\xbci\x99\xfa\xcb\xc4\xb5\x93;\xc9\xab`q\x83*6\x87\x9c\x9a/s\xac\x86\xf9@\xb9\x86\xc7\xd0\x9e\xe8\x8a`\x0d\x9ad\x11\xac]WtoC\xbe\x84{y\xe1\xbaIa\x1e\n\xfa=\xb8a\xfaF'\xf0o\xd4\x04u\x94\xd2\xd0\xf0\x0b\x02\x8e\xbc\x8a\xeeB\xe6m\xb0\x8a\xd6\xbd\xa3E?\xb3l:W\xc6\xf5\xe1F\xb2\x12!\x9cr\xe8\xcb\xf2%\xfb\\\xbc4\x97\xfb_6\x8f\x85J\xa0\x12\x07\xcb\xff\x86\x1e:\xe9\"\x88\x82D\x1dq\x9b\xc7\xd6 w\x8c\x9c\x0f7,a\xad0m\x05-\x1e\xf3\x8e\xfa\x00\xb2\xa3\x82\x99\xdc\x0dk\x99\x16[Q\x98\x82\xc5x\xd0J\x177l\x13t[o\xcc+u\xfe\x15\xf2\xb5|\x9f\xee\x167PC\xba\x97\xdd\xb6\xeb\xc0\xf8BO\xf49\xf8\xd2TB\x03\xc59:\xa6A\x87L\xe7\xb5\xb2\xaf>\xd7\xca\x9a\x01j(+)\xd6\x0f\xc1\xd6\xde#\x81\xad\x96(E\x1fTG\xfd\x87\x9c\xa4\xec\x97\x9d\xe4\x9a\xe4\xf5&\xd8nC\xbe\x96\x97\xab \x8a\xae\x83\xc5\xad$\xdb%2'\x80qS\x85B\xf3)\xa0\xd6\x9c\xf2\xae)m\x9e\xb0\\\xb2\x9c\x8c\xf6\xc9\xbe.v\xc4\xc6b\xc4<:\xc0\xa5f\x8d\x95\xc8\x9d\xd8!\xfa\x1bG\xaayLp\x9ev\xbf}\xf5\xfa\xc5O\xdf\x7fPv\xd1\xa9\xe6R\x1aF`\xa4\x03\xf6\xed\xd9\xb1\x99L\x14\x8c\x16\x95\xd9=\x98\xf6\xe7\xd5\xbc\x14\xac\xf2\xaeRt`\x8a\x9a`x\x15\xbc\xfb[\x12\xf3u\x91\x9chU\xea\xba\xc0(\xe9R!\x98\x82\xbf\xd8\xaf\x1c\xf0\xdb`4\xe9\x8a\xd8XW\x11a\xdd\nL\xda\xac\xcb\xeeXr_]\x17\x86\xe2\xd8\x99\xf4\xd2\x1c\xe3\xeaZ\xb8,\xb2\xdd\x1aT\x07vK\xa3{\xdaBq\"\x91?\xe4\xeb\x88i\x10\xb5\xc1\"n-b.\x82\x90\x9buTy\xdb5\x9a\x85\xaf\x05-\xfc\n\xd0\xfe\xfe\xe2\x87\xef\xf5*\xab\xc0%\xd1\xfe\x10T\xd6;\xeb\xc8W6\x91\xa2\x07M\xa4$\xcf\xaa1\n\xd4u\xc4\x12i\xber78\x83=\xdd\x12\\\x9b\xcc\xa5\xa6\xf3R*SV\x85\xc2\xd0\xe3\xe2\xb0\xd7\xd6\x90n\xb5]Z\x95\x01\xe7\xe8\xf4\x19\xc6#)g\xdf\xb0$\x04\x9b\xd0\x93\x01\xd6jj\x8e\x06'\xcf\x14\x1f1\x90\xfboY\x0cm\x89%;G4F\xa9e&L\x16\xb4?Z\x94G\xa5\x0b#L\xefh4]\xccG\xdb\xb2\xect7\xcf2T}@\xd3\xcam5_\xa7RR\xc1\xc2\xb6\xa7|[\xc9\xe6,\xcb\x8d\x82J\x92{\xb9\x9c\xed[\xe6\xbam\xe5\xf6\x94\xb0`)\x85\x08\xd7U\xe4\xc2\xdc\xd3\xf6\xc0.fd\x0fS\xcc\xdcC1x\x12DQ\xfc\xe9\xbb Z\xbd\xdb2.\xb9\xde\xf2\xe3\xca+SC\xad\xbc\xa9&\xe6\x0b\x86\x1c\xc6\x97\x0eY\xe1\xaa\xc2`\xff3\xed\xabte\xa0\xb9\x94\x8cw\x97\xf1%[fYR\xa4\xe6GK\xa2\xacK\x8a\xea\x96J\xb9\xc3\xf8\x12\xe1\xbcY\xe5\xb4\xb5m\\L\x03\xdf\x85\xeb\x9b\xbf\x05\x82%?\x04\xc9\xadC\x1e\xaa\x02Z\xb3j\xaa \xc4\x1b\xbb\x9eX\xa8\xf61<\x04\x0c\x95\x02\x19&\xd6\xd8u\xaf\xf4\xcb\xba\xa4.\xabQdc\x17E\x1a\x01\x01'\x88\x85<\x02$\xbc=\xe2\x85\xf6\x04\xa1\x06\xdb\x91\xde\xec:\n\xf8\x1aM\xfc]\xb0fx\xd2A\xd3\xd9\xa7\xce\xdc\xc3\xb3\xeb^H8\x95\xb2\xe1\xc3&\xe0\xbb \xf2Y\xf7}\x12\xa6\x1b\xd7\xd5\x17]\xf5\x9c,\xc3T\xf6\xf2oqr\xcb\x92\x1f\x94\x12\xfc\xbb\x80/#\x96\xec\x7f\xf3Ha\xb2\x13a\xe4?(\xeb\x8eb\xaeZ\xcc:i\xa8$2\x8f'j\xfbP\xa9\x96 C\xa08\x14\x8cK\x89\xb5\x1bDa\x90b\x7f\xdf\xcc\x18,\x0e\x19\xf6E\xa9\xbds\xc1J*\xd8lG\xb6\xc9\xe5\x18\x9eF\xa2\xf2p\xb6\xeb\xf7\x03\xb0\x9ej98'\xb2\xe5&!\xf4\x8b\xe6\xb2\x95\x138\x12_\xff\xfcf\xd9T\x0f\xeb^]\x85\xcb,;\xa8\x1f\x97\xaf\x1ds\"\xecy<\xc7D}\x93\x93E\x14\xf3\xea8\x1a9E\xa9;\x92\xae\x1cp\x18<$\xb0a\x9a\xc0\xfe\xf7!'\x81\x8ev\xacZv \xd8\xaf\xf9\x04\xc0\x95\xfc\x08\x9f\x86\xf3\x82\xb2O\xc3r\xd3\x03[\xf3\x18,.\xc0\xe4\x9f\x08,\xea\x1e\x01\x90\xf9J\x19\x1a 1M\xe7\xc4J\x14\x17\xabh\xc50kE\x14\xe2\xe6\xf6'\xf2\xc7G1d\xa5\xd3\x8d5\nM ~\x88\xa7 \xb4\xa6\xc5\xae\x18\xd7\xf2\x89\xb4D\x0e\xda\x85\xef\x03\xbe\x96\x0b\xa22%\xca{\xcbu\xdbBi\xe9Xw\x11\x05i\xfa6\xd80<\x02\xe3\x9fm\x900.^EL\xf2z\x85 8\xb1Kj\xd3{\x81\xb3lJ\x1c\x1es\xe6\xcc\xf1\x9e\x91\x9b\xaf\xde\xe4d\xb1Kd\x95\x97 \xf9\xdb\x14\xb5\x9a\x99\xb9\xd0\x00.\xe3\x050\x9a\xc5\xa4\xec\xa2\x08,\x81+\x159!\xdf+i\xee\xbb\x95\x92#\x91\xdc?\xd4\x8c\x86\xb5\x02!1\x8a|\xd4\x0bDk\xfa\x11\xcd\x92\x19\x9f\x1f\xcf\x10\xea\x1ec\xbf\xeb\xf9]o\x86\x9f\xf4Be\xd7\x97\xe8\x83\x19)\xeb\xc9\xfe\x8el-w\xd1\xf6\x9a\x99\xd1K\xbf\xb9\xff\x10\xac\xe5\x88!G\xe9=\xac\xb8\xdc\\99\x19\xddv\x9a,\xac \xf8\xf2Qnu?\xcfs\x12\xe9\xf9L\xfd\x07\xf6Y0\xbe\xac\xa9N\x14y\xd4\xd8\x05\xeb\x06%\xdd\xe2\xa3)\x9b[adU\xdb\xdc\x1cs\x94\xe2\x0c y\xca\x12\xf1\x0d[\xc5 \xabY\x10\x17)H)\x8ai,\xf7\xfe\xa2v\x8d\xe6x\xb4W \xc5Y\x86\x02\xb9\x00\xc3i:W\x91i\x164\x9e\xb2\xd2[p\xca\xe64 \x16\xb4\xddo__\xdacCjj N)]\xb8\xaePI\xd5\x84\x0e\x95\x11\xc0r\x0br\xf2\xed\xeb\xcb\x1aE\xd2Ati\x08\x16R\x8a\xb3\xb5\x97yuT\xd4\xa47\x8d\x8a\xb6m\x10$%@L\xe2,K\x15\xa7\x1cQx\xb0\xa8\x10\xbc\x08\x8f\x0cikS\xba\xc8\xb2p\x1a\xa0\x08\xcf'\x9a\xe6T\x1ef\x19\xd2W\xc07\xa2\x88p\x92\x92\x10c\x7f\xff\xb9rx\xc6\xe0\xcb\xb6\x8dv\xeb\x90\xa7R\xe0\x96\x0cU\x14\xaeo\xc4\x8b(\xaa!_\xd2\xb5_\xfe\xc4\x97,AfE\x80\"\xb8\xfa5\x14\xd83P\x07\xd4\xa4\x0f\x0b#\xd7s\xa2\xa5#\xb9 \x93\x94E\x0c4\xf7Gro\x9d\x025:\xa6\x8e\x99\xc5\x8e3'\xad\xa6\xa7\xe0\xa6KZ{\x1f\xed\x7f`\n\x1f\xe5\xa3\xa4{\x13\xc7\xb7i7\xd9q\xe4\\\xc3j\xe8\x14\x1d\x08\xa2\xc8\x01\x9b\xaa.\xd3\x0b\xbd\xd9\x08B\x1f\x94\xc6\xdd\xa2\x1b\xdd_v,\xb9\xbf\xd4=y\x11E(\xee\x9a~a\xc9\x10\xed\xb7\x1aDQ\xc74S\x82 \xdb/\xdd\xd5\xc0\xb8.\xa4%<\xd3\xc0\xf3\xe6#l\xcd\x8a&I($m0f%\xca\xa2\xe0Z\x1d4\xd7\x8b\x95S\xa3q\xbb\x82\xd3\xd6\xe6\x82\xb8\x14\xdel:\x13\xccG\xbc\xdc*\xa8u]0 \x828\x15v$\xf54/\xe29\xadr\xe2\xbc@c>\xd7{\xd2\xdbx\xc9F\x91\xeb:\xdb\x04\x8cp\xa3.\x8f\x97`\x14R\xddx /^ A\xf4\x07 P\x8boA\x1f\xf4\xc0\xfa\xbc \xc3~@\xd6I\xb0\xd9\x04\x89\x9f\x12\xe0\xf6xW\xb0\xcf\xe2\xa5b\xdf,\x8d\xd4Nn\x12\x8br*\xd8\xf2e\xbcd\x945N\xb7\xa2\xbf\x0eY`\xb20\xd3\xd9\x0d9g\xc9w\x1f~\xf8\x9e\xeeUS\xad$X \x96\xd8X\xb2\xa8!\xd5\"\xdel#&\x18\xbc ]7T\x14\xa7h\n\xf47Mp\xa5\x01\x0f\xc5}gq\xc3\x16\xb7\xf0q{\xd1\x95\xbd6;\xd6\xe1V\xa4\x18\x82\x9a\x9aR\xf1^\x1e[hz\x18\xf48K\xb2\x19K.\\1\xde\n)\xb7pH\xa5\x9e\xa0\xa4\xbb\n#\xc6\x81\x99\xd9vc\xae\xadY*2\xc3\x0e\xb1\xee2\x10\x01\xce\xa5\xf4\x12\xa7B3\xf0\xa8vF\xfePL\xf4\xa2\xc0n5\xcf\xaa\xe3$\xdcl\xd82\x0c\x04{\x19\xc5\xa96wP~o;d-<\xa4\x8b\x17\xdd e}\x18\x8f\x8a\x0f`e)\xb9A\x7f\x82\xed\x85\xd9H,C\xfa\x00\x10\xb1\x02\x15E\x89\x9f\xbc\xb0\xd5m\x1acp\xfe\x0c\x7fe\x0e 1 \xbbp\x9b\x82\xa2N=G\xa1\xeee1\xfaM\x98V\xa9%\xb6F\xaf\xda\x1fS\xbfl\xa9\xe8{N\xcc\xd7\x8d\x8c\x0c8p(\xef\xf1\xd2.R\xb3 \xc20\x04#\xed\\\xa3\n\xeb\xcd_\"Dh\xfa\x1e\xa0\x05YtoX\xb0$\x0c\x93\xda\xb6\x1d\x92\x88,\xc8\x8el\xcb\x16V\x87\xf9\x96\x15v\xddp\xba\x9a+\x08\x97T^\x8f\x965'\xd0%\x9e,\xfd\xe9\xb2\x94\"nh\x7ft3^\x96\x8e\xbc*\x01\xff\xd6u\xb7\x94\xae<\x878\x9eqN\xd6g\xf4\xcb\xe9\xcd\x9c\xac\xe9\xa6\x1b\xf24\\2rO\xdb\xedM7\x8a\xe3\xdbkv\x13\xf2%\xb9\x83\x07\xeb\x84\xb1\xe5=\xb9\xa6}\xf2\x99n\x94\xac\x08>\xa6\xae\xdb\xdet\xb7p\xee\xcf\xb57\xbe\x02\xf9\x13-\x9f[\xae\x7f\xda\x91v\x1an\xd2\xdd\xfd\xfc\xf8I\x0fO\xfb\xf3QQ\x94\xfe\xc8\xd6\xaf>oQ\xf9\xad2\xb2#\x9f\xb3\xcf\x82\xbc\xa3\x8b\xd1m\x9bR\xde\x15A\x18\x8d\xdey\xf4V\x99\xc3\x1a\xcb\xd6[z\x0b%\x15\x90\xaf\xcck\x98zc\xe1&\xaan\xdc\xcav\xe7UE\x92\xd6^\xaeWt\xa0G\xe1\xb6\xad\xdb\xecn\x13v\x07\xa3\xbe)\xbdj\xe8;\xd2F/\xe9F\xb1\xf6\x02c\x1d\xb5C\xd6qI_\xaa\xc3#\x0f\xdd\xbb\xee\xcb\xe9`>\x91?\x1a\x06\xbf\x8f\xc9\x87\xa2\xc4\xcbi\xdf\xbc ?\xd3w\xd0\xff\x9f\xeb}\x1c]^\xd0\x9fG\xd8\xf4\x94\xec\x17\x08W\xe8\xe7N}d\xde\xd1\x9f\x89~T\xedj\x11\xa2\xc0\x8c\xf6\x0bz;zQ\x0c\xb2\xeb\xa2\x9f\xc7\x1f\xb2l\xcf\x98\xf0\x85\xaa\xccu\xdb/`Pts\n\x95\xf0\xe8\x05}\xa1f\xe2\xca\xf3$\x8c/\xaa0^u:\xe4\x15\x15Z\xec\x7fG~\xc6D\x8fB\x87\xbeS\xc7\xf3\xf6\x00+\x97\x85b\x88_\xc1\xde\xf2\x12?\xdc\xbb.\xba\xa6\x0d\xa3:*\xc7\xfd\x9a\xbc\xa40\xb2\xaa\xadk9\xe2\x97\xdeK\x03\x89\xac\xf8\x0d}U8>_b\xf2\xbe\xb8\xfd\x80\xc9\x8f\xf4\x16\xfa7z\xe3\xba\xe8G\x1a N~$o0y\xe7\xd17\x85\x9fw\nO\xaf\xd4\x1e\xff\x96*E\xcc\x8a\xac'\x16\x15|I\xd6\xd8\x7fI>\x93\x97\xe4\x0e\xf6\xab[]\xd9[L\xde\xbb\xae\xbc\xbe%\xef1\xb9\xba\x18\xb8\xae!*\xaam\xf2\x8e\xb4\xfb\xc4\xacp\xb2S\xf8U\x04\xab1\xf7\xf2?\xc4\xc8\x82\x08C\xa7\xfa\x984)\xe3 \xa7\x0c\n\xc0\x14\xa98,\xbc\xad\x0eO\xc3hT(\xe7M8\x10N\xb9*Y\xa8\x05\xd0B\xee(\x92\x86\xfb\x0fA\x14I\x96>X\x1e\x12#\x15\xad\x0f\xa2h\xc4\xa5\x00%\x7f\xe0\x8cS^\xa8\x96$S\x9f\xec\xf8\x97\xbe\x97\xa2\x98\\\xca\xaekVs!\xf5\xc5`\xca\x1eS>\x0d\x81_\x8de\x9d9\xf9\x00\x81 \xe2|/\x12\x84\xb2\xab\x07\x0d\"\xd8\xca0s\xce\x06,\x17\x15FI\x1e\x06\xa9v\xe0\xd7-\xd2~\x86\x92,\x93L\x9f^Z\xf0R\xe1=m\xb7\xadd\xcf\x9c\xe9Gg~\xecdG\xd3\x8fG\xf3\xe3#\xec\xa1\x89?\x9b\xa2\x89\x8f&m\xd9\x18\x9e~t\x8e\x1a\nf5H\xf0\xf1l>K\x8f\xf1\xe4\xa2\x17\x12\xb5wJ\xb1\x97, \x85ao\xdc\x9eM_~\xfb\xe2\xc3\x8b\xd9\xd4|4\x9f\xcb\xa2\x92\xb4Z0\xcez\x134i\xcf\x96x\xfaq\x96^\xccz\xf4\xc9\xf8\xcfs\x80)\x85\x9fc\xf3\\?<\xa6\xb3\xf4\x18M\xfc:t\xb2\xd8\x91s\x01\xc5\xe8t\x96^\xcc1\xce\xd4eO^c\x0fOf\xe9\xf1\xacW\x85\x97(\xb1\xca\x7f\xa8\x82\xf5Q\xc2\xa5[\x9e{\xbd\xb0(\xb6\x95\xebs\x07h\xa8K\xf5\x88\\~\xe96X0\xbf\xf7Q\x7f\xe3\xcf=\xbf\x97\xe7\xc4\x91d\xb6\xa3\xc2\xb4Y\xd5\x7f\xb1\x0f\xf8@\x93\xd3\xdeG\xda#\x16\x9cHN\xc1\xd49\x9ag\xf2\xe7I\x8f\x94\x92\xa1\x9c\x8dy\x9e\x93\n\xc8\xd0\x7f\x0d\x168]YP\x95\xfd-\xda>\xdc\xb5<'\x8c\x8bP\xdc\xfb=\xf7O\x93\xe9l\x19t~\x9d?\x0c\xc8\xb3|\xd4\x0b\xf3\x06\x9c\x96\x94_\x0b\xb1S{X\xe6\xfaaWUG\x1b\xbeTo\x087l\xe4ri6\xbf\x8ai\x8e\xa3\xca)ot\xb9\x16`\x01\x96\x1b]W\x84\"b\x94\x99-\xc9:.\x0d6\xdbQ\x8f8\xae\x83\x81U8\xe0\x12\xd3\xd8'\xe2\x04\xcb\xe5\x1b\x1e\x01 1\xe7\x96\xfb\\p\x02\x81\x8d\xa6\x96.\xda\x13sZ\x0e>\xfah\xad\x18lV6\x9a\xd0\xd9|6\xbfx\"\x11\xa22\xb5f\x8a,\xa0\xa6b\x9e\x93\xa4\x0b\x0b\x90\xf6\xec\xfa2UI/T\xd1\x8d\xe9\x83\xa3\xad\x87\x96\x1d(\xedT\xa8\xc6\xde\xc2\x85\xafK\x8cL\xf2|\x14\x1f\xee\x89\x86\xbdw\x00Bm\x17\xf4\x90\x8fB)J\x14\xdfi\xc5B\x0f\x8d\xaf\xaeL\xc3\x17\x18M\xfcC\x00\xcd\xd2\xe3L=\xc0\xc7r\xa0\xc6\xb3\xde\xd5\xd5\x05\xeei\x8dD9\xbbWW\xbdu\x93\x0b0\x93S\xed\x84\x0e\xae\x8d\xec\x1eq\x88\xab\xf8l\x9f\x8a!Ga\x82C\x1c5\x92\xe0V^\xa5\xe9\x9f7Q\x05\xab\xd5\x81]\xf9\xe5C\xad\xfc\x8d\xa8}\xa0\n\xd6\xd6\x94\xb8\xf9r\xa9\xf4n\xddTd_\xa0\xec!';\x92\x83=\x9b\xc9\x9fd\xc6\xcd\xd0f\x92:\x0f$u\x9e\xc1q(>\x9e\x0dz#fU\xbaHSk\xbf\x9a\xf5f\xc7\xc54\x1d\xcfz=\x12\x88d\x17\xd9\xfb\xd2\x7f*\x8b\x0cS\nM\xfc\x91\xa4\xd4\x92:?`\\\x12\x1f\xf8\xac\xf7Q\x17\xef\x11\xc7\x1c\x8etL\x07:\xc6\x0c\xd1F`4\xbb6\x05e\x95Hv =\x9ea,I%l\x85\x08\xcf3\xf9\xbc\xb8\x84\xbf\xb2\x88\xfc\xa7V\x1d|Q#\xa7\x04\x98z\xbf\x80\xc3\x91Tp\x97D~\x1d\x89\x9d]\x12\xcd\xa0\x05\xc7\x13\x1a\x1f=G\xd2w>KdSx6\xc3\x8e\xc2\xbd\xfd\xad\xc8\xf4\xce\xef}\xdc%Q/\xacR\xf0\x8f3\x94\xcd\xf0\x13\xb9\xbb\x14\x87`\xa6\xd9\xe9\xc7\x87|6K\xe7\xd0\xb5\x87|4\x93\x1b\x83\x0d\x82Z)3\xd9\xbb\xd9\x03v0Q\x82W\xd9\x01ao\xe5[M\xf9\xfc\xde\xb4s\x15t~\x9d}~\xd1\xef\xccv\xaf_\xbf~=\x9fvf\x9f\xec\xfbc5h>\xec\\\x1b\xc9\xf3\x04\x12\x1d\xda\xc55\xd8\xdf\x94]\x9bv\x82\xce\xaf\xfd\xces\xd8\xafg\x08\xd7\xbb9\x05\x1f\x19\x9f\xcc{9\xa9a[Wa\x94\xd97\x12\x96\xaa\x089V\x11\xedo\xc3\xf6p\x7f\x04\xe9\xf2a/*\xc9\xb6\x94?\xef#p\x0fNS\x07W\xda\xab.v\xd5\xa4S\xd9\xd7\xc9\x83\xfa\xbc#\x9f\xd9\x888K\x8f\xe1\x05-\x17\x97\xc2ykM\xa9\xf5Tn\xf6\xcd;\xf3GSUY\x92[\xfbi^\xc7\x10\xc5%M\x8f\x9cy&\x7ff\xe9\xf1\x93\xde!^\xa4k\xb17\xb5Q\xccs\x83\xf1\x05\xad\x97\x03\x94Kr(\x825\xc69\xaa\xb1\xaf\x8b(\xbce%5\x98\xda\xfb[\xa6\xfak\x13\x089&\xc7\xb3^\xf6\xa4\xbe\xd2r\xb2\xf7\xa5\x0f\x9f\xf6\xba\xc7\xf5EY\"\xec|\x0f\x9d{H\xb2E_O\xd8l\xecw@\xae\xdd\x9b\x0b4\xbbF\x13\x1f\xdee \n\xad\x82\x05\xcb\x14MO\xb3p\xb3\xd5\xa7\xae\x99H\x82Pd\xa5\xcc\x90q\xf6 C\x90\xe5k\xb07\x99\xa5\xde\x0c\xe1\xe9\xecSw6\x03\x1e\xb3q\x7f\xafr\x9cSYV.\xfd[v\xff)N\x96~\x0f\xa0 W\x19\x8bR\x96}\xba #\x96-\xe3l\x15'\x99\xda\xe5\xb2\x90\xdb0\x98\x05(\x81\xc9Dr\x9f\x81)L\x06\x00e\xab\x90\x07Qt\x9f\xf1]\x14e\xa0\x90\xcc\x8cn\x19\xcf\xae{\xe4:\x8e#\x16p\xdd\xa8Hv,[\x05Q\xaa^\x96K{\xf6\xc9\xaci\xa2\x0c\xc6\xe5\x07\xfd\xcf\xc0#\xae\xe6\xde\xec:\x93Sq=[z\xb3\xeed\xb6<\xcef\xdf\xcc\xba\xb3\xa5'\xa7\x89M\xbd\xce|\"o&\xbd\x90H\xf2\x13H\x02\xd7\x9b\x8e/\xe6t\x92M\xdbtN't\x92u:\x93l\xe6\xcd\xbcI\xe6\xba\x93l\x96\xcd\xb2I6\x9d\x1c\xf7\xfe\xf5\xf1\xcf\xf3^\x8d\x92<\xe4\xd3\xd9|\x840\xe9\xfa\x92\x9a\xd8\xf8\xfasp\x17(c\x9c\xc6\x1d\x1a\xd0Y.p\x1b\x15\xa6{\x08?\xb5\xdf\xcf\xeb\xa8\xfb\xa4J(\xf1\xf4\xea\xc9\x8b\xce?*\xb4\xf4I\x03-\xed\xa2\x89_\xe8\x882\xcb\xedoo[\xca\xe7\x05:\xd8\x0b\x0eM\xfc\x8fYnv\xbd\xca\x0c\xc3\x84=\xbe\xe0\xba\xf3l\xd6\x85\xff\xd3c\x0c\xf3\x1d\xa4Y\x90\xde\xf3\x85\"\xf4hR0\xb9\xb3\xebl\x86\xb2z'\xb2'\x18g\xc1'\xb9\x064*\x05)\xcb\xd4\xba\x81\xde\x14\xb8\x95-\xd9\xf5n\xbdfI\xa6m\xd72u\x90'\x11\x19\xd0\x9a\xf1\xdd&S\x82t\xb1\xd0$\x86\xaf\x92xSb\xf4\x9a\x89,\\\xd9+P\xed=\xb5\x15P\xae\xd9\x88 X\x06\x80\xee\xf1*\xdb\x06\x8b\xdb`\xcd\xb2m\x12\xde\x05B\xfe\x8d\x05[\x08\xb6\xcc\xb6\xbb\xeb(\\\x98\x15\x952\x91\xa5\"\x10\xe1\"\x03\x87\x83L\x19\x1a\x82e\xb4^O\xb0\xb2@\x99\x90\x15\xfa\x85\xec.H \xc6\x92^\xa6\x9fBq\x93\xdd\x87,Z6L\xc7\xdcZ: \x9b\xfb\xfd\xe9\xe7\xff\x03\x1b\xfbl\xf9\xa2\xf3Z\xae$4\xf1\xaf\xca;<\xc1^\xd6\x9f^\x7f\x03\x85\xfa\x03\xf5\xba?0/\xe2w\xeaE\xe7\xa9~\xd3y\n\xaf0\x9f\xc0z\\\xca\xa7\xb3\xa5|\xc4\xb3\xb7\xc1\xdb\xec\x0d_\x85<\x14\x12Y\xd4\x82\xad\x95\x9au'\xd5'j!\xd7J\x01\xc7\xf5\x8a\xcda]\xd7\xdfMl\xb2\xf1\xa7\xc9\xf4\xeaI\xd0\xf9\xf5k\x16\x07\xe0\x1f\xe0\xa6D\xcc\xed6\xba\xcf\xaeC\xbe\xcc\x16A\x14\x01\xc6O\x80\xfc\x94\xf4\xa3\xd3\x01r\x91\xcd\x8eg\xc7t\x92\xd1\x8b\xccu\x81l(\x92B\xb3\xf1\x98N\xb2\x8b\x8b\x0bI\\\xa6\x1d\xef\xb8\xf7g7\xfb\xd8\xa6\x8a\xec\xcc\xba\x0f'y6\x9bL\xbb\x93\xf9$\x9b\xfeK\xd2\x11|\x80\x90T\x89\xc1\xb4?/\x8eN\xbf~\xeb\xd8\xdf4\xca}\xe2\x11Q\xa4\x04\xc2!\x8e& \x0eyH\xd8\x9a}\xf6\xeb\x94\xa1N\x98\xba\xce\x91\xdc\x9d\xd39\x8c\xdf\xacg\xd4B\xd3\x8f\xb3\xb9\xde\"\xb3\xd9\xac\x8b\x8f\xe1O6\xfd\xd8\x9bI~\x06\xb6No\xd6\x9b\xae\xc3\xcd\xfd.\x9d?\xf4\xc9y\x8e&\x14\x945Y]\x1a\xc0r\xbe\x9ed\xf0\x19\xe9\x8e\xfc\x1c\xcf\xe6sY\xaa\xb7\xcfl\xdb[q\xc1\xf0\xdf\x05I\x18\\G\x95\x1d\xf9\xb7!\xce\x94\xfas\x8d7\x92\x9a\x01\xb2\x00z[\xe4L\xde\x1f\x92\x0f\xb2\xafkL\x8e\"\xbd\x90\xbd\xd2,\x94\xa9\xde\xc9\xc96H\x82\x0d\x13,\xa9\xd0\xebB*\x93#\xe7\xa9]\xa2\xcet\xef\xb5\x02:-\xa4h|{\x96\xe2&\xa0\x1f\x11h\xf6Et\x0b\x93\xed=Au\xfa+\x86\x97^`\x9bI\xfdR\xbd\xe8\xeb\x81\xd7\x95\xff\xde\x1e \x98\xe4l\x96f\x1fes\xd6\x86\xd6\xb0K\xc1f\xf9\xbf\xb7Wi\xbe\xea\xffW{\x16\x9a\xb4\xeb(\x80a\x06\xbf\nq\x81\xc6\xfc\x96\xa9\x9f=\xfc\xc6\xa9\x9f\x13\x989\x90Bg\xd7\xd3\x17\x9d\x7f\xc0\xfe\xf7\xa2\xf3\x8f\xaby6[~\x9e\xe0\xe3\xd9u\x9d\x8c?BO\xf5\x11%yp\x04\xdbl\xa3@\xb0\x8e~d\x91\xa2\x7f\xdaR\xde\xec\xc9\x83\x16\xc4\xe7\x99u5\xfd\x98\xcf\x8fs|\x9cc/\x07!\xe4\xc9\x03H!\xff\x9c\xe3\xe3\x7f\xf6\x1a\xf4\x01e\x83\x16_[\x11\x0f\xff\x99\xfd\xf3IAh4T9\x01\xac\xd9\xc6\x91\xe2\x83\xf7\xe9\xbf\x94\xc6\x00\xde\x87a\x8e\x8f\xf1W\x80{`\x06\x1e\x9cJS\x07\xc1\x9c=y\xc8\xf2\x12P\xbbXN\xa4\x18\x7fh.s#\xd8\x15\xca\xc5\xbc\xaedS\xe2=\x98\x15\xd4\x9e\xed\x0b\xfbfJ\xad\xf9\xad\xed\xe6)m\x86\x844\x1d\x17\xa5,Z\xa9\x13\"\xe3\x1b\x04\xd7\xe6(\xccu\x8bC\xb1\x8a\xc1\xaf\xeb\xa2\xf2\x1b8\xc7\xfb\xce\x9c\xf1Ul\x14\x19eYf\xaa0\x81?\x7fN\xfd\nzn\xef}g{/nb\xee\x90\xe4\xdaw\x92\xdd\xf5\xbdC\xb6\xe9\xc0w\xb6\xf1'\x96\xa47,\x8a\xe4\x83M\xedIz\xe3;\xd7Az\xe3\x90\xeb@\xc8K\xb1\xb8q\xc8\x8d\xef,\x1c\"\xd8g)\xfa\x0b\xf6\xd9\xc9\xf7\xe3\xfc\x97a\xfe\xd9\xbe%\xb3\xb3M\xd8\x14\x0e\x1f\xd3d1w0>\xe8\x00\xdffMG\x96i\xb2\xe8D\xea\x98\x10[\xb6 $\xa6\xac\xbbf\xa2\xa1\xb8\x83IH\x19 \x1e\xf7\x00\x1b\x85\xae\xdb\x0e\x94\xbbKXqw ih\x9b\x16\x87+\x14B\xf2\xba\x06_\x97@\xf9\xba(?\x17\\$\xccM)\x8a\x8d\xfd\xdc\xac\x8bf\x9f<\xfc\xa4g\x17\x1d%`\xb8\x9fei\xae\x0e\x81K\x17\x15p\x8f5f\xd9*\xcc\x1d\x1e\xd9\x86\xcb\xb6\xba=!\xcc\xb6.\xa6\x8eC\xa2\xea\x83\xef\xd5\x91\xed\xff\xf3\x7f\xfd\xdf\x0e\x01\xcbs\xc6\x97/o\xc2h\x89\xfe_\xf6\xde\xb59n$;\x10\x8d{?\xce\xaf\xa8J\xf5\x14\x91D\xd6\x8bRwO\xa3\x98\xc4h$\xf6\x8cN\x9e\xe4\x85\xc7\x11\x13>\x13\xd8\x19\x18z\xc7\x0d?i\xb0\xd9<=GxIF\x9d\x84\x85ca\xeb\x08\x0e\x83\xc8[\xdd\x8f\xebw\x16\xebX\x05D\x87\xc0o\n\x81\xa5G\x1b(\xa7\x0b\xf9\xa0dVk\xf4[\x0cW\xfc\x1d\x19[<\xad\xf0\x87d\xdc\xe3\xef\xcaK\xe4\x0d\xb1\x0d.n\xf8V\xe1\x04\x1cM\xb5\x1el\x1ex\xe1F\xda\xe0\x1dl\xccXz\x1c\x8d\x1bQX\x8e\xe8p\x83\x17\x967:r\x11\x97}\xe0S\xe5\xa6 \x0do\xd1\x11\xdd-[\xaab)\xde&\xa0\x92\xe6:\xe1V]{\xf7&\xaf\x9f\xfeD\xf8\x89)|\x96\x17\x0e\xd6\x94i\xa4t \xd1S\xd6\x82\x1a\xc1\xe5:9\x82\xb0\xf0r }MT\xb3\x86+yI\xa8ro\xad\xe6&qM~\x12\xab\x12w\xebJ\x90\xa8\xb6\x0c\xf8\xaa\xbd\x01r\xe5x\xb6\xf0\xc8Y\xe7\xda\xa8\xe4\x13A}\x14\x9eCdM\x920\x0b\x87O\x1d?y\x12\xa5\x9ci\xd0\x98\xe8\xa9\x82\x96\xea<\xcbV=\x15\xb2V\x8bW\xdb\xe4\xf5\xea\xae\xdd\x84k\x8c::\xad\x06*\xb2\x99\x05\x117\x1d\xd7r\x98\xbb,y\x99\x9b3\xaf6\xba\x0e\x89\x95\x9a\x98t\xad7\x08M\xda\xc7\xb1IYn\x1f\xb0,\xf5\xe8 \x9bz\xa9\xff\x82\xfd\x1b\x16\xd7z\xcc\xea\x89\xe0\xb8\xc2\xe7j\xe7\xc9\xee\xd7\xef\xef?\xfa\xd6\xee\xe1\xa3'\x1f>z\xf2h\xff;\x94\xd2~\xb7\xd4C\xb1)\xaa\x07\x0e\\\xa5\x83\xef4 \"\x89\xa9\xe1W<9\xe2\xdc\x1d\xe0v,\xc0gND}'t\xcb\xf6\x8bu3\xa7$|\xe4c\xfdVv\xce\xcbT\x8d\xc1\x1b\x07\xc9\xae\x0e\x99U\x135(\x84\xc8>\xbc\xd2\xaf\x89\xe3\xf5:\xea\x91'\xef\x1a\xf9\x88\"O\x16AP\x07\x86\xa0X\xaa\xe5z\x1a\x7f\xac$\xd7\xf5\x05\xf2\xfc|0\xeb\xe0X \x11+\n\x08\x0c\xd5\x15X ),\x0b\x9c\xcf\x8e\xa2:\xc8Q\x02_V\n\xdc\x08|\xce\xe1dfq\x1dZW\xbbB\xbf\xc8Q\xc1\xff\xe7\x9c\xbc\xbc\xe8\xc3\x92\xdf\x9e\xd5\xf6\xf8\xf7Jk\xb0\n\xdcT\x062\xe4\x85\xb2\xac\xa4\xf5/\xec\x96E\x88\x0bYE]]\xf9zR\xc5\xe7\xb3\xd8\x9f\x81\xfb\xfc\x9b\xa8'\xcbj\x08/\xcbV\xa9\xa0\xc6\xb8\x00\xd2\xaac\xa9\xc5\x18\x90p\x88\xc0\xc1\x94\xe5\x8f\xd5\xb8\n\xef\xe2\x8e\xf8P\x13^a\xedl&\xa5\xd8z\x9c\x8b\xe4\x9a\xc9\xfdA\xbcC{\x83\xb8\xddVZ\xc4\xcc\x89\xdd\x01\xeapDG\xb6\x8a_f\xc4\xa4\x8f-\xd4\x91\xc9F)\x9d\x84\xa6\x89\xadPx\x9d\xd4\x93\xdbm\xd0\xcc\x14\xeck\x10\xb6\xdb\x83\x10\xb3\xce\"L\x8e\xfdIj\xf0\xda\xb4u]_j\x94\xb7;\xe9\xc8\xacP\x88\x95\x8e\xcdR\xddq\xac\xe3Jg\xb6Lwf\x9b\x82\xf3W\x12\x13\x86\xf9.X\xb8GsbWsOU\x84\xc1\xd1V\xcb\"\x08\x01B$\xa2\xcd>\xf1W\\`\xb5\xfb\x03\x7f\x87\xb6\xfb\xadV3\x1a\xf8\nu\x1e\xf5wh\xcf\xd6\xfd\xcd[LD\xc8\x19hJ\xdd\xb9\x0c\xe4\xd5\xc7\xd2\xbe\x9f\xbb\x92J\xa3\xc6\xdcK\x8f\x15\x94y\xd4nQQ\x820\xe8S\xa7\xd43Q\x17\x99)\x89d0\x11O\x8b\x07&\xe5\x01#\xb2QW\xf8\xb16R\x1a\x1a\xb1\x91*\xc7\xb3]\x84I\x8dK\xa7f\x13\xf4\x81\x9a\x91\x16\xb3\x0bg\x19\xea@\xe8\x9b0\x8ag^\xe0\x7f\x97\xad\xb8\x1c\xf1),\x08GI\x14\xf0\xed \xc3\xc4\x93`E\x06#\xed\xbe\xc2\xbf\xc1\x00\x0cvK0\xfc2\x18>D\xe9F\x1d\x04.\x828\x1a\x98IE\x1d~\xdeS9\xa7\x14,u\x0cA\xc6j\xc9\xf1\xb5\x94\x9equ\x8a\x10\x06\x0f7\xec\xf7\x0b\xc7\xe3=\xac\xd9\x1b(\x14\xf1^Vc\xf6\xd5\xd1\x03\xbb-=p\x00k\x88!\x9fIX\xc7\xd5\x12\xa2=\x05^\x85\xb9\x81\x89\x836\xe3t\xc2\xef\x0d\xd2|.\xb5Z\"\xec\x9c\x93\xba\x83\xd44\xf5y\xa7\xf1\x90\x10\xe2\x1a\xc9\x9c\xa1\xcb\xa7\xba\x16\xf3(\xe42\x99\xc4\x18\x97T\xdb\xa9\xd9\xc7KF\xf3\xf9\x07\xeeRT4\x19\x12j\x1fB\xedC\xe1\xa1\x81\x96\xe9\x06B`\x1aa)\xc5\xcb\x1dH\x1a*\xda\x03\xf1\x0b\xeb&\xea\x91\x80\xf6\x06\xc1\xb67\x08L\x13\x8cg\x9d\xc0mR\xea;\x81\x8b/\x12\x1a\x08\xefo\xd2jRz\xfb\nh2\x08\xb6\xf3\xe8\x11\xbc\xe4Hp\x16\x9d\x97\x19#:R\x1e\xae}\xd9\xeb\x04\xeb\x83\x02\xc1\xa3\xd8\x9c\x13,\x81x)|\xf1a1E\x16\xbc\xfb1h\xb0\xeb\xe4ZK/\x92\xea\x11&z\xe4=\x15\x8d\xba\x83\xb4\xd0I\xa5@\xec=\x8e\xe3{\xef\x83\xa5{L\xdb}\xce\xe6z\xc4\xd7\x07\xd4\xdf\xa1\xfdA\xbb\x0d\xb6\x9e\x90\xd3\xa8\xd4\xe1c\xe1\xa8\xa2\xc9\xb7\"\xd4\x97\xd8\x92\xd1\xcfi\xee|^8\x9b\xb4C1';\x88\xaf\x12\"\x89'\xb0\xdcF-\x06\x9c\x1cy \xabt\x9d\xd4\xfa6\xba\x01\x17\xe2DPz6\x92}\x03D\xa4z\xffR\xbe\xe8\xb5\xdbi\xde\xbfR\xe7\xd2\xa2o!M\xcd\xbe\xde;\xd1\xa3V\xcb\x80\xb5!\xe6\x9fq\xb9\xb3\xa8\xe8\x18l\xe4\xb4xY)_\x8a$A\xb7\xfb\x9b\xb9\xe1\xa6\x88\xd5e\x844,\xc2F\xe5\xd1Q\xf3\\\x10\xde3\xe5;\x86\x15\xfa\xb8 !\x05\x15\xb4\xfbe\xbc\x10\x9f\xf6\x88\xa7\xe3\xc5\x13x\xc9#K\x8e\xa2\xf1y6\xf2\x80\xb8\xb2\x11\x0bS\x16g\xa3(\xe0\xff\xa7q\xb4\x98g\xe3q6f\xa9\xe7\x07I6\xf6\xbd \x9afc?\xce\xc6\xfe\x8bl\x1cd\xe34\x9b\xf8,\x18'\x8c?LU=p\xaf\xc3\xb2I\x14\xf1\xea&Q<\xcb&\xb17c\xe2/\xcf|\xec\xf4\xdb\xef\xb90\x7f\xe1\x0f\x8b3>\x9d\xd3Y\x90\xf9\"k\xc0\xa6,\x1cg\x81\x9f\xf19\x97\xcd\x98\xd9\x8c\xa5^\x16z/\xb20\x12\xf5fQ\x90E\xf3T\xc0-\xe6K6\xcf@\x19*K\x18L\xf0LF'N\x16\xb3\x99\x17\x9fg\xc0\x96\xb2\x14\xb0\x90\x8e\xb3\x94\x83\x9c\xa5\xc7Y\n\x90\x01\x95fi\x9c\xa5\xb17:\xc9\x16\x82\xaa\xe5\xcaC\xc1t\xd2\xb0\x9bmX\x0f4\x0b\xcaPX\xd8p\xd2\xe1\x0f`\x86Q\x0c\xaa,\xaeW\xa5O\x11o\x8a\xe4Xj\xa9\xf9\x82\x81H\xb7a:B=\xcc:t\x9d\xe1i\xc7j\xc3\x14hl\xd2\xc6&\xe2\xb38t7Q\x06\xafj&o\x88W\xce\xc2\xd1\x06\xdd\xde\xf9\xc45\xb1\xdd\xad\x90O\xcei\x01\xf0\x82\xf1V\xe8;\xec\x1c\xc7z\x92`\xbc\x88 \xc1\xc4\x85\x1c\xd20\xf5\x1e\xe7\xec\x19\x95\x1ca\xa1\x82\x0c\xf3\xe2;\xfaw\xc1\xc1\xf3o\x86m\xe9\xb2\x97s\xf0\x89\x12\x08\xf4B|\xb2\xeaE\x04+\xe9;\x1d\xec\xe2\x86\x9e\x91\x0f\x0d\"\x88\xaf\xef\xb6\xb5\xba\xc2\xf3\xa5\xdc\xaa.\xb3Y\xb3\xdd.\xcd\xd0\xd2p\x95\xb9Y\xde9\xc0g\xf1\xaa\x95\xceq\x8ct\xfcW*\x12\x0b\x06=7.\x96\x04\xac!\xa6\x93\x99|S\x8b\xc9\x85Zg\xbb\x07\x8dM\xc39\xc8\x86a\xc3\xedl\x0e\xb3\x0e\x17LyR\xdbr\xcd\xc6\xe60s\xdaY\xc3R\xd2\x1d\x97:;\x9b\xce\xc1\x8e\xc8\x9eK|\x9b \xb2\xf1\xe5\xb7\xa8u\x98\x19\x1dX\xaa7\x87\x99m46\xa1\xc6\x95\xda\x1a7\xd5\x06\n5jQ\xab\xf6\x00$\xc3\x89\x81\x0e`\xf9\x97\xf3\xa2\xa1d\x97!\xc8\x8f\xd96HbJ\x8a1m!\x18\xaa\\ \xcd\xa8\x9c\xa97\xe5\xa9\xc89\x18\"wsX\xd8\xc0\x0e\x87 \x9f\x15\xa8\xbb3\x1c&|\x95\xb0\xbbv]\x15\xf8\xd6s\xb6\x9bz\xd3\xee\x94 \xa9\xf4\x97\xb1Y\x96\xa4q\x14N\xb3d\xe6\x05A\x96d#?e\xd9\x8fe\xe3I\x98yGGq6\xf6R/K\xfd\x19\xcb\xf8\xae\x03t\xe0\x12o6\xcfN\x8e\xc6Y\xb28\xca\x92\xc5<\xf3\xb3\xa3l\x91\xcd\xbc\xf8$\x8b\x17G\xe7Y\x9cf\xf1<;\x1a\xfb\xd9\xd18\xca\x92\xb9\x17fGqvz\x14g~\x98dc\x16d\xfel\x8a\x87\xc3#<\x04\xfb\x88\xa6\x05\x1aX\xa7\xc3a\xf2Uw\xf3\xab\xfcKy\xc1\x90\"\xdf\xe6\xd0\xe1r\x95\xcb\x051.\xefUE=\xbe\xa3@\x86+D%\x07a\xb7*\xe3i[\x91\xcd|\x1b\xb2)e5[\x88sw\xcc\x86\xd4\x82\x95\x85\xe4\xa6jJ\n\xf9\x8e\xcf\x12A\x0d\x9f\x87\xf9lJ\xc6\xb3 \xed\x96\x18B\x9e+\xec\xa8\xe7\xb7`BY\xce\x85\xca,M\xb0\x99R\x9a\xe4(%4/1\x89\x95\xa0F\xe2N\xc0\xce*g1\xea\xf0\x9c\x9d6 \xbez\xc0\xce\xe0\n'\xd6\x8eF\xcb\xa5\x8a\xcdu)\xdew\xcc\xe7I\xacb\xaai\x1fR\xf06\xd8h4\xd6ze\xd6\x93\xb7\xee\x89p\xf8\xbc\x12M\xf45\x18i\xf6*`\xc1\x87\x9a\xa3%\x19\x1d\x8a$\xe0\xf0lN&dL\x8e\xc9\x8cL\xc999#\xa7p~R\x82\xfd\xa0a\xbe\xd3\x9d\xce8\xea\x06l\x80\xfd\x89a\x88\x90\xc3\x02s\x1d\xb9UW\xf1\xeeq)\xe2\xbb\x8a\xe1\x9c\x9fEj/;}\xe9\xe6\\\x8a\xefp\xb4(\xfc\xb3 0;GK8\xec\xd4\xda\xe232o\x08\xbasB\xb5*\x9c\xd2n@\x9e\xf2\xb8\x83\x1b\xc09i\xb54FO)=\x01\xdbq\xfb\x04\x14\x7fL\xca1mB\x894\xf6g\xcf\x85\xce\x8de\xf8\x14\xd24\x1c]\xdc[J$\x91u}\x12\xe1K\xf9\xdf\xafq\xb2\xde\xe3k\x96\x85\xfcp\xcc\x05\xbb1\x12\xfb\x9e\xfa\xad\x87o\x1dA\xb8\xf2\x10B\xb2\xe4\x8e\xa3J\xb8\x11S!\xc7\xce\x0d\x9d\xbe\x19\xc0\xc0\x0b\xa7\x96\xefl\xb96\xff\x03\xfd60$\x08\x08}\xe7.\xb8\x8cY\x16GZ%8\xe4,\xfe\"\x80\xe4La\xcc\xe6\xe9\xb1\xe5\x17\xae\xc1\x14\x08[\xae\xd6|\x85\x1e\xc5r\xab\xd3c \xdd\xfe \xf8\x82\x88\x10j\xad\x17\x06\xd4\xac\x8d\"\xec\x98\xb3\xc6\xe6;|\x92\xc1\xc1z\xe0OCh\xaf\x9cM\xcb$\x0f\xe2\xbb\xa2d\x17\x93\x11\x0b\x82\x04\xd0d\xf3?\xda\xfc\x0d\xdf\xe9j%`8-\xc7]\xe2\x8e\x00H\xf9\x7f\xa24\xe8@\xc3\nQ\x17jR\xae\xc1\xa3p,X.486M\xccam\x9b\x16\x87Uh=\xca<\xce\xb1\x8b\xed\xe2\x99\xa2\x18|l\xc22a\xdd\xaa\x80\xd8\x8d\xe4%\xde\\ `\x93\x14YZ\n\xf8\xf2\xe6\x1dS\xd0\x03\xdet\xe8e\x12\xcf\xfc\xc2(^HP\xc6\x17\x1e\xac\xd0Q\xb0f\x8e\x1c\xc7_\x88,\xe3\xb5D_,T_\xa4\x81\xa2\x96\xc3$\xf5\xe2\x14-9\xff\xab\xb2\x9a\xcd\x9d\x86\xbd\xcak\x0c\x1fB\xdb\xbd\xb9f\x16\x8e\xd7v\x83/\x9c\x05\x7f}\x03\xd5\x8d\xd4\xac\xe2\xa5$\xc0$\x8a\xc7,fc\xeb\x9c\x1a\x1e\xe5\xf3\x06\xe7\xdc\x9e@\x16\xeb\xdc6=\x0b!\x12D\xe0+\xb5\xbf\\\x05z\x84\xc9\\\\t7\xfbdJ\x15\xbb\x95\xbe\xe6\x0bp\xf9N3\xd7\x08\x92\xb3`\n\xa43\xa6F@}N\x84\xea\xebgF@\x83\x12\x1a\x0du\x90a\x0e;\xb8\xb1 S\x13\x17\x91E\x87a\x03\x9c&\x8d\xdbT\xc5\x96!\x01\xad\xe7\xcf\xa5\x8a/\xfa$_\x0c\xac\xe2\x0b\x17\"\x94\xa9>dB\xe6\xd8DK$\xce=\x04\xbb9nR:m\xf7!\xce\xb3:\xc2\x10\xe3\xe1;\xc7f\xdf\xc5N\xcf%\x86\x97\xa3\xd4\xeeSJ\xd5\x9c\xb1\xf2 \xd0}\x19\xa8E\xc1\x99\xcc\xbc\x18tM\x93V+iR\xea\x89EZ]\xd7\x1d\x9b}\xacEH5\x199\xe6P`L\"\x1agYw\x18\x8a#\x1c8&\x96\xb3\\\x875\x86e\x12\xd8\x96\xbcZ\x0e\xf2\xd5\x17\x93(\xcb\x8c\x88\xc6\xbc6P\x10\x86q\xa7\xcd\x1e&\xa72\xd451\xceh\xf7`\xe88\x8d\xb3\x1fu\x87n#o\x83\x83yJQ\x035)\x0d\x9c\xbeK\xcaCX\x940\xc5\xe0\x91I\x89$9y(\xbaL\xbd\xe4\xc4:#\xe0\xb4\x98\x8d\xadSI~\x11\xb8\xfe\xe547\xa9\x99<\xa54# y\xd4\x9c\x9a\x19V\xb4('\x98?Q\x9d\x05\x85\x90)\x9d\xd7\x11\xea\xdc9vs\x94\xac22\xbdrQ\xef\x1a\xc6\x96\xce\x82/\xc0y\xca\xd4\xe2\x85~\xea\x7f\x97\xd9\x9add\xc9\x1d\xf9\xb6\xe1U)i\xb4\xfb\xb8\nhy\xba\xb1\xb3\xf4\x8b`\x8c\x97G\n\x1f%\x8e\xa5\xabF\xe5a|\xc1\x1c\x9f5\x82(\x9a7\xa2\xb0qt\x9e\x82\xb9JE\xd5\xa5\xd0\xbd(ZU\xba\x01\x17,\x19ys\xb8S\x1f\x1aN\x13\xddy\xe7\xcb\xad\x0d\x03o\x9ad\xd8\xeet\xad\xc16\xdd\xb1\xbf:t\x86\xeepxp\xf8\xc9E\xb6\xfc\xcc\xc5]\xe2-\xd2\x883$\xab{\xb0m@pEf9\x07\xc3dx\xd6\xeb\xb5\x87g\xfd\xc9\xf6\x8e\xbb\x99\xb1\x99\xe7\x07x\xa7\x0b\x0e\x91\xa6\xc2\x83\xea\x81<\x8c\xcb\x0e\xb6\xbb\xf2T\x1c.A-u\x0b\x9a\x1dl\xeb\xe9\xe2\xa8\\\xbf~\xe5\xb9\xba6\xcf\xb7rq\x9c\x1dl7Uas8L\xb4\xcbc\xfe\xe9\xa6\x9bcDd\x7f\x9a\xb6v\x9b\n\xf6\xa8\x06g\xb8pb\x9a\x98\xf9\xa5)\x18\xa1vI\xcc&\xb5\xe5\x9c\xe2JO\xbb\xd3\xb3\xe5\xa5\xdep\xe8b\x13\x0f\xdd. #\xbdx\xa9\x8c#/\x007\x87n\xb6r)\xb8\x89\x87.d\x1a\xba\xd8\xee\x12qziu\x0f\x0e\x0f\xe1,\xf0\xd0\xc5\x87\x87\x86\xdd<\xc4\xd9\xc1ps\x08g{\xc9\xa6\x8b\xe1\xd9n\x0e7q\xa6\xb2\xba\xea\"\x04^j\x8aU2\x14Ut \x9b\xf1&\xf3\x16\xf3\x92\xa2\xb9\xed\xa1\xc3\xb3\xe7\xedA\xeav\xa9:U\n\xfc\x1cj\xc6\x9fn\x9e\xffp\xbb\n\xe0\xba\xfc\xb2\xd9mT*0\xdc\xcca\xb8\xa1\xd0&\xe2\xc0V;\xaa\xba\xa9\x14M>1A}\x84\x8f\xc2'Z\xe6O\\<\xec\x1bv\xf3\x13\xdc%G\xb1\xd0\xba\x10\xa7\xd2X\x13\x91\xc9\x98\xc1$\x10\xf7\xd8\xc6'&\xd4\x02V\xce\x85\xeb#\xf0N9\xdcn\x0e\x9dO6\xddlxt\x98\xbd\x833\xe7\xa0\xe1\x1a6\x85J\x87\xa1\xf0a\x99\xbf\xe8W\xe1~\xaeX\xa9\x8bD4]\xbd\xda\x16\x97\xe2L\xbf\xe7\x8eJ\xf7\xdc1\x0b\xf9\x96-.omTj\x96q.\xe4\x95\xb3\x16\xediEH\xb3ho\x95\x81\x81#\xef\xa4\xe1\xc5\xb1w\xae\xe2\x8e'\x0d\xaf\xf1 \xe4\xff\xa4\xa1\xbc\x8du\x90\\\xb8n\xba~\x8f\xde|\xfd\xae\x92@\xc7*)\x17\x16iV)\x0d\xae\xe9s\xf4z\xb9\xa6A\xad\xd2\x80\xee@\x1b_\x14o\xc1\x8d\n\n\"\xd0\xef\xfaZI\xed\x00\xbc\xc5\xb0\xd4g\xbd\xcd\xd0\xc1K\x12\x80o\x03\xb0\x0d\x1d\x15\x9d\x1a\xa9P\xa0 c!\xbdX\x16_\x16\x05\x11\xc2\xdfEG\xac0\xfb,Q1\xe5p\xa1\xcc\xae\xc4\x17\x95\xeb\xb9x\xafS\x83n,T\xee\x99\x0c\xb8\xac\x9fz\xea\xcd<\x89v!\xae\xc8\xad\x9bS\x05n\xddl\x8d\xca\xfe\\?\xe6/\xc4\xb2\x96q\x87\xf3\xe9\xb1\xc9\xa7\xadu\xe7\xcc\xe9\xb5?\x90\xeeyD\xd2\xf0\xd4\xc4x`w\xa7~UAZ*\xb1\x8e\xa2\x00\xac5\xa8\x91\xd2\xb4\xbc\x97\xc06\xb2\x90\x85\xee\xf0\xaf\xa9&S\xa1\xb3RJ\x1f\xdb\xd2`i\x12G\xb3\x07R40\xc0\xe7\xf5\xa305RMJ\xd9\xc2\xa4\xff\x1e\xc6V]\x01S\xcf\xd8\xc7\xd8B\xa8\x148}R\xba\x1f\x01\xe9G\xdc\xddg\x8c\xa4\x9c\x0d!p=\x03\x98)\x14\x0bu\xb5\xc2\x90\n\x05PY,\xd4vK\xc2\xe7\x1b_Q\x0e\xb8l\xfbN\x1fa\xa2_I\x08'\xed\xc7~\x02\xc1\x0d\xe1.\xa7&:\xabv\xde\x02Q\xc7\x96\xa5p\xb4\xb9\x95$\x9f\xb1\xf1\xb9\xb4\xaa\x1c3N\x1b\x1f?\x7f\xf4 \x9a\xcd\xa3\x90\x85\xa917B\xac\xc1\xe6\x1c\x0cO-Wn\x81J#$\xe3\x08\x96\x0di\x96\xfe\xc4\xe8\x95\"\xd0k\x86\xfb\x16\xc2B\xcfS\xfb\xfa\xe2h\xfd7\xf0\xad\x8c\xb0\x1e\x0cq\x99B\x88\x17\xa0\xfe\x10\x83Rm\x99\xb2\x8e\x1d\xc4\xa5D\xbe\xc5\xec\x1e8\x07\x96kZ\xc3\xee\xa6s\xd0u\xf3\xad\x0b\xc3\xb6\xcaE\x99\x89\xba\xc8\xca_\x8f\x0cFP\x17\x91\xa6&Y2\xaa>\x13\xd4\xed\n\xeaS2\xf3\x16\xb6\xb5 \xa1\x96\xbb.A\x16\xc2fj\xa1n\x95|\xb5\xdcF\x0e\x18.\xca\xf1\xb17S\x8b\x99\xe9\x12\x86\x1dC\x04\xc7\x90\x8ahB\x1f?\x7fd\xe8\x84\xf3\xe5\xadw\xf9\xc8|\x19\xad\x19\x0c\xf5\xbc\x8c:\x87\x9at@Qs\xa8K\xc3\xba8\xdc\xab\xec\x88V>\xd7\xec\x87V\xab(vF5\xe5Ui\xd8 N\x8c\x95-\xa8\xd1\xd9\xb4\xf1\x10wo\xd9o\xb5%]\xad)\xc95G\xf8\xf6\xf1\x96\xf5-9\xe2r\x05\xa6\x02g\xf2\xdc\x00x\x1f\xa2\x18;\x98}\x1cn\xc3#\xf2\x8eM\xce\xa9\xc4\x88\xb1\xbak\xcb\x93\">\xfd\xcb\x94\x9c\x1fF\x94\x87K.\xc8\xf9\x88eY\xf9\xbb8\x03.n5`\x03z\x03\x86)\x0cu\x96\xc1\x0c\xd6\xb8Tq\x9d\xd84R\xd1\x80\xb84\xac\x9c\x1a\xb88\xcb\x9ai\x07\xc4\xb0\x8b\xc0\x14\x03\x9e\xef\xbe\x08\xabR@\x1f\x9bl\xa0\xbc].+\x03\\\x8b\xbet-fJ\x1d\x17b\xd7-9V\xf9\xc0J\x145\xb4\xa6\x0d\xcf\xb9\x07H\xb9\x0b\x7fs\x04\xad\xe1ql\xf6\xb9\xdae\xb3J\x9b\xefA;\xef\xc2\xdf\xb7i\xbf\xa4\xb4\xf86\x10\xf0\x82\xc9\xdc\x0b\x8d\x05\x90\x81\x9a\x9a\xb0\x19\xafm\xe9h\x9dz\xd3\xcd\xed\x1c\xc5\xc6\x9a\n\xc7l\x9dV\xc1\xcd5\x8eYPA\xdez\xf4\xa8\xfd\xe0m\x1a\x8a)\xfa*\xf8|p\xb6\\\x1bq\xc1!\x8d,d\x1a!]\x88\xf6f^8\x0d\x98l\x0f[\xa1Z\xfdVA\xe4M\x1a\xb1\x88o\x1fjw\x91\x051gY\xb3\x0c\xe9\"\x0e\xcaS\xd7\xbb\xe5}`\x1d\xdbT\x0b\x8e\xbd\x02\x19\xaf\xa8|\x88\xfdC[d\xb0U\xdf\x9a\xc4\x1e\xe8 \x9d\xcf\xbd0MD!\xfc\xc3\xb9\x94\x14\x01a\xfd\x89Q\x8c\x1e\x8eie\xfcD\x83\xd0\xde\xc58\xbaH\x807\x89uJ\xc3r!\xb5\x0b\\C)\xa7\xe7.\xc1\x9d\x9f\x01\xdaM\x9a\x94\x97w\xb9u\x0b\xfc\x90Qq\xc8+\x00/\xab\xee\xe4[<\x9eo\x9fw\xbf\x9c\x17N\xb5\xf5\x02\xe4B\x89\xd9\x16\xcf\x99,qIk\x144\x1f^0\x0e\xa2\xee\xde\n!\xa1(\x15\xf2\x0d\x1c\x1e\xe0T\x92@\x1a\x9d\x18\x85\x1ah\xb9Kai0\xca\x13_\xe8(i\xedv\xe6\xd1\xdc\xd0!\xa9\xa0\x87\xb1\x93\x1b\xebZc\x8e\x99e\xbd\x1a<\xefW S\xfdd\x1aD@K\x03\xa18K\xa9\xf8\xc0\xa100\x18m\x0e0\x93\x06\x9b\x1a^D\x19\x1d61.\xfa\xc9\xbc\x0eL\x1a\x95:%]e\xeb0\x9c\xcf\x99p\x9c-\x8dT-Em\xe0\xc2\x1a\x1d\xc7*E4\x97\xef\xa0\x8ec\x03\xcb,RWzM>\xf1\xd5\xa8\x01\xb6\x82\n}l:\xa0wM\xe6F\x85\xf6\xd6\x15\xc5%\x9d/ \x18\x18\x80\xd6C\xc5?U+\xd1\x9b\xe7\x12\xb8\xfe.\xf6\xb7cY\xb10@\xb0`@\x89\xbc\xe1\xe0{\x1c\xbfpH\x8d\x10a\xb47`\xdbZ%%\x85\xf6\x013M\x1c\xae\x1c_\xa8\xc5\xff\x0d\xf8\x12U9\xcc\xc5\xe4B\xdaA\x88\x90\xae\xd3\xd0\xd2\xb2 5}\xe6.\xc5L\x8bj\x9b\x8b\xa3S#\xc4\xab\xe0\x964\xf99\xb4\x17\xc2\x13_5\x8b\xc3\\\xb5\xc5\xeb\x0d\xe2m\xe5\xf1\x0e\x1c\xb9\xbee\x07\x9dX\xefP\x7f]\x87b\xde!\xff\x86\xce,k\x07\x1d2\x18\x11\xf1\xe50\xae\xd8'Z\xbc\x830\x88U\x0b\xc3\xa6\x9c\x9fj\x16\xc2\xfc\xf4kYT\xa9\xc9\xa2\x1aC\xb5\xaa\x99\x17Z9\xc1\x08\x17\xb4ZG\xa5\xe1!I\xf4D(5(\xcc\xa7>/T\xbc\x02\x03\xac\xe6u\x984\xfb2\x01\xd8\x0b\x88\xeb\xa1\xcf\x8a(J\x18\x19\x95(@\xc8\xfedQbl^r\"\xdc6\x96\xd3Z-ce\xd4\xd4\xc6\xc0\x18a<\xa8\x98\x9d\xad\xeb_\x90e\x82m\xaa\x0c\x05/\xb3\x8b\xbe\x0b\xba\xc9\xd9\xf1M\xc8\xe0-\x1a>Y\x90\x91\xe2i\xe9,X\xc7\xd0\xd2Y\xb0\xc2\x7fD)\xcd\xc0\xac\xb6h\xfe\xfd6\xdcP\xf1\x1a\xde\xcf[U\xa7\xf5\x14\x0f\xa4\x16.\xf0\xa8 \xdd\x00}\xe5\xc6\xa9\x9f\x1e7\xd4\x8e\xb9\xc0\x19\x17\xcf\xf8o\xe3\xd4\x13\xb1\x1b&\xd1\"\x1cw6\x06+g<\x89\x1f\xb00]9:\x9d\xe0\xc1(\n\x93(`\x9d \x9a\x1a\x13\xbc\\\x92\x91.{\x05\x8b\xf2^B\xf95-\xdb\x97Uo\xbd\x9c\xe1b\xab\xd7\xeb\xc1\xd1\xd6{\x1f\x0e\x17[\xbb\xe2e\xf7\xfd\x0f\x87\xc3\x0d\xa1q\x06\ng\xb9\xba\x993t\x0f\x84\xaa\x99Ti\xd4\xee\x98xJ[\\1B\x9f\x12\xc6\xf9\xa8\x97<=\x0d\xf3\xa8\xf8)\xce\xf7Y\x83qT\xe8 ;\xa1k\x9a$\xa5\xa1\x89\xdar=\x96\xc9\xf2\xa0\xf6\xa6\x1aK\xcc\x08\x8a\xa5.\xed\x91tIt\xd5_\xdauZ\xdb;h\xc3\xed\x92\x8a\x8eo\xf1eJ\xca*\xbd\xf4\x02\xb5\x90\x85 \xe2?\"h\x9b?\x07)\x7f\xe4\x82rk\xca\x1f\xe1\xa8\xa0\xc5Y\x10O\xdf\xe0\xe9w\xee~0@\xe5\xd6\x95\x1e1\xed:\xd0\x14(\x89\xdc\xb1\x87\xa7\xe6\x00\xaf\x00tc\xe6)\xb0\x8dcz\xb1$3\xda=x';\x10\xee\x02\x85\xb6\x8c\xd9i\xbb\x9bVv\xe0\xd8w\xdc\xae_\x18\x00LK\x8a\xe7\xe7+\x1a\x04\xb4?\x88\xb7\xab\x9e\xbca\x85\x81\xe5\xb6\xe1\x87\x8d\xb4\xf0\xf4\xcd\x97\x91\x95\xd8\x07\xe5\x81)\xa2{\xb4Z\x06sB\x97\xa6N\xe8\xd6\xa9G\xbf\xd0\xb7\xdf\xba\x13\x94\xac\x14\x89_J\xf4\nj\xb0\xf5\x8eh:h\xb7#\xe1_y8\x04\xf7\xf7N\xe4\x0epL\x9bq\x1e\xa3\xc2F\x19\xb2P#CK\\\x98!\x0e\xb3.\x86\x05\xd5\x07\xafp\xd0\xdf\x9d\x14\x87\xcaG{*\xaf2\x84sv\x99a;\x1d`\xe9-]\xf9\x8e\x1d\xc4\xdbaiAvb\x97\xf2?+\xb3m8\x84\x1e\xa1\x0ci^\xd6s,\x1ci\xdb\xc4:\x87\xc5\xc52Vq\xe7\x9e{\xa6W\xa7\xf6\xb9\xc3\xda\xb8\xdd\x87\xd9\x185\xc1S\xac\xa8;\x12nc\x9b!\x06\xa5\x19\x0e\xb3\xb8\x82\xe5\x0fjp\xe4\x0d\x87\xd1#Ee\x9a6\xf7Y\xae\xc8\x0f\xdegY\xaer\x9c\xc2I\xbf\xa8\xa5\xdd\xd7\xbca\xf7\xea\x9c\xd0\xfb\x13C\x0e\x1a\xb8\x9e\x8fM\xb3\xb8=\xe2X\xa44uz.\x0e\xeb\xd2\xfbn\xab\xd5n\x87\xdb=\xb51\x8es7\xc3\x05\x9c\xa7\x9c\xccY\xab\xc5\xf2\xfdu\xab\xd5d\x92\xc9\xb6Z\x8a\xa5\x9ezqh\xa0\x99\x17\x9f\xb0\xb1\x81\xad\x86\xca\xdc\xf0\xc2q\xfe\x127\xf2@\x9cI\xc3\x8bYc\xcc\xe61\x1by)\x1b7\x12?\x1c\xb1\x06\xdfr\xf1V{\x9d\xf7;=\xd2H\x8e\xa3E0\x06v\x7f\xc4\x1a\x8b\x84\x8d\xa1\xbeS?\x08xB\xccf\xd1\x0b6\x86\x89u\xcc\x1a\x93E\xba\x88Y\xa7\xf1\x9cy\xe3\xc6,\x8aY\xe3\x98\xc5\xccj\x80J\x97\xd5\xed\n\xe8:\x9f&\x9d(\x9ev\xeft?\xde{\xf4\xe4\xeb\x87\xf7\x1f~\xeb\xfe\x93\x07\xbb\x0f;\xb3\xf1\x1d\xb9\x84 m\x9cNV\x8e\x1ejn\xe5\x8a~\x8b#\xc7\xbc\x9b\x0d?i\xe4\x01\xec\x1aQ\x0c:\xd1\xa8\xde[\xff\xdb\xd6\x1bM\xc4\x82\x88\xcc7\x86P1\x11\x91n\xdc\x1b\xecl\x0e\xe1*\x05\x10a\x96\xd5\x84\xacH\xf1E\x98eFHS\xbe\x9c\x807\xcfS#\x15\xaaa\xba\xedL\x96],\xb1\xf0\x87\x0d\x0e\x8ehZ\\5\x90\x84\xf6@q<\xa2\xb1\xf0\xe1D\xd2\x1a\x15q\xbe\x19\xf4i\xee\xf0\\h\xdb\xe8\xab0\\\x83\xaa\xc5\xa9\xa8\x9ez\x84\x7f\x16'9\xd0NL\xe5\xc1\x83\x11\x15-\xa5\xf8\x82\xd1tY[\x9e\xd9\xbc\x06+\x84a\x05\x7f\xce\\\x94\xf0\xb2L\xf9z\xd8\xbe\xab\x1a\x1e\x89\x00\x0b\"\xf2\xa8^\x0di\xfaz\x1e`fI\xe1\xbf=1M\xdc\xd4{#\xb6{M>\xdfA\x10l\xb7\xfd,\x1b\x19\xd8\xf2\x0cql\xc3\x99\x05\xdf\xd6i\xae\x9bu\xbf\xd0\xf6\xc8H\xc5\x85#\xa5a\x96\x85\xc09x\xb9\xa2&Y\x11\x0d S;B\xda\xecAP*Ce\xc2\xe0\xd2\xc8\x88\x9c\xc4\x956>\x80A\xd9\x08\x1c;\xaf\x0c6\x06\"\xc0\xeax\xc7(F\xb54\xb0\x10Tc\xc6\x92\xc4\x9b\x8a\xa3\x81g\x01\xf38kd\xf3(NA\xbeh\xa4Q>'\xa7~z\xbc8\xea\x8c\xa2\x99\x9c\x9e\x9f&j\x9e\"b\x94l\xeb\xb0\x92\xec$7\xdf\x9e\xef\xdc\x0f\x1b\x0c\xa2\xccE\xa3\xd1\"\x8e\xd9\xd8\xda\xee\xcew\xe0\x82 \x99\x0b\x0d\x10\x04\xf6\x14p\x04\xcf\xbf\x0d\xc4Lc\xcb\xa5\xd0\x8f\xa1Sr\x92[i\x9dt\x12\x96>\x95/5\xa7h\xe7\x86\x86\x16\x86\xc9 \xc7\xd3\x94\xa5\x0fe\xda\xea\x01\xcd\x85<\x84\x84\x81#\xd2\x14\xae\xd9'\xd3\xc9\x8c\xef\x88\xf3K\xa3\xe2E\xdc\x0dY\x08\x91\x9c\xd4D\xe1\xe2\xd6\xcd\xd2\x02\x14\x12q\xaf\xc9\xcb\xe7Vz\xcd>)\x1dqyD\xb1a\xfe)g\xc9\xa2Z\x81Y\xf8\x90\xfb-\xc9\xdf\xc4\xb51\x7f\x85#N\xab\xd9_\xea\xa4AK\xbd709\xe9<\xe3\x14\x12\xd3\x80\x9c\x08b\xc9\xe7&9\xe9<\x97@Q\x8f\x9ct\xf8N OH\xc8I\xe71;c1\x8d\xc9 \xa7.\xfe\xc4\x7f\xc9IG\xc4\x12\x15_}r\"\xb7%\xf2]\xeeN\xc8IgO\xda\xd3\x8dT\xcb\xf4\xa4\x88\x84EO\x96 \x03gY]P\xd1S?\x1cG\xa7\xad\x96\xf8}c\x80?=,\xdc\x07\xeb\xa2\xc2\x89\x1b\xe8X7\x92\x13\xde\xd6I4\x10F\xf8\xab\xdc\xd7\x08i\xc1\xc0q\xab\xd5\x8c\x8d\x88\x86\x8a\x93\xe7\x15A\x05kJC\x94\xc0\xa7\x937\x14n~\xb1\xe6\xd7\x05\x0d\x8c\xc2\x17,N\x1b2\xa6R\x1a5\xe6*\xf2Q\x03\xe0B\xab1\xff\n\xf9\xa6t\xaf~c\x14A$\"Z\x19\xc8\x94\xd7\xedE\xa0#p\xd4\x8fM\x84\x0f\x91i\x98fh\xc6\xb8\xb8\x95\xbf\xfb^\xb5}}$\xdf\xfb\x00\x93\x88\x86\xc6\xbb[\"\xe4\x07:a\xe7 zC&\x01\xff\xd0\xfb\x00\x93\x11\xff\xd0\xc7d\xc1\x81\xb9\x8b\xc9\x9c.\x0c\xf4h\xf7\xf0\xd9\xf3\xa7\xfbO\x11&\x13\x9d\xcb,I]\x94.\xb4-\x94p\xe5\xc5\xd0\xb0\xab^\x97\xe4X/-\x16\xcf\xbd\x8e\xbc\xd1 j\xa8\x13\xc7<\xa0[\x11\xf5xC\xac\xc6p\xcb\xb2\x12\x83P\xc5,N\xf2\x98\xc5\xe5x\xc4iG\x01\xcb7\xe2\xe5\xe8\xc3\xda7=\xa6\xb6\x0cg\xa7\x94y\xe5\xf5A\x11\x82\xf86\xc5\xf8N]\x15\xbc\xf7v\x05I\x04E\xd5\xb5\x83\xb8H\x039\x07\xc2\xc5&\xed>_\xc9z\x03o\xdb\xcfO\x06}\xc73MW;\xb6\xf5\xdc\xc1\x9b\x1a\x15a\x90\xa1U\x1fv\xda\xcb\xa5U\x8cqz\xab\xd8M\xf9r\xfb.\xb8\x84\x9419W\xbc\xd1\xe4bG\xc3\x0f9-8\xa1\x0b\x01\xf2J~UJ\x96r\x91|_F\xe0~\xa2\xd5\x8a:^\x10D\xa3\xfc\xe1\xe30\xf1&\xac\xf2\xba\x17D\xa7\x1a\x9d\xc6\x96\xe1\x1b1\xec\xfd%d\xd4\xc3\xc47\"\xe2a\xe2A\xc5u\xba;\xab\x81Lo\x8eH(HV\x1e\xffy\x0dY:?\xfa\xcd\xbbB<\x01\xebMm\xde6\n\xa26M\xf2\xf6\xc4`DZ\x9c5\xc1%\xf8\xb4\xb6W\"\xb1\x86v\xdc\x99\xf8\xf2\xe4\xdeR\xcf\xf9S\x0f\x938\x87X`\xb7z\xe2\xf5\xc3\x80\xb9\xc0\x11\xae\xb4\xc6\xc7\xf2_\xb1\xc5\xb8\xc3\x1b\x10Ta\xbcY:(\x88*\xca\x97\x85\x0f\xfa\xb8\xa0\xf4H9\xc3\x99{\xe9\xb1r_\n \xd4\x94R\xde\x89\xd9$)\xa5\xf0B\x1c~\x99\xb8\x8ct\xdd\xaa3?Y\xd9\xb1\xeb'aR8\x15\x11$9\xb57{\xd5#L8\x0c\xd1+\x9d\xb2j \xf0u\xb5 \xf8\xcb\xa5W\xe2\xc5\xae\x9a\xb9\x8a\x1bk\xc2\x08\xb8\xe1\x10\xd5\x15\xe8\xe0\xc2{\xa9\xc6d\x05\x1e\xb1M\xd1\xab\x92\xfe\x9f\x04>C^d\xb5F?y\xe79\x9b\xd4\xaa\x95\xb5Zu\x01\x9bW#\x14\xc3\xf0\xb4Z\xe2W\xdd\x17\xf5D\xe5\xbbg)\x8bC/X\xd7\x88\x02\xc0`\xb8\xd5Bw\xc4\x19*\xaf\xc7\xe9\xb9\xa2\x86\xfbA\x10\x9d\xb2q\xa5\x02y\x08\xa3\x15\x17\xf4~G\x06f\x05P\xf2\xab\x9a-\x9ce\xc2\xe1\x8f\xf8\"E\xe3&\\qUZm\xb5\x8cf\x9aey(Q\x08\xb4\xce\xbb\x80\xf3R\xcb\xa2o\xe1x\x05\xb4\xfa\xbe\xe9\xb1\xd7Y\xe1\xc9\x99\xd74f1\x9b\xb0\x98\x85\xa3\xaav\x9dCx\xa9I_\x9f\xce\xd3x%&\xa3?\xd1\xce\x96\xd4\xd0\xf6\xc5 Z\x11\x87;g\x9c\xa9\xa2 uP]\xac\x15\xa1\x1dZ\x0c\x0e\xfe\n\x19\xf0\x0e\xc2;\xb4\x97\x9bm(\x87\xadw\xe4\xb6\xd3\xe9\xb9E\x93)\x8d\x9c\xbeK\xd2:\x9fI\xca!P?\xf7\xf9j\"\xe5a\xba\x810^\xa6B3'\xf9\xb6\x9f\x1eC\x8cX8\xe6/\x8a\x15G\x18>-\x85n\xaeHD\x9ei\xe2\x0b\xdf\xf1\\\x1a\x1b\xfcG\xac\x8e\x8a\xe9\xf2^\xb6Z\x1e\xa5~\xae}H\x02\x9a\xfb\xc2\xe2\x05H\xbf\x07}kV\x83\xf5g\x99\x9f<\xf1\x9e\x18\x01\xce\xb2@\xdb[@\xd0\\\xcf\xb5\x03Z-\xd1j\xa1\xb6\xf0/\xea\xb9v{\xcbj\xf7-\x80\xcc\xdb\xe9\xd9\xbe\xe3\xb5\xfb\xae\x85\x10i\xf7\x9b4\xc8\xb2\xea\xed\xba\x80\x9e\xef\x9b\x03>\x02 \xdc\xb1\x07.\x0553\xfe\x94\x1f\"\xb4\xb7(\xa5\x81\x1a\xce\xc46V\xe1`\xe2F;\xc4|\xc9\x17\xa8\x18\x88\x1ay+y\xa5\xf0\x92\x9b\xe6\xe5d\xc5\xb7_r\xee6\xb5\xd8\xed\xd5f\nJP\xd5&vh\xa1\x9eD\x81 \x0e\x9f\xdb\xc5\x9b\xed\xb8\xd6\xc5Rk8\xbf\x9c^\x92O\xe7\xca\xc5H\x0dC\xd7\xa7\x0eL\x93^IM\xa5\x0bi}\x84y5\x8bPV\x14\xbfi\xa5\xcfEZ}\xcfw\x11F\xf3Z\x18\x96d\x14Da-|?\xb2\xf7\xf4\x89\xbc\x85\x82G1\x05\xfd \xe0hI\x92c.\xec\x9c>X).\xb6\xc3\x17\xcbAEj^\xa1\x0cP\xb8\xc8ei]\xb3w\xcc\xd8\xbc\\q\x83\x19\xf9\x9aZ\x1e\xb0\x14\x8b\x01(\xb4\x0e\xe0\xa6\x1a\x1bi\xb5\xbd\x18W\x07;\x05o\xd2\xa0\x08\xb1\xca\xd5\x9d\xd8\xb5\x99PD\xb4\xd2r\xc4y2\xf1\x92t\xb5\xe7e>\xef%\x89?\x0d\x0dN\x1axIF~\xf2\xe6\x8a\xe3\x1b)\x16j\x11\xa9~\x9e\xf4\xa1\xac!\xbf\xb5\x15\xea!\xc7\x1e_\x1cr\x1d|.'\x19\xa9\xf0-&x\x1fo \xd5O8\nQ+\xaa\x9c\x91\xc8\xb7)K\x9f)9\xe7\xe9DWc\x922\x0c\x89\xf2\xc5I\xf4Yn\xcdD\x1a\x89;\x87\x87\xc9C\xfa\x1eQWX\xca7\x82 \xdaM\xf2\x0358\x07?K\xd5\x99Z\xc4\xa5\x8b0\xcb\x9a}\xdd\xe5\xa6R!\xf6\xd7\x9dC\x84\xf5\xfb\x85\xfdc\xd6\x08\xfc$e!\x8bk\x0e \x90Z=\xe0\x86\xd2\x08I\x9ce\x8c\xf8\x98\x044\xb2#3\xb5\x8a+\x81\xce!{\x01\x1b\xf0\xc0\xb5\xf5\x97\xce$,\xbdSG\x7f#\x89k\x95r\x03\x9bN\xe0\x9a\\+\x93\x90\xfc\xf5A\xb4\x08S\xd3\xc4\x84\x95\x9c\x8cr)\xabGi\xbb]\xceX4-,\x0e,y\xde_\xd4\x9e\xba5~=Ke\x88\x9e\x04\xb5\xd2\xde\xb2D\xf0\xad\x96\xe1\xaf=0\x14\n\x1ap\xcc\xe8\xe3\xce\xe1!\xe4;<\x84\x10\x10\xcd>\xc6%-Gh\xe4\x897c\xa5k\xea\x17JI\x9c:`[\xdaS\xaa\xfe:P\x85\xf9\x0ch\xcd\x02\xeb,\xe5\xc2\xf2P\x97\xe3\xaa\xd5\x92:^\x91]\x88\x18V\x8a+\x12\xe7\x94\xa5\x1a\xfd\x8a+\xbd\xc4\x0eUp\xfb\x9brq^o\x85e\x1dNEiI\xcd)(\xa7'f1\x12\x96`vR\xe8pSq+\xd1\xff\xb03\xc9\x13\xf8\xb3\xab+\x8e\x11\x9f*m5\xe2i\xc7G>\x1e\xc4\xdb>hey\xb9\x02\xdb$\xbf\xa7\xf1\xeaA\x15\xe3\xfd6\xe0\xaaa\xb09dv\xdfR\xc0X\xbdr\x0bl\xe6W-9\xf9\x04&y\xe8u\xd9D\xa1A\xab\x1aI4\x99\x93g\x0d\xc8H\xe9N\x17Y\xc8|\xf5\xc4\x10<\xc5N\xc2\xdc\x86c\x01\xdcD\x1e\"\x0bm\xad\xc7\xb2\xdf\x06#<\xab\xbc|\"\xcd\x1e&sy\xd0\x98\x9f0\xf2\x0c\x82\xa4\x16\x8aK\xf1-x\xe5\xac\xb1&\x17\xd1\xf2\xdd\xbd1\x1f\xe7\xd8*\xe7\xbd7\xe4$q\x91\xf7\xdd7\xe6\xe5\\L\xe5~\xef\x16\xb9\x89\x07\xc7\x0b\x9c\xd0F\x94\x0b\xcd\x05e\xcd\xdb}<\x18m\xcf\x07#\xd3\xc4\x813j\xf7\xf5\x03\xc9\x91;\x80j\xc5\xd2V\xd4+C\x0f\xa8K3\xbaP\xa3$\x9a\xe8\x0dF\xdbc\xa8Q\x0d\x963ro\x1e/\x9ea\xdd\x90\xc9\x8f\xb2s\xfcE\x8d\x98\x88\xb9\xaf\x06mm>R\xcey\xf7\xa6\x9c$,\xe5\xbdws^\x12\xab\xdc\xea\xe4\x97S|\x00Z\xb9\x93:TO\xb6\xe7\x83 \xa0zRF\xf5\xc4\x1d\xa8\x96$\xb6\xf5\xa6\x02\xac\x04\xecfe*F\xe1\xba\x03\x9dD\x1d\xe6p8\x9b}\\-7Z{\x14T.\xd9\xab\x94,\x0f\xde\n\x1b\x10,\xc0_\xcf\x02|7\x17\xdf\x8e\xfdD|W)\xf2\xe4\xda\x17\x17w\xc0!\xa54\xff8rz\xae5\xb2r\xf8tM\xf9:\x9c\xdf\x0f\x82\xc7\xeb\x97\xa1\\\x9c\xb1\x8d\x82\xc7W8|\xab%\x1bK1\xb6\x8c\xdb\xc9\x0b\xca9s\x89z&\x13\xba\x9e&JY\xbd\xf18\xa7\x952\x01B66\xf1\xcf\xd8\x98Fd\xd4\xd9\xe5\xad\xee\xce\xfc4\x055\xabB\x8c\x1d\xadJ\xb05\x97\xf9\xf8B\xdb`\xe0\x8bB[Z[\xb7@o\xff9KX\xfc\x82\xd5)\xb64\x98\xd2@7\xbe\xac9\xfc\xbe\xd8Z\xe2\xee\xb4*\xb1\xe7\xa5\xbaz\xde\xdc\x0ds\x96\x19L\xf3l\xcct\xcf\xc6\xef~\x8d\xefs\x1dTJ{\xc8\xd3\\P\x00Ybu\xc0\xc2w\xc2\xab]\xf88\x8co\xeaD\xb8r\x86\xa3\xb7\xee47\x0c\xbc\xe9\x96\xd5\xf7s\xd5\x9e/\xaf8\xfc)\xf9\x1d\xe9\xa4\xd1\xc7\xf3y\xee%\x1b\xd7\x82\xf7-8\xed]\xc3]R\x8aL8\x06\xcd\xcfC\xc5,)\x0f\x8e\x91\xca\xab\xeej\x87\x8d\x14\x93\xd0\xae\xff\x14b\x13Q\xc4e\xfb2T~\xf2P\xe8\xe4\xd5\xaa\x1b\x80\x96\x0b\xab\x96\xf8&;\x7f:g\xb1\x97Fq\x9d\x06\xd4@u\xa1\xa5\x1elx(W3e)\xe0bE\xe7$\xce\xed\x02\x9c\xd0%\xbe\x14\x8e\xa1W9\xb0F\x84[-\x84\x9a\x94FX\xd3\xea\xce7\xebQ\x96\xad\xdcz\xf1\xb4\xa3(\n\x98\xa7)]G8\xa2\x91v\xeaE\xe2V\x0bm\xf2\x8a\xe3V\xcb\xe0\xdfJ^\x03\xd5\x89ZL\xfa=\x8c1\xf1\x05g\xd3P\x0e}\xe2{`i\x1b\xad#\xcbH\xb1\x1d\x82\xea\xa7\xe6n\nmr\xe4\xc4\xb8|\x12\x11a;\xeaL\xfc eq\xa5\xebkNz\xd7C\xc2\xde\x00\x89t\xf9\x87-}\x0f\x1e\xadi\xa6:\x0c\x0esq\xabu\x03\x1a\x1c\xe6\x12V42\xc8\x85#\x8f\x0f\xec\x17\xec\xb4\xb7\xbe\xd3?\x94~\x19\xab\x0dhS\x8aaL\xd6C\xc0\xab\xd0U5\n\x80\xd6\x8c\xc7*\x12W\xa7\xaf'Y\x1fA\x18[\xbd&\xcd\x97\xe7|\x0c\xf4\x1c \x89\x8a\xe9\x98\xda5\x13\xe8\x0d-bK\xcc0\x98\xc9\xe2\n\x02\xd9H\xdc\xbe\xf2:\xa3\xbc\x06\x84\xb0u\x0b\xf0\xf3}\xa8_f\x05\xab\xfe\x07^\xe4*4|w\x8cLD\xd0\x1dDP\x07\x81\x93~4@\x04\xd9\x88\xa0\x16R\x1b\xb3\x0bv6\xf7\xc2qq\xfc\x16\xd7\x9e\xab^\x18\xce\xc1\xf0b\xb8tM<\\f\xc5K\xc5^+\x92'.\x11\x96\xa4*\xd4\xb5%+j\x83\xdb\x9d\xfc2!*\x9c\x8e\x01\xc9P-\x81\x14\x1c\xc4\x800\x93j\x0d%|\xcd\xac\xa5Dq\xa6\xd95\x9c\x03k\xb8)\xa2\xda[\x86\x88\xb51\xdc\xc4\xd8\xee*\xd7{\x03\x11eK\xca\xc4 I\x0b\x96j\xc4\xc4#\xa1\xd3wI\x08N\x1bC\xe7\xae\x0b\xd6\x07\xc4k\xb5\x90\x89 2&\xb4\x14P\x8eN\xc9\xb8\x81M{v@\xc1v\x10\xee\xdd<\x88\xae\xe7abpjS[N\xdb\x03\x8f<\x89\xa0\xb5 \x97\xce\x92\x82\xf8\n\xeb\x8f\xca\xe2\xa5t3\x08\x97\xaa\xd8\xd2\xb8A\x0b\xe3\xbd\xaf\x08\xa5\xc7\xad{Ry\xf7\xbd\xbbx\x10gYdT\x8f\xe4\x08R3\x0d\x11\x9f\\,\xe0\xc6\xddj\xf6\xea\x94\x90D\xed\x17\xcbA\xec\x84\xc6=l\xe4E\xf7\xbd)\xc2.E\xdfE\x9a\x80\x85\x1c\xa9S\xfd]\x97cGN\xe7\xf8\x06\xa8\xb7\xb6\xa4\xaaf\xaf\x87\xd7\xa9V\x16\x97\x90B\x8b\x99\xffPM\xbb!\xb5.\x96x\x89\x0d$\xb5\x97\x12D\x1c\x17\xcb\xa8j2\xcdBw;\xefu\xdeEd\x16\x8d\x99\x15\xdbh\xbe\x88\x19\xb2\xd04\x88\x8e\xbc\x00\x91Q4?\x87\xb0\x7f\x16\xfa\xc7\x1f4\xb6z[\xbd\xc6C\x16\xfaI\xe3\xd9\"9>\xf1b\xf6\xa2a|7\x88\xfc8\x1a\x9dt\xe2\x05F\xeb\x91\x15\x1aw\xe5H\xdc]\xaft\x0ffGFL4\x93#.\xd9\xc0\xc5c\xed}c}\x13\xa0\xa8\x1d\xe7\x9a\xc1\xc4\xa3\x91\xe1\xe3V+2|y\xf6\xb6\x1b\x80\x8d\xeb\x1b\xf4\xc3=\xbb\x92\xdf`\xd8\xba\xa8;!V\x00|E\xaf\xb1\xd9\xbc\xe9\x18\x0c4\xf4u\xf5#\xb9\x03\x95\xe4!\xb5\xe4\x85\xc1\xcfz%\xa3\x1e0\x08ur\x9f/\x16\x83\x9a\x83\xde\xb8\xe3\x87\xc9\x9c\x8d\xd2=\x08#\xd3j\x19\x95\x94\xfa\x1bn\xa5\xc8\x8au-\xc1r\xc1z\xb3\x000 \x181?P\xe6\x01\x93 \x8a\xe27h\xe4\xc3=\"\xa3&\xc3v\xcf2\xd8N\xcf\x8e\xad\x10\xdfB\x1b%\xc7\xc8\xfbr\xea\xf0\x99\x0f3\xbe\xf7\x15\xa1\xe6\xdc\xef\xf7\x84\x9e\xf3\xd6\x07B\xcdy\xeb\xaeP\xd7\xe7\xbcaA\xf9D&s9\xf9&\xfc\xf5\x1e&c\xa8\xe0}L\x8e\xe9\xb8\xf3(\x15+m~uAft\xdc\xf9\xda\xc7_\xff\xfaw\x0e\xf7\xee\x7fx\xff\xf9\xa3\xc3G\xfb\xbb\xcf\xef\xef?}\xbeG\xa6ta _\x96@\x98\x9c\xd3\x95\xa1\x16;\xd15\x93\x014\xa7\xc7\xe4\x059\xc2\x17\x91\x11\x92\x94,\xc4\x91\xfb\x199%'\xe4i {\xe0\x19\x99\xd2q\xab\xf5\xa9\xda\xeb\x7f\n[\xffY\xab\x05\xf7\xf7{*y\xcfa\xae\xd2\x0fT\xaeY\xc0T\x02t\x04\x11\xe8\x8d\xa8\x17\x16\xa6\xb1\xcf\xdfd\xd9\xd5\x0ep\xfe\x1b*U\x94\xfc\x92\xf2\xa6||\x1cwij\xa2\x86\xc2&\"\x87\xb4\xd9'{T[\xce\xc9>\xdds\xa6n\x96\xed9\xe8\xab_\xcd\xb1\xe8f\xd9\xb8\xd5\xdas\xc6.\xf9\x94\xf2\xbe\xedg\xd9Sc\x8c\xc9}\x8a@\xfcC a\xecu$\xe4Y\xb6\xcf\xb1p\xbf\xd52\xce\xa8o\xdc\x97J\x85|\xd1\x90\xf1\xa3\xab\x8b@\xabu\x06\xba\x81\xad\x961\xcf2\xdf8\xc3\x94\xd2\xe3,3<\xdb3\xce\xc81\xb6j&\xd6\x993\x85\xad\xff\x19\x99\x92s\x8cIb\x9c\x91]\xd2\x94\x07m\xad\x961qv]z\xce\x85}\x85`\x18\xab\xfdVK\xbd7)\xdd\x07M\xdfV\xcb8\xa4\xcd\x1e\xf9\xb4\x86\\\xf65\xd5\xeb%\xd4\xdc<\xe2(\x9a\xba\x94\xd2O\xb3,0\xf6\xc8\x94|\x8a\xc9\xc4I]\xfa)\x19\xf3}\xcd)\xbd\x10mXO\x0d\xd5\x1a&|\xc8\xad\x17\xf6\xa7\xfd\xf0E4\x82\xf8bH\xf3\xbeq+\xae\x13\x1a\xf7@\x83{\x85O\x90P(]\xce\xe3h\xe6'\xc2\xb9\x1d\xd37`$\xd6t\xcf\xc4\x19w\xa1c\xb5\n\xfd\xd7\xbcq\xe3\x99\xa8\xab\xa1\xcf\x07x\xfapw\x8fz$\xe8|\xb4\xbb\xff\x8d\xa7\x0f\xf7\xa8\x83\x1e|c\xf7\xc17\x9f~\xbc\x8f\x08z\xf0\xf4\xc9\x93\xdd\x07\xe2\xe9\xd9w\x10A\x0fw\x1f\xef\xee\xef\"\x02\x88%\xe8\x1b\xbb\xf7\x1f\"\x82\x1e?}\xf0MD\xd0G\xed\xbd\xdd\xfb\xcf\x1f|\x83?\xee>\xff:\xcf\xf6\xd17\xef?\xd8\x7f\xf4\xadG\xfb\xdf\x81\x97\x07O\x1f\xf3\xdf\xa7\xdf\xe2\xdf\x9e<\xdd\x7f\xf4!O\x7f\xfal\xff\xd1\xd3'{\x88\xa0g\xf7\xf7\xa1\xf8\xb3\xa7{\xbc\xfag\xcf\x9f>\xfb\xf0\xd1\x93\x87\xf21\xff\xfa\xb1\xa8\xfc\x19\xc0\xf8|\xf7\xd9\xd3\xe7\xfc!o|\xef\xe3\xaf\xed=x\xfe\xe8k<\xcf\xfe\xf3\xfb\x0f\xf8\xef\xc7O$\x90\x1f?)>\xbb\xb7\xf1\x89\xb0F\xc9m\x91s\x87\xf7zR\xc2U\xe6\xc3`\x06/\x94J\x13\xda\xfd\xac;%\x01\xed\x82\xc6\xf6\x88\x82\x9av\xa1\xd0\xb6P\xad\xc0\xaa\xf5N\xcc&J\x89\x0dlC\x94\x06[\xecO\xfd\xd0\x0b\x9e\xf1\xb40\xcb\xd2u\xd6\"J\xf3\x91o\x1c\xc5\xa1t8\xf6\xb9\x00\x00\xae?z\xa5\xe8\xc3R\xcb>.\x1b\x1a\x18,\xb7\x91P\xe4\x1c\x156\x1e\x00\x15\x91Y\x84=\x01h\x17\x81\x15\x01\xff\xa6\xae\xe1\xa5\x19\x02X\xaft\x0eU\xf9P\x9b\x0e\xac\x04\x9bI\xfd\xf2{\x9f\xc4+z\xfe\xa2Yl\xab'\x1a\xeb\x06\x049\xe4\xbe\xccG\x9a}\xd0\x8a\x03\xac\xfa\xf0C\x04\x94|\xf5\xd6:Be P:`\x1a\x12{\xcbJ\xb0b%z\xc9\x82uJ\xce\xb2q!\xcd\xf8\x9d\xe4\xf0\xc20J\x1b K!\xa9\x11M\x1a^#\x8c\xc2\xb6h\xa5\xb3!\xe1/\xd0(\x94\xa3\xd3V\xab\xa2Y\xadP\xa5\x86J\xear[\xf2\x9d\xef\x83C\x12.\x17\xa5\xcb\xf4UC\x1dE\x02\x0b\xb5`(\xca,\xd9\xd7\xb0\x8a\x17\xb2\x92\xeb\xb3\x8b\xb9\xba\xfaWq\xd2`\x04\x16\xe28;O \xa1T\xaa\x8b\xb1r\xc0\x04\xfaf\x03]\xab\xbch\xd3\x89\xdc5(\x16\xddX\x8bb\xe1\x92\x11\xb0;\x8e\x980\x8c\x07\xab\xa9\xce\xc6\xea\\#Q\xa9\x9f\xa5\xe6\xd5\xa1N\xde=\xa9\xaf\xa0\xa3\xb4j\xa9\xa4\x89\x94u(\x95z\x8aQ\xd9\xc9[C\x87\x80\xa4\xf5\x88\xf7io\xe0\xe7n\x9a\xda\xfd\x81o\x9aX\x82\x16b\x12\xd3\xc8\xf1]\x8dk\xb4Z\x85\x14^\xf4*v\xed\xfa\xee\xc6\xae\xa5}\x107\xc6$&\x17\xcb|:\x17m\xa9\xaf4r\nx\\\x8e \x06\xd8Ys!\x15\xf1\xe5\xf4\x1b^r\xccwm\xf9\xb5NIO\xc7q\x07i\xc9\x92C\xf7%7\x08\x0b\x1f\xb8\xa1i\n\xc3\xd1:\xb3\x12't\xf3]aP\xb6\xa1\x19\x81\xfd\x8cpf\x06\x97qNo\x95\xcc\x1e\x85/\xbc\xc0\x1f\xd7\x91\xd73\xf1\x96(\xbd\xe0\xa9\xaf\xbc\x7f\xde\xe9\xa2\x0d\x8d\xf9\x15\x1a\xa4\x1c%|&T\xa6]\xc5\x85\x1e\xba\x03B\x113)\x7f\"\xe9\xaa^~j9\xa9{\x13>\xa4T\xc9\xbb?\xe0\xf5t\x91Y\xa3\xb0\x11\xe7\xb8H*F\x12\x9e0\x90\xc0\xcb\xdb\xee\x165\x8b\x08?y\xce&V\xb9\x87\x92\x7f\x81\x0d\x96`a\xcdf\xad\x8d\x9d\x93\xbao\xd4=\xcf\x97\xe2-\xdcQv :\x001\x1b-\xe2\xa4j\x0b m\xd0\x855\xc0\x05\xf8\xbe\xb6zKL\xa4\x1flH^10\xb8\xe0s\xd5Bw\x10\x91\x05\xc8\xfc\x84\x9ds9X\xb8\x7f\xb1.\x96d\xee\x9d\x07\x917\xe6\x8f c\xa1\xa5Y\x1a\x10\x7f\xcc\xc2\xd4O\xcf\xadf?\x7f~\xc8R\xb1\xeeY\xcd\xfe\x92\x84\x18\x93U\x13 \xb5\xb2\x86\xc0,\n\xf7\xc5\xc2\x02\x03\xfa\xd19a\xe7\xd4#\"\x87\xcch\xae\x1bh\xc3\xc3\xbc\xa7\n\x04!Z\x08g\xaa`\xc8\xe0x\xae\xfe]\xb3\x86*\x95!+\xa6\x1f\x1e\\(\xa5\xc4\xe3\xcc\xa0\xc6\xd4\xc3s[\xadfQ \xbe(\x9es<\xb4Z\x15[*\x00\xa7\xd5\x92\xaeaD%\x12\xdaDB+\xfb\xad\xf4\xef/\x96\x83Dz\xe4\xa1)It\x9c\x90D\x0c0\x95\x03m\xcb_\xb3o\xf5yN\x81F^\x04\x86\x11J\xc1\x13\x11\x9ed%\x9eHR`\xa7\xd9\xd7\xde\xf2n\xd0\x9a\xae\x11&\xa0MH\x84\x97r\xa8\xfc\xe5\xf2\x8d$\xde\xd4hW\x98,\xd4\xb8\xfc:<|\xbe{\xff\xc1\xfe\xe1\xc3\xddo\xed?}\xfax\xef\xf0\xeb\x8f\x9f~\xed\xfe\xe3\xc3o<}\xfa\xcd\xc3\xc3:\xefXo(\"\x1cE?|\xb0\x8b/\x84\xf3\xc3[f7\x98\xe6QI\xb9\xd4\x04\xcfvp\x84\xb04\xf4\xd3\x8a\xd0\xd8\xda\xba\xf7&\xc9;\x9f\xe2\xf7\xb8\xb4}1:\xf6\x83\xf1\x03\xa1\n\xb9\x7f>g\xe0jnT\xbcW^\xe1\xb3\xdc#qJ\x15\xef\xc2\xe1\xd2\x13o\x06\xd9\x0b\x9foy\x0eH\x8a\xfd\x17l\xbc\x97z)\xfb0\x8ef e\xac\xf9\x96\x97\x9b\xf9g~\x08O\xf38\x9a\xe7\x00\xa4\x02\xb0%\xf1\xe9E([\x95\xaa\xee\"\xab\x90\x1b\x00v/\x08\x84{yx\x82\xb4\\mW\xbc\x00\x13\xe9-\x89G/\xdeyG\x8c\xa6\xe8\xf5\x8c\x93\xfd-:\\\x0f\x1bL\x9d\x9c\xd8\x02\xfd\x94\xb2\xe3'\x1f\xb1\x19\x1c\xac{V\xe2\xb0\x8ej\xd7\xcd\xb2h\x998q\xe7\xc3(>\xf5\xe2\xf1s6q\xcbP \xcf}o \xd4\x92\xf0:y\x93.\xf5\xa4+M\xc9\x90\x05\xe9\xe7vB\x8b\x1b\xce\xe0\xc9\xfc\xc6\xf3l\xb2\xe6\xb8[\xbb.\x19\xd3Z\xfb,r\xbcrOVs\xd0%\xd7\x1aq\xf6\xb9b\\+6\x14\xc7J/ol\x84x \x03\x99\x1d\xb7ZB\xdb-\xc6\xe0\x93\xcc\xa3\x0b\xfeu\x0e\x8a0\x9e\xba\x95\x98\x1b!\xd6L]\x13\x1a\x18)&3\x1a\x18!&S\xda\x1bL\xb7s=c\xd3\x9c\x8a\x86\xce\xa9\xe7L\x85\x9d\x88\xe1;\xe7.(\x1b\xc7\xf00k\xb5f\xf0\x90\xb4Z\x89s\xee\xcam\xe0\x0b:1Br.\xcc\xdbFFJ\xce\xc9\x0b\xddi\xdary\x93\x1e\xc2\x97\xba\x9b\xcd\xcd\xb7\xff\xf7\xa5\xcd\x06x\xe5\xf94i\xbc\xf8J\xa7\xdf\xef\xf4\xbf\xb4Yr~\xfbi\xd2\xf1\xa3\xee\x976\x1b\x0f\x94BF\xc3\x18\xe1\xc6V\xaf\x7f\xef_\xbe\xf7s[\xbd\xfeWH\xe3G\x16\x81\xef\x85\x8do^\xfd\xddq\xc8\x82/m6\x9e3p\xe09\x06?\xb618\xda\xfd\xe8\xd1~\x83\x0bda\xc2tG\x9e\xbc\xf2\x17\xa7\xfb\xdf\n\xbe\xf4&Hk\xffu\xbfT\xab/\xbc\xc2\xd6\x18\xad\xe1\xcb\x82:\xb9@\x04\x0f\xd5\x0f\x1du\xf9[s\x07\xd6P\xa2\xd3\xb2\xd6\x0e\xb5v\x19P\xcd\x95=2Q\x9a\xa77\xd5sA\xec\xb6\x82\xcd\xca\x1b$\xd5\x13\xb1\x1b.**\x86ur\xf3\xcb\xd9]\xc3\x13!\xfa\x1a^R2\xad[\x92PG\xa46\xc3\xca\xaecn\x96~c\xed\xe6\x92\xea/Y\xd6\xec\x93\x98#`\xe2O\x17\xe2{\xb3'\xaf\xca\x90\x1f6b\xd0\x0d9\x8d\xfdT~\xcb\x8d1\xcb\xec\xc8`$\xe6\xc2\x18\x9f\xb9+\x97\xff\xe5`{!Lr\xed\x86?\x04=Y>\xf1cLRX)\xe3\xb2\x14Z>\xa2\xcf\x1d\xb6\xd3\xfe ]u\xd6\x9e\xaa\xce\x87\x9a\xd5\x87\xb6S\x00\x0b\xde\xf0v~\xdb9\xdc`\x01.m\xc1\xb4\xbd\x80~\x1fT\x1a\x98\xfcz\xa0iTa\xdb\xe9k\xbb\xd0\x02\xb8\xbe\x8b\xb3L\x7f%\xd1\x8a]\xd6\xceVm\xd1-\xd7\xd6_,\xc7%\xfej\xd9\xbb\xb5e\xef\xeae\xef\xba\xd6\xbb\xec\xee U\x17\xdf\xf2t-=\xa3\xa1g\xde\xf8|\x1dRx\x97\x10\xdf \x04,e\xc2\xfbO\xbdw\xd8N\xcc\xab\x81\x1d\x8cRc/\xa3A\xc6\x05\xaf\x8e\x86lH\x1c\x0b\xae\xc3\x82uc\xd9*\x8ad\xffN=?\xfd0\x8aE\xf6\x1b\xe7\x9c\x0d\xd7\x8daI\x99\x84\x0bt\xf5$\xa4Ol\xad\x11\xb1c\x07P\xea\xeb/\xae\x9e\xf8<\x86\xdc\x0fe?\x9eE\x89\x0fyB\xdc\xe25t\x1e>}\xf0\xf1G\xbbO\xf6\x0f\x9f=\xdd{\xb4\xff\xe8\xe9\x93\xc3g\xcfw\x1f\xec>|\xf4\xe4\xebZ\xcc\x8f\xdc\x99\x93\xf0\x04\x96~\x8ej?|\xfa\xf8\xf1\xd3o\xf3j\xf3\xe9%\x1f\xfa\xa55Tb\x97\xd7\xb2~Ya\x9dy\xcc^\xf8\xd1\"\xe1\xf9\xf2\xa5\xe3\x82\xa7\xf2\x14+%!\xff\xc9\xc1\xe7\xcbv\xc8\xceR\x91\x1d\x1c\x16\x15\xaf\x057\x81\x03)\x81\xd5\x0fAb\xa8\xc7m1\x03a\x05i\xf6\x0b\xdf\x7f5\x96$B7\xeb\x85\xc7\x01 A\x01'%>\xe5Bs8\x0e\xd8\x18\xe7\x8aI+#+G\xd26\x9a}a\xfe\xe3\xdb\xcd>\x15OYf\xc4N\xe4\xaaZ\xf8\xf6\xc2\x8a\x95]\x82\x17X!\x91_\xc0\xf8\x82\xf0\xcf\x86(\xdcj\xad\xc9\xd7_\xe2\x129\x8b\x0fO\xe7,\xbc\x81\xbdV\xf9\xd1\x80\xadq\x80\xa6 \xcd\xb2\xa8n \xe0\x08*\xcf\xe6\xa8S?\x9f4\x17m0~\xa9r\x8a\xaa\xcfr\xb1\xe1e\xfb\xc7q\xb4\x98B\xbe\xb5\xd0\x93\xa8\xd8\x17A\x14\x17\xceUeL\xbf2\xb3\x00\x1b\xbe\x18\x93\x80:\xae2\xcb\x96\x17\xeas%\x8d\xf9*\xc5\xa7^\xa7B\xd0F\x82\xc9\x1c\x94\xc1\x04\x99\x92\x05\xa8&\x8e\xd9\x00\xebs]\x8a\xeb\xe5%*\xad3\x84mx\x9d\x15\x925\x16dN\x18 \xcaKM\x8a/\xbcu\xf8L\xcb\xf8d\xb5-I\xd3q0a\x00l\x13\x99\xb2\xc0\x83Q\xfd\x90\x87\x90\xbb\xcc\xc7d\xdfVH\xcb\x08\x08\x13.&\"ce-\xacg\x065\x02\xdd\x0fc%\xf4\xa9\x92R\xd4\x96\x8b/U\xb4p\x00\x97e\x91\x81\x89_\xd3g_\x80S\x0e\x81\xd2\xa9!E\x83\x11\x1f\x88\xaf,%x\xb0FFB\x1e\x18\xc4\ngv\\\x15:|\x92`+\x91r\x83\xabv\x89r\xd9\xbcI\x08\xaaQ\xefrR\xd7JIL\xf3e\x97\xf3J\xf9\xa8\x96$HJ>\xaaI\x8c\xbe[\x93\x1a\xd5\xa4\x9d\xb2\xa3\x13?\xad|\x80\x1dJ\xc1K5\xe5\xa7\x17,>/\x8b\x05r\xb5\xd0\x9c\xec\x08\x17?=\xe0Y\x18\x93H[P\\\xbe5\xe3\xa3T{\xd0\xe0s\xea\x94\xdbu_\xdb\xae+\x03]F\xa5\xe7\x97\x90\x8ap(\x9d\xd0{\xe1O\xf94\xee,\x12\x16\x83Z\xd4\xc0\xd0\\Y\x7f\xb4\xf7h\x17\xe1\x9dv?\xcb\xb4\xd4\xfd\x18.t\xe0C\xae\xd0\xe0\xc3QP\xb1\xc9\xf7\xd5\xf0\x05\xd1\xb4NTX\xb3c\\w\x1cb\xeb/\x16\x1a\xb3\xa3\xc5\x14\x111C:\xd1<\xed\x04\xd1t\x90\xbf\xc0g\xdds&-\xf4'b[\xbb4\xb2@\xd7\xa2\xf600vB\xb7\xd5\xe2\x7fE\xc4\xae\xce\xa7\x89\xd5@\xa6\xb6 \x11W\xac{i\xcdrZg\x1c\xea\x0c\xdbCg\xe8\x0e\xbb\xc3\x8b\xe1rh\x0c\xf1psh\x0e\xedag8\x1c\x1e\x0c\xdf\x19f\x109r8|\xa7\x85\xaa\xb2\xd7s6\xdd=\x9b\xafo\x06\x8d\xfd\xc4;\nX\x11\xb7\x94c\xe1\xd4\x0f\xc6#/\x1e\x83\xc7B\x91\x9c\xb0t1\xff\xb6J\x17\xd5\x82H)\xbf\xe7]2X\xc5\x01\xa8\xaa49\x0f\xa3\xf0|\x96\xe0\xdc0X\xd5-@\xdd\x93\xdf\xb5\xba\x8b\xc2\xfe4\x8cb\xf6#\x91\x1f\x82\xbea%\xfd\x19\xef\xd7Bl\x8a\xa5\xf6G\x05\xf2Gzy\xad\x85b\xe0}o\x14\xfb\xa9?J\xaap=\xcc\xbf\xac\xf6Z\xe4\xf8\x88\xc5S6\x86-_\x91\xe7\x87\x03\xbch`\x15\xee[\x8f\x9b\xa8\xe0\x86\x81\x13\x19\xee\x8fF\x8b\xd8\x1b\x9d\xe7\xdf+tT\x1e\x9c\xf5\x82\xe8\xcah+\x87U\xe2\x1b\xc2\xcf_\xa1\xbfR\xa1\x8f\x07H\x1a9\xc3\xaf\x18\xd0\x82%\xf0}\x92,\x8c\x0c\x19\x81\xa1(\xeda\x13e+\xa9 6\x11F\x04Mg\xc8\x0c1\x89\xcd\xbc\xa4\xd4\xc5\xe7c<;\x9f%\xa5\xf2\xd5o\xa2\x163.\xab\xb2\x08R\xa9\xe4]\xcfu~(S\xe3\xc6y]\x00U\x87\xf1\x1b \xd3\xb1\xdc5lk8\xc4\x9bC{\x8d\xdb\x15\x19i\xb3\xb0\xaa\xb7\x91\x8d,\xf4\x7f\xa1%\xc6x\xb5\x9a\xcd\xdbW\xb3\x89,\xf4\x7f\xa3\xd5m\xfa-:\"\x0f\x1aO\xfd\xf4xo\xee\x8d\xc0,\xb0\x86\x1e\x07\xab\xeb\xccp\xd1\xeb\xf5\xfa\xdd)Im\xe4\x0c\x87{\xc3a\xe2\xf2\xfe\x0c\x87{v\xc9\xe1+\xcf\xb7U\xce\xb7)3njK\xd0\xba\x11\xba\xe5\xaaw`dx8t\xeb\"\xd6\n!7T\x18K\xcd\xbe\xda\xf2v\x1dYJx\xf4\x89q\x96\x81K\x88\xd8f\x1639\xc3XE\xea\x1b\x81\x13(u\\\x9d\x99\xadP\xa8Bh\xf9\x06 \x04\xd7\x87j\xc5KuW\x14\xf9\xcc\x0cs\xb7A\xfa\x8aT\x9a\x1ayQ4\xe4\xd8\xf7\xc6C\x883}$~F\xe2g\x0c\xca\xfe\x927\xe6N\x91`\xb4zfW9'r\x90\x99\xe6\x0d\x9a\xc8\xddD\xd8b\x15\x8cT\xd7\xbc[0\xfcZ\xe6\xbe\x96\xf9;\xc8\xbb\xfa\xf5\xab\xef_\xbf\xfc\xcd\xab\xdf\xbc~\xf9\xfdW?y\xfd\xf2\xcf\xae_\xfe\xc9\xf5\xcb\xbf\xb8~\xf9W\xd7/\xff\xf7\xd5o\\\xbf\xfc\xdd\xeb\x97\xbf}\xfd\xf2\x07\xd7/\xff\xe0\xfa\xe5\x1f]\xfd\xd6\xd5o\xbf\xfa\xf1W\xff\x0e\x11t\xff\xea{W?~\xfd\xf27\xae~\xf2\xfa\xe5\xaf\xbf\xfa\x89\xeb\x97\x7fz\xfd\xf2\x8f\xaf_\xfe\xf9\xf5\xcb\xbf\xbc~\xf9\xd7W?q\xfd\xf2w\xae_\xfe\xd6\xf5\xcb\xdf\xbb~\xf9\xfb\xd7/\xff\xf0\xea\xdf^\xfd\xbbW\xdf{\xf5o\x11A\xa3\xab\xdf}\xf5S\xaf\xfe+\"\xe8\xc1\xd5O\xbd\xfa\xf7\xaf\xfe\x0b\"h\xfc\xeag^\xfd4\"\xe8\xe1\xab\xff\xfe\xea\xbf!\x82\xd8\xd5\xef]\xfd\xe0\xfa\xe5\xe5\xf5\xcb\xbf\xbf~\xf9\xb7W\xbf\x7f}\xf9\xe3\xd7/\xff\xe1\xfa\xf2'\xaf/\xff\xdd\xf5\xe5O]\xfd\xc1\xab_y\xf5s\xaf~ \x11\xb4{\xf5\x1f\xae\xfe\xe3\xf5\xcb\x97\xd7/\xff\xee\xfa\xe5\xdf\\\xfd\xa7\xeb\xcb\xef]\xbf\xfc?\xd7\x97?q}\xf9o\xaf/\xff\xfd\xd5\x7f~\xf5\xcb\xaf~\xf6\xd5/\"\x82\xfc\xab?\xbc\xfa\xa3\xeb\xcb\xff\xf8\xea\x07\xd7\x97\xff\xf9\xea\x8f\xaf\xfe\xe4\xd5\x1f \x82\x1e]\xfd\x97\xab\xffz}\xf9\x1f^\xfd\xde\xf5\xe5\x7f\xba\xfaoW?\xfd\xea\xf7\x11A\xc1\xeb\x9f@\x04=~\xfd\xe3\x88\xa0\xf0\xea\xcf^\xff\x87\xd7\x1c\xf2'W?\xf3\xfa\xa7^\xff$\"(\xba\xfa\xf3\xab\xbf\xb8\xbe\xfc\xe9\xab\xbf\xba\xbe\xfc\xafW\x7fy}\xf9s\xd7\x97?s}\xf9?\xae/\xff\x9f\xeb\xcb_\xfa\xa7\xef__\xfe\xaf\xeb\xcb\xef__\xfe\xca\xf5\xe5\xaf]_\xfe\xe6\xd5__\xfd\xcdk\xde\xe3\xa7W?{\xf5s\xd7\x97\xff\xed\xea\x7f\\_\xfe\x97\xab\x9f\xbf\xbe\xfc\xd9\xeb\xcb\xff~}\xf9\xf3\xd7\x97\xbfp}\xf9\x8b\xff\xf4\xeb\xd7\x97\xff\xf3\xfa\xf2\xd7\xaf/\x7f\xf9\xfa\xf2W\xaf/\x7f\xe3\xea\x17\xae~\xf15\xc7O\xfc\x9a\xf7\xf5\xf9k\xde\x8f\xe4\xf5\xf7_\xff\xca?\xff\xd2\xeb\xff\x85\x08\xda{\xfd\xeb\xaf\x7f\xf9\x9f\x7f\xf1\xf5\xffD\x04\xa5\xaf\x7f\xfb\x9f\x7f\xe5\xf5o\"\x82\xf6_\xff\xd6?\xff\xf2\xeb\xdf@\x04-\xae\xfe\xf6\xea\xe5\xf5\xe5\xef\xbe\xfe\xc1\xf5\xe5o\xff\xd3\x9f^_\xfe\xc1\xf5\xe5\x0f\xae/\xff\xe8\xfa\xf2O\xae/\xff\xec\xea\xf2\xea\xef^\xff\xc9k\x8e\x86\x8f\xaf~\xe9\xea\x97\xaf/\x7f\xe7\xf5\xef]_\xfe\xd6?\xfd\xc9\xf5\xe5\xef__\xfe\xde\xf5\xe5\x1f^_\xfe\xf1\xf5\xe5\x9f^\xfd\xca\xd5\xaf\xbe\xfe\xe3\xd7\x1c3\xe7W\x7f\x7f}\xf9\x17\xd7\x97\xff\xfb\xfa\xf2o\xaf/\xff\xea\xea\x1f\x10A\xdf\xb9\xfa\xb5\xeb\xcb?\xbf\xbe\xfc\xeb\xeb\xcb\xbf\xb9\xbe\xfc\xcb\xd7\x7f\x83\x08\xfa\xee\xeb\xff\xf3\xfa\xef^\xbfD\x04\xfd\x9b\xd7\x7f\xff\xfa\xf2\xf5\xdf\"\xd7\xfa\xdc\xf4\xf6\x85\x89\xadBioIf_\x88\xc6\xd6\x12X\x89\xba\xbe i}\x01\xba\xaa\x10U\x0dE\xbd-9}~Z\xba\x81\x90r*\"qq\xa9\x9c;\x9dC\xa8\xee\xaa5\xc2\x17\xab\x9b\xf6P\xc6\xf7.;\xe9\xc1\xca\x90D&\x84\xb0;V[\xf7\xc1:\xb1\xcfAfh\"W\nt)&y\n\x84\x08\x13\x16\x0b\x85\xffI\\\xb9\x9e]\xb7s\xb9\xe5\xda\xc9\xe9\x85\xc4\xd4\x93\xd1h\xf2AZ\xdb\xdcM\xa7\xcb\xf2\xe6Ci\xa6\x10\xfdLW7\"\x92\x00\xd9FL\x8d\xb0\x88\x8e\"\x93\xc1\xa3\xa3\xa9\xa5\xca\x8b\xe7~/w\xd8'\xc9P\x95\xc0\xf2VA\xff\x90\xef\x9f\xe3v\xba\xd3\xe3?\xe1N\xcf\x8eh\xb3'}\xca\x02 \xc0n\xcd\x0f\xa7\x0d_\xda\xe9Dq#z\xc1\xe2\xc0\x9b\xcfyr\xcc\xfbl5\x90\xb9\x1ah\xa3\x8e\x14r\x87\xb5\xf5\x95\xbfmm\xe4\x02\xbag\x85\x84\x85c+&P\x8b\x15U\xee+\xbf}\xec\xa7,\xe1[\xdf\xf5#Tl\"\x8b\xa1\xa9xrO\xdb>Ij\x07\xa3\xed)\xcd\xb2\x98\x1a Mv|\xdb\xb7\x925C\x84w|pA \xdd\xf4\x02\"vC\xd9\xf7\x86\xb7H\xa3\x99\x97\xfa\x9c\xbe\xce\xc1t1\x8d@\xa7v\xe6\x9d\x89\xf8\xd8|\xba!\xd3\xc7\x98$\xdb\xbd,\x8b\xdb\xf0\x93\xec\xf8Y\x16\xef\xf868\xf5\xd7\xaa~\xf49Qk\xc1.9\xd4\x9c\x8a&$\xd6\xf7\xfc\x89\xd9\x9d\x12\x84\x84\xc7\x84R\x93{'\xbe \x8e\xd3\x1c\xf1\x82q\xbc-\x0cjx\x93u\xc3;e\xe9\xbe\xbc\xa5~\xf3\n\x85\x90\x90\xd7\xc4L\x90\xb7\x8e\xa5\x8b=\xfeG\xdc\x11v\xf6\xbe\xf1\xf4\xdb\x87\xfb\xbb?\xba_9\xa0\x91\x17\xc3\x92\xec\xd4\xb0r\xf0\x8c\xd0\xa4\xac\x93\xb2\xb3T\xde\xd9\xaasmq\xd3\xce\x96+\xaa-\xf9\x12#/\x93v\x85&\x87\xa1B_sp\xb0\xad\x01\xf5\xe1\xa3\xc7\xfb\xbb\xcf\x0f\x9f\xef\xfe\xc8\xee\x83}k\xf5\xc3\xfd\x07\x0fv\x9f\xed/\xcb\xba5\xcc\x10\x9e\x99\xac\x10\x00I\xacxY\xba\x08.7~\xc3\xc2\x15\xe5j'\xac\x18-\xa9}\xa2\xd4\xe7\x1d$\xb4\xfc\xb9\x18\x9f\x9e\x0b\xaf9~\n\xbf\xc7\xcc\x1b\xf3\x9ft\x16 Wk\xff4\xf6\xe60/\x1f\x85j,\xdf|\x95)\xda\x16\xe2\x95]M\xb0`\xe1B$\xa2R\xb4\xe0\xf5\x1a\xa9\\\x03\xf2\x84\xb0\x9db\xe2\xd1\x8a\x06\x8br\xc1\x17\xe7\xeav^')\xa9\xe4\x8d\xbd\xd4k\x0buy\xde\xbdx\xc1\xf4e\x0f4\xad\x9f\x80\x8b\xadjA\xf8\x84j\xb2b\xe2\xe9\x84C#\xfd\x8dD\x1a9\xa8\xf9'\xa2\x98{$\xc2\xc4\xaf\xc3\xe4G\xde|\xce\xc67\xe3S\\\xec\xcb3p\xa1\x98\x00\x04\xb2\xb2M\xf1H\"\xf2\x05Tfq\x12\xb3_\xb6%\x0e\xb2,\x10\x0cqG\xaa\xa9\xc7\x86\x07\x99q9V\xc4\x88\xa6mO\xb2\xce\x055\xc2\x1d\x8f/\xc66\xfc\xb5B\x9c\x7f\x9bSel\x9d\x07\xdf\x93\x9f0\x99T\xbf-L\xf5M\xf8\x95\xe7\xedR\xbfSCZ\xf2#\x19\x91\x05\xce\x0d\xd6\xe7\xe6\x84\xa8\xce\xd7h\\q\xd2\x0bw\xc4\x99\xbb\xec\x7f\xe8\xca\xce\xf6\x84\xaee\xdd\xb76\x85&\xf2D\x16\x8ey\x12\xc8\x11m\xba \x91\x84%W\xd5\xd9\xf3\x8f\x02?\x9c\x16\xfdl*\xf4`=\xc6\x1b\xa4\x946r:\x01|\xb4\xfe\x8e{u\xc8\x89GE\\\xf7\x9e\x95\x9a}\xc1\x19u\x9eZ\xbe`N\xd7\xa3\x08_\xa4T|.\xee^\x94\xc2\x87\xb424\xf8t\x04\x87\xb0i\x89K\xe6\xee\xb1\x1d\xcf\x85(\xe5\xa1\xc1\x1fs\x8f \x8d\x84\x14\x0f\x06\xdd\xe0\x0fV5\x11\xd0\xfe \xd8\xf6\x06\x81i\xe2\xc4\xa4\x91\x13\xb8\xb9\xa2\xfe\x9a\xe1OIB\x12\x937\xa0\x04 \x12\x83\xc1@i\x08\xf8\xb8\x05^\x92>\xe2\xed\xd2\xde\x12n\xcf\xcbZ\x88\x1a\xae\xef\x8f\xe2(I$\xe3\xf8W\xc1|a\x8eT\xc1iR\xe0\x14Z\xcd\xb1 q\x88\xd5\xacM\xd6!pD\xfb\x83\xd1\xb6'\xe2\x86\x984qF9\x02\xf9\xe7\x05\x0d\xcc\xa4@\xd5\xa0\x84\xd22\x8b1R\x12\x90E\xed\xfa\x16\x1a\xbc\x0e\xc2*\xfa6\x04\x02\x00\x14X\x0e\xf9@\x00\x8ak0\x0dm~\x18G3\xc8{+5\xab\x9bP*\xf5P<\xe5\xaaBu\xb0v\xeb\xaa\xeaM\xc0]r\x8d\xe2\xa28\x1cR\x07\x98\x8cho\x10\xde\x82\xd0| 4\x12r\xa2\xf0I\xbf\xec\x03\xbf\x9e\x00\"\x92\x92\x18t\xdb\xcb$02Mr\x1b2\x18U\xc9\x80o\x17\x9c\xa4\xddwa\xe1.Q\x84\xc5\x0c\xcf\xf14K(\xb3\x0f\xf1\x8b\x97\x86\xe7\xf4\xdc2\xb5\xbc\xf9\x98h=\xcd@\xa2v@h0a\xdf\xac.y\xb5\xc3\x95=\xbe\x06ql\xa6\x11\x98\xfd\n\xac\xa6\xc7\xac1\x89\x82 :\xcdOo\x92\x9a\x1dy\xa4v\xe4\xab\x8b\xaf\x11U\xae\xdf\xe3u\x03\xa0>\x96\x07\x00\xe6k\x05\xfd$\xad\x0e@u\xbe)\xe3\x17-\xb1X\xd4\xea\xe7`\xe9\xa84\xc7&\x1b\x148~\xc3.r\x13\x0dB\x93\"G\xdb\xf0\xb9u\xdb\xb7V\x8b\xef\xfdQGj\xc8T\xb6v\x05'}\xce\xb9\xbf\x174\x12\xa9\xdc\xc9\xe9:\x14t-\xd6\xbb\xdb\x9cI\xec>\xde\xfdh\xf7I\xe5X\"\xed\x94V\xf6*=\xe7N\x10\xf5-|\xc8\xf7\xc3\xabg\x0f\xb9W\xe28\xcb\xfc\xcfu\xf8P\x1a(\xcd\xd0j\x9e\"\x92\xb0\xb44B\x90\xf7\x90\x8fK\x0c\xde`r\xdc#\x92\xa3\x90\xbf\xc8c\x060A\x15*\xbe\xe0\xf0\xa5d\xd3e\xbd\xcb\xee\x92\xd5\xfb\x05\xe1\x14A\xa9/\xf07\xa5\x8af],\x89\xba^\xb2\xb4\x9b\x1dRf\x8a\xbc\xa5\x12\x13\x85\xa6ue\x8c\"A,OV\x8f\xach\x83p\xd0s]\x1b\xab\xd0\x0d#|\x06X\x1a\xe5/\x89\xe47\xe5D1\xa7\xf4\xb4|\x07H\xc6\xa5p\xbe<7\xa8\xadr\xb0\x82hjI\x15]\xe97D\x04\xf5\x9d\xea\x03Q\x88\x9aj8*f\x02Q\x8c\xd6\x94\x10\xde^\x05[J\xcf\xb4\xd5Z\x0c\xcd\xcaA\xd1J\x8e\xc2 \xcf\xc5\xc4_\x16V\x8e\xf5\x13\x99\x88@\xc3~A\xa8\x02h>=iYf\xcfY\x12\xff&.\x01\xd2%\xc9s\x8b\xb5\xe8\xa62J}l\xa5$p\xcd\x1bKj\x17\x0f\xaa\xa4`S\xb5\x1es\xe57.g\xc8\xdc\xcb\xdah#7y\xc3\xc8S\"q^\x03AK\x1d\xcf\x15O\xa9z\xf2\xd5-\x8fox\xa4\xd9\x13\xa2\x9b\x08pXv\x1c0\xf1\xc3qc\x16\x8d\x17\x01kl \xd33\xd1\x06\xe2\xb2g\x1c\x9d6\x82\xce(\x1a3\x8a>z\xfa\xf0\xe3\xc7\xbb\x87O\x9e\xee\x1f~\xf8\xf4\xe3'\x0f\x11 \x96b[\xc9[\xa6\x17\x12Z\xebb\xb9\x1cp\x08\x9c\xde\xff\xcb\xdd\xbf.\xb9\x91$\x07\xa2\xf0\x7f\xbd\x82\xfe\x00\xb93\xe8\x8c\xae(\x10\xa8\"\xd9d\x82I\x88M\xb2\xa7\xb9jv\xf1#\xd93\xd3Bc\xca\xb2\x12\x81BN%\"1\x91\x81\xaaBWbmu\x9b]\xdd\xaf+\xcdH\x9f\xee\xd2\x1e\xcdh%\x8dV\xbb\x92VZIf\x9anIf\xc7\x8c\xc3\x1e\xbd\xc0y\x83\xf3\n\xc7\xdc\xe3\x92\x91\x89D\x91\xddj\xe9\xd8\x11\xcdX\x88\x8c\x8c\x8c\x8b\x87\x87\xbb\x87\x87\x87\xfbX\x9d7\xc5f \x8d\x1b\xc6\x0c]\xfa\x8c\xfac\x8c8\x82\xb4,\xa6\xe5'f\xb3g-\xc4a\x87\xaa_\xaeK\x0fn\xed\xbe\x8eL/\xec\xc5\x84\x9d\x1d\x92\xf9\x02c\xd2\x9b\xa6\xd6\xfeE?\x18\xd5\x01\xad\xa8\xe5\x8b\xa3)o=V\x1b\xc8\xcb|M\xdb\x13:\xe3\xd5\x17\xcf\xe8t\x0c\x8cm\x0e\x1d\xccJ\xdc\x1e%9 \xedF\x16f:\x0c\xc3\x9d\xc4n\xf5u\x94~\x04\x824\x0e\x08\x18l\xcc#\xca\xf4\xf6\xc3\xaa\x19T\xd8s{\x93 '\x9d\x8e\xf3M>\xa6*\x10\x03\xbdX\x8f\xe9\xde&\xf8\x1a<\x0d1\xdf\x9bf\x02h\x9dG\x06\x0e\xae\x96@\x81\x9dV\xdd\x88\x9fX\xd5s\xce\xa4.\x0bc\xdb\xbb\xb4\xec1\xd3\xaeb\x0d\xd3;J\xf8\xc4\xcf`\x98\x16=`\x84\x19\xc96B\xfe\xa3{\xe8Q2F\x0f\x7f\xeaCA\x19\xb1\x08#\xd6\xe5\xccf4kpZ[\xba\xcdh\xf0*\x97YW\xc1\xb4\xe6\xdcqg\xc7\x06\xdd4\x8e\x1a\x9bB\xfe\xb7\xfdDM\xce\xe6%u{\xd2c\\x\xb6dv\xc2x\x80\xa7E\x03\x0c\xf2?v]L4\xfaS,]O^\xde\xfb$\x14\xa3\xde\xb8\xb6\xc2v\xfb\x83\x9d\x1d\x1b>\x18\x16\xda@y\xd4\xcc7kG(o\x8bj\x17\xab\xc2\xdcD\x9b\xb8b\xbb\xa2\x0e\xf0q\xdb\x82\xcd\x0b\xd5\xfc\xc6\xe5\xe5Ey{9\xa1\x11\xed\xab\x80m-\x1d\xcc<\x19\x891\x00r\x92\xc4\xcd.\x9c/\xd6\x96\xe0v\xcf\xa2\xf4\xa4z\x85\x0e\xca\xf1\x91\x1c\x87\x0c\xa4Gt\xe9\xac\x8a5z\xfb\xc40\x8b<\xac\xf9mQ\x12\xc2\x8b\xcc\x1c\xac\x9f\xd7\xba\x89\x84\xba\x02k\xb3q\xfc*\xb7\xe4\xc2-\xe6G\xe4B\xf8\x91\xd3wA#\x1b\xd0PGI@G\x80\xbe C\xdc\x17J_\xd0\x0c/\xae&)\x83\x89\xa2Iw\x91-\x94Z\x0e\xe4t\x8a4\xa8\x065\x0cPe\xe9Xy\xb3\xdf\x9c\x028a\x843m9\xd4$X0'\xaa_yr\xfb\x1f\xae\x1c\xd7\x9cQ*\xe7\xca\xe8\x90\x12*\\\xf2\xcb\xaa,\xeb\xe9\xc3G\xae\xc3O\xf4\xc6\x8cN?\xd74kpMjP\x93U\x82\xa9{W\xbcv\xc5\xda};isW\x0e\xd05\xe6\xf8\xc4(\x15\xa3}bM\x9d\xaf\\Q\xf1^\xcbAa\xd7\xf4|4\x0d\xb0\xa7\xbc\xb6\xeb\xfb$^\x80\x0e\x1fu\x1d\xba\x06m,}E\xd9\xb8i\xb6\x16\xf4\xd7c\xba\xff\x02^\xd8\xec\xde\x88S\xef\xf0\x90\xe5\x0fQ\xd8\xf2\xa8>\xaem+\xdf\x99Q\x9a\x1eL\x9fD\xf3EZ\x8f\xc5J\xedmJ\xbfGEW\x8a\xe8\x94\x89\x9c\x11 \x184!\xe6\xfem\xbbG\x17 \x0cM]w(\x86\xccO\xe8,\x94\xa3\x9a\x0f\xac\xb1O\x06m\x7f\x19\xfa\x93p\x86JE\x9f\x10\xb5\x99\x1b@u\xaa\xd5y8\xd1\x96w\xc7\xf5\xf6#\xff\x02\xdd\xdf\xad\xd6tNT_V\xe1q\x17\xfd1\x9d\x86\xc7\xe8#\xe3\x80\xa7+z\x14\x1e\xa3\xfb'\x86O\xe7\xe1\xb1\xaaq\x90c\xd9Ng\xd5\xe9\xac0\x96\x9fz\xf4\x8d\xe7\xc3\xb3Hp\xdfC\xc8\x04\xad<\x9e\xb1y\x94+\xf5\xc6$\x99\"\xf3\x93\xe8\xb4+o\xc5\x11\x7f\x05\x85\xa59\x1a6z\x84\xaa\xca\xc2\x95M\xa9\x9f\xa2X\xd1\xdc\xf6,,\x93EqJ\xf3\xb2\x97\xa1\x93.\x8a#\xaa\x0eb\xcem\xe4\xe8s\xb2.\x97\xeb\x02\x80?\x0d\xd9z\x9ap\xd8Y\xe2\xba^\x16\x85\xbat?\xeb*\x94+\n\x93\xf2\x89-\x99L\xfd\x85^\x07\xd3\xf5\xda\x11\x06B\x03\x0f#\xef\x187\xc2Y\x17\xc7x\x8f\xb1\x85\x0e\xb4\xa8-YF\xb9q\xaf}\xb1\x1e\x9b\x83\xfa\xda\xb2\xac3L\xf7$\xa0\xa7\xf7\\\xc6\x17\xb6\xe6\xa2\x03y\xcb\x8a\x9brg\x87(\n>\x92e\x0c\x9a\xf5\xda?\x0b\xe3K\\\x0b9cR\xb1\xdf\x08\xa9R\xf5d\xea\xd7p\x13\xa4\x03\x1bx\xa8B\xb1\xb54\x88T\xfb\x85|\xc0\x00O\x8d{*\xb29\xb4\xef\x9f\xb9\xed\x93\x8bF9\xdc\xb2N)\xd9|\x81\xf69\xf9\x02\xb0\x05]\x8bc?\x8f\xd2\xd2E\x9bG\xd6>!\x84\xe6\x03\x0f\x99m9\x81\x9d\x8e\xcf\xbb_Y&L\x16E\x05\xb3_9X0~\xe7\xd1\x83\x96Z\xf6\"hM\xb3%\x9f\xb4\x10\xe1\xb5\x07dU\x17by\xb7\xf5\x98\xe5\xcbT\xb6\xe6\xd1\nP=1aj^\xd1\xae\xbf\xcf\xe8I\x18\x8fbGP\xa9\xa1\x8eB\xe2\x93\xe1I\xa0sh\xbe.\xe5\xf6\xee\x15\xb3\xb4=B3\x95\xb3\x94I\x9a\xbb\x92|\xe2\xb2{\xf7\xba'Cy\xe52\x8f\x91\xb5\xedVc\x19\xa8F\xa2\xd9\x94\xd8\xc4\xa7\xf2\x00\xe0\x05\x9e'\xb1\x8fn\xa0-\x82N{\x9d\xd8\xa4\x95}e\xe9\xad>\xf2?\x96k8\x05O\xd7A\xdc\xd0}\x08.\xd6\x03\xf9\xd9\xbda\xe2c`\xfe\xe6\xf3t\xed\xf4g$Q\x8f\x1c\xbc`d\xf9\xb0\x89\xb5$\xa8\x83x\xd1\xa7\x18?7\xf1\xf9\x96\x8els\xc9'_T1\xc6'@9\xc7n:,@\x8dK#\xabxB\xa9\xbfq\x10\xaa-k\xc3T\xce\x9e\xf6Ik\x9d\x0b\xc2\xb3q&\x88\xdc3\xd0\x8e\xf9\x9dv\x1d\xff\xab~\xfao\xc7O\xa4\x8e\\y\xe1\xae\xd5\xa0\xbfG\xedJ\x0d\xfa\xfb\xeb1\xbd\xfa\xe9\x8b' \x9f2\x01\xd4\xb1.\xe89\xb6\xac.\xb7RO\x83r-\xb9\xb4B\x10\xba\xcd\xd9d\x86\xce&q\x9b\x989\x1b-\xa8\x7f\x94\x8d\xadR\xcb\xae\xdde\x9a\x1a\x12v1_\xa62Y\xa4\xec`\x1a\x98P\xebt\x1e\x9d'\xf3\xe5\xbc\xcc@\xfdd\x9e\x9c\xb2\x87\xf57\xf3\x84o+Z\x7f3\x8f\xce\xdfR\xb6\xe1\xe6\xc8\x0e\xbe\xaeg-\x80u\x08^f$\x92\xcd\xf3@\xd3t\xa8\xe4A5#\xe1\xd5\x8c%O\xbe\xb2d\xd5\xbch2A\x0fCQ\xfa\xa0^[I\x0d\x02\xc3q\xa1\xce\xa6l\xc1\xbe\xb2L\x04\x9b\x949e\xbdM\xe5\x17MyjxM\xc5'l\xc1\xf8\x84\xf1\xd8\xcd\xd5z\xa4k\x9f>r\xe6Mb\xb3\xc1\xa7\x8a\x13P\xffbM\xf32\xa2\x00\n\xb4\xe8\xd7\xeen\x14\xcf\x18\xf1 \xdd\x90\xb13\xca\x89\xe2\x96k\xca\xbb\x87\x82\x1d'\xb9dB\xf3\xec0\xdd\xe2\xcb\x94S\xcf\xae\x19\x8f^T\xc9Y\xb3\x8e=)W\xd9\x1a\xc7u\xa8\x06&\xac9\xd0\xa5\xbc\xda\x14\xbe\x82\xdb|\x8f\xd0D\xe5c\xa5\x1e\xa1\x11l\xcf\xddJ#\xe3\xf3=?I\x16\x8f\xb5\x1c\x1c\xb4\xfbU?\xd6\xc0\xee#\x1529\xf5\x0d\xb6e\x1a\xe6(W\x11\x9a\xfa\xdeQ\x96\xa5,\xe2\xe5\xab\xd7U\x06\xbe\x84\x8d\xdc1,\x1c\xf3R]\x8e\xc0wfM5\xbc2\xe8d^)H\xe3+\xb3\xa4\xcc+%\xf6\x11E\x1b\xd5\x88\x83\xabt\x13*\xc1\x0dZ#\x9e\xeb1\xbd\xfe/\x85\x92\x08\x9e\x86\xa8\x1d\x9f\xd0\x89\xc9\xc5\x9a6\xb9\xcc\xac\xfa\xc6\xb4v\xed\xack\x08JQ\xf4\x075\xc9\xbf\x8b\xb4H\x19uc4\xe5yt\xeegT\xe7\x1b\xd9\xdf(\xa8\x1aD\xb0\xe6\xfa\x86:1\x92c\xd8\x86\x04\xfa\x11\xd2k\x1a\xe9h\xf5mSZW\x159n\xb8{\x83\xfcV6\xc8\x0d;H\xc3\xc4\xcfa\x8b[[\x96)\xce\x12]\x86\xb1\xdeJF\xc6\x07\x93\xe1\x0c\x91+\xd9\xba\xcb\x05Qd\x03\x05^\xfb\x97B\x01\xbd\x0c\x1aT\x10\xed\x9e\xa6\x887>\xed\xb6\xb7~\xe0`\xe5K\xd2$\xe1b\xf2\xfa\xc5u\xbfn\xc8\xc0K\xd5^\xa3\x15/Q\xff\xdb\x9aZ\xbcT\xf5I\x85\xa4\xbcD\xed\x07\x9a\xe0\xbcT\xedQ\x85*\xbdD\xed&\x88\xecK\xd5\x9eW\x08\xdbzM\\\xe2\xaf\xa8\xb0\xa5\xfc\x86\xf6Z\x92\xafi*\xd0||\xd6\x84\x94\xd0\\\xb3\n\xd5\x13M.Um\xc1u\xeaT\x15\xbcF\xcbz\x82\x9b\xb4\xac$\xe8\xf7hYE\xd0\xef\xaf\xc7\xf4\xe6\xa7\x8d\xc1\xbc2s\x9b\x14\xb4T\x07j\x01\x0fDk-\xc0\x0d}\x89\xd6\xb2U\xe1mX\xc6\x8c\xf7mQ\xb2\xd3\x0f\xec\x03\xf5\xdd\xafL\xb5\xf2vh\x1b)\x8avs\x11[\x02\x9d[\x85\xbe}\xde)\x9b\xba\xb2G\xa8$es\xc3O\xd2\xc7\xc0\xd6<\xdc\xec\xc9\xd0\xbe\xbc\xdd\x1b\xf6\x82je\xba\x7f\xbb\xfd\xa0Z\xca>\x05\x86\x1c\xf5{\xffR\xb3\xa9>\xfc\x7f\x87\x1f& \xfd$S\x9fU\x9c|e>\xeb\x96\xb2\xad=^\xa937#.\x03\x7f\xb3\xa2\xf3h\x8c\xde`\x05\x9b,c\xb6\xedv#\xecL\xdb=\xca\xd6\x04\xc3~U4&n\xcb\xcdW\xc9\xf1H\xbf\x0b\xe2\xd9\xdb\x19\x7f\xac\x1b.\x8a|\x9b\x93\xa3hCE\xec\xb41\xca\xc6\xa8N\xbe0a\xaf\xd1\xe8&[\x93\x81j\xc2H\x80\x9dN\xe4hE\xd5\xbb/\x18](\xbct\x14\xa3~2\xca\xc6a\xa4m\xa2\xd7\xae\x12`\x03\xceM;\x0c<\xb1\xb3\xa1\xca\xfb\x9b\xddo\xfa\x08QR+\xb0\xca\x8f\xf7>\xf6\xc7\x84&\xdb\x84\x84\xca\xd1\xb5\xd5$d\xff\x165 \x1b\xa2P\xbf\xc1P\xe2\xd3Y\xff\x8a\x97\xd5\x8f7\xac9?Z\xe5\xcf#Y\x14\x9e\xbes\xef\xc1\n\x1be\xe3\xa2Hh\x1a\nt\xd8\xea \xaf\xd5o\xfa\xbd\x02I\xe4[\xfa\x9a^\xd7n\xd0iJ\xaas\xbc\xa1\xd1\xcc\xaa\xdbE\x85D\xd9\xe37\xee\xde\x8b${\x9a\xcc\x19A\xf7\x0b\xf0\xe4{{\xbd\xfe\xcd\xdd\xde\x8d\xdd\xbd\xabO\xfbW\x83\xfe\xb5`o\xaf\xdb\xdf\xdb\xff\x01\x8f(\x0f\xc8\xe5\xf1\xa7\"F\xb7X\xa7S=\xcdx'O\xf8q\xcb\xf6\xb5\x15\xb6<\xa3\xabg\xf4\x95V\x92\x97z]\xa5\x02V0iy\x93H\xb2]\x99\xcc\x99\xf7\n!T\x96\xc6\xa0\xb7\xe5\x966\x0c\x0c\xdc6\xe4\xc7h#+\xf5i\x15\xb5/\x82\x88\xf1|)\x80q\xa96H\xb9%s,\xb6J\x17H\xd0I\x9fW\xee\x99\xf6\xa8\xc4\xab\xd6\x8ap]\xb0y\x94\xa4\x9b\x82\x10`\x9e\xf8>v\x8e\x08\xd4\x8d\xb3\xb9\xb7\xa6\x8b(\xcf\xcf21i4\xaa\xf5\x16\xd1g>\x03o=+$\xdc.\x1d1\xa1\x05\xe7\xa1G\xf9\xce\xb6a|\xe5\x0c\xd0\xab\xfd}\xff\xee3\x9f\xfdR\x7fo\xff\xea\xb5\xeb\x1ee\xbb\xd6\x0fYe\x00N>\x1eg;\x00\x0c\x1a\xf9A\xa6\x0ez)\x94\xbb\xa4\x04\x86T\xa5\xc9\xe2\xf4j\x03@\xfa7\xf7\xba\xfd\xeb7\xba\xbdn\xdf\xc3B\xd7\x1b\n\xed\xf5z\xfd\xa079\xba\x11\xdc\xb8\x16\xed\x07\xbd^\xaf\xa7\xfe\xdc\x88\xf6X\xd0\xdb\x7f\xad\x17\xbc\xb6\xbf\x7f\xd5[S\x13s\xba\xa1\x92*\xd4\x97\"i(\x83\x01\xad\xaf\\\xa9\x15]&\x93\xa0NC\x1c\x95\x0b\xbc'>/\n/\x99\x80\x14j\\l$\x86$\xb9\xda\xcc\xfe\x8b,\x8f>\x01=*u>\xae_\xd4e\x08\xdbTny\xc8\x86\xf9\x1d] O\x96*\x86\xaf\xba\xfe\xb8y\x8a\xfdn\xb6\x14\xfa\xb8\xb2eBj`\xdc\xcbn\xeb\xddl\xa9\xec\xba\x16\";M&\xac5]\xa6i+_\xb08\x99&*\xba\x03\xba2\x9c\xe1\x1d\x111i-\"\x11\xcd\x99d\xa2\xab\x8d\xbf\xa6\x8d\xd19uP\xe1\xa9\xba\x91\x94\x7f!\x913\x13\xfdr\x1aN+g\xe6\xaa\x9a \x9d\x85\xb9 \x7f\x8d\x16\x08\x82\xaa\xa8\xc4m\x90\xb9\x96\xa3\xe9\x98\xc0\x1f\x10^&!\xf3g\xca'\xb1\xca\xea\xa3\x19\x99>\x1e\xc6\x0b\x9bVqE\xfc\x19\x19LB\x0dmG\x02\x98\x0f/\xd6Ay46\x1f\x8e\x8chfc\xfdL\xd6\xae\xbeWv5Ni5\x81\xae\xd2fS#\xa3\x04\xb2\xbf\xf0W\xa1ZF\xa4(\xfc\xd5\xc6\xd2\x97\x9a\xb8\x9c\x86Y\xa9f\x1e\xad\xc6\x83\xd3N\xc7?\x0eO-\x1158\xa1\xd7\xf4\xf1\xc7]\xcb\xab\xb5\x16\xea\x8c\x06$[0\x1e-\x92]\xddh\xa9 A\xd4*\x15!F\x17\x9e\x87>\n\x84_\xce3\xbe\xab\x0d\x8d\xdb']\x99\xbd\x91\x9c\xb3\x89\xbfO\xb4\x11\xee\x1e\xbdF\x02\xf4\x94\n\xbb;\x01ram\xb3\x106\n\xf0\xf2\xb65+D#J\x16I\x1fUqR,y\xec\xcb+\xd6\xb2j\xa7Oj\xdb\xa1\x00\xcf\x18\xad}\x97+\x7f\xba\x02\xc8\x16\xb4*\x85-\xf4f\xd7\xa0\x1b\xa3\x99c\xe1\x85\x17\xc3z\x83\xe4\x16\xc7\xb0\xf7\xd9(\x19;BK2.\xf7\xb2\x1b*.7\x14c\xf5`\xbfY\x8fu\xaa\xed\xdd\xd1\x017\x9e\xecK4\xc1\x97~D\x86\x90\x1d2?\xa1\x11 0\x1d)\x17\\\x84V\xd5p\x95\xc0\xf8\x04\xe4\xc7\x8b5\x8c\x12w\x13\x9bJE\xe5\x8b\xc1\x0d|`\xd5\x8d\x18\xbb\xa7W\xda\x7fZ\xd1\xa2\x16 \x9em\x98'\x08m\xbfz7\x9b\xb0;\xd2\xe7d C_\xde\xbau\x8d\xec\xca\x1dAe'\x94e@W\x1f/\xee\xfa2L(\x0f\x13*\xc2\x84faB\x9d\x0d\xc7)\x06,\xf4e\x11\xf6\xc8\xae\xefs\xf8\xbduk\xef\xb5\x82\xdf\xbe}\xfb\x1a)\xac\x0b5\x19\xf2/\xf9\xbeP\xef\xfb\xaf\x15\xe2\xf6\xed\xdb\xfdk\x84\xf2P\xec\xf8\x19d\x17=*\xc2l\x87\x15=\xea\xfbY(!En\xdf\xbe\xdd#W\xae\xee\xdd\xbcz\xf3\xfak{7\xaf\xaf\xada\xf4\xb9\xfe\xb7\x8b\x7f\xae\xc2\x9f\x95y4\xff<\xc7\xef\xe3\xf9j\\wb\xad\x85\xe1\xeb\xafF>\xf9l\xff\xba\xed\xac\xef\x9d{a\xc8\x862\xd8\xef\xc8\xe2\x06)\x8d\x93\xfb\xd7\xcd\x95\xea\xf5\x18\xfe\xd0\xd1\xb51\xf1\xaf5\xdc\x80\xf2e\xc8\xfd\xfd\xfe>\xf1\xdb}B\xd4\xd9\xde\x88u\x13\xea]y\xf5=\xdez\xb5uW\xed\xab\x98h\xa1\xff!\xc8\xbb\xf2\x1e\xef.\xf2\xd6\xc5{\xbc\x85\xae\xcb\xa6iv\x16\xb4f\xc9d\xc2x\xab\x9d\xccA\xf8\x8b\xb8\x1c\xb8\xefw#\x1e\xcf2\x11\xb4x\xc6\x19\xbe\xd9\x9d\xe7\xbb\xf6-\xd6\xed\xbc\x94\xd92\x9e\xedF\xd8\xd5\x00}x\xd9o\x1a_\xad\xdf\xe3\xefq\xdd\xe3'\xb1\xc8\xd2\xf4\x08\x90(JR\xd5\xed\xbc\xec\xf7\xe1!d\xef\x9e\xab\xfe\xeb\xe8\xceN\xd3\xd9\"\x8a\x13\xb9\nZ=\xd5\x13\x11q\x15j*h\x1dE\xf1\xc9\xb1\xc8\x96|\xb2\x1bgi&Z\xdd\xbd\xbc\x95&\x9cE\x82\x9a\xef\x9c<\xd5e\x15\x86d\xf7\x9f[\xcf\x8c%\xc73\x19\xb4\xfa\xd7\x16\xe7\x98q\xe5U\x90\xad\x05\xb3\xd7\x97^9\xca\xa4\xcc\xe6\xaf\xb42\xd1zEf\x8bW\xf0*\x843`\x00@\xab\xa5J\x05\xad^Y\xcf\x02\x03\x0e\xb7&\x19\x7fE\xb6\xe2\x19\xfaM{e\xa1#l\xbd\xa2\xbf3\xcfA+:\xca\xb3t)\x99\x81{ \xd4\xd5\xff\xc7\x80z\x96L\xe4\xecR\x98b\xd0f\x05\xd2\x94Me\x0d\xa6+\x0d\x1b\xa1\xe6\xa6\xf7\xe9\x01t\x171\xfc\x94\xed\x9e\xb7n\xb7\x1c\xac\xa5\xd5\xb7\xab\xca\xdb:\xf8\x8f\xd2,>\xc1>\xd5\x81\x13\xa8)P\x9e4\x9cf\x83\x19,\xc9\xa6&\x1b\xde\xacLg\xa6Y\xbc\xcc\x9b\xfb\xb9\xf9\xca~\x95\xe3:M\xf8\xf1\xb61\x96\x05\x1a\x87Y\xe2T\xf7\xba3\x04\xb7&\xd5iZ\xcf_m\xc9?\x0f\xb0\xbb\x0d\xe5\x9b\xf3\xcf\xb1\x9bq\x9a\xc4' ?\xde\xfc\xac\xf2Zuzs\"\xfe\x1dc\xf55\xd2\xbd\xb9\x95\xa4\xc9\xd9r~\xd4@\xd30\xdf\x10\xb5\x86F\xa2(R\x88\x90\x89 \x13\xbb\"\x9a$\xcb\xe0:QL\xb23\x9ef\xd1\xa4\x98\x88\xe8\xf8\x18{\xc4x\xfct\xb5`\xc54\x13s\xfcsGM\x05$\xef;\xef\x1e29\xcb&\x98|;\xfb|\x94&\xd0!||\x1a\x89c&\x0b\x15\xb7\x1aYC1c\xd1\x84\x89\xbcP\x94\xa6P\x9b\xa7\x02\x96H1\x03\xfc\x83?oE\xfc\xb8\x98\xc9y\xfaF&\x8a\x99\x94\x8b\xfb_Y&\xa7E\x02x\xb7X\xca\x87\xd9\x84\x15h\xf0+\x12\xb9*\x92\x1c\x90\xf7Q$\xa29\xa6\xb0_' \x9f\x14it\xc4\xd2\"\x85\xdaR\x00 \x8c\x0f\xc0\x93f\xd9\xa2\x00t\x9aG\xe28\xe1o\xaa\xae\xa8\x87/\x00\x85)\xe6\xd1yaO\xb7\x0b\\\xf3\xea/\xbae)\xe6j\xc4\xf3\x84\x17\xf6\x9c\xbd0\x97\x03\x8a\xf9R\xb2I\xc1a\xe6y\xc6c\xf8k\xa1\x92-\x18/\xb2\x85Dc/m\xdf^\xe0\x16x\x96\xa5\x00\x1f\x10`\xf3\x07\x1c\xb8X\xb1\xc8r Y\x82\xe1\xcc,D6MRV\x00w\xcdTG\xac\x15\x0d^\xd5\x17L<\xca\xd2$\x86\xc7\xb40fD\x85`x\xd68)D\x06_gg9\xfcAd\xcc#>9\xca\xce\x8b<\xce\x16L\xfd\x9d\x14V\xfc,r\x16\xcdS\x96\xe7\x85r4\x04\xeff\x11\x14L\xdeW\x7f\xf2\"O3Y\xe4X\xd7\x82\xa5)\x12\x88\"\x171\xfc\xbf\x97\xe1\x0fNg.bX)xzX\xe4\x92-\n\xa4\xc6E\xbe\x9c\xcf#\xb1*dt\x84N\xa1\n\xa9p\x06\x9d\xfd\x16x\xa1r\x99\xb3\x87\xd1BQ\x8c\x029@q6\x07\x1c8\x13\xd1\xa2\xc0\xb0\xf7\xb8\x10\xb0p\xc2q\xaa\x17\x82M\x93\xf3\xc2\xd8r\x14\x82\xe5\xd9R\xc4\xaa\xc6lZ\x9cfqt\xa4\xd6\x7f\xb4Hd\x94\xc2\x88\x149@\xab\x05L?\x89Nq\xf1f\xa2H8\x13\xb2H$\x9b?\x12\xd9\x02\x13O\x10f\x90B\x8c\x83\xc4\x83{\xf8\xf3\x98M\x8b\x8cC\x9b\xcbT\x02\xf0\xe2%b\xea\x92+8\xe2\xea\x02\n\xc7\xa5\xc6\xbd(\x8e\x97\xf3e\n\x18\xa2L\x8aNY\x11\xa5\xc91\x07\xca\xf6z\x943\xc4\x07$e\x8f\x99ZHQ\xba\x98EGL&q\x11\xcd\x17i\"\x97\x13VD\":J\xe27`\xc1F9\xd4_D\xc6k0R\"\xfb\x84]\x861>V\xc8QD\xef'\xf3\xa5\x9c\x15GQ\xce\xde\x00\xd4ARy\xa4\x9b~2K\xa6\x12\x9f\x1ei$<\x02\xb49b@\x84\x8e\x92(/\x8e\x80n\xa61\xae\xcd8Z\xe8q\xc5i\xb2\xc0?\x8f\"9{\x87'2\xb7O\x98x\xbcL5\x84\x1fp\xc9\xc4\"K\x91I4d)\x17Q\xb9zc:\x81\x0f\x8f\x19\x9f0\x81\x84Y\x91\xd4'x@\x81#49\x80j*c)\xf2L\x14\xf1y\x11\xaf\x8a PL\x96b\xcc\xd8b\xc2\x14\xc0&\xc9t\xba\xcc\xd9\xdd\x0c\xaf]\xc23\xe0\x03tJo/\x8bIr\x9a@%\x93l\x9e\xf0\xc8\x99\x9f\xc9R\x14\x93\xf3b\xb2*\xd8\xe4\x98!(X\xcaN\xd5\x90\x18\x87i\x7f\xdd\xca6\x05\x83\xff\xe7\xea|\xbd`\xe7@ \xa2\xf4\xb1\xc6\xd3\xdc\xda\xe2M\x934\xc5?\x07j\x9b\x84i\x84\x9b:\xba\xd1?\x8fY\xaeS\n\xcc\xd34\xcb&w\x11w1i\xbf\x06\xde\x8e\x088\xcd\xb8|#\x9a'\xe9\n\x93O`\x05\x98\xc4\x9d\xc9\x97\x97\xb9T\x8fR0\x19\xcftz\xa5?\xfc|$\x12\x80\x0e\xa4\xbf\xa0\xe6Z\x9bVME6/\xa6\xa2\x98\x9e\x17\xd3Uq\xdc/\x8e\xf7\x8a\xe3t\xb5\x98!\x02b\xea@$\x8cK\x04\xcb\x9b\x99H\xde\xcf\xb8\x8c\xd2\x8dW\x9fg\x02\xbd\xd7\xab\x17\xb0\xa6\x8e\x81\xf21.\x91\x9b#W29j\xcc z\x03\x1e\xcc\xa0\xd2;\x93\xd3/\xaa\x94\xe2\x95_,\x92 \xcb\x8eE\xb4\x98%q\x91\xcc\xa3cVbN\xc2\x8b\x84\xef!S\x11(\x8d\x9c\x14'\xfd\xe2d\xaf8\xd9/N\xae\x16'Lp\x96>\x8c\xa4H\xce\xf5\x03\xb4\xa8 ?d@%\xc0\x85\xb2\x84K\xe4BO\x16\x80\x12\x8a!%s\x96\x17J\xd1\xab\x01\x9b2\xa0\xfcF\xa0H\x01~ ?V\xd3\x85Qf\xf0\x89\xb3;\xfc8eE\x9a\x01\x18\xe6\x918a\xe2>\x9f\xe8\xd4\xc3\xc4\xa4\xd0A\x9fN\x97\xcc\xec\xc4\xa0\x82J\x1b\xc6\x96\x9f\xe0\x1f-\xaf\x99\x12\xf9\x89I\xc9\x19\xd3a\x03\n$\xb2|9?\x88et\xca\xf2\"\x9bNA6\xd3\xfbu\xe0exBU(\x82\x94\xe1\xd4\xe9\x1f\x85\xf3\x99\x92R\x8cl\x8b \x00\x8b bo3\x9e\xce\x92\xf8\x84\x03\xa7YD<\xcbY\xbfXD \x97\x07X\xf1\"\x923\x0dj\xcd1+\x9d\xd7y%R\xe8\x0c\xfdV\x1d\xdf\xdd?e\xdc<\x99\x9f;\xf2\x8b6\xf5\xaeM\xfd\x00\xf0\x8e\x9c\x89Sv\x07(l\xf9\x94/X,\x1f\xc3\xc0\x8a\x85\xc09:e\xaa\x0dQ\xa8\x0d/p\xe1/\xc2\x9fw\x0baP\xeb\x81\x92\xf6\xd41\xcd\xddli\xd3\xf7\x96\xc2\xb2\xe8\xfb\xe7\x92\xf1<\xc9xn\xb3\xde`\x11\xc8e\x90\xa1x\xa6\xe2&\x85\xc8$P+q^\x88U\x91\xc7\x11\xb0Pf\x18s\x89\xd0y\x8a\x0c]#\x18t}\x99F\xc2\x125\x93q\xdf\xd0\x9f|\x81\x95\xe0\xf5s-\xcfa\xb3\x07j\xcas9\xb9\xc7N\x135\xab\xb9d\xf3\x19\xfe=-r\x99\xc8x\xf64IA\x14\x90\xd9B\xa10\xa4\x0c\xc1\x81\xbd\xc8 \x93*$\xb7\x9d\xf8Jn9\xfb\xea\xa4\n~\xb2\x13\xa6\x7f\xeeE\xf9\x0c\xadz\x9c\xe7\xcct\x0b2\xdeJ8\x8b\xa3\x85\xf3\xf4\xe5,\xe1\xfa\xf1a\"\x01\xc5\xe6\x89)\xed\xf4+;ajU\xe4K1\x8db\xf6D\x81s\x05C\x03\xa1e\x19\x1d\xb3\x02\xb95n\x82r-\x9b|Q\xff\xbe[\x80\xc0~\x07\xf5\xfb\x98\xbc\xc7\xe2L\xedr\xf0\xb1\x9c\x0dx\xd2\x18,\xb3BZL]\xf6\x8b\xe5^\xb1\x84b\x95easJ\xc8,y\x12\xc3r\xd4\xbf\xaf'\x93\xc4\xa4\xd1G\x1c<\xc8\xfc\x11\x13\xf7\xe7\xc5\xe9\x9dR68}S\x13\xc5\xd3\x07\x0e\xf9;}\xe8\xae\xf3S5\xbaS\xf4%y\x7f:\x05\xf9\x07\xa4\x02\xe8\xca)\x13\xf2\xce\xe4\xf4]L\x18JZ\xa6\xdf-N\x13v\xf6zv\x8e\xbfZ\xde?M\xf2\xe4(I\x01\xca(\xae\xe5\xc5Y&&\x86\xda\x9d $o\xc8\x1e\xcf\x8bsM\xb0\xce\xfb\xc5\xf9^q~w\x16q\xceR\x1b\xce\xfc\x8e\xca\xe3P{\x18j\xddBI\x8c\x05\xee\xc3O\xc8|N\x08\x85\xe4z\xdd\xe4\x1e\xa3%T\xccRF\x8a\xa2\xdf\xef\xdb\x90\xb0\xfa\x90\xb1G:\x9d~\xbfW\xcf\xee\x134\x17(3\xf6\xc8\xad\x9b\xfd5:\xda\x8e\xc2lS\xf7\xa0\xd4\x0d\xdc\xdf'4\x0b\xb9\xffZOy\xe3\xf2\x0e\x0f\xe3L\xb0\xdd/\xe7\x87\xb0\x92\xd9\xe4\xf0\xd0\x1b\x17E\xe67\xbd\xc0K\x0c\xa5\x86#\xd9\xdeJ\xff\x86j\xe6\x06\xb4\xc2\xfd\xd7\xfa\xeewm\xd1\xe9\xb43\xdfu\x04\xabA\xf1Z;l\xb6NH|o\x92\x9cz\x84z\x91G/\x9a\xefL\xbd\xb6^\x93n\xb4&\x0d\x07\x8a\xa6[\xaf\xed\xb9\xfd\x80nh\xb3\x8a|\x16\xcd_l\xee\xb1\xbd\xe2\xebz\xbc{\xaf\xa9\x01_%\xbeg\x0e>\x9fF\xc7h\x82\xe4Y\xef%^\x18f\x0d\xa3\xb7\xc7\xefk\x9fT\xfa9\xcc6\x1d\xdeRN\xc5\xa0\x8ewl\xe8\xbdS\xc6\xaaW\x0eh \xf3\xede\x9azA\xdd\xc1\xb4\xcf\x1b\x1cR\x19\x8b\x82\x91\x1c\x97.n\xd6k\xdf\xdc\xe1\xf7\x19\xa1 !C\x1eD\xc3\xcc\x97$\xf0\x0e\x8c\xe1\x81/B\xc8i\x0e\x8f\xaf<\x0b26t\xc0\x10\x88\xf5K)\xc9\xb8\xdf\xbf~\x95h\xd7Q\x08\xe7\xfd=\x8dX\xd7\x08F\xfa\xca\x99\xa4\xb9\xf2\xa4&\x99x#\x13\xbe\xa7\x80\xdfz`\\\x9b\x92A\xa2\x9dwQ\xcf\xdc\xc5\xab,\xc7\x08\x1d\x9cR\xe5\xd5h\xe3s\xaa\x80\x17\xe8\xc3l\x80\x02\xfaS\xeb\xad\xebN\x8d\xf1X\x9f\xcaP\x05\xc1'\x94\x87R\xfb\\\xa6Y(u\x90\x06c]q\xdb\xc6\x9e\x1aj\x93\x1b}c \xbd\xbd\xb6{\xeb\xc0g\xa1\xf09\xcd\x08\xd5\xdf\xeeX\xcb\x05c\xa5\xc3t\xe9\xbe\x8a\xf9\xb3}U\xf6\x15\x96\xf6\xaf_S\xe0\xdb\xdf\x07\xf0A\x86\x8boU\xa4(\x8d\"`r\xf1\xd2\xd3\x94\xa6a\xd2\x9d\xa2[\xef\xb8tn\x18\x1b;\x89e\xc8G\xf1x |F\x97\xa4(r\xf8\xa5\xa9/\xe9\x92\xa0\xcb\xfa\x17\xf5o\xff\xaa\xea^\xff\xfaub\xbcmc?\xaf\xf6\xb7\xf7\x13\xfb\x08H\xe0cx\x86\x1ez\xc6B\x93\x0e4\xaa\xceI[\xf8\x11\xe5\xa4\xd3\x11~\x8e\xbf\xb1\x89\x97\x89\xa5\x06\xc6\x1d\xc5\xedt@\xb0H(G\xe9\xce\xce\x98t:\xfe\x7fH\xfc\x98rR\x14\xf6\x1bk\xae\x14\xbf\x14\x0e\xd3\x8c&\n\xd4\xbd\x1b\x00D\xee\xef\xedC7\xd5\xa0c$\x19t \xd9{\x84.\xc2\xb8\xf4\x04\xea\x11:\x0d\xdb\xfd\xc1h\x8cV6\x9d\x8e\xefqv.\xbd\x84\xfbI\xa83}B\x86~\x16F~\xe4'\x84\x90\x86P\x80hQ\x98\x91`\x1a\xb6{\x84*\xca 0\xf3bM\xe8\xb2(R_\xd0\x05N\x96\xa0\x0b\xda@\x9d\xd0\x8f\"q5\xdc\x17fq<2\xad\x04\x82\xbe\xfe\xce\xe7>\xf7\xee\xe1\x93;o\xdcy\xfc\xe0\xf0\xc1\xd3\xfb\x8f\xef<=x\xfc$\x98\xbe\xc4\xb4_\xddW\xd3~\xcdb\xe5M\x00U\xe2{\x0f\xee\x1f>z|\xf0\xf4\xc0\x03\x90\xd5\x87\xe6`D4,\xed\"m\xa7\x0e\xa6\x8d\x96x\nQ\x04:>E\x8f\x93A\x03\xd5\xaaX\xe4u:\xa5\xc3\xa7\xfa\xbba\xe5\xa9\xec\\P\xf9D\xf5n\x98\"i\xbe\x04\"{7*\xf4\xdf\xf7L`\x0e\x8f\xda\xa4v\\\xed]\xb6\xdeo\xea\xf5^\xe5\xbf\x1aFy\x05FE\x01,\x1f\xfb}x\xe8%\xfcb=l\xa0i\xed>E?\x8f\xc0)|\xd6l\xc8\xeaX\xa1\xd6\xa7\x8a:M\x10\xe8\x001\xfefGcBe\xc8]`\xa9K\xe7%\x0f\xda\x90\xbbhR\xcaP>'4\xf3\x13B\xe5\x90\x99:\x13\x12\xf0\xaem0L(_\xaf}\xa2 \xec%`\xdb7P\xd3L\xa6\xff\x9aFHX\xb2\xb9Z\xaai\x98W\x96h\x0c\xcfU\x8e\xbf4qgrkX\xb6P\x0ei\xb1\xa5i(F\x8b1\x9d\x84\xd3Ng\xea`s2\xf5'x\xb9d2J\xc7\xed0\\\x12\x00v\xe4OhJ\x97\x8e\x97Hx\x1d.\xd7X0\x1e\x17\x05\x94\x88\xe9\x82\xd0l\xb4\x18[\x87\xc03h1!Xj\x06\xd5%\xa3\xd9\xd8\xd68\xa3\xf8\xe8V:\x1bc\x91\xf5et\xfa\xaa\x02\xd05K\xa6\x01<\xc2\xf7\x96<\x8f\xb3\x05\xec\xc9r\xb4\xb2\xae9\x18\x1d(\xb2\x93\x8f\xa2q\xa7\x93t\xa7~N#zQ\xb7\x14V,-\xf3\xa10\xb0\xd6&zO.\xa0\x92\x11\x1b\x87\xe8Fa\xfbD\xba\xab\xa8\xfbHd\xf3$g\x97,\xbb\xab\xdb\xd8\x0bu\x9c\xe6fxG\x87\x08\xf4\x0e#G\xd9\x98\xf2\xd2A\xe5K1\x03\xb5\xc25+6\x02\xa3\"y74\xc5\xc3KA\x00\xc6\xc6\x0e\x99\xdd\x88\xc0\xa0%a\xd6\x9d\x0e\xa2NGv:m9\xca\xc7\x9d\x0e\xc7\x08X\x1b\xa0\xdd\xee\x0e~\xbd&\x97\xcew\x05\xd71\x9e)\xa0\xd0)\x1av\xf6h\x14^\x00K\xda\xac\xfbB\xc9%\xeddgg\xbd\xa6*\xcf-\x95\xe1\xfc\x0d\xa2\x91\x18\x87[:F\x1d\xe7}Q\x85/\xa9\x9bW{ \xf1\x94Db\x9bt\x80w\xa9a\xdbQ\x8dS\xc7\xabC\xb9X\x0f\x92\xc6\xbe\\:>\x8e\xa3X\xaf)\xf3\x13\xb2I\xb0\xf8e\xacOS\xe8\xab\xd7\xca}\xc3\xe5S_\x8a:\x11N\xbf\xcbv6\xf6\x03\x91\xf1B\xe9\xf3P\xf8\x11\x19%ctn\xec\xf3\xad\xd3m\x05\x15M\xebn()\x0566(\xa5\\WbJ\xbfw\x13\xe4\x14\xdc\xda\xd1)2\xf1\x9b\x84N\xc2\xa8\x9bf\xea&\x1b\x9d\x85\x18\x1a\xf1\xc1\x1c\x0f\xe7$\xa3\xf30RW\xef\xca\xac\xe30\x02\xfa\x10\xb3<\xa7\xab0\xea>dy\x1e\x1d3\xbd\xb3\xa7\xa7a\xd4\xbd\x97\xe4\x0b\x00)=\n{\xf4<\xbcX\xd3\xb3\xba\x17\xb2\xf3\xfa\x8dxF\xcc\n9\x1f\xb1\xf1@;0\x864\x95\x18G\xaa\xd1C\xbf3\xbdg\xea\x82\xf4A\xa5\xd8\x99\xcf\xba\x93HFdM\xefW^D\xddE\x96K\xddw\x9f\xedx\x1e\x9d(\xb2\x17g\xe9\x8ew\xe5\x8a\xb73\xe9\xce\xb2\\\x92\xf5`\xd6\xe9\xcc\x8b\xc2\x9fU*(\x8d\xbbGc\xca\xc3\xfe`\xc3\xad\x01\x1f\x10\xa9D\xcf\xd2H\x9b\x83pj\xe6\xfc|\xb4\xb3sT\xc1\\\xbfI\x9e\x19\xb2\xe0\x8d\xb2aR\xf5!*\xc9\x9a\n\xff\x88\xd0\xa35\x9dW:\xe8@pM==c^\x18\xa6\xfe1\x19V=t\x1c\xa33\xd9\xa7I|\xe2\x9f@\x13\xeb\xe0\xb4\xd39\xed\xf2\xec\xacV\x10\xf3L\x99U\xa7\xd3\x9e\x0e\xfd$\xf4\x95\x91\xfa\x8at\x01\xf3\xf7h\x86\xbf\xfdn\xc6\xe7\n\xbe\xe1\x01\x15a\xec'.\xcciB\xfb\x84\x04\xed\xa8\x1bM&\xa8N~+\xc9%\xe3L\x14E \x05\xeba\xdd\xf9\xb2(\xa2\xae2\xe7P'S9H\xc0\xf7 |\x96\xa4,\xf0\xc20,\xa7r(B/\xe3\x82E\x93U.#\xc9\x94=\x91\x97\xf0\xd6\xc27!QI\xe5N\xc8\xb2\x12 \xcd)E\xba\x9b\x15U.\xa3V\xa2\x88\xa9\x8d\xa4B\xca\x8a0\x9b3\xa9Ck i\x8f\xac\x03_\x84\xf7\xe9&$|O\x03\xd0\xa3\x07\xb4\xdd'UQ>g2\x98Q\\\x9d\xc1\xfc2\x82\xb5\xd7s\xe9\xd2\x15?Y\xcc2\xce\x8ad\x91M\x8ad\x11MH\xf7U\xc0)\xa6L\xc2\xae$J\xb9%.\x11\xb76\x84]\x1e\x9d&\xc7j\xd3\x8d\xf7\xbf\xef\x1c\xa3\x9c[\x14\x9e\xf7bJzS\x11\xd2\x1b[Y9R\x0cd\x9c\xb0\x9f\xc5\x90\x07\x95K7\xac\xbc\x0f\xa08\x04H*\xcc\xf1\x19\xc7\xbb\x82\xe5Yz\x8aW\xde(\x07\xec@\xb1\xa2\xda\xb7\xa68\x1e0c\xa5\x8e\xe5\x82 \x91\x89\xa0\xdd\xd7\"\x0fF\xb8\xab9\x017e\x8cX\xc4.\x97\xcb\xaek\xe5\x9e\xd1Bi\xb9u\xff\xba\xa2\xe5\xfd=\x94\\Gc\xa4$4n\x90(\xfaa\xc8(\x0f\xf7\xe0'\x0e\xf7\xe1g\x19^\x85\x9fEx\x1d~\xa6\xe1\xb50dE\xb1\xd8\xd0\x83\x8289\xa7\xc7%5[\xd1Sz\x14&\xfe\x84\xd0\xf30\x03\xbar\x16\n\x1f\n\xed\x13z\x12F\xfe\xb9\xb9\x81A\x0f\xc2\x1e\xbd\x1f\x1e\x17EN\x0fC9\xbc\xefO\xe8 8&zFd\x1f\x9c\xdc>\x18\x1c\xec\xec\x804\xebO\x8b\xe2\x00\x04\xb1s\xd8\x9e\x9f\x86g\xfe*<\x1f\x1d\x8c\xe9\x01=\"\x94\x11(#\xc9\xe1\xe8`\x1c\x9e\x96\x97\x1fI~\x96h\xf8\xc6Q\xceZ\xfb\x81\x96\x06z\x03|\xbe\xa6\x9f[+\xf5|\xdd<\x1f\xa8\xe7\xbd U\x9b\x8bC\xba\xd2\xce\xf1\x93\xa9\xbf,e\n]|1\xdc\xed\x07qQ,\x87\xcb\xe0p\xbdv0\xf1B\xdf\x90 b\xbfG\xe8\x0f9\x88!\xe8\x10Bo\xc5\x02\x9b\xa2\x9c\x9d\x95\xd1\x15\xf8\x10k\x0c8\xf1m\x18\xd5\xcbF\xdc\xbf\xd9\xdb&/\xeb5\xaf\xaf\xeb;\x8e\x9e\x9f\xceXK\x99\x0c\xb5&\x19\xcb\xf9+\xb2\xa5\xac\xddZ\x82\x1d/S\xd8\xf7\xda\x10u\x00\xb8K\x04}W\\\xc6\xa8\x16/\x90\xde\xaft\xaf\xa0\xec\xe9]\xe9^\xf1Fl\xec\xdb \x00\xbc\xa2\x8b\x95 \x92\xb6\xfbt\xb3\x1c\xaaf\x0d\xf2]\xd6\xa3~\x858\xf6\xfbV\xed\xd7\x9d\"e\xb8\xb6\xa7\x95Q7\xaf\xeb\xbd\xec\x9c\xc9\x087\xb1=\xba0\xfb\xfc$\xd7\x87\xa1G)\xab\xb8\xd06\xabhM\xa7U\xc1\xc8g46Z\xca\x0buC\xed\xc1\xbd\xc0;\xf0vZ;;Kz\xc6\xa2\x93{\x91\x8c\x82\x8b5\xec@\xe8$tV\xca\xe3\xfb\xff\xbfw\x1e<\xbe\x7f\x0f(\xe44\xca\xe5\xf7\xb3U\xb0A\xc8\xdbY\xe9\xe7{C}\x0f\xd2NSXE\xef\x89\x17x\x8f<\xb2\x83\xbb\xedv\x02\xbd$\xaa\xba\x85S\xdd\x1b\x1e\xbe\x96\xe6\xf9\xbe7\x00N`o\xb4\x8f\xe2q\xd7\x8c cm}\xc1\x0cg\xb3\x9b[\xdah\xf7*M\xb4\xfb\x9b-\x18\x18\xadi\xc6\xdf\x10\x8c\xbd\xdf\x18\xb6=\xedt&]\x03\xb1Ng\x81+W\xb7\xda\xe9@\xa5\x94\xad\xd7\x031\x8aq\xcf| \xee\x0edw\x1a6\x1cuT\xb6\xb1\xdfs\xe5\xd5\xefQC\xdfU\xaeU\xbf\xc7\x8fI\xebI\xc2'\x82\xb5\x9edb\xb6\xcc\xbf\xe7\xfb\xd2$f'\xe3\x90c\xa8\x8e\x9e\xf2|\xf3\xda\x8d\x9b^\xfb\xd2V\xa5\x8a\xbb\xd1t\xaa)a\xab@L\x14\x0d\xaf\x16\x1f^\x94\x07\xa90\xdc \x9b\x1e\xcf\x92/\x9f\xa4s\x9e-\xbe\"r\xe9\xe9\xd8\x1e\x9e\xd7t\xa7\x14Z\x191\x8c$Ch\xf3\xf7%\xb4P?^\x81\xbd\x7f\xb1\xa6\xc2\xe9ZC\xe4\x95\xb5O\x86\x95ojK\xda\x1e\x8a\xd0\x9c\xa6! \x19\xd5Q\xb6\xeb\x9eA\xf0P\xc4\x14_\x82\xc4b\xbc\x068;\xb9xLHf\xd4\x96K\xe0\x8d\xe9h9\x0e\xf9h9FD\x10\xe4\x02$c^\x86\xb6Z\x84\xbd\xc1\xe2\x96me\x01R\x91\xa9 \x1f-\xc6\xaa\x0eHA5\xf8K\xac\xab\x95\xba\xeaY\xb3\xfd\xf0b]\x866+Q\xb9r\x0f\xb7\x1a\xb9A\xcf\xe0F@\x1dn\"0\xbc\xb4:l\xdf\x1c\xa0\xeek\x1e\xb5w\xdd(]\xaf_\xd5\x07&\xd7\xafi]\xc4\xf5\xd7\x1c\x0f^1\xee\xb3\xd4\xd9]l\xbch\xe4\x84\xea,\xf7J\xfc\xd2\xd2\xe3\x85/ )O\xb6\\T\xd9\x0c\xda%J\xf7\xe4|$\xc64 \xa5\xba\xcb\xccF\xd9x\xb0\xf0\x132\x84T\xb8\xf4\xa3\xa2\xb8X\xd3\xc4\x08\xacm\x0cS\xe5\xe3\xcb\xa4\xc9A\xfe\xc2\xdfr\x87\xdb\xb0\xaaN\xa7]\x0f\xda\xd1\xe9\xb4\xfd\xca\xa1\x82\n`\xb8\x99\x7f/\x92\x15\x92\x14;\xe0 /0nOp\xf1\xe5<\xe3\x81\xa0\xabh\x9e\x06\x19\x95\xec\\\x06 =Jx$VA\xb4\xa6z\xa7\x13\\\xe0n8\xa7\xe8\xef)\xa5\xc6\"2\xc0\xb8\x94\xcc\xc6\"\x0b.\xe2D\xa0\xf1R\x80*\xb1\x97\x9c\xfc\xab=}\xeeW\x11\xdft\x17\xab\x88\xea\x88E\xa2\x9bGS\xf6V\x16M\x00\xd1\xec\x1aV\x14\xbe\x02 $\xf3C\x16d>\xa3\xac\xab\xb7\xc1\x80\x9bJ4H\xa6\xab\x0dwU\xa5NpS\x80\xe0C\x83\x1a\x01'E\xb17\xa8t\xe8\xder\xbe\xf0\x19\xbdH\xf8\x84q\x19$\xebO\xd6\xb7\x97\x05\xde\xfek.\xcc\x80\x8d\x08\xff\"\xe1:\x90*\xf7\xfb\xfbW\xc9x\xdd\xb0\xfd\xfeD\xb5\xdd\xb8A\xc64\x99/\xd2$N$d\xec]}\x8dP\xf8\xb9\xa1~n\xe2\xcf\xb5^s\x9b\xb5p\xb6S&\xe3Y\x98\xfbL\xa5H\xa7\x03\xe9\xc7,\x9a\x00\x13\x7f\"\x05\x8b\xe6\x84*\xff/e\x0e~\xf0\x85J\x16\xba\x11:\xca\x84\xbc\xab\xeed\xa4L`\xa9;\xd5<(v\x94fGw\x9d\x0d\xbf\xd6\xff\xc2P_O\xb3#\x7fd]$\xbc\xbe\x9cN\x99\xf0\xfbd\xdc\xf8]\xcf\x91\xc1\xd5\xae\xc9.k\xe1W\x83#\x18n\xdfB\xf6\xca\xba_|\xf8\xd6\x9bR.\xf4\xad\x18r\xa1\"\xef\xd4\xf3U\xbf\xba\xd9\x82q\xdf\xfb\xdc\xfd\xa7\x1ee\xdd/\xde\xcb\xe6Q\xc2u\x89\xa1w\xc5\x0b\xd0\x07[^s\xc2\xe6\xe0\x9c\xf2H\xb5V\xbbU\xf5P\xc6\xee\xb1]\xce|\xe7P\x81\xd4\x85Rw3\xd2\x15,_d\xd9(\x06\x9f\x9e\x1e)W\xf2\x00\xa2\xcf\xbf\xae\xbd\xee\xeby\xd5'\xa8*j\xae\x7f\xad\xc9\xfc\xc3uN\x8ba\xbc\xd5d\x00m\xb8\xa6\x15D}\xad \xda\x7f\x0dX\xacr\xc3\xb4z\"#\xc9\xf2\xf0\xe2\x9d\xb7\x9f\xdc\x7f\xfbi\xd0\xa3\x07\x8f\xee\xbf}\xff^\xd0\xa7o\xde\xbfs\xef\xfe\xe3'\x87\x8f\xef\xdf\xbd\xff\xe0\xf3\xf7\xef\x05{\xf4\xad\x83;\xf7\x1e\xbc\xfd\xb9`\x9f\xde;x\xfb~puM\xe3Pv\x1f\xf08\x9b'\xfcXk[K\xb1XRN#\x9a\xaa\xbe\xc4*zw2\xf5s\xbb\xfau\x08YB\xe3\xee\xe1<\x9b\xb00\xa2qW_P\x02\xa16\xee\x8a\xe8\xecM\xfd<\x1a\xd3\xb8+E\x94\xa4\xee\xdb\xa7&\x03_g\xdc\xf7\x18\x9fx\x953$V*\xab\xdd\xec\xb8\xcb\xe6 }\xc6i\x86N\xe3\xd1\x93\x19\xf5p\xbe@\xb4\x8cp}\xc7\xddC\xccy\xac\xf1?\xe44\xee.E\x1ar\xf8K\xe3n.#\xb9\xccA\xb8\x0e\xb9~\xb0\xb9\x06\"\xe6\xc5Sv.)7#l\x12z\x81\xfdY\x10\x8cdWfoegL\xdc\x8dr\xe6\x93q\xc8* Qg\x05\x92b\xbc-\x9a\xd4H\xa8\x02\xfb\x12\xc9N\x95\x92\xfa\x17\xe8l\xabi\x8b \x85\xf5\x11\xaa\xeb\x92\n0,\xee\x1eNX.E\xb6b\x93!\xf7I`\xccd\x90\x810B\x86\x123\x0f\x05\xcb\x97s\xf6\x06\xd2}\x89\xb6J\x08\xe2\xca\x99\xa0:#2j\xed\x141\xc0\xd6^Z\xe0\xe0\xf10E\xaa_\xe9m\xbd\xb4\x9aI\xd4\xa3z\x18\xcf\x96\xb8\xe4\x0c)\x12\xef\x1ee\x93Uw\x91,\xd8\xd3\xcc_\xc2\x92\x92\xf5\x0d\xc7\x8b\xbbUo\xa8r.\xb9VB\xbbn\xe9\x98\xc9\xc78O>\x19\xb4-]c>\xb9X\xe0\xd2\xf3IW\xce\x18\xafz\xfe\x02\x9a\xec\xb6\xa9\x9dQb\xc8>=\x9a\xcdN\xe2\xf8\\\x90\x0d*S#\xb5/dBQ\xfbL>\xbd\xa1\xfbJ?\xaa\xd7\xc9\xf9L\x84\x12>[dy\xd8\xd3\xcb\xa4\xe4\x1c\xef<~\xab\xba\\\xe4\xb6\xe5\"\xdd\xe5\x82\x9b\xd2;ij\x16\xa0\xc6}\xbf\x8c\x0c)\x86\xef\xf1+[\xb6\x90\x8a\xdb\xb12\x00\xed\xe8K\xc1x\x87\x04\xef\xe5\xaf\xfa\xddW\xc9\x15\xe5\xf2\xcf\xec\x8d\xe4\xa8?\xae.\xb9\x81\x973\xb9\x1bg\xd9I\xc2<\xd4V\x96\x9a\xcbr\x9d\xa2!\xb0\xfb\x18\x8e\xc6\x84\xba\x19z\xa9\x8e\xf6\xc6\xc4\xd98\xb8%\x86\xee\xc3N\xe8\xd1\x96\xb7\x03\xe5\x83J\xbd\x90\xd3D\x03F\xfd1\xc5\xdaa~a\x0ebu\x8f7\xf4\xcew\x979\x13\xbbF\xa1A\xdb\xc9&\xfb\xc1\xe1OC\xb7\xde\x917O\xe6l\x17\xf8\xad\x87!=\xa6\xaa\xd4$\x9c\x1a`\x0e\xde\xcb_5\xcd\xf8\xa3/\x0d\xc6\xc4\x1f\x14\x9f\x01\x98N\x10\x1c\xb6\x0f\x93\x0d\xb0\x92u\xf9\xba(\xdc\xb2\xdeRNwox \x1c\x0f\"?\xa6%\xb3\x80a\x95\xf2\xc2!,!W\x03\xa3T,*\xec\xbdC\x81\x06\xac\xd3\xf17r\x95\xbbF\xecH\xb5\xd6\x8c\x7f\xf1\xcd\xc7\x8fDv,X\x9e7WO\x01\x9f\x00\xd95w\x1e\x98\xf3\x06\xc5\xc3\xd4\xa9\x83\x87\xbb\xac\xd3#\x1dx\x01\x17q\xc9o\xdba\x98v\x81\x85\x92#\xc1\xa2\x13%\x04\"\xa1\xce\x0c\xef\xf7\xcb\x85\xf3z6Y\x91\xae\xccT\xbeKp\xb4\xce\x0b\xa5\xcf\x0b\xe6\xaeyN\xc8\x00\xeb^\xdb\xdex\x81j\xc6\x91\xe5\xd8\xb9\xd4\xb5\xe1Q\x96\xe2\xc1\xd5\xae\xebZ\xa0%sL\xcdp\x85[ C;8\xf3u6*\x97jH\x87\x86\xedf\x8aKMI\xa47\x1f\x89=\"R\xd1a\xcc3\x06\x89\x89F\xf98\xdc\xbbv\xad\x93\xb8\x96\xf09la\xd4Q\xb9>\xa3\xd1\x8f uZ\x1a\xa8>Y\xf3\xdb\xb5\x027\x82\xc4\x15\xdd\xb6\xceOQ\xb4Kp\xe9\xc9r!H\xab@gg\xadw\x12.o\x18\xefkf\x12T\x8b\xdb\x04Gh\xbdR\xe9FW\xb4\xdcU\x14m\xae;\xf1\xb1\xda\xb5B\xeeK\xb7\xa4[Qr\x9b\xc2\xcb\x87O\x94\xf0\xa0x\xda\x00d\xadE\xc3:\x89\xbb\xea\x9eT\xf7h%\xd9[.\xc2t:\xfee\xbd\xb6\x1f*\xdf|\x1a\x9b\xd4 6NbC\xcd\xb8z3\xbc6\x1fV\x04>Wz\x88q\x8cwrw\xbf\xc7\xc9Z\xadag\xfc\xa1\x99\xf4N\xc7\x01\x19\xeecpat:\x95zkBy\xff*l\x8a\xfb\xd7HW\xefw\xb6\xc9\xe9\xd29\xfe\x00a\xfc\x06!]\xbd\xe7\x05fg\xa8\x1d>\x18\xb1\x0d\n^\xdd\x83]\xc2\xbd\xe5\"e\xe7 \xcd\xdf\x80G{\xe7\x0eK\\\x85\xacGQ\x9e?U\xd7\xba\xd0\xa4\xa7\xc9\xf7ZE-\xe0\x8ay\xd6Q?\xf7\xafUN\xec\x8fT\x98(u\xa2\xb4\xdf#\x83#g\x0b\x0f\xc0;\x1d\xc0\x8b\x9b\xa4\x8b\xf6\x08\xf7\xe7\x89\x94L\xe8\xe8cU\xf1\xd6\xa8\xc2\xba\xa96Z@\x15\xb3^\xa0\xea\x80\xeajO\x19\"]\xbbi\xc1\xb9\x0ce\xb7\xc4\x96\xca\xc1\x94r\x14k\x0f\xb0b\xc1\"\xc9|\xee_\xbdA\xc8`\xd1M\xf8\x8c\x89\x04\xa1\xbd\xdf7\x1e\xb6\xb9\xbfw\x1dm\x99\xf4\xa9\xb3\xb6\xd0\x9c\xb0\xa3\xe5q\x9a\x1d\x0f\xcb$\xaa\x86p\x87\x18l\xb49\xa3s\x84q\x8f\xd0c\xecw\xdfm\xd0?\xa2\xa9jo\x15\x8e\x8c\xe0\xa4\xb7\x1b\xd4\xd3\xb2\x95G\xbdE\xb4\xc4\x1c\xc5\x9f\xbcq\xb9 >\xd5F\x06!F\xfc\xd5\n\x1c\xe9h\x96\xfc$L\x8a\x02\xb1\x81\x0c\x90\xcb)\xed\xe2C \xe4\xed6s\x1e\xa90\x8c\xd0)R{\x86m*\xc3%\x01\x13{`\xf3\xd5(\xb2\x90ug\xc9\xf1\xec\x0b\x91d\xe2a$Nh\x14\x96\xa5\xdf\xac\xbc\xc9\xebU\x0f\xfb\xd7\x83\xfe\xf5\xfd\x1bWU7+\xf5\x84YQ\x80@\x95\x0d\xb3\x00z\x19\xa9\xc7\x88\x0c\xa3 \xa7\x0d\xe5\x9d\xb87\x9bo\x89\xfaB\xef\xde\x81\xca\xccU\x8eB\xb1\xb0\xa7\x9e`#\x90+9\xa0|\xc6\xfb\xa1\xa6\xc44\xcd\xce\x12~\xec\x94a|\xc2&a\xbbo\x9f\x14\x9e\x97Y\x00\x0c\xf8\xc4<\xe7+\x1e\x87m]\x1fglb\x97\xb7\xadD\xd5\xb0\x91o\xc0\xaa,{\xdc:\x15\x9a<\x89gl\xb2L\x9d\xb6\xad\xb0\xee\xe4\xa0\"\xf8>W^IBV\xcf)\n\x10\xb7nx\xaaxt\x16%\xf2\x9e\x88\x12n \xa0\x87\xf30\x13\xcc\xa94\xce&\x00X\x07*\xba~%T\xd9\xe7N\xc7\x9f\xa1\x15\x1c\xac\x8c}\xa4r ?\xbe\xa7\xbe'\xb5\xda\xd8Y\x0bD(\xf3-\xa9U\xed\xbc)\xf5YG\xfa\xdc\xaf\\\x04\xb4\x8d\x08\xe1\xea^\x8fl\x84hh\xe3\x08]/kq\xd0\xa5_\xf0\x12\x97\x1bZaU\xa6\x00\xa3\xfbTL$\x9c\xab\x03P\xc8\x910\xa3\x89^\x12\x846\x16\xd7\x93d\xbf\xd0\xcf\xa1}C\x08MK\xc6\xe2\x0c\xf6\\\x11oG\xb9\x83\xcb\xaf:\x0cm}\x1d\xca\xa1\x1f\xb9\xc8X\xa5\xc0(\xed .k\xd0(\xbf\xe7z.\xecf\xc8d@Q\x9f\x0cx\x19\xea\x03\xba\xaf\x17\x98\xb9*C\xcd\xcd\x9a\x9dPV\x96}`\xe3g\xac\xa5Y@=z\x80A\xba\x19\x8d\x08 \xfc\xac(\xfc\xa4\xd9F\x057\x94I\xae\xd9\xb6 E!\xdc\xc9]\x16\xc5\x86\xe6^\x16EyG\xb3(X\x85\xbe\xf9J\xccn\x08\x02\xce3\xbe\xab\xaa\xba\xa2F\xd6BY\xcd\xd3\x0e\xcfE\xa9O\xf5#\x0ck\x92\x0cYuO\x9c\x90 \xaa4&;\x1d{\xdf\xa87\xdc\xbb-\xabt\x07\x19pU&n\x80\x0e\xbb\x1d\xde\xd8\xbfq\xe3z\xef\xc6\x90\x99T\xe0\xb3\xdd]\xca\x8a\x90\xdd\xbe}\xbbo\x12{&q\xd5$n\xd82\xd7)\xdb\xd9!\x94\xad\x91V\xb0[%\xf9\xc5P=8\xdc\xb2\xab\xb2&\xe6\xf6h\x8f84\xf1\xc0U\xca\xd6\xd0\xbf\xfei\x9f\xca\xbax\\\x14\xfe\xc4\xf7 \xd3\xe4x\xd4\x02\x95l\x96G\xd9[Q\xd8\xac<\x05\xbaO\x19 \xee\xe3\x9d\x04\xdb1x\xbc\xd0u\xb7L\xbf<4\x9fG\xba\xecd\xdd\xa9\x84`8\xd4\xc4\xc0\x15\x96\x81CW\x85\xe7\x1eu\xda\x7f\x02K\xcem\xfcI\xcd\xe0\xc8\x82x\xd0\xb6\xf5 \xaf\xb0\xe8\xd3\x96\x86W\x99\xa2\xb76Qd\xe2{\xf3hu\xc4\x00\x1a\xd0\x0d\x1cW\xab\xe79\xcc\x85r\x87\x9f\x92\x01q\x9a\xae\x8d\xa0_v\xf7\xa9\x86\x95\x81I\x0bF&\x93\xf8\xa4\xa1\x81\xf2\xab/\xd7\x00\xa5\xe6R\xedf\x1a>$\xea\xd0yc\xabS\xdd\xa6\x94\xd3\x83{g59\xb4\n(\x0b\xc0\x86N\xdd\xb9\x04\x1fa:&\xbe\x07U\xb9X6pj\xd7\xdaW]1\x19\x90AY\xf5\xdd\n\xb1p\xc9\xc4\x10>\x83\xa5R\xa1\xf3\x96\x10h1,h\x83\xe0q\xbb\xfc\xcawd\xf2\x92l\x18\x03\xb7\x00\xe9\xaa\xc9\xddJ\\J\x99\xc0\x84\x0b\xb4\xca\xd7\xf2M\x8a\xa1=HP\xf5\x1daMH\x07\x0c\x90\xadF\xae\x86\xbe\x08\xdd\\\xa5\xc6\xebQ\x9c\x0e\x9b\xddP\x84\x81\x98\x162\xec\xfdF\xa5\xd2B\x83\x0f\x1b\x18\xa9\xfe\x84\x8a\xb0O\xb3\x90\xe3\xa7\x03\xb6\x1b\x9a0\x12\xea\xd2?\x0f9.\xbeA\xa9\xb3\x86\x82\xb0\x7f\xbamt\xcdC\x93\x08\xd0^8\n\xc3\xd0\xbe\xcav\xc2$\x80?\xee\xa0`B}\xb6\x1bF\x84\\TJ\xfb;;\x82\xaa\x06\x87\xaa{\xba\xf9@?\xc9\xae\x8c\x92\x14w\xcb(\xdb\xa9\"Tu\xca6\x12Y\x0d\xfe\xce\x8e\xb0\x11't#\xbb\xa1\xa0\xd9\x1a\x01\xd1\x18!1\xeeFi\x9a\xc5\xef\xf0<\x9a2\xbc\x02o \x95\x85\xfd\x81P \x8e\xb3\x05\x86\x08a\xbb\xa1p\x81\xae\x80&BQ\x05\x9ax!\xd0\x12]%5b\xe9.\xa3=\x1a]\x0e\xab\x8c\x8a\n\xac\xc4\x8ba%\xa8\xd8\x0e\xabl\x13V\x19\xe5\nVV\xc2\xc2G\x8d\xee\xb4\xdc\xf9R\xae6{\x8e\xcd\xcc\x83K\x08\x04\xee\x9aU#\xb7{\x1bA\x02_\xf1\x18\xb7\x8c\xc8'\x9e\xb14\xce8\xee5\xd9|!W-\xb5Sz\x05\x88J\xb9WC\xf6a\xb7\xca\x0e\xe3xD%\xadp\xadG\xbe\xb9\x85\xe4|\xacloT\xbf\x8a\xc2g\x15EUO\xeb\xfc\xab,VYM\xb85?\xae\xb3\xa4\x1e\x15a\x19-\xe5\x96@Cc\xb4_\xe6cX\xbb\xa5\xf9\x93J\xec\xf6\xd7\xae '*\xc7u%\xff\xf0`-\xb1\x10\xcd\x00\x1fp\xe93\xda\xef\xa9I\x90MR\"\xe5!\xc2\x1d\xc7\x88R\xd0\xa6\x02M\xe1\x1b\xec6j\xbb\x9dr\xb6BY\xdf\xc7\x19\x85\x88\x19\x86\xee^\xd0\xaa\x0b\x1b\xaa\x06j\xca\xd3f\xf9\xef\x81R\xdf\x04\x07\xc6?\x8c\x8e\x0b\xa7VB\xa8\x04Ib\xcb\x93\x06.\xd1\xe9U\x17w\xc3\xea\xa0\x06ew!\xbb\x94\\hF\xa8\xefV\x07C4\xab\xb2.+\x90Ng\xe2{\xeam+ey\xde\x92\xb3\x88\xb7\xce\xe0\xfd<\x12'\x1e\xcdp\xc3\xa0{\x0bUi\xa6:\xd4pJ\xf8q+C\x9d\x01\xec\x0d3\x98\x85 S\"\xc8$\xc3^y\x84\xcar#n\xc42\x14\x10+\x83\xde\x94 ])\xbd.\xf6\x12[O\x9f\xba\x92\x05\x80\x18\xa3\x13\x1a?(\x18\x0d\xeevo\xa8\xb82\xfa\xe6 \xc3\x06i\x95\x85=\x12\x94\xa4\x83m\xf6N\x83\xa0\xa9\x9f\xbc\xad\xf1N\xcbfz\x02U\x1f\xda\xe8\x8cE\x1a\xa5\xaf\xd9\xea\x0b\x8c\xf1\xe8r\xeb\x9b\xa3\xa67\nQ\xe7\xe8\xa3\xa8G\xdb\x89#\x82\x17\x05\xeb\x1e\x96vg\xa8\xa0i\xd7\xb3p\xa1\xe8\xe2\x0b\x9fT\x8c\xf55\xe8\x91\xfd\xe0\xd9\xc1\xc4\x07tp\x14\x97\x0e\xffKI\xc0\xbb\x19\x8f\x99\xeem\n\x9fd\xdc\x1d\xb2>\x0bl\xd8\x0d;\x9a\x88-\xfc\\c\xdd\x01\xbf\xa7 \xef\xee5H\xe5 \xa3\x83\xda\xa7\xdd]M%\xdc\x02\xb9\xcf\xa8\x82\x1cA\xb2aN\x93\xda=\xdc\xa3\x90\xf5\xda\xe7d\xa0\xbaogZ\x9fN\xea\x0b43HXX\xcd}\xa9\x81\xa5j\xa5\xf0\x9a\"\xd23\xab--\n`\xf9~\x1f\x85\xacr\xa5t:fM\xe2\xbd^\xf7\xd5\xed~\xa7\xb3\x0b\x95<\xf6\xedr\x05\xce\xd4\x9e*\xf2=\x8d\xd2\x9c\xb5\xb0\xfe\x96\xb5\x1bh\xe93K^\xd7\x9d\xb8\x00\xbb\xe4\xe5\xce\x0e\xf4\xbe\x877\xab\xa1\xa6\nR\x1c\xdb\x81j,\x97\x84\x1e\xf9\x97\xaf\x02\x80?B\\e\xa1\xe3\xc4\n\xc1\x94N\x03+\xb4\x11\xb8d-\x1e\xf9N\xe9S\x83\xa3\xba\xc0\xe5k\xbc\xf2\xe9\x91\xfa\xd4\xd2\x15\xdeUI\xe7\xfa\x1fW\x08`WXm\xbf\x95L\x9b\x8f\x9d\x16\x82-\x18\x9f\x98\x1e\xd8\xe8\xb4\xf5\x17h\xba9`\xddC\xd4\xe4\xe7\x00\x16\x9d\xc4\x98\xc5\xbe\xfbH\x86\xee\x93\xabGv\xf3\xc3\x11\xa7\xee\xf38@\x1c\x86v\xd6\xe5\x04(\xca\xa4\x96\xaaK\x00UN\x85\xec\xa9iR\xeb\x97\x13\x9a\x98\x95\xa2\xf4\x03\xc8\x06\xec\xee\x9ek\x95\x80O\x08euue\x8d\xbb\x99e\xde,E^\x944/A\x0cB_\x8c:H\xd0\x90s6\x9f<8\xb4\xc0\x11\xf9\xf5\x17M#8\x13\xd1b\x0b\xc9\xa3\xbc\x91\xf2 w\xe9\xa3\x973\xd6|k\"\x99Bo\xa1\x81\x05\x9b\xb4\x94|\xc6\xdd\xe3Z\xbds\xd53\xcek\xd6\x02H\xcb\xca]\xb1\x11\xf4\xa5kBG\x8c\xf8\xa6\xd8_%\x9e\xac\xdb\xb8\x96w\x9c\xd6\xfd\xcciP\xc9>\x19\x06\xbf.5\xaa\xc6\x19EF\x8a\xc2\xe7\x953\xe4\xac\xd31\nB%\x9ba\x9f\xb0\xa0\xc0=\xa0\x15JT\x1fIiO0K\xf2Q6nt~\xcb\xf0\x85\xaf\x8b8\xb7`\x9a$P\xb3\x18\x80\xd1*\xf7L\x8c\xda\xab\xc2 \x1bf\x84\xd4(\xf4\xca(_\x80P#\xdcV\xa3d\\\"J\xf7(\xe1\xca\x8b\x10\x85\x17\xa4B\xb2\xeb\x9bJ%a\x19\x00\x1f*M\x8c$T\xb9\x0b\x05^Tr\xda\xb5F\xbc\x978\x1f6\xb8V1\x06\xf3\xe8\x85\x1b7\xbc\x7f\x89\x8b\xba\xfa\x82\xa8\xec\xf5\xd5\xb9\xee\xe1Tds\xa0M\xe1\xdd\x8d{Q\xca\x0e\xf3E\x06\x8fF\x93\xb2q\x13\xf71\x9b\xa6,\x96C\xfd\x8bJ\x02\x9a\x84Y\xe3tgj\xde\x86\xfaw\xe3r\xa9\x1e\x95q\xc4\xe5\xd2V(\xaf/Oc\xd9\xf5@lm$;\xe3\xdf\xcfV\xf9\xd0\xa6\x82\xcb\xbc+4\xc5*\xbf\xd4\xa1\x809\x05\xb8\xacR\xe5\xbc\xeb\xe3\xd6\xac\xcc\x15\xa3\xf0\xed\xe5\xfc\x88\x89n\x92\xbf\x1d\xbd\xddt\xb1\xbc\xc5\xda![\xbb\x17\xff\xc8E\xdeMx\"]3\xa8\xd2\x125/=Z\xa14\xd9l]\xda|\x8f m1lK\x19\xb0+\xe7\x0e\xf7\xd6\xfdE\x02\x885\x1a+e\xb3\xeaU\xb9V\x89\xba\xf68\xd0\x85\x81\x05t:\xae9\x13o\xd8lH\x9a\x11\x8af\xc8V&\xb6mY1\x19\n\xe1\xf5\xa9\xbcbT\x1b\xe64w\xb5EJ\x12\xd7\x86\xacM\xaf\x8c\xf4Wy5\x8f\xceMo\xcc\xb7Z\x97\xd2\xef\xd5\xee\xddW\xf6 \xd6\xbfZ\xb3\x9b\x8dW\x9e\xceX\xcb3\x96\xbd\x9euwnc;fS\x0c\x9e_\xae\x8b\xd6c\x16\xb3\xe4\x94MT\xfe+;\xb6\xfe\xca\x9d\xfe\x9a\x81\x89\xbaQ\xe0\x0ebh\xed\x1d\x1f:\xb9A\xadT\xe5Z\xbe\xb1\xceAVH\x13\x1aQ\x14\xb1c\x9f\xeb;U\xa8\xadMB\x0bI2t\x9f\xea\x06\xc7h\x04R\x87: \xca+\xc2I\x97\xb33\xd3\x15\xb42R\x0c\xde\xc9\xf5\xa0O\xd62zX&\x03\x8c\xe5^\xf6\x84Fa\x02{\xb6\xb2\xa3\x11QY!\xa7;;\xd5n\x94R\xea&\x89\x89\x86\xfa31\x1cq\x1a\x8d\x83QD\xf98\x10\xc3\xc8\xdd\x01F\xd6\x84\xc8\xcfB\x98\x0er\xbb\xd7\xe9\x98\x13\xa3\xdbY\xa7\xd3\x8e\xbag\x91\xe0 \x11\x98T\xd868\xe5\xa8+\x1fe9\xfa\x16j\xb98\xdd\x9a\xb3y&V\xad\x94E'\xad \x93\x18\xeb\xac\xdb\xf2vL\x0b;^\xcb84\xf1%\xd9\xf1Z\xd6x\xbc\x15M&P\xf6\x9d\x9c\xb5\x948,\xba9\xab \x81OZ\x12D\x1d\x98\xa8\x9c\xb50\x18\x89G\x06i\x97Gs\x16zn\xd1\xfb\xe71c\x136\xd1Q\x12=\x9aj\x19[\x84\x8c\xa6]\x89wzi\xdaU\x8aI\xd3;\x9a\x87)\x8d3\x9eg)\xebtt\x02\x81P}\xf2\xf3&\x07\x11S_\xbb.\x05\x068MDy\x1c\x809*\xd6\xc9\x06\x05\xc1W\xc0t1\x05\x9c\xfc\x0d\xae\xa5J\xac\xc3h\xd6\xeb\xceJ\x86X\xc4\x80\xaf\xa4\xb1\xba\x1d\x12T\xdf+\xe1\xc4)\xe0\x8a)v\x08\x93\xca\xf9px\x81=\x00V\xaf\xfae\xfc\xdd\xab\x1a\x02F\xa1\xe3\x81\xa4%r\xafi\x16N\x95\x04#\xac\xe0\x92\xd9n\x84\x9c\n=\xc60\xa3Y\xd9\xf0\xac\xda\xb0E\xfb\x81\xbd\x9a\x1f\x86\xa1Q\x8f\x8c\xc6\xda\x8e]\x8c\xe4x\xc3\x8fj6\x1c5\xba\x07\xcf\x86|8*\xbbR\x14\xd98\x18e\xe3\xca\x81\xb4\xeb\xdd\xd3\xfa\x16\xf0\xad]\xa0\xf6\xcecM+vv8QqCF|\xec\xd4\x0c\x8fVj\x03\x1908\xf63je\xd5r\xd8\xf3\xbaz\xa3>j`C\xe5\xadF\x867\xf8\x1a\xc6f\x9d\x16\xf4\x07\xcd\xbe\x0ct\xd3\x06k{\xae\x96\xaev@X\x8e\xdbzW\x91\x83\x9d\x1dA\xf8H\xc0H\xc5\xb84\xa1m\x16%s\xea5\x90\xf0\x9a\xf8\xb8\xcd\xc3q\xbai>\x08c\xe6(~8l\xab(\xd8\xad^QD\xa5\xa38\xe88\x86\xf0qX\x18\xde\x98\x05f\xd5\xd8\xa3V\x92\xb7\xb2\xa5\x84\xf7\x02>\xec\xb6\x1e\x94\x1c.\xc2\xe3]\xce\x8e#\x99\x9c\xb2\x96\xea\x80\xc3\xe6^\xd9a;^\x17\xe8O\xc8@\xa4U\xc2Ne\x0f]\xb5\xa14\xaa;\xf7\xa9\xe2\xb2\xa9b,\x0c\xe2\x92)\x05\xfbd\xe7\xa3F\x86\xe5\x1600t\xed\xfef\xc7#^\xe0yxo j\xc9\xbb:\x00o\x18Q\xa5aL\xc3LS.;\x86\xb4\xd2\xe5\x06\x82\x96\x92\xc4W\xd7R\xa8T\xca9\x1cU\x1c\xa6\x86U/\xc3c?\xa5\xb1\xda]+\xba\x1c#AN\xfc\xe5\x88\x8f\xcd\xb7\xc6\xabI\x0d\xbb]\xbdX\xe3\xc6c\xe1\xda\xd4\xd6\x90!\xe3\xe1\x96\xba*\xc5j*\xfc\x17\xb7\xd3\xdbhg\xdb\xb6(\x06\xda\x8c\x18\x83/&\xa5\x1a\x944\xe0\xbc\xee\xc8\x01\x8f\xd9\xe5\x9d)\xab\xad\x1f?\xbc\xb0\x8d\xaaX\xd3l,\xad\xdc\x95+\xd1\\\xba\xa2\xb9\xa8`?\xa9+\xec\xcb\x82<\x14#6\xde(\xc0\xd5\x15\x91R\xcaFC\x96^\x18\xee\xeen\x90\xc5\xe1\x8b(i\xe0k\x07\xda\xd0\x14\xaaa\xdd\x91UN\xfe\xab\xaf<\xca\x1c\x99\xbf($!\x0d\x02{\xbb\xe4\xd9HD\xb2p\xb7O\x13{\xb5y\xb7?Hn\x87\xbdA\xb2\xbbK`d\xa3d\xac\x077J\xc6\xd5\xf1]Da%\x93faR^\xf3\xcen\xf5*`R\xa2\x11\xb7vx\xd5\x19RAuv\xfa\xb7\xaci\x90\xdc\xd9!\x0c\xf6\x13l$w\xfa\xe3\x01\xeb.\xb2\x85O\xd6*\xbcQ?\x0cC\xe7\x16\x11z\xf8\xe3H^,\xdd\xfa\x98\x90\x8b\x00`k\xa7\xc7\xb5\xb50\x9d\x86\xdb\xf1\xad\x01\x15\xef\xa4i3\xf3:\xb5\x11\xb9j\xa8\xf5r8X?VwM~6d\xf4O\xc6\xb6K\xc7\x12|\xc4\xc6\x9d\x8e\xffI1Y#2\xd4R\x9e<5u\xd4\xee\x9d+\xde\xf5\xb4\x0bC%\x03&\xa5\xd0+H}\xfe\xdaa\xe8ga2\x12cb\x0fV\xea\x93\xe0gU^\xddP\xa2^m\x15\xc1\xfc\xa0F\xb1A\xe0\xda\x98\xc2\xdb\xbd\xa1\xa8\xac\x1c\x12\x8c\xc6\x0d>\xf6\xaa\x17\xf0kw\xd6_Fy\xac\xaf\xc7\xdb\xbdPf\xcd0k&\x07\x8e\xa3C}\x87\xa8\xd1\\Wn5\xbfz\xc1\x95)\x1a\xe9\x8fj&8\x0d\x99\xe5G\x06\xc5\x92\xa2\x88\x86\xbe\x1cJ\x9f)c\xf3\x97\xae\n\x07\xe8\x1ca\xdaS\xb7L\x89O\xfab\x0d \x9a\xeej\xbd\xf0\x06Wi\xf1W\xeb\x8a\x7f\xe9\xb0\x9c\xeft\x9e\xcfTh\x94j\x08\xc0\xb6\xect\xd8\xd0\xaf\xf4\x9aC\x97\xf9f\x83\xf5\xac\xca\xc8\xa1A\x12\xc8N\x07/~i\xe9\x86\xac\xa9\xbdD\xe6\xeeR?\x11 \xfa\x8d\xa7\x84\xa2v\xc9|\xe3\xfa\xd2d\xfb\xb7\x95;\xeb\x9f\x10\xcc\xfd\xa6\xcf\xea\xcdn\xbc\xac\xf4\xb8\xfaV\x99\x83\\\xf2u\x05\xe8\xfd\xc6\xf0\x82\xdb]Z\xb8\xce\xf0*\xab6\xaa*Q\xd4\xb5p@\x8a\xca\xddv)V\xce\xb3\xea\xaaK\x8c\xda\xf5\x9e\x18M\x14~:`N\x15\xda\xb0^[\xd4g\xa1\xd2\xbe\x1dE\xf1\xc9@v\x17\nF\xf1\xd1\xee.\xcd|N\xa81\xc0_\xcbn\x9c\x89\x136\xd1\x0e!\xf37\x04c\xc3\xa6L\xd5y\x164\xbd\x0b\xd9Zy\x8ash\xd2\xa9\xda\xb8\xd14l\xcb\xee\x91\xc8\xcer\x90\xb6F\xdei\xaf\xdb\xefy\x14~ov\xbd\xb1\x89\xce\xe8\xcb\xae\x0eJl\xefA\\#\xe4\xf6n\x7f(\x82\xc4\xae\xa6\xc1\xa9\xe3\xb73\x92,\\i72\x8d\xee9\xe2&\xf7\x1cK\xa0\x96\x0b\xc1\xe2H\xb2\x80\xfb{\xaf]%k\x8cC\x84\x8eA\xa6U\xc7 \x930\xbb\xdc1\x88r\xd2\x81\xbe9\xec\xd4\x1f\xc3[\xfb\xb4R\xb48\x0fs\xe3F`\xbb\xc7\x8dV\xfe\xa9\xf9\xd90H\xfeb?\x1bqX\x96\xae\xfa\xd9X\xfes\xfcl\xc4\xea1&\xc38X\xd2\x86\xf2/\xe3gc\x9a\xf0(\xbd\x8bW\x1b\xec\xfa\xb5\xf6\x9e\xae\xaf\x8c\x8aaC\x85Xl\xac\x7f\x97\xd8h\x83\xce\xb6\n\x9a\xac\xce\xfc\xd5A\x80\x9e\x89JV\xd8^\x98*>\x96\xef\x0b%\xa3\x19\xbf\x17:B\xb6\xed\x8fZN\xe6m\xc5\xa9\x87\xbaC\xf2H\x05Kr\xbf\xc98\xda%TD\xaev\x13\xf3\xaf[\xcbR\x11rl\x03o4a%\xf1\x11z`sjbn\x1f\x99)e\xe8^W\x9c\x1d(\xb5\x80\xa2\n\xae!\x12\xa0\xbd\xbb>\xf8\xc6\x85\x05\xbcqR\xa1\xfd%;\xb4\xd9\x9e]U5_\x06\xa5xq\xe2\x97\xf7^\x01\x845\x19\xa4\xd2FQHW\x9e+\x8af\x82\xac\x86\x03\xb8XE\xde\x8a(\xd8s%\x85\x03\xa5\xff\x0f\xfc\x97\x19\x92%!\xda \xdf\xb4\xa1\xae\xd14|[~H\xf9\xba\xdcQ\xf8\xa7\x80o\xab\xea!\x9e\xc2\x1dw\x03g\xd6\xba\x96\xd2k\xd3Le8\x1a\x0f\x98\x8d\xcc\x89\xb7U\xd5N\xab<\xa9\xa7\xeeF_\xac.\x9a\x8f\xb7W\xae\xa5\xa4\xf6\xfd\xa9\xdc\xe8,\xbbv\xbf\xe3o\x89\xca^\xf6\xdd'kB\xbd\x9a\xe0\xa4]V%y\xcb\xd6\xa4mbj\x05m5\xc8\xc0Y4\xe9z\xd4\xbbw\xffQ\xaf\xd7\xdb\xf7\xc8\xba\xe2\xce\xdao\xe4x\xca*\xb0\xd3Q\xbf\xddY\x94?\xd0\xa2@\xa3 \xe3\xa6\x01\xe4h\xf3\xcb\xf1\xd0\x9f\x85/Wr\x8b\x19\xea)\xdd,k\x82\x92\xb9\x82\xb3>\xd6k\xcf\xdck\x00Z\xa6 \xc3\x10\x84\x064]\xae\x82\xcd\x95vV\xe8c9\x985z\\q\x0bJT\xe1\x9e\xba\x07j\x95\x1b*/\xb8\xd7yW\x85\xa8\x82o(\xde\xec\xb47\x0c\x08\xa9V[\xdfh8z\x08{@\\\xddbD\xc0\xb8\xf3\xb0\x9dU\x0c\xa6}\x112:\xbd\xc4\xdd\xda\xc4R\x92\xbc\xd3i;%1\x84 k\xbcuW:%c\xa4\x11\x9f$F \x84\x85\xa64\xf3\xf9P\x86fy\x04\x12\x9d\x9de\x1bN\x8eh\xd3\xc1\x18VtLh\xa6/a7\xed\xb6\x1c\x00#\xd8Jgg*\x90_\x8d\x04;4L\xddp\x92\xea\xf6I\xe0\xe7U\x91\xc9\xb1$\x04\xd2\x04\x00\xb6TW\xf3\xafaT\xf7=\xf70Z\xe1\xcc\xaa\x9e@9e\xe7\x90\xb7d\xd6\xb2nG7c\xd38\x1e\xee8\xd0\xec\x8a\x87\xbb\x8dV^\xec\xe1\x8eF\x8e5\xa2\x1e|T\x19\xbc\x80g\xbc\xd6M3\x0d\x84\x0cvI\x04&>\xab\xf0\x81(\xdc\xdcW\xd2D\x99\xb8i\xb4\xac\x17\x01\x1eY\xd1\x8e4l\xf6KO\x7fm\xc7\x7f\x9e/C\x8daP\x0dq\x8c\xa7\x94\xe6o \xdaa\x18!b\xb4{4\xb3\x88EE\x18)\xcb\xdd\xbc\xeeSM\xd8\x93Lc{\x18\xe6\xda\x8cq\x9b\xaf\x9dAj\xef\x83k\xb1\xb8\xa7\x1c\xcb\x1b\x99\x00&I\x89cF\xa6j\x94d\x06\xcd\xf2\xcd\x05\xceS \xa8\x11\xbe\x82\x8c\xe2\xd2\x0b85\"X\x90P\xf4\x9b\x01H\xb4\xa6\xf10V\xb2`c\x85\xc1\xa6\xa8\xd4Xn\x8b\x88\xb6\x13\xf6\x95\xcbm+\xf2\xe5z\x8e\x0d\xf8S\x8b\"\xcaB\x81\x03\x8aUi\x16@c\x83\x14\xd6x\x95\x82\xd8\xceN\xf5\xcb%\xaf\x7f\xebp\xefj\x0d\x03S\x07\xa2\xb7J\xee\xeeRVN\x0b\xb3z\x82R\x98\x83t\x83\xce`C\x02,\x8a3\xc3?j\x049g\xf2^M\xff\xe4\x92\xc6d\xda\x10\xb0\x12 (\xab\xb9\xc9\xa7m\x7f\xe4\xcd\xd8\xb9G\xb5\xb2J\xbb\xc7\xa7^\x94\xc7I\xe2QO\x85\xf1\x82D\x94\xb3\xebW\xa1D\x9c\xef\xa9\x9f\xdd=\xf5A\xffz\xca\xf4\xa7:)\xa23G\xaf\x8b\xd1\xccI\xad\xe9\xdb\xbb}\xd2\x1cI\xf1\x1d~\xc2\xb33\xde\xb2\xd8\xd8\xf2vX\xcd\x9e\xea\xacvxPS\xc6Qy\xc9\x8d\x92SWN:kR{~\xac\x1b%\xd5\xael\xdc(q\xe7\xed\xb0\x99\x93r\xdfu\xb7\xa0\xb6\xd7[\xfd-l\xd6w\xaavp\xee\x0b\xc6'\xcd\xfc\xba\x11\x8b\x1bc\xbc\xfb\xfe|\xa1\xc7\xca\xb3\x8fu\xa0\xa6g\x93\x04oK7\xbb\xb2o>\x17/Of\xb2Pt\x93\xbc\xd4\xb7\xbbp\xd2^E|\x16z@<@\xe2\xae\x92\x1f\x15E\x03H_\x80)$\x7f6\xb9k\xd2\x8a\x0c\xaa\xb4&\x85\xfaA\x91C\xfd\x05\x90D\x9b\xdc\xdd++BzXV\xeb<\x02\x89,#\x87\x1b\xc7%:\xa3\xbfvn,%\xf6\x1c\xd18K\xd1pn \xfd\xea\xb8\xb1\xc6\x0c\xda&\xb6\x8f\x1ae\x19\xd8u0\xa8\x053o\x00C\xe5\xcbO2\xda\xb2\x02|Vu\xa4\x91Lx\xbf\x06X]R\xbf\x1bl\xc2\xd9\x9d\x0d\x9c:\xb3-*\x1d\xbfL}so~\xc0B\x1f'\xbf:\xf3T\x86\xed\xde\x1av\x0b\x03\x87O\xb6]z\xe6\xa2U\x18\x86YQ\xa8\x08\xd1\x1b.\xb8^\xc4\xaa\x8a\x02\xbdZ\xd2\xca|\x95\x90V\xf0\xc1\x97h\x98Zz\x81\x0fc*\xc3\xabn\x90\x0d51\xf8~\x9a\xa4\xe9[Q.\xc3\xbc^\xc8\x00\xab\xacrYV\xb9\xa02\xdc\xaf\xf9\xc9q\x19\x99\xe6Mh(\xe7\xdb\xaf&d\x8di\x10\xdf\xdef\xe5!\x15\xeb\xeaW\x15\x066\x96(/\x03\x1d6X\xe8i\x9a\xb0\xb1\xd3\xbe\x1b\xa5i\xc2\x8f[\x16v\xadI\xc6Y\xebl\xc6x\xeb\xcc\xd8W\xb6\xdaa\xab\xe7\x11m\xc4S\xc5\xad\xca\x92\xfex\xf5\xe72I\xd3\x96\xfb\xbd\xe7\x10z\xc7\xe1TV\xb36\xa6e\x86\x1f\x01\xf1\x8f\xdc\xc3\xda\xcd\xe0-.=\xa9w\xbf\x82\xfd\xca\x11[\xb5\xae\x9a\xdf\xb9u\xa51\x07\xff\xea4u\x03\x14e\xd9-Z\xe8Z\xd5\xcdJmW\xdd\\#\xaf |\x94\xb4\x8d\n\x97\xf21\xf3h\xd5[\x92\xb6Eu\xf2.\xb6\xd3;_T\x01\x054\xeeS\xa1y\xb51\x8b\xba\x0beG\x15\xb1\xc1M\x94sf\xe9\x0c\x13v\xff\x1a\x00\x18B\xc2\x1d\xde\xd0\x975\xf6\xd3\xab\x13K\xdf\xad\xcb\x98\xf3Y\xf6,\xbbU*JH \xeb\xe8\xd3\xab\x8d\xa7Y\x9f[\xb2\xc8\x81h(]\xc1\xb8\x8a\xf90\x88\xdd\x94k\x1a\xe0\x04\xc0\x7f\xf9{\x15v\x17\xef\xef\xf7\x80\xa5s\x7f\xef\x1a\xa1 \xfc\xde\xe8\xbb\x91C\x9d\n9Z:\x8a\xd5\x05\x0b\xb3.\xd4\xb9x3B\x93\x1as\x81\xbc{\x18M`\xe3B\xd3\xf0b)\xd2\x80Qv.\x19\xcf\x93\x8c\x07Y\xf7\x98\xc9\xfb\xe6\x11\x1dL\xe9\xe5\xd8\xb8F\xb79\x80\xca\xcc t\xd2E\xe0t\x05\xcb\xb3\xf4\x94\x91\x01dM\x93T2\xe1G\xd4\x8b#\xfe\xd8\xb8\xa7O\xbay&\xa4\x8f'\xe2b\xc9\xe1\xb5\xd0\xefT\x08wN+\x90i\xcb\xa2\xa8\xdc\x19x\xb2\xe22:\xc7\xe5;\xcc|\x01\xfcIF\xe7\xfe+\xefp\xc0\xf9\x96\xccZ\xba\x17\xad\xcf\x086m-\xb2\x84K&Z\xdegs\xef\x15\xca\xbaK\x91\x12\x12d\xbe2\xf3\"d\xed\xa74\xda\x88\x1e_\xee\xf7\xf2\xee\"\x92\xb3\xa7\xab\x05\x0bYw\x91.\x8f\x13\x8e\xaenh\xaa\xc2&0\x1dI\xd7\x9dl\xfe\x02\xc8e0wj\x9a\x14\xe4x\x17}\xf6\xc3\\Y\xb8\xe5\x08\xb7G\x90\x8f\x80+\xaf\xdd\xdf\xee\x0d\xd3 \x1fhH\xc6\x06\x921\xf5\x16\xa6t}<\x9c\\\xb4\xb9\xe9~\x94\xa6\xd9\xd9\xfd\xf9B\xae\xd0\xb9\x167#\xb0\xfb\xca\xa4(6\xfc\xb9%\xca\x96\xcf\xbd\x9a\x9a\x98H\xb3\x0d\x81\x03u\xf1\xa4+E2\xf7\xcb\x82\xb2\xb4sI\x88)\xa3\xf9\xe00r\xa6\x13'\xb8\x05\x03\x02N\x05\xb3\xd7\x8a\xf2\xd6g\xf3n\xeb=\x05\x94\x89vc\x91\xe4-\x0c\xff\xa0'\x97rw\x96p\xaau \x8adM\xaa\xa8%\x87\xb0\x81\xde\xf0\xc40\x94A\xc9 $\xa1N\xaf$\xf5\xaa\xfd\xfal\xee\x19\x9c\"\x81S\xd0+\xb1\x11\xe7\xc4-\xe8\xe2\xdd\x9a\\\x8az8\xc2\x12\xc5L\x02>\xb7\xa6e\xba\xb0\xc6\xb2\xae`0Ax U?\x91\xb2\xf1\x94_t\xfeT\x93\x8d\xcc\x86z\xa1N\xf0\x8d\x99\xf0\xd3$\xc6X\x0f\xee\xf1V\xed`\x8a\xc9\xa7\xc9\x9ceK\xe93\xda#\xebfJ\xe6\x04\x01\x1b\"\n\xca:H\xa0D\xc5\x96O]<\xd6\xa6\x9a\xb5Y\xad\x974\x0b=\x90u\x80l\xf1qH.^\x1e<%\xe5\xde\xbb\x81\xbb1\xd9e\xfc\xb4\xfb\xf6\xc1\xbd\xfb\x87\xf7\x1e<\xb9\xf3\xfa[\xf7\x0f\xef\x1e\xbcu\xf0\xf8\xc9\xf0B\xb0I\xe0yt\xc5`\xf9A\xeaX0\xc6!\xc131\x8f\xd2\xc0\xf3\xd6\x81*\xf5\xbd\xa3\xfd\xfe\xbc,\xfa\xbd\xa3\xfd\xfd\x01d\xe8/\xbew\xb4\xbf7/?\xfb\xdeQo\xee\xd5\xcf\xd0j\xbeQ*\x0c\xab;\x85\x8dFe\x96\x81\x967\xb2\x00[ku\xaaDW\xad\xf8d\xba\xf2\x19 UD\x00\x93\xa1\x89D\x94\xe7\xc91\xf7/\xd6\xda}\xac\xa1\x89XQ\xa7\xc3\xd5\x1d\x10\xf5\x97\x10@%\xe3\xd9\x94fa\x8f&!\x1bd\xe5\x95\xf7lg\x87\\p?\x19ecG\x89\xaa\xf6\xec\xae\x9a(\xbb\x1b\xcdYz7j\xf4F\x8b\xb2E\xe5\x88\xac+\xd8\"\x8db\xe6_\x19\xed\x1e\xb6\xde\xbb\xf2^w\xecw\xc9\x95c\x97\xc7\xbb\xe2jWf\xef,\x16\xe6k@\xad\xc6K\x90\xbeZ\xb6\xaajo4\xf6\xa8\x87\x16\xf3\x1e!\xe8\xc7Y\xfa\xde\x15\xc7o\xce\xa87F\xcf0No\xbetg\xf7\x07\xa2\xdd\xf7{\xbb7\x0f\xdf\xdb}\xaf;\xde)\xde\xcbw\xae\x1c\xcf\xa9w\x88\xe1?T\xac\xaa+^\xe5bt\x9c\xa5\xd9R\x04\x19]\xf2\xe4+Kv\xc0\xb7;\xd3\xe4\xd6d\x05\xe7O\xae\xe9,\xca\xef-\x17i\x12G\x92\xe5M>*\x81,>a@\\\xbay\xf2>sB\xe3\xaci\x94\xa6O\xa2y\x93}h\xfd\xb3[a\x7fM'I.\x13\x1eK\x04J\xd3G\xa6f`\x10\xf0\xa5ig\x9a\x88\\\xde[.\x1a[bM\x98-\x9c\xd7\xf6\xf6%\xb9\xc5\xd1\x1d\xe4,\xcag\x95\x9a\xd4\xf4\xf5\x06\xcd\xaa\xd9\x96\x1c8Q|\x06\xa5\xcaT\xf9\x19\n}y\xeb\xd65\xb2+wX\xe5@\x86PY\x94\x8aV\xb9\xa6\x8bHDs\x06\x82\xebja\x8c-\x12\x96\x07#\x0fD\xd6Hz\xd4\x9b'<\x99/\xe7\x90\x8a\xceu\x8a\x9d\xc7\xe92ON\xd9C\xfb\xb2\xcc\xb2\xa5\xe6 W!\xfd\xd5\xb7eZ\xeba\x0e\xa6\xaa\xd0\x03\xc9\xe6\xb9*c\x92\nm\xec\x8b\x84\x97}S\x05+\xcf\xd1d\x92\x00\xdc\xa2\xb4\x92\xbd\x88\xa4d\x82C\xe78vH\x9f\xc0zc\x1a\xc1tW\xc6\x9b\x94m\xbd\xa0?c:\x93r\xf1\x90\xc9Y6\x81/\x8f\x19\x80i\x91\xe5\xf8\xb3\x94\xd8P\xca$S]\x88a\xc83\x14-\xbdl\x01\xdd\x84\n\xa5\x88b\xe6\x8di\x1e\xf1D&9\x0b\"\x9b\xbc\x93\xa6M8\x15\xf9\xccY\xb1z\xd9\x1dz\xa4\x81\xc16\xb0\x92\x06\x8eG.\x1a\xb6\x06\xa7*,\xf2\xa6%\xde\xbf\x7fr\xf0\xb6\x92\x0e\xfdW.\xbc\xcfx\x817\xc9\xd24\x12\x1e\xf5>\xeb\x05\xde\x82\x89\x98q\x18{\xc7\x0b\xbc\x88\xc3hoy\x81\x97\xb2\x1c\x86{\xdb\x0b\xbcc\xd4\x0c\xc2\x07\x85\x17x\x187\xff\xef~\xdb\x0b<\xfd\xdd\xdf\xfd\x0eT\x93-\xf1\xd3\xbf\xfb]x\xb1\x14\x82\xf1x\x05\xcf\xbf\xe7\x05\xde\x8a\xc1\\\xfe\xdd7\xbc\xc0\xf3c\x02\xc9oB[\x90\xf8#\xc8\x13\x98\xf7\x97P\xb9G\xbdo\xffG/\xf0\xee@\xe2\x07M\xe2\x87L\xe2\x87M\xe2GL\xe2GM\xe2\xab\x90\xb8\x0f\xa9\xff\xe4\x05\xde]H\xfcg/\xf00\xe7\xc7L\xe2\xc7M\xe2'L\xe2'\xbd\xc0{\x00\x89\x9f2\x89\x9f6\x89\x9f1\x89\x9f\xf5\x02\xef\x1e$~\xce\x0b\xbc\xb7!\xf1\xf3^\xe0\x1d@\xe2\x17L\xe2\x17M\xe2\xbf\x98\xc4/\x99\xc4\xd7L\xe2\xeb^\xe0\xbd\x03\x89_1\x89_5\x89\xff\xbfI\xfc\x9a\x17x\xefB\xe2\xd7\xbd\xc0{\xfa&\xa4~\xc3\x0b<\x9c\x8co\xff\xa6\x06\xdb\xb7\x7f\xcb$~\xdb$~\xc7$~\xd7$~\xcf$\xfe+$\x00\xa9\xbf\xfd\x7f\xc0\xe4@\xe2\xf7\xbd\xc0\xc3\x9co\x98\xc47M\xe2\x0fL\xe2\xbfy\x81\x97@\xe2\x0fM\xe2\x8fL\xe2\x8fM\xe2[\x80N\x90\xf8\x13/\xf0`\x92\xbf\xfd\xdf\xcd,\xfe\xa9I\xfc\x0f\x93\xf8\x9f&\xf1g&\xf1\x17&\xf1\xbf\xbc\xc0[B\xe2/M\xe2\xafL\xe2\x7f\x9b\xc4_\x03&A\xe2o\xbc\xc0Cz\xf4\xed\xbf\xd5Y\x1f\x18\x94\xf9\xe0\x07\xf5\xa0?0(\xf3\xc1\x0f\x9b\x1c\x832\x1f\xfc\xa8\xc9\xf9\xaaF\x94\x0f\xfe\x93\x86\xcb\x07?ir~\xca\xe4\xfc\xb4\x9e\xfb\x0f~F\x0f\xf5\x03\xc4\x86\x7f\x0f)@\x87\xc9\x97!\xf5\xf3\x1a\x9d>\xf8\x05\x0d\xbd\x0f~\xc9\xe4\xfc\xb2\xc9\xf9\x9aI|\xdd$~\xc5\x94\xf9U\x93\x03\x93\xfe9H\xc0\x9c\x1fC\xe2\xb7M\xce\xef\x98\x9c\xdf\xd7h\xf9\xc17\xf4,|\xf0M\x93\xf8\x03\x93\xf8#S\xc6\xcc\xd4\x07\xdf29\x7fbr`\x16N \xf1\xe7&\x010\x7f\x0b\x12\x00\xf3\x14\x12\x7fmr\xfeF\xe7|\xf8\x83:\xe7\xc3\x1f29?\xac\x17\xc5\x87?\xa2q\xe0\xc3\x1f59_59\xff\xc9\xe4\xfcg\x93\xf3\x93zQ|\xf8S\x1a\x07>\xfcY\x93\xf3s&\x07W\x19\x00\xe8C\x00k\x06\x10\xfa\x10\xd6\xd9cH\xc0:\x03R\xf4\xe1\xd7L\xce\xd7M\x0e\xc0\xf5 $\x00\xae\xb0p>\xfcu\x93\xf3\x1b&\xe77M\xceo\x99\x1c\x80\xf4SH\x00\xa4\x81\xb0}\xf8\xbb&\xe7\xf7L\xce\xef\xebe\xfa\xe174V~\xf8M\x93\xf8\x03\x93\xf8#S\xe6\x8fM\xce\xb7L\xce\x9f\x98\x9c\xffnr\xfe\xd4\xe4\xc0*\xf9\x02$`\x95\x9cA\xe2\xcf4%\xf8\xf0\xcf5\x96\x7f\xf8\x17&\x07\x96\xcb\x0f@\x02\x96\xcb\xfb\x90\xf8+\x93\xf3\xbfM\xce_\x9b\x9c\xbf\xd19\x7f\x0f\xe0\x04\xce\xfd\xf7\xbf\xa9!\xfd\xf7\xbf\xa5!\xfd\xf7\x7f\xac\xfb\xf3\xf7\xdf\xd2\xfd\xf9\x07\x98\xa8\xb7\x00\xcb\xff\x01\x88g\nX\xfe\x0f@4\xdf\xc6<\x98=\x0ey\xff\xf85\x0d\xc7\x7f\xfc\xba\x86\xe3?\xfe\x8a\x86\xda?\xfe\xaa\x86\xda\xff\xf9+\xba\x99g_\xd5K\xf0\x99\xa1\xcc\xcf\xa0r r\xcf~\\\xe3\xe73\x83\x18\xcf~Z\x8f\xf6\xd9\xcfh\xd0<\xfbY\x8d\xba\xcf~\xce\xd4\x03Cz\x1d\x12\xbf\xa0\x97\xc9\xb3_\xd4\xeb\xf5\xd9\x7f1M\xfc\x92\x06\xc4\xb3_6mA\x9fo@\xe2\xeb\xa6Q\xe8\xe1\xf7C\xe2W5z?\x03\x82\xfc\x10\x12\xbf\xa6Q\xf7\x19\xe0\xd0>$~\xc3\xf4\x10\xe0\xf8\x08\x12\xbf\xa5Q\xf0\xd9\xefhh<3\xa8\xf3\xec\xf7\xcc(\x80\n\xbf\x01 \xc2_\x84\x04 \xd3#,\xfd\x0d3\xc2o\x9a\x0e\xfd\x81\xf9\xec\xbfib\xf5\xec\x0f5\x8dx\x06\xf8\x05\xd4\xef\x99Y\xdb\xcf\xbe\xa5\x11\xe4\xd9\x9f\x98\xc2\x80_G\x90\xf8SM5\x9e\xfd\x0fM\xbe\x9e\xfdOS\xcf\x9fi\xbcx\xf6\xe7\xa6\xc2\xbf0p\xf9_\xa6\xe6\xbf\xd4\xa4\xe1\xd9_\xe9\xd5\xfe\x0c\xf0\x0bD\xb2g\x7f\xadW\xf2\xb3\xbf1p\xf9[=\xcd\xdf\x01j\xbc\x80\xc4\x0f\xea\x15\xf9\x9d\x1f\xd2\xc8\xf1\x9d\x1f6\x89\x1f\xd1\xc8\xf1\x9d\x1f\xd5\x9d\xff\xceW5z~\x07\x88\xc59$\x00K\x16X\xfa\xc7\xf4\xa2\xf8\xce\x8f\xeb\x9e}\xe7'\xccg?iZ\xfd)\x93\xf3\xd3\xba\xf0sh\xfe]x\xf7\xfc\x87\x0c\xcd~\x0e\xed\xbe\x0b\xe3\x7f\xfeU\x0d\xeb\xe7\xd0\xde\xbbP\xe9sh\x10K\xfd\x98\xc1\xfe\xe7?np\xfe\xf9Oh\xde\xf0\x1c\xf0\xf1\x1e`\xd4\xf3\x9f\xd5x\xf8\xfc\xe74\x1e>\x07\x84\xfc<$\x0cB>7\x08\xf9\xdc \xe4sDH\x00\xf8\xf3_\xd6\xa8\xf9\xfck\xa6/_7=0\x18\xf9\xdc`\xe4s\x83\x91\xcf\x0dF>\xffu\x8d\x88\xcf\x7fC#\xe2\xf3\xdf\xd4\x88\xf8\xfc\xb74\">7T\xed\xf9\xef\xe8%\xfe\xfcw5\">\xff=\xbd\x1e\x9e\xffW32@\xcd\xbb\xd83\xc0\xcd'\x98\xfa\x86M}\xd3\xd4`\x90\xf39 '\xfc\xfe\xa1\x19\x1a\xe0\xe6\xbb@?\x9e\x03r\xbe\x0b\xb8\xf8\xfc[\x1a)\x9f\xff\x89F\xca\xe7\x80\x9d\xa7\x900\xd8\xf9\xdc`\xe7s\x83\x9d\xcf\x11;\xb1\xd9?\xd7x\xfa\xfc/\xf4\xdc?\x07\xf4\x04\xe2\xf3\xdc\xa0\xe7s\x83\x9e\xcf\x0dz>7\xe8\xf9\xfco4~<\xff[\x8d\x95\x1f\xfdG\x8d\x95\x1f\xfd\xa0F\xc6\x8f~H#\xe3G?\xac\xc9\xdfG?\xa2\x91\xf1\xa3\x1f\xd5\x8b\xe3\xa3\xafj\x89\xe0#\x14\x160\x0b\xd0%\xc7\xd4\x8f\xd9\xd4\x8f\x9b\x1a\x0c\x82~\xf4\x93\nH\x1f\xfd\x94\x1e\xdaG\x80\x9f+,\x03\x98\xb4\x02\xd8|\x04\x08\xb4\x82n~\xf4\xf3F\xa8\xf8\xe8\x17Qt\x86\xd4/\xe9\x91\x7f\x04\x08\xb3\xc2\xd4\xd74\x0c>\xfa\xba!\xcf\x1f\xfd\x8a!\xca\x1f\xfd\xaa\xe9\xeb\xaf\x99\xde\x00\x86L\x00\x8a\xdf\xfdY\x8d\x98\xdf\xfd9\x0d\xfc\xefB\x8b\x9f\x03D\xf8. \xed1\x0c\xe3\xbb\x88~\x98\x07u\x9d`\x1e\xa0\xd2\xdb\xf8)\xe0\x12\xc7o\x91\xd9\xc1\xd4\x7f\x17\xb9\x1d\xf4\xf6\xbb\x86\xdd}\xd7\xb0\xbb\xef\xfe\xa5\xc6\xb4\xef\xfe\x95\x86\xe6?}\xcdH\xeb\xff\xf4u#\x9d\xfe\xd3\xef\x1bv\xffO\xdf0\xec\xfe\xff\xfa\x0b\x98\xb5\xa3h\x06\xb3\xf3\xff\x10\xf7\xef\xddm$Yb \xfe\x7f\x7f\n0[\xce\xceP\x06@\x80\xd4\x13`\x88C\x89T\x15\xbbIQMR\xa5\xae\x06\xd1<\x89D\x00H1\x91 e&H\x82\x04~\xc7n\xd9\xfe\xcd\xee\x9e\xb3\xeb\xb7=~\x8cg\xe7=\x9e\xb7\xed\xf1\xd8]\xeb\xdd\xcf\xa29\xc7\x7f\xefW\xd8so<22\x01P\xaa\xea\x9e\xdd*\n\x19q\xe3\xc6\xeb\xc6\x8d\x1b7^7>~\xf8G\x92\x95>~\xf8\xc7\x92\x97>~\xf8'\xb2\x1a\x1f?\xfcS\xc9D\x1f?\xfc3I\xea\x8f\x1f\xfe\xb9d\xb5\x8f\x1f\xfe\x85d\xa3\x8f\x1f\xfe\xa5l\xed\x8f\x1f\xfe\x95\xa4\xeb\xc7\x0f\xbf!9\xe9\xe3\x87\x7f-Y\xe9\xe3\x87\x7f#y\xe9\xe3\x87\x7f+\x99\xe9\xe3\x87\x7f'\xb9\xe9\xe3\x87\xdf\x94\xec\xf4\xf1\xc3\xbfW\xac\xfa\xf1\xc3oI\xd6\xfa\xf8A\xa9\x15\x1f?\xfc\xb6\xce\xeew$=>~\xf8]\xc9^\x1f?\xfc\x9e\xce\xf8\xf7\x15\xf1?~\x80~\xf8\x1e]\x7f\xa8\x18\xeb\xe3\x87?R|\xf7\xf1\x03\xf4\xc4L\xa4\xfe\xc7\xaaa?~\xf8\x93\x1c\xfa\xa79\xee\x9f\xa9\xf6\xfb\xf8\xe1\xcf%\xcf|\xfc\xf0\x17\xb2\x1d>\xfe\xe2\xef\xca\xa1\xe7\xe3/\xfe\x9e\x14\x9b\x1f\x7f\xf1s\x0d\xfb\xa0a\x7f_\xc3\xfe\x81\x86\xa1Vu\x82\xce\xdf\x92\x92\xf0\xe3/\xd4\xd4\xe4\xe3/~[\xc3~G\xc3~W\xc3~O\xc3~_\xc3\xfe@\xc3\xfeP\xc3\xfeH\xc3\xfe\x83\x86\xfd\xb1\x86\xfd\x89\x86\xfd\xa9\x86\xfd\x99\x86\xfd\xb9\x86\xfd\x85\x86\xfd\xa5\x86\xfdG\x0d\xfbO\x1a\xf6\x9f5\xec\xaf4\xec\xbfh\xd8_k\xd8\x7f\x95\x12\xef\xe3/\xfe\x9b\xe2\xb5_\xfcB\xc3\xbe\xd1\xb0\xffC\xc3\xfe\xbb\x86\xfd\x9f\x1a\xf6\x7f)\xd87\x7fW\xc1\xbe\xf9{\x1a\xf6s\x0d\xfb\xa0a\x7f_\xc3\xfe\x81\x86\xfdC\x0d\xfb\xffk\xd8\xaf\xcb\x01\xe5\xe37\xff\x93\xe2\xf1o\xfeg\x0d\xfb_4Li[\x1f\xbfQz\xf8\xc7o\xfeW\x0d\xfb\xdf4\xec\x1fi\xd8?\xd6\xb0\x7f\xa2a\xffT\xc3\xfe\x99\x86\xfds\x0d\xfb\x17\x1a\xf6/5\xec_i\xd8oh\xd8\xbf\xd6\xb0\x7f\xa3a\xffV\xc3t\xcf\xfb\xe675\xec\xdfk\xd8oi\xd8\xff\xaea\xbf\xada\xbf\xa3a\xbf+e\xd3\xc7o~Ou\xc6o~_\xc3\xfe@\xc3\xfeP\xc3\xfeH\xc3\xfe\x83\x86\xfd\xb1\x86\xfd\x89\x86\xfd\xa9\x86\xfd\x99\x86\xfd\xb9\x86\xfd\x85\x86\xfd\xa5\x86\xfdG9\x8c~\xfc\xe6?\xc9\xb1\xe2\xe37\xffY\xc3\xfeJ\xc3\xfe\x8b\x86\xfd\xb5\x86\xfdW\x0d\xfbo\x12\xf67\x7f\x17hz\xf6\x03t\xfeF\xee\x04\n\x9e\x9dY\xe8\xfew\x86\x1b(\xe6\xa2\x0b\xe8t\x1f]@\x89Z\xad\x06\xee\x9fC8\xf7'\xe8\xc6\xd5\x9edr\xc3\x83$F\x00\x10\xb4\x9f\xf0\xc8\x1fV\xfa\x89\x17\xf9\x08\x04\xda\x86A\xe2\xa1\x07\xc8;\n\xc2\x10=\x90n\xe4\xa9\xa0?\xc0e\xa7\x94g\xc2\x0b\xa4N&c\xce\xd1\x07\xe4\xbe\x8a#t\x03\xc1#~UI\x87\xfc\xfd\x84\x8b\xa4P\xde\xc58\xf8\xfc\xcd\xcf\x81\xfa|\"\xcb\x04\x0dp\x11\x8c\xd1\x0dM\x90M\x06Ip\x81^h\x87^\xe2\xf9\xc3\x91\xc8\xf2/\xb0\x04Q\x84t\xfb\xf9_\x8a\xf2\x88T\xa0Q\x06\x13/\xf1\xa2\x00\xfd(\x1a&i\x96x\"\x7fh\xa0a2\xbd\x8c\x02\x91\xd4_\xe1BXO C\xab\\x7\xde\xc50\xcd\xbc(\xa8d<\x1a\x88j\xa1F\x1d\xf5\x02/\xaa\xe4u\xfd\x05\x962\xb9\x08\xd2aE\x13\xee\xbf#9\xd2T\xa0\xe2\xeb\xe1\xd6\xdf\xfc\x1c\x87\xc1 \xf3\xe3\x00I\xf3\xf7\xa1u\xd2\x11:q|A\xe7\xaf\xff\\\x8e\x80\x7f\xf3\xeb \x13z<\x14$\xfeu\xe8\xb3\xe9D\xe0\xfc&\x96\xa4\x1fDA\x86\xd5\xff\x0dh\xa90\xbe\x84|\xfe\xc7?\xf8\x80\xba\x89\x07\x99\xfc\x8f\x7f\xf8\x0f\xf5\xda\xdd\xff\xfd\xd7 \xc8\x92\xc0\x0b\xad\xf9\x0f\x08\xcdJ\xab\x8a\x97\x81\xd5\xbc\x95+#za\xc4\x9a\xcf\x7f`\x1c$\x94\x0f>-\xbbF\x14-\x9e0J\xc3\xc9 \xe8O\x9b\x15\x81\x9b?]\xc4\xaf\xc7\xf8\x1e\x8d\xa5\x0f\xf2\xb5\x9d\x84-l\x1f'\xdb\xb7r'\x04b5\x93y3\x99\xcdn\xe7\xa4\x16\xc6\xbe\x17\xf2\x0exh\xc0\xf2WIj\x06\xfa\xb6U\xb5\x9a\x05\x08\xf5X\xa4\x16q-RKxo\xe2\xf3\xf2\x110\xb5:\xef:q;\xea\x88\x07Df\xb3(\xdf!R\xc6\xb4g\xb3\xf5\xf6\xcf\xce\xae\xce\xd2{\xf7\xcf\xdd\xff_\xcd!?\xb0\xd6\xce\xaa\xcd_\xeb\xb8\xeb\x03jYhR\xc4\"j\xe7[\xc5\xc6\x87\x18\xf8`\xefz\xecX\xed\xb3\xb3\xd4r\x03\xd7\xea@\x17\x1eX\xc4\xb8\xef\x9d\xd4\xc2\xf8\n\x9f4\xf2\x98W\xbe\xc2,v\xd9\xfcL\x86.M\xfbg^\xf5f\xa7\xfa\xd3z\xf5\xa9\xc8B\xe6 *\xfeye!\xd4\xcb\xdf\xd4\xc5c#\xc5\xe7\xee\xf4\x1eH%\x88*\x19\x01J\xb1\xac\x1du\xe64\x9a\xe7O\x8a\xb1\x04\x1f\x1aV\x0f\x8c\xc9]\x00\x80~\xc6*y\xc9\x0cD\xb4-\xdf\x1aMp3QZ\xe7n\x95\xdeh\xc0\"\xaf\xad\xe1\x11k\x8e\xf6\xd9%\x081\xd5\x99\x06\xf3\xb9\x8c5\x9e\x9fu0m!\xace\xf9\xeb\x08xx\xa0p\xf2\x81\x13\xea\x15\x00\xe2\xcc\x9f\xda\xab\\c\xfa5\xa3<\x95\xdc\x0c\x96\x8c\x98\xefY\x0e\xbd\xd4x\xf4M\x1e\x03%4d\xf5V\x98o\x80\x86\xae\xab\x0c\x1e\x04\xed\x10\xdfrXK\x1d\x9f\x14\x0b:a\xbc\xedw\xe8\x98em_\xe04\x18\x1a\x067(8\xa1c\xea+\x1a\x12\xc3\x00Fl\xdb\x935\xc6\xc6:\xc9\xfc\xe5\x86O\xec\x89g5\xaf\xb0\xc7\xac\xe5F\x86\xe8\xba\x1d3\xd5-Do\x1c\x92V\xc6bIauZ\x8dzz\xdbM]\x02\xf5\xf43\xf9\xf2Y|A\xc9:R\x9534\xa7\xbemYM\xde\xaew\\\xabb\xb5\xd2\xad\xa0\xe5\xba)\xc9\xd0\xd0\x18\x94\xa1\x9dvh\xa2ze\xe9j\xe0%Z\xa4P\xe9\xa1\x95\"\x95\x80j6\x9f\xd5[\xfe\x96\xd7r]\x9fd\xed\xd0u1\xd9\xb6\x8f\xd9\xd1\xb8\x90\xfa\x92;>\x0b\xb7\x13\x8c\xed\xc1:Q\xd5\xdc\xdc|&\x1e\x8dt2M)RD%@K$\xc2\xe6\x13}\xa5Qw\xec\x11\xb5\xee5,\x97\xab\xb8xU\xb2\xf2Pc\xaa\x00\xf7\x8e(\xc6\xf5\xd2\xfaV\xe3~d\xdb\xf5\xadL\xef\x9cZg}+7\xcco\xa4\xe2<|\x82\xfb\xa5\x85\xd2B\x9b@\xf2$O_?\xda\xe5\x1a\xe4Id\x7f\x0f\xd4\x892\xeeZ-\x8b\xa6l\xe3~\xe6n\xde\x8f\xdc\x07\xf7\x03`\xe6\xa7\x0f\x1e0\xc6Rr\xcb\x99\x97\x17\xa9i\xd1\xa7\xc4mH\xc3\"^-\x9dt\xc5\x80\xe2p\xea\xe9{ \xba\xede\x01\x8a\x98u<5%\x88\x13b\xe6\xd0ovf\xb3\x0d\xf8\xd8v\xec\x84\xb4A\xb6\xad\xea\x15\xef^\x04Y\xd5rC7l\x86s\xb9O\x9c#\xae\xc5\xf8B\xb3\"\x91\xa7\xda6\x95\xcd\xd6\xa87\x1e\xaa\xe6x\xfa\x18\x18\xd7$Y\xa3^\xc8\xc3s\xbd\xa6'\x1a\xf1\xe9\xc3\x86\x8a\xd6h<*\xc7\xdb\\\x19\xed\xd1f\x1e\xad^\x8e\xf6pU\xb4F\xbd\xfe\x148\xa0Q\xaf\xaf\x95\xe2< $\xbf\x86[y\xfa\xe8\xa9\xe8\x93O\x1fl\xa8K\xcd\x85\x14%\xda\xe3'\xcbB\xad\xea(\xbe1\xf1\x1a\xf5\x86J\xef\xc9\xe6\xdd1\xac\xea(5\xa3>y\xb2 %~\xf0\xb0\\\xc9'\xfaRT\xb1`\xc8\xe0\x06\x1b\x05#o\xc0\xab)\xcf\x1c\x8b6\x8c\x16\xd4L~\x0e]E\xa5qo\xc3\"\xae\xd72I\xb1\xb9\xb1\xbc\x00\x0f\x88\xbaz^\"\xbef\x89\x85\xaav\xe3k(e~\x84\xa4:Hb\x98\xb6[\xc4-\xd3#-bJ\xc4q\x9c\x06Yp\xc9\xb1\x94\"\x1b\xcdx\x9fH!\x1d&A\x04\xaa\xb7z\xf9)O\xe3\xe9\xaaf,%\xd1\xf5\xd2\x00\xcf\x02$\xbc\xcf\x93\x84\xf7\xaaip\x83\xe9\xcc\xef\x88\xafsy\xf4`e6\xfd\x90_\x179f\x03\xdb\xfd\xe9\xd32\xa3>Q\x8c\xba\x84\xb6c\xcf\xbf\xb0\\\xa7(\x03\x8a\"\xa5\xf1\x90\xe4\x1a\x93%\xb2-hQV:\xf6|^\xed\xf2\xec\x8a\xa3\x9a\xfdn\x92fA\x7fj\x91em\x84 \x88l\xc3\xbc\xecu-\x0b\xfa\xb5\x8c\xa7\x99\xe3\x91\xed\x9c\x8ccj5uB\xc4-\x05`G F\x9f\xe5\x9bMe4\x81\x95\xaa\xd6\xd8$z<\xd1\x95\x84\xd8\x0d\x1a\x16E\xb6[\xf0g\x8aG76\x1e5CC\xe5\xecR+\xebZ\xc4\xe4\xff\x8d\xcd\x8dE\x94j\x12\x96\xb06\xeae\xac0\xb1\xca#\xb2\xea{wp\x8bA\xc5\xc6c\xe0\x00\xf1`~^\xbd4\x0b\xfc\x8b)\x8c\x0d\x05\x81\xf5\xf8\xa1A%\x8f\xe9\xb3E\xd5F\x9d\xa6@7gs\xb3\xdc\x833h\x15s\xb0\xc8H\xd3#\xe6@S`\x9d\xc7\xc4m\x90\xe5\xe3\xb7\xeb\xd4g\x05\n?&\x9a\xc4ud\xe4F\xa3\xf1,\\\xca\xc7\xba\x17\x9b\xba\x7fH\xcd1\x89\xc0\xd0U\x14K\x1b\xf5\xc7M\xd5SV\xc7t\x1a\xf5\x8d\xadt\xdb\n\xa20\x88x\x15\x9f\x13s\xadn|m\xc9$\xef\xce\xb0\x10*\x9b\xc7\x8c\xadF}\x0f\xbcJ\\>Y..\x1f.\x17\x97\x8frq\xa9;\x8d\xc9HVU\x9d%\x82\xd9N\x91a\nR5,\x08\x92\xf0s\xc4#\xe2B\xf2\x05)w\x81\xe2\xd8+1\xed\x8a\xd8HV\xd1\xff\x8d2{a0\x88\xaa\xf8Z\x1b\x9e\xc61\xc4\x8bL}^\xe0\xddM58>\x15\xb4+\xcb\xbcM2\x9b566\x96\x8c@\x85\x81\xaa!\x93y\x88\x1c\xb7\x06z\xc1\x9e\x90?\\\x8f{\x8d\x06\xb4\x8c\x132\xbe\x8a\xcf\x81\xcbK\xec\xbd\x9d8\xc6\xb9\xc74K\xb88\x88\xd5\x0f\xc2\xb0\xea]zA(\xac.Jm/Gm\x960\xa8\xd5T\xb1Is5\xf3\x95\x18\x0fU\x83\xd0\x90\xda\x90(\x92\xb5O\xb0\xbd\xec5\xf1\xed\x1d\xd6h:;l\x83\x1e3N\x9a;\xacNhZ\xbc\xc4\x18\xa9\x0b(xCms\xf3YZl\x1b\xdbvR\x96\xaa!\x8c\xa6\x0c&\xb8\xf5\xad\xd7\"Z\xc8<\xa7\xda\xa0\x11MiJO\xe9 \xad\x8b\xffIK\x977\xb4\xed\x85U\xbd\x10\xed\xa7\x85\xc2V\xe4X\xaf\x17T\xb8\x03)\x85tL\xfby\x9b\xf4\xe8\x90\x8eh\x97^\xd1\x0bV\xa7G\xacN\xf7X\x9d\x9e\xb3:\xddguz\xcc\xea\xf4\x80\x8dX\x8f\xd5\xe9!\xab\xd3]V\xa7/Y\x9d\xde\xb0:}\x93?P\xf9\x9c\xbd\xa96\xe8=fY\xf4-\xfc\xbc\x87\x9f/\x99e\xb5\x0e\xb7\xde\xb4p9s\xc8\n\x83\xed!\xa1\x87\x8c\xb1\xe7\xb6\x0d\xb58r\xcf\xdd=\xf7\xc2\xb6\x1d\xf4\xd9\xb63d\x0f`\xd2v\xb4\xdd\xa87\x1f<&\xf4\x9c\xed1(\xe0\x1b\xd7\xa5\xcf]W\x18Z\x96\xd10}\x99\x9aS\xdf\xda\xb5m\xe7\x1e\xbb\xa7Yx\x82r\x89\xd6\xb7\xee\x15o\xc9\x10m\xd2k\xa8\xa6\xfa\x1bR^\x8b\xcfC\xf9ml\xaa\x81\xbd\xc4`\xf7\\Y)\xac\xd0|\xc8\x1e>\x9d\x97\x92lll6\x81\xd4=\x86eZ\xaa\xab\xd0\x11k\xd0\x1b\xe6\xba\x87\x92\\*\x8d2\xc9\x8c4G\xaek\xca\xd9\xc6\xc6\xc3\xe6\xa8Z5A\x0f\x1e7W\xa4\x03\xc3\x89H\xe9\x81\xac\xf0\x83\xc7M\xdeD\x968`\x87n\xa3u\xb0\xf5\xbc\xe5\xba\x07\xaa{\x16\xa2\x1f\xe8\xc8\xa8\x0d>\x00I>\xb4m\xfc\x16\x11\xab\x0db\xdb\x87.\xc8\xb1\x03r{\xc8\x0e\xdc\x86(`\x85\x9b\xa3m\xa3\x8e\xe9@s\x0f\xcbh\xf3Cv0/\x0c\xcd\x8d\xe6\xd0ue\x0d\xeb\xb9{\xf3\x81\xa8\xc9\xe6S$w\xeb\xd0u\xb7\x9e\xdbv\x89\x80k\x8c\x0d[\xa4\xa5V\x13Fr\xb4>t]\xd5n#\x16\x1aR\xee\x86\x1e\nN\xeb\xd9\xb6jB\xc5V\xbe\xb1\xfa\xbc\xb0x\xd4\x934z\xf4@5\xc2J\xbe\x1c\xb2{E\xf9\xac\xd5/\xb5\nWW|\xd8x(\x9b\xebas\x97\xa5%U~\x97\xbd\x80z\xdd0g\xc4\xb8\x93\xd2]:\xa2C\xdaG\xddAv\xd3\xfa\xd6k\xdbv\xae\x98\xe7l\xd2\x11\xdde\x99\xf3\x82\xde\xa3/\x89\x94.7\x80O\xc7\x84\xdec\xbb\xf2\x00\xb6e[\xa7#&;\xdb\x0d)\xf7\x84\xc6\xc3\xa6Y\xfdk\x1a\x90\xd6\x8a\x9a>x\xd8\x1c\xb1{\xaeuk\xb9#\xd7\x9a[\x05V\xaf?n\x8e\x8aM1\x80q\xb1\x02#6\xc9\xe3@\xaf*--Y\xbff\xb9#\xbaI\xb6\xad_\xcb\xd5\x91\x91\x8b\xe0&\xfe\x96h\n\x85\x18\xd1F\x03R\x18\xdb\xb6\xf3\xd6e#QEa\xd6\x05\x9c\x0bQ\x80\xf8\x99\x93\n\xca\x8e@\xda\xba\x0d2\x7f/\xa2\xbed\xbb\xec\x00\xc5)J\xcbR\xd7t\xddCR\xee\xd6J\x14\xc1\x94e\x0b\x88\x7f\x8f\x013m\x97\x18\xa9y\x8f\x94\x9bD\xb5\x00\xb4\xda\x012\xf0\xbd\x92\xe0\xc1IAo6{\xfah\xabg\xdb\x8d\x8d\xcdg=h\xc8\x9b\"y\xad\n\xa8\x89V\x9e\xb0`\xa4|\xcc\x04\x8ej\xd0{4\xa5\x112\xd2[\xc5pc\xe4'\x923\xce\xbd\xa5\x8cs\x8fYg\xf5\xb3\xbaE\xe8b\x11\x17\xba\x87\xee[J\x1a\xab\x8e\x86\xcbhP\xa1\xe1l\xf6\xf4\xa9\x90&_\xba\xec\x9ek\xc8h\xf9f\xacj\xac\x87O\xd6X1\xfd\x1b\x14Z\xd0\xd0\x89s\x8f\xc2\xe0x\xaf\xa4-\x91\xf9\xa7\xdbp\xbe0\x0c\xe4C\x88\x1c\xd7\x8eX\xbd Ti\xb8@\xf9\xfa\xe35\xe40\x18\xa4\x04]l\xdb\xd9e\x0dz\xcf\x05\xdaXH\xf2\xfb\xafl\xdbs\xea\xab MOX\x83\x9e\x16G\x06=\x88mi\x96bu\x17{\xcc&\x0c\x10P\xdf.\xb3*\x161\xa5}\x1d\xf0\xcf\xce\xeaE\x01\xb0!\xa0\xfd\"\xb4!\xa0\x97\x05\xe8\xe6\x93\xa6(\xe4\x11j\x17\xbb\xec%kP\xc0\xeb[n\xb7\xd8\xd5\xeaO\xf2*\x1d\xb9\x17\xee;h\x0d=\x04\x1eV\x0f\xd4\xf2AS\xc8\x83}\xdb\xc6\xa5\xf8\xe2\x10S\x85i\x89\xf3\x8e\xedK\xd9\xf6\xa4\xd9\xc0i\xcc1B\x8f\x0b\xb5{X,\xdc\x01+v\xfe\x07\x0f\x9a\xa2\xb5\xf6\xdcsY\xfa\x06\xed\x02?$\xc5\xa5\x1ec\xec\xc3\x08\xb6\xed\x9c\xb3s\xe8\x00\xdb\x82\xc7\xce\xb7\x87\xcd\xf3B\x94\xa7\x0d\x9d\xf5\x9em_\x14Y\xe6\xe9f!\xb0\xa4V4\xccB\xef\x95\x02\xeb\x05\x1aj\xcb[=E\xc6\x8d\xfb\xfb\xee\xe6\xfdcI\xca\x87\x9b\x9b\x0b*{c\xbe\xe7\xba\xf3b\xcf6\xc8\xe0\x1e\xb8#\xdbvF\xacQ\xa4U\xae\xc8\xa0\xed\x98\xfa\x16\xe0\xeei\x11x\xa4e\x86.\xc8\xd0\xdd\xbc\xbfJ/\xda\xd8|\xd8\xe4^/'\xedr\x9c25\x96c-\xb4\xd3r4\xcdH\x02'\xf4\xd2l_\x9d\x12\x96\x81\x96|\xd9QV\x841\xe6\xf8,\xcc\x0f\x13\xe7\x85&\xcf\xc6\xdb\x96\xf4YM\x13\xc5d\x04@\xd2\xfe\"\x1a\xbf\xf6F\xe3\x90\x0b\x1c\xe9)\xa1\\WU\xa84-_\n/0: \xe6\x00\xab\xa9+Al{\xcfI\xa1s\x19EYc\xcc\xb7m3e\x80\x08~\x1a2_nY;u\xea\xe7g\x95[y\xfa\x96\xd8\x08O\xe5\x10\"\xbe\x8c1\x83\xb1\x05L\x9c\x17\xc3\xf7\x05\x8a\xf2A\x06\x8bu\xd1\x11\x13\x17zQ\xdb\x1e\x05I\x8c3\x88![\xb2t\xc0\x8d\xb3\xd8\xd0\x05\x9e\xb1\xfa\xb6\xb6(\xfa}\x8b\xb4\x1b\x1d\xd3\xbe\xe88\x1e;\xa4\xc9\x17@\nP\xb3H\xbb\xde\xa1K\nh\xf6Q\x02\xa3L^6\"\xce\x86\xb5\x16:]i\xdcp}\xd7Z\xb7\xdc\xa1;\"-\x02Q\x18c\xa3\xed\x8d\xa6\xeb\x8e\xe4r\xf0\xca\x08t\xca,\xab\x95\xf3\x05\xc3\xf6rRv\x8b\xab\xd4\xcdt\x0e\x18\xeb\xe8\xb1\x08](\xc9\x80\xa6\x84\x16{,\x1b\xb8S!_\x07\xeet>\xc7#\xd3\xc6$GT\xad\xa8s\xe5\xaa\x96\xe0\x8c\xae\xe8\xea\xd78\xa0fC\x83\x15U\xf7y\xc6\xea-k\x9c\xf0\x94'\x97\x1cJ\x8de8 \xba\xa1x(\xdf\xb9\xb6m\xcb\x0b\xc3\xa3\xfeB\xe0v\xae\x01\x81\x84Z\x1c\xfbn1^\xb3}\x0b\xc1\xcd\xee\x9c\xf2\xce\x9c4\x17\xd1d0\xc1*B\xcd\xd2j\xdc\xf32\x0fr\xcc\x96N\x1f\xb3\x8em/\x11\xe9J\xc0^\xb5>g\xc44\x02\x97\x8d^\xa5Q\xf5\x93\x03(\x0e\xb3\x7f\xbbch\xae/\x9d\x14l\x9c\xe3$\xb94g\x86\xe1D\xceo\x8d\x9e\x11\x91V\xb4\xc6p\x12\xd8\xce:\xed\xa4\x83tjG\xc6\xdc\x01\xbdf^\xa7z\xf5\x05\xaf5\xfa\x05%Xj\xdab\x17\x89rA \xce$&\xa1V\xecM\xb2\xe1F\x1eG\xadL\xdd\xce\xf1.F?\x8c\xafZ\x967\x16v\xb7\xc5N\xbe\x04\xe3Mp\xcb\x0f\x03\x1ee/\x12\xde\xe3Q\x16xa\n\x89z\xbe\xcfS\\}+\xa3Cnq\x12\xdc\xc8m\xf5\x1e7O\xca\xf2Z!\xf8M\x82'\xf2\x17\x80K\xf0\x14#l\xa3\xf8\x91G%g3T\xb7\x96\xe8\xc6Y|\xc1u\xf2\xca\xc3r\xf8]\xc9E\xb5\xd4\x8f\xc7\x1c\xe6\xc6\xc2\x81\xc6>D\x1da\xce\xa0\x9c\xd0xQ\xae\xb2\x03,\xf7\x95\xcb\x9f\x87\xa8\"\xe4\x10\x91\x8bI%9\xcf\xc8\xc4\\z[9pR\xad\xa3\xe1p\xd0,M\xa9DkWR\xeeO\x92 \x9b\xe2\x02\x1fO+\xe9Pw\x85\xa1w\xc9+\x10W\xcd\x01\xa7\x16Z\xc7\xcf\xf9\xed]\xf1\xb9\xc95\x94v\xe9F\\\x95\xe6\xad;9\xeaN\xbe0\x882\x88\x88\x0f\x13\x9f\x95j\xda*=\x8f\xa8%\x01\xc1\xdck\\\xefR:\xca\x89\x936\x83\xfb\x05\xd4\x9cn\x1a\xeb%\xe6$P,\x7f\xe8x\xc2\xeb\xc7a\xc8\xb1*/\xd1\xee9b\x96\x818k~\xc5\xd3\x8c\xf7*\xe5\xb0\xb4\xe2%\x1c\xe9\x9aN\xc6\xe38\xc9x\xcfB\x0b!y;-\xcfI\xcfPu\xc7\xdcv\xac4\xbd\x14\xfe2\xf6\xf6\x91c\x95a\xcd4\xbd\x14\x1b\x98\x950\x8e\x06<\xc9\x8bP\xe9\xc7IE\xe9Z\xc2`\x895\x0e\xc6r\xce\xf4y\xa9#\xfe\xb7H\x1f\xad\xbb\xafH\x1fO\x0c\x84q\x0f\xa6\xe6M+[YKgYA\xb2\x95\xd5\x94\x94F\xfe,G\xb3:\x0c3B]&\x9b\x86\x9cY)>\xace\xe5-\xb3\xd0&\xcde\x8d\xff\x89n\xb8\x98H\xa9K\x96\x11\xa02q\x14N+R\xe8\xcawZ\x049\x91\x13\xd4\xeaGf. \xe0\nX\xf1\xd8\xd4em\x85\x1d\xffV\xb4\x95\xe8#U\xb8~\xa5eK\xdbcI;\xeat\x8c\xce\xd3\xf6`\x14\xf2\x8c!\xc8\xeb\x90\xb9\xcaJ<\x85\xb1\xb8DV~\x1a\x03p\xbdV!\xa3\xa0\x1d\x7fFF\x86\xe4yQ\x12'\x86\xe2Z\xd2\xdd\xcd\xe7\xa9\x11S)\xb4E\xbc\x96\x94G\x11\xdae\xf9\xac9m\xd4nt\xc8|1\xff\xe2\xba\xc03VG\xb1\xb0\xab\xa1\x95I\xca{\x15/\xad\xe4:\xbfx\x1bN\xd7n\xbfx P\xceEi\x08c\x8a\xcf\x84\x8d\xa0\xcc\xb63\xbd\xec\xb1D\xf5\xca\x03\xc5\xd1\x07O.\xbdJq]\x1e\x0d\xc6\xf2|\x9b\x8e%\xd6\xd9\nkl\x1eiy\x06c\xe79\xb0v\xee\xee\xcc\x8b\xebY\xc6\xda\x8c^h\xcaa\xd2\x12\x90\xe3d\xdby\x12\xf8\x0e$\x99\xcdr\xb4\xd9\xac\xdd!\xea\xbd\xa9\xcbZ\xfef\x88xU\xd0\xb6E+,]\xfd\xc2\xd1\xe6\x16\x18\xc6\x13S\xa2>[\xa2\x13.\x8eC+8@]9Z\xc3\xe7z\x9dw\x0cJ\xa90\xf3n\x96\xb6\xfb\x1db\xdbk\xef\xcaC\xe2l\xb6\xa6\x18\xb1\xa4\x11\xcff\xce\xc2\x00\xca\xd6\xea\x90W\x1d\xaf\x0f\x88\x89\x8d\xd4\xe1\xa7l\xec\x04TV\xaf\xb56\xb5\xed\xc1B\x8a\xdb\x9fTm\x07\x14\xc8\xd2\x9cB\xdfcS\xa1\xd7\x8ba\x0f\x06~\\\n\x8d\x08\xb9]\xb1+\xd5\xe3\xe3\x84\xfb^&6\xf8\x1c^\xcb\x01l\x01\xa1\xb8\xefc\x04\x98j\x1f\x84\xa9\xe9\xbbHR\xfaJA\x85\xc44\x14\x17i{0RB\xb9\xa1\xf4bA\xd7\xf1\x94`\xf6\n\x1b2B!\x96,\xb3 \x8eu[\nQ\x1b\xa4\x95\x91\x17\xf5\xbc,N\xa68\xacEqT\x85\xec*\xc6\xda\x00\xf5H\xaet,n\xba\xe9u~\\\x04\x17,\xab\x14s\xd1\x9c:\x80\x10*\xceh\x15tx\xc5\x1fq\x12\x0c\x82\xc8\x0bA\x9a[\x1d\x89@SC\xb1\xe9\xf1\xd4O\x02\\\x93]Z\x92Bx\xc1\x9b\x97\xcb\x00\xca\xe2\x95\xd1\x08\xc1\x87G\xb1\x8c\x85\x14\xf5hd@[r\xa2\xbb0\x12\xe2\xca\xd0\xc22|w6s\xba\xcc\xf2al\xa6]\xdb\xceQ4=\x96\xb6\xeb\xaf|\xc0\xc5\xf6-\x8c\xb7\xd0\xcaX\xb05\xc6\xba\xb3\x99\xf5~\xc2\x13\xa5=\x02\xb9\xfd8\xbe\x08\xb8\x02\xe0F\x82T-\xc4\xedzC\xcdi\x14S\x82\xc9\xbf\x91\x90\x18\xeb\x97%$u\x14\x98\xd4\x08- )$\n\"v\xf1\xa2\xed\x1cy\xec\xf9|\x97\xe3\xb1S\xde\xb3\x9a\xdfRI\xe4\xd7>\x1fg\xc8\xf4A\xd4\xc4<\nL\xcf\x05A\xb4\xe2xWQ\x00\xe9\x13%\xb9S\xa1\xfc\xcc\xb2h%\xb3+\xa5\x88\xd2* Uj%\x84|{5\xd2\xfb\x94\x1ay\x07\xff-H\x86\x9c\x95\x85\xe02\xfc\xc0(\xbb^\xe6!,\x88\x08\xaa:r\xb6\xa2\xd4$r\xe4\xe4\x0b\x87\x95\xa1\x97\n\xfe\xa4\x88V\xf1\xa2\x9e\xdc8\x13\xe5VS&5S*\xcaB\x05]\"*D\x90`>sj\xb58\xa3\xca'T\xf9\x84\xab\xb0}\\\x9a\xec\xd0Q O\xbce\xbc\xf0,\xd6B#A\xfbE\xcb\xb4\x9ev\x04\xc3F\xd7\xb6\xc1\xb5\x86\x8d\xfc\xad\xe7d\x9enC\xbc[0'$\xdff\xbefuzu\x87>}\xbdu\xa5\x94\xddk\xa5\xec\x9e\xb3\xab\xf6\xb5\xb9\x1f\xdc>/(\xbb\xe7\x1d\x04\x19\xe7V\xce;\xf3y\xde${\x1aUs\xdf(\xad\xa6\x17\xc1\xb8:I\xc2\xaazb\x16\x0fp\x14z\x9d8\xe3\x12\x86\xf1\xd5\xb1X6\xec\x81>QX\x9a\\\x9a\x0e\x91j@\xce\x842Ar\x8b/l\x875i\x07\x86\xdd\xceQ\xa8\x9f0sah\xfd\xbazuuU\x85\xc8\x90\xb0X\x01\xee\xe1\xc9\xe5\x89\xde\xf9\x9d\xe4*\xb3x\xee\xcbK\xb2u\x8c\x82\x0b\x8aBovN\xd8\xf2\xd0\xbc\x08\xed\x93\x8eXj\x91]\xc2\x0c\xd0\xa7n\x15\xf94\xb3\xc9!.T\xe3)h;Vg\xb9bhD\xf9\x9c\x95H\xb9\xb1t\xbb\xac \xb7s\xba\x04,\xf5\x10\xd9\xf1\x96b\xe4{-\xab\xd2\xc81\xdaBy\xeb\xa8\xc69eK\xf0\xe9\xbbe\xd0%\xa9\xb4J\x03\xbb\xf3\xae\xa0\x16\x14B\x85\x11UT\xc6\x10Q\xebn\xcae,\xc8\xbc+\xac\xc4\xe8\xfe\xb5\x83f3V\xf7\xaf\x9d-u\xcb\xa8\xb5\x03\xfd\xeb\x9c\xed\xb7w\x16\xfb\xd6;\xdd\xa9\xe6k\xe2\xdc\x84\xb1\xff~j\x1e4;-n\xc6\x9f.\xdfq\xa7a\x8e\x06c\x88\xb1\x04'/9I\xca\x08\xcb\xb1\x1aJ\xe8;\x83\xa6\x88c4%7<@\x1a\\\x85G$t1 Y\\\x01\x82!@ \xdaw% \xfbn\xc5:\x92\xd6\xc9V!(\x85s\x8d1\x98P*\xf7\n\x9ds6SM\xa8\x840}W\x13o\x022\xab\x1bD^2\xb5\x08}\xedp\xfa\x8e\xcc\xc5\x9e2W\xa9\x16\x97\xa5\x8d\x96 \x97\x1d\xf3#\x05yc0\x7fA\xe6\xc4~\xc6\xb3j\x9a%\xdc\x1bY\x9d\xcfF\\\xda3?\x8d_\xaa\xf9\xb7\x8aZ\"\x12\xd2($j&\xabf0R\xde\x16\xaa\xae\xd7{\xcbrK\xac\x06\xe8I\xfc~o;_\xa7\xd8\xc1\x07\xaf\x8d0\x82\xd6\xa1\x1c\xeb\xdcr%w\x9bo\x91:da\xf6\xe0\x84ww\xf9O7`\x06\xdaF\xd2\x15\xa5\xcfW\xad\xdb\n\xd8a\xaa\x9f\xe5\xa3^A\xf0n\xff\xadH\xea\xa6\xa1\xf6\x18=\xcchb\xa3\x18%\xddKv\xa2\xef0\x90\xe4\x11?\xab\x90\xaez\x8f\x95\xaa\xc1s6\x9b\x08\xe1T`\xb6wi\x1cY\xb9 =fu\xfa\x8aMZ\xc7[\xaf\x94\xc0\xee\xb4r\xae=(u\x98\x03\xdd/zN\xae\xff\x81\xd6\xb7\xe7,\xc1\xa2\x1e\x99\x0b.\x9e\x9b\x9b\x9c\xa1\xde\xe4\xac\x9bsWsm#\xd3\xc7\xa1x\x9a=\x8f{S\xdb\xf6\xb7\x8b\x10-~.y\x12\xc6\x1eh\x12\x18\xf5\xc8\xb1\x8e\x14SW,\xb7\xc8\xe3\xb3YL\\\x0bUb\xf5\x98h%O\x13_\xff\xcc`\xa2\xd0,\xe65\x9b9\x19\x8b\xdaI\xa7\xf4\xecs\xbe\x9a\x8a\x9bau\x1a\x97\xacl\xdfq\xe2\xb0\x15\xb5\x03\x18\x8b\x82\x0e5O\x110\xc6\x02\xdct2\xb2\x87\xd43\xddO\x9c\xa8\x9d\xe9\xfe\x01\x9c\x90[:/\xc5\x89\xe6\x0e\xd6\x86\x16*\xa3\xdaI\x1d#+\x81\xdbK5\xab\xce\xb7\xc3\xd6\xfd\xe7;D*\x0c\x8c\xe1'\x8b\xf5)\x0c]\x94\xcfD4\xb2/q\xdc\xb7\x8e\xcf\x8a\xefH\xffr\x89\xd1o_\xfe\x15\x0d\xff\x89\xf8ZR\x7f\xa7\x02\xe7*T\xbbCj\xf2$\xfe\xe7\x16\xbd\x10\xf9\x97*\xbc\x16\x89j\xc6\xf6K\xa4E\x9a\xdf\xae\xff|z\xca\xb3\xba7}F\xdcO\xf5\xad\xcfObUO\xfb\x8c\x14\xbe-\xfe\xb2^\xf8\xf9\xd1>\xa7O~\xa7\xd4>\xaf\x87~\xa7\xa4W)\x7f\x9f\x9d\xc0\xca\x0e\xf0-R\xfbd_\xfe\x0ei\xad\xea\xd9\xdf5\xa9_a5?\xb3\xd7\x7f\x87\x94\xcb\x1a\xc1]\x8cC\xc3R\x9d\x8aJ (\x13\x85r-\xef\xcf\xb2\x00\xa8\xe5\xde\x91\xda2\x95reB\x9f\xa5X.>\x16n\x81\x044\xb4\xa8\xb2rV*\xd1]s\x0c\xf1\x9f\x9c\xd3,\x1e\x0c!\xb7\xcb\xb7\xab\x85\x85\xcc\xd5\xd3\xff\xc3\xad]\xa5f\x1d\x8a\xe9\xffn\xfb\xb0\xd32\x17\xce\nK\xe8\xea\xc9\x90\xb5\xe2\x12@iM`\xf5\x0eQbL\xfa\x17\xf7\x87\xb2\xa1\xb1\xf4\xac7LU\x9cf\x96Lx\xa5\xadfY\xaeU @Q\x8d\xf1\xa5\x1b\x8f,{|\xe3uI\xdd\x14\xc7\xc5\xa2\xc2\xc6\xdeu\xd5\"\xb6\xbdV\x06\xa6\x1b1^s\xca\xda\x11h\x9bQ\xc7\xd8O>\xce\xf7\x93\xe5=\xf8\xfc)\x16\xbd\x85\xbez\xf3\xf43\xb6\xb8\xb7\x8f\x1c\xab\xb7\xb8\xc3\xadN\xec4+@\x05\xdc\xb7\xe44\x86y\xd7\x92\x1dP\xf3x\x0f.\x0c\xe0\x86\xfcg\x1d\xf5\xfe\xac\x0d\xdd\xf2\x89g\xb5P\x17\xf4\x9d\xfc\xa2Far;\x9b-\xdb\xdc\x9a\xcd,kq\xc3+\x96\xfb\xeb\xb6\xedH\xe7\xf62S\x03\xa5\xab1d6S\xe8\xea\x92\x981\xd3\xee\xb6y\x07r[`=U\x15\x13\xbb\xb0Ai\xd1\x98\x14V\xa9D\xd7\xc7\xd67\x96\x93cR^\x12]\xc2\x03\x85\xf0\xe2$\xfb\x13\x0dh\xa0\xfe\x12\xed\xb8B\xae-6'\x8d\xf0\xc6\x9d\xbc\xbb\xb1\xa4.y\xa0\xe8\x06\xf1g\x9e\x89P\xb1\x96\x9c\x89\x88I\xcbl\xbf\x1c\x97\xb5swg\x9e\x18\xc5Z+\xf2@\x1eD\xf4\x12]\x0e\x93/\x0e9N\xb4\x9d\xa7\xa7\x0eH\xe4hw\x1d\x90\xd0\x83e W\x0d\xee\xaf\xdf\xb7\xa0\xe1\xe58\xc9n\xe7Z\xfez\xacNS\x16\xb4\xbc-u\x01\xb0\xe5\xa9\xe9l\xc8\xd2\xb6\xd7\x11\x02C\x0d\xb1\xa1\\|\xcf\xfd\xb2\xb9\x8c\x85\x03cU\x18\xd7O\x94\xbb\x1dv\xd4}\xb9\xdby\xcb\x97FB\n\xe1\xc5\x94U\xc0B\x96*\xa0\xa6x\x82\xf9\xf9F\x93\x91\xdc\xdcX~\\(q\xbe \xb9X\x99[\x08k\xea\xe5>\xb1\x82\xd7T+xs\xe3\xa6\x9e\x88\xa0\xcfD\x85\xe2V\xac*\x03\xd1\x89\xe3nZ\xde\x00\xa4P!3P\x90\x98|gJ|\x12c\x19\xdd[\xc6 v\x0d\xa7\xbc&O\xf2\xe9\x03\xcc\x13Q=\x05\xb6\xc4]\xfb\x8a/\x8f\xfbN\x8a\xaf\xc2m+\xc1X\x10y:\x1f\x99J{\xd2\x01y\xf7\x03\xb3+Z'\"a<&\\\xb6\xc5\"\xe2\xfd\x00\xc6\x95\x1d\xc7L\x86\xc6\xe6a\xd5W\xe6 \xa8*\x10\x88\x11V^\xf6\xe1\xed\xa0\xd3*4]j\xdb)\xe8.Y\xe2\xf9x\"ea{\xb4\x18\xec\xa45t3\x13\xac\xaah\xc2\x08UI\xa7\x93\xd1\x08\xb8h\xd9\xf5\xeb2\x82\x93\xd6\xa4\x8f\x15\x83\nYhh\x9e\x891N\xac\xce\xa8\x84\xe4\xa4\x85\xc1h\x11\xa5\x90i!\xc4\xa8\x1dO.y\x92.\x1a\x00(\x86\x12Q7\xe1e\xc5\xb0b\xddt\x0c\x9a\x92\xa0\xef\\\xd6\x86Y6>\xe4\xd90\xee\xa5ZE A'A+\x07\xde\xc8\xbb\x89\xa3\xaa7\x0e\x06^\xc6\xaf\xbci\xd5\x8b\xa6\xd5\x11\xe2\x03\x8b\x86J\x04)\xb6\xf7m\xdb7\x8eq\x95\x8bm\x86\x89\x1b\x8e\xe6\xa1/\xdd1\xfa\x85\x0b6+\x14+\xdbv^\xa0\xd1\x05\xca\xd9\xd8\x89\xa9>\xf8cfR\xeb\x07Q\xcfY\xd8\x11W\xba\xa3\xba\x1e\xa4\x16\xd5\xb3Z\x10\xc9\xcd\x839!\xb3\x99y\x8e@\x1d*\x91G\x0d\x94Wo\xf4\xa8\xd3R>\xdbw8\xf5\xd1\xd2}@c(`\xa4W%Q\xf7\xf1\xdb\n\xd0\xd1c\x96\x01#s*,Y\x9b\xb4i\x0d\xb7FjL\x19\xc2\x98\xd2w\xbal\xd4\x1e\x1a'H\x07\xacN\xa7\xcc\xac}k\xb05U\x91\x06j \xea\xb2i{\xd0iA1\xbb\xb2\x98\xa1k5-W\x14v\xfe\xed\nK\xa3Z\x8fw'\x83\xd9\xac\xd8\xee\x85\xa6f\xa5&\xc1q\xf6\x1d\xc1\x8dr\xe4\x18u\x8e\xde\xb6O\x9c\xdc\xb7\xc4\xf0\x82/T\x0f_\xcb_i\x9d\xec\x9a\xdd\x1a]\xa8i\xed\x8a\x0dD\xad\xeaY0D\xea8\x80,l+^\xcf5\xf9\xae@b\x15\x12>v\x0co\xfb\xaaC\xeb\xd4\x174R\x05\xbf\xb3\x8f\x16C \xf1u\x0f\xf5\x97\xf6\xd0\"T_y\x14\x04\xf2\xf1\x82\x81\xe1TW\xfdU\xf1\xc5\xeb :\xb8u\xb1u\xa4\x9a\xfeB5\xfd\x1e;j_`?\x05\xedMb\xcef\xda\xa9%\xc0\x1e\xd9\xc2\xb7!t\x91\x81\xafu\xf1\x17\xaf]\xc7*\x8c\x10]\xa0sV\xa7\xa7L\x87\xb4\xce\xb7NU\x81\xceU\x81v\xd8i\xfb\xbcC_\xb3\x9e\xb3C\xe8+\xe6I\xbbV\xafk\x93$$\xadW\xc2\xda\x90\x1f\x87l\x8f\"\x8c\xbd\x92\x1b\x80\x0e\xf4s\x99\xb4P\xcc^\x8bf\x91\xfc\x08\x85W\xd3f}1\xba\xc3\xfc\x9ay(\x96j\x14}\xd9\x19P\nj!\x15,\xa7\xdaH\xc7\xd7\xad\xa6\xd1s\x88$\xa7H~\x94V\xf5m\xb9N>v\x1e \xbb-A\x10\x13\xf9\xc5\x90\xf6A\x07'\xf7\xe6\xaa\xc1\x01\xae\x11\x1c.\x93\xa1/!\xfd\xa5!7\xcc\x04\xb7_v\xe8\x1bV\xa7\xcfY\xa1\xcb\x16\x96\xaf\xd2r@\xeb\xcd\xd6s\xd5\x98o\xa01\x9d.{\xde~\xd3!J2w\x99\xba\xf9G\xbbJ.wQ\xc8\xae1\xf6r6\xeb*\xbdh6s\xb4;-xPo\xcb\xbd\xb8\xcb&\xee\x18\xde\xccQr\x1c\x1a}\xb5\xd0\x89\xcd\x80\xdb\"b\xfb\xaa\xb3\xa0\x86\xdd+\xc51qn\x81X\xcbB\xda\xf7r]\xe7mIr\x14\x12@C\xc6\x8c\xdd#\xcb\x11\xdao\xb5R\xc9n\xe6\xf3\xc5\xd2vq[\xcf\x89\xcds\xd2\x9a&\xbb\x9a&\xbde\xf1\xc8\x9c\x16s\x05\xf9Q\xc0\x92\xaam\xdek\xdf/\xa9\x8bBB\xd6\xfc\x92-\x0fm\xbf\xef\xb4\xbe4[\xf2\xcbbK~YlI\xe0\x89fqV\xab\xc2\xd7-ww>\x9f\xcfM\xb1X\xe8 (}\x0b\xa3M\x1d\x06*s\x8cQ\xe7\xa4\xf2N\xaa\xc3\x90$zQNT\xea+\xe6\xdf\xb1\xff\xef\x17\xf7\xff\x8b\x81\xa1\x1b\x94N\x00\xd0\xaf\xcd\x9b\x88\xfe]K\x9c_\xe1\xfaDK\x97r%*Nd\xbf\x10\xefy\x0bu(\xe8O\x8bi\x13\xfacvY\x1bz\xe9\xd0\xf9B\xdc\xafO\xda?\x96\xf2\xe4'0G\xfc\x89\xd0v\xbe\xa6?A\xe6`\x85\xd8\xf4'54\x99\xd9\xeeP\x88\xc6~\x82\x16\xa4\x7f\xc4\xac\xef\xaf\xe3+K\xeb\x96\xbb\xe4.2tre}\x81\x10\xc4\n]k\xddH\xd7jAr\x98\xb6\x10\xd3?\"\xe2\x8a/\xa8\xb8\xa6t\xd2\x82\xf1\x878s(\x04\xed;\xdd\x822\xd4\xfeaG\x1cu\x94'\x1e\xa5\xe6\xb2\xa6e\x7fIY6\x13CU\xd9PM\xd2\x15\xaa\x891\xf790-\x8d\x19\xd3\xfd\x18J\x9a\xb0[\xb90\xdc\xbc\x9d\xe3I:C\x97\xe1\x86.\xc3\xcd\x1e\\\xba8Hn\xe35\xe6\x84&\xdf\xc4\x84\xc8\xe9\xf4\xaaH\xed\xb0c\xdb\x17\x8e\xb5;\x11\xeb\xf4\xbc\xa2\"\xf7J\x17\x13\xc5=D\xcb\x0d\xf1\x1a\xd7\xddI\xb2;\xc3\xe3\x8ey@\xf7\x0e4BO?Ux\xbc\xb4c\x92\xb2\x88/\x88\xaa\xce\x02Xx\x00\xb2L%\xe8\x801!\x82yZ\xcb\xe2\xb7C7\xe8\xb4H\xc0\x82m\xd7\x0d\x9a\x1b\xab\x91\xd8\xd2\x90U\x15\xd6\xc1\xf3\xc4\xf0\xb0\xd0\x0d\xe8\x9e\xb32\x0f\xb3\xca\x1e>\xaa.o\xc2\xb3\xdb9\x1d9\x9c\xdeJ{0\xcd[i\x10\xa6\x99\xcd\xe7\xf4\x9c\xd0\x15'*\xcc4\x88\x1cr9\x8d\xa8\x90\xaf*\xa4\x1du\xe6h\x8f\xa6\xdc\xfcf'\xf3\xca\x1c\xe8-r\xa0\xd1\x05\xef`\xbe\xfcP\xf5J\xbe+$\xc4V\x05y\xcb\x89_\xc0 t\xff\x8e2\n\xf9\x90\xff\x84\xf2\xae\x98\xa4_\xba\xc0v\xa5yE\xd8J\xcbdI\x17\xc9\x92\x8f\x87wPE!\xad&\x8a\x99\x0c[\x11\x92.'\x89\x89 \xeei\xf9\xabR\x10\x13\xf5c\xc7\xa7uA\x13d\x0b\x7fA-\x1a\x0bM`\xd5\xea\xd4\xb8\xb4:u\xd7\xedM\x9dJ{\xfc\x1dW\xa72\xd2\xdcq\xccd>\xd5\x8aj\x00\nTK\xf6\xcb\xf400\x80\xaa\xc3\xf2\xe0\xda't\xa0\x06\xd4!\x9aE\xb8\x9d\x131\x84\xa6\xf4J\x0c\xa1}z\xa5\x87\xcd\xa8=\xe8\xb0+\x18\xda^9\x1c\xcdP\xa4\x14w\xd3\xf0\xb4TDy~\xf8\\@;\xb6\xfd\xca)\x81\xa8\xe9S\xd1\xd621\xae\x91\x82\xe8X\xd9\x91W\xf7\x95\xf2>\xa2q\xd1hU\x94y\xa6\xe7S|\xc9|\x8a\x17\xe7S|\xc9|\x8a\x97\xe6SF\x96\xc5\x99\x14_\x98Iq=\x9b\x85ZOY[\xaf\x9f/oG\x90\xa2k\x99\xb2\xfa\xba\x1fe<\x89\xbcP-{4\xf2k\x08@\xbfH\xdb\xd0\xe8;\xce\x15\x8b\xda\xd7\x1d\"\xf4\x94\xdc\xb6\x08\x8e;\x10\xebJ\xde\xe8\x93\x0ef\x99*\x0e\x0dX\xd7uIk\xaa\xe7\xcf\x02\xcb\x0d\xd0\xec\x881\xf8\x148V&\xa5p\xe9T(HW\xfa,\xe7Jv\xbd\x92G\xd4{\x8e\xe0C\"\xd9P\xd4\xe8\x08t\x94\xa3\xe5\xfbFF*\xeb\x96+\xd2\xa1z\xdc\x10\xa9@o8\x02\x05H\xbf\x04\xb1T\x90\x08\xad\xbbh\no\xa9 -+\xe3\xcb\xd1V\x8d\x0f\x9f\xc8\xc6`\xfc;\xf31\xf4\xff\x02<\xdfZ\xb93\x1b\xbd\x05qg&\xc6Z\xff\xaa\xb6\xfb$\xd5L\xc1\xf5 \xca\x19\xa8wju\x9f\xc8\xb3\xac\x8b\xde\x99k \xb9\x98\xaf\x14\xcf\x9f\xc8O\x8d(w\xe6#\x91J\xf5\x12\xaa\xd4\xa7\xea#5\xc7\xbb\xeb!\x90\n\xe9\xdf\x9d\xee\x9d\xe9Q\x9eO\x17\x0e\x8bv=xm\x92,\xb7,8I\xc2m\x07?\x0c\x7f\xd5\x91\x92\xdb[}\xa6\xe4\x16\xb7\x1a\x170\xe6s\x8d1W\x18zww\xfd\xec\xd6\xa9\xb9\xdb\xe4l\xbe>(^\x06\x83\xb1\xe1\xd2K\x02\x18x\x85\x81F\xed\x93\xbbd\xda\xdf\x8e:\xf9*\xa95\x89.\xa2\xf8*\xb2\xe6sB('M\xa3\xb6\xbb\x86\xf1V\xe3\x1c@\x10\xf5c\xe3\x00\x00x\xc5\xd2mV\xdc5\x8e\x1ca\xba\xb9\xb0w\x0c\xd8\xf2\x85\x88\xe2\xbe\x7f\xf2\xcb\x95:\xe7\x907\xc7\x07\xe5B\x17\xa9\\\x8ci\xae\xfc\xbc\\.\xdcP=\xff\xfc\xe2!\xfa\xe7\xc93De\xb7f\x19nT\x19\xf4\xb3\x12\x11\x85L\xe4\xf3\x04\xc6\xe6&nm\x82\x82\x0c\xa2\x1d\x05zVS\xd7\xce\x18\xa7Y-\xe3\xd7\x19\x9e\xab\x04\x07\xf3\x8d\xc9\x0e\xc7\xeb\x0f\xfcZh\xcc8\x9f\xc9\xbd\xc70\xc3\x11\x97+\xf8U\x12d\x1c\x01ku\x9a\xd5\x94E\xbd\xc3 \x89\x15\x04\x8b%\xf0\xc7\xc5w\x18XD\xcb\xd6\xf7YB5\x05\x18\xc4\xf7=\x7f\xc8\xb1\x90\xe8\x92\xd5H\xe3I\xe2\x0b[]\x08n+P\x87\xe5u,\xaf\x92\\\xea\xa7\x01\xder\xef\xe2\x84g-\\b \xd0\xc2Z6\xdd\xe5\x99\xb8\xc0\xd7\\\xab\x17\x8d\xf2\xe3!\x87%F\xdf\x93\x8emC\x1f\xc0{}\xe0q\"\x98\x1f:\xe0\x81\x19\xb0\x17\xf9\xc38I\xb7\xc1\xcfz\x02\xdc\xbcp\xac\xafw\x0e\x0f*\"\xb0\x12'\x95\x11O\x06\xbcr\xc1\xa7\x15/\xabX.\x1e\xe7\x18\xc2\x147\xaay=\x19\x0d\xcd\x06\xab\x15\x1biOO5\x04\xcd\x86h_\x10Q\xad\xa5t\x8d\xab\xf5\xdd\x1a\x8f&\xa3m\x0db\x02\xd0\xaew\x9a9\xacT\x99vW.2u\xf3\xf4qaj\xbe\x9aG\xd0\xa2w\xbf6I\xb9X\x1ex\x9d\xf0~p\xbd]b\x9d\xa9\xbe9\xccS\x90Q{^yP(E(\x8a\x89\xdb9\x9d\xd2\xdbI\x126\xb9k5\xa1\xf3`\x93\xcdq\xc8,0\xca\x8aF\x9f\xef:\xb1\x1a\xf0\xa4cA\xa8\xc7\xb5\xdc8\x9c\x93{X;ww\x96F\xcb\x0f*;\xb1q\x9a9wcW\xca\x17\x0e\x80g\xb0\xb0\xea\xd9)\xec'\xc5\xed~\x1d\xc4\xca\x98\x85\xea\x1a\xf0b\x1e\x85\x03\xaf\xf1\x92U\x16]\x880\x88\x96\x15\x00\xc1\xcc\xc4(d,a\xa5L\x8d=\xd6\xb8p~\xa4\\\x88\xfcXV\x9c\xbb\x97\xa1\x95Vz\xe3;\xd6\xa5\xf0\xdc\x91\x80\xe4\xa6\x03\x97$*\x97\x81X\\\xeb\x95\xd0\xb403\x02r`\xbel\xa9A\xc6\n\xa3\x86-)\x03\xfd<}\xea\xc0\xd4\xc5@\x03\xfe\xd5\xe8Usb\xbeF\xf1\xe6\xdbM-\x84j$v\xdc\xf1\xd3\x82 ],6N\xe4\x8c\x8e\xc8iFy7%\x16{M\x1bjv\x07s*\x16\xc9\x04|\x15\x9b\xca\xbd\xf4\xa6\xe5\xc7 \xb7\xe88\xe1Y6\xc5\x97\xbfR\xd0\xd2\xf3\xa9\xc0\xd7\xde(\x14\x13\x0e\xcc\x8d\xcbda\xaa\xcb\xf8|\x1eo\xdf@\xdf^ l\xbe2\x17 \x82\xdc\xf1\x18\x9c$YS\xe9\x98\xc1vP\x1b\xf14\xf5\x06\xbci\x18\x06\xc4\xa2\xe7\xcb\x10H\xe1\xfc\x19\xd7[\xf5\xbaY\xf3\x8a.\xd7\xfa\xa4\xea\xd4\xbcQ\xae\xa3\xee\xbb\xdc\xf3& \x9be\xfd\xe7\xf3ZK)\x82\x82JJ=t\x94\x93aS]\xf2\xa4\x1b\xa7\xdc\xb6\x0b\xfcb}\xb1wZ\xb1\\\xc4\xe8\xe3\xa3\xd9\x10\x0f],T*\xf2\x82T\x96\x18Gb\xe3\x9a\xdez\x03\x1ee\xcd\xac\x86\xdf9\xcct1\xdc\xe14^h\x17a\x8dt\xa3^\x07\x85M>:\xa7^l\x13\n\xfe1\xf7yp \xda}\xbe\x0fY\xb1\\\x85\xecZxK*\x7f]\x10\xf9\xc2Y\xf6\xc0%'\xb7\xc8\xf8\xbf\n\xe6X\x85d\xf46\xd5\x92'Y\xd2|\xa3\xd8\xbb\x1e\x9bA<\xcd\x08\xbdb{2\x88\xd0\x0b\xb6\xe7\x9cN\xc7\xbc\xfc\x0e\xec\x91\xc1U\xa6>\x91\x8b\xda\xb2L\xa3\x89l\xfe\xe8Yc;\xaa6\x9a\xf8\xda\x7f\xa3\x15oEhc=i\xc7\xd5\x86)\xf0b\xcd\x06)\xf6\x85\xc4\xbc\x19\xb7\xb7,\x7f\x93\xdd\x16\xb2W\xdc\x97\x11\x9a\xb0z+\xd9\xca\xd0\xea\x11ZN\xca3Mt\xa6\xa1x[\xb6\xf8\x8a\x1chx s9*\xd6\xb9\xe5\xaa\x98i\x93\xf4q\xb5\xdaR\xe7'\x13\xa8\x84\xb1\x1d\xa7\xa7\xac\x81\xc0\xf0\xd8\xc8 H\xcb[\x93\x86\x95\x9c\x04$9\xc4b\x1e\xa1\x01\xf3\xc8\x9c\xb7\x83\x0e[\xab\xebS!\xe6+-\xc6\xf1X\x9a01\x16a\x91\x12<\xa1H\x04\xdd\xda \xae\xf2`E3\xf0\xe4\xbd\xeb\x12M-\xc6N\xdb\xf2,jy\xddn\x02\x1f?\x89\xa3\xe9\x08\\\xbd^\xc2\xd3\x14\\ G\x8c$\x0b\xfc\x90\x83+\x0dz\xf8\x9d\xf4\x82\xd8\xa2V\x17\xfe\xf5\x02\xfcE\x7f0\x80_\x98\xa4\xe27\xf6/\xdeO\xe2\x0c\xa2\xe0U.ja^\xddI\x96\xc5\x91E-\xdf\x8b.\xbd\x14\x1d\xe2>\x1e\xb5|\x1e\xa1\x9dy\xcb\x0f0\x1e\x9e\x81\x83O(~\x07I<\x19\xa3\x13\x8f\xc2[T*.\xf8 \x83\x14!=\xf8\xe1~\x9c\xe0c\xad\xe0\x0e\xf17\xf3\x82\x10\xb2\xeb\xf5!\xab^\x80a\xc1%\xfc\"\x02D\xe6!\x1f\x89\x849P\xa3\x1f\xf0\xb0\x97\xf2\x0c\x9d\x83\xbc\x9c\xfd`0\x81i\x93\xd5\x8f\x11\xb9\x1f\xc7\xa2\xdc}\xb4\x9bl\x0d\x1b\xf0\xb3\x01?\x9b\xf0\xf3\x00~\x1e\xc2\xcf#\xf8\xe1^O~0\xd2PUk\x88\xbel\x04\xc5\x01\xba\x06#\xa0h\x10\x8d'\x19~\xa1\xf4\x17]\x88\x1bz]\xacU\xc8\x07\xa8\x9bY!\xe0\x8f\xbc \xc2\xcf\x18\x7f\x93\x0b\xf1y?\xe1P\xd6\x11\x8f&\xf2\x13dX=\x9cE[\xd4\x8a<\xa0B\x14c\xfb \xad\xe3q\xa6\n\x15\xabJ\xc7\x93L\x14\x04\xa0\xe3\xc0\xcf\x04 \xc6\xf27\x1eH\xc6yoQ+\x01\x9c\x04\x90\x93I\x17\x9a\x1e\x02Ro\x04\xe0Tl\x06\xa1+DS\xa2V:\xf4z\xf1\x158F^\x08\xf9\x0b\x15\x1a\x1cc\xcf\xc72\xa6c\x0f\xa3dIp\xc1\x85#\x8e\x06\xe8\x98\"{\xa6\x93.\xfe\x8aK\xa5\xe0\x82\xcc2|Z\x98Z\x99d\xc1\x0c\x88\x95\xc9\xe5Ft^g\x92\xd33hE\xf8\x0e\xf1G4R\x16\x8c\x10-\xc1\x1f\xcf\x07\x92f\x80\x05\xa4\x9c@Q/=\x08\xbb\x0cz\x1c:\xc1U7\xb1:\x84\xbe\xc3\x1e\x96^B\x01\xb1\x17\x85\xd9 \x9c\x8e\x87\x86\xb3\xc7\xfb\x86O\xb6\x88\x17\x05#/\xe3~\x1c\"\xebJ\xef(\x96\x04\x93\xfe,\xf1\xa2T\xb2\x9a\xea\x8dyo\n\x12\xd1_\xfd0\x18\xa3\x91\x11`\xfe>r>O}d\xf20\x18\xa7\xc8\xbex\x0c?\xe7c(\xae*'~\x13,\xe4\xf0\x82'\x11\xf2\xa37\xe0\xc8l\x91\xfax\xc9 \xf1z\x81\xe83\xc0r\x98\xdc\xc8K/\x04\x7fy\xb2\x83\x8edI\xf2O&\xd2\x1c\xc7\xe1t\x10+\x97L\x19\x92\xf4B#\xe5D\xf2I\x16\x8f\xcd&\xbf\n2\x1f\x92K\xa7\xa3.\xf2-4\xa7\xfc\xc8\x9c\xf0\xe8\x066\x1eV%\x93|\xa4\xda\xeb2\xe0\xc0w\x97X\xc3\x0e\xa1;\xd8p}\xfe<\x14\xfd\xaa\xcf_@[\x1czY\x12\\K\xbf\\\xd4:\xc5V\x10\xe4\x13\xd0TH-\xf0E\x97qx\xc9\x8dh\xbbA\xbf?I\xf9A0\x18fx;\x1fa)\x8e\xe9 r\x0e\xb1\xd3\",\xf3\xa2\x0c\xf1\x10\xf02\x8ccQ\x12\xd0\xd3v\xb4\xeb\xb9v}\xa1]\xc7\xe8\xfa\xc2\x9b\xa4i\xe0E\xcf\xc3\x89(\xdc!O\x06\xe9R\xb2d\x84Bd$ym$J\x86\x93!\xed\xc0\xd2t\x08\xdd\xc7\xea\x7f\x1fQ;\x84\xbe\x16\x03\xaf\xef\xf3q\x86\xc3\xae\xea\xd7a0\x10_\x04O\xb2\xd8\xf7\xc6\x01\x0ci7\\\x01\xe2\xd1\x18\x0f\x13\x0b\xaf\x94\xbfA\x94\x0bb\x04\x87\x1e\x0e\xb4\x9e\x7f\x01\xf2\x1bY\xb8;P\xe2\xa4\x1b'\xa2\x900\x92\x89H>\x0fC \x99hT\xf0\x01]\xa4o\xc8\xfd\x0b\xa4\xa5\x1a\x8eC\x0f%\xbc\x1fr\x14z*]?\xc6\x81\x15>\xa2w\xe1\x8cQ\x01\x85S\x8e\xce~\x1c'=\x84'q\x9a\xcaMK\x1c\xbf\xb9\x14\xb5h\\E\x14@m.\xe6\xa3u\nM\xd0\xcb\x9dK\xc8 C\x12\x90\x9a\xa02O\xbbBj\xf7\xe2\xab(\x8cQ\xa8\xf7\x12o0\x90\x8d\xc9#\x1f\x144te<\xb9\xe0\xd3a \xc6t\xc1\x1e}\xac\xa1~\x1b\xca\x1ar\xc9\xf2\xc3\xa0\xd7\xe3\x11:\x06C\x1c\xbc\x85\xacLx?\xf4\xb0\xf8AO\x8d\xde#\xd1\xe3\x82(\xe3\x83$\xc8\xa0\x89\x82T\x0c\xd3\x17AT\x18\xd0ETI-(\xaf E\x18\xa3\xe4\x0b\x05\x03{\xd7\xe2W\xe8\x9f\xd8\x9dz\x01\x8aYa1\x00\xfaN$~s\x14i`\x14\x9dhB\xde\xc2+o0\xf0\xc3\xf8+\\x\x1b@\x0c\x8dQ|\x95xB\x03\xc0z\x82\"0\x9a\x8c\x8a\xd2\x1b\xc4\xd70\x0e\x05[\x01\xb5\xd3 \x92B|\x1c\xa7bp\x19'\\\x12~<\xe9\xca\xc4A\xb4\xc7J\xc5H\xb8\xd7\x8b\xa3p\x8a\xce\x10\x7f\xc5\xfe\x1b:/\xc5/OR\x01\x88\xb1\x0eI|\x95\xca\x8f\xd4\x0c\xc6<\x0c\x91e\xc1\xe3\xc7\xd8\xa6B\xc3\xc0x\xe9\xd0\x13 \xd1\xa7\xe0\x93\x1azE\xe2K\xd2\xe3\xbe\xa0\x80\x88_!\x13\xd3\x8c\x17\x86\x1e\xadgd^\x17'_\x85\xb1\xc6\x8bR\xa5`\x08\xe6\x9a\xa4\\\xb4\xf7\xa5\xea\xeb\xe2\xe5Nj]\x05=l\x9f\xebQ\x18\xe1\xe6\xce\xb1\x16\x12QV\xd5\xec\xe6\xf9\xfed4\x91\x89B\x87\xcd\x82K\xaeD\x07\x0c \xd5\xae\x97rIz/\xf5\xc5\xb8\xe9eb\xe5\x86\xcb\xa6\xd6~Y,\xef&\x18M0{\x88\xdd\xc7\xad\x9f\xc8\x9fJ?\xa4VM\x87A\x1f\x92\xear\xd1U\xbb\x01\xaa\x19\xa8\xd5\xe5\x02!\x18\xcbOU\x8e\xbb\xe8N&B\x13\xc9\xe5D\x9cT\xa1\x17$\xe38\xf4\x94\xd2\xbf\x08\xad\n\xc5$\xd5\xa1\xe3$\xee\x07yZ\xd5\x84\x83\x94\x95b\nH\x8fe\xc6\xbe\x0d>T\xf5zb\xc4\xc5\xc5\x16/\x92RD\xeb\x9e=\x1c{\x05\xdee\x90\x8a\x99\x02\x8e\x97\xbc7\xe0\xb2\xc3\xf2\x90_\xaabJ} @\xfd\x14>\xd5\x18$%vf\xf4\xca\xca\xe6:\x15:&Q\x80CU\x1f\x86\xf1\xaa\xa2\x84\xf0\x19 \xc4QV\xed{\xa3 \xd4>\xc9\xa7\xda]\xf5z\xef&i\xa6AY\xc2\x85\xf2#\xbd\x82/\xd1\x83{\xcb\x91F\xbdR<\xd4GU\x04r\x18\xc0\x04e\xb0\xa1\xd4\xbc\xaad\x0fC\xe7S\xca\x97*\xbf\xf2\x9b\xbag.\x0bE\x1c!\xf0@I,4\x10\xb2M\x10An\xd07/ \xef\x0b\xf4\xc1\xe4\xe8\x02&G\xa0~ \xe4\x0b>\x1d\x83\xf2\x91\nw:\x06&\x94\x1e\x18!RCH\xa2h\xd3d 9H\xa5j>~A\xa2<\x1c)\x1dLx\xa1>Z&\x86R\x9f\xd1\xed\x12\xc6\xbe\x17ZJ\x93\xad\x8a6\x97\x9eQ`x\x94\x94\x10^M\x08\xe1U4\x13>\xd5\xc1A)\x96\x13\xd7\x1c!\xbd\xc8\xdd\xd7\x96\xa19\x97\xe5\xb9`H!\xd6\x95\xdc\x9e\x8cb?\xf3.\x91&\xb1R\xde\xc4\x15j\xacM\xce_j\xe0\x8f\x13\xa9P\x0b\x87\xe2m=\x0e\x83\xde\xd2\x17\x83\xcc\xd8\x0b\xa2\xac\xaa\"\x1a\xea\xbb\xa6\x9e\x1c\x06Ju\x92P\x93O$Hc\xa8\xf6U\x87\x1a\xbdp<\xf4L\x7f:\xe6~\x86\x17\xc1\x11\x1a\x8cP\xda\xa9\xf8P\x9e\x04\x88\x85\xf2\x17\xf8r\x82`\x8e\xfc\x9d\xf0\xbe\x18H\xc6\xdc\xcb\xfcx\"\xe7\x0f\xe0\x13\xfd;\xe1\xaa\xf1\x12\x9e\n\xf5\"\x893!XS\xdf\x13\xe2\x9d\xe7cF\x81\x97S\xa9 \x1bRE\x81\xf8\xb5\x98\x17 \x08\x864\xddx\x98\x9fn\xa04\xeb\xf5\xf8e\xa0h\x9ff0\x89\xc9\x82P\x0cGY<\xd6\xdc\x88\x9e\xbc\x11a\xca{\xc1\xab=/\x1dJ\xb3n&\xc8H\x1fa\xd0o|o\\\x04\xbc\x8b\x83(\x87\x8c\x82\x8c'\xf8\xc6Q\x0e+g\x97\x87(>\xce\x87\xc0\x04t$E2s\x1c\xc4\xfd\xd7\xdc5Uc\xa2\xe4\x07P\x87\xab\xe2\x98\xa6\xf2\xc9\x05\x1bA\x12\x84\x98T\x07\x80f;5\xa2\x82\x18\x99\x80\x18\x99D\x81\\(\xc215\x95\xd3\xban|\x8d\xae4\xe8\x06\xa1\xa8\x92<3'\\Y\xd5\xeb]V\xa7\xca#\xfa@\xf5\xba\xe4\x9f\x1aC\xf4U\x9c\xf4\x0c\xf9\"\xd5\xa3\xab$@\x19\"\xbb\xe8\xb5?\xf4\xa2\x88\x87B\xf5\xc0\x1aN\x17A\x90\xcd5\xd4\xe0zC\x8f\xfd\xd4\x82\xcc\xa6\x00\x9d\x02\xf4\x06\xfe\xc5\xf1\xc8\x8bz\xa0\xa4t\x08}e\xa8\x06B'\xc0\x8e'\xba\xa8R,\xba\xfc\x92\x87BKV\xb3-?\x0e'\xa3(U\x18\xc2\xab\x04\xab\x0c\x14zP\x8fG\xf1H\xe1\xf5\xf8X,\x1f(\xed[\x8f\x98\xe8R\x8c\xa0_\xe4\x81\xe9_$\xb4\xe6D\x88\xa8\xa5#D\x08L!\xd4\xd9\\\x10G<\x1b\x06\xfeE$\xd6\x90B5;\x0b\xd5\x12\"L!\x0b\xd3\x1a\x00\xa8\x8e\x02n9^\x823\x1f\xffF\xde\xb5\x82\x07\x91r\xc5\x97\xa0\xfb#\xdf\xa7\xa8\xe7j9\x18Mt\xdd\xa5\xd2\x9b\xc4W\n\x92\xc4W\x8adB\xeb\x94l\x90\xab\xa0\x89*u\xa2J-\xa6\xaa!\xb4\x88\xf6\xe5%\x91\x13\xd9\xe0\x86K\xe5<\x10K]<4\x96\xc8\xc6\x9e\x12\xe7\xda-\x04\x05\x8e\xffb\xa5\xab+S\x92\xaaZ:\x19\x97\x00\xd3\xd1\x88gI\x00\x1a\xed\xa5\x16\x14\x0b\x9a\xe7\x01\xb2\xd7u\x18D\x17M\xd9`\xd7\xa3\xb0\x89\x8d&\xa0J\xc3\x05\xb0\xaa,Fob8$r\xc8\x02g\xfd\xec\xf6\xec\xb6}\x96\x9e\x9dt\xee\xcf\xe4\xf7l~6_\x1f\x8c\x08\xdd\x05\x84\xad\xbfS\n\xfe;\xcf0\xf0%\x04\xfe\xac\xe7e^\xb5}V=\xbb\xaa\x9dM\xea\xf5\xe7\x8f\xabg\x93\x97/_\xbe\xec\xac\x13z\x83\x18\xd0\xc2\x02\xa3\xe3\xde['\xf4\x0dB\x9d\xed\xa6\xf8\xeb\xcf\x86\x19\xc9\xc6\xe9\xf6l\xe4\x05a\x16\xcf2\x1e\xce|/\x04\xa7\x1f\xf4f\xd7\xa3\xf1\x984g\xed\x9fy\xd5\x9b\xce\xac\xedUo\xdc\xdaY\xb5\xe3:\xdbM\x84\x81\xaf\xd9\x99\xdd#d= \xf4\xb9J\xfc\xec\xca\x15\x84\x9dA I\x13\x02\xefA`\x1b\x8aY\xafW\xe1\xb3Q\x87\xdf\x9d\xfa\xd9\xa4\xf1\xe8 \xfc>\xa9\xef\x9dM6D\xf0F}\xe3)\xfc>\xec\x9fM6\xeb\xf5zg}@\xe8[f\xa9%\xfe|\xbf\xe0\x04\xd7\xb4l[-n\x95\x02j \xbb\x81\x19\xb6\x97l\xfa\xa9C\xeb\xf3\xe6\xb2\x1dA\xdb\xbe#;\x9e\xefN\xc6 cL\xc3\xd7\x94;\xdf<\xdaVek\xea\x0c\xf3\xed\xa2\xf7\xff\xefn\x10^\xa2\xc9\x1cc_H`\x19\xbb\xb3\xba\xaaWA\xd4\x8b\xaf\xb6\xa3I\x186\x85{N\xbf*m\x8f\x16.\xb51\xe3N\xca\xb6\x91b\xf3-\xd4g6\xcb\xc9i\\\xbe\xf2\x13\xeee\xfcu\x1c\x06\xfeT\xdfZ\x99\x84aK\xde\x96\xc0c]5\x7f\x92$<\xcaN\x90\xab\xf0\xad\\\x13P\x1bz\xe9\x8e\x9a\xb2\x89S\x1a\xd5,\xab\x8e1\xd1j:\xe9\xf7\x83k4b\x1b\xb1r\xcc\x01\xcf>\x1dSl\xa7&\xcc\xea\xc5\xa31n\xbd[\xae\x13m[\xdf\xb7\xdc\xa8iY\x04\x8f\x8d\xe9\xddh\xb3FNBo\x85\xff\xcb\xd3\xc3\x83\xa5l6\x9f\x93\xfc\xb0\x98\x04\x16O?\x9d&\x934\xe3\xbd\xd3\xe9\x98\xa7\x15Q\xb4\x8a\xe5&\xaeU\xf1\xf5\xa9\xaf.\xaf\x88|z5K\xbc\xe29\x9f\x97OXT\xb8#\xb6\xc5\x16\xf7\x00\x9f\xd5m[_\xea\xca\xf7\xfc\xea\x9dm\xd3\xd3\xfc\xd2!4b\xe6\xae\xa6\xaa\x85\x93\x11\xbc\x98\x10\xe5\xd7\xed6j\xf5Zc\xc3\xa2Q-\xe1\xa3\xf8\x12\x9f\xe4\xa2k\xd9l\xb6\x96\xd5z\xb1\x8f\xa9\xcefO\xf1\\\x8a\xf2\xd7\xa2\xb8\xc7\xa1\xa2\x9a\x15jAz\xa2nR\xb0\xb5\x06\x8d\xe4U\x83<\x0e\x9e&\xa1\xa9 YV\xdb\x95\x9e\x97\x897@\xe0\x11\xcbj\xd0\n\xea\x14\xf5\x9e\xd8\xc4\xa2{,\xab\xbd\x8a{\x9c~-\x1d/qFJ\xbf\x00\xaf7\xe2=\x80\x1dzc\xfac\xa6\xf9\xfb\x8b\xedb\xd8l\x96\xd5\x0e\xe3\x1b\x04\x01?\x1dz\xe3\xe6\x17\xf4',\xab\x9d\xf2\xeb\x8c\xfe\x88e\xb5\x17\xf1\x08\xb3\xfb!\x94\xed\xe8\xf0\xb5\x97\xa4<\xa1?eY-3\xda\x17\xf7D\x17\xc5\xce\x91h8\xceY*\xf9K\x96\xde\xc9wiH\x8bse\xfd\xca\xb6sw-\xbe\x8ax\xa2\xc8a\xdbN\xcaV\x05\n\xf9\x90q\xf6\x95\xf3S\x1a\x10\x1aq\x96q\xdb~\xc5\xb73\xc5\xd7@A\xb4-oY4\xe1,\xa51g \xaf\xe1\xfb\xa5#5W\xa2\x01\x02E\x0c \xd1\xbe\x94\xc2\xd4\xc3\x80\x01\xcfd\xf9\xd3\xe7\xd3So\x00t\xa3\xa9\x11g\xa1\xf1B\xce\x02\xc8$N2l+\x9f\xb3\xdby\xab\xc8\x1d17\x9886\x0b\x9cW\x1e\xd8-\xd5\x8cr\x18\xf7\xb8x\xb4\x9a\xb3C:\xe6l\x97\xf69{I{\x9c\xdd\xd0!g\xcf\xe9\x88\xb3{t\xc0\xd9\x1b:\xe5\xe2\xa8\xe9%g\xe7\xce\xed\x9c\xb6\xf5Q\x8f\xf7\xce)\xa1\xef\x9dw\xf0\xb3\x03?/\xe0g\x9f\x10B\xbb2\xd2\xf5\x92H\xaf\x01\xeb\x18~^\xc1\xcf\x01\xe0_I\xfc\x0b\xf9=\xe2l\xadN\xf7\xf0\xf7\x9c\x03\x9f\x9f\xe0\xef)\xfe\xbe\xc3\xdf\x1d\xfc}\x81\xbf\xfb\xf8\xfb\x1a\x7f\x8f\xf1\xf7\x15\xfe\x1e`\n\x87\xf8\xbb\x8b\x90\x97x%\xeeF\x95\xcb\xc2K\x95bU\xe9\x1awV\xf5\x8eY\xbe\x9f,7\xc6\xfaq\xc2\x83A\xa4^8T\x1b\xb5\x81\xd2f\xd56\x06\xeeK\xe0\xfa*n=\xe0\xec]\xee\x06D1\x1fu\xc5\xe2j\x8c\xd1R\xb1.\x1aD\x12A\xe8\x0f\xe64\xearP\xda\x92\xd4[\x8fB\xd7R[U\xd7\xa31\xe8Wo$\x05\x9f\xe75\x94\x15R\x88b\xdbXo\xa1\xaa];\xb1}\xd9!\xf4\x9eL\xe1m\x9e\x02\xce\x82\xd5j\x9eX\xf2\x0e\xccei\xb9\xe2\xb0j\xe1\xd7X\x0dU\x85\x96\xab\x9b\xaa\x96Z\xc7|/3\xffrI\x8f\xc7\xe9!\xa1_\xf1\xc2A\xa6\xf7\xdc\xb6\xdf\xa3\xf1\xd8\xd9\xcc)\xbcW\xfd\xa9qY^\xce\x9crf\xed\x1c\x1c\x1c\xbd\xdd\xdb=?\xdd\xf9\xe2\xc4\n\xa2\n\xdf\xc6\xaa\xf3\x9a\x19@\x9a\x97\x1c8[c\xef\x9c\x9e\x1e/\xc5\x86\x00\xd2\xbc\xe6@Kkgw\xf7\xfc\xcd\xf1\xfe\xf9\xc9\xce\xcb\xbdB\x94\x13\xe7-\xda\x17Y@ \xcd\xb7\x1c\x1a\x12\xa3\xee\xee\x9c\xee`\xb0Y\xb6\x13\xe7\xb9\x8eZ@ \xcd\xe7\x1cz\x93\xf5\xf2\xe8\xf8\xf9\xfe\x92\n\x19p\xd2\xbc\x9dC\x8fS\xb8\x0b\xd51\xe0\x88\xfb\x923\xeb\xcd\xc9\xde\xf9\xeb\xe3\xa3\x97\xfb\x07{\"a\xd0 M \xf6\xdd\x06\xde\x91Fr\x9c\xef\x1c\xef\xef`\x1a\xd8\x9f\xcd\x10,9\x86\x9cs\x0d|\xf3\xeaG\xaf\x8e\xde\xbe\x82\xf4N\x8f^\x1c\x1d\x9c\xccf\xa2\xfb\xf3\x1a\x12\xe8\xe5\xd1\xf1\xf9\x0f\x7f\xfcf\xef\xf8k\x0c8-\x04\x9c\xee\x1d\xbe>\xd89\xdd\x13\x91\xdeA\xd8\xdb/\x8f\x0e\xf6\xcew\x8f^\xbc9\xdc{u\x8a\xf0}\x80\x1f\xef\x9d\xbe9~u\xbe{t\x88\xb0\xd7E\xd8\xf9\xcb\xe3\x9d/t\x84\xe3R\xe0\xfe\xe1\xeb\xa3c\x11\xf4\xca\x08:=~sr\n\xcc\xf2\xf5\xeb=\x0c|\x01\x81/\x8f\x8e_\xec\x9d??\xda\x15\x05>\xd0D8\xd9y\xb5\x7f\xba\xffS(\xdc!\xca(\x01\xfe\xd1\xde\xde\xeb\xf3\x17G\xafN\xf7^\x9d\x82\xd0\xe2\xb5\xfdW\xe7\xaf\x0fv^\x884\x07\x9aT{\x82m\x8e\xf7\xbe\xd8\xfb\xc9\xeb\xd9l\xc0\xe9)\xb7mgO\xbc\xc7\xfd\x1a\xdc\xfb\xe2\xb1\xe8\x97\xe0\x9e.\x91\xc5JX\x83\x86\x02\xfd\xe4%\xaf\x0d\xb3Qh\xdb\xce\xb93\xe5\xf4\x94\xd0s\xa7\xcb\xe9kBtxz9P\xc1\xefd\xf0\xb1\xfc\x1e\x14\xd1\x84>\x91*\xec\x9d;\xb0At\x1e\xeal_H\x8cW9\xa6bv\xe0[Q\x17\xc6.e\xadN\x9c)'\x80:\xe5\x06\x96\x8e\x02\x0cf\xdbN\x17\xa2\\s\xe1:q\xba\"J\x97\x1bXdio\xb4\xeds\xe7\x1e_\xdaO\xe9\xa1(\x82\xde\xc3Ej\xbf\xe3\x10e\xcai[\x9d\xd6\x91\"\x1b\x0f\x99t@\xe2\xd4p\xb3X\xd5\xb7-\xcf\x9f\xe4V\x99\xaex-\x13\x16\x85b\xdb\x8e\x1d\x8e\x82\x91\x939\xfd\xba(\xfcz\x8e\xd62\xe9\xad<\x9d\xd4\xe4s\xa1\x99\xf3\xda\xd8\x03\x95\x1f\x14\x07\x89\xf5b\x18\x84=G\xdf\xed\xcf\xc8-\xaf\xc5\x93\x8c'\xa0-\xb0\x88\xcf\xe7\xf4\x0b^\x9a\xeb@R\x85|\xf4.Q\xb38\x8f\x80|\xa0\xa80\xe7jf\xa6z\xbf\":Jz\x8d\x9dI\x94|^\x02\x15\xfeq\xb1\xc2B\x8d\x17r\x9dF\xea\x84[\xd0w^p\xc2\x99\xb5%\x92x\xb6\xb5.\x1d\x96\xcb\xc5\xfb(b&3p8]\xffY\xfb,9\x8b\xce\xb2J\xc7]'\xad\x88%\xb6\x9d\xb4\xeb\x9d\xb98\xb6\x97\x95\x95>N\x9a\x1c\xe9\x991\xbc\x81\xf2C\"\xae\xc9\xbcL\xe2\x91\xb4_\x11\x8b5\xc8uln\xa3\xdeh|\x01\x98\xe1\n\x1b\x19\x07\xbf\x0e)O\x06\xe4\x00\xa7\x8e\x08:\xd9r%\xce\xc1\xe7\x8e\x80+Z\xc1\xaa\x96-\x04\xf4\x83$U\x89c0\xa1\x81\xd1\xda\xf1<\x9f\xf1\xe3uiH\xba\x16D)O\xb2\xe7\x1c\x94\x1dG\x0d\xc1\xa0\xccc\xebF\x84J<\x1f\x12\x04\x18L\x90\x84u\x13B=\x8e\x97\xe4\x9c\x8c\xbe\xe3\xdb\x82\xf9\x9b\x82\xeb \x10\xb8\xa8\xb7\xda\xb61\x1d\x07\xfa\x8a\xe3\xd9?\xe6\x8e\xb5u\xbd\xfel\x0b\xc9\xf5\xcc\x0e\xb3\xd6::\xedA\xd6\x02_0\x1a\x80\xd3\"\xadkg}\xebL\x04\xaeS^\xc3W\xc3O\xe4\"\xaa#\xc9MjA\x14\x89\x1a\xc3L\xd8\x83\x1ej4\xd0\xdc\x11\x93\xdc\x9f\xf0e\xa7\xa3\x03Y\x1f^\x9c.\xccf\x9cr\xfau\xed\xe4\xcb\xa3\xb7\xe7{\x07{8NH\xef\x8b\xa3C\xd3{\xba\xf7\x93S\xba\xe4\x82\xfe\xd7\xb5\x97\xfb\x07\xa7{\xc7\xe7;/^\xec\xbd>\x9d\x13\xba\xd6 s\xfa\xa3e\xc5Xsx%\xc0\xfd\x04\x1f\xe6D?\x99\xcd\n\xfe\x1f\xcdfK\xec\x11\xc0\x84\xf2\x950\x1f\xbf\x18\x08\xcc\xfaB\xcd\x98\x96L\xbb\nL\x05\x03\xbc\xee\xb3\xa9\x99\xf3\x8f\xef\x8c\xac\xfb\xf1\n\xac\xd4\x10\x1dKK Z%\xae\"\xbe9\xde's\xfa\xc3e\xb4Y\xaa\xed\xed\x95\xb4\xbd=B\xb6\x0b$\xdbk~\x0bE\xd1\xb6\xadh2\xea\xf2\xa4L\xdeS|j\xe5\x0e\xda\xcf\xe9O\x8b\xc2\x94&\xe4\xd6\xe7m\xde\xb1m\xdfAG\xf1R\x8dd\xb7\x080\xe9{q\x03\x86\xf2l\xa5\x04\x04\xc1\xf7S\xeeX]\xec\xae'h\xe3\xf2F)\xcc\xa9E\xe5\xa1d\xfa#\x90\xa5ji\xe1k\x14\xd2ku\xb9\xb83r\xf2\x02\x13\x95\xe0d\x1cG\xa5\xe4 \xb5\xdbL\xccY\x9b \xc5\x07\xf9y\xef\xd4\x1b\xa4\xcd)\x9f\x13\xea\xe0T\x851\x96\xccfb*\x04nb\xdb\xc2^N\xa1s\xee\x84\xa1c\x8di\xa5\x9bX\xa4x7'/]\xd0w\xd6\xa6\xbc\x9dtf\xb3+4\xc5\x81&\xc4\xb9m\xaf\xdd\x08\xa3\x1fK\x99J\x88\xaf\x9d\xde;\xcf\xe7Q\x86\xbd^\x89\x96\x18\x8d\xf2HY\xd0Z\x86\xeaX;\xfd\x8c'{Q\xcf\xa2\x0b\xc3@L\x9a\xb1)9J\xe5\x95~+\x8a\xe5\x14\x0ejo\xdbBD)\xe0z@\x8d2\x90\xd9LO\x08\x8b\xd8\x08+!o;*+\xd2t\xd6N\xf8l\xb6D\xc2\x030_\n\xd1\x8b\x1dK\xf0\xd6 \xaf\xf5\x01-\x08\x03\xbc\xe5\xbeT\xa5\xa8\xf9a\x1c\x89\x11\x9e\xa0\x852]\xb0m\xc3\xcd\x84\x11/\xe9\xa3\x98\x81\x052\xdb\"\xcd2\x9a\x91m\x01\x91\xa0\x16\xbb)^\x03\xd1\xbd\xcc\xc9X1J\xc6\xa6NF'\x9cZ\x15\x8bH\xdfX\xfa\n\x98\xc2\xf4\xc4\xe7V\xcb\x88\xc82B(t\x06\x0f\x98bu\xe7B\xc1\x9de\x0b\xd7t\x82\xbes\x00%\x87\xa92c,\x83\xd6\x86y2\xb8qQ\x16\x0dl\xcff\xf8\xfdR\xf7O\xf1\x9a\xdd\x1e\x07n\xe8\x83\x02F\xf4\x13\x14G\x08\xec\xe5@4}\xd4\xe5\xed\xac3\x9b]\xc0\xa7\x90\xc6=\x84\xe8\xd8\xd7\xce\x80\xd3\xa9\x13\xd1\x11\x17O\x8d\xe9\x10<\xcc$\xe8dn\xefH\x88v\xc38\xa3y\x9b\xcff\xd0\xb1/\x9dH\x1c\xafoZd6[{\x032\x8d\x04}\xe7\x1c:\xea\xb53\\\x91c\xa4\x0b*\xfb\xcdZ}N\xa3\xd5\x82\x8e\xc6\xca\x11(\x87\xa7\x1c\xa9\x12\x86\x8b\x92P\x8f/ys\xa1\xd4\x0b\x999\xa4\x01\xad\xf4\x0b:\xa8\x9e\xa2\x8c\xb3,\n\xee\xaf\xd0\xae\xbfe\xd1\x0b\xce\xc7\x90`s\xad\xae\xa4_\x9e~\xb3\xcb\x85\x01\x8b\x94\x85\xfa\xca\x9e\xbe\xf7\xd1c\x19\x0b\xdbi\x87\x0eXO\xd8\xfa\xbc\x94\x0e5\xbe\xa1q\x1b\xd6u2\xf1\x90\x15\xa1\x01\x1b9\x03B\xfd\x9a*\x0f\x0b\xa4\x07\x0b\xc4b\xea\xd7T\x89\xd8Z\x9d\xfa\xb5~\x9c\xf8\xfcG\n$\x89S\x16\xe6\xba\xc4@\x10\x9f\xd0\x98\x19\x89\xd2\xb5R*b\xa3Cqm`\xdb\xd6\xfe\xe1\x17\x96\xee\x9aB\xbf\x08kA\x8fx\x0c>4dC'\xa4\xed\x0e\xa1_pd|\xca\xd19\x80\xef\xc4 \xa9G\x9e\x89\xe7\xe7\x0b\xfb\x0f\x80\xe8\xc9\x9ak\xc6\xb6\xf6_\xbd~sZ\xceM\xec\xef\xcb\xd2\xa8\x87\xd0b\xdb\xce\xa9\x813\xbcv\xd0\x99\xcd\xd6.\xe0K\x08\x88\xc1 \x9a\xf0\x96\xec\x8a\x83\x85\x12\x0c\x80?UA\xc5\xbb\x06*9\xe0\xe6\x13\xecx\xebg\xeb\xcf\xd6\x03\x1a\x13\"\x11\x8d\xae\xb5\x9e^\x0ef0\xea\xa1\xd4.h.\x10\xf5\xca\xb1\xb6\xd6\x1d\xcb\x1d;\x89s\xc3 \xb5f\x16q-\x82\x179H9\xc5[\x9c\xc6\xc7l\xea\xc4Z\xc0 \x9f\x14p\x82\x89/\x0c\xba\x14\x8d@\x033e\x99sA\xb1\xb08\xfem\x17+\xfc\xea\xc4\xb9\xa4\x03\xf1\x88e\x89\x101\xa1\xfd\\V\x16t\xe5\xf9|A\x1c.\xe9a\xf39M\xf2\x9e\x8c[$\xf2R\x92\xe4\xc9\x84\xfd\x04\x80\xd8]\x16\xfb\xec ^\xf6\xd8=:D\xbb\xcb\xd8e#\x96\xd4\"5\x05!-Rfj\x11E\x9c[\x8f\xa4T\xe6\x99\x13\xc1p\x16\xa9A\xd0\xd4\xffB\xdb\xe6y\x08\xa1\x11 \x93\xd6B\xed\x16\xcb\xa27\x97\"i\x89\xfc\xa6\xa0\xe1\xe9\xab\xd3\xab\x84\x14\xf5\x95cb\xe8p\xc2R\x9cuv\xbd\xe9\xafU\xabg\xd7\x9b\xdc\xca\xad\x9a\xe4\x9b\x86\xb6\xbd\xf6C\xd4\xe4n\x0b\xbb%\xc6\xae\xa2\xb2\xa8(\xef\xec_8\x96\x82\xe4\x16\xbdu<\xd2Zb\x17\xd2\xe1\x8c\x1b\x86\x19I\x9eR/H\xb2i\x9e\x8c\x88G+^7N\xf0\xd0?\xf6\x9b\xb5\xc2\x14\xaf\xb0Q\xca\x18{\xebd\x98\xb6\x97\x05\xbe\xd2\x80\x16\xb5\xb8\x12\xce\xed\xb2\xebr<7\xa6f\";B\x85\xfd\xa1\xa9\xef\x961\xf2)0\xc9\xef\xd0\x05}g\x87\xcff_q'!\xc5\x9d\xbb\xc5\xacm\xdb\xd9\x15kl\xbb\x86\x0c(N0H\x03\xa6\x15\x1esb\x9c\xd0\x16Z\x96\x14g\x93\xc6\xf6\x8e\xc3A\xbd#\xe6\xec\xe2\xf9\xd1\xee\xd7@:O\xf7\xf5\xd9\xcc\x82\xc2\x17\x81\xdb1\xf3\x9aq\xcd\x1b\x8fy\xd4\x13k\x01\x9e\xa1#\xec\x03\xef\x80XY{\xc7m\xbb\xda\x90\x16*\xa5\x1d\xae-\xc36\xdd\xb2m/\\\x01\x81dDm8\xd1\xe8\xfb\\\xec\x93G|\x1e\xdb\xf6\x0bn\xdb_s'\x16\xfa\xa6Xr\xd0\x17\"\xc7\xd0\xebw\xf96o\xc6\xa4\x95\xb2q\xa1G\x83\xba\x97\x1a\xd5N\x19c\xfel\xc63'\x85N\x9c\xae\xe8\xc4I\x96\x07a/N \xf5Y\x8a<\xe0\x8b\x8d\x84]\xcd)X\x85}q\xea\xe05G\xc3b\x13\x96\xca)W\\\xda\x10l\x99\x95h\x91I\x81\xb2\xc5\n\"\x03LX\xac$\xc310\xc8\x84\x852\xe5\x80N\xb0Q\xe9\x04\x17\x98\xfa\xec\x1d\xdf\x8es\x1el\xc6\xc6\xa4D\xa6\x80\xf2\xbf\xcf\xa6N_\xcb\x7f\xe1S\xf2\x9f.m\xa6>i\xf6\xe74\x02\x81\xfe\"\x8e\xfa\xc1\xa0\xa0N}\x85\xb3\x87\x1d\xceP\xd5\xaa\xe1%\x8d2\x1a\xb9U\xfb/\xb8\xb9\x06xA\xfa\x95\x17\x06\xb9\xa6\xb3\xa0\xe6\xbe\x17\xdd\xe6vN\xf2 %\x8cW#\x10\xf1\x8a\xab2'\x11o\xc3P\xb4\xad\xf8e\x1c_\x94V\x19\x97\xc9\x01\xdb\x16\x93d\x86\xbfh\xd9\xbe'\xa7\xcd\x19\xc1\xb4D?-%\xa7\xe7\xd8}\x81\\\xc2L\x97\xa1\xca\x8c\xda&\xf2N\x18\x96\xf0\x01\x9d\xdd\xce\xe74\x9a;\x04\xfe\x16l' Z\xdf[\xbf\xbf\xf6\xbdJ\xe5E<\x9e&\xc1`\x98\xa1\xe1\x84\x8dz\xe3q\xe5\x87\xbcWy\xebei\x1c\xd5\xbeWQ&\x0fL[ \x87\xfb\xa7\xda\x12\x82s\xb8\x7fJh%\xe5\xfc{\x95\xca0\xcb\xc6\xcd\xf5\xf5w\xbcw%\xe2K\x0b A\xbc\x8e;s\xa8s|\xef\xfe\xfa\x9aQ\xda\x05\xeb\x07\x11\xbb\x9d\x97,\x1f\xe4Grb\xe3\xba4n d\xac\xde\xca\x16MQd\xca\xa2^b\x1c\x99\xc8\xf0Zs\xa2\x161e\x13&\xc5\xbb\xce,\x80I\x90ZLa\x01\x11w\xe5\x9d$\x17\xa3\xc5\xf3@ \xb1mu\x8fZ]\x90\x8e\xa5\xe5\x01\xe4\xd3\x84\xb4<\xd0\xe60\x19/\xb7\xb6g\x0c:\x01)\x98\xfbOH$:fBSH\xbd\x9dvt\x02)1\x8c\xed\x0b\xbb\xde\x15\xcb0#\xb4\xed\xc4\xdaN[Ls\x83\x131i\xea\x15$'YO\xe1\xb3\xb1\xd1\x10\x9f\x8d\xa5\x85y\xf4\x18q\xeb\x0f\xf0\xd3\x10 <\x16\xbe'u\xf1i(\x11\x109\x9b\x0fI\xcb\xa8bM\xda\x99Y\xd1a \x02\xc8\x8c\xc8y\xbc S\x9f\xa4\xf6\x96{\x17\x87\xde\xd8Hc\x89\x80\x08l{=\xf2\xb2\xe0\x92\xa3\x19\xa2u\xb4V\xe0\xc4N@>E&\x95\xeb\xa3'\"\xdbF}\xb3P\xde\xed\xdb\xb9V\x82\x9a\x0b\xcdi\xb5\xa5\x11a\xcb\x8d\xd1\xb6\nq\xad\x8e\xb5\xc4\x92\x8a\xca\x06\xe8\x04\xd9<\xd8\x80\xda-\xaeb\x1a\x06\x13T\xb4\x80z4ej\x7f\xc1\xc9\x08\xa1!K\x9c\x08\x078\xd5\x13e\xecp\xab>\x9b\x85\xcf\x98\xbf\xcd\xb7-K\xb2b\xd3 XZ\xf3\x87 \xe5{|'sBB\xb6\x1e>\xdcx\xfah6\x0b\x9e=|\xb4\xd9x:\x9b\x85nC\x8c\xb4\x8eWBv\x1b\x80\xfehs\xa3>\x9by\xcf\x1e>\xde|\xb0\xb9\xcd\xb7\x05\x0e&\xd6\x0c\x9a\xe0G\x8b\x16NHCw\x834\xbd*\xc6p\x9d\xa0\x8a9mm5\xea\xc4}\xf4\xf0\xe1\xe6\xa3\xf9\xdc\xa0\xef\xad\x8f\xb94\x03\x07\xb4(\x91$x\xea\xe4\x0e\"n\xc8\xb6z\xfc\x04\x88\x189\xc0u\x1e\xb4\xdd\xd3B\xd39\x96\xb4\xaabQ+\xbe\x8a~\xc4\xa7\xa9Ef\xb3\xc5\x95\x85\xb8\xd6w<\xb4\xb8\x1c\xb1\xa0\xd6\xd7\x8a\xfdv\xa6\xf6G\x01\x99\xe0\xcbO+\xb9V6\xec\xe6#Q\xa6\x06t\x13\xefS-L=\x91B\x8aM\x9aA\x93\xc6\x8eZ6 t\xc2\x02\xc7\xa3>j1\xdc\xb6\xa35\x16\xc9\x97\xb5\xfcg\x93\x16\xccG\x9d\x94\x85\xed\x89\xebv\xc8\x1aK\x89^AA\xe1\xa7\x11'\xc2\x98\x11L.\xf0\x85\xeb\x90\xd8v\xd8\x9et\x18c\x91\xd6\x89f\xb3\xc9lVW\xc6\x8dP7,\xb6T\x10\xf9\xe1\xa4\xc7\xd3\xa6\x07\xcdC\xa5\xce\x08\xbe\xc6]\x8d%8\xfe\xd0\xcb\x86\xb5\x91wM\x03\xe9\x0c\xa2\xd6\x9d\xe6\x93X\xe2\xe4\xb6\xc3\xa2\xad\xfav\xecDnF\xeb\xa4\x198\x11\xcd\x96\xe5\xb8\xb4_7\xea\x8fIM\x1d\xbe\xd2\xe6|\xb0\xa9\x1e>\x10M\xf5@\xb2\xcf\xc6SBA\xb8>x\x00=lQtC\xff\x9e\xaf(\xb5\xaa\xb1\xcf2\xd7\xaa\xa8\xfc\xac\x96\x1eC\xf4YX\x16; \xbd\x05\x95\xb7\x198\x0da\xb1\xc7\xc3\xf7\x89\xd7\x1a\xa0\x1e\xd2\xb4\xedwXH\xf9\x1d4}b\xf2\xf9ZR\xb0S\xa8\x07q\xee\xe4k\xd3F\xfe\x85c\xbb\xe2\x88\x950S4(\x98;\xc2\x0dNNp\xc5^\xc7\x9d/\x13\xa7\x9a\xd2J\x82\xaa\x1e\xf0T\x90\xf5\xc9FQ\xa0\xca\xec\xc4\xd6\x8a\xd4=\x02\x9e6\x8bL\x10@\xf3k\x8b14a\x1et\x8fT\xdbR\xa1!\xab\xb7\xd2ga\x8b@\xef\xe54bI;t\xdd\x0eE[]\x9a\xeew\x10\xb1 ,\xcc~\x8a/5:\x9c\xe4\xa6\xc5\xe5\xd4W\x1b\xbbq\xac\x17^\xf4\x83\xac\x92r\x90\xfcR4s\xe2Z\x15/\xadx\x15M/keA\xc8\xad\xd1\xb3^\x9c\x9c\x1cOB~\x10\xa4Y\xb3N_\x9c\x9c\x9cd\xd3\x90\xefr?\xf4\xc4U\x17\x01\xc5\x959\x85\x14\x06<\xca\x8e\xb9\x9fI\xc0\xee\xd1a\xd1'J\x95\xfbO\xe3\x0b\x1e\xa1\xb7Aw\xbd\xccSV \xf63>\x92X/\x03]\x08\x98F\xec\x84\xe1\x8b8\x94W\x0c$l\x01\xf02NFr%\\B\xc4\xd6N\x0e;\xe4\xbd\xc0\x93\xc9\x1e\x06#\x9c\xd7\xa1N\xd7\xacS\xf3\x04)x\xe3\x1e\x97E|\xed\x05P?\xb40*#\xbf\x0e'\x83 \xd2\x0e\x95\xc6\xc9W_\x1c KH\xb4\x93\xaf\xbex\x85\x8ae\xee\x7f\xede\xc3\x13>0\x00\xc2l\x81\xf2\x16hu\xf2\xd5\x17\xa7\xea\x0e\x92\x02\xe1\x11\xb9\xe7\x93~?O\x15\x9a\xe8d\xc8\xb9J\xe6\x94_g\xa7\x89\xe7_\xbc\xd0\x8d\xa4A\xca\x1fO|Y\xca\xcf\x15_jXi46\xa4\xb0z z\xd5\xe6\x86\x10V\x8f\x1f\x124\x15\x96\xf2\x8c\xfa\xcc\x83^\x9c\xf1\xe4%\xf0(\x12(\x97E&\xbb\xa7B\xbb\xa6\x02\xc7*Z\xf4&\xb7\xa1\xb0\x13w\x0b<\xdc,\xa7#\xadf6\xa1\x8b\x88Q\xa0Y\xa7\x17A\xd4\xc3\xb3\x1b\xa4\xb0\xc7-&\x10\xbeP\x8d(\xee\xdc`d\x1a1^\x8384Q\xcb\x0f\xae\xab\xc6\x9el6K\x9eiS}\xdb\x8e\x8a\xa4\xd6\xcb\xe4\x03\xbb\xd2\xd7\x8b#\x8e\x96H\x9bx\x0d\xd4b,\xda\x96\x18\x89\x0cl\xcc\x9b\xea\xc6\x97\x11\x9a\xb5\x93N\x8e \x81\xed\x84\x02<\x0f\x98\x13}[\x8c\xd0\xa0\xb6\xa3\xa69\x0c\xdc@\xc2\xd8\x11\xf9\x12pi\xcc\xd8\xb1x\x94%\x01x>\xa7\xa9iL\x85\x9e\x07\xba4\xb4(\xe8\xdf\xa0\x0e\xa0><\x91J\xcf\x189a\x93\xd0>\x00\x1e\x10\xdaC\xc0\x03B\x87r\xfc\x1a!\xe0!\xa1\x03\x94pt\n,\xf3\x90\xd0K\x10\xc4\x9b\x84v\x01\xef1\xa1\xd7R\xc3\xbe\x82q\xf0!\xa1\x17\x18\xef\x11\xa1G\xe8xL\xe8\x1e:\x9e\x10\xe4\xacs,\xd7\x13BO\xc0\x01\xf3\x83S\x84<%\xf4\x1d\xa4\xfc\x80\xd0\x1d\x0c\xd9 \xf4\x85\xe4\xce}\x08h\x10\xfa\x1a\x8a@\xe81x\x1f\x12\xfa\x8a\xbdv\xf0*$\xd2\x86\x1e0K\xce\x08,z\xc8^\x00\xff\xd2]\xf6\x02s})\xfc\x92\x9f\x0f\x08\xbdac\xfa\x86\xf95-\x88\xe9s\xe6\xe7\x87\xde\xef\x89\xa7\xc2}\x9e\xa6\xf4-\x9b8\x16\x9a7\xb5\x08}\xcf\xde\xd5\xfa\xf4K\xf6\x9e~\xc5\xac\xff\x87\xbd7\xedn\xdbV\x1bE\xbf\x9f_!\xf1\xe6\xf0\x00\xdb\xb0\"\xd9\xcdD\x15\xd5I\x9d\xb8M36N\x9a\xb6\xaa\xb6\x17-A\x16k\nP@\xc8C$\xfe\xf7\xbb\xf0` H\xd1N\xba\xdf\xf7\x9eu\xd7]\xf7\x83-\x10\xf3\x8cg~l\x8e\x88\xd23t\x0f\x93?h\xb7\x8b~\x8c\xe3\x1f\x9d\x90\xe9%\xb0L\xa7\xbdYV\x80\x1b\x0c\x88\xc0\xe4'\xfa\x02\xbd\xaamn\xa0\x83]\xa3/\xfa\x91\xb4o\xc0\x17lH\xb2\x0f\x1fRJ\xdf{x\x0cHf\xbf\x85\x8cjO\xa9\xb5\x83\x7f\x0f\xbe72\xc1Mk\x1e\x90\xcb\xe6(\x8f\xe3\xee\x97\xd0\x80]\xc6\xd3<\xbf\xa9U\xfe\xfe\x07\xfa`\xd0\x8a\x03} \xb8\x89\xe64~q\xce?\xd0@\x1f\xc9\xf0\xe5c5H\xa2q\x96\xf5\xe3o\x8f(\xaaC\x11\x9b\x12\x8f\xdfL\xa8\"]}V\x9b\x86\x93K\x8c\x03Z\x1d\xd8G&\xbf\xd2\x9f\xb6\xdb\xeeE\xdd\xe0\xe7\x97\x1eH\xd8\xec\x1a\x035mcL~\xdfe\x0b\xbaK\x03u\xf5\x0b\xdc\xa6bc\x18\xc6\x0b\xc61\x8ecU\x92\x97m\xfc\xd9\xae\xeaq\xa1\xb2y\xc6fxS\x85\xa9\x17\x8eP=\xc9\x8c\x19\x96bxZ\x07\xb8\xbc\x9d7\xcb\xb2#\x19\x1d8\xa3\xb9\x8c\xa4\xb4?t@\xcb\x0f\xe9\xd0\xc3\xfbdJ\xd6T\x8eS\x0d\xb3\xach6Z\xf7\xc4E\xb2\xee\xcd\xd3,'s\xbav\x8bDf\x10\xd6\xbb\x83,\xe8\xba7\x13\xcb43f\x9aW#\x94m\xb7\xe8\x80R\xe8\x9d\xdd@q\xac\xc0\x0e-&A$\x1dX \xcb\xd5\xa8\xa0\"A\x8b8^\xf4\xc0\x8e \xd2\xcf\xc8\n L\x16q\x8c\x16=v\x9d\x81+\x7f\n\x94\xca\x82R\xbav\x0ebF3\xf4\x11\xb9\xd3\xba?]\xa4\x19\xefLo\xa69\x8b0NPN\x7fG\x05\xc6\xa3\xdc\xd0T\n2'3\x9c\xccu\\2C\xa1\xc0\xc4\"\x8e\xbbS\xe8\x80i\x0b\xc4\x10\xcb`\x82\x8d\xb3\x9bj\x0d\x06\x84\x83[\x89`\x8c\x7f\xc2\x10\xf5\xb6(\xc9/\xad\x90\xb8$b\xf8\xc7\x08!Ik'\x1bE\xf0\x13a\xec\x1d\xe3(\"u\xdb\x85\xe0\x94\x13\xd9\xcbx\xa6LV\xe6@\xf2\xc6e\x80$\xc6\x89\xa4\x1b[A\xa2\x88)\x9e\xf0\x92 A\xa7\xe3H\xf0h\x8fM\xf0H \x89\x93h\xcd\x17)\x9f\xe5l\xe6\x07\x00\xbc\xcc8\xfe\x80\xa2\x8f.\xadck\xebT\x99\x80L\xfag\x03;zn\xe6w\xba\xf3\xcej \xd9\xee@\xc0\x17\x192\xc2\x05\xf4im\xbb\xfe6\xba\xd7c\xcbL\xa1\xaa[\xef\xab\x16%a8\xf9\x05\xb5u\x990\"\xe1\x14\x86\xfb\xea\xb7\xed\x16\x1a\x1a\x1d$\x03\xc2{`\xac\xc9q\x8a\xb8\xe9\x8c\x11]j\x95\xaa3b\xce\xc1\xb2v\x9d\xa4jITS\xfa\xb4u\xe0\xd5h|-?\x9b\x8eGv$>~\xe1\xe3\x89\xe3\xadC\xd7x\x93\x92M\xe4.\xae.\xf4\xe5\xa8\xd3\x04\xd8\x9a$\xb2\xad\x90\xeai\xa8\x01Ls\xeb\x00\xed\xf6\x89\xb4\xb6\x7f]\x93\xe0p .\x06z@^BQ}\xd0J\"\xda*4\x17\x93\xae\xcbU\x1e\xd6 \x97\x80^i\xc0\xe3\xcd\x9cW\x07\xb43\x05\x14\xe5Lo(\xb8If\x9dL\x15,\x9fG\xce^\xf8\xef\x88\xe3\xa1\x18\xd5o3s\xdbm\x1c\xf8c\xec\xc1;a4\xce\x90`z\x1f\xe8\xeb\x853$\xddG`D^2\xf0\xd7dpt\x0cv\xae\x9b#\x1f\xb8\x91\x0fv\n\xfa\x86m\x05\xe5\xf0\xa78F_\xea\xf7\xbe\x81N\xbf\x90W\x98\xdc\x80)}+k\xaa\x81\xcc\xa1!\xe9\xbc\xb6_ \xfd\x8cL\xbf\xa1\x94\xef\xb8\xfd\xaa\xa9\x1e\x9a\x8a\x15\xd1\xf7\x11 \xc9\xb7\x0co\x9e\x850\xf1+\x07\x1f\x12wK\xe9\xb0\xd9\xba:\xe4\xaf\xb2dY\x16\xc6\x94x\xae\x0f\x86\xc3\x8eI\xad\xfa+\x99\xae\x82\x8a\x7f*\xc9\xc6^N\xc9\x97\x12\x93\x05\xfaB^\xb9'v\xa9\xe1\xfb\x8c\xae\xf5O\x816\x16\xc7|\x05\xe7\xa5Q\x87Y\xc2d\x07\x14\xa4\x9f\xed\xa1w\xbb\xc9.\xb6\x991\xbf\xa3*\x8fwzo\xdd\xd1V\xbe\xdd\x9a\xe6`'\xb5OF\x1e\xc7\xbaM\xd8!_\x12\xd8\xeef\xcf\xdeQ\xef\xaf%\xd9\xa4y\xde2\x00s\\\xf48\xf4\xa9\xe6\x1e\x06\x14\x10\x06\x180k<\xe7f\xdb\xdc \xefd\x1b;\x03\xf3}R\xd0\xc1\xf0\n\xb1\xbad\xf1%H\xbd\xa5{{\x1a\xc6\x1b\x0c3sr\xcd\xec`R\xec\xed\x11\xeeD\xf7Y\x9b\xe1\xfe\xe9v\x8b4tH2p\x8aO\xf6\xf7\x8b\xedV\x02\xa7\x05\x13\x01\x00\x82\x8f*\xab\xeb(3\xb0A\x1c\x0b\x949\xc96^] 2\x9d\xb2o\x9a\x10\x98\x04\xd12 \xa26 \xbb\xe3\x16\xcdQU\xd3+\xadw\x01\xd7W\xe1\xfa*\x91\xd8\xedky\x07\x0d\xd4qw\x80\xb2,Q\x94y\xe2\x0bIi\xc3\x04\xf8-\xd4G\xdb\x07\xaf\xc6\x0b\x12`\x86\xd6`\x84-\xd3q6\xd1\xa1\xbb\x88\xee\x83\xfea\xd8\x13\xdd\xb1\xb03\xb7\x13>\x0d\xc5\xb3\x92\x94\x00\xe996\x8e\xfe\xf7\xff\xf6\xa5'\xdb\xad\x18K\xc4\xf0\xe4\xae\x0e\xdcB]\x05\xc8F\x18-\x0f7\xdb#\x85$\xe2x\xdc\x9f\x10>\x1eLp\xa2\x10\x0f\xf4\x92.\x81\x8d\xac\xc1D\x9d}h\xe0\x1c?=\x99^\xa5\xcc*gh\xe0\xb4\xcd\x8fA\x8d\xc4bP/\xa0\xa5XJ\xca\xe1!\xee\xcd\x81\x96r\xf0\xc8\x90R<\xe1\xc3\xd0S\x9e`rNW\xbd\xd7k\xa3\x1f\xfc\xf6\xccx\xc3\xdanW\xbdO\xec\xece\xa6\x9a)\xe4\xc6<\x02@\x8a\xb8\xa4+\xc7\xf5$g!\xfda\x86n0\xb9\xa6s\xb4\"\xd1\xe75[\xb3\xd7\xd9T\n\x95\x16\x17\x11&W\xf4:\x8e\xaf-<\x7f\xb5\xdd\xd6\xb9\xc9\xf0\n\x12\x05\x14\xf2\xb38F\x8c\xde\xd8\x87\x1a\xc71\xb3\x98\xd5P\x0c\xf1\x06\xd8[\x9c\x08*@\xce\xc6\xe8/\xa1\x00\xec1\x13*F)\xc2\x89\x97\xa9eeY\x85\xa1F\x83,\x96\xe4l\x94\x86\x1d\xb9\x81Z?d\xd3\x0b$q\x99\x9c\xc7qw9B\xe0\x8c4\xa7\xde\xa8ACy(\x8a0\xf8\x1c9G\x12\xf7\x84\x993\x94\x93\xcdt\x91\xcat\xaa\x98|\x96\xaa\xd4\xbcb\xb5\xc6\xf2\xde,U)-h\xb7(qr\x19\xc7\x97\xee\x0c\x8f\xd0\x94\xfa\x0f\x7f\x9b\xad\xe9\xd4<\xc0\xb5Z\xd6\x0e\x91\xd0\xe7>\xa9%-L\xd2\n\x92\x02\x8e\xfbU\x1b\xdbp3\xe7 #\xc0\xc9\xb1p\xdc0\x8bc\x94\xc1\x8cP\xe5\x1c1(\x92\"\xacO\xe1\x9d\xec\xc3\xdb\x8e\x8bg\x87\xf5\xacI\x8c!\x8fc\xee.(4\xa0t\xc7\x94\xc5\xc8&k`\xc5\x07\x01\xd4\xfd\x16J\xa4\xa5@\nK8\xcc,y/u\xe4\xbd\xc2P\x0c\x87\xd2?p\x15\x01\xcf>t\xe6};aJ\xe5lv\xfb\xad\x9e\xf5\xe6\xcd\x87.\xaf\xee\xf8)M[\x1e:\xd1\xfa\xd0\xe5t0,\xda\x1e:\x01\x0f]\xd1\xf2\xd0\xe5_}\xe8\x8c\xcb\x0dx\xe8\xc4\x84n\x8cW\xa3$\x9a\xaf\xf3yf\xccf\x19\x18\x9e\x95d\x7f?\xaf\xde\xc0o\xa9\xc4\x8cQ\xd7a)\x07\x8dJ\xec3\x9a\xef<\xa3S\xb7\xf29\x9a~\xdb\xd3t\xe7\n\x1fX\xae\x02\x10\x95\x81Yg\x16\xf8\xe0\xb1\xa1A\x03%x\xeah\xbekCun]zx\xd64\x90#\x99\x01\xfe\x1c4\xd9\xcd\xe2\xb8\xbe\x92\xd9.1\xd3,D\x03\xd5\xc1\x9b\xb2\xdc\xa1@j\\ycK\xb5l-\xcb\xb9(<\x1a\x1c\x01W\xbfMCh\xb8\x83t\xf0\xcaDR\xe5\\e\xaa\xf7\x07\xdauZUyF\xd1}\xd2\x17\xc1?+mi$\xa6\xb0AsZQ\x8al\xbbm\x99\xb0\xedv\x8d\xb2\x10\xa7\xb0\xf1Qm\xe8-T\xe3V\xf1\xa2\xc7\x87\x95\xbc\xce\xe3G\x0d!\n\xcb\"\xd2-\xcc\xbe\x8d\x99\x11l\xb0\xc1\x81~[3>\xb3\xdb\xec\xc0\xde$\xfaJ\xb1\x8fD\x8al\xd5C\xf3\x9b\xf1\xb1sL\x8a\x06\xa6pm\xe2\xf4i\xd6\xc7#\xd8\x85\xb6\x8b~\x0f\xda\xbdWl\xb7\xdd\xdcl\x97Y\x1b\xf8nDv\x08#;\xc6\x80\x06\x81\xd5\x9f\xc1\xc4^\xef\xb0H\x19\xbau\".\x1b\x8c\xf0\xc7\xeel\xe91\xb7q\xbdo\x08\xb8M\xcck@\x98\xd9\x17\xec6A\x03\x80\xd22\xa4\xd1\x0c\x07\xa4\x15c6\x19\x82\x1bq\xead/9\x1dO\xc6l\xa2A\xfcn\x86\x14\x89\x9e\x1e\x1d=?9y\xfb\xfe$\xc2q\xacz\xfe\x13DL\x14\xe9\xe3\x91\x1a\xf7'INV\xf0=\xd0\xdf~\xe0\xc3\xa0!\xda\xed\xf28\xee\n\xd4\xe0\x84L\xe3\xb8++\x9e\x84\xc1\xd27f:\x93\xfdA9\x9c\x8eR\xc4\xc8\x80l\xeaH\xa7^\xbf\xbc\xc4 \x1b\x0f&t\xe0\xaed\xa6\x014K\xdem\xdb\xaf\x0fo\x97/\xaby\xc1\xbbc\x91\xdc\x06\xd5\xfb=\xd8Jo\xadM\x97\x06\xceV\xab\xb5K\xa9\xd0o\x1c|$\xe2\xdbo\xdd\xfa\xc6xl\x0f\xc3\xe3\xbee\xe5>4\x97\xeew\x87\xe6\xce}\xf4\x08\x9c\x14\x85-\x93U\xfbF\n\xc5A\xd6\xdb\xed\xce\xea\xc88\x1et)]\xa3\xcdY2(\xc9\x1a\xad\xd0\xa6\x04\x8f\x13-\xcb\x11\x14]\x99\x13\x12\x9dE\x8e\xebzX#\x1a\x0cJ8\x14\x9b\xb3\xe4\xa0\xc4\xb8w\xb6\xb3\x01J\xa27%\xe1\xd6$\x1c\xaa\x04\"\xc6|B\x1f\x91(=\x9b\xce\xd8\xfc|\x91\xfd}\x91/\xb9X}\x96\x85\x8az\xc5*\xcf@\xcd\xbd\xdd\x1d\xad\xd2\x1b\x91\xe9K\xe0QW\x0f\xaa$\x0c\x8f\xf9d\xbbm\xaf\xaeK3\x04\xb9\x14\xc6V\x983\xd2\x9bkT?X\x95\x7f\xa2\xdc\x08.\xef\xf8 Z\xd3\x01Y\xd1\xb47'sZ\xf4\xe6C\xf1\xc3z\xe8eJgdA\xa7\xa8\xba7@*\x8b,\xe9j\x94\xa1\x05v\x92d+\xb4\xc08\xd11\xe4\x9c.]\xc57\xb4?<\xff\xe1f\x88gt9\xbe\xd9\xdb\x9b\x10\x19\xc7\xdd\xb99\x0c\x0b2\x03\xfd\x95\xf1lB\x17\xe3Y\xe8\xa4'Y\xb7\x9f\x8f'w\xdc\xe7\x86Ui\x0cU\x83[\xe3o\xbb\xd4\xcdiyd\xb6\xae\xc1\x98R+\xef\x06\\\xeb\x83\x07v\xf7\x1e8\x88\xe1\xa1\x85\x18\x0e0Y\xd1(\xea\xb9\xf6\xc8\xdc\xcb\x80\x91\x19\x9d\xa2\xa0#CQ\x9dD\xd7\xcf\xe6\xad\xde\xed\xa2\xf5v;\x03\x8c(\xdbqa\x15\x0e\x8bt\xe5v+{W2\x03#\x1b\x18\xc7qwV\xea-or\xb4\xc0\x0f\x96\x8fk\x89\xc9XC\x95\xeeF\xfd\xb6G\xc2H*y >QYL\xe3#\x99\xccQ\x8a8&R\xcf\xa2\x17\x1br\xcb\xb9\x1a\xad\x1c@\x9a\x11\x81\x13eE*\xc5~\xe6\xf6\x89\xc0\x94\xd2\xecN\x12\xc4\x13\x0b\xd9=\xaa\x10\x7f\xf0\x16v+\xd6\x7f\x19\xb0Q;F\xee y\xf4\x1a)\n\x9as\xa3nW%\x91\xf1\xfc\x15Q*4\xae\xdd~7?9\xf8\x96\xbdW9\xd5\xfe?\xb5\xfb\xaa\x16w\xf6_\xd8\x99\xff\x8e\x1d\x18\xd6w\xdb\x1e\xac\xf2\xfc\xc3]\x88\xe6\xe8\x1bw\xa2\xdf\x85\x1a\xc7\xbak\xb7I\xc2\xab\xdd\xc6 \xdf\xf3\x82\xf6\x94R\xd9\xba\xdb\xf4B\x83\xc8\xf7\x8e4\xf8\xad\x0f\xf3\xebt\xf5-+\x0d\xc4\xa3\x07\xf6q~\xf2\xb8\xb1\x81\xc0\xfb\x0dj\x81\xe5v\xe1r\xcb\xcd\xd9\xc1\x8ek\xf6\x1c\x03\xc8N|\xd3F\x0c@\x87C\xfb\x8c\x0f\xac\xf8\xe8wn/Z\x01\x9e\x07\x0f\xcc^|l%x\x9e\x18\x01\x9e\xc7\x86\xe8\x04\xd263+\xb6\x034\xa7'\x8fn\xa7\x99\x99\x9d\xb1\xa4\xfb\x86e\xea\x15\xb6\xf4|\xe8\x97\xa4\x19\xff\x89\xa5\x17\x11&7t9\x8a\n\xa6\xa2$Jg\x1ac\xa5B\x83\x85g\x14h'\xd5\x96\xbd\xa6\x97\xe4J?\xd4\x17\xbbW\x03=\xd3\xf0e\x8a\xce\x08\x03\x87\x12\x11\xa5\xac\xd5\x96l\xc5\x85#\xc6\x80F?a\x86\xebR&\x911gtK\xd9.:\x8f\xe3\xee\xda\xd8\xd8h\xaf\xa7L\xa2s\xa6nk\xdb\x15\x1fY\x89\xf7[\xebX\xa4\xc5\x7f\xa5\x0f\xc1\xa2\xf0\xbb\x07N\xb8\x1d\xba\xb1\n\x9a!FZ\x90\xbb\xcb\xed\xb6\x8b\xce\xb7\xdb3\x07\xe7\xc4qwU\x03\xde@\x0e\xf7\x12\xf7\xac4\x19\xc2@]\x027\xca\x18\xe3k\xca{\xe7\xa0\xe4\xe5\x84q4\xbeI\x96\xe4\x06\x93\xa2\xf7\xfe\xf9\xaf\x1f_\xbc\x7f\xfe\x8cv\xfb^\xab&\xb3\x9a\x85\xb0\xb6o\x81\x8fvM\x9e\xd3\xb7\xe3\x9b :\x1fm\xcad\xbfO\x06\xb8K\xdf\x92SZ\xef\xc9\xdb\xde\"-\xd0\x00H\x13't^\x87\xc8\xa0\x97\xc6S/\xf9@\xbb\xe7q\xbcj\x15\x921\x9c\xbbK\xa2\xe8\x83\xa1\xda\xdf\x1fb\xa6\x1bV\xc4k\x88u\x194\xb3\xdf\x07\xaa\xc7\xc9v\x8b\xd05UA]p\x184Z}M\x98\xbbl\x16\xc8\xd6J\xae+\xe0\x08(\xd9<\x8es\xc4\x89\x1c\xdfL\x88$KL\xa4\x9e\xb8\x80\xd9zF\xcej\xb2L\xd7\x98\xa0\xd3\xed\xf6\x83~\x05/\x90\xdb\xb6\x98\\ \xd8;\x98,\xe3\xf8\x02\xc1^\xc4\x98\xa0\x0f\xdb\xeds\xaccn09\x8f\xe33\xa3M\x17\xc7\xd6z\x97\xfdvb\xd8W\x1an\xbd\xd6\x98k\xc5$\xb3o\xcau\x97^\x96\xe4\n\x93\x19\xd2\x03#\xe7\xdb-\xe8\xef\x9d\x80\xfb:\x1d\xa7{\x7f\xfd\x1f\n\x85\xdb\xf6\xbd\x03\xdb\xe7\xd7\x8a\xf1\";\xcb\x19\xb2q+\xc9.\x19W6A\xf0\x02yr\xcbW \x8d\xc1\xa0\xff\xb5{+#\xa9\xe7\xad\xb4\x99kA\x19U\xe1*\xe08\xce\xbaT/\x9eD)\x0d\xe8\x1c8\x8eS\x9dP\xc5\x80Q4\x92\xe2Vy\xf9\xf6\xeb\xfb\xa1\x86\x1eB\x05\x00\x90\xa0\xd4W\xf8w\x16\x9c\xd07vx\x83?z`np\x90\xac\\YLnn\xef\xfa\xde<-\xd4Kv\x03\x97\xf9\xe1\x81\xbe\xccg\x96w0\xab\xc4\x17CM\x8a\xfa\x89m8\xe6&S3gk\xcaj\xbc_\x897\x05\xe0\xc5\n\x93\x05bV\x10AY \\\x81\x8c\xb2;\xa8\xa3:\x00 O\xabp\x91}aI\xbf\xc4d\x05*g\xfa\x93\xf6\x8d\x9d\xe4.\x05z\xa2$l<\x9d\x10\xf0l\x8a\xf5\xd3\xb4DJ?-\xad\xcbO\x04\xc9\xe8L\xa3I)\xbd\x01\xf4\xc9-p:J\x9d\xc0G\x82\xb2\x9e\xee\x03M\xe9\xc6v\x93\xce\x11H\xbc\x90\x0bv\x93(KA\xe5D\xef\xbeL\xac\x8bDRS$$\xab\x13\xab\x83\x0db!\x99\xd1\xb8\xddn\x91\x0d\xd1\x14\x83D\x8c1\x0c\xa0\xbfV\xa3\x0c\xc6\xb7\xb7\x970\x1b \xd1q\xd4\x05\xeb\x10(3\x8f\xa4\xf1\xa3\xaa\xb7\x0d\xb9i#\xb8\x13i\x86\x07=6\xfa\xf1\xa6\nGu\x91\xbe\x1e`\xc2p*M\x7f\x86|\xc8)\x87\xce`0\x07}\xc1n(U\xde\x9c\xb3\xb7\x1b\x90\xa1u(\xe6\x01\x17E\xd2ze\xce\x02\xf9ih\x14\xc4\xa7]k\xb8RR\x07\x99\x0c7\x97q\x8c\xaa\x0fZ\x05\xcd<9:\xb8\xbd\xa8\xd4\x98\x9b\xaa'\xc4\xf5~h\x9b\xa0\xcc,\xa2]\x8c\xd5\xc8\xed\x1e`w\xdbpi+j\x01f]\xef\x81Km\x18\xe4`'\xdb_$\xd0\x1a\xf0\xb8]\x17\x87\xaeWv\x8e\xab\xbe\x85C\x15\xc0\x19\x85\xd1H\xb7\x07\xfcx\x05&\xd6\xda\x11\xdc#\xc8}\x80(\x16\x8c\xc7FCX\xe8]\xa3`,\xfb\xfb\xd5\xb8\xf6\xf7\x9dQ\x9a./\x89}\xa2kC\xf4&\xea \xf7\x03\xd5\x18\xe0\xb7\xd2\x14\xc9!\x1e*\xaaF\n\xc6\x91p\xbb\xaa@T\x90Nt\x8a\x80\x87qb\x84\x1b\xc0\xf8\xbb\x9d\x85!VT\xf91\x97d\x91\x16-t\xcen\xd7O\xbc\xa1`\x86\xfb\x8e\x8f65\x9a\x8f_\xb6j\xb1\x1c\x98\xa3\x1b6\x12}\xa4\xa8\x15 \xdc\x84\x9f7\xc1 \x85\xcb2\xd9\xa4\xb3V\x02\xac\xcd\xcdh\x95\xdf\xf4q\xa5o\xfeu\x0d\xa7\x02O\x18\x9b\x06}\xca\xd6cg\x1e\xd6L\x17_C\x0f\xcd\xd3\x99\xb4?_55-\xab\xa4\x0e\xa6v$\x1eN!kC\xf0f\x11\xca\x7fI\xa7\x04\xc1\xac@\x17X\xe64J\x10\xe1\xb5\xbb\xa3\x10Q\x1d\xea,8\xd4\xa0 \xc1\xedA3\x0c>\xbf\xc2<<\x17\x0e\xb5\xb1\x1a\x11q\x8c\xec\xe1\xe4\x94\x8f\xccA\xd2w\x9e\xee\x92\xd9Ix\xe4\xb4\"\x94\xd3{\x80\x1b\xa9M3\"\xc8a\xb6\xdd\x8er\x84)j\x93\x03\xe5\x89oU\xd1(1\xe1#\xaf\x18\xe1\x9b&]\x0eo\xc2\x1a\x81\xc8_\x0b\xb2y\xd0\xefW\xc8\xe6A\xff\xd0\xfc<0?\x0f\xcd\x8fM{l~\x8c&\xf3\xa0o~\x8cB\xf3\xe0\xc0\xfc\x98\xe2\x83\xef\xcc\x8f\xa9e`j\x19\x98Z\x06\xa6\x96\x81\xd5\x87\xee\xdf\x8e\xd5\x1a\xba\xe6\xb7\x82\x1e\x8f\xea\x04\xe0\x87\x06\xecpz\x87\x16\xea8|h\xa0\x8e\x83\xbe\xe5\xb9\x0d4j\xb9\x82\x98\x03\x03wX\xd5\x8f\xc7\x0f4\xb41GQV\x1c\x01y\xf1\x04\xfcI\x81\xc7J\xac\xe1\x8f\x1f\xe8\x83\xc1v\xdb\xa0\xd6_Z\xad\xfe\x8a\x14\xbb\x98\xd0\xee\x800G\xa3\xc4\xe3\xfeD\xa3\x93\x1a\x0c8\xa7+\x14\x99x\xc0'\xc3S\x9c\xcdQ7E\xac\xa1a\xa0\xa8\xae\xd0U\xee)I\nHH\x99\xc6\x11\x86_g\xddt\x97\xdbm\xf7\xbc$\x1b\xd3\xf4\xee\xfdD8\xb1\x12\x1d\xb4\xb0'iE\xd7(%}=C\xc6\xd5\xb9\xa2\xfb\x03\"w\x08wC\xf5\xbd\x04\xd3\x05\xd9\x1c\xdd\xa0\x8c\x82\x11\x145J\x93\xd0\x86\x81\xd1\xe3\x98\xef!As\x94yJ\xca\x0fO\xfa\xfdG\x83'O\x0e\x1e|\xf7\xe8\xbb\xfe\x93'\x83]\xd5\xc0\xd7\xe9u\xb6\\/;\xd62X\x07\x9e\xae\x0e\xbb\x9e26c\xb3\x08[p\xa1?\xe4\xdf\x8b!\xdf\xdb#\xf3\xbd=\x0c\xa6\xdf\xb28\x9e\xa2\x15\x99\x93l\xcc'\xc6\x82\x01t\xe2\x07\xfa\xdf\xd0*\xd4\xbc\xb7G2o\xebfeGE\xe7d\xf5\xed\xac\xe3\x07\x83\xba\x9a\xe7w_\x85\xfeSPm\x1e\xa6\x1d\xb0(n\xd45S\x92\xa1>\xe1\x18'l\x9cN(\xbf\x13\xaf1\xc2\x08\xf6\xcc<\xd0gF\x04*Dw\xcbQe\xf6\x08\xc8\x9d#\xa0\xaa#\x80\xd4\x8e>K:\xa1;\xef\xccf.D2(K2\xd0\xfby\xcc&\xe8G!r\x96r\xdc\x9b\x0b\xd1\xce\xad\xfa\x16\n\xd2\xc1cKA\xb2\xe2\x15\x03\xcb}\x7f\xe4\x88\x99\xfa\xd8\xaf\xcdT\xac,Gqn\xef\x8f\x99\xb9?\x0c\x01\xc9\xe8\x7f\xe9{\xe4\xdc\xea\x0e\xde\xd8\x15\xbb\xb4z\xceg\x16\xed\xb9\xb6\xfc\xa7+\xabF\x7f\x01\xb7\xcbwF\xff\xebq\xdf\xa8\x7f\x1d\x1eb\xa3\xf9\xf5\xd0(~=zh\xf4\xbe\x0e\x0e\x8d\xda\xd7\x81U\xfbz\xf8\xc4h}=84Z_\xdfY\xad\xaf\x07\x07F\xed\xeb;L\xde\xc05\xf6\x18\x93W\x10\xc0\xe4\xb5\xa5|=\xb3H\xd31u\xccb\x03e\x91/\xf4\x089\xdf\xb9\x98|\xa4\xefQ\xa4\xc4;\xe7\xe2/\xc2\xe4G\xfa\x0c\xd0\xac{\xf4Y\xa8\xf5h.\xe4\x08\x93O\xd4\xa3\xb6\x0e\x8a\xf8L\x85\xbd\xb0\xc9\xcf4C\xd1/'o\xdfD\xce\xaeS6\xbf\x890\xf9\x8d>\xef\xcd\xc9\x1f\xf4\xb47'?\xd1\x8b\xde\x9c\xfcJOzs\xf2;}\x8a\xac\x17\xa3\"\xc2\xe4\xa5\xfe\x14\xab\xfd*\xe6\x17\xc8\x005\xed+a\x13\xf6%;\xcf\n%u\xcd\x7fV5@\x06\x935\xc8\xc0\x98\xcequ\xa1kS\x8c\x8a\xde\xaff\x00\x843\xdaUl\xbb\xed\xaa@\x17\xbb\xf1 |r\xb0C\x04NI\xe2x\xddF\x00x\xd4\xa5g\xe8\x0f\xcf\xfbk\x87\xa6\xfe\xb0L\xbf\xd43\xfd\x1e\x95\xb8\x97\x96%\xd6\xff\x1bl\xb3\xea\xa4\xfe\x86>\x01\x1a\xe8\x89\x1f\x9f\xc6jB\xfe\xb0\x994|\xce\xba\x94~\x8a\xe3?tF\"q\x99\xfc\xd1T{pb>\xbf\x8f\xd9\x84\x9e\xa1\xcf\x01\xe6\xef\x1e\x94\x1f\x11w\x8a\xa9v\xa9\x89J\xcf\x13Ff\xcc\xd8\xa4\xcc\x04OT\x89I\x016\xdf\x82X\xaa0\xe1%\xc9\x18\x9d\xb6\xd0\xffv\xdcg\xb5;\xc52K\x82X\xa8\xd3\xf6\xb9$\xe9\xae9$Fa\xb4)C/\xcd\x0c,\x90'X\xdd\x18,\xd8\x8di\x818&+\xf4;\x91x\x84x\xaf\xe2\xb0\x8e\xd0\n1\xf2\x05\xc71\x1b\x7f\x99\x80\xb1[dC`v\x8c\xd33=\x1d\x01K\xf6\x12\xf5\xc1\x0e)\xc6\x89-\xbb\xdd\xea5\xf8B.\xd1\x80l\xf4\x93\xee+\xe8c\xe2\xb450N\xfe\xb0!\x0d;\xd3&\xec\xeb\xf9\x0f\xe7Fd\xeb\x1a\xf1\x8a\xa5\xc9\xc0f\x9e\x1d\xcb1\x92\x01\xc4\xab\xf0\xa6\x88\xe3n^\xd93\xc6\xdbm\xca\xcc\x1c\xe9g\xb648x\xdef\xdc\xfd\xc6\xd0* \xa7\xbf\x06$\xd6\x8aT\x08\xdff\x96\xf5\xe4)\x0c\xd4\xd3\x97Da\x1c\xc7\xa8\x8b\xf8v\xdb]\xb9B\x10\xfe\x1d\x02+\xa7,a\x84\xb7\xf5t\xa8 \xden\xf5\xd8\xa7\xed\x1b\xf2\x1c\xf4L\xfc\xbai\xfcUof[\xa9\x84J_\x12\x89\x9d\xd8\xd9o\x88\x13\xe9;*j\xf98\xb4\xcc\xcd*l\xb7H\x04\x0b\x0e\x8b\"\xca\x92\xac\xdb&\xe4'tn\xcd\x94T\xd0\xdb1Ru\x86\x88n\x88AC/\xe0\x97\x1b\xc17C\x9b\xe5%Y\xb5\xd5\x0c\x9b\x95p\xfa\x13R\xa3\x97\x89iE\xd6Z\xe1\xf5V\xba\xae\x19\x05\x93\xfe \xc2\xd24\xf5;\x98\xda\xd25\x94C\x94o\xb7\xe8o\x84>\x87\xcfi6\x87\x15\x08m\xb8}\xde\x05i\xcc\xf1\xae\xec\x0c\x06O\xb4\xd5ab;\xb0\xddmN\xbc,\xfb+\x8c\xc3\x9eOF\xdf\xe9\xd5\xe5\x0d1\x1c\xb7\xb5\xacH\xcaK\xc2\xf4\x19\xf5;\xc7\x04\xc7_&\xb0\xefP\xb5\x91\xe0`V\xbaD\xfa\xd8\xb1Ju\xb6S\xc41gq,\x19\xdc\x82\x1a\xbe\x9dg\xe7k/\x80\xa11k^b\"\x18\xc8%\x86\x8aA\xc4\x9bp\x8c\xda\x0c\xc9\xdf\xb3H\xb0J\xcf\xf5\xdc\xff\x8d>\x93\xe8*S\x0b\xb1V'\xf0<\xb63\xce\x04C0|\xb3?Nzs\x9a3r\xda\x9b\xd3\x94\x91\xe7\xbd9\x9d2r\xd5\x9b\xeb\x97\x90\xae\x19y\xdb\x9b\xd3\x15#oz\xf36`K0\xf4\xde\xd6E\x8a8F\x7f\x847\xb8\xf1\x9ed\xef\xe2hw\xe4\xed\x8f\x91\x1bUPVc\xf8\xe9v\xfb7\xfaD\xa2\x95\x15\x80yQ<\xf7g(\"9\xab\xa9\xc2\x18a\xb1[\xf5R\xba9)\x16\xe92\x01Y1\xb3\xe9\x92\xcf%&\xc7\xe8\x1a1\xd6\x10\xe8|e\x0fR\x80\xc2\xb8g\xa8!2dD\xcfj\xf4\xdd\x06\x7f\xd7\x10\xc2V\xe8\x17}c\xd9\xf1\xfe2V\x13{\xd5~\x0e\xec\xe6\xe9h\xca\xc9\x9fc>\xa1J\x9f\xe2\x0bvs\xdc\xa8[\xa3c\x19\x18el\x1e%\xb6\x17\x05\xe6:-\x80d\xda\xfe3\x10$\xfbs\xcc&%Y\x17\xcc\xec\x97p5\xb8\xb1\x16\xa8\xd3\xc0\xd1Y3\x0d\x0c%|]\x8c\xcaOuQ:\xb7\x80\xedt$/5\xa1Fg\x88\xe1\xa4`H\xff\x82\xbeV]\xf4)I\x19\xd9\xb1%S0\xbd\x9d\x02\xdbv\xcf\xec\xf6\x112\x99\xb2o\xecj \x00RP\xc9\x9bt\xc9\x8ad\xdd\xac\xdb\xac\x7f\x91\xac\xbe\xad\xe2u\x83\xab67<\xb5\x9d\xd6\\\xb5m@Ho\x8e\x96F\x04\x03\x93\x9fq\x1c\x07\xad\x1a\x98vg0\xdb\xed\xba\x85\x08\xf0\xd9\x0bdEc\xbe\xce\xf3I\xd4\xa5?#}}o\xb7\xd1\xa6\x84\xafM\x9a\xb02\xf8\xf6\x10\x90\xed\xb5\x87\x9ew(m\x8e\xd8%\x89\xa0c6!\x19\x1d\x0cw\xc8\xa2\xd9\x10\x0bk\xb4\xcf_\xce\xd9\xde\xde\x04\xf6\xa7\xa4\x8a\xa0\x19\xd2\x8fv\xa5\x10\xa3\x9f\xf9,\xb4\xeb:\x87\x0cH\xed\nJ\xb6\xc8\xfdZ\xed\xd9\x00\xa0\x00\xd9x\xa2\xab\xac\x8e\xa1\x06 \xc5x\xa0\x0f\xdb\xcf\xa1\x95A\xa1\xa7|\x18\xdcj\xe3\x8f\x93\xed\xf6C\xed\x9e\xfbH\x82/C+{;\xc7\xe4\xb5\xbe\x90=v\xf2b\xfce\x02G\xaa\x1d\x98\xae,\xbf\xad\xec\xda\xfcC\xa4{`\xa9oV\xe2]#\xd3\x85A\xa2s\xcf\x1d4X7p\xfd2\x8b1\x82]\xf6V_\x13k\x006k\xaf[\xc6;\x01\xf5:\xdc\xbdkT{\xcb,\xc0\xb8\xa2\x9b\x92\xccw\x14|v\xc0\x9b\xef\x07\xae*\xda\x00p\xac\xe0C\x1b\x9cC\x8c\xc6E\x08m\xcdA\x9du\xadg\xdbW\xc7Fk\x84\x93u%\"\x14Y+\x05h\x05PM\x1f\x13U\x0e\xa7hN\xd6\x06\xfa\x9a\xd1y\xc0H\x0f\xc6;\x9c\xd5\xc8)s\xc8\xbd\xa0\xb3j\x03/\xa9= H\xb1B\xe1\xc8\x1bPY\xa3H\xc7D@y\xbc\xffo\x93\xe9/\x84z\xff\xc2\x7f\xe1\xf1\xbf\xf1d\xef\xde\xfda\x8ef\xff\x10\x980\xb3i \x85#\xe0\xef\xd8s\x89\xb0\xd1\xdaTt\xe1\xf6\xae^\xe9\x14\xad\xaa\x871r&S\x97#'%\xf5\x88\xec\x0fp\xa2z\x92\x81\x83CtN\xa2{\x83\xa86s\xdc\xad \xb7o\xe3\x0e\xcf\x1f4e,\xc01/\xef\xd8\xf0\x8b\xb4xa\x17\xafm\xbb\xdb\\mD\xe0\xdb3\xdfq|l\x16+6xw\xfa\xd3<\xbf#\x8b\x9d\x9e;r\x14,\x95w\xb6\xe2\xe9|w\xe4\xc83uGz\x8dltG.\xb3\x05?\xa4\xe7w\xe4Z\xf3b*Vzno\xe9\xd1\xc1\x13\x8c^\xa7jA\xa2\xd7\xe0\x04\xb4\xdb\xbfC\x82\xe2\x10\x0fM \xd9\xd3\xcf6\xb1\x8f\xf7N\x19\xbc)X>\xef\x81R\xf6v\x8b\xaa\x0f\xda\n<)\xaa\xb6\xdbM *vV\x17$x\xfbye\x9b^g\xf8\xfd\xf5\xab\x9f\x95ZYSkN\xa7j<\xd9\xd1M\xf0TPq\x91\x1cP\x8aD\xcfh3\xdd\x1f\xf4\xfb\xdb>&\xe6\xeb\x03\xbbV\x89K\x02\xd7\xbfV\xe7\xc9\xc5\x91\xb5\xcc\x13\xd1\x93\xacX ^\xb0\x8f\xef_\x11\xa5\xcb\xec\xb4\xe3\xba\xee\xb5\xfa\xaaB\xba^\\\x92\xbf\x0b\xc1\xbf\xa1\x9c\x9eT\xe3\xa8\xadY\x05.\xc9Y.\xce\xbe\xa1\x0e=S?\xe6\xe2\x0c\x8d\xab*&\xba<\xb8\x8dIr\xb2`\xe9\x8c\xc9\"\xd9\\\xb0\x9b\xa2\xa5\xc2\xac$\x96\xef\xd5\x92\x98\x96\xa4\xc9\x84u\xd8\xe2\xb8\xe1\xd1ar\x1b\x97\xb7\xd3\xc8\x98\xf1NQ\x96e\xe9\x8d(N;\x19\xef\x88\x9eX1\x8eTo\xc9\xd4B\xcc\xb6[\x90d\"\x86\xce\"z\x82\xe7\"\x9d\x85k.\xc0\xb1_\x9e\xbf\xb7\x83\xfe\xd9\x8c\x13a\x7f\xf5\xdd\xff7\xea\xfdk\x84\x93\xf1\xbf\xff:\xf9\x8bO\xfe\x85\xac\xa3\xfe\x11\xbew\xff|Yg\xa3\xea\xcdo\x15\xf1\x14U\xf5\x0ec\x92\x9a\x94\xb1\"|\x82I\xa1_\x1d\xfdo\xa4\xff\xedE$\xda\xe3\x1a5\xc6\x84\xa3\x1c\x81\xcd\x94\x9e\xe0\xa0\x0eG%\x11=\x8d\xeb\x1eI6c\\ei^\xd0\xc8\x1a,\xd5\x0fuoZ%\x10\xd5\xb3\x8b\x85E\xaf`\xce\xc8\xa0\x19\x18\x9aV\xc9\xe3\xe9\x04\x0fu\x16>C\xc6\xd7\x9d\xf5n\x07\x82Q\xbb\xa7\xbaN\x1f ?\x0c\xd6\x17\xccj\x05\x11u\xbb\x0d7\xfdM\xe8H\xa3V\xa8I\x9d0\xcf\x91\xb1\"\x1aTki9\xbdb\x91\xcd\x95\x07\xed\x8dM\x95\n\xa3\xb2R7\xaa\xac\x1c\xa4\xab8F|\xdc\xe8I\x0b\x07\xa4\xc3K\xa0!\xc96\x90\x90\xf1\xa9\x98\xb1\x8f\xef_\x1c\x89\xe5Jp\xb0\xa0\x14l\x93\xffy\xd0\xbf\x7fN\xa2=}o\x8a\xb6\xf23\xb6S\xde#\xcaU5\x7f\xed\xe9Z:\x11\xc6\xe5\x105\xa6\xd4\x8d\xff\xe3\xfbW'\xf0\xae\xbcKe\xbatl\xf3(\xa5\x03x\x98\xd9UG\xa1h\xa4?q\xe0\xe1\xa2\x15\xb8\x0b\xd8\x07z\xb3|5\x8f=\xe4m\xab\x88Qh}\xd8\xdd\xc1\xe1D\xb4\xea\xf6Xj\xfc\xa9c\x9b\x93\x8d\x13&\xd7\xa0\x84Y\xcbMY:\xcb7\x8ez\x0d\"K\x95\x07;\xf05\x15\xf8y\xf2\x86\xd8\x15\x8e\"cf\x00\xc0\xa2\xd3y\xe5\xcc\xf26\x9f\x16\xc2m@]b\xc8\xdatt\xf4k\xc4\xad\xab\x04K\xc8\xaa\x18\x9a\xfa\x10\x19[\x06\x0e\x8d\xe9\xea~X\x8dHV#\x02~\xe4\x85\xf3!\xd2\xc9\xf8j\xad\xfeW\xd1\xd1C\xec\xcc\x85\xec4\xd6\xd9\xfa1qh \xb0\x965V\xb2\xc3\x08\xf2\x8b\xee\xed\x06xT\x95\xf6\x87\xf2{\xe6\xcdj;\x03\xf7\x19ec9i\xab\xbe\xfb\xd5\xea3\x1c\xc7\x07T#G\x96\x8b\xdc:\xd0\xe7\xd7+P \xee\x8c\xbd?\x15~3\xe9\xa4EG/\xfcM'U\x96\xa7\x1b\xed\xc9\xbd\xa8#\xe6\xcd\xd1\xff\xaf\xc2LPd\x0d\xe2\xd8\xc9\xcf\xc6\xfd \xc9\xc6\x03\xcbP\xee\xb8\x91\x1av,f\x0d'\x00(\xb5TqW>%l\x9cN4p\x9aQ\x11\xc0\xf8\x99\xcd\xd0\x00A\xf4F1*\xb5n\xc3\x8ej_c61\xb7\xbc\xddc\n\x1b\x00<\xcc@\xc7>qR\x92\xacg\xf8I\xb5\x93\xe2\x04\xc4\x1a%u\xee\xf3\x86\x9bDw;}\xbdc\xe3\xfe\x04<\xd1\xdaZ\x9e\xe6\xf9\x7fX\x91E\x12\xfa\x1a\x91\xd6\x95-\xd2V\xde\xf4nM:s\xc1\x9a\x84\x8c\xaf\xcd\x8f=\x7fm\x8c\x0b\xff\xfa\xcb\x9d\xb6\xb0\xa5\xc2\xfb\x88\xe6N\x90\x18o\xcc\x19\xaf\x1a\x97\x93ae\xef\xb0?\x14\xdfswT\xc4\xde\x1e\xf6N_\xf9XL\x884\x12kz\xe7\xf44T\xb4\x8b\xdeV\xfc\x05he\xf7\x1e1\x8c4\xb3a\x8cX*\x07\xebK\xd6\x84\xcc\x7fT\xa5\xafP\xd5*\xb4#\xfcOj\x0c:9\xe6\xc42\xb5L\xbd\xfaa\xcdv\x1fV\xdf\x1c&\x99\xbf-\xfe\x8bMK\xc4\xf1^D\xa3=\xa9\x0f\x15\xf0\xd5\xac\xb2c\xac\x9f\xdc\x9dW\x91\n\xe7\xf26\xdb}2\x83\x83\xde\xa6\x93\xde+\x84\x84\xa1A`\xb7\xe3\x16\xa5\x1eO\x86\xb7t\xdc\xda\xcb3s&\x01\xdec~\x97m\xb7\xcc\x9ey\xe4,\x0e\xeaf\x9a\xef\x8b;E\xe3\xfe\xe4{5\xeeOF\xfb\x83D\x7f\xfc\x00\x1f\x83\xa4o\xe6\xc0\xd5\n\xc2r\xee\x034\xa5+\x85\xcf\xfe\x90\x7f\xef\xd4\xa5\x86|o\x0f\x877\xa0\x1as}5\x80eq\xb8Gq\x9b*G\x16>\x9d\x9e\xfe\xd6x\xca3\x12\x05\xb9\x1a\xda\xb7\x03R\xa7b\x0cH\xf5\xd0\x0f\xecC\x1f\xde\"\xcd\xf3\x8bk_tSV\xfe\xae\xefZ\nPeQ\xc1\x19\xfb\xea\xbc\xd8\xb5\x01K\xeb\xe0\xcaH\x92\x8c\x82\xbb\xb0\n'\xf8kt\x1f<=:U\xde\xb8&\xf8\x94\x85uJ\x9a\x8d\xf9\xc4e\xa4\x91\xb5\xd4fg_ D,Y\xc9\xd1\xea\xa8\xc1\x04'Q\x84\xcb\x12\x97\x95\xb6\"\x1b\xb1$\x80y\xbau\xe2\xe8\xc8\xfc\xb4\xe6\xd0(\xf5H\xff\x83\xc7\x08\x93\xc6<\xb7\xc2\x99`!_\x1f\x1c\x14\x9dE$\xb2ny\xd2(0@\xb6J\xd5\x82\xa7KF\xa3ig\x16\xe4\xb9?\xfd\x9f\x07}\x03\x94\xf5\x16\x92\xcd\xe3X\xf5\x8a\xe0\xf8\xb5#\x01;\xd0\xa3\x85uC\xe4\xc0\xd0?\x9b\x0e\xe3\x14\x10\xbd\xab'\xd7+U:\x0b=\xc0\xd1\xf6\x8a\x9f\xe0\x14,\x17S\xb0i\xb4\xdd\xf2n\xf8\x0d\x1d\xc6x\x83$EU\x05=`\x0b\xe9\x90\xc9t\x9b\xd7rk\x8a\xd5dE\xd1Y\n&:\xa0N\xca\x89\x00\xdc\xab\xe6b\xab\xb2s\xa9WXBN\xaf\xe7\xc6q\x00L\x19@\xca\xe4\xd8\xb1oTe\x88>\xbe\x7f\xd5Ys}\xae:J\x80\x0d\x7f\xdd\x8bN\xb4\xc7\xf7\xa2\xcel\x0d\xb1\xd1\x1e\xc3ei.G\xd1\xec\xb4^\xe2\xcctY\x81\xdc\xb90\x9e\xd0\xc3ng\xfaf\x87,\xe6\xc7Ly\xba[\x99\x83\xd9\xb29J{@I\x8d\xd62\xf7^0\xa9\"Q\x02\xce\x8b\xcc\x95<\x15\xf9v\xdb\xbd\x9fX\xf3\xce\xb6\xf2\xed\xb6\x9b\xf6\xa6\x0b6\xbd\x00\x1f]\x99\xba\xd1\xe8L\x97\xb7\x83\x9a/\xf8\xa5\xce\xa5\x01\xc8\x08\x0f\xefD:R>]\x08\xe9\x1d?[y\xa0\xccb\x1bEu\x06\xc2\xc7\xc3\\Kf?c\x92\x83SR\xfdom\x10\x86qd&*\"N\xbd\x8a\x80\x8e\xe2\xa4]\xd9\xdflt0r\x01\xc0Ox\x16-k&\xd0\xf2\xc4$\x8fc4\xa5\xdd\x01Y\xdb.\xd0\"@\xf2\x8ce\xe3R?\x0dw\x0d<<\x8c~\xd8E\xdd`\xa2\x9d\x84\x95s\xdfx\xe7D\xaeW\xb3T\xb1\x93z\xb5\xff\xf1\xedoaB\xd3\xcb.\xa5\xab8F+\x1a\xc4\x91i\x1c\xa3\\\xcfB\x10i\x9f\xf6\x10\xc5\xdbY)\xe0)\x96`\x94\xa9\x02\x01\xc6\xd1\"-\x16\xfa\xfe\x12\x85\xb2?\xe0\x0b\x96D\x1a5\x8b\x80\x0f\x0f{\xf3\xb6E\xec~\x1d\xcd\x95\x84\xdd&\x91f\x1e\xb6\xda^\x04`\xbf\xa6\x86\xe0\x01\xe5f>\xaa\xca\xe6\xc2\x95\x96\x8b\x7f[O\x1cY\xfa\x1ft\xc8\xcebS7\xa2\xb5SncZ[\xa5-\x9b\x03\xe1\x9d>\xb7v6c\x05\x92d\xe3=T5\xfb[\x81c\xeeQ\xda\x1d\x0c\x83;\xa4,K\xa2\x7fw\xaa\xb8c\xc8p\x17W\x94\x99\xd1=x\xf3\xbfm\n\xe0n\xfc'\x13@\xdcc\xfaOz\xe8\xcaT\xbdD\xff\xfe\xeb\xfe\x08\xdf'\xd1\xfdo\xed\xa9\x7f\xc4\xd9N\x97\x84\xcc\xce3~\xcb\xaco\xccs\x1f%\x8f\xfb\xe6\xe5/\x92(\xf9\xee\xbbC\x12\xcd!\xfa`P\x8e[\xdb\xb3gib\x19w;\xe9B\xaa.eq\x0c\x84\x9b\xdbr\x0c\xef\x9a\x15\xdb\xc2^t\xff~\xb4\xd7\xba:\xf6\x84\xef!5\x8a\x92\xf6<\xba\x15\x80\xc1v\x17\xaa(\xae\x84\x9c\xdd\xb2PQ\xb4;\xef;u\xac\x0b&\xefX\xeco\xa9\xa3\xc4\xc4\xc1!\xe6\xe8||\xff\xaa\x0d\x0dW\xcdL\xdeC_\xf5\xaa\x18_\x90\x97\xe2\xe2kU52\xb5V\x05\x0f&\xe5%\xc2\xa4\x02]=|\x15\xc7]\x14\x99\x8d\x15e\xfat\xba\x04\xdcBH\xf6G\xd8Cg\xf5\xb5\x0d\xc16\xbf\xa4an!\xcd\x027\xe2`]\x01\xf0j\xbf\"\xab\xec\xc4\xf5\xd5\xdc\x95j\xe7\xaa\xf5\x06\xbe\x0b\xa6^p\xc5\xe4e\x9a\xd7DQ\x82\xa6MU\x14\xf4\xdb\xc9\xa0\xaf\x1f\xea\xff'\xc0\xfb\x12\x07\xe2\x1f\x1c=\xf8\xaa\x97\xc0\xffq\xff_\xff\xea\xfc\xef\xdcz\xe3|\xcf\xd2\xa9\xea\\\x0e\x1e\xf6\x06\x87\xbd\xc1\xff\xe8\xfc\xab\x03v\xb0\xf5\xd4\xcf\xd6PIo\x99\xf1\xde\xdf\xc5\xff\xe8\xfcK\xa7\xd6\xbd\x7f\x1e\xa7Sv&\xc4\x05\xe9\xbc\xe0\xd3^'\xe5`\x98\xbd\x93\xce\xe7Y\x9e\xa5\x8a\x15=[\xec\xc3\"+:\x05\xb8\x1e\x02\x8f\x1e\x9d\xac\xe8\xe4\xed~B]\xcf\xe6b\xad\xab\xd3\xa7\x9e\xe9*^\xbd8z\xfe\xe6\xe4yg\x9e\xe5\x96\xd8\xc4:R\x08\xd5\x99e\x92M\x95\x907\x1d\x8d\x1d\x04\x0d)\xc9\x98\xee\xc0\xfdK'6q\x00z\xde-doC\xd5\x88cK\xdd\x98\x0b\x8d\x06\x8aQ\xf5\x89\"3/\xcc\x82\x8f8y\xd8\x1f\xf4\x0fI\xda\x9aKo\xbb4\xb7\x99\x1e\x92\xa25\xd3\\\xa6\xe7A]\x8fH\xde\x9a\xcd\xac\xdb\xe9R\xcc\x98\xcd\xf9\x98L\xdb[\x95BO\x8e4\xd9\x06\xdf\x91\xf5m\xd9.\xb3\x99\xcb\xd6\x7fBV\xad\xd9\xc0\x03\xf1\xb5\xed\xdd\xa0O\xe6\xed\x83\x10\xf2*\x95\xb3S\xc9\xe66\xe7\x01\x99\xb5\x8fc]\xac\xf4\xc2\xdal\x87d\xd1\x9am\xc9\x96\xc2fy@\x96\xadY\xf2\xf4\xcb\x8d\xcd\xf2\x90\x9c\x7f\xc3r:bU\xe5\x15\xf6\x06\x85\n\xaf\xd4>i\xf7\xefC\x03\x7f\x17=!\xcf\xef\xcf\xc4\xb4\xb8\x0f<\xb9}\xc3\xce\x91\xbd\x85Z\xe6\xa3\x8c_\xa62K\xb9\xa2\xd1\x1e#\x9c\x0e\x86|\xd7\x9d,\x10\x18\xf6h\x14\xa7\xf2\xbc\x18Ot\xd6]\x96R%\xdaR\xf9y\x8b^g\x1c\xac\xf0\xdb\xa3 \x1d\xe8\xfc_\xd1\x1e\xdb\x8b\x86\x9d\xcb\xac\xc8T'\xdaS{\x11p\x0d\xf4!\x98\xaf\xf3\xbc\xb3dE\x91\x9e\xb3\x8e\x90\x1d}\xd8u<\x17|\x7f\xe9*\x9b\xb1\xcb\x0e\xe3\x97\x99\x14\\\xb7\x08\x85\xa1 \xd4_\xc0\xd1Mg\xb3L\xcfN\x9aw\x16,_\xcd\xd7y\xe7*\x95<\xe3\xe7E/\x02\x04\xf2\x92n\xb2\xe2\xb5Xs\x15\x1aC\x0d0{\xc28X\xff=\x16r\xca>\x02$\x14\xe6\xf3\xe9\xef\x0d\x08s\xa2n\xcbp\xc2\xd4nbI\xce\xe8\xa6\xacV\xf1\xda]p\xf0\xa4\xaf\xa4X\x15\x0e\x0c\xb3\xbb\x97*g*\x7f^\xd03\x136\x00\x9a\xa4|\xbb\xbd,}]W\xba\x01\xffu\xf1_\xaf\xf9:`\xa2d\x05,\xa6_y\xba)\xc9u\x9d\x1b\x07\xa3m\x91\xfa\xf3\\%\xe5\x1d\xb5\xb7yBp\x0e\xfe\x9c\x7f?\x83\x1e\xdf\xa0\xc7\x0f\xb0\xe5\xa1\xd8\xce\xf5\x1a\x13\xec\xe5\x06\x01q\x85(\x0d\x06\x85\xbd\x9bW\x8b\xb9#W\xde\xac6XxWs\x14\x94\xd7U_\x05\x92VA3\x80\x80\xbe\xa5\x17A\xaa\xc6\xc8\xaf\x86ok\x12X\x17D\xa2\xb7a\xf70y\xdb\xcb\x8awk\xc9\x1asl-\xf7=\xa7\x9b\xe9Z\x827\x0b\xc3\x109\xdder\xd5\xb9\x05\xe4\x84n.\xd8\x8d\xb1\x00;\xd7?\xa7\xa7\xf0\xe0\x9a\x10<.\x1a\x1e\xa86\xe2\x87\x9a4\x0c\x11z}S\xe3\x91\xb2\x80\x9f\xa1\xb7G\xae\x8c>\xbc~\xc1*}\xd2\x1e\xd0\xcdPaB\x01(\x05\xda\xf2q\x8cR\x1aE{\xf0\x81\x89\xc2\xa7\xde\xda\x15\x8e\xe3\xee\xc9.\xb3#\x8e\x91\x18\xcb Uc91\x98}\xbe#\x7f\xb7\x7f\xa0;5\xa0\x94\xe6X\xf4\xa6\x8b,\x9fI\xc6)\xf7|\xd2\xc1\xf7yuGN\x8d\xc9w\x94c\xb2\xa6\xfd\xe1\xfa\xfb\x1c\\\xb1N\xc7\xeb \x0d\xed\x04\x1eL\x86Ae\xd3\xd2x{e\xce\xc1\xb4\xeecQ\xcd@N\x1b)\x9ef'\x8c\x82\x10\x8c\"\x87QX\x01\x80{\xf7\xcc\x96O2\xa2\x03 \x03\xf3\x1b)\xacTA\xe0\xa4&\x82\x9c\x82\xe3\xfb\xe4y\xcf.}Y\x1d\xed\xbf+\x18wG\xf2\x94U~2u\xa7][`\xa8N\xcf\xc2Sz\xff\xaf\xfb{\xf7\xcf\xc9\x11\x1dO\xaa\xe5\x7fa\x96\xdf\xba\xb99r\xbcQ\xcb\x15?\xea\xad\xc4\n\x05\x16\xf9%+\xd6\xb9\xa2\x8c\x08\xbd\xa0\xef$\x9bg\xd7T\x11\xd1\xd3\x15\x02\xe5\xd0\xdd1\x12\xc2k\xaeh\x9f\x08\xab\xeb\xba1\xc5\xcd\xc0M\xe1D\x01\xc8\x97pb\x0b&\x92@\xb1\xa4\x1f\x0c\xfc\x9d\x1e8s\xad\xc3\xe6dA\x07l\x84\xe9\x83 \xbbn\xf8O\xd3\x93A\xff\x87#\xaf\xa3r\xe4Ur|C\xef\xddi\xb0#6Tq\x95iX\xbd\xc0\x9biZ0GEN\xe0\xc3:kO \xf7\x99d\xe9\xc5\x10\xe2\xedvHlY\xe57\x80\xa9\xa4\x93A\xf1N\n\x05Kph\xe7M\xa8 \xa1\xafP#,\x19\xf5\xa2\xbd7`\x8a6\xe1\x98@\x0fs\xda'\x9cV\xe9 \xdf\x8b\x92\x88\xd4\x1d\xc3\xab\x8ay?\xa5\xfd\xe1\xb4\xe2WL\x1d\xf3~M\xf9\xde\x1b}Q\x8c\xa7\x132\xc5\xc3|\x8f2T\x905\xcc\xa5w\x14\xef\xe6#\x94Jp3{{\xfa\xe6\xed\x87\xd3\x8f'\xcfO\xdf\xbe?\xfd\xe3\xed\xc7\xd3O/^\xbd:\xfd\xf1\xf9\xe91\x98u\xfcHT\x0f\xe4\x8f-E\x96\xde\xb1B\xf5Q\x1d<|D\x18v\x8e\x00%X\xd06g\x1d\x93\xd4\x1cbRPs\x15hx\xd3\x9c\xfb\x10 \xd7u\xdf\x06\x8b\x93\x9cz \xf2+p\xb9\xb9~4\xdc\x088E\x1d\xae\x85'\xbd%\x05\x04 \xd6@\xcf\xaa\xc0\xfau+X\xbf6`\xfdzR\xd9aV\xe3\xf5$P\x13\x9e\x8e4<\x9e\xe8XsI\xac\xef\x80\xfa\xd7\xb7A\xfdk\xbcq\xd0\xfe\xba\x12\xa0X\xd1\xfep\xf5\xfdz\xb8\x02\xa8\x7f\x15B\xfd\xab\x1d\xa8\xff\xeb\x17\xf4-\x00{\x0e\xbb\xd2\xd0\xb0\x8f,\xf4\xd9v\xf7\x07J\x95 \x0e\x00\x87\x8a F\xab6W\xe4t\x9a\xe6\xd3u\xae\xabZ\xa4\xfc\x9c\xcd~\xccT\x91(rj\xd7\xf37\xe3\xf3\xa4\xfe}\xa0#\xd4B\xb2tvd@h\xf2\xce\x12\xcc\x0c\xfcs$x\xb1^\xda\xaf\x12\xf7\\j\xd0\xf4\x9a\x9c:@\x9c\xe9\xdd\xe8\x8aPV\x8d\xce\xed\xf3\x0f>\xe68\x05*\xe6\x8ep\xb4\xa2\x1fzg\x19\x9f\x99k(0bfX\xecL_\x01\xae\x8e\xf7l\xde\xa2\xe5P{(tfK\xb5\xab\xe5f\xbb\xef\xea\x9cH\xb8\xac\x13sYd\x05p\xe4]\xcf\xff&\x86\x14wg\x15Kr\n\x86!\x199\xb5\xca\x13\xfb\x03rjQ\x18\xdf\x9f%[\x8a\xaf\xbc\xf1\x0b\x87\xeeM\xc5r\x95\xcaP\x08|\x04\xf0\xac\x82\x9a\xd6\x05;J\xf3\xfc,\x9d^\xb4o\x9c/\x08\x87\x99 \xcd\x15\xbck\xc3\xb9r&OX\xec\x19;[\x9f\xc3\xde \xa7\xde&>\x9f\xcf\xd9\xf4\xee*M\x96\xb0\xc6\x17\xcb\x95\x06\xbb\xb3Kf\x1c\xc0\xee\\\x86\xf5\n\x9a\xd9m.[\xd9\xab\xf4F\xac\xd57\xf4#\xcc\x18\xf6\xe6\xf5m\x8b\xe3\n\xea\x0ca\x81\xf7l\xb6\x9e2\xf9\x95^\xdb\\\xf5\xce\xb6\xef\xc8\xaa\xc8\xdcH\"\xea\x8f&\xc1\xac\x99\xd9P\xb7L\xf6K&\x8bLp\x1aY>G\xf4\xdf\xc1#\xd9\x9f\x89\xe5\xff7\xf9$}\xe7\xf0\xe6\x895\xeat\xf0\x00W\xf0e\xfa\xff\xd3\xce\xff)\xed\\\x03d\xb2\x06\xb7\xa4\xe8\xe0\xe0\x11\x0ef\xb5\xa8p\x05\xe7\xdb\xcf\\\xff\xd3\xa6\xb3E#\x91m`\x05?\x0b`|S\xdex1\"N\xa65\xb9\xb1\xac\xe8 n-(Xi0\x10\xa9\xb1\xb4\x9e\xb5\x0e\xafLxN76k\x0d\xa8\xb4\xb2O\xac\x0cP\x8dY\xa3\xd3k\xb2\x82\x8c\xbe\xde\xc2vg\x1e2\x8d/A\x85\x16\xd2\x97\xe6\xe7\xdc\x10I}\xbd7M\xf4S\x81\x95\xa8h\xcd/\xb8\xb8\xe2\xfb`\xdf9\x1a2\x07\x99}0\x16\x1b\xcf\x11\xc7\x8d\x83m\xbbV\x909Y\x00\xa07sl\xec\x9aA}\xacg[\xafR\xdeX\xa5\xc1\x93\xc7\x16\xb6\\\xd2\xe9\xb06e\xdb-Z\xeb9Y\xd1%.K$\x89\xb2\xf0!a\x1a\x18\xacw\x0d\x9e:\xc3B\x81\xd2MF\x86\x01B=\xf9\x07N\xee\x99{\xff\xcf\xc6lB8\xbd\xf4\xb2\x82F\xb1\xb7\x8b\xf6\x07\xdfs\xdc\xe8\xf1\x93\x87\x00\x0e\xeb\xf4\x0b}6\xac\xe7mv\xadd:5\xde\xe0\x8bf\x11\x03A\xd7\xe4\xeb/\xacy\x0e\xaaz0\xdb\x1fnV\xacp$M;\xce\x8c\xf2\xb1\x9c\x90\x82*\x92S\x00\xa9\xdf6\x81\xd6|\xa7{OH\x8e\xf1\xf0\xed8\x9f\xd0lh6x\xd6[-\xd2\x82\xcd\xde\x1b\x03b\xc0?\x07%~]\xe5\xd4\\6Bwj\x8a\xa7\xcd\x06\x04\x8e\xe3+4\x1d\x8b \x1c\x99\xa1\xa0\xdd\xbe\xa5\x83\xf5d\xa3\xbe\x11\xbaB\xbb\xb1P\x8e\xe8r8\x11\x96\xa0\xd8\x15\xcdn?\x06\x7f\xf2\xb8,\xcb\x90gT!'\xcf\xc7l\xd2\xdc;\xfd>\xcc\xebs\x10\xdc\"\xa7\xf0\x13\xcc\xe6\x98Oz3\xb6\xd2 \x16\x9ff\xac\x80\xfdqA\xc7\x13\xf2\x96nJ\xf2\\\xff;\xad\xed\x93\x13T\xd9\x8c\xd4=\x05\xb2\x9bQ~\xc9\xe6hG\xffEa\x7f\x82\xc6\n4~\xbag\xbby\xb6\xdb\xb3\xb1\x9at)5\xe4k\xfd\xb13\x90\x03\xa20\x1e\xea$*u\xd3\xfd\xb2\xe4q|\x8d\xcca\xfe@\xbbu\xfd,\x15\n3\x04j\xfe&\xa2\xe7\x04moO\xa9\x03\xc9`\xa2O\x9f\x9a\xa7\xe6\xe7\xa8q]\xbc\xb0H/\xa3`I\xa4n-\xc3S>\xffn^\xc0\x8f\xfb\xd8i\x9aYC\xb3o\xc4\x8c\x0d\x0dF\xb1@\xbaY\x14$X\x04\xcfx\x9f\xf4m\x03U\xfd\xe9\xe8h\xe4 \xe1\xc9\x11\x1d\xb3I\xf2\x94\xb2\x90$\x0e\xbdz\xea(3O\x89\xa2GzA\x8e\xa8\x1d\xd3\x0bc\x12F\xaf(\xa3\xfd!\xabh\xbflo\x0f\xbf@\n\x0cQ\xddB\x8e\xec0\xa4\x9a\x04?Gw\xaar\xd8\x98\x90\xca\x877\xb0\x80\xcf\xe8\x1br\xac\xef\xb6/\xb0\xab\\\xfaG\x847\x96l\xf4\xd4P5)\xa5G\xdb-z\x8d0y\x8fBR\xd7\x8f\xc1Q\xf8\x82\xc36\xf1\xf0\x0b\xed\xf6\x87\x81\xe1\x8cg\x0e\xe6\xb3\x8e\xfc6\xbaU\xf2\x11\xd9w\xe9\x1e\xbd\xff\xefq\xf2t\xff\xcf\xd3t\xff\xcb_\xeb~\xff\xa8\xbf\xaf\x7f\x9e=\x84\xff\x8f\xe1\xe3\x18>\x8e\xe1\xe3\xe0\xf8\xf8\xafu\xff\xf0\x11d;|\xf4\x0c\xfe\x1f\xef\xff\xb5\x1e\x1c\xeb\x94\x83~\xffh\x1f~\x9e\xe9\xff\x90\xed`\xf0X\xa7\x1c\xf5\xe1\xe3\xf8\xf9\xf1_\xeb\xc3~\x7f\xb0\xff\xd7\xfa\xd9#]\xe6\xf8 \xa4\x1c?;\xd2\x1f\xcf\x8e\xe1\xe3\xf8\xf8\xd9\xe4\xff\xad\x1d\xfbk\xbf\xd7\xdf\x7f\xa2\x9b\xfe\xf1\x91n\xa6o\xda|\x08\xcd\x1c\x1eC3\xdf\xf5'\xff\xbaw\xbf\xc5\x98d\x93\xff\xf9Y\xdf\x8e\x16lz\x01z\x9a.W\xb1^\xad$+\n\xc0\x00\xb9z>3\x12\xcd\x9f\x0c\x94\xe7\x93\x7f\xbe\x99\x99\xa7\xc5'\xa8\x9b\x9cy7p\x9d\xdb\xfc\xc0\xfd\xa1_\x07\xce\xae`\xa6\xfb\xa4; \xccP\xfe\x8c\x05D2\x1eGf\xbe\x8f\x16\xa9,\x98\x8a\x88\xfd\xde\x9f\xda\x88 \x19G\xd3<-\x8a7F\x9c\x19\xc2\x10\xabA\xefc!#`\xc5\xdb\x18\xb5z\xfey\x9d]ZE\x8e}\x06\x1f\x93;\xe5\xd6\xd9\xb8?\x19\xfe\x01\xd6\xbb\xa0\x9f\x8a\x0c\xa0\x9f\xe3\xc1\xa4\xde\xd5hZ\x9f\xa3\x88D3\x99\x9e\x9f\xdbp\xb1by\x0e\x13\x1c\x11c7\xfb6Q\xeb\xda\xa4\x1c@cuE\xfbF\xbb\xe9Z\x89\xf7Lc{\xba\x1dv\xad\x98\xe4i\xfe\x9e\x19D\xa7x\xafG)\xd9\x0c&b\xba.l\x7f\xf4\xba1y\xc9\x9e\xe6\xabE\xfa\x0f\xbaRk<\x02k\xc5\xc7\xebl\xabR\x8a\xab\x13]\x81u\xac\xf6M\x15=\xf8\xca\xa4\x02\x08\xf3\x13\xbd?\xfek?\x99\xa0q\xba\xffe\x82\xef\x9fWW\xf7\xaf!\xcb`<\x98\xf4\x94\xf8\xb8Z\xb9\x9aJ\xb8F\xb8\xda_0 W\xa4yv\x0eh\xee\xfeYZ0\xd88\xa9L\xcf\xb2\xe9\xbe\xde\x7f\x1d\x17\xb9\x0fv\x19:\xd3t\xe5\nN\xf3l\xb5\xbfJ\xd5\xc2\x84\xa4\xde\x8eS\x91\x0b\xb9\x9fq\xc5\xe4J\xe4p-\xb6\xc5\xed\xcf\xb3\\1Y\xd84+\xc7h\xbf\x0c R\xdf\xa43\xb1\xccx\x1a\xf6\x8c\x81\xea\xd3\xfeY:\xbd8\x97@\x07\x99gy\xbe/V\xe94S7\xe6\x03:2\xcf\x85\x98\xedC\x856\xec\xf3\x08\xae\xf6\xe7\xe92\xcbmX\xafs\x15\xdaOg\x7f\xaf\x0be#\x94dj\xbap\x1f7\xb9\xcdhi\x1a\xe6\xe3\xcaL\xc7y~\xb3Z\xec\xf3t\xc9lP\xc8\xcci\x94\xed/\x84\xcc\xbe\x08\xae\xd2\xbc%\xf1\x92I\x95M\xd3\xbc\x03\xb9\xf6\xd3\xd9\xe5\xfe\xb5\x0d\x1b\x99\xe2\xfd\xebN\xb6L\xcfY059X9\xdc\xd7\xcf(|\xea.d\xfc\xdc\x8ex\x99\xca\x0b&\xf7\x19\x9f\xb9\xe02\xf3A\xd8\x88\x1dq\xc9$\xac\xebJ\x14@\xc8\xa8b\xd4\"\x9b^p}-\xac\xd2\x8c\xab}!gLvV)\x17\x05\xdb\x1ftV\x02\xd6\xd2\xe0\xe4E\xc7\xf7 \x96\x98\xabN\xb1HWaW\x0b%V\xb6_\x10t\x0bQ(\x99]0\x0d\xa2\xaf\xcf\x17U7\xea\xd1U_\n%\xc5\x05\xdb\x9f\xa5\xc5\"\x952\xbd #\xc4|^0\xe5b\xf4 \xa6\xe9*\xfc\xfc[d\xdc}/3\xa5\x07\xba\xcc|\x81\xa0G\xfa\xf3*\x9b\xa9EG\xb1k\xb5o\x94\x06Lx\xc6\xa6\xc2\xbc\xf4\xe6\xbb\x1a!\xd0\xe9\xea\x93YEU#X\xf3l*fl\xff,\x9be\xfeCj\x18E\x7f\xa9b\x7f\xa5gu\xd9\xb9\xdcO\xf5\xc3t\xc6T6\xed\\\xee/R~\xae[\xb9\xdc\xcffL\x9c\xcbt\xb5\x80\xf8e\xaa\x16l\x99\x9a\xads \x94\xbe}\x06\xc4\xdc\x8e\xdeQ\xb0\x8fnL\xd0o\xa3\xf0\xeb\xa6s%\xe4\xcco\xa1+\x99\xc1\x0eZ\x8a\x19\xeb\\/s^$\xd7y\xc6/:\xd7\xf6\xc0\x7f\xfdip\xa8\x95\xe3n\xffD~\xc5m\xf0C\xfd\x1d\x85V\x92t\xaa\xd6\xfa\x15\xb3_r*E\xee\xbe\x82`\xb1\x10W6\xa82\xe5\xa35X\xf8\xdf\xd8?\xa7\xebzuu\xd5\xbb:\x04\x02\xe7\xe0\xc9\x93'\xf7\xa1\xb1\xa8\xba\xdd\xaf\x97y\x02Z\xa0\x04\x82y\n\xfeAu\x10\xe0\xdb\xbb\xb5\x02\xff\xb3~\xfc\xfe\xfa\x95\xee\xcb\xe3\xfb\xdcA\xd1A\x7fTz\xf6\x82\xcf\xd8\xb5\x06\x06\xa5(\x8a\xb7F\xbb\xe1[\x1e\x9d\xc1\xd7^\xf2?z0\xfa\x9fA\xd9\x15\nE>\"2\xc5\xedR. \xe6ks\xd8\xd7\x1d.\xe4T\xe74\x05R\x83\xbf\x03\xd0\xba|j>\xfe\x8b]\xef\xfb\xf7\xf2w*\xff\x036u\xf5\xa8\xbeD^\xe4\xcf\x90\xc4\xfe\xd8%\xac\x8c\xf4\x1a\x02\x93khy\xcdT\x8c@\xb8\x11\xf0\x96\xa4+\xe3\x18\x1dxD?\x8eQ$@\x8fz\xdc\x9fl\xb7\xd1[\x17\xc6:\x85\x9b\xaf\x81Ny\xe3\xc2\x18\xe3\xed\x165)\x9e\x01\xb3\\\x05z\xd6\xcdT\xe3\x95\x0e\xdc\xf9B\x7f*\xd7'N\xfe\xcdJ\x8cY\x11:OQ1Bt\xd6\xf6nbK\xf5\x8d\x08\x9d\x13\xd6s\xd1z\x88\xae\xb1Q\x977q\xc6$\x9a\xa5*\xdd\x8f\xba\xd4(\xdd\xd7\x16\xcd\x99\x1e!\x0f0\x8e\xe3H?\xb2\x90\x93\xe1\xa1\x05\x9d]+\x03\x10\xe31\xc3\xab\xfcvgs$\xabA\x05\xa3\xc6v\x80v\xdcF\xb8\xef\xd0U\xa6`$\x9d\xef|\xe5z\xb2M\xdc\x03\x1b\xd7\xc9\x8a7\xe9\x1b\xa4\xb0\x89~\xd8\x8c\xden\x07?\xa8\xd2w\x0eH/\x02\xa4u\x11\xb7\xbcji\x0cp\xe9\xdd\xd0\xe6\xc1\xb3\xfb\xc9\x10\xf8\x7f\x06c\xe4\xee\xeb3\x01y\xa8{Fa\x9a\xe1\xd1\xcf\xe0\xc6\xbe\x9f\xa0\xcf&\xa0O'.\x11\x98\xf1\xb6\xd5\xf3\x11\xb3\x1e\x98\x9e:\x8c\x1b)\x9c\x80\xd0y\x10C@\x12 '\xa2\x89~\x8f\xd8X\xd4p\xef \xf55\x1fv\xddf\x8e\xe3(Jx\x82\x14\x15u\xcc\x9e\xc8f\x0c\xdcR\xe4\xee\xde!N\x0f)\xa5H\xd8\xea\xb1\xa1'\x888\xee\x1a\xff\xd3Q\x94\xe8\x0e\x139\xaa\x0f\xe4\xcd \x10\xe2y\xcb\x009\xc6\x18\x97\xbf7\xcfi\xd4.\xeb\x14\xe9\x93\xf5{\xaf=\xb1!{\x85\xc9\xdd\xb5\x06\x82R-\xd5\x06\xa9\xb4!Fe\xee\xaa_(\xd8\xa5\xc3\xe3\xbf\xfe\xfa\xeb\xfe\xe4>\xf9\xf3\x1bT^\xe6B\x12\xc6\xe8\x9f\xdf\xa0\xc2\xa4\xda\xb35t\x98x{\xae\x1d%&\xd9\x9e\xafM\x8bI\xdc\xd2pS\x8d)\xbb5_]\x8f)m\xcf\xd7Td*n\xcdf\x175\xe8\xe5`@\xf2[\x06\xde\xa2\xf84\xbde\xecM\xcd\xa7\xf5\xdd\xf9N\xf3\xac\xb0\xdd=\xe8\x93U{\xe6\x9a\x9e\xd4\xbc=OMQj\xd6\x9e\xe7,\x17\xd3\x0b\xdb\xd8\x80,\xd87\xec\xad]u\xaa%\x0bpL\xdeb\x12\xcdV\xc4\x8c\xa8F\x8b\xe01\xa3\x0b\x16\xc7l\xbc`\x93\xed\x965E\x8f\xedq\xf0\xed\x9d3K\xf1\xe7u\xa1=nU-Z\xc6P \xf6\xf5fY\xb1\xcaS\xb8\xcb\xb6[\xd6\xe3\xf0\xeb\x8bzsr;\x05\xdd\xbb\xe8^\x0c\xce\xec\xbd\x1f9\xc1\xb9\xc8\xbc\x07\xca'\xbc3\x87\xc8D\x8b*\xdamq\x93 }B%Ug\x93\xa6U\x92\xdbE&a\xbd\x93\xf0J\xef\x9a\xb2&;\xed\x87\xe0z\xde\x94hO}-V\xb0\xc5\xcb*\xd9f\xb2\x9d\x0cN\xde\xc9f\xc8YR\xc1\xaf\x1a\xcb\xf1\xe2IT\xd5gZ\xd9\x99\x8e\"\xd2X\x03d\xb4\xbfG\xd1\xb1\x97KB\xc0\xa7\xc7Q\x12\xc4E\xf6\xb9]\xb9>\xc1>0\xef\x83I\x99\xd5SL\x87l\xda\x9c%\xc0\"\x1a\x80h\xaf\x95F\x1a\xb1^(\x8c\x84\x83\xd2\xde\xb7X}\xeb\xdd\xb0\nd\x8f\xa2\xe1LlX\xe2gW\xa5\xe7\x1e\x9a\xb0@\x84\x05\x10\xe0\xe7\x91\xf9\x19\xf4\xcd\xef\x13\x989\xae\xab\x01%\x84\x0e\xf3p\x8d\xe3{\x9f\xce\xd8\xd9\xfa\x1c\x04hA\xf6\xda|\x9f\x009\x93d4\x18\xbf\x81+\xc0\x84\x0b\xd7\xf1\xd2\xc4c\"iF2\x1aED\x8c2\x1auP\xaa:\xd1\x9e\xe8\xe9\xfd\xf7&\xb4&\xf0\x0b\x89\"\xbc\x17%:Qc\xaao@I\x02\xd6\xc0\xc8*G\x1dd\xb8r\xb3\xce\xd9\x8d11\x83#L8\x8d\xfe\xe2\x9dN\xa7\x93\xf1N\xb4\x87\xe4v\x1b}4l\xfa\x08\xefe\xa5\xda\xa3\x9c\x18{Jz6\xcb\xabE\x96\xb3\xc0w\xbf\xaa\xa6\xf6\x12\xa6\xb6\x0e|\xda\xb3V\xc1\x955\x05\x8e\x9a\xd6\xc6tG\xcf\xa3bI&\xfe\x0c\xd7!\xc7(\nXjg,\xc4\xc6t\x07l'\x014\xe5b\x06\x13\xa6AQc\xe8\x066R\x0db\xd5\x80:\x108\xcf\xc4ud\x150d:\xcb\x0cX\x1f\xb0\xcb\xae\xa1)\xd6;\x05\xf2\xf7\x07\x99N/\x98\x04o\xc6\xb5\x98\x16Y@\xe8\xe4\xc8\x93Q\xad\xe3\xc9\x88p\xdaj\x0b\xbfr\x16a\xe4\xf3\x9d\x1e]\xc5\xfc!\xe0\x04)\x8a\xf6<\x8f\xb8\x85\x8f\x1c\x08\x99\xf2V\xbb\xa1\xe0\xbb\xfd\x96\x94\x82)\x87%A6\x92Q\x88t[\xe0\x16\xb5\xfc6\x972\xed\xd62D\xa5\x02\xdfb\x07\xc3\x0c\x8ed\xa1\x9b\x04\xf06qG\xbb\x81\xe2\x7f\xe8\xc3\xaa\xc4`\x19\xe0\xb7\xa6\x05\x1b\xdb\x0f \x8d\xff\xb6c\xdd\xcc\xf4\xa0$\x85\x12+X\xd9,\xf4\xe5\xba\xb3\x0f\xccI\xb6f!\xf5\xaa\x94%x\x13\x08\xf6\xcf\x95{\x00\xbbl\xc7ce\xbd2XQU!E\xe6\xca\x81m\x02\x1dEf\xf5\xbdXx\x1c#i7\x19\xeb\xd9]6\x8a\x94\\\xb3(\x89\xe6i^\xb0(\xb1\x9e @\xe0V\xe2\xaes?\xec\xc6\x8e\x18\x06T\xdb\xf7\xf6\x82\xa1\xc0\xff\x94r\xd5z\x8d8\xb4)\xf5\xa4\xd7Yo\xde\xe3j\xc0\x9dsq5\x97\xac\xb66\xab6\xc2G\x0d\xbe\x9b\xc9\x81q\xe0\xf5\xd92\x83\xabZ?L\x92\x15\xcc|\xb8\x97\x1e\xf6\xd0.\njoU\x16\x93 \xed\xf6\x03\x13\x9d,\x94,\x16tw\xa3\xdf\xd3\xd0\x0f\x9f\xb8\xfb\n\xc2\x8e\x17\xdd\x05\xb2\x13\xaa\xc5Q\x81\x89\x88c\xe9\xe2\xed\xdc\x9f\xb8d\xfd\xfa\x81\xc1R\xd3\x87(\xda\xd3\x8f\x00&V\x95\xda\xf4\x9d\x85}\x87\xe1\x8e\x85\xed\x82\xbe\x0d=\xda\xa9c\x8b\xaaf\x102E\xa6i\xd1\xda4\x1e\xba\x93\xa6Qi\x9d\xc7\x8a\x16\x80\xf6\xb4\x8e\xc1\xa5\xcba\x1f\xee\xa0\xdf\xd5j\x1c\xd9MS\xa9J\xf5n\x11\xa1i\nK\x06*\x85\xeeq\xaf=\xd9mo\xba\xdf\x8e_9\x02\xe1\xf3\xfd\xa2\x01X@#\x95\xb2\xa3U\x1b\xa3\xd5\xf6#\xaa\xf1\xbc\x13\xf7\x1e\x05\xa3l\x8e\xe6\xc0\x88\xd3\xd6\x15Y\xb9\x913\xec\xa2\xc1\x0f\x94{\x9f\xda\x8d\x92\x87\x18\x10\xb3q\x7fR*\xcaK{\xc3\x83|a\x04\xa8\x93*o\x83\x00\xec\xdc\xe8m\x13J\x1b\xd6\x06\\\x7fcw\xdf\x94@\xd5\xd4\xecB\x8e\xbb\xfe\x1a\x0d\xdeL^=>a\xf9\xc0n\x83\xbbmZ\xae\x1an\x9f\xae.\x95\xad\xf7\x90\x0c-\x03\xd41,v\xad\xac4\xd5\xd0\xdc\xef\xb7\xaf\xba\xb3\x10W\xbd\"A\xff\xadJ\xec\x1bFo\xe52-\xd42\x8f\xc8\xab\xd6\x1c\x07\xfd~\xff~qy\x1eU\x04\xad\xd7!*\xeapP\x9d\xc5\xe1\x8dw\xd5\x02\x99\x97\xa9Z\xdc\x91\x1bxv\xafS\xb5\x80\x7f\xaf_EM\xc4\xf4\xce\x81\x04;\xe2Y\xfdf\xb7\x04\xb1\xed\xf6\xee\n\xc0G\xd6k \xb5\xdf5\x14\xe34+\x9a\x0b\xc9\xb2s\xfe\xd6\xab\xe4\xab\xd1\xdd\xd5'F\x91\xf8\x98\x91/m*:mf\xcd^\x9f<]\xad\xe2\x18~z\xec\x9aM?\x82\xd3\xcbWb\x9a\xe6\xc7\xb6\x86\x8aQ\xe2\xa5[\xef\xcc\xdf\xe66\xdap\x02J\x8c\xcb\x84\x95M3\xdc D\xed9\xa9\x1f\xdf\xbf\xe8R\xfaJO\xa6\x17\x03\x8c\xac\xa7\x01\x1fA\xd5\xd0\xdf\xf4\xe8\x98\xd1c\xb6\xdd\xb6K1\xa3h\x96]F\x18\x07e\xa3\xef\x8b\xcb\xf3\x1f\xa2=U\xb9\xf0\n\xec\xbb\xeeE\xdf\xdf\x87t\xa2\xe81\xeb\xcd3Y(x\x7f\x87\xb5\x0f\xec\xc0Wc\xad7L32\xfdC\xd5\xc8\x1e\x1a\xf7\x0d\xd3\xc0\x96l \xfe[\xdd\xff\xfe\xca\xa9\xb5l\x0c-scb9\xb5\xb1q|\x08,E.f\xecC\xc5V\x04H\x1b\x99\xe8\xdf\xdc\xa9\xad\xdd\x014 \x05\xfdX\xbb\xe76\xde\xb9\x0b\xdf\xf1!\xd4t\xbdC\xf88\xfa\xc4\xce.2\x15\xed\xb1 \x8d\xaelX\xe9\x84\xd7\xe2\x8b\x89]\xea\x80\"\xdc\x08\x1c3\xbaIy\xb6\x04a\x0e\xc6g\xc9\x8f\x0cEO]DD\xaa\xf0s>\x8b0\xf1y\x0d\x89:\x13\xfc\xf6\x12/\\\x96\xb0\x1c\x88\xdc\xdc^\xe6\x04D\xc30Q2\xe5F~\xc4u\xea\x83\x8f\x89H\xf0\x01\xdd*\xc9'F7%\xf9\xccj\x82\xbb?;J\xc1'6f\x13\xb7\x18\xf0\x01 \xfc\xbd0\xda\xe8\xd0+\xc2)DW\xfa\x05\x1c\xeb\xb5n\xa3\x0bA\xf2gV\xab\x98\xf2\xb1\x9aT\x8a\xe6\x1f\xe2\x18}f\xf4\xceS\xd1\x03q\xaap\xaaA\xc5'\xe3^\x89\x00Y\x82\xc8=\xd6\x0b\x17\xab\xfa -\x19\xfc\n\xdd\x9d\x0d\x16\xa4\xfa\xc4\xb5\xc9mv\xa4*_[\xa0\xe0\xcb\xe0\xc0\xbf1\xfa3CQ\xd8\xd9\x08\x93?\x1a\xb1Y\xb0A~j\xa4\x15v#\xfcj\xe2k\xcdE\x98\xfc\xceh\x94\x9e \xa9:\xd3\x94\xaf@\xb4\xd4\xfcZi\xa9\xcelm\xaa\x9e\x82\xfas\x87-W*c\xb3\x0e\xe3Sy\xb3R\x10\x9a\xe9\xff\xa0&\x97\x8bt\xc6f\xb3T\xa56\xb8d*\xf5\x9fFJl\x95\xae\x0b\x06B\xa5\xf0/\xe3\xe7\x9d\x95\x14\xe7\x92\x15EG\xa6\x8a\xd9\x86\n\xc6.@\x9c\x94]\x18\x89\xaf4\xcf\xf570*f\x1d\x95-\x991\x1b\xd6\xb9\x14\xf9z\xe9\x8a]\xa5 r\x14\n\xee\x90\x97`\x05\xac\x8d\xa1\xf3\x89\xa5\x17\xaf\xd3\xd5\xc8\xfe&\xaf\xd3Upw\xfd\x12@\x1a/Y\xef\x9c\xa9\x80\xe6\xdcT\x1egW\x9d\xd7\xe9\x8a\xbc\x04\x961\\<\x1ak\xf1u\xfd\x19B-\x84S\x800Y/\xcdA\xbcX1l/Y\x8b\xcfbE}\x18\x9e\x06F\xd5p&6\xfd.E\x83\xfe\xc1C\xdd$\xc3=#\x9b\xf5!=7R\x01\xae\x08&\xcc\x87=\xb1\xdc\xb1\"\x0e\x0d]'=\x1f\xf1\x06G\x0c\xc6\xa7\x8f\xf9\xe0\xd0\x90\xa5\xd3\xf3\n\xd0Z\xb2\xa5\xc8\xbe\xb0\x19\x80U\xa1\xbd\xa4J8\x03p\xadjD0/\x8d\x82\x1e\xce\xa3\xca\xbb\x96\xed\xcd\xd8\x02\x04\xde\xd9\xac\x9d]\xa2\\\xbf`\x12\xbbM\xf3\x0d)\x1a<~\x1c\"\xaa\xdc\xe5\xef\xa2V\xdf\xeeU\x1f-a\xb3\xe2\x02R\xa4(\xb4\xd2\x04\xc3\xa1 \xcfo\x00\xe3\xab\xbaD\xc2\xca\xb9\xf7\x0e\xc1\x88\xa4j8\xac\xe8\xd4v\x01\xab\xda\x056\x96\xa2.\xad!\xfdZGl\x9e,\x14\xaeA\x92\n\xb7\xa8x\xc3\xa9\x1cN\x05W\x19_\xb3\x12j*\xb39\xb2V\x13\xc0&>\x84\x8c\xb2\x1b\x18\xea7O\xec\x10\xaa\xccB\x8cP)$0\x81v\xb3\x90\x96e\xe2\xd50\xa3Y\xaf\xc8\xce\xf2\x8c\x9f\x97m\x93\x0dW\xb9)\x03n\x08l\x1f9\x15D\xd2\xac\x02g.\xc12Ww@r\xdf\x9d\xdct\x07$7\xf0\xa6\xd0\xe8\xa8+\xe6\xc7\x94C\x9fL\xa2\xa4\x82p\x9f\x98\xd3\xdcwL\xaf^aF\x9b\xbb\xc1\xb7W\x9f\xe9Zn\xab>\xd3\xed\xdfZ}s\xf4O0.\xcd\xf0\xfd\xea\x81\xde[S\xe7\xb3of\xe9\xb0\x0b\xb2Q\xe9\xf9]\x1b\x8aW\x1abN\xe7\xd3\xc8\xb5$\n\x88\xf65\xdet\xa56\xcd\x86f\xac\x0f\xdc\x91\xden\x1f\xba\xa0_\xd0!P\xec\xcc\xc6\xb0\xbfv\xb5\xa8\"\xca\xe1\xb5C\xe7\x8c\x0c\x90(\xbbM\xe1N\xea*7!C\xa7\x07j\x8ao\xb7.D\x9b\xec\xf3\xea\xf6*}i\xdf\xa8\x0d@\xdbn\xaa\xdb\x0f\xbeT5\xe2\x01\xddA\xab\x0f\xfb\xc1\x1cZ\x0bq*\xd9\xb1\x16\xd5\xb4\x906B\xc6G\x90U\xe3\x05\xf6\x15\xc3 \xf2\x8e\x90\xf4\xd7N\xa11\x9b\x80\x80G\xaa4\xca3fDM\xaa\xae\n\xe5\xc8x;\xadW\x0e\xe1\x8cLQ\x1c+\xc3F\xe2\x84\x19\xa43S\x0de\xc4\xd4\xdd`\xc1\xa5u:\xb3\xa2C\xaf\xb2B1\xced\xa1\x9f\x91*\xday\xc4-v\xe9\x0c\xaa\xe9\xd0\xad\x12\x17\xec\xb2^Vh`,=\xb7p\xa3X\xad\xd8\x0ca\xf0\xf5\x06s3\x96\x13\xc2\xc1|\"P\xc4U\x1c;\xd5\xeaa[\xaf\x9c\xa5\xbf\xdd\x8e\xb9\x94\xacx\xc7d\x01\xf9\x15\xc2\xdbm\x9d\xa9(Y\xce4\x14\xceB\x9aE\xa1\x02a\x0dc \x0de\x8aJ\x852E\xf4\xab\xc2h\xa6H\xe6\xcc\x0cBVX\x92Ta\x92\xedPc\x1e\x18j\xcc\xda\xc63\xba\xaai\xaf\x87<\x8d\\U8\xa7\x11/\x04el\xdd\xebBN-\x00\xba\xddZO\xe1\xbd\xa9\x90\xc6\x1f\xea,\xe3\xe7\x1f\x0b\x07\xa1\x82\x012v[*&\xe6\xc1u\xe8\xce\x88\xf5V\xa9\xbe\x04\xf4\x85\x90\x04\xb4\xcd\xa9\x7f\xd9>4Yv\x88\xd1H\xf0h\x8f\xe1\x8cw\xbc\x1b\x1bw l\xb7\x08\xa9\xbb\xa1g\\\x97uc$\xb2\xcf\x97\xc6\"\xda$z@\x9b\x94(c$H\xd5\x8cY\xae\x94aM+\xb1z\xc5.Y\xfe\x01,\xb1\x9a\xd5\xe7`e\x04 b\x17e\xa6T\xef\x13\x17\x03\xfbE \xe9\xec9\x18\x8b\x91\xebj\xdf\xae\xd5\xae\xcd\xc8\xb9\xaaQ~}n\xf7 \xeb2u+\x9a\xb5\xfe1\"\x8cb\xf5\xc9M\xa1\xd8\xf28O\xcf\x0b\xb0\x9e\x19\xf6X\x11Q\xebneR3\xac+a\xa4YS\"IPO\xa2HUK\xc2\x89\x1fo2\x9e\x04\x9bo\xa6j\xb4._\x82p\x03\x0e\xea\x9d\x00\x1e\xcf\xaa\xf9\xb2~\xab\xecsf\x8e<\x80 z\x8bI\xf32P\x19\xbe7\x82\xab4\xe3L\xbe\xe0sQ=\xdcC\xe9aQ\xe9\xdf\xf7\xa1\xa4\x87][\x8d\x81\x7fn\xad\xc9\xda\xab0\x0f\xc9\x83.@V\xe6\x1d\x8c\xe3\x87\x96\xae\xbc\xdbm\xc2\xe9\x07\x8e$\xb6P+\xc75\n|sW\x00-~\x03\x10\x9dK\x19\xf3\x89\xb5\xe2\xa5\x0fn\xb8tx\x08F \x82U\xf2\xce\xde\x82\\`\xee\xab\xb9vC\xcbZD\xe9\x96>\xfc\xae2r`o\xb4\x9c\xf6\x87\xf9\xf7\x17\xaeS\xb9\xb3\xb39\xa5\x17\xe3|2\x9c\x82\x03\x9ei\xddz\x02H\x98fD\x90\x14\xb8\x19\x85\xbe\xca\n2\xc5\xb8,\x14*\xc2\xabo\xa1\x02\xd6[\x17\xf0gPPo\x12\x16\xa7R\xe4y\x94\xfc\xa4\x90\"\xee\x8bt\xfb84N\n\x1a\x8bV\xb0\xe5,_K\x97\xdd\xc4\x83\x00\xbd\x89\x80D\xf8\x06)\x0bd#8\x88\x1d\xdb([\x08\xe2\xc2F\xa6z1r\xdb\xca4\x17\x05\x8b\x12\xb8\xb8\xe2\x18*g\xcd^e\xc6\xff\x92\x93\xbe1\xdc@\xf3a\x98\x81\x89\xc9\xec\xa8\x9b\xfb\x03J\xe9\xef,\xb0d\x11\xc7\x7fXsC\xdc\xa2_\xd0+\xa3\x0b\xbeT\xe4\\\x91\x1bE.\x95\xbe\xe3\xcf\xf4UE\x9cE\xda+\xfb{a\x7f\xdfV\xa8\xdc\xf3*x\neN\x14\x8d\x96b]\xb0\x99\xb8\xe2\x1d\x08\xadW\x1d%\xd6\xd3\x85\x19\xb3 \x03z\xaa\x03\x06\xdfM\xd7\xd7\xd3<\x9b^tfg\xb9 Xm'[\xc6~A\x9d6\xbc^uf2=\xd7\x15\xe9_S\xcfL\x8aUg*\x96N\x1fH\xa7\x06\x9f&\xd3\x05\xbb\x81\x8a.\xd8\x0dh\x12\xeb\xc0ze\x1c\xa1\x82\x8a\xd1\x0b\x08\xc1\xaatl\x07\xa6bu\xd3\x99\xae5f^(\xd61}\xb4\xe8\xb4\x95{]2\xbe\xee\xc0Zt\xec\xf2\x84\xf8\xf5\x07\xfd<\x80~\xaa\xde%\xb6\xeb\x8a\x99P\xce\xd2Kf&K\\2iC\xba53V\x88t\xe1\xb5\xea\x9c\x0b\xe5\xe7\x07\xd40;\xb9(\x1aQa\xeb\xd5\xa3\xf3\xb7\xbf\xfe+\x93\x05\x1b\x10Me\xb3\xb7Yo\xad\x0f\xe8Y\xceN\xe5\x9a\x7f\xca\xd4\xe2\x9d\xcc\x84\xcc\xc0s\xcc\xca\x06k\xf6>o\x94q>\xe9\xcd1\x1f\x1aZK\x88)Z\xaaI\x8d8\x1e6nh\xe8\xf0T\xdf\xf6J\x1b\x89\xd52,UG\xc1\xde5\x01\xef*g\x13\x02\xfdE?\xb8\xe1\x19#\xbb\xebB\x82\xf6I\xe3ynY\nX\xeb\x10\xc13\xec\xc3s=9\xa4>\xcf\xdd\x81\xd3\x95\xe9\x07\xbcB\xffv\xbe3\x0f\x10\xf7\xbb6\xb4\xca\xac\x905F\xa6\x1f\x88a\xff\xfb3o7\xc5\xd9Z9S\xe3\xfed\xd8>\x0d\x1b\xee\xc9_\x7f\xf3p\x01\xf4.]\x02\xcd\xb0\x02\xc6\xfe\xeb\xd3\xe4\xe6hT\x1b\x7fr\xa6\x9c\x9b{\xc7\x97\xbfVq\xfcN\xa1kP\xe4\xb9v\xf6-m\xe2\x95I\xbc\x82\xc4\xabF\xe2\x85I\xbc\x80\xc4\x0b\x97\xf8VyD\xf6\xbd\xc2\xe4y\xed\xb3\x9a\xcdW\xf6r\x0c\xbb\xe7X\xad\xf5]F.5^\xa2'\xbdO\x82\x13RL\x17l\xb6\xce+\xf3\x8aA\xda\x1b!\x97i\xee\x0e\x0fy\xa3pH\xf8{\x0d\x9b\xb5\xa2\x1b\xa2\x8a\xa7\xf9J\x19\xb7\xeb\xd9\x1c\x05\xeb\x8b7\xaf\x14\x82\xb5%,\xf4\xf3:\x18\xf2`\x13p\x07\xd0I\xbd\x0f\xf8d(kC\x03q\xc7\xc6\xd0\xf4M\xa8\x01\xd7j%^\xe9\x95 \xac\xb6\x00\xaf\xf4\x02\x04q\x17&\xee\x02\xe2\x82\xe9\xae\xcf\xb6\xd2P\xb2\x06\x88Ok=D\x92\x9e\x82\x0b\xda\xafw\xce\x10v\xfaU\x05\xde0\x0f\xe2\xba\x92~X\xc9\x10\xbf\x80\xe3fs\xf0*%\x8eO\xabM\xa7\xe7\xe7\x198%9\xae\xe0\xa6/U\xf0\xa3\xa2c\xc3i\x88\x88\xfb\xfd\x8d\x91\x8aQ\xf1\x9c\xcf\"\xf2G\x18S\xf1\xbd\xc8Oa\xbc\xe1m\x91\xc8r*L\xe8\x9d\x0f\x05\xdc\x8b*\xe9\x83\x8f\xa834\x82\x88#\x17ay\x1c\xf5\x90\xe3w\xec\x84g\xf5_)\xc1H\x8a\xfb\xdd}S!\xee\x9d\x89;\xf2q`e\xa2\xf6c\xf8(\xfe\xe3Y\xf8\xe1\xd8*>\xe2u=\xa2\xb03\xa4\xc3'>\xbc\xf3\x8a\x9b\xc8\x9d\xbeX\xb6L=dY4\xf5\xa0\xe5\xce\xd4C\x86SS\x0f\x19\xaeM-Tqp\xec\x87\xf5\xeeB~e$`S\xc1\xb6\x88\x1c[\xa7\n\x05\xd4\x86\x1f\xed\x8d3\xaf\xf9i\x0e\x04\xb6\xe8\x81;\xbfl\xcc'D\xe8\x9f\xbd\xc1\x84d\x86d\x82\xc4\xb8\xdf\xb0h\xb1'\xac\xe2\xe8\x00\xe3aF7\xb7\xd8\x96K6g\xeb\xb3\xb3\x9c\xcd\x92\x8c\xd8I\x9d%\xd9^\xe4\xe6\xb2$\xa1m\xb6d,'\x06\xeat\x17X\xa2J\xf2\x05\x84\x9e5>\x88\xc9\xb1\x0bg\x98\xaa\xe3)3\xb1>\xcb\x99\x8d\x0c\xf0\x91\xe7\x0d\xbc$=?\xa90\x14\xf8g\xb0\x01\xf3\xdf\xe0\x1e\xee\xbf\xf1\xb4\xeb~\x03t\xe5Y\x13my\x17\xe0/\x17\xec\xe6\xe3\xaa\xd3\xc0\xbd\x9e\x85X\x18\xfc~\\Y\x1c\xc6\xfd\x07Nc\x9d\xdf\xd8\x8e}\x1d\xdd\x8a\x8b=\xab\xe3e6\xf4q\x15\xf2*\xa57\x0fm\x91$\x8b*U,L\xe0\\\x9e\x81}\x08\xf3\xb3\x835\x1e\xb5a\x90\xcf\xeb\xa8$\x04\xcd\\\xd7\x98\x9e\xe6\xc3\xde_!f\xd6\xc7D\xef\x1e\xbdD\x1d\xff\xaf\xc2\xcd\x9e\xfb\x10\xbb\xce\xccJ>w\x01\x83\xb7\xe9\xd0+\x1f\x02\\M\x07\xdezLn)\x1cv\xf7\xda\x874\x1a\x07\x81\xb7.Pa~o\x03t\x0f\xca\xda\xf0\xeb \x1c`\x87o\xdb\x11E\xa8\xc5\xd08\xdc\x8f\x12\xe7\xe7\xe0\xc1\xda\xfe\xac\xa7\x0b\xa8\x1fBP\xfb\xd5\x82\xb1\xdc\xfc\xafM\xd2\x00&\xe9\xa3\"\x07\x15\x08pO\xd1\xc83\xa2s6\xad\x1e\x8c\x10\x8bnb\xdf\xb7c\xe7\xf6\xa2\x0b\x9b\xfd\xa4h\x7f\xf8I}\x7f\xcf\xbf\xe2\x9f\xd4\xde\x1e\xb6\xd7\xc1=5\xfe\xa4&\xa4o\xc4\x00>+\x1a\x00A\x1f\x0b&\x7f\xd4\x8fp\xc6\xcf=(\xf4s-K\x03\xcb \xbf\x81++\x7fcZj\xc9\xc6\xd1cBQ\xfc\x9f<\xccl\xae\xcc/\xa0\xe7\xa1\xe1p\x8b\xeez\xce\xb7\x1c\x1d$\xd2\xea\xaa\xf5\x13I\x7fU\x81\x8dqE\x06\x84\x85\xe8eg\x90H\xfa\xfb\xadY\xbc\xe8\x1a}\xb9\x9b\xa7\xe4#\xd6Kg3\x00\x81\x1d\xa7\x01)\"I\xb7\x8f\x93\xdb\x92\xc2Q\xfd\x1a\xd0\x86\x8f\xb7\xdb\xd7\xc8\x19\xfb\x7f\xa9HF\x8f\x87\xc7\xce\xbe\xe0+$\x88\xcb\xe9\x8d\x0b\xa2c\x9a\xe1\xed\x16\xcc\x0b\xfa*\x7f\x0f\xaa\xfcY\xa1\xcf\x8a\xd4z\xeem T%^\xd6 \xd4\xbf)\\\x07G\xe3x\x7f\xf0\xfd\x89\n\x08[\x18P\xe2Z}\xe4\xcc\x93\xbe\x0d\xb5\xd6\x8c\xe3\x97\xaa\xee\x1a\xc3\x19h\x15\xb2\xd2fhoA\xdcZ\xbd.\x13x\xab\xae\x08,N\xc7\xaeN\xfc\xb0\xe0\xf6\xb5\xa2G\x06\xe0\xf5\x05\x883\xef\x10P@l\xee+\xc8}\xd5\x9a;\xa0\x80\xd8\xdc\x17\x90\xfb\xa25w\x8d\x04\xe2\xb8\xec\x9e>\xe1\x95\xc5\xcc\x19\xcb\xc8\x91Bo\xcd\xf6\xd6\xcb\x1bN38Jq\xb5\xb6\x10FlM\xb5\xea5\x90\xee\xeb}~g\xbd\x81]\x87j\xea\xf1\xc6.\x16a\x14x\x19\xce\xf1\x881\xcb\xfc#\x9a\x01\n\xe36%0Yj\xb6d\x7f\xa9\xef/\x87\x97\x02M\x9d\xd3\\!\x891v\xdc\x90?\x81\xbc\x1en\x15\x83\x1dT\x9bJ\x0fN\xa5\xe7CG\xfe\xc8\x1a\xb52\x85D\xc0\x9b\xb6\xea\xa35\x8a\x85)\"n'Z\x1c\x1aS&\xe9\xf9H\xdcI\xa3\xa8U.\xac\x14\xb1\xc7\xb5\xaa\xf9\xba{\xb2B.\xb3\x1e\xe1\x9f*\x90\xda\xf3\xe8\x86\xf1\xd9\xd0\xed\x9330S\xf5b\x99\x9e\xeb\xa7\xac`\xcd\xc8\x13\x0d\"6\xe2>e3\xb50q\xd7\xc79\xbb\x0e\x82?I\xb1^\xd9\xef\xb7r\xa6{\xe6\xa3\xa6\xfa \xafZ6\x9f\x85\x0e\xcem%sS\xc3\x95\x0b\xbf\x83\xa7\xe5\x92\xb9\xef\x93\x85\xcc\xf8\x85\xfbz\xc3\xce\xd30\xf5\xad\xee h?\xcal\xf6T\xb2\xd4\x85\xdf\x9b\x1am\xf09\x9f\x05_'\xab\x94\x87\x9f rh\xbf\x8f\xa0\x87\xf5\xaf\xa0\xb4\x89\x08+\xb01\xae\x8e\xb9\xe0\xea\x13\x18\x81\xd2_y\xc6\xd9Q\x9e.W\xee\xe3g\x9fd-iA\xd0\x0dB\xc8\xd5\"5\xd3\xa3\xd2\xb3\x93\xec\x0b\x8c\xf3*\x9b\x89+\x88\xfc\x02&\x8b $\xc4\x12\x9a\xcb\xf2\xfcmU\x13\xd8o\x0b\xbe\x0b%V\xb5O).\xd83g\x17\xac\x1ee,\x83Uq\xaf\xbd\xf1\xaf*n\xa7.\xb7-J\xc28\xf5\xd2\xa5$Zj4\xea\xb5\xf8\x12\x91\xe8m\x88\xd3\xa8\xa6\xc7\x03\xeel\xf1x5\xe6\x8a\x11\xbb\xddFV\xa2:J\xf8v\xeb\x14\x89\xbaA\x86\xbe\xd1$\xfesGo\x85\xe18\xfeS\x8d\xd9d\x84\xa2hO\xe1\x9e\x92\xd9\x12\xe1D\xedE\xab\xeb(\x10\xaa\xe2\x0d$\x0bLF\x83\xd1\xe3\x9b\\\xa7\xb4)\x86q\xaf\xf0eL\x04\xb9g'\xda\xdf\x8f0\x11Tq\xc4\x89\xd28\x99\xc4\xc3h\x9e\x8b\x14D\xc3\xcd\xd9\x8e\xa6Eq\x0cQ\xd8\x99h\xa9*&\x02'\x1a\x99\xa3\xa2,C\xbfl\x7f\xaa[\x0cu\x05\xeaFU<(\x04\xa9=\xd6\x9b.R\xf9T\xa1>n\xa0\x81\xacW\xac\xcf\x8c>8\x1a`\xf2\xa7\x1a\xab \xfd\xd39M\xb3v\xa0$\xa7\x02m4\xae\x95)\xb6\x84E\xde\xa4\xf6\x88\x9d\xa5\x85\xb9!`\xdfNE\xae\x7f\xd8\xf2\x8c\xc1IY@l\xb6<\x87\x1f\x0dT\xea\xc0\x05\xbb9g\xdc\x9e\x048\xd1\x1a\xdf\xd7\xbf\xabT\xa6\xb0\x9d\xbd\x03Q\xa2d:\x85\xec\x9b\xaav]\x0d\xdeV\xebv\xdbE\xd1\xe9)\xa8\nd\xfc\xf6|\xcd\xae?\x1cX\xe95\xdb!\xd8\xbeq\xdc\xd20\xa44K\x1f\xc0\xa8\x8377\xad&y\xdf\x98\x85\xa86y\xe4\x1e\xc7\x1d\x83 \xaa\x97\x15\x0dS Q\xca\xb9\xb0\xe6\x1b\xaf\x97\x9e\x7f\x1aZ\xb3\xb4q\xd6\xdc\xe4t\xe7{\xbf\x90\xd3\x9d\xb8\xb5\xccv\xe2\xe6B.S\xb5\x13\xcd\xd3\xa5\xabs\x99\x15E\xc6\xcf\xf7\xc1\xb4\xa4\xb7\xc45h\x1a\xcd\xea\x1b\x16k\xc1\xe9\x1bVm\xbc\x9c\x87\x92\xf7\xbf0\xc4\xe8\x93\x9a\x80\xcbv;\x184$^\x92\x86\xc2#\x1e*z:V\x93a\xbb\xe4\x12\x88'-\x14\x02\xe9$Vs\xb28\xe557\xcck\xe7\xce\xcc\xe3-\x88\x81\xf6d\x9b\x06\x89\x93\x90\x19\xb9\x80\xd5,k\x88\xe0\x05\x86\xc8Y]3s\xbbe\xbd31\xbb\xb1~3\x02uI\x13]\xf5k\x05\xfd\x02J,hI\xd5\xd4+\xea:\x12\xae\x8a@\xd4%\x9ca\")T\x06S\xc5\xf44\x19I=#\xf1\xe1u(\xe0\x18R\xb6'C\x85 ;\x9d\x84}\x0f\xdc\xa5\x1f\xbc\\\xeeF\x97K$\xb1\xaf\x9d\xdag\xe5\x90Q^\xb2\xc4\x8a\x87\x986$8\xe7<1b|x#i-\xc2\xd9$)u|%\xd2TJ\xeb\xfd\xa1\x84\x9e\xcb\xf0<\xcd8\xaa\x1e\x19fm\xfa\x13E\xd7\x1c\xe1\xa1\xeadV\x98L\xcc;\xac\xa7\xcf\xf7\x8bc\x99.\xdd\xec\x0f\xf1F/\x8d\xd9w-\x87\xce\xda\x94\xfed\x1c\x05\xe4bj\xe4\xfa\x17\x92\xcd+G'\x9cv\x07\xa5\x91\xac1\xa8)4\x8e\x18m\x94\xc7\xde\xd3\x80\x07,\x03\x81\xefE(q\xac\xd7\xd7\xd9\xfe\x08\xc3u\xb5\x13/\xad\x15\xc7\xa82\x0f\x02_`|\xca\x08e\x1b\x15\xfd\x82\xa5r\xba\xa8E)\x96\xd7\xbe\xd7\xb2\xfe\xbdJ\x8b\xe2J\xc8Y\x15\x89\xa1\xd4\xb5\xd2\x8f\x9535\x02V\x1a G\xc3\x00\xb7!\xf1/-\xeb\xe6\x9c7D\x16ox+O\xfcl\xad\x947\xf7g\xc6d\xc5<\x80\xacb?|'\xdc\xbd\xd2U=o\xf5\xba\xc2\x95|c\x975\x1fR\xb51\x80\xc9(\xd0\xf7u_\\\x18\xf3%\xee\xbbe[\xf8w\xb0\xd2\xc1nKl\xdaD\xba\xf5\xd1 \xf4\xd4\xbf\x92\xe3\xd6\x0c=\xf3\xb6\xc1\xa4\x9f\xf16\xf9\xbb\x82\xa9\x0f\xd9\x92\x89\xb5\x1aUA\xa7 {\xddZd\x9a\xb3T\xbaB\xe1\x87-V-\xe7Uu;\x99\x8e2\xf0\xd4Z;\xecvs\xfb\x1bfh\xbd\x02:\xfb\xfd\xe6\xf8\x94\xbb\xb7\xd7\x85\x81\xc8(\xeb\xad$\xbb\xcc\xc4\xbap\xf7E%\xdb\xdc\x1f2s\xc3<\xae=\x14\x95\x0e\xd9,U)\x80\x0c\xf7\x00d\xdcn\xa3{]\x1f\x1aE\xd4\xa9\xee\x02\xe4[)'\xa9\xfd}@\"\xa3\xfb\xf7,\xa8\xa9\xf6\xf6\xca\x96\xbe\xec \x8bo9}\x9d\xaaEO\xa6|&\x96\xa1\x96\xdd\xe1Cgg\xf2\x00\x93\xe7\x9cF\xa7\xa7`\x18\xed\x057\xc6\xe3\x9d\x04\xec\xbdh\xef-'\xa7U\x06 Z\x19\x87k\xb20\xa9'U\xea\x91\xc3\x82M\xc1\xc0U|\xcd\xa0\xfes\x0e\x9c\xe9J\xa1\"`d\x86\x82\xa4Cn&TQ>>\xe1\x93\xed\x96\xeb\xa2\xf6YP\x954\xbb\x17\xbb0[\xdf\x01\x87z\xaa\\\xc8\x8a\x93\x9b\xf7\x06V\xd3\xb1\xa5\xed\xa2q\xd3\xaf\x8a6`\xb3U\x17%\xd7\xcf0\xc7\xb5W!\x98p?\xd6\xbfC\x8b\x96\xfa\xe5\xd6\xf5n\xb7L\x0f\x01o\xb7\x0f\xbaVS\xc5H\x15\xda\xe0\xe0\xb0\n\xfb\xa0W\xd8pU?u\x90\xc1\x03\xa7\xeeb\xe4\xe7Y(?_\xf3\xeaR\x17>?\x0ci{GA?;l|\n\x13\\\x1b\xc9\x0b\xc81\x13\x9b]KVq\xec\xc7Q9Wm\x96\x7fW\x83\xaa\xc2~\x99\xc7*\x04P\x0c\xc0\xb4\xb0\x14\x9e\xae\xac%r*5`\xe5m\x8e9\x12\x9e\xe0\xc0\xebq&\xb1\xcc\xd7QM\x14H\xf0g\x15S\xa8-\xae\x99\xfd\xb5\xe3\xd4\xec\xc6\xb4f}-.[bZ\xb3~\\5\xbf[\xb3=7\xa4F$iWz+\x06x\xbb\xd5\x11\xc8\xbdO\xd4\xd9\x8e\xb5\xafbe\x9c\x0b\xde\xda\xdc\xea,\xb3\xc6\x83i$\xcf\xbbr\xc7\xf6\x1a\xb30\xc4\x8eU\xc1\x9a\xe5+\x0fv6\xd1\xa1\x83\xc3\x01Q\xc4'V\"0\x81h\x8b'\x10 Eak\xf0\x9e\x93\xb87\x86@os\x885V\x13\x909\xe5m\xc2\xfbR\xb5\xc6\x13\x85 o\x13\xe9\xaf\xe7\xf7\xf1\xa4fi\xea\x8d;h\xc6\x1c\xc07\xf52t\x0f\xc8z\xa75\xd9\xe7\xf1d\xa8\x86\x98{m\x0dE_\x80\xa0\x10\xa8\x9azK\n\xc3\xfe\xf7j\x7f\x7f\x88\xdfs\xc4\xc7jB\x9c_\x87Y\xe4\x84=\xf4+\xa3*\xfb\x1fjo\xaf\xcal\x19\xbb\x11\xa9\xe9!\xbc\xf2\xb3\xce\xe2\x98\x83\xb3;a0T\xdf\xd3Tg\x94\xfb\xcad\xcd\xf6\xd5\x046\xc5\xd0w\x8f:\xb9\x00F\x06\xdf\xab\xd1`\xdf#\x88\xd5T\xdc\xab,\x05\x84\xb2h\x9f\x82\xe8\x00\x94\xfd\x1c\x18\xd5v;^\x18\x9f\x9bY\xd1X\x19\xe7\xb1(X \xe7\xb8\xa8\xa6UA\x18\x85\xc8P\xad\x06`\x11\x8d\xe5\xe3\x1d\xd3|Bo\xc6\xdb\x16\xcb\x9d\xea\x96g\xac\x1e_W0,KL>\xf3j0t\xa3W\xc2xW7\x1d5\xe1\x9a\x07\xd5\x16s\x9bP\x97\x15\xca\xd2\x80\x88)e\x1e\xff\xc2V\x01\x0bi\xecxB\xf5\xd9\x92\x9d\xa8t\xb9\xaa\xdb\xe7t\xe8\x82O\xden\x9f\xa5Jc\xaeW\x08\x97d\xe7\x96\x83\xba\xb2\xe2\x83\\\x17\xee\xb3\xd4Cb\xd7\x8a\xf1YMo\xdd\x1flU\xa3l\x86VC\xdb=\xd2Z\xfd/\x1d;\x0c|\xf5\xd1\xc0t\xabU\x82\x82\x8b\xac\xb2\xb7\x95\x91\xe0>\xc0\xe1\x07\xad%\x85;\x8br\x12.\x08\x18\xed\n\xb6\x1b\xc8\xb9\xba\xd1I\x1b \x7fp\x90--u\xe0\xb35z\xf1\x13\xa7~\x1e\xd0F\xe3\xf9\xceD\xfe\xaf\xb7\xa6\xfc\xce\xe9\xf8 \x19\x1c\x92\x83G\xe4\xf0`B^r\xfa!\x8e\xa3\xa3J\x04\xa7a\x83\x83\xfcb\xc1\x11\x9d\xcd\x11\xf2\xc0hv\xa0?\x19\xc7\xe8\x17^\xa9M\x86\xd9LW\xff4\xcd|`\xd7\xaaQ\x7f\x1cw\x7f\xe1\x84I\x9d\x8e\xba/\xf9v\xfb\x0b\x8f\xe3\xc7\xdf\xeb\xff\x83\xc1\x0f\xf4\x17\x8e\x89\x92\xd4P\x10zs)\x96G\x8bT\x1e\x89\x19C\x87\x07\x98pI7gl.$\x03Y\xa3\xe4\xeb\x12\x88\x91\xe0?V\x05\xa2J\x1e\xb1\x9ep\x9bhbT\x17^\x8aH\xe4\x84\xf1\"\x12y\x99\xa7\x88D [\x17MJ\x12\x14x\xceg\xdf\xd6\xc3\xa3Z\x99z'\xebi\xb7\xf4\xd3HB6\x04\xadn\xd1z\xf2\xf2\x82\xa1\xdcU\xad\xdf\x86\x1b\xfdO{n%jo\xe9;\xa4~k\xef\xef\xd4\xda\xfaz\xff\x8d\xc8\xec?\x1e\x80\x93\xb4\xbde\x04&\xf9[\x87`\xad\xb0\xfc\xa31\x94D\xca\x9a\x97X![\xa9\xc7P\x87#\n\xef\x0f\xba\x94\xfe^1\x91\x81\xe3{\x04G\xd1e\x86\x86\x9cl\xce\xc1\xc1\x13\xa0b\xd9\\>\x93\xd9\xd4\x81>\xd5\xac\"O\x18\xb5-\x07\xbc\xb7\xb8\x88\xf1=\xcedu\xeb7 \xc3@J\x981\x95f9\xd6\xb7K\xaaR\xb0\xf952T\xcb\xc4\x93\x14S\x98\x05\xe0\xa0I\xba\xa9\xbc:'\\\x92\x9a\xbah\xf0\xd4\x90\xd0e\xd00\x9b\xa3\x97\x1c\xb3\xa49s\xcd=\xe6\xa4\xa1\xb8\xec5\xf7\xbf'^4\x0b\xeak i\x16y\xceg\xb7\x16\xb0R\x8e;e\xcc\x86\xf2\xcc\xa0\xccq\x7f@\x98'\x95#X}0\xd0\xdb\xd2\x1aN\xfc\xca\x1a}\x86\x83\x83'\x80\x1f\xd8um)\x05\xc3\xf2\x10|6BL\xc6qt!\xc0\x0c+\xb0}\x00FK\xe5v\x9b\xe9\xa8\xdd\xc2#0\x96\xd2\xecJ\x1c\xa72\x8e\x91\xa0\x1as\xc5 \xfa\xc2+\xa4\x14\x1ds*\xf1\xadx\xa9^\xe9>\xc6$\xa3?\xf1\n\x10G\x99\xc7(F\x19\xec\x0d*\xacue\x8a\x04\xcd$2\xc6N]\x1a&\xcf8\xca0\x114\xc3\x890 \x17b\xf4\xcf\xc0\xaa]\xdb1j\xae\xa9\x9b\x18\xe9\xbc\x0f\x05\xc7\xc2\xa6\x1d\x1e\xc0\xd9\xb9Zd\xd3\x85!\x9c\"}d\xfbDY_\x08\xc1\x9b`\xcb\x00\x87L\xf7\x13SJ\x95\x8cc)-\xc9\xb5q\x8e\x0c\xd0U\xc2\x9a'\xf5\x8egs\x94:be\xb3\xdb\x86\xfe\xd6}\xc9\xe3\xd8^\x17#\xc4`)\xc8GN\xbfp\xea\x08\x0ep\xaa\x08\xc3Fp\xac1\x17\xe6\xf9\n{\xd2\x9c\x01@\xd9To\xaad\xfe\x92\xddl\xb7@\x1a\xb7\xa1%S\xe9Kv\x03\x96\x8em\x868v\x19\x0c\xa2 \xb2$q<\xf8\xde\x84\x1c\xaa\xe9\xd0I\x8846Y`r]B\x1b \xe0\xb2\x94;\xbd\xbdeE\x83}\xae\xec>7K`\x16\xe6\x8eu\xc0#\x84\x14\xfd5\xdc\x9b\\\xf6\x02\x08\xc4\xc9(\x9a\x9d\xc8\xf4FT\x18'Vm\x9a;7T\x06\xec\x06a$\x91\x8c\x05Q\xff7w\x7f\xc2\xdc6\xae4\n\xc3\x7f\xc5R\xa5X\xc0cDG\xf2\x96\x98\n\xa2\xcaz&3\xf1$\x93e2\x19_\x97\x8b\x91`\x1bc\x9aP@\xca\xcbX\xfa\xef_\xa1\xb1\x83\x94\x93\x9c\xe5\xb9\xf7{\xabR1\x05\x82X\x1a\x8dF\xa3\xd7\xa3\xd5\x8a\x94\x92\xde\x82!C\xde\x1b\x128\xb1\xcc_\xc5+\xab\xe7\xbe\xfdq\x1f\x06\xdd\xd7F2\x05\x07k\x99\x0bQi\x8b:\xad\x9b\xd3v0Z\x95\xa9\x9e!\xdb!\xd8\xc4\x80J\x14lbX\xa9\xff\\\x83=\x8d\xede!\xa1\xf8\x8a\xb1\xf3\xbc7\x0c\xe2\xdbM\xe5\xbf\xaa\xab\x0d\xd4\xb4\x93^\xaf\x94\x87Z\x84|\x94\xc7zU\x1d#CA\x01l\xc8\xbf\xf3\xc06\xfeH\xd1)\x0dew\x1f\xcd\xc6s\x1b\xdc6B\x17\x8c\xe0\x84^\xccS\xb3\xf6\xf8x\x0e\"y\xc8\xd8\x0e\x0d1\xc5\x81{$Y\xc8\x81n@\x0bG0\xd6\xe9\xb4\xfb\xd6\xbb\xea\xadb\xefA8Ht<\xcf\x13\x9b\x9a@&\xd2\xc03X\x04\x08\xf4\xe2O\xd9\x0bi\x84(W\x0c\x81\xba\xc6{\xd9\xfaJ\xa7\xd2\x11\x0f\xdbo\x18\x91HC\xff&f8.%\xc2\xb7'\x8a\x9a\x9fH8\xaa\xa7gp\xd2\xa2\xbe\xa8l\xa22;\x87/\x12\xab\xe1\x9a\x91\x07\xa3\xfbbGgN\x01\xd0\x1d\x85i\xce\xb2\xecB\xa2\x99\xc4\x18\x02Q\xcf\xd53a\x04B\xca`\xf2\x12\xc3d\xb5\xbd\xad\xb3?\xff\x15\x9d\xc9\xd0p\xf5\xa5\xcbk\xef\xfb\xbdv\x8bb\xcc\xae!\x14+Rs\x02\xb8\x12t\"i\x83\x07E\xf3\xadya\x8d4\xe6dU\x0d\xf8^\xae\xdc\xecR\\1\x9a\x10\xcd\x9d\xf9\x1f\xee\x8c\xb6\x90\xd7\x93\x0f\xf4\xbe\xe1B\x81\x06)\xa9\x1d\xfa\x91\xbe *G\xea\x98\x8e%\xd6\x9f\xaa\x9b\xd6\x8d\xa4\xd3\xc6~\xa0\x8e\xce^\xe7\xedm\xb9\xdc\x7f\xd4}\xad\xd3\xf7\xba\x171;\xb6\x90\xe4\x98\xd7@\x07\x01\x9a\xef\x17\xf3\xb9\x90\xea\xda~\xf3\x9d\x8c\x1am&O\x14\xc5\xcc\xcd\xed\x93S\x11P\x19\xb1\x8e\xcax\xe8\xab\xf9\xf2P3\xc5\xb3\xac\x0fFa.\x19$\xd62\xedS\xe9\x0c\xf7\xa7\x12 @\xbe\x1b\x89\x0b\xfaF\xbf\xb8-\xe8\x95\xd4L'\xbd\x96\xc0\x84\xa1p8Qr\x1a~wr\x1a\xd1J\x19a\x86\xa2\xd8+z\xae}\x11\n\xf8Q\xc0r\xba\xfd;\x97\xa8\xd0\xde\nu\x96\xd5\x88\x11A\x1aLBlD\x8c\x8a8\x9a3V\xf4\xd8g\xaf\xc8\xb2 d\xbeM!\xf8\x81!Al9\x11&\xb4\xf5jE\x8ee(;\xb8\xe4\xecJ\x8b`4\x9fn\xe5\x08\xef%\xbd}R6y_\x1f\xe9}\xf2Lw\x97\xf7\xcdq\xdf'\x07\xac)\xf2\xbe\xe1\x04\xfa\xe4\xfd\x19?i\xf2>\xf8\xc1\xaa\x82\x80x~\x08\xce\x95\x96\xb8\xd11\x04\xa7La\x1e?\xe1f\x96\x93v\x11b8\xef\xf5\x10\xa3\xef\xe5!;\xc2Y\xd6\xeb\x81\x0d\xaa\xeb\xe9/\xe9eA\x1f$\x10\xbc'\x92\x0e\xc93\xf5\xdf+\xe0\x87\xde\xc2\xff\xef$=\x96\x0e\n5\xa4\x99\xffC\x03B\xff\xf8l\x84^%gU\xf3G\xf8\xc3\xbc\x99\x17\xa7\xec\x0f\xffh\xebk\xe8\x98\x96\x0c,\xf4/\x0dI\xfdl\xa0\xa6\x7f\xa4\xb3\xcc\xff\x92D\xebc\xad\x14N=\x1b)\x9cde\xd1\xb0Y*\xc8\x0b%oQ\x15\xc8\xf0\xa0\xb8\xa9 eB\x10\xb1k\xa2v\x9ay\xce\xa3\x8axE.\xc4%<\xfe\x11\xf5\xa3\xf6\xa2{\xa3c8\xbb\xae]\xb9\x89\x85\xf0\xc4\xa50{\"U\xbf\x1a\xce\xe4\x95\x9c\xf4\x9d\xdb\\\xdf\xd9aM\\\x8d\xfbM>\xcc\xd1+\xe0\xb4\x87\xc1H>\xaf\x1d\xc9\xe75#\xf9lF\xf2\xcc\x8d\xe4\x99\x1f\xc9g\xf2\xf6\x1b#\xf9\xacG\xf2\xd6\x8ed\x85\xc9\xaf\x92\xbe\xf3\xa8\xe3\xbc^\xf4\xf2@\x82k\xfd\xa8S;\x1b\x0cQ,\xf5B:\xc1lu\xca\xaa\x86\x17\xe5\xdb\xb8\x9c\x97\x16\xd5\xd4\xa3A\xa9\xe6\x8a\xd7\xb6\x19\xdd\xd9\x07'\xe2\xe5\xf5[\xc9/\nyc\xf7\xedkIo/\x9c\xba?\xbfMu\x98yl\x0e\x90\n\xbf\\\\\x15\x128\x1c\x1d)\xf8/j\x06\x0e\x90w4 \xef\xbf\xbbI3\x97;\xc6\xf96\xa8\xd1j6\x08\xe9B\"w'\xdf\xf4\x1d\xe3}\x1b\xd4\xf8\x91\xa6W\xe4 >\x11_\x7f\xeb\xdc#\x02\x1b'\xa2`\xfa\xe6\x04\x0f\xdbVE\xa4\xa0\x1e\\I\x1dS\x02\x81J!\xd30\xda\xde\xca\x84V\x95'\x1b\xbe\x8a\xb6\xf1r\xd9+\xb2\xac\xc7#\x0b\x0c\xc4\xa9\x1c\xe8#\x18\x1c\x18e\x0e%\xb1\xe5\xb1\xba\x8a\x9b\x04\x04\x9c]-\x97\xdc\x18)i\xb3O{\x82\x17x\x82\n\xdaXk)\xd4\xe8\xf00\xad192\x83'\x1f\x80\x03\x00&2\xcbP\xd3\xa3:\xd6\x8c\xb6bj\xbc\x15Sc\xe2\xa4!\x13z\x03\xe7\x85f\x96\xd5a\x1a\x9a\xb3\xd9\xc2\x16\xf4b\x90c}\xd8\xbf\x93\xa4\xa4\xaf\xe5\xc0#5\x99\xba\xdf\x80mda\x16\xa2\x0f\x9cB\xb8\x08:\xe8b\xb4t=\x9d\x85\xa6\xa6\xbf\x9a\x86C\xfc\xd3M\x87\xc8\xae\x1a7\xbf\xfb\xc0\x17\xe8\x90\x80\x94\x16\x13\x9e?\xa9P\x81 7%\x8d.i0A%\xad\x83\xebFI\ns\x0d\x85k\xc6b\xb3\xafc'\x91\xd2*\xa6\x19)\xe35\xa0\x9c\xa0*jd\xea\xee\xb2\xb6\x11\xed\x8eH*\xdb\x08'\xc9BRF\x16\xb4!H\xd2\x02g\xd9\x02\x1b+\xe8)]\x90\x82\x0e \xa35\x95c6f\x14\x8c\xbcp\xb1\xb9i\xcd\x0fHC\xa7\xe3flLT03o\xc6\xc3G\xc5}6\xc6\xb5*\xaf1)\xee\xdf\xb7\xe5\xec~1\xc6SU>\xc5\x84\xd9rU\x01(\x7fM)\x9d.\x97\xf0'\x88\xb6ler\xb6A\xd3\xc0\xaa\x0e\xfc\xe6js\xe5\x82\x91\xd7\xa4\xa6\x87Gc\x99e\xb2G\xe9\xd4'{F\x05\x95A\xc3\xcbe\xa1\xde\xe316Q\xfa$&R5.\xb5\x11\x8dT\xad,\xb2l\xd1je\xd1\xd9\x8a\xd4\xad,0Y\xa8V\x16\xba\x95\x05\x1d\x8e\x17\x8f\\`\xbf\xc5\xe6&~]\xa1\xfap\x11\x9a\xe2\x94\xb6\xae\xf4&>\x0b\x05\x97\xd7\x15\x92P\xd5\x9b\xf8TN\xfe\xa7h\xc6\xdeN&\xf0\xe4\xb0<\xca\x0fKR\x1d\xadVp:>\x97]F\xb2\xc6\x9d\x88\xd7\x13\xf7\x94H\xa9\xecak\xac\xb3\x87z#\x8c\xfe\xc1(\x1d\xfdC\xedg\x06\xe9\x8b\x9a\x1emV\xe4\xa5\xb4Y\x15\xbd\xd6,6\xc0\xf0\x0c\xe3\xdf\xfe\xce\xf3\\?\xda K\xc3N\xef\x18\xe6\x12\x80we\xcam\xdc\xdb&\x8e\xd5\xe4\xf2<\x82\xcb\x14$~ \x0bL,&\x03c\x88\xf7\x18 \xb1\xd4=\x1a\x16~8\x96\xdezJnn\xaa\x9bF\xef\xa54I\x12u\xd0\xd8\xe5\xb2\xa7\xa6r\xa8~\x1c\x91F\xff\xc5\xbe%;?\xe0Y?\x82\xba\xec\x0eu\xdch\xf4\xb8[\x1dG\x9eJz\xaboJ\xdf']\xd1\xc9\x8eb\xe9\x8a.\xfb\x86\xe2\xc3\x07\xd6\xb011\xb4\x90%\x16\xaf$\xb1*\xbe%p!\xf7\x8cX\xe4\x93\xf9\xfb\xd5\xfc\xfd)\x16[\xfc.C\x1b\xd0\xc6\x1fe\xcd\xc4\xc3#\xdf\x87 \xd0\xce\xb7\xa6\xc9\x9b\xf8\x84\xb3;\xe3'\x97@\xfe\x9e\\.\xef):\xb0\xa8P\x85\x8d\xc0\xd7\xdf\xfb\xb5\xc6\x8bW\xa8\xa2\xf7$\xce\xb23]\x8b\xde\xea,\x14\xd5 \xaeIX5\x0b\x0b_T\xb3U^\xd1\xdb\xa2\x9a\x9e AmQEQ\x15\x8f*\xcb\x92\x82\xf8\x14\xb6\x11vO\x99IT\x05z|<\xf0\x8d\x12\xfd\xf8F{\xacT\x83\xf0'\x81E\x82\xae\xab\x81{\xd6\xa5\xee\x83\xe0\xd7\x8a|\x95Y\xf6\xb7D_%q\x00\xf9\n\xb2\x95D\x02\xf6T\x9a\x89\x92O\x92\xc0\x965\"0sow\xf1m\xe9=i%aXk\xe6?\xc7<\xd5\xd3o\xf3T\x84\x1b\x93\"N{HP\xbe\\\xa2\x98\x9f\x89\x91\xc0{\xffLd\x9e\xb29\x18\xe3[\x96\xdf\n\xfa3CB\x9d\xbd\xc7\x03\xbb\x05\x9c\x05yA\x87\xe3\xe2\x11\xb7{\xbc0{\\@\x14R~X\x1ca|+\x14\x86Z\xdd\x8e\xa0\xbd\xe1\x8a\xd3\x1e\xc4\x7f\x8dy/#\x88o\x89B\x92\xf0\x89Zh\x11x\xa2\x88\x96'J\x96\xa1{\x92\n\xb5Y\x1a\xbbS\xa2H\x86Z\x8d\xf7U\xd2O\x92\x9a\x9d\xd5\x8a\xaa\xa8\xb5~j\x7f\x0d\xa3\xe8\xa5~\x83\x87:\xc2\xc5<\x88\xd7\x18\x8a\xdca\x83\x92\xdf%\x02Y\x06TIwz\xceO\xd0G\x1b\n7VU\xb6\xb5\x9c\x1b\xa6\xa9\xc8\x1a~E\xfe\x19I/\x9c\xcf:\xf0\xf5@(XY\xcck6\xfb\xc0m\xc1\xbcf\x8b\x99\xbb\xe2\x9ak\xd2oQ3\xd3\x92\xcf\xbf\x88BBp\xa9\x8e;u?\xaa`U\x98\xf1Wz\x11\xe3Bu[\xfc#\x124\xc4\xb7w=\x18O\xd5~ \xe5\xefN_k\xc7`\xb4!\xba{\xeb\xbf7\xb0\xc58\xcbF\xdb6\xc0\x1c\x1dm\xe3\x9c\xd1\x86\x8c\x86N\x864\xda\xc6d{\xeb\x11\x9c\xd0\x10f{\xc2r}\xda\xfc,\xe9\xed\x8bz\x9a\xf7_\xd4\xd3b\xce\xfa\xe4\xfd\xbc\x98\xb2/\x85\xcc\xfb\x1b}\xf2\x9a\x9d4y\xff\x89\x94\xe2J=\xf6\xc9\xc7\xb9\xf9\xf9q\xde'\xef\xe0\x8e\xab\x7f\xc3s\x9f<\x17W\x95)\x01\x83w\xf2\x9c\x95y\xff9\xc4\x1b\xec\x93O\xbc\xca\xfbo\xde\xf7\xc9\x01\xab\x16\xb9\xcd\x84\xae~\xf4\xc9\x93\xf9\xbcN\x8a\xdeCT\x9b\xbc\xaf\xff\xbe\x16\xd3\xf3>9\x10\x7f\xbf\x95\xbc\x82=\xf0\x0b\xbb\xc9\xfb\x1f+>S\xf7\xe9\x13\xcef\xfd\x15\xf9S\xd2\xdb\x87y\xffi1=\x87\xdcS}\xb2\x9f\xf7?\x14_\xfad\xb4\x95\xf7\x9f\x95\xac\x90}2\xda\xce\xfb\xe6f9\xda\xcb\xfb \xbd\xea\x93\xd1\x03\xdd\xbf\x14e\x9f\x8c\x1e\xe6\xfd'\xa5*\xdd\xcf\xfbo\x0bu\x1d [\xc3\xbc\xff\xac\x98\xd7z$[\x0f<\xd0\xb6\xb7\x00\\\xdb\xdb\xaa\xee)S\xc0\xd9\xde\xd1\xcf\x1a\x0c\xdb\xbb\xaa\xc7Y\x9fl\xef\xe5\xfd\x9f\xc4\x85\xfa\xe6A\x04\xd9\xed\x87\x01d\xb7\xf7c\xb0\xee\x0c#\xa0\xee\xec\xe6\xfdWU\xcd\xa4z\xb5\xe7\xe1;Rs|9R\x0f\xdby\xff\xe5\x96z\xd8\xc9\xfb/\xb7\xd5\xc3n\xde\x7f\xb9\xa3\x1e\xf6\xf2\xfe\xcb]\xf5\xf0 \xef\xbf\xdcS\x0f\x0f\xf3\xfe\xcb\x07\xeaa?\xef\xbf|\xa8@5\xcc\xfb/\xf7\xd5\xc3H58TO\xd0\xb4j{K\xb5=R\x8d\xef\xec\xe4\xfd_\x17\x17\x1a\x1e#5\xaap\xa9\xb6\xb6v\xf2\xfe\x01k\x8a\xfe\x8a0\x11\xee\x84sv\x93\xcar\x00\xe5-\xfe\xff,\x0f\xe1\xf7\xd1r \x7f\x81\xef\x8b\x16:J\x9eb\xc8\x84W_zQ\x8e\x0eY\xca(\xec.<1\xab\x9ew)\x1aY\xa2d\xb7R]/\xe1\xd7M\xfei\x06\xa7>:\x82$\xed\xc1\xb8\xf2~\x7fE\xacO\xe5\xbf.\x15\x94l\xce\n#\xf7\xd1*\xcc\xf5\xd2BK\x04\xbahW\x07D\x00\x12\xf9pE\xcc\x14\xd6|\xf6M08\x18\xa8\xb6@E\xfbC\x03\xf8\xe1>V\x984\"\x14\xbe\xcd\x8a\xa6\x80\xecR'LZ\xd2^Eh\xa6\xe3\x88\xd5V\xee\xa6\xc8\xee\x87\xb0H\x1fM\xb3\xa8l\xed\x92\xdc\xb1\x8c\x1d\xab\xb2\xc2D\x8a\xf0\x98 5b?rX\x89x\xce\xacl\x8a?\xba\x00\xad\xdf8\x0b\x1b]\xaf\x0f\x81\xbe\x9e\x07\xaf\xee\xb3AP\xa6\x96\x0e\xaa~^\xdb\xe4\xe7\xa8\xc9\xcfa\x93\x9f;\x9a\x8c*t\xbcw=\xfe\xa9\xe7\x0c\xcf\x07\xc0\x91\xea\xf9r\x11\xb1\x83\xcf\x9b\xefT-\xbdlln*\xe0\xcd\xba\x98\xae\xc0\xa0\xca[9\xa83\xf2\x1701 \xbfX\xcf\xa00\xcaD\x9b\xcb\ny7F\xff\x90\x113\xa5\xdd\xc4\xf8 \xda\xd2\xa1CA\xa2\xdf\xee\xce\x06!\xb4<\x96\x89@\xb8\xc6H\xcb\xcb\xad\xbb\x184'\n\x0b\x7f\xfa\x90\xd8\x11\x7f\xc7\xe8;\x99\x06\xe7N\xf9\xbc\xe0W\x1c\xb5\x9b]\xbb0\xf5A\x10o\xf7;\xe8\xd3\x05Kt\xbf\x05\x80\xb3\x89\xc0\x19\x84\x04\xb4n\xd1&\x18`\xf83\x98\xb7\x8f\x0c\xa8\x1a\xab\xc2\xc66~gPg\xe3\xb3\xf9\xfbO\x963\xfa\xcfp\xb2\x1b\xbf\xa9\"\x19\x0d\xc1&\x11`\xf48\x82\x8b\x0e\x9a\x973*D\xcc+\xcfo,X\x1d\xc0\x8d\x81\x0d\xa3\xbf\xc9\x7f5\xb8\xb8n\xc7\x16\x06\x00 \xe23\xc6%\x01T\x02\x99e\\\xd0\n\x8b\xaeq\xfaW\x99D\xa0S\xf7;\xcb}?\xaf \x87\x99\xbf\xed +;$\xcdj\xa5\xf6\xdbe\x1a\x1ae8\xc2x|Iu\x06\x1e/\xf2\x01\xb7!-\x19\xe9\xbf\xd39`\x98\x84\x8d\xfd\xb6\\\x9c\xf2j\xe3=\xbf\x98\x97,,y\xe1\x84\xa9a\xa96\x01\x89\xbe\x84\xfbFX\x12\xd8\xfb\x06\xc5\xa1\xc8\x01\x93k\x84\xc9\x19}V\x91\x0b\xfaWEN\xe9\x93\x8a\xbcG\xb7\xadQ\xe4\\\x90\xce\x81\xe4\x07\x92\xb4\xc6\x92\xbf\x90\xa45\x9c\xfc\xb3$\xdd#\xcak\xb92\xaeX\x82\x1e\x1e\x91Z\xd0\xfb\x81\xb4\xa3\x14\x8ap\x0d\x1f\xd7\x02\xb4y63V!\x0ekqD\xf4\x1f-&\xa9\xc5\xfd\xfba\x08\x10a\xec\xe0\xc4\xe6\xa6\xad\xe7\xbe'\xbe%c\x98#\xe8\xed\x8a\xcc\x05\xbd5\xe5\xf9B\xac\xc8I\xf0\xbb7Z\x913A\x17\xc2\x8f\xedB\xc4\xde\xb8\xd6\x1a^\x11\x17\xa0\xdf\xb1W\xeeB\x18\x9f\xdc\xc4oWf\x99\x1c$\xee\xe2\x07&c\xde\xc7\xea\xa2\xa8\xcf\x99N\xb2jn\x07\xa1\xf4\x7f\xed\x87\x07\xad\xcft\xb0C\xc2m\xf6sa\x12r\x82\xa3\xd7\xa1p\x896e\x96!\xc4\xc2A\xe2\x1f\x1a\x9d\x02\xeew\x0f\x8arLx`\xc6#\x02mn\x05Z\x15s\xd3\xf3\x9f\x00d\x83\x85\xbe\x11\x08\xdf\x96\x02\x9d\x08LJ\x81\xe6\"xw)\xac\x95\x0c?Asa\x17\xbdG\xe9B\xa4\x9bv\xef!\xc6\xe3\xa9j\x804\x98LU\x83QL\x99/\xae\xad\xceUd\xd6Y>\x1c&\xe9p\xf4\x95\x8a\x94\x840\xf0\x1e\xf2V\xe4\xc2\xd5\xd2H\xda\xaa\x89\xc0\x90\xa3\x87\xe0=kEd\x1a>$\xa7Z\x99\xd4\xffh\xbc\x93\x08OR\xa8W\xe4v\x15\xf9\xa8]\x87 g4Y\xf9,[\xbf\x98L\x9e\xc6\x8b\xb9\\.\x84\xda#\x1e\xd0D\xc3\x93Yx\x9e\xb87\x10\x01\xd1\x0d\xe2\xean\xd8\xf6Z\xa9\xf5\xf6\xf61\x1eW\x13\xc4\xa8Y\x963\x81\xc9\xfa\xcd\xd0\x1a*e$B\x197P\x9c\x9br\x87\x00jD\xe7\xe2\xae\xc8\xaao\xa2\xb7i\xecz\xf2\"z\xad\x0f3\xf7\xf28n\x99}]\xb0\xbay[\xf0\xaa!\xef\xa3W\x95\xb8\"\x1f\xa2\x12\x85\x1c\x1a\x98v$\x90O\x80\xfc\x15\xd5zuq\xc1f\xbch\x98\x1b\xee\x13\xf1\xcdH\xb2\xcf\xa2*I\xc4\xfdW\xd1\xcb\xd7\xe2\xca\xbdy\x1b\xf7<+}\xa7\xef\x80\xc0\xfe\x1aC\xeaL,\xca\xd9g\xce\xca\x19y-\x8cEx\x8f\xd2c19\x16\xa1\xa3\xd6\x8a\x1c\x18K\xe7\xe7\xe6\xefKA{#\xf2\xb7\xa0\xef\x05\xc2\xe4\xa3\xa0#\xb6\xf3\xf8o1y/:\x1c\xbcT\x9d\xfb\x7f\x8b\xc0*\xe7\xa9\xa2\x19\x86/\xfe \x106\x11l\xff\x12V\x02\xb7\xbf\xaf\x19\xa4'\xbe\xe4\xa1.y\xe6K\x1e\xe8\x92W\xbedO\x97\xbc\xf5%\xbb\x8e\xa7H#GlE1\xc4\xee\xc16\x8cY\xf5\x8d\xfd}\xdb\xce_B\xb7\xbc\xff\xd0\x96<\xb1%\x0fl\xc93[\xb2gK^\xd9\x92][\xf2V|\xe7x>\x89D\xcf\x05\x03$\xe7\xba8\xf0]\x16\xb1q\xa8\xab\xf9\xc6\xbe\x08\xfcqS\xeaN)=\x10\x13t \xe8!;Rk\xfbF\xa0\xbf\x04\xf9,0\xce\x0f\x84uj%\xefD\xe0R+P\x10L\x8e>\x17\xd6\x97\xf3\xb9\x18[\xe4x\xa1\xfaY}\x16\xa1%\xe3g\xf3]\xef\xa5p1L\x0e\x04\xbeU\x88d=W\xb5\xf5\xa5\x96\xc1\x1c\x88\xf1'\x81\xf6\xf7\xa3\x8c,:R\x97\x0f@\xc6lV\x88\x8a6\x87\xech<\x13\xb7\x15\xadPo\xe8\x92\x97\x99`)\x90\x11\xdd\"\xb1\x8f\x0b\xa6\x97\xc0\x8d&\xcb\x14(\x0e\x9c\x7f\xf9\xe6\x08\x03\x1c\xff\x12\xe4w\x01\xa9\x84\xadA\xa8\xc2\xfe\xd0\x1a\xf4\x9f\xe9*\x8c\x86\x0f\xb6\x1f\xec\x8c\x1en\x8d\xee\xa3\xd1&B\xc1o\xb6\xd9\xfcc4\xc4\xff@\xd5?\xe8h\x88\x97C\x8c\xff'\x08*\xf1\x9bp\xfaG\x1d\x18\xc0:-\x8ay\x8d\xa3\xc8\x8f\x8d\xf6\xefk0\xd1\xbe.A=\x9f\x19\xf9\xb0:\xca2\xa4\xfe@\xe0}\xefS\x0dt\xf5\x8f\x80\xc1\x02\xd0\x90_\xcc\x1a\xfel\xfe\xfe)\x12\x1ba\xc6\x11\xbe\xfdS\xd0\x9f\x055u\xfd\xd8\x1b\xee\x85\xc8\x7f\xb8\xa3f\\\n\xf4\x87\xc0\xc40h\xc7\x86C\x1b\x1c\x9b\xf7&\x8d|\xe0T\xc9\x91\x8bs\x19\x06\xb5\xb1|^\x94\xb2\xd70'/\xae\xe7\\\xeb\x19?\xf0\x0b\xf6\xa8\xc1\x9d\xe5\xdeV\x04\x02Gt~ f-\x9d\xdfb\x97\xa1\xb5\x87\xbe\xd9\x0c6\xca\x865m\xad\x82\x084~\xe6\xd2\xcc\xfc\x17A\x19\xd1@\x86U0\xbd\x19\xa7&\xaf\x11\xc5n/\xd9`u\x1a\xb6\xe0\xfd\xcc\xa2.\x1f\x83x\xfeY\x01~\xd0q\xed\xd4\xa6Zp\x87\x82\x7f\nmt\xd2\x1b\xe9$PC\x90|\xf2\x13\xd4\x8e\xd2\x95e\x0e\xc9\xb7urA\xf4\xa7\x9aFC}9&\x0d\xbd5\xeb\x9f3\"\xbe\xd4L^\xb2\xd9S\xde\xd4yC*U\xaa\xd1\xd0P\xa7\x9f\x85#6\x94\xd2_R\x9eq{\xa8x\xc6\x9f\x05m\xc8/\"\x02\x0c\xbd\x8dg\x9f\x0fI8\xe3\xbc!\xd2^\x00\xb5\xe4m\xa5\xcd3~V0\x87\x10[\xd4\xa9hY\x8c\xa9:],\x8ft\xc2\x05 >\x1bh\xef\xab\xdf\x16l\xc1\xe8\xed\x97\xa2fZ \x97d\xe0\x86\x88\xa4P\xc9\x8a\xf3\n\xc9f\xf9\xad\x1a>\xafN\x0d\x08tbq;:\xd7Um\x16G\xa1B\xd0\x1di\xa2\xce\xb5\xe6\xa5Y? \xf7\x1c\x0cF\x97\xea\xe6\xcc\x98\xd8@?\xb8\xd10\x93\xf0\xbc^\x05\x08S\xf2\xf0\xb0B\xac\x05}Ft\xd2\x91\x9aiOu\xc8\xbdy\x9a\x0f\xc9\xbc\xb8)Ea\x0c\x18\xa7\x86)\xd3\xbf<6`\xbd a\x12V\x8f\xa1\xe1\xd6\x08f\x8b-\xb9\xd0\x0c5L\x02\x0f\x0c\x84\xc7\x06\xa1\xaaIc\xd6:G\xe6\xa9\x82?\xa42\xe5j\xab\x98\x8fh\x13\xac\xc2\x82\xc7WOO\x92\x06\xdb\xc0b\xedl\x82N\xe8\x8c^\x909\x9d\xe2|Fg\x1a\xec\x17\xa4~\xbc\xc82\xb4\xa0\xb5NYg\x93\xa2\xcd\xb2\x0c\xb9Z\xe9\xf8=m\xfe/\x8e\x1c\x13^\xa2\x9a\xa4-\xe21\xcb\x01\xac\xa7\x94\x91\x1bzf%\xe55m\xc8\x05\xad\xc8\x0d\xd8`jV|\x94\xabC\xc7\xdd\xe6\x9d\x9b\xef)\xbd\xb1\x83P\xb7\x08z\xaa\xe5{\x17dJj\xecL\"\xa6\xf44\xf2\x98\xdd\xd8\xceO\x0d!\xfbP\x9c\xd2\xfb;\xc3\xfd\x07YP\xb2\xdc\xdb\xd1\xf5\x86\xb9;~P\xdda\xa9\x16\xf5?\x89:\xcfO\xb1\xb3\x08\x9cjV-\x1c\x93n\x7f+W\x9br\xb8\xb2 \xe3<\xf8\xf4\x11\xee\x06D\xb7\xb7\x1c!Q\xfb\xd5Pa^.\xcf\xa8\xc2\xfa\xe0PE\xed\xddoY\x973\xda\xbd\xbfI@<\xe8\xda\xbd\xae\xe7\x04\xf8:\xa7\xd3\xdc\xe0\xdf \xb6(\x9dGM\xcdHQ\xa2\x85\"\xb91\x92\xd2\x05INP:\x0dh\xf1 \x0f\x84L\x8at\x1a\x80\x10\xf7\x14\xd1\x1e\x86}\xdc1\x16\xc6\x1d\xb3\xb2\x8f\xc3\xe6\x88\x08*\xddJ\x04\xf4B\xb3#\xfe\x95nXRA\x04\xad:\x85M\xa9\xe0d\x7fD$\xc6cc\xa0'\xf0JGo\x9eq\xfa\xc7\xe0\x1dD\x9c\xd4\xac\xc6S\x1f\xd6\x85\x9cq\x8a*v\xb5!\x07\x10!\xa0bU\x83\x07\x92\x9d\xd4\x81(4 \xfd\x95\xb1\xe0E\xea.$IC\x13\xe0a\xe5\x83\x0eJ\x83\x1a[\xcb$Vw \xb8\xe6\xa95B(\xbe\x17\xe0\x0d]\xd3\x8a\x98\xec>\xe9q@\x04\x9c%\xf4\x8c\x13\xb8\xc6\x9ahT16\xdf\x89\xc7\xc2V\xb5\xf8\xcc;\xf1\xd9W\x03\xd4\xe5\x18\x13\xb8\xb1TD@\xf8\x8d5\xc3\xeb \x0bjt\xa7\xacy\xce$\xbf4\xd5^Jq\xa1e_Y\x86\xcci\xc8\xd5\xf1\xb6\xa6\xd95K\xba\xae\xd5\xe5\xb2\xa3\xba\x00C\xe8\xaa\x98\xd7g\xa2\xd1\xdaUMz\xc2\xda=_\xbb\x0b\x17\xe0\xbc\xec\x0cH+\x06\xed\x8a\xcb%j\xa8X\x8f\xe4]\xdfdYW)\xea\x04\xc0\x9dc\xbc\xe3%\xc2\xa4Q\xec\x91%1kPX\xd8\xd5\xd0(\xfc=\xcb\xbff\x98n\x08\xcf\xf9\xcc\x0c/f\x97w4Sr\xc5\x8d\x15\x00\xaf\xe1\xaf?\x85\xceC\xae\xb1rB\x84Jm\x06\xdc\xb9 ])JLJ\x87\xc11\xd8u\xeb\x1f4\xfa9\xea\x99\x0c\xe0-\xd9\xd5\xbe\xcd]C\x83\xdc\xe0\xabNu\xdb\xce\x03b\xdd\xe2\x05\xed\xf77Y\x92\x90\xbb \xa2\xddKv\x12\x0e?@nx\x03\x7f\x06\xc7:\x02\xff;v\xa2C\x86\xa8\xc2\x1c\xa1&\x8ay\xa7\x05\xb9R\xb3\x9a\x0d\xa5\xf4\x8c\x83C\x9c.\xa1\xb7+'\xdb`\x13\x9d\xd3{\xa39\x14G9dMe+\x1c\xf6\"H\x03W\x12\x1b\xfa?\x80`\x12\x87\xf3\xe1\x8e\xceC\xd3s`L*\xec\x0f\xc1z\xdfJ\xe7\x82p\x05^*\xe4c\x7f\xf4\\\xa6\x85\x04\xfe#\xd2?\xd4\xcbi\xdc\x8d\x8e\xfa\x94\xb6\xfd\x84l\x84y\xe3Q\x83'\x06\x076\xaexs\xb6q\xcen\xea\x8d\xdb\xfef\xec\xbb3\xf8K\xf0\n\xf5\xc9F\x1fo\xf6W\xfd\xbc\xd1\x19k\xdc@_\x80\xb8\xd0\xfd\x84\x84\xfb\xfa\xf6b\xb9\x8afP\x16u\xf3\x02\xf0\xd9\x8a\x94\xe4\xc4\xa4\xfa\xd0\xc5\xb4\"a-Z\xe1\xbc\xd1b]S\x10\xbf5\x02#\xfb\x13.D\xc1\x15\xf8ap\xa1\xaa\x90\x0d\xd9\xda\x8b\x83g\x87\x02y9\xc6\x8d>\xbc$\x95\x83\xda$\x0f\x08j\x07Rm/\xceg6\x19\xb5\xcb\xa1>\xc6\x0es\xcf\xd9\x8d\xce1\xa5\xe3\x8a\x91\x06\xe7\xf6'\x04\x1c#\x10g\xbaI;\x0b0@$r\xc8\xf7%\xd2\xee \xf0=\x1d*\x86F\x7f\xac!\x10|\xca\x919B\xad\x82\xc4|#\x89\x8e\xdf\xa3\xc8\x83\x0cc\xf4\xe3 R3\x87Z\xf8Q5AM\x00\xce-R\xe1\\\xe6\xed\xb2@\xd3S\x87\xa9i\\\xfa\xef\xa0\x07\x90\xe0\x06\xdfG\x8cO\xe9\x0f\xfdX\xa3\xd7,\x97\xce\x81\x15\"\n=)\x15\xdb>\xb8\x103\x06\x8c\xbb\xaeN\x15``\xcb\x0b\xa4\xa3\xc6\x04\xe5\x81\xa4\xb5\xb3\x1bMr\x9a\x01\xd3\xd6\xa2\x8aE\x00\xe3B0\x9bEH\xea65\xe7\x01-\x9fPGo\x89\xf4=I5\x02I?\x94H\x7fK \xa4\x98\xfd\xd2\x84\xb8\x0eG\xbe\xb6\x9d@4{\x07`v,`\x96\xcbf]\xaeC\x9d\\!,\x89+\x83u\x96\x9a5\xdc\x8d\xa1v\\\x04@\x7f\xf6=@\x0f\x12\x9b\x1c\x1e\xad[\x81\xb9\xbb-\xf1\x8e\x19=\x88\x96\xfa\xaf\xb0W\xc5a\xfd\xd8b\x9f\x04Gb;GKWj\x16C\x1e4\x96\xf5\xfb\x9b\x8d\xed=\xee#\xf4\x9c\x0c5F\x16\x97|*\xd3\xc1\xbd{\xfa\xb5\x91\xfb1fC\x9bU\nM\x1a\x8d&\x86>t\xa0I\x15\xa2\x89\xbe\xd0`R\xf9\xa1TZ\xee\xd6\xb8fa\xa9\xd6\x0c[\x1dXW\x1c,z.\x18r\x9e\xa0\x1a\xd0\xfe\x1b\xcd\xcdD\xf35GQw>\x8dY\xca\xaf[0L`^p\x0f\x1bw-AWv\x9c\xc8\x94W\xf1`\xdaQN\x93\x87~\x7f\xb32\xd9h[\xe0\x0fr\x898\xf0Wk\xc1\xbf\x01;\x13\x98\x05\xbdU\xd5~g\x13\x83\x9cz!\x1c:C\xe8\x81\xdc\x93\x0e=\xa3\x18\xf0A\x83\x8b\xb8\xa2\x81z\xa5\xa1\x1e\x9bF\xfb \xfam\x01\xd0\xd7\x10\xaf\xd6@\xfc\xccK\x1c\xba\x91[v@\xd6e\xec\x80\xb5\xd6&\xa80*@\xab~\x7fS\xb5\xd6 Z\xe9@+\x1dh\xe5z\xd0\xba\xb6\xf5\xae\x96p\x10V9\xfc\xb5\xdd\xc9\x08\xe8\x0daD\xa6@\x17D\x7f\x91O\xf5{5\xba\x04\xe6\x8bp&w\xf5F\x046\xcb \xf52H\x1f5\xa8\x0b\x1a\x92\x08\xbf\x0eM\xea;\xe7\xd6\xe1\x02 R\x90\x9a\x94>\xd0\xfeT\x9f\xc4\x0b\xfdgN\x0brA\x0b:$\xfa\x84\xb6l\xc2<\xcb.\xbck\xfa\xc5\xe6&\xbe\x9d\xeb\xa3\xf7\xf1\xc5\x04\x9d\xd2\xb9\xd1\xf4\xe0\xfc\x94\xce\x1d\x83\xa0\xda\xbf\xa13$\xc8\x9c\xd4\x87\x17G\xa4\x0c\xb3\xed\xde\xe0[\xf34\xcf24\xa7\xa7F6\xbfbY6w\xe7\xf1Mx\x1e7\xaa)L\n\xca\xd1\x0d)\xc8\x85c\x80\x17\x93)\xbd\xc9\x17\x8e\xbb\xb8!\x0bzC\xe6\xf4TA\xf1\x82RZ'A\x08+\xdd\xd24\x18\xcf\xdcX<$\x135\x10@sz\x82\x84\x9d\x86\x0e\xee\xc4\xd1\xbc5\x8ay0\x8a9Y\xd0\xb93\xf9\x98\xaeT\xf3s*\xa1\xebu\xdd\x9c\xd234'\x82\\\x84]1\x87\xd0\xa7!8\xe6\x03\xcd\xf6\xdb\x19\x9c\x02.]\xe4\xf0W\x83\xe9\xb45\xc0\xd3`\x80\xa7dA\x83t;\xaa\xc5\xce\xcc\xa1\xa6\x02$\xc9\xc6+\x8c\xc9\xd4\xe3\xd4\xa9\x82\n)\xc9TS\xd3\x05\xbd`H\xafs\xc7\x1dn\x91\xde\xacv\x878\xc0 T\xd2\x85f\xf4K\xdc2\xef\xdc\x1da\x9f\x9d~N\x0d\xc6^\xd0\x9a\x9c\xd2\x9a\x0e\xc9\x8d.\xb8\xa4%p\xda\xc8%d\xba\xc8\xb2\xde\xe5`&*6>\xdd\xdc\x0c*\xe0\xdb\x0b\x83\xc4\xa7\x13tC/\xc8\x85A\xe2\x1bz\x11!\xf1\x17@\xe2\x0br\xa9ci\x91i\x88\xc7_\x1c\x1e_d\x19\xba\xa07\x01\x1e_8<\xfe\x92\xe2\xf1\x05&5\xe5\xe8\x0b\xa9\xc9\xa9[\xa0\xf9dA\xbf\xe4n\x07\xd1/dN\xbf\x90\x0bz\xa3\xf0X\xcf!\xc4\xe0\x0bL\x16\xc1H.\x0c\x06\xaf\x99\xadE\xb1K\xc0d?\x17\x85aj(\x97\xad\xa1\\\x06C\xb9$sz\xe9pe\x01\xc8|\x01\xc8|\x81\xbf\xdd\xe3\x19\xba \x82\x9c&\xbdz\xbc\xbe\x0c\xc1s\x91\xe0\xf5%\xe0\xf5i~\xa9\xf1\xfaG\xc7\n-~\x1f^/,\xdd\xf4\xb5\x14#\xa7\x08\xa6&\x96w \xe2\xb2\x8c\xfbS\xc2-<\x07\x17\xc6)\xc4\xe8\xe5\xc9\x99\xa1E\n\x8b;[U\xeb\xbb\xc0\xe6\x14\xe3\x1d\xa7\x98 \xc4\xb2\xd0=\x91)\x95\x16\xf1\xa7Z\xa3>5'\xfd\xc2\x1d\x86\xd3@\xb3\xfb \xe7'(\x188\xbeU\x93\x9eZXb\x02\xd7\x89)i\x8d=`\xb8\x18u\xf9\x9fV\xb1' t\x1f_St_\xdf\xe8&d#\xa7\x84G\xb7\x8d\xb0\xb7\x15\xb4bw\\\x03?\xc8\x94\xbavW\xc1\xcc\xe0f\xf4W\x89\xd2\x99XF\xb2$\x00\xc1db\x8ao/\x15\xef\xab[\xd2u\xec0#\xde\xb7\x0c\x07\xad\xd8\x7f\x88\xc3\xe3Z*\xdd\xa1\\#\xe6Y\x03\x17GG#J\xe5\xae\xf7Z\xd5\xa9\x97n\n\xbfv\x80_\x80\x18Ir\xdd\xf5 \x00\x1c\x95\xc4\x95\xe3\xbb\x12\xd4\x8e\x8b\xf4\xc2\xc8da$\xe1koK\xe1z\xc0\xb7\xe1r\xc4\x02\x8a\x15\x92\x8a\xdf\xe71\xc8|;!\x84V]\x8c\"\xef`\x14]\x8c\x05N\xfb\xfdMn\x15\xcd2\xcb\xf6,\xc0&h\xcd\xa4\xda\x8b\xadg\xa0*<\xb9c\xa0\x98\xd4\xc6\xdb\xf0\x8a#\xee\x98\xb3\x0bG/\xd4\xab\x0b\x16\xbc:\x8d^-\xb2\x0c8f\x8e\x893\x16\xe5Y\xd6\x9b\xda\x9d\xce\"\xe3\x0bc\x0c\xa1OD\x9b\xa5\x8d\xf8\xa3q\x8b\xe8\x14Ve\x01.\xa6\xcb%\x1bT\xf0\xb7\xef\x14k}/\xb3\xd3S\xd4\x9a\xefcN_p\xd4\x1bb\xf2^?\x8d0\xf9\xc0\xe9\xed\x8a\xfc\xc5\xbdq\xea\x07\xbe\"O\x92\xdf\xcf\xe2\xdf^\xb4\xfb\x8a[\xafnJ\xe9\x07\x9e\x9e\xe3\x0fv\xbcOF \x00zk\xa4\x87\x96D \xf4\x8c\x1bO\x94'\xdc\xb8P\xfc\xc5\xc9\x07\x8e \x0bB\xbbXSq\x0d\xa2\xd1(\x87 d>\x12\x8c\x8b<\xd6\x00D *\xc0\xc7w\xaf\xf2\xe7\xfat!\xfd>N\x9c\xdf\x1a\xfa\x9c\xa1\x86\"F!\xef\xe6\xa4 \x124\xe6\x0d\x8e\x9a1\xec7\xd3\x89\x0b!t\xe8\xaaT\xe3\xb4\xc3\x0d\xaf\xf7\xef\xb8\xf6\xd4QoK5+\xf8\xf3\x8c\x87i\xe2\x00t\xaf8z\xc6\x9d\xa7\x88\x89b\xf8\x8a\xa3\xbf|!\xa9`\x94\xc6\xa8\x17\x8f\x1bm\xf3\x86\x12hU\xa1\xd8\xf354\xfe\xc45b\xac\x14\xa3\x11i\xb1\xfdA\xb0\xb4a\x94\xe8\xe7Zp\xea\xb3\xd2\x05bD\x10\xb6C\x18\n\x8d\xb9\x97&>O\xa4N\x08l9\xaa PV\x05i\xb1\xcenf\xb2h 3\xa1M_\n\xa1\xb6}^S\x1d[\xdd{\xfe\xdb \xaf\xa3}\xea\xa2\xc7\x05\xeaU\xdb5\xa8\x90\x06\x92]\xb2\xa2|#gF30\xecAP\xac@\xc4\xd7\xd1\xb2\x9d\x9fI\xf7yk\x1e,-h@ \nEcEty\xb5\x00\x15\x02\xc0\xd6\x98\xf18\xa9-\x8c\xd1\xb2\x95\xa1\x0dPc\x9a[.\xedS\x18\xd9\xb7\x82\x84D\xae\xd2\xca\xb5\xe1\x06a\x1eB\xe1l\xf7\xfd\xefed(z\xeblpsF\xe08\xcb\x1bM\x14\xfeN\xcda\x9e\x9b\x0cDL\x92\x8fw\x99\xca<\xe5tH\xee\xe9\x18v\xe4\x93\xf9\xfb\xd5\xfc\xfd)6\xda\xfd\x9d#\xeb\x02\xe0\x94\x02[\xa3\x10a?\xc7f\xa6q\x14/g\x8bO\x87\xe3\xca\xf9$dY\xe5\xad\x8a*\x13\xabGG\xdf\x82\xd0[\x9dq\xb7\\\x87\xff\x8cL#\xa0\xe3\xa7\x9cr5\xa3\x864\x1dz\xfd\xc4\xec\xd7\x14%\xe6SC\xf2\xb7\xdfsf\"A\xd8\xb2\xb8\xd9\xc9M\x91_\x16\x84\x81\xed\x90\xc0\xed\xd6(}\xaaFF\x87\xe3\x99\xb8\x85 \xfa\xad\xeezhk\xf71O/P\xdb\xe0\x96\xcb7\xe9H\xad\x88]\x9c\x8e \x04\xa3\xfd\xe2Gb\\:\xba\xc7\xa3p>\xf8\xec\xb4 \x8d\x95\xaa}\xf2\xbc\xec'\xae\x0d\xd9\x00K\xf4\x18\xee\x85\xb8A\x9a\xd6\x90\x87\x9dg\xc5o\xdc\xe50\xbb\x8d\xa0\xa7m(\xbc\xa1\xb5\xfb\x19\x98{\x7f\xf5\x8f\x81qg\xb0_(\xa5_\xf9\xe4\x1eO\xd6\xfb+\xa7,\xff\xca\xe9Wn\xec\xa1\xc9\xd7\xc0u\xf3\x0f\x8eBD\xfd\xc4\xed\x00\xef\xf1\xc0:\xd9Y\x83\xb0I\xb2\xeez\x18@v\x98\x05\x94\xa1\xfc\xeb\xc7\x94\x9b\xb1\x04d\xb5\xc1_\x15\xb2~\xe2\x949w \x8bi-\x15\x9c\x82n\x0b\x84H}\x8b;L\xe6\xf5\xebO\xbc\xd3x\xfdSh\xd1\xfc\xd5\x16\xc1C\x87c\xc1w\xc1\xd7\xd2\xb0\x10\xcc\xbfD\x14\xacK\xcd:i\x10\xc3y\xa0\xa9\xf99\xf4\x8a\xe1H\x1d\x9d\x8d\x1eXpuN\xd3\xcfn\x8f\xd4f\xa9@\x85\xf7\x8e)\x1a\xc9f\xef\xd8l1e\x922\xa36\xfe\xc4\xc1N\xd1O\x9b\xd3\xaa\xc3\x82\x9b\x87*n\xe3\xafUS\xed\xe506\xce\x0efc\x98\x99\xd7\xab\xa0U*t\xbe\xb1\xd0\xb43jO\x98\xb6\x80\xcfvK\x03c,iM\xcd\x06\x9bR\xa1\x08\x86\xbeoN\x93M\x0c\x1c\xe9\xa3\xa7\x06g\xe7-+\xe5\xb4~j\xab\x1d\xe8\x07\xc2\x8aS&\x0d\xfcTk\xc1O\xfdN\xe3\x96y\xa3q\xabmy]NPMK:'\\q\xea\xa5\x913\xd09Y<\xbe\xc7\xdb\x06\x93\xad2\xba\xd0\x16\xae\xda>\xdb\n\xb4K\xc5\x03\xd9\xb6\xbe\xdf>\xfb\xbf\x84s\x992\xc4Im\x17\x81\xd4\xc6\x86\xdb,B\xadA\xff\\\"\xfe\x03@\xe6\x96z\x06\xd0\x05\x1du\x00y\xdc ln\x81\xcd\x89\x0c\xa0\xca\n\x0fUu\xa4\x8e\xd7RU\x1dG\x8e!\xdc\x1eU\xd8\xbd\xba\x1a\x83 8,\x0d\x8d<\xaa\x88\x05\xb4\xfe\xd5\xb1(\xf9/\x9c\xb4\xc6\x9e\xb3\x15vkD/\x8a\xc1\x17^\xcd\xf4\xd5\xed\x1e\\tZ\x08\x14&\x05h\x8a\x966\x9a\xd1\xdb\xa68\xcd\x19\x99J\xa6\xdaot\xf6Pq\x93Wd\xc6\xe6u.;\xce+\xd4\xa8s\x15\x08\x83\xbb\xff\xc3\xc7r\xb2\xff0\x97\x91\xd7?\x03\x87~\x8c\x89\xaa\xf1\xe0\x91\x9c\xec?Hj\xe8V>\x06.\x0b\xc1s\xc7L\x1by\xa3Z\x1daR!\x9f\xe6)\xfcF\xaeV\xa1 \xe0\"\x19p\x87\x1f\x87h\xb1n\xa1OG\xc2\xbb \xcb\xac%\\\x1a g\xc0IU\xc9%\xf1\xd2\x98f'L>\xd5V\xd8@\x91E\x8e:yz\xb8\xca[\xaeA\x10\x1e:`\x12u\x8b\xbe\xc7\xb5H\xc0h\x92\xa0\x04\xabk\xf1\x90\x88\x94\x8f}\xcaI\x9b\xb9}\xca\xdd\x85o\x8d\x07\x91\x1d\xebr \xe2\xe6\xd4\xcb\xd2\xe1\x16\x18xw\x1c\xd0\x18\xdb\x00\x11ERA\x9f\xbc5\xe5\xa8 \x15\x08\xb8E\xcc\xa4r\"\x02\x16U3\x985q\xb2<\x13\x13\x82\xe1\xdb\x95u\xa4\xd1NM\x05\xbd\x95\xac\xb0\xce\x07\xb9\xe0dQ\xbb\xd02\xf9\xef\xfa\xa7y\xa9\x7f\x99\xf3X\xffxu1g\x122\x0e\xfdTT\xb3\x92\x99\xe2\xd7\xc5\x8dX4Q\xcd\x03v!\xcc\xa3\xc5\x06\xfb\xeb\xc4\x88\xf6\x9e\xdep\xa7\x02UI\xc0\x00w\xcf\xa3\x17\x025`\x83k6b\xf5/m\xc4\xea\xff\xdeF|\x1e\xcd\x98\x9f \x98\xae\x9d{o8\xbe\x16\xa81\x075\x18)\xf1\x13\xe4&\xeb,\xb7,\x9d\xc5\x1e\xe4(\x90\xe2Y{\x9aVA\x00\x8c-L.\xad\xa7+\xb96O\x9a\xb6\xf5\x86\xe3\xd0\xe8,$\x12A\xdf\xa4N\xed\xda\xc6\x85\x890Q\x1b\x95\x7fa\xe3<\x90\xa9\xf1\xa4\\\x1bEb\xea\x10i:\x99R\xc1\xd1\x14\xe7S\xbd\xdc\xd3.\x94\xb0\xf6\xea\xd5\xda@\x0dd\xde\x95Or\xd1\x19\xbf\xa1X\x17\xbfa<\xef\x8c\xe0P|3\x9aGg\xdc\x80b}p\x91\xe5\x12T\xb1r\xb9\x04\x18\xe0,\xfb\xa2\xd6D\x11\xb2)&>^\xdfIK\x1d\\\x98p 'd\x0eRxR\xa8U,\xd3z\xc44\xaf\xb6e\xb9\\\xfa\xf8\xdf\xcb%\xe7\x93\x8e\x80j\x1b\x0b\x1d?C!\xc6B!I\xabILPM9_.ot\xad\x9aHr\x02\xfe7x\x82~\x04p\xebC_\x14\xdd\xa1/:\x97\xb0\xab\xc9\xae\xd2\xee\x80\x17w\x8e\xec\x8e\x97\x08\xafi\xae+0E\x13\x07\xa6\xc0\xf97f\xb2\xfeS\x92\xec=\xda\xb2\x91\xa0%&vCJb\xb1\xa4$nS\xd2)\x91\xb4\xfew\xc6 iodhUB\x1a\xb4mT\x9bD\xb8\x115\xd6\x19\"r\x1d\x9f\xd4\xf9o\xc2\xba\xf6\xd6\n\xe5< II\x06Jh\n\xfeQ\nBP\x17\x85@w\xd1\x14\xfcc\xd4\x03\xff\xc0\x1e\xf8/\x13\x8f\x0e\x82\xe0Q\"$\x1c-\x02C\x82\xa6O\xfe%\xc2\xd1j\x12\x13\xb4H GIN~\x9cph0\x7f\x0f\xb8l8\x9e\xef \x1d\xb6\xd1\xceb$a\x9c\xdfOA|k\xeb\xdf\x9aF\xbf\x83\x90\xd8\xd6Z[\xf1G\xd02\xfd|kw/&E]@t\x9d\xebl\xd7 #\x9ae\x1d\x06\xc4\xcb\xe5\x1d\xc3\xec}s\x98\xffzGjB\xdfA O\xba\x08\xe4IB \x17\xff\xdf\x83\x0c\x90m\xcbS\xbf,\"\xfe\xd9s\xaa/\x93\xeb\x88\xb9\x06\x98\xa8\xc1\x1d.\x0b \xb0\x91Y\xd6s2\x1b\x91eW\x10f\x82\xf4F\xd8\xdf4\xc62:,\x9e\x14>\x05\x901`+:\xb7t']\x061\x8a\xb1\xd817\xf7@\xf7\x16\xb3\xff\x9e[\x86\xab\x81\xbe\x82\xc5\xa2\x01\xc5'sw9\xd0/\xa1\xb0\x86+\x92\xb9@\xd4\xbaN\xaa\xc4\xd3\x11\xad\x82Y\x0f]K\x1e\xae\x7f\x07\xa6nax6\xa7\x937z\x80\xc9\xa5@C\x92\x96\xb6\n\xb4K\x88~\xc6\xb9{\xcc2\xf3\xb9=>\xd5\nh\xc7\xa6\xd8'O\xbb\xd9|,\xc8\xd3\x82\xdc+\xc8\xa7\x82\xde&\x02+\"Y#ot\xec\xf4\xc0\x03\xe7kl A\x04\xb5Wwo\x96`\xce|z\xe0\x0c\xf2Im.5Hv\xe1\x10^.\xcd\x8b\xad\xac\xc0\xdeP\x80\xf9\xdber\x94`\"'\xa8\xa6\xbdarU\xdb\xdb\xb5VF\xd4{\xc0\xb6v\x87\xf7x\x1b\x9c\x18m\xccr\xd9\xd3\x05.;J\xa1j}8\xe3\xf5KW\x05\x15K:\x02\xd7\xa6\x03NFY\xe1\xef\x9dp\xa9sb\x0f\xdfl\x96\x1d\x17H\xb1DP\xa1\x0e\xde\x10\xc4!\\\x0b\x98(\x91a\x12C\xa4!C\xaa\xa0\xa1\x81\xab\xc5\x95A$\xc7h>\x13\xeb\x13\x04\xff\xe7\xe6\x97\xf5\x97\xf4>Rl\x8c\x9d,\x82\x83\xcbX\x1cH Uj@5\x11\xad\x88&\x0d\xe1>nRk\x07|*\xdc\xc6\xe1\xc4\xa5m\x13\xd4;l\xaes]\xd1\x1fy\xa1\x1d\xe4\xfb\xf1&w\xe9\xa2+\x10\x8a !\x15\xb6\x832\xe0\xe5\x11x+\x1d\xfd)\xd6\x04\xac\x850\xb8\xa0\xff\x08|1\x0cP?\xaa\xd51\xc1|hm\xc1]\x8fqm;\xab\xc0\x007\x01\xb7P\x03\x14\xa1\x0bhC*\x07gA\xba3G\x0c\xef\x82\x7fE\x84s\xbc\x8aI\\\xb0\x18U\x9b\x88E\xebQ\xad\xf8\x89\x07\xf2\xbf\x80\xba\x0e\xf3H$\xa8\xb0\xa8\x87\xff\x1f\xc6\xed*:6m??\xb2\x04\xc1\x16\xb8\x13\xcazu\xe2u\xf1\xc7\xc5OF\xfa\xd6\x12;u\xa5\xf6\xa0\xe6|^\x97\x88\xa0\xeaj$-\xa4\x0d&\x15w\xcb\x14\xd9~\xfe\x9e0\x05\x9a\x19H\xb6\xa75\xe4/R\xcf\"z\xcb\xeb\xa7\xc5\xf4\xfc\xaa\x90\xb3\x1a2o\xa8\xe3\xda\x19\xb7\xb8\x9f\xef\x9bB6\xfa\xc0\x01k\x96\\\x92\xa6\xe0e^\xc1\x1f\xbf\x06\xf9\x10\n m\xab \x81 4_\xe5\xa8\x18\x04\x9d\xd1\x86\x14\x03\xd7\xbe\x86\x7fP\xe0:\xa4CR\x80\xde\x138B\xd58\xad\xcc\x83\xef\x16*\xd9\x8e\xa90_\x18Mi(9\xfd\x9c\x18\x0b&\xe7\xa2\x80\xf8\x89\xce\x15\x94p\xf0\x10\xe7\x10\xf1\xc9\xaa\x0c\xa2\xcd\xaa\xcfE$\x83\xf3\x14c,\xe9(\x93\xcb\xadX\xbc\xb7\xb7\x13\xf9\\\xe9\xadg\x0e\\\x16\x1e\xb8,\xd7\xbb\xce\xfa\x8e\xfam\xe4\xdch\xb5\xae\xab\x9b\x14g\x19 h\x85\xc7\x91\x07\xac\xfe$}\xe5\x9a\xd0\xc4\xf2\xd6<\x84\xee\xec\xa6(ra\x051\x81\x8b\xa0\x1f:\xb1\xb2N'V\xe6\x9cX\x99wb\xf5\x0dxM\xe4\x8a\xa5\x0e\xac\x0e\xe9\x03\xc2\xb1\x92\x19\x1d\xa9q\xe8\xd3^\xa6T\xabks\xeb)\x1b\x15\xb90\xf9~O\x84\x04d\xec\x03\xc8+\x0brb\x12+\xd9m\xea\xe2 B\x10\xd207\x86\x99\x1f\xf8>\x83\x12\xa3\xc2\xa4\xa2\xee\xa4\xb0PA\x15\x15x\x82\x84\xeb \xd4\x8eA\x90i\xf7Ip\xcc\xc0K\xf2{\x81\x14\xaf\x08\xe4\x91G&\xfd8\xca6l7\x96\x9d\x8b>\x02:{\xb4\x13\x13\xe3\xd0\xfd\x0c1*\xd6N\xce+\xf4\x84\x8d`C\x85\x1b\xb3\x08\xc94D\xdcg+=\xee\xa1!\xeaw\x0d\xbd\x11\xa7\xac9c\xb2\x9f\xdb\xb9V\xce&\xc3\xf8\x0ft}\xeb|\xf2;V\xdb\x93y\x18\xb4'\x00\xfft\x04 8\xff\x9a8?Q\x92\xc7ilIE\xdb/n\xa8\xcd\xae\x8b\x12Iw\xafH\x92M\xc5\xe9\x9c\xa3\xcdo>\x08\xf6_\x1a\xd5h\xdb\x07@\n\x1d\xcd\xf5\x02+\x16\xca-o\xc2J\x05\\\x87\xb3Mq\xc1J\x83=\x1al*\xd0\xb7\xb9u\xbc\x9b?\x1b\xc7H\xba\x16\xda\xbf\xb5-S4\x8d6\xfb\xef\x8c\xcff\xac\xea\xe7`7\xa0\xe8\xacw\xdc\x0e\xf14\x0cD\x1aF\xe0\xach\x12u\xd4`l5a\xe6\xa4P\x97\xd0x\xacq\x82\xe6RgZ\xef\xe7U:\x02\xb9\x86\x04T\xd1\x08\xe4\x9a\x0d/'M\xe0\xc4\xad\x1a\x8e\x86\xa4\x9f\xa3q\xe52\x06\xa9\x07\xe2\x1fw\x9eYc\x17\x9d\xd1[\xfdl\x99\x80\x17{\xe6\xef\xae\x8d\x11b\xe3`\x98\xe0>\xf0\xe7\xa1)5\x1f\xd9`\x19;\xa1\xf5\x8e1\xbc\xb1E\xa7V\"\x8c\xb3\xecF }\xd5\xb2\xc9[L\x9dw\x1c\xe1$\x8f(\x10\xd8 \x0e}|m\xd6\xb9\xddl\xd6\xb3\xf4\x92\x9d\x16\x18\xe2XE\xf7I\xbf\x93\x96\xcb\xde\x87\x02\x82C\xb6\xc4:~\xac\xbb\xf9k\x8e \\FGP\x0dn\x04\xe2\xf1\x96\xd5O\xe1,\x9e\x1a\x19\n\x91:a\x87V\xb3Z\xcdoK\xd3\xea\xd3\xd4\xc98\xca\x83o1M\xe7\xba\xe7\xdd\xdc+\xe3\xe0\xcb\xd2\x88\x1f0Y|\x1b\x8bq\xdc\x14\xb4\x08'\xd5\x0d\xda\xe0\x87\x87/\xaa#\xda\x10yx\\\x1d\xd1Z\xf1\x90\xb09\xf8\x89,.l\xd6p#\xe9\xd7?\xd8\xc5\x17\xb5e>7\xa8_\x8ab\xd6wA}\xf4\xae\xba\xe43&L\xd5b1\xe3\xa2o\x18\x9a\xe1\x98=\xfa\x83\x85 \"?7\xe8\x0fv\xc8\x8e\x92\x16j\xb1\x90S\xa6{`\n\x0ei\x17\xfc\xc2\xe6\xa1\xe7\x17\xc5\xa9\xcb\x95\xce\xab\xf3\xe4#\xb2n\x90'B^\xe8\xba\x92\xd5\xacqu\xeb\xc5\x97\x0b\xde\xa4\xb5gL\xed\xd7Z\x7f\xd0\x88\xd3\xd3\x92\xb5\x86T\xcd\x17M?\x7f\xc3\x90$\xb5n\x8bW\x97E\xc9\xa1kRV\xa8\"}Q\xe9\x94\xe0\xfdx\xba\x90\x11\xbc\x9f\xcb\xc1\xf1\x95,\xe6s\xeb\x08q{U\xd4\x07\x8b\xb2\xe1\xf3\x92\xe5\xbd^=\xb80?V?\xd4\xbc\x0b\xb7\x9d\xbf\xfa\xce\xc1\xad,\x11,7x\xb5!*\xc4\xd5W\xe6\x92Tcu\xe5\x1c\x9c\x15\xf5\x9b\xabJa\x12\x93\xcd\x0d*\x8d\xc6|J\xeb\xc3\xf2h\xdc\xb7Lr\x1f\xdc\x87[\xa1\x9a\xa6\x139P\xe3\x82\xdd\x0cI\xa7\xa7\xe0Ez\xe8?$\xd3#\x9c\xb7\xe29M\xb3,\xfd\xb2\xdf\xdfl\x7f\xac\n\x8fp\xfe\xa2=N\xbb\x89\xa7Y\x06\xf3.\xf1\xca\x06P\xb3\x98\xaf\x97\xf2\x9a\xa9S\xfd=\xc0\x0c\xac\x0f;a\xaak\xbdS\xffw\xad\xa9\xde=s\x10\x9b\xe61\xdf\xd2\xa1 \xa8\x07\xa2zVr\xc80%\x07\xa2\x9a\xaag:\xad\xf0\nB\xd7\xc6\xe18,\xf1\xab\xda\xca\x07\x9dc\xccL\xab\xa4\xfb\x10\x1f\xc7[X\xe6\xd5\x00\xa2\xb7?7q\x90\xc0\xc7\xa8\xae\x00\x88\x07\x10\x97\xca\x94L\xfa\xf5T\xf2y\xd3\x07/&\x84\x18-\x07\xda5\xd6\x84NB\xfd\x19\xbf\xecC\x10\xef\x8a\xc9\x9f>\x1c\xbc\xa6\xfdG\xfa\x9b\xc7\x8f\xfe\xcf?\xccS\x9fh\x0e\xffB\\2\xb0{D,4\x82\xc4y;\xe6\xeb\x80\xd7\x93vo\x9c\xdc\xf2:W/W8\xef\x18\x0d\xc7\xc4B^\xc7\xccB%eD\xba\x8d3)\xdd#\xed\x0d\xe1\xc8\xfd\x1b\xc2\x1c\xc1\x03\xd5\xbf1\xc6y\xab\xe9_\xdf\xeb\x80\\\xccPK\x06\xd4R\x92\x8f\xd6>1\xb0Ue\xa4\xa4\x85\xda4\x12\xff+\xd4\x94a\x88\xd3\xf7m\x8a:\xa5\xc3\xf14\xa0\xa8SGQ\xa7G\x84\xe1q\xd2J\x07Umw\xf5\x9d\x94\x95\x85\x94\xb5\xddJ\x8b\xba\xb2\x98\xba\xb6\xbf\xe8\xa4\xb0\x1d\xc3sT\x16\x02\xb1M\xe9\xb9y\x8aH\x1a\xbb\x9b \xda\xed8\xa5\x7f\xb1 $]\xbcq\xd9\xdd\xc4X\x06\xc4\xd8d\x90\x93\xe4\x16\xe2WZ\x9f\xd8\x1f\x1bTD\xa5\xcd\xe4\x9e\xfd\xd8\xe4,a\x99R\xb9\x02\xa2=\xb569S`kkE\xcd\x17\x8a|/R\xb2X\x1b\xf2=\xa7\x8b\xc3\xfah\xdc\xaf\x9b\x9b\x92\xa9=TO\xaa\n12\xc7y\x7f\xa6:\x93bQ\x977\xefY\xf3\xcanxS\x0bh\x11\x9a\xd3\xf9d>8>>k.J\x03\x07\x9ce\x7f3\xd3Dx*\xd4\xedSa>\x89\x93C\xf0\xe5\xb2\xaf\xfe\xceq\x96}\xb4m\xa4'\xc2\xdc\xbc\xeb\xf77\xd5\xebz1\x9fKV\xd7\xe6|x1\xe3\xa02\xf8T\xc8J\xe7\xb6\xa0u\x96\xb9Z?\x81Z\x85\x8b*y_,\x1a\xf1RL\x17\xb5)@\xad\x83\xa4\xc6f\xcess\x8e\xd4V\xbb1\xcf\xb2_\x10#5\x99\x93\x12\xdfq\xb808\\\x18\x91\xa47Z\x7f\xb808\\X'\x02\xeb\xfe\xa4\x0e\x9b\x9ae\x90\x90\xe1I\xd3H\xfee\xd10\xd4\x87b8\n/\x192\xb5\xf0\x1ad\xf7d1@ms\xc2\xa0\xca\xf6\x81'O\xd4\x88\xe3:j\xf8n(\x06\x07\x7f\xd7#j\xd7\x8ek\x04\xc7\xea\x1d\xa7\xe248\x15Yt*\xdeh*\xdbq\x00\xba\xfb\xe2\x1a>|\xd5\xba\xdd\xec\xe5:\xadw\x9b\xc5\xbfW\xa0!i\xd9\xa9+\xbaa\x99\xf9V\xe6\x14\x19\xe4\x8c\xb8\x9b\xb3O/\x1f\xa4\x8b\xb3\x9f\xc4W'\"[V<\x959\x97\xf41\x0f\xc0\xd5\xb2\x89\x0e\x0b'TQ\xf4-\x96\x00\x9b\xe3\xef\x03\xbb\x86\xe0\x86Hbl\xba\x08\x8f\xba\xaa\x03\x90#w\x07,\x05:\x00\x8f\xa3\xd4\x80\xa5C\xcf\xd8a\x19[Ab\x04g\x05,AM\xee\xd4z\x93\xb5\xc1\xfc\xbc\x82\x0f\x80\x97\xbbTm\x14\xf1v\x0e\xa3\xca]\xd4\xbd\x935\xd4\xd3\x92P\x1b\x154\xc8\x83\xab\xaeR\x81_\x0e\x0c=\xf4\xd3\xe1\xc6\xaf\xdb\xfc\xac\xc1\xa0um\xf6\x97\xa4\xb6\xbe\xd7\x06q'\xe8C\x8cI\x95e=\xa9\xc5\xc5\xa1Z\xacr6\xbf\xbd.@\xdc\xa5/UM\x8d\xb2@l=\xf9PSJ\xaf\x15\xb1\xfbP\xd3+5\xea\x0fuO\x97\xc0\xc3U\xbd\\\xaaW\xe75\xc8\xbd\xe9\xdb\xda\xdd\xba_\xa8\xaf\xde\x95\xe8EM\xde\xd7\x98\xfc\nOok\x8c\xb1\xba\xf5/\x97][T\xebz4\xca\xecDR\x83\x00\x95\x86\xf6E\xa3o\xea\xfe\xcd\x83\xef\x10F\x8c\xf6\xd5\x9e6Xh`\x85Z\xd8\x88S \x1d\xef\xd2\x83\xbb\xefk*\xbd\x9aB\xfb\x0fq\xfc[\x814\x19\xb7\x82u\x03\xba\xd0\x04\xbbK\xd6\x0f\xc7r*\xe9\xafS\xb1\xecs\xae\x0eh-\xf7Kt\n\xc4\xf6LB\xd4M\xb24\xc7\x17\x07N\xbaV\x02\xa2\xe1z\xb4\x84\xafB\x9c\xd5x\x19anX\x1f6y4\x0b9\xc65\xad\x08\xe2T\xe2\xd0\x0e`\xab\x8d\xef\x84\xb7\xba\"b6(\xe6\x8a:kiZ\xe0\x8c\xee9\x90\x1d\x9b\xdc\xd2;\x84Y\xfd\xa1y\xf0\x16P\x95}\x17i\xf9\x03%}\xa4\xe3\xaf:u\xfc\x95\xd3\xf1W\xa1\x8e_?\x8e+\xf7~U\xa5*~\xfb&T\xa4\xadV\xe4i\x0c)\x9bf-5p\xd1\xca\x0c~\x82\n\x9d\xd3 \x94\x1d\xa4$\xd3\xf0\xc6d\x95\x1d\xc9\xe5\xca\x1c\xe6U|7/\xe89CSR\xa8\x03 \x9e\xa4\xaayx\xd4u\x05/\xe8_\xae\xee_k\xea\xda[v\xa1\xe5DEKN$\xd7 \x90\xd2\x96\xbcd\xa0\xa0\xcf\\\xbf\xcf\xda\xfd\xb6o\xd3\x81\x0d\xb3\xbbMw\xdc\xb5ep\xd7\x9eFwm'A\x12:\x07%1&\x06\x05\x84\xd1\x96m\xf9H\x96\x15]\x85\x1a\x19\x8b\xc3\xfa\x08\xeb\x9b\xb3\x954\x013\x0c\x1a\x87\xa9~=\xed\x12\xde\xab\xeb\x04\xaat\x82\xd3\xc3\xf2\x88\xf6\xfb\x1a\xe5\xd7\x8a\xa7\x8cD\xc7\x89\x9e\x12 \xd0\xff\x82\x9c\x88-\x97H\xad\x0d\x88\xac\x19d\xc8\x18\xcc\x17\xf5\x19\xaa\x8d\xbd\x9b\x97\xce\x19\xfc]PyX\x1f)\xa4\x9e\x9a\xabk1Q 1\x98A:\xa1\xbd0Z\x14\xfd\xc1\xc2^=\xa68\x85\xb3jV\xd3\x1d\x0dm\xdc\xeb\x80\xf4r\xb9\xc8\xb2\x96\x9cP\x95w\xad\x80kl\x81;\xbe\xc9\xb2\xe9ay\xd4\xa3tqX\x1e\xb5\x97P\x95\xda\xb0\xbb\nT\x16\\\x8490\xa9+0]\xdc\xbd\xd0\xc0\x9e\xa2\x05]L\x16\xb1\x04\x92L\xe9t2M\xca\x0c\x94t\xa8\xdb\x85\x0ea\x1a-\xcd\x02\xb7\x04\x96SJ\x15\\[\xd2\x9eE\x96Y\xb1\xa4/\x83Y\xc4M\xf6\xfb\x9b\x8b\xff\x94\x88\xb2\x13\xd3\x90\x9bUi\x95v\xcb\xa5\x19\xb5\x86i\x07\x0e.0^U-\x00\x18\x84!\x15&\x9c2\x92\xde!\xbbdn+r\xafM\xb2\xf1m\xd5-\x88\xd2\x11\xf3\xfe,\xba|B?\xb1\xe2\xfc=k&\xe6o\xfe\x9e5\xde\xcc\x9d\xd5\xb1\xf7\xb3>g\x89\xd1}O\xcf\x9d\x0d\x86?\xf8\xc0R\xe3\x06\x12\x16\x06Z\xb3Sf\xdc\xdd\xb5\x11\x89N>U\xb9\xfb\xfa\x88\xba\xb0\x19\xa7\x0c\xb9d\x1a\xf2\xe6v*\xaaZ\x94l\x00\xca\x10u\xaa\xbb\x08u5\x03\xaeP,\x9a(\x9e\x8e\xc9\xcd\xb2\xc28`\x1b\x9a:t;\x90\xec$\x8a\xd4\x1e\xe5H\xf3\x81\x96\xac\x986\xaf*\xb8_\x95]\xcd\xd1f\x15Ng;7|\xa8\x11\xff\x1a\xb60\x16/\xa5<\xfa\xdev\xc8\x9dK\x03\xd2\xe0\xbe\xe9r\x1b\xc0\x8d.\x8a\n\x1c^&L\xe0\x11\x8b\xc4\xb4\xf1\xe1\xa1O\x10\xd2|\x1b\xc3\xde\xd1\x1b\xa2Q\xeb \xb6c\xf7D\xa3\xe8\xbaz\x9bI\x84W\x95 l\xc3z\x03B\x05\x98'\xfeW\x87\xad\x05\xc9\xc1\xa8\xbfg\x88\xbc\xb6FO.\xfd\xe9\xf7\xa3\xab\x0e\xe4+j\xb4M*\x1c\xe0.\x0b\xb3\xb9\x93\x9d,\xb0(\xc7a\x1e\x11\xd6\xf6\xb5EF\xd8o'\xd5\x99]9\x91\xbf*,\xadlR\xdc\xe8\x0d\x1e\xb3\x0eo\xb5vT\xf5\xef\xc3kwG\x86\xc8C\xc1\x8a&\xe2\x8c\x13\x8e*\x88\x98\x85\x83\xab\xde\xba\xea&ISe%o\xc1\xfd\xc1\xad\x88\xbeE\x84\xd1\xa6\x98\xad\x14\xb0\xde\x9e\x7f\xdd\x18uUX\xb9qE\xdbs\xd7\xa7`\x0dW\xcd\xcd\x91B\x08\xa1h\x11\xb3\xec\xa6\xf2\xd9\xaac\x88g\x19\x1b\x9c(N\x0da\x17\x9f*\xda\xf1 \xad\xdb\xceS\xa0\xc2:'\xa6\xd6`3\xe9c\xb5\x06\xe7M\x95VN_z\x9f\xae\xe0\xcdA\xa3\xce(l\x878\xdaw\xe4Hc\xb8\xc1\xfc\xad\xd1w\x91\xa7\"\xddD\x1d'\xcay\x99e\xe7%\x02\x13\x86\xf5;l\xa7\xb5\xd3\"\x11[\x93`\x9a\x7f\x13\xc6,\xc3\x96&\xe8hDc\x1d3\xb8\x9a\xec?\xc8\xabV\xcc`F\xa5\xcdI\x011\x95\x0c\xed\x0b]\xb9\x8cE\xa4\xa0:\x00]\x85\x82\x83\xf8\xb2\xd4y\x1b]\xa8$Ch@+\x86\xd5A\x1c\xa1eS+\x08t\xf8\x9e'&\x8b\xb1\xabpu\xa1\xdd\xf0\xe3\x0b=\x9c\xd0\xc6\x8b5=\x0cMc-\xd1l\xd3\xd92\xea8\xe2W\x90$<\xdcT\xbbz\xf4a\xd1N\xbe\xb0K\x1f\xd0\xd4:b8\x82\xc43\xee\"\xbe\x80\x84\x85\x81\x8c's[\xcbY\xf7\xcc!\xc9\xae\x9dIH\x03\xe7\x9d4p\xeeh\xe0\xdcK\xc2}\x03sWa5O\xe9\x9e}\x03\xa3\xb0K+&\xa8\xa4RM/\x80\xb5\xda\xc0\xa5\xdf\xc0eH\x03BK\xdb)\xce\xcb\xa4\x00C\\\x06_\x124\x8b]r\xcb\x1d\x0f\xe5 ]\x99\xd5 \xc8p,\x1dKiu\xd7v^\x9cp\xfb\xb1W1\xb8\xbe\x80O\xe5\xea*\x9f\xf6\xf3=\xcd\x80\xc5F\xb7\xa6\x82w\xae\x0fw\xeb\xc3;4\x15j\xe2\xe0\xaen\xce.}\xca\xa0\x1a\"+\xf1t\xc1l5\x18\x98\xd3]\xb8M8\xff~\x99K\x9b\xc5\x0e. \x1bR]f\x1bw\x99\x8d/JN\x12\xe6N!\xb7d\x81\xd7P\xcc\x89\n{\xe1\x0f\xb3\x0d\xeak\xab\x1c\xb3\xd0s\x84\xc7\xec=\xc4\xd2ms\x80v\xe5\x8cw\x9a1\x8f6*\x15m\xa3\xd4\x97\xc5\x8c\x0b\xa3\x14\xbf\x99;[; is\xb3\xec\x05\xd3\x8a\x85B1\xd2B\x91\xb7\xc2$\\\x16t8\x16\x8f\xb85t\x16\x9bt\xcb(z(?\x14G\xa4T\x7f6G-\xc3\xd5\x8a\x94\xdf2\\\xfd\x9b\x99Z\xb1\xa8\xf7\xa3)\xfe\x05U\xa4&\xa5\xa2\xacV \x1b+\x8b\x8e\xf5\xa0\xbb\xb54o\xdb/\xad2H\xf1}\x91\x85\xf1 00&w\xbc\xeb\xb4\xd0d\x91\x85f\x15\xdb\\2\xb0\xd0lz4\xfa\xd4i\nb\x93\xcc\x8e\xef\xdb6\x9byW%gd\x7fx\x94\xf7\xfb\xaaO\xbcZEW\xfa\xbd\xfc\xfb<\x9e\xb6\xbc\x0e\x19n\xdf\xe1\x89\xeb\xcc\x1bS\x8cvB\x8d\xf0K8Y\x83\xfb\x9b\xb9r\x834\xda<\xd3\xde\x88\x1c4(\x0d\xc2\xe2\xae\xe0-\xb9\x00hF\x1b\xe2\xe6\x11\xdd\x90&\x8a_\xcf\x91\x04\xc3\x12g\x01\xf1k\x0dv\x02^\xf8\xec\x9c\xbc\xab\xb1\xd7\xf2j\xf5>\x0fc\xd0\x109\xe9\xb8\x94\x02\xadQ\x88\x8e\x075k\xac\x02`\xc2\xc3_\xa8or~\xf7I\xbf\x12\x15\xeb\x93>\xbf\x98\x0b\xd9\x14U\xd3\xc79\xb7)\xc1\xa9~\x9b\xa3\xb8_K\x1e\x90H\xef\xb0\xa6\xe7,\x13\xa9\x02\xc2\xf5\x88'\xc26\xaf\xe3\x08\x98\xe1\xba>\x9b*\x18\x9e\x08\xf8\xbe=\x07\x06\xd6\xb9\xe6r\xd2\x07k\xe5H\xf7k\xcfi\xef\x1a\x1f\xb8\x03&\x02\x9b\xca\xfadF\xe5a\x82\xe9\xdb\x0e\xe3OK\xed\x19a\x94\xc7:r\xdb\x8f9\xb0\xbe\xc7\x81\xdez\xd0W\x1d'\xd6\x0f\xf8\xcfW\xff\x86\xff|p\xb2\x9c\x80\xf0\xc0\x8a\x9b\xd6\xbd\xf9>y\xf8I$aH\x0e\x0d\xcb\xc0* \xa5\xc7\x87\x8b\x91\xe1\x8f03u-.\x8b.\xfb\xecj\xe3\xcf\x02\x93fp\"\xe4\x8bbz\x16\xa8Z\x1a{\xdc]\x97A\x96\x00\x88\x92U)t\xd5.\xa1\xd5\xa0\x98\xcd\x8c\xc8\xeb\x8cUH\x12\x89A&\x04\x91\x97f\xf5:\x95\xd4A1\x9f\x98\xbf\xf9A1\xf7*\xa93\xc7k\xa3\x8a\x96\x1c\xb9@&MqJ\xb7I5\x98\x177\xa5(f\xf4\xd6\xc8\x8d\x83\x9cQ\xd2\xaa\x9e\x9c\x93\xe7`j\xacti \x13;\xa8\x97Kt\x00a\x95\x9e\xd7Tbb\xd4`+\x12d\x02\xb8\xb8s\x1cc+}SSZ\x1b\xb9k\xdc\xady\n.Jz\xb4~R\xc1(\xcd\x14\xcc\xd8\x88D\xc2\x005\xa2.I\x1e\x02\xdei\x89\xc0# \xf9\xb3\xa2\x99\x9ei\x17\xe1\x0e\xe0t\x989Ho\x1e\xfd\xb2\x9e\xbc\xac\x01m\xde\xb3\x06\x1d6g\xbc>\xc2\xf9\xcbZc\xc1\x19\xaf\x1d0m\xac\x16\xabIT/\xdb\xc3@VWx\xeb^\xbd\x07\x13\x1fK\xdd'U\xde\xef\xaf\xf0\n\x93Jg\xaa\xaa\xc9MM\x0f\x8a\xe6l0e\xbc$\x97\xf5\xfa\x14\xea_\xd2w:\xd2\xfauM\x87\xe4\xaa\xa6\xdb\xe4\xbc\xa6;\xe4\x8d\xfa\xf9\xc2H\xc2\x8e\xcd\xdf\xf7\xaa\xf0CM\xafk\xf2\x97)zR\xd3 K\xed\xb3\xe8\xd7+S\xe7\xad\xfa\xec\x9d\xe2o\xd595$\xafM\xf9\x01\x14=7\xbf^\x9a\xbf\x7fC\xe9G\xf3\xebiM\xf7\x87\xe4\x9e\xf9\xf5I}\xfe\xd5\xfc\xf8\xa9\xa6\xc3 \xa1{\xed\xb1c\xd8\xa3h\xe7a\xf6\xa6\xc6\x137\x9c\xd1}\xa4N\xc8\x7f\x8c\x86\xcb!\xce\x87=J\x7f\xaa'?\xd5\xf9O\xc1\x90\xa3:AL\x17\x87\xf4:\xcc>\xda\xca\xe0\xd8\xd7\xb1@\xac\x9d\xa5\x9f\xb8\xd9\x06\x90\xd8\xce|\xb1\x93\xf9$\x0f\xfb\xfb\xe0\xbf\xef\xeb\xfb<\xbf[&\xe6\x03\x1a\xed\xa9\xd1\xbbD\x08u@\xde*\xcc\xe8?\x05bd\xb8\xac\x06\x8d\xd6\x05\xab\xbd\xbb\xcb\xb6\xc9\xd6\xee\x10GqH\xa4\xb9\x0b\xec\xef\xe7,X\x9aP\xde\xb7\xff07\x0d\x8ev\x87d4\x8c\xfcP7\xf6\x8db`\x7f\xcf\xd6r\xfd\x84\xb5vsF\xb7\xee\x14\x0dno\xed\xe1\xd4\xd6\xf2E\x9de\xea\x9cz_g\xd9\xfd\xfb,\xcc\xa0\xf8O\xafA\xdc\x1d>\xfade\x04\x11\x02\xb83\x02l\x02#}\xc1of\xbbY\xa1)\xac\x85\x9f?\xa4\x96Qp\x06$\xc92X\"\x8d0\x7f\xaa\x13&G\xbf\xa8?dH)}Sg\xd9\xef\x8a\xb7\xca]\x19\xdaQU\x97\xcb\xfd\x87Z\xa9\xb2\xbf\xaf\xa3\xa1[zp\xaf\x9e\xdc\xd3\xf4\xe0\xa0\x98\xa3CHMs\x84s\xe4B\xcf\xa1\x8a\xde\xab\x15\x81D\x0c\xe3\xe5\xb2z\xdc\xe0,\xbbW+\xf6J\x8f;\xb8\xe1\x99\xa9\xfc\xefF\x83r\x94\xdc\x9c\xed&^\x8dg\x18d\x96\xf98A\"\xa2\xbd\x80\x7f\x8e\xe5\xd0\x86\xfa\xc0jP\x19h\xb2d\x97\xbd/\x0c\xa7\xf3\x0dmB\xc3\x8a\xce\xe8hf.w|\x0c\x17C=#=|\xa9\xaf\xcb\xc2\x06r\xf4\x02\xd6\x95tU\x13\xa4\x15Y\x86^\xd4T?\x14\xa0\xd8\x02\xc7\x96\xf3:\xcb\xde\x95H\x90\xf75\x06\x0f\x15\xa1\x16\x92\x88 \xceF\xc4\xbc\x80^B\x0d\x93\xcd\xc2h/VL\xa0\xe5\xc9\xbd\xb7\xa0\x95\xa1F\xb3\xf1Vk.T}\xec\xeb\xd9\x05W-\xbe\xe5\xd5\xa9i\xd0\xbc\xdfz\x0cQ\x85\x1e\xbbD#\xbfT\xe2\xaa2-\xbdf\x97\xac\xc4\x93*W\xfcv\x03\x97\xf5a\x1elC@\xf9[3\xb4\xd6\x981s\x87e\x02\xf0\xe0\x14\xf0u\xdeJ.$on\xe8\xfe~P\n,\xd7O\x02\xfdY\x87\x0c\x15\x0e\xd4\xe1\x0d\x05\xc8\x115\xc7\xf0\xab\xb1\xcbz\xe21\x03%\x0dWF\xe3\xd4=\xcca\xe7\xe8\x86\x91*^\x1d,\xaa\xa7\x84zH\xba\xbf\x9f\x8f\xd4\xe3r\xb9eKvsI\x87\x8f)\x92t4\xfc\x1f\x14\x9c+\x0d\xbe\x9f\x94H\x8c'\xfb\xfb\xf9\xd6\xee\xf01\x85\xbc\xa7\xbb\xf6\xf1A\xbe\xbf\xeb\xefq\x86)j\x8fS\x8di\xed\xc4@K%\x1eS\xe9\xccc{\x94\xbe\x13Y\xf6B\xa0\n\xaf\xd6~\xd7t\x01D\x92\x86&\xb3\xefX\xaf\xfc\xab@\x92\xfc\x1c\x97\x92[sB\xe5m\x80\xa8\xa3v\x85SLhV\xa1\xe1\xb3?\x05\xd4iO\xdc\xe6x\xad\xb7\x85Z\x1bL4]\xae<\x97\x0f\xe8b7\x94>\xb6\x9b\x04w\x88\xe7\x11\xd2\xe4<[\x0f\xf4irQ\"\x1d\xa6@\x1dS\x15\x1cS\xcbeUB|3\xbb>\xc7\xb5\xbd\x0f\xbc\xa9\xc7o\xea%\x1d\xed\xb9\x00?\x82\x8a\x12\xe1\xf1\x18,\xaaJ\xf5\xa8)\x8b\xd3\xb8J\xa3qU\x0b\xc9\x11V<\x97$\x97\xb5\xb3\xae\x12D\xe1\xd7\x07{\xf65\xf4\xaf\x9a\xd8\xfe\xdf\x99\xbfz\xee\xa1\xee\xe9\xb8\xb6\xf6\x13\x02\xc8F\xc5\xeb36\xfb$\xe4\xb9\x02\x81n:\xcc\xfe\xea\xaa\xa4\xae\x17D\xd2\x0f\xb5\xe3\x01-'q]\xe7V\xa5\x1d\x83mg\xd7J4\xb6rX\x9e\xadG\xd5d+\x8fU\xc9W5X\xff[ jw9MW\xdeC:\xb7\x99\xa1,\xb0\x93;\xa9\x15\x9d\x97H`L\"\x8c|Rg\xd9h\xf8\x08 \xfak\xbd\xb9;\x1c\x02ri\x13\x93wf\x89x\x9bB\x1a\xfa\xc1\x97K\xfeX\xe1IZ\x81V\x16\xdef\xe9V\x06\xa7\x10\xd78\x86\xb3\x8c\xf7\xfc=\xdb\x07\xec\x92\x1a\xf1Z\x0d\x9aX\x03+f97\x9d\xdc\x8f~\xa9\xd0I\x19\xef\x1ca;=)c\xef\xec\x8d\xf3\xff\x1c\x10\xdf\xd5Y\x060\x00d\x89\x07\x8b\x97K\xa1\xc0\xf2\x1dp\xb1`\x11\x0e,\xe2_\x02KDf{\x94>\xab'-R\xfa\xac\xd6\xa4#O\x10`\"\xe90oS\xde'5\xbe\xafX\xd6\xe1c$\xd5\x00\x011\xee\x83\xbf\xa8\xa4C\x88\x19\x95|Q\xe1\xfb\x02?R\xb5G[\xc3\xc7r2\xda\x1a\xe6;\x0f\xd5\xd3\xce\xc3a>\x1a\xc2\xa3\xfa\x93\x8f\xf6u\x85\xfd\xada\xbe\xcd\xb6\x1f\xcb\xc96\xdb\xcew\xb6\xa1T\xfd\xc9G\xfb{\xc3\xff\xb9\xa9\x91\xfc\x87z\xf2\x1dW\x80\xc0\x8f\xa4\x82\xc571A\xae\xc5\x84\xdd<\x85\xd8\x13\xef3\xfb\xaa\xc6\xb7\x9c>\xa9Mt\xa6Wp\x89\xd0\xa7\xd3pY\x0f\xbe,\xea\x9b\x03^=_\xe8=\x7fPc\x0dA\xe1\xde>geqsP\x13\xa9\xf0\x1d\x1c\xc0P\x02*\x8e\xef#U;\xbe\x86`\x8c\x1fQ1\x19\xe6bS\xde\xe7v\xa2\x16_\x7fd\xc2\xd1\x8c\xd7\xdd+\xf61\x90PM \x93\xd3$\xe0\xa7\x92\x93i\x15\xb2u\xfe\xc4\xf9\xf3[L*w\x984\xe60i\xdcA\x1a\\\xa5\x8eS\xe5\xec\xd6\xdeH\xb1f\xff\xc6\xb9\xd2\xb8#\x05\x16Ww\xda\xbd\x18\xac\x0c\x0d\xb1-P\xc0\x16\xcb\xca\x81\xc0\x0e\xc7\xe4\x04\x05:\xa6\xe6\x8d\xf5\x8d-4\x85n\xb7\x94\xd1\xfb[D5\xf8\xf0_i\xd0\x80\xee6\x81De\xcd\x90:\xa7>t\xacz\xb4\x05\x14\xbc\xef\x8f\x1c\xff\x1ao\x8f\xfb#r]\x85v\xe5\xc7\xda\x8f\xa5\xa2\xc7V\x87\x1d\xfasi\\\xa9\x9c\xfa|\x10:\xf4\xe9z`K\x01\x12:\xb8*=\xf3\xf9Tj\xeb\xe8\x17\x90\x98\xed\xbc\xed\xab\x17\x93\xa0\xd7<\x0eM\xb5\xb1\x03\x9f\x84%#\xa3\x98\x1f\xed\xe7\xdaO.z9\xcc\x1b\xd5Dh\xb3\xf3\xa2\xa6\x8c\x1c\xd7\x10%\xd29:V\xe0\x95\xfa\xbe\xa6M\"\x84zV\xd3'\xdf\x90<\x05&\xd5f\xe5\xac!\x82Z|\xbbi\xfev\xae[\xf4\xb4 ?q\xec}\xe7\xee%\xce\xcf\x1d@\xd7\xe9\xbb\xdd\xad\x17\xae\xb26\xe9\xbe\x1e\xbb3J\xe6'\xe8)\xa7C\xf2\x95\xd3O\x9c\xde\xe3F\xa2\xc5\x83\xf8\x13\xc7\xb5\x8b\x1b\xe1V\xda\xd2\xb2\x0f5\x1d\xa9\xd97V47f\xb9\xbd(\x10\xee\xeb\x93\x82\x1e\xd7\xa4\xd6\x19I\x1b\xfa\xbe&E\xe8#\xb15\xdcyH\x8a\xc8h\xae\xe8\xf4\x8a7\x1e#i\x06\xaf\xbaS\xaeZ\x83\xcc[C\xa5\xa4\xf5\xd8 \xcd\n#1\x837SZ\x04\x12\x8a\xe9\x04\x15\x91\xcc~\x1a9\x8f\x17\x89\x95\xe04\xb1n,R \xc64)\xc0y\xd2>L-m\x16\x16 \x04\xaa\x0b\xda\n_A\xe6\x94[\x83Q\xf0\xa48\xa1\xa0\x0f\xd2V\x1eP<\xa3\xf3\x04I<%\x9d\xe1\x13\xab\x10\x9f\x05\xda \x7f\xd3<\x0b>\xd6j\xa7\x13\x9fF\xfe,\x889\x82z\xba\xe4\xae\xe0\x1b\xbd\x05\x06f\xf5D\x0f\xec\x82\xce\xbb\x94%\x94\xd2\x0b]\xe1\xd4J\xaf\xc7\xa7 \xb4.1\x89\xbe\xa0\xa7\xda\x96\xe2\xc2\xbc\xf5\x8b:\xb7\x8b\xcaO\xd0\xbe\xda\xb8*\xea\x8dz\xce\xa6\xfc\x84\xb3\xd9\xe0\xffT\xff\xa7z2\x9bm\x14\x1b\x8f\xde\x9bT\xdd\xae6\x1d\x0c\x06\x8f}_\x1bg\xfc\xf4\x8c\xc9\x0d^m4gl\xa3\x91\x8cm4bc.\xc5%\x9f\xb1\x8db\xa3\x14\x85\"\xa3\x1b\xbc\x9a\xf1i\xd1\x08\xb9!\xe4\xc6\xbc,\xa6\xecL\x943&Um\xa3\xef\x1d\xf47o\x98\x82\xefj\xb7\xa7\x18\x1e\x1dnf\x0b\x93\x9a\xfe\\\xa0\x9a\x14n'\x9b3r\x1e\x9c\x91\xdbyIk\xf2=\x90&\x0b\x8e\xe6\xe4\xacFs0\xde\xc0\xb1!\xdaH\xb5\x03\xebz\xad\x08\xc4\xcd\x9c\x91+:\x8f\xedg\xd4\xfe\xd9\xdb\xc9\x82\xce\x14\xd6t\x10\xd4\xeb\xb5\xaa4g\xf1x\xd5I\x89\xaf\xba5\\Vi\xb5\\\xf6^jl\xbc\xc2\xea\xb2\xfc\xfd\xd3\xbehM{u\x07\xc6\xad\x8ek\xba(\xd1q\x1d\x98\xcf7\x94y}\xb5e\xf6\xed\x11\xadX]\xd8\xfb\x8cz\x0e\xd6\x19l\xd4\xe1\x19m&\xc3&\xa7E(\xb7\xe4\x96={\xa4.D[\x8fX\x96\xa1'5e80\xe2f\x8f\x9e\xb9w\xcf\x14\xbf\xf1\xaa\xa6\xa1}cQ\x82}\xf6\xe3\xb7\n\x85\xde\xd6Q\xe2V\xc5\x81\xdf\x862\xee\xe3z\x8c\x8fk:\xd5\xd3t\xf5\xcav\xbd,\xeb\xfd\xaax\xac\xae\xea\xd3\xd2\xdf>N\xeb0\xbf'a\xe4}\x1d\x04>H\x03\xb5DY\x06*\xe7\xbd\x82\x1a\x05y\x861\xf9RG^{\xa4 \x0c9\xa1\xd7\xe3\x9a2{\xbe5\x8a\x85\xf0\xa73\x98\x13x\xa6\x02\x08\xffp\xe7av\\Gv\xca\xc0c\xfcQ \xc5\x95@\x98\xa6\x91\xb9\xe7\x8c`\xe2]\x92\xf90:\xc1\x90HW+T\x1dh\xbeF\xb6\x82\xd7\xd0NE\xc1X<\xd6\x1a}\x81 7\x8f<\x8a\xfc\xb2\xea\x1e\x8aN}b\xd1\xc3K\xd7M \xd3Z\"\x987\x8b\xb7\xac\xc5\xc1\x90\x91\x02N>d\xac\x8e\xeb(\xa4\x97\xe7\xe6\xe3\x98H\xb6\xb7\xb8t]B\xff\xb4\xd1\xc8\xdb!j\x1a\x93\xd1\xa3p\xb9\xba\xbb\x9a\xac\xef(O\xa7\x93v\x86\xf1*I?\x81\x1a\xfaK\xa1\x10\xdc\xeb*\xa28M\xc3\x9d\x07$\x84o\x02\xb1.\xd7\x8d\x84y\x0d\x13\x06!\x98\xb15\xa8\xf1\xeb\xa7\xf0:\xa6H\xc7~#E!\xc9vM\xc8\x1b\xb71\xe6e(\x0cH\xa2\xf3\xdb\x0e\x1e\xa35\x01\x98\xf0\xa4 I\xd2I\xd0\x18\xa8#M\x03\x9f\x04\xda\xdf'\xb3\xd4\x9c$\x1d\xcb\xccP\xb4\x99\xb8\xbd(\x11\x8eg\xf4\xb1\xb6\xe2\xee\xbb\xc4\x10\xf6\xf2\x19\xdeX\xc1{\xb6\xfb\xba\x1a0D\xad\x1c\x03?v\xed\x05\x19\xa5\xbb\xc7\xa5\xd6x\x0f \x19\xfe\x7f@mC\xd6 ;\xf5\xbd[\xd0y\x89*l\x87\x1f\xab\xd3\xa8 \xf2Q\x97\x10ub\xeaF\x85]\x15\xd7i\xd7\xe80\x87\x96\xdb\xadx\x8c\x8f\x1b\x92\xf7G\xd8\x8f\xc6\x8bI\x1d!\x08$\xa7\xc3\xa0f \xa9\xf24\xc3\x97\xa9\xbaV\x02\x85\x8ek\xfa\"\xb0\xeaP\xe4!p:1\x91Gi\x15\xd2\x06T\xad!\x0e\xa0\x1e\x8e\x08Q.h\x95'\x85\x96\xe2\xb9\xac\xdfF\x9e\xb3\xbd\xd5:\x9b.*\xfa\xbb\xcd\x0b8\xab\xb4\xfa\xed\xac\x82\x18\xb2\x10i\x02,\\\xb9\xa8 HR\x9fW\x1b5\xd6\x97\xcd\xdbZ\x95\xe4\xf5 \xaeBX5\x0b\x0b_T\xb3\x95VS\x9bk\xf3\x94\xa2R\xfd\xab\x93\x18\x95YV:\xd3T\xce\xae\x96\xcb+^\xcd\xc4\x95\xf6'\xb7\xad\xa9J\xe1o=\xde)\xc4\xe3\xa3\xd3\x81,\xaaS\xf6L,\xaa\x06\xdf\x96t:(\xaa\xe9\x99\x90\xc0\x04\xea\x9b\xa6-zsrR\xb3\x86\xcc\xe9T\xfb\x91B\x95\xa9\xfd\xa5\xdf\x82\xa8\xca[\xe5\x93\xb9{\xf4\xac\x95N\x01\xe1\x183\xb8\xaf\xd2!\x99\xd1\xfb#r\xa6\xfe\xbb\xa0CrJ\x87\xe4\x86\xd6\xe4RWn\x9c_\x86=\x8f\xbf\x8cot\xda\xe8\xa1\x0e_\xb1\xdd\xa3\xf4\xc6\xf5\xb6\\\xa2\x19=\xd9\\`\xa2j\xcdu\xadiG\xad3z\xb29\xc5D]\x94}y\x96\xa1\x93M\xf3\x1b\xcc.\x8d\xdd\xb5w\xf7\xf9Bo\xc2\x00\xdec|Io\xc8\x0d\xfd2\x0e\xdcGn\xc0wDO\x13\x04\x1c\x97\x94\xd22\xcb67/\xa8\x8e\xb81\xa3'\x98\xa8\xd2\xb9*=\xa5:|\xc9\x99*\x0d;R\xa8\xfc\xde\x9e\x1bZ0uI\xd1\x0d\xbd\xc4\x81\xcf\xc3\xea\x86~Y\x95\xf4\xbe\xe2if\xcb%\xfc=3\xc1\xea4\xd6\xcd\x00\xcd\xce\x8c\xd7\x81^\x85U\xa9@h*\x0c\xa1\xc20\xaa0>\xad\xe8m1m\xf8\xa5\x0d\x04\xfe\x9c5\xea\xcei\x121\xc2\xda\xb3\x99z\x97\xd7\xc4a\xf0;\x85Ty\xb9\"\xbf7\xb47\"\xafk*\x14\xef\xa6\xb0\xe3\xac\x0c\xddT=\x0d\x7f\x9d\x8ar\xb7\xb7\x87\xeaP(\xd1\xeb\x9a0\xac\xdax]\x07\xdbz\x15\x1f1\xafk<\x0e\xbb\x81\x882\x10\x89\xdc\x1d\xe1\xafk\xc3\xad]\xab\x96|\x900~\x82F{\xd95\x84Q~\x1d\xba\xf3\xf4\xfb\x98\x8c\xb6\x1ef\xd7\xfa\xb3+\xf5Y\xc4u\x9a\x86\xaf\xf4\xfbsz\x05Q,L\xe9y\xf7m\xe9|r\x0e\xdf\xe1\xfc<\xa2*xe\x0d\xecG\xc3m\xe8\xd3(+\xa75z]\xab\xf9G\xd2\x8a\xc8Fjo]%2W\xe5\x01\x9b\xae\xc0\x14\xc96\xb7v\xf2\xe4\xa3\xd1pk7\xa9\xf3\xb0\xab\xce\xb7\xda\xde\xc9\xbfQ\xe1a\xbe\xa8QM\x16\xf4uMJL\xea\x1a-\xf0\xaa\xbd\xcc\xff\x1d\\\xe1'\xe8\x9c\x9eV\xe4\n(8\xb9\xa6\xe7\x83\x00\x97II\xcf\x0716\x93\xab\x1e\xa5\xd7\x99\xc2\x93\xeb\x98\x0c{\xffg\xedSg\xed\xfcz\xa8\xd7,\x97\xbd\nB\xc5Pm\x81\xa5J\xb6!R\xad%6\xc0\xa1ks\x9f \x1e14\x14:$\xe6}c\x9e_\xab\x03\xa5\x998s\xfd\x1aU8\xef\xf5\xb4\x03u!\x99\x1d\xd5[QsM\xfe{=\x85\xdfk+h\x87\xfb\x15Jf5\x98\x99\x07\xb3\xef\xc95v9\xa3\xca,;\xab\xd0\xb5\x1a\xfa\x15-\x07@>\x88\x973\x9d\xd3r\xc0\xaa\x99z}N\xaf\\J\x82\xf0D\xbc\x9e\xa0\xeb\xe4\x14\xa4W\xe4::\x03\xb5\xc1\xe8\x05\xaf\xd09\xb9\xd6\x16\xa7\x96\x10\xe3\x1c\x9dStE\x931/\x973\x7f4^}\xcf\xd1\x88\xce\xe9yr:\x92\x05\xbd\x0e3l\x98>I\xed\xc7c\xa7\xbc\xc0\xa4\xa4n\xde0\xe9I\x9d\x07\xd5X5S\x95z\xe7\x03v\xdd\xb0j\x96e\xf5\xe32\xcb\xd0\x82\x96\xa4\xa45\xa9\xe9B\xf5wR\xa1kRc2\xd7O%&\x8b,\x9bg\x19R7\xd3\xf3\xe0\x88^.\xcf\x83\x03Z\x9d|\x802\xbeX\x1f\xc3\xf0B\xc0\xa3z\xe5\x8ekp\xfa\xb3\x1f\x04\xc76\x94\xeb\xfaj\xd1\xd0\x15\xbd2QK\x00\xf5\x11\x06?\x0bX%\xa4{$\xb6}L\xce\x8d/\xdd\x93\xb2\x84\xda5\xc2\xa4~\\N\xd0\xf9\xa0\x98\xcdt\x03W\xaa\x9a\x06\x01\xd2# \xaeC\x9c\xa3+\xd5\xfc\x8b\x8ew$j\x03\xc2)_\xd1\xc3#8f\xcf\xe9\xf5X\xad\x9e\xdf$c\xacN\xbd\xf3\xe0\x1c\xbf\xd2\xb1\x9c\x9c\xd5\xf99)\xd9I\x93\x9f\x0f\xea\xa9\x14e\xf9\x9a\x9d4\xa4\x11sW\xf0A\xccW:\x98W\xa7\x9c\x0b@\xa6\xf6\xbf \xa4A\xae\xe9p|\xfd\xe8\xca\xfae]onb\x85\xf2\x87\xd7G\xd8FH \xba\xa2\xe7\x03\xd5\xbd\x02E\xf4\xee\x83\x98\xd3\xf3A#\xe6+u\\\xf6.*rZ\xd1\x0b\x1f\x8e\xc0\x9e\x12$=\xe0\xae}\x92Qw\xb8\xbdi\x1dn\xdb{\xd9\x9b,\xe35\xba&)9\x86\xe3\xed\x0d\xbe\xbd2X\x0c,\xdf\x0b\xd5B\x1c\x8e\xe9\x85n\xfb\x98\x86\xe7\xa3U\xe2\xbd\x8e\xdd^\xaf\xe8q\xa2\x11\xbf\xa2\xc7\xab\x0ex\xbe\x98\xbc@W8\x7f\xe1&x\xb5\xfa_#\xff\xd6\xc6\xfb\xb5\xd0\xbah\xae\x99\x9e\x00\xd8j\xf6\x7f\xd7\xd8\x99{3\xf2\xb4\xa6\x8d\xb7\x1e\x85\xb5\x08\x80\xdf\xc4}\x92\xe8\x97\xe9\xcch\xba\x80Hv\x1aMf\x192v\xe6\x89\x01Q3QW\xa3\xaf\xf5\xe4S\xbd\xb9\x99#kg\xccp\x0e\x8f]\xc2\xd52\xcb\xae\xca04&\x91V\x85~`\x01\xa8M\xdc\x19}^;;w'9p\xf6\xc7\xcb\xe5\xef6\xac\xb8\xbf\xef\x9f\xa5\x92C\x87\x80,F@\x08\xd9\xbe\xbb\x97AX\x946C\x00\xd2\xba\xdd\xd1V\xc6\xf0r\xf9w\xbd\\\xa2\xbf\xc1\xc7\xe3\xab@\xfb\x0f\xa2\xa0(fX`\xa9\x00cQ\xd4\xa0\xbd\xd4n\x84\xaa\xa2B\x9a}\xc5\xfb?\xad\xed\xe0\xf6\x1fj\xc2\xb8\xf2\x0f\x8eMnM2\x15\xe8\x0fA\xc4\xe0\xd8\x80\x0cD<8-\x88\xf2nY\xb7g\xbd:i\xfe\x0c\x7f`\xea\xec\x1a\xda\x03\xb6K\xe4\x9ee\xf21\xad&_mF\xd3\x1c\xb5\xe3\xfb{\\j\xa8\xcb\xd6\x8b'.\xd2\x89\x0eA8\xee\xf80\x1a0\xa4\xfe\x90\xdd\xab\xf1\x98V\xa4+\x1b\x07`\x8c\x9d\x8eK\x15>NB\xe5\x87J\x0d\xd1\x02F\x96!\x91\xe65\x17>\xf5+6\xf1\xe0\xc3\xf9\xf6d(\xbf\xb7\x07\x87\x9b\xfb\n\x10\xd7\x88\xa5\xe0\xd9\xe7|e\xa9\xe4=N\x03k@\xa0\x03\xe2\x85\x8a\x9c$2W\xd3.\x08U9\x98\xb0v\xa6\xf4\x0b\x81\x1a2\xf7\x1b\x8fH\x0e\xb7\x7f\"\xe8?\xb9V\x944D\x12F\x84*\x8c\x130\x91\x96\xad\x92\x0f\x86#:u\xe5\x16\xa66\xa0\x10\xa5T\x0c\xee\xdd\xd3o\xb5nS\x9b\xa6\xb4\xf2\xff\x9b\xf9\xb4\xac\x8bN\x85:9\x8c\xb0\xbb7\x1c\xc3\x0e4!I\x14\x8c\xbb\xdaQ\xc3\xd3\x1b2\x08ldJ&\xe6\xaf\x16\x0c\x16\x8az\x18\x19\xb9\xec:\xf84A\xeb\xb2\xcf\xca\xb2\x0b\x05II\x80\x99\x17f\xe4\x92\x9e\xf2(\xf5\x12l\xe1(6\xe4K\xfe\x85I\xda\x90k\xfd9\x98\xf36\xf4e\xe1\x17\xa37\x840+6N\xac\x02\xd8\x90\xbcr\x15\xf4J\xb98\xf4NG\xa7w\xd4^\xcer\x05h\x85\xf3A\xf8\xcb\xff0b\xf9\xb3\x02V\xf5\xbe\x8e\xc2{\xac\xe6\xbd\xa8\xf1\xad{4Z#u\x0e\x1eO\x1b!\xc7\x0dm\x10\x04\x82\x95\xac^\x94\x0d$\xaa\x02\xeb\x9c\xc8;|\x186\x97iGQsO#\xbe\xedQ\xd8\x0e^arg\x1b\xfe\xbb\xad\xe4;\xbcZ!\x81\xc9\x08\xb0\xc4\xceAs\x96\xc2V\x1c;w\x10WD\xf4\x96\xa5B\xa7\xf0-Ni\x02\x95\x0e\xb4qd\xf8\xb8D\x0cOF\xf9\xd0\x9f\xa7\xfa#P\x84\xba-C)-\xdd7\xa3\xd1\xd8\xc4$\x98\xfb\xb2\x1dK\x89\xb6`\x12\x8c\xfe& \xa6\xa2\xcdi\xb91\xcc\x1bz\x10 \x8f\xf78\xf0v6\x0d}~w\x0dU\xe5\xed\xddUv\xf2\x86\xbe\x0b\xaa\xa8qh\x9a\xc60\xa4]v\xca\x94\x84i\x1f\xee\x11A\xfa}\xef\xd8jP\xd9\xa5xp\xc41\xe54\xc8\x81\xa6\xbe\x92$\xd8\x0e\xbe\xc1\"\xffM I\x04\x0e\xc2\xcb~\xb3\xc5\xe7?\xd6\"\x1c\xb8\x9a=\x91q\x00\x1egT\xe3\x0cPe+\x0b\xc7\x966kO\x93\x85\xfb\xa8?\x1d'\xd7D\x0c\xc2\xe8\x04\xa4\xe6\xda\xec|\xae\xc9 \x94U\x98\xb4\x13h\xd9\xcf\x14N \xac\x98)\x12\x1c\xdd\x8e\x17\x83.=7cL,A\x88Z\xd0\xab\n\xadeuBU\x13\xb9.hC\x04=Wl\x1e&\xc2\x18[\xbf\x87\xb3G\x8dP\xea\xd3\x06(\x18\xad\xc6\xd5\x18\x077Ez\x7f;\xbc8.G\xc3\xad\x9d(\xc4 \x10\xc6Wv\xa5*\xc3\x1a:\x92\x98\xe0\x91\x0bQ\xfb\xab\xcbN\xa69\xfec\xb7n\xdd\xb8\xc0\xed2\xb4\x83/i\xd0S1\xb0\xf1\x88\xc8e\x05\x981\xd1\xb7l\x1bd\x80g\x19\xbchGb\x1f\xeda\xf2\xda\xa4\xa5]\xcb\xbev\xa4\xdb[\xc7\xb8\x1a\xfdL\x8e\x0c\\\xea\xe8\x94\xc0\xa4\xb1J\x98\x80\x89 \xc1Pudvq\x1c\xa0evM\xf97x^\xd2Bh\xdb\xd9\xc4.\xf9q\x84 y\xb8\x96\xf6\\\xb3\x84\xe7\x9b[\xf6\xed\x8fmY\x97\x92\xcet\x9a\x0e5\x19\xc1\xc3$\xf0p\xf7g\x1e\x0fZ3\x18\xaa\x03Y\xb6\xf8\xfb\xd64Z\xa9\xdf \xa7\xc2D\xf1\xd0\x8a\xf9\xa4 P\x90\xc3-\xa1Lo I\x01\xe5\xce\x00\x1d\xf3\x13P\xd1\xebk\xc7PGQ{.QI8\x9e\x0c\xf3\xe1\xb23\xaa\xc8\xe0xZ\x94\xd3EY4Lg\xb3\x9d=\xe5M=YS\x0e\x8d\xe5\xe1\xcd\x1dN6\x0f$`\x0b\xed\x8f,\xeb\x05\x17\xc3\xdb\x90&9\xb3H'\x10\xb1t\xb1t\x88\x0dy\xa1\xf5\xd2\xd0\x06\xdb\x8bq9\xb6\x06\xf2e\x14\xf36\xb8\xbdN\xf1mMK\xb3TV\xd8\xb2\xa0\xd3(\x0d\x9amo\xa1E.\x8b\x81\x81\xbdv\xdeW\xb7\x93\xc5@|\xa9\x99\xbc\xd4S\xcf8\xc6\xb7#P\xb3\xe8\x80th\xd1\x8a\xf0\x02\xf6\xd6%Y`\xb5NI$\x81\n\xa6\x93f\xd8\xf4\x97\xad\x05-\x03;\xef,[t5\x90\x16B\x03\xdc\x81I\xa1hj\xda\x0f\xdf\xa5\x85\xd4\xc9Z\x16t\xa1].\xf4J\xd4t4\xf4s,5\x1b\xe4\xe3\xfe+\xfag\x01\xeb\xe1]ck\xfbHK/\xe1\xaaiial\x12*\xd6\xe0ov[\x07\x06\x18\xe1]\xae\xa4\x81}\xda\xad[zgW\xa9\x1a\xd4\x1f\x05\xf1)KZ\xaf\xcc\xbe\x15\xf1V]sf\xb8\x10K\xf6b\xae\xfd\xf7\xe2-\x8b}S\xf6V%\xa9T,\"G\x82p\xef[\x10b\x08n\xdd\xb2\xd6\x13?Gp9puv(\xc9(\xc8;33\xa2\xab\xe9J\xdc0]V\xaej\xcf@K\xbd:Z\n?x\xf0m\xba\xfb\x0dr\xfb\xef\xdc7\xec-\x11n\x7f\x13\xc4hoH\xe0\xe6\x87s\x88\x04g\xc1}\xa9\x99\x1e\x81\xedm\n\xeeF\xc9]\x8a\xf9Y\xb9eub\x83;\xb2\xbb\x01\xd5\xbd\xd2\x02\x01rn,M\x9cl\xee\x8d\x114\x12\x89o!\x00\x91\x1a1#\xf0x\xcenh\xa5\x1f]\x96=\x88Q\x04g\x1f\xd1\xf2\xb2\xf8\xb2\xae\x91\x80\xd9$ \x1eC\xc2\xe8\x7fAN\x03\xca\xe2@\xee8GU\x8a\x0dU\xb4`Uk1\xaav\xe0\xf7*\xb5\x1e\xc6\xa4;6Lw\xf2\xd4VL\x9cV\xf2T\xd3\x9aK\x9eZ\xb5l\xf2c\x96(\xc9\xd6\xd0\x8a\xd0_\xdd\x91<\xb5I\x93\xa7V\x9d\xc9S\x9b\xee\xe4\xa9)#\x1e'Om\xd6&Om\xc2\xe4\xa9A\nJ\x17\xe6\x8fTfG3\xfd\x97T\xb0\xa9!\xd7P\x185\xee\x83CdE\xe95\xf6\xd5tK_ Y\x97r\x95a\xc0s\xf0\xa2\n\x92\x1e\xb7\x12\xfa3\\\xd3]k\xca\x19\xc7O\xdd\xa8\x98%\x99\x7f\x956.\x90:\xf0\x04\xe1.\xd0m\xcd\xf2\x9a>$bI\x1f\x84\xc2]\xe9\x8a\xa3\xd0\xf8\xc2\xb6\x88\x98\xda\x1b\xa3-R\x91\x86<\\\x8adG\x08\x85\xd2\x8d{J0\x89\xdb\x04\x95\xd3\xa4\xb9mhN5\x06\xdfN\xe1\xdb\xa0\xd9\xe9]\x8d-\x92\xc6\xf6]ca\x13\x8b5MXK\x02\x05\xe3Tr\xca\x82\x14L.O\xa8\x97\x8cB\xef\\\x01l4\x8c\xe5*\x85*\xdc\x8f\xcbJ\xa8\x98\x84\xed\x9eC\xe1N\\x\x02\x85{D\x06\xdc\x94}7S\xef\xb6\xb6\xd6\x88eF\xdbCsmc\x13\x96\xdbY\x84r\x1a\xd4(\x18\xd5\x9d bV8&\xdbIjy\xe86\xf3W\x8bjk\xd0? \x8cH\xd2\xa8f\x13\x9e4\x0cp\xf6\xc4i\xfb\xc2o\xf7\x8c\xc2\xeb\x9b\x9f?K?\x87\x19\xed8\xde\xc5\xa1\xfb\xc4?\xe6\x87G\x86\x8ew\xb6\x1e\xca~o\xa3kq\x9eF\xe06\xe4\xf9\x99m\x18\x86\xcc/\xe6\x1a\x8c\xd0h\xce\x06q\xc1*\x84\xdd+7|\xc7\x80\x983?vR\xd2\xe1\x11\x83\xae-\x9f\xe2}3C\xee\xc1\x0e(\xf8z\xadOB\xf4\xd6{1\xe8\xf1\xa4.\xf8Q'\xe6\x1e\xe5\x06\xa7~\xf8om\xd4_\xc3E\xb5\xdd\x1a\xa2\xe2\xd0}\xc13\"\x81\xd1\xbe+\x0c\xf4\xad\x8e!i;\x1b\xb8\xea\xb1K\x81\xe7i\xd6\x95\x87\xbe\x10\x81\x1d\xc1\xdb\x84ah\xb7\xe1|\xd2\xba\x9c\" \x8f\x7f\x95e\xd5c\xedqG\x03\x1cx\xf7\xcd\xa6IgX\x9bq\xf5\xa8Y\xe7:\xd1`\x82\xe4\xe3f\xb9\x1c\x82\xd7\x8as\x83h\xd5j\xbe\xdb\xbd\xa2\xf9~\xf7\n?\xb7_\xcd\xdc\x9a\xc7m#$?\xf6\x10\xe6M\xe8\x9f\xd3\x82\xb1\x01#j\x1e\xd3\xea?\xe1\x91\xd2<\xee\xfa`\x1d\xb86G\x98\xa8\x99t\xb6vG\x90\xa1&\xb4\x08x\x9d,w\x02\xbe1XmU6\x18b\x07|C>\xf6 \xa0\xbdV\x91o\xc3Dpm9P\xd3\x19\x1f\xd4\xc6\xf1x\xcc\xe9\xe7\x1aq\"H\x8d\xc7\x0cT\xcd\xf8\xb6\x01m\xd3\x9f\x0c\xb2euh\xba\xb0\x8e\xea8\xb2\xe9_Z\x8eKCctT\xd2*\xf0'.\x13\x7f\xe22\x916\xb2k\xeb\xa6m\x15_j<\xa7\x02ii\x04\xc6\xb7\xf17I\x82\xb6\x03\xc35\x1e0y\xcat\xe2\x8fgq\xab\xab\x95j\xc0\xc8\x0f\"\xcb\xbc\x12\x8f\xd39\x8ct\xf4\x9c\xc4\xe6fj2\xce\x8d\xf5\xc8\xa6\x90\x85\xe6\x8b@\x15\x99\x922\x90nU\xd4d\x88\xaf\xe8B$w\x88\xc6\xcev\xd2x2\x997)\x19\xad\x08jh\xc9!\x9b(n\xc71f+'A\x92\xde\x14XjNWj\xd9\xb4\x8b\xd8+1\x99r\x08\xbcH\xfeY#\xc5k\x12\xee\x91\xe6yi\xb4[\xfa\xd6d\xe5vF\x1a\x17\x0c~\xec\xd8\x1cx\x15Y_&\x99\xba] o\xbb\\\x81A\xcfK\x83\xf1\x953]a-]\xbe;\xaf}H\x88,\x03\xab)y\xf3\xc1G\xf9t\xbf\xa3]\xf0\xb7\xe9\xc0tD\xa0\x87P\xc6f^\xf8/>&6F\xea\x9ai\xcfb\xa32\xa8\xb2\xac\x07[\xd1)P\x88P\xbc\xc5\xf6\xff\x8f\xbb\xbf[o\x1bG\x16F\xe1\xc3\xefy\xd6-|'\x14w\xb7B\x84\x90L\xca?q(\xc3Z\xee\xc4\x99\xf6\x9a$\xce\xce\xcf\xcc\x9a%k\xfc\xc2\x12d\xb1C\x01j\x12\xf2\xcfXZg\xef}\xecky\xafl?(\x80$HQ\xb63=\xebd\xf7\xd3\xb1H\x10\xbf\x85B\xa1\xaaP\xa82\x074\xea\x8fvx\xf8J\xfb?\x1c\xecF\x01\xea\xa7\x96\xdb:aq\x12)\xa61\x9c\xee\x0d\xbf\xf0\x11IKg.\xfa~\xd4Fp3M\x1e\xfe\x83y\x12\xf5\xbf4y\xe0f\xe8a&s\x15\x08B\xf8\xeb32\xad\xbd\x00\xbf\x86C\xd5\xf2\x02@\xc4j\x97\xbd\xf4\xfe{\x19\x9bu\xf6Y\x08I\xd2\x12t\xbfT\x05o\xa6 \x03\xb3\x8c\xa1_\xd7\xde\xc3z\x06\xef\xb0\x92\xb0Z\xb9\x0e,\xed\x0e\x04c\xeb,D\xcce'W\xbd9n\x91Y\xab\xc6\xadi\xfc\xc9\x12\xa8r\x0b\x03\xde\x14\x1f\xa9\x0f\x01\x86 \x07%qup[L\xe9D.\x9f\x89\xbe\xb0]`k\x83\xcc\xb7\x89GQ_\xf3/\x1eC\xeb\xf5\x87\xc4\x93\x98b\x86Ey\xffwKgjq\xe9\xe3\xa9'W+O\x92\x96\xd7\xf2$a\x83\xfa\x0c\xd5oH\xe4W\x90\x81\xe6i+\x1d= \xd2\x02iKvg4;\x912\x8d\xaf\x96\x92y\xee\x84J\xda\x81\xce\xa4BH\x17!\x84[\xb2t\xec\xd3\xcf\xf7\"\xa8\xb5\x8f\xaa\xc1mxqMW\xad\x14X=\x01\x96\x83\x07\xb34\xa2V\xb06\xfe?\xd0\xda\xc4\x16\xa9\x83\xb9I\xbc50N\x1e\x83qR\xc2X&\x95`\xbf6\xc8\xcb\xa3g(U\xa2\xc8_k+}\xf7\x88\xa6\xd7\x00\xcd\xccX\xd3[\x16&\xc5\xa7\xe1\xeeh`\xbf\x00\x94\x0d\x08\x1er\x99/\x92\x0c\x7fg:\xf2BA\x8a]\xd7Oq!i0\\\x15 d]:\xb0\x0d\x1f\x7f\xafp\x06\xbd\xe7u\xb4gw\xb4g:\xaah\xfb/\x89'\xeb\xf6\xc1\xbd (#~\xe4\x90\xd1\xc7\xcd\xeboI\xa9?36@\x15k\x08\xcdjl\x90\x86\x92\x1a\xa25\xae\xd4\xb1\xd4\xb1\x157\xe7\xb5\xa1\x12pKjC\xaa\xff!\xc9\xef\x80\xc3O%\xc83\x90P\xaeM\xb3\xd7x.\xebV\x1be|\n\xdd\xa4$\x7f\x12\x1e0C\x85ko\xe3W\x1b\x9b\xadc\xbd\xc6\xd7\xd5j\xec\x18\x17\x1e\xe4\xde5\xb9wU\xa3\xf7\xcfh\x14<\xe6\xea\x86\xc0\x92\xb34\xe2,[\xfdm\xc3f379\xabF\xbf\x89\xa7\xde%\xf3\x8c\xa5\x11\x878>\xb8\x0c\xf3\xc3+a~\x8cS/Nt\xec\x80\xf2\xd6\x8a\xe2\xef\xacw\x9d \xdcu\xa5\xf7\xfab\x92HO\x92\xc4\xd3\x8d\x0eU#\xc4\xf5\xff\xe3\xcb\xf9\xc7\xaeV8\xc5\xd3{\xcfu}\x89\xfc\x17\xa3!(\x07L\x1fF/T\xbf\x82\xbe<\xe2\xf9\x1d\x15\xe9\xfb\xc5\xee:\x94\x10c?\xd5\xa7 \xa9\xda\xa8\xe6\xdaS\x84H\xe79\xe7\xfa\x86{)\x18S\xb4D\x0dm_+\xac\xbde^\x8a\xf0%\x83\xb3\x89\xf5\xda\n+Z\x8d\x03\xc4\xaaQ;\x8b8@\x1a6\x10\x06R\x07\xf0i\xb7OT\xeeV\x8b\x97\xc1u$n\x85jZ>\x12\x96\xe0\xf7\x1b1\xd6q\xfd\xd2\xf6\x9e\xed3\xef\xaf\xc2{}\x88\x99\xe5\xc0 /\xb4\xe9J/.\\\xe9\xe1\x0f\xf6\n\x01\xaf\xea\xaf\xb57v\x1b\xe7\xcb\xe3\xb3\x9f\x8a\x1b\x06?e\xfd\x9f\x8a\x18\x9d\x0d{\xbf\xa2%\xef\x13m\xa0\xfdg\x88\xd4\x89\x10\xd6\x8dz\x08\xcf\x13O!\xf2[\xd2\xc4w\x98\xe1\xf5~\xc0% H\x00\xbf&\xf8/ \xfe[B\x1eNo\x14E\x8a\x86\xbfq|\xc2\xf1\x1b\x8e\xbf\xe0s\xfc\x96W\xcc\xce\x84bM>p\xb4\xc6\x9f\xf0g\xfcg\x893\x89\xe7 ~0\xbcQ\xd4\n\xd7\xa3u\xff/ \xf1~M\xc8\xc34\xe6\x13\x90G~\xb9\xffUd\xf2\xccD\x04\x8c\xber|\xb5\xe4\x93\x046\xbe(\xc07,\xcd\x14iu\xc3\x83n\xb8\xdb\x0d]\xac\xa9\x19K?\xd1\xf1wz\xcd>\xd29\x8b\\\xcdqL\xc4\xdc]\xa3\xee\x96\xba\xebFr\xee\x92O\xd84\xe6lR\xeea\x97\x97\x9fOO\xde|\xbd|{\xfa\x97\xaf\xe7\xe7\xef\xbf\\\xfe\xe9\xfd\xf9/'\xef/\x7f=?\xff\xf3\xe5e\xf5\"\x87$\x8f\xe7\xee\x83ye\x9c\xbd\x8d3\xc5\xfaL`\x1b\xcf\x96\x8b\x85He\xa6e1S_\xd0/\xafk\xc8n\xcc\x7fcc\xe91\xd4\xbfM*tI\x87\xc8\x15\xfc\x8d\x98\xcfc 5(z\x0bW\x0d\x8c\x13\xb0\x83=b\x0ct\xf3\xfb!\x96\xa1ny+j\xbd\xc6\xdf\x9f\xac;\x0f\xa7\xcb1\xab\x14\xb5\x9f=\xe1=\xac\xf1\xaf ~\x107,M\xe3 \xfbU\x88\xef_J\x8b\xce<\xd96\xd3a2w\x9d\xa5uQ\xa9I\x1f\xcf\xd8d\x99\x98\xf0\xdc:\xcd\x8c\xa2\x8c\xf4\xf1\x99M\xa3\xadQ@\xd4\xc4\xdb3\xfe\xcb=\x0c$\xb2\x07Z\x15\xe7}K\xfe\x96`i\xaem~\x12\xa9\xa4 \xf9]\xa5\xa8!\xbc=\xff\x00\xd2Nm\xddh\xd0\xb1\xba\xf7\x94\xb0\xc2\xe8\xe6_Yio\xba\xa9\x8b\xe8\x17q\xa9\xb5\x8d\xc1\x16\x1bM\xc3\xc0\xd45\x15\x87\x87\xa8.\xf9\xf7\x0e\x0e\xf19h\xfa\xbb\xdf\xd9\xbd\xb9\xbeQ\xa8\xf2*s.\x1b\xe7\\v\xa7\xc92\x9b}\xb9\xe7\xe3M\xc6~\xebM\xad\xf0\xb0\xf4D\xd3\xe4\xd0U{\xc3\xa9\xec%\xd6.\x02Nm\xcd\xf6Q\xc6W\xabs\x12\xcf\xe2\x02\x7f*\xf8,\x89[\x81b\x04\xb1\xdcd\xff\xfe\xd9\nCS\xa1\xe1\x05\x8b\xa3\xd8\x13\xd9\x84&-\x90-k\x95\xef\x95u\xb7Z\xacI\x9ej\xb7\xbd\x9ad\x90\xf7\xc1t\xa4\x15V\xf8\xc7\xc6J\xcc>Za-\x95\x88\x14\x98\xfe\x1b;\x90+\xa0\x1b\x13Mp2\xc5%X\x1f+k\xa2\x8a\x0b\x068\x9a\xc5\xc7\x7f\x80\xb7\xafvGO\xd4\x97\xe5\x95L\x19;\xe3R4\x0b\x99ZAh \xcc\x9b\xa7\xaf\\\xa6\xabU\xb1\xc2\x1a\xd7`\xfd\xca\xdeae\xf2us\xad\x10\xa7\xd0U\xb3\x1b\x93b7^\xe3:Z\xb9\xcb\x8c9\x8a\xc1\x1cK\xb7\x0f\xc7rj\xbb#\xdc\xeb\xf5\x0e\xd0\x13\xd9\xffm\xe7\xe5K\xe7\xdf\x93x\x0cn\x15\xb5\xeb\xc6\x9b\xa0\x1b\xbe\xee\x86\xff\xe6\xbctr\x02\x99*\xb9d\xb2\x84z\xba\xf3\x98w\x7f\xcb\xfe\xcdy\xa9r\xbc\x11\x8b\xfb4\xbe\x9eI\xc7\x1b#\xe7\x1d\x1d\xb3+!\xbec\xe7\x8c\x8f\xbb\x0e\xe5\x13'\x96\x99C\xa7\xd38\x89\xd5\x8cwM\xb1\xaf\xb38s2\xb1L\xc7\xcc\x19\x8b s\xe2\xcc1\xbd\x988\x8aKH\xc1\x83\xe3\x87\xb3\xafy\xb23\x15KU\x1d\xb8vTU\xbc?{s\xfa\xf1\xcb\xa93\x8d\x13\x96{|T\xa2\xb93\x89S`\xc5\xef\x1d1u\xa4\xd5\x90\x9ad\xd5\x81\x9d\x9b<\xc80\xa6\x18\x0c\xe2\x9a\x18\x13\xed\x88\xc0\xbe\xf2W\xc4\xec\xfa\xc0\xb2\x8c^\x83\xc1\x1fgI.\x84\xeb\xedS\xff,I#\xf3\x99\xa0\x9c\xed`\xc4BC.n=\xd4O\xbcV\xa0xM\xe3\xf2\xa5\xf4q\x08\xe8\x921\xf9U\x1f'yK\x1c \xcc\xd6k\xbc o\xa9T;\x80*^\xad\xaf!\xd8Y\x99\xb7\xb3X\xe3\xaat\x9a\xf7o`5\x93b\xd5\x9d\xc8K\x08\xc3\xb5\xd6\xd1\x1a\x8b\xda\n\x1d\x13+\x0fHg8\xb6;1N\x18M\xf3\xefc\xb4\xc6t\xb3\x8b\xadp\x0dF\xa0\xc5@\xa6\"\x1d\xb3w)\x9d\xb3\xcf\x15\n\xad\x18\xa1\xc2\xb3\xeb\x94\xe8\xa9\xea.X\xaa\x04\"\xe0<'y\xa2\x1a5\x9e\xe5oe\x1f\xf1\xd0\xef\xcc\xc9\x96)s\xe4\x8cJ\xe7^,\xc1\xd5\xa9C\x9d\x85H\xee\xa7q\x92\xa8\x15\xa2]\x9c\x9a\xaa\xb3\xae3\x93r\x91E;;\xd3\xab\xee\x9c\xedh\x86>\xcf\x9f\xb9\x087\x8c\xe4\xfa\xc7\xba\xdb\x04\xa0\xff\xa1\xde\xae\x9bl\x0e\xa6\x8dw\xb4\xa6j\x15\xa0'\xd7\xcbT/\x96\xb5\xedCx\xf2\xdc\xc5f2v\xeeuX\xc1\x1b\xd2\n\xf1\x95\xa6\x0dw\xa4\x13\xe2[\xb2\x8f\xbf\x93\xa0\xdf\xb0\n\x9c:e8&\xdf\xd5\xba\xb0\xb1\x1f?c\x910\xf4\x10\x1c\xb3\xd5*\xec\xed\x1f\xb1Am\xda\xaa\x85\x1cI\xbf\xb3\x0c& \x8be|\xa3\x08\xaat\xae\x98\xbce\x8c;\x01\x10\xf2\xb0\xb7\x8f\x1dU,\xe6\xd7\xceT\x95T\\S\x96\xfb\xdc\x953\xcaU\x1eg\xba\xc8\x145\xe7B:Kn\x10\x81M\\\x14\xdd\x92\xe0\x88\x0d\xc0\xeb\xca4\x11\"\xf5B\xb6\xbb\xc3P\xb4\xafe\xdfs\x1d\xe9\xacBZ\xf1)9\xef\xaa\nz}\xfd\x1bv\x05\x9f\xeb,\xcd\x14\xf6\nm#\xaf\xdf \xf3o\x81G\xbc\xd2\x84vp\xda]\x88L\x9a\x16\xa1\x02\x14y\xd6L\xa1:\x0dn(\x80s\xdblU\xaeNU\xaf\x08\xc37\xab\x95\xaa3\xc0\x0d\x85\xebd\x94\xa3\x87;2\xab\xb0b\xcc\xab\x0f\x04\xc25\xd6\xa9\xeb\xdc\xbbC\x80X\x96>\xf4\xd2\xab\x1e\x94j\xbd\x12\xd3\xaeV$\xb2\x82\xe8\x1b5S'<>>\x0e\xb1 l\x98\x82\xc2\xa9\xe5\x95\x97\x07\xdb\xed\xe0\xe87\x1d\x8c\xac\x8c\xe7:LGDb6\xe4#\"0'\xa9\xd5\xfa\x17KX+]\x0e1\xc2\x86\xc1(\x97\x03,\xd3.\xaf\xf4\x909\x0cF\xa5\x98\xa2\x03\xb1\xe6cX\x88\x85v\x8b\xc7M\x80\xd6a0\"\xbc_\x86\xd7OI\x80E9\xd8\xf4H\xf4s\x95S\xef\xa5\x97\xfa!\xea\x84\x98\x126\x8cG8#\xb1\x1f\xe2\x84\xb0aVm\x90\xb6\xdb\xc1\xf1o\x1e\xc5\x1c\xa1\"1\xd1\x89 \xa6h\xe0\xc1\xc0\x15\xbb\x9b\x8d \xc0Q\x86\"\x9dF\xb1\xaa\x1a\xd2\xe2\xf2F\x91\x05\xc7\xa2\x1a^\x87\xa3]]\x11\x8f\xda\x91\xcd!-~\xab\xcem&Ry\xc6'\xec\xae#\xcbg\xcbA\x08\x84\xfad\xddx\xd2\x91\xddx\x02\x14\xe9\x84\x0cG\xf8\x8d\xfasFB\xfcI\x93\xa6\xcfd\x17\x7f\x04Op\x10m\x9a\xb4\xc2\xd2\xdc\xf7\xadg\xb9\xd9\x95\xe4\x8b\xf7\xa6\xb8k +A\x80\xcb\x83T\xf4Ue*\xa1 \xb5?&8\x90$,w\x92\xa72a\xab\xdf\x1b\x17\xee\xf1\xa5w\xa2\x18\n\xdd\xa8}2j\x04\x9f\x0f\x10\x00\xd4c\x08\xb7\xde\xa3\x92\x16|\xf1N\x10z\xaf\xd6^\xea\xfd\xa3\x12\x08\xae\xd2\xf9v[x\xef\xb0\xd5\xb7\x0e\xb3\x1b\xf9\x87^\x98\x1a\"\xed\xb6n,\xf6\x10R\x90\nL\x84\xc3\xcf\xfd\xdc\xd7\xcf[\x8f#\xfc \xda\xce[\xf8\xd4n{-\xefSmT\xc7\x1c\xadV\xac\xddnQ\x0f\xa1~~Z\xf6\xa9\x00^\xe5\xe2\xc0C\x99\x9e\xcf\xd4\xa7\xee\xc2\x18\xfd\x80\x95\x84\xb1 \xc86\xda9\"\x1c\xf5\xf9\x06=l:OJ\x06V3I\xf4\x89h\x18\xb6\xdb_\xbd\x13\x84\xdfz\xf9\x8d\\\xf5\xda\xd7c\xb4.&|\x02\xef\x99\xe3\xc2\xad\xc1\x0d\xdc&\xb1A\xbd\xd4\xa0^Z\xa0\xe6\x08\x8f\x15\xe54\xb8:.d\xf4\x02#S\xc0HkB\xbe\xa9Y\xaf\x19i\xe6\x97\xa4:\xa1\xb6\x85(\xee*\xf5\xf6\x83\xda\x1d8\xcb\xa3\x7f\xf5NW\xc8\xf6\xfa\xb5c\xf9}\xb6\xab\xf7\xef_Hf\xef\xf9g\x93\x84\x15&W\xfb\xf6f|6\x9f\xb3\x89\x12u\x8a\xcf\xa1\xfd\xf9\xbd\xb8->\xec\xd9\x1f>*\xc65)\xbe\xed\xda\xdf>\xa5B\xc9O\xf9-}\xeb\xcb\xb7\x8c\xa5\xbf$b\xfc\x1d\x8c\x9cM\xd9^E\xa6\x06\x0e\xec\xcdF,b\x06!\xc0m\x94\xaa\xf0\x14\xb9O\xf5\xd3;6^\xaa\x02\xf6f\xf3~\xb5\xfa\xb8Zy\xc5\xca\xaa\xca\xd4\xa5\xae\xec\x93\x8d\x9f\x0d|\xce\xe7z\xb9wp,k[\xbam\x16\x02\xa4\xb3\xcbqvW=L2\xa8\xf1\xb9@\x0d\x83\x11\xc6\x92FS\x80\xdd\x9a\xef+I>\xaf55\xfd\xdc\xffLdUq_j\x8e>\x13\xbe\xae\xb4\xbe\xa0\xcb\xac\x19J5E\x03\xf0\xed\x9fh\xcc%\xf9\xa5\xf2e\xc9\xff\x1a\xcbY1{U\xa9j\x03\xcd\xabc1\x08l\x10\xbc:\"Fv\xad\x111{D\xf2\xb1\x11\xe52\x7f\x03\xce`\x8eiN\xa86\xf8\xab&\xfe\x9b\x16\x96)4\x97\x92iw\xc2\x12z\xdfO\x88\xcb\x97\xf3+\x96Z\xe4G\xf1\x18\xc9 \xf3\x93(\xc3t\xf3;\xcd\x0d*\x07\xc5S\xa4\x88\x81&J\x94\xa8g\x9c\x90\xac4%|\x88'\xd1\x99\xef\xe3\x1c\xd1#\x8e+D3b\xb8 EQ\x82k\x06\xef\x94$>\xc5\xc5\xbe\x14u\xc25N\x8e\xb3\x81gm\xb8$\xc1\x97\xde\x1b\xcc\x8a[\xb5\x9a`B8b\xef\x0dR\xfb\xc5 \xf6P\xf4A-\x16E\xfc\x92N\x86\x90b\x17\xac:(\xecp\x0c\xe1\x8d\x95\xa5\xf8\xcb\xca\xe4\xcc\xc42\x99\xfc-fI%\x9c\xf9\x16\x96Wm\x89FI\n\xfbQ\xceJ\xe8=\xa9\xdc\x9d\xcc\x13/\x9f\n\xd2\xd0n\xf3\xca\xa6\xdd\x10\xfb\xb7\xbe\xe1\xacV\xd4\xab.\xd1\xdb\x94.\x1aI\x90^\x8b\x9f\xf3\x8e\xd5F\xd4\xb4\x16\xbbt\xb1H\xee!\x1a:.\x94{5l^?\xa1\xf42\xec\xae\xd7\xeb\x1d\xa2\x92\xbf\x11j\xcd\x16o\xb1z\x8b\xbb)\xcb\x98\xfc+Mya',p\xa9b\xb3\xfa[\x14dF\x83\x07\xda%\xe0Nh\x8b\x904_6J\xc6\xd1\x9a?WAD\xc9R\x9fR\xb1\x80\xb0Y\xce\x0dM\xe2 \x95\"\xcd\x8c\x12+\xb9\xcfE\xa9B\x90r\xae\xeeA\xd5\xf5\xbf\x16\xa9Xt\xd4\xca\xc8\xfe\x97\xb3\xd0's]\xe7[\xc6\xca\xfa\xba\xe3\x19\x1b\x7f/^=\xe4H\xe1\xa8\x89U\x15\xcc\xbb\xcegF'\xce\\\xa4\xcc\xa1\x12\xc4\xebB\xba^f\xac\x03\x85;e+n\xae\xfa\xcf\xba\xfad\xfb\x8c\xdf\xd04\xa6\\:\x7f\x89E\x02\xd3\xef\xe2\xcc\x8e\x96f\x05\xda_\xeb\xfbD\xbf/\xe3\x94M\x083X\xf9@\xd3\x94\xdeG\x0c_ \xa1\x16\xa3*\x1a1\xac\x17~\xc4\xb0\xa6'\xb0J\xd3\x98_\xab\x87\xfb\xf9\x15d\xa5\\\x95\x83\xf2\xe7\xd3H\xe2\xc2\xd0\x0f[V\xf8\x11\xc31\xd7'B\x90\x89\x8b +\xaa\x85\x14\xc1Y\xf9\x0bE$\xcef\x14~\xd9\x1d\x1d\xcbH\xe2*\x18\xa3\x18o`E$\xd6\xc5\xe2\xea\x169 \xc7\xfc)\\,\x91\xc95\x07I\xe6\xf8\xe8\xd3\xc9\x97/\x97_\x7f=\xfb\xd2x\x88\xd4\xa0\x06\xb6O\xaess\xd6\xfe\xce\xcbV\xa18\x99\xcbY\xd6\xbdb;\x8b%\xbf\x07\x9d\xebM\xd8\xdd\xeb\x86\n\xa1\xfe}N\xe5,\xa6\x99\xf3r\xa7UT\x13\xa3\x07\xd9n\x97FQ\x98\xb5\xdb\xe5q\x13\xcc %\x1b$?m\xb7\xd3>\xed^'\xe2\x8a&Z\x98\xa2]\xad\x00\xcb\xdf2\x96L\xb5\xcb\x19\x9c\x90^\xb8\xf7j\xefp\xf7`\xef\x15\x1e\x93\x9d\xbf\xdf\xf1Ng\x07/\xc9\xce\xf0\xef\x17w\xbd\xa0sq\xf7\xeat\xb4\x83\x17dgxq\xd7;\xbdX\xee\x06A\xefb\xf9\xee]p\xaa\xfe\x1e\x84\xa3\x9dk<%p\x18:M\xc4m\xe4\x9e\xe7O\x0e\x98a8\x9c\xb1I\xe6\xdc\xc6\x13\x08\x0c$\xd95K3\x13\x15h\xcc\xb2\xcc\xc5.\x17\xb2sE\xb3x\xecF\xeeY\x92\xb0k\x9a\x98\xb2\xc7\xc4 \xee\x0e\x03\xc7SK\x90:\x90I\xeb\xab\xc1\xc8\x0e\xb9\xd8\x8d9\xac\xda\x8e14\x81U\x91\xc4\x13]\x81\xbb\xc6\xc6=.h<\xf0\x8c|\x01D\xeeNS1\x7f3\xa3\xe9\x1b0$\xc9\x17\xcc\xbcT5(:\x01\xfeT5\xb1\x98\x0e\xd9\xc8\xb2\xca\xba\xd6\xdc\x81\xed \xcfx\xbfM\xc9p\xd4\xe7\x9dN\x1f\xa5J*\x97\x9e\x12\xce\x0b\xcao\xd9!\xde\xd7$\xc8E\x12K\xcf\xfdw\x17\xe1\x94\xb8n\x89\xcd\xba\xde\xe3P\xc7\x1b\x1d\x06#\xdf\xfdw\x173\xc2\x87\xe1\x08\xe1\xd4\xbf\xd6\xfeZR\x06a\x94\xbc\x05v\xbb.By}]\x17a\x89\xba\xbf\x89\x98\xc3K\xd9\xfeME\x9c\xc4\x1cz\x8e\x05 p\\\xca\xef\xe2(\xee#\x1dt\xd9\x00\xebDz\xc2\xf7\x11:&\xfb\xfb\xbd\xd7\x07\xed\xb6<\"\xfb\x07\xbb\xe1\xebv[\x1c\xc5\x83\xfd\x83\xdd\x9e\x0e\x88\xb4\x1f\xf6\xda\x1eo(\x89\x06\xa9V\x81x^\x18\xf4v\xdb\x12\x1d\x1d\x85\x01\xf2\xf5\x1bG\xfe\xc1\xfe\xfe\xee\x01\x8a\xbc4\xd7\x94`\xd1\xe9\xa0\xa8xm\x00\xe6\x95\xa5\xecPs\xe3mnr%L\xd9\xb1ja\xbf\xdd\xf6\xa4Of\x9e\xc7:D7y||\x1c\x06m\xd5\x8d\x15\x0c\x0eaF`@+\xe8\x1aC\x18\n0\xb4F9Hm\x88\xdeU\x8e\xca\x98\xdf\xeb\xf9\xaf\xf6_z\xec\xa8w\x80:\x9e\x17\xb4\x88\x1a\xea\xbeU\xe2\xd6\xab\xd8\xf6\x05`\xd2\xc4\x08\x1fL<\xb6\xf3*\x08P\xc4\x8e\x8fC\xcc|\xa2\x12$\xea\xb3\xe3\xbd\xfd\xfd~\xea\x93\xdd\x03\xc4 qw\xbf\x80\xc7\xc4K\xfd\xdd\x83\x97l\xc7c\xfe\xee\xa1mg\xfa\xbd\x00C~y\x0fS\x9c\xe11^\xe2\x05\x9e\xe2\x99\x9a\xf9\xeb\x12\x87\xefI\x80oH\xd8;\xc4w\xe4U\x0f:\xe5\xe5\xe6\x95\xc00\x9dO=\xb7\xe3\"t\x14@\\\x9e@\xe1l\xd0O\x8fx\xdf\xf7ST\x99\xf2\x14\x1d\xab\x9a\xda\xed\xb9g\xads\x84gz6ky\xb5OaA\xf8q0\xe0~\x18\x05}qtm\xa2\x19\xc4\xe4\x1eS\x12\xe2\x8c\xec\x1e\xf4\xc51\xb9\x86:\xab\xcb\x1fa\xcf\x1b\x13o\xda\x80v\x9d\xbd\xc3\xa30\x18L;\xbd^4\xed\x1c\xec\x1f\xf5\x0e\x06\xea7\x9av^\xbf\xd2/\xaf_E\n\x0b\xc8\xee\xc1j5>\x9ex^\xd2\xb9G;\x14!h)\xa7p.\xc2\xf7>\x19\xbf\xa4\xb8\xe5\x8d\x8f\xbc%\xc9\x8e\xc8\xdd \x8c\xb2cr\xe7\xf7\x0e\x06\xbd\x83(\xeb\xdc!\xd4\xcf`\x9a\xe8\xf1\xc4Kv\xbc\x05\xd9=\xe8,7\xab\xa2/\xc9\xa2\x7fGn\xbd\xfbN\x8c%\x99\x999\xf0C\x1c\x10\x12#<\xf1\xeew$:N:7\xf5\x927\n+\xd4G|\xff3\x91x\x06K~\xcc\xbc{\xdf\xc7\x01\xbe)\xac\x00\xae\xbc\x99\x85\n\xe7\x8f\xa3\xc25\xbe\xc7W\xf8;>\xcf\xbdG_\x13\x8f\x11E+P\x8e\x1d\x120\x83\x03\xa1x\xd5\xc3\x94\x04}zt\xdd\xf7}\x8a\x14\xe0\x87t\x84\x8e`\xc6\xcf\xf5\x14\xcf\xbc\xa9\x99\xd7\x94\x08r\x9eW#\x8a\x0c\n\x95\xfai1\xcf\x19I\x1a+\x85\xabG\xd3\xa3\x0c.\x93Nu\x8dYG\xeay\xe2h\xc7\xbb'\xa9\x1fnB\x98\xfbD\xe5C/\xef\xb1$Y\xa5\xeax\xea\x15]\x96\xed\xb6\xef\xf3\xe3\xa4^|Jr\x83\xc41\xe1x\xa9\x90\x0f\xe6}A\x96G$\x1e\x84\xd1\xf2\x98\xc4f\xde\x97\x9d\x18\xa1\xfe\x12\xe6\xfd;\x19w\x16\xf8JM\xfb\x02\x17\xa0\xb8\xf3\x16\xfe\xf7\x9f\xafp\xa0D\x8b1\x99x\xdfw\xaeP\xdf\xfa<\xd6\x9fbr\xebq|\x8fSB\x04\x02`\xfb~\xba\xf6}\x8e}\xbfPI\x9e\x97D(#\x0f\xa5\xdd\x98\xe2*\\\xbc\x1cg\xbd\xe8a\xc2\xd4v\x19\xdd`\xc6\xe1\xe1j\x8dM\xd2\xf7<\xe9\x1cKq\xf2\xe5\xcd\xd9Y\x93\x9d\xcf}\x9d\x9a\x9a\xf4eW\xb2Lz\x0c\x0d\\\xc52\xb8\xbeB\xac\x88\x81E\xab\x14\xdfx\x0cU\xff@\x85\xe3\xa2\xc2\xefJ6\x03T\xdeC])\xde\x8b[\x96\xbe\xa1\x19\xf3\x90i`m\xf9\xd0\x17\x0d*\x8al\xadm\xae%\\\x0ce\x08\x81\xb3\xd3\x9c\xcf\x13h\xed\xa152Y\x94\x1c\xc3\xbd\xden\x80 f\xb2\xb7\x8fjG\xf6\xe8\xa1A\xde(\xbb\xcd\xba\xb7\xecJ\xb1\xff\x9f\xccQ\x18\xb45a\x8b\x94\x8d\xebG\xa6\x98u\x17T\xce2\x02\x178s#k(P\xf8\xa5\x19\x8ePn\xcf\xa3\x0fA\x157\xcbR\xa9\xc0\xe6&\x82N\xd8\xc4\xc5\x0f\x8c/\xe7,U\xb2]\xd4\n\xf05\x93\xd1&\x14X7Y\xaf\x1f\xa9,~~E\xb1\xaahc\xa4$\xd4\xa7\xe0\xcf\xe4\xaf\x1f\xe2L3_\x0dX\xb1y!|\x8d\xe3Lw\xbd)\xfb#w\x9bU\xc1\x8f\xcb$y\xc4\x04\xae\xc8s\x9e~\xcb\x8f\x9a\xb7ggO\xca\xb3\n\xbacp\x9e\xd1]\xd04cJ\xb4\xdd\xdd\x05/+\xdc\xa4\x17\xf6\xc7\xf0m\xef)\xb3\x90\x82\\\xa7\x15\x9e\xc2\xccei\xa3>\xa3\xd9\xf9-\xcfg\xd5\xdc4\xc0\x12\xad\x9bp\x16\xc4b%T\x10\xb9Z\xb9m\x17s\xc2W+\x97\xb8F\x94xX\xf7\xad\xbb\xf9\xc5\x913\xd3\xb70\x8b\x98\x12\xa6/\xd48\xad\xdc\xb9\xf0w\xae\xfb\xac`ae~\x97.d\xbb\xfd\xb8\xdd\xde\xd0\"\xc5\xdd9\xbd\xfb3\xbbW\x84\xb5`\x1am\xf7\xb4\x99`\xf0o\xceKs'0\xce\xfe?h\xbbG\x1a\x0e/\xbf\x80f\xb0\xdd\xd6\xbf\xdd\xa9H\xb1 \xe9\xa0|\xf5\xf4\x9d\x85\xdcK\x87\x8b\xa2\x83 \x0cvq\xdc\x98k\x01f\xa8&\xd3\x01\xa6\x8d\x99\xa6)\xbd\xb6\xeaz\x85\xb3\xc6lz\xc6.\xe7b\xc2L\xceC\x9c4\xb7\nG},\xd5\xd9\xc2=<\xde\x96\xed&\x9e\xe4\xd9\x82\xd7x\xd9\x98\xcd\\\x976\x95\x05x\xd1\x98\x8bf\xf7|lu.\x0c\xf1t[u\xe6v@5\xf7\xa4\x196\"\xbd\xa5\xe9\xe42eS\x93\xb3\x87g\xcd\xe01w\x13L\xb6]<\x7f4\xdbe\x12gfL\xbd\x00_7\xe6\x9d\xb3\xb90\xd5\xed\xe3\xfb\xc6, \xfd\xc7\xbd\xc9r\x80o\x1a\xb3\\%b\xfc\xdd\xb4\x14\xe2\xab\xe6a.\xf9\x84\xc2\x85D\x83,\xe1+|\xd7\x98\xb3\xf0\x82d\xf2\x1d\xe2\xdb\xe6q\x8e\xc5\"\x87\xc5\xeb~U\x89\xf2\x94c\x9d\xdc\x86\xa6p\xac\xd3\xaf\xde\x87sD\xe1\xde\xc8\xf8\xd62\xe9\x0b}\x888\xd5?T\xff$\xfa'\xd3?\xb3r\xcb\xcd\xf7\xc9\xb2\xaev{\xc3\x99\xcfR\x17\x9b\xe8\x9f{\xfds\xad\x7f\xc6\x9bu\x95d\x0fr\xc4VBM}`>(\x80\x10B\xa6k\xd9=Q(\xfcA\xb1\xba\x0b,\xbbo\n<\x85\xa4\xa9N2\xa1\xc22%p\x90e\x99\xf6\xc9\xac%2\xc6\xb2k\xae\x08\x13\x81e\xf7\x9dF\xe0\xcflJ&\xea\xd5\xacuB\xb1\xec\xbe\xa7\xff\xb8'\xf7Xv?\xb0\xb9 \xd7Xv\x8d\xd9z\xac\x1e\xcd\"& \x96\xdd/\xb0\xf6\xa1#\x99z5HLfX\xaa\xad\xb0\xe8x\xc3\xf6\xad\x06\xbbZ\x99a.\xd6P\xa06\xb6\xf3<\xb12\xba\x86\xbaL-\xcb\xb5]\xa0\x18\xfa\xf6\x02c] \x87\xcb\x8f\xc9B6R\x10B\x84\xae\xcb\x82\xeb\xf6v'&o\x0e\xf4\xed9\xa9\xce 3\xb2=\xd7\xbd\xce\x05\xd3\xb5=\xd7\xb5\xce\xb5q\x05\xa1\x9e/6\xf9\xf2\x89\xde\x9e3\xd19-,\xd8\x9e73ys\x14\xd9\x9es\xa6s\xfe\x85&\xf1\xe4\xd4r:\xd50=\x1b\x92mc\x10\x1b\xb6Z1\x05K\xfd3\xd5?\x89\xfe\xc9\xf4\xcfL\xff\xccW\xab\xc7\xa7\xdc\xab\xcc\xf9\xfdjUy\xbf\xae\xbd\x8fk\xef\xcb\xda\xfb\xa4\xf6~U{\xbf\xab\xbd\xdf\xd6\xdeo\xe0$Z\xbd\x9eO\xc9\xf7'\x05\xe9\xab{\xc9\xde\x03G\xd8pN=\x06\x15\x0d\x91\xc3@\xb1\x8fr\x18\x8er^m\xf7\xa5\xc7\xfd\x14\xed\xecuRhN\xfcr/\x190\xb1\x9b\xd5\xc0Q\x07TEI\xaa\xaa\xcaH:\x0cG8\x81\xb3\xe1\xd8\xab\xf7\xb0lB\xfa\\5\xc1\xd7^\x80)\xce\x10\xc2K\xa26\xf5\xec8\x18\xd0\xce^D\xcd\x95\xe4\xa0\xcf\x8f\x16}\xee\x93=$\x89\x18Vt\xd1\x1c\x8d\x8e\x8e\xc2\xc3U=\xd9\x0f\xe1Co\xf3CO}8\xd8L\xdfE#\x9c\x0c\x97\xbe?\"\xf2\xf88\xde\xabT\x82\xfa\xe1\xa3\xb5\x84\xc1\x96\xa1\xed5\x8e\xec\xf8\xb8\xf7h\x9f\x0bn\x1c\xd6\xf14\x15\xf3\xe6\x99\xb5\x0e\xb2\xcas\x0cA\xf8\xcf\x8a\xbd\x1c\x8e0%\x01\xce\x08\xef\x88>=\xca\xfa\xd4'\xe1\xc1\xee\xe1.\x8a5\xd3\xbf\xf4\x18\xa6\x98\xfa\x90x\x9c\x0d\xb2\xc8<#=\\1\xf0$aC\xde G\xd8\x14I\x87\xf2\xf8\xb87\xf2\xd3\xa1<:\xdak\x1f\xec\x8e|\x97\x10\x17\xa1HAY\x00|\xe8\x84\x91\x92G\xd8P\xfa\x0b-\x8d/|2\xc51\x99\xb4U\xe9\xceR\x15\x9f\x1c\x1f\x93\xce\x12/}\x92\xf5\x97\xc7A?&\xbd\xfd\x83\x97\xb1\xafKa(\xb1\xec\x90C\xad1\xa0$\xb6\xca\xc6E\xd9\x14\xcaR(K\x1b\xca\x9a\x00\x921\x8aI\xd8\x19\xf7K\xa76\x84$\x85\x12s\xf0\x91~\x8c\xc2\x9d\xe0\xa57\x81\xbe#E\x1b\xc0``!n\xbd\x1eN\x11\x8e;d\x9c\xfb\x9b4\x99^\xd2\x97V\x9e\xb8\xa3\xaf\n\xde\xa6\xf1\xc6-V\xdbU*\xc5\x19N\xf0\x98\x1c\xbe\x8c;\xa2\xa3\xc0\xa7\x865V\xa3Z\x90\xa5\x02\xe8\x94@\x8471\xb0j\xef\xf4\xf6P\xc7~\x7f\xf5\nE\x01\xc8|A\x14C,\xf8t\x10F\x10\x0f^\x1e\x05ZY+\xdb\xedpG\x1e\x05\x10\xdeE\x01Q\xeaA\xd1\xab\xcc\x93\x08\xc7\xd9G\xfa\xd1\x93h\xb5\x92\x84\x90p'\x18x\x19\xc9\x13U\x19L\xc9\x12E\x1e\xb5l'\xa1\xfe\xe2\x98\x84\x83\xe9N\x12Mm\xd8\x85\x9d\x05B/\x93c\xd2SE|\x1f';\xaa\x08d_\xaa^\x99\xae\x98\xf2^F<\xf92\xe9\x84\xc8\xaeD\xa8\x02d\x81\"/#\xd2\xfe\xb0h\xc8H\x02\x84\xfa\xe2\x98\x1c\xf6\xd9\x90\xfb\x13\xbd\xcfdx\xe2\x93\x19\xcev\x146aa\xe1\x1e=:\x12\xab\x0c\x8f}\"\xfa\xe3\xe3\xc0.Du!\xaa\x0b\x8d\xa1\x10|\xee\xccF+\x12\xf6\x0e_\xce\x9fR!U\xc2\x05YG%\"\x9d\xb04\n\x83\x00\xd3$\x11\xb7\xa7\xf3\x85\xbc\x8fZ\x01\x1eS\xfe\x89\xa6\x19\x8b\xdc\xeeo\x99\xe0.\x86\xf3\x86\xc6\xb3\x0bv\xeb|J\xc5<\xce\x98u\x9f\xc5r\xb4\xc7\xba\x13*i_\xb1\xb1\xbf,\xa7S\x96z\x02b\x92\x11Q\xa8\xf8<\x84\xf0\x06\xff*\x06:\xa6\x96L\xe3\xb9\x97\x1f\n\x0f\xb8\xb9a\x81\"\xee\x81\xc3\x15\xe8\x98'\x90J\xd0\xfe\x8d\xd6\xb53\xb7p\x1fuu\xcbO\x9d\x86T\xa0tc\x8c\x07\xc3\xdd\x1e\xeao\x80\xac\xb7\x1ddC\xb7{O\xe7\x89\x8b\xdd\xee\xbd\xfe\x01\x10\x8e~\x1c\x86\x85\x17\x95M\x18B\x94\x95\x98\xc4\x15\x18\xf2M\x87\xc7\xf1 5 \x8aQ\x14\xffA\xf8\xe4 \xe9\xed\x856H\xd2g\x17\xeb!\xc5+y\xbd\x83\x10U\xb4\xb9\x05$\x8azl\xf3(\xb3;\xbf\xcb\x0b\xb8>\xf3]'\xce\x9c\xe2\xf4s\x02Z\xcc1\xe5\\\xc0N\xbd\xcc\xd8\xa4\xeb\xa2uy<\xd5\xd5\x9e\xe5\xbd\x03T\x9auv\xbf\x8cglN \xf7v_\xd9\xc9\xefN\xce\xde\x7f9ywz\xf9\xe5\xcd\xaf\xa7\x1fN\x08\xf7\x0e\x0f\xed\xef\n\xef\xcao\xe1\xee\x9e\xfd\xf1\xcd\xf9\xe7S\xfb\xe3\xae\xfd\xf1\xed\xe9\xbb\x93o\xef\xbf^Vk\xdf\x7f\xd5\x94\xe7\xdd\xb7\xf7\xef\xad\x1e\xbc\xb6\xf3\x80\xcb\xc3\x14~j\xa9'Ib>\x9c\x80\xbb\x9b\xfc[F\xa7\xec\xbd.\x95?6|\xd5\xa5\xad7+\xcfd9_\x10\x01?\xb5\x92o\xf5\x97\xfc\xd1\xfa\xfa\xb7\x93\x0f\xefO\xef\xc6l\xa1\xe6M\x8d\xb4\x02\xfe\x0fg\x1f\xcf>\x9c\xbc\xdf\x06\xe6\xe7\x00i\x0b|\xb21\xe5$\xf6\\\xf5\xeb\xda\x1f\xf4\xb1i\xec\xb9\xf0P\xf9\x04\xc1]\xf5G\xf3X\xf9L'\x937\x82g2]\x8e\xa5HU\xaej\x8a\xfb\xdc\xc5\xb3\xf7J/\x02\x05\x8b\x18V\xc5\xae\xda-\xf4\x0833\x94d\xf3<\xa4z\xa2\x80\xc7`(\x19\x04\x9d\x8b\xbb\xe0\xf0\xe2.\xf8\xe5\xe2.xsq\x17\x9cv.\xee\xc2w\x17w\xaf\xdeu.\xee\x0e\xf7.\xee\x0e\x0f:\x17w\xaf\xdf],\xdf\xbd{\x07\xa6\x94\xef\xde\x8dV\xc3\x8b\xe5\xdbCUx\xf9\xf6\x97w\xefF\xde\xa0\xa5R\xde\xe8\x14\x95\x03\xad\xbcA4\xfc{5\xdb\xea\xef\xa8\x96M[p^\xdc\x1d\xee_,{A\xef\x10\xfe\xbe6v\x9c\xf8bx1\xbax\xb8X\x8fv\xf0\x94\xec\xfc\xdd\x1bD\xadU\xab\xb5j\x0di\xe7\x1f\x17\x9d\x91\xdfB?\xed\xc4x\x92\x7f\x1a\xfe\xbd,\x81\xbcA\xf4\xf30\xe8\xbc\xa6\x9d\xe9\xe8\xa1\xb7^\xe9\xe7\x7f\\t\xfe\xaf\xfe\xc5\xce\xc5 \xfa\xf76\xb9\xf0/~\xc2\x97\x17\xdd\xd6\x7f_\xbc|q\xe1] Uz\x84^\xfe\xb4\x13\x97\xd4ef\xeb\xd9\x9e\x10\xcc\x15s'\xe8\xd38a`\xd2/\x8bG\x1d\xb2\xcf\x04p\xd1\xdb\xa14\x0f\xabU\xa6\xd3\x057&\xf0D\x96\xcfv\xc1\x84]\xd3\xf1=\x91\xe6a\xb5j\x19\x0f\xe8\x8a\xf1!\x12~\xca\xc4$\xce$\xe3,U\xf9\xcd\xa3]Y<_$\xf18\x96\xda\xb2\xde\xea\x18P\xe88a\x933\x93\xc3\xf8^\xbf_\xb0\x0ft\xd1\x98\xf3\xab\xfe\x96\xf7\x12\xd4}\x85\xd6F\xfbh\x87{\xf0\x82\x17q]b\xce\xec\xe7/\x92\xa6\xd2N8\xe3\x13\xc6\x8b\x94\xdc\xe3hF\x86\xa3\xca\x95h\xcb\x98FM\xa6\xf0$\xd6Z?V\x80\x1e3=;\x98\x15\xbd\xc0\x0c\xda\xb0R:\xac\xec\x86mi\xfb5\x9fc\xc5$\xe9\xf66.\x0d\xb3r\xb6\xdam\xebES;\x80\xb8.\x89\xccE\xe1\x07\xb5_G\xf5]\xec&w\xa2R\x04\xc1\xcf\x9d\xd5\xb4\xdb\xaa\x1b\xeed\xa9\xe6\x03\xee\x858b\xea\xfc\xacj1\x07\xbc\xf1\x8d\xdaE\xb5G\xec\xdc\x81\x0f\x94\xa9\xe6q\xe8X1 \x99\x0371\x92{Gp\xe6\xe4\xb7~\xdc\xe2\xca\x95\x97\xaa\xadB\xed\x04#\x1f]t\xf3\xa7\x9fv\xba\xec\x8e\x8d=>\x0cF\x08\x99\x06\xe2$\xe9LE:W\xbc\xa1\xa9H\x1f53g\xa3\x7f\x82\x00;p\xc6\xa5\x07\x1aZ\xb5fc;\xad\xa7\xd3B}?\x1e\xea_r\xddgz\x95\x98\x1a\x0dP\xf2Vr\xd4\x00.\"\xf7\xee\xa3\xba\x08&yl\xfc\xfd}\xcc\xd9/)\xa3\xdf3\x12\x1f\xf5\xa0\xf2\xb8\xdd\xee\xe9\x9f\xdft\x1b\xe5m\xa0\xc7\x9bX\xe3\xaf'\x7f\xda6s\xfd\xde&\xfc\xbf\x9e\xfc\xe9\x11\xf0\xcb[Q@-\x83\x9b\x02\xd0q\x01\x97\x01\xf0T[P\xa6h\xb5\xaa\x83Z\xd2kg\x06\x0e\xd5\x1c\x0f|\xef\x16\xd5\xa0\xbc\xd3\x95\x96]\x84s\xbf\xb5]I\xaf\xd5ZM\xcd\x0c\xbe\x903\x96\x82\xcd\x01u\x16)\xbb\x89\xc52K\xee\x9d \x1b'4e\x13'[N\xa7\xf1\x9d3\x15\xa9\xe3\xbe\xf0S\xff\x85k\xb5\xfe\x02\xe1\x89\xee\xa5\xd8\xd2\xcbE\xcaTq/cc\xc1'Ow3\xef\xdf0\x1d\x11\xb1\xb6\x8cQ\xdex\x85\xe3\xa8B{\xa7\x9d\x0d\xc9#n\xc2\xbc\x99\x95n\xacM%\x84O\x03\x97\xc2\xfa\x1aDf_\x83\x10> \x91\xdaA=J\xb2\x8au9B\x8a{8\x82\xbb5G$\x0c\xc3\xbd0\x0c\xcd\xe8\xd8\xdd\x82\x8d\x15\x9eh\x0d\xa6\x12Q\x1cU\x96\x8e%K]\x13\x11\xc7\x98\xbef\xf9\x1aQ\xe3\xccd\xca\xe8\xdc1Ne3\x87\x0b\xdeY\xa41\xd7\x88]T\x91\xa9:\xba:\x1a\xb0O\xec\xcb_gf\xfc\xb6.\x0f\x8f\xb5\x1dv7\xb7\xad\xf4x>\x0dFH\x9b\xb3\xf4\x9a9s\xbaX\xc4\xfc:\xeb\x03\xc8\x8d\xb1\xc3$7\x0516Bq\xe6\xd8\x8b\xcdE\xa0\x14\x1e\x13/\xb6\xedt<^X\x8e\xf7\xb3\xa3q?S`\xa4$\x1ef\xa3\x1c\xc5$\xa6h\xb5\xf2\xe4\x90\x8e\x08\x1fR\xd0\x1d\x8fH\xcb\x8e\xc3\xf0\xc9\xd6\xa6\xc1\xd9\x0b\x0cj\x8c\x97jB+vMj>\xa6`\xad\x1d\xe0%\xf1r\xab\xa7\x92\xb9\x84\xc9\xd6-\x8b\xb2o\xe3\xa3e\x7f\xac\xfaV\xabl8\x1e\xe5\xd3\xc2Y\x06\"\xad\xfa\x9094e\xb5\x8b\x811\xcf\xe2 s\xd4\xa8\xdd\x06k3\xd1n\x17\xf6U\x1a@``5\xcb\xdb\x80_\xb2\x91\xa5\xf9b\xef\xf6\xca\xb4\x12g\xb3\x1a,\xcc\xdd'O\x14\x84[\xc21\xc5\xc3\x1aaW\xd2\xeb\xe8\x9e\xce\x93\xaeH\xafq/\x08z\x11\xa0\x82\x0bQ\x837`\x1c\xdb0\x8e7`\xa8q/\x1e\x8eGy\\_\x83\x8eq\xf1\xce\x0c\xf7ap@\xe1\xe9j\xd5*0Bh\x9bm\xd8\xf6\xe9j\xb5\xb1\xff\xc2\xa1h\xb9?W\xf6;6\xc9\x11X\xcd\x85\x8b\x10\x96C1\"1\x9e\xb0\x84I\xe6\xf0\xa1\x18\x95F^\x05\x8e}.Yt`\x8e\xe1\xda\x93\xa6\x0f\xd6j/\x1bEhP\xbe\xf8~\x04\x02\x83\x1cxv\"\xd6l\xf6\xa3\xd5(\x1e\xa0,\x81\"\x18\x0bu\xd4\x80\x1d\xed\xa0$V;\x80\xa6#@\xf1\xd4'\x1fb\x8f\x97\xacPYG9\xa2\x8f\xf5#\x8c\xdc;\xcbc\xdd\x81\x18%\xc2\xdc\xc5\xe8+l\xe9\xa3\xc62\xbeo\x97Rt\xb5\xdd\xde\xdd\x87\xd0\xce\x13\xf1\xf0t\x11\x13\xd2\"4\xdem\xc2]\xe3\xe5F\xfdh?\xcas\xb5@\xf5\xa5z\xd5\x195AOv\x1f\xa7\xbeo\x00\x93\xb3\x84}\x10VD\x1f\xd9\xc9\xbe\xdf\\U\xb5\x8b\xf9\x99\x91\xbe\x9c\xad\xba\x96\xaa\xe9*\xab9\xe2\x86'\x98\xb0i<\x8e\x157\x13\xc3\x07}\x1d\x17a\xeb\x92\xda{\xeb\x08\xda\x9a\xaf\xdc9\xa4\xb7\xb7\xdf\xda\x86u\\\xf1O{\x07-B\xe4j%[\x8d(\xc5\xfd\x10=\xf2\xb1\xa7V\x14\xf7\xc9.\xc4\xf2y\xa4\x99\xd6\xbd'\x91\xcd\xd3~\xd0l\xab\x0e\x12Qn6J\xf6\x93p/\xb1LK\xbb)[0*=%Wb\xd9 \xedz\xdez\xe5\x8dG\x88\x95\xac\x83\x12\xc6\x84u)\x1f\xcfD\x9a\x1f\xaf\xb5B}\x90\x9e\xb3\xb5\xfa\xab\x0e\xe3 \x8fj\xbf\xcf\x9fG\x84\"\x080\xf4$R\xa7\xed\xf6\xde\xbe\x0e\x9b{\xef=\x9a\xdf\x0f\x11\xea#`\x11Z\x01\xae,h\xb5\xa6Z\x01\xee\x84\xa8\x86\x08D\"s\xac\xc7\xc1/\xd5\x93]\xca\x83\xe1\xc1\x81\xb5\xa2n\xdf`\xb9\xee\xe2V\x88[AqH\x98\x03\x17YM?Y9\xcei'D\xbe\xb1\xfb Qy\x00\x1a\x08\x08\xcd\x15\x9d\xd8\x18\xab\xd8,\xead\xec\xf7%\xe3c\xe60.\xd3{\xb7\xecke\xc4\xd2\xacM\x83\xbf\xad\x0cfH\xd2k\xb8\xa3\xafg\x87\xc4\x98u\xbf\xc7|B\xdc\xbcR\x17\xe7C\"\x14Wv\xf9w^\xfdn\x1ai\x85\x98*|\x88\xa7\xde\xee\xae\x0eG\xff\x04Q.=V\x97\x9eq\x8c\x1f\xfc&\xa9\x88\x1a\xaeS\xab\xef\\\x84\x0f\xcc\xb5\xa2\xa7h\x03\x1ax1\xf8\x94x:g\xb4\xabO\xf5<\xaa\np\xe2\xb6Z\xee\xb3\xca\xa9\xac.\xb6\x89;\x8e\xd1\xc3\x8fPWC\\\x0fz\x9a\xaa\x96\x19\n\xcb\xeb\x81\x97n\xf0\xc16&=\xdd\x94\xd9\xb2\x96\xbc`v\x19\x9f\xe4\xfc\xba\xe1coc9\x8b\xb9C\x95\xa8tEe\xf2\xd3\xc8mAD\x07\xf3\xcdm\xb9\x90VM\xdcd6U.\x90.\x97\xbc\x90$\xad\xc9p_\xf8\xdc\x7f\xe1\xbe@\xb8\x15T<\x83\x15\xf4\x02(\xc4\xa1\xa2\x10\xfc\xf9\x14\xa2q\x97i\xa4\x12\xdc\xd1\x9fmJ\xd1\xd8Pe\xaa+\xe8\x91\x07\x7fk\xdd{\x8a\xe9k\xddx\x1c\xf5\xd1\xd3\x95\x14\xd7\xd6\x8b$\xcd\xb9\x17h[\xed \x17\x13\xa6Mc\xf2\x89\xa5\xd2I\x18\xcd$ho,\xe1\xb3$\xd2\x8f\xe1\xa3\x0d\xf0o^\xe1[\xa54i\xc8\xaf\x0eO\xf0\x0c\xdf\x91\x10\x9f*\xa2}Ij\x048W)\xea]S?{\xaeX0\xeebf\xc4\xf8<\x16\x84\xe9\x95y\x83\xdd\xc3<\x9b}\x03\xde(\xc9\xc8\x98\xec\xe9-N\x91\x0b\x8eE\xbbm\xef\xcf\xde\xa9\xde\xbe\xed\xddopG\xc2\xa8\xc2\x1f*\xae\xe6\x8e\x04Quok\xb7\xbd;\xa2\xf8\x17\xac\xf8\x9e;\x10w\xfa\xef\xc0 X\xa1]\x1f\x95\x0d\x0dt;cB\xffh[\xd1\xd8\x80m\x0c\x97\xdeNW\xabXk\xb7\xee\xda\xed=\x1d\xc5\xce\x9b\x90P\x0f\xb9\x07+JF\xd2\x0f\xf1\xcc\xc23[5\xa9;?P\xd5)\xeek\x86\xeck355\"(\x08\x12\xc3\x94\x8dK\xa6lI\x1e\xd6x\xa1\xfe\x988\xdff6f\xfag\xae\xa6\xfb\xe6Gy\xb6%\xc2\xd9S\x0cRPF\xe4\x7f\x82\xdfQ\x04=\xce\xd9(jo\x97\x07\x8ai\xc8\xda\xed}E\x1a\xb2\xd5\xaau\xef\xa5H\xbb\x12\xff\x06\xfe\xb4z\x86\xdd2\xbcL\xc1\xe3\x80\xe5\x90\xb9\x8f\xfeD?\xaf\xbd\x0c\xf5Qc\xb6\x0d\x19i\xff\x90\x10\x92\xa1\xfb\xe6Z\xab\xdb\xaa\xd9\x99\xa8s;\x8b%\xcb\x16tl-_[(t\xe8T\x9aK?\xdf\xd9}\x07\xc2\xc38\x19[\xd0\x146\x86b\xef\x85\xeb\x14\xb9l\xec\"f\x0f\x14\x99\xc9\x06\xde\xf3\x01\xa7\xf8\xc3V\x80\xa2\xf9\xc0\xcb\xc1\x18\x18~)\xe6c1_\x80F\x82\xddm\x81\x83\xea\x177W\xbc4(\xfa\x8eH\x9d\xa9H\x12q\xab}QQP\x0dJz\xb5L@\xf5\xc1\xe6\x0by\x0f\xda\x03\xa0\xf0\xc5\x12\x01\xcf\x19\x10\x7f\xc2\xc2\xf0\x06\xd9\xc0\xd3D~O\x117P&\xcd\x07\xe5tG3R\xca#\xf3\xd5\xaa\x02\x85\x19x\xdc\xaa\x80\xc1\x12Y\x9eZF\xa8F<\xb5\x94\x92=\"\xa5T\xe6\xf3 !%g\x88\xe6\xed\xf6\xe6\xc4\xdd\x14\x82K\x05\x99r\xc1%_0\xe5\xfe\xb3D\xf8f\xad\xe8)\x9e\xa0\x1aI\xb5\xe4\xdb\x9c\xa4\xe6;\xa4\xc2\x86\x89YA\xb3\x92\xbe\xce\xcd\xc5k8L\xf6\x16O\x81 \xf2z\x17\x84d\xedk(_\x17aO\x91\xbaE\xc9\xdc\x08\x12\xf6\xf61H\xb0)yX\xaf\x7f\x84<\xa7\x087v\xa4J\xcf\xd4\x04-4\x816\x13-\x11~z\x04\xa0\"\xda`j@m\xa3\xe6`R\xce\xc1,\x9f\x83lP\xccB\xd4$H\xa6j\xe5O\x0d\xc1\xd4\x0b\xc5\x19\x8b\xf9\x9c\x16>\xb4\x81Y\x1e\x8b$a\x9a\x95QH\x133\xc5\xc7/\xf5>\x16\x13%hbX\xe2\x8bgi\x08\xc0\xd2\x8bn\xd3\x10H\xa49DK\xb4\x0fs\xd1~l\xb0 )VSY\xaa\x19\xf0\x15\x8e\x8c\xe6\xaa\x07\xcd\x12\xc0\xde\xb6X\xad\xb4<\xfa\xf4\xbcYm\xd5\xfa\xb5\xb4Vw6P\x0b%\xc5s<\xc6 ^\xa2(\xce\xfd6\xa9t\xbd\xf5\x9bO\x85o\xa6\xc4\xae\x1b\x8c$\x9e\xc6\x86\x817}^\xb7Q4%\xadp\xfd\x03\xb2fm\xce]\xa4\xd6\xec\x04\x0d.I+\x88\xbc\xac1d\xa9\xc5 \x85\xe0\x19\x17/\xd5\x9f\x05\x91xJ\xd4\xfa\xd5\x0cZ\xd8\xdb\xd3GAO\xaf\xd6VX\xacQ\x10\xc3\xa9\xbdD\x15w-R\xaf\xd0\x91\x8ciBS\x0b\xb1]\x17V\x19\x05m\xd4\xde\xee\xd66\xeb\x9c\x03(\xba(R$%\x19$\x04J\xd2\xc1n\xd4\xd3{\x8f\xd6\xd2i2:\x9e\x899\xd0\xd19l4\x8aj\xc6\xd3\xb88\x9d\xd2\x9e\xa3\xbd\x98\xec\x1d\x1e\x11/#\x14\xb5\xdb\x19\x18\xadd\x9d\xbd\xc3\xa8\x13\xa2cR\xb0O`p=(Hv\xb1\xaf\xd9\xb4\xfb6\x9e\xc8\x99nZ\xef\xcbz\xd0}'\x96\x96\xa9`\xc2\xb2L\xfb\xb4\x17j'\x8b\x96\x83z\xc7yC\xadv\xef#oA\xa4\x1f\x83\xa1u+\x00G\xc9\xd7\x1eE\xa0?y\x1a\x86F\x7f\x02%@\xb6\xd4\x00\xfd\x91\xb2\xad\xb9G\x8d\xb2\x8dj\xb3\x92|.\x1f\nuvUS\x8d\x9f\xc2\xa7\xbe\xd7ZV\xf7\xec\xa3\x05j\xb7A\xc1M7\x14\xdcO\xf7\x14\xd4\xec\xcb\xaa&\xf3x\xd1n\xc3\xb2-\x93\x10VCAS\xdf/P\xa2\xd6\x87\x87]\xc0\xb4m\x9a\xe0\xf1 \xf4\xa7\xd1\x14A\xa4\xe1\xa4\xdd\x1eW\xb4\xc6*\x8b\x89y\x08`\x12\x03\x05\xf6\x817\xd1\xb4\xf5\xf1*Q4\x81\x9c\xe1\xd6\x9cS\xf0\xe7\xa1Ps:\xa85\xec\xb8(\xdaZl\xfb\xa7\xbcmE \x02@/ \x0e\x15\xad\xbe=\xfb}\xf4\x8c\xa9x\x03\xf2\x88%\xbb@(GC+\x02M\xba\xb6\xf2\x1a\x80\xa2\xaf\xff \xf5\xc7#\x94\xa7\xba\xad\xa5D\xd4\x95\x19O\xb7\x05dk\xf75\x04\xf1WX\xf3\x06\xb6\x14{\x8c\x01\xc2\x8f\xf4\xbbJ\xd6\xca\xe0\x81\xa9-\xe3U\xbaiwR3\xeds\x8f\xa3\x81iY@\x83\x1f<\xa6\xf7\xa9\x10v\xe9\xea\xc8\xd4\xac\xe7\xcf\x84\x10K\x98n\xb7\xdf{\x0c\x0d\x1e\xd9\x80r\xc3\x8fr\x0b\xcab~\x9d0\xe7\xf7\xa5PY\x0d\x90\xc1\xfb\xf0\x96>\xa3\xfe\x0flp\xcd\xb5?\x81*\xf9\xfe\x06(\xb3\xa7@\xff$k\xfeO\xa2\x0c'\xe9\x06\xca<\xd9\x96\xe6'\xc1\xa80\xcb\xb9\xc4\xcd\xa5\x11\xa0jS\xad\x00Xh\xb8\xe1X`\xdaF\x91\xf9s\xc4nT\xa0F!QdG\xbd\xfd\x83v\xfb\xfb0\x1b\xa1\x92&\x9c\x0f\xb3Q\xa5\x17E~\x8f\x92\xb0\x07\xe7\x08 \xc9\xd0\xa0\x17\x85\xe1+\xa0\x8f{\xd1\xe1><\x1cF\x01:\x0e\xf4F \x08\xc51 \xfa\xe28\xe8\x8bN\x07y\x94\\=\xab\xa3\xc7$\x18\xc4\xc4\x8b\x8f\x8e\xf6\x90O\xa3\xaa\xc1\xc9\x8c\xdd\xd1 \x1b\xc7s\x9aT-N\x8a\xfe\xdfzq\x15\x8ayp\x01\xc0\xbf\xef\\\xdcr\x87ec\xba`\xc5\x81\x90\x8b\xfa\xd5I\xcd\x97Xf\x96\x98\xc2\xb0\x86%V-\xf4\xaf]b\x13\xb1\xbczr\x89U\x9a\xff\x11\x1e\xb2\xb9v\x9b\x91,\x1d\xf6\xda\xa7W\n\x1d\xf7\x14\xbb\xf7\x94\xee\xaa\xbe\xba\x1a\xb3?\xa1UNA\xab\x9cj\xadr\x8a\xfa\xe8\xe9J\x9e\xadUNb\x9a\xfd\x88Ry\xe3\xe8\xa5\xa2M\xb6\xc4\xcd\x9a\xe5|q\x14\xf3b\xc9\x0b6nb\xda/\xf5\xff\x05\xb1\xb1\x05W>\xb25\x0d\xb0Y\xa2\xc1\x13\x8aN-\x95\x13M\xcc@\xb3e4Z\xf1\xd4\xbb\xf7\x96OM\xdaju\xe3-\xd1j\x05|\xe1r\xb5\xda=\xd4\xbf{=\xf3\xbe\xab\x7f\xb5\xa0\xb0\\\xad\x0e\xf2\x0f\xaf\xcd\xafI\xdf}e\xbe\x9b\xf7\xd7\x07\xea\xb7r\x8a\xe9\x1d\x98\xca\x80\xab_*\xc1\xf3\xfe)\xb4R<\xcfj\xc5\xdbm\x85\x10?@\xc0\x05\x89\xed\xbd\x15\x0e_\x15\x8a-5]\x06\xfd\xe5\x12\x1e\x7f\xb0\x0b\x9a\xbd\xcb)\xa4\x06\x9b\xa9\xe7\xd1Z:!\xb2\x0bk\xde\xf31\xeaa\x9a\\Z*\xdd\xb9z\xcbM\xfe@ O\xecr \x8f\x97\xeclN\xb8\x14.U\x18c\"\xd1\x03\xd5\x1c\xdf\x13lz\x1e\xbecmu56\x95\x91\xacb\xb8\x93Te\x80\xb1\xe1\x83\xd7\xb4\xdd\x06\x8a\xaa\x10\xb6\x15j\x8a\xaasv2\xd44M\x08_\x03Fzq\xf5L\xb2\xb9\xb7Mv.\x8e\xdd^\xab\x95\xa3\x05Xb\x01\xc6,JT\x99\x02{\xaa\xc8 \x9c1p\x85\x94\x97p\xbcm\\\xaf\x99\xd0\xf3\xe6\xc4o\xe0\"\x145e(\xde\xf4j\xceu\xde%\xd5\xd1\x11\x17@3;\xa37\xcc\xa1\xfc>?\x84\x03\xfd\x8d6f{\x8eR\xab\xd0mha\xe0\x0ez'\x93\x1f>/[\x0fU,\x85\xc9\xae\xc5\xc1\xa2\x88\xd6q&\x03\x19eN\xd3\xba5\xf0\xb7\x82-\xd0\x03\xe9\x84x/W\xe7[\xe3\xddX\xc6\xedv\xee\xc1\xbb\x02\xff\x18W\x17(\xd8\xb6r\xc1;\xe0 \xdc2J\xd6\x06\xf01\x97,]\xa4\x0c\x0e\xa13\x10\x0e\xf2\xab5\xc5\x15\xac\xba\x19\xe3\xe3\xdc\xdb`\xef\xe0)\xd8! \xd2\xdb@W~)L\xdc:\xf9\x12\xdc\x94\xf3D\n2\x9eA\x9a\xf2\xcc\xbc\x02\xe4\x92\x86\xfed\xaew\x11\xb9Z=\xac\xb5%-\xcb\xed\xeaK\x1f\xf9\xed\xb66kf\xd5\x01\xe4\xbdA\xc6\xday\xfbg\x8f\x19\xad(>\xd8\xef\xbd\x82{\x9bv\xde\x00\xb2\x90\xdcM\xba\xe2\x90\x8d\xcf\x1b\xcen\xcd=Cm\x8e\xa1\xe1\xa8*\x0b\\m\x07\xcd7A\xcb\xadU\x89\xb8\xadC&!\xe6\x16\xa4\xf5\x0e\xd1/\x93\x8ex\xd1\xeb>\xfa\xc5r\x9e\xca\xcb\xf9/\xa1\xf7\xd7\x0dQ\x8c\xfc\x04\xdeW\xe1\x8aC\x9e\xad\xf4b$s\xfdOl\x88\xae\xa2\xee\xb1\x1d[4U,\x96\xf4\xe2ajGg\xf9\xdd\xd2x\x11=e\xe0\x0d\xc6\xban\x05\xd2\x000\xae5\xb7\xd6|\x18\x8c\xfa\xa5\x8f\x03\xe1\x95\x1a\x95B\xdfV\xe0\x8b\xf1\x9c\xaaq ;WKi<\xad\xceE\xca\xaa~\x0er'\x00\x7f\xad\xbb\x0b\xf8}\xcb}\xff\xba\xf8\xfa\x04\x88\x14l\xd3.\xbb\x93\x8cO\xbc\x07}\xdf2\xa2k\xcc\x11\xeak\xb8o\xf9\xban\xf2FPU\x1d\x9a&~\xdf\xd2\x84D\xcf\xf4-\x0d\x97\xec\xed\x80_\x96\xbf!\xb8\xb6 \x97`\xcd\xa5\xd8+p}Ad\xed>(\xb7\xee\x83\xa6\xfay,\x92\xe5\x9c\x13\xb1\x16\xd6-\x9fk&\xbf\xf0x\xb1`\x923\x9e\xd9\x1b\xf6{\xd9\x9b\xc2v\xe3\xb9\xfd\x19\x8e\xfe\xd5\xfd\x99\xd3E\xd1\x9f\xc2\xb6\xe7\xb9\xddyX\xff\xab\xbb\xa3*\xdf\x98-#WV:SFxf\xe5I\xd8M\xd5\x89\x9e\xe9p\xa8\x95\xb9\xee\x7f\xbb\xda\xf3\xc3\x9e\xb9\xec\xe7Bc:\xcd\xfdh?\x7f{\xff\x1e\x9e\xd1\xba \x14\x15H\xac\xf1\"e`u\xde\xec5\xa9\x08\xb2\x91\xb2E\xca2\xc6e\xf40\xa6\\\xf0xL\x93\xcd:\xdd\xffv\xd78\x11\xb7,\x1dS\xdb\x0fS\xf1\x1d\xfa\xbc\xc6\xcb\xc5bk\x16\xe8\xfe\x1a\x8f\xe9\x9c%\xdb\xb2@-kl\xdc\x1d\x7f\x91\xf7 \x8b\xdc\xa2]\xf7_<\xabWB\xfc\xd3\xb3\x1an\x99\xd5b\x16!\xb2\x82\x99\xb9\xaf\xf6\xf3\xe7o\xa7z\x16W\xab\xfd<\xb3\x8e\xbf`r\xbc\xab\xbc\x9c\xbc\xffr\xfa\xc8\xac\x97Nl\x9fl\xf0q\x9c(n\xa3\xfe\xa2\xa3D<3\xb2\x80\x8d@\x0d\x08b9\x04\xa9\x05\x9bhD\x96Jv\xe8xd \xd0\x888\xd5\xec\xbav\x0d\xbd\x7f\x05\x12\xe5\xde\x86\x0e\xb68\xdc\xb2\xbc\xc3\xec\x97\x8c-m\xce\xf1j]EH\xd1\x84\x901\x97\x7f\x10\x1f\xc1q\xae\xe5\\5\xd0W\xf5\x14\x0b\x95V\xce+\xdc\x8ek\xae\x18\x0e\xc5\x08\xb5\xdb\xae\xef\xea\x9b\x8b\x90\xe4\xfbb\x84\xb0\x1b(\x1c\xd0\xd1\"\x84\x1f\xc25\xe3\x82\xa8\xa9:\xae\\s\x07W\x170G\xa5\xbe\xdf\x17Gi_\xf8>\xe8d/\xed\x864\x8f\x1c\xb8:\xa6\xbc\x1b\xc2C\xd9\xb1\x8c\xb4\x82\x82+i\xb7uY\xb9Ve\xeeL_\x9e\xd7D\xcb\x03S\xa8zlC\xb5\xc1s5\x1b\xab\xd5\xc1\xfe\x11\x04\xf3=\"\xaf\x82\xd5\xea\xf5\xab\xfc-\x0cz\xe8\xc9\x0e\x81\x88\xf5D\x0fb\xaf\xde\xf6\x93\xd5\xea\x9aH\x05$\xcfh\xca\x8dt\x99\xe2,\xa5E\x9f\xd7v\xcbke\xabU\xde\xa4\"D\x91\xc1\x82\x9d\xbf{\xd10\xe8\xec\x8f\x06\xe0(\x04\xf9?\xed\xe4\xaa\x08\xc3\x1f\"\xb4\x95 Y\x98\x88\x05 \xc1\xbbo\xe1\xda\xb5EHZ:}\xbdt\x11\x04\xcdL\x8b\x90@;\x97;\xd7\xd8u\x11\xc2\x05\x8a\xa6\xc3\xa0\x8a\xa2n\xc75\x94S\x90N\x88\xb0$PE!i\xab\xfc\x06{\xd3A\x10\x19<\x1eh|M\x87\xe1h ^\x96.JL\xb9\x1e\xc2=\x14i<\xdb\xc8\x83\xc3\x03\x14U\x12\x0eQT\x1fL\xe4\xa2\x81\xaaN\x87\xf5\x8c\\\xd4\x9d\x8a\xf4\x94\x8eg^%\xf0L\xdc]\xf2l\x16O\xa5WT\xc7p\x18@\x1c\x19\x9c\x82\x8dR\x88\xe3\xe6\xb2\xa9O\xd8K\x8e\xf9Kr\x10\xa8\xec\xe2eZ\xebW\x18\xa0g\x12\xfa\x8f\x10\xe8\xe7yt\xbe\xddf?\x87\x84\x04\xedv+\xed\xc6\xd9GvMe|\xc3\xfe\x8b\xa5\xa2\xbe\x0b\\\xc5\x9c\xa6\xf7\x8dD\xfa\x98\x04\x037\xb8\x02ez\xee{Q\xc1\xbc\xb3\x91V\xcc\xe5\x1a\x8b\xb1\xa4\x8d\x91\xc2Lu\x95\x92\x87P[-\xc9\xaa\xccX[4VW\x16\x01\x18Z\xc6\x19\x8f\xb4~Wi+<@])\xbe\xa9\x8dMG\xc3S\xbdy\"K\xd9\xbb\xfa\x9eeZwq\xa6\xdeO\x92\x98f,+\x00<\xeca\xf7*\xe6\xee\xc8@hx\x88]1\x96\xee\xa8\x18\xe40\x0c\xb0\xaa\xc4\x1dU\x063\x0c\x0f\xb0;cw\xee\x0fp\xed\xe5^\x88c\xd8\xbf>\xb3\xeb\xd3\xbb\x85\xe7\xfe\xdd\x1bD\xc3\x8e?\x1ax\x83(X\x0d\xc3\xce\xeb\x91\xa2\x18\x97\xa3\x97\xc8\x1bD\x17\x17\xdd\xfcMe\x18\xb2\xd3\x11d6\xde\x87\x06\xab\"\x83\xdf\xf8\xb9|3\xd5x\x83\xa8J\x97\xca\x16t\xe6\x8b\x8b\xae7\x88b>]\x9d\xa9\x7f\x1f\xdf\xa1\x95N\xe2\x94\xaf>\xd2\x8f\xab\x8f'\x1f\x11\xfa\xc98\xa0\xa6d\xe7\xefV\x8bl\xa7\xff\x8c]z\x9a\x08\xfa\xbc}\xda\xe2\xb6\xb5\xdf\xff\x96\xd7\x8a\xf3\x18\x8a9\xe1e\xc3R\xad8z\x9a\xa6bQ\xe8\xef\x88\xa6\x83\xa0\xe3\xaf\x93\xcfZP\xc6a0\xd2~\x9f\xc1!\xb9\xebw,\x85\x82\xa2\x96\xc7ji+\x89\xb8$\xa2Xe\x99j\xca Z\xb8\x81&\x18\xddO\xe7_\xce\xbe\x9e\xfd\xe5\xf4\xf2\xec\xe3\xbb\xb3\x8fg_\xff\x16\x99\x0f\x1fO\xfftR\xfd\xe0v9\xe5\xba\x8a\x8f\xf4c$+\xb4\x12b\xbc\xc9'\xc9\xa5\xa8\x92\xcbw\n\xfa\x16\xc1\x94$\xc0) \xb1h.-\x15\xc1Lq\x9a\x13L\xfeR\xa2\x88\xbf\xb4\xaa\x92\xffc$\xd3c?\x87-\x12\xacV\x0d$\xb3B3\xed%h\xb4_j\x1b\xd7\xde\x9e\x19B\xd5\xf84\x16/\x9b\x07a\x030\xeb\xf0m\x05W]~\xfcx\xf2\xd1|,xh\xeb#\xfd\xe8\x16&\x1f\xdbf\x188\xcd\xa7{\xa1\xf0ek/\xce>\xbe\xdb\xde\x8b3>\xdd\xe8\xc5\x06:=\xaf\x17\x9dG\xbb\xd1y\xb4\x1f\x9djG\x9a\xe6-\xcf\x19t\x832\x028\xa9n\x1e\x98\xe67\xd7\x07\xbcX\x99.s\xb1\xdbe.\x8a\xf8\xbf@89\x00z\\!\xc4\x05\x9d\xb4\xfe\xa0\x8e\xb7\xed\xe5'w\x93\x96?Y\xc5\xa0\xf6\xa6\xa8\xf6W9Z\x0d\x9d\x8b\x0b9\xf2Q\xe5cd7Wy\xd1[\x83Ny\x89\xf4\xde\x005\xbc\xf4\xfek\xe5)\x8a\x8c\xea\xcdT\xca\xa3\x01B\x83\x9f\xdcgI\xf92\x9e\xb3L\xd2\xf9\xe2\x9f#\xd9\xf9},\xa1\x1d\xe5\x81\xed\x92N\x89\xf3\x94g\x10m\xdb\x9c-0\x97t\xfb\xa5\x18\xe7\xc9\xb2~\x04\x84\xb8\xac\xbcp\x04\xb5\x19t\xe1-\x95\xac0o`*M\xbb\xa2\xe2\xc4\x97\xc3p\x84S\xf5\xdb\x1buBL\xd5\xd3\xee\x08\xb7\xe4poTh\xd0\xd9\xad\xa3\xaa\xf0\xd4\x9f\xee\xb7\xafo<\xe8\xaa\xbeL\x91\xa9\x12{#\x9c\xa8\xdf\xfd\x11\x1e\xab\xdf\x83\x11\x96\xc3W#-\x85-\x88z6\x1bF\x80wQ\x7f\x91\x9f\xa7\xef\xf6\xd1\xc2'n\xe0\xf6\x17\xc4_\xe4\x92\x8e\x1c\xbe\x1e\xb5\xdb\xde\x94\x1c\xb0\xbd\x97\xdeA\xf0R\xf52\x18\xf9\x8e\xef\xc9a\x18\x8eV\xab@\xb3\xfdj\xb4y\xde\xce\x14b\xb8l\xe9\xab\x01\xeb\x02!\x87\x81\xd2\x0c\xec\xb3\xc6\xff\x84\xa6C\x9b\x92\x18m\x07%\xb1\x15\xdcG\xf4\xb9\x16\x98[\x9e' -8\x0f\x96\x9f\x9a\x80u\xf6\xc1\x9e\x16\xa1\xe5QP\xd6\x9f\xfa\xe4\xa0\xf0\xce\xf1\xf3!!\xc1S\x0b\\\xd8\x1c\xd8\xf0\"\xbd\xe0d\xa4\xf90L\x89\xc8;\x98\x91\x18'\xe0\x7f\xcfD\xc1\x94$\xe8\xcb#\xda\x97\xbe\x8f\xe4\xcf{ _)\xa9vl\xae\xea\xe5!\x83\x10.S\x0e+ \xbd\xfd\xfdv\x82\x10NHrtt\xb0\xca\x8aa\x8a|\x98\xb2\x8cR\x03\xd6\xee\x9c\xd0\x9f\xf7^\x1e\xa0\xc1\x8f\xb7\x12\x81\x0fb^)\x19\xd4K\xf6 \x01EaO\x07q)\xbf\xec\xe9\xac\xe9 \x05\xb7\xbf\xe6\xc7\x1b\xa3H/\x941\x8a\xc6O\xe8\xad\xd3v;-\x1d\xf9\xb3-L\x94\xad\x81\x80\xb3@}i\xab\x9c\x85\x06\xe0\xef\x16\xc0O}\x92\x0dE\x1e\xf0\x05\x17\xaf\xbd\xca\xebA\xf9v\xb0\xdb\x16#\xb5\x1d{\xc2\x84\x11\x92\xa3\x0d\x90\xef\xa2\xc1?[s\xa4\xbdH\x94\xc5\x83J\xfe=\xeb\xcd\x04'2\xa5\xf7F\xfa2\x17\xb7F\xd5\xab\xe4\xde\xab\xe4.\x8b\xe1\xf4\x99\x04&\xe7D\x9er\xb9\x1eo\xe7\x97\x9fC0\x85}\x1eT\x9eO=\x93b\x04\xfd\xdaF\xacd\xa01a9\x1a`N\xc6\xb9\x1a_\x1e\xf1\xbe\xf4Ih\\Z\x8c\x87R{;\xc3\x1b\xde\x1a\x81\x03\x00^?\xad\xd9nS'\xe6\x0exd\x14&\x83\xdaT\xc1\xb6\xb9\xa6\x86S\xe4)\xab\xe8eA\xa7\x94\x14\xcb\x98ZU'z%QT^8{\xf6\x91\xd8\x8f\x9d\xd05M\xe8\x8fL\xd7\x82\xc6i\xf6\xaf\x99/\x1d\xdf\x88\x99H/\xa5s\xef\xdc\x8aW\x0b\x80\xbc\xf4\x03[\x9b\xc0LM`\xd3\xdc\x89\xcd\xb9\x8b\xa7\x9e\x82~\xcd9jZ\x98\x0c\x959\xe9P\x8e\xc80\x86 w\xf03\x1a=9)\x9b\x03\x1d\x8e\xac\x81\xea\xd0Uz\xa0\xb15PZ\x1b(\xdd\x18hJTw\xca93\xbd\xc61tR\xe8N\n\xe8d\x11\xaf\xec\x8fbCuy?\x07'2&7Ot\x7f\x14!\xf25\xab\x16\x18\xb7\x16\x18\xc7\x12\x15\xf1\x15\xf9P\x8e\xac\xcd\xfc\x87\xd7\xca\xbf\xfe\xf8\xf8\xb7l\xa7\x0c\x00\xf7$\xdb\x93\xf7iK\x9f\xd1\xc3\x13\x9b\xa4\x8e\xf2S?\xde\xdd\xa8\xfe_oD\xf0[\xb6\x93\xb2kv\xf7q\xaf\xc1\xba\xb4p\xddcR\xe7\x90\x1a_s\x91\xb274\xcb\x93c\x17a\xf9LT,\xe4\x99\xdeA\x80JI\xa6)\xbc\xe2m\xcc'\xe2\x16\xa0\xab\x1f\xbb,[\xa4\xf1\x9c\"K\xeey\x8e\xb4\xf2[\xb6\x93w\xec\x9f\xc7k\xd5o\x03B\x0fb0!\x17s\x92\xc7\x97\x92\xf8!\xa5\xfc\x9aE\xad`\x9ds\xeb\xee\xa7T\\\xa7t\xee\x82\x01\xa4\x1aT\xbb\xad\x8d!\xaf\xc4\xe4\xbe0\x19sO\xef\xd4te\xb1\xe0_$\x95:j{\x91m\x18\x8cLQ\xcf=ISq\x9b\x07\x82*KU3\xb3\"\x1d\xca\xadV\xee\x0f\x96\xb0f\xa5X;OHO\x16HD\x01\x12n\x83D\x9f \xaa\xb5\x9a\x03\x056p\xddC\x88,`\x03e\xb5j\x04J\x91-\x07\xcaj\xb5\x15&\x95\xbc\xb5\x11\xb6\xdbM0y\xac\xc4\xa6\xe2\xe6\x1d\x8d\x136q\xa4(\xb47\x05\x8a\x15\xd2Zcu\x0b\x9a\xd2y\xb6\xed\\\xd1Xqs:gF7\xdeX \xc0\n\xa0\x8b\xdd_\x121\xfe^\xc1\x9c\xedE\xd4X\x06j\x14\xf9\xf8\xbd\x18\xf3\xfcR\xc00\x18\xf9!\x96\xc3p\x04&\xde\xb5l\xae\x19\x94\xeb\xdb\x05 ;z.\x19\xcb\xab\xfbc\x84\xac\xa0Xe\xf4\xb7:\xf1\xd1\x96\xbc\xc56Z\x06\xb4+'\xf0\x8d\xbeZ4\x8d\xc1\x90x\xb2L\x98\xf3\xc2\xd0\x97\x17.2\xc6\xc9iw,&\x8c\xb8\x1f\xce\xdf~{\x7fz\xf9\xf1\xfc\xeb\xe5\xbb\xf3o\x1f\xdf\xba8\xb5\xacAd=\xe2g\xf9\xc9\xde\xf3\x9f\x91\xab \xd3;\xde\xcf\x03\xe4\xfd\xec\x0d\x7f\x9bd#\x84v\xae1\x7f\xcc\xc5~\x11\xae\x02\x87\x96qxa&\xcf,\xe5\x86\xc4\xd5\xd8\xcbe\x1cR\xc2\xbb\xfa\x94\x06\xe5\xe1\xf4\x85Q\xd1gn\x14\x13\xd7\xf5cmu\xaau\xef\x13\x95\xa8\x15\xfd^\x8c\xec/\xbf\xa9/\x10\x9fP\x07\xe4\x8b\xa7\xf7^\\\\\x7f\x94\x03\x8f\x17\x07B1\xc2\x0cE\xf1\x1a.\x06Z\x1d\x06\xaf!>71X\x1d0&p\xfd\xca@v~~\xe8\xe1\xdez\xe7\x1a\xbb?\xbbO\x1bGo\x847T\xfb|\xd7\x93wr5\x93s\xf5/Y\xcd'\xab\xbby\xb2\xfa-[\xcdc\xbe\x9a\xd3\xc5j\x9ce\xabL\xfdI\x98z\xba\xb9F?\xed\xc4\x9b\x01\x11w7\x02\"2>\x16\x93\x98_G\xeeRN\x0f\xdd2@\xe2&&o\xc6-\xd4\x11\x0fW++\xe4\xa1N\x02\xeb\x97\xdc\x8cc\x99&j\xe1m\xd4\xaa\xa8ls\x8d\xa8X:\x10Q1\x9ez\x0d-T\xf2\x94k\x0c,m\xf3Q\xa1\xfe\x06AT\xb9\x9d8\x83\xcbV\x92\xddI\xf7\x8f\xc4Z\xdc2Y\xbf-\xd8\xf5\xea\xb7\xc5\xf5\xea:\x9e\xae\x16\xfczu5_\xac\xe2\xb1h\x9e\x94\xbd\xedQ*\x1b\xc8\xc9&$\x9e\x01\xea\xade\x07\xfa\x17\x88\xa8\xcc\x13\xff\x00@r6\xbew\xa0\x8f\x8d\xbc\xdd\xc0\x04\xd0\xdbo\x88\xcf\x19\x060\xd6\xcf\x8cN\x9a\xba\x1bw\xe3\xec]\x9c\xb0/\xf7\x99d\xf3OT\xce\x8a!\xa6[\x8a\xf0\xc6 \x9d\xc55\x13\n\xec\x11\x85\x88\x9c\xcd5k\x9eB\xa2\x07\xee\x89\xee2\x8d=\x89\xdd\x0f411i\xbe}>\x8b\x9c\x9f3\x17\xeb\xdch\x0d\\\"\xc4MV\xd5y\xb4B\xb4R\xf4\xc0\x06\xdc\x13\x1e\xc3/\x00\xfb\x1c\xb1`<\xe6\xd7\xce4N\x98\xe3\xfe\x9c\xb9/0E(\x92^\nA?\x0b\x86\xe6\x19\x85\xd6:Jh\x8dV?\x1f_\xcb\xd8\xaf\xdc{\x9dO\xd2\xab\xd7:\xca\xa1\x9a\xb5l\xdb\xac\xf5\x82\x00\xcf\x18\x9d\xb04\x03se,\xe39\x13K\x19\xed\xb3]\xac\xb6\xd7\x94\x8de\x16\xed\xe3\xdbX\xce\xde\xa4\x0c\xdc7\xd0$\x8bZ\xe1c\xb3\x9du\xe3\xecW)\x17\xdb\xe7X/0\x13\x1f\xd2d+\x8c\xf8\xbbW\xa9\xb8\xcdX\xdan\xb7\xb8\xde|\xc6BI \xe5KQ2\x11\xda\x97sw\x96\xb2)*\xbe\xa3\x02v\x0e\x84\xff\xc1\xc9\x13h5\xc6K\xf4 \x8bj%\xc2^B\x92\xd5j8B\x9aA\x92\xba\x85\xda\x1c=Z'\xc7T\x0f4#\x9e;\x93r\x91\x81\xc9\x1d+z9\x88#\x81\xba\xd7Lz\x0f3\x91I\xc5\x81E\xac\x9b?b5Sp\xeb-\x95xA\xe5L=S9\xc3t \xcf\xea\x07\xe7UEe\xad\xc5\x84\xca\xaey\x82+m\xf5\x19\x94\xddZ\xca\x1a\xf5\xcb{H\x05\x15\xcf\xf2\xd31\xb1\x94\xed\xb6\xfd\xe6\xc9\xae\xc1\x16\x84\xb3\xae\xe0\x9ek^]k\xe5\xa0\x87\xacK\xafD*=\xe0-u>}\xe8\x88\xa9~\x1f3\xcfMY\xb6\x10\xff\xec\xfc\xe8\xad\x05\x8e\x15\xab\x9f\xfaK2\xedf\xf15\xa7 ffI\xd6\xb2\x90)n \xbd&\xd8\x9abe\xecO\xe0\xf8\xc1^\xd9\xa9\xcdh\xdak\x9au\xd9<\x96^\xbdj\xb4\xad\x1b\xed\xf6\x96\x0f%[\x8a\xeb\xbdAh\x9djZ\xe8\x19\x04V\xf2 ~\xd0H\x19\xe5i\xfa\xb5`\xb7\x13\xacp!\xcaV+\xad\x04\xc4\n\xc8\x91;\x16i\xe6\xe2\xb1\xc5y\xf3:\xe7=pc>N\x96\x13\xe6FnF\xe7\xac#\xd2\xf8:\xe6.\xd6\x10\x8e\x96\xeb\x0d\x06\x14x^=\xae\xcf\x86w&j\x8b\xbc\x1c\x0b\xce\xd9X\x8f\xab\xb6\x99\x8e\x13F\xd3\x1c\xa6\x15p\x03\xf4\x8a\xc5\xbbZ\xe5@6\xac\xb2\x04\xe2 [\x95\xc2\x88\x89\xc2\xa0\xbb\x99Vm\xa6\xdd\xff\xfc\xf0^\xc9z\x9f5\x08A*\x9ft\x95\xa0\xeb\xd5\x00e\xc3\xb2\x15X\xf2\xb9Y\x88\x006\xd1\xe5\xecN~\x8d\xc7\xdf\x1b\xa7\xbd\xd2\xa3BlP[\xa9\xc2.E0&];5Gv\xcb`\\\xdf\xf3\xa9MAY\xba\xf6\x81\xb4Z\x1b\xf3\x85\xb0\xde\x93\xca\xb5\xd4n\xbb\xf5\xad\xdd\xd48\xd9\xd8\xf3=(\xbc\xb3Hh\xcc\xfb\xe0\x13(c\x92\xdcu\x96\x19K;\xf9\x89\x14\xda\xb2x\xbcI.tm\xac!<\xe9\n\x9e\x7f|\xc6\x8aY#\x9c4\x13\x93\x89Z|f>\x0d\xfb\xc5 \x8e\xf20\xcc\x05\xa9\xcb\x1c\xc8&rLWp\xe0I\x15+\xcf\xc63\xca\xaf\x99\xdd\x07\xa3\xdc\x9dX\x8c\xab\xd6\xf3:\x8b\xee\xfb\xf3\x93\xb7g\x1f\xff\x14\x99\xd7\xb7\xe7\x1fOa\x89\xf1\xff\xfc\xf53\x9c\xdc\xb0,\xf3\xd0z\x8d\xb72\x1d\xf6\xa3AU\xa5-\x9b%\xeb\x999\xc9\xb5By\xa0\x87<\xce\x804\x07j\xedv\x0b\xbc\xb8\x8bT~\x19\xa7\xf1Bf9'\xd3\xd2\x91\x9f\x04\x9f\xeb\x9c\xa5\xe1r\x91TY\xe1\xa4\x15\xaeq\xa5n\xcfu\xb1\xfb\xd2\xd5G\xcdy\x11\x8e\xe5z\xed\xa1\x01\xeb\x9a\\of\x94s\x96\x0c\x0cF\x95\xc4\x9eI\xc4p\xcd\xc3\xfe\xb2k\x7f\xc1|\xd8+>\x9b\xc3\xe3Hjf\xceX#c\x8e\xd6k\xb52\xa61\xa7Ir\xff\xa0@\x02\xb4|\xad\xfe\xf3\xac]\x8b\xd8\xbb\xd6\xa0\xbc\x13\x04RR\xc4\"\x95\x8c6\xf6\x9fF\x01\xbdf\xff`\xc9\xd7\x85\xa2\x12|\xf4\x82UG\xf2E\x8a\x94^\x97w\x1f\x1a\xd4\x93\xfaD\xb1\x9a_MME\xbf\xc9\xdb\xed\xc2\xa7\xa19\x92\xe35\xb76\xeb&S #\xe4s\xcf\xe5\xe2-[\xa4L[\x9a\xb8\xa5m\xaaQ(\x14\x97\xc3\x9c\xea\x96\xd2J\xf3\n@-P\xad\xa3~T/Q_eL\xe9\x98U2\x0e\x94l \x12\xd6\x85O\x9eDQ\x9epKS\x05D\x9cZ>\xe0\x0c\xcb\xae\xe7\xa1d\x7f7\x0cU\x1a\x19\x84\n\x0bPB$.\xf4&\xe1\xde\x9eu\x89OSu\x8f{{\x87\xa8\xee\xd9\x10\x94#\xaa-[?\x12#T\xe1\xd9\x19\xea\xa7\xb6~\x0e\xad\x95\xcc4ci,3c\x07S&x1NQ\x85\x9d\xbe\xd4Z$\x91\xce7T\x86\x1cn\xce\xa8\x1a7GY\x0c\xa6\xd0(5\xe9~\xf4\x18*\xea\x9do1\x97\x87@\xc9\n\x01\x98u\xaf\xee%;\x9fN3\x06\x8c\xa8z{\xaf\xa5w\xf8\xa8\x1d!\x97\xa9\xa5U\xb3\xfeT\xf5\x85n\x99I\xdb.\x94\xeb\x85\xcc~a\xb7\x8d\xed\x17\xdf\xee\x07\x84B\xad\\u\xd7>7J\xda\\\x0e\xabpKo\x82\x19k\xb9Y\x90\xa0/\x8e8\xb8\x0d\x94C1\x02\x7f\x81\x96]\xa6v\x06\xb1ayrb\x90O\xc7\xbe\xb8b\x0eut\x17\xdc\xfa\xa4l\xb9\xa8\x90\xf7\x92).\xd3\xdc\xb1\xafm p\xe5\xdeLh\xb9a\xc8Q\xb1\xfb\x08}\x81\xba\x90\xad \xc6\xb9\xea?I\x87bT\xdc\x05`Z\xf5\xca\x9f\xba\x9e\xba\xbd\xdf\x0fa\x10D\xee\x1b\x13 \xca\xc5a\x10F\xee\x17 \xf51\xbfv>\x19;\xccL}\xe9E\xee'\xcd\xb2\x82\xe2\xb3\xa7J\x9e\xffY=\x84\x91\xfb\x06\x16\xd5D\xbd\xf5\"\xf7\x04\xf4\xbe\xfau7r?\n\xde1fV\x12| 9g\\\xe1\xbf1\xb9\xea\x05{*\x8f\xf3\xc6Df\xc0\xbd`?r?\xb3\x8cI;\xed r?\xd1T\xc64\xb1S_E\xee\x87e\"\xe3\xce\x178\"RI\x87\x91{\x92\x00\xeb\xe5|fj\x9c\xd0\x91\xdeA\xe4\x9e}p\xbee\xeamWu\x1e\xca-\x12\xe6\xbc\x99\x89x\xcc2\x95\x1cF\xee\x07q\xc3&\xce'\x96\xce)g\\&\xf7*\xbd\x17\xb9\xef\xc4\x92C\xd1\xdd\xc8\xfd\xc2\x98s.g,U\xef\xd0{\xe9|\x10\x13\x08\x07\xa7\x92\xf6#\xf7[\xc6\x14\xfc\xee\xa0\xf8\xab\xc8\xfd\xca\x14_NS\xd5)mG\xa8>\x1cFn\xd1\x92\xf5aO\xf5\xef\x17:q\xcc\xd1\xa5J #\xf7\x1b\xa7\xc6ZM5\xb3\x07SB\xef\xe7\xba\xec\xef\xcb8\xd5\xc9\xbb\xaa\xb3\xe9U<\x990\xae\xdeM\x07\xcd\x00\xf6T\xef>\x80>\xddQ\xc9':N\xbf\xfap\xa03\x9e\x14\xc1\x8fT\xe2+\x98\xf7\xbb{GM!\xe326F\x8fv\x8b\x87j\xbe\xa0\xa7N~(\x8b\xf7\x82\xd7\x80Z\xd3$\x86!\x85A\xe4\xfeIpUg\x18F\xae^\xe7v-!`\x18\x1b\x0b>\x017\xea\x8e\xbe%\xa6\xbe\xec\xc2@\x13A'\xceW!\x9c\xf7\x14\xfc\xc7\xec\x85{\x91\xfb\xed\xf3\x99N\x13\n+\xf7B\x05z\x9e-\x17z\xe2\x9d\x0f\x8a\x8d\x02\xad\xb6\xfax\x10\xb9\x9f\x15#\x0e\x03\xffBe\x9cMc3\xce\xf0U\xe4\x9e\xc2\xf1\x00\xad5~\x18\xb9g/\xe6\x0eu$\xa3\x0b\xa1\x86\xd2Sh\x12gz\xb6\x98=K\xbd\x9ej\xde\x88v\x10>\xea\x94\xcbX\xde\xabO\xbb\x91\xfb^\x8c\xbfC\xa5\xbd\xbd(\xbf\x04\xf7\x96)\x9e\x9f\xf11d\x82\xee\x83E;\x9b8o\xca\xb8\xe0xO!\xf07}\xd8`C\xadwX\x83\x9a\xfd\xedu\xe4*\xd8|\xa0\xfc>\xefd\xe6\xe2\xbd\xdd\xb0\x9c/}\x8a\xe4\xbc\x8bY2\xc9*\xd0\xdd\xd7\x18wC\xe3\x04F\xf2N\xa4\xce{vM\x13\xe73\xa3\x99\xe0\x99\x8b\xf7\x15\x9e\x82\xf6\x89\xd3\xc4\xf9\xc2\xd2\x1b\x96jJ\xaa\xbe\x85\x1a\x9d\xce\xe6\x0b-B\xa9>\xed+\xa4U\x98\xfd'*\xd9-\xbdW)\xb0\xa0\xd2\x9bx\xcc\x1c\xab=\xf5e/rM\xbe\x12\xaf\xf6\x15\xfe\x82M\xee_t\x10(=\x99\xf9\x8c\xab\x0c\x07\x91\xfb\x17\x9a\xc6\x94+\xec\xce\x84\xf3\x91]\x0b\xa9\xb8i\xe8\xf2+\xd5\xe5l9\x9d\xc6\xe3X-\x1d\xc3\x80\xa9O\x87j\x8a\xc4\xc2y\xcb\xa4\x8e\xab\x82\xf7\x15\x16\xffB\xf9D\x07\xef~\x1f\xcfc\xe9\x9c\xde\x8d\x19\x9b\xc0g\x85\xd5\xaa\xfdS\x089\xa1\x93\xd4\xb8\x99\xbc\x15\xe9\xf7\xadk\xe6\x91\x0d\xfeu\xa0\xef\xa8\x84p\xfd\xa1\xa0\xd5\xc5\xe6`\xbck\xa4\xf5\xd8\x94\x14\x82\xfd\x0f\xa9\xda$\xe8\xc8\xe2l2o\xdb\xb5&\x10\x83D~s\x01\xce\x87s\xd3{8\xa6\xce_Hn\xf3\x8fp\xfe\xd4\xb2\xad\xff7\xb8\xc2\x17\xf9\xce\xa1\xc3\x9f\xe5\xf9\xfc\x17.\xdcp*\x96g\xd79\xcd#\x97\xe4\x15\xbf(\xc3~\xae\xe3\xdc.\xa4\xc6\xde\xe6\x19H\x06W\xcb\xf3\\\xd5CSPz^o\xc4\xd6\xa8\x97\xbdf\x1b\xe5\x9ey\x1c\xb7k&\xea\xc0\xbaLT\x00\x9d\xe6z\xd2q\x9c\x8e\x97 U\xec\xb6\xd1\x91\xfe\x94\xb2)\xd8#\xeb\xd7T\x08\xf9\xd3g\xa6}\xa2\xad\xedY+M6+\xa6\xc69\x80\xac\xda$\x16\x80~\x80\xa3R6\x89$\x9e0\xfd\xe4N\xe3D\x9b\x13\x0feY\xcf\xa0\xe1\xf6\x93\xc4\xad\x00E\x12.\x15\x95L\x0b\xc5\xd4>9\xa4r\xd6t\x074\xf3,h[2E\xc9\x02n\xb3\xa2d]\xd3S\xd5l\xa5-0dlj\xccn\x8a\xab\xa6\x1b\x1a\x84;\x0f\xcb\xb1}\xad\x064\x98y\xabC\x9e\xb7;\"r\xc8\xbb\x06p\xc6|\x12\xb35\xc2\x0f\xebZ\x87\xa4\xf8\x8f/\xe7\x1f\xc9f\x1f+\xb9\xd8]\x9cm\x88\x88pG\xcc:\xcb\xb9,\xe2\x12b \xf1i\x9b\xee\xb1\xdb\xb5n]Z\x9b\xd5\xe9NU\x8bg\xcdQoH\\\xde\x97\xa8,\x0f}a\x88AXQ\xb8\x19\xbb\xf8\x95f3\x8f\x17Gl\x1a\xfc\x8a\xc9\x07\x0f\xe0\x86&\xa5\x9e\xb9\xaf\xa6kU\\\xad\xca\xe7,\x04\xc4\x05\x83\x9bk]\xe7\x82\xab_\xa0M\x10\x1c\xa9\xfb\x023,P\x9f\xaan\x82w\x95j\xe7/\xe9d\xd2\x80\x06\xff/y\x7f\xc2\x9d\xb8\xb14\x8e\xc3_\x05k&\x1e\xc9\x08\xb0'yr\x13lY\xc3\xd8\x9a\x19\x9e`\xf0\x05<\x93\xb9\x92\xec\x08\xd4\x802B\"\x92\xf0\x12\x17\xf9\xec\xef\xa9\xea\xd6\xc6b;\xb9\xef\xef\xfc\xb7sl$\xb5Z\xbdVW\xd7\xd6U\xc5\x861\xe4F\xc8\xa9B\x0e\x00\xd8\x05-Q\x83:G\x01\x84q\x8amO\xec4vP\x8e\x15\xca\x8f\x00\x81\x1a\xac\xb5E\x8c\xd7\xff\xfdGS\x8c\x83\x93\xb5)P\x13dv\xcb\xdd\x992\xde\xf1\xe2\xf0\xb2g;r\xbcm\x06J\xca\xcal\x8c\x9f\xc3\xef\x19\n\x8e\xf8\xeb\xfcL\"y6\xdb\xce\xfb\x86)\xbb\x1b\nQ\x06S\xcd@\x8dl\xe58\x97\xa8\x84E\xb6\x9c;%\xc9\xbf\xe2\x0eS\xf9\xe9\xc1m\x9bu^\x01\xb9\x9f\xa0\x10WH\xfd`\xe6\xf26\x10\xa6\xf2\x8a\x1aw\x0d\x91\x19\xf6\xe7\x1fe,d\xb8J\xea\xce\x9a~M\xbc*\xef9\x9b\xbbC\xb6\xe0%\xae\xef(\xd0\x158\xc8\x8a\xb2kK\xa0\xf7<\x8eV\xa2\x8a\xbc+5\x115l\x08E2\xac\xbc\xd1\x82\x1c7\xed\x89\xa9RDQ1\x99\x9fmC\xed[\xadDY\x9d(nM\\\x01\x84\x07\xde\x8b\xd6\xaf7\x83\xd6\x07\xe3\xa6\xdd\x1d\x1a\x1f\x8d>7\xa1\xc3\xc2ey;U\xc1\x0b\xa8%\xfc*Z\x13-\x83\x8d^\x11@\x91\xcb\xab\xc3\x0c?l=z\x19\xab~A\xe08\x16\":\x19\x81\xd1\xa9V\xedL6\xe5\xcb\x9e\x92\xb9Y\x89\xb5H\x0e v\x97\xcaq\xbc\xbf\xbf\xf54$R\xa6:\xbf\xc8\x0bu\xa243%^\xbc\xbf\xbf\xc8M?\x99\xf28\x91\x99\xb2\xcai\x93\xa5\x90#\xe8\x98\xde\\\x90@6}\xb7 E\x85\xfc\xb8\xf0\x97S/h\x86*\x8f\xa9\xd8d\xabB\xa6 \x91\xa4\x1aS\xc7\xb2\xb2\x1a\xf3\x13-/\xa4\xba\x8e\xbe\xdfn\xf5T\xf4F\xa9z[\xce\x7f\xca\xec)\x1f\x10LQ\x8a~\xc8\x91\x94\xa6\xc8\xa1\x0bYQ\x8e7)g\xf3\xd0\xd6)\x06\xc5\xa1\xadn\x81\xff\xb7\xb6.\x07\x1a3\x8fl\x15'\xea\xad\xad4\xe5@X8P\xca\x91\xad(M\x99\xa2\x99\x07\xbc\x14\x91z\\B\x12\x11\x80\x1c\x8aC\xa3a\xe6\xc8\xf2\x91\x8e\xd0&\xaa\x08o\x17\xa8\xe1\x02{\x1a7C5\xd34x\xeb\xa7\xb0w\xfb\xb6\x12d\xec\xcfG\x9c\x8c=\xfaA\x1c\xe8+\xd1\xb3\xb1\xc0\x85\x1e\x1ff'\x0fiQ!\x93\xf1\xf5!\xd8\xdf'\xf1\x1d\xb2E\xc8\x1b\"\xaa\x96\x99\xa2;\xc2\x1bfV\x9a\xd2\\\xc73\x1b\x0bt\x9c\x1e\xef\x08\xf9\xa9\xceD\x1d+\xeaBc\xe6\xd8>\xde\xa8cQ\xa8c\xa1.E\x1d\x8e\xe6\xa4\x07]\xe2<\x99(W'\x87J\x7f\x1d\xdf;\x85\xb3\x9b\x8c6mE\xf55\xa7\xb0\xc7d\xbb\x9a\xcc\xb4 \xddb|[\xd1\xc5B.D{&\x1aHizrHU\xac\x1f\x83(\x10\xaeL\xf5\xab\xd2+\x89\xb2\xa5\x83\x9c\x96\xc7)\xf82A\\FE\\\x15!\xea%\x94\x8f\x83\xa3\xac\x95\x93\xb6+\xc7\x19H\xb7\xb2:\x87)\xd1\xdb\xf5}\x96Z%^\xa9\xc9\xd6\xb6\x05\x1b\x0e\x90\nU\xe2D\x13&\xf9\x87\xa0\xb9\xc6a \x18J\x1dKg\x87|\x84\xbfh\x9d5i\xc3\x9el\x81\xcf\x89\x80O!\xfc\"\xd0\x99(z\xbcQf <'\xca\x13\xc8_\"\xcd\x13\xc9`b\xe2n\xf4\xdaQs=1\xd1\x8f\x9a\x19\x9aI2\xab\xaa'\xcfS \xb0\x0f\x90\\s\xd3'\x0f\x9ff\xda\x84\xd4Fk\x1d\x99aG&*S\x03\xd5\xcd;\xe2PRRHB\xf8_m\xac\xf0\xf8\x99\xf1T\xdd\x021\x16\xa8\x13\xb1.f\xda2'\xfa]u\xa1\xa8\xf3L\xb4\x10\xa7\x1c\xa7:-Qh3\x82*E}\xd0\x88S/\xa5\xddj\xd3=\x8d\xca,Qz#-]\xf2\x81\x9b\xcd\xdb\xb1_\xd5fH\xe7\xf0P\xc4a\xc0\x8f\x12\xdfo\xec\xba\xa9\x0c%\xc2]\xf7$\x8f]\x96\xca\xe3\x11 G6?\xbf\xbep\"\x16$<\xceN\x88\xf3\x8ftWF\x84\xadV\xf2\x98\xa4\x05\x98\xf9^l\xca\xf3\x93\xfb\xba\xcb\x16\xc9\x0c\xc0?\xb9/5(\xdd\xa7\x8f\xd7\xccqo\xc5\xe1\xc2,\x1a\x05nn\xf1\x82T%\x81z\xa4`5\xf7\xcaJx\x11~\xc4\xb1nNT\xde\xb6&S\xbf\xb1\x87&w\xa9\xf0!\n\xe7\xfd0L\x9a\xb1JMh\xceU\xe4\xb3\x9bSu\xe6\xc4\xb3\xe6\x838\xb99\x13\xecd*\x96h\xce2 \x85\xca\xc4\xa86Gj\x8a6\x9a\xb7j\xb1\x17M\x7f\xa5\xa8\x8e\x9c\x16B\xda*>a\x086\xd5\xa3\x14\xb0v\xe1&\xde[\xd3>\xa6\x13\xeb\x1c\xd7HO!\x1b\xfc?T\x83\x02\xd2Q\xb7\xed\xf8\xde\xf1v\xb2\x8c\x0cdp\x18H~\x817J\x91\x9cd'<\x91B\x83\x1cSf\x1c,\xca\x8c7yf|:\xe1\x89\x85\xcc\xe9\xc8\xd1\x07\xe9C\xfeQ\x9aR\xf8\"\x1db\xfa\"}\xc8\xbfHS\xf4\xa3fM|Q\x1c\xfeT\n\x93CU\xf6e1\xb5V\xce\xc4\xcb!\xa0\xa0\x02\xe8\xae\xe0\xa8\x08\x1fk\"\xf98\x85\xc7\"H\xd5}'N\xdai\xe4\x92F\x11\xa5)j\xa4%/\xce\x9cQ\xba{\x9a\x16\xe9Q-h\xaeW\x94\"\xc6-\xa9\x9c\xf8\xdeA\xbf\xa7\xf0\xaa\xf3y\xe5\xab\x96O\x1b9\x8f\xe6\xf0C?\x9a\xd7,f\xe2\xfaP\xcc\x983JU\xa9!)\xa5o2\xac\x9bIK\xf9'\xa9;\xad\x00!U\xe14\x1d/\x9dt\x91\x98\x87\x84\xb8\xc5\xfe\x08`\xa6T\\\xc6&C\xecbkQ\xdde\xfc\xe8A@zR\xcc\xa4\xa6t\x83\x9a\x83\x13Y\x1c\xe6M+\x17N\xd1\xc5\x8b/\xb1 \xdc\xf9\xc3\x0b\x15\x98/\xdd\x9c\x8f\x84\x98\xfa\x87\x7f\xf1\xcd\xf9\x07\xe1\xa5\xe7Hx\xe9\xf9\xf1\x88\xbb\x81\xc0\xeb\x18\xafo\x95\xfa\xef\x8b$R\x97\xb8\xa3\x7f\xaf\xd4#6^F1S\x17\xf8\xf2{\xa5>\xf6\xc3\x80\xa9\x13\xdc\xe7\x7f\xfa\x97R\x1c\x0c\xd5\xc5O\xde*u/\xee\xb3\x89:\xa3j\x7f*\xd0\x02\xf3\x94rC\xda?G\xf31\x85\x91\xe0\x90\xd1G\xca,\xa8F\\\xe2\x18\x93\x97\x10\xcd\x11\xb3\x19*\xeaD{\\\xa9s\xed\xe8x~\xac\xcc\xb5C\x15y\x9cG\x8f\xceI&\x0f\\\x1f\xe0\x85As\xefpU\xf2\xa6D\xd4\xa27\x91]\x12\xe6)\x9e\x90\x8e\xc6\x89\x13%\xf1\x17/\x99\xc9\x04\x18\xdeD\x9e\x98\xf8\xc6\x06`\xf5\xd7\x13\xef\x9e\xb9|\xd3\xc8\x9f8\x91+\xc7\x08}U\x91[IO{6^5$Ex5i\xe0JJ\x81'\xaa/\x08z\xf8\xd6\xb0T\xa5\xfb\xda\xdc\x8bB\xa9\x89\xdf\xab\xbclj\xb5W\xbfe\xd1(\x8c\xd9\xe9\xd1\xfe~\xc9\x18C\xea\x13\x14{\xc1\x94\\\x9bH\xeaRQ\xe7\xd5\xea*?';\xd5\x16\xf2\x18\x89`3\xb0yx\x8c\xdd\xa5\xc9{G\x9a\xa6M\xf5Y}\x1c\xfa\xe12\xaaG\xccmf\x0f\xd3\x88\xb1@\xa9J\x1f\"gJ\x8aK\"\x19\x96 \xe9\xb8\xa8\xc9Y\xd6 \x8c\xe6\x8e\xaf\xa8\xbc<\xee\xcfz\xa3\xd7\xd8\xaf\x89\x938>\x1f\xbf\x87\xa2\x93\xc2\xac\x0e\x92Q\xe5\x15U&\\\xf3&U\xa9?$\xa1!\x0b\x0d$S\x85\xa4\xeb\xe18KI \xd7\x07\x85\x8fHe^\xad\xaa\x1b-\x99\xaab\xca\xc8\x85g\x92\xa3\x06\xa9\xf1\xdd\xdb\x1f\"6\x91TIR\xb2\xd0:~\xae$\x98[\x99l\x01dEe9]=-\xb2e\\\x86\x15\x03\xe4\xf7k\x87LX\xa6\xe8\x0b(\xb2W\x96\xef88\x89\x8a\xf6\x86\x8fL\x93\x0f\xd5\x08\x07\x9fj\xc8\xadB\xb2\xaa\x1f\xca\x0cm\x9c\xe1\xbb@\x98\x80Rd\x19q\x9fb\x1a\xcb*\"\x9a\x0c\xffH\xca\xf1\x92\xcbC\x00\xc4\x8d\xf0\xd7#I\xaa\xabeq\xcc^I\xca\xb1\x9b*\x98\x8e(\x84\x8d\xf4J\xaa\xba\xe6\x91\xad&\x9aKG\xd6\x97\xda\xb2\x80\xca\xb0\x94\x99\xfa\xa0\xde\xaa#\xf5^\xbd\xcb\x1a\x99(\xea7M\x9eiw\xd9RQ\x1f\xb48\x7f\x98\xed\xef\xcf\xd2\x8a\xde\xea\xb3\xe6\xc3\xfe\xfeC\xfe\xfc\xc0\xf5LM\x1e\x11\xe8V\x13O\x9a\xa6}\xd3s\xfee\xa9/\x11\xdd6%IM\x94\xa6\xb3=]\x0d\xeacg\xe17\xd9\xd0\xc6\xb2\xa1N(\xfc\x91\x81x-\x10x\x8d\xcf\xddM\xd9\xfb\xea\x18Ao'Z\xbb\xadN8V\x0b\xd6\xb0\xda\xcdq\xb0\x8e\xd5n2\xc01\xb4\xa9lhs\xd9P{j\xa2N\xd4[5P\xf0/\x92\x17\xb2\xa1\xf0\xc7u\xf1\x81A\x86Z;\xc7\xe4\xa31\xe4\x03\xa2\x06\xf5\x99\x13\xb8>\x8b\xe2\xfd\xfd\xfc\xde\xfc\x96\x07c*&\xcaKj\xc1\xa6\xb7\xb2\x82O\xc5\xd2X2\x95iS\xda\x82\x0b\x93\xa515\x92\x19o8\xdb\xe1\xec\xb6\xd4\x97\n\x83B\xcdO ]\xf5Q\xc8\x19\xa5q\x181I]D,I\x1e\xa8\xf2\x98;\xecF\xa2g\x0d\xb6\xc3\xe24,p\x1c3@g\xdaXf\x02\xd0\xd9&\xa0{Z\xa9o\xf30a\xff\x00\xd0\xbdM@\xf7\x94\x15\xc1\x88\x86\xc4bX\x84p!\xb1\xf2\xb8\xd9\xeb\x0eP\xf0\x145\xaf\x05`/m\xf5S\xf5\x89!\x7f\x16\x08\x9f\xa8\x96\x95\x00\xfaq\xf5T#\xd8f#\xf8\xa1\x11!\xa2\x1ci\xb7\xea\xbd\x16d~h\x01\x84{\xdd\xed\x9a\x07\xda\xb6\xc2\xdc\x8d(b\xe7\x82q\x00\xee*\x81\x9e\xc8\x81\xd2d\xc2S\xa8\xf2\xff\x04\x98\xc2\xbe\xfc\x7f\x1c\xa2\xfe \x0ceD\xc5\xad\xfc\"\xc7\xb6[q\xf6\xee\xecY\xf1\x91\x9cdLUb\x06\xf6\xfe\xbeKWU\xc29\x93\xb2\x19\xc54\xe2q\x05\xf9\xbe\xceq 5\x05\x8f\x8a\xb1\x17\x9a\x9e\x9d\x12AE\x89n\xa8\xd4'^\xe0\xca\x1b\x84\xa2hq\xa9\\\n\xf9@\xfe\xfab\xe2\xc1wlzdgYY\x84 \xf7\xb1S\x89\x97#\x0e\xed\x15'\xa13-\x8e&;\x14JB\xf6\nT\x93yd\x03H\x92\x921\x0e\xf1\x96\x979=\x96\x9ftH\xa95\x8ag\x19\xd3\x86\x8c\xdd\x05\xa0\x8b\xf6(\xf6j\xb7\xb9wD\x92\xc2\xb8i\xda*\xbbO\"'n>\xaeT\x97\xf1\x83M\xc8\xdd\xd2\xa0\x16\x12V\x8a\x8ae\xa4\xdb\xbdK\xfcm=\"\xa2\x9d!G\xcd\xc7\xd4\xd7J\xb9Z\xc91{\x8a\xd9LI~\xa2\xf4=\xd5WT\xac\xb7@\xd4{j6\xbb\x9a_u8\x17B\xe7k\x16\xd4'~L\x8c\xfb,\xa4g\xea\x16\x17\x91FB~L\xe9\xbc\x97&O\xb35g\xb5\x12\xc1/XI.p,\xbaE\xcd\x8f\xb8$\xec\xf4\x90NOf'\xa5\xf2\xd7#'\xce\xc4\x88\x89\x1c*\xc7K\x99\x91\x97(g\xe1\xd5\x0b\xf2\xae\xed\xe2\x03\xee\xffVzU\x92\x8c\xad\xd4HQ\x8b\xc5\x8c\xc3\xf9\"\x0c\xc8'\xfd\xd3\xa5\xe4\x197\n\xd9%\xbe\x88\x14\x15\x9bM\x08[f\xdb\xfcqq\xee#G\xf5\x82{\xc19\xc9 !\x95\x97\xaf\x0d\xdbq\x88\x03\x17V\xabj\xe1\x8d\xc3\x05\x91fh\xf39\x92\x0b\xe2&1\x90\x0f\x85v\x07*+qn$\xd3\xd9\xd1\x02G{\\\x1d\x93r/!\x07\x10\x88)\x1c\x0e9\x81\xea\xd4\xb9O\x0f\xc7\xe7\xfb\x85S_.\\'a\xae\xc6T'\x9d\xdbP\xcd\x85Dq\x1abL-U\xa5\xed\x1d\xaeJ\xb8#'\xf3<\xf5\x91\x97\x83\xacB\xda\xe1\xe6\xa3\xe8q\xd3\xdb\x18\x04!\x9d\xdf|\x91)\x9fU\x04\xb0b\x06|^\xe1\x9e\x88`L^-\xd7\x96)\x9d\xfb,=oU\xc8\x96\xf2h\xeb\x85\x88>\xe3\xd2\xd2r&\xd4W\x97\x9a\xec\xf3\xcc\xb4\xca\xd4\xa8~s\x13/\x90* uz,#V\x1f\xb0D\xf6\x15EQ'\xda\xa1\xeaj\xc8\xe0m\x93\xc7\xa7\xd2\xe5\x12\xb2.\xc0pCR\x00\xd6_\x17\x16JC\x08\x9c\x9f\xfc~\xfdu\xf9\xfb\x8c\xf0\xde\xdf\xdf#\xc9<\xf9\xe6\xd6\x8f\x9a\x87\x88\xd8'')\xefz \xd47\x12\xf3(\xdf\xf7\xb5y\\c\xf7\xce|\xe13\xac\xfc\xe4PyB\xa6@\x87(\x101\xa6\xe6TIX\xa1\xc0\x00\xb8o\xcc\x14u,{\xd9\x1a\x99\xa9\\\xe0\xb7V{\x95\x9e\x05\xda\x9b\xd9\xb940X{\xb3\x12\x07\x03\xd7\xbe\xd7\x9fh^\xeb6\xf4\xc8 s*\x88\xaed\x02ZIi\xae\x0f\x8e6{J|\x92u\x95f\xc6\xf1+$\xfc\xad\x84\x93b\x879\x1b=\xa7\xb5{\\\xee\xfc\\Y\xad\x0e5M\xdb\\Ff\xbc\x86\x91l1\xa1\xfb\xfb/\xca\xbc\x0bA\xdd\xcaq\xc1\x95\xf6\xaa|V'Q\x02\x8eQ7h1\x92\xb2o'\x14\x12E\x0d\xb8.?='\x9a\xdaq\xb0\xd5q\x986Q\xdb\x82G\xd7\x91\xae\x9d!\xf4\x8c\x8c\x1a\xa5\x84\xcc\xe6\xe7\xc2\x9d\xa6\xad\xa8\xb7[\xd0\x7fj\xfcp,\x87Z\x8e\xb4\xc2m\xc6\xabE\xbb\xa7\x9d|z\"\x8b*\xd6\x8do\xb8=F}\x84\xe4\x17\x13\x03\xbb!_0\xed-<\x85\xd0\xeb\xad\xed\xd7[\x06jM\xb4\xb6F\x878A%\x9cL*\xc9\x8cUX\xe0\"\xec\xa5\xdfW\xc4\xf7\x12\xee\x94{\x87\xca\xf1ze\xdb\xb7\xb7\x8diI\x1d\xf3\xec\xf0\x071\x92\xa3\xba\x98ra\xbc\xa6\x1e*My7\xed\xb4!>\xcd\xa4\x90\x05\xe9i\xca\xd3\xecI[$\xa7i\x0b\xd33\x1bE:\xf6\xf9\xea\x06\x88W\xf9\xaa}aub\xc5j\x93\xc2\xf6\xce\xb2]Y}\x14U7\xb3F\xd4\x8eV\xf8\xdd\x8b\x9b\x94\x8d\xc0\xcb\x9a\xb4F \x15%\xc4\x82\xedp\x89\x1f\xa1q\xa1\xf0I\xd1-\xbb\xf0\xa2\x10 \xf55\\\x10\x84S\x8c)\x01\xbc\xffl\xe5\xff\xf3\x0f\xb3\x95~\x9f\x1e\xfa\xe4\xcc1\x1d\xdc\xa0;\xed\x91\x86\x92\xe4K\x94JwZ\xccm\x18I\xfc+,L\x9cL\xa9)\xd2\x8f\xe5\xbd\xa4\x9e\x1f\x05\xc9\xef\x05D\x9fho\xf9\x10 \x1a*\x17\xa8fEp#\x00AVQ\xf5\xd9\x93\x86\xb8\xa7L\x81\x972\xf4\xf9\xf9\x08\x0e\xae\x19\xab\xa1\xed\x1d\x16\x16\x1d\xf7\xe7^^oZ1\x03QMZ\xda\x9c-\xcbU3M\xdb^\x15\xe3\x88\xd0R\xc4\xea)\xe3\xb6h \xf7$\x8f\xd9\xcd\xc5f\xb5\xe8)\xfem\xa6\xfc\xf3\x96Xy%N3\x00\x90\x03\xeau\x90\xad\x1a\xa6\xa6\xc2y\xb2\x1a\x17%\xe0@\xdc\xcb\xc1\xae\x86\x10^\x1e\xc9\x01?\xcb\xb2\x19\x8ee\xa7B\xb7\xa8\x93\x0d\x85N6\x9e\x91?\xf83R\xcdzE-\xaeST\xc9\x16\xc3\xb1\x14\xf4\xb6Y_E\xe8\x92Xy\xc4\x99\xe6\x93\x1bg\xf0\x1a\x17\xe05&\xb1%O\xa5\xbbbj}\x83\xa1\xc1\xb1\x88\xc5\xec\x8b\xab.\xae\xd5\xa3\xe6\x91\xf0`-RN\x8f\xf4\xa4\x19\xe2\"\x1a\x0b\xd7n\xfe\x8a\xe2\x12\xa4o\x83f(\x07\xcaq\\\x9f;q\xc2\"j\x04\xbf\xd5\xfc\xdc7\xc4b\xabe1r\x8bb\xd1\xea\x8f\xb8X\x8b\x11Go\xe9@\xf0KB\x90)\xc7\xc5\x05/l\xc9E\x12\x1d\x0con\x14\xbeZ\xad\xe4\x18)\xef\xa3\xe3\xc9\xe9\xe1\xb1\x82$x$\x8f\xd3A\xdbDq\xdeDv\x08^S3dN\xdf\x93:\xa2ZM'\xc6\xf4md\xf7\xe5P+$\xe4\xdc\xd7Bl\xa3\x97\x8e8,\xfc]L\x8e\xfa)\x06\x07\x99I \x17\xbe\xa1&\x0d\xb9\xeb\xb3\x98X\xb4-|\xca\xfa\x07d\xa7WN2\xf9\xc76\xceI\x1at\xc0\xa7\xc0}T\xe7\x86\x80|\xe8Mg \x11\xad>\xab8IE\xaa\x8a\x9c\xc7i\x1f\xae\x82\xb4[$\x93\xd8\xd2lO\x0eSL\x92v\x8d$\x8f/hn\xf9\xdbo\xec\x81\x82\xc7\xfc\x83\xee\xe7\xdd&\x81\x88\x1c\xe2\xd2\xe0gJ\x84\xca9\x95\x0dqI\x19Y\x15\x93\xe1\x9a\xaf\xa6==\xc7\xc59\x11\xd3\xe5$k\xb3\x95\xb6S[\xaa|\x9e6\xdb\xce\xbb\x1d\n\x1f1r\x96-](i\xb6\xac\xa8\xf4\xc5\xda\x97i\x83.<:O\xce\x05\xb2\x89\x13MY\"\xa5e\xe4p\xa7\x85i\x836F\x97\xc9\x9bm\xcc\x9e\xe3\x7f8\xd4\x9b\x90F\x140\x87\x11m\xef\xb0\xa8j\x1eS\xc36\x83^\xe5(\x91\x1a\xcf\xfd\x99\xd0}Lg\xab5'\xbb\x1d\xa4\x81\xfe4G\x18`\x99\xb6\x1ai\xa6\x9d[\xb8\x84\x84\xba\xd3\xb8+\x84\x8b\xf6J\xd8\x95\x0e\x13\x08\x11'\x1d Y\xefo\x92\x05\x88N\xb8\x85L\xac\x1d\x1e\xc7'^\xca\xef\xc6\xd5*\xaew\xcf\x8c\xed<\xe8\xa3_p\x8aU8lz.\xc4\x06a$;\x85\x93=\xc8 \xca\x99j\xdd\xc7\x8ft\x1f \xfd\x897]F\xd8S=\x8d#\xc0\x85\x97\xf9\xe1U5T\x1f\xb9\x85\xa2d\x9e \xfe\xd2\x96h7\xe4\xec\x8aC\x12v\xdfV\x94f\x94\x05\x04\x08m\xa5);fhk\xc5\xaf\xca\xdf \x07\xb1\"\x8b\x15\x1e\xfdJQ\xd7NM*J>\x1aIq4\x98\x9c\x98\xb1\xad\xc6\xaa\xa7&\x05?:\xe3\x92\x049\xe1\x1b\x03\xff|\\\xfc\\\x18\xf4\x8c\xcd\xd8>\xc6\xa2\x96\xb6\xba\xa4\xa2V+\x8f+\xd0W+\x99\xa9\x92\xa4\x9a\xb6\x9a:\x04\xf6\xb4CB+\x82sX\x8b\x03\xc9a\xa0\xb9\x91\x8a\xcd\xc0y\xe0\x01 D\x1bR\x01Y \xb4\xf5?hZ\x16=]\xdf1\x0d\x883\x1c\xf3\x08\x7f\xbe\xb7\x95&>\x9b\xf8lk\x8e\xf96\x8d\xf1^\xf1r\xea\xd3+\xf3\x81'\x89^;j\xb2\xd3\x84\x04*Y.\xa7\x08\xbd\x8e\x9a\x9f7\x12\xa0\xeb\xa8\xa9$\xf9e\xa0\xebk\x87\xc7\xfeI\x16\n\xde\xe7\xa0\xeb \xa6\xc8@w\xfc,\xe8\xc6;AwL\xa0;~\x11\xe8\xc6\xcf\x82nL\xa0;\xde\x02\xba\xf1N\xd0\x8d\x8b\xa0\xbb\xe5\xf8N\"\xce~\xa6f\xc5\xd8\xfd\xa7\x01\x9c\x8fYR\x1c3\x84J\xdfV}\xd5)\x01\xf8\x12\x89\xeb\xc5\x1a\x94sy\x9e\xc7\xa1\x9d\x97\xb5(\x96E_N\xb4\x85\xe9sh\x9f\xd8\xea\x84\xcaU\x97\xe6\xc4\xd60aU\x8c*\x9b\xd9\xae.\x8f\xd7\xfa\xac\xd2\xa8,W\xce\xaeE\x02\xc0\xe5\x93\xce\x93k\xc5\xdf\xbaV\xfc\xa7\xd6\xca\xb8\xb4V\xc6O\xaf\x951\xae\x951\xae\x951\xad\x15|6\xc7\xb4V\xc6\x85\xb5\xe2\x94,\xec\x0b\xe7\xcfs\x13$\xbd\xcc\x14\xe4\xa2\x93\xc2\x96Bd;Y\xc0\xa5g\xb7\x95L\x02E\x9en2\xdb\xa00\x9d\x0c\x8f\xbc\xc5\x90\xb1\x9eydskW\xcf<\xb4\xc9\x8e\xfd1(\xc3]\x94\x1a\x9d\x87\xea\x91\xf0\xc1\xb5\xca\xbd3\xe5\x07\xe4IN\xf1\x1cG\x91\xf58\xca\xe4g\x8f\\\xec}\xa8\xc6\x8c\x05\x14\xd8\xf3\x0bs\xbe]8\x0b5 \x17\x14]4\x9c\x8f\xbc\x805\xf7\x8ex\xd8\xd1>\x9b\x0c\xbc\x91\xef\x05\xd3\xb8\xb9w\xb4*2jS\x96\x9c\xf3\xed\x94\xc2/4#\xf5\xce\xf1\xbf\x0d\xb8Fy\x8d\xe5Hu\x07\x19\xdc\x85\x9c\xdaG\xdaE\x8bdEQ\xf9\xf1\x86$\xd3\xe8\x1cg\xb9\xc9Z\x9aN7\xa4\xaa\x06.r\xa5\xb4\xcc\x85[X_o\xef\xfe~R\x96\xc6\xcbNY\xf2^\x16\xbb{\xb2\xa3\x92\xef_\x87Twu1\x12\xfb\xfb2\x9d\xcd\xecM\xf6\xf7\xd7\x164OVx@t\xf1\x94I9\xb9\x9cBN6u\x15\"'\x05\x9eV\x14\xfe\x80\x89\xc1\xc3\xd6:09\xaf\x03\x9f^V\x07\xe6\xcc\xea\xc0\x07\xf2\x85\xc8\xb6\xd5A\xc9Y\x1d\xf4\xf4\xa2:(gZ\x07/D\xf5\xf8|\x13\xf5\xc7XP\x9f9\xb8\xd2K\xd3\xfa\xd4\xc6\xb2\xbf/\xbe\x8bY\xc2\x1d\x0f\xa8a= \x17\xda\xde\x91\x1afR\xbf\x02`x \x9b\xc7D\x02/\x04J\xd0$J\x93T&\x8b\xd7*\xd1e\x8a\x82\xc3\xe2r\xff,\x8e\xdf\xe6\x1fn6f3O\xa9\xf0\xb5\xb7\xbc\x9a\xb5\xc4\xad\x15\n\x94\xe5\xb1\xe7j-f\xdcQu\x9ee\xbd\xfe\xfcM\xa1\x11\x8b,1CW1 \xcc\x8bo\x04\xa5YLC\x9a\xa9\xd8\x80\xfcMC\xaa\xc6*\xe3\xd8]\xf5h{\xa4\xe3\x02 \x8b\x82\xcb\xdd\xb5mdx\xf4\xb5-\xc9\x1b\xf5\xaeg\xd8Z=_\x8ei\x95c^%O\xa4j\xf8\xb2\x1b\x97\x8b\xa6\xc4\x86T\x1do\x16G+o\xbd8J\xe4\xc5\xd1\n[/\x0e\x13\xb7\x16\xc7\xd7\xc7Zq<\x91\x8a\xe3\x8bi\xad8J\\/.]K\xf5 L\xd6 $\x08\x13\x0e\x10A\x98d\xf3/\xd6M\xad\xa6&\xcf\xee\x19\xb7\xb9\xfb\x9b\xa24)\x0f\xa8\x1977\x10\xc1c\xea%R\x12\xfbA%\x0fl\"\x1d\xfd\xfa\xab\xd4\x94\n\x9e\xc6\x1c_R\x8f\x0e\xbfoJ\x86\x13\xf9\x0f\x95\x99\x17$\xb1\xa4Jo)\xdf`I\x81'&K_R\xa5\xef))u\xc7\xc5cM\xfc@ig>\xb9\x0c\x12.\x8e\xa4\xff\xe1\xdf\x96\xfc\x1eI\xff\xa2\xc4sv\xcb|\x1c\x1d\x91\xbeR\xa3\xfa`\xd8\x1a^\x0dn\xcez\xe7\xc6\xa0|\x1a\xa3\xc8.\x12\xc5\xc2\x05\xb2o\x1e\xa5\xc0\x99S0\xad;g:e\xd1[!\x1a\x94T\xe9\x96{?\x92\x9a\xd2\x8f\xf5\xb7\xf5#I\x95\n\xbb\x8aD\xae\xb7nY\x94T\x06\xfc\xcb\xca\xdb\xfaa\xa5\xa0\n\xad$a\xa5\xb7`Ak\xe1U\xbe\xaf\x1fV\x9c\x80\xc2-z\"^\xc6\xdc\xf1\xb0\x10\xd2d\xd6\x7f\xc7q\x1aa\xc2\xe3FC\x9aR\xbd\xb1\x96\xc6\xf3\x87N\\\xcb\n\xc4\\\xc5\x04Qd\xe8\xc4 \xbd\xa3;L\\\xa9H\xecRl\x8d\xa6p \xd4hL\xbdd\xb6\x1c\xe1\xc6\xd8\xb8`\xd1\xdcq\x19\x15\xf6\xcdKt\x9a\xee0\xd2\xb0\xff\xbc\xf71\xb62aT\xf0<\x1c\xcf\x1c,S\x84a\xf6&\x0f\xf46\xf5\xc0(5MS\x1a9#\xe6\xe3\x1b\xf5Q\"\x91?\x16aJ,~{x\xf4?\x92\xbd\xb2\xed\x95*El\x11\xc6^\x12FT\xc02\xf2_\xd4\xbc\xfa\xd4K$UBT+5%|\xc0\xb6,\xa7\xf1\x93\x85\xcc\xcb\x854\xbc8^2\x1a\x1a\xee\xfeMjJ\x17\xde7V\xe9;\xfeb\x16\x87A\xe5d\xee}c\xf5H<\xbe\x9b\xce\x1d\x0f\xd9\xee\xf9\xa9\xa4JH\xd4\xe1\x82hJ\xef\x07\xe7\xb5\xefkg\xbe\xb3\xa4\xf5\xe1\xa6~\xc7\x10\x977\x1f\xa5\x11CTWs~\xbf\xadQ\xcc\xa0XjJ\xd7\x87\xf5\x1f \xb4\x90\x00\xac\xcdYm\xee<\x8c\xb0\xac\xeb\xa3\xfa!\xbd\x08BWD*\xad\xcd\xde\xe2\x8b\xb7\xf5\xef\xeb\x87\xe9\x8b\x889\xee\xc4\xf3\x99(\xeb-\xbd\x11\xdd\xaa\x8d\xc3\xf9\x9c \x95\n\xfbI\xbcI\xc5\xf4\xbc\xac\x1f\xa8\x12L\xe7&T5\xa4\xf4\xf8\xcb\xa3\xfaQ\xfd\x872\x9c\xd1\xd0\\\xffP?\xac\xff\xc8\xc3\xb8$a\xe8\xc7i\xe6\xef%Uzp\xe6>\x7f\xfeI\xa9'\xd3?\xb1Pl\xd34\xf2\x92\x07DB3\xe7\x7f\x8e\xde\xd6\xce\xbe~?\xf7~\xfd\xe5\xed\xd7\xff\x1cF\xbf\xdf~\xfc\xf6\xf9\xfd\x9f\xff\xbb\x88\x7f\ng\xe7\xfd\x7f\xfd\xf9q>\xfa0;\xfb\xfc\x10\xb4>\xfa\xf7\xed_F\x9d\xdb\xf7\xcb\xf3\x9f\x7fv\x06o\xbdo\xff\x19\xdf\x0e\xc2\xc3\x9f\x97\x9f{\xbf\x8cG\xff\xf3!^\xcco?4.\x7f\xf9\xe2~\xfd|\xf4oM\xc3\xea&Q8\xdfDw\xef8\x8a[\xbd\xd9\x08-q\xfb\x12\x07\x98j\xb4\x99#=\xaf\xb2\xd5\x97\x04\x17V \xc5\x98:sO\x1dE\xdb\xd2\x1e\xb2\x9c\xa9'\xad\xad\x81s\xbc\x84E8\xe3\x05\x1f\xa2\x19\x03\x9f\x86\x85\xce\xce\x1e#{\xa6iZ\xd5\xcbvhG;K\x965\x92\xf5\xe6\xfb\xd6\xe0\x13\xe0O\xefr8\xa0\x9b\x9bV\xa7\xdd\x1a\x18\xe9C\xff\xe3Yv\xf7\x99\xdf\x9d]\x9c\x8b\xb7g\xbd\x8b\xcb\x8e1l\xf7\xbat\xdb\x1a\xde\x9c\xb7\xfb\xfcU\xa7\xdd5\xba=~\xdf7.Z\xc33^\xcf\xcd\xa0w\xd5?3\xf8\xfdg\xa3?hw?\xf4\nO\xbd.\x9c\xf5:\xbd\xfe\xd0\xe8_\xe0\xdd\xd5Ew\x00X\xf8\xcd\x97^\xff\xfc}\xdfh\xfd2\x80\xf3\xf7W\x83\x9b\x811\xc0\xec7x\xdf:?\xef\x1b\x83\x01\x9c\x1b\x1fZW\x9d\xe1\xe0\xe6\xb25\xfc\x04\xe7\xc6\xe0\x97a\xef2\xcd \xe7\xed\xfe`\xd8:\xfb\x05\xce\xdb\x83\xcbN\xeb+\x18W\xeds\xf8x~\x91f\xf8x~q\xd3iu?\xc2\xc7n\xef\xc2\xb8\xf9\xc5\xf8\xdaow?\xde\x9c\xf5\xba\xc3~\xaf\xb3\x96z\x89\xdf^~\xbci}4\xba\xc3\x1b\xea\xc6\xc7~\xef\xear\x00\x9f\xda\x83a\xfa\x0d\xde\x7fhw\x8c\xecf\xd0\xfe\x0f\x7f\xe07\xbd\x0b\xfc\x19\x0c\xbb-q3\xfczi@\xfb\xc3\x00\xda\xdd\xc1\xb0\xd5=3\xe0\x7f{\xef\x81Z\x85?W\xad\x8f\x06t\xce\xb2\x1e\xe3m\xa7\x83\x97\xf6\xb9\xd1\x1d\xb6?\xb4\xcfZ8!\x98ra\xb4\x06W}\xe3\xc2\xe8\x0e\xe9\xb1\xd75\x86\xad\xfeW\xbc\xa7\xea\xf0zua\xf4\xdbgx{\xd9\xba4\xfax34:\xc6\xe5\xa7^\x972\x0c\xdb\x98\xd1\x18\x0c\xce:\xbd\x01\xbf\xeb]\x1a]\xc0\xf9\x1d@\xa7\xf7\x91\x97\x84TN\xa7\xd7\x1f\xc0E\xeb\xec\x13u\xe1\xa2\xd5\xee\x9c}2\xce~\x81\x8bV\xf7\xbc5\xec\xf5\xbf\xf2Y\xe9\xf6nZ\xc3\x9b\xf7\xfd\xf6\xf9G\x03z\x9d\xf3\xcb/\xe7\xd0\xbb\x1c\x1a\xfd>^\xda\xdds\xe8\xf5\xdf\xb7\x877\x83\xde\xd9/\xc6\x10\x01\xaa7\xa0\x12\xa9\x814jT\xcee\xfb\xd2\xe0\x14\x16\\\xe2\\\\\x0e\x8e\xe0r\xf0\x16.\x07\xdf\xc3\xe5\xe0\x07\xc0r\xfb\xad\xeey\xef\x02\xfa\xc6e\xe7+\x0c\x8c\xb3^\xf7|\x00\x03\xa3\xd3\xee^\xfdz\xd3\xee\xb6\x87\x90N\xbd\xb8RE)d]\xb4\xba\xad\x8fF\x1f\x06\x9f\x8cN\x87\xff\xd22\x19|\xea|\xee\xc0\x00\x17\xc5\xd5\xf0\x135\x14\x08^\x11\x9c\xae.\x07\xc3V\x7fxc|6\xba\xc3A\xf6\x98\xcdf\x9a\x80\xb3\x9a\xde\xa7\x8d\xb8\x1a\x18}\xf8\xd2\xee\x9e\xf7\xbe\xb4\xcf\xe1W,\xbd\xd7o\x0f\xbf\xc2\xaf\xe7\x04\x85\x1f\xda\x1fq\x85\x0d\xf8\xf3U\xbf\x8f\x90'\xa0\x9c\xd2\xce[\xc3V\x9e\xe3c\xdf0\x86F?K\xa5\xc4\x0b\xa3{us\xd97>\xb4\x7f\xa5\xe7\xfeU\x17\xe78{?0Z\xc3\xec\x86\xcf\x18\x7f\xe2cR\xac-M\xc3\xb6\x16\x1e7\xbe\xa1A\xc5\x84\xcf\xc3n\x1f~\xbd\xe8\x9d\xb7?\xb4\x8d\xfe@\xb1\xac\x91\xa4\x06\xda#\x0bn\xbd(\x0c\xe6,H\x9a\x8f\x82\x07kr\x8fY\xb2dY\xaf\xa5j\xa2\xa8\x8e\xef9qS\xa2 DN\x80\xa4\xd5\xad\x13\x91;\xd7\xa6\x99}\xd4\xb0^\xeb\x96l\xc9\xa6\x15[\x03\xbb\xaa[\x8a\xa54\xd4i\xc4\x98\xfb\xd0\xdc;T\xbd \xf6\\\xd6|\xdc\xf6\xa9|m\xbd.|\xab\xf0o\xfd0\xfc6b3/\xe0\xc7j\x1b\"S\xc3V\x03\xf2\x1a\xd5lX\xa3\xc3{\xd3r[\xb5\x0fNmbW\xad\x11\xc8z\xd3\x1aYn\xd5\xaa\xeb\x96{\x00\xd6{\xabn\xb9UE\xd6\x9b\xa6\xc1\xec\x9a\x8e\x0fzC\xc5\xdd\n7\x8ef\xa3V\xd3\xa1\xa6\x81U\xb5\xaa:XU\x0d\xf64\x1d\xfe\x02\xeb\xc0:\xd0\xc1:\xd0\xc0jh:|\xa7\xe9pr\xa2\xe9pz\x8awx\xa3\xe9\xa0i:\xec\xef\xeb\xb0\xaf\x81u\xad\xe9`\x81\x05\xf8\xab\x81\xa5C\xb3\xa1.\x10\xf7/\x89\x0ci6\xb0\xe9:`\xcftP\xe1\xb8\xb1Z\xa9\xc5\xb1\xb3dl\xbal^+v\xd5R\xc0\xbc\x96\x15[\xc1\xbb\xdf\xcc\xeb\xdf\xec\xeaoO\x0e%\x1f\x1a\xb8\xfe\x0d,\xe55\xfc\xf6z\xa3\xf0G\xf3zeW\xad\xd5\xb6R\xf2\xb1h\x9a5M\xaf\xda:\x98{V\xc3\x86W\xaft\xf8\xee;\x1d\xack\xebZ\x07U\xd5\xd7zdZ\xa6e\xdb\x0d\xf5I\x18\x92-\xebQ!(*M\xe7&L\xadVj\xc3z\x8d\x83pW\x05\xf3\x95~\xb0\xf7\xee\xb5\xad4l\x95\x1b\"4\x1b\x96\x85\xb3\xe8\x8c\xc6\xcc\x98\x04QrkY\x92\x0d=\xdd<\xac\xfd\xcb~\xff\xb4R\x1a\xabcV\xf7\x9d`\xbat\xa6,\xae\x8f\x9cx\xa6=\xc636r\x82i\xde\x97\xc6\xf5\xab=+>\xb0\x1a\xf5\x83F\xdap\x1e\xfc\x85\xaf\x06\xa4\xafK\x9do\xc8\xd7`^K\x8f\x96\xf5\xdaV^\xe1Wk\xb0\x9c\xe9\x19j\x9c\xeb,\xae\x05k\x94\xbe\xb4\xe2\xaab\xddUe]\xc3a\x89\x0f,qQ\x14\x1d/\x8f\xebk$m[F\x03\x95\xa0`\xc4\x8b\xa2r\xa8\x94\xb4\x8c\x8d\xaflU\x9a\x84Q-\x8cj1\xf3\xd98\x91\x9a\xa5\xe6\xc9zs\x12F\xc0\xdf)y#\xad\xb8\xea\x05V\x9c\x97\x98\xc2\xa7\xb4\xd1}.Y\xa8\xf9lR.\xfc\x1aL+>\x86}\x1b\xcc\x93S\xdb\x92\xd3\x92\xab\xba\xa642\x88}\x1a\xe0\xb0\x8cb!\x96\xfc2\xf8{\xb6\xd5\\\xb7Q\x9a+Yo\xe2L\x9f\xd8\xca\xc9I\x0d'E\x91\xad\xbb\xaa\x8eC\x8bs\x15\xe9V\x00V\xa4p\xbcv\xa0\x17\xd3\xac\xb7\xeb\xb3\xb7\xb14\x83\xe2\xfcm\xab\xcb\x94\xde\xd8T\xa3b\xbd}I\x95\xdf\xef\xac\xb2T\x13VcY6~jY\x96\x92U\x84\xcf\xbc\\@|\x93\xe2*\x81\xa1@\xd6\xf7\xac\xb7\n}\xaa\x1c\xbc\xa8{\xf6\xd3\xb8\xc3\xb2^\xeb\xcfm@A=\xbd\xcd(\xef'\x01J\xd6\x9b\x8e\xeb\x82\xb3\x88\xc2E\x18\x83\xb3H\xf0\xdfK\x96.\xc3\x9b\x1a7\x95\xc2\xbb)K\xc0\x89\x17\xcc\xf7\xc1Y&\xe1\xfc!\xfe\x83<\xbe-\x17\xe0\xdc}\x83\x91\x133\\\xbcx3\x83\xd1\x18F\xc2x\x08FS\x18\xfd\xe9-\xde\xc2\xd8\xf1a\xec$0\x9e\xb8^\xfc\x0d\xc6\xb3i\xb4\x80\xf1\xec\x1bWv\xc2x6\x0f]\x18\xcf\xc2\xbb\x00\xc6\xb3(\x0c\x13\x18\x7f\x8b\x97s\xa0\xc040\x9e/`\x1c\xfa\xcby\x00\x88``\xbc\x80q\x14\x06\xf4\x938#\x18\x93\x11\n\x8c\x97\x91\x0f\xe3e\x02\xae\x930p\xc7\xe0\xba\xe0\xba\x11\x8b\xc7K\x06.\x1b\x85a\x12'\x91\xb3\x00w\x02\xae7\xe1?\xdf\x83\xebM\xc1\xf5\"\xfc\x1f\x87~\x18\xc5xG\xfdq=|\x98\xb3x\n\xee\x12\xd84b\x0b\xa0\xf3i\xc0\x82[`\xc9\x0cy}`\xf7\x0b'p\x81\xc7y\xc5K\x04\x13\x97K\x00\x81ww2\x85 }<\xf1|\x06\x13/pa2O`\x12\xfa.\xa4\x19#\xc6`\x12\x8f\xbf\xc1$Y\xc0d\x19\xb3\x08\xa68\xb8S/\x81\xe9\xc2\x89\x12\xe6\x02\x951\x8d\xc2\xe5\x02'\x8en\\\xe6\xf3\x1b\x1c@\xba\x89a\x1a-G\xb5y:\xb6\xd3?\xbd\x05\xcc\x1c?\x81\x19s\\\x98Ma\xe6\xc5I\x18=\xc0,\x8c\x13\xfa\xa1\xce\xce\x92p\x01\xde8\x0cn\xc1s\xc1\x9b\x88\xcf\xbd\x89\x8b\xb3\xe2M\x96\x0b\xe0\x98\x1e\xc8Y\xa0\xef\x83\xb7\x80\xdf\xc3Q\x0c\xbf\x87^\x00\xdf<\xdf\xa7\x1f|\xe3\xb38\x06\xdf\x0b\xbe\x81\x1f\x80\x1f\x8eq>\xfcpJ\xf5\xf8\xe14\n\x13\x9e\x12~\x03\x7f1\x06\x7f\x11\xe1\xbf\x17$\xe2\xe2\x8a\xeb\x1fx\x9d\x83\x1f\x83\x1f\x87\x13\xf0\x1f\x82{\x98;\xdf\x18\xcc\x9d\x00\xe6c\x98\xbb\x8e;\x87\xac\xab\xf3o8\x8f\xf3o\xec\xed$\x86\xf9\xb7\x897 \xf1\x82\xf7^\x1c\xd25\x08]\x98\x7f\x8b\xef\x9c\x05\xcc\xe7\xb70\x0f#\x06s\x1c\x87y\xb8\x0c\x12\x98\x93\xf4\x06\xe6I\x04\xf3e\x92\xc0\xfc\x16\x02'\x08!\x18C\xc0\x928q\x12\x08\xbc1\x83\xc0\x87 \x9c-\x17\x10\x84\x897y\xa8\xc5,p!X\xcc!\x88\xb1W\xcb\x05\x84\xf8\xc7\x02\x10S\xb7p\xe2\xf8\x8e. \x83\x85\x93\xcc\xc6\xb3o\xb0\xf0\x82),h\xe4\x16\xf8\xf1\"\\\xb8\xb0\x88\x80\xfa>v\x16\xfc\x06am\x11\xc3b\x19\xcf\\X\xdc\xc2\x1f\xcb0q\xf8\xefx\xc6\xc6\xdf\xc4m\xe2C\xe4\xcc!r\"\x88\xc6\x0b\x88\x08\xde!b\xf3\xf8!\x18C\xc4Wh\xc4\xa8\xf9\x11\xbb\x85h\x0e\xd1\x1c\xc7+Z\xcc!\xa2L\xf1x\x01\xf18b,\x80\x98\x16H\xcc\\\xc0\xae\xcd\x1d\xcf\x87\x98\xfd\x011\xf7\x99\x0f1Bi<\x83x\xc6|\x9f\xb7\"\x9e-'\xf8\x93\x10\xbc\xc4>c\x0b\x88\xc5\xdc\xc7\x086|\x91\xc6\xf8\x15\x8ecLQz ^B\xbctC\xc0\xd5\x1e/\xe3\x05\x0e$NO\x18\x00\xb5)q\xf0\xdf\xf3!q\"H\x18\x83\xc4\x9b\xf3\x9fp\x99\x00\xc2l\x12.\xc73H\"\xa0\x02\xa3p\x990H\xa8\xc6$y\x80%\x9f\xd8%u\x7f\x19\x88\xc5\xba\x0c\xbc?\xf0'\x89a\x19\xe0\x90-\x83xF\x17\\-\xfc\xc4V\x0d\xd7\x11,\x17T!.H\\tx\xc55\x87W\\rx\x8da\xb9\xe4n\xb4a\xb9\xe4.\xb4\xe1\x16nqlo=\xb8\xf5\xe6p\xebE\xf1\x0cn\xe7\xd4\xf1;\xc7\xc3\x9fd<\x83\xbb1\xdc!r\xbd\x9b\xb1\x88y1\xdc\xcd,\x16,Rd]{\x0d\xa6\xc2\x91\xfd&\xf3 d\x8d\xcfm\x0d\xde\x04\x92\x19\x0b\x80\xf91\x03\xe6{\x13\x98x\x88\xac\xb0\x8d>\x03/\x80\xb1\x83obg\x0c\xe9v#\x08!pCp\xc3\x00\x87;\xf1\xfc\xe7\xda3Zz~\xe2=\xbbUYuh\x02\xd9\x08\xc0\xd8\x85\xb1\x08\x1f\x03\xec\xd6A\x0c\xcc\xc6\xc0\xee=\xc2\xbe8\xf1S\x96\x84\x8b$\x86\x19nH\x8b;\x17\"\xe6\xb8a\xe0?\x00W'\x01\xc5A\x86\x84\xc5 \x81R\x0c\xb4/,\xe7N\xfc\x0dA\x01\xf7;\xdcha\x84\xb8Z\xb4\x1071\x9fE\xb4\x05!\x0c\xb9l\xec;\x11\x036\x9e\x85\xc0\x02\xdcxa\xc6\xfc\x05\xf8,!\xa4\xe7#\xaeC(\x9d;\x0b\xc2\xfc\xb4\x9c'\xd4\x18\xfaq\xa2\xc8y\x00n7\x08\xc9\xc3\x82\xff`\xedK\xdf\x9b{\x04\xb5\xd4\x0cL\x8ag\xe1\"yz03\xea\xc0w\xe2\x98\xd3\xd3+u\x14\x86>s\x9e\x1d\xdf$Z2\x988~\xcc\x9e\x9b0\xf2jRs3\x9b\xa6\"\xd9j\xbd\xdf\xb7\\k\xb4\x957\xc8\xb8\xabBvW?9\x85S\x0b\x88\xdfD&\x12yN\xed/891Oj\xc8~\xed[\xae\xad\x9f\x9e\x82\xe5\xea\xd8Vd1\xcd\xd3}\x1byKs\x1f\xec\x8c\x03\xcdI\xe2\xa7\x9awm\xb9\xdb\x9a\xb6Z\xad1\xa8\x9c\x7fOyT\xabn\xd5\xc1|\\\x99\x96}lYv#e\xbaK#j\xc5\xc4Z\x1f\xd5~\xb6\x91\xdd>\xa4\xa7\xbaj\x13\x9b\x8d#R\x1e\xc5\xfc0W\xa4\x99\x92`\x9b\xa4unh\x9d\xfb(\xb3\x0bj\xea#X\x95\n\xc4c\xa1\x10)\xd3,H\xaa$\xa0\x98T`\x04\x11\xd2\xe6L\x92z!\x12\x9a\x83\xc2\x90H\xaa\xc4\xfb,\xd9j\xa8\xe5\x84\xa6yd\xd7\xf9\xb8\xab\x9evx\xec\xe5\x16A^\xb5\xaa\x84fdz\xb6\xad\xad\xf3\x95<\xb9\xc4n\xd2>\xb2\x91q%_F^<\xdf\x10\xc0Sj!\xefX[O\xe1N\x0dei\xec{\xdf\x98\xa4>n\xf2\xa5V\xc3j\xe0\x14][\x91\x15X\x96\x0d\xc4T\xe3\x83\x0eV\x80\x14\xbc\x89\x0f\xb6\xa2(\x07`5\xac\x83\"\x1bq`5\xe0uQ\xa6\xb3R\x8b\x8bn\x83Id\x01\xeen\x14\xb6\x1a\xb9DYo\xde\xdc8I\x12y\xa3e\xc2nn8#*\xa75 \xd4!S\xa3#\xcf\xb7\x13\x7f7\xa8\xe4R9p\xd3\xf2\xbdi\xe0\xc4\xe2&\x9c\xc0M+ \xe7\xde\x18n\xde#\xa9zs\x16\xce\x17>\xbb\x87\x9b\x8f,`\x11\xa6\xb7\xe7\xce\xd4\x0b\x9c\xe8\x01n\xba\xa1\xc0\x8e7\x83\xc4I\xbc\xf1\x8d\x13\xc7,J\xe0f8Clu\xc3q\x9a\x13\xcf\x81\xdbq\x80\x17\xf8^\xc0\x88'HQ3\xee c\xdcI\x89C\xc9\xf1\xb4\xd0\x9a\xf3\xada\x89\xa8\x92o,80\xfc\x0c\x0eL\xfc\x10 \xe10\x82i\x98\x84\xe0a\xf9\x88H\x83)p\x95\x12\x8br\xf4M\x04\x857\x0d\x90@\xf1\xfe\xc4\xc6\xc4\xd4f1\xca\xc0cGRC]6\xc1\xad>\x0c\x10\xb3\xf3OnC\x0f\x7f|'A\xb4L;\x9a\x82k4\xe3\x9b\x1a\xa6S\xfb\xf3\xc6\xb6\xee\x0eR9\x81\xd2\xf0\n\xb22.\xfcB\xdcS;\x05\xd9\xacU\xf7\xa1i+\xd6\x11\x98z\xf3/\x1b\xccZ\xf5\xa0\xf1\xdd>\\\xefi'\xa76b\xa7TNGR\xb9\xc3{\x84<\xcb\xe5\xa2\xba\xba.n\x0f\xc0\xaa\xa7\xa9\x88>\x16f\xb5fs9\xdd\x13\xd2<\x96\xe7R\xcc\xc9\xd2\xb7\x0f\x1a\x1e\x9dj,\xaf\x08/\xc0\xb9|\xcf&a\xc4di\\@\x1e\x8fsg\x1c\x85%l\x86\xd0\xf7\xca\x8a\x0fp\x14\xec\xea\xf6e\x02\x1c\\\x15\xe5\xa0\xe1\xcd\xb7\xefC\xa9\xa9\x86\x94!g!8(\xd4\x85\xd5x\xc1\xd8_\xba\x8c\x18y\xbdyR\xaf\xea\xa7 K\xf0\x86\xf3\xd9z]\xa9\xea\xd6\xdb\xcd\x8dH\x98J\xdc\xb2\xf5\xf2\x14Z\x1a\xdcv\x12\x84\xcb\nN\xc3\x08\xa0s\xf16\x8a\xc2\x08\xd9\x1b6\x01o\x12\xf0K\xce\xe2P\x8b\x80\xe0{\x119\xd3\xb9\x03\xe4\xfd\x02\x96\xb1\x17L\x95\x0d\x84\x9ev9\xc5\xb7\xb8\xa7\xa4Lz\xb6T?\xb4;\x06\xaeRRL\xd1\xcdyk\xc8oH\xfc\x9d\xde\x0c\x86\xad\x8bKzB\x80\xbc\xb9\x01\xa3\xf7\x01\xbaW\x9d\x0e\x0c\x0c\xe3\x97\x9b\xb3\xab>\xbf1\xba\xe7\xfcf`\x0c!N\\/\xc0_\xa48\xe2\xc4eQ\x84\xcd\\)\xaa8E\xb8\x815\xebb#x\x16\xbd\"\x12\xd52\x1cjn\xcaG\x94]\x08rm\xc66\xbel\xd2\xa7\x8d\x0d\xb9`\x01\xb3\xda\xea&\xd0\xe4B\x985`$\xc9\xcb\x11I^8\xf6>\xb0\x8e^\x8e\xa6\xe9\x1d\x90F|\x82\xbc \xdfEb\x04\n\x1eM\x8c\xe8DOp\xc0\xe4.\x1f\x02v\x87(\x1d\xac\x11\x9d\xa9\xb4\xe2\xaa%+\xa6uW\xb7,\xbb\xda\xf0\xd6\xba\x95\xae\x83\xb2\xf4\x18\xf36V\xeb\xa8=\x05WNp\xbb!\xa1F\x81\x00\xbd\xa0\xd8\x86\x8c\xfe\x0e\xd8\x1d$\xd1\x03\x90\x8a\x18\xa8A \xc2\xd6B\xb0\xf4\xfd\x14K\x0b\xacL`\x9c\xd2\x87\xbc\xd2\x02\x19XF\x88B\xfc(+\x8du\x9d\xc3\xf3\n\x87\x02\x8a*aQ\x93\x90#\x98{\x9a\xad\xe9\x88Kk\xbaP?\xec\xef\xa7:\x04S?h\xfcu\xfd\x9d\xbd.q\xe7\xe4\x98\xac\xa8\xf5&\x8d\xdd\xb3\xca\xe6\xc6+\x84\x8dG\xa5^m\xa8\x81\x96O\xfd\xab\x82J`]\xeeY\x96\x89\x8f\xc3\xc9\x84 b\xa9D\xab\xa4\xd4\xc6\xef\xce\xad#\"v\xe7$G\xb2EZ\xfa\xa6(@D`}c+\x07o\x1a\xdb\x85\x90\xd2zf\xc9V\x0e\xa4m\xfa\x0b\x82\xdc\x05mka\xd0\x0cV+{\x0d\xa4\x90m\xe1 0z\x10\xe0\xc1a\xbe\xb0O\x8f\x96\xd3)\x8b\xc4\xd1c\x04;\xe6\x8cg\x02qR?\xb3eA`\x92\xc1\xd7\x84\xb0\xe9\x1adz1x1\xee\xe2\xc4\x12\x85\x0b\xc0\x85\x17/pq!\xac\x06!\x04a\xc2A3\x9c@8\x99@\x18@\x18Ax\x17d{\xfdr\xc1\xa2l?G\x964\x99y\xb1\x00q\x02W\x82xN\x91d\x1e\x8a`\x19\x90\x10\x8aXP\xe4\xaf\x03\xb1\x8e\xee\xbc\xc0\x0d\xef\xe0\xceKf\xc4C?x\xccw \xd6\x05j\x983\"t\x0b\xc8\xe1\x1d\x02\x8e\xcb\x89\xb1\x0d\x08\xa1#\xc3;\xb7\xd9\x02\xc4\x90\x91\x8e \xf3\x1f\xa5\xf9\xd2O<\xdc]jib\xa1\xc2W\xaf^\xa5\xba\xc3W\xaf^5r\xa1/\xcf\xb9R\xa5\x91\x1f\x8e\xbf\xd5\"6e\xf7%\xf6\xab\xf1\xf8\xfd*##\xf1!\xfb\x98\xe7\xcd@%\x87\xce\x0d\xa0\xf9;=\xcah\x08\x89\xd3\x82\xb5\xc2\x12(\xb4\xeb\xb7u\x10\xfe\xcdV\x0e~\xcby6\x97\x11\xbf[\xe2\xa9\xae\x7f\x83\xdf^g\xcd/2#t\xae9i\x16\x1b\x99W\xbbZ\xa9\x85\xc1\x15\xed+\xad\xbd7o\xd2\x11z\xf3\xa6\xb8\xe6\xd2\xaa\xc47\xa5%(I\xe97\x92$\xed\xfe\xe6\x89\x95\xf8wF5c\xda\x1eS\n\n G\x01\x83\x9c m\xca\xfa^SQ\n\xdb\xfb.LeJ \x9b/|'\xc9F\xc3V7\xf3j\xbb>\x7f1\x0f\xb6X\xec\xe6\xc2\x10@\x9e\xdfx\xd7\xb8\xa4\x17p?\x8e`w\x1c\xc1\xed o\xc2\xb9\x11\xe4v\x8a, \xc7u\xc4\x98\xcc\x9c\xe8\xa7\x9b\x84\xaeG?\x8a\x9b\xef\xdf\xe2\x8d@\x85\xf3\x85\x8f\x08q\xcc\x16I\xce\xc6\xc4 \x89\x9a\xf8\xdd\xfdB08^\xe0\x89\xb77c\xa7\xc8\xef\x8c\xc3\x1b\x87\x04}\xe3\xf0F \xb2qxC\xc8\x86\x04G$\xed\xc9\x98\xa2\x0c\xd7\n\xde\xc8}\x08\x9c\xb97\xe6e\x16\x19\xa5\x85\xef\x8ds1\xd7\x06\xe34\x89{AB]\xf6\x82\xe4\xc7\x1fn\x12X\x8a\xf7\xcb4\xc32\xcd\xb1L\xb3\x10#6_\xd2\xe1\xd1\x0d4\xce\xeei\xb4\x10\x91/\x92\x08\xd2-\x1e\x16\x91w\xeb$HB\x87<\xba),\x96#\xdf\x1b\x179:\xbeV\"&\x860\xe2\xf1J\xe3\x17\xf1zE6U\x91s\x97\xa1\xfa|\xac\xfb\x92l^\xcb\x8aeU\xec\xc7C\xf5\xe8\xc7\x95R\x92\xb1\x1cI\x8du\xf4\x9d\x8f\xccj\x03\xe1\x95H\xca\xec\xc4W\xb2\xe6\x93(u\xa4\xd889\x91\x91\xe0==mL\xcb\xce\xfb\xb3\xd8=\xb2\xde\x94\xaa\x89Y\x0d\xec\xaa\xa4H%\xff*\x99\x97\x7fQ\xaeP\x03'\xdc\xdbpDn\x19W\x85\x13o\xd4\x86\x82\x0f\xef\xe3\xe0$!\x87\xddL+5)f\xfed\xadE\xe5\xe60\xd1\x94\xe3m\x1d\xca\xbe\x96p\x0b\x8f-k`K\x8apnHB\xc5\xca\xe8!a\x15\\\x04\x15\x97\x8d\xbd\xb9\xe3W8B\xab\x08\x84V!TU\xf1\x82\xa4\x82\xe8\xa4\"\x0c]c\xfa\x8e\x16z\x85OE\x05\xd1NeI\x99\x96\xfc\x05\xd6\x83\xcbMR=\x8do&\x15D\x8a\x95\x8c]\xab\xf0E/\xa9\x0e\x1d\x1e\xaa\xd0\xdcV\x9cx\xcc\xc8\xb6\xbf\xe2\xc4\x0f\xc1\xb8BX\xb92z\xa8\xb8,{3\x89\xc2ye\xca\x92\xca\xd4\x0fG\x8e_!=*\x16\x1cV~\x0f\xbd\xa0\xe2\xb3\xa4\x82\xb8 \x9cT\x820A$W \x83\n\x85\xdb\x1b=T\x16\"B|\xc4\xe6\xe1-\xabpQm%fIe\x19\xcc\x9d\xc0\x992:\xe5\xb0d\x15$C+\xa4\xeb\xe1\xbf\x92\x1ak\x923\"MXRq\xe2\xca\xc8\x89Y\x85\xb6\xad\nn[\x15\xda\xb6*\xa4_c.\xf9\x92J*\xe9\x16S\x11\xbbG\x05w\x8f\xa9\x93\xb0\x8a\x1bV\xc8P\x97\xdd\xb2 \xa9\xa4\x9b\x85\xf0\xd3T\x11tz\x85<\xcd\x93\xdb\x0c\\K\xcexV\xc1\xed\xa2\xe2M*\xc8\xe6\xd2\x17^\x90\xbb6\xf2\xe2\n\xd2\x9a\x95\x0c\xe3\x93\xe51\x1f\x03\x81<*\xe12\xa9\x84\xb7,\x8a<\x97\xe1p8\xf3\xb8\"0\x7f%\xc3\xfc\x15\x8e\xf9+\xa9*\xa6\xc2\xdd\xe1\x12\x98\xc5\xcc\xf1\x99[\xe1\xd8\xbd\x12'\xce\xf8\x9b\xe3\xfb\xe1\xb8\xc2qz\x85\xe3q\x8a\xa9Y\xe1\xe6\xcfI\xf4P\x11\xa7\xc9\x96A:@\xcb v&\xacB(\xba\"Pt%\xc5\xce\x15\xc2\xca\x15\xda\x82\x0b\xc7E\xfd\xfc\x80\xac0G\x96\xaa\xac\x9eD\xde\\\xce\xdd\xa26*\x08\xf5 )U\x89\xec\x05W\xfc\xe4\xae/{\x8a\xba\xd4\xc4\xea\xf4\xe5\xb0*U\xa4\xaaG\xbf\x0e\xfd\xc6\x8a\xa2.0_)M\x9dh\xe5\xcc\xb1\xa2\xbaZ$7NH\xd4vrz\xacU\xad\x1a\xc7\xb76\xa4\x0bO98m\xa4N&\xde*\xea\x0c? [9\xb2\x90+d\xb3\x94b\xbe\xb9\xd6x\xa7[#\xb3U\xfbO*\xd3\xb4FY\x86\xa9\x96\xe0\xd2><=\xe5\x16U''G\xa7\xa7\x8a\x9e\xbd7\xe7\xaak+\xea\x03f\x93\xf5=\xca\xa9P&a\x81U\xcf>:\xc8?Z\xa8S[Qo\xb5\x06\xd2\xfc\x07\xb2\xdeT\xad\xf8@9\xb0\xec,\xcb\x08\x0b4\xafUY99EF\xbe\xdc\xe1\xc3\xd3S\xa0B\xe1\xe4\xe4\xedi\xdem\xd3Ug\xea\xad\xad\xa8\xf7\xf8\xb9%S\xce*\x96\xcf\xef\x94j\xa1\xef\xe6\xc8V\xd4;\xde\xf0f\xa1L\x85\xb7\x1c\x7f\xc9vH\xa7:\x94\x03\xd1!\xbd\xd8\xfb{\xf5\x81\xea\xfb\xa6=\xa6\x94\xe7rM\x10qr*+\xbaZo\x92\x05\xe0J\xedi\xc4\xdds\x81\xe9\x1b.1\xad\x83e\x99W\xcb{\x9bo\xe8\xc2(\xef\xa7\x95\xf2&\xab\xc9\xd0\x04\x9f_\xe7,\xbe\x90^IY\x86\x1b\xad\xf1\x8ep\xb4\x04\x9b\xc2\x00Y\xdf\x93\xb2\x8e\x97e\x16\xf1\xcc\x89\x16[\xa5\x15\xa9ndC<\x11\xc8\\<\xf7\xda\xb2l\x85\x06.\x1f\x90\x1b{\xdd|l\x9b\xcc\"-\xe1\xdd\xb6\"\x8c\x17\x15!\x16UO\xd9d\xb6p\x83q\xc6 \x8b\xc8>\xaf\xc8W\x94\xfb`\x8d\x08\x13Xq\x95\xa3\x11\xe4)\x04\xa8#\x0bu\\\x00\x95\x87\x8d6 N\xee\xdbZ\xaf\xf22\xa9$+>\xc0\xa2\xd2\x15\xb1^\xec\\\xbd\xfb\xfb\x05\x17\xdb\xa8\x15\x0b[/j\xa3\x04\xd1\xa4*oN\xfe\xe5\x98\x96\xe3\x0b\x9b!\xc4\x98\xdc4r}\xee\xfe\xc68\xd1\x0e\x97u\xe7\xeftC\xd6\x9b^\x0cN\xacl\xf9\xfa\xa5\xe3)\x06\x83\xdbb\x12\xe2:\"\xc4\xf56E\\\xa6\xa6\x1e7\x1f\x15\xcb\xb6\x81\xac5\x95\xc2H\xdf\xa9\x13\x15\x9b\x99\x15\x9d\xcb\xd1\x96k\x9a\x1cYo\n\x19\xe8\x8d} \x84\xa1\x80\xe4=>\x1e\x1e\x91D\xba)D\xa1\xb2\xde\xbc\xa9\"Qx\x00$(\xcd\x9f\xc9\xbe\xa1\x94\xa2\xe8\x9c\x82\xafUIp\xba\xfeb\xe9\x83\xbf\x04\xd3\x9d\xf8\xf3\xa5M\xfa\xe5\xed\xda)\xb3\xa6\xd9)9O\xd4\xfc_`\xe9\x96No\xd6UTe\x15\xb8n\xd5uh6aM\xd0\xfa\xa4\x14\x83pM\xae+V\x1f#'\x98\x16\xb53V\xdd\xaagDw\xa6j~F\xe2\x94\x96Z\xd2G\xf3C\xaan\x8d\xa8\x0d\x96\x94\x04v\x08E\xa6\xac\xda\x19\xfc\n\x91\xc9Ski\xab\x9c\xe9e\xed* \xf51#\x93\x9a\x9b@\x9d3\xcdB\x89\x94\xaf\xf5\xc2Vz\xc8\xf7\"l\xb1y\xfch?\xd9\xe8\xad\xea\x04\xab\xdeX\xad\xf8\x01\xd0\x1a\xbb_D,\xe6gv7\x1b\x94\xca\x1f\x84\xf0\x94\x93_J\xb6\xf6\x05ia\xc5\xb8Dd}\x8f\x1b\\C\xa9\x89Vq\xdd\xccv\x8djq\x88\xf2\xf5*q\xb2\xab\xc6\x8f\xaa\x16\x9bWZ\xbbMZ\xbb|\xc7\xd6N\xc1\x94\x1fm\xa0\xb1Br\x10\x9b`*\x90\xdf\x96\x96\xf1Ca\x11o5\x8e\xe1\x86\xb4\xc86\x84Q\xcd\x0bn\xc31\x9f\xfa\xf5\xc1\n\xd8\xdd\x1af6\xb1\x1d\xcaK\x10\xd3\xf6\x8a\xa7\\\x01_\x9b\xb3d\x16\xba[\xba\x9f\xd2U\xb9\x02z\x8d&K'?\xd3\xd1\x04r\xe3z\x0b\xb2\x155m\x18\x15\xbb\xca\x93\xd3\x93\xc1\x90\xef\xc5I\xb9}\xd6HNI*\xda\x08\x91PK\xd1='\xa6p\xb9\xa5\xea\xdc\x93\xef\x89\xf2\xfa!\xa3\xbcT>\x97\xc5\x17)8\xc9z\x93\n\x02\xf3\xf1\xd8\x06\xed\x14^\x17't\xacN\xd5\xb9z\xa7.E\xca\xce\xf5\x90c\xeb\xedbG1\x02w\xca\xa6\x12\xe5\xdb\x9a-\x90\x8a\x8bi\x11\xb1E\x14\x8eY\x1c\x87\xd1\xa6\xa2\xbc~\xd0x\xb1\x02|\xab\xce\xda\x8a\x0f^\x95t\xd6\x1b\xba\xea\xc0\x8d\xd8\xd4\x0b\x83Lk]\xd2L\x8bw\\A}\xe7D\xc1KU\xd4+~4t\xa0\x19U \xa4jO\x1d\x12]\x8d\x94\xbey\xd0\xb0\x15\xb0\x1aV\x83\x93\xb2\xb8\xbb\xe1\xa5d\x0bCz\xde5\x90\x1b\xd8\x8a\xfa\xbb\x16\xc9D\xdfKo\x1a\x9c7A\xea\x1b\xe9u\xce\xa3\x14Y\x14sh+\xc8\xa7\xb44!\xd3\x8dc6\x1f\xf9\x0f@l,LHd\xcaW \xccCw\xe93 \xa4\x0f\xe9\xe0\xa6\x82B\x04V\xa5\xc0\xda\x9c\xad\xb16X\xfd\x11\xd5]\xa4\xf0\x1f\xd4\xdfm\xe5\xf8\xef\xa2\xf9\xcc\xe8\xa6\x8c(\xc4\xc1\x04+\xb6\xeeN\x15\xdd&Tjf\xeb\x80/\xea\xa6\xe092\x16J\xcd9(\xb1\xd6\x8bx\xa5\xa5\x9e\xed\xa6\x973\xb0\xe2^\x0cK\x8d\xb9\xde\xb1\xf5\xb5le\x03\x12T)\xebP-s\x0b\xba\xb6\xe69\xb3U\x9a\xb9\xdfs,\xb4\xc9s\xec\xd2\xb5\x8b\xb5\xf7\xa0<\xb5{\x95Y\xac\xa6j72`mk\x8d\xa6y\xbd\"`\xacfm\xb9\xfc\x07\x10\xd7'`\x7f\xe4jaYo\"\xd4\xaf\x9a\x82_Q\xf8\x9c\xe8\xd6*\xff\xeeRm\xdb\x8a\xda]\xab\x8a\x96\x8bu@\x8b\xe5\xa0^\\\x14\xbb\xea\x1f\xf0\xfa;\x7f\xb7\xfe.\xd6\x9f\x8b..\xe4$\x97\x11\xae\xa9\x9c\xca\xc4\xd0\xf5#\x1day\xb4\x1e\x95\x0d\x92>\xd9\x89E%~6aS\xb2J\xec\x1d6|\xbd\xc99\x1f\xb4z]\xe8oD\xe3\xf6\x02\xd2\xe5\xba\xb91\xf9\xd7\xd6#X\xab\xd7\x0d5'e\n\xa8S\xa8I3\x9a2\x05\xc2Z\xbalw\x83\xe7*;\xc6\x94\x95\xb2Z\xbd\x00\x0f\x14U\x9e\x85\x11\xdf\xa2jL\xb9`\xe4\x81q\xf8_\xbf\x83w\xd6ke\x9d\x8b\xc7i\x11\xf0\x82y\x1f\xa5\x12\xdfo\xf6\x9f_\xfe\x17r_\xbdT\xb6\xf1\xdfd\x9b\xf3:\x95,\xac\xd5$=\x96k\xea\xbc\xa4\xa6\x8e\xdaUV\xf6JI\xf5\x82\x1b\x92z7L\x02\x96l\xe8\x02\xc7\xf1\x96$\x8e'\x9eV,N\xc3g\xad;\xcbJ\xc1\xb2%b\xb0\xd3\x12\x91MX\xc47\xd9\x89\xe3\xfb\xc9,\n\x97\xd3\x19W\xa3-\x831LCYo&\xa1\xa2\x97\xcc\xc2R\xd3\xa0\xb9\xb3\x80\x853\xfe\xe6L\x19\x10\x97\x93\xa9\xab\xb8 \xfc\xa6\x19\"\xdc:\x11\xd7|\x08\x83w\xd1Z\xd2T>$\x8c+\x1e\xd9\xbd\xac7\x7f\xfc\x01\x8e\xde\xfe\xa4\x88\xcd\x9ed\xe6\xb2\xde\xfc\xfe-\xfc\xf8\x83\x02\xd12`\xc0\x81\x0d\x96\xba\x17\xe0\xab\x9f\xe0\xe8G\xe0\xefu\xd2\xd8-\x92\x08\x9c\x05\x1d\xa6\x18;\x0b\x18\xfba\x9cU\x00\xe3p\xf1\x90\xea\x1c\xbd\xb93\x05\x9f\x05\xfcXM\xc0\xee`\xe1\x04\xde\x98\x9b\xaa\xcbz\xd3\x0f\x14\x1d\"\xe6\xf8\x10\xb1qx\xcb\xa2-\xca\x9b\x1b\xf0\xc2\xc4\x81\xc0\xf3a\xcd|\xa8`\xeas`5\xbe\xbb&C\x1f\xb0\xaa\xa6V\xb5u\xa8\x99Z\x8d[rk`\xeb\xb0\x8f\xf4=\xec\xd3\x01bE\x07\xdc\x1d\xe9h\xb1\xa2\xc3 \xee\x9fx\x0f5E\x87\xa6F&\xd9\xc8J\xae\x99U\x9aNmb\xb9v\xf5I[$\xc1R+\xba\xe2\xe9\x0do\xbbu\xd9o\xe53~\xb9U\xd9\x86E\xd9n\xfb\xbaih\x16w@\xfbI\x85R\x11\xf1\xcc\x92d\xa1=J\x11\xfbc\xc9\xe2\xa4\x86\x94^\xc9\x88]\xd6\x9b\x97\xbd\xc1\x10>\x1aC\xb8\xbc\x1a\xc2\xb9\xd11\x86\x069.\xe8u\x07pI~.\x86\xfd\xd6\x99\x01g\xbdn\xd78\x1b*\xc8\xbf5\xc9A\x8b\xdeD\x9a\x0e\xac\x86b\x0d\xaaV\xfci8\xbc\xb4\x1a\xe6a\xed\xe7\xba]m\xccs\xb4\x9c\x19\x1e\xfc\xa3\xeaF\x0dNR\x88\xcd\xbf\xd1\xb4\xee\xaa\xc4\x95\xa6\xce\xb2j\xdc\xc9V\xa9_\xbc-Gu\xf3\xf0\xc8\xaeXn\x95\xe8\xea\x8d\x06\x15\xc9\xef\xd2\x17\n\xff\xc4[\xb7\xb4_\xa9\xd2\x8c9.\x8b6\x8c\x0f\xaeM\xeb\xaefW\x9b\xb2\xae\xd5\x95\xc6|\x93@&\x82#\xa1\xb0\xea\xd9\xf4\xa8\x91\xf6(9\x8b\x85\xefq^\xb1Q4y \n\x96(j9W\x8cleP\xc7+\xc0\xee|\xf7s\x1f\xb3\xdd\xcf}UJ\xd8}\xb2\x990Kx\n^E\xd28\x8e1e\x1c\xc7+5\\o\x1eU\xbcw\xb8\xa5\x9a\xbd\xc3UNMx\xb9\xa9\\A\xebw\xcdM\x80\xadFC\x95\xb2@F\x99\xae\x10\xa4\xaa,Y8\xb7\xa4\xc5\xb6\xee\xea5\xbbjYU\xa5*U\x93\xaa\x84\xd4A\x95\xa7*\xa4;\x91V\x99\xc3\x99\x8a\x17T\"\xc5\x9b\xc8\x91\xe9\xd8\xcac\xa2%\x00\x8f|\xc0c-4\x1d[\xf7dGi:\xc7\x89\xe9\xe4\xcd\xb1\x1a\x8d\xa9*\xd5$\xc5\xd6\xd6 JI\xa6\x80\\AB\xf2\x84\xa6e\xc5\x07R5\xaeJ\xa6PU\x1e\xe8|IG\xbae\x05`Y\x91\xf2\xf8v\x95\xbd\x94T\xc9\x93v\xd0(\xd8\xc2\xd5\x8a\x82\xfb\xef\xa2\x0e(0k\x19\xce\xd4D\xd9e;\xb3\xcd:\x91\xf3>B\x17\x08\xc2\xa4A\xe0\xd9\xccf\x0fw\x89us\x96\xd4~\xef\xe5\xd6\xf6\xe4y(\xb7\xe2\xf3\x02\xc7\xcf\xad\xf86\x8d\xf0s\xe3\xd7\xe2\xf9Oa\xdf\x17\x147En\"\xc2y\xb4\xc0A.\x97\x9b\x87\x90y\xdf\x82\x05\xf4\x13g\xfb\xe6\x16\xe3\x90(\xbc\xf5\\\x16\xe7V\"\xe30rw\x99\x84d\x06\xff\xde8\x99,\xca\x86\x82\xf1C0\x9eEa\xe0\xfd\xc9\xdc\x92\xc1 \xfe\xc6\x90\x84@\x0e\xd9Y\x0b\x93\xbcz\xab\xb9\x8a\xb2.\xa1yZ\xb6\x8b\x93U\"\xf5\x93\xc8[\xf8\xac\xf6\xc72L\x98\xbb\xc5\xd4D\x92$\xb3b%\xa9\x90\x848\xa3\xa6\x04\x92\xa4\xe8\x99VOB\xeaA9x\xd2\x80\xf0E\xcd*K\"\x82 L\x04\xcf\xb7E\x86\xadn\x8c\xe2\xbbmfu[\xc4\xd6\xe9\xd1%\x81.\xf8\xda'\x89\x85P\xa7)z\xba\xd6\xb7\xaem\xb1\x92\xb3\xb5\x9b-9Zh\xb4\xc8p1\x91\x14<]6\xa4\x07\xc9\xd6\xd0z3\x9f\x12\x18\x08!g\\h?)\xd3\xad;+V\xeb\xfb\xba\x0d\xcf<\xe6\xf7\x07\xa7J\xfaW8UX\\\x9dAa\xe5m*\x83IQR$}\xf5}\xe0\xf2\x8b\x97\xdaR\xfaK'?n\xd1\xb8~\xb5W\xafB\xad\x86\x83c\xca\xda\x81b\x99\x99\xfc\xcd\xb6\x8e,\x1b\xea\x07\x08\xdf\xbb\x8fI\xac\x1d\x8a\x00\xcb\xfaS\x16\xe7&\xacX\xd9v\xa4\xc7:\x82-u\xbd\xb5\xec\x92\x8dz\xe9 \x80 \xbdq\xc9\xf3\xdb\x83\xf2\x11&B\x1d\\\x95e\xd5\xad\xf7\xc0I\xf3\xf2\xe9\x00k\xa4@\xae,+\xbdhx;m\xd9\xdd0=\xa5\x1c3.,MM\xd3\x05/\x87#]0\x8a\x14\x87s\x91_ \xc2\x04\xe8T\xc5\x829I&H$#s\xe4dR\xeb\xf1\xcd\xf3ak\xe6\xb8\x08L\xf2\xa3\xad(\x85\x897\x1b\x88\x85\xbe\xbb\xde\x87W$5m\xe8pb\x9eh\xb6\x0e\xa7\xe6)^L\xed/R\xbcmb:dn\xb0\x86\xfa\xc6\x11\x1a{\x8b\xe3!Yy\\\xa9\xc76X\xf5*4\xab\xcf\x1c\x86\xd8n\xb9&\xdd\xdc\xdc\x90\xddKx\xb5X\xb0\xe8\xcc\x89\x99\xac \x87\xe9\xabm\xce\xe8=\x16\xcb\x05LeJs'\xfa\xb6\\\xd4\x84\xad%\xd9\x19k\x8f+\xf5\x11\xd9]\xf7\x12\xc9\xb7Y\xe8\xbb,\x8a\x9b\"rA\xd6\xaa@\x8d2\x9f\xe9AV\xa4\xa6iQ\x1eN\" \xbf\xb1`\x908\xe3o\x9ai\x1f\x07\xf5q\xe82\x8d_2\xea0T\xd7\xe3Qo b\xe0\xed\xef\xef!\xa9\x9b:\xe9\xce\xc3\x8e\x86j\x9c\xc5\xaa8\xae\x1d\x91\xab~*?\x0d\xad\x19j\x89\x1c\xa9\xb1\xa2\x1c+\xd5j\x9c\x9a\xc89flkL\x0dW\x8a\xa2\x06\xf5i\xe4\xcc\xe7NT\xda\xe9\xf9\xc8 #B\xbd\xf0\xfed\xcf\x0d\xc7\x96\xa1\xd8\xdf/\x0e\x82\xf2\xb8\xb5*3\xb2E\\\xc7C\xd5+\x05S(}|\x9c\x87qq\xe48\xb7\x1c\xe4!\x16\xe2\xcc\x1d\xfa\x9e\x1c\x9eji\xb0\x16%\x0f\xb90\xd6b\xd3'/\xff\xe9\xbe\x95\x0d\xef\x18`\\\x17\x84\xf8\xfe\xfe\xe6\xeb\xf4]\x1a\xa9\xc43C[]\x94&\xd8\\\xda\xeaD\xdb\xfcT\x1f7\xb3\xcfU\x97\xe6b\xa9\xa83m\x92M\x90Ka\xd4g\xa7\xb5#\xe5\xb1Z\x0dE(\xcfI=^\x8exi\xf2\xa1:S\xd4)\x85fg\xf5!V)G*\xab\xa7\xf3\"/\xf2)T\xd4\\\x9a(U#u\xa1\xa8\x0f\xa5\xb2f\xd54n\xab\xa2\xde\"T\xce\xf7\xf7o)\xac\x84\x08\xa1u\xab:\xb29\xb7\x15E\xe5\xc9\xf2TQ\x1f\xb6\xe5y\xc0<[:\x1c\x8b\x00 \"o\xac\x9a\xbezd\x8b(\x96\xf2\xad\xa2\xe4\x03\xa2\xdd\xaex\xc8\xea\xc2\xe8;r>\xdc\xa9\x1f\xedx\x95\x82B\xac\xac\xfe\xce\x9e\xc4\x81\xb8\xb0-\x9d\xec\xd5j\xe9\xdeP\xab\x9d6\xd4E\x14\xfa\xe1\xb4\xd98\xb1\xf4\xcc\xf3\x9d~\xdaP\xddpL\x1cYag\xde;\xef\x9d\x0d\xbf^\x1a\xa4a>\x95\xde\x98\x96m\x83d^K\xf6\x81\x04o\xcc\xeb7\xf6\xc1\x1b\xa5\xca7<\xda\xbe\xb02\xc5\xbc\x96\xdel\xc9\x08k-Q\x0e,R\xfd\xeb\xa7e[\xe71\x85_k\x9c\xecY\xe6\xd9yk\xd8\xca\xb76\xdb\xc6\xac\x89S\xdc\xf6\x9d\xf9\xe2\xb8\xa1J\xfb\x12\xc5\xf0T\xb7\x87\x88\xd9\xdd?Ur\\\xb7MGB\\I]\xdfu\n\x9e\x8d\x1fW\xc7\x81YD~IA\xda\xd2\x90\xaf\x0b+HIW:\x92A\xb6e\x9f\xbeVv\x9dy]k\x98\x99\xd8+5\xa8\xd3\xa2\xd4\x1a\xc52\x81\x17\xd4\xf0\x84\x7f\xfeGI\x9c\xc6vk\x94[*a\x92\x8d\xc5L_\xe7P\x1a\xacV\xc7\xd1\xee\xded\n\xa4\xdd\xadL#%\xaf\x8eC\x93m\xca\x9d\x1a\xf2\xc9\xcdMZ9\x998\xecj\x94\x15\x1f\xa4\x14\xf6\x01\x0e\xd8\x89\xd5\xb8\xb99\xcd\xf4d\xf9L\xdf\xdcl5\xd1\xaf0\x9c\xf6-r\xaa\x0d\xa4\x11m\xc2y\x99\x93\xe4P\x81\xbc$\x8d\xa8\x1a*\xab-\x87.\xee\xe7\xfeN\xddKZ\xc2\xe3\x96\xeff\xc9\x96\x0f\xf9\x07[\xd6_2{y\xee\xf8v\xba#\xebs\xfb\x17?j\xe0\xdd\xb2'\x9c\x85l\xa8\x92\xfe_\xea\xeb\x02y\xa0\x98\xf9\x13.2S\xb8\xd4\xe6].\xc7{\x87,\xd4\xbbL\xf0G\x18\x1a\xdee\xb1y\xdfq\x99\xe3;!\xa4{\x97\xcb\xef\xde\xa5\"\xbdw\x99q\xc6\xbb$z\x80w\\`\xf9.\x952\xbe\xe3\xc2\xb8w\xf1C\x90\xcc\x18v\n\xde\x89#\"\xf0\x8ek\xd0B\xaeiJU\xb4\xb9;\x08\xf9\xf9\x13\xff\xf0N\xda\x9a\x95d0\x99eu\xd1\xf5\xadY;\xb5\xd3\xb3\xe7{d<\xa9\x93\xa0I/\xf8\xb6\x15\xe7\xd1\xff\xba\xfeN?\xb0\x1a\xef\xec'\\+\xe4\xc0\xf6\xb4\nh\xfd\xbb\x05\x8b\xfc\x1d\x8e\x16p;\xd5\xac\xbbj\x8aQ\xb4\xf12\xd94<\xda\xe2ba\xbb\xdfU{\xcb\xa9t\x02\xf9?\xe0\x8f?\xe0\x8f{\xf8\xe3\x8e\\w\x9a\xd7N\xed\xcfV\xed?\x87\xb5\x9f\xad\xf8Q\xb6\xcc\x935\x89\x82\x9d)\xb27|-\xf1\xaa\xdc\x10\x16\xd9O8\x83y\xb6a[!\xe6\xff\xca\x06\xed\x06\xb3\x97\x83\xe0\x7f\xdd\x84]\xc0\xf9r\xc0\xfd\xaf\x9b\xb0\x13\xa4\xff\x06\xbc\xff\xb7\x8d\xd8\xb1\x12^\xbaF^\\}\xeaY\xaeQB\xaeVc}\xc9e\xb2\xe3\xd7@z#\xb5~\xbcR\xf6\xc1\xaaU\x0f\xfe:9\xdd\xd3\xafm$\xcc\xfc\x04\xa6 \xf8\x0c\xa6\x0c\xd8\x1f\x100\xf2\x87\x1c\x84 8\x81\x0b\xfcT5\xdc+\xd6HQ\xca\xe8;\x8f/\xd00\xf7\x0f^\xbf\xfb\xce\xb6\x1e\xadkR*\x92\xb7\x9b,\x95\xd2n\xec<\xe5\x15\xf1s\x8fJ9\xa5)\xeb\xcdfS9x\x93\nF\xac\xbb\xd7v\x95\xe44\x98\xdc\xf0\xf2\x12\xddjCm\xc8\xfa\xdew\x9abb\x82\xb9'\xbdz\xfd\xdd\xfe\x1bY9\xa8\xaaV\xadn5\x9a\xc7'\xda\xa9\xfe\xce\xb4,\xcb\xbe\xbe\xf9\xed\x11V\x7f\xd9\x0d[\x9dx>\x9b9\x81\xeb\xb3\xb2&g\xcf<\xd1l\xc5\x1a\x1c\x9c\x825\xba)x\x98\x8c\x1f\xe6\xa3\xd0\x97V\xea\xed\x86\xfe\xe36\xd36\xf037\x85\xa7\xc7\xb7\xeaj\xfd\xf4\xf7j\x9b\xdb\xecx9\xaa F9\xac\xfd|S\x92\xb7d\x8cB\xbc\x1cm\xfanr\x82\x875_K\x1b\xce\x1e\xc8\xb9\xee\x19r\xe6\xf8\xc9\xcd8\x9c/<\x9fE\x90\xdb\x96\x04.p\xcf\xb3N\x9c\xb1\xb2\xbeO~=\x8a\xd6%\xdc\xb0\xc4\x0f\xb1S\xeb\x0c.\xf7|\x9b\x81\xb4\x80er\x84[\xd4\xc4\xcd\x17\xc9\x03\xb0\xc0\xcd\\\xe5\x06.\x028\xbfp\xbfR\xe9\xf9\x06\x01\x97,p9\x8b*\x1c\xfbz\xc9.C\x95\xc2B\xc9u|t~\x7f\xab\xe9\x8ap\xe8'\xae7a0feC\x968a\x8e\xcbMZ\x04\x1b\xec\xc51K\xc0\xf7\xe2d\xcd\xdfI\x88\xcb.bA\"V\xdd\x13^N\xd2\x95HW^k\xba,\x05\x0f\x9f:\xb6\xe2~H\x1c/\xe1F(\xe4\x84\x18\x97\xe4\xad\x93\xfa\\F<\x9f\x99\x9ex[\x1c\xfb\xd2\xbcs\xd5g\x12q\xf7n\xde\x96\x88\x01\x99_BS\xd8\x98\xdc\xd8&\xa7\x98n\xec\x03\x04V^P\xb0\xf4}*\xc2\xde\x15\xd6#5l^?\x11\xc2]\xfam\xe8.\x9f\xb4mX\xcc\xca\xc6\xd5\xe4\x11v\x9bs\xac\xac\xe6M\xaev\xc3Q\xd6\x0bj\xcc}rmsBe\xe9\xa7\xaf\xe1\xfa\xc4\xc2\xddo1[\xd0\x86\xad\x80F~\xec\xb6\xf8\x11~\xbe\xba\xdc\xb5S\x1e\xb2\xc6zM\x1b\xd3\x1d7\x9f\xd1\x1e\x15\xa5\xe1\xa9\x02\xaf\x97\xec1\xac\x1c\x0e\xad\xb8\x8a\xd0A\xc6\x13\xd6\x1d\xf9\x1a|\x91\xb1\x84\xd5x\xc6\xc1\x17of\xee\x06x\xab\xe1e\xed\x14k\xdd\xa83=\xa2\x91\x14\x04\xac\x8f\x14\xc9\x06\x89\xccG\xa42\xed\xea\n\xf8U\x117Ju\x05bN\x1fm%\x1b\x0bR\xfe\xd4\xab\xba\x0d\xb5S\xeb\xae\xaal\x80\xd36\xd3\xfe\xc5l\xb1z\xe2,\xcf:\x8c\x05\xe1\x9d\x1b\x8e\xb7\x98\xf3\x9c\x9c\x9c\xbc\x91\xcd\xeb7vUy#\xe7^\x81\x11\xd8\xeb\x07\xc5\x04\xe5@\xb7\x8e\x8e_\xe0\x10l\xab\x873\xac\x86jy\x03\x99-\xd6\xf1\xeb\x1c\xb4\x04m\xb3K\xc7sr\xf2F\x07\xf3\xcd\xb1\xfd\x9a\xab=\xa4\x19\xc3\xfd\x7fG\x87d\xbd)\xc9\xe6\xb5dW\xe9\x04\xc2s}\x029k\x92\xf2l\xf6\xb7\xc7JIw\xf57\x07!\xd58U\xa5|\x1c\x94\x7f8$\x92\x0e\xa6\xc4\x87d\xcd\xb5\x1d\xb9\x86\x8b\xbd`\xfa\x94!\xd7\xb3\x9e\x197\x88F\x89\xcbx\x9f\xb0\x0d[/r\xc3\x7f\xe3\x8b\x9c\xc8%\xab\xd5vgo\x8b\xd9\xa2\xce?UYQ\xf94\"\xa8\xaf\xa5\xba\xed\xa2\x1e*!\x03\x83\xc6\x89\xa57\xea \x8b\x139!K\x07\xa5Dol5\xe9\xa8o\x98s\xc8\x89\xca\x17V\x83\xa3I:\x17\xf5J\x1c\x8b\xe2\xa7\x08s\xe1\xad\x18\x855{z\x90\x85U\xfa+\x85\n\xd0\xad\xc0\x8al\xc0\xe2\xf6\xc4\xd9\xd0\xd7`\xe9\xa7 \\r\xef\xf0\xc7\xad\xf0\x07\xfd\x14^+\x8d\xa9\xa7\xacV\x8aR\x1e\x12g\x92\xb0h\xd7\x88<\xdb\xf5m\xd6\x1bi\xef\x95\x95\xf2bU\xfa\xe2!\x99\x85\x81\xb6\xc5)\xf9\x13{\xdb*E\\\xb5\x12X\x94vF\xbd9\x81h\x02\x93\x88\x04\x1f\x92$\xc1\x9b7o2\x15\x1d\x8es6\x11\xf5B\x8c\xa2Tn\xfeV\xd9\xaa\x80\xdeq\xb0,;\xed\xf8HD\xc0\xe3\xa3r\xa0<\xca\xfa\xde\xa3\"\x04\n6<\xf9\xa8TW\xfco\xd7\xc6\x95\x1d?[\xb0q\xa9\x9bM\xc5\xbcn\xca\nn\"\xb2\xae\xad\xb6\xf8\x19.\x84\xc3\xad\x85\x8b\xf5q\xda3\xe3\xc8\xb1e]3\x9b+\xfb\xb5\xf2\x94\x8fI\xa4\x81\xb6\x1e\x14S\x9f5 \xc5~F\xcb\x91\x0d\xd1\x08F\x91\xa2o\x99\x8f'p\xe6j\x8b9\xdfF\x81\xe5\xc9\\w{\\2~\xd8\xc2\xda\xf2\xf9\xb3b\xc5e\x132^\xe5v\x98D\x0f\x96\x1c\x9fO7\x87w\x97/Gz\x91\xfan\\?\x89\xa1\xbal\x1cn\x1a\xf7Z\xf1\x01\x19\xa5r\xe6\x1c\xb7\xfa]\x0e\xc5M)\xb7v]s\x08a?e\x1c\xbai8\xe8\xc4\xa9\x89=y\x05\x03\xee\xabQ0C\xeb\x1eq'\xc8\xb3\x17\xcfdsg\x87\x14u\xa4\xc4\x8eD\xe1\xea /\x93D\xe9\xbd\xf1\xb1\xdd\x05jk\xc9>\x82\x96 \xc7\xa1\x13/`7\x02\xcaS7\xdde\xff\xe2$\x075\xba\xe7d\xc3\xcd\x82x\x19eN\xc7\x8b\xee\xc5\xb9('=h\xc4\xee\xf8\x8a-\xd8s/\"Fg_\x8b'\x8b\x84\x88F\x08f\x04\xb2-IK)N`\xc4\x10\xf7\xe6\x87y'\xe9B\xe4\x9e\xc7\xa3\xf0n\x9b\xec\xb4\xe0`<\xc3\xd5[\x98\xe1\xa2\xaf\xf9'\x99\xa2W\xe9\xa9wA\x15$\xcet\x9b\xdbk\x04\xab\xd5\xeax\x0bS\x80o\xf2\x93?\xbbYb\xccW\x12Kl\xe8|\xbf\x8b\xfe\xb6\xa2w\xea\xcd\xed\xc7C\xf5\xfb\xadAv7\x99\xb2b]\xbb5b\xffM\xa1\\\xc7\xf5\x8a+\xb9^!fK\xe7A\xd1\xcbJ\xaf\xff\xa6\x16\xae\xc5\xb2\xb6\xa9\xb1\xfe\x8bbw\xa9\xa6\xfeq\x91\xc4d4l\x85\xfb\xadh\x10 i\x8a\x00/\xb6]\x15\x1e\x0b\xcdk3U_)U\xab\x91W\xb7UiE'\x1fvi\xc6\n\x9a\xa8\x86\xf9\xee\xb5]-\x93\x99MS\xdf\xb3\xc1\x1a)\x0d\x95s\xf7\xeb\x0cQ\xd3V\x9a;?Y'M9~\xa9\x11~\xf168$k\xe4\xb2\x89\x10\x9a\xd5w\xcb\xcc\xf2s\x1e\xd6]\xf5uc\xd7\xc2{R\x90&VV\xe6\x0b\xadL\xb9\xb5\x88\xeez\xefM\x83\xe5\x1c\xde{\xe4\x87\x16\xce\x08Y\x9eq\xca\x93[]\x9d{\x11\x18Do\xe2\x13m\xe6<\xd7\x07\xc45\x83\xc4I\xe0\x83w\x8f\x85| j\xea\x13\x12I\xed aS\x16A\xbb\x07\x17\x88\xf0\xcf\x9d\xc4\x81\x0b\x8ex/8\xd6\xecz>/\xa7\x8bt\x9a7\x06nM\n\x97Q8\x86>\x11\x15}\xc4\x04\x0b\x18p\xe2q\xc0m\xcd\x86\x17\x03\x18\xd0,\x01\x8f\n\xf51\n\x97\x0bq\x0fCo\xce\x00\xc9\x8e3\xbe\xe7\x8c\x1a\xa5 8\xf9y\xc6|\x02\xd7\xc6\x90\xf0\x16\xdf\xce\xb5\"\x122\xff\xf8\xb7\xd7\xbe\xfbr\x1f\xdb\xfa\xdfEG\x7fw}\x14\xebz\x89M\xd1\xdf/\xf4\xc5\xe8\xe8\xbf\xaae7:\xfao\x8a}\xde6\xe9EE\xa6\xcck\xbe#n\x1eC{&\x98\xcf\xeez\xca\x01\x0e\xa2\x91\xb6\xb1t_(\xa9\x89\xc7\x8e\xef\xec\xb4\x17\xe5\xc71s\xb5\xdbI\x0d\xb4S(\x1f\xe4\xdeP\xa8\x11)\x14\x16\xe3\xa9\xec\xd0l\x0d\xc29K\x95X\xe4\xf4_\xf0\x93\xbe\xf3\xe7\x03\xcc\xa9\xc4\xfcp\xb5`V\x84\x0f\xe6'NXg\x84\x8d\xe3Sl\xd7\x02}S\x08\xaa\x92j\xa1\x84\xdf\x12\xbf\xa0\x84Z\xe3G\x9f\x15\x83\xbc4t\xc66\x81\xc73\x02\x8e\xa2|\xa3\x8c]\x05\xcej\x07 t\x90\xd1\x1b\x90\x0d\xed\xfb\x87\x84\xc1{q\xa4\xfe\x9c[\xe6r\xacy6s\"h\x05\x0f\xf8\xdfg\x13\xbc|v|\xb8\n\xbc\x04\xbaa2K\xfd\xa9m\x89|\x94\x1f\x81~\xda\xed\x081H\xd9)g\xb1\xd15\xde\x98\xd7\x96k\xc5\x96E\xc7\xb0w\x1b\x94\x12 \x96mI\x9f\xcc\x9a\x91~\xcfB\xf8\x1f\xfe\x93\x82\xc8m\xea=Yo\xd6j \x04\xb6[\xf4|\x05\xc3\x93\xbc\xc4w\xcf\xb8U\xa9\xaeMh\xe3\x1dn\xd1\xaf\xedjc[\x00\xb0\xcc\xb9\xd1V\xd1rf\xd4\xf5\xd6z\xcb\xe3\xaf\xe7P\xb7\xd6\xd4\xc2NO\xdb\xf2\xe7\x8fp\xd6\xbb\xea\x0e\xe1C\xbb?\x18\xc2\x87^\xff\xa25\x84Nk0\x84\xceYk`@\xc7\xe8\xc2E\xebW\xb8h\x9f\xc3E\xbb\x0b\x17\xbds\xe8\xf6\xbe@\xbfw\xd5=\x87\xc1\xd5\x05\\a>\xa5\x187\xb0\xcc3\xb5\xce\x86\xed^\x17Z\xe7\xe7\xd0\xfa04\xfa\xd0\xea|\xec\xf5\xdb\xc3O\x17\xd0\xeat\xa0\xd5\xa1\xb4n\xab\xf3\xf5?\x06\xb4\xba_\xa1uy\xd9\xf9\n\xad\x01\xb4\x06g\xd0\xba\x1a~\xea\xf5\xdb\xffi\xf1B\xae\x86\xbd\x9bv\xf7\xaco\\\x18\xdd!\xbco\x9d\xfdru \xef\xcf\xdf\x0b~\xec\xbd\xd1\xff\xc5\xe8\x18_1\xa1\xfd\xb1\x8dY\xda\xddV\xff+\xbco\x0f\xe1}\xa7\xf7\x1e\xde\xf7z\x1d\xfa1Z]x\xdf7Z\xbf\xc0\xfb~\xef\xcb\xc0\x80\xf7\xc3\xbea\xc0\xfb\xab\xce/\xf0\xfe+\x9ca\xdb\xceZ\x83\xb3\xd6\xb9q\xae\x03\x8d\xc5\xd9\xa7V\xbb\x8b\xbf}\xde-\xa3\x0f\x03c\xa8\xe8p\xf6\xc98\xfb\x85\xfc\xc6\xb4\xbb\xf4\xdc\xe9a\xf6\xce\xd5`h\xf4\x8ds8\xeb\xb5:\xc6\x80\x1c\xc6t:\xad!]\xaf.\xba\x03\x1d\xcez\x17\xd4\x13\xbc\xb6\x87\xb2\xde\x1c\x1a\xe7\n%_^\x0d3\x073x\x1d\xb4\x07C\x9e\xb3;\x18\xf6[m~;l\xb5\xbb\x03\xfc\xac\xf5\xbec\xd0\x87\xdda\xbb{E_~6\xfaC8\xeb\x1bTa\xbf7\x18\xc0\xd9U\xbfot\xb1\x1a\x8a\xc4\x07\x14}\x0f\xf2\x18|ps50\xfaX\xccU\x7f\xd0\xeb\xc3\xd9\xd7\xb3\x8e\x01\xe7\xadaK\xd6\x9b\xef[\x03c\xa0+:>\x1bXe\xfb\xc2\xa0\xa7\xafp\xfe\xfe\xec\x0c\xce\x8dV\xa7\xd3;\xc3r\xcf\x0d|\x83\xf3\xf6\x00\xfb\x8b\xd7\xb3V\xff\x1c\xaf\xbf\xe0\xcf\xb0\xdd=\x1bf7\xfd\xde\x17\xba\xef\xb7\xdf_\x0d\xb1\xa6\x1e\x9c\xf7\xae\xe8\xbb~\xef\x12\xce\xaf..\xbe\xe2\xef\xa5\xac7?\xb4i\xf8\xce\xaf.;m\xea\x82\xd1\x19`'\xdb\x1f\x14\x1d\x8c.\xd5fti^\xcf\x89c7\xba\x1f\xdb]L\xbb\xba\x00\xa3\xdf\xef|\xee\xe0\xa5\xd7\x1f\x8018k]\"\xcc\x18\xbf\x9e\x19\x97C0~5\xced\xbdy5\xc4\n\x8c_\xdb\x83\xe1\x00/\xf8\xe2\xb2\x83\x00e\xfc:4\xba\xe7\xc69|0\x86g\x9f\xe0C\xdb\xe8\x9c\x0f\x00[\x84?\x9d\x0f\xad\xb3a\xaf\x9f.\xd0\xf6\xaf\x98\xb1\xd3k\xe1b\xedtz_\xda\xdd\x8f\xb8le\xbdY1Zg\x9f*\xfd\xde\x17E\xc7\x943\x03\x7f\x8d\xf6\xc7.|\xe8\x1b\xc6\xd0\xf8uX\x00\x94\x0f\xfd\xde\x05|\xb8\xeat\xe0\xc3U\x97\xaf\xd0\x8fF\xef\xc2\x18\xf6\xbf\xcaz\x13\xe1\xd4\xa0TE\x87\x8f\x9d\xde\xfbV\x07>\xf6\x86=\xf8\xd8ou\x87\xf0\xb1\xdf\xbb\xba\x84O\xad\xeey\xc7\xe8\xc3\xa7\xd6\xe0\x13|j}\xc6\x96|\xeau\xce;\xbd\xb3_\xe0S\xef\xaa\x0f\xeds\xa3;l\x0f\xb1\xc4\x9bvw@\xf0\xd8\xeb(:\xb4?@\xfbc\xb7\xd77\xa0}q\xd9\xeb\x0f\xa1\xdd=7~\x85v\x97z\xdd\xee\"\x80\xb4\xbb\xdd\xde\xf9{hw{W\xf8\x9e\xbeF\xa8ow\x87\xc6Gz\x8f\xd0\x82\xab\x83\xee>\xb7:x\xd3\x83v\xf7s\xef\x17|?\xe8u8\xd6@\xb0\xc29\xfd\xdf^\xbb\x0b\xbf\x18_\x07:\xfc\xd2\xeet\xa0\xd3\xea~\xbcj}4\x04\xbe3Z\x9f\x11\xdf}\xc0\xdb\xcfF\x07\x08 \xa1\xd3\xee\x1a\xdd\x1e]\x06\xfcw\xd8\xc7\x9evz\xads@x\xef\x00u\xb8\xd3\xeb~\xc4U\x82H\x06\xc7Z\x81N\xafw \x17\xad\xe1\xd9'Yo\xd2\xb2\xbe0\xce\xdbW\x17i.\xec\x0c\xcfya\xf4?\x1a\x88b\xcf;\x06\xa6^\xb4\xbb\xb8\xfa/z\xe7\xf4\xd3\xfe\xd06\x06\xfc\xe6+\\\xf4\xba\xc3Opq\xd5\x19\xb6e\xbdYh\x10!\x1f\xb8\xecu\xbe~\xecu\x15\xe8R\xdf[\x1d\xbc\xb9\xea\xe3\x15\x11\x17t\x8d_\x87\xd0\xedA\xb7\xd7\xcd\xf1S\xf7\xaa\xd3i\x7f\x80\xee\xd5\x85\xd1o\x9fA\xef\xc3\x07\x1d\x7f\x06\xc6p\xa0C\xaf\x0b\xbdK\xa3+\xebMD\x04\x83\xde\x15B\xd6\xbf\xaf\x8c\xfeW \xc4\x89\x08\xafw9l_\xb4\xff\x93z\xc9B\xf4\xd8\xe9|\xc5\x17\xfds\xa3\x0f\xbd+\x04=\xa3\x0fb\x99\xf5>\x1b}\xb8l\xf5\x87\xedV\x87_i\x9e.\x8d\xfe\x19\xa2\xb8\xcb\xf6\xe7\xde\x10.;\xadn\xb9Sp\xd97\xce\x8cs\xeal\xdf8k\x0f\xda<\xed\x12\xf1\xcbe\xdf\xf8\x0c\x97\xfd\xf6\x05\xa2\xfb\xcb>}\xd6o\x7fnw\x8c\x8f\xc6\x00.\xfb\xbd3\x9a\x85\xab>6\xe0\xf2\xea}\xa7}\x06\x97W8\xee\xff\xbej\x9f\xfd\x02\xfdV{@+\x18\xfaF\xeb|\xa0\xe3\xa5\x03}\xe3\xac\xd7\xfd\xd0\xfex\xd57\xa0o|0\xfaF\xf7\xcc\x18@\xdf\xe8\x18\xb8#\xf4\x8dn\xeb\x02/\x97F\x0b\xbb(\x16W\xdf\xb8\xec\xb4\xce(\x9d\xd0 \xb6\xb3o\xfc\xfb\xaaM\xa5\x0c\xda\x1f\xbbT\xf4`\xd8\xe3 \xc3~\xfbl\x08}cx\xd5\xefR\xcd\x08\xc1\xd0o\x7f\xfc4\x84~\xaf\xd3\xc1}\x0ew\xdc!\xa2\x9c~\xef\x0b\xadP\xdc\xb5?^\xb5\xcf\xcfz\x1d\x18`\xa5\xb4\x7f\xf5\xaf:\x06\x0cZ\x9f\x8d\xc2v48\xfbd\\\xb4`\x80}9\x87\x81\x81K\x1b\x06F\xbf\xdd\xea \x8a\xfb\x8fh\xf5\xc0\x18\x0c\xf8\xe4\xa5\xdb\xc0\xc0\xc0N\xa5\x0f\x9fp\x98\x07\x9fz_`\xf0\xe9jx\xde\xfb\xd2\x85A\xfb\xe2\x12\xeb\xbbhu:8\xe2\x83n\xebr\xf0\xa97\x84A\xef\xc2\x80A\x8fFg\xf0\xef\x0e\x0c\x86\xad>\x96\xd5\xee~\xc4\xa2\x86\xad!a\xf2\x01\xdd^\xe1\xa5\xdf\xbe4\xcea\xf0u04.\xa8~ T5\xd0\xc5\xf5\x12\x07th\x10\xb6\xee\xf5q\x92ST\xc6w\x86\x16\xa2x\x81\xe4\x06\xed\xff\xd0\x8bOF\x17p\x9b\xc2$\xdc\xdf0\xad\xdd\xfd\xba\xb9\x00\x87\xbdK\x1d\x86\xfd\x16v~\xc0 \x16\xda\xea\x86\xfd\xf6G\xc45\xc3\xfeU\x97\xb6\x85\xe1\xc0\xf8\xf7U\xab\x03\xc3\xaf\x97\xd8\xb4\xab\xee{\xa4\x83\x8cs\xb8\xea\xf2-|H\xf7|\x93\xc3;\x9c\xfa\xabn\xfb\xdfW\x06\\u Q\\u9|_u\x11\x100\xd3e\xba\xa3b[t\xb8\x1a N\xba\x1a\xd0\x7f\x1f\xae\x06\x08\xf0\x9f[\x9d+\xac\xf13\x11\x1f\x82\xaa\xa1\x15\x8d?\x9c\x18\xf9\x8a\xa3\x0b\x9f\xdb\xc6\x17\xf8\xd2j\x0f?\xf4\xfa\xf0\xa5\xd5\xef\xb6\xbb\x1f\x07\xf0\x05\xc7\xe2\xcb'\xa3o\xc0\x97O\x88d\xbf\xb4\x87\x88\x97*\x08_W\x97\xd0FL\xff\xa5\xd7\xff\x05\xbe\xf4\xdb\xc5\xd6|5Z\xfd\xb2\x01\x9e\xd0\xb6\xf4\xaf\x0c\xf8\xd0\xea\x0c\x0cB\x1f<\xcb\x8eP\xa9[\x98\x84M\xcd\xc9\x81\xd5\xd0\xbe\xbb\xfe\xcb.\x1c>\xdb+\x9a\xae\xc2\xa9\x92\xb9\x12\xe1\x84e\xf7\x1c\xde\x1b\xc3/\x86\xd1\x85v\x17:\xed_\x0c\xe8\xf6\x86\xd0C\xdc\x0f\xe7\xed\xcf\xd07>\x1a\xbf^B\x9f^\x0dp\xa6\x06\x15\xba\xff\xb5'\xfaT\x16\xfa\x1f\x93w\x91\xdf\xd4\xfa\x163\xd5\x0dN\xe2\xce\x9bljTv\x04\x1b\xd9\xc6\xe4\xe1O\x1e\xce\xc6\x92\xcdk\xc5\xaeZ\x8aR\xb5\x14\xf8\xef\xc5\x02y\x8d\x96\xb5\xab\x9ag\x84\xf2\xf8!X\xca\xebmQ@W\x9b\xaa\x11R1\x87c\xcfI\xbc[/y\xd8\x12\x8e\xb0\xach&\x9b\x85\xc0c\xc1x\xddI\xa9\xcb(\xce\xa0\xeb\xb9\x03\xc6\x8f\x95\xf2\xb3\x92\x08u\x0f\x0b\xa6\xe8k\x07L\x83\xd8\x0b\x83\xb2WS.a\xc8|\x9b\xb2\x04\xa6K'r\xd7\xf4\xd4\xc1\xc4\xbb\x07\xaa\xcb\x0b\xc2e\xaaWu|\xae\xc1\xfe\xf3\x01|6\xe1\xc1\\\xe7\xcb\x84\xccbD\xfc\xbf\x80\xe1O\x96\x98\xc5\xff\xe3\xc6\x17\x8e_\x10M\x84q\x82\xb5,\"6f.uv\x111\x9e\x92\x0b+\xe8\x9cifD+\x9c\xf3\x90\x9e\x86D\x18\xdc\x89\x9b\x90eD\xdet\x96@\xecL\x18\x97g\x0cH\xa8\xc1\x92\xf5S\xb2\xcb\x11\xf7\xb7\xb8\x1eQ\x16\xcb\xd2I\xdc\x81\x83I2\x0f\xae\xd6Z\x06\xe1\x1d\x0f%K\x85\x93\x0c\x04\xa7\x90{\xa8O\xc5!\xbe\x8f\x93rs\xc3\xa9\xc4\xab\x8b\xee\xcd\x0d\x88@\xdf)%ys\x03<\xe2\xb7\xb2iUO\x0e\xd0\xb8\xed\x83i\xb9\xec\x86\x82\xfbqwJ\xfc\xcc\x81,|b\xe1\xe3B\xbc\xe6\x01F\xaap\x18\x9a\x87\xb5\x7fa\"-\xde\xb5\x80\xe3\x81\xe7\x037\xef}|\xab\xae\xe0\x1b\x89_\xb38P\xf4\x8d\xea$\xd1\xd2g\xcd\xc6;\xfa\xa2\xfd\x1e7\x93e\x823|\xcebo\x1a\x90=@\x8b[W\xb7\x83x\xc1\xc6\x14\x00R\xe1\xc0{\x93\xcd\x15w\x13\xc6\\\x08B1-\xc4\x86\x9d\x85\x8b\x07\x04\x88\x0b\x1e\x07M\x81p\xf4\xfb\x18\xae\xda\xad\xdc\x15\xe5\x85\xe3\x05t\xac\xfaf\xec\x87\xf12b[\xec\x1c\xb8\xe0xP\xe5V\x0e\xee-\xa9\xf8E\xd0OYo~v\xfc%\xae\x02a\xd2\x81+\xca\xf1\x02\\ZKrbk\x08+pE\xe7\xf1\x8d/\x8b\xcem]O\x98\x0c\xb8Q\xb8@\xce\xc7\x8b\xe2\x04:N\x9c(\xe0.\xe7\x8b\xa2)\xc3\x1fK\x92\xd3q\xeb\x05/paB\x99\xa7,\xf9\xect\xbc\x18\x17\x8c\xeb\x8dY\x0c^l\x90\xed\xfb\xef\xa1\x17\x88\x93\x1b\xec\xde\x1b\x87\xd3\xc8Y\xcc\xbc\xb1\xe3\x9f\x85\xf3\x85\x13\xb1\xd4\x04!o\xa4\xa2\xc3\xdc\x0bJ\xcf\x01\x17\xd1\x9fa1\xb8\x8e|g\x11\x03E\x9d\xa3iYs\xd5+\xac\x10&\xe4\x86XX \x88s\xe3\x85\xa1\x8a\xb937\xe6\xe2\xfd\xc2\xf7h\xb5DI\xfc\xc5Kf\xe4R\xd1e\xb2\xde,~\x82\x19\x97\x13\\\xa8\xf1\x9d\xb3\x80$<\xc7\xa1\x14\x92\xb6$Lo\"'\x88\xc9>a\x19\xb8,bq\xe2\xcd\x9d\x84\x9d\xe1L\x88\x85\xf4\xdeK\xa8+w^2\xc3~\xd2\x0e\xc1\xdc\x8e7a\x897gpE\xb9d\xbdy\xc1\x83\x8d^\x86\x84\x86b\x1d\xb2;\x05\xf8x+;\xa2E\xd2^$\xd4\x08\x7f\xdf\n\x80\xbe.owj\xa0~d[\xe1\x8f \xde\xb7\x7f||\xc1\xe5\xba8\xf7b\xb19\xfe\xc8\x96\"Nn\x8e\xe1\x9c\x80\xca|<\x10\x8b\xf8\xb6\x11\x15:C)\xf8\x8a\xcb \x0dq\x85\xedih\x01:\xd7\x08\xa7\x92\xe8-\xf7S\x92\xf8\xe3\x191\x1f\xfd\xdb\xdd\xae\xbaI\x16\x16]\x94$\x88\xdb\xb2\x84\x93\xfa9\xc3\x84{ U\xf2\xbbM\xdbe\xde\x862\x92y1\x95$\xf3\x96\xb4\x8b\x15\x99'\x80@\x96\xe5p,$\x95\xed\xd6\xb0\xef\xf3\x84\x81W\x02\x93j\xf9\xedH\xe6e-\xd2\xed\x80W\x0f\xc4F\x1a\xdb5\xa77\xba]W\xffV\xb4\xfc,\xbap\xdd}-\xf6\xf3\xdaPK\x8e\xdezwv\xfbB71\xe2|\xfe\xccr\x93\xcd\x16\x1bOuwe\x87)\xf0\x15\x9a\xb9\x12\xa8B\x86\x18\xc6\xe4GW\xd6A\x0d\xf9\n=P_\x1d\xbd5\xd8\xa2#\xea\x7f\xafn\xa9.\xa4\xf9\x8c\xe9\x9c^ \x08N\x81\x01}\xf1\x14.\xec\xe9zJ\x1c\xa3\xb28]\x88\xebQ\xb0\x1d&'n#$`\x05dV\xd3\xad\x11OG\x0cg\xde\x12\xa5\x84\x93&W\xac\x90H\x86;\xef\x9c\xa7K\xe8\x17\xe1\xf5M\xc5\xa9\x82Q:\xc0\x8d;\xa3]\xf4\x191\xf3L\xdfw\xfe\xc0\xc7\n\x83U\xbf$q\"\x87HL\xa4jNt\xa6\xc4d4 \x02\xd9X\x0d\xd2[G\xf9\xfb\xab\xd4\x02K\xaf\x02U@\xd5\xb1\xa5\x8a\xa3+\xeeE\x9f<\xc6;\x14\xb4\x90<\xc3\xb7=\xe9\xa0\x8d\xb7\xb6\x9bj\x94o#\xb9\xa6T\xfdu]\xb6kP\xbd\x0c\xf5\xf0@{\xd7\x9e\xady\xee\xba\xf53.\xcb\x81\xbcW<]\x8a+\xd7\xd5\xbf\xc3y\x94\xea\xe5\xba\xea\xef\xf0w\xe9\xbaj\xa1\xbe\xb2]w\x1aR\x90\x83\x11\xdea\x0d\x17\xf5N2\xf4\xf0 \xee\xec\xce\x93\xcc\nB\x19\x9a\x82\xa4\x80\xee\x9f(f\x90\xa1\xfb\x98\xa81\xde\x7f\x84I\xa1~\x1fc\x12\xd1\x0c=\x9ab\x12S\x8e\x9c\xab\xaf\xb9\xa3\xc4\x97\xd4\xd3\xab\x93\xach\xb4H\xfc\xc4u\x13OI\xa1\xa2\x90\xa7Li\xf9e\x99\xef\x91\xecLo\x05\x8a \xc3e\x89\n\xd7\x15(!\x0c/\xe2\x80\x854 X\xe8\xc3\xd3\n9\x86\x048\x13\xb5*Ub\x97\xa15F\xf2\x18\xefiPIw\xea\x01\xeb\xfb\x8e\x95j\xfa2\xcbD\x864]A\x0cO\x9c\x11\xcfG\xa9\x90\xa3(57i;\xf5\xc5\xdd={\x8d \xa6\xb6\xeb`\xe3`\xf3\x0dd\xce\x1a\xe8\xbag\x18\x84\xcf?\xa5\xc7\xf7\xee\x01\xf3I\x8a4\x1b\x1d\x01\xef\xf1\x8f\x8f\xd5\xdb\x97\\\xb1\x9e\xd1\xd1\xe8\xf9\xe8\x9c\xcbQ\xc2\xbf\xb2\xd1\xa9H22:/\xe4hS\xc4\xebQ\xbe\x89\x92\x84e #\xc0\x80\xf2\xd19\xa8\xf5\xa3\xa3\xd1\x89w\xdf\xfb\x11\xaaV\xca\xa4NE/\xf0\xe8d:{2z\x9f\xf0K\x96\x8d\xde\xa9T\x9e^D \x83\x9c\xff\x99\xf0\x98\xa59\x1b\xbd}}\xd6\xe1rF\x12&9)HDb\x92\x90\x15\xd9\x925Y\x92\x1brI6\xe4\x82\\\x93+rNN\xc9\x07\xf2\x9e|%/\xc9\x1brF~%_\xc8\xeb\x01\xe2\xa2\xc4\x83\xd7\xdeO\x05O\x96,\xab\xa5\xfe-\xdf\xb2\x84\xa7\x0cN\x1d\xbd\x86\xdb\xa47,#\xaf\xbd\\\x8a\xed\xef\"[\xbe\x02\x1d\x12\x12\x98\xfa\xa4D -\xad|h\x17\xad\xbe3\xb3<\x80\xf8\xe8SX\x08\xef\xe6\xaf=s\xce\x85:\x00(G\xcd\xc4\xb8\x9a \xaf\x90<\xc9\xbf\x0fz\xc7\xe4\xb5.Fow\xf6\xd1\xbb\x8a\xb2\x94\"\x01\xe2#i\xc2A(\x89.\x17 s]\xf3\x00y\xdbo\x88\xe1\x1d\xae\xea\x8a\xf2\xaeNT/0E\xd6)e\x0b\xc7\xf1Y\xc5D\x11\xae;\x02\x07\xd2\xbb+\xc5\x94\xea\xc7\xf4\x95C\xdc\x8cd\xad\xd0\xb8\x0c\x13}e~f\xc5\xdd\xd4\x8a\xbb\x9cfA\x1a\x12AY\xc0A\xe1\x02\xb7=\x8f\xe7\xf0\x8b\x04\xc62\xe0!\x15\x1e\xb8\xf3#\x94w\x9d%}\xca\xe4\xf7/\xe8S&\xbb\x8b\x06\x1ab\xc646\xb8N\x98A \xbd,h\xa5\x0e\xd6\xabk:\x97-ESN&\xb8Uo\xa0D6\xa5[\xea\xe8\xc4\xcd\xea\xa6;\xdd/O\x9f%\x92\x8cj\x93}\xceb\xe9\x0f\x898;\x02\xa1\x0d\xf7|\xb3V\xbf\xbe\x0c7\x9e\xeelS\x10\x91b\xb0\x9d\x96Y\xe6\x9fniV\xb5Tc\x91\xcd>@\xee\xc6\xe3\x0e\xb0\xc2~\xf1\xaa\xaf\xfd\xe5C2\x92\x12N\x03 M\x8cR\xda\x86'n\x8c\xa8\x9d\x03\xc0PS\xcb\xc6\xacT:\xff\x02IM\xec3\xca\xb0\x8f\xa4R\xc4 A-\xac&\xf9\x94U\xf7q\x1dJ\x9dN\xe7\xe2ij\xb1BXz\x9a\xd34\x10\xe1<\x87\xcb\x7f\xaar\xae\xcb\xb5\xfe\x9fWa\xaa\xf5*=e\x12q\xdc\x07 L\xce\xa0\x14\xdc\x83\xc1\xa2\xfd\xeaw`\xb0P#\xf2\xeb\xd6Z\x03kNMe\xb8hq\x8e\xfa3\x86n\xf2\xe5j\xc0t\x97\xd1i\x05\x99T\xeb8\xceg\xa0{\xce\x98\xa6\xae\x8b\xb2I\x9b!)]\xbb\x8a\xba\xae\xf9\x10\x92G\xd9\xc4{\x88\x8f\x11\xfcXj\xa6d}/\x11\x17h6\x81\xc7\xe8D\xd0)\xc9a\xc9\xd3\xb4^\xec\x05\x15G\xb9\xb6\x1c\xc4\xeb({.\x91\xc0\x1e8.\xa3\x06P\xbc\x9cm#\xd8,\xc4e)(\xd5\xe6\xa6\xe2\xd9\xd4\x1a,\xbb\xdd\x84k\xc2\"o+r\xd8\xfe\xa0AN\x8a\x90DZ\x90\xa8n+ \x86\xa44A\x92\x19q '\x02\x93\x08\xe3]N\xc5dV\xc9F|G\x06\xfbE\x8f\xf5-aG\xe1\xe4\xb8\x83\x15VX\xff~\xa4\xb0%\x9bk\xcar~}\xc9\xc5\xae\x91\xcb\xb3A\x81\xd9\xd2*\xd0\xc3\x1c{\xa0\x88-\xd0%\x05\x8a\x10A\x8b\x03u\xbbnS\xeeG\xce\xfbK\x96]e\\\x8da\xc4\xaey\x0e\x0fu\xb9\x91\xad\xda\x1f9\x13\xa9\x0ft\x9c\xb3\x84\xca;\x86\x10\x98\x8c!e\xad\xd1\xaaF_\xafl\xb6wB~\xac\xca\xb6\x96\xbe)\xae/f;g\xc9\xa1!\x95e{H\xf6\x83\x95\xa9\x1b\xa3\xb9\xe2r=\xaaT\xb8\xd1\xd9\x9a\xe7\xa3Mt3\x8a\xa3\"g\xa3m&\xce\x13\xb6\xc9GWk\x96\x8er\x96\xf1(\xe1\xb9\x02\x88\\\xb3\x11`\xa1\xf7\xe9S\xea\x18\xb1\xb2\x1aT\"\xa2\xe5^\x0d\xd2\xe6\xaa\xd4wo%\xb2\x97Q\xbcn\xafs\xbd2\xef\x02\xaa\xdd\x1a\xaa\x15 \xa3D\xbc\x80\xe3\xf3#\xd5\x93Q\x91\xee\x99?\x86\xe7\x12\x94\xcf\x0c\xa2\xcc\xcb\xd6 jB\x1c-\x97}c\xba&Yu&XoZq\xad\xae\x95\xc6\xf3=\x83\xfb6\x04P\xeaZc\xa1\xe8U\x0e\xea%\x08'\xfbz\xbb\x92=\xfa\xfb\x8d\xedIl\x94\x8bf\xabVka\x95\x96\xb2\x1f\xdc+\x9e.\xabU\xf3*u\xf0<\x9b\xd0Yk\x10\xfa\x9a\x0f\x94\x91)X\x05\x07\x87\xa0\xc3\xb9\xfc\x7ff\x0c\xdf\xdb\xfd\x8cm\xc4%\x1bX\x00{\xbat4\x1bS\xe9\xba\x03\xcdH2\xdb\xdbH\xd1\x16\x0bkE\xa5Y\x8f\xe1\x10J,\xcb\x9e\xcay\xa6\x18V%\x9f5s\x06YX1\xb8\xb9\xa8\xb7\xc3\x9a\xf2,b\x81\x08\x89 \x1a\x8azK-w]\xc7\x19S\x9a\xe3\x1e\x1b\xcfqe\xee.\xe8t^T\xb7\xed\xcc\x8b\xc9\x04[98(BmK\x18\xd5\x921\xa3|W\xcb4\xfb\x86\xdf\xd3\xb4k!\xb4%\x06\x11Yo^\x02\xc5,R\x14d!\xde+[\xb4\xac1x\xff,\xe7ME\xf3 Ok\n\x98\x7f>}\xffn\x9fxifm_\xc7\xbeq \xb0\x8a-\xa9\xdew\xf8\xf8o\x10p\xfe\xfb\xb9\xb8.\xd7B9\xdd\xe5Mt\x91rY,\x19\x9d\x92\x96\x1e\xa1\x84=\x0d\x07]\xb6\x01\x05+\xd1\xbc\x12\xd9k\x90e\x9a\xd5\xf2\x15\x9a\x1a{\x83\xad\xcaj\x08\x06\x0e\xd3\xa6Znt\xb5n\xde\xe3\x13%\xbb\x1dI\xc2a\x97\xc0[%Bd(=\x06;z\xab@pr\x8f\x87\xf3\xf4\xd9\xccu\x91x\nv\x0d\xca1\x11\xcf\xd4c\x06\x8fc\xca\xf0\x1c\xdb\xfa\xe4\xe4\x9bj4\x9d\x15 \xf5\x8aglqr\x8f\xfb\xe2\xa9\xfaE|2\xc3\xfe\xa5\xe0\xcb\xd1t\x10@\xfa|\xed\x90JSl\xd5\x170c\xa1\x16\xf2e\xe2\xcaY\x16\xda;\xc10g\xc7`o\xafz]\xc9\xb0Q\xac9\xa1\xf3\x06\x9d\xe8\xce\x99\xa2\\\xedQ\xa7!\xa5l\xd1I\x9b\xccB\x9a\xa1~\"\x91\xd8o\xcf\x9b\xa1y)\x99\x12f\x88k\xaf\xe3u\xdf\x1ac\xb7\x06\x9e\xba\xe7\xb8\xb5\xa8\xaa\xe4\nm\x00W\x07\xd1\x86dtfH%=\xb1{\x17\xed\xdeg\xe1\x9cMhz/\xdd\x0d\xb7\xa2\xf1-\xff\x87\x9a\xa5\xe1Q,\x85\xdcC\xbb{\xd8\x0c\xa6\xbd\xea\x85\xd7\xda\x88\xa0\xd6\xe6\xa0\xf4\x11R\xd0)\x89\xe8\x94\xc4t:\x8f\x9er\xd7\x8d\x9f\x8a9F9\x85;\x87\x9f\xa2\x82\xa6A\x1c\xe2E4\xa1'~\xfe\xacX\xc4\xf0@i\xa1\xf0}\xa2\xb2Mf\xe1\xbd4\x88\xd5\xdc\xa8\\D\xe5\xa8)\xe7\xe0@r\xbe\xe1I\x94qy\xb3W\xf7]\n\x05\x86cx\xae@\x84pY\x0e#\xbe\x14\xc0<\x9a\xd3[O\x9a\"\xeb\x9a\xb7\x0c\xafxL$\x9d\x01\xb33\xa6\xbaN\x8e\xb9T\xe3RL\x90\x05Y\xd8\x99V\x19\xce\x9b\x93\x8c2\x19eE\xee\x89\xec\xe2\xf8\xbf7Q&yz\xfcAd\x92e\xa7\xba\xb1\xe3/\xb9'\xaf\xa5\xa5\xdc\xa6\x0b\x14\xe5\xf4\x16\x1c3\xa2\xc4w\"\xc9\x1cb_$\x04\x99bi\xcc}\x87\xa51sH\x04\xcf\x11<+\x15\xd1w \x88\xdcy\xc2}\xe7}\xfa4S\x9d>ow\xda\x99\xc4\x93hb\xe7\xfb\xea\xfa&T\x99NM\xa3vD\xf8\xe6\x87c\xf2\xa1\xea\x89Yq\xa5\xf9Q\x8b\xacT\xab\xabT\xcb\xaa\x8a$\xa3S0\x9f\x18\xe5?{\x9a\x82\x01\\\x1a\xeb\x1ab\x8a\xe5\xd7\x9e\x8c+\x9e\xf2|\x8d0\x91^&\x84\xdcu{\xf0\"QTq`\x96\x1d\xb6\xe4\xf2gs\xb6\xce\xe1\xe9\x88-:E_\x15\x7f\xfcqc7\xa7=\xc9\xb2\x0da^\xb3\x14\xf6;%Z\x99q\xaf/\x8d\n;F\xc2zW\xbb\x0d\x15\x92\xd2\xe06\x15K\xe6gD\xb5\x9c\x7fd\x9b\x88\xa7<\xbd\xf0%\xc9e\xe6\xb3]8\xaf\xdcX\xacO`\xeam\xc5\x16\x81\xbd\x9f{\xb9\xb4\xd6'\xbbe-HNu\xba\xd9\xf6\x9eb\xed\xf1\xc2=\xd5\x94\xc6\x89\x85\xa0\xcd\xd7 \x0f}$\xba\xbd\xeb\xe4\xa0\x02\x93\x19\xa5\xcd6]\x17 \x8brSLR\xbd[\xa0\x87$\xbaC\xe2^;\x01F\xa8k\xd3\x1b\xe33\xbc\xc3;\xbeB\xd31\xed\xe6\x05N\xee\xdcs:\xc3\xc0z#\xa3\xd5Q\xe7\x9e\x13jG\xc8\xa23\xa0y/\x1f-v\xda\xb2\xdd\x19T\xb1oP\xc5]\x83:\x9a\xd5\xc3\xdaa\xd2\x9a\xa0\x99\xeb\xb6*\xd3\xdd\xf9\x9e\x1a\x1b\x80\x1a\x98\n3\xbc\xba\xeb\xad\xd6\xe9\xec\x10\x10\xa3}@\x8c\xee\x06b\xb4\xeb\xf7%\xda\x07\xc1\xe8\x9f\x1c\xef\xae\x8b\xee3\x8d\xee1I\xba\xe8NV\xed\x94\x19\x9e\xafz\x0b n\x0fx\x15\xfa(>\xb8\x00V!\x8d\x87\xa0\x1e\xef\x1bi\xfc\x8d#M&\xcd\xb1\x9e\xa8\xb1VN!Y\x8f\xca\x0c\xf8\xb2\xee#\xba$\xa3\x8a\xc4L \xaf n\xfa\x94\xd7\xfe\xc5\x82\xb2 \x0dINSJ\xf9\xd1l\xae\xd1\x83R\x81\xa5\x19\xb4P\xf2\xb54#\xcc5F\xe85\xd7\xc1\n\xbbbr\xd2(Z\x10I\x8b=c\xf9F\xf3r\x10\x12I\x83[}F\x1fL~\n\xb4\x8a\x9d\xed\xc2\xb9l\x93\xc6\x8cJM\x1a;.\x82Y\x13\xd9 \xaf\x8c\xf4\xf3\xac\xb1`\\\x17e\x9en\xa6\x81ILO\xa8\xfd\x82\xbb>\x86\xbc\xe7\\h\xce\x12\xda\x1e\xd7uV\x87O5\xc1o\xd3V5\xe7MK\xf7 \x98\xfanp\xd5.K.3\xdc\xd9\xb4\xcc\x1a;+\xb5h\xb0pf\x8e\xefL\x1d\"i\xdf\xd9\x10\x00\xe4\xc1\xd9l\xac\x90\xc7nf\x18\xff\xf4\xa6c\xba\x0c\xd2p\xce(\x9b\xf0I]6\xe0\xa1\xc7\x97w\x0dd\xd8\xa3\xf4\x00\x12\xeb=9`\x96\xffx\xa7\x80\xc7\x88(\xe4\xb6\x90\xbel\xa1C\x83Sf\x15\x97\xacO\xa5\xb6Q\x02j\xb28!j\xc7\xad\xfc\x00\xea\x14\xb4\xda\x92\x8a`OG\xcc\xa3\xc9\xa4\xdaQ\x8f)\x0f\xa2\x90$t:O\x9e\x16\xf3\xc4BkE\xf3 \x01\xaf\x98\x15\xa5qY\xc2\x1a\x8b\xf5\xb7-\xcd\xdaD\x86\xaci\xabsA\x1c\x92%\xddZ$]\xeb\x07rc\xa0\xa2)[\xe6i\x80\x18\xda\x86nh;%X\x85\xd8,\xd0\x1b\xfd[\x96K\x1f\xa1\x9b\x0e\xb0m\xa6%\xe9\x95\xa775y\xd3\xb3\xb0\xb6\xb3p\xa3ga\xdb$\\mQ\xcdH\x7f=iu\x9b\xb1K.\x8a\\i\x00\xd4z\x84*A\xaf\x8b\x04z\x9b5\x8d\xd7,\xfe\xca\x96\xaa\xf9\x1cH\x03\xec`\xf1\x94o\xf8\x1f6\xb9\xe1D\xdah\xfa\xd0>ne\xa4\xa4S0N>\xed\xf5\xad\xef\x98\xf2\xbe\x90#\xb1\x1a\x89l\xc9\xb2\xd1\x95\xc8\x96#]-\x17\xa9S#\x9d^8\xacb\x16i\xbf\xea\xea\x1b\x83\xbd\xda\xdew\xb5\xce\xd4\xba\xcb&\x93yk\xb8(\xc3DR\xbb+\xdf\x86\x8d\xa9tQ\xc1\xd3\x1f\xc8\x14\xec/x4\x0b\xbdx\xcd\x93%\x8c$\xa5Yc\x14M*\xd0\x99%\xcdO\xe6\x0d\x0e\xc0\x87f\xceRH\xb8\xc3\xd0\x97D\x91[_\x10h\xd0\xe7;5,\xbe\x93\x15[%}TawL\xb1V\x1bz\xe8V\x81n\x8a\xef\xa8\xc0\xe6<\xe4\xce\xb3\x07rs\xf9\x8c\xb2\xb9<:\xaa\x98\xd2\x10\xe8C\xf0b\x85!7LQ\xf3\xb4\xf2!lc\xf5\"\xf34\xb8\x0ch\xb5lc\xb6K\xdbY\x834\xf4\x91\xadZ\xf1\x01\x9a\x0e\xad\x13\x85m&\x17\x1e\x9e$E>w\xdd\xbdSp3\xf8~}\xb5\xefQ\xa25\xd2\xf4\x92e\x92-\xf5g\xd6~o\x9c\x00\xd2\x1b\xbf9e\xadW\x9dAZU\x98U\x8f\x8d\x92U\x19\x93\xdb\xfaURV=\xeel\xff\x9a\x9b\xe8p\x18n\xef\x06\xfa?\n\x96\xdd\xb4\x03g\xe8\xa5\xf0\xab\xfa\xf0!\xcar\x96\x81\xea\xa7f-g\x95\xcbR\xb7\x19\xa8\xe7 \x1b\x84\nQc<\x8d\xe3c-\xd7\xdb\xc1\x83\xd3\x84\x0f\xa6\x8a\xc1\xd4a\x97^\xed&\xd6\xe8\x80%\x03\xc5d\x82\xd3\xa0\xf1!(\xc2\xd0\xf4ZO\xd0\xbcqh\x10\x08\x89\xa9\xcb\x8bAko\xd5d\xbc\xad\xaboA\x11\x92\x98\xc2)\xeb\xa4s\xa6b\x1e\xd3\xc8+rfM/\x8b\xd6\xc4\xd6^h(\xd2Z\xfd\xad\xee\x9e\x1f\x99~\xee\xb0\x1f\xe8OaE\xa8Wt:_=\x8dm\x8fV\xb6G[\x1a\x07\xabp\xae\xb3\xd3-\xf8\xde\xac\xe9\xa0\x11\x02E\x98,i\x0b%kQ\x07\xad\xb1\x95s\xb5\xe6>\xa5\x94\xd6\xb4?R\xe4-gi\xac\xcf\x87\xc0\xa4WI\x9e U\xf8s\x8d\x1d7t:\xbfy\x1auf\xe4F\xf5Z\x04\x1f\xa9\xfd\x10\xdc\x84a\xf3\xb8\xc9\x0eb\x80UQ6.\xe9t~\xf9\xd4\xf6b~i\x07\xbd\xa1\xcb\xe02$\x17\xb4\xbfF\x83MH\xae\xe9\x85\xa7\xcf\x8f\x00\xf8\x0e\xf4EUvE/:=\"\xe7-\x11\xeb\n\x93S\xba\x998\xc7\xce\xe4#\xf9`\x10\xe8\x94It\x0e\x80j\x82f/d\\\x17%4\xd1\x07s\xd0\x07L\xb4lD)\x15\xc1\xc7\x10\x02\x8c|\x0c\xbb\xa7\x930\xa9\xab\x1e\xf7\xab\xfe\xf0\xf1\xfd\x9f^\xff\xf4\xfaL\x81\x9d\xafP\x1a|\x0c\xad\x9f\xd75\x89\xbcs!\xf2\xa6\xb7Wk[b\"w\x18\x931\x0fN\xc3z\xce\xde\xd3\xe9\xfc\xfd\xd3s\x0b\xa0\xf7\x16@_\xc9Kz\x1e\xbc\x0f\xc9\x1b3\xf6\xeap\xe0K\xf2\x11\x933z\x15\xbc\x0c\xe7\xd5\x88\xd0W\x9a\x05oB\xbcP\x7fM\x89\xea\x96\x05\xb4!\x1f\xc9\x19\xf6\xbf\x82\x07\xb5~\xd9\xa9n\xd0\xf1t\xa7\xb7#\xab\x8ar\x0d\x9a\xbc\x06\x8d>\x96E %\x87\xf1\x1ax\xeev\xbb\xceL\x1c@\xd2;p\xa2\x87\x9fjn\x1a\x0b%\xc1;\x88}\xf3kg\xbe\xc8\x97f/\x9b\xe4d\x984\x01l?\xceUs\x1d\x1a\xe5\xba\xe8W\xfak\xa3I\xd5\x03\xac\xc7\xed\xba\xe8\x0b\xfdb\x06\x9eC:\xf4\xe6s[+\xc0\xe4\x95\x12?_\xec\x0bV!=\x9e\xbfc\x17\x91dK\x84\xf1\xed\xe7\xbe\xae\xd5\xe4cM\xe2\xf8\xb95\x867\xf4sP\x84@u\xde\xd1\xc1C\xad\xe8\x0d\x9e\x0fa\xc2n\xb7\xafNU\xd9s\x8a\xf6\xd5\xa7\x1a\xc4\xd8\x1c\x07Uc\xf9\xb5:A\x88\x9ec\xd7\x1d\x7fi\xbe\xeb\xea~&oioT\xc1\xbb\x90\xfcD\xd3\xe0]}\xf64l8\xa7\xa1\xb7\x00)\x8d\x8ecJ\xd1\xcf\xf4E\xf0<\xc4\xf8g/\x8fE\xc6&\xf4'\xf2\xb3>\xaf\xa3\xc6\xa3\xf0\xe0\x9c\xa7\x0ce\xc1;\xe3\x9c\x0cM\xffFo3\xb6\xf2\x9f\x13(\xe4\xffD\xaa\x12\xbe\xca\xb9\x9b\xabJ\xe9o\xe4\x95\x16:\x7fk\xa8(\xaf\xb4\xa6;\xbc\x86\xa5\xee\xc5\x11\xd3\xbf{\xf8w\xdf\xffL\xeb\xdb\xbd\xe9n\x11Q\xabb\xef\xf3)\x0e\xcc\xe1\xe76\xe5eahO\x19\x0c)\xef-\x84\xba\xab\xe6\xd6<\xb1\xd0\x8c\x03\xe1\xaa\x05c\x81\xbf5\xa7\xfb\xfd\xea\x9c?1\xcc\xb4\xb1\xa6H\xb36_\x92V\xb7}F,g\xf6\xdb|\xda\xb6\xb9\xab\x01\xbb\xe7\x8c\xca\xed\x8ed\xeaO\xda\x95\xff\xf6I7]A2\xdf\xb7\x1bQ\xd0\xce \x19T\x8b\x85x\xce\xec\xa0\x15{0\x8f\xdd\xa3I&\x0e\xd2h\xc3s\xc0<},GU\xc5\xd3\x8b\xeax\x0e[\x9a\x939\xa3\x17E\xa6\xc4\xf8\x91\xa9N\xe9\x90\x10\xb2\xe2\xd3\x7f8\x93\xaa\x91\x89\xf3\xe9?\xea\xc3\xf5\xba^S\xd5\x1f\xb6*(\xc1\x9a%\x1az\xa7\xb6NT\xf6\x90\xc8\xae\xfb\x98\xa2\x15M\x83(\xc4\xc14$ ]\x05\xb3p\x9e\x05q[nS4X\xd5dl\x1c\xbdZVd\xab\xea\x11\xb6\x9e\xb5\xae\xc7\xde@\x84\xb6\x98\xf0`\x1b\xd2\xb5]iys\x1f\xa7'\x96\xb7E\xfc\x8c\xc8\x8eZ\xc0\x89\xac\x85|\xad\xce\x92:\xc6\x05-\xcc\x01K\xed\x00-{\xce\xf5f\xae\xbf_g\xd9g\xb4\xf8\x9c\xb1\x15u\xf8\xd2\x98+>\x9b\x01\x0d\xa1\xa2\xce\xb04\x11\xb8\x0e\xe4i\x8fxo6h\xea\x8ce\x9bW\x19\xfbG\xc1\xd2\x987\xb6\xf7\xe0\xe3\x1b\x98\xab:\xb1>\xfd\xd98\\\xd8Q\x85\xd2\xd6\x190\xfd\xb1\x1d\x0dd0\x8b\x1d\x16\x04W\xb4\x07\x0d>\x9fS\xef\xf1C\xf3\xfcuFg\xde\x89\xe9\x08\xcb6zt&\xa7=\xeb\xfa\xfb\x9aK\x96\xf0\\\x9a\x03\x1a}e\xae\xde\xef\xa1\xd9\x91~>\x9f\x98\xdf{\xa88\xde\x83NA\x1eb<\xb9\xc6\xe4\xf2\x1e\xdd\xaa?k\xb2\xd1\xc7\xc9\xe0Zm4c\xf7\xef]\xe2\xe3\x19\xbb\x0fQ @\x02\xbe\"\x1b\xbcS\x8c\x8cF\xbbzb*+\xf6!\xfc\xdc\xeb\xd9U\x89\xc0CNX\xfd\xc81\x83\x1a'\xde#\x96\xa8\x94}\xa7\xa8\x0e\xd1&d(_\x7fi\xb5\xbf\xd8\x0e#\xdc\x12\xd6o\xdb\xaab\xbf\xdf\x1d\xd5\xb2\x0bIba\xe2\xb7 du\xd4\xbd\xb4\xa6\xa3\x92\xb6e\xdd\xdd\x1e u\xfd\xcc\xb4n\xfa-!\x07\xc8\x0c\xcf\xa5W\xa4\xf9\x9a\xaf$\xf4\x04\x13\xe6\xc1-\xf9:\xde\xa4>XY\xd9nZ\xa2\x1b\xc9\x9a\xa7\xc3\x0f\xda\xf8\xb5mJ\x89i\xd8\x1c\x19\xb7\xbb\xdaM/\x05\x1e\x88\x10\xa89U\xc4\xda\x86\x8e\xd3hZ\x05\xe3\x19j\xa72\xd5Ta\xc6*^\xca\x0698\xe9f\ndH\xd3\xf6X\x9b\xf8\xaf-<{\xb6C\x9acd\x8d\xb89\xe6\x18\xbd\x1dhf\x07\x9aR\xa9\xcf\xcf\x0f\x17\x0c\xd2\x107\xf9\x7f#\xbd7\xba\xf4\x0e\xf9\xe40\xacI\xb1\xbf\x0b\x10\xc2z\xb8\x17A>\xd4\x115m\x07\xfb\xa2u\xf6b@\xf3/\x82(\xdc\xdfV\x10\x87\x8b\xe1d\xda\xedq\x10\x87\xfe\x9e\xac\xc3\xc9U\xc4\xee\xfe'+\x12\x0d\xe1CW\x89Q+\x81\xaf\xd0\x18\xb1z\x93\xd4\xa2A\xcb\xf9\xe5.\xb4T\x88\xdcC`\x85\x9b:\xe8\x9f\xecU\x1f\xb0\x10\xf7\xd6\xa0\xb5\x04\x1f\xd6y\xe6b\xa8\xb6@v\xa1\x0di\xe0n5\x98\\E\x99\x0fD\x88\xfd=E\xd5\xc7F\x9c\xbb\xee\xe0\x14\x9c\x7f\xedm8j*\xad7\xdd*\x97\x8a(I\x80\x98\x1b^\xa5M\xfdW\xd5O\x8d\xaa\x86\xe1\xde:\xf8E\xda\n\x0dV\x05\xfaT\x80\xaf o\xa5Y\xdd\xa5\xef\x9b\x9c\xf3(\xfeZl{-\xa8\xfe\x1d\x80t\x14\xc7l+\x7f\xe6\x17\\~l\xafi\x00!\x91\xf3\xa5\xb8\x95\x14\x19`\xaa\x89A\x18\x03@_\x88%\x03\xe6\xba\x833qH>{\xf0\xd8u\xe5\xd3\x87?\xe2y\xcd0\xaa91\x81\xc2t7\xd1~\x94\xdft\xe0\xd4\x01v3\x96q\xa7\x8e\x97\xefO\xa9\xf3\xf2\xfd\xa9\xd3N\x86\xcb\x89\xa9\x03?\x9dOg/?\xbe\xa5\x8e\xfa\xdb\xf9\xf0\xf2\xe7\xd7g\x9f\x7f~}z\xf6\xfc\xdd\x8b\x97\xd4i\xbdv\xb2\xfe\xf4\xfe\xfd\xe9\x19u\xe0\xa7\xf3\xe9\xc3\xc7\x97\xa7/\xa1\x02\xfb\xd4\xc9\x90\xb0k\x10\xa4\x06\x04\xb0\x11\xab@E4\x1d@\xfdQ\xa9O\x1a\xb3\x10\xee\xd5\xacH\xefn \xb5\xc5\x86\xf5\xf1_\x8d\xe2\x08C,\xa9;\x1aV\xd0\xc2\xad\x86\xf5\x9c\xd5\x87\x84\xbf\xad#/\x1b\xc7\xc8\x86\xc7\xdfh\xa0\x8d\xa6{z\xd6\x9a\xa5o\x85\xc7O \xb0\xfeK\xda\x07\x14\xf8\xd6v\x15\xb26[\xad\xe7`\xaa\x04\xcc=p\xef\xd4\xa3\xc4\x99\xd3*\x08\xea`h\xd4\xc1\xee\xf4\xec\x07\xf3\xb95\xd60\xb3\xc6A\xcb\xa3\xbdU\xbco\x8e\x15\xd1\xe5+\xf4\xe4dLe\x9b:\xe8\x13U\xbeC\xa9\xdcW\x18\xd6\x00\x9c\xac\xf9\xeff\xb6\x16\"~\x0bt\x0e\xe2\x18\xd4\xff\xf7\x7fm\xfd\x80K\x10\x86\xd1\x05\xaa<\xfa\x97W)\xab\xd8\xbe\xfbp\xe8\xc0\x1a\xce6Zo\xee\x89\x01\xc6=\x05\xf2k\xb7\xde\x8e\x98_\xc9,Y\xd3a\x17\xaa\xaeB\x85j/_#@\xc5\xda\x01\xc4\x1c\\\xb5;\xaaZ\xeay\xbd\xbc\xa6\xd3N{\x0d\xee\x01\xbe\xc4=&\x08\x8d\xc3\xfe'n\xd6\x95\xd3\xc6W\x934\xef\xc9\xb2\xb6\x0d\xf5\xa3\xbb\xd4\x12h\xe7=\xa7\xe7\x03\xbdc\xec\xeb\x1bhg\x1f\x873\xbd\x08\xda#\x0e\xf7W\x19\x8b4/6\xac_kC\x04\xaa\x9bE\xed\xeeV\x0d\xb4\x05\xa0^#\x8a$t\x8f\x11\xb7Zh\xcd\xd8\xbc\x06\x85\xd5\xac\xec4wg\xb6\xd7d\x0d\xe4\x01C2k\x8f\xa4\n\xe6)\xb1\xbe)\x16IOu\x17\xdf\xc6Q\xceF\x83\x8b\xc3o\xe3w\xb3\xd9\x0fF\xb3\x9d\xf7K\x03\xb3=PT\x13\xb0~9E5\x0e\x14S\x8bjn.\xb6\xf2\xb5\xbe\xea\xb0\xeb-\x8b%[\x8et\\\x86Qdn\xd2\x10\xea\x11|\xb5G+Q\xa4\xcb\x913\xd1\xa3\x9dk'\x0d\xd9>\xc7\xaaC\xd6;:P2\xdc\xef\x05\x0e\x1b\x90K;B\x91\xae7\xbe\xf6\xee\xc8\x884\x8a\x82Tzjom\xb7a58I-\x94l\xcf\xd3m5Q\xb9\xcc\xf4<9G\x8e\xcf\xda\x88q\xc0*R[\x1d\xe6\xe0\xa8\x0d@w&\xdfS\x855\x8f\x99\n:\xf0/\xd2\x8c\xc5\xe2\"\x05\x874[fdoKn\xc3p^\xfb\xc7|\x03 \xb5et\x18\x87!\xa8z5\xfb\x10\xa9\x9ae\x1b5\xe90\xfbv\xceS!\xd7p\x97\xcaw5l`\x9e\xee]\x1c\xffo\xa0\xf7\xdd\x83S\xb0\xd5}\xfc\x16\xe0\xa6f\x8c\xa9\xc1\xd2A4\xed\x0b\xd7\xdf\x82\xa3&\xd4\xb29zR[;\xab\xd8\xc7\x1a{+\x87\xa1^\xbe}\xd7\xa2V.SN}\xbb(\x19\xa9\xa5\xd8\xc1;\xbd\xe4[\xc8FF[\x91\xe7\xfc\x98\"5\xd5n_\xdd\x00a\xb5!\xdd\xe2\x9bs\xcf\x81\xc8X\x9d\x1aZ\xc6\xf4\x19\xae.X\x1af\x92\x99e\x92\xd97\xc1\xbb\xc9\xf4k\xe5\xb2\x07\xfe;\x88\xc9\xdd\xb5\xec\xa3--e\xee\x00\x12\xb4D\xfc~5\xa0\x93\x1d(\xae%\xf8\xbb\xe5\x85\xbb\x07R\x89\x0fM\x86\x92R\xe7\xafi\xc5\xd2\xb5\xb85R\xe0\x07\xb4\xcc\xbe\x19-3k\xf34\x0bY\x0b\xe2\xcd.\x0dc\xea^%\xfb[0V\xe3\x13\xd4\xf3:\x95\x9a\xea\x91\xd9TGU\xc9\xdfE\xef\x90%\x82j\xf1-\xb9\x1c\xd9\x8b\xdaG\x9b\"\x97\xa3s62\xf7\xa2\xdf5\xbc;\xe8T3\xe2\x0c\xcd\x0e\xd2\xa91\xe5\xf8\xbb\xe8\xca\xdd\x13\xfb\x7f\xf0\xfc0\x9e\x1f\xc6\xf1\x7f\x9a\xf4~3\x8e\xf7-8\xffr\xe4\x86]\xcd\x7f1R\xeb\x9d\xd2\xff\x83\xcd\xff\x7f\xc6\xe6\xfa\xc4\"\xa7\x8e\xc5\xe0\xeaB^\x94\x0eX ^\xef\xf0\"\xb5g\x863\" \xc3~\x8aa/\xd9^\x12\xcb\xf1\x0e\xe1\xee\xdd\xb2\xc3W\xd8\xca\xec\xa6\xba\xe7Nu)\x06\xfbP}\xf9\xddtw\xe0b\xdc\x1f\xf5\x15\xbfO\xf4\x0d\xbf''\xcd{r\xd3E\xb7\x94\xe9?\xf7V\x90\"\xd0\x8cd\x187\xeesn\xe7\x83\xb8\x95\x19\xe9_\x92{\xe8\xf2\xdf\xfeU\xda\x0b\xbd\x8c(\xf3\xfb\xf0\xed\xdd\xc0\xdb\x1c\xdc\xc3\xe6h\xc6)B\xfd\xa9x<\xb6~.\x9d\xab\xb6owdFn/\xd8\xd0\xdd\x85\x8fw;\x1c\xcc\xc2\xdd\xa1\xbb\x93\x0d`\xef?0\x905w'?\xc4\xb5\x9fT\xbb\xc5\xb9\xf4V4]\x14=`\xf2\x15\x12`|\xa19\x92d<\xc5D\x80?\x0e\xae'~T\x98\xcc\xf5\xe4\xef\xf8\nATK\x9e\x8e\xb2\xb2tr\xf3\xd8\xbb\xe8\xd8y\x1e\xc7,\xcfE\xd6\xba\xe2\x94-\xabK\x8e\x1d0=@a%\xc0\xc2\x9cz\x90\x86{S;p{\xf4\xa3\xd6\xe5\xd1'S}y\xf4\xc9}}y\xf4\xec\x11&1\x8d\xbc\x0b&IB#\x8f\xa5+\x91\xc5\x8c\xac\xa8\xd9\xfd\xd4?\x18nh\x90\xc8\xd1\xaf\x0e\x9e\xa3\xe1\x0b\x95IF\n\xebK=\x1e\x17\xae;\x1e\x17^\x91\xe6\xd1\x8a\x91\xb8N\xa9\xefN'\xdb:5\x15gQv\xc1\xe4/L\xce\x07PM\x0d\xbfw\xe3\xac,K\x812\xe2\xa4\xd1\x869\xb8,y\xf5B$& \xca\xb0\x97\x8b\"S\xa2\x9b\xd1\x16M\x0d\xf5\x95\xdd\x0b\xe9C\xe4[6\xa64]\xa0h1\xde\xba\xae\x82\xb3\xeb\xa2\x98\x8e\xa7\xd8_\xb2\x84I\x06\xeb\x89\xc4\x0b=\x05>7\x00\xc7~\x95\x94\xc3>\xf7\x0e#\x1b\x9d\xb1\xb6\xff\x11\xc7:L8\xa4\xbf\x0e\x06F+\xe1\xce\xf2X\x1bH\xcd\x18\xca\xb20\x1e\x00\x87P\xff\x81\x99\xf9)\x84\x00\xee/\xf0\x81E\xbc`\xf6F\x92\xbb.\xca\xae\xbcM\x8d\x9d\xec\xe9\xc9B\xa04`!V\x13\xc1\xd5\x83\xaf^]7\xd5\x0eae\xc9\xe1\x95\xeb\xd7\x03\xb4h<\xdb{\x99\xb7\x85\xdd\xe1k\xcb\xed%\xde\xd8\xf8\x12\xfcH\x8ef\xdd\xeb\xbc\x9b\x0d\xde~#aTK\xb9\x02Z\xe3F\xffo\xb9\xb3\xbc\n\x13\xbc\xff\xd2\xf2\xc6\x0d\xe3D\xc0*}4\xd3\xabt\xaa\x17\xe9c\xb5Fa%'z%\xaf\xd4\n~\x80\xc9V\xfd>\xc4dM\x0b\xefw\x16}}\x1bm\x95\xd8\x93\xeb\xfa\xb4\x07\xdd\x9a\xdc\xd0%\xac\xefK\xba\xf4\xd6QN6t\xe9\xe5L\xce\xbbw\xe5\x99\xeem4\x14\x97p\x13\x0b\x91;\xc2\x87`}S\xe5\xc2\xfa\x1c\xda\x10\xaa\x8d.\xeb\\:.\x00t\xec\x82\xc2\xd5\xd1\x91d\x0e\x9eo\x83\x8b\x90\x8e\xa7dOob\xc4\xc8\xc5\xa1\x8e$*\x03^\xb0\xe0\"\xf4\xf7\xf6Cg\xda\xed\x1as\x9f3\xe9\xa7D1\x18N\xd6Q\xee\x0bbh\xdf\xd0u\xb8\x8a\x01,8Rr\x02b\xe4v\x87w\xaa\xa4d\xd9+\x91\x0d\xe5\xaf\x92,\x12\xabi\x19G\x10\xb5\x1be\x94#\x891\x88A\x8a\xad\xf6Y\xc2\xeb4\x16\x9bm$\xc1T\x95\xb1\x98\xf1K\x96\x91\x11X\xbeF\x19\xfbG\xc1\xb3\x06\x83\x18e\xbbC\"\x86\xa1\x06'?bo\x05\xac\xe0\x91f\x053\xcb\n\x0c\x96=2h\xf6\xe0\xfe\xf0e\xfd\xd5\x82\xac/\x93\xa7\xcc\x93@\xb1\xc9\x0de\xdeE\"\xce\xa3\x84\\R\xa6\xe46\xd8-\xcb\xe8\xcd\"\xf5/\x17i\xb0\x0c\x15\xf1Z*\xd8\xf9H\xbf\xde\xeepM\x1f\xc1\xf1U_m\x08\x0bnKe\x90\x84dEY\x93-,\xd0\x9a*\n\x9f`\xec\xbak\xcd\x05\xfdLe\x1c\xc7\xe8f\x91\xf8\xcb \xba\\8\x9e\xe3;\xff\xee\xe0IB\xc0\x07.fK\xec\xba\x95_\xf9J;\xc3\xe8U\xbc\xad\x88\xe0\n\xc7\"\x95<-\xd8\xe2Lr\xea<\xb7v\x03\x87R>\x80\xdf\x95]a\x87p\xdb\x08\xca\xfd\x01\xbaJR\xcb\x9b\x9b \xfbk\xaa\x17\xc7\xd2\xf15\xb7W\x89\xef\x8a$q\xfc\xae\xd9\x07\xf5<\xecj>\xaa\x98b\x83\x8b\xee\x90=\x16\xaax\xaf\xc0x\x91\xf9\xf9B\xe9p\xbe\xf3\xde\x1aKQ\xaa\xb5\xba!|\x1cI\xc0=\xc6\x16\x0d0\xf8\xe973\x97\xc7Fp6\xf0}\xf0P\x8b\x18\x8f\xad\x88a\x158-b(\xbd.\x81i\x00;\x81\"\xd4[\xf5\xfb\x00\x93\xb5*\xfd\x00\x93%]{\xaf\xa5v\xc7\xa9\xd87\xb9\xa1k\xef\xa7\xbf\xfe\xf2\xcb\xdf>\x9f>\x7f\xf5\xfc\xe3\xeb\xcf\xaf\xcf^~|~\xf6\xfe\xe3)\xb9\xa4 r\xb8)\xe1`\xb2\x19\xb0\xaa+.\xb3\xcf|D\x94\x92\xb4&\x17\xe4\x1a\xdf*\xfdM\x92D\xef\xb5_\x91srJ>te5F)]\xbb\xee\x99]\xaag\xb0\xd8o\\\x17\xced\xbe\xb4\xc9/\x03\x16\xce\xcd\xe6\x8e\xd9\xd7\xd1b\xac\x0f\x8f\xb0T\xed\x0bKe\xc6\xd5[WEoq=}]-hs\xdf\x90O\xad\xc2\xf7TN\x9c\x91\x85\xa6C\xbe\xd2\xf1\x8c\xbc\xa4MI\xe3\x0d}\x19\\\x86e\xf92p\xfe\xf3?+(\x86e\xb9v\xdd\x97\xc1:$gT\x8d\xedMY~@kL~U\xab%\x8bn\xb4\xef\xeaK\xcf\xf4\xbc,\xdf@\x9c<\xd7EWT\xa0_5=\x03\x91\x02c\xb2\x1cS\xcb \xaa\x86]\xf7\nvK\\\x17\xad\xcaR\xa0+L)]\x96%\xca\x179\xba\"K\xec\x0f\xe8\"W\xc1e\xe8\xba\x11\xba\"\x97d\x831)\xd0\x15yO\xc6S\x107W\xae\x8b\xb6\xc1\xfb\x90n0\xc6\xc4\x02\x18\xe6\xea\x8d\xeb\xda\xf71\xa5o\xe0`\x97\xeb\xa2\xaft<%g\x03\xe8\xf2\xc6l\xc0hs\xa6\xaay|\xad@t\x19RJ\xcf\xca2B/\xc9%9\xc3d\x1b\xc8\x90\x9e\x915\xe6+tNou\x1b\xfe\x07d[\xc3DM\xb9\x7f\xb18S\x89Z\x8b!\x06f*\xc5N<\xde\x91k\xb02\x9c*\x1c:\xc7\xe8\xa6,\xbf\x96\xe5X\xbf\xbfTK7F/\xc9)9\x0fN\xed\xbd\xe4)\xba\xd5\x06\x0e_\x12\x00\xab\x92\x0e\xb5E\xc1W\xc5w\xe4\xbcR\x12\xce\x0f\xaa\xbeM\x92v@)3\x94\xf4G\xbd\xd2\x1fO\xb1u`\xd1\xd6\xfb\x87w\x99f\nP\xcb\xccu\xc0\x81\x0e<\x9b\xa9\xf1\x15x\x9c\xa2\x9cd \xf4\x16\xf0\x1b\x9bK\x07\xf4\xa9\xee\xea\x96\x83g\xd1\x1cC\x16*\x83h2\x81\x8b\x07\xff[\xa0\x98d\xb8,\xab2\xd5\xb0\xe3\x03\xc3>\x01\xb3\x07\xf0\xc3\x0dO\x0f\xabxJ\xa7\xe3H\xa5\x90'\xd3\xe9\xe3\xd9\x93''\x0f\x1f<~0}\xf2d\x86\xfd\xe9AvG8=\xfe\xf7\xf2\xd3\xa7\x1a\xf3?}\xf2\x8e[\x96\xc0\x9aC\x17\x81R\xa1\xaa\x0b\x7f3\x08\x95\x9f\x8di\xe4\xba\x03\xb2\xc8H.\x94\x08\xed\x8f\xc7\x12\xef dJ*\xb2M\x94tcv\x9b\xda*\x0bp\xf3V=\xcf\xc1m\xf7\xa4\x1d)\xa8\xf0 \x00\xc2\xed\x8eDTx\xef\x9e\x9f\xbd\xfe\xed%u\xde9$\xa6\xc2\xfb\xf0\xfe\xcd\xdf^\xbd~\xf3\x86:\x1f\x9c\xc3Be\x9faTF\xe4\x07\x0f5{x\xd4R@g\x869\x9c(\xee\x10\xb7\x88\xfa\x96\x8eg\xf3 \x84\x13\xe7\n\x18\x8at8F\x17\xd4\xecPn!~t\xca\xe6\xaa\xf5\xae\xdb\n\xba\xa4\x11\xda\x92kr\xa1M z\xcb\xe8\xf2;\xba\x80a\xaa\xf6\x99\xc7b\xa4\x96\xc9A\xfc\xdc+\xac\x11\xedU\x02\xb2N\x8d\xf3\xb5y\xc5:\x19\x1bO\xb5\xe9~\x95\xc5\xde|\x80w\xda\x93k\xd6\xcb\x9a\xf5\xf2\x92\xcc\xe6>\xe9\xe7&\xe9@~\x92\xda\x12\xf7\x87J\x10>X\x86\xf0CJT\x15\x98\x8aT\x9a\xff\xc1\x1d4\xb3\xecf\x0fk\x1bC\xbee1\x08\xf6w\xc8\xc4\x8a80\xdcd\x9d=\xdbA^\x96ZXA\x19MQ\x8e\x03\x11\xe2\x85\xf49\xca\xf6\xcep%g\x99\x85o\x98\xe6\xcc\xc8Y\x0f\x8d\x16\xae\x98\xe8\xca0Q\xa5\x86?\xbc\xaf\xd4\xf0\xdcKD\x0c\xf7\xbb\x93%\xcd\xbd\x9c\xc9\xd7\x9b\x0d[\xf2H*5<\xf7\xe2\x84EY\x9dtI\xc1\x86\x1c\xb3<'\x1b\x9a{ou`\x8c\x17\xeb(MYB.h\xee\xfd\xcc\xf3\xadb\x85\xe4\x9aN\xc9\x95\x92+\xcf\xbbJ\xf5\x95\xd7\xb6\xdeW\xb7\x8eKz\xa5\x14i\xc3!\xd43\x91\xe0[w:\x84\xfd\x8d\xb9<\xd76\xe2\xb6\xfa~\x8e\x18\xc8\xb6X\xe9\xc6\xcd\x0fp\xf6\\\x9a\xbe#6q\x1c\xb2\xd6\x0c!\x16\xc9\xc49>v&ko-r\x85\xcdK\xd7\xbd)K\xd4>xRG\xe9\nB\x92\xd1\xd9\xbc\xeb\x8c\xf2,\x9bcs1Z\xf5)\xc8\x94\x0ecg\xfc*\x98L\xae\xc3\xa6\xd41$\xf4\xb3\x05\xf3_\xd5\x0dc\x83\xab\xe6\x820\xa5 \xa4\xe8\x1a\x93\xeb\x1di\x079j@p\x07[!j\xc6\x1cJ#t\x89\x17i{\x7f\x00\xc8\xd9\x19\x8f\xbf\xa2S\xd8H\xf3/\\\xf7\xc2K\xc5U'#\xa4\xd9<\x1b\xd7\x1do\x17HP\xa4/E\xda`O\xe1\xfd \xe1\xf0;\xf3Dj\x83\xa6| )\x8d\x91h\xc2\x9c\x082\xc3\xd8\x1f\xe7^\xb4\\\xbe\xbcd\xa9|\xc3s\xc9R\x96\x95\xe5\x80%\xa0Q\xb2,s\x8foT\x13\xa7 \xbb\xe4J\x82\x7f\x8fU1\x9e0\xdf\xa1\x94\xd6S\xb9H\xa9#\xd2\x8cE\xcb\x1bp\xf2\x88\xd7Qz\x01\x0el+\xe4h\xd9\xc7\xc1-\x11-i\xc9L\x8d\\\xd8\xebW\xd4\x9c\xbc\xc4\xcb\xd8F\\2#lA\xe4\x1a\x8d\x94-q\x90\xf1\x0c\xb7U\x91\x9cI\x7fI`u\xfa7\x87t\xd2\x07M\xa2t\x8c\xf8v-RV\xf2\xadX\x96|\x1b-\xb1wO\xa1\x14\xbbb\xe7_\xb9<\xe6:Z\xf4\xa1\xed\xf9\x9e\xb4\x93F\x97\xfcB\x9b\x9c\x94\x12\x98=\xbf\x00A\xa7,\x1d\xe7N*\xfa\xd8\xf8\x04\xce\x0e\x1a\xfd\x81?q\xb8^^6\xa9'\xa5\x94U\x81\xd0\xcc\x89\x19\xe1\xadP\xb5_\x8a\xa6$\xb3;PX\x89\xc0\x99\xdd\x01\xfb\xc6\xdd\xda\xda\x16{\xcb\x94|\xe2\x8fgfO\x0e|~;\x1e\xb66\x8f\xdd\xb7c\x83\xee0\x19z\xf8#&\x19zt_\xfd\xfdq\n\x7f\x1f\xa8\xbfO\x1e\xc2\xdfG\xb8\xb2\xb8>\xf8^\xa1\xb02\x81O5d\x1f\x9d\xe0yZ\x96\x1cu\xf5\xc8\xe6\xc6\xa7 \xb7\xda3\xd2\x1fO\xbb\xdbR\x95l\xbd\xcf\xd0\x8a\xf0\x1c\xa0D\xb3\xb2T\x94\xa0\"WN#\x97\x83\x9b\xfe\xc8=\xcf\xde+\xd08\\\x17eT?\xe2\x86\x83Tv@\x93nm\x16\xa5\xae;\xd6\x1b\x05\xe0\"\xe3\xbaN\x0eou;\xe6\xab55\xdc\xbd\x01w_\xbb\x88X\x97\xb6\xba\xad\x01Z-\\\xf78\x8d`k&\x16Kf\x02\xafs$\x86\xb6,\x86\xed\xebf\xf2\xee\xff\xd8\xdexh\xf8\x1d\xf6\xf7\xd4*\x07\x1bg\xc25\xe1\x998\xa1\xf3\xad&\xfdG\x0f\xb0 \xa8\xa3\xd1\xc6:\xe9>\xc1\xfaVe&IA\xb9W\xf9\x98Y\xc7\xdb\xda\xce\x8c\xe7\xc2\xf8\x1b\x12\xa7\xefW\xaah\x9e\xb6d\xeb\xd0F\xbd\xe2Do\x87\xf8\x95\xc1\x8a\x80\x9d\xd1W\x88\x88[v\x19\xa3VS\xe3y\n\xa1\x88ua\xc2\xa9\xd4\xe6I\xcb]\xf93j\xcfO/\xb4\xa1\xd6\xb8\x95\x12%\xa7+4\xf7\x11\xa3Jh\xe4\x98\x98\xb2\x93:\xba\x96)\xc2L\xee\xd9\xee\xf0\xbe\xd3I\xedT5\xec\xf5W%U\xc5\x04\xc9Iauq\xd8\xaf!\x11l\x89\x93\x98V\xc1,M\xe9\xe8\xe9\xb4,\xa3g4^\xc0f\x9c\x1e\x88\x8f\x04-\x9a\xc19\"\x8c\x9f>|x\xf2\xe4QY\x8ag\x0f\x1f\xdd\x9f=)\xcbh2\xa3`VDy'\xf3d\xa6\xb2?\xba\x7f2-\xcb\xfc\xd9\xc3\xc7\xf7\x1f\xdc_\xb0Ea\x83+E\xd8\x17\xbez\xd7\xfe\xab\x11\x89&'\xd8\xcf\x8f\xa0\xc4\x04\x89#h\xe9\xe9\xd3\xd9\x14O\x1e=|x\xff\xd1\xae\xb9\xe1r\x1bC+\xbeP\xea\x0b\xd1U\xaa\x97\xe97\xba1\xdc\xee\xbc!\xef\x8d:\xb6\xe9>\x7f\x15\"(w\xdd\xb19Rq;\xf3Ov:\x16\xed\x8a\x8a\x16\x9f\xd7\xc2\x1b\xb7{,6\xd6\xddX*\x0eS;b\xed\xfc\x03&\xf2\x87\xcd\xcdF\xc7\xd1\x8e\xe9-\xd68\xb0\x9fi\x0dG\x7f8xp\x8ch\xaaPm\xd1\xc7!\xbb\xb6(\x182\x16\xc2\xba\xce8\x0e\xf6\xab=\xc1\x9dy\xbc\xd3\xf6\xf8\xc8\x18\x0dN~\xd4F\x83'\xfb\xf9om\xc6Qh\nW\xc2\xae\xc0T\xbc\"1\x9d\xce\xe3\xa7v\xa1\xcdc\x1b 4\xa1Y\x10\x87sUA\x02&VF\x12\x12!\xa9T\xdfC\xaa\xd5lfzgN\xa1<6&\x8d\x93\x8e\xc4\xf1\x91\xad\x12\xc5?\x88#\xae\xd2\xbf\xc0>K\xd3 TM\xaf\xb7B\xb9\x12W \x88\x05\x95\xa1}!\xab\xe8\xa2\xea\xab\x7f\xc8U\xf0\x81\xe9\xd2\xc9\x13l\x0b9z\xb8\xda\xc5H3SG\xe3\xd8 v\xbe\x8b6,ow\xcfj\xef\x88\x81j\xba\x1f\x1e\xc6C\xe3\x81\xb5\x8f\xce\x14<\xee\xa0/\xc48]\x17@P\xa4\"(\x1cE\xd6NB\x12*PNb\xb0\xa70\xd7\xcd\xc6\xd4\xc4[\x9e\xc7\xcf\x120`\xa0\x82FA\xa2t\x951-l8\xc8\xa9>\xf4TeL\x8c\xa9\x85\x95%\xf8\xcaF\xd8u\xa3 )\xa5\xd5\xc5\xcc\xea[YN\xed\xe2b\xae{4k\xd3 \x9e\xc6I\xb1d\xb9\x9f#\xb8\xbe]\xef0\xa9\xb7\x9e\xbb\xfc\xbe\xdd\x9c\xe8\x9a\x88\xc3\x1b;\xf5\x8eKZK\x86\xa3\xec\xe9t\xc1Q6\x91d\x8a\x87M|\xf8v\xef\x9c\x1a\xa7\x85o\"f\xb0\xd1=\xb0\xc9\x0d\x13\xfb\xa8\xed\xabw\xdf\xa8\xf0\xb3\x07\x8a\x1d\xec\x11\xb8\x0e\xd8r.!\xf0qk\x1b\xb8\x11\xe4\xb0a\nM\xc9\xad\xd2\xfa|}pk\x87I\x8e\x18\x89\xc9x\x06\x9b\xabE\x10\x874:x\xa6\xe7N\xffaC\x93\xd2\x83N\xc4\x87Of\xd9\xc7\x11C\xf8v\xd7\x1fGK\x15\x00+\xee\xe0~\x88\xd9\x99\x1e\xd3\xe6V\xf8\xb7\x1c\xd9z\xd2:\xb1\xf5\xb8-k.\x86\x9c\xa08\xcb;\xae\x92B\xa1\\EBIJsMDm\xf8d\xb8W\xbbx\x16\xcd\xb1>K\x97\xd1\x14\xf6:\x89\x0c\xb2\xf0\x9b\xdc>\x1b\x14j\xde\xb3\x96\x7fe7\xff$\xed\xb1\n\xdaP\xady\x0b\xbee\x89\x9c\xcf\x9f\x01\xb2\x9f?;<\xbd\xdd-\x1a\x93h\xa5\xb6\xf1\x0c.\xe6\x00]\x01\xb1\xbb\x18\xf9\x80\xbaR7\x81U\x07\xb0f\x80\x19\x81\xdbHh\xd64\xa6\x82\xd3BcC\xa6K%3\"\x1a\x80\xc8\x94n)0\x91\x0bf\xeb\x14\xd8\xcf\xbc\xaaA*H\xb6\xdb!l$\xaf\xef\xf7]\xab=\xd7\\\xd7nN\xec\xf5\xfe\xcd\x99\x12\xe5\x9b'x\xa2|\x14\x8d\x9a\xbc\xe6\x1b\xb0\xc2(0?\xce4\x0e\xffh\x90\xf8\x91\xa1/\x8a\xbc\x14\xad=\xd7X\xbd\xb7\x9d\xa5\x12*\xb4\xc9\xba\x8e\xa3\x05\x97\xafs\xdd\xcc\x96\xa6\xfa\xfa\xf6\xad\xeb6\xf6S\x14cY\xc3\x88\xd7A\x14\x8e)M\xc038Gk\x12\x91\xa4\xa1\x05\xaa\xcf4\xd9A\xc68,K\x95#&+Lx\xb0\xaa\xc3\x8f/U\x8b\x02C\xae\xa5\xaaN\x04\xcb\xb0\xaaqI\xe0\xb5Y\xe92\x84,=\xd5\xbb\xe5\x11\xfe\xe2\xf4\xf4c\x91\xb07<\x97\xfe\x94\xbc8==\x957 \xfb\x99\xc5I\x94\x815T\xa7\xfe\xa6Fo3%\x9c\xa5\xf2#\x8b\xa5I\xf8\xf9\xfd\xdb\xf6\x9b\x86]\xfd\x0e\x97@\xc0\xeb\x8c\xfc\x1c\xc9\xe8,\x8b\xd2|\xc5\xb2\xd7\x92mL\xaeW\xbc\xea\xc4\x9f\xce\xde\xbey\x9e$/D\xa2d\x1b\xdd\x05\x95\xd6Kx%\xb2\x8d\xd9N2)\xa7L\xe5\xa8\xd3\xde\xb2%\x8fL\xb5o\xf9\x86)$\x835\xe1O\x89\x12G\xe0\xc2\xeb\xb7\xd1V\xbd\x8a%3]\xfc\x10q5\xbe\x7f\x14,\xb7\x83\xfa\x90\x14\x17<\xad\x1el\x1d\xa7\xbf\xfd\xa2\xef\xc30\xd9N\x7f\xfb\xe5]\xb19gY\xfd\xfe!\x92\xebSv\xd1H\x10<\x95\xf5k\x0bV\xa7\xbf\xfd\xa2a#2\x0b\x18}h\xe0\xa7b\xb5\xaakUSt\xbaf\xccVs\xc6\xae\xe5Y\x16\xc5__T\x93T%\xd9wQ\xc4\xa6\x97\xdf\xa6z\xd4B\xd7\x8f\xd6\x89\xd0l\xcf\xcf\xcc\xda\xb9\x0f\xfbj`*'1\xcd\x9b\xaa1\xc0\xa7\xa9\x19\xd7\x18W\xe8\xe0\xd8\xc48Tu/\xd2\x8dZ:r\xa7\x1eb<\x7f\xd2\x86vL\xbe\xf2t \x8e\xe1\x03J25\x875\xe1V$s.*\xa3\xccSe\xe0RI\xad\xefN\xacd&\xcb2}V]\xec\xb3@\xb6\x90\xf1\x91&\xc3\x1a4\xf6\xb5\x8f\x13\xa5\x99\xd5\xb1\xd3Ja\xf6k\x97\xac\xea\xab\x0c\xd2\xb0\xce`\x12\x83\x94\xa8\xf4\xfa\xc3\xaev\xe7\xc2Dx\x95\x9f\"U\xcf\n\x84\xbc\xf2\xad\xe2\x0d\xd7+\xde\xf2\xaf\xda+Q\xe3\x96\xdc\x05V\x8e\x149E\x9a\xc7b\xab\xf4/UU\xd1\xbd\xe4\xc4\xdc\"Q\xc0\x15\x15\xc2[\xa1\x82\xe4\xfb|\xf5\xb9\xbes\xa1u\x14\xa6\xc9 T%\x01\xd3\xf7\x13\x7f\x03B\xea\xcd\x1dM\xb4\x1f\x9b\x8d\x9d\x13\xbd\xb1c\xbd+\x8d{\xe5\x83\x1f\x8d{\xe5T\xbbW\xfe\xf8\x10\x93\xa5\x91)o\xd4\xfb#L.\xb5\xc9uc\xf6\xaf.T\xf2cL\xae\x8d\x1a{eL^\xe7\xaa\xba'\x98\x9c*\x10\xcd0\xf9\xa0\x04\xb5\x19&\xef\xd5\xef \xb0_\xf2U};\xc1\xe4\xa5J{\x88\xc9\x1b\xf5~\x1f\x933m\xce%\xbf\xaa\xf4G\x98|1K\xe7\xb5>\xd0G>\xeaY\xf8\xac\xb2?\xc0\xe4\x15\xfd\xd8\xd8?#/\xa8cL\x9c\x0eyG\xbf\xc0i\xd1\xe7\xf4\x0b\xb4\xf8\xb3~7\x8b\xed\x05&o\xe9\x8a\xfcDc\xaf\xe2\xa1\xe47\x1a\xd7\xc7\xb9\xfe\xa0q\xb5W\xf5;M\x90\xb3b2^;\x98\xfc@\xcf\xbc\x15\xf9\x07\xfd\x81\xfcB\x1b{#\xd7\xe8\x0fL\xfeJ\xc7c\xf4\x9b\xeb\xfefOt]\xb2T\xban\x0c\xce\x15\x8a\xc9@\x02&\x7f\xa2\xaf\xd1\x8b\xd6\xca\x83\x9b:\xae\xd0[%h\x1a\xee\xfd\x16\xeb\x80\xa9\x8f\x1eQJ?W\xaa\x14\xb8\x90\xfe\xd2\xf4\xcf\xadv:\xcc\xe0?\xc2\x11 .R\xddZ\xa5\x83\xf1\x15\x8a\\w\xfc\xb6!\x03\xafx\x1a%\xc9M\xab\xf2\xcf\xcf\xe8\xc3\xd9\xa05\xf2-\xae\xe3\xfbkR\xf1\xd6\xda\xc7\xd5\xac\xb4#\xaf\xb0\x964\xde!4J\x80\xb6V\xf6\xb6$~\xbb\xc3\xc1\xab\x90J2V\x84d\xcd\xd2N5\xb8!\xa9I\xbc\xc3\x98\xfc\x99\xfe\xa9,\xc7\xa7\xed0ko=s\x84Z\xf3\xf6n\xdb\x18\x93\xbf\xb5\xf7\xb1\x94\xceo)\x1a\x1a_\"\x86\x876\x93\x10\xd0\xc45K1v]\xb9#\x7f\x19\xda\x10\x1fK/\x15\x92\xaf8[*-\xd0>\xd3\xf1\xd4\xb0 \xe9e,\x82R\xf9\xfck[i\xa9n\x86\x94f\xbf_\xd0\x19\x05Se$\x19\xc9\xe9tne\xffg\xf9\xbcR\xd5IL\x12\x9a\x06\xb9\x12\xfdWT,\x12O|\xf5\x13o\x15\xf1\x84lib'\x89\xac\xe1Ya\x07Y\xd2\xc4\xb8&\x81P\xbdZ Q\x96\xe8\x84R\xe8\x9dA \xd7\x95\x0cX\x0ci$\xd2\x19&\xe3)\xa5t\xb5((\xf7\xd1\xd2u\x97\x1eK!\xfc+)\xe8\nqL\x96\xae\x8b\x96\x1e\xbb\xe6\x12)r3\x9eb\xf5\x89\xd2\xc4\xee\xa0,\xd6\xe8'dW\xebQ\xbc\x8ex:\x8ao\xe2\x849\x18\xfb(\xa2\x7fC\x05\xc6\x8bH\x8b\xd4\x05\xd9\x925\xf6\xb7*\xcd_#\xde\x90\xd8\x96\xae;\x8e\xa1\x03\xba\xad5\xec\x9a5\x00\x0cw\x054\xe6`F2\xd7\x1d\xb7\xc6\xf8?`\x88;\xd04\xffkP+N \x9f\xffu\x81PJ[+\x1b9\xf0\xe3`\\\x1d\x8d\x92$Um\xe7\"\xa5\x19I=\x9er\xa9\xb32\xab\x1ew\x88\x01J1\xf6Szk*\xf0%\xd1\xc5\xfdlG\x10\xa7q\xe0\x88\xd4\x99\xb0\x10/8J\xb1\xef\x14\xe9:J\x97 [V\x03p(\xdc1\xf5\x069\x7f\xb5\xdfF\xa6\xb6Q\x9dI)\xea\xe4\x7ft\x0c\x1b\xef5|\xe3\x9e\x10\xa0tM\x83\x81`\xeaa\xb0}\x862\xfak\x0b]\x7fY\xfc\xa1\xa3\x0f\xd7\xdd\xfaX\xb7\x98\x12\x86\xfd\xffBC]&\x8c\xa4\xb0\n\x9bx\xf5KYBC\x8b\x13\x7fF2\x0f\xb6\xc3\xac\x8f\x8f \x15\x02\x8a7\x1b\xf4Y\x9d\x81\x8a\xde\x98\xd6\xb1u\x89\xdb\x11\xc9\xbee\xe0\xf5h\xaaZ\xfe\xa4;\xee\x98\x91T\xe9\xeb*\x9d\x180i\x1b\x7f\xc6:\xf8\xd3pD\xa9>pE\x1c\xd57\xae\x80\xb0#\xe9P! >Ae\x89\xf4\x03\x84\x16p]$i\x8am\x93\xd4\x84\xf7\x94\x8c\x9e\x90\xbf@Q\xb5\xd0v\x84\x0fU\xa8 \x93\xaa\xcbV\xde\xac\x13\x88\x809\xb1`O\xec\xd5\x0bt\x14k\xed\xf2\\a\x14\x90\x92\xe5\x88\xcb\x9c%+\x07\x9b\xa8U\x7fC\x19\x9e\xf3E\x9b\x9cirwk\x853\xdd\x88U\x933\x868S\x88\xa0\xe8K\xc6Pj_\x9a\xa7\xb2\x15\xf9I\x89\xb6\xaf)\xca\xd0\x1f\xfa\xcc\x0e}\xd6+X5l*\xd8\xcd\xff\xe4\xba\xe8m\xdb/A\xcb\xceo\xc9\x0bL6\xe0\xe5\xdap\xe87\xbe\x95\xef\xcc\x9b\xea>C\xba\xdfR\xdfDg:n\xde\x1a\x84)e\xe6\xb2:\xed]\x85\xda\xde\x10\xcf\x9b\x12\xfb\x0b+\xbd\x12K\xa6\xd4\xb3\xc6]\xf5T\xd12?\x08I\x85\x82\xea\x0b@\xc0\xb7\xc2\xa3 }\x82\x9b\xf1\x08\xe8\x1a5\xf8=\xb9U\xbc\xabcd\xd2\xd6\xcd\x9f\x8d\xd0\x9f\xd2\x1f\xd0\x07\x03\x93\xda;>\xf5\xc4W:\x14<\xa4,\x19I\x81\xd1\x0cmjJ\xd7U\x04Q\xf3\x19\xaa\xd6\x97~\xb4\xca@fV\xa8\xc2\xc4\xac\xa6\xd9\xda\xf5%\xc5d:\xa6\x99\x9ef\xd7\xfd\x8b\xeeT\xa6&\x9a\xa4\xd5N<\x01\x88\x0fy-\x83_\"H\x10\xa655\x11\xad\xf3\xadV\xe1I\xd9\xd5(%j\x9e\x19n\x9fte\xedc\xa8\x16e;\x87Q-\xf2J\xbc#g\xde\x8a\xfe0D\x9f\xd4\xcaz[\x96\xeaG,\xec\xc9T\xff\x1f\x8a_\x91h\xd0qe\x05;o\xab\x86\xb8\xa6FC\xb6h\xd5\xda\x88_\xb3\xb4\xa7\x11\xea9U}l:\x04\xbeE\x9dl\xb9]\x8b\x86\x01jp\xe9\x97\xd6\xae>\x19\x98\xdc\xdf]\xb7@\xb7\xfa\x04\xab\xd2`\x9a\x11\x08\xaa\xd3%\xe3\xe9\x8e\xdc\x82\xe8<4E/\xd1[\xf2\xbb\xf1J\x8a\x1b\x1et\xb0\xd81iU\x7f\x95E\xdbF\xc5\x7f\xda\x91[C\x9d\xfc\xb7;L\x96\xe8-yay\xec\x8d\x12\xf0\x05M\xd4OQ\x9d}y\x01\xeb\xa5S\x87\x9e\xc2\xfe\xd9<\xfaC'\xa6\xbb\x99l\x0d\xb1\n\xa3\x88\xac}B\x0e\xb6\x15\x95\xa5n\x0e0i\x18\x18\x91\xbe\x18\x050\xe4\xad/\xed \xae\x83\xf5\xfeyGn\xa3$\x19\x18\x80^.j\x1cjUW\x9e,J\x85\xb5B\xa0\xe8\xf0s\x8d6\x1b$+\xb7\x17\"\x94\x00\x95\xd3))\xe8l~\x8eX{w\xfe\x12\"d\xe5\x93\x89\x12\xf2fs\xa1W\xae\xb1t\x92b2!\x99u\xa5d\xb8+\xce3|\x1b\x97%\xc4\xa6\"\"\x88B\xca\xc8\xd1QQ\x96)8=`\xc2AB\xa8\x92v59\x12Z8\xd0\xc164\xfbm8\xe7\x90,\xea\x84\xbf\xd9\x07\x10\x00\x02\x1f\x00\x02o\x01\xa1?n\xde\x1dU\x0d^\x90k\x1a}\xe5\xb6\xaf)\xe2\xfd\xbe\x1e:\xc7=\x9b\x1e\xf2\xbc\xadT\x05\x1dl\x06L\xf2D\x06<$\xd9A\x1b\xef\xb0\xd9j\xd6\xda\xb4\x98i\xa3\xd5\x8f\xe6H\xc9a\x0fU\x0b\xdeT\xbb\xc8so5\xcf]W*);(B\xd7\xcd\x90$E\xdf\xe01|\xc4\x1b\xf6\xa8z\x01\x0b\xf6E?!\xcd;.\x1bj\xe1p(\xa2,\xd3\x8e.([d\x13g\xe4\xf8\x8e\x83'\x0eO/\x8d\x0f\xeb\xb7\xd9\xc6\x0d\xa4f\x0fL\xbc\x91\x86\x15<\xef\x99~\x0enr\xb5n\x88\xe5\xda>\xa5d\xf9\xb2\xcc\x03\x11\x82{\xda\xa1s@?6;\xa2]\x89\xf9\x90\xf1\xb0\x85\xb76\x98h\xe5\xf9\xc6\x02\x11\x96%\xeb\x1e\xe9\xe4\x81\xca\xdf\x0ds\xd6\xde\xe2\xd9\x8b\x9c\x84\xb7\xce!\xf3\x85D)\xca\xc0\x93>\x03Oz\x89\xaa\x18\x83\x86Y \x90\xddUvs\x9a\xbd\x02\x8eP+GT\xa7\xde\xc9\xc1`5m \x10\xae\x88\x92\xea\x89nbJr\xaaw.{\x88gD\xc5\xb1\x98LvJ\x8cWi\xcd\\\x1cLn\xf3\xdc\x1d\xf0X\x1c\xab\xc5\xc3\xdb\xb6\x96\xac=\x94\xdb\xdd\\\x0c\xf6\xe5\xe0\xf82\x18\xc5nG\x98\xa2\xa7\xbd-\xae\xec\xb0\x9381\x96\x060\x18NM\xd86\x08\xc7\xb56&\xc0e\xc3\xc4wc\xbc\xc4/\xe9\xca{[HXa\xef\xcfs\x96]\xb2\xac,W\xde\xef\xec\xfc/\\v\xbf\x90\x8d\x16x\xc0\xeevAW\xd6g\x91\\7\x8dmk\xb4\xc1\xe4\x8an\xd1\x8a8\xff(X\xc1\xde\xf28\x132\xca\xbf:\x98\x9c\xd3+\xd7\xbd2\xca\xebyY\xa2\xc1\xbb\xcc\x14\xf9\xbcv]\xc4\xe8\xc6\x08\xa5\x18\xae\xfb\x013\xc2\x9c\xcf\xf1-\xb8\x80\xa4\x84S\xae\x8fl(\xe0\xcb\xa6#\xa2\x9eV\xbe\xc8\x11\xf6\x85\xb5v\xb3\xdd\xae~\x86\x1a\xb5edG\xae\x17y\xb3#\x9b\xdas:\xc5;\xff\xd2u\xc77\x0bT(f\x18\xd5\xa7\xc7\xcc\x85\xe0\xecZ\xbe\x13K\x86\x1csY\xc7%J\xb1'4\xccPDnc{\x03\xcf\xcf\x91\x8c\xb4\xc4\xd6j,\xd2\xc74\x0b:.vX\xbbh\x1b~\xb5@1\xad^*\xce\x9d\xd0X\x0b\x9b\xadZ\x12\xab5+\x1e\xe7\xb7>-\xf5\xa7\x15|j\x18\xaf\xcf\x87\\knW\xa9\xcf\x08 \xaa\x0d\xd7(\\\x17 }\xd9\x9f\xc4\x84\x97%\xe2T\x92\x1caE\xdc\x0eG\xe3\xba\xcbm\x03\xcc\x8b\"a\xf3\xccu3\xcb\x8c\xd1\x8cR\xda\xf5\xbb_\x98\xcfJ0\xaf\x1eA\xad;\xb0.\xf4Z\xc8\xb5\xb74\x9c\x88\xb5\xe8\x1b\xd1\xc2u\x0b\xcf\x86\x85!1\x8d\\7\xf2.\x7f\x9c\xc7\x0bNQJc\x1b\x8e\xd4s\xb0\xa2\x8e\x934\x98\x85~\xee\xbah\x8cR\x9a\x9b+\x9a\x8e_./\xd8\xa7O\xc7\xe8\xd3\xa7\xe5\x04\x1fc\\\x96*\xdf3\xfa\xf8\x01\x863\xa9U\xc6\x17\xebLlZY\x15c\xa1*wsN\xb8\xebN\xf8\xb7\n\x06\x8f\xdb\x07V\xee\x1b\xd1\xe0\xa1\xd9\xcfz\xf0\x04\xcf\xeb\xd3\xe5\xb5\xf9\xddH\xa9Z8=eR&l\xb9_$\x13\xde\xaa+\xa5F\xb5\x80\x16\xd3|@J\xe5\x83RjDg\xf3bHJ\xe5 \xa5\x16\x03Rjt\xa7\x94Z\x94\xa5^\x98\"\xe0!\xbdUc+r\xdfY\x15\xc9\x8a'`\x06\xb2\x1e\xdb\xe4\xe8(\xaa\x05\xd8o\xa9D\x8fQ\xd5a\xec~\x9dJ\x8c\x0c\x1c\xf5d\xe0\xd8\xa2r\x84\xe2o\x93+\x0fO\xb0\xf1\x12{`|\xfa\xcc\xa9\xeb\xd9Lo\x1b=\x9c\x99\xf3@\x0f\xcd\xbe\xd1tx\xde\xab\xe8\x02\x19\xd3j\x9b\xd5\x03\xc7\xc2u\xdb\xd3(\xfa\xfb\x10\xc6\xf3\xb2m\xa4\xc0\xb7\xbb]o\xf3\x00c\xa5W\xeaR\x03xevD\x8b\xca\x82\xe5\x80\x1f\xdf\xd0\x19\x99y\xcf\\\x90\xd5\x1e(\xf5\xb1\xb3X!\x07\xc2=\xf4\xa82d\xaaO>#\xdfY\xda\x987uam\xa0\x184\x06\x88\xb2\x1c\x00XY&H4\xad\x01&\xddi\x0d}`\xc3\xe7\x0e\xec\xc8\xbcL\x1fxX\"I\x9ch\xb9\x1c\x8a\xf6;\xda*\xdc4y\x96pjx \xd3\xba\x91I\x8a?\x9f\x0efZ62%\"\x1an\xee\xa6\xd9\x1c\xcf\xb7\"\x1fn\xf1\xb2\x91/gQ\x16\xaf\x07\xb3m\xd4b\xb2\xc9\xa3\xbe\xbd6eW(\x838\xa7\x06\x90\x187f\x8e\x13\xd1\xf01\xcb\x919\xee\x11\xa1T\xdf\x9a\xc8\x9a\xc2\x9e\x80]\x89*w\xd1\xcc\x0d\x08p0{ToP10\xdc.82\x91\xa5\xb0\x0f;Rz\xabH6\x95\xa0l!}\x1d\xe1\xa5E\x85\x18\x02C\x8fA\xc4\x9c\x14x\x17!\x94\xd2\xd4Xa\x18\x91e\x19\x84\x18\xdb\xfb]\x15bV=\xe1\x0d\xc6J\xec\xd1\xc1\xdb$:g\x89?%9K[\x92'_\xa1\x99\xcb\x83ih\xd41\x1e\xcc\xaac\xda\xeayGdv\x03FM\xb1U?\xd5\xe5\xdc\xc2H\xe9\x85\xe2\xacP\xd6/\x94\xdee\xc4\xf2\x02\x9d\xe0\xdd\x90EJ;V*I\"\xe8\x9c\xd5\xd8+\xb4c\"\xe6\x8dy\x11}k}\xd1O\x1206k&WPnh\x9a\xbf\xb0T\xb79\xe2\xf9(J\xe0\xd8\xd7\x88]\xb3\xb8\x90<\xbd\xf0\x1c\x13\xa6$\x9fccr\xcf\xe8\x0c\xcc\xf0\x9c\x9e\xb8\"\x98\x86\x8b\xd4hB\xbey\x83f\xca\x12)Vn>a\xd75&\x88\x14\x93)\xf65\xd2a\xd7\x1d#%\xaf\xea/D(\xc6\xaf\x0f\x17\xd7\xc1\xc2\xec\x15`tJ\xb8\x02\x15\x0dt\xb3\xc4X'BL\xd4kuh\xd7\x1c\xc8\xe5T4\xaeY\x1b=\xb0'hs\x0f\xa6\x7f2\xb1~\x1e\xaa\xd1\xca\x1dCg~\xe8\xd7\xb9R\n\x19\x04\x0d\xa6\xe1\xbc\x8aT\x0b\xd9\x1e\xfb\x82\xe6\x9e\xd8\xe6\xdeVl\x11&\xb9\xa7\xf0C\xbf\xd4Y\xed\xed\x0c\xa0\xf7s\xaa3\x11\x18\xb6\xd9\x18\x9d\xba.\x0f\xec\xdb\xd1,\xc4e\xf9\x08\\\xbf\xa6\xa1\xeb\x9e\x98'\x8cos:\xad\xaa\xdd\xf1\x15\xbaOm&4\xe6e\xa9\xfa\xf9\x8c\xc3\xbbz|\xca\x83\xfbPJ\x0f\x05\x86\xa1!\xa2\xca>\xaa\xca\x9a\xefO\x15\x86\xd7\xb9\xd5\x1b\xa9`\xa8J\xf0f\xd6\x93V\xd6\x93\x90\x188(9E`[(8\x81\xfa\xef\x80\xd0NPi\xfd\xfb\xf3&U\xa1\xc1#\xc2B\x92\xd2\xe9\xce\xb0\x81\xdb\x8cr\n\x8e\x01\x0f\x01\x07\x0cF\x8bz\xa1V\x93:\x0d\x17*\xb9\xeb\xc6\xb3C\x81 E\x88w\xbb]+\xc4\xc2\xbc\xfd\xa6\x95\xd6\x0c=0\xc7\xbd\xd0\xc3\xc7\xdd\x98\x17F\xbd\xa4-\xde\xc8\xe1d#\xddjs;lZ\x99\xdb\xeb5a\xa7\x1b\xfd\xa6\x18\x0b]\x9a\x0b=E\xb4\xa47\xa6\x84f\x13\xf4rG\x12\x8a\xc0\xdfV!\x0f\x8dI\x106\x88\xff\n\xe1[\x94\xc3>\x80\xf0~*x\xb2d\x19\xd6w\xa2!Gr\x990G\x01\xdb$,\x8d\xa3)\x98\x8cH\xeeel\x85\x9c\x8c\xad\xe0ek\xae\xe1R\xfdF\xc2\x93\x19\xdflXF\x04\x9c\xc2\xff]d\xcbW<\x91&\x81\xa9Opt\x87]Y\xe7\x8d\x8e\xe4Ia\xcbS\x0c]\xe7K\x8f?}\xca'\xc7d\x85\x1a#\xd9\xb6\xf5\xa3\xc4\xc69:\x9a\x11Noa(>\xeb\xdc2\xd6\x18\x8f/;\xdf2\xb6\xf2\xd3\xdd\x1c\xa6\x01\xf1\x06+X7\x02\x89ia\xcb`\x86\xf9\x19`\xb8\xe6\xc0Lk\x80\xe6S\x81r\xef\\\xc1])|\xc1I\xb8\xeb0\x9e\xe5w\xb4\x06\x1a\xfe|_\x9b\xcd\x8b'a\xbdu\xa3\x130%\x9b\x8b\x8c\xf9\xc9\x8e\x04\x0fH\x14\xb6C\x12\x04'\x04\x19\x178*=\xc5\xf2\x10\x06\xf4{\xff\x0ea\x02&\xb3N\xdfo\x10\xfb\xf6\xce\x1f\xe8\xb6\xf9\x94@\\r\x911R \xe1\xbdV\x1d\x01\x94\xb7\xbd\x1a\x06\xe0\xe5w\x00\xf0\xee\xe9J\x94\xba\xb5B\x83-m\xb4\x8c`e\xb1*.\x04l4O1\xb9\xb3\xf9\xcbf4\x96^'\xd2j\xfe\xd2\xe1\xf9\x83\x18\x8a\xb0\xee\x10\xb6z}pB\x820\xf4\x07\xa6\x13\x0c\x04f\x16\xe1\xeeF\xd4\x82yUQkU\x18\xb5]\xaf?\xec\xadD\xf62j9\x191\xab\xa4\xf6a\xe7\xdcs&\xd5\xdaG\x9a\xe2\x80\xab\xaf\x0e\xc8\x8f'\xce=g\x07\xfb\x90p- \xca L\xbfV\x03\xa5bm(\xa3\x999X7%\x12f\x9bd\xfb\xee\x99\xbc\xdd0\x19\xf9I\xc0\x14\x91\nI\x1e+\xc4f\x1e\xfc*D\xad\xb0\xf5\xc0\xf9\xf1\xfe\xb0\xc0\x0bt\x19\xc9\x88(\x89\x04\x14\x0fASO\x07\x9d&\x10\xbc{ \xa7\x14\x14\xa5\xda\xe4s\xe7\xe3\x87\x17\x0e\xa5\x94\xbb\xaep]\x842*!2\x85!y\x95\xf5\xe9\x80rU\x85\xd9(Tw\xfd\xba$\x9c\x13q\xde\x89Q^\xc4k\x13\xf7\xda\xe9+Z\x0c\xdf6\xa36\x18WY\xd5/\xc2\x97~Nt\xfc\x1a\x9f\x01\xac{Nc\xb5\xe5\xca@\xc5g\xbb9\\\x0f\x10\x7fUx\xed\xd9h\x05\xcc>i\xf7\x84\xf8+5\xb9\x88\x84H\x82\x94\xc1\x0f&\x07;\xa3\x0f\x82\xcbj\xde\xf7e\xd6\xa3\xf5\x1d\x901\x9d\x1d\xde\x85x\xfe)=>\xfe\xf7\x91\xbeg\xe5m\xb4\xdd\xf2\xf4\xe2\xaf\x1f\xdf\xd0\xf3\xf3'\x8f\x1eOY|r\x12?\x88\xef\xaf\xa6\xd1\x93\xe5c\xefJd_Y\xe6}\x81kJ\xff#\xc4\x98\xdc\xaa\xde\xf9N\xb0\x8e\xf2uX\x7fwv\xf5\xc9'\xc4\x88\xe8\xdf\xd8\xb3?>\xbdfDS}~\x83\x1d\nT\xd0Zy\x97\xc6SN\xa1\x19\xc4\xd758d\xae\xae\xe5+\xa4\xb0\xccn\x1ed\x81z\x0b\xc1\x8ch\xa2W\x98$\x92j; H/\xf6`H\x94\xe7\xfc\"E\xe6\x82.\x9d\xc1\xce\x1c\xb6%0\x06\xb1\x07\xa5&\xb8\x11\xc6\xf5\xd5\x1f\xbck\xa1m\xfb\x83\xcdy\xc3\xf3\xabZ\x18\xe3\x19\xf8.pm\x8b\xb5\xab\x83\xb0\x8eC\x18\x87\xddo\"\x07\xe8\x8a\x02s \xc3\xae=[\xd4\x96\xcc\xe6v\x7f_\xa2\xe0$\xd2%r:\x99\xa4\xf3,\xc8C\x1ap\x12\x85\x84y\x071\xd2`\x9a$\xba\xcf~\x10j\x12\xa4\xe5L\x815\xaa\xee\x06\x02\xe9\xff\xdb\xf1\xbd\xf1\xbf\x8d\xee\x8dN%\x8f\xbf\xde\xacx\x92\x8c\x8e\x8eF\xffs+r\x0e\x02\xc7(\x87\x0f\xffs\xb4\x15 |V\x99/\xbd\xd1\xcc\x9by\xb3Q9ZK\xb9\xcd\xfd\xe3\xe3\x0b.\xd7\xc5\xb9\x17\x8b\xcd\xf1\x15O\x96K\xc6\xb2\xe3\xbc\xaaS\x15zach\x8f\xde'\xecb\xf4\x17\x91\xe5E\x9a\x7f\xbd1\x95\xf8\xc7\xc7WKo\xc9\xff\x88x\x1ay)\x93\xc7\xff6\xba\xa7\xca\xbd}}6z\xc3c\x96\xe6\xec\xdfF\xf7\x8e\xffm\x1f\"\xb3\xb2D\xac\x9aw\xac\x14e$m\xc4\x01\xe3o\x9diK$\xa7\xe3\x19\x89\x14\x91l\x07\xf0j\x9b\xd3\x95L\xea\xac\xf9r\xc9R\x87\xc4\xd4\xb9\xe49?\xe7 \x977&\xd4\xc8\xbc\xde!\xf4t\x88\x8d?An\xd7E u\x9a)P^'\xf4jQ\xa8t\xc1\xe4\x0b\xb1\xd9\x16\x92-\xe1 DY.Q}\xb2\xac\xa0\x81\xe3\x10\xe7HWp\xa4\x1e7\xe2\x0f\xfd\x9b\x1f9!\xd9\xf6\xd0\xdd\\Uabv\xaf\xaaS\xe7G\xb3\xf9\xea\x19\x9d\xceWGG\xda\xc4\xb15\xe1\xe5\xec\x84\xd3\"X\x85\x13GO\x9d\xd3\xd0\x01\x1cgL\xbb\x99]w\x89:R\xe0\x0b\xfa\x86\xbe\xa6\x1f\xe8G\xfa\x8e\xe6Mq\xb4\x96N\xf4\xb5\x84\x89\x88$x\xf1N\x9b\xb2 \xbeM\xe9\xad\x14[_z\xdb\xe8\x82\xfd\xed\xfdj\x953I\x12\xb6\x92&\xe9\xbftR\xc3\xfer\xa1m\x19\xad\xcfc8\x83\xb7\xaa\xa2]ml\xdc\xb7\xd7H\xb1\xeeF\xdd*\xa7\x14[\xd7E\x90\x07\xf5D\xc3FT\x97\x96ap\xb8\x12\xf8\xa5\xed\xdeC\xa5\x10\x0e\xa6%\xef\xd9\xe9eT\xd4\xb3\xc3\xd4\xec\xb0\xa3#|\x0e\xd7_4\x8a\x9c\x9b\x0db\x06\xb4\x8b-\xab}}\xd5\xe2S\xca\xbc\x84o\xb8\xb9\xc9r1\xf5!\xf9Y\x95\xcc\xd2\xe5\xe2\xc4\x9f\xcd\x99\xb7\x11K6V\xf2\xde\x10\x1f`^*\x96LO\xb35E\xc8J\x84Kk4q\xa2\xf3\\$\x85d\x0e\xd1\x90\xa6\xcc\x130\\x\x9b8\xdbk\xf5\x05\x16|\xfd ^\xed7\x05\xa8\xea\x8b\x14[\x9b~.\xa4\x14\x1b\xeaD\x85\x14\xea\xfd\x8a/\xe5\xba~\xddD\xd9\x05O\xdf\xa8&\xa7\xd5\xebGh\xa7~?\x13[:m\x1aDf\xad\xce\xaf\xf85[6z~.\xae\x07\xbb\xad\xd2\x07\xfa\x1c\xe7J\xa5\xdd\xfe\xef\xea\xeb\xc9\xff\x06@W]2=\x9e~_gw\x1ao\xa8\xdci\xf7\xb3\x1a-\xaf\x01-\xe1\xe2\x94\xe6\xc2V\x9c\x00\xe8\x99j\x1d\xe3\xb2d\x1e\xcf_\xb0$\x81\xfb/5\x06\xeb\x10\x90q\x02\x8e\xb4Ma\xce$\x1e\xa6jU`M\xc0\xd8\x94]\xcbS~\x9e\xf0\xf4B\xb5\xa5\xd2@\x0c\x86\x8a\x0c>\xa7\xde\x9a\x190\xe9\x07\x0b \x0d\x08\xa6\x7fmb=9\x8d\xc1T\x89U\x86\x9f4<{ytz\x1b\xac\xbdL*\xb5\x03\xea^\x1eH&J\x1cY.yzA\xd5\x14fK\x96U\x0f\xa7\xdb(V\x1f\xd4\xa4\xadD*O\xf9\x1f\x8c:3\xb6Q\xa3\xa8\xf1(\x97\x91\xe4\xb1J\x8b\xf3\x1cf\xa9\xd9\x96M#\x06\x9e\xda\xf1\xf3\x9dz\xe4i\xce2\xf9\x13[\x89\x8c!\x03Q\x85\x03\x88aRc\xe7\xb8\nqZWZ\xf3 'c \x9cW\xb9#\x1f\xaa>\xd6t\xa81\x86\xaa\x16\x1d\x7f\x8bT\xb9\xab\x89m\x96\xd6k\xe1O\xf0\x89\x00\xb3\xd7\x04Y\xcd\xe9g;\x92&\xbd\xbf\xaa5\x89\xf1tn24 e\x85\x9aM\xf84c\x83\xd9J-^\x1bW\x03\x80U\x9b\xde*\xea\xff\x95\xddh\xef0\xd9\x8d\x99\xf7\x95\xdd\xc0=\xf2\xc1Wv\x13R ?pSX\x0d\x16\x02t\xa8\x96\x12\xd2&\x1bI\x15\x1bI\x8f\x8e\x94 .\x824\x84r \xa8\xa8\x07\xd7\x85\xb4\x06\xac@)o\xbc\xe3[I\xc73c\xd8\x94w\xcdK=\xa3y^\xa5*\x18\x00\xcd8\x9a\xd5\x10\xfez'\xdf\xbb\xee\xf2\xbd\xf7w\x16\xb9\xea\x16yY\xcfcW\xb2\x02\x17r\xda\x9c?\x92\xf53\xa5\x98\x08\xda\x1d\xe6\xfc\x00>\x1a/{#\xba(\xdePQ\n_6\xa8F\x936T\x1f\x0c\xa9\xa8IB\xf5\x05\xe8C\x83\x0cT\x1f4Q\xb0\x8b\xd6\x97\xd5\xfa\xdd\x91\\\xf7b\x8d\xa0\x1f\xb8\xdd\xa4Jm&`b\xc8\n4\xbb\x06!\xaaz\xaf>\xea\xb6\x1b_!\x01\x13M\x7fT\xd6\xdf\x15\xe5\x84\x1c\x9d4\x9b Jts\xd5\x89x\xd7\x87\xae\x00\xa0&\xf4\xb6RF\xbaY\x88\x1a\xa8MT@\xd7\xcc\xadJ\xd2\xafZz\xb4i\xea\x85\xe8\xbb|l\x12\xbc\x11 \xfeU\x1a\xbc5&\xd1\xa6w\xa7\xf2M\xb3\xee=\x93\xd6\xfe\x0ci;\x12S\x88\x11X\xd0S\x85m[z\x9b\xc2\xd5CjN\xfdz\xc4ig\xc4;b\x89f#S\xd6\xf8ln<\xf7o\xfbs\x93}\xd3\xdcd\xfd\xb91\xd9\xce\xc4\xb6\x9b\xc9&\xd9,\x1a\xa9\xba\xb9\x1a\xa9xgw\x11\xf5x\x199\x17\xd7\xfe-\xccP\xec]\xf1\xb49?\x91\x17\xc3\xb1|(y\xa4?g\x1az\x9a\xb4\xfb\x80\xe9\xfa\x83\x14\xdb\xa3\xa2z\xdaz\x06\x10\x9d\x8e\x92NK\xa6\x08\xcc\xb2\x80-\xb3\xb0\xa3\xcaA\xa4\xa3\xe8Wj\xb8\xeb\"+\xb4\x07I\xb8\xf8\x82\xb0\x7f\xd6R\xa9_\xa8\\e \xca\xf6W\x84\x89\x1c\xb08\xe6q&\x92\xc4!\x17\xc3\x9f\xaf\xd6\x8c%\x0e\xb9\x19\xfe\x9a\xb1\x9c\xff\xc1\x1c\xf2z\xf8\xb3\xc8\x14r\x80O\xab\xb1\xbf\xa8\x9c\x03v\xcf\x98<\xc7\xe4\x0c\x81\x93r\x13\x08\xaf\xb5\xb5\x81\xe3\xdb\xf7\x0d\x13\xcd\xf0,\xc3\x05\x96/\xf5\x0c\x81T5\xff\x8a\x9a\xba\xd3\x07\xb0#h\xf9\xf1\x10\x0c\x06s4\xc10\x98\xa1\x05\x89\xc1\x1c\xfb\x801\x94\x19\xe0\xf1E\xc3\xa3!\xd0}D\xf8\xf6\x03\xc2\xe4}\xd3\x10\xf4\xce\xe0\xffG\x84\xe7\x16.s,\xf4Fx\x9d\xedM\x9b\x0c4 (\x15\x04\xa5]'2\xacdT\x83\xad\xc6=N\xc9y\xd6]0\xc5\x84/\xaeQ\x8a\xfd\x17\x08\xef\x1af\x9f[\xb0eq\x96\xfb\x82D\xcb\xa5\xff\x86\xe8\xe1\xb5\xdc\xd2\x0e\xf7\xa2\xd5\x05\xd7EW\xd0)L\x04\xec4\xc5\x0cI2\x83\x83\x9d)\x97\xfe\x0b\x921\xd8+\xf5_\x93mT\xe4\xcc\xff@rEz>\x92\xaf\xa2\xca1\"\xf1ro\xe0t\x94\xfb\x05c[a\\u\xa2\xc9\xf7\xe0A\x83m\xd3b\xc2\xba`\x7f\x11Ga:\xc3\xc1\xfe8\x8a\xc7\xfbs\x94R\x9c\xec\xa7\x89\xbf\x1f\xb2\xa51A\xd1[\x1c-p\x92\xee\xf3\x16R{\x1e|\x07\xea\xb4\x0e\x8cI\x9c\x18\xf38\xc1FH&q2\xe7k/\x1bX\xab\x15\xefR\xd5\x8b\x8c\xcfM\xea%\xd6\xd6\xde,\x8cF}Z\xd1\x9d\xf5PH5\xb9J`\xb26g\xe2T]7\xad\x9ejr_\x04\x95e\x1b)\xb3\xd5\xed>\xc3\xc5\xc30]\x10\x19\xc2\x7f!\x04\xf5\xa9I\xd5\x03)\x1cq\xf1\xfc\xf2\x0eh\xd6\xc9 7\x91\xb9\xb7`!\x1aMb\x12H Qr\xc9\xc4\xffj\xf7\x9cz\xbb\xe7X\xeca\xbf\xe7\xc0\xd03\x9b\x8dl\xd3\xd3zF\x1aM\xcbzF!\xf2\xc2g\xfa\x97\xf8_-\xf6\x85\xdf6\x89x|B\xe7(~\xe19\xb5Z\xfc\xbc90S/\x84\x91\x87,7~\xe15YZ\x8b\xa5!\x18y!Ok\xb1\xb4\xf6\xc0\x8c\xbc\x10\xfa2_\x9b\xa5uX\x1a\x82\xbe\xcc\xd7ai]QV\xa5uYZ\xafV\xe3\x8d\xb0\xc2G\xe2\xf4\x964\xc2\xfdVn\xa0\x91\xd6\x970\xaa/\xa1__\x8a\xa13\xf6\x1e\x10[F\x8e\xd90\x04\x13g\xd2\x9fL\x00D\x84\x86\x7f.\xf1\xed,\xa4,\x15\xe1qp\x00 \xfas\x89\\\xe08\x93 \xcf\xf3\xe7\x12\xcdQ\x12\x12\xec\x82\x83\xc9d\x12t\x00D_\x97\x89\xa8\x86g\x19\xe3p\xca^\xbb\x93n\xe0\x038\x0e\xd3?y+\x13\xdc\xf1;\x00\x8e#\xe4_\xb3\n\x1d\xfeL\xfc\x19\x0eP4\x8fI\xc0\xf3\x8c\xfd\x80\xa5\xb3\x12\x8e\xc3Z\x15o7a\x1ca\xea\x82>j\x8dq\x0b\xc0q\x12\xdf\x12\x17\xa0n\x0b\xb5\x10\x80\xe3e\x12\xdd\xdf\xc6q\xe0\x82\x00\x8f\xfb\xfd\x03\x00}\x14`**\xeaN\x0e1r\x00w\x1dN\x13\xccV\xc8\x1cx\x87\xa7\xc5~\x1c!\x86q\xd0\xea\x1d61\x80~\x9c\xa0\x88\x01s0\xe9:\xfc\x95L\xa2\xf8\x16'\xa2\xb6^\xe7\xb0\x8b\x03\x91\x9e\x86\xd15\xcb9\xe93T\xfd$\x9c\xa71qA\xe07;m\x96p\x8fHN\xbb\x00%\xd79f\xfd\xb1HQy\xfac\x952\x8d\xa3\x00\x93\x84!3\xee\xf7{\x8eJN\xd0\xbd\x0b\xd0!\xfb\xa3R0\xe6e{\x1d\x86\x8aL*e\xba\x9e\xa1\xeb\xd0\x05\xe3`|\xd0\x935\xcd\xd1\x94\xed\xc2\\\xd0\x1f\xe7p\xc4Qx\x83e\x8d\xddno\xdc\x92\x10\xc7 \xdb\xa71$\xfb\xbej%N\xfcY\x18\xb8\xe0\xf0\xb0\xdd\xf2}\x91\x96\xe0@T\xa82\xa5\xbcW]\x80\x0f\x0f{\x07H\xa6a$\x9b\xe8O\xc6~_6\x912\xfa\x0b\xcat\xfa\xed@A\xc4\x93\x05\xd6\xadIg\xd2\x99\x14\x92q)\x99.\x93?\x97q\x98r\xf2\xfa8h\x8ad\xc58\x87\x1d\xc7 \xda\x00\x06\x18/\x16!\xe1\xbd\xd6\xec\x1c\xca\x94\xf4\xfa^\xf5\xccX\xf4U8\x17-\xf7\x0e\xd9\x1f\x99\x80\xf5\x848\x98*\x96h\xe2C\xce\xa9\x930\xc1\xe3$d\xfc=n\xb1\xff\x00\x9cD\x8c\x9b\xd4\x98\x9aL\xd0\xc4\x01p\x12'8\xa5\x92\x12\xadV\x7f\xccs.\xfdY\x1a\"\x96K\xf0\xfd\x14\x85$\x1d\xc7I\xcc\x18\x8a\xfd\x01p:\x8bS\xaa*\xeb\x8ba\xcb\xd8\x85\x15\n\x0e\x18\xe55\xe6 \x10\xea\xb6X\x12G\xa4\xef\xb0?\xecM2M\x9f\xf7\x14\x7f\xbd\xc7Q\x14\xdf\xba\x00\x05\x93 \xebw\x81\xa9*1\x8b \xbe\x0f\xf0\xad\x1c\xe2<\x85*\x1a\xf6\x0e\xc7\x1d\x00C\x12\x84\x88p\x16\xf0\x83\xae\xdf\xf5E\xd24vA\x87\xf1X\x0b\xc0\xf0&N\xee9 x\x15\x92-'\x0e\xee\xf5}\x00#t\x83I\x80\x13\x17\xe0\x1e\xeeMP\x9e2\x8e\x96\xe9\x8c\x97s&]\x96|K$\n\x07\xfe\x84sd\x84\xe71\xf1g\xe1d\xc2\xd8\x8d\xd1\x98\xc9\x90(\x9c\xce\xe4\xf8GA\xd0\xc7=\x99\xa4F\xb7DN\xa4\xf11\x88\xe58\xe5I\x19\x1d\x15m&h\x82\x82\x96\xfa\xcaI\x1a\xb4\xd9\x9f,\x89\x03u\xe8`|\xe8\xe4i\xe5l\x8an\xe3\x9e\xdf\x94Ij\xa0L&\xc8a\x03E$f#\xa5\xe5\x8c[(KV\x8c\xda?\xf0\xf1$K\xcdG\xcaA\xff\xb0\x98\x88\x8b\x89\x14\xe3H\xd40v\xfcN\x80ez\x86\xe5d2\xc1\x1c\xfc9\x1b\x0d\x13\xf9(Ai\xb7\xfc\xa0\xcdi@\xd8+cfF\xd7L\x9eL\x9c {Kb\x86\x0e\xe3/\xd6=s\x1c\x84\xcb\xb9>q\xf4z~\xc00\x12_r\x91\xc8\xbaM\xa4)\x013F\xdd.#\x9dH],\x93E\x84]p\xd8>p\x82\xb1J\xcd)\xd5\xf6\xc7\xed\x83f\x96\x9eK\x95\x83q\xaf\x8fq\xf6a\xc1\xd6\xef\xd98\x98\xa0\xc3\x0c\x16M\x88t\xfaA\x93\xc96\xf1A\x88\x11\xc1\xe0\x07\xcdn\xbf\x0b\xe0<\x0cH\xcec\xcd\xc3\xe6\xe1\x01\xc36$\x94\xad\x98\xe6|\x06\x9c\xb0.\x9a\x87)\xbdO\xe2TN\x82\x98A\x18\xfb>JC\"R\xc6]\x00 \xbaAWq&'\x02\x8c\x02\x9ex/g\x0b\x07\xc08\n\"\xe4\xb3\xcf\xc1\xa4\xcb\xe8\xceE\xb6\x18\xa7\x8e#_\x83\x04\x8d]\xd0\x1b\xf7q\xab\x0d`.\xbcQ\x97g\xe1\xef\x1c\x8d\xc9\xa4#\x93\x04\xa9\x03t\xe0\x04=\x00\x17(\xc2\x9a\x10\xc1\x18\xf7Y_\xf1d\xc9\xe2\xfd\xc9\xf8\xb0/\x924\x82\xa1 \xc6\x8c\xc8,Y#W0>p\x98\x98]\xa0\x05\xbaG\xb7\xb3p\xc1\x91\x9e\x04]\x00\x17\x18\xf9\xb3\xc5r2\xe1(\xa3\xf1!KJ\x96L\x88\xf4\xbb\xed \x80j\xb4\xf8\x8e?\x06p\x11-\xe7.\x08\x02\xe4\x04\x01\x80\x8b\xf86P\x02x\xec`\xce\x89\x8aC\xfa\x92d \x1ec\xdfG*\xb9\xd7>di\x0c{\x86z\x12\xa7\xf7r!\xc1\x1d%\xf1=\x92\xe3\xa3\xd3\xec\x1d\xb2\xbeJQ\x10DX\xe6\xeb\x8f;\xddf\x9b%\xca1\x8b\xfa\xceA\x8b\xbd\x93@\xd55\xe9\xa0N\xcf\x01P\x1b\xc2\xb8?\xee\x1e\xf0\x94t\xc6\xcfe&\x93I\x97\x11+\x0d1!\xc8\x05\xc8\xe9\xb6Z\x01{\x8fn\x98\x14\xf4\x1d\xf6\x07\xc0\xc2x\xc7c\x005\xae\xee\xa1.\x97t\xfa\xe8w\xfa\x0e\x93>\xfa\xd8WID\x8eo\xc4x\xb2<\x06&\x07\x13\x005\xe1\xd0\xe9\xf5[L\xb0S&\x18\x83\xd6\xb8\xc3\x844\xc5Lr:Rr\xb2\xfd\x03eT\x0d\xfa\xe3I\xd0\x07\x90\xc6sDc>)\xb4;\x07\x00\xea\x83\xc9\xc1N\xe0\x00\xa8fc\x8c\xfb-\x86\xfe\xed\x0c#\xcaFJ\x80\xc7m\xf6\xaa\xa6I\xf9\x9c\xce\xe3k\xb9\x96d\xc2?\x97R\x8ezQ<\x89\xb8dZ\xf3\x05\xf0\x9d\xb7\xff\xfbwC\xd4\x98\xbcl\xbcq\x1a\x87\xa3\x87\xde\xfa\xfb}x[N\xed\xb3\xd4\xebrj\x9b\xa5\xbe/\xa7vX\xeako\xff\xf7d:\xbe4/\xd3g\xe6e\xf0\xd0\x84\xed\xb5u\x99>\x83O\xbc_Z\xdf\xef\x87\xf0\x0fQ\x1a}sq\xfe>l\xd4G\x83!\x83\xe5\xd9\xd0\x96O\xf5\xbc\xf2O\xde\xfe\xef\xb34\xca\xeav`{]\xcc\xa7\xd7\x9a}\x19X\xffz\xfc\x93\xa8\xfdB\xd4\x8e\xfe\xf1\xeaw@-\xdf6^\xc9\xed;\x10a\x9a\xaaU(s\xb3\xad\x0c\xb5J\xbb\xfe\x8ab\x05\x05\x0d\xf7\xe4\xaa\xdf\xeaP\x1b\xa8\xf1\x90\x8e\x06\xe0;Pg\x0f.\xe6\x971\xb8jExY\xb8S\xca\x95\x07&Y\xb8I\xda)\xa1&\x00u:l\x8e\xeat\xd8\x1a\xc1f\xcf\x92\x0b\xaf\xe2\xf76\xfb\xde\x11\xdf\xf9\xc0+~\xee\xb2\xcf=\xfey\xad7yk)\x05\xb0f\x01g\x16\xcb\x1e\xb0\xb2}^v\xbf\xd5\xedZ6\x8d\xdf\x84w80[\x99\xa2\xed\x7f\x14`\x88\xa2\xc5\x0c\xb9d\xbd\xd6\x00\xbf~\x8aV\xcd\xedM\xb74\xd0*\x9a\xe6\x90\xb57i\xf5\xdeR\xaa\xc9\xed\xb4\xea\xe4X}+\xad\xfe\x11\x80%\xad\x92\xf5Zh#^\xdb\xf8\x0e\xfb\xa689\x8d\xb7\x91\x8c\xdf\x9bm:U\x8d\xc7\xbc]\xa7\xa2\xdd\x987\xe9Xki@\xf4\x87\xdeT\xb8\xad\xa9p{S\xe1\xd6\xa6B\xd9\x94\xc4N#?\xff\xd8\x19I \x90\xf7I\x07\"\xbb\x91\x00\x92\xe9\xd8\x04\xf5\x9bBg!\x05I1Q\xc0\xb0\xdft\x9c\xd2\x87v\xf6\xc1\xaa\x03\x0b\xc0H\x117\xe5\x8d\xedE\x05\xd9\xd1\x81\x14\xa6[\xbb<\xdaN\x85h+\x15\"Ep\xde\xb7\xbew\xa1\xe3\xea\x0b\\\x97\xd5\xb8\xfaU\xb8\xfa\xdbp\xf57p](\\\x97\x02\xd7\xc5\x06\xae\xcb\xad\xb8.\xb6\xe3\xba\xd8\x8a\xeb\xe2\xb1\x1e\xf7y\x8f\xafu\x10\xba\x85\xd3\xfc\x8a\x00T\xb9b\x97\xbb\x03\x0b\xd8\xe8\xe4\xb1\x078T\xfc-\xf6\xb0\xcd\x00\xe1/y\x18'\x93\xdf\xbd\xb0 \xca\xa29\xa9\x94\xd43\xc3:\xb2\xf6[\x9c\xe3=\xcfCY\xb0\xec\xfcv\x05G`\xf00[b\xd7\x81)\xa2\xcb,\x8e\x07\xdf.\x11\x9c\xa6n*\xd1\x94\xb9\xd7\xee\x13\xd9\xd7\xd2\xbc,l \xe8{\xe9\x0b\xbb;\x88\xf6\xcdV#l \xcb\x8d\xf69T\xca\x04>\x94&\xf0\xc4\xa5\x9e\x994bk?\xaa\x9b\xc9\xf3x\xd0s\x1dK7\xddNX\x86\xb8AX\x86\x96\xfc\xa0n\xc4S\xcf$\x8d\x84}\xe9(=/}\xe6\xf5\xd4%\xcb2\xa2T\x87\xdc\x7f\x12\xd1\xed\xd9\xd7k\xf3\x8a;\xb0`\xf8\x1eWy\xba;\xe0\xe6\x9f\xe2<\xb3V\xc3\xc3&\xf7n\xc7\xaf\xb3\xe3a[\xbct\xf8KW\xbc\xf4\xc4\x0c\xccr\xd6Y\x8e:\xfb\xe2\xe2u\xbe:8\xcdO\x7f\xf2\xb31\xb3\xd9\xcb\xa6\xf1&we./\x80\x02\x07\xd4\xa9Ku\xcb\x88\x1c\xbaSsC+m\xe9\x06\x08E\xb5\xf4\xb1\xc9 c\xe5\xeb\x1fL\xca\xfe!V\xc14\xa1\x98]i\xa9?\x16\xed\x12D\x1e\xb6L!<\xf6\x89\xe6\x90\xa6V\xdbH\xa3\x15iD\xb1\xb1j\xf1\xa8\"|<\xabM\xbf\x82\x9b=\xeb\xa5\xed\xd9\x12Cl\xe7\xdd\x0b\xb1\x9du\xafu\xa4\x8f\xe0\xa6\x86\xc5yA\xff\xfe\xd7\xf1\xa8H\xcb\x82\xc0%/\xbc\xe6@!\xe82\xa9\x89\xb8\xd8\x14 \xfcP a\xb2\xef\xdbp\xd7\x9e\xf3ps\x82\xd9e{\x8f\x93D\x07\xe4\xf1\x9c\x1cBY5\x87S'fK#\xe6\xc9?\xca\x12\x82G\xd9\x10\xa9\x9f2\x1e=e<\xfam4\xda\xa8\x8a\xc9c\x8b?pa,\x1e\x99$\xb6\x8a,\xd2\xd3\xb0zSd\x91T\x05\xa1|\x0c/u\xa5\xf1*\x0f\xb7\xa7\xc8\x1d3\x188Ic\x01\x84|fP\xf0G\xcah\xbc\xfe[$|\x92\x1bO\xca\xdc\x985\x0dA\x9d\xfc\x0f\xb1\xe4\x89\xa0?\x94\xc4\x87\x92\xf29\x0c\x19e\xb0F\x19\x9cSf\x1b\x0f\x1eh\xbd\xf5U\xed\x9c$\xd4[6\\}\xceI\x9bR~\x93\xe6\x0c\xa8\nzJ\x10+\xbf0\x80+?\x88\xa9H;\xda~#\xf7e\xff\xa3\x80d\x8c\xb4W\x82d\xb5\xcaO\x95E\x8a\xa5\x03w\xf2-\xc0\xcd\xb6\xa0\x9c\xcb\x94\xca\xcf\x99\x94\xd9\x8d^\xe7\xff\xdf\x05\xe9\xafR\xeeL\xf8`\xd7\xd9-\xe7\xd0\xcf\x15\x8bF\x03\x9bR\xc4\x94W\x93\xd9\xe5p\x15{\xb5\xe4\x9dW\xbf\xc2\xac\xf9\x1e\xcf\x9dLK\x7fB\x1e\x19P\xdd8*\xb6\\\xd1fl\xad\xd7&\x93\xfe2\x1a\xe3P\xbf#\xf2\xaa\xb4\x10\xc8V\xaa\x18fKT\xf6]+\xf2\xbd\xa9<\xc0\x02\x9a \x92\n\xb3Z\xa0\x9fcSi\x99\xf8\x92\xed(d\xdaW\xd37\x1f\xd6\x90\xc0\x87|Q\xf6\xcat`\x13\x92\xbcG\x1a\xda\xea\x1c\x0b\x9f\x0f\xac\xa6/\xdeg\xf3{\xed\xac\xfe\xcf\xbf\x0b\x82\xb6HT0\xe4I[\x80x\xeb}6\xff\xd4\x80\xf8Y \xa2\x12\x08\x99\x06\xc7\x91\x1a\x9c+q\xdbF\x0bWiRk\xd3\x17\x86\x80\x97\x0e\xf1\x88\xed\x1a2\xb3\xa3\xe7\x9e\xed\xb4\x0f[\xfd\x01\xd9o\xb6\xec\xc3\x96\xcb\xfbe\x11\xdf\x9a&\xa9\xdbN\xb7k\xed7\xd9\x0fl\xd9\x1d\xee\x87!\xf1\xc8\xd0\x19\xc1\x98{\xd4\x84\xa1G\x86\xad\xcc\xa1\x99\xaem\xb0[\xcdV\xefYR\xb7\x0f\x9a\xdd\xd6\xb3\xb8n;\x07\xad\xd6\xb30\xd73\xb4\xf5^\xffU\xbf\x1f\xfb\xb3p\xa2\xfd\xb3F[\xbdf\xf2\"\x19\x08\xe0\xac}3\xe1\xbf\xae\xfc\xdd\x97\xe9\x05mF\xde\xca\x8f\x7f\xb7c\x1f\xe1\xadzu\xb7\xfe\xe4}6\x7f\xd4\xba\xf5\x97|5Pr\x0b\x03\xbes\x1c\x07\xc8\x1b\xd4r>4\x89\x07\xbe\x9bL&z\xb2\xb0\xed\xd8k*3\x0eF\xad\x17v\xf3\xe0\x10\x86^<\xa0.\x91`\xef%\xab\xd5\xaf\xa8\xe1\x08\xbek\xf3\xff\x00\x93\x131 X\xda\xd3\xd0o\xd2\x80\xd5\xaa\xc6\x03\x83C\\\xe6r\x1f89\xc4~\xc5\x81\xec\x8f\xe1\xd8MKQ[\xeb\x94\x04\xa7\x8b\x98\xa4\x98\x89\x1b5\x8cx\xa3\xd5v\xe4\x15\xbc\xb9\x86c\xe4_O\xb9B\xe7x\xa3d5\"\xff6\xed\xc3\xf6\xc6\xe8\xc8X\xe4i\x00r\xea\xff\x9d\xe6\x8b}\x98\xe0 L\xb0Owi_g\xf9\xbf\n\x01\xbf\xc7#\xa9o\xab\xc6E>\x06NH&\xb1\x02\x05|\xa7\x8e\xa8\xff\x81\xa6X\xc5Y3k\xc8\xdd\xf51\xf07 d\xa4\x8c\xe2i\xcc\xd6ww\x8fq\xad*y+n\xd4\xcf\xd1\x9d\x10\xba\xbbd\x9e.)\xc5\x89\x0bZ\x8b;\xb6ta\x8d|@\x04G\xee\xc3fw\xb5z\xedV\xbb\x0f\xe4\xc5{\xd0q\xfeU\xec\xbal\x05\xc4\x06\xe7\xab(\xf6\xaf7k\xa9b\xac\xbc\xd5|Mi7!\xb5K\x859sa\xec\xfd&\xb4'\xd8\xd3n\xbbeZ:\xe1\xcf\xaeV\x03o/\xce\xcf\xa4C$\x10\x12\x99\xae\xf9\xcb\xc79Y\xaa\xeaQ\xb7\xb4\x07\x99\x8f%\xee^\xf5\x13\x8e\xb0OE\x88\x15\xb2\x8c\xa2u\xd5\x8d;\xd9\xecj%\x1ft\x95\x1d\xbf\xb6|Jh\xfcs\x88oO'\xef0\x0ep\xb0Z\x99\xbbf-\x1cOb\xcf\xa9\x08\x03\xb3Z\xed\xed)\x1b!\xeeEZ\xf3\xe5B\xa4\xc3\xbf\x0d\x8fz&\x95j\n\x0bJ\xd3\x93S\xee\xfbQ\\j\xe4W0\x7fF\xd1\x12\x9b@,\x88\x1b4^48'\x00\x8b\x9f\xa1\xc7;\x95\xe2\x8e$\xf4b\xa1\x001sl\xd0\xa0\xf9\xf3s*\x89p\x11/ z$c\x9d\x7f\x12\xce0\xe4\xbd\xfe\xe4\x85V\xb8N\x0b\x1fa\xaa\xd7u\xc6@\xa2\xdaK\xd6,wT\x12=\x9aWoY\xb8z\x88_\xe8\xc5\xb3\x96\x85\xa3\x0c\xdf\x0bk\xb5=td\x86\xab\x15\xb2j5\xcc\xbd\xaffp>\x82b\xa3\x88\xc2~\xab\x91lb\xbd\xdf\xb2\xa0\x99\xaeVQ\xa9j\xee\\\xeb14\x1a\x050\xf7[\x8dx\x031^7\x03{\xb5\x92-\xeca\x11\xef\xb1\xc4\xa9\xa6o\xad\xe5Me\xec\x11\xb3\xd9e\xcc\x81\xf9m\xe3\x04[0\xe4\x89\xfa=c\x84s\x8fOBS5\x1c\xc1\xc4s\x8e\x92\xe78\xbfl\x9e\xd4\xeb\x16\x11W\xd9)\xbf\x00\xcc#\xe6*\x89!\xac\x03\xd4 \xbd\x96/\xafa\xc4\xa3\x0bC\x92\xeb\xceR\\\x10\x8d\x98\x04\xe9\x97\x90\xceL\xb0\x0f,6g,\xc7\xe2\xc4\xcft`^\x8d\xe5\xe2\xbc\x86H\xabao\xd3\xc9\x9be\xd5ja\xfa\x86;\xb1P\xf7\x00\xfdb\xf4\xe7\xfc\xf2\xf4p\x04\x89\xd7<\"\x9b7\xa8I\xbdn\xd1!i4G\xda\x0dj2:\x12!\x91E\xa6\xa2q`\xe2Q;\x9d\x85\x93\xdc\xc3G\xee\xc9:\x19`\xd7\\2xj\xb5%6\x13\xabV\xd3\x15\xd0I\x95Chj=\xb0\xacC:\xb2\x06&\x1e\xd2\xd1j\xc5\x7f\xbc\x87\xb5\x05}\xcc\x9f!\xffl\xb9<\x9d=\xaf-\xf6M\x9e\x04zJ\xa3\xfe=O\xd1\xaesW\xcfN\x19~\x9f?\x9e\x0d\x08\xbe5\xf9H\xb2?\x7f<\xb3\xf8\x84\x84o\xd9\x17\xc5i\x01\xf6\x1e0Y\xce]\xf0\x9a,\xe7\x80__\xfd\x14\x92i\x84\xb9Lv\x01\xff\x11\xe9\x9c@.\xe0\x0b\x1a\xa0\xb6p.8Q\x8e\x05\x02\xbcH\xb0\x8f\xd8r\x12\x9cd\xcf\x00\xe2;4\xe7\xb6\xea\xaf\xc5\x03\x80\xacW\xf85X\xf0N>\x01\x98`\x7f\x99\xa4\xdc\xfa\xff\xa3z\xe4;#t\xff~\xe2\x02\xde\xb8\x11O\x0c\x00o\xf1x\x16\xc7\xd7\xae\xf4D\xac\xf5\xd7\x0c\xeb\xe7\x0c\x01\x1e\xe2Q\x91\xb5\xf7<\x8f\x0e\xc8\x90\x8e\\m\x88\xcf\xb1Y\xe9\xce\x1d\x0f\xe8j\xb5\xd7t7\xcf\xf4\x07`\x82\xa2\x14\x03\xc6Y.\xe6\x84\x9cbx\x8fu\xcf\xb7Y\xf5\xfc\x1cM\x1al\xc2\x10\"\x98\x1e\x95\xce\x00\x1e\xa4,\x8c\xa0\x0f\x97p\x01'0\x803\xcf\xa4\x9e6\x12\x84S\x05\xcb\xacHzXCb\xb1\x81a\xd3\x19\x9e3\x81+\x1el|G1\xe1q\xd9\xde\xc6\xf1\xf5\x91\xba\x04n\xb2\x91\xcfsX\xdaAe2\x10\x8fnb\xcf1Y\xf28+\xaa@XU T\x05B\xb5`\xb4j5S\x06\xa2\xe3\xaa\x1a\xf3\x87\x0bV\xc8H1e\xdba\x03\xb0\x8a\x81\x11\xa6F\xce*\xb6\xf1\x11\x134\xc7\x06\x8d\x0d \xeb\x01?XP\xe1 \x93\x14\x00\x026\x98A\x86\xaa C\n2d\xb3e\xe6'\xceu\x05\x84\xd2\xaab\xa9*\x96\xda\xd9\xea\xf4I\x94\xf2\x06\x1eC,\xabOG-K\xf4\xf4\x14 \xad\x8c\xf9\xc1\x92=3\xf2|\xcc\xba\x19c\xb83K(\x04\xe1C\x91\x0d\xb2\x10\xea\x16\xf4\xbd\x875\\z\x0e4\x17%?\xd0\xba\xb0\xc7U\xc2>s\x8e`\xd2\x01\xad\x03[\x04\x9a%0\xf60\x9bu*\x9c\x15\xc4\xcaq\x86\x10T\x99\x97F\x0c |(\x05\xcae\x93\x96?LF\xfc\xa9^_\xbeh\xe2\xb6f\x9f!\xaf\xb3\x8b\x9eX$\xf1\x18\x8d\xa3{\xc3\x8f E!I\x0d?L|\xb6\xadf\x9d\x81I\x80\x89\x7fo jp\x9b\x15\xd7\x00\xf5X\x93\xdf\xd6\x11k\xc7\x8b\xcd(\xbb7\xce\x12\xd6\xc5H\xdfk\xcb\xdd\x98>b\xe1\xd1!\x11\x0e\xec\xcd\x88 g\xf8\xefO\xef\xdf\xd9|v7\xf9\xa3\x90\x1c\xe1\xe4\xde\x8c,K\xef\xd3\xd2\xd8\xf4fp\xe2\xc9`\x1d),zp\x0f0\x9c\xc8\xa2b\x11%]nq?\x94\xc9\x1cE\xe1W\xfcI\xff\x90-\xe9\xe4\xbb,<\x0b\x03\xfc6N\xa9\xf2\xd1\xaf\xca\xbe\xd5\xd2MZ\xc8&K\xe2\xbb\x05\"\xc1G\xa5\xca\xd4\x0b\xbf.~2i9s\x16E\x9e\xab\xd8\x02\xd6\xed\xe9\x9b0I\xa9\xc7[\xdbLW\xa8\xc6 \xdf\x1e\xa4/\xa3\xc5\x0c\x8d1?\xce\x8b\xeeE\xa9-\x1f\xb5\xa2l6\xe3S\xd7\xd6\xf2\xdbr\xc8JH\xfcrI\xd9\xdf\x99(\x92\xbf\xab\x0c\xdc3\x86 \xfc\x18%\xa9\xccVJ\x95\x99\x17\x88\xceN\xc9y\x18\x04\x11\xe6\xbbX\x91{#Yf_\x12\x9a,S\xb6\xedZ`_d-$i=z\x12\xdf\x92(F\xc1\xab%\xa51\xf1\xb2.,\xa6[Y\xa8 \xc6\xd1\x9fd\\!\x96\xb7\x90$\xb3\xc5$\xba\xff(;\xe6\x94\x08\x81$\xf1\xab\xfc\xa4\xe8>\x8bo_gl]`\xcf\xc2\x17\xd6\x01\x85\x04\x0d\x1d\xb1\xf6`-\xe0\x94\x8a\xea/\xd08G\xab\xfa\xbb\xac\x80\xcd\x0d\x17\xf1t\x1aaQ \x7f\xe7\x11\xf3y\x9e\xab4\x96`\x0b\xd6=\xc378\xd2a\xfdwU\x06\x93V\x17T\x03\x84\xad\x9a\xae\xc3\xc5O\xcb\x98*J\x15\xd3t\x14\xb9\x0e\x9ak\xaaS\x0d1-U\xd13d\xad\xbd'\xf8\xfd\xe4\xe2~!\xd4\xd3\x92\x7f+\xbed\x9cv\xcf\xba]@z\x1a\xdc\xe9\xa8}(}\xe3\x1cXL*\x8cxAl\x01\xd9\x9b\x10G\x81\xc4\xac\xfac\xc6\xbb)wy\xf2G8%q\x82\xcf\xc39\xfe\x80\x124\xc7\x14\xabA\xf2h\x16Y\x0d\x8a\xa2\xf8\x16\x07\xe7\xc1q\xe60\xc4\xa3U\xa9\xab\x15\x9b\xecr\xa0\xe5r\xf4\x13\x0f\xb5\xfc3JB\xd6R\xaaC^\x9dC\xf1\x10\xba;\x11\x1e%q\x90\x8b\x08\xaf\xbc\x064\x03\x8fn\xc9k\x0d2%G\x00\x9b\x8e\xe5n\xd8J\x04\x83@\xcd\xc2\xd9\xc6r\x9bD\xdd\xb8\xf2\x85\xb8\xdf\xcb\xccN\x88\xbf\x1fUZ\x9e*\xed\xd9C\x16t\x10\xab`\xbc\x10l \xe9C\x87*\x1c\xd0\xc8\xdb\xe3\x8b\x04\xba.\xaf\xa0q\xadV\\\x12\x95D\xbe\xf0\xeb3\xc6\x062\x04L\xc6xI\x8d\x04\xfb8\xbc\xc1\x81\xc1=\xe5\x18\xe0\x87:\xae\xff\x00\xd8\x8a\x9e\xc1k\xfcP\xcf\xc0\x86\x0f\xeb5\xdc2AUl\xfb\xf6\xf6p!{a.\xdcvcN\xb7V\xdd\xe3;tE-\xae\xf4;\xa2\xabU\x01GP\x98Q%\x0ea\xcaP\x94\xda>\xb6\xce#1i\xe0\xbb\x90\x1f\xfe\x18Xj\xeb\x8c\xcf){\x15\x8a\x14\xc31\xc6\xf7\x86\xf2\xc5&Cjx\x94\xad\xd9\xb7x\xdf\x94\x9eIW+\xe5\xdcI7\xfeS\xbb\xdc\xb5\xec\xa4M{\xc5\xd5\x8ac7\xd8(\xb4\x99u\x80\xdd\x82bb\xedV\xc5\x92\xd5k\x92\xda\xd9L\x81\xb0a\x0fI\xcb\xacR$c:\x8b\x97Q`d{uVX2\x0bK\xd1\x99\x85V2\x0b[-\xac]s+k\x82/IL\xa6\xb2\x96I\x9c\x18\xc5\xf6?\xe2\x93\xd87\xc4\xc9\xaa\xab\xa0\x19c\xc9\xb6PA\x14'\x9aG*\xb8I~gm\x159\xb08\x11\x96X0\xdf_\x16\xfd\xa6\xe9\xa3z\xcf9z\xe2z\xa7\xbcT\x83\xc5\xa5\x1a@\x93%\x06nV\x98\xa7\x89=\xaa\x9b5\xa2v\xecU\xc2`Kl-CI\x03\x11\xf6\xe6\x91\xb9\xa4*\x0c\xd8&\x87e\x06\xa2\x0e\xc4V\xc5\xc6\xba\xa0\n\xcb\xe5(\xe6r\xd4)\x00P9OWA\xa1\x04\xe6\xa0\xb9\xef\xb8B\xff\xf6\x8e\x03\xc6\x06\xfd@ZD\xfa8\x8c\xb4\xe45\xc4k\xd3\x827\\\x0f\xd9\xb6\xe0\x18{7\x18\xdeao\x8cU|Ex\xcb\xdf\xfc4\x85\xd7\xe2\x89;\x95\xfa1\x8a\xc7(\xe2\xear\xf8\x9e\xa7_\xe3\xfb \x9b\xdcR\xf8\x9a\xbf\xf3m\xcb\x87$\xbe \x03\x9c\xc0?pi\xeb\xb59\xc8+t\x9e\x1b\xea?\xae\xf9d;\x99\\\xf9\x97d\xba\x8f[lN\xf1jeN\xb1\xaeQ\x98\xa3k|\x81\xe7\x8b\x08Q,\x92-s\x08.\x89\xc1\xff\xfb\x7fs\x1c\x84\xc8\x00\x10\xb01\x8311\x10 \x0cs\x8e\xee\x84j\xdee\x9f,\xe3A\xe57\xd8\xfb\x91z[\x8b\x070\x82\xffx\x8dlJ\x1a\x80E\x12\x12\n\x0d\xb6\xed\xac\x8c \xa8v\xd4\x9ae\xdf\x10\x8f\xd6\x16\xbc-)\x1b g\xecO\xd8\xbb\xc3\xb9\x1e\xe9\x02Wi\x15\x95\xfb\xb9\xaa\x0d\x9cUj\xb7\xf8U8b\xe4z\xa2+\x0c_bx\x8c\xe1)\x86\x1f\xb0\xf7 \xdbAxc^\xb1\xee\xb9\xda\xb1{\xa4\xffx\xd7h9\x8b;N qdh$88\xba$\x19\xd1\x9f\xcc\xc7\xb6\xa4\x1fK\xaafE\x02jj\xf1lr\x87oTzY\xcb\x0c\x8c\xed\x94\"\x8a\xbd\x07aC$W5\x90\xa8E\x83\x86\x10'I\x90Z<\x02}\xc9\xdd\x9a\\\xcc\x9d\x84\xc11\xa2\xfe\xacJ\xb9+\x96\xc4\x98~b\xed\x99\xb2=\xbc\xb6\xe0^s]\xa8-\xe1>v\xb6\x04C\x16\xe0\xcapia)&\xca\x07\xcc5\x93\xb0\x9c\x0efM\xa1\xb3\x84\xe0S<\xc7\xdc\x9e\xc1\xb8\xc5\x84\x1a\xb7lz\xb1m\x1bX\x9b\x85\xb8\x1d\xa9*g\x00Xn>\x0b\xa3\x07\x8c\xaa\xe2\x0b\xb0\x05\x98@\x18\xcdl\xfb\x9c.\xe7s\x94\xdcg\x00S\xe4_\x1b4A>\xael%\x91\xea\xd8M\xf0xL?\xc6\"O`&&\xd1\x9f\x85C\\>\x88[\xb6c;\x8d\xc4\xb7;\x0e\xb08\xee\x1bU\x8c\x13Q\xfe\xc9\xda\x8f\xe3\xf9<\xa4\xbc\xda\xe6\xc1\xf8\xb0\x7f\xd0\x06\x96\xe5\x866\x0f\x15\x92`\xc2w\xa4\xa6\xd8\xfa$\xf1\"\xb5}\xf9\xc1ZC\xba6C;\xdb)X\xf0\x1d\xf6\xdec\xf3%\x1bk/w\x1ck\xce\xbf\x94@\xa2\xd9\xe1\xbd\x91\xc4\x9c\x07\x9d\x00O\xad#!\x99\x9a\xcec9\xdb=\x91\x97}_k#\xf4\x7f\xa8v\xd6igL\xb6TN\xe9\x9b\x04\xbf\x99\x02\xf8\xe0G(M\xdf\xa19v\xb1\x9d=C\xe9\xe7\x98[%e\xa7\xfa\xddf\x0b(\xef\xf9\xe2\xe5&\xc4\xb7\xaf\xe2;\x178\x86ct\x9b-\xf6\x17\xac+\xd8\x0d\xd1\x19\x80\x0f\x81\x0b\xce[\x07]\xbb\xd7o\x19\xcd\xce\x81}xx\xe8;F\xd3\xb1\xfb\xbdN\xa3o\xf7\xdb\x07F\xf3\xd0\xee\xf5\x9a\x0d\xf6\xc32\xf1\xb7\x1b\xc7o\xb0L\x07]\xc3\x11_\x9a\x8d\xbe}p\xd8S/2[\xe3\xb0g\xf7\xda]\xdf\xe1\xb9\xfb]\xa3o\xf7\x9d\x9e\xfcj\x14\xf3:>\xcb\xd3\xe9\x18\x8e!\xdb\xea\xdb\x07\x07=\xa3\xd8\xb0\xa8\xf0+XW\x0d\xa1M\x9c:=\xc7\xee5\xbb\n\xa7\xae\x86S\xbf\xa5\xe3\xd4oU\xe3\xd4o\x1e\xe88\xf5[\x02'\xa7S\x85S\xbf\x80S\x7f\x0bN\x87\x05\x9c\xfa\xad\x1bQ\xe1\x938\xf1\xfe9\xe8\x1b\xadv\xcfn\xb7\x0f}\xd9\xbc\xac\xba\xc9\xaa\xeev\x0d\x0d\x8e\x0e\x03@`\xde\xef6\xb2\x96\x0f\x9c\x96\x06\xed\x81\xd3\x9aq\x94Z\x1d\x81\x7f\xaf#\xf1\xef\xe9\xf8\x0b\x0e8p\x18\x994\xccU\x97w\x9a:\x9ft\x9a3Q\xe3\x938\xc9\xfe)\xe0\xd4\xeb\x16\xc8\xa5pjU\xe2\xd4o\x1e\x14pj\xe98u\xfb\x12\xa7\xbe\xec\xd3\x83V+\xc7\x89\xbdT\xe1\xd4o\x1fh8\xc9\\\x12\xa7n\xffi\x9c\x9a\x87m\xbb\xdb\xe9\x19\xcd^\xd7>p\xda\xfe\x81\xdd;4\x0e\xec^\x8f\xfd\xd37Z\x8e\xdd\xec\xb4\x0c\xc7h\x1d\xd8\xfd\x16g\xbb\x03\xfb\xc0i\x1a\xfc\xdf\x06\xfb\xdck\xa9\x97\x03\xbb\xdfm\x1b\x8e\xed\xb4\x9c\xa8\xd1\xeb\xdb\xedf\x93\xff\xb4Z\xacT\xaf/\x8a\x8aGU1/\xd5k\xdf8\xbe\xcc!\x1bm5\xe53o\xd7p\"VQ\xa7e\x88\x9f'\xd1\xea4;v\xf7\xf0\xc0h\xf7{\xf6\xc1A\xd7?\xb0\x0f\x04B\xec\x81C-\x00m\x1aY\xfb\x0d\x99\xa7{\xa8\x80\x93/\x07v\xbf\xd3n8\xb6\xd3k\xe9h\xb5z9V\x19N-\xa7S\x81\x93jR<\xb2\xfa$F\xad\xc3\xa6!(\xf4$F\xac\x83z\x87\x1d\xa3\xdd\xec\xdb\x9d^\x87wTVu7\xaf\x9a\xf5\x80lY `\xf0.U8K|\x05\"\x92\x9e\xb2\x7f\xb6b\xdfj \xec\x05\x91d/\xe5\xdd\xd8R\xdd\xe84\xa3B\xaf?\x89\x93\xec\x1d\xe3\xf0\xc0n\xf7Z\xbe\"\xa4\xe4\xba\"\x03p\x9cJ\x9d\xd8/vb$\xdb5\x04\x14\x02X#\x83\xb3\xd7\x96\xcfY\x87\xb6\x9c-(\xf5\x14J\xadV$\xea\xe4U\xb79JlWk\x1e\xb3\xe5\xc0\xf1\x8e\xcb\x01DB\xe1n\xd85Z)\xdf\xcaD!\xc1(1B2\xe1\xdbV> \xcb\xedLW-\xbb\xe5T\x99'\xf81\xa1\x98P\xd7\xf8\xe1\x07\xfe.c\xd8\xb8FHX}\x8dq\x14\xfb\xd7\xfc\x8b\x88\xfe\xc2M\xa2\\\xa3\xd1\xea\xf2\n\xc4\xe2\x9e\xce\xd4\x92`\x12F\x91\x9b\xed\x96\xf4\x05\xc6\xff\x19x-\xb6:\xab\x8c\xc3.m0\xd7\x96\x05\xcf\xb3\xfd\xd2)\xeb\xb4\xd3\x1d;m\x12\x13\xda\x98\x08\x93_c\x86\xa3\x1b~\xd4#\x0c\x8au\xfc\xd9*\x8b\xbfS|G\x1b(\n\xa7\xc45|L(N\x8e\xb2z\xb8\xa9\xa6!\x11S\xf8\xbaF\xdbY\xdc\xb11\xc9\x7f\xf4\xbd\x96\xc02\xeb\x90\xff\x15\xb0X\xd6S\x94>\xd9\xba+\xac\xb0\xac\xc1\xd5Q\x15\xc4F\xf1\x9b6\x82[\xb7n\x9b\x9b\xa0\xf0\x06\xc0\x07\xeeS\\\xd8\xd6\xbe\xe4$\x02\x82D`\xbd\xb9\xf6<\xe7\x1e\xdb\x19\x1d\xf4\xcd\x820h\x06g1\xb7>7\xaa\xb7rg\xdb\x8bZj\x9b\xf1a\x99`m\xab\xf1\x06{\xaa\x96c6x\xee(\x8f\x83\x7f\x8f\xcd\x07F\xdf\xaf\xd8{\x83\xedL \xf4\x99\xbf\x1e\xc7$]\xceq\x02_a\x8f\x98-\x0b~/l\xe3:\x16\xfc\"\x9e\xba\xfa-f]G\xa1\x9b\x00\xdc\xa2\x90\xe2\xc4\x12\xdd!\xb5\x1c\xf2\xc7,\xebn\x8f6\xcbO1\xc1 \xa2\xb1\xaa\xa1p\xe6/\xb5\x8eD\x9cTg1mE-\xc3\x0e\xe4H~\x8f-{\xbc$A\x84M\x0c\x1fd\xe0{\xf7A\xdcx\xb9\x0d\xe9\xec8\xc1\x01\xe6\xb7\x01Rw\xaf\xb9^\xaf\xad\x91\n0+\xe1\xc9\x14\xba&\xf5\x88\x9d\xb2N\xb0,;\xbdE\xd3)N\x06\xc3\x16|\x8bMj\x8d\xdca\x0b\xd2,\xbe\x7fF\x9a\xb7:i\x8a\xfa\xe0\xa1\xd8\xad\xb2\x9eBT\xc6\x906\xe6q\x80G\xaeq\x1c\x93\x1b\x9cp\xdd\xfd\xfb\x05&/?\x9c\x1a-\xdb1h\x9c\xbd\xb6m\xb6\xa1\xad\x8e;\xae\xdf\x83\x97\xe4\xfc\xc2F\x14\xaf\xf3\xfd\xf8\xcab\xc4\x10Wv\xf6\x1c~\xad\xf0=\x89\xee\xd93\xbf\xa3\x06\x1e\xd6\x00\"\xe2\xcf\xe2$u\xf7\x9c\xb5>B\xa5o\x91L\xfbK\xf8 \x85\x99\xd4j\x89\x1d/0A\x8bP\x86\xd1\xe7*\xa6\x9f9\xfb\xf4,\xf8+{\xe8u-\xf8#OiZ\xf0'\xec\xfd\x88\x85\x81\x02\xfce\x9b\xb9\x92\xf5\x90\x1fK\x8dQ\xcao\xcaxE\xd5m\xc0\xb1\xcd`\xe3\xfe5E\xc0\xef\xd8\xc3\x0c\xf9(\x0e0\x0c\xbdl\x9d\x19\xd7j1D|\xaci\xad\x9e\x87s,\xfc\xb7\xaa\xe3v;$\xf2\xc4\x9dk?\\\xfe\xc8\x04,N\xd4I;C\x9cBd\x89Cx?\x8e\xafC,3\xf2\xebaY>\xc2G\x86\xca]:\x9d/R\xe53\xc1w\x0b\xecS\x1c\x18\x8b\x8c@Q\xec\xcb\xbd=\xe3\x9a\x900B\xac\xc3\x89\xb9\x97yW+Vr\x1e\xa6\xdc\x12E\xb0#\xa24 \xc7K\x8a\x8d8Q\x1b|n\"\x917\x00\xea\xbc\xce\xa3m\xc8\xcbV\xf4e\x88t}\x83\x12#\x86\xa1G${B\xe4e<\n\xf8\xd6\x81\xaf\x98\x06\xc8\xe3\x96\xc3sD\x93\xf0\x0e\xc8\x19\x1cy\xe0\x08\xb0\xb5B\xc6\xca\xa0\x8e\xea\xa0\x9a\x9d\xc3\";\xc7\x8c\x9d\xe3jvN`l\xed\xc4\xc1\xdc\xabj\x08\xa9\xec\xc1b\xa7m\"+\xa9C%i&q2\xcfr\xf3\x11\xcbr\x89\xaa\xf8\x15\xe3\x13\xcc\xe3\x07\xe3 \xcbU\x94{\x895 \x83\xac\xa0\x8b9\x97$R\xd0\xfc\xab\xe5l\x8a\x9a\x8b\x19\x96\x9dZl\x80\x8d\x95\x98D\xf7\x06\xdb\x9f\x87>\x1aG\xdc\x1a\x9dK\xc8T\x8c\x1b\x01\xd7\"\\\xfc=\xb0V\x8f\x01U\xa8}g\x98r\xf9\x99\x99\xb0\x90\xd5\xaa\x0c\xd3j\xb5\xe1\xc9/)O\x1b9$\x9aL\xae\x00\x831\xbf\xa8,\x15\xd2Y\xca \x8f\x1b\xd7\x88\xd9\x03Q\x1e\xb2m\xe7\xd1*\xdae5s6bC\x95\xf2qZ\xe6\xb2\x92\x0c)\xb2\x99\x14\xf8e\xa3\x1fa\x06\n\\>\xdc\xb2\xb9\x00\x86^\xf5`\x81\xc8+\x0c\xaaPN\x06j\xf2\x080[\xa5~\xfex\x9a\xe91L\x94\x8d,>SX\xc3p$\xa6\x85\xbfB\x01\x81\"\x97V\x92\x04:\x01\x94\xa0\xfc\x9b\xe3\xec\xdb\xc1\x12\x0dW\xf6\xcc\xae\x95=!\x93\xf3\xc9i\xa9-\xee\xf6\x7f\xff\xeer?\x0f\x87w\xb9/\x9cS\xa4\x97\xfb\xc3\xdf/\xf7G\xf5\xef\xf7\xe5\xaeg\xb5*Lp\x8b\xe2*`\xf3\x82\x93\xf2\xb3\xb9\xe7yd\x90x\x94\xed\xaa\x07l\xea\x04u\xec\x82\xa1\x9cGm\xdb\xe0\x8b\x19c\xc4\xd3\x0bE\xc0sO~,|\xa2|\xdb\xc1\x9d\x0e\x0f\x00\xb7u\x9c/\xe8=p\xc1\x0bOV\xca\xbb6\xd1\xee\xa8\xd1|\xbb\xcc\xef..\xa8 \xd8>\x19\xf9\x14')\x80\xd8\xce\xd6\xf4\xecY-\xf9\xad\xa3\x1c\x9eZ\x8d\xaa\xe8\xc4r\xff\xc4* \xc5-4^\x9e/\xdeEq\xfe\xa8\x95N\xb2\xd2\x89t\xa8\x06\xc3j\x83<\xb6\xd2\xd6\x1c\x19d\xde\x96\x1d5>\xf6\x7fw.m\xe7YS\xf5\x0b\xb5\x06 \xc0~8G\x91\xc1\xe7\x94\xd4\xe0d\xa3\xca\xae\xce\x06\xd6\xb09\x92\x9a\x04\x17\xa8\x9d\x13\xbf\xc4V\xa7\xeb\xb5\x89\xed|7em\xf4c\x98\x81\x1eZ\xba{k\xb9\x85\xd2z\x99c\xce\xd2\x06\xa6X\xde\x14\xb7T\x03`\x1a\x80w<\x8c\xeby\x05\xecE\xb0\x81L\x16u\x88\x97\xf2\x0en\x00\x0c\x0b\xb8\xc0\x18\x01\xcb}\xba]U\xe69k\x97\x11\xa5\xd0B\xb1\x06\x85\xcd\x16\xd0_\x18\x92\xbf\n\xb0k\x04\x8932\xc5\x16\xd4\xbc_\x07j\x1dX\xd4\x0e\x0cG\xca\xe8\x96\x1b\xd3\x0dG0\xf4\x86\xa3\\\x11Ti\x15\x8d\xb3{*\x03j\x87\xc4\x8f\x96\x01NM\xb1\xb6\xb4\x06\"0,[\xcb\x86\xd9\x13QO\xdc\xa7\"\xbfp\xa2W\xa9m\xd9h\x16mU\xd6\xd7\xc8S\x88Haul\xbd\x14\xcbD\x95\x1e2rV\\vo-\x87\xad\xc7\xa0b\xbb8\x9b \xb3\x88k\xb5Q\x82M2\xa4\xa3\xa2\x9eu^Xj\xe7v\xad\x03\x9dv4\xb9\x97\xa3\x8a_X=\xca\xd0\x16\xbbZ\x0f\x00H\xf5\xcd\xa1\x88\xe3\x9b#\x80\xd7k]m\xcd\xef3g\xc6\xefB\x81\x83\x95\xc3\x02%}\xedY\x82'y\x9f\xe6\x97\xb6\xed\x19\x9dG\xc0\x92;>\xf3?\\\x1d\xc9i\xcc:\x0d\xafM\xcbr+\xbf\xe9AX\xab.\x1cgd\x10q:R\x8a\x12\xaa.\x8a\xef\x03\xcb\"\x1e\x00uuS/\x94\xb30\xef\x04~\xfa\xe1\xc7\xd1j\x05D\xd4T`\xd5\xe9\x11\x8eRlTz\xb2\xdd7\x07\xee\xefC\xd4\xf8:b\xff8\x8d\xc3\xba\xdd\x18=sW\x97\xfb\x97\xfb\x96\xa6)3)k5\xaf\xa9\x04\x14\xc8b\x88T\x00uD\xb4T\x11b\xb5\xf2\x9aaE\x12\xdbNZ\\\xd1=c\xb4s)\xe3\x18\x0e\x03\xf1\xf8]\xfa:\xd8\x07\xf5\xec\xe0\x81+]\xd9\x8c\x8b\xb3\xfbw\x8e\xe6\xd4^\x0c\xd9\x87e\x12\xb9`\x1f\xacG\x16\xa4[\x15\x1a;\xc3\x87-\xc8kLLl/\x93\xc8\x82\x01N\xfd$\x14V\xe0\xd8\xd6\xde\xd8\xcc\xbb\xce\xf4\xeaS\xea\x01\xe9_r\xff\xe5\x92\xce0\xa1\xa1\xe0\xb7}\xc1\x87\xf7\xb4Bw\xfa\xa0\xdcr\x058\xd2\xbcx\xc5\x0b\x9a\x82\xf5\x10\x8fV+\xdd\xe5\xffM\xd5\xe8\xcd\xefa\x86\x11\xc5I\x15\xf6{\x9cj\x03\\\xe8\xe4\xbb\x06\xb0j\xb5\xbd*\xe5\x8f\x11\x92\x07p\xd7PW%\x1b \x9e\x00w\xcf\x81,-\x0ep#\x157\xbb\xf4\xb4O\xc5$y\x06\xfc\x0e\xcd\xb1J\x92\x17\xbd\xb3,\xe2zO\xf0\x96\xaf\xfb\xf2\x1b>\xeas\x14Oc\xf5\xacn\x84\xab\xf7\x94_\xce\xc9\xb2R4\xfd1\x89\x97\x8b\xee+\xa8\xa6\x89e\xebE\xa3\xb9\xe6[\xc7`\xe9o;\xf2\xa1C2\xe2w_!][\xf0a-\xa3\xd2R\x8f\x98\xedC\xeb\x88\x98\xad\xc3\xb6\x05\xd9OG\xfct\xc5OO\xfc\x1c\x88\x9f\xbe\xf89d?m\xaeb6\xdbNS\xfc\xb4\xc4O[\xfct\xc4OW\xfc\xf4\xc4\xcf\x81\xf8\xe9\x8b\x1fQKS\xd4\xd2\x14\xb54[\x9a(\xbb\xab\x9e\"\x81\x1f\x85\xd7l\xc3C=Z\n\x1f%$\xfd\x98\xda\x11\"\xd3%\x9ab\x1e\xa5_\x92\x80\xf0\xe0\xe2\x85\x8f\x15\xc3\xe1\x8a\x87\x93\xbdJ\x01\x04~\xbd\x0e\\\xe0/\x16\xec\xf9;\xf6\x98\xceP\xc2\xde\xc46,\xbc\xc1\x0d\x1f\xb8\xf9\x9b\x0f\xa0\x0c67F\xe9\x0c\xc0\x9bp\x1e\xb9\xe0&\x9c\xcb\x91$!g\xb2od\xc11\xb5g\xe1t\xc6\x9d/\xf2\xed\x81\x1e\x0c\xff\x96V\x9ax\x17\xf4\x17\x10\xc1\x14\xcaK\xf9G\x89\xcd5t\x9e\x19{\xf2\x11\x86\x1e\x86\xbe\xc7\x0dU\x97\x9e\x03\x17\xfay\xda\xd2\xe3g\xa1'\x88b\xcb\x9ebz\x11\xce\xb1i\xa9\xec\x91\x17\xcbCs\x04S\x0b\xfa\xab\x95\x89\xbc\x94\x7f\xb3\xd6\xfa\x0d\x131\xbdUVE\xbd\xb0a\xe2F\x16\xef\xc6\x10\xdeo`\x9a\xdf\x01\x80\xf4\xb9\xe7\xacV\xf4E80\xfdZ\xcd\xf4#\x8c\x12V<^R\xd3W\xd0Xp\xe9\xe1GA\xb2\\\xf6\xea{\xa9h\x9c\x95^@jY0Z[\xda\xee\xe6\x9a\xd3\xd4\xc9\x13\xde\xcb\x04\x9d'\xec\x90\xa48\xa1\xaf\xf0$N\xb0 \xae\xd0\x0d\x12\xf2\x16\xc0L\x87\xff\x00\xa4\x8e\xfc^^\xc5\x01\xee\x83R\xf4\xef\x9b\xc3\x078\xbaL\x9fY\xc0\x1c\xb8\x97\x97\xf6j\xf8\xfb\xe5%\xb8L.\xc9\xc8z\x06\xcc\x81w\x99>s\xad\xfd\x10Fq|=\xc6\xb3\x90\x04|\xa4g\xbe\x8bv\x85f\xc1\xd0Xr\x01\x0f\xe0\x83\x82\xa8\n\x12>\x1d_\xde>{\xbaq>\x82^\xf3;y\x19\x95\xfe\xc86t\x85p\xfa\x9ake\xcenV\xe5\xceX\xac\x88d\x96\xd5J>(\xb7\xee\xce\xe6\xb1\xd4\xff\x9b\xe3y\x1c~\xc5|\xbb\xcf\x0f\xfa\x0d\x1f\x11\xa1\x0c\x19c\xa1\x0f\xc1\x81Acc\x8e\xe9,\x0eR\xb6_\xf9\x8a\x93\xd8\xc8\xd8*?\xc8\xfaCV\x16\xfc\x01\xea\x14\x86\x9el>[z\x0d\x93\x91\xf7\x9a\xee\xee\xb4\x80XPF\xd2\xd7\xc6\x80\x92\xb0\xb30e\xf5y\xdek.\xa7\xe4k\x98\xdfN\x907\xec\x87\xc9h\xbd\xb6\xd6\xa6\x162\xa6\x8a\xa8SL\xb7\x91t+vSL\xff\x16n%?\x07\x7f\x13\xb3]\xfbvK\xb7&\xc6\x143NN\xa11\x8d\xa9\x01\xear\x0d\xae\xf8\xad\x0e\x8c\x90\xa4\x14\xa3\x00\x88\xd9\xec\x13\xf5\xc0\x0c\xa53\x7f\x86\xc8\x14\x03xA=\x82o\xf5\xd5y\xc6\xd38\x93]\xfc\xb6\x88\xb8\x9f;\x0f\xa9.\"\xb1\xfd\x07K\xc2 \xffb~\xe2\xfeB\x97I\x82 =\x0d,y\xa9Wfa\x0d\x19\xbfb\x9b\xbb|y=\x0f\x19\xdc\"\xc38$\x81i\x15\xcd\x8c6|L\xe46F\x10dM\x80\xad\xfd\x81\x07\x15\xba\xb0\x8d=\x06Jg\xc53~\x17\x80\xa2\xe3\x88&\xf4c2 \xa7\xcb\xdc\x91\x04\xd4`\xe1^\x11\xdf\xc4\xc9iPu\xe6\x8eEx(Q\xa9\xee\xf3m9f\"j\\e\x92\xa0\x93\xccFAp\x16\xa6\x14\x13\x9cp\xe2Z\xdb/\x90R;\xc1\xf3\xf8\x06\x17\xf3\xaf\x8b\x0d3J\xeb\xfdGq\xad&\x89\x82\x82\x80\xf7LV\xbe\xc0'Y\xef\xc3\xbd\xa6U\xac\x93\xad\"\xe3\x14o\xa9V\x00\xb5K\xcd\xa5j\xa5\x96\xbfd!Qa(\xc0\x1a\x13\x96l\xb8V\xc3{\x9e\xa0`\xc6\",\xdf@\x023\x0bS\x1a'\xf7\xaanq\x0fI\xdcR\x01\xb0j\x03\xaa\xf4@\xdf\x01k\xe8\x8c\x84\xb3\xb4\xac\xc7MlY\xaeY\xaaz\xb1Lg\xff@\xbd9YL\xee-K\x93GR0`\xcb\x1c\xfe,z\x14\xfe\xcc\xb6<\xe3xI|<\x82\x85\x91\"1U7u\xf8\xf6\x98K\xfe+\xb6\xaceK\xd7\x97t\xab\x0d\x11\x15\xb7\xe9\x17|\xe4\x9e\xa3\x85tO\x90\xe0\x9b\x0b\x9c\xcc=\x00r#\xa3\xbc\xdfPP\x1c\n\xaa\x12;\xe5\xf6\x1e\xac\xaa+*/h\xea\\\xc4\xb7X\xd5%\xc57i\xe1Rh\x89m\x02\xb6\x8c\xa1\xa3\xacx\x85\xeb\x1b\xb6Bl4yl\x17\xb5G\xe0\xae\x8f\x88\xbd$s\x94\\\x9br\x97\xaa\x9aN\xb8i\xd6Q~\x8d\xd3\x81\x89\x87\x8f\xc8\xf3Dw\xde&\x16\x9d^2$\xa3\xbc\xf5\x19J\xcdXZRft\x88\x15\x1db\xab\xfb~\x95WT\xccn\x0e//\xd3\xcb\xcbO\xa3g\x03\xeb\x85\xfe\xf2|\xff\xf2\xb2\xf5b\xf5d!s\xe0\xee\xbfX]^\x92\x87\x16\\[\x96%\xd4\x1b\x1f\xb7\x0d\xf6\x8a\xa1#\xf5\x1c\x1e\x96~O\xa4wgo8*$|\\\x16L\xd3\xa0\x88g\xa9h\xd7\x14'\x17J\x1c_\xc4\x8b\xb7\xa2\x98G\xed\x14\xdd`\xf9\xc6\x15\x97n\xcb\x93g\x05\xa5/\xb0\xa2<\xcb\xb6\x91h\xf3#\x85o\xc8\x1e\xb0q\x1e'\xe14$(z\x9b#\x94\xe1\xb1.\xe0\xfa\x9a\xcc\x10\xf1\xb1\xe2\xa92\x8fI\xd7;\x9b\xd5y\x8fT\xa2\x92\xc5*\xe8\x91\x8c\xd6c\xa0\xa8d\xaf\xdc5\xb9\x88V\xce\xb5\xb2\xe5P\xb5\xf1!\xc3\xe9#\x9e\xbe\xbe[\x98\x1fh~\xd6\xae\xf1\xd9\xfe\x14R\x0b\x82\xe9<\x04V\xa6\xab\x14\xf6\x8c\x17\xf8Nn\xc4\xde\npJ\xb3\xb74\xe8\x90\xd6PZS\xe0\xf7\xef\xbe\x1b\xb0\xd1\xc1\x96\xe9`\x0er\x97\x9f\xe4E\xa3Y\xf2\xd2I,\x17\x97\x16T9\xc3x\xc5\x9d@!\x8c\x8f\xb0L-\xb0\xb3\x05\xb1\x875\x07\x8f\xdf\x99\x97A\xdd:\xda\x9f\x16\xacws\xf2\x88\x05\xb6=I\xe2\xf9\xf1\x0c%\xc7q\x80\xf3\xe8\xb8\x146\x1d>Sh\x15\xa2\xf9\x82\xd5\x06j@\x85\x03z\x08\x037\x19$\\\x8b\xca\xcd1\xddL')\x13 \xd7\xbbb\xe1~\xda\xa5\xd2 n8Z\xe7w\xb6\xd5qI\\$\xc4$b;[\xf2V\x0dV]\x92V9\xae\x18\x8e\x8eJ\xaeI\x9f\x9e\xd9\xf2\xa3\x1a\xfe\xa4\xae\x0e\x08\xf6,\x01`\xc6bLZ\xd9\xf2\x9e\x96&qJ\x91?S\xd9Or\xc5mZ1\x89U\xcc\x0b:\x0fe,$\x8ea\xf2N\x186.\xf7//\x7f\xff\xfeY}`\x9b\xd6jx9zX\x8fX\xa7\\^~_\x03l)\"\xb9\xa2\x0c}\x91U\xb8'V\x93H\xc2P\xccZOJxbA0\x0f\xa7\xc0\xe2\x87\xab\x10\xb1\x7fR/\x11\x91\xbb\xb1\x05#\xcf9J\x8f\xac\x07u^\xaaqT\x04S\xb1\xaa\xb6X\xb6\xc4\x8ePJO\xd9;\xa7\xb5\xef\xd1a:l\x8eV\xabt\xd8\xe2\xffvG#\xb8\xf4\xd2a\x9b\xbf\xf5Fp\xe1\xa5\xc3\xce\xe8\xc8\xaf\xd5\x90\xa8=\x07\xcd\xf5sW\x13\xdc\n7U\xae\xda]\xdf.\xbc\x8b\xaf\xeen\xba\x9dju\xcf;j.-\x0b\xca\x8a-\xf8\xa0\x1c\x13\xb8\x8b\xb5\xb5\xb6tz\xac\xab\xe8\xa0\xed\x18&\x8c~\x81\xe7\x1c\x05\xcfC%\x08\x02%\x08f^8\x0cFG\xb3Zm\"=Z\x17:vfY\x10\x0d\x83Q\xf6\x99\xbdd\xf2t\"\x8d\xf9\xb3\xc5\xdc;*\x85\xfd\x9e\x12\xf2\x0f\xeb\\\xc8C\xe2\xed\x9b\xc3\xcb\xdb\xc6\xa8n]\xa6\xcf\xbc\xcb\xf4\x999p\x1f\xcc\xe1\xef\xebQ}`\xadW\xc0\x1c\xfe\x0e\xd8#\xb0\xf6\xa7\xe1\x1c&\xde\xc3\xfaH\xde\x14\xe3Wy$\xc6\xd6\x91\x15NL:l\x8f\xacdH\x87\xcd\xd1\xc8c/\xf9a\xe5\xb05R\xf3\x86\x1c\xe44\xb9\x7f\x88=\xcd\xc1&\xcf#\x8f\x8b\xb1\xf5\xb0V\x15\xc5\n9a\x17\x7f\xf6\xc8\xaaU\xec\x04Xm\x89W\xbe\xbf\xc0\xbeAl\xa7\x0b\xec\xf3\xd8=\xca\x85bQ\x12\xaa\xaf\xe5SC]2h\x9f2Sn\xbebI\xeb\xfbs\xeb\x88\xbeh4\xd5NJ\xaf}\xb3\xac\xb6\x8a\xa1j\x1f\x13H?\x8fg!\xb9\x16E\xa6\x98\x9eh\x89f)\xe3\x9b0\x127z\xca\x99\xd5\x87\\\x99\xa6\x8b\xabR\xad:MY\x7f\xe5\x84\xe44\xf9\x9cD\x96.\x07\x8b\x9f\xf8\x19y\xae\xe5y\x15\xc5\xe3\xec\xe5\xf3\xc73\xfdY\xde\xa1\x13]\xf3\xf9\xe3\x99\xd2*21\xc4\xca\x99\xc3\x92Eq\xb99\xe1G\xa4e\x8d\xe0\x03\xc3\xc3\x05\xd2\xe0\x8f\xaf\x98\xae\xd2\x98\x80u\xb6Z\xdc\xde\xac\xb9\xa1\x0c\xab \\\x89&{\xdb\x89\x02\xe4M6[\x00 \xf6\x9f\xe7\xe55\xb5\x9c\x0c\x05\x93\xe5\x86b|\x8fSL\xb2S\xec/\x93\x90\xdesw\x8c\x98\xfbD\x14\xfb\xb0T$\x14$:f\x9f\xcbf\xee\xf2\xd4+\xf4\xa8\xcd&\xd7\x89I\x86\xc9\x88-?\xf00\x19\xadVC\xeeI>\xb4\nj\xd6\x1d\xa4`hA\xbebU\x81\x19O\x03wJ\xeb L\xfdx\x81S\x17\xad\xad\xa3\xa2U\xdd;66\x95\x0b=\x85\x96!\xd00\x12<\xc1 &>\x0e\\\xe1\xce\xd76>]\x87\xfcD\x17\xf0\x95\xf3\xf6\x03r\xcd}!\xbf\xb4y\xb2U,\x88\x85?\x0c\xa5x\x88\x17X\x04v\xcd7\xaf\xdc\x11\xa1\x88\x98\x89<\xac\xe8e\x1d\xb1%FH?\x8a\x17%4S\xcf\x81Q\x81\xfe\xc8:J\x9fGJ\x90\xa7\xf5\xba\xa5\xf2\xfa^4L\xd9|\x86\x86>\x9b\xc9\x1c8)\x94\\f\x18\x12j\x1d-\x9eOT%\x0b5\x1b\x04\xded\xb8\x18\xc1\x99\xb7\x1c\x06#8\xe7\xe3d\xce\xf8i\xe7\x1e\x9bI\xeb\x0d\xee\n\xc6\x87\xdcw\x16N\xdc_\xf2\xcbb\xc3\x04R\xe8\xc3`d\xf1(f?\xe3d\xec\x06\x90\x95\xc9\xcf\xf8\xdd\xa5\x9d\x19E\xa6\x8c}\xf8w\xe1r\x93}\x94\xe7\xfbke\xc8\x05C\xb6\xe4:*Q\\\xccXsk]%\x91\xa8\xf0\xf4Z\xd6\x05 \x83U\x1cx{\x85\xd7mZ\xd0W\xd8&%\xb5\xa7*\x02\xb2\x13\xc3\xadE'\xa5\xa2\x02&]a\n\xdf<\xc5h\xb1\xb6\x12\x8e\xb9\x1d\x1cWLk\xeb\xf003ro$Z\xe0\xf6q\x05\x8f\x89j6\xcc\x9d\xa8y7T/\xb2Q\xc2\xaa\x9c\xb38%\x98\x18\xe7\xb4\xd8X\xee\xeb\x84*\xa9\x04\x18\x0ey\x01\xedL\x90\x15T\xf1h\x04,Gj\xfa\xd3\xba\"\x1c\x96mk\xa4\xe4\xa0!\x8d\xb0\x17\x8a\xdf\xd5j)\xb1\x92$\xb4j\xb5_\xf2+\xb7\xc5Oy\x8f\xe9k\x84\xb0\xbc\xee\xc8\x19\x85\xb5r\xbf\xc0\xabU\xe5.\x9e\xdb^\xb2\xefy ~\xf6\xa6\xed\xe7\x9dR\xd0\xe9\x84ZG4\xdf\x88R%q\xd8\xe6\x95\xb2\xcdkB\x87 \x9f%\xf2\x16\xd8\x14\"\xebW\xab2\x80\xc8=X\x9b\xa1d\x16a\\\xe6\x85\xf2A\xcaWi\x0c\xe4\xed\xed\x85\xd9\x8b<\xd4 \xcb\xb9\x17\xf2\x1f.U$\x9fp\xbb#\x96.\x9e\x14\xa1\x94/~^Q\xfe*\xf9V\x1c\xe3{\xa1z\x82\x19\xd3%\x04E'\xb1\x9f\xf2\x1a\xf3W\x91\x81\xcdW4A!\xdf\xad\xd1\x0c\x13i\x0fu\xc1H\x9fuB\xe1\xd3\x1b\x81\xab\x86\xb7\x1a\xc3\x1f\x92p\x1e\x16\xef+WF\xa4\x10\x1be\xd9qy\xc8hl\xc7\x8c\x89\x95E\xb0\x88:O\xeeY\x8a\x99_w\xf3\xe8@\xeb\xfb\xfc\x12\xe2\xa0\xbcU\xd4?\xaa]\xa3\xabW]y\xbbQ\\\x9d\xdc\xf3\xc3&\x90\xd1\xa8T\xc5b5\x97?\xca\xb3kY\x94\xa5lN\xf0Z\x0e-9\x9f\xcb\xf9w\xb9\x8c\xd1\xae\xf8h\xc5\xb2\x8f\xa6\x9e\xd7\x1bnf\x19\xa9\x15y\xb9\xb9\xac,[M\xe9\xe5\xc8rni1-2+|\xbd\xfb\x1f\x8d\x9e\"\xb3\xf2\xc2\xfcz\x894\xfe\xcf&\x8d\x93\x90\xadW\xe7!A4N\xd8\xaa\xc0\xda\\y\x97\xd6\xeb\xc5\xf0Y\xe2\x90Y-\xba\xf9D\xe3\x95/\x05\xd0|\xf2 \xf9\xae&\xf5\x88\xbe\x97 !\xd2\xf8\x9cW\xb4\x0f\xea \x13\xc9l]\xceg{\xabV\xdb\x93]9(,\xcd\xc5WWu\xb3/\x87\x11\xd9}\x9f\x9dZ\xf0\x81\x17v#\x88\x18@\xeep\xe7\xb2(\xdb:=p\xb8\xa5\xb0\x86|&\xce\x02<\x8d\xd6V5\x8a\x10eC9?\x13\xd4\xb6j\xa4\xb0UK-\xe8gf\x13\x19\x0fTE \x91\x07Sf\xb6MbD\xf9\x84)\xd4v\xbd\x85\x18\x8e\x0ed{R\x0e\x17W1=rp\x18\x8bl\x03l\xc6\x96\x1bg\x02\x0d\x05\x81)\xde\xac\xf5\xdaL,(\x96w\x93$\x9e\x9b\xa1\xb0cLM\xcb\x92\x9a\x05]d\xa5\x05I\xa1q\xe9\x86\\\x13\xeb\xc2\x0d\xe9u\x93\xc7\xde\xc9\x9b3\xafK4?b\xdd\xfd:\xa7\xfc\xbdw\xbfy\x7f1S\x9a\xbf._\xaa\x84\x89\x96FEZ&\xfb\x9e;\xb5Z\xf2\xdc\x19\xc8\x93\xff\xe2\xb5G\x99\xd9%\xcf\x9dA\xd3e\xd9\x1aM\x974\xd8\xe6O\xdf\xbby\xf7\x9b~q\x84\xf8\x12s\x05d\xfb\x18\xee\x8b\x04es\x05\xb1\xc7\xf7L\xe4\xc6\x16\x8ca\xa2d+W\x84J\xd0\x90\xd2\x18A\xb4\xden\xc9Y\xa1\xc3\xd4t[\x7fA\x8dYP\x9c\xe9\xda\xcc\xfc\xa0\xf0k\xc1ITQ\x80\xacVx(n\x88\xe5i`\xc4\xbb\xf53\xf5\xb8v\xd9\x95\xbe\x1b\x95\x0f\x03(}-\xf0X\xf6\xc2U\x82\xca\xc1/\xfa\xe7\xdf\x9d5\x94\x8e\x04\x1e\xabB^\xea\xdfZ\xc7\x1a\xbezB/+\xbbO\xdd\x02\xd2\xd4\xa3Bd\xb2U\xbcG\xf9\xcfj\x05\xf8\x16V.\x93\xc5\xf1\x00\xffa\x9b\x0e\xde\xe9r\xfd\xe3EvH\x94\x9eCl\x12\xbc\xbd\xbd({\x91\x1b\xc1H\xe99\x97\x1e\x00G{~\xad\xc6\xca\xb1\x7f\xa5\xa3\x96Z\xcd\\\x16\x06H\xf6\xc5\x1a:#\xc8j\x90\xef\xc3\xe5H+7\\\x8e\xb2\xa5\x03\x87B*y\x19G\xbea{\"\x9f\xcbD\x86\xbeR\xd2\xe4\xca\xc6\xc2\x8e0K\x1eh\xf5\x94\xb5\x91n!gQY\x17\xa9'\xb9j\x965(\x0d\xdeR\xd6[v\xc7\xe3-\xddH\xb8\xf2\x91\x19\xd8\xa3'\x93\\If\xb5\xbe\x15\x1f\xd5\xf9s\xe8\xa9\xf0\x9f\xb1\xf7\x99\xca\xf52\x19\xe9!@c\xb5\xa9\x8cEYK[\x82\x87\x83P2\x92\xa6z\x8b\x943!\xb9\xf0\x0d%=\x94\xeb\x90<\xe0h\x1e\xb1tK\xdbZ\xd4RY\xba\x10\x9ct\xb5J\xddB\xd5\x8co\x94'#\xd9W\x99\xbe\xb3\xd0U*u\xb0\xb7W\xec\xab,\\\xaf\x9e\xab\xa8\xb5\xdfM5\x1f\xed\xa8\x90\xff?rd\xf3=7o?\xb0\xe0\x17\xea=\xac\xe1\x9fOJ\n\x0e\xf6\x9cq'\x91fzei!\xee\x0e\xc6\xf2\xe2\xa0\xe8\x06\x11\xa8\xc3\x8b\xd5\xd3\xe6\x88+\x98\x15\xc08SF\xf3\x9d\x97\xde\x15Y\xe2\xe7$\xd2\xaenK\xdf\xab\x96\x89\xd5\x014?#(Ud\x95Nj\nG\xe4w\x8d\xdb\xdb\xdb\x06c\xfb\xc62\x890\xf1\xe3\x80\x07\x99\xe6\xb6\xb6\x19f\x15\xe1\xb5\xf5\x8f\xa6F\x83\xe2t\xbd\xe9\xbe\xf1a\xad\x16\xf1\xb9#\xb8\xcd[l2\xfc\x94P\xb9\xcd\xd0\x0d6\x84\x12Q\xf8]\xd1\xe3\xbb\x16N\xac\xb7\xfbx\x13+c~\x817\xf6\xe8\x90\x8c\xb8 \x0c=)\x08 \xca\xc7T8\x90\xcegB\x98zq6\x06#\xaf0X\x95\xb3\x1e\xb4\xc5_\x0d\x81\xd1S~\xa1Bj&\x90@\xe1\xf4\xe91OM*\xe3j\xbb\xf3$\x83{.\"O\xf8\xb49%~\x9c$\xd8\xa7ls\xb1$\xb9\x16\x99w|\xe6<\x8cQ\x19 \xd76\xba\x0b\xbc\xb5\xd6\xcf0\xa9\x16\x01SL_\xeb\xccWe\x96Y\xc9\xd6\x03\xf3\x8b\x94\x9b\xe5/\xa3\xd5j\xfb7o\x82\xb9?\x89\xaa\x8f<`6\xa9\xf2ehP\x9b\xfbl\xde\xc8!\xef[R;\x0f\xf9$]\x01\xdb \xe6\xc3.gR\"6:{\xdc\xa3c\xe6\xbb\x97\x1b2\xc9\x17\xcd\x9a\x89h\xa6L*\xabtl\xcc\xe4\xd0\x16\xec,7o\x9d\x0fu9\x9aT\x00\xb3\xb7;\x1c>\xf3\x9a\xc5\x9aE\xa9\xabd|U\xbe\x05&\x85\x85B\"\x1fj\xb5l\xc9\xa0\x92 \x93,\xd9\x92\xb8*\x82l\\\x9d\x9e\x9f\x99$j\xfaO\xd5,*KV\xad\xf1\xb5\xfdV\xc2\xf6[\xd8\xc2\xf6\x0c\xa5\xefoIv\xefO\\\xcb\x19&#\x8f\x9ax\x98\x8c`\x02\xb1f\x1c\xbe6\xf3\x06a\x95\xc7G\x86\xe3\x9f\xf2\xee8Ll5\x08X\xa7\xb8\x9b@\x97`\xce4\xe9Y-\xf2j+\xb6\xd3\x19\x8a\xe2\xdb\x13>Cd\xc5\xadu\xa9\x11\x97\xbbL\x94bV\xba\xe5\xc62\x86>w\n]=\xbe\n\xf9\xaa)\x97^\x87\x8b\x8f\xf2h\xcd\xdd\xecs\xc8\xbe\xbf\x8b\x89\xea\xa9\x8a,J%X\xd9\x9f\xac\xf8\x17u:\xe7\xeem\x96^g\xfa;\xc5M\xfa\xc2D\xe8\x05\x1eJ\xd4\xd4z\xdbs\x98\x8c.\x978J\x9e\xc7z8<\xa9\x00\x8cY\xbf#\xef{j\x0b\x9f\x16f\xa8\x190\x10i\xe1g\x1d\xe9\xd5mhC*\xa67T\xab\xa1Z\xcdD\xc3G\x0b\x8e\xd4Y\xbfUX\xfc\xa6C\x99<\xf2\xca\xcc\x81\xd6\xf9&\x02R\x8d\x1b4\x0d\x95\"\x9a\xb9#\xc3\xe5\xb8S5V3\xc4\xb75\xa7$\xc8\xcfO.~8\x99!:\xda.;\xc4f\x94\xad\xdeO\x83;\xcf\x81\xc9\xe3\x11\x80k53\xf4(Dl\xedU8\xbf\xdb\x12\xb3V(\xe2\xc2!\x1eAa\x93\xc9\x0f\x1d\x8e\xf8\xedHi\x90~\x84\x86d4`\xffx\xbbkN\x86ddAj\xb9\xbc\x18\xe5*PO\xed\x9bx,C\x86cZ6\x96.\xae,\xe2\xec\x10s\x18k^\xa6\x12\x9cb\xfas\x98\xb2Y\xdc\x14\x1e\xe5\xdfr\xa3\x19H`(c\xcaW\x0cn\xb5/\xdff\xcb\xa2H\x8c3\xc2=v\x11Z\x94\xd9~\x0b\xba\x88\xe7p\xb3\x9d\xd1\xd3\xb7\x9dw\x00c\x86R!8v\x85\xe4178{8\x1b\x0fli\xa2\xdc \xec\n\xe8\x0e[\x8d\x02\x05\xfe\xc2~C\xf5\xa1\xdaql-8\xadl\xb8\xb0Q\xf9\x95\x96\x0e\xcd\xb3uli\xfb\xa1o*\x92j\x9b!M\x1f\x91\x1f\xc8\x167\x06\xda\x94\x97\xeb!xa\xf9\xca\xa5\xd9\xcfbQ \x93\xe0\x9e\x88\xb1 \x7f|j)\xa2\x0c.\x85v'\xb7\xb6\xccv\x87*\x92kh\x97\x02N\xafV\x1bIC:*\xd9g&\xba}\xa6Ro\xf8\xdc\xbdg\x8e\x18z\x121\x94#\xd6\x84\xa1\xa5\x11\x85\x9f\x19\xab\xe8\x8b\xa3\x81\x9c\xdf\xe4&\xaf\xf8qs\xa7\xb7\xa1:\xb1\xdcR\x05\xd5\xbd\xa6\xd7\x01\xb2sI&{1\xe5*\xff#\xa1[G\x8a\xac\xb9k\xc4l/\xaf\x08\xae\x0b\xb2\xb4\xc2\xcd\xb7X<\x14<\xfe\xa8\xa3\xf4\x9d\x85*\xb1\xe4\xb1;]\xb3\xfd\x03\xe4\x81+\xfe\x0f\xeb\nr\x85\xe8O\x9aB\x14\xc8\xb0\xfa<\xfc\x00w6S\xab \x1f\x828\xa5\xaf\xe2\xe0\xfeX\xf0\x10W\x89\xfeB\xe1\x7f(\xfc7\x85\xbfQ\x88 \xa4\x04\x12\x02\x13\x02c\x02\x11\x81)\x81\x11\x81>\x81K\x02\x17\x04N\x08\x0c\x08\x9c\x11o\xaf \xe7\xe4\xe9\xc5=\x9f|\x8er\xfdV\xd1\xbe4\xbb\xfa\xc0\xdf2\xbb\xdbO\x0b\xec\xab\xcd@\x85 \xaa\x07\xb2\x9c@;`\xce\x06l\x82Qp\xef\xed9\xfa\xe4\x9fY\xa7\xe6\xfd'\x13r\xdb\xd4\x82%C\xe1&\xc4\xa6\x16Q\x1c0yU6{\xb4\xc2f\xaf`\nH7L\x01\x95\x19\xb3G\xb3\xc7\x9d\xcaet8\x0d<\xaa\xbf) \xe9\x8c\xe1%\xad\xa9\xd5\xee\xea\x18E\xd1\x18\xf9\xd7^\xacR\xbe\xe0\xf1,\x8e\xafy\x1b\xd9[\xbe0\xf3\xd8z\xc8R\xa2\x80I;\xad)\xf6\xaa\x91\xa7V\x0b\xb7^\x1a\xe9:\xd6j\x05\x9e\x93\xd8\x90U\xbd\x00e\x98\x94\xd8\x92\x86\xf7\x1e[1\xca\xe7*\xeb\xa9\xe2\xcd\xdfs\xcaC:e\x87\xc5\xd2\xc8\xdb\x9bS\x93{y\x94\xef\xdc\x05@n\x0d\xce\xebU\xe2.\x0ct+(\x0d\xcdA\xcet\xfb\xa0^\xf8\xa4\xfb\xae%v\x18\x14l\xd9\\\xfd\x05>\x82\x9c\xbc\xcc\xf3\x8f`\x9b\xa9\xdb\x1eA:kO#\xc2\x8e\xeaV\xba\xa3\xbaus\xb9XX-z{N\xd9\x8d\xc6\x93%\x9a\xc5\x12\xdf*\xa4\x8b\xd71Y\xeaFY1\xb2\xe5\x8eP\xbc('\xd4\xa5\xc3n?\x8e\"\xb4(:\x8f\xd9i\xe1\xab \xe2\xc7\xd7\x9c\x05\x89\xa8\xcbo\xa1\xfe\xf8\x95\xea\xd7\x8d*\x84\xa8^\xa4 N\xad]\x17\xa4\x8f{2\xd2\xbc2n\xe0q\x93y_*\xc24,\xb9s\x1c\xc9\xf3\x97\xcaL\x99\x1fHq\x05h\x97\x8c\xb5\xda\xde\x8c\xd4j&\x9b\xa3\x1cX4\xa6,g6\xc2\xd4\xc8e\xaam|N\xb1Q\x02O\xb9\xa0\xfa\xc1*\xdc\xb6-\xf4E9E-\xd1\xb8\x96\xa1V\xa3v\xb6\xc5P\x8b\x18\x1e\xf3\x7f\x1e\x12SyJ+\xf4\x8e-\xa7oQ\xe64\xb8\xb3\x8e\n\xa1\x06K\x8et\xb3(T\xc4\x82\xc3\x076\xdb\xbb\xd9\x02\x00\xf2h\x07\xae\xd2W\x03\x98\xc6\xcb\xc4\xc7.\x10ac\x8a\xcb\x01\x97\xae\xd9\x82CTG\xb41\xfd\x8fpK~\x1f\xe71f\x81\x15[\x8a\xa2\x82~8\xd2\xce\xbf\x84S\x04\xe5T\x99_\xf7T\"\xb2b\xb3N\xad\x07\xea\x15\xd5_\xd4\x82\xc9P\x1c\x96\xd6\xc1\x1fL\xb2\x87d\xc4$\x93eA\x1eEkc\xb3\xa7)i7\xeb\xda\xdb\xac\x8c-0\xf3\x80Z\xeb\xa7\x86l\xf1\x1eSu\x0e\xf5\xf5\xf1 \x82\xad\x8c\xb3\x86\x98\xe4\x92\x93\x10\xce\xa5@\xae\x8c,\xf0\xdf6\x8b\xd7\x19\x93\xfd\xd2n\xd6-\x94\xd8\xb4\xa0\x1d\x04\xd4\xa4\x96K\xff\x11\xdeI\xd4\xbe\xea \xd6\xd9kV\x9d\xb7T\n\xc6l\xef\xc6\xe6\xd9\xed;\xfaB$\xaf\xd5\xca\xccbg\xb1w*\xe2qQo\xcf)\xc6\xfc2\x89\x87\xad\xd5*b\xc3h\xb5\xfa\x8d\x8f&\xe1\\`mm\x0f\xf0\xc3:\xedG\xad\xd3\x08\xef\xb6-\x80\x0f\xf9\xbeB\xeb\xc9\x7f\x84\xd0\xbe\\\x87=J\xe8\x1di\x9c\xd5\xf5\xf4Z\xe6\xa4\xc4\xaa[*\x1a\xd2\xd16>\xde\x15\xfb\x1d6h|\xff\xb0\xc3\xee\xacZ3\xf3\x17\n\xfe\x8d\x1d\xe1\xce\xda\x9cr\xc1|\xad\xf5\xcdE\x8b\xbb\xd0\xeab\x7f\xd0\x0d\xa2jk\x9eo*YXe|SI}\xc6\xf9\xa6\x82\x9a\xb8\xf9\xa6r\xda\xe8\xd1\xb4dS\xa2\xc2\x06\xff\x87\xaeV\xe6\x7f\xe8na\x83e$^\x1fE\xbe\xd9t\x9c\x7f\x19\x0d\x03@`\x1d\x89h\xc6A\x10\x92\xa9k8,-\x0br\\\n\xf6\xfb7j\xd8\x1a\xa2\x97\xce\xf0\x1c\xdbI8\x9d\xd1\x0f\x88\xe0\xc8\xe6\x8d\xac\x1f\xcf\x9e.\x90\x1f\x92\xa9-/a\xbf\x8d\x93\xf0kL(\x8a\xca\xe5n\xa4M\xab\x1f\xcf\x17\xc8\xa7\\\x9f\xce\xabP\"\xe7\x0fl\x829\x0e\xc2\xe5\x1c\xc0=\xc72\x7fa\x14\xfdeG\x8anF7\xd6\xe8\xa0\xc2Ag\xd4\xdb17_'\x0c\x1c\x97\x94\xb1\xfc\x19'|\xde\xb4\xea`qg\x80\xfaF\x86\x9c\x0c,\x07\xbf=\x00\xef\x15\xaf\xd8\x88\xd2$\xad8h\x90\x94\x10\x96\n\xc3\x93p\xe4a;\x0c\xb8a\xae\xf9\x1b\xa3\xc6o;RC\xc7EFjf\xc957B)mpo!*`\xf6<$\x0d\x15\x94[q\xd3\xcd\xcc\xa8\x1b\xcd\xc5\x9d\xa5\x82h\xf3\xc2\xc6\x8b'+\x08IHC\x14\xe9\xc5\x00\x04\xd9OF\xff\xff\xb5\xf0=16\xb6\xb0\xc1\xda\x82e\xe6\xfd7\xeb\xae\x7f\xef\xd8]\xfa\x90-3\xea\xc6\x17k+\x8cK\x12\xe0$\n \x0e\x06\xaap\x9c\xf2\xdb>\xae\xa1\xa2\xd6JJ3Z\x93\x98\x9a\x82^\xf1\xa4\xc1\x84\x9c\xe5\xa2 \xc5\x89\"\x9c^\x1c\x8d\xd38Z\xca\x98\xee\xec\xbfqLi6Y\x94G\x10f\xfd\x88w\xec\xc7\x1d\x05\xfa\xb7\x8b\xff\xdd\x91Q\xc2@N O\xa2\xcc'\x06n\x823f\xbck\xde\x10\xcb$<\xce\xc1\x8e8o\xe3\x9f\x0c\xcd\xed\x19v\xe7\xa0\x8d\xfe\xb5\xe0]6\xd4b\x06n\xbc#\xb8\x99,\x98D\xf8\xeeH\x1b\x1eY'\x14D]\xc5p\xfa\x1b5X\x9b\xfc\x950\xe0\x93\x1d\x817x\x9b\x0d\x119\x99KD?\x8e\x96sR\xe6\xabGsY\xac\xb3o\x89\xf7\xd0tA\xd3\xeew\x0f\x9a\x1d<\x07\xb0\xc5\xde\xd8K\x9b\xbd\xb5\xd9[\xeb\x00\xcf\xc1\x1a^\x93*\x13\xb6[l\"\x06;\xda\x11\xf6ILhc\x82\xe6at\x9fs7O\xbc\x95\xd3b!1\x0d\xbf\xe2<\x89M'\xd9\xf4Y\xea\x8f\x7f\xbe\xe2'\xf8\x92\xde/\xe2i\x82\x16\xb3\xfb\xcc\xfb\x9d\xcd\xaa~\xc3axB\xf6l+\xfc\x85\xc3\xb0f=3\xc4\xa3o\xae\x82\xe1\xf1VVa\xad\xe1{>8fM3e]\x94\xee\xd8E\x953D\xc5\x08x2\x9fe\xc1kb6\x1f\xa7\x04/\x9d\xda\x8b$\x9c\xa3\xe4\xde\x9e\xa3\x90\xac-x\x81M\xf0\xb6 ,\x0b\xbe\x168\xb4\xcc\x88\xe1\x10\xfd5\x1c\xc6\x11\xe23\xfe\xd3XT\xe5\x14x\xb4$T-\x06\xd5\x1f\xc43\x05X>\x03\xcb\xff\xff\x1dXm V\x9b\x81\xc5@j\x9bK\x06\xd2rG\x90\x9e\xea\xe5\xc7zwG\xb1\xad\xcf\xe4\x0c\xd6\x8f\xd9'\x111 0Q\xf4I\xf4s\xd7\\0\xe8\x17;B\xff\xf8B\xad\xdd\x87F\xd7\x81F\xb7\xc7\xd6jm\xb1V\x9b\xa3d\x1a\x12\xd7h\xe2\xb9\xe1\x88\x7fuJW\x14\xecZ\x9b\xc2\x84\xc4\xc9\\\xae\xdd\x19z\x0d\x9a \x92N\xe2d\xee\x1a\xcb\xc5\x02'>JqY\xda8\xf6a\xeb\x10\xcf7%N\xcb\xd9\xb6h\xfb\xff[\xfc,\xc1\n\x9f\xb3]B\xc6\n\xf0\x82x\xc4lv{\x16\xbc\xca\xc3\xb3IGu\xfc\x00\xe1\x8eZ\xca\xfc\x17\xbe$\xde\x15\xb1?$\xf1M\x18\xe0\x04\x1e\xf3\xd7\xe3\x98\xa4\xcb9N\xe0iq\xceR\xcf\x065\x95\n@\xde\x99\xc1\xb5\x1aV.zga\n\xb3\x100\xd2'\xbd\x16\xcd\x8f\"\x8a\xbd\x87(\xe6\"\xd7\xdds\xa0\xb4H\x0e>-\xb0\xef\xb2\xfa\xd6\x90\x16\xc3tp&\xe6G\x9bAj\xf1\xc3TH\xb9c=q\xc1\x94GBx\x93\xc4s\xae\xd4\xaev\x8d\x93\x9d\xb4\xf2\xf3\xe2E\x82o>\xa9\x8b\x0e\xe2S!}\xf0(|PesEQ\xa8U\xe7f\x0d\xad\x15.\xdaI$\x1b\x88\x9fh\x9c\xe0\x8d\xb3\x93pbbK\xb3\xf8&\xf8\xd6\xb8\x89\xe4\xd7\xdc\xe2[\xdco\x10'\x13\x0cY;&g1\n\xb8\xff\x8f\xcdD\x13[\x10\xaf\x8b d\xce\x00O\xc2\xe0<^\x12\xbaq\xb0\xcaP7\xad\xed\xa5>/\x82\xd2\xc9\xaf\xbc\xb2\xc4K\xf3\xfe\xb5u\x9a\x0d\xb4Z\xa5\x91\xaf\xc8$i\\ z5>%\xa8X\x05:\x1c\x9bL\x83nQHqb \xae\x14L\xaf~\xcc\xb2\xce\\\xd9\x97\x1dm\xd6#\xad\xa5cUS\xc1pS^\xe0\x88\xedH\xdcngc\xdbp\\y\xa8\xcaQ\x80\xd4\xcb\xcf\xfa\x95CP(KxM~\x19\xc3h\xaa\xbb\x16\xb1M\x93{\xe9\xd4n\xd8\x84m\x08;#\x0b\x0e;\xf0Ol\x92\xd5\x8aZ#Q\xa0\xa5\n$^l\xa7\x98P331\xa0\"<\xc8C\x81y\x13\x98\xb1usm\xc1a\x1bvdM\xed\xec\x86H\xa9\xa6]z%\xdch\x15'I\x9c\xb8a\xb1\x8d\x8elc\xd8\x1a\xc9\x0b\x0b\xc5\xde\x14\xaeh\xf5\xfe\xcc\x8c\xbf9\xbb\xf0J-m\x04h\xc9G\xda)v5\xc1\xd5\xa5\xd9DcS\x18{\x89\xe2B\x18zI\x81m\x0b\x07n\x02c\xe5\x99\xd7\xcc\xc4C\x0cS6\x9c\xc5\x19[6\xba\xcdP\x0c\xdb\xad\x17q/\xc8HG\x1d\x82\xac\xa8RH\xd3\xb5\x19\xda\x99\xb7f\x0b~\xd8\xb6{\x98\xb0\xe9~\xb2\xe3t\x0f P\n!\x7f\x99\xa4l>\x93\x874r\xe3,&\xbfF\x84'\xd45\x1ar\xde\xa9\xd0\\\x95&\xa8\xa6L\x94[8\xad\\\xb6\xcd\x0b /\xa1\xeb\x8e\xe2%ei\xaa\xce\xb5\x84\xd0\x1ds\xdf\xfe\x19\xa0\x1b\xfa%\xb5Q\xecf\xaddp\xe4I\xda~Y\xcc\xae22\xc1\xe6\xe7p\x8e\xa6\xd85\x96Id\xfe\x10 \x8a\\\x9e\xb0\x9f\xdeL\xebw\xf3\xe8h\x8cR\xdc\xeb\xc0\x0fo\xdf\xb5~\xbb\x7f\xd5\x19\x7f\xb9[\xfa_\x9d\x10\xbd\xfd\xe8\xf8'\xf1\xcdY;h\x07\xf7\xdd\xf6\xf9}\xf7\xc6\x9f\xfb7\xe7W/o\xcf\x8f\x0f\xbf\x06s?<}\xfb[\xe4\x93w\x8bq\xabsxz\xf5zy\xfe\xe9t\x8aO\x9c\xf0\xfc\xf8t\x8a/\xc4o\xd0\x8a\xae\x83\x1f\xa7\x87\xa7W\x9f\xef\xce\xc3\xd3)\xfa\xf1\xe7\xc5o\xad\x99\xf3\xe1\xd3i\xf3\xfc\xe2\x94\xd5\xb1\xf8\xed\x97\xe0x\xdcfy^N\xcf\x8f_\xb2\xf4\xe9\xbb\x8b\xd7\xf7\xa7\xe1\xabh<\x7f\x13\x8e\x7f\xfcL\x7f\x9d\xbf\xb9B\xad\xe0~\xdc\xfey\xf9\xdb\x89\x13\x8e\xe7?\xb7OO6\xf2w\xc6_n{~\xfb\xd5\xec\xd7\xd6\xe7\xc3S\xf2\xea\xfe\xb7_\xdeE>\xf9-:\xbd\xea\xf4\xfd\x1f\xdf8\xe8\xf8\xd5\x1c}\xb9K?|:\xbd:?y}{~\xf1\xf2\xee4|u\xfd\xe1\xd3\xbf\xdf\xbd;\xf9\xdc=\xbb\xf2\xa7\xe7W\xe7_\xcf\xae>\xa6g\x17\xd7\xb7gW\x9f\xa7\xef/^.\xdf}9\xa7\xef.^N\xdf]\xbc\xa4\xe7\x17\xe7w\xa7'\x9fo\xcf.^w\xce?\xbd\xbc==v\xdagW\xd7\xf4\xdd}\xa7sv\xf1\xda9\xbbx\xdd:\xbb\xf2\xe9\xf9\xc5\xf5\xf2\xdd\xb1s\xff\xeeS\xa73>\xf9\xe9\xfe\xec\xea5}wr\xba<\xffr~\x7f\xc6`>\xee4\xcf.\xce\x97\xe7\xe1\xcb\xd6\xd9\xd5\x94\xb2\xf7\xd3\x93\xd3\xe5\xfbO/\xbbgW\xd7\xd3\xf7\xc7/\xef\xde\x7f\xea|==y\xdd<\xbb\x9aN\xcf\xaf|\x96\xf7\xfe\xdd'\xfe\xb7\xf5\xeeS\xa7uzr\xea\xf0\xbc\x0c\xc6O/o\xc7'\x1cf*a\xbe\x7f\xf7\xc9\x91\xf9\x1d\x99\xff%\x95y\xe9\xf9\xd5O\xcb\xf7\xfc;\xff\xd6<\xbb8m*\x9c\xcf\x7f\xbc\xa5\xe7_OY{_\xcf\xc3\xce\xfd\xaf\xf7\xce\xfd\xbb\xb0swv\xf1\xfa\xf6\xec\xea\x94\xbe\xbb\xf8iy\x1e:w\xe7a\xa7{v1\xbd;\xbb\xfa\x95\xbe?\xeet\xc7'\xbfv\xd8\xf3\xbb\xab\xe9\xf2\xdd\xfc\xbcy~\xec4\xcf\x8f_\xde\x9d\x7f}\xcd\xe9w~1\xbd;=yu\xf2\xee\x82\xe1\xf8\xeb\xf4\xfc\xe2\xe5\xfd\xd9\xd5\xf94\x7f\x9f~=\xbb\xfaiZ\xea\x8b\xde\xc5\xc5\xe9\xfd\xf91\xa3\xc5y\x87\xc13>v8\\\xa7'\xe7\xf7gW\xff\xbeb\xb0KZ\xd0wW\x9f\x97\xef\x18\x9d\x8e\x19l\x12\x9fc\x86\xef\xe7\xec\xaf\xccs+\xbe\xff\x9c\n\x9a8\xdd\xf3\xe3N\xf3\xd7\xaf\xa7MQ\xdf\xaf\xcd3\x91?\xa3\xef\xe9\x89\xbf|\x7f\xfc\xb2\xcd\xfb\xe3\x82\xf7\xd5\xdd\xbb{\x06\x87\xd6G\x9f\x18N?\xd1\xf3O\x1d\xe7\xf4\xe4\xa7\xe5\xfbc\xe7\x9e\xc1\xf0.d\xfc\xf1\xd3\xf2\xdd\x97[\xe7\x9c\xd3\xf2'F\xd7&\xcb\xfb\xfeS\xe7\xfe\xec\xe25\xa7\xe3\xf9\xc5\xb4\xc0;\xa7\x9c\x86\xfc\xaf\xa2#\x95t\xdc\xca\xa3\x82\xd6\x8cO\x15\xcd?\xdf\x8a\xbf\xaf\xbf\x9e\x7fz\xc9\xfb\xe4\xfd\xc9k\xd6\xcf\xad\xf7\xc7\x9d\xd6\xd9\x05\xeb\xb7\xdfN\xce\xaf|\x87\xf7\xc3\xd7\xeb\xe6\xd9\xd5\xeb\xe9\xf9\xd5O-\xd6\x1f\xe7_\xafy?\x9d_\x9d\xde\xf2\xdf\xafSF\xf7\xdei\xd8\xaf\x7f\x10\xf2\xa0~<\xf5\xbc\x1f\x94\xc6;^ ?\xa4\xf7l\xd9\xdf\x95I7a\x1a\x8e\xc3\x88\xa7\xce\xc2 \xc0d\x07)z#U\x95\x0d\x14\x85S\xe2\x1a\xf30\x08\"\xac$*\xfb\x995\xddY|\x83\x13\xe3\x05\x17\xafR\xbeBc\xd6\xaaNg/\xfc\x83[\x12\xc5:|\xfc9oG\xdfx\xffw\x8a\xf9\xef\x14\xf3\xdf)\xe6\xbfS\xcc\x7f\xa7\x98\xffN1\xff\xe8\x14cY\x10\xab?\xd6\x1a~\xac\xda\x13\xed\xed\x99\xd8\x9ec\x8a\xfe\x83\xb9\xb1>\x8a\xa8|\xf2i\x12\xc9\xc7t\x16NX\xb2\xb5\x86\xef\xfey\x15\x17A7\xe1\xb4x\xfb\x12\xf2 \x87\xd2\xf0\xf0C\x82o0\xa18X\xad\xf8e\x04{\xbc\xa44&\xab\xd5G\xc2\xcd\x10M\xc2\x15Q\x98\xd0\x13Q\xc0\xb4`\xee\xfb\x92\xca\xcd(\x8d\xf9\x06z\x07M\xd9c[\xecMcA\xa5*|\x1da\x86\x9eyLDh\x8c*\x93\xc0r^\x80\x00|\xf0#\x94r\xff\xa7.V\xfbf\x95\x02g \x9e\xb8\xd4\x9ec\xb2\xcc\x82\x99j!Is\xd4`L\x8e\xa3\xd0\xbfvqFN\x11\xbb\x0e\xc3bqe\xeb\xafm\xcf\xa5j\xa1\xb4\x83>\xe3\x07\xb3\xef\x88e\x06l\xcb\x1c\xec\xbee\xde\x81*\xa3\x91\x98 \x12;] b\xbea\xcc\xf9fG\xe6\xdc\xbe\xc6\xc8\xf6~\xad\xc5\x9d\xd1\x97;,u\x12'\xf6n\xdb-\xacJ\xaf\x15\xf6 \x8f\xb0Oq\x93i\xf7D[\xe2\xd80AA\xb8L]\xa3#\x01z\xca\x1c\xa2\xd9\x92\x19\xeb\x06#\xce\x90\xc9\xbeQf\xba\xa8\xef{U\x8d\xeb*\x8b\x98\xffRG\xa7\xce\x13\xe7\xe4\x19\xb3\xf2\xea\x94\xfd\xc37\x94`\x9b\xf6\x04\xa5<\xaa\xec\xeeV'~\x1c`nq\xf2)\xfc\x8aw/\x96\xdb\xa8\xbc\x8a\xa3\x80\x8d\xa50\xf1n\xb1\xf9\x95\x0d\xa3\xaf;\x0e#~\xa0,O\x13\xb8\x9c\xe3\xbdDgI\xbc\x9c\xce\xf4>\xffn\x1c\xf8~\xd0\xd6\xd7/\x7f\xa9\xaceY\x10\xf11\xef#~\x8cb~f\xf0~\xfe\x16x%o\xf1\x95J\x993\x1c[\x1d{o;C\xaf\xb6\x89\xfb\xe7+\xde\x89\xd9\xb8A\x86\x9db?&\x01J\xeeY/\xa6\x9c:40_1\xc2\xbc\xda\x910r \xa6\xcfm\x13\xd4\xd8\x19\xc7w\x0c\x0f>\xf23C\x0612*m\x815A\xd1t\x16w\xda?\xca\x82\x8e&\xee$Lr#a\xe3\x85Q\x83\xe2\x03\x0f\xa0\xc9\xde\xd5\x88\xd4\x80k\xc8\xd9X)\xe64a\x93\x03B\xe3\x85\xc12o\xe6I\xf0\x02#Nv\xf9\xb8\x99EJ\x08\x0e\xaf4\xff[o\x079\x03qC\xc3\xc6\xb8\x19%\x8d)\x93Mlm&\xf2\x19\x06\x8d\xa5\x913\xccR\xd8\xfc/\xae\x0d\x1b\xce\xbf*\x93[\xad\xc5]\xf6\x01@\xb0\x99\xc0\x80\x15\xefV\x11\xe6Mj\xfe\x0dPYK\x1a\x88\x1b\x90l\x85Y\xff\xf0\x04\xa8u\x83&\xdbz_\x8e\x11\xad\xb6\x8a\x1ad/ k\xfdJ\xc4\x19\x03\x10et\xbe[\xfde;\x9e\xff\x8e\x94\xff\x8e\x94\xff\x8e\x94\xea\x91\xf2\x94\x81\xbb\xf0<\xc7h\x99\xeed\xdd\xff\xbf?\xbf\x05#\xae\xd1H\x13\xcb\xfc\x9e\xcd\xbb\xdf\xef8\xef\x16N\x9a6\xef19\xd9\xa2\xc7\xcf\xea\xff\xc2\xea\xff\xb2c\xfd\xe5\x055\x8d\x17\xbc\x9f\xaa\x8c\xfa\x0c\xe3v\x16R\xdc\xe0\xae]Y\xc7\xdf&hQ^\xc74\xdb\xfa\x1a\xbbh\xa5\xcd\x92k\x9a\xc7\x19\xc5N\xdan\xf52S\\]nj\xb4\xfeo\x00\xbb\xbb1y\xb62\xcf\x0c\xc9\xc3\xa4\xaa\xact\xc5\xce\x83\xdc]\x87$\x18\x00\x81\x83\xf0[\x1bR\x14\x85\xbe\xb8\x90\xc4--?hQ.\x8eq\x14\x01\xcb\x82K\xb5\xea\xfb\x93q\xc7\x9f;r\xc7V\x9b\xd4\xef\x0e'\xe3\xce\xb8j~\x12\xd3II'\xb2u\xd2\x93\xb2F\xddV\xde\x10U\xaa\xe5L\xc8T\xcc\xb4\xff\xdb\xa0\xdbM\xbaI\x05\xfb \xa6(\x8c\xd2/\xe2\xc2\x94\x05\x17\xb9\xbe\xe2-\xeb\xa9\xb7;\xf6T\xd5\xd6\xb9|EBn\\\x13\xb9E\xce-uk\xe5\xa3\x8d\xcdS\xe6\xbfx\xe6\xa2]\x95\xd9<\x9e\xae8\x9dv\xcb\xc3\xab\xe6\x16/\x07\xfe\x0f@\xf6(\x189\xb8\x07\x15z\x90\xffR\xfd/C\xf6W\xa8\xbe\xdb\xc8\xday\x9e~T\x12\xff\x93\x0dU.\x08&\x89\xba\xce\xf63\x1b\xe8?\xef8\xd0K\xf7\x05+\xaf6\xef2\x0dI\x98\x08\xe6a\xc9?\x89\xdb\x82\x0c\xae@\xcc\x14h\x1ca\xf3W\x06\xd9\xff\x87\xbdw_o\xe3F\x12G\xff\xdf\xa7\xa0\x90\x0c\xdd0\xc16\xe9[\x92\xa6\xdb:\xbee\xe2\x89\x1d{,eb\x0d\xc3\xf5\xd7\"A\x11q\xb3\xc1A\x83\x96\x14\x91\xefr\x9e\xe5<\xd9\xf9P\xb84\xd0\xdd\x94\xe8\x99\xcc\xfef\xbf\x9f7;\x16\x1b\xd7B\xa1PU\x00\xaa\n'{Bf\x98\xa2\x0da\x95tJ\xba\xcaDf\x9cwk'q\x81\xe0\xf5\xcf\xf8\xbc\xb2\xc6\x851 \xb9\xb6\xd9K\xa8\x94\xc7J\xbf\xbd\xba\x91\xe8,Q\xffj\xe5\xb7\xd1\xa5\xab\x84\xe6\x8f=\x8a4\x7f\x84'\x84>9\x87L\xa0\xb9\xe5j\xae\xc0\x7f\x0d\xa4\xcf)\xbb{\x1c>|_\xcd\xe1\xff\x1a,\xf0\xcb\xac\xff_5\xeb\xfb+\xb7\xde\x89\xf3\\\xec\xfc\xff\x7f\x82E\xed[\x87\xce\x9e\xba\x91\\\x0f\x84\xfd\x7fL\x16\x8e)\xffY\xb1\xbe?\xef\xc9\xfa\xdc\x05Gg\xa0h\xdcL\xf5.\x19\xe9\xd6\xce\xe7VS\xfb\xbce\xa5 \xfeU\x81\xf8\xd7=Al=jn\xd5M\xf6Qk|\x0e\xf0ohy\xbf\xb3\xed\x9a#\xe9\x9et\xd9\xea\xc1\x8b\xc9\x19\xe0U\x9b\xb7D\xef\x15f\xdf\xef\x89\xd9\xdd\xaa\xd0\x0e$\x98d\xbb{x\xd0d\x8a\x83\xf8[\x83\xc76\xc3T\xcd(\xdb\x0e\x17\x83\xdb7\xd7_\xedf\xec\x81i\xda\x19\x9c\xba\xedK7\x99\xf3\xe9\xba\xacv9\x17\xfdr\x91\xcd\xf8\xb9&\xd1\x01\xf4\xd8\xdc\xff\xeeu1\xf8\x7f\x11.\xfep\xea\xfd\x9c\x1a:b\x98\x0d\xc4\xe2V\x1c\x1c\x86\x8clb\xcb\x15l\xef\x9a\xcez\xc8\xd5\xac\xa1\xa5\x8e\x1a\xef0pW?\xbfD\xf1\xf0\x01\xb9\xa67\xecu\xb7\xb5?P\x82\xaaf?\x13\xe668B|@(\x97K\xc7\xfb\x7fT\xcb\xff\xc7=\x97\xff\xee;\xbc\xfaNp\xf7\xae\xaa3\xbee\xe9\xe8z\xb6\xfa\xaf\xb4\xbb\xbf\xe8n\xec\x860\xf9\xe4\x90\xf3\x17\x85\x9c\xbf\xfc\x0f\"g\xf2\xef\xc1\xcd\xe4\x8fB\xcdi\x8b\xb5Xt*\x0c\x82b\x1d)~\xb3\xf1\xdb\xb7\xcf\xbeHR\xa4C\"Rg\xb1\xe6\x9e\n~$\xe0\xb9`[\x90wX\xd1\x91U\xb9q1\xc1\xa6\xfd\xcat-|)\x08B\x1cF\x92p\xdc\xedFt\xcc'\xf0^\x87\x0b\xceI\xb7\xb8\xddfn;\x8a\xa4H\xff\xaef\xf9\xefEz\xb5\xc58~\"\x04?O\x11\xfcAD\x8a\xf8\xb9\xe0\xab\x19?/\x8ehN\xa7\x92\x8b\x14\xd5S\x82b\xbf\x88l\xb5\xa2^)\x93\x00\x85l\x8d#\x9a\x89\xe9\"E\xe1\xb7W\x84\xce\xf4\xebZ(\xf8\x84\x02o\xf3lJ\x17<\x9f\xa9N\xbc\x0f\xc8\xfc\xb3\xe0\xeb\xd53\xed\xef\xa0\xf2\xc3\xef\xaa\xc8s\x06\x8e\xe5\xa6\x80\xf9\xaa\xb2\x7f\xd0z\x83\xc96_\x90\xfd\x06\x0c\x0d\xbc\x1ej ^\xa1\x97\x92.m\xbe\xfa\x8d\x88O\x16tL\xe3\xe7o~\xf9\xe9\xc3\x93w\xef\xde\xfc\x92\xde\x1fLRT}#\xa2\xf2_\xfct\xfc\xe2]:\xbc7I\x11\xfc4\xa9G\xcf\x9e\xbc}\x91\xde\xfdF%\xc3o\x9d\xfe\xf6\xc9\x9f_|PM\xa4\xf7\xeeOR\xe4>\xbd\xdc\x9f\xdf\xa6\xf7\xee\xd9\xbc\x9f\xdf\xea\x9c\xe3'O\xd3\xef&):~\xf2T'\xfc\xfc\xd6\x00u\xef\xdbI\x8a\xec\x97\xce;z\xfb\xe4\xd9\x8b\xf4\xde\xddI\x8a\xe0'\xdaFTl6\x11\x15@>\xe0\xf0z!\xd21\x15\x06NB\x85kP\xfd\xae\xc6\xa8\xbe\x0c \xee\xa7\xca\x9d\x90s\x91\xa2\xaf\xbe\x1d\xa8\xff\x10\xf9\xa8>\xbey\xa6\xfeC\xe4\x8d\xfaxH\x1f\xce\x1e\xce\x10y\xa1>\x9e\xbdP\xff!\xf2A}\xd0\x81\xfa\x0f\x91#\xf51\x7f\xa0\xfeC\xe4\x18rf\x14\"d\xfe\xa6>\x06\x83o\x07\xa7STY\xc8>\x11\x1e'p\xe1\xd8i\xac\xe4\xc8J\xcf` \xb6\xb1\xcfD\xbb\x1f\xff\x13\x11I|Hm\x9c^\x19\xd4\xc4I\x95\x81\xb7\xe4\xe5\x8e6NEt*\xa2\xab-\xa1\x98\\\xf9\xf5\x93\x10\x90k\xa2\xcdv\xa8~\xbd.\x96\xfc\x15?\xa7\xe2YV\xd2\x08\xc7\xac\x98\xe6\xeb\x19-U\xf7\x18o\xf1\xb6\x1a\xf9[\x11U,\x8a\xc2\x1b\x08\xe9`$\x1f5\xb8\x94\xec\xf50\x1d\xcb\x89\xc7\x97\xa4\xf7\"\x90\x81\xe9)\xe79\xcd\x8az\xb4\xd6\xeavC\x07\xf3\xaf\xde\xa1\xa2\x874\xa1\xe6\x9dh\xf7\xba\xe151\x93\x15\x08\xde\x1b\xe2\x08\xeb\xd8l\xd57L\xd3;\x91~\xa2\xf6\xd8\x1d$Y\x00\x8b\x0d\x13 \xe7\x0d\xe0\x86\xad\xb5D\x02/\xcf\xb02;\xcd\xe9\x8cpp\xcf\xa6\x05a*\xd5p\xb3\xef\x95FDgf\xe0W\xb5\xd0U\x898|!\x92#A\x8c\xaa\x8a\xeeV\xaaj/\xe2\x9b\x0d;\xfcM$\x1f\x056\x05\xde\xe9\xb3\x12\xf4\x0d\"F\xe1\x15\x87\xa8\xe0\xb2\x9f\xe59?\xa73\x94 \xa3\x00#b\xd5m4\xcf\xe9\x05\"\xea\xdf\xe7.\x08\x14\xd2A\xa0\x10\xb1;\xf1\x04\x0d\x15\xc71\xdaoA\xdc5?\xb2\xf6\x06\x88\xe8\xe3\x16IPW;=\xa0\xe4\xeaZ\xb8\xdf\x08\xbcU\x85-\x86T\xf9\xda\xf8\x8f\x85\x1d\x08Z\x17%\x95h\xbbUb\xf3\xa7\xfd\xe6\xa3\x041\xa0\xda\xb6\xf8\x85\xa3\x1e\xc5<\xcb\x04M\xa9F\xc4)\xbf8\xd278\xa8\xba\xc1q\x08\xd4s\xd6\xed\xcaC$\xe9\x85D b\xc5\x82\n&\x1b\x184\xb8A\xf7\xee\xae.\x10\xb1[\x084\xe8\x0c\x87\x90\xb0\x13ch8\x18\xfc \x11V\xac\xd6\xb2\x89\x82\xaa?\x8bL\xa5(\xfb3\xe3\n8\x08\x06\xaaC\xbb/1\xe5\xfd\xbe4\x16_\x05X\x84c\x81\xa8\xa1\x8d\\\x99\xed\xd5\x80hS\xfc\xfa`l\x94Eg\x9d\x7f\xf7\x81* \xf9*\x19@/\xafE\xda\xdeF\xee\xa2P9\x88?Q1\xcf\xf9y\x82\x8c1\xfa\x1e\xfd\xd0\x0b\xf9\xc6U\xa3y\xceV%+M\xff\x044\xf5#\xb8\xc5E\xfa\x16\x17m\xc9\xf3\xeb\x86M}\xf6y\xa5Z\x7f\x02\xa7\x834\xd6\xe4rL/\xe4\xa1%\x9d\x04\xa9\xf1 \xa2\xf7\x05\xd4>\xefz\xa0i\xe6\x10A8&\x94\x9c\x8b-y\x0d\x8f\x98\x91\xefo\xe8\xdb\x05\x9cu\x9d\x8d\xfc<\xec=\xec|\x07\x88{\xd0\x19~\xdb\xf9NC\xf6\xd7?\x00\xb2\xd2\x9cZ\xde\x08\xd3\x94\x89)\xbc\x0f<\xbdP\x9b)D\xa6\x97\xfa\xafH\xd0\xb7\xd7N\x9d\x19\xc9\xc50Aw\x87\x88\\\x9a\xbf\x17w\x134|\x18?|\x80\xc8\xa5\xfb\xa9\xc6U\x1d\xec\xbc\x17m\x92X\xb3\xfbZ\xe49\xc7\xb0AW\xd4\xe7\x1e5\xc1\x90\xb9\n/=\x190b\xf3\x88\xc6\xa09\xe2\x9bx\xc0\x8c}\nx.\xbaQ\x17\xdd\x8d\xd0\x13a\xc2\xd1\xa1\x9fxg\x96\xc9\x0c\xb9wb\x0f[\x8f\xd62\xf8\xda\xdamC\x9e\x0e\xc84-\x9a\x87Tl\x1e\xc1Q\xa0}g-\xd2K\xbb-%\x9e\xf0M|6\\\x9b\x9a\x84\x9b\x92 %\xbe|NJ\x02\xd29\xc9\xfb\xc3J\x08\x14N\x08d[\xff\xf9\xae\xa99\xe6;\xdc\x05\xddS\x07\x1d `\xf7\xdc|\xad\xe7f7I\xabM\xa5\x0e'H\xb2X\xf2\x9fW+{NIPg\xd3\xf9\xff\xfe_t\xcdz\xf0*\x17\x06d\x8c\xc9tg\x85_\x0c\xa5`\x1d\xf5T\xcd\xd0\xda\xce\x10Y\x05\xe2m\x1e\xce\xd5M\xd3\xb4\x0e&h\xf5\xd9\xd3\x12)b\xc0\xfe\xdc\xac\x81d\xec\xfc\xcc\x83\xf9\xd9W\xfb\x99\xea\xf3\xcf\x1fEzed\xa8U\xde\x07M\x95wK\xfe\"v>\xc0]\xa3n\"n\xe4\x92f\x89\x0b\x9e\xd3\x04Y\x85\x85\xcd\x92\xa2\x87>\xa8M\xf2\x07\xd4\x13D\xa1.H\xa8\xab@\x02\xb0\x10hLf\xbe\xf6BH\x00\x84\xea\x04\xf6\xf4\x1e\x14\xc8\x84i\xf8Ql\x89\xc0[\xf2\xf7\xfai\xbc]\xc5>\x7f\xac\x0e&\x0dw|\xb6\xc8\x8a3\n\x0c\xc1\x9d\x17+5X\x81\xfd\x1c\x9e\xaf=\xa5\xb3\xa7\x97\xa0\x0dW\xea\xde\xd4\xff\xca\xa1@H\x8dfG\xf5fE\x0b2\x0f\x94g\x88`\x8a\xa3\x01&\xb3t>\x1eL\xc8\"\x9d\x8f\x87\x13\xb2l+\xb5\xc2\xe4,]\xaaR\x97\xe9R\x95\xfa\x14\x94zG\xe78\xd2\x0c\xf4tW\xc6\xc5\xae\x8c\xf3\xb6\x0e\x0f\x86\x98|L\xcfU\x8fo\xd2s\xd5\xe3\x8b\x1d\x84\xd5R\x19!Lx*T\xe5,\x15\xaar\x19\x14{]\xdb\xbf8B,\xba]\x1eK\xc1\x96\x11\xae\xb1}{\xa1Q\xa4\xe3 \x11\xa9\x0c\xefC\x08O\x07\x84\xa5t\xc4\x1f1{\xbd\xc1{=\x0db\x96\xb21\x9f\x8c\xb4$\xc8\x8c$(\xd3\x97\"\xca\x88\xc0\xa32\xbc\x8a1\x0f\xf4\xa7\x83n\xb7\xd0\x81qK\xbc\xa5yI;\xd9\xf571\x02\xbb\x1a\x99{(\xb3\xd8\xc2\x1d.<.>\x96\x84O0\xc9o\xdcB\x85o\\\xea\x07-\x0f\x06\x98d\x91\xc4\xa4\xe8vi\xa47R\x94d\xeeF\xf8J\x13\xf41\x15\xcb\x84\x93\x92\xca\xa3\xea;'\xfa\xfa\xc5*\x0beRn\xb7\xd1\x82\x14D`\xf2!}\x11Wu\xc9\x11|z\xb5\xc9q\xfa\"\xae\xd5'\xbf\xed7\x9d\xc7\xb1\xa0\xb3\xf5\x94F\xcf\x04\x19O\x00\xe6\xe3 &O\xf6\xab\xfd\xdb\xae+\xa7\x8ec\x1fX\xefW\xdf\xcc\xa35\xb4\xfe\x1bYO0yv#\x86\xa9\x87_\xda\xedF\x14^ ?\x8a\x10\"\xea\xc7%\x90?\xedvOc\xb3\x0d\xf1~j\xd5*\x82\xfe\\\"9\"\x97\x13L^\xde\xd83\xbeZDO\x1e\x0f\x0e\x9f$\x03\xe8G\xcf\xe4%Y\x90'\x13L\xde\xdeX_3\xb4\xf0\xfdS\x03l\xc4#Z\x0d\x02\x13\xd9\xed>\xb3\x1dp\xf2\x8c\x1cM\xf0\xe8\xa0\x8d3\xba\xb4\x02_\xc9j\xc4\x07\xeewl\xe2\x0d\x96Q\x11\xcbL\x9cQ\x89\x15\x15\xe2\xed\xc8\x07\xf7\xc5|\x0e\xb6#-S9\xe3S\xb8a\x8c\xb3\xd9\xec\xc5'Z\xc8W\xac\x94\xb4\xa0\"BK\xbe.\xe9z\x85H\x01\xa8\xbf\xa6\xa4\xe4\xeb\xe9\x82\xaa\x0d\x9d.\xeau\xe3j \xba\xe4\x9f\xe8\xce.\xbc\xf6[Kz]\xe0\xad\xc2\xdb\x04o\xa3g\xe4\x93\xd7\x19\xe0\xed\xa6a\xb3y\xe4!\x92>N\x07\x16\xd7\x15N\xcf\xa842\xae|z\xf9\xcc*-\xcd\x13\x02L\x84\xe2\x01V9:,\xc6t\x02\xba\x8f\xe2h\xa2\xdb\x15\xaa\xa5\xa7j\xa7\xcb\x8a\xb3g9\xa3\x85|\xa7\x00\x82\x0ey\xba#;\xc2\xf6\x86\x94\x850]W4\xf3\x8a\xeas\xd8c\xbe\"e*b>\x9f\x97T\x1e\xf3\xd5\xa34\x1by\x9f\x8f\xd3LA\xe8\xbe{\xfcQ\x9a\xf5\xd8f\x13\x95\x87\xcd\xb6\xa2+\xc9W\x89W|\x8b\x93=J\xf5Y\x8f\xf7\xbeU\x9b%\x983\xaa&mF.\xf4\x0e\xe2\xdd^\xcc\xe6*\x8c\xc0\x94\x19u\xc5\xbd\xc3\x99\x9c\xd9\x18MY\xb9\xe2\xab\xf5\ny\xba\x88\xce\xd1\xa6{3ZNi1\xcb\n\x89\x12YiE3S\x08b\x80\xf0\xbc\xac2Q\xa8\x19\xe5\xfegNg\xa7\x97(\x99\x9a\xb4\x99UCTb c\xcd\xc8\x19\x91dFr2%e%\x0c\xfc\xdd_2S\xe2\xe0{?eA\xf8\x8a\x16\xc9\x99\xcaP\x9aIrI<\xf1\xf1\xa1&>\x8eH\xed\xaa<\xf9\xa8J<\xaf%\xbeQ\x89`\xd4\x93\xbcm\x08\x9cc\xe8\xd1VI^\x92i\xceK\xea\xbe\x9f\x91y\x9eI\xb5\x08]\x8d\xdf\xc8\xd4Z\xe0$\x9f\xf4\xcd\xec;:ON\xe1v\xc6X %\x17D!\x06^cH\xde\xc1o\xb5\x96\x93\xbf\x88\xe87\xf2D\xed\x0f\xb7\x84*\xd5@\xf2\xe6\xb1\x18l\x993!\xf8\xb9;\x00\x15\xf0\xd0$lY\x9fU\xbb\xb3`O\xd1\xd0\x0f\x17lF\xc1\xb4\n4C6\x03\x95\xb0\xb9\xb1\x06\xb5p\x95\x9d\xd1\x1f\xe9\xe5\xb1\xc8>QQ\xd2#\xf6\xbbV\x12W\x95\xcd\x13\x99\x87\xca\xe9\xcci\x93\x0bo\xd3\x0fh\xae@\\\xeeE\xe3\x1d\xb9\xd9D4\xa5\x9cP\xae\xb6\xadH\xd0l*?\xd8\xc9\xfd\xa0\xd0\xf7\x01\xf5\xa8^7\x144\x964\x9f(\xcd\xf3\xef\"\xa2d\x89\xc9ez\xa6\x0d(>\xa5gu\x03\nr\x9a\x9e\x85\xc7\x0e\x17\xe9Y\\#=r\xae\xd3j\xc4C>\xead\x18\x17ycz\xb1\x85\xc8\x8b\xf4,\x0e\x08\x86|\x80\xf2\x9e\xd6r\xd6\xd0Z\xceZ\xb4\x96\xb3\xb8Ng\xe4\x89j\xdbR\x1ay\x96\x9e\xc5\x96\xd6\xc8\xcb\xf4,\xf6\xa8\x8d\xbcM\xcfbGo\xe4\x9d\xf9R\x14G~\xbaQp\xe3\xabg\x95Dx\xd6\xa6L\xb8\xc4 &\xaf\xf6h\xef\xa7\x08\x93l\xb3\xb9\xecv\xe7\x9bMty\xf8B \xfb\xe4M\x84\x8dJ\x91\x919yA\xdeL0y}ck\xd4=.A\xcd\xb3\x12\x9e\x91Wr\xd1\xaa\x85\x81\xf2t\xf8\x9b\x91K\xfdaB\xfbC\xb5\x9f;\x154\xfb8\xb2\x8dT\xd6a\xed\xcdD\xb47\xc4\x7f\xb2\xad4\xeb\x1b{\xb2\x1d0\xd0\xfe\xfa\xd1\xa0\xdb\x05\xdb\xae\xc3A\x02\x9f!H\xeb\x1dM*\xb8v5\x9a\xa6i\xd5\x86j\xb6\xb7~\xec%x\xedG\xb4\xb7\xbe\x0ezm1\x97\xc0\xd4\x00\xc3\xbe \xbf\x915y1\xc1\xe4\xf9>\x93bO\xfb>\xd2\xcbg|FG\xfd\xe1A\x9a^\x08\xa7\xf6J|\x08\xc1,\x1bA<\x9b70\xaf#\x89q\"\x15\xa6\x84\xb6CT\xca\xa3\xfe\x04\xc3\xbf\xcdf\x8e7\x9b\xcbC\x93v\xfc\xe4\xe9f3?\x8cdZ}\x9a\xdfP\x1bw\xbbv\xdc\x8f\x07\xdd\xee)l\x99.\x952\xdd\xd2y\x0b\x8c\x1f\xa3\xdf\xc6\xa7\x13r0\xc08y\x11\xe1\xa4m\x1c\x96\x98\x7f#\x1f\xc9)\xb9$\xaf\xc9\x1bE\xd4\x13L\xbe\xdf\x07{G\x115\xfa\xaa\xb9\xe8Qm\x1dM0\xf9\xfd\xc6\xda\x8e\x18\xce\xad\n}>\xc1\xe4\xe7\xcf\xaa7t\xf5\x9e\xde\xc0\xa0\xd9<*\xedy\xabU\xed\x8a\x9b\x0e`\x7f\x17\xed\xa7\xaf \xd3\xd0\x96\x14\xd1\xa51\xdf\xa4\xa9b\x127\x1d\xb4\xdc\xd4\x1e\xdd}\xfb\xf6W{|{pM\xa1?\xdb\x93;\xcd\x9e\n2\xf7T\x96\x9dP\xbd\x13\xe4J\xd0y\xf2\x84p--\x92\x9f\xdc\xcd\xd8+\xa2O\x85\xb4\xdf\x8f\xbdl\xb2V\x80\xe6\xb8\xcc\x99\x02Z\xb1\x9ddZ\xfd\xb9l\xe85\x9fv\\\xd6!\xc2\xf1\xee\xf3\xd1\x9fv\xe0\xadt\xc6\xd4\xdc\xd7\xb1\xe0\xfdy_\xc6\xefn\xf9\xd5\x0d-\xdb\xfb\x8ak.*@\x98!r*\xa2+6K\x96D\xa1\xf2\x19\x81\xd5\x90| \xf6\xd8+\xf9\x9e\xf0\xe2Gz\xf9\\)c\xcf\x1d\xa6\x7f'\xbcx\x9a\xafE\xf23\x114\x9b\xbd)\xf2\xcb\xe4\xe0r\xb39\x98\xfb\xc8\xcc\xd6\x92?\xe3\xcbUN%M\x10\x9f\xcf\x91\x99\x96)_\x9er}5\xf6\x16cL\x0ef\xdd\xee\xc1\x87\xdd\x04\xf2\xfdM\xc3]\xf9\xb6\xe1\x95\x81V`\x1a\xb6%+Ln\xe8\xe8y\xd0Qp-\xeb\xfa\xfa\xa4\xcd\xd3\x17xWG\x06\x8933\xbb[2\xc3\xe4)&\xefv\xce\xc5\xcf\x82\\\xd5M\xab\x92\x16k+m\x89\x958\x93,C=7\x01l\x14WD\x04\x86Y~\xb9\x9b*\xde{\x97\xceZ\x0f\x82aXU=\xd8=\x9c6\xce\xc1?\x92\xa6z\x9bL \\\xf1$\x03Ovn1\xc6\xdb\x91\xe4U8j\xbe*\xd3\xab\xda\x89\xaa~\xe9\xcc\x1d\xa2\xd6>s\xbf\x88\xa7\xab\xdb\x8b\x1for\x0e\x86\x1e\x8elvM\x9b\xd7-y\x87\xb2\xaa\x96\xa3\xe5\x83\xa13\xafU\xc5\x9cj\xaf2\xd8L'6fp\xf8``\xa7\xec`\xd8\x86\x1a\x03J\x8b\xf2\x9f\x0c\x07\xc4\xa3\xe9\xc4\xf8Ft\xe28F>\xb78\xa8\xee\x14B\xcd_\x83\xa4\x8f\xbf\xaf\xb6\x86\"M\x7f\x9a\x19\xc2% \x08\x81\x82\x13\xc1 \xe7\x84\xf1\xf4\x88F\x92\xe3\xa8\xe0\x9bMT\xf0\xfd\x9c\x81\xba\xdd\xc0\x9b\xae=\x08\x9a~8\xbd\xf2\xfavq\"\x9a.z\xd7G\xa1\xa8\xb9\x9e\xdf\xad\x02N4\\\x06w?\x94\xd8\xf40\xd7V\x87&3\xf01\x1c\xac.\xe0\xefC\xd7\xd3\x8e\x80n\xce\xa9]\xf1=\x0b\x94\xe7t\xed\xfb\xa6\xd9\x10\x97w\x1f\xde\xbb{\xef[\x93\xd8\xea\xe9T\xf7\x8ar\xef3\xeetz\xdc\xf5\xec\x89\x1f\x97X#\x0b\xcc#uTb\xa2A\nR*\x0f@/\xd94fL\x9a\xack\xbav\x1f\xec\x9f3\xb9`E\xe5E\xb8\xdb\x8d\xd3C\x82\x9f\x14\xf8c\x1a\xe4Cd<\xcf+\xd3\xb9\x0f6m\x1c\xab\x9e\xeb$\xe4\xdex\xee\xb4\xbd\xf3R\x05&\xf1\xe6\xce\x95\xb3\xde\xad\xde\x8b/\xd7\x10\xc1N\xe7\xd7k\xe0\xd6B\xa5\x82~\x07%\\\xdb\xebN2i\x7fK?o{\xda\xe6\x86 /;\xe8\xb6\xd3\xd1Q\x11+l\xfa\xa4\xd6\xa4+\x08\x9a\xba\x8b\xb0\x1a8\x02\xee^\xa1\xa6\xc2\x805\x8du\xbd\x9ai\xba\xe7\xcd\x92\xe4\xab\xa4\xf3\xc0\x1b\xb6\x17t\x1b~*vv\x12\xf5\x1f\x0c\xfe\x84G!\xd5zQ\x8c\x83\xe0|\xf5\xd0w^\x0d\x13\xb9\x0b(\xbd\x9eg\xc32\xc6\xf7\x1e\xd0\xa5\xfbS\x9f\xa2*\xa1\xfct\xe6{\xe3:z\x0e\\q\xb7\x0eg;)\xcb\x08\xba\xbd\x10h\x08\x17\x90v\xd7\xc3\xa2})\xc9K\xf2\x82_\xd8\xa4\xdf\xfb\xfa\xba\xbb3\xacF\xd1\xc2\xf4\x1d^v\xb0\xc6=9\xf9]\xbc\x93i(n}\xdf0\x0e]\xf3>\xe9\xdc{H:\xaa\x85A<\xbc\x8b\x89+7\x1c\xec.8\xf8\x16{\xf0.\xb3\x8b*\x18]\xc0\n\xdcm\xbb\xcf=Z\xe6D\xab\x00\xb5U^ww\xed\xec^e\xedl\xddgg\xf1}\xaf\x95\xa6wt\x15\xf6\xc3\x96\xe9\x8e\x83;\xf9\xf4\x96\x14kzk\x12\xf8\x817\x9a\xa9\x9b\xd8\x0f\x1e`\x9f\"]\xdb\xe6\xe1\x95\x9b\xdb\ngvx\x17\xb7\x10\xb8\xfa\x03{\x96\xaa\xbd]\xf8h\xc6\xc4\x82\xfa\xbe\xa7\xf1\x17\x9d\xe5\x8b\xce\xf2Eg\xf9\xa2\xb3|\xd1Y\xbe\xe8,_t\x96/:\x8bk\xfb?Qg\xd9?\x8cIk\x10\xac?,\x06\xd1\xff\\\x8d?~H\x98dp\xba\xc58\x8e\x04\xdfl\"\xf1\xd9\xa7[\xc1\x031^\x08V\x10\x0d\x1e\x8f\xf6\xb8]\xb8Z\x1e\xea\xf5\xd2\xc8\x1a\xba\x05`\xb9\x88\xd7D\xb5P:\xc3\xf8\xaevF\xb4\xa5=n\x14rx\x9d\xffy\xfaN\xc0\xa4w\x06\x7f\xbaY\x0fh\xd5\x91:\xbe\x00\x0d\xd5$\xbf\xd8\xb6N\xfa\x0du\xfd\xcb$\xfc\xcfO\xc2\xffL\xe03LJ\xeeb r\xb5D\xf9\x9eK\xb4\x9d&vR\xc4\x0e\xa5\xd3 \x0c\x9c\xc1\x9b\xd1\x1c\xff\xf0\xd6\xb1\xfflc\xce=,9\xc49\xa7\x96\x83\x03 OEu\xbb\xfao,\xb3\xd3\xf2\x1d\xcfi\x9a\xa6t\x0bn\x00S\x9e\xe6^\xb1R\"LV.\xe1mV\xd0\x1cy]\xcf\xb9o\xf1\xa9\x11k\xa3\xb3\x8c\xd8<2)gTzA\xa8\x8e.\x97\xa7\x94\x11\xc5\xf6A\xd9n\xb7\xfe\xe4k\xb7\x8b8\x0c\xd7\x0bxT+\xe2y\\\xe5\xbc\xa8n])Y\xf0h\xc1!\x1e\x94\xae\x82\xc9\xd5\x96\\\xd9z\x89\x1af\xad-\x02\xf1\x9d\x12\xb5\x10*t\\\xeeD\x87\xa5\x85\x1aJ\xaa\x97V\xa3\xa97\xdc\x7f}\xa8\xddn\x04\xf8\xebvUS\xe4\xb2u\x00\x9a\x9c\x1c\xf4\x9f\xb8g\x82ID\x8a\x90\xe2?\xcd0R\x9b\x0d*\xd6\xcbS*\xbc4,z)\x1d\x817\x86\xaa\xd3\x00\x0f\x83\x93\x87\xc8.cV\xc2\xdf\x88b\x88\xc2\xa7C`\xd1z\xe8+p\xadP\x00\xa9\xa5\x8b\x15\xfbR\xff\xeb\xa5\xa8\x830\x11\xbd\xb4\xc0\xba3h\x02\x88\xddV\xab\x15\x94\xce\x8eE\x00\x9f>\xe5\xe4\x82\xfb\xfe\xa8. \x97Z@\xe9@\x8f\xbbh\xf2(\x1cQ?N`\xaf7\xc1`\xe3\x0fXk\x81\xd0\xef\x98\x9c\xf3tP\xb1\xfc\x8f\xdcY#iS\xcf\xbe\x92'}\xd4;\xe7\xbd^5\x1fo\xaa\xf9H\x07\xb61 \xb1\x80\x86\xa6f\x9e{=%\xc3eU\xffE\xd5M\xf4\xc2\x8a\xf2\xeb\xe3&\xde\xc8\x9e\x83\x88d\xb6\x9aP\x13P\xec\x178Q\x89 \x08\x9c(&i1\x16\x13\x8f\x9d\xed\n\x9c\xe8\x06\xf4\xc1\x97\xd2\xb4\xdbEgT>\x91R\xb0\xd3\xb5\xa4\x88\x05,\xf1\xc8/\xfbA\xa3\x08\xc9\xec\x14\xa5\x10l\xce\xab\x18!\xc1s\x8a\xbc~\x8e[\xeb\x8a5m\xab\xac\x0d\xc0m\x98.\xbc\x95\xe2\xf2\xea\x94\xa7\x07\x11Z\x17\x9a\xf1\xce\xaaup\xce\x8a\x19?\xdfl\x0e\xf4\x8f\xd8:=4SL\xc0Y\xcb\xa3\xb6\xd3LN\x17\x91\x14\x18\x1a\x1f\x02-\xff\xd6j<]\xd1\x99\x1foN\x11w}b\x89H\x0bz\xde\xd1\xeb\xb1\x00_\xad\x11\x7fT\x80\x83\x96\x18s?\xfe\x1c\xb7\xf1\xe7\"\x88Z\x90\xe5\xb9\x99,J\xc6j\xbe&6\xea\x9e\xc0\xe6uh\xac\x94\xa4\x9f\xf8\x8c\x96\x10\xe9.^d\xc5,\xa7\xc6\x94\xa9\x01w\x91\xdaG\xcd\xddk\xb6#\xf0\xd5`\xe5qv\xfa\xbd\xe0K\x17\xf6\xd1\x99\x0eb\xab\xfe\xd8\xaa\xf6D\xc2\xfaV\x1f\x0c K\x0f\x86\xa3{w\xf5\x13?\xdaT\xb3\xdb\x1d\xde\xf3\xbf\x95\xa2\x9b\x1e\x0c\xa0\xa8\x83\x13Lj\xd4\xc2&\xf7\xbeI\x83\xc2\xf7\xbe\xf5\xbf\x0f#\x91\"!sE\x19\xc5!H\xef\x9f\xe8\x85<\xceN#\x81\x13\xf8~+\xe8'\xfdMl?\x03\x9c\xdc\xfb.l\xf6\xfe\xe0\x86f\xabf\x92Z7A\xb3\x0f\xea\xcd@\xe1WY \x85\xc3\xb2\x0f\xd3\x00-\xb6\xf0\xf7L4K\x13\xae\xe5P\xcd\x0e\x94)\x95\x18\x0c\xbc5\xea#A(\xdenC<\xb6\xcc\xb6\x9d\xc3\xd1\x8c_\xed\x9a\xe7\x02\x83\xfd\xe51W\xbf4\xf5\x8d\xf4\x84\x8f'q\x99\xb3)5,%\xd6[>El\xd5\x0b\xf0V\xd9=\xe2\x95/Z\xe1x2\x98\xe2\xb4A~\xbe`9\x8d\xb4\\\x8e\x8a\xd4o[?\xcf]\xa4\x94D2\x15\xb8bt\x96\xb5jc.x\xbb\xdf\xe4\x84o\xa0OyQJ\xb1\x86\xc8\xae\x92\xc8\xf8\xc3\x07\xc8\xfb\xf0!\xd5\x03\xe3\xa9\xa8J\xbb\xd0'>\x905\xffY6\x8f\x0e\"\xfah\xb0\xd9\xd0\xc7\xf0\x82\xbf\x9a\xbe\xe3\xec\xb4|\xc6\xd7\x85\x8c\xb0s\xae\xaf\x1eJ\x1fE\x03R\xc4\xdc\x04\x94U\xbaOQ[7\xe0\x9c\xc1=\x12K\xdbEEK\x7f\xa4Hio8*\x1eI\x88\xb2\xab\xc0;\xe6\x91WP\xcd\xa43\xa7\xad\xe4\x87\x12o\x8f\xe8H\xb4\xd7\x11U\x1dQ\x85\xd9\xd5 \x9aU\xb1\x03D:\x92\xfd\xfe\xa8\xadMY\xb5)GZ\x0fi\x19\x8f\xaa\xdeyLon\xa1\x06\x95]A\xadzF+\xe2\x8c\x1a\x04\xa2v\xcf\xce\xc0\x80L\xf7g\x96\xf7\xde\xdd\x8d\xe8\x0e\xb4\xd0\xaa\x1f\xda\xd2\x8fk\xa2-\xa0\x87i)\xd42\xb1\x9d'\xb5\xed\xddY\xb7!\xc5\xae\xd3wV5}\xe7\xban\xeb\xa4aq\xa8jX\xf14FF\xfb\xa2\x13S\xcbj\xed>\xa4\x15.\xd5\\\x11\x7fI)1Z\xa9\xd5<-\x9c\x1f\xd2qvZ\xf9\x02\x95i\xa1\x9dJH\x0e\xbf\xc4\x94jKD{*\x00\x91.\xc2\xb5\xb8\xf6R\x82\xc6Va\x06\xd4w\xb9#;\xbe\x97\xb32\xf5~o6J\x12\x03\xdc\xaa\xbc\xcb\xb5_*\xdf-\xca\xb9_\xd3\xfaU\xb4\xd1\xd2\xbc\xd7{4\x18a\xbf4\xf8Z+-\x17\x87\xddy\x19v~\xcfx\xe4\xbfV\xe2\x9c\xd7A\xfc\xaf\x81\xf5_ip\x06d\xa6\x84\xf9)\xefv\xa3Y\x9a\xc5Y\xb5\xbb\x92\xdc\xe80u2\xb0B`\xcaq\\\xf2%\xad\xfbr\x1b \xda\x95.\xab\xeci\xbe\x05'\x1e\x9eS}\xb8\x85,\xc2\xddb\x1d\x10\x12\x9c\x01h\x9el\xc9nND:M\xd3tN\xb2\xf4Jf\xa7\xef\xe8<\xf1K\xd3\x8aR\x8bI*\xb7\x84\xcd\x12j0=\x9eO\x88A\xae\xda.\x1a4\xabT\x17\xeaBh\xab\xe1DmO\xca\xcdf\x86\xb7\x16\xf5\xebn7\xca\x1c\x159\xeaI\xd7 \xec\xa3\xcc\x91q\x95\xc51\x99\xf7zd\x07\x12$\xc9L\xd0c\xbb\x11\\U\x13\xb8H\xafX\x00\xa4\x9c\x10\x18D5\x18\xe9\x81\xad0\"\xb7\xa3\xbc\xdb\x8d\x16\xfebIsLV\x90\xd8\x04|\x85\x89\xec\xf5\xae\x9b\xa4\x85\xdbn\x08\x08M\xc4[\xf4\x8e\x80a(\x1e [ \xc3\x16\x0f\x86##Z\x8cb`\x1a\xb7z\x8c\x82ZQ|\xa1\xf4\x05Se\xa05\xd9p\xdb0\xcbd\x06\xdb>\x84\xb1\xf6L\x92J\x8f\xf5\xdb4\xba\x88\xdbH\x1e\x0c\x15\xc0B\xa3a\x17k\xf2\xd8R\x91F\xd2\xdb\xeeW\xbe\x92\x8a\x8e#\xd9\xce\xa5d<\xe3\xcbwt\xaet\xbf\xc8x\xc1\x11\xd9\xca\xae\xa4S#\x88\xac\xeb\x10\xed\\K\xee\xe6Y\xa4\xa1\xd9\xe8s\"\x8b\xc5+c+M\x04\xe1\xe9\xd5\x96\xb0\xfaQ\xa9\xe2[Z\x91p\x81&\x94>Q\xa4l,\xd4\xfe\xa3\xd2\x01\x1f\xa7\x03\xa5\xf3\xab\xd5D\xc7E\xe5\xe8\xc2\xb7\x91$cd1\x86\x08r\x18C\x04\xb5aK%\x03\xb6\x10A\x80)\xf8\xdb\xc0\x14\"\xc8b\n\x11\x14`\xca\xfb\xae5\xbc\x13ShRqO\xc5\x05\x03\x17\x02\x13\x94\xe5\x05\x1cfq\xdf\x99\xe2\x82\xc3\x16\xcf8\xe8\x00\x99x*\xba\xe7e\xe2e\x99$\xf0Z\x08Y\x92\xa2\xefT\x12\xd1\xed\n\x08\xb4\xee\xd13\x9c\x15\x12+),\x8f\x8e\xd4r\x13\xdb\x88\xc5\xcf\xf8r\xc5\x0b\xb5 G\xbf\xd5=\x10<'\x93\xea`\x04\x19\x0e\xa6\xe8\xff7\x0e\xc4}|\xb9\xa2ejh\xe2\xc9\x8d\xdb`\xcbs\xed\x1e\xb60{X}\xd4 \xdd\x8eU\x8f\xbaU\xd9&\xc2\xfa\xed[\xde\xee\x88\x9f)Y,3I\xe3%\x9fQ83\xb35\xd1\x81\xdd\xf9\xf3\xcd\xe6`x\x90\xa6\xdc4f#\xa0h\x8f\xf0\x04}\xa4\x97\xe0\xd0\x94\xa6\xa9\x80;\x86\xedh\x98\xa6)\x0bx4\x90LJ1\xe8\xec\x12b\xbaD\x99R\xd7\x0d\x00\xa9\x88\xa7|u \xc8<\xe6:\xdf\x80K\xae\xd4\xa6\xcc`\x1b\x9c\x880)\xdcy\xfd\xbfeOC \xc2\xc1s*\xd8':\x03`\x14\x9f\xd53\x1d\xaev\xcb\x93\x9b\xd0C,1\xdd\xd0k>km\xa0q\xb0\x1c\xa2\xebp\x98\x0cT\x0b\xf5\xa6\x9bAsjq]\x86\xd8l\xca\xcc\x14\x15DMo\xd2\x84%\xa2x\xabf]\xcd\x17\x07\x1a\xd0\x93\xcb\xd27<\xf2v\xa4\xfd!\xc9\xe0~c\x94\x99k\x8e\x1a\xdb<|\x9d\xc9E\xbcdET\xe7\xa7\x0c'.b\x11\xa4l6\x03\xc2kt\x91m\x1d##\xdeF\xf2Z\x89a\x88\xa3\x16\x8a2\n;#4 \x9c\xff\x0cVMCV\xed\xc3[}\x02\xbcp\x81*\xf4pa\x99\x10\xb5\xd1\xd6\x92\x8d\xa5\"\xc4\xa2\xdb\xf5\xe8\x02)\xf7v\xcb\xa9\xc7\x1a-\x93 z&\xd5:\xad)\xef)\xc3\xa4\xc9\x9f\x7f\xe3\xa4\xd04]\xe3\x85\x8e]=\xf3\x8em\x9f\xfd/>\xb6}Rg\xee\xfe\x9c$\x07C\xd2\")}\x87*\xed\xe5\xe6\xbb\x85U)[\xf2$\x14\x04\xea\xdb]\xca\"\xb5=A@\x84/o\x94\x0d\xde\xe5x\xeb8\xb4l\xf8\xb7s\xca\x7fe\xb9\x86\x91c\xff\x13W\xe7\xd4S^\xae\xd1]\xd69\"\xcf@u\x11M\xd5E\xbb\xae\xca\xec\x14\x82\xb3(\x15\xe3\xbaU\xf4\xd6[Eo\xff\x17\xaf\xa2\x97{\xa9H\x1f>\xc8\xec\xb4\xaf\x11C^\xd6\x96\xc6\xcb\xda\xd2\x00\x9b\x04\x1d\x82\xe7\x8fZ\x1d\xff\x9eeq\xdd\xa1\xe8\xd4\xce\xf9s6{]?V\x82\xa52]\xd0\xe9\xc7\xefM\x14\x0f\x12\xd6\xf8y5\x0bT\x80]U\xdc\xf7\x8d\xcb\xb1t\xf2\xc0\xc6x\x1d\xc9n\xb7\xe8v\xddv\xd0E\x14\xd9\xbd\x893\xfb\xb7\x1bN\x97\xaa\xc5\xce\xbc\xb3&8_j\xec\xd8I\x9eF\xf6\xd8\xa9\x88\xd9\x0c\xc3!\x93\xd9\x83\x07\xc7K\xc1\x91\x92\xb7-K\x0b\xd8\x9e\x83\x1e0\xd3\x1f\xef\xe8\x9c,\xfe3\xf8Lq\xf3\x86\xcd\xfb\xe9\xef\xaf\xec~\x8d\xa9\x02\x06!\xde\xb6\xcb\xfb\xe9\xd7\xb2\xa8\xd0?\xd5\xce\xefZ\x86\x963D\xde\x02C[\xd4\x18\x1a'\x11Uh\xa1\xe3\xd5$]\x13:.')#\x14\xe3p\xb3E\xf1\x95\xd4\x9b-Jf\xdd\xeeL\xe9\x9a\x15'\x84h\x9b\xcd\xd0\xe6\xebC}[\x99\xa0y\x96\x97\xd4\x06\xb2\xaa\xde\x12b\xed\x05\xaa\x18XSb\x07\x9a\xcc7\x9bh}\x88\x06\x08\x04/\xdeb\x08\xe5\xb9\x93\xef\xfe\xe4\xf1\xdd\x9f\xfe\x17\xf3\xddw\xfb\xf3]D\x1a\xf4\xd5\xe4\xcd\x15\xf6\xddn\xd6y\xae\xdb\x13<\xed3nO\xc0<\x97\x8f]n\x18`\xd6k\xdc\xc8t\x04\x11\x97\xd5\xe6\xf4\xd9jf\xed\x90Q\xd9]7\xc1\xdd\xe5_Xs\x15}\xe0a\xc9\xf3Kz\xe8co\xa7K\x0ed\x9c\x1b\xc7\x92S\x9e\xcf|'\x9ax''\xbf\xd1\x8a\xdc7y\x0fsZ\x9e\x91\xf6\x10\x17\xf8):;\xf3\x9a\xff\x0d/\xf2\xcb>p\x18\xbf\x95yN/\x1a\xcfP\xef\xf0\xce\x0d\x1bT\x0b\xa8_\xae\xa7SZ\x967\x8c\xacQMPm\x0d\xf4\xb9\xf5X1\xe7\x9f[\x87\n\xc1\xc5\xcd\x95:\x9ee\xbeZ`\x8di\x04\xa6\xe2\x9c\x9b[g\xaa\xdby\xdc\x99\xb1O\xa4\xfaZ \xda\xb2N\x95bz\xd1$\xeb\x91\x83\"hng3^\x85\xd0\xab\xe3\x0b\xe7\xf9\xc2y\xbep\x9e\xd6j_8\xcf\xbf\x87\xf3\xdc\xe8\xca4\xa3O\x15\x0b\x88k\x0f\xb5\xd5\x1d\x9a>\x99Kx\xa8f\xd5\xd7_\"i]\x9b$/\xb2\xfc\x0d\xc4\xa1&2\x06\xc7c\xd0\xddb\xb5\xcc\xa1E\xbcW\x93\xf00\xe7\x94\x15g\xf1\xba`\xb2\x87\xe0\xe5\xcb=\x13\xd1^=\xfc\x12\xc5\x83\x07D\xee\x1ez\x03\xd0\x06\xce\xf4\x88\xe9\x85\xb4\x1e]7\xd4hC\xc7~\x9d\x08Z\xaexQ\xd226\xebJg|ne\xbb\xba\xfe\xb9\xdaj\x8d\xfds5a\xa5\xedYuOB4\xf5\xee\xdf\xb65}*\x80\xd7\"y\x1a\x1d\xd1\xe8k\x8e\xa3\xe7j[\xf0\xfc\x9f\xd8\x168)\xe9\x075\xd9!b\xef\xea\xa7*\xdbdG\xc0\x85+\xc1=TRy\xe0\x85\x11\xf0\xbd2\xef\xd5\xc5\x8d\x95*\x05\x17\xcb,\xbfN\x14\xcf\xb2rAg\xd7\xc9\xcb\x9a\xc8\xab \xf0\xb9\x97a\xfd\x8eg&yV\xca\xa6\x9c0n\x82^\x8c\x01\x9d\xbe\xfd\xe3%\xdf\x8ep\n{r\xe6\xcf\xe2\xc1\xfb)o_\xe8\xe3\x0b}\xfc\xbaK\xc4\xfe\x1bD\xe5?/O\xee\xee\xe4\x93G\x14\x1e\xb7\xfd^\xf1\xc8\xef\xf7\xe4\x91wn\xdfV\x7fnw\x9ef%\x9dux\xd1Y V.\xfb\xb3L|\x8c\xa7e \x99w\xf4\x04+\x8e>\x86S\xa4\xdb\xe9\xad<+\xce\xd6\xd9\x19\xed\xdf\x9a\x00\x9eW\xa25\xcfb\xfd\xcem;\xe9~\xd0\x91\xc6\x94C_\x9d\x86\x9bw\xa7?\x88\xe1\x15c\xf0\\\xb7\x1e\xc8\x9d\xda\x9e#\xa7s\x1b\x1b\x06:\xe9\x97\xf0\xe8\xad\x02\xcd&s1\xeb\x1b\xb4\xd5\xd6\x17d\x81\x19a[\xc6\xb9\xc8V\xb5\xf4z\x18(\xb7\x80\xfaK\xfe{\x1f\x14gX\xdf\xf7M\xf9>oI\x0cSLA\xf3\x1a\xf4\xe2r\xb5\xa0E\x19,\x06h\xbb=\xa3lMo\xa6\x99\xd5\xfa\xff,\xe9\x8cej\xb6\xab(5\xd7N\xf0\x8dS\\\x9b4\x0f\x88\xad\xd7\xef\x9d\xdb\x9dg|F5\x9f-\xcd|\xdf\xd0\xb2[\xb0U\x84\x03\xc7[c?\xa0OKH\x18\xd3m,\xf9GZ\xc4S\xbe\\\xd2B\x12/i%x\xce\xcf\xfc\x94\x19\x9f\xca\xcb\x15\xf5\x93\xa6\xb3Lf\x15\x9a\x80\x90\x17e\x1e\xdd\x1b\x90\xce\xdd\xc1\x9fH\xc7E2\n\xfb[\xa9\xf5\xbb\x86H\xf1\xb66W\xe4'/\x15\xe8\xdf\x045\x8alI\x81bo,\xe9\x00\x87\x0b\x1a\x1fN\x99\x05#\xd1N\xa6\xc1@xQ\xca,\xc4@ n\xee\xb5\xd1}u?\xfb\xf6\xf4\xf4^K\xbf\xa7\x9c\xe74+j\xe5\xe7L\xd0S\xc1\xcc\xc2\x0ckh\x11\xc0\x03@2)E_\x0d9\x80\x04\x1ce\x03x\x17YP\xedt\xcdr\xc9\n?\x89\x15%\x15\x9e\x80\xb1\x03\xc8\x06\xf3\xd3,3\x94\xd1\xed\xf4:\x19\xf1~'\x9fX\xc9\x02\xb1\xe4\x06NgwO3'}\x80\xa8gt\xca\x05Lc\xd2Y\x173*\xd4\xeao\xa1\xee\xda\xd4\x98\x01\xd5 \xab8`XK\xd5\xc9jh\xa2\x85d\xe1\x14\xafE\xee\x7f~\xca\x04\xcbNs\xdaB\x9c\xf7\x07\xa4\xf3\x9d\"\xce\x87\xed\xc4\x99I\xb1\xceicR\xf4\x93,^\xeaGz\xa9\x98`\x1b\xf9?\x18\x90\xce}\xd5\xc57\xed]\x08zF/\x82\xc9Z\xae\xb8P\x04X\x9f-\xfa\xdd\xa0\xa5\xbe+\x1e\xd0\x00\xaf\xf4\x92\xb6c\x1a3%\xb6 \x99\xe5l\x1a\x947\x87t:\xa7\xa5W\x8dt\x07\xa19\xeeZ\xd0|\xd5RxFs\xda\xa4>Ag~Y\xad\xe98\xcd\xf3\x8b\xd4\xf5\xb3\xbeH\xdd/R\xf7\x8b\xd4\xfd\"u\xbfH\xdd/R\xf7\xdf\"u1&\xc74Bo\x95\x8cE\x18c\xf2\x0f\x08\xd3\xa56\xcb\xbf\xab\xcd\xf2\xef{n\x96=\xd6\xa0E\x89\x1fp\xd5dv\x06\xf1=/\xb2\xaa/)a\x93\x0f\xa9\xed1\xd4\\\xf3\xc3\n\x9d\x8f;\xfa\x01 [\xa6y\x9b\xd7\x0c\x8cj/\xc9,\x7f6\x05Y\xb1\xa0\x82\xd9B\xc1i\x96w\xa1xs4\xe4*1\x10\xc6Ur\xfb\xfd\xa0\xbb\xc9\xaa\x82\x97\x06q\xe5\xea\xb7_\xbe\x96\x02\x97\x91w\x1f< \x9d\xea\x9fA<\xc45^\xe0\xf4\xab/\x13\xf5\x9f>Q\xfb\x07\x04\xdd;hf\xad\xce\x11\xfb\x9d\xee_C\x8dX?z\xb3\xc5\x98\xfc\xe0\xf8\xc3\xcf\x8a?\xfc\xbc'\x7f\xb0\xa1W\x11A\xbbI\xa5\x8a\x08\xb9_i`W\x98\xfc\x0dL\xa3~\xe1\xb1\"Eg\xe6\x15\xa1\x95\xa0\x08\xe3\xe8\xa9\x82\xf3\xe9\x9ep\xb6\x92N\x0b\xe1X\xc5\xae\x7f\xe1\xa9v\xfeU\xa6\xfa\x0e\x94\xfe\xda>\xe7\xdf\xdf\xd1\xfet4\xd5\x06\xe4\x9fOL\xae\xe2\xe7Q\x14TS;\x98C5G\xb0\x97A L\xd7\x16\xe3\xd1\x7f\xdd\xb9}\xf0_\x9d\xdb\x9d\x15\x15s:\x95}\xfd\x00\xf0i&:\x9f\x86\xf1\x83x\xa0\xf2\x9e\xf1\xd5%\xb0\xa2\xce\xdd\xc1\xddA\xe7\x87\xcbu\xf1\x1b\xed\xfce]\x90\xce\xeb\xe7O9\x97\xa5\x14\xd9\xaa\x93\x15\xb3\xce3^h\xbfh.JU\xf5\x15\x9b\xd2Bm-Am\xea\xbc~y\xfc_\x9d\xdbw\xfe\xcbY\xa8\x9e\xf8\xf1\x99\xce\xa8T\x04\xb5\x96tv\xa4dtD\xbdHN\x7f\xe6\xb5G\xea;\xac\xe8H\x177h\\LF\x8dXf6\x8e\xd7\xea\x02\xe9\xf7\x1a/s:.&\xa9h \xbc\xf7W/D\x97\x0b\"\xd0bA\x89\xab\xfbdg\xc8\x98R\"!\x8c\xd3{\x9ez\xb1\xa2\x9c\xc7\xa8i\xa0\xdb\x8d\xcc/\xcf v\x99\xc9\xe9\x82\x96\x9bM3K\xef\x04_\xeb\x02GF\x8bn+\xb8\xe4\xbf\xefS\xaa\xac\x15\xf2l\xbd\x7f\xe4U\x18\x9a\xf7\x1c\xcb\x85\xe0\xe7\x9d\x82\x9ew^\x08\xc1E\x84~\xe2\x1d\xaa\x1b\xec\x00\xc0J\xad]R\xb9\xe0\xb3N\xb9^)-\x8d\xce*\xd4\xbc\xe7\xdaX\x1b\\>]\x1f\x7f\x01\x0cS\xf3*\xf8\xa1\xfd\x11Ax<\x17\x9a\x07b\x13UA\x80t\x19p=\x0e\xc8\xe1\xefa|>\x1d\x90\xae\x1a\xab\x0e\x16a\xa0h\x8b\xddPQ\x9d\x19\xfa\x16c\x98B\xcaR\xb4*\x11\x91\xf0\xf7\xc3\x07!sD\n\x96^\xc9\xc5zy\xda\x12\xe4\x10JAf\x1f\xf5\xe8\x96\x88\x8c\xb5\xc5B\xd4\x8de,\xd7\xa5\xd4Nl\xbdT\xf2\x142\x00\xc2~_\xa7R\xb4%\x829\x7f\xe2U\xd9\xef\x1b\x17\x87i\xce\xa6\x1fM\xa5~\xdf~!\xa2\x83]\xb4\xf7\xda7\xaff\xeb~\xf5\xfaVM\xec(\xec\n@\xf9-\xe1,\xbd2\xbe{\x97\xe6\xa537 \x8c\xf9\x01OilHD/\x0cx\xb3W\xa4\x82\xc5\xae\xc9H\xe2QQ=t/\xf0\xe14\xa7\x998fK\xca\xd72\xe2l,'8)\xe2l6\x8b\x847\xd9\x99\xe9\x07\n\xa4%\x95\xb6F5\x9f\x1e\x07d\xe5\x93\x9c}\x02Bj\x00di\xae\x06\x15\xde\x02\x7f\xa0RB|l\x97u\xbc\x10\xb4\\\xf0|\xa6i\xa3d\x81\xbd=X\xac\x9b.\x14\x0b\xa8\\JE\x99^m\xb7$g\xe9\x15+_\xc0\xa3}W\xb5\x80\x9c\xdb\xed\xa8d\x1e\xc5\x9e\xb2\xa2\x1e\x13\xca\xb91\x07-\x8f\xe9\xa4\xdb\x8d\xeaI\xe9x\x82I=Q\x07i\x91&\xc3\"\xa3\xf1\xea?%\x92\x1c\x0c\xf1\x96\x04\x00\xad\x8b6\x90\\\x0c\xaaQ\x03\x82F\xef\x8d\x18\xb5\xc2\xce\xd2At 7\x1b\xa1\x86\x867\x9b\xa8p\xb0\xe9\xe9\xa9\x83'\x14x\x00\"n\x87\xf2I\x9e\xb7FL\x02\x19\xe1\x83\xa5c\xdb\xe8J\xe0\x80\x93\xb3\xd8\xccP|Fe\xbbo\x98ek\xbe\x13@\xd8jL?Qq\xd9\x1a\x8dW\x07\x83sh\x91\x93\xea\xe1F\xfbxd3H\xad?D\x923\xed\xbe>e\x0d/7\x08\xe1f8}\x99\x8e'\xde\xda\\\xb3H\x07=\xa9\"\x18\xd4b\x17\xc6\xcf\xd6\xa5\xe4K@\xb6\x8b\xe4E\xcf;^rd\x1e*o\x8aD\xc8E^Q_0\xb2\x82\xc9\xa0\x15r0T\xff\xaf :\x88l\xb9b\xdai\x9f\x08\xc2\x8d\xaf\xfd\x88\xcd#G\xfa \xc2!j\x9dK\xe2\xddn\xc4SE\x11H\xf2\x15\x02\"b\xe9\x18M\xfd'#\x11A\xee\xc5q\x97\xa2\xd7\xf51_!\x82.\x11A\xeb\x15\x84\xfd8/\xd0\x04b\x90\x02\xbar:\x97\xe8@5\xda\x90\x82O:\xfah\xa7\x93]\xb0\xb2S.\xf8:\x9fuN\xa9J\xfd\xc4f \x01=@~a3\xb9\xf0\xe1\xb0 \x1a\x8cW\xaa\x1f\x82.\x10\xd1]\x12\x04:\x16\x9al\x0f\xfc5\x17\xa0&-\xc6\x83 \xc9\xd2b<\x9c\x902-\xc6w'$O\x8b\xf1\xbd \x99\xa6\xc5\xf8\xfe\x84\xac\xd3b\xfc`2j\xe2o\xd4\xc4\x1fL\xed\xaa\xe2\xdb#\n\xe6\x0c\x8bq>I\xb57\xd3\xb8\x9c<\x1a\xc2s\xd3.\x03\x952\x13j\xb6U\xe6c:f\x93>\x1dg\x93~\xbd\x18-\x14:\x94\xce\xb3\x8ag\xac\\)\xadAS\xc3\x9aEJ\xd2h,\xf4Q/\xc7\x98\xc8G\x83\xc3\x9b\xcaM1N\xe4\xe3A\xb7{S\xc15\xc6Dt\xbb!\xe72\xb2\x8a\x18Y\xb2\x8d(\xc91\xf6\x86\xac\x98\xeaf\xc3\xf1\xce\xf6Q/\xef\xa1>\x14W\xb2\xd1U\xc4\xd0XA\x18LTE\xdas\xe6i\x19\xabL\x94\xf4%\xac\x85\xe1\x00o6\x83\xed\xd4gc\xfeBn\xfat\xa5\xcd\xc5~]\x00p\xe9\x84R\x9a\xd2-\xc6\xe3\xc1\xc4\xad\xcd\xcd&\x92\x10*\xb4T\xd0\x91\x96\x86\x8d\xccP\xab\x94L\xaf\x95P\xa4haC\x11\xc5P\x12\xa2r\xd5Zh\x11)\xc4\x85 kki$,\xafV\x05\x89\xb0\xbc\xda\xf8\xe2\x86\x80\x97\xab\x9cMi\xd4\x92c\xdd\xb1\x04&\xc3v\x98j\x02\xa4\x0d\xdf\x8d\x10\xe0\xfe\xae\xcb\xb5\x12\xe1-nC\xabb\xcea\xc7\xbc\x98\xb6D.\xd9\x89\n\x12\xfa\xfay\x88\xe1\x98\x14\x10\xb8D\xc4.E;\xb0\xcd@\xff\xf8\x85\x9e\xfe\xc8d\xd2\xb61\xb1\\\xbd\xdbE\xbf\xc0f\xe3\xc9jE3\x91\x15S\x08\xc2\xeb\x98\xbe\xfda7\x15\xb0\x93\"F\xf3/\x8f\xf9z\xbahm_\x0b\x9an7B\xbc\x90\xaa\x94f\x1e\xacp\xe1s\xd12\xbb\x80\xfao9+dYe\xc5E\xf6\x89\x9de\x92\x8bn\xb7\x9e\x12\x87\x95\x1e\x0f6\x1bS\xe4\xb9\x01\x14r\xbb]\x0bw\x87\xc1\xbd\xc7\xd4\x13~AI\xec\xc6\xf2\x92\xbe\xd5\x87P\xad\xe3\xf1`\xf2\x80)_\x07\xe0\x10V>[\x08\xbe\xa475qG\x17\xbb\xc3bIK\x19\xb56\xbe.\xa9xr\x06q\x83+\xd9\xbe`\xbe5\x98Y\xec\xa4H!\xe8\xcc<\xe7\\D2v\xc2\x0e\"\xa6(\xed\xe6)_\x173V\x9c=\xcb\x19-\xe4;:\x85\xf8\x91q(\x9ft#S\xca\xf2H\xe8G\xde\x95j\\\x93\xa5A!}\x9egKY\xc1\x97Z\x08\xe0\xab\xca4\x0d\xd8\\\xf3\x1e\xb7\xacv\x054vg\x10\xef\xdfe,W\n\xe2\xdf\xb9b\x00,V\xfb\xa7\x08]\xa0\xd6\x90\xfc\xd5z\x84\x9d&\xac\xc38[\xadh13\xfb\xc7z\xcbxG\xbf'\xed\xfd^\xfe\xeb\xfd\x9e\x98~\x0f\xfc\xdd\xc6z\xb5\x12\xb4,\x8f\xa0\xd0{\xb5o \xa7\xa4\xd7\xd8\x9a\xbc\x7f\x0dgR\xda\xd4\xefQ\x88\xf8\xc3`\x9cO`\xef\x97\x1e\x0c\x08\x85Q\xbc\xd7\x93S\xef\xa2oru\xbbv\xca \xe9]&\x19oT\xb8\xe37G\xfc\x1eu\x07K%f\x95\x04\xf4\x8a\xddni\xc4\x87\x1c\xe3\xa0!\xa5 \xa5s\x16E4.\xe8\x19\xbcv\xa7Q\xf4d\xf6\xdb\xba\x94\x8a\xe6{\x96\x8cTY|;\xe8\xad\xdf\x00\n\xdf\x89\xc2\x0e\xfbu\x800\xc6I\x1b\xf6\x86\xd7L\xd8I0a\x9a\x9e\x9b3v\xd2>c\xbax0e'\xf5);1K\xa6\xd1\x8b\x994\xd3\xb4YI&\xad1k:\xfbN\xd0\xa4\x8fn\xdbK8q&\xf5v[C\xc1\x10\xc2\xb9;9\xe6+5u\xc5\xed\xb0\x9d~\xb3C\x7fR\\\xa1Zg\xb5i9\xa9\xa6\xa5N/\x8f\xd3\xebI\x00\x94\xd4\x1a\x89\xdd@4\xf5q\xd9.v\x0f)\xec\x04pqS\x15L\xda\xf6\xd9W\xda\x9a[z\x00n\x89\xf0\xd9<\xf5\xd8\xfcH\xc6\xac|'\xf3\xc3\"V\x1b\x8aT\xee^6\xd4[6=Y\xe7\x052X$\x89i\xce\xaf\x03]\x1d9D\xfd\\\xb2\xe2\xec)\xd8\x83\x1f\x16\xb16\x0cw\x1c^\x15\xd0y}\x91\x14\xb1\xe4\xab \xeb\x98\xafzb\xf4g\x1e\xc9\x1aw&\x85\x8b\xda&\xf9*\x11\xc4\xdc\x1bI\x1f\x95\xdb\x10\x92\x13\x80\xe4\x1d\xac)\x8b\x0d\xae\x8d\x9a\xd3pT\xfdhO\xf4\xe0\xbe\xf4\xd97\xcc\x9f\x9f\xf2f--\xde\xbeK\xaa\xbe\xeaU\xfc&\x93\n\xb4\xcf\x9a\xa8\xbb\xb7o\x98\xaa\x000Ue\x07\xa4\x89\xeb8,\x1etW\x9b\x13\x90\\J\xd7\xacM\x15\xb9\xca\xf5\x90\xc2UE,\xe9\xd6\x96S_O\xdfS\xb8q4$]o\xf3\x84\xc0\x8c\xcbp\x0dU\xf3__\x14\x99\xe9?\x0b\x1d\xff\xb1B\x94\xda\x80\xcb\x18v9\xb4\x84\xe7\xc5\xf4\xcf\xf1\x00\x8e\x16\xc6|\x92\xfai\xf1*;\xa3'\x98\xac\xc6\xf9$\x9d\xf7\x16\xb7\xa1H\x7f\x86 \x9cTL1Y\xe8\x1dz\\J\xbez+\xf8*;\xcb\xf4\xf6\x14\x02\xaf\x84\xaf7x\x83\x8f\xf0UfZ\xa0\xe3\xf5\xa4\x95B\xec\xcd\x81\x9a\x03h\xc8\x1d\x89\xc6\xfc\xbc\xa0\xc2n\x8e\x08Z\xf2u \xd5\x10Y\xfa\xcf#A\x84\xe8\xaby\xaa\xc0'\x997\xdc\xeb\xc6:KU\x16Y\xa4\x10\xbf\xa7\x0f\x01Q\xeeD\xe6\x0c\xa9\x9c`\x92\x1dZx\xda\xa1\x81&-4It}\xe1\x00t7P\xb5\xed\xdeQv\xbdB\xe4\xac\x0d\xbb\x0dL\x9a\xc5X\xa1\xb1e\x96\xb6!t\xe3lb\xba\x81\x03\xc7\xf0*\xea\xd2\xec\x1bZ\xaax\xdb\xe6F\x1dr0p\xf7V\x97,\xbdB\x00P_1C\x14\xdc\xefTD\\C\x99\xc7sw\x02W-\xfd\xc6\x10\x1b \xd7\xe5E{\xa3\xd5\xda\xd4\x94\xd17{r\xf8\xd0*r\xbf\xde\xd4\xae\x0d\xacR(\x1e\xd7\xf8\xd9\xe10\xe9\x0fG\xd5\xf5\x8fcm\xbd\xb4h\xaa\xb2\xbb\x17\xdau\xe3{\xffG#\xec\xfd\xfe\x08{\xef#\xec}\x13a\xef\xafE\x98\x92\xd7\x8f\xeb\xc2\xaa\x1de\xa0\x14\x848\xd3\x1b\xbe\xebP\xb6%h&\xb2\xb3>\xdc\x89\x86t\x08\x9cy\xdc<\x11\x9f\x86'\xe60,DP\xa5\xf6\xbaSs\x05o\xf0\x11f{\x87\xea!6\xd0\x04\x93z\xef\xc1M\x81\x7fs\x00th\xfa?\xa9\xdd\x1e(\x12\x0b>v\xde.\x84\xf4\x8b&xK>\xd2\xcbS\x9e\x89Y\xd2<\xe2\xf5O\xe1\xaf\xe3j6\xbat\xf8\xd2\x02<\x1fS\xc4\xac|nC-A\x1bt\xd6\xed\xb6\xa5Fx\xb3)\xaa\xb0L&\x15w\xbb\xd1\x8f<\x92\x04i\x8b \x847\x9b\x1fy\x8d\xe8\xb5\xd5U3\xeb\xa4\xca\xb2\xaf9\x11\x9e\xb6?\xc7p\xd8\x9e\x9c\xd4\x06\x1b\xe6\x8e\xd8<\xe2\xfaF\xeb\xe5\xf7\xef\x9e\xbc~\x81 H\xb3\xcc\xce \x10>O\xb9U\xa9v\xd4w\xaf\xcc\x8dx\xac\xcd\xd4\xdfq.GP\xb3\xfanv\xfa#\x8fD\xca \x82\xe7\xa7\xc9\xd8tBg\xfa=\xc5\x89A\x85\xb0q\xb9\xae+!\xe9\x85\xcc\x04\xcd\xae+\xa3\xcd\xf7\xdaJ\x98K\xba\xad\xbe\n\x1a\x90,\x1d\x8c\xcas&\xa7\x8b\xa8\x88\xcf\x17l\xba\xc0W\xd3\xac\xa4\x9d{\xdf$,-\xe2%\x95\xd9\x8f\xf4\xf2\xb0O\xeb\x1b\xba,\x97^F\xb5\x14\x93\xfe\xbd\xc1H\xbfa\xa0\x1b\xfa6\xc9\xbc\x86j\x1b\xf5\xaa\xa1\x06OMj\xed|\x17\x00\xb4\x0b\x9e\x068a+\xf7\x07\x014\xfd\x9d\xe04O\x10\x1a\x03\xbb\x0bM\x95\x0b6\xdf1\x80f\x1bA\xfd{I\xd6<] J\xdcO\xb2\xf4\x86F\x1e\xbaF\xdc \x82\xfc\x07U\x13\xf5\x02f\xed&\x86$\xae;N\x1c\x1c\xa4)\xdbl\xae;\xc0RE\xb2\xcd\xc6?5\xee\xa7\x19 \xc5\x003\\\xbf\xe2;U$\xfd\x1d'\xcfj\xf9@\x1cv\xcd\xa1\x9a[\x9c\xea-\x0eS\x92w\xbb\xe2\xf1`\xb3\xe1\x8f\xeb\x98i\xe2\xb2\xdb\x15\x8f\x06\xb6\x05ox\xe7\x0bJsO*\x99\x05\xe3\x8f\xc6v'\x1a\x80\xbd\xdf\x01\x18\xebv\x8bG\x83\xcd\x86y\x80\xb5\x1f\"v\xbb\xc5\xe3\xbd\xc02E\x06\xdb\x88\x91\x0c+N\xddP<\xb7 O\xa1\xe6\xb52\xc3)\xe6\xde\xbb;m\xe5g4\x97\xd9{R\xa4\xfd\xe1m\xf3u\x12<\xa4\xa6(Av\xbb\xeew\x01\x17\x86P\x1a\xa0x\x0e\x0d\xdcy\x08\xc1q\xab\x94\x93;\x0f11\x0d\xbe\xd6/\xf3\xc1f\xd7K\x88\xe4\xedt8 \x85\xfa\x17\x13y\xa0\xba)\x0e D\xbf~\x86\xc9o\x0f6\x87vq\x8e\xfb\x05\xe9\xcbI2\x96\xa4\x98l\xf5\xf3\x86B\xed\xeaX*\xc6\xc3\x89\x9a!\xff\xca\x1c\xc8R\xa5\xcdXlo\xbf\xd4\x06\xe5\x1fk*.\xad\xed[d\xb8\xb5\x93Yv2\xa05\xffZ\xc0{/\xc6\xda\x95\xf0\x94\x8ex\xb7\xcb\x15\xaeF\xd0\x17\xf76\x07\xaej\xc1bg\xe6\xe5u\xa0\xa9\xf1\x84G\x1c\xd6\x87\xe8vYl\x0dOO\xb4=`t'\xd2\x04\xb9\xc9\xd6\x92\xe3;\xee\x8d n\x08\xd5, \xd5-\xabX\x03\x9bG\xd9\xe3A\xb7\x1b\xf1j\x0d\xaao\xa1\x08\xd7K{\x94\xc1*\xab`\xda\xb2yT\xf8p\xbc\xbf\x16\x8e\xd2\xc1\xa1W\x80\x05\x03\xbe\x14\x14e\x00\x05\x1c\xcc\x0e\xcc\xfa\xf1\x13\x1f\x95z\xadTp(Y\\Y\xff\xd9\x152\xdcF\x85ye\x90p\xc2\x1c6\x0e\x94\xc6\xea\xd6\xd7\xba\xa4O\xb9\\\xfc\xa2\x88\xe8\xc9\x05-\x0f\x9b\xec\xa6\xdbmY\xea\x87\x11;\x0c\x18\x1f\xbb]_\xb5G+JgI\xb0\x91\xe0\xed\x85H\x06\x0f26{ \xbbv\xf0D\xfc0\xe4\xb2;\xdaM\xfcR;A4\xbdG\xfb\x0c\x87\xec\xd5\xaf=\x86\x882% >\x83\xf5\x13\x96\x82\xe9Z\x95D\xb2\x94\xf7d\xcca\xbbb\x8e\xa2\xd2\xfaE`\x19\xd4\x82\x93\xc4<\xf8t-\xe8c\xb74\xbcg\xb4\xef+E\x00UvZF\x02?v\xbf\x0b|\xc86\x9b,)7\x9b\x1co6\xd72\xe7\x08\x08\xad\xdb=(\xe2\xa9\x14\xf9\x8f\xf4R\xbf\x0b\xd18\x8ci\xe5\xda\x8e\x7f\x9a\x8d\x1a/\xa0\x83\xf0xC\x12\x04\xa9\x88\x148i\xd6\x80\x9d \x14\x00S\xc6\xa0^\x95\x87\xc0\xcc\x02N \x02 \xc1\xe6\xd1\x8c\xc5\xc1\x15\xfdf\xe3\xa5\xb8\x8b\xee\xb6\x8b\xe4\xab-\x11\xe9\xc0\x06\xbf\x85\x83\xaezc\x87Q\x1d&\xff\xa4bZ\xdb\xe7\x86g7\xeb\x1d\xb9\xb4\x98!\xb2\xc28i\x83\xb3\xdb\x8d\x0cjL\x02\x18\xe74\xc10N$z\x93\xd4\x02\x87\xc9\xdf \x89\xc9_\xaf4(\xa6\xcf\xd7G~\xafp\xc3\x13Vs\x05\x9e\xef\xea\xd8\x95x\xbd\xabkW\xe2g\xdd\xb9o\x02\xab\x97\\\xb0\xb0\x05 \x99B\xa1\xd7jU\xa9\x0c=\x03\x80\x81\x1e\xebS\xb9\xc3\xda\xf7x0I\x02\xa7fQ\xa8\x91Y\x92\x87X\xce\x85>E\xb1G+D\x7f\x9f\xd8\xb3)\"\xd2\xa8\xa0\xe7\x9d\xe7\x99\xa4\x18\xde\x10dK\xaa\x96\xbd~\xef\x9du\xbb`\xc3\xfcR\x01\xf3)\xcb#\x86\xb7U\xa7\xeb\x88\x99N\xad\xd0\x9a\xa6e\xc40Y\xa7W\xd0[25\xbdB_\xe6\xebdKV\xe9\xda\x9c\xf4\x18\xf0\xc8\xdc\xa4\x9c\x98\x94\x13%g\xdb\xb4\x9e/\xba\xcb\x7f\x9a\xee\xc2\xac\xee\xb2\"s\xf7\xfcq\x16\xa9/R\xa4km\xaa\xd5Ne\x8bt\xd6\x17\xa3\x85\x01\xe9\"]\xddY\x10\x1e_\xa6\xf3;\x0b\"\xd2\xd9gm\xc6H\xb8\x05\"Y\xea FR\xa6\x9e\xc8\xd4x\xc8\x80<\xc4\xa3A\xb7\xcba\x8d\xdd\xb0\x1f\xdbl\x84\x02\x14\xb6q\xd6\xa0X}\x18\x16\xaa\xbb>\x81\xe9\xebvA9\xd7\x06P\xee\x8d\xc9\xecq\xa9\x84\xac\xea\x90\xf9\x1d\xb6\xef\xb36\x9b\xc2v\xc7<\x12\xadvU\n\xc1\x8a0\x1a\x97%\x9e\xf9q\x84\xaf\xfc\x8d\xf19[\xd1\x17Y\xc9\x8a\xb3n7\xaa/l\xc2\xd2\x92J\x97\xe0;\x1f\xd0\x98\x95/\x0b&Y\x96\xb3\xdf\xe9\xec\xb0^5\xe1\xf1\x85\xa2\x9f\xcbC\x87e\x1e_\xe0G\xf1`\xd8\xedzI\x97\x90\xd4\xac\x1ee\xd1\xbd\xc1m\x1e_\x10\xf8s\x89 \x8f/n\xa7\xf1\xb7\x8a\x1a\xd4_\x9c4\xd8\x10&\xc3\x81\xd2E\xb6\xe4\x13\xdbm\xc6\xef\x1b[K\xd8\x8b]m1A\xdau\xbd2\x19W\xaa*\xad\x8e\xf3\xc2\xbd\x14\x05\x8b&P\xa8\n>\xa3p\x1e\xd70\x9e.*\x17\"Vv\xca\x15\x9d\xb29\xa3\xb3\x8e\xe4\x1d\xe60\xd7y\xab\xfd\xd0\xdc\xfd\x1e\xc2\xe13\x115\x9f\x0bZ\xbb\x94\xa1\xcc\x18_\xda)M\xaf\xac\xe9}2\xf6\xafG\x823j8U\x85\x83Y\xe4T2\xad\x91\xa0 i\xde6jo\x98\xe6\x95\xa6y\xf5\x01\x12}\xe7\x91dH\xef\x99\xe4\xc0p+\x19\x98\xd4\x93zjx\x84\x031\xf0\xc3#\x1bH\xaa\x8859\x18\x90\xfa\xf6G\x15\xa9k\xb5\xaa\x9c\xb7\xa7\x18n\x89\xc4\x01\xba\xc6b\x92\xca\xb1\x98h\xef\x8ep\xbd\xe9{\xcf0\xc3\xa8\xf1a\x8e3\x01l${\xc5\xb5m\x07a$\xf3\x0do\x9d\xb2\xd2\xb8k\x83}:\xde\x92\xf2\x86\xe2\xd5%\xa7\xa9\xa1\x87\x02\xb7\xee\xee!~p;\x8cu\xe4R\xc6\x0br\xe0\xbcl\xa0\x1cXt\x05\x00HKW\xac\xfc)\xb0\xd5H#\x16X\xc6\x10\xff#\xed\x0f \x0f\xb2\x1f\x0d\xc2\x02\x8cp\xd3\xf0.\x13\x90\xb4\xb5[\xb7\xb7u\xac\xb1\x12b\xc9\xc0\xb3?\x06[\xef)\xd3)\xc1\xe9zZ;m\xdfl\xec\xea6+\xc8\x127\xdc\x9f\xa4\x7f\xe5Q`\x80Ih`\xe3\xd8R\x05\xd7\xdb1m\xc0\x9a3\x8d\xb4T\xbb\xae\xd9F\x05E\xb8\xdeS\xbc2;e\xfaM\x9f\x81o\x84m\x14\xec\xb0\xaa{7(\xdb\xa3\xe8i\xbe\x16\x88\x94\x8d\xfe\x8d%ZE\xe8UV} T90\xf3n\x0d\xe4\x8a\x1a\xdb\xd07\xaa%j#\xaa\xd4y\x12\xe4\xc6\xd2J\xb1y\xc2\xca\x9f\xb2\x9f\xea\xcd\xe8\x1a\xf8024\xd4j\xb1\x95\x1e\x0c\xeb\x00\x1a\xeb\xbd<\x96\\m\x81\xae\xafm\xa8\xadn\xd5\xa3\x1b\xd0\x91\x05\xd4\x80!\x11\xf7\xbcT0\x8c\xd2\xc9`\x00\xd4D\x01\xb9\xb2\xe1P\x11\x04\x0cB\xf65\xda\xba\xad\xaa\xeeL;j\x83\xd1V\xcfK\x80~\xf6\xe8\"l\xbd>}\x9e-l\xcb\x9c\x9e4\xd6\xc8\xe5Mk\xe4\xa4m\x8d\x9c\x84k\xe4\xb2\xb9FNnX#'\x8d\n\xff\xfc\x1a9\xd9\x7f\x8d\x9c\xec\\#'\xbb\xd7\xc8IC|TY\x8a\x06\xdd\x1a\x996\xd7\xc8I\xdb\x1a\xd1\xc6v\xd5\x12\x99j{\xbc\x9d+D\x97oY \x9e!as}\x80\xad\x9c\"\xb9)\xdc\xa5\xb7\xac\x90\xa0\xfa\xa0^\xbd2\xc4\xf3d\xcea\xf3\xb8\x1e\xa4\x94=\x9d\x9f\xb3H\x1a{\xfc\x1e\xfc6\xf18\x1c\xb9\xbb\x14=&\x9d\xd4\xb6\xfeds\xfdm\x1bD\x94\x84\x94\xef\xdb\xd6\xe9\x91\xeb6\x8e\xf9\xaaj\xd8&j\xce\xb0ke\x9f\xdc\xb8\xb2\x03\x83f\xdd\x9b^\xc9j\x17\xd3\xf3\xbe\x0d\x7f\xbb\xb9\x8f\xb0\xf9\x06\xd5y\x16\xd3^\"\xcd\xa6\x8b\xf4\xea\" \xe4w:84\x1epA\xfac=\x93\xc1~\xc5\xa5T*\xd4!\xb8\xc5Yoj\xdb\x80\xda\xd5\xb6\xb4\x0b\xb6\xc6~\xb3\xd6\xdaq\xd1\xd4\xc0\xbc\x86\xb7\xc4\x10\x15xAW\xe4g\xf78V\x1f\xbe\xd6\x93\xe1\x92\x8d\xe9$**g\xa6<+\x8dR\xae\x16\xe6\x0e\x0b\xe4z\xd1Wu\xbb\xe1v&b\xcf\x1d\x8d\xc5D\xbb5\x0d\xbc\xdd\x0b\xf9\xc6Vj\xc1\xa06\xde\x8e>\x05\xfe\\\xed\xefA:\xa7p\xdd\xe5gj[>\x98f8\xde\x1cW^\xe6\xbe\x0ev\xa3\xbcq\x84\x7f#\xf9\xde,\xfcv\xa8\x10u\x91x}1#(w\xaf\xc3\x1dL\xb8\xb6:\xaf/\xb5s\xcd\xd6\xd1S\xf0\x82\xee\x85\x1d[\xd0\x12\x04Y\xe9\x1f\xda=\x98\x0c\xc0\xf9x\xe0%kw[\x97~#${A\x81\xe0\xa6\xf6S\xe8\xe1g\xf6\x08>9\xd7\xa8q\x07\xd0-\x04w\xccW\xfd\xe6Rl\x0c\xab\xa5&\x9c\x0e\xb7,\xcd\x9b\x96v;\x10\xed\xab|G\xb7u\x94\xcch)\x05\xbf\xbciyj\x0e\xe19U\x92\xbf4&\xa9%\xed\xa4\xad\x9cV\xb3\x9ae=\xf5K\xef\x19\xdf\x96\xf0\xc0\x1c-\xa30`B\xab\x0e\xdf\xaa\xb3\xb4\x96\x04\xcdp\xa7\xcaXe8\x86=\xac#\xad\x06^\xd3Q\xd5\xf1\x1f\x1b\x8f\xa6=\x19\xa5[\"m\xc0\"o|\xf4B\xd2bVb\xed\xe7\x10\xbe\xc5y\xcd\x83\xca\x9f\xaa'\x8f\xab>\xcc\xb9\xb5\x8bStmv\xc5\n6\x9b\x819])J}\xd2\xf0B3#\xaf\xae&nx\xd73\xe6+\x05D\xb9\xd9\\YY\xe6\xf5a[m\xf6ns\xa2\x01\xa1x\xbbs\xa8;^\x82V\xb0\x19\xad \xdaU\xfb\x17\x96\xe7?\x17\xcb\xd6\xc7\xa7\xa1\xbe\xe1[\xf5\x06\xfe\xd5\x07\xde\xad\xba\xf2}a)Bt\xbb\x86\xf16\x87V\xa9L\x18\x13V\x0bN\xc5\xe2\xefEv\xa6\xefo\x15O\xa9\xe7\x7f`\x90\xde\xacx\xc4\xfc\xc7@+\xab\xd5\xbe\x9b\x80\x0e\xea\x15\xf0\x961\xc0\xe5(vK\xa4\x12yr\xd7\xfb\xc1\xbf\xf9\xf1\x0f\xea\xbd~O\xe3g:\xd8\x91\xd0\xf0\xb6\x072(<-\xec4\x13\xe5a\xbd\x1d\xfd\xaa\xe9\x95\x8e\xe9y\xe5\"\x00\xa3l-9\"\xea[\x0f\xe8)]d\x9f\x18\x17\x895\xffEdY\xbe1\xc5!\xdaX\x82\xfa\xcb\xb2\xaf\xea-\x98\xdaFU\xa1\xd0\xd0vK\xaaI\xc4I\x1d\x86cF\xbcu\xa9\x1fH\xc6\xd1\xd5V\xfb\x1f\xb9z\xd6R\xff k\x8f\xa2\xa0\x03\xc0\xaa\x05\x92\x8e'#m\xc3\xa5$\xa6\xa0\xf3\xa8\x8053\xa21\xbd`\xf2\x9dJ\xa8\xce\xc5\xb5)\xa8\x1f\x9cF\xe0\x11{\x94\xd9\x97iY\xaf\x87m\xd92\x15\xe3l\xcc&\x13\x92\xa7\x032\x0dj\x95N*\xa8i\xcc\x1fMm\x03\xb9}\xbfy\x9dN\xc7\xf9\x84\xac\xd2r\xbc\x9e\x909\xac\xf8\xa5\x1aD\xcb\xf0\xdb1\xb2\xc2\xe4j!\xe5\xeaoT\x9c&\xeb\xad\x8d\xea\xa2\x03\x10\x8djh\xd0\xa1(\xe6x\xbb%\xcf\x9a8\xab!\xc8\xd4f\xb3\xd4\x9e_\xea\xb3\xdd\x97\xb3\xf4L\xf6L\x9aZ\xb4\xa9\x80?:aF\xcb\xa9`\xc0\x96R\xe1\x7fm6J\xf8d+\xf6#\xbdDij*Y\xfdD\xa7\xa7W\x85Z2\x02b7\x13V$\"f\xc5\x16\x13\xa4F\xd8\xac\xa4R\xd3\xabr\xba\xa0PI\xff \xa74\x13T|\xcf\xc52\x93\x89\x88\xfdO\xd5\x14_\xd1\xe2\xe5\xec\x19/\n:\x95\xcd6uvz5\xd5\x05~\x16y\"\xe2\xa0\xce\xcf\"\x87v\xb2\xb5\\\xdc\xf5\x1b\x10J\xcb;/mK\xf0\x91\x9aD\xbc%/Y\xab\x01a\xb9\xa2\xd3\x8a5\x95J\xce\xd5\x92\x14\xe2\xd7\x82\xc9\xcb#\x18 p{{L\x03 \x01\xd1I\xb5/XE\x811\xbb\xdd\xf1\xd1\xf3\xce3\x06W\xdbr\\L\xb4k\xc1\xdb \x08\x92\xe35\xd4r\xeb\x0fS\xc5\xc4\xa9H\xaf\xb6.\xc8_\xc0\xb0K\xdad\xf1~%\xe2\x17\x87(\xd1M\xf5\xdd\x96wQ\xaf\xbc\x84\xc3zBo\x98\x0c\xc3V\xd5\x1a\xfe\xbcF+\x99hS\xfa\xc3\x16H\xe9,m\xd1\xe7\x0e\xeau\xb7\x84n#L\xde\xedBe#\x16I\x15;\xa8\xe8v\xa3\x02\xd6\xfd%\x8d\xae\xdc\xe9\x80\x11\xecia\xa4\xba\xa0\xf3g\x06\xa5\xaa\xec[s\xffpzYWt\x80\xac\xc0\x92\x00\xc8\x08_\xa1\xaf\xb4i\xc9t\x91\x89'2\x1a\xc0c\xef)\xfa\n\xf5\x143Mgt\xcag\xf4\xe7w/\xab\xc8\xa3\x14\x8f\xa4\xb8\xbc\x92\xe9{\x1a\x9fQiZR\x9a\xc2\x14\xd4X\x8a\xaf,%HE\x8b[s@\xf2)\xcb\x19(\x056\x0c\xceJ\xd0\x95\xe0SZ\x96.I\xb5d#\xbb-\xa98Sb\xaf\x84!\x1dQi\xbc\x93%=4\x17\xdc9\x9f\x02\xe3\x8a\x17JX\"4j\xdc\xa2J\xbb\xdaT\xc3?\x8b\xdc\xea\xab\x0c(\x93\xe7\x9f(\x8e8\x88\xd5\x16\xda\xb5\x00\x07\x08\xf4\xafo)\xac\xfcl\xc5\x9a\x97\xaf\xf6\x92\xa7\xb3\\\x97\xb2sJ;\xd0X\xe7\xcd\x8a\x16O\xde\xbe\xec\xdc\x8b\x07\xf1\xa0\x03\xb1J@\xf7E8\xa4\xae\n5\xf5\xce\x0f\xfc\xf9\x8f\x0b\xfed-\xd5\xff\x16\x8a1\xb0b\xceup\x04\x9f]\xec\xe6\x14\x15\x97\x81w\x01k\xdc\x18\x0cs\xdfU&*\x15\x05H\x82lK\xfdj\x0c%\xc2\xdd\xee\xce\nG\xa6\xc2s\xbf\xbc\xbd\x18G\xbf^\xdc\x9b\x1e\xf4\xfb\x9dw\xf49\x9f\xf6_\x16j\x92\x92\xce#\xd4k\xef\xa8\x87\x1ew\xfa\xfd_/\xeeQ4j\x02\xbfCr\xa9\xd9yG\xcf^\\\xac\"\x14\xfd\xf7\xe6\xd7_\x0b\xfc\xd5\xaf\xbf\x96\x87\xa8'{\xe8\xd7_\xcb\xdb\xbf\xfeZ \x82\x18\xc2\x84\x87\x85\xa3_\x7f-6\xff\x0d\xa5o\xbb\xd2\x90\xf85\x8e\x0e\x93\x18\xda\xba}\x88U\xd2W\x9b\xaf\xb1nE\xaf2\x884\xe3\xec\x82:\x8a\xeeVy6\xa5\x11'\xe8\xeb\xe1\xaf\xc5\xaf\x05\xea\x15=\xf4k\xf1\xf5}\x84\x8d\xb9\x0f\x02\x03\xac\xcd\x86\xc6j\xc3\xf1\x0b\x93\x8b\x08AI|\x88P\x12\xa6\xaa\xb4_\x0b\x94\xe8\x02F\xabE\xa8G{\xac\x87\xbe\xeahpu/[5\x0f\x8aVh!\x99^9`\xccX\xe3\xc1\xac\xac3\x0d\xcb\xd7\x94\x14tf\x934\xfeZ\xd0y\xb7kw`\xf0Y#c\xe0\xfe\x7f\xabsJ\xcb\x7f\x1bL\xab\xc9\xb5\x1b\xfb\xb4\x85>\xbe\xa7\xf3\x88b\xcb\xa4\xabv\xa0N\xd4\n\nh-5\xab\x8c\xa6)\xc6\xc1\xd0];\xeb>|\xd3\x0d\xcdNm\xf3\xc4\x84\x8d\xf2\xbb7B\xc1\x16Q\x14\xd0^\xa6j\xa4\xdb=p\xc1\x00\x8d\x9c\xd6\xea\x9b\xd2\xde\nr\x85.\xfaS&\xa6\xeb<\x13}A\xe7(9\x18l\xab\x865\x98\x05\xb6\x96HR\xebXFA\xb3\\X%Vz,\xe1\x96\xd9\x15UX\xde\x00W\xe5\"\xcb\xf9\xf9\xf3\x1a\xc6\xaa]\x82\x8f\xa0\xc3&f\x92Zs\xc0\xc8\x9f\xe4\xf9\x9bymeZ\x0b*\xd6\xb4\x8c\xd1rOMG-\xb2\x9e\x91\x05\x98H\xa5Q\x81\xa9\x80W&2[\xc1\x05g\xa5|S\xd07s0\xca\x8b3\xd5\xbb[\x83#m\x1f\xb7\xb7\x12M1\xb9\x82\x16\x8c\xd10\xd1\xdbs%\x9b\x92\xf1\x84H&s\x9a\xd0\x18\xfen6\xd1ZF\x12\x1f\xbe\xa7\xf1iV\x82mN$\xad\xb91\xde\xda\xb8\x80\x07i\x9a\xc5+\x17\x81\xb2\xdbE\x1c\xfa\xaedW\x98\x1d\xf9\x9fm\xa0_m\x89_\x04[\xac@GL\xd2e{\x1f&'2\xbfv\xb6\x0c\xb9\xb8\xda\x04\x95\xe9\x80\xe4)\xd5\x98\xad\xa9\x94\xbe\x9eq\x10\xc1\xd9\x8c\xe6\x15\"^d\xa5%\x13G\xb4\xccP,%`\x16\xa7\xb37\x1b\x83\xeb\xca\xed&\xad\xb4\x9b\xb4i\x9a\x8f\xcb Y\xa7S\x00\x9c\xac\xd2\xa9\xd6\xbc3\xb0\xb1\x04\xed\xff MWf\x1b\xe0\xcdJ-\xc1\x96\x98\xf2\xa2\xe49\x8d\xcf3QD\xb7^\x16J\x80g\x92\x9d\xe6\xb4\xa3\n\x94\x1dVt\x00\xed\x9dLv\xd0\xad\x9e\xec\xddB\x89\xfa\xa1[\xec\xddB\x10\x1a\x1c\xdd\xea\xadl\xc2-\x8f\x1al7\x064\xf3\x1d\x14\xf0\xc8\xc8\xce\xf7\x1cz\xf5i\xd0\xffPz\x1e \xea\xf9\xb9\xe3\xf9\xe4\xb0\xf6\x9dV*\x9e\x9eW\xb3\xc0\xc6\xb5rA\xa3\xe3\xf9d\xb2%\xb2\x87\xeeTiwPo\x8e\x93z\xeb\xb5Z#olu\x827\x7fa\x046m7p\x90OL+\x06\x18\xf8\x8dp\x80AA\xff\xb1f\x82\xce\xa0#\xfb\x91z\xbf\x81\x1c\x95\xaa4\xcddT\x95\xc7\x98|\x06cZa\x92a\xb2\xd6\xdc\xc1Q\xba\xde\xc6\xaf=\xb6\x98i\xde\xd4\xed\xaee\xb4\xae\x94\xdd,\xe4\xd3sV\xcc\x9eS\xc1>\xd5\xb65ZIT\xe2(u\xbat\xa0c\xb6\xa5\x9a%\xa0w\xa3\x81Ea\xd1&\xac\xc6b\xe2qF\xae\xd9J\xb7k~\x00h\xad\xa17+\x1f:\xc3b\xa8\x0b>\xa9S\xf0\xe3\xfep\x8b1D\xc9@_\xdd\xa9\x00\xbcc\x00\xbc\x83zb\x92\x8e\xf9\x18]\xf4gL)\x91KVd\x92\x9b\x97y\xd0d\xb3\x11\x13\x872\xd9\xd4Q\xde\x02\xe2CE\xdd\x0e\xd8:\xda\x85lh$\x1f\x15\x96\x8dH\xcbFDZ\x8c\xa5\xb1\x03\xb4\xc2Zs+\xb1\xc55\x15\xcd\x13o-3\xd5\x10\xa6\xb4.\xff\\L\x7f\x9bE\x9a\xde\x8b\n\x1e\n\xbe~:\xd6;+\xe1o$b\xae:\xc6Vt\x17q a@\x07JLf\xee\x93\xf6\x86\x96G_\x01\"\x93+\xa8\x97\x98\xfa\xed\"\xa3He\xcb\xba\xf3\x88\xbf\\ \x9a\xcd\x00\x92\x12G\x8c\x8c\xe9\x84dJ\xaa\xba\x13LoJ\x94\xb2Sl\xc1$wKX:\x18\xb1\n\xef\xcc\xe2=KE\xc4@\xa3jJG\x8b\xb1,\x86!\xf8\xea\x92\xda\xd0\xff\xb4\xf3`1\xd8\x9d\x83u\x8c\xd9\x7f\x98\xe8\xcbV\xcb,\xe6z\xab\xf1JF^Q{\x1dv!\xa9(\xb2\xfc9\x9f\x1a\x96\xa4\xb3\xf5R\xf3suyc\xb5\xf0\x12X\xd8k\x06\x8fw\xcd\x8e\xa4XO\xe5ZP\xbf\x83\xe0\x10\x01\xbb\xe3;\x7fo\x08`\xbdd-`\x9d\xd3\xd3\x05\xe7\x1fu\x89'A \x12\x8c\x18\xe0T\xcb\xca\xd6\x80\x90\x0c\xafn8\x05\xd1\x88\x811(\xddJ}e.\xfc\x9c\xc1\xcb*+ft\xe6\x12\xd8,\x951\x9bm6\xb4\x87\xee\xa0\xde\x8aF\x12\x8e\x08\xb1w\x08i\x0e\x15\n\xb8\xad3k}\x95g\x97J?Sk\\\xd7\xd0\x85r\xfa\x89\xe6\xa9\xd4\x7f7\x9ba\xf3\xe8R66\xcb\xe6\xf0FC>\x12J\xd7\xc9]\\\xa5z\xf5w\x10\x1e\xf4\x98^\xc8\xa7t\xce\x05\xfd!\x9bA\\\xfcZ9\"\xc6\x83\x89\x1e v\x88\x85\x0b\xd26\x02 )\x02\x9d \xbe\xd6\xc1\xba-\x0e\xdce\xaf\xc3\xdf\xa0\xf5\xdc\x03\xd0\xddv\xb3c\xe7aPg\x82\xaa\xbdFi\x0d\xab\x91\x0e\xfa\xc3\x14u\xf7\xbd\x15 a\x8bS\x9e\xe7\xd9\xaa\x0c 0\x03:\xb8v@\xc3\xc6\xae\xef\xc6\xc1\x0c\xb7\xfei\xbayy\x8e\xe2h\xfc\x94\xc6\xc5\xc4o\x8d ]\x07\xb9\xb8\xea{W\xb4\x10\xeeQu\xde\xd6g&)2\xd7I{W\xd4}~v5\x8b\xfb\xcf\xaeX\xe1\xdaV\x05&\xf9z\xf7\x01rE|!\xab\xaa*\xf8\xe7\xa2\xfa\x98\x91+\xae\xc0R8z<\xce\xce\xe0\x1c\xe4\x8d\xbb\xc1\x88\xdc\xc6\xa0\xc3\xfd\xad\x00'T\xed\x15_g\xe2\xe3\x8c\x9f\x17\xc0\"#\xd1z\xeceoH\x86\xa4\xc0\x98\x08\xc5*dv\xf6gE|%\x9at\xbb\xf5\x14\xb3\xcc\x1f\x0f\x0e\x1b=j\x10uA\xdd\xa5\xb4\xad\xd7[!Lu\x97\xech\xc2\xd5f\xb6\xbe\xf9\xa3@\xe4\xdb\x96\xc1\xed\xd8i\x9b\x83-\x19 \xac\xd8\x85\xc8\xa6\xf2\x07\n\xcc\xa7\x8c\xa8\x1a=\x1eq\xc7\xb7\xc0\x89\xdf\xc3\x8eZn{\xb1\xb1\x80\x87\xf1\x8a\x87\x99\xe3\xad\xba\xcc\x0cT9\xb7\xf7\x1fb\"kJ\x82}}\xc8\x9c\xcf\xbdb\x112\x97N\x88HB\xbd\xa9\x9f\xd1\x95\\(6\xe9\xd4}nd\n\x8b\xb8M%Eo\x881i=\xb1l\x92\xc5\xce#\xcfH\xa4p\x12\x85\x1b\xe2\x9fx\xd1\xa7\x17\xac\x94\xac8\xeb\xc8\xecLmta\xd3\xcb\xcaN6\x9bi\x0f'\xb9\xa0\x1d\xc0\x86\xcae@\x7fz\x1b\x0c\x9cIm\xe5w\xdf\xb7*]p\xad\x13V\x0e\xb52;CdM\xb4\xab\xde\xca\xe0vH\x90\x12HkM\xdf\xab\xe6\x11J\xa8\xae\xb6\xf0\xa0u\x83\xceV\xc4\xb4\xde\x1b:+\xf03*+\x1eggoE\xd6AQL\xcc\xceo\x85\xf5\xe3\x1a\xb0m\xff\x9f\x82\xc60\xa4\x1aH\xa3\xd2gh%\x99+]\xdc\xccwih\xac\xd6V\x83s\x11\x1d\x84\n8\x83\x7fYm\xdc\x98uk\xe3\x89w=?\x9e\x90,\x1d\x902(?\xca\x1e\xd9:\xa3\xccNx\x9e\x96\xe3\x0c\xde\xf2\xb07\xeb9\x91\x84\xe3\xd1\xd4\xcc\xb0 L#u\xea\xd6\x06\xf3\xd6F(}vl\x01a\xe7<\x00\xeb\x13\xb5\x02`\x07X<\xb2\xfa\xe1\xa8\xb0\xc0\xb0T\x8c\x8b\xc9H\x8e5\xbdN\xf6?\x07`\x98\\U#M\xc6\x93m\xe0\xc9N\x15\x97u{\xf0t@Xp%\xac\x18\xe7#f\xc1\x11\x9e\xf5B\x96\xb2\xb1P<\x08B#\xfe\x11\x16\x0c+@\xc1h\xde\xed\xceM\xd9\xcd&\x9a\xa7c\x84&\xd5\xd9\xe2,\x1d\x90E:\x1f\xcd\x1e-l\x833\xdb\xe02]\x8cg\x13r\x96\xca\xf1\xd2{v\xe5\xac\xdb\x8d\xce\x8c}\xc0\x92\x84\xb8 \xaahz\x86\xc9\x19\x08]\x9115wJ\xe9?k\x18?\xec\x8d\xf2\x15&W\xabL.\xc0\x88'#\xc6;>y\xaf\xef\xdbXN\xa31R\xf9%\"\x19YO0\xa9\xac0\x88J\x7f\x9b\x89lI%\x15e\x02\xda\xb1\xf9P\xc4\x01\xf9GT|\xd2\x99\xa5\xfeE \xb4\x8e\xdaG%\x07\x07fWk\xb9uDc\xe8\x0b\x13\x1a\xee\xb7\xba\xdd,\xaa%\x81 \xae4;\xd8\xe7,E\xb3Lf}#G\xfbl\x86\xc8\xf7\xfb\xdcS\x13p%$zc\xea{\x85Xs\x90\x05+%\x17\x97v\xaf\xa2Ug\xb5\xc2_\xce.\xd2\xbeu\xf1`3\xfa4\x13oV\xb4\xf0\xf6s\xdaF\xebM\x9b5o\xb5\xaa(DP$EZk{\x14\xf5\x87:\x8e\x12\xc5\xdd\xeeATq\x04\xe6\xc3aM\xc1\xfc\xb4\xe6\xbb\xbb\xce\xdfU3\x1a\xf0\xab0\x82\x7fOB\xbf\xb1\xcf\xb6\xf7t\xaf\xe96@\x97\xa9\xfc$\xcfm\xd5\xd2\xd5m]\xf2'iC\\\xb5\xbd\x80\xf7\xc3\xf1\xebW5O#\x1ff\xff\xad>\xaf\xe8a\xcb\xe8\x9c#R\x15=\xb1Y\xaa\xad\xa2\xf7\xd0@2\xa8\x9b\x1b\x06;\xa9:?\xb7\xe6\x85\x95\x01\xe5u\xef\x12\xf8Dl\x91\xa4\xbb\xad3\xcdp\x0b\xb6\xb3W\xa3\xab\\\xdb\xab3Ez<8\xf4\xbd9qR\xbd\xda'1~\x94^\x0b\xdd\x8d\x9am\xa88Y\x9a\xc9f\xb3&\xa1yQ\x0c\x9a\xfa\x8c!\xb3\xb6Zu \x02\x91\x11@R\xf9\xddE\xf5r\xfb/P\xfd\xf1\xf4\xf2\xda\xcch@\x86\xfd\xeb0W\x97R!4\xd5v\xa2\x05\x93\x05\x05k\xf6\x8a\xbbT\xe2\xb1\xd6\xa8\xbfj\xfdU\xf7\xa9r?s\xfc\xa9\xdf``\x8f\x8d\xdb\xde\xcdL\xcd\xcc\xaa\xfa\x13L\xcc\x0e9\xf07\xcd=\xc9\xb9\x8c\x86\x83\x01\xae \x03\x1fh_\x0e\xc0=\xcc\xcf78v\x944\x13\xd3\xc5/\\|lq\xb8\x03\x03T\x8a\xa5\xb8\xbc\xa2i\x11\xdd\x1b\xde\xb7\xd6\xff\x12C\xca\xf0\xfew\xd8\xbew\xa0\xc3\xcd\xd5S-\x85*\x19\xa1\x80j\x93\x0c`\xcaS?\x15\xf6\x97\x01)\x82\x0c\xda\x1ec\xa1\xba:\xa6f7a\x82\x97\xe9;\x7f\xda8\xf5\x06\xcd\x8d\x14J\x83S\x9d\x83'\xcc\xa8\xa8\xbc\x14<\xd4\xc43^\xd0:s\xc9f;\x1e\xee\x0dj\x02\x08D\x9a\xbb\xa1\x9b\xa5OPYR\x01vJN\xe1\n\x81\xd2M44E(\xd3v\xe8\xd1lB\x7f\xc0\x9b\xed\xe1\x86\xf6/GM\xb1\xe3\xfb\xc9f\xe7\x99\xa2a\xac=q\xc3\xfb\xca\xe8\xda\x9ag\x8a\x1fe\x92\xdb\xba-\x07D\xe3\xbb-\xa3U0Ex\xa2f\xa9\xce\x0cr\x9e\x85{\xcffmUD\x0fS-\x0d\xb7\x10\x9e\x06o\xbe\xbe\xcaNiN\x8a\xb4\xda\x9c\x1d\x96<\x91p\xa8\xff\\\xf0\xd5\x8c\x9f\x17$\xab\xb2\xc5a\xc6\x13ai|h\x9cE\xa4wq\xd1\xf0\xac,\xb4_\xa6+7\x1eL\xb4\xd9Q\xd3\x012\xdb\xe5\xffH\xae\xf4\xd0\xcc\x16\xd4z@~\xcd\xc8/\x8c\xfc\x83\xa9%\xf8\xe0\x1bL~`\xe99\x8d\xbef\x9bM\xf4\xf5\x9e>\xdcY\xe7J\xfd\xe9t$\xbd\x90}\xc3\x82\xc0k\xbb\xe0\x05\x1d\xe9\xbc)\xcf\xb9H:\x88\xa0\xd1\xaf\x85N\xea&\xc6(\xde\xd6\xaf\x95R \xdb\xaa0\xbc\x83r}Q\xf8\xc7y\x8f\xff\xc7\xc1\x85\xf1\x8e\xc7\x89\xe4\x82.\x81\xff\xf03\x91\xad\x16\x97q\xce\x8a\x8fe\x0cMm?\xb3\x92\x81\xfds\xab\xc1(\xb6\x18\x93\xbf\xb1\xf4\x88F\xbfp\x1c\xfd\xa2\x88\xe0\x97\xbd\x88@\x0dq\xce\x0b\xd9\x9fgK\x96_V\xc3\x87\xc4s\xfd\x8c\x87K\xccYA\xfb\x8b \x11\xbc\xfd-\x12\xbbI\x9e\x95\xb2\x0f\xde\xba\x15bu\xcc\x92\xbe\x0e\xb4\x96t\x065\xf4\xaa?\x88\xa0\xda\x8f\xc5\xd06PMHc\x86L\xcb\x92\xafl\xb3\xa6\xbd\xc5\xdd\x1bk\x9b\x92S>\xa3\xb6l\xa3\xfd\xd3l\xfaQ\xc9\x99b\xd6o!\xb7V\xbcu::~S_d3\xb6.\x93\xce\xdd\xd5E\x90\x91t\x86\xab\x8bN\xc9s6\xeb\x88\xb3\xd3,\xba\xf7-\xe9<\x18\x90\xce\x83\x87\xa43\x88\x87\xd8\x946\x81\xa8\x92\xce@\xb5\xed\x1a\x81NK\xf6;\xf5\xbbl\x99,\x9dq\xce\xc5\xac\x0f\xf7\x10I\x07\xfe\xf4U\x8a?\xfe\x95p\xc3\xdf1\x9e\xf3\x05\x93\xb4_\xae\xb2)MnF\x8d\x87G\xa8X\x1f\x8d?\x16\xebi\xde\xbfH:\xd9Zr\x93\x1cPY\xc1\xc52\xcb\xdbQ;X]|.f-\x80\xd5\xa4\xb7\x0dE\x8a\xac(\xf5\xd1\xd1\xe8\xd7\x90=\xf8\x83\xf2'\xc9\xb5\xadV\xc1)\x98\xce\x90*!\x9bK\x9f\xd5\xa8\xd6\xe0F!\xe0hfI\x84+\x03\xc2\x16\xfdc\xcd\xa5\x03X\x13}\xb5\x8ej\xcbkH\x97M\n\x1a>pH7\xe3\xf8\xea\x9bo\xbe \xb1\nO\x90v\xee;\x14~5\x9b\x05\x94\xc2\x96g\x15\x08\x17}\xfd6ig8\x18\xfc\xc9\xb5s\xa1(\x13\xba4\xe3\xeb\x9f\xf2\x0b\xbf\x8du\x0eH\xe1\xb9m\xc9\xc0h:\xbf\xeb`\xdfk\x90:k\x9d\x13\xaf\xc1\x9d\xec\xa6\x8d[\x84\xa8\x86'\xa2l;6&\x91\x9e\x00\xbb\x14\x1acv\xc1\x12|\x02\xf6W]@\xbf~\xc6GJW\xfd,\xaf\x91\xb6=\xbeT\x18\xd4\xbf\xc2|\xb5\x0c\x1d\xc1\xd5\x075\x8c\x1f\xd4\x10X!\xcce\x05\x83\x95\x8e(\x9b\x8b\xe0\xab\xf9|\x1ev\xae;\xa9\x08d:\x9dz\xb2\xb7\x90\x0b\xcd\xf9\xa3\xbb\x05\xbenu5%\xac\x07\xd0\x82x\x1f\xb3\x1a\x99$\x9d\x87\xab\x8b\xce\xf0\xde5,\xb5N\xb5\xb6\xd9@\xa5\xc8rvV$\x1dEt\xa6\xa1\x80\x83\x9e\xf20_u\xc5\xcc\xb6\x05{\x8e9\x17K\xb3\xfdP\xd0\xbe\x8f\xfa\x0f\x06\x7f\xb2\xfb\x96\xda\xee\xe7\xbe\xa9X\xa9\xf9\xf1=\xba\xec\x0c\xe2\x87F\xd3\xf3U\x9d)-$\x15\x06\xbe\x8b\xbe~\xef\x1cvP\xf0\xbf\x07\xe6/l\x9b\xee\x0e\xee\x93N\xf5\x0f\xec\x9bZ&\xe1\x0b\xcanB\x99\xa2L\xe1(\xf3GE\x99?\xeeI\x99\xadh\xb2\x8a\xf9`\xa0u\xaa\x9a~\x04i\xde\xf9\xc0 \xfe\xd6*\xfd\xfe\x1e\xbeSp%\x14\xfdI\xfd\x1f\xeaM\xe1\x83;|\xfcE\xe1\xe3/{\xe2c\x07\xd9\x19\xf2\xd2\x00\xda#\x83A@S}\xbb\xf5m\xa5)\x9d\xe8\xca\x04[a\xbd\xa1\xf0\xce\x02:\xb5bB\xf7wc9P\x9d\xcd\xf6d>\x9f\x9b\xec\x9b\x96\xd4\xff\xee\xb1\xa9\xb9fn\xae\xff\xae\xe6\xfa\xef\x7f\xc8\\;\x1eaQr\xd7\xb1\x16\x8b\x15\x93\xb2'\x82?\xa7A5\xaa\xec?Z[\xe0+\x13g\x1aB\xechU\xc1D \xde\xa5\x03\xc8Lk\x7f\x82\xc8n\xb7a\x06\x90\xb5\xc7\x93\x16&\xbdhF\x94\xe6\xd9\x8eP\xd3\xccd\xb4\x84\x8d&e\x96\xb6\x19\x0b\xda7\xc9\xba\xdd\xf0\xed\xc1g|\xb9\xcc\x8a\xd9\x91~%\x98\xcen\xca\x8f\xd0\x94\xaf.\x11&y\xb6\xd3\xce\xa82\xf9a\xa5\xab\xd8b\\R\x82;\xb2~?\xde\x0c\xadi\x0fD\x8a\x91\x83\xe8\x94\xcf.\x0d*\x8e\xe9\x85|\xa7\xb4\xdf\xc3(\x92\xe9\xb5%\"\x8c\xe3%\xffD\x8f\xb9\xe9D\xe5\x80\xd1\x8f\xe9;\xc28q-\xe8\xcaP\xb1\xdb5\x01I\xcf\xa8\xd4\xd6f\xda[\xbeH[\xd2#L|@\xbcfT\xff\xba\xa3\x9f\xf8\x8c>\xd3\x07z\x10\x1b\xb5\xa8LC\xa1d \xcf`g\xb3\x99\xae'\xb5\xd5\xcb\x8c\xea\xda>\x06\xd9\xd3-\xe9\xe4;U:ztg\xc6>=FU\x80\x80y\x16\xb5\xc5\xbb<\xa4\xde\xdb/\xce\x1d\xebN\xf7\xce\x19A\xddl\xb9\x1a!/\x15A\xea?\xd6\\\x06\xc9\x8f 9\x0f\x13\x1fC\xe2\x99JL\x90\x07\xc7\xcc\x87\xa3\xb6\xca(6q\xe5\x86\xa4?\xf4\x82\x1b,2\xdfo\xf5\xd6\xa3r\x95\x15\x16=:2\xe6\xe3[=\x18`\x0f=\xba\xa3r\xfd\x91/\xbd\x1e\xc3\xba\x92\x7f\xa4Eg\xa5\n\xaeu\xa4\xe4\xc7\xb7z\xb4\xad\x0d\x83g\xc3{\x0c\xf7Pz\xa07o\xeb\xba\x93\xb3\xc7h\xa4\x13\xd6\xf9c\x04\x03\x99 L\xf8f\x13\x89\x14\x86\xd5\x99 \xec\xe4\x8a\xd8\xea\x95\xb0\xce\xfa\xfdV4?\xcf\xa4\x9d\x9c[\xe8VO\xd1\xfd\xcb\xa37\x96\xf4{\xb7\xd0-;[FJ\xe0\xa4\x8a\x15\x98\x16\xff\xec\x04\xf9\x914(&<\xb5!A\x08\xdbk\xf2\xae>k\xf2\xf8\xe9o\xf5\xa9\xcb\xd4\xd4\x95\xe9`T>\xe2UT\xa1<\x15\xe3r2\xca\xd4\xdc\xb1\xfd\xe6\x0e\x8a\xf9\x80\x98\xe8\xab\x97\x9d\x00m\x8f\x11\xac\xc5\\\xa1\xd4\x00\x98t\xa06\xcc|\x0e3_>\xe20\xf3\xac\x07SI\x90\xda\xd7\xd6f\x7f\xcb\xc2\xd9\xdf\"L\xb2\xcd&bP\xe5\xaa\xb3\xf5f\x9f\x05\xb3\x8f\x8a\xf5\xf2\x94\n=oz\xca\xa9\x9d\\\x93\x85\x93J\x19H\x8b\xc3;\xff\x1d-\xa4\\m\xd4?%\xfe\xff\xd9{\xd3\xec\xb6\x8d\xadQ\xf4\xff\x1d\x05\x84$4pT\x84\xc1N\x0dth=Y\xb2c%jlK\xb6c+z^E\xb0HB\x02\x01\x1a(J\xa2)\xaeu\x07\xf1\xd6z3\xb8\x13y3\xb9#y\xabZ\x14:\nT\x9c\x1c\x7f\xdfu\xce\xb1H\x02\xd5\xee\xda\xb5k\xd7n\x9d?\x9f\xfe\xf9\xf4\xe2\xff\xfe3\xbe\\\xff\xf9\xa9\x08\xee\x9e\xe0N\x16O\xd6\x9f\xfc\x1bj\xa3\x08\x0d\xa8\x0b{\xc0s)\x10j$\x08\x13%z\x948\xc1g\xfazq+N\x82\x9b\xb4x1F\xf6\xc2\xd0G0\xd0\xb9\x9bpfr\xe2\xadIX)\xb2\xcc3\x08n \xe8Ap\x07\xbb\xb7\xc8\x98\x11\xf8\xcd`5\x81\x81\x95\x9c<\xda3M\xfa\xd1F9=\xa24\xb6X)\x0f\xb8\x94-\xff\x1d4\xc1\xe9wm\xdf\xa1X\x83\xfa0\x18\x96\x1d1\xefC\x82\x19\xcb)\xe7\x1d\xa6 \x0d\x16\x8b\x12U\xd0\x8b\xef\x0f\x10e\xd3-\xda\x08\x0cR\x8btfq\xae\x16\xa9|T\xbf\n\x1f<\xaa\xf3\x07\xe5)\x04s\xb28\x0e\xe2C!?\x00\x1b\x8f|\xc6\x87\xc7\x83\x84\x14\xc0?\xd1\xc2}\x86i\xb2I\xf5\xdc\xd4\xb4g\xec\x8d\xd1\xf9l\x82d\xaa\x01lDf.\x94\xc7\xb5\x80N\xb00\x9d|^!f\x1b\x92\xd5#\x0b\xe5q~z/\xc4\xf4\x0c\xdc\x8d\x00\x0do\x8cE|\x96\xa7wc\xff\xa9g\xee\xeawc_w\xc8>\xbe&'\x0e\x9f;\x8d\x13-\xa7u\x06U;utG\x8fl:\xc1\xec\xb4\x920'l\xee\xb5Z\x92^\xe6=y\xf0.\xf2s\xb3>\x87`\xce\x1bu0\x10MR\x18\xe4\x92\xe3C\xc0\xb3B\xf1\x0eR\xc5\x93\x11\x9f?8\xe2T\xe6*E\x0fGvE$\xd3\xfdZ\xd3\x18Q\xf5\xaci\xac\xd9\xe6E\xe32\xc9\xb2F\xdf\xbdE\x03\xd3\x10a\x02\xe3\xd2W\x02<\xb1\x88a\xcbC`A\xf1\xbb+\xdb\x90Od\xb2v\xda\xda\x8b\xc1\x80\xd2EUy\xac\x9a\xf7\x8b\xd89\xc1\x92\xc09t\x86@\xfa\x16(\xd5\xcb\x03\xe8\x84\xe6<\xbe\xf5\xb0;2B\xcb\x87=\xe4\x9bs\x17\xc6H\xb3\x9d\x88@\x04\xf0\xa7\xdd\xc6\x0e}\xdcp\x04~[8\x9a\xf1\xd8\xe8\x17\x0d\xd0\x02\xa0}I\xf8\x19\x08.\xda,\x0c\xfe\x0b\x15-\x0cl^\xb2\x16\x9a\xa2\x85@B\"\xb4b\xb2\xf6&\xb8h\x816/\xd6\x12\xc5\xbc\xe4u\x02MO-\xda\x16E#c\xada\x82\x8b\xe6\xe5\x82of\x13\\ \x80/\x95\x9a\x0bJhs\xd8\x1c\xe5p\x96\xf9r\xb0\xad\xa7\x1f\x854\x81\x89eY\xba\xe9Dj\\<\x9a\xd59W\xf9=\xa7I:}\xad\xf9\xac\xba&6\x8a&6\x83\xa6\x17\\\x0fdh\xc8\xdc+\xa8\xab\x1c|Z\xcf\x03h\xaa\xeb\xfcf\x04\x8c\xb3s\xf4\xcf=\x1f\x06\xd7:\x88\x90\xef\xe8A\x18N\x08JhA\x18\xa1\x01\x8a\"\x14\xe9\x8c\x1fO\xd76\x97\xed\xd0(\xbd7 \xf6]A\xb0\x07\xc1>\x04\x87\x10\xbc\x86\xe0-\x04'\xf2ZzE\x18\x83\xab\x8a\x8c\x81b\x17\xbe\xcd\xef\xfa\xe5\xee\x8bR\xd0\xa3\xd9\xd4$]\xcb\x98I'R\x98\x87$\xa0\xb6\xb5\xdd\x14\xfd\xa5\x9c\x9f\x85\xc8!\xb1d\xfdn\x07\x98\x15`\x08\"I\xe5 \x02\xf3\x7f3\xac\x0d\x80-*\x89{\x0d\x03\xe4g]\xad\xcc\xear\x89\x11O\x14\x94\x92\x85\x98\xe0\x88\xae<\xd9F\xc6\x1eY\xfa\xbd\x8aK\xff\x10\x08\x1aBVY\"5\xfaZ\xa7\xd1\xe1\x840\x82\x8a\x90\xea\x8dF\xca>[\xb6Q\x18\\!\xb5zr\xc5\xbf\xbbqU\x97T\x15\xaeP\xd5\xca\x89\xcf\xe0\xf3\xd0\xcfE\x96\xaa\x88]\x18\xdda\x81W&8\x96Da\x9f`\xc6~E\xccx\xb4S\xd2\x01\x15By\xa1i\x1c\x92\xfe\x0e+\xf6W\xab\x15J\xef\x1b\x89\x88\x99z\xa9(\xce/\x8a\xa8\xb1d\xd3\x96\x12\x83\x12G\xf7eN\xdb*\xf2\xc9\xe6\x85#v\xa1l\x9c\xd0*\xadamPW\x9bm\xf1W\xd6L|k\x94\xda\\\xe2\x07\xc4\xafA\xe8N\xe3\xfa\xad\x87G\x9eT\xea\x14v[\xda\xe2\xe2\x81\xa6\x96\xfb\xa9\xb3/V\x9f\x07\xd7\xab\xc3(\no\xb3\x03\xa9\xe3pR\xe2\xe5\xae\xd6\x8dy\x08P\x96\xd25i\x84\xaek\x12Q@H\xb7\xe5\xc4\x8a\xfdj\xd8\xbb\xa4\xda\xc8\xeb\xf7Q _T\x99\x8c\x1c\x10\xd7/%C\xca\xc6aH\xbb\x83'\x8a\x1d\xb55\x1600i\xe3\xe1\x89-\x9f\xda\x92\xc9e\x02f$\xf2\xe2\x1f{\xe8\xc7\x1e\xfa\xb1\x87\x1e\xb7\x87\xfe&V\xae\xac\x99\xd6j\xcddX\x86\xa2\xd3\xfeQUL\xf0R\xf2\x07\xaf\xc9y\xfd\xba\xe2y]\x99C\x13\x0e\x95\x08m\xd9\x9b\x83G1y\x05MT\xe7\xc7r\x9aC\x13|]\"\xe2{\xa4\x92\x8c\xdb\xdf\xf3\x9c \xfd;\xc7&W\x90\xd5\xbe\xbf7\xe8gj\xff{\x03C\x17\xbf\x13\x89\xf4\xd9l\xdc\x0b}\xb1%\xd8/\x031\x87-\xdc\xd5?\x7f\xfey\x1c\xf6\xee\xea\x11\x82.\xd6\xf4u\xb4\xaek\x86\xbe\xfe3\\\xd7M\xe9\xe5\xf03\\_'\x10B\xa6 h\xbf\x89\x18\xf7\x15\xf7\x91\xf0\x06\xc6{\xf6\x95w\xb5f\xab\x89\xf7\xa5\x13*b)\x9c\xba\xdd.\xba\xbf\xcf\xbd\xc5\xf2-\x16\xcd\x08_\x99\x8cI}T@\x03D\x06\xb5\xb5\xae\xb4\xb7OZ\x11\xfa\xdd\xb0k\xef\x84I\xb2\xb5p}\xdd\xf4\x06\xc6\x1aom\x04\xe3\xd3\xdb@d\x94\xe2\xdef \xb8\x08/\xcd\xfb\xfb52\xc3\x0b\xf2\xe3\x12`\xf6i&\x1d\x88i'\xb0y\x0f\xd3\x99\xd7hlq\xea\x80s\x7f\xdfx\x8a\xba\xdd\xc6S\xec\xa05\x9aah\xad\x8b\x93\x8a\x1f\xa1\x08-\xbfdX\xa4\xe9]t\x81/\xbb\x81\xc3\x8be\xf3a\x01\x0c\xe6K\x13W\x81\xdb\xc8\xc3\xe2;#&B\x10\xf8+\xec~\x81\x86>\x81\x84nxw^\x10\xeb&x\xa3 \x87\x1a\xc5K\x8a\x90\xd1E\xa8\xce9\xbc\xdc\xf9\x03\xd2E\xe7#\xf8\x03\x02\x9a\xad\x0c \x80/-7\x0c\\\x88\x8d(5\xa4\xdf`:\x8bU\x91&\x05]\xfc\n/\xd9_z4\xb3|\x83\xf4\x0f\xf9-\x9dl\x18|\xba\xfc\xf3\xfe\xde\x06\x91\x80TW~\xa39\x0f\xb9?\xce\x8e|\xca\xf2<\x9c\x0e\x8c\xc0\xfc\xb7]\xab%\xcf\xa9\xda!`dH\x9e\xe7C\x84\x154?\xe0\xd4<\x8cX\xa3d\x9b\x86\xf7\xf7k\xe1\xc5\x1bx\xc9\xe6\xe0u\xc9\x06\x00 \x1f\xa4!5\xdd6\xc5\x0d\x10w\x7f\x87\x86\x07B\xa140\x08u5I#\xdd5\x1b@\xd2k\x91g\xfa\x02@\xc2D%\xaf\xc8\xa7\xe2\xb2na\x14\x18\xfaE\xc2\x13_j\x87X\x8b\x11\x1a\xc7\x1a\x1eA\xacA-Bu\xd6\x97\x17\x0c\xb5p\xa0A\x8d\x11,\xb9\xf8\x84>\xe0\xc8\x1b\x0e\xa9\x01\xfe\xed\xc8\xf3)\x19 \xbb\xd6s5\x83\x11\x83z\xec\xf5\x91\xa9\x8d\xc3>\xb2\xb4\xd7>\x821\xd2\xc8\xbdB\x8b\xa7\x91B\x0fc\x0dFHc\xfd\xa1\xbe\x16\x06\xfeL\x0b\x03\x17iJ+\x96\xb8$R\xba@\xf0\xe5\xfe~\xed\x15\xdb\x01\xdc\xdc \xa9Y\xe3c\x95 \xd4\x9dN\x94\x1c\x1c\x9f\xf5u\xbc\xae\x7f\xa6\x9c\xe0\xab\xd0gG@TX\x06\xe2p,\x8a$\x18\x12\xa6\xbd\xfb/\xa2\xcb\xfb{\xb1\x17#\x90\xe0\x80g\xf2\x16\xbd\x1b\xa4\xe9\xeb\x98g!\xbe\x88.\x17Kx\xd9,\xf7\xaa\xf2\xb66\xc8$y\xe5\x9bE0\xe6d\xd7\xa1Z\xed9\xb2\xfa4[q2\x16f9b\x82P\xc1\x1b+B\xe4x9e\x94\xbbo\x98@\xad\x9e\xd4\xed\x9b\"u\xd4Ep\xb9\x00\xb1:\x04\x9e\x92\xe8\" [\x93/\xc7Ep \x90\xb9+\xc9\x13@\xa6c\xa8\xbf\x80J\xc8\xec\xc2A\xb1{=\x19S\x9a\xe8Q\xeb32\xeb8\xee\x96^\x04k5\xf6I\xa8\x02\xf0\xe3n\x1c\xef&\x0f\xf8\x9a\x90\xaf\xb70\xea\x7f\x8e\xd0@7\x9d\x82\xb6\x91s\x0f\xfb\xc9LN\xe2\xee\xeb\x18\x1c\xf1\xf9d\x83\xdf\xf7\xbd\x1b\xdd4\x8d!\x99\xe4\xf0q\x93,@\xdd\x14\x81TR\xb8\xa4\xfd\xe9\x855Q\xda$v t\xfe\x8e\x9e\xaa\x81\x95s%T\x85Z\xc5F\x82W\xa3V\xf8\xf19\xba\x93{\xf0X\xe2\xd5\x8c\x80|\xf6\x97A\xce\x8f\xbd\n \x93%\x1f\x982?\x0b\xc8E\xc8\x0b\x86<\xeb\x87 \x0e\xe4\xc8o\xc8\xc8oV\x1b\xf9O\xad\xc6v\x07nT\x1c\xfdC\xa5M\xd3\x04/\xe5xzd<\xbd\xc7\x8f\xa7\xe6\xa8\x19\xa7jN:fD\n\xc3\xd4\xd46\xcb\x06\xfd\xe8&\xc9\xcc\xbe\xca\x99\xdd\x91\x99\xddU\x9cYIp\x08\x81 5m]+6\xeb\x93\xa9\xdfr\xae}\xdf\xb2\xc9*fQ\xfa\x9f%\xac\xa1\xbe\xfe\x9bamw\x98+o\x96S1\xd7%\x87\xa7\x94n,+\xfcg\x86\xf5\xd3\xf4u\x9c\xcaC\xb2\x9e\xa4Y\xcb'Ib\xa3yh0i.t\x1d/\xe1\xceh\x1d\x9a\x94\xe7\x1c\x19\xc2B\x83\xbas\xe8\xa6 \xdeQ|\xf8\x1a\x9b\xc6-\xc1\x87\xdb\n\xf8@W\x90[\x1aHl\xba&\xb5\xaf+\xd4\xfe\xd6K\xff\xddc\x93\xc8p\xe4\x93-\xf9 :\xa9\xf9\x90TtJ\xec[\x97`\xd3\xb7\xc2\xb9\xfc \xfe\x12\xce\xedS\xd5\x06\xf4\x02|\x88\xd1\x98`\xdd\xcf\xb1\xb0\x869%xsZ\x11o\xc4j\xd2T_\x19\x1fa\xf9\xd4\xa4\xd9y\x8a\x0f!\x9e2eW\xd7\x1d]@\xb4\x81\xc6\x9aM-\x96>\xc4\xdf\x9dS-\xb7\xd3\x12^X\x07\xa1+%Dt\x0c\xd3\x02\xe7\xca\x9fc0\x17\xb9a\x946\xf8\xa3|\x00`\xeaEF\x9d\xc5h{<>\xb80|\xba\xbf\xa7OM\xd3\xa1\xf2O\x80\xd5\xa5\xe2I\xd4\x91i\\L\xe3K\x80\xcd\x8c\xd5\xd3\x97%\x10\xbd\xf9K6\x8c\xd2\x87\xdfY\xb3W\xb5A\xc4\xe1p\xe8\xa3\x9c\xcb{b\xe1\xa84\x9e\xe8A\x92\xf06\xd9`\xc1\xcb\x160e\xc3\x08\x02\xe1%\x1b\x83\xa8K7\x10\x02a\xb7\xa8\x0f\x00\xd9cj\xb1|\x87A\xdcej\xfc\xb3ko\xf2f\x1ab\x14\x03\xbf\x0b\xad1\xbc;`zD\xd4\x7f\x11L\xc7\x94\xae3Eg\x90\xb1^$\x90\xa6\x12.\xb7\xb0\xc3Z\xcd\xdf\x0dx\xe4\\\x1b\xf8\xa6\x13\x80iwm\xcd\xaf\xd5DC\xcf|0\xe9\xfa\xbb\xe1\xae\xfe\xbf\xff\xe7\xff\xd2\xf4ui\x1fU\xf7\xcdu]\x1b\x87\x11\xd2\x1d\xfd\x95\xd7'\x1fz\x99\x1d\x9eb\x06\x98}\xb5\x1fs[E\x1a=V\xa7^\x98#d\xe8d\xde\xd4\xae\x85F\x01\x06\xba\xa6\x83\x06\x0dF\xc1\xba\x97e\xce\xbc`(\x8f6G<\xd5M\xa0;\xe4\x8f\xa6\x037g\xaa)\xf5V\xf1.\xca\xc6\xebFf\xd9$<\xebe\x04\x87\xe4+\x98_\xa3\x99S\xb0\xab\xbe\xc62 \x83\xae\xe9\xf4*:\xcdm\xd5Wq\x12\xf4EA\x1f\x81\xa24(\xfe\x84\xed<\x93\xc5\x1a\xa1\xd8p>\x9b\xa0\xeeKT\x18\x19\xe0U\"\x8axAh\xeb\x8b\x8a\xb45\xc3\xdbW\x13'H\xb9X\x91\xfa\x1d\xcd^G(N\xcfN\x7fAn\xcf:\xb5w\xbcF3\x82@\xd6$\xa2\x9e\x15\xbcG\x83\xa0\xadh\xed\xdb:\n'\x8c\\\x12\xad6\xcd\xc5y\xf1\x11\x8c1MM\x9e\x01\x04\x88\xbb\xcc@\x1f\xf8i\x8e\x8b\xf0i\\\x17\xdb\xa7\x9c\xda\xb5\x17\xf4\xc1\xa4\xbb\x16\xc8\xfd\x14\xbf&\x93KV\xb3\xfe\xa5\xc9\xaa\x02\x9d\xad\x17\x93p\xe8`\x9e\xf1\x92Q\xc1\xc70\xbe\xafJR,\xb5\xf6\x02,u&_Tg\x08\xf2Z6~4S\x86 \x06\x91r,\xef^\\:\x01\x08\xbb8!!\x00vqz\x9c \xee\x96\x10-\x06\xc8\":\xb5\x1bY\x03\xcf\xc7(*\x12F\xaf\x19\xa8\xa01\xc2\xadI+0\xd1>*j\\)y+\x9e\x99\x0b\xd3t\"\xe0\xa7\xc4R\x9c\xd1`\xba0\x06\xe7\x97\x04\x08\xb5Z\xa3\xdb\xed\n\x99m\xd9\x91\xd6\xe7$>\xcc\x1f#\x90\xbf\xca_3\xe8\xde*\xe0=p/\xec\xcf8;\x0f\x91\xa1\x06\x99\xc5I\x8c\x94\xdc\x18> 1=\xe3\xd2\x18'\xe7\x04\x80\xae\xa5\x83A\x86\x9fs|P*\xb2s`\xad\xc6\x91\x80\x9c\xc0\x94\x96\x044x}\x1eesWd\x1f\xcc\x19\xb6:(\x85\xb6 !S\x8e\\\x14v\xdd_\xdc\xdfs>D\xcd\xab \xf9@]|\x93\xec\x8a*\x87$[ ul\x16aL\xe6\xcc,\xc4\x15\xe5\xc0D\xf9\xd3r\xc1\x8f\xcb\xdc\x05|\x15\x92\x14|\xfb\xf33u$\xa6\x94\xf3ilK\x1f\x9d\xe2\xe5c\x0e\xd0\x8a\x07\x94\xd7\xbf\xa3\xa7\x13\xe7l\xc8\xed\"\x9e\xf6\x18.\x94\xed\xa3a\x04x\x9c$\x07\xd3\xbb\x80r\xd2\x80\x14+\x9e\x9a\xce\x02Dl7\xdd\xdfG\x8a\xecr=J\x89(W<>\xa2\x7f\xee\xf8x\x04t\xf9\xaa\xd2s\\\x01\xf3NVD\x81K\xd4L\xe5\x12\x83q\x94H\x1c\x03\xd6\x01\x0d\x03\xae\x17\xc9XG\x82\xba\x95\xf3\x12\xb9E\x0e|\xae\x93\xb2\xb8.\x19\x08.\x18H\x04q\x04\xd3a\x16J\x14V\x91I\xe0\x8b\x14\x1a].Vg{\xc3\xef\x15\x15\xc4\xaa{\x03cM\xea\xc5rkM\xb3\xd8\xb3%e\xd0\xa5nw\x93(\xbc\xf1\xfa\xf4\xaa\xb6#M\xf5\xc8B\x13lbxE\xf6l\xea|'\xac\x0d\x8b\xf3\x90\\\xdeK\xbb-G1\xa1B@i\x15\x02\x12\x82\xffl\xf9\xb7\x8a\x10\\\xf0\xa4\x85\xe8\xf8\xa0\xb4+\xb7\xcd\xe4\xc2w\x812HI\xee\xff\n\xa4\x9d\xb9<~\x9d\x08\xa8\xe7\xa8\x83\x08'\xee\x18i\xef\xd8\xa30\xbc\x8e5\xdf\xbbF\xda\x8c\xfb\x99Nc/\x18j\xa9V\xb5\xdb(\x0c\x86\x0e-\xd2\x0f\x83'X\x1b\xc1\x1b\xa4\xc1`\xa6\xf5e\x14!\x91j\x0c\xf5\xb5A\x14\x8e5\x1f\xb3\xc0\xf9\"(\x95S\xd2v\xe9\xba\xa4\xda\xa4-1\xd1kYC\xbfU\x91\x12P\x87n\xd8\x95C\x07\x01\x8d\x1c\xaf\x03!\xf0 \\\x88\xa2\xa2tR\xc6\x80 %\xf8Gi\xc1\x7f\"\x8d!m0\x11S\xc1\xd5 \xa0f\x84\x82\x13r\xd6\x1a\x8bGH\x83\xff\x88\x01\xc3+\x07.V\xa6\x82\xde\xb7g^\xd2\x81\xf4R\xcd\x97L\xee\xb9W\xb8Z,\x90^\x1c\x02\xd1\x96s@\xeeIU\xe5\xa7C\x84\x8fE\x0c\xc4\xbcP@\x92\xd6\xf9\x82\xc7z\x11x0\xff\x99\xda\x7f.\xe4Z`\xaa0\x16\x91\x16\xbb2\xd0\x1d+H\xee\xd0 XT\xb9.\xd2\x90\x8c\xc7a\x1f\xf9\xf9\xcbb\x8e!\x08\x98< F\x11c\xb3\xe8\xe0\xde\xa2\x01\x0d~\xc2\x87@~z\x84\xb2\xb3\xfbv\xea\xc2\xfe9\xe9\xed\xfe\xde\xc8>\xa2\xc1R^a#\x00\xfaU\x1c\x06: h\x9a\x02\x99\x11\x81\xd0\x04\x1e\x8f\x1e\xa1\xd6\xfdvwU\x95\xf7\x19\x85\xb7\x92\xb1\x0f\x92;*\xbe\xbf\xc7\x0c\x00\xa3\xf06a\xeb\xc3nB\xf1k\xb5\xa8l\xdb\xcc\x82\xe2=sW\xf2|X\xf2\x9c\x8a\xf5R\xb7\x8d\xb50}AY\x0b\x04\xc7C'\x96@\x8b\xaf\\Q\x18\xc8^Io\xd0/~\xfe\x15\x82yzw\xb1\xce\xd2\xcf\x80\x8c\xfc\x99\x1d\x8a\x14\x0f\x16(l\xa0/\xf4\x8b\xe7\xf1\xfd\xbdq^Q\xbf\x98\x18\xfd;\x8a\x83\xc13\xad\xef\xdd\x00\xf1}\x12eS\xb7&\xaaF-\x17x\x98\xc7,\xe6\x8d\x94T\x97E\x13\xa7\x87\xff\xf8@\x1e4\x9c\xec\xa3\xe7~\xe8^gC\x07\x97\xb8\xb8\xb5Ku\xad\xb1\xdf\x9d\x87p\x8aGMG?\xdd#\x9f:\x80\x13\xefw4s\xf4\xbd\xd7\x87\xda\xefh\xa6\x83\x11\xc6\x13G\x7fu~\xfeZ\x07\xe1\x04\x05\x87\xfd\xfd0\x08\x90\x8b\x1d\xfdt\x82\x02\xed\xf0@\xe3\x0f\xf4\x05\xf0\xbfW^\x18\xa4\x18\xd8\x81\x1f\xde\x96\x1e\x908*3\x8e\xc1#\xd5\xf6\x0e\xe8\x1a\x05\x9a\xf6\xd2\x0fo\x0bsP\xe2\xbe(\xef\x8d'\xbe\xe7zXg\x84H'@\x0f#n+\xb4\x1f\xf6\x11}\x91O\x8f\xb3\xc4R'\xc6\x84[\x93\x03\xdaS[\xd4\xde\xbd=\xa2\x16\x96\x81\x95\xea\xe9]\xe43\xc3g\xa0O`\x1c\xdf\x86Q_\x8c\xc8\xf5=\x14\xe0\xfd\x08\xf5Q\x80=\xe8\xc7\x7f\xdfP\xcfiF\x9dd\x884\xc3N2\xb4\xc0\x8a\xd0 B\xf1\xe8]T`\xe2\xb3B?oY3JOI\xc3+\x19vd\x1b>s\xc3 \x8a\x9dB\x1b\x18}\xea\xf3r\xfc\x1c\xa7\x06\xb5\x81\x15\xd3:\xf7\xf7\xf3E\xd6\xb6\xb6\x9c\x9d\xd1}O\x97\x16\x9a\xb9\x97\x84\x0e\xf0\xae\x10\xb9\xc0\xd4\x0b,\n\x11\x04s\x96$Y\xb1H\x11\x83\xa11ju\x9d\xc53)\xa5\xe7\xee\xf7\xb2\xa5U\x9e\x84\xdfo\xc9\x05\xce\xc33z\xf5A\xfc\xbe\x8b\xaa\xdb\xbf\xce\x020\xf7\xfa\x0e\"\x0d\x91\xa2\x87}\xc0D\x0f^?\x0f\xefUO\xfa\x17%\xcf\x8f\x030\xc7\xa1\xda\xe9\x82\\n\xbd~\x1e\x97\x94\xb8\xc9\x19\xf7!\xb2j\xb9\xe2\xef\xbd2\xbaE\x8d\xd3RY\xad\x04\xe8\xea}\x84\xa1\xe7\xc7\x05\x8a\xcb\x94\xa8\xf9qT\xf2\x8c\xf7\xc2$\x0bH#\xbc\xc4\x03\x94R\xd3A\xec_0Z}y\x7f\xcf\x896\xb37#\xd8EN\xa7<\xf1\xa94\x1a\x1d\x18\xb8+\xda\xb0<\nF\xd3rG0\xda\xc3\x86mZ8|7\x99\xa0h\x1f\xc6\xc80\xd71\xf7\xdbi\x90\xbd5\x81\x11\x1c#\x8c\"\x8d]\xed\x1e\x9a\x82\xec\x85J\xdb\xe9\xe8\x1dd\x91\xa3t\xf7\xa2p\xf0t\x97\xeb\x0c\x81\x0b\xd7\"\x99\x069\x8a3\xe4\x9e\x83\xb7\xc2\xb0\xc8\x10\xf8>\xe1@\xd5{\x08F\xc2\xe8DyM63\xfd\xc9\xde\x97\x19n*\xa3\xe7\x0d-\x1f\xfdsZH\x1b\xd0\xe6\x96\x8f\xf8\x89\xa6?\x01\x05\x83\x00Ot\xed\x89i^:\xe4\xbeB\x18\x92G\xe2\x03g[\xc8\xf9\xb0| \xb97P\x07\xf3\xca\x19\xdf\x00w\x03dc\xb5\\\xd6\xeb;\xe6\x14\x98{hRL!\x0cJ\xbc\xab\x9e \xfcYu\xc7\x0c\x9f\x0bR1\xa0&f\x18\xd0d\x18\xbc\x99\x0b|I\x85\xa7\xcc\x0b\x8a\xfe\xc7\xc4|\xa5\xc99\xc9\xdb\xa9\x0f&>\x18\xf8\xa0\xef\x83\x91\x0f\xc6>\x18\xfa`\xe6\x83\x9bt\x92fqB \x16\xdd\x18D\x8c\x1dc>y;\x89\xd2\x90\xa6\xe1\x9c/\x14\xdb\xb8\xa8V3\xa2.\x0d\x96I/\x1c0\xbaF<\x043f\x8fx\xd4\xcb\x88J\x13xLIx+4\xf6\x01{\x12\x8a\x9f\xe8V\x9b!#\x00=_\x04_t\xa3\xd0gw\xd6\xaf\x9e\xa1\x166\xc1K\xcf\x9a\xd2\x00\x9c\xa7\xc1+/\xc6a43\xce\xb1\xc8hx\xd8W\x1b\x10\xadM\x90K\xdb:\xf1\xe8T\xd3\xed\xf1;S0\xa5E^\xf2\xeeH\x1d\xb5)p\x8e\xcdTE2EB\xaf\xcfh\x82Qq\xe3f\xe9FiK\xef<\x10\xd5j\xcaS\x16\xbf\x99Z\x01\x1a\xb2Sf\xa7hf\xa0\xc6\x8f\xde\xe7\xc8\n\xcd\xa4,\xd0yz\x08\x8c\xc6\x87\xfd;=}\x8d\x089X\x8eat}\x1a\x1c\xa3`j +@\xb7T[\xc7\xdcE\xe4\x0de\x10\x85\xe3\xdf\xce\xba*z2\x99\x08\x19820\x9d>\xcb[\xce\xbfO#\x1f`1w\x1a\x07V0\x15l\x1a\xa9\x91uq\xc1\xc3\xfb{\x1b\xa8\x85!F\x06\xff=\xf0!u\x8f\x8e/\x8aZ\xbb$,a \xd4\x03\x01[?\x84}C\xa4{=$\x80\xa6B\x1a5\xa8[\x18\x94f\x95\xa6\x9df\xb1\x8a/J\x0e\xaaI\x8d\xd40\xcdto|-s]1tJ\xc2\xc2&\xf8\x97}\xc6\xe6\x92F\xa1\xa4\x08c\xe6Rh\xc3\x8b\x8a\x9fFfD8T\x97\\\x12$U\x12'\xf2\xaaR\xbepyjU\x04\xf0N\xbe\x85\xf2\xd4\xaa\x81L\xad\x1adS\xabr\xac\xec\xce \x14\x9cy\n\xaaN \xb4\x17\x80\xa0\xa53\x9fF\xbe#7,\x97\x9f\xd1\xef\xef\"\x1f$\xa9\x97\xb3o\x17\x0b\x15\xc6\xbb\x17m\xf5'\x85\x94a^:\x17-\xd0\xbc\xcc\xa4z\xc5\xdd@I\xd0\xda\x92y\\\x85\xad0\xe0\xd3\xeb\xb6\xd2\xa9[/\x9a\xc0@*~v1\x90\x82\xbcn\x86B\x02d\xca\xb4\xad\xa95\xcc\"c\x9a\xe7\xe7\x01\xf2q\xf7\x18\xe2\x915\x86w\x86M\xf8\xf5\x80\xff\xf6\x02\x05w\xe5\x9e\x131\xf4\xf1z\xc7\x04Q\xf7\xe2\x12\x84],\xc3\xe7\xd3\xb5\xf6\xbaI\xbd$\xcb\xfd\x1e6Bs\xc7\xab\xd5\"\x16\x81\xde\xa3a\x0d\xeb\x0dfS\x8dy\xf0\x08\xd8\xed\x87.\xbd_X_\xa6(\x9a\x9d\xf1|T\xc6\x93\x0b\xb2<\xf5(\xf4QW\x8fP?t\xeb\n\xef\xac_>1w\xa0l\x1b\x9a\x0b6\x04z\xd4X\xb0O\x85pF\x94:\x81\xe8\x07\xc5\xfa\x85a\x82\x9e\xdf\x9d\xf3\xa8\xe2\xc7I0\xf0\xd81\xae\xe2\xee|\x01\xae\xe2\x0b\x95\xbb\x16z\x93X\xbf\xec\xcee\xd4N\xc7\xf5\x01\xbd\xc3\x88Q;\xf9\xeb\xca\xb8|Z\x98{I\xfce\x9d\x99\x0bp\xe7w\xcf\x90q\x1a\x98\xc6\xd4\xbf\xbf7\xa6~5\xa9\xa2\x9a\xce\x85I\xd8\xf8\x93^\x88q8v4\x9b't\xfd3\x1f\xfd\xe4QuM\x16\x9dco\xe2\xbdb>f\xa6 n\xa9D\x14\x1a\x132\xf2I\xc5\x91\x17\x04\x14\xe1\xc2\xc8\xa2\x80Q\x0f\x05\xd4\x12CU\x04\x8e\xed\xc9\x9d\xb65\xb9#\x9f\xf4\x85\xcc\xe9\xc7\xe4\x05\xf5$\xb5\x1f\xcd\xc4\xc6\xf5?4\xf3\xa7L\x90\x97w\xfb.\x80\xe3\x7f\x83\x99<(\x91-pe\x7fD\x0d\x829\x07\xe1m@x\x0e\x96\xa6\x9f\xa0\xcf\xb5\x9f\xc4A$\x184\xa8\x88A2\xa4\x95\x905\xf3D}\x8e\xf6\xe4\xfe \x17T\x97\x83J\xd3\xc2 t=<\xa3 \xe7\x8f\x92H\x98R\xd4MA\xca\xa3 \xb8H\x86\xe9\x142o\xc7\x871\xae\xbb#\xcf\xefgbj\xc9\xae\xe5\x1a\xa4\x12Z\xfe\x97\x1c\xbci\x82F\xc7\x04\xa7R\x05\xd2'\x0b\xd6\xaf\xb8`\x05\x19\x0b%<\n\xdf\x99\xa6 ^\xc8\xbeF\xa4\xafQ\xc5\xbe\xe4\x04\x06>b\xd0 _\xea\xb7\x11\x9c8\x9a\xcc\xa4\xf8\xf4)\xe9\x0ei1\x9a@\xca}ia@\xc3\x00\x13x\xc7\x8e\xe6\xf5\x11df\x00\xe4\x92\x1e;O\x9f\xc6\x18\xba\xd7b\xb0\x96\x1b\x8e\x9f\xc2\xa7\xad\xc6f\xab\xb9m7\x9f66\xdb\xdb[[[\x7ff\xf7t=\xe7N\xf6\xbd\x0e\x8f/\xf0\xe7o\xaf\xecfn\"b\xf7S[\xb6T\x1f\xc8b\x02\x07k\x14\xa1\xc1\xfd\xbd\x91\xfa-\xfd\x96\xc8\x05\x83\x1f\xa9^0\x08\xad>o\xef\xc8\x0b\xae+j\xbbW\xd1\xaa\xb0\xfe\x98\xda\x95\xdck\x83.\xa6\xfd\xd2@<);\x860Q.Sg\xee4\x99\x03\xb0\x1b\xc8\xb1\xbe\xf4|\x1a\xda\x93\xfa\x14\xa9\x13\xa0\xbeE\xbe\xe7\xa2 .0\x03\xba\xe6\xbaN\xfd\x88\x95p\x8a\xd2\xfe\xcb\xa8L\xb2!\x16\x9d)\xf9I\xd3\x84p\x97J\xea\xbdD\x08\x0ftq\xad&\xbf\x92*K\xfag\xea\x86\xa5}+\x0d\x91\xbe\x95\x9f\xb2\xebiq\xd7h\x0c\xbd%\x9d'\x05Y\xb6\x14\xfdE\x9dT\xd0\x81\xee\xe8\x85!\x07\x92Q\xe9\xa4 \x0e\x1d}=\xd3\x9b:B\xfa@\x8eq\xd2\x0d,\x8c\xa2q|:8C\xd1\x8d\xe7.Y\x96e\xe0H\xb7\xb1\x00\xfa9y\xa0\x85\x03\x8d?\xd2e\x97\x83n`\xdd\xa0(.\xcc3\x98\n\x8fa\xe8@\x16\xa5>\x8d\xac\x85o\xa8\xe0W\xe5\xe9p\xe2\xd5 \xe6\x17H?\xef\xe4\xdaH\xdb400\xc1Z\x819\xb8>\x11\xa3\x17\xfbC;\x9d\xa0`\xef\xf5\xa1F\xf6\x977\xf0\\\xc6\xb8\xe4\x17\xf2\xd6\x07s\xb1Y\x1cx\x7f\xbff\x83\xac\x84\x92B;N[\xca\x16\x90\x9dE\xd2{\x91\x82Kh\x19\x0c\xb9gx\xa6\x1d\x82 \xe4kz5\xcd\xfc,OKP\xe2\x05\x7f>e\x8e\xf0\xf4/\x93[O\xc4\xfa?\xa0#Q\x08\x9fb_\xa5\xcb\xfb\xa0\xee\x14\\\x08\x99Gu\xb6\xdd\x9cGv\xb4x\x84K\xd4\x19=\x9d\xbd\xf1\xd0\x18\x93\xd3y\\\xf1t\x1e\xc3\xbbz6\x0e9y\x96\x89D\xae\xda\x1e\xd0\x07\xfc}\xc3\xb6\x7fIs\xc2\x825R.7\x7f[\x0f\x0f0\xcb~8\x0c\xad1\xbc{E{\x7f\x80O\x16\x85?\x90n\xab\x94\x1dN1F4\x8c\xf2\xb9d\x8c\x86\x04\xf4\xc3\x8a\xa0/d %\xd8J\xde\x12F\xec\x8a\xdf\xf2f\xa4\xb7Y\xc5\xde\xcaX\xd8<#\x94+@\xfa\xdc\xfb^t\xb39\xc6\x80r\x01\xb8\x8b.\xf4\xbb:Y\x18\xfd\x92\x9a!\xe3\xfb\xfb5v\xce)\xc3\x93\x99\xbf\x04s\x83\x92\x93\x0f\xa9\x87#u0\x82>>GwxW~st\xda\x01\x80\xb9\xa8(g>\x98\xc7\x91\xeb\xb0\xca\xd0\xc7N\xb8(u<='\x85\xf1\xccG\xce\x8cP\xc0\xed\xac\x95Ta^@n\x17\xd7\xd4\xc0N\xa3\xfc3u\xff\xd6\xc6\xd3\x18k=$-\xef\xb9\xe1=SV\xbd\xc5\x062\xf9\xec\x8e\xfb\x1f\xd4\x90\xf0\xb1\x11I\x9c\xf6\x85\x9d\xba_\x9e>;\x1fXm\xd7\xb3\\?\x0c\xe4\xa2\xc4\xd9\x0c9\xc6\xaf\x1e\x98\x13\x908\x08\x08k\x92F\x12\x93\xa4A\xc8-\xf3\x85^\xe4\x1d\xccQ\x92_\xb2\xd08\x97\xd5\xabn0\x8f\x84\xb5<\xff\"\xe5\xbe\xd8d\x11\xe0DL\xd5\xcc\x0e:\xf4\xbb\x81\xd1\xe8l\x99\xe0\xb5\x14\xa8X\x10\xe3(.\xb2\x15Qy\xbbp\x82\x98\xbc\xa8\x8e\xa9\xfd\xc2:3JX,L\xd38!\xd4\xfe\xa4\"\xb5\xe7\x87\xe76zHN\x95=\x99Sq\x18\xc5\xc3|\x98\xe4\x9fZ\xad\x16{\x95\x0e\xdc,\xc29*5\"4A\x90\x8a\xd9\xf8\xd7l\x81I\x18{LF\xb6\xa1\x88\xd6\x94 \x91\x9b\xea#\x11\xc1\xf8=\x8a\xfa0\x80@\x8ba\x10\xd7c\x14y\x83\x1drM\xbfE\xbdz\x0c\x07\xe8\xcfD\xeaw;\xf20\x13\x9d\xd0C\x95\xe6\x92\x19\x84\xd1\xd8\xd1\xa6\x93 \x8a\\\x18+o\xf32\x9a\xe2\x90\xecK\xe2[\xf2+}\xc4jl\xf0\xd1\xabB^\x16\xdf\x9a<\xadYC\x84\xcb\xf3\xde\x88\x15\x10r\"k\x12\xc6+\x15\x9f\xaeR\x9a_\x9bW\xa8AS?\xafP\xbe\x8f|\x84\xd1\n\x15z0\xf6\xdc\x15\xca\xfb^p\xbdB\xf1\x11\x82\xfdU\x8a\x87a\xb5\xd6%W\xf5c#\xfe\xf9c#\xfe\xd8\x88\x0f\x16\xff\xfb6\xe2\xa3\xb3\"\xfd\x1d\xd5\xb86\x86\x1a\x9a\x0d\xd1CwR\xb54\xc1\xb7U\x8aOW)-t\xa0\xd5kP|[\xa1<\xc3\xb7\x15*P|[\xa1<\xc1\xb7\x15\x8a\x13|\xabV<\x136:I\x1b\xfa\xd6Oq\xf8\xa9\xfc\x12\x1az\xd6\xd8\xfd`X\x0d\x10X\xb1\xd7G=\x18eov\xa6C\xcd\x0cH)\xbb\xb3\xac\x98\xaeS\xaf\xbf\x13\x1f\x1c\xf9\xe0\xd8\x07\x07>x\xe9\x83\xaf>x\xe7\x83\xe7>\xf8\xd9\x07\x1f|\xf0\xc5\x07\xaf|\xf0\xde\x07\x1f}\xf0\xab\x0f\xde\xf8\xe0\x0f\x1f\xfc\xee\x83\xdf|\xf0\xc9\x07\xc8\x05\xd8%\xac\xe8\xd47\x8e\x08\x1fyT\x91\x8fL\xbb\x97\xa4\\H\xe8FL\xb2r(\xc7\x84mm7\xb7\xb9\xeat\xb1D\xe1\xfd\xed\x9a-\xdd\xe3I\xec\x06\xdd\xd1\xd3\xaa4\x1a\xcd*\xa0P\xf1=\xe3\x98@\xe5\xb8\"T|/\xc6uv\x83\xa7mi^@V/Q\xd1\x15\xe8\xd0\xf8\xa9\x96\xbcA\xbe\xefMb/\xce\x83 \x07\xae\x7f\xac\xbf\x128\xb2\xb4\xb8}4\xc1\xa3]]=>\x1b\x9d\xc9\x9d\xeeP\xc3~\x10\xb9\xdd\xb9\xed\xdc\"\xe3\x80\x80\xf2\xa0\"(S\xfa\xd3\xcd\x9d?\x13e\xa9\xc2\x1d\x08z\x9eA\x87-\x8e\x0cILHi/\xc1\x9f\x0b];\x0f\x02*\x9e\xa6O \xe6\xefb,\x0f%\x1d\xe3T\x82P\x88 3~\xa2Q@\xc4\x00\x1fJ>\xc6\xab\x93:2\x0d\\\x83\xac\xdaK\xb2j/+\xafZ\xc9\xbe\\\x06\xaf\x9a3\"\xd8(vvA6\xcdEf9\xfe\xceN*\xc2\xd9G7\xc8o<\x1e\xd0\xcc\xe2\xef\\\x05w\x93\x80\xfb+\x01\xf7\xd7\xca\xe0.G\xd9\xc7\"\x90\x8a\x01\x0b\x102:\x08{\xc8_\"\xa9\x88B\x1f9\xfa\x18\x05S\x0f\xa3\xb1\xaeD\xc99\xf4\x0d\xbdN \x84\xbe\xce)\x85\x8c\xa0\"\"\x0c,L*\xc7xGf\xfe\xae\xe2\xcc\x8b\xf2\xb2ff\\r\x964\x9aVgr\xa7%6\x184\xbfP\x91\xbe\xffj\x1aco0\xabK\xbb\x8fx\x02]T\xef!|\x8b8)\x1d\x14e\x8d-\xbf\x94\xb17I\x99?\x83\x1cb>\xc8\xe3\xfemyb\xc1\x0f\xc8\xfeM\x90-\xddy\x0c\xffw\x1f\xa0\x0d\xce\x92-\xba\x92\xbbm\xba\xb0\x88\xa9\xc26e \x9cS\xa3lF4\xee$\xa63\x7f \xfc\xacQ\xab\xe9\x99X\xcb\xeb[\xff\x8a\xf2i\xc9t\xee$V\xf1\xbaD8o/\x18\xc6\x0fg \x8e\xdc\x0b>\xec\xcb\xd2\xe69h /\xceg\x88(\xc7\\V>\x89rQ\xaby\xd1\x92\x91\xa7Z\xac\x90\xb8X\xaci\xe5L\xc4\x7f\xad\x82+N\x13\xcf\x956{\xcf e}^\x91\xb2\x96K\xa2\x96\x08T2\xbbcE\xb6\xf3AU\xe3\xdf\xdaw\xe9\xee\xa4\x0d\xef\xf2OG\x87S\x1cR\x86\x16\xbaB\xad\xfb3\x01\xec\xcf\x15\x01\x9b\xe1\xdd\xcbX\xeb\x9b\xb2\xac\x84\x85l\xa5\xcat\xeb\xeb\xcd\x7f\x95d\x07Le\x10l\x97\x95R\xc5kdgs:\x9aa~\xc9#H\xe3\x10@\xe7\xc6\x8b=\x8c\xfa\xfcW\x8a\xdc\n\x1a\xbb\x8e\xf3tk]\xd7\xd6\xbc\xf1$\x8c0\xcc\xe4m\xe7\xd7\x07%\x85\xe1\x07\x96G\xb1\xec\x16,\xd3\x18&v\x02\x05)\x12%\xb3\x9d3\x16`$\x9a\x86\"p\xbf;\xfd\xa6\x128 \x10\xb1\xb0\xa9w\x1f\x0b\x86\x9d\x04\xc9\xa6\xb6m\xcc\xa8\x86\xc6\xc6\x1ea\xb9\xd3\x08\xafn\xb3\x7f\x85\"\xb8\x82\"\xa6i\x82 \xed9vM\xe3=\xe9\xf9}\xc5\x9e\x93[\x82\xc8\xe1W\x92\xda7\xe3\xe1\"\xb4M\xe94\xec\xd2\x03\xa3\x9c\xa9/\xba\xc7\x84SL\xdbI\x15\xcd&\x10\xf9.\x87X\xcd\xfdCb\x7f\x19\xaf\xff\x17\xf6\xd2@r=\x1f\xc9\xba\x7f|\xcc\xbak\xcdN^\xfdXx\xb9\x94\xc0\xed\x14(\xe7:i\x8c\xfd;\xbbX\x01\xee\x1d\x02v\x13\xf4\x97\xb0\x11\x8f4\xcc\x8f\xa9} ?\xe4TN\xc1\x87\xe9wdAG\x9e\xdf\xff\xa6v\xf6\xa9 \xdc\xac\xfd\x08\x05\xcb\x83\xfb\xcd#4H\\\xee\xb0\x027Z\xbf\x8b\x17i\x1b\xe0\xd4,@\x18\xbc\x0c\xddi\\\xf4\n\xc3\x1e\xf50ul\xc0\x84N<\x11\x06a\x08\x8a\x8f\xf2\x91\xc4\xdb_ \xde\xfeZ\x11o\x8b\xf6f\xa2\x07\x8f\x90\x0f\xc9\xfd\xb2\x1c\x9d\x96\xcaSVk\x88P\xddqr\x92\xbd!\xd3xSq\x1a\x85b\x94\x94k\x89$v\x03\x1f\xdd9Z\x83Q!~U\xaa\xdfU\xbeF\x81\x7f\xba\xc3G\xe8o\x85T\xc1\x04C\x95\xc1\xfb\x83@\xf4\x8f\x8a\x10\xe5\x04Z\xb0P\x9c\xb4\xf0\x90\xa4\xf4Q%\xae\xaa\x10-R\x84\xacE\xfe\xd0oR\xec\x95>\x8e\x1e\x92\x86\x15I\xde\xa8\xa5E\x9d\x8a\xdb\x1c-\x08\xa5\x1f\x13\x1d^\x9d\x06lH\x99V\x08~13\x04\x81\xa2\xe21\x15\xb9s\x94\xe6E\xe8P4\xdbjvb\x0d1\x03\x8e?\x85L\x90|\xb1\x14F1\x19\xf6\x9f\x01\xe7\nk\xce\x80\xd0\x00)\xbc\x0b\xef\xea\xf1\x08\xf6 \x16xA\x8c\xb0f\xd3|\xba\xe4_4\xecA\xc3\x06\x1a\xff\xbf\xd5\xee\x98\x80\xbf\xb6\xd9\xcbFs\x0bh\xc9\x1f2(s\xe7\xcf\x0ck\xfcca\xff\xbb-l)\x85\xf0\x02r\x8f!\xfc5Y\x06\xdd\xd1\x9b\xe4\xa3T\xce\x96\x14\xb7uGo3\x1b(\xcd\xd6\xec*U(\x04Y|d\xddI\xf8\x86\xd5\x02(f\xc7\x90\x08H\xd4\xe6+TN*\xfe\xe4\xba\xae\xee\xe8K\xe6\x90\xe4\x1e[K\x9a\xa8\xd5t\x15\x0f\x1cf\x8b\xaa2C\xec\xb5\xd5\x87\xd1\xf5\xba.\x85\xc0c\xf7\xa1\xb1e\x9a!\x9bK\xd8X8\xfaO\x03\xfa\x1f\xbd\xfb\xcc\xdc\xd5\x8cgG\x18O\xea7(\xea\xa5\xedf\x7f'T\xff\xf7\x8aT_\x11\xbe\x89\xadQ\xd1\x10O2\xfb\xec'\x9fH\x9a,\xc8\xdd\xb6\xd4\xfam\xc9\xd1\xea\xa43\x8e\xff\x17\x19m\xe9\xfe\xe4v\xdd\xbb:\x15t\x12,eZ\xder\\\x955\x1a[\x156t\xce\xec'\x89\xf6\xa6\xff\xb4M\xff\xab\xd0U\x939\xfd\xeb\x8e\xde\xe2\x04\xfd\xa1\x1e\x1f\xd2v\x98\xe0Fr\xab\xbf\x11\xf4\xfc\xad\"z&\x0c%\xec\xc5\xa1?\xc5\xa8\xf0\xc0\xfaZ\xa7q\x9a\xe8\x93\x0c\x02\x90\xb5\x86\xe4\x7f\xa9\xe5on\xb4\x9a\xad-~@\xdc\x11\x94\xa2\x18 \x0f\x8b\xbb\xe4\x15\xa7\xe1\\\\@-E\xb3\xf4\xbb\xd5b\xc4\xb9PD\x9f:\x80(\xab(\xcf\xc3v\xfa:\xce\x8bPqJ\xae\x8cz`A\xdfO\x9fS\x9av\xe3\xc5^\xcf\xf3\xa98[\xe9\x9c\x1eP\xc9\x85\xf2\x074\xbf\x054+\x18_\xa9\x0d\xd0\xef>\xda\xd1\x1d]!*\xf4+A\xf8\x8fF\xbdc\xffbj\xb1\x0b}\xf4\xd1\xb0Mf\xa8\xd5\x93\x1b\xe6\x13\xd90\x9f\xaan\x98\x8c\xac\xa7T\x08\xc4\xae_w\xb2\x17\xe4\xde\xdf\x1b\xc8]\xb1\x97N\n\xe6\xaa\x82\x83\x1c\xc3\x05\xc8\xc3i\xeem\x18\xf5\xeb\xbd\x08\xc1kG\xa3\x1fu\xe8\xfb*N \xc2\xfaL#\xe7a\x9e\xed\xa2/\x17E\xf3\xfb\x0e\x86TM\xb8\xb2zL\x13\x95u 8r[*\x92\x91V\x9a\xc8r\xa1\xef3A\x0c\xce\x08`\x82\x82t\xad\x81\x15#|\x86!F\xc6<\xc9y\x10X1y$\x11|a.\x00\x7f\xd6\x9d\xab\xa9\x11@\xf0\xf7\x88gh\xf8\x03\xe9,D\xfd\x19\x05\x7fE=\x17G^\x1f\xbd\ncL\xb5I<\xef}z\xc8er\x9d\x97\xc8\xda\x0f\x83x:FQu\xdf\xba\x91[\xe2\xb9\xee&\x89K\x91\xc8Z*\xe1\x03\x81\x18\xb3\x13\xe5\x15O3\xa1x\n\x12-\x97\xf0\x03\x13i\xb1\xf8o\x02|Q&\xafS\x1a\xbb\xc2)~\x02\xf1\xa8X}\xc5\xd5R\\I\xc5p8\xda\xd5{>t\xafuG\xa7\x97.\x1d0%\x17e9\x14\x1d\x17\xdc\xd5\xa7\x13\xdda\x8a.\xc0\xfd:\x19\x03\xf4\x96\xb2az\xbd\xd9!`\x19\xedv\xb0$\x81\xd4\xb4.\xc9\x1b\xce\x1f(\x01J\xffN-\x01\xebLq\xb8\x97\x89<\xe2\xccO\x91\xccVA\xe9\x1d\xe19\xc1\x8c\xb8\x8e\xbd1:\xec\xdf\xd1\xd3L\xa9\xf7prX\xb6\x94\"7l\x19\xb5y(\xdds\xea\xa0\x13#\xcb\xaaA\xc4\xc9s\xeb\xe1\x11\xcd\xf5\x93C\xfccX\xdc\xfc\x11\x7f\xae\xef3\x98i\x04\xd4\xba \x02\xd3!\xecN0M\xe7\xe6L\xe7G1\xf8\\\xa3\x8b\x80'\xba-\xcdW\xab \x0f \x04\x9ee$J\xf7\xba\x10\x19r\xd2\xba\x1eC\xac\xc4\xaa\xc1G\xe8B\xbep\xbb\x17:\xa1v:\xd0i\x98L\x1d\xe8n\x18^{H\x07\xfa\x88\x85(\xbc\x04\x9f\xff3\xd4\x8e2\xbf\x94\xd2\xc4\xb9-\x85\xbb\xf3E\xb2\xbe\x05 \x969:\x80\x08\x84;A\x97\xa5\xf6\xf1\x02\x10v\x11\x08.\xa2\xcb\xfb{\x83|t/.M\xfa\x9b\x85\xfb\x0c\xa96\x15?*\xa72\xa1m\x19\x9a\x9b\xcf\x81\x9b\xce\xb1\\\xab%\xa1\xads{\x8c\xc5\xc3V\x81`D&\x80\xdd\x88o\xcag\xf6\xee\x0b\xd7\xb9\xb8$\xac\x04\xa1$|[\x03\x9f\xfdT\xce\xdf\xaa\x9b\x0bV\xce\x8cp\xcd\x99\x00\x04\xe8QC>\xe5\xa4\x9d\xf0\x02\xb1\xe8\xe1 \xce\xc7\xcd9w\xc1\\X\x16\xc7\xa9\xa4g~ilq\x89og\xee\x921\x9d\x05<\xceU\xe6\x8dA&\xb9\xd2\x99\xbb(6 \x88\x97&<\xcd\xae_\x92S/\x0fw\x857\x0b\n\x180\x91w*I3e\x83$\xe5\x00\xd4e\xce)\x1eU\x83\x0c\xf0\xca\x05{.\xd8w\xc1\xa1\x0b^\xbb\xe0\xad\x0bN\\p\xe4\x82c\x17\x1c\xb8\xe0\xa5\x0b\xbe\xba\xe0\x9d\x0b\x9e\xbb\xe0g\x17|p\xc1\x17\x17\xbcr\xc1{\x17|\xa4V*\xff \x8aRq+\xb3@\\)\xabk4\x9e\xe0\x195\xe5s\xc3>\xa2v|\xdc\xd8/N\x19\xfb\xf9\x89\xb1_\xa9\x16\x9e\xab\xc5U\xb3\xbe$\xec\xd6ZT\xab\xf92\xa51\xbb[$)\x8c!\xe0\x81\xc8\xe9\xf5k\xad 0U\xce\xb0\x8f]\x8c\x82\xf4\xe5g%\x03\xbft~\x9b\xb08{&A\xb0\x84\xc7\x07\xb9\xac2\xa5\xa9\x03L\xe3\xca\xbd\xbf7\xae*\x8am\n\x8cD\x1fa7\xf7\x8f\x99\x13\xfd4h\x92\xff1\x19La\x10\xd9\x8c\xf0\xa5\\\xec\x9fQ\xceI\x95(\x9c\xe2p'\xf5\xac\xc0\x87\"g\xe2\xfc\x03\x8e\x7f\x11\x8e\xd5\x04d\x11\x8a'a\x10\xa3Xh1\x84\x13\xc0\xe3*W\xd5H\xfe\xa51PZ\xb7\xfb\xe4\xcf \xef\xfd\x98\x89\xbb+}\x84\xf4\xff\xfd?\xff\x1f\x06\xa3\xe2x\x0f\x02\x99\xe4\n\x97D\x8b(s2X\x90\xae\x95eK\xd9\x03,\xfe\x0c\x9ep\x7f\xd6_\xa5,x\x8f\x10\x95\xbd\x8aDeE\x89\xf3\x1bz\x80\x9d\x05\xf4F!)\x99\xa1\xbb\x90\x85\x0c4Mc\x9ft\xbf_\xb1\xfb\xc2\xad\x95r\xd9\xe5P\xe3\x1d\xd4c\xaf\x8f\x1c\x0d\x87\x93\xb2\xe0s\x8fh\x85L\xec\x8f\xff\x0c\xa3\xff\xf0\xb1l1\xa6N\xde\xb7%\xdf\x8c\xee\xef\x99\xa33\x17i\x04E \xcb\xcb\x04\x12o\xb8xI\xd7\xde\xf2-\xa2\xb1\xb0\xecqq\xc2\x9f\xb4\xf8\x02\xad \xbe\x902\x0bE\x8e\xb1\\|Q,\xb8\xf8\xfd\xdb\x0b.VO\xa3[\xc8is\xf8\x9d=\x92\xcb\xfe\x86\xd2\x0ey\x19gC\x028\xcd\xa1S\xbe\x8e\xa3\x13\xf3\xd4\xe0\xf2\x90\x8a\\vA\x92+\x85\xb9\xc6\x05\xfc\xd3\x1f.\x98\xf3\x0e\x0b\x99o\xf5n\x10e\xef\x06tF\xe9g\x8f\xba,\x14d\x96-e\xf1\x17\xa5\xf8\xf7\xdb\xb7\xc7\xbf\xbc\xfe\x06gV\x90\x171\xfev,\x11X\x91\xe2\xfc\xe3\xe9x\x0c#\xc6\xfb\xabh\x04\xc5] \xee&\x1a\x1a\xca\xff\x8b\xab\xa1\x9b\xdc\xfe}r\xfb\xf7U \xd9\xc0\xf31\x8a\no\xdb\xf2\x1e\x87\x94\x9c\xbe\xd3.\x15\x19p:W\xab\x91_\xae\xfc\xb5\x16.\xb7\xf9-$\x7f\x1f\x15M\x0f\x05 W\xf60\x0d\x0e\xa0l\x803\x05\xf46\xe4D\\\x8a\xdfG\x0e\x04\xec\xea\xe3\xc4\x0bz\xc7_\x9b\xe6\xb7\xc4\xaf%\x92\xfb\xdf]0\x170w\n\xd6a\xb1z\x10\xddO\xf4\xcc\x1f\xb5\x8cCr\xe6\x1eV\xa70$k\xe5U\x9enE\xda\x7f\xc98ti\xf4\\\xca\xa0g\xafr\xd2\xcd?\x95\x17#\xc9\xd2\x01\x9e$7\xaaT\"\x8d\xe2\xf2\x85I@\xfeO\x9a\xf2#\x0c\xea+D6[f\x87_\x85\x8a(\xe6\xa440\xd3T:B\xbc%\xb8\xfb\xb6\"\xee\x96\x82L\xdb;9\xd0D>\x97\xe2\x9beQ2\x96\x87\x01\xfag^ \xf2\x9f\x1d\x84i\x82W\x9e \xa2\x04\x82'\x04\x82'\x95!X\x96\x0e\xc7xx\xe8\xcb\xe6nj\xa7o\xab\xb5\xf0\xe0\xd4\x9fh\xe6\x934\xb4\xc2\xc0\x9f\xf1*l\xf8 \xf7|5(\x82\x1f\xd0\xc8\xe3T\xf8\xbd\x1e\xed2u\\\x19\xef\x1aM\xd9\xd9\x8cVN\xdd\x1dL\xc5\xf9[\x94\xab\xfb$\x9fc\x9b\xa7\xd8F<\xf7\xb9\xd4\xb1\xd5j\xbaf\xe8\xc9\xf3\xaa\x03\xc0S\x99\x99\x9d&A-l\xd9\xd4\xf4%w-o*dYG\x84\x14\x1cU$\x05\x89\xe7VrP*\x8fL\xd3\x04P\xb6|LZ>\xae\xd8r*\x98G6XnE\xb1(\xbb\xd0\x08\x8b\xa3\x03\x96]\x9c\xa7o0A9\xac\"f\xb0\xf0<\xec\x175\x80\xa6\x89\xec$v\xd4[qr#v\xd4\xeb\xf1beY\xcaD\x92\xbb\xaf\x84\xdc}\xadH\xee2\xda\xbd\\\xbe\xbe\xd2\xf7%\xa7E\xab$H\x9a \x06Kv\xd67\x17@\xba\x1c\x8e\xa7\x02\x8d\xfeNId\xae\xb3th!)a\x8c\xd4\x10Ba\xa5\x10B\x0fY\xd1MJ\x04\x81\xa4s\x07\x0bi_\x00D\xb7N\x04\x94\x80?a\xf1\xd6\x9dNK6en\xa2\xab\xa3i\xff\xbb\xa5\xafbr\xc9Q\xc7DS\xa5'\xde\x12\xd1\xd4H\x1cn\x9a\xd8\xd0T/\x95;\xbe\x14&K\x02<\xcb\xa9\xe2$\xc3K\x9e\x8aOU\xfb\xdau\xfd\xb3\xbe\x1e\x80\xdc*q\xc5\xc0\x03\xe2\xab\xd1\x94\x0bc\xdf\x11\xfa\xf1\xae\"\xfd\xf8\xc7\x84\xa3\xff5\x84\xb1\xe3R\xf4\xae\xe8\x13\xc3\xecI\x0f1\x1a\x17\x18N2[\xe4\x80#,\xf5>\xaf\xd5T\x9f\x99L\"\xfc\x94\xa3L\xfa\x9d\xfd\xb79\xcb\xb0q)6\xca\x05\x96\xc8\x8f\xa4v+\xd9\x0c\xfb\x8f\xb2\x17N\xd5^\xd1\\8\xc5\xbe\xd0\xad|\x81\x13W\xa0\x14\xfc\xb3f\xc5\xf9\xaa\x85v\xc6\xa4\xb6bf\xac\xd4\xa2\xe3\xbd\xbf\x97\x92\xf0r\xa3\xe3\xf21\xadL\xcc\x87\xdf\xfeH_]\xa7]\xa2\x9df\x10:\x81@\xeac\x0f \xd5X\x7fK\x06\xa0\xd8<\x9f\xb7\x9eX\x0b\x17\xdb6,5,\xc5y\xe51\x90V\xf0\x84\xff\xad\xe4)\xf6\x15r}\x7f\xcc\x8c\x14t \xf5\x98\xf9.QVYm\xae~\xbc\xcf\xbe\xfb\xe3\x9d\x8a\xcb\xcf\x188\xac\x81\x17\xf4\x0b\xcf\xe37\xd8\xa0\xc2\x1fITr\x84\xe4\xa6\xe4^;\x9c&\xab\x9a\xba\x16p\x97\x80\xf2[\xe7\x05\x04s2\x00>\x0e\x90d6\xa7_\xf8\xf5\x9c'C\xff\xab\xc4\xe0\xfa\xbf\xc0\xbe\x90\"\xd0e\xf6t(q\xb8\x95_\xad\x11\x8c\xd9nP\xf93E9\xb7\xc2J\xaa\xdb\x82\x9b\xc1\xfe\xf5}\x11\x14j*\x96\xee\x08%\xac\x16\x86\xbd\xba\x08\xa8\x05\x12C$\xb2\xc7\xc8\xe7\xe3\xd1\x9f\xb5\xb2\x02p\xd2h\xeeJ\xdc\xce`\xea*\x88yJ\xb5\x84w\x81i| \xa7\xd4\x87\x15N\xa9\x01tQ\xbd$2\x0e\x19\x1b\xf4\x02G(\xd6\xe9\xc3\x82\x00>\xa9\x83\xec\xdb4HV\xe3\x85<{\xbf\x90Y}\xa98\xabo-z\xdf(='?\x7f\xff\xf4 -2W\xb5[QJPN\xe5\xe6)e\x17\xa4v\x85\x1fPo\x14\x86\xd7 \xee\xae\x19kA\xad\xb6\x16\x96\xf2\xa4Kb\xae\xf8\xa5\xfb\xe8\xb4\xec\xba\x17\x14?\x7fQ\xf2\xfcX\x180x\xfd\x85I\x032\xe8E:\xb8\xe2\x90\xfb\x07\x12\x0c\x84<\xc1e\xd5\xb8L\x92V\xe3\xb0\xa1\x9aU\x9fF\xc88\x0c\x8ei\x84\xf9\xd70@~\xad\xb6V\xd0TZ3\x87T5\xdc\xa2\xd0?\xf8EVm\xf8\xb0/kXAm\x18\x16\xa9\x0d\xff+\xaa\xfa\x8a\x82\xa7\x10\n+\xae\x9e\x0eJ\xae\xa1Es\xeeq\x8cZ{\xec\x12\x16\x0c\xe0v\xfaP\x89\xeb\x07K\xf4\x96L\xe2\x11\x12\xa4\xb3\xef\x96V1\xb96o4\xef\xbaT\xfdL>WL\x9c\x00i\x95\x1b&\xac\x08\xa9\xf3\xef\nRy\x1d\xc0\x0e\x93Y\x1b\x98\xf22\xe6\xdc\x851\xd2i\"E\xddAT\xbe\xb4C#\x9d\xed\xd0\x17\x18\x0eu\x87~\x13\x99\xb1\x1c\xd4\xcdBnoZ\xe2\x89\x94tm\x9aj\xab\x12u\x8bZ\xdb\xe72\x03\x07/D%\xce\xde=\xb6\xebE\xc9\x8ag\x15\x1b(\xbfYg\x01\x98{}\x07\x13\x9c\x98\x12\x08\xfb^\x80\xfa\x8e2\x03*\x92\"\xa0\\\xb0%\xe1\xfa\x9flCgR\x12\xc2\x8b\xac\x8eYW\xd3*\xe2\xbba\xa0\xfa\x8dSk9\xb0\xf7]\xe1d\x16#\x973\x19)\xae\"\xec6\xf9\x0e\xbfA\xfe\xee\x8b\xc09\xad\x1c\x8c#\xfb\xfe\xae\x84\x15H\xc1\xaf\x91g\xcd\xc3\xa5\x1cDfj\x9c\x9f0\x0b\x0e\x8e}?9t\xa9+\xd0\x08\x8f\xfd\x0f\x11\x9c8W\xd3\x85Y\xc4},\x19q\xe1\xf3\xdc\xa1\x1d \x99\xd6*X\xb7\xff\xbd\xe0N\xc9:\x7f.3\x8b \xf0_\xac:\xdb\xc3\xbfC\x02?\x90d\xeb-\x1a\x18d\x9e\".U\xaa3a%\x13\x06{\"l\x15V\xe6BM^q8y\x1d\x85\x138\x84\x0c*\xab\n\xdf]1\xd5\x03\xaf\x7f\x1cN\xd3\x196(\xf0b7\n}\xff0\xc0\xe1{\x0f\xdd\x1e\x0e\xe8X\x98\x85NI;\xef&\xfd\xd4TVj\xa8\xb8T\xae1eK1\xed(\x97\xccEh`\xb9\xd3(b\xd1\xbf2Or\x8d\x9f \xd4G\xfd\xec\x10\x1e&S\x94BQRE(\xd4\xad\x87G\xe1\x14\xef?\x90\x1c$\xc8\x1a\x01\x89E\x074\xa1\xa2\x83ybE\xbd\x0f1\xa4A\xeb\xeb^_\xa7G\xcd\x02\x14\x1d09a\xd8\xeb\x87\x0f\xbf\xe4(\xcd\x0b\xbfB\x96gL\x19\n\xcfU+\"`1\xc7E\xcc]7\xd1@\xc8\xec\x07y\xaa\xe8\xb9`\xce\xfc\x1a1%\xe5\x04\xc2\x94\xa4\xe3\xbc\xb2\x9b`$\xed\xef\x99]\xab\xf1\xd3p\x89\xa0(\x1f\x9a2\x89\xbc\x82\x95\xf0\xba\xa9\x10,\x0b. 1\x01\xb9v\xcaS\xf9\xe1\xde\xdeN\x95X\x94I\xf3 uv\x83d\x8b\xa6l\x04\xe4\xd3\xd5\x0f\xf7\xd7\xff\x08\xe1y4\xad(\xd9\xe3\xff\xd9m\xc9\xf8\xd9\x92\xed\x97`7Jc\xb7\xb0\xafPM\xeeR\xb2\x8c4\xa6+b\x8c\xfc\x06\xf4\xc5\xc5\x9e\xbc\xd6\x174\xf7\xde-+\xac\x17\xec8Y>Q\xe3\xd1\x84\x82\xc9\xcf\x02F\x81l-\x9e\x95\xd3\x85\xbek4l\xfb\x17\xad\xae\xb5\xb6&w\xa6N\xc6W\xba\xcfV\xc5\xc1\xb7\xdf\xcbQ_\xa2\x10\xa6\x01\x7f\xd9\x06\x8c\xba\xd8\x8a\xc2\x10\x03\xd8\xc5J\xb4\xa8\x98\xee\x92\xae\x8a#b\x07\xb3\x81e\x1e\x96!\x0fv\x0b)k\"\x10\x86<\xc6\xad\xd2&}\x90\x04\xf6\x8d\x17 \xda\xe5\xc9\xc2\x03x\xe3\xb1\x13[_8\xf3\x85 \xb2\x8a\xdee\xd6\x84\x87\xfc^\x1a\xb0K)V\x89\x0f*\xa0<\x8f\xf0\xf8>\xf9\xf6\xc4\xa7\x90\xc3\xf1\x06\x06kA\xd0\n\xa9Y\x1b\xa3`zN\x8dd\x85Z\\\x89\x9cN\xed\xfa|8\x89\x91a:\xe2\xb9a\xca\xf0\x9f\xa4\xb2\xecp/\xe8\x9fQ\xfab \xb0f\x9b F\xf8\xdc\x1b\xa3p\xaa\x1a\xaa\x11f\xeb\xf3\x94\xd24V\x98\x8c%\xf5\xc0\xe0W\x7f+\x867\xfcQ\x96\x06\xa2\\+]\xb4*?V\x81\xc8\x91\xd9\x95\xe1\xe9\x95\x07\xe6l\x00/9\xef\x9b\x1d\xae\x92\x9e^%\x11I2U\xaea\x9f\xdf\x8e\x10\xf2\x15\xde\x92\\~\xf2\xe7\xfc[y\x8dE%G\xa1\xe4r\xc8\xf6,v \x80eQ\x88\xa1\x0e\xe6\x18FC\x84\x1d\xfds\xcf\x87\xc1\xb5\x0e\"\xe4;z\x10R\x9b\xe9H\x0b\xc2\x08\x0dP\x14\xa1H\x07#B\xa8i\xc2\x93\xd8y\xfat\xe8\xe1\xd1\xb4G\x0e\xad\xa7oQ?t\xfd\xd9\xd3\x88|\xea\x0b\xa0\x1f\x84.ES:1\xedux\x8b\"\xd4\xd7z3\xed-:\x08]\xfd\x1b(\xfa\x8f\xd2;H\x18\x86\x92Q\xefn9\xf5v\xd9\x02\x1e\x94\x08\xb0\x8f\xa7<\xea\\\xa3#\xa2i'y\x02t\x99'\xc0hN\xee\x80\xa6\xaf\xd3\xbc\xbf\xa6\x16\x85\xd4\xe0\xb4\xb1e\xf7\xd1\xd0\xd4\x81\x92\xd1 I3\xa0\xd9V\x93\xa55\xd0\x17\x05\x8b\xb3b\xcf\x86]\xc7&\xed\xbdRw\xe6\x02\x1c\x17\x83\x8a\xf4 \x82\xaeb\x9e\xd7\xb0\x1d\x9cK\xfd\x9b\x04\xf8\xdc\xd5u'\xa2z\x06:\xccR[\x97\xf8f\x98\n\x0d\x18\xf2i\xc1\xfb\xfb\xf9\x02\xdcx\xe8\xf6yx\xe7\xe8\xb6fk\xdb\xcd\x0d\xab\xd9\xda\xd8\xde\xd6:\x9b-k\xb3\xbd\xbd\xdd\xd6\xc1\x0d\x8ab:\xa5\x86\xd5\xd0\x01)9\xb9\xd3\xc1\x8c\x7f\xb2\x939\x00\xdck=(\xd0\xe5\x91\xee\x0bA\xb8m\xb7\xad\xedf\xb3\xd1\x06\xf5\xad\xcdm\xab\xd1\xdej\x92\x13=\xd7\x00\x8b';\xef;T\x01%\xfe\x1bk\xf5\x8d\xcd\x96\xb5\xb1\xb9\xb1\xd1\x06\x8df\xb3amt\xec\xa6Vo\xb6\x1aV\xb3\xdd\xe9\x00\xfem\xcbni\x9d\x8e\xb5\xd1\xd8\xe8\x00\xb5~\x9dB\x03'\x11\xf6\x9as\x94^\xae.^,\x8a5e\xd9\xd1\xa1Iad\x01\xbe-\xf2\xb2\x83#9\x9b\xc57\x90r\x05\xf2\xe0\xfe\x99\xd0\x97\x9f+\xd2\x97\xcc\xfd\xad\xec\xf6$$A\x94\xc6\xf1\xe5K\xbc\xcbe\x10\xc2u\xac\x86\xd9K\"\xec\xad+\x9e\xe3<\x88a\xbe\xe8\x99\xf7\x15\xad\x17\xb8\x98\x17\x14\xfd@_\xbdE\xc3\xa9\x0f#^'\x9dX8]\x87\xbc{E_\xf1\xc2\xe2\xc0[\xc7E~\xe9\xeb\x99cP\x12\xd7\xe4\xc8\x8b\x90\x0f\xb1w\xc3\xce\x85\x82h\xe4\xe4\xb1\xe0\xba\xd9\xb4\xc7a\x88G\xcc\xef'=8\xf9&\x05\xa5\xca\xc5\xf5u#\xf5>\x9c`oL\xc8\xc0\x04\xd1\xb4\xdfdll\x0f\xd3\xd6R\xaf\xb55o< #\x0c\x03\xac;\xban\xae\x8b\x93\x15\xc3I}\xe4\x0dG>\x81\x99\xe0\x182\xe7\xb1\x99\xcc\x9d\xaci\x1d\xf6\xaf\xa61\x96\xcc-y\xf9\xafTv\xf5\xe24\xb3 \x9c\xca;mv:@K\xfe\xd8In\xf5\x85i\x82H\xa2\xfe\x17\x82\xfa_*\xa2~\xc2\x9b,[\xdb\xc2\xeb \xe72T\x9d\x9f\x0e\xf4,{\"\xafx\xec6\xa7\xee\xb3\xffH\xdf\x15o\x10\xe2\xc2\x96\xf0,`\xcd6\x8d\x0f\x04\xb6\x1f*\xc26\x7f\xd3Q\x98\x96\xfc+\xca\xb2\x84r\x19\xdf\x93\xae\xdeW\xec\xaa\xd0\xc5\xae8q\xb2\xbc\xf3&\xac#\xfb\xc5\xd9\xd6T2\x10y\xf3JS\xc8\x7f\xaa\xbb\x07\x16\x8b6A-\x99\x1f\xba\xf1\xa5I\xb770\xb0Z\x99\xf6n\x11\x96\xeb\x83\x87G\x86\xfe\x8bn\x8a@\x11\x13\x18\xc5\xe80\xc0\x05\x15@\xc3\x16\xce\x02\xecT\x95\x98\xb8\x8e\xd3x\xb4\xae\x9b\xda\xbf\xc8a\xfb\xb4a\xdb\xf4\xc0Ml 2\x8dr\x94#\x9c\xf8t\xccp\xee\x15A\x84W\x15\x11\xa1\x88c/b\x95\x95\x97\x14\xef<\x89w\x1fIw\x1f+v\xa7&0NG\xb5+xC#\x11\xd2~\xbc`2\xc5\x16\xc48\x8aSJO\x06\x16\xd5\xaf)F0rGuZ\x81\xeag\x8c_\xc9\xf8~\xad8\xbeb:1\xb939B\x96\x12\xe4$P\xb0p\xa0\xc9L\x89>&\xdf\x18`\x93R\xe9\xa4:\xa9\xbc\xdeJDbY\x8b\x96*\x8cb\\\x1cnT\x8dd#b\x18?\x98 \x87\xaat&0\x92>I\x99\x0bsV@\xf8\x03^\x0f\xc1\xab\x842m\x958S\xad\xe4\xa1\\X\xb8\xb9J\xe1j-\x17\xf1\xb3\xc6{\x03\x97\x89\xd1\xccgVg\xf7\x83\xf3\xc64\xac\x06(/U=\x04u\xe5\xe8\xd3\xa2+\xc2gq\xfan\x82\x98\x90\x92J\x9e\x139\x15\xab\xaa\xb2M\xabOS\xea\xd6\x86m\xb3?\x89Z\xf5n\xec\x071S\xea;O\x9f\xde\xde\xdeZ\xb7-+\x8c\x86O\x9b\xb6m?\xa5\xfd\xcc\x84L`\x89\x9e\xf4x{c\xcbj\x82\xad\xf6\xb6\xd5>\xda\xd8\xd8\xb4Z\xa0\xd3\xdev\xb7Z\xd6v\xbd\xd1\xda\xb0:`c\xc3\xda\xac\xb7\x1a\x9bV\xbb\xdeiX\x9b\xf5v\xabcm\xec\xb777\xadF\xbd\xd9\x01\xcdN\xd3\xea\x90/\x8dF\xcb\xda\xa6\x7f\xdbn\xbd\xd1\xda\xb2:\x80\xfcm\xf1\xef\xad\x8d\xa6\xb5\x01l\xd0\xb1\x1b\xfb\xcd\xc6\xb6\xd5\x04\x9b-\xdbj\x80v\xa3E\xbe\xb7I\xbf\x9b\xd6\x06\xd8\xd8\xd8\xb0:~\xcbnX\xdb\x80\xfcm\xbb\xed\x96\xb5\x01\xe8\x9f\xcd\x0d\xd2C\x9b\xfc\xb1\xdbV\xb3\xdehZ\xed\xfd\xed\xad\x06\xd8nnY-\xd0\xb0\x1b\x0dk\x0blm\xb7\x802\xab\xaf\xdaq\xa7\xd9\xb6:\xa0\xd3l\xba\xf5\xad-k\x1blmY\x9b\xf5f\xab\xc5\xbe\xb4\x9a\xa4\x96\xcd\xde\xd5\xe9#\xfa\xad\xd9\xa2#\xa6\xef[\xae| \x9a\xad\x16\xfb\xc2+\xeeo\x909\x83\xe6\xd6\xb6\xd5\x06\xec{\xbb\xd5\"\x80\x14\xdd~\xd5y\xc0\x0cv\xd0\x14\x1d+nH\xb8g\xe3\x0d9S\xdeT`\xde\xbb\x86i\x82\xd6\xd6\x8a}\xc3;\xc3\x06\x85\xbd\x97w\xd2h\xa9\x9dHUdz\xa8\x17\x85\x8d^R\xd9\x15\xab\x12u\x05\xec\x87\x08\x93\xf7\xcfg\x87}\x03[c\x84\xa1\xb9\x13\x11\x90\xe6\xfc\xf5\"s\xb1\xa0\xc1])\xff[h\xe7\xca\xec\x9bY\xa0\xd1\x1d\x11\xcc\xee\xdf\xad]\xbe@o\xd9\xf0\x0cl:*l(\x86`5\nZ\xe2\x92\xc1{\x13Q\xd3\xe4b\x91:\xcc\x8a]F\x9b\xad\x82s+F\xa0UG\x9d\xb6\x8dO\xebC\xb3]\xa3E*\x12j\x0e\xbfSN\x82\x08\xe7{\x00\xb8\xb4\x8f\xe2\xb6i\xcbY\xd5h\x1av\x05+F\xb7\xb9\xaa\xe0\xa4\x15\xf8\x87\x81LBP\x02\xe5\x9a\x1c\x98s\xac\x0c\xd8\x08X\xbe\x92\xd5\xf5\x9d\x05\xe8\x99Vu\x8aM\x97q%\x91b>\x16\xc3\xa0\x1c\x87A\xec\x86\x11r\xb0E?\xd5x\x81\x81\x15\x87\x11.\x89\x80\xc8\xcb\xd7\x11\xafW\xe4\xb24\x01\xdc\xf3\x85\x81I\xe7\xda\xcd\x04/\xf3\x8ewnV\xb3I\x11k\x01\xf4\xff\xef\xff-\x08\xfa\x14O\x00s\xef\xcb\xf9\x16L\x80\x1a\xf77\xe9\x11\x84\x01'\x95\xecM\x8az\x82\x89\x0f]4\n\xfd>\x8a\x1c\xfd\x8c-\xb1e\xe9\xcc\x03\x92\xea\xb7\xf4l\xe8_Z\x88R\xe8ro\xc2+\x0f\xccW\xf4\xb0\xf0'`\xce\\B \x04u\x01B\x87\xaf\xb6\xbe\xc89\x0f\x05 Z\xea\x04:%uk\xe3\xdd\xb88\x90\xfa\x01\x02sv\x8d\xf3\x97\x99-\xe6\xeaM&\x02\xd1\x02\xe9\xcc\x9aB\x152\x0b\x953Q|g\x19\xb8\xef\xef%\xd8\xd9\xd0\x08\xd4^DQ\x18\x19\xfai\x80\xb4p\xa0\xd1\x85\xd2\x9e\x90RO\xb40b\xdf\xdeE\xfe\x13\xed\x16\xc6Z\x10b\x8d<\xf0\x06\x1e\xeak^\xa0=\xa1\x96\\O,\xdd\\H\xf0\xfd\x07\x87 \xd6\xcd\xb7`0K\xd6\x8e\xfe,N#\xd2\x9ft\xf5\xa6e[v=r\xad\xb6\xad\x83\xd1\xa4\xab76{\xdb[\x9b-}G\xee\x9d\xf1$Y\xf3\xd4\xe6\n#\x83=\x9d/(\n@\x8c#\xaf7\xc5(\x06Q\xd7\xde\x89\xfe-\xb8\xa0\x9dh}\x9d\xb5\x10v\x83\x8b\xe8r\x07_\x84\xd4C\xfd\xb2\x1b\xb2K\x8fT\xce/\x0cd\x82\xa0;_\xec\x88\xe6#2Ql\xce\x83\x8b\xc8\x8a\x10\xe5\xc9\x8c\xa7u\xc32\x9f\x0eA\x193\x9a\n\x83\xbd0\xcd\xcb.\xbe\x88.E'\xc1B\xcem8a+E\xb8%o`$\x8e\x86\xb5\x9aA\xe6e\x02\xf9( 7\xd3n\x80\x0cvZ\xe8&\xcb5A\xde\x98x\x14\x85\xb7Z\xb2\x9cOt\xc4\x10W\xd7\x04]\xd1<\xb6~\x93(\xbc\xf1\xfa\xa8\xaf\xc1\xa0\xaf\xfd\x9b6\xf5L\xc3p(\xde\x0f\xc2i\xd0\xd7\x08\xc9\x1a!m\x02\x87\xe8 s\x06\x82\xc0\xdf\xd1c\x1cy\xc1P\xefv \xd5 \x07\x1a\xda\x85]\xe4\xe8!\xa5Q\xca\xe3Z\xcd\xf0\xbb\xc8\x14\x1c\x93\x88\xa9m\x1a\xd9}5\x98p\n\xe0'\x18\x13Il\x86\x12\xa9\x14*(\x1c\xdf\x0b\x1e\xcd\x17\x00\x9b`<1h\x98\x81\x0b\x9d\x93(\xc24_\x9a 0\x13\xb8\xcf&b\x87d@\x9e\x82\xef56L\x1e\x05\xfd\xc6\xb7\x06Q8\xfe\xed\xcc@\xe6\xce)6J}\xb8I\x9dd\xde\xa3Y\x9f1\x91\xe5\x04%\xa2\xc1\x1d\x03\x13\x90V\x17&\xb0\xcd\xc5Z\x8e\x90+\xc3\xda\xf1\x06*\x0d\x1c\"\xbc'\xf0\xde\xd0 \xe4\xea\xd3\xc8\xd7\xcd\x1d\\\xab\x0d'\x06\x06s\x1anka\x98\x8bK\x9a\xa6\xe0\x7f<}\xfa\x93\xc6\x82<\x1d\xc3\xc9\xc4\x0b\x86\xef\xde\x1eui\xe3\xe4f\x12\xf4\xa1\x1f\x06\xc8\xba\xa2w\xb8\x7f?e\x81\xaf\x9e\xfd\x9b\x8a\xc34\xcaD\xd3\xaf\xfd\xae\x8e\xa3)\xd2\xd5Gu\xaeW\xed\xea\x1d\xabi\xd9\xfa3kt=\xf2\xd1\x1e\x0f\x15\xa1Z\x18\xb4\xed_\xcc\x1d\xa1P\xb0\xb5\xb6=\xb9\xdbY<\xfd\xd7Z\xec\xfe\xeb\xe9\xffP\x8d\xd2A\xecF\x08\x05\x14]\x8d1\xbc\xab\xb3\xb66;\x11\x1a\x9b\xf3t\x07\xd4\xb0J4J\x9a\xe4\xed\xca\x86\x95\xb1Z\xc3\xf6\x85\xd7\xef\xea\xb1[\x1f\xfd\xferv\x18\xea\x972\x84\xad\xceZ\x05\xba\xach\xf5\xdd\xeb\xb3\xd7\xde<\xd5\xb8\xbd\x93}\xafd\x84\x9d+\xea\x0e\xc5\xfev]kL\xeeL\xa5b\xec\xd6\xd1\xfe\xde\xe4\xd7\x13\xed\x99\x96\xfc(i\xc8\x0b<\xecA\xffQ\x90\xca\xcc\xc0V\xc0by7\xc1\xb4\xe7gg'E\xb9\xd26/[\xe3{\x9eofN\x05\xf3u\x82\x10\x1b\xac\xe7pP'\xb4\xcbd\xc9w\xe7r\xe6R\x86\xcd\x15?\xf6\x8e\x82iB\xa6\xcdd\xd9\x02y\x9e<\xd9I+\xaa\x92\x8c\xe4\xdc\x8e\x94\xfe\xcfj*PI\xe1eG\xe0%\x03\x8d\x8a\x97l\x0d\x01\x1b\xbe\x8a\x9e\xc3?~?\x0b\"\xbe\x0d\xda\xf6/;\x8c\xc9\xf9i@\xff\xdb\xc9\xa9\xa0~jn\xb4\x9a\xad\xado\xb1\x03S]\xaf\xb6\x037\xc4L\xaf\xce^^\x8f\x7fWg\xcaZU\xa7\xb8\xe7\xe3#\xae\x0d\xa4\xf64u\xdaW\xb2IS\x8b\xcb\xf71-\"\xf6wJ\x89)\x0c\x05Uv\x80\xf5\xc9S\xbc\xcf\x95\xa3\x81\x13\x85\xce\xe4nGt@\xbe+d\x8d\x02\x84[\xb1\xab\xcf\xbd1\x1c\"g\x1a\xf9\xc6\x13\x02\x0c\x87\xfe~\x1a\xdf\x0c\xd7\xef\xc6\xfeN\x0f\xc6h\xa3\x0d^\xbf:i~\x9a=o\xf7>\xdcM\xdd\xaf\xb6\x07_\xbd\xb5\xdd\x83\xf0\xe6\xa8\xd5o\xf5g\x9d\xd6\xf1\xacs\xe3\x8e\xdd\x9b\xe3\xab\xbd\xdb\xe3\xfd\xed\xaf\xfd\xb1\xeb\x1d\xbe\xfa\xe4\xbb\xc1\xc9\xa4\xd7lo\x1f^\xbd\x98\x1e\x9f\x1d\x0e\xd1\x81\xed\x1d\xef\x1f\x0e\xd19\xfb\xec7\xfd\xeb\xfe\xaf\xc3\xed\xc3\xabww\xc7\xde\xe1\x10\xfe\xfa~\xf2\xa99\xb2_\x9f\x1d6\x8e\xcf\x0fI\x1b\x93O\x7f\xf4\xf7{-Rfox\xbc\xbfG\x9e\x0fO\xce_\xcc\x0e\xbd\xe7~o\xfc\xd2\xeb\xfd\xfa\x0e\x7f\x1c\xbf\xbc\x82\xcd\xfe\xac\xd7z?\xfdt`{\xbd\xf1\xfb\xd6\xe1A\xae|\xbb\xf7\xe1v\xc3m=\x1f}l\xbe\xdb>\x0c\x9e\xcf>\xfdq\xe2\xbb\xc1'\xff\xf0\xaa\xbd\xe5\xfe\xfa\xd2\x86\xfb\xcf\xc7\xf0\xc3]\xfc\xfa\xec\xf0\xea\xf8\xe0\xc5\xed\xf1\xf9\xde\xdd\xa1\xf7\xfc\xfa\xf5\xd9o''\x07\xef:GW\xee\xf0\xf8\xea\xf8\xeb\xd1\xd5\xdb\xf8\xe8\xfc\xfa\xf6\xe8\xea\xdd\xf0\xf4|oz\xf2\xe1\x18\x9f\x9c\xef\x0dO\xce\xf7\xf0\xf1\xf9\xf1\xdd\xe1\xc1\xbb\xdb\xa3\xf3\x17\xed\xe3\xb3\xbd\xdb\xc3}\xbbutu\x8dOf\xed\xf6\xd1\xf9\x0b\xfb\xe8\xfcE\xf3\xe8\xca\xc5\xc7\xe7\xd7\xd3\x93}{vr\xd6n\xf7\x0e\xde\xcc\x8e\xae^\xe0\x93\x83\xc3\xe9\xf1\x87\xe3\xd9\x11\x19\xf3~\xbbqt~<=\xf6\xf6\x9aGWCL~\x1f\x1e\x1cNO\xcf\xf6:GW\xd7\xc3\xd3\xfd\xbd\xbb\xd3\xb3\xf6\xd7\xc3\x83\x17\x8d\xa3\xab\xe1\xf0\xf8\xca%eg'g\xf4_\xf3\xe4\xac\xdd<<8\xb4iY2\xc6\xb3\xbd\xdb\xde\x01\x1d3\xe6c\x9e\x9d\x9c\xd9\xbc\xbc\xcd\xcb\xefa^\x16\x1f_\xbd\x99\x9e\xd2\xf7\xf4]\xe3\xe8\xfc\xb0!\xe6|\xfc\xeb->\xfezH\xfa\xfbz\xec\xb5g\x1fg\xf6\xec\xc4k\xdf\x1d\x9d\xbf\xb8=\xba:\xc4'\xe7o\xa6\xc7\x9e}w\xec\xb5;G\xe7\xc3\xbb\xa3\xab\x8f\xf8t\xbf\xdd\xe9\x1d|l\x93\xef'W\xc3\xe9\xc9\xf8\xb8q\xbco7\x8e\xf7\xf7\xee\x8e\xbf\xbe\xa0\xf0;>\x1f\xde\x1d\x1e\xdf\x9b\x1d]\x1d\x0f\x93\xdf\xc3\xafGWo\x86\x99\xb5\xd88??\x9c\x1d\xef\x13X\x1c\xb7\xc9xz\xfb6\x1d\xd7\xe1\xc1\xf1\xec\xe8\xea\xb7+2v\x0e\x0b|r\xf5nzB\xe0\xb4O\xc6\xc6\xe7\xb3O\xe6\xfbN\xfe\xe3en\xd9\xfb\xf71\x83\x89\xdd9\xdeo7>~=l\xb0\xf6>6\x8eXy \xdf\xc3\x03wz\xba\xbf\xd7\xa2\xebqN\xd7\xea\xeedF\xc6\xa1\xac\xd1\x19\x99\xd3\x1b||\xd6\xb6\x0f\x0f\xdeLO\xf7\xed\x19\x19\xc3\x89G\xf0\xe3\xcd\xf4\xe4\xc3\xad}La\xf9\x86\xc0\xb5A\xca\x9e\x9e\xb5gG\xe7/(\x1c\x8f\xcf\x87)\xdc9\xa40\xa4\xff\x04\x1c1\x87c)\x8e2X\x13<\x150\x7fw\xcb\xfe\xbd\xf8z|\xb6G\xd7\xe4\xf4\xe0\x05Y\xe7\xe6\xe9~\xbbytN\xd6\xed\xd3\xc1\xf1\x95k\xd3u\xf8z\xdd8\xbaz1<\xbez\xd3$\xebq\xfc\xf5\x9a\xae\xd3\xf1\xd5\xe1-\xfd\xfc:$p\xdf8\xf4\xb6\xd6_3z\xb0\xbe?\xecv\x9f\x98;\xe1\x04\xba\x1e\x9e9\xb6\xd5\xd9Q\xa29p\x87\x9cBJ\x981\xbe\xe0\xb6\x17\x92*\x8e\x1a\xccR\x8as\xfen\xf45|7q8\x91\x04\xa3f\xf2\x96\x93O\xf1J\xfc\xa6\xef\xc5\xd3\xb92(\xfaU\xed*}\\\xc8\x9b\x1e\xeb2u\\\xd0\x96S\xc7\x85\x7fr\xfc\xfb\xfe\\P\xe7\xad\x89\xe4\xe4\xc8\xd7\xe2)\xb2P\xa0\xd4\xb2dG:u%\x81\xa7R\x8f\xd2\xf1\xa7\xea\xe1\xb4\xb0JY\xd1\nEr\xbd9,\x04\xd7'\xa3\xbeMcpQf\xb1\xfcm\xf9\x9b\x04H_\x0f_\x8c\x0f$\x8c\xac\x0e\x1a\x0b \xd1\xef\xcb\xa0D\xfd\x04\xff\xcf\x01\x926 \xfd\xd90\x0c\xe6\xd4\xf0\xf6\xa7F\x7f\xab\xd1\xdcT\n]\xf9\xefN\xce\xcf\x7f\x80r9(\x19\x942\xb0\xec\xb7\x1b\x83\x86\xabr]/\xa7\x1f\xef\x82\xb9\xca@*\xcc\xdb\x7f\xe9\xadk\x97A\xd1.\x02\xa0m\xe6\xa0\x92\x86\xdd\xed\xc8\xc3\xaa8\xa7\xff\xe1\x8f\xd1\xa7_W#z\xdf1\xb4\xbe\x19\xe2\xa5\xcf\x11)\x99\xe9\x1f\xc6{\xa9\xcb1;4\x00\xdd\xf1\x80!+`p\x07\x0c\xb4\xea \xd3\x1b\xcc\xc2\xfe\x17q\x03\xa37\x90\xe4\xfe\xf5\x13l\xc3\xb6\xbb\xb1\xa3\xf8])nWy\x91\x9c\xb8\xb54\xec\xc9\x9d\x96\xfcQ.#8r\x06^\x94\x08\xb9\xf8\xf1;z~\xfc\xde\xfd\x04pd\xf90\xc6\xe4a~\\\\\x10a\xab\xf7\x109\x04\x1cN\x98\xd3\xb7\xf22B\x13\x04\xc9\xcd\x8f\x7f\xcb]l\x1at\x80\xf6/\x15\x877\xcf]\x80\x08\xbb\x01\xa3\xfa0\x82}\x0f\x05\xd8\xd0p\xc8\x9dL\x81\xea\xc2\xa5\xd9\xbf\xa4\x7f7ilH\x0e\xdd\xcc/*\x936\xd5!I\x98\x04\xad\xe9 \xf0(\n\xa7\xc3\xd1\xce\xd2\x97\\6\xd3\xeb\xbbn\xbfU\x02\x9a\xa6\x94\xf9\x0c^\x9e\xbd\xedOU\xd0\xb01\xa5(\xc3\xcd\xe1\x97W\xb0T6\xf3\xd3\xf6\xa0\xd7\xeee\xf6\xbc\x10Iov~)!\x1a*2\x88\xf8\xc5\x14\x05z\xd7\xbd\xab\xbd\xabLw\x14\x0bJ&\xd3\x10\x93a5S\xebL\x87\x9eb\xa4]\xf7p\xf2\x9b\x90`q\xb2\xb6|\xbdR&\xda\x8d\x94\x00\x887\xe7\x14\xc8TV\xb8\x8b\x08\x99\xac\"~II_\xe48\xf3\xfd2\xcd\xc0_\xea\xb6\xb8+>\x90\xcdRqWS\xca\xf7<4\xfe\xe3x/u\xf0\xd0\xd1\xa5ph\xfa\xfe\xc3\xd1T,\xaa\x08R\xed\xc4h\x02#\x88\xe5\x06\xe7\x81\xa8\xe4\x1eb[\xaaM\x86\xc8\npk\xf4\xb4\xca#\xdb\x8d\xf6L\xc3Qv+g\xef}\xa2\xacEO\xce\x9b/W\x13\x90\x7fT\xfc\xb5r\xc1\xe2\xaf\xf3Dt\x99\xc6-;\xb5\x10\x03H\xfe\xb7l\xc0\x7fqH\x8f\xa9S2\xa3\xd4\xb8\x97I\x85\x9b\x89~\xf3\xd5\x8b\xab\xbdqj\xb3\xd2\xd1\xa4\x84\xf9\xde\xfb\xd3\x17{sU*JwIFxK\x89C^n\xfb\xb0\xec\xbb-E\xb6W\xeem8\xe8\xa5D\xf5\xb4\xef\xd4\x11\x81\xc2\xfd/\xbe\xf6L\x9b\xfas\xdf\x8b\x853\x06\xed=\x11\xd3\xf2\xc5M\xbeh\xf5N\x8ad(\xcdh\xcf4?Q~v8\x9bT\xbc\x87\xf3:\xa6F\xa3\xb1\xd9\x80\xd5\xf4z\x1ds'#jV\x1cZ\xb8?\x8b\x10\x19\xd3 \x89c\xa4E\xfe\x97\xcc\xa5\xc3\\\xe7\xb5\x8e\xdc\x92\xeaI`o\xda\xdbv/\xb3\x99I\xd1\xb1\x17p\xae\x8dF~K\xad\x15\x1a\xa7\xe4\xf3\xd4_\xbe\x1cZV\x84\xa0\x8b\xeb\x18\xf6\xe2\xcf\x9f1\xec\xd5yp=\xd4\x174\xbdE\xff\xdbY\x86\x92+\xb4\xea\x0cBw\x1a\xcf\x05l\xe0\x14\x87K\xdaq\xc2\xc0\x9fq\x8d\xb1\xaa\x1ac0\x15\xea0\x8e\xb0\xf2[\x02\x9d\x86m/\xc5\x15\x8b\x8c-\x9e\xba.\x8ac1\xdf\xdc\xe5\xbd\xb0R\x84\x98\xb6-\xd1\xdd\xc0\x8em?T\xcb\x0b\x06\xa1\xa8\xb1\xb5\xe9\"\xd4{\xa8\x06\x8a\xa20\x12UrwaY%\x07\xf0 \x0c\x90\x9f\xa2#\x1c\xbd+W\xd6\x9ei}\xef\x06T(6\x89\x90\xdct\x94\xa3\x93{v\xc5\xce2m\xd9ed&\x11\xf5\xc1\xe8\xd7\xbd\xd4Q\xc9\xfaI\x91\x99\xd3Oo\xee\xce47\xec\xa3\x0bjs\xfa\xaf\xee\x13\x1f\x06\xc3)\x1c\xa2\xfa\x93K \nL\xa2\xc2\xf7s\x16\x02\x8aEo\xb4\xb5\xbamQ\xe5\x98\xd5Dc\x8d\xd1Be\xe7\xd3\x9b\x92\xca\xcfN\"\xb4s\x1bF}y\xd0ru\x19}F\xa3\xe1\xa6\x9e\x10\xe6W\xf6\x82\x98f8\x96\x97\x1b{\xd0\x83\xf0\xc1\x01j\xeb\x1a,\x1dd\xd1K6\xd0\xa27d\xb0E\xcf\xf9\x80\x8b^\x89A\x17v\xa4\x8c\x90jS0\xea/\x1diY\xa1d\xc4e%\xc4\xc8\xcb\xde+3(+\xa2\xceD\x94\x91\xb8\x85\xfa\xcd\x1e\xdc)\xbb\xdd\xcb|\xa9\xb9\xab}\xf2\xe6\xa1\xdd\xc1'\xc9{\xcc\x8aR\xd3uX\xca\xbc\xc1\x0e\xff\x15\xa2\x08\x1d5\x8f\xed:\x1a\x02\x8c-l\x1bC\xe6F\x00*\xbc\x11\xb3y\x05\xf3\x8c\xe1\x16\xd6\x19|\n\x91\xa8\xc8F\xe6j\xfc\xe1\xdd\xae\x8b\xa9\xb5u\x1ff4\xaa\x96Bv\xcbc\xb6\xf4T\xa3\xf6.G\xda\xcd\xdd\nx-\xba\xf4\xfb\xfc5\x1f\xfe\xecD\xf2\x94\x9f\x9b\xeb\xc4\xe2#a\xe2n\x0eI&\xf5$I,\xb5,pr\x15\x93ckK/\xb5\xdd\xba\x97\xc6W\xc41\xad\xf8\xbdI\xe2^D\xba)\xae\x92\xdc`A\xdb\xe1QnG\xf299\xd7'\xfa\xf9\xeaM\xcd\xebX\xf6\x86_C\xef\xe9M\xedA\xfe\x80\xa2\xdb\xe91E2\xf80\xd1\xe9x\x1b\x81@I\\\x9d\xe4^\xbd\xd7R&S6\xef\xea\xbd\xea\x9aaQ\xe3VA\xd2d\x95\xc4\xcd\x9c\xdcgBb\xec\xdb>I1\xbb\x18z\xa3\xde\xd6}N=\x8cq\xcaut\xe8\xdcWeA\xfd\n\xa20$K\xedt\xe0v\x8e\xda\x8b\xe9\x83/\x1d\x0e#\xe1\xb0[B8hzM\x96E/\xf5~\xceK\xae\xfc\xca\x0b\xe9\x81\xef-\x0c\xc5F\x19R\xc5\xdf\x89\xe0e\xf2\xd9\xad\x95y\x11\n\n$\x18\x1c\xcd\xe0\xda\x93\x93\x93P\xeew\x12\xce\xbb\xf4\x0b\x99|\xe2\xa4\x95y\x0b\x0b\nL\xedR\x1ec\xc8.\xf9r7\xd1\xa3\xff\x9b{\x8e\xd4\xf4\x1c\xfd\xd7\x14\x9d\xfe\xdb\xaf\x04@\x90\xea;\x0e\x0f\"'\x86\xef-\x89/\x11P~\x16:\x18\xaa\x95\xd1.\xe6\xe2\x99\x16\xd6\xbf\xb5rnUzXr!J\x18\xee\x1bX\xac\x87\xad\xad\xdb?D\xef[\xbf\x13\x87=\x99\x9b\x89\x08\xe0\xf0\xe6\x83x\xff\xab`\x1dQ\xf2ya\x9c\xabw\xfe\xfd\xd3O#\x11\xe7RM%\x97\x1f\xfc\xfc\xe1^\xfd*\x81,c\xa9\xfcYh\x99n\x109\x89\xb5H:\x1e\x12\xae\xfe\xc9\x94\x1ev\x1e\xb8\xa0\xa0\xec\x02\x88\xd8&wy\xdd\xd8}`7f\xadk\x08|\xfd\x99'\x1b\xcc$\xa1\x9dw\xb0w\xb2w\x90\x05\x05\xe9u\x02;\xc1B\x81\xa9\x81\xe0\xa4\xb0\xdd\xcd\x0b\x81\xa4\x1b\xed\xc4\xd7\x13\x1e$\xc3\x9aa\x9436\xfa\x98\x9fU}n\xc9\x0b9\xec\xe0\x92_\xc5}M;u\xa7\x86\x8f\xe2\xfe\x82\x84S<\x14\x0f\xf7\x1a\xc6\xc7'\xc1w\xf9& \xb2\xe3\xdc\xa32\x04\xc9\x1b\x8d\x9e\xb1B\xe0\x96\xd7\xd1\x1c\xa6\x0b\x1a\x0b\xd3t\xd3\xd7\x93!\xf3\xa4\x138(\xacp\xe4\x0f\x8f \xf2+\x15\xcf\x0b\xe3ld\x14\x9bY\x85o}\xba\x1e\x1d\x1d\xc5\xf3U\x9e\xedG\xf11\xd3\xcc\x99K:\x1a\xfc\x8a\x96W\xa9\x80v,c\xc2\xefg2e\"\xa8\xeaY\xe1\xf0X\xb8\xa8P?u7\xe6=\xce\xe9zNS\xc9\xd6\xe2\xbf<\x0b\xb1\xc4=fedP\xb1$\x10\xcaY\x94D\xe9\xb1\xf1&\xfd\xdaSb\x0d\xfa\xca-!\xce\x16\xb6B\xde\x0bS \x82/\xd9L\x81X\xd7\xb4tM\x91#_\xe2\xaa.#\xe1\xe6\xe8W\xb5x1\xda\x0b4\x16\x005\x0cczK\xcfl1\xd4\x12\xfc\xbfv\xed\xdf\xf2\xdaMG\xfc\x93\x0d\x0c[\xa9\x0bf\x18+8t\xee\xf5\xa6\xe2\xd9\x98l.\xcf\x05-\xfeJ\xc7\x82\n\\[~\xd56\x1fb\x97lY\xd4\xbe]\xed\xea\xa5\xec\xf3a%\x13\xacd\x82\x95L\xb0\x92 V2\xa5\xd0\x7flES$,\xd3\x80(\xbe\xb4\xa9\xa0X\xfc^\xf9\xa5NAm<5\xa3U\xbb\x90\xf3.&M\x8cl\x93\xe9\xe0\xda\xf4\x82\xaa\xbfA\xb1\xc3\xe3\xc3c#^\x8c\xba\xbd\x0f\xc3\xd1\x02m5\xdd`Y[-,\x1d\xcb\x82\xfe5\x05F\xcd\xd5\xf2c[\x81A7Vo\x05\xfaO\xae\xad\x15\x18\xb0C=\xac\xc0h4\x0b\xb0\x02S\x8d\x85\xd2,}\xbd\xd0\n\xf4\x0b\xaf\xc4\n\xf4\x9f5\x8f\x15\xe8W\x95\x96\x9a\xffun+0l*\xd9Z\xfc\x97o\x05F\xf7\xca[\x81~\x9du\xb2\x02\xe3]~\x98\x15\x98j\xa9\xba\x15\x98l`\xd8J]\x98\xc3\nL\xb5X\xc5\n\xf4\xab>\x9a\x15\x98}>X\x81`\x05\x82\x15\x08V X\x81)\xf4_l\xde\x85\xe8\xbcT\xb19\xad@\xbf\xf6\"\xad\xc0\xa0\xc9\x99V`X\xb0\xd0\nL\xc6\xfa\xc2\xf5@\xc6G:\xa0\xfd\xe4\xd6]\xd2\xa8l\xe9V\x13\xbb\xdc\x11\xe3\xfc\xef/\x0b4#u\x83e\x8d\xbd\xb0t 3r\xbe\x96\x7f\xe5\xb2a\xa6\xdcc\x9b\x9bA7Von\xfaO\xae\xad\xb9\x190B=\xcc\xcdh4\x0b07S\x8d\x85b3}\xbd\xd0\xdc\xf4\x0b\xaf\xc4\xdc\xf4\x9f5\x8f\xb9\xe9W\x95&\xa1\xffuns3l*\xd9Z\xfc\x97onF\xf7\xca\x9b\x9b~\x9du27\xe3]~\x98\xb9\x99j\xa9\xba\xb9\x99l`\xd8J]\x98\xc3\xdcL\xb5X\xc5\xdc\xf4\xab>\x9a\xb9\x99}>\x98\x9b`n\x82\xb9 \xe6&\x98\x9b)\xf4_lG\x86\xe8\xbcT\xb19\xcdM\xbf\xf6\"\xcd\xcd\xa0\xc9\x99\xe6fX\xb0\x82\xb9\x19\xae\x0b?s\xbf\x7fL\xec\xc2\xa3[Kl\xbd\xfc\xe7\xdd\xd9?^\xf9\xb4\xd5p[\xb0\xdb\xe1\xd5\xe0\xaf\xaf\x89\xed\x97US\x89\x9c\xd8\xbbW\xe4\xee\xef\xc4F\x98z1Q\xdeb\xac\xe4n\xe9\xe1VB\xf4\x03\xfd\x93$\xf7\x1fS\xad&\xb6\x81ye]\xfc\x98eE\xa4\xac\x95\xb4Q\xe1\xab\xd1\x00\xa4fL\x86\xf4\xd3P[\x1fd\xf5\x9d3[\x8e-\xc0lnr\xc1M\xb6\x9a\xe1\x1f\x96\xb6\x15\x1c|\xe1O\xea\xc0\xc5\x93\xbc\xe2A\xbb\xe9My\xb6\xfeGz\xa9\xd8\xf4\xcaf\xa2\x87\xe9\x96\xfeW\x89\x96\x88eQ\x87S\x9e\xae\x8b\xfe\xff\xff\xf7\xffC\xffc\xfa\xa3\xe5\xab\x94\xd8ie7\x01P\x83\xd2\x8aE\x14\xb0\x0e\x90\xbf\x8fF\x03\xd8\x15\xdb\x88\xe4\xf7\xa4q\x10\xbb\x10\xe5\xf4g\xcd\xdb)\xcf$f\x16\xbc\xeaer{\x07\xad\xdd\xbd\xe3\xd6\xee\xfeI+a\xe8e&\xe6W\xf2\xf1\x87\xe9\x1e\x1e\xe6==\xb1\xd9\x8b\xda\x0b.\xb5\xe3Kl\xff\x08\xe7\x1e\x05\xff\xed\xe66f\xd1\x9c\x178i\xa1\x14\x91|\x86#&\xa8\x10\xee\x88\xe2#Z?\xc1_a\xf3\x00\xe5nE\xbb?%K\x99L\x88\xf8b\xd2B\x16\xa5\xf1^My\x8d\x02\x86\x9cU.\xd1~\xa6R\xb0\x88\xb3pz3\xebC\x02\xde\xd4\xd6Ab\xd9\xa6\xa9\x8f\xc1\x0dW\xabx\\\xdao\x8ar\xb1\x9d$r\xae\xf2\xec\xc5l\xa9i\x8dN\x11\xa2\xe1\x9a\x86\xef\xfd\xfe\xd5$q\xe6\x84\x1ef\xc2\xe1\x88\xf9\xe4\xd3M\xb4\xeb\x88\xdaBg\xa6\xa7i\xff\xb7h\x17\x9f\x9d`;\xc6$\xeb\x95\xf4\x9bM\xdd\x1c?e\xd4&\x87\x18.\xa3 \x7f0\xfc\xf5gB\xd9\xa9\x01%\xf4D\xef\xed\xab\xc1\xdfe\x1dyZW\xe4\xaf\x10\xfa\xb9Em\x93\xdc?\xeb(^\xd8\xea\x84\xdc\xa0\xca\xc7-\xcf\xc3\x9d\xc4 \x02\xc9\xd5\xb7\xfb\xd3V\xdf\x1e\x86.cF\xfaW_\x123\xa7\x06\x91\x18\xd6\x8f\x9b\xb3\xf1\xe7\xd2:\xfc0\xda,kx5|\xf9*\xd1\xb8j*\xdex\x7f\xf8\x85\x8e\xbf\xc6]\xbf\x9d\x83\xa9\xbb\xb7\x1dFg\x90\xbc~7\xf9\x98X\xd5\xa2\x1b\x8a7\xfd\xc6\x1a\x0b\xb7\xda\xd2\xeb\xc8\x98\xces>N\xd5\xfd)\xf5\x16\x99\xf2\xd3|\xaf\xf1\xae\xf9\xeb\xa8\xd3\x93\x9a.\xdc\x0e\xf6J\x8d\xf67\xee\xc4\xf67Nz\xaaRUR\x9b\xfd\x1e\xef\xc8\x7f\xd3h\x1cn@i\xdc~\xfet\xfb)Nc\xd5lb\xf6\xfa\xef\xfe\xb8\x19N\xd9\xb4.E\xc2\xf8;Wp \xc5at\x10I\xef\xea\xafW?\x12s\xac\x1e\x17\xef\x805:\xfb9\x0e6\x95Ro@g\xf7\xb8\x15\xfc\xb7\xd3>\x9e\xf6\x06\x1c\x85\x08\xf0\xd5\xa7\x1fF\"f\xa2\xdbL\x00\xcd\xbe\xf8z\xfe#\xdcR\xaa\x88|G\xa1P\xec\xff\x85\x7f\xde'\xf6u\xd4\xcd\xc4\x1b\xbe\x19]\xf1\xebT\xbb3\xfc\xda\xc9\xa7\x85\xf2\xc9\x1c\xff\xf5\xd7?\x89m\x12T\xdb\x89-\x9a>\xe1?\xfa\xd7\x0b\x9d\xac\xa3P\x8e|\x16\xff\xbc\xf9#\xb1K\x83zZr\xaf\xde\xcb{\xf2*\xb5\xcbVB6\xa76U\xf3]\x9a x\xb7\x93\xde\xd4`Z\xcfB)\xf4\xfd\xcd\x87aJ\xc4\xa9\x8e$\x16\xc0\xfd\xed||y\xf7+'j\x91\xab\xa0\x0e:-\xfd\x7f\x1d\n\xc9\xbfs\x92\x8eg\xe4;\xfcc5:\xb3\xa2*Q\x87\xa5Fz\xfb\xf7'g\x80\xfe\x17\x8a~$\x90\xf0T\x0e\x0d_p])\x11.TtHL\xda\x85\xf8\xf3m22\x97\xf2g\x17\xa8\xcf\xe3p\x17\x8f\xbew\xf5\xa9g%&A6\x9cx\xc9\xc4\xd7ww\xef\x7fe\xdd\xb2\xbe\xd1\x9a4ag\xf0\x89\xeeU@\xff}\xe7\x1e\x1d;\xf7h\x7f\x9a\x13u\x0e\xcb{\x8aE\x93\x1c\x7f\xa8\xaf\xfa\xc6\xe8\xc3\xe7\xc4\xeb\xa9\x87\x9bx?\xc5_W\x1f\xae\xfd\xd3\xbfN\xc8\x94\xae\x06|\x9f~K\xb5O;\xe3(W\x9b\n&\xd8:U\xaeh\x9b\xe9P\xe5\x1f\xfa\xc4\x8b\xde\xd6\xa3\x94R\xfcJ\\\x13\xdb8\x8er\xe2Q\xa8\xa9\x07\x17e7t\xcc\xf8\xd5\xf3\x05\x96?\xdb\x91Q\x14\xe3\xd1\xa4A\xa6\xe9\xda\x1e\x90\xbc#\xcf\x0e{=\xf3\xa0\x97-\xed0\x9e{B\xda\xfeq\xbf\xb7\x9bS\xdc\xcb+}\xd2;\xda9\xcei\xdc?\x8a3\xa7\x86\xb9g\xe0N^\xfbX\x18\xc3\xbc]\x0bvN\xcc\xfd\xbdly\xbd\xcfN^\x85\xdd#|\x84\xb3\x15z\x98Sc\xca\xaa\xecLa\x15\xd1\xc8\xe1\xb5N\xaf\xd7;\xcc\x16\x1f\x12\x9cc\x06\xff\xcb\xe8\x1c\x1e\x91\xfd\x9c\xe2\x8c\xe5\xb6^xzY(\xee{\x1c\x8b^\xc2\x16\xd1\xcd&\xc4\xbd\xf9\x87\xe3\xfe\x11\xc5+\xf3b\xa4\x12d^\x8d\x9d\x8b\xaf(\xfa\xfa+kID\x15\xfao\xcf'\xbd\xab\xbcF\xa7\x98\x90U\x9f\x90\x1cp\xe8)\xd3\x15\x13R\\\x0d\xaf\xa5;\x94\xb0\xc1\x9c\xcfoo\xfb\xe9m`\x11\xb595 \xd2;\xb8$\xb7\xd9\xd1\xefgx10p\xf3(\x96\xec^(\xf9\x89\xf7R|\xbfM\x18N\xaa\x17 \xd1\xef\xbe\xfe\xe7\x9f\x9bt\x8c, \x9e3t\xed\xec\xb6\x0f\x9c{\x94\x88\x8c\x05r|\xfe\x93\x06c-l9\xd8\xb8}\xf6\xdd\xe3\x82\xf6'\xe1\x0d\xffwp\x92\xfa3\xa5\x99\xb7zD\xdc\x11\x12;;0Q\xb7\xb8N\x15{1`\x8a\xbc\xbd\x84\xd3\xf4L\xfat3\xae\xdfD\xa1\x1cAa\xca\x7f\x99\xf2yvH\xfa\x9c\x95\xe9uR\x86H\xc6.\x1a\xd2\xd1\xf8\xed\x10\x18a\x1a#L\xb3'5\xdd\xa6\xcfeG\xfe\xcb\x94\xaf8\x97\xa9:3\xe62)\x0e\" \xf4\xe6\xe2\xcdMb\xb7/\xcd#-\xdd|B*|q\xdd\x7f>\xe7\xbb\x0f\x8b\xf6\x86W\xfe\xf4\x92r,z\xda\xed\xb97\xba\x9aT\x7fZ\xfc$\xe6\xbdc\xe7\xfe\xb7\xca\x8fNR*D\xe7\xa6x\xf7nr\x91\xa0\x94\"HK\xf74a\x86\x9b\xd7}\xf3UBw\x1cG\xc9\x1b\xca\xa9\x92H1\xd0\xefJ:\xa1!\x7fWS\xdd6\xc2\xad\xf0[\xb4\x95dx%)i\xd4\xff\xe2\x9b\xa2\xe4g\x80\xf8\\\x19\xf4\xea \xc7\xb77\x85F\xa1\x8b\xc0\xbc\xfd\xf3\x8b'\x12.\x02\xd5\xa5\xc4\xe6\x80\xaf\xf9\xfd\xdb\xbf\xd22%\xeb\xcdJ\x9a5\xd3\x9dP\x9d\x9dP\xf5\x0e\x7f~\xf9\xe3G\xe2Ta\xfd\xb0\xc4\xe3'\x7f\xbe\xffi\xcd\x08\x1e\xc5M\x175U\x89m\xb8;\xd1\x1e\xdc\x9d\xdf\xfd?\xb1\xf8\xd1\xe7x\x94\xa0\x015\x9a-*\xc8\x88\x076J\\9$\x8c\x97P\xec'\xae\xe6\xb4\x901s\xb3\xfe\xc8(c,oo\xaa0\xa7\x8b\xb9h\xa7\xbd{\x90\xdd\xd2rZ\x91\xf4\xb4\xa2v;d\x83h\xa3\xf5\xd4\xde\xf3\xbah\xb0\xe7#\xbb\x0f\xb6\x89\xa66'\x02\xed\xa0]9\x8b\xce}r\xff\xfe\xfd\x83\xdfZ\xfa\xd6\x0e\xcaq\xce\xed\x1eL=\x1ej'T\x18\xf7\xaf\xcf\xfeN\xe8\x0b\xdd\x93\x84\xf8\xbb4\xaf\xe88\x07:g\xbcXS\xed\xbf\xe4\xb0\x03.\xdd\x0b\xf6\xdc,>w\xb7Pe\x87p%\x06\xc3'\xdf\xde}\xa4\xf3\xf5\xd77@W\xd9\xdf\xd4\xccD\n\xea\xdb\xf9\x0dK((=\x11-=\xbe\x84*\xb7?\xdc\xdd\xd1\x9cPWLr\x841\x8f\x9d\xdc\x13E\x82\xf1\xeb#\xca\xf3O\xe7\x89\xf1e\x10\xd1V\xf3\x91K\x9a \x9f*\x99\x1e\xf6\xea\x05\xd2tgg<\x8c\xac\xeb\xa0M.\xa8q;\x89\xae\xa7\x7f\xa7\xca\xa5\xd6\xc6\xe4\xec\xdb\x1a-\x03:\xd8q\xc9\xe8\xb7_\xc1\x94\x84M\xf6\xe9=1CT\xb9\x9bP 9\xf82\xe9\xa4O?\xda?`\xc7\x7f\xc6\x94\xb2)\x86\nq\x01\xf9f\xdf|% \xdc\xa4\xdaI\xbc\xf5\xdc\xfc<\x8a,\xec\xe2|\xac\x87\x88\x80\xe9\x8a.\xf1\x96$\x868\xcdw\xa2I\xecF\x82$\x81\xe1\x13z\xf8 X\xab\x15\x1c\xf1\xa4\x9dP)l\xfe[\xb0\xc7\xf4\xfe~xl\xf2aLZ\x1d\xe6\xb8\xb1\xaaq\x89O\xe7\xc5\xbd\x83\xd3X%\xf5\xa0bV \xf5\xf9\xed\xe7\x0b\xd7\x19'd\x8fj'\x81\x84\xff\xfe\xfa\x1a\xbf)\xb3t7:\x07\"\xae\xb5\xf3W\xf2&\xb5\xfc\xe2\xe8\x93u\xb4\xa5\xd1[\xd8\x9e\xea\xf2\x8811\x94\xd3\x8bmA\xb1E1'\xe6\xef\x05\xb7Tk.\xb1M\xe2\xca[\xcc\x11tD\x7f\x92\x1b\x87\x103\xee\x83\x14\xd8Q\xbb9[\xca~\x8b\xa15\x9f\xf9~K&\x01H\xd2ma\xf3\xbb\xc7E\x0csf\xae\xa6g\x05\xfd\xcf_\xf9\xa6i\xd8\xf8\xb4n$2\xf7\xa6\x1ac{{Q\xc2\xcf\x97\xfb/ \xa4\xa2{\x90\xc0T\xc3\x0f\x7f}\xeb\xff\x8a\xb2 \xb3\x93\x91VNY\xa7\xb6\xd2n\xbf\x85\xd0\xca\xc2\x13\xe6\x89\xcc[\xa7\xb8\xbeU\xfc\xee\xf9\xdd\x89\xc9\xe1\xa9/D\x94\xbd#\xe87v\x9e\x00d\xaa\x95\xf80\xbf\x9b\xdf\xed\xb7\xe3\xc41|\xbe\x9b ?\xb7v'<\xe6\"<\xdd!6\xec\xe4\xb8\xd1\xffD\xc9<\xca\x12\xe3=:\xd0\xe3\xf5\xfbUN\x04\x84NebY\xfdQbY\x85n'\x01?\xde\x8f\xde\x8d{\xbf\x92\xae\xf3i-G\x9e^\xfa\xf3\xf2\xf5\xbb\x84\x1eR\xed$\x84\x8b\xf3\xd1\xbb\x1c\xff\xca\xb2\xc1\xbe\xe2\x82|\xe6\x0eSt\x13+\x19\x83\x93A\xd1A\xd2\xc3\xfbl'\xe5\xe0\xcc\xc6\x04J\xc8\xb6x\x86H*y-)\xca2\n/\xeeiM\xe8\xdbi\x04\x0c}\x91\xc6\xdbOo\xad\xe4A\x88\x8a\\\xc9\xdc\x82\xdb+n\xe6\xb8\xba\xa2\xfc\xb5P\xee\x1e\x87\xc16\x9d\xfc\x96n\x059X\x0c\xcb\xc4\xd7:{\xa1\x05C\xaf\x06\xf4\xd5\xa7d:\x80l+\xd6\xc7\xe7\xdb\xaa\xdei\x03\xa1\xe7\x16\xb5o\xd1\xd0%\xfd\x17\xcd\xa1\x10\x0e\x7f\xb6\xbd-\xa9\xc9\xdb\x03\xc6\x06\x16\xc1\x0e\xe5m\x83\x8d\xb6\x0d\xce\xff/=!/\"\xbf\xe1\xb3\xbd\x9d\x9d\xd6\xfe\xceN\xebhg\xe7\xff\xd1\xf3\x14\xbf\xd4D.\xb1^4\xd5\xc3\xf8\x90\x10\xd1\x1e\xc4\xeej\xea#\x7f\xfat\xed-j0\xbb\x89\xc6\xc4\xe5\x94\xd9/\x9a\x9dv\xa7\x89\xc6\x94\xdc\x9d\xb3\xfb\x17M\x9d\xd7\xbe\xa3?\x9aH^q\xee\x9b\xe8~d\xd9\\\xcf\xc9\xb3\xed\xed\xbb\xbb\xbb\xf6\xdd^\x9b\xb9\x83\xed\xdd\x9d\x9d\x9dm>\x1e4\xd1D\x17=}.\xb9\x04\x99/\x9a\xefO\x0e\x8f\xdb\xbb\xad\xe3\xfd\x93\xf6\xfe\xbb\xc3\xc3\xa3\xf6^\xeb`\xff\xc48\xdek\x9flu\xf6\x0e\xdb\x07\xad\xc3\xc3\xf6\xd1\xd6^\xe7\xa8\xbd\xbfu\xd0i\x1fm\xed\xef\x1d\xb4\x0f/\xf6\x8f\x8e\xda\x9d\xad]\xa9{v\xdb\x07\xf2K\xa7\xb3\xd7>Q\x9f\xfb\xc6Vg\xef\xb8}\xd0\x92\x9f{\xfe\xf7\xbd\xc3\xdd\xf6ak\xa7u\xb0\xd3\xb9\xd8\xed\x9c\xb4w[G{;\xedNk\xbf\xb3'\xbf\xef\xcb\xe7\x1e\xb5\x0f[\x87\x87\x87\xed\x03ko\xa7\xd3>i\xc9\xcf}c\x7f\xaf}\xd8R\x1fG\x87\xf2 \xfb\xf2cg\xbf\xbd\xbb\xd5\xd9m\xef_\x9c\x1cwZ'\xbb\xc7\xed\xbdVg\xa7\xd3i\x1f\xb7\x8eO\xf6Z\xb1Q\xfdD\xef\x0fv\xf7\xdb\x07\xad\x83\xdd]c\xeb\xf8\xb8}\xd2:>n\x1fm\xed\xee\xed\xe9/{\xbb\xb2\xd6\x8e\xbe\xb7\xa5.\xa9o\xbb{\xaa\xc7\xea\xfe\x9e\x11\xdel\xed\xee\xed\xe9/~\xc5\x8bC9\xe6\xd6\xee\xf1I{\xbf\xa5\xbf\xef\xef\xedIB\x06\x8f\xfd\xd9<}\xbe-)~\xfa\\N\xc3\xe9sj;\x9e@b\xe2H\xde\"\xf7\xa2\x89\xd4\xa9p/\x9aM\xe4X\xd8 Cf\x99\xc4}\xd1\xbcQ\xcc\xd0n\xb7\xe3\xdc\xa4%\n\xd2b$\xe4\x17\xd9bs\xfb\xf4\xf9\xb6I\xc7i\x0e\xd7\xe79 }\x88\x03\xd2\x07\xf1\xf4\xb0\xbb\xe5\xebg\xe2\"\xcf6I\x9f\xda\xc4l\x9e>\xf7\xacXU?\xdbH\xa7\x075}\x0e\xb7\xf1\x98\x0eTbc\xf3\xf4\xb9E\x91\x92+\xca\xda\x97\xaf\xa3\xc0\x83\xed?=\xe2N\xe2\x9d\xd6)=H\xe7\xf1\xc8Z\xb8G\xac\x80\x02x\x10\xb4,\xdf>\xd9P\xbc\xaa\x0e\xff#?/d\xcb$\x8e\x18v\xe4[\xe4`\x1b *d\xbd\xcc\xf3t$\x1c\xe9\xf0w\xf3T\xdd\x7f\xbe-\xab\xa4_?\x9d\x980\xb4>\xbc\x7f{Q\xf8\xc6\xed\xee\xa3\xdd}\xfd\xb6\x95~\xd7\x9a\x08\xbb\x14oi\xa0\xf4\xa2)\\\x8f\xc8\x97OgA e\x1c\xf1\x17\xcd\xceQ{\x0f\x1d\xb7\xf7Pg\x17u\xf6\xda\x87\xe8\xb0}\xa4~\x1f\xb4\xf7\xd0I\xfbH]?l\xef\xa3\xceq\xfbH]P\x0c\xa5[ xj[\x914\x7f\xfatZW\xded\xe9\x03\x12)\xb3\xb7/%&\xa2&\xb1\x85\xfc\xea\x06O\x0e\x08\xbcm\xd1BB\xaaG\\\xd9}\xc6kH\xc6hp!\x11]\xcf\xb6\xa9=\xd0DT\xb7\xaaR\xec\xe2\xd5\xfb\xf7\x17\xcc6\x88-\\,\x88y\xcd\x98\xf5\x8e\xda\xb7u$\xe0\xd4\xb1\"\x97\x08\xcf\xb59\x1a\xd1\x81~0\xb2\xd4u?\xd5\x0b\xc9\x9a\xd2lh\xc4\xab#\x871\x8b\xb7+S<\xd5\x83+S\xf6\xe1\x95\xcbF\xf2)u$\xfb\xd4\x01\x9fc\x0b\xdb\x06qC\xfa\x8b!QTE\xd4\x94\"A\xfe4b\xb5\x1b\xea\x9e\x18b\x81\xa8:\xda\xeb\x96\x98\xe8\x8e\x8a\xa1*9\xa0\xe3`\xaad\xb9\xca\x13#\xfb\xc6\xbfQ1|E-A\xdc\x1a\xceDj\x84\x08[\x16\xbb\xe3h\xc2<$\x18\xfa!\x15u \x86\x0d\xcd\xdd\x9a\xba.\xf9\xe1\x11\xae&\x00\xbbxD\x04q+\x0b\x9a\x0f\xdeH=\xbe\x86d\xbd$\x8eK\x0c\xc9\xa0\xcf\x90c\x11\xcc \xf28Q<\x89%\x9dm\xe5\xbbA\xd4F\xf7\xdb\x92\xaa#l\xe3Au\xe5&\xc9\xf7y\xe2\x90\x1aR0\x18ZB\x10\xa8'\xf8R@\xbd\xd0\x8dO\xfe\xdd\x7f\xff\xf0\x98\xf8=\x90\x1e\xfa\x17\xc2\x1ca\xe4\x1f\xc2mQA\\l\xa1\xbb!\xb1cBE\x96\xe8\x052G7\xf9\xd2u\x99\xcb\x11\xed'\x8a\xf51\xb5\x88)_\x8a\x9e\xdf\x0f\x03s\"\x889\x9fP\xa9\xe9\x8cU\x96\x01\xb2R\x0di\xb1\xa2\xf7\xff\x02[\xc6\xcb{*$\x15/\x18\xb5\xb9T\xa17C\xec\x92:2X\xc1h\xe7!\xdc\x1f\x8c\xda\xb2\xa9Z\xd3+9\xc8\xaad\x925\xaf\xa5~\xaf#y\xa2\xc1U%\xcb\x8d\xc3\xc4\xb5K\x8d:\xea\xddplH\xfb\xa0\xa4\x82\x1c|\xba\xbe\xf0\xb1\xe0\x10\xdb\xa6E\\\x8d\xb8\xe3\xaa\x99;L GUT\xa8\xbb!\xf5*\x97\xad\xd8lDmmBa\xdbD\x18\xa9\xbdF\x137*\xeb\xd0\xcfL`K\x1bk?\xb9\xba\xac!\x1d\xc3\xb1\x85\xe4\x8b\xe4\x9b&\x9cK\xb8C\xb4\xe8\xbb\xba\x9c\x8btu|yS\xefl\x8f\x89!\xf2\x1cCZ\xaf\x03m\xd2>D\xdd*\xd6>\x9f\xa8?\xeaI\xf5\xe4\xbd\xec(\xa3\x978xaU\xb4\x8e\n\x1e\x7f\x81\xe7`\xc4w\xcc\xb8\xc5=\x8b\\z\xfaB\x1dy23\xc6\x90\x9a\x96\x7f\x07\x99\xe1-\xe5\xac\xc1.Ac\xac\x16\xaa3dR.\\\xda\xf3\x04iP\x15L\xa5c\xc2Q\x9fUF\xd7\xef\x99\xe9Y\xe43\xbb\x0c\x1bT\x9e\xd9\x1aR|\xcaHC\xba\x1b\xeaWH\xea\x01\x93\xd2A\x87\x8b\"j\x9bU\xe9\xfb\x89\xdca\xd7\xe4/y\x1d-\xc0hp\x91,\xb0\x11\xf1\x8d\xe0 \xd0\xe7\xeaR\xa8\xef\xb2\x11\xb2\xd9\x1d\xf2lA-\x84\xa3\xf4\xa0\x86\xa0#e(\xca\xe2}Ox.A\x9f\x87D\xb9,)q\x11\xa1bH\xdc EF=\x04\x9b\xa6K8G\xcc\x95\x0d\x11!\x1f&\xdf\x1c\xde\xe83\x17\xdd\x0d\xa9\xa1\xc0\xc4\x04\xdda[\xc8i\xecS\xdb\xd4\xb6)\xe7\xcc\xa0*\xdb\xc3\xefY\xd59\xfd\xe2\xeb\x8e\xda*\xcc (\xcb\x8d!\x91/\x8d\x19\x00\x0d\xf5v\x0c\xf1\x98 \x9b 4\x91d7\x0c\xcf\xad\xfeZ$IXc+5\x7f\xa0\xe1\xebR\x9e\xc2\x8d\xb9\x8dX\xc3`\x9e-\xa4\xc2!f]\x85\xbb\xe6X\x84\x95\x0c f\\\x98\x1b\xd8\xfe\xf7\xbf\xeew\x8f~\x17R\x94K+\xc3t\xf1\x9d\xfd 2\x06Z\xbb\xb6\x94\xe4\x08\xeb\xf1\x06\x04u\x89\xc1\xa4\x10WV\x1a\x8eR\x8a\x02\x90\xf2 r\xbec\xf6\x80\xb8\x1bNTK\x11a\x19\x04\xad\xablMQU\xbf\xe5\x82i\xf6\xd3\xe9c\xf5\xa5\x9a\xcfx\x0b\xa1\xdb\x07r\xaf@v\xad\xc5\x9aM\xee\xb5\xcd=gX\xd5s\xea\xbb\x1c@\x0d,\x11F\xf5\x1c\xa4V7V_\xd1{3\xb1\xc5\x90\x08jh\xa2\x9dO\xf4\xdfZ\xf3\x16\x0f\xc6\x1c\xd0\xae7A~\x0e\xa7\x7f\xa1\xba\x16M\xd1\x91\x03!}B6\xe2\xd9\xb3\x1e'h*\xc7!jsApe\xd2\xab\xbd\x05\xae]6\xa6\xbc\xa69\x14\xa9\x11&\x96\xb3\x04{Q\x8c\xa8-\xc2\xed\x14t\x04Y\x17V[\xc4T\x96\x0b\xef\xa9-6E\x82\xaa\x05\xbb\n\x1f\xfa\xf1\xf5\x80\x96\xd1\x8a\xf1\xca\xf4S\xc9\x17Wv\x9f\xd5\x90|\xe1\xd82{\x1f\x04\x91\x89\x11\x16\xc6PRPgFQ\x93\xab\xf43\xbd\x91Zub\xbe\xbcWY\xf6\xd6U\x90\x01T\xdb\x84\x84)#\x0d M\xfc\xfb(L\x86\xf2\xe3\xe9\x95i\xaas\xdb\xcc:\x121\x18\x1a\x12\xf8\x96$7\xe6\x90\\\x18g\xda)\x8c\x1af\xa4U\xa5j0o\xf4\xa7\xde/\xa4\x8e\xe4\xcd\x8c1\xca,\xd3\xba\xc8\x9a\x84\xec)\xcb\xe8\xdd8\xaaRR\xad\x99\xdc\xf8\xfc\xc8Xnd\x9f\xb9s\xee\xda\xa36\xae \x93'7E\xab\xebW>\xca\x19\x9d\xd3@\xfa\xc2\x89\x1b\xdf\x05\xe8\xc6s\x88\xdb\xb7e\x16\xc2\xd9|\x83\x14B@\xef\x04\x95\x03\xa7\xc7L\x15\xc1l\xd2\x08\x99~~\xd2G\xc6\xfe\xc6\xf1\xb9\x17\xf3s,\x99\xd5\x95i\x1aq\xf9f\xd0Yo\x8f\x18\x1ce\x10c\xb3\xa9t\xadJ\xd6/\xb6\xc3\x98\xf5mH\x05\xb1hM\x97\x8a\xfb<\x8b\xe4\x00\xa5T\xb8\x0bF\xeb\x87BT\x94I0\xe4\xd9sm\xf5\xae\x84\xec\x99'\x86\xcc\xa5b\xf2\x9e\x08,K\xd6\x90\x92\xf9\x03\xcd\xdf\xedsD\xc4\x90i\x98\xd1':\xa4\xd7\x98R_\xb3\xb2\x83]A%\xd8\xf63A+O\x83^\x00pCl\xf3\x0dc\xb7gz\x11M\x0dg!w\x9c\xb3&\xa11 B ie\xc6\xf8ub\x1e\xd8\x00\x0e\xfa\xcb\x078\xb1M4d\xec\xb6\xf2,\xa89V\xdb+_\xb8\xa4\xa6\xd293\xc6Y\xd4\x0f_\x01\xa98\x1b\xf1\xedk92d\x13D\xa5\x8a\xc7\xe496G\xd4\xde6t\xf3\x95'\xe13\xbb%v\x1f\x1b\x82\xb9\x93\xba\xdb\x8eE\xa4\xcfl5,b\x84\xf1\x93}}\xe7X\xe3\x01\xf6\xe5\xe7\xfbW\x84\xf0s\xcck\xbfT1\xd2\xa1X%\x9d\x07\xbb4\x07+\xe4\xb0\xde\xe9\x84\xba\xc8`\xae\xab\xfc\xe4\xca?2_\x98\\QS\x1f\xf2Rc\x9a\x06\xd90W\x97IP\xa7\x00\x9f\xa4\xad:\x12\xae2\xf1^\x11\xa2\xc4@\x1d_\xfdpl\xb1\x8d\xc0\xe2\x8c\xa9\xfd\x93\xf8\xdb\xd1\xfa?\xab\xdbM\xafu3\xb5%kb|9\xd8\xe9?\xeaN\x92\xd6\x92\xa6>y\xe7\xa4\xa7[sz\xba)z\xced\xda\x90\xa2\xd59\xf4\xcc\xb2\xfc\x05\xcdu\xa4glt\xa1\x88T^\xa9h\x95\xae\x94\x98:\xac\xe9\x1bK\xd4\x1eD\xda\xa62=\xeb\xbb:\xdc\x1f\xd9T:\x06\x94\x93\xc4\\\x14-\xeb\xeb\x00 \xc7\x16\xd2S\x93,{P\x95\xde\xaf \xd8\xf6-\xd8\x072\xd8H\xb6G\x1az\"B\xcf \x15\x9cX}\xbd\x9b\xec(r\xa9\xcb[\x9eM\x85na\x84\x1d\x1e\xe8\xba\xa8n\xe5\x19\xd2\x8e\xcb\xbaG(\xc2\x01&x\xdf\xb0\xa8J6LD\x1d\x92i\xc8\xeaUHxg\xe7\xa30\x10X\xdeSBF\xbf\x0d\x19\xc2V\xa6\xeb9\xb6o7\xc5(P\x0e\xc1\xd0(\x90t\xbc\xdf\xeea\xfb\xd6\xb7\xac*\xd3.H\xeavj\xb9\xd9[lt \n\xfayd\xfaF\x1c8T\xa6\x9fn\xfcc\xbf\x86\xc4\x0b\x86\x96\xa0\\\x8cfq\x90P\x99n\xb1\x99\xf9F\xc5\x90y\xe2c\xbf\xcfI\x1d\xbdK\xd3\x86\xbad\x8e\xac;Y\x97\xca\x9e\x17l4\x92\x08kR\xd3\x83\xa4\x13\xe3Kj\xea\xe0\x8e\xce~\x99\x8f\x07\xa3T,\xc5\xfc\xfe\x81\x0c5\xa4c\xfe@s\xde\xec\xe0\xb4 l\x18\xae\x17D\xf4 6\x86Q\x92\xe1\x03\xa8\xbc \x04\xaeH\xdb(\x1fn^\xba27L\x95\xad1e\xe3\xa3L\xd0v\x1c]V\xe2t\xfe\xec\xcc\xf0I\xdf\xfc-]\xeb\x9b\x7f5m\xa8!e\x83]m\xa3\x93b\x1eH\xdb\xe0\x0c \xca\xecM\xb1\x81\xf4\xde\x00\xc1\xb6|f\x8c\x02\xf3ZA\xe1+ \xf5\"\xe5\xbc\x9e\xc7=\xe4\x8c2\n6\x19\x867R\xab\x99L\x05\x01\xfc\xdb\xda\x915\xbf\x8a\n\x1f\xf9\xd1\x13\\`\x95NQ_eU0\xda\x90\xd0\x81\xb2R\xef}H\xd8\xb9#\xcb\xe1#o,\xcc\x87\xb5t\xfc\xa7\x87\x18\x92\x92\xcb\xdf\x88\x8c\x89-\xd2\xf4\xacL\xc73\xcbz9\xa6&\xa9\xa7\xbf?6\xbaDx\x99\xf8\x17+\x93\xab\xc6\xb4\xca\x10* R\x94\x06\x12^\x19b>\xc7\xcas\xcbbw5\x0d,\x85c\x0b\x03\x9e}B\x96\x14\x90\x0f\x9fUG\xa1\x17\x0d.\x93L3\xd0\x11\xe5\xfe\x03\xb4\xc6k6\xde\x14\xb0\x98\xcc\xa2 @\xe3\x80\x8d\xe7\xc5\x8a\xd7.s\x18\xc7\xb5\xdc,.\x1c[\x92|\xe1\xd5P\x02\xea\xd0\x0d\x17Xx\xd5\xb9/xJ\x8d \x18\xd9*\xc1\x85L.aP\xf4\xea\xb22\x01/\x89Z\xc8ZG\x0e\x0c\x86\x96`@3\xb8\x18\xf7\xeb\x06\x94\x9d\x97z\xf5%^\x04\x905\xa5|\xf2!j\xf7\x99;R\xcf\xf5\xd9\xd0 y\xb0\x15\x94:3\xcd\xea\xaa\xf83\xb6\xac\xc9'\xc2=\xab\x8ed\x8d\x8d.\xe9}\x94\xd75O\x86\xaf\xf9x\x9eM\x9e\xbe2QK\x10\xa3\xc6\x15\x92l\xac~\xc5\"\xffs\xbf\xc1\xb2\xdd\x9a\x92+A-3\xe7\x95ev\xe2\xad\x95\xc5\xdc\xb9\xde\xd93\xdb\xf6\xb0U\xeb\x9d\xd8\xd3C\xccl\xbf\x8eU\x81\x87\xef\xbf~e\xf7-\xf5\xad\x86D\x0c\xc7V\xb8\x91=\x0dK\xcdG\xc1\x0b\xc6G\x8c\xc3>\xf6\x0f\xdb\xc7\xbe\xee\xb4\x0bAa\xb4\x18:\xa4\x96\xd6,\xda\xa8k\xf9\x1aFbF\xee\xf5\xb8\x83\x0d\x82\xb0m6n\xc9\xa42Q\x95\xdb\x91\xda\x83M!n6\xc5\x8c\xfb\x14\x98\xf3\x08\xa4\x1b:\xb0\xa9=\xb8\xb2\xfb\xac\x8e\xe4\x8b\x0f/\x06\xbd\xd5E\xa5\xc0\x83|\x9e(\xa2\xfa\x00\n\xd6\x9b\x80\xc9d\x9e\x14\x0d\x83|Q\x9b\x07\x8e\xaf\xaat\x0c\xc3\xb3\xf5\xde\xbc6o\x98)\x83:\xba\x1e\x03\xe4a\x18zn\xc7\xe2'b\xd6\x9a\xb2\x89\xf1\xc5bz)\x82\xfay\xfes\x121\x9c\xbe/vO\xaf@\xdf\x10v\xcd\x1bo\x82o\xbd\xa0\xc0\x14\x0en<\x9c\x83o\x04\xbe\x8dz\xb0\xc19@I\x8d\xa5\x85p\x9f\xb9iQ\xd1\x98\x97\xd0\xd9go\x04\x81#\x03?\xbc2\x8d\xb4\xb1\xbdi\x1dL\xab[\xf8o(\x17\xcc\xa5\x06\xb6j\n\x1c\x92\x03L`\x87ax+M\xde\xa1:\xd6\xaa21}\xb9Po#@#\xfe\x04\x06\xd3\xc3~\x88Q\x1aP\xae\x9e\x99\xd4\x99\x04j\xff$\x9b>\xabL\xa8Z\xab\x9a\xd9\x1a\xc6_\xcc(\x8c\xa1\x0e\xd1>$\xc4Xg\x9dRA\x95,0\xbf\xac\xde\x104o\x98!y\x83}\x81\xa7R\xb72U\xa3\xa7\xd4\x90\x96\xd1\xe0\xcaS0\x06z\xe6\x82:9\x96C\x0d)\x9b3\xca\x90\xc4\x91i4\x9b\xc6\xf3\xc1\xc9\xf0\x1d\xd9\x10\xb3\xb4p\xbc9t\xcf\x98\xa4\xf3\xcb\x873\xc7\xb1(1\xaf-\\G6\x8e\x8d.\xe6\xd1w\\2\xa6\xcc\xe3\xd6\x04a]\x00y\xce\xc0\xc5&A\x8e,\xd9\x9b(w\xbe\x8dGsD\x97t\xb4\xaa\xa6\xf4\x8c\x8d.\x81D\x83\x18]\x9c\x8c\x95I\xa7w\xf6\xfaJ\xdc\xba\x06\x89\x93\x03L\x100\xd8\xac\xc7\xdf\xb5l\x1c\x94QG\xb9HdZ\x9d\x13\xbf\xe8\xb90/\x98\xcd\x89\xcd=~#\x9b\xa9!Y\xf3\x07\x9a\xe4\xcf\xe0\x96\xa6\xa56\x00\xee\xa8e!N\xdc1i`)\x16\x84\xeb\xa9m:o\x89k\x13+\xdc\x8b\xda&\xf7\"\x98\x10\x9d\xd4I92\x86\x98\xdaj\x9fN\xd5\n\xb3\xad \xea\x91\x06\x17\xcc%&\xc2BO*\xe6\xc2w\x02\xa4*6\xa6\xf4\xf9\xd3\xf5\x85\xda\xf3\x93{\x8e\xc3\\\xd9\x99;*\x86HJ{#\xd8W\xc0?>\xc8u\x0c}\xf2[p\x8a>\xb2\xd9\x9d\x1e\xd8\xd5\xf9E|cP\xe4\x12\xc7\xc2\x06\x19\x11[4\xfek(\x84\xc3\x9fmo\x0f\xa8\x18z\xbd\xb6\xc1F\xdb\x86\x8a\x88o\xd3\x9e\xb15`\xdb=\x8b\xf5\xb6w\x8d\xe3\xe3\x1d\xbc\xbbKN\xfa'\x86qt\xd0?\xdc\xed\x1d\xec\x1e\x19\xf8d\x1f\xe3\xa3\x03\x83t:;\x87;;\x9dm\xc7e\x82\xc9\xaa\xdb\x06s\xc9\xb6\xde}c{\xdc\xd9\x96\x9d\x9d\xb4\xd5\xed\x7f\xbd;\xd8\xff-\x97}\xb7\xbd\xa9\x8c,\xf0`\xfb\x86\xb8\xe3R\x9b\x91j\xe6\x13x\xd0,\xc1\xbe\xee\xeb\x7f\xfe\xb9\xf1\xd9\xb7\x13\xb2/\x15\xb2^\xce\x13}n\x1b~q\xdd\x7f>7O\xfd\x12!\xd3\x8e\x07\xf1\xb2W\xfc\xec%\x1aZ\x1f\xde\xbf\xbdh\x06L\xf3\xa2\xd9iw\x9ahL\xc9\xdd9\xbb\x7f\xd1\xdcA;hw\x1f\xed\xee7\x91\xfc\xd5D\xf7#\xcb\xe6/\x9arf\x9emo\xdf\xdd\xdd\xb5\xef\xf6\xda\xcc\x1dl\xef\xee\xec\xecl\xf3\xf1\xa0\x89&\xaa v)\xde\x1aR\xd3$\xf6\x8b\xa6p=\xd2<}\xee0k2`6R\x9b\xbe\xf2\x17\xcd\xceQ{\x0f\x1d\xb7\xf7Pg\x17u\xf6\xda\x87\xe8\xb0}\xa4~\x1f\xb4\xf7\xd0I\xfbH]?l\xef\xa3\xceq\xfbH]h\x9e>\xdf\xf6[9}.\x1f\x17M\x92g\xc5\x067\xb8\x1a;\x17_Q\xff\xed\xf9\xa4w\xd5,\x94=\xaf\x89x\x87\x05\xe1\xe2\xdcb\xc6\xed\xec\xf9\x9b=iOL\xe6$\x07\x98\xc8\xb4P\xe7t \xd4\x937*\x0b\xed\xd7D\xb7x>y\xa3\xe4F=I\x97\x18b(\xa8\x15\xc5\x1e\xee>}M\xc4\x07f\x92\x9a:\xa2c\xa3\xcbE`63\xc9|>\xc1\xd7D\xdcLl\xa3\x9e\x87%G\x83\x0b\xa9\xa6(\xc5\xf5\xc5y\x88\xa5\xdf\xffh\xc9 \xa9\xe9\xcb\x9a\x1dgHB_\xd4\x85\xd6\xe7\x16's\xbd\xaf\xf1\xc6\xeb-\xf9\xf2F\x9au\xaeJ:J\x10\x89\x1f& o\xa8^g\xbddR:\x8c\x97\xa7\xa5*|*?\x1fJ\xcd`t\x88\xfb_8\"\xf7\xc4\xf0t\xba-\x12.\xb696D\xb0\xb6\xdc?`S\xde\x1c`\x8e<\x8e\x07\xd5m\xaa\xd7D|\xbe\xe7/\xc7\xa4\x96\x9b\x93\xc7F\xa7\x8f\x8a\x91\xba\xe5^o\x89//V&\xd7\xb9\xcb\xb0i`.>\xdf/\x99\\\x8f\xc4\x83\xb1\x01\xa2^\xf0=\xcez\x95I\xa6\xe6`\xc9\xc4z4\xde\n\xb9\n#q/\xd9j\xfa\xaa\xe6\xc82T\xdfL:\x8e\xb7}\xfb\xe7\x17O\xa0\xbey\xdd7_5O\x9fc$\xb0; \xe2E\xb3\xdb\xb3\xb0}\xdbD.\xb1^4m\xc6\x1cb\x13\x17\xd9\xcc%}\xe2\xba\xc4m\xa2\xa1K\xfa\xda\xd6JY\xc1\x9f\x88\xc9\x0ck\xb2\xed\xca\xbf\xcd\xd3Kfx\xd2bV\xb4@\xd7\xecN\xed\xcd\xd9\x9b\xa0O\xe4\x92\x19\xcf\xb7\xf1\xe9\xf3m\x93\x8e\x93\x9f\xc9n\xde~\xbep\x9d1\x1ap\xf3\xf3\xe8\x8ff\xfa.u\xdf\xbe\xfc6A\x837t\xfc\xc6i&,\xc9&\xe2b\"'XqR\x9f\xb9\xa3g\xea\x9b\x94r\xff\xb5\xeb\xdc\xb7\xd0\xd6\xbes\xff\x1br\x99\x90W:\xc7;&\x19\xfc\xf6\xbb*\xa3N\x9d|\x16VD;\xed]\x8e\x08\xe6$e\x81\x9e\xec\x1e\xb6w\xf7\x0eON\xd0\xc1\xd1^\xfbh\xff\xe4d?m\xb1\xca\x92\xce\xbd6>\xe5_\x7f\xda;\x07M_#\xa9\xef\xa7\xcf\x07(|\x9c\xdfe\xd5\xd1\x93\x9d\xfd\xf6\xc9\xeeng\xbf\xb5u|t\xd2\xee\xec\x1f\xef\xfe&\x0dV,\x86\xc8|\xd1l\xa0\xf0\x7f#\xb4ux\xb4\xd7><:<\xdcouvw;\xed\xc3\x83\x9d]\xb4\xb5\xbb\xd7i\xef\xee\x1f\x1c\xb4\xfco\xc7;{\xe8\xe0\xa0}\xd89@\x07\x87\xed\xce\xf1\xcea+(sp\xd8>>\xda\xe9\x84\xbfw\xda\x87\xc7'\xfb\xf1\xd6v\xd0\xd1I\xfb\xf8p\xef\xa8ut\xdc>\xdc9>\xdcE\x9d\xa3\x83\xf6\xc9\xfe\xeeQ\xabs\xb4\xdf><>8\xdeC\x16\xd2\xdfOv\xc3\x8b\xd1\x95x\xdf\xc2\xbb\x06:9l\xef\x1c\x9d\xb4\xb6\xd4\xdf\xa3\xdd\x8ejw\xf7`\xafsr\xd8\xda\x8a\x9a\xf6\x9fvxr\x98\xdb\xd0\x9e\xee\xf3Ak\x07\xc9)<\xee\xb4v\x0f\xda;{\xbb\x9d\x83pp\xb1j\xfe0\xad\x90n\xfe\x85\x80\xb6\xfb'\x87\xad\x88\xb8\x06\xda\xea\xec\x1e\xb5;\xc7\x07-\xfd\xf7p?\xde\x05Y\xf0`\xf7\xe8$\xa8\xa1\xaf\x1c\x1f\xedE\x17v\xda{\xfb\x07\x9d\xd6\x0e\xda\xea\xec\xc8\xfe\x1e'\xc7\xb0\xb3\xdf\xde9\xec\x1cF\x15\x83\x99E?\xc3rM\xd4\xa7\x96\xf5\xa2\xe9\x9b4\x17\xccb\xae\xf2Q`1<}\xbe=\x08\x9c\x14\x95^\x18\xf9\xbe\xc0\x0b\x02/\xc8&\xbd \xd35\xd3wA\xbf\xb1s\xd4\x1b~\xf8\xeb[\x1fa\x87n\x19\xcc\x16\x12\xd5\xa6K\x92\x8b3\xe7\xf5\x07d\x1a\xb77\xd74\xab\xc3.\xd8\x9b\xaf/\xd1\xedG\xeb\xedY\xe6\xe6\xf0\xed\xab\xc9\x15C\xc3\xdb\xa1E\xce\xd4C\xa8\xddg\xcd\xd3\xe7\xc3N\x1c\xafx\xdf'_L\xa4\xbe]}\xeaY\xc8\x1c\x99\x17\xdf>\xa2\xde\x85\xf8\xf3m\xf3\xf4f2r\x86\xcc\x9e\xa0-}\xb0\xdek,\xc8\x1d\x9e \x93\x19\xfc\xf9\xff\xb1\xb5\x85\xb6\xb6N\x91B%\xa7\xff\x15\xfc\xee\xb4w\xda;\xc1\x8f\xc8\xf1<\xec\x9c>wN/\xd9\x9dm1l\xa2\x8f\x0e\xb1\xcf\xae\xaf\xc2\xf5=J\xd1?{\x8e\x91\xe9\x97x\xd1\xe4wx0 n\xfb;gv3\x831bc0F\x1f>O\xd0P|}w\xf7\xbe\x19>B\x83\x04'C\xb4\xf3\x9f\xaf\xd8D\x8e\xd8\xf8H\x07\xb4\x8f\x8c\x8f\xff\xfcy\x7f\x83\xcc\xd1\xcf\x1f\xeeU3\x7f\xc6fT\xd2xR\xa3B\x05`\xb6L\xc2\x0d\x97:rPR\xa6\x9c\x9e\xa1O/o>#j\x0b\xe2\xf6\xb1A\x94Q\xc4\xe3\x91\x92V\x10g\x88\xe1W.\xfb\xdf\xc8A:Q\x1f\x03g\xfd\x9f\x1eq'~G8Q\xb5\xb7R\xf7\x16\xcfVS\xb8I\xf3\x90B\x86\xd1=\xc3\xfd\xc9\xbe8h\xf8\xf3\xec\xd5{\x1a\x00\xc1\x7fE\xdd;\x95\xf3\xa5\xbej^\x99>\xdcL\xb8\xf7\xa5\xc3\x8ca\xce\xd8\xa7\x15\xcc\x10\x82\x8em\xafgM#\x84,\xf7\x97\xf7\xf3\x9f[M\x12\xd4;\x1f\x9d\xbd\xe9\xcf\xa6\xccn\xec\xa6\xf3\xe1\xdb\xfd=\xba\xfdv\xff\xfd\xf2\x9fR\x84\x99\xd2wE\xa5\xf8\x15\xbd\xa6\xd5\x8c\\\x90D]e\xfd\xd8 \x82\xd4$\xb6\x90_\xdd\xe8\x9d\xdd\x1e\xee\xaa\x01\x9c>\x1f\x1e\xc4\x87\xfc\xe3\xacw\x83\xd1\xf0\xec\xd5\xb7\x0fF\xf3T\x85\x91\xc2JQ\xea\xe8\xf3\xed\xe1\xc1\xe9s\x81{\x16\x89S\xe0\xcd\xcb\xefg#\xd4\xf3\xbe~{\xe75O\x9f\x8b\x1e3'\xa7\xcf\x85\x1b\x94Q!9\xcf\xd6\xa7u\x9a\xb2\x84\x19\xaf~\xfe\xfe\xab\xf1\x8f\x92E\xafn>\x99\x1e\xea\xf5'\xcc\xfc\x81\x8c\xe1\xdd\x9b\xcf\xb7MtKm\xf3E\xb3O\x89e6\x83\x88Q4\xb4\xc0\xc8\x8a\x8d\x85\x8c\xfez\x7f\x86\x86\x86q\xe5H\x03@K\xa2\x181\xb6\x85\x99\xeaB\xef\xb6\xf7\xfd\xec;\xea\x8d\xaf~\xbc\xc1M\x9f@\xea#\xd5v\xbfw\xf5\xd7\xab\x1f\xb2\xaf\xaf>\xfd0\xfa\xa8\xdf\x7f\xf7\xc7\xcd\x10Y\xa3\xb3\x9fc\x1e>kz\xad\xfe_\xf8\xe7\xfd\xf7\xa0\xda\xb0/\xbe\x9e\xffh\x9er\xe1R{\x10\x8aL\xf9`\xf4\xbc\x828\xa2n\xef\xc3p\xd4\xcc{y\xd4X\xb7\x85+?\xf4\xb4l\xab\xe9\x8b\xbd\\\xa7\xcf\x87{\xb1\x87X\xdf\xb9\xe5\n\xd47\xbe\xbe\xfeI\x9a\xa7\x9f\xd41\x89\x9c\xc8\xb9\xdf\xf3\xcb\xf7\x9d\xe1\xebx\xf5\xfe\xfd\x05\xb3\x0db\x0b\x17\x0bb^3f\xbd\xa3\xf6m\xb1\xaa-\xa8\xb5^\x9aw\xfa@\xb4Kd\xda\xed09pD\x07\xba)d\xa9\xeb=\"\xee\x08\xb1\x91\xac\xa9\xb6\x0c\x8aWW\x8b;y\x1b4\xf7\x9co9h\xee\x15S\x1a4\xf7\x124\xf7\x00\x8fF\x91\xad\xd4\x1f\x8d\xbaFLFt\xa5\x8c\xe8*a\x02\xda\xbc\xae\xda\xbc\x02\x0b\x94\xd0\xea34|J\x7f]\x99R\x83\xbdr\xd9H\xea\xa8b5?\xa3\xea\x9a\xe9\xfa\xe2\xd1h\x85?\xb5\x8c\x7f\xe6\xb5\x9bX\x16\xa07k0\x83m\xe1\xe3\x93\xd8P\xf7\xd4\xd2\x1d\xca\x158\x08\x16\xfeD\xbb\x13(\x90 \xcb\xe5C\x82\x82\x08\x8a\x83\xc5\xf0)\x07P\x14O+6\xa6f\xd9\x10J\xbcN\x8a%>\x8b\x7f\xde\xfc\x81\xd4\xfb\xfeax\xf5\x05\x19\x9f\xf0\x1f\xfdk\xd4\xeb_\xde\x93W\xcdS\xe4\x92\x1f\x1eu\x89\x89\x82w\xe1i\x87`*VF\xc1L\xff\xdb\x12\xbf\x07\xdf=j\x8b\xc3\xfd\xf0\xce \xba\x83 \xd2\xf3\xa4\xb5\x1b\xa0\xd8\x15S\x1aP\xec\xd2Ql\x06\xbdPS\x01\x98n\xdfe\xa3\xae\x94\xec\xdb\xbf\xe2\xf2\xfd\xbf\x01\xdbn\x06\xb6\x9d\x831J\xa0\xdcb\xc4+\x81\x1b\xffF\xc5\xf0\x15\xb5\x04q\x0b!n\xa6l4\xdcu\xc0\xb4\xe9\xee+\x10\x9b\xba\x88\xb0e\xb1;\x8e&\xccCB/0\x9c\xc46\xc0\x96\x8550\x95(\x8ap\x85]#DY\x11\x98.(\xb5g\x01\x10tD\xed\xaeE\x7fx\xd4\xa4bR\x16\x83&*=u\x18\xf9\x00|\xe7\x9c\xde\xa8\xa6\"\xcb\x85\xda\x1cQ;8\xf3E?\x08q\xa28M\xaf\x910\xd8h\x84\xdb\xe8\xe5\xfdo\x8d\xce\x8e\x87\x05\x1b\xb5:;;\xb6>\xb1dJBa\x08\x1a\x172\xa5JFH\xedVv:\xc3\n5\x9e\xca\xe5S\x1d\x0f\xa8\xad\xc4M\xfb\x96\x94~\x93\x92\xb5\x9e:\xfd+V\xce\xb5\xc8z\x13A\x96e\x8f9\xa7\xb7d\x82(\xd7\xdbBy\xc1\xf9\x88\xea\x88\x17t\x8d\x07$\xb0\xae\xda6\xb9\x17]YX0\xd4#\x03j7\x94H\x96os\xb8\xf1\x89\x83\x07\x04\x8d\x18\x17\x88\xf4\xfb\xd4\xa0\xc4\x16\xd6\xa4\x8d>\xda\xd6\x041\x9bH\xa1\xc0\xfa}u\xae\x84\x8bn\xc9\xa4\xc1\x87\xcc\xb3L\xd4#H/\x06^\xcd\xdb\x1eq\x90\xee\xcd\x1c\xac\xa7+n\x02\xf7-\xd7\x1f\xe0\x9c\xfa\x0c\xa1X\xd0\xf6F\xc4\xa5F\xc0$\xca\xc9e`[\xf2\x87\xc7\x89\x89\xee\x86\xc4F>\xc3z6\x1ecjI\xc5\xdfn\\ig\x18\xe1<\xe2\x9c \x15!%\x0bE\xa7\xdf\xd8\xde\xa8\xa7Ooq\xd5\x11k\\\x0b\xbe\x84\x80\x94\xa5\xf5]%\xfa\xda\x8d\xab>\xb2H_ 2r\xc4\x04Q\x7f\xc3'\xdfO \x1b\x08\xc4\xacnK\xb2`o\x82\x086\x86\x08;\xce#p\x9e\xc1<[t\xd5\x88\xe7\xe0\xbfX\xed\xa7\xc7\x85=\xc6,\x82\xed\x85\xf0Gl\xa0\x92K\x94pbH\x1a\xd6H~\xa1\xb6I\x8dp\xab\xb0\x18W\xc8\x82\xbe\x8e\xa3\xb6ay&i`\xa4\x1a\x0b\x00r\x9a\xd9\xa8 #\x8eB\xd1\xa6\x16\xdeD\x14\x97L\xf7\xe5\x8a\xb7\x1b\xa9\x0e\xa9-\xc5\\\xc2}\x87\x92\x92\x93\x91`\x95\xb2Sm?F9\xa2\x03[\xed:\x16\x88\xd2\x86\x1eN)\xd6\x0bh\xb6x\xb7~\x8c\xa7\\2&./\x8f\xc435\xeb\xcd\x89\xfe \xd3\\H#1\x85]2ET\x99\x84\x1bDo\n\xca\\S\x1dm-'\xdd9\xbd\xa1\xb6A\x9e!\xbd\xb5\xdb\x167o\xd1N{\x7fo6K\x80\xc7\xfea>;\xf0\xd8\xaf\x98\xd2\xe0\xb1_\xb6\xc7\xbe\xaf\\\x83\xbeS\x162M\x9eo\x847>=\xe9Y\x95Q\xf8\x99\xf5\xb4\x7f\xf0F\xca\xd9\\\xe8b\x8f\nE\x9d_\x07\xdfz\xd8o\xe5T\xbf\x0c\xf7d}\x86\x1c\x8b`\xael]\xa5\xaf\xb1\xa4\xaa\x047c\"U\xf8\xfd\xb6$\xef\x08\xdbx0ei,\xe8\xdc\xd9o&\xe8\xdc\x15S\x1at\xee\xb2u\xae\xed\x8d@\xddn\x90\xba\x8d\xcdw \xedZ\xaci\xa5&\xfa\xf9w\xff\xfd\xc3c\xe2\xf7 =S\xffBj\xefw?\x88iQA\\liWJ\x94\xb5)K\xf4\x82\xa4N\xdd\xe4K)\xba\xb84\xd2\xe3\xc5\xfa\x98Z\xc4\xf4mu\xd5\x0f\x03s\"\x88Y\xbb\xac\xcd\x8a \x9b\x90\xab\xf9$\xdc\xe2\xe0\xf9Y\x9e\xc2\x02\x14\xbabJ\x03\n]6\n\x0dsb\xb6\x7fA2\xe6F\xe1\xd1\xdc\x99/\x81Fg#\xd3b\x07\xd0Zz\x7fb\xae\x1f\xf5\xb5*\xd6{:\x89\x90\x90\xbfU\x0e\xa5A\xfe\xd6\xd2\xd2\x17 \x7fk&\xf7-\xd7F\x80\xfc-\xc8\xdfz\x02L\x08\xf9[\x90\xbf\x05\xf9[\xb3X/\xa0\xd9\x12\x1c|\x90\xbfU\x92\x13!\x7f\xab ^<\xf0\xe2\xcdIi\xf0\xe2\xad\xc2\x8b\x07q\xe4\xe7\x1b\xe3\xb7[T\x0cy\xa6\xa3n\x1d\xfdt\x8b\xcf\xd0\x82 .\x04qWj\x1b\x03\xfc[\x9e\xb6\x00\xf8\xb7bJ\x03\xfc[ \xfc\x83\x00\xee&\x02\xc1\x85\x06o/\xb0e\xbc\xbc\xa7B\xa2\xa8\x0bFm\xfe\xcae\xa3\x9b!v\xc9\x8c\x0d\xa0\x8b\xeaEc\\\x07\x00Y4\x14\xbd'\xe4\xf4\x02\x80\x1d\x01;\xae/v\\~\xf6\xc2\xf28\x95\xcb\xf7\xafK\xed.\x1e1\xcf.\x1d\xd4KU{\xea\xbc\xf7\x08L\x01\x06\xc5l\xd4\x01\x06\xc5\x8a)\x0d\x06\xc5\x8a\x0d\x8amrOE\x97\xdfa\xa7\xabE\xa6\x96\x97]j\x83\xa9\xb1\x89\xa6F\x11?\x14\x9a\x1ce\x8d\x90?\x18\xb5%\xc0.i{\xa4\x8bGc]\x17\x93#5\x82\xd0\xd2H^\x07\x03\x03\x0c\x8c\xf550\x00K\xceV+\x80%WLi\xc0\x92\xab\xc6\x92\xdf\x19\xb55v \xf7\xd8\x00\x10\xb9\xb1 2\x8f\x11J \xc6b\xf4(\xc1\x92B:\xb3\x17!\x05\xc5\xa2A\xad\x03Z\x8c\xf5<\\\x8e\xa4\x7f\x03:\x04t\x08\xe8\x10\xd0!\xa0\xc3\x85Q\x1a\xd0\xe1\xaa\xd1\xa1\xa3U\x19 \xc2MD\x84\xc1\xe4\x97@~\xc5(\xf0\xc6a\xe2\xda\xa5F\xf1\x06I\xb1R\xd10\xd6\x01\x03F\x1dW\x100\xfc\x894\xfa\xe2\x08\xa3\xc1\xa7\xeb\x0b\xffp\x9f!\xb6M\x8b\xb8z\x99T|\x17%\xee0\x81\x1cUQ\x9d@\xd9\xc0\xa8\x87\xb9l\xc5f\xa3`\xed\x13\xb6M\x84\xd1\x0f\x8f\x89\xe4\x0d\xd8\xee\x08\xe0\xe6\x1a\xc3\xcd\xe5g;,\x80%\xe5\xdb\xd8\xc5\x9c\x13\xd1U\xaf^Y\xdeL\xd7{\xeal\xb6\xa4\xf9_\xa6\xb4P\x02q\x9e\xb9\xc9T\xdc\xd0\xc9\x01[\xf0aH\x11l\xc1\x15S\x1al\xc1\x95\xdb\x82\x12\x9a\x82-\xb8\xa1\xb6\xa0?\xf9Y\x15R\xf8\x99\xb5\x05?3\x81\xadk\xc6\xacw\xe1\xf1\x9fEFa^\xf1h`\xeb`\x1d\xe6\x8c\x00VD\x82\x9d\xb7\x99v\x1e@\xc9\xd9\x8a\x06\xa0\xe4\x8a)\x0dPr\xd5PR\xed\xd9\xa4O\x95\x8f\x1d\xe8\x0d\xc0r\x03\x81e>+\x94\x80\x96%`f\x89|\xe5D\xb9h`k\x03,\xe3\x19\xca\xb1\x0b\x80\x12\x01%\x02J\x04\x94\x08(qa\x94\x06\x94\xf88(\x91k\x85\x06\xe8ps\xd1a\xc0\x02%\x90` TX\xc1\xf1\xb8\xdeN\xc7\x94\xc31y-\x17!\x82\xe2\x9d\xfdB\x82\xe2]1\xa5A\xf1.[\xf1j)\x0b\x9e\x98\xcd\xd2\xb5\x99Y/\xa1R\x8b\xd5\xebK.\xe8\x08\x0brs\x87\x9d\x97\xf7\xd8\x10gj!\xfa\x95]\xa8i\x0bj\xad\x97\xd2\x9d>\x10\x08\xf8\x81+g3]9k\x91\xd8\xc9\x89m\x12\xb7,G\xea\xd2O\x9d\xa5\x964\xd7\xcb\x94\x0c\x82\xdd\x12\xbbK\xed\xb2\x13\x11\x94\xdf\xd0\xa9\x00\x0f\xea\xc3\xd0\x1e\x18r+\xa64\x18r\xcb6\xe4b[B\xf9Xt;\xb6\xa2\x1f\xb6 \xdb,\x03\xaf47d\x95L\xe1gi\xc3\xef\xa3'\xe6\xb1\xfcT\xb5h\xe4kl\xfa\xc9\x91\x80\xed\x07\xb6\x1f\xd8~`\xfb\xad\x90\xa5\x964\xd7\xcb\x94\x0c\xda\x96c^\xe9\xcd\xa2\xc3\n\x1b:\x19`\xfd=\x0c\n\x82\xf5\xb7bJ\x83\xf5\xf7$\xac?%1\xc1\xfc\x03\xf3/\xc6\x0eY5S\xf8\x99\xb5\xff\xce\x0ci\xbe\xbc\xc6\xde`F\xbau\xb2`4\xbcu\xb0\xf1\x12}WV]\xfcJ\xb8\x95\x0bV\x17\xd1@]\xadj\xc0=\x1d\\\x1c;S\xfa\x96L\xca\xa2\xb2d\xad\xa7\x0e\xcd*V\xce5\xbdz\x13A\x96ex9\xa7\xb7d\x82(\x0fO\xcc\x8f\x1ff}\x8d\x07$@sm\x9b\xdc\x8b\xae,\xac\x0e\xbd\x1eP\xbb\xa18\x89\xda\x03\xe5c\x90\xb7\xd5\xe9\xfch\xc4\xb8@\xa4\xdf\xa7\x06%\xb6\xb0&m\xf4\xd1\xb6&\x88\xd9\x04\xb1~p\\:s\xd5\xa9\xe8\xfe\xa1\xed\xfa\x8c\xfeR\x87\xa3/\x96\xefto\xe6`=]q\x13\xb8o\xb9\x86\xbfs\x1a\x9d\x9f\x8f\x91\xed\x8d\x88K\x8d\x80I\xd4\xfeU\x06\xb6%\x7fx\xab<\n?\x8b\xfd~\xd7\xc4\xbdT;o\x96\xf5\xffE\x15\xa2\x91\xad\x9b\x1f0\x1cC\xc6\x1f\x18\xdc\xc9\xf7\x0bJ\xc3Bo7\xba\xb6\x0e\xc2J\xdb\xac\xd6}kU\xe7\xf4\x92p\x95t\xa2F\xaa\x01|\xe8\x82\x0b\xa7~\xe0\x11^\n\xcc/`~\xc0\x81[\xce{\x01\x0e\xdc\xa5\xf1\x1d8pgr\xdf\xb2}g\xe0\xc0\x05\x07\xee\xa33!8p\xc1\x81\x0b\x0e\xdcY\xac\x17\xd0\x0c\x1c\xb8\x8f\xc7\x89\xe0\xc0m\x82\x03\x17\x1c\xb8sR\x1a\x1c\xb8\x8f\xe0\xc0\xed:\xc4\x0d\x8e\xae\xe1\xe0\xca\xddHWn\x9c\x07\xb2\n\xa5\xf03\xc7\xa9kY\xaf]\xe69329\xa3R\xd1h\xd6\xc2}\x1bv\\\xfbl\x83\x9f\x91\xa3\xd6\xb2\xd0@]\xcau\xce\x82\xe6\x9d\xfdB\x82\xe6]1\xa5A\xf3\xaeH\xf3ZV\xd7\x97\x0d\xa0l7H\xd9\xc6\xa6\xbd\x84N-\xa9_\xcb\xac\x97H\x97]S]\x9bX5\x91\xbc\x98\xd5\xbbEk'@\xfb\xce~CA\xfb\xae\x98\xd2\xa0}W\xad}!yi\x93\x95\xf0\x02\x13\x98\x02]\xf4\x8d\x8a\xa1\xd2G\xe5\xd4q\xac\xf8\x9aj\xe4h\x04I\xa5\x1c^\xcf\xb1\x87\xd1\x1d\x15C$\x86\x84\xbaqM\x0d\x8az\xce\xb7\x18\x14\xf5\x8a)\x0d\x8az\xe5\x8aZ\x8a\x0c-\xafAYo\xa6\xb2\x8es@ %]\xac\xb0\x95j:\x9f\\]\x16\xea\xe9X\xa9\xf5R\xcfQ\xc7\x95V\x0e\x7f\x86\xca8J\x1f\xd6j\xd8\xcfJ\xa0c\x82\xae.\xab&\x13?\xf5\xed\xe2\xca\xef\x14\x07\x9b\xc4=~\x96\xd7k<\xf0$\x17\xa2\x1e\xa1\xf6@e?SbB\x9a\xc3\xb2\xd5\x0b\xa0\xc8\x15S\x1aP\xe4jP\xa4\xd2u\xdd\xde\xa4K\xcd\xed_\xd4\xfco\x00\x90\x1b\x04 \xb3\x93_\x02/\x96\xc0\x8e\xc5\xf1\x96\xf5\x0c\xb3\xc4\xa3+\xa9\xa0J\x8f\x89!\xf2\x1c\x83\x8d\xd4B$\xdb\x84\xfd\xa9`y\xd3\xe20\x1f,o\x9aga ,oZ\x14\xff\xc1\xf2&X\xde\xf4\xe8L\x08\xcb\x9b`y\x13,o\x9a\xc5z\x01\xcd\x16\xef&\x84\xe5Me9\x11\x9675\xc1\xef\x07~\xbf9)\x0d~\xbf\x15\xfa\xfd \xb7\xeb\xf9\xa6y\xfb\x16\x91\xd0\xa5\x92\x98\xce'\xea\x8fr\x85\xcd\x8a\x14\xe7\x95\x8f\x06\xb4\x16\xde\xbf\x9c!hW`\xf6F\x94\xd4\x15$p\xd11\xb1\x11\x15<\x9e\xd0\x05\xa1d\x08%?\xa2E\x0d\xa0qy\xca\x05@\xe3\x8a)\x0d\xa0qE\xa0Q\xaa\xafno\xa2\xb3\xcet\xbe\x19\x04\x8e7\x11J\x162B PY\x0c0\xdf1\xe3V\xaa\x9eKO_(\x8e'\xe7\x94\x8e\x86\xb8\x0e\xe02;\x00\x05-3\x97C`i\xf9w\x90\x19\xdeR~M\xec\x124\xc6\x165\x91`\xc8\xa4\x12\x93\xf4\xcb?\xf0\x16\xf4\xfa\xec7\x1d\xf4\xfa\x8a)\x0dz}5z=\x90'\xddP\x9e\x806\xdf m\x9e7\xfd%\xf4v\xb1\x0e\x7f\xcfL\xcf\"\x9f\xd9e\xa8\x86.\x18\x9d\xa1\xc9\xa7\xd6Y/}>m\x18J\xabO\xb9\x19\xeavC\xfd\n\xd5\xf9\x80\xa9\xfc\x1d\x15-\x8a4\xba :|\xce\xf7\x1bt\xf8\x8a)\x0d:|5:|\xa4\xe4JW\xb0n$&\xbaJ\x98\x80.\xdf ]^\xc4\x06%\xf4x\xb1N\xffD\xee\xb0k\xf2\x97\\\x14\xaa\xf1x\xb1\xf5\xd2\xdc\xb1\x9e+e\x1d\xfd\x8e\x82:6\n\x8ez\x0e2\x84\\]\n\xf5]6B6\xbbC\x9e-\xa8\x850\xe2\x0e1h\x9f\x12\xb3!\xe8\x88\x04I\x1e}Ox.A\x9f\x87\xc4_\xbf\xe5\"B\xc5\x90\xb8\xc8q\xd9\x98\x9aD=\x04\x9b\xa6K8G\xcc\x95\x0d\x11\x95\x8e$\x81\x1ao\xf4\x99\x8b\xee\x86\xd4P\xbb\x04L\xd0\x1d\xb6U\x96I\x9f\xda\xa6j\x1fs\xce\x0c\x8a\xa5\xd0\xf4{V\xb7@\x13\xbb\xb3\x89[6\xd6\xa4\n?\xafu\xb8Iur\xbe8\x90sz\xe63\x9a\x82\x9c\x94'W\x16\xaa\xec6\x9fa\x03\xb6\x8f\xd8\xeaA\xe9Gk\xb1\x02B\xbeq]j\xf2\xb2\xcc\x16\x94_\"\xc7\x9c\xb9.\x9eHi\xf0 \xd6\xe1s\xd6~\x84P\xa5\xa3<\xa1\xe8\xea\x92\x07)\x9a*_\xce\xe7J\xcd\x8b\x01sRf?r\xa2$\xb1\xcd.q\x981,\xcb2a\x85%\xf2\xcc\x9c\x93\xbd\xf8\xa0\xf6\x92\x19\xe5\x8b\xe3\x10\x17)e\xab\x13\xc6Urx\x8aA\x1a\xef\xd8\x1dqQ\x98Qnx\xaeKl\x81\xd4$\x94\xe0\x1e\x08\x8f?\x0c\x96\x83 \xbebJ\x83 \xbe\x1a\x13\xdc\x87E]\xc2\xc5\xf6/\x05;!*\xbeI\xb6w\xee\xfcg\x15I\xe1g\xd6\xe8\xfe\xe2/,.\xb1\xb2:]4\x1a\xd3:\x18\xdf\xa9\xde\xfb\x06\xb8\xb6\xba\xb91$\xa6g\x113\xd8\x9cGY+C<&\xc8f\x02M\xa4}l\x18\x9e;\xc53\xbe\x16\xb6\x06\xac\xb6.\x87!a\xb5\xf5\xd2\x16\x1b\xc2j\xeb\x99\xdc\xb7l[\x17V[\xc3j\xebGgBXm\x0d\xab\xada\xb5\xf5,\xd6\x0bh\xb6x'\"\xac\xb6.\xcb\x89\xb0\xda\xba \x9eA\xf0\x0c\xceIi\xf0\x0c\xae\xc63\x18l\x0e\x07Gjl\x9eW03\xf7Y\x05R\xf89\xcb#xM\xdcKb\xb3Q\x05\xcf`T%\x1a\xdf\xfay\x08\xc3Q(Oa\xfe\xbd0m\xa7\xbc\x03\xb1\xd1\x9b }\xcc\xe7\xdaz\x12M\x9f,\xa5\x10\xa3\x7f\xa4\xe9S\x03\x89\x0b\xccpyE-A\\e:\x84\xbbt\x0e\xf0\xc0\x0b\xb8`\x84\x851\x0c\x92\xb5\x0c=\xf9\xa5\x0c\x80\x05L\x158}\xcby<\xc0\xe9\xbb4\xbe\x03\xa7\xefL\xee[\xb6\xbf\x0d\x9c\xbe\xe0\xf4}t&\x04\xa7/8}\xc1\xe9;\x8b\xf5\x02\x9a\x81\xd3\xf7\xf18\x11\x9c\xbeMp\xfa\x82\xd3wNJ\x83\xd3\xf7Q\x9c\xbe]\x87\xb8]\xdf\xd9\xc2\xc1\xfd\xbb\xa1\xee\xdf8\x17d\x95J\xe1g\xd6\x11|f(\x08\xf4\x8e\x19\xb7\xc4\x9c\xbd\xbdB^\xf1h\x84\xeb\xe0\x00\xce\x19A,M\x14a\xb5B\x92\x98\xf1M\x14\x0cl\xff\xfb_\xf7\xbbG\xbf\x0b\x89\x06\xee\xa8\x18\x9a.\xbe\xb3\xab:waI\xe4\xc6,\x89\x04\xb0\xb7<\x0d\x00`o\xc5\x94\x06\xb0\xb7\x04\xb0'\xb5\x8c\xe7D\xe70k\xad\xd4\xd5\xcaG\xef\xb6\x00\x0b\x80\xea\x8e\xf5*1A xW\x01\xea\x05;B\x96G{Q\x8d5\x06|\xe1 \x12K\x83|\xc2\x07\xd0\xcf%\x06sM\xae\x90^\xb4\x05\x87\x11n\x95 \xc0\x0f\x80\xdf\x82\x81\xdf\xf2sB\x96\xc7>f\xf4N\x95\xe2\xa0\xf05\x026\x00\xfc_\x1d\x15\x00\xfe_1\xa5\x01\xff\xaf\x1c\xff\x07\"\x12L\x80\xcd6\x01\xb2|P\x88\xf9+[\x01\xef\x98= nu[ ]/\x1a\xf5\xdaY\x04\xa9\xa1\x94\xb6\x0b,U\x0fl\x02\xb0 \xca \x8f\xea`\x10l\x02`\x03\xb0 J\xc1\x04\xb0 VLi\xb0 Vn\x13h\xc0\x01\xa6\x01\x98\x06\xc5\xecPh\x0f<\xd0B\x98\xbdJpv\xe5\x88\x0ckn+\xc4V\x0e\xa6\x0c\x06\x9d-\xc2\xd3vC_m\xc4\xad2w\xc0\x86\x00\x1b\xa2\xba\x94\xa9\x0e\x1e\x97oC,\x80O\xc0X\xa84\xdf\xcb|ea\xd9o\xc9I\x00\x8b\xeda\xe8\x0d,\xb6\x15S\x1a,\xb6\xc7\xb6\xd8t\xce6\xd8m`\xb7\x150EV\xe5\x14~V\xb2\xde>0\xf1\xc5\x96\xdd\xa0\xf6\xe0\xa3mM\xe65\xe4\xb2\xedD$Zs\x9b.3\xb4y\xe3A\x88\xdc\x1b\x96g\xea\x93\x17o\x89\xcd\x1b\\`W\nP/h\x1f\xcc=0\xf7\x16\x8c<\x97o\xee-\x8f}\xc0\n\\\x18\x1b\x80\x012\x1b\x86\x80\x01\xb2bJ\x83\x01\xf2\xe8\x06\x88\xcdD7\x84\x1f]f[\x13\xb0F\xc0\x1a)\xcb!\x85\x86He\xd3\xe4\x1as\xf1\x99\x8eHy#$\xaa\x11\xd1`\xed\xcc\x8dp\x10 \xc3\"eP\xb0\xbe:\xbe\xd5\xb76\x94y\xa1'E\x9fK\xd7#\x13f\x9b\xea;\x17x\xe4\x80!\x01\x86\xc4\x82\x11\xe4:\x1b\x12\xe1{Q\x96\x85\xa2\x17\xe9\x893B\xc5\xca\xb9[\xc0\x99X\x90-9\xe2\xf0\xe6\x82w\x81\x9b\x97\xe5\xc0h\x99\x8dV\xc0hY1\xa5\xc1hY\xb9\xd1\xe2`.\xa4|\x02\xd3d\xb3M\x93,\x1f\x14\x9a\x1bs\x1b \x15s\xdaR\xd5\xa21\xaf\xad)\x92\x93\xc7\xa6l\x8d\xc0\x1a\xe9M\x10\xd6\x07\xfc\xb7\"\x9b\xa35\xdf\x06\xf7`z\x80\xe9\xf1\xe8\xa6\xc7\x02\xf8\x04l\x8c'kc,S<@z\\\xc9I\x00C\xefa\xd8\x0f\x0c\xbd\x15S\x1a\x0c\xbdG3\xf4 /\x0e\xcc\xbd\xe9\xdc\x90U2\x85\x9f%\x8d\xbe\xf9S\xe1\xa6\xb7\x10\xd1cmM\xc1\xe2\xf4\xb7\x87E\xa9\x1a\xe9\x8c8\x04\x19q`MV\x13K\xd5\xc1\xe6\xf2\xad\xc9\xe5\xb1\x0f\x18\x99O\xd6\xc8\x04\xfb\xe6a`\x07\xec\x9b\x15S\x1a\xec\x9b\xc7\xb3o \xed\x0e\x8c\x9d9X\xa3\xd0\xce\xa9`\xf9hD/\xf5T\xe9\xf3=2U\xa2\xe1\xaf\x91m\x93\x1eE\xc2\x98\xf1\xc2\x9b\xfeQ\x1fwCj\x0c\xd5\xa9_6\x13\xd1)\x1fhB\x04\xd8%`\x97\x00H\\\xb9\x92\x00\x90\xb8bJ\x03H\\\x1dH\x8c\xf4\x0f\x9c\xf6\xb1\xd1\x90p:#\x94\x00}\x15\x00 1\xcfI\x9f\xb9\xa4\xec\xa2\x8b\xbcZk\x0c\x03\x13\x03\xc9A\x82\xe9\xf5\xdcIW\xb6\xac \x0b.\x00\x0f\x96\x14\x1f\xd5\xf1 \xf8\xa9\x9f\"#T\xac\x0c~\xea\x14`\x01\x13\x04L\x90j\x94\x06\x13d\xd5&\x081\xbb\x1a\xdfta\xd5\xc5\xc6\x9b!\xd3\x98\xa1\xd0\xf0\xa8l\x8aP{P\xd1\x15\x1d\xd5\x88\x86\xbbv&H8\x88\x1c\xf3\x83\xda\x03\xed\x87\x06\xdb\x02l\x0b\x00z+\x17\xfb\x00\xf4VLi\x00z\xab\x06z\xd4\x1e\x80\xab\x190^\x1e\x1f\x94\x80t\xc5\xf0\xee\x1d3n?\x91;\xec\x9a\x9f\x88A\xe8\x98\xb8\x85\xd8.\xaf\xf8z\x01\xbb\x9c\x11L[A\x8bz\x13D\xcd\xba\xe1:9\xc0.5\xcb\";\xbfx\xbd\xb1]\xc5\xca\xb9\xeeB\x8f\xda\xe2p\x1f|\x85\xeb\xa7U\x00B\xae\x98\xd2\x00!\x97\x0f!\x95\xdcv\x95\xa2\xeb\xba\xbe\xa6\xdb\xfe\xe5Ks@\x90\x9b\x82 g\xb1A \xd08\x1b@\x12\xf3|ru9\x138\x06\xc5\xa2!\xad\x0b`\xf4{\x0e@\x11\x80b\xa5\xca\x00\x14\x01(\x02P\x9c\x9f\xd2\x00\x14W\x03\x14\x89\xd9\xedM\xba\xd4\x04\x80\xb8\x91\x001o\xfaK\x80\xc12\xc0p\xf6&}\x89r\xd1`\xd6\x07\x1a\xe6l\xc3'\x98\xc0V\xb0\xed\x82C\xdc\x9c\xb3c\x1d\x89\xd7\x06tLl\x14\xcf1+\x0b\x1e\x17\x94[\xb8\x00\x98\x08[k\x95D_\xcb\xc4\xeap\x06O\xa5\xa9\x00 \xfc0% @x\xc5\x94\x06 \xbc2 \xec\xab(\x80\xbf\x9b\x04\x7f\xfdI/\x01t\x8bA\xef{fz\x169\xc7\x16\xb6\x8d\xe2\xc5Z\xa9\x92\xd10\xd6\x01\xf8&;\x1f\x83\xbe\xa8\xefY\x16\xea\xe9\x1b\x88\xf5\x91\x18\x124R\xa5s\x11.(\xdb\xd9\xaf$(\xdb\x15S\x1a\x94\xed\xf2\x95\xad\x96 ]_R\x80\xba\xdd\x10u\x9b\x9e\xf6\x12J\xb6\x8c\xc2\xd5\x8e\x98\xb3\x11\xf3lQB\xeb&\x8b\xaf\xa3\xeaM\x8c \xae\x7f}\x9f\x13h\xe0E\xbe\xa5\xa0\x81WLi\xd0\xc0+\xd3\xc0\xbe\x01\x84\x95(\x01=\xbcYz85\xf9%4p\xb16\xfe@\xee\xd5\xc6\xd43\x92\x81\xe2\xc5\xd6K\xfb\xc6z\x9e\x08\xf8\xd8\xe4^\xe8\x8c\xa0\xabKP\xb3s\xbe\x84\xa0fWLiP\xb3\xcbW\xb3R2t\x83\xdc8P\xaf\x9b\xa1^\x93\x93^B\x95\x16\xab\xd5w\xaau\x15\xe4/^z\x9f,\xb8^\xaa5\xd1w\xa5\\\xf5w\xe4\xc6\x12n=\x079\xeaj\x1b\xb4\xec\x9c\xef\"h\xd9\x15S\x1a\xb4\xec\xf2\xb5\xac\x16\n\xa0_7D\xbf\x06\xd3]B\x9b\x16k\xd6\x9b\x89-\x86DPCk\x9f\xf3\x89\xfe;\xc3~-\xa8\xb5^:w\xfa@\x12\xd6-\x0f\x8a\x05:\xb87A6\x16tL\x82\x0b\xb0\xfa\x05V\xbf\xc0\xea\x17\x00\x8e\xd3\xa1\x0c\x00\xc7\xca\x94\x06\xe0\xb8|\xe0\x18\xaa\xb6\xae\xbe\xd1\xedM\x02\xc3\x1d\x16\xc3l\x1c\xae,\xc9\x0d%\xa0f%\xd8\xc9\xe7\xc3\x9d\xbc6\xc0\x93?\x04y6.\x89\xe3\x12\x03\x0bb>C\x1e'h*\xaaE\xd4\xe6\x82`\xc0\xaa\x80U\x01\xab\x02V\x9d\x8a\x9e\x00\xabV\xa64`\xd5\xd5cU\x0e`\x15\xc0\xealv(\x81P\x8b\xd1\xeaK\x87\x19\xc3k\x97\x8d\xa9\xe4\x8c\xe2\x08d\xa6l4\xc8u\xc0\xa5\xe9\xee+0\x9a\xba\x18\x06$\xc5\x90 \xc3s]b\x0b4\xa2\xb6\xa0\xf6\x00\x11Y\x169Q\xe11\xb6<\x02\xd1\xcay_jP\xe4+\xa64(\xf2%(r)\x1dB\xb9\xadDD7\x12\x11\xa0\xb0\xeb\xaa\xb0gL{ e\\\xac\x98\xdfS[\x94\xc8\n\x8a\x17[/u\x1c\xeby^F\x90T\xc0z\xab\x15N\x04b\xfdP\x0b;\xa1\x8f\x064\xef\xbco'h\xde\x15S\x1a4\xef\xb25/d m\x90\xbe]X\x8e\xd0%\xe5\xc2\xbd\xb2\xfb\xacP\xc9\xc6J\xad\x97\x8e\x8d:\xaeTl\xf83\xa1e\x1d\xc6\xac\x7f\xff\xeb~\xf7\xe8w\x8eFX\x18C\xa9e\x07\xd8\x1b\x10DM\x8e\xb0m\xa2;\"\xdf\x12P\xb8s\xbf\x9e\xa0pWLiP\xb8KP\xb8RRlQ\xdb \xb6\xa0c\xc2CqlJ\xb9\xd2\xa5v\x9f\x81\xfe\xad\xab\xfe-3\xf7%Tp\xb1:~y/\x88kc\xeb*x\xcek\xa9\x86fx\xa5\xa7\xd5Y/U=m\x18\xdaK\x9d\x7f3T\xe3\xc4\xbf\x8f\xc2 \xd2\n\x1c4\xf6\xdc/4h\xec\x15S\x1a4\xf6\n5v 0\xba\xe1\xbd\xae\x16\x18\xa0\xc07M\x81\x17\xb0B \x1d^\xac\xcf\x95\x9a\xba2\x8b\x15xTh\xbd4v\xd8o\xa5\xa2\x83_H\xe0[\x12\x19\xd6\x88\x9a\xca\x82\x8e\x1b\xdcS\x8c\xec`\xdf\xe6\xda\x9d6-\xe9P!\x85\xd1/\x9e\x9aEHa\x84\x14F\x00\x97\x00.\xe7\xa34\x80\xcb\x15\x82K\xa5\xd6\xb6\xa8\xc9\xb7\x7f\xf9\xb2\x1c\x12\x177\x0eV\xe62A \x10Y\x0c(\x03\x07\x08\xfdI\xcck\xc6\xacbd\x99S:\x1a\xde:@\xcc\xec\x00\x14\xd6\xcc\\\x0e\xe1\xa5\x9f\xb2hMBO\x90,\xa3\x90h>\xac\x04m=\xfb\x1d\x06m\xbdbJ\x83\xb6^\xa1\xb6\x8e\x0b\x8a\xae\x16\x14\xa0\xac7LY\xe7\xf1@ \xfd\\\xac\xab\xa5fz\xc7\x8c[i\"^\x06\xbe\x8dB}=\xa5\xc6z\xe9\xec\xfcA(\xbd\x9d\xb9\x9c\xd8\xff,r\x00\xa1>s\xb5\xce\x86\xf8\xcd\xbc\xef2(\xed\x15S\x1a\x94\xf6\n\x95\xb6\xe5K\x92n\xe44\x06\xa5\xbdaJ;\x8f\x07J(\xea\xd9J;\xcc2\xe0%\x16 \xe4WX?\x95\x9d\x19C\xde\xa2\x04\x1d\xd1 K\xc2~\xa5\x0f|wAI\xaf\x98\xd2\xa0\xa4W\xa8\xa4aI\xc2f*\xe6\x85\xadN\xf8\xc2\x89{\xc1\xd4\x03\\,\x88y\xe39\xc4\xed[\x1e5\xaf\x19\xa7J\xe5_\x12\x8b\x0c\xe4\xbdB%]\xad\xa1\xf5R\xde\x95\xc6\x96\xd8\x80\n[\x16b}\x84\x91\xc7\x89\x1b\xac\x80P\x87\\\xba\xd8\x1e\x10t\xf1\x0e9A\x13H\x0c\xb1@\xd8%\x88\x87\xed#.\xf0-1\xf3\xd5\xff\x1a\xe7k\x98\x9a\\\xcc\xedb\xd3t \xe7e372\x15S,P\xb3\x1c\x0e\xd5IH\xaexjz\x07@\xe5\x8a)\x0d\xa0r \xa02R3!\xae\xc0\x86\xc1<[t\xcd@\x9du\x0d\xab\x1bj\xa8\xed_\x19\xf1\x0bi\x17\xb5\xc5\x9e\x0bb\x8f\x12\xb0\xf4\xc1\x10\xf5\x8b\xed?\x99\xda\x83\x87\xa2\xd4d[\xb5\x03\xaa\x89\xe1)\xacZ\xb1\x12@Q\x80\xa2s\xc9(\x80\xa2\xcbPC\x00EWLi\x80\xa2\xab\x85\xa2^L\xf7\x94\x80\x1b\x80F7\x0e\x8dV\xe4\x90\x12 \xb4\x18\x90\x9eY\xd6\x19\xe7D\x14G-c\xa5\xd6\x0bDF\x1d\xcf\xb82]2\xa0\\\x10 Zb>J\xacJC\x88r\xdew\x17T\xf8\x8a)\x0d*|E*\xdc\xb2\xbaZ8\x80^\xde$\xbd\x1c\x9b\xf6\x12\nv\xa6\xb2\xbd\xb2\x05qG\xc4\xa4\xd8\x9d\x9ci\x9d?S\xf5\xe6\xd7Y;E\x9c;\x8c\x8cZ\x8e\xe9b\x1a\xab\x80|\x804E5\x17\xf8l~x\xc4\x9d<\xdci\xb3\x00\xef\x8c\x83\x07\xd4V\xe4h\xdf\x92IY\xd7L\xb2\xd6S\xf7\xacT\xac\x9c\xbbP\xbb7\x11dY\xcb\xb4\x9d\xd3[2A\x94#\xac\xb7\xa3\xf7s\xd5\x88\xe46t\x8d\x07$@rmup\xb9,,\x18\xea\x91\x01\xb5\x1b\x8a\x93\xa8=P\xbb\x12\xc8\xdb\xc8\xc1\x03\x82F\x8c\x0bD\xfa}jP\xb5\x96\xac\x8d>\xda\xd6\x041\x9b \xd6G\xac\xdfW;\xf2\xba\xe8\x96L\x1a|\xc8<\xcbD=\x828\x11\x81\x92\xcd\xca\x8f\xd0\xa3\xb4h\xbe\xd3\xbd\x99\x83\xf5t\xc5M\xe0\xbe\xe5n\x13\xe0\x9c\xfa\x0c\xa1X\xd0\xf6F\xc4\xa5F\xc0$*i\xc2\xc0\xb6\xe4\x0f\x8f\x13\x13\xdd\x0d\x89\x8d|\x86\xf5l<\xc6\xd4\x92\xf2\xaa\xdd\xb8R\x0dX\x84\xf3\x88\xf3du\x1by\\r\xe8-)bC\xa4\xd9\xb0\xf1hlh\xd1\x11\x9d\x87\x0bU=`\xc2\x873\xa1\"\xa4d\xa1h\xdfp\xdb\x1b\xf5\x88+y\xc5%\xdc\xb3\x04\xd7\x82/! ei}W\x89\xbev\xe3\xaa\x8f,\xd2\x17\x88\x8c\x1c1AT\xa0;jY\xc8\xb7Id\x03\x81\x98\xd5mI\x16\xecM\x10\xc1\xc6\x10a\xc7y\x04\xce\xd3^\x165\xe29\xf8/V\xfb\xe9qa\x8f1\x8b`{!\xfc\x11\x1b\xa8\xe4\x12%\x9c\x18\x920\x1f\xc9/\xd46\xa9\x81\x05\xd1\x12+\xc6\x15\xb2\xa0\xaf\xe3\xa8mX\x9eI\x1a\x18\xa9\xc6$c\xe51\x1b\x15d\xc4Q(\xda\xf4Z\xae\x90\xe2\x92\xe9\xbe\\\xf1v#\xd5!&E\x9b4V\xb5\xf1\xaa\xe4d$X\xa5\xecl#-#\xe9\xc0fnL\x946\xf4pJ\xb1^@\xb3\xc5\x07\xeab<\xe5\x12i\x11\x929\xb8\xd1\xafYoN\xf4\x07\x99\xe6B\x1a\x89)\xec\x92)\xa2\xca$\xdc \xb6)\x15\"sM\xe2\xfa\x93\xee\x9c\xdeP\xdb \xcf\x90\xc1\xf8\x88\xf1-n\xde\xa2\x9d\xf6\xfe\xdel\x96\x80\x00\xdf\xc3<\x08\xe0\x1d\\1\xa5\xc1;\xb8:\xef`\xdc]\xd1\x0d\xdc\x15\xe0,\xdc0g\xe1\x14.\xc8*\x95\xc2\xcf\xac\xef\xf0\xb3\x84>Q:\x93\x9f\xa3?s\x8f\x80\xa2j\xd1\x88\xd7\xc1\x83X0\x92\x84\x131\x02\x99x\x14\x00\xcf\x11\xb1\x989\x89\xf9\x16\xadI\xb0\x1a\xa1\x11(g\x890Lb\xb3\x91\x84W\x1aC\xd8L\xc0y\x85sK\x00P\xf6+\xa64(\xfb\xd5)\xfb\xe8r\x90@\x0c\xbb\nl\xa0\xb6\x9f\xc6\x06%T|\xb1\xbaWY+\xef=KP\xc7\xa2\xc4-\x0e\x11\xa6\xcb\xae\x97bOw?\xa3\xcd}\xedM~xt\x8c-u\xc4pXZ\xfb\xc9}{_Eb\\b\xc8\"\xea\x8c\xc9\xc7\n\x16\x06e\x16\xef8R\x08\xa5\xac\xafH\x15~z\xee!\xc8\xc5^\x03\x89\x0e\xe8m\xc5\x94\x06\xf4\xb6\"\xf4&\xd5M7\xd2 \x80\xd96 \xb3e&\xbf\x04:+\x81\xd4>O\x1c2\x1b\xa3\xe9Rk\x88\xceT\xc7\x13\xb8,\x9d2\xad^\xe7\x16\xba\x1b\x121$.\xa2}DE\xb0G\x04F6V\x87l\xe9\x92\xccE\xd8F\x96\xd3\xe0C\xecN\xf1\xaf\x00D\x03\x88\x06\x10\xad\x1cp\x00\x88\xb6*J\x03D[%D\x93O\x07p\xb6q\xe0LO{ (V\x0c\xcb.\x98m\xab\xb7-'\xed\xbc\x10\xa9\x15W\\/\xf0V8\x96\x04\x9e\xcb\xcb\xb5GFP]g\xf2e\xb6\xf2\xd2\xfbp\xf7&\x88\x9aUQ\xdcS\xdfIA\x8e\xac\xc2!l~\xf1\xd4\xb4\xd6l\xd7\x84\x8a\x95\x1f!\xb1\x15\xd0\xe6\xf24\x12\xa0\xcd\x15S\x1a\xd0\xe6j\xd0f\xa8\xe5rsw\xb6\x7f\xf9\xb2\x1d\xf6c\xd8$,Z\x9e)J\xa0\xd3b\xa4\xfa\x92\x0b:\xc2\x82dr\x9b\x88y\xa62\x98\xce'_\xb1EM,\x98{\xa9|K\x85\xe7\xfbWo-\"\xd7:`\xda\xea\x03\xcc\x04\x94\xa3\xc40\x8c\xb8C\x0c\xda\xa7\x86\xce\xfdB\xe1np>\xe4\x0d\xee\x8e\x83&\x1b\x9f\x87\x94\xab\xc5W\xb8G,b\"l#\xe2w\xa9\x85z\xc4\xc0\x1e'\xea)wX\xad\x881\xb0ex\x16\x16$\xf1l\x03\xdb\x0d\x8b`\x13\xb9\xcc\xd3\x19\xeaJLs\xd4w\xd9H\xe7\xb0\xb9\x1e\x89uG\xd7\xab\n\xb3\x17\xe4,]\x00\xa0\x0e Xuk\xb2L\xc5\xa7\x0e\x93\x97\x84_\x97i\xed\x80\xcb\xba\xe4$\x80\x11\xf10(\x01F\xc4\x8a)\x0dF\xc4j\x8c\x88\x00\x02\xe4g\x04v\xb5\xf6\xee\xf6&\xddH\x9d\xf9r\x14\x8c\x8a\x8d1*\xe6g\x92\x12\x86E\xb1\x91\x11\xdb\x08w\xf6!U\xd9\xc2\xd1\xe0\xd7\xc1D\xc8\xf4?\xefp\xaah\x9d\x88JJ\xe8\xc7\xdd\xdbN\x08\x94a\xf9\xc7\xbc/8\xa8\xfa\x15S\x1aT\xfdjT=\x9cS\xb5q\x8a{aGT\xe5\xad_\xd4^\xab\x92\n9[m]Usf$\x197\x9d\xc1h2\xd30\xf2\x86\xf5\x99\xeb\xef\xf0\xe0\xef\x89\xdb\x8a\xda$\x80\xe3\xf2a\xa8\x07\xac\x99\x15S\x1a\xac\x99\xd5X3E\xae(\xb0q6\xc8\xc6)f\x84\xacj)\xfc,g\xf9\xf0\xf3\xc9e\x00U+\xdb?\xc9\xca\x11\x01\xd6\xd5\nJ\x8c'\xb3-v\xcc\xd8I\x1eX\xe10\xcaUue\x13%\xf2\x19\xfc\xc6*\xaf\xb0z\xea\xb9\xb9\x0b\xb4\x8b\x92\xd3]\xb3|]\x80\x92OR\xb9\x00\x94\\1\xa5\x01J>\"\x94\x84\xa3\xcd\x00X\x96g\x8b\x12\xd0r.\x98Y!\x81\xb6d\x0b\xb5\x00\x9cE\x89\xb2\x01\xeaL`M\xff0\xba\xd9\xa9\xb3\xcc&\x8d\xd0\x01Z\x15\x80>\x1d\x17<8\x7fKK\x93|\xb0\xb8\\;\x00\x9c\xbf\xa5&\x01\x10\xfb\xc3\xb46 \xf6\x15S\x1a\x10\xfbc\"vHS\x05\xc0^\x92+J`\xf4\xb2x\xfd\x8bm>\xc41<\xbdzD\x91\xf5B\xeaSG\x94\x0b\xd3\xe3\x07G\x83\x7f\x18\xfc\xc3O\x13m.\xdf\xe8[&[\x81\xb9\xf1`\x06\x00sc6\xe6\x00sc\xc5\x94\x06sc\xe5\xe6\x86g\xa7\xa0e\xa8{!^\x00\xe6\xc7\xbc\\Rh|\x941G\xd4!C\x91\x8b\xbc\xac\x19RT-\xa2\xc8:\x98\x1f\x05#\xc9\xe4\xe7\xfb\xa6\x04 \x13\xf3\x0b\xcd\x0c\xb02\xc0\xca\x98K\xec\x00\xc8\\\x86f\x01\x90\xb9bJ\x03\xc8\\\x0d\xc8Tk\xba\xe3)\xac\xb3a\x03\x80\xcb\x8d\x01\x97spG Y\x0c*\xbf\xd8\x0ec\xd6\xb7!\x15\xc4\xa2\xbcx\xa5g\xa6\xecz\xc1\xc7t\xf7\x93\xaej$\xaf!\xd6GwA\x01b\"Y\x01Q\x93#\xc1\x90\xa7\xaa\xc3\x9e\x0b\xf3\xbe\xd1\xa0\xd4WLiP\xea\xabQ\xeaZ0tC\xb9\x01:{\x83tvv\xf2K\xa8\xe1b\x95\xac\xf2\x1d\xcf<1d.\x15\x93\xf7D`\xa9\x93\x0b5\xf3\xb4*\xeb\xa5\xa0\xa7\x8cB\xe9\xe9\xfc{H\xfbL\xa4\xfa\x1e|\xba\xbe@*N\x87FD\x0c\x99\xde\x87\xa1O\x841\xa4\xf6\xa01\xa5\xbev\x089\xd8\x15\xd4\xf0,\xec\xeat\xd1\x1aF\x9d+\x87\x07\xc1\xef\x03~\x9fU+\x10\x80\x88+\xa64@\xc4\xc5AD\xc6G\x8cS\xbe-\xd8-\xb1\xfb\xd8\x10\xcc\x9d\x840A\xc9T\xb5\xae\xc4f\xa3\xff\xde\xc6\x81\"\xea\x8e|M\x04\xa0\xb1f\xa0\xf1\xa1\xecP\x02:\x16\xc3\xc8s\xd2g.\xb9!\xb6\xf9\x86\xb1\xdb3?\x0eT\x84\"\xa7\xd4X/\x10\x99?\x08\x85!so\xcd\x82\x90\x8d\x01\x11*oQm\x90\xef\xd7q\xc9\x80rA\xdc\xd8n_=\xd58\xe2\xc46\xd1\x90\xb1[\xc0\x90\x80!\x01C\xae^\x9f\x00\x86\\1\xa5\x01C>\x0e\x86\xd4\n\xa7+\x15NW*\x1c@\x90\x1b\x8c \xb3\xccP\x023\x16\xe3G\xe51\xe3\xaf\\6\xbap\xc9\xcc,\xb3\x9c\xd2\xeb\x85\x1b\xb3\x03\x88\xfc\x8e\xf1\xcb\xb3\xf0b\xe8rD\xd8\xb2\x1ajz\xa8\xed\xa7\x9f\x19\xb2 b\xa2\xde$\x9e\x85\x86\xcd\x11\xb5\xb7\x0d\xdd|\xed`\xa3\x11R\xb3\x14p\xf4\x8b\x03t\x04\xe8\xb8rE\x02\xd0q\xc5\x94\x06\xe8\xb8R\xe8\xd8\xed\xbbl\xd4\xf5%\xec\xf6/\xff\x0b\xe4\x98m p\x9c\xca\n%\xa0b1l\xfc\x1c{h\x89\xe3|\xf2\x8a\xaf\x17p\xcc\x19A\xfcH\x9f\"\xb8(\x86X\xa4\xce\xfc\x89\xdaB#fz\x16\xf9\xf7\xbf\xeew\x8f~\xe7\x0d8\xf6\xe7\xe1/<(\xf8\x15S\x1a\x14\xfc\x8a\x14<\x9c\xfb\xb3y\x9a|a\x07\xff|\xbe\x7fE\x08?\xc7\x9c\xcc\xde\x810Sv\xcd\x94u\xaa\xfbSr\xc0\xb1e\xa1\x1e\xe6\xc4\xdf=P\x91\x9f#lK\x95M\xa8\x8b\x0c\xe6ja\xa4N\xc7v\x18\xb3@+\xcf\xfd\xf2\x82V^1\xa5A+/N+\x87\xb9\xc1\xe2\xbeO\x08\x0f\x85\xb3\x94\x1e\xb0=Y-\x95r\x99)/\xa1\x87\x8bu\xb2RO\xd7\x8cYW\xe6\xec\xb8KPn\xbdtq\xbc\xeb\x99\xf5\xfbR\xa7^]&\x17\xec\xab\xc5\xfcR\x1fS\xdb\xf1D\xed\"%\x90`\x03Q\x925\x10\xeb\x00\xd7VLi\x80k\xcb\x87kJ\x9cv\xd5R.j\x06Y\x15\x80\xdc6\x04\xb9M\x99\xfd\x12\xc0\xad\x18\xc4\xbd\"DE\x07\x8aC \xb1R\xeb\x05\xe0\xa2\x8e+\xf8\x16\xfe\x0cC\x1aI\x87\x8a\x84u\xf1\xc5\xf5}B2\x9e\x95F\x9eg\x05] d2\xc2\x91\xcd\x04\xa2\xb6ay&Q\xad\x85~\x9c\x96l\xd8\x18\xa2!\xe6\x88\n\x8e\xd8\x9d\xdd\xd0\x91\x16b\x9b\xea\xd5\x00\xef\xcc\x9c\xb2\x00\xd4\xfd\x8a)\x0d\xea~\xf9\xea\xbeOHW\x8b\x1e\xd0\xf1\x1b\xa2\xe3\xe3S^B\x99\x97\xf0\xce\xdc8L\\\xbb\xd4 \xb3\x1d4\xb1\xa2\xeb\xa5\xe2S\xbd\x8fRb\xc3k\x91\xb2\xb7,\xc4\x1d&\x90#/s\xd4\x9b \x82\x8da|\xad\x94\xa2\xff\x9cK\xeca\x0bnp\xc0\x00\"\x03D\xf6\x08\x94\x06D\xb6|D&5GWi\x0e\xbd\xeb\x1d\x04\xce6\x07\x9a\xe5\xce} \\V\x8c\xd1\xce\x0c\x83y\xb6(\xf6\xbdD\x85\xd6\x0b\x97\x85\xfdV\x88,\xf8\x95\xc0bbH\x10\xb9\xa7\\-^\xc7~\x89,\xea\x8a\x0f\xed\xf5\xed\x8f\xd7?\x11a\xb7\xff\xbc\xfd\xa34\xbf\x98\xa3\x9f?\xdc+%\xeen\xa8m\x90g\xc8PiK[\xdc\xbcE;\xed\xfd=_\xce%'k%`o\x01\xa8\xce\xc1\x03\x7f\xf9V\xfb\x96L\xca\xc2\xbbd\xad\xa7\x8e\xf3*VF\xc1\xc4\xfc\xdb\x12\xbf\x07\xdf{\x13A\xc2\xeb\x83\xe8:Z\x00\x98tNo\xc9\x04Q\x8e0\x1ac\xcb\x0bL\x0eb\"j\xa3k< \x014l\xdb\xe4^tea\xc1P\x8f\x0c\xa8\xef\x05\x0c\xb6o\x90\xb7\x91\x83\x07\x04\x8d\x18\x17\x88\xf4\xfb\xd4\xa0\xc4\x16\xd6\xa4\x8d>\xda\xd6\x041\x9b \xd6G\xac\xdf\xe7D \xe6\xa2[2i\xf0!\xf3,\x13\xf5\x08\xe2D\xb4\xb3\xdc\x9c\xc6\xb7\x8b\xe6;\xdd\x9b9XOW\xdc\x04\xee\xf3\xa8-\x0e\xf7\x97\xc7\x7f>C(\x16\xb4\xbd\x11q\xa9\x110\x89\xca\xe17\xb0-\xf9\xc3\xe3\xc4DwCb#\x9fa=\x1b\x8f1\xb5\xa4\xbcj7\xaeT\x03\x16\xe1<\xe2\xb2H_ 2r\xc4\x04Q\x81\xee\xa8e!\xdf\xc8\x91\x0d\x04bV\xb7%Y0\xf0\xe5`\xc7y\x04\xceS\xd0\xa5\xabF<\x07\xff\xc5j?=.\xec1f\x11l/\x84?b\x03\x95\\\xa2\x84\x13C\xd2d@\xf2\x0b\xb5Mj`A\xb4\xc4\x8aq\x85,\xe8\xeb8?\xb8\xd6\xc0H5&\x19+\x8f\xd9\xa8 #\x8eB\xd1\xa6\xb2\xb4\"\x8aK\xa6\xfbr\xc5\xdb\x8dT\x87\x98\x14m\xd2\xfa\xd5\xd6\xb0\x92\x93\x91`\x95\xb2SE\xfa(Gt`37&J\x1bz8\xa5X/\xa0\xd9\xe2\x1d|1\x9er\x89\xb4.\xc9\x1c\xdc\xe8\xd7\xac7'\xfa\x83Ls!\x8d\xc4\x14v\xc9\x14Qe\x12n\x10\x1d\xfde\xaeI\\\x7f\xd2\xcb\x1b\x17i\x96\x00w\xe3\xc3\xbc\x11\xe0n\\1\xa5\xc1\xdd\xb88w\xa3\x96\x16j\x83\xc5\xd0\xdd\x14\xfaB\xc0\xbfX/\xffb\xf1dgUD\xe1\xe7T\x87b\x19\x7f\xe2\x9a\xba\x13\x13\xde\xc4\xc8\x99\xe8\xff6\x89\xc0\xd4\xe2ja\x9c\x89\x98\x1d\xec\x86Y9\x94\xfb\xd4\x13\xf1+\x9e\x99\x07'\xe5\xcd\xc2\x838\xb5\xd5j|+U\xc1\xfc=\x11\xfa\xcc-\x01\xf0\x01\xcd=L\xf6\x03\x9a[1\xa5\x01\xcd\xad\x06\xcdm\xff\x823\xf36\x10\xd7\xc5\xa7\xbd\x04\xaa+Fx\xef\xd5\x8e;\xa5\x02\xc7\xe9\xa2\xeb\x85\xf7R\xbdW\xb0/ymz(YoK\x14F\x94a\xdf\x83y_WP\xc5+\xa64\xa8\xe2\xe5\xaab-\x19\xba\xe0_\xd9 =\x9c\x99\xf3\x12\x8aw\x86\x9b\xc5\x13\xc3\x12\x1b\x07\xc6\x8b\xad\x97\xf2\x8d\xf5<\xbeQ\xa0\xb4\x82)\xd1\n\x176\xfb{\xf8[\x08\xeau\xc5\x94\x06\xf5\xba\\\xf5\n{\xfcm\x8cV]\xd8\xd6~\xaf]<\xcb\x92\x0d\x8a\xac\x97\x12\xf5{\x9d\xd87(Xl\xfe\x1f\xff\x9c\xd7\x9f\xaa\xe8\x7fZh \x0b\xab\xf5g\xca\x94\xd5? \xeaMb?\xab\x9f\xbc\xf0t\x92\x94\xfd\x11\x94\x0dX\xf8\xc5k\x1cr\xc8yA\x16\x9b\x9d\xe6\xb3P5\x8a?\xc1\xac\x9f\xf5\xa1\xf8\x88\x0f\xbaR\xe3v=\xb7t\x16`\xbcN\x8di\xef\x9c~t\xa4\xa4\xc3V\x0b\xc5\x87\xdc\xd2 t\x9c\x88\x96\xce\xf1\xd4\x816\x95\x87\xa78\x92\xa3\x11\xf6\x0f\xab\x19\xd01\xb1em\x05kJ\x04\xe2\x162\xa9\xb0\xba\xa2\\j1\xac\xaeX\x1a\xdf\xc1\xea\x8a\x99\xdc\xb7\xec\xc4vX]\x01\xab+\x1e\x9d au\x05\xac\xae\x80\xd5\x15\xb3X/\xa0\xd9\xe2\x93\xee`uEYN\x84\xd5\x15M\x88R@\x94bNJC\x94b)Q\x8a\x9f\xa1\xefZ{\x16 LQ\xdf0Ev\xae\xb3\n\xa2\xf0sJ\x9c\x82\x90\xb2\xe1\x8a\xa8d\xd4\xfb\xb5\x89Z\x84\x9dW\xc1\x8b\xc4\xa5\x9c\x9ds\xff\xa3\xee$#\x1a\xd2b\xf0]\xca\x95\xa3\x16O}\xf1\xc5\x9c\x9e\xf5\xe4\xfc\xc1\xe2\x8b2~\xf9\"\xec\xb6\x16q/p\x1f\x97\xf3\x9d\x80\xfbxi\xde\x13p\x1f\xcf\xe4\xbee{\xee\xc0}\x0c\xee\xe3GgBp\x1f\x83\xfb\x18\xdc\xc7\xb3X/\xa0\xd9\xe2\xcd\x06p\x1f\x97\xe5Dp\x1f7\xc1}\x0c\xee\xe39)\x0d\xee\xe3\x95\xb8\x8f\xb7}\xbf\xce\xf6/\xff\x0b\xac\xea~\xbe9\x0e\xe5\xbc\xd9\xcf*\x91\xc2\xcfi.f\xb7\xb4\x8b\xd9]g\x17\xb3\x9bu1\xbb)\x17\xf3\xccl\xf9\xd0\xc9\\=5~=\x9c\xcc\x95\x13\xe6\xc1\xc9\x0cN\xe6\x92,\x03N\xe6\xc5\xfaW\xc0\xc9<\x8f{\x0f\x9c\xcc\x8b\xe2?p2\x83\x93\xf9\xd1\x99\x10\x9c\xcc\xe0d\x06'\xf3,\xd6\x0bh\xb6x\xb3\x01\x9c\xcce9\x11\x9c\xccMp2\x83\x93yNJ\x83\x93y\x95Nf7p3\xba\xe0d~\xbeqN\xe6\xc4\xecg\x95H\xe1g\xd6\xc9|fY\xe7\xd8\xc2\xb6Af\xec^\x16/\x17\x8de\x1d\x1c\xcc\xf1\xae\xeb\xfd\xe2\xa3\x0b\xe1&fR\x8f\xf7\xf4E \x17\xb1e!\x83Q\x9b+\xa0\x88\x91\xb4v\xa3=Dk\xe7^\x86\x0d\xe4\x17\xea^\x8e6\x90\xa7S\xf6\x8e\xef\x05\xfc\xf7\xf0M\xe4\xc1'\xfdD\x18\xa6be\xf0I\xcf\xb2\x8b\x17\xcbw\xe0\x93\x9e\xc9}\xcbv\x07\x82O\x1a|\xd2\x8f\xce\x84\xe0\x93\x06\x9f4\xf8\xa4g\xb1^@\xb3\xc5\xdb\x1a\xe0\x93.\xcb\x89\xe0\x93n\x82O\x1a|\xd2sR\x1a|\xd2\x0b\xf7I\xf7\xb0}\x1b:%\x03\x17\x06\x9ccUwg\xf4\xcci\xcf\xaa\x8d\xc2\xcf\xac\x17\xdaw\xc7\x16z\xa0\xc32Q\xe7\xd7\xc1\xfb\x1ct[y\x9e\xfd\x1fS\xbd\xce\x81\x9f\xd9`\xd4\x06\xcf3x\x9e+\x8b\x80\x9ay\x9e\x97\xc7w&\xb1\xd9\xa8,\xd7\xa9\xc2\xb5\xe6\x1a5\xc2\x80g\x94\xf4\xd1W\x96\xc16`-\xccF\x14`-\xac\x98\xd2`-\xac\xdaZ\xd8\xeeM\xba\xbe`\x05\xb3a\x03\xcd\x86\xd8\xfc\x17Z\x0b\xe5\xec\x07N.\x95F/\xb6 \xc2R\xd1H\xd6\xc3\x86\x08:\xee[\x11\xfe\xcf\xd0\x8e\xd0\xa6B\x0fs\xa2\xf5v\xe0B\xd6\x87d\xe0@\x99\x0716B\xc5\x90\xb8\xa8G\x1a\xda\x00 \xaa!*8\xb1\xfaH\xb56\"\x02Kb\xfa\xb7<\x9b\xfaQ\xba\x11v\x14\x9eL\xd6\xadl\x99\x00D\\'\x88\x08`oyz\x00\xc0\xde\x8a)\x0d`o\xd9`\x8f\x13\xc0v\x1b\x84\xed\xa2\xe9.\x01\xdf\x8a\xa1\x9c\x026\xfc\xbd\x0f>\n\xf1\\\xba\xe8z\x81\xbaT\xef\x15\xb2K^K\xb8\x89\x0dK%:\x85\xa8LA>K\x8a\xfc\x01\xe5\x82\xb8\xc4\x8c\xf9m|\xfc7\xe50\xe6\xe5\x83\xb2\x05\xa0/\xc8\x18-\x97.\x05\x19\xa3KK\x98\x82\x8c\xd1\x99\xdc\xb7\xecd=\xc8\x18\x85\x8c\xd1GgB\xc8\x18\x85\x8cQ\xc8\x18\x9d\xc5z\x01\xcd\x16\xef\x88\x83\x8c\xd1\xb2\x9c\x08\x19\xa3Mp\x0b\x82[pNJ\x83[p\xb9nA\xe5\x9a\xe0\xdd\xc0\x85\x01\xbe\xc1\x0d\xf0\x0df\xe6<\xab0\n?\xa78\x08\xcb\xfb\x07\xd7\xda=8\xb7wP%\x93\xea\xe8o\xc6+X\xd9)\xf8\xd4sH\xe7\x08\xd4\x9a\x90?:o&\xa0\xbc\x1e\xf7B\x970\x0e\x00 >La\x00\x12\\1\xa5\x01 \xae\x14 n\xffR\x17`\x01\xd1\x06\"\xc2h\xeeK\xa0\xc1bdx\x8e\xed[\x05O\x8a\xb7\xb2\x8a\x17[/L\x18\xeb\xb9\x02\x84\xfa{\x02\x08:!<\x93\x18\xf0^\x91\x1e\x8d\x98\xe9YSN\xde\x05\xfd;\xfb\xf5\x04\xfd\xbbbJ\x83\xfe]\xae\xfeUR\x02\x8e\xbc\xdf\x04u\x1bLu \x8dZ\xac]?3\x81\xad\x1b\xcfq\xacI\xa1zM\x94[/\xfd\x1a\xef\xbaR\xb0\xb1\x0b -\xabCk\\\xdf\x88o\x17Y\xd9\xb7\x02 W!g\xaf\xc03R\xb12$\\\xcd\n\xfa.\x96\xef \xe1j&\xf7-;\xd7\x05\x12\xae \xe1\xea\xd1\x99\x10\x12\xae \xe1\n\x12\xaef\xb1^@\xb3\xc5\x07\xd4 \xe1\xaa,'B\xc2U\x13\xdc|\xe0\xe6\x9b\x93\xd2\xe0\xe6[\xae\x9bO;(\xc0\xcd\xb7\x01n\xbe`\xaa\xb3\xea\xa1\xf03\xeb\xe6\xd3\xde\xae\x8f\xfdB\x1f_T(\xea\xf2:8\xf8\xc2~+\xef^\xf0+\xe1\xda\x8b9\xf5\xe2\xbb\xf1Uv\xecA\xd2\x14$M\xc1\xf6i\x8f$\xf9\x01\xc9\xad\x98\xd2\x80\xe4V\x81\xe4 Oj\xe3\x10\xdd\x02\xd3\xa3b\xc1\xccoT\x0c\x99'>\xeaxK\xc9hn\xaa\xd2z!\xbf\xa9\xe3H\xc7y\x13w!\xe8;\xcb\xcb\x07A\xdf\x05\xc0G\x08\xfa\xce\x13n\x83\xa0\xef\xa2\xf8\x0f\x82\xbe\x10\xf4}t&\x84\xa0/\x04}!\xe8;\x8b\xf5\x02\x9a-\xde!\x08A\xdf\xb2\x9c\x08A\xdf&\xb8\n\xc1U8'\xa5\xc1U\xb8\nWa\xf7N\xfb1\xba\x81\x95\xc4\xc1c\xb8\x19\x1e\xc3\xcc\xccg\x95G\xe1\xe7\xf4\x90py\xaf\xe1\x94\x1a\xd1\xd8\xd6\xc1e\x98?\x08\x88\x1cC\xe4\x18\"\xc7\x00\x07\x01\x0e.\x86\xd2\x00\x07\x1f\x01\x0eB y\xd3a\xe1\x02\xe3\xca\x17l4\xf2l*&\xd7\x8cY\x85\xb00Ur\xbd\xe0`\xb2\xf3\n\x06&.%\xf7c\x0b\xee G\xde*\x08\x13\x83R\x9e\xfd\xb6\x82R^1\xa5A)/\\)\x9bTZ\x0d=O\xc9\x92@4\x87b\xa2+\xc5\x04h\xe3zj\xe3RS_B\xf5\x16\xab\xe1Kb\x91\x81\xfa\xaa\xb2\x99>\x91;\xec\x9a\xc5;aM\xab\xb2^\x8ay\xca(\xfc-S\xf3\xee\xe5\xa4u\xb9\xfe\x1dl\x18\xaeGL\xd4\x9b \xac\x82\xc2\x8d1\xb6\xa8\x89\x85\xb4\xbek\xe7\xc8Q\xc4an\xb7\xe2)\xfc\x99\x8a\xe0\xe0)p\xf0\xa4h\x85\xf4\x0cr?\x1c\xe8\xdf\xcd\x1e\xd4\x0f\xfe\x9eU\xa8\x1e\x80\x96+\xa64@\xcb\xd5@\xcbP\xb2pi\xea\xa7d\xd0\x7fo\xfb\xfa\x0e \xe7\x06A\xce\xb2,Q\x02~\x96\x85\xa2\xd5P\xe8\xda\x03\xd0)\xd8\xb3\"\xec4\xc3\x8a\x8f\x049\x01[\x02\xb6\\r\xb6ahUU\xe5\x8fLE\xe0\x8f\xa9\xfc\x91\xa1U\x82?\xc2\xbb\xf3\xf2\x07\xd8\x1e\x0f\xc3 `{\xac\x98\xd2`{<%\xdbc\xfbWF>A@\x1a\xec\x91rlR\xc2.)e\xa30\xf7k\xd0z)+%Y>\"\xc2\x1a\xd9)\x89!\xc4-\x95\xf8\x8d\x84\xad2\x8e.\xab\xec\xc6p\xb2\x1e\xc9>Y\x1e,\x05\xb3e\x05\xb0t\xc9f\x0b\xc0\xd2\x87\xa9\"\x80\xa5+\xa64\xc0\xd2'\x01K#-\x07(\x14Ph\x1eW\x94\x00\x9a%A\xe77*\x86\xa6\x8b\xef\xce|\x94Q\nyf*\xad)\xfcL\x8f#\x89ASwC z\xe7_\x0fa\x01@Q\x80\xa2\x00E\x01\x8a\x02\x14]\x1c\xa5\x01\x8a> (\x1a\xe8\xbaP\x82\x03 \x05@:\x957J@\xd1\x19\xb04\xd6\x8d\x12\x07\xe8\xe6\x15_3(\x9a\x1dA\xde\x81\xba\xfa\xec\xc4`\x9b\xa0\xf8d\xc1\x91\xba\x0f|\xb1A\xb3\xaf\x98\xd2\xa0\xd9W\xa3\xd9\xe1h\xdd\x8dS\xd8\x0b;b7\x0c\xbf]\xb0\xd1\x88r\xc9\x02\x85\x8a8\xb7\xfczi\xe2\xbc!(U\x9cs#\xd4\xcb\xd80\xbc\x91ga)\x8f\x8c\xe8v_\x1a\xea\xa8\xbe\xebu gn\x05\x1e!\xc8\x99{\xd2\xfa\x05p\xe3\x8a)\x0d\xb8q5\xb81\x8a3\xe5% T\xca\"-\xd8\x85\x15\xe5\x00O\xcb\xb0G lZ\x12\xa7\xdeX\x98\x0fIIp\x1a\x16^SD\x1a\xf4? C\xfd\xab!\xf6\xe4\xf27\"cb\x8b4\x00\x05\xe0 \xc0\xb3\xaa0yT\xe0Y\xc0\x9aO\xe7\x00E.\xb0+\xa4|\x1b\x12\xa9\xc6\xca\xb2`\xaa\xdaSg\xa1\x8a\x95\x1f\xe5\xfc\xb0\x14I\x13|\xca\x1c)L\xb1\x85\x82B\xc8/\x14\xb2\xab\xda\xc0_\x0b\xd3\x12l\xbb\x10\xd6\xd1\xc7\x00Ud\x9cD%`\x9b\x15\xb1\x8d\x7fb\xd3\x13`\x1a8\xb0\xb5\x1c\xdb\xc0\x81\xadK\xe3;8\xb0u&\xf7-[h\xc1\x81\xadp`\xeb\xa33!\x1c\xd8\n\x07\xb6\x16\xf1\x07\x1c\xd8\xba\\\xff\x07\x1c\xd8Z\x96\x13\xe1\xc0\xd6&\xc4\xda \xd66'\xa5!\xd6\xf6$bm\xbe\xa3!|\x10\xc4\xd76>\xbe\x16\xb2DV\xdd\x14~fcjg\x96\xf5rLMb\x1b\xa40\x9c\x96(\x17\x0dp\x1d\"i\xf1\xae\xab Z\xecB\xb4\xb2\xc0\xb2\x10\xf1/V\x0e\x98=\x9d\xa8\x04x \xcb\x99\xc8\xe0%\\\x9a\x91\x0c^\xc2\x99\xdc\xb7l\x07\x0dx \xc1K\xf8\xe8L\x08^B\xf0\x12\x82\x97p\x16\xeb\x054\x03/\xe1\xe3q\"x \x9b\xe0%\x04/\xe1\x9c\x94\x06/\xe1\xc2\xbd\x84\x81#\"t\x07\x05\x17\xc0\x07XO\x1f`\xc1\x84gUE\xe1g\xd6\xc3W\xca\xbd\xb7\xae\xbe\xbd\xa4c/\xe3\xd5\x0b\xc8\x88zX\xda\xba\xcc\x8e\xae\x0c1\x1fVv\xf4=\xf5\xcc\xf8`t]9\xba\xb2p/Q)5o5\xcb\x88\xafX\xf9\x11\\\x87\x89\xc9H\xe4\xa4\xaa\x0b\xbe\x85#\xc9N\xb8\xd2\x9a\xa1\xcf\x1a\x90\xe5\x92u\x10 \xcb\x15S\x1a\x90\xe5\xea\x90\xe5\xf6\xaf\x84\xe4\x81\xf3\xb86\x0dif\x19\xa0\x04\xda,F\x9eg\x96\xc5\xee\xf0,\xe8\x19+\x15\x0de\x1d\xb0g\xd4\xf1 \xaa\xac\x7f\xfa>\"\x8e\xfa\x84\xa0\x81\x8bm)\x83\x04S\x8a[\xff$\xa87\x89\xfd|\xac\x15\x9a\x0b\x00\x9c\xfe\x00\xcaBM\xbfx\xbdA\xe6\x83\xf0\x9fO\xa1 n\x12;\xf2B\xfe\xf48q5\xd3P{\x80\xb0\x8dp\xc8t\xba\x04uQ\xdf\xb3\xcdr\xab\x92\x82\x9e-\xde\x0e\xf1\xd9\xbc\x1a[\x10`\x8b\x19lA\x8a\xd8\xa2G$O\x04\xf2&\xcd\x1b\xd8fbH\\U\xf4\xdf\xff\xda;\xf9\x9d\x97f\x14\xb0\x1b\x1e\x86(\xc0nX1\xa5\xc1nX\xb8\xdd\xd0'DI\x96\x106\x86\xc2e\xfb\x97\xaf\xb2\xfe;\xf8F\xc0x\xa8\xa9\xf1P\x95\x0bJX\x0d%-\x88\xe2\xbd^\xe2\xc5\xa2\x11\xad\x95\x0d\xc1SF\x04\x0f\xad\x08lY\x91\xad\xc0\xf5^\xd75\xddQ\x10`\xe3Ba\xe3\xbc\xa0\x0e2\x9d\x9f\xc8\xdcW\xac\xfc\x08\xe1\n\xc8t\x9e'\xc7\x142\x9d\x17\xc5\x7f\x90\xe9\x0c\x99\xce\x8f\xce\x84\x90\xe9\x0c\x99\xce\x90\xe9<\x8b\xf5\x02\x9a-\xdel\x80L\xe7\xb2\x9c\x08\x99\xceM\xf0+\x83_yNJ\x83_y\x85~e\x0e\xee\xe4\xcdu'\xf3\x85z\x91_\xb3q\x89\xc3\x8dc\xa5\xa2a\xac\x83\x0f9\xeax\xdeQ\xc6\xd8\xb2\xf4q\xc6\xcaO\x17\x00\xc7\x01\x1b\x17\x9ed\xbc\xc6Nd}(gW\n\xaf\xf200\xac\xf2\x1c\x9c\xc9\xd3\xc0c\x8cJab\xf2\xdd\x90\x1a\xc38\x7f\xc5\xb7\x01o\x05\xee\x17\xdfm\xf2\xef\x1f\x1e\x13\xbf\x8f\x99\xa0\xf6@\x7fo5\xf4_\x81-k\x12^E\xcc\xf5\xcb\x9a\xc4a\x9c\n\xfd\xa3\x84\x95\x01\x90\xf2a\n\x07 \xe5\x8a)\x0d\x90r\xe1\x90r\xc0\xc6\xa9\x03\x9a\xb7\x7f\xc5D\x17\xa0\xc9\x9a\xa2\xc9\xd9\xf3^\x02<\x16\x03\xc9k\x979\x8cc\xab\x18H\xc6J\xad\x17\x90\x8c:\xae\x81d\xf03\x89%\xc3\xab\xe1\x9a\xba\x01\x1d\x13\x1bq\x81\x85W='\xe1 E\x94\xfd\x91u\xf5HJ\x83\xc7d\xb5\xb5\x80\x80EO\xd7\xb5c\xa1\x94K\xad\xa3\x9e\xa5\x83&hzG\xc8\xdb\xbf?9\x83\xa0#\xe6\xdf\xce\xc7\x97w\xcdS\x0d\xe3\xae?}\xbc\xfexs\xf6\xae{\xf3\xf9\xec\xf3\x97\x9b\xee\x97\x0f7\xd7//\xae^]\xbd\xbc\xd4\x05\xe6\xef\xe9K\xdb\x1b\x05\xdf\x9f\xad\xa6\x97\x0bj\xfe\xf2\xe5\xf5\xc7\x9b\xab\xcf\xdd\xeb\x97\x9f\xae>.\xe5 _?~\xbe\xfa\xf0z\x89\x0f\xb8>\xbb\xb9Y\x0eq>\xbd\xfc\xe3\xe5\xc5\xe7\xe5\xb4\xfd\xea\xec\xea]\xa6\xe5\x87\x99IIy\x90X\xc3\xe9_\xf2\x8d\xf0P\x94\xfax\xcd\xb3N\x1b\xcf-zZ\xc0{\xcfP\xc1\xcd\xc4\xa3\x82\xb0\xa1z\x88\xc3\xf5\x118J@o[4\xff9I&\xcc>*y?|\x1a\x0e\x07\x12\x8c\xcf\xf4\xdc \xb3\xc3\xb7\xe0\x1a\x0eq)3\x0b\x1e\x9e\xe0\xcf\xec\xb3\x13\xb7\xcb=Z\x1b\x9a\xb3\x9f\xac\x197\xfbH}\xbd\xe0Y\xea\x98\xb5\xf0\xa2\x8a\xde\x0d1o8\x98sR\xf4\xc0\x80\x9f\xb3\x8f\x0c\xeeT\x7fh\x8f\x10\x1b\xb9\xe4\xbb2\x07\n\x9e\xad\xf9=\xfbd}\xbd\xfas\xfb\x98Z\xd1\x03\xb7\x15\x0b\x17Y\xe8\x0b\xd1\xd4cVa\xcd\x91*\xbc\x16Zy^\x89\xa3F\x98<\x9eM] V\x89\xf4\x99\x9b+o\x96>O\xfe\xcb\xcfJ\xcfUX\xa1\xd6\xf3\x15\x8e2%\xb0\xd5\xd5`\xd6\x08G}\x97\x8d\x1eg\xe2 \xb9\xb2\\f\x11$W.\x8d\xef \xb9r&\xf7-;\xaf\x0d\x92+!\xb9\xf2\xd1\x99\x10\x92+!\xb9\x12\x92+g\xb1^@\xb3e\x84\xd3!\xb9\xb2\x1c'Bre\x13\"\xe1\x10 \x9f\x93\xd2\x10 _n$L\xf7\x00\x9a\\1\xa5\x01M\xae\x06Mn\xff\x8a\x89\x1bH\xad\xdc$l\x99\x9e\xfa\x12\xe8\xb2\x18i^\xea\x00hqreT(\x1a\xc2: \xcd\xb0\xdf\ni\x06\xbf\x12\x99\x95fpQ\xa5Zpj\x0f\xac\xb8\x92\x06\x98 0s\x83af\x01\xab?\xa1\x14b\xc8\x9b(\xc5\x9c\x907\xb1\xb4\xb0!\xe4M\xcc\xe4\xbee\x8bF\xc8\x9b\x80\xbc\x89GgB\xc8\x9b\x80\xbc \xc8\x9b\x98\xc5z\x01\xcd\x96`\xdf@\xdeDIN\x84\xbc\x89&x\xba\xc1\xd3='\xa5\xc1\xd3\xfd\x18\x9e\xee\xed\xc0Y\x07.\xef\x8duy\xc7x \xabP\n?\xa7\xfa\xbe\xcb\xb8\xbe\xd7\xd4\xf3\x9dp|\x87~o\xdf\xcb\x1d\xac}\xa2v\x9f\xb9#\x8d\x0bu\xae\x85\x13&Z\xb4\x82Rg\xa6\xb9\xc6'\xa6\x81\xdf{\xbd\xed\xeae\xf8\xbd\x97i\x87<`\x0df\xady\xedAL\xb0\xd4\x15\x9c`\x82<\x0c\x99\x80 \xb2bJ\x83 \xf2\xa8&\xc8\xf6\xafP\x1cA\x06\x0e\x98#)~(a\x8e\x14\x9b&\x9f\xb1eM>)O\\\xa1y\x92(\x17\x8dn\x1dL\x94x\xd7\x95\x99\x12\xbb\x10\x9a*\xca\xb5-\xaf\xa7\xb6B\x193Q\xc3Mt\xc1J\x01+\x05p\xe9BU\x14\xe0\xd2\x15S\x1ap\xe9\xa3\xe0R\xa5$\x01\x88n.\x10\xf5\x19\xa0\x04\xda,F\x9e_\x99\x98q\xf0\xaf_\"\x1a\xc2:\xa0M\xddi\x853\xd5\xd7\x10a\x8e\xd5/\x85.\xf5\x96\xba\x90\xfc\x0d\xf0rV\xe5\x8d\x80\x97\x90\xfc]#\xe6\x84\xe4\xef\xa5\xe5>B\xf2\xf7L\xee[\xb6h\x84\xe4oH\xfe~t&\x84\xe4oH\xfe\x86\xe4\xefY\xac\x17\xd0l \xf6\x0d$\x7f\x97\xe4DH\xfen\x82\x87\x1b<\xdcsR\x1a<\xdc\x8f\xe2\xe1V\x8e:\xf0po\xae\x87\xdbg\x80\xac*)\xfc\xcc\xf7p\xcftp\xaf\xa3\x7f;ro'\xbc\xdbfN\x867\xb3\x13I\xde\xea\xe8\x12H\xf1\x0e\xcb\x83w{\xe5\xd6\xf32\xbc\xdb\xcb\xb46\xe68\x0e\xa9\xd6<\xf6\xa0\xc9\xcf\x1e\xa6\xf4\xe0\xb3\x94\xc0\xacx\x18\xe0\x00\xb3b\xc5\x94\x06\xb3\xe2\xf1\xcc\x8a\xed_J\x02A&\xf7\xa6\x9b\x17\x11#\x940-\x8a\xcd\x8c3\xdb\xf6\xb0u\xed\xb21\x95LQ\x9cS\x93-\x1c\x0dp\x1d\xcc\x8fL\xff\x95)\x92\xbe\x8a\x0c\xcfu\x89-\xd0\x88\xda\x82\xda\x03\x84U\x01\xa9\xd7\x83\x12*\xb2\x91o\x85\x80\xd6\x9e\xfd\x1e\x83\xd6^1\xa5Ak/\\kK\xe1\x10Jk-!\xba\x91\x84\x00\x15]O\x15=k\xd6K\xe8\xe0b}|e\xf7-\xf5\xadP\x11\xc7J\xad\x97\x06\x8e:\xaeTo\xf8\xd3\x0f\xe0i\xab:\xad\x7fiX\n\xf4\xee\x83^N\xd0\xbb+\xa64\xe8\xdd\xe5\xea\xddP2\x80\xbe\xdd\x00}\x1b\x9b\xed\x12\xba\xb5X\xcf^\xa8\xf6\xdfS[\xa8pP\xb1\xdd\x9b-\xbc^Z7\xd3\x7f}\xa6\x95\xfa\x9e\xd0\xbc:\xcbJ\xa5\x8b\xf6C\xf5\xeb\x84\xf12\xd0\xbc\xf3\xbe\xa6\xa0yWLi\xd0\xbc\xcb\xd5\xbcJ(\x80\x99\xbb j7\x98\xea\x12z\xb6X\xe7\x96\xd0\xb4\xeb\xa9_s\xb4jxz\x0f\xe2\x0e1h\x9f\x1a\x91\x1e\xd5\xeb8G\xcc\xf4,\xd2\xf2\xd7sR\xc1\x11\xf7z\xdc\xc1\x06A\xd8\xfe\xdf\xec\xbd\xfd\x96\x1b7\x92'\xfa\xbf\x9f\x02\xcb{\xeeH\xea\xa6X\x96\xdc\x9e\xdd\xa9\xb6|V*I\xee\xea\x96\xad\x1a}\xb4\xa7\xa7\xd3\x87\x023A\x12]\x99@*\x81\xac*Z\xabs\xeek\xdc\xd7\xbbOr\x0f\"\x80\xfc \x93\x9f\xf5\xc1*)\xf6\xcc\xbaKL$2\x10\x08\x04\"~\x11\x08$\xdf\x9c\x8a\xd9\xd6i.\xb7\xe7\xc0[\x18\xca\xa6\xa9\x07\xa1\xfd\x17\x9d?P\xcdo3\x85\x00\xc5\x80Y\x0d\"3\xc3\x0c\x82JR\xc6\xba\xd8 \x8b\xe0:3H\xb68\xafx\x07\x0e)^j\xfeN\xc5\xac5u\xee\xdf!\xdd\xa7\x9a1\x9f\x80\x1e\xe6z\x83\xd9\xa3\x1c\x90\xcb\xed\xc5d[\xdf0\xa7\xc9\xb6\xber\xdb\x1am,\xb2\xae\xbf\n\xebz\xc9do`S\xaf\xb6\xaf\xdf\xa6\xdcL\xa5\x9al`g\xcf7\xad\x07p\x17\xec\xed9\xea\xbb\xec\xee\xd6\xa6\x0c\x95S\x8c\x7f\xc9[\\\x04e\xed\xb88i\xbb\xbdaN\xd3v{\xe5\xdbm\xd0\x05\xb4\xe1~\x15\x1b\xee\xd2\xe9\xde`\x9b]\xb3\xe5\xca\x89\x92jr\xac\xc6z\xcd\x86\xdbjx\xc7\xb6\xdb&\xed\xb0\xd96\x7fi\\\xd8\x01?\xc29.\x80\xb8\xd2\x94\x9d\xf1T&\xdc\xea\xc2\xdc],\x8b\x8a7mv\xf6\x8a\x8a7][\xed\x12*\xde\xb4V\xfa\xae\xfb\xe4\x1f\x15o\xa2\xe2M{\x17B*\xdeD\xc5\x9b\xa8x\xd3:\xd1\x0b<\xbb\xfa`\x18\x15o\xdaT\x12\xa9xS\x8f ?\x82\xfcv\xe44A~\xd7\x0f\xf9y\xb8b(\xd5X\x13\xf2\xf7\xc3W\x82\xfc\xcd\xcd\xfa\xe2\xa6\xb1\xf2\xbf+\x01\xc0M\xf1\xbf;\x0c\xff-\xa0\x7f\xadx\xdb<\x00\x88\x99m\xb1V&\xd4H\xd9\x16\x04\xbc\x9a\xbaM\xd7g\x0f\xba\xb1\x0d\xfd\xd86\xb5\x04\x9b\xef\xcc\xcd \x15\xdbi\xba25\x9b\x82\xc7\x1b\xfeY%\xcb\xcdI\x1cY\x82\xd7\xbd]\x90%x\xc3\x9c&K\xf0\x86-\xc1\x83OM\xcdC\xb5v\xbeJ\xc3pA\x086\xb0\x0dW\xdb\x89\xcfE*&\xdc\xea\xc2\xff\xb1\xb6\xd6N\xf7\x0bw\xcbr\xec\x1c\x03\x98\x90]O\xea3\x13\x80E\xd7\xbf7\xae\xbdJ\xc2{\xc1\x16\xd8\xfa\x8c\xc4m7)\xab\x11\x82\xf4mjT\xb6\xdf\"\xb3r\xc5\xf5\xfcMF\xcd\xdd\xd1?'[\xb5\x9d\xb9\xd91\x0c\xba\xa6\x8a2\x1d\xae@D)\xd3a\x97\x183e:\\\x95\xfcQ\xa6\x03e:\xec]\x08)\xd3\x812\x1d(\xd3a\x9d\xe8\x05\x9e]\xbd\x1bB\x99\x0e\x9bJ\"e:\xf4\x08\xdf&|{GN\x13\xbe}\xf5\xf8\xb6\xe5\xa7Md\xb3\x01\xa5\x1d|j\xe3\x1f\x04o\xff\xf0\x85\xc2\xdb[\xc9\xc0\xe2\x86\xb2\xf2\xbf\x8b\xe8\xf6\x1b\x91l\x08k\xcf\xb5\xacGu\x17\xf0\xec6\xf1\x00d\xb7~\xaa\x10\xecB\xcc\xe1\xd7\x88^\x13fM\x98\xf5\xd6*\x820\xeb\xd5\x95\xa6\x8axX\x9d2\xdcJ\xfe\x16\xdf\xfc\xa2\xa5hq\xb8-I\xaa\x1e5%\xa9\xd2c\x82\x8d\x0b\x9dm OW2\xa7\x89\xb1;\xce\xe9\xe2\x9b_\xf4\x9c.\x0ew\xab9\xb5\xfa\xa6f\x94\"K\x9b\xc1\xaa\x14Y\xba6\xb9\xa3\xc8\xd2Z\xe9\xbbnP\x9f\"K\x14Y\xda\xbb\x10Rd\x89\"K\x14YZ'z\x81gW\x0f\x16PdiSI\xa4\xc8R\x8f\"K\x14Y\xda\x91\xd3\x14Y\xba\xa9\xc8\x92.\x16\x83\n\x07-\x08\x9c\xc2L_U\x98i\x13\x81X\xdcjV\xfew1\xe6T\x1d!x\xafF\x1av\xba\xad\x8fVt\xbfY\xb3\xe0.\xc4\xa4V\x0f\xa6}\xd8\xa2\xabI\xeb\xd4E\x19\x1a,9\x7f\xf1\x0d\x9d\xbf\xa0X\xd6\xa5lZ\x8aem\xe6\x1a\x11JN(\xf9f\x9e\xfa\xd5\xca\x1d\xa1\xe4k\xa5\xef\xba\x01JB\xc9 %\xdf\xbb\x10\x12JN(9\xa1\xe4\xebD/\xf0\xec\xea\xdd\x10B\xc97\x95DB\xc9{\x84\x92\x13J\xbe#\xa7 %\xdf+J^\x01nCB\xcb -_/\x18\x8b[\xcf\xca\xff.\xa2\xe6o\x91\x86\n\x12\xfe{uA\xcb\xea\xf2\x95+^\xab\x99p\x17\xf0\xf2\x15#i\x83\xe5\xf5\x83\x16D^\xdfh\x83U\x07\x9d9:W\x9b\xe8\x1b\xc2\xc6 \x1b\xdfZ\xeb\x106\xbe\xa9CD\xd88a\xe3\x9b\xf9\xe7W+w\x84\x8d\xaf\x95\xbe\xeb\x86% \x1b'l|\xefBH\xd88a\xe3\x84\x8d\xaf\x13\xbd\xc0\xb3\xabwC\x08\x1b\xdfT\x12 \x1b\xef\x116N\xd8\xf8\x8e\x9c&l|\xaf\xd8x\xe3\xeeh\x02\xc4\xbfz@\xbc)\x0d\x8b\x9b\xcc\xca\xff.\xa2\xe0\x8b \xeff \xe3\x8d\xe6\xf5H\xef\x02\xea\xdd1\x82%hw\x05v\xd7\xc5#\x96\xe1\xdcu\x93or.\x8b=\xc1\xddW`P\x12\xae\xbd\xce-\xbf\x94\x15z\x9d\xb8\xf6u\xfa\x19\xbb\x95\xa0\x99+?Cb\xb1L,\xb6-\\\xb3\x8dX\x90\xafq9\xc3\x83|\x8d\x1b\xe64\xf9\x1a\xb7\xc4\xd78\xf8\xd4\xd6KT\"\x95\x9c\x8f\xd5\xe2\xb1\x81\x07\xb2\xda\x1b\xf9\x8b4V\x172\xe6\xe9\xdakd\xe7\x9b\xd6C\xbe\x0b^\xc8\x1c\xf5\xe0\x81\xb4\x7fk\xdd';\xad\x1e\xcd\xbb S\xe1\x96\xd8\x9e\x1c\x8e\xeb38qX\x9b\x1a\x9a\xd8\xfa\xcb60\xb7|\xb93\x1cx\xcd\xd1@\x9c\x86\xca|\xe5\x96\x9dOe<\xf52Z\x1b\xae\x1d\x12M\x86\xec\xb5obd\xc8\xde0\xa7\xc9\x90\xbdvC\xb6\xd6\"p[\xe9\xc1'T5d\xa9~%\x96\xea\xf2\xf9\xdf\xc0\xfc\\m\x8a\xfa\xech\xb0\x8d6\xca\x08\x0f-\xeb\x11\xdd\x05C\xb4M<\xd8\xa1\xb59\xd8\xb2A=\xefY^=\xee\xb6:i/^\xbfLi/\xbeaN\xd3^|\xed{1\xe8\x05\nP\x7f%;o\x98\xed\x0d\xf6\xd6\xcd\xf6Y\xad\xd3\x8dvYhw7\xf7XG:\xee\xb0Z\xa7\xad\xbd5w?\xa0\x1fL[\xean\xeb\x8f\xb6\xd4\x1b\xe64m\xa9\xd7\xbf\xa5j\x9d\xd2\x86\xfa\x95l\xa80\xd7\x1bl\xa1\xab\xb7\xd3\x0dO1\xdf\xddS\xcb\xf3\xa7\x94\xd7\x1fN\x86\xc3\x05\x19\xb7\xf1\x14\xf6Z\x8c\x9b\x18\xcbm\xb9\xfd\xb9\xe4\xdbs\n\x14\x07\xb0i\x84\x04[\xdf\xf6\x18\x07\x08\xf5\xae\xd1\x07\x1c\"\x13\xcaMB;M\xa6)\x0d \x08RMB!\xd7J\x12\xd6\x06 \xaed\xda\xe8\xf0\xeef\xa1*:\xbc{mrG\x87w\xd7J\xdfu\x9f\x9b\xa4\xc3\xbbtxw\xefBH\x87w\xe9\xf0.\x1d\xde]'z\x81gW\x9f\xe3D\x87w7\x95D:\xbc\xdb#\xa0\x96\x80\xda\x1d9M@\xed\xb5\x03\xb5t@\xf7k\x83k\xaf\xf4\x10\xeefgo\xef\xec\x91\xdb\xb9\x93\xb6[\x1c\xb0]8\xfd\xb65`{\xdb\x13\xdd\xe9d\xe5:W\xfaR\x96#\x9d\xac\xbc\xbd;\x06\x19\x827\xcci2\x04o\xd0\x10\xa4\xd3\x93_\xbdex\x1d'$+\xe3i\xd3+>\xbb_\xb8\xa3\x06\xe4\xc2\x85\x9e]O*\xb3\xd2\x9f]\x15K\xadJ\xb2&\xc9\x9a\xdc\\\x81\xec\xcf\x9a\xbc\x13 )\x94\xd9\xb0YX\x8f2\x1b\xae-\xb0G\x99\x0dk\xa5\xef\xba\x83\xca\x94\xd9@\x99\x0d{\x17B\xcal\xa0\xcc\x06\xcalX'z\x81gW\xef\x86Pf\xc3\xa6\x92H\x99\x0d=\x02\xb4 \xd0\xde\x91\xd3\x04h\xef\x13\xd0>\xa0\x8b: \xdc^&\x0e\x8b\xdb\xcc\xca\xff.\x02\xdd5\xa0\xbbIArhV\x0f\xed.\x80\xda\x0d\xca\x9b\x05\xc8\x9dY\xb81\x80\xdd\xa8\x1a}\xb7\xeb\x8e\x13p\xbd\xce\xef\xbe\x94\x99y\x9d\xc0\xf5u:\x12T\x8e\xfeZ\xc5\xe2:\xcb\xd1\x933q9\xc3\x82\x9c\x89\x1b\xe649\x13\xb7\xc5\x99X\xa8:M\xde\x05y\x17\xab\xe5c\x03\x17c\xb5\xbb\xf1^\x8d4`i\x1b\xfa\x1d\x9d\xed\xeb\xd1\xdf\x05\x07\xa4k\x08\xe0\x89t<\xa8\\\x922<\xdb\xc0'\xb9\xe3w!\x91Or\xad\xc6'\xf9$$\x16\xe4\x93\xdc)s\x84|\x92\x1b\xe64\xf9$\xb7\xd6'9\xa8,\xa1a\xdd\x8c\x1c\x15rTv\x10\x9a\x0d<\x96\xd5\xdeK\x95\x06\xdfa\xbaox<\xa0\xfb\xcd\x9aMw\xc1\xa3Y=\x98\xf6\x81\x81\xae&\x1d^Nc6\x99\x1ec\xc2\x17\x1d\x1e \x7fg[\xcdt\xbd\xfe\x0e\x1d\x1e\xa0\xc3\x03W \xa2tx`\x97\xb4m:\xe2|\xd3\xbb\xb5\xed\xceQ\x0f;o\xfb\xb7\xd6\xe6\x9bJ\x03\xc1\xbf\x0c\x9a\x84\xe5a\xd8\xb8\xd0\x19\xdcK\xdb\x85\xbf4\x07\xfd\xd3\xe9\xc7\x9f~gB\x9f\xfe\xf7\xdf\xfe\xba\xb14%\xd9\xef\x1f\x8bcP\x82\x9b\x06{\xd0\x02\xb8\xfeL\xb2\xd0\xe6\xeaq\x1fd\xf1p\x1b\xf8\xa7\xf1\xca\x17\x8d\xe34\xc6\x89\xa97\xc0\xb9\x1a\xb9\xe1\xcc\xe4\"\x96c\x19{A\xfd&v\x9b\xa42\xa5 \"\xdb\x94X\xf6J\xf03L\x05\x93\xc6g?\x9c\xcb4\xfdf,\xc2\x15\xdc\xe32M7\x12~\xc2\x8b\xaey_#\x83\xf5\x869M\x06\xeb\xb5\x1b\xac^\x9f\x05\x85B6\xeb\xd7a\xb3.L\xfb\x06\xa6\xeaj\xb3\xf5=~!9\n\xdb\xdd[\xb7+\xad.\x0b\xb0\xe4\x95zhw\xc1\x8c]2\n,\x0e\xd0\xf9\xac\x8d)U\xe6\x01l\xe3\x98 \x07\xd9\x8fF\x14g\xe2\x1b\xee\x8c\x0c[\x94\xc6)\xb2SQ(\x91Bn[\x95;\x1e\xac\n\x08(I\xc3\xe2)\x97\n\xb2\xd6\xa0\x17\xc8p\x1b\x89o\x8c\x85\xf45\x9ff\x076\xe3T\xb8\xb5;\xf7\xe27Kh~sr\xc4\x94\xb6\xcc\x94y\xae\x0bH\x96\x93v\xcaR1\xe1\xf1\xcc\x8f\xa8\xf8\xe6\x9d\xeb\xa8\xc8cg\x1b%\"/D\xcc]S\xa5\xcfq`\xc7\xcf\x8e\xd8\x94\x1b\x08\x99\xeas\xc5\n\x91\xa7<\x16\x99P\xf6\x9b\xfbN\x1d\x98\xc3\x83\x83\x89\xb4\xd3r4\x88u\x16\xc4W\x8e\xe2\x87\x13}0J\xf5\xe8\xe0q\xfc\xbf\xfe\xd7\xb7\xfc\xf1c\xf1\x1f\xe3\xff\x88\xe3\xff\xf9\xfd\xf8\xdf\x1f\x8f\xbe\x7f\xfc?c\xfe\x1f\x7f\xe2\xfc\x7f~\x1f\x8bG\x8f\xbe\xfd\xf7o\xbf}t\x90\x17\xdaj\xf7\xeaA\xac\x0bq\x10\xa7R({p\xf6\xe8\x00,\xb5\x01<\xfe\xbf^}\xff\xa7\x07_Z\xd8\xd6\xf58\xc4\xc9\xdd\xd4|o\xbc2\xb7l\xbe\xb0 \xee\x96/w&U_wN\xf5\xfc\xda\xac\x81gX\xa2,+\x8d\xc5,he\x99T0\x05\xc2X\xa7*`!\xfb0\xb3\xef\xc2\x89V\xc1\xce\xa72\x9e\xa2\xc2\x98\xd78\xd2\xfd\xe1\x94\x03y\x10\xd7me\x90\x07q\xc3\x9c&\x0f\xe2\xda=\x08\xff\xefdX\xe9\x95!\xe8\x95\x83O\x8dM\x85\x82\xd0_\x89c\xb1\xa94l\xe0ct\xf9\x1b\x96O\x0e\xde\x8a\xe2L\xc6]\xaeE\xebi=\x0e\xefE$\xf1\xe9\xdb\x93E\xc6z/\x02|\x87\xf5N\xc3\xa3&\x7f\xca\x7f\xcd\xde',\xc9\x92\xa3__o\xe454 \x04\x07\xc1\xff\xe3\x87\x83\xe9\xa3\xcd\xdc\xac\x9f\x84}\xc5\xad0\xf6Y\xaa\xe3\xd3\x95\xee\xd5|\xd3\x05\x86\xdcj\xb7j\x8ez\xe0V\xfb7\x7fL\xc3G\x07\xe0w6r\x0f($\xbf\xab\xb2\"\xfb\xe4\x869M\xf6\xc9\x95\xdb'#n\xc4\x81\x15\xce\xeb\xc9$8\xfc\xb83\x81j0\x07\xa8(\xc8\x1c\xf92\xcd\x91\x0d'\x7f\x03\x8bc\xed6\x0c{\xd0\xb3\xd9_\x10gY\xb3\x11\xcf5\xbes[q\x9b\xfe\xb0\x19\xb7~\xadPM\xe0u\xa3\xd8)\xda|_\xdc\xe1\x88\xed\x006\xc2\xd6n\x01\xb6\xd6\xb1\xbe \xda\xba\xa2\x8d\x85L\xc7\x1b\xe64\x99\x8e7m:~\",\xebk6\x1e?]\x16\xbcjYT\xbf\xe8D\x1c\xab\xb1^g9\xd6\xed\xea\xc1\xdc\x11\xa3\xb1\"=\xd8\x8b\xe1\x87\xceC\x15J'xw\x17\xc17\xbb\xaeO\xda\x83o\x98\xd3\xb4\x07\xdf\xd8\x1e\xec\xd4\xc3\xd0\xa9\x07\xda}\xbf\xae\xdd\xb71\xf1\x1b\xec\xb5k\xf7\xdd\xb73\x15K5Y\xb7\xedV\xcd\xee\xdc\xae\x1b(\x0f\x9b\xae\xffw\xb5\xe7\xc2>k\xf0G\xdajw]\x8c\xb4\xd5\xde0\xa7i\xab\xbd\xb1\xad\xd6+\x07\xdah\xbf\xae\x8d\xb6\x9a\xf6\x0d\xb6\xd6\xb5\xdb,\xc6\xe9\xab\x0b\x04\xde\x8a\xb5!\x92\xae7\xee\xdc\xe6\xdb1\x88v\xe6B\xf3Q\xb5%\xfb\xe4\x85\xaa\xb8\xd7C(,\xbae\xbc\xe4\x8aN\x15^Ad\x84\xea\xd3o\x16\xeb\xa0\xfa\xf4\xd7V\x9e\x99\xea\xd3\xaf\x95\xbe\xeb.\x0dN\xf5\xe9\xa9>\xfd\xde\x85\x90\xea\xd3S}z\xaaO\xbfN\xf4\x02\xcf\xae>I\x86\xea\xd3o*\x89T\x9f\xbeG\xe8 \xa1\x83;r\x9a\xd0\xc1\x1bC\x07\xebr\xe4\xc2R:\xf5\xd7 \x15v\xcb\xc0\xe2\x86\xb2\xf2\xbf\x9d\xb8a\x13\x1f\xdb4\xb9\xba\xfb\x9dz\xa4w\x04;\xec\x1cF@\x0f\xbb\x1eV\xf8a\x0b8d\xdc2N\xa9\xd7\x94z\xbd\xad/~\xad\xae\xf8\xae\xd6&\x01\xde_\x90\x84\x11\xe0}mx\x0f\x01\xdek\xa5\xef\xba\xb1F\x02\xbc \xf0\xde\xbb\x10\x12\xe0M\x807\x01\xde\xebD/\xf0\xec\xea]\x13\x02\xbc7\x95D\x02\xbc{\x04x\x13\xe0\xbd#\xa7 \xf0\xde\x13\xe0M\x87@ \xf2\xbe\xd2\xb3\xa0oeV\xa6\xebJ%\xd7\x8d\xea\xd1\xdc\x05X\xbb\xa2\x1b\xab\x9d\xf9\x7f1\xe3\xff0L\\\x88\xb8\xb4n#\xe7\xcc\x16\\\x19\x0e\xc3\x07kQ\x18+3\x0e\x0f'\xdc\x19\x7f\xce3\x99\xc3\xb2W\x01\x84o\xb0.*{\xa6\x13'IS\x91\xf1C6\xaf\x0c\xfe\x15\x9f\xeb\xf1\x88%\xf2\xef\xaf_<\xed\xfd\x08\x97\xa8\xc5H\xfc\xbf\x8c\xaeM\x9d\xe9\xf7\x9b\x8ahue\x08\xce\xf8\x95\x01\x91\xeeC\xa7\xef\xde\x9c\xbei\xdb\xa1\xec/\xe9\x99-\xba\xadQ{\xb1\xa9\xf5\x19\xb40,\xe8\x94\x8fD\xfa\xa4'.r\xae\x12\x96\x17n>\xad\x14\xa6\xf7\xa3\xbd\xe8Tx\xc9\xaf\xff5\xfd\xef\x9f\xbe\x08\xadv\xebln=\xfa\x97\x88\x97me\xf5\xcb\xc9\xd9\x7f\xfd\xd7\x7f\xcf\xc2\xcbo\xb3cs\xd2\xfb\x91\xdd\x0f\xcb\x05\xb5\xdb\xc0^\x0c\xbcB\x1b\xbc\xbb\x08\xcf\x1e\\\x0d\xf4\xf0\xee\"\xe0\x0e\xc6r\x95\xf0\"\x81]\x1b\x01/\xb7\x9eG\x85\xe6I\xcc\x0d\xac\xe8\xc6b7{\xf6\xd9\xec\xc5p4\xb3N\xbc7[+\xa1\xfd\xed\x93\x95\xab\xc7\xab\xae\x17\xb2\x0f\x9c\x0c\x82S\xf0\xf3\xa6`\\\xb9[G\x0e\xdd\xa6\xfa\x90\x1c\xba\x1b\xe6\xf4\xd7\xe9\xd0\xe5\xdatyt\x93\xd9\xaf\xaf^\xcb\x86G\x07\xed~t\xff\xdd\xce\xa7\xb3\x17\xf5\xf16os\x92\xe3\xf6e:n\x9dS\xbd\xce\x17\x9b\xdb\x0dN_|\xfcG\xfa\x8a\x89\xa3\xe3\x8b\xd9\xbfz?\xb2\xe0A\x18\x9e\xe5\xa90\xac\xda\x15\x1a\xef\xc4\xbc\xf8\xe9\xe9S\x16\x0b}\xf41\xf5N\x9c\xe5#SMf\x99\x86\xd6\x85\xe0\xb1\x85\x87\xc3\xa1\xe5\xa3\x87\xa9t\xd2\x8f#w;\x94\xfb\xe7\x8f?\xa4rI{6\xff\xfeC#RX\xf5\x8dNz\xe0^\xd6-\x1f\x06\x11\x0bm\xc3t\xc3\x8f\x894ngt&\x11OM\xf85\xd6\xca\x16:mQ\xf0\xf0Q\xaf5a?\x9e\xf0Y\xaay\xf2\xc3A*\x7f\xfc\xe1\xa0L[|\x99\xa74\xe7J\xa4\x0b\xf4\xc3\xaf\x9d\xa3\x80'\x0bCy\xd4k\xf8'\xa9HF\xb3\xb9\x91\xfe\xd8e\x87L\xa7\xc7\xd3\x17/\xd9\xe8\xe3\xdb\xa7g\xef\x16m<-\xc6\xc7\xef\xd9h\xf4\xb7\x97\x93\x7f\xf4~<\xd2\xcaB\xc8u\x96W\x9a\xa2\xdd\x9d\xf8\xab\xe6\x7f\xff\xddy\xa4\xb37o\xbb\x1c\xc6\xa5Zu\xf2\xd3\xab\xd9\xeb\x98\x8d\xa7\xef\xe5\xd9\xdf\x17\x17\xce/\xf2?\xc5\x0b6=\x7f)\xce\xff\xb1\xf0T\x8c\xff\xf2_\xaf\x14;\x95\xbf\xffU\xebJ\xc7\xce\xb7:\x9d\x1eO\xfe\xeb\xefL\xfc\xe7\xf9\xd3\xff.\xdd`\xf2Y\xa0'\xbc\xe0\xff\x97\xbd@\xe7\x8e\xa7)[|x\xa4\xd3\x94\xe7F\xcc=\xee\x1a\x94_\xef~\x95;\xe51\x1e\x1f\xcf\xfe\xc6F/\xd3\xa3\x8f\xa27'\x15\x89\x8e\x1f:.\xf5~\xfc!\xd6\x89h=\x8d\xfdG\x8bJI4g\xca\xeaS\xa1X^\xaa\xd8\x96\xc0\xed\xde\x8f\x9f\xba\xf6\x02\x91\xa627\xb2aC\xd7\xebO\x8f\xfe\xc5\xfcW\xe4(\x15\xb0\xd6Z$L\xf5\x99(\xc0_\x9f\x93\x13\xef\x03\xcf\x18\x92\x81vv\xefG\xe7`\xfb\xcf\x1c\xb2[;\x96@L\xb2\xe1\xa0\x9c\xcd\xfc\x05\x0e+\x13\xc6\xf0\x890W4\xb4\x7fn;4^\x14|\xb6\xcb\xe0.C\xe5m\x9a\x00\xa7S\x87e\x916&`\x91\xfa\xd0\xfa\xdf>\x96\xda\xfe\x19\xff\x85\x7fw\x8d\xa4c\xc4\xfd\x96g\x8a\xdb\xd3\x95\x0d\x01r\x1e.I\x7f\x83.\xd86\xd7\x8c\xe7\xf3\x8e\xef\xfdv\x1b\xf8\x95\x89L_\x92]\xfb$\xdf\xcaL\xe8\xb2\xbaL\xed\xee\x0eD\\X\xa1\x9c\xdf2\xd49@n\xa4\x04I \xee:\x04R\x82\xdb\xf1Ki5\x8c\x0bie\xcc\xd3!\xad\xc4\xad\xa8\xa4\x95\xf8\xa5\xad\xc4-\xdf\xfb|\x1b\xf8\xccK;\x85\x1a\x94W\xb4Xo\xd320r\xa2D\x01\xa3#]\xb4\xafI\xc8\xcbQ*\xe3\xe1\xa9\xf8\x12\x1doR\xb4wV\xf1e\xa1\xf8\xee\x17(\x96F\xaaI*\xbe\xc0\x81\xb9I\xdbBV\xdf\x1e\xff\xf4\xcb\xf0\xe7\xd7\xcf_\x0c\xdf\xff\xf2\xf6\xe4\xc5\xd1\xf1\xcb\xe3\x17\xcf\xbf\x00\xd1-S+\xbf\xc0\xd9\x1dI\x0b\xdb\xe5\x1784qa\x0b>\x1cIk\x86x#\xf9J)\xc6\xa3&\xbd\x1f\xbf\xbd\x0d\xd2&R\x91\x99-\x16\xdd\x17\xb7A\xdc=\xdbq\xdd\xc2`{suv}o\x9f\x82`\xc4\xc7R\xa8x\x9b\x8d\xe7*\xd7\xc0\x96\xef\xdd\n\\h,\xbeD\xeb\x83g\xbaT\xf6\x8a\x06vs\xda\xe02T\xde&\xf6'B\xe9\xec\x92\x8bp\x9f\x8bbA|v\x19\xc0\x96\xda\xe0Nk\x91 7COA\x0f\xe91\xebZ\xbb\x1b\x1c\xdb\xc1EdZ\xebg\xd7\xf388\xd8p\x1a'\x95\x06\xab{4\xceeB\x0b\xc8\x8e\xdd\xe8\xd0\xd6\x15L\x17\x15W\xbb\x0d'\xb5\xa8\xb8\xda.e\xad\xa8\xb8\xdaU\xc9\x1f\x15W\xa3\xe2j{\x17B*\xaeF\xc5\xd5\xa8\xb8\xda\xcd\x8a\x1eUQ[)r\xb7\xaa\x8a\xdau\x16i\x00\n\x87\xa3\x8d\x1d\x80\xd0\xfe\xf6M\x7f{\xdf;X\xf7u|\xbb\xb1\xe3=\xc7}\xe2p~o[(mS\x13\"\xfe\xf6\x8f7\xf9$\x10\x92\xfc#\x7f\xfd\xe2<\x800\xaf\xdf<\x7f\xf1f\xf8\xec\x1f\xeb\xb2?\xb6!\xf1\x85*\xb3\xf0\xf7\xe15\x93w\xd9~\x9f\xbe=\xba\xd2\xfe\x9e\xbfX\xe8\xf0\x12+\xbcL\x7f\xfc\xe6\x87T\xfe\xd8\xc5\x86C\xd6\xf5+s\xea]\x8e\xa50\xcc\x19\xb6\xeaT\xe9s\xc5\x8c.l\xbd\xd0\xd9k\xf7?\xcff\xc1\xe6\x00\xab\xe5\xe9\xdb#\xd4\x0c\xd2\xb0\x98C\xed\x80T\xce}\xfd\xe9\xdb\xa3\xc6W\xdd\x1b\xb8\xc4\x0d\xe3m]\xd2\xf1\xaecL\xe3e\xf7\xcf\xea\xedyU\xe4_?\x80\xe1\xafR9T\xb8\xf1rE\x01\xa8\xce\xc7\x0ds\xfa\xeb\xac\xf3q\xad\x85\x1b\x1b\x95\x1f\xecE\x05\x84R}\x8f/\xb6\xbe\x07\xcc\xf2\xe2\xa6\xb0\xf2\xbf\x8ba\x9dg\xa1\x1c\xd9\xbb\x8b\x95a\x9dV\xbb\x9a\xe6\xbb\x10\xd6i\x92\x0ea\x9d\xc6\x0fu9\xb6v\xc9\xad\xaf\xb6\xbe\xe2\x06N\x08U\x8a\xdbW\xfca\xb3Jq\xfbrN!\xe3~C\x99pmo\xbb\x15\x85\x80!\xc4)\xc4\xa8\xce\xb9\xb4\xc6}\xfb\x1b\x00\x83/<\xa0\x17\xeb,\x93\xd6\"\xa2\xc7\xd9(\xd5\xf1\xe9`)AnF\x16\xe8q?^\x82\x1c\xce\x8e\xa6\">}w\x11\n9kU\xf9$\x007/'\xe7i'=Ow\"\x08\x91M\xf3\x8d\xcc2\x91HnE\xfd\xe1\xed!\x04xL\xe0\xc1\x06\x1e\x07\x81\x077\xcc\xe9\xaf\x13<\xb8\xc1\"\xa1\x84\x1f\x10~ ;\x01\xe4/\xb14\xe8\xe3+*\x0d\xfa\xdd\xfeK\x83~\xb7\xba4\xe8c*\x0dJ\xa5A\xaf\xe8D\xd6\xcd\xe6\xc3\xaf\x19\xe8ud\xf2oY?`C7\xb8I\xe1\xad\xca\xec_\x9f\xd3\x7f\xd7`_$\xba\xce\xe3\xaf2\xf8\xd1\x9f\x9a\xb1)7\xd3\xad3\xf8o\xfd\xad\xf0\xdcL7\x05\xe1\\\xdb\xb9\xc9\xf8\xc2n\x84\x07\"w\x05[\x1c{\xaa<\xc7\x0b\x10\x17f5\x83T\xee>\x13\xca\xad\xc8\x84q'PSq\xe1\xf5\xc1\x06\x18,E\xeb/g\xa2\x93\xc3}\xc3\x9c\xfe:\x1d\xee\x1b\x8c\xd6\x1f|r\xca\x85nS\xfc\xe1kp\xba\xab\xc9\xde\xc0X[\xb7\x18D\x9a\x8e\xb3\x92\xfd+\xf9\x97\xfa\xdbY\xaf\xa3\xfd7\x8c1\xf6\x83\x89\x0b\x99[\xfcG\xac\x95\xb1l8\x04_ch,\xb7\x82=a\x9fz\x99Pe\xef\xf0S\x8f\xc7V\x9e\x89c+\xb2\xe3\xe4\xa2w\xf8\xf0\xd1\xe7~\xcf\xe4\"v\xcf\x9c\x89\xe8\xfeW\xe7B\xf1\\\xf6\x0e{\xdf\x0d\xbe\x1d|\xdb\xeb\xf7\xa0:\xda\xe1\xa7\x1eX!\xbd\xc3\xde\xdbY\x96O\xb5\x9a\xb1\x87l\xf2\xe6\xe4\x88\xfd\xc4\xad8\xe73\x96\xe8\xd8\xf4\xfa\xbdD I\xce\xc6=\xec=eo^\xbc}\xc7\xa4\xb2\xa2\x18\xf3\x18\xe3\x0bH\x99\xdbl\xa50}\x96\x8a \x8fg\xad\x0b\xd3z\xfd\x9e\x17\xf9\xdea\xef\x11\x10\xf2\xb9\xdfs\x06\x9aq\xa4\x1c\x18O\xc3\x81\xc8u<5\xd5\x1c\xc4eQ\x08e\x87\xf0\xb3k\xe9\x96\xf0\xe1\xa7\x9e)\xb3\x8c\x17\xb3\xdea\xef\x08[\xbcp\x0dX^\xe83\x99\x08\xe6_c\xf0\x1a\xd3\xe3*\xfc\x920\x99\x08e\xdd\x9fE\xaf_\x9b\xcd\xc7\xc9\\W\xbd~/(?\xa0\xf0\xf1\xb7\xdf\x02W\xe7\x98\xd1\xb5A\xf5\xfa\xbd\x18=o\xf7\xc6\x1f\x0e\xfe\x00\x04C\xb6\x01\xb0}\x96;\xae\xe3-y\xbd~pj$~ga\xc0\xbe\xb9\xf7`\xfa\xbd\xb1.2n{\x87=8:\xd2\xfb\x0c\xff\xcf\xcd\x12\xe8\xfd\x0e\x1aW\xa9\xf5K\x91\n}-\x92\xf8\xd9\xf5\x99\x88\xc6\x03',\x13\xe0w\x93\xf8\xef\x1e\xbb\xa6\xfe\x8e\x83\xcen\x12a\xb9LM\xe3\x19\xd6\x11\xeb\xf7\xe04\xc1z\n\xab:\x8e]\xbdc\x85\xc4U\x1cv\xde\xb0g029\xaf|\x88\xde\xe1??\xf5\x14\xcf`xM\x89\x92\x8e\xe7`v\x82\x04\xa1\x05\xde;\x04D\xaa\xbf\xc8\xda@\xce\xe7\xdf\xfa=\xcb'\xae\xdf\xde\x7f\xc2\xdb\xbf\xb9\x0f.]\x17\xf8\xcf\xce\x05\x01\xe2{\xac\xc6\xdaT\xcb\xa1(\x95\x92j\x82\xcb\x01\x1e-\xc8\xfe\x8b\xe6\xa3\xbdH~=\xa4\xdd&\xbb1\x0d\x1d\x93\xda&\xbfn\x8b\x07\xf4J%?\xc2!\xd1\xb1(\x84\x8a\xe1\xfc\x01\xa4\x15\xe7\xbc\xb02.S^0+3Q\x0c\x9c\xe4\x18\xcb\x0b;t\xff^)> \xb7\xe2!\xb4\x9a\xff|\xddA\xe5\xb3\xb8\xbf\xb9e\xe7S\x19O\xab_\n6\x96\x85\xb1L\x9c \xf7\xfd\xf8\xd4\x0c\"ug\x19W3 \xd68\xf7\xb41\xc7\xf7\x1c\xbbDro\x10\xa9wn\x1ea\xca\xddo\xec~\xeb\xb3O\x1e=p_\xf6\x00\x04\xe3&R\xb6j\x8f\xbc8\x9fj#\xf0\xef \x1d\x0b\\\xacVzC\x8c\x16y4\xbc\xb4\x90/\xeb\x8ea\xb3\x910\xb5,\xa2\x1c\xf9\xa3c\x81\xad\xc0\x9dH\x81\xa9q\xc6\xd3\x01s\xdc \xffrC\xbb\xbf\xec\x13\xfdH-\xfd\xfa\x1f+Y\xfb\x8d\xfd:\x15\xaa1\x11 \xb6}\\\xf8\xd5\xf1\xa4\x15]=a)7+?\x81\x07\xd8\xb4\x12a00\xadn5p6\x91gB5\xcc\x118\x11\xac\xe3\xb8,X.\n\x9f\x1b\x11\xa9H\xfd\xf2\xfa\xdd\x8b\xff\x01\x83_JI\xe6\xcc5y&\x8a\x89`FN\x94\x1c\xcb\x98+\x9b\xce\xd8\xb8\xd0\x99\x1bb\xa4\xcey\x9a>\x8c\xab%\xd3\xd0\x13#1\xe1\x8aq;`\xbf\xce\xb5\xd1c\xdf\x04g\xc9}f$\"\xf5\xe3\x8fKI\x19\xb0\xb7e\x9e;)\\\xc1\xb6G\xdf\xf6#U\xf1\xe8 \xfb\xbe~\xabZ\xe7l\xa2\x85az\xfb\xd3\xb7\xbf9\x15\x82s\x0d\x878\xa5\x9a\xe0\xa4;\xf3\xa7R \xfe$\xe1\x82\xb2\xe8~\x117g\xffN\x1fO\xa1\x863\xa9\x86\x9dO\x05(Y\xb7^#\x15v\x1e\xb7\x90\x9d~E\xa1\x9e \xbbT\xb7\xf9;r6\xd9\x0c\x82\xab\xb4\xbc\x9b\xb0' \xb3\xfco\xad\x0d\xbd\xb5[D\xca\x0fq\xc0\xee\xbf[\xf9\x1a\x8e\x08\xc0g\xdc'\x1e\xf4\xd0\xdeo\xb2\xaf\xd6\xe9\xc01c\x8b2\xf6u\x06\xda\xda\xd6y\x85l\xa2\x9d1(\x95Sn\xdc\x7f \xec*\xa3\x19\xb4\xbb\xf0\x16&\xcbtR\xa6n\x7f G\xe3\x06\x1d\x8d\x95\xae\xc0\x84gY\xed \x8f\xb3l\x18k\x15\x0be\x0bnE2\xcc\xb5N\x87\xa9T\xa7\xdd\xee\xc1\xd1\xcb\x9f\x7f>j\xb4?\xd1:}\xe5Z\x87\x9c4\x96\xc9\x89\xd7\xcc\xd0Ke\xdb\xb97\x9d~\x8dT\xf3}\xe6\xbeg\x06\x8b\xce\xf4\xb2\xef\xec\xcb\xbf\xa8\x865,D\xec\xec\xb2\xf5\xaf\x8cx\xcaU,\x8a\xa1\xd5\xabx\xbc\x9b\xccT\x9dCg2Y)!\xa5\xf7\xf6\xfb\xbd8\xdd\xea\x85\x05U\xf1\xcc\x7f\xf6\x9d\xee\x9a\x9dF\"#V\x9b\x07\x19\xa8D \xfc\x1a\xa9@=L?\xec\xba\xd5\x1bMN\xb1T~,e\"\xed\x0c\x1a:\x1bN\x1a\xec\xd3\x1f\xe0\x07\x13\x8b\xa7\xa9>w\xaa\xbe\xd5\xab\xd5^\x16\x05\x96\x98\x08\xfds\xa5\x95\x8cy\xca\xc6e\x9a\xb2\x82\xab\x89\x88\xd4\x8a\xaf\xb2\\\x1b\xe9\x86\x1f\xa9\xa7s\x9f\xf0UX\x1cA@\n\xe3,\xe3\x172+3\xa8\xa6\xa2\x04\x8bSh\xd9\xf7c\xf4\xfft/\x82\x93\xb2\xe2\xcd\xd6\x97@\x83\xd6\x1b\xc9\xcfA\x18\xdf\xa0,:\xa6Y\xf0nx\x8a>Z{\xedU}\xa1\xfdS\x0f5R\xb0\xfe\x08\x07\xdaM=/\xc2\x9b\xef\xdf\xbc:(\x84\xd1e\x11\x0b\xa6x\xe6\x8b_ B\x90\xcej\x83\xdd\xbbp\xb3\xbcr\\\x8c($O\xe5\xef0+\x85\xb6:\xd6)\x1b\x95\xe3\xb1(\x98\x1f\x9f_\x00\xf8utU\xfd\xcc\xbb]?\x15\xdc\xd8H9\xe1\x89z\x07Q\xcfY\xc2\x05\x8f\xad(\xd0\xf9\x01+\xc0\x88I&\xeaB\x1b\xef\xdf\xbc\xbagX\xce\xed\x14\xbb+D^\x08#\x94\xf5\xdea\x99\xa63\xf6\xb1\xe4)\xc2\x9f0\xa2P\xa3\xc3\xd1~\x9f\x1b&U\xa4>\xb8.\x0e&ZOR1\x00\xeaG\xe5x\x10\xbc\xea\x0f\x0f\x90\x02x\xbd\xaen\x05Y\xdc\x8d\xf5\xa8\x8b,R\xf7\xc5`2\xe8\xbb\xc1\xc0\xf1\xe8\xa87\x88zn\xb5+m\x19\x8fc\x91[\x91<\x00\xcf\xe6X\xb1\xdc\x8dO\xc6\xa2\xcf\xac\xe0\x99S %w\x14\xe7NIg\xb9L\xc1\xe5\xd3h[I\xc5\x8b\x19\xae\x90Y\x0e\x13\x80eIf\x91\x97l&\xa1\xa2DiD@E@\xac/\x80[O\xd5l\xc0\xfe\xa2\xcf\x9d/\xd0\x07\xd3\xf5\xfd\x9bW\xc6\x9bZ%\xfa\x1e\x91\x02\xa9\x17\xec\xc3\xd4\xda\xfcC\x1f\xff\xd7|\x00\xb7^i<4&\xfa\xa8\x19\x9c\xbf\x06\x82\x03\x14;w\xb1\xcc\x19\x07\xda\"eDq\x86n\xb7\xf3\x9br\x83\xdc\x86/:\xbd\x86\xe2\x80\xea\x16t\x93a\xdc\xb0\xb1v\x8a\xd0\x1c:\xe6\xfc\x81\x1d\x8f\xebO:\x06z8/\xa9\xa8\x02k\xcf\x982\x13\xc9\xc0\xbd\xf0T\xb1\xbf\xbc{w\xc2~z\xf1\x8ei\x15\xc4\x03\xe5b&E\xea\x14\xd8?\xe7\xa7\xf8\xdd,\x17\xbf\xfd\xf3\xb7H1_\xc3G\xaa\xc0i\\\xa60v\xefS1\xaePw\xe0\xf7\xea|1,\xdb\x01z\x1c\xd5a\xccc'\xb1Z\x9f\x96yU\xdac\xc4\x9d\xc6G\xd2\xdc\x07\xdf\xbfy\x05\xbdO\xf9\x19\xb0?k\xcc{\x82\x13\xcf\x031\xee\xef3-\x13\xc6\xd5\xcc\xbd\x8b]\x83X\x16b\xac\x0b\xd1\x0f-]\x07\xdc\xca\x91L\xdd\x0e\xa0\x84HB\x91#X\x1a\xc5\x99[\xa0\xcc\x91\x11O\xdd\xe6\x01OA\xa2\x06\xec\xfe{#Bt\xce\x0d\xc4M\x9a\x13z\x9c5\xae\xf8\x04\x08\x1f\x15\x82\x9f:\xe9\xf6=8\xd71R\xbfh+\x0e\x11?\x18\x97*F\xd1p4x\xe9\xf7.@:k\x14\xc2\xf1r\xaa\xa1\xbc\x17O\xbd\xe6\x18\x95cV\x08\xa7\x0f\x04\xee\x81O\x8e\xa2\x17\x17\x90\x18\xcc\x1e\x1d\xb2\x13\xf7A'u\xfe\xdb\xbc\x1a\xbeT\xec\xe8\x8f\x7f\x84\xf6\x8c1\xf6Rk6\xd6\x9a=a\x83\xc1\xe0\xcf\xf8\x9b\xeb\x94\xab\x99\xff\x17W\xb3\x81\xeb\xeee\xa1\xb3\xfbc\xad\x1f\xf8\xdf\x07\x83\x01\xfe!\xc7\xec\xbek\xf4\x1e>\xf5N\xdf\xff7\xd7\xea\x01\xfb\x84\x8f\x1b-?7\xa9|\xbc\x86\xca\xbf\xf23\xbe \x99\xec \xec\x0b\xae\x83\x95\xe4Is\xff\xa5\xd6\x03\x08\xe76\xa9\xc3n]\x0b\xa4\xa2\xd1\xea\xcf\x0d\xb2Y\xa0\xfb\xbb5t\x9f\xcc\xecT\xab\x8ar\xec\xfe\xa5\xd6\xf7\x07\x03\xa7c\x1a\xbc\xd4\xfa\xd3`0\xf8\xec\x9fp5\xeb\xbb\xfd\xc3=\xceQ\xe3\xfe\xcc\x0b3\xe5\xa9\x1bN\xe3\xf3\x15\xfd\xf3\x9d\x85\x9e\xe4x\xae\x9f\xf7*\xab{\x82\xef\xc0tB\xab\xff\xf1\x84)\x99\xd6\x93\xd6\xe8\x1ef\xc7Y60\xa2\xb0>\xc2N\xcbF3\x96\xcf\xafT@\xc2FU)\x1a\xa7\x90#u\xafC\xe7\x1e8\xe3k\x00\x0f\xdc\x16r\x8f\xf1\x86zp\xaa\xc3\xf1\xd2\xfd\x80\xfc\x8cT\xb5\x9cu\xf5CY\xb0s\x83+\xf3\xdb?\x7f{px\x999iw\xd7\x9a\x16\x18\x0f\xf6\xf1h\xf0\xf8\xd1c\x13\xf5<\xd7{;\x81{\x0b\x98\x93L\x00v\x1a\x8e\x0b\x9d\x0d\xe3q\x96\x1d|\x02\x04\xd0?\xfc\xdc\x0d\xf9\xcd\x01=\xc7\xc9+\xa9`G\x0e`P\x85\xfd9\xf6\x02\xbe!\x93*\x1c\xb7\x806x \xde\x04\xf0\x03\x96\xa7k\x8a!-\xc0 \x11\xf3X\x00\x05\x97R\xe2^\xda\x172\xd8\xc5\xe6\xcd\xc05\xc2\\\x08s!\xcc\x850\x17\xc2\\\x08s!\xcc\x850\x17\xc2\\6!\x930\x17\xc2\\\x08s!\xcc\x850\x17\xc2\\6\x9c\x93\xcbb.\xdd'7\x9a\xd0I8\xbb\xe1\\\xb2\xd6\xd1\x0d[\x94+Nnt\xa1\x02\xeb\xcer\xb40\x9e\xb1L\xad(<\xf0\xd0\x9d\xb2u\xe2\x9e\xfc*\xed\xf4%\xb4E\x8b\xdf\xb0\x99.\xab3\xce\xb5)\x08\xdd\xe0\xea-\xb0\xe2\x0b\xb8\xc6\xf5\xf8\xe71\x99\xb9\xde\xf7\x05\xc2T\xc3\xb7\x047\x10\xdc@p\x03\xc1\x0d\x047\x10\xdc@p\x03\xc1\x0d\x047\x10\xdc@p\x03\xc1\x0d\x047\x10\xdcp\xcb\xe1\x86~\xe3\"\xc8E\xaf\xb9q\xdfe8fcA-5\xaf\xc1\xc4\xb5T{\xd4\xab\xdd\xdep{\xf5&\xe6W8{R\xddx\xed\x8f,V\x97_\xb3\x9c\x1b<\x91\xe3\xaf\xc8\x06\xf8`\x80\xcf#\x85@\x83]y)\xb6\xb3\x07\xf1\xd6\xd5\x0d\x90\x92\x9a\xa4\xea\xc2\xcfew\xd46\x8c\xe9q\x8b\xb8\xc6\x85\xa1\x91:\xe7pj\xbb\xcf\xa45\xc1\xd31u\xcd>4\x8a\xcf\xa5\x11\x0dd\x88\x927\x08M!4\x85\xd0\x14BS\x08M!4\x85\xd0\x14BS\x08M!4\x85\xd0\x14BS\x08M\xa9\xc9!4\xe5\x12s\xb2+\x9a\xb2:y#\x93jX\xd5\xf9X\xb0\x87\xde\xa2|UgX\x9c\x90K\x15J\x88x\xe93\"\xf7\xfb\xfc\x08\x8c\xe0\x8c;\xde<\x88\xd4\xa3oKnu\xd6\x7f\xf4\xed\xb7J[p\xf7w-\xec\xd9\xaf\x08\x86D\x13x|%\xbdU\xa8\xd1\xe0T,\x8e\xdf\xe3;\xdc+\x16<\xdf\x83\xf7\xee!|\xe2\x81\x8c\n\x0c\x02{\x7f\xe2\x1c[ \xcb\xb1g5\xd43`\xafCq;=v\xe6\xb8\xf3\xe7t\xc1N\x9dwY{\xbcF\xd8\xdd\xd9\xb7X#\xa9\x93\x01\xf8\xf1\x05\x1ex\x9a\x80\x0d\xaa\xccD!\xe3@'\xac>_\xfc\x05-\xf4\xa9P\xcc3\xadT\x95\xb71\x88\xd41\x1eu\x12\xc6\xd4\xa3GW\xa0t\xd2\xe4^Z\xc1\x8afA\xcb\xabbE]\xdb\xa7\x8b\x19\xa9\xcc\xe4\"/\xe0\xd7\x80\xf8-C\xd9\xd0\xe7k\xca\x8aG#\xdd\xae\x9d\xa3%~\x16\xab\x8c\xffRf\x90r\xb7\xafD\xbb\xd6(\xd7\xaf1B\xc9 %'\x94\x9cPrB\xc9 %'\x94\x9cPrB\xc97!\x93PrB\xc9 %'\x94\x9cPrB\xc97\x9c\x93\xcb\xa2\xe4\x9b\xe3\x1c\x15\x10}\xf0ie\xdd\xa8\x13\xadSg\xc6\xb7\xaaC5\x8d\x10(\xf2\x14\xa97\xfeqT\x15\x17\x8fzx\xd7j\x90_iE\xc1S\x84\xaalUb\xca\xccW\xfc\x1eD\xea\x85\xf3\x02\x8c\xd3\xc3\xcdvc\x0e\x96;Z\xdb@A\xcc\x8d\xb0\"Y,1\x15\x88\xde\x17\xbcR\xa3\xfc\x1d\xf0=\x81)\x04\xa6\x10\x98B`\n\x81)\x04\xa6\x10\x98B`\n\x81)\x9b\x90I`\n\x81)\x04\xa6\x10\x98B`\n\x81)\x1b\xce\xc9e\xc1\x94\xee\x94\xc3=\x97\x8a\x9a\xcfM\xe9\xa8\xe3\xb4O\xd4\x83\x9c\x7fr\xfe\xc9\xf9'\xe7\x9f\x9c\x7fr\xfe\xc9\xf9'\xe7\x9f\x9c\x7fr\xfe\xc9\xf9'\xe7\x9f\x9c\x7fr\xfe\xef\x84\xf3O\xd5\x9b\xa8z\xd3z\xac\x82R)\x08M!4\x85\xd0\x14BS\x08M!4\x85\xd0\x14BS\x08M!4\x85\xd0\x14BS\x1a\xeb\x7fG\xcf\x9d\xd0\x94/\x07MY\x93JA\xe5\x8b\xa8|\x11\x95/Z\x1c?\x95/\xda\x9a\xc5T\xbe\xa8N\x0f[s\xa4\xef\xaa\x8a\x18\x9dh\x9d\xee3\xd7l}+K (\x81\xa0\x04\x82\x12\x08J (\x81\xa0\x04\x82\x12\x08J (\x81\xa0\xf87\x81\xa0\x04\x82\x12\x08J \xe8\x16s\xb2+\x08Z'I\xed\xeayS\x9e\x13\xb9\xf8\xe4\xe2\x93\x8bO.>\xb9\xf8\xe4\xe2\x93\x8bO.\xfe&d\x92\x8bO.>\xb9\xf8\xe4\xe2\x93\x8bO.\xfe\x86s\xb2\xab\x8b\x7f\xfbK\xc6\xd49\x01\x07\xe2B\xda\xa19\xe7\xf9\xd0Ly!\x86<\x83\xfc\x0d\xa9z\xcb\xca\xca\x1c\xf14~q!\xed\x89\xd6\xe9\x91\x96\xca\xb8-\xff\xad{yo\xc5f\xac>\x15\xca\x0cuiw\xc7\x0e\x12\xa1t\xd6 K K:\x1e-\xd8\x9c\x8e\x1d\xd5Y@\xce\x80,\xaf\xd4\x18\xf4\x1f\xb2e\xdcbs\x16)\xf4\x0c\xaa\xf7\x97\xd7\xef^\x1c\x82\xeb\x8d?z\xbd'\xc1r=V\xd6\xaf\x9d\xca\x18o- \xdcO\"e\xe4Dq[\x16\xc2\xb0 Pn\x03\x9b\xe8\x89\x06y\x1e\xf4\xe8\x9c\x1c\xe1G\x84\x1f\x11~D\xf8\x11\xe1G\x84\x1f\x11~D\xf8\x11\xe1G\x81~\xc2\x8f\x08?\"\xfc\x88\xf0\xa3\x069\x84\x1f]bN\xee\n~T\x9f\x91A\x08H*\x8f\x02m\x7fP\xa5BF.\x85I\xfdKK\x85\x98\x94\xb8\xe0\xf1Z0\xea\xafZ\xaa\x13\xad\xd3\xfdbP\xc8;]\xda\xe1R\xbc\xa8O@\x15\x01U\x04T\x11PE@\x15\x01U\x04T\x11PE@\x15\x01U\x04T\x11P\xc5\x08\xa8\"\xa0\x8a\x80*\x02\xaa\x08\xa8\xba\xb6D' \xd2,\x05\x92N\xb4NO\xb0\xc9\x9e\x00\xa4\x9a\xc0\xd5\xed,\xf9\xfe\xe4\xfb\x93\xefO\xbe?\xf9\xfe\xe4\xfb\x93\xefO\xbe?\xf9\xfe\xe4\xfb\xe3\xdf\xe4\xfb\x93\xefO\xbe?\xf9\xfe[\xcc\xc9e|\x7f\n\xce\x93\x83N\x0e:9\xe8\xe4\xa0\x93\x83N\x0e:9\xe8\xe4\xa0\xaf#\x93\x1ctr\xd0\xc9A'\x07\x9d\x1ctr\xd07\x9c\x93\xcb8\xe8w'8_\xc8X4\x83\xf3\xf5\x05%osmO\xdc\xe3\xc6y\x85\xc9\x9b\x93#\x86\xf7WO\xb9J\xd2\xe0\xf9\xe0\xa5,8\xab&\xd7\x96A\xbfl\"\xcf\x84[\xce\xe0\x10t\x9co`\x1fKm\xdb\x0f\x06\x0b\x17\x9cTt\xec+?\xc0\x0dh\x08\x03\xea\x9a\x90PU\xf6-\xaa\x06\xaf\xea\x9e\x8b\xd8 \xec\x03\xf6\xe8\xdb\xc1\xe3o\xbf+\xb9\xd5Y\x87\x95\n\x13V\x0d0\xdc\xa5\xd5\xba\xd5\x1cX\x1e\x06\xe2\x14P\x19\xdb\xb2\xc0k\x808\xab\xde\xf5\xb7m\x0d\xa8J-\xe1C\x84\x0f\x11>D\xf8\x10\xe1C\x1d\xf6\x0d\xe1C\x84\x0f\x11>D\xf8\x10\xe1C\x8c\xf0!\xc2\x87\x08\x1f\"|h\xd79\xb9+\xf8P]e\xc4\x99\xddCn\x8c\xb0C\xace\xb1{\x99\x91\xbaS\x80p\xae\xa8\xd7KAYp\xf3\xf1\x10\xfe\x99\xca\x8f\xa5L\xa4\x9du\x02[\xbb\xde\xff3\x0fL\xbds\x1f<\xd1:}U}nO\x08Uk\xbcv'l\xe4\xab)nB\xf7@\x11\xc2F\x08\x1b!l\x84\xb0\x11\xc2F\x08\x1b!l\x84\xb0\xb5\xa0\x1eF\x08\x1b!l\x84\xb0\x11\xc2F\x08\x1b!l\x84\xb0m\x84\xb0]\x01le\xb0\x84\xee\xb2\")\x005\xed\xb7\xcc\xee<\x9d\xab[\x7f5p\x12aA\x84\x05\x11\x16DX\x10aA\x84\x05\x11\x16d \x0b\",h=\x99\x84\x05\x11\x16DX\x10aA\x84\x05\x11\x16\xb4\xe1\x9c|\x91X\x10b*]\xd9J\x1d\xf0\x0fe\x19\xdd-X\x88p!\xc2\x85\x08\x17\"\\\x88p!\xc2\x85\x08\x17\"\\\x88p\xa1\xb5d\x12.D\xb8\x10\xe1B\x84\x0b\x11.D\xb8\xd0\x86srY\\hs\xb0\xa6N\xd9\x11\xc6\xca\x8c[q\xd0\xb8*\x1b\x01\x85\xf6\x8d\xd9W\x7f\xe4\xec\x85\xff\xf2\xdbs\x9e\xbfp\xdf}\n\x9f=V\xfb\xc2\x84\x00}Y}\xf96a!\x84\x85\x10\x16BX\x08a!\x84\x85t\xec\xe5\x84\x85\x10\x16BX\x08a!\x84\x850\xc2B\x08\x0b!,\x84\xb0\x90]\xe7\xe4\xb2X\xc8M\xe5\xc8\xd4\xc5\x83\x8cP \xf8\xdd\xbbV\x0c\xaa\xbbB$B\xaaKt\xb6U\xee\xceFp\x90.\xed>\xf0\xa0\xd7\xa5\xdd/ $\x15\xe1A\x84\x07\x11\x1eDx\x10\xe1A\x84\x07Y\xc2\x83\x08\x0f\"<\x88\xf0 \xc2\x83\x08\x0f\"<\x88\xf0 \xc2\x83\x08\x0f\xba\x19w\xbb\xb4\xb4\xf7\xdc\xcfu+p\xa4\xd5\xc3\xfa\x07\x98\x1d\xe7<-\xfchX\"\xdd\xa8F\xa5\x85\xbdP\x16x.\xcd0\xf1\xd1\xc3\x04\xa2`\"\xd7\xf1\xd4\xe9\x90\xd4\xbb\xf0\xf0\xae\xa3\xc6o\x86^\nrQH\x9d\x0c\x9cf_\xfa\x11\xc0\x16\x1a\x1f\x8a\x14\xb7\x8c3#\xd5\xc4\xf5.\xdd\xae\xab\x12\xdc\xa0\x97\xd1\xc6'\\*\xa6U\x8c\xfbw\xa0\xc6\xe9\xcc\xb1LS\xb7\xc5\x1d;qI\xbc\x1f\xe76z\xf4\xa8*\xb9Gu:\x11N\xa5\xe2;,\xe12\x9d\x81KU\x7fwh5\xcc\x91\x9f\xdd\xd6\x03P\xe3\xce5n\x10Q\x88s^$\xe8\xaa\xd7\x8d\x9d\xbb>p\xdb\xba\xe3\x98\x81{\x08\x9d\x9dq&9Ku|\xca\x12\xaf\xe9\xdc\xcc\x8df\xc0\x04cy\x96;\xb9Z)\x9d\xee\xed!\xe8\x87!6\xacI}\xa5\xe3SX\xfb\xef\xfc\x8e\xc3+\xa7 \xbe o\xf5\xd9\xb3\x99k\x18T-\xfb?\xfe\x87w2\x13\xf5\xd7+\xb9\x17\xaa\xcc\x9cRy6\x0bo\xf4\xfa\xbdg3\xdf\xfa\x17\xed^\x85_~*t\x99\xf7~k\xa0\xa5\xedw\xda2\xde\xa6\xb5y\x89`\xd3\xcf\xab\xc9\xc6\xc9\x8b\x9d\xbd\"$x\xda#\x01\xf6b\x83\x8f\xc6r\xe7\xe2\xc9\xac\xf5>No\xf7a\xcef\x81u\xa5\xb3z\xaf\xf5\xa4\xc0y\xcd\xd6A\xcds\x01\x13\x9dj\x0dH\x85\xd5Hc\x99\xc3W\xc2h\xd7B\xa2\x15\xf7\xa5A\xec\xc1j?N\xd7\x9dA\xd1u^\xb1(\xea!\x02\xb6\x00\xeeop\xc8#\x15\x1e\x0eX\xd5%\x1aq\x80O)\x0d\x0e\xbf\xb3\xd3\xcf\xa7B-\xf0\x14\xe5$R\x1f\xda2\xf1\x01xV\xcb\xe4*u\x98p+\x1eZ\x94\x86\xf6\x18\xdf\x85\xf7\xabA\x8e\xc2\xf0`\xa6\xdc\x0f\x801\xb5\xc7T\x8d\xd7-\x9f\xaa\x8b\xad\x07\xc5>\xd4b\xfda\x10)\x1060'k\x06\xdb&\x855\x8e\xe4>P\x011\"\xe9\x02<\xa0\xb7#\xad\xbc\x0d\x05k\x0d\xef\xbb\xac\xa1\xa4\x8f\xed/\x96\xb9V,\x91\xe3\xb1p\x9fqf5\xbel\x06\x91\x9a\x9b;pa\xdaC7,\x0e\xf8p\x80G\xfb,\x11\xb9P`\xfd\x05\xf4\xaf\xb5\xac\x06\x18.\x90\xea\x12(\xffWr\n\xbaV\x04\xc0\xaf\xb0\xa1\xc3\xa1\xf7\xf0i=f\xf8\x10T\x11\xa0\xab#!T\xd8\x10\xfd\x8e{\xc4Us\x13\xcb\xca\xd4JgG\xc7\xc8\x04\xa53\xe3>\x07+`\x08\xebf\xd3\xd5\x15(\xac_\x0ddV\xdf\x03\xcc\xb0\xd2\x82\xee;\xaa\xcc\x86\xb0\x97\x9ba\xcee2\xd4g\xa2#\xac\xb4\xca\xbc\xe9\xea!|X\x95\xd9\xc8\xa3\x85\xc0)l\xd7\xa6\xc7;,\x91\x8a\xb5\x9b%\xb7\xec\x81\x88\xcf\xfd\x1e\xee\xc2\xbe\xf7\xed\xa8j\xbd\xbaHN\x17!\xce\xe1\x82 k\x10\xe2\xdc\xdf\xb4\x10<\x99\xb5\x8d\x80dH\xebf\xbbu\xb3\xc0;\xd8';\x17L\xd3J\xaa\xb8\xbf0\xfa\x9f\x82\xc1\xc9\x15C&c?\xc6jG\x91\x1bs\xdd\x91A\xac\x05\x02\n\x85\x88e.aP\xe7S\x1d)\xc3\xad4\xe3\x19\x8bE\x011\xc1\x86\xe6eG\x95\xd2\xf7fk\x00\x8a\xebF\x8c\x17\xbaDL\xa9\xdenA\xc1#\x0f9^\x1d\x8d3\xe2\xe8u\xea\x1ev\x8d\x9a9O\x83\xcb4)\x05\"Q=\xf0Y'~\x06\x9bV\xdcI\xf5k5\xf7uC\x8cQ\x00\xf8\x83\x8e\xd2Z{Q\x89\x0b;<\x15\xb3\x95\xcb\xcb\x87\x0b\xaa%\xef\xdf \xeb\xca\xfd\xe9c=\xdcxk\xe5\x84O\xc4\x1b\xf1\xb1\x14\xc6\x0e\xf0\xb9\xbf\xd6\x19W\xa2\xb8\xb0\x8el\xc12m,\x13\x10\x88\x01F\x03[\x9c\xb2\xd8n\xbd\xa3~q\xf4\xc0\x1f\xf5J\x0fQ\xb0F\xf0g\xdc\".\x86\xec\x06x-R\xe7\xdc0#l\x9fIkBd\xce\xb0R!\xa7\x13\x0c\xe2\x9cK#:\x04\x12;\xf5\x97[\xcb\x10\xfd\xaap\x18\xa9\xe6\xee\xbf\xf6\xa0I\xc3cp:\xb0\xc0\xe7\xb0k\x17Hb\x05\xaf8\x0d\x05\xe6C\x93~@UB\x8b\xb7:\xabi\xa8\xa1W\xe6,W\x01\xd1\x88g\xbc\xa8x\xd2\x04\xd3\x18c\xad\x01\xc0\xe4x@\xed3e:\xac\xa2\xd0.\xcdt\xd8<\x16\xf7\xf9\xf3Z\xac\xaaZ\xe4n=-X\xd3~9r/\xb5\x08\xc6\xa0\xd85\xe7uP\xad]\x10\xcf\x89T~Y\x82\xb7\xb2re\x0e\xd8k\xe7\x81k\x05\xee\x93\x1e\x8f\x8d\xb0\xce\xad:\x15\xb3H\xd5\xe9 F\xd8\xc1\xce8\xd5\"[\xfa]\x0c\xc0\x8f/\xf0\xc0\xd3\x04lPe&\n\x19\x07:\x83{\xe8(\xc4p\xaas\x0d<\xd3JUi\x87A\xa4\x8e\xa1\x87T\x18S\x8f\x1e}\xab\xd28.\x9d\x8aU\xac\xf0\x89\x1a\x91\xbaBVt\xa0\x8b\x0df\xa42\x93\x8b\xbc\x80_\xdbv\xea\xa2RD\x15\xd5\x94\x15\xbfw\x94)\n\xc1\x00`\xebT\x8c\xad\x0fNK\x8b\x06[\x88\xc3@\xb2\x00\x8a\x1cv\xe681\x9a1\xc1\xdd\xd6\x97\xe770\xfe\x86\x02_\xe0B\xe3\x99\xe3\x05H\x82f\xb6(\x05s\x7fH\x95\xc8\x98[Q%\xb5\x84\xb1\xbb\x86^\xa4\xa5\x8a\xd32\x11\x91\xe2,\x0ev~\x17OAY4\xb6\x19\xb7\x1376f\xa9\xd8\xfbc\xe7\xcb\xcd\x91\x04\xa8\x96\xd3\x94\xa89A,k9v\xa2:`(\x91r\xa2t\xd1\x90\xdcH\xe1\x88v`q@\x16\x97p\xb4\x10g\xa20\x8b\x1e\xbb\xff}\x9e\x93\xb2\xb1\xcb\x16b\x89P\xb9\x9e\x823Z$\xa2\xc0\xdc\x08\xa9bq\xc8bm2m\x1e\x9a\xe4\x94};\xf8\xd3w\x97\x19\xcfea\xeea.\x8aae\x9c\xaf\x04\xbcOD\x11P\xa1\x0e\xe0\x1b\x83\x95x\x87\xe4r\x04<\xf4AH8!\xe1\x84\x843B\xc2 '$\x9c\x90pB\xc2\xef\x00\xa2GH8!\xe1\x84\x84o\xbfn\x08 \xdf\x18 \xf7\x079l<\x0d/)\xdc,\x08\x1e\xdfN \x10&\xea\xd7 \x9c*\xc3\x98B\x80f\xa5:\x15 \xcb\xb5N\x11\xa7*\xb32\x85\xa2\x1a[0 \xbc\xe2y\x00\x07\xb2\xe1\xf4;gF\xf1\xdcLu\xa54y\xec\xbf\xa0\x0b\xcf\x07[p\xe7\xa8E\xaa:J>?\xc0\xady\x11\xa9\x9a\x19\xac\x1eQx)\xf8i\x8d\xb13^#\xd6\xc0\xa42O\xb8\x15\xfe\x8a\x9a\xf9\x11\xff\xa2\xc3\x8e\x81\x91\x99\x91\xb6S\x88{\xb85\x00\x0e\xf3\xb1\x1ak\xf0\x8d[\xbf\xbe\x01QF\x081RV\xc4S\xa8\xb2\x90\xceP_\xe6)\x8f\xd1\xb7\x7f\xeed\xa3\xea\x03\xfe\xe5\xdf\x1d\x17:\x03\xe2\x1d\xd5\x0fke\x16\xa9L'e*\xfa\xec\\\xb0\xb8p\xfe\x063\xc2Y\xb3V\xf8\xda\n\xe8\xe9hv*D\xcetY0>2\x16\x8a58\xf7:v\xfa\xd3}.R\x85\xe0 \xec`\xf7\xe7>\xd2\x06rZ\xaf;\xbd\x0ff\x15\x14\x908\x13\x853 \xc3\x01\xf2s\xee\x03\x07\x89\x16x\xe4=\x91\x85\x88-l|)P\xa8\xfd\xdaH\xf5D\xc6\x0f|Q\x0d\x9e\x1a\xcd\xa6\"\xcdM\xa4J\xc3\x8cL\x84\xb1\"g\x9c\x15b\xccc'C\x8d\x1a\x02Lf\x88\x19\xcc\xe2\x14A\xd7J:\x86(\x1d]\xb2\\\x07V\xfe\x0e\xd21\x1f:\xf1\xbf\xd6\xde\xee\xdb\xd0\xe9 \xf4\xc9\x12\xe7-dU\xdc\xc4\x8d\xf5\xdc\xfd\x8f\x82\xfd\x11HhF\xbf\x9c+\xeaT\xac?\xa4\xd4\x01\xb8\xb8\xa7+\x00\x17\xf6\xe8\xf0\x11\xcbx\x9e\x8b\xc4\xf3\xec\xf8y\x9fq\x96J\x03\xab\x0c\xc4\xd9\xa3\xa0N\x11c\xb5\x01\xde\xb1\xaa\xdeM\x85\xc18\nPT\xd7g\xf0!\xc1\xc6\x04\x03\x84\x00\xb5 `\xf5\xb4\xe4@\x8f\xf1\xfdV\x8c\xcf\x99V(\xf9\x01\xd2\xe1\xb1\x13`\x8c\xd6`%\x93:\xd6\xb0@\x1b]\x0du\xa3^\xef\xee\x16\xd3\xca\x03|\xc1\x16\x9a?\xc3\x17\xcc\xa7\xa5\xc7\xf8\xda/\xee\xcd\x94\xaa\x86\xb6\xdb,mfrP\x06\x03e0P\x06\x03e0P\x06\x03e00\xca`\xf8b\"\xb1\x94\xc1@\x19\x0c\x94\xc1\xb0\xfd\xba\xa1\x0c\x86\x85\x0c\x06\xf2\x85WPho\x8f/\xec\x96\x14:\xc4\xbd\x95\xfe\xf0\xaf\xd2N\x7f\xf26\xff|D\xc1\x1b\x14\xe0\xb24\x9c\xe4\xe5>r\xd5\xd9\xde\xdc\xe4\xae\xc1\xef6\x97\xd0\xd5\x86\xcd(FA1\x8a-\x18@1\n\x8aQP\x8c\x82b\x14W\x19\xa3\xf0\xea\x7f\xbdz\xdfL\xb1\x13\x12LH0!\xc1\x84\x04\x13\x12LH0!\xc1\xe2\x8bA\xb4\x08 &$\x98\x90\xe0\xed\xd7\x0d!\xc1\x8bHp\xa7'\xd6\x00\x14a\xdbp\xee\xa8(\xc2\xee\xd1\xf6\xcc\xd0\x0d\xe2p\x01\x8d3\x9b\x8d\xd1\xb1\x04\xfc\x05\xc8%\xb4y5\x85v\xcfh3\x02\x85\xa3\xd9P&\x07\x9fd\xf2\xb9\xd7\x054\x83(<\x9b\x1d?\xaf\xf0e/\x8a\xa3\x99w\x81\xfcy\x03\xe7n\x1d?_\xc0\x96\xab\xf7\xf7\x06)\x93[Mn5\xb9\xd5\xe4V\x93[Mn5\xb9\xd5\x1bY&_\x9d{@n5\xb9\xd5\xe4Vo\xbfn\xc8\xad\x9ew\xabk\xde\xe0P\xd0\x82\xa9\xca\x81\x00\xad\xd5\x05\x82P\xd2\xc1yM\xe4'\xaf\xa0\xd0^\xb1\x9f\xdc]\x97\x03nW\x9b\x17F\x9c\x1e\x9f\xb9\xe1\xcd\xf9\xde\xd5]\xc2\xb6\xc3\x01s\x94\xd8\xdeRW\xbd>\x1a\x05Y\x1ae\x1e;\x8d1Am\xb1\xf2\xc2\xb3\xfd\x1e\x90\xa2\x02\xaf\xe4\xbd\x93\xf7N\xde;y\xef\x1b9\xba\xe4\xbd\x93\xf7N^\x08y\xef\xe4\xbd\x93\xf7\xbe\xf3\xba!\xef}!(^3\xe7\xfdr\xcf\x89j\xban\xb5\xee\xa9\xa6+\xd5t\xfd\xb2\xb1#*\xa7J\xe5T\xa9\x9c*\x95S\xa5r\xaaW\\N\x15O\xe7\x8ef\xc3\xf61\xdd\x15\xe9j\xae\x9d\x07\xb6\xf0db\x9d\xb8\x16\x12\x16\xd1\xf6sVD\xe3Ptg\xee\xdabg\xfb\x82\xc7\xe94\xf3fc\xa1\xd3\xcct\x9a\x99N3\xd3if:\xcd\xbc\xd7\xd3\xcc\xe4\x92\xee\xdb%\x95{\xceSHu|\xea\xd4\xd00\xc0o\xdd9\x0b\xaf|\xb3\x10M\xa9\xd3\x17B\x07Ul\xc9c\x92N\xe2\xcfx*a\xdf\xad\xb7a\xb7\\*\x01\x1e\xebb\xc1\x98[\xf8\xd2\xbeL\xb9n\xce\xac\x91\xa5ZB\x82&{\xe76\xbc9\xde\x94F\x14\x06\\i\x08\xae!\x92;\x86\xed\x17-\xfb\x80\xb5\x8a\xb3*\x08N\x8b\xf5&\x17\xeb\xb6\xcb\x08\xed\x82\xa1\xd5\xc3FRC\x15\xe7XXN?C\xf3w\xfay\xd5\xf8\x08d ,\xaa\x06\xb6\x0f;\x87\xf6\x01\xf1Q+\x0fba\xed,\xe9v_+\x88\xe2<\xdb\xc5y\x8e\xe6\":3\x04\x08\xe6&\x9d\xf4\xc0-\xd6\x03^Y\x0f\x85\xb1\x07\x9f\xf4\xb9\x12E7\xfe\xf1\x06\xdb\xbd0\xb6\x86=\x14\x13\xc6\xca\xccY\xea\xde\x8f\x0b\xf9O\xe0\x8f(}\xceJee\nff\x95\xa5\x82\xc1j\xf4<\xc7\xa5\x135\x90Y\xcc\x8a*\x98\xcf\xe8\xf1\xa9\xac\xf0\x15\x9e$\x850\x86\xe9\xc2\xf5$lHb2\x91\xaaCov*f\x95}=\x96\x18\xa4c\x8d\xa3\xa3a[\x9a\xd7A\xf5\xc8H\xed\xdc\x0d\xb5\xf3\xc2K]\x82\x89\x14A\xe8\xd0\xf5\xc6\x0c\x83`\x8c$\xce\x85\xaf\xd2\xa2\xbd E\n\xe4\xb3v40)g$\xec9\xa4\x04x\x94\xa6JF\x14\xee\xff\xe7:\x9e\x92*\xbbIU\xd6\xed\x7f\x80\x8eZ@\x9b\x9ez\x15\x012 M;\xb1\x1a,U\xafjD%;\xb5>\xd8\xc5\x9bi\xa2\xe8\x90\x86)\xa1\xab\xc5\xc4Fv\xfc\xdc\x84x\x02\xe0 \x9e\x10\xfc|\xa0Gj\xb5\x1e\xd2\x17\x17y\ns\xbd\x84\xb456~\x97\x03\xd6\x18\x85P>\x85fa\x18\xef\xf3\xdcY\xf8n9`\x84 \xa2Is\xe4G\xea\x95>\x17\x05\xabbPa\x19!p\xb9vp\x1b\xb8\x8d\x97\xf0\x1aC\xba\xfa\xaa\xab@\xde\xf8}\xcdQ\xe2\xcc\xd2$`\x14\xb5\x81\xa3\xb4\x05#G\xc7qYt\xd8\xb3!\xb7\x83R\xde)\xe5\xddP\xca;\xa5\xbcS\xca{gp\x88R\xde)\xe5\x9dR\xdeo\xa3oE)\xef\x94\xf2N)\xef\xdb\xaf\x1bJy_\x91\xf2\xee\x0f\x10\x9fO\xb5\x99[\xadnk\xf4>S\x8f\xb2\xdf\xb7R\x01\x94\xfdN\xd9\xef_6\xd4G\xd9\xef\x94\xfdN\xd9\xef\x94\xfdN\xd9\xefW\x9c\xfd>\x87\x86\x0fsQ\x0c+\x8b}\x01\x17o\x83\xda'\xa2\x08`\xd1\xb6py\xa4F3\xb4\x13\xd7\x00\xe7\xe1\x1b\xfb\x02\xd0;\xa2\x05\xbb\xed\x93\x84\xa5\x13\x96NX:a\xe9\x84\xa5\x13\x96NX\xfa\xd7\x86 \x12\x96NX:a\xe9\xdb\xaf\x1b\xc2\xd27)\x1f\x035^=C2n\xe3ixM\xe1vAx\xfavj\x80\xf0t\xc2\xd3\xbfl<=@/m\xbe\xbf\x94\xa9\x15\x05z\xba\xcbuKuj\x17:\xd9\x01\x80\xab\xb7&\xc2\xf7 \xdf'|\x9f\xf0}\xc2\xf77\x1a\xcf:|\xdf\xd9\x88e^a\xfb<\xc6\xe9@\xd3\x11\xed\xe75'\xbb\xdc\xb0\x18\xf7\xc6f\xd3\xce\x8e\xb9\xba\x07\x00\x89\xf3\x14\x92\x82\x9f\xab\x05\xe0\xfe)~\xee\x15\xbcK\x877o\xbd\x97Ef\xd8\xde\xcd\xb0p\x82i\xb7cG\x97S\x07\xc1\xe9\xdc@#`m\x0e'\x8a^1\xf8\x92KA\xa0k\x8b\xb0\x06\xe6W\xe8\x86\x06|\xbf\x17\xf5\x00\xc8\xe9\xee\xa2q\xfc|\xe5\xd4W\xded{\x1c\xc7\xcfY;\x9e'\x93V\x18\x02x\x15\"0\x96\x85\xb1L*i%O\xe5\xef\xc1\nr69\x8c\x06\\\xf5\x10\xdc\xa8jS\xe9\xf8\xb4\x1f)\xe1A}\x7f\xccq\x84Lq?\xfc\xb1\x0ey\x10b\xbf\xe9\x9e\xd8E\xb27\xfcB\xe4.@q@\xb9\xac\x03E}v*r\x1b,B,\xaa\x11\xd6\x11\xf4\x8c!\xdda!b!\xcfD1\xf4kk\xfdR\xc0c\xe9\xec\x8d\x7f\x91\x85\x13\xaea\xad6\x0f\xbc\x9e\x07O\x15?\x83\xc0\x8f?\x89\x8f\x05\xe4\x04kW\xb1\xa9\x17(\x0bqeo\xff\xe2\xba\x86D\x0d\xf4\x87\xdc\xbc\xa0\x9b\x19\xa9x\xca\xd5\xc4\xc7\x9e\xab:b\x99\x99t\xc5\xb5N \x9c\xff\xcak\xb4*F\x8f1N%\xc1\xa7\xc2\x90?\x0b\xd8\x18^\xfd\xcb.\xfc&\xe6\xf9 \x0e,$)\xe0\x0e\x84\x19\x11\x0dk\x95a\x0e@\xd8\x8f\xdcB\x00\x0f\xc3\xc3\xbb0\xa2~\xb50\xfa\x91\xf2+\xacJ\x17h\x03\xfeh\x00{\xe8\x95=\xad\x95\x1a\x0f\xf4z5\x1d),\xa9\xd6\xad\xa7\x01U\x16!8\xe0\x93\x0d\xaa\x95\x0d\xe85\xaa\x8a\x04\xb5\x18N\xd3\x87@\xe6\x07h\xe6\xd1P\xe3f\x8f\x95j\xe4a\xbdZ\xc3\x91=w\xc7\xed\xb9\xda]m\xd8Q[:\x8bWd\x1cb\x92\xc0\xd5\xd9\x88sI\x07\xab\xed\xc3W\xd0\x98\xacD\xb2\x12\xd7\x92CV\"Y\x89d%\x92\x95HV\"Y\x89d%\xee\xd9J\xc4\x83\x03\xdb\xd8\x8a\xf7\xcc\xbc\xb5\x88\x9b6\xa6\xaf\\\xd6r\xdc\xeb\xc1\x012\x1f\xc9|$\xf3q;\xa1'\xf3\x91\xccG2\x1f\xc9|$\xf3\xf1\x8e\x98\x8f\xfd\x85\x84\xc2]{\xbaZCTi;\xac6\xe9\xa1V\xe9l\x1b\xabt\xde&\xed<6%.\xe2\xb4\xf4\xb7U\xe0\xf1\xc3\xb0yV\x1f\xde\xc6V\xfdE\xdb\xf7\xe1=g\xf3\x90\xd9Jf+\x99\xadd\xb6\x92\xd9Jf+\x99\xadd\xb6\x92\xd9z\x85f\xeb\xe5\x8c\xcd\x9c\x1b\xeb\xd6\xc4F&\xe5\x9c)\xe9\x96\x87\xaa,\x08\xd0\xef\xcdU6\x123\xdd<\xa5\xbd\xda\x82<\xe1\xc6\xfa\x8a d+\x92\xadH\xb6\"\xd9\x8ad+\x92\xadH\xb6\"\xd9\x8ad+B?MCj7c\xb1sK\xbb*\x0br\x8b\x809Hy\xb0\"G\xb3\xa0\xac\xfa\xb5\xad\xd8_RO\xaf\xd3d\xa4\xd08\xd9\x8dd7\x92\xddHv#\xd9\x8dd7\x92\xddHv\xe3\xcd\xd8\x8d\xb7%`^Y\xa0;F\xca\xd3K\xc1\x9a\x91\x9a\x8f\x9e\xb3-\x83\xe7\xc1\x8e\xa5\xb09\x99\xb4d\xd2\x92IK&-\x99\xb4d\xd2\x92IK&\xed\x8d\x9b\xb4;\x1a\xa2\xb8J\xf8(\x15\x1b\x17&3\xac~\xc9\xaf#_,\xb7\xc0\x0bF\xaa\xdadl\x06\x05\x14;\x0d\xc8\xf7U\x1fT\xa3\xec\xd6o\x9e\xa4\x80\xee\xb8\x02\xba\x94v\x10\xc9\x10\xefr\x00#{\x0b\x0d1\x9f\xbc\xddvF\xf1v\x88u96\xef}O\xcf\xa0=\xe5\xd9\x90s\xb9\x92\x1cr.\xc9\xb9\xbc\xf9\xfd\x91\x9cKr.\xc9\xb9\xdczG%\xdb\xee*l\xbb\xdb\xee\\J5\xd9\xda\xb7t\"\x1a{\xbfp\x85Y(\xd5\x84\xbc\xc7[\xbf;\x92\x86\xb9\xe3\x1af\xcb\xe5\xef\xfe9\x9c3[\x0e>\xc1\xaf2Y\x1f\xd0\x0c\x9b\xf4h\xc6d\xb2\xb0\xfe\x9d9\x80\x96M0l\xf6\xb5\xf8\xe7F\xd8\xc58\x92\xfb=\xcb\xbd\x17\xba\x1d%\x7f\xd1=\xdfi-\x88d8\x9a\x0der\xa5k@$\xcff\xc7\xcf\xf7%\xfb\x8e\xc6\xf5\xad\x08\xf2 \xc8\x83 \x8f/\xd3\xa8#\xc8\x83 \x8f;\x0dy\x90]Fv\xd9\xb0R\xd6K\xad1\xbcD\xcd/\x9c\\\x14\x1dE1sn\xac\xbf'\xd6\xef\x87]\xe6\xda^\xcf\xfa,\xdfzh)\xecy)\\6\x03y\x9f%\x19p\xaf\x19\x8ex\xcaU,V\xac#6.\xd3\x94\xf9v\xc1\xd6\xc5\xb7\x17\x96\xcb\xcf\xf0\xf33\xdf\xe7\x9e\x16\x0c\x19\x81\x9b\x18\x81\xa4>nP}\xec\xb00\xfd.W\xcb\xdc\xb2\xe5\xe9\xf7\xb7m\x16(\xeejO\xb1kZ\xa5\xb4Ji\x95n\xbbJ\xe1\x9e\xec`\n\xaf2B\xe1\xc2lp\x83\x00\xf2k/\xc7_\xc4\x05\x1c\xc7\xd9/\x1a\xe8\x87\xb0\x94Q\x95\xa1N\xb2x+e\x11\x8cS\xd3)\x85'\xf0\xc8\xdf\xb6\x8cN~\x993|a\xd0\xe9\xed\x949\xbe\xb3/\x81\xac\x07\xb3\xba\xddX\x17\xb1\xf0a\xea!OS}\xeevKD\x89\xc4&\x13\xd9r\xa3H\xb0o\xa3`\x9b\x99\xb2Sae<\xc4\x07\xc3\xd1,\xe8\xdc\x0d\x032U\x0fA\xf4G3\xe66\xf53\x11~\xe8\x88\xd1\xbc\x0d/\xe1zx6\xc3\xff\xdd\x9f\x92n\xf3a}\xfbR%\xa2HgRM\x86[\xe8\xf7y\xf3\xe8}\xd5\x0b{\x85\xfbW\x1d\xdc\xa9\x9e4\x98y\xcf0\x19\xa0{\xd9`}\xa4\x90\xd5\x80-\xb6\xe6\x83\xfd\xfc\xfe\xed;6\xe5g\x02\xe3\x00U\xafi\x08\xa5@\xfb\xe1\x12co\x9e`\x987\xc0j\x02\xa1\xf5\xe7\x10\xfa\x01\xf4\x18\xd0\xd9Xg\xa3`\xde\xe9q\xa4&<\xcb\x98\x99\xf2B\xb0?\xb2\x06\xechK\xc3\xfe\xc8\xcex*\x13nu\x11p\xe8\xddb-V\xda\xd4\xb5*\x8d\x8fq4\x10\xce9A5}\x0c\x00\xc5\xc0\xde\x8e\xa7\x8e\xc7\x91\xaa\xc2+\x1e\xcd.U3\xc2\x82\xcb\xf3R\x11\xa9\xaaZ7\x86\xa3\xe6\xe6\xaf\nLE\x8a[h\x9fk\xa9\xacsB\xea\xa15\x02;]\xb8yk\xb5\xb9\xcf\"\xa4\xac&\xecL\x16\xb6\xf4\x08^\x99\xb3\xf3\xa9(\x04S\xe2\xdcO\xa6k:7\x8b\xba\x90\x13\xa9x\xea[8\xbb\xbd\xa6\xd8\x94\xe3\xb1\xbc\x18\xb0\xa7\xb6\x0ej\xe9\xf1\xa2\x8a\x08\x90v\xa4*H\x1b\x01\xee8.\xb32\xc5\xaf\x01\xd6\x0e\xa2\x94\x1a\xed\xe3Re\x9e\x00:\xee^\xd3\x8a},E!E\xc1\x8cLD\x1f\xd0\xee\x19\x04\x16\x00\xdba\xdc\xb0q!D\n\x7f\xb5T\x12\xa1\xdc7\xba!\xddR\x94{~\xef3\xd7\xb3\xf9E\xea\xb9\xc8\x0b\x11;\xc1=d\xa5\x11l\xe9\xee\xc7\xa42V\xf0\xb5\xfb\xa5\xb9m\x1b\xe6%\x84\x8dvR\xdaIi'\xbd\xeb;)m\xa5_\xd7V\x9aIe\xab\x8dT\xe4:\x9e\x0e\xf3B\x9fI#\xb5\xea\xc6I^\xb8F'U\x9b\n0A\xd4\xb6(\x84\xb2\xcc\xf5\xea\x84\x13:du\x87\xa8\x1c\x16\xd1\x94\xb9>\xf7\xb5\x17v\x8d\x7f\xf5\x94\xce\xeb\x95\xf9\x1e\x82F\x9bgL.\x8a\xa5\xccY\xd4V0ss\x96\xb8.\x0e&ZOR1\x00\xeaG\xe5x\x10v\xf4\x0f\x0f\x90\x02x\xddLC2\x9a#\xdbmKZ\xc9\x98\xa7NZ\xb3H\xdd\x17\x83\xc9\xa0\xef\x06\x03;x\xd4\x1bD='\xddJ[\xb7\x0d\x8a\xdc\x8a\xe4\x01\x84\x94\x8e\x15\xcb\xdd\xf8d,\xfa\xcc\n\x9e\x19V\x9a\x92;\x8a\x9d\x81\xae\xb3\\\xa6\xee#>'\xd3\xed\xd6n\xf3KS \xddg\xc6\xb9\xad1\xf2\x92\xcd$\x1a2F\x84|=\x10\xeb\x0b\xe0\xd6S5\x1b\xb0\xbf\xe8sq&\n4\x90\xde\xbfy\x15\xaaA\xb8W`\xa1\x81\xd4\x0b\xf6ajm\xfe\xa1\x8f\xffk>\xf4\x99.\x98\xd2\x0c\x9f\xf6\x99\x9b\"\xb7\x1dk\x10\x1c\xa0\xd8\x19Qe\xce8\xd0\x16)#\x8a3Q \x89\x19\xcf\x0dr\x1b\xbe\xe8\x0c\x1f\x14\x07\x0c\xc5I\x0b\x8b\xd9m\xea:M\xf5\xb99t\xcc\xf9\x03;\x1e\xd7\x9ft\x0c\x04\x15\x93\x88\xa4\xa2\nL\x08c\xca\x0c\x92O\xff\xc0\x9e*\xf6\x97w\xefN\xd8O/\xde9\x1b\xc2\x8b\x07\xca\xc5\x0c\xa2u\x9c\xfds~\x8a\xdf\xcdr\xf1\xdb?\x7f\x8b\x14\x0b\x99\xab*p\x1a\x97)\x8c=/tR\xc6`j\xc3z\xc7\xef\xe5y*c\xee\xc9/\x04\xf3\xa0\xb4\x1ba\xcccH\x86\xd3\xce**\x84)Sk\xd8\x88\x1bH\x95CV3G\x1d\xf4\x0eV\xbc\x9d\x8a\xac1\xef N<\x0f\xc4\xb8\xbf\xcf\xb4t\x16\xd2\xcc\xbd\x8b]\x83X\x16p\xda\xbe\x1fZ\xba\x0e\xb8\x95#\x99J;\x83\xdcb\xe0\xf9H0X\x1a\xc5\x99[\xa0\xcc\x91\x81\xc9\x8e\x98\xf4\xeb$j\xc0\xee\xbf7\x82\x9d\x89\xc2\xe9W7\x107iN\xe8q\xd6\xb8\xe2\x13 |T\x08\x8e\xc7\xbe\xb0\x87\xc1\x03\x08\x91j+\x0e\xd1\x81\x19\x97*F\xd1p4x\xe9\xf7\xbb\x873\xdb\xce\xb8L\xa1$\x89\x97S=\x1e\xcbX\xf2\xd4k\x8eQ9f\x85p\xfa@`\x9a\xa1\xb4\xa1\x93\xca\xfe\xaf\x05j$&R)G\xce\xb9\xb4\xd3H\xb9'\x03\x9cg\x9eK3\x88u\x06\xeb\xed-\x88\x92a\xdaNQ4\xd5\xbc\x9c\xb3\xfb>qTd\xb9\x9dy\xd9{\xc029\x99ZH\x0f\x85\xafC\xc0\xb8\n\xf4z\x9b6\xe4f\x1a\x91qee\x8cn\xce\x86&\xd5\xbc\x1e\xfe\xd9\x89\xecH0\x8e\xdeSC\xb5\xb2y\xcd\xea\x95\x19\x1fi\xe7\xeb \x15~\xe6\xba\xf6\xe0\x0fO\xd5\xecCP\xba\x10\xbb\xe6\xc5H\xda\xc2 \xce\x8a\xaf\x84\x05\xcbS\xed\xd9\xccx\xa4\xdc\xea\x82\x15\x8e\xdf\x18\xad\xdc\x14\xaa=\xc0M\xc5I\x98\xe5T\x8e\xe0\xdb~q\x1bf\xca<\xd7\x05\xe8\xb1\x9c\xc7\xa7\x07\xa5r\xff\xe3\xb4\x17\xaeO\x13D\x06\xb5\xad\xf3\x96,Jz\x909\xc3\xd0\xd7\x94(\x80l\"\x943\xd2\x80\x02g+Ti\xff\xaeO\xe0\x93\xa3\xe8\xc5\x05w3\xca\x1e\x1d\xb2\x13\xf7A'u\xfe\xdb\xbc\x1a\xbeT\xec\xe8\x8f\x7f\x84\xf6\x8c1\xf6Rk6\xd6\x9a=a\x83\xc1\xe0\xcf\xf8\x9b\xeb\x94\xab\x99\xff\x17W\xb3\x81\xeb\xeee\xa1\xb3\xfbc\xad\x1f\xf8\xdf\x07\x83\x01\xfe!\xc7\xec\xbek\xf4\x1e>\xf5N\xdf\xff7\xd7\xea\x01\xfb\x84\x8f\x1b-?7\xa9|\xbc\x86\xca\xbf\xf23\xbe \x99\xec \xec\x0b\xae\x83\x95\xe4Is\xff\xa5\xd6\x838\xe5\xc64\xa9\xc3n]\x0b\xa4\xa2\xd1\xea\xcf\x0d\xb2Y\xa0\xfb\xbb5t\x9f\xcc\xecT\xab\x8ar\xec\xfe\xa5\xd6\xf7\x07\x03\xa7c\x1a\xbc\xd4\xfa\xd3`0\xf8\xec\x9fp5\xeb\xbb\xfd\xc3=\xceQ\xe3\xfe\xcc\x0b3\xe5\xa9\x1bN\xe3\xf3\x15\xfd\xf3\x9d\x85\x9e\xe4x\xae\x9f\xf7*\xab{\x82\xef\xc0tB\xab\xff\xf1\x84)\x99\xd6\x93\xd6\xe8\x1ef\xc7Y60\xa2\xb0>\xc2N\x0b \xec\xf3+\xf5\\\xa6i3{\xbe4\"R\xf7:t\xee\x813\xbe\x06\xf0\xc0m!\xf7\xdc\x0e_\xa9\x07\xa7:Bb:\xf23R\xd5\xf2T\xe9,X$\x0b\x16\\\xb5%\xf9\x9316\x18\x86\xf7\x0e\xeeE\xca\xeb\x86\xf0 \xb4s\x84\x9f\xc3\xa87\xd6z0\xe2\x05Pwq0\x1b\xfc\x1e\xf5p\xfa\xf0\xbf\x1d\xc9\x1f\xbc\x11Wi\xf5&\x0b\x06A\x84\x0f\x83\x80:f;\xa9\xad-\xa1\xb1L\x85_\xaeA\xa4ODa\xb4\xaae\xc6\x9b\xecp\xa6g\x08\x1cz\xc2\x1e\xfdy\xee\xa9\x9b\x87\xf0\xf0qk\xfd3Vw\x15\xf5\x80\xea\xa8w\xc8\xa2^\x97\xdc\xb4 \x1b )Q\xaf_w\x00d\xfc\xc23\xe8\xe4\x07\xfc\xfa\x8f\x8d\xe7\x8e\x90\xf9\xc7\x0dr\x8e\xc7~\x93os\x1ay&\x0d;\x17i\xfa\xf0T\xe9sL\x04\x9br@=1\x95\x0bE\xa1=\x91}\xdc\x05\xe7f\x17\x17J\xe33n\xfa\xd4\x84q\x9c\xbcH}\x001 \xb37\xd5i\xd2J\x1a\x03!s.\x86\x9f\xf5p6\xcbOz\xa4\xa0\x9bj~\xd9}'\xeba(\x0bvnpe~\xfb\xe7o\x0f\x0e/3'\xed\xeeZ\xd3\x02\xe3\xc1>\x1e\x0d\x1e?zl\xa2\x9e\xe7zo\xc3t\x80\x16\x8e\xb3y\x96\x0b\x08<\xe4\xfe;7D\x8fk\x80\xa2\xc2\xa7\x16\xd1\x9a\x9f\xa5\xb2\xb7%\xf3\xa5\xfd)\xfc\xbdJT\x04l\xb8\x1aH;\xdf\xd3\x11\xb0\xfa#\x8e\x15\x9bF\x01\xea\xb6\x15\x86\x0d\xff\xf0\x9f\x84\xa3H\xce\x11\x90\xfe\xec\x973\xad\x8c4\xc3M\x10\xa7\xf6\x97\x96\xbd\xb9\x08'\x8d\x0b\x08>\x08\x7f\x9e\x10\x9ec\x08\x01^\xad\x00\x89\x0d\xce\x82\xce\xbf\x01\x03\xf1_l\xfc\xea\x1cxv?\xe1\xb3>;\x17\xe2\xf4\x81?\xe6\x96\x94`^\x0e\xf1\x88\xd4P*$~5\xbc\xd6\x1d\x1eZ\xde\x19\x8c\xb4>\xa9\xe5\x7ft~=?\x15&r.!\xbc,\xfc\xc6\x02g\xe0\xe6\x08\x1c\xf3\xd8vAR\xcb\xa9\xc07j\x0c\xce\xff\xce\xb22\xb52O\x1dS\xacf\xe2B\xc4\xa5\xad\xe3\x15B\xc1I5\xc1\xdd\x84\xe1\xb91\xb7\xfcF3\xb6||x\x18Q:\x8aF%\xb6(\xb43\xf8\x83\xd8\xb4I\\\xd6\xb2\xb56\x9a\x8dX\xb3QX)RY\xe7\xf3\x82,\x0f\xd8\xb1\xf2\x1e\xe0\xb9.\x12\xd3\xaf\xbaB5l\x1c\xa3\x9d.vK\x0dT\xb8?\xd9\xb8\xd8\x95\xc1\xddA\x9f\xb3\xact2\xb9n%\xba\xae\xdd<\xac\x9d\x18\xdf\xb0\xad\x00\xaaq\xb5\x87\xc5\x1ak6\x84\xe8\xc0\xdb\x8f\x14OS\x1dcT\x05\xa2H\xa7\x8dc\x930\x0f\xb9\xd6\xe9\xb0>6\xb9\x9e\xb0\xb9\x17v%\x10\xc4x\x84xIE\xa0\xeb\xbbq\x86\xd3\x9fZ=\x13\xa9c\xa1\xafP\xb1\x01\x89\x0b\xaf\\\x1d\x91V\xb3\xaa\xf7\xea\xf8i3\xa8\x19\xeb,+\x95\xb4\xb3\xa1\x1b\xcczZ\xdb\xed\xaf\x94PT\xd7\xbe{\xe0-@\xe4\xfd\xde\xb9\x90\x93\xa9\x85\xd3ts\x8c\xaa\x8e\xf0^\x02j^z\xf8\xb7\xfar\xc7\xa3\x05\x90\xe2WOc8\x11\\\x19V\x08X\xf8_}\xde>v\xcb\xb81r\xa2p\xf0\xd2\xfa\xba\x03\xfe\x994\x08\x1b\xc1\x04ZQdR\x89%\\F+\",s\x7f2\x1a\xf9\xeb'\xc03\xb79\xefm\xea7\xe10\x9b?\xe4\xac+5S\xbd\xe5\xacL\x941\x18)vk\xaa\x81\x02D\x02\xba7\x90\x02\x10\xf5\x18b\xb8\xfe\x8c\x02H\x88k\x03\xbe\x83\xe7%|\xc6Qp\xc8\x16v\xdf?Dj\x99\xca\x1d,\xae\xac?\x843\xdb\xf7\x0c\xc39\x03vx\xe3\xab\x1au\xabG\x88f\xe3f\xb0\xd1\xc6\x19\xe2\xfe\x9bv\x8a\xe1r\xbf\xa9\xbb \x0f\xedD0\n+\xbeV1\xa3\x85 \x15\x9a\x85\x1b\xc5\xa6\x18\x86\xa6\xbcAJ\x11\xa9\x8d\xd4\x84\xa5\x88\x14E\xa4(\"E\x11)\x8aHQD\x8a\"R\x14\x91\xa2\x88\x14E\xa4\xf0o\x8aHQD\x8a\"R\x14\x91\xdabN\xae5\"\x95k\x9d>\xaca\xc9*8\x05\xb8\xc2P\xaa\xb1\xeeu\x05\xa8\x9e\xbb\xc7\xc7j\xac[1*\xd7\xd9=\xc32n\xe3\xa9c\xfc\x84\x97NY'\x88${\x84g1RUu\xb6\xaf@U{\xb0\xab\xdb\x02\x826\\\n\xf6\xb9\x11\xc0-3\xbb\xa3\x07\xc0\xb5\x0d\x0f\xe6\xac\xc4\x1d\x1b\x89\xec\x04\xd3l\x05\xd3l\xeeH4\x99\xbc\xd3B\x13\x17V\x14\x8a7\xe2\x0eC\x10\x80\xee\xc0\xf0\x0b\xdf\xfa84\xfe \xdaV\xab0\xf4VG\x1ap\x11v\xac\xba%]\xedm\x0dr\xcbw\x9f\xca\xcdVK\x0d\xb7\xca\x84\xb5\xeb\xfab _\xce\x80 n\xfe\xa5\x19\xe6\xa2\xc8\x85-yS@FZ\xa7\x82\xab\x05\x07\xb2\xd9\x1c\x8f\x91\x8dS>q;\x88\x99\xeasg>J,\x81Y\xb7\x02\x84G=\xac\x7f\x80\x99r^\xfd\xc2\x8f\xa6\x89\xf3\xda\xa9\x90E\xa8j*>z\xfc\xaa:\xaap>\x95\xa9\xc7\x96\xbc\xfe\xad<8\x7fd\x0c\x83\x96\x03gr,\xfd\x08\x80^\x8d\x0fAT\xb4\xaa\x01Z\x15\xde\x04\xcbq\x19m|\xc2\xa5\xaaKg\x06j\xdcf>\x96i\xeal\xafc'.\xa18\xb0\xb3@\xd1\xd5\xafCp\xb0\xcfO\x84\xdb\xeb\xf1\x1d\x96p\x99\xce\xdaqV1\xb4\xa8\xb9\xfd\xec\xb6\x1e\x80}\x01\xe7\xc3j\"\xaa\xe8V\xd1\x08\xaf\x02\x8e\x14\xca\xfcJ\xe3\x0fia\xadT8\xd2V\x1dx\xd3P_\xb5y\xc3\xc5j\xe9\x84\x03Cp\xb6k\x88\x0dkR_\xe9\xf8\x14\xf4\xc5;o\n\xf1\xca\x9b\x87o\xc2[}\x86'P\xab\x13x\xff\xc7\xff\xe0\xaf \x9b\x97{\xa1\xca\xcc)\xa2g\xb3\xe7u\x19\xbeg3\xdf\xfa\x17\xed^\x85_~*t\x99\xf7~k\xec\x0f\xedw\xda2\xde\xa6\xb5\x19\xce\xb3\x0d\x00\xa2&\x1b'/v\x86\xb4\x90\x00\x01\x8d\x0482\x0d>b8#\x1c\xb8\xb3\xad\xaa\xd3\xcb\x92:\x02\xef\xf0\xff\x18\xe2m8N8\x93\xdb*\xc3Y\x0d\x11@/\xc0e\x02R\x14\xa9\xaa\xc23\xab\xbaD\xef\x02\x80S\xa5\x01\x89r\x0e$\x14\x94\x9e\xe7)\xcaI\xa4>\xb4e\xe2\x03\xf0\xac\x96\xc9U\xeapy\xb9\xecw\xe1\xfdj\x90\xa30\xbcP\xca:\\\x96\xd7\x1cS]\xb4:Ru\x17[\x0f\x8a}\xa8\xc5\xfa\xc3\xc0\x1f\x8b\n\x87~=\x83m\x93\xc2\x1a\xe0t\x1f\xa8\x10\xc2\xee\xd3\xa4\xd0\xdb\x91V\xde\xb8\xc7\x9a\xc6\xb6(\xe3\x06\xc6\xf9\xb1\xfdE(\x0b\x9c\xc8\xf1X\xc0\xb9\xb08\xbcl\x06\x91\x9a\x9b;\xde\xbc\xcd\x1e\x7f3,\x0e\x81\x8b\x80\xdb\xf7Y\"r\x81\x87_\x03,\xddZVT\xf5{\xe3Rr\xb5\"\xc0\x82\xcf\xb2\x99(\xe7?]U\x83\x06U\x04\xb0?\x14n\xf6\x1b\xa2\xdfq\x8f\xb8j\x05R1-\xc8'\x84a.\x8c\xfb\x1c\x86aw:\xd6]\xbfZe\x9e5\xb3zj-\xe8\xbe\xa3\xca\xcc\xa7\x13\x0ds.\x93\xa1\xee\xbc\xd1c\x95y\xd3\xd5C\xf8p\x9d}\x85\x9c\xf29X-z\xbc'\x1d\xa9X\xbbY\x82\n\xd8\x8e\x88\xcf\xfd\x1e\xee\xc2\x9b\xe4\x86-P\xd5zu\x91\x9c.B\xaaJ\xdb\x0dBT\xa4xZ\x08\x9e\xcc\xdaF@2\xa4u\xb3\xdd\xbaY\xe0\x1d\xec\x93\x9d\x0b\xa6i%U\xdc_\x18\xfdO\xc1\xe0\xe4\x8a!\x93\xb1\x1f_\xc8\x1d\x0e\xcdW\x1d\x19\x04\x01Cv\x88\xcc%\x0c\xea|\xaa#e\xb8\x95fJE\x97\x0eYX\xd2\x9buJK\xfaF\x97\xf4N\xebla\xda\xbb\xd7\xd9+\xdf,\xf8\xba\xed\xc2\xbb\xf5\x06 \xa6\x15\xc8\xed\"\xce\xec\x16\xd6B?\xfbZh\xdd\xe3^3\x91\xed\xbd\x8a\xc4\xfa\xf6\x8a\xf5\xe6G\xea\xe6\x8ec,\xad \xed\xa4\xb7\x8a\x90\x98\xdbr\x9enu;\xcc\xe4\xdf\xe6P\\h\xdd:\x16WWOCG\xd3y\xb6\x95p\xb7\xce\x0c\xe0\xb5_\x91\n\xc7\x12\xfd\xd9=v\xd2\x9e\xa6p\xbdZ\xa2\x85Q\xff\xdf\xff\xf3\xffZ\xc6c\x8b\xe1\x0b8\xa9\x16\xbe\x12)i\x8dH\xc7}6*-+8@\xc7\x98\x0b\xd9\x81\x9d\xb4!\x1e0\xe5\xb1Y\xa4\xc2\xb5d\xcd!\x0ez\xb4?\xdd\x9e\x85l\xca\\\x14\xe3\xb4\x94\xc9\xc2\x85\xdd\x89H\xc5\x84\x034\x91\x0esm\xd0\xb3?\xf8\xe4\x7f\xd7\xd5U|\xabk\x86\xf24\xc5\xc8^iDq\xcf\xe0\xe5?\x05W\x13\xc1\x8e^\xb1\xaa_\x94\x1e^\x08V\x93\x84\x87\xe5\x92E\xa5\xf0\xde\x88\xe2H\x83\\C\x9e\xe3\xdb\xea\x95\x93\xd0\xdf\xf3@\xfd\xbe\x94\x050M\xa7C7\xec\x8a}\xc3K''T\xe5.\x97_\x84\x08'\xef\xfc\xf764\x19\xfb[]\xdb\xd0\xa7\xfa\xe1\x9b\xa9v\xaazJUO\xbf\x8c\xaa\xa7\x8eG\xa0P\x9dRY@\xe3\xbfv<\xdf=8\xe3\xa9Pv\x88[\x16\xb1\xa8\xeb\xd6)2\xf9\xb66\xf9\xe6\xe7\x9a\xce+\xd2yE:\xafH\xe7\x15\xe9\xbc\"\x9dW\xa4\xf3\x8at^\x91\xce+\xd2yE:\xafH\xe7\x15\xe9\xbc\"\x9dW\xbc\xaa\xf3\x8a\xdd9*\x0b\xb0\xff\x8e\xd9*\xebsSV\xc4$J\x15`(5\xd9&,\xb1u\xf8\xe0}\xe3C\x14AX\x0f\xd5S\x04\x81\"\x08\x14A\xa0\x08\x02E\x10v\x81\xc7)\x82\xb0\x96E\x14A\xa0\x08\x02E\x10(\x82@\x11\x04\x8a P\x04\x81\"\x08\x14A\xa0\x08BE?E\x10(\x82@\x11\x04\x8a 4\xc8\xa1\x08\xc2%\xe6\xe4K\x8c \xa4\xe9\x90\x1b#,\xb8\xcb+O+\x14b\"\x8d\x15\x85H\x9ag\x11\xf0\xe5\xc5\xb3\x08O\xd3\xf4)\xf6\xbb\xa70A=*\xbb\x13t\xb0\x02@r=/T\xcc\x82\xd1b\xb5,\x958\xdf\x08\xee6\x12\xde\xe0\x16\x0b\x93\xd6\xb0*\x95\xb3\xacJ\x01\x81's.\x8d\xe8\xb0\xf4\xb1\xd3\xc6\xa5\xb8\xba\xa5\x8c\xa4b\x937'G\xf5=\xb9^s4\xae\x17\x88T\xac\x0b|\x0e\x8a\xab@\x12+\x1d\xe3\xf4\"8DM\xfaA\xb5\x84\x16ouV\xd3P\xdb\x1f\xcc\xa9J\x01&\xf93^T\x82\xfb\x08\xee#\xb8\x8f\xe0\xbe\x0d\xe7\xe4\xb2p\xdf\x92;\x1a*Hhp*f\x0b\x06\x91\x07s\xb8_YX\xe6\x1aA\x8b&*0\xa8\x90\x1f0x'\xce\xb3\xab\xee<[\x8d\xeb\x0c\xd8k\xa7v\x9cg\xa3\xc7\xce\x1eu\x0e\x8d.\xd8\xa9s\xafj\x97\xcf\x08;\x08\x89u\xd0s+\xb3n\xccS\xb3\xd9U\x12\xbe\x8ep\xbf\x8b\x01\xf8\xf1\x05\x1ex\x9a0\xdf\xab\xccD!\xe3@g\xb8\x89\xd0Q\x88&\xeaT(\xe6\x99V\xaa\xca\xdc\x1eD\xea\x18zH\x851\xf5\xe8\xd1\x16.\x8d\xe3\xd2\xa9X\xc5\n\xef\xfcF\xea\nYQ]\xac\xd0\xc9\x8cTfr\x91\x17\xf0+k]\x89\xb6\x08\xa9\xa1\xd3\xd3\x94\x15T\xc6\xee)\x08\xc1\x00TA*\xc6\xd6\x1b\xfc\xd2\xe2\xaa\x0d{\x1b8`(r\xd8\x99\xe3\xc4h\xc6\x04\x8f\xa7\x8c\xe7\xf9\x0d\x8c\xbf\x01\xff-p\xa1\xf1\x8c\xd5'\xbamQ\n\xe6\xfe\x08 \x84\x15P\x10\xc6\x0e\x99u(\xd2R\xc5i\x99\x88Hq\x16\x87+\xe5\xbax\nPS\xc3o\x83\x1b\x11**\x1do\xdf\x1f\x9bA\xa4\xe6H\x82\xad\xbc\x10\xc6\xe3n \x96\xb5\x1c;Q\x1d0\x94H9Q\xbahHn\xa4pD;\xb08\\b\xbb\x84\xa3\x85p\x0e\xee\xa2\xd3\xe5\x7f\x9f\xe7\xa4l`\xb4\x85X\"T\xae\xa7p\xefa\x91\x88\x02\xfdM\xa9bq\xc8bm2m\x1e\x9a\xe4\x94};\xf8\xd3w\x97\x19\xcf\x8e\x99\xb9\xf5\xcf\xc3\xfa\x94\xf8\xeap\x89\xed\xb8j0\x13\xa9Nf\x8d(J:\x0b5\xc4#\xd5D\x96\xabC\xcd\xc8 \xa5\xadX\x0c\xad\xbcs\xbd\xd7\xf9\x9e\xcf\x1b\x84\xed)\xba\x82w\x9f\xcfq\xc8.\xc4/\x08g&\x9c\x99pf\xc2\x99 g&\x9c\x99pf\xc2\x99 g^O&\xe1\xcc\x843\x13\xceL83\xe1\xcc\x843o8'\x97\xc5\x99\xb7\x06J\xe08nV\xa6V\xe6\xa9\x14\xc5Zx\xc4\xc3!um9V\xbf\x8c\xe6\xa3\xd7\x12\x005\x17\"vMD\xae\xe3iG\x9e\xa9\xfb\xf8\xcf\xf5\xb7\xf7\x84\x80\xe0\x90\x86\x8drym~\xac~\x1b\xc66D\xccp\xa5-Z_\xb4\xbd\xacLgH\x9b\\8\xec\x0bo\xf4\x03\xd6\xfd\xea\xa4>\xf2\xdc<\x02\x0dPG\x17\xe5\x15\x8c3o\xaf:m\xfb3\x8c\xfe\xe1\x8bj\xf4\x0f\xeb\x19ao\xa00,\xeay7N\xe6\x14\xf3X\x14&,\x17/\x0e\xe7\xba\xb0Sv.\"e\x0b\xc1\xad\xd3\xd5\xafN|\x9dPn\x9c\x0b&\xd5\xc4\x97\xea\xc4\xbb\xfb|w\x03\xf6\xe2L(\x7fa$87\xee\xff\xdcL&\xce\x91\xaa\xf1g\xbf\xbd\xbd\x93\x99xx.\x9c\xcb \x92\x87\xfcL\x14|\"\x1e\"\x15\x0fG<\x06\xbfi\x1c\xfc\x0ceeQ\xd7\xe6\x04{\xd6\x7f\xf7\xe1\xa3\x01\xbb\x0f\xde\xddh\x06\xf5$\xc1\xc1\x99r\x0b\x16\xb0\xdb\x1e\x9bc\xe6m\xef\x92\xe5\x85\xd4E\xa4\xe0\xb1a\x858\xe7Eb\x1e\x04\xff\x1f^U\xfa\xbc_\x0d\xc8\xb9V@\xfd\xafOO\xe0\xfeK\xa9\x8c\x15\x1c7h\x93k\xeb<3\xe9<`l7\xd2\xa5Jx1\x1b\xb0\x97\xba`\x89t^\x02D,\x00\x99p{!\x9c\xcf\xaf\x8c\xf5\xd2\x96\xceE\x95\x96\xc5\x18\xa8@\xcfq@\xc8\x1d!w\x84\xdc\x11rG\xc8\x1d!w\x84\xdc\x11rG\xc8\x1d!w\x81~B\xee\x08\xb9#\xe4\x8e\x90\xbb\x069\x84\xdc]bN.\x8b\xdc-\xabo\xa8t\xb6}\xf2T\x85\xf8\xec\x92;\xd5\xaa\xd0\xb7\x14\x0c\xec\xacH\xd7\xaf\xaa\xf6\xc91\x93\xf6^\xa3J\x1f6\x9a\xab\xd2\xb7\x04\x13t\xce\xc7\xbe\xd0\xc0\xb9\x02\x85s\xf6\xe9\xad\xaa!\xb8\xb4\x82\xe0v\x95\x14#\xd5.\xa5\xd8gi\xee\xb1;\xa7\xbcY\xaeu\n\xfeX\xdc t\xbe\x01AM\x045\x11\xd4DP\x13AM\x045\x11\xd4DP\x13AM\x045\x05\xfa j\"\xa8\x89\xa0&\x82\x9a\x1a\xe4\x10\xd4t\x899\xf9b\xa0\xa6X+\x05p@gi\xc3\x83O\xfeV\xe6\xcf+\x81\xa8\xae\xa2\x86\xac\xea\x19\xac\xf6&\xea\x81g\xf7\xf0^\xde\x91\xf3\xa6\x17 \xa8\xa3\xf0nG\x11\xc4\xbd\xa1R\xfe\xf3k\x1b\xde\x82R\x87\x84\x03\x11\x0eD8\x10\xe1@\x84\x03\x11\x0eD8\x10\xe1@\x84\x03mB&\xe1@\x84\x03\x11\x0eD8\x10\xe1@\x84\x03m8'\xd7\x83\x03y\xd0e\xc7\x8bT\xbbJ|\xed\x80\x0c ce\xc6\xad\xe8\xae\xe24\xc4\xf2L\xc3\xd1l\x08V\x19\\\x00[!\x1f+\xcf/\xd6\x85\x9dxm)\xe2\x1d\x9a\xbe\xff\n3\nO\xabO8\x8d\x83\x07\xbaR>\x12\xce1pN\x88\xa7\xb4\xcfF\"\xe6AW\x9es\xa8\xab\x16\xf34.SH\xc2i|\x13\xb5`x\xa6\x13\\;\x81G\xbe6\xbc_\xa5PB\x1d\x8e\xfb\x8d\x9b\xa9W5\x93\x16\xcf\xfd\xd5\x10\x16v\xb8/\xa4\xaa\x1ei\xfbS\xf8{\x05\x18Y\xd8]\xc2p\x82\xce\xcbtR\xa6@\xc0\xea\x8fdR\xc9\xac\xcc\x86\x854\xa7\xc31\x8fm\x17\xd62o\xe4v\xbc\xc4\xaa\x0bM\xe3\xd2:\xdf\xe7\xf5\xdb\x9f_7k\xb3\xa1\xca\xd6c\x96\xe6\x88p9w\xb4\x88\xd4\\>\x1c\x14\xe7\xf2[\xdf!\xfb\xfe\xffF\\\xc0\x7f\x90\xb9\x0f2\xff\xc1s]\x9c\x1a\xa8\xcb\x05\xf9h\xa2x8\xe2)W1nk>\xb7.`\xac\xe0\x8bIu\xcf0q\x91kS\xe2E\x02g\xbc\x90\xba4x\xfc0Rg:\xe5`\xebJa\xfa^3\x9d \xf0*\x03mn\x80\xf7\na\xa4\xb1\\\xd9{\xd0Ixk\x86\xfe@8\x08\xe9\xa5\x11\xd5Nc\x82BI\xb0\xc6\xc0q\xb2\xe8\xdc\"\x81l\x04\xb2\x11\xc8F \x1b\x81l\x04\xb2\x11\xc8F \x1b\x81l\x81~\x02\xd9\x08d#\x90\x8d@\xb6\x069\x04\xb2]bN.\x0b\xb2m\x8bZ\xad\xca\x1d\xeb\xc4\xb2\x9a\x89b\x90\xa2\xd4\xc4\x0b\xeal\xac\x00&\xf8_t\xd1\xafs\xc4\xfa\x98<\x14)[\xc8<\x15\x8b9[]\x97\xff=\xcd\xf6z\xb6p>gjK\x90\x80\xb2\xb1\x08(\xb2\x04\x14\x11PD@\x11\x01E\x04\x14\x11PD@\x11\x01E\x04\x14\x11P\x84\x7f\x13PD@\x11\x01E\x04\x14m1'\x97\x05\x8a\x96\x15\xb8\xf2p\xcd\x95fc}19^\x9dh\x999\xf8\xb4\xc0\xb6\xd5\xe5\xb8\xc0w\x9c6\x0f/63\xc0\xb44h?\xc1U\x80\xcd\x13\x98\xfe#\xab2\xc3j\xc0\xcc<\x9b=\x0fo\xec\x0b6\xebF\x17\x0b\xb81\xf1\x12H\xca\xa2\x94v\x016\x8bR\xd7\x0d\xebt\xa0\x9e\xeb>\xffU\x80y\xfd^\xe3\xbaOL[#\x16\xcd\xe1\x9d\xf34w-D\x7fA\xa8\xfb\xb8\xdb\xa1\xcb\xd8{\xcfVW\xf7\x0f4\xd6\x7f\xa4\x1a\x9a\xc5[3\xa1b\x9f7\xab\x8cu\xafd<\x9eJ\xe5\xd1\xaf\xd2\x88\x82\x8d\x0b)T\x92\"b\xe2s\xfe\xe8P\xf1n\xd3\x8a\x8c\xa3\x05\xb0\x8eS\x84\xf7\x13\xdeOx?\xe1\xfd\x84\xf7\x13\xdeOx?\xe1\xfd\x84\xf7oB&\xe1\xfd\x84\xf7\x13\xdeOx?\xe1\xfd\x84\xf7o8'7\x8c\xf7oY\xd2\xf0\n\xd1\xf4m+\x16\x060\xbd\x05\xa1\x1bY\xe3g+k\x18j%\"U}nS`\xfdvT\x0c$t\xfd\x0e#g\x84\xae\xafe\xd1-G\xd7 \xfb$\xec\x93\xb0O\xc2> \xfb$\xec\xb3\xc3v'\xec\xd3\x12\xf6I\xd8'a\x9f\x84}\x12\xf6I\xd8'a\x9f\x84}\xee:'\xd7\x83}~\x89Y\xc9\xa5\x9aCR+0o\xe7$\xe5\xbaK5\xb9\xba<\xe5\xf7MB)S\x99\xb0\xd4\xcb\x00\x85\x84\xa5\xaee\xd1-\xc7RC\xc2m\xa5l(Wy\xf3\x8953e\xa7\xc2\xcax\x98\xea\xf8\xf4\x12,s\xdc/\xd2\x99T\x93a\xb8\xe1l\x15\x8e\xe0//\x9bg\xda\xfb\xaa\x17\xf6J\xc7\xa7\xec\xf8\xb9\x1bu\xd8J\xfc\x13\xc7\xb73\x01W\xcc\xdf3L\x86\x821\xd2\xb0j4\x91rO\xcb|\xc0\x9e\xd6?\xe2\xa5\xf4?\xbf\x7f\xfb\x0e!,\xae\x9a\xbd\xba\x87\xa0\x0f\xa0\xfdp\x89\x08,,\x05\xd7\x18\"y\x81\xd0\xfas\x182\x04[\x0b\x96E\xac\xb3Q\x98t=\x8e\xd4\x84g\x193S^\x08\xf6G6\xd2xS\x99\x13\xfb\xd2\xb0?\xd6%o\x98W\xec\xa8\xacT2\xb42[\x0d\xd2$\xdc\x8a\x87\xd0\xaa\xae\xdc[\x01Q\xa5\xaa>\xd5bL\x99\x1b\xf4?x\x0c\xec\xedx\xeax\x0c\x11\xcf\x12\xecN#\x10\xbfU\x00\x8az\xd8\x04!$\xb7\x1a\xbc\xc9\xb5\x9e\x87\xc18\x0b\x1c\x0co\x06\xe3\xa0=\x7f\x80\xec9\xb9\x8e\x14\xe2\xc9\xce\x9a@\x84\xbd\x1e\x9a\xb3\x81\x8d\xe5\x85\x15I\xa7\x02\x0b]\x82\x90I\xc3\xe2B\xa0\x91r&\x0b[\xf2\xd4\x8f\x99\x9dOE!\x98\x12\xe7~2]\xd3\xb9Y\xd4\x85\x9cH\xe7\xe3`\x0b\xb7\x9ak\x8aM9\x1e\xcb\x8b\x01{\x8a\x94\xba9q\x84\xce\xf3\xd6\x7f_;\xa7Ia)$4\xd4y\x1c\x97Y\x99z\xd0\xce\xea\x02\x18\xcfS\xa3\xd9H8z\xcb<\xc1\x1b\xec\x14 \xb5\xceh\x94\xa2`F&\xa2\x0f1\x85\x19 \xdf`L\x02f]\x08\x91\xc2_\x8dUT\xe6\x14\x93ZM\xa1\xa5\x98\x14\xc5\xa4(&E1)\x8aIQL\x8abR\x14\x93\xa2\x98\x14\xc5\xa4\xf0o\x8aIQL\x8abR\x14\x93\xdabN\xae'&uu\xf9\xf8{\x8dH\xb5\xcaNH\xad.\x17\x89\x02\x03\xaa2\xe9\x9a\xa0\xf3\xb2\xc8\xd3B\xe0\xe9\x9d#\xa8\x06\xba)\xe0D\x01\xa7\xcb\x80\xee\x14pZ\xcb\xa2[\x1fpj\xad:\\\xd1\x97^vm\xa8|\xf7%:\xcf\xbb\x85W\x02\xcc>\x12\xf1\xf4\xbb\xc7\x0f\x85\x8a\xb5\xdfZ\xe1ieQU\x91\xf8\xcd\x16\xfd\xfcw\x17^\xd9\xec\xbb\xd5k\x18\x8b\x99\xf2Bl\xf01l\xe7\xc5\xbaI?\x00\x0b\xf8\xb0\x10\xb1\x90g\xdd\x01\x81Z\xacj\x13\xc4S\xab\x95\x87+\xfc\x05\x8fS'\xf2\xa3YC\x80\x06\xec\xd82i\"g\xed\xa00k\xd5\xba\xbd\x00\xe0\x17\x00\xdat,\xc1\x8d\xc6\x0e\xddp5\x84\x1dr}\x8e@D\xfbL\x19\xf0\xc0\xdf\x00\xb9\x89p|\x9d\xda\xa1\xa9\x13p1\xba\x8f6\xae\xe9\xb4\x9a5&X\\\xc4\"\xb7>.g\x1b@N\xa4\xc2e\x9bs&\xa3\x17 O\xbfa\x99.\x9cn\x91\x16\xf07gH\xc4\xa9t\x1f\xaa\xac\x01\xaa\xa0u\xa9\xf9\xa5\nZ\x9bq\x8a\"v\x14\xb1\xa3\x88\x1dE\xec(bG\x11;\x8a\xd8Q\xc4\x8e\"v\x9b\x90I\x11;\x8a\xd8Q\xc4\x8e\"v\x14\xb1\xa3\x88\xdd\x86sr\xdb#v;\xc4\xd9J\x95k\x9d\x0e\xcf\xa7\xd2\x8aT\x1a@\x01\x96\x1f\xe8b\xae\x89[\xbbU{g0i\x9d2\x89\x966v\xb7xl\xeb=\xfc\xfek\xf5\x95=\x85\xcc`\xacr\xa3\xe8\xd8\xa2\xb9\xea\x0f+P\x8a4\x01.\x04\xb8\x10\xe0B\x80\x0b\x01.\x04\xb8\x10\xe0B\x80\x0b\x01.\x81~\x02\\\x08p!\xc0\x85\x00\x97\x069\x04\xb8\\bN.\x0b\xb8t\xa1!\xdad\xdaHs\x00\xa9\x1cc\x1e[]\xcc*8\x04R:\xe0:N\xa5\xb3\xcf\x07\xbc\xb4S]H;\x1bf\xc2\xf2\x84[\xde\x89\x8f\xc0\xc9\xff\xa7\xa1\xed\xcf\xbei#md\xf2\xe6\xe4\xc8\x9f\xbeF\xc5\x03\xbab,l<\x95j\x12\xa9%\x1d`rr\xce\x0b+c\xb7\xa81\xe3d\x11]\xe9~}_ K7\xd3\xd6\xbc\x93d\xb2\xb3F@(\\p\xc4\x15\xca\xb7\xb3\x95\xc7\xe8!\xc2K\xe0\xd4T\xb6\xabG\xbaB:ag\x9aX'\xab\x835kX\xd6\xe2>\xf6\x13\x1c`p\x9e\x82\xf9\x1d\xa9\x98\xe7\x1c\\\x1f\xf7\x9ev>h\xc8\x10\xf2r\xe5'\x8c\xbd\x01\xa3^\xe9s\xb7\xa8\xf0\xf4>l<\xce\xb7}\xeaF\x11\xa9\\\x14\x994\x06V\xf8\xa8\x04\x17$O\xb9R\xe8\xe2\xb9\xa1_X\xa1\x12\xfc'nV\xb6,:\xedn\x90\xf6\xeeqV\xa9qA6q\xcb\xf0?b\x02mY\x08_KC,\x95\xccZ\xa01\x01\x89\xd0\xb0-\xd1\xb0\xcd\xfd\xb5\xcf\x9f\xd7\x03\xc8\x8d\xe3\x19W\x05\x1ao\xa3&G\x00\n\x0c\x8dP\xc9p\xaa\xf5i\xa7\x92|\x06\x8d\xde\n\x95\xfcE\xeb\xd3\xa7>\xdfw\x8d\x8e\x8c\xd4DX\xc8\x8d\x05\xc7\xd3\xbfT\x88\x894V\x14\xc1;\x87t\xe21\xa4c\n\xb7\x87j}\xba\xa8$;\xbf\xbf/\x1d\x19k\x93\x9ds\x93\xad8=\xd1\xbd\xac;G\xb1\xdb\xaanwEK\x9a\x96tf\x86\xe3BgC\xa8C\xa3\x8b\x83O\xfe\x8f\xee\xc3U D\xe6e\xa1\xb3#l\xb6n1W\x06\x0f\xe3i\x1a\xa9f\xfa\xac\xaf\xbd\x83n`\xe3<\x16l\xf1\x07\x9e\x8c%\x86O\x93\x84}\xadg\xe4\xde\x06RU\xcd\xd1\x8a]\xbb9\xa07\xe2c)\x8c\xddne\xb7&\x85\xd6\xf5-Z\xd7q%\xa67\xb7\xb2\x81\x12\xd3\xb9\x84O\xe0\xd1\xcau\xeb\xbd\xcd\xfa\x1ce\xf3\x1b,\xd3I\x99\x8a{&R\xf5x\x17\x97\xe9\xbb\xc6+\xf8\xc9}\xad\xd3\x9a\x17\xedO\xe5mFX@\xa9\xc2\x80\x02v\x82\x83u\x04l\xa0\x0c\x86\xa1\x98\xd7p,.u,\xec\xab8\xc3\xd0\xe9\xa5\x1dy\x0e\xbe\x14m\xcbf,\x84\xf7\x89\xe2)/&U\x98\xab\xaa\x9f\x06\xf8\x18S\xe2\xdco2\x18Pu\xafI\xc3\x92\x82\x9f+\xe6\xf69x\xe7g3\x81\xef\x08\xf8\xe4=\x03&\xa4\xf3\xe4\xf0T\x17\x84\x84\"e\x0b\xae\xccX\x14E\xed\x7f\xc5:\xcbJ%\xed\x8ca\xca\x03\x8c\xa15\xf1\x13n\x86\xb1V\xa6\\S\xa8oI\x15\xc4\x16\x0f~\xe2\xe6\x08\xbbj\xb1b\xc2\x0d\x8b\xb5\xb1x\xfc(\x94\xaf\xe3u\xad\xbaA\xa4 \x0c\xee\xfeOy\x07\x12 &\x93\xf3\x8c%N\xbe\x0b\xa1b\xc12\x11O\xb9\x92\xc6\x87\xaf\x848d\x10\xa7:<8\x98H;-G\x00\xcd\x1ci\x93\xfd\xcaM\x86\x9a\xe6aP5\xd2\x98R\x98\x83G\x8f\xaa\x1dfag\xc3u\xdf<\x9a\xd5\xda\xca\x1cs*c\x1e^8\xf0\xca\xc9i$\x94$\xda\xbfnp\xffZ\x99Hd/\xc6B\x98j\x87\x19q#6\xb9g\xafJ\x1f\xe2i\n\x01\xeaP\x1c\x13\xcfTz\x8c^\x16,\xd6\x05\xce[\x82\xc7\"u\xda\xb5\xab\\\xbc\x14\xc2<\xe3F\xec\xf5\x0e\xbd\xf6\xe0\x17\xcc<\x92\xd8\xdb(\xb1\xa8\xa9}:X\xc01V\n/\x98\x04Z\xa7\xc7\xcf\xdb5#\xa0\x9e\x04\x14\x05Uyi\x97\xb8('\xee\xc5d_\x12\x8ad\xafdf+\xb7\x8d\xe4\xf5F\xe4\xf5\x06=\xffe\xcb`,\xc4\x10\x95o\xa7\xec\xbf\x14\xe2\x1d\xaa\xe6\xa2S\x85\xbb5\xd1\xcc\x04E\xc3\xac\xad\xcb#\xd5\xa5\xcc\xd9\xb1e\x89\x16\x98f#U\x9c\x96 \x86`+u\xde\x0f\xa1*n\x98\xb4\x86\xe9s\x15)\xf4L\x84J\xa0\xd8\xef\xc2Z\xab\xe8\xdd\xd7Jk\xf3s71[n\xf1o\xb3\x8e\xe7m\xb0\xc0\x9aV\xa5\x0c\xf0\xed\xea\xc8\x07g1z\n\xc0~7\x83\x90\xda{\xfc\x9c\xe5\\\x16\xc1\x92\xccxq\xda\xf0\x04\x9d5)R9\x91\xe1\x10|i\x04Z\x98\xf6\x02\x04\x82\x1b#\xa0\xba\xc6[/\x84\x83H\x1d[\xc3\xf2B\xe2\x19\xfbL\xa4:\x81\xc4\xadD\x14\xf2\xccY\xd8\xd3B\x97\x93)\xe4\x9d\x81=\xeb+<\x87T\x01O\xd6\xc0\xa7\x13x\"!\xf7\x0e\"4\xbeGn \xc0\xa2\xc7 @@\x87\xa1\x12\xc77\xab\xe4\xb6\xd1F&\xd7v\x08b\x81\xd5\x9e\x96\xd9\x93\xa0\x1f\xde\xe6\xda\x9e\x80\x08\x15\x8d\xebF\\\x17(Y\xc6\xb9\x98\x82\xc7\xd3f\xb4\x00%vU\x14\xb5\xeav_*d\x8bE\xde\xef\xd5\x1c\xeb\x98\xaf\xcfu\xf4\xb4\xc6\x16\xab\xf1\xcd\x03\x8b\x93\"\x8f\x97!\x8b\xa0v\xa1V|\xaem\xa4p\xe5\x06g\xad\x91\x07\x88\x0b\x1e'\x8e\xd6\xd8\x8d\xad\xb1\x0d\x0c\x89\xab+\xda\x16\x03\xd6\x08\x99\x11\xd5\xc2\xf5XI\xb7\x11\xf1\xd4?l\xadSH\x89\xb9\x90\x06\xe1\x8a\xf0\xfa\xfc\xa6\xf5V\xaaX\x1c2\xfc\xe4C\x93\x9c\xb2o\x07\x7f\xfana\xe1>\xad\xdf\xdf\xcb\x92m\x0e\xff\xaa%\x82NM\xd0\xa9 :5A\xa7&\xe8\xd4\x04\x9d\x9a\xa0S\x13tj\x82NM\xb4\xd8N\xa7&\xe8\xd4\x04\x9d\x9a\x80\xff\xe7Mv:5A\xa7&v;5Q\xc3E\xc1\xa1\x05\x93\xb9\xdbU\x07\xd8a\xe2\x13G\x16\xbd\xec\xfa\xd9\\NM\xf5\xb3\xd7\x03M\x0f|\xb5\x8f\xac\xc4\x85\x1d\x9e\x8a\xd9&\xb6Z\x18Hx'\xa4\x1b\xb8?\xbd\xa1\xcd\x8d/\x13}\xc2'\x01\x0c\x1b\xe0\xf3\x10gpo\xb8\x1e\x1c\xd9\x82e\xdaX&\xc0\n\x06\x13\xb9\x17*\x94n\x82\xd5\xd5$\xc1+@\x0f\xfc\xa1\xcal\x846bpA\x1a\x96\xf7\xb8E\x1cp~\x08\xafE\xea\x9c\xc3\xcd\x8b}\x80\xb6\xbd[d\xe0\"K\xc7\xed\x04-\xe8si\xc4\xf2\x8c\x8c\x00\x9bl\x93\x93Q\x819\x8d\xac\x0c0\xdc\xbb\x91\x1a\x02\x01 \xf2!\xc8\x87 \x1f\x82|\x08\xf2!\xc8\x87 \x1f\x82|6!\x93 \x1f\x82|\x08\xf2!\xc8\x87 \x1f\x82|6\x9c\x93\x1d!\x9f5)$5\\38\x15\xb3\x05\x83\xc8\x03+\xdc\xaf,\xcc\xef\x00\x1b\xd9\xe3\x16\xde\x93\xafP\x180x'2$r\x86c\xdd\xcb1\x96\x01{\x1d\xca$\xe8\xb1\xb3G\x9dC\xa3\x0bv\xea\xdc\xab\xda\xe53\x02\x12\xafw\xcbtY\xcc\xac\xe9w1\x00?\xbe\xc0\x03O\x13\xb0A\x95\x99(d\x1c\xe8\x04\xf1\x8b\xb1n\x05\x9a\xa8S\xa1\x98gZ\xa9*s\x1b\xf2!\xddo\xa90\xa6\x1e=\xda\xc2\xa5q\\:\x15\xabX\xe1\x9d\xdfH]!+\xeaD\xd2.f\xa42\x93\x8b\xbc\x80_\x03\x8a\xb4\x0c\xdeB\xa7\xa7)+\x1esr\xdbV\x8e\xa6\xe8\xf1\x98\xa5bl\xbd\xc1/-\xae\xda\xb0\xb7\x81\x03\x86\"\x87\x9d9N\x84d?\x9e\xe770\xfe\x06\x14\xb7\xc0\x85\xc63\xc7\x0b\x90\x04\xcdlQ\n\xc6\x9a\xb7\xd2\x05\xa0 \x8c\xdd5\xf4\"\xed\x13\xa2#\xc5\x19\xdeM\x17\xc0\x919\x9e\x02\xd4\xd4\xf0\xdb\x9c\xaeiC\xac\xef\x8f\xcd Rs$\xc1V^\x08\xe3q7\x10\xcbZ\x8e\x9d\xa8\xfa\xbb\xcc\x98\x9c(]4$7R8\xa2\x1dX<\xd2:\x15\\-\xe3h!\x9c\x83\xbb\xe8t\xf9\xdf\xe79)\x1bxi!\x96\x08\x95\xebI`\xd6\xb9.\x12Q\xacB*/1\x9e\x1d\x12\xe5\x0e>\xad\xbc\xb6\xd4\xa3\xacu\xc6\x9c\xff\xb7\x07\x1dk\xc8\xc2\xf7\xb2\x98\xcb\xea{\xd8sF\xdc\xfa\x86\x96PPBA \x05%\x14\x94PPBA \x05%\x14\x94PPBA\xf1oBA \x05%\x14\x94P\xd0-\xe6dW\x14tUz\xd4\x0e\xd9QT\xb2\x86R\xa0\xc8\xf9'\xe7\x9f\x9c\x7fr\xfe\xc9\xf9'\xe7\x9f\x9c\x7fr\xfe\x17\xe9'\xe7\x9f\x9c\x7fr\xfe\xc9\xf9o\x90C\xce\xff%\xe6dW\xe7\x7fu\nT}%s\xdb^\xe1s\xf7W\xd8\xc6\xf5\x14V\xfb\x12\xdac\xacY\x7f\xa5\xa5\xfc\xba\xd2\n\xb00\xf5pe\x19\x9e\x9f\xa1\xcd\xfab<\xd8Wu\xd0o1\xb5\xa0\xdd\xd1\x9e3\x0c\x08} \xf4\x81\xd0\x07B\x1f\x08} \xf4\x81\xd0\x07B\x1f\x08} \xf4\x81\xd0\x07B\x1f\x08} \xf4\xe1n\xa0\x0f\x9d\xb9\x07m\x1f{\x9b\x14\x8497\x9f2\x11\x08\x0b ,\x80\xb0\x00\xc2\x02\x08\x0b ,\x80\xb0\x00\xc2\x02\x08\x0bX\xa0\x9f\xb0\x00\xc2\x02\x08\x0b ,\xa0A\x0ea\x01\x97\x98\x93\x9d\xb1\x80\x15wfu\x85\xfd\xd7_\xec\xfd\xb1\x14\x05\xdc\xec\x96\xa6l\xd5\x05\xddOK;\xfd\n.\xe6\xce\xf8\xc50\x13\x99\x1eVn\xb3Yiy\xd6\x17m\xd9\x8b\xa1\x91\x93!\xd6=\xd9\xe2\x95\xdf\xc50\xd6\xc6\x0esQ\x0c\xc1\x8e\xdd\xec]\xf7\xad3Q\xc8\xf1\x0c_\x17\xc9\xe3\xef\xbf\x7f\xf4\x1f;\xbemD\x9c?\xfe\xfe\xdfO\x1fm\xf4>]\xe0L\x18\x14aP\x84A\x11\x06E\x18\x14aP\x84A\x11\x06E\x18\x14aP\x84A\x11\x06E\x18\x14aP\x84A\x01\x06\xf5{\x05BM\n\xbe\xec\xc8\xc9\x1b\x7f\xc6$\x95\x06|\x9b\x0fOK;\xd5\x85\xfc\x1d\xbd\xb5>\x83w\xd1\x12w,\xc3\x7f\n\xa7\xb6\xea\x7f\x16\x8bh\xd5O\xf8\xc9=!U\xf5\x80\xedN~>o2a}sK\xb0\x00\xc1\x02\x04\x0b\x10,@\xb0\x00\xc1\x02\x04\x0b\x10,@\xb0\x00\xc1\x02\xf87\xc1\x02\x04\x0b\x10,@\xb0\xc0\x16s\xb2#,\xd0\xef\x89\x8b\\\x16\xf3.\xeb\xa2A\x94p+\x1eZ\x99\x89\x0e\xeb\x05\xdcv6\x91g\xc2\xb0\\\x14\xd9\xff\xcf\xde\xdf\x7f\xb7q#\xf9\xc2\xf8\xbf\x82\xab\xfb=\xd7\xce\x0eM\xc5\xc9d\xf6\xae\xf7\x9b=W\xb6\x94\x8cvlK\x8f%'g\xcf0\x97\x06\xbbA\x12\xab&\xc0i\xa0\xf52y\xfc\xbf?\x07U@7\xfa\x85d7e[\x8e]?\xe4Df\xe3\x1d\x85B\xd5\xa7^ \x8d\x81\x0b\xdfj&nERX\x81j\x9fg`\x9e\xa1\xe1\x01\xaa\xbag\xae\xf5\xf1A\xab\xf5\x9aZm@\xbb(\x81\x07T\xd9K\xb8\xc1-u\x845\x948\xc3\xf07\xad\xb9\x8a\xdf[ \xde\x0f\xf4\xa6\xf5\x83\xbdi\x8d\xd0\xd0\x10'\x95\xa3:\xdd\x90\xb3J/\x10\xcb\x12*E\xa8\x14\xa1R\x84J\x11*E\xa8\x14\xa1R\x84J\x11*E\xa8\x14\xfeM\xa8\x14\xa1R\x84J\x11*5`O\xf6D\xa5v\xa4n\xf5\xb8\xce\xf0\xa7]\x83\x9e\x1c\xbdT\xeb\xe1\xa2\x0f\xd2\xd6\xca,\xa66\xe8\xcfMa\xea\xcc\xab?#\x16\x17\x1b\xe1\x0b\xbc\x00\x8e\x00\x0d \x98\x03\\\xcd\x83[+n\x93\xa5\xa3\x85\x85\xbc\x16\xca\xd5\xf6\x02\xdb\x87\x182=\x04N\x0f\x81\xd3C\xe0\xf4\x108=\x04~\xbf\x87\xc0\x9bn\x93\x87\xfe^9\xfc\xdd\xff\xd1\xfd\x1e\xf8\xcf\xf8\x11\xc1\xed*uw\xe5X _\xea\xde\x95\x95eCl\xf0\xa0\x0c\x0d\xfeQ\x1d)\xc3\xfd\xde\x05p\x87\xfb\xba\xeb\x1b9`\x12\xd4MP7A\xdd\x04u\x13\xd4MP7A\xdd\x04u\x13\xd4MP7A\xdd\x04u\xfb\xef\x04u\x7fvP\xf7\x9e\x0e\x98\xc1A\xaf\x8d\x0f0qk\x85J\xdd\xd6\x80\xae\x8c\xc7d\xa6\xed\x12\x05\"|\xcaL\x94\xb7}\xf0\x97t;\x1a\x1c&\x03\\ b\x9dT *\x18ip\x9aP\x12P\x14\xfcw\xdbc\xd3\x03\xd7\xdb<5\xeb\x81\xa1\xe4\xa1\xf9\xa5xh\x06\xe8i\x88\xa3f\x1d\x04#?\xcd^\x18\x99%\xf0\x8a\xc0+\x02\xaf\x08\xbc\"\xf0\x8a\xc0+\x02\xaf\x08\xbc\"\xf0\x8a\xc0+\xfc\x9b\xc0+\x02\xaf\x08\xbc\"\xf0j\xc0\x9e\xec ^\xf5\xf2\xd3\x14{?\x94On\x8a\xe4\xa6Hn\x8a\xe4\xa6Hn\x8a\xfd\xe6\xb3\xb7\x9bb\x1e\xdc\x14\xf3mn\x8ay\xc3Mqg\xf6\xc78\x05C\xb7\xa3bN\x8e\x8a\xe4\xa8HX/a\xbd\x84\xf5\x12\xd6KX/a\xbd\x96\xb0^\xc2z \xeb%\xac\x97\xb0^\xc2z \xeb\xfd\x8c\xb0\xde\xaf\xd4Q\xb1\xf9d\x059*~!\x8e\x8a\xf9\xbe\x8e\x8a99*\x0e\xc1\xc8,\x81W\x04^\x11xE\xe0\x15\x81W\x04^\x11xE\xe0\x15\x81W\x04^\xe1\xdf\x04^\x11xE\xe0\x15\x81W\x03\xf6dO\xf0\xaa\x97\xa3bN\x8e\x8a\x83\xbd\xd3\xc8Q\xb1\xa7\xa3\x1e9*\x92\xa3\xe2\xc0%\xfeZ\x1d\x15g\\]\x95~\x8a3\x9eq\x95\x08s\xf8\xbb7\x08t{(\x1ee\xd9s_\x12 \xff\x00\x11\xfa\xea \x1fe\x19K\xb4\x93P\xdc\xa6s\xe6\xd8D&\x18O`\xaf\xdb\x1e\x8aQ\x93\x0f\xe5\x9f\x18&\xbf?\xfa\x9a\n\xa5W\x9d\xc0._\xb9iw\xdef\x8d\x89\xbd\xd02\xb2f0\xab\xaf\x84\xf2b!\x83\xf6\xc3\xe9q\xe2\x8a\xd3\xe9\xa1e \x9d\xd7g\x97'\xcf\x00\xbc\xc4\x1f\xbd\xe4(A\xf7?U\xd6K\x1f%\x9cQ\x13AP\"\x9f(#\x17\x8a\xdb\"\x17\x86\x05\"\x03\xd7R\xbd\xd0 \x11t\xbc\x19\x16\x16.\xb0\xd6\xf2\xdf\x9e\x0e\x10\x9d\x94\xca\xecc\xd0\xb1\xa0\xb1\xc4<\xc3\x92A\xe7!\x0d:\xd1I\x1db\xce\x89y\xc6\x9b\xf3\x17A\x05$k\xce^\xd6\x9c\xfex\xe3\xfb\xf7\xbb\xe4q\xcf\xea[W\x9b\xff=ln\xf8\xa7\xd5>mzy\xcc\xe7:\x1f\x934?X\x84#i\xbe\xa74K\xd2\xb0H\xbf\xbb\xe0W\"\xb9wKt~\x93\x86Hs\x81T\xc8-\x87\x04\xb9\x96 \x87\x87\xa99\n\xf85\x8c!\xc1\xb3\xe2~\xd9>\x8c\xfe,\xb2\x1c\xc8 \x0ei\xc4V\x86h\xc41\x0c2\xb0D\xe4z\xaeZ\xfdH\xe3kA\x01\xbd\xf4uY\xcd\xf7\xdfom\xf8\x16\x98|\xb4\xbd\x1dwG5\x99h\x83\xb8k\xabHl\xd3C\x8dcc\x13U\xbb\xab\x0b\xbf\x14~\xb3d\x82\xa2\xfa8\x1epD\xf7M\x8a\x0c\xc3\x8fw\x0f\xc5\x02\x1c\xb9\xe3\x1f\xae)\xb79\xbb\x89\x1e\xae\xf5F\x0f\x91\x98\xf0\xb8\x82\x9d\xdc\x97j\xf6@\x01\xd1\xfe}\x8b\x9b\x94J\xb3\xcex'\xd8\xdd8lX\xb0\x04\x08\xfci+\x16\x0ba\xdc5\x19 2\xe5\x10&\xca\xd7B\xa5\x17y)\x82\xfax\x11\xec\xeat\xa36\\\x02\xef\xee\x98\xc7r@\xcd\x89\x1b\x14\xaa\xc7b\xf1\x8c\xbd\x80\x16\xd8\x91#N\xd7\xbd\xb9[\xcdt\x0f\xa7w,W\x81F\xaeA\xff[p\xc76K}\xa3\x18\x04\xcc\x04\x9fY\xe8\xf2\xe8\xf2\xec\xd57\xde\xa9=\xe1\n\xe0/X2\xf0O\xc2\x06\xfd\xf2l\xd3\xfc\xdb\x14]\xdeS\xbb z\xa2x\x8bb\xeb\x8d\x95\x17[\xe9d\x19\xddzR!\xf3\x0b\x911\xc16\x13]~\xd0.\xd9i\xbe\x04;M]F\x19\xa2\xdc7\xe4'\xb2\xd6\xf4\x13s>\x8d\xacMV\x12\xb2\x92\x90\x95\x84\xac$d%\xf9@V\x92\x06\xa2p\xf8;\xfc\xd0\xed\xf84\x00Y\x00\x83I\xa5\x11\xd4\x10\x85\x0d\x80\xc2\xe7\x82'\xec.I\xb0\x01\xc1\x06\x04\x1b\x10l@\xb0\xc1\x1f\x136\xd8\xa21\xee\xad0\x92\xbe8\xf0~\xfb4\xfa\"r\xc4\xeeKs\x8b1\xd6\xfd\x1e[I\xf6\xb7\x0b\x0f\x10\xc5`\x06\xb06-\xc9\xeb\x1c>\xd5$\xaej\xbe\xee\xa8\xdfBSl\xa5\xd3\"\xebx\xaa\xff9WW\xd8\xc6CIW\xd5\xe4\xb6\x973B\xa5S\xa1\x9c\xf2\x90\xeeO\\\x1b\x84''\xe6\xb4\x9a\x8e\xd4\x80&\xe7\x15*=\xc1\xf2h\x8c\xae\x93\ng\xf1`\x99\xb1\xdc\x16\x86=\xbeY\n0{\x07\x83\xb64\x13\xe5\n\xbaR\xdf\x04\xee\x03\x0ca\xbaa\xb2\x9bG\xe4\xe9\xa0\x8e:\x96t\x10\xd8R\x8d\x146p;l\xa9\xa7\xf5\xb9\xc4F<\x99U}\x12\x8b\xfb\x84,\xae/#1\xc5z\x9d\xddu2\x92K\xa7q_\xc0\xf7\x1a7AM\x1c+\xb28\x80\xa5\xcdK\xa2&\x1e\x8a\x99T\x13\xdcoc6\xb3\x87/\xca\xdf\xad\x12\x11\xfd\xc6\xca \xb0\x86m\x0e\xf7\x9f\xf9\xf0&\x8f\xad\xc8\xc6\xf6\xed!c\xc8}\x8c!\xa1{\xe0\x12\xd1a\x1d\"\xd2\xc6l\"\x12h\x89\xd9\x7f:fO\xf6\x0f\xb2\x7f\x0c\xc0\xff\xc9\xfeA\xf6\x8f\x81KL\xf6\x8fRV\xdej\xf6\xc0{\xf0l^\x13\x98#Q9\x0e\x0ci\x8b\xcb\xa1\xf6C\xc9\xca-\x89\xf6\xeb\x96\x89\xbb\xb5\xe1\xb0ICd\xa4\x92,\xc8\x19\xfb3\x12\x90\xf6\x04\xfc>L\x10\xc8`\xbe3u\x87C\x17v\xeae\x99\x1d*\xfb\xafX\xfa\x0co\x86\xfb\xeb\xef\xb5\xf6\x1e\x8aA\x912\xdf\x8bq\x912O\xca\xfc\x86\x93;\xe4\xd6\xda\xc8MH\xcd\xef\xc5m>\xcd-Fj>\xa9\xf9\xa4\xe6\x93\x9aOj\xfe\x07U\xf3\x1b\xe2\xf6'\xd0\xfa?\x0b \x9b \x80\x01\x10\xc0\xde\x92Ug\x03\x04\x0e|Nb\xd5g\x0d\x0e\x18qh\x85JE\xbe\x92\xcaV9\x1a2\x9d\\\x99\xc3\x8c[a\xba\xf1\x81\x9f\x85} _\x9f\xbb\xa2\xe5\x8b\xd9\x16\xd2\x85\xbb\xdf\x19\xb4\xd1\xe6Q\xf5\x8a\x0f\xc5\x9c`pS\x99\xee.\xb9\xe4f\xd9\x83\n`\xf3\xed\xd4\x08;]\n\x9e\xd6\x9e\xcc\xdeD}\x0d}p\xa3\xe3\xf3\xfbQ\xdfQD\xba\xdb9\xcf\xad\x11\xf6\xaf8\x98\xf8\x0b,\xfc\xe9\xb1k\x16\x96a\xf7H\xfb\xce\xc8\xbfl\x02\x05}g\xe8\x03 \xfd@,\xe4N\xcd\xbd9\xa4\xcd\xb2\xda\xe8\x80\xaf\xd7\xbdJv\xdc\x17\xca\x08e\n\xc3\x12\xbeF\xbe\x8d\xc70\xfc\x9c\x17\x99\xf7s^\xe7\xda\x91\x1ef\x16\x0f\xf3\x80\xd2\xf0\x8fd\xc9\xa5\x1aM\x14\xcap\xe8$\x9dE\x9f\x188\xf3\xa1\x8b(\xf4\x13\xb2\xf2c\x0f\xe1y\x91\xea\xa9\x9bGf\xa2\x8c\x05\x891\xe7\xca`j\xf2\x15O\x96R \x00d\xa0\xd9:\xe9VLk)\xe4b\xd9qev\xd1\x14\xbc`\xb7\xadd\xf4\xce\xdd\x08r\xbeO\xe9\xd8\x1c\x97k\x91\xe8\xd5J\xdai\xbf.\xaaf\\y\xdcx$&\x08\xfep\x04\xca-\xef\xd9\x18^N2\xe5V\xe7\xa6g\x9d\xd6\x00\xe698\x8d\x03\xed1]\xd8ua\xab\xdf\xd6\xb9\xb8\xc6\xf1\xb9\xce@\xa1\x1f\xdc#\xdc\xf3\xfe<\xf5\xaf\xc2\xd7\xeb\xfe\x85a\x1f\xbcb\xd0\xbf\x96\xb8\x96\xa9P\x89\xe8Y\xa3Z\xb9\x8a=\x00'{\x8f\x94\xa9\x8d\xc8\xa7!\x0d\xd4\xce\xd6\xda\xbc\x08I\xad\x86\x89\x96\xec\x02e\xfe\xcb\xf2\x82\xf64\x83Ge\x1c\xc8\xa6\xc7\x99\xb9\xed#%m^\xb2\xfa\x88/o\x0d\xaa\xb3\xe1 \x06`_(\xf2\"\xeb\xfa?\xfe\xf6\xff+\xb0\xa3?=\x1d\x079\x1b^i\xcb2fo\x0d[\x8a\\\x80:\x07\xa45f\xecW\xf1(\x17\xec\xbf\x0bc\x19_\xe4B\x80&\xe7\x1f\xb0\x82\xc0\x1cx\x97bA\"lz\xa1\xe4?\n\x91\xdd1G V\xce\xcbxJo\xafB_\x84\\\xf2L\xfeS\xa4\x13\x05>\xc4\x89\xce\xd8\xac\x98\xcfE\x1e\x0cY>\xc5!\xf6\x0e\xc9M\x03\xa51nY&\xb8\xb1\x13\xa5\x95`\x93\x83\xc3\xc9\x01K\x96<\xe7\x89\x15\xf9\x18\xdc\x9d\xdd%\xc2\x8cX\xacD\x15q\xf0\xf6\xcd\xcbG\x86\xad\xb9]bs\xa5\x1d\x02\xdf\xd2\x9a\x17\x19dp\xe2\x99\x1bsZO\xf9\xe8\xc6\xfe\x98\x1b&\xd5D\xbdsM\x1c.\xb4^db\x0c\xa3\x9f\x15\xf3\xf1q\x81~\xa0\xef\xbe\xc1\x11@\xf5*\xac\x07\x0eS\xc2\x95V2\xe1\x99\xa3\xd5\x90Du\xe4&\x03\x88\xef\xe4`<9p\xb4\x0d\x8e$I\"\xd6V\xa4\xdf\x80\x01\xefT\xb1\xb5\x9b\x9fL\xc4\x88Y\xc1W\xa6L\x14\x89\x86\x93\xb5\xcc\\'\xe1m/\xa9x~\x87\xce(wka\xca\x00\x8d\xbb\x89\xa7l&!\x00\xc1I9\x95\xc5\xd0\x8a[X\xad#u7f\x7f\xd57\xe2Z\xe4#8Wo\xdf\xbc\x0c\\\xb0\xc0\xfc\xb2\x13\x05T/\xd8\xbb\xa5\xb5\xebw#\xfc\xbfy\x07\xe6\x1b\xa5\x19~\xad\xd2\xc0j \x1cLm),+\xd6\xde\x849QF\xe4\xd7\"\x8f\x1f(s\xab\x0d=:q\xc1\xdb5A\\\x93\xe8\xb6\xc2\x1d\xcb\xcd2}c\x9e\xb9\xc5\xf9\x17v:\xaf\xbat\x0b\xe8\x1f\xabH\xcbQ\x01\xaf3\xa6X\x89t\xec*\x1c)\xf6\xd7\xcb\xcbs\xf6\xf3\xc9e\xf0\xc2y\xfb\xe6%\xd2\xc5\x1d\xf8\xc8s\xf6\xf7\xe6\x16_\xde\xad\xc5o\x7f\xffm\xa2X\x883Ta\xa5\xf1\x98\xc2\xdc\xd7\xb9N\x8bD0\xae\x90w`\x7f\x150\x8fQ\x1e\xdc\x0d\x1f\xc3.\x13\x9e8\x8a\xd5\xfa\xaaX\x97\x91 3nD\xea\x87\xe6:|\xfb\xe6%\xb4\xbe\xe4\xd7\xb0\xfc\xabh\xdfS\xdcx\x1e\x06\xe3\xfe\xbe\xd62e\\\xdd\xb9\xba\xd84\x90e.\xe6:\x17\xa3P\xd25\xc0\xad\x9c\xc9L\xda;\xa6\x84HCP\x13\x1c\x8d\xfc\xda\x1dP\xe6\x86\x11r\x90:\x02s\x145f\x8f\xdf\x1a\xc1\xbc\xa5\xc6M\xc4m\x9a#z\xdc5\xae\xf8\x02\x06>\xcb\x05\xbfr\xd4\xed[\x18\x7f\x03\x81 \xda\x8ag\xcc\xba\x13>/T\x82\xa4\xe1\xc6\xe0\xa9?)\xf2\x1c\xa2\xe6\xe2 P\xef-\x05Ae<\xf3\x9ccV\xccY.\x1c?\x10#0\x8a`\xd8\x96k\x04\x02\xd5\xe0V( \nB\xf6\x94\x1b\x0ef\x1ev_\xc6\xb8\xcf|-\xcd8\xd1+\x8c\xac\x01R2\x18<\x8a\xd1k\x0d:g\x8f\xfdu\x83\x81]H{\xdf\xb0\x15\xc8\xb431Q\x18&\xe74\x882\xbc\x02\xc34\xccZ$r.\x13f\xc4\xcaid\x89wd\xe8\xe7\x92\xdf\xe4\xc3\xaf\x1c\xc9\xceD0\x14F\xac\x9559k0\x12\xcd\xf4\xb5\x08\xa3\xf0;\xd7\x15\xc3\xf1\xeeH\xdd\xbd\xab\xaew\xae\x18\xcfg\xd2\xe6\x8ep\xb6\xf4\x12\x0e,\xcf\xb4_f\xc6'\xca\x9d\xaeFV\xe4\xcd\x97By\x07\xb8\xad8\x0f\xbb\x9c\xc9\x19\xf4]\xbeDc\x8a\xf5Z\xe7\xc0\xc7\xd6<\xb9:,\x94\xfb\x9f\xe3^x>M \x19\xe4\xb6z\xce\n\x8b\x94\x1eh\xce\xc0{\x89i*\x91\x00\xd9B(\x91s\x0b#p\xb2BiXsm\xc2:\xb9\x11\x9d\xdcr\xb7\xa3\xec\xe93v\xee:tT\xe7\xfb\xe6\xb1\x1f\xc6\x8b?\xfd \xbd/\x18c?i\xcd\xe6Z\xb3\x1f\xd9x<\xfew\xfc\xcd5\xca\xd5\x9d\xff\x17Wwc\xd7\xdcO\xb9^=\x9ek\xfd\x8d\xff}<\x1e\xe3\x1fr\xce\x1e\xbbBo\xa1\xabK\xfd\xf8\x7f\xb9R\xdf\xb0\xdf\xf1sT\xf2}<\xca\xefv\x8c\xf2?\xf95\xef3L\xf6#\xdc\x0b\xae\x81\xad\xc3\x93\xe6\xf1OZ\x8f\x93\x8c\x1b\x13\x8f\x0e\x9bu%p\x14Q\xa9\x7f\x8f\x86\xcd\xc2\xb8\xbf\xdf1\xee\xf3;\xbb\xd4\xaa\x1c96\xff\x93\xd6\x8f\xc7c\xc7c\xfc\x92\xe2\xa8\x1f\x7fS_c\x98@{\xfc\xee\xf3)\x0e\xff\xf8\xe4\xe2\xc5\x9b\xd3\xf3\xcb\xb37\xdf<\x0b3\xa8\x16?\xaa\xef[\x88\x06\xfe\xe7\x1d\x03\xffY\x871\xc3\xa0\x9f\xfd\xc8\xfe\xd7z6\xfeI\xeb\xdf\xc7\xe3\xf1{\xff\x85\xab\xbb\x91\xbb?\xdc\xe75r\xdcW<7K\x9e\xb9\xe9D\xdd\x97\xe3o6\x16Z\x92\xf3F;o\xd5\xaaj \xfa\x81\xed\x84R\xff\xe3G\xa6dVmZ\xd4<\xec\xce%$5H\xae\xca\xf3\x11nZ'\xd5\xaf\x9b'\x15]h\xef\xcah\xd7\xc2\x88\x89z\xd4\xc1s\x0f\x9d\xf05\x86\x0f\xee\ny\x14\x12Y\x07\xc6]Z\xbbq=CT\xbd\x0f\xff\xf4\x12IK\x82+\xaf$\xc6\xe7V \xb7\x06\xc1\xf0\xd1\xe1\xa3\x89\xf2\xbc!t\x81r\x8e\xf0{89\x98k=\x9e\xf1\x1cFw{x7\xfe\xe7\xe4\x00\xe7\x83\xe2\x01\x8a.\xd0\xf8\xe4\x00\xbe\x02\x11L\xd4\x7f^\x9c\xbd\x9e\xa8\x1f\x7f\xfc\xf1G\\-\xf7\xefJ\xd4\xc4\x1b@;Rc\xc8_Q\x92(L\x99)vQd<\x9f\xa8v\x15\x8ba\xa0%\x97\x1c1\xb1\x9a\x894\xad\xf8\xe5\xc8\xb3[5Q\x11S\xc3\x98\xbfw\xff\xc7\x0d\xf9\x9d\x17\xe2jJ[X\x82q \xe1g\x81@\xddb;\xaa\xad$\xa1\xb9\xcc\x84?\xae\x81\xa4\xcfEn\xb4\xaah\xc6\x8b\xec\xe0\xcf<\x85\x15\xfa\x91=\xfd\xf7\xc6W@y\xfc\xc7\xefj\xe7\x9f\xb1\xaa\xa9\xc9\x01\x8czr\xf0\x8cM\x0e\xba\xe8\xa6>\xb01\x0eer0\xaa\x1a\x80a\xbc\xe6+h\xe4\xff\x8f\xbd\xffG\xf4\xdd\x0d\xa4\xf99\x1a\xce\xe9\xdc_\xf2\xf5\x95\xc65\x93\x86\xdd\x88,{r\xa5\xf4\x0d\x86_.\xb9\xd3\xa9}\x00%\x92B}#Gx\x0b6v7\xf8\x9a\x97\xdd\xb8\xed\x03O\x11\xd8\xbc\x89z\x07d\x12vo\xa9\xb3\xb4\x16\xaa D\xe6T\x0c\xbf\xeb\xcc\xeb\x01~\xd3'\n\x9a)\xf7\x97=v\xb4\x1e\xa6\xd2\x92s\x83*\xf3\xdb\xdf\x7f\xfb\xe6\xd9}\xf6\xa4\xde\\m[`>\xd8\xc6\xd3\xf1wO\xbf3\x93\x03\xbf\xea\x07U\xc8a\x08\xee\xbb\x10\xf9\xb5L\xc4\xa0\xf0\xbe\xdf\x11\x1a\xec\x8eD\xfeY ,\xf0\xfc\x0e\x9d\xf8\xcb\x88d\xc4+\xdc\xea\xe0#\n\xd8Hg\xa0_\xad\x01\n\xf5\xdb\x05^|T\x9c\xb2\xa7\xbbZ\xdf\x19\x91\xff\x19\xf9\x9f}\x0d\xc7\x86\xfc\xcfz\xf4H\xfeg\xfd\xec\n\xf7\xf3?\xa3P?\n\xf5\xdbR\x91B\xfd(\xca\xe7\x8b\xbaz\xf7\xb0\xfa\xeeg^\xfe\x82\xa2|(\xd4\x8f\x98\x001\x81\xaf\x9c \xec\xeb G\xa1~\x11\xedS\xa8\xdf\xae\x92\x04\xb5l:\x0f}\x8f\x02A-\x04\xb5\x0c\xec\x91\xa0\x96~w\xeb\xfd\xa0\x16\xf2\xad\xfe,8\x02\xf9V\x93o\xf5\xa7\xf4\xad\xa6P\xbf]\xa5\xff\xf8aBk\n\xf5\xfb\x0c7f_\xa5\x95B\xfd\xbe:R\xd9\x9bV\xf6\xb8\xeb(\xd4\x8f\xc4Q\x12GI\x1c}\x18q\xb4+\xd4\xaf\xe6R70\xd8\xaf\xee\xcfG\xe1~\xbd\x0e\xac\xa5p?\n\xf7\xa3p?\n\xf7\xa3p?\n\xf7\xa3p?\n\xf7\xa3p?\n\xf7\xc3\xbf)\xdc\x8f\xc2\xfd(\xdc\x8f\xc2\xfd\x06\xec\xc9}\xc3\xfd\xba_\x18\\\x86\x00\xbb}\xde\x08\xec\xc0X\x7f\xdb3\xaeP\xe9TL\xc1\x8a\xbf!\xa2\xf0\xb5N\xc5\xa9\x9a\xeb\xda\xf3\xa6^\xb2e\xae6\xf8\x00t\xc6\x12\x86\xaa\x0f\x15F\xe89\xf6\xb46\xc7\xedU\x82\x1c8\x8d=\xb8\xb6\xd7\xf8\xae\x9f\xebU;\x9co[\xd9\xde\x0e]\x15\x06\xe4\xa7\xd9\xed\x0e\x95Ic\x85\x02X\xaf\xf3\xbb\x12\xf6F\xe7\x1d\xa3s2}k)\"\xc8g\xc9\x95\x12Y?\xa0p\xa5\x95\xbc\xea\x02\xfe\xdf\x8f\x0e@G\xd9\xbd\xda\xf6\xb6\xe5\xebY\xb5\x91\xaf\x93\xcd\xc0\xa5?\x8d\x91\x83Y\xff=\xc63\xdb\xd1#_\xaf\xa7\x1b?n[\xb7\x85\xec0\x11T\x9fg\x85\xcc\xd2)\x1e\xe8\xae\xda\xbac\xec\xcd\xda\xa9X\xdf\x03C\x03\x8e\xd4\xb1\xa9\x01f^\xe9\xb4\xc8\x04\x00Q[\xe7\xda\xaa\x11J\xbe\x1f9>\xb3\xadB\xb2\x14\xc9\x95+\x13c\xfb\xaf\xb0\x15\x19]\xfa\xee\x1a\xf8\x05[\x05n\x83\xe6E\xc7\xf5\xa6&\xbd\xda\xbcRU\xa3\x1b^\x9cnk\x93Q7\xad!\xb8\x7fDL\xaf\x04z\x83\x1a\xd8\xd1\\W\xf1\x12\x17\xfeG!\x8c\xdd\x00\x0b\x97L\x99\x10\xe1^\xd4l \x11&D\x98\x10aB\x84 \x11&D\x98\x10aB\x84 \x11&D\x18\xff&D\x98\x10aB\x84 \x11\x1e\xb0'\xf7E\x84\xf7\x02j\xcd\x9dJ\x9c\xe0\xb4\x01\xa6\xbd\xc0\xcf%J\x0b\xc8\xac\xaf\xd3 \xce\xfa\n\x0f\x85\xcdF\xd3\xf1\x05gZg\x82\xabn\x98\xc4\x8fv\xa0\xf7\\X\x14BI\x08%!\x94\x84P\x12BI\x08%!\x94\x84P\x12BI\x08%i\x8d\x9fP\x12BI\x08%!\x94$\x1a\x0e\xa1$\xf7\xd8\x93\x07AI\xaap\xef\x13\x03 \xac\xa0\xe5Z\x06\xab9\xcfL\xbf\x14V!\xcdw\xd7\x02`\xe7\xad5\xf0c\x82eP\xc5J\xe42 \xe3\x04\xf2s\n\xd9L\xa0\x80|\xb3\x14\x8a\xf9E+T)n\x8f'\xea\x14Z\xc8\x841\xd5\xecQ\x16.\xe0\x99\xbb+\xb1m)\xbc\xf2;Q\x1fp)\xaaw\xfa\xba\x16#\x93+\xd9^\x0b\xf8\xb5\x84\x0e7`[\xa8\xf4\xc4\xb4\xe2\x81&wm\xadQ\x14=\x9d\xb3L\xcc\xad\x17\xf8\xa5\x7f@<\xdcm\xa0\x80!\xc9acn%fwL\xf0d\xc9\xf8z\xfd \xe6\x1f\xe1p\xadU\x88\xbe\xb9\xb5\x00J\xd0\xcc\xe6\x85`\xee\x8f\x90 \xbf\x04\n\xc2\xdc]AO\xd2>o\xfcDq\x06\xad\x95\xe0HcM\x01jj<\xb6\x11\x01\xacR\xb1\xb7\xa7f\x82\x9dXk\xf0\x12\xacA\xf3\x0c\x9e\x0bX\xc8k\xa1\x186\xda\xe90\xd8\xd5 \xb9\x0c\x92\xcb \xe1\xb8\x84\xe3\x12\x8eK8.\xe1\xb8\x84\xe3\x12\x8eK8.\xe1\xb8\x84\xe3\x12\x8eK8n\xf9\x9dp\xdc\xcf\x0e\xc7%\x97Ar\x19\xfc$.\x83]\xa0\x119\x0d\x92\xd3 \x81M\x046\x11\xd8D`\x13\x81M\x046\x11\xd8D`\x13\x81M\xbe \x81M\x046\x11\xd8D`\xd3\x17\x046}\xe2\xf7$;\xdd\x85\xc8\x1d\x91\xdc\x11\xc9\x1d\x91\xdc\x11\xc9\x1d\xb15\x9f]\xee\x88\xa9t\xe45+\xdc\x8cJ_\xc4D\xafV\x85\x92\xf6n\xba\xd6\x1a\xe0\xc5\x96\x0f\xe2\x8bP\xe4\\\xeb\xac\xfe\x06o\xf8\xc2\\e\x96h\xa9L\xdb\xe5\xb0V\xff\xa1\x1c\x0d\xc3\xec\xec^\xf0k*\x94\xeex(\xf4\xfd\xe8\x80\xaf\x1cMw|j\xa9\xed\xc7\"y\xa1ed\xe0`V_ \xe5EC\x06]\x84\x13\xe3D\x16\xf7S\"W\x14_\xa8\xcf\xbe\xde]4\xa5\x98?\xe0\xcf\xd2GWT\x9ah.\x12!\xafE\xda\x8fOT\x9d\xeeGU_\x1d\x1a\xe6\x89\xdf\x87\xf5\x01\xf1w\xd0Q/6\x16\x84\xad.\xda\xae\x98\x1a\xf1\xb4O\xc7\xd3\xba\xc5\xac/\x08%\xda\xc1\x84ua\x8d\xe5\xe0\xe24\xddf\xe0/)\xf6\xac\xaa\xd04\x16\x04H\x18\xb4\xb8\xd6\x12l\xe1\xc6\xed6\x1f\x8a+\xb7m\x05\xbd\x0b\x0e$\xe4\xaf\x90\x8d6\x87\xbf\x8d\xa6\"\xfb|D\xa2\xecq\xa1\x9e\x04\xb9S}\x13(n\xa2\x1a7?\x93\xc0\x1f\x95\x91\xd7\x02=\xfexr5\xc2\x10A\xc3\x0c\xcc\x85\x19\x0e\x9eP\xc9R$W\x9b\x8d\xc3[\x06\xb9\x1f\xcb\xef\x98,\xc9\xb3\xbd\x8e\x0c\xf1\xfe\x0f\xcb\xfbM\xc6\xcdR\xec\xe0\xf7\x17X\xa8d\xf2P\x89\x89k<\x9a\xf3\x9e\xf2\xb6o\xe5\xa1\xd8z4\xd3\xfdH\xafZ\xbd\xb5\xc8\xa5\xeeP\x88;<\xbfG\x07s\x880\xafI\xdb\x1b\x99y}\xadN\xdc\x02\xc7\\0\xe6n\xd1\x1e\x8c'\xca\xe7c\x90\x06x\xb4L\xc0\xdb\xdd.\xbd\x0b\xb3\xb1:\x87|\x18\xe3\x89\x82\xf8\x7fi ,9DJg \xe8Q\x8c\xaf\xdd\x8cs \x7f\xaf\x82\xcf\xb8\xb1\x18j\x0c\xf7\x8a\xe7\xb3\x95\x917\x04\xb0\xf3\\\x94X\xae\xf2\xa1a\xdc\x8fr\xc9\x0d\xd3 D\x1fw\xf9M\xf9\x9d\xa9\xbb\xef\xf8\xdf6i9\xc3S\x92 \xba\x12\xbb\xb5[JI\xf2@)I\xea\xb7\xaag\x0c\xfb]\xa5\x817\xd1\xfd\xd9\x8b\x89}\xdd\xf7g\xe5\x03`,\xcf!\xf5R\x19\xf7\xd6\xe0I\xf5\xef\xb5\xd1\x85\xa4\x1b,\x14\xf2\xf9\x9a\xabAF\x1cl<<(d\xf3m\x12M\x00CR\xee5|\x1f\xd5\xf2\x00\x83\xa7\x90@\n \xa4\x90@\n \xa4\x90\xc0m\xf3\xd9\xae\xed\x89k\x99\n\x95\x88R\xd3\x0b?\x1ct\xe9rGYv\xe2\xbfW\x16\x94,c\xa1R[o\x8bj<\x94\xca\x16\xcf\xe8C\x8b;Mz\xa0\xcck\x94y\x8d2\xafQ\xe65\xca\xbcF\x99\xd7(\xf3\x1ae^\xa3\xcck\x94y\x8d2\xafQ\xe65\xca\xbcF\x99\xd7\xee\x99y\xad)\x88\x04\xb5\xd6\xe3\nuE\xdc\x90m\xeb\x0b\xb0mE\xe0I/\xb3\x96\xf7m\x8eQ\x9a7\xe7/\xc2\xbd@\x16-\x82x\x08\xe2!\x88\x87 \x1e\x82x\x08\xe2!\x88\x87 \x1e\x82x\x18A<\x04\xf1\x10\xc4C\x10\x0fA<\x9f\x01\xc4\xb3\xc3\x1f\x92\xfc\xdd\xc8\xdf\x8d\xfc\xdd\xc8\xdf\x8d\xfc\xdd>\x82\xbf\xdb\xe1\xef\xe1\xaf\xe9\x92\x9bewz\xcb\x96\xf3[ \xc2\x97\xb0E\xf9\x8bk\xa5\xed\x0f\xf7\x19:\xc3\x11\"J\x88(!\xa2\x84\x88\x12\"J\x88(!\xa2\x84\x88\xee\x1e&!\xa2\x84\x88\x12\"J\x88(!\xa2\x84\x88\xf6\xdc\x93}\x11\xd1N\xbf\xa8}\x9c\xa2b\x8f(\n\xf1\xdf=BK\xea?\xa9\xff\xa4\xfe\x93\xfaO\xea?\xa9\xff\xa4\xfe\x93\xfaO\xea?\xa9\xff\xf87\xa9\xff\xa4\xfe\x93\xfaO\xea\xff\x80=\xd9W\xfd\xdf\xee\x10U\xb3\xd8\xb7\xe4\xa1\xda\xd7Z\x90\x1b\xfc\xe0\xcfQ\x8e\xb1[N\xbf\x8f\x92\xd8\xec\x93\x18\xae\xed\xb9\xb4\xdd\x15a.\xc4\"\xe7\xca\x96\xae\x08\xa0 p\xf0E\x80\x0f\"\x7f\x1f\xfe\x12\xdd\xfe\x08G\xa1F\x19\x048\x17\x82a\x954l\xbdo\xc1\xb1\xdf\xea\x9f\x1d)V\xcb\xc6\x1e\xca7\xa1\x9c\x7f\xbb\xb7\xf2\x13\xbavU\xff\x0csud\x1cM4\x9a\xe4\xf6>}\xc1\xdd(\x87/\x18\xa0\xa6\xe8\x9d)\xb8\x8d\x8c\xf0\xfd\xc3aU\xd1\x08\xb1\x84\xcc\x9d\xa8\x99\xa2\x80\xef\x07\xda\xb7S\xb1\xad\xd3\x99p=\x86eh\xf6\xcc\x15\xea-\xae\xe8#\x13\x0d\xa1\xd7Z{o9'<\xe9\xb9SDe\x02\xbcm.3+r\xb7\xeaBT\xfd\xed^lK\x98\x12aJ\x84)\x11\xa6D\x98\xd2W\x87)\xc5/\xdf\xfc\xecn+\xf0!\xb5\xe0\xcf\xea\xd7\xfeo\xbf\\@\x8aq\xab\x99\xa3\xbe\xdc\x1d\x13\xb8\xd8p\xa2\x8e\x85\x06>\xb2\xc92T\xca0CLC\x95\x14E\xb6!\xb2\x0d\xd1=N\xf78\xdd\xe3t\x8f\xd3=N\xb6!\xb2\x0d\x91m\xa85~\xb2\x0d\x91m\x88lCd\x1b\x8a\x86C\xb6\xa1{\xec\xc9\xc7\xb1\x0d\x05`\xff\xa3\xe1\xf8\xfb\x19\x89\xe2x\xdb`\x06\xf8D\xa8\xff\xbe\x03\xde\xd7\x8ae\xfa\x1a\xafL-\x85\xa5\x0d6*\x03\xbcv\xe3\x9b\xafU\xf5\x07\xb7W\xdd\x03J!\xfb\x13\xd9\x9f\x08\xb7\"\xdc\x8ap+\xc2\xad,\xe1V\x1f\x0f\xb7\xfa\xd0\xf6\xa7\xe6H+a\xa0:\x01\xee\x9f\x8f\xccN\x1f\x95\xe1\x99\xba\xb9\x8a\x13\xcb\x04k\x16e\xea~\xc8L\xdd~\xf7\xf72<\xd2\xc3\xb3=\xc5e\x92\xe0H\x82# \x8e$8\x92\xe0\xbe> \x8e,\x8fdy$\xcb#Y\x1e\xc9\xf2H\x96G\xb2<\x92\xe5\xf1\xf3\xb6<\x8a\xbd\xedm\x9d y)\xe17%\xfc\xa6\x84\xdf\x94\xf0\x9b\x12~\xb7\xe6\xb3\xdd?a\xa1\xafK\xd7\x04\xe0\xd7\xe6\xf0w\xfc\xff\xd4\xb5\xd4\xed\x9ap\x0e\x05\xca,\xdf<\xcbX\xc5\xeb\x035,\xf45[\xe9\xb4\xc8D\xdb9\xe1g}\x8dm<\x94o\xc2\xb5\xb6R-\xa68\xd3v\x8f\xb5\xcf\x8d\x07@\xcby\xe6\"\xe3>\x8e\x18\xcb\xef6,\x84vE.u\xba\x1b\xa4\xad\x15\xaf\x0d#\x13ja\xcb m,\xc7\xb0\x1c\x1aLr\xbd\xd6\x86g\xd3Z\x13\xf7@\x96\xcb\x06\xb1X\x07x\xbdcnm\x80\xe2\xdc7\xf9\x0bT<\xafO\xd2KF\xb5\x99y\x8f\x17\x0fQ;\x02\x13\xb9\xe2*\x11\x80%A[\x01\x0di\xf6\xb5a=ztWk\x19\xa1\x1eq\xbb\x16\xa9\xb4\"\x9d\x0e\xdc\xcf\x97\xb5]+\x9bi\xed\x1f\xae\xd5Z\x1bi7\x92h\xfd{\x0f\x1a\xf5\x15v\x13\xe9J\xaa\xa9/\xbc?\xbd\xa4B\xe9U'\x9d\xf0\x95c\xf7}\x08\xe4\x85\x96\x91M\x8fY}%\x94W\x91\x18\xb4\x1fn\x12'\xbas\xc5\xb0e`\xa3\xaf\xcf.O\x9e\x01\x90\x8f?z-J\x02\x0ev\xaa\xac\x97\xc4Kh\xaf&\x8e\xa3v:QF.\x14\xb7E\x0e\x1eX\xc8p\xc10\xa9\x17\x1a\xa4\xe3\x0e:{%\x95\\\x15\xab\xb0\xd8\x9e`+\x1a\xd2L\x80\x9bR\xfb\xc4\xae\xf8\xed\xb4\xdc\xd3\x9e\xf4\xf4\x8a\xdfBo\x9eA\xb8\xce\x8e\xdc\x04\x9c\x82\xe1v\xbf\xdau\xe6V\xa9\x1c\xc7\x98\x9d*i%\xcfPNy\xc6\xbe\x9b(\xb6\xd2\xca.\x91\xc0\x1d\x05TDN\xb4p?Z\xa8\xce\xf9\x1eT!\xd5T\xe2^\x95\xd4\x01\xf7\xe8n\xe2p\x13\x86\xa2\x95\xb6\x1a4\x1a\xe89\xb75`\x02G\xe6\xe5V\xb0\xe5xdz\xcde\xca\xb8\xad\x86k\x8a\xd9J\x1a\xe3\xc4\"dU\x96g\xd9\xddFF\x15\x7f\xed\xc1\xa6\xa0\xf8n&\xf5\x8fB\xe7E\x07Q\xed\xc4\xdb\xfd\xa6\xacE\x9e8\xfd}\x81\xf85\xc8\x9e\xc6\xf2+\x01f\x94\xf2V\x17~\xaf\xbc\x10\x0c\x82\xdcD\xb1D+#S\xf0\xb1\x03\xd8\x1e\xf6\xca.sa\xdc\xd1\xbb\xc7\xa8j\x1b\xf3_\xc2\xc0\x18\x9a\x17\x91\x06\x97\x821;\xf6\x1a\x87?\xc4\xdf\x8e\x7f@K\x84\xb0z\xfa\x01\x06\x83\xb4\xa0\xe7\xec\x17\xe1\x17\x038\xca%\xac\x15\xfe\x13\xe9\xab9:X\"7\n'\xa97\x06\xf9\xf4\xf0\xfb\xc6\x1d\xfa\x01F\xbam\xd9\xb8\x8a\x0e`\x8f5\xfc\xcb\xbf6\xc6woJ\xdbgp9h\x8b\xd8\xf5\xa6Anr\xb6@\xc9z\x88\xa3\x85\x97\xe7\xc9\xc9\xa2\xd7uf\xc9\xc9\x82\x9c,\xc8\xc9\x82\x9c,\xc8\xc9\x82\x9c,\xc8\xc9\x82\x9c,\xc8\xc9\x82\x9c,\xf0or\xb2 '\x0br\xb2 '\x8b\x01{\xf2q\x9c,\"\x13^K\x1a\x8a\xbe\x95x\x1c\xaeY\x84\xc8Y\xcd02e\xae\xf3Qp\x13\xf0\xd6\xfd\x89\xb7\xf5\xc0`'\x08\xf0\xc1?\x9d\xa40 \x96\x89\xc9\xc1\xc7\x8a\xa9\xae\xd9,=h\x82\xd1\xc2-Ce\xf8Z\xb7U\x96\xbf\x96\x1a\xc4B^\x0b\xc5\x8c\xe5\xb6\xe8\x88\xa5.\x9by(sem\x96v/\xd4\xa2\xb4\x80\xc9\xed@[\xf0,\xa8\x0dw{\xd3\x96\x00\x11\x02D\x08\x10!@\x84\x00\x11\x02D\x08\x10!@\x84\x00\x11\x02D\xf0o\x02D\x08\x10!@\x84\x00\x91\x01{\xb2' 2:@\xed\xbdK\x18\x12\xaaX\x1d<\xfb\xfb\xc1\xf9\x9b\xb3\xf3\xb3\x8b\xa3\x97\xd3\x8b\xcb\xa3\xcb\xb7\x17\xd3\xb7\xaf/\xceO^\x9c\xfetzr|0j}=>9?\xbb8\xbd\x9c\x9e\x9f\xbc9=\xeb*\xf0\xcb\xd9\xe5\xe9\xeb\x9f7\x7f??\xba\xb8\xe8l\xf9\xcd\xc9\x7f\x9e\xbc\xb8\xec\xfc\xf4\xd3\xd1\xe9\xcb\x93\xe3\x83\xdf\"\xdf\x8b\x1d\xc3\xeev\xaa\xbd\x80\xc5`\x02\x82>\xb8\xf5\x8c\xc2K{\xf0M\x80\x9c\x129\x05\xc2\xa6=a[z{\xb6\xedc\xcd\xb7+0oh|m\xd0\xb9\xca\x16f\xdc\xd9E}\xa5\xdb\xbd\xd4\xbfGn\x80\x95O\x1aN7-\xf2\xe0\xe3\x16P(\xe5\xbd\xe9:;\xae\xed`\xbb\xdf\xda\xe7~\xddzdlk\xafH\x17\xed\xee\xf0\xf7-\xfd\xd4\xf6\x0by\xc2\x92\x9b\x89\xc2\x0c3\xdd\x9d\x05Zkw\x17\xbe\xec\xd1\xe1L\x08\xc5r\xf1\xdf\xe0\xfe\xd3\xdd/\x12r\xbbW\xfc}\x8f>\xe7\xdci\xad\xa0\xf5\xcc\xa5\xe2\xd9\x14\x1d\x0bQ\xf7\xdd\x0dR\xdd\x89\x0e\xd6\xf0~t\xc0g\xc6]j\x9d\xdfT\x87\x9b%\xfc\xb6\x06\xedI\xa9\x1aw\x18W\xa0Il\xc4\xfd\x9c\xa0\x03t\x08\xc1p\xfa\xa9\xfb\xd5\xca\xeb\xe8ad\xca\xdd\xf3%\xe4\xee \x0cf\x08H[26\x02i{\xb1\x1cK -\x81\xb4\x04\xd2\x12HK -\x81\xb4\x04\xd2\x12HK -\x81\xb4\xf87\x81\xb4\x04\xd2\x12HK \xed\x80=\xf9\xca@ZJ\x8cA\x891(1\x06%\xc6\xa0\xc4\x18\xfd\xe6\xf3\xe1\x8cZ\x87\xbf\x97\x96\x98\xeel\x19\xc1\xa2\x10\xec[\xde\x9a\x15R%I\x85\xf4\xeb6\x1f\x91\x97\xd0\xcd\xe9\xf1(\x94:J\xd3|\xa3\xd9\xeb\x81\xad^\xbb\x0b\x92q\xeb\x8b6nm\xb6\x97\xeca.!kI?\x1a\xb6d-!k YK\xc8ZB\xd6\x12\xb2\x96\x90\xb5\x84\xac%d-!k \xfeM\xd6\x12\xb2\x96\x90\xb5\x84\xac%\x03\xf6\xe4\xab\xb5\x96|\xd4\x04\xe7\x03G\xfa!PI\xc8\x87\xd1 C\xc6\x894\x02\x14 <\x054\xbdz\xe2\x90kmE\x1bn\x8cZx(\xc8\xb1\x9c\xde\xf6b\x7f\xe4|%\xdd\x80Z\xd4\xec\x10P\x0d\xaa\x11\xa4F\x90\x1aAj\x04\xa9\x11\xa4F\x90\x1aAj\x04\xa9\x11\xa4F\x90Z{\xfc\x04\xa9\x11\xa4F\x90\x1aAj\xd1p\x08R\xbb\xc7\x9e|e\x90\xda\xfd\xa1\xabkmEw\x8a\x88_\xdc\x97\x12\xb4\x82r\x08X-\xe4\xb5P[\xf2B@\xc5\x87\xc2\xaa\xca\xf9\xd8\xbd\xd0\x88\xe1Ns\xf8rd\x174\xa2\xfd4\x9b\xb3>v'1q2\xdf3v\x9e\x0b'\xc1z\xbd\xf8\x1dVq\xca\xa32V\xf0\xd4C\x12\xa5\xab\x1a8\x9e\xaa\xb0)\x13\x05\x12D\x8aw\x92\x9c\xb3w\x99P\x8f}\x1b\xdf\xb0\x1f\x7fdO\xdf\xf9{\x8c[\xaf\x0e\x03\xbf\xb8\x11\xa03<\x1d\xb3S\xe5\xf4\xc2\x89B\xad#\xe1F\x98\x91W\x92\xa0\xcf\xa6;\xf1/g\x97'\xd3\xb3\xf3\xcb\xd3\xb3\xd7q&\xed(9B\xb9V!\x85\xf9\x86*\x07\xa3\xda\x97\xff:\xb9h\xfcr\xf4\xfc\xe2\xf2\xe8\xf4u\xe3\xd7\xd7g\xad\x1f\xa6\xbf\x9e^\xfeu\xfa\xcb\xc9\xe5Y= \xf9\xa6\x8e\xcb\xad\xb9\x07\x9dT{\xfb\x87\x99v\x93q\xb9cz\x864\xd1\x99s\xdd\x11\xb6'\x1a\x13\xb0S8\xf9]\x08*\xf0\xec'\x9b\xc8\xe3\xd9\xa6\x0f\x11X\xab\xf4\x13\xbd\x8e;\x1d\xb7Z\xfc\xaf\x93\x8bg\xcd\x1f\xa2\x16\xee<\x9b\xdaX\xdf/\xed\xb3\xae\x1fk\xde\x99\x08Xoo\xec\xf5\xd9\xb3\xc6\xbfk\x93\xd9U\xb9\xda\xbdf3\xd5\x97z\x83 h]\x0b[o\xdaQ3\x1e\xe7\x0e\x1e\xd4R\xb0\x7f\x85\x92\"\x8d\xf6\xbe\xea\xa3P\x12\xb08h\xdem8\xfca\xd6\x99\xb4\xdb\xfc\xc1\xdfW\xa9C6\x95h\x8d\xc3\xf5\x1f\xf5\x8c\x13R\x1b\xd0\xf9\x89:bP!\xd1\xcaHc\x9b \xd7O\x8fGH\xb6\x8e\x13\x8fJ\xc1\xbd\xb9J\xf5\x11\xe0}\x16\x92\x91\xb8\xf2\xc8T\x91\xee\x11\x1f\xa1\xfc1\x7f\xec\xfc1 \x88\x0c1\xdc\xa0\xc8C\x86\x9b^W\xa0%\xc3\x0d\x19n\xc8pC\x86\x1b2\xdc\x90\xe1\x86\x0c7d\xb8!\xc3\x0d\x19n\xf0o2\xdc\x90\xe1\x86\x0c7d\xb8\x19\xb0'_\x99\xe1\x862\xc7P\xe6\x18\xca\x1cC\x99c(sL\xbf\xf9| C\xf7\xe1\xef`$\xe8N\x19\x036\x86\xd8\xde\x9dv\xa4\x89\xd1\x95\xe5\xfb\xf4x\x846\x87\xee<1\xae\xb9\x87\xb4\x82\xef.E\xc6n2v\xf7A\xfa\xc9\xd8M\xc6n2v\xff\x81\x8c\xdd\x9b\xcd\xa1C\xad\xa1d\x0c\xed\xc7\"-\x19C\xc9\x18J\xc6P2\x86\x921\x94\x8c\xa1d\x0c%c(\x19C\xc9\x18\x8a\x7f\x931\x94\x8c\xa1d\x0c%c\xe8\x80=\xf9j\x8d\xa1\x88/w\xf9\xea\xd7\x13B\xc1\x0f!Kv@-\xd6\x1f;\x15\xd4J*[\xda\x19\xb8R\x05\xcf\xa6\xc0\xc7M\xc0W[6\x85#(u^\x16\n\x02:sm\x01\xa5B\x01V5\x83\x8c\xadmNh\xb6\xf4P\xa6\x85\xcey\x0f\x13\xbd[M\x044\xaa\xf7\xe2l@\xb8\x9ak\xd4\x0b\xed\x9a(\x84\xbbZ[E\xd0\xd7=\xa1\xaf\xfe\xca\xd9\xfb\xf7\x15\xf3\xea{\x00\xa5\x9agepN\xeb\xe0\x9d\x86\xaf\xdeb\xd9M`e\x1b\x9bN]\xd9\xccC\x1d\xb7\xda,\x87\x1d\xb3jr\x1b\x8eWk\xf6\x1b\x8eU\xb9\x08\xbd\xce\x93G\x8f\xab\x0dxs\xfe\"\x08\x9et\x90>\xc3\x83\x04\xd2B\xf7\xf5u\x0e\x9fjG\x08=\x1c\xc01f^RR%p\xb4\x8f\xd0\x0b\xe8\xf2\x95T\x16[{\xa8\x93TM\xb3!\xfa\xe0\x1c\xebQ|a:A\xecY\xe9\xb4\xc8z\xc4\xf0\xb9\x05\x99nx\xe9$\n\x91\xf3\xe8M\xa2%\x88\x9c\xae\x96\xdb\xe4\xf2@Nsn\xc5\x14\x91\xbfm\x0d\xad\xf8\xad\\\x15\xabpQb\x05'\xd0VG\xdb\xb5To{\xc5o\xfb\xb4\xb9\xb5\x89\xaet\x8eQ\x13Rmhb\xa1y6\x9di\x95\x8aN\x97\x83\xd0\x80+\xe6\x16h-\xf2\xc4q,\xac\xc1\xb8\xd5+\xe3\x9a\x99e:\xb92\xd3\xb5\xc8\xa7w\x82w\x1c\xebm\x01\x8a%{\xc1V\\'\x0cZ\xd9\x18H\x88\x84;\x84\xfb\xf9\x83C\"\xc4\xe7\xc6\xf9\xf0\xb4\x0f\xe0}\xc1!\x88W\xf8s\xc9\x1e\xd06\x8b\xbca\xe4\x1d\x06\xa45\xcc\x143\xb3\xe6`\xcbH'\xeaJ\xdc\xb5\xb9\xe2g\xc0\x0b7\xb0\xc2\x1a'\x0cA\xd1\xe5\x94w\xb3\xc00\xf9\xce\xcd\xec\x0co\xde\xbc\xc9\x03N$\x9d\xc6\xcf\xf54v\xa3\x11%\x994\xf7\xb7<<1\x1d\xe2\x19swe\x15\xb9^\x1d\xc3\xb9\xce\xf7\xf0\x96,i\xac\xc2\x1f6y`\xc7Cq\xff\x0e`H9\x02\x0f\x8a\x86\xb1\xdfg4\xdb1\x08\x93q\xb3\x94j\xb1\x07\x07kK6\xa11\xbf\xbc-&u\xe1\xbf\x7f\x06\xcc\xaa\x07\xdd\x1a\xb9P\"\x9dz\xd9\xe0F\xaaT\xdfl\xa5\xd4\xd2\xadq%\xd5\xd4\xd7v\"E\x8f\xaaH\xe4\xa3\x83T\xdf(+Wb\xfa\xdf\\f\xd3\xd4#v\x9d'\x07\x16{:\x07o\x04\xad\xa6\xa9.f\x99\x80n{\xf5\xd4\xaa\x8e\x1d\xf7\xa8\xdb\xe2\xa0\xa5T\xef\xb1\xd4\x16i\x94\x06\xe0\x19\x9e\xb4\x06\x9d\xa0\xa2\x18\xc4\xa9\x0f%!\x11K\xfet,y\x08\x83q\x14*\xd5b*\xd5\\w\xf3\x99\x0b,q\xea\nD\x0fn\xc2\x8f\xe0B\x0drR\x96\xa1\xa5\x9d[\x9d\x9b6\xab\x89\xdax(F\xe3\x86\xba\xff\x1ey8\xba\xfb\xec[\x9e\xdb\xe9r\x83\xebb\x8b%U\x87\xeb\xaf\xe8\xbc\xcc\xc3\xf3\x94\xe5\n\xb2\x1bn\xd0T\x84\xfeQ\xa9\xfbY\xb0\xb37\xf0\xa1P\x8e\x1f\x89\x14\xb5\xb6T\xdcN}hM\x9f\xbe\xeb\xeb|\xea\xaa\x87\xc71\x0d\x93*\xc9\xc1'\xc3\x9dA\x9e,\x99cBp\xac\xebC\xe3^g\x03{!GU\x0b,=+~\x87\xce8\xc8p\xc1\xb7Q$z\xb5\x92\x16=\xa0\xac\xf7`\x93\x8a%Z\xfd\xb7\xf78@\x0b\x1d\xc0\xb5\xef.\xa0\xe6s\xe0\xf3\xbf\x02\xaf~\xc7\x82\xe8jE\xbe*\xafj\x98z\xb8\x9b\xdf\xbd\x92\xc6\x84j\xcf\xa5=r\xdb\xfb\x0e\\Hp\xb1\xa6\x85\xb2r{\xb2\x1b\xb7\xc6O\x80\xed6\x97\xe9R\xae\x84\xb1|\xb5f\xd0\x8a_\xb0\xfa\xbaH\xc3\xb0'\x96b\\M\xe64\x06a\x0c\x0b\xdc\x1cFc\xf5jf\xacV5\x159\x84B\xb4\x9c\\\x97\x02\\mp\xe9\x827\x0bt\xb7\xe4\x86\xcd\x84P\xacj\x90=\xbe\x92\x99\x1b\x80.\xd0\xfb\xb5,l\x84\xfd&D\xa4\x18\x01.\x82Is_q\x97\xc0\xa3\xc5\x893\xd7:\xf16\xd6\x1c]\xa6\xd5\x9d\xf7\xfbI\xb4\x9a\xcbE\x91\x8b\x94\xad\xa4\x99\x89\xa5\xe4\xd7ND\x83\xab\xd6mB\xb8\xa4!h\xa6+\xa2`'Y\x1e1_\x97]\x89\xb5\xad\\\xb7\n\xa5\x84\xe3\n\xe0\xc6\xe7v\x98\xe5\x82\xa7f\x8c\xaeShD|wQ\xac\x1ewQ\xc37\xef\x18\xcfn\xf8\x9dq\xf3\xe3\x99\xa9\xd3\xcc\x0b\xec\xf0]\x17N\xfaKX\xa4\x88\x8f\xc5>\xbf\xe1\xf3\xa3\x06c\x04{\xa2V\xd2\xea\xdcG\xea\xc9|\xa2J\xba\x80\xa7_\xa5\xbdC\xba\xf0<\x01*\xfa\x1bv\x07\x97m%\xb1\xda\xce\xc2(\x03\xd5\xbe\x19\xa8\xda\"\xd6\xa2\xeek\xadkfj\xa9\xd8\xc2I>\xa5\x80\xe4\xa5\x07\xc3n\x96\"\xf7~\xa2\x89\xce\xf1;\x98\xb4s\x1cbi}v\xa7\x1b\xe4\xb4x\xfc`t\x0e%.\xf4\xaa\x1aC\xe5\x99\xc2\x9c\xe0'\xc0Y\xeb9\xcf\xcb5\x89}\x0d\x18\xab\x05\x97\xe2\xe6x\x7f\x83\xf7m\xe1/\xbe\xbb\x87\x88\x805\xb9!\xb2\x12\x90$\xf8\xe9$\xc1\x0d\xae\x02\x14\x94LA\xc9\x14\x94LA\xc9\x14\x94\xbcwP\xf2vE\xfa\xf0\xf7D+3\xf5Jcw@r,K\xc6 ^S\xe8C\xc3C\x02!\x12^ \xdd\xa2^?\x94v}\xcd\xb3i\xbc\x04\xbbk\x90FM\x1a5i\xd4\xa4Q\x7f\x1c\x8d\xbab M\xce\xb4I\xb9\xf6*\x98H]\xefu~\xbbM'\xdaS%\"\x8d\xe8s\xd2\x88\xe2\xdb\xbaC\xf2\xab>\x86]\x0e\xff,M\x96\x0dj\xfaH>\xca\xc6B\xd4`)t\xa4\"\x13\x0b`*\xe6\xf0w\xff\x0f\x9d\xc3`\xbb\x85\x8e\xe3P\xe6\xb8\xaaY9A\x804^\xfd\x1e\xbd\x07R\xb6\x1df\xde\xf6y\xe8j\xfa\xa1\xa4\x91j\x16\xd3Z\xff\xfb\xd1`\xd5Z\xef\xb2~\x13:\xe5\x9b&}\xb5\xaa\x04\"\x9b\x89d\xf9\xfdwO\x84r\x871-i\xae\x0cz\xf1\xd5B\x9c$r\xcc\xfe\xfd\xb6\xaa\xf4\xeb\xb7\xac\x06\xfd\x9a%\xcfE\x8f\xce\xb0\x9cg\xf1\xf1\xf8!\xf6\x13?\xe6\"\x11\xf2Z\xa4]\x17FETM\xcb\xa6\x93\x9b\xbc\xb4\xa3\xaf\x842l)2\x08\xbc\xe2\x8a\xf1\x04n=\x7fQO\x94\xbeQ\x18\x94\xe5\xf4\xedr\x01}\x84,\xc4B\xebD\x02x\x16\xc4'v\xad\xd1\x07R\xdf\xa0r\xa6\x95\x98\xa8\xfa\x1a\xccx\xc6U\xd2#%\xcf\x06\xd7\xc1\xf7\xa3\x03\xber\xe3\xecb\x08\xcd\x85x\xa1e\x9c\xe9\x02\xe6\xec\x03\x9c\x18\xb4\x1f\xd4D7'\xb7\x04\xd02\xe8H\xaf\xcf.O\x9eA\x18>\xfeX%\xe3\xe1\x8a\x9d\xaa 3\x97\x81\xb9\xb5`\x1a\xbc\xaa&\xca1:n\x0b\xdc/\xe4jnA\x17z\xa1!\xb6e\xfb\xe6\xc5\xb7%\xc8D<\x03LD\xb3h\x83\xc5m\x022\x8a\x93=\xa4\x8dbm'\xca/u3\xaa\xc7\x13P)u\xaft.\x98)\xa4-\xf5\xe7$\x03\xf0\xa5\xe4\x06\x1d\x8fFt1\x8dj\xa5\xb3\xacA\xb5\xe6Q\x85\xcb7\x0e#=-\xf1\x07\x01\xf67\xf8\x9fu]e;\xbd\xd1B\xa4I\xe7\x15K\xcei\xbdn\xda\xcd\xd2^[\x9f\xa1D+\x94h\x85\x12\xadP\xa2\x15J\xb4B\x89V(\xd1\n%Z\xa1D+\x94h\x85\x12\xadP\xa2\x15/\xb2S\xa2\x15J\xb4\xf2Q\x12\xad\xd4\xe1\xda\x1dhn\x0d\xe3i\x81\xe8\x95\xf9 \x8eq\x1al3\xa0\xe7&\xc8\xb3\x8b<\xbb\xc8\xb3\x8b<\xbb\xfa\xcdg/\x1b\xab\xce\xdb&\xd6\xc3\\D\xf6\x80\x83.\x83\xeb\x9b\xb8Dii\xad\xd5\xab\x9c\xbc6\xdaVk\xad<\x94Q5\x1e\xf4\x870\xab\xc6\xed\xed.\xfd\xf0\x86U\x93'\xfd\xfb\xee\xac\x16\xfa\xaf\\\x84\xe25`\x1e\xcb\xc6\xad\x8fM\xed\xb5a\xa4\xc6\xee3\x8c\xa8\xda\x8ea\xa4\xc2\xd8\xc0\x91:\xc7\"\x94\xcd\xe5}v>\xc9\x05R\xd1\x00\x0f\xbf\x06\xcf\xae\xb7\xc0jr\x96\xff\xadr)\xabM\xcfj}\xc5\xd6\x19\xc4q\x83\xe9\xc3\x89\xa4\xd0\xd6\xce\x88\xdb\xcd\xeel\x8dV\x9aY\xf6n\xd1\xedo\xde\\\xea\xaa\xda\x18]\x0f\xa5\x95<\x9b\xb6\x0d\xca\x1b\xb6\xb7Q\xa1\xd6\xad\xff\xc6\xc27\xb8\x12\xea\xf4fyn\xc1\xdc\x1e\xec\xf8\x8eJv\xf7Z\x95-\xddaV\xe1\xd6\x8b\x88\xe7I\xe4-\x87\xf6Y\xd85T\xd6\xe3\x81t\xa1\x7f1\xc7;Q6\xbf\x8bl\xde\xb5I \x89\xa1\xe6\x99\x8bL\\se\xd9JX\x9er\xcb;\xac\xbc\x9ex\xf1\x16j\xd2\x86\xff\xb8k@u\xfd5\x93\xc6\xa2\x15x\xcds+\x13\xa7@WL\xe4Q\xcc\xed\xd5\x02\xdc\x15\xccD\xcds\xbd\xaa\xd7\xf0\xa7\xbfZ4\x10\x9bjMV\xe7\xb2\xee\x80p\xef\x03Yc\xed\xae\xb5\xbb\xddu\xe8\x10\xd3!\xfet\x87x\xe3j\xf6\xe8u\xb3\xd3 g\xed!\xd6\xbdO\x9c,\x1e,\x10\xec\x9e\xde'\x13\x15\xbb\x9fl\x1fx\xdf17\x86k\x02\x0b+\xc7\xfd\xc1\x87M\xee-\x7ft\xf7\x96\x9a6\xb1\xd3\xaf\xc5\xfb.\xd7\x15\x19\xca\xfa\xd8\xefb\xb5\xe4\xd0B\x0e-\xe4\xd0B\x0e-\xe4\xd0B\x0e-\xe4\xd0B\x0e-\xe4\xd0B\x0e-\xf879\xb4\x90C\x0b9\xb4\x90C\xcb\x80=\xf9\xfa\x1cZL\x9eL\xebq\x8am \xb3U\xa46\xc6\n\xbf\x8c\xc6X\x82\x8f\x82\xcds\xbd\xda\xc3:\xde1\xd6\xd4\xd8]cm\x17\x194V\xab?\xccH\xc9M\x88\xdc\x84\xc8M\x88\xdc\x84\xc8M\xe8\xd3\xb8 \x15j\x86y\x1e\xa7\x11\x86~\xb05?\xc3\xdbPeS\xa2\x86\xb2\xcd\x0d)\x1b&\xaau;o\xc9\xd9\xd0\xd5\xddC\xf9\x19U\xab\xf5\x01\x9c\x8c\xea[\xd1\xcbg\xa6U\xe5~nC\xbd\xfb\xfd \xf9\x18\xee\xed\n\xf0\xe1\xcd\xfar\x83A\xbf\xa2\xe0Ob\xcd\x97]\x86\xfcj\x0c\x1f\xd3\x8a\xef\x13S\xf8\"\x19\xa2\x9bi\x91!^\xed\xd3^0'U\xd4\x07\xd1\xbb\xf3-\x9dn\xe9\xa0\x85Pvp\x81\x86\xd9^E+\xb6\xdbh\x9fn\xf5\xbc\xe9\xe2`\xdb\x9e^\\\x1e]\xbe\xbd\x98\xbe}}q~\xf2\xe2\xf4\xa7\xd3\x93\xe3\x83Q\xe3\x8b\xfb\xd7\x86\x9fO_\xff\xdc\xf8\xdd\x17\xfe-r\xd3\xdb\xd8\x11\xb8?^ \xd5\x03\xa9\xf0n\xb7\xed\x87\xee@\x8f\x81o\x8f\xa5J\xb213\"\x9b?\xa9\\_\xbf\xf1.\xb3\x01}\xea\xfb\xb2^\xb3F\x05\x8d\x00\xb4\xe8\x7f\x94\xc6\x14\xa8I\xd5_W\xad\x90\xaf\xb6\xc7nss\xa3\x7f5l\x1e\xd5\xefV\xe4+S\xa6\x0e\x8a|\xd3w\xb9\xbc\xae\xb4\x92W\xddO\xdb\xd6G\xe1\x0bF\xa9\xc4\x96\xc5\x8a\xab'\xb9\xe0)\xa8@\xc00;F\xf0~t\x80h\x8b\xed\xf4\xab\xad\xf7\x12J\xc6\xae\xcfA;g\xe5\xc7\xf21<\xf6X\xdc\x8e\xd9\xdbs'i\xeb\x9c\xfdM\xdc9\xdd\x14\xb7\xf4F\xcc\x8c\xb4=\xbc\xb8}\xc1\xce.\xc3\xb7L\xaa+<\x81\")ri\xef\xa6pK%}2\xbe5jt\xf6#V\\\x02\xf2\xc2Bq\xe6\x8b\x8f\xbb\xbd?7R%\x14\x0c\xe7\x00U\xc4\xb2\x17\xff\xd5gA\xab\x02>\xf6\x8e9h6\x11\xe66r\x92]\xf9q\x04$\xb1l\xbc\x11\x0e\nv\x93\x11.\x8a\xc8\xd5\x1d\xa6^uq\x8f\xa0\x84z#\xdbF\xb9\x92\xaa\nS\xa83S\xab\x83\x1f\xbfh\x8c\x11^\x9c6\xa6\xf3\xf4V\xdfj\x877\xfa\xb9\xb2\x85\xee>\xaeU\xb5\xa9\xd3\x05;\xae\x82f\x89\xce\xbc\x86Q\xefX\x08\x81\x95\x12\x94\xc0X\x12\xb8\xe4\x07\xf0\x12\xd7\xd4n\x12u\xa5\xc2M\xd5\x18\x07 \xa5\x0b\xe4\x97\x15\x87\x1c1\x10\\\xe6\x801\xfa\x10\x8d\x15\xbf\x9d\xf6\xeb.\x94\xac\xad\xc3\x8a\xdf\xcaU\xb1j\xf5\xdf|\xbd>\xe1\x8a\x89k\x91\xfb\x81m\x1a \xc2G\x03\x06\x14U\xe8\x1cW\xcaev\x87\x8f\xd8s#Z\x08{4\xee\xf6\x90\xe0h\xaf\xddY\xb8\xd7\x89\xa9Z\x08\x9b\x05\xeaI\xf9\x8e~k\xe9\xb8\xf10Z\xea\x07\xb1\x92j\xea.\xdb(\xfa\xae\xc7\xea\xb4+\xb5\xc4\x9aG\x06.q\x96\x8a$\xe3\xf8z\xbb\x82e\xf3\xbf\x86\x8a[_@\x8f.\xb2\xb2\xe1\x11\xb3z\x81RZ\xf9\x10-^\xe7U\x92N\xc0<\x7f\x89\x86\x02\x0f\xe1\xfa\xeb\xde\xab\x82\xd2)k\xb8\x18\xb88\xc0:\xa42cv\x91q\xb3t'+\x80\xa9\xd2)Dn*\xb8\xd5^\xf3\xabU\x1f!\"\x8b\xe1Ry.\x12\xcb\x12\x9e%EV\xaa_\xf3\xc2\xdd\x86\x13U\xa88*\xd1\xcdA\x17\x96I\x0b\xb6-\xb5`\xfaZ\xe4\xb1\xec\xc1~]\n\x85C\x03\xe47\x96\x99&\xaa\xce\xa1G\x0d\x1a\x94\x90\x934\x95\xe5\xb3\xbd<\x0e(\xbaYj#*\xf3\xecD\xc5\xcb$\xeb\x18r\xb4\xba8\x94j\x18\xa9,5xT)\x00z\x9d\xa8\xda\xfa\x8c\xd9/\xf1k\xc1\xde\xcd ,\x91\xd3X\x82T\x16\x04k\x18\xc6D\xad\x8a\xcc\xcau&\xb1\x83z\x9b\xed@\xaa\xc8\xa4X\x0b\xf8\x8aW\x85^\xa7\xfdbc\x99:\x8c\xc1\xbd#\x98\xba\xac\xd5\x14\xb7\xd4\xcbhm\xc9\xeaKV_\xb2\xfa\x92\xd5\x97\xac\xbed\xf5%\xab/Y}\xc9\xeaKV_\xfc\x9b\xac\xbed\xf5%\xab/Y}\x07\xec\xc9\x9eV_\x8a[\xa2\xb8%\x8a[\xa2\xb8%\x8a[\xa2\xb8\xa5\xdeqK\x87\xbf\xd7S\x0b\xbe?\xe8\x17\xc8T\xc61\xc5I\xd2\xbaC\x98\xaa\"\x13\xb5\xe62\xdf\x92j\xb2l\xfe\xc1#\x98v\x17\xa5@%\x82\xac \xb2&\xc8\x9a k\x82\xac \xb2&\xc8\xba\x07\x16L\x905A\xd6\x04Y\x13d\xed\xb5q\x82\xac\xf7\x82G \xb2\xfeb k\nT\xa2@\xa5\x86\xf5\x81\x02\x95(PiK\xf3\x14\xa8D\x81J\x14\xa8\x14\x99-(P\x89\x02\x95(P\x89\x02\x95>\xf7@\xa5\xbe\xf1*e\xb8\xca\xc0X\x15\nU\xa1P\x15\xb2\xfb\x91\xdd\x8f\xec~d\xf7#\xbb\x1f\xd9\xfd\xc8\xeeGv\xbf\xf6\xf8\xc9\xeeGv?\xb2\xfb\x91\xdd/\x1a\x0e\xd9\xfd\xee\xb1'{\xda\xfd\xfe\xc0\xa1*uw\xe9\xd6\xd8\xea\x9fkc\xab\xc0\x9e\x0f;\xb6an\xe1Ki\xac\xce\x9d\x8a:\x95j\xae\x0f\x7fGKB\xb7\xdf\xf7_\xcb\xc2\xa7j\xaeK\x9fo7\x9b\xaa\x9d\xa6\xe376\xd8\xf6\xf2\xae7\xf6P\x1e\xden\xdc\xed\x8e\xdc\xaf\xb5\xcdjN\xcf\x87P4g\xb8\xa3/\xc1S\xd1\xc3\x95\xdc\xebXP\xd0\xa7\x94\x99q#\x136\xcbtr\x05\x03\xd8\xd9\x17\x14\xdd\xaa\\\x84H\x93\xd1\x01_\xaf{\x95l)\x0c/\x82\x9b9K\xf8\xda\x16yi~ ?\xe7E&\xd0r\xba\xce\xb5\xdb8\xe4qa\x1e\x08]\xb8\x7f$K.\xd5\xc8\xdd\xd1IV 't\x0c\xb2\xfc\xc4Rn\xb9\xbbJ\x8a\x04\xfb \xf2\x01\xf6\x10\x14\x9dJ\xe9~d&\xcaX\x80\x87s\xae\x0c2\xc9\x15O\x96Ra\x9e$hv*\xd3NX\xad\xb7\xcd\xee\xfd\xe8`\x80\x1d\xe0\xfd\x08n\x9f)\xcc+\xf4\xedwx\x9d\x8b\xeb!\x1b\xbc\xe4f\xb9[yD\x9ej\xa7F\xd8i_\xf2kf<\xea\xc6&q\xf2=G\xf1\xbeJ\x8et\xcesk\x84\xfd+\x0e\x06\xb8>\xac \x98<\xec\xb4_\x83Us\xae<\x12\x00\xae\x9d\xa3\x13\x00F\xb9\xe5=\x1bCU\xdc\x07\xc0\xf4\xac\xd3\x1a\x00\xb8\x96x\x1ad\xba\xb0\xeb\xc2V\xbfU{\xeb:\x83\xb0\xc4\xc1=\xd6\xa2:zW\xe1\xebu\xff\xc2\xb0\x0f\x1e\x8f\xea_K8u@%\xa2g\x8dj\xe5*6\x01\x04\xff\x1e\xe9P\x1b\xb15\x86\xa6MYu\x9e\x84\x84Uc\xde%\xdb\x009\x9c]\n\x95\x8a|%\x95\xf54\x83\x07#`2F\xc4\x07\x7f \x9cNQ@d\x0d k\x00Y\x03\xc8\x1a@\xd6\x00\xb2\x06\x905\xa0\x07\xccN\xd6\x00\xb2\x06\x905\x80\xac\x01\x08g\x905`?\xe4\x99\xac\x01_\x8c5\x80\xa2\x80(\n\xa8a\xd8\xa1( \x8a\x02\xda\xd2 \xab \xac\x82\xb0\n\xc2*\x08\xab \xac\x82\xb0\x8a\x1e \x00a\x15\x84U\x10VAX\x05a\x15\xf7\xd1\x8b \xab\xf8b\xb0\nJ\xf3Ii>\xa1CJ\xf3Ii>)\xcd'\xa5\xf9<\xa04\x9f\x94\xe6\x93\xd2|R\x9aOJ\xf3\xf9\x85\xa5\xf9l\x92Nd<\xac\x80G\x9f\x15\x02\x8d\x8ci3'\xc2\x9a/|H~\x9bQW\xdf\xea.\xd7\xd5\xcf\x9e\x16b\x03\xe2v\x06\x0co4\xd6mi\x1b\x91\xda\x10Z\x1f\xea\x84S\xe6\xfe\xf40;7\x06y\xf19_\x887\xe2\x1f\x850v\x8c\xdf'\xaa\xcaP\xe2Zp\xc3\x16l\xa5\x8de\x020p\x00\xc8Q\x80\xaf\xbf\xcb\xd9\x1eP\x11d\x8b0$\xdc+\x196\xadJ\xab\x10\xceL\x84\xbb\xcfk\x83K\x1c\x1dM\xa1\xdaD9\x8ed\x84\x1d1iM0\x8a\x18\xe6\x8e\x08*d \x1c\xddH\x13r\x00\x84\xee\xc1\xfa\\Y|\xfb\xba\x9dG&\xe7\xca\xf9\x9c|\xcf\xc9\x9eK\xf6\\\xb2\xe7\x92=\x97\xec\xb9\x96\xec\xb9d\xcf%{n\x9fa\x92=\x97\xec\xb9d\xcf%{.\xd9s\xc9\x9e\xdbsO\xf6\xb4\xe7\xeeH\xe0\xea\x0d\xae-\x9b\x0e\xdaU\x85r\xc2\"\x08\xa1\x08\x87\xb8\xa9F0\x11\xb8\x97\xe3\xda6\xfd\xcb!\x87+T\xaa%q\x9d\xf3\xccl\xc9\xe2\xfa\xfe\xfd\xa8\x1cZ\x05\x14\x8d\xaf\xc4]k\x88\x1e\xd2\xe1\xfe\xd0\xe7\xc2\x16\xb9B\x1flDL<\xc8P\xe2? \x8b/\x9c\xd2 \xc3r\xc3\xde\x8e\xee\x8c\xd9\x99\xe3\x88N\xe9\xd2s'*;]K\xe7\xec\xcai~\x956j\x84\xdd\x7f\xc2M\x89t\xc3\x02`\xe7m\xf7u\x1c\x13,\x83*V\"\x97I\x18'\x9c\x0c\x8f\x14\xa2\xf4\xbc\x14\x8a\xf9E+T\xa9 \x8c'\xea\x14Z\xc8\x841\xd5\xecQL/\x8c[\xa5+\xb1m)\xbc^>Q\x1fp)\x8a\x90\xc2\xb7s12\xb9\x92\xed\xb5\x80_\x03\xc8\xb7 XC},\xa6\x15\x0f@\xba\x1bu\x8dR\xf2\xe9\x9cebn\xbd.\"-2\x94p\xed\x06Kw!|cn%fwL\xf0d\xc9\xf8z\xfd \xe6\x1f\x81\x80\xadU\x88\xbe\xb9\xb5\x00J\xd0\xcc\xe6\x85`\xee\x0f\xa9R\xa79\x8b\x12\xc3\x08sw\x05=IK\x95dE*&\x8a\xb3$2\n\xb4\xd6\x14P\xb0H\xa5t\xbc\xa1\x0e\xee\xbe=5\xe3\x89j\x0c \xa4\x8c\\\x18\x0f \x02YVt\xecHu\xcc\x90\"\xe5B\xe9<\xa2\xdc\x89\xc2\x19\xed\xb1\xc4\xc1\x85e\xc3\x8a\xe6\xc2\xe9\xdem}\xd0\xff\xde\\I\x19!\xb5\xb9\xd8@T\xae%\x81i|u\x9e\x8a\x1cUa\xa9\x12\xf1\x8ca\xcc\xcf\x13\x93^\xb1o\xc7\x7f\xfe\xfe>\xf3\x19\x96\xe4\xba\xe2\xdd\x87\xbf\x97\x7fC\xf0\xcb\xfb\x83\xadaFe\x94Qd\x1fQs\x0d\x9b\x8e\xac\xbf\xfa\xe0\xe3f\xb6D\x19=x\x90\xd1\xee\xa2\x14KD\xd83a\xcf\x84=\x13\xf6L\xd83a\xcf\x84=\xf7\x00u {&\xec\x99\xb0g\xc2\x9e\xbd^M\xd8\xf3^8'a\xcf_\x0c\xf6L\xb1D\x14K\x04\x1dR,\x11\xc5\x12Q,\x11\xc5\x12Q,\x11\xc5\x12Q,\x11\xc5\x12Q,\xd1\x97\x16K\xb41\xbcdpt \x05\x97Pp \x19\xf8\xc8\xc0G\x06>2\xf0\x91\x81\x8f\x0c|d\xe0#\x03_k\xfcd\xe0#\x03\x1f\x19\xf8\xc8\xc0\x17\x0d\x87\x0c|\xf7\xd8\x93=\x0d|;\x82K\xea\x1e\xc6-\x81\xa8\xfe\xb9\x86\xed\xb5\x9c\x89k!(\xa5\x03\xb8\xd3\xefj\xfe\xd26/\xb6F\x97|0o\xe9\xc3\x08;:\xd8\xea9}\x1c\x81L\xc1\x89:`6\x1b}\xa8\xb7\xf8NG\xed=\x94\x1bu5\xf7i\xad\x7f\xbb\x17\x92\xd1\x89xn/;\xc4-\xbbU%@\xa43\x91,\xbf\xff\xeeI\xf0\xb7nxh\x97\xd5\x82\xc8\x1f\xed~\xaf~[U\xfa\xf5[7\x06\xf65\xb0\xd6\xcc\xaa\xf1\xf8A\x8d\xc1\x8f\xb9H\x84\xbcF\xc4\xb9Y\xbf\"\xaa\x8a\xe1\xf9\xd1j\xe5\x95#o\x19^\xba;jv\x07ZF\x02\xb1\x1d>^c\xe2x+\xca\x17ZE\x0b\xe8\x95=P\xebu\"y\x89\x81\xc2tc0R\xcf]\xcd\x89\xaa\xaf\xc1\x8cg\\%\xa2\x0fq(\xbd\xeaD\xdb\x103\xedb\x08\xcd\x85x\xa1\xa5\x8a\xd0n\x98s\x85\xd8*\xbd\n\xe1-nNn \xa0e\x90(^\x9f]\x9e<\x03D\xc9C\xb4x\x9dKP\xc8NU0\xe5\x95:f\xed^@1i\xa2Jk\xad\xdb/\xe4jnA\x17z\xa1\x81Mo\xdf\xbc\x18lu\xb5\xafy\x06\xb1\\\x9aE\x1b,n\x13\xb1\xf6\x01b\xd2Fj\xe3D\xf9\xa5n^P\x9e\x80\xfc\xf8\x0d[\xe9\\0SH[\xc6\xfd$\x19\x04\x8d\x95\xdc\x00\x87I\xd9\xa1\xfe\xf0\xd9\xa1\xa2\xdbf'\x92?Q\x0d(?\xbe\xfa\x08\xd5\xefs\x17ZB\xf5 \xd5'T\x9fP}B\xf5 \xd5'T\x9fP}B\xf5 \xd5\xc7\xbf \xd5'T\x9fP}B\xf5\x07\xec\xc9\xd7\x82\xeaS\xce(\xca\x19E9\xa3(g\x14\xe5\x8c\xea7\x9f\x8fb\x05=\xfc\xbdni\xebN(\x15\xd9!z\x1bC+S\x12[s\xd9a\x1b\xad\x1a\xfd\x8c,\xa2C*\xf5.;\xc4\x00I\x86O2|\x92\xe1\xf3A\x0c\x9f\xf5a\x02\x8f\xed\x1e\xeb\xb6\x88\x98h\xe4\x95\xf1lL\xd63\xb2\x9e\x91\xf5\x8c\xacgd=#\xeb\x99%\xeb\x19Y\xcf\xc8z\xd6g\x98d=#\xeb\x19Y\xcf\xc8zF\xd63\xb2\x9e\xf5\xdc\x93\xaf\xcfzVG\x0cw\x00\x8a\x8d\xf4j\x01\xa1\xfd\xb0c\xfb4Hu\x95\xeb\xaf\x91~\xa7\x05_\xbf\x0d\x05;p\xec\xb2\x91\x1e@\xf6Du#\xd9\x1d\xed?\x14\xa4\x8d\xd3\xd9]\xeekC\xa6\x85\xb2\xb9\xbcO\xbc\x13\xe6\x0b\xd3j\xffLr\x8d\x16\xc2,\xfc\xbfB\xc6\xb8(\xf1\x1a\xb3Z_\xb1u\xc6\x13\x11r\xb0\xad3\x01M\xdc#\xedU\xa3\x950\x8cB\xc9\xdb*-\\5\x86\xaa8\xe69\xc4\xf4j\xd36\xca\xbda\xf7\x1a\x15j\xfc\xc7C\xf4\xbeH\x86\x1amZd\x88Qx\x03\x00\xe3\xb69\x88\xde\x9do\xe9tK\x07-\xad\xb4\xe3|\x9f(\x9b\xd7R8V+\x86\x04\x84bQ.2q\xcd\x95u\xb2+O\xb9\xe5\xed\\\x98\x814\xd1\xc0X\xdb\xff\xc8(\xe2\x0b\xf5\x1c\x1d3VC\xb2\xae,\x03\xc1\x8f\x19\xa9\x16Yt\x16\x1f\xc5\x8c\xcf\xfd\xdfL\x94\xdb\xf7\xb2d\xc5\xfd\xdc\x15\x8f \x03\x9f\x80uS\xa4,\x93\xc6~@\xc8\xbcc\x02\x13E\xe0y/\xb6d <'\xf0\x9c\xc0s\x02\xcf <'\xf0\x9c\xc0s\x02\xcf <'\xf0\x1c\xff&\xf0\x9c\xc0s\x02\xcf <\x1f\xb0'\x04\x9e\x7fI\xe0y\x17>\x0e\xa0\xc1\xe6\xb4W\x1dP\x8c\xe9\x80\xca\xa3\xf6\x10_\x8a\xc0\xd6\x8d)\xb0\xba\xda~X\x98\xdc-\xcd\x87K\x855\x04\xd3&,\xdd\x12\x96NX:a\xe9\x11\x96Ny\xb7\xfe@y\xb7:\x0c\x1f[/\xba\x9d\xb6\x90V\x1a\xae\xce\xab\x98\xac\"\xbd.\x18KV\x11\xb2\x8a\x90U\x84\xac\"d\x15!\xab\x08YE\xc8*BV\x11\xb2\x8a\xe0\xdfd\x15!\xab\x08YE\xc8*2`O\xbe>\xab\x08%\xe4\xa2\x84\\\x94\x90\x8b\x12rQB\xae\xfd\x13r\xd9\xdb\xd2Hk\xe4\n\x9eiv\xad\xac\xb5i\x18_/\xfcW\x16\x8a\x19&nER\xf8\xd7\xe9m\xce\x95\xc1\xa7\xcfQ\xb63V\xae\xf0\xad\xeb\x05w\xbb\xe6\x8eN\xcb\xea\x1a\x1a}(\x03\xeb\x82\x9b\xa9Ts\xdd\xee,| \xfc\xc2\xfd\xed\xce\x1ed)\x9a\xe9\xc2\xfaiU\xdb\xe9\xd7\x05\x0cJ\xbb\xac\x1a\xae\xf5\x1b\xae\xacH\xfb\x9c\xf2&\xd1\xfd\xcc\xcd\xafP9\x0c.\xbcV_(iA\x8b\xbe\xd1\xf9\x15\xbb\xf1\xc0\x17\"?\xf6\x16Tw\x91\xbb\xd6\x01\x03q\x83p\x13\xd8s\x08oM5\x80\xea\xddp\xb7*<\xb1\x88\x96&Z!\n\x88\xef\xd0\xe3\x91h\xaf\xb5\xe70\xd2\xc4\xfc&\xe0\x14\x03V5\xe5\xb6\xc7\x05\xda\x9c\xca1\xb7\x1c.Hu\xc7\\\x0b\xd59\x9d\xe7\x90C\n\x057\x80\x03U\x9a\x89<\xd0\xbdV\xc0\x87^\xbd\xbd\xb8\x04\x0c*\x13ja\x97l\x9d\x8b\xb9\xbcE\xba\x80s\xed\xd6\xdd\x08'^Y\x81=`\xc3\xf8\xe6\xb9({(\x9bE\x88*\xd3\x8b\xdd\x86\x81\x97zQW/2\xbd\xa8\xd1\xea\xee9\x80\xad\xfcZ({OKF\xa7\x8d\x84[\x9b\xcbYa\xefc\x87\xefe\xfd\xeb\x8f\xe9\x81I;\x15\xb7\xdd\xcc\xbf\xb1\xbe'na\x8e\xc2$P\x8e\xf2\xf6\xd2+q\xf7\x04\xaf\xf95\x97\xf9\xa8\x95\x88\x8d+\x06\xcb\xea\x89\xbf\xa3]<\x9e\xc6 \x05\x01\xaff\xa9\xb8\x16\x99\x9b=\x88\"\xdcZ\x90\x1a*\xfd2\xde[\xab'e\xf4\xd2s'\xb8>\xcftr5b\xe1\xb7\x13\x956~y\xb1\x14\xc9\xd5\xe5-hO\xe1\xb7c\x91\xc9k\x91_\xde\x8e'\xea%\xb7\"\x1f\xc5\xcc\xdc\xb0\x15\xbfs\xb7\x17\xba\xd7\xa4^\xe2\xb3Ka\x04\xce\xcft\x18\xb8az&\x823\x99\xc9d\x02\xa2!\xce\x1c\xb7\xda\x9bJnD\xee\xb41i\xdd\xda\xa5\x05\xda\xa0\x90d'j\x03\xcdv\xaci\xb8Lb#\xa6\x8d\x8c\xcd\x0dC\xe6\x85\xc8\xafe\"\xc6e52Z\xf69\x8d\x96\x8c\x96d\xb4$\xa3%\x19-\xc9hIFK2Z\x92\xd1\x92\x8c\x96d\xb4\xc4\xbf\xc9hIFK2Z\x92\xd1r\xc0\x9e\xdc\xd7h\x99\xa3\x97\xf4s\x9d\x02F\x14)\xde\x11\xa8r\xf8\xdf\x06\xbd\xd5+-\xfc\xff\x97\x8b\xf9\xc1\xb3\x83\xffy\xe8\xe4[\xad\x84\xb2\xe6\x10\xbf\x1a\x8f\x8c\x8f\xed\xed\xd8#\xe3\x15D\x80\xbd\x1d\x94]W\x16\xcb\xf7\x15\xca\xee\x81\x85\x8d8\xbb\xbd\xed\x0eo\xfaY\xd8\xcb[\x83\xf8\xc8\\\xd8d\xe9\x0e\xfc\xad\x01\xdb\x11\x02IM\xf8<\xaa\xf1\xf1\x10\xf4aK\x15\x0d)\xe00\x84\xa6\x10\x9aBh\n\xa1)\x84\xa6\x10\x9a\xd2!\x0d\x10\x9aBh\n\xa1)\x84\xa6\x10\x9a\xc2\x08M!4\x85\xd0\x14BS\xf6\xdd\x93\xfb\xa2)\xdd.\xe0\xde9\xa8\x95\xc4\x00}<\xbc\x93E&\x0d*~\x91\x1f \x94\xf0\xe2\xce.\x07Fq\xbb\xce@'\xdf\xe0\xfe\xbdI\xaf.\xdd\xc2\xc9/\x9c\xfc\xc2w\xf9E\x93_8\xf9\x85\x0f\\\xe2/\xd7/\xbc\x9a\x0f\xf42\x9d\xb59%{\xc2\xce\xde\x1c\x9f\xbc\x99>\xff\xaf\xe9\xdb\xd7\x17\xe7'/N\x7f:=9~\xd6\xf9k\xa9\xe1\xfa\xe48xI\x1b\x9d\xdbj&\xec\xcc\xfd\xefy)\xa1\xc2\xb9:\xbax\x81S\x97\x86%\xdc\xb8\x93\x14w|t\xf1\xe2Y\xed_U\x0e\x9e\xfa:\xd5\xab9\x85\xe2Y\xfd\x9fe\xc5\xe6\n\x0f_\xc6\xf2\xe4 U\xac\x0e\x9e\xfd\xfd\xa0kE\x0eF\x07\xf1\xb8\xe3\x7f\xba\xe1\x1c\xfc\x16\x81\xe2\xdd\x0d\xd4\xbc\xf7+\xbb\xc2\xa8\xc3?\xffy\xaey\x9apc/o\xd9,\xfc\x1d_\xc7m\xf3AT\xe5\xe3\x99\x0f\xecv\xfc\xfbv\xc0\x9b\xd6\x03\xf2p\x85\xbc;N#\x98e:\xb9\xf2I\xb7 }\xcf\xed\x92\x9b\xe5n\xc4\xdd\xd5\x8d\xc5\x19Wk\x1c\x8c\x07f\xcd\xbb\xd3Q\x85\x9e\x9d\x8c\x0b\x85\x82\xc7){\xe1\xe4\x9b\xbe\xb6\x87\x0e\x9f\xfb\xd2\xaf\xd55\x80N\xb7\x1b\x1c\xde[\xf5\x1c\xa3vR\x82\x19\x05\xb5\xdbU\xcf\xf9\xcd\xb4\x97\x97\xb9[ ]\xd8uQ\xb2\xf4\xc8\xba\xf6\xc8\xb0L/\x16\"g\x8fs~\xe3\xf5\x8do\xc6\xec\x15\xf8\x0dO\x94\xd2\xeaI\xea\x84\xca\x95T\xd2X\x99\x04\xef\xf6{\x98MVf1m:qo\\\xc7M\xbe\xf4\x7fH\xbf\xf7\xcd\xc0e\x1bP\xac\xfc\xd6\xa3\xace\xe5\xc8\xd8M\xce\xd7k\x91\xbb[\xd2\xe7!sB\x99\xd3\xaaPJ\xe1\xb9\x98(l\xdc0\xa9\x8c\x15<\x05\x91\x88\xdf 1uz\xb6_@\x05\xb4b\x86n\x85\xaa\xb9}7z\x06\xab\x89\xa3\xa9r\xcd\xdc\xd5\x8f\xa6\xa7+qwX9\xd9{\xbb\x8a\xbb:w\x8c\xeb\xc3;\xa4\x1b\xbd\x12\x13UsAo\xad\xf7\xf3\x17\xa7\xafP\xc9{\xa9\x17\xd1\x83\xe7\xc6\xe6Eb\x8b\\\x84\x01\x80\xae\xe9$\x9dT\xdc\x8a\x94\xd9[\xe6\xea\x96\x1ab\xa6\x17\x1ds\xe8{\n\x1dY\xa4\xe5\x01d\xdd\xe7/D=m?\xf8G\x9d\x81\x07;\x9a\xee\x19\xdc\xd4\xcd\xe4\x8ej\x91D\xde\xbc\x1f\xcc\n\xf1e\xd67\x80\xa9O7!N\xc9\x89\xe3\xcdN\xec\xed\xee\x93j\xc9\x8aKV\\\xb2\xe2\x92\x15\x97\xac\xb8d\xc5%+.Yq\xc9\x8aKV\\\xfc\x9b\xac\xb8d\xc5%+.Yq\x07\xec\xc9\x9eV\xdc\xd1\x81\x95+a,_\xadw\xeb\xa1\x97\xb2R\xd3\xd6\xb9\xb8\x96\xba0\x08\x94\x8e\xd9ON`\x06\xb4\xd4\xb0\xff`OGL\xdaG\xb8n7\xf0+\xecg*\x9dv2G%\xb0\xec\xb8\xfe\x14\x03\xbb\xd6\xb6\x12'\xb0\xf5\x97\xdc\xd8\x17z\xb5\x926\xee\x88\xfd\xf8#{:\x9a(\xe8\xc9\x89\x13F\x1ah\x95\xb2SPv\x8a\x8f\x95\x9d\xa2\xc4\xe7<\xfe\xe8\x1d\x1a\x02\xee\x87Ws\"\x8c\x91\xcd\x0cGc\xe64\xb1\x11\x10\x7f\xd9Q0\x7f2\xbb\xd4Flj\xc6\xf7\xe5\xb9\x88\xf1W\xb4vW|\xa8\x01)[@\xe5PV\x84\xe4\x17c\xf6\xab\xd3C\xb9a/\xf5\xc2\xd4o\"\xec\x7f\xe4\x95\xb3h;\xc2\x13\x14\xa3r4p\xf3\xd7\x87\x14\x0fg\xb3\xa9\xf1\xbb\xf1\xd3\xa7#\xf7\xc7\x9f\xc7?\xc0\xff\x7f\xe8\xa0\xc7\xcb\xdb\xd2F\xb1\x03\xfc,_\xc9\xb0\xb7\x98\x12\xc7\xadC\xf9b\x86\xd3\xb9'\xca\xf2\x85\x89\xb0^\x94N\x82H\x03yn\x0c\xb2\xf0T\xc0s0]\xdaXd\xe2\x1a\x98\x16$\xb6\xa7QZ\x90\x9d#\xb4\x04\x81\x12\x04J\x10(A\xa0\x04\x81\x12\x04J\x10(A\xa0\x04\x81\x12\x04\x8a\x7f\x13\x04J\x10(A\xa0\x04\x81\x0e\xd8\x93=!\xd0{\xa7\x05\xd9\xa1\xe3\xdeN\xc1\xbfl\xb8\xac\x15j\x96\xd8\x03\xbfi9\x1a\xad\xea\x9a|\xd9r\xf00~\xfe\xe6\xec\xe8\xf8\xc5\xd1\xc5\xe5\xf4\xd5\xd9\xf1I\xc3\xcf\xb8\xf1\xf1\xf9\xcb\xb3\x17\x7fk\xff|\xf1_\xaf_\xb4\x7f=\x82\x9fk\xce\xc8[\xfb\xda\x80\xb0\xbc\xd2\xa9\x88|\xc0A\x9b,\xfd\x90\xdd\xe4JG\xd8\xcb\xdb\x16\xc8\x12?\x19 \x84\xf3\x84m\x1e\xc33\xf6O\x91k\x0fo\x02A\xba\xd6\xc1\x93[\xaaEWeX\x8fg\x9d\xbfFH\x95\x8d<\xa7\x01;p\xcdV\xde\x91I\x06\xf1-7\\Z\xa7F\xe6\x1e\xfb\xbe\xf5\x8aO\x02\xa8\xb6E?~\xee\xe1\xee\xae\xc1\xb8\xe5n\x8d\xc5\xfdx\x9f\xa1p\x16\xd0\xd3\xd2E\xb1B\xb8\xdce\xd79\x94\xa3\xce\xb1\x1c\xed5\x18\x0cc0\x13%W`\x1e\xb0\"\xbb\xdb \xc9\xc11\xad\x109\xfc\xa7\x8d\x009\xd6\x81\xc7\xf9j\x13\xd5H\xd9{\xbf\x9c<\x87\xbf/\xb9Y\xbe?\xd8\x98\x9a\xa7L\xca\x83+r\xe7\x1d\xc2;\x93\xf2|<\x7f\xfa=\xd2\xf1P\"\x9e\xdd#\xb4\x84_\x12~I\xf8%\xe1\x97\x84_\x12~I\xf8%\xe1\x97\x84_\x12~\x89\x7f\x13~I\xf8%\xe1\x97\x84_\x0e\xd8\x93\xfb\xe2\x97\xdd\x89x l\xbd)\xac\xb8\x1f\xcb\xe4%\xb7\x80I\xb0\xf0\xd0\xea\x88 \x05\xaeQ\x0cvg)n=\x15\xee\xff\xfajg>\x82\x08S)\xd6\x8b\x9c\xa7\xa2\x04V\x00o\x15\xe9t\x9dqu\xf8\xbb\x9bH7\xc2r\x84\xe5\xce3\xae\xbc3\x9f\x1bqpMu\xe20\x16`\xbe\x03\xe6\x1at,VZ\x03\xac\xae\x0d\xc4DM~<8\xc6nE\x15\x06d,h\xec*\xba\xc5\xfa}\x8d3\x180n\xfdap_`\x15n\xb8 \xcb\xd3%\xce\xc2\xab\x8f\xd1b\xf4r\x84cP\xeb0\xde\x967\xe7/\xc2\xfdC\xaep\x04%\x11\x94DP\x12AI\x04%\x11\x94DP\x12AI\x04%1\x82\x92\x08J\"(\x89\xa0$\x82\x92>\x7f( \xfe\xd7\x14V\x80\x94<(\x10kn\x01z\x01\xb0!`K\xee\xa8\x7f\x10\x18 \x80\x86\xed \x92\x97d\x01D\xeaD\x8f^`\x81\x1az\x84[\x0b\xbf\xd7@\xa36P\x14\xd5~(\xa0(\xcc\xac\xde\x11,\xb8\xdc>\x95\xed\xed\xe2v\xef\xc2!.\x84\x8dv= @\xbe'\x0f\"\xc0\xa7p\xc6@.\x9f\xdd\xc5\xc5\xd2\x89\xf2\x8aL)\x8b\xea\xb9\xbd\xf1in\x1d \xa1\x04\x0423\xcf\xd8\xe4@\xab'\xbe\xee\xe4\x00\xbc\xe7\xb8J\x8dO\xb7\xe7\xe1\x04\xc7wX\x15<\xeco\xcc\xe8*\n\xab!+\x04\xcc\xe7\x00\xe6\x99\x01\xd5<\x9d8\xbd.\x15\x16\x12\x0f.\x05(#\xbc\x1a\\\x18\xb4\xd3\xaf1\xd6\x96q\xb6\x90\xd7BU\x0b\x00\xaa\xf1D\x85\xce\xc2{\xf4pQ\xd8rq\x1c\xdf\x9a \xa1@7\xf77c\xe8fT\xa6\x83vj\x8d\xd7\xa2\xab\\\xca\xe5h\xa4a\xba\xb0O\xf4\xfcI\xca\xad\xc0\x04\xc6\xf1<1n?g\x7f\x0d\xf8\xa0\xe3\x8dN\xf7\xad\"c\xcb\xb6\xa0;q+\xed8$\x07\xd8\xaa\x19\xb9\x0e\x9f@\xa9&y\x1c;F\x9b8\x91\xfe\x19\x0e\x00\x15k?&\x83\xfa4\xcc<-K\x8e;J\xb2L/d2Q\xe5B\xe5b\xa5\xaf\xe3\x88\xe7\x8b\xe3\xbf\x8d\xfd}\xe1\xb4Z\xb8t\xbd\"\n*\xe2\xa8D\x04JR\xb4\xcb\\\xdf\xa0\x07\xed\xdeh\xab\x931\xba\xd0\xd50\xee\x95\xd7\x0f\xd7\"w-\x01\xfeq\xe6\xa5\xa6\xd4 \x870W?P\xc83\xbd%\xc3bH\x10\x0b*A\x14[_\xaa\xb4%M\xab\xb9\xf6H\x82\x0f-O\x99VO\x92%\x97j\xa2L\x91,\x11\xd6_H\xeb\x9dO\x91\xa0@\x87\xe5V\xe7\x86%\x00\x9d\xf1\xc2\xea\x15\xb72\x01\xe4(4o\xb5\x1be8\xbdS\xf4\xe2\x9c\x1a\xcbm\x8fT\xbc\x960N\xc28 \xe3$\x8c\x930N\xc28 \xe3$\x8c\x930N\xc28\xf1o\xc28 \xe3$\x8c\x930\xce\x01{\xb2?\xc6\xd9\xe9\xeb\x14\xe1yC|\x9db\x10\x91|\x9d\xc8\xd7\x89p\x00\xc2\x01\x08\x07 \x1c\x80p\x00\xc2\x01\x08\x07 \x1c\xa0=~\xc2\x01\x08\x07 \x1c\x80p\x80h8\x84\x03\xdccO\xf6\xc7\x01PE\x1f\xe0R\xb4\xd2i\x91\x89\xa9\x97GM\xa7W\xd1+(\xf3\x8b/Rs,\n\xcf\xddc3A\xac5\xe8\xc9\x006\xf4q\xdb\xcbf\xd3\x13\xceuo\xa4z\xaf\x0f\xe5\x90\xd4\xb1>v/\x84`\x93\x07Rp\x83h8\x9a\xf9\x15\x05\x01\x17\xfb\xde*\xe2\x16\xcd\x07\x7f\x137ue\n\xc3\x1a\xdeHq\xdb-\xd1\xb5\xb6\xe6\xf1C\xd6a\x83QQ\xc0\x97\"k\xcd\xa3\xf4\xdf\xbd\xb3\xadn\x1a\x8b\nJf\x93\x94P%\xf2\xaeEB\xe6\xed.\xcd\xc6 \xbf:\xe9\x0c\xc1\xbe\xea5k\x99\xb5\xb6M\x90\x801\x02\xc6\x08\x18#`\x8c\x801\x02\xc6\x08\x18\xb3\x04\x8c\x110\xb6{\x98\x04\x8c\x110F\xc0\x18\x01c\x04\x8c\x110\xd6sO\xee\x0b\x8cu\x07\x01z8Bu\xc5\x02F\xdf\x10\xa6@\xe2/\xa3\xffx%}a\xd1\x89jC/\x11\x1a\xc6^\n~-\xe1\xb9Ai\xbc\xa8\xe76k\xa2 \xabv\xc9vz\"k\x10u\x08#\xa9\x85\x1d\xceyf>`\xdca\x15\x1c\x13\xa6\x86\xf11\x87\xbf\xc3\xa9\xc3\x90\xa1\xee|Vo}\xd5\x17\xa1\xe6\x85\xabX\x0fN,\xd7\x0b\x1aEz\x06\x02\x06\x85a\xa2\xe0\x08\xd8\xbc0N\x8e\xba\x12\xb9\x12Y \xdb(\xa7a\xd6 .i\x18\x84\x06A\x00\x1c4\x83\x8f=:\xc5\xd0\xea\xdc\x9d\x05[qn\x1f\xeeT\xaf9Q\x1b\x86\xfd\xe6\xfc\x05\xc66\xa1\xa0\x18\xe4\xf1L,xr\xe7'\x95;6-\x0d\xcb\xd7\x89\xa3\x98*\x14\x8c)}\x83\x93;}\xfe\x02\x0e\xb6\xb4\x86\xb9\x83\x9e\x8bu\xc6\x13\x90\xe8'\xea1\xa8\x03\xcf\x0e\x0f\x17\xd2.\x8b\x19\x9c\x00\xbf/r\x96\x1aN@E7\xe2w\x9d0b\xf7\xfc\x87\xc0\x89\xdd-\xb4\x12\xf6\x13xH\xe0!\x81\x87\x04\x1e\x12xH\xe0!\x81\x87\x04\x1e\x12x\xb8s\x98\x04\x1e\x12xH\xe0!\x81\x87\x04\x1e\x12x\xd8sO>\x0ex\x18!`-i\xa8\x850U\xe9\xab\x00h*\x13\xea\xb8\xb5w+\x96\x87\x17\xfd\x80\xe3\xc8\xf2\x9dL\xdfF\xa1R\x91\xfbU\x07\xe0\xab \x9d\x81\x8a\xaas\x91\xee\x99\x90\xac\x95!\xa8\x1b)\x04\x88 \xbc\xbaWA\x0e\xe8=\xd8X\xef#uG\x8a>)\xfa\xa4\xe8\x93\xa2O\x8a>)\xfa\xa4\xe8\x93\xa2O\x8a>)\xfa\xa4\xe8\x93\xa2O\x8a>)\xfa\x9f\x91\xa2?:X\xe4\xebd\xbc\xe0V\xdc\xf0\xbbq^(+Wb|\xd20\x93\x935\x9d\x94lR\xb2I\xc9&%\x9b\x94lR\xb2I\xc9&%\x9b\x94lR\xb2I\xc9&%\x9b\x94lR\xb2w)\xd9`<6w\xab\xf5R\xab\xbb\xb1X\xebdi\xc6>\xced|\xe2\xfeyZ\x7f/f\x832[*\xa0\x1d:wS\xd8\xa9\xcab\x08\x0fj\xb1,\x17s\x91\x0b\x95\x08\\Q\xa7Z\xf0\xdc\xca\xc4\x9dQ\xe6T\xff\x1cd7cyn\xa7\xf7x6\xa8j \x98\xf3\xe1\xef\xda\x0b;\xd0\x9d\x7f\xe7I\x80\xc6$\x93+\x83o\x00\xd5\xeb\x07\xb1\xa7\xb0\x85\x13\xf6\x81\x80\xdd\xb2!\x9d9\xd1\x18\xe4`V(+3\x94\xbd\\\xfd \x82\x19\x00$\xf8=\xdb\xbdp\xa1dm\xdcN1\x12\xf6F\x08\xe5;.\x87\xaa\x98\xceS7\x0d\x9d;\xadE(\xb8;\xc4\x92_K'O\x83\xee\xb1\x12v\xc4\xcavQ\x87\x9e\xa8\x99`\x8b\\p\x1b\xe4q \xff%0\xb12\xf4\x01\x1f\x7f\x87YLT\xa0\xbb\xd2\x83Bi\xf5\xe4\x9f\"\xd70\xc3\xf0N\x1a\x8c\xaf\x87\x97Cs\xde\xb5\xfa\xac\xf1\xf0\x18\xfe\xa8\x8a\xd5\xcc)\xd00U\xafJ\xdc\xe8<5\xa3\x89Z\xea\x1b\xa7$\xdd\xc1`\x0d\xf0\x8dj\x8f\x1f\xb9\xe5\x12\xe9\xa31^!\xb8\xe5\xee7\xf6\xb8\xd6\xed\x8fO\xbf\xc1\xf0\xa1\xb9t*\x187\xf1S`\xb8\x167Km\xfc\xa3\xf8\x81:Z\xabX\x1e\xa9\x88\x8c\xdak4\xbd7\x91oj\xae\xa1\x13\xc0\x07\xa4\xa3\x86C\x0c\xac\x8e\xbb\xb9\xad\xc8\xafy\x86@K\xf8\x97\x9b\xda\xe3M]\x8c&jc\xef\x7f*i\xed7\xf6kxD\x0c7\x02\xc8vT\xba\xd9\x18\xe1\x94\x8d-M\xfd\x88\xf7\xda\x96.Pb\xd1J\x84\xc9\xc0\xb6\xba\xd3\x10^R\x8b8\x11\xe0&IR\xe4l-r\xdcD\x902^\x9f]\x9e\xfc\x0f\x98\xfc\xc6\x91\xac\xf8\x1dK\xe5\xb5\xc8\x17\x82\x19\xb9PN\xe1\xe4\xa0P\x87\x07\xc4&\xea\x86g\xd9\x93\xa4<2\x11\x9f\x98\x89\x85S\xf7\xec\x98\xfd\xda(\xa3\xe7\xbe\x08\xee\x92\xeb\xc6)\xbb\xff\xf1\x1f\x1b\x872f\x17NO3[\x06\xfb#{\xfa\xedh\xa2\xca5\xfa\x91\xfdP\xd5*\xcf9[h\xa7\x91\xcf\xe7\x99T\xc0\x1a\xed\x8fO\xff\x8c:\x7f\xa2\xdd!\x9a9\xc1T+\xf7y\xa2\xe0\xfb\xf7\xdf\xe2w\x8f\xc9\x18\\C\xe3*;\x0ez\x17\"\xd0\xe45\xee\xc7\x98=\xb6?~\xfft\xc4\xbe\xffn\xc4\x84M\x9c\"\xf1/\xb0\xd0\xae\xadp\xa4 \xec\x10\x89\xb4\\1\xb7\x83\x8f\x9f~;bO\x7f\xf8-\xaa\xf3tw\x9d\x1fF\xec\xbbo\xe3:\xdf\xed\xac\xf3\xdd\xb7#\xf6]\xad\x9f\xefw\xd7\xf9a\xc4\xbe\xaf\xf5\xf3\xe7\x9du\xdc\xf2}_\xf5\xf3/\xffb\x7f\xfc\xfe/\xff\xf2/\xbb\xeb\xfd0b\x7f\xfe\xf67\xc7Bp\xaf\x13\xed\xae\x1a\xb5\xc0M\x17i\xc4@fZg\x02\x1e\x93\xac3\x8b\xee\x8ax9\xfb:^\x96\x92*\x95 \xb7\xc2\x94O\x16\xba\xf3:Q\xe1\xe6q\x07\x19\x9f\xd1sD}\xe7\x9f\x9c\xeb\"\xc6\x01\x8f\xe2\x959\xd466\x13\xee\x04\\\xac\xae'\xf3j\xb7\xc5D\xf9)\x8e\xd9\xe3\xcb\xad\xd5pF\xa0\xc8\xe0=\xf1M\x07xS\xf1tX1c\xf3\"\xb1]\x08L\xca-g\x0b\xed\xa4M\xa9\x1cs\xe3\xbe\x83p\xab\xf8\xa7+o\x0fQ\x10\xf3\xc1\xc6(\xf6l\x90\xd1\xe2\x97\x05` !\x1er\xb7\xcc6\xf4Z\xde*+\xc28`\x00\xc6-E\xffQ`;\xfb\x9bQH\xf2$\xc9\x93$O\x92\x17\xb6\xc8\x15\xd8\xe1\x19v\xeeso(qk\xa7\xae0\x88\x17\x0b\xa9&\n\x86\x8a\xc9}|f\x9a5_\x08\xb6\xd2N\xb6\x02\xd36\xd8\xbd\xc7\xec,\xb0k=w\xac\xc7\xdd\x00:gW\xe2n\xa2*\xb7\x92\xf0\x806\x16\xd8:\x91\xa2[\x9a\xf0M\xc3lT\xb1\x12\xb9LBw\xb0g\xee&\x08\xaf\xd8\xc3\x13\xeb~\xee\x85*-\xf3N\xba\x82\x162aL5 \xbc\xe6\x0b\xe3&{%\xb6\xcd(\x96\xb4\xc2\x8c2\xb9\x92{M\x08*\x962\xa1\xb6<\xf3\xe2\x90\xeb6\xb8W\xa0\xb8\x17\xef\x9b\xc54-E\x86\x1b\x82\xc2m&\xe6\xfe5\xf5\xf2M\xfa`\xcb\x02\x87\x0b\xdc~l\xccMgv\xc7\x04O\x96\x8c\xaf\xd7x\xd4\x1d\x13\x99\xc2 z0\x9e\xa8tu\xe73\x9b\x17\x82\xb9?\x02\xb7)\x9dy\xc2x]AO\x12\xfe\xf1sw\x96\xa0\xb5\xd2\x81\xa9\xb1\x0e\xa0\xc7D\xbe\x15\x8ey\xae\xf9B*/Q+\xf6\xf6\xd4I\xcd\x8d!\x81\x08\x91\x0b\xe3\x85^\xa0\x87\x8a\x80\x1c\x8d@F%'\xb3,\x14\xe4Q\n$3Q8#X\x96\xdc]\x815=l\xd3\x92\xf8\x92\xcd\xe5\x90\xd5N\xf2\\l\xd8M\xd7\x92P`G\x01\xc9\x1f\x1d;\xfaf\xf7 \xd6\x91\x0b\xbd\n\xcc$2\x8b\xa2\xa5\xdc\xe8\x95\x98\x96!\x7f53\x17c,bC\xf1\xdaz{\xd7\xfb\x88\x95\xc7%e \xce\xd2\x16\xe4\xe4\x8f7\xe7/B\xe0_\xb0\xdb\x184X\x86\xd36QU\x1fcvr\xfb\xec\xa0\x07\x8f\xec\xab\x0f\x07>\xd6\x87S\x96\xc9\xea\x03\xef\xf3G\xb1d\x83l\xcd\x8dA\xd7\xa7h\xe2c\xfc\xee\x19\xe4\x0e\xee\xe8\xe6\xd6\xdef\x8c\x0e\x0c\xacnc\xb5\xca9\xf5\xdf\xab\xa1\xbb\x04\xfd\xban\xa7\x1bWtD[9`+w\xedU\xe3R;M\xdd\xb5\xe6\x98\x9d\x13!\xfa\xef[\xfb\xba\xef{\xe1n\x1f\xdf\xebb\xe5\x865\x80\x82T\xb1\x9a\"\x8f\xff\x00\xdd\xbb\xbe\xcfy\xceW\x03\x06\x00(X\x0f\n\xb4\x14`J\x01\xa6\x14`J\x01\xa6\x14`J\x01\xa6\x14`J\x01\xa6\x14`J\x01\xa6\xf87\x05\x98R\x80)\x05\x98R\x80\xe9\x80=\xd9;\xc0t\xa7\xfe;@\xf3\xd5:\xdb]\xca\x92\xdeKz/\xe9\xbd\xa4\xf7\x92\xdeKz/\xe9\xbd\xa4\xf7\x92\xdeKz/\xfeMz/\xe9\xbd\xa4\xf7\x92\xde;`O\xf6\xd5{+\xdf\xa2\xe3\xf2\xc9\xe9gl\x0dB^y\xdayfE\xae\xb8\x95\xd7\xc0Uo\x0f\x9d\x86\x8brg\xbe\xc3\x03\xcfi\xceN\x98\x1f\xa6=O\xb1\xc8P\x8f\x8b\x81&\xf2\xa6y|\xa0\xeb\x84%\x05\x9e\x14xR\xe0I\x81'\x05\x9e\x14xR\xe0I\x81'\x05\x9e\x14x\xfc\x9b\x14xR\xe0I\x81'\x05~\xc0\x9e\xec\xaf\xc0WQ\xfe\xe8\xd0\x1f\xcb%Q\x96\x81\xe0\xa0o\x81-\xc5\x89\x1d\xf0,\xf9\x04%\x07\xa3]\x8e\xe5\x14\xf9\xbfg\xe4\x7f/\xf8\xe2Wi\x97?\xc9\xcc\x8a\x9c\x80\x0c\x022\x08\xc8 \x83\x80\x0c\x022\x08\xc8 \x83\x80\x0c\x022|A\x022\x08\xc8 \x83\x80\x0c\x022\x08\xc8\xf8\x0c\x81\x8c\x8b\xb5\xb6\xe7\xb9L\x06x}\x98\xb5\xb6\xd3\xb5\xab\xd35\xfb0\xd7\x0b\xe4#\x9e/\x1e\x8b\xc4Q\xf77\xec\xe9\xb7\xe3\xef\xbe\xfd\xbe\xe0V\xaf:D\xda\xee!\xd5\xc8\xa8\x9ea\x11\x13\x14\x179&A\xe5\xac\xac\xeb\xf7qK\xae5\xec\xeb\x86\xafOnyb\x8f \xa7\xc5\xa9\xea\xbf\x0c\x90;c{\xde\x8f]k_\xef\xfc\xac\xb0C{\x97j\xef\xce/\x1d-\xbd\x0cY\x94\xfaw\\&^\xda\x1f\xc4\xa2D&\xd5\x0e`Z.\xda\x85\x8f\xb8\x0b\x1f\xdbo\x0e\xf6qh\xd6 `\xe5S\xccY\xb4\xbb\xf4W\xb4W\xe5BG\x1bP\xae\xb7\xe3\x98%\xa7\xd6\x85\xed\xb1\xd0C2\xfb\x8c\"\xa6\xbei\xc9\x07\x8c\xd11\xf4\x8f7H\xa9\xfa\x8dQB\x9a#y-\xcc\xf8(q\xff\xff\x99\x17\x0ba\xceE~\xec\xaa\xf7'\xd9\x94[\xbe?\xbb\xe97\xbb\xea\xac\xca4\x08n\xfeM\xa5\xd3c\xd0\xcb\x18\x0c\xdf-\x834\xd3\xb5\xc8\xd7\xc2\x16\xbd\x12\xb4\xc7\xc5\x81t\xd9<\xe3\x0b'\x05\x9a\xa5\xbeq\x02\x97\xb4\x8f\xdc\xcfU)@\xca\xd5\x93\xea\x87\x85\xeb{\xa2^\xb7\x7f4,\x95nV\xb3\x02r\xbc\x0b\x99\xe3 3L\xfc\xc3\xdb\x01D\x1e\x9eSZ\xca\xccc\xf4P\x97Uo/q\xd8!WV\xeat\xecT\xb7\x8d\x9d\xf84\x82eG\xf0vI\x99B\x11\xdf\x81R)j\xe0\x9b\xc6\xc6\x17\\*\xa6\xe1\xa1*'[\xf9\xd18\xa5h.\xb3\xcc\xe9\xb0\xa7\xe1\xb5%'`9n\x89\x90iIT\xa8/-\x84\xd3\x99\xb0\x0eK\xb9\xccP\xf2\xaa\xfa\x9dZ|\xf3\xd5\xefn\xed\x03\xe8i!C\xb6\x1fD.nx\x9e\"\x16_\x15vB;\xbcn\x84\x0f\xeb8\x11O\x8a\x94]K\xce\xe0\xdd\x8b\xea\xb9\x9c\x1c\x1e\xa0\x90+a,_\xadw*\x18\xae\xf6\x14$\xc6\xca\x9f\xd9\x0f\xf5\xa5N\xae\x90\xcf{\x95\x92\x97\xa8(\xf4 \xb5F\xec\xf9\x9d+X>\x1e\xf5\xff\xfa\x1f.\xf1E\xa3&\xdd\x0bU\xac\x0e\x9e\xfd\xfd\xe0\xf9]\xa8q0:x~\xe7K\xbf\xd6\xae*\xfc\xf2s\xae\x8b\xf5\xc1o\x8e\x98\x01\xa39xV\xafS\xa7\xf1\xfaXc\xb1\xd9F@n5\xec\xf2\x95\x88\x89\x12\x12\xa0\xf4\x99\x00@(Z\xc7\xf6\xbbJ\xf0\xa0\x10lo7\xff\x89/\\\xa5W\x952\xed\x87\x027O\xed\xca\xb9\x11\xb0\xd1\x99\xd6`\x8a\xb0\x1a\xc7X\xac\x0f\x06=*v\x1c=*\xe63\x8f\xfay\xe2\xfb=@\xba\x99V\x0b\x91WS,\xdf\xb3*\x11\xf7\xeaI\xa11+\x9b\xc4+\x0f\x0cP\xf8\x12\x1a\x00q7\xe1\xe1\xa7xM\x91N&\xea]\x9d&\xde\xc1\x9aU4\xb9\x8d\x1dn~\x0d\xeb2\xd4/'9\x0b\xd3\x0b\x8f\xdd\xcc\xc0\x88T\x9fS9_w|\xca&\x06O\x8a\xbd\xab\xc8\xfa\xddx\xa2\xfe\x9f\xf0 J\xb4\xc06\x1eae(r\x1d\x94\x12\x82H\xbb,\x1a!\xbf\x9f\x07I\xe2'hJ[\xd1?\xea=\x16k\xadX*\xe7\xf0\xde\x1e\x98\xa0\xb1\xb2\x89_r\xc3i\x02FY\x9f\xbaaI0\x00\x07\xfb\xe7\x88\xa5b\x1d^\x9e\xf0\xe6\xbd\xda\xb1\xf2o\x83Hu\x0f3\xfeW\"\xcfE\xef\x1d\xb9\xf5b\xb5w]|\xd7z\xce\xf0#\xb0\"0\x9f\xce\x84(1\"\x7f\xe3\xbe\xe0*\xbe\xc4VEf\xe5\x1a2\x11K\xcfJ0\xbf\xf4\xf0\xb7\xe6\xc2\x08\xdbO)\x96\xfd\x81Q\xb0\xe4\x82\xae\x1fU\xac\xf0\xe9&3]s\x99N\xf5u\xf7c\x91\x9b\xc5\x9b\xae\x16B\xc7\x15.\x84+\xe5_P\xaa\x8d\xc7#\x92\x13\x95h\xb7K\xee\xd8\xc3 \xde\x8f\x0e\xf0\x16\xf6\xad\x0f\x1bU\xadj{8]\x03\xc1'\xb2\x84b\xd1@\xd4D\xf1,\x17<\xbd\xab\x0b\x01\xe9\x94\xce\xcd\xb0s\xd3Z;\xb8';\x0fL,%\x95\xab\xdf\x9a\xfd\xcfA\xe0\xe4\x8a\xe1\"c;\xc6j7\"7\xe7\xaa!\x83\xc6\x14\xf0\x18\xc8E\"\xd7\x12&u\xb3\xd4\x13e\xb8\x95f~\xc7\x12\x91\x83\xd3O\xc4y\xd9\x8b\x92\xe9{\xb15X\x82\xabB\x8c\xe7\xba@\xa3Q\xf4\x82\x9fc\xf0\xb8\x86\xe1YC\xd8\x117^\xc7\xee\xe1\xd6\xa8\x16\x07\xd5\x19\xb6\xe0\x8b\"\xc8\xa1+n\x93e\xa8\xa4\xf0\xb28h\xe1\xd5\xd1\xd3=M\xa4:B\xa9\xe7\xde\x81 \x80\x8d;\x85HB\xa9\xf7E\xa9\x9bT\xfaE?\xb4\xd3G;'\xad\x9c\xb4r\xd2\xcaI+'\xad\x9c\xb4\xf2\xdd\x93\"\xad\x9c\xb4\xf2}\xb4\x0b\xd2\xcaI+'\xad|\xf8\xb9!\xad\xbc\xb7V\xee\x04]R\xc0\x87\x9dwR\xc0\x1fF\x01G\x1dv'\xbb#\x9d\x99tf\xd2\x99Ig&\x9d\x99tf\xd2\x99\xbf6\xd9\x9ftf\xd2\x99Ig\x1e~nHg\xee\xd0\x997j!\xcf\xefN\x8f\xfb\xdb\x00\x17\xa4\xb8\x90\xe2B\x8a\x0b).\xa4\xb8\x90\xe2B\x8a\x0b `\xa4\xb8\xf4\x10oHq\xa1s\xd3\xe3\xdc\x90\xe2\xd2T\\\xaa\xb5\xc1\xa9\xa0\x04SZ{`\xace\xde\x19\xb0\x03\xb2\xd3\xe3\x1df\x17\xf2x$%\x88\x94 R\x82H \"%\xa8\xc7\xa4H \"%h\x1fa\x8e\x94 R\x82H \x1a~nH \xda\xe2\xf1\xf8v\x9d\xb8\xddZ\xe0N\x05\xf7G\xd7\xe1\x01y>\x0e:\xf7\xe4\xf9\xf8@\x9e\x8f \xdd\xefd{\x0bWl\n\xa4\xdd?[\x91T\x90Y+\x0b\xf5\xd4\\\xef\xee \xd3c\xdd\x08\xb9Xv1\xd3\x11\x9a<\xa7\xb9Ht\x9e\xde\x83\x91\x0f\x9c\x8b\x97\"7\x0e\xac\xc5\xe3\xb1\xfc\xafP<\x9c3\xdf\x08\xc3FP\x99\x91\xc6\xeb\x9b3\xe1H\xa6\xaei:v0QP\x08n\xbe1\xfbI\xe7L*c\xb9J\x04&\xc6\xbd\xd6Y\xb1rrv&\xaduM\xacu&\x93\xbb\x11\xb6\xed\xb9*\x10\xa7/Y\xa5\xd2\xf6\x12\x0ed\xdeE` \xe8WR]\x89\x94\xad\xb5\xceP\xd8,VE\x06)\xd2\x06,@\xa8\xe2\xd7\x00\x92\xd6\xc3\x0b\x01\x9c\x19\xc5\xd7f\xa9\xcb\x07 x\xe2{pZ3\xac\x83\xcd\xb9\xe3\xb6\x13U\xa6\xdboNp\xf0ZLT\xb5\x18\xac\x9aQ\xa8\x148o4w\xc6+\xb5\x13\x16\xa9X;\xc1m\x1c\xb2k\xd6g\xfcZ[\x8f\x88!\xbc2\xd3v \xe0\x85;\x03p\xeb\x9d\xaa\xb9\x86\xab\xa2\xf6\xeb\x1b e\xd4\x03&\xca\x8ad /Qdw\x8e\xfd\xe4b\x9d\xf1\x04/\xe8cG\x1be\x1b\xf0/_w\x9e\xeb\x15\x0c\xde\x8d\xfaIu\xbc'j\xa5\xd3\"\x13#\xa7\xdf&\xb9\xe3 \xcc\x885w\xdb\x8f\xaf\x050\xe4]\x9a] \xb1f\xba\xc8\x19\x9f\x19\x0b\x0fZ\xb8;2\xc9\x04\x079d\xa2\xdc}\x0e\xfc\xf7q\xa3\x93\xba4V\xab\xeeD\x05`x\xf0\xc8\xc6\xb5\xc8\xef&\xaaL\xb2\x7f\xc3\xbd\xf6\x9fj\x81\xcf\x02\xa42\x17\x89\xbb\xb4s\x91\xc1\x08\xb5?\x1b\x99^\xc8\xe4\x1b\xff\xf0\x08\xcf\x8cfK\x91\xad\xcdD\x15\x86\x19\x99\nc\xc5\x9aq\x96\x8b9O\x1c\x0dE\xef,8Y\x08.\xfe\xbb$C\xcd\xa9\xa4\x8e)RG\x17-W\xe8\xc8/@\x1dM\xfc\xc3\xffZ\xdd_\x17\xa1\xd1sh\x93\xa5\xc2\x8a|U\x82\x1fn\xae7\xee\x7f\n\x92\xe2\xc3\x10b\x08\xcb].\x8e\xc5\xfe\xec\x85\x87\xb6\xd4\xe4\xben\x91\x9a\xd8\xd3gO\xd9\x8a\xaf\xd7\x00\xbc\xba5;=\x1e1\xce2i\xe0\x94\x019{U\xc61b|\x91\x81w\x9c\xaa\xcb\xa50\x08\x86\xc0\x88\xaa7,<\xae\x17m0\x08\x05\xf0^\x06\x9c\x9e\x1a\x1d\xe89\xd6\xaf\x01u\x9a\x85;!\xc8e=n\xa0\xcf2\xad1\xd6\x89r\x8b\x89\x90ty\x08\xa5a\xa9H\xc0G\x10(\x1e~\x04\x7fl\xa9\xd5\x88I\x95\xe4\xb0\xba\x8ejgw\xec)\xfa\xfd\x8b\xeb\xc0\xfb\x80h\xf5\x8d\xea\xd6%\xeb\x03k5[\x01 1>\xb7\"g\x85r?\xbb\xf5Xr\xf0\xdc\x07\xde\x08}\x0b\x95\x0eS\xe4\xeb\x03:Q)\xb8\xe9\xe6b.r\x10!\xcba\xf1@\xee\xe5\x1a\xdd\x00\x7f #S)\xc0\xd9\xa9\x00m6\xc0\xcd\xa5\x0c;\x97\xb9\xb1L*i%\xcf\xe4?E\x8a\xac\x98+?\x1b\x10.\x03\x97/\xc3\x0dtr5\x9a(\xe1\xb9\x9b\x0f\x7f\x98\xe1\xa2\xb8\x1f\xfeT\xf1~\xc2\x97\xfa\xb2\x9b\xae!\xa3\x86\\\x8a0Aq\x84\x91\xcb\xea\xc6\x1c\xb1+\xb1\xb6\x01e\xc2\xf8\x89p\x8e\xa0e4@Ls\x91\x08y-\xf2\xa9?[\xbb\x8f\x02\xfan\xb37\xbe\";\xf2\x872\x9cU\xffO\xf43\x0e\x17\x1bv\x83\xaa\n\x1a>|L\x90\x88M-15\xf90 j\x96\xa3o<\xd7N.D!\x14\xf6\xc5\x1ds@\x89\x96\\-\xbc\xa5\xa4\x0c\x0dY\x99E\xd7\x05\x7f\x0e\xc6\xa7\x97\x9e\xa3\x95\x16%\x14\xf6\x94\xb4\xae\x0f4P\xb1\xa0\xcd\xcd\x90\x8b\xdc\x1e\"\xcb\xf7\xeb9\x9e\xa8S4\xa9a\x1c\x17\xda\xef\xfc~\x00r\x87\x16\xab\x10*\xe2\x0e\xc2\x98\x9d\x96`\x04\xcchT\x1e\x8c\xd1D\xf9\x13V\x1a\xb7l\x0d\x9eBX\x04\xdb\x1f\xb3\xa3\x8a\xa9\xf10^\xcf\xa6'\n\xa3d\xba\xf94` \"@Y\xde4V\x9el\xc0Z\x90U\xa4\xc8\xc5p\x9b\xde\x85a\xbe\x83b^\x7f7n\xf7X\xa1f^\x11\xad8\xdc\xee\xab\xf2%\xc8\xc0\x81\xb3\x0e\xf4\xa8\xa6[\x93nM\xba5\x87\x11=\xdd\x9atk\xd2\xad\xf9E\xdd\x9a\xaf\xb5}\x1b\xb8\xa5\xe3\xe5t\x81\xd2\x05J\x17(]\xa0t\x81\xd2\x05J\x17h\x8f\x0b\x94.L\xba0\xe9\xc2\xa4\x0b\x93.L\xba0\xe9\xc2\xec\xbc0\xcf\xb9\xb1\x8e\x87\x11BK\xf7%\xdd\x97t_\xd2}I\xf7%\xdd\x97\xbb\xefK\xc2f\xe9\xea\xa4\xab\x93\xaeN\xba:\xe9\xea\xa4\xabs\xd0\xd5IW%]\x95tU\xd2UIW%]\x95tU6\xaeJT*\xf9,\x13\x14\xe3\xf3\x11\xd8\xc6\xee\xa5\x17\xe9s\x08n#I\x85$\x15\x92THR\xb97\xcb!I\x85$\x95/WR\x91jA\x82\xcaG\xe0\x1a\x1bSm\xe0\xc9\x0d\x07\xb7\xff\xb27XE\xd72m\xe8Q\xa4\x03\x9d\x036o\xc4\xc6\x1e\xfa7\xee\xaa\xed.E\x02\x15 T$P}\x99\xac\x91\x04*\x12\xa8\xfe\xb8\x02U\xfb\x06|\x05\xcb\xf6\x9cg\\%\x03 \x07b\x16}\x98\xc5\x96\x15G\xc9\xe3\x08\xba\xa7e\xff\x04\xcb\xfeZ\xdc\x82)p\xc8\xe3\xbf\xaej\xdf'p\xbb\xfa<\xe79\xef\xb3/s\x9d'b\x8a\x9cf\n\xefE\x8a4p\x7f\xd1g\xbf+\x19\xb7k\x14%s\xdd=\x12\x12]It%\xd1\xf5\xcbd\x8b$\xba\x92\xe8\xfaG\x15]7\xa4@\xc5\x0b\xb6\xff\x85\xbe~\x80\x0b\xb9\xebJ\xbe\xb8s\xab`e\xd2\xefV.T*\xf2\xecN\xaa\xc5t\x80H\xd2\xa4\xd4\xb7e+\x0c\xc85\xbe\xb5\xcb/\n\xdf|w\xdd<2\xee\x1e\xc7S\xe4\x0eN\x18\xf3D\xf9Y8\xa2 ?\xe2\x96\xbfz{q\x89\x89\xb5\x81\xc1\x97\xad\x96w$\x94\x9fnL\xacZ\x1f0\xac\x12\xe6X\xf5\x03\xad\xba\x83&\x90-\xc0\xb1K\xf4j\x16X\xac\x9eO\xd4\x82\xafV\xcc,\x1dw\xfb\x13\x8b\xe8\xc9\x16\x86\xfd\xc9]O2\x85\xd7\xf4\xfd\xa6\xeew\x89\x86<\xb0e\xf6\xce\x88tk\x0bS\xac\x0d>\xc0\xef_\xa9\xe9\xf8\x8a/\xf0\x97\xf7\xa6gS\x85\x8a\xafN\xf8z?Q#\xd4\xf4rFc\xffJ\x89\x03\x9e\xc4\xb1\xf0`\xbe\xc4\xa7\x06\xaa\xa9E7v\x17C\xac\xd1\xb6\xeb\x16y\x85Z\xb0k\x99\xc3\x8b<\x9e\xeda\xcei%n\xaaT\xe5\xcd]\xd4\xb9\\H\xc53_\xc2\xf1\x9aj\xc4\xa6\x98\xcf\xe5\xed\x98\x1d\xd9JZ\xd1\xf3\xd6\xda\x96\xbcj\xa2J^\x85\x9c+I\x8aU\x91ao\xc0D\x81\x942\xa3\xbd\xc0Q\xacS`{\x1c\x1e\x03\xf2o\xe6\xe4\xf0\xa0\xfe\x08\xd8\xd8\x1d\xdc\x18\x98A\x96\x1b6\xcf\x85\xc8\xe0\xaf\xe8\x14\x15\xebN\xf6U[\xa5b\x8dig\x8b\xf5\x10\xed\xa4\x9c(0\x85\xdd\xe5\x89\x8b\x10\x17!.\xf2\x07\xe6\";%\x89bm\xee\xcfH\xfa\x887\xc4a\x88\xc3\x10\x87\xf9\x129L\xccbVR\xd9\xf1\xf5\xd3\x99\xb0\xfc\xe9\xf88z%\xe6<\xd7k\x9d\xbb\xbfz0\x05c\xf9\x95\xdb\xf1\x9d$\xe0\x0b\xb2\xf8]\x87u\xd9S\x80\xdb\xdc\xa0D\n\xff\x9b\xd6\x0f\x17$\xb5\xd47lU$\xcb\xba\xeaP;\x8f}m\x0b\xd5\xca\xed\xde\x99h\x95\x03\x1b\x86\x7f\xf89\x03\x08\xe5X\xaf\xf4\xa8\xdfB(a\xa4\xc1W\xcf\xa6\xff\x1f{\xff\xbe\xddF\x8e$\x0e\xc2\xaf\x82\xd1\xf7m[\xee\xa6\xe9\xb6\xbbk\xf6\x8cz\xe4o\xa5\xb35ZVeI\x8d\xad\xb5\xb4\xbc\x97G\xb5\xeb\x993\x12\x84$\x08\xbf\xac \xfc0\xd8\xbb\x11r6\xb7b2ZCT\x1e\xbc\xb9\x83\x01\xd8\x1a\xf6\xc9gn\xf8\xb4&\x9f\x7f\xf60\x86XP\xe9\x81-\xae\xf2\x90\x90\x0f\xae\xe1\xb0\x8c\x1b#g\n\x17/\xad\x8f8\xfbo\xa5\xe7\xb2&\xc2\x8at!\x95h\xc12>\xdd\x17\x8e\xb9\x8f\x89!~\xfd\x06x\xe4\x96\xf7\xbd\n}\x1f\x0c\xaf\x85\xb7t\xcef\xf2^\x91\n4\x06+\xc5aM\xbeP0\xbb\x80\xf7\x06P \x848\x053\xc4\x07\x12\x81B\\\x9bH\xf1\x1c\x970\x8d\x83\xe0\x80\xadI\xdf?F\xaa\x8d\xe5\x0e\xd7O\xd6\x1fC\xb4\xee\x81a\xb8g\x80\x0e\x87(\xa9f\xf9\xaa+#\x82A\x86\xc2\xa0\x97\xe0\x0c\xa6k\xdfA\xd1\xe2\xf3B\xddmx\xe9\xe9[\x1c\"\xc7k\xe3\xfb\x89N\xa9b\x8e\xff\x1b\x06\xc1\"G/E(\xf1\xf61\xa8\x0c>`\xd7\xae\x9cAp\xea\xd8\xc1p\x9a#\xb7\xbf?\xa6\x8f:U\x7f\x17\xb3I\xd3)m\xac\x0cAcx\xae,\xa0\x82\x15/\xeb\x97\xda\x82\xf5\xde\xfa~Y\xcb\xaa\n\xe5\xc1\xff\xed\x00\x0ex\xf3\x0f\xa9=\xae\xf5eg\xa7G>\x80\xdd\x85\xcb\xdd\x03}5 \x86\x1b\\a\xb5\xc56\x07V\xeb\xb7\xb7K\xa0\x93jM\xaa5\xa9\xd6\xa4Z\x93j}W I\xb5\xee\x94h\xa4Z\x93j\xdd[\x0b\xee%8?\xadj\xdd\xa2>V\x15\xb9\x8dZ#C\xa5\xd1\xeb\xe4\xbdt\xc5\x1ay\xd3\xa9j>U9\xf2\x1c\xf7* \x86J\xac\xe7DMu7\x02a\xfeQ+\xaa\x9c\xf2\x14\xeb\xaax\xd9\x92\xf1\xcdx6\x13=C\xc9\x1bw\xad\x16\xdd\xda\xb4\xf63\x00\xfas\xc2\xd6\x0d\xd8\x89\xffI\xfe.&\xa7U!\xd8f\x04\x81N\xd1\x17\xb8\xc4_\xfd2j\x0f\xda:\xbbd\x9b\x15\xf7Y\xd66q\x0c\xe0\xfc\xbd\xcd\xad\xd0\xbabp\x15Q\xdb\xc2\xee\x12\xb7K\x11\xfb\xa3R\x9c\x1b\xcc\xd2\x8dT\xb0\x95\xbdU\xc8\x1c\xee\x1f\x9545\x9f\x0d=\xd1\xc2\xa8\xff\xf7\xff\xfe\x7f,\xe3\xb1\xcdx\x92\xac\xd0\x06\n\xb3DJZ#\x92\xe9\x80\x8d3\xcbR\x0ez\xf2\x82+>k\xd2\xb5\xf3\xfc\\\x903\x0bn\xe396s\n2f\x11\x97\x97XO\x0ei\xc150\xd4\xfcp\xf7\xb7\xa6\x01\xb4\x91\xfc\x16\x19Bo\xb4\x1d\xdfZ\x91*\x9e\x84c(^90\xb6pIL\xb8\xe5\xbb/\xba\xdfr\x0b\xa1.'\xacZ\x92\x83\xd57\x9c\x01\xd8\x0e/\xd28\x13r)\x1c\xb1\x96\xc6\x1ek\x9d\x08\xae\xd6NT\xb99\xa6\xb2L\x13>sG\xc68;MN\x99\xc4\xec\xf5\xa2\x95N\x99\xd2\xeaQ\xf1\x03\xec\\\xa4\xde\xae\xffh\xca\xda\x84\x9d\x0b\x99\x86\x82\x04\xf1\x1b\x1e\xa6\xc2Uu3\x97\x89\xc0\xb3\x00}\x1d4\xbe2\xc1\xa7\xad\xa0iQ\x04\xcb\x1c \xad&O\xba\xd1P\x1a\xe1\x90`,_,;\xedo\xc8\xf6\x82\xfc\x92\x116,@}\xad\xe3+8@\x17N\xb5\x03\xc2qM\x1c1\xc2\x9c\xd0k\xc00o-\xcf\x02\xfa\xbf\xfc\x0f\x17>\x81\xa9F\xf7Be\x8b\xbd\x83_\xf6\x9e\xafB\x8f\xbd\xc1\xde\xf3\x95o\xfdVCZ\xbd\xfb\xe5U\xaa\xb3\xe5\xde\xaf\x8e\x98\xa1\xccc\xef\xa0\xda\xa7J\xe3UX\xcbFc\x00\xd9\x86\xe2\x06L\xa6\x81\xcd\x8b\xb9\x8a\x94\x90\xc0\xd0\xc7\x02jJJxD\xa59$\xfd\xd8J\xc1X\x9b,\x0b\xb8\xc3\x9c\xb2\x926iC\xa1NU\x98\xdd\x08\xd8\xe8DkpDX\x8d0f\xcb\xbd\x9ds\xb0\x82\xfe\x89\xeb\x84\xbc@$\xdd\x04\x1e\xb9*\x96h\xe7\x1c\xcf\x9e/L\x01\x1fN(\xceb\xf9\x90X\xd3\xb4\xc8\x8ceJ[\x87'%\x13\xac\x05\xab\xe3\x14\xe9$R\x97U\x9a\xb8\x04\x9c\x154\xb9\x89\x1d\xb6W\xba]\x84\xfe\xf9\"\xc7ay\xa1\nm\x0cW\xb0U\xd7T\xd4\x9bE\xaa\x18b\xebE\xb1\xcb\x82\xac/\x87\xde-\x1e\x12\x0f=\x82m\x19B\xef\xb0OV0A^\x02\xd6\x9c\xd1\x06\xa3\x1di5\x91a\x17936\xcdb\xcb\xf2\xcc\xbf\xdf\xaa3BE\xcfDN\xa7\x02\xe2\x02q\xe8l\x86\x91\xaa\xed\x1d\xf7\xd5x\xa5\xa5\x1b\x16\x87\x92,\x0d@\xf0d\xc0&b)0\x01\x0f\xa8CD\xaar\xac\xbc;\x87\n\xf6\xfa\x14\xec\x05F\x80\xba`\xa8\x16\x05\x93\xcfO]U\x14!\xa5\x15j\xae\xbc@\xf4\x12\xf7\x88\xab\x8a\xb9\x8e\xceg\xaf\xfe\xa2\xc7\x15\xecB0\xf6wJ--\xba\xe6\xeavY\x9f-\xb8\xa0\x9bGe\x0b\xef\xb4\x1e-\xb9\x9c\x8ct\xe3\x9d@\x9b\xd4\x9b\xa6\x11\xc2\xc4\x85\x8f\x1f1\xe5=\xfd\x15x\xc0\xfd\x0c\xa5~\xda\xed\x92;\xf6\x00\xc4\x87\xc1\x1eJ\xe1>\x11\x885\xa8*]\xd7\xc1i\x02$/\x92+\x01\xa2\"\xc5\x93T\xf0\xc9\xaa\xaa\x04LFtn\xb6;7k\xb8\x039\xd9x`\xcaZR\x8e\xfd\xb5\xd5\xbf\n\n'W\x0c\x91\x8c\xe3\xf8\x1aLH\xdc\xcd\x072l\x85\\\x12}\x90r)aQ7s\x1d)\xc3\xad4\xd3\x15\x8bEj\x9d\x12Y\xe2\xbc\xec(g\xfa^m5\xd9r\xa9\xd32{f<\xd5\x19\x96t\x16\xe2\x16\x18<\xe2\x90\xb3\x99\xbc\x0ej\x82\x837\xc1:\xcfz\x8a\xef&\x8b\x07\xd6z2\xd9\xc2\xc4 \x96\x99\x199\x82hr$lI\xb0[\x9az}<\x17a\xb1\xce\x9aq\xff\xe4\xb3\x06f\xb7\x95eX\xc7\xd3\xd0\xff\xf0\xb3\xb4\xf3\x17\xeb\x10\xdd\xbf\xa5\xf6\\g\xdd\x01\xb5\x05a\xc8RW\x88\xc8\xdc\x81\x89\xdd\x03\xafV\x7f\x9c\xbd\xf6\xd3\x07:\xd8\x02gk\x90\xf7\xc1Y\x89~{B\xb8{f\xc5\xe6v\xe4\xaf\xeb\xf2\xd7}\x00E\xd8,\xb4\x19\xfa\x10r\xe1\x84\x16\x89\x98\xf5d\x1c\x13l\xab\xb7\xb8ta\xadK@\xf9X\xc4\xf3\xbf<}$T\xac'N\x0e\xfa\xaf\x1e\xf9y7\x90\xb1ymR\xffy\xd7\xba\xf4\x9b7\xef\x86\xc1\x8b9O\xfbD\xd4\xb1\x9dWU\xca\xf0\x83>\x8a\x1f}\xc8\xae\xd1\x9a*\xf6\xa0n\x81\x8f\xb5\x9ax[\x0d\xfd@s\xa7\xc6\x8cW\xa0\xee\xf8K1\xd8 \x06\x90\xf5\x8d\xbf\xf1A\xab\x12\x02\xf1\xda\x04 !G\x1dK\x08-\xe3\x80n\xb9\x1as\xb3\xf4\x0d\xaa\x8dZ (\xb8*\xe1\xa0\x93l\xfa\x9f\xe7 \x91\x1a\x91\xda\x06R\x1b\xe3\xd5p}\x88\xe3\xbb0.6l^9\xaa\xedz_\xf3D(H&(m\xb0\xb8\x8d\xc5\xd2[\x0d\x12Tz\xa7\xff\x1b\xc6#\xe5Q\xedlw>\xf1N\x1c\xf0\xaf\x03\x01y\xf8\x9d\x00K\x053\x99\xb4N;\x00\x9d?N\x9ce\x91G\xd1kA^\x93-E:M29\x19\x1e&\xc9\xa11\xc2n!\xef9\xb4\xef\xa1zlO\x16n\xe45\x7f1\xc0\x87\xbeb5\x911\xb7\xb0t\x01\xe2\x17\\r\xf9j\x18\x0c\x80n._\xc8\x88\x04\xa3S\xb7\xe7\xc92R\x80\xba\x0d\xfe\xe3\xf3|\xb0|\xda\xb70\xd2\xde\xa0\xe9\xdb\xeb\xd3s?`\xc3\xc7#\x0d:F\xeaN\x186\xab\xb8\x9d\xdb\xa7\xfaP2Xk\xad\x82]i!OU\xc2\x19]C\x80[\x9c\xbf\x86\xc7iO\xae]]\x01\xac\x92\xc0\x89\xb2\"]\x88\x89\xe4\xe9\xca\xdf\xa7\xbd\x0dA\xf8\x1e\x9f\x82$\xaey\x02\xfc\xba\xf1\xe3VJ\xfa`Cj\x07\xe0f\xc9g\x9e\x99t\x03\xac\xc4\xad\x1d]\x89\xd5\xc6\x99}\"v\xee\xa1\xf2}\x82\xdcq\xffD}\xd5_vd5;\xe53q&~\xcb\x84\xb1C\xfc\x1e\xa9\x10X\x10\xcc\x8d\xc0\x96|&\xd8B\x1b\xcb\xc4t*c ~\x01pqh\xcb\x1b\x13\xe1\xda\xddS\xe8\x0e\x83,F\xf7\x8f\xc21\x95\n\x93%\xd60~\xcde\x02\\EN+\xc0\xc1\x8e\x8f\xa0[\xa4n8\x94}\x0f\x98\xb4\xa5\x8b\xde\xb2\\\xd1\x85\x14\xd0\x1biDc\x82\xfdLT\x92\x7f\x00#b1\x16\x13'\x8d\xa5b\xb3\xb3\xd3\xa3\"\x1fh!\x8c\x01\x8d;\x0fpE*\xd6)~\x9f`\xd6%\x80\x18Z\x82C\x0d\xbc\xdde\xf8\x9d\x80\xc8[\x9c\xeb\xe2q\x15\xf6\xafH\xb1\xf0_*\x96x\xcf\xd5s\x9e\xe68y\xc6\x9e\xfc\xad\xd4\xa6\xb2\x00\xd8\x9cg\xec\xa9k\xf0a\xaf\xfd\xc8\xb9c\xfa&O\xf8\xed\x7f\xd4\x16\"\xd1\x93\xd5\xa8\x90%\xa3\"m\xb8\xbb7\xa6\xa0\xe1.o$\x94\xc2\xa9\xd0\x15\x90Z\xe3=\xd0c\xe0/Nc\xafO\x0b\x0e\\\xe6\xc8n\xecF\xc8[\x15\x01'\xc7\xdf\xc0\xea\x1f\x1d\xe7\xab\x7fT\xe0\x90a\x86\x0eH?\x8c\n\xbf\xad]^\x88\xb8c7:\x85\x0c\xbfH\xd9Tp\xeb\x04\xc3\xebS\x7f\xe1\x027l\xce\xaf\xa5\x9a\xf9;\x0f\x92$\xf7\xd2\xb2\xb7Cv|-\x94\xb7\x0c\xad\x8f\x98J\x1f\xcd\x0d\x89\xa1\x0e\x05\x1c\xcf\xf7\x85\\\x88G!A\xf1\x11\xbf\x16)\x9f\x89G\x08\xc5\xa31\xc7{\x1bCf\x9b\xb3E\xd3\xe2\x92\x83H\x15\xf3>z2d\xfb\x17\x8e\xda}`\xca\xf5\xbb\x99s\x0bA\xee\xcc\x88\xca\x9a\xb9acn\xc0i\x8cB\"\x95pK&z\x9a}\x14\xf8!\xfbQ\xdf\x88k\x91BW\xa5o\x06\xf9\x82\x94F\x8b\xf7\xe2\xe7\xc3S0t\xa52Vp\xbc+\xce,\xb5\x8d\xd42\x951\\\x03\x89\xfah\xa6&<]\x0d\xd9K\x9d\x96\x02Gn?A\x89Fu!\x84\x1f\xa6\x99S\xa6\x06\xa8\xe8d\xc9$\\\xadW\xcfW\xa9\x1f\x16'\x1d\xfb\x1f\x93\x9a\"q\x9fe}\xab\xa4\xdfN\xe3\x89TU\xe5\x19\xb0d\xe9\x89\x1a/\xf0\xd3:\x19\xb8S\x18\x97\x00\xad7h\xdf\x83\xf2\xf2N\xb5N\xde\x1b\x91\x9ej#Q\xc9\xed\x97\x1a\xd7\xc3f\x83\x9fq\xe5\x94=\x9f\xc1\xa8X<\xe7R=0L\xdc.\xb5\xc9Rw\xa0\xd85O\xa5\xce\x0c\xe2:R\xd7\xda\xa9\x8f\x89t\xb8\xc1\x90\x16\xa6nq#\xf2\x02\xec\xb1`\x0fRa\xa4\xb1\\\xd9\x070H\xe8\xb5\x1aV\xdc\xec]\xf7|\x94\x16\x8e\xe9\x02m[y\xc7\x14\x8a\xea\xd6}\xec\xcb)\x88x\xee\x0b\xf1\xb4I?\xcc\x8av\x1aE\xa1W=_\xbd\x08\xb1\xdb\xfe$U\x8c9*\xd9?w.\xb5\xea\x11\xf0\xef\x17\x9e'\xbb\x8c\xec\xb2\xbb\xa0h\xdd\xf7Q\xd7\xecs\xd7$[\xab{\xb0:\xf7\xac\x96\x0eg\xa4\n\x8aD\xa9\x9e\xa7T\x04\xc9\x8eO\xa2,x<\x97\n\xc3\xf2n\xc0\x94MS)\xd4$Y\xb9#\xbf\x08\xd0\x95N\xdd\xda\xa9\xdd\xed\xd8\xf5\x8aM\xf68\xa2\x94\x93S\x86\x9frr\xbe}\xeep?srB\xd4\x9e\xbc\x07\xdb\xef/\"\x8e\xe4d\x17\xa6\xb6R4s\x1f\xd8\xcb\xad\xdd`wM\x0b\xfb\x0c\xae\xc1\xcd\xc8x\xaf\x96Z'?\xcf\xa5\x15\x894[8q}\xfdA\x9f\xb5\xb7;_[a\xab\x85\x85\xbb\xc1\xa1\xfc\xba\xae\x98\xfb\x87O\x91_\xd7k\xf7.\x02\xee\xef3z\xeeWJB\x17^\x0b\xf6\xb5\xed\xdb\xc9k|~K\x8e\xf5\xddH\x90-\xf6\xa0\xaf\x97\xbe\x87\x91\xd2\xcf\xa4 ?\x02\xf9\x11\xee\x82\xa2\xfb\xedG\xe8\x7f\xf0\x0cy \xbf7\xd2\xa5\xd3\xdd\x89\xa2\xfb}\xba\xc9\xfc\xdf}[\xc9\xfc\xef\x87\xa9\xedD\xc8\xae90$G\xbeb\x1a!9\xd2\x89\xa2{.G\xbaOyC\x96b\xbf\xeb|\xdb7\xf8s%\x1ev-\xed}\x19\x91\xa4\x05\xf7\xd8\xb9o\xeah\x12\xf7\xeaD\xd1=\xe7^A\x99\xcb\x14\xe9\xc1[o,=\xd5M\x85NT\xe8D\x85N\x1b\xb4@\x88\xf26\x1a|\xfdU\xa4\x8a\x9f\xa2\xf9\xd9\xb1\xd6\xf9\xdf\x1b\x91V\x82Q\xf9\xa7PBj\xf2b\x8c\xfe\x10\xc5 \xdc\x1b7r2e\x94W\x8d\xdeYi\xeb\xa7\x8eQ\x95*1ob\xde\xc4\xbc?\x1a\xf3&\x0b\x8f,\xbc;\xa0hCnS\x0f\xe9[xP\xd4\x8c\x040 `\x12\xc0$\x80I\x00\x93t!\x01\xdc\x1bEu\x01\x0c0b\xf9\xe2\xaat\x1b\xaf\xd2\x8b\xc3\xcc\xceu*\xed\xea\x8d\xb0\xbc\xf6\x04X\x0b\x0e\xf9d!\x1b\x19I\xe0nGX\x88.\x16K\xbb\xf2\xd5\xce\x0c:A~%Gf\xca\x02p\x81\xa36`\xba\x19\xc2\xfc\xd5\x1b\xe3P\x82?M\x0b\xce\x1c\xde\xac\x02\xa9\xe2\x9b\xc6\x91\x8a\xf9\x92\x8f}\x8d%\xbc\xa5\x91o\x9d\xc7\x0b\xee\xdd\x90\x9d\xc1\x13\x97J\xdf8\xdc\xe3\x11\x87G\xb6\xb4\x12\xec\xd0\xad\"RK\x91.\xa41\xc0\x14\xa0^\xdb\xb0e\xc2\x95\xca\xaf\xfc\x16\xb7\xfeU-_\x07\x8f%\xd8\xd5\x0c\xaa\xc6=\xe9[z\x0d\xb0\x8e\x02\xa3\x1aM\xc5\x9d\xaa\xb9\xbe\x8b3\xd1H\\G\x1e\x83/E\xf5=\xad\xa9\x10\xa1\xaax\xce\xd3YQ\xdb\x1fP\x8e9\xc1J\xdc\xe4\x8f\x8b_\xf8n\xd2\xb0I\xcaoT\xf1|\xfd\x1b3\x83y\x04L\xf9\xc0\xc9j\xa7\xe9\x84\x08\x05T[EN\x1fVf*\xd2t\xc33\xce\x83\xfa\xc6\xcf\xb8\x19\xc5Z\x99\xacC i\xd1\xf0*8x\xc5\xcd\x11\x0eUA\xc5\x8c;1k,V\x0d\x05\xd1\xcc\x0b9\\z\xb1-\\\xcd\xe0D\x9a;\xa7|\x81\x0f\xc4\xa6B\xc5\x82-D<\xe7J\x9a\x05\xec\xfb\xb9\x10\x07ln\xed\xd2\x1c<~<\x93v\x9e\x8d\x87\xb1^<>\xd2f\xf137\x8b\xc7@D\x8f\xfc y,\x8d\xc9\x84y\xfc\xe4I\x03\xf5\x9dn,L\x0fu\xcf\xe5\x03\x97\x97\xa9w\x9eH(\xc6x\x0eOn\x9d\x0b5\xf9Q\xeb+\xff\x8c\xee\x16\xb6\x896\x8b\x1bn\x16\x1bl\x88\xb55u\xcf[Yo~#)\x06\xcb\xb24\x7f\xa68R\xb0\xcb\xd5\xa1\xf0\x1aSPD\xfa\xe2\xa0\x99\x19\xf7G\x02\x0f]G\x0b\x125\x9fA\xd44S\xd4\xe6]\xdc\x8e\xa4\xd6\xd1\xb5#U\x99\x97\xa9gC\xdb\xe4I\x00\x12\xfb\x98\xf6\xe5\x88@\x1bJ\xaa \xe0\x95\xbd[!\xa3<\xc0\x0ex\xb8\x97wt\x90\x96AZ\xc6\xf7\xabe\xb4\xb0\x8b\xeaI\x0dn\x92\x9c?8\xe4\xe4*\x07tx\xec\xd5\x13\xc7\x13\x90\x92jL\xe1v*J\xaf\x1e\xbd\x14\xe2\xc2\xc1t\x97#\xe56\xf2\xe4E\x9f\xbdZ_d\x98\x9f\x95so\xf0\x11\xb9\\\x18\xf2\xd2\xcb\x8cxY\x80\x9b\x91\x9d\xbc\x80\xea\xc3\xb0U\x0b\x9e^\x99B\xf5r\xdb%\x129\x93\xa1\x04=3\x02\xb7\xd0\xde\x02M\xfbR=\xc5\xce\x03j\"ub\x0d\xc3\xcb\xaf\xa4\n\xd7\x899\xda\x17\xa9\xbcv$\xfa\x11\x86\x0f\xc1\x8a\xd5V\x1c`t}\x9a\xa9\x18I\xc3\xc1\xe0\xa9\xbfx\x8e\xbf\xf4T\x12\xee\x93\x86\xe7\x99x\xe29\xc78\x9b\xb2T8~ \xfcm_6\x0c\x92\x07\xa7\x0b\x82\x1a\x8b\x99T\xca\x81\xe3\xac\xedH\xb9/C\xdcg\xbe\x94\xc6YThm\x01)\x19|b\xc9\x91\xa6\xaa\xd39\xdb\x0f\xb7\xef\x82\xcb\x0ei\xef![\x80'l,\"\x05\xb3\x83M\x9f\xdb\xe2>\xe0\xea\xfdk\xcc\x88\x05WV\xc6&\xdc\xf3\x96m\x16n\xfe\xe1\xab*\x1f~\xe3Hv,\n\x17a\xceZY\x9d\xb3zf\xc6\xc7\xfa\xba\xa2\x18:\x1c4\x08\xad\xcbC\xb5\xba,\xdd\xd1\xa5\x18O\xc7\xd2\xa6\x8ep6\xcc\x12\x0e,O\xb4G3\xe3\x91r\xa7\x0bN8\xce1\xde(\x14r\x19\xe0\xb6\xe24\xecr\"\xc70\xb7?\xdc\xc5k\xddV\xb3%\x8f\xaf\x1eg\xca\xfd\xcfq/<\x9f\xc5\xc5\xc1\xc0m\xf5\x94ex\xcdhNs\x86\xa1\x0fT\"\x01\xb2\x99P\x02\xefKA\xfb6w4\xb91\x01O\x0e\xa2\xe3[\xeev\x94=9`\xa7nBGu~n\x9e/_*v\xf4\xa7?A{\xc6\x18{\xa95\x9bj\xcd\x9e\xb1\xe1p\xe8\xdf\xb9r\x83r\xb5\xf2\x7fq\xb5\x1a\xba\xe1^\xa6z\xb1?\xd5\xfa\xa1\xff}8\x1c\xe2?\xe4\x94\xed\xbbF\xefa\xaa\x0b\xbd\xff\x07\xd7\xeaa\xf1\xb2V\xde\xf2C\x19\xca\xa7\x1dP\xfe\x9d_\xf3>`\xb2g \x17\xdc\x00\x1b\xc1\x93f\xff\xa5\xd6\xc38\xe1\xc6\x94\xa1\xc3a]\x0b\x84\xa2\xd4\xeao%\xb0Y\x80\xfb/\x1dp\x9f\xae\xec\\\xab\x1cr\x1c\xfe\xa5\xd6\xfb\xc3\xa1\xe31\x1e\xa5\x08\xf5\xfe\xc3*\x8ea\x01\xeb\xf0\xbb\xcf'\x08\xfe\x8b\xe3\xf3\xa3\xb3\x93\xd3\x8bwg\x0f\x0f\xc2\n\n\xe4\x97\xfa\xfb\x11J\x80\xff\xb5\x03\xf0W:\xc0\x0c@\x1f/\x91\xe3\xbe\xe1\xa9\x99\xf3\xc4-\xa74}\x0e\x7f}\xb00\x92\x9c\xd6\xc6y\xaf\x16\xc5H0\x0fl'\xb4\xfa\xb7gL\xc9\xa4\xf4X[1<\xec\x0e\xd8\x1cnE\xe1|\xe4v\xc9x\xc5\x96\xf5\x93z#\x93\xc4}\xf0\xb7#9\x86\x1c\xa9\x07\x0d<\xf7\xb1S\xbe\x86\xf0\xc1\x89\x90\x07\xe1\x1a\xf4\xc0\xb8\x01\x97\x16\xf2\xb5\xdc\xec\x91\xca\x8f\xa7JVA#Y\xd3\xe0r\x91\xc4\xf8\xd4\xfa\x0b\x95@1|\xf0\xf8A\xa4\x84\x8fO+\xe7\x9f\xb1b\xa8h\x0f\xa0\x8e\xf6\x0eX\xb4\xd7D7U\xc0\x86\x08J\xb47(\x06\x000\xde\xf2\x05\x0c\xf2\x9f8\xfb\x7f\x95\xbe;@\xea\x9fK\xe0\x9cL\xbd\x90\xafb\x1aq&\x0d\xbb\x11I\xf2\xe8J\xe9\x1b\xf4\xd5\xcf\xc1\xfa\xf7\xdev$\x85\xeaF\x0eP\n\xd6v\x17\x0fJi\x1a\xb7}\xe06\x86\xcd\x8b\xd4%\x90I\xd8=\xbc\x11\xdb\x16~} \xb2\xda\xcd\x99\xee\xb3\xdf\xf4H\xc10\xf9\xfe\xb2}G\xeba)kzn0e~\xfd\xe5\xd7\x87\x07w\xd9\x93\xeap\x95m\x81\xf5\xe0\x18O\x86O\x9f<5\xd1\x9e\xc7z[\xc0\xaff\xf4\xf6\xf1W\xfb.u\x87u\x97]\xbd\x85\xd3\xeb\xeeo\xb4Z\xb2\xb8\xc9\xe2&\x8b\x9b,n\xb2\xb8\xc9\xe2&\x8b\x9b,n\xb2\xb8\xc9\xe2\xc6\x7f\x93\xc5M\x167Y\xdcdqo\xb1';Z\xdcE.J0hAe\x86}\xb8\x95\x06S\xd8\x82\xa9\xfba\xb0\xb7\xe43\x9f\xa1\xb8\xd7\x90\xb8\x19\xbe\xd5\xe2\xdd\xf9\xcf\x9e\x0f\x04\xcb\xbd;}S\x89[;\xba\x12\xab>\xbaZXH\xe8\x13\xfc\x04\xee\x9f^\xd1\xe6\xc6_\xc0t\xcag!\xd3f\x88\xdf#\x855m\xae\x87\x1b\xc1\x81-\xd8B\x1b\xcb\x04h\xc1\xa0\"\xef\x85\xbb\x95\xfad\x03\x14 A\x17\x80\x07\xfe\x81oi:>\x13L\x90\x92\xe6=\xad\x00\x07\x98\x1fA\xb7H\xddp(\x92\x1c@fG^6\x99)\xc4\xf6\x045\xe8\x1biD{\xea_\xdd\xd1\xb1\x853\xa5\x92\xfe\x07\x8a\xbbT\xb18`\xe8Tyd&W\xec\xcf\xc3\xbf\xfee\xa3\x9f\xe5\x0d\xe48\x90\xb7\x85\xbc-\xe4m!o\x0by[\xc8\xdbB\xde\x16\xf2\xb6\x90\xb7\x85\xbc-\xe4m!o\x0by[\xc8\xdb\xf2M{[Z\x8c\xf2f\xab\xb8\x8fi^\xed\xd9;\xdd\xe1^\x96\xeaR\x81I\x8f\xfe\x9f\xba\xa4\xb3D2\xbf\xe74\xf3*\xe5}JH\xfc\xf5\x08\xbf\xe7\xee\xc1\xcd\xcd-yd\xc8#C\x1e\x19\xf2\xc8\x90G\x86<2\xe4\x91!\x8f\x0cyd\xc8#\x83\xff&\x8f\x0cyd\xc8#C\x1e\x99-\xf6dG\x8f\xcc`O\xdc.e\xfb\xcd\xd2\xd3\xf5;\xb0\xd7\xb5\x17\xb0\x8f\xd9L^\x0b\xc3\x8a\xdb\xee@9\x15\xb7\"\xce\xac@\xb3\xcf30\xcf\xd0\xf0\x00\x15\xd3\xc3m\xce\x1dF\xf8\xe1v&\xf6\xcc\xf5\x11-\x0f\n\xc2\xb7\xa6\x0bj\x06d\xc9\x93%O\x96U1\xa2w\xcdxqZ\x9e\xca\x19\x11\x0e\x03\x85c#N\x05\xb7\xce\xfe\xca\xa7q\x8d\x1e\xb8F\x0f\xbc\x95\x99\xcf\xf0\x8c\xfd\xbb\x13\x00\x999`O\x98k\xe1\x00\xf8\xf3\xff\xfa\xf72Vy\"\xb9\x11}\\~E\x0eY\xfen\x1a\xf6\xad\xf2#\xbf\xb5\xe1[ \xc8\xd2\xf66\xb0\xcfb1\xa5\x0d\xe2n\xac,\xb6uK\x8e\xe3`\x91\x82\xd1\x02\x83\xca<*\xfcf\xc9\x98Y}%T+\xa5\xbf\x11\x96O\xb8\xe5}\x08\xbd\x04j\x03:\x00\x8c\x91\x9b\xbf\x0f\x1a\xe94\xd1i\xfa\xbaOS\x00\xb8D\xf7u\x8a\x0c\xe0\x97w\xcf\xc1\xee'c\xb1\x96\xca\x0d\xe56\xa7\x9b\xe8]\xab\xfa\x0c\xf0\x1bn\xeb~\xe1\xf7v_\x8a\xd5\x07\xed*\xec\xdf\x9fq\x93&\xd2,\x13\xde\xa8\x97\xd4\x0e\x1b6dRMd\xcc\xad\xb7\x99L6\x9b \xe3t-O\xc0\x0e\x9f9\x08\x91\xf2\xbd0*\x18'N\xf9@\x97\x9b;\x9f\xdd\x93\xb6<-X\xd2\x91\xdc1/\xbf;P \x1d\xb8]b\xfbbv\xc0\x8e`\x04v\xe8\x88\xd3MoV\x8b\xb1\xee\x11j\xc1vA\xbd\xc0\x01\xfdo!\x08`\xe6\xce\x02\x818j\xf0\xd4\xc2\x94\x87\x17\xef\xde<\xf4\xa1\x94\xd8\xd9\x85~K\x0cX\xc58\xa0G\x0f\xfa=[\x9eQ\\\xa3\xe8\xc0\xac{\x10t\xa4x/\xfe\x7f\x9a?\xec\xb0\x991\x1b\xa1&#\xa1\x9c\x827\xe9q\xae\xb7c\xef\x8e\x11\xaf\x0d=\xd6:\x11\\5\xa0\xe1\\\xa8\xc91\xb6\xc7\xd8\x85;G,\xe7\xa3\x9c\x95\x81e\xc6r\x9b\x19\xb6\x7f3\x17\xe0W\xe6\xbe\xa54\x91r\x0d]\xab\x87\xc1\x15\x0b.\x93Q\xcbb\xdb!:\xdd\xf8\x0cF`W\x0e\xf1\xf9c\x18-\xfb\x81ot&\xc9s\x9ep\x15\x8b-\x82\x96c\xdf\xe3S\xec\x0e_8%\xbe\xe1\xd3\x1a&\x8ep+\xbc\xed\xe4\xcf\x8d\x97A\x15\xd6\xea\x0cw\xae\x18\x8e\x0c\xc7\xe0\xed\xbb\x8b\xe3\x03\x08\xe3\xe1\x8f\xde\x87\"\xc1\x06;Q\xd6\xdb\xe1\xb9c\xbfb\x8c\xa3B\x1f)#g\x8a\xdb,\x15\x8e\x19\xff\x96\xc9\x14\xbdd3=\xd3`\x1b7\x98\x95\x01q\xe1\xac\xe7\x7f\xeb)\x06\xf3 N'\x95\xd9\xc5|\xb4\xf4\xfe\xad\xb8W\xe6c\xc3\xd9\xeaeC\x16\xdd\x9c\x01\x19\x9c\xa1\x9b\xcf\xb1\xef\xb1\xf5\x19\xeen\xf8\x9d\x1c\xd5\xe6-\xac\xa1\xb5\xcf\xf6\xf9.}l\x7f?\x85\x11\xa0Am\xb3wA\xc3\xee\x83\xfc\xe6Y*l\xa3y=y\x1f6\xeb\xbb\x18h\x1et\x87\xfe\x0bZ\x90iH\xa6!\x99\x86d\x1a\x92i\xf8\x8d\x9b\x86\xcd\xd2\xa9Ql\xf4\x11\xb6\x95\x8e\xfd\xb5%\xe8fv\x97S}\x98\n 0\x12`$\xc0H\x80\x91\x00\xfb\xa6\x04X}\xb0 \x12\x8a\xb4E\x07\x17\xee\x14\x93\n\x99_\x88\xe7\x07\x1fO*f\xd2X\x91\x82\x83\xe4J\x90\xbf\xe7\x9b\xf0\xf74k\x15\xbd\xd5\x18\xb3\xbd\x1e\xb3\xfb\xdb\xca\x9b\xdb\x91\x0b\xfec\xbb\xe0\x9b)\xa6\xf6\x92\xf2f\x97\x0c\x9c!'\xbfo\x1f\xc3\xd8\xc5\x9c\x9b\x89\xe4<[.\x93\xd5\xbbi\x7f2Ys\xecm\xbd\xc1\xdf\x81k\xb0\x8e\xd6>\xe7<\xf4\xe9\xed\x1c\x0c\x1d~\x96v\xae3\xfbn:5\xc2\xd2F~\x92\x8dl\xc4\xf16\xbbZ\x19\xa0\xf7\x16_8\xf9\x83C\xf4\xdfX\x03\xed?\x05k\xfe\xa66\xbc\xd0\x12\x10aa7\xfd_^\xcd\x85\x88\xdb\xc7W\xc06\xe8\xa4\xa4\x9a}J\xd5,L\xdfv\xbc\xfa\x9c\xe9R\xb7\xb2:\xd6\xf7$\xef\xc8\xaf\xe9X\xd3\xb1\xa6c\xbd\xe5\xb1\xdeYn\xb7\x8d\xd1\xe7\xc0\x97\xac\x92\xbb\x1c\xcbm\xcc\x8eOc\x08\x95\x96g\xc4\xd0\n5\x11\xe9B*[\xbc\x05+\xec\xf3D\xc7W\xcfW?\n9\x9bo\xc1\xcd\xc6\xae\xdbH\xf6@\xd0\x9c\x9by\xf7\xa1\x80\xa3\x9c:\x83\xcd\x8e\xe6\x82O*\x97q\xb6\x8c\\'\xefV\xb7\xf4\x87A_(J\xa4x\xcaSk\x84\xfd\x11\x81)\x7f\x01\x94\x9d\xbc\x00\xb7\xa4\xfbg7\xa4}W\xe4K\xb2\xa1\xa1\x9f\x0c=T0\x0f\xb8\x9c:\x19Q\x1d\xa4\xd6C\xef$\xc7r\xd9\xabe\x83 q\x84f2\xc3b\xbeD\x86\x8el9\xfc\x9cf\x89\xf7B/S\x1d\x0bc\xb0$*\xac\x03\xadh\xf7G<\xe7R\x0d\"%U\x9cdX8\x95$\xa5O\x0c\xbc&\xe8\xc0\x83yB9!\xce\x10\xea\xa2\x8b\x1a\xfd\x07\xee\x10Xn\x05\xb3)W\x06k\xaa\x16<\x9eK\xe5\xf3\xe5\xdc\xb0U\xd2-\x0e\xed\x1c\xce\xc1F\xa4\xe4\xd8\x83\xea\xa5M-K5N\x03(V\x1b\xd1\xb1y\x91\xe3\"\xd6\x8b\x85\xb4\xa3~S\x14\xc3\xb8\xf6\xb8\xf1HL\x90[\xe2\x08\x94[\xdes0\xac\xd8\x97\x13nujz\xf6Y\x03`\x9a\x82K\x1fh\x8f\xe9\xcc.3[\xfc\xb6L\xc55\xc2\xe7&\x039\xbf\xf5\x8c\xc0\xbe\xfdy\xea\xdf\x85/\x97\xfd\x1b\xc3>x\xc9\xde\xbf\x97\xb8\x96\x13\xa1b\xd1\xb3G\x81\xb9\x82=\x00'\xfb\x80\x94\xa9\x8dHG\xfe\x96\xa8\xee\xd1\xd6y\x11\x92ZE\xc5\xcb\xd9\x05$_\xb2\x8b\\\xf2y\x9a\xc1\xa32\x0cd\xd3\xe3\xcc\xdcn\x11\xaak@Y\x15\xe2\x8b[\x83\xb1\x88P;\n\xec\x0buad]\xff\x8d\x80\x0eQ,\xff\xe9\xc90(\xe0p\xbdL\x920{k\xd8\\\xa4\x02.$\x01\xd2\x1a2\xf6\xb3x\x90\n\xf6?\x99\xb1\x8c\xcfR!\x1c7\xf57\xa4`\xd8\x14\nj\x87\x91\x82\xb8\xcbBp\xe5\xe1\xc0\xc9\x0e\x97\xcb\x1f\xb9\x99\xb3\x89\x16x \x07\xf2d\x88\xcc8-\xeb\xd6\x0c+\x07\xfa\x85\xe3\xcc\x95jd\xa7`9\x8e\xec\x18/\xf7\xb74\xf8A&\x15\xae_&\xa3n\xec7\xb4\xdc\xd6x\xcaP>\x88\xd1\xb5\xb6b\xd4\x7fjh\xde\x87@\xe0\xeb:%\x08\x95-\xf6\x0e~\xd9;?y\xf5\xf6\xf8\xc5\xe8\xcd\xf9\xab\xd1\xc5?O\x8fG\xef\xdf\xfe\xe3\xed\xbb\x9f\xdf\xee\x0d\xd6\xbe\x9c\x9e\x1d\xff\xf4\xee\xe2\xb8\xf9\xcb\xd1\xbb7oN.\x1a\xbf\xbd;}w~\xf8z\xef\xd7\xdc\xf9\xed\xd4\xca\xd6Y\xeb\xa1\xc4\x99\x12\x937fv\xe1K\xa3y~\xbb\x87\x81O\xe5;\x10*\x82\x1e\xafOx\xc4ZVq\xc0~\xd2V\x98\x96&\x08\xf2\x01;\x05.\xc0\x13\xb3\xad\x04Nu\xa6&\x9d\xa2\xec/OsU\x8dD\xafSG\x8c\xe5\x8b\xcd\x8a_Es\xc9%\xd7\x16\\\xba\xdcK\xaa\x89\xb8\xed\\5\xeeR\xee!\xe81\xc7\x1a_u\xb4V\x0d\xfc:9\xac\xad\x18\xf8\x1b\x97\x16\x12\xefy\xc2\x7f2\xf7 ev!\x9c\x9d\xce\x1a\xa9\x82\xbea)\x8e \x8c{l/1\x01b\x02\x9d#\x13\x13\xe8\xda\xa5{\xc9\x04`\xdb\x9c\xfa \xd5l\x04Il\xfd\xc8\xb3@\xc1\x16\x9d\xb6\xde\xa0\xf5\xd4\xae\xa0\xf18|\x1c{}\xa7\xd0\xd6\x82\x06\x84\nr\x0ec8\xe9\xf6F\xbb\xb6\xd3D\xc6n\xbd\x80$DC\xe2\x0e\xe6\x08s`F\xdcZ\x1e_m\xa1N\x95\xc6\x1c\xf5\xf4\x9d D\xbdOW\xdfv\xe4j!W\xcb\xf7\xc0\xea\xc9\xd5\xd2cFr\xb5\xf4\x93\xadws\xb5 \x15v\x9f\x9am\x18\x03)\x7f[s\x84\"\x08[\x1a|K\x7fJ@\xe5h\x9a\xf0Y\x13\x8c\xc1\xe4y\xfe\xfa\xdd\xd1?F'/F/_\x1f\xbe*\x99\x1e\xd5\xdf\x0f\x9f\x9f\x1f\xbf\xbdX\xfb97t\xaa?\xbf=\xa9Y8m\x93T\x17?y\x99\xf0Y)E\x1b\x03\xd6\xcf\x93X_\x9d\xbc@Z\x0e\x98q\xd6\xcfT\xa7\xbb\xeb\xbd[\xebowTz\x8f\xe0h\x9d\xcb\x19\xdam\x8e,\x83\xbc\x06}\xb8\xec\x84\xe3\x0c[\x0f\xf7\x1a\x92]\xf1S\xd5\xab\x97\xeb\x8a\xe0+\x0c\x9a\xc5\x0d7^\x85\xf6\xd7\xeb\xf3\xe0\xfe+\xd8\xaf\x9f\xa2\xc0\xa1\x11=\xce\x7f\xd1\x7fw\x02\xddf\xb3\x96\xd9\xb8\x16\xb9o\xf3CN\x9e\xfe\xf0\xc3\x93\xff\xe85\xa8\x11\xf1\xf2\xe9\x0f\xff~\xf5\xa4G\xeb\xf2 \xce\xc6\x89\x8c\xff!V\x15&{%V\xe5\xc8\xbb\xd3\xf52#0s\xa3\xc4q\x7f*\x10\x87^\x8b-M\x95\\D,S\xa9Si7'3\x04\x85\xf5C\xa9g7\x0eic>\xdf\xc6\xecj\xb4\xe2\x9e\xba\xc3\xad\xd5h\x1bi<^\xfd\xce\x95\x95J\x8c\xe8\x0c\x7f]\xa4\xb23\xad\xec \xeb\xd6\x84\xcekGaG\xe0R8\x04\x8fB\x97\xbfbM\xd00n\xadX,\xc1Wa5[H\x93\x08>\x81\xf2\xb8\xd9\xdc\xfa\x92\x9d!Rv\xd5(\xea\xa6\x98m\x0e\x00\xa9\xa3\xa4\x8e\x92:z\xaf\xd5\xd1\xb59\xda\x92\xe0\xfa\xa4\x19\xd6\xfb\xb6V\x06\xb4\xe6\xdf\xbdv\x9b\x8f\x83P\xf6\xdd\x96\xac\xa3\xa7\x07\xb9\xef\x8a\xc8%L.\xe1\xef\xe1\xd8\x90K\xb8\xc7\x8c\xe4\x12\xee'\xea\xef\xe6\x12\xa6\xec;\xca\xbe\xdb\xd0\x91\xb2\xef(\xf1\xe6\x9b\x12\xbd;\x18b\xbbY|\xdfP\xe2\x0de\xdf\x11\x13 &\xf0\x9d3\x81]\x9d\xd3\x94}W\xa2}\xca\xbe\xebjI\xae\x96\xb6\xf3\xd0\xf7(\x90\xab\x85\\-[\xceH\xae\x96~\xb2\xf5n\xae\x16\nw\xde\x0b\x8e@\xe1N\nw~\xcep'e\xdfu\xb5\xfe\xfa3w\x96\x94}w\x0f7fW\xa3\x95\xb2\xef\xbe;R\xd9\x99Vv\x90u\x94}G\xea(\xa9\xa3\xa4\x8e~\x19u\xb4)\xfb\xae!\x05\xaeg\xee]\xa9\xe7\xae\x99w9\xc7?\xdf\xe62O$\xf9mx\xd3'\x15\xc9\xdb\x88`\xf7u\x94\xa5=\xdew8d\xef\xcf^?N\x85\xd1Y\x1a\xfb\xd7#`\xd73%\x7f\xcbD\xb2b\x8e\x14\xac\x9cJ/d\xad\x0fXa2B*y\"\x7f\x17\x93H\xc1\xdd\x9e\xb1N\xd88\x9bNE\x1a\"Y\xfe\xfd\x07\x9c\x1d^~ \xa4\xc6\xb8e\x89\xe0\xc6FJ+\xc1\xa2\xbd\xc7\xd1\x1e\x8b\xe7<\xe5\xb1\x15\xe9\x10\xae!uR\x84\x191[\x08\x95\x93\xf7\xfb\xb3\xd7\x0f\x0c[r;\xc7\xe1\xf2@D\xa4\xdc\xe7i\x96$+\xf6[\xc6\x13\x07\xf3\xa4\xfa\x1e\x86\x83}\x9f\x1b&U\xa4.\xdd\x10\x8fgZ\xcf\x121\x04\xe8\xc7\xd9t\xf8\"K\xc1\xf1z\xf9\x10!\x80\xee\xc5\x93\"p\x9ab\xae\xb4\x921O\x1c\xb1\x86\x17f\x06n1\xe0\xf2\x8d\xf6\x86\xd1\x9e#n\xc8$\x89c\xb1\xb4b\xf2\x10\"x'\x8a-\xdd\xfad,\x06\xcc\n\xbe0\xf9+\x1a\x189Y\xca\xc4Mb5\xfa\x94\xa5\xe2\xe9\n\xb3QVK\xe1SI\xec\\\xac\xe0%\x1a\x11[&\xad\x93\xc6N\xcd)B\x86V\xdc\x02\xb6\x0e\xd5j\xc8~\xd47\xe2Z\xa4\x038X\xef\xcf^\x076\x98\xe1\xe3;\x912\xf1\\,\x04\xbb\x9c[\xbb\xbc\x1c\xe0\xff\xcd%\xc4o\x94f\xf8\xb5x#G\x03\xe1\xe0\xbb\x1f\xc2\xb2l\xe9c\x98\x912\"\xbd\x16)\x82\x08\xd7[\x02\xb6aF\xa7/\xf8\xc0&\xe8k\x12\xf3V\xb8\xe3\xb9I\xa2o\xcc\x81C\xce\x1f\xd9\xc9\xb4\x98\xd2!\xd0?\xc91\xc9\xa1\x02fgL\xb6\x10\x93\xa1\xebp\xa8\xd8\x8f\x17\x17\xa7\xec\xd5\xf1EH\xc3y\x7f\xf6\x1a\xe9b\x05w\xd7r\xf6K}\x8b/VK\xf1\xeb/\xbfF\x8a\x85[KU\xc04\x1eiX\xfb2\xd5\x93,\x16\x8c+&\xd2T\xa78_\xe1\x997\x90\x17\xc4\x1d\xf8x\x89k\xcccG\xb1Z_e\xcb\xfc&U\xc7\x9a&\x1e47\xe1\xfb\xb3\xd70\xfa\x9c_\x03\xfa\x17\xa5}\x9f\xe0\xc6\xf3\x00\x8c\xfb\xf7\xb5\x96\x13\xc6\xd5\xca\xf5\xc5\xa1\x81,S1\xd5\xa9\x18\x84\x96n\x00n\xe5X&\xd2\xae\x98\x12bb\xc2\x1d\xb3\xeeh\xa4\xd7\xee\x802\x07Fx\xa0\xc5\x11\x98\xa3\xa8!\xdb\x7fo\x04\xf3\xa1\x1a\xb7\x10\xb7i\x8e\xe8q\xd7\xb8\xe23\x00|\x9c\n~\xe5\xa8\xdb\x8f0|\x08\x17\x06k+\x0e\x98u'|\x9a\xa9\x18I\xc3\xc1\xe0\xa9?\xce\xd2\x14n\xaa-_)\xeb\xd3\xa5\xe0\x1a[\x9ex\xce1\xce\xa6,\x15\x8e\x1f\x88\x01DE\xa4\x0d\x83d\x0e\x85 \x16r\x82\x1a\x8b\x99T\xca\x81\x83\xcf2\xb9/C\xdcg\xbe\x94f\x18\xeb\x05\xde\xf3\x0b\xa4d\xf0*ZG\x9a\xaaN\xe7l\xdf\xcb\x1b\xa7\xdb\xae<\xed=d\x0bPj\xc7\"R0;\x98\x10\xf9\xb5\xc7x\xaf\xb0Y\x8aXNe\xcc\x8cX8\x93,\xf6\x99\x0c\x8e\xa4\xba%z\x9d\x0f\xbfq$;\x16!RXb\xad\xac\xceYC\x94h\xac\xafE\x80\xc2\xef\\\xd3\x1d\xf9\x97\x87juY\xc8w\xae\x18O\xc7\xd2\xa6\x8ep6\xcc\x12\x0e,O\xb4G3\xe3\x91r\xa7\xab\xf6dT\xbbP\xc8e\x80\xdb\x8a\xd3\xb0\xcb\x89\x1c\xc3\xdc\xf9{;&[.u\n|l\xc9\xe3\xab\xc7\x99r\xffs\xdc\x0b\xcf\xa7 $\x83\xdcVOYf\x91\xd2\x03\xcd\x19w\xa4\xf8d\"\x91\x00\xd9L(\x91r\x0b\x108e!\x8f\xac\xb91\x01O\x0e\xa2\xe3[\xeev\x94=9`\xa7nBGu~n^N\xc48\xfa\xd3\x9f0\xfd\x821\xf6Rk6\xd5\x9a=c\xc3\xe1\xf0o\xf8\x9b\x1b\x94\xab\x95\xff\x8b\xab\xd5\xd0\x0d\xf72\xd5\x8b\xfd\xa9\xd6\x0f\xfd\xef\xc3\xe1\x10\xff!\xa7l\xdf5z\x0fS]\xe8\xfd?\xb8V\x0f\xd9\xbf\xf0s\xa9\xe5\x872\x94O;\xa0\xfc;\xbf\xe6}\xc0d\xcf@.\xb8\x016\x82'\xcd\xfeK\xad\x87q\xc2\x8d)C\x87\xc3\xba\x16\x08E\xa9\xd5\xdfJ`\xb3\x00\xf7_:\xe0>]\xd9\xb9V9\xe48\xfcK\xad\xf7\x87C\xc7cx\xc6\xfe\xb0\x1c\x0f_j\xfd\xaf\xe1p\xf8\xc1\x7f\xe1j5p\xf2\xc3}^\"\xc7}\xc3S3\xe7\x89[Ni\xfa\x1c\xfe\xfa`a$9\xad\x8d\xf3^-\x8a\x91`\x1e\xd8Nh\xf5o\xcf\x98\x92I\xb1i\xa5\xe1aw.\xe0\x8a\xf4\xf8*?\x1fA\xd2:\xb5~Y?\xa9\x98C\x0b\xbe\x16g\x7f9\x86\x1c\xa9\x07\x0d<\xf7\xb1S\xbe\x86\xf0\xc1\x89\x90\x07\xe1\x95\xaf\xc0\xb8\xf3p7\xe23\xdc\xd1m\x98V\xc9*h$k\x1a\\.\x92\x18\x9fZ\x81\xdc\x1a\x14\xc3\x07\x8f\x1fD\xca\xf3\x860\x05\xea9\xc2\xefa\xb47\xd5z8\xe6)@w\xfbx5\xfc=\xda\xc3\xf5\xa0z\x80\xaa\x0b\x0c\x1e\xed\xc1W \x82H\xfd\xfd\xfc\xdd\xdbH={\xf6\xec\x19b\xcb\xfd]\xa8\x9a(\x01\xb4#5\x86\xfc\x155\x89\xcc\xe4\xaf\xff\xcc\xb2\x84\xa7\x91Z\xef\xe2>OD\xc1%\x07L,\xc6b2)\xf8\xe5\xc0\xb3[\x15\xa9\x12S\xc3\xbb\xf8/\xff\xdb\x81|\xe9\x95\xb8\x8a\xd5\x16P0\x0c$|\x10\x08\xd4!\xdbQm\xa1 Me\"\xfcq\x0d$}*R\xa3UA3^e\x87\x84\xe6\x11`\xe8\x19{\xf2\xb7\xdaWp\xf3\xf8\x8fO+\xe7\x9f\xb1b\xa8h\x0f\xa0\x8e\xf6\x0eX\xb4\xd7D7U\xc0\x86\x08J\xb47(\x06\x000\xde\xf2\x05\x0c\xf2\x9f8\xfb\x7f\x95\xbe;@\xea\x9fK\xe0\x9cL\xbd\x90\xafb\x1aq&\x0d\xbb\x11I\xf2\xe8J\xe9\x1b|\x16a\xce\x9dQ\xed\x1f6@R\xa8n\xe4\x00\xa5`mwC\xb2y>\x8d\xdb>H\x15\x81\xcd\x8b\xd4%\x90I\xd8\xbd\xb9N&>\xd5\xa4\x98 L\x0c\xbf\xeb\xcc\xdb\x01~\xd3#\x05\xc3\xe4\xfb\xcb\xf6\x1d\xad\x87\xa5\xac\xe9\xb9\xc1\x94\xf9\xf5\x97_\x1f\x1e\xdceO\xaa\xc3U\xb6\x05\xd6\x83c<\x19>}\xf2\xd4D{\x1e\xeb\x9f\xd3\xb7\xba\x96\xa0\x96'[\xc9\xd2\xd1\x08\x9e\x85\xdcJ\x7fd\x84E\x8di\xcb\x17&\xb8*?0\x11\xc6\xa5\x97\xfb>\xcf;\x12-\xbe\xa5&'OO\x17S\xb9\xeb\xeeU\x9eo\xf5D\x9c\xa8\xa9\xee\xefa\n/\xd8)=\x11#\xc8\"\xe9\xec\x12\xd4\xf4Q9\xbbns\x8f\xa7\xfd\xd2\xe2\xd6K-7\xb5\xed\x9dl\xf7aP[fs\xaaZ\"\x8d\x15\n\\\xae\x8d\xdf\x95\xb07:m\x80\xce\xb1\x995T\x14\xdf\x9c\xb9\xaaD\xd2\xcf\x89\xbb\xd0J^5\xb1\xaa\x0f\x83=\xa0\xc2nl\xdb\xdb\xb5<\xdcb\x8ct\x19\xb7;\x95}\xe0\xa4\x94\xfc\xd7\x7f\x8f\x9b\x1f\x93\xf5 T\xad\x1f7\xe1m&\x1b\xc27\xc5\xe7q&\x93\xc9\xc8\xf2Y\xb3\xa3r\xa6\x1b`\xaf\xf7\x9e\x88\xe5\x1d\xfc\xa4Kn\x1bc%\x819\xe1\xcb\x8d\xe0'\xdc\xb8\xd6\xb5\x1e\xa1\xe5\x87\xc1\x9e\xc9\x1a\x1f\xe1\xce3\xc0\xe6\"\xberm\xcaq\x9778J]\xf0\xfc\x84\xa3\x9e@\xaaX\xceNFfr\xd5\x8e\xa9b\xd0\xdeO\xe3\x96\xa6i\x94}\x0dl*\xb7\xd2\x1b\x86kj\x9e\xb3T`\xe5-\x1c5\xf4\xda\x9e\x8b\x9e\xafT,\xd5\xac?\x135\xd8\xa1\xd4\xb0\xfd \x9e\xf5\xf1{J\x08\xdfk\xfb\xe54\x89\x96\xfek\xa3\x10\x04\x85 (\x04A!\x08\nAP\x08\x82B\x10\x14\x82`\x14\x82\xa0\x10\x04\x85 (\x04A!\x08\nAP\x08\x82B\x10\x14\x82\xb8\x1f!\x88Mn\x9e\x9e.\xa6\x8f\x10\x84@\xdfc\xb7o\xe6k\xf6\x9dv\"!\xc7c7\x1e\xc8\xd1E\x8e.rt\x91\xa3\x8b\x1c]\xe4\xe8\"G\x179\xba\xc8\xd1E\x8e.F\x8e.rt\x91\xa3\x8b\x1c]\xe4\xe8\xfa\x04\x8e\xaen\xeb\xbdd\xebw\x9a\xde\x94\xf6\xf6U\xb9n\xeek\xda\xdb`\xafD\x88q\xbaZZ=\xcco\x18\xe9\xde\x92\xaf\xeb\xbe\x93\xd2R\x97O\x97\xc3\x17\xa8g\x04\xect\xaf\x96\x12\x90\xb7\xe3(_]\x02\xf2f\x02y\xf7\x19\xa0X\x83\xe1\xd4\xd3\xdcO_\x0f\xc9\x95V`\xc1\x84x\xde\xef.\xde\xbe\xd7\xca\xd0\xe5\xbat\xb9\xee\xf7pw\x11]\xae\xdbcF\xba\\\xb7\x8d\xd6>\xe6\xe5\xba\xf4\x8e\x11\xbdc\xb4\xa1#\xbdcDO\x98|S\xa2w\x87+\xedv\xbb;\xef\x1bz\xc2\x84\xde1\"&@L\xe0;g\x02\xbb^\xf3K\xef\x18\x95h\x9f\xde1\xeajI\xae\x96\xb6\xf3\xd0\xf7(\x90\xab\x85\\-[\xceH\xae\x96~\xb2\xf5n\xae\x16\xba8\xfe^p\x04\xba8\x9e.\x8e\xff\x9c\x17\xc7\xd3;F]\xad?MN\xc0\xf6\xa6\xcar\xa7\xdc\xa1\x0f\xf4\x8e\xd1=\xdd\x98]\x8dVz\xc7\xe8\xbb#\x95\x9die\x07YG\xef\x18\x91:J\xea(\xa9\xa3_J\x1dm\xce\xe2:y\xd1Mg=\x8f\xc0\xd7y\x10\xdb\xd0\xf2\xf2[?Sk\x0b?\"\xc9p\x1f\x08\x92$\xc36TL\x92\xe1n\x92\xa1\x95\x0f\x9c\xcb\x19\xd1\xd9wBg\x0dD\xf0\x82\x12\x04\xbfP\x82\xe0\xfaV4\xc5\xb4\xbb\xf7\x86r\xf8(}\xe7\x9bR\x8cv`\xa6\xbbq\xedo(}\x87r\xf8\x88 \x10\x13\xf8\xce\x99\xc0\xae.\xeeo,\x87oM\xb1\xea\xafKQ!\x05\xf1_\xe2\xbf;\x1do\xe2\xbf\xa4\x84\x11\x13 &\xf0\xbd3\x01R\xc2\xa8\x90\xa2\xc9{\xbeq\x87\xa8\x90\x82\n):\x99\xde'e\xf5TH\xd1cF*\xa4\xe8'[\xa9\x90\xe2\x1b\xe0\x08\x94\x9f@q\xe3\xcf\x97\x9f\xf0\x81\n):[\x97O\xf0\xd7\x99\x84\xbd\xa4B\x8a{\xb81\xbb\x1a\xadTH\xf1\xdd\x91\xca\xce\xb4\xb2\x83\xac\xfb\xa2\x85\x14\x1b\xc2H\xaf\xa5\xe9!\x9d\xe8V/\xf2C\x93)\xd2\xcd\x04\xfb\x98\"[\xb3\x8e]\xf5\xf1o\xc8\x0fM\xc1(b\x02\xc4\x04\xbes&\xb0\xab\xaeF\xc1(\nFQ0\xaa\xbe\xf2-y<\x05\xa3ve\xf5\x14\x8c\xea1#\x05\xa3\xfa\xc9V\nF}\x03\x1c\x81\x82Q\x14\x8c\xa2`\x149\xb2\xd7\x19\xce\xee\x8el\nF\xdd\xc7\x8d\xd9\xd5h\xa5`\xd4wG*;\xd3\xca\x0e\xb2\xee\x8b\x06\xa3\x9a\xe3Q?\xf6T\xdf\xc8k@^\x83\xef\xc1F \xafA\x8f\x19\xc9k\xd0Fk\x1f\xd3k\xb0\xc6\xabAZ\xf4|N\x93\x9c\xc7$\x06H\x0c\x90\x18 1\xd0\xdd\xe3~\x8b\x01r\x1e\xdf\x0b\x8e@\xcecr\x1e\x93\xf3\x98\x1cO\xeb\x0cgw\xc7\x139\x8f\xef\xe3\xc6\xec\xea\x10l\xf1\xb0\xb5\xfa\xf8\xba7\x88\x92\x86\xbaZ\x92\xdd\xd7D\xf8d\xf7\xed\xaa\xe5\x91\xdd\xd7cF\xb2\xfb\xfa\xa9\x97d\xf7}\x03\x1c\x81\xec>\xb2\xfb\xc8\xee#\xf3\xe2\xa3\x99\x17d\xf7\xdd\xd3\x8d\xb9\x9b\xddGIC\xdf\x11\xa9\xecL+;\xc8\xba/\x984\xd4\xe0\xcdp:\xd3y\xae3u\xd2\xcfgU\xe0\x1a\xc0\xc5\xd2\xce\xbe\xd0\xf6UK\xc9\x1bB\xde\x90\xef\xc1\xf6!oH\x8f\x19\xc9\x1b\xd2Fk\xe4\x0d\xf9\xe68\x02yC\xc8\x1b\xf2y\xbd!-*\x9d\xbf\xadc\x13\xf9\xd0\xa5#}/\x1dY\xc3qnVu\x9f\xe6m(\x9b\xcc\xce\xbb\x99\x9d\x9bv\xea\x9c|\x85\xdf\xde\x86\x93\xaf\xf0\x9en\xcc\xae\xfe\x9f\xe63\xacm\x8fd\x10K\xe2\xee#\x89;\xb2\x11>\xa9\x8d\xb0\x83\xfe\xba\x9b\xa2\\\xf4\xfa\xfa\xef\xd8*x\x82w.\x0es\xdf]\xf7\xa6\x93/\xb1\xcb\x97\xa8\xcdB\x9b\xe1\x98\x1b1\xbc~2\x16\x96?\x19\xbe\x10\xf1\x91\x96\xaa\x1b\xbb\x13\xa1\xf4b\x1dg\x0e\x97\x0b\x9d\xa9\x06F\xb2\x8e \xcd~^m`\xf3\xf9pz}\xd7\x19\xd1iq\xcb0ms\xefm\xae\x03\x0f\xf8\xab\xaa(\xd9\x02\xe2\xaa\xd5=\xe8\xc1\x8f\x9a\xf8\xc1\x96L\xa9<\xc4\xae\x9cI\xa7\x85s\xaf?[\xda\xca\xc5]PI\x15!%c\xbd\x8c\xd1r\x06UA\xbe\x0e5\xe1p\xa8\x99\xc3I\x17\x8e\x9bV\xb6\x0d\x82\xcb\xfdw\xc7\xee\xcf^\x1f>D\xee\xdb\x1f\xc5\x15E\xba\xc5YS]|\xbdG\x05\xab\x05\"\xc3W\xab\xd9o\x0e\xd4~\xb8lY\xc7v\x08\xad\x0d\xb25V\xd1D\xe8\x8f\xc3en)\xd5T\xd2uS\x03~\x12V\xa4\xb9\xeb#X\x16]9f\xf7\xdc\xccj\xd9\xd8**\xfb\xa8\xd4\xde>\xdbv\xcf\xf2C\x04\x81kc@\x99\xea\xbb\x81q\xdeg}\x13\x8bo\x95\x8d\xc4\x9f\xdd\xaf\x15f\xc2R\x11\x0by-&\xfd6\xb4\x98\x94$e/I\xe9\xf3u\xbd\xa3\xbak\xe7{\xb1\x8d\x86\xfe%\xea\xdb\x8e\xf8\xdee\xd6X\xae&R\xcd>\x82\x0e\xde\xbb!QM\x17\xd5\xac\xf9\xfe\xdbw\xac\xacH\xeb\xe2+\xdb\xcf\xd4\xa3\xc0\x0f\xd5\xc3\xa0\x82E\xca\x91S\xf9\xf1 \xa9\xc4\xedR(#\xaf\x85\x13~6\xe5\xf1\xd5\xc0in\xfa\xc60\x03ka\x86\x83s\"\x9e\x8b\xf8\xaa]\x8b\xebAV\xdbQx\xc3bw\xe6\xb3\xe7 \xe4d\xf6\xa7o\x83\x1dv'\xdb\xc2\xc6\\\x8aT\xea\x06\x89\xd5\x18$\x99\xa6<\xb6U.\xdbJ\xd5\xd5\xd5\x1d_\x0be\xab\x11\xa2b\x9ba9L\xb8&\xc3H\xfd\x08aH\xb7\x1bn\x83e,-\x9c\x04\x1f)1V\xa7\x10\x05\x1fF\xeab\xee\x1a\x19\xa6\x84\x98\x88\x89\xa3\x90\x98'q\x96p\x0ba\x90T/S \xff\xc6\x13\xa1\xa7\xccX~\x85\xd9\xfdWBy\x82+\x0c\xb8\x90\xbf\xc6S\x0c\xa8\x03y2>\xb5\xc2\x91%B9\xe7\x86\xe98\xce\xd2T4Yz~g\xaa\x06\x87\xff\xadM\xbaA3\xe5\xe4C\xeb\x948=e\x87j5d?\xea\x1bq\xedD\x92#\xf5\xf7g\xaf\x03\x8d\xbb.\xa0\xe0\x98x.\x16\x82]\xce\xad]^\x0e\xf0\xff\xe6\x122\xc1\x94f\xf8u\xc0\xdc\x169\xa1\xa6\x81p\x00b#,\xcb\x96>\x1b2RF\xa4\xd7\"E\x10\x17|i\x10\xdb0\xa3\xd5y\x8a$H\x04\x89\x87\x8d\x1b6\xd5\xc0\xf9\x0e\x1cr\xfe\xc8N\xa6\xc5\x94\x0e\x81\xcbT\xbb\xa30\xc9\xa1\x02\xe6oL\xb6\x10\x93\xa1\xebp\xa8\xd8\x8f\x17\x17\xa7\xec\xd5\xf1\x05\xf3\xbe\xa9\xf7g\xaf\x91.V -8\xfb\xa5\xbe\xc5\x17\xab\xa5\xf8\xf5\x97_#\xc5\x82&\xa9\x02\xa6\x91\xe5\xc1\xda\x97\xa9\x9ed\xb1p\xb2F\xa4\xa9Nq\xbe\"q\xcb\x00\x97\x00\xc6\x1dXO\xec(V\xeb\xabl\x99k\xb7c\xee\xd4n\x04\xcdM\xf8\xfe\xec5\x8c>\xe7\xd7\x80\xfeEi\xdf'\xb8\xf1<\x00\xe3\xfe}\xad\xe5\xc4)\x0e\xae/\x0e\x0dd\x99\x8a\xa9N\xc5 \xb4t\x03p+\xc72qr\xc3qC\x13\xf4~w4\xd2kw@\x99\x03#\x9es5\x13\xf0\x15(j\xc8\xf6\xdf\x1b\xc1|\xe2\x9e[\x88\xdb4G\xf4\xb8k\\\xf1\x19\x00>N\x05rN?\xc2\xf0!\x88hm\xc5\x01\xb3\xee\x84O3\x15#i8\x18<\xf5\x03\x9bt\xd6CY\xcd\xc7}\xd2`Z8\xdd>l\x0cK\x85\xe3\x07b\x00*\x81\xb4a\x90\xcc\xa1\x10\xf4\xf1\x9c\xa0\xc6b&Q\xe3rl:R\xee\xcb\x10\xf7\x99/\xa5\x19\xc6z\x01\xe7\xed\x1cH\xc9\xa0y\xe0HS\xd5\xe9\x9c\xed{w\xacX,\xed\xca\xd3\xdeC\xb6\x00\x114\x16\x91\x82\xd9Ao\xc9\x15\x0d\xd4[\xccR\xc4r*cf\xc4\x82++c\xff\xee\xb0#\xa9>F[\x95\x0f\xbfq$;\x16A,\x96X+\xabs\xd6\x90D8\xd6\xd7\"@\xe1w\xae\xc9\xb7ry\xa8V\x97Ee\x13W\x8c\xa7ciSG8\x1bf \x07\x96'\xda\xa3\x99\xf1H\xb9\xd3\x05'\x1c\xe7\x18o\x14\n\xb9\x0cp[q\x1av9\x91c\x98\xdb\x1fn\xc3L\xb6\\\xea\x14\xf8\xd8\x92\xc7W\x8f3\xe5\xfe\xe7\xb8\x17\x9eO\x13H\x06\xb9\xad\x9e\xb2\xcc\"\xa5\x07\x9a3\x0c#0\x12 \x90\xcd\x84\x12)\xa8\xef\xa8\x06\xe6\xd1\x077&\xe0\xc9At|\xcbA\xddzr\xc0N\xdd\x84\x8e\xea\xfc\xdc\xbc\x9c\xd2}\xf4\xa7?a\"7c\xec\xa5\xd6l\xaa5{\xc6\x86\xc3\xe1\xdf\xf077(W+\xff\x17W\xab\xa1\x1b\xeee\xaa\x17\xfbS\xad\x1f\xfa\xdf\x87\xc3!\xfeCN\xd9\xbek\xf4\x1e\xa6\xba\xd0\xfb\x7fp\xad\x1e\xb2\x7f\xe1\xe7R\xcb\x0fe(\x9fv@\xf9w~\xcd\xfb\x80\xc9\x9e\x81\\p\x03l\x04O\x9a\xfd\x97Z\x0f\xe3\x84\x1bS\x86\x0e\x87u-\x10\x8aR\xab\xbf\x95\xc0f\x01\xee\xbft\xc0}\xba\xb2s\xadr\xc8q\xf8\x97Z\xef\x0f\x87\x8e\xc7x\x94\"\xd4\xfb\x0f\xab8\x86\x05\xac\xc3\xef>\x9f \xf8/\x8e\xcf\x8f\xceNN/\xde\x9d=<\x08+(\x90_\xea\xefG(\x01\xfe\xd7\x0e\xc0_\xe9\x003\x00}\xf0\x8c\xfda9\x1e\xbe\xd4\xfa_\xc3\xe1\xf0\x83\xff\xc2\xd5j\xe0\xe4\x87\xfb\xbcD\x8e\xfb\x86\xa7f\xce\x13\xb7\x9c\xd2\xf49\xfc\xf5\xc1\xc2HrZ\x1b\xe7\xbdZ\x14#\xc1<\xb0\x9d\xd0\xea\xdf\x9e1%\x93b\xd3J\xc3\xc3\xee\\\x80s*\xbe\xca\xcfG\x90\xb4\xce6Z\xd6O\xea\x8dL\x12\xf7\xc1\x97N8\x86\x1c\xa9\x07\x0d<\xf7\xb1S\xbe\xa02d\xe8D\xc8\x03'\xe1s\xf6\xe0XG\xc8\x86F|F*?\x9e*Y\x05\x8ddM\x83\xcbE\x92\xd7\xc4mP\x0c\x1f<~\x10)\xcf\x1b\xc2\x14\xa8\xe7\x08\xbf\x87\xd1\xdeT\xeb\xe1\x98\xa7\x00\xdd\xed\xe3\xd5\xf0\xf7h\x0f\xd7\x83\xea\x01\xaa.0x\xb4\x07_\x81\x08\"\xf5\xf7\xf3wo#\xf5\xec\xd9\xb3g\x88-\xf7w\xa1j\xa2\x04\xd0\x8e\xd4\x18\xf2W\xd4$2\x93gV\xcd\xb2\x84\xa7\x91Z\xefb!n\\p\xc9\x01\x13\x8b\xb1\x98L\n~9\xf0\xecVE\xaa\xc4\xd4\xd0\xfa\xbd\xfco\x07\xf2\xa5W\xe2*\xf5\xaa\x01\x05\xc3@\xc2\x07\x81@\x1d\xb2\x1d\xd5\x16\x9a\xd0T&\xc2\x1f\xd7@\xd2\xa7\"5Z\x154\xe3U\xf6\xa9L\x8d\x1d\x01\x86\x9e\xb1'\x7f\xab}\x85\xf2~\xff\xf1i\xe5\xfc3V\x0c\x15\xed\x01\xd4\xd1\xde\x01\x8b\xf6\x9a\xe8\xa6\n\xd8\x10A\x89\xf6\x06\xc5\x00\x00\xc6[\xbe\x80A\xfe\x13g\xff\xaf\xd2w\x07H\xfds \x9c\x93\xa9\x17\xf2UL#\xce\xa4a7\"I\x1e])}\x83\xfe\x889xu\xbc+\x01I\xa1\xba\x91\x03\x94\x82\xb5\xdd\xc5\x83R\x9a\xc6m\x1fT\x12\xc0\xe6E\xea\x12\xc8$\xec\xde\\'\x93\x8a\xd3\x02\x88\xcc\x99\x18~\xd7\x99\xb7\x03\xfc\xa6G\n\x86\xc9\xf7\x97\xed;Z\x0fKY\xd3s\x83)\xf3\xeb/\xbf><\xb8\xcb\x9eT\x87\xabl\x0b\xac\x07\xc7x2|\xfa\xe4\xa9\x89\xf6<\xd6\xd7\xfd\xeey=u*l\x96*L\xb1\n?\x1a\xf2\xb1\x7f\x03>\xf6\x06wG\x9f$\x88R7vvz\x14\xe4B\xb7{\xe5\xa3\xf8V\xc8\x87B>\x14\xf2\xa1\x90\x0f\x85|(\xe4C!\x1f\n\xf9P\xba\xc1$\x1f\n\xf9P\xc8\x87B>\x14\xf2\xa1\x90\x0f\xa5\xe7\x9e\xec\xe8Ci6\xb3w\xb1\xb1\xcb\x06vC\xe6\xdaT\x88Y\xca\x95\xcd\xed\xebW\xee\xafn+\x19:5_ T\x05\xdc7\x0c\xa0\x86z\x19\x7f\x983#R\x06M`\xaf\x15\x1a\x05\xdc\xdf\x03m\xe7B\xa6NS\x99\xa0~\x88c5j\x88M\x93\x8aM\x93\x8e\x85\x9b\x11\x1bN\xd6f\xe6\n\xd5^\xd7\xf4\x81)\x81\x90\xb7ZwT\x15\x03\xf8,0'{\xf5\x94\xe1=\xcb\xeehLebE\xea4r!\x8a\xf9\xba\xfdU\x96\\\x12\xe4\x92 \x97\x04\xb9$\xc8%\xf1\xdd\xb9$\xca\x85` \x9b\x19\xf0_\x9d\xe2\xed\xb6\xae\xeb?~:\x87\xe4H\xab\x99\xa3\xbe\xd4\x1d\x13\x10l\xb8P\xc7B\x03\x1f\xd9$\xf9\x83'\x1f\xa5R\x7f\xd7z/\x91\x08\xd7\xe7\x15\x7f\x06\xb9\xeb\xe8 \x08\xeb\xf1\xca\xff3\xed\x96\x88\xa4~\x90\xfaA\xea\x07\xa9\x1f\xa4~\x90\xfaA\xea\xc7W\xa4~\xb4\xe6\x0fT\xb5\x8e>\x9e\x8d\xbcS_\xd7Fu\xaa-jzsYy\x87\xf2*\xd2XHc!\x8d\x854\x16\xd2XHc!\x8d\xe5+\xd2X\xea\x90\x16\xca@q\x02\xdc\x9f\x0fL\xa7Wc\xfbLW\xae\xca\x89\xaeA\xff\xa1L\xd7/\x99\xe9ZS\x1f\xb7RU\xdb.\x90\x98\xe9\xebaq[\xf9R\x9b>\x0f\xc7-\xfd\x0b\x11\x8d/N6\xd6qOph\xdd\xa0\x866\xd5\xf9o\xa9\xe2~\x8c\x1b\x04\xb6\xbb>@\xf5\xbe7\xe0\xc4\x1d\xeeOuo\x80\xdf\xb1\xf2\xa9\xf5 x\x84\xfb\xfbC\x95S\x87\xe0\xf7\xd2\xb5\x81\xf0\xab\x95\xd7\x02$\x01lh\x07e\xf4\xbd\xb2|!\xd5h\xb2FL\xb4\xa9}\xee&}#\x95\\d\x8b\xb0\x81\x0c\xefs\x08\x1b\xe4\xf6M\x80\x95\x86\xaf\xe90\xbcM\x01\xc6Y\xf0\xdb\x80\xf5\x0d\x97,\xd4f\xe3\xb70\x1b\xb6\x87\xc9\x0e\xdd\x02\xe6:\x99\x88\x14\xc8$\x00\xe2\xb0\x94\xc31d'N\x99\xe4 r\xb3\x03\xf64Rl\xa1\x95\x9d\xa30v\x14\xe0\x14\xe5\x89#A\xa2\x85;\xd2B\x8e\xc9]\xa8B\xaa\x91\xc4\xbd\xca\xa9\x03,\xadn\xe2p\x0b\x86\xa6\x85\xa9\xe7\x06\xb7\xfe\xf6c\x9d\xdaJv\x14B\x86\xd2\x0d\x8d\x11\xafZ-\xb9\xd3\xa5m\x01\xae\xc9\xc6\xfe\x8e\x9b\xa6\xdc\xd7\n\xb3Y\xbf\xdd\x13_\x10\xf0\xd3\x19G\x963}-R\x05\xf6|\x98\xc2\xb4q\xb2\xf0\xb8Q7\xcdm/\xe4@s\xeb\x93\xc3b\xc9K@^\x02\xf2\x12\x90\x97\x80\xbc\x04\xdf\x9d\x97\x80*=\xa8\xd2\x83*=\xa8\xd2\x83*=\xa8\xd2\x83*=\xa8\xd2\xe3\x8bUz\x0c\xf6\x8c\xe5\xb6\xf2dj\xae\x0c\x85w\x92\xc3\xa3\xc0\xa3\xf3\x8b\xc3\x8b\xf7\xe7\xa3\xf7o\xcfO\x8f\x8fN^\x9e\x1c\xbf\xd8\x1b\xac}}q|\xfa\xee\xfc\xe4btz|v\xf2\xae\xa9\xc1O\xef.N\xde\xbej\xff~zx~\xde8\xf2\xd9\xf1\xdf\x8f\x8f.\x1a?\xbd<\x06\x8f\xfdZ\xd4\xa9\x1a\x9fh\xc6G\x8f\xe9*#ch\xbc\xc8\xd7\xdbr?_Wv\xadHV\xab\xef\xdf\x87\x92\x8b\xa5\x8dD\xab\xdf{\xd0\xa8\xef\xd0M\xa4\x94\x94\xda_\x06RR*\xd1B\x17-|\xdbI\xa9N;\x01wy\x1b\xa3*\x7f\xed\xc1\xa6\xa0y7\x93\xfa-\xd3i\xd6@T\x9d\xf9I~S\x96\"\x8d\x85\xb2N\xe1r(\x00\x1d\xc9X~%JO\xd6]k+\xfc^\xa1\xd2\x84:]\xa4X\xac\x95\x91\x13\xa8{\x05\xbf\x1b\xec\x95\x9d\xa7\xc2\xb8\xa3w\x07\xa8*\x1b\xf3Oa\x00\x86\xba \xd2\xa0U\x0e\xd9\x0b\xef\x89\xf3\x87\xf8\xcf\xc3\x1f0sKX=\xfa\x08\xc0 -\xe8)\xfbIxd\x00G\xb9\x00\\\xe1\x9fH_u\xe8\x00E\x0e\n1Y\x03\xf2\xc9\xe3\xbf\xd4d\xe8G\x80t\x13\xda\xb8*\x1d\xc0\x1e8\xfc\xf7\xff\xbd\x06\xdf\x9d)m\x17\xe0R\xc1\xe39\xc3\xa9\xdb\x80l\xd3\xb7\xab\xbap\x1fm\xdbg\x90\xf7\xd5\xb5=\x9c\xfd\xb5\xed\xb0\xb2\xfe-\xfb\x9b\xf2\x94KN\xb9\xe4\x94KN\xb9\xe4\x94KN\xb9\xe4\x94KN\xb9\xe4\x94KN\xb9\xe4\x94K^\x99\x82r\xc9)\x97\x9cr\xc9)\x97\x9cR\xd9(\x95\x8dR\xd9>[*\x1b\xe5\x92\xb7Y{\x94K\xfe\x05\xc2S\xdfQ.y\x8b_\xbc\xe6\xb7\xee\xe5\x19\x0f\xc0l\xe9\x1b\xdf\"\x15%\xc0\xfd1\x923\xc8kN^s\xf2\x9a\x93\xd7\x9c\xbc\xe6\xe45'\xaf9y\xcd\xc9kN^s\xf2\x9a\x93\xd7\x9c\xbc\xe6\xc5\x00\xe45'\xaf9y\xcd\xc9kN^s\xf2\x9a\x93\xd7|g\x9f#y\xcd{\xe0\xfak\xf3\x9aS\xa9\xed\xd7]j\xbb\x16~\xd8&\xc6\x01\x05\x00\xc1\x92\xda\x18\xe5(1\xbd\xfeq\x0e`\x85\xdd\xcd\xbef^\xde\xbc)\x0d\xd8\xea\xb3-\xd0\xado\xdc\xe9'm\xb7x\x0f\xfaZ\xdb\x1e\xad\xb6\x8f*\xb9q\x9b\xafT\xd0\xcbf\xa6\xf2\xc2\x99=1\xb7br\xc0NS1uF9\x06!.\xb1\x8b\xb9dR\x19+\xf8\xc4\xc7\x7fr>o\x84u\x1c\xc7\x9dk)L\xa4\xc0]3A\x07\x80\x9c\xb2\xcbD\xa8}?\xc6C\xf6\xec\x19{r\xe9\x9d\x06\xdc\xfa\xd8\x03\x18g7\x02\x1c\xb4O\x86\xec\x04\x1eL\x8c\xfc3\x8917\xc2\x0c\xbcG\x1a\xe6\x04\x9b,(\xbfV\xb3\x9f\xde]\x1c\x8f\xde\x9d^\x9c\xbc{[\xd6\x95Klo\xcdHi\xe9\xb27\xa8|\xf9\xe7\xf1y\xed\x97\xc3\xe7\xe7\x17\x87'ok\xbf\xbe}\xb7\xf6\xc3\xe8\xe7\x93\x8b\x1fG?\x1d_\xbc\xab\x9a\x19m\x13\xe7[s\x87\xe8c\xb1\xb7_\xcd\xb2\xeb\xe7\xd4\x1d\x9fwH\x13\x8dV\x15T\x02zD\x05\x0e \xafE\xe3\x8b\x1a\xc1\xd6j\x99\xfb\xa0\xedC\x89\xe5(\xfdH/\xcb\x93\x0e\xd7F\xfc\xe7\xf1\xf9A\xfd\x87\xd2\x08+_f\xd6\xda\xdf\xa3\xf6\xa0\xe9\xc7b\x1c\xc5<\xdb\xdd<\xd8\xdbw\x07\xb5\xbf+\x8b\xe9\xea\\\xec^}\x98\xe2Ku@\xd0\x11\xafCYb\x18\xdaQ3\x1e\xe7>\xdc\xfegh)&\xa5\xbd/\xe6\xc8\x94\x84\xc0g^\x02\n\xff0\xcbD\xa2\xfay.U,\x0e\x18\xb2\xe3Gfr\xc5\xfe<\xfc\xeb_\xf6J\x0f\xdb\xb5\xb5X\x83\xc3\xcd_\x9a\x19\x17\xa4ZdL\xa4\x0e\x19t\x80\nTc\xeb&\xd5\xc9\x8bA0UE:\xc8\xbd\xa4U,5\x8b\xa9\xb2\x08\xe9#\x9f\x00\x8c-\xc4\xd3\x16)\x11P \xb9;C\"\xc1E\x82\xab\x0f\x9d\x90\xe0\"\xc1E\x82\xeb+\x12\\u\x08\xb0\x90>\xd8\xc7\xae=2U\xa4{\xcc\xa2 \x97\xc6\xd7\xed\xd2\xa8\xa8\x0e}\xf5\x92>w\x19\x80}\xdd\xf7\xa1\xce;_\x02A\xd7\x8dt\x01C\xd7\x8d\xdc\xf3\xebF\x1a\xdde\x9b\x1f\x9f\x04\x97\x99T3\x0f\xc3\x96OP\x96\x1cg\xdd'\xf4k\xf6\x1b6\xae\xfe'r\xd2Y\xb2u\xc8\xd6![\x87l\x9d\xef\xd2\xd6i\x91 \xef\xe8$\xd3I\xbe/'\xb9\x99F\xa5\x9a\xf55\xac\xb6\xbcA\x97nD\xfeNoDn`!9\x95\xb5Y\x1f~\x90-\xad\x8eu\x91\xd3M\x0b\xa4]\x11O\xbe7<\xf9\x8bkW\xfeP-\xa4\xb2\xc5#>=\xe5\x81\xeb4j\xc9-,\xb9'}\x95X\xac%\xa4\xb6\xbb^nf\xa9\xa6 8nG\x8e|GXa\xb8i\xa0\x85\xbfA\x9b+\x95\xf1\xc4\x97$:\x8b5\x1f\x89\xb9\x91\xaac/\xf8m\x9f17\x0e\xd1\xe4\x91(\x0d\xe1\x9d9\xebC\xcc4OFc\xad&\xa2\x91\xbb\x86\x01\\3\x87 \xefwd\xd8\x83q\xab\x17\xc6\x0d3Nt|e\x1c\x9b\x1e\xad\x04op\x07lr\x0ec\xc1\xb0\x980\x1c\xc5M\xc2`\x94\x06\x89\x86\xdc\x18\xeb\x13J\x17>\x07\x97\xad\xdb8\xb6\xd0\x93,\xa9<\x82T!\x1dp\xeb\x1e\xc2\x06\x9d\xa6\xfaZ\x1a\xc7\x82\xfa\x07\x93qkG\xcb\xbc\xeb\xc6\xc56\xfa\xd6\xd6\x86\x08~h_\x95\n\xcb\x80\xf2\x0c$\xa3RC\xf0\xa1\xb5\xc6\xdc\xdbV\xb5\xd1\xcf\x1d)tt\xd7;\xb7\xf8\xbc\xd7qy\x12\xa8\xaa?\x12sB\xdc\x1ey\x05\x0d\xb7 \xadh\xb0\x19Yk`\xf7\x89\x06\xe4\x9d\xda\x92\x1b\xd7\xd1\xb3\xed[\"m\x17\x9fo\xbe\xf2\xdc\xab<\x81\xf6\xbb\xe2J\xc4\x17\xbfj\xbe\xf8y\xae\xeaF\x8a\xab\xca\xdc\xa3\xfa^\xb7\x10\x98\xc9\xc6f\xc9\xe3fK\xa61\xa0\xd9^\xa2\xde\"\x07\x10\x94\xb2j%\xd5D^\xcb \xf0\xccp4<\xb1a\xf9%^G\x11\xa9\xd3\xf0\x15\xc78m\xf0\x9d\xd7\x16\xbf\xfbQn9\xc9\x95\x83\x1c\xe2\xcc9\xd4\xdd'\xf8\xe3\"\xb87A\xedLL&\xe1f.\xd5lk\x15\xce\xc8\x99\x12\x93\x91?J7RM\xf4\xcd\xc6\x83\x94\x87&\x16R\x8d|ow\x02{t\x05\x89\xe3P\xa1o\x94\x95\x0b1\xfa\x1f.\x93\xd1\xc4\x17\x186\xa2\x14\xd65\x9a\xc2\xe5)Z\x8d&:\x1b'\x02\xa6\xed5\xd3Zw\x9c\xb8G\xdf6\xe5(/\xfd\\\x93\x11\xf9}\x15c\x0c\xf3\x87-i\xd0\x98\xd6vkw\xfa\xa7-\xbeW[\\rW\x7f,\x99\xd1I7\xe7r\xa6\xa4\x9a\x9d\xa8\xa9\xeeO<\xd7<\x01\x1cK5\x1bI5\xd5\xdd=\xfc\xeb\x7f\xcd{\x08\xe5V\xf3\x16[v\x8d\xb4\n$\xfd\x88\xb1B\x1eJ\xc0\xc0}\xc1\xadN\xd9\x0d7X\x84\x8e7/M\xdc\xcf\x82\xbd;\x83\x0f\x99\xfa\x1f(BD}d\"nGz:5\xa2\xdf\xdc\xd5M?q\xddC\x01\x9aaR\xc5)\xd4\xa0\x89 \x838\xbb#\xa6\xc2\xb3\x92\x83\xc6\xbd6\x027\x11pT\" 8\xb0\xe0+\xbc\xe6\x07\x0f\x0e\x84\x12D\xac\x17\x0bg\xa0\xa7Li\xeb\xc3\xae\x12RE\xfe\xc7\xdfe\x82.\x020\x18.\xcf\xa1\xe7s8\xaf?\xc3\x99\xbbdA\xaaY\x91.r\xc1\x06K\x0fiO\x97o\xa41\xa1\xdbsi\x0f\xd3\x94\xaf.\x81\xed \xb2F\x99\xb2rsjQQ\xd6\xb6\x166\x97\x0ba,_,\x19\x8c\xe2\x11V\xc5\x8b4\x0cgb\x93L8\x8d6\x91\xd7B cX8\x95\x98\x0b\xa3\x17cc\xb5j,\x96[\xf3z\xcc\x05\x04\x8f\x11u\xe1\x9e\x1c\x98n\xce\x0d\x83\xfa\xd7b@\xb6\x7f%\x13\x07\x80\xce\xd0\x1d\x9276\xc2>\x1c\xb2\x13\xeb\xe3\xdc\x91\xd2*\xae\xef+\xee\x12\xe8:\xe2\xb7L^k\xbc\xf2\xc9\xcd\x8d \x19+\x7f\xa3P\xac\xd5T\xce\xb2TL\xd8B\x9a\xb1\x98K~\xad\xd3!\xb2L\xb7 \x81\xd9B~US\x00\xbf\x93,\x0f\x99\xef\xcb\xae\xc4\xd2\x16\x97BeJ\x89X\x18\x03\x17\x84\xb9\x1df\xa9\xe0\x133\xc4K\x990\x16\x7fy\x9e-\xf6\x9b\xa8\xe1\xe1%\xe3\xc9\x0d_\x19\xb7>\x9e\x98*\xcd\x1c\xe1\x84\x97\x8d\x1e\xdc\x80\xa4\x12\xb3)\x87\xd8\xc2\xe7\x07\x86y\xae\xe2\xd4~L\xffYh%\xadN}a\xb6L#\x95\xd3\x05\xbc!*->!\xe5YB\x9d3\x05\xa6Y\x19\x17\x92\xdb \x87\x0d\xd3\xac z\x17\x1e(]g\xc3\x0d,\xb2\x0f/./\xb6d\x91n\xc3\x91\xb7\x90\xe756\xbce\x84\x83\xd83\xb1gb\xcf\xc4\x9e?\x0d{.1\xd4M<\x99'I1\x19\xf8h\xaa\x19\xdd\x9bY\x18\xa5c\xef\x9a\x8e\xbdn\xc9\xcc\xaa\xe5a\xbar?\x91Tl\xe6\x0c\x8c\\\xf6\xf9\xcb\x84\x0c\xbb\x99\x8b\xd4_\x10\x1a\xeb\x14\xbf\xc3]F^\xda\xe6\xd7\x0e\xb9\xd3\x0d\xe6P\x19~\x88$\x86\x16\xe7zQ\xc0P\\I\xc6\x9c}%\xe0\x96\xbe\xe7<\xcdqR\xbed\x8a1VY\x00l\x8e\xbfh\xea\xc3F\xe1\xbe\x95\xa5U\xee\xd7W\xbc7\x1d\xb4n\xc2&\xd9L\xb2\x99d3\xc9\xe6O&\x9b\x03\xbb\xb2pYo\xce\xad\x9ek59\xef\xbc\x8c\xed\xf9\xbb\xb7/\x9ao4\xab~q\x7f\xb5\xfc|\xf2\xf6U\xedw\xdf\xb8\x92\xdd\xd2>Q\x15c\x05\xd8\xb9\x9eQ\xba\x91*GXH\\i\x19\xf6\x805&\xab(&\x95O\x92)(\xbct%Z\xd3\x9a\xddP\xf8\xaf\xa6\x8dC\xca\xf1\xb7\x16#kk\x1b\xea\xe4\xed\xab0\xd6\xc9\xdbW\x1b\x07\xcb\xd4\x18E\xef\xfaX\x01\xa8\x1e yp6\xd0\xc8\x91;\xb9\xf0@t\xb7\x1c\x8b\xf3\xb6\x10\x9al\x08\xa3\xd6[T\xe20\xfemlV4b>q \xd4\x93\xdc\xbb\x1a\xa7\x82c\x84\xbe\xb4\xd9\x9d!\x1b\x08.6\x90y\x15@\xd7*\x8fmW\xe1\x80[\xe8g\xe1\xfd\xfdD\xcc@\x89\x1d0\x10Y\xc1\xc1\x8c\x9c\x8a\xdf\x8e\xfaM\x17ZV\xf0\x10b\xab\xf5\xf9\xebr\x8f\xc0\x0d\xdbXE\xfaa\xb0\xd7\xdb\x97\x00\x8e\x94\xde2\xfa\xc3\x00n\xdbF\xfb,\xcc\xedwx\x99\x8a\xebm6x\xce\xcd|\xe3\xb4!\xba\xbf\xe4\xa9\x1d\x19aG}\xc9\xaf\xee\xaf\x93\xca\x8a\x99H\x1b\x17\xdf\x13\x8a\x92\xbf\xe9\x94\xa7\xd6\x08\xfb#\x02\x03\xca\x0e\xe0\x04\xcd\xdfQ\xbf\x01\x8b\xe1\\{$\x00\xc4\x9d\xa3\x13`\"\xdc\xf2\x9e\x83a\xda\x91w\xb8\xf6\xec\xb3\x06\xc04\xd5\x8b@\x83\xce\xfe_f\xb6\xf8\xad\xd8[7\x19\xf8[\xb7\x9e\x11\x1f\xb1\xc2s\xd5\xbf\x0b_.\xfb7\x86}\xf0\xde\xc4\xfe\xbd\xc4\xb5\x13U\xb1\xe8\xd9\xa3\xc0\\\xc1&\x80\xe0\xf3\x9a%\x91\x8eZ\xbd}\xdd\x19(HX\x15\xe5#g\x1bh\xfd^\x085\x01?\x96\xf54\x83\x07c\xe8 \xa1\xea\xc8\xdb2\x84\xe8\xfe\xedvu\xd3\n\xaa\xf0\xd6{T \x0f\xbf\xd5\x15\xb3\x07\x86\x85~\x7fcc\x11\xcf\x99P\xb1\xf6~\xe9\xbf\x9f\xbf{;\xac\xd2\xcb2\x1bW\x83\x02mG\x9f^?\xa3\xd7\xcf\xe8\xf53z\xfd\x8c^?\xa3\xd7\xcf\xe8\xf53z\xfd\x8c^?\xa3\xd7\xcf\xf0\xdf\xf4\xfa\x19\xbd~F\xaf\x9f\xd1\xebg[\xec\xc9\xce\xaf\x9f\xf9\xf4\x9aB\x19j\xcb\xcf\x08 \x1f>\x9f\xeb\xc6\xa7kTl\xe5\"S\xc3\xb7\x06\xb7\x8c/\x84\x0cQqL\x8d\xd9\xab\xbc\xbcV\xf3lW\xa2\xe9\xf5\xc07\xdb\xc7\x01\x1f\xe71g\xff/g\xc1m\xb8{\xed\x8b'\x0e@F\xcc\x95h\xae\x12\xafb\x00\xdb\x05o;\xb2#\x88\x9d\x81\x1d\x03\xdf\xf6\xa5\x8a\x93!3\"\x99>\xf2\x1f\xa5V\x0f\xbd[\xdf\x07\xdaFf\xceS\xd1c\xc2z\x8f\xc25\x82\xf7\x89\xe2\x8f\xd2\x98\x0c-\xa9j&H\x11\xd8\xf3\xd3W\x02E\xf5\x99\xd6\x03\x02\x9e\xdf\xe6\xbf[\x91.LS\xcc\xa7\xcbSKQ\xa7\xef3\xea\xf4a\xb0\x97s\x83m\xb2\x13\xab\xd3\xd5\x87\x08k\x1b8\xcd.\xff\x88\x17\xac\xcdk\xf9\x8c``\xd7\x19\xe1,S\xa5\xcc\x98\xbd\n\x94[\xc42\xda\xe1\x84\x0c\x83\x0dP.\x9c\xea%\x9b(\x19\xdc!\xda\x89(+j0\xc6\x95\x1c\x9b\xea\xd4\xf1zj\x82\xad\x06\xfd\x8b\xf4\x84\xee\xe3J\x19:\x94\xfa\xd0\x95\xfap/2tBu\xb1H\xa6\xa3B\xd8\xf6\xc0\xcez\xa75\xb5\xe6\x81\x01!\xce&\"N8f\x9a\xe2M\x14\xfe\xd7\xd0qc\xb6fSl}\xc0\xac\x9e\xa1\x96\x16r\x8e\xbd8\xf7\xef\x1a\xe2FD\xea\xa7\x12(\x8e\x11\x04q\xefMA\xe9\x8c5\x7fM\x07 \x07X\x87Tf\xc8\xceCIqp\xa6Jg\x10\xb9\xa5\xe0V{\xcb\xaf\xd2}\x80\x1eYpT\xea4\x15\xb1e1O\xe2,\xc9\xcd\xafi\xe6\xa4a\xa42U\xac\xde\xc0\x1atf\x99\xb4\"\xc5\xe3\xac\xafA\x82\xe7\xba\x07\xfby.\x14\x82\x06\x9e\xdf\xb2\xce\x14\xa9*\x87\x1e\xd4hP\x1a\xc7&\xf0\x86\xb8\xfc\x99\xc8|\xcfn\xe6\xda\x88\xa26\"Re4\xc9\xaa\x0f\xb9\x84]\x04\xa5\x00\x03n\xa4@\x0b\xde\x16\xb7\xd5D\xaa\x82\x9f!\xfb\xc9\xdfP\xa7o\x04\x1e\xda\xb1\xc8Q\xe4,\x96\xa0\x95\x05\xc5\x1a\xc0\x88\xd4\"K\xac\\&\x12'\xa8\x8e\xb9\xd7p\xabC5\xa7\xa20T1F\x07\xbb_\xc2\x8f\xc2c\xe6\xb0QN;\x83\xb0\xde0R>\xe1\xda\xea\x14!\\\xf2\x14P\xe0\x139|\xcd\xb9\xa3u\x0b4\x80\xbci)R\xbc\xc5\x14L(u E-\xce\x90\x83\x1bT\xaa\x00Fj\xdf\xb5\xf07?\x87\x9a\xf6\xfa\xf0\x97\xf3\xbc\xd3H(\x9bJa.\x0b\x99\xf4pS\x8eI\xdfK(\xbae\xf8Fq\xed\xcf?\x8ano\xb09LU\x85\xb0\xe3\xabE\xe0\xba4Ik\x8a@\x13g.F\x08\xd3\x06\x9e\\\xd4\xf9\x14m\xf2\x89=\xe2v\x9d\xd5w/M\xc9\xc2O\xe0\xf9\x91\xc0\x93\xf2\xf5\x96\x0f\x9aNY*J\x7f\xef/E\xca\x96\\\xa6\x8fm*5n\xdf\xfa\x0e\xef\x02\xe8\xfa(\x01\xde\x025E\x9b|\x01V\x07\xa2\x05X\xdc\x12\xda\xefN\xaa\xceX\xb4\xadHI\xf73\x98\x1c1>Y[\xbcM\x8b\xfb!\xd5\xa8\xa6\x055MU\xba\xc6\xa8\xde\xba\x06\xd3\x1c\x18`E\xf2\x7f\xe2{\xc7&[.\x93UP\xb8\xdc\xa7H\xad\x11X\xcbr\xa1\xea\xecE\xbeO\xfd\x0b\xc3\x8b\xbd\x1d\xa5;t\xea\xddv\x9b\xcc\x8f\xb5.\x81\xec\xc6\"\x9e\xff\xe5\xe9\xa3\x90\xd2QK\x02\xc9\xbb\x85\xb0!R`\xffy\xd7\xba\xf4\x9b\xb7\xeao\xe8\xeb\xc3\xa9xn\xca\xf0C(\x14?:\xc9*\xaf\x9b\xd3\xce\x8b\xcd\xae_*\x03\xda\x0e\xea\x90\xe8|\x9a\x8b\x04\x94\x0c\xae\x18\x8f\xa1~\xc9\x97\\EJ\xdf(T@\xb4*!\xd0\x07\x8c!5@\xc7\x92\xe7j\x96-\xdd\xa8\x0c\xfa\x8e\x9e\xba\x9e\x91\xaa\xe2`\xcc\x13\xae\xe2^\x84\xf4\xbd\xbc\x1d\xde\xb6y\xe5\xa2R\xa8n\xe3\x89S\xa6\xacf\xa5\x0d\x16\xb71T\x9bA\xe1\x8d-\x85\x9e#\xe5Q]wr{\x02\xca\xeb'\x17:\x15\xccd\xd2\x82\xec\x023;\x91n\xa2p\xe8\x1b\xd3\x81[\xb8\n\xeb\xb8M\xac\x04y\xcb\x8db\x1b\xb8\x97N\x8b\xee[\\p\xd1\xc0\xc7\xca\x87p\xcbl5bp\xc4\xe0\x88\xc1}s\x0c\xae\xe5\x1cV\x98F\x81\xe9$\xa9Q\xadyP\\FQ;\x8c\xf4\xb8\xe0Wr\x9b\xc5f!\xd7(|Z\xc5]\xb8\x7f\xb9\xa9\xf3N\x92\xef}0\xb2w\x12\x81\x85\xe7\xe2\xe3I\xc0m\xa4\xcbW-\xd5\xd6}\x13[\"\x0c\xc3\x16Z\xed\x1e\xd0\xaa\x8d\x10V\xe1\xff*nv(\\1V\xeb+\xb6Lx\x1cLa\x88\x10\xb9!\xee\xe0}\xaf\x8d\x12\xc0\xc8\x94\xbc-\xa2S\x05\x0cEs\x0c\xb7b\x94g\xb4.![v\xaf\xd6\xa1\xc2\"\xbdx\xf7M\x12\xcc&u\x96?0+\xaf<0n\xeb@\xf4\x9e|\xc3\xa4\x1b&Xc!\x0d\xe7\xf6X\xd9\xb4\x12I.0\x86\x04\x84\x12<\x15\x89\xb8\xe6\xca:V\xc1'\xdc\xf2\x06)\x15\x9cY\x1co\xcfiv\xc5\xf9F=\xa1C\xd7/\xca8\x90fF\xaaYR:\x8b\x0fJ\x97\x04\x80\xbee\"\x85\x8ed\xdf\xb2\xeckv\xcbs\x94\xf1H\xa7\xf86i\x82\x0e7\x92\x8b_\xbd\\\xac\xd3\xcen\x02r\xe3(;I\xca<\x08\xd6_<\xe6\x14\xdb\xdd\x94\x8a\x95\xa8X\x89\x8a\x95\xa8X\x89\x8a\x95\xa8X\x89\x8a\x95\xa8X\xa9G\x15\x10\x15+Q\xb1\x12\x15+Q\xb1\x927X\xa9Xi\xa7\xc2\x18*V\xa2b%*V\xa2b\xa5\xc2ARd\xb0\xad{F\xa9X\x89\x8a\x95\xa8X\x89\x8a\x95\xa8X\x89\x8a\x95\xa8X\x89\x8a\x95\xa8X\xe9\x0b\x15+5\x86\x0e\xdbcu=\xb3i\n\n\xbcS\x84p\x8b\x0c\x9a\xa2\xb8fo\xe7<\x10\x8a\x1dR\xec\x90b\x87\x14;\xa4\xd8!\xc5\x0e)vH\xb1\xc3\x1eA9\x8a\x1dR\xec\x90b\x87\x14;\x04p(v\xb8c\x9c\x8ab\x87\x14;\xa4\xd8!\xc5\x0e)v\xd85\x0b\xc5\x0e)vH\xb1C\x8a\x1dR\xec\x90b\x87\x14;\xa4\xd8\xe1\x97\x8c\x1d\xd6I\xa7\x08\xc1U\xcel\x05+t\x0f\xc37[o\xba!|\xdbYe\xda\xd0w\x9b\xc8q\xf5\xfe\xca\xfeA\xe3\xb94v\x9d\xd8\xdc\xaf\x152+\xddN\x08\xc4\x8b\xe18\x7f/'\xaam\xdd\xf4\xd6\xf7\xa5Jz(\x95\x1eJ\xed\xdc\xe0~\xcfR\xd2C\xa9\xdd\x83\xd1C\xa9\xf4P*=\x94J\xf9C\x94?D\xf9C\x94?D\xf9C\x94?\xa4)\x7f\x88\xf2\x87(\x7f\x88\xf2\x87(\x7f\x88\xf2\x87(\x7f\x88\xf2\x87v\xdb\x13\xca\x1f\xa2\xfc!K\xf9C\x94?D\xf9C\x94?D\xf9C\x94?D\xf9C\x95\x13C\xf9C\x94?\xf4}\xe7\x0f\xb5f\x924\xa7s\xb4&\x91\xf8\xa7\xabj\xaf\xac\x9e\x9d\x1e\x05WAg\xfe\x08\xbe`\xd8?od\x99?`Z\x85\x1e\x7f\xf7&Zx\x84\xa6\xf4\x16\"\x907\xbcx\x83o v1\xfcn\xd9\xbcQ\x0c\xd3\x03\xa8\xf4\x00jY\xfa\x8d\xe9\x01\xd4\x8f\xf2\x00j\x0b\xdb\xaar\x91.v\xe5_M\xdd\"\xcb\xedT\xebd\x0b\x1e\xe5_Q\xadq(\xad\x93j\n%\xbcw\xaa\xa6\xba\x9b\x1b}\xa4\x17W\xdb\xb0WZ]'\xee\x1c\xd0[`\xee\xact\xd0\xb7`\xf3e\xfe\xf01\x1ef*\x8f\xd7\xdd\xbap\x80\xf4N'Y\xeb\xc2z=\xa7T\xcd\xc3\xcd\xc9\x7fd\xd2\xb8\xff\xdc\x8d\xdd\xd6=f\x15\x9e\xeb\xf3GB6K\x80\xab\x06\xc6\xc4\xd8]\xc0(u\xeb\x00c\"\x8c\x0dy\xc4\x8d\xb0\xdc\xc3\x17\xa6\xaa \xaa\xf5w\xa6*\xcb\xfb,OM\x95\xc1\xa9\xbe7U\x81\xe5S>9\x15\x8c\xef\xf0\xed\xc6\xe9\xdeUz\xb3<\xb5\x02\xf9\x05\xea\xa8\x8eJ\xbag-\xda\x06J*4\xea\x12\xf1<*9\x86Q\x11\x87]C\xed\xb7\x0cH\x93\xe1T\xe6Q\xb5\x17\xa8\xaa\x8b@\x12\xdb\xfd\x0d\xaa\xca`\x1b\xde\x9e:\xab\xee[)f\x94Hc1\x9bn\xc9S+\x9d\x15\x90V\xde\x9f*\xa6(=A\x95\xeaE\xb5\x87?\xfd\x15\x07Pm\xc8\xe2\\V\x1d\x9ew>\x90\x15\xd6\xeeF\xeb\x91\x1fG\x87\x98\x0e\xf1\xe7;\xc4\xad\xd8\xec1k\xfb\xc3\xad\x9c\xad\x83X}\xc15RE\xd6\x0f\xbb\xe3\x0b\xae\x91\xaa\xbcQ\xbd\x11\xf0\xbe0\xd7\xc05\x81\x85\xe5p\x7ft\xb0\xa94\xe9k/Mj\xd4\xff\xbb\x8c\x8cJ\xa7\xad\xdcI\x0d\xaf6\xf67:\xd0Y\xd1\xdd\xee\xcb\x9b\x07\xbd\xe7]\xeb\xd2o\xde\x8f,\xf2?\xbe\xf8\x96-\x82\xbb\xf07}\x16\xa9-\x9b\x04v\x01\xc3\xa7\x94\xd6\xf4\xcak\x93\x86\xdd\xe8o\xbc\xa7\xaf\xbc6p\xcb\xe6\x07\xe07\xb1\xca\x86\x05Dj\x0b\xffL\x1e\xee\xd9\xe9\xf1\xec\x92&\xff\x11\x9c4\xc5h\xbd\xdbn\xc3\x0b\xbfj\x1e\xdc7w\xa7\x92\xb1S\x86\x1f(\x1b?\xfa\xb3;i\"\xc3\xd29\xc8\x93\xe5\n\x17\xb6\x8f\x1d\"\x17\x98\x8b\x044s\xae\x18\x8fAo\x18\xb2\x13\xc7\x9a#\xa5o\x14j\xedZ\x95\x10\xe8\x0b\x05\xa0$D\xc7\x92\xe7\xe15Xn9\xce\xa5\xa7\xaeg\xa4\xaa8Xg]\xad\xc4\xd1\xe8\xab\xff0\xd8C\xbb\xa3\x8ff\x7f\x84\x8e\xfa`B\xc0\x9a\x8b``\xe1\xbf\x8759\x14\xc0\xc8\x90\x8d\xfa\xf6\xdd\xc5\xf1\x01T#y3\x07SA%\xf0\xba\x13\x15\xe4U^\x9f\xe0\x9d\xe3\x98S\x88\xe76Ry\"\x90\xdb\xaf\xdf2\x99\"Bgz\xa6!\xc5o\xf3\xe6\xb5\xab\xf4/\xda\xd4\xf9R\xc9A\xa4\xee\xa8\xc63\xd2\xe2\xbf^->L\xdf)\x1fZeS\xb8[\xa0\xa9s)x\xd0[6\xf5\x17H9\xc3\xe8nJ%\xa3T2J%\xa3T2J%\xa3T2J%\xa3T2\xda\xa3\x16\x93JF\xa9d\x94JF\xa9d\xd4\x9b\xa3T2\xbaSy\"\x95\x8cR\xc9(\x95\x8cR\xc9h\xe1 \xc9{S\xc9h5\xfeG%\xa3T2J%\xa3T2J%\xa3T2\x1a\xa2vT2J%\xa3_\xa2d\xb4-0\xd8\x19\x0dd\xb5`\xe0.\x11\xc0\x864\x97-\xd2T\n\x81\xf7\xf1\xb2T\xb6 \x1c~\xd5\x99'\x94\xfdWR&(\xfb\x8f\xb2\xff>N\xf6\x1f\xa5\xc4|E)1\xd5\xed\xe9/\x9a\xfag\xc84\x8d\xb2M\x9d\xed\xfa\xcb\x1f\xdd\x8c9\xa7\xd4;0w\xca\xa2\xa1,\x1a\xca\xa2\xa1,\x1a\xca\xa2\xa1,\x1a\xca\xa2\xa1,\x9a\x1e\xe9)\x94ECY4\x94ECY4\xde\x82\xa5,\x9a\x9d26(\x8b\x86\xb2h(\x8b\x86\xb2h(\x8b\xa6k\x16\xca\xa2\xa1,\x1a\xca\xa2\xa1,\x1a\xca\xa2\xa1,\x1a\xca\xa2\xa1,\x9a/\x99ES'\x9d\"\x04Wr<\xfa\xdb\xcb\x7f\xcbD\xea\x86)\xda\xc0\x00\x148\xfe\x8a\x02\xc7\xcd)S\xdd\xf1\xe1z\xceT\xcfk\x13\xce\xe8\x9ac\xba\xe6xG\xbd\x9bnHEk\x91nH\xbdk\x1a\xd6\xb7p\xcdq\x0f\x06{Lw\x17\xd3\xc9\xbco'\xb3/\xdd\xf6\xcf\x12\xa3\xfb\xba\x89\xe6\xef7\xcd\x7f{\xf7u\xf7:\xc7\xbb\x1d\xe1\xee\xd6\xb9\x9c\xed\xaf\x13\xafu!\xb3\xa0\x0f\x18d\x16\x10#\xfe\x96\x18\xf1\xb7o\x16\xdc\xf9@\x926E\x87\xf8~\x1f\xe2oO\x9b\xda\x0cx_\x98?\xfb\xeb'\xadJ`C\xadP7\x13\xf9\xf2Z]\xefy\xd7\xba\xf4\x9b\xf7#s\xea\x8f\xcfu\xa9l\x95\xcaV\x9b\x14\xa3\xaf\xa6lu\x1b\x8e\xf4\xc5\xbc\xa3t\xca\xbe\xd7S\xd6B\x9cy\x10\xb5\x9b\x1a\xa9\x9a\x95\xaaY\xa9\x9a\x95\xaaY\xa9\x9a\x95\xaaY\xa9\x9a\x95\xaaY{\x94\x89R5+U\xb3R5+U\xb3\x028T\xcd\xbac\xe5$U\xb3R5+U\xb3R5k\xe1 \xc9{S5k\xd5\xf1G\xd5\xacT\xcdJ\xd5\xacT\xcdJ\xd5\xacT\xcd\x1a\xa2\x7fT\xcdJ\xd5\xac_\xa4\x9a\xd5\x87\xdc\x1c\xacC>\x8ee\x1et;|~t\xf2\x06M\x94\xd7z\xd6\x1d\xbaZ\x98\xd9H\xaa\x89\xb8-5\x95\xca\x8a\x99H\xd7\x85\xec\x87\xc1^R\x19\xd4\x1f\x95\x0f\x83=q-\x94\xbdC\xd6\x07~m\x18\x98[\x9b\xcaqf\xef\x92R\xd2XF\xdb\xee<^?\x9b\x87\x01\x88\xb2\x8a\x94C\xc6nR\xbe\\\xba\xa39\x17>\xb5\xe0J\xac\xe0\xc8\xa1\x9f\x82\xbb\x13\x80\x83\xbbce\xac\xe0\x13\xa8\x81\xe57l\xbc\xb2-\xc9R\xe7\xd0\xe1\xd8!6\x9fV(\x86?\x84\xa8le\xe6P\xc1\\\xe0\xacH\x92\xba\x12\xab\xc7\x08\xcd\x92\xcb\xd4\xc7\xb6\xdc\xc9\xea\x80\xab\x0e\x15L_\xae\x9af&\x911H\x822d~\x82\x1b\x07\x96XH\x0bG&\x03'\x86\xd1\x0b\xe1\xce\x89\x88\xb36^X\xa5\xe2\x12C46\xcdb\xd0\xaf=\x00\xa0\n(\x06$\xec\x98\xc3-s}s+=\xd1\xb3\x8e\xf3\x12P\xf5mP\xd1\x86\x95\xbe\xe2\xe6DMu\xf7:g\xdc\x8cn\xb8\xb2\x15W\xc2\xba\x84\xce\x9a\x15\xefW\xdc\xfc\x0c\x9d\x83p\x0c\x9aC\xa6\xa4\x85\xc8\xc0\x8dN\xaf\xd8\x8d\x0f\xe6\xa1\xb2mo!\x1c!R7:,\xc3\x01\xe1\x94\xbe\x1dAxo\n\x00\n\x1e>s\x1aIl1\x02\x1ck\x85\x91\xcd\x86\x9d\xf2\xb8*4\xa0[\x96\xd3+\x8c\xe2\xc3\xbe\x9b1~\x06\x82\xb4\x1b\xe1\x13n\xf9\xc6u6\x86\xb0^p\xcb!@\xabV\xcc\x8d\xc0Ra\xb3T\x05OM8\x01`\xc0\xa8I\"\xd2b Cvb\xd9\x9b\xf7\xe7\x17\x10rK\x84\x9a\xd99[\xa6b*o1\x17\x02\xf2\x8f \x83R8\x1b\xc0Q\xac\x9b\x01\x07F\xd1$\xf2\x19\xf2a\x91\x00\x1b%D\x1dxw\xaa\xab)\xe6z\xc6\xa4\xc2\x15;$w\xaf\xe1\xeb\x94:\xf5]\xed\x1f\xc2\x84l\xa5\xaa\xa0\x0e\xfe\xbdu\x02\x06V\\\xf0\x1bi\x8a\x84\xb3+\xb1zT\x08\x02\xa7\xa5\x1b\x1dK^(K`X(\xdb(\x93\x90\xc5\xc3\xc95\x8c\x17\xe1y6\x11\xd7\"q\xab\x07\x8b\x8d[\xcb\xe3y9FX\xde[\xa7\xc1\x85\xec\xdf\xe7b&\xd5\xf3D\xc7W\x03\x16~;V\x93\xda/Gs\x11_]\xdc\x023\x0c\xbf\xbd\x10\x89\xbc\x16\xe9\xc5\xed0R\xaf\xb9\x15N\x0dL\xb92\xdc\xc7(\x17|\xe5\x94\xadp\x9bGf \x05m.\x8c\xc0\xf5}\x1a\xe1\xe6I6R-4\xdb\x90\x12\xed\x98D)m\x0d\xf5\xe6\xb0\xca\x97\x80\xb5\xca\xc2=26\xf3\x9e\x92\xf2\xd0M\xa9\x9f\xff\x18\xdc3\xb1y\x7f\x95\xaf\xd6\x0d\xbe\xb8\xed_\x87\xb8\x85\x17-\\\x9cr1\x17l\xec\x0e\xa1\xf7\x8e\x81\xc7\xfbv\xce\xcd\xbc\x9b\xb9\xbb\xbe\xa5\xa3\xc8\\/\xbf\x98\x890K\xde\x9c\xea\x18f~\xcb\x17\xd8(wt\x1d\xe9\x89\x08\xddK=[\xcd\x94\x86#\x86\x95\x06n\x00<\xf5-\x12\xb7\xf1h\xc2f\x0cB\xa4\xdbuO\xf9\xcd\xa8\x97\x98s\x98\xd0\x99]fy:]\x89g>0N\xea\xcdD\xca\xf6\xdd\x9e\xe3\x10\x0f\x87\xec\x0d0\xaeH)\xad\x1eM\x84\x15\xe9B*i\xac\x8c\x83x\xbd\xc3a$s\x8f8\xcew`\xee\xedv\n\x1dYL\xf2\x03\xc8\x9a\xcf\x9f\xac\xdaP-\x07\xff\xb0Q\xf3\xe9\x18\xba\xa7\xe1\xd5\xcc\xe4\x0e+VN\x8a\x97h\x85L\xbe\x82\x19\xf77\xae\xfaL\x13l(\xf0\x82\xd5&\xb1\xb7\xdd'\xd5R\xe24%NS\xe24%NS\xe24%NS\xe24%NS\xe24%N\xe3\xbf)q\x9a\x12\xa7)q\x9a\x12\xa7\xb7\xd8\x93\x9d\x13\xa7\xad\\\x08c\xf9b\xd9m\x87^\xc8\xc2L[\xa6\xe2Z\xea\xcc\xa0\xa3t\xc8^:\x85\x19\xbc\xa5\x86\xfd\x17{2`\xd2>@\xbc\xdd\xc0\xaf\xb0\x9f\x13\xe9\xac\x93)\x1a\x81\xf9\xc4\xd5Zev\xadm\xa1N\xe0\xe8\xaf\xb9\xb1Gz\xb1\x90\xb6<\x11{\xf6\x8c=\x19D\nfr\xea\x84\x91\x06F\xa5\xf0\x18\x85\xc7>Ux,\xf7\xcfy\xff#\xb6\xcf\xfd~(\x9aca\x0c\xf2\x94\xb2c\x889Kl\x00\xc4\x9fO\xc4\xa4\x8a\x93l\xe2\x84\xaa6\xa2m\x18?\x97\xe7\"!\xa1M;\x11\x1fz@\xcc\x18L\x0eeE\x88\xbeA&Y*\xb8a\xaf\xf5\xccT%\x11\xce?\xf0\xc6Yi;\xc2\xf5\x06\x83\x1c\x1a\x90\xfcU\x90\xca\xe0\xa0\x15'U,\x0e\x18\x86l\x1e\x99\xc9\x15\xfb\xf3\xf0\xafO\x87O\x9e\x0c\xdc?\xfe:\xfc\x01\xfe\xffC\x03=\x16\xc1\x9c.\xe7g~\x03\x83\xbd\xc5\x98\xbc\xc3C~\x1b\x83\xb3\xb9#e\xf9\xcc\x94|\xbd\xa8\x9d\x04\x95\x06\x02\xed\x06Y\xf8D\xc0\xed\x07\xe5@S\x9c\xae\x96V\x0f!\xc8odq\x99\xc3\x913\xddc\xfb\\\xdaC8\xe6\x9d\xc7[\xdc\xda\x94\x8f\xc6\xd2\x9a\x11\xdc\x912\xe9\x19q\x10I\x95{\xb4\x1d\xf75\x1c\xd6 \xc4\xd4\x88\xba1\x8cw\xb4@t)\x7f\xdb\x80\x8d\xa5e\xc0\xbc\x86N\x87\x92\x90\x05\x98\xf9\xe7\x12\x842Y*r\x87V~a\x04\xe0\xde\xf2+a\xd0\xb7\x04\x89\x9e\xe5t\xccH\xe14\xa8\x0b\x82t\xc2\xceR\xcdJ\xf3(\xed\xc6M\x05\x9f0\xc3\xa7\xc1\xa7\x80\xbf;4AV $>k\xe5\xbd\x14,\x03c\xb5\xb4i\xf6vh\xe4L\x95/\xdf8\x973\xf5\xa6\x1a/\xcb1\x19\xaah\xceO^\xbd\x1d\xbdy\xf7\xe2\xb8VCS\xfc\xfe\xe2\xe4\xec\xf8\xe8\xa2\xf2\xd3\xc5\xf1\xffy\xf1\xfe\xf0u\xe5\xb7\xd7\xc7\xaf\x0e\x8f\xfe9:|s\xf2\xf6\xdd\xc8QV\xe5\xeb\xf1\xc9\xe9\xe8\xc9\x7f<\xa9\x16\xd6\xb4\xcd]\x8b\x89\xf8U\x14\n\x0crjX+[\xb8/\xe8\xf2\xb0\x869\x9d(/Q\x98eX\xff\xa9\xb4\x9d\xe0W\x923\x853\xbbc{|r\xca\xa0\x8d\xc7\xb4\xf7\xfe\x1e\xc1\xc1\x8d\xd4\xf9\x8b\x7f\x0c\xd9\x99\x98\x1e0p\xf3\x1d<~,\xe4\xd2\x0c!\xd3[d\x8b\xa1Ng\x8f\x8fON\xcf\xdd\xcf\x8f\x9e\xfc\xc7\x13G\xccG\xc1Y9h\x80\x05\x1e6\x99Ic\xe1\xfe(0\x0f\xf2C\xe4\xce=\xbb\xe6\xa9\xe4\xca\x0e\"5\xcer\xd7e\xce%\x8b\xcc\xe7\xf3\x17\xff(\xd9\xd2Cv\xe1\xd8\x17P\xc0\xf1\xc9\xa9\x03e\xc0V:\x03'n\xa4\xc0%fJ\xb6\xc8\xe5\xc5\xed\x91VS9\xbbD\xb2\x02C\xa5\x81\x1bG\xea2\x80\xf7#\xca\xeb\xcb\x8067\x07\xc66\x1c(N]\x99\x88XN e\x1dMo\xef\x90\x8b\x94o]\xdd\xbfv\x91\xfc\xc3\xf0i\x95y\xe6\xc9\xa0\x99\x9d\xf7\xcb\x91t\xdb)\xd2\x91S\xdb6\xaa\xc0\xff\xffTL\xf7\x0e\xf6\xfe\x7f\x8f\x1daj\xe5\x18\xd8c\xf0\xddr\xf3x}\xfes\x18\x15 X\x13o\xe5\x19+\x95\x19\xe53\\\x14\xda\xa5\xe2\xb7L:\x12\xc0~\xc6G\x89 \xeb=R\x8e\xf81\xc7OO\x99\xc0-1\x18\x8eXp\x9b_GZ\x1d\"\xb0\x9a\xe7z\xb2z`\"\x95\xeb>04\x18\xbea\xac\x90\xce\xb4L\xe5\x02\xfc\xb70B\xae\x83h\x15\x8e\xe5\x92\xaf\x8c\x8f\x87 \x14iS\x012\xab\xba\xf8\x97\"\xaf\xf5\x98\nd\xbe3nX\"\x17\xd2\xe6K\xae\xe8\x99\x05H~n\xec\x1e\xa9^ \x85\x99\xfc8B\xac\xa7\xeeG\xaaR(\x10k\xbc\"W8\xdb\x01K\x1a\x80\x11\xea f\x06L4\xc4\xc2\xf3\xf2@d\xe7\xb1g\x8c\xc1%]\xec\x954aJa\xac\\\x80\xfdq-\x9d\xb8X\xf8\xea\x8a\xee\xaa'\xd4Ev\xb7\xd0&B\xe9E\xb3\xfdW\x1f\xb95\x95\xe2HKU\xd2i\xa1\xe0\xb5(\xcaPz\x11\xee\xfbuH\xe2\xca\xebOpv\xdf\xbe\xbb8>\x80\x0d\xf0J\x15z\x96P\xaf;Q\xa1Z/\xe7)\x15\x17\x05z\xec\"\x95c\xdc\x14\xf4<^\xb1\x99\x9ei\xd0\xc90T\xedS\x8f\xfcz\x0b\xa51P\x1a\x03\xa51\xf4\x98\x86\xd2\x18(\x8d\x81\xd2\x18(\x8d\x81\xd2\x18(\x8d\x81\xd2\x18(\x8d\x81\xd2\x18(\x8d\x81\xd2\x18(\x8d\x81\xd2\x18(\x8d\x81\xd2\x18(\x8dak/\x1d\xa51P\x1a\x03\xa51\xdc\x834\x86J kc\x02C^\xc3\x0b]6g.@\x13\x03d\xb4M\x90l#\x97\xd9%zV]\xab\xbd\xcdK\xf7\x13\x897\x17\x85cQ>2\xc3Z\xdc\xed\x0e\xbc\x8f\x02r\x14\x90\xa3\x80\x1c\x05\xe4( G\x019\n\xc8Q@\x8e\x02r\x14\x90\xa3\x80\x1c\x05\xe4z\xf89( G\x019\n\xc8Q@\x8e\x02r\x14\x90\xa3\x80\x1c\x05\xe4( G\x01\xb9O\xe8\xa5\xa3\x80\x1c\x05\xe4( \xf7\xf9\x03r\xeb1\xaa\"\xee\xd4\x16\xac*\x80FZY\xf2\x99/\xb0\xdd[{D\xa4\xf8Vv\xa9\x97~-\xdeN\xc1!\xbb_\xd8P\xe2\xd6\x8ez1\x91\"\xb6\x14\xfa\x84%\xb9\x7f\x86R[\xe3\xaf\xba?\xe53\xe1/\x05\x1e\xe2\xf7H\xb9%c \xa0\x1b\xc1\xc1-\xd8B\x1b[\xb1\x14\xad\xf2u\\\xe3\xef\xa5\xec,\xf7W\x1e8\xeb\x8f\xd5\xb6+\x106S\xf8\x0bn9\x06\x85W\x18\xbd\xc5\x87\xfaC\xf2e\xe0\xef\xff\x1f{\xdf\xfa#\xb9m\xed\xf9=\x7fE\xa3\xf7\x83\x13@\xae\x16I=(\xdfl\x00\x8f\xed8\xb3\x1b\xdb\xb3\x9eq\xf2a\xc6\x98\xab\xaebwkG-\x95%U?\x10\xe4\x7f_\xf0\xf0Q<\x14\xc5\xaa\x99\xc1^\xdc \x02\x1a(\xb5$\x1e\xbe\xce\xf3\xc7C\nP\x03\x80\xc3/\x8e\x1b\xbf\xa5\x96\xf9\xe1\x97\xd7o TmEw;\xdd\xc9\x98\xff\xa6yR|\x01\xd8\xa3\x1c\xf7Q\xeck\x19\x12\xa9\x1a\x14\xe1C;5\xd2\x8c\x98\x1a,\xd9\xd1\x9c\x8ap\x1a?\xfck\x7f\x8b\xbd\x10\xc8\x85tx\xf5t\x1f\xd6\xac\xea5\xab\xfa\xffSV\xf5g\x1c\xb1`Wo\x16x6t\xda\x84\xa7\xfe/\xce\xfbh\x90-v\xca\xbc\xbc9c\xf7\xffu\xbf\xc3\xb94\xfd\xcef\xe6\xea\x82\xea\xce\x80\x9f\xd4r&?\xfb\xd3\x05jZ\x97'\xd6\xe5\x89uyb]\x9eX\x97'\xd6\xe5\x89uyb]\x9eX\x97'\xd6\xe5 u\xbd.O\xac\xcb\x13\xeb\xf2\xc4\xba<\xf1\x11s\xf2\xc9\xcb\x13\xd8\x11\xb1\xbb\xa0\x01c1\x1bs\xed]\xe5\xb0*\x04@\xec\xf4\xa7*\xfdO\x8f\xaa3\x08\xfa\xd1\xd9S\xad2\x02a\x9c\xf4j\x82\x9cA\x85\xcb\xf57\x17\xc2|\xfb\xd6\xf9\x14\xea\x17\xa3\x01\xee\xf5\xd6\x06Y\xe2\xcd\xd3\x17j\xb9A}\x0dws\xf1]\xbd\xbd\xf3[`V\x1f\xa0\x0f0\xc5S\xaf\xe2N\xd5\x1f\xa9\xc7&\xfb\x15\xd3\xa9\x91q\xcc\xa4?3\xbby\xd7\xbd\x00\xc4\xf4A\x06\xd4\x8a\x87\xcc\x9b~5\xbf7a\xa1\xdd\x1e\xae\xde\xd3\xbd\xfe\xc3\xbb\x0er\x8eo\xc40\xa8\xe8\xa36\x08Ds\x0f\x8e\x9dnm\xb7\xbb\xd8\xd7\xcf\xea\xd9\x8d8b\xef\x8fw}+\xdeu\xfe\xf1\x87\xf7\xe2\xfe\x8cs\"\xe5[\x06O=\xfa\x92]?\x89\xabm\x7f\x0f\xb1\xba\xfe2\xa8\x1e!\xa5\x9e\xd0\x9a\xc2\xdf\xbf\xfe\xf9\xc7\x97?~\xff\x95\x9c\x96m\xdb\xa8-\xed\x92\xa0Z\x83i\x9f/\xc4\xd3\xbe\x87\xb5\x1d\x19\xcd\xea\x08\\\x86\x03\xd72\x10m[\x10\xe2\xfb^\xa7T\x1f#t\xfd\xec?es\xfe\xd3\x1e\x18\xfa\xfbQ\x08\x9b\xed}\xdbLw\x87k`r\x85\x01]\x1d\x176\xae\x9aq<\x88\xf1\xaa\"\x94\xfeA\x1d \xd9\xdc\x8b\xfe0\xbd?\xe3<\xe2\xf9>iU\xd6\xe0C\xee\xd9\xc4\xda\x98)M\xa0\xf0{\xe7\xf4a\xd0$]?\xbd\xeb\xae-\xact\xfc\xa4+|l\x16P\xdd\xa7It2r{\xaf\xe2\xf2\x152Z!\xa3\x152Z!\xa3\x152Z!\xa3\x152Z!\xa3\x152Z!\xa3\x152Z!\xa3\x152Z!\xa3\x7f\x0d\xc8\xc8D\xce\xb3\xc8V\xf9\xce\xd6\x0d1waLe\x94a\xe1\x86\xebg\x15\x1f\x8f\xef\xba\xc7;\xd1i\xe1Qj\xc8\xa5%\xfd\xc4\xf1`\x8e\x02\xd9\xc8HBZ\x0d%n#|\x10\xe5\xc2\x86\x89r\x86\xb7u\xf7\x058\\*[e\xa7\xf0\x9bY\xd4\x0e[\xdb\xd5\xd1\x04\xb2C]\xdf\xbd\xdf\x0e\xcd$\x83\xbf\xf7k\xbc\xbe\xc6\xebk\xbc\xbe\xc6\xebk\xbc\xbe\xc6\xebk\xbc\xbe\xc6\xebk\xbc\xbe\xc6\xebk\xbc\xbe\xc6\xebk\xbc\xbe\xc6\xeb\xd3\x1a\xaf\xff\x17\xc4\xeb\xcfv\x06\x9b\xdb\x0e\x0e'\x0d\x1dl\xff\xc2\xd9\xd4\x01\x1b<`\xf7\xa7\x1b\xeaC?d\xd4f2S\xe0\x04\xba\xfeA\xef\x05\xad\x0f\xd3\xdd'n\xcc5I*\xb01\xd7\xa6\xa3\x9c\x01\x14,\xef\x86\xf2v\xecZ\xa28\x13\xc7\xb9\xaf#\xbci{\xa7\x95\x9d\xde\xf9\xe6f\xd6\xbc\xeb\x8e\xe94\x17(\x9b\xc6\x1e\xc7\xb6\xed\xbbNl\xe1\x8c.K\x1c\xce\xfdG\x9b\x9c\xda\xe6\x83x\xd7\xc5\xf6\xdeJ\x8b\xd5\x8f /!\xf7\xf7\xcd\x93\x99\xabq\xaa\xbb]=h\x83b\xa3\x8a\xeb\xa1\xafw\xdbz\x84\x96\xcc>W\x1d\xda\x07\xf4\xc2\xec\xf2Y7\xea\xac(\xce\x8a\xe2\xac(\xce\x8a\xe2\xac(\xce\x8a\xe2\xac(\xce\x8a\xe2\xac(N\x98\xd8\x8a\xe2L+\x8a\xb3\xa28+\x8a\xf3/\x88\xe2\xac\x1bu\xd6\x8d:\xebF\x9du\xa3\xce\n\x19\xad\x90\xd1\n\x19\xad\x90\xd1\n\x19\xad\x90\xd1\n\x19\xad\x90\xd1\n\x19\xad\x90\xd1\n\x19\xad\x90\xd1\n\x19\xad\x90\xd1\xbfx\xe2\xcf\xbaQg\x8d\xd7\xd7x}\x8d\xd7\xd7x}\x8d\xd7\xd7x}\x8d\xd7M@\xb9\xc6\xebk\xbc\xbe\xc6\xebk\xbc\xbe\xc6\xebk\xbc\xbe\xc6\xeb\xff}\xe2\xf5\xff\xa2\x8d:\x93\xe8vb\xb8o\xbaiS_o\x9b\x0d|\xbc\xe6\xbc\xa0~\xeeX\xae\x9fC\xfa\xf7\xf9\x1cR\x90q\xec\xc0\xfd;L\xb2\xdd9u\xd8\xdf\x0e\xf5N\xb8\x9f\x96<\xb4\xe2o*\x8e==\x12\xd2d\x85:h4\x96\x8b\x1a\xd5\xfb\xfd\xc5=\x90\x87\xb1\x99UqF\xaa\xcfV\xf2@7\x1eF\x13i\x87h\xcf\x86\x0c\xf5\xc9Fzr\xe0T\x11\x1d'\xc3\x17\xb10y\x15\xfc.|@qq\x0c_\xb5\xf5g\x0c\x1dn\xfbk1)\x0d #i2\xcbL\x8d\n\x14\x84GF\xe3\x1e\x9c\x14&\xfd\xda\xee]\xe7\x0d\xd7\xd8\xdfL\x8fR\x97K\xb1\xdd\xef[\x15\xd1\xc0\xc8\xd4\xed\xc5\xbb\xcb\xbe\xfbR\x97}w _\xf7\xac\xbb\xdd\xa8?\xfe\xa5\xe1A\xc8\x94;\n\xb2\xf6\x80\x1d\xd7R\x13\x00\x0e\x95:C\xec\xccg?\xebv\x04\xa8m\xf7\xae\x9b\xfa\x8b\x9d\x98\xc4v\xbax\xbc\x13\x00.\xd4\xc7\xc6\x99FKK\xa6\xcc\x8b\xfd\x90\xa8\x1d\x00\x80\xba\xdeu\xa62\xf312\xe0\xf7\xc9\x0e\x8e\xf4C\xae\x85\xe8\x00k3_\x84\xd4\xd5$\x17\xcddF\xef]\xa7Q1\x8b\x10\x1e[\xd3\x8c\x17\xfda\xfa\xb2\xbf\xf9rWO\xe2\xc2\x9aQS\xf5\x9b\xe6\x1e\xbe\xe1\xf7\x17\x95y\xd6\x8c\xd2\xd7\xa9\xb7w\xd2}\xd1\xee\xba\xa5\x05\xd5\x89\xa7f\xb2\xc9oQ9\x90\x15~ o\xf9\xec\xf1\xadt\x9c\xb6R\xc4\xbfR\x0dP@\x99n\xd3\xa8\xf01\xe8\xf9\xce\xbe\xb9 \xbcy\xd1\xf6\xb7\xcd\xf6]g\x07j\x10\xf7\xfd\x83\xf9\xca\xa2l\xfb\xebo\xff\xf7F\xfb\x7f\xcd\xa8\x9dh\x0d,\x01\xe4\x93X\x84\xcf\xb2\xe2t7\xf4\x8f*\xe7\xf1\x8c\xbc\xbe\xf0\xa7,e\xcc`r\xf9&\x9b\xc8w\x1c\xf5{\x8d\xf7\xe8Og\x02\x9e\xf9\x93\x8e\x82v2\xd8\x83\xbe\xea\x86\x8eB\x0d\xb8\xd9\xdc\xbb\xa4\xb5 \xc4w\xec\x9c\x85\xa8,Ow7\xbdF\x06\x9bn\xdb\x1ev\x00N~ .\xd6\xbbn\x7f\x05EWPt\x05EO\xa9\x9c\x15\x14]A\xd1\x15\x14]A\xd1\x15\x14]A\xd1\x15\x14]A\xd1\x15\x14]A\xd1\x15\x14]A\xd1\x15\x14]AQ\xf3|\x05E\xff\xfb\x81\xa2\x0b\x80_\x00\x81;\x07\xf0s\x8a}\x14\xe0\x87\xd2!\xc7\xf31?\x95,\xf9^\xbb\xc6\x9f\x91#\xfd\xef\x9d4\x8a\xab\xf1\x06\xf5\x02\x1f\xdb\xa8jR\xd1\x87F\xefD3\xcc\xab\x1c\x17\xc1\xe4\xf0d\x9f\xc3^\xb8\xe4\xbb\xee\xe7W\xdfh\xeb\xf8iY\xb1@\xf5\x17\x0d\xdf|cz\xf0z\xaa'q>\x0f\x1e\xe1\x1fC`\x86\x00-\xc6\x17\x86\x1f\x96Z\x1e\x1e\xc0x\x8b\xcf\x19\xc80\x054\xa0\xa0\x1b\xfe\x99\\\x8e\xa2\x1e\xb6w/M2\xf88\xf5\x83\xb8\xfc\xea\xed\xe5T\xdf^\x01\xb1\xcb\xe4R\x0e\x07\xe8\x1d\xa3\x00\xbe\xdb\xf7\xdb;\xf4\x00\xee\xbc\xecn\xfa\x11\xbf\xff\xe7\x1f~\xf8\xa6\xef\xb6\xa2\x9b \x18x\xd5\xf7\xed_\x9b\xee\x83\xf7\x96\xf7\xc6\xcb\x9d|Gz\xef\xb2\x1e\xff\xdeLw\x7fn\xdaI\x0c\xe8\xd9\x8f\x87{x<+\xf0FN\xd3\x8c\xca\xec\x0enS\xddn\xbf{j&\xf9\xe0\x9b\xbe\xe9F\xd9\x9c\xd7w\xf5 \xc6\xd9{\xff\xabo:\xf9^\xe0\xb1\xbc\xfd\xaa\x1e\xea{|\xfb\xf5\xbe\x9f^\x0d\xcd\x167\xebM?\xd5\xad\x1a\xa2\xdf\x0e\xcd\xae\x99\x9e\xe7\x8f\x03u\xc0\xfdp\x91\xef\xc6\xa9\xb9\xaf'\xf1\xfa\xb1\xde\x7f\xf7To\xa7\xaf\xef\xfbC7\xbd\xec\xcey\xeb\xa7\xc3\x84^\xfbz;5\x0f\xe2\xfb\xfap\xeb5\xc0}\xf0J\x0c\xdf\x8a\xae\xbf\xc7/\xb4\xed\xf7C\x7f\xd8\x8f\xe1\xbb!\x92\xe6\x99\x9ckx\x8e\x1e\xc3\x9d\x17\xcf/\xbf\x9d\xdf\xc5t\x80\xc8\x8bg\xf8\x81\xc7^\x91\xbf\xf6\xdb\x0f\xf5u+\x8ce\xc5\xa5\x95Bz\xd3\x7f\xdb\x8cz\xf7\x03\xb0\x02z\xe7g\xf1X\x0f\xbb\xf1\xbb\x11\x0f\xd6/\xfbm\x7f\xdft\xb7\x816\xe1G\xe1\x01\xdbn\xe5\x0c\xc8\xd6I)\xf6\xebD\x8fM\xd3\x97\xdf\xf8k\xdf\xdd\x8a\xe1c\xdf;\xd1*\xfc\xf2\x8f\xfd\xf4K\xd7\xf6\xdb\x0fMw\xfbS\xd7>/\x97{U\x8f\xd3\x1b\xb5\x86r\xe2\x8d\x13\x0d0\xaf\x9dS\xb5zAN\xf4\xe2`\xaaW\xc4\xee\x05\xe0zK-\xb45\xcd\xe9\xc8V)f\xf8YlE\xf3\xe0i'\xd5\xe8\x19\xcf\xea9\x9cuU\xb1\xde\x8b\xba\xad;OK\xa8'\xaa\x9c\x12T\xf4\xf8G\xf1\x04\x03\x14\xa8\xe7\xb0\x0f\xa9\xa2\xe7n\xba\x13S\xb3Uo\xbcxV\xbf^q\xef\xadq\xe150\x03\xafd ;\xce\x85\xa9\xe9\xa6@\xfd [\xf0\x05+D\xe8i\x12CW\xb7/\xc12\x84\xd5\x8e\x92\xe7\x1d\xbei\n\xc8\xb0.\xac\xe6\xe3\"\x0f\xf6\xc7T:\x06\xda\xfb\xcb(\x06\xd7`\xbd>\xec\xc5p\xd3\x1e\x9a\xdd+\xfd\xd1\xa9\xf1[\xd1\x8a[\xf9\xecc\x0b\xfe\xd2\xedTQ\xe5N8\xdc\xd7\xb6_\x8f\xa3\x98fJ\xf2e7\x89\xe1^\xec\x9azx\xd6,\x1a0\x0e\xc7\xaat\xd3f\xdd\x06\xea?\x1c\xda\xa9\xd9\xb7\x8d\xc7\xb9\xf0lfC\xbfQ_\xeb\x12\xbb@\x13\xf0T\x1a\xeb\xe27\xc2\xb0\xef\x8b\xe7\xbf\x99\xf5\xb8\xb9\x1c8\xa3\x14\xe0\xdd@\xbf\x02\"\x11\xec\xfe\x8bg\xfdO?\x9c\xf3\xf2YM<\xce_\xa4\x02\x98\x91#\xed\xa5\xd7~\xe9\xf6}\xdf\xfe\xfd\xae\x99\x84t\xce\xb1\xcc\xc86|}\x98\xee\xfa\xa1\x99\x9e\x7f\x10S\xbd\xab\xa7\x1a\xbd\xa2\xd4\xd8k\xd1\xed\xfe\xd2\xf7\x1f\xbeV\xc7\x9b\xcf\x89\x80[\xf3\xcd \x02\xad\xfc \xba\x9bz;\xf5\xc3s`\xe4\xdf<\xfdY\x88\xf1E=\x06\xb44\xdcQ~\x1c\xba\xffg!\x80j\xa0\x19a\x7f(\xc8\xd0!\x16S*1\xfc\xfaa\xba\x0b\xb4\xff\xfb\xa1\xf6\xdf\x84[B,>\x19\x02O\xben[\xad\xa2\xf1\xfd\x90\xde\x8e\x0c\xd6\x18\x9cBx\x14\x9e\xdc\xba\xfb\x10\x9a\x14-\xeb{\xcf\x08\xaa[?\xdd,\xbd,}\xac\xfe0\xfdts3\x8a\x99\xe4@\xc9\xe57\xbe\xe9\xef\xef\x0f]3=\xcf<\xe8#\x8bCU\xdaOZx%\xf2\xb4\x1f\xac\xec-<\x97\xad\xdb\x0d\xf5c\x90\xcb\x8d\xeb\xd6\xf4]`\xc8,i\xd9\x8ff\x1c}\xff\xc8>\xff\xe90\xc1\xe7\x02\x9b\xee6\xd4V\xfb\xde\xeb\xb6\x1e\xef\xe6\xce\xecw\x0f\xcdN\xf8\x1c\x11\xbc\xf9u\xdb\xf6\x8f3\xe6\xb1w=\xce\xec\x1f\x02\x9dz5\xf4\xfb~\xac}\xdb\xa7\xefzc\x08\x9fJ\xf4\x07\x16nbv\xa9\xdb\xf6\xf9gXR\xc5\x1d\xef'\xafM\xf2\x0en{\xd7\x1d\xeav\xc1+x\xd9\xdd\xb4p\xe5q\x95\x8c\x94\x17<\x86\x90!\x90\xa3\xdet\xb7\xa1G\xea\xd3\x90\xf3\xd8\xd4y\x10f\xab%[\xf9\xb3\xd8-<\xb1E\x7f\xe9\xae{\xe0\x95%\x1a\xaf'X\xca=\x9b\xc5\xeds\xf4\xf8/\x8d\x8c\xd7\x9b\xad\xf4\x93\xbc^\xe8\nB\x03\xa2\x9f\xf8\xf2\xba\xd0\x84p\xcd\x8e9\x8c\x0e\x85?\xb1\x81\x81 \xd3=9\x82N\xf2!f\x9d#F\x89\xeecp 7*\x08\x97\\&\x00\x82\xbc\x16\xc3\x83o\x98\xbe\x17\xd3_\xebI\x8c\x13\xe4\xdc\xf9\x8f\xe0\xe6\x8bg\x95\x80\xe6?\xfc\xb1\xdf\x89\xd9d}/\xa6\xd7\xcf\xdd\xd6\xf7\xfal5G\xed\"f\x04\xddg\xc1J_7\xf7\x87\xb6\x9ef=x\xf34\xaa\xe3+\xdc\xfb/\xcc\xb7O\xdf<\xcd\xdf\xbf\xfc\xd596\xc0\x02\xa3\x97t\xc36\xfc2\xb9\x04d|\x04\xf0\x08p/\x0cn\xfd\xaa_\xf8\x9b\xd8\x02\x8f}\xf5V\xbfw\x95^&o\xd3\x84lX\xc6\x7f\xfd5y\xeb\x96\x82gpS\xbdJ.\x93\xb7$\xc96EU%4a\x1b\x9e\xe5 K\xd8&-\xcb$\xd3\xff\xe7 \xdb\xe4\x15M\n\xf5\xde\x8c$\xc1$\xe9e\xf2\x96&\xd9&\xcb\xf2\xa4L\xca\x0dIY\xc2\x93|\x931:+JqQv\x99\xbc\xad\x92lC2\x92\x904I7E\x9e\x10bn\xc8\xf6\x15\xbcL\x083w2s'7\x17EB7\x84\x16\xb3\x8a\x18\xae(\x93\xdd\x96\x15\xe4\\\x13\xa6U\xa1\xe8\xc1En.\x8a\x84m\x18\xa1 )\x13\xb6)S\x92\x10\x9e\xd0MJxB\xaa\x84lrR\xce\xaa\xcapU9LF\xba\xe1L7\x8f\x16$\xa1\xa9\x1c\xa0\x94&\x94\xc8\x96\xa7,\xa14\xa1\x9b\xa2H(3O\xb2\x84n\x02\x13\x98c\xf2\x85\x1cm\xd9\\\x96P\xd9\xd8\x82\xe5 -\xd5\xff\xdc\xfc_\xa9\x8b\x19\xad\x02\xd3*\xcd\xa8\x14\x15Q]'E\x91\xb04\xa1\x1b\x9e\x96 \x93m\xadder\xc0\x08O\x183O2s\x91\xcbFWU\xc2\ns\xa7T\x17\xb3\xbaK\\7\x97uC\x07\xb2\xd9\xab\x1c\xbfZ}N\x97+\x8f\xff\xa5<0\x9e\x94\x9b\x94\x078\xdb\x97\x16\xc9\xea\xacZz\xdb\x13\x04\"\xb9;K\x97\xde\xf6x\x9f0\xcd(EZ*\xe6\xcf%\xbbI.ci\x95dr\xf0IE\x93L2\nKY\x921s\x91\x99Gr\xf4y\xc6\x92\xac0\x17eB6\x15\xad\x92L\x0e\x0cc<\xc9*\xf5\xf2\xbc=\x9e\x88\x90\xecs\x86\x99xR@$\xdb\xe6\x8bc\xe115\x91\x8c\x99\x93\xa5\xb7=\xb6%\xe5g\xb5\xd4cD\xc2?\x8b\x9a\xc7\xab\xa422\xc5s\x9a\xc8?\xa9\x07\x93\x9ci\x05\x99K\xc9\xa9\x8a\xc0tx\x8cJSC\xa8\xac\x88*O(S\xe5\xcb\x8c'y\x9e\xe4\x9b\x94UI^\x80\"\x997\x8dz\xccL\x89\xa1X\xd1,\xc9\xcb$\xdfpI\x9a'\xd9&O\xd9\xbc\xbc\xaf\xe7)\xea\x9a\xee\x88*O\xe4\x9djI\xe9{\x9cO\x19\xea\x9a\xed\x914\x1aR\x01\x15\xa9\xea\xda\x9c\x90\xc7\xb24s \x81\xa6\x06B\x86bA\xf4\x18\xc9f\x86)zlKsK\x91\x95r\xd4\xb5E\x94\x12\x97\x93<)\x98\xb6\x9dE\xb6`\x1c\xa9\xc7\xda\xb4@JV\xb613r\xceS\xcd\x10\xf2\x0e\x8ccI\x92\"W\x06aN\xd9\x13\x03\x8a\xd4\xb7T\xdc\x1bi\xb4KmO\nY\x15\xe7,)*i\xc1\x18I\xcaT\xdb\x9eR\x1b\xa1y\x15\x9elP\xee\x0ep\x99j&,\xf5p&\xa5TI9\xe7I\x99-\x0d\xb0'\x1f\x14\x94\xb92\xdaI.\x95\x15/\x94\xf6\xcbR\x9e\x94R\xa1\xe5\x15OJm\xd7\x93\xb2\x04\xabT%\xa5\xec\x0e#,)+\xfd\x0e\x97.\x0f/\xb3\x84\x13s\x87\xeaw8\x93ZT>\xcat\x15\\\xd6E\x0b\x9a\xf0\xc2\xbc\\\x9a\x0b\xae.\xe6m\xf7D\x92\xa5A\x01\xe0\xd2\x83\x91\xd6\xbeJ\xd5\xc5\x8c\x10\xf3$\x91\x11\xc4e\x92P^0%\xc9\x19\xcf\x15E\xc2sE\x11.\xc8\x02\xbb1OH\x19E3f\xe6\x87\x83\x9d\xcexR\x99\xa9\xab@#\xf1@c}\x1f\x8d\xb9\x8d\x05\xb7\x85K\x91\xe2\xdak\x04\xd2\x94\xb3\xa42\xfd\xa8\xe4\x9d\x92\xcd\x07\x94y\xf2\xcb2\x97\xf4\x19\x14\x93\xaaP\xbe\xe9\x9c\xb4'\xc8,w\x85\x03F\x96Q~\x14\n\xa8\x83\xc8q\x00\x96+rE\x9a\xc9\x8brA\x00\x99'\xda\xacp\xbdJ \x9d\xd1L\xb1ZYq\xd5|\xe9:B\x1d$/e\x1dt\xc3i\x95T\\;\x9c\xd2\x0d\xdf\x14\xd2\x01H\x8d\x0b\x9a\x02;\x87\xd8\xc8S\x00\xec\xa8\x00r)\x0dtSq=z)\xa1\xaaz\x9a\xeb\xea3\xc24i9{$\xb5\xceu\xca@\xc2\xe6\xf6\x83y\xca\x80q\xc4\xb5\x96Y\x99\xb9\xb0\xd3ffK\xd1\x0eN\x97\xa7\x16\x985\x9b9\xd5}\xc9\x88\x1e\xca\x82\xe6\xb2/d\xc3\xe5\x05\xe8\x8c\\\x0e \xddTe\xa5\x06P\xbe+GP\xdd\x92\xddd\x9b,W\xdd4\xf7@\x14\xf2\x00SzR\x9e!)\x07 *\xb9\x96\x17\xf0\xe9\x81zI\xe7nk\xe6\x89yF\\\x1e\xe4r\x82IY\x1c9NR\xca6\x94fz\xa0\x18\xdc\xcb@\x8f\xcf\x89{\x82\x9eQ\xd7\x9a\x97\x10\xc3QC3\xa4\x893O\xae3\xe6\xf6\x13\x0c\x13h3\xd9\xbaB F\x98/2?\xb6\xca>\x95\x90'\xb3\xd9Qf%\xb3J\x0bY\xa4TqZZ\x94\x8a-8U\\\xc1\xabJ\x89S\xc5%\xa3\xc9\xcaXA\x13\x92\x82\x1dL\xe5\x8c\x97\xeaj^\xaf'\xc7Y\xe1v\x00\x82\x9dJ\x06|)\xb7S.\xdd?\xca\x03\xb3\xe2\x89dV\x06I\xd9\xb1\x88P\xf2\xa4-\xe3\xf1Q%d\xc9\xdad\x9ele\xc8%%D\xb2\xaf4\x9b\x84\xe8\xa8}N\xc1\x13\x89eH \x01K\x9e\xe6\n\xaa\x94\xc1\xa1\xd4(\x10\x1c\x16\xd2\xc3 n\xb4)g7S\x80\\\x0e\x91\xa3\x9c\xfb\xdc\x04\xa5$/\xecUi\xaf\xb8\xbd2\x81))\xd2\x85\x88\xb2\xf0D\xbf\xa8>\xc1F\xb0\xa5\xf0\xaa\xf0\xd4A\xe9\xaa\x03h;\xa9T\xa7Mh\x08}>\x0e\xbb\xd2\xef\xb2\xde\x82,\x0cv\xe9\xc9\x7f\x89BY\x1b\x1d\xdaF\x02Q\xb6I\xf3\x84\x14T\xf9\x08s\x9a\x9e\x92(\xa9\xd3n=\x7ft\xd6\x81\xa0\xdeR\xb3&=\xffb\x89]JO\x8d\x94\xe1\xf8\x16\xf7\x80*7\xddt!!\x8b\xf8O\xe9\xa9\x96R\n\xbc\xd4\x06\xa0\xf0\x8c\x96\xa7Rx\xd2,\xd7\xc3C\x02\xbcRz\x9a\xa2D\xd0\x14\x98 \xe8\xb2\xf5\xc6\x8a\\\xc7\xcf\x04L\x91jf\xb9\xd4LOC\x94\x85F\xa3\xcb\x8c)\xc8\x99S\x858s\xc7\x03'\x05O\xf2MQH3U\x19\x8dX\xa6\xf6\x8a,h\xbd\xd2_x(\x0d\xf6]pU[\xcerU\x9d\xbc\x00\xf8\x86C\xfc\x06\xa3\x03\nJ)\xe5R\xd7\x0cW%\x05X.K\x08\xc4?\xea*\xb3W\xb9\xba\x9a\xb7\xc6S\x18%7}O3\xc5\x00\x94\x15\xaaYr\xfc\x98\xfe\xe5*,\xd7\x0d\x90Q\xbc\xea\xba\xba*\x8c^,\xed\xcaQ\xc9\x174d\xe9\xa9\x81\xb2r\x06\xdf\x9a!P\x07T\xc6s\xdet(] m\xb9;\x0b\x95\xb1=\x10h\x06g\xc1\xd3\x0f\x0f\xdb0\x96kq.\xa4z\x07\x8f\xaa\xa2rl@\xbfU\xb2S\xa5\xbd\xc7\xd5\xd5\xbc \x9e\xf8U\x99\xd3)XlM ?vJ\xc96+T5z\xc5?\xd5\x18\x02%iXyV\x9e\xc9\xafP.\x81Y1\x9a\xd7\xf6Qux\x02Z\x19\xc3_IO\x16\xd6\xf5\x19\x92O06Rf)Yb\xd6\xca\x93\xcf\xaath\xda5\x08\xe9\xcc*\x9a\x94\x18\xadO\x01\xd1\xe1y\xa0\x9d\x9e\xd0V\x8e\xa4Plr)\x95\x8c-\xf86d\x96\xf0C(\x8a\x1d\x89q\x15x\xfeI\x8e\x04\x99\xe5\x08\x11\x84q\x19NV\x13\xc2K\x06\xf4\x017\x0b\xd0\xf2\xe5\x84dgkz\xb6\xb4\x9cOfy>$w\x86\x13lTEKw\\\xe5PH\xd6a\xc5\xe2\xb0\xfa\x02C\x8a\xd0\x14Y\xa7\xd3%Z.\x0e\xa5/9\xc4\x95\x1cG\x1d\x03\\\x089>\x8c'\x854\xac\x01b\xbe\xc0\x10\x1b2r\xdd\xd9\\*\xc54\xb3\xdd\x06%\xca+\xa0\x9ao\xa8T!\xac\xd2\xa1\x00\x05`2\x04N\x90Y>\x11q\xc5\xc8ilfr[hfuR\xa6\xb3\x84\x02d}9\xa2\xae\x95\"\xa0\xfa!\x19\xf1H_\xea\xb7\x9c\x05\x9a\xe8\xe7\x15\x11J\\_\xa84y\x8d\xa5\xf1I\x98\xf1I\x80f*\xc3\xd9li\x01\x82\xf8YG\x84R\x8d\xdf\x83\xbb\xab\x17H`AF\x8b\x18\xac\xc8\x80\xb7\x9b\xe5\xc69\xcd\x16sW\xfdd$\x02IE\x96\xbe\xf5\xb0mE\x0e\xf92)6YH\xc9\xf8\x89I\x84f\x9f\x00\xec--\xfe\x10?K\x89\xd0\xdca?\xb5PZ\xf1#T\x06\xf51FA\xb8\xd5-U\x0d\x05\xc9\xe7:\xd8\xa4Y\xb5\xc4\x86~\x16\x13\xa1\xe7\xbb\x89F\xaf\x07\xa8\xfa2I\xc3\xd6,O\x8de\xc8\x89\xbdR\xc0\\@8\xfd\xa4%By\xc8m\x06\x9d\xc9(\x07\xf2\x8a\x1fsb.(D\xb8 \xcd\xd9\"_\xfa\x82I\xab\x90\xe2\xb3\xb1\xb2\xc5=\xa5\xe8/\xf1\xa2/\x95,(\x95G\xf3\x9b\xe7I\xb1)\xf3\x00)?\xc5\x880\x12\x1d\x04\xe5\xd3TD\x125+\x0b4/\x17\xd66\x89\x9ffD\x18\x0d\x91\xb7>\xa4WO*\xff?\xa6>\xeb\xe1\x0eT3\xcb\x91e!F\x87jJJ\x1d\xbcWQ\x07\x85\x0b\xd4%\xf7Kn\x87{\x81\x8a|\x81eYh6\x15-)\xb94\xaf\x8cn)R{E\x16\xd2[\x88\x9f\x8eDX\xee8\xa9\xb0\xfc\x9a\xa6\x04\x16:\x16\xcc\xb7\x9flDX\xe1P\xd0\x99\xd3\xaa\x85\x92\xcdB}\xf4\xa5\x8d\x95\xa1>*\x08Q\xfa\x12\xd4\xa4;Fl\xb5\x9f\x14DXP\xd8\nHs(+W\xea\x16'\xdd\x97,\x16\x94,h')\\<\xde\x99\x9eb \xe8 ~~\x0f\xc9\xd2\x05\x9eR\xcb\n \xb7R\x11\x9c\xc5H~\xce\x0f\xc9\xc8)\xea\x9aa\x1d\xea\xd6W0\xf5$tq\xf9\x82\xf8\x89@$\xa3!%\xea\x04-yi\x80\xa7b\xd1\xaf\xf3\xb3\x83H\xc6\x9cy\xa5&)5\xa1\x85\xd5\x166\xd3\x94\xc2\x8a\xb7\xd4\xa3\x85\xb1\xf4e\xba\xa4G\xfd\xec!\x92\xb9n)\xd3i\xd8\xdc\xa8\xfd\xc2\x06 \xe5\x12\xfa@\xfc<\"\x92!\x9f\x14l \x98Z\x8b\x9a\xd1\x92\x1a\x19.M\xe6\n-\x970ME/\x0e\x9d\x92\xcc\x18H\x06\x06\x05v\xe3@\xd6*\xd9p\x96%\x9c\xea\x0bBR}\x058\xd1&/sh\x84\xbeWf\xf6J66c$\xa1\xa5Z~I\xa8l\xb9\xba\xe0\xe6\xa2\xd2\x17\x00\xfa\xc3\xdb\x80p\xc3-j.\x98}\x96\x99[\xb9\xb90\xb4\xb9\xa1\xcd\x15\xed\xc0(\xf8\xfa\x04R\x96(_\xdc\x1e\xe1\xa74\x11\x9c\xd3D\xabTg\xc7S\x03Z'\xb4\xa2\x0b\xf05\xf1\xd3\x9aHV\x05]XP\xca\x8a>5\xbcS-\x06\xeb~\xaa\x13\xc9\xd39;\x1a\xdf#\xa1\x95\x8d\xb3\xab|\xc9\xcb\xf1\x13\x9dHN\\\xdd\x0f\x05U_\x0b\xdb\xffr!u\x9e\xf8\xa9K$\xa7\x88\xd8q\xe0\xb8%\xb6\x94@A\xfc\x14%\x92\xb3SCh\xc4\x8f\xa5K\xe91\xc4\xcfM\"\x90DT\x1aH\x92\xa5$)6D\xd2LM*\x12\x83|\xc7J^d\xf6\xd6R\xde;\xf1\x93\x92\x88\xcaJRH\nD\xec:\xcf#a\xa9\x19R\x96\x96\x8b\xa3\xe0[V\xc8\x18\x92M\x02\x08!a)\xd7\xb0\x02K+u\x15 \xe2\x0b\x03d \xb9mb\xb6M\xa5\xb9\"\xe9\xe24+Q\x81\xed\x81\x0fb\x80C!`\x9b\xe0\xdb\xb7\x97p\xd2U\xf2\x8f\xcb\xf7z\xe7\xa0T?\xaa\xd6\xcb\xaf\xfe\xe1\x1f\x80\xf5\x8fK\x9e\xa9\xdbRk}\xf5\x8f\x7f\xfe\xf3\x9f\xb2\xb2\xda\xec\xf9?\x92\xa9\xb2#\x95K\xc6T!\xa6\x0b\xb3B\xff\x96\xfa\xb7R\xbf\x85~\xaf\xd0\xf7Me<\xd7\xbf\xba\\E\xf4/\x856\xf8\x8dD\x8d\xfa\x02\xb5\xaat[\x95\xc7K\x0f\x07\xb7(%\x95S\x96\xa4T\x8fC\xca\xe2T\x0e\xf7\x87\x16\xd1\xa19\xa2SF\x8bO\xcd\x83[8gnY=j4\xd5\xbf\xf1\xfeL\xcd\x83\xb8\xad\x0f\xb7\x88\x1e\x9d\xd1;Y^\x8c{1\xec\xd4A \x0e%\xb7W\xaaEK\x94\xcc)\x00\xc7\xc2\xdc\xed\x16\xd5\xddb\\\xfd\x96%f\x02\x92\xda\x0b\xfd\x06!\x9aod\x18\xa5/4\x11\x19\xb9\xe8\x0bb.\xcc\xcc\xa9\n\x16[y\xdftW\xdb\x01\x89F\xc9\x9dv\x96\xd1\xe2m{]\xe3yO\xddN*\x0e^.,\x1e\x9a\x1d*\xcd\x88;S$:\xc0m{;\xf4\x87=\x9a\x1e\x97\xf1\xe9\x89\xca\xa1\xf48\xe3\x15\x97\xffiT\xf2\x0c\x89\xc7f\xba\xf3\xc9\x14\xa9K&*\xf7\xdd\x0ew\xc6\xad\x18{7KD\xd4 \x15\x8e\xd0T\xc8&gfz\xb2(\x95~\xbaCJ\x16\x19\xd4\x98_pm\x0e\x94@\\\x9b\"_'\x8f \x9d%0=a\x12\xfcl\x12\xdb\xba\xdd\x8a\xa7f\xda\xf7}\xbb\xed\x9bn\xbc\x19\xfa\xfb\xf1\xaeF\x8c\xc2\x10\xbd\x98\x14Jr\xff\xb7o\xe0|\xae\x19\x15\xd4\xb1\x18\xc7K*\xd8s#\xc8\x88F\xf5\xf9\xb6\xee\xbe\xc0\xee0b\x8c\x98\xa0okO\x11\xb2\xd2W!K%o\xee\xb1xf>#'\x97\xd9\x89\xf2[\xe7\x00<9~m\xd3!\xee\xac\xce\x94\x0d\xf8\xc4\x136\xb7)b\xeb(?\xe0ag.3\x17\xd1\x99\x87/@a\x97\xc1\xad\xb6\xd2\xb6\xb8\x8aI\x84\xe4@\x97D\x89dI\x8b\xa3q\"3\xadq3\xfd\x7f\xa9\xff\xc7:=\xf1jN.+\xa3\xfb\x8dY1\xaeGj\xfc\xd54\xca\x9c\xea4,\xd4S\x8a\x1c\x86h\\\xb1\x85C\xc1\xf08!{r\xb2r8Rl\x0fG\x14\xb9D\x8a\x8f \x82\xeb\xc7\x91\x0d\x8d\n\x97\xe6Q,\x9b\x1f\xc9\xeb\x1e\x9f7;\xc9\xe9R\xef\xccm8\x1a\x9a\x13D;8\xa2\xdam\x17b\xde\xf8\xa4\xa8\xd3\x8d\xd0\xb0\x94\xc5\xf9R\xd3\x0f\xea\xccil\x92\xb8\xeb\x8cZ\x07!\xaa\x81\xec1\xd8\xd8\x1drT\xd8\xacd\x18\x17\xd8\x0e\xa2\xc6\xc3Q\"e\x16\x9deuN\x14\xd2\x84\xeeX\xa8\xear-_\xb9q\xd5\xa9 \x07\xa8\xf1}2\xd3\xb2<\xaa:TuB\x9d\x9c\xed\xb4\xd8\xaf3^~\xe6\x02\x97\x88@\x16c\x1f\xf8\xee\x97[8C\x9e\x80\xeeO\xa9\x1d7\x13\x16\x97&L\x8e\xf9\x07p \x1a\xe6\xcblf\xcb\x8e\xda\xab4n\x98\xd1j\xa6n3\x94\xa9\x19\xdc\xd4\xde1\x8e\xe51\xf2\x9e\x07\xdc\xa6\x14\xb3\x81\x96\xd1v\xc6\xf1#Y\x8c3\x8f\xe7\xba\x0dp\xc6\x1f\xd6\x7f\xc8\xc0Da\x99#\x9d\xa9\x9f\xea6@\x8c`o\xe3\x8cF\xf5\xc3l\x90)\x1ad\x12\x8d?,\x95\x839X-@\x0e)\x03\x16cGK\x0e>\x95\x85\xc7 q\xa4\x9d@o\x96N\xd1}\xd4g:\x06\xdcoJ\x11\xdf\xa61c;\xc7\x91\xdc>\x1ad\xcb\xb0\x12\xd3Lf\xa0\xa1L\xff?\xe3_\xc3\xb7ZV\xac\xda\xd3t\xb8f\xc4h\xa8\x02M\xab\xcd!\xae\xf7\xf6\x9cOG\x88\n\x84\x07\xc5\x943\x10\xf3\xa4\x9b\x07\xa4\xdb\xa0\x05F\xaaM\x04w\x96\xe7\x02\x95\x80\xf3\xec\xe3V\xc5\xb9ZW\x91\x08u\x96\xa2\x98\xe0#\xda\xb3\xef\xa7\xfd\xd0`\x8b\xca]Z<>\x0b\xfa\xacK\xa7%8\x14\xb0(M\x14\xa6\xd1t$\xbb\"Z\x19\xd2\x1a\xa7H\x0cb\x8b%\xd2U\xa2zDtk\x82\x18Rr\x99[E\x17g\x97\xa9n\xb0\x17\x8c\x00u\x8e\xc3\xf8%*\xe6lU\x97P\x89\xf07\xdd:\x8b\x9b\xa6\xa7\xe9\xc1\xe1\x88N\xc30*\x175p\x87\x01\xbb\x03H~L[f\x8b\x05F\xe8\xf5\x00\xe7\xe676W\xa2\xf6\xccx\x95\xce8.9\xa1\xd8E\xb7\xdb\xf7\x8d\x87\xed!D)\xeaF\xcd\\\x89l\xd9})bb\x04\x84\xfcaGx\xee\xa9\xc2sh\x90 \xa76\x8fR\xf8\xed\xd0<`p\x92 p2\xde\xf8a\xc0\x80\x0fseFOy4\x96\x16\xe3\xd4 \x13\x81\xb4\x99q7\x8c Q\x0e\x14\x0f~|\xc8\xb0\xd7`\xa47\x8f\xf6i\x06\xce#\x83G\x8cS\x13\xc5\x17\xc4\xd3\xb6= 2\x95\xcbZv\x89,\xe64\x88'\xb1=x\xc8\x0djJ|0\x9e\x1a\x0c\xfb\x90\n\xc5\nf\xf1-\xa6\x12\xc4\x93\x8f\xab\x13\x14\x87\xc6\xc7Q\x7fD\xa01\xe7\xf9\xfbk\x05\x04)\xd8(\xad\x1bO_\xb2\xc2g\xb3\xa5\x82B`\x01\xcfg\x02nW\x19\x96IL\xfd\x07\x0fE\xe4\xd9\xb9\x8a\xe2FL\x9e\xb2B:\xda:\xfc\x1c\xf1\xa6\xbc\x88\xf6\xab\xc1\x81 \xc2j\xa3\xae\xe8\xcd\xa1\xc5\xd2\x8e\xa0<\x83^G\x81\x98\x9b\xc3t@R\x8f\xa2\xd0h\xed\xb75\xe6\xe7\xecl~\x9e-X\xa1\xa2\xfeb\xa9\x9eY\x13&R\xcd\xedT\x0f.5\xf2\xe7\xb9\xa0\xb9~\xcfLB\x14\xd8\x84\xe5\xd2\xebg\xac-\n4\x14\xa7:$paB\x91\xde\x8eV\xee\xad\xa7 \x1c+\n\x8a\xdf\x8a `\xe9\xebg\xfd=zW\xd7U(\n\x8f\xa2\xd2\xb7bj\xe1|\xe4\x00\xc8\x8d\xd1\xc0\x98\xfe\xb7T\x8e_\x85\x17^\x930\xd4\x1c\x93\xb5[1u\xfdN\xf8\xd6\x94V\x98\xcdb\xbc}+\xa6\xf1\x19#D\x14-\x15\x91<\xa6\xf7o\x85\x8f\x94#\x882.\xd4Px\x14\x0fXDp\xe51-y+\xd0(\x86&\x98\xa5\xb891\xe7\xfc\xb6y\xf0\xb4\x9e\xeb\xd7\xdb\xc8\x12KT\xe6-NU\xd6\x97\xb5\x10\x821\xa0\xd4\xde\xf9\xa8u}\x0b3\xd8\x16\x18'\xdc\x04\x8eQ\x04\xc2\xfa\x00\xd1\xaeco\xcce\x9f(xy\xdb?`\xd7\x011\x1e\x89\xaa\x83\xa1\xf6\x9cQ\x94\xce\x82W(\xcf^\x19\x07\xaa\xf3\xd5O\x9a\"_ *\xe6\xf0\xf9\x0d\xdc0\x1eh\x18\xafP\xc3\xa2\xd4\xc4\xad\xd7\x9a\xf4\xe3Z\xe3\xad\xe4V\xa7\xc7)N\xceo\x8e\xebeE\x97\x84\xe7\x99\x18(\xe6\xd1L7\xb3FQ\xc5.I^?\xc3O\xc0D\xa0E\xf7\x13\x84\xf6H\x8deH\xb5\x7f\x0e\xdexWw\xbb\x16OB\x96\xcd\x88/\x16\x1e\xef\xb0\x8c\xa0v\xd9\xb5\xec\xa8\xa6\x0cX.dx\x8f\xca\xc184g\n\xfe\x1d|\xd3\x01\x13N\xe7\x84\xa3\xa5\x9b\xadtz=\x13\x84\xf2kNP\xe9{\x8c\xcd\x97\xf9\xb9\xb6\x1d>\xe9\xff\xd5\xd5\xd5m3\xdd\x1d\xae\xe1+\xb6\n\xef\xbfj\xae\xb7_\xde\xf6W\xd7m\x7f}E\xb7\x9c\xa75\xa5\xa2\xba\xa9\xb6\xdb2\xbf)\xe8uN\xcbm]eu]\xe6[AHZ\xa4)\xb9\x82O\xdf\xca\xa2W\xdb~\x10Wj\x01\xee\xea\x81\\\xfdv\x10\xc3\xb3\xfa2\xee\xffh\xf3\x0c\xf5\x14\xc5\xd0q \xa4\xb9\xc6\x86\x96\x9f\xbf\x1e\xe29N|n\x99\xac\xcfg,\x93Y8\xd2\xf7\xcd\xda{\xae5E\xee\xfb\x80\xc6\x156\xa2\x113\xbd\xcdN\xc687(=\x05u&V\x16\x02$dp\x90\x13\xa9\xeb\xb7>iL4M\xb0\x85\x06\x07E\xc1Q\xb9j\x9c\xef\xb7\xf9\xeb\x7f\x84V\x1fA\xc6\x8b~ \x9a\xdah\xc0\xd4\xc07i\x10_\xe0t\x98hZ\xd9\\\xf0P\xc8L\xedJ\x92\xf5\x15\"\x8e\x85\xd1\x1d\xe78\x16Q\xafR\xb6j\xb8\xc7j\x0f\xe7*\x9c\x95\xa7\xd3t\xfb\x83\x07X\xb9\xca\x93\xc7\xcb\x8e\x93\xa8\xf1\xa4\xa0\x15\xdd\xa8_\xdb\x1c?3\x87x\x9c \x84\x15g\xf8.\x91\xc2I\xbb$G\x14\xa22?\x8d\xa2\xbd\xc1\xa6\xdaU\x8dQ\xc0\xff\x83\x18:\x81\x17\xb4\xcb\xealu\xf3A\x8c\xa2\xf0B\x85EjC\x8d\xf3{\x91*\xb3\xe6LS\xcd\xcd\xc2\xa8\xfe-\xf5/\xd7\x1a%\xa6I\x16TJ\xaca\x1e$\x8f\xf8\x177\xecd\x83N\xb6C\x1a\xa6\xf8\xb8\x0fS\xb3=\xb4\xb5\x97\x05Cf\xd6d\x91\x80\xe7\x18\xa6(\x054Z\xb7\x07=\"{\x18/9\xdb=S\xcd5Hr\"\x87p\xdf\x8a\x1a\xab@\xb4R\xafG\xdaP\xd2\xbf(Ee\x89p\xdf\x8cp\x03\xc9\x13\xdaga\x92\x06c\xaan\x06\x19\x14\xbe5N\x0c:\xa3\xe7\xdc\x18@}Sw!G\x1e\xe0\x91\xdb\x97\x9cv\x9d\x8clC\xf6H\xf3\xb0ID\xb9l\xd1\xe5G\x95F\x8c\xed\xa9[8\x1a{\xcb\xc23\x01\xc7\xb9I1u\x05[\x1d\x1e\x9b\xe9\xee\xa6i\xb1 \xa6\xbe F(L\xcf\xc8\xafD\xa0P\xcc\x11\x9ceh\x11\x14\xdc\x14(+o\x89\xc6 \x1e\x9a\xfe\xe0\xf1nq\xb6\x0d\xdd\xab\xaf\x93;\x83\x87\x93%5;\xc4I\xf4\xfb\x1e7\x00%\xab\x846O\x19\xd11\xcb\xcb$\xba\xf5u\xaf?\xf1\xec\xa7\x8f \xf0\xea#wfAn\x0f\xa6\xe7RS$\xcc\xf2B\xcc\xa5\x0b% !<\xcf:\xb8\xb1y\xfc\xed 0\xfe\xe32\x91qd4\xa1\xb3V\x18\x9c\xc0\xdb\x18\n\xdd)\xbb\xb7\"\x18e\x1c\x0d\xca\xb9{-\x92\xd9\xae\xee`\x82\xb3\xb5\x97\xa9\x99|\xbb\x0f\xd9\xa6\x0fy)@\xaeQ\x8b1\x91\xa1\xe3q\x93e\x81\xa0)\x9c\x03\x96\x9f\xb8Hj\xa7\x05G\x7fg\xa2\x9bf\x07\x8co\xa8l\x1c\x12^j\xc1\xbe\xa4\x85\x9aN\xad\xc2\x00\x9baS\x8b\x94\xedy\x1e\xe6o\x87\x1e\xe9-\x8c\xd9\xc5\xea\x1f\xea\x0eg*\xa1\x14\xb0hn\xcc |0\x9f\xa0T\xe0\xa8K9\x88m\x8fS\xd5\x91o\xfe\xc9\xf0\x8f\x1e}\x0c\x03-\xb6!\x90\x9a\x8e\x14%\x8b\xf7\xff\xd6\xc7\xddPB\xaf\xd9\xeak\xf7\xfd#\xf1^$\xbaoko\xa9\x08\xef_\x8e\xf1\xc1 ~;\xf8H(;\xd3p\x0eb\xdc{\x9b~\x90[\x14E\x01\xd4\x86\x1d\xact\xd1Bi\x11/=\x1d\xbc\xe4\xbbt\xd1\x9d\xb2\xb2\xac\x7f\xf5\xcc\xdb|\xa8\xa5\x95h\xb3F\xa69\xc9\xa8\x1d?s\xd8\x02\x91^\xbe\xd4g\x03\x93\x9a\x9e\xe5PMo\x11\xb0\xf4\x80\x13\x13\xf1\x86\xd1\xbed\x86\xe3\x84\xf3\xbb\x96\x1dN\xe3\xdc\xd8\x0d\xea&\xcaA\x01\xa2 \xda\x8fk\x85&_\xd5FC\xc6I2^\xb4\x91\x02c$\xcd4\x1a\xb7\xd8\x18G\xe3\xe8\xear\xd6X\x1a\x8fG\x97\xf3\x8fPYD\xb1\xbd\xac\x919\xa0\x95\x9c\xc8\xd7\x9a\xef\xa6)\xe7\xa9\x87a[{\x9a\xec\xe8\x89i9\x07\xc3\x97\xca\xf7\x07og\x1cZp\x8f.Sxy\x12\x94\xb3\xf3U\x0b\xdeg\x89P\x90H\xb1q{'<\x80\x10\xed\x998\x0b\xfd\x18\x85\xd7c\x94\xa6\x14M\x13\x18\xc5\x80\xf3\x94\xca\xf3\xb5\xa9,\xdbx\x03\x86C\xd9x\xcdh\x82Q\x1a-\xf50\x8e\xa2B\x9c\xb9D\xf1\xae\x1epz\x12Z\xf1\x8d\xc2ics\xeb\xedSE\x0bd\x9e\xef\x15!\xd2t\xb7\xf3\x85\xe7\xf4Shy\xe7 1\x94\xa8\x15\xcf\x90\x1d\x9b\xee\xd6;\x94\xc6\x1d\xde\x99cm\xfdZ\xab\x1c\xb0\xab\xbaTM\xebg\xf0P|v\x92\x9d\xb6\xe8\xd0\xef\xc5\xb6\xc1k\xb9\xd4\xb7\xc9G\xbbb\xb7\x80\x9d\xd2\x9f\xd6I\x8e\x19uU7\x8ac\xf2@TUa\xda\xd1\x08\x7f\xdc{\xbef>\xf35O\xc4\xa7\xa1\x9dT\x199\xd7c\x1d\xa7\xfa\x03\x96\x02\x94\"o\xed\x98\xb1[\xd6_\x88\x8e\xd3T\x0f\x1eR\x86<\x10c\xdcc\x8ay\x9c\xea\xc9\x83\xceQ\xaa\x98\x17=D\xa8\xe0\xad\xd3\xa8{\xc7\xb0+\xba\xa45N=V\x15\x94\x93\xf3\xf5\xde448*@\x89k\xd1z\x0f\xd7\xe3\xde\xf3_\xf1\xfe\xc08\xbb\x1e\xf6b\xb8i\x0f\x1e\xfc\x84\xd0\x8bEG\xc5wL\xcerHN6\xc4_Ha\xe7:\xb5\xe3av\x12\x11:\x91\xe5D4\x1f\xa3\xfa\xdccu\x82VY\x8b\xcc\x12\xc7\x91Y\x8d.\xa8\x8c\xcf\xddt\xe7\xe5\xf4\xa3\x919k![Si\xb6jy\xfc\xfaY\xfdz\x9c\x83\x8eS\x88\xd2\x9bi\x15t\xaeVt\x83\xc2T\xb7\xdeD\xe3\x0d\xef\xd1\xf3\xe8d\xe1\xe7A\x8c\x07\x0f\xef\xc4\n1N\xa2\xc1Kvh\xf5\xd3\xc63&.\xf1#\xe5\x98\x86\xba\x1b\xeb\xad\xb7\xbb\x03\x85.&\xda\x8d\x9f\xcf4\x0d\xcd\xbe\xf54\x0fJ\xa6.c*s\x1a\x0eXC\xa0t\xe9h\xdc5\x0d\x07\x0f\x95)\xcfO\x1d\xf6\xcf\xa3\xc2\x9a\xd6\xb8\x03\xd1,\xd5\xe9y\x8f\x9a\x8e\x0ea4\xf62\xd6\x06u\x98\x03\xeaA\x8e\x0fn\xb3\xf0)\xc6Q\xa3\xf4\x82\x87C\x148&\x8d\xa9\x91C7?\x0f\xa4@\xa1aLS\x1c:o;>\x1a\xd9h\xfa\xd1\xa1\xf3\x93\xd9\x08\x8a^\x96\xce\x85\x0d\x83@\x8b\x95\xcc\x17\x19\xd1\xa931!>t\x13\xdeG\x8a\xd4_\x14`\xe8zo\x13\x0c\xf2\xf0\xa3>\xcfa\xbf\xc5\xa7`\xa0\xd9\x88\xba~P\xb4\xe9n\x97OfE)\x9dQ\xbc\xe0\xb0\xbf\x1dp*'-\xb0\xbcah?JF\xec\xcc\x81F\xa3/\xc3\xe7gxz\xeb\x81(\x1bG5\xc5\xe2\xfc\xfa\xd7\x84-\x06\xa6\xd3\x1c\x13\x05\xd5\x0fc\x8d\xdd\xf64\x9f+\xc9\xc5\xb2b\xc0+\xc6HIDW\x02dY\xf7 \xaa\xa3\xf7\x0c+\xaaM\xdf\x8d!QE\xcb\x85ElBg\x87\xbf\xa0\x94\x02\xeaA\x91\xfe\xe9)\x8e\x01\xb6\x8b`\xcbK^\x16\xbe\x08,1}\xfc:R\xacC\xf5\xd4\x0f_\xce\xf6\x80\xe2\x13\x0b\xcfZD\xb2\xd4\x82\xc7\xa9!\xaf>z\x9c\x9a\xa5\x13\xd0\xca\xf8\x08\xa7\x98\xfe\xb0T\xfa\xc34N5\xa8\xf9\xd01G\xf8\xa0\xb6\x98\xf98\x04:1\x85(N'8E\xc1L\x9c\x97N\xb9DL\x0cc\xe3\x9d$WbCx\x16z\xf0\xe0\xe9n\x8a\xb7\xc2-\xad\xc7F\xa8\x0d\xf3\x93f\xf0aP1\x02\x8f\xdeFO>?\xf1b\xb1$NZC\xc7)E}\xad\xc7\xd9\x869\x82\xb3\xb8bZ\xf0\xf1NLw^\xe6\x13ZL\x8dzI\x8fw\xcd$\xe6\xc9\xf8\xc5\xcch\x9f8\xb8\xce\x9cI\x859\x1d\xcdd\xf40*S\x1e\x87X(j3\xabO1\xb5\xfetu]\xe3\x8d \x14e\xeaU\xb1\xb1x\xba\x92\xde\xcb}\xdda\x93\x84\x00\xd4sL_\x88\xfc\xaf\xc9\xe5\xbe\xd9\x8b\xb6\xe9\xc4\xe5Wo\x7f\x95\xef\xf4\xf0x\x84\xe7\xff\xf1\xbb\xdf]\\\\\\<\xd4\xc3\xc5\xb6\xef\xa6\xba\xe9\xc4p\xf1?/v\xfd\xf6p/\xbais+\xa6\xefZ!/_<\xbf\xdc\xfd\xfe\x8bA\xec\xfa\xed\x17\x7f\xf8\x0f(\xf5\xb3\xfcgs\xf7\xbc\x93\x96\xec\xf7\xef\xdf\xc3\xc3\xf7\x80\xed%Gr\x7f\xf8\x0f]\xc9\x1f\xafT\xdb\xfe\xf4\xbb?^]\xf7\xbb\xe7?\xfd\xeew\x7f\xbc\xba\x9b\xee\xdb?\xfd\xbf\x00\x00\x00\xff\xffPK\x07\x08\x92r\xe6\xddX\x13\x06\x00\x84D+\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00 \x00openapi/openapi.yamlUT\x05\x00\x01\x80Cm8\xec\xbd\xef\x92\x1b\xb7\x92'\xfa\xfdL\x9c\xa0\xc0*\x90\xc4v\x11\xa0\x0b\xa8nq|N\xc4}\x8d\xfbz\xf7In \x81\xfa\xcb\xaa\x02\xaa\x9b\xa4Z\xad\xcc\x98\x89#7\xabP@\"\x91H\xe4\xef\x07@m\xb9d[\xf1\x0c~\x9c}?\xfb\xfe/B.\xd5\xb3\xbf\x00\x18a2\xfe\x0c\xde\xed6\xdb\xb5\x92;x\x0c\xab\xb7\x17/\xe1\x17f\xf85\xdbA\xaa\x12\xfd\x17\x80\x94\xeb$\x17[#\x94|\x06/\xe0\xed\xebw\xefAH\xc3\xf3%K8,U\x0e\xda0\xc3\xe1\x8f\x82\xe7\x82\xeb3\xc8\xf8\x8a%;09\x93\x9a%\xf6=[\xcc\x15\xcf5\x16\xf1\x14\xeb\xb0ef\xadm%\x9eh\xff\xf9'|\xab\x92\xb5~r\xf5t\xc1\x0d{\xfa$)\xf2\x9cK3\xc7?\xdb'\x01V\xdc\xb8\x7f\x00\xe8b\xb3a\xf9\xee\x19\xbct\x8f\xbd\xb6O\xc16WW\"\xe5\xe0\xdf\x05|\x17\xd4\x12\xf4\x96'b)x\n\"\xe5\xd2\xd8\x7f\xe6\xbe$\xb5\xe59\xb3\xb5\x83%\xcb4o\xfc\xd2g\xc8=\x955l\xd5\xfa\xfe\xff\xed?0\xe8C\xdd\x7f\x0e;O\xf4s\xe7r\xa9t\xe5:\xf3BJ!W\xceu\xe2O\xfe\xa5\x96\x9f|\xdd\xfd\xf5\x9ey\xc9\xa6\xe2\xbar\x17\xc6Lms\x07\xb0\xf7V\xbf\xd4%\x83\xd0\xc0\xa0\x90\xe2\x8f\x82C\xce\x97<\xe72\xe1`\x14\x98\xb5\xd0vH\x18\x91\x14\x19\xcb\xc1\x88\x0d\xcfg\x83_\xd0\x86\xe5fn\x1f:@e\xcb\xc1\x992\xc3\x1f\xdb2c\x1b\xf6o\x8fG\x9elV\xd2\xb6\xdb\xac9\xb6\n\x98\x81\xeb\xb5H\xd6\xd5_rX\x8a\\\x1b\xe0W\xdc6<\xb9\xd4\xb3\xbf\x8c\x16|\xbe\xec\x94-$\x16\xb6,L\x91\xf33\xfc\xb7\x8bS\xaeE\x96\x81T\x06\x16|%\xecdiD\x86?\xe3\xfb\xe3_\xb1\x85\x0f\xf7@Z\xb8\xa1{\x00\xfdO\xd1i\xf9\xd9\x96F\x85\x84\x057\xd7\x9cK\xdf\xec(%JPyj\x95\xafr\x9cIe\xcaSX\xf05\xbb\x12*\xb76\xb9\xe0\xb0\xe1\xe6\xac\xfe\xa6^\xab\"K\xc7\x8b]pX\xe5\x9c\x19\xdb\x95k\xe6\xfa%Y3!5T\x81\xca\"S\xc9\xa5\xd7\xefha\xaf\xca/o\nm\xfb\x10\xa4\x92\x8f\xff\x8b\xe7j\xb8_\"\x821'\x91\x9d\xd3\x1f\x98\xed\xcb\x94Nl\xd5\xb1\xec\xc9v\x80-\x8b\xcd\x82\xe7g\x80}\x03\xca\xacy\x0e\xd7*O\xf5\xd9\xb8\xc6\xd6\xea\x1a6L\xeeP\xbb\x1a\xd6L7\x86\xd9Ck\x17<}\x18\xd0\xfa{;\x94pD\xda\xe7\xe1Q\xab\xba\xcf\x9f~ck\x9c\xf2\xa5\x90<\x05\xa6\x03\x83\xa8*\xcbu\xfa\xf5Zi\xee\xfe]\x0e\xde=s\xa9f\xc2\xc6(\x8f\xec\xf0\xf9\x17\xe1\x18\x87\xaa\xec\x0bYp]\xfb(7\xc2\xd5\xb2e#\xd8\x9d\xe3\x8a\xc7\xf5\xe4\x15\xcbf\xd8\x9d\xe5\x7fY}?\x1a\xfa|\xc0\xb4\x06k\xfd]\xe5!\xfe\x0e\x7f[s\xd9\xb08tDgnv\x13\x1a47`\xd4\x0d?\xf3\x1c2\xa6G?\x0fJf;P\x92\xc7(\x08m\xdb\xfa>\x06+q\xc5es\x9aN\x98\x04\x95$E\x0e[\x9e;k\x9d\xfde\xbc\xb8\xdf~\x7f\xff\xfa\xbf\xa1\xae\x07\x1b\xb0a;H\xc5\x15\xcfW\x1c\xb4XI\xb1\x14 \x93&\xdb\xc12W\x1b\xab\xb5\xf1O\\\xb3,{\x9cT\xbe\xb31\xcd-\xf8\x8aI`f\x06\x7f\xeb<\xa3\x96\xfe\x11gL\xb6\n\x8b\xc0g\xfe\xed\xdf\x06\x9b0\x83w\xc5vkG\xf0H/=\xfd>`HUw=\x87\x7f\xadK\xac&\nX)\xaeA-\x97\x99\x90\x18-\x98\xe7O\xffz\x06L\xa6\x90(\xeb\xd4\x16,\xb9\xb4]-d\xa0%\xf8\xee\x8f\xdf\xbbw\xb7\xb9J\x8b\xc4\xben\xb5\xa3\xed\x8f6\xe0\xd8\x95A\xb3\xb8rf3\x83G\xe6\xf9\x8fO\xcf\xe0\xc7\x1f\xce\x80\x9bd\xf6\xcd\xf8G\xbe\xc5N\xb7\xdf)]\x9c\x8d9\xfc\xd8\xadz\xc8\x1a\xda\xa3\xa7\xdf\x9f\xc1\xd3\x7f\xfd{dyO\xc3\xe5\xfd\xeb\x19\xfc\xf0}ly?\x04\xcb\xfb\xe1\xfb3\xf8!\xba~?\x86\xcb\xfb\xd73\xf81\xba~\x7f\x0d\x96g\xbb\xf2\xc7\xb8\xfa}\xfb\xady\xfe\xe3\x7f\xff\xf6\xdbp\x99\xffz\x06\x7f\xfd\xfe\xef\x83E:\x03O\x94\x0d\x1d\xe5\xcaY:O\xc3\x93\xcbB\xa9\x8c3y\xa0\x19\xa3\xbf\x16n9\xe1\xbfd\xbd,3 d*\x12f\xb8\x86\xeb5\xc7\xb0\xc1:\xdfq\x95\x95A\xa3\xf5\xd86bp\xeed\xc7\xcd\xb4Yw\xcd\xc5jm\xc2\xaa\x89\x9ewC1\x97\xcf\xb6\xde`\xb6uU-C/g#\xfeo\xad\xe5I+(\x1bW\xa2\xef\x93\x19C},\x8a\xe5\xac\x84d>~\xe3j\x8eE;`\xc8:F\xab\x88\xa6\xfbW\xf9f\xfc+\x8f\xf8l5;\xb3\xaaK\xadJ\x1f\xcc\x1e\xd8)I*\x03,I\xf8\xd6\xf0\xf4\x9bP\xea\xf5\\\xc2\xd6*S$\xfc\x0c\x0cg\x1b;\xa5\x15\xcc\xaa`k\x83\xbc\xcdVd\x98\x02Wn\xb5/$\xcbw\xce\x95\xee\xb6h#\x0c\xd3B\xbb@\x96\x04= \x08c\xdd~\xa1y\x89:\xa2\xdb\xfb\x84\xdd\xf6B\xeef\xf0\xef\xea\x9a_\xf1\xfc\x0c\xf3K\x1f\xde\xbe\xd1~\xf1_\xb8$g \x8b`=#\x87\x8fkc\xb6\x1f\xcf\xdc\xff\xea\x8f\x88\x03I\xe5\x7f=s\xb3\x17\x93\xa0p\xc4`K57Pl\xed\xda}\xb7\x0d}\x83\xe7W\x0eo1\xb0a[\xedL\x02kj\xe7sg\xe9.<\xc1yW\x03\xd3\xb0T6\x00\xd0\xcf\x02}\xf1-\x9c/\xeb\x9a\xda\xae\xf4,\x88\xb4j\x0c\xa6)\xb4.6<\x0d\x00Q\xdf\xda\xa9\xe7\xdf\xdf\xbf\xbf\x80_^\xbf\x07%\xcba\xe1\xc6\xc3N\xf0\xcc\xce\xdb\xff\xd95\xd1\xf7\xbb-\xff\xfb\x7f\x06\xd2\x84~\xd5\x88\xd8\xa93\x08\xe7\xcbQ\xd5>W\x0cL\xbaye8\x0f\x06\xae\x9a\xdbm&\x12\xe6\x95\x95s\x17-\xb9\x00!a\x89\x1d\xe0J]\x16[;m\x16\x99\xd1\xb0`6\xe6r-\n\xd5\xf3\xc3\xdb7X\xa95\xbbB\x03\xda4\xac:uf\xcd\xca6\xd8\x7f_)\x91\x02\x93\xc3\xeb\x06'\xaeF8\x88s\xbeT9?+\x0b\xb1e3#\x16\"\xb3!\x98\xe4<\xd5\x1e\x0eF\x07\x94_\xf14P\xb6\x92\xd6\xc1\xc9\x15\xc7\x17q\x94\xcd\xe0\xd1\x07\xcdK\xce\xa2U\x8d5:\xeb=\x9c\xd51\xc9Vc\xf8\x9a\x95E\xce\xd9\xa5\xf5\x12\xbe\xf0Pj\xfe7e\xf83\x07>-\x0b\x99\xb8\xb1b\xdb\xe4=\x8c\xcf\xeee;`WLdl\x91U\x83Z-\x97\"\x11,\x8b\x98%\x16\xc5\x12rn}?w\xa1\xa40\xe5\x070\xb2\xb6n\xa0\x1eaHD@:\xd0\xb50\x81\x94\xa2}k\xe6\xac\x9bm\x85\x9e%j\x13\xf2\x85\xefp\xdci\x8f\x18#\xa4\xda\xf1%\xf0\xc8\xd6g\xcd\x81o\xb6f\xe7\x07\xea76\x8c_\x9b 6\x84\x0d\xb2\x15\x07\xb1\xd9f\xdcNW\x9e\x1a\xe0\xd8\xa0 h\xbea\xd2\x88D\x0f\x8f\x99#\xa6k\xfa\xa4\x15[\xfc\xea\x89\x04\xcc\xd6B\xa4\x8dx`o\xca\xf7\xf3%[\xa8+\xde`\xbbb\xa7\x0c|.6\x8c\xf9\xf8B\xee>6\xa2z ,_\x08\x93\xdb\xd17R\xa3\xd25\xb3Ly\xfb\x016\xdc_\xd6Q\xf6d\x81\xfb\xa3\xa1*\xc0\x19\xb1\xaf\x8b\xd2\xda3\xb1\xc0\xaaz\xd7\xaeA\x17\xdb\xad\xcaqb\xdc\xb2\xe4\xf2I!\xed\xff\xd8\xe9\xd0uv\xcd\xd0\x19\x8d\x07\xd4\x12\n\xe3\xbcN9^\xb5\xf5|,M\x85\x1b\xbc\xb0\xe2\x92\xbbE\xe2\x86\x9b\xb5Ju\xd9\x14\xfb-\xd75\xc3\xe5\xbf\xfe\xc4\xac\xd5\xc2\xd3gpa\xebg\x07\xab\xaf*\xab\x94+$\xbc\xfc\xee\xbb\xd08\xfbY)X*\x05\xcfa6\x9b\xfd\x8f\xd1Gm\xcd\x98\xdc\x8d?\xc4\xe4nf\xeb\xf4s\xae6\x8f\x96J}3\xfe\xf8l6>%\x89%<\xb2E~\xc0\xd6\xbdW\x8f\xfe\xc5\x96\xf9\x0d\xfc\x19\xf0\xb0\xa1r\xff\x19V\xee\x0f\x01\xe5\xfe\x07\xbbb\x87\xd7.<\xc7\xe0\xcb~\xee\x80\xea\x13\xfa\xd1\xcfJ\xcd\x92\x8ci\x1d\xa1=We\xfb\xa2kx\xe3\xe5\xf1\xfa\x8c\xa8\xb5\xd2\xeb\x8f\x01\xbd^\xec\xccZ\xc9@D\xe5j\xf8\xb3R\x8ff\xb3\xd9\x10\xf0\xe4\xa4R\xea\xa3\xe0sh\xb9\xa8\xf6\xdbj\xdd\x16v\xee\x94\xfe\xea\xf5\xbb\x97o\xcf/\xde\xff\xfe\xf6\x9bP\xa2\xaf\xb6\xf4p%\\5\xc2\xea\xfek@\xdd\xbf\x04\xf2e\xa8\xeag\xcf\xe1_\xb6\x8b\xd9\xcfJ\xfd9\x9b\xcd\xfe9\xfe\x02\x93\xbb3\x1bn\xda\xb7\xb6.f\xfa\x95\xe5z\xcd2\xdb \xe1\x86\x85\xd4\xdb\xadQ\xa0:b\xd9\xa9\xcc\x07\xb9\xa9\xab\x83\x95\xc5\x81\x86O\xfd\xb7\xe7 E\x16\x1c \xe1:\x8e\x8c\x04\xbb\xda\xc4~(=\x7f\xb9\xb2\x80\xc5\xae\x8e\xc4\xca\xb9 \x11\xff\xc5\xaeLn\xd9\xc8e\xb8\xe8\x87=\x91\xd6\x13\xbb\x88\x9e\xe1\x0f6J}\x08\xac1\x7f\xda\xb9\xd5Z\x86\xfd\x83\xb3\x8e\xe1\xc2\xab\x89Jf\xbbr\x11\xb8\xb7B\xaf\xa2a`KG\x86\xf3I\x81\x87O\x1e\x0e\x17\xedg\xd5\xb2Jn\xc9\xc9\xbd\x05?X*5[\xb0\x1c\x1b\xf3\xe9\xc9n\xf6_\x0f\x9cV\xdc\xc2i|\x9d\x88Uy`\xdf\xb1\xbez\xf0\xb1\xffx\xf7\xfbo\xc3\xbf>\x7f\xfe\xfc\xf9x\x7f\xda\xf7\xeb\xc4\x86'qY7\xe0C$\xb7F+\xb4\x8f]r\xbe*26B\xec\xda/\n\x81o^\x07:g\xc07\x0b\x9e\xa6u\xc8s\xe6#\xa9\x91tH#\x00Y\xa2\xf2>\xfe/\xab\xbe\x8f~e_\x05r\xcd\xce\x98\x95\xae$\xb4d\xb6\xd6c\x9dJ\xbd\x8c]\x8a\x8c\x8fO\x18\xa5#\xba\xe0\xb9V28\xee|\xbe\n\x89\x98s\xec\xda\xe7\xf0t\xfc\x0b\xd5KH\xba\xf3\xef\xfcp\xf3i\x0c X\xcb\x07\xa8\xd4\x07\xcf\xe0A\xdfpl\xabg\xe6Z\xfe\xe0,T&\xb6\xf97\xb6\xb1\xe5\xfeO\xd7\xa4\x7f\x0b\xbed\xdb\xdcy\xe7\xa6\x0d?_\xfa\xc5V\xdb\xe8\x9c\x99\x08\x0d\xd7<\xcb\x1e_Ju-\xd1\xa1\xac\x99\x06\x06I\xa1\x8d\xda\x04FW\xdb\xd6=\xfd\xa73\x00\x9c\x17l|\xdeZ\xb2\\\x01sv<\\\xf8G\x1cy\xa5\x81\xafU\x96\x96,\xe5\xaaf\x98\xeb\xf3\x03\x03|n\xcd\x8f\x8b\xe1r\xf1\xb3\xd5\xd0\x80G\xd6a\x95*\xd9K\xe4\x94\xb9\xc6\xbf\xff\xe7\xdf\xbf \x8d\xa2C\x19W\xfb\xcba\xfbB=\xd9b\x9f\xce~x\xfa\x83~\x10\xb0\x13\xf7\xbfC\xac\x82\x07C\xb4\x82=\xf8X\xa4\x88 \xcf\x97\xb9\xda\xcc\x93\xe5f\xf3\xe4O\xe4\x1e\xf8\x1f\xff\xf9`\x98m\xd0X\x97vq\xc9\xf3\xf4\x8d\x90\xb8\x06)\xb1\xcb\x8av`{\x17\xe11\x91Vl\xe4^\xa4\xc9\xe1\x82HE\xd3%N\x86\x0e\xd6\xbe\xe2\x98\xb6HUh\xc2cmB\xc2`\xa5\xec{\xfe\x8d{\xc6J\xe8\xeb\xe0\x1b\x81F\x83P6\x81|\x04\xf2u\x85@>\x02\xf9\x08\xe4k \x81|\x04\xf2\xf5\n\x81|]!\x90\x8f@>\x02\xf9\x08\xe4#\x90\x8f@>\x02\xf9\x08\xe4s\x12\xa1u\x02\xf9\x08\xe4\x1b\xfa\x89@\xbe=!\x90\xaf#\x04\xf2\xf5\n\x81|\x04\xf2\x11\xc8\x17e\\'\x01\xf9\xc6\x0e8lbu\x8d\xc2\x84|\x86\xb9\xe0\xc6\x9f\xea\x13\x0eM^\xdc\xe0\x80C'\xbd\xa0\xd0\xc4\xbd\xcdK\x91\x19\x9e{|*n7\xf3\x85}\xf2o\xc2\xac\x7f\xc6w]\xc6L\xc3N\x15\xd6\x96\xf00\xc7:\xa9\x80\xc5:7m\x1b\xcd\xb5i\xa4\xa0je\xfa?\xb5 \xc3\xcew\xfc#\xf7\x0c#l\xa8\xbd+\x86\x80\"\x02\x8az\x85\x80\"\x02\x8a\x02\xdf \xa0\x08\x08(\"\xa0\x88\x80\"\x02\x8a\x08(\"\xa0\x88\x80\xa2JB\xe5\x12P4&\x04\x14\xddV\xeb\x04\x14\x11P4\xf4\x13\x01E{B@QG\x08(\xea\x15\x02\x8a\x08(\"\xa0(\xca\xb8N\x02\x145e\xcbVB\xe2\xc7\xfa\xc3\x9c\xd6\x9a\xb2~\xb8:L\xd2\xe0\xb4X\xfd\xd9O }XF-A\x00 \x9c\xfe\x97\xfc\x93\x99_\xf2\xdd8<\x10\\\xc5G\xad\xe1\xfd\xe9\x89#'b\xd7\xf5)O\xf8\xb6\xff\xf4I+\xa6\xddq\x97p\xc1V\xfc\xad\x03\x9af\xee\xf7\x91\x02\x1dVe\x8b\xb2E[\x15s\xd8(m\x80cj\x08\xf3F\x03\xaf\x1be\xd8\x08*2I1\x81\xf3IC\x07KBY\x1d\xd4\x0b\xfe\xc3]4c\xe7\xc62\x1b\xd9\xc8~-[J\xc2\xe3\xe7\xe7\xf8\xda\xd8\xe8\xbbfx\xd1\xc7\x19\x08\xa3\xcb\xb4\xaa\x86B\x96\xc7\x89c2\xeaZ4nk\xa3\xbdi\xb47\xad+a\x9fC\x90#A\x8e\x049\x12\xe4\xd8\x16\x82\x1c r$\xc8\x91 G\x82\x1c r$\xc8\x11\x85 G\x82\x1c r\x8c\xd3:A\x8e\x049\x0e\xfdD\x90\xe3\x9e\x10\xe4\xd8\x11\x82\x1c{\x85 G\x82\x1c r\x8c2\xae\x93@\x8ec{\xd36B\xce\xab\x1b\xd8\x1a\xa5\x8d\xddG\xfb\xce\x0d\xd5\xea`H\xeb\x8b\x84,\xaf\x83\xf3\x03Ys\xfbY\xe3\xe6\xcbDm6\xcc\xf6C;\xa8x\xfa}\xc1\x8c\xda\x9c=\xfd\xfe{\xa9Lk\x9d+\xe43\x07\xc35\xfeV\xef\x8e[\xb2L\xdfh{\\\xd9l\xdc\x8d\x87sR\xfd\xc2\xb1?Y\x01\xb5\xb3K\x1e\xabj\x8fj2?5\xb9\xf391\x0f\xe7\xc1:\x8f\x8bU\x10(f\xceV\xa2}\x155\xb6\xcav\xca8\xa49\x83\xdf\xcb+\xf5\xd5\x12\xd4r\xa9\xb9\xb1\x0b\xe2vu\xa1\x91\x7f\xd7\xed[\xa3\x8f\xa4A\x18\xca\xbe\xf4\xa8\xd6\xd5zH\xbb\x9d$\x89o\"*X\x16\x1b\x9e\x8b\xa4\xfc\x1b\xba7\x7f\xab\xa0KC\xad\xb9,\xbb\xa3\x90U\x06\xaf\x13\xdc\x9f\xbb\x83P\xb9\xd6\xb5b]^\xac\xb0\xc3\xc3\x160\xa2e\xaf\xd9v\x91\x9fE\xcd\x1d\xe8\xb9G\xd1\x99\xd8\x88X=\xe3\xb3%:?\x84D\xbb\x9co\xd3\xc2=\x99\xc1\xc6\xd3[\x97,j\x16z\xbe\x84\x8c/\x8dO,\n\xe3f\x9f2\x00\xc74\xb5\x1b4\xae`\xab\xe5\xc5\x0e8K\xd6\xc0\xb6\xdb;\xa7\xcf&\xde^\xbf?\xa6\xd5\xc6\x1bV\xb7h\xb5\n7\x0e\x83\xfdGy7|\x058\x95\xba\xb4\x0f\xfa!,d\x92\x15i'0g\xae\xe4\n\xc1\xeb\xf4\x17b\xbd\x8d\x14\xb6\x9dS\xdb$\x94\x0f\xe7\xba\xd3W\x9d\xaa\xe2\xda$\xe7\xdac\xfc8\xb4\xea\xb1h\x87\xdb\xcc\x8f$\xb1\x92*o\x8c\xbev\xb1\xae\xd5\xc7\xe8\xca\xee\x85\xfe=\x1d\x96\xf3+\x9e\xb7\x8a\x1b\xeb,\xfft\xb7\xa3D\x83\x89\x91\xf3\x811`\xcb\xe5\x12#)\x95\xa7<\xef\xe6\xb3\xde \x99\xf0g\x90(\xbdQ\xfa\xb1N/\xe1\xfb\xd9_\x7f<\xbaV&\xee(\x97\xc5&\xb4\x99\xfc\xc1+\x1bOZ\xa3M\x9f\xc1\x161\x8ej \xcb2\xc3s\xab\xfa+L\x88|zb\xcbr8N^\x86A\xadm\xe2\xbf\x15\x9b\x8b\xc6\xcd\xa7\xf7l\x7fxG\x9b] b\x1atp4\x91s \xa4f'D\xce!r\x0e\x91sZB\xe4\x1c\"\xe7\xf4\n\x91s\xbaB\xe4\x1c\"\xe7\x109\x87\xc89D\xce!r\x0e\x91s\x88\x9c\xe3$B\xebD\xce!r\xce\xd0OD\xce\xd9\x13\"\xe7t\x84\xc89\xbdB\xe4\x1c\"\xe7\x109'\xca\xb8NB\xce\x99z;l\xc5\\y\xf2g\xc4\xf5\xaf\x9d\xe3\x99\xdf[Kk^\xf2\xda\\\x016\xefh\x05x\xeb\x9fzP^\x0e\xfb\x00\xd0\x1eKW \x0c\xcfY\xe6\x80YS]\x17k\x9fX\x94\xb7\xc9\xb6\x0b|\x9d\xe7*\xd76\x96h>\xbed\x98\xbar9%\xacM\xc247<-_\xdc;\xfa\xf9}\xcd\xda\xb9g\x98^\xd5\xb5\x130\"\x02\xec\x08\xb0\xeb\n\x01v\x04\xd8\x11`\xd7\x12\x02\xec\x08\xb0\xeb\x15\x02\xec\xbaB\x80\x1d\x01v\x04\xd8\x11`G\x80\x1d\x01v\x04\xd8\x11`\xe7$B\xeb\x04\xd8\x11`7\xf4\x13\x01v{B\x80]G\x08\xb0\xeb\x15\x02\xec\x08\xb0#\xc0.\xca\xb8N\x02\xd8\x8d\xed\xa6\xff\xc2.y\xed\xdf\x8e\xb7\x7f\xd9\xaa\xff\xe1\x1e\xc2m\x84\xd0t\x85\x10\x9a\xd1/\x10BC\x08M\xe0\x1b\x84\xd0\x00!4\x84\xd0\x10BC\x08\x0d!4\x84\xd0\x10BSI\xa8\\Bh\xc6\x84\x10\x9a\xdbj\x9d\x10\x1aBh\x86~\"\x84fO\x08\xa1\xe9\x08!4\xbdB\x08\x0d!4\x84\xd0D\x19\xd7I\x10\x9a\xa6\xd0\x15\xab\xc15<]\xb1\x1aR\x0d]\xb1\xda\x90S\xc1s\xb4)\xac%\x049\x12\xe4H\x90#A\x8e\xbd\xdf \xc8\x11\x08r$\xc8\x91 G\x82\x1c r$\xc8\x91 \xc7JB\xe5\x12\xe48&\x049\xdeV\xeb\x049\x12\xe48\xf4\x13A\x8e{B\x90cG\x08r\xec\x15\x82\x1c r$\xc81\xca\xb8N\x029\x8en\n\xa3\x8b?c/\x98\x1b\xd9\xe7F\x17\x7f\x9eD\xcd\xe1\x8b*\xe9\xe2\xcf\x86\x1c@\x9ft\xf1']\xfc90\x06\xbe\xb0\x8b?\xc7\x8e,\xd6Q\xc7\x15\x1f\xf4\x02\xd0\x0b\xa5\xca\x11u\x0fw.\x8f\xb1\x08nE=2A\x12@T6?6s~\x12\xf8\xff8\xe0\xff\xb1\xa1\xff\xbe\xb4\xc2\x0d\x80\xffS\xc0\xfe\xb7\x06\xfdO\x02\xf9\x9f\x00\xf0?>\xdc\x7f<\xb0\xff\x80P\xff1\x81\xfe\x03\xc1\xfcG\x05\xf9\x8f\x02\xf1\x1f\x0f\xe0?\n\xbc?\x0d\xdc?2\xb4\x7fT`\xbf'\x011\xee\xed\x8e\n\xea\x1f\x00\xd2\x0f\x00\xfaQ\x01@\x14\x98\x7f2(?.\x1c9\x01\x8c\x7f`\x10\xff\xc8\x10\xfeq\x01\xfc\x83\xc1\xf7\xd1\xf0r\x04t? \xb8\x1f\x87\xbfn\x06\xda\x8f\x979\x98\x99>\x1c\\?U\x9bS\xa0\xfa8\x85M\x82\xe9o\x08\xd2\x0f\xa7\xf8\x0f\x08\xd0G\xc3\xf3q\xe0|,4\x1f\xd4\xf2M`\xf9)\xa0\xfc\x18$\x7f @~\"\x1c\x7f;0>\x00sO\x01\xe2\x8f\x00\xc3\x07j7h\xe9G\x03\xe0\x8f\x08\xbf\x1f\x0d|?\x16\xf4\x1e\x05\xbc\x8f\x01\x83c\xa0\xfb\xe1!\xf7\xa3\x00\xeeG\x84\xdb\xa7\x83\xed\x93\xa0\xf6\x1b\x00\xedSa\xf6Q\x90}\xbcv\xb1\x18h<\xc0~\x03x}\"\xb8>\xd8\xdcc\x01\xebG\x84\xd5\x8f\x03\xaa\x1f R?\x8c)M\x82\xd3\xa7\x80\xe9\xfb\x93\xa6\xdf}y[P\x80\xf6C\xd2~\xc8} \x03!1PH\xb0\x8d\xa5\xc4\xe5\x1f\x9c\x9c\x00\x109\x16$r|P\xe4`\xb0\xc8i\x80\x91\x03@#'\x02GN\x02\x8f\x9c\x02 9&DrP\x90\xe4\xb80\xc9\xc1\x80\x92#C%G\x02K\x8e \x97\x1c 0\x99\n\x99\x1c\x1d492lr\x03\xe0\xe4\xc8\xd0\xc9A\xc0\x93 |\x12\x1d4DA('\x04Q\xe2\xc3\x98\x13\x00)\x07\x87R\x8e\x0e\xa6\x1c\x1bN9 \xa02\x01\x04\x88\x02U&\xc2*\xc1\x94\xe6\x0d\xa1\x95p\xb9\xb4\x1frLn\x08\xb5\xd0~H'7\x04^\xa6A/\xb4\x1f2\n\x869\n\x10\x13QG\xda\x0f\x19\x0f\xc9\x1c\x0f\x94\x89\x84eh?\xe4\xed\x01\x9a\x9b@4\x13A\x9a\x1b\xc14\xd3\x81\x1a\xda\x0f\xd9'\xc7\x82m\x8e\n\xdc\x1c\x0b\xba9\x1axs8\xe3\x9a\x04\xe0L\x83p\"\xf7C\xde\xd1K\xf2\"\xb7\xaf<\xe1\x9f\x84\x99\xebk\xb6\x9d\xeb5\xcb\xf9\x9cmp\x93\x93\x90\xfb\x1b[Z\xfbQ^\xb2,y\xfdI\x98\x0b\xa5\xb2\x97JHm\x97B\xefl\x11\xf7\xf4\x82=\xa3.\xb9\xd4sU\x98\xbb\x0b\xf1\xa4\\\xaa\xcd\xadS5\xce\x04nYLln\xc5\xdaNu>1sZ\xf63\xbckN\xb9#\xcf\xba[&}\xe5\xc6V\xa4\xbf\xfd\xfe\xfe\xf53\x0cW\xdc\xb3>\x06\x10\x98\xb89\x97\xc6;\xc9*#\xd6\xf2\x94.\xfa\x1b.\\\x8b\x95d\xa6\xc8\xb9\xae\x06\xb5\x0d[Wj\xa5\xd0\x1b\xd5\xe6J0-\xc1\xb4]\x89\x19\xc3\x86`Z\x82i \xa6%\x98\xb6!\x04\xd3\x12LK0-\xc1\xb4\x04\xd3\x12LK0-\n\xc1\xb4\x04\xd3\x12L\x1b\xa7u\x82i \xa6\x1d\xfa\x89`\xda=!\x98\xb6#\x04\xd3\xf6\n\xc1\xb4\x04\xd3\x12L\x1be\\_=L[\xd7\xc4\xc1\xacBz\xa4\xb5S\xa3C\x9co\xd8\xaa\xd3m\xf1\xe1\xff\xa3\x84t\xf80\xff\xc4\x92H`\xf8?\x94\x90\x17Je\xf7\x19\x0fv\xfd\xa8\n3\x1f\xc3K\x03I\x17\x02\x95k\x89(&6\x13D\xa02\x81\xca]!P\x99@e\x02\x95 T&P\xd9\x0b\x81\xca\x04*\x13\xa8L\xa02\x81\xca\x04*\x13\xa8\x8cB\xa02\x81\xca\x04*\xc7i\x9d@e\x02\x95\x87~\"PyO\x08T\xee\x08\x81\xca\xbdB\xa02\x81\xca\x04*G\x19\xd7W\x0f*\xdf\x16\xdb\xc5\xb6\xe9\x00\x9e{\xa1Tv\x81\x0f\xfa_\xef\x19\x8e\xeb\x940\x06\xdd\xd0\x05t\x1d9\x0e\xe2rl\xbc\xe5@h\xcb)\xb0\x96[#-'\xc1YN\x80\xb2\x1c\x1fc9\x1e\xc2r@|\xe5\x98\xe8\xca\x81\xb0\x95\xa3\"+G\xc1U\x8e\x87\xaa\x1c\x05S\x99\x86\xa8\x1c\x19O9*\x9a\xd2\x13\xf5\xd1\x05tQ\x08\xca\xc9\xf0\x93\xb8p\xe4\x04\xd8\xc9\x81\x91\x93#\xe3&\xc7EM\x0e\x86\x99D\xe7\xf4#\xf0\x92IhI\xf0\xa6\xaf\x1b %t\x01\xdd4l\xe4\x86\xc8\x08]@7\x11\x0b\x99\x82\x84\xd0\x05t\x83r\x04\xec\x83.\xa0;\x00\xe2q,\xbc#\n\xed\xa0\x0b\xe8n\x8aqLG8&\xe1\x1b7@7\xa6b\x1bt\x01\x9d\x93c\xa1\x19G\xc42\x8e\x83d\x1c \xc78\x8c)M\xc20\xa6 \x18\xf5\xa4I{Fh\xcfHW\xc2\xb8E\x0cr\x11lc)q\xe9\x02''\xc0/\x8e\x85`\x1c\x1f\xc38\x18\x8aq\x1a\x1c\xe3\x00H\xc6\x89\xb0\x8c\x93\xa0\x19\xa7\xc03\x8e\x89h\x1c\x14\xd38.\xaaq0\\\xe3\xc8\xc8\xc6\x91\xb0\x8dc\xa2\x1bG\xc27\xa6\"\x1cG\xc78\x8e\x8cr\xdc\x00\xe782\xd2q\x10\xac#\x88vD\x07\x0dQ\x88\xc7 1\x8f\xf80\xe6\x04\xb8\xc7\xc1\x91\x8f\xa3c\x1f\xc7F?\x0e\x88\x7fL\xc8\xd9Ga \x13Q\x90`\x06\xf2\x86HH\xb8\\\xda32&7DFh\xcf\x88\x93\x1b\xe2$\xd3\x90\x12\xda3\x12\x85\x9a\x1c\x057\x89\xa8#\xed\x19\x89GP\x8e\x87\xa1D\xa2(\xb4g\xe4\xf6x\xcaM\x10\x95\x89\x98\xca\x8dP\x95\xe9\xb8\n\xed\x19\xe9\x93c\xa1,G\xc5Y\x8e\x85\xb4\x1c\x0dk9\x9cqM\xc2[\xa6!._\xc9\x9e\x91\\$\xbcg\xcf\x88.6\x1b\x96\xef\x9e\xc1?\xeau\xf1\xbb\xad2\x17\xf6\xf9\xc6Yl\xab\xb7\x17/\xdd)\x87\xb0f2\xcd\xcaLe\xceM\x91{\x1f\xab\xb7\xca\x00~\x08V\xe2\x8a\xcb\xaa@\x86\x99\xb5\x9e#\xdc\xe0\x8fB\x99\xf6\x0fe$\xd2\xda\xccR\xd5\xc8\xffx\xcf\xf6\xb2X\xc5\xcdQq7\x82\xa4\x00\x8c0\x19\x7f\x06\xef\xdc\xdc\xe0\xe7\xd7W<\xb1C\xfa\x1bx\xfa\xfd\xec\x87\xef\x7f,\x98Q\x9b\xbd\xb7\xc3\xb9\x11\xb4\xb4\xaa\x03\xdez\xddU\xa6a\xbf\x84\xc6Qj\xd5\xd6\xb3HL\x91c^\x01X\xa3\xf3zJG\x93\xaa;\x82@O\x02=\xbbB\xa0'\x81\x9e\x04z\xb6\x84@O\x02={\x85@\xcf\xae\x10\xe8I\xa0'\x81\x9e\x04z\x12\xe8I\xa0'\x81\x9e\x04z:\x89\xd0:\x81\x9e\x04z\x0e\xfdD\xa0\xe7\x9e\x10\xe8\xd9\x11\x02={\x85@O\x02= \xf4\x8c2\xae\xaf\x1e\xf4\xack\xb2`\x9a\xcf\x99\xd6\xdc\xcc\x11,\xecT\xe9\xe0\xd7\xaf\xd5_F\x84\xf2\x94\x9f\xbe-\xd2k\x94a\xd9\x1c\xff3\x13\x7f\x14\"\x15f7\x82\xfb>xe\x87ib\xd7\xb1\xcf`\x8b\xa9\xa3*2`\x99\xe1\xb9dF\\a\x9c\xf9 \xbf\xe5\xd2cyi]-\x9c\xf6\xbd\xfd\xf6\x85R\xd9\x9b\xf2\xcb\xfe\xa9{\x06\xd8V\x8a\xbd\xbb\x88\x18]\xffvw\xae\x7f+\xc5\xc3\xf4\xb7\x1dr\x04\x93\x13L\xbe/1N\xc1\x10LN09\xc1\xe4\x04\x937\x84`r\x82\xc9 &'\x98\x9c`r\x82\xc9 &G!\x98\x9c`r\x82\xc9\xe3\xb4N09\xc1\xe4C?\x11L\xbe'\x04\x93w\x84`\xf2^!\x98\x9c`r\x82\xc9\xa3\x8c\xeb\xab\x87\xc9\x0f\x83\x18\xeb5\xcb\xfbv\x08\xef\x03\xbc\xef\xf0I\xff\xf3=Cv\x9b\xba\x18\xc3qnu\xb9\\\x00\x9b\x8dH\xa6\x84p\xd9`\x11qy\x8fC#\xb2G\xc4c\xe3\xd1X\x02O <\xedJx\xcc\x12xJ\xe0)\x81\xa7\x04\x9e\xb6\x85\xc0S\x02O <%\xf0\x94\xc0S\x02O ,3\xb6\xb2\xde_\xaf\xd5\xb5]3\x08\xf3\xd0\xfe\xb9~\n\x91\x0b\xf9\xb8\xfe\x03\x8e\x82qg\xfe\xdb\xfe\x0b\x1aRa{`Q\x18\x8c\xa0E\xee\xfc\x85\x06\xfe\x87\xc7zx\x0e|\xab\x92\xb5\x9d\xb4\xb2\x08\xac\x05\xcb\xb5\xad\xf0a\xb4\x1f\xa5[\x9e\x0b\x95\xcell5X\x01\x04\x8f\x1a\x95\x18\xff\x103\xc0@\x0b\xb9\xb2\xb5\x126\xc6\x97\xa9[\x0e\x0c\xb5\x89\xad\x98\x90\xa0d\xe2V\x0beM\xc7?\x93\xf3\xa5\xc82\x1b\xe2\x9e\xdb\x81\x9e\xfa\xdc\xb3]r\xb8\x94m\xe5\xd4\\\xac\xb0\xe2\xa6z\x07R&\xb2\xdd\xf0\xe2\xac\xae\xe8\xdc\xa8Q\xabs\xb6\x1d\xb0\xa3Vq\x18\x06\xady\xdelk\xce\xafY\x9e:0\xa5~8\x05\xa3\x02\x19\x0e\xc4g\x85\xc6I\xc3.\xac\xae\x04\x83L%\x97\x90\xfa)\xdd\x1a\xe4b\x87\xfd\xa0\x0d\xdbl\x83#h\xd4\xb9@\xa4\x83\x01D\\\x92\xcb9Nfs,y\xf4\xe1J\x93oTr\x89\x13\xd4{\x1f1\xb2*\x85\x8b\xed\xc2\x02\xcf\xe0\xa7\x9d}\xb0\x8c[\xe0\x1f\xfe\x0f\xef\xc5&\x84\xaaDz7+\\\x16\xa3'};y\x0c?\xed\xca\x8aD=\x1cQI\xfb\xe0o\xca\xb6(\xe2\xc1\x9fv\xbf\xe4\xaa\x18\xebYh\xd0^\xe2k;\xc5SZiw]y\xdex7 _\xf7\xa2\x1b\x96\xc9\xd8J\xb4\x14.\x10\xe0Yp\xccq4L[\x1b\x96\x1b\xe7e\x1a\xe5\x8fg]\x82'\xb8\xc343\xf1\x96\xfb\xca\x16[\xafH|\xcb\xf1\xac\xf5\xd6!\xeb\xd7\x1c\x87y\xa6\x14\x82{F9\x95\x04:\xb0l\xf4\x01\xeb=\xb5\x7f\xab\xd1&\xb4C\xc6\x8c\xf2\x1di\x1b\xa0\x9d\xd7\xcd\x94\\\xf1\xbc\xee#\xc4\xe4\x10|)!\xa5po\x97/\xcf\xeaO\xba<\x04\x02\xe1R!\xa4%Ef\xdd\xa8\xdc3*\xe77\xc2_\xf9\xd8\xf6!\x1f\xc7\x8d\xa6r\xa0\x07\xec\x802\x82J\x99\xe1\x8fM\xd8+L\xed\xb0\xf7e\x9d\xab\x1e[\x94}\x85\xe3\xc6\xfe\x01\xb1\xf0v\x07\xd5\xfa\x0f+\xb1\xfe\xc4\xe4\x1e*;\xc0\x16\xf11\xe2S\xe8Z0ES[\x9bi\xb6\xb0\xc6\xb7m\x05*\xc4\x96\xa7c=;E\xa7X\x83\x97J\xfa$\x00NN\xda\xe4E\xd2\x80\xbe\xffh\xd7\xb2\xd8* \xa9X.\xb9\xad\x9a]\x93\xb8\x97u\xa0\xc1\x1d\xc3\xc7\xe4k[\xd5\x1a\x92\x92\x85T\xf2b\xce \xe5[.1\xe5\x11C\xb6h9\xeca%%J\xc8\xd1\xb9>\xb4\xa4q2\xba\xb0q\x12\x19\x81\xc4\xc7 \x91\xce~\xd2\xa8\x0d_\xdd\xe1$\xba\xc8)&x\x8c\xcb<\x9c\x1c\xf5J\x0f'\xf1\x17{\xecK\\\xa0\x8d\xa6Z.3\xf1v\x9d\xb25j\xe9\x7f\xc4\xa0\x03\xc9E\x0b\xcee\xb9\x18\x8aX\xa5\xbdd\xb2\xb9\x80\xd9\x14\x99\x11\xdb\x8cc\xb1N\xf3z\xf0}t\xb7s;\x82\xc3\xe3(h1S\xa6\x0d\xaf\xb6\xfa\xfb\xa5r\xaa\x96 \x9d\xa5\x8a\xa2\x06\x8b\x92\xc5f\x8e\xcbM=\xdf2\x91\xce\xd5\x15\x1f\xe0\x1f;\x99\xd8\x96\xd8$B\xa0\xff\xfbjY\xb6X\x16\x9b\x85\xe7\xb9\xa0a\xb8\xe7\xda\x8a\xf0 \xe4qCH\x94\x1d\x03v\xf6\xb4\xc5\x0f>\xeaV\x9a\xbe:wOU\xad\xea\xed\xeb\xa8O;k\xa6\xdd\xa0ih \x10\xbc\xb3,\xe7,\x1d\x9e\x16\x1a\x8b\xdd9\xcd3-\xa1y\xe63\xce3{v\x89k\xb6\xde\x19\xa4\x99\xaf\x197\xf7\xd8\x0e\xf8\xa5\xcc\xd41\xe9\x8d\xd4}S\x1be\xdbd\x15^\x7fT\xc3\xce\x85\x83FA\xce\x13\xb1\x15\xa8\xb4\xeb\xf5\x08cC3#\xf4r\x07 \xcf\x91\xcc\xdf\x08K\xe1e\x15E\xfb<`\xc9v\xab\x1f\x02\x96\xab\xc2\xd1\x01\x86\xbfQ\xad\x00mT\xec\xfa\x94\xc1J\\\x95\xcba\xdb>\x1b#\x0f\x85\xe7\xbe#^\x94X\xc2\xaa\xe0\x8eT\xd0\xf3\xf4\x96\xad\xbc5\x0e\xe4\xdc]Y\x17\xd5c\x95a\xd7o:\xe2*\xa2\xee\x0eK\xe8/)\xe49\xc2\x1eC\xf2Of~\xc9\x07\xae\xb8\x83\xd8\x11\x1dE\x07\xf5\x0d\xff\xc7\xd8`/\xebS\xce\x01\xf6\x9f\x9e\xff\xcc\xb4_\xe6_\xb0\x15\x7f\xcb\xff(\xb863\xf7\xfbH\x81er\x87c\xd1V\xc5\x1c6J\x1b\xe0\xc82F\xe3\x1ax\x1dg\xe6\x03)&0O\xc6\xcc\x92.P\xb0z\xc1\x7f\xd4\xb3cIlo\x10\xa9\x97-%%\xb8\xff\x0f_\x1b\xf3V\xd7L\x83\xe6\xe6\x0c\x84\xd1%C_C!\x9dy\xa6\x8e\xd7|-\x06\x8c1\xce\x9f\xb8j9\x9bvmiA\xe4B\xc2\xea\xed\xc5\xcb\xca\xecK|\xba\x91\xa4\x1ejA\xa2r\xf7\x16\xae8s\xd7\xf4\n\xdf\xb6\xd1\x02.\x8b\x9bz\x19\x9e\x1e\xca\xd7\xde\xa9M]\xdd\x10\xcc\x0d9\xdfr\xe4\xc7\xfe\xc4\xf2\xaaW\"\xd8\x1em\xad\xa0\x89\x8e\xf1=j\xf2\x18\xed\x1e\xa4\xdd\x83] \xfb|W\xccAv\x0f\x1eq;\xc1(O\xa3\x9a(\xed\x040d\xfd\x9d\x89\xc6\xcf*\xcc\xbb6\xc7\x0fp>\xa79\xfef\xd5\x14\x84\xbei%\xda\xc8D\x95R\x1b\x9fRf\xf0\xbb\xccv\xb8YL-A-\x97\x9a\x1bP9\xb4\xab\x0b\x8d\xdd{\x9a\x9b\xe6\x90<\n\xf9\xc2I\xefd\xdd\xa3ZW\xeb!\xedv\\\xbco\"*X\x16\x1b\x9e\x8b\xa4\xfc[\x89\xac\xd8V\xbaM,k.\xcb\xee(d5mu\xb2\x90\xe7XZ\xc6\xb5\xae\x15\xeb2\xf8\x85\xb6\x1dp\xc9\xc7\xb4\xec5\xdb.\xf2\xb3\xa8y\x80\xe1\xd3Pt&6\"V\xcf\xf8l;\xa9\xb4\x1f \xb8Y\xb5i\xe1>\x96,2g\xaf]U/!\xe3K\xe3\xb7% \xe3R\x0f%}\x177\xb9\xb9A\xe3\n\xb6Z^\xec\x803\x1bFo\xb7wN\x9f\xcdx\xa7~\x7fL\xab\x8d7\xacn\xd1j\x15\xf2\xbbl\xdc\x05B\xa6\"a\x86W\xdbUK]\xda\x07\xfd\x10\x162\xc9\x8a\xb4\x13\x9e0Wr\xb5\xff\xb7\xd3_\xe8\xeb\x1bq\x9b\x8d\xfa\x1b\x8b\x00!\xe1\xc3y79\xdf\xa9*R\x19\xec\x9c\xee\xe6x\x1cZ\xf5X\xb4\xc3m\xe6G\x92XI\x957F_\xbbX\xd7\xeacte\x97\x05\xd3\xd3a9\xbf\xe2y\xab\xb8\xb1\xce\xf2Ow;J4\"\xe1\x9c\x0f\x8c\x01[n J\xe4)\xcf\xbb1\xe0;!\x13\xfe\x0c\x12\xa57J?\xd6\xe9%|?\xfb\xeb\x8fG\xd7\xca\xedYq\xf3-\xcf\xe7\x8d\xbcO\x88\x1fw\xc1\xf3\x12#\xee\xe1\xc99\xf6\xbeT\x1b_\xc4 a\xae,\xc6?G\xc49/\xa7\x88\xe2\x888\x17Zm:!\xe2\x1c\x11\xe7\x888\xd7\x91\x18\x07\x03D\x9c\x1b~8\xa2\x92D\x9ck\x0b\x11\xe7\x8887\x8d\x96\x15\xfe\n\x11\xe7\x8887M\xa7D\x9c\xeb\x97\xd0\x92\xc6 \x11\x1a\x06d\x8a ~\xed\x84\x06\"\xceM\x9b6\x888G\xc4\xb9~!\xe2\x1c\xcd3c\xf2u\xcf3D\x9c\xbb\x93\xc49\x7f\xfa\xa9I\xd6e!r\x0fS)\x85\xd8t\x03Bl\xba\x90j\x88MGl:b\xd3\xd5\x12\x18b\xc4\xa6\xeb\x91\xb0\xcfw\xc5|\xc9l\xba&\xd0\x0f]\xa3\x7f\xc55F^n\xa2\xc6D`\x95\x1cc\xcdY\xfd\x18\xd4\x91NK\x89\xfew[\x0d\x02\xd1\xffN\xad\xe60]\x8d\xe8\x7f\x0d9\x80>\x89\xfeG\xf4\xbf\xaf\x81\xfe\x97e\xf3U\xae\x8a\xad\x7f\xb5\x97\xf1\x97e\xc8*h\x1c\x87\x97e\xe0\xde\xf2\xcf\xb6\xa9}\xe5\xf3\xfe\xc7{\xc6\xe7k\xaa\xab+w!\x92\xc4\xfa9B\xe7\xfc\x94\xec>\x1b\xda\xe7\x92e\xe5\xa7\xe5r\x9c.\x15n-D\xb6\x18\xca\xa5\xf8\xfc\x9a\x8b\xd5:\x98(\x8dl\xb7\xe7\xc9\xcds\x9e\xa8<\x0d\xa6}C}_KDZ\x1a\xe25\xe4$VONb\xac\xa3\x96h}\x95\x12i1\xb5x\xbc>\xb2\xff\x9cL\xaeU\\:\xa4+> \xfa7\xacY\x194\xf9\xfa\x82\xab\xaf\x9b\x9a\x85\xf6\x0c\xbe\x05\xb7SC\x9b\xbbgU\x12\xcaU\x97\x82E!\xe82\x83\x9fU\x0eBj\xc3d\xc2\xdd\xe9\xe0W*+6\x1c\xf46\x13\xc6\xd8\x0fmU&\x92\xdd\x99{\xcd\xe7\x85\x83x\x7f-\xbe\xbc\xfa^\x0e?\xcb\xe1\xe1\xe5\x8eUZ\xd2\xa9\x84\xbc\xe4)\x9eo\x1b8\x04\x1e%)6E\x86\xf7=\xde\xcdn-k\xe7{\x16\xefE\xc2\x9b\xb2\x18h\xc9\xb6z\xad\xaa\x98\x8b%\xbe1*\xf7\xbdkr\x96\\\xc6\x10\x98\x9cT\xd7Eu\xbbmr\x0f\xc7~\xb16\x84FG\x94E\x97\xa9\xecF\x8f\x02\xab\xb9s\xd8\xf5\xc56ef\x84\n2M\xf1\xbf\xa92\xf2u\x14\xe5\x852k$\xeb\xda\x19\x03A\x8es\xb9T\x88g\xb4\xfe\xfa\x16}\xaf\xe3\xb7\x8c7\xdd\xf0d\x8dw\xd6e;\x17\xb4m3\x968\xb4\xe7\x95\x1d\x8aU\xf9\xf8_\xbe\xdce\xae6\xa8 \xab\x82\xc7u|4\xfe\xa9\x8dJ\x8b\x8c\x9f\xc15\x87$\xe76\xa6\xd7|\xcbr\x0c\xee\xf1B:\x97\x18Up\xc9\xf9\x16T\x91\x03[h\x837\xdc)\xa9!\xb1A\x9b\xad\xca\xf8Wr\xceR\x8c\xe8\x1fu*\xd7Fb[E\xdb\xa0\x15\x97\xc7x\x8d\xdf\x95\x0d\x00G\xbfQ\xdd\xfat\xcd<\x073U\xdc]}\x95\x8a\x9c'\x06\x17\x06\x19\xb6Ly\xf7\x96\xa9\x95H\xbe\xf1\x17)\xb2L+X\xf3l\x1bPY\xa1A\x8b\x94k\xc3\xb7\xc0 \xe7K\x96\xd8\xc1\xd4\xb8\xee\x0c\xc4\xc6aK\xbb$\x1b1\xbbjT\xcc\xdd\xa8\x08\x87\x18AW\x12\xe6\xf6>\x86\x9fv\xff\x1b\x87\xce\xe8p\xa8X\xb5\xc1g=\xb8\xf0\xael\xcc\x05\xb6\x05Rnx\xbe\xa9\xb8\xb2\xb6S\xae\xed\xffH\\\xa1`\xd3\x9b\\v!]\xb0\xd7:v\xba+\xb1\xa3\x14C\xf6\x11\xa4\x11\x9e>{\n\x1b\xb6\xdd\xf2\xd4\x1b\xc2\xf9\xab3`\x90 \x8d~\x12\x9dH\x80;ccBw\xc5\x1a\xeb\xf1\x84\xef\xd7\\;B,\xb6\xaa\xbe\x1b\xcfo hX:\x98\x11H\x13\xef\xeeC\x1f\xd7\x1a(j\xe9\xcam\xed\x06PU\xd8Zb\x9c,\xb1\x9e\xc1\xd1q\x87\xbf\xd1fI\xee\xb5\xa5z\x8f\xe0\x00\x82\x03\xba\x12\x13\xaa\x7f p\xc0-\x13\x0e\xe1\x93\xf8\xcb\xd0\xde\xc2 k\x95\xf6\x16\xd2\xdeB\xda[H{\x0b\xdb\x0f\xd2\xde\xc2Zho!\xed-\x9c\xb6s-\xfc\x15\xda[H{\x0b\xa7\xe9\x94\xf6\x16\xf6KhI\xe3$\x02\\\x8b\x8c@\xe2c\x90Hg?i\xd4\xd2\x9e\x8f\xcf\xb8\xe7\x83\xf6\x16N\x9b6ho!\xed-\xec\x17\xda[H\xf3\xcc\x98|\xdd\xf3\x0c\xed-\xfc\x1c{\x0b \x94#P\xae+1.\xd8|\x05\xa0\x9cu\xbd\x0e\x99s\xa5\x8c\x02s\x7f\x13f\xfd\x8b\xcf,w\x99\xc1~\xe5\x8c\xf9\xf7\x06Z\xe7\xcb\xea\x07\xeb\xaa\xf2\xfcS\xf7\x0d\xaf\xebWqW\xee\x82\xa9cU\xc3\x16\x1a\x8cmb\xbe\x05\x93H\xcb\x10?<`J8;\x99\xc0\x0c\xf1Z\x80 \x9a\xb02\x85\xcc\x0c\xd3\xf41\x91\xd4\x0c\x11\xf6\xd8\x96\x88\xb8\xb8\x94 \xdas2E\x87Nb-\xaa\x96I\xba,e\x82\x95\xd5r\x13\xd23\xdc\xb4\x86\xb1A\xe1\xbe\x9c\x9e\x00m\xe5\xb4$h8&\x11\x1anN\x86\x86\xcf\xd1\xdd\xa7$F\xc3g!G\xc3i\x08\xd2p\x83\x8e8>Q\xda\xca \xc9\xd2p2\xc24\x9c\x884\x0d\xa7$N\xc3!\xc9\xd30\x91@\x0d\xd3\xdcO<\x91!H\x90\x86\x89\x84j\x80\x93\x92\xaaa\xe2\xc8>\x05\xb9\x1aNF\xb0\x86\x13\x91\xac\x01\xe2\x89\xd6]\x19Y_9\x89\x0c>cC\xcep\x889a M\n'o\xc7{\x84 \xdcG\xa8Z\x11\xe6?\xc2\xc4\x11\x02\xa7\xe3A\xc2\xc9\xb8\x90pJ>$\x9c\x8e\x13 G\xe6E\xc2\x14n$@,\x16\x05G\xe5H\xc2\x81y\x92\x10\xef\xa4`\x82\xa3\x82\xe9\x9cI\x80\xd3\xf1&a\x9a\xa7\x84\xe8\xb0\x03\xa6r(a\n\x8f\x12\xa6p)a\x02\x9f\x12n\xc4\xa9\x84\x1bx_8.\xb7\x12\x0e\xcd\xaf\x84x8t\xb2I\x9d\x84k \x13\xf8\x960\xbd\x0d7\xe9\xff\x93q/\xe1d\xfcK\x98\xcc\xc1\x04\x98\xc0\xc3\x84\xe9\x1d3\x85XS\xcaM:\xf3\x04\xbcL8-7\x13\x8e\xc6\xcf\x84\x1b\xe8\xf8\x84lU\x84\xff\xf1\xbe\xd1`C\xd4\xd7[]\x9f3\x06\xc4F\x99Mdp{\x1b\xd85\x0ep5QPk\xec4r\"x\xf5\x14\xc0\xea\x89 \xd5\x93\x80\xa9\xc7\x83Q#\x01\xd4\x98\xe5\xd9\xb1@\xd3\xc3\xc1\xa5A\xc7\x01Q\xce\x03\xa6\x82\xa3\xa7\x81E\xa3\xfc\x16DB\xa1\x13@\xd0H\xf83\x12\xf8\x8c\x83<\xa7\x82\x9d\xf1\xfe\x0f\x8e p\x1e\x10\xda\x8cX\x9bG\x1b\xc4 \x80\xcc8\x083\xba\xc6\xd3\xfa\xf3D\x80\xe5)\xa0\xca) e$<\x19\xad\xf4i\xf9\xdei]tt\x18\xf2d\x00\xe41\xa0\xc7x]\x9e\x0cn<\x01\xd0\x18\x051\x06\x92\xae\xa1\x15/\x84V\xbd\x10\x1b7\xc4F\x0eQ\xae{\xc2\xa8\x8cK\xa5F\x16\x17oh\xc7J\x9c\x1e=ez\xf3diL\x10|< \xf0\xe6\x10`\x0c\xf8\x17e\x1f\xf1\x13\xc0\x81\xa0\xbei \xdf\xa46\xc4-\xdcG\xfb\xfa\x04`^\x14\x8c\x17 \xe0\x9dZ=\xa7\x00\xea\x02g\\\xc4\x83s4O8\x89,\x8e\xe6\x89\xf0\x06\x89t\xf6\x93Fm\\RxB\x91SL\xf0X\xa9\xe1\x13$\x87o\x93\x1e\x8e\x0d\xb4\x8f\x07%\xde\x06L\x8c\x83\x13\xa3-f\xca\xb4q Pq*\xac8\xb9-\xb1I\x84@\xff\x9f\x00^\x8c\x04\x18\xa3!\xc6\xcf\xa5\xaaS@\x8d!\xb0q\x12\xdcH\xf3L\xbfD\x17I\xf3L\xfcs\xdfj\xfc\xadfg,Y\xa6oM\xcfhM\xd6=\xaau\xb5\x1e\xd2n\xc7\xc5\xfb&\xa2\x82e\xb1\xe1\xb9H\xca\xbf\x95\x08\x8bm%\xfa`\xcc\xc7\xfa\xee(d5mu\xb2\x91\xe7XZ\xc6\xb5\xae\x15\xeb2\xf9\x85\xb6\x1dp\xc9\xc7\xb4\xec5\xdb.\xf2\xb3\xa8\xb93\xf5\xf7(:\x13\x1b\x11\xabg|\xb6\x9d\\\xda\x8f\x04\xdc\xac\xda\xb4p\x1fK\x16\x99\xb3\xd7\xae\xaa\x97\x90\xf1\xa5\x01\xbe\xd9\x9a\x1d\x08\xe3R\x10~v\xc1\x93\xe8\xfd\xa0q\x05[-/v\xc0\x99\x0d\xa7\xb7\xdb;\xa7\xcff\xbcS\xbf?\xa6\xd5\xc6\x1bV\xb7h\xb5\n9P\xe0\x0e8OE\xc2\xca\xab\x1b\x1a\xba\xb4\x0f\xfa!,d\x92\x15i'\xe8Km\xf9\xd8\x81\x92\xfd\xa3\xf7\xcc\xd3\x8e0J\xef\x82\xc9\x079\xa3Q\x96\x1a\xe6\x89F\x14\x13\xb7\x88:\x06+\xf4\xa8|\xd0\x9b1A\xfd\xd4\xf8\xb2\xc3\xf6\xdc9\xc4\xabw\x8c\xd1\xbcG\xf3\xde\xbe\xc48\x81/y\xde\x1b\xc7H}d8\xe7\xda<\xf9S]K\x9e\x8fA\xa3\x0d\xa7\xf3\xd6\xbd\xf8Z\x9b\x1a\x1c\x95\xc0\xb5\x11\x1bf\xaa\x8d\xbe\xe5\x9eyLfJu\x0d\x854\"\xc3\xe4\xcb\xdeNS\xb7\xf3\xc5\xe5\xf3\x97\x85u\x08\xe8q\xdc\xae\xf9\xbc\xdc^\xec\x8f8\xc2\xaf\xb14\xcd\xb9\xd6\xa0r[\"7\xe5\x06\xf4F\xda\xaf&6\x9b5\xdfU9\xac\xa5p\xd4\xe8\xe6= \xed \xb95!\xd7\x8d\xf5\xbf\xd2\x1c\\\xca)\x86\x1f\xcd\xc1wz\x0e\x1eT\xc3k\xef\x0dR\xb7\xff\xaet\x06\x0eiq\xbb\xb8\xca%j\n\xcc\xd4\xc7\x97\xf9\x81=T_\xf4&u\x02\xd4\xed\xe2]ps\x8d\xfb\x9e<\xd2Y\x9dj\xc2\xed\xffoURg\x80(\x0c\xa00\xa0+1~\xe8K\x08\x03\xc6\xf2\xa28\xbf\x0f\x1a\xbd\x9fLqt\n\xdd>\x16\x0d\xe7Q?)\xf3jTw\xd3JGJ\xb6\x96\xd5\xc7\xc3jD\xeb{\xad\x16\xbcQ\xc9%\x9c\xbf\xd2%\xd7\x10\xe1F_iW\xd5\xb2\xeexnB]\xca4\xd2\x1a\xff\xb4\xcd\xec\x08\x8ao\xcf\xbe\xd5\xf6Z\xebH\xa7\x07\xc8\x9d\\\xfaM\xa2C\xaa\xe9p\xbd?l\xb7\xe9X=:V\xef~\x1c\xab7\x85=7\xdf\xf2|\xdeH\x06\x05\xb6\x8d\xb4\xb9p\x17K\x91k\x03B\n#X&\xfe\xab\\{3\xe9\xd5\x8f\x88J\xc9\xe7\xac\xeemW\xc9\xe5Y`\\zN\xa1\xbfh`\xe1z\xd8\xfe\xe1\xbb\x06\x03t\xe8m\"k\xb4$\xbc\x06r\x12]\xe4\x14\xbb<\xc6\xaa\xc8\xc9Q\xd7FN\xe2WH\xfb\xd2R\xd2\xcb\x8a\xa6aJ\xe2}\xc90@U\x88\x9a\x88|\x06\x97|k\xcal\x8e\xbb{\xb2\x9c\x02\x86\xbf\xe76\xe9\xcc\xfd\x859\xf9\xdc\xcf\x15\xe1A\x10\xec\xee)\x9d\xed\xae\xc2\x82\xb7\xbe\x16\xd5\xb5!\xe5D\xd6\xbcE\xe4\xba\x84\x05\\\x9d\x1d\x1c\xeb/\x04\x0bM\xdb\xb6\xb0\xf6m\xc4\xf5\xf4Um;\xf2\x9937\xeb\xe16P\x97\xec\xb5f\xe6r\xf5\x01*\xdd\x9a\xc9\x95\xdf\xb6\xa4\xb9]&\x18\x0e\x1b\xbd\x1a\xea\x84XE]\xe0\xa6\xb67>\xa0\xa9v\xa3\xb9\x8d\x16R`\xe2\xd9m|\x83\x12S_\xb8\xb9\xfa\x93_\nx\xab\x18\xf1\xd4\xe7n\xeb\x9f\x8b\xec\xddN\xc6F:\xcc\xef\x82+\xe3|\xebW1\x85\xea9<\xa8\xb1\xb3\xca\xcf\x8e\xb8j\xef\xe4\xab\x8dtm\x9a\x9e\xcb\xbcy\x1e\x8d\x0d\xf2\xcbP\x83\x95\xed\xf3Q\xdd\xf0\x070\xb8\x1b\x08\xf7\x90j\xc4K\xaa\x9f\xdf\x9eWM:H\x7fr3\\\xea\"\x82\xe1\xaf\xd8\x17?\x96\xcd\xfd\x88\xaf{\x1e\x89\xb6V\x06\x85\\x\xc2\xc0^\xa4@\x99\x11\xca\x8ct%f\xae\xa7\xccH\xbb\xce\xbd\xb5\xac\x80\xfc\xfd=\x81\x87\x02)\x0e\x9b\x8bq\x1b\xcc\x0e\x9d\x92\xe9l[\xf3E\x0c\xa7c\xde\xe0\xf3\x94\x94\xf9\x8c\xc3\x9b\x922\x94\x94\x19/\x8b\x922\x94\x94\xa1\xa4LSB~\xdb %e\x06d\x8a]RR\x86\x922\x94\x94i\n%e()s\xb7V8\x94\x94i\xc9)Vm\x94\x94i\xd7\xf9^&e\xdcy\x94\xd3S3\x0fu79\xe3\xd69n\xa7\xe7\x01\x125\xf7\xf8\xf0I\xca\xd64$6$\x01\xca\xd6t\x85\xb25\xb5L1#\xca\xd6\xc4h\x89\xb25\xb5P\xb6\xa6%\x94\xad\xa1lM\x8fDv\xf7\x94\xce\xa6lM\x84\xa2([C\xd9\x9a\xbb\xb5\xc2\xa1lMKN\xb1j\xa3lM\xbb\xcew\"[3|\xfa\xc6Q>w\xf0\xe4\x90Tf^-{\xe6Jf\xbb\x88LQc%z\x03>\x0f\xf0OIV\xa4\xee\xbcm\xbc\xc1\xa0R\x82\x8f\xfa\xab\n\xf9_b3J\xbf)\xf3\xa1|\xd5.a\xfd\xeb\x94\\*\xe5\x14n\x8a\x92K\x94\\\x1a/\x8b\x92K\x94\\\xa2\xe4RSB~\xdb %\x97\x06d\x8a]Rr\x89\x92K\x94\\j\n%\x97(\xb9t\xb7V8\x94\\j\xc9)Vm\x94\\j\xd7\xf9N$\x97n\x9d\xed\xd92m\xac3\x8c\xc8\xe9\x94\x89\x9cN\x02\xc7zGY\xad\xf80Jj:\xd9\x05\xdf\xa9\xe6uH\xbe\xd4\xe1\x84\xcd\x05\xd3\xa6q\xe7\x1e\xa5fJ9\xc5 \xa7\xd4\x0c\xa5f\xc6\xcb\xa2\xd4\x0c\xa5f(5\xd3\x94\x90\xdfvB\xa9\x99\x01\x99b\x97\x94\x9a\xa1\xd4\x0c\xa5f\x9aB\xa9\x19J\xcd\xdc\xad\x15\x0e\xa5fZr\x8aU\x1b\xa5f\xdau\x1eM\xcdt3\x11p\xac\xdc\x8c\x93\xa1\x10\xfd`\x99\x9b\xc9\xbb\xb7\xd0\xab\x95\xd9\x9b\xc5\xae\x9cH\xcfj\xcd\x9c\xb5\xa8J\xe1T\x0d\xed\xd3\xea\xfb\xfd\x14#\x9f\xf25\x94\xaf\x19/\x8b\xf25\x94\xaf\xa1|MSB~\xdb \xe5k\x06d\x8a]R\xbe\x86\xf25\x94\xafi\n\xe5k(_s\xb7V8\x94\xafi\xc9)Vm\x94\xafi\xd7\xf9K\xc8\xd7|i\xdb\xb8\xaa\xf4\xd0\xa1\xf6oe\x87\xa0\xfd\xc0\xde\xd6\xae\x1bl\xe9*\xd3N\xb4\x99\xeb\x0e\xf82\xca@Q\x06j\xbc,\xca@Q\x06\x8a2PM \xf9m'\x94\x81\x1a\x90)vI\x19(\xca@Q\x06\xaa)\x94\x81\xa2\x0c\xd4\xddZ\xe1P\x06\xaa%\xa7X\xb5Q\x06\xaa]\xe7/!\x03u\xf3\x94\x90\xf3\x93l\x91\xf19:\xc5\x88\x04P\x99\xf5\xa9_\xf5\xfe\xd4E56\x94\x90\xca\xe5}\xd2\x9c]K\xd8\xf1\xd2\x1e\xfb\x127\x1f\xaab0\x14\xf1O\xde\xb3L\xcdH\xdc\x7f\x17\xc6|0\xb2\x8f\x1a\xaa\xe1h>\xa2\x98\xd8X\xe5\xf0\xb1\xfbQ\xa3\xf6\xf8x\x9d\xe6m\x9a\xb7\xbb\x123\x86i\xde\x0eN\xa2\xb7\x9d&y:_\xf0\xa5\xca9\xa6\xdc&O\x95\xdd\xa3\xed\xda\xa0\x88-7j/\xf4\x07_\xd8O\xf8\n\xed\x87\xee\x91S\x8c7B7\x08\xdd\x18/\x8b\xd0\x0dB7\x08\xddhJ\xc8o;!tc@\xa6\xd8\xe51VHN\x8e\xbaNr\x12\xbfZ\xda\x17B7\x08\xdd\xe8\x15B7\x08\xdd\xb8[+\x1c\xca\x92\xb4\xe4\x14\xab6\xca\x92\xb4\xeb\xdc[\xcb{\x86n\x08\xb9\xba!\xb8a]O\xd2@%\x86\xd31B\xae\x08\xbe\xe8\xfb\xfd\x14\x83:\x18\xbaG\x8d\xc5p\xb8\x1eQLl0r\xf8\xe0\xfc\xa8ay|@N\x133M\xcc]\x89\x19\xc341\x07g\xc9\xe9\xf3\xa0\xfd\xcfyg\x89\xfa\xe4O\xfc\xabHc\xa6A\x0c\xeb\xfdjf\xb1\x03\x91\xfa\x07[\x13\xa1]R\xb9\x15h\xb9\x00\xf5O\xdd\xb3Y\xb0\xa3\xc8 \xe3\x90\x9c\"9\xc5\xae|\x0dN\xd1{\x9aF\x81Gp\x8bNz\x91\xb4\x9byL\x9e\xce\x17\xbb\xb9H\x8f\xe3)y\xfa\xd3\xee\xfc\x95\xff\xf5\x9eyH\xab\x84\xb1\xd142 \xc2\xc3a\x0cp\x8d2\xdfH\xb056\x84\xbf\x1d\xd0z\x02\x985\x0c\xb2\x06 \xd6(\xad\xc6\xc3\xab\x87\x03W\x0f\x04\xad\x86\x81\xd5\xe9\x1a\x185\x98cC\xaa\x01@5\x0c\xa7F\xb57\x1eJ\x8d\xd7\xcci`\xd4S\x80\xa8\xb7\x81P\x03\x00j($\x81PX\x021\x9e\xd8I\xd8\x1f; \xe6^ \xd6\xac *\x07\x03\xf1\xc5\xc5[\xdf1\xf21p\xec\x9c\x0cL\xca\xcbt\xe5\x940\xe9d\x904\xaa\x83\xe3\xbb\xf74\xf0\xe8 \xc0\xd1i\xd0h\x9c\x82\x8e\x0f\x8b\x9e\x04\x14=2$z\n@\x94\xe0PJ04\x84\x12\x0c\xeeO_b\x82!\x94_hDMcI\x05\xa3\x0c\xcbJg\xb9\xe5\xb9\x0bEZ\x17\xa3o\x996\xb0\x12W\\B#\x14\xef\xc9:\xdc\xe3\x93\x98\xc7\xa2\xc6\xde\xfe$wI\xee\xb2+_\x83\xbb<\xc9\xf9dw\xe7\xaa\xc3A/\xec\x02\xd6\xf9\x82eL&<\xe4\x87aYd\x19\xf8\x87\xcb\xbc\x92+\xc2\xbf\xd0r\xb7\xbf\xe2/?\xb9\xc7\xfd\x03\xf7\xcc\xe1\x12\x1f\x04%\xa2\x98\xb85\xd81\xf2\x0fG\xcd=\xc4\xe7\x1dh\xaa\xa5\xa9\xb6+1c\xf8K\x98jo:\xef\xf8E@\xd3\xc1\x8c\xcc>>\xfc\x9f8\xff\xb8\xa0\xff\x05~\xc2?E\x93P)\xa70`\x9a\x84h\x12:\xa8\xbd\xd3$\xd4\x92S\x8c\xe1{9 I\xfe\xc9\x1d\x05=\x17ih\xf2\xd1`\x9fv\xc9\xec\x8a\xb4\xd2\x9am~\xe3\x9f\xf0\xec\xe5\xfbLi\xa9\x14\xd5\x95`\xaf\x0dPN\xc8\x1f\x91?\xea\xcaW\xeb\x8f0a\xa5\x87=\xd1\x05\xfe\x0ey\x83hWl]\x9aK\x97\x83a/\xdf]l\xddk\xfe\xf7{\xe6\x94\x9a*\xebJ\xd0\xd4\xc2\x86\xb6Ty\xc2\xfd\xe6\xa99\xcb2umW+\x0e%\x0f\x99\xe7\x81\xf8)\x94\xb0o\n9\xcc\x1e \xdb\xf1\x97\xed0\x87I\xcaz'\xcd\x9a\x1b\x91\xcc\xdd\x0f\xf3\xc5\xae\x0c\xe8&q\x96\xabrJ\xa7\xba\xd8\x81]\xe1]\xf1\xf2\x0f\xfd4\xe6w\xe5{\xce\xd3\xfe\xb4s\xff{_C\xc0\xb6\xba\x8f\xe6u\x0b\x99\xf2<\xdb \xb9\x9a\x8f\x06\x9d\x10km\x07\xe7;\x7f\xa8j\x88sl\x8b\xff\\\xfd\xd20\xa0\x87\x1aD\xc9\x9c\x14\x0ds\x1b\xa389\xc3C\x8eN\xcb:\xe1\xd7\x0f\xef\xde\xc3\x9a]qG\xd0\xac\xbe\x97\x8d\x10|\xb1\x88y \x13\x13\xa5\xcbx%\xe1\xe0@\xb0\xbdTN\xdd\x10\x07\xdf#\xcf\x0c\xb9V\x89\xda,\xca\x9c\x8aZ\x8e\xa9e\xc56\x1b\xd0k\x96s\xf8\x0e\x1a4 Sh\xf8\xcez'\x912\xa3\xf2\x92\xcbvg\x18\xc0F\x98\x8c\x074Vh\xcf\xafm\x10\x9c:\x9eI\x9f9~t\x82\xb6\xd5\xf3\xab5\xb01\xfdU\xa4_O\xc0+d\x93\xf7\x8b\xbf\x0e\xbc\xfd\xd9I\xe2e\x05h\x0eW<\xb7\x81\x88U\x8d5:\xeb=\x9c\xd51\xc9Vc\xe9&+\x8b\x9c3w\xee\xb7+|\xf6\xcd\xb8\xee~S\x86?sY\xcbe!\x137Vl\x9b\xbc\x87\xf1\xc1\x9c]\x8a_1\x91\xe1u\xa9~P\xab\xe5R$\x82e\x11\xb3\xc4\xa2XB\xce\xad\xef\xe7\xee\xbc\x11a\xca\x0fT\xd9\xafz\x84-\xf8JHi\x1bq-\xcc:\xe0\xcaw[>s\xd6\xcd\xb6B\xcf\x12\xb5 \xf9\xc2w8\xee4(\xb3vC\\v} <\xf2\x87\xdf\xf0\xcd\xd6\xec\xfc@\xfd\x066b\xb56\xc1\xfb?\xb0A\xb8\xeb\xa4\xda\x16\xe2\xd3%\xe5\x191\x9ao\x984\"\x19IX\x1eqq\xd9'\xad\xd8\xe2W\xeb9\x16\x1c\x98\xcb\xb06\xe2\x81\xbd)\xdf\xcf\x97l\xa1\xaex\xd9>o\xb7\xb7M\xa1}|!w\x1f\xcb\xc8\x01\xf7\xdb\xb0|!LnG\xdfH\x8dJ\xd7\xcc2\xe5\xed\x07\xd8p\x7fYG\x89>\xde\xd5j1\x1a\x0dU\x01\xce\x88}]\x94\xd6\x9e\x89\x05V\xd5\xbbv\x0d\xba\xd8nU\x8e\x13\xe3\x96%\x97O\ni\xff\xc7N\x87\xae\xb3u9\xac\xc6\xe3\x01\xb5\x84\xc28\xafS\x8eW\x0d.\x05.\xdc\xe0\x85\x15\x97v\xfd\x8b\x15\xb6\xab\x98\xeapB\xfb-\xd75\xc3\xe5\xbf\xfe\xc4\xac\xd5\xc2\xd3gpa\xebg\x07\xab\xaf*\xab\x94+$\xbc\xfc\xee\xbb\xd08\xfbY)X*\x05\xcfa6\x9b\xfd\x8f\xd1Gm\xcd\x98\xdc\x8d?\xc4\xe4nf\xeb\xf4s\xae6\x8f\x96J}3\xfe\xf8l6>%\x89%<\xb2E~\xc0\xd6\xbdW\x8f\xfe\xc5\x96\xf9\x0d\xfc\x19\xf0\xb0\xa1r\xff\x19V\xee\x0f\x01\xe5\xfe\x07\xbbb\x87\xd7.<\xc7\xe0\xcb~\xee\x80\xea\x13\xfa\xd1\xcfJ\xcd\x92\x8ci\x1d\xa1=We\xfb\xa2kx\xe3\xe5\xf1\xfa\x8c\xa8\xb5\xd2\xeb\x8f\x01\xbd^\xec\xccZ\xc9@D\xe5j\xf8\xb3R\x8ff\xb3\xd97!\x8btJ}\x14|\x0e-\x17\xd5~[\xad\xdb\xc2\xce\x9d\xd2_\xbd~\xf7\xf2\xed\xf9\xc5\xfb\xdf\xdf~36W\x80\xaf\x82\xb3\xf4p%\\5\xc2\xea\xfek@\xdd\xbf\xa8@\xdcfU\xfd\xec9\xfc\xcbv1\xfbY\xa9?g\xb3\xd9?\xc7_`rwf\xc3M\xfb\xd6\xd6\xc5L\xbf\xb2\\\xafYf;!\xdc\xb0\x90z\xbb5\nTG,;\x95\xf9 7uu\xb0\xb28\xd0\xf0\xa9\xff\xf6\x1c\xa4\xc8\x82\x03$\\\xc7\x91\x91`W\x9b\xd8\x0f\xa5\xe7/W\x16x\n^wn\xba\x16Y\xd6<\xc4\xaf\xd0#\xa1\xcd\xc3\x9eH\xeb\x89]D\xcf\xf0\x07\x1b\xa5>\xb4\x8b\xa0j\xfe\xb4sky\x92\x9d\xb3\x8e\xe1\xc2\xab\x89Jf\xbbr\x11\xb8\xb7B\xaf\xa2a\x7f\xac\xac)\x93\x02\x0f\x9f<\x1c.\xda\xcf\xaae\x95\xdc\x92\x93{\x0b~\xb0Tj\xb6`96\xe6\xd3\x93\xdd\xec\xbf\x1e8\xad\xb8\x85\xd3\xf8:\x11\xab\xf2\xc0\xbec}\xf5\xe0c\xff\xf1\xee\xf7\xdf\x86\x7f}\xfe\xfc\xf9\xf3\xf1\xfe\xb4\xef\xd7\x89\x8d\x12\x17\xb4\x01\x91\x0b\x91\xdc\x1a\xad\xd0\xbc\xcc}\xae\x8a\x8c\x8d\x9c\xf4\xb8_\x14b\xab\xbc\x0et\xce\x80o\x16_\x85\x87\xea\xce\xb1k\x9f\xc3\xd3\xf1/T/Y+,\xdf\xf9\xe1\xe6\xd3\x18@\xb0\x96\x0fP\xa9\x0f\x9e\xc1\x83\xbe\xe1\xd8V\xcf\xcc\xb5\xfc\xc1Y\xa8Ll\xf3olc\xcb\xfd\x9f\xaeI\xff\x16|\xc9\xb6\xb9\xf3\xceM\x1b~\xbe\xf4\x8b\xad\xb6\xd193\x11\x1a\xaey\x96=\xbe\x94\xea\xda\xed\xdc_3\xe4\x91\xb8M\xf6\xe3\xa3\xabm\xebg.\xd6\xef\x0c\x00\xe7\x05\x1b\x9f\xb7\x96,W\xc0\x9c\x1d\x0f\x17\xfe\x11G^i\xe0k\x95\xa5\xad\xed\xff8n\x85\xac\x06Fy(\xb4\x1f\x17\xc3\xe5\xe2g\xab\xa1\x01\x8f\xac\xc3*U\xb2\x97\xc8)s\x8d\x7f\xff\xcf\xbf\x7f\x13\x1aE\x872\xae\xf6\x97\xc3\xf6\x85z\xb2\xc5>\x9d\xfd\xf0\xf4\x07\xfd `'\xee\x7f'\xe2\x8c\x13wa\xa2\x17\xc2\xd3 5\xc7\xb4d\x05VU\xd0k/\x9a\xf8\xab\x90\xe6k\xdd\x99\xd9j\x86{\xb0:m\x03)5\x95\xea\xda\x87\xbc\xf4\x873\xa3\x95\x84`E\xad\xd8>\x0b\xf1\xdd\xa2\xf2$\xad\x96\xd5\xa5V\xbc#\xfc\x0f\xdf&<\xf3\xd7(|l(P\xb3+p-\xf4<\x0e\x96\x85\x1bUs\xe8\x1b\xfbP\xeb2G\x02\x1e\xf7\x07\xc6\xe3\xef\x83\x1bl\xb0\xb4\n\x1c:\xe8\xe5\n\xdd\xb2Q\x85\xbe\xba\x8d\xbf\xf2\xd9j\x06\x8fR\xb6;\x83k\xce/\xbf\x19\xaaj\xce\xd3\x02\xf3\x1fsw\x04\xf2\\H\xa7\x8c\xdb\xaa\xb9\x01X\x1ed\xdb\xd9pE\xb1W\xeaS\x9e\xfd\x1f\x85\x01\xc3.\xf9(\x9f\xcf(W,\xf71\x1f\x9e\xf0\x1d\xd6\xd4\x92%f\x08\x02\x86X\xfd\xdc\xa4\xe5\xee\xc35>\xef\xff\x0e\x9b\"3b\x9b\xd9~7\n\xf8'\x9e\x14&f+\x10\x97x\x127g\xd6\xd4\xdd \xd8\xd6\x91/v#\xda\x1e\xccH\n\xdb\xe0E\xe1^\xca\xd5V\xe5f|\xb4\xc6k`\xa8\xec\x96\xe3l>\x04\xcd\x87J7*\xa4\x19\x07c\xd1C\xcd\xe0\\\xfa\xa4\xf6\xb5\xcaS}V}\xc4E(\xdaZ\x95\x0dS\xac\x87\xc6\xa8\xc7\x9fh?\xe5#\xda\x85`\xea\x1a6\xc5\xb0\x1b\x89p\xef\x10\xe5\xe2\x01\x83lD4\xc63\x1cQ\x96\x0b\x93\xfa\x0e\xeao\xb7\xe7\xb9\xaa\x87\xda\x1d\xd4\x9c9J\xbe3bB\x81,\x08\"a\x89cM\xea\xea\x8b\x811me\xabT6\xaf\x8f\xec\xff,\n\xea\xd4\xe1\xa6\x8a\n\xa9\xc8ak-E\xd9/7.,\x18ST\xca\xafxfM\xcd_&\xf8yT\xb5W\x8bS)\xcb\xa8\xfa\xdb\xd5m\x10A\xce\xbc\x8dD7\x9bB\n\xb3\x9b[]\x7f\x16\x9d\xb5\xabpB\x85\xb9P\xcf\x7f\x1cmmHS\xd7\\\xac\xd6\x06\x0fE\xef\xf4oucH0\"9\xc8\x99#\x01g\x1b\xebn\x01\x82\xf7\x9b8\x89\xeer\xa7\xa1\x03\x157\xc5~\xfe\xe6\xbb\xa6\xbc0\xa5Z\xf9;<\xd1\xff\xd5\x9f\x10\xe8j Lk\xb1\x92\xce\x08\x84 `\x05\xef\xd7\xbc|Oh\x87\xfc\xe2`3<\xdf\x08\xc9\x07\xec\xd4-<\xc3\x13.\x94W\xd98\xfb\xf4\xe6\xed\x8d38~\xe3\x15\x15c\xc1\xd0\xbdlFU\xd1C\xf5\xd6X[J\xb7\x83\xcav\x1f\xd4\x95\xae\x11\x15\xc5X\xael\x15jv\x89\xdb\x1b\xfc\xc9\x8b8\x94\xed3\xa3\xd1a\xd5\xd1X5[\xeb\x1e\x9e\xea\xb7\xa3Q\xce@\xc46\xdbw\xdf\xdf\x967\xf1<\xd4\xde\xd4\x86z\xc3g\x17*\xb5\xb6>\x82{N\\\x8c\x1a\xf2\x13\x07Y\xb9\xc4\xecJ\x8a\xad\xb0\xdb0\xe3\x17q\xd6\xf4\xcb\xe7xYD\x84Q\xec=\xd12]L\xfc\xb8\x9cK\x14\xcf\xd7\xb3z}\xc2\x87\xc8\xbc{Bd\xde\x1e\x89\x99\x1b\x0d\x91y\x89\xccKd^\"\xf36\x84\xc8\xbcD\xe6%2/\x91y\x89\xccKd^\"\xf3\xa2\x10\x99\x97\xc8\xbcD\xe6\x8d\xd3:\x91y\x89\xcc;\xf4\x13\x91y\xf7\x84\xc8\xbc\x1d!2o\xaf\x10\x99\x97\xc8\xbcD\xe6\x8d2\xae;B\xe6\xdd*\x95=\xae\xd9\x1c\x15\xaf\x17\x01\xa5\xb9\x90K\xe5\xde\xef\xe3\xf6\xbe\xb2\xcf\x9c\xcb\xa5j\xd1{m\x89\x0f5l\x98I\xd6\xd6\x04V\xac\xb0\x91L\xea\x18L\x1e\x82\xec%\xf9V\xe5\xf9\x1f\xef\x19\xc7\xb7\xab\xd2\xae\x8c\x16\x0d\xc1\xe2\x01qk\xc3\xb2y\x08\xf7\x8fH{\xe4\x05\xf1O\x86\xe7\x925h\x8es\x1c\xe1#\xbbM^\xfbW\xce\xcb7~\xc1\x17\xaa\xf9\xa9,\xb2\xe6/:\xa7\xd1?\x1f\x0d\x94\xe6\x1f\xbdo\xb3\x133=\x05\xc2\x1d\xb1\xf4\xd3\x1eY\xed\x99:\"\xadO\x9f\x16\x7f\x14\x1c\xce_\xe1\xa2\x11\xd0\x0e\x86\xeb\xaa\xe7[\x9eo\xb9)X\xc4\xc8\\(\x95q&G\x9e\x8bM\xf6C\xe7\xdb\xee\xdc\xe7e\xc6V6j\xd6ku\x0db \xc2<\xb4\x7f\xae\x9fB\xc4W>\xae\xff\x80#b<\x08\xfem\xff\x05\xdd\xe4 \x995\x17y\xc9\xa2\xe3\x7fx\x8c\xbc:\x8f\xf0z-\xb2\x08\x8c\xdaG\x8eUR\xdf\x1f\xc3\xec\xf6\x17\xcc\xec\x9at\xb0\x02\x08\xba7*1\xfe!f\x80\x81\x16r\x95\xf9#{\xdd)\xba\xd9n\xb0Ml\xc5\x84\x04%\xfdF\x90\xb2\xa6\xe3\x9f\xc9\xf9Rd\x19O\xcf\xe0\xdc\x0e\xf4\xb4<~Zs\x0fu\xd5tn\\c\xad\xb8\xa9\xde\x81\x94\x89l7\xc2:\xac*:7\x03\xf1\xa5\x93\x18\x16Z\xa78\\>\xe2\x81\xc9u[+:s\xde\xd8G\x81@t\x90\xba)\x90\xd4\xe8N(N\xe1J0w\x8etu\xca\xb4\xcaa\xb1\xc3~\xd0\x86m\xb6\xc1\x11t\xb0\xf8\x11\x8fx\xc5\x93\x90\xe7X\xf2\xe8\xc3\x95&\xdf\xa8\xe4\x12'\xb5\xf7~\xa5\xcd*\xe8\x0b\xdb\x85\x05\x9e\x81\xbb\x0d\xa1:Z\xfb\x1f\xfe\x0f\xef\xc7O2\x87x\xef\x06x\xdez1z\x06\xbd\x93\xc7\xf0\xd3\xae\xacH\xd4\xc3\x11\x95\xb4\x0f\xfe\xa6l\x8b\"\x1e\xfci\xf7K\xae\x8a\xb1\x9e\x85FT\x1c_\xdb)\x9e\xd2J\xbb\xeb\x9a$w\xd3\x00/\xeb^t\xc32\x19\xcb\xe0\x95\xc2\x05\x02\xe3\x0b\x8e\xb9\xe1\x86i;\xe2fy0xY\xfex\xb6:x\xb7\x00L3\x13o\xb9\xee\xe6\x80\x069\x1b[\x8e\xb7\xb7\xb7\xaem\xbf\xe68\xcc3\xa5\x90\x14a\x94SI\xa0\x03c\x0e\xaf\x87i\xf5\x9e\xda\xbf\xcd\x83\xecK\x92\xb8\xebH\xbc\xb1\xc3y\xddL\xc9\x15\xcf\xeb>B.\x03\x82\xd6%\x14\x1f\xee\xed\xf2\xe5Y\xfdI\x97\xbfE\x02\x91TH\x05\x90\"\xb3nT\xee\x19\x95\xf3\x1b\xe1\xaf|l\xfb\x90\x8f\xe3FS9\xd0\x03v\xc0\x94K\x18\xe0\x06\x1d\xf6\xbe\xacs\xd5c\x8b\xb2\xaf\xfc\x0d\x01\xb0@\x0eQ\xbb\x83j\xfd\x87\x95X\x7fbr\x0f\x95\x1d`\x8b\xf8\x18\xf1)t-\xe5\xfd!\xde\xdaL\xb3\x855/\xc8V\xa0b\xba\x0c\xdf\x83\x00\x13u\x8a5x\xa9\xa4O\x9e\xe2\xe4\xa4M^$\x0d\xca\xd0\x1f\xedZ\x16[%!\x15\xcb%\xc7\xc3\xa4\x93\xf2e\x1dhp\xc7\xf0\x11\xb4j\xabZCR\xb27K>\xe1\x19\xa4|\xcb\xdd5\x101$\xb5\x96\xc3\x1eVR\xa2\xc4\xd86\xd2\xf0\x92\xc6I0\x7f\x15\x1d\x81\xc4\xc7 \x91\xce~\xd2\xa8u;9\x0eX\xe4\x14\x13\x04x\xa9\x84\xac&W\xe6'\x18\xbf\xf9\xa75\xcfX\x9ba\xd2W7D\xdd\x00\xf8\xed\xf7\xf7\xaf\x9f!\xba\xe7\xb7\xaa8\xcb\x13\xc8s:\x97\xc6c\n\xd5\xb0j\x01\x0b\x0e,\x0d}B\x8b\x95\xc4\xbbMtu\xb4\xbf\xf5H+\xb5R\x98\xc2\x1f\x1b\xa7q\x816\x9aj\xb9\xcct\x1b\x94|k\xd4\xd2\xff\x88A\x07\x922\x17\x9c\xcbr1\x14\xb1J{\xc9dkc\x88\xdb\xf3\xed\x8fRp\xbb\x8a\x07\xdfw{M>\xdf\xdd=\xf5\xf7\xab\xd3 \x9a\xbb\xb5\xeb(j\xb0(Yl\xfc\x06\xf4\xf9\x96\x89t\xae\xae\xc6\x8eU\x98\xdc\x96\xd8$B\xa0\xff\xfbjY\xb6\xb8>\xa1\xc0\x19\x86?\xa7\xa0\xa5\x08\x0f\xbc\x8d\x1bB\xa2\xec\x18\xb0\xb3\xa7-~\xf0Q\xb7\xd2\x0c\x1e\xe6\xf0\xb9T\xd5\xaa\xde\xbe\x8e\xfa\xb4\xb3f\xda\x0d\x9a\x86\x06\x02\xc1;\xcbr\xce\xd2\xe1i\xa1\xb1\xd8\x9d\xd3<\xd3\x12\x9ag>\xe3<\xb3g\x97\xb8f\xeb\x9dA\x9a\xf9\x9aqs\x8f\xed\x80_\xcaL\x1d\x93\xdeH\xdd7\xf1\xa6*\x07\xfc\xd6\x1f\xd5\xb0s\xe1\xa0\xdb\xcb*\xb6\x02\x95v\xbd\x1ea\xbaif\x84^\xee \xe19n\x82j\x84\xa5\xf0\xb2\x8a\xa2}\x1e\xb0d \xd7\x0f\x01\xcbU\xe1hT\xc3\xdfh]s\xe6\xfa\x94\xc1J\\\x95\xcba\xdb>\x1b#s\xda\xd2X\n!w=\x12\xe3\x82\xcd\x17\x8c\xdc=\x08Cw8\x10\x1f\x8bT?\xf9\xd3\x1dT2z{-z\x8fs\xeb\x10\xd8%\xafI$ \xdc2\xb2I.\x19`\x95\x94C\xb7\x8cg[0^Y\xbc\xff\xed\x9e\xe1v%\xe9A\xcf\xedT7\x1f\xcf\xba\xdd\x05\xd3\x8faiL4\xda@\x80\x19\x93\x89\x8c\xfa\xa2\xafz\x05Goyn\xff9\xe8\xa5\x9c\xf4\x16M\x13\x07M\x1c]\x89\x19=_\xc2\xc41v\x8d\xa2\x9f\x0e\x1a\x05\xde\xb5k\x14\x87\xe6\xb4\xf2O\xe2\xbfx\x8a\xa7\"\x8d\xf0P\xce\x1b\xcf^\xd8G\xabI\xacN\xf96\xcbC\xb5\xf4N^{%\xf9\x87\xee\xd9,6\xa4\xdc\xae\xdc\x85!\xe8M\xf8\x80c'0\x7f\xd9E\x07[d<0\xb9;\x89\xfa\xf4\xf1\xe7`\x9a\xdfh~\xebJ\xcc\xe0\xfa\x12\xe6\xb7\x9b\xcf!{#yd\x0ey\xe3\x9f-\x81\xb5z\x0ei\xd1e4\xa6+\xd0e\xf6\x92\x18\xed\xa4\xb1W\x94\x7f\xf0\x9eM\"C\xda\xed\xca\x01\xec\x9c\xa2\xf9\xa6\x90\xb7\xeb\x11\xf2v\x13\xef\x06\xe8\x1c,\xeb\x8f\xba\x1ftj\x15+[\x7f\xad\x17\x03\x04\x8d0l\x82\xeel\xcb\xc3\x1f\xe6\x1f<\xe4\xb0\xfch\xeb\xac\xff\x12\xa0i\x1e\xf9_y\xcd\xd6a\x9c\x8b]\x88,R^,\xe1\xefB@\x93i\x18\xa9\xff;\xa4\x8ak\xf9\xff\xfd?\xff\xaf\x01\x96\x18\xc7S\xc6\xe3\xf1\xcb\xef\x8f}B\x18\xcd\xb3\xe5\x19,\n\x039C\xbe\x9f;^\xa8\x07\xb0n\xa3\xf9\x98\xc6t\x8f\x8d}\xc0\x81YiKa\x84=x\xa1I\xa7G\xc2#\xfe\xcb\x9et\x1a\xd8\x83.\xb6<_f\x85H\xab \x87%\x89*\xf0\x10\xea\x8c\xaf\x18\"\xa1\xd9|\xab\xb4\x03\x01\x9f\xfc\xe9\xff\xae\xf2\xb9?\xb0v\x0c\x95x\xeb\xa7%\x96en\xd7G\xa1y\xfeP\xe3\x89\n\x903\xb9\xe2\xf0\xf2\x0dT\xa5\xbb\x81\xcdr\x0eu\xc5\xdc\xd1\xffi\xef\x14\xf6A\xf3\xfc\xa5B\x7f\x84\xe7\x0c\xbd\xab\xde\xba(\x8b|U6\xc3\xbf\x7f\xcf\xa66\xec\x1b\x95\xcd\xad^\xab^\x9a\x8f\xee<\xbd\x0b\xc3\x07\xcf\xf3j\x1a\xd1\xadG@\xd5\xf6c&d\xba\x82\x9b\x1dN\xf9A\xbd\x93f\xcd\x8dH\xe6\xf6\xd3\xe1\xef\x06\xc9.1\x9de\xa5\x90)\xcf\xb3\x9d\x90\xabyD\xa3!\xbe\xe1\x10\xdfx'\xf1!\x92\x93\x0fU\xcd1\x1b\x00\xe7\xaf\xea\x0di\xd5/6f\xbart\xe5\x87\x1a\x84?\x07\x10O\x8f-5\x1e\xa2\x9f8k(\xb63\xeb1\xca\x97\\\x9a\xe1\xd7\x0f\xef\xde;\xea\x08\x93\xcd\xaf\x867-`A\xa1\xc8\xd2\xc9\x04}OU\xe1;[\x8bW\xcdH\xb3n`\xfb\xca\x10\x06\x89\xda,\xea\x104\xac\xb4\x15\xdbl@\xaf\xad\xcf\xff\x0e\x16\xca\xd1\x98\xb5a\xa6\xd0\xf0]\xed'\xc2G\xc6\x03n\xddI\x83tK\x98\xa6\xab)\xb4K+q4<(\x8fg\xc4\xbdk\xb2jw\xcbn\x8a\xadv\x87\x04\xf9={=\xbfZ\x13\x0d\xeb\xd8\x1f\x9e\xaa\xf1\xdcY\xa3\xa0\x90xX\xac?L\x10\x7f\x1d-#&e\x0e\xd3\xd4:\xd5\x04\x9b\xbbPp]\xd0\xe4\x19\xb1\xee\x80\xc33JM\x91\x07\x8fk\xad\xeed\xda*\xe1\xe8\xc2ug\xacY\xb5a\xe2P[ \xde\x95\xd5DO$4$9g\xb8\xc2\xba\x129\xee\xc2t=\xebw\nJ~]\xb3\xa6\xa6\x0c,\x95\x8b\x15\xde?\xe0\xdef2mhH\x17\xcb\xa5\xf84\x83\x17\xae\xe5\xe5.\xaa\xaeu\xf9\xba\x05\xa9\x9e2\x05\x1b\x12\x1a<\xd6\x86%I\xb1)2WK$\xae\xa1W\xc8\xb4]w\xdav\x16\xdb\xd4\xdd\x81\x83\x9bC\xfd\x06\xc6\x1c\xb4H\xf9\xd9\xf8\x87\xcc\x9a\xef\xf0\x1ce\xb7\x9d\x84iX\xe6\x9cg\xf8\xaf\x86\xfb.\xb6#\xfb;],h\xa3\x840\xcd\xf2\xc0\x13\xe8a}x\xb8\xfa\x10_\xdc\x14\x0b>\x0e?\xf4\xe8\xec\xd0\x9bsC\xed\xd3W,\xe3\xd2\xcc\xddB\x84L\xa7!d:\x8arI^(\x97\xd4#1c\xfc`\xb9\xa4i\xe3\x91\xae\xe6\x18\xfd\x82\xa1\xab9\xe8j\x8e\xf1o\xd0\xd5\x1c@Ws\xd0\xd5\x1ct5\x07]\xcdAWs\xd0\xd5\x1ct5G%\xa1r\xe9j\x8e1\xa1\xab9n\xabu\xba\x9a\x83\xae\xe6\x18\xfa\x89\xae\xe6\xd8\x13\xba\x9a\xa3#t5G\xaf\xf8|\x15]\xcd\x81M\xa2\xab9\xe8j\x8e\xcf{5\xc7\xd8&\xd9=\x9eb\xa3\xc4#l\x97\xbd\x1d\xd9\xb2\x90%6-W7\xe0[N%E~h|\xee/e\xfb\x89\x17\xf9\xf9\xa1 \xe2Ev$\xf2\x83\xc4\x8b\x8c\xce\x99\x95B\xbc\xc8=\x99\xaaB\xe2E\x12/\xd2\x10/\xb2_\xa6\xb4\x84x\x91\xc4\x8b\x1c\x93\xe8\x01\x14\xae>\xc4\x177\xc5\x82\xef=\xb9\xad+\xc4\x8b$\xd3\x894\x1d\xe2E\x12/\xb2+1c\xdc\x10/\x92x\x91\xc4\x8b$^dC\x88\x17I\xbcH\xe2E\x12/\x92x\x91\xc4\x8b$^$\n\xf1\"\x89\x17I\xbc\xc88\xad\x13/\x92x\x91C?\x11/rO\x88\x17\xd9\x11\xe2E\xf6\n\xf1\"\x89\x17I\xbc\xc8(\xe3\"^d\xf7\xe4\xe3>Zd\x96\xcd\x99\xd6\xdc\xf8WCGK\xe6|%\xb4\xe19O\x9b\x07G\xba\x12\xca\x80\xa0\xc5\x91|\x91e/\xf0W\xff\xe3=c?6u\xd7\x15s\x07\x90\x9d r\x1b\x95\xa1\xc1V\xce\xf1\xd1\xb1\xa2\xa2\x88Gh\x0d\xef\xd1g\xcaT$\xccp\x0d\xd7k\xee\xb3\\|\xcf\xac\x1c\xa9\xcb\xf3+\x1cd\xabr\x1bWd\xdbq?\x82\x94\xae\xdb\xb6\x1c\x80\xcb\"\x00}?\x86\x9a\xf8[\xb5\xee7\xac\xf0\xf4\xf7\xde\\\xbc\x0b\xd4{\xe0\xc5\x16\x119PD\x89\x13O\xae\xb8\xef\xe2\xcek\xe5\xc5\x99Hcb\x02\x13n{\xdd\x88\xd3\xa4\xe3\xeaH\xb5\xc1\xe7\xfe\xd2\xad\xcf\xa0\x0f \xdc\x9ap\xeb\x1e1\x84[\x13nM\xb85\xe1\xd6\x0d!\xdc\x9apk\xc2\xad \xb7&\xdc\x9apk\xc2\xadQ\x08\xb7&\xdc\x9ap\xeb8\xad\x13nM\xb8\xf5\xd0O\x84[\xef \xe1\xd6\x1d!\xdc\xbaW\x08\xb7&\xdc\x9ap\xeb(\xe3: n}c\xb0XH\xc3\xf3\x0dO\x05\xcbws\x7f\xa8N$v\xdc\x80\x84\x9a\xa5@Y\xca\x10~|\xdex\xf8\x85\x7f\xd6?z\xdf\xd0\xe4\x96>\xbbb\xee\x00\xe2r\x18<\xf9\x8ae\xc8\x89\xb8uA+V\xac\xf8I\xcf\xbf\xb9\xfdiA[\xb6\xf2\xfb\x8c\xc7\xba\xf9V\xf7$K\xfe\xc9\xcc/\xf9n\x1c9\x0b*%*\xbd\xe5!\xe1\x7f\x8cAfe}\xca\xb33\xec?}>\x97i\xed\xb2\xd4\x17l\xc5\xdf\xf2?\n\xae\xcd\xcc\xfd>R\xa0;\x81\xc1\x16e\x8b\xb6*\xe5\xb0Q\xda\x00\xc7\xac)\xa6T\x87\x06\x822l\x040\x9c\xa4\x98\x80\xad\xc4\x10\"\xb0:\xa8\x17\xfc\x87,6\x0b\x97\xf9+\x13\xf5\x8d\xc4\xf0\xb2\xa5$w\x9e\x19\xbe661]3\xb1\x0c\x0b1y\xea\x06\x8d+\xd8jy\xb1\x03\xce\x925\xb0\xed\xf6\xce\xe9\xb3\x89\xc2\xd7\xef\x8fi\xb5\xf1\x06\xd47\xa2\x98\xbc\xe0`\xffQ\x9e\x8aP\xc1 \xa5.q\xa3\xbd\x1b\xc2B&Y\x91v\xc2E\xe6J\xaep\xa5N\x7f!\x02\xd9H\xacZO_\xb7\xc3\xf6\xdb\x87s\xdd\xe9\xabNU1b\xce\xb9\xf6\xc83\x0e\xadz,\xda\xe16\xf3#I\xac\xa4\xca\x1b\xa3\xaf]\xack\xf51\xbar\xa1T\xc6\x99\x1c\xeb\xb0\x9c_\xf1\xbcU\xdcXg\xf9\xa7\xbb\x1d%\x1a\xfc\x8c\x9c\x0f\x8c\x01[.w\xc4\x05\x95\xa7<\xeffY\xde \x99\xf0g\x90(\xbdQ\xfa\xb1N/\xe1\xfb\xd9_\x7f<\xbaVnL\xfd\xab\xff<\xaf\xef1\x19\xe1\xfe5\xe6\xc4\x92\x06X\x1b\xa6\xbf+A-a\xc33\x95\xee\x1a\xec\xc0l\x07\xee\xa2\x8bY\xe3\xfd\x9a\\R\xdd\xd4\xe04-\x95\xe1\xbd\xcc\xc1\xf7\xf6;\xf5I\x15\xaf\xea*\xfb\xa7\xef\x19y\x10\xf5\xba\xdf3{\x8f\xf5\xf9<\xa2\x9c\x10\xe5\xa4+D9!\xca QNZB\x94\x13\xa2\x9c\xf4\nQN\xbaB\x94\x13\xa2\x9c\x10\xe5\x84('D9!\xca QN\x88r\xe2$B\xebD9!\xca\xc9\xd0OD9\xd9\x13\xa2\x9ct\x84('\xbdB\x94\x13\xa2\x9c\x10\xe5$\xca\xb8NB9\xb9\x19\n\x87\xe7\xf0o\x8a\xcc\x88m&x>\x8c\xbd5\x017\x0f\xb0\xd5\xf7\xc8C]\x82[\xce\xfbI\x04\x89%9O\xec#|\xab\x92u\xff\x89\x1c\xb6\x12\xbfV%\xf8G\xee\x19\x98\xe6t6o\xdc\xbd\xdf\xd5zWF?\x06\xc1\x0fZA\x9d\xcf\x1dd?\x8e\xb9\x04S#\x0dTj\xf0\x80\x82\xc0Y\x1eQ\xdf\xf1G\x1c\xec\x9d\xf6\x8fe\x9f\x95L\x9c7\x17\xf5\xcd\x0d\xcd\x9b\x1c\x06\x8a\x0d\xa9\x1abj\x17\x97\x88\xb1\x11\xc8\xaf\xd8\xd7\x8f_W}\xfd\xb8\xb6nx\xcb\x13\x95\xbb\x0c\x1ev\x0f\xd8`e\xc9s]\xfa;?\xba\xaeUn\xd6p=\x18O\x99\x9c3c\xa3\x9a7\x17\xeef\n\x1bL\xae\xd9\x95\x90+\x17\xb3\xb1,\xb3\xc1\x8a\xff\xc8\x0c^_qi\x1c\x84\x81\xe9K\xfb\x7fv@\xa4\xc3\xb8U\xcd\x98\xf1\x81\xea{\xb1\xe1\x8f\xaf\xb9X\xad\x0dO\x1f\xb3+\x9e\xb3\x15\x7f\xecj\xfcx\xc1\x12\xcc\xa4.\xcbd\xa04\"\xe7\x90z\xbf7\xf4\x91\xba\x8e\x8f\x9f\xce\xe0\x11\xe6\x8e\x17;\xc8\x94+\xedz\xcd\xccCL\xf6\xd88\xb7\xa96\xd6\xcey\xc36\x17j0\x8e\xc3\x974\xe4\xfc\x9a\xe5\xa9\xfe\xa6DT\xb0@\xa9\xae\xcf*\x9dH\xe5H2\xef\xff\xf6\xe2\x02\x16\x85\x01!\xb5\xe1\xcc\xc5\xe5z\xab\x06\xa1\xb2m.\x12\x0e\x9eb\xb3P\x85LY\xbe\x9b\xc1\xcf*\x87T,\x97\xf4\x13\xc1\xec{B0{G\x08f\xef\x15\x82\xd9 f'\x98=\xca\xb8N\x02\xb3\x8f\x9d\xec\x80\x18e\xa3\x94Cm\xb7m-\xa7o\x81\xf3ci\xf8j\xe4\xee\xda\xde;\xd7\xcf\xaa\xdb\xf5\xc5\x12\x84y\xd8\xb8M\xdf=T\xdd\xa6_\xb5l\xcd\xf2\xfe-\xb5\xd5%\xf1\xfe\xc7{\x06\xfaw\xd5\xde\x95`\xb6\x84\xcbb\x10P\xef\xbd\xb4\x7f\xf4\xb2\xfd\xde7\xde\\\x8c]\xee\xdf\xfb\xcaK%\x13.\x0d.\xe6\x87_.\xb1\xc9\x89\xd5\x0c\xddq\xd0SZu\xc4\x81\xaeL\x13S$]\xeb\x15z\xc8\x11\xb1\x16\x8b\xe0\x0c\xb2\xad\xc7\xd4mD\x03[\xa52\xcc\xe3&\x8d\x86w\x1f\xa8J&L\x960\xd9\xae\x10&K\x98,a\xb2-!L\x960\xd9^!L\xb6+\x84\xc9\x12&K\x98,a\xb2\x84\xc9\x12&K\x98,a\xb2N\"\xb4N\x98,a\xb2C?\x11&\xbb'\x84\xc9v\x840\xd9^!L\x960Y\xc2d\xa3\x8c\xeb\xeb\xc6d\x1f\x8c\x82\xb2\x89\x92\x12A\xa0\xb9\x90\x86\xe7\x1b\x9e\n\x96\xef\xe6\xfe\xce\xfe'\x7ff*\xb9\x9c\x8b\xf4\x9f\x0f\x861\xdb\x12\xa8m\x16P^\xfa\x0fU\xf9\x98\xc7j\xc2a\xee4d\xdcbi'uQ&\xa0Z\xd8\xec\xcb\xf2\xf5\xf3F\xe1/\\\xd9\xfe\xf9\xfb\x06\xd7\xba\xc6\x8dAD\xb7\xda\x8e}\xfb\xfd\xd1W,\x9b\xb34\xbd\xcd6f\x80\x15+V|.\xd2[\x15\x12yg\xbd\xad,\xd7\x01\xd4\x8bN\x8fn\x0bA\xa8=\x12\x1e^\x04\xa1\x12\x84J\x10*A\xa8m!\x08\x95 T\x82P B%\x08\x95 T\x82PQ\x08B%\x08\x95 \xd48\xad\x13\x84J\x10\xea\xd0O\x04\xa1\xee A\xa8\x1d!\x08\xb5W\x08B%\x08\x95 \xd4(\xe3\xfa\xec\x10\xaa\xc7!\x1b\xe5\x08\xf9\x0c\xd3\xc0\x8d?\xd5\x18\xaa\xc9\x8b\x1b@\xa8Nz1\xa5\x1b\xedx\xe5\xda\x88\x0d3\xbc\xff\x92\xd9\xb9\xbb-v\xbe\xd8\xcdq\xd5\xcd\x8c\xca\xe7\x0dx\xae\x0fk\xfd\xb7\xfe\xdbg\xeb{gY\x9ds\xc0\xa2\xc0\x7f\xaf\x02`\xcb_\xabO\xd6\x06\xf4\xde\x9f>\x9b\xb1\x05\xcf\xec\xa8\x90P\xb6\xe0\x0c\x16\\\xa8$0\xbfu.\x8d\x9fK\xaa\xc4akBqA\xf2p\xe1Z\xac$3E\xceu\xe5\xfblt\xbfR+\x85N\xbb\xb6\\B\xb3 \xcd\xeeJ\xcc\x186\x84f\x13\x9aMh6\xa1\xd9\x0d!4\x9b\xd0lB\xb3 \xcd&4\x9b\xd0lB\xb3Q\x08\xcd&4\x9b\xd0\xec8\xad\x13\x9aMh\xf6\xd0O\x84f\xef \xa1\xd9\x1d!4\xbbW\x08\xcd&4\x9b\xd0\xec(\xe3\xfa\xechv\x8d\xf7\xfa\xbd\x89\x8d\x12\x8f\xb29\xf8\x8e\xecE\x1eE\xcbQaz\x18\xfb\xbe\xc0\xdf!o\xe0\xde\x08\x88bZT-\x9b{\x8bk\xdd\x97\xa1H\x0bN\xaeadW\xa6\x7f\xe6\x9e\xa1\xc5M}v\xa5\xd5\x0c\xf7`\x05{\x1a\x8c\xc1J\x05\x96\xf3\xebF\xa5E6\x90\x14\x19\xad$\x04+je#\xa4\xd8\x14\x9by.\xf4\xe5|\xc9\x123\x04\xf4Al\xee(6O\xd3\xfbm\xeb\xb5]:4)\x0c( \xbf\xbf\xfb\xf5\xf7\xe6e\xe3.hQK\xc8\xb6\x0e%\xd66.\x1bs_\x9d\xad\xefxEru<\xf5\xbf\xfe_\x0ei\xf1U\x01[\x15\xf0U\xb9V\xf9\xe5\xe0\xa1\xd1\x80\xb4\x00\xc0=\xe3<\x7f\xbc`\x19\x93\x89\x0b?\xfd\x06\xfb\x92\x1b\x82\xe9Z!\x1fj\xe0\x9f\xb6J\x17\xb9\x1d>p\xc5r\xa1\n\xed\x0e\xa7\x1e\xfb\xc8\x95\xca\x18\xe6m\x04\xd7g~\x1a\xbb\xe2\x98\xe4.\xdbc\xd5\xf50\xe7Zh\xc3\xa4y\x88\xc5\x97o\xed\x06,\xc7\x1d\xb4\xed\x87\xb6\x9b\x82\x1a\xb6W\xde\xe2\xdc\xd0\x9d\xb3\xc3\xaa0\xc2\xb5 \xd7\xeeJ\xd8\xdb\x10\xaeM\xb86\xe1\xda\x84k\xb7\x85pm\xc2\xb5 \xd7&\\\x9bpm\xc2\xb5 \xd7F!\\\x9bpm\xc2\xb5\xe3\xb4N\xb86\xe1\xdaC?\x11\xae\xbd'\x84kw\x84p\xed^!\\\x9bpm\xc2\xb5\xa3\x8c\xeb$\xb8\xf6\x8d\xb0\xdd\xb1\x0d\xd0\xc3\x88\xef\xc0ng\xdc\xf6\xda\xc4\x84\xea-\xc4%`\xe4\xff\xa2\xf2\xb3\x1ak?\xf3\xd8wU\xa6\xc9\xc56\xe3\xbd\x1b\x8e\xf76\x1a\x0b%_l\xee\xf1\xa9\xd3#\x9bl\xcd\x1d\x80kh+1m%>\xa8\xc1\x13\xe4\xda\x92S\x8caC\x90+A\xae\x04\xb9\x12\xe4\xda\x10\x82\\ r%\xc8\x95 W\x82\\ r%\xc8\x15\x85 W\x82\\ r\x8d\xd3:A\xae\x04\xb9\x0e\xfdD\x90\xeb\x9e\x10\xe4\xda\x11\x82\\{\x85 W\x82\\ r\x8d2\xae\x93@\xae\xe3w\x0b{\xa4\xf3\xf4[\x89\xbf\xd6]\xcc\xe37*\xf7B\xdd\xfa\xc9\x9f{\x1d\x15s\xa72f\x9d\xd7\xcdC\xb2\x9b\xbb\x9c\x95\xf6 W;,Z'\x7f\xfbO\x05v?\xd7\xd8\xb6\xfei\xf7\xaa|\xc9\xbfs\xcf\x10\xee~\x06B\xce\x13\x95\xa7w\x184\xdb\xb3\x9a['\xc2\xf6F\xed\xadK\x1c`t\xf4K\x84^ R7\x10C\x0c\x80\xd8V@\x14A\x00\xe2\x8b\x8b\xcd\xee\xc1Q\xc8\x02pl\xc2\x00L\"\x0dt\xa5\xdeJ?w\xfb\xd4\xc9t\x1aB\xa63h:\xb1\xaa\xe9\x9b\xe5\xde\xa2\xb7\xc7F\xd8>(\x12\x0f\xb9\x18\x05B\xa6\"a\xa6y\xd4\xc0p\xfd\x1b\xf3\xba_~\xfa[\xfb\xcb\x15\xb66\xb6\xa8\x0dK\xd6Bz\x90\xbb\xd0<\x87e.\xb8L3\x07\x1e\xf6\xb5\x90nx\xe8\x95\x88bb\xed\xe2\xf0\xc3\xe5\xa8C\xe5&\xc3\xc4\x19\xd14\x0f\x1b4\x88\xb09\x04\x8c!\xa2\x0fC\x86\x10,\"\xce\x08\x0em\x02G4\x80\xf8\xee'V\x1e\xb1\xf2\xba\x12\x1e\xb3\xc4\xca#V\x1e\xb1\xf2\x88\x95\xd7\x16b\xe5\x11+\x8fXy\xc4\xca#V\x1e\xb1\xf2\x88\x95\x87B\xac\x15q\x00\xf5M1\xab2\x03R\x1aUY\x8dr\x0d\xdc\x1e4\xc8\xe0\xb0\xaes\\\x0f\x8eg\x05[%\x1c\xcd\xadV\xfa\x9aik\\\xb9\xe1\xe9\xad\xe3\x91\xb2j\xe8=\x84\x86$\xe7nM\x7f%rS\xb0\xcc\xf7\x1c\\\xafy\xceA\xf2k?N\xec\xa3\x91\x03D\xe5b%$\xcb\xfc\x9bv\xfe\xaa5\xa2\x8b\xe5R|\x9a\xc1\x0b\xd7Zk\xa7\xb6\xb1]\xcb\xf1\xf5Rcyg\xe9.Jv >\x96$\xc5\xa6\xc8<\xe1\xc2\xa8\x1cM\x8aeZ\xc1\x82\xdb\xf6\x15\xdb\x14\xa1q\xfb\x9a\x92\x98\xba\x11<\x07-R~6\xfc\x11\xb3\xe6;d\x93a\xaa\x07\xb9^9\xe7\x19\xfe\xab\xe1f\x8b-1\x86\xbd\x10c\xb8Gb\x82\x10C\x8cab\x0c\x13c\x98\x18\xc3\x0d!\xc601\x86\x891L\x8cab\x0c\x13c\x98\x18\xc3(\xc4\x18&\xc601\x86\xe3\xb4N\x8cab\x0c\x0f\xfdD\x8c\xe1=!\xc6pG\x881\xdc+\xc4\x18&\xc601\x86\xa3\x8c\xeb\xb33\x86O|p\xdd\x17\xc1\x17n]\xca&\x94<\x04O\x18\xd7\xbf\xd5\xaa\xbeIM\x1a\xe2\x05\xfb\x92Z\xb4\xe0\xf7\xb6f5S\x8a\xe8\xc0\xfbb\xee\x00TEt\xe0\xf15T\x90\xea\x02\xb1\xad\x80(Z\x1a\xc4\x17\x17\x9bS\x83\xa3P\xd4\xe0\xd845\xb8!U\xcd \xd1\x81\xc9tnd:\xb1\xaa\xf92\xe9\xc0\xad\xa9\xc9\xcd\xa0w~n\x8a\"\x85\x1dp\xd4N\x98\x10!~\xc8A\xd7\xb6\xf6>TR\xd0\x16\xa3gC\x83}\xce:\xe4\xea%\xbb\xc0U*\x03\xe1\xd2K\xae\xcc2\xf1\x9b\xacY\xbe\xaa\xa8\xbf\xd5\xad\xf6\x08z\x83\xe4\xd7c\x0d\xf1Y\xe9\xf7\xbe@\xa1!\xcd\xd9\xb5\x04\x1b\xa8ci\xbf\xea\x15\xd6\x80ce\x1ej\xcc\xa7\xf0\xbc<\xf7\x17\xd9\xa9c\x1f09\x93z\xc9\xf3\xbcNL'j\xb3)\xa40;hn\xdc\xeaJgx\xae\x98\x9e'J\xeab\x13\x1c\xa6\x01\xf3\x1c\xd8\xb1\xd4\x95\x1bv\xd3/L\xbft\xd5l\xf5\xd6\x8aiH\x946\x18|\xbaF!d*\xf9u e\x8d|\x017\x88\xd8\xff\x93>\xc5\x8f\x88\xae\xde\xb2\x8d\x0dz\xacre\xc2a\xc3\x935\x93B\x07\x08\xbd\xef8\x7f\x06\xc8\xdb}\xf6\xe4\xc9J\x98u\xb1@\xbc\xf2\xa5\xd2\x9b\xbf1\xbdq\xf3\xeb\xe3r\x82\x15Z\x17\\?y\xfat\xaf\xc8\x96\x86p\x9avs[\xf3\x14\xdcV\x08n\xbb\xa7J\xcf\xe1\x0bO\xfc\\l'`7\xea(\xca\xf6BQv\x8f\xc4\xcc\x8d_B\x94\x1d\x11\xe4~Zr\xae\xab\xf0v\xc14\x9f7f\xfc\xb8-\xb3,\xcbp[\x88s1\xe5\xe9\xed\x9ed&rHT\xeeFL\xea\x0eYW\xd9@\xfc\xfa\xe9g\xce\xf5OL\xbbY\xc0?r\xcf\x82\xd7\xae\x8a\xbb\xd2\xdb\xdb\xe4\xa4\xc8Iu\xe5\xbe;\xa9\x07\x83^\xca\xc5l~Cz\x89\x11F^\xecf\xdf:\x7f\x05\xad\x9b\xdc\xf0\x967\xeb\xb9\x84\xdc\x16f8\x11{a\xdf-7\x90\xdd3\xb7\xe4\xf4r\xa3Q@\xbb\xf3\xc9k9\xf9\x8a\xbc\xd6\x1d\x05\xc8\x06}\xe6\x92\xf3\xb9\x0b\xcc\x86\xfddc\xf9\xf93\xe7\xef]\x18\x97\xf7\x86{\xd6\x956OJqi\x82v\xdcW\xaf\x0e\xfb\x02@87\x90*\xeev\x9b\n\x99dE\xea\xf6\x17T\xf1\xdfYI\xe1e\x1a\x84\xd1\xa0\xae\x1b\xac5\x97G\xe52\xdd*!Kck\xb9\xec\xaa \xfe\xc7{\xe6\xb0\xbb\x1d\xda\x95\xbb0\x90\x83\xb9\xc3\xa8\xf17659\x89*&2%\x13\x9b\x90)\xcd\xabu\xdb\x1d&\xf4k\xbe'\x83\xc4\xa5\x1d\xd1\x9a\xed\xc0\xc0\x13\x85\xce_\xc1\x96\x89|$\x17\x83\x99\x98\x0d\xcb/\x1b\xb0\x000\x0d<\x13+Q\xde\xbaSh\xee24\xe6\x13\x8e?\xa65\xc7\x1b\xf2\xdey\x1f0\xf2\x81s\xa3a\x9b\x0bw\xd9\xcf\x86g*\xc5\xad\xe5)\xcf\xc5\x15\xb7\xe37W\xc5j\x8d;\xed1\x83d\\\xf0Tn[\xf2\xcd\x18m\x01\xaf\x1a\x8bg\x1e \xbf\xd5\x7f\x89i$\xa2\xaa%\x8ek\xac\xb7\xa6\x8c\x8c\x17\n\x1bz$\xc6\xdb| a\xc3\xe4y[o\x95\x99\xe3HuW[\x8f\xa6fp\xda|\xb7U\xe6\x02\x87v5ug\x19\xd8r\xdc\x88\xd7\xff?{\xef\xda%\xb7\x8d\xa4 \x7f\xdf_\x11\xab\x0f#i\xa6\x94e\xb9/\xefY\xcdz\xcf\xc8\x92\xec\xae\x19[\xd2\xaa$\xf7\x993\xa77\x85\xccDf\xb1\x8bI\xa6IfI\xd5\x9e\xfe\xef\xef\xc1\x8d\xb7$\x89\x00H\xb0\xa4\xea\x88/\x96+I\x10\x08\xdc\x02\xf1<\x11\x80\xd5-p\xb6\xbe\xaa\xb3\x19\xd5\nc\x89v(K\xd6O\xdc\xb3\x1d5\xc4\x11\xa8\x92\xaa#=\xbe\xa0#\x1a,$\x95\xb2\x7f\xda\x0c\x95]vX\xf7QT\xa4!%\xd6xQ\xc1\xae\xf5\\m\x13\xc6\x9f^\xcb&\xa1v\x9d\xa6\xb1Kk7\xad\xddm\xb9/k\xb7\xeb\x91\xefW\xbd\xb6\x1b\xa9\xce|[\x16\xe7S\x1e\xfa\xd6i\xbeOs\x19TWn\x1c\x1a9\x1d8\xee=\xd7O4\xf6 \x19\xf1\xf99\xca\x15p\xa8\x9f\xd0o6f\xf2\x83\xcb(Y\xf3g\xa0\xbe\xfd$\xdf\\\xc37\x8b\xdf\xff\xceD\x116v\x8f\xe7\xcdr\xee\xd9\xbe\xd1\xd4t[\xee\xd5\xec\xc2\x1f\x8f\x80\xd2\x1dR\xba\xc3\xb6P\xbaCJwH\xe9\x0e)\xdd\xe1\x89P\xbaCJw\xd8\xb2-(\xdda\xb75D\xe9\x0e)\xdd!\xa2\\Jw8$\x94\xeep\xac\xd6)\xdd!\xa5;\xec\xfb\x89\xd2\x1d\x9e\x08\xa5;l \xa5;\xec\x14\xed\xaf\xa2t\x87\xb2I\x94\xee\x90\xd2\x1d\xdem\xba\xc3\xa6h\x18\xd68\xfc\xa5\x03i\x080\xa9\xcb\x81\xedt\x88a\xb7\x91\xd4\n\\5\x0f\xb7\x82W\xcb?\xeb\x0d\xa5\x0b\x0c\xa9\xc4\n\x1f\xd8\xc1\x83\x84\x7f.\x96\xd7\xfcv\x18\\\xb0\xfa\x00P\x1e\x00\xad\xde\xff\x1eB\x15L}L\xd4\x97\xf8\xa7vy\xb1#\xaa#\xf5\"\xff\x91\x1c\xf7+\xe5\x1c1\xbe\xcc\x9a\xefl\xdbP\x92\x1c\xb4K\xf9\xda\xd0\xdc\xfd\xc4r\xc8yq&Y[\xda)\x9b\xc31QCt\xa3\\Y\x9f\xa2\xfc\xb4\x87\xed\xee\x16\x89e\x1a\x9c\xd0%\xb4\xafD1\xeb\xc1}]\xad\xe8\xc6+\xcb\x07\x89\xb9@\xcc\x85\xb6\xd8\x97G\xc2V [%l\x95\xb0\xd5\xa6\x10\xb6J\xd8*a\xab\x84\xad\x12\xb6J\xd8*a\xabR\x08[%l\x95\xb0U\x9c\xd6 [%l\xb5\xef'\xc2VO\x84\xb0\xd5\x96\x10\xb6\xda)\x84\xad\x12\xb6J\xd8*jp\xcd\x82\xad\x0e\xc5\xd3UH\xe7\xe2\x9a\xd7\x9d8\x8d\xc3e\x0b)\xd4\xb0 \xd3\x0b\xa6\nk\x93\xde!\x8dvi\xb4\xa6\xc4\x10\xa5?g\x17%\x8dR\xca\x80\xd8aLp\x01o\xcc\x85Z\xe9\x16\xd2\xed6\xe7\x858\xa65\xab\x0b5\xafp\xce\x8b\xfa\xbe\x1f$DPI\xa7O\xa0C\xb5\xaa\xd6}\xdam\x1d\xddu\x13\xa5\x82\x93\xe3\x9eg\xd1\xda\xfcMN\xba\xb5\xbanM9G\xaexb\xba\xe3\x98\x94~\xa5\x96\xc9y!K\x8by\x9eW\x8aU\xde\x9ac.:\xe0\x9a\x0fiYk\xb6Y\xe4\x9d\xa8\xb9\x85\xddv(:\x8e\xf6\x11V\xcf\xf2Y\x83|\xf6A\xb9\xca\x13Y\x1f\xe1\x1a'\x15V\xdeA\xb90\xea\x85^l!\xe6\xdbB\xbb\xbb\xa2B\xad\x89\xc6,\x94\xceS5iT\xc1B\xcb&K\x00;\x1c\xbe8}\xd6\x01\xeb\xea\xfd!\xad\xd6\xde\x10\xba\x95\xa36\x95\xc9\x97@\xfc#J6\xd1\x9a\x15\xbc\x84A\x8c.\xc5\x83z\n\xeb$EM\xc52Ur\x89+\xb5\xfaK\"\x905\xc7\xaaX\xe9\x9b,\x8e\x0f\x17y\xab\xafZU\x95\x16s\xc6s\x8d<\xcb\xa9U\xcdE1\xdd\x16z&E\xbb$\xcdj\xb3\xafY\xacju\x88\xae\\\xa5i\xccY2\xd4a\x19\xbf\xe1Y\xa3\xb8\xa1\xce\xd2O\xb7;*\xaaQ\x192\xde3\x07D\xb9\\%\x9aJ\xb3\x0d\xcf\xda^\x16\x0b\x0d \x94V\xfa\xb3\x1c\x0e\x05o\x9f\xff\xa6o\xd1\x1aJo\xa8\x19\x10U\x18\xb7\xfe\x7f\x0d\x9dW0\x8b.\xab3\xc1\x87.D\xfft?#\xb4\x87H\x04\xa3HR\x85\x95\x03\x80r\xe6c\x1d\xe7\xb3\xa0\xffa\xb0\xff\xd0\xc8\xffD\xb8\xff\x1c\xa8\xffh\xcc\x7f\x16\xc4\x7f\x06\xbc?<\xda\x1f\x0e\xeb\x9f\x10\xe9\x0f\x89\xf3O\x84\xf2\x07\xc5\xf8\x83 \xfc\xe1\xf0\xfd \xe8\xbe\x1b\xb6\x1f\x18\xd9\x0f\x8a\xebw\xf8\x1f,\xf7I\x84\xc4\xf4'@\xf4-x>\xca\x00@a\xf9\xb3!\xf98sd\x06\x14\x7fb\x0c?0\x82\x1f\x16\xbf\x9f\x0c\xbdG\xa3\xcb\x08\xe4\xde \xb7\x1fF\xbf\xfc0\xfb\xe12{\x1d\xd3\xd3\xa1\xf5\xae\xdatA\xeaq\nsB\xe9=1\xfa~\x0f\xff\x84\xf8<\x1a\x9d\xc7a\xf3Xd\xde\xaae\x1fT\xde\x05\x93\x1fB\xe4'\xc2\xe3\x1d\xd1\xf8qX\xbc\x05\xe5v\xc1\xe1\x03\xa0\xf0\x96\xda\xf5\x8e\xf4`\xf8{@\xf4=\x18\xf6\x1e\nyG\xe1\xeeC\xb8\xe0\x10\xe6>=\xe2\x1e\x04o\x0f\x88\xb6\xbbc\xedNH\xbb\x07\xce\xee\x8a\xb2\x0fb\xec\xc3\xb5\xc3B\xa0x|\xdd\x03]w\xc4\xd6{\x9b\x1b\nW\x0f\x88\xaa\x87\xc1\xd4\x03!\xea\xd3\x0c%'4\xdd\x05K?\xdd4\x1bg\xb6zL\xa5GH%]\x97x\xfa3\x85Iv\x88\x1d \xc1@$\xd66\x1a\xc1\xf9%\x94\xcc\x00\x94\x84\x82J\xc2\x83%\x93\xc1%\xf3\x00&\x13@&3\x81&\xb3\xc0&s\x00'!\xa1\x93I\xc1\x93\xb0\xf0\xc9d\x00J`\x08%\x10\x88\x12\x12F \x04\xa4\xb8B)\xc1\xc1\x94\xc0p\x8a\x07\xa0\x12\x18R\x99\x04T\xb1\xc2*h\xa3\x01\x05\xad\xcc\x08\xae\xe0\xcd\x98\x19\x00\x96\xc9!\x96\xe0 Kh\x98eB\xa0\xc5\x01\x1c@\x81-\x8ep\x8b\xd5\xd5\xe9 \xb9\xd8\xcb\xa50\xc9!\xf1\x84`(LR\x89' \xe3\x06\xc9P\x98$\n\x9e \x02\xd0 \xeaHa\x92x\xa8&\x1cX\x83\x84k(Lr\x9d\xf3\xf5\xe1\xdb?\xfc\xf1\xfai\xd8\x8f\x9f\xc2\xc7j\xb2\xbb\xc0\xc6zQ!\xb8\xf8D\x08.\xee\x10\xfb2Gp1\xc1\xc5\x04\x17\x13\\\xdc\x14\x82\x8b .&\xb8\x98\xe0b\x82\x8b .&\xb8X\n\xc1\xc5\x04\x17\x13\\\x8c\xd3:\xc1\xc5\x04\x17\xf7\xfdDp\xf1\x89\x10\\\xdc\x12\x82\x8b;\x85\xe0b\x82\x8b .F\x0d\xae/\x06.\xfe[\x89\x17\xef26\x98s\xf1\x9dN\xb2\x18G\xb9\xf4B~|~,\xae\xd2,\xfa\x9br\xd4\x9e\x81,@y\xa3D'\xa9\xff\xe5bw\xac\xfe7\xeb\x04\x96\x7f\x94\x9f\xd6\xbf\xdc3P\xb9\xae\xd6\xb6\x14_\x00\xbc\xc2\xea\xbdhw\x97\x0c~\x0f\x90\xdf\x04$\xac\x03x/\x0d8\xf8E\x8c\xcc\x02\xf1@@\x98\x07f\x81z`J\xb8\x07f\x83|`\x1a\xd8\x07\xe6\x83~`.\xf8\x07f\x82\x80 0\x0c\x04SCA\x10\x1c\x0e\x82)!!\x08\x0f\x0bA8h\x08\x02\xc3C\x10\x0e\"\x02\x0f\x98\x08\xe6\x80\x8a <\\\x04~\x90\x11\x84\x87\x8d`*\xe8\x080\xf0\x11\xb8\x19'H\x18 \xe6\x85\x92N>g1\x9bf\x81\x94 \x04\xac\x04s@K0\x03\xbc\x04\xd3BL\xe0\x06\x84\x00\x16j\x02w\xb8 0\xae\xdb\x11\xb0\x13 \xcb\xb78\x98\xa6\x84\xa0\xc0[\xfbnP\x14 \x9b\xee I\xc1\x18X\n\xec*\x9f\x16\x9e\x027\x88\n\x1c`*p\x82\xaa\x00\xdf+~\x90\x158\xc3V`\x85\xae`J\xf8\n| ,\x98\x00\xc6\x02\xa4\xea\x1d\xe1,\x08\x05i\x01\xb6\xbe\x96\x99\x14\x10\xde\x82\xd0\x10\x17\x84\x85\xb9 (\xd4\x05x\xb8\x0b\xac\x90\x17Xa/\x08\x04}A8\xf8\x0bBC`\xe0 \x83\x81;\x14\x06\xbep\x18xAb`\x9f\xf8\x80@/\xc0\x01\xc1p\x81\xc7\xc0\x17\"\x03\x1f\x98\x0c\xec\xca\x08\x07\x97Ah\xc8\x0c\x02\xc2f\x10\x12:\x83\x89\x07\xa0#\x84\x06\xce0\x1at&\xd94\xc2?\x1f\xa2\x0c \x9aX\x1d\x04\xc69\xb0a\x05\x7fRD\xfb>\x0fA\xe3\xa8\xfe\xdf\xfdGu \xa8\xc1.\xba\xe19\x1cx\xb6\x8f\xf2\\\x1eC\x8b\x14\xf8g\xbe>\x0e\xb8 \xc4@\xd16\x81\xdel\xd5\xca]\xb5\x17D\x05\xbb-\x91\xe6\x0dtud)\x97N\xd8\x12w\x84\xcem\xd0\x90/dn+\x97\"5\x87\xc4\x1b\x12\xa7HM\x18\x03{\xbbA\xde\x14\xa9\x89\x82\xb6\x83\xc0\xda\xd6:R\xa4\xa6\x0b\x84\x1d\x0e\xbeFB\xd7\x14\xa99\x1e\xa6\xf6\x81\xa8\x1d\xe1i/h\xda\x1d\x96\xa6H\xcdS \x07=\x07\x85\x9dCA\xce\xc1\xe0\xe6\xa9\x06\x97#\xcc\xec\x061\x9b-\xb7\xca\x1e[\x996O\xe4\x9a\xfb\xcc\x80\xa1\xb5r\xa2\xe4\x99\xc2\xdbj\x7f\xcb\xf8\xaf\xc7(\xe3\x9bg\xb0eq\x03:\xea\xc2V:\x0f\xd4\xcd\x0f\xf2\xf9>\xb8\xcfw\xcbBc\x07\xb5\xb7\x1a\x87\xe77\xda\xb3y\xd6x\xfa\x0c>]\xf1D\xa1irh+\x18R\xee\xac\x1ab\xde\xb3b}%\x86\xf8.\xba\xe1\x89x\xfb\xe4\xc4\x1e\xb8y\x15\xde\xbc\xb8\xe6\xb7}\x0dl\xc1\xb5\x1a\x9bez\xc7\xcbd\xf0\xadt\xefi\xc8Q\xc3m%\x90+\x1dr\xbb(i\x94\"[%\x1a?\x0c\xcc.\xe0\x8d\xd0X\x9aHG@\xba\xdd\xe6\xbc\x10\xe7\xecfu\xa1\xe6\xd6\xcfy1\x83\x06\xa1\xcf\xa9\xd3\xa1ZU\xeb>\xed\xb6|/\xba\x89R\xc1\xc9q\xcf\xb3hm\xfe&W\xcd5KD+\x95wK\x8c0\xdd\x1d\xc7\xa4t\x0c\xb6\xce\x0c\x17\xb2\xb4\x98\xe7y\xa5X\xe5n;\xe6\xa2\x03\xae\xf9\x90\x96\xb5f\x9bE\xde\x89\x9a[\x00z\x87\xa2e\xeag\xa4\x9e\xe5\xb3\x06\x95\xee\xc3\xd3\x95+\xb9>\xc25\x86-\xcc\xf4\x83\xf2A\xd5\x0b\xbd\xd8B\xcc\xb7\x85\xf6WF\x85\x9a\xf9\xc6\xae\x97\xdeo5iT\xc1B\xcb\xab[\xe0l}\x05\xecp\xf8\xe2\xf4Yg\x0dT\xef\x0fi\xb5\xf6\x86\xd0\xad\x1c\xb5)\x14\xd9\x91\x83\xf8G\x94l\xa25+x\x89c\x19]\x8a\x07\xf5\x14\x8e\x92u|\xdc\xb4\xec}\xa6J.\x81\xc1V\x7fI\x08\xb9\xe6\x19\x17[u\x8dK\x13%\xf0\xe1\"o\xf5U\xab\xaara\xcex\xae\xa9\x03rjUsQL\xb7\x85\x9eI\xd1.I\xb3\xda\xeck\x16\xabZ\x1d\xa2+Wi\x1as\x96\x0cuX\xc6ox\xd6(n\xa8\xb3\xf4\xd3\xed\x8e\x8aj|\x92\x8c\xf7\xcc\x01Q.O\xa4\x81\x96f\x1b\x9e\xb5\xddd\x97Q\xb2\xe6\xcf@\xa5sx\x92o\xae\xe1\x9b\xc5\xef\x7f\x17\\+}y%\x1e\x0c%\x968\xd7f\xc5\xf9o\xfa\x1f\x7f\xd7,\x90\xae\\\x13?\xaaG\x14\xbbE\xab\xa5N\x1f\xfb(\x7fi&\xa0\xa8\x88c\xbc?\xc9\x84)S?@\xb9&J\x99\x83 \xa2M\xd9\xd1P\x8f\xee\xe6\xd1\xe5P\xee\x8b\xb0\xa4\x19\x08H\x9c\x81Y\xc830%\x81\x06f#\xd1\xc04D\x1a\x98\x8fL\x03s\x11j`&R\x0d\x04&\xd6\xc0\xd4\xe4\x1a\x08N\xb0\x81)I6\x10\x9eh\x03\xe1\xc86\x10\x98p\x03\xe1H7\xe0A\xbc\x819\xc87\x10\x9e\x80\x03~$\x1c\x08O\xc4\x81\xa9\xc88\x80!\xe4\x80\x9bq\x82$\xe6\xc0\xbc\xe4\x9c\x93\xcfQ\xee\x8b1d\x1d\x98\x81\xb0\x03\xd3\x92v\xc0\x8dZ\x02X\xf2\x0e\xb8\x13x\x00\x03\x86\x8f \xf2\x00\xb2|\xca}\xe1J\xf2\x811D\x1f\xb0\xab|Z\xc2\x0f\xb8\x91~\xc0\x81\xf8\x03N\xe4\x1f\xc0\xf7\x8a\x1f \x08\x9c\x89@`%\x03\xc1\x94\x84 \xf0!\x05\xc1\x04\xc4 @\xaa\xde\x91 \x04\xa1HB\x80\xad/\xe5\xbe\xf0%\x0eAP\xf2\x10\xe0 D`%\x11\x81\x95H\x04\x81\xc8D\x10\x8eP\x04\xa1IE\xe0I,\x02wr\x11\xf8\x12\x8c\xc0\x8bd\x04\xf6\x89\x0f\x08>\x088pB\\\x08G\xe0K:\x02\x1f\xe2\x11\xd8\x95\x11\x8e\x80\x04\xa1IH\x10\x90\x88\x04!\xc9H0\xf1\x00t$%\x8131 \xbe\xbc\xdc\x17\xf6\xd8\xfdSP\x10\xf8\xe7\x82'\x1b1\x82%f\xa4\x16\xe2UZ\\)o\xc1f\x93\xf1\\\xac\xffz\x1d79(\xc4\xc0/\x93P\xf4~\xef\xa2D\xad\xc5\x88\x13\x07\xdb<\xcaU\xf7\xc8\x12$\xf2\xaa\xfe\xbf\xb3\x8c\x86\xf3A\xd3\x95\x86\xb2d4\x13\xebSv\x8c\xb6\xa0\xdcL\x94\x1d\xc3\xa6\x9a{\x96\x1d\xc3@\xfe.I2\x9a\xfc\x03\xca\x91q\"\x94#\xa3C\xec\x0b\x1d\x0e\xfaG\xcdi7\xdf\xf5,p\x7f(\xa8?<\xcc\xdfu\x90\xf6\x82\xf8\xe7\x81\xf7'\x80\xf6g\x82\xf5g\x81\xf4\xe7\x80\xf3CB\xf9\x93\xc2\xf8a!\xfc\xc9\xe0\xfb\xc0\xd0} \xd8>$d\x1f\x08\xaew\x85\xea\x83\xc3\xf4\x81!\xfa\x8e\x83\xb3m-\x0c\x0c\xcdO\x02\xcb[!y\xa4\xd1\x80:#\xcd\n\xc3c\xcd\x98Y\xe0\xf7\xc9\xa1\xf7\xe0\xb0{h\xc8}B\xb8\xdd\x01\xecE\xc1\xec\x8e\x10\xbb\x0dB\xf2\x85\xd6m\xe5R\x8e\x8c!\xf1\x86\xce)G\x06\x8c\x81\xc7\xdd\xa0q\xca\x91\x81\x82\xc0\x83\xc0\xdf\xd6:R\x8e\x0c\x17\xa8;\x1c\xcc\x8d\x84\xb8)G\xc6x8\xdb\x07\xcav\x84\xb1\xbd lw\xf8\x9ard\x9cJ8\x88:(<\x1d\n\x9a\x0e\x06KO5\xb8\x1c\xe1h7(\x1a\x9f#\xa3\x9d\xb2\xe2\xc0\x8a\xab\xda\x9f\xaa\xc0\xd7\";\xe2\xe2^)\xa3\xc3\xd8\xc8a\xca\xe8P\x93;Q\xb3=\x03\x01et\xa8\xc9\x04\xfa\xa4\x8c\x0e\x94\xd1\xe1\x1f'\xa3Cf2:d\xf6\x8c\x0eY+\xa3C\x99\xcf\xa1\x99\xca\xe1\xac\xa4<\x9d^\x06\xd4\x91\xd3!\xa3\x9c\x0ewGh\xa0\x9c\x0eJ\n\x04\xb1\x03\xb0\x8dP\x82EF\x8c\xccB\xf2\x80\x80D\x0f\x98\x85\xec\x01S\x12>`6\xd2\x07LC\xfc\x80\xf9\xc8\x1f0\x17\x01\x04f\"\x81@`\"\x08LM\x06\x81\xe0\x84\x10\x98\x92\x14\x02\xe1\x89!\x10\x8e\x1c\x02\x81 \"\x10\x8e$\x02\x1eD\x11\x98\x83,\x02\xe1 #\xe0G\x1a\x81\xf0\xc4\x11\x98\x8a<\x02\x18\x02 \xb8\x19'H\" \xccK&9\xf9\x1c\xe5t\x18C.\x81\x19\x08&0-\xc9\x04\xdc\xa8\x10\x80%\x9b\x80;\xe1\x040\xe0\xed\x08\xe2 \xcb\xa7\x9c\x0e\xae\xa4\x14\x18CL\x01\xbb\xca\xa7%\xa8\x80\x1bI\x05\x1c\x88*\xe0DV\x01|\xaf\xf8\x91V\xc0\x99\xb8\x02V\xf2\nLI`\x01\x1f\x12\x0bL@d\x01\xa4\xea\x1d -\x10\x8a\xd4\x02\xd8\xfaRN\x07_\xa2\x0b\x04%\xbb\x00\x9e\xf0\x02V\xd2\x0bX\x89/\x10\x88\xfc\x02\xe1\x080\x10\x9a\x04\x03\x9eD\x18p'\xc3\x80/!\x06\xbcH1`\x9f\xf8\x80\xe0/\x80\x03\x87\xc1\x85 \x03\xbe$\x19\xf0!\xca\x80]\x19\xe1\x083\x10\x9a4\x03\x01\x893\x10\x92<\x03\x13\x0f@G\x12\x0d8\x13i\x80r:|y9\x1dV\xb7\xb5Jv\xbaG)\xa7\x83\xd5\xcdD9\x1dl\xaa\xb9o9\x1d2\xdf\x9c\x0e\x19\xe5t\xa0\x9c\x0eF\xac\xcb\x9cM\xd9J\n\x04\xf4\x8f\x9a\xd3n\xbe\xebY\xe0\xfePP\x7fx\x98\xbf\xeb \xed\x05\xf1\xcf\x03\xefO\x00\xed\xcf\x04\xeb\xcf\x02\xe9\xcf\x01\xe7\x87\x84\xf2'\x85\xf1\xc3B\xf8\x93\xc1\xf7\x81\xa1\xfb@\xb0}H\xc8>\x10\\\xef\n\xd5\x07\x87\xe9\x03C\xf4\x1d\x07g\xdbZ\x18\x18\x9a\x9f\x04\x96\xb7B\xf2H\xa3\x01uF\x9a\x15\x86\xc7\x9a1\xb3\xc0\xef\x93C\xef\xc1a\xf7\xd0\x90\xfb\x84p\xbb\x03\xd8\x8b\x82\xd9\x1d!v\x1b\x84\xe4\x0b\xad\xdb\xca\xa5\x9c\x0eC\xe2\x0d\x9dSN\x07\x18\x03\x8f\xbbA\xe3\x94\xd3\x01\x05\x81\x07\x81\xbf\xadu\xa4\x9c\x0e.Pw8\x98\x1b qSN\x87\xf1p\xb6\x0f\x94\xed\x08c{A\xd8\xee\xf05\xe5t8\x95p\x10uPx:\x144\x1d\x0c\x96\x9ejp9\xc2\xd1nP4>\xa7C\x1dn\xa0\x9c\x0e\x94\xd3\x81r:\xe0r\x10PN\x87\x9aL\xa0O\xca\xe9@9\x1d\xeeYN\x87\x15K\xae\xcb\x94\x0e+\x16\xb3d\xcd\xf3\xf3\xdf4\x81j(\x99\xc3\xf38\xfe^?/+n\x00f]\x88<\xb9\xc41\xacSq\x16\x10\x03\x90\x81X^c\x0el-\xc7Zg2\x87Z\xa9\xfa\xe7{\x96\xca\xc1\xe8\xf8\xcbe2lx\x92\xeeG#\x12l/\xfaxd1X\x08\xe1E\x1a\xd5\xb8nP\xa4\xd7<\xd1\x07Y\xd5\x1c\xb3\xf2\x89S\x05Kt\xe5\x86\x1c\xaf\xaf\xdf\xbc\x7f\xf5L\x9e\xca\xd5\xb3\xfa\xa8\x1bI|\xe2\")\xf4Y\xa0\x04~\x1a\x07\x02\xe5\xe4\xe8/<\x8fv +\x8e\x19\xcf\xcb).\x93\x9c\xa4\xbbT\x1a\xdd\xddn\xa1\x862\xcc02;v\xf9\xffz\xda),>J:\x91\xa7\xb1l\xc2B:\x9f\xea\xdbIAlBb\x13\xd6\x9f\xf9J\xd8\x84\x9d\x8d\x90\x9bdm#r!\x18\xd6w\xc5wo_t5\x81\x18\x87\x0d!\xc6a\x87\xd8\x17\xc3 \x19\x87\x01)\x08C\xbe\x1dmc\xf6\x0d{\xfd\xb3\x99t\xe6\x7f\x8bT/\x93\xe5\x8e\xb7mR\x92\xc8AD\x0e\"r\x10\xe1\x1c\x1a\xe4 \xaa\xc9\x04\xfa$\x07\x119\x88\xfe\xb1\x1cD\xe7\xab\xdb\xa5G\x1d\xa5->\x1e\x84\xc1g\xf3\xefX\x8b\xb0\x9f\xc3 \x80g'\xa0_\xc7\xdd\xabs\x1a\xd8\xa6\x07\xb5\xcb\x89\xd3\xcc.\nf;\x11:Zv\x88}q\xa0\xa3\xe5]\x1c-\xe5j\xd6Wc\xf9\xa3\xa9\xefZ\xad\x89\xe2/\xa8*Oa54*\xddg4\xf4\xd8\x0c9_\xd6\xf6\x9b.\x0b\xa1\xb6\xfc\x7f\xcfr\xfeR\xb6\xcd\x98\x0b\xca\"\x10\xc54W\xfc]t\xc3\x13\xb3\x0dTg=\x1e\xc9h\x8fz\xf0\x8628\xcc\xfb\x10\x159\x8f\xb7\x92K/VL\xb6a\x85)\xe5\x98DE=\x16,m\xbd\xdbc\x89\xe8*\xeb\x1f\xef\x9d-\xd2\xec\xc0\xb6\x0cN\xe1\xae-Nk\xab\xdc\xe4\xea\xb0B\xf7NW\x0d\x8a\x1dms'B\xdb\\\x87\xfc#ls\xed-\xe3\xee\x17{Y\xa3|iV\xd5\xfe\x15_\xce\xe6\xfcg\xb3\xfa\xd6\x8f\x86\xebX:\xdc\xca\x95Y\xae\xff\xb1X\x18wQ^paVW;\xa0\xde\x0c\xf2\xce\x85\xb9\xf9\x11\xfd\xc4=[\x9d\x8d\x9a\xbe\xe0iV\xd7\xe6\xd89\";})\xb6\xe9\x81\x0f\xda\x9b\xadd\xb0\xf1J\x10*P\x82Q\x84\x12+\xbfB J\x1dF:\x8c\xc5\x92\xfc\xacf\x95*\xa8\x91\xfc@\x19P5\xc3\xe7\x11_\xec\xe0\xc8\x8at\xff\xd8\x12\x99\x02\xfc\xf3!MN\x06}\x97\xd8\xf7\xa0\xba\xd4\xf6\xa3\x01\x08\xda\x08\xce\x87P\x17S\xef\xbaz\x0e\xe9'\xe5\x15}\xfaM\xf5\xbb4\x02\xd3\x84\xcb\xf0\xfaa\xb6\xb5\x92\x8cE:\x9c\xa52\x98\x94\x0bW9\xfc\xc4\xbf\xf9\xafG\x16\xd7t/\x17\xa8\x0fIT<\xcc\xf5b\x8e\xf8\xd0S\xdde\xdf\xc1\xd3\xffWV\xb7\xfa&\xa6\x08\x99g\xc2\xb8Qj\xd5M\xb7\xaa\xfb\xab\xa4\n\xeb\x8c\xb3\x82\x03\xab\xaa*\x1ez(\x1ez\x88\x08\xdaVR\xd6\xf2;\xf8\xe3\x19\x14W\xc7\xfc\x19<\x05Q\x86h\xc47\xff\xef\x8f\xc8A\xc7\xe2\x88\xe5\xf6 \x86\x9d\xfeJ\x10\x8b\x80\x12\xa7 \xa9I\x12\xba\xc6\xd0\xc8\xfe\xa5\xa7\xa2\xf9\xcd\x18\xb9\xb5\xe98X\xbc\xdb\xa0\xaf\xfa\xad6\xe2\x99\xa8\xc3q]\xb4C\xa2\x99\xaa\x84\xadO\x1b\xc7\xb0\xa3\x1e\x13z\xe4Gk\xe5\xa4\x1b\xeaK\xad\x9c\xdaZ\xde^\xad\x8c\xaa\xea\x13D\x9d\x03\x95\x96\x84\x01\xd0\xfb\x011\xa0\xed\x9b\x83\xb5#[|\xab\x9c\xb7+Y;R>\xaa\xe0T\xf1K\xa5t9\xc7j\xe3\xff\x9b\x81A\xbe\x89\xf2C\xcc\x06\xe8M~U\x1f\xe40\x95_-\xa1&\xbd]\x1cw;\x9e\x8b\xe3R\xedx]6\x12S\xa0\x82>\x9417\x90\xff@Z\xb2\x13\xb7\xf8A7\x982\x14\x8e\xa2\x87\xe4\x03\xb9?\xd6\x0f\xa4\x8dlA\xd2\xfb\xfc\x88\xef\x9e\xc1\x0bY4<\x17\xcbV\x7f\xb9\xf9\xed~\x95\x8e?^\xb8\xcdy\xf5\xd1\n\xa9\x15u\xd6\x7f3\x99\x80\xf2\xab\xf4S\x022\x8d\xa2IM\"[\xf5\xfc\xfd\x9b\x9f\x1f\xeb\xb4Nk[Z[=\xd6s\x19\xa7\xa9>\xa6\xbb\xde\x16\xd1n\xc5\xba\xea\x82\x1d\xcb\xe5Y\xc2\xbe\xce\xf5\x96\xc1\xec+X\xa3:\xe5\x19\xa5L\xfeP;\xc0D\x892fL\xc6EC\xcb\xac\x9dc\xe4w\x88\xa2y\"D\xd1\xec\x11\xa2h*\x91N\x88\xe6\xf1\xde\x053ky\x1f\x88\xa8)\x85\xdc\x8c-\xb1.\x886e+\xf9\xda\xdd\x8cDz\xf4\xf3\x9c*!\xd2c\xf5\x97\x19\xd4l'\xe9\x11\xe9\xb1&\x13\xe8\x93H\x8fDz\xbc\xcf\xa4\xc7\x16\xa6u\xfe\x9b\xfc\xc3Ph\xac\x03\xb8%\xf9\x8f\x95O\xab\xe1Z\xeb\xc7\xb4\xfe1 \xad!\x8bn\xd4)\x15\x05H!l)\x14\x18e\xb3@\xc1f\x85\x02\xa6\xd1J\xecMW\x82\x82\xa0\x10\n023\xfc\x84\x05\x9f\xec\xe7\x92J\\\x80'\xfb\xf9\xb4)\xa1@\xa7\x99 \xa7\xd1\x80\xd3\xacp\xd34`\x13\x12j\xc2Ln%\xd6)\xae\xc4a\xd2\x05\x83\x98\xb0\x1eW\xf0\x85\x97\x86\n\x1c\x87-\x05E\x96\x86q%T\xcf\xcd\x8c)Y\x11%\xf7J\x0f\x8e\x87\x89\xb1$\x17$i\x18Gro\xa73\x86\x14\x02A\xb2\xe1G\xee\xcd\x1a\xdc\xad\xe6A\x8e|q#\xeba\xa1\x12\xdc\x88\x1d\x8f\x18Y\xf0\"\xbb\xe6+?\xb6\xb7\x1b\x9b\xbc\xd8M!/vK\x10g\x07\xcc\xb9\xe1k\xf7b\xb7\xad\x9e\x8e3\xcb@|\x85\xf8{\x9d\x91\x1a8,\xc4\x89t+[\xad\x1f\xefrG\xbc\x95\xbf7\xdc\x10\x95\xa2\xc4\xce\xf4Y\x96\x07\xfbts\x8cyO\x88Cr\xad\x8a\xd1\xbf\xde3\x97C]\x85m\xb1\xce\x1f\xfb\xec\xc9y\xb2Y\xf2\x84\xadb\xbe\xb1\xed\xe6\xf7\xd9S`U\x81\x92nO\xe6\xa9\xd8\xf7\xd7J.y\xb2y\xa5>\xafb{\x9a\xb3\x9c5\xfa\x08\xf2\x82\x15\xc7\x1c\x1e}\xba\xe22\x9a\x88\x95+\xc4\xf0\x01T\x14\"J\xe8\xb7\xc8\xd5\xee\xbbt\x19\x11C\x8ah\xa8@O\xf4&\x07\xa4\x9c\xe8\xc6v\xe8\x98\xeb=\xe5\xc9UG\x15\x8a\x0c\xd6)\xf1:\xbd\xa4T\x9f'\x03D\x0b\x19 \x1d\x82Y\x8e\xbe\x06\x03\xc4i\xdf\xce\x8f\x87C|\xdb\xbfo\xbfO\x0b\x16_\xca\x87\x1a\x9b\xb7B\xa3\xd4\xdbPO\xb3\xd9\xb9u\xd7J\xd1?\xdf\xb3\xbd\xbb\xae\xc6\xb6| \xe3\xd6\xba\x85\xa2\x86\x9b-\xdf\x02\xaa\x18\xec\x869u\xd6\x85\xa0y\x17|2/\x08\xd1\x0e\x1b=\x8f\"\xe3\xab2\xb3\xca\x9c\x04\xba\xce\xfeN\xec\xcc^\xff\x83\x07m\xb3\xa7$\x07\xd7\x88uP\xdb\x874\x91<\x89\xe4i\xc4\x9f\xe49T}\xb9m\xd66.\x17\xa7X}\xd7\x1ct\x89\x95?\x90AJ\x06i[\xec\xab\xe0\xd7a\x90\x12\xafs\x12\xfe\x10\xf1:kr'j\xb6\xf3\x10\x89\xd7Y\x93 \xf4I\xbcN\xe2u\xdeg^\xa7:\xea!\xe8\x9c\xca\x98|\xb3m8aj\xee\x97z\xfe\xcaN\x17\x8c)@\xffv\xcf\xfc/C\x9e \xab\xa5e\xb7\xb3,\xee\x13\x84ids\x9dX\x8b\xc0\xb9M\xa6v\x9a\x04t\x99\xb8;LNq\x013\xa8]\xcef\xe5L\xa2,^'B\xc7\xb0\x0e\xb1/\x0f_\xff1l\x1c1a\xc6\\\x95\x1e\xe0\xc6R\xac\x7f\xe9\xb1X*c\xaa\x7f\x8f\xadym\xfe\xac^y\xa3\xcc\xafI\x80\x8fF\x91\xfa\xd9{\xb6\x0b\x13\n\xa2\x04Q\x0cn;\x9f~C\x0f\xba\xa5\xfbl\xeaB\x08\x05\xe9|\xc0>\xa4 \x05!\x14\xc4\xc8<(Hc\x17s1\xbb{7W\xc2G\xc0>\x1c\xc90\xef\x10\xfb\xfa\xf8\xf5\x1b\xe6\x84\x8f\xa0\xfdp\x84\x8f\xd4\xe4N\xd4l\xf7\xe7\x13>R\x93 \xf4I\xf8\x08\xe1#\xf7\x1f\x1fiyp\xe6\x84K\xfe\x01\xbc6\x84\x9d(\x99\xda\xd5\x12\xd0\xd1\xe2\xeef\xe9\xc7N\xbcOt\x9d\x05\x10\xaar\xfa3\x1d\xde:\xc4\xbep|\xfd\x87\xb7{\x84\xaa\xe4\xfc\xbc\xe0\xc9\x86g\xfb()\xaa{\xb5\xe2t}\x9d\x9f\xc7\xac\xe0\xf9\x00\xb0\xf2#/~\x92\x8f|/\x9e\xd7\x96\x8aj\xb8z\x15dA\x9d\x1bq\xf3]\xfd\xc4=\xdb\x81e\xeb\x97QO\x10\x9eu2\xd9\xa7\xd2\x15\xcb\xafF\xec\x9f\x80\xf3\x11\x1fXV,s^,\xaf8\xdb\xf0\x9e\xb5\x120-\x02T\xab\x84X\xbc\xbc\x80Zd\x8d`\xf3/\x0d\xab\x13\xb0*\x05\x9cZK\x07\xed[\x96\x159/\xfe$\xb5\xdb=T\xd4\x83r\xaa\\\xbc\xec\x1bi\xe1\x86\xd9|\xfd.\xceE\xbd\xa0\x8f\x11\xad\x0e\x95\x1fC6]&DG\xf4\x9c5v\x19[O\x18Vz]\xd0c\x06\xf0\xc8\x84\x12v8\xdc\xdd\xe7q\xc6\xb7\x91\x17baN\xf2c\x0ekvP\x16\xae\xda\x1f\xcd\x9f\xb3c\xac\x93I\x1d\xb2T\xac\xe82\xc7T\xd9\xbb\xf2i\xf9?\xeb+\x16%g\xc3\xa1\xd2\xa0}\x19*OU\\{\x11d\x92\x05\x95\x87E\xd6B\x18\xfd\xd2\"\x96\xdf\xd7^\x0ev8\xc4\xd1Z\xeeU\x0f-Q\xd9 \xe3\xb99\x14\x19K\xf2H\x9e#\xf6l}\x15%=\x89\xf0\x95\xc8\xba\xf4\xee\x0cF\x90]w\xc5\xa3\xdd\xd5 p\x8d.\n\xbfV\x16\xd1\xf0\xdd\x1a\x1e\x9f\xdc\xb0\x82?\x11\xe5\x0e<\x1d\xb3\xbcX\x0e\xef\xabF\x02\xccx\xfb\x06\x01.\x0d\x07\xecF\xa1\x04\xbd\x0f\x1bAk\x00\x9c\xb4\x00\xb8\xfd\xd9\x08~\x9f6\x82\x1d\x83Fp\xdd\x02\xae]\x03n\xdd\xe3\xb0\x9f\xb7^\xe8\xdf\xd7\x8d\xc8a\xbfN\xf7\xfb\xa8X\xda[\x8bn%\xbau\xba\xa2\xe2\xd3j\x95T\xebr-Ol\x97\x88\x9f\xef\xa0\xba7,\x8e6\xacH\xb3\xfc\x0e>\xde\xd6\xd56\x93Y\xe9\xe4\x9e\x02\xe9\xb18\x1c\x8b\xeao\x87\x8c\xdf(U\x0e\x94(\xd1\xbc;mS\xb9K\xdf\xc1\xb7\xd9\xe1p\x07_\x95\xf3M\xfb\xe2\xef\xe0\xf3\xfc&\xda\xf0d\xcd\xef\xe0\xd3\xe5\xf8\xadL3\x8bm-6\x8e4\xe7\xd9R\xdfu>g}\x1bF\xa8Zp\x1bL\xaf\xd2\xd0S\xe8\xc0\xfb\xd2\xd5\xa1\x170\xb5\x93\xf6Yj\xfd\x89\xa2\x01\xbb\xbb\xe2v\xd5\xe23Jk\xf6\\\xb0\xd6\x14N\xe0\xd2\x05\xc8N\x00\xe7\xd3\xc0\xfb\xcf\xb9\x02\"%J\xbb\xd2\x06\xb7rv+s\xfa\xdf\xb4\xeb\xe8O\xd2\xb6\xfd\x97\xa7\xbd\xc4<#\xca+\x9f\xa4\x85\xba\x0b\xebs\x0eW<\xe3\x12G\x93k\xe7\x02\xe0\xcf\xfca\xc6\xe1\xaf\xc7\xbc\x00\xb6\xcb8\x97\x10\x9a:Y\xa8\x94\xc6\xdb(\xcb\x0b\xeb\x97d\x1e\xca=g\x89n\x83\xaa\xe8\xf3\xc3\xe1O,\xbf\x82M\xcasY\x0d\x8d\xa6\x8a\xe2s.*\xd4\x7f\x1e\xd03\xee\xa58\x9a\xac\xd3\xa4`\x91\xf6\xa2I2\xc0V\x9d-\xd8Z(77\xe5n\x1a\x87\xa2\x9e\xa2\xcd:2\xcb \xb6\x7f\x0c\xc2\x8cd\x94\x81\x8bk\x83\x92\xcdQ\x1d\xff\xf8\xf2&-\xf8\x12\xd70%\x0e5\x02\xc7Z \x91\xf5\x19X\x93\x9a\xe2X\x19\xf0\xa8\x10\x98\xcf\xa0\x9fvZ\x7f\xea\xc2\x93\xa35[\\S\x9e\xc0\xe5\xc5\x8f\xaf_\xbd\\\xfe|\xf9\xe3\xf2\xfd\x7f\xbe}\xb5\xfc\xf0\xfa?^\xbf\xf9\xf3\xeb\x91\xa5\xbc}\xf7\xea\x977\xef_\x8d/\xe5\xc5\x9b\x9f\x7f\xbex?\xba\x9c7o\xdf\\>\xff\xc9\xa1\x18\x03\xdcM\xa0\x1f\xb7\x85\xbf)\x97\xd1.\xe1\x9b\x9f\xf3\xdd\xfb\xdb\x03W\xc4+16d\x92q\xf9\x93\x81\xc1\xccZW\xda$\xb6[ O\xa4\xb7\x13\x9f\xc1/i1pmc\xa7\xf4w\xc23x+\xcd!\x16\xe3\x8b\xc4\xf8o\x9a\xe29\x83\\\xcf\xd5J\xb2\xf4\x98X\xd3*\xd6\xc5\xfd\xc0\xaf\xc4\x86\x89v\x0b\xce\x19\xd4\x14\x8f\x85\x11<\x17Gp\xf2OT\xe2\xd9\xc5\xe0b\xb4\xb5\xc5\xd9\xc1\xd4\x14O\xad\xc2\x08\xcd\nqpE5\xc5w\x9c\x1a\xf1\x9bNF|\x06\x05\x8c\x1b\x180fpx\xb8\xb7\x9a\x82vv5\xa5\x88\xf6_\xfc\xd6\xf5\x92\x0b\xe5^\xc594\xe9k\xf7\x08k\xa3y)\xc0!\xe3\xc2\xac?\x13\xffP.\xde3H3P\xff\x94\x16\xbfr\x18V.@Q_\xbc\xfdS3\x9al\x8f\x829b\xac\xb0J\xf7X\xf3}\xd6z:b \x84\x8e\x18\xa7BG\x0c)t\xc4P\xe2\xb7\x15\xd1\x11\xa3-\x1e\x1b\xa6\x12:b8\x89\xdft2\xe23(`\xdc\xc0\x801\x83\x83\x8e\x18CBG\x8c~\xf1[\xd7\xe9\x88q7G\x0c\xb9\x9c.o\xd2\"JvKyY)\xb6\x03<\x94\xef\xbe\x84V\xe3\xf7\xcb\xab\x9b\xf3R5\xa2V.KTc\xac\xbe4\xf8\x99\x18\x89\xaf4zV!\x9b\x06OS\x98|\xa9mc\x90\x17\x9fR\xf1\xec6\x8e\xd6b\x80\xc8\xe1\x89\x18X\xb1\xb0p\x97\xea&\xc7%+\n\xb6\xbe\xfe\x92\x90\xbbZ\x8b\x96H\xe2\xb0\x12\xc7z\x81G\xdd@\xaf\x85|\xe3a\x96y\xd4\x0f<\xeb\x08\x08.z\xb7xV\x12FT\x14\xb0l\xf6n\xf1\xe1\xb8w\xcb\x88\xb6\xc3\xc8\xf6\x03\x9e%\xdf-\x1e\xabW[\xccj\x86\xa0\xb4\xf7 \x8ag\xdf-_B\x03|\xed\x88\xba\xcc\xcd\xdf\xef\x96\x19Y\xfd\xdd\xe2\xc3\xf5\xef\x16\\\x04@\xb7\x8c\x1aT\xee\xae #\xa3>\xebc\xec\xd4\xc5\x1eo\xd0-\x13U\xda\xc5\x16j\x8aC\xc4B\xb7\xdc\xf1\xfa\xed\xebD\x80\xf1\xca\x07\xbfsSSFz\x9c\x8c\x8c\xec\x05\x98\xa0'`\x8c'\xca\x88\xef \xbb-\xe3f\xb3\x911\x83\x0b\xa6\x19`0\xc5 \x1b\xed\xb92\xe2\xe9\xc12\xe2\x16'\xd2-#u:R\x97~\x91&\xdd\x82\x8c?\xe9\x96\xbbT\x83S\xb4G\xb7\xdce\xf5\xa7\x8f\x81\xe9\x16\xf7\xc8\x98n\xb9K]\xb9\xc4\xd6t\xcb]\xd6\x1e\x17\x9d\xd3-wYo\xc7\xf8\x9en\xb9\xcb\x068D\x08u\xcb]V\xde=\xc6\xa8[\xdc\"\x8f\xba\xe5\xee\xf4\x106v\xa9[\x94i\xe0\xaa\xa7\x11\xb6\xef\x18\x9b\xf7+=\xa9:\x93\x19\x8c\x8c5\xcd\xfd@0#tD\xf5\x19*0n\x0dPBG\xd4\x86\x8c\x9d\x07F\xc6Mc#c\x06\x17L3\xc0`\x8aA\xf6\xa5\x1cQ\xab\x1c\x87>ZU\xda\xb4\x87\x0fv\x0b*\xa8\xb0[FO\xae\xf1S\xcb\xac\xd0\xcbm\xccv\xbe\x85L4 \xdd\x99\xb2My\x02\xdf\xff\xf4\xe6\xc5\x7f,/^.\x7f\xf8\xe9\xf9\x8f\x1e\xac\xd0\xb6\xb4K|\xfe\xfd\xe5\xab\xd7n\xc4\xd7\xa6\xb4\x0b\xf4`\xd26\xa5]\xe0\xeb\x0b\x17BmSJz\xed\xb4jl\xcc\xed\xcd\x0f1\xdb\x95\x99\xa3s\x9d\xd7\xf4\xfbx\x9d^_\xbcT&\xaa\x99\xcb\x10)\xc6\x88\xad\xfcn\x19\xc5lj\xca$\x83{\x92\xb5\xd6\x91\xa7q*\x936\xc5\x1f\xbfP\xe2E\x95j\xca\xa4\xed\xf1\xee\x9a\xc6\xa9\xeb\x85<\x0e]F;\xc5\x0c\x17v\x98\x01\x0b%\x89\xaa\x1ek\xcf\xf4\xd3n\x07\xae\xce\x0f6\x83\xfcK:\x8c\xcc&` \xd3O,\xd7\xa7\xb5B\xe5E`&\x1b@\xe5\xf0\xc2W\xa5\x9aa9w:Qyn{\xbe\x9b]\xd56\xb7\xf7\xc6\x18\x06\x9eF\x81\xa7f\x94\xf8\xeaG\xc9\xa8Ur\xf44\x1c9\x05\x0f\xc7\xd5\xf0\xd5VC2J\xe90Z\xf1B\xf8\xe6\xdb?\xfc\xe1\xe9\xff\xf2}}\x82\x0e\x80\xf1\x9d $\xe7\xeb\xc3\xb7\x7f\xf8\xe3\xf5\xd3\xaf\xbd)\xe6\\s\\\xc5\xd1\xfa?\xf8m\xc3\x8bv\xcdo\xdb\xf7S\x1cs\xae\xf2\xbf\xd7\\j\xbf\x94\x0b\x8fG\x15|\x98\xacM\x19\xad\xc8\xb1g\xdd\xd2\x95z\xc8\xa24\x8b\x8aQ\xf3\xf3N\xdaaZ\xe0Z\xf1\x11K\xca\x98\xc5d\xc4\x1a>R\xc9\xa3\xe6\xdb\x88\xd5{\x84\xa2a\xa4\xb2a\xfc\xba=R\xe90V\xf10\xc5\x8a}\xf7\x8d\xb8\xe3\xb5z\xecJ=R\x81\xfe\xab\x1bL\xb5F\xdfY\x0b\xfc\x83>\x8c\x8c\xa8\xba{\xb5\xc5\xd9+M\x96n\x18\x94G\x0d\xddk\xb6\xba\xfd\x1bK\x8a(\xe1K\xf7\xd3\x92\xfb)\xc9\xf1t\xe4\xb5\xc8\xfb-\xed^;\xa8G\x0f)\xf1\\\xf7\xbc\xf6K/%\x82\xb7\"a\xcc\xee\xe8\xadP\xf0W*\x8c\xdb\x0b\xef\xa6\xcaw\xb6\xf3\xf9/\xb9\xde\x8ar_\xd4\x94\x8c\xdc\xe1f\xac\xaf\xffn\xe6QI\x8f\xea\xb9\xba\x9fG\xd4\xca\xc5\xb5\xdcp\x86\xfe$\xb6\xd6\x172`\xef\xb9\x8c\xd7\xb3\x85\n\x9e8@\x81\x15\x05\xdf\x1fd\x98`\x91\xc2>\xcac\xce6\xc0T0 \xa8`\xc0>/i\x8d+\xdb\xaf%\xd4R\x8c[v1\xa6\x04\xba\x1b\xb0C\x02AFQ\xdf\xc4\xc0\xedX\x82 \x8eJ\x82R-\xa0\xd5\x0bh\xac\x1e\xaddp[\xef\x9di\x1ch\x0d\x80\x93\x16\x00\x9cH\x18\xf8\xfe7\x82\x1d|Fp\xdd\x02\xae]\x03n\xdd\xe3A\x80@S\x1d\xb0\xa4\x06\xac\xfd\x8d\xb2\xba\x1d\x86\x8f\xcb\xe0q\xa6\x198v\x1a\x9e:0\x86$0\x82\x0e0\x02\xf8\xf7\x83\xf8G\x83\xf9\xa1a{/\x80\xdeqX8\xced\x07\xfb\xc6\xb3\"x\xbb\xc6 \x1c\xf7\xac\x0dB-\x01\xa1\xedYA\xec\xc6\xc7\x9a\xf7D\xba\xdcc\xdb\xba\x9d\x92.\xb0=\x11\xba\xc0\xb6C0[e1\xd5\x05\xb6n\xc1\xf9\xcf\xe1\xc3\xbb\x9f\xce3\x9e\xa7\xc7l\xcd\xe5e\xb4j\xbe\x1d\x93\xe8\xd7#\x8foAL\xc2\"\xda\x9a\x9b\xd1\x0b\x9d\xeaP\xdd%\x91E,\x8e\xfe\xc6{o\x9fV\"/\x9a^\xa71\xac\x8e\xdb-\xcfLG.\xd4\xbd\x17\xaa=\xb0?\xe6\xe5\x02\x00\xac\x80\x98\xb3\xbc\x18.7M8<8\x7f\x00\xeb+\x96\xb1u\xc1\xb3\x85\xbcC[\x9c\xc2 \xe7\xbb=O\xca\x05\xea\xc3\xbb\x9f\x1e\xe6\xf2.\\\xf5\xa12\x97\xd1\xf0\x17\xc4\xab\xdbc\x1c\xdf\xc2\xafG\x16\x0b-l\x94\x8et\xb1R\x1b\x8fX\x0eQ2\\\xd0G\xf1\xe9\xf3]\x9a\xeeb\xbe\x90\xfaX\x1d\xb7\x8b\x97Gu{\xed\xc7\xc7\xaa\xe6\xb2\xe8\xfc*=\xc6\x1bXq\xb5\x8e\xaeY\x92&\xd1\x9a\xc5r~\x0c\x7f\xe5\x11_\xec\x16gBu2\xa3\xc1\x83\xc5\x03\xb1\xaa\xc9\x1bL\xd6k~(\xf8\xe6\xb1-\x07\xe5E\x02\x07\xa1\xcch\xcd\xcf\xa0\xe0l\x9f\xc31?2\xa1\x02\x95\xe9\xe9\x10\xc5\xa2fE\xaa\xf2/D \xcbn\xd5\x05)\xb7\x07\xae\xef/)\xae\xf8\xed\xf0g\xd4\n\x08Q!\x0e\xd9\xc7\xbc\x9e+\xb3\xe0\x9fe\xb7=On\x17\xf0\xa7\xf4\x13\xbf\xe1\xd9\x99\\\x88?\xbc\xfb\xc9\xd8\x1e\xe2\x95\xe2\x8a\x0f\x7fD\xae\x8c\x1c>^\x15\xc5\xe1\xe3\x99\xfao\xfeQ\xe6\xa9JR\xfd\xeb\x99\x1cEk\x96@*g\x8cl\xa9\xd8Q\x8e\x07\x9d\xd8\xd3\xf2\x0d\x9e\xdd\xf0L5{\xcf\x0e\xb9\x1a\x12\xb2\xa6EZf\x02\x95\x8e\xb9H\xdd\xb6\xc2\x84\x81\x14\xc7\xe9\xa7\xfc\x99\xa5/\xfe\x19.\xb6UMEW\x1e\xb2T\xec\x8a\x9b\xb21r+\xce\xf3\xe3\x9eo,\xb7\xcc\xfc\xb3\xd8z\xfe\xf4\xfe\xfd[\xf8\xf1\xd5{sI\xcd\x87w?\xa9\xf9p+/\x9cg\xf0_\xed!\xfa\xfe\xf6\xc0\xff\xf2_\x7f\xb1\xe5\xb6\x90\xd7f\x8bN\xd4\x03B\xad\xe5R\xd5\x87,\xdd\x1c\xd7\x1cX\xa2\xf6\x95a\x8a\xd9?\xc3\xf3*\xa7F./\xdbaBY|#\xf4\xb9fk1\xc1\xd3\xf4\xfax\x00\x1dl\x07+\x96\xf3\x8dn\x91\xad\x9e\x1f\xde\xfd$+u\xc5n\xe4\x00\xda\xd7F\xf5F\x0dkf\xda \xfe}\x93F\x1b`\x89\x0d\xdaP5\x92\x938\xe3\xdb4\xe3g\xa6\x10Q6+\xa2U\x14G\xc5-$\x9co\xe4\xc0X\xc9(U9x6\x96\xb2\xd3D,p\xc9\x8e\xcb\x17\xe5,[\xc0\xa3\x0f97\xb9\x80\x84j\xc4\xa0\x13\xab\x87\x1au,a;\x9bi\xb7\xca8\xbb\x16\xab\x84.|\xf1xXw\xaf\xd3\x82?\x83B\xac\xd8\xdbc\xb2VsE\xb4I\xaf0\xebc\x96\xf1\xa4\x88okNg=\xa9\xd3\xed6ZG,F\xec\x12\xab\xe3\x162.\xd6~~&S\xaeD\x85\xf9\xc0Q\xf4\xb2\xb4\xc7\xca\x19\xb6\xe2\xbb(ID#>E\xc5\x95e)\xbf=\xf0\x85\x1a\xdd\xec\x10\xe5\x8bu\xba\xb7\xad\x85\x97r\xde\xe5\x90\x16Wj\x8a'\xed\xb5\x04\x1ei\xfb\x90\xef\x0f\xc5\xad\x9e\xa8\x8fa/}\x85+\xcbh\x94\x0d\x92\xfe\xf8h\x7f\x88\xb9\xd8\xae\xe4\xa8\x87\xfc\xc0\xd7\xd16ZC\xce\xf7,)\xa2\xf5\x00-3\xe0}\xf5]\xd2\xb0-~\x16+\xc7\x8a\x9b\x8ck5{\xe0d\xcb7\xf9rV\xe9\x0d7\xed\xd3\xe3\xb6\xf7\xaa4\xa4\x19\xf3\xf1yr\xfb\xb1::\xb0\x04X\xb6\x8a\x8aL\xcc\xbe\x81\x1a\x99\xa5\x99\xc5\xa9\x1e?\xc0\xfa\xfbK,\x94r\x8dW\xb5Z\x0dZC\xa5\x8130\xbe\xde\x9a\xd1\x1eG+YU\xbd\xb4\xe7\x90\x1f\x0f\x874\x93\x1b\xe3\x81\xad\xaf\xcf\x8f\x89\xf8\x8f\xd8\x0eUg\xe7fZ\x0d\xdb\x03\xe9\x16\x8e\x85Zu\xcc|\xcd\xc5\xca\xc76\x9bHM^\xd8\xf1\x84g\xac\x90\x15\x16\xa7\x982\xad\x91\xf8\x96\xea\x9a\xfe\xf2_}fb\xd4\xc2\xd3g\xf0V\xd4OLV]UV\xcf\x80\xfd\xe2_\xfe\xc56\xcf~HS\xd8\xa6)|\x07\x8b\xc5\xe2_\x07\x1f\x155c\xc9\xed\xf0C,\xb9]\x88:\xfd\x90\xa5\xfbG\xdb4}<\xfc\xf8b1\xbc%E[x$\x8a\xfc [\xf7>}\xf4O\xa2\xcc\xc7\xf0\x9be\x85\xb5\x95\xfbw\xbbr\xbf\xb5(\xf7\xdf\xd9\x0d\x9b^\xbb\xf0\x9d4\xbe\xc4\xe7&T_\x94?\xfa!M\x17\xeb\x98\xe59B{\xaa\xca\xe2E\xd5\xf0\xda\xcb\xc3\xf5\x19Pk\xa9\xd7\xdfY\xf4\xfa\xf6\xb6\xb8J\x13\x8bE\xa5j\xf8C\x9a>Z,\x16\x8fm#R)\xf5\x91\xf599r\xa5\xda\xc7j]\x14v\xa1\x94\xfe\xf2\xd5\xe5\x8bw\x17o\xdf\xbfy\xf7\xd8\xe6P\xaaF\xba\xbd\x12\xaa\x1avu\xff\xde\xa2\xee\x1fS\x8b\xdd&T\xfd\xec;\xf8\xa7\xc3j\xf1C\x9a\xfe\xb6X,\xfe>\xfc\x02Kn\xcf\x84\xb9)\xde:(\x9b\xe9g\x96\xe5W,\x16\x9d`o\x98M\xbd\xed\x1aY\xaa\x13m[\x95\xf9\x90\xec\xab\xea\xc8\xca\xca\x89&\x9f\xfa\x9f\xdfA\x12\xc5\xd6 b\xaf\xe3\xc0L\x10\xa7M\xd9\x0ff\xe57'\x0bX\xddV\x96\x98\xd9\x9b\xd4\x9d\x9a\xb7\xc6\xb9%,\x97\xfe\xa2\x1fvXZ\xe7\xe2\x10\xbd\x90?\x08+\xf5\xa18\x04\x95\xfb\xa7\xd8[Mv=5:\xfa\x0b/7\xaa$\xbe5\x87\xc0\x93\x13zi\x0d\x03\xdb\x16\\\x19h\xd2)\xf0\xf0\xfca\x7f\xd1zW5URGN\xaeG\xf0\x83m\x9a.V,\x93\x8d\xf9|~\xbb\xf8\xdb\x03\xa5\x15up\x1a>'\xca\xaa<\x10\xef\x88\xb5\xba\xf7\xb1\x7f\xbf|\xf3\xba\xff\xd7\xef\xbe\xfb\xee\xbb\xe1\xfe\x14\xefW\x8e\x0deJ\xa6b\x19\xd0&\x92:\xa3\x1dsn\x1c\x9d\xbbc\xcc\x06R2\x9f\x16%^\xdb\xf0\xca\xd09\x03\xbe_\xf1\xcd\xa62y\xce\xb4%5\xe0\x0e\xa9\x19 [\xa9\xbc\x8f\xff&\xd4\xf7Q\x9f\xec\x1b>`\xd3\x19\x0b\xb3\x94\xd8\x8e\xccb\xf4\x88E\xa5:\xc6n\xa3\x98\x0fo\x18f!z\xcb\xb3\xe6E\xba\xb7\xcc\xae\xe6X?S\xb6~k\x02\x98\x9b\x85\xcb\xcf\x8b\x91,S\x92\xcaq\xdc_\xf8G9\xf3\xcc\x00\xbfJ\xe3\x8dNuZ\xd5L\xfa\xfa\xf4\xc4\x00\xed[\xd3\xf3\xa2\xbf\\\xf9\xd9rj\xc0#\xb1`\x19\x95\x9c8r\x8c\xaf\xf1/\xff\xf5\x97\xc7\xb6Y4\xd5\xe0j~\xd9>\xbe\xa4\x9eD\xb1O\x17\xdf>\xfd6\x7f`\x19'\xea\xbf\x05\xdb\xd5\xfc\xeaO\xe0\x92g7\xd1Z\x1cb\x1f\x9c\xaf\xd3|\x9f\xe6\xe7+\x96\xf3\xf3\xa2$\xbd\x9d\xdf<]\xf1\x82==\x97\x90R~\xfe\x9b\xe2\xd1\xfc]C+\xbb*\x9e1?\xee\xf7,\xbb\x95\x98\x91\xc4|\xbe\xbfU\xd7G\xc3\xafG\x9eE<\xd7\xa8\x94\xd0\xfc.\xba\xe1\x89\xa6\xe4\x98\x8d9=p\xd5\xf6\x8b\xcdi\x19\xfa\x19\x83\xfe\xd4\x1a\xf1\xe0\xdbo\xbey\xd0\x0f!A~\\\xafy\x9eo\x8f\xf1\x97\x87\x1d\x0d3u\x06\x0b\x06k\xe1`\xa5~\xa0\xdc\x1d\x08g\x07\x9aycm\x11\xa0Z\x058\x86MaE\xd1\x8c`\x195v&\x0dJ\xa5\x80S\xab\x03c\xc6\xca\x94\x19H\x03n\xed\x14{\x87\xcc\xd8\xef\xa8\x9c\xee>\xd9\xdbQu\x04t=\x01\x9f{\x1d=f\xa06nP\xe9\xc8Q\x99\xd3C}\x1e\xeb\x93T2w\x86\xf3\x19s\x99\xfbd-\xc7\xe5'Gv\xdd\x9dP_\xed\x19\xc3\x9d?\x89\xa1\x049\xe4\xfb\x0e0\xe3\xed\x1b\x04\xb84\x1c\xb0\x1b\x85\x12\xf4>l\x04\xad\x01p\xd2\x02\xe0\xf6g#\xf8}\xda\x08v\x0c\x1a\xc1u\x0b\xb8v\x0d\xb8u\x8f\xc3~\xdez\xc1\xce\x80u\xcb<\x8dn%\xbau~y\xa3\x91\x19\xa2\xa7\xae\xaeS\xce\xe2\xa9?>}vf\xf7<\xccS\xb7\xc9%\x8b\xf2\xd4\xdf\xc6\xe5@\x9e\xfa\xab\x8e\x19\x8c\xa7\xfe\xbcC\xfe\xe1\xa9?\xed\x9e=\xd8-O\xf0\xb4\xf5\x0d\x9b\xe5W\xac_\xb3\x9cz\x8a\xcf(\xadM\x1a\xd9\x80\xe8\x02d'\x80\xf3i\xe0\xfdg\xcd\x8e3~Dip+\xc4E\x99\xd3\xff\xa6:h\xa1\xdcC\xff\xf2\xd4\x82?\x02\xbc\x96WAK~_\x1c\x0b\x85\xc2\x15\xcf\xb8$M\xc9\xb5s\x01\xf0g\xfe0\xe3\xf0\xd7c^\x00\xdbe\x9c\x8b\xd3\x81&\x7f\xa5\x99\x189\xd2\xa7k\xfd\x92dj\xee9Kt\x1bTE\x9f\x1f\x0e\x7fb\xf9\x15lR\xae8:\x9a\x02.\x8a\xcf\xb9\xa8P\xffy@\xcf\xb8\x97\xe2h\xd2\xf0\xf9k:\xb7<[0\xcd[\xa8S\xcb\xcbCQO\xd1\xf6\x1b\xfa&\x1c\xc4\xf6\x8fA\x98\x91\x8c2pqmP\xb217,.\xe5u\xfd\xb8\x86)q\xa8\x118\xd6\nT\xb41_\x0e\xacIMq\xac\x0cxT\x08\xccg\xd0O;\xad?u\xc1G6\x199\xbd\xe5\x1d\x1f\xf4SI\xef\xcd\xf3\xe3Kq\x88}2\xd2\x7fs\xbdC1eH\xd4x\xfd\xb8-\xfcM\xb9\x94\xb7b\xfe\x9c\xef\xdek\xd0J\xb1\x8c\xc5\x92\xa7o+\xad\x11#\x1a\xee\"\x1b\xd1\xe7Dz;\xf1\x99\x0c\xd8q\x89\xf8\x1f\xec\x84g\xf0V\x9aC,\xc6\x17\x89\xf1\xdf4\xc5s\x06\xb9\x9e\xab\x95 \x82\x9c\x9b\xe2~\xe0Wb\x0bz\xe9\x16\x9c3\xa8)\x1e\x0b#x.\x8e\xe0\xe4\x9f\xa8\xc4\xb3\x8b\xc1\xc5hk\x8b\xb3\x83\xa9)\x9eZ\x85\x11\x9a\x15\xe2\xe0\x8aj\x8a\xef85\xe27\x9d\x8c\xf8\x0c\n\x1870`\xcc\xe0\xf0po5\x05\xed\xecj\x8aS0\xaa\x11O%\xb9x\xa2\x9b\xe2\x15\xc3kddm\x9d\xba\xb2\xaah\x94l\xf8g\xf7j\xba\xcf\x17\xbfu\xdd)\xec\xd7\xc8|\x9a\xf4\xb5{dxp\xc9\xa6\x91\xc1\xc3\x19\x17f\xfd\x99\x0e\xbf\xd9G*VH\xfdSZ\xfc\xcaaXK\xcc\xb2M\x07\xb8jm\xa9\x19M\xb6G\xc1\x1c1VX\xa5{\xac\xf9>k=\x1d1\x10BG\x8cS\xa1#\x86\x14:b(\xf1\xdb\x8a\xe8\x88\xd1\x16\x8f\x0dS \x1d1\x9c\xc4o:\x19\xf1\x19\x140n`\xc0\x98\xc1AG\x8c!\xa1#F\xbf\xf8\xad\xebt\xc4\xb8\x9b#\xc6\x17\x9e\xde\xb3\x1a\xbf_^\xdd\x9c\x97\xaa\x11\xb5rY\xa2\x1ac\xf5\xa5\xc1\xcf\xc4H\xb4\xa5\x1d-\xb5m\x0c\xf2\xe2S*\x9e\xdd\xc6\xd1Z\xa6\x1e\x15\xc3\x131\xb0dR\xd2\xa5JJ\xbad2\xe3\xe9\x97\x84\xdc\xd5Z\xb4D\x12\x87\x958\xd6\x0b<\xea\x06z-\xe4\x1b\x0f\xb3\xcc\xa3~\xe0YG@p\xd1\xbb\xc5\xb3\x920\xa2\xa2\x80e\xb3w\x8b\x0f\xc7\xbd[F\xb4\x1dF\xb6\x1f\xf0,\xf9n\xf1X\xbd\xdabV3\x04\xa5\xbdOP<\xfbn\xf9\x12\x1a\xe0kG\xd4en\xfe~\xb7\xcc\xc8\xea\xef\x16\x1f\xae\x7f\xb7\xe0\"\x00\xbae\xd4\xa0rw\x05\x19\x19\xf5Y\x1fc\xa7.\xf6x\x83n\x99\xa8\xd2.\xb6PS\x1c\"\x16\xba\xe5\x8e\xd7o_'\x02\x8cW>\xf8\x9d\x9b\x9a2\xd2\xe3ddd/\xc0\x04=\x01c\xd6-#\xae$\xeb\x96\x11\x17\x95u\x8b\xdf\xf5e\xdd2\xfaR\xb3n }\xd5Y\xb7\x8cb65e\x92\xc1=\xc9Z\xeb\xc8\xd38\x95I\x9b\xe2\x8f_(\xf1\xa2J5e\xd2\xf6xwM\xc0k\xdc\xbae\xd6\xcb\xdd\xfa\xa4\x9aa9w:Qyn{\xbe\x9b\x9d\xfb\x9d\xfbF\xfc\x0d\x03O\xa3\xc0S3J|\xf5\xa3d\xd4*9z\x1a\x8e\x9c\x82^w\xf6\x1b\x19\xa5t\x18\xadx!|\xf3\xed\x1f\xfe\xf0\xf4\x7f\xf9\xbe>A\x07\xc0\xf8N\x00y]\xd7\xfa\xf0\xed\x1f\xfex\xfd\xf4ko\xca\x9d\xdd\xfdo\xc4\x87\xc9\xda\x94\xd1\x8a\x1c{\xd6-]\xa9\x87,J\xb3\xa8\x185?\xef\xa4\x1d\xa6\x05\xae\x15\x1f\xb1\xa4\x8cYLF\xac\xe1#\x95\xbc\xfb\xe9<\xe3yz\xcc\xd6\xfajo9\xe7\x8eI\xf4\xeb\x91\xc7\xb7 &b\x11m#^\xbb7Z\xcf\xfc\xea\xbaj\xcb\xd5\xd1YZ\xa4\xeb4\x86\xd5q\xbb\xe5\xe5M\xba\x0bu\xf7\x85j\x0f\xec\x8fy\xb9\x08\x00+ \xe6,/\x86\xcbM\x13\x0e\x0f\xce\x1f\xc0\xfa\x8ael]\xf0l!o\xeb\x96\x17\x92\xe7|\xb7\xe7I\xb9H}x\xf7\xd3\xc3\x1c\x0e\xac\xb8R\x1f*\xf3\x19\x0d\x7f\xa1\xe8\xb8\x03]\xeaH\x17+\xb5\xf1\x88\xe5\x10\x0d\\\xcb-\xe4\xa3\xf8t\xef\xfd\xbd\x1f\x1f\xab\x9a\xcb\xa2\xf3\xab\xf4\x18o`\xc5\xd5Z\xbafI\x9aDk\x16\xcb\xf91\xfc\x95G|\xb1[\x9c \xd5\xc9\xac\x06\x0f\x16\x0f\xc4\xba&o1Y\xaf\xf9\xa1\xe0\x9b\xc7\xb6<\x94\x17 \x1c\x842\xa35?\x83\x82\xb3}\x0e\xc7\xfc\xc8\x84\nT\xb6\xa7C\x14\x8b\x9a\xe9\x9b\x94WQ\xc2\xb2[uI\xca\xed\x81\xeb;L\x8a+~;\xfc\x19\xb5\x02BT\x88\x83\xf61\xaf\xe7\xcb,\xf8g\xd9m\xcf\x93\xdb\x05\xfc)\xfd\xc4ox\xa6\xae\x8c\xff\xf0\xee'c\x7f\xe8\x0b\xea\x87?\"WF\x0e\x1f\xaf\x8a\xe2\xf0\xf1L\xfd7\xff(sU%\xa9\xfe\xf5L\x8e\xa25K =\xa8\xbb\xd3\xe3[\xb9\xab\x1c\x0f:\xb9\xa7\xe5\x1b<\xbb\x91\x17\xe1\xb3\x02\xf6\xec\x90\xab!!kZ\xa4e6P\xe9\x9c\x8b\xd4\x8d+L\x18Iq\x9c~\xcam\x97E\xff3\\l\xab\x9a\x8a\xae\xe4\xdc\xe4\x03\x12\xaa\x11\x83N\xac\x1ej\xd4\xb1\x84\xedl\xe6\xdd*\xe3\xecZ\xac\x12\xba\xf0\xc5\xe3a\xdd\xbdN\x0b\xfe\x0c\n\xb1bo\x8f\xc9Z\xcd\x15\xd1&\xbd\xc2\xac\x8fY\xc6\x93\"\xbe\xad9\x9e\xf5\xa4N\xb7\xdbh\x1d\xb1\x18\xb1K\xac\x8e[\xc8\xb8X\xfb\xf9\x99L\xbb\x12\x15\xe6\x03G\xd1\xcb\xd2\"+g\xd8\x8a\xef\xa2$\x11\x8d\xf8\x14\x15W\x96\xa5\xfc\xf4>u\xdbZx)\xe7]\x0eiq\xa5\xa6x\xd2^K\xe0\x91\xb6\x10\xf9\xfeP\xdc\xea\x89\xfa\x18\xf6\xd2<\\YF\xa3l\x90\xf4\xc9G\xfbC\xcc\xf7\xe5u\xf8\xf9\x81\xaf\xa3m\xb4\x86\x9c\xefYRD\xeb\x01j\xa6\x9cx\x13\x18\x0d\xc8\x83A\xc3\xb6\xf8Y\xac\x1c+n\xb2\xae\xd5\xec\x81\x93-\xdf\xe4\xccY\xa57\xdc\xb4O\x8f\xdb\xde\xeb\xd2\x90f\xcc\xc7\xe7\xc9\xed\xc7\xea\xf8\xc0\x12`\xd9**21\xfb\x06jd\x96f\x16\xa7z\xfc\x00\xeb\xef/\xb1P\xca5^\xd5j5h\x0d\x95\x06\xce\xc0\xf8zkF{\x1c\xaddU\xf5\xd2\x9eC~<\x1c\xd2Ln\x8c\x07\xb6\xbe>?&\xe2?b;T\x9d\x9d\x9bi5l\x0f\xa4[8\x16j\xd51\xf35\x17+\x1f\xdbl\"5ya\xc7\x13\x9e\xb1BVX\x9cb\xca\xd4F\xe2[\xaak\xfa\xcb\x7f\xf5\x99\x89Q\x0bO\x9f\xc1[Q?1YuUY=\x0b\xf6\x8b\x7f\xf9\x17\xdb<\xfb!Ma\x9b\xa6\xf0\x1d,\x16\x8b\x7f\x1d|T\xd4\x8c%\xb7\xc3\x0f\xb1\xe4v!\xea\xf4C\x96\xee\x1fm\xd3\xf4\xf1\xf0\xe3\x8b\xc5\xf0\x96\x14m\xe1\x91(\xf2\x83l\xdd\xfb\xf4\xd1?\x892\x1f\xc3o\x96\x15\xd6V\xee\xdf\xed\xca\xfd\xd6\xa2\xdc\x7fg7lz\xed\xc2w\xd2\xf8\x12\x9f\x9bP}Q\xfe\xe8\x874]\xacc\x96\xe7\x08\xed\xa9*\x8b\x17U\xc3k/\x0f\xd7g@\xad\xa5^\x7fg\xd1\xeb\xdb\xdb\xe2*M,\x16\x95\xaa\xe1\x0fi\xfah\xb1X<\xb6\x8dH\xa5\xd4G\xd6\xe7\xe4\xc8\x95j\x1f\xabuQ\xd8\x85R\xfa\xcbW\x97/\xde]\xbc}\xff\xe6\xddc\x9bS\xa9\x1a\xe9\xf6J\xa8j\xd8\xd5\xfd{\x8b\xba\x7fL-v\x9bP\xf5\xb3\xef\xe0\x9f\x0e\xab\xc5\x0fi\xfa\xdbb\xb1\xf8\xfb\xf0\x0b,\xb9=\x13\xe6\xa6x\xeb\xa0l\xa6\x9fY\x96_\xb1Xt\x82\xbda6\xf5\xb6kd\xa9N\xb4mU\xe6C\xb2\xaf\xaa#++'\x9a|\xea\x7f~\x07I\x14['\x88\xbd\x8e\x033A\x9c6e?\x98\x95\xdf\x9c,`u[YbfoR\xf7j\xde\x1a\xe7\x96\xb0\\\xfa\x8b~\xd8ai\x9d\x8bC\xf4B\xfe \xac\xd4\x87\xe2\x10T\xee\x9fbo5\x19\xf6\xd4\xe8\xe8/\xbc\xdc\xa8\x92\xf8\xd6\x1c\x02ON\xe8\xa55\x0cl[pe\xa0I\xa7\xc0\xc3\xf3\x87\xfdE\xeb]\xd5TI\x1d9\xb9\x1e\xc1\x0f\xb6i\xbaX\xb1L6\xe6\xf3\xf9\xed\xe2o\x0f\x94V\xd4\xc1i\xf8\x9c(\xab\xf2@\xbc#\xd6\xea\xde\xc7\xfe\xfd\xf2\xcd\xeb\xfe_\xbf\xfb\xee\xbb\xef\x86\xfbS\xbc_96\x94)\x99\x8ae@\x9bH\xea\x8cv\xcc\xb9qu\xee\x8e1\x1bH\xcb|Z\x94xm\xc3+C\xe7\x0c\xf8~\xc57\x9b\xca\xe49\xd3\x96\xd4\x80;\xa4f\x80l\xa5\xf2>\xfe\x9bP\xdfG}\xb2o\xf8\x81Mg,\xccRb;2\x8b\xd1#\x16\x95\xea\x18\xbb\x8db>\xbca\x98\x85\xe8-\xcf\xf24\xb1\xce;\xed\xaf\x92\xb7\xbb.e\xd7~\x07O\x87\xbfP\xbe$I\x02\xfa\x9do\xfd\xb71\x00k-\x1fH\xa5>x\x06\x0f\xba\xa6cS=\x0b\xd5\xf2\x07g\xb62e\x9b_\xb3\xbd(\xf7\x7f\xab&\xfd\x1f\xebK\xa2\xcd\xadw|\x1b~\xb1\xd5\x87\xad\xe6\xa0S\xc3$\xca\xe1\x13\x8f\xe3'\xd7I\xfa)\x91\x0b\xca\x15\xcb\x81\xc1\xfa\x98\x17\xe9\xde2\xbb\x9ac\xfdL\xd9\xfa\xad `n\x17.?/F\xb2LK*\xc7q\x7f\xe1\x1f\xe5\xcc3\x03\xfc*\x8d7:\xddiU3\xe9\xeb\xd3\x13\x03\xb4oM\xcf\x8b\xfer\xe5g\xcb\xa9\x01\x8f\xc4\x82eTr\xe2\xc81\xbe\xc6\xbf\xfc\xd7_\x1e\xdbf\xd1T\x83\xab\xf9e\xfb\xf8\x92z\x12\xc5>]|\xfb\xf4\xdb\xfc\x81e\x9c\xa8\xff\x1eX\xc6\xf6\xbc\xe0u\xda\xea\x13\xb9\xe6>\xd3$\x99Z1Q\xf2Lz\x81k\x7f\xca\xf8\xaf\xc7(\xe3\x9bgPd\xc7\xfa\xd9\xb7\x0bX\xe9=Mw\x91\x18\n\xb6k\xd4\xe9\x92g7\xd1Z|\xe2|\x9d\xe6\xfb4?_\xb1\x9c\x9f\x17%#\xef\xfc\xe6\xe9\x8a\x17\xec\xe9y\x92n\xf82J\xb6\xa9z}WEY\xe6\xc7\xfd\x9ee\xb7\x12\xc9z\x9dn\xf8E\xb2M\xe1\xd7#\xcf\x8c\x83^\xfba@\x14!\xf3 \x19#!=p\xd5\x0f\x17\x9b\xc6\xdb\xfag\x03B\xd5j\xfc\xe0\xdbo\xbey\xd0\x8fdA~\\\xafy\x9eo\x8f\xf1\x97\x07aiSe\xd9\xd2d[\x06\xbf\x00\xd6\xaf@\x0d\xddXZ\xd3s[?\x06\xa8\x0f\xca\xa7\xbe\xb5`\xd5H\xb7O5p\xad\xf9\xa0\x11\x99\xb7\xa7\xff\xa85W\xf6\xb4\x9fl\x8e\x9a\x01\xc6\x19\xe2\xb3q\x94\x17<\x91\x14\x87Q\xe5$\xbc\xf8\x94f\x03\x9aG\x94\x81\x1c\x9a\x83e\xac\xafX\x92\xf0>\x0c\x15p\x85\xa0\x1c\x8d\xfb4\x89\xae\x87\x18o\x88\x0fI\x9f\xad\xad\x84I\xa6b\xf1\x19s1\x0d\xa2\xcaB\xb2\xc3\x1aG\x8a\xb1\x94WKN>\xbc.Y\x15aW\x82\xdcj\xc7\xf4\x15;\x1c\x96\xa3\x0b\x99b\x88\xef\",\x85w\xb0\x98\xd51\x8a7\xcb\xe6\xee\xdf\x16D1\xbb\x14\xbb\xa5 j\xb3\xe1\x07km\x86\x89\x84V\x12\xa1u()\xb1\x0f(\xfd\x1c+\xac4OD\xf3\xcbG\x15\xa9m\x9fn\x8e1o\xdb\x80\xa7b\xd5\xbc\x12\xef\n\xe8\xf2\x07\xdf\xc9\xed\xccF\xf7\xef\xaf\xaf\xf8\xfa:?\xee\x87:R=\xf9\xb3\xaaiT;\x8a\x8b\x13\xc6/\xaa\xe6\x17\xfd)6\x95q\xbb\xcc7\xd7\x93\x0c\xe0\xb2B\x0f.\xa3d-\xf3|\x8a\xf2\x9f\xe4\x9bk\xf8f\xf1\xfb\xdfu\x1f\x13\x1a\xb6j\xad\xce'\xed\x11\xffS3\x87KFX \xe2\x0c\x96\xdc\xf5f\xc9%\xfb\xf5\xc8\xf3\xa2\xf9\xa5\x92JV\x1a\xef\xc4\";\x11b\x91u\x08f\xdd,\x88EF,2b\x91\x11\x8b\xac&\xc4\"#\x16\x19\xb1\xc8\x88EF,2b\x91\x11\x8bL\n\xb1\xc8\x88EF,2\x9c\xd6\x89EF,\xb2\xbe\x9f\x88Ev\"\xc4\"k \xb1\xc8:\x85Xd\xc4\"#\x16\x19jp\xcd\xc2\"\xf3\xe7j\xe5\xb7\xc9:Jtj\x93\x1e\xa6\xd6\xa5z\xa6$jIr\x96~\xb1\x8f\x9f\xa5\xdf\xd1\xbf\xde3zVCimQ\xe5\xae\xd24\xe6\xec\x14!m\xc3oZO\x8e\x99\x1cL\x8f\x10\xfav\"\x84\xbeu\x08\xa1o\x84\xbe\x11\xfa\xd6\x10B\xdf\x08}\xeb\x14B\xdf\xdaB\xe8\x1b\xa1o\x84\xbe\x11\xfaF\xe8\x1b\xa1o\x84\xbe\x11\xfa\xa6\x04\xa1uB\xdf\x08}\xeb\xfb\x89\xd0\xb7\x13!\xf4\xad%\x84\xbeu\n\xa1o\x84\xbe\x11\xfa\x86\x1a\\_8\xfaVe\xfe\xe6E~\x1e\xb3\x82\xe7\xc5 \x14\xf7\x93|\xa4\xbc\xfa\xe8\x92\x17%*\xa7\xde\xae\x92\x89?\xc9y\xd1\x87\xce\x9d\x16\xa3\x1f\xbcg@\x9d\xba\xbea\xe8\xb2\x19\xabs\xc2v\xbf\x87\xed\xde\xb9\xe2\x0b\x80v\x101\xd9V=\x08A\\\xe0\x86\xa81 k\x0dHP\n\xb0\xd5W\x82\xf5\xea\x18\x99\x05\xa0\x82\x80 \x15\xcc\x02T\xc1\x94`\x15\xcc\x06X\xc14\xa0\x15\xcc\x07\\\xc1\\\xe0\x15\xcc\x04`A`\x10\x0b\xa6\x06\xb2 8\x98\x05S\x02Z\x10\x1e\xd4\x82p\xc0\x16\x04\x06\xb7 \x1c\xc0\x05\x1e \x17\xcc\x01tAx\xb0\x0b\xfc\x00/\x08\x0fz\xc1T\xc0\x17`\xc0/p3N\x90 \x18\xcc\x0b\x84\x9d|\xceb6\xcd\x02\x88A\x08P\x0c\xe6\x00\xc6`\x06p\x0c\xa6\x05\xc8\xc0\x0d\xc6\x01,P\x06\xee`\x19`\x1c\xcf#@3@\x96oq\x8fM \xa0\x81\xb7\xf6\xdd\x804@6\xdd\x13P\x831\xa0\x1a\xd8U>-\xb8\x06n\x00\x1b8\x80l\xe0\x04\xb4\x01\xbeW\xfc\x007p\x06\xdd\xc0\n\xbc\xc1\x94\xe0\x1b\xf8\x00p0\x01\x08\x07H\xd5;\x82q\x10\n\x90\x03l}-3) 8\x07\xa1\x01:\x08\x0b\xd2AP\xa0\x0e\xf0`\x1dX\x01;\xb0\x82v\x10\x08\xb8\x83p\xe0\x1d\x84\x06\xf0\xc0\x13\xc4\x03w \x0f|\xc1<\xf0\x02\xf4\xc0>\xf1\x01\x81\xbd\x80\x03\xfe\xe2\x02\xee\x81/\xc0\x07> \x1f\xd8\x95\x11\x0e\xec\x83\xd0\x80\x1f\x04\x04\xfd $\xf0\x07\x13\x0f@G\x00\x10\x9cA@\xa8\x01\x81\xa7r\x93\x16Q\xb2[\x1e\xd2O\xc3w\xe0#]\x0460J\xc9!K\x0fi\xce\xb3\xe5!\x8b\xd2,*\x10\x80\xcd$_n&\xad4\xb8Xg\xca\xcaN\x94\xb2.\x07\xb6\x8b\x12\xd9g\xdd\x95o|\xabzX\xb9\x88\xb9\xf49\xd4\xfej>\xdb\x05PVR\xd8\xb0+;j\x95\xf0\xcf\xc50D\x86\xd27\xca\x0d\xa4\xf3\x8a\xfe\xf7\x90/\xc6\xd4\xc7t\x82\xf8\xa7\xf6\x8f\xb2\xe2\x06\xccE\xde\x80\x99\x08\x1c\x10\x98\xc4\x01S\x139 8\x99\x03\xa6$t@xR\x07\x84#v@`r\x07\x84#x\x80\x07\xc9\x03\xe6 z@x\xb2\x07\xf8\x11> <\xe9\x03\xa6\"~\x00\x86\xfc\x01n\xc6 \x92\x04\x02\xf3\x12AN>G\xc9\x13\xc6\x10C`\x06r\x08LK\x10\x017\x1a\x03`\x89\"\xe0N\x16\x01\x0c\xf0:\x824\x02\xc8\xf2)y\x82+\xa1\x04\xc6\x90J\xc0\xae\xf2i\xc9%\xe0F0\x01\x07\x92 8\x11M\x00\xdf+~\x84\x13p&\x9d\x80\x95x\x02S\x92O\xc0\x87\x80\x02\x13\x90P\x00\xa9zG2\n\x84\"\xa4\x00\xb6\xbe\x94<\xc1\x97\xa4\x02A\x89*\x80'\xab\x80\x95\xb0\x02V\xd2\n\x04\"\xae@8\xf2\n\x84&\xb0\x80'\x89\x05\xdc\x89,\xe0Kf\x01/B\x0b\xd8'> \xb8\x07\xe0\xc0?p!\xb7\x80/\xc1\x05|H.`WF8\xb2\x0b\x84&\xbc@@\xd2\x0b\x84$\xbe\xc0\xc4\x03\xd0\x91\x00\x03\xce$\x18\xa0\xe4 F(y\x02%O\xa0\xe4 \xa5L\x97<\xa1\x0b\xb0\xa7\xf4 \x94>\xa1\xf9\xee\xddr\x0c\n\x04R\x8f\x9a\xe2n\xae\xe6Y\xd0\xf9P\xc8|xT\xbe\xeb\xdc\xeb\x85\xc8\xcf\x83\xc6O\x80\xc4\xcf\x84\xc2\xcf\x82\xc0\xcf\x81\xbe\x87D\xde'E\xdd\xc3\"\xee\x93\xa1\xed\x81\x91\xf6@({H\x84=\x10\xba\xee\x8a\xac\x07G\xd5\x03#\xea\x1d\xe7\\\xdbZ\x18\x18I\x9f\x04E\xb7\"\xe8H\xa3\x01ud\x9a\x155\xc7\x9a1\xb3\xa0\xe5\x93#\xe5\xc1Q\xf2\xd0\x08\xf9\x84\xe8\xb8\x036\x8bB\xc5\x1d\x11q\x1b\xe2\xe3\x8b\x84\xdb\xca\xa5\xf4 C\xe2\x8dtS\xfa\x04\x18\x83f\xbb!\xd9\x94>\x01\x85X\x07A\xab\xadu\xa4\xf4 .\xc8t8T\x1a\x89HS\xfa\x84\xf1\xe8\xb3\x0f\xf2\xec\x88:{!\xce\xeeh3\xa5O8\x95p\x88rP49\x14\x92\x1c\x0cE\x9ejp9\xa2\xc7n\xc81&}\xc2U=8\x13tP\xeb\x81\x15W\xb5?U1\xadEv\xc4\x85\xb4\x0e\xc4l[C\xb6)\x8d\x03\xf8\xea\x96\xd28\xcc\xa2f{\xda\x01J\xe3P\x93 \xf4Ii\x1c(\x8d\xc3}I\xe3`\xb28l\"1%VG\xa1\x912\x85\xc3:\xdd\xef\x8fIT\xdc.\x0fi\xaa\xb1\xee\xae\xcc\x0d/\xccso\xd34.\xf35(\x80P\xff\x02\xa2\x04X\xa7Q\x92w&jh\x14\xa1\x1f\xb8g\xe9\x19*\x1d\xb6\xa5\xf8\x02\x18\x0d\x1b\x9e\xa4\xfb\xd1\xc8\x04\xdb\x8b\xe5cd1X(\xe1%_\xbfH\xa3\x1a\x0b\x0e\x8a\xf4\x9a'\xfaL\xabZd\xd6:q\xc0\x10\x7fZG{\x16\xebj\x0e\xb9b_\xbfy\xff\xea\x99<\xa7\xabg\xf5\xe17\x92\x88\xc5K\xbe\xd6\xa7\x83\x12\nj\x1c\x11\x94\xdb\xa3\xbf\xf0<\xda%\xac8f\xa5\xc7\"/\x98\x0cb^\xdac\x8d\xcaU\xe6M\xf5Z\x9b\x1dgH9\xd2U}\xa2\xb0a;\xea\xb4X\xfd\xf8=\xb3\xa7\x10\xe4\xb8Q\x16\xcf`\xf9\x80XS\xc0\xb6\xae\x00\xa6\xa2J\xec\xd5UB\xe6\xce\xd7j\xee\x00ZEC\x0bH-N\xa7\xb6*\xc1\xa3c\xf2\xc4xp\x92\xc7fh\xf75\xa1ul\x83HZ3I\x1e\xddp\x95\xdc\x81\xad\xaf\xcfT\xda\xea\x1cr\xa9$\xc8\x99\x0c\xa7^_\xf1\xf5\xb5\x7f\xd8\xc3@\xd3p\xa6]_\xc1\xe7CJ#\x1f\xd2\x89\x90\x91\xd7!\x98E\x98\x8c\xbc{j\xe4\xe51\xcb\xaf8\xca\xb0\xbbT\x8f\x96\xd6\x9c|\x15\xf8\x8dZ\x96\xb7x\x97\x98.H?s\xcf\xec7\xad\xd0/w*W\x83\xe0\xc0\xb3(E\xc4r\xa3'\xa3\xe5~\xaa\xad\xbc\xa1d\xc8\xd5\x86\xfa\xa2}\xd3U\xd2\x1co\xaf\xc48\xad\x1b\x12uS\xa06\x94\x07\x12#\xeb\xfb\xa3\xa2\\ZP\xd1Z&0+\xaet\xca\xa7\xbcH3y\xd5\xd8@ \xf2\xe6\x9c(\x97\x17J\x98\xab1\xe2\xb5\xf40\x03;\x88\xde\xcb\"\xf9\xef\xbdI\xe7\x95\x17\xea\xba\x07i(\xf6\x9a6\xca\xb8\xa9\xc2\x1b\xcc}+,\xe3%\xc4\x95\xe8\xb4\xbaL\xb7\xf6\x8a\xe5\x90\xae\xe5\xfd\x0f\x98\x98e=\xae\x9b\xd1\xa1\xfaox\xa7\xed\xd8\x0b\xee\x14\"Z\xcf\\V\xd0\x05wt\xc1]\xfd\x99\xaf\xe4\x82;\x84\x03X\xef\x93\xb8#BOa\xe7'\xdb7\x1d\x0bN\x84\x8e\x05\x1db_\x15\xe9X\xf0%\x1c\x0b\xaa\xd6\xe4\x05\xcb\xe4\xc5\xbb'\xf9\x93\x9b;y\xf3\xb1FK\xccmj\xe5C:\x17s\xd5\xa0\xda\xbe\xdfn\xd8\x14\xf9*;z\xd8\x92\x90U\xa5\xd9\x9c\xa2\xcd:a\xe7\x17\xdfbJK=\x85r)-\xf5,j\xb6\x8faJK]\x93 \xf4Ii\xa9)-\xf5\xd7\x9d\x96\xba\xcdP\xe77\xd1\x86'k^:5\xcd\x1f\xd4K]^\xcb\xe7q\xfcJ?T\xd1\xf9\xe2\x18\xcc\x9b\x9d\x1e\xca\xdaK\xfa\xe7{\xe6\x9cl\xea\xad-\xf7\xeaD\x81\xf7\x13\x02]\xa8M\x17j\xb7\x85.\xd4\xa6\x0b\xb5\xe9Bm\xbaP\xfbD\xe8Bm\xbaP\xbbe[\xd0\x85\xda\xdd\xd6\x10]\xa8M\x17j#\xca\xa5\x0b\xb5\x87\x84.\xd4\x1e\xabu\xbaP\x9b.\xd4\xee\xfb\x89.\xd4>\x11\xbaP\xbb%t\xa1v\xa7h\x7f\x15]\xa8-\x9bD\x17j\xd3\x85\xdaw{\xa1vS\x1a\xa7F\xe3\xf6\xd7xP\x13 \xe9\x90F\xf2$\x1a\xbb$%\x95PK\xf9\x17QVg\x806Eg\x8f\xa2G\x15V>\x00\xca\xb1\x8fu\xa2\xcf\xc2\x04\x08\xc3\x03\x08\xcd\x02\x98\x88\x030\x07\x03`4\xfe?\x0b\xfa?\x03\xf6\x1f\x1e\xf9\x0f\x87\xfbO\x88\xfa\x87\xc4\xfc'B\xfc\x83\xe2\xfdA\xd0\xfepX\x7f\x10\xa4\xdf\x0d\xe7\x0f\x8c\xf2\x07\xc5\xf8;|\x11\xc3\xab]P|\x7f\x02t\xdf\x82\xed\xa3\x0c\x00\x14\xae?\x1b\xaa\x8f3Gf@\xf4'\xc6\xf3\x03\xa3\xf9a\xb1\xfc\xc9\x90|4\xd2\x8c@\xf1\x9d0\xfca$\xcc\x0f\xbf\x1f.\xb3\xd7I=\x1dr\xef\xaaM\x17\xd4\x1e\xa70'\xc4\xde\x13\xaf\xef\xf7\xf6O\x88\xd5\xa3\x91z\x1cN\x8fE\xe9\xadZ\xf6A\xe8]\xf0\xf9!t~\"l\xde\x11\x99\x1f\x87\xcb[\x10o\x17L>\x00\"o\xa9]\xefH\x0f\x86\xc5\x07D\xe2\x83\xe1\xf0\xa1Px\x14\x06?\x84\x11\x0e\xe1\xef\xd3\xa3\xefA\xb0\xf7\x80\xc8\xbb;\xee\xee\x84\xba{`\xee\xae\x88\xfb \xde>\\;,\x1c\x8a\xc7\xda=\x90vG\x9c\xbd\xb7\xb9\xa10\xf6\x80\x08{\x18|=\x10\xba>\xcdPrB\xd6]p\xf5\xd3M\xb3qf\x93x\x83O(e=\x8e\x92\x82&\x9bBA\x93\x1db\x87H0 \x89\xb5\x8dFp\x9e %3@%\xa1\xc0\x92\xf0p\xc9d\x80\xc9<\x90\xc9\x04\xa0\xc9L\xb0\xc9,\xc0\xc9\x1c\xd0IH\xf0dR\xf8$,\x802\x19\x84\x12\x18D \x04\xa3\x84\x04R\x02A)\xae`Jp8%0\xa0\xe2\x01\xa9\x04\x06U&\x81U\xac\xc0\n\xdah@\x81+3\xc2+x3f\x06\x88er\x90%8\xcc\x12\x1ah\x99\x10jq\x80\x07Pp\x8b#\xe0buvz\x82.\xf6r)hrH\xf5-\x16?\n\x0bS\xa6{(d\x06\x0b=\xc2\xfe\xe3\x97K\xf1\xffb\x02\x88i\x9d\x89\x85M\x1a\xa3J\xafb\x837\x1b\xceI\xe9\xa7\xec\xc7\xf2<\xe6B\x7f\xac\x0e\x85\xc4\x7f<\x11\xe2?v\x08\xe6\x08\x819@ g\xb5\xcb\xe1a\x96\xa3C\xa8\x83C\xf8c\xc3d\x87\x86y\x8e\x0c\x13\x1c\x18f:.\xccrX\x98\xe3\xa8\x10\xf2\xa00\xe91!\xec!a\xb2#B\xe0\x03B\xa0\xe3A\xc8\xc3A\xa0\xa3\x81\xeb\xc1 \xf8\xb1 \xf0\xa1\xc0\xe3H\x10\xf8@0\xc9q\xc0z\x18@\x1a\x0d\xc8\x83\xc0l\xc7\x00\xbc\x19C\xfc\xc7N!\xfe#\xf1\x1f\xa5\xb8k\x97\xf8\x8f\xc4\x7fDU\x82\xf8\x8f\xc4\x7f<\x11\xe2?\xb6\x85\xf8\x8fu!\xfe#\xf1\x1f\x87^ \xfe#\xf1\x1f\xa7\xe2?j\nV\xad\x9c\xd0\x0c\xad D\xc8fszs\xa6\x07\xa7o\x05h\xdc\x082g\xee\xc6\xe1\xccK\x12\xa7\xf4V\x1b\xaaf.\xf7y\xad\xaba\xd6f\xae\x7f\xbd\xaf\xb4\xcd/\x18\x1e\xb3\xd23\xd1\x8e\xae\xd0\x0b@S\xac$\xcd1\xf5\x0e8\xd3\x9b\x82\xa0j\x06'k\xa2\x86\x12 \x87\x13 \x11W\xc0\xf7\x0f8\xb8,\x8d\xcc\x82\xbeB@\x04\x16fAaaJ$\x16fCca\x1aD\x16\xe6Cea.d\x16fBg!0B\x0bS\xa3\xb4\x10\x1c\xa9\x85)\xd1Z\x08\x8f\xd8B8\xd4\x16\x02#\xb7\x10\x0e\xbd\x05\x0f\x04\x17\xe6@q!<\x92\x0b~h.\x84Gta*T\x170\xc8.\xb8\x19'H\x84\x17\xe6Ey\xc3\xd1=\xa1\xd7&\xad-R\xe2\x7f\x1f\xe6\x1eAg\xd5Mf\xdd]\xd4\xf8r\xed~7\x13^\xc9\x92\xfa_\x0d\xc3\xb4\xeblX\x89\xd5\x00\xb6\x9b\xbe\xe6\xa2\xcba\"\xa2uD\xa1\xc6\x92\xee\xda\xff\x1e\xb2\x83\xcb\x8b7\xf5I\xa6\xbc\x83\x13\x0e,\xcf\xd5\x16\xa2n\xea\x94\xd1\xa7\x0b\xf5\xfb@\x81\xf2\x9e6YT\xffE\x9d}C1-\xd8\xd8K\xbaz.,l\x8bV\xcd\xe0\x11\xa1\xbc\xee\xaf\xef\xc6\xc7\xda\n\xbdm(\xa9~\x17\xe2\xc0\x07>1y\x99\xde\x19DEnL\x82\x1c\x8e\x89\x1a\xa2\x1b\xb5H~\x8a\xf2\xd3\x1e\x1e`R\xe7^T\xea\x9c\xb8\xd4\xa7?\x13\x97\xbaC\xecK\x1c\xeed\x8f\x9a\xcdn'\xfaYN\xf3\xa1N\xf2\xe1O\xf1\x93\x9d\xe0\xe79\xbdOpr\x9f\xe9\xd4>\xcb\x89}\x8e\xd3z\xc8\x93\xfa\xa4\xa7\xf4\xb0'\xf4\xc9N\xe7\x81O\xe6\x81N\xe5!O\xe4\x81N\xe3\xae'\xf1\xe0\xa7\xf0\xc0'p\x8f\xd3w\xe0\x93\xf7$\xa7n\xeb\x89\x1bi4\xa0NG\xb3\x9e\xb2\xb1f\x0cq\xa9;\x85\xb8\xd4\xc4\xa5\x96\xe2\xae]\xe2R\x13\x97\x1aU \xe2R\x13\x97\xfaD\x88K\xdd\x16\xe2R\xd7\x85\xb8\xd4\xc4\xa5\x1ez\x81\xb8\xd4\xc4\xa5\x9e\x96K]?\xd0\x06\xa0\x03W\x9f\xab\xd0\xd1\xc55\xaf\xfb\x8c\x1ag\xd9\x16\xb8\xa8\x91D\xa6\xd7gE\xf8Up\xb2\x02\xc848T\xc2\x8e\xd2}\xb4\x8b\x92F)\x12C\x14\xa3q\x18F\\\xc0\x1b\xb1s\xa6\x89<\xb6\xa6\xdbm\xce\x0bq*lV\x17jN\xe8\x9c\x17m:\xf5\xaf\x9a\xefl\xa4R\xe0\x96\xc5\xb9\x97\x06\xa1\xcf\x05\xd1\xa1ZU\xeb>\xed\xb6<\x05\xba\x89R\xc1\xc9q\xcf\xb3hm\xfe&\xe7\xb8\xa6z*_\xcc\x15OLw\x1c\x93\xd2\x8d\xd5\xb2p/di1\xcf\xf3J\xb1\xca9t\xccE\x07\\\xf3!-k\xcd6\x8b\xbc\x135\xb7\xe0\xde\x0eE\xc7\xd1>\xc2\xeaY>k\xf0\xd3>\xf4W9>\xeb#\\\xa3\xad\xc2\xa8<(\x8fI\xbd\xd0\x8b-\xc4|[h\xefZT\xa8%\xd8X\xa1\xd2W\xab&\x8d*Xhyu\x0b\x9c\xad\xaf\x80\x1d\x0e_\x9c>\xeb\x18w\xf5\xfe\x90VkoH\xa2 \x97\xad\x16\xcb\x14\x88\x7fD\xc9&Z\xb3\x82\x97\xa8\x8b\xd1\xa5xPO\xe1(Y\xc7\xc7M\xcb:e\xaa\xe4\x12\xc6j\xf5\x97\x04\xdd\x1cc\xde\x19\xe6\xf2cz\xa3\x8a\xd1?\xde\xb3(\x97\x9b\xb4\x88\x92\xddR)\xb4\xdbq\xd3hM\xe3\xf9FV\xfc\x9af3\x1e3\x9d\n^=\x1f\x8c\xb8e\xaa\xc3\xb3(\xdd\x0cS\x1f\xac\x08Eg;e\xc1\x8dv\xc6<\xd9\x15e\xfe\x7f\xf5\x1c\xa8\xe7\xfa\x9c%\xa2\x1di\xce\xe2e\xa3T\x0bUc\x88.\x026\xca\x08`\xd4\xab\xc4\xae\xe4\xea9\xd9\x08Y\xee\xe0\xa3H\x85\x03\xbe\x03\x95 K\xc5\xc2:\xa0@\x12\xd9\xaa_d=\xde6\xbb[\x9f\x9e\x1a}\xac\x03\xe34{E\xac\x1e\xf0MT\xf0\xcd\x12\xd9\x0b(\xfd7\x9a\xf0Sc\xb2\x94\x1f\xb4O\x9b\x0d?\xa4yT\xe0\x17\xa6\xe6\x0b\x88\x95I\xbf\x10li\xdaG\xc9R\x7f\xc3\xa6\xd1/k\xa2ox\x92\xee'\x9a\x8a\x00l/\xac\xb6\x89\x8as\x99\xd9/\xd2\xa8\xc6+\x86\"\xbd\xe6\x89v\x1d\xaa&\x1a[\x93%*\x10PV\xd4\x06u\xbd~\xf3\xfe\xd53\xe9\x0bU\xcfk\x07c$Q\xe1\x8b\xa4\xd0\x1e\x98\x12no\xb8a\x94ky\xf8\x03y\xb4KXq\xccd`\xae2\xae$\xe7:\xdd\xa5\xd2\xdd\x81\\;~\x8e\x92h\x7f\xdc\x9bQ\xae\x17\xadj]H\x81\xcb\x10O\xebD\x14\xb2g\x9f\x97\xe5\xfc\x9a|\x8d\x18\xec\xc7\x9f\xd9g\xd9\x0e\xbd\x11\x8bf<\x17\xaa\xbcJ\xe3\x8d\x98\xd0\xd5D\x06\xd1\x95e\x0b\x17p\x91DE\xc4bM_\x80o\x07\xd5\xbeO\x93\xe2\xaaw\xa1\x14S\xb9Z,iR\xd3\xa4\xbe\xdbI]\xed\xa3\xd3L\xef(YFj\xb6\x94\xd3\\\x1e\x80lC\xdce\x96\x0b\xed\xcaB+\x9f\xb7\xf1%\xcajgE\x03\x01R\xcd\xd2\xae\x17\xc9|\xd4L\xa0\x03\x8b6\xc0\x8a\xaa\xad\xf9q\xb5\x8f\xf2\\\x1c\xa6;jR\xb08\xbe\xc5[\x11\xf5\xc7\x116\x84|<\x98\x05\xf1\xeb1\xcd\x8e\x03\x93\x16\xd5 (\xd6\x15~\n\x9a!x\xe0\xd9\x9a'\x05\xdb)r\x92\xf4\xc9\xe4\x05\xbb\xe6\x92\x80X\x9e\xfd\xb8\x1e\x99\xdai$=\x13\x83Se\x9d&y\xb4\x91\x11\xf0\x92\xf1\xd57f\x8b\xab\x8c\xe7b\x13\x98]=\x0fJ\x154\x86\xed\x7f\xf2\\6\xb8m\x80\xa72dg\x01/\xb5KQoG\xdf,\xfe\xb0\xe8\x03\x1fnx\x91.\xef\xae\x81\xa8\xfeW33\xdd\xc2/\\\xf7\xb4\xdc\x8b\xdf\xcb\x81\xa0\xfeW\xcd\xf6\xb66,\xfd/\xda\xce7'\xeazz\xfe;\xfb)\xe6\xeeT\x86\x1a\x13,\xa9-\xdc\x88\x01\xf2\xc7\xff\xafw\x84Tm\xbe\xa35b\\\x833\xe9?WU\xc76\xfc4\xb8J\xb9\xe5\\\x02\xab\xb4?\x90\x82\xaaN\x84\x82\xaa:\xc4\xbeC\xabb(\xa8\x8a\x82\xaa(\xa8\x8a\x82\xaa\x8cPP\x15\x05UQP\x15\x05UQP\x15\x05UQP\x95\x14\n\xaa\xa2\xa0*\n\xaa\xc2i\x9d\x82\xaa(\xa8\xaa\xef'\n\xaa:\x11\n\xaaj \x05Uu\n\x05UQP\x15\x05U\xa1\x06\xd7\x9d\x07U\xd5\xf8\xdd\xb5\xb2\x86N\x96\xb57J\xdc^\xf5[\x0d\xb9/R\x9d\x08q\x9bfg&.G\x87\xd0->\x08n\x18!8\xe0\x84\xe0\x84\x15\x02\xbeW\xfc0Cp\xc6\x0d\xc1\x8a\x1d\xc2\x94\xf8!\xf8`\x880\x01\x8e\x08H\xd5;\xe2\x89\x10\nS\x04l}-3) \xbe\x08\xa11F\x08\x8b3BP\xac\x11\xf0x#X1G\xb0\xe2\x8e\x10\x08{\x84p\xf8#\x84\xc6 \xc1\x13\x87\x04w,\x12|\xf1H\xf0\xc2$\xc1>\xf1\x01\x01\x1f\x81\x03\x84\xe4\x82O\x82/F >8%\xd8\x95\x11\x0e\xaf\x84\xd0\x98%\x04\xc4-!$v \x13\x0f@G\x0c\x13\x9cqL\xa8a\x99\xa7\xa204;`bu\x0e\xf0d(\xbc\x0f$<\xf8\xf6\xdd\x9b\xb7o.\x9f\xff\xb4\xbc|\xff\xfc\xfd\x87\xcb\xe5\x87\xd7\x97o_\xbd\xb8\xf8\xe1\xe2\xd5K\xc77_\xbez\xfb\xe6\xf2\xe2\xfd\xf2\xed\xabw\x17o\\_\xfe\xe5\xcd\xfb\x8b\xd7?\xfa\xbd\xfb\xf6\xf9\xe5\xa5sm\xdf\xbd\xfa\xf7W/\xde;\xbf\xf6\xc3\xf3\x8b\x9f\x06_2\xc1\x80\x9e\x8au\xf1\x98\x18@\xf5R\x8e\x17\xd9\xdb\xf2\xec\xaff\xac\xf6\xe9\xc8\xdf\xb8t\x03\xd42\\\xd8&\xd4\xe0\xb8\x18l[#\xf2\xdd\x18w\xf2\xbb\x87\\\xc5y\xd7\xf0a\xf4\xd7\x9bc\xeb\xb4\x02\xcd\xdfkY\x1e\xaaP\x7f\xa5\xa4\xcd13\xa9\x034\x1e?X\x15\x93\xfc\xc0\xb5\xbe\x8d\xe1|Z\xdd\xc6\xcf\xb8\xda*\x8aA\x90\xca\xaa\xf9sZK\xf5\xf7\x81\xea5\xc6\x94\xda\x8b\xaeX>\\Gy\x07\xa5{\x1d\xcdt=\xad\xa5\xf9e\xdaz\xae8O \xe3\x7f\x951\xbb\xee\xd5U\xcb\xc4ie\xd5\xdf\xa7\xad\xea\x96E1\xefMv \xb6\xdd\x84\xc5K\x95\x9dB\xe14\xf6\xade2,\xfe\xd6\xf6\x00z3\x03`\xab\\\x98\xe8\x93\x95\x97\x0c$)Q\xe2P\xd4R\x1cB\x967\xbc\x98\xaa\xd0f\x06\x14\xd1{\xefT\"\x8cj\xf0\xe4\x05K6,\xdb\xa8\\\":]F\x95U\xae\xb6\xdc\xf7}D&@)\x96E\xb4\x9f2\xa0h\xc3\n\xfeD\x94\xd9\xfb\xacI\x15\xc3\x93\xcd\xfc\x1f\x97\x19G\xec\xa9\x98\xec\x9c\x1d%\xd6tL\xe8I\x85\x9fV\xc8\xa4Lh\xe5\x01:1\x93C\x91.\xb6L\xa8\xf4L3$h\x1a\x93\xa2I'O\xcc\x0b\x96\xdd\xc1,\xd4_\xbf\x93I\x18\xe5UZ4\xfb\x87\xdb\xd9\x90\x9b\xd2\x18h\xc6*n\x18\xa2\xeb4\xe3\xba\xe3\xf7\xe2\\\x9c\xe9\x9d\x16\xb9X\x8e\xbd\x9a\xbc\x90\xae\xd1z\x86\xea\x82\xae&\xa7\xab\xc9\xeb\xcf|%W\x93w6B\xa5\xd41\xfcW\xa7\xac:%\x8f\xf8\xdd\xdb\x17]\xd5\xa7\\;\x0d\xa1\\;\x1db_\x08q\x9c`\xd4\x9c\xc7\xcc\x87Jf\xe1\x01\x87\xe2\x00\x87\xe7\xffv!l^\xdc\xdfyx\xbf\x13p~g\xe2\xfb\xce\xc2\xf5\x9d\x83\xe7\x1b\x92\xe3;)\xbf7,\xb7w2^o`No >oH.o \x1e\xaf+\x8778\x7f70w\xb7p\xe7\xed\x06\xe6\xecN\xc2\xd7\xb5ru\x91F\x03\xea\x0c5+?\x17k\xc6\xcc\xc2\xcb\x9d\x9c\x93\x1b\x9c\x8f\x1b\x9a\x8b;!\x0f\xd7\x81\x05\x8a\xe2\xdf:rom\xdc2_\xce\xad\xad\\\xca\xb53$\xde\x9cZ\xca\xb5\x03cx\xb3n\x9cY\xca\xb5\x83\xe2\xc6\x06\xe1\xc5Z\xebH\xb9v\\8\xb0\xe1\xf8\xafH\xee+\xe5\xda\x19\xcfs\xf5\xe1\xb8:\xf2[\xbd\xb8\xad\xee\xbcV\xca\xb5s*\xe1\xb8\xabAy\xab\xa18\xab\xc1\xf8\xaaS\x0d.G\x9e\xaa\x1bG\x15\x95k\xc7$\x14Q\xec\xa5Zy\x83\xf9v\x9ao5P\xd2\x8a\x06U\\U\x98l~b\x84\xcfKP\xbc;Bb7\xa7\xef\x8e\x08\x87\xd8\xca\x84$\x14v\x13\x08\xe7'\x0c\x0e\x12\x04\xe7%\x04\x9e\x12\x00\xa7\xban\xb9\xc3\xad\xd5\xc5)wa\x91\xdb\xa6\x92\xf5\xf1!\xa68\x92\x1b\x8ef\x83\xa3\xf8\xdfN\x8co\xb3r\xde\xa4E\x03\xa6m\xac\x97\xf2\xc7\xc6:\xa5\xfe\xc26\x9b\x8c\xe7y\x89\xa1\xd7\x96\xc7\xaa\xa4@}o*\xae\x17\xa9\xb4\xb7\xf2\xe5\x03\xad\x85V\xdd\xca\xa6\x9b\xc0s\xd8f\xe9\xfe\xceZQ\xbbE\xfd\x9a\xdf\xf65\xa5Ef\xd1\xcc\x15s\xab\x7f\xfd\x92tE\xc8\xd04\x83\x92\xe6\"\x81\x88]\xd4\xa4-\xc9V\x99E\xb6\x9f\xb6\xb2\x807\xe2\x0c\xa63\xcc\xe9\xbb\xe9\xd3\x0c\x9a\xd5\x85\x1a\x9c\x19\xe8\"\xfa\x8e5\xa0\xd3\x99\xdd\xa1ZU\xeb>\xed\xb6\xac\x82\xea\xfa}\x062\x92!Z\x9b\xbf\xc9UO\xa7\xdcS^}}\x19\xbf\xa2\xb0\x94\x80Hk\x19V\x17\xf8\xc7b\xc6\x94\x8aU0\xc31\x17\x1dp\xcd\x87\xb4\xac5\xdb,\xf2N\xd4\xdc\xa2\x17u(:\x8e\xf6\x11V\xcf\xf2Y\xc3\xcd\xe9c\x1b)\x08\xad>\xc2\xd5\x91V\x12\x90\x0f\xca\xf7^/\xf4b\x0b1\xdf\x16\x1a\xa7\x89\ne\xcc\x1b\xebJ\xa2~\xfa>\xc6T\xeb\x10V\xb7 \xaf\xf2b\x87\xc3\x17\xa7\xcf:\xa7\xaaz\x7fH\xab\xb57\x84n\xe5\xa8Me\x06G\x10\xff\x88\x92M\xb4f\x05/\xf1{\xa3K\xf1\xa0\x9e\xc2Q\xb2\x8e\x8f\x9b\x96\x9f\x83\xa9\x92KBD\xab\xbf$u\xa6\x86\x08\xca\x1b\xf3\x1aD\xc3\x0f\x17y\xab\xafZU\x95\xae\x9e\x8c\xe7\x9a2%\xa7V5\x17\xc5t[\xe8\x99\x14\xed\x924\xab\xcd\xbef\xb1\xaa\xd5!\xba\xb2M\xfe\xec\xe8\xb0\x8c\xdf\xf0,\xc7&\xfc\xd4O\xb7;*\xaa\xb1\xed2\xde3\x07D\xb9<\x91\x07\xd34\xdb\xf0\xac}2\xb9\x8c\x925\x7f\x06*\xd9\xe6\x93|s\x0d\xdf,~\xff\xbb\xe0Z\xe9\xcb\xfa\xf9`0\xed\xe7\xf9o\x87*%\xe4\xdf5\xf5m(\x0bh\x99\x04\xf4P\xb1l%\xf3\xabb \x98G/^\x9a\xb1\xd0\x99\x05T\xffvO\x93\x80\x0e\x11\xe1FQzk\xfd5Lv\xb3b\xd2(\xf2\xaa5y\xa7\xb5I\x80j\x16 )z\xc8\xb6\x81\x03\xbe\xadd\x16\xa2^8\xaa\xde\x1cd\xbd \xe9zs\x11\xf6&\xa1\xec\xcdF\xda\x9b\x89\xb67\x0fq/,uob\xf2^h\xfa\xde\x84\x04\xbe\xe0\x14\xbe`$\xbe\xb04\xbe`D>w*\xdf\x0cd\xbe\xe0t>/B_pJ\xdfD\xa4>\x04\xad\xcf\xc1\xd0@R\xfbf%\xf7\xb9\x98?\xb3\x10\xfc\x02P\xfcf \xf9\x85\xa7\xf9MJ\xf4s\"\xa3!\xc9~\xcet?\x04q\xc6\x9b\xf2\x87){\x10\xd8\x9f\x92\xf8\xe7\xa7m7\xf2\x1f\xa6\xc1\x9e\x04\xc0\x11\x14@\x1b{bR\x1a\xa0\x13\x11\x10O\x05t!\x03\"{\xc1\x8f\x10\xe8J \xb4\x91\x02'\xa4\x05z\x10\x03\xc7S\x031\xcav\xa4\x07\x06\"\x08\xa2j:8S\x02\xd2\x04\x03\x13\x05\x83R\x05C\x92\x05\xd1tA\x1ba\xd0F\x19\x0cC\x1a\x0cF\x1b\x0cL\x1c\xf4\xa3\x0e:\x93\x07=\xe9\x83>\x04B\xdb&\x88\xe0y\xe1\x99^.4BO\"\xa1\x07\x95\xd0\xa2\x82pt\xc2\xc0\x84\xc2p\x94\xc2\x80\xa4\xc2)\x87\x9b#\xb1\xd0\x95Z\xd8\x9f\xfc\xd2\x96\xfa\x12u(\xb7\xa5\xbdt\xa1+\x0d\xbf\x87Ny\xe9Fc\x1a~\xd3\x9a\xee\x12Mo\x1a~\xc9\x92\xea\xd2\x89\xf6t\xfa2\xd6;\x11,\xc9\xe5\xbc\x0cR\xdb\xb7\xe7\xe2\x936\x05\x931\xf2\x8e\xb8\xa6M\xf1\xabhH\x1ejS0i-\xe7\xe7\xa86\xc5!\xa5\xe5\xbc\xfc\xd5\xa6\x0c\xa7\xb3tIfYL\x87M[\xd3X\xa26&d\nKdY\xb6\xf4\x95\xe8b\xb0\xa9+Q\x05\xce\x90\xb6\x12\x95\xb4\x12UYl\xba:|\xba\xcaI?\x8bLTYX\xf2+\x81-\xc7\x12`'\x0bv\xba \xd3S\xa2\x94\x05\xe8\xd4\x94\xc8\xe2\xf0\xb6G\xa8\xa4\x94\xc1SR\xfa&\xa4tHG\x89R6v\xa0\xa3\x13QN\xfaU\\\n\xca\xa2\x93\x83X\x97\xc0\xe9'\x1b\xc57R\xed\xf9d\xda\x83wo_PV\xbd\xa6PV\xbd\x0e\xc1\xac\xf4\x05\x82\xb2\x87\x9a\xb2n\xab\xf2,d\xbdPT\xbd\xf0D\xbd.G\xbc\x17Mo\x1e\x92\xde\x04\x14\xbd\x99\x08z\xb3\xd0\xf3\xe6 \xe7\x85\xa4\xe6MJ\xcc\x0bK\xcb\x9b\x8c\x94\x17\x98\x92\x17\x88\x90\x17\x92\x8e\x17\x88\x8c\xe7J\xc5\x0bN\xc4\x0bL\xc3+\xdcIx\x81)x\x93\x10\xf0\xac\xf4;\xa4\xd1\x80\xa4\xde\xcdH\xbc\xc3\x9a1\xb3\x90\xee&\xa7\xdc\x05'\xdc\x85\xa6\xdbMH\xb6s \x7f\xa1\x88v\x8e4;\x1b\xf5\xc4\x97bg+\x97\xb2\xea\x0d\x897\xa5\x8e\xb2\xea\xc1\x18\x12\x9d\x1b\x85\x8e\xb2\xea\xa1hsAHs\xd6:RV=\x17\xaa\\8\xa2\x1c\x92&GY\xf5\xc6\x93\xe3|\xa8q\x8e\xc48/Z\x9c;)\x8e\xb2\xea\x9dJ8\x1a\\P\x12\\(\n\\0\x02\xdcT\x83\xcb\x91\xfc\xe6F}s\xca\xaa\x17\xd5\xbd,\xcd;\xc6\xaaG\x1a@\x93r\x80C\xb4\x81V\x06\xbdv^\x8e\x03+\xaej\x7f\xaa\x12P\x14\xd9\x11\x97\x7f\x02\x9b`e\x8a\xcc\x14\xe7\x1a\x03\xcf\x07RT\xbc\xd4\x8f\x94)*\x98\xcc@\xa3\xff(\xe1\xb6Oi\xee\x10\x9f\xe7D\x88\xcf\xd3!\xf6\xe5\x8d\xf8<\xc4\xe7!>\x0f\xf1y\x9aB|\x1e\xe2\xf3\x10\x9f\x87\xf8<\xc4\xe7!>\x0f\xf1y\xa4\x10\x9f\x87\xf8<\xc4\xe7\xc1i\x9d\xf8<\xc4\xe7\xe9\xfb\x89\xf8<'B|\x9e\x96\x10\x9f\xa7S\x88\xcfC|\x1e\xe2\xf3\xa0\x06\x17\xf1yj?\x8c\xe7\xf3\xd0%j\x1e\x97\xf5\x0c(\x97.Q\x9bE\xcd\xf61L\x97\xa8\xd5d\x02}\xd2%jt\x89Z\xcf\x1c\xd8\xdc\xdfK\xd4J\xaa\xea\xf9o%\xabp\xe8f5C\xc32\xacU\xcdQ5\xf7\xa5F\x89\x9apb *\x88\xc9|\xec\xe2\xe5\x99y\xea\xf9f\x93\x0d\x91Y\xf5O\xf7\x93\xcb:\xc4\xa6\x18\xc5\xf6B1QQ\xc0\x06\x8a\xd7\x84\xe0\xa0\">f\xe3[\x16\x08\xf6\xa9\x95{jU\xae\x12\xbb\x8a\x95\xa0X\xa7\x88\xb6+\xb1i@ \xb28,\xfc\x03\xc1\xb8\xa6\xc1\x99\xa6~\xff \xd2&H\x9b m\x82\xb4\x9bB\x906A\xda\x04i\x13\xa4M\x906A\xda\x04iK!H\x9b m\x82\xb4qZ'H\x9b \xed\xbe\x9f\x08\xd2>\x11\x82\xb4[B\x90v\xa7\x10\xa4M\x906A\xda\xa8\xc1E\x90v\xed\x07$\xe6\xab$\xdc\x1dP7i\xc1\x87.\x80\xfaE\xfc^\x02\xc1\xf2i\x05\x02\xef\xa2\x1b\x9e\x9ch\xa1\x81\x02\xcbw\xf5\x0f\xf7\x0c\xff\x95\x8a\xf8r\xe1#T\x94\xbd\xb33\xc8r\x83\x88\xd0\xc9\xf8\xbb\x9e\x94\xdf}\xa8\x18\xac'\x08T\xact\xc6\xd7\xac\x10\x13\xf0m\xc6\xb7\xc2\xfcS\x08\xc3G\xf5\xa1\xfc#DI^p\xb6\xd1\xf8S\x19 .\xd3\x8c$f\xe8\x0f\xaf\x90\xf2x\xb5Qfh\xb4\x85\x8f1O\x1e\xe9\xf2\x1f\xc3w\xdf\xc1\xd3\x8f\xda\xa4e\x85n\xa0\xdc\x8d>q\xe9\x19|\xba\x80\x8b\x04Xl\xf1\x88*\xbf\xe3\x9a\xe5I\x0f\xf5ZY<']\x9f\xfc\xcfW\x97\xcf\xda\x7f\xa8}\xe2V[K\xfe\x1f\xd0\xe3\xebY\xd7\x1f\x1b\xb9?\x14\xd9k\xe4\xd7^\xbfy\xd6\xfa\xff\x86\xbeF\x97^\x0d\xe0\xf6w\xaa_\x9a_\x94\x9e\x83\x1b^8}[\xed\xa8\xf6\xc5\x03\xbd\x1e\xb9M\x86?\xcb\xcf\xf3MmBTm:&\x91d2\xc8\xe6\x88Y \xff\x91\x1f\xe2\xc8\x9a\xaf\x06\x91\xbc\xab-\xfa>\xb7\x07\xdd/\xf6\x9d\xa5\xb0\xcd\x15\x0d\xac5M\xf5P\xd2G\xbc\xeb-\xe6\xb9*h\x9d&y\x94\x9b\x0beKz\xe9\xc5\xcb3\xb5\x88\x08\xc3\xf2\xact\nZ\x87C\xa3\x11\xea\xc8b.\x90\x13\xef+\x8bN\xadJ\x9dP*]\xa4h\x85~\xe9\"E\x9bj\xee\xcfE\x8a\xf2\x18\xefB\x87U>\x03\xa2\xc3\x9e\x08\xd1a;\xc4\xbe\xb0\x11\x1d\x96\xe8\xb0D\x87%:lS\x88\x0eKtX\xa2\xc3\x12\x1d\x96\xe8\xb0D\x87%:\xac\x14\xa2\xc3\x12\x1d\x96\xe8\xb08\xad\x13\x1d\x96\xe8\xb0}?\x11\x1d\xf6D\x88\x0e\xdb\x12\xa2\xc3v\n\xd1a\x89\x0eKtX\xd4\xe0\":l\xed\x87\xf1t\xd8\xce\xdb\xb7\xe8\nE\xf0U.]\xa18\x8b\x9a\xedc\x98\xaeP\xac\xc9\x04\xfa\xa4+\x14\xe9\n\xc5\x9e9\xb0\xb9\xc7W(J\xba\xd3\xf9o\x92L5tw\xa2dd\xd5\x03>6\x1d\xf7%\xa6U\xe8\xc7\xc5\xcb3\xc5\xd0\xea\xbd0Q\x94\xa8\xff~\x0f\xc3@\x86X\x13\xa3\xf8\\\xa8 \x0e\x14\x80\x81b.Y\xc27\x10\x1f\xb2\x91\xc1\xb1\x98\xc5La\x1b3\x04m\x04\x0b\xd9@\xf4\x86\x9dG\xef\xc3\x9fw\xe1\xcd\xbb\xf2\xe5\x1dx\xf2\x1e\xfcxO^\xbc5@\xa3@\x84gX\x833\xac\xcb\x85\x12\xfb\xa2\xa1\xc46\x13\x95\xa0\x06\x91\x12\xdbPR\xe23\xa0\xba\xde\xc4\x84c\xb8\x0e\xae\xae\xb7\x10\xa1\x18\x1e\x03M\x89\xe7p\xab^\xc7\xae\x95Jf\x0f\xc1\x98=\x00#p\xf8\xc5\x9c\xc1\x17!C/\xee$\xf0\x02\x17v\x81\\o\\\x86~\xa8\x80\x0b\xab\xa1\xdf\x14\x9f`\x0b\\3' \xb4\x98>\xcc\xa2\x9b%\xeeJ\x12'\x8e\xf8\xe9\xcf\xc4\x11\xef\x10\x8c\xddS\x10G\x9c8\xe2\xc4\x11'\x8exM\x88#N\x1cq\xe2\x88\x13G\x9c8\xe2\xc4\x11'\x8e\xb8\x14\xe2\x88\x13G\x9c8\xe28\xad\x13G\x9c8\xe2}?\x11G\xfcD\x88#\xde\x12\xe2\x88w\nq\xc4\x89#N\x1cq\xd4\xe0\"\x8ex\xed\x87)\xf9\xa0\x12\xec\xeak\x91\xfc\xb1\xd1\x16\xe5\xc0\xd0w\xff\x96H\xd6\xe1\x8e/\xfe5\xf4\xbf}\x94\x14%\xff\x8f%\xc9\x91\xc5Ki\x8e\xe4\x15u\xa5\x8b\xea\xf7\\>\xfa\xb6|\xd2\xb8\xa0@\x14('\xa6|\x00\xaa\xb2\xd4\x16\xd8\xc9\xf2k\x17\xa6\x9f\xb9g\x8c\xbf\x1e\xed\xb6\xc5\xea3\xb2z\x8b\x1a:9\xf9\xaaAX\x1d;\xac\xa7\xf8\xce4nr\x90\xb5;\x15\x85\xf0\xf6\x15v~2\xde\x08\xff=\x11\xc2\x7f;dV\xfc7\xa0C\xd8i!\x8f\x92m\\\xcbB\xd9\xb5\x80_\x98G4\x93\xbd{Q(\x0b\x1aX\xbd\xcb\x92\xf4\x8f\xf7l\xd9n\xe9\xb2-\xd6\x1eu[\xae+\x85\xf7,\xd3==\xd2S\\\xa7\xeb^\x0e\x9d\xb2\xd7P\xeb\xb2^\x85\xabA\xf3\xee\xed\x8b.3\x96V\xe4\x86\xd0\x8a\xdc!\xff\x90+\xb2<(\x0d\xd8\xd3o\xe5\xef\x8d\xb5XEb\xc9\xc0\xc3m9\xfd\xab\x03W\xe7Z\xfcB~\xfa\xe7()T\x81\xfa\x99{\xb6$\xd7\x95\xd9\x96\xe6\xf9Ri\xb5\x99]\xd9(\xd0\x9c-\xf7\xe9\xe6\x18\x87\xcb\xad,zn\xb9\xe1I:\xc0\x82G\x0dB\xcd\x14-4\xec\xb9N#\xe9\xad\x10\xe5\xf7\xbcS\xee\x15\xcb\x8c\x15|\xa9\xc8\x06\xd3\xd4b\xcf>G\xfb\xe3\xde\x9c\x1aT\xd1\x10%\xb5\xfdI|\xd3Z\xb1=\xfb\xb4s\x94b\x9dO6e+\xf9\x1av\x8e!P\xcf\xac }\xe3\xbe\\\xe0\xebK\x96\xda\x07\xc4a\xa5\xba\x87\xa5\xda*\xb6MZ\xfaTy0Z-7\x0d\x18H\xebt\xcdo\x1b\xd5\x16\xffo\xf0\xc7\xb2\xb6\x9a\xa9b\xda\x19\xbc\xe6\xb6m<\x8fY~\x15%;\xf4F\xde\xda\xbdO\xcf\xc4\xa6D\xddm\xfa\xfd\xc6\xce|\xa9\x1f\xb9\xf7;\xf4\xe0J2ns\x8dv \xdf,\xf5)\xecS\x94l\xd2O\x9e\xdb\x9c\x91\xda\xc2\xda{\x04\xdbG\xc9R\x7fZ\x9c\xfc&\xfd\xee\x00}}\x93~J\x8ah\xcf\x97\x7feQ\xbc\xdchR\xc2\xa8\xef\xcaa\xba\xdc\xcax\xa94Yn\xd2\xe3*\xe6\xb2m\xa3\x8aE5\xe7\xe4\xdb\xaau\xa1?\xdc\x98=\xa5\xc7P\xf3dN\xa6r\x19\xb3\xb1R+nk^\x9f\x9a\x8d\xfap>\xd51\xfb\x7fT\xd5&[i\xe0E\xb2\x95z\xe4k\xb0\x95\x9c\xb7g\xb1@E\xc9n\x19%\xdbt`\x97\xbeT\x8f]\x88\xa7\xca\xbdZ\xbf+\x93j\xc9\x13v\x1c\xab\xe8\x1fV\xa4\x99\xd9\x86\x9b\x1bu\xad\x18\xfd\xfb=\xdb\xa6\x85.\xbe\xdc!\xaci_\xa3\xc7^^\xb0\xacX^Yse\xa0\n\xc3Y\nP\xed\x08\x7fRy\xabX\xa1Y\x94\xe5\x98\x93\x97\x05Jb\xaa\n\x96\xde\x88?sx\xf3N\xfepL\xc4n?\x10c\x19%\x1b\xfey\xa9\x92\n\xce\xd8*;B^\xc9\x85\xa8\xa2nv\x94C\x94\xac3\x19,(6*\xb6\xbe\x02\xb1\xed\xcbM\xb0\xa9\x13\xa6=\xf0\xc3TO\x19c.-@I\x99\xdd\xb3[\x15\x1b\xab\x0c4\x99h\x83\xaf\xd3\xfd>*T\xd8t\xa1\xa3\xf6\xa3D\xcc\xb9\xbf\xea\xc82\xc5\xfa\xb6\xc6\xdf~\xbc\x94\xa5~/\x0d\xce?K\xbb\xefc\xe9^*x\xb6/\xcf=\xb2[\xccA\xe7\xe3\xcfQ\x9e\x9b\xd7\xbe\x8f\x8a\xe7b>}\xec\x0f~P]\xbe<&E4~\xe1\xae\xfaT\x8c\xab'B\xd9\xd8~}\x1f\xedy^\xb0\xfd\x01dUt\x176{*\xcauua\xa3R\x90\xc6\xd1\x0dOx\x9e\x97\xf6j\x7f;\x8bt\xbf\xca\x8b4\x19BpL+\xdb\x89*O\xc5eH\xfe\xf9\x8aKJ\xa9\x1a\x12&\x00T6\xe8\x8a\xe5\xb0\xe2<\xa9\xd5\x0e\x1e]G\xb1hbzT\x19m\xca\x87s^<6)Y\xfe@\x8e\x13r\x9c\xb4\xc5\xbe\x0f}\x1d\x8e\x93\xc1\xc81\xba\x85\xc3\x0b+R\xd2i@\xd0-\x1c\xa5L\xacf\xfb\xad\x11t\x0bGM&\xd0'\xdd\xc2A\xb7p\xdc\xb3[8\x86a\x82\xf3\xdf\xd6i\x92/\xb53y\xe8\x06\x8e\xfaq\xbd\x8e\xf0\xb7\xcf\xcb\x8a\x91\xb7\x96Y\xfeT\xa9\xba\xa4>\xf4@\xff|\xcf\xc0\x83\x1b\x16/\xeb\x9a\x0e\xe6\x1b\xb0\xe2\x00\x08C\n\x87\x01 \n\xc2z\xc2\x82z\xffq\xbe\xff [\x83;TCX\x9f\xff\x8c\x1e\xffY\xfc\xfd8o\xbfS/\xda=\xfd3\xfa\xf91^~\x9c\x8f\x1f?\xfc\xee\xc0\xbf?\x9fw\xdf\xd1\xb7\xef4r\xa6\x9a\xffS\xfa\xf4\x03{\xf4q\x8d\x9a\xc3\x9b\xef\xe6\xcboo\xbc}~}\xed{\xe4\x1b\xf1F\x97\xbdrR2\xcaq\xe7\xe9\xb7#\xb7\x9d\x14r\xdb\xb5\xc4j \xda\x94\xad\xe4kw\xdb\xd5\x0f)}c\xbf\xfe\x8c\x99}\xe6\x7fK~xk\x15\xa8\x955c\x86\xa4\xealV\xc8\\\xdd\xe5\xd1l\xc3c\xbe\x93\x9ba~\xfe\x9b\xfe\x9f4\x93\x8d\x1a:\x9a\xbd4O\xbe\xac\xde\xafb\xa8\xa4?\xa6\xfa\xbb\x0c\x9fR\x87\xb4\xf2\x0bFO\x9d\xb1R]\xa5\xeb\xe7\xee\xd9\x99\xadR\xd3\xb2\xa3eu\xf9\x12\xe6tU[\xfb|\x9c\xec\x0e\xb7\xe6\xa0\xb4\xf0\xcf\x00\xbf\x1e@{\xa4\x9c|\xc8L\xe9\x15__\xfd\xee\xdb'<\x11\x9b\xc1\xa6\x9c\xe1e\x1aK\xfdZ?\x07\x04\xd42\xa6\xec\x92\xd0\xcd8\xf9\x10\xae\x19\xe5k\xc3\xcd\xc8\xafXf\xeb1\xff\xba\xab\xd2\xb55W\xd7\xaeLf\xaf~\xcc\xf8\x9aG7|3TO\x9c%\xa9\xa4Zc\xda\xf4sq\x02\xd6\xa7\xd3\xf4\x9a'9\\\xf1X\xa6\xb5e \xb0\xb54\xab\xf5\x91\xc4B7\xfa\x94\xa8t\xb8iR\x1b.\xfaV\x02y\xebF\xba\x8e$>l\x8e\xc2p\x93\xaa\x04\x19\xe9'\xe5|M\x13\x0b!\x0e\xd1}+\x16\xb3d(\x002\xc0\xd4\x1dL\x14\xa1\x04=V\xd8^h|\xa2\xe2\\F\xc8\x8b4\xaa_\xa7&\x07\x83\xceN\xab\x9ah|\xe0\xa2C\xc5\xd8\x90\x15\xb5eS\x7f\xfd\xe6\xfd\xabg2\xdd\xaez\xbe\xba\xba\x95%p\x91\x18\x07Uy\xa3C#\xd3\xa76\xd2\x87\xa7j\xb4KXqTsF\x99\x15b\x10\xee\xd2]*3j\x8e\xa5UU\x13\xa7~\x02\x91\xe7k\x16K\xfc+\xadO.\xfey-\x0f\xa0\xe2\xf8\x18\x15\xb5k\x16\xfa[\xa1Gl;\xa5\xa9^\x08J\x9f\xd6>\xcd8\xe4\xc7\xa8(q\x89u,\x01\xb8rKE\x9c7\xbbv\xe2\xaa\xd3\xe3\xb8\xb5\x1a\xe5\x0f+\xba\xd6\xf0\x16`#k5jQ\x03T\x9ay^\xea8K\xfd\x90\xd7s0\xb5\xcdc\xfb\x0c&\x02\x18\x11\xc0\x8c\xf8\x13\xc0\x868\x0eJ\xe4 \xa5\xcb\xe0\xb7\xc6\xb5\xf7\x15v\xdey8\xa1\xb8\xf7\x13!\xdfF\x87\xd8W\xc6 }\x1b\xf8\xcd\x16\xe8\x8aE\xbab\xb1-t\xc5\"]\xb1HW,\xd2\x15\x8b'BW,\xd2\x15\x8b-\xdb\x82\xaeX\xec\xb6\x86\xe8\x8aE\xbab\x11Q.]\xb18$t\xc5\xe2X\xad\xd3\x15\x8bt\xc5b\xdfOt\xc5\xe2\x89\xd0\x15\x8b-\xa1+\x16;E\xfb\xab\xe8\x8aE\xd9$\xbab\x91\xaeX\xfcr\xafXl\xf2oj\xc5\x0d\xb0t\x1a(\xe9 \xb9\xac\"\xe1u\xa4e\x9d\x98yG\x01\xbf\x1e\x81e\x14\xf0[\x93;Q\xb3=@\x95\x02~k2\x81>)\xe0\x97\x02~\xef[\xc0o7\xa9<\xcdN9\xe5\xe7\x19\xaf\x91\xa8\x06\x18\xe6\xef\xea\xcf\x95\xd4\xf2\xc6\xdbU\xec\xef\x10\x99\xbcQ\x90~\xe0\x9e\xb1\xc8\xebZ\xf9\x1ax\xe4\xf5\xfa\xda\xe1\x90 \xe9\xa8\xf7\x8cI\x9eg\xeb\xd0M\xe9\xfc\x98iN\x15`Y\xefQ\xd0\xfc\x145\x0bOC=\xba\xa5\xfa\xd0&/\xe6kU\xedc\x96Vmx^\x98\xbd\xcf\xadi<)2\xeb\xe0\xb4\xcf\xccJ\x06\xe7h%\xc8\xe9\xa3\x04;\x89\x94\xac3\xaeV\x1b[\x04\x7f]\x1czK .\x16\xb6.\xcd\xf0\xacf%\xa1qX\xd4\x7f\xab\"\xac\x1b\x9d]\xa4\xe95\x1c\xe2\xd6\x9d\x18}\xb2N\xc5\x99^~j8s~]\xbc\xb5a\x8f)\xafK+`\xadQ\xd1\x86B\x8eI\xf4Ye\x03\xd8\xb6\x87~\xf5\x1aF\x1b\x92<\xc3\xe2%\"\xde\xa0\x12gm4\xda\xd5\xfad\xa3]\xfa\xb7\x92L.-\xcc\xe6zU\xb0\xac\x18\x0e(1\xa2\xa8\xe7b\xd5\x98\xa3Y\xd5\xd7\xca\xe8\xc2\xbd\xb1\xd8k\xcb\xd1\x93Z\x98\xbc\xa2\xc6\xcb\x91\xaf\xf0\x81zK\xed-l|\xben9\xbdJ\x8a\xec\xb6\x16\x04\xd1P\xa0Zb\x9479\xe31\xbfaI\x01{^\xb0\x0d+\x98\xed\xa3\x8dO\xea\xa5R\xd9\xc8\xedI\xa9\x7f\x9c*\xf0\xe7]s\x88\xd7<\xd9q\x94\x17\x8a\xd9\x7f`Y\x11\xad\x8f1\xcb\xaa\xdd\xf9a\xdd\x0cMv2L\xc8\x12\x01\xb4\xcd\xd2}\xb34\xbdGV='\xcf\xb1\x8d\xcfU\xdb\x0d\"\xb8\x07\xb1\xc7\xe0\xf6\x17\xc4\xde\x82\xdeW\xf0{J\xc3\x82\x15m\x19\x88;0\x82\xae\x068U\x05h{k mou\xa1\xed\xad\x92q\xcd\xfa\x87\xd8\xde\xd0\xc3\x04\xadK\x97=\x0eN[\xd9\x1f\xac\xc7:T\xd2\x8c\xda\xb30?j\xc4\xbe\xb1\xb1{\xb6/YB\xfb\xf0Z\xaa7\x19\xab\x9a\x96Vr\xb3\xfb\xf6W\xba\x8c\x95\x08\xa7\x97A\x8dP\x10\xa2\x95/KA\x886\xd5\xdc\x8b \xc4\xfe\x94J\x0dG\xb15\xfaP\xc7\x1a6\xdd\xd4\x83)\x95\xaaYBq\x87\x14w\xd8\x16\xfbb\xa8\x8a\xa1\xb8C\x8a;\xa4\xb8C\x8a;4Bq\x87\x14wHq\x87\x14wHq\x87\x14wHq\x87R(\xee\x90\xe2\x0e)\xee\x10\xa7u\x8a;\xa4\xb8\xc3\xbe\x9f(\xee\xf0D(\xee\xb0%\x14w\xd8)\x14wHq\x87\x14w\x88\x1a\\\x14w8Q\xdca\x9e\xad\x97\xcd\xe4\xdf}m9}\xb2\xd1\x9e\x8aoQkO\xc9\x88\xe0\x92\xcd\xd6n\xd5\x14Q'=\xed\xda\xe4\x05\xb2]\xa7O:\xb5\xab\x99\x129p\xab(J\xd4W\x83@Q\xa2s\xab\xd9\x1e\xd5HQ\xa25\x99@\x9f\x14%JQ\xa2\xff\xc0Q\xa2\xc7d\x95\xca&.k\xf4\x9a\x81h\xd1\x9az\xcb\xec\xdf\x1fL\x19}w\x14\x95\x1f\xe9\xb9\xad\xa8R\xeb\x89\x85g\x06Y\xf7\xb5E]_\xd6/\xdc\xb3\xc8\xd3\xaa\x9f\xbe\x82\xb0\xd3\xe6 \xb3\x84\x17\"!\xb1\x813\xc2\x94q\x9fN\xb7\x07\xf9T=\xdc\xadA_yd\x8as(\x08R\xfbJ\xdcB@\x06\xc3?\xa2\x9e\xc0\x8fj\x95\xc3G}8G|x5\x1a\x1f\xe91\x18\xe5\x11u\x05xT\xad\xc6Gw8Gv8\xb5\x1a\x1d\xd1\xa1/\x9b\xd2\x8f\xc4\x8a1\xb09\xc6\x8a\xdd\xa2\xaf\xbf\x02q\x1eA\xb7l\x86\x16\x0d\xb4\xc4\xaf\xd6\x8d\xd2;v\xd4V\xc8FR\xebr\xef\x80\x8d\xcdP,b\x97\xb9`\x8bI\xc4\xf2\x13:\xda\x07y\x91f\xdaR\x916\x8981\xc6\xbc\x11\x87XU\xc9\x12\x84(o96%\xd4\xee\x92N\x84\xe2\xc4\xa4y\"MI\xbe\x91\xb1\x8f\x14A\xd0\x16\x14\xf3\x85\"\x08l\xaa\xb9\xe7\x11\x04\xedY\xecx\x9fQ_\xb1\xe7\x83\xe5\xd2\xcdF\xa7?S\x84A\x87\xd8\x17K\x8a0\xa0\x08\x03\x8a0\xa0\x08\x83\xa6P\x84\x01E\x18P\x84\x01E\x18P\x84\x01E\x18P\x84\x81\x14\x8a0\xa0\x08\x03\x8a0\xc0i\x9d\"\x0c(\xc2\xa0\xef'\x8a08\x11\x8a0h E\x18t\nE\x18P\x84\x01E\x18\xa0\x06\x17E\x18L\x14a@\x9cu47\x928\xeb5\xb9\x135\xdb9\xd6\xc4Y\xaf\xc9\x04\xfa$\xce:q\xd6\xff\x819\xeb%\xadj\x88\xa8\xfe\xdf\x1dD\xf5_\xca\x17\x1b\xf4\xf4\xaa<\x88\x92m*G\xa9\xba\xee\xa8\xfcrY\xd6\x10-\xfdR\xb5\xa1\xe3s\xfa\xe9{\xc6I\xaf\xf4\xf6\xe5\xf2,\xcc\x052\xa1\xe8\xdc\xed\xf2\x1b\xd6d\x1f\x87\xfba^\xbe\xf7\xaf\x92\xf7\x0d\x86\xf5\x1d%\xf2x\xd0\xef\xe8Y\x8b\x11\x90\xe4\xc7|y8\xae\x06\xe9v(\x15\x02R\x8d\x80\xa4\xac\x00^\x8d\xe0\x80\xf9\x18\x99\x85\xbe\x02\x01),0\x0b\x8d\x05\xa6\xa4\xb2\xc0lt\x16\x98\x86\xd2\x02\xf3\xd1Z`.j\x0b\xccDo\x81\xc0\x14\x17\x98\x9a\xe6\x02\xc1\xa9.0%\xdd\x05\xc2S^ \x1c\xed\x05\x02S_ \x1c\xfd\x05<(00\x07\x0d\x06\xc2Sa\xc0\x8f\x0e\x03\xe1)10\x15-\x060\xd4\x18p3N\x90\x14\x19\x98\x97&s\xf29\x8b\xd94\x0b]\x06BPf`\x0e\xda\x0c\xcc@\x9d\x81i\xe93\xe0F\xf2\x00,\x8d\x06\xdc\xa94\x80\x81\xa5GPj\x00Y\xbe\x05<\x9b\x92^\x03\xde\xdaw\xa3\xd9\x00\xb2\xe9\x9et\x1b\x18C\xb9\x01\xbb\xca\xa7\xa5\xde\x80\x1b\xfd\x06\x1c(8\xe0D\xc3\x01|\xaf\xf8\xd1q\xc0\x99\x92\x03VZ\x0eLI\xcd\x01\x1fz\x0eL@\xd1\x01\xa4\xea\x1d\xa9:\x10\x8a\xae\x03\xd8\xfaZfR@\xea\x0e\x84\xa6\xef@X\n\x0f\x04\xa5\xf1\x00\x9e\xca\x03V:\x0fX)=\x10\x88\xd6\x03\xe1\xa8=\x10\x9a\xde\x03\x9e\x14\x1fp\xa7\xf9\x80/\xd5\x07\xbc\xe8>`\x9f\xf8\x80`f\x80\x03;\xc3\x85\xfa\x03\xbe\xf4\x1f\xf0\xa1\x00\x81]\x19\xe1\xa8@\x10\x9a\x0e\x04\x01)A\x10\x92\x16\x04\x13\x0f@Gz\x108S\x84\xa0F\x13:\x95\xbf\xb2(\xe6\x1b;`\xd2\xc6sO\xa5q\xfeV\xc5\x82\x89m\xfft\xc5\xb5\xaf\xa4\x9e\xffA\x8c\xc7\x15\xe7\x89yZ\xdeS\xbdJ\x131\x8e\xf2\x82\x15\xc7\\\xb9q;3B(Q\x8f\x0dU\xbfQ-]j\xd4\xce\xc8\xa9\xff\xfeH}\xbc\xca\xff\xa5\xff%\xfd\xeb\xfd\x9f@\xbaOxr\xdc\x0f[\xbaO\xe0\xfb7\xaf_./\xdf?\x7f\xff\xe1r\xf9\xe1\xf5\xe5\xdbW/.~\xb8x\xf5\xd2\xe9-\xf1\x7f\x1e\xaf\\\xbc\xfe\xd1\xe1\x1d\xebGL\x0e\x00\xe7&\xa9\xb4-\xf6\x11i\xd5w\xa3\xe7u2\x185 \xf5F\xaf\x12\xafn\xcco\x8f\xa2d\x1d/ \xe7\xf1\xf6I\x95ce\xa0\xe7+\x08^\xdd\x9f:u\x9d\xdb\xe5W0\xaa\xe4\x81\xe8?Fy~T^r\xd6\x00S+\xb2\xc0P\x0b\xaa\xcf\xe1kU\xfeO\x8b%X\xfd\xbd\xe0\xd9>7\x99%0i\xba&\xc7e\xf7i\x12]\xf3\x9e\xfc\x0d\x95 \xbb\x05\xdaJ\xd0\xc5\xd7\xeel\xbe:\xeeY\xf2$\xe3l#\xdd\xdd\xd2\xe0qR\x00h\x98\xb6\xb0^>\xef[iS~=m\x91A\xc4\xaa\x1f\xf3h\x97\xb0\xe2\x98qx\xc4?/\xe0\xc3\xdb4\x93\xf4\xba\xff\xe0\xb7+\x96\xf3\xc1\x95\x10\xe0\x13_\xe5Q1\xa5\xc7\xb9\xd1\x04]|g\x0b\xccoq\x94\\\x0fW2\xe7\xebc\x16\x15\xb7Ki\x88\xaf\xadi\xd5|k\xdb\xfeNg\xb5\xf9\x9eE\x12\x08.\x1f\x07\xfd\xf8p#\x06\xb3yT\xe2[w]\xbcY1\x15\xd6QVZ\xff\xda_\xc3*5\xa3=s\x1d\xb2\x8a\xd8lu\x8df\xb4\xeba\xba\xe0\x0c\xa2m\xf5\xe3\x99\x9c\xa6\xfa\x89\xff\x9f\xbd\x7f]\x96\xdcF\xf2\x04\xf1\xef\xf5\x14\xfe\xaf\xf9\xafIU}\xf2\xa4R*\xf5LkLm\x967U\xe7\xb6.g3S%\x9b\x0fmQ8\x0cD\x04'\x19D\x88D\x9cKW\x97\xd9\xbe\xc6\xbe\xde>\xc9\x1a\xe0\x00\xaf \x010\x00\xa6\xa4\x82\x9bu\x97\xf2\x04 \x02\x0e\xc0\xe1\x97\x9f;H[\xbf.\xafG\xea\xca\xfe\xdc\xa9\xf5\xe52~[ ;\xcf\xd1\xbb\x94\xad\x9b\xe0\x80,O73\xfec^\xb6%\xec\xfa\n\x12g\xbar\x1au\x19}\xc6\x8e\xc7\xbc\xae}\x8e\x95\xf6\x95\xde\xa9\xd2\xf9s\x8bq_\xf1\x1ci\xbf\xbf\xa9\x08\xb7==9&|\xb972Ua\xaf;B|\x08\xc3\xc3Mx\x13+-J\x9b\xca\xf1\x1cqf\x02x0B\x90\xe8\x9f\xfd)\xe7%\xad\xa9\xc73\xf1\x0d\xad\xa0\x0fX#\xc1A{\xd4uZ\xed\xe6\n\xa4Y\xbb\x93\xc8\x16[Y?AG\xf2\xb0Yc$\xfa;\xbdY?\x92\x87\xfcx>\x8e\x86\x86\x12\xa7\xddp\x19)\x81\xde\xd1J\x8dy\xd1 1\xa2\xbf\xdaX;\x9f3\x0eyK\xf2\xe2\x11\xf2R,\xe8\x9a\x8e\xf0\x7f\x1d\x96x\x8d\xf6|\x12\"\xd1*f\xc1o\x84>\xe2\x16F\"\xb7\xed\x92^\xca\xd2o+\xff`Z\xd8\xf7\xa4V\xf8\x8b\xed\xf4`\x8fy\xb9\x11\xc6I\xa7(u\x80s\xa5?\x8d\xe3O\x8c\x8c\xe5Oji\"\xc1\x96f\x05\xa9\xe8V\xbc$\xe7W\xfdU\xbf85\x10\xd78}\x03\x14\xee(\xd9M'\xae\x80\xb3=\xfa\x14\xa4C\x9678{r\xec`\xef\xa7]9\x7f\xe9\x0cG\x1cg\xda\x9aRN\xfc\xbc\x02\xfa\x803\x823$\x0f\xc0\xbc\xac\xaf\xe1]A\xea\x83\x90\xc7\x1a\x874\x87\x15$\x82M\xb8\xde\x95O\xbe\xd7\xec\x15\x82\x9c\xb0PlU\xd1\x8cCF\x8a\xec\\4.\xe9\xddY\xa8\xe2\xd3\x1f8\x97\xdd\xea\xe1\x82\x17\xec\xcc!\xe7\x12\x81]\xee\x81\xddI+\xa51\x05\xe1\xa7\x03-q(\x12d\xd5\xb5\x82\xa7\xbf\xd2\xd7\x84\xae\x06\x1b7\xaf\xc5!\xb5\xcd\xb9\xc6\xac\x90n\x8d\xd2\xfb\x03\xabi\x9b\xfe0\xfd\x91\xee4\xe4}xWgV\xb1\xebm\xb7\xb7y\x13\xf7A\xdf\xa1\x84\x1eM\x7f\xa5\xc7\xffk\xf8\x0b\x93l:\xb1{Z\xe9t%=\x05t+cH\xe4\\\x90 y \xd6\x1c\x10G\xa5\xc1\xc9\xa4\x825\xf3>\\\xd5\x98U\xf2=\x82\xe7zD\xcf\xf3\x88\x9d\xe3\x110\xbf\xc3#\xbb\xc0)\xaf\xc33\xa7\xc3\x86Y^\x9a\xcbak7\x95G\x9d\xa3\xc5\xb9\x1a\xa9<*\\\x92\x8f\xe1\x97\x8b\x91\xca\xa3:\xe5\\D\xc9\xb7\xb0\xf61\x95G\xf5\xc9\xad\x88\x97W\xe1\x98S\x91\xca\xa3^\x9e?\xb1$w\xc23obQ\xce\x84\x7f\xbeD*\x8f:\xa6x9\x11Q\xf3!b\xe5BD\xcb\x83\x08\xb5\xb8<\xf3\x1f\xfcr\x1fRyTK(,\x95GU\x94\xca\xa3\xb6\x7fY\x81\xcd\xf6r\x9e\xa9\xd2\xb4w\"y\xa3\x1b\xf4\n\xa6\x8e?\xa4\x9e\xfa\xad\x16J\x9d\x03\\\\\x84$s/s\xea\x14\x00\xe9\xf1v\xdd\x12\xa7\xee\x05N\xadl\x03'\xd6\x81#\xdc\xc4\x91u\xe0\x11\xabAZ\x05t\x12\x0fv\xb2\x06\xf0$ \xf4d-\xf0I\x10\xf8\xc9j\x00\x94\x95 (\xeb\x80P\xe2\xc2P\x02\x03QbCQ\x02\x82Q\xa2\xc3Q\xa2\x01R\xe2BR\xa2\x81R\xfca)+\x00S\xa2CS\x16\x81S\xa2\xc3S\x02\x01T\x1c *\x1e\x8a\x86#LeU\xa0\x8a\x8f\xfa\xb3\nX%\x02\\e\x05\xc0J|\xc8JP\xd0\x8a\x17\xb0\xc2\x11\xb8\xe2\x0d]q\x08\x02/\x86\xaf\xb8\xb4=\x1b\xa4\n bY\xc6m? \x8b\xcb\x80\x17\x82Y.\x80\xb3\xd8\"\x81A!-^\xa0\x16wX\x8b\x0f\xb0\xc5q\x16\x96\x81[|\xe1-6\x80K@\x88\xcb\x02\x90\xcb\xe50\x17\x17f{B]\"\x81]\x9cz:\xbbS\"B^\"\x83^\xa2\xc2^b\x02_\x9c\xa1/6\xf0\x8b\x0d\xfe\x12\x07\x00\x13\x0d\x02\x13\x19\x04\xb3\x0c\x06\xe3\x0d\x84Y\x08\x85Y\x02\x86\xb1\x1d\x82\x0e\x98\x05w\xd4\x82\x0f$f!(f\x01,\xc6\xc2\x82x\xd0\x98\xc8\xe0\x98x\xf0\x98\x88\x00\x99\x90\xcb\xcd\x13$\xe3\x0b\x93\x99.\x10j+\x0f\xca\x8d\xd1\xcc!\xf5l\xdfuJ\x83\xda\n\x83\xf6\xba\x14\xa3,\xa8\x93\xbb\xc2V\x12tIAP\xefr\xa0\xfe\xc5@\xbdJ\x81.,\x04j+\x03\xea\xc4\xdf\xde,\x87/\x01\xea^\x00\xd4\xbf\xb7\xb1\x8b\x7fv?\xe6\xda\xa3\xe6\x1f\xe1\n\x7f\xf2p\xf1J\xa7\x92\x9fN\x13\x01\xa3\xbaH\xe1\xcb}\xba\x15\xfb\\\xd6\xdd\xf8\x85>\x9d\xca|.\xeb|\x88\x12\x9f~\x05>\x97\xf53bqO\xa7\xd2\x9e\xcbz}QYO\xf7\xa2\x9eN\x9ds+\xe8\xd9\xeb\xfe\xc7)\xe7\xe9Z\xcc\xd3k\xd4\xf6\xcar\x13#_\xab\x8c\xa7K\x11\xcf^\x17\xc3\x94\xf0\x0cx\"\xf8\x15\xef\x9c\x18\xcb\xaa\xa5;\x9d\x06\x0f\xce\x0c\x00\xe7\xa2\x9dNKWS\x8fS\xb1\x0bv\xba\x97\xeb\\>\x86\x8fX\xaa\xd3\xbbP\xe7e\xa3\xfc(E:\x9dKt:\x8f\xcd]\x88\xc2H\x90F(\xce\xe9U\x9a\xd3i\x90\xfd\x89\x8b^\x96\xd3-:\x1d\xb3$\xe7*\x059#\x97\xe3\\\xa3\x18\xe7\n\xa58\xd7(\xc4\x19\xb3\x0c\xa7W\x11\xce\xde\xca\xf7)\x14\xd8\xd4 \xbc\xb4H`\xaa\x118\xfe9\xd5\x084\x90\x8b\xce\xc7\x1d@\xdbN\x07\x90\xeb\x99\x80\xb4\n\\;\x16X;>T\x9b\x87\x02j\xaf\x03\xd3\x0e\x00\xd2^ \xa2\xbd\n@{\x0dxvLpvPhv\\`v0XvdPv$HvL@v$8\xb6/\x18;:\x14;2\x10\x9b\xfb\xc3\xb0#\x83\xb0\x83@\xb0\xad\x00lG\xa5\xc1\x11|\xbd\"\xf4\xdaU\x8dY\x05v\x1d\x1ct\x1d\x1dr\x1d\x1bp\x1d\x10n\xed\x01\xffu\x82Z{\x02\xadm\xe0\xc3\xa5 k[\xbb\xa9F\xe0\x1c-\x06U\xa7\x1a\x81p \x8c\xda\x0fD\x9dj\x04:\x01\xa7\xa3\xc0\xa6\xad}L5\x02}\xc0\xd2\xf1\xa0\xd2\x8e@\xe9T#\xf0rx\xf4\x12p\xb4'4z\x110\xda\x1f\x16\x9dj\x04\x8e)\x1e\x10:*\x0c:\x16\x08:\x1a\x04:\xd4\xe2\xf2\x84?\xfb\x81\x9f\xff\x91j\x04\xf6+\x1fM\x8d\xa3\xffTo\x1cm\xa4\xf1#\x8c\xc3\xbb \xd4!\xaf9\xab\xf2\x8c\x14\x9b\xbc\xdc\xb1\xa7\x7fCH\xd8\\\xc5\xa7\x7fk^yS\xeeXS\xe2I\x8c\xbdmmX\xe7 \x9b\xd5\xa3\xefUs\xea\xb7\xa7\x9e\xf8\x8dUr\x12\x8c1\x9b\x03\xbdA\x88\xc7z\x8bi\xc8PUF\xce\xc4\xd3>\xcd\xf6\x15\xac\xfd\x15t\xa0d;\x87\x15\xb6~\x02\x9c>#H\xb9W-\xc8\x17\xbcn\xef\x96\xd4y\x06\xb7\x05\xcb>H\x9e\xcc\xbf\xe3\xd2Gp\xee\xa7 \xf9e\xdbC\xce\xce@$\xc7\x0b\x07\x91\xc8\xe9\xf4\xf1>\xef\xea*Dz\xa9\x8brAFN\xfc\\5pG\xfd\xe7\xea\\P\x04\xc3\x9f*&v/\x9e\xf2zv1\xf0%\xfe\x91\x1dH^^YlWULQ\xb6!\x14\x88\xe6E\xd8\x12N\x047\xce\x19\xf6B\x1bA\xf8}\xed2m\xc3!\x9f\xcc\\`\x8aTs \xb1\xa9HY\xa3*q$\xd9!/g\xca[\x00\xc8\xbel\xf2\x99d!p\x9f:\x1b\xbe\x18\xdc\x9br\xc5\x19\x03|$|\x9aT\xe6\xe5t\xda\xb9\x87R\xe2T\xd1\xbb\x8f($\x0e\xa4>\xd8\x9e\xf1\xe0\x15\xb8\x87\x0d\x00\xf54\xbe\xa9)\xdf\xd8D\xb8&g\x0e\x80\x17\x17\x04Y\xeec\xed\x12\xb7\xe2V\x86\xe4\xbal5\xb9M\x0b\xf8N\x0d\xf8MO\xb3HoH\xc5k\xca\xffM\xce\x92m\xf9K\xcc%\xdf\xd8\x87\xe0\xdcu\xe7.\xab\xee\x8aO\xa3\xb4\xc4\x8d%\x84\xea\xcc{\xe2\xe7\x8f\xd0\xdd\xb6\x8c\xe9G\xf8\xf8\x90W2)S\x9d-\xc0\xce\xfct\xe6\xed\xdfZ\x195\xd3\xa2,+\xfeQ\xc7\xd4V\xd6\\\xff\xdb\xe4t\xfa\x08_\x95\xfbMa\x1e>\xc2\xe7\xe9]\xbe\xa5eF?\xc2\xa7\x9b\xf5\xdb\xaah\x96\xe3S\x9c\x06\xac\xa6\x0e\x15d!x\x7f{\xca(J\xd1\x9e\xf5\xd4(|\xd29\x0b\xefi\xb9\xa5\xd51/\xb9\x12`x\xda}\xd6\x91\xbd\xe0m\\!\xad\x02+\xd5\x14\x0b^\xaa)>\xccT\x93)\x98\xb5\x08n\xaai\x1d\xd8\xa9\xa6\x00\xf0SM+\xc1P5\xad\x02G\xd5\xb4\x06,USLx\xaa\xa6\xa00UMq\xe1\xaa\x9a\x82\xc1V5E\x86\xafj\x8a\x04c\xd5\x14\x13\xce\xaa)\x12\xacU\x93/\xbcUSt\x98\xab\xa6\xc8pWM\xdc\x1f\xf6\xaa)2\xfcUS\x10\x18\xac&+\x1cV\x93\xa7\x12\xe4\xa4\xf9\xb7\xb4\"L\xd6\xf8I\x075m\x15\xd8\xac\xa6\xe0\xf0YM\xd1a\xb4\x9ab\xc3i5\x05\x84\xd5j\xf2\x00\x80jr\x82\xd9j\xf2\x84\xdbj\xb2\xc2\xd7\x14-\x85\xdfjr\xfd\x8e\xb5\naXX\xae\xa6\xe5\xb3\xe3\x07\xd3\xd5\xe4\xca\x8e\x85\xb0]M\x8b\xe1\xbb\x9a\x1c\xa6#,\x9cW\x93\x07\xacW\x93+\xbcW\x93;\xccW\x93\xc7\xac-\x83\xfdj\xf2\x83\xffj\xb2URF\n\x06\x07\xd6\xe4\x0d\x0b\xd6t)j\xc1n\xc4\xac\xe5=\xf8B\xcc\x8a\xdeH\x91\xebz#\xadQ\xdd\x1bi\x85\x1a\xdfHkT\xfaF\x8aY\xef\x1biy\xd5o\xe3N\x91\xc5\x05\xfa\xd9\xfbM\xc5\xef\xbc6\x17\xfdV%\xbe\x075\x04\xde\xde\xbc4\xf5\xe8\x98\x97\x9b\x01\x00\xf3\xc2~\xaab\x9a\x86\x86\x1bp\xe2\x81\xe4\xe5\x93\xfb|K\x1b4\xd3\x10\xae%\xd5%2@\xf2!\x88\x0f\x10$\xd4\"jfF\xe6\x0c\xe4\xf2\x1d\xd9\x04l\xcb02\x85\x97\x19\x0d\xe8 \xc1,=\x18\xd7\xd8O\xde\x9bsy2\xe3\xc9\xe8\n9\xc1\xa7\xd3M\xf2\xe3\x9f\x13\xae\xc4@ve \xe1J\x12\xae$\xe1J\x12\xae\xa4O W\x92p% W\x92p% W\x92p% W\")\xe1J\x12\xae$\xe1J\xdc\xb8\x9ep% W2\xf5S\xc2\x95\x8c(\xe1J\x06\x94p%FJ\xb8\x92\x84+I\xb8\x12\xa7\xc5\xb5\n\xae\xc4\x1bi\xc1X1\x83\xb3`\xac\xe8!,\xc4\xe3=(\x89\x11X\xc1X\xa1~\xfe\xad\xc1*\x1an\x0d\xa9\x0f\xaa\x10\\\xea\x86LGl\xeb\xd3l\x8f\xc0\xda+A%\xe3\x1bLX\xdf\xd8\xaa :\xf8@B\xb4d\x08+2V8\x07\x15\x05\xc7RHqD)\xa4h \xfb\xf6H!\xc5\x14RL!\xc5\x14R\xecS\n)\xa6\x90b\n)\xa6\x90b\n)\xa6\x90b\n)JJ!\xc5\x14RL!E7\xae\xa7\x90b\n)N\xfd\x94B\x8a#J!\xc5\x01\xa5\x90\xa2\x91RH1\x85\x14SH\xd1iq\xfd\"C\x8a\xc3,YS`\xf1/m\"\xab\x0e/\x92\xa2\xe8\xe4\xaej\x87\x1f\xcf\xb0\x02\xf8>\xbf\xa3\xa5\xba\xd4\xcc\x18{l[T\xbf\xfe\xc6B\x8f\xb6\xdcc\xfe\x0b\x88\xb1\xe0\x84\xb0jC\xb6\xdb\x8a\xd63O:\xbbMz34l\xbf\x17c\xd5\x7f\x1b^P\xf0I\xdd\xbc\xf7?\xe1\x96f\x07\xa0e\xc6\xb6\xd2\x1b)E\xc3\xb4\x92\x97\x89\x15P\xd6\xe7zs:\xdf~\xa0\xb37N9\xb0\x10\x1c\xd9\x08\x8e\xe1*pg#x\xf8{4\xad\x12\xba\x82\x88\xe1+X%\x84\x05!\xc3X\xb0Z(\x0b\xc2\x84\xb3`\xbd\x90\x16\xac\x15\xd6\x82\x95B[\x109\xbc\x05\xa1C\\\x10=\xcc\x05!C]\x10?\xdc\x05\xf1B^\x109\xec\x05\xf1B_\xb0 \xfc\x05k\x84\xc0 ~\x18\x0c\x96\x85\xc2 ~8\x0cB\x85\xc4\xc0%,\x06~\xca\x89cx\x0c\xd6\x0d\x91\x8d>gQ\x9bV \x95A\x8cp\x19\xac\x112\x83\x15\xc2f\x106t\x06~\x01\x1ep\x0d\xa1\x81\x7f\x18\x0d\\\\\xd2\x17\x84\xd3\xc0\xb1}\x8b\xe3,dh\x0d\x16s\xdf/\xc4\x06\x8eC_\x18j\x83K\xc2m`gy\xd8\xb0\x1b\xf8\x85\xde\xc0#\xfc\x06^!8p\x9f\x95e\xa18\xf0\x0e\xc7\x815$\x07!\xc3r\xb0$4\x07\x01\xc2s\xe0\xc8z\xcf0\x1d\xc4\n\xd5\x81k\x7f-;)b\xd8\x0eb\x87\xee n\xf8\x0e\xa2\x86\xf0\xc0=\x8c\x07\xd6P\x1eX\xc3y\x10)\xa4\x07\xf1\xc2z\x10;\xb4\x07\x0b\xc3{\xe0\x1f\xe2\x83\xa5a>X\x14\xea\x03\xfb\xc6\x07\x87\xa8\x0cxDf|\xc2~\xb04\xf4\x07K\xc2\x7f`gF\xbc0 \xc4\x0e\x05B\xc4p \xc4\x0c B\xe0\x05\xe8\x19\x1a\x04\xef\xf0 tB\x84c\xfa\xdf$/\xe8\xd6\x1e0\xb9e\xac\xa0\xa4\x9cy\xaeg\x7fc\xb3*\xee\xb3\x85\xfb\x03U\xbe\x12:\xa8zyKi\xa9\x9f\xdeU\xec\xd8\xdc\xe6*#\x88\xe8\xc6\x9d,\xa7\n\xea\xb1\xb9\xee\xf7\xba\xa5Z\x1d\xde\xab\xac\xff\xfe)~\xfciS\xd0V\xfd\x97\xf4\xafO\x7f\xc2\xd1}B\xcb\xf3L\xd9W\x901\xdb\x17?|\xffj\xf3\xee\xfd\xf3\xf7?\xbe\xdb\xfc\xf8\xfd\xbb\x9b\xd7/\xdf|\xf3\xe6\xf5+\xaf\xb7\xc4\xbf\x16\xbc\xf2\xe6\xfb?{\xbcc\xfd\x88\xce\xff\xf3\x1e\x92-\x99\xd1\x99\xdf\xbd\x99\xc7V\xd5\x82T\x07}{\xd5\xb2\xfc\xed\xd3\xbc\xcc\x8akY\x84\xf5I[\xcduf\xe6\x9b\xaa\xb3\x1b\xbc{8t\x9f\x87\xed\xb7aTy\xefqs's}F/9\xe9\x05S;\xb7L\xcf\x8c\xa0\xfd\x9c{\xaf\x9a\x7f\xf4\xe2\xba\xdd\xbfsZ\x1d\xeb&S\xb4\xe9\x95}\x13\x05\x8b\xcb\x1eY\x99\x7f\xa0\x13\xb9\x9b-9N\x0b\x8c\x8acc\xf3\x9d{\xd1\x0f\xe7#)\x9fT\x94`\xcde\xa9\xf0x1\x00T\x98\x96\xcf\x86\xaf\xe1\x82N\xeb\xf6\xdb^\xb7\x11\xb1\xf6\xc7:\xdf\x97\x84\x9f+\n\x9f\xd2\x87k\xf8\xf1\x86U\\\xc8\xe1\x7f\xa7\x8f\xb7\xa4\xa6\xb3\x92\x10\xe0\x9e\xde\xd6\xf9\\\xd9h\xa4\xa5CP\xcd\x1bG\xa0\x7f+\xf2\xf2\xc3|'k\x9a\x9d\xab\x9c?n\xa4\"\x9e\xf1X\xbd\x1d~\xc7\xd8mz$\xb9\x0c\x047\x8f\x83z|~\x10\xb3\x99\xbc--\xed\xbbj^KL\x8cu4\x9dV\xbfN\xf7\xb0-\xe7\x8f\xf7]\x04\x90\x8dn\x85\xdc\x07\xc3\x18\xf6CO\xc1\x15\xe4\x9d\xcb\x04\xf0\xfa|\xf5DsSG\xff\x8a}\xa5\xae\xec\xcf\xa5\xfd\x12\x02\xf7\x8b\x12\xbcG\xbf%\x9c>\x11m\xfas\x00/S\x98\x1e\xff1/\xf1\xc2\x85\x91\xdc\x921X&4iN]F\xdfVpw>V:E\xdf\xbb\xa7J\xe7\xcf\xe3\xdbBL\x14\xf8\x1c\x19T\xad\xb7n\xb7\x891\xe1\xcb\xbd\x91I\xa0\x00)\x86\xd5\xeeux\xb8 of\x15%\x1cm*\xc7s\xc4\x99 \xe0\xc1\x08A\xf3\x17\x02\xb4\xe4\xb8\xa45\xf5x\xd6\xbb\x1b`p\x11\x00\xd6\xfc\x97\xbaN\xab\xdd\\\x814kw\x12\xd92}\xb7AKG\xf2`\xb9\xda\xa0\xa5KF\xa2\xbf\xd3\x9bu}\x0f\xc8ph(q\xfaW\x1c\xd0;Z\xa91/\x1a$F\xf4W\x1bk\xe7s\xc6!oI^\x08y\xacqHsXA\"\xd8\x84\xeb]\xf9\xe4{\xcd^!\xc8I\xc2oXU\xd1\x8cCF\x8a\xec\\4.\xe9\xddY\xa8\xe2\xd3\x1f8\x97-\xc7k\xc9\x0bv\xe6\x90s\x89\xb8.\xf7\xc0\xeeh\xf7z\x94k\xf8\xe9@K\x1c\x8a\x04Yu\xad\xe0\xe9\xaf\xf45\xa1\xab\xc1\xc6\xcdkqHms\xae1+\xa4{\x11\xd0\xfd\x81\xd5\x9d\x8bs\xa6?\xd2\x9d\x86\xbc\x0f\xef\xea\xcc*v\xbd\xed\xf66o\xe2>\xe8;\x94\xd0\xa3\xe9\xaf\xf4\xf8\x7f\x0d\x7fa\x92M'vOQ\xe8\xde\xd2f\n\xe8V\xc6x\xe4\xb2\xd2n)\xd9\xbd\xe9\xd6\x8f\xe7\x82\xe7\xa7\"\xc7\x0e\xf5\xbfe|\xa9\xb7\x1b:\xb0\xfa\x16\x9b\xa2\xee\xfaB\xf8\xfd\x16\xe6\xaf\x8d:\x91\xbd\xba\xe3\xc7,\x1az\x9fk\x1f\xee\x17\xc1j\xff\xac\xd6\xac d\xdf\x92U\xd9\xb0\xab\x18%}\xe0\x9bY\xe0\xb6\x934s\x02'\xa9\x8b{\xfek\x0e!\xa4\xfb\xa3\x85\x9f\xf8O\x85\xda#u\x8d\x1a\xc8\x0d\xd9\xd3\xb7\xf4\xe73\xad\xf95\xfe>\xd3`{\xd5\x9fhZ\xb0\x98\xc2\x91\xd5\x1c\xa8\xc4\xc3I\xb0\xdc\xc4\xebr\xfd\x05b\xccy\xdevR\xac\x99\x05O\xe1v\xc8\xf5\xbeh/\xc4\xd2\xe2\xb0\x03\xf9\xdb\xf5\x98\x94\x89-\xbc\x91\xaf\xcd\xb9\xd8\xc5YXS~\x059\xaf5\xc6\xb4\x96r\x0e}\xc9\xd2\x12\xbd\xcf\xeb\xf1\x0c\xab\xee\xcb\xbc\x976\xcd\xc4\xb5\x92Y'\xd5\xa5\xadg\xd6|#\x953K\xe5\xcc\x86d\x97kn\xf9!N[\xd8]q\x82\xb5rBb\xe5\x83\xc4\xcf\x05\xe1\xa1\xf2@\xd6\xc9\x01 \x90\xff\xb1R\xee\xc7*y\x1fk\xe4|\xc4\xcc\xf7\x08\x9a\xeb\x117\xcf#X\x8eG\xe4\xfc\x8eH\xb9\x1d1\xf3:\"\xe5t\xf8\xe6sD\xcf\xe5\x88\x9c\xc7\xc1\xfds8\"\xe7o\x04\xc9\xdd\xb0\xe6m8*\x0dN&\xd1\xaa\xb9\x1a\xaej\xcc*9\x1a\xc1\xf33\xa2\xe7f\xc4\xce\xcb\x08\x98\x93\xe1\x91\x11\xe0\x94\x8b\xe1\x99\x87a\xc3\x19/\xcd\xbf\xb0\xb5\x9b\xca\x99\xcd\xd1\xe2\xfc\x8aT\xce\x0c.\xc9\xa1\xf0\xcb\x9fH\xe5\xcc\x9c\xf2$\xa2\xe4HX\xfb\x98\xca\x99\xf9\xe4C\xc4\xcb\x85p\xcc\x83H\xe5\xcc.\xcfyX\x92\xef\xe0\x99\xeb\xb0(\xcf\xc1?\xc7!\x953\x1bS\xbc<\x86\xa89\x0c\xb1\xf2\x17\xa2\xe5.\x84Z\\\x9e9\x0b~\xf9\n\xfa\xc8m\xe1^\xadj\xf3D\xca\\\x8d\xe3\xef4cB\xf9\xd3\x92\xdc\x16\xe89\xc1\xf0\x9b\xe0c'\xc4*\x8b\x96\xe1D\x9b\xaa\x96\x81<;\xbe\xc2w;\x7f\xab\xe8\xcf\xe7\xbc\xa2\xdb\xaf`G\x8a^\x14\xca\x14\xb11\x9a\xe9z\x18m\xa4\xf5\xfa\x03}\x9c\x1a\xce R\xa9\xc2\x92D\xc9\xfd\x8a\xf2sUb\x95,\x8c\xb6\xa9\xa0S\x13\xc3\x94n\xa9}\xde\xcf\xdd\x90\xa3\x12\x83\x9f\x8fI^\xc3\x0f\xe2Df\xa54\x87\xd9nWS \x06\xeew\x17:\xce\xed\x9a\xf2\x158\x08S\xae\x0d\x03k\xb1\xd7S\xdc\x1dx \xd4\x10%\x83\xcb\xf3\x91Vy\xa6\xff&e\x87\x82\x08\xa0\x8f\xe7@K=\x1d\xe7\xb2q\x8f\x0d4\xe77\xb2\xb5\x82\xd6u\xcbXt:\x9dk1\x01\x1f\xe8\x1c\x97\x15g\xfbM~\x146\x0fb\xc7\x06F\x17\xf91w\xe5\xb3|V\x87\xd7\xa7B\xc9\xe8P\xed\xaep\x85F\x10\xca\xea =1\xddF\xdf\xec\xa0\xa0;\xae\xbcv9G\xd1\xae\xb5[\x9d!q\xa6\xaaa\xc1\xe5\xdbG\xa0$;\x009\x9d~q\xfc\xec\x06\xcc\xdb\xf7\xe7\xb8\xdayC\xf0V\xaeZ\x06\xbc:S\x10\xff\x91\x97\xdb<\x93h&\x15\xcd\xd1\xbc\x14\x0f\xaa-\x9c\x97Yq\xde\x0e\xb4^\x82-7\xe1\xb1\xc1|\xc9@j\xc7?,\x04m\x1fE\xf2\xe3\x9bz0W\x83\xaeJ\xc5\xbf\xa2\xb5\n\xa0\xcb\xad\xd5\xeeE\xb1\xdd\xae\xd5N\xca\xf7%\xab:\xbb\xaf\xdf,\x8e:\xc6T\x0e3\xe0\x0c\x13V\xd1;Z\xf5\x9a\x9b\x9b,\xf5\xf4p\xa2\xf2\x0e\x94\xa2\xa2\x13{@\xb4K%\x08\x1bX\xb5\xa5\xd5\xd0Y\xf4./3\xfa\x15`\xe5\xcf'\xf5\xf6\x03|v\xfd\xa7/\xa2se\xaa\x04\xe9\xef\xed5H\x9f\xfe\xad\xf9oY6\xf2\xef\n\x101[\x95\xb4)J\xda\x01\xa3\x95;&\x17 \x9e\xe9\xed\x0f\xaa\xee\xa4^\x1a\xe6\xa2\xa4\xea\xc7\xdfjM\xd29\x9c\xc4E\x00.\xf7\x8a\xa2Nq\x8b\x1eo\xd7\xad&\xea^K\xd4\xca6pb\x1d8\xa2D\x1cY\x07\x1e!\x16\xa4U\xb0\"\xf1\xd0\"k\xe0E\x02\"F\xd6\xc2\x8c\x04A\x8d\xac\x86\x1bY 9\xb2\x0ev$.z$0~$6\x82$ \x86$:\x8a$\x1a\x8e$.\x92$\x1a\x96\xc4\x1fM\xb2\x02\x9e$:\xa2d\x11\xa6$:\xaa$\x10\xae\xc4\x01Y\xe2\xa1h8\xa2KV\xc5\x97\xf8\xa8?\xab`L\"\xa0LV\xc0\x99\xc4G\x9a\x04\xc5\x9ax\xe1!\x1c\xf1&\xde\x88\x13\x87\xd8\xedb\xd4\x89K\xdb\xb3\xb1\xa5\x90\xd8\x93e\xdc\xf6\xc3\x9f\xb8\x0cx!\x06\xe5\x02\x14\x8a-\x80\x17\x14\x89\xe2\x85EqG\xa3\xf8\xe0Q\x1cga\x19&\xc5\x17\x95b\xc3\xa5\x04D\xa6,\xc0\xa6\\\x8eNqa\xb6'B%\x12F\xc5\xa9\xa7\xb3;%\"R%2V%*Z%&^\xc5\x19\xb1b\xc3\xac\xd8P+qp+\xd1\x90+\x91\xb1+\xcb\xd0+\xde\xf8\x95\x85\x08\x96%\x18\x16\xdb!\xe8\x005p\x07\x1b\xf8 Y\x16bY\x16\xa0Y,,\x88\x87h\x89\x8ci\x89\x87j\x89\x88k \xb9\xdc<\xb1-\xbe\xe8\x96\xe9Z\x9c\xb6J\x9c\xdc\x18\x85\x1cR\xcf\xf6]\xa7\n\xa7\xad\x06\xa7 \x9b\x13\xb4\x02\xa7\x93\xbb\xc2V}sI\xedM\xef\xca\x9b\xfeu7\xbd\xaan.\xac\xb9i\xab\xb8\xe9\xc4\xdf\xde,\x87\xaf\xb6\xe9^k\xd3\xbf\xb7\xb1\xeblv?\xe6\xda\xa3\xe6\x1f\xe1jl\xf2p\xf1J\xa7\xea\x9aN\x13\x01\xa3\x12D\xe1+k\xba\xd5\xd5\\\xd6\xdd\xf855\x9d*j.\xeb|\x88j\x9a~\xb54\x97\xf53b\x1dM\xa7*\x9a\xcbz}Q\x05M\xf7\xfa\x99N\x9ds\xab\x9d\xd9\xeb\xfe\xc7\xa9\x9c\xe9Z7\xd3k\xd4\xf6\"n\x13#_\xabb\xa6K\xbd\xcc^\x17\xc3T\xcb\x0cx\"\xf8\xd5\xc9\x9c\x18\xcb\xaaU2\x9d\x06\x0f\xce\x0c\x00\xe7\xfa\x98NKWS\x8fS\xb1kc\xbaW\xc6\\>\x86\x8fX\x15\xd3\xbb&\xe6e\xa3\xfc(\xf50\x9d\xaba:\x8f\xcd]\x88\xc2H\x90F\xa8\x83\xe9U\x05\xd3i\x90\xfd\x89\x8b^\x01\xd3-:\x1d\xb3\xfa\xe5*\xb5/#W\xbe\\\xa3\xee\xe5\nU/\xd7\xa8y\x19\xb3\xe2\xa5W\xbdKc}>\xef\xf2|\xa9:\xdf\x88Ru>\x03\xb9\xa8m\xdc\x01w\xedt\x86\xb8\x8au\xa4U\x10\xd7\xb1\xf0\xd6\xf1\xd1\xd6<\x14\xd6z\x1d\xa4u\x00\x9c\xf5J(\xebU0\xd6k \xacc\xe2\xab\x83\xa2\xab\xe3b\xab\x83!\xab#\xe3\xaa#\xa1\xaacb\xaa#!\xaa}\xf1\xd4\xd1\xd1\xd4\x91\xb1\xd4\xdc\x1fI\x1d\x19G\x1d\x04Em\xc5P;*\x0d\x8e\xf8\xe9\x15\xd1\xd3\xaej\xcc*\xc8\xe9\xe0\xb8\xe9\xe8\xa8\xe9\xd8\x98\xe9\x80\x88i\x0f\x04\xaf\x13Z\xda\x13+m\xc3\x0f.\xc5I\xdb\xdaM\xd5\xf9\xe6h1.:U\xe7\x83K\x90\xd0~8\xe8T\x9d\xcf \xfb\x1c\x05\xf9l\xedc\xaa\xce\xe7\x83w\x8e\x87vv\xc4:\xa7\xea|\x97#\x9c\x97\xe0\x9b=\xd1\xcd\x8b\xb0\xcd\xfe\xc8\xe6T\x9doL\xf1\xb0\xccQ\x91\xcc\xb1p\xcc\xd1P\xcc\xa1\x16\x97'\x82\xd9\x0f\xbf\xecR\x9d\xaf_\xc8\xa7\xd3\\\xcf\xb8\xec?\xd5\x8b\x90\x8f\x8a\xf6\xf4j\xf8u\xcf\xdf\\^c\xc6\x0f\x9d?\xb5U\x8cxuv+b\xd4\xb3\xd3C\xd60z\xda R\xba\xd43z\xd5\x89i\xea\xd2F:\xec7Y\xd9H\xf3\xc3\\\xd1\xa8\xd3\xa4z\xee7V\xdc\xa8e\xf1\xc60\xb2.\xf1_@\xc4\xc9\x05\xb5\xe0\xf41p\xfc \xf4\xc0\xd3\xd6\xf2LH\x8e\xee+\x98FR\xeb\x8d\xab\xb0\x13\xb74;|\xf1\xf9\x13]\x83iP\xb5\xa9ym^\xb5\xeeo\xae\x88\xc3\x18}\xc8m\x18\x8e\xc03\x1b\x80\x1dii\xdf{\x10\xf6.w\xa5\x8f\x13\x7f\xachF\xf3\xbb\xb9\xbbf\xdd\x1d\x81\x82Z\x19\xd3\x9e\xde\x8aa\xacT\xdeV\x05\xfb?\x08\xdd\xf3\xf6Q:\x0c3Y\x03P\xd5\xf5\x9b?\x1b\xd9}\x89V\x12+;\xcbE9\xabe0\x86e9i\xa0\x18r6\xba8\x07\xb6\x13o\xce\x7f\xc3a\xfanIA\xca\xcc\xc1\xf3\x1bp\xeb\x96l6o\x05|\xd6\nBJ\x025\xe7\xb3B^\xb2\xbc\xec \x99\xe4bhQ3%;\xeaZ\x91bB\xc5\xda\x90\x1d\xb59\xd9\xbe\xff\xe1\xfd\xeb\xaf\xa4\x15\xa6\xb02h\xda\xe4\xd2\x1f\xfd\xa6\xd4h\xe4\xc6\xd1\xdfS\x00\x15\x84d~\xabj\xdc~\xdd\xa8\x15b\x11\xee\xd9\x9eIE\xebR/z\xbbq\xba0\x18\xf1\xa5;R\xc8:\xb1\xac\xbb\xb9\xe8CFO\xaa\x10m\xce;\xde\xf7\xe9Q\xa8\x15;\xd4t\x95 P\xfc\xa9\xe1\xc8*\n\xf59\xe7M\xfd\xce\xac\x90\x85j\x9b#\xd54\xd4t\xdb\xac5x\x93n\x9b\xb5\xb1\xe6W~\xdb\xacqf\xfb\x10\xb7\x8e\nnE\xbbM5\xf6\xd4h#$(\xdc\x90\x12\x14\xce@v\x91\x98\xa0p \n\x97\xa0p \n\xd7\xa7\x04\x85KP\xb8\x04\x85KP\xb8\x04\x85KP\xb8\x04\x85\x93\x94\xa0p \n\x97\xa0pn\\OP\xb8\x04\x85\x9b\xfa)A\xe1F\x94\xa0p\x03JP8#%(\\\x82\xc2%(\x9c\xd3\xe2JP\xb8\x8b\xa0p\xe9\xa6\xda\x057\"\x1a<\x1d\xe9\xa6\xda\xf6/+\xb0\xd9~\xb3j\xba\xa9\xb6C\x01\xf8\x99n\xaaM7\xd5N\xec\x81\xedo\xff\xa6\xda.\xca\xfb\xe9\xdf\xfa\x18\xd8\xb9kl;\xc8.g\xb0w\x0b~\x84\x13\xc9\xcd\xd8\xef\xb6]\xf5\xebo\x1f\xf1=\x87\xab\xb8\x08+\xe6\x82\xd7\xb6~\x06\x9c>\x05\xfeHm\xc7\xd8\xca\x8a(mO\x8c\xf6\xb2\x01\xc4\xc4g\xbb\xa0\xb3\x97\xf5:\x0c2\xdb5*\x15\x1f\x95\x1d\x1f\x93m\x9d0+\x1e;\xe8\xd6\xb4\"\xb1\x1d\xd7\x85\x0b\n\xdb\xa9)\xf7\xb5\x10\x03\x7f\x1d\x19}\xbd\x0c{\xed\xc6\x92\xd8\xb8\xeb\x88\xa8\xeb\xde\x00\xa5\xd6b\x1e\xcc\\-\xc5\xce\xd0Z\x04i\xfb\xa9\x04!M\x10\xd2!\xb9\xc8H\x9e \xa4 B\x9a \xa4 B\xda\xa1\x04!M\x10\xd2\x04!M\x10\xd2\x04!M\x10\xd2\x04!\x95\x94 \xa4 B\x9a \xa4n\\O\x10\xd2\x04!\x9d\xfa)AHG\x94 \xa4\x03J\x10R#%\x08i\x82\x90&\x08\xa9\xd3\xe2J\x10\xd2@\x10\xd2>\xea`j\x1c\xfd\xa7\x06\x97_k\xe4\xcbG\x18\xc7jx\xa1\xf6\xea\xfb\xce\x15\x843 \xa2\x0e\xe6\xf6G\xfd\xa6\x01X\xd4\xb4\xea\x80,j\x1a\x9cD\x18\x19\xbe\xa4\x1e\xfb\x8dA\x8d\x90ms!\xb7\x10\xe8\"\x17\xb4\x8c\x93\x0fl\x15\x98\x8f\x07\xc4\xc7\xbf\xd3\xb1\xa0=\xb4\xe4\x955x9\x17@\x05[\x10\x15\\\x96\x04\x92}a \xe1\xa5\xc6\xac\xb4\xde\x01\x8e\xe4\xc4m$\xb7\xfb\xc0\x91z\xf33\xe8\x92\x9e\x1d\xf5/}\xfbw\xe7\xcak\xe0\x8c}\x80SA\xb2I/)\x92\xba-[\xb4m\xbf\xbdv\xd1`\xddn\xb0\x1d\x0e\xb8\xdf-=\xe0s\x99?\xb4W\x7f\xb7\xa3m\x1f\xb7\xf86\xf0^\xeb\x8d\x15\xc1\x84\xe41\xda^\xef\x07\x9f\xe9\x9d\xa7\n\xfb\xa5\x1e)\xd0\xf5\xbf=\x17\x18\xa6RH4 \xdcyL\x91\xc723\x86%\xfd\xed\xb5m8\xd0^\x97\xbczl1S\x9d\xbb\xeb\xd5\x06G3\xb1\xa2\x05\xbd#%\x17f=\xd9\x12N\x1c\xa1{J !r\xba\xb7a:\xa8@\xf5\xd0%P'\x93RPs&\xef\xfb-\ni\\C\x9d\x97\xfb\xa2#\xf9?\xe9\xea\x0b\xe2\x7f'q\x80b\xf17\xef\xb7\xaa\x84\xb0\x04\xf0f\xfc'\x12\xf4M\xb7P\xe45\xb7\xa0\x99\x8ccX\x08q2i(\x86\xd6\x13\xfciD \xfed \x97\x13\x9b'\xf8S\x82?%\xf8S\x82?u(\xc1\x9f\x12\xfc)\xc1\x9f\x12\xfc)\xc1\x9f\x12\xfc)\xc1\x9f$%\xf8S\x82?%\xf8\x93\x1b\xd7\x13\xfc)\xc1\x9f\xa6~J\xf0\xa7\x11%\xf8\xd3\x80\x12\xfc\xc9H \xfe\x94\xe0O \xfe\xe4\xb4\xb8\x12\xfc\xe9\"\xd8P\x82?\x19\xe0O&\x84\x93\xd3\xf5\xb8\x86\xa0^m@8uZ\xc5\xf8\xe6\x08\x1db\xbe*\xd7\xd4\xbcz\xe17 k\x123\xf0\xeb\xb92\xd7\x05o\xe4\xec+[\x05(\xe5\x05\x95Z\xd6\xf5Xp)\x07\xc0\x94}q YASN\x0b\x05\xc9e\xb9 yB\xa7\x9c\xb9\x8f\xe4\x03\x9fZ\x0d@\xe5\x0d\xa1Z8hW\x18\xd5:@*o(\x95\xe7\xa8?\x1e\x9c\xca\x19Pu\xc9\x88\x02\x83\xaa>\x06\xac*8\xb0\xca=p\x11\x17\\u9\xbc*]\xd1\xeb\x10\x12KW\xf4\xdaX\xf3k\xbd\xa2\xd7\xbe\x8d\xfb\x17\xf5\x9a\x0c\x00+\xe0\xd0\xd4\xf5\xc1\x95\xbdF\xbb%A\x0fG\x94\xa0\x87\x06\xb2\x0b\xcb\x04=L\xd0\xc3\x04=L\xd0\xc3>%\xe8a\x82\x1e&\xe8a\x82\x1e&\xe8a\x82\x1e&\xe8\xa1\xa4\x04=L\xd0\xc3\x04=t\xe3z\x82\x1e&\xe8\xe1\xd4O z8\xa2\x04=\x1cP\x82\x1e\x1a)A\x0f\x13\xf40A\x0f\x9d\x16W\x82\x1e^\x04\xd9K\x97\xf7.\xb8$\xd2\xe0\xe9H\x97\xf7\xb6\x7fY\x81\xcd\xf6\xcbf\xd3\xe5\xbd\x1d\n\xc0\xcftyo\xba\xbcwb\x0fl\x7f]\x97\xf7j0:\x7fhp\xe8u~<\x17\x84+'\xf7\x89\xd5cx\xf9;\xf5\x08\xe8gk\xa0\x0f4;sT\xcfxE\xca\x9aH\x17(\x1au5\xcf\x8fD\xfe\xb8'b\xcdH\x01\x81m\xf6p\xe5\xba]\xf5\xdbo\x0cB\xbe'\xf5&/w\xcc\xec\x11\xea\x0dD?\xaa\xe5\xb0\xf8o!\x9c\xe4}\x93\xb7\xec\xcc\x15#\xdbu\xa7fb\x12l8\xdbo\xb0\xf6\x1dT\xff\xefI\xc9\xe9DuOp\x8d~8B\xa9z\x1c\xf93\xa9\x7f\x92\xdf\xd6,9\x92\x87\xfcx>\xc2\xb9\xcc\xb9t\xa4\xdf\xb3\xea\x03\xdc\xab\xf0%\x06\xce\xf8\x83\xf4\xea\xd3J|q\xcay#\x86%8\xf9q\x06\xf5c\xdd\x0eI]\n\xcavrvI\xc6\x11\x07\x90\xb1R\x05\x9c\xc7\xcd\xa1@rXQ\xea<\xc9\xeb\xee\xe9\xa2#)\xf1\xd7\xce\x96p\xc3f\xd2\xe4\xc5\xe0\xd9\x88\x99k\x10\x0b\xe0\x15\xe1Dj\x93\xe5\xa3\xec]+\xc9w\x95\xbcm\x15\xed:\x19\xbb.\xb7\x05\xad\xb4\x88c\xa5<\xf0\xbe\xfb\xf1\xdd{K\xc8\xb1\xa0\xe5\x9e\x1f\xe0T\xd1]\xfe\x80[U\x9e bQ\xd6T\xd8Q\x9c\xe2\xb7\xf1\x93\xe7\x82\xe7\xc2\xb0\xd4\xdfn>8\x19\x8f,\xd8\xfeB\xae\xf6\x18\xf6-\xdb\xf7\xfdA\x05\xdb\xf7d\x8f\x9d5\x13\x1f\xa2w\xb4\xe4\xbf\xb2Z\xb2\xb2\xb9\xd9'\x1cy,\x88p^\xe5\xb7gn\xfb\xa8\x1b+\x90\xac\x0cArd\x0b\x92+s\x90f\xf1\xc6]r\xe6\x93&\xa7\xdd\xde\x925,\xdfR\xec\xae\xe4\xe5\x96>\xf8te\xa8\xbfNQo\xab\xbe\x16\x1b\xea\xb9^Th\x16+\xd4\xfb\x07\xfa\xf8\x04\xad\xa9\x13\xc9\xab\xab\xd1\xb5\xe2\xa4\xc4\xed\xe8\x9c\x1f`\xc14\xca\xae\xe0\xb1[\x0bsM\xa3\x89`K\xefh!\x96\x934\x18 \xe7\xd2\x9ek\xdd\xd1]\xc9\xc2-!)\xed=yA\xf7y\xf9\xa2`\xd9\x87\xab\xe6o\xaf\xcb\xed\xe0//\x0f4\xfb\xf0\xfeAz%\xf5\xdf^\xd1\"\xbf\xa3\xd5\xfb\x07K\x98\xf1[\xc2iu\xd5Ubk8\x92G\xa1\xecc\xe2\xe4V\xf9\x07\xf8\x81\xd6TI\xb6i^\xbasR\xf2\xb1\xee +\xa0.\xf2Lz\x1e\x90\xc5\xb8\x85\x15\xe6\xef\x9eV\x14\xe81\xe7b^\xb7g\xc4t\xa2d\x9e\x1b\x9f\x9b\xd0\x9ess!iU\xbd\x0b\xf6\xe6\x9d<\x07\xf4\x11k\xc0\xb7\xe1}Z\xdd\xe5\x19\xbdn\xdaI\xd8\xee!%l\xb7\x81\\\xce'\x9e\xb0\xdd \xdb\x9d\xb0\xdd \xdb\xdd\xa1\x84\xedN\xd8\xee\x84\xedN\xd8\xee\x84\xedN\xd8\xee\x84\xed\x96\x94\xb0\xdd \xdb\x9d\xb0\xddn\\O\xd8\xee\x84\xed\x9e\xfa)a\xbbG\x94\xb0\xdd\x03J\xd8n#%lw\xc2v'l\xb7\xd3\xe2Z\x05\xdb]a\x9d\xa1\x17l\xdb\x89\xeb\x1a\xc2'\x9d(\xdf\xd3\xff]\x0f+e\x99\xa3(\xff\xff\x8a\xee\xbe\x82\xdf\xff\xb7\xa7\x19;\x9eXIK^?\xc5'k\x85B\xbb\xe6\x0f\xd7\n\x85\xd6\xc6\x85\xb0Gm\xf7\x8d \xef!\xbcME\x97\xcc\x007\xfe\xa0\x9e5UN\xfd3\xe5\xef\x1fj\x8c\xb7\xed(\xcf\x0eB\xc2?\xd4\x12\x8e\xda\x0d\x9a\xf6pk\x9d\x97\x1aF\xfe\xf2\xa0k~\x13\xd0\x19\x93\x8e\xf1\xb5\x93\x90\"s)27\xa4\x14\x99K\x91\xb9\x14\x99\xebQ\x8a\xcc\xa5\xc8\x9c\x91RdnH)2\x97\"s)2\x97\"s)2\x97\"s)2\x97\"sH\x0e\\O\x91\xb9\x14\x99\x9b\xfa)E\xe6F\x94\"s\x03J\x919#\xa5\xc8\\\x8a\xcc\xa5\xc8\x9c\xd3\xe2Z%27Wu S\xd0:\xcd\xf4\x8cJ\xfcU\xe7g\x15y\x8d\xee\xe2N\x8d\x06\xf9\xc4\xc8J\xf5+DA\x1fN\x05\xdbR\x8f\xd2K\xe3H\x841\x02a\xb4\xecS\x9d&\xefz \xa9NS\x87>\n\x9b\xedu\x85R\x9d\xa6\x0e\x05\xe0g\xaa\xd3\x94\xea4\xfd\xba\xea4\xb5\\\x91\xbd\xda\xdcN\x1ej\xff\xfa\xf9\xc0Y\xfc\x04~x\xfb\xea\xf5\xdb\xcd\x8b\xff\xb5\xf9\xf1\xfbw7\xaf_\xbe\xf9\xe6\xcd\xebW_\x19\xff\xda8\xa7\xd5}\x82\xa8M\xd6\xac\xe2-C\xe0\x07\xf1?/\x1a{XJ\x93\xe7\xef^\"\x07\xf3\x1a22\xba\xce\xae\xd3\x87\xe7\xef^~\xd5\xfbW{\x83a\x9f\xf3\x93-\xbcz\xddkB\xfc\xb3ic8}\x11&\xc6 yhy>\x0e\xf5\x133\xdb\xa7\x1fz\xfe\xee\xe5\xf4\x8fb\x8c\xbd_5\xd0f\xee#\xd3\xe0\xa7\x89\xf2]/*F\xb6\x19\xa9\xf9\xfb\x07\xb8\xd5\xff\xdd\xd5\x08\x8d \xa7\xce[\xea\xe7_\"\xc8\x89/\xc7\x03\xf1\x87\xe6n\xe79\x04\xcdEu\x90lw\xeb:\xc5\xb1vNw\xe9\xaa\x9b\x08\xdf\x1f(\xdc\x16,\xfb\xa0\xbe=\xf1<\x7f8\x90\xfapa\xc7z\x93->\xdc\xb52D\xfbS\xae\xbc\x8cmi}\"s\x17\xb7:u@\x8dY\x18\xe2\xb29]\x80\x02^\xb2\xedT\xc0o\x1a\xcc\x05N\x80.p\x9e\x91\x1e{\x9a\xc2\x19\xe2\xfb\x93\xd1\xc1\xcb\xcbf\x0d?*\xb4\x15\xa1\xf0\xd7W\xda{>\xf1jE\xee7\x81\xebK\xcd\xc2\xb4\xc4zag~:7ZR\x07e\xfaI\x0d\x05\xdb\xefi\x05\x9fV\xe4^}\xf4\x0f\xd7\xf0\x9d,\xcc2g\xe7\x97\xac|\xb2\x15\x86\xf31/\xf3\x9a\xe7\xd9\xd4x\x0b\xb6\xff\x95\x15\xa8:\xd6\xfb\x8dS\xb5!\xb7E\x8c\xe4\xb6\x94\xc1V|\x0c\xc9i\x89\x80C}0$\x97I@\xb2N\x05\x92\xe3\x84 \xb9N\x0b\x92l\xda\xe19\x0f&!\xb9W\x12Crg\x1a\x92#\xeb\x90\xbc\x18\x88\xe4\xc7F$\xe7:cH\x9e\x1cE\xb2bL\x86\xb4\xe0+\xee\xd2\xb0Om\xa1\xaf\xce5\xe0\xcdB\x80\xfb\x8a\x9cN\xb4\x12\x16\x9d\xba\xc2\xfb\x03}\x94\xcea\xb4\xd6Ie\x85\x8c\xb5\x84\x03\xaa!/kN\xc9V\xba\x13\xc8=\x9e\x19\x96P\xdc\xa2\x11\xbe\x93\xdfC\xc4\xbd\x1e\x1d-{%\xaf\x06\x03\x948Lq>4;\xc1et\x1au\xfb\x81>>m\xcb\xa3),\xa70\x14/\x19\xb8\xef\xb0/\xaf\xf5U\xb3\xa3\xc3\xa4Z\x0b3\xc2HG\x7f\xf1\xf2\xcdw\xe8^\xff\x96\xed\xdb\xf5&\xd8s\xce\xf8\xb9\xa2\xba\xd72*Pb\xbd;\xba\x05\xfe \xdfm|\xf3\x05\xdbO\x7ft\xa4)\xba\x9c\xfcb\xc3m\x9bC\xdf\xfdd\x9f.\xba\x0b\xae\xdb\xb8\xcf\"c ;\xff~\x05/\xa8\xeb\xa1~>\xef\xd5\x9aUy?\x1az8\xb6\x04\x87\x14\xb8h\xee\xe2\x8e\xeb\xda\xb8p\xfb\xe8\xd2m>\xa3*9\x1den\x87\x17wHsp\xe4\x10x\x0b\x97U\x92\x1d\xe2\xa5;\xac\x91\xf0\x100\xe5a\xad\xa4\x87 i\x0f\xab%>\xac\x94\xfa\xb0N\xf2C\xdc\xf4\x87\xc0 \x10\xb1S \x02&ADO\x83\x88\x96\x08\x117\x15\"Z2\x84\x7f:\xc4\n \x11\xd1S\"\xf0\xa0\xf5L\x8a\x88\x9e\x16\x11(1\xc2\xc9luV4\x1c\xd3#VM\x90\xf0Q\x7fVI\x92\x88\x90&\xb1B\xa2D\xfcT\x89\xa0\xc9\x12^\x80~\xc7\x84 \xef\x94 \x07\xf0\xf1\xe2\xb4 \x97\xb6g\xc1\x91!\x93'\x96q\xdb/\x81\xc2e\xc0\x0b\x93(.H\xa3\xb0!P\x83\xa6Rx%S\xb8\xa7S\xf8$T8\xce\xc2\xb2\xa4\n\xdf\xb4\n[bE\xc0\xd4\x8a\x05\xc9\x15\x97\xa7W\xb80\xdb3\xc5\"R\x92\x85SOgwJ\xc4T\x8b\xc8\xc9\x16Q\xd3-b&\\8\xa7\\\xd8\x92.li\x17q\x12/\xa2\xa5^DN\xbeX\x96~\xe1\x9d\x80\xb10\x05cI\x12\x86\xed\x10t\xc0\xca\xbb\xa3\xe5}R1\x16&c,H\xc7\xb0\xb0 ^JF\xe4\xa4\x8cxi\x19\x11\x133B.7\xcf\xe4\x0c\xdf\xf4\x8c6AcHirvq!9x\xd74\xc5\xee\x8a\x13\xd2\x0b \xbb\x92\xee\x95K\xf7\xcaA\x8b5i\x90\x1c\n=\xa3\xf2\x025\xac\x04\xcd\xb4\x8c\xd6u>\xbc\xc4\xf9ZF\x01f\x05v\xb7\xcf:\x03\x06\xf8\x81\xd5t\xea\x03\xaa\x17Ja\xa8\x95\xb9\xc6\xe6\x0dA\xdd\x96\xbc\x87Tz\x92KN\xf5\x85v\xd7\xf0\xd3\x81V\x94\xd4\xf0-\xdb\xd7}-\x1f{ve\x0d\x17tV\xd1\x91r\xb2%\x9c\\5_\x95\xf6a\x7f\x18\xdd!\xcc{\xd9\x8c %\x9f_?{v%\xfe\xe3O\xd7_\xca\xff\xfd\xd2\xd8\x82\xdb\\\xbf\x7fh0\xc5\x16\xd4NE\x0bzGJ\x0e\xfc\x01\xef\x9f\x15\xcc\xd7\xe3\x95A\xad\xa9\x91p\xb2\xaf;`)4\x8d\xb5\xa5-o\x8b\xadQ\xa5\xdc\xd2\x8cmMw\x16\xcfef\"u\x12\x0d.\xbd]\xb0\x9b\xe9\x90n\x17\xecQ\xaaaj \x17-\x85;\x80{\x1cu\x01\xb7}\x8d\xb4\n\xac'\x16\xa8'>\xa4\xc7\xe4\xb2[\x04\xe8Y\x07\xce\x13\x00\xcc\xb3\x12\x94g\x15 \xcf\x1a0\x9e\x98 \x9e\xa0\x10\x9e\xb8\x00\x9e`\xf0\x9d\xc8\xe0\x9dH\xd0\x9d\x98\xc0\x9dH\xb0\x1d_\xd0Nt\xc8Nd\xc0\x8e\xc1\xa1g\x93\x85\x91\xc1:A\xa0:VW\x82\xa3\xd2\xe0\xe86X\x11\xa2\xe3\xaa\xc6\xac\x02\xcf \x0e\xce\x89\x0e\xcd\x89\x0d\xcc \x08\xcb\xf1\x80\x898Ar<\x019\xb6 \xf5R0\x8e\xad\xddT\xc3t\x8e\x16\x83oR\x0dS\xb8\x04n\xe3\x07\xb6I5L\x9d\x006Q\xe05\xd6>\xa6\x1a\xa6>\xa0\x9ax\x90\x1aG@M\xaaaz9\x8cf \x88\xc6\x13B\xb3\x08@\xe3\x0f\x9fI5L\xc7\x14\x0f0\x13\x15.\x13\x0b,\x13\x0d*\x13jqy\xc2d\xfc@2k\xdc.8\xe3\xdc\x9fs\xea\xf3\x87\x8d\xcc\xef7\xe9Z\x16{\xdcb\x87\xf7\x8cb\xfd\x99&\x8eE\xee\xe7\xd3\x95\x8f\x13\xd1\x19K\x9fL\x05\xca\x90\x9e\xc0\x8b\xb7?<\x7f\xf5\xf2\xf9\xbb\xf7\x9b\xef~x\xf5z\xa6X\xd9\xc4\x0b/\xbe\xfd\xe1\xe5\xbf\xbb=\xfa\xee\x7f}?,r6\xf1\xe4\xf3\x89G\x9b\xbag^\xbdvqD4!\xc1\xef\xd8\x96v\xea\xe0I\x1fyS\x0cM\xf0\xbf)\x1e\xf5\xfea\x14O\x84\xb77/\x9b\x88\xe2\xc4\x16\x9dc\xf9W\xf0\x9f\xb4b\nN!\xa5\x81\xf8\xa0,e7\xe9\xfd1\xcf\xc8\x88E\xf2\xaf\x9d\x080\xef\x14y\x93\xe1\x1b\xf1\xa5\xb6RHV\xc8z\xaa\xf7$\xe7\xb5\xe8\x89\xf1\xdb\xf2\x84\x7fP\xee\xd0L\x02\xba8\xd6R$\n\xe9\xe5\xca\x031\xdf\xa3.\x8b?\x06\xee1\x01\x8d\xd5hJ`\xb4\xd1c\xa1\x93:\xf7\xf8\xb9\xb1\xcb\xcf\x17\xf5\x19\xabP\xd6\xc6/\xe7G\x89\xc0\xe3\xb4\x18\x95\xe4\xb2\xad\xeb^\xc4\\\xca\xd86`\x8e\xff\xe4\x9dx\xb9):\xae^\x1b\xf3\xa4\xbb\xce\xf5\xdf<\xaf`\xfd\xbd\xf9\x0e\xd6\xa7\x7f;\x90\xfa\xf0w\x15%\x9f\xbc\x8b\xb5\xb9\x85\x15y\xfc\xd8\xab#7\xbe\x85\xf5w\xba\x8b\xbf\xbc\xd2\x84\x0b\xee_M7\xaf\x0e(\xa1\x16\x0c\x94P\x0b \xb5\x90P\x0b=J\xa8\x85\x84Z0RB-\x0c)\xa1\x16\x12j!\xa1\x16\x12j!\xa1\x16\x12j!\xa1\x16\x12j\x01\xc9\x81\xeb \xb5\x90P\x0bS?%\xd4\xc2\x88\x12ja@ \xb5`\xa4\x84ZH\xa8\x85\x84ZpZ\\\xab\xa0\x16\xe6n^=\x90\xfa\xd0i\xa4gR\x8a\xdf\x9a\xfb\x19\x1f\xf0\x9f\x9c\xe1\xd5dW@K\x99\x1f\x0br \x1d\xe8\x83\xda\xc1\xdd\x137/\xbf\x92\x1e\xe5\xce\x9f\x8c\x917p\xbf\xc6\xcc!Hw>\xed+\xb2\xa5M\xa4N\x821\xe8vs*H\xf9\xf4ob\xd8s!\xbb\xe7\xf8\xf4MAJ\x95\xd5.\xc6\xa7\xab\x91\x14\x8f\xa0\x9a\x03\xf5\x19\x10\xcd\x8a\xa3?\xe7\xb5\xe4\xa91\xb2\xd7iU\xfd\xfcK\x8c\xef\xf1\xe5\x01\xb1\xb9k\xc1\xac\x0e\x16{\x11\xfd\xfe\xba\xc4\x1a,jev\xaf\x06\x03\xc2\x95\x0c\x11\xbf\xc8\x99\xb9'\xb5\x9e2K*\xb7\xd1\x83\xf2\x7f\x89\xc5\xde\x99=\xa7|n|\xebiw)\xbd\xbdyi\x92()\xa5\xbbG)8j\xa0\x14\x1cM\xc1\xd1\x14\x1c\xedQ\n\x8e\xa6\xe0\xa8\x91RptH)8\x9a\x82\xa3)8\x9a\x82\xa3)8\x9a\x82\xa3)8\x9a\x82\xa3H\x0e\\O\xc1\xd1\x14\x1c\x9d\xfa)\x05GG\x94\x82\xa3\x03J\xc1Q#\xa5\xe0h\n\x8e\xa6\xe0\xa8\xd3\xe2\xfa\xe8\xc1Q\xf1\xff;\x8d\xf4LJ\xb9\x0dU\x10\xa8\xeb\xd3\xd5\xe1A\x19|\xd2\xd1Rq\x18\xac\x1c\x18\x95!\xa8\xdf\x01LEE\x95\xc3EFE\xa7\xa3\xa1/\xf1\xa9^4\x14\xd7\x9e\xfc{/\x08j\x0c|v\x1aP?\xff\xc6\x02\x9f-\xff\x86\xd4\x1b\x84\\\x0e\xb9\x9dy}\x9a\xed\x17X\xfb\x06J{\x98\x8f\x1bY\xdd;\xae\xae\x14\x80w\x94wv\x84\x8e\x86\xaaq\xaa\x80\x8d\xfcI\x0bC\xe9\xc4\xba}\xec>6\x1b\x0dR>\xcb\xc6i\xc2v\xfc\x9eTT:[O\xa7\x02\xedO\xe9 \"\x05\xfc\x9e\x95OT\xa3\xbf\x979\xdf\xa4\xdc\xd6\xb0=\xcb\xc1\xce|D*\x85\xe2\xac\x82\xb6\xa6\xbeR\x1d;*\xa1\x9e\xbd\xbc\x8d/\xc3\x1b\xe9n$E-\xa3\x12\xb3#\xe1\x0c\xb6\x94\xd3\x8c\xc3\xfd\x81J\x0f!i\x87\xa3\x87\x99\x91R\xd5\x86\x07\x02\xfb\xfc\x8e\x96-3\xa5s\x7f\xee\x0b\xba\x83\xaa\xb8<\xaaV\xbc\x99\x02q\xbc\xddRZ\xcap\x85\xd2^u\x07\xae \xe7z\x8e\xe6>\xa1b\x07M\xd8\xa6\x1dA^\x03;\xf3'l\xf7dK\xb8\xcc#/{\\\xc3\xab^*\xf87\x1d\xcb\x9f\xfbLEIv\xe8\x94io\xbe\"\xbbH\x1f\xf2\xc9\x1b\x1bx~\xf1\xea\xd7\xaeM1\x8e'\xa2\xbd\x00\xfb\xe4\x95P\x0d2\xc2\x85\xb8\x97\x9c\xc0 \x84bN\x8d\xf1\x0599\xdb\xe6\xc9k\xc3\x93P\xb0}\x9e\xcd\xb1\xae\x99\xe5\x8a\x1e\xd9]\xf7\xe2\x81w\xaf\xfe}\xd6C!\xb5\xa5\xbcVZ\xb6\xf2\xa2KG\xf5U\x13\x8ci\xf61?T\xec~B\x88\xcd\x83C\xc0w\x1e\xa6A\"0\x9c\x03cq~M\xc2\xe61\xa1F4k\x8f\xca=}\xa2\x95\xf8\xb4 >\xd2\xd2\x0f\xca\xa0\xdc\n[]\xce\x93bXM'\xd7f^\xee\xd8\x85<\xe19/\xa8e\xadI\xaf\\\xe7\xee\x91&<\xd0\x08\xb0r\xc7TPI\xdd{\xb1\x05V>\xc9\x0ed>,]\x9f\xb3\x03\xa2\xbf\xf69W55P\x12H\x7f>\xe1\xac\xaa!\x93\xd1hr\xe6\xecHx\x9e\xc9\xf8\xa8\xfe0g\x13\xad\xeb\x93`\x83E'65'\xdc\xba\x8d-\xd7\xf8\xd8OJp\xc4Q8\xce\x0dxI\x04X\x0bM\x11\x0fO\xb1\x06\xa2\" \xa6b-TE\x10\\\xc5j\xc8\x8a\x95\xb0\x15\xeb\xa0+\xe2\xe2+\x02#,bc,\x02\xa2,\xa2\xe3,\xa2!-\xe2b-\xa2\xa1-\xfc\xf1\x16+ .\xa2c.\x16\xa1.\xa2\xe3.\x02!/\x1c\xb0\x17\x1e\x8a\x86#\xfebU\x04\x86\x8f\xfa\xb3\n\n#\x02\x0ec\x05$F|,FP4\x86\x17b\xc0\x11\x91\xe1\x8d\xc9p\x88n.\xc6e\xb8\xb4=\x1b} \x89\xceX\xc6m?\x84\x86\xcb\x80\x17\xa24.\xc0i\xd8B\\A\xb1\x1a^h\x0dw\xbc\x86\x0fb\xc3q\x16\x96\xa16|q\x1b6\xe4F@\xec\xc6\x02\xf4\xc6\xe5\xf8\x0d\x17f{b8\"\xa18\x9cz:\xbbS\"b9\"\xa39\xa2\xe29b\":\x9c1\x1d6T\x87\x0d\xd7\x11\x07\xd9\x11\x0d\xdb\x11\x19\xdd\xb1\x0c\xdf\xe1\x8d\xf0X\x88\xf1X\x82\xf2\xb0\x1d\x82\x0e\xc1x\xf7p\xbc\x0f\xd6c!\xdac\x01\xde\xc3\xc2\x82x\x98\x8f\xc8\xa8\x8fx\xb8\x8f\x88\xc8\x8f\x90\xcb\xcd\x13\xfd\xe1\x8b\xffh\x11 -\xd9\xedU\x89\xaa\xe8`\x1a|\xd2\x81\xbbX\x8a\x94\x0e,\xc9\xe2\xdfH\xe9\xc0\x06r dq\x870\x96\xa3o\xc9\xbe'ZZ%\x80\x15+|\x15?x\x15,t\xb5N\xe0*@\xd8j\xa5\xa0\xd5*!\xab5\x02V1\xc3UA\x83UqCU\xc1\x02U\x91\xc3T\x91\x82T1CT\x91\x02T\xbe\xe1\xa9\xe8\xc1\xa9\xc8\xa1)\x83\xeaj\x93\x85\x91\xc3RA\x82R\xd6\x90\x94\xa3\xd2\xe0\x18\x8eZ1\x18\xe5\xaa\xc6\xac\x12\x88\n\x1e\x86\x8a\x1e\x84\x8a\x1d\x82\n\x18\x80\xf2\x08\x888\x05\x9f\x8a\x17\xf8\x17\xf5\\/\x99\xb6\xc8k\xe9\xa3\xc4\xb6\xb4#\xa6\xc6T-\x99\xfb\xa2\x8f\xe6\x9e\x15\xfb\xfbwy\x99\xd1\xaf\x00{\xf6\xa4\xde~\x80\xcf\xae\xff\xf4\x85\x1eg/\x0d\xb7\xffu\xf5\xc4o,\x13\xd78\x15C\xe2\xbf\x80\xe8\xcc|J\xae\xb3\x93E%\x7f\x0d\x92\xcf\x15\x1b&\xdfS\xec \xf0}\xed\xe49\xcfg\xe45\x1d\xcd\xc4j)\xebs=\xcc\xe2\xb5\xf6\xda\xd5y\xd3[\xe5\x9d\x9b\xb1\x89\xdeZ\xe8\x03\xac\xc7]\x993{\xcd\xdb\xcc\xf8x\xaf\xa3\x83\xf5(\x9d\xeb\xc3\xbd\x8e^V\x95\x99K\xf3j\xdc3\x83\xb7\xce\xce\x0e)\xb5\xfa{\xde'R=\x90\x16\x86\x0f\xd8.\x0f\xb7\xf0,\xc5\xb5S\\{H.\x92\x93\xa7\xb8v\x8ak\xa7\xb8v\x8akw(\xc5\xb5S\\;\xc5\xb5S\\;\xc5\xb5S\\;\xc5\xb5%\xa5\xb8v\x8ak\xa7\xb8\xb6\x1b\xd7S\\;\xc5\xb5\xa7~Jq\xed\x11\xa5\xb8\xf6\x80R\\\xdbH)\xae\x9d\xe2\xda)\xae\xed\xb4\xb8V\x89k\xcf\x95\xb9V\x81\xaar\xa6\xda\xf5\xa0\x92f\xe7\x0d\x0ck\xa1\x8cj\xca]\x93\xd6:7\x04\xf6\xc6\x81\xc0N\xa4\x1b\xbe\xa5\xe4N,\x18\xe9DA\x8f\x81XS\xbd\x16v\x94\xabj\x9d\xe2T\xf3\x08\xa0\x83*\xbe\xfd\xb3\n\xebkj\xabo\xefHQ\x07,\xbf=y+q[\xe3Rs\x03\xcb\\>\xfd\x9b\x14\x7fX\x99t\xee\xa2\xe2\x8e\xb1\xff\xa3j\xeb\xa5n\xea\x9dh\xa9_\xb0\xbb\xe1\xb9\xfc\nn]\xb9W\xa5{\xad]\xe9R\x1a\xf0\xea\\\x0b\x8b\xf7\x03\xadJZ4\xd1\xc1\x92>\xf0~\xf06\xafA\xd6 \x95\xa5\x8fesR\xe7\xe8:uj\xce*!\x06x\xaba\xa8\xb2\xab\xfd\x16~g\x1b\xce\xdb\x9b\x97XR\x15M\x7f\xed\x16*\xe8\x9ed\x8fj\xb0\x9d\x83Z\x86M\xaaS&\x16h[E\x17Jv\x8f\x83\x7f\xf3\xe2\xa5\x94}9\xafA\xc8\xc2\x8a\x9e\n\x92I\x07S\xdb\xc8\xa7\xd2\x83\xf5\xd5\xd3\xa7\xfb\x9c\x1f\xce\xb7r\xe7\xaa \xcdo\xb3'{\xf6\xf4\xb6`\xb7O?\xcf\xfe\xc7\xff\xf8\x8c|\xfe9\xfd\x97\xdd\xbfd\xd9\x7f\xffr\xf7\xcf\x9f\xdf~\xf9\xf9\x7f\xcf\xc8\xbf\xfc\x89\x90\xff\xfeeF\x9f=\xfb\xec\x9f?\xfb\xec\xd9S\xb9\xdd\xc5\xabO3V\xd1\xa7X\xdf\xf4\xe9\xdd\xb3\xa7rA\xa24\xf8o\xdf~\xf9'\xadx\xf7@\x1cf\xbe\xa8'\x7fc`\x8e\xa9\xed\xb1(\xae\xe9\xe0\xb8S\x18\x05\x0b\xa6\xa6%\xbb\xdfMJ\x00\xf3\x94\xf9\xc4\xe2'&\xdd\xf0\xc1nL^\xff-\x05\xdaS\xa0}H)\xd0\x9e\x02\xed)\xd0\xde\xa3\x14hO\x81v#\xa5@\xfb\x90R\xa0=\x05\xdaS\xa0=\x05\xdaS\xa0=\x05\xdaS\xa0=\x05\xda\x91\x1c\xb8\x9e\x02\xed)\xd0>\xf5S\n\xb4\x8f(\x05\xda\x07\x94\x02\xedFJ\x81\xf6\x14hO\x81v\xa7\xc5\xf5\xd1\x03\xed\x9d\xc8n\xa7\xad\xb9@\xfb(\\\xda\xde\x1e,\xa3\xa6\xcd-\x95b]\x88Y\xab\xe8\xcfgZ\xf7]\xff\xf2t\xcbk\x1dmR\xcd\x9d\xcb-\xad\xd4\"\x90\x81\xdda\x88X:\xc3Y\xd5\xf3\x08E\xb8\xb8\x1a\xc9t\xbb\xa79\xa6\x9e\xb1\xe3\x89\x95\xb4\xe4\xf27\xfc\x88\xce\xbb\x1fL\xf5\xf3\xf2Q\xbf\xcf\xc7q\x11S\x1c\x84\x1b\xe2\x1e\x13}\x9es\x08D\x89c\x84\x8a[\x84\x8fS,\x8eK\xc4\x89C,\x88;D\x8a3D\x89+\xc4\x88#\x84\x8c\x1b\\\x14'\x08\x1b\x17X\x1c\x07\x08\xec\xf7\x0f\xe4\xe7\x0f\xe9\xd7\x0f\xe4\xc7\xb7\xf9\xed\x83\xfb\xe9\x03\xfb\xe5\x0d\x1a\xc3P6\x04\xf6\xbb/\xf2\xb3\x8f\xfc\xea\x13\x87\xd2\x84\xdf<\xa2\x9f|\xea\x18\x8c\xe2\x07\xbf\xd8\xef\x1d\xdc\xcf\x1d\xda\xaf}\x81\x1f{\xc6\xb3j\xf4S[\xfc\xd2C\x7f\x8e\xab\xdfy\xf8\xde\xdf\xc7\x83[\xe2G\xb6\x8fn\xdeO<5\x1c\x8b\x1f\xd8\xd9\xef\xdb\xb5\x13/\xf2\xeb\xce\xf8q\xa7\xfc\xb6\xd3~Z\xc3\xa8\xdd\xfc\xb0\xf3~\xd7\xbe\x9fu\xb1_\xd5\xeaG\xf5\xf5\x9b\x8e|\x90\xf3~\xd1 ~\xd0\xd17;+!\xa0_3\xa8\x1f3\xa0\xdf2\x9c\x9fr\xc2/\xd9\xf7\x94\xf4\xfd\x8e!\xfc\x8c\x81\xfc\x8aA\xfd\x88.~C\x8b\x9f\xd0\xc9/h\xf7\x03\x0e\xdc_\xc3\xaf\xb8\xba^\xe6\xfczN~<\xab\xdf\xae\xd3\xd1p~\xb9\xa0~\xb8P~\xb7`~\xb6\xa5\x93i\xf1\xa3\xcd\xfb\xcdP\x04\xef\xabSv\xbd'\x9c\xde\x93\xc7\xeb\xea\\\xf2\xfcH\xaf_wq\xbe\x8e\x0e\x9b\x116\xd8\xa8\x18\x0fq\xc0|\x02\xfdk\xc6\xfc\x1a\x90\xbe\xc6\xaf\x18P\xbd\xdc\x88\xe55 x\x0d\xc3E\x9aF\xeb\xf2I\x8c\xee\x84q\x80d\x07\xb2D\xf1^!\x85\xf2a!\x85\xf7d!-\xf6g!\xc5\xf1j!-\xf0m!E\xf2p!E\xf1s!\xc5\xf0v\xa9\x96\x03\xfa\xbc\x90.\xf2|\xe9&B\xfa\xbf\x90\x16{\xc1\x9a.\x85\xf4\x85!\x05\xf2\x88!\x85\xf4\x8b!\x05\xf2\x8e!\xd9|dH\xc1=eH\x81\xfdeH\x06\xfd`\xa2\x0ehX\xdf\x19\xd2\"\x0f\x1a\xd2\x04>u\xf6\xc0\x9c\xc5\xa2F\xf4\xac\x19>0:\xae\xa3x\xd9\x90.\xf6\xb5!\x05\xf7\xb8!\x85\xf6\xbb!]\xe0}C\xb2\xa2\x1bg\x10\xa3N8Q3\xca\xca\xd577\xd7\xc6\x08\xe8p\x89\xb7\x0e\xc9\x95\x1b.\x08\xcf\xf9\x81;\xa19\x9d}yHc\xe4\xc7E~=$+Js\x1e\x9biCdNr\xc9\xcd\xeb\x87\xe4\x82\xb94!-\x17\xfb\x01\x91\xac\xde@$_\x9f \xd2\x04:\xd1\x057\x19\xc4K\x884\xd1\x8b\xd1J\x0b\xe87D\n\xea=D\n\xe8CD\n\xe7ID\x9a\xc59\x9a\xf0W&Lc\x08\x0f#R ?#RPo#\x92\x8b\xcf\x11\xc9 \xa1\xe8\xe4\x7f\xec=jE#\x1a\xa1x\xe6\xaf\xbb\xba\xb2\xecxC'\xef\xa4z\xd4\xe6\xa3D\x1a\x0d#\x9c\xbf\x12)\xa8\xd7\x12)\x94\xef\x12)\x98\x07\x13\xe9\xb2%\xe0\x84\nt\xc1\x02\xe2\xe1Q?\x1eO\x07V>^\xd3\x13\xcb\x0e\xf5\xb5\xaa\xf7r\xfdZ\xfc\xf3M\xb9c\x9e\x0e\xce\xc6\xd5f\xf7r\x0e\x8c\x85\xf6M\xac\xd1\x83\xde;\xa8\xe8\x8eV\xb4\xcc(NR^\xc3\x89T<\xcf\x84\xcc\x02\x9e\x1fi\xc7 PsR\xf1\x8d\xf8\xa3\xc3\xc7\xb5\x9d\xb4%\x9c>\x11\xefLul`\xc5\xb4\x1f\xd1\x08E\xf9\xdf\x84\xab\xd5\xa6\xffR\xa10\x01*\xbd6y\xf6\xa1\x1e\xa8 ov\x83\xb6\xb4\xfdp\xe6\xe7\x8a^\xe1&\x13\xd3\x80\xab_X\xbf\xd2\xd4\x85s\xc9\xf3\x02-\x1a\xf1~\xbfU\xe9\x9an\xfe\xb2U\xeb\xc4\x81\x1fs\xb8N\xddLo\xc4y \xb7\x94\xdfSZ\xaan\xaaAv_|S\x02\xab\xb6\x82\x17\xac\x92\x0e\xecRj\x05\xf4@\xeeraHK\xdf\xc6\x91\xf2\xab\xf6\x13\xe8c\xec\xb5rKa_Q\xc2\xb5M.\xb7\xf2A\x9e\x18M1\x90\xdb\x82e\x1f\x06\xa3\x17\xa4wJ\x03=-Y\xf9\xe4?i\xc5\xda\xc7\x94\xabb#G\xe1\xc0)\x13\xf8\x13,\xab\xa6\xf7\x0d\xcdF\x8d\x8d\xc5?\x96\xe7\xe3-\xad\xa4\x9b)/\x95\x0b\xe2\x9eU\xdb\xfa\xaa?\xc3\x07v\x0fG\xa1w\x8b\xc1\xd6R\xbe\xb6k\xee\x131 t\xfb\xc9`\xad \xbd\x00\x97\xa3\xf8\x1d>\xedu\xe7\xebg\x7f\xc0\xaaC\xbb\xbc\x14\xa2up\x85\no\xdeE\x1e\xdf\x1fXM\xf1\xbf\xf5\xca\x1d\xcdN#>:K|\x82\xe1\x9bUv\xed\xd4'\x07\xee\x02\xf9\x03.\xef\x01~Y\xb2\xb7\xcf\x18\xb1\x9e\xab;R\xa0\x83\\\xffK\xf0\xe3\xd3\xa9\xcf\x0d\xa6r\xb2W\xff\xd4\xec\x87\xff\x80\x9f\x0e\xb4\xec\xcc\xb0\xdceW\x0dD\xba\xa6\x1c8sl\xf6k\xd4Zf>\x87\xfa1+\xa9i\xc0r\xed\x88\x9dL`\x9f\xdf\xd1\xb2+\xb3\xa5;;\xcb\xce\x15\x9ch\x85\xabche\x7f\xff\xc3\xfb\xd7\xff?\xc9\xab\xc9\x0e\x1e\xc9#l\xf3;Z\xed)\xd4\xf9\xbe\xccwyF\xa4\x17Q\x16G\x1b\xf9g\xefIQ<\xc9\x9a\xad\xdf\x91\x99\xb7tOJ \xfc\x1a~\x1a<\xc3v\xea\x11\x9cl\xf1\xc9\xa1\xe3\xee_\xffu\xb2\x8b\xd7\xf0\xee|:\x89\x1d0\xc3\xe5g\x9f\x0d&\xbaa\xef\xd7\xf0e\xdbB#\xc7`\xcfh\x0dl\xb7+\xf2R\x1e%\xfc\xebg\x7fB\xd7g\xc6\xc4&\xbf\x15\xd6\x15+\xc5\xcf\xfd\x86\xe5\xb3_|\x86\xcf*\xf7x\x8d\xec\xaf\xc5\x8f\xe2\xf4y\xd4\xa5\xb3\xf2;\x9c\xd6k\xf8\x94\x7f\xfd\xc5\xb3+\xf8\xe2\xf3+\xa0<\x1bzx\xff('I\xb4\xab\xb7\xbc\xac\xbc\x86{\xa3\xe1\xb0X\x08\x9f>\xfb\xec\n\x9e}\xf9\x1f\x13\xef?\xb3\xbf\xff\xe5\x15|\xfe\xd9\xd4\xfb\x9f[\xdf\xff\xfc\xb3+\xf8|\xf2\xfb_\xd8\xdf\xff\xf2\n\xbe\x98\xfc\xfe\x9f\xac\xef\x0b\xd6\x7fa\xfe\xfe\x1f\xff\xc8\xbf\xfe\xe2\x9f\xff\xf8G{\x1b_^\xc1\x9f>\xfb\x8f\xa6 \\P\x19\x13\xe7|\xb9\xc7\x95E\xb7c\xe1x\xcbXAI9%\x01\x07g\xb8\xb9U\xd4\xb5TKJ\xf7\xce\xcbm\x9e\x11Nk\xb8?P\xe5 \xcf\xebqcJ \x89\x03\x08w\xdb#\xe5\xf3B\x1es9<\xc4\xfc\xf0\x88Uu\xcf\x1c\x84\xbbJ\x1bQ'-N\x81\xfa[OU\xeb\x9d\xc1\xfdiT,\xba\x86O\xdf\xcf6\x81l\x90~\x02<}\xb5Kgj:\xda\xd3Qr\xbf\xe6\xd59\xe3&\xef\xf5\x96p\x02{&,\x9d\xbc\xe4\xaci\x80\xa8o\xea#\xfb\xf6Q>\xfe\xf0\x14\xb5xUY\x12\xe7bJ\xc3\x97\xe9)/q\xf4\xb2C\xba\xcc\x9b\xa7\xc6\x7f\xb9\xf64\xdbC\xd9\xb5Z0ka\xff\xb0\xd1\xb5P\x0ef\xfb\x07i\x82!H\xa1m!$\xb3n\x854\xdb\x9d9=\x0b\xc9\x0e\xcc\x08f)!\xc5\xb1\x97\x90\xc6v\x83\xd9vRO;O\xe4\x7f\x99\xf8\xb2\xd8\x9aB\ncS!]bY!9\xd8WH\x93r\x02\xc9i5\x9a\xaf\xee\xb4\xaf\xc4\x80\xd6\x17\xd2\x12\x1b\x0c\xe9\x12K\x0c)\xbc=\x86\xe4b\x95\xa9\x1e\xb8\xcc\xd5%\x92#\x86\xb5\x86t\xb9\xcdf\xe9\xe1e\x96\x9b\xa5\xf1\x0b\xed7\xa4\x0b\xad8\xa4\x08\xb6\x1cR$\x8b\x0e)\xb8]\x87\x14\xcd\xbaC\x8ab\xe3!]j\xe9\x0dZYh\xef\x0dZYh\xf5\x0dZYh\xfb\x0dZYh\x01v[Yl\x07\"\xe12\x9c\xb3\x06\x91\xa6lB$\xbb\xcc5\x7f\xc7\xc3>\x9cjs\xdeLDr3\x16\x91\x9cN\x1f\xb3\xa6`6\x1f\x91\"\x19\x91H\x17\x9b\x92H\xf3\xba\xe5\xc5f%\x92\x8fq\x89\x85\xc7\xafoIM\xaf\xb1&\xbc6\xden\xc8\x9e\xbe\xc5\xea\x0e\x9e\x06\xdb\x07\xfa\xe8aF\xce\xa5\x8e\x0e8\xf4\x81>\"g0\x02^Q~\xaeJ \xdf\x04\xec\xad*$^\xd2\x07\xbe\x11\x0fKUz\x9f\xf7w\x93\x1c&\xde\xf8\xa0\xae\x188\x91=\x85#\x13\x16\x8cD6J\xd8\xe35\xfc\xa0Ob\xb6\x13\xc2_\x1c\xf7\xac\x12\x9d\xe85\xd7B\xaa\xeb\xee\xb6\xc0\x17<\xf80\xba\xd6~n\xc7\xab\xeeHf\x94\xe7#\xad\xf2L\xffM.\x17\xa1\x06\xdcR\x85\\\x14J\x8cb\xdd\xb9l\xc0\x9c\xc3`\x96l\xad\xa0u\xdd2\x01\xd5\xcfs-\x98\xf5\x81\xceqD\x1b(\xbd&\x87,)\xf2c\x1e\x8d#\xb2\xf1\xc6 c\x9c\x14\xca\"\x10}\xd58a4\xad\xba\xeb\x86c9\xfcs\x81\xab`\x1c\xe1+\xe8\x8e+\xach\xae\xae\x9c\xd0\xb8\x17\x89\x19\xc6\xa5\x88\x0d\x0b~\xdc>\x02%\xd9\x01\xc8\xe9\xd4q\xa5 \xa1\xbc\x91\xbd\xf2\xf6\x02\x0e]emS\xad\x0e*K\xa1\x80\xf8\x0f-\xda\x1b\xfc\xbc\x1e\x9dxP-\xd5\xbc\xcc\x8a\xf3v\xe8\x87\xc6\x96\x9b\x94\x83\x01\x07\xa5s\xa5\x83\x04\x16\xe7\xdd\x89\xec\xf3R\x19\xc2%\xfc\xf8fh\xf5\x0f\xba*\x15\xdb\x8a\xd6\xca*\x95\xcb\xb2]\xc7b\xa9^\xabU\x98\xefKy\x87\x87^\xb9\xfdfq\xd4-s+\xa1>\xd5\x86\xd8\x93\x1fcU3C\xa6\xe6\xed\xea!\x15\x9dXA\xa2]ZJ@\x83\xb4\xecG)\xfd\xc6[\x1e~g\xe8TG\xe2i\x84\xc2;v\xd4\x82\xd8\x04=\xf8\x861\xa8\xd9\x91n\x9aJ@\x13\xc8\x97\x8e@\xefN]\x1f\xfc\xa2\x11i\xea\xa0\xedt\xa7\xfbz\xae\xb7R\x03\xe7\x10J\xf2\xdb\x9b\x97\xba\x1e\x90\xee|\x8d\xa0*-P\x9a\xc6\xda\xef_\xc3\xeb\x07\x9c:\xdbQ\xb4\xc8y\xa8\x8f\x02\x0f\xb138\x90\xc6\x9c\xe8\xb6\xab%Ns\xda\xc0\x89\xd45\xa6*t8v\x8d\xbf\xf7\x9a\xc0\xab\x8b\xe6\x0f\xa1\xe6\x85 \xd9\xe1.;\xcd\x9aS\xb39\xa7$f\x07\xfb\xbf\xeb\x0d\xa8\xb3\xb9\xfbk\xfd\x9e\xc8\x0dt%/\xbaQ\xa9 \xb5\xac\xfe\x84\xda\x88\xf4\xcc\xdc\xe7\xcd\xa5GS\xcb\xbf;\xe9\xb3\x0bN=\xd2\xac\xb8\xfb\x03\xad0\xbdG7\x95\xb1\n\x1f\x93;t\xb0D\xa5^+\x0f\xca\xee\xf0:c\xea\xefC\xf55\xc3F\xac\xe8\x89J\xf8\xf7\x0bR5\xfc\x9b\xdb\x8a\xaa)9\xf1\xa6]\xd8\xdd\x10z+\xbcdy\xe9\xb9\x05\xb6\xb4dG\xeb\xd2!G1\xa1\x96\xc7\xa6\xe6J\xf4J\xa9\x9b\xf2:'\xf6\x81\x96\nJ\x88\x9f\xd7\xc2F\x18\xc0\xa4T\x1f\xeb0\xf9\xfb\x1f\xde\xbf\xfeJ\x1a[\xf8\x93B\x19\xe62\xc5\xe0M\xa95\xec&\xff\xa2\x87\x06Cdh\xd3V\x9d\xefK\xc2\xcf\x15\xad\x9bZa\xe2T\xde\xb3=\x93\xf0\xabATeO\x8e\xc7\x86\xbd/HA\xca\x8cV\xef\xd9KVf\xb4\xe4\x12\xd0\x7f\xc3X\xf1m^~\xf0d\xfc\xadjlsb\xac\xd8\xe4\x86\x00\xa0\xeb\xf6\xcd\x8aK\xdb\x98:\xf9\xe6\x07\xdc\x99S\xa1\x04\x16\x14\n\xf1W\xed\xe7\xd6\x7f\xfd\xddh\xc8 \xba\x8b\xb3\xad\xdf\xcc:\xedC\x91\xff|\xce\xb79\x7f\x94\x0f\xaatL\xd9\xb6R\x05z\x8e5\x99\xfe%\xac\xd8^\xeb\x9c\xc11\xdfWR\xd9a\x9d\xef\xb49\x8d\xe7\xa2\x80\x8a\x94\xfbN\x07gz\x01'VK4a\xfb\xf4\xf3\xc1'\x95Z-:\x8a\"\x9e\xc0\x91<\xe4\xc7\xf3Qj\xc4%\x85\xac\x90O^\xa9\xb1\xab\x7f\x8a\x17;L\x9am\xa1\xf7\xc5\xb9\xb5\xfa\x9d\x1c|\xce\xca\xb74c\xd5\xb6^\xba:9\xdbt\xb9\x82+Mtp\xb5\x98\xdb\xdcFArr\x19\x8c\xce<\x98\xdc:HK[\x9d\xf7\xc5\x04\xdeRHq6\x16R\xc0\xed\x85\xe4\xb7\xc9\x90\xe2l5$\xef\x0dgR\x97\x86\xdb\xad\x93\x05W`pR\xee\x99f&\x9bf\xd1M\xdcr\xa4\xed\x9d\xf8`=\xb3\xc31\xc2\xff\xcdw\xdf\x99\x16R\xbdP#>\xeaql\xaa\xbe\xdc\x98hc\xaa\x1d\xf0\x97!0)G`\xfa\x9e\xb1Iy\x02\xd6\xbb\xc5\xecr\x05lR\x00l\xf2\x05,2\x06\x02|\xc1\xee\xfb\x8d\"s \xb2\xdc\x81\x18\xb2\x07\x16\xca\x1f\x88,\x83`\x99\x1c\x82I\xd3-\x82<\x02g\x99D\x8a\xec\xf5C\xce\xc5\x02\x13\xba\x7f\xfdM\xc5\x8e\xef\x0e\xa4\xa2K\xa5\x924\x19\xea\x0d;\x1bL\x908J\xc7\xc8,B\x9a\xd9\xabc\x13\xc9\xf2\xca\xfc\xbe]l4\x0d\xda a;\x0d\x9a\xbc\xc4\x84j\x16\xc8\xff\xc9\xf2R,\x90\xef\xd9\xbb{rJ\xab\xe3\x1flu\xc8'\xe5\xa4\x9b\xe7\xad\xc3\x11\xc7\x85t\xd1\x12\x92]\x11=\xd98y:\xd2\x9a\xfb5\xae\xb9\xb9\x854\xd0\x8b\xdel\x85f$\xce-\xa1`/\\Tc\x9dw\xa9\x87f\xa6\xe7\xdf\x9f\x8f\xa2\xc3K\x17~y>\xca\xae\x19\xf4\xfc\x0b;&zuC*r\\\xda5\x19\xb1\xb8\xc4\xfe\xe0\x13%\xc9f\xb6\x8cM\x97\x8eV\x8c,d)\xb28\x85\xc8\xf8%e\xc8\xe2\x15![X\x82,b\x01\xb2h\xe5\xc7b\x15\x1f\x0b]z\xec\xe2\xc2c\xe1\xcb\x8e]Tt,B\xc9\xb1\x80\x05\xc7B\x97\x1b\x0bXl\xcc\xa5\xd4X\x94Bc\x11\xca\x8cq\xb7\"c\x11J\x8c-.0f,/6s\xf8\xcd\x94\x16\xeb\x9d\x8b\xe1\x0b\x8b\xcd\x1d\xbb\xd1\x8a\x8a\x05))\x16\xa5\xa0X\x8crb\x17\x16\x13\xb3\x14\xcf\x9a,$\xe6PF\xccT\x86\xc8\xa7\x84\x98\xe9\xfd\xbf\x9b\x07\xbf\xb4x\x98\xdb\xe8\xed\x85\xc3\xe6\x86\xeaP4\xcc\xabd\xd8\xb0\xb0\xcb\xc5\xe5\xc2,\xc5\xc2\xe6J\x85\xcd\x17\n\x9b\xe0\x8a{\x910{\x89\xb0q\x81\xb0\x8b\xca\x839\x15\x07[R\x1a\xccX\x92\xcb^\x16,XQ0\xe3\xf7\x07+)p9\xb0\xe0\xc5\xc0\x02\x97\x02\x0b[\x08l\xa6\x0c\xd8\xb8x\xd2\xb8\x04X\xa8\x02`\x01\xcb\x7f\x05/\xfe\xe5Z\xfa\xcb\xa1\xf0\x97\xb2\x9b\xede\xbf\xd4\x83\x96\xa2_\x86\x92_\xa6\xaf\xba\xd6z\xb2\x95\xfbr.\xf6\xe5T\xeak\xd0\xf9\xb0e\xbe\x82\x17\xf9\nY\xe2+h\x81\xafK&\xdc\xa1\xb8\x97\xbd\xb4\xd7\xa0\xb0\x97\xd9\xf1\xb6\xd4\xe5\xc6\x98\x01F\x9a\x1cn\xc9\xe1\xd6Rr\xb8%\x87[r\xb8%\x87[\x8f\x92\xc3\x0d\x92\xc3-9\xdc\xbam&\x87[r\xb8%\x87[K\xc9\xe1f`Sr\xb8%\x87[r\xb8%\x87[r\xb8\xfd\xd2\x1dn\x0d\xd0\xfe\xf7\xaf\x04\x973\xa1\n~\x05'i\xed4B\x8f\x14\x9cV%\xe1\xf9\x9d<\xca\x1e\x9e\x9e\x18+\xd0Z\xab\xb0a\x8b\xdfNX\xd4\x17\xf8\xee6\xf2\xd9\xce\x08F\xc6\x87\xe5\xfb\x8b\xb1zf\x08a\x1c$,OW\x8dFq8^\xe8r\x8c\xe9t\\\xecv\x8c\xeax\x8c\xe8z\x8c\xe7|\x0c\xef~\x0c\xe0\x80\x8c\xe1\x82\xbc\xd0 \x19\xc5\x0d\x19\xd4\x11\x19\xde\x15\x19\xd4\x19\xe9\xe6\x8e\x8c\xe4\x90\x8c\xe2\x92tvJFqK^\xe0\x98LW\x8d:;)\x03\xb9)#9*\xe3\xb8*/vVZ\x1dv\xe9\xaa\xd1>9;0m\x03wpbz\xba1\xd3U\xa3\xe9\xaaQ\xa4`N\xcet\xd5\xe8\x8c\xbb3\xb4\xc33]5\xea\xe5\xfctw\x7f:9@=\\\xa0\xaeN\xd0t\xd5\xa8\x9bK4\x82S4\xac[4\xb0c\xf4\xd2%\xe0\xe0\x1cuq\x8f\xb6\x0e\xd2n\xe1\xce\xee\x01\xdb\xd3\xe4;\xb5Eu.9\x97B\xbf[-\x16\xa5\x89\xaa\xd7\xdcii\xc2Y8\xe5*4\x95\xf7\x84\xc5\x90\x0cs\xa9O\x08S\xee\x13|K~\n\x1a\x95\xfd\x04\xb7\xc1\x19\x0b M\x17O\x8fP\x06\x14\xbcK\x81\xda\x1c\xd7?\xe5\xfc\xf0M^pZ%\x17vra'\x17vra'\x17vra'\x17\xf6\x88\x0cJara'\x17vra\xbb:m\x93\x0b[Rra\x8f(\xb9\xb0\x93\x0b;\xb9\xb0\x93\x0b;\xb9\xb0G\x94\\\xd8\xc9\x85\x1d~ $\x17vraw\xdf\xfb\xd5\xba\xb0\xdf\x9d\x18\xbf\xa9\xf2l)\xf8\xbb>1\xbe9\x89\x06f\xd1\xdf\xea\xcf\xc8\xa6w(\xba\xd5a\xf6\x8afbW\xff\x01\x9e}v\xfd\xf9g_\x9c gG\xf5\xce\x94\x19k\xeeyoO\xf4/\xe1\xc2+K\xcf\x15^\x10H\xa0y\xb7\xe5,^\xedfe\xd7=9\xbd~ \x19\x7f.+\x08\xbf)\x17\xb2M\xd60v-\xfb\xec\xde\x9f\x1f\xce\xfc\xa2\x0e\xe5\xe5\x85\xfdy/\x96\xeb\xb7\xfaj\x83\x85}i\xaeFX+(\x92*\\G\xacp-\x97\x04^\xf9\x91\x96\xc5?\xd8\xb2\x88\x9f\xbb$W\xd7E\x15\xf8\xe5 \xbb\xc1+\x01\xc6+\xcbY_2.\x96\xc9y7/\x94\x89\xc7\xa7\xae7\x84K\x96H\xb7\x91\x10\xeb\xa3\xdb\x9e\xdb\xe2hf\xb53\xdf\xcd\xe4\x8a\x83\xad9c\xd9\x99\xfb\xce\xeaEU\xef\xa1wB\xdb/\xaat\x1c\x898\x9d?\xdeP\xf2\xd2g$\xb9\xbcA \xbf\xa3\xf5\xf5\xf3L\xfc\xef\x9f\xc9yO\xeb\x1bZ\xbd\x12\x8d,\xdck[\xc2\xc9Z\xd2;\xe4\xcdz\xd0J\xb2|\xab-\x15\x046\xc0\x9bW\xd2\xaf\x03\x92A\xc3>\xd4\x9b\x13\xadN\x94\x9f\xc7\xb6\x86\xee\xcd\xf8:h$;\xe4\xa2\xdb\xba\xdc\xac\xb0+\xc8^\x18L\xf5\x81\xdd\x0b{\"\xe7\x9f\x88?\xb7O\xc9\x00x\xf9\xa4\xfd\xc3^\xf6\xda\xd0\xf8\xf7\xe3\xc7j\xd8\xe6\x82w\xb7gy\x917\xcd+u\x1b \xd0\x9f\x15(\x80V o\xf3\x17\x12\xa3\x98\x0c\xcf\xcb\xd6D\x8f\x95\xb9J\xe4\n\x13o\xe7l{\x0d73\x9fU\x97H5\x9f65Ox{7\x17\xcf\x8fT\xca>\xe9q\x9c\xea?\xd9\x93\xbc\x04Vfx\"\xe9\xfe\x99\x1a\xaf\xe8./\n\xba\xbd\x12\x82\x91\x96[\x15\x08\x15\x87\x19F\x17\x9b\x8d\x83.\x94=\xe5\xcd;\xb0%y\xf18\xf4\xe6\xb6\x9d\xdapfX%\x93\xa6\xf3\xe0U\xe9\xf5\xd1\x97\x0c\xab1T\xf4\x9eT[\x8c\xbf\xb7\x0f\x0b\xa3\xda\xe4S\x96x\x9a\xbc\x96\xb6PN\xb7p\x97\x13(X\xf6\x01\xb6\xca\xd1!\xd6\xcf\xed\xa3dj\xcd\xc9\xf14\xb1\xa4\x0d\xfb\x14f\xf7*\xc8x|\xf6a#\xad\xb0Q2qK\x8a\x19\xdf\xb2\xec\x03\x1e\xff\xca\xdb\x85\x80\x0d\xb1\x11e\x7fe3W\xf0\xe2Q<\xa8\xbd4\xf0_\xea\x0f\xef\xf3\xa39\xe6>+\x1e\x04\xd1\xf2lP\x08\x91\x9e\xc0\x8bG\xfd\xa9\x99G&?.~\xfe\x9e\x89\xfe\xcd\xbc\xfd\xe7\x8a\x9d\xc7\\\x07).\xa4\x1f\xff+[/\xe6\x94\x89\x96\xfa\x0c\xee\x1a\xd6\xbc\x13\xcamy\x8dk=3\x881$\x9a\xcbX\xfe-\x95!\x87\xcej\xaa9\xa98\xee\xd2N\xa3\xa6\xc59\xa1\x8d\x83\xcb\xbc\xa9e#\x8f\xae\xd6\xa9\xa9\x06$U\xa6\x9e\xaetO\xe5\x86)\x18\x93\x08\x0c\xcep\xa4F\xce\xeb\xc1,\xec\x99]\xca\x0bj\x96p{k\xa1\xe2\xbb\xe8X\x8d\x92\xa7`\xe5\x9eV-w%pBF\xdc5R\xc0\x18A\xeb\x8c\xe1\xba\xfd\x10j\x80\x12?T2\x89O(\xf3B\x88\x97r4\xf3\xb8\x05\xa7\xda\xfek\x7f\x13\xfe\xd54\xb5\x8d*\xd5\xf7\nG\xd4`|\xc4\xd9%-\x8b\xeep\x07c\xd4\xcf\xbec\xc7\xb6c\x13\xb0\xca\x8a\x9e\xa8\x04z\xbf U\xc3\xd7I\xb8Y\x7f\xacr\xa1\x8c\x01g\x83\x1b2&|\xe8\xc9w\x9e|\xe7\xc9w\x9e|\xe7\xc3\x16\x92\xef<\xf9\xceM\x94|\xe7\xc9w\x9e|\xe7\xc9w\x9e|\xe7]JN\xa1\x0e\xfd\xf2\x9cB\xc9w\x9e|\xe7\x8a\x92\xef\x1c\x92\xef<\x89\xc9>%\xdf\xf9z\xbesV\x16\xc9M\x9e\xdc\xe4\xc9M\xae\xe9\x17\xeb&\x97R\xca\xd3/~ 2\xde\xd73=\xe5\x93\x9e\xf2F\xcf\xc9\xe4H\x1e\xe88\xbe\xe7h^\xe7H\xfe\xe6\x90\x9e\xe6I\x1f\xb3Y\xee\x06\xf3+_\xe2Q\xf6<\x8f,\xfe\xe3X\x9e\xe3\x99\x13\xc1\xec-\x9e\xf5\x13Oz\x88'}\xc3S^a\xbb?\xd8\xe6 \x0e\xe7\x03\xbe\xc8\xfb\xeb\x97\x94\x16\xc9\xd7;\xe5\xe5\x9d\xe9\x87\xcd4\x88\xe6\xd3\x8d\xe3\xcd\x9d\xf7\xe3Nzp\x1d\x14\xa6)o\x84\x8d\x81\x11<\xb5\x11}\xb4a\xbc\xb3s<\x89\xe8\x91\x8d\xe2\x8b\x9d\xf0\xc2\x8e\x1c\x0bf\x97B\x18\x90@J\x8f\xbe<=\x1a&\xd5\x88\x80\xbeR\x1f/\xa9\xd9?j\xd1\xaaMRh\xb17\xd4\xe6\x07]\xa8\xe1\x0fVO\x14\x7f\xe7\x84\xa7s\xd2\xc7\x19f(q|\x99C\x17\xd3\xac\xff2\x89\x99_\x8d\x98 \xe2q\x9cbXp/c\x0c\xff\xa2\xafgq\xd2Q\xf1\xe2\xf1\xcd\xab\x85`\xbe}\xd7\xd11\xf1\xde\xd4\xbb`\x04\xe89(\x8bs\xde5G\x07\x08X\x80yS\x8e\x10\xb0\xee\xb2h\x0e\x11\x88\xe6\x14\x81\x98\x8e\x11\x88\xe7\x1c\x81\xc0\x0e\x12\x98s\x92\xc0\xa4\x863z\xed\x12g \\\xe80\x81\xb9\xc3i>\x8c\xe6\x00\xbe\x8b\xe5@\x81\xf9\x8d\x0f\xb3\xb0;+\xe8n\x16r7\x0b\xb8\x9b\x83\xdb\xd9\x9d+\xe0\xe0`\x81\xa0N\x16\xb8\xd4\xd1\x02s\xa1T\xcb\x0cEq\xba\xc0\x8c\xe3\x05\xec}\xb2\xc9j\x88\xe9\x84\x81h\x8e\x18\xb0:c`\xce!\x03v\xc6\xd9\x1c3\xe0\xc8\xdc\x08\x0e\x1a\x88\xeb\xa4\x81`\x8e\x1ap\xe0QD\x87\x0d\xc4r\xda\xc0<|\xce\x88\n1[V0\x8d\x08\x999\xc4lh\x90\xe5(\xe19\x1c\xc8\xec\xab\xb6i\x0eg}A\x1c\x0b\x0c<\xad0\x98U\x87\x02:}\xc0\xd3\xf1\x03\xb3\xe08\x07\xebbJ\xe2-v\x04\x81\x833\x08\xdc\xfa\xe6\x89+\x88\xe2\x1c\x82y(\xdc,\x10.\xfc\x10\xe38\x8d`\x02\xfef\x05\xbf%1\xf7\x9b\x15sA\x1cN`abp\xc7\x13Dr>\xc1\x02\x07\x14\x92b'\x8e\x14-\x99\x06\x08$\x87\xd2\\\xf7!ao\xf0\xe6\x95|y\xd2{\x95\xf2P]\x9c])\x0f5\xe5\xa1Z\x9d_)\x0fU\x91\x83+,\xae3\xccz\x84\xa7<\xd4\x85\xee\xb1\x00\x0e\xb2KT\xaf\x88n\xb2\x94\x87:\xef0sq\x99Y\x9cf\x0eL\xb4\x99\x91Hn\xac\x8e\xe4<\x8b\xee>\x0b\xe9@s\xe1Ud'ZD7Z\xcaC\x05\xfb\xeb\xf6\x05\x10\xd6\xee\x8cfy\xfa\xdb\x9e\xf3*W`7\x9b\xbf\xa3-\xe5\xa1\xa6y\xfa\xc7\xf7\xe2\x9d\x8d\xdc\xe5\x17\xdd\xda\x94\x97\xf2Z\xb4B7U\xee\xd8\xb81\xe7\x1d\x8e\xb7\x9c\xdd\xd3|\x7fp\xbdvL\xf9x7\x15\xcdX\xb5\xfd\xa8!;\x137[\xb2\xaa\x07\x16\x05\x0d\xb4U=\xc1\x1f$\xebW\\\xf4\x08\xd0\xa7\xd1O\xf2KZ\x0e\xaa\xef\x03~\x1f\xbdhy\xad\xfc\xbf\xb7T\xec\xab\xbe\xe7W\x0ci\xca\x87 _\x95\x9a\xe35|\xc3*\xc8\xcb\x9a\x932\xa3x7\xfa\x1d+\xceG\n\xf5\xa9\xc89\x17\x0d\x9fX\x91g\x8fW\xf8\x9a:\x86'lnA\xea\xfd=-i%\xf7\xa12\x8d\xe4\x05\xed\x187\xd0N\xc0\xbc\xfc@\xb7\xf2\xfa2\x93\xc3(;\x1f\xcf\x85\xbc\xf5o\x1d\xb6\xeb\xaf)\xce\xd7\xb4\xba\x13\n\x87\xf4y\x94\xe4T\x1f\x18\xd7='\x99\xea\x1c\xab\x14\xf7yE\xc4\x11?\xc5\x94[RK5|\xc4V\xef\x19\x98\xfaB;1\x1d\xc6\xe9\xa6\xb4\"\xd0\xe18\x90\xd6#+\xa7\xe6|\x12\x16\xa3k>\xdc\xf7\x8c\xab #\x06\x81n\x19?\xc8`\x89\x90HR\x87{S\xee\x98Tkz\x7f}+e\x05\xfat\xfaC\xe14;\x94y&CL\xb7Bg9\x15$C\xf5\xf4\x95X\xdaM{\xf2_\xaa\x9d]\xc5\x8erdbHOZ\xc1\xdco\xfa\xc8\xb6\xe7\x82^\xc1=\x85\xac\x12\x87\x03\xd4\xf4D\xc4\xea\x94\xab\xa7\x06<\xb6\x18|\xa0\xf4\x04\xec\\\x01\xb9\xad\xc5\x8c\xa2\xee\x97\x15\x94H\xc5\xbd\xdf\xaa\xd0l\xe5Q\xfd\xe9\xe0\xe3}s\xac\xd7\x94P\x9a\xe5a\x97\x97@\xe0\x8eV\x8f\x83\x882\xba\x1a3\xb8'\xca\xdd\xbee\xb4\x96\xae\xbcm^\xd1L(\xa9\x15-d\xcf\x99\xda\xfe\x05\xdb\xe7\xd9\x1f\xae1\xb0C\x8a\x9a\xc1\x81\x16\xa7\x01\x0b\xce5\xd4\xf9\x96\xd6\x9c\x9e\x80@Ew$\x13\x8b\x973 w,\x97&I~D\xa5\xf71+:\xcb\xa0Y\x85\x1b\\\x85\x0e\xe7\xd58\x80\xf2\x04^<\xfeE.\xc5\xde\xf2j\x82\x19\xa3\xdf\x94\n\xf5N\x7f\xfcF~\x1b\xb6\x94\xd3\xea\xd8\x84)\x04\x93\xee\xc5\xff\x94\\\x06D\xc5\xd3\xdd\xd8\x9cPT\xc4a\xfb\xe7\xaeF=\x99\x9a\"\x9e\x9c1<\xe0\xd9W\xcf\xe0HN'\x19@\x17\x8c\x7f\xf3\xea\n\x08\x14y-\xe5\x82\xdcT\x83H\xab8\x93\xafP\xb77\xec\xfc\xf7\x07Zc\x10B\xf6R\xae\n1!:\xac\xd9Y9B\xc9mZ%E\xc1\xee\xe5\x9e\xee-4\xb6\xc3vz\xd1I\xd6\xa8 \xda\xb8!\x99\xd89\x18\xf2h\xdb\xec\xfb\xb9G}\x95\xcfM*@\xf5O9?,)\xcd\xb1\xef\xaaO\x13\xefM\xbd\x0b\xb3\xaa\x14,\xd6\xdf-j\x15\xcc+*sj\xca\x9c\x8a\x05\xb6\x93lV\xd5\x82Yu\x0b\xe6\xdc2V\xc7\x8cM\xf5\x02\xab\xfa\x05\xb6\xb1i\xb2\xaaa\xe0\xa8\x8a\x81\xeb\x17\xddt\x03XE-\x83\xe8\xaa\x19\x84T\xcf\xc0]E\x83\x18\xd3\x11S]\x83UT6\x88\xa3\xb6\x81\x03#\xc3\xabo\x10W\x85\x83hj\x1cDR\xe5 \xa6:\x07\x97\xa8t`Q\xeb`~\xbbNW\xde\x19\xa9q`Q\xf3 \xae\xaa\x076Ph\x04\x95\x0f\xa2\xa9}\x10I\xf5\x03G\xf5\x0fRZrJKvBgF\xc4f\x86Ff\xce\xe22SZrD$\xa6E!Li\xc9\x8e\xb8\xcb\x8bQ\x97)-9 \xce2\x1e\xca\xd2\x8e\xb1Li\xc9Kq\x95\xe1P\x956\x1eEFTF\xc3S\xa6\xb4\xe4\x1e\xd9\xa69, (\x12\x1c\xc8\x17\x0c\x94\xd2\x92e\x9f]P\x92.\x18I\x87\xbey\xc2K\xa2a#SZrJK\xfeG\x13s\xc1\x10\x8f\xff\xc0i\xc9S\xd6\xd0 j\x88j\xd0\x81\x16'Zim\xa8\xef\x88C\xef\x96`G\xce[\xd9O\xea\x9ae\xb9\x8cb\xc8\xd1L\x87)G\xaem\xbd\x19\x0c\xfb\xd1\xb4\x0b\xa7Bw\xc6\xdd3\x19\xaa3K\x8b0\x99\xd0\xd3!\xb8\xd9\x1d>+\x86m\xa1\xb6KeG\xd4\x90Z\xbcPZ\x90\x10\x9aC\xe8\xecb\xf6\xc6\n\x91\xc5\x0d\x8d\x05\x0e\x89M1*l\x08,R\xe8+|\xc8+t\xa8+J\x88kQh\xcb*\xf7\x91\xeb\x9e\x92\xdf$W'6\xe6\x84,\x9d\x96\xa2\x13\xed\xccm\xedX23\x86\xb4\xbcPN\xceJ\xc8E\xac\x0b/\x0fcI\xc2\xa02\xd0\xb41\xbe\x93\x82\xe5={\xd5\xac\x0b\xa1\xc9/-\xf9\x92\xea}/\xb1y\"\xd8;>\xb6\x8e\xb2s^\x0e,\x9aG\xcaU\xc2GGfL\xae#\xe9\x13|^\x14\xa8\xd1_T7\x08\x0d\x92\xb5VQXMyI<:U\x0eJ\x95\x83\xac\xf1\xe9T9H\x91C\xb4:n\xbc\xda\xeaeK\x95\x83\x16F\xb0\x03\xc4\xb0/\xf1\x8eF\x8cd\xa7\xcaA\xb8 R\xe5\xa0T9(h\x9c;b\xa4;U\x0e\x02\xfb\xeb\xf6\x05\x10\xceLB\x8a`,!\xf9\x98LH\xa9r\xd0\xa2\x98\xb8[T\xdc\xb1\x8f\x0bJ\xe9D\x8b\x8e\xa7\xcaAH\xd6hy\x12\x93\x06\xfa\xad\x8b\xc9`qt\x1b;\xa3\xc4\xd2\xe3E\xd3\xfd\xe3\xe9v\xff\xdbR\xcf\x9b|y-\xcf\xdb|\xd2\xee%\x02\xd1!u\xf7\"\x1f\x84-\x81\xd7*\x0f&\x91\x01\xc3\x16\xa6\xd2xg\x13y\xad\x92\x12\xac#D\x9a\x9e\x9b\x96\xac\x82\x13\xc9)\xa5\xd7\x8e4h\xc9\xf1\xbb.\x92WS\xac\x98\xda\x90b\xc4\xd8\x86ta\xccmH\x0e(\x85\x96\xa2LM\xf8\x98\xdd\x90b\xc5\xf0\x86\x144\xa6\xd7%;C\xc3b\x1dZ\x8a\x84zh)<\xfe\xa1\xa5\xd0H\x88\x96\xa2`\"ZZ\x84\x8e\xe8\xf6n>\xf5\xd7\xb2\x91\xa7\x9c\xdc\x93 \xc0`M\x01\x8e\x9e\x04l\xdb#\xb1\x12\x81c\xa6\x02\xc7K\x06vK\x07\xb6k\xa3\x0d\xbe\xf3\"\xb5t#l!\xd4\xe8V\xd5P\x83j\x8e6\x9d\x17l\xbb\x0e\\t)'\xfd\x17l#\x01\xebh\xc0I\x17\x06\x9719\xe9\xc4\xe0\xa0\x17\x83M7\x06\x97q#\xd9G\x8f\xe4\xa2'\x83\x1b\x174Y\xe7\xb8%w\x9d\x19\xfc\xfa`\xd7'\xfa\xb4\x96\xfe\x0c+\xe9\xd0\x10^\x8f\x06_]\x1abOY|\xbd\x1aV\xd4\xad!\xa6~\x0d\xce\x0c\x8e\xa5g\xc3\x1a\xba6D\xd6\xb7!\xaa\xce\x0d\xf1\xf5n\xb8\\\xf7\x06'\xfd\x1b\\6\xbf\x0dl2\xa1i\x83\x93>\x0ek\xe8\xe4\xe0\xb4\xaf\xe2\xe9\xe6\x10Y?\x87\xa8::8\xea\xe9-\x8dth\xd5\xc8r\xb56\x9e*\xbb\x0cP VP%4\xbd\x9b\x02V\x82\xd3\xaa\x84\xd8\x00K\x88\x0c\xb2\x84\xf8@K\x88\x0d\xb6\x84(\x80K\xb0\x83.\x01\xe6c\xafp)\xf8r\xa2\xcd\xcb\x11\x98`\xdb\xf0`\xdd\xf4\xe0\x8a\xc6\x04\x88\x8d\xc8\x04\x17Y\x03\x96\xc3\x12\xdc\xd0\x99`Gh\x82\x1d\xa5 V\xa4&x\xa05\xc1YV\xc1E\xa8\xcd\x99F\x03@7\xc1\x16\xa4w\x9c\xe4\x880N\xb0B9\xc1\xb5\x97\xee\xf3\x15\x19\xd6 \x91\xa1\x9d\xe0\x08\xef\x04\xb0B<\xc1\x95\xb9v\x08\x93&\xf7i\x88\x06\xf9\x845`\x9f\x10\x18\xfa \xce\xbc\x8b\x0e\x01\x85\xb80P\xb0AAa\x1a\x0e\n\x0e\x1e\xcb5\"\xf9\x16\xb1\xea\xb8\xab\xe61P\xe0\xd6\x8c\xdb\xa2 \x8d\x87\x82\x98\x98(X\x84\x8b\x02\x07\xe5\xf1B\x18\xe9D\xab\xfeXR\xb0\xe0I\xc1e\xee\xdd\x84\xf2\x85\xd8Rp\xc6\x97\x82O\x9f\xed\x06\xea\xe4\x1cF\xc4\x9b\x82\x0ds\nv\xdc)\xac\xc4\x86\x988T\x98\xc4\xa2\x82\x1b\x1e\x15\x92\x9c\x1eR\x92\xd3\x1d\n\x8fa\x05'\x16G\xc2\xb2BT<+,\xc0\xb46\xef\xcd\xe6\x1d\x06\xaa\x17\x85\xe4^5Jj~\xf2\xdb\xca`\xc7\x10\xce\xabK\xf0\x0c\xdd\xdd9!<\xd2m7vP\xc0\xbc\xd0N\xb7\xdd\x18\xc9.w4\xad\x13\xd2\x8f\x1f\xcc\x0f\x1a\xc6\xf7\x08\xe0\x07\x9f\x8e\xd8\xe1\xfau\x02\xf5\x91B\xf46F\xc6 \xcbG\x0e\xc8\xc7\x0b\xc5\xc7\n\xc2G\x0d\xbf_\x14x\xb7\x85\xdcg\xb6k\xba\xed\xc6\x16H\x8f\x17B\x8f\x15\x16\x0c\xce\xf3\"J<\xa5\xc4\xd8\xe4\x7f\xb4b\xbd\xa2\xf5\xb9\xe05\x90;\x92\x172\xcc\x9a\xefz\x03\xcd\x84T\xd8\xc8\xd7\xc6\x1b\xfd\x9e\xd4PS~\x059\xaf\xe1\x8e\x14g\xb9\x9f\xce%.\x89-0a\xa6\xdf\xe7\xbd\x050\xe71\xc0\x0f\xe3\x9a\xc1\xde\x8a\x19\xa0\xc7[\xba\xddb4w\xff\xf6\xe6e\xb3\xac\xe0H\xeb\x9a\x88}\xd48\xaaz\xcde\xac\xc2G\xa5\x02_\xe1\x88\xf4K\xf2\xf4\x92\xb6Ew\xb8\x831\xeag\xdf\xb1c\xdb\xb1\xbf\x99\x85{EOT\xc6\x13^\x90\xaa\xe1\xeb\xd7\xf0\xec\x7f\x9a\x1f\xef\x8dU.\x94\xaf\xe1\xf3\xc1\xb3\x7f\x97\xff\xb4\xbb\xd4\x17\xba\xd2\xb7\x84\x93\xe4?oZL\xfe\xf3\xe4?O\xfesE\xc9\x7f\x9e\xfc\xe7\xc9\x7fnz&\xf9\xcf\x93\xff<\xf9\xcf\x93\xff\xbcO\xd6]\x91\x1cCH\x8b\x1dC\xc9\x7f\x9e\xfc\xe7\x8a\x92\xff\x1c\x92\xff<\x89\xc9>%\xffyL\xff9:\xdaD\x87\xeb\x81\xf8\x15\x8a\xa9\xf2\xc65\xaf%\xdfy\xf2\x9d'\xdf\xf9/\xc9w.6\xf6\xf9t\xdd\xb35\xfa\xee\xf2z\x1eV?r\xe3\x8c\xdcG#\x87\xd1\xd0E4\xed\x14\x9a\x9a\xd8\xcb\x1d?\x8b\\=C\xae\xf5\xad\xcb>\xdb\xacQ\x86\x19Ob\x0c\xff\xe1\x84\x00\x18\xfb\n'=\x84F\xbf\xa0\xd1\x1bh\xf2\x01\xce{\xfe\xe6v\xf0\xe5\x93\x0dK'\x1cLz\xdb\x04'\x83{\xefL>\xbb\x89o\xcfi$Q\xbcr\xe1}q\xd3\x1e8\xa3\xdfm\x82\x11s\xb6\xe3\x1c\x93\x02\xfb\xd3\"y\xd1.\xf7\x9dM\xf1 \x92\x9f,\xb8w\xcc\xe0\x13\x1b\n\xe5\xe7\x99\xd4/\xbe\x95\x1a\xab\xb0j\x96\x86\x81SR\xe3\x12\xfb/\x82\xe5\xe7f\xf3\xcd\xae\x03\xbd\x10\x17.\x05\xb9\xe2\xd7Z\no^yL*\xd8\x14x\xdb\xbc\x83\xfc\xe2\x00-\x90o\xfbg\xa1\xe1\x1d1\xc3\x08*h\xe4X^\xc3\x96f2\x19T\n\x07\xf9GY\xf6 g\xe5\x15\xe4eV\xc9)\x17\x1b\xfb\xf6\x11\x9eMU\x16\xa1w\xfat\x1aZ\xf3\xec\xbe\xf4v\xd5\xd9C\x89?\x88V5\x07\x08.\x1b\x9d\xce\xda\x1b\xa0\xfc\xbc)4\xf4CY\xa0\x89&\x9f\x90i\xd9G\xb6\xcdw\xf8\xc7\x9a\x13>\x1b8\x9c\x8e\xce\xb9\x8f\xcc8\xb1\xdd\xb3_\xea!B\xcb))\xd5x\x00\x158\xe7\x0c\x8er\x83\x01\xd9qZ\xc1\xb9\x14\x7f\x16\xd3t \xc6\x90\x99:\x13\x87\xe3\xa0\xe56\x8e\xc3\xd7>\xd2\xd7\xe5V\xa6\xc9WtG+i\xe55\xe3%Z\xe64\xf3x/\x8f\x1c=\xe4r+\xe1\x0f[*]\x8d\x13\x8b=\xef\x18\xa3\xbb\xbc\xaa9\xe4e\xcesR\xe4\xffI\xb7x\x9e\x93R1N\x9a\x81Zmh\n\xa2\xb0\xec\xc3\x95q\xb5\xabCQ\x95y\xb9\xc5\x19\x11\x7f\xf8\xa7\x8ez\xd1\x7f'\xb95\xc1iU\x84;\xd6\x90\"\x1cnHnG\\\x97z\x83\x7f\xd984\x1bkC\xfb\xec\xe4`\xf3V\xdb\xbc\x82\x0f\xf4\xc4u\xb8\x07\xeb\xd3h\xa17\xfc\n\xe2r6*\xdd\xbf\xda(\x99\xe8\xb9\xbd\xed\xd3\x84\xf5'\xe0\xad\xfa\x0e4q\x9c\x88&:x\xa7\xee\x86\xbcn\xc0D5\x95\xa9\xfc(\xbf\x85\x85\x88\xe6\xaa\\\x16B\x9cO\x04\\\x0e\xa4\xdc+\x08RS\xd8\xe7X\xef\xfb\x8c\x9cg\xc0\x8d\xc4\x93}\xab\x0e\xd0\x06\x12\x86\xd6`\x99s\xd1\x1b\xc4\x9c\x81\xf6\x81\xdd\xe2\xb9\xf2\xf0\x14U\x1d5\x8b#\xc9\xf5\x06quX\x80\x0d\xe1\x7fjM\xc8\xa8\x1d\x02\xd0t\xb9\x1f!q\xae\xe1M\xe3\xa7\x96\x9c\xb8j$\xd0Ht)Q\xd7 \xd7x/\xac\x83~u\xfc\xda5;\x85N\x90\xd4\xcd\xa4n\x8e(\xa9\x9bI\xddL\xeafR7\x93\xba9\xf8JR7\x93\xba\x99\xd4M\x0fu3\xa9\x97I\xbd\x1cQR/\x93z\x99\xd4\xcb\xa4^&\xf5r\xf0\x95\xa4^&\xf52\xa9\x97\xb3\xea\xe5\x0d\xa9\xb98xR\xac$'\x01/\xf7U\xc3j;$\xdbG\x01(\x85G\xc6\x8e\xb7\xfa/I\xa1\x9e\x14\xa2\xb9\x1dP}\xde\xed\xf2\x87kx\xce[\x1d\x97\xedF\x13\xd5\x88\xf6\xb6\xd9F\xc4\xa3\xc0\xcf\xb2\xf3\xf1\\\xe0\xd7\xe5Y$\xd7tQ3\xa5\x96\x9eO[yZ\x88\xd7X)o\x05\xcei\x05u\xbe\xa5W=\xe9\xff(\x0fh\xbc\xdc\x98\xd4\xb0\xab(-\xe4\x7fu\x84\xc0\xf9d\x96\xfa=\xf6\x9dOx%\xf2\xf9\xb4\xd8\xdao\xd8 \xa5\xe0\x05g\xc1\xbc<\x85y\x9d\xf8\xa2\x80n\x1c\xf9\n\x97\xcbX\x98\x96\xb30\xcf\x0f[@7\x90\xcc\x85K\xe4.\xc4\x89\x8e\x9a\xe50D\x93\xc5\xe0)\x8f!@H\xdb0\xa3!\xe43\xf8\xcah\xb0\xec\xae\x18\xb2\x1a\xe2\xc9k\x88%\xb3!\xb8\xdc\xae\x03\x0b\xee\xd5\xfc\x1dv1?\xbb\x0d\x02$6\xc4\x13\xf7A\x04\xfe\xac\xc8\xb7\xf0\xc6&$\x82\n\xfe\x0bE\x7f\xc4\xcc\x80\xe9# \xe6!\xe0\x7f\x0c\x84I\xf20\xces\xa8\xe3`\xc1\x81`\xdb\x83\xb1\x0e\x85\xa8\xc7B\xc4\x83a\xf9\xd1p\xccK~}\xf7\xec\x96r\xf2\xec\xfaU.\x16\xcb\xedY\xf4\xe8\xa6b'V\x89\xff\xf2\x0d\x9d\xd5\x9c|\xc8\xcb\xbd\xaf\xb18\x98d\xd5J\xe3V\x96\x0b\xa8\xe9\x93\x8e\xae\x88\xee\xd3\xad\xfc\x9fM_\xf6p6r?\x92\xa2`\x19r\xb4n\xdaW\x1e\xd0v\xf5\x9d\x18+6\xad\xeb\xf3\xc2a\x0cZ[:\x9c\x81\x1e \xc6\xd6\x1f\x8e\xf8N\xc7a\xdb\x898\xd1;Z\x88I\xda\xa8\x91^8\xa0Q{q\x86\xc4Y\xfb\xa5\xc6K=:\x042v<\x9e\xcb\x9c?n\xc4\xf8/\x1cY\xbf\xb1h\xc3\x12o7\x9f\x92\xf3fsWLl\xcb^\x0f\xb7\x9dg:\xdd\xad\xfb\xfd\xfd]gY\x94\xecx\x0doJ`\xfc@+\xb8g\xd5\xb6\xbej\x9a\xc4@\x8b\xd8#\xf4\xc0\x8a-\xadj\xb8\xcf\x8bBE\x0e\xe8t\x93\xb5\x94V\x07v\x0f\xc7sv\x98\x136\x8b\xc2\xf2-\xbf}'\xbb3S\xfa<\x93\xffP\xfc\x91N\x7fq\x86\xe5\xdd\x98\xcd\x9e\x96\xb4\xce\xeb\x0d=\xb1\xec\xb09U\xec.\xaf\xbb\x12\xd1\xf5\xe3S\xed\x80\xfc\x03t\xfe\xb0\xab\xe4R\xa2*n)\x7f\xef\xf8\x19\xe5\xfb\xf9V\xec\xf2]\xee\x1f\x02\x1f\xbe/\x87\xab:\xd1\xf9+\xbd\xde_\xc3\xa7[\xf2x\x05\xf7\x94~\xf8C7\x88\xb5=g\xa2\xad\x0d\xc6+6y\x89\x83ra\x89\xd6\xbaf\x1d\xd7\x03Ud\xfa\x83\x92KmhE\xfd1\xe7 \x16m=\xdc\x85\xb2\x1d\\\xb7#\x89\xdf~cG2\xce\xbc\xb9:\xd9elN\xaf\xb7\xe6\xefp<\x170'\x80\x90<\x9d\x89\x065\x06<\xfc+\x06\xcb!\x82J\x03\xcej\x0d\xcc\xab6p\xd9\xd0\xa2\xa89\xe0\xa9\xea\x80M\xdd\x81\xcb\x06\x19I\xf5\x81\xc5\xea\x0f\xcc\xaa@p\xd9hc\xa8C\xe0\xab\x12\x01\xdc\xd3|\x7f\xe0t\xbb\x19q\xbf\x81R\xac\xe6xZ\x92\xa7\x8c\xfd\xf7xe~^~R\xec\xd08\x8f\x8a\x9e*ZK,\x0c)\x1b\xb8\x87\xc2\xde\xe0\xb7\x81\xd4u\xbe/\x91\xd59\x1fe\xe4\xbc?P\xfdd^\xa3sC.?N\xabc^\xd2\x89\x19\xe7\x8c\x93\xc2(\x86A\xa3ep\xa6\xd5\xd2P\xd3lX\xc3s\x03v\x99\xfd\x11\xd6\x855'E\xf3V\xbf\x87zCI6\xe1'\xea\x86K\xd2\xed\"O\\\xddW\xc9\xa1\x9d\xf4\n(\\\x92\\\xdc\xe2\x99\x81\x81\xd9L\x8a\xfc\xbc\xe8\x99\xd6\xb9:*\xde\x1f\x07\xa7\xd6\xc4){=\x167\x7f\xd4\xf0\x9eOj\xb5\x10Z>\n6\xe7\xe5\xbeaO\xafY\xe9bA\xfd\xc0A\xb9\x99\xd2\xd3\xcc>1\xd7\x0f\xa3\x9fG)\x9bb\x81\xe9\xe7\xa8n\xc28I\xeao\xbdE\x82\xa6\x03\x08\xe5\xa0F\x04\x89X\xac-J\xe9\xe1\xa9\xd4k5\xe6\x07&m\x10\x89_y-zt\xd3\xcc\xcfB_\xf8\x02\x13A\xf3\xf9\xf6\x91Ob&G\xab'\xd7\xa0\xb7\xaa\xa2b\x8c\xc8:\xa1\x1d\x8e\x8d \xe9.4Z\x97\x1d\x95u\x8e\x07\xad\xea\xaa\xfe-F\xa2\xd9\xdco\xe1\xe9\xa0 x{\xf3Ra\xf2\xac3\x10\x18A\xd4\x1b)\xfe\xdc?\xbe\xda\x15\xa3\x8f\xaf\xceJ\x99\xfc\xf8T\x07`\xd2.\x05\x8f\x13x\x91}\n\x8e6\xaaOGB\xd9\xaa`\xb1W}\xfat\xb1\xdd\n\xce\xb6\xab\xa5[S\xb2\x11,F!\x84\xb2e\xc1n\xcf\x82\xc5\xa6\x05\x0f\xce\xcf\x0ec\xb9}\x0b\xa1l\\p\xb4s\xc1\xaaYE\xb4w!\x9e\xcd\x0bv\xbb\x17\xe6\x94\xdd\xf9\xfc\xe4 \x1b\x18\xe6\x17\x108\xf0\x1a\xe2\xd9\xc3\xe0e\x13\x83\xdd.\x860\xc3\x8df#\xc3\x02;\x19\\le\x083\xf0\x88v3\\d;\x83\xd5~\x860\x1c\x88eK\x83\xbf=\x0d\x8eV\x95\xf9\xc0\xf0FN/*\x8a0ig\x83}:\xa6\xecm\xeb\xab\xf6y\x8c`{C\x14\xfb\x1b\xbcmpp`\x80\xcb\xaa\xf1\xb7\xc5!\xa2=\x0eKmr\x08g\x97\x83\x87\x89\xec\xa1\xa4\xcd\xe9\xa1\xd3\xd8\x15\xd7\x8e\xf8\xda\xea0o\xaf\x1b\x8c\xbcY\xcbRY\x94\xca\xccw3$\x07\x9b\xd3\xd3\x88tM\xc6\x1aK\x17\xc3cS\nt\x08\xf9\xa1\xdb\n 4\x9a\x118J\x8a\x86\xef\xe2@\xe9\xe8\x15=\xf4\xc8\x9br\xc7\x9ch\xa6$E+60\xeb\xf2w\xa3f\x85\xf5\xa5|l \xa6\xfaI\xc7\x0cR\xf9\xb2[F\xeb\xf2\xff\xfd\xbf\xff\x1f\x0e$\xe3gR\x14\x8f\xe8\xe4\xd1_\xec7\x9a\xf3\x9a\x16\xbb+\xb8=s\xa8\x884\xa8\x8f\xa4${\x93\x91\xde\xe4]J-\xe1Hxv\xc0\xc7\x86\xd1c\xcc\x1c\xed\xb2\xc1M\xf0\xc9\xd3\xaa\x91~\x0b\xdd\x98\xb2\xcb\x9b\xbc#>'^\x9ej\x00fD)\xcc ,\x83H\x85\x95\x15\xfei1\x0b6Q\x0b6q\x0b\xbeF\x81\xd3t\xbf~\xe0\xb4*I\xa1\x85\x18\xfd\xb3\x18\xc2R\x1f\xf6\x96p\xb2\xd6\x91\x16\xf60k\xb4\xcd|\x0b\xfdJ!X\x08\x84\x80d\xcc\xb0\x0f\xf5\xe6D\xab\x13\x15\x1b}\xaa7\xb7\x8c\x15\x94\x94\xa3_mfJ\xbfu\x84\xa1\xef\n\xb2\x17\x92\xaa>\xb0{\xc8w\x90c\xf2w\xfb\x14\xab\xa0d\xe5\x93\xf6\x0frE\x9a\xec\xaa\xef\xc7\x8f\xd5]\xfd\x98\x1fh^i\x9d\x8a\xfe\x8c\x92\xac\x8d\xce\xdc\x1f\xf2\x82\x8e\x85\x0f\x92lM\xf4X\x95\x12P\xf0q\xf4~^\xc3\xcd\xccgIQ\xf4>mj\x1es\xda1w\xbeIPge\xf18\xd9\x7f\xb2'y\xd9\xa6\x96\xeb\xfe\x99\x1a\xaf\xe8./\n\xba\xbd\x827%\xa7\xa5\xaeDr\xae)j\xb4\x1d\x89/\xe5\xf0\x9e\xf2\xe6\x1d\xd8\x92\xbcx\x1c\xd9\xa3M\xa76\x9c\x19V \xae;#t\xbd\xf7\xaa`(\xe2\xc0\xdb14n\xa1\xaasX\xc8\xd3l\xec!\x82\xa6\xde\x01\"\xb0\xb1~\x81\x04\xbd7\x90x&\xeb\x1f\x08\xa6\xd6\x9c\x1cO!e\xa3Lq\x91\xa8\xee\x8dl\xc5,\xc4\x90\x19\xdf\xb2\xec\x83\x14O\xef\x855%\x97\xbexGlD\xd9_\xd9\xcc\x15`\xe2O\x83\xef\xff/\xf5\x87\xf7\xa6D\x08\xb0\x89\x07\x90i\x18\xe7\xc9Z\xfdO\xe0\xc5\xa3\xfe\xd4\xcc#\x93\x1f\x17?\x7f\xcfD\xfff\xde\xfes\xc5\xcec\xae\x03\x1e\xeb\xe4\\\xf0\xafl\xbd\xb0E=\x90\xfa\x0c\xee\xfa\xf14\x9f\xb9.\xc1\x80@|\xb9\xd63\x83\x18C\xa2\xb9\xd4]n\xa9,\x9f\xd1YMh\x80\xeb\x0c\x03>q\xc1\x07h\xef\xbf\xe3\xd16z\x00\x97\x0d&\xf3t\xccQ\xaeK\x9e\xf4\x15\xc0{*7L\xc1\x98\xf4\xa7s\x86#5r~:-\x05\\zf\x97\xf20HQ\xd160\xf2]&\xa4\xa1\xe4)X\xb9\xa7U\xcb]~ (^Uy\x0f\xb3\xff\x0c:c\xb8n?\x84\x15i\x8e\xe7\x9aC\xc9\xb8\x98\xb82/\xb0\xa4\xd0p\xe6q\x0bN\xb5\xfd\xd7\xfe&\xfc\xabij\x1by\xb2\x90\x89\xf64'pf\xf5{\xdd\x97\x86\xd7\xb7\x9a\xcb\xbaz\xd2\xad\xbc\x0e\xa9\xcf\xdaNm$k\xc3\xde\xbc\xd5L\x14M\xfcu\xf2\x03r\xbf\xeaD9\xb5&xw4\nKQ<\xca\xcf6\xd5\x85\xc6\xf7\xd0\xb8\xf0J~\xed%+\xb7\xb9^\x98DL\xd19\xe3m\xde\xd8\xcf\xfd\x1e\xc9\xd2.\xdb|\xb7\xa3\x12\xd2\x91\xe9\x97k\xe3\x90\x06K\x91\xa8\xbaT\x1d\x16\xd6\x90\xe9J?Lv\x95\x14W\xb0\xa5'\x8a9Wr\x0b\x18\xf5\x8f\x9et\x1b\x0e>\xdd\x0d\x03N\x0b \\9,\xa4\x08E\xb1\x90|Jc!\xcd\xa9\\hb\xebzt\xd2\xcf\xa8\xfa\xdb\xb7\xbfe\x02\xab,M\xa4\x94\xdc\xbd\xc1>\x10\xf4\x92\x94=\xbf3b\n\x94\xfb\x01C\xde\x83\xb7\xd0\x81\x1d3\x1d\xb4\xfdB\xe3 \xe9z\x1a\xdaC{\xd0@y>*\xe4\xc2\xe6D\xf2\xed\x86\xddy_7\xe6f\x85\x19W\xa4\xe9\xeb\xba\xff-\xe8\x04\xe7LAOz\xc3\x92@\x84\x89\x8bj\x98XvB\xf8\x8bF\x07\x0f\xa0r?\x81\xb1\x897\xdc\xdeg\xc7\xe34\x8d\xb0)\x97\xd5\x19\xcf({\x13$\xae\xa0\xa2d;\x94t\x1d\x0bb\x93\xc4$$1)\x17\xe7hUH\xe5\xd9(\n\xbb&\xa8i\x89\xcd\xb3\xf3\xcf\xdam@J\xb5X\xb0}U\xacNf\x1d7\x1f\xa8\xe1\x11u\x04\x0c\xcd\xe6\xa7\\2\xe3\xfe\xc0\x86\xc3\xaf \xcf\xeb\xdd#d\xb4\xe2$/\xbbz \xbclT&\xe5\x8a\xa8\xcf\xa7\x13\xab\xba\xca\x0b\x90\x8a\x9d\xb1\x02\xde\xb0\xe5^&9\xce\x0b\x81}~\xa7\xed\x0d1\x96\x02\x8b\xe4\xc97\x9d\xbe\xa5&\xaf;Jiy\xe2\x8f\n\xe4f.\x80\xd91\xdb\xdb \x1dz}oY\xb9U.2\x0c\x01\x1d\x84\x16}\xfb(\x15pU\xd2\x1a\xdeH4\xaan\x8c\xdd\xab\x82\xcb\xac\xecp\x1e\xab\x13\xe7\x12\xc7\xc7\xb2\\BS\xb1]\xc1\x14\x86IK\xec\x1em2V\xd2\xf1D9.\xc9\x85rj;Z\xd3\x13/O5\x00\xb6\xf5\x0d\x1e\x02+\xdc:\x07\xdbZ\xf7\xe9V\xb85\x0f\xc6u\xef\xd3\x97%\xeb\x7f\xd4\xc8\xe0`\x08\xb2\x0fz-\x06\xda\x0c\xe6\xe9l\x87u\x8b\xd7,]\xb4t}\xceW\xb33\xc0El\x0d\x9c\x85\x8b\x8d\xfen#!l\xfdn{\xae&\xfe\xd4R\x1a\x0b#\xd1\x17\xd1\xd2\x1d)h)\x11\xcc\x9d\xa5F\x1f2zR6z.Mfa_\xd7@~7\x9c_\xc8%.\x14C \x12\xbf \x97\xb9\x1a\x9e\xd0,*\n\xf59\xe7BW\x94\xd6tV\x08{\xbe\x81\xd5\x0e\xa1\x9b\xf5\xf9D\xab]q\xce\xb7\xd7\xcf\x8b\xe2y]S\xbeT\xd1#\xf2\xe5\x0b\xd4R/\xc3b\xc2\x975#H\xaa\xe8 /wyA\xaa\x86\xaf_\xc3\xb3\xffi~\xbc7V\xb9P\xbe\x86\xcf\x07\xcf\xfe]\xfe\xd3(\x03\x85\xd4\xfc\xae\xc9\xcc^(\xfb\x8e\xb4`\xdb\xc7M\xab\xdbl\xdad\xef\x0b6-&d\xe1\"[\xb0\xb6\xc7K\xdbO\xbdm\x03\xbc\xc3SF\xb6s\xa5n3\x82oo\xda\x13\xbe{\xe2\xf7\x1a33d\xe6\xfbs\x16\x8aPr\xbf\x93<\x7f\xf2\xba\xe1\xf9\x93v\x1a\x01\xf3?\xa4\xee\x87\x08\xd3\xef\x07\x17\xaa\xe1\x8c\xc1=\xabdr]\x7f\xb9\xf2\x8a\x12.\x94\x95ooT\x15fR\xc3\x81\xdc\xe5\xe5^U0.\x8a&h\n\xdf_\xc3\xeb;Z*\xe7\x15W\xa8\xc8\\\xe1=\x07-\xcb\x8d(XHP>\xbe\xcf\x8f\xf4\x89\xce!|B\xeehE\xf6\xf4 \xf6\xee\xc9-\xc1{\xe9t\x02\x18-y^\xb5%\x87\x076V\xd3\x9f'\xcf\xae\xe1\xd3\xf7b'+0\x92h\xe3\xfe@\xf8'\x12C{\xaei\x8f1\xa4\x86[R\xcb\xe0.\xea\x16U>\xbam\x10\xa3\xc3\n\x1f\xfa\x07\xf87vO\xefh%\x9b)\xd9\xfdU3\xea\x92\xa1\xe7\xee\xfdO\xcfo\xa4\x83./kN \xde\xf8T\x9f\x18\xef\xb7{\xaa\xf2\x8c\xea\x92\x07\xb7\xec\\nI\xf5x\x0d\xdf\xb0\xaa\x83\xfc\x11\xebC\x1a\xd1\xa8[k\x84\xc4\xee,l\x93+\xb4\x15\xce\xc5\x80\xd1x\xa9\xd6\x8c\x9e\xaf\xd5\xaf\x85;\xde\xacGO,\xe5\xb1\xaa\xea\xaa\xa4:\xab\xa7\xde\x8a\xa9\x97Jj>\xef\x0do\xba[\x07\xbd\x96\xfa\x96\xc2\x15\x14'\xb5\xef\xf0\x120\xc6\x8a+!\\\xb2\xcex\x86\x0fL\xcet\x97 7\x8c\x15?\xd6\xb4\xbaau\x8e\x86\xe9\x8241\x7f\x9f\xe9I}\xee\xa2X\x9c\xa1\xa8\xbf_\x03\xe9B\x99t\xa1\xcc\xf2[\x05\xd2\x852=\xba`FC\xdd \xe0}\x7f\xc0\xdc\xee\x8auw@\xc4\x9b\x03\xa2\xdd\x1b\xe0yk\x00\xf4\xe2&\x9b\xb1S\xd8S\xbc\xfaI\x90\xe4\x83F\xea\xd8^\xb2^\xd46M\xc4\xfa\x131\xa1\x7f\x95\x126`\xf05.U\xbe\xf1\xed\xd5\xa6v\xcaq8\xf9\xc2\x94\xd3\xd0\xe1\xb04\xe8E\xae\xe1J\x13\xf7\xdb\x00K\xed\xc9d\xd3\xa0\x8d\xfd\xc7\x05\xb6\xa9w\xb5]9\x1d9Jf\xdf0\x0d\xe8u\xcd\xf3#\xe1\xb45>\xd4\x10\xe9\xf6\xb9\xec\xc8\x8b\xc7\xbfhMF\xaaM\x0b\xd7\x18&\x8dou\xdbc\x043\xb6\xf3K\xf1m\xa7\xbb\xcb\xed\x92\xe8\x87\xfa\xc8ZwQ\xd7\xe9\xb7\xc0\n\x9c\xf2\xcdYl\xb2\x01\xber8\xcf\x13o\x07\xf2\xc3\xcd9%{\xdf\x9cZ\x1c\x11\xfdnq|n\x91\xfcm\xb1|m1\xfclq|l6\xff\xda\xd2\xb2-\xf9\xf1|\xdcTy\xfda\xe1\xad#\xe3\xea-\xc3\x16\xdbxHv\xe6b\x1e~x\xf7\xdd\x0f]X\x02\x9a\x88l\x07\xc5I\xc3\\vC\x87hg'*\x0c\xd6U\xebQ\xfb\xf2\xff\xc0bl\xea\xe3 >\x0e\xea\xe3\xf7\xac\xfa0\xbe\x0dI\xaa3\xb4z\xa2\x01\x0er\x16\xa5\x16\xdb\xa4\x8b\x95\x82\xe5y\xf9I\x0d\xf4\xe1\xc4\xeas%67\xdc\x91*g\xe7\x1a\xa7m\x80\x8fa\xc2\x18*r\xc1bD\xda`f\x05\xa9iS\xfb\xf3\x96\xc2'\x15\xad\xf3\x9a\x93\x92\x7f\"\x1b\xd4o5\x85\x07\x94\xec\xb1U\x17\xefp\x04\x91\x9d\x93K#\x06\x9a\xb6\xb7\x06V+n=\xb7Xa\xfe\xbc\xb6y\xbab-\\\x08\xbcx!\xde\x02\x86\x80\x8b\x18\xa2-\xe4\xf7BOl\xb5\xec\x17\x8f\xaf4\xbcm\xe1\xe2n?\xb0\xe9x\x15V\xae\xf0f\x85p\xce.n+\xd2\xd2\xb25f|)\xdd\xb7\x0d#\x82\xd9Q\xc1\xb4j\x0d\xf3}\x02K\xea\xdf\xec\xab\xb6\xbd\x1eN\xdd\x868*78\xab\xdd-\xb9\xf8c\x90\xd2d\xfe\xc2's~\xc8#C\xbc\x89\xab\xc1\xa8\xcc\x03gM\x80\xb0#\xe7\x86=l\x05\x00\xaa\xa4\x0d\xb6X\xab\xa55\x17\x0d\x1cIv\xc8KD\x83\x8a\xe6+\xd8U9-\xb7\xc5\xa3\xb4\xb6\x8c\xce\xd9j \x93a\x1d9:\x93\x9f\xb5p\xdd[\xc53\xd8\x162\x0cg6,\xda\x1e\xc9\xe1$\x00\xef\x8e\x86\xc5\xdf#\x99Q\xf8H~\xbd[\x8a\xc874e\x14/\xe1\xd1\xf9H10\xfaH\x93\x8c7\xe0\xf5\x91.\xda\x1a\xe9H\xf8\xd8GBx\xe4?R`\xfc?@r\xf3\x86Y\x97\x11\xd6\xa4\xfbz\xc4)t\xd17=-|\xbf Q\x8a\xff\xf9X\xc9M\x8c\xe6\x9b\xcb\xc24\xeb\xe6\xdb,\xca \x98\x88\x8fY\xdf\x9b\x8d\x95M\xbc=9\x01?\x96'\xc6\x8a\x9f\x0e9\xa7E^/\x0d\xbc\xaaB\x06\x97\xf0\xdb0\xd4\xb9\xb2\x02\x9dq\x0c\xe0\x86\x9e]w\x0b\xb5L\xc0:\x8d@\xa5\x05\xa0G\xb7\x94\xa8a2\xd4\x04\xe3~\xd5\xa8\xd2\x95R\x9c\x0c\xdd\xe8\xaf\x9b\x1eW\xfb\x1cu\xe1\xa6\x13'\xbd\xb8\xe8\xcb\xc1\xce\xe1\x11\x06\x8f\x1b\x13\x8bk\xf2\x15`\xd4~\xa1@\x9a:\xe3\x9d\xc5\x91\x97\xf8O\xfa\xda\xa5\xfa\x9a\xeb\xa2X\x14\x92\xf7\xaf\xab\xe1\x0f\xe5N@?\xa4\x10+\xa8\xdb\x9e\xdb\xf2\x01G\xc7r\x9a\x88\xe8\x1315\xb0\x00\xee`\xddTH?\xb0\xab\xe0\xa9S\x00\xcf&\x17\xado\xa7\x00\x9e\xfbV6\xb4\x15bG\x1b\x9au\xdd\xd8\x9a\\\xe4,R\x9a\xcc_\xf8d\xfe\xda\x03x\xc9I\x1bb9FX\x8a\xee\xcb09i\x7f1\xba\x9b\x87*\x14\x04I\x9f\xf4\xa1\xa4\x0f9o\x0fC[!v\x89\xa1Y\xb7\xcd\xd2\x92\x8b\xecBJ\x93\xf9\x0b\x9f\xcc_\xb3>4/\xbd\x0d9v\x0b\xee\x1ev\x8b\x958'\x88]^\x87\xdc\xc5;7\xcf\x98\x1f\xcbm\xb2\xf1{\x94\xce\xb4\x1e\xfd\x03\x8a\xc1t\xa6\xfd\x86&\xf3\xd7|\xa6Ac \x9e\xcbd\xe5_\xb6 #,F\xf7\x85\xd8/1\xb4\xda\xe4\xd9\x0b\x12Y\xe4\x85\xe5^-\xbb8\x89W\x98(Hi\xa2\xd9\xe2D>\xb2\xd4x\xc9]\xc0\x12E\x17\x16)\x9a.S\xe4\xb8\x00\xacw\xdd\x19g?^\xb9\"\xff\x82E\x0b/8r\x99\xe7P\x85\x8b\x16\x94.\xb2\xed\xc1X\xe5\x8b\xa2\x160\x8aX\xc2\xc8\xbb\x88\x91\xc9z\x92\xa0M\xa3gp\xa1\xd5\xd4\xf3\xe3\x9b\xaf\xef\xb1\x18t?\xd6\xb4\xea!\xa7\x9a\x9ftI\xbf\xba)\x07\xb2\xb0\x93Y!/\x87\xda\x08ee\xd3T\xee[\xd9\xb4\xbb\xcc8\x9b\xa87h}\xcf\xe1\xce\xa9\xc0MN\xd7$D\xba\xc0\xecpQ\n\xc0\xd6y\xb0\x0d\x00\xc9\xae @d%\x01B)\n`S\x16\xc0\x85g\xf6\xc3\x04B+\x0ep\xb9\xf2\x00\xb3\n\x04\xb8\x0c\xdc\xaeH\x80E\x99\x80\xc8\n\x05,R*`V\xb1\x00\x17\xd6\xb8\xad\x89pJ\x06,S4\xc0i?\xc7S8 \xb6\xd2\x01q\x15\x0f\xf0W>ZJn\xc5\xc5\x86?\xc41\xfe\xc1\xcb\x01\x80\x94\xdc\x8a\xbf\xfa\xc9\\\xa8|\xb7a\x96r\x9f\xf4\xef\xc0\xcar\xd2\xbf\x93\xfe\x8dd\xe5\x99\x9b\xae\x95\xf4\xef\x89q$\xfd;\xe9\xdfI\xffN*\xdb\xafJek)\xe9\xdf\xbf\xfa\xc9l\xf4o9\x04\xac\xbf\xf8\xd8\xb9\xe7\xb9d\xc7\xe7g~`U\xce\x1f\xbf\xa3\x9cl '\x9e\x8a6\xd9\x1es\xc3\x95\x82#\xde\xab\xc3\xf2%\x16\x19\xa6\xc7\x13\x97\xb1{(\x196!\xd3\x81 \x9e\xeeM\xbf\xf5\x11\xaf\xda\x99\x9a9\xf3@\xa0>\xd1,\xdf\xe5\xb4\x16|\xc4?\xedZ\xb5A&\x88\x13\x8e\x1a\x95z\xb4\xa3\x94e\xe4DnU\xcdH`w\xb4j\x16\x82b#\xae\x84kx\x9b\xef\x0f\x1cJv/&\x0ee.+\x0b,\x80\xf4\\\x8c\xacm\xf3D\xabc^\xd7RZ\xcbr\xbb5\x9c\nR\x96\xcde\xf8\xf4\x01K\x0f\xeb:\xc7X9\xd7e.\x17U\xca\x95#\xd8\xe8\x13f\xb3\xa3+V4\xf3\x0d!'\xa0\x84IN\xcf\x0dR\xee\x8a\x97jr\xbf\xa1\xb4W\xcavG\xa9.\x03{ \xd5\xbe\xad%\xadW\x03\xe6\xe1\x97\xf4\xfew\x03\xae\xcaE\xff^5\x91\xd7\xb0\xad\xc8} \xbbJ\xea\xf9\x14\xbe\xab\xf7\xf2\x9bT~\xfe\x13\xa1\x9c\nSE\xe3zd%\xb0~\x93\xbc\"e\xbd\xa3U\xd5\xae\xfb\x8c\x1d\x8f\xe72\xe7\x8f\xb2\x10\xc0\xf5\xd4\x82\xdd\x93z\x93\xb1\xb2>\x1f]\xeeO\x9b\xb4\x00\x9d\x99\xf8gR\xbf\xc4\xcf\xf5x\xb9'B\x1b\xac9\x16\x89\xd2\x1a$i\xd5\xc5A\xc2\xc6\xfbA\xa1q\xa1O iE\x8e\xb0\xa5\\0\xa2\xcc(\x1civ e^\x1f\x87\x8b\xee\x1d\xa5_\xc1\x81\xf3S\xfd\xd5\xd3\xa7\xfb\x9c\x1f\xce\xb7\xd7\x19;>}\xc9\xea\xe3O\xa4>>\x95\x8b\xf9\x89\x92\x10O\xf3\xba>\xd3\xfa\xe9\xb3g&!z3[\xe4X\x17\xb3\xedJ\x9c^\xc9\xe3y\x99$K\xc6\xbc\xa0;V\xd1w\xb4\xdc\xfe\x1bc\x1f\x9e\xa3\xec]\xea\xd4a\xf5\xf1\x9e\xd4G\xc7<\xfb\xa9y\xb5\xf7\xab\xc7\x90\xe6~S\x84\xb7\x9d+\xaa\x19\xd3\xce\x8b\\&\xfd&\xf1rT\xa9:;3\xcb|\x90-\xe4\x16\xd1\xedl\x8e\x83\xa3}\xa2\x91\xa9\x86\xc0t\xcc\xc3\xbc\xb8\x0eq\xdc\x83\xcb\xde\x0c|\xecC\xa4\xa3\x1f.=\xfe-\xcby~\xe5,[\xcfc\xd6.]\xd2\xf57\x95\x92\xa2\x8b\xb1\xf2\x92\xe5\x97xn\xa7E\xc3\x7f\x99x\xd9\xef2\xdeU\xec\xc8E\xdd\xd8\xa8\x9d%\xfc\xfb\xf5\x97\xb8\x9f\xd72ar&\xc1<\x9b\x90\x0c\xce_\xae\xc1\xd9\x92m\xd0Q\xb4S\x88\xa3\xa1\x82\x9f\x96\n\xce\x9a*\xcc/\x9d\x8bn9\x8d\xa1\xb9\xc2\xe5\xda+\x04\xd6`\x0dBR;\x9d\x1b\x11-X\xdc(\xb3\xf2\x85\xa7J\xf1\x15\xf2\x18\xd7\xfcP ?\xec(\xad\x1bQ\xfc\x0d\xa5\xefE\x9f<\xe5\xefH\xd8\x18'[\xac\x9e7\xaf\xac\x8fM\xac\x87\xa9\xa3Lw\x19\xba\xa9\x19R\xf5i\x15$\x02\x19J\x1ey\x01\x94\x10.\xa2/\xf0\xe6\x95\xac\x87\xd7\xaeh9\xe7GR}\xa8[{@\xcc;-\xf2}\xae\xcb\xe3\x9ek\x8ak\x81?\xc8\x9d\xa7j\xc2\x95\xf0N3\xb5i\xef\x0d\xaf\xd5\x8dBy\xa9/s\x12\x1b\x95V\xf9\x9d\xd8_\x87\x8a\x9d\xf7\x07(\x18\x93wsh\xff\x7f\xc5\xeer\xb1\xe2T'\xbb\xfd\xa3M\xcf\x8f\xe7Ziw\xaaaRK\x85\x8c\xed \xe7\xea\x8a\x90z~\xb6\xd1@ 5\xbd$a\xfd\x96\xd4t\x1c}\x1b\xcd\xecl\x1f\xe4\xf7o\xc4\xf2X\x8aC\xbddm\xd9\xbb\xf6\xee\xc4\xf8\x8d\x98\xc7\x8f\xd0;\xd9\xc3\x13\xe3\x1b\xb9\x90,m\x8cCu\xc6A\xf4\xd5\xbc}u\xca\xa6\xf4<\xa9\xc4\xc9\x88\x9e\xe1\x9a\xac\xe6\x12\x18\xb5\xd1\xb6zK\xc8\xe5`\xe7\xad\xde\xbaK\xd5\xbe\x1d\xa5\x1b\xb9G/\xd1\x97#\xfb\xf3\xc6So}e\xf6@\x9c?\x0eC\x08\xc3A\x93\xa1d\xe2\xa0\xd9P\xa2q\xd4\xdbE\x122c\xf5\x91\xd5\xd7\xe4\xcc\x0f\x97\xb9\x9a\x8f\xe4as\xa4G\xb6\x11\n\x1d\xc9\x84\x81\xb1|\xdb\xf3\x87M\x9d\xef7E~\xcc\x0dE_\xbcZ\xf9O\xba\x11\n\xd0\xe6D\xab\xcd\xed#\xb7\xc9\x91\x99\xe6D\x8f\xeeh\x95\xef\x1e\xb1E\xba\xfd\xfc\xcb/\x9f\xfdK\xb8\x06k\x9a\x9d>\xff\xf2\x9f?<[\xda\xe4\x02\xcf\x9f\x98\xf8\x9e\x05hZ\x10Rf}\xec\xbbx\xc5\xe3\x9bsU\x0c%\xca\x8c<\xb1i\xd0\xcf\xe1\xc7\xb7\xdf>\xad\xfe?\xf6\xde\xf5;\x8e\xdbH\x1c\xfd\xbe\x7fE-?DTB\x8f\"'\xbb\xf7\\\xedj\xcf\xd2z\x99\x89,\xf1\x8a\x94s\xf6\xf8\xf87\xc4\xf4`f:\xec\xe9\x1e\xf7\x83\xd4$\xbf\xfc\xef\xf7\xe0\xd5O<\n\xfd\x18\xdb\x9b\xae/\x969\x0d\xa0P(T\x15\xaa\n\x05\x9a%E\x1aP\x88\xc9\x9e\n\x99Q\xc4\xe1O\x05\x8d\x8e\x10\xaei\x9c\x0b\xe9\xc1e\x00\xb33\xe5\xb19\xa3\xa9\xcc\xc4\xe8\xda\xbf\xfc\xc0\x14$\x11\xac\x8a\xcd\x86\xa6\xb0\xa7YF\xb6t!d\x8a\xc0U\xecR\xf9\x8a\x01\xdb\xe6\x11%\x99\xe6m3\xb6q\xcf\x9e\x9dA\xb9\xaf\xc4\xd1'\"Y\x0e\x19\xdd\xb2\x13\x9eB\xe9\xf3\xa7\xf7O28\x10\xb6\xa4\xac\xf3\xf2\xe1\x0f\xcdi\x87{\x9f\xa2\xe8\x08?\x15$\x12:\x8c\xcf_v\xc5gzN\xd8)\xa0\xdb\xf8\x8e\x0d\xf1l\x9b$\xdb\x88.\xf8\\W\xc5f\xa1RB\xee\x9e\n\x0cyw\xd9.)\xa25;\xe8\xf1\xab\xbd\x01\x89\x938\x0cH\xc4\x19\xb8\xdb\xf39]l\x17\x17\x8c\x14<\xfb\xe3lq\x06\xf2\x19K\x12\x04\xf4\x90\xd3\xf5S\xddy\xe3*\x86\x03#N\x18\xd0\x0b\xc8)\xe3\xfb\"\x13\x8f~\x1eR\x1a$\xfbC\x181\x0c\xe4\xb9n\x15\xc6$=\xf2\xa7Bs\xfe\xa2%_\xf4|G\x8f\xdd\xae\xe9\x97\x03\x0d\xf8\x83\x13y\xc2\xa5\xbd\xbc\xb7\xcc\x16\x8e~\xe1\xa4\xbf\x8c\x8f\x0b\xf5\x06\xa7H\xf7\xf9\xfc\xe9\xbdzh\x825ix\xde\x14d\xc1\x8e\xee)\xdc\xb1c\xd2\xdd\x85\xf8ov\xc7\xdd\xa6q\"\x7f\xbd\xe0\xab\x1f\x90\x18\x12\xce\xc5|FL\xc1\x14\x07\xa6r\x8e\x07]\xbf4}\xe0\xf5\x9bI\x0e{r\xc8\xc4Rr\x8c\xf2Dq\xa2\x10\x0b\"\x19\x93\xe7}$Q\x94\x7fz\xcf\x07\xe7*7\xdf\xd1}\x8d\xeb\xd6\x82\xed\x88\xc2\x95\xfd\xfb! \xd7@\xe2\xb6/\x0cxr`\xc2\x93\x03\xf9[\xb1\x9b$\xa5\x17\xaa!\xeb\x8f\xe4!\xf7[\x1f!\xa6t\xad\xdey\xe4\x9b<}\xa0kM\x7f\xe2=\xc5xK\xc5\xd3\xba\x8c\xdb\x17p\xfe9\xa3\xf0@\xd3,L\xb8o\x9a1\x08\xdb\xad\x82CHL\xb6\xbaD\xadUJ\xc5K\x8a\xb2\xc3\xc5\xd3.->$9}!\xf2 7E\x1c\x08\x9ee\xf8\xca]\x1c\x14iJ\xe3<:\x02y a\xc4_^\x91\x1b*\xd9l\xc2 $\x91A\x9a\xae\x8a\x0d\xa4\x94\xc9H*\x1f\x1b\xcaU\xa7e\x1a^\xc5\xe9+\xba\x0d\xe3\x98!\xfb\x18\xe6;\x8d\xf8;\x1e\xe8Bp\x1c9\x84\xd9\"H\xf4~\x0c\xce\xf3\x19$\xb2$:\x89\xdb\xfb\x15\xce\xd5#\xc0<\x02\"6\xc9S\xd8\xf3\xc0\xc1J\xc3-\x1cY\xee\xf9+\x1dt2\xa1K\x86* \xa3{\x12\xe7a\xd0\xca{\xe4L\xef\xa1\xfc\x94\x85\xc0\x8c\x1e\x9b^\xfc\x8e\xed\xc2\x15\xadb5\xa5^\xeb\xa81\xa9\x1b\xc8*yh\x9c}\x181\xff\xc5\xd0}K\xed\xde]\xc6\xc7\xbb\xda\xdb=1\x90t\x15\xe6)\xe3p\xcb\xc8Jl\x91(\x91k\xda~\xf6\x87 \x14.\xf3\xc4\xe8+\xab\xc6.\x15rk\xcd\xaf\x15\xa7E\xe1\x8a\xa3$E]\x06Yq8$)W\x02\x07\x12\xdc?+b\xf6\x1f&\xfa\xc5\xc2To!w\xf4Z\xb2\x81B<3Z\xee\x89\x0cD\xbc*\x14\x1b\x04\xb64\xa6\xa2D\xbe\xf0U\x95\xbey\xd6\xbf o\xb3\xcf7_\x08\xe3\x1ex\xce\xec\xbc\xe0\x9eo\x08\x89\x12)\x89\x15\xc6\xf0\xeaw\xbf\xd3\xf1\xf5\xdb$\x81M\x92\xc0KX,\x16\xff\xd1\xf9\x99\x8dJ\xe2c\xf7\x07\x12\x1f\x17l\xbc\xb7i\xb2?\xdf$\xc9\xd3\xee'\x8bEW\xe4\x86\x1b8gM?s\x0co\x93\xf3\xdf\xb0\xb6O\xe1\xef\x1a)\xa3k\xff\x0f\xfd\xe4\xbfvL\xfeO\xe4\x81\xf4\x9f=\xbc\xe4\x8a\x9du\xdbc\xaaav\xfe6I\x16AD\xb2\xcc0S\x81\x02\xfbX _k\xd0\x1d\xabE\x82\x92\x06\x7fp\xd0\xe0\xfa\x98\xef\x92X\xa3\x95\xc5\xe8o\x93\xe4|\xb1X<\xd5\xad\xb4 \xc0\xb9\xf67\xce\x05\x9c,X\xaa\xb0FW\x82(\xaf\xdf\xdc\xbc\xfatu}\xfb\xf1\xd3\xd3\xae{@t/8E?\x80\x18BO\x8e?:\xc8\xf1.\xd1\xe8oF\x8a\x17/\xe17\x87\xd5\xe2m\x92\xfc}\xb1X\xfc\xa3\xfb\x11\x89\x8f\x17\xcc\xa4`_\x1e\x84\x1e\xfd\x8e\xa4\xd9\x8eD\x8cHzDu\xa4h\x8f\xa6\x19*\xdc\xb4\x06\xfa\x1c\xef\xab\xa18\"\x9c!\xf9W\xff\xfa\x12\xe20\xd22\x98~\xfc\x16'q\xbf\x01\xa3\x93\x92<\xa5\xa7au\xac4\xaf\x92\x87\x8fa\x14\xb1\x1f\xe4\xf3#L\x9b5\xbb{\xa2\xd1\xac\xcf\xd8Ac\xc1\x7f`V\xc6\x13\xf5\xc8\xbeR\xd7|\xb5r~\xbf\x82a\xd2\xec\xb0\x14\x88qtT\xc6t\xe7\xe4RZ0@6\xb9|\xbc\x84\x1f\x90\x9e<{\xd2\xecNJi5\xb40\xd7\xa9\xe4\x9e\xb3M\x92,V$\xe5H\x7fyv\\\xfc\xedL\xccX\x18\xa9]{\x9b\x0fy\xc6\xbecr\xa6\xf1\xd3\x9fn>~h\xfe\xe5\xe5\xcb\x97/\xbb\xb4g\xdfU\x07\xb5*\xf6\x15KU)l\xdd\"+\xa3\xd2\xdb\"\"\xad\xd7\xba\xbb\xcds\xfe\x9ed\xa5\xf0.\x80\xeeWt\xbd\xaeT\xdf\x85\xd4\xa2\xad\xe3]M)\x89\xb0\xe2\xdd\x7f\xb3i\xdf\xc9\xd3L\xa9\xb8\xebD\\\xa8\xed\xa7;>\xb0\x15e\x9b\xaf2\xef7aD\xbb\x02Nm\xd2k\x9afI\xac\xe5gyn\xde\x84i\x96/9\xe9_\xc2\xf3nO\xe5\x87\x8c\x03\xd4w_\xbbE*\x80v\xd43N\x80\xb3\x17p\xa6c\xed\xe6\xb4\x16\x02\xfb\xb3\x0b]?\x1c\xef\x0fd\xcf\xfa\xfaO\x81\xe2\x7fi?dx\xb7\xbes!\x7f\xb5\x91Fhs\x91\xc5\x12\x85\x19<\xd2(\xfa\xea>N\x1eE\x84y\xc7]\x962$\xdc\xe5\xd4&?]\x08\xbb\xaa\xc5dB\x12\xd4\x86d\x9c\xc3c\x8b\x9co\x9a\x1d\xdeq.VL$\xdeT\xcf\xab\xa04\xdf\x03\xad\xd7\x1a\xd9\xcf\x92\xf7\x9a}\xf1\xeeK\x96\x83s\xb6\x81\xd5t;\x87H\xe5\x93\xf8\xf1\x87\x1f\x9f\xea\xb8s\xc8\x827G\xd0\xaf9\x9f7\xeb\xea\xf9\xe2\xeb\xe7_gg\x9au\x14\xff\xed\x86<[\xfe6L\xccS6\xe9\x04=]>\xbd\xbea\x08\xe9\xd4;Y\x10\"7\xb8\x00\x1dA\x05\x97\x1bpBG\xe0\xb8\xae\xc0\xa9\x9c\x81\x03\xdd\x81S:\x04{\xbb\x04'u\nN\xe8\x16\x9c\xce18\xbekp\x04\xe7\xe0\x14\xee\xc1\x81\x0e\xc2I\\\x84\xa3: \xc7w\x13\x8e\xea(\xc4\xb9\n'r\x16N\xe2.D;\x0c'q\x19\x0ep\x1a\x1a\xdc\x86\xc8(\xbc\xc6u8\xb9\xf3\xd0\xa5\xae's \x8e\xe4B\x9c\xc8\x898\x8d\x1bq\xb0#\xd1\xe9L\xb38\x13Q\xeeD\x83\x13\xc3\xcb\xa5h\xea\xa3s\x00\x1c\xeaX\xc4S\xc3\xed\\tM\x1c\xe1`\xf4t1\xeaN\xc4\x83\xdd\x8cNG\xa3\xdd\xd5\xe8r6Z\xa8\x84w8b\\\x8e:\xa7\xe3@\xb7#\xd2\xf1\xd8\xcf\xf5h\"\x0c\xc2\xfd8\xa2\x03\xd2\x88E\x87\xd3FvCN\xe0\x88\x1c\xdd\x159\xb63\xd2\xea\x8e\xd49$u.\xc9\xf1\x9c\x92\xa3\xba%'pL\xe2]\x93(\xe7\xa4\x87{\x12\xeb\xa0\xd4\xba(\xf5>+\xbc\xd7\xca\xe5\xa6\xf4pT\"]\x95\x9ai\x8c\xeb\xae\x9c\xc0a9\xae\xcbrd\xa7\xe5P\x16@8.1\xae\xcb\xcay U\x02\xb6r \xf2C3_\xe3/a&.\x9d\xc8_\xca6\x07\xb2\x95\xb7\x9e\xeaJ\xb9u\x7fM}\xd2\xcac,\xff,E\xa8\xf2\x8a\x0e\xb8\xc5\x16\xd3/\xf9\xf2\x9e\x1e\xc7I\xb1\xe8>\xbb\xaf@\x8d\xa3\x1c\xba\xec\x9f\xf2\x80N2\xf9\xb0\xc65\xd9\xaad\xf5\x85\xf8\xbd\xd3\x8d(\xd9\xc3:`\x1d2\x92P\xd8'Y\x0e\x94\x1f\x8d\xf9\xb9\xb9\xd1\x88W\xd5\xee19\xed\xdd$se,>\x0c\x9f\x1b\xffG\\\xecW\xe2\xf0\xa7<%\xb5\xb3\xfc\xa61Q\xce\x1eK\xde\xac\xcb\xf3\x8f\x84W\xc1\xba\xe0 \xcce]\xac\"\x16l\xb1\x16\xc7\xed\xc70S\xeb`\xbdK\xdbv{{\xf8\xd6\x9b7\x8a*\xf8\xd9\x07?\xfb\xe0g\x1f|\x85\xd2\xec\x83\x9f}\xf0u\xd0X\xb5\xb3\x0f~\xf6\xc1\xcf>x\xac\xd7y\xf6\xc1s\x98}\xf0\x1d\x98}\xf0\xb3\x0f~\xf6\xc1\xcf>\xf8\xd9\x07\xdf\x81\xd9\x07?\xfb\xe0\xc7g\x81\xd1}\xf0\xdd\x04b\xbd{\x11\xe3\xebl\xb6\xc4\xa7\x13\xff\xfaK\xd99\xaaX@o\x97\xb9\xa9\xa2\xc5\xc0\x1em\xd5-\xfaw\x8d\xa8t1^\xe7\xda\xaa\x17}\xba\x9f\xb0jX\x8d\xe3\xffV\xb2\xfc\xbb\x94T\x05-\x90L.K\xb6\xfe\xad\x13\xf6\xf2\xe4\xd3|.\x861\xa2\xef}\x90\xe7}:\xbf{O\xaf\xfb\x84>\xf7\xc9<\xeeS\xf9\xdb\xc7\xf6\xb6\x0f\xf6\xb5\x8f\xefi\x1f\xe4g\x9f\xc0\xcb>\xa2\x8f}l\x0f\xfb\x88\xfeu\x8cw}\x12\xdf\xfa\x04\x9eu\x8d\xa5:\x17\xc3\x18\xcb\x97>\x17\xc3ht:\x85\x07}\xa0\xff\x1cW\x0eb.\x861\x17\xc3\x98\x8baH\xe8\xe3\x0d\x9f\x8ba\x0c\xf7\x7f\x8f\xec\xfd\x1e\xd7\xf7=\x17\xc3p\xfa\xbb\xb1\xden\x84\xaf\x1b\xed\xe9\xc6\xf9\xb9\xe7b\x18s1\x8c!\x0b\x8e\xf0g\xbb\xbd\xd9\x95\xf8\xa7_\x0ea\xf7\x15[\x83\x81\xbf1<\xe6k*\x9c\xcf\x1dw\xb0\x0d\x1fhV{\xb2\x87\x9f\xf7\xe8\x17\x1a\x14\xb5#B^\x95^\x96\xc2WH\x8a\n?\xfe\xb0\xab\xcbKx\xa9s\xfb\xe58\x97\xe1\x96u@S'\x1d\xc4w\xee\xfa\xc6\xb3\x0brvA\xce.\xc8n\xc7\xb3\x0brvAv\xbb\x9a]\x90\x06i:\xbb g\x17\xe4\xec\x82T0\xbb g\x17\xe4\xec\x82\xac`vAj\xc84\xbb g\x17\xe4\xec\x82\x9c]\x90\xb3\x0b\xf2\x9f\xc6\x05\xd9\xad\x93\xd0\xf5\x07\xcaW\xc1\x19\x07p\x1f\x9e\x10\x04\xab$\xdf \xeb\xbe|\xd6\\\xca\x11\xe9\xe8\xe3\x8c#\x9d\x835\xf5{\xc5\x8fa\xfcT\x13\xc6\xdc\x90\xcd\xc2L\x90\x87\xb7\x10\x8fS\xf3\xff\xe7m\xb4NK\x9e\x0c\xf9N\x8c\xc3\xff\xd37\xa9\x97\xe3w\xb2\xda\x04\x1aW\xa9\x00\xcb\xb1L\xe36u\xb61\xbaP\xeb-{=^\x9d\x1b\xab+\x80\x1d%\x01.\x07\xab\x80\xc9\xdc\xac\x02\xc6t\xb6\n\x98\xc6\xe5*`\x90\xe3U\xc0t\xeeW\x01=\x9d\xb0\x02&t\xc5\n\x98\xcc!+`*\xb7\xac\xec}d\xe7\xac\x80\xc1.Z\xd5\xcd\xd8\x8eZ\x01\x83\xdc\xb5\x02&p\xda\n\x18\xd1u+`l\x07\xae\x80\x11\xdd\xb8\x020\xce\\\x01\x93\xb8t\x05L\xe0\xd8\x15\xa01\xdc\xcc\x12k\x02'\xaf\x80\xde\xae^\x01\x86*\x0e\x80Q\xcc\xd6j\x0e0\xbd\x0bX3\x88\xd6<\x98\xcc\x1d,`\x14\xa7\xb0\x80I\\\xc3\x02\xa6p\x10\x0b\x18\xe8&\x16\xe0\xaco\x00\xf6\x8a\x0f\x80s\x1c\x0b0\xdc\x1d\xf7t\"\x0b0\xf7\xa5\xbdc;\xd4\xad,\xc0\x87Zn\x17\xb3\x007Q\x10\xeef\x01^Ng\x01Zb\x0dw@\x0bpV\x8a\x00g\xb5\x08p\xba\xa4\x05X\xa9\x88wO\x0bp;\xa9\x05\xe8*H\xc0P\x87\xb5\x00\x94\xdbZ@\x1f\xe7\xb5\x003\xd1\x10\x8el\x01\xa3\xb9\xb3\x05X0\xd2r\xea\xc8\x0en\x01\xa3\xbb\xb9\x05\x8c\xec\xec\x160\xae\xcb[\x80\xb5\xea\x04\x18*O\x80\xa1\xfa\x04\x8c\xe8\n\x170\xa2C\\\xc0\xe8nq\x01X\xe7\xb8\x00\x84\x8b\\\x00\xdaQ\xde\xf8\xdcY\x99\x02\x8c\xca\xc0X\x9e\x00<\xfc\xa9.\x07\xba\xec\x0d\xebF\x97\x9fc\x9c\xe9\x02\xb4S\x1b\xd7\xb1.`t\xf7\xba\x801\x9d\xec\x02Fu\xb5\x0b\x18\xce&\x08\xb7\xbb\xec\xd0\xe9|\x17\xd0V\\zG\xbc\x00\xeb\xc1\xcb\xe4\x94\x97M\x0d%\x8c\xa7v\xd0\x0b\xf0u\xd3\x0bh\x1c\xe0\x84o\x9d;\x92 \n3\xeei\x93\x7f\x13\xa3\xae\x15KI\x84*=\xdd\xaf\xf46\x89\xeb\x7fU\x85\x13\xe6\xd2\xdbd.\xbdm,\xbdm\x8e$a\xcaq4\x1a\xe2\xaar\xd4\x06L\xe7\xd0\xd5\x1c\xba\x9aCWs\xe8\xca4\xc0\x1c\xba\xea\xc0\x1c\xba\x9aCWs\xe8\xaa\x06\x9a\xc3\xcf\x1c\xbaj\xc0\x1c\xba\x9aCWs\xe8\xaa\x01s\xe8J\xdfd\x0e]i`\x0e]\xcd\xa1\xab9t5\x87\xae\xe6\xd0\x95\x84\xe11\x899t5\x87\xae\x10l2\x87\xae~\xb9\xa1\xab\xd5\xb1\x86P:\x87\xae\xe6\xd0\xd5\xcf\x18\xbaJ\xfb\x86\xae\xd2~\xa1\xab_G\xccj\x8e%\xcd\xb1\xa4\x1a\xcc\xb1\xa49\x96\xd4\x809\x964\xc7\x92\xe6XR\x0d4\xa7\x919\x96\xd4\x809\x964\xc7\x92\xe6XR\x03\xe6X\x92\xbe\xc9\x1cK\xd2\xc0\x1cK\x9acIs,i\x8e%\xcd\xb1$ \xc3\x83\x04s,i\x8e%!\xd8\xe4\xd7\x1aK2=\x92 \xc0\xe3\xa9\x04\x01\xb9\xcf\x83 \x1a\x0c\x1a>e{\x84\x88-\xbb\x8aW\xad\x8es\xa4H\xc2\x1c)\xfa\x19#E^!\xa2\xcb&\xaf\x1bbD+\x12\xdf\x97!\xa2\xd74N\xf6\x9f\xe3\xd0\xf7\xdd\xe15k\xd7\x8d\x0bu\x16\xa61-\xde\xa8\xd2\x00bBR+\xd7c\x03L<\xc4\xf2\xeb\"\x0es\xee\xa9\x87\x82\xe4\xc9\xfei\xb5a\xe8\x97C\x12\xd38\xefb\x11\xc69\xdd\xd2\xb4\xf6w\xc5\x1bm\xd6\xb0ynT\xffu\x84\x0f\xc9\xa3`\x8e\xe7\xbf\xaf~\xe7z-\x89)\xf7\x1f79!%\xa1\xb4nW$\xa3K1\xa5\x8c\xf3\x92:\xefh\xfeM\x94\x04\xf7\xdf\x1c\xbf\xa5\xe1v\xd7W\xf7\xacX\x1f\xcbPC\x05\xb4T\xd8\x91l\xd7c\xd3t$\xc2\x81\xa4\xf92\xa3\xf9rG\xc9\xba\xfb\xa0\xa9Q\xd5\xd9\x9dn\xda=\x0de\x7f\xe6\xa8\xb9=b\xae\x9b4\xd8'\x0e(qxM\xd2<\xa3\xf9\xb7\x9c\x06\xff\xd2\xf9\x99\xaf\xf9\xd5\xeb\xe6\xfa\x0dY\xbc1i-K\xb7j\xe9\"\xd0\x17\xf1\x16\x8e4\x0f\x9d\x18)\xd8;\xa7\xa3C\x90:8V\x07\\2]\x009\x1c\xa6\x1c\xc0\xed\xafe6T\x9c\xd18+2\x08\xc8A\x18,\xc2\xe0P\x7fN\x8bH\x06\xdc\x0fi\x12\xd0,\x13\xb5\x96\x14\xe5\x85S\x94\xfdO\xb0#a|\xa1\xcfO\x08\xe3 *D\x95\xa6(\xaa}\x0e<\x08 \"l|lU\x08N\x8c\xaaJ\xaaV\x05\x8e\x9fh]\xc3\xc0\xa5\"\x85<%q&J8\xedI\xb0\x0bcM\xe5U>nKN)\xb0\x12}\xc7\xa5\xa3w3\xd7\xfe\xcfC]<\x19\xdd\xa9\xbe\xa2\x12\x03^\xb4L'\x95\x15\x0c\xdc\x1f&\xc1\x05n\xe4\x01S\x87\xd7!\xc5\x158f\x01\x88\x99\x80M\xba\x97\x1f8\xa4\xbc\x02L~\x94\x9dx\x80# `\x88\xe8\xd4\x06\xad\xcf\xdaZA\x01g\xa6 \xd9\xef\xc3|9\xbe\xc6\x82\n\x01\xd6\xb9\xd8\xf9B\xc20\x01\xd1\xf9\x9a\xfdq\x124x\x91g\x92'i6I\xf7\xedYnR\x9e\x95\xc2%\x1c$E~(\xf2\xeao\x87\x94>\x08\"t\xfa\xe1\xc7\x9a\x89q-5\xc0$\xbd\x93\xc3a\x92~9\x9f\xca\xd3\xcf$\x03\xd0\x87pM\xe3\x80N\xd2y\xc9\x1f\x95\xfa\xd5\xda6L\xa0%\x19M\x97\xf2\xf1\xa4q\xf1h\x98\x0dB`4\xbc\x06\xa5\xba\xe6\xd7\x84\xe1\xb6py\xb0\x00\xf8\x0b}\x92R\xf8k\x91\xe5@\xb6)\xa5\xcc\xea\x92/V\x88$X^&\xd4\xd0?\xcf\xc7\xdaS\x12K|\x05R\x97\x87\xc3\xb7$\xdb\xc1:\xa1\xe2\xf9\x01a\xcf\xf1\xfc,vn\xff\xd2\xc9\x92\x93|\xfc\x9a\x99w\x8d\x12\xb0\xec\xec\xce\xcc:f\xa9\x11Y\xd0]\xf6\xb6n\x98\x93\x8d\x0e\xd5\xae\x1b\x89\x85L\xdd\xc1p>\xb2\x18\"n3d]\x08C\x97.\x1f\x92\x9c.mh\np\x8e \xa8q\x19\xf0\x11;{\xb4 \xa8\xe1\x00=$\xa8.\x1d\xdf \xf6h\x1dh\\\x18s\xf1\xeb\xf0\x15\xdc\\\xbd\xfb\xf0\xe6\xf5\xf2\xbb\x9bw\xcb\xdb\xff\xb9~\xb3\xfc\xfc\xe1\xcf\x1f>\xfe\xe5C\xaf\xb6\xd7\x9f\xde|\xff\xf1\xf6M\xdf\xb6\xaf>~\xf7\xdd\xd5m\xcf\xd6\x1f\xaf?\xde\\\xbew6\x96\xa92/z\xcf\x1b#\xea\x9ap\x13nc\xba\xfe.\xdb\xde\xca\xaa\xc0\xe2\x11 \x9e\xd2\xcd\x7f\xaaWto\x1c<\xcd\xef\x084\xc0\xb8\x10/\xe0\xfb$\xef$j\xa2\xfb\x10$}\x01\xd7\\\xd5\x92\xc8\xd5\x91\xf9t\xd8\x04/N\xc6\x9d%\x04\xa4I\x11\x1b\xb2\xba\xea\x80=\xc6\x08\xa8!\xf0\x87\xaf\x1d_\xdb\x8e\x9aM@\x8b\x11\xf0\x12%\x808WU\xe0\xb5\x10\xe06\x03\xda\x80<\xbe6\xc1\x8b2\xe0M\x1d\x06\xce\x83n\x13\xfc\xf8E\x81\x0f\xe3*\xc0/\x1d\xf4Y>\xf0_B\xf4\xe1Y\xdb\xc8t\x94n\x7f\xbc\xa7YN\xf6FG`\xedS\x9f)\xbb\xfdCM(O\x93\xb63E\x13z\xe1\x83 }\x85J\x18\xaf\xe9\x17,\"X\x1e\xf5\x91ie\x18\x17\x8b\xc4\xd8\xd4\xf0\xd3\xb8L\xe35//\x1cR\xca\x0c\xbb\x0b\xf9v\xdb>\x14\x8f\xcb\x89\x7fr\x9bO8\x1c*g\x02\xc3\xcd\xa5ykJ\xda\xfc\x117(W\xb3A\x891\xacf\x83\x12\xc3\xde0\x1b\x94]\xf0\xe2d\x1f\xbd<\x1b\x94\xe0e\x95x-\x04\xf8(\x01\x01\xb3A\x89d\\\x05\xf8\xa5\x83>\xcb\x07\xfeK8\x1b\x94V\xe8\x85\x0f\x82\xf4\xb3AY\x81\x9f\xc6\xfdE\x19\x94\\\xd0,\x1f\x92<\x8c\xb7K^&\x02c\\\"\x08\x88\x15.\x15\x1f\xfd\x1c\xa3#7\xb6\xf7\xb8\xee\x0d\xdd\xe0\x99\xd7\xcaG\xcdx\xe3\x8d\xf4PW>~\xe5\xb3\x16\xb1\xa1\x92b\xca8\xcb\x1f\x13\xf6\xed&\n\x03\xb6\x8c\x9ca\x8c\x8b\x1e1\x0bh)\xeeG/I\x9e\x93\xe0\xfe\xb4>\xf1\x1a\xa6Kk:\x90\x00\xd4\xc8\x80\x1e\x1d\xa4\xbc\xa0k\xb4\xcaGc\x00^X\x801\xbfK\x0f^h\x807*`\xcf\x10\xd3\x03>oL\x0f\xdes\x82^\xf3\x02W\xe6\x99\x1e\xd0\xbb\xbe\x0dJ\nX\xb2\xd4\xf4`\xc9]\xd3\xc3\xa9Q\xf4\xd3tu8MN\x9c\x1e&\xcf\x94\xd3\x03>\x7fN\x0f\xb6\xac:=\xf4`\x07\xec\x91XA\x8f!\xf0\xea\xb8\x0e\xa6\x1c>=\x0cB\xcb\xad\xad\x9b\xe0\xcc\x02\xd4\xc3 \xa5\x9d\xdf1\x0d\xfa\x12\x10|\xac\xe4&\xf4:y+\xe8EI\xe8MM\xf0?\x91+\xf0;\xf5\xb4\xa1\xcf\xbeQ\xe0\xcf\x020\x84\x0d\xa0?+\xf4<\xc1+\xf0:\xc9+\xc0\xe4^\xea\xa1\x17\x85zQ\xc6'{S\x0f\xd6\x9cN=\x9cjz\x88LK=\x9c\n\xc1\xb1\xf2J\xf5\x80\xcd6\xd5\xc3\xa9h\xe0\xceW\xd5\xc3\xa9\xf0\xb3e\xbc\xea\xe1T\x98\xa1rf\xf5p*\x14\x9dY\xb7z8\x15z\xd8\xbc]=`\xb2y\xf5p\x9a\xf9M\x91\x0f\xac\x07\xa1\xe4p\xf3\xf7\xb6\xab\xfc\xed\xa9_\xecy\x03\x19\x9aS\xd0\xcf\xb0\xf3qk+\x98\x0f\x1a\x02\xbc\xf7\x98\x80\xf9\xa0\x81\x80>\x1bF\x81?\x0b\xc0\x106\x80\xfe\xac\xf0s\x1c4\xaa\xa2\x15x\x1a \xda\xd8\nCw\xc1Q*\xba\x0b=Y\xbb/c+)\xb6\xdcDd\xeb\xd7t\x10\xb3`\xf3\x8c\x9a\xf0\x15|\xf3\xfe\xe3\xab?/\xaf^/\xdf\xbe\xbf|\x87\xce\xbdiC\xbb\x9f\xcbon\xde|\xc0$\x105\xa1\xdd\x0d:\x0f\xa9 \xedn>\\\xb9\xd3\x91\x9aP&'\x8dA\x9e\xc6~Z\xbf\x8d\xc8\xb6VkZ\x94\x87\xf9&\n\x92\xfb\xab\xd7\xc2$R; B\x11\xfft\xf5_\x87\x1e\x91\xf3&\x0c`\xc1\x01\xd2\n\x15\x9d\xec\xc2\x08\xc8\xfa\xfaD\x05x\x84\xe2\x9b0\x02\xc6\x9e\xe4mX\xe0\xaf\xb8\x91|\x13nE\xf6\x1b\xb3\x19\x94\xfb\x9f\x87\xeb\xeb\xb7\xa9\x88\xfc\x1ac|k\x87i^\xde*\x83\xbb\xfcn\x98\nx<\x92LZ\xee\xb9\xb8\xd1F\xd4-\xaf\xcai\xe0B\xa0\xe2\xf9\x8c\",n/\x85\xe0\xa7\x06*\x9c1_\xfb+@/\xe5\xe75O\x01~\xb3\x15\xd0C\xce\xf4\xdc\x04\xbd6\xc0\xa1X\xe9\x8aE\xd9\xa0\x07\xe1\xa0'\xf1\x18\xd0\xf5\xd7\xff\xf6o\xcf\xff_\xbfF\xbd\x89\x08} \xbc8Pp\xf8\xfa\xdf\xfe\xfd\xfe\xf9/\x1fYe\x01\x17\xab(\x0c\xfeL\x8f\x0d\xaf\xc3==\xd6\xeb[m\x92\x14\x8a\x8c\x8a\xf2o5\x17\xc4\xf7\xe5vF\x0f\x8c\xcf0jBO\x02\xf5;\xcf\x94N\xa3C\x1a&i\x98\xf7\xd8\x1d\x93c\xaap\xc4\xa1\xe6\xbde\xfd7\xab\xb7\x9c\xebE\xa8\x1e\xdc\xee-\xe1\xbc\x89\x05\xbd\x08\x06}e[/\xc2A?\xe2A\x7f\xa9vZ4\x7f\x16y\xd6O\x9a\xf5\"\x8c\xaf|\x80ar\xec$8\xfa&\x9d*\xf0F\x0e\x8b\x18\xb3\xb4\x93x\x89\xf1M\xa3q\xc0\x8e\xbd:\xfe\x8d\xc4y\x18\xd3%\xd6J\xc6Z\xc7(\xab\xd8C\xe8\xf9\x88:\x0f\xad\x80\xa6\xa8\x00/)\xe1\xa1\x03<\x08\x01\x9e\xc4\x00\x7f\x89\xefI\x14\xf0%\x0c\xf4\x91\xef\xd3#ubi\xee+\x82< \x80\x15\x01\x02zI\xed\x890\xf2\x95\xd0h4\xd0\x08\xe0\\_\xde\xe3\xba\xddZ\x0d\x87\xcd{\xa6\x10^\xf1d\xf9K\x9e+\xefJ\xce\xef8i\x80\xe49\xdd\x1fxb~\x9e\xc0>\xcc\"J\xd6\xfc\x15\xc6\xed.\x97\x0f\x955=9\xb5\xdc\xa4\xf6\xec-B\xca&\x90&*\xb3h\x0c\x99\x8a^Q\xd5[5a\xd0\xb9\xbe\"b&\x00\x88P\xa1k\x1d\x14\xe0v\xa5+\xd0\x87 `\x88\x88\x0e\xd39\x02r\xf6\xd0\x9b\xdd\x8a\x9a\xb6&\x152\x18\x86\"\xa8+\xc0\xe5\x1f\xca\xf2\x0eZy\x87\xa7|\x02Q=CN\xd3\x04\x97<\xc2H\xa8\xc5C\xed\x05\xa7&\xf4\x1a\xca\xa5\x01\x11!\x1c\xaf\xf1\x8cS\x1b=\x00s\x82PKc\x08S\x91wL\x0d\xfev[\xf3\x13Q\xc6\x02\xf3\xef\x19+\x8b^\xe6\xf2\xf2zi;\x97\x97\xe7`\\\xbc1i=\x97\x97\x1fc\x00\xcc\x05\xbb\xd3\\\xa5\x9b\xfc\xd2\x1c\xfez\xdc\\^^\xc1\xc0\xfd1\x1f\x7f\xb4\xf0\xbf\xf3\xf8\x83\xb9\xe2\x84\xe4X\x03\xae>\x17\x94\xe6\xf2\xf2\xb8\x0b?Cpu_\xd7\x19\xd2\xfb\\^\xde\xca\x1fsyy\x8b\x1d>\x97\x97\x9f\xcb\xcb\xaba\xfa\xb1\xd0\\^\xbe\x0bsyy|U\xcc\xb9\x1a(\xb6b\xcb\\\x0d\xb4\x05^\x9c\x8c;K\x08@^9\xc4\x1ec\x04\xd8ckM\xc0_-D\x8b\x11\xf0\x12%\x808WU\xe0\xb5\x10\xe06\x03\xda\x80<\xbe6\xc1\x8b2\xe0M\x1d\x06\xce\x83n\x13\xfc\xf8E\x81\x0f\xe3*\xc0/\x1d\xf4Y>\xf0_B\xf4\xe1Y\xdb\x08w\xb5\x0f\x11\x91)?\xf5\x99\xb2\xdb?\xd4\x04\x8f`\x94\x82^\xf8 H?W\x03\xad\xc0O\xe3\xfe\xa2\xaa\x81\xce\xe5\xe5\xf1\x86\xd5lPb\xd8\x1bf\x83\xb2\x0b^\x9c\xec\xa3\x97g\x83\x12\xbc\xac\x12\xaf\x85\x00\x1f% `6(\x91\x8c\xab\x00\xbft\xd0g\xf9\xc0\x7f g\x83\xd2\n\xbd\xf0A\x90~6(+\xf0\xd3\xb8\xbf(\x83\xf2g\xcf#\x9f\xcb\xcb\xcf\xe5\xe5\xcd\x1f#G\x06\xf4\xe80\x97\x977\xc3\\^\xbe\x01\xe8]\xdf\x06%\x05\xd9\x9bz\x98\xcb\xcbK\xe8\x81\xe0Xy\xa5z\xc0f\x9b\xea\xe1T4p\xe7\xab\xea\xe1T\xf8\xcd\xe5\xe5\x15\xf4@\xd1\x99u\xab\x87S\xa1\x87\xcd\xdb\xd5\x03&\x9bW\x0f\xa7\x99\xdf\x14\xf9\xc0z\x98\xcb\xcb\xbb\xbe\x16\x80\x0c\xcd)\xe8g\xd8\xf9\xb8\xb5\x15\xcc\x07\x0d\x01\xde{L\xc0|\xd0@@\x9f\x0d\xa3\xc0\x9f\x05`\x08\x1b@\x7fV\xf89\x0e\x1asyy\x01\xc8\x8a\x1az\x18\xc0,\xd8<\xa3&\xf8\xd7\xe4\xd0\x83w\xa5\x0e=x\xd7\xef\xd0\x83OU\x0f=\xf4\xac\xf5\xa1\x87i*\x80\xe8\xa1G\xe4\xbc \x03Xp\x80\xb4BE'\xbb0\x02\xb2\xbe>Q\x01\x1e\xa1\xf8&\x8c\x80\xb1'yG\xafn\xa2\x87\x13\xd4<1\xc1\\^^\x0b^\xf3\x14\xe07[\x01=\xe4L\xcfM\xd0k\x03x\x14\xdeT\xd0\x83p\xd0\x93x\xe0_\x90SAO\"B_BB\x9fB\x9d\nN\x8f\xec\x89\x0bx*\xc0g\x185\xa1'\x81\xfa\x9dg\x0e}\n|*8\x11\xa6\x87\xb9\xbc<\xb2\x91\xb7\x84\xf3&\x16\xf4\"\x18\xf4\x95m\xbd\x08\x07\xfd\x88\x07\xfd\xa5\xdai\xd1\xfcY\xe4Y?i\xd6\x8b0\xbe\xf2\x01\x86\xc9\xb1\x93\xe0\xe8\x9bt\xaa\xc0\x1b9,bsyy\x8c\xd0\xf3\x11u\x1eZ\x01MQ\x01^R\xc2C\x07x\x10\x02<\x89\x01\xfe\x12\xdf\x93(\xe0K\x18\xe8#\xdf\xa7G\xea\xc4\xd2\xdcW\x04y\x12\x00+\x02\x04\xf4\x92\xda\x13a\xe4+\xa1\xd1h\xa0\x11\xc0\xb9\xbe\xbc\xc7u\xbb\xb5\xe6\xf2\xf25\xb0/\xd7\\^\xbe\x0d\xc8`#B\xd7\xb8f\x02\x80\x08\x15\xba\xd6A\x01nW\xba\x02}\x08\x02\x02\x86\x88\xe80\xdd\\^\x1e\x11\xe0\xf2\x0fey\x07\xad\xbc\xc3S>\x81\xa8\x9e!\xa7i\x82K\x1ea$\xd4\xe2\xa1\xf6\x82S\x13z\x0d\xe5\xd2\x80\x88\x10\x8e\xd7x\xc6\xa9\x8d\x1e\x809A\xa8\xa5]^^S\xe2\x1dY\\\xbe\xd6\xb2wi\xf9\xd2\xd2\xbd\xa1\xf9\xa0\n\xf3]\xfb\xc0\xb0\xc4zE\xa1?\xb8\xea\x05\xacF\xb0\x1a\x05\xaaY\x90\x1aw\x9f\x855\x8dgA\xab@\xb7\x0bs\xd6tY\xa4\x06%\xec\xdc'\xb8\xebT\x97\xf0\xf9\xd3\xfbg)\xcd\x92\"\x0d(\xc4d/9\xb8\x88\xc3\x9f\n\x1a\x1d\x81\xb1u\x1enByP\xcae\xf1\x0eQ\x1b2\x0dI\x14\xfe\x8d\xaeMW\x97\x0ei\x92'A\x12\xc1\xaa\xd8lh\xaaj},D\xddJ\x81=\xec\x8b\xac\xdcL@r\x88(\xc9rS\x8fIL\xe1\xec\xd9\x19\x04;\x92\x92 \xa7)\xeb\x8br\xbb\x162\xba\xdd\xd3\xb8\xdc\xdc\x9f?\xbd\x7f\x92\xc1\x81\xe4;1Dy/\xda\xd47k\xb4)\xa2\xe8\x08?\x15$bs^\x0b\x8a\xc8\x0e\xf9\xdc\xcfI\x06al\xea\xe2\x8e\x0d\xf7l\x9b$\xdb\x88.\xf8\xecW\xc5f\xf1\xbaH\xf9\x1d\xaf\xbb\xa7\x02[\xdei\xb6K\x8ah\x0d+*\xe4N@\xe2$\x0e\x03\x12\xf1\x8d`\xea\xff\x9c.\xb6\x8b\x0bF\"~\xe7\xeclq\xc6d\x02\xaf/\x1a\x04\xf4\x90\xd3\xf5Ss\xdd\x94\xab\x18\x0e\x8cha@/ \xa7d\x9fA\x91\x15\x84MX\xdc\x0e?\x84\x11\xc3&O\xc4\x8d\xb80&\xe9Q\x14.=\x1e\xa8\xac0\x9a\xef\xe8\xd14\x00\xfdr\xa0A\x0ea\xce\x8e#\xec\xfc\\\xd5t\xc9\xe9\x17\xbe0\x97\xf1q\x01\xdf&\x8f\xf4\x81\xa6\x17\\t}\xfe\xf4^iM\xd6$\xdfQS\xf7Y\xb0\xa3{\nw\xbb{\x9c\xc8_/8\x87\x04$\x86\x84\xf3>\x9f\x1d\x93\xb9\xc5A\x96\x9e1\xf6N\xd3\x07\x9a\x8aI\xee\xc9!\x13\xcb\xcd\xb1c\x87+Y\xa5\x86;\x0dBQ\x07\x950u\x1eE\xc9c\xf6\xc2H\xf3\xdf\xc2\xd5\xa6\xc2\x8e-\xd6!M\x98\xaeX\x97\x13\xe0j)\xcb\x8a=]\x1b\xaa\xbc\xb2n.c\xf8\xf6\xf6\xf6\x1a\xde\xbd\xb9U\xe5a?\x7fz/8\xfb\x18\xd2\x88\x9d\xfb~h3\xde\xed\xf1@\x7f\xfc\xe1G\xf3\xcd\xc2\x07\x12\x15|\x99\xe4b\x0b!\xccIzH\x93u\x11P 1\xd04M\x8c \xc1\xbf\x85\xcb\xea\x16c\xc6K\xdb\x12F\x14\xbaft\x0bH\xc0\xb6g\x92\xdc\x17\x07\x90I\xeb\xc0\xb4\xcfZ\xce\xc2\x8c\xdb\xe7O\xef9\";\xf2\xc0\xd9b_\xe3\xd2\xb5`S\xa2\xf0f\xff~H\xc25\x90\xd8\xec\xb8\x14X\xf0-\x98\xd2M\x92\xd2\x0b\xd5\x9c\xf5J\xf2p\x15Fa~\x84\x98\xd25_\xf4\x15\xbf}\xc1\x19cm\xec5\x89\x990\x8a\xb7\x947\xe1;e\x01\xe7\x9f3\xaa\xee<3B0Vb\xbb^\xf0\x12\x89\xc9\xd6\xec%X\xa5\x94\xdc\xb3\xdd-\xbb]<5\xd1\xe8C\x92\xd3\x17\x903Y\xba)\xe2@\xf0;\x9b\x81\x94 A\x91\xa64\xce\xa3c\xcd\xb5%\xb7d\xb2\xd9\x84AH\"\xab\xe4^\x15\x1bH)\x93\xc7\xf4\x82_`\x0ds\xd5u\xc1V\x90[\x1e\xe5.Y\xd1m\x18\xc7\x0c\xf1\xc70\xdf\x19\x85\xec\xf1@\x17\x82O\xc9!\xcc\x16A\xb27K\xac\x1b\xbek2H\xf2\x9d\xd8\x9aq{\xf7\xc3\xb9\xb4~\xe8\xfe\x90\x1f\xe56{\n{\xee\x01Y\x19\xb9\x8b\xa3\xcf\xbd{\xe1\xfe\x10Q\xa668\xffBv\xa0A\xb8 \x03\xc8\xe8\x9e\xc4y\x18hSa\xf8\xb6\xe9\xa9\x98\xfd\x8c\xd7\xef\xd8\xfe^QU\x9b\xa1\xa6s;\xcaU\xdd)^%\x0fT\xcdC\xf2^w\x0en\xf3\xe0\xee2>\xdeUF.\x89\x81\xa4\xab0O\xd9~\xb1`\xa1\x04%\x89\x12\xc9 @t\xab\xc0\x84\x17\x97\xb5\x02\x93\x95\xd5\xbe(\x0d\x07-\xa7\\+^\x8d\xc2\x15GO\x8a\xd8\x0c\xb2\xe2pHR\xae\x8e\x0e$\xb8\x7fV\xc4\xec?L \x89%\xcc\xd4v0\xe9\xdcd\x03E.\xa4\x82\xdaa\x19\x93Id\xbd\x0e\xc5v\x83-\x8diJr\x8e$\xb3\xb3\xcb\xcb\xddl\x14A|]\xcfo\xbe\x10\xc6y\xf0\xfc\x05\\3\x9c\xd8\xf6\x92\xe8\x91zM\xb4W\xbf\xfb\x9dy\x7f\xbcM\x12\xd8$ \xbc\x84\xc5b\xf1\x1f\x86\x8f\x18\x1e$>\x9a~&\xf1q\xc10x\x9b&\xfb\xf3M\x92<5}\xb8X\x98T@\xb8\x81s\xd6\xcdg\x8e\xffmr\xfe\x1b\xd6\xcfS\xf8\xbbQ\xc6\x99\xfb\xfa\x87\x8dX_;\x88\xf5'\xf2@\xc6\xa1\x16\xbc\xe4\xa6\n\x1bb Q\xc2\xec\xfcm\x92,\x82\x88d\x99\x95&\x025\xd6DL\xad\xd6\xcc4\xba\x96X%\xb5\xfe\xe0\xa0\xd6\xf51\xdf%\xb1\xd1\xe6\x10\xf8\xbcM\x92\xf3\xc5b\xf1\xd4\xcc=\x82T\xe7\x96/8\x7fq2\xf6\xa1\"\xeb\xe0J\x10\xf1\xf5\x9b\x9bW\x9f\xae\xaeo?~zjv!T\x9ch\x1bR\x0cj#\xdf\x1f\x1d\xe4{\x97\x18m\x17F\xba\x17/\xe17\x87\xd5\xe2m\x92\xfc}\xb1X\xfc\xc3\xf4)\x89\x8f\x17\xcc\xc0b\xdf\x1f\x84\xf5\xf0\x1dI\xb3\x1d\x89\x18Qm\x130\x13\xad=\xbeq\xf0p\xd3\x1a\xfas\xbc\xaf\x06\xe7\xa8q\xe6\xe7_\xfd\xebK\x88\xc3\xc8\xc2\xc06\x8c\xb4\x9c\xca\xceB\x9c\xaeJr*\xdb\x18V\xc7\xca\x02QR]\xbc\xc5pT^;\xa6\xc3u\x9d>\xd1X\x18\xcf\xd8\xb1n\xc1\x7f`V\xd8\x13f\xba\x97\xda\x86i\"U\x9dC\xac\xb3\xae\xdbR\xb8\xc7\xd1Q\x1dT:\xa7\xc5\xd2\xce\x03\xb2\xc9\xa90L\xf8\xd1\xf4\xc9\xb3'\xbaN\xa5\xf6Qh\x88\x03\x11\x95\xfcw\xb6I\x92\xc5\x8a\xa4|\x02_\x9e\x1d\x17\x7f;\x134\x10\xe6\xbe\xe9,\xc3\x87?c_3I\xa8\xf9\xe0O7\x1f?\xe8\xfe\xfe\xf2\xe5\xcb\x97\xa6Ubm\xaa\x03\xb40\x95\x12\xb65\xa5\x99 \xce\x11EF\x95\x83j[DD[F\xac\xdb k\xb0\xa6\x95\xb2\xbf\x00\xba_\xd1\xf5\xbaR\xfb\x17\xd2\x8e\xd0\x1e\xbbk\xaax\xc3 s\xf7\xdf\x8c4w\xf2L\xd9\xf0\xd2)B/\xd4&7\x1f\xdc\x18\x1f\xb0\x8d^\x1d\xa96aDM\x82X\x89\x85k\x9afIl\xd9#\xd2\xe7\xc1\xdf\xf4X\xf2\xa5z \xcfM\xbd\x96\x9f\xf3\xb0\x9d\xfc\xfak?e\x00`\xc1\xe6\x8c\x93\xea\xec\x05\x9c\xe96Ms\xea\x0b1\xb7\xb3\x0bso|V\x1f\xc8\x9e\xf5\xf8\x9f\x02\xf5\xff\xb2|\xcef\xd5\xfa\xdagjW\x1bi\xf87\x99E,r\x98\xc1#\x8d\xa2\xaf\xee\xe3\xe41\xe6\xdb{G2 \x10\x14Y\x9e\xec\x8d{\xa0\xc9\x9d\x17\xc2Bm\xb1\xacz\x13\xa6\x1c\x98q /(\xc4\xf9O\xd7\xed\x1d\xdf\x1f\x8a%wI\xb4\x96%\x8a*l\xb8\x17H\xb22H\x0f\x8c\xe4d]\x8f|\xa8\x92\x8d\xe1\x9c \x0eE\x80\x8e\x1b@\xf9\x9f~\xfc\xe1\xc7\xa7f\x8e\x1f\xce&\xcd\xd1l\x9c\xc2\xe9\xc1:|\xbe\xf8\xfa\xf9\xd7\xd9\x99q\xdd\x9b\xffo\xcf\x1a\xb0\x1e\xbdlqHDzD\xcf\xbe\x1b\xc7\xac\xd2\xa7\xae\xfc\xf8y\xdd}_z\xba\xbf\xcah-\xfep \xdb0\xe6\xf4\xac#\xd5\xe8\xb7\xfa\xa4\xcci!q\xfd\xafj\x08\x157\xa8k\xe9\\\xef\xa16\xf9\xa6yq \x8d\xab\xdbB\x1f\xcb\x81WF\xd2\xfeo\xf7\xfc\xa9\xc6Q\xa4b\xff\x94\x1e\x19\x92e\xc2\xb7tM\xb6\xf4\x13\xfd\xa9\xa0Y\xbe\x10\xbfw\xba\xf9\xa9\xa0\xe9\x91w\xc0:d4\xa1\xb0O\xb2\x1c(\xf7\x7fp\xe7H\xa3\x916\xee\x8d\x98\x9c\xb6\xd8\x99\x9c\x9e\xe6x\xcd\x87\xe1s\xe3\xff\x88\x8b\xfdJ\x9c\xe0\x95\x8b\xac\xe6\xb0\xd94&\x1a$E\x9c/y\xb3\xeeF~$\x19d4\xbf\x800\xcf\x94o/\x83\"\x16l\xb1\x16~\x94\xc70S\xeb\xa0\x8f9\xe9b?\xc8\xd0S\xbd\xe9\x80\xe7\x8d?$kz\x15o\x92\x9e\x91'i!.\xe3dM\x97a\xbcI\xba\xb1#4\xc3+\xff\xc6\xd2P\xc1\xd0\xd0\x9d\xadK\xfe\xdb\xd7\xda\xa0\xab\xc3{d\xe56K!\xc2a\xdd\x1aJ\x07\xf6\xef\xb4\xb9>\x9dd\x1cc\xc7Q\x98\xe54\xe6\xf1qt\x9b\x98\xe6\x8fI\xda\xa1\x8a\xf1{\xeb2k\xbe\x0fv$\x8ei\xd4Yb\x84\xcc\xe8\x08\xc4}\x12\x87\xf7\xa6G\x995]\xf1\xed<\x12C\xe6_\xcc\xd5\x96\xad+\x9d\x1e\x02\xefw\x0dku\x0fu\xfb\xcas\x8b2\xc3\x18M3r8,\xbd\x1a\xf82\xc46\xb4g\xd8i\x9a\xac\x8a0Z/s\xb2\xc5s\xd16\xb1\x0b$\xe3(kz0\x8c\xa2\xcbW2\xe4*Yx\xcc\x15\xd6>\x90\xdc\x90\xe9\xe5\x90'\xa5:\xdd'\xeb\"\xa2\xbc#\xcdg\xd6B\xb3\x9eC\xc8\xbe4_f\xa6\xc4(\xec\x08\xc1\x8e\x06\xf7Y\xb1\xef\x92V\xfc\xfe\x9d\xc0\xa0m(~/0\xbajW+\x12*u\x99\xad\xef\xbd\xd9\xa2\x1c\xf2\xec&\x8c\x03^\x14\x89\xf5\xf5U\xb6\xbe\x87\xdf/\xfe\xf8\x87\xbam\xde4g+\\\xb4\x06\xadF\x8fW~|M\x7f\xba\xefK\xab\x83\x1b?\x06\xa3C\xb5\xeaah\xdc\x1c\xe3 \x8c\xb7=\xed\x8cL\xb4\xee\x8a\xaeU\x92D\x94\xc4\x86Y\xb6\x06E\x9aV\xb2U\x8fI\xea\x8c\xb2\x9e3\x9esz\x06 \xbf|\xce\xe9\xd1\xc0\x9c\xd33\xe7\xf4\xcc9=sN\xcf\x9c\xd33\xe7\xf4\xcc9=sN\x0f\xcc9=\xc8,\x959\xa7\xc7\x87ZsN\xcf\x9c\xd33\xe7\xf4\xcc9=%\xcc9=sN\xcf\x9c\xd33\xe7\xf4\xcc9=sNO\xfb\xc79\xa7\xc7F\x9f9\xa7\xe7W\x93\xd3c\x8b\xfe COcd\xf5\x88\x80\xa6g\xb8\xa9\x1d,6,\x9a%0l\xcc.pt\xd2\x0e\xfd\xb6\x02\xbe\xf6>Z\xc1]\xbf\x90\xae\x83\x8e\xe5Zx\x92R\x13\x02\xd3NB\x13\xf6\xf2\x14'\xb9!\xc8e\xd9q.\xcf\xd5d!\xad1\x83Y\xd3\x84\xb1tG\x12t\x00k\xba\xd0U\xcf\xa0\xd5\x84\xe1\xaa\xc9\x02US\x85\xa8\xc6\x0eN\x0d\x0eK\x8d\x1f\x90\x1a\x14\x8a\x9a \x085b\xf8i\xec\xc0\xd3\x88!'L\xb0i\x920\xd3\x04\x01&\xcd\xe1D'W&\x08*\xf5\x0e'i\x03I\x08sScKO\x1c6\xb2\xa9\xdd\xc9BE\xa3\x04\x89& \x0fM\x11\x18\x1a\x18\x12r\x847\x8ca D\x00H\xe7\xd8\xf5 \xfa\xe8\xda\xffC?\xf9\xbe!\x1e\xdc\xec\xdda\x1d\xdbT\x11\xa1\x1c\xaf N\xdb\xad58p\xe3\x08\xd9\xd8\x825\xf60\x8d\x81*\xf8\xd0\x8c;(\xd3\x0d\xc7\x0c\n\xc4\xa0B0}\x82/\xda \x87;\xe02Z\xa8E;~\x8b\x93F\x0e\xac\x8c\x1eR\x199\x982n\x18\xc5\x12@\xe9\xba\x8d\xbbA\x93\xb1\xc2%#\x06JF\x0f\x91`\x83#\x88\xb0\x08: \x82\x0b\x85h\"\x05\xbaQ\xb1\x1emW\xe0\x03\x1d\xf2@\x05;Z\xc8\x8f\x1b\xe0\x18=\xb41fPc\xd4p\xc6\x90\x05G\x840\xdc\xc1\x8bJ\xfc\x9b\x02\x16\x06\x13_\x1fH\xb0\x86'\xe4\x81\xef`\x82G7j\xa49|}X\xbc\x16\x06\xae\"\xa7'ul\xb7\xbb\x0d\xbb\xd1xQ\xbc{\xa3\xdb\xc2\xd9\x96\x18\xa3\xf6\x16w\xbf\xae47\xb7\xfd;\xb2\xdc\xd6\xd6vf\xb8\xa5\xad\xfdVs;{\x90\x06\xd0\xdd\xc6\xc6s\xab\xf6\x06\xb6\xb6y\xe7\xe6\xb5'\xb3\x98n[\x1bW\xc7r\xcb\xba\xd3\xc6\xbeC>\xd6QGn\x13\x1d\xbaZT\x0dh\xbaP\xbc\x96\xdb\xf0\xfb\xe62#\xb1k\xed<\xc7z\xb7\xb8\xbb\xb3\xdb\xfc\x9a\xb7v\x18\xbeq\x8d\x029\xf7\x1d|SG\x049\xf3\xeeS \x9e|h\xba,,\xc4\xf6\x8ada K\xd9\x87\xed+\xc7\x16s\xc5~\x0d\xf2\xd7R\xa5\xc2\x1d\x96~\xc5\x14w\x9c\x15\x19\x04\xe4\xc0_\x03Q\x11G\xf9\xe7\xb4\x88(\x7f\xf3\x81\x11$\xa0Y&\x0e^\x8a\xa2\"\xc6\xc9\xfe'\xd8\x910\xbe\xe8\x1e{\xc4\xdb\x04\xbc\x15;\xc5\x95\x9f\xc2\x9a\xe4\x84\xcd\xaa\x08\xc4\xb8\xca3#FT\xfe\xff*~\xf6$\xebv\x9e\xe5$\xa7\x90\xa7$\xce\xc4inO\x82]\x18\xb7n\x96\xf0\xf1|\xaat\xe8_\x04B\xe8\x9d\xee\x12\xe4\xa1G\xa1\x86\xaa#\xfd;\x14\xdc\xcb`z\x00\xa8'/\x9b\xde\xadAr\x9d\xf6\xbe\x10\xe2\xa1\x1f\x0b\xb6\xe0\xc0\x987\xb7=\xee#\xfa\xb6?\xeccK\xbc\x130\xedkH\x88G|,\x0f\xf8\xd4\x1e\xc1Z\xea\xf0Dp\x989\xef\x8du(v\xa0\xd8\xe5l\xa36\xbed\x7f\x18m\xd8\xea*\xfdh]\xb6g\xb2I\x93\xbd\x92&\x90\x14\xf9\xa1\xc8\xab\xbf\x1dR\xfa &\xda\xe8\x83g\xfaM\x80[)YG\xeb\x91\x1c\x0e\xa3\xf5\xc5\xf9J\xa6\"\x8c\xd6\xa9zXf\xb4\x0e\xab3u\xa9\xa6:\xba\xbd\xf4NaM\xce\n\x0c\xe36T\xa9\xd8\xb0\x8d\xb3`\xa9\xca\xb8O\xbd~\xfc\x13\xdbH\xc8\xc2J3\xb1]4\xc0\xee\xc9\xbf\x18\xe6\xe4]\x04\xc7 \xc6\xb0A}\x8dUq\xfbE\xe69)\xcf-W\xe3\"\xce#T\xf6\x7f\x0b\xa2,D&\xe6\xef\x9ek\xa2\x86\x1f>\xde\xbey!\xf2\xb1\xa2\x88M\x17v4\xa5<\x89\x86\xef\xcb\x05\xc0_\xe8\x93\x94\xc2_\x8b,\x07\xb2M)eV\x86L\xfaIR\xb6>\xdc\x0f\xae\xe9\x9b\xe7\xc6\xed)\x89%\x9e\x02\x99\xcb\xc3\xe1[\x92\xed`\x9dP\x91\xed!\xdfUb\x1df\x94\xa1\xd0HQ\x16<\xf8\x9a\x991\x8dX\x85|\x1f\x89[%D\xc6\xe0\xeb/4\x95&S\xd9\x99\xda!\x03\xd8A\xd7\x05\xf4\xe7\x89^\xb5A\xd6\x850\xd6\xe8\xf2!\xc9\xe9\xd2\x84\x92\x00\x87\x01\xe0\x1a\x0b\x84\x1b\x9b.\x89\xe9W\xc4\x10\x80\x1a\x06TW\x96\xdfQ&\x81\x00\xd7\x93t\xc0\x9f\x80\xbb\xb9z\xf7\xe1\xcd\xeb\xe5w7\xef\x96\xb7\xffs\xfd\xc6\xf9\xa2\x9b\xa9\xdd\xf5\xa77\xdf\x7f\xbc}\xd3\xa7\x9d\xf3\xa1:S\xcb\x8f\xd7\x1fo.\xcdo\xd6\x01\xd4\xde\xad\xeb3O\x97\xf8i\xc2M\xb8\x8d\xe9\xfa\xbbl{+\x03T\"\x9b\x91m\xd1\x8c\xffT\x0f\xda7\x0e?\xe6;\xbb%\x18 \xfe\x82\xbf\xcc\xe6|d\xd7L\xbe\x17p\xcdU\x18\x89l\x9d\xfc,\x8fr\x1b_6\xad\x00c\x82\x0b\xa8\x0d\xaay\xed\xb4\x02\xdb\xbb\xa7\x15\xa0\xb6<\xa0\xb7= \x1e\xf6\x14\x80&2\xb8\xcf\x06u@\x1c\xa5\x9a\x80\xa6\x00xQ\x81\x81\xf3E\xd5\n\xf0\xeb\xaf\x00\xcb|\np\xcb\x02\xbeK\x03~\xcb\x83:\xc8i\x1b\x98\xdee\xad\x7f\xe8|\xdb\x12|\xa6g\xf7-4\xc1\xe3)O\xe8\x83\x83\x83\xb4\xd5\xf0\xc6\x8a\x9e\x15\xe0y\x0d+k\x10\xaf|\xc2\xe8\xb3\xc6k5\xfe\xe6g\x99#\xc1_\x04M)3\x86.d2\xf8>\x14\x19\xea\xe2\x9f\xdcN\x12\x07\xde\xda\xcb\xdb\x9bD{\x11ZAM \xea?\xe0\xc6\xd7j6\xbel\xedf\xe3k6\xbe\xb0\x9c\x89\xd5\x7f\xb3\xf1\xd5\x054\x91\x01+\x8c\x05\xcc\xc6\x97\x01p\xcb\x02\xbeK\x03~\xcb3\x1b_\x1c\xbcq\x98\x8d\xaf\x0e\xe0\xb5\xda/\xc2\xf8\xe2\xc2`i\xaf;Q~\x8b!\x14F\x00T|q\xaa\x11\x11\x9b\xd0k,\xfb\xe6k\xf0\xc0k\xe5\xcbd\xeb\xfdF=\x8d_\xfay\xcb\xc7\xf2\xb9\xaf\xbf\xa4\x8c2j\xf2\xc7\x84}\xbb\x89\xc2\x80-\x11g\x02\xedbF\xcc\x82X\x06QH\xe3|I\xf2\x9c\x04\xf7\xd3\xfbMk\x98-\x8d\xa9\x0c\x02\x9c\xa3\x01jD\x90\xfb\x9a\xaeQ\xaa\x145*\xa0G\x06m\x9e\x89\x1e\xd0C\x83\xd7\xf0\xe0\xaa\xeb\xdf\x06\\\xfe\x8a\x1e\xbc\xe6\x00\xde\xf3\x00[\x06\x8c\x1eP\xbb\xb4\x0dj\xd7\x1a\xb2e\xf4`\xc8\xa1\xd1\xc3\xa9\xd0\xc2k\x97:L\x9f\x9b\xa3\x87I3v\xf4\x80\xcb\xe3\xd1\x83)\xbbG\x0f\x9eK\x8e9\xe2)\xf0\xec\x1a\xa7\x02\xeb\xa0\xcb%\xd2CoT0\xe6\xa9\x02k6\x92\x1eN \x99\xf0G\x13\xe8C(\xc0Z\x94M\xf0>I*\xf0\xa6\x18\xf4\xa2\x1a\xf8\x9d0\x15\xe0\xad\xff6\xf8\xf2\xbe\x02\xbf\xe5\x85\xbeK\x0c\xfd\x96\xb9\xc7\x89T\x01\xfad\xaa\xc0\x95\x03\xa6\x07ojxS\x01\x9bE\xa6\x07cn\x99\x1e\xa6\x9e\x8e#\x03L\x0fS#5F~\x9b\x1e0Yoz\x98z\xce\xf6\xbc9=L\x8d\x93)\xf3N\x0fSc\xe3\xcc\xdd\xd3\xc3\xd4hY\xb3\xff\xf405J\x98\xfcA=\xb8\xb2\n\xf50\xed|\xc6\xceK\xd4\x83\xfe=\xc0.x\xd9+~v\xca/\xca\x16G\x84a\x14\xf8\x1bIXW\xa9\x82\xd9\x08G\xc1l\x84\xb7\xc0\x97\xe9\x15\xf8-/\xf4]b\xe8\xb7\xcc\xa74\xc2\xcb`\x05r\x91\x05\x1dt\xe9\xb8z0$\xe9\xea\xa1\x07\x9b\xf6aR%m\x96\x9b\x88l\xf1\xcdz3\x01&g\xa3 _\xc17\xef?\xbe\xfa\xf3\xf2\xea\xf5\xf2\xed\xfb\xcbw\xa8\xbc\x866\xb4\xfb\xb8\xfc\xe6\xe6\xcd\x07WBF\x13\xda]\xa0r:\x9a\xd0\xee\xe2\xc3\x95=\xb5\xa3 e\xa2\xc7Pr4\xf6\xc5\xfamD\xb6\x10\xc6k\x1e\x1fQ\xc5G\xbf\x89\x82\xe4\xfe\xea\xb509\xd4\xae\x80P\xc4\xba\\\xfd+\xf0\x8c|6\xa1'{\xf5\x940\xce\xc8T\x17\x06\"\xe8\xe3\x9b\x13\x80\x0c\xa56a \x96\x1edlX\xae\xaf\xb8\x81y\x13nE\x96\x10\xd3\xd5\xca\xa5\xccC\xae\xf5\x1b\x14D~\xed2Z\xb5C4/k\x94\x81<~\x0fD9\xcf\x1fI&-\xde\\\xdcZ!\xeaVGu8\xb6\x0d^\xf1qFQ B\x08\xa1\x8d\x17\xd5\xfa\xd7i\xf5\xe0\xa3\x90\xd0\xca\x08='\x01\xf8\x99 \xf0\x94\x0d=\x18\xda\x9b\x99\x8dO\xed\xea\xc1\x93@\xd0\x83H\xa0\xaf\x9c\xe2\x82\x1e\xc4\x82>\x04\x03Se\x16\x17\x9c\x0e\xc1 *\xbf\xb8\x00\x97\xd1\xd1\x84\x1e\x04\xf1\xb7\xfb\x0f\xee\xb7H\xf401v\n/7:^[\xceo\xb3y\xc9#o\x82xr\xae\x97$\xf2\"\nx\x13\x06\xfa\xc8 o\x02\x81?\x91\xa0\x9f\xf49\x0dj'\x97;\xfeR\xc7\x9b\x10>{\x1a\xfa\xcb\x9bI\xf1\xf2I\xba+\xdb\xf8 \x84A\x86Y\xa5I\xbct\xf9BQ\xe3b\xc6[\x1d\xffF\xe2<\x8c\xe9\x12cUb\xacI\xa7\x15\x89\x14JXQ\x84\x94\xce(\x8a @\xefh\xa4,FN\x18<&\x0d~\x92\xd7c\xf2\xe0C\x00\xf0\x95\xb3\xd3!rB\xa9\xea#\"<&\x8c\xd9\xae\x02\xbc\xa5\xe7\xc8X\xf8HJ\xd4\xd0\xa8A\xdd.\x19\xaf\xb1<\x92\x85\xdf3a\xfc\x8a'\xf1^\xf2\x1c^W\xc2p\xc7\x99\x00$\xcf\xe9\xfe\xc0\x93\x85\xf3\x04\xf6a\x16Q\xb2\x06\"\x12\x84A$\x08W\x1e\x87Z\xeeG}\xb6\x06Ab\x12\x1a#\x96\xb9\xd2\x86\xc3DO\xfa\xc0\x849\xc45\xd7\xb7\x82\x7f\xfa\xfaV\xe6\xb0\x8a\xd9\xc2\x18\xbf\x9e \"\xd0\xe1$\x94-x\xe1\x17\xa6\xf0\nHx\x85\x1e\xb0A\x86\x1e\xe1\x84\xf1\x03\x07\xc8\x10\x81sa\x9c\xfck\xd5&\xe8\xeemZ\xc4\xe1\x9eG\x8f\xa1\x9d\xc2\xa8\xce\xf5\xc9\xdd\xe8\xfaZ\xa2W\xaf\x15e4\xbbX\xb7w\xdb2\xcd@B-\xe1,B\xddS\xafZ^ku*\xc3\x96\xb0\x1e\xa7d\x9aE\x18k\x84\xb0i-\xde\xd6\xa4\xa0\x06\x87\xa6\xa4s\xc96\x874s\xc8/\xb3\xc4B\xc9\xa81\xa4R\x87J\xaf\x1a\xe6\x18\x96a;&\x98\x83e\x9b,\xd21\xbbL\\\xa67\xb7t\xa6\x96'\xaf\x8f\xc3\xa0N\x93\xaa\xa7\xf1g4\xa3\\&\x94\xdd|\x1a\xdf\xa6t\x98K\x06SIo&\xe9M\xa4q\x1ekp\x98DV\x02\x98L!\x97\xa80\x7fi4\x81\xd0\xe6\x0f\xc6\xf4A\x89\x94\n\xc6\x10.\x15 \xcc\x1d+\xd1\xad%\xde\x91sC\xce\xa9O\x11wT\xe9\xf61\xd1\xf4(T>\xe6\xb0m\xea\x0c-\xbf\xee[t}\xcc\xb9\xe0\xcb\xaa\x8f9*\xa6p\xfa\x98\xe3y\x95F\x1fs`t\xf1\xf31\x07\x05\xcf\xf2\xe6\x07\x8f\xa2\xe6\xe3\xe19e\xd9r{\xb1r\x84.\xc4\xe8\xc0\x13[T\xce\x82\xe3X\x15kw~(\x98M)\x13 g\x0d\x1e3\x87\xd9\x94\xaa`\x1aS\nW\xa8[\xcc\xcaU\x0d\xd5Y\xc1\xca\x83I\xf0,\x82\xa8FQ\x07\xaf\x05\xc2\x96\xd8\xc6\\*\xc3\xb5D\x97\xd3F\\@\xc35\xc4\x94\xceF_V\xd3\xc3XW\xd8\xf4\x80\xf2\xac7\xc1\x8b \xbc\xf6\xa8\xb3\xd6R\xf9i\x1f\x14\xdc\xe7}\x01\x1e\x05\xae{\xe1\xe1$\xc5H\xd7\xf3P\x1d\x8f{U\xb5\x0e\xcer\xd5\x0eq\xe6\x12b\xee\xd2\x81n\xc1\xeb\x10\xba(\x81\xeb\xc2S\x00jw\xa1\xd9 \xc9J\xa8R\x81\xa8I\x02z\xa2\xe0S$\x10=a\xc0O\x1a\xfc\xca\x03N\x83\xc2\xc9\n\x03\xe2\xea\xe1\x81\xcfD\xb1\xb6\xdd\xc1\xaf \xe0\x88\xe3\x1f\x1c\x05\x9a\x11,\x8daf\xc4\x9eEN\n\xc57\x88\xdd\x8a\x98\x18 '\x07\xf8}\x8a\x9c$`'\n>;t\xfc\xc1O\xb47\xb1;\x139A\xf7\xae\x00\xdf=9\xda\xc8\xee\xa0\x7f\xf9\xa5{H\xf3p\xd62\xc5\x96\x9e\xcd=b\n\x11\x9b\xad\x88\xf1\x8b\x03NZ}\xce*_\x9c\x92\xc5-S\x9c\xd2\xc49\x01pO\x02p\xb2c\x9c\xa1&\x97\x14\xee-\xe3\x9c\x88kw\"%\xc2\x80q\xdc\xbb\xbf\xd7\xde\x9c4=\xe7\xa4\xc5u\x8d7\x90\xde\x87\x99om7s\x9a\x0f\xbah\x8af\x93\x9b77\xe2\xd6\x93\x80\x01RO\x7f\x0fJ\xc0\x08r\x89w1LR\xb8\\Y~\x19\xdc\xa66\xb6\x01N\xa5\xe1V\x16\xce[~\x02\x9c#\x01j4p\xde\xfb\x13\x80\x1a\x0e\xd0C\x02\xee&\xa0\x00\xff\xfb\x80\xb2\x1d\x16g\xf0\xc2\x1b\xb07\x04\x058wU\x1b\xd4.s^\xdaS\x80\xb83(`jTp\x12\xbd\x0e\xa7\xbdK(\xe0d7\n\x05\xf8\xdf+\x14\x80\xb9](\xc0cY]G\x16\x05\x1e]\xba\xd5N\x1d\\w\x0f\xe5W}\x86w\x99o\n\xd0\xb7\x11\x05L(Ep\xe68\xf8\x12\x040\xd6W\x13\xbcNF\n\xbc(\x03\xde\xd4\x01\xfc\x89I\x01\xce\nn\x83\x0f\xff*\xc0/\x1d\xf4Y>\xf0_B\xcf\x13V\xab\x91+E_\x80\xcf\x9dG\x01^3\xf7\x9aq\x9f[\x90\x02Pw!\x05L\x85\xbe\xc7\x8dB\x01S!2\xf6}I\x01\xbe\xb7&\x05L5G\xfc=J\x01S\xe1\x81\xb9Y)`*\x0c\xbc\xeeZ\n\x98\n\x15\xf4\xedK\x01S\xa1\xe1{\x1fS\x80\xcf\xadL\x01\xd3\xe0?\xe5=M\x01\xf6\xdb\x9a\x02\xd0v\x00^\xff\xff\xecv\xaa\xf3F\xa7\x00?\x83\x03\xe3~S0\x1b\xa8\x0d\x98\x0dT$\xe3*\xc0/\x1d\xf4Y>\xf0_\xc2S\x18\xa8\xb8\x9b\xa4\x02\xc4\x9c]\xf7I\x05 n\x95\n\xf0d9_\x86\xf3\xbcg*\xa0\xc7\xe2\xba\xe2\xdfM\xe8\x7f\xf3T@\xef\xfb\xa7\x02z\xdfB\x15\xd0\xe7.\xaa\x80\x817R\x05L{/U\x80G\xe4\xaa =X\xa7\x87Tp\x86\xf1\x9a0\x00)\xac\x8fH\x00\"\x14\xd6\x84\x01\x98!\xc95\xd9\x9dVc\xf7\xd3\xddl\x15\xe0\xbc\xdf*\x00%Xq\xe2\xd4}\xe3U\x00VA\xa0\x94\x03\n\x7f\x01\xb8Y\x08\xf0\xd8\xcf\x9e\xcc\xe9\xc5\x98\x88;w\n<\x08\x01\x9e\xc4\x00\xcc\xed\x99&x\x12\x05| \x03\xb8{6M\x98\x1e\xa9\xc9o\xe44\xc1\x1dAo\x82'\x01\xfc\xecc\xe4M\x9e&L\x84\x91\xeb\x06\xae\x00\xf4\x96\xc1o\x16\xb4\xdc\xf0\x9a\xb8\x07\x17\xa2%\x06z\xf2\xe0E\x00\xf0\x95\x15^\x84\x00?b\x80\xbf\x94\x98\x16\x9d\x93\xca\x07?\xe9\xe05q\xec>\x84~ra\x12\\\xb0IG\xe5\xf7X$\\\x08X\xef\x05\x0bp\x8e\xe5\x1a\x03sSX\x80\xcb\xfa\xb2Z]\x08\xa1\x81\x11\x15\x08)\xe9\xa4\x88\x00\xd4\xeeC\xc8D\xc4\xc4\x0099\xc0K@\xe4$\x01;Q\xf0\x91w\xe3\x0f~\"\xe9\x86\xdd\xc2\xc8 \xba\xb6\x96\x00/)6\xd2\xc8X\x89\xe5\x1c\xce9\xd0i\x13\x18\x7f\xde\xdb\xcd\xdf6<\xdd\x9a\x8d\xaf\xdb\xe4\x9a\xa4:w\xfa\x9cA\xa8\x98\x84\x88\xe5M\x03-\xed\x15\xd55Yd\x9a\xd4\xb5>\x1d\xd9\x12\xcf\xa6M1\x9b,\x99\xcc\x9d6\xa6K\x10\xd3\x12\xaf\xab\xd0\x0d4\xd6o\xbfv\xca\x96\xa3qwo\x19\x13\xae<\xf9N\x17\xd2@pKG\x198bI\x16\x15kS\xab\xc6H\x90\xe8\x0f\xf5\xe0\x8dF\xe8\x99\xe28\x0eYg\xd1\x84\x8e(\x8c!\xdebK\xfdqpD\x0b\x07L\xe2\x8e6E\xc7g\x18K\xf2\x89O7C\xd3c\\\x890>\xb8\x98\xd3X|z\xd1%\xa1\xf8\xb4\xb7\xa6\x90\xf8tdL\x00\xf1\xe9\xc4\x95\xbeaK\xd4\xc0\x8f3f\x9aEG\xcds#\xe3\x9b\xbaJE\xaaz\xe3E\x01_\xb1:\xa6\x14\xb4$\xf5\xbb\xed\x90\xf2K\xfb!\xc7u\xb8\xb1&\xe7;mD\xab\xbd\xa2\xc0\x92r?\xc6\x00\x98D\xfai\xed\x1a\x05\x93\xd97\n\xdcv\x8e\x02[B\xbc\x95\xe8\x13\xbd$iJeGvj>\x838\x13\xd4\x07\xee\x0f[j\x88\x07\xf7\x1a\x0f\xd9\xc8\\\x1d\xc7,\x001\x13\xb0\xd9]\xe5\x07\x0e\xfbK\x81\xeb\xf0)\xc0\x95W\x83 `\x88\xe8\xb4\xd3Z\x9f\x99\xf2c0)\xdbH\x8e5\xe0\x8a\xb1\xe7\x14XS\xaf\x87\xa0\x81H6\x1e\xd2\xfdP;P\x81\xcb\x1e,G\x1b\x80\xab;\xddyH\xef\xb6$\xe6!\xfd\xa2R\x93\x87\x0c\xe0L8\x1e\xd2\xb9\xcb\x0eU\x80I\x1c\xee\x8f\xc7\x98v\xaa\x02}\x02pO\xebp\"M<\xbf\xe9\xdc\x86Y\x05\xff\x82T\xb0=)U`k\x8asY\xa2\\\xce\xc5s/\x1d2\x9d\x14EPW\xca\xa8\x7f\x92\xa8wZ\xa8w\"\xa8O\xeag\xcfd\xcfi\xd2;=\x12:Q\x8b\x87\xda\x0b\xce4M\xaf\xa1\\\xa9\x98\x88\xe4K\xaf\xf1\x8cS\x1b=\xa5\xf2$I\x94\xc6\xb4I\x83X0 \x83\xb9`\xf7`)\xea\x0c\xa2;'\x00\xeeI\x00.d>\xceP\x93\x07\xc8O\x10+F\x06\xc2\x07\x8ccJ\xde\xebi\x1cOr$\xb0r\xff@#\xd6\xc1\xf7N\xca\"\x18\xd1\xc9\xf1\xc3\x07\x99\x98\xd7]\x9c\x8e\\Z=\x97\xa3x\xbc\xf7\x08\xee\xb4\x0eK\xd7\xddn\xf5\x91\x0f]z\x85\x1aF\xc3\x9f:\x9e\xb4\xd6f\xf2T\x87\xd6\xeaK=7\xb6\xf9\x0c6p\x03:*(\xe1\x03.\xe0\xc6\x05\x10\xf8\x80+\xf8\x02nvT\xa0\xf8\xc7Qz\xc8Q\xfbh\xcc\xc10A\x198Y`\x06N\x11\x9c\x01\xaf\x00\x0d \xaa\x169\x17\xc4~\xf3\xdb\xd9\xdc%1\x01\xcc\x81\x1b\xf0\x1b\xc0~\x80q\x06q`\xbc=w:\x87\x08\xda\xb3\x04\xb8\xd9\x01r\x86\x00\x08/\x13\x94c\xba=M\x80\xe2\x14\x05.\x02\x03\x9e\xc8\x80%4\xda\xfbT\xfb\xd4vI\x1a\x13\x08\x02\xdc<\x10\xf8\xfb\x04\x85\xc0\x15\x18\x82\x91\xd0B\x04^`\xa4\xa1\xc6\n\x18\x81G\xd0\x08F\xc2\xdd\x1d@\x82\x91FrU\xc4\x19c\x0cT` F\x1a\xcc\x19d\x82\x91\x06\xc2\x06\x9c\x00\x19t\x82Q\xf0\x9a\"\x00\x05\xd6*4\x03-\xe8\x13X\x1b\xd6J2\x18uU\x1b\xc2P5f63f3C\x03(B\x8fmf\xb8+\xb0\x88\x19\xfc2\x9e\x93F\x06\xc0\xc0\x87\xf0\xae@\x18\xf4\n\x86\xe9Z9\x03b\xbaF\xce\xa0\x98\xae\x91\xab&J\xcf\xe0\x18\xb4yj\xb4\x00\x19\xf8\x05\xc9\xc0g\x81\xd1\xfb\xca\x190\x83>\xc3\xba\x02g\x80\x0b\x9eA\x9f\xb1\xadS\x1e=\x90f\xe8t\xfc`\x1a\xb8\xea\x90XD\x8e5\x1b\xdaz\xc7\xd5.\x08\xa7\x8d\xfc;w\x04\x8a5\x10l\xe1\xbc\xd3\xea\x9c\x0c\xa0&\x04\xee\x80\x84\x00\xd4\xc4\x0079\xc0\x84(\x04\x8c;\xec\xc4A\x0b\x01\xae\xd0\x85\x00\xd4\xc406\x10*\x98!`\x841M\xc1;p\xb3\xa4\x8b\x19'?f9w\x15bO\xb9&\x01\xb8\xfd\x84\x98\x0c`&\x04\xd8\x9d4\xde\x80'\xd8C\x98\x1d\x84\x98\x90{\xf7\xa0\xf7\xce\xe0\xd1\xdcAAp\x0f\xa3\x1f\xc2X\x7f\xc2\xd0\x9b\xbe\x17W\x85 \xbd\xd6\x1d\xe7\x95g\xe3\xce\xb7\xd2\xc3\xc2\xab\xc6}n\xdd\xe1\xf6\xbdm\xdd\xd5N\xfepl,\xc7\x1e\x1e\xd6\xfd\xa4;\xd6\xce\xd2\xa8\x05\xd4\xed\x18\xc4\xce\xec\xd1\xb7}\x17z\xed\x17\xed1\xc5\xd1C\xfb\x08\xf2\x0b\xaa\x9apM\xd2\xfcF\xb91\xd4\x944\xbbE\xb7G:\xae\x1f\xd1\xae\xeb\xe6\xd1S\xb2\xffEV\xa3\x0b\xa63=\xf1\x88f\xaf\xd9\x0d\xbe(jH7\xc0\xa5\x19X\x04\x96M\\\x19\xd3 \x90\x1a\xc6\x10\xd17\xa4\x0d\x0c\xe9\xd4\x95\x1e0}Z\xc0\xa4\xe9\x00\xb84\x00S\xf8\xdfHX\xbd\x03\xde\xb2\x0efY\xab\x0b\xeb#:\xd2\xbbS\xac\xe1\xfb\x9e\xbc<\xc5\xc5#\x84\x9f\xdcq\x18p\x1d\x04\xac\xfep\x93\x80\xac\x83\xdbz\x9d6X\x86\xf0o[\xfc\xda\xae\xb09\x82\xc34xa\xc3\xe3\xc6\xb0x\x9fa\x1d!\xe4>]\x8e\x11\xe6\xc6\x84\xb7\xfb\xe0f\x0fc\xf7\xe9\xd1\x14\xae\xee\xd3\x973,\xdd\xa7Sk\xf8\xb9O\x87\x980\xb3+\xbc\xec?\xee\xd8a\xe4n\xf8\xd8\xd3\xf2\x19QKi\xc3\xc161Z\xeb\xaa\x15\xfe\x9d\xd5\xd3\xac\x9e\xcc\xe1V\x81\xd9i\xae\xef \xc2\xa8NB\xd9\xc2\xa6~\xe1R\xaf0\xa9Wx\x14\x1b\x16\xed\x11\x0e\x1d?\x0c\x8a\x0c\x7f:\x17\xc6\xc9\xbfS\xd7dt\x863\xd1ch\xa70j\xd8r\xf2p\xa5\xc1#\xf0]\xb6\xbdeT\x90\xa8h(\xd2\xdc__\xc1\xcd\xd5\xbb\x0fo^/\xbf\xbby\xb7\xbc\xfd\x9f\xeb7\x1d\xe6\xec~q\xfd\xe9\xcd\xf7\x1fo\xdf\xd8\xbfh\xed\x1f\xdd7\x1f\xaf?\xde\\\xaa\x8dSn\x15;>\x0d\xba\xfe\xdf\xeat\xdd\x98\xbdX36wF9\xf9\x8e\xf8\x9ef\x19\xd9Ru\x82\xae\xbd\xf7^-\x9bq\xae/\xf8\xaag\xf6/\xc5|^\xc057\x84H\x94\xe9\x17\xaa\xf4<6\x17\xc9\xe9\xb7\x19T\xbaL\xebB\xf6\xb4~\x0c\x0ec\x84\xf9\xd3\xd9oF\xf7\xb0\x7fg\x139\x83G\xf1\xa9Z\x9d\xbe\xe8\x9e\xcc\x1ctSe( \x99h\x8e\x85\xcc\xb1\x10\x0c\xfb\x0b\xf8U\xc5Bt\x91|O 7\xda\xc9\xd5\xc8\xa5\x16\x1e\xb5q\xa8\x85?\x1d\xecce\x1e+g\xf6\xefxB\x9e\x1c\xed\x16\xaa\x02'/z\xf7:RL\xae+\xf5\x93\xdc\xf7Fl^3\x05-\x83w\x8f\\n\xb3P\xffU\xdb44~\xa59^9MD\xc0\x9b\x89`1\x15a4s\x11\xbcLF\xd3\xd7z\xb3\x11\x86\x17\xec\xee\xb8\x98Dkk\x18\xb3\xe6Z\xd2\xb9\x95<\xe5\xe9X\xee\xc7\xb9R\xb7\xcd5dp\x0b\x8d\x11\xd0wx\x0f\x1c\xbd5\xa6Ru\x14\xc6k\xfa\xa5?_j\x9d\x00xLLb\x81\x1f\xebSzHiF\xe3\x9c\x1f\xfaS\xfa\x90\xe4\xf4\x82\xfdC\x1c\xca/ I\xe5\xf9\x9ci\"*b\x1a\xb5\x84\x85\xba\x07\xa6&2\xa0)\xcfe\x00}Q\x86\x82=\xc5\xba\xa1\xb8\x81q\xf6\xad8u+\xe8\xed\xd3\xd8\x14\xdc\x9e.\xa8=I0\xdb\x1e\xc4\x0e\x92l\x9fd\x8b\x15\xc9\xe8\xe2\xe1\xf9\x8a\xe6\xe4\xf9\xe25\x0d^%a\xec\xb9Pk\x1a'{'\xad\xc9>)b\x97\x987\xb1\xadD\xac4\xb1\x08\xe4\xc9=\x8d\x85=E\x04\x06a\xcc)\xc0I\xc4\xfe\x14\x84{\x12\xc9ak\xfa\xec\x03\xd7Z\xb7\x8cl\xfc'\xd8\x844Zs\xed\x18\xb3q\xa4\xfb1\xdc\x1f\"\xba\xe7{\x84\xafq\x91\xe5\xc9\x1e\xf64\xdf%\xeb\xee&\xcd \xa5?\x15a*\xdcY\xdbd\x9b\x1c\xd2$O\x1a\x94^\x87l\xaa\xab\x82!Y\xa3xD\xb7\x1co\xf9\xaf$\xfdD\x1fI\xba\xf6\\\x03\x7f\x01\x966\x86\xa9>\x9b\xe6|\xdc\xe1\x11\x01\x16m\xd1\xe5\x17G\x13{J\xca\x08\x1c\xd4\xeaq\x0cFju\x89\xe3'\xdb61pS]\xe4\x8b\xe0\xb4Z\xa8\xb2-\x0f.\xaeU\xb3'\x99\xfa7#\x88\xe0\x1577_\x93\x94\xec}\xe5<\xd34E\x1c\xe6\xc7eN4\n\xb3\xb5\xd2L^-\xcb\xe3\x8c\x89\x89\xdb\x8d\x92\xb8\xc8\xbc[1\xd6X\xa7\xe4\x91o\xa9%\x8d\xd9IN\xd3j\x95$\x11%\xb1ni\x04=\x9a\xd1\\\xe1\xe8>\x88_\x98\xaa`\x7f\xadS\x13\xf6\xc9\xba\x88\xa8\x9b\xda\xff_A\xd3\xe3+E\xbd\xeb$\x89>\xd1\xec\xc0\x94\x91\xe7\n\x1c\x92D\x93\x088\x0b\x82_\xbe \x80\xf6t\xd9R\x96S+w\x16\xff\xf3\x13\xf6\x870\xce\xb4B\xa4F&3[\xb1)q\xe3C\xfd?[\x82\x92\x87y\xbbg\x8d\x86\xd5\xb4>]\xbf\x92SE\xf2u%\xca\x84\x04\xcbz\xf2\xb6\xd8\xeb'\xf3\x03\xcf\xec=){\xcb\xd5lHT\xf57\x12\x04i\xa1\xe2\x89\x95\xf2r\xe9L;\xb7YY\xbe\xd9\xc7\xb3N'C\xb8\xfe\x96\x1d\xdb\x7fU\xac\x8f\x88\xc0[\xb6AW'\xd7\x9b\xe8\xaf\x8d\x1a/\x8d\x1a\xb1\x17\xe0\xca\xb21lb\x01\x969\x080mh\x01\x8e\xe6\xae\xbcj\x98d\x8b\x0b\x98`\xa3\x0b\xf0\xd9\xeev\x8f\xe60\x13W\x00\xd6\xd0\xd5`\xd3\x16?\xec\xb0\xee\x12AI-5\xcfp\xe5b\x9a\xfd8\xab\"\x0c\x87\xfa\xf0fc\xba|-\x9b\xa6}\xb1\xe7\xcc\xd5d\nO\xfd\xa3\x93\xfb\xfd\x94P\xbd\xa7\xde\x9a(I\xab\x10UO54J0\xbe\xc3|\x0dr\xd6|\x93\xf5\x05\xa9\xdf\xb1\xaa\xb6#\xa3\xa6\xda\xf2\xf1\x96\x91\xd1g\x89t\x04\xe9\xb1>\xf5n\x06,\xce_\xe4\x11\xf5Rh\xdc\x9e+\xd48\xe8b|G-R\xb5\xdb7\x16\xa1\xa2\xbb\xfa5O\xe0'6\x0b\x7f\xd2\x1b\xa6\xdb\x8b\xfe\xad\xbe\xfc\x17A\x1c\xee{\x92\xfc\xd0\xf0\x94t(p\xe8:\x0e\xf8\x9fhN\xd3\xd2\xed[\xf7\x13\x18\x077!\x006\xcf\x0b\xd8\x84\xbe\xcb\x03co\xec\xf2\xc4X[;=2Uk\x8bWF\xb3z\x98\x93\xadt\xe6x\xf3I\xb9\xd1y\x82d\x96\xf1\xf3A/\xa6 \xca\x0e\x8c\x8cS}\xd2`\x9e\xda\x9f\x1b\x82\x11R\x1a\xd0\xf0\x81\xae\x07rQ\x17+\xb0\xda\xee\xe3'e[lv\x87\xc9m\xb3\xd7\xadM\xdd\xb6\xfa\xf8\x16\x10Lc\x05\x81\x87%$\x03\xb1m!mas\x1f\xf9\xac\xe9\xa6\xb6\xe5i\x1d\x10\xca?K2\xaa\xed7\xc0\xb8\xe3\xd7\x95\x8d\x19\xbeZ\x86t\xa7xux\xaa\x1aGI\x0e\xf6\xcf<\x81\x15\x9bV\x96\x89\xa5\xbe&[\xfa\x89\xfeT\xd0,_\x88\xdf;\xdd\x88s%\xeb\x80u\xc8H\xc2\x8eIY\x0et\xb3 \x83\x90\xc6y\xd4\xd4\xb3\xda\xec8\xc4\xe4\xb4{MNO\xa3\xe7\x84\xb3\x88\xcd\x8d\xff#.\xf6+\x9a2\xf6\x94w\xa2k\xa9\xc2\xe1\xa61\xd1\x801\xf2\x927\xebj\xa4G\x92AF\xf3\x0b\x08\xf3\x8cqU\xc1%o\x11\x0b\xb6XC\x92\xefh\xfa\x18f\xae\xac0\xab\xec\xec%\xcce\x1f^\x12\xbcl|\x19\x04\xc5\x9eo\xea\xf5\xab\xce\xe1\x02)\xc2\xf5\xa7\x92)\xa5\xf8\xeco\xc5\x98QX\x13\xca\xc4\xaav&ih\xa2\xea\x83\x1a7\x94\x1d\xb5\x8d\xa5{z\xc8\x810\xaa\xa5E\x1c3\x95\xc1\xb7\x1eM/ 1\x93D5\x9d\x90\x03\x89\x8f<\xf7\xd4\x83\xad\xbb\x06\x8e'O\x9f8\xa073\xf4d\x0c\xfd_\x1a\x86\x1e\xef,0\xd29\x00\xc5\xd4\x95\x15\xe8\xc9\xcc6\xa3\xd7\xc0/\x06\xe5\xab3q5=8%JO\x83\xd6\xdb\x94\x1d\xcd\x88\x1d\xc3|\x95\x8b\xac.j7\x8fS\x97Q\xa4\xca\xd9\xf5\xd0TLlO\x0e\x99XV\x8eU\x9e\x94\xd7\xc5\xb8B\x0e\x85\xd0!\x19l\x12\xaeJ^hi\xfc[\xb8\xdaTX\xb1\x859\xa4 \x93\n\xeb\x12q\xae\x7f\xb3\xac\xd83\xa1\xa4\xed\xe22\x86ooo\xaf\xe1\xdd\x9b[\x901\x8c\xcf\x9f\xde\x0b\xae=r\x15N\xe0\x876s\xdd\x1e\x0f\xf4\xc7\x1f~\xd4\xe7\xa4\xc8\xd3R\xac\x16U\xe8\x16N\xc2C\x9a\xac\x8b\x802\x93\x80\xa6i\xa2y\xa1\x87\xa3T]\xba\xc8\xb8\xcc\xe5\xfaT\xc9\xf3\x80m\xb9$\xb9/\x0e\xe5\x11oE\xd89V`\xaf\xc7\xe9\xf3\xa7\xf7\x1c\x81\x1dy\xe0K\xbf\xafq\xe1Z\xb0!Q\xf8\xb2\x7f?$\xe1\x9a\x19\xa2\xda\xce\xc4\xe8|[\xa5t\x93\xa4\xf4B5e=\x92<\\\x85\x11\xd3\xf8L\x0be\xea\xac\xcd\xb6\x7f\xfa@\xd7\xda\x1e\x93\x98 \x95xK\xf9\xe7|\x07,\xe0\xfcsFU\xadL6y\xc6.l\x17\x0b~!1\xd9\xea.\x8b\x03\xacR*t\x9a\xecr\xf1T\xeb\xc7Mr\xfa\x02r&\x077E\x1c\x08>fX\xcb\xfd\xcd5\x19;\xd4\xd7\x0f\xd0\x82?\x12~\xe2\xd7\x9d\x9a\xa5\xc4]\x15\xec\xf8\xcd\xe4(\xbd\xe0\xe6c\x98\xabn\x0b\xb6R\xfc\x84[r\xff\x8anCq,`\xbaU+ \x8f\x07\xba\x10Tb\x0d\xaf\x04\x91^\xbf\xb9y\xf5\xe9\xea\xfa\xf6\xe3\xa7\xa7]I\x08r\x10\xc1I\xa6a\xc4@&\xf2\xfc\xd1A\x9ew\x89\xd6&`\xa4y\xf1\x12~sX-\xde&\xc9\xdf\x17\x8b\xc5?t\x9f\x91\xf8x\xc1\x8c\x15\xf6\xedAh\xe6\xefH\x9a\xedH\xc4\x88fBXO\x98\xf6\x98\xda\x01\xc3Mk\xb8\xcf\xf1\xbe\x1a\x90\xa3\xc3\x99\x96\x7f\xf5\xaf/!\x0e#\x03\x03\x9a\xb0\xe8p\xda-\x8fq\x04\xf7\xa5\xe4Rv$\xac\x8e\x95FW\x12\xf51\x8c\"\xf6\x83,\xa5\xc0\xf4c\xbb\xc3'\x1a\x8d\xfd\x8c\x1dqx)\x8a\x05\xb3b\x9e0\xf3\xb6\x94\xf0L\xfa\xab\x0b\xb8b\x0d\xdb]\x96B5\x8e\x8e\xca\x80\xef\x9c\x9aJ\x1bI\x1e\xcesu<{\xf2\xecI\xbbC)\xed\xd5\xf0\xe2\x90@%O\x9dm\x92d\xb1\")G\xfc\xcb\xb3\xe3\xe2ogb\xde\xc2$\xd6\xd9\xf8|\xd83\xf6%\x93N\xad\x1f\xfft\xf3\xf1C\xfbo/_\xbe|\xa9[ \xf6mu`\x14\xa6F\xc2\xb6\x94T\xbf\xc2\xbe.\xb2\xf2\x92\xc6\xb6\x88H\xda\xee\xa9\xdbA\xceS\x06+%z\x01t\xbf\xa2\xebu\xa5N/\xa4n\xee\x1c3kjN\xb8\xf5\xee\xfe\x9b\x91\xe0N\x9e\xa7\x1a\x85\xe9\x14A\x17j\x83\xea\x0f/l\x8d\xd9\x06\xad\x8e\x16\x9b0\xa2:\xc1\xa8\xb6\xf25M\xb3$6\xf0\xba<\xcbo\xc24\xcb\x97|)^\xc2s]o\xe5\xa7\xbcp\xae\xfc\xf2k\x9c@\x060\x8c~\xc6\xc9q\xf6\x02\xcet\x8c\xdf\x9c\xe2B\xcc\xe3\xecB\xdf\x13\x9f\xc1\x07\xb2g\xbd\xfd\xa7@\xf5\xbf\x0c\x9f\xb2\x19\xb4\xbe\xc4L\xe3j#\x0d\xe0\xe6\xe2\x8b\x85\x0b3x\xa4Q\xf4\xd5}\x9c<\n\xd7\xef\x8e{\xee\xa5\xa3V\xc7\xc7MN\xbb\x10V\\\x8b\xfd\x84\xcc\xa8\x0d\xca8\x8a\xdf\xe0\xe7\xfc\xd4\xee\xf2\x8e\xf3\xb8b\xaf]\x12\xad\x1b\xeeb\xbeC\xc2\xb8dK\x90^\x04\xc9\x95\xed\xde\xf8\x10%;\xc29\xdb\xe8j\xd2\x9d\xa3\xad\xf2\x9b\xfc\xf8\xc3\x8fO\xf5\x9c;\x8c\x05\x9a\xa3\x98\xb8\x80\xcf\x9fu\xf6|\xf1\xf5\xf3\xaf\xb33\xed\xbaV\xffnX\xedee\xc8\x94\xe6E\x1a\x8b\xbb\x14\xea\x8f\xd9\x1c\x0f\x9f\xe3\xe1\xa7\x8e\x87\xb7\xaf\xc0j\x9c\xdf\x984\xe1Z3\xf8t\xfd\xaaBR\x13\x06\xd7{\xdd's\xb9\xa3\xb9<7x\xd1-\x8c\xe0\xf2\xa0O\xe6?\x1f\xd3{>\x8d\xef|\x90\xe7|:\xbfyO\xaf\xf9\x84>\xf3\xc9<\xe6S\xf9\xcb\xc7\xf6\x96\x0f\xf6\x95\x8f\xef)\x1f\xe4'\x9f\xc0K>\xa2\x8f|l\x0f\xf9\x88\xfeq\x8cw|\x12\xdf\xf8\x04\x9eq\x8d\xa5\xa9\x93+\x13x\xc5{\xfb\xc4\xb5\x1eq\x84\x15\xa41\xf1&\xf6\x85\xdb\xd4\xeed~\xf0Q\xbc\xe0\x93\xf8\xc0\xa7\xf0\x80\x0f\xf4\x7f;\xfc\xbdF\xdf7\xc2\xf3\xad\xf3\x9c\xf9x\xbdu\xed\xff\xa1\x9f|_\x7f7n\xf6n_\xb7m\xaa\x08?\xb7\x97\x97\xbb\xed\x8b\x18\xec\xe1v\xf8\xb7m\xdem\xbbo\xdb@\x15\xbc_\xdb\xed\xd5\xee\xfa\xb4\x07y\xb4Q\xfe\xec>\xdel\xad\x17\xd9\xed\xc9\x1e\xcd\x8f\xad\x1d\xbf\xc5I#{\xb0G\xf7_\x8f\xec\xbd\x1e\xd7wm\xf1\\w\xfd}]\xaf\xf5X>\xeb\x11=\xd6\xa3\xfb\xab\xb1\xdej\x84\xaf\x1a\xed\xa9\xc6\xf9\xa95^j\xdd\xa8X\xf7\xa4\xcbC\x8d\xf6O\xa3\xbc\xd3-\xe4\xc7\xf5L\x8f\xee\x97\x1e\xd3+=\xaaOz\xc8\x82#\xfc\xd1no\xb4\x12\xff\xddb\x00}\xfc|u'\x9f\xce\xb7\xb7\xa1t\x9b\x928/}{\xef\xd8\xffy\xfa\xf2x\x0f\xa8\xd2\xfa\x8dI\xc9fj\x1a\xaa\xf0\x86\x14VEFS\xf1 g\xa2X\x9c\xc9\x89|\xa1:\xdf\xd10e\xd6\xf3\xbav(\x12\x1dbjQk\xf0\xa06\\w\x90!\xb18\x0e\xb2O\x9fdm\xac\xcaO\x8d\xa1\x81\xaa3y\x87\x83\xd9Z\xc9F>\xdf\xcc\xb6\xe7&\x8cr\x9a\xb2C-\xa5\xd5\xe7\x03\"\x04\xf9\xec;\x9d}\xa7\xb3\xeft\xf6\x9d\xce\xbe\xd3\xd9w:\xfbN\x05X\x94\xdf\xcf\xe3;\x95\xa1in\x93\x01\xd7uI*\xde\xb9d-\xff\xfc\xfd\x0d\xbf\xb6\x95'\xc06H\xca6>7Q\x04E\x98BR\x82\x95\xf7g2\xf9T\x1cY\x18\x15=\xe3\xb9>V\x0e\x7f\xe3\xa7\xfa_eV1\xa6S\xb6\xd8\xea\xa8\xcc\xc3\x01F\x8e\xc6.\x05\x0f\x1bgt\xfb\x14\xf46\xaa?N\x93\xd9\xaa`Z\xc9\x0e\"c\xd8\xac`^Rp\xd4 2\xd9\xaf\xe0\xba\x12\xe0\xb6caJ[\x16F\xb6ga2\x9b\x16\x86\xda\xb50\xa9m\x0b\xfd\xed[\x98\xd6\xc6\x85)\xed\\\x98\xd0\xd6\x85 \xec]\x18\xc3\xe6\x85I\xec^\x18j\xfb\xc24\xf6/\x8ck\x03\xc3\x04v0\x8ck\x0b\x03\xd2\x1e\x86\xa9lb\x98\xc6.\x06\xbcm\x0c\xd3\xd8\xc70\xc4F\x06\xf3\xad;\xa7\x92\xb5\xde\xbc\x9b\xd4f\x86\xd1\xedf\x9d/\xb6c.c\x9c\xb1e#\xb47\xb69V\xdfBq\xa5\xf1u\xb2\xa2,\x06\xcb\xdb\xa7\xbe\xc1$\xd6\xb7\xd1\xfe\xf6\xc7lR\x1b\xdcb\x85Od\x87[-qW\xcdN\x9b5\xee\x14\x158\x8b|b\x9b||\xab|J\xbb|\x04\xcb|j\xdb|\x90u>\xb9}>\xb1\x85>\xad\x8d>\x8d\x95>\x92\x9d>\x95\xa5>\x82\xad>\x99\xb5>\xba\xbd>\x8d\xc5>\xba\xcd\x8e\xb7\xda'\xb4\xdb'\xb3\xdc\xbdl\xf7\xc9\xac\xf7\x81\xf6\xbb\xc5\x82G(f\x87\x15?\xb9\x1d?\xbe%\xdfA\xba\xb2\x8d+q\xc0\xfe\xf7I\x86\xf6K\xf7\xbb\xfcG\xe2\xfa_\xd5Aa\xbe\xfc7_\xfe3_\xfe3\x1c\x07\xbd\xce\x9e\xc6j\xb7\xdb\xe4aQ=\xf8|H\xb2\xd07\x0fH<\x98B\xa2e8\xa0N\xe2Z\x0c\x9d\xb8\xd3\x89LouOs\xa4\xfd\xd9\xeb\x8c\xfa\x15\x19\x8d\xfbU\x17\xbdb\xb2\xf34\xd5E\x1b/B\xf35\xaf\xcbF\x89\x9b\xe4\x06\xf9Z]\xcc\x8e\x0e\xfc\xef\xb5W\x9a\xf8_\xf3\xf0\x81v\xf8\xd0\xc5\xde\xbd\x1e\x82\xde\x87\xf1r\xdd\xdc\x1e0\xb3\xde/\x9e\xf5\xa0c\xad\x84q\xb8/\xf6\x8a\xc3@\x94\xa3U\xac\xc3\x18\x8br\xff\xd3C\xc2]L\xa2\xfck\xd5\xdb\x9e|Ql\x80/\x0dk\xa3\xf2w\xe4\x0b\xc7Gt\xc6\xd1\xb9d\xd3\xde%\xd1\x9a\xa6\x9c\xd3\x15\xaa\x8c\xd0\x15\x93\xc3\x15;\xe4\x91HZz\xf0u\x8bD\xfb$\xcew5\xd3\x9010;\xfd\xae\xd9\xb6\x9aY\xf9\x7f\x11+\x97\xab\xda\x9b\xa9\xc3x\x19\nn*\x99\x9b\xbb\x83|y\x9b\xd1\x857\xac\xfe\xc25Zs-\xbb\x036\x7f\xaf\x85\x11*\xff\xb4 \xc2\xbaH\x95\xbf[z\x9b\x1bC+\xbf\xbb\x0b\x9f\x06\xbbt\xd1i\xfc\x8c\xc3F8\xfe{!#\xf8\xb1\x8b\x85\xf8\xbbe\xf8\xc6\x9a\x0bY\xb8#\xcdG\xaeE\xc6\x88\x1b\x07\xc5\xee],\xd4/\xc3\xf0XQ\x1aCJ\xffJ\x83\x1c\x83\x8e\xd8V]d\xc4\xdf\x87\xa1\xb2!aT\x7fr{\x13\xc6$Z\xe6$\x8a\x8eK\xe1W\x1b\x10\x0b8\xea\xdf$\xd4zB\xc8*c&\x0b\xfa\xfb8\xf1\xf8t\xc9\x8c\xa8\xe5\x03\xcd\xb1\x8d\x9aa&F\x8dO\x9c\x185b\xf3\x17HI\xba\x06N,\x19\x03\xd3\x04z*\xda\xf2\xa8R\xbe\xcc\xc3=\xa6x\x8cr\x0c\xadIN\xbfbm\xfe\xa5BN\xc4\xcch\xbc\x1e\xde\x19O \x9a\xe3\xb3\xbf\xc6\xf8\xac\x90\xb2\xcb,'\xe9\x08\\%{\x1b\x85\xa9\xc2\xac\x8a\xfdw;Z%ID\x89z}\xba\xb1PJ\xcb7\x14m\x90\xa4T\x12v\xcf\xec\xd8TJ6\xe3f\xb3\x04Uo\x1a\xe6\x9bfbM\xb3\x0dg\xb2\xb9T\xbc\xe5C\xbd\xa9\xe64\xd3\x10&\x9a\xc3<\xf30\xcdL[i$\x93\xect\xe6\x98k\x9d\xa61\xc5\xba\x96\xcf\xcf`\x82a\x90\x98\xca\xf4\xea\x9a]\xa75\xb9\x8c\xe6\xd6\xe9L\xad\xba\x99e\x91N\xdf\xf3E\xbbn$zi\xd4\xab5\xfd\x83\x7f\xef\x12\xdeR\xd8\xa3R\xca\\\xdb\xbf\x8etI!\xa9\xe2\x1a\x19@\x994\x92D\xdaFM|\xffKg\x16\xb5`\x95\x86\\<\xd7X&\xe1\xf4\xbc\xacj4x\xd0\xc6\xad!\xdf\x06p\xe1>M\x9a\xb86%\xd9\xda\x9d\xde(\xd2\x1bn\xa07\xde\xc0f\xc0\x81\xf3J\xa6\xc1\x90\x03;\x11\xc0b\xd09\x9b\xba\xb2\x85\xc63\xee`\x1a\x03\x0f\xbc\x8c<\xfb\x84GJi\xd62\xb66\xf5M\xb7\xf50\x17\x03\x14\xa2\x88[\x01\xf5!\xfa\xdeEW\xc9w\xa7:\xd0X\x84\x81\x83\x9d\xad\xf7F\x8c\"a\xc0YI'\x18\x8c\xa2\xc1!\x1c\\\xe2\xc1* \x9c\"\xc2.$\x9c\xcd\xdd\x82b\\Q1\x99\xb0\xf0\x13\x17\xae\x89O!2\xbaB\xa3\xef}\xb5|~\xac\x8e\xc3|_\xcd\xf3\xbeZ[ax(%\xd4]5\xdeBd|\xf7\xd4I\xca\xe6n\\\x07\xeaL\xa6\xf1U7\xb7\x9c\xe64eB \xe2iHy\"\xbf\x1f\xb01\x8cG\x01\xb03\x90\x16\xeb\xe6!\x80\xc7\xf7i\xbc\xcdw*\xd8m\xb8\x11\x00u\x15\xda\xe8\xcb\xe0@>\x8duk9\xe1UE\x10\x11i\x97\xd6\xaa\x7f\x84\xd0Y\xfc\xf3\x01\x1a\xeb\xa7\"I\xdb Q\xa8\x03\x8a\xebb\x84N\x02IV8\xd04\xa0q\xce\xceN\x8c\xb2\xfc\xc4\x92\xe5\xe4\x9e\xf2{9\xa5\xfdL%\x87\x88#\x8c8\xadi\xd83H\xe2,\\\xf3\x1aw<\xb6\xd5\xe4\x98|\x97\xd2\x8c\x89\xb8 \xa6xVN\xa8\xc1*\xffC3\x8e~\xdb\x8cJ\xf8Qs\x01\xafeDL\x8a\xd3\xdf/\xfem\xd1\xccl{\xa0y\xb2\x9c\x12q\xcb\xda\x08\xdeN6\xf0=\x95\xab\xc05\xc3-_$\xf1\xbfb\xbf\xb4\xe7\xa6]\x1b6\x13\xba\xeeL\xf9\xf9\xb3?\x98\xec\xc9)\xa7\x8dZ/\x12\xd7D\x15b\xf1\xfe\xfd\xffi\xad^5\x97\xc9\xf6\xd6\xb0\x89\xa4\x94\x04;\xb9\xf1\xed\x13\xea\x1e\xe7\x9b'm\xcca^\xde\xc6F\x1f\xe5%\xa2=\x0f\xf3j\x9e/\xfaKD\x8b\xcf\x18\xb1t\x1a\xbf\x8d\xe6\xf26\xd8\x0d\x19\x9b\x19\x93\xcf\xb5\xefK\x98\xe6r7\xc0\xc0\x0b\xde0\xe9%o\xe8\x7f\xd1\x1b\xa6\xbd\xec\x0dS^\xf8\x86 /}\xc3\x04\x17\xbfa\x8c\xcb\xdf0\xc9\x05p\x18z \x1c\xa6\xb9\x08\x0e\xe3^\x06\x87 .\x84\xc3\xb8\x97\xc2\x01y1\x1c\xa6\xba\x1c\x0eJ*\x8f{A\x1c\xa42B\\\x12\x87i.\x8a\xc3\x90\xcb\xe2\xf0\xab\xad}\xdf\x19B\xa3\xe6'\xbbD\x0ec]$\x87\xa9.\x93\xc3D\x17\xcaa\xf8\xa5rp_\xad\x06\xdb\xe5r\xc0]0\x07\xd3\xc5V\xcf\x8b\xe6`\xe9Gs5p\xe8\xa5s\xf0\xa2\x8e\xfb\xf29 \xc8\x80\xb8\x84\x0e\xbe\x17\xd1AO\x9e\xe1\x17\xd2\xc1})\x1d\x1c\x17\xd3\xc1y9\x1d\xecT\xc3_R\x07\xd4Eu\xd0^V\x87\xa1\x17\xd6\x01{i\x1dz^\\\x07\x0b\x99\x10\x17\xd8a\xccK\xec`\xc3E\xc3\x89#_h\x87).\xb5\xc3\xf8\x17\xdba\xf4\xcb\xed`\xbf\xe0\x0e\xdaK\xee\xa0\xbd\xe8\x0e#^v\x87q/\xbc\xc3\x14\x97\xde\x01\xf0\x17\xdf\x01w\xf9\x1d|.\xc0\x03\xfa\x12<\x18\xc4\xb9\xe1n4x\xdc\x8fv]\x88\x07\x9fK\xf1\x80\xbd\x18\x0f\xfa \x8d{A\x1e\xa6\xb8$\x0f#_\x94\x87\xb1/\xcb\xc3\x08L\x81\xb84\x0f\xa8\x8b\xf3\xd0\xb8<\x0f\xda\x0b\xf4`?\xect/\xd2\x83\xeb\xd6\x10\xe2k\xcb\x85z}\x03\xf3\xa5z\xfd\xf7\x9a\x8b\xf5\xfa\x0f\xb5\x97\xeb\xf5\x9fv.\xd8\x03?\x86\xa1orUM\xec'\xb7\x91nv)8\xdd\x0d/\xf3\x88\xa7\xb8\xe9\xa5@\x7f\xd7]\x8f\xd7\xe47\xbf\xfa 5\xd5M\xb0\x12\x17\xedE|=.S\xde\x0cS`\xbd\x90\xafGk\xaa\x9bb\n\xda\x17\xf3\xc1y9\x1f\xfa\xc7z4\x17\xf5\xc1\xe5\x812\\\xd8w\xb6\xeb^\xdcG41_\xe0w4n&a\x8ct\x91\x1f\xcc\x97\xf9\x1d\xe8\x98\xafLC-\xdfPw\x07{P\xc7\xc6K\xfe0gF\xfd/\xcc\x8c\xb2\x16\x06\x80!\x8cd)\x120\xa8_S\xc1\x80\xaa\xd3f\xd1\x00h/\xec8\x85\x03\xb4\x99\x08\xadD\x01T.\x82\xc2\xc67\x1b\xa1\xef\xdd\x025\x8d_\xfb\x857C\n\xc3 \x99\x93\xcf\xcf\x86j`\xba\x94\x86\x11\x92\x1a\xa6Nk\x18\x94\xd80yj\xc3\xc4\xc9\x0d\xd3\xa67L\x93\xe00R\x8a\xc3TI\x0e#\xa49L\x96\xe80z\xaa\xc34\xc9\x0e\xa3\xa7;\xe0\x13\x1e&Ly\x98,\xe9\xc1+\xeda\xb2\xc4\x87\x81\xa9\x0f\xbf\xf6gC;\x83h\xcd\x83I\xd3 FL\x84\x980\x15b\xbad\x88Q\xd2!P!\x7fGJ\x04:)\xc2\x12&\xf5N\x8c\xb0\xf5\xa5\x0d\x17\x8d\x91\x1e\xe1G-\\\x8a\x04\x86(\xc84\x89\x1e\x89\x12\xa6\xd8\xda(\xc9\x12\xa8t w\xc2\x04&e\xc2AE\xbf\xb4 l\xe2\x84)ub\x84\xe4 \x8f\xf4\x89\xfe \x146\xa2!\x93(FN\xa3\xb0b\xa4\xe5\xd4 \x92)&J\xa7\x98$\xa1b\x8a\x94\ngR\x85)\xad\xc2\x94X1nj\xc5\xe8\xc9\x15\x13\xa5W\xf8%X\xa0S,<\x93,|\xd2,\x8c\x89\x16\xe6\xa8:>\xae\x8eI\xb6\xf0L\xb7\xf0H\xb80Lm\xfc\xa4\x8b\x89\xd2.\xc6O\xbc\x98 \xf5b\x0c6A\xa6_`\x130\xda)\x18\xa6$\x0c\xc7\xa1K\x9f\x88\xe1\x9b\x8a\xe1\x0e\xce\xa3\x9a\xd8\xd31<\x122\xbcR2\xd0I\x19\xbd\xd220\xa7\xc9\x91S3~\x8e\xe4\x0c7\x07L\x9b\x9ea\xcb\x85p\xb2\xda\x94)\x1a\xbe\x88M\x9d\xa6aK\xd4\xf8\xb9R5\x10\xc9\x1a?G\xba\x86>a\x03\x93\xb21(\xb6eH\xdcpz\xcf,\xc9\x1b\xce\xb6\xfa\x04\x0eD3{\x12\x87O\x18\x7f\xccD\x0ek*\x072\x96\xa9\x0fj\xbb\x13:\x06voM\xeb\xb0%v\xcc\xf5>GH\xf5\x98,\xd9\xc37\xdd\x03\x91\xf01\x90\xd1\x1ci\x1f\x03{\xb7%\x7f\x98\xd3?&J\x00\x99\x0b\x97\xce\x85KOU\xb8\xb4\xb6\n\xfa, \x9f\\#^\xfa\xa4\xec\x0f\x93tT\xd3\xa2=\xd3\x8e\xb8\xa2}\xd1\x9f\xb7\xe7\x07\xa2\xac\xa9g\x9a\x05\xc2p\x04o\x86N=\xfb>\xc9i\xcf\xe5\x7fHr\xcdS\x13\xe8\xd5\xb7\xe4\x90\xf5\xdb\xff\x0c\x1f\xfc\xeb \"\xaf\xa5\xfd\xb9\xcb\x8axM\x0f)\x0d\x08SUp\x9d\xd2\x0dMU\x8e\xce\x9d\xe80\xbb\x830\xcerJ\xd62;\xab4\n2\x9a3\xbd\xc0$dH\xb3\xae,\xe1!\x9a\xb5p\x8c\x87\x1b\xb8\x8bh|.\xfb|\n/_\xc2\xf3;\xe9^'\xb9D\x9e\xfb\xe2\x1e)\x8f\xd1?_\xc0U\x0c$\xd2\x08)\x11\xf5\x0fHF\xb3\x0b\x99\xe5\xc0q\xe2\x0e8up\xcf\x13\xf8\xfe\xe3\xed\x9b\xe5\xc7\xeb\xdb\xab\x8f\x1f\xea\xe7\xfc\xb6\xb5aY\x1c\xd3]\x1dC\xcf\x8e/\xff\xe7\xcd\x8d\xe3\x8b\xcbonn/\xaf>8\xbe\xfa\xf0\xd1\xf9\xc1\xf2/W\xb7\xdf.\xbf\x7fs\xdb\xfe\xb4t\xe3`\xa6 WK\xcf\x82\xa7\xc9\xb0\xd6s\xb5\x00\xa7\xfdm\xf2\xf0\x81\xd7\"\xea\xbe\xd7-\xa5\xee;\xd3\x82\xea\xbe\xd5,\xab\xfe3\xe3\xe2\n\xf0Z\xe2\xaa\x91\xfb\xb4\x01\xc0\x84\xebG\xb1U\xb5\x9e:^}Pr\x8d\xd2\x10\xe1\x03\x8d\xf5z\xc2\x18&5\xae\x8dqN5=\x15'_%\x87:&\xc6\xd8cgI_\xb4\xffP\xeb\xf6(\x8b\xc4\xf9u*\xd7\xff\x85\xee\x8fU\xe7\xb1\xb2\x06z\x8c\xf0\xe1\xe3\x8b\xd6\xff7h\xd1\xab\xc7\x8a\xc1\xda}W\xbf4G\xe1g\xce\x07U\xfa\xd02\x9e\x90\xee=\xf6\xb3\xc9\xd2\xac\xe0/\xbck\xba\xae1i\x85c\x11\x87<\xcf\xb4\xac\x8f\xc9\xff\x91\x1d\xa20\xd7\xfa\xdcn\xc28\xa0/\xa4\x95\xf1U\xb6\xbe\x87\xdf/\xfe\xf8\x87\xb6 \x14\xe6\xf9\x99\xfe\xe3z\xf0\xc2\x86=\xc3\xb7\x86\xa9 `\xec:\xd6\x01\xcf\xd2\xe6my%\xcf,o;\xf7\xae^_(\xef,M/\xcaP\xb6f\x81\xba\xa6Z\xdd\x8a\xc2\xd8h\x1c\x0f\x1f\x13\xad\xef\xcd\x00^\xa7\xb1k\xa4\xfd\xaan\x05h\xed:k\x87&-\xe8\x96\xda\x13\xdaw\x13Zx\xa3\xdbx\x8e\xe52\x87\x02\xf1:\x14c `\x8d\x03\x84a\xe0a\x14x\x1a\x04\x06\xab\xef\xe7q\xc0\xda\xec?\x84\x05h\xb7\x01\xfd\x16X\xd7\xc2l\x07\xe2\x17[\xf7\xb5\xd1\x16\xf4Zx\x01\x9e\xcb_5s\xc9\x16\x01'\xb2 Of\x15Nd\x17\x9e\xc22\x9c\xc26<\xa9uh\xb7\x0f\x9d\xfb\xddm#\x8el%\"\xedD\x1fK\xd15\x8b\xfe\xd6\xe2x\xf6b\x07KQ=[9\x89Y+a5\x88\xdd\x9f\xcd\xc1\x889\x18q\xea`D\xf7\xa4\x81=\xc7\xa0\x8a\xaes\xa7\xf4u\xe3I\n\xe4 \xa6[\xdd\xde\xb0 \x06N\xb3\x89\x871^\x8a\xa8\xf7gy$B\xfb\xe0\xc0\x80\x99\xa0j\xf3W\x89+\xa8G!\xcc\x0fB\x0c@\xd4@\xf2!\x0f@\xd4\xfbC\xbd\xfd\xe0x\xf7a\xc0\xecP\xcb0\xe8\xad\x07\xdb;\x0f?\x1b\xe2=\xdfv\xa8I\x81\x96\xb2\xe2\x7f\xe2\xb2\x85}\x12\xc6[\x89E\xa2\xb5{3\xbb\x9c\xf9\xd4\xc8\xb4B\xca\x99\xa3\xceO\xd2\"\xad&\x08\xa9\xfd\xae\x19|4|\xa2\x0f:j>\x1e=\xd8\xa8\xa1\xdb\xf7\xb5X\x1e\x92`\x06o\x8f\x83'[\xaa\xb2\xe3\xdb\xd16\xef\x9ejm\xa7\xad\x89|8\x93xoF\xf4\xdb\x18\x08\xdf=\xd0\xe3\x0e\xf1\xf6\x83\xbb\xfb\xb0n=\xa0\xa3\x0e\xe5\xe8\x83\xb8\xc6\x033\xa5\x9b\xd3\xe4c\x99]f\xee\xa5\xaa\x1a\xb8\xbc%'\xf0\x93\x9c\xc0C2\xbaodZ\xaf\xc8\xb8\xfe\x90\x13yBL>\x10\xe3~\xb4{\x0cF\xf3x8}\x1d8/\x87 \xdb~\x9e\x8dq|\x1a\x06\x0b\xe2cC2j\xe8\xdf\x94\x82n\xd9g\x96xv9g\x94nN\x99\x86\x94d&\xf95\x99\xd4\x9aLV\x8d$\xa1\xa6\x90KcH\xa3Ie\x90~\x1b\x84\xf1\xb6\x97\xa7\xc3\xf8\xc6\xb5A\x90\xb5]\x8aC\x9e`/\x8dy\xf3\xf3\xebS\x9aT\xe5\xf0\xbcm\xebG\xabe\xe5xb\x1d\xa7\x03:\x06\xc8t\xcf\xaaW\xa7\xe8V=\x99\xa6SW\xbf\x1c\x08\x14\x1a\xfdg:\x17\xc8 6\xf3zB\xbd\xd1\xb2\xbe1L\x87\x7f\xd9\x8b\xef\xa1\xbf\xab\xb1=w^\xd7\xa2\xff\xe7=L\xd9\xb7\xc6d\xfa\x0d\xa6\xd4q\xdd\xce{\xeb\xb9nW\xe3\xe8\xban\xbf\xfd\xf4\x9d\xae\x9fQu\x1eh-n\x97\xdb\xaaf\xb7\x8e`_[,k)\x1e\xf6a\x9c\x97\xf2\xa1\x976f=,;\xf7\xd9\x0crAZ\xf2\xb9\xac\xba\x15$!/>\xc0\xfa(\xbf\n\xe3M\xc4\x03rK\xb6i\x96\xa2*\x1d\xbe\xef\xbd|W\x9f\xc4qA\"Y\xd4\x0e\xc2\xb8\xea\x17X\xbf\x9a\xe1\xf6\xe4\x8b\xff0\xee^\x11~\xd0\xaaW\xe9l6\xf4\xbaMH\xb4\\%\xf1\x9ab\x14\x92\xec\x935b\xc4\x96\xc1\x1b\x10\xed\x81\xe4\xc9\xbe\xba\xa0\xbb\x8a\x92\xe0>c\xcany\xa4\xc4\xedi\xb4\xc4\xf4\xe4\xb0\xa28']\xcb\xae\xd9\xf0\xc0\xba\xd6q\xbd\xd4v\xa2PE\xedau\x15Dc\xfc\x01\xfbd]Dta\xe4^\x1ei\xbb\xe4\xab~\x9d&\x0fa\xc6dk\xcft@\xc1<\xcbC\xd9\x8f\x07Al\xd1\x84N\xbf*x(K'\xf2\x99\xf2\xe2\x1e\x82{k\x1f\xf2\xa0\x81\xd6bh\xdf\x8f2\xd1\xc0\x1a\xa8lv\xf1\xac\xdd\x87)v\xd9]\x81+\xc5\xba=I_\xb2\xfeH$\xaf\xb6\x92\x81\xd4\xd5\x07x\x12w&\x89 \x02\x97\x8d\\W\xd0\xbaDm\xbe\xf3\xedI\xd1CC\xacw\xe6v0\x98\x9ab\x0bJ\x0b\xb6\xbe\xf9\x8c\x83\x9b\x10\x00\xa3\x9a\x00\xfb\xa1\x05\xa3.\x00\xa32p\xe3\xf8\xaa\x0e\xb0\xa9\x0f\xbf!q#x\xdc\xeb\xc3\xaa\x140\xab\x15\\\xff(\xf5\x02v\x15\xe3\x18 \x93>\xe2\xa3n&y:_l\xa3\xa6-\xf5\xaa\xc1\x88\xc8\xed\x9a\x15\xab\xec@\x02\xb7\xc9\xd3J0\xd2~\xd3\xa9\x1c\xeba\x80\xd6\xa6P\xb7\xcf\xc3x\x1d>\x84k\xae\x9e\x94\x9c\x90{E\x14\x94\x13\x95\xb8\x9b\xdd\xb0\x8fDW\xd7\xba\x10k\x8bx#\xc9<\xbb\xc8kH<\x95WV\xceh\x80\xa8\xd3- \xd88\xdc'SL[\n\xd8\xb5\xa8\x06\x86\xef\xcf\xecYD\xb2]\x18o\x87\x1d\x1d\xb2p\x1b\xd3\xf5R\n\x86\xc70^'\x8fN\x8e\xae\xc4AS\x1a\xec\xc3x);d\"\xc6\xbb\xb7\x86\x0d\xb1N\x1e\xe3<\xdc\xd3\xe5_I\x18-\xd7\xb2\xc2\x98\xb37N\x96\xe5\x86\x17\xbdO\xe2\xe5:)V\x11\xe5X9\x9b\x1a\x10\xe9\xf4(\xf0\xea\xd7\x9d\xce\xe6.\x8b\xcdu4\x7fYr{%r\x03\xd5\x9a\xeb\x0c\xf1\x0e?\x8c\xb4\x835v7~\x1b:\xb8\x0bpJ\xa7\xabs\x9c\x9c\x86\xec\xb9\x93\xea\xe9\xe6:k\xcf8\xee\xb3vaA\x0e\xc1\x89\xfd\xba\x9e\x80+K\xab`,M\xef\xe6\xf5\x9bp\x1b\x87\xf1\xf6*\xde$=\x19\xfe\x81D|\xb1\xc2x\xbb\x0c\xe3\x8d&\xdb \xcd\xfad\xbdNi\xd6\x89\x1e\x989\x87W\xc4\xd9i\xe3\xc3\x88\x05\xb5\x98e\xdf\x8a\xac\x1e\xa2\x8a\xfcp\xef'\xc9\x93\x94g\xe1\xf2\x02\x9e\xe21\x925\xfb3\x85\x8f\x9f\xf8\x0fE\xfcW^'\xac\xd1i\x18\xaf\xe9\x97e\xb2\xd9dt,,]\xe9\x15WlHU\x9f(\x830\x0eR^\xa2\x88\xae\x81g\xf6\xb1\x1dPyu\xcby\x11i\x05k\x8a\x17\xc4\xecG&\x92x\xd0xO\x8e\xe2\xbd !Ox\x88\x99\x06\xc9~\x1f\xe6\xe2\x99\x91\\f^\x851\x04I\xfcWY\x13^\xf8\x1d\xb5\xafY\xdc\xdd\xf0\x9e\xbe\xe1R\xef/\\4\xdd\x95\xf6NN\xd3}i\xf2pr\xaa\xa4\xf7\xbb\xef\xc2,S\xcd\xbe \xf3\xcb4%\xc7\xbb\xa6\xbfT,\xc9\xb2\x88\xf3\xb0O\xf2\xb7\xb9\xfaW=m/\xdc\xd3,'\xfb\x03\xf0a$\xe9\x9b\x14\x0e3\x89\n\xac\x0b\xca\xce\x83Q\xf8@c\x9ae\xa5\x00m\xe2\x9d'\xfbU\x96'1\xfe\xcd\xac\x0eZ\x1a\xd6\xf8\xcb\x8e\xf2\x9c4\xb1L\xea\xc1\x04\x8e\xe0\x8ed\xa2\xfc^52\x9c\xdf\x87\x11C9)\x84\xdf\xb6\xfc8\xa3\xf9\xd3\x05\\\xe52\xadNS\x96\"\x0e\xda<&8\x84[\xe3\xf4\xa7\"|H\xc4k(\x0c\x17\x91\x8ezT sI\xbc \xb7EJ\xd7\xb0\x0f\xb3\x15\xdd\x85\xe4\xa1\xfd\xb4\xca\x9e\xaf\xbc\xd2\x93]\xbf\xaa\xe6\xd5C}\xf65\x18\xf5:s\x9a8\xbcA\xc1Z\xf7\x89M\xc9Z\x1b\xda\xb7\xd8$\xaa\xd6\xael\x07a\xeb\x12 \x13(\xdd\x13\xa8\xddI\x15\xaf]\xf5\"W\xc3\xa4~O\xa0\x80m*\xd8\xae\x841\xecr2E<\xbd*F*c\xe4\x8a\xf7\xdd\x7f\xc3\x95\xf2Dj\xd9\x85\xfct\xaa\x19\xa7\x9cm\n\x99DQ\x85@\xe5\x18\xd7_\\\xf5<\xee\xcd\xd7M\x9b?a\xe2\x05\xbf\xdc\xeb\xa6`q\xc9\x03\xf7\xa7o\x9b5t\x92\xc6\xeb\x10a\x0c\xdbO\xd7\xaf*sM>\xd3\x90\xc1\xe3\x8e\xa6\xe2\xc1\xcbzwA\x92\x8aO\xf9\xa3\x12\xd2n,\xdfv`\x12\x94\xbb\\\xea\xd3m\xcdQ}{\x93\xec+\xc4\x0c\xaf;\xa4\xf4@\xf9\xe3e\xdf\x90\xb4\xa4\xab\xf9I\x92\xc6\\9\xa3t\x1f$Q\x8f6\xb8-Z/\x1fP\xbd\x9d\xb7M\xab\x93D\x9e\xe6\xac\xc6\xc4\xd4\xb2\xbc\xc9\xac4\xec\x0f\x93r\x18\xd9\x884\x99\x8f\x9eX\xd9\xe4\xfd\xa8f\xe2\xa4\x06\xe2D\xa6\xa1\xc9(t\xd0Xg\x08Nj\x02\xea\x8d?\x93\xd9g[\xf2\x93\x98zS\x1ayN\xf3n\xc4\xfd1\xcc\x8c\x1b\xdd\x803\xa1:\x8d\xd1f0\xd7\x94\xbc\xce\xf9\x8b\xb7\xa5\xb8\xfe&\x89\xd77\x8d\xb7~4\xeb\xd0\xbe\x93\xf3\xcd\xc7\x0f\xafm\x8f\xd5\xb4\xbf`\xff\xe7\xf8\xf9\xea\xc3;\xc3\xef\x8d\xc6e\x8e\xb2\x1d\x05\x13\xc5\xab\xd9\x96\xc6j\xed\x11\x8f\x92\xe0\xadk5\x86\xb1^\x806\xcd8\x860\x96\x99\xce\xd5\xaek\xbft\xa3\xa7\x10\xebQ\xfcK\xc7\x06\x82'\xe5\xab\xc0B\x92;z\xbc\xfa\xf0Nuy\xf5\xe1\x9d\xb5\xcf\"^ ;\xc8\xd8\xa5B\x11\x81`\x1d9\x03\xdf\xbdbr%\xcbB\xefD\xfc\xa0l\xc83\x9e\xcc\xc9]\xed\x0f\x1bI\x0f\xfceq\xee\x1eT\x1f\x81\xccS\xe7&e\x19j\x0bRJDVb\x9d;\xaa\x11=\x8f+l\x0c\x0fk\xbe1\x1f\xd6\xb6L\xe4k\xa2\xcd\xdf\xe8\xdf\x8aS\xc8\x9aFt\xcbOZ\x17\xc0u\xbe\x8a[\xb6\\\xdf\xe4\xcbr\x086\xaa}\x83\xaa*\xa5\xab\x8d^\xdb\xa0\n\x986y\x10\xb93\xe9\x96:\x11\x15)6\x83\xf1\xadu\xa3E{M\xc2\xe8(\xac)\x92\x95o#\xb7t!\x9f\x96\x11\xe3\xe2\xc0l\x8c\xce\x1b\x18C\xed\x92Z\xb7\x8a\x05\xf8c\x97\xa5\xa1\xd7\xa18\xc9db\x92\xfe\xaaM\xb5\xfd\xaa\x0bC\xd5\x9fZy\xc8\xea\x82Fk\x078w\xf6\xa7\xfa\xfeDn\xef\xf6\x1a\x1b(7\xd1\xce\xd0\xed\n\x0c\x06'\xd9\x0d\x96\x9d\x80\xc5q\xf2\x1d`R\xbc-\xa6\x18$\x8b+\xdd\xdc\x11\xca\x06\x96|]\xc3\xca\x8f\x1d\x99\x99u\x8f\xb2S\x9b\xb4\x16\xcdjJrW\xecI\xfc\x1537\xb9\x17\x85\xbf0\xaaN\xdd\x1a\xcd\x12\xaei\x9c\x87\xb9;\xcb\xb15\xb0jW7G\xc4\xd5\x1c\x12U?\x96\xaf\x07\xc19\xfd\xb2\x80\xcf\xd7I\xca\x0fw\x7f\xa6\xc7\x15\xc9\xe8\xd3\n\x8fG\xba\xcaB\x7f^\x93\xcd\xb4X\xa8\xdf\xa20\xbe\xaf\x06\xcahP\xa4a~\\\xf2Wd\x03\xcc\xc9\xb91b\xbb\xbdvh\xba'a\xc4\xc9\xae>\x07\xf9y\x85\xc8\x9a\xe6$\x8c\xdc\xce\x87\xd6\xf8\xb2\x99\x1cV\x9e\x89\xca\x81\xe5\xaf\xda]RcN\xadQU\xfb\xd8\xca\xe4\xdf\x86\x19;\x10\x04$\xea\xe1r\xd9Q\xb2\xd6\xb19\xda\xb2y\xa0i\x16j2\xb6\x84oeE\xb20\x90N\x06v\x84i\x7f\xa5\x1f\x0b\xac\x81H\x99V\xdd\xfd\xb3#F\xe0p\x92\x02\x90\xc3a\xecN]\x91\x87WI\x9c\xd18+2\x08\xc8A<\xeb%\x94\x99\xfasZDU\xc16v\x84\x156\xa9\xa2(\xff\x9a\xffO\xb0#a|\xa1\xcb\xbe \xa2B<\x9e\x1bE\xb5O\x99\xedA\xd8\xac\x8a@\x8c\xab\n:\x88\x11\xa5\x06 \x87C\x14\x8a\x93\xff\x13M\xddjv\xbc\xa1\x90\xa7$\xce\xc4\xab\xba{\x12\xec\xc2\xb8\x15\x0b\xe3\xe3\xf9<\xe52bVV\xcf|=}\xe4\x90\xbf\x11\xcdI\xa8\x9b\x8d\xe0\xf8CJ\x1fFg\xf8\x1d\xc9v\x03XS\x13\xf1\xe0\xc9\xa6\xf92\xa3\xf9\xb2+\x02\x14X\xb0\x05\x07\xc6\xbc\xb9.\x86Q\xfe\xc8\xfb\x0e\xe3\x9cnij\xf8\xc6\x1e\xd5\x03\x0ba\xc0M\x1cp\x11\xa8\\\xd2k\x92\xe6\x19\xcd\xbf\xe5t\xea2\x84\xf0\x94-u\xa8 8\xcd\x1c\x8db\x1d\x8a\x9d(\xd8\x89m\xd8\xc6\x97\xec\x0f\xa3\x0d[\x05\xeaF\xeb\xb2=\x93M\x9a\xec\x95T\x81\xa4\xc8\x0fE^\xfd\xad\xda7\x8d>x\xfcm\x02\xdcJ ;Z\x8f\xe4p\x18\xad/\xceW2T4Z\xa7\xf4\x81\xd9\x81\x01\x1d\xad\xc3r}+u\xd5\x11y\xe2B?M\x97\xbe\xf9\xb9\xb8\xdci\xb1'\x1b\xa7\x8aR\xa5 \xdf\xde-\x8d\xd7<\xdc\x90\xcbm$\xc4]\xa5\xa1\x1eH\xa4\x0d\xd8L\x93E\xc5\xfe\xce8\xd9D\x0f\x87\xd8jL\xbe\xddW\x83\x0c\xeao\xed\xa3\xdc\x93\xacl\xf7\x1f\xb0\xa2\xc1\x0eh\x1c$2\x8a\xfa\xa7\x9b\x8f\x1f\xda\xe9\x19\xd5N9\x14+M\xc4\xdd\xa1&\xecJ\x825]\x16\xa9AK8%\xb8\xcb\xbc\x12p \x9f?\xbd\x7f\x96\xd2,)\xd2@\x1e\xc1\xb8\xc7RTda\x07_~@\xda\x84\x92v\xb9\xbc|\xc9\xd9\x89\xa6!\x89\xc2\xbf\xe9\x93\xac@\xcc0O\x82$\x82U\xb1\xd9\xd0T\xc5\x86e\xb4L`\x0f\xfb\"\xcb\xc5\x99#\x8c\x81\xe4\x10Q\x92i\xf3m\x80\x87c(\x9c=;\xe3~\x01\x12\xe44]\xf0\xa7d\xb9\xe7'\xa3\xdb=\x8ds\x85\xde\xe7O\xef\x9fdp \xf9N\x0cQ\xde\"0\xf5\xcd\x1am\x8a(:\xc2O\x05\x89\xd8\x9c\xd7\x82\"\xb2C>\xf7s\xc2\xb6\xb2\xa9\x8b;6\xdc\xb3m\x92l#\xba\xe0\xb3_\x15\x9b\xc5kyw\xe3\xee\xa9\xc0\x96w\x9a\xed\x92\"Z\xb3\xd3<\x8f6\x06$NbvR\xe1\x9b\xdb\xd4\xff9]l\x17\x17\x8cD\xdcn=[\x9c)\xe77 \x02z\xc8\xe9\xfa\xa9\xf9u\x83\xab\x18\x0e\xdc7\x11\xd0\x0b\xc8)\xd9gPd\x05/}*\xe2\x99\x870b\xd8\xe4\x89\xb0\x9d\xc3\x98\x07\x85\"Y\x15G0F\xbe\xa3G\xd3\x00\xe2\xd6%\x84\xb9\xaa\x1c*\xadp\xb6\xb8\xf4\x0b_\x98\xcb\xf8\xb8\x80o\x93G\xfa@Sq?\xf0\xf3\xa7\xf7\x99\xf4\xff\xb0&\x86|:\x06Y\xb0\xa3{\nw\xbb\xa2(y\xcc^\x18i\xfe[\xb8\xdaT\xd8\xb1\xc5\xe2\x97\xf8\xd7t]N\x80\xfd\x91dY\xb17=\xcc\xce\xbb\xb9\x8c\xe1\xdb\xdb\xdbkx\xf7\xe6\x16\x92X1\xb8\xe0\xec#/~J\xe0\x876\xe3\xdd\x1e\x0f\xf4\xc7\x1f~4\xf5\n*\x01%V\x8b-\x14\x0b'\xe9!M\xd6E@y\x943M\xbb\xb9i\n~\x0b\x97\xd5I(\x03\x92R\xc62\xc9\xa3p0\x06$`\xdb3I\xee\x8bC\x99\xe1\xb1\"\x19]\xcbY\x98q\xfb\xfc\xe9=G\x84G\xde\xf3\x1d\xdd\xd7\xb8t-\xd8\x94(\xbc\xcbp&\x89\xbb\xaf\xc6(\x10X\xf0-\x98\xd2M\x92\xd2\x0b\xd5\x9c\xf5J\xf2p\x15Fa~\xe4\xd5\xcb\x95\xa7\x8d\x8b\x8c\xf4\xa1\x93\x10[A\x12K\xaf2o\xc2w\xca\x02\xce?gT\x9d\xff\x19!\x18+\xb1]/x\x89\xc4d\xab3\xaa\x05\xacR\xca\xbd\x18\xaa\xdb\xc5S\x13\x8d>$9}!\xeb\xdf\xca\x9c\x03\xc2g e\x82\xacm\x10\x1d\xeb\xb9J\x82w\x12\x9e\\\xa5KP\x12\xa0X\x08R\xca\xe41\x15U\x0d\xc32\xd6Vz \xab]\xb2\xa2\xdb0\xe6\x11\xd9\xc70\xdf\x19\x85\xec\xf1@\x17\x82O\xc9!\xcc\x16A\xb27K\xac\x1b\xbek2\xe9:\xcaw$n\xef~8\x97\x0eC\xba?\xe4G\xb9\xcd\x9e\xc2\x9e\xe7\xad\xac\x8c\xdc\xc5\xd1\xe7\xe9\x19\xe5;\xe3\"\x86\x9f\x1dh\x10n\xc2\x002\xba'q\x1e\x06\x99\x8e\xef\xb5\xd7n\x058\x15\xb3\xe3`\xd5\xd2\xdc\xdf\xb1\xfd\xbd\xa2\xca\xfbU\xd3\xb9\x1d\xe5\xaa\xfc\x12\xab\xe4\x81\xaayH\xde\xeb\xce\xc1m\x1e\xdc]\xc6\xc7;\xa5\x97E)\xa6t\x15\xe6)\xdb/\x16,\x94\xa0$Q\"9\x01\x88n\x15\x98\xf0\xe2\xb2V`\xb2\xb2\xda\x17\xa5\xe1\xa0\xe5\x94k\xc5\xabQ\xb8\xe2\xe8I\x11\x9bAV\x1c\x0eI\x9a\x8b\xa2\xf1\xc1\xfd\xb3\"f\xffaJH,a\xa6\xb6\x83I\xe7&\x1b(r!\x15\xd4\x0e\xcb\x98L\"\xebu(\xfd\x98[\x1a\xf3z^k\x99 V\xda\x95l\x14A|]\xcfo\xbe\x10\xc6y\xf0\x9c\x1d\xa2e\x9e\x91D\x8f\x94D\x0ccx\xf5\xbb\xdf\x99\xf7\xc7\xdb$\x81M\x92\xc0KX,\x16\x86\xa49\x8e\x07\x89\x8f\xa6\x9fI|\\0\x0c\xde\xa6\xc9\xfe|\x93$OM\x1f.\x16&\x15\x10n\xe0\x9cu\xf3\x99\xe3\x7f\x9b\x9c\xff\x86\xf5\xf3\xd4\x94\xf5g\xed\xeb\x1f6b}\xed \xd6\x9f\xc8\x03\x19\x87Z\xf0\x92\x9b*l\x88\x81D \xb3\xf3\xb7I\xb2\x08\"\x92eV\x9a\x08\xd4X\x131\xb5Z3\xd3\xe8Zb\x95\xd4\xfa\x83\x83Z\xd7\xc7|\x97\xc4F\x9bC\xe0\xf36I\xce\x17\x8b\xc5S3\xf7\x08R\x9d[\xbe\xe0\xfc\xc5\xc9\xd8\x87\x8a\xac\x83+A\xc4\xd7on^}\xba\xba\xbe\xfd\xf8\xe9\xa9\xc9\xb5%\x06\x14\x9ch\x1bR\x0cj#\xdf\x1f\x1d\xe4{\x97\x18m\x17F\xba\x17/\xe17\x87\xd5\xe2m\x92\xfc}\xb1X\xfc\xc3\xf4)\x89\x8f\x17\xcc\xc0b\xdf\x1f\x84\xf5\xf0\x1dI\xb3\x1d\x89\x18Qm\x130\x13\xad=\xbeq\xf0p\xd3\x1a\xfas\xbc\xaf\x06\xe7\xa8q\xe6\xe7_\xfd\xebK\x88\xc3\xc8\xc2\xc06\x8c\xb4\x9cz\xcb/s\x07\xf7\xa5\xe4T\xb61\xac\x8e\x95\x05\xa2\xa4:/\xee\xbf:\xaa|'\xa6\xc3u\x9d>\xd1X\x18\xcf\xd8\xb1n\xc1\x7f`V\xd8\x13f\xba\x97\xda\x86i\"\xe5\xe1\x17\xeb\xac\xeb\xb6\x14\xeeqtT\x07\x95\xcei\xb1\xb4\xf3\x80lr*\x0c\x13~4}\xf2\xec\x89\xaeS\xa9}\x14\x1a\xe2@D%\xff\x9dm\x92d\xb1\")\x9f\xc0\x97g\xc7\xc5\xdf\xce\x04\x0d\x84\xb9o:\xcb\xf0\xe1\xcf\xd8\xd7L\x12j>\xf8\xd3\xcd\xc7\x0f\xba\xbf\xbf|\xf9\xf2\xa5i\x95X\x9b\xea\x00-\xd3\x1d\xd9\xd6\x94f\x828G\x14\x19U\x99\xd4\xdb\"\"\x9d[\x13 R\xbe[\x9d\xb0\x06kZ)\xfb\x8b*{]\xee\xb6\x0biGh\x8f\xdd5U,\x1e\x81\xb8\xfboF\x9a;y\xa6,\x0d\x98:\xa1\x17j\x93\x9b\x0fn\x8c\x0f\xd8F\xaf\x8eT\x9b0\xa2&A\xac\xc4\xc25M\xb3$\xb6\xec\x11\xe9\xf3\xe0\xa9\xd3K\xbeT\xe6t\xf7\xeas\xee\xf4\x94_\xb7\x13\xdeK\xd0+\x03\x00\x0b6g\x9cTg/\xe0L\xb7i\x9aS_\x88\xb9\x9d]\x98{\xe3\xb3\xfa@\xf6\xac\xc7\xff\x14\xa8\xff\x97\xe5s6\xab\xd6\xd7>S\xbb\x92\xd5t[\xcc\"\x169\xcc\xe0\x91F\xd1W\xf7q\xf2\x18\xf3\xed\xbd\xe3\xc9\x19\xb2\x04\xb0i\x0f4\xb9\xf3BX\xa8-\x96\x15r\xa860\xe3@\x1ez\xe4\xfc\xa7\xeb\xf6\x8e\xef\x0f\xc5\x92\xa2\xb0!w\x8cT\xd8p/\x90de\x90\x1e\x18\xc9\xc9\xba\x1e\xf9P%\x1b\xc39\xcf\x7f\x95\x04\xe8\xb8\x01\x94\xff\xe9\xc7\x1f~|j\xe6\xf8\xe1l\xd2\x1c\xcd\xc6)\x9c\x1e\xac\xc3\xe7\x8b\xaf\x9f\x7f\x9d\x9d\x19\xd7\xbd\xf9\xff\"\xc9\xdc\xe4fE]\x1aTy\xea\xf2\xba\xcd\xa3\xcc!o8\x82\xab\xf4q\xf95\x0f\xc5\xc8Rf*;V\xe4\xfd\xb7\x06\xcb\x1ai\xc3\x06\x14\xb2F\xb6m;#\x16\xce\xc5@\xcf\xca\xf4S\xf9/\xee\xdbkwl=n\x9a_Oqe+\x9b\xbfm\xe5-\xdb?\xacg0\x9b\xbe4t\x88\xccjV\x90'\xf7\xd4\xfc\x9a0&d zP\xc9*B)\xf1\xe48\xee\xc8\xe2\xbf\x9d\x87q\x10- \xa3\xd1\xe6+\xf9c\x98\xc4\x9dU)\x93\xea\x96\xd9\x8e\xa4:\xef>\x1e\xabv_U C<\xb7'\xfe\x18fY!\xfcm\xcd\x14\xf9*\xbd\xaf\x8bc'\xfd\xcb\x88A7\x17G\xaa\xec\xf2\xef9M\xf7\x99-wKA\xde?\x1e\xa2I;\xab\xc0\xe9u\x197\x15\xad\x02]RZ\x05~h\x8d\x9d\xa8V\x81&e\xad\x02?$\xfd\xd3\xd8*\xb0%\xb4U\xe0\x87\xcfhIn\xf5\xfe;\xe9n\x15\xf8a\xe7\x95\x02\xa7\xa0\x14\xfcS\x94\x87h\xa0\xd7\x1eI\x11\xef\x82\x9d\x0c\xcb\x1f\xc5\xe36\xbb\xd6]@\xeevn\xab\xccm\x11k\xafMp\xa8F\xd3\xa5\x1e!g\x85,\\\xd0\x1c\xcb6\xaf=;\x84\x85\xba\xfd\xce\xe3\x17 \xb3\xafrj\x9eU\xd0\xb9\xb5a@)\xe8\xe6\x97\xe7\xcd\xec\xec*\xc7|T\xc9i\xbb\x1eR\x81\x01\xd7 /\x8aT`\x9d\x1c8'\x08\x86k$\x158w-\xb4)0^\x02}\x13L\x97L*\xf0\xc7\xf5$\xa9\xf6Mp\\A\xa9\xa0\xdfl&O\xca\xaf\x83\xe1\x82J\x05\xce9\xb8\x85\x13t\x04\xd4\x08\xd7W\x14\xf0\x12\x944\xda,+\xa3\xd4S\xba6\x17\xa0\xdb]\xe7\xb0\xf2$\xe3f0\xaci\x10\x11q\xc1U\x14\x96\x96\x7fU\x0d\x9b\xa8\xda\xa3N\xdf\xd7\xf2\xbb;9\xdf\x17\x90'[qVS\xd7\xaa\xa5\x0dL\xf6IQf}\xb4\x0f\xb7\xdf\xd7\x10f\x02\\Y\xcc\xd2\xe1\x17\xa6@\xbf\xc8\xca\xde\x9c\xca\\\xe4\x87q\xb6\x80\x1bUJRE\xad\xbbY\x1f\x84M_p\xa0\xf4\xe45:\xbb\x10\x81p\x1e\xcaM\xd2\x94\x069\x04$\n\x8a\xa8t}m\nf\xc8\xb5\xbb-\xe2\x8a~\x19\x9fmR\xe4\x10\xe64\x15\xe24y\xe0\xb6ki\xda\xc3_v4\x16h\xf3\xf0{\xfd\xdc\xd2\xee\xbb\xa9\xb5/Z\xdb&\xcc\x98\xd0\x16o\x13 \x97[m)\xe1q\x97d\xb4*\x84\xd1\xee\xbaN\xde\xb0\x19\xe4\xaf\xad\x91@\xb3B\x91W\x8f\x16\x1e\xdf\xbc*\xc7\xdf\xee\xbbA\xd7\x85|\x15 \x0e\xc9#\x15\x02lEK\xd2\xd25\xf7\xeer\xd6PGv\x8eT\xbb\xcf}\x11\xe5\xe1!\n\xc5\xe0\xcd\x11\xe4\xa7&~m\xde+\xa8|\x8c\"\x81\x8e3W\x8d\xa8\xb1\x10\x0f\x8c\x84\xf5\xabc<\xe7\xae\x16\x82\x90\x17\xd0\xf3$\xfd\xff\xd9\xfb\xb6\x1e\xc9m,\xcd\xf7\xf9\x15\x07\xde\x05\xec\x1eTe\x8d\xdd\xd3\x0fS\xc0,P\x95\x95\xedN\xb4/\xb5U\xe9\x9d\xe9\xa7\xb42\x82\x19)T\x84\x14\x96\x18y\x19l\xff\xf7\x05o\x92(\xf1r(\xf1\x84\x1b;\xe2\x8b]\x91\x12yHQ\xe4\xe19\xdf\xf7Iu\xe1X4r\xc44\xa9AK\x9a\x8a\x17\x8f\xcb\xc9\xa5\x16\xf2#k\xd4' e\xc0\xa8\xfaUj\xa7\xf4\x956L\xca\xb0\xdb\x06\xf7\x7f\xfeF\xdc\xa1\xbf\xe0k$T\xc7\xcd\xfd\xfa\xd0\xdd|\xcb*\xde\x94\xac\xfd\xb5wU\xf4y\xc3C\xc0\x98%\x04\xed\xf7\x13=kX\xc8\xf3\xd3\x0b\x97\xf2\x02udJ\xa6u\xa7\xfe\x9c\xd8xz<\xed\xb4\xdd)\"\x1bE\xc4\xb7\xab5\x06\x99\x9d\xac\xd7\x95\xe9\xaf\xb1M\xd2c\x9e\xd5\x1e]\xe7\xc0\x180?\xc9\x14D)\x17\xdan\x8c\x86\xab@\xdd@\xc3\x06\xff\xfe\xe6\xc8\x1a8\x16e\xf3\x867e=8~N\xa7M\xb6.L\xab6=\xe9\x87\xb3\xbf\xa6\xeb\x1a\xaf\xcd\xeb\xd2[)z\x88\xfe`\x91eD\x7f\xa7\xe5\xa2\x88\x9fe\x10A~\x9fB\xfe]k:\x0d\x1ekY\xdd\x8e\\lD\xeb\xfd'\x1c\xc67w\x8e\xeaCQV\xaf\x9f\xca-\xeb\xf6\xe3\xb1\x1b!#\xda\xc5\xc8\xffS\xae\x9f\xde\x10\xfb\x9d\xc5\xb27\xe0`\xc4\xed\xf5\xb8\x13\x0e{\xf5N11\xf3A.\xea\x96{\x11\x122\x1f>\x11\xc7'\x84\xecE.\xbc\x84\xd5\xf5>q\x01\xabj\xae?\xa0q;\x8dK:\x07+\xe5j\xab\xbb\xc3\x0f4\xd4\xb5\xd4\xab\xea\xa1YM\xb1\x91\xbd4\x1f\xe1\xa8\xb6\xc2\xb4\xd7\xfa\x9f\xb21 \x91\xd9\xbf\x18\x0fZ\xfc\xa9\xabp:w=C$%\x92>tOw\xa6bg?=n\x9bQ\x0d\x9eZ|5\xd9\xb5\x8d]\xe1\xc0a3t\xcc\xec#\xb1^|z\xf4\xa4\xe0 \xed\x1a@\xba~+\xee\xd8\xe6\xe1\x8f\xdf\xbd6\xe0\xf3\x11\\\xbd\xbbmz\x94\xe9\xde\x96\\&N*\xc4\x99\x188\xed\xfb\"\xe2ivY\xb1\xf0\xe1\xa8H\x08\x9f\xfa\xa3\xf0|\xca\xc7\xe9a)|\x06\x01\xe8\xe7\xf1Xw^:\xb8\xea\xf0\xa1\xf2\x01\x0fl/}\xc7\xa2\x82b#\xe5u\xb4\x8c\xd04\xc5V?U\xca\xcf\xac\xab\xc1#\xd4\xa8J\x89\xff\xad7e\xd1\xf9\xdd|\xf0\xcdY\xe9\xe4\xd6\xf7\xe2\xcei\xbd\x9e\xa1\xbe+\xf6E\xe5\xfb\xe6\xc8\x8c\xa9\xef\xf8P\x13\xc4\x9e\x99Z\xc9\x13o\x8b=\x9dK\xb5\xa9\x9a\xe3\xa1Z\xc3\xba\xa3J\xbf^\xc9\x81\x15\xcfE\x1a\xe1\xc2\x84\xfd\xf4\xf3\xcd\xd5[ n\xd0[\x8eB\x0f\x942r|]\x990g\x87\x0f\xb52\xb6Z\xf4m:\xbdMp\xbe\x95\xdaye\xa3\x1e\xfa\xae\xde\xd52?:|J\xa1\xaeN\x17Sa\x98T\x9b*\xf6\xc2\xa1\xe7\xf5p\xa2\xb2\xe7\x8d\x14u\x92Z3|\x00\xda\xfc'\xd7\xac\x18\xa7\x9a\xf5\x0b\xd3i\xa7\x1d\xea\x86A{*\xb9tcd$o_\x8aF\xcd\xb2\xec&m{v\x01\x88|Zf\xd0\x0d\xdf\xe7e\x02\xdbM\xdd\xf4\xf7\xcf\x95\x8avl<\x8e=\x98\x86\xf4\x14\x8f\xd8\xcc\n\xf9\xa26\xab\xe8\x9aK\xbea!\xb7\xacTC\xf3o[\xa1\x8d+\xd5\xba%\x9bW|\x81\xa4\xda\xc0\xe8\xb60\xef&\xe6\xdd\xc6\x16\xbe\x1a\x9e\xcd,\xfa\x1c\xfd\x1bZJt\xd5\xf9\xcc\xf2mkD\x1b[\xda\xd6\x16\xeb2\xcd\xf6F\xb0\xc1M\xba\xe2\xda+\xfa\x07\xb7\xdf\x8f\xde\xe7\xf6\xeb^\xf2\xd9\xb5\x10\xba\x05\x9f\xad\x16\xfbKF\x87\xda\xeeg\x1d{6\xf6\x0cmO<4\xad\xd2\xd1\xf6\x9f\x82\x02&\xff\xf0\xd2\xd1\xbe@A\xd4\x7f\xf2\xbalv\x15o\\u\xccs\xe2~1\x91\xc6\xe5\xde\\\x1f\xff\xfd\xbd\x9c\xb9<\x14\xf6\xdc\xde\x16\xc2\xd3\xc2\x1b\x97\xdb\xc3r\x04\x88Uq?.U\x1c\x0fmx\xd3lq\x16\x85[\xa8+/\xfcF\x95\xa8\xd7\x17\x83\xe2\xa8b\x8d\xeb\xa8i3\xaa\xfa_\xbd\xf4r\x1f\x99\xe7u\xfd\x05\x8e\xfbb\xe3 \xf9\x81\x02\x7f\x1c\xf7L\xd6\xe9Op'u&\x9c\xe4\x1ew\xc8n\xdet\xe8T\x95\xcf=\xea\xa6\xefM\x7f\xb9\xbb7\x1azr\xebu\x0cUA\xf4\xc6\xb2rT\xad\xb5\xd1jWY_\xb2W\x1c\xd3\xedi\xafv)\xed\xa8C\xc1\xa3\xb6g\xb69`k\x8a]V\x9d\x8ee\xf8\xaa\xe2\x8d\x85H\xec\x1f\x96z\xc1\x94\x9b\xda\xb0={,*.\x96\xfeb[\xf0\"rr1)\x99B}\x83\xc0\x9dj\xd2\x17\xa5x\x96\x8e\x1e\xa8\x94\xaa\xf2\xce\xa4\x1f\xd6\x96\xd5n?X)\xbf\x1eH\xfd\xca3\xd2\xe4\xf8\xa3\xd2\xb6\xfa\xbeafW\x0c\x88\x98\xc6\xaf\xebf\xcb\x84G\xbc\xb7\x92K\xab{\xb7\xbaw\xbf\x8f{7~\x0f\x16\xf9y\xc1\xca\xe69|\x1d.g\xa6\x97\xd7\xbd\x84S\xdf\x0e\xfd:\xc4\x04\x87\x023\xc7\x1a\xfbs\x88\x0d\xc5\xa4\x86\x02.O\xc8\xdd\xe1\x01\x91\xa1\xc8\x86\x14\x0fj\x10\xcb\x0b\xe5\x16\x17\xa2\x93\x16\xe2K\x85\x85he\x85\x16\x88\n\x11K\n\x91\n\nQ\xca Q\x88 e\x91\x12\xa2\x11\x12Z,#D$\"\x94YB\x88B@(\xb3|\x10V<\x88L:\x88H8\x88\xe3e\x83\x88D\x83\x16I\x06y\x05\x83\"\x9blD,\xc8\xda\x83i\xa4\x82b\xdb<\xa9LP6\x91 2\x89 *\x81\xa0\x0c\xf2@\x08\xb9\x9b\xa04\x10R\x18\xc8'\xfa\x91*\n\xe4\xab\xc7\xc1\xfd\xcf!\x07\x84\x1f\x1d\x9c\x14Pl\x18\x902@\xc9\"@.i\x84,\x02@\x08\xf9\x9f\x98\xf8O\\\xfa'0ji\xb2?8\xd1\x1f\xb7\xe4\xcfb\xc1\x1f\xb4\xdc\xcf\\\xb1\x1f\xaf\xb0\x0eN\xe8'\xab\xcc\x8f\xd7\x16\xc7L$\x10\xf8!\x91\xf7!\x10\xf7\xc9/\xed\x13\x11\xf6qK\x9a\xb8E}rJ\xfad\x16\xf4!\x91\xf3I\x11\xf3AJ\xf9\xe8\xf8\x02N\xc8G_\x8c\x90\xf1\xf1\x88\xf8\xf8\xac\xc0*\xb3`\x04|\x92\xe4{\xd0\xe2=\x8e\x0e\xe5\x17\xee!\x91\xed\xc9-\xda\x93]\xb2g\xe9\xa4@\xca\xf5\xe0\xc4z\xec\xad\xc7-\xd4\xa3\x0e;n\x99\x1e\xeb\x9cA)\xd2\xe3\x96\xe8\xb1\x11z\xd9\x04z\x02\xc7;\xb78\x0f^\x9a\x07)\xcc\x83\x95\xe5A\x88\xf2$I\xf2\xb8\x05y\x02\xe3a=\x81\\b<=\x88\xc2\x8d\xdf\xc4\xda3\xae'\x8f\x0c\xcf\xb0\x89p\xeb\xdd?\x96J\xf0\xf0yy\x82\x80\xf8N$\x82au$\x9b\xf0NHv'\xc5 *\xc9\x9d\x80\xe0N\x8ay\xf3\xc5v0R;)\x96d\x97\xd9 \x88\xec\xa4\xd85C`'&\xaf\x13h>\x84\xe7\xb1\xcc:\xa7\xb0NXV\x07\xd1\x1b\x1f\xa0\xc7\xd3#ZA\x1d\xbf\x9c\xce\x18W4[Lg\xe6\x1a\x88\x91\xd1\xf1\xd8x\x06\x11\x9d@\xa7\x00\x81y\x0b\x89\xb8D\xdeG\x18\xf7\x9bF:'&\x9c\x93j\xe5\xd9Es\x90\x929s\xfaqF\xb9\x9c\x88XN\xc4\xfa\xd8\x92\x03\x93e'\x9bL\x0eB$\x07\xeb\x0dR \xe4\x84r-\xf9\xc5q\x08\xa5qH\x84q\xe8dq\xc8Dq\xee\xc8$q\xf2\x0b\xe2\xa4\xca\xe1x \x05\x13h\x17\nc6\xbd}!\xb0l.\x7f\xa0\x97a\x19.\x0f\xeaf\x1a\xda@\x0c\x87\x16YU\xcf\x8eE\x8b\xa3\xd1\"\xee\xc8\xfa\xe1\xbbTl\x1a%:-\x03>\x8d\x1a\xa1\xb6\x08\xa3F\x8eR#\xc6\xa9\xd1\"\xd5h\xb0j\x99\xd0jTx\xb5\x0c\x8852\xccZv\xd4\x1a\x0dn-;r\x0d\x8f]#D\xaf\x91\xe1\xd7\x92\x10ld\x18\xb6\x85(\xb6\xf5\xc3w\x8b\x11m\x191m\x84\xa86:\\[\x16d\x1b\n\xbd\xb5~\xf8\xae+)\xa3\x85C\xbba\x06\x05\x89x\x9b\x81y[?|\xe7,8\x0c\xdc\xfa\xe1\xbb\xdc\x88\xb8\xf5\xc3w\xbd\x9f\x87\xc2\xc6Q\xa0\xe3\xa2\xf8\xb8\xf5\xc3w\x18\xa4\\\x1aV\x0e\x8d\x96K\xc4\xcb\xa5 \xe6\xd6\x0f\xdf-\xc7\xcf\x11!\xe8\xf2c\xe8\x08Pt9\xa6 \x12I\x87\xc5\xd2\xad\x1f\xbe\x8b\xe1\xea\"\xc7\xcd\xf5\xc3w )\x83\\X\xbb8\xda.\xc5*\x1a\xc4]\x10sG\x87\xba[\x94\x0fY?|7\x17\x85\xb7~\xf8.\x05\x91\x17\xc4\xe4\xa5Z7\x03\x97\x17G\xe6E\x8cX?|wF\x9c\xde\xfa\xe1\xbb\xe5\x98\xbd(j/\xd6AX?|w^\x0c\x1f\x1a\xc57\xb77gD\xf2E\xb1|\x88>\xc4\x17'\xa0C\xf4\xa10})>'\x15\xae/\x96u\xca\x8f\xed#E\xf7\x11\xe1\xfb(\x11~\x84\x18?J\x94\x1f\x05\xce\x0f\x85\xf4\x83\xf1\x9c\xedQq\xd6\xb2d\x8d\xe2*v\xbd\xaa!\xfec\xaa!\x06\xd0\xa1X\x0dDG\x15I\x00U\xfb\x0b\x8c3\xb1\xa9\x0fe\xcb\xbd\xef\x8e\xf8\xa3\xf5\xd6\x0c\xbe\x80'\xdfK\x05b\xd3_\x9fT\xa7\x9a\x05\xaf\x8f\xfa\xd6\xa5{~%sk4b\xc8\xe5\x85\xe8\x99wW\xb4\xe5F}3S\xf6\xc6ue\xd8\x99\x8e\xb9\xd2\xb2n\x9f?\x17\xf5\x84\"\xef\x8f*\xc5\xf1H\xd9@\x1c\xdb\x02pi\xa0\xbb\xb0)\x8e\xeas\x0e\xca\xe92?7\xa7\xbd\xfe\n\xe4\xb1\xa97\xacm\xd5A\xc6\x8c\xbc\xbcZ\xfeC~\xbc\xef\x95;\xa8^V\x9b\xfdI%\x07\xf6\xfb\xc1\xe5\xc2Q,D/O\x1b\xd5\xb6\xc9?\xaaV\x0d\x92\xa7\xc7\xd5}\xed\xfc\x14\x89\x8a73\xe0MQ\xb5*sp(6\x0fe\xe5\x00\xfc\xc8voKG\xf0<2\xe8~\xf5\xef\xc8\xb3\n\xc7!\xc8\x9832W&\x87\xda\xd7[\xf5&\x1d\x1b\xf6H\xfa\"=\x14\xedC\x86i\xee\xc5\x89\x1d\x8b\x86\xdf\xb6\x8c\xdf\xba\x97 S\xa2g\xebxO\xc0\xb7\x8dZ\x17\xc8v\xa6_2\x1d\x17\x8c\x18|x\xf0\x007\x80\x80\x19\xc4n:|,\x1a\xde2\xfe\x179\x96\xeeI%Od\xfc\xd6g\x1ar\xe6zL\xd1f\x88\xca\xd5\n\xa0\xa6\xa6X(&W\x8b\x1fI\xcc\xe8}X\x92\xea\xc7\xbd\x94i5\xbd\xd2A}\xe2\xc7\x13\xef\x7f\xeb\xdf\xcfI=\xd2\x95$\xb6\xb5\xe7vP\xd4^\x1c\x8f$\xf5\xcay\xaa=N\x92\x06\x988\xadU\x1bFRy7?\xfam\xd8\xb94\x8b\xf5\xaan\xd9\x92\xef{\x06\xec\xb0\xdc\x07\xb5\x1eX\xfed\xb7m\xab\x13\xde\x0d\xab\xb6\xac9\x94\x15\xd7\xaf\xacZ\x8e\xed\x1d\xf8\xb1\xd8\xb7\xccC\xb1w}\xd5\xc3\xf3M\x8f\xe0Z\x1e^\xc5\xe3\xec*\x88\x8f\xdahp\xce\xc3\xb2\x02\x14\xd3\nb\xc3\x03\xd1!\x02]\x85\x9fu\x05\x98!\x02\xa4\x0b\xaa\n1\x03\x0bHXX@\xcc\xc4\x12\x85/gc\xc1\x19\x18Y\xb0\x94\x95\x05\xe7`f\x01=;\x0b\xc8\x19Z@\xc6\xd2\x82|L- dkA\x1e\xc6\x16P\xb2\xb6\x80\x82\xb9\x05d\xec-\xa0`pA\x12\x8b\x0bh\x99\\@\xc9\xe6\x02\xbd!\xa2\x19]@\xc9\xea\x82\xe5\xcc.\x08\xb3\xbb\x00\xeb\x00 \x0e\x9e#/\x81\x8a\xe95i\xc8\xeb\x8e\x103\xbe /\xeb\x0bh\x99_@\xca\xfe\x82\\\x0c0\xc0\xf2\x9a \xce\x04\x83\x146\x18\x84\xf9\x1e\xb3Xa\x10\xad\xd3\x8bq\xcf\xc3\x10\x83\x19\xa3\x89e\x8aA\xb4s\xc9\x8c1\x98\xc7\x1a\x83\xd0@\xe6b\x8f\x01\x96A\x06(\x16\x19 \x99d\x80\x19\xe5TF\x19$\xb0\xca \xc0,\x83<\xec2Hc\x98\xc1\"\x96\x19D\x07\x14\xcd6\x83\xfc\x8c3\x88[\xe7\x9d\xe9$\xec3\xa0c\xa0\x01\x15\x0b\x0d\x88\x98h\x80a\xa3A\x80\x91\x06\x01V\x1adg\xa6\x01\x05;\x0d\xe8\x18j\x90\xccR\x83\x14\xa6\x1a\xa4\xb3\xd5 \x91\xb1\x06\xc1\x8d(HI\x82\x04Z\x12\x8e\xbd\x06\xe9\x0c6Hc\xb1A\xa8\xbb\x14l6\xa0c\xb4\x01 \xab\x0dh\x98m\x90m*\xa1\x19n\x90\xc0r\x03\x07\xd3\x0d\x02l7\xe8\x0e\xa1>\xc6\x1b\x8c\xcf|\xb4\xac7\x080\xdf&\xa6\xe4d\xbf\x01\xe68\xeec\xc1A\"\x13\xceu\xbd\x97\x0d\xe7\xbb\xd8\xcd\x88\x9b^\x1d\xa88\x91\x19\x07\xe0g\xc7\x01f\xfc\xac\xa7\x97\x8f%\xa7\xaa\x8e1\xe5 \xd9B*\xc6\xdc\xb8!\x8c%\xdd?\x963\xe7 O~+\xc8\xa2\x03\xcc`\xc3\x04.\x9e\x8fM\x07QF\x1d\xcc2\x91\x8eY\x071v\x1d\xcc2x \xcb\x0e\xd0L;\x98e\x1b\x01\xe3N\xb5\x11`\xdd\xc1,Kg\xb1\xef\x00\xc5\xc0\x03\x8cAq\xa8\x93M 9+\x1b\x0f\x10\x8c\x811\xde\xb3\x7f\xab\xe2\x9e\xef}\xf1\xf0\x9fTA\xc4\x9c0\x11'\x15\xe8\xaa\xab`\x8cW\x95\xe8\xe8\xaa\x12\x8f\xf7\xaab\x07\xedl3\xc0\xd6.P\xbf\x99\x18/\xb3\x1f \xaf\xeb/p\xdc\x17\x1b\x0f\xec\x17T(\xf1\xb8g\xb2\x81p\xe8#\xb9\x97\xf1\xf0\xc74<94\xc5\xea\xe8\xa9*\x9f\xfb@\xaf\xd5\xcb\xfe6\x7f/up\xf3\xf6\xae\xd8\x17\xd5&G/\xed\xfc\x91]\xbd3\xaej\xfe\xf6$\x8e\xde\xf6\x1b\xcf\x8b\x86\xbbc8\xaa\xa8\x13\xa8x\x17s\x1b\xde\xd7l\xde\xee\xfe\xbc=x\xa1_\x0f\xd2\xf0\xea\x98.g\xa5:\xf7\x0e\xfb\xe2O\xde\x0c\x1a\x1dn\x99W\x15o\x06i7{`\xd4+\xacb\n\x0d\xdb\xb3\xc7\xa2\xe2bc.\xb6\x05/\xdcMY\x0d\x19\xbf\xbch\xd8\xf4\xe5\xd0\x7f\x9c\x13\x82\xfadO\xbf\x01\x8fE\xc3\xcb\xcdi_\x0c\x1c\xdb\xaf\xdb\x81 \xd5N\xba6\xce\xc0\x82DVXu\xe8]\xc1\xcan\x8c\x1a\xe9\x97_o\\\xde\xbb\xe6\x86\xd6[\xefZ\x1bYgck\xac\xe5\xf5\x08\xcb\xbc)\xdduA_\x17\xf4QY\x17\xf4\xae\xfc\xff\xbd\xa0G\x1epd\x8c\xe2k9L\xad\x1f\x9e\x15\xd9o\xa7\xf2\xb1\xd8\xb3\x8a\xab\x15w\xdaU\xf6\xbcaG\x1d,(=\x8c\xe5\x9e3\xd5\xcd\x9a\x11\xf0Q?\x05\xf5\xde\xcb\xe0h\xc3\xa0=\x95\\\x86wd\xdeu_z\x19\xd1\xdd\x99\xd1\x1e\xc3p\xef\x87]\xc1vy\xd4\xdb\xd6\xec(c\xb3:\xa2x\xee\xfe:z\xba\xea\xe5I\xd3W\xbd+\xb0b\x81\x18\xdd\xc9$\xc5I\xb4\xd6\xa4\xa3C\xf9\xf5%I\x94%skJfW\x93\\:)\x90\n\x928\xedH{\xebq\xebE\xaa\xc3\x8e[)\xd2:gPjD\xba\xd5!\xed\x14j6]\xc8\xc0\xf1\xce\xad\x05\x89W\x81D\xea?b\x95\x1f\x11\x9a\x8fIj\x8fh\x12m_\xfb\xe0 \xe4\xd2v\xec1\x05\xee\x04;\xd6\x9eq=}\x88\x7f\x89\x92\xe3\xb0\x89p\xeb\xdd?\xac\xdc\xc2\xf0w\xa4z#\x9f\x97'\x08h5F\"\x18VG\xb2\xe93\x86\x94\x19S\x0c\xa2Rc\x0c\xe80\xa6\x987_{\x11\xa3\xba\x98bIv\xa5\xc5\x80\xc6b\x8a]3t\x15c\x8a\x8a\x81\xe6\xd1\xaa\x1e\xe7\xd4O\x9c\xadM\x13\x03\xa5zzD\xab\x93\xe8WH\xb4\xccY\xa2\x8d8s\x0d\xc4(!zl<\x83\x06b\xa0S\x10\x05-\x85\x15\x0f#\xef#\x8c\xfbM\xa3r\x18\xd37L\xb5\xf2\xec\x9a\x86H5\xc39\xfd8\xa3\x82aD\xbb0b}l\xc9\x81\xc9\xb2\x93M\xa9p\x99\xb8\x8f=\xe4D\xba\x84\xa1\\K~-BB\x15B\x12\xfdA:\xe5A2\xcd\xc1;2\xb5\xc1\xfc:\x83\x08\x85A\x8d's\x03\xb8b\xd0\xfc~\x02\xcf\x81\x899\x80\xfds\xf1\xf8\xbd'\xf3{\xc1\xf1Cp\xf4\xe0\x02\xea9\x93&\xc1\xd0\xbdxy\x04V\x1eo\\n\x8c\xfc?\x94\x9c\x04\x8a\xd8\x16\xdd\x0b\x01En\x1b\xfb\x94\x99\xe9mH\x82[Rgb\xe2\x0dc'9\x1f\xcd\x0dItC\xf5\xc6\x8e\x13\xd0\x93\xdd\x96\xea\x0f\xc0\xd8\xe6,\x94\xb7Q\x9d\x84\xa4\xb7QKsioa/\x8a\x86\xfa6\x97\xfc\xb6\xc2\xffW\xf8?!\xfc\xdf\x9aF^\x12@\xc8\xb3Jf\x03\xb8*\x9b\xc7\xbb\x9c\xeb\xddu/\xdf\xd9\x9c\xba\x18\x8d \xc5m:\x07\x95 N&\x888Ha\xf7\x88\x07(\x05\x88M,\xbcz\x9bBJ,\xc8O-\xa0$\x17d\xa0\x17P\x13\x0c\x16Q\x0c\xc8I\x06\xc44\x03Z\xa2\x01\x0d\xd5 \x13\xd9\x80\x8an\x90\x81p@F9\xc8N:\xa0\xa1\x1dd'\x1e\xe0\xa9\x07\x84\xe4\x032\xfa\x81\xda\xb8\x90\x04\x042\n\xc2B\x12B\x80\x86\x80\xd8\x98#T\x84\xd1\xceMCF\xc0\xb8\x07\xa4\x84\x84\x8c\x94\x04BR\x02\x1d-!\x0b1\x01\x05\xbe\x8f\x90\x13\xd0\xf4\x84\xd0G\xf9S)\n\xa1\xba\x9c\xc0\xcd\x1cD\x85\xb4\xd1\xc2\x91\x150\x83\x82$,\xcc\xa0,\xf8P\xaeYh\x0b(\xe2B\x9c\xba\x80!/DF1\x8d\xc0\x80\xa50\xf8H\x0c\x19h\x0c D\x86\xf9T\x86\xd0\xa0!\xe9\x0c\x99 \x0dA\x8b\x9c3\x95\x80\xd6@Dl \xa16P\x90\x1b\xa2\xf4\x06\x1f\xc1\xc1Gq\xc8Kr\xc8Ns \":\xa4Q\x1d\xd0d\x87D\xbaC\n\xe1\xc1Ky\xf0\xe3\xdb\xf1\x08w\x0c\xed!\x91\xf8\x90@}\xf0t-?\xfd\x81\x88\x00\x91\x9f\x02A@\x82\xc81M\x90D\x08,\x15bL\x86\xf0\xd1!\xcc\xa1\xcbM\x88\x18\x9du()\x11>R\xc4\x18\x03\x9c\x8d\x16\x119n\xba\xa9\x11)\xe4\x084=\x02O\x90@Q$ \x8d$\xe1\xa3I\xa4\xa4\x0crQ% J\x96H\xb1\x8a\x860a7\x12\xb3\xa0\xfb\xc7R\xd2\xc4\xa2|H\x80:\x81\x88\xba\xd8\xb8\xc3\\\xf4\x890\x81\"\xd5,*\x12E\x90F\x91j\xe4|*\x05\x8eL\x91jOvB\x05\x84(\x15\xa9\xd6\xcd\xa0U\xc4\x89\x15\x11#\xc2X(\x1b\x15|FzE\x8c`\x81\xec\x95\x1f\x14\xe5\xe9\x19-\xcd\"D\xb4\x98\"\xb4fS-\x16\xad\x9c\x18\xc2\x85\xd7\xd63P.\xa28\xc2X\x07!B\xbc@\xbc\xb50\x1e\x01\x1a\xf2E\x9c~1\xc7\xd6\xb3S0\xd0$\x8c\xb9\xbd9#\x11#J\xc5@\xf4!\xbe8\xc1d\x81\xcaF\xc8@Q2R|N*ZF,\xeb\x94\x9f\x9aAJ\xce \xa2gP\x124\x08)\x1a\x94$\x0d\n\x9a\x06\x8a\xa8\x01\xe39\xdb\xa3\xe2\x06\x99\xd1\xfd^\x9a\xfe\xdb\x895\xa2\xb2\xfe\x9a\xbe\x9a\x15\x9f*M_\xf1\xa9\x14\xf8T'\x9d(\x8e=\x1dcN\xb1\xba\xd3\x9f\x1c\x1f\x1fw\xcc\xbf\xc0'<\xdc\x18O\xcf\xf3\xf1\x84C\x92\xe80\x0e\xaeNO\xac\xf1|@\x1cc\x8e\xb3\x92i`/\xedc\xe1}\xa5\x9eO\x84\xa7Y\x96\xfbs\xe0\x0e\x06\x11'D\x05G9B\xa8S#\xe2,L\xf2\x8d\xd7()\x08e=\xf2\xcc\x9b\xfd\xdb\xadQ\x12\x10\xde\xa7$\xf9:k\xe8\x9b\xacx\xd3h\xbf\xbfj5\x95\xff\xab\xabV\xf5)\x1f\xcf\xf6\xb9\xe2D\x1f\xca\xce\xfbyl\xc4\xcet5\xfc:5r{\n\xac5\x9e\xe9\xe4[_(W\x96\xc0\x9a\x12\xb1\xd2\xb5\x8eP\xad \x81\xb5\x03\xb3\x7fe^/\xdc+\x05\xc6\x10\xaa\xd5\x81l]\xc0\xbe\x1b3yA\xe1O\xc0'\x9eC\"\x9b;\xc2c\x8f*\x08e~\xf9 \xbe\xa9#\xacF)\x05e|\x19!\xbe\x99\x07\xac\xa6|1!\xb8\x8dc\x8d\xa2zI'\x0d\xe5|Q\xc1MUv\xf4\x19\xb3Wg\xfc\x0c:\xc5\xa7\xcfG\x9f\xecB,R\x19\xd6\xa7\x05+S\xe7\xd7,\xfd\xa8\xd1\xa4\xa2\xd9'V\xc0\x9cZSL#9\xbd\x02\xe6\x04;\xcf\xca\xdc'YX?\xef\x9cs[T%z\xe2\x85\x94\xde$$T2o\x97\xaaDO\xc0\x80\xe9\x0d\xf5\x06\xaaJ\xe84\x0c\xc9fRn\xa9\x8e\xe6ro\xac\x8e&RN\xc7\x93\x9bG\xd1_\xa2S2d?)\xc3\xf9#v\xe1\x13\x82*\xebr\xa9\xcb\xba\\N\xcb\xba\\\xfeN\xcbez\x9c7\xb4F\x92\x9dOT\xa18\xa5\xa82\xf9\xbc0\xe6\xfc\x85\xed\xda\xa8W\xadY\x9d'\xc7\xaf\x9c\xfd\xc2\x9d\xbe\x1c\xa23\x89\x87\xaf\xe0\xa9 \x13m\xcbwZ\xea\x8f\x0d3M\x99T\x803\xe5\xf7\xdf\x7f\xa3\x1bdpe[\x901[\xa2\xa1\x17\xdd\x07QF\xcfL\x94\xcd\xd6\xca\x8b\xeewA\xab\xd1\xfb\\\x06e\xbc\x0c\x16.\xd6\xc1\xb3j#R\xc0\x0bz\xfc\x18\xed;\xab\x82\x01\xa4%\x93\xde\x9d\xa9n\x8e\xd0\x1d~\xd9\xfe\x07N~\xcd[$\xce\x98\xf3\x9a\xb1\x18\x10\xe6\xba\x16\xbd\xfa3\xedY\xf0\xa2\xd3\xbe\xe2\x9e\x17\xa0C0%\xce\xf8\x90\xe0\x1cf\x9c\xa8E\xe6B\xf2r\x1e\xbf\xc0\xe7\x15p\x8f\x98\\`\xf5\x0f\xbb\xf6\x84\xd2q9E\xe3h\xe4\xe2\xf8\x12\xa18:\x89\xb8\x99\xe2p\x84\xb2pd\x82pTRp\xb9E\xe0\x16\xcb\xbf\xe5\x17~[$\xf9F \xf6\x96Q\xe6-\xb7\xc0[Fi7\x8c\xa8\x1b\x89\x9c\x1b\x81\x90\x1b\xc7I\xb8\x11\x88\xb7\xcd\x96ms\n\xb6\x056\xbf\x00\xda\xdd\xda\x17\xf3\xcb\xb3\x85\xb6]2I\xb6,bl$2l\x14\x02l\x0b\xa5\xd7\"2b^\xb95\x84\xd0\x9aK@)E\\\xcdu\xff\xdf\xdd\x9d\x9f+\xa5\x86\xeb}\\>-\xd4U\x84dZ\x92X\xdaX>f\xb1@ZD\x1a-$\x8a\x16\x96C\xf3\x8c\n^\x02-.~6\x95=[$x\x86\x92:\x9b#r\xe6\x14\x13\x8b\x0b\x9be\x934s\xb6?\x9aI\x99\x05\xcc\xb2K\x97e\x16-\xcb+W\x16\x10*\x9b\xca3M\xc5\xc9r\xc9\x92e\x14$\xcb.E\x86\x15!C\xc8\x8f\xe9ss\\xL_\x18\x91\x1cs(r\xb9Z\xc5*G\xc5\x04\xc6\xd0\xd2b(Q\xb1\x91\xf1y\x85\xc4\xb2K\x88\xe5\x14\x0f\xcb*\x1b\xb6\xe4\x81#\xa4\xc2\xe2\"a\xfd\xf2?\x15\x06S\xce\xfdT\x12\xcc\xf2\xaf\xa9\xc4\xc0\xa62`6X \x8b\x00\x98\xe7\xf82\x15\xfd\xc2\xc9}!\x84\xbe0\x12_\x11q/\xb4\xac\xd7T\xd0\xcb\xd3_kds\x88x\xf59\xe8\xa9|\x17\xc6\x86\xf1\xfd}Xx\xaed\xd7\xb0z\x7f\xab\xdd?\xac8\xf4\xf0w\x84L\x17O\x8b+{D\xb9\x02'k\xcb\xe8,B\\> .\xac\x11\x14\xb2[\x1e\xc1-\xacI\xf3D\xb6b\xf2Z\xd8\xd6\xb3Jjy\xc4\xb4\xb0\xb6$\nh\x85\xa4\xb3\x8c\x06\x97=\xb3\xcd\xc9\xbb\x87\xd9+\xc7`\xf7jys\xda\xc8\x93\xaa\xb6Fz\xa5\x15\xc8\x95B\xac\xd8\xcf\xf2\xde.\xee\xb7\xafw\xb1E\xca\x8cm\xe2\xfa\xe4\xc4\xac\x8d\xe6\xefd\xc6;\xae\xb2\xfa=\xc0\xe4f\x98\xcd\xa6\xaa\xf8\x1c\xf0\x8e\xce\xf7E{]\xdd\xd7\x89c\xb3+\xda\xdb\xa7\xa2\xe2\xae\xa8\xa5\xf7\x947\xd1\xa7\xb3F\xe6\xfb\xa2\xfd\x0fY\xa3q\x96\x8c\x0bz\xaaJ.\xb3\xe2Ou\xf3\x05\x9e4fGm\xd7\xfcY\xa6\xe5Y#\xda\xb8\xb0\xcc\x13g\x9b\x9c\xc6\xfd\xd2\xf6\xa6\xf5;\xf7N8\xbd\x1b\xae\x00g\x9b\xba\xd2H(w\x15b\xa0{/\xfb\xb9\x7fEd5\x1aV\x16y^\x9f\xa4\x83\x95\xf8\xb8\xb6\x05/\x12\xc6b\x84\x1b \xad\x1c\x1f\n^H\x0cX\xf5\"[\x81\x86\xf1SS\x99@\xb3yKe\xe4\xa0\xda\xeeY3X\x17\xe0\x9a\xc3\x8f\xbf|\xbe\x99\x80e\xf6\xac\xda\xf1\x0786\xec\xbe|V\xd8R\x89'\x97\xf4!&\x8e\xd8\xe2\xa5\x11\xad\xa9F\x94\xff\xc2\xba\xd6\xba&\x06\x0b \xc6U\x18uU,L6;\xb6\xdeAY\xa9Q\x12O-\xde\xc5\xae\xea\xd5\x0b\xb1\n\xa5\x17\x12\xc4?\xa9\xb2\xc4Q\x01L\x03\x13\xbfvXT\x03\xbe\xef\xbd\x8c&\xa1\xdc\x7f\xfb\xad\xa2l{\xe2\xc5\x17\xf6\xf2\xbaw \xc4\xf9\xbb\xad7e\xd1\x9fP*5\xedR\\\x18\xb5\xdd\xcb\x15\xb6\x85\xa2GK\xc2\x96=\xb2\xbdxh2vTp^l\x1e\x86)\xe3\xe1{1\x15\xee5\xfc\xc2\xf7lWV\xef\xf7\xf5\xe6\xcb\xab\xee\xb7\xabj;\xfa\xe5\xf2\x81m\xbe\xdc<\xcb\xcd\xce\xfc\xf6\x81\xed\xcbG\xd6\xdc\xc8`8P\xbd\xeb\xb1(\x14\x96`\x80\x89x\xc9L\x95\xaby\xee\xc8\xee\xa0q\x10|\xe5\xfd\xae\xbc\xdf\x95\xf7\xbb\xf2~W\xde\xef\xca\xfb]y\xbf\xaa\x046\xbf\x95\xf7\xeb\xdf\xb1W\xde/\x86\xf9\xba\xf2~W\xde\xef\xca\xfb\xd5e\xe5\xfd\xae\xbc\xdf\x95\xf7\xbb\xf2~W\xde\xef\xca\xfb%\xe1\xfd\xf2\xf2\xc0Z^\x1c\x8e\x88\xe0\\\xc8\xc3\xbe)\xfb(\xce\xb1a\x8fe}jU^\xf3\x02\xfe,\x0e\xa92\xb9\xd9\xc2\xff\x82o_A\xc9\xbfVO\xe2I\xfe*g\xce\xb6,\xaa\xc97\x91\xe5\xfbn,\xb4\xa5\x00\xe1\xb1\xe6\xbd\xff\xabZ\xfa\xa1h\xf9e}8\x94|\xd8(\xfc\xfb\xbf\xc3\xb7\xafF\x0b\xb2\xb0@\xf8\xbfm\xd9\xca\x16V\x98\xd4\xcc$\xd9\n\x93ZaR\xffH0\xa9.\x0b\xa4sf\xaa\x92.\xed\xa4\xdc\xcb\x0dk[\xb5m\x0c3\x062\x8e\xf4j\xb2\x02u\x96@Ym\xf6\xa7\xadp\x06\xeb\x96\xf9\xaa\xd4\xed\xea\xcd\xc10\x97\xea\xb1\xcbj\xee\x96\x00N\x19\xdf\xa883\x88,I\x17jX\xd1\xc2\x0f\xf5\xae\xb5\xfd\x1fe\xcb+G\x88i\xf0\x8c\x8d\xec\xeb\xab\xae\x1d\xe9\xc9\xda\xa6\x0e\xcd\x1c\x9fX?\x97\xd5\x86\xbd\xd5\xb8\x99\xd7\xed\xf6\x0b\xfc\xcb\xc5\xbf~w\xf1\xed\xb7\xaf\xc4\xff\xfc\xeb\xc5\x9f\xe4\x7f\xff\xa4\xef\xf1=\x97\x1e]\x13\xcb\xceu\x82\xb5\xfcY\xc1j\xc5\xb0u\xe2\xb5\xc2g\xed\xed\xe3\xc5\xae\x1d\xa43\x953n\xbcy \x90m\xd5\xe6\xbeeR\x18\xd6\x82\x00m\x9a\x97#\xaf/$`\xb7-{\x0d\xdc\xcb\xfap,6\xfc}\xc9\xdf\x89\xf5\xd3\xac\x08\x8e\xd5\xd1\xb5\"\xb2g\xde\x14\xb7w%oo\xa5\xa6\xb5#\xd7\x85\xc5\xc4\xb0\xfdh\xa1\xf6\xacr\x8e\x95\xcd\xf7\x18F}S`\xe9q$P pK\xa4O\xf7Ux\xb8+\xb9\xdaO\x06\xef\xb2\xcc&\x95\xad\x8a)\xf2\x1aX\xd5\x9e\x1a\xd6e3:9^\xf9\x18y\xf1\x85\xb5*q \xf9\x85C\xe6__\xa5jV\x9d\xa2\xa4\x8f\xa3*\x91\xdc\xe8I\xbbU-\xdaiX\xb1\x85\xb6\xb87qY\xf5\xbb\x18dI0\x93\x8c\xe2\xba\xd2\x91_8\xa9\xb8\x1b\xf4\xf3\x80?_\xb4\xe5\xae\x1a\xca \x7f.w\xd5\x8f\x03<\x93c\xe0mm\x90\xd7\xf0\xf9\xfa\xfb\x9fn\x7f\xfc\xf9\xc3\x95S\x82c\xf8\xf7\x0f\xd7\x9f\xae.o\x9c\x7f\xba\xb9\xfa\xcf\x9b_\xde\xfd\xe0\xfc\xdb\x0fW\xdf\xbf\xbb\xfc\xdb\xed\xbb\x1f\xaf\x7f\xfa\xf9V\xfa\xcc\xae\xab\xae\xae?\xde~\xfbo\xdfv\xd3@K\x84\x84\xac\xf3\xcd\x153\x08\xbd\xe7\xad\xf619Tp\x10\x7fQqd\xde\x82p\xec;\xf1\x82\xdd\xa9h\xc4\x1a6ZK\x133\x825\xb7\xc2\x97\x9ewV\xfc\x9f\x8d\x980_\xfd\x8f7\xe2\x1d\xa8+\xb1\xce\xbe\x91y\xbc\xa2}3\xb5\xf2\xb3lN\xd89<\xcc\x87\xdc\xe1\xa1\x81\x96\xac\xc2pm\xe9\xb5\x8c\x1a\xf6\xdb\xa9\x14\xd3L\xdd\xd7j0\x85d\x93\x8f\xbc\xccj\xab\xa9P\xf5\xbdtV\xe4\x16!\xb3\xea\x87\x82w\x1fp\xb3\xab3\xcb\xe2\xfbz\xfb\xf2\xf5\x08\xbd\xd6\xb9\xa0\xb2I\x19\xaf2\xf5\x1a\xd2\xc1\xb1)\x0f2W'k\xeb|\xbd\xba2\xeb\xc5\xb1xi\xa7\xa1\x83{68\xd7\xdf3\xeb\x1c\x19\x1a\xbb?\xb3N\xbf\xe1\x9e\xa9\x1dgW\xb4\xb0/\x0f%\xefF\xcc:9\xf4\x96k\x13\xd5\xed\xb6I\xa8^t\x86\xab:\x19\x9b\xb2\xe9\xedZ->\xff\xa6V\x1fOd\xe2\xb4\xa9\x94\x08\xe4\x82_o\x15\xe8q[K\xd0]'\xc5\xa4v\xb1\xcdh\x03\x00\x95?4\xb3EO\x87\xb25\xa6\xb0\x96\x97\x07yz},\xc5\xc6y\xd0B \x17\x93\x17\x01\x8d\xb3RN\xa1;\xd1|\x9e\xaf\xc8nYU\x1f\xdc\x81\x80H\x9c\xc1m;\xe2\xd6\x18RLx\xeee58:I\x05\xb6^\xfb\xa1\xaa\x0f\xe6\xab\x95\xe2\xe1\x16\x956\xc5\x95~\x04\xf8\xe9\xe7\x9b+\x85g\xd4\x1e\xb8\n\xb5\xab\xc3\xc0ue\xd4\x96\xbau\xdc\n\x96\xaa\x84\x88\xab\xdan2\xb5\xfd[\x7f\xf7\x02\xbbzWKW~\x9c\x0c\xd2\xbc\x02m\xc3\x84\xcd\xaat(4\xc4\xa4(\xf5\xbew\xcf\xec\xe8\xcd\xaeho\xe5\xeb8\x03\x9a0\xa1\xd9Bo\x95\xe3!tM\x8dI\xc1\xbbBC\xb8\xf4[!\xcfCb[\x1a\xd0/\xfa\xd3\xf6t\xe8\xee$\xd2Fj\x82\x9d:4\xa3\x84\x0fA\xbd\xd9\x9c\x9a\xd6^<\x8a\x97\xf92q\x8enI\xd9\xaa\x96q%22^\xbb\xf4\xf7\xeeJ\xf3=\xbcc\xf1b\xd6\x92{\xe1\xe1\xc3\xf5=t7\xf7\x98\x8cb\xb3\x91\xcfQ\xee\x06\xc7\xe2\xa5\xbfa\xda}\xb9\xae\x8bN\xa9\xab%\x16\x84?\x1b\x1b\xbeQ\xab\xe3\xa9U\xf0&\xf9\xebVC|\xd4\xb4\xad\xc0l\xdd\x7fp\xd4\xde2\xaeW\xbf\xee\x8em\xcdZ\xf8\xe7\xaa\xe6\xff\xac\xb1Dj\xf5\x15[\x99\xf4\xed\xee\x1d\xbb\x96c\xad\xb7\xe7\xa1<\xf2\xa4<\x17\xffD+\x07C*\xd6}58\xdf\xb0\xb2\x93\xd4\xb4\x9eR\xaf-v\xea#\xef\xf2\x16\xd9\xdd?\x18d\xae\x81\x7f\xcb:\xa5\xbdf\xb2:\x9eI-\x9f\x9axbC\x8c\xb8e\xd1\xd7\xea\xdc\xa7\xbfq$g\x82Xx\x8ebum\xca\x82\xb3ACr\xc8\x853\xca\x9e\xe5W}\x95\xc9\x9b\x87B\xacj\xb5\x0b\xc6..6\xa8\x97\xae\x9e\xf6\x95z\x8e\xd2\xf3\xbf/\xca\xbd\xbe\xcdG\xce1\x13c\x84\xca1{\xb9\x1e@\xe5\x00u\xd8x\x13\xce\x90'\x80\xa2\xabk\xf2\xe8\xa7\xce\xd9\xfb\xa6.\xb6\x9b\xa2\xe5\x89\xc1\x83\xf7\x9f~~\xf7\xe1\xf2\xdd\xe7\x9bP\x04at\xd1\xfb\x1f~\xbe\xfc\xab\xff\xcf\x9f\xff\xf6\xd3\xa5\xff\xaf\xef\x06\x7f\xeeuDcV\xf8V\x12\xab\xdb\xa3c\xd4\x9d\xf9[\x7f\x96\x12?\xdf<\x7ff\xcdc\xb9a\xfd\x98\xc1\xa7\x8f\x97zw\x19\xc5\x0d\xfc\x86\xbd\x85\xffbM\xad#\xea2\x13'\x1a1or\xa0\x0e9z\x93.\xcb_\x87\xbb\xecso\xff \"`\x08$\xea\xdb\xa0\xf0T\x94\\\xae\x10\xfdT\x11+\xc5\xb3\xde\xbb\xa4\xd4\x97\x8c\xbc\xaa/\x91\xca\x04U\xa8\x7f\xe2\xd9LL\x13?f\xb0\xac\x00\x13\xa8\xef\xf5\x1e\xcc'Med8h\xd9;\xa7i\xeff\xd9\xa6\xb4\x19\xfa\xad\xad<\xc8\xd4\x1fg\xfb\x97\xe8\xebu\xf3\xfcI-i\x89g5\xfe|+c3\xf3\x82\xaa0~\x05Lu\xc6\x1fh\x8a'\xf7\x06qpr#'m:\xf5\x86c/\xa5\xe7B{yp^b-\x11\xce+\xde\x8d.\xc1/\x15\x10q$\xf4\x81\x8e\x8d\x0f\xf9\x19\xf9\x80\xee\x18\x1d3\x1f\xfc\xec|\x980\xb5\x89\x18\xfa\x93\x86\xb0\x9b\x0fG\xb3\xf4\xc1\xc1\xd4\x87\x84\x1dr>c\x1f\xbc\xac\xfdH\xfbh\xaf#\x99\xc1\x0f\x1e\x16?\x90\x18\x14e\xf4\xcbf'\x9bo`\xa1\x0e-\xcd\xdc\xc3\xf0\x87\xf8\x8a\x89y\x15\xc9\xd8\xfe\x90\x99\xf1\x0fd\xac\x7f\x80\x85\xcc\x7f e\xff\xc3|\x05\x00\xa0U\x01\x00J%\x00 T\x03\x00\x02E\x00\xc8\xa1\n\x00$\xca\x00\xb0T\x1d\x00h\x14\x02 \xafJ\x00\x10(\x05@^\xb5\x00@*\x06\x00\x95j\x00\xd0(\x07\x80\xde\x8c\x10\xea\x01@\xa3 \x00KT\x04 tH\x89l\xb2\x11\x06\x87\xb5\x07\xe7W\x15\x984\xe1\xd8\xe6\xc9\xd4\x05 \x97\xc2\x00P\xa9\x0c\x00\x91\xd2\x00,W\x1b\x808\xe7\x1eB\xaa\x03\x80S\x1e\x00\x1f\xe39Q\x81\x00\x02\xf588\xa3K\xd5\x08 it\xe2\xaa\x04\x80\x18\x06\x84:\x01\xa4*\x14\x80{x\x96+\x15@\\\xad\x00\"\x8a\x05\x10U-\x80\xf0\xa8\xe1\xd5\x0b\x00\xa5`\x00N\x15\x03X\xaad\x00X5\x03\x98\xa9h\x00\x81aB(\x1b@Nu\x03\x08\xd9\xe2\x98\x89\x99\x95\x0e\x80B\xed\x00\xf2+\x1e@v\xd5\x03\x08+\x1f\x80S\xfd\x00\x9c\n\x08\x90Q\x05\x01\xf2*!\x00\x85\x1a\x02$(\"\x00N\x15\x01R\x94\x11\x00\xad\x8e\x00\x9e\xe5\xdcC\x9a\x87\x04\xe2|L)\x01R\xd4\x12\x00\xab\x98\x00\xee\x0e\xe5UN\x00\n\xf5\x04\xc8\xac\xa0\x00\xb9U\x14 \xc3\xa4@\xa8)\x00JQ\x01,U\x05\x00\x8f\xb2\x02$D\x90\x1d'\x0d\x1a\x95\x05\x00B\xa5\x05\x08\xab-\x807k\xc9\xcf\x98\xd0\xe5\xde\xbcd\xe4p\x1a\xcbE\xfa;\xa1\xca9\x92\xae\x91lc\xa4\x87\xa6D\x85\x14\x00\x93\x88\xcc\xd9XP\xb9\x01\xba\xc6\xfc\xea\x0d0~\xe3\xb2+8LZ\xf0\xabh\xe7Wr\x00b5\x07\xc8\xa1\xe8\x00\x88\x11\xa2Qv\x00 Tw\x00\x1a\x85\x07\xc8\xac\xf2\x00\xc9J\x0f\x10y^4\x8a\x0f\xa2\xccS}\xf0\xe3\x96\x1cP\xbc\x1e\x00\xa8\xff\xcd\x07\x08\xc0\xeeF\x07\x120\x82\xfa\xfb3KE\xf9M)e\xee\x9d$\x8f\x08\x91\x87\xfa\x16X\xac}\x947\xef-\xe1w<\x17\xcd\x8d\x80\xe2\x96Bo[Lms\xd2\xda0%\xd9s:\xe8&\x0d\x14\xa2\x073\x1c\xd8\xe1X\xd7{\xdf\xbe\xf7=[\x82s\x1f\xce\xd64\xb5\x84\x9b\xe7\xaf\x06\xf5\xacx\xf9\x15/\xbf\xe2\xe5\x7f\xcf\xf0\xca\x8a\x97w\x14L\xe8\xc6\x1f\x97\x1a\xfc=\x16N\x89\xc5\xa8T\x89uW\x95\x15/\xef*\xb1\x00\x86]V\xbc\xbc\xdf\xfe\x15/\xbf\xe2\xe5W\xbc|\xa2A+^~\xc5\xcbO\xca\x8a\x97_\xf1\xf2+^~\xc5\xcb\xafx\xf9\x15/?,+^~\xc5\xcb\xafx\xf9\x15/?*+^>0\xc7\xfc\xc3\xb5\xe2\xe5W\xbc\xfc\x8a\x97_\xf1\xf2+^~\xc5\xcb\xafx\xf9\xbe\xba\x15/\xbf\xe2\xe5W\xbc|\x14\xc2\x1eMD\xe6ll\xc5\xcb\xafx\xf9\x15/\xbf\xe2\xe5y\x02^\xdeB\xf0\x05\xe1\xf1\x1d,^\xde\x12\x01\xc4\xcbkZ9Og\xc3\x03\xad\x15\xdc\xbdo,\xfe\xec\xd2\x10H8\x1a\x19\xfe\xdc \x80\xefK\xf5\xd1\x1d\xf3\x06\x0f\xdf\xee\x8b\x81\xc5\x1d\x10q\x9e\xe9\xde\xed\xcd\xbf\xa9\xb9a\x8b\x91m%\x0c\xb6\xc2\x80\x17}\xf0\xc5H\xc3\x89\x10\xc6\x00\x881\xd2\x10\x1e\xc8\xe8\x862\x9a\xea}\x90\xb5\xf0\x08b\x01\x8dnHc\xca\x18\xc6a\x8d^`cJ3\x0epc^xc\x14\xe0\xe8\x868\x86\xddI\xaa\x0fbG\xc0\x8e\xb1\xb9\xa3J\x0c\xf0\x18\x80<\"\x9c\xc6\x10\xec1\xee\x83GQ\x80\x08?<>\x8c\xaa\xf8\x0f\x1a\xd6\x15q\x0f9v\xf00%\xdeyU\x10@H\xe4@\xa8\x82\x1b\x0eUPpH\xf4\xc8\xa8\x12=\x89\x98\x92Pk\xccO\x1d\x17z`\xe4\x0c\xd83\x11\xee\x99\x00\xf8\xf4t-?\xe8\x93\x08\xf6\x99\x1f\xf8I\x00\xfd\xcc1M\x90\xf0O,\x00t\x0c\x01\x0d\x80@S\"\xe3\xce\xd3\x0e\x1d\x14\x94\x18\x0c\x1a\x85\x83\xfa\xf3\xb9\xfcwH\x7f\xf3@\xc66zt\x8egiC]R\xe5|\xc9\xe9h\x1e6\xda_S\xa2!\x03U\x10I\xda\xdcMFA\xa3\xa6\xc90l\xf4\x1c\xc0Q\xcc*@\n\x1e\xa5\x87\x8ff\x02\x90bF\x8a\x0eDJ\x0c#%\x03\x92\xe6\x87\x92\xce\x01\x93\xc6\x9e\x1d\x1d\xa0t>\xa4tb\xf5\x10\x0b\xe9CQ\xf6\x1d\x19\xcc\xdfc\xb1\xd3R\xc0o}u\xf7\x97\x0ca$\x83_\x0d\xd8\xcfX0\xb4\xd2\xb3;\xf8\xf6\x83\x8a=\xf3[\xc76\x10X\x85\x03\xeb\xae\x86%:\xe0t\xa6\x1d3V\xe2\x7f\x8d\x8ep\xdb\xaaD\xcc\xc7b\xc7>\xa9\x0c\xfb\x85\xfa\xfb\xa4\x1a1\xb4J1TT(\xc6\x84\xc1\xa1n90\x99,\x90\x99\x04\xeb&^\xf3b\x92\x9fFtn\xa2I\x0c\xe0\x93\x96\x05\xd3\x8c\xec\x9b\xfc\x9f\xeat\xb8S\xe1n\x93O\x1ad7\xee\xad\x8eJ\xed\xde[y\xdb\xf4\xf5z*Z%[[\xf2\xd6$\xc2Z8UjZlU\xd2\xe1\xa9l\xcds\xf0\x81\x1a\x1dhe\x1c\x14\xfa\xe6\xb9}\xff\xa2\x16\xd2\xae\xb2O\x1f/#\xe0\xe8\x1f\xeb-\xbb\x1e\x80C\x1cs\xd25\x1f\xd5\xfe9|Xz\xc0\xf5\xc6\xda\x1dr\x06\x9b\xad\xd2\xeb\x9d?\xff\x0f.\x9dO\xd5\xaa\xf8\x93\x19%\xd1\x8c\x04\x02\x88\xdfL\xec\xdfc\x01\x84g\x18\xabN\x0e\xa5\xf2\xd7\xf0\xf9\xfa\xfb\x9fn\x7f\xfc\xf9\xc3\xd5\xed/?}\xfexuy\xfd\xe7\xeb\xab\x0f\xc1\xeb>\\\x7f\xba\xba\xbc ^rs\xf5\x9f7\xbf\xbc\xfb!x\xcd\x0fW\xdf\xbf\xbb\xfc\xdb\xed\xbb\x1f\xaf\x7f\xfa\xf9V\x9e:CW_]\x7f\xbc\xfd\xf6\xdf\xbe\x1d]\xa3\x03^oQ\xbd\x88m\xdd\x9f\xcb]%\xa6\xd0\xf8\x81\x0f\x1e\x81\xca\x8bq\xa5\x98\xdc\xb2\xcd\xa9)\xf9\x0b\xecN\x85\x94\x89\xf6\xecU\x9e1\xf6\x18\xdd\xe5\xa7\xe4\xea{\xaa\xd41\xdd\xb2Bl\x1c\xfa\xa8=i\xadab\x06:q'\xd3g\xf8v\xf2\xcb\xb0\xf5Q\xd7\x0d\x0e\xa1\x95\x03\xf5\xa1\xde\xa8\xbcg;i\xe8\x915j\x83\x93\xa3\xd5a\xe8\x94Wq\xf3\x1c\xb1LO\x9d\xb7\xd3\x9f\x94\xb7{\x7f\x92\xdb\xb1e\x9bB\xcd\x89\x11\x91m\xbf(\xb4\xdc\xb8\x95\x87\xd3\xa1\xa8^7\xac\xd8\xca\x05\x91\xb3g~*\xf6\x93\xb0\x9bpR\x8f\xe6e\xd3Yp\xfb\x9ai\x0fd\xd7&oH\xb8\xa3\x93\xf9\xff6\xf4G\xd5\xf9\xbbb\xf3\xe5\xa9h\xb6\xed(/?zB\x93\x86\xdf\x1d\xca\xaaV\x1e\xc6`\xf2@\xc3\x0e\xf5\xa3\x16\xad\x971[1\xb4\x11\xb3\xf5\x8b\xf8v\xfa\xd3`\xee\x98\xb5K\x19&V\xf7\xab\xeb\x8f \xaf\xd1\xcfM\x035.\xe5\">}\x15?\xfc\xf5\x02>\xb1\xfb\xb7 s\xd9o\xdf\xbca\xe5\xb1\xbd`b\xdfa\xa7\xc3E\xdd\xec\xde\\]\x7f\xfc,~~-\x96\x85\xa9\xd1\x97&\xc3\xff\xcaa\xa9T\xbd\xdf\x95-g\x0d\xd3_\x13\xe8\xde~\xb1P\xc2c\xd1\x94E\xc5\x1dN\xf8\xdd\xa9\xcb\xf4w \xf2\x0e\xb2!\x0c\x1f\x04\xe2/\xe0\xa6\x06V\xc9\xe9vu\xfdQX\xfa\n^\xea\x93\xc4QL\xab\x96\xb9\xd8v\x10\x8b\xfb\xf5\xe6\xf9\xb2\xae\xee\xcb\xdd\xafj\x8a\xcb@]5N\xcc\xbbB+\xbf\x9a\xee\xfcE9\xef\xbf\x9a\x87 lPP+a\xaa8\x00m\xd9\xa6\x14\xefP\xadc\xf6:3<\xadS\xdfm\xcf\x164\xd1\xebO\x17\xdfu\x17\x1eN{^\x0e7\xa34r\x91\xd9\xe7/~\x14\xf5\x98\x08\x99\x0d\x0e\xd0\x97\x8cr\xe8\xe3\xfd\xb4\xdb\xcf\xeb\x06*\x85\xb0\x94\xb6\xb5\xe5No\xb01_C\xd9\x90\xe8q\xdc\x95\\\x06b\x1c>\x87\xf9\xd3\xe0eR\xef\xf5\x17\xf6\xd2\xca\x15U\x0f\x7fgg\xd1\xaf\x86\xc3\xea\xd2\xfc\x11\xf6\xcc\x9b\xe2\xf6\xae\xe4\xedm\xcb\xeb\xc6'\xbe\x99*B\xce\xf6\x8e\x90\x12\xc2\x0d\x1e\xf9\xf8\xa1\x9d\xfbR,\x84\x1b\xfe\xbe\xe4\xef\xe4\xb8\x95\xeeWD_\xba~\xfep\xd5\xfd\xde\xed]\x81*}\xdb\x96\xdb\x0ewU\x9e\xcd\xa5n\xe4\x87\xd2\xe4w\xd0.@\x0f\x841J\xa6\xed\xde}\xbeT\xa3Y\xb6\xb0)Z6\xf4I\xed\x9e\xbe\xb5\xfe\xd5\xa7\n\xda\x0dS\xde\x9bl\xc5y\xb7\x18\x90\xb7\xf6?\xbb\xfbE\xef\x1d\x15\xe8\xb980Y^-\xd7\xa8a\xaf<\xcf\xfc\xb3\x9c\x933\x82\xc2\xca\xdd\x1b\xa7(\x12OU\xdcCT\x0b\x9c\x80bAJ2ZZNB\x1a\x0d\x15\x8d/!\xa1\xd1\xd1\xcff\x12\xcf\x08)gdd3*\x9aYn\x82\xd9bjY~R\xd9\":\x19\x01\x91,#\x85,7y,#m\x0cC\x18#\xa1\x8a\x11\x90\xc48\x8e\x1eF@\x0c\x9bM s\xc2\xae\xd2\xc3\x7f@O\xfd\nm\xbbdt\xaf,D/\x12\x8a\x17\x05\xb9k!\xad+BQ\xf2R\xb9\x10$.\x179#\x85\xb8\xe5\xba\xff\xef\xee\xce\xcf\xa5i\xe1z\x1f\xa7f\x85\xba\x8a\xa0c%\x11\xb1\xc6\xd0\xf4\xc5\xe4\xab\x08\xed*D\xb8\nS\xad<\xa3\x82\xa7W\xc5\x89USJ\xd5\"2\x15\x8aF5\x87@\xe5$*\xc5IS\xd9\xe8R\xce\xf6G3)39*;-*3!*/\x15*@\x82\x9aR?\xa6\xc4\xa7\\\x94\xa7\x8cd\xa7\xec4',\xc1 AmB\x93\x9apt&\x07\xdb\xc7\xd5*\x96\x95\x12#/\xa1iK(\xc2\xd2\xc8\xf8\xbc$\xa5\xec\xf4\xa4\x9c\xc4\xa4\xac\x94\xa4%\x0f\x1cAC\x8a\x13\x90\xfa\xe5\xbf\xcb\xe3.\xc7r\xf4\xcd\xb4\xec\xb7\x13\xab6\x8e\x8f\xceO\xce\x0c^\xd4l\xc8\x9d7\xf5wiU\xf3osT\xd8Hl\xec+\xfd\xe4-\xdf|\xb4\x94vp\xdb\x8d$%\xf1\x91\x84\xad\x8a\x88\xcb]\xa9\x80]\xf9\xc8\xe4tiX\xdb\x9a \xb9\x86\x18\xd8\xd5\x1e\x1b \xa7\x17\xb3w_\xbc(B\xc5\x97\xeed\xe5\xebZ\x1f\xe9\x1c\x1d'\xfa\xc4\xb5|\x8f\xbc\x10\x18^\x1f_\xef\xd9#\x1b\x9cf\xc3\x10\x98\xcf\xe5\xe1\xb4/\xb8\x81\x14'\x06XmM\xb0\xb4I3T\x17\xe6\xcf\xb72\x13\x990]B\xe8\x92\x11R\xc1\xd4\xde\xc1\x96\x8b'[\xe8\xcc\xba\xda\x99W\xf9\xa3\xeb\xc1\xfd\xdf\xe1\x83\xb3\x86\xb1\x07H\xab\x7fr\x17>\xda\xdc\xd3U\x12\x07G\xf7\xcd\xcc\x92\x8d\xde\x15\xed\xe4M\xb7zd.0\xf6\x0fY?\xc5]}\xe2R0NNx\xed\xd0\xb4\xca\xa2\x91^\x9c\xc3\x1e\x9fM\xb0\xf4\xfb\xc5N\xb4\xbd\xd5\xab\xef\x8b\xf6?d\xed]\xee\xabx.\x0f\xa7\x03\x9c*\x89\x10\xb8\x87\xa7\xba\xf9\x02O: \xa7\xc2H\xfcY\x9e\xb9Y#\xda\xb9\x98\x98;\xf3\xdb\xc6(c\x7fi{S\x0bK\xaa\xaf\xd8p\x15]6\x9a}\xbda*f\xe8}\xb2\xea\xcf\x03\xe0\xbe\xf8W\x87?\xc9\xf0\x0c]j\xcd\x88\x01\x89E\x89\x1c\xd9\x93\x0f\x05/\x14B\xecE\xc1\xb7\x1a\xc6OMe(OfO\x96qQ\x99\x8e\x1d(k\x8a%\xfb\xc7_>\xdf8Cd{V\xed\xf8\x83X\xba\xef\xcbg5\xc5eZJL\x84\x96\x1d\x8b\xa6\xe0L\xb5\xa8\x1a:\xedy)\\\x01\xd3b\xd7\xcc(\x82\xe6\x10+\x0e\x8c\x8c\xd5\xfd\x1f\xea\x9d\xed\xfbJ\x9e\xd1\xe0\xad\x8cw\xd9\xaa~\xfdx\x8a\xebO\x91\x0e\xa9\x82a\xc5\xae\x1fOY?\x9eB\xc5~\xcd\xc2}\x8d\x8d\xd0r\x8d\xe3 D\xc4\x94\xd0\xe2\x14w\xab\x10\xc4\xb3\xfe\xae\x91\x83\x15\xf7\xabn\x9e\x13=\xa9\xbbz\xeb\x04~\xd7\xdb\x8e\xa5\xa8\x99\xb02\xd5$\x93\xb6}\xbe|\xf0\x0c\x87u\xa4m\xb8\x86Z\xfb{/\xe6\xab\x88\xef\xb8\xd0 'TqE!\xd1\xf8 U\xe8P\x14\xaa\xcc\xc4R\xa8B\x88\xa8P\x85\x0cW\xa1\n\x15\xbaB\xd7\x9e\x19c\xa1\xcab\xa4\x85\xa9&7\xdeB\x95E\xa8\x0bU\x08\xb0\x17\xaadD`\xa8\x92\x1b\x87\xa1JF4\x86*\x18L\x86*$\xc8\x0cU\x08\xf0\x19\xaap\x1cJC\x15\x02\xac\x86*\xb3\x11\x1b\xaa\xac\"\xbe\x0bP\x1d\xaad\xc1v\xa8B\x82\xf0P\x85\x02\xe7\xa1\xcaB\xb4\x87*)\xb2\xb4\xab\x88o\xcah\xc5\x91\"\xaa\xc4\x07\x05\x81\x1aQ% ;\xa2\xca*\xe2\xeb(q\xac\x89*\xab\x88o>T\x8a*\xab\x88/\x1a\xb3\xa2J^\xe4\x8a*\xab\x88\xefBt\x8b*X\x8c\x8b*\x08\xa4\x8b*h\xbc\x8bu\xf9*\xe2\xeb\xf8C^|\x8c*\xd9Q2\xaa\xe4\xc4\xca\xa8\x92\x151\xa3\xca\xf2i\x82@\xcf\xe8\n\xa3\x18\x1aU\xc6\x1bW\xec\xd4\xd2\xa98\xca\x9c\x87\xd1\xfd\xeb~UGz\x15!g[\x15\x8bk\xd8o\xa7\xb2a\xdb\x81\x8c\xc2t\x80\x94\x82dW\x8f\"\xd9\xc9G\xa4!.b\x82\xa9|f}/E=\xb4\x00%\xbc;\xf1\x87\xeb\xea\xbe\xfe\xda\xf1\xedE\xd5\xa2\xd6y\x105\xdc<\x7f\xad01\x05?5\xac\xbd\x80\xabb\xf30\xb6\xd0@dd\x1f\xe5\xfcs\xe5Lx\xa7{(\xf6+\xb9W\x89\x97S\x8a\xfc\x8ac|\xbd\xd9\x9c\x9a\xd6\xe1\x00\xbd\x97 \xf0GV\x99\x17\xc0\xdc96\xe3\x1b\x13;\xec\xc40\xd5uz\x94\x1cA\x0b\xc9O\xbegM\xa3BC\x85\x89\xe5\x97\x07y\xa6\xd4\xbd\xab\xb6p,^\xd4\xdf\xeeY\x0f\xedxz\xa8\xf7\x8e\x0d\xcf\xfbU\xbd\x03;L\xbe\x82\x188\x9c\xc7\xa7\xd6\xa16\x99\xf1\xfe \\\xd5\x9c\xbd\xd9\xd4\x07\x19wV\xd3\xcb<\x13\xb5\xe1x\xa10\xa2\xfc\xc7\xbbO?]\xff\xf4\xfd[1Q6\xfbRI\x84\x8a\x06\x14$i\xff\x02\xec\xf9XK\x08\x14{\xe6&b\\\xd52\"\xb0)\xf6{\xb9\xea\x1dj\x8f\nS\x1fa\xd6\xd7\xfe*\xcc\xfd\xb5\xfb\x80\xe77-c\x1d\x0d}W\xf2\x87\xd3\x9d|\xa1U\x0e\xe7M\x8f\xd2yS\xb6\xed\x89\xb5o\xfe\xed\xdb\xef\xbe\xfb\x83=\xcab>\xd5'~\xeb\xfe\x1ex`\xbc\xe7\n:\xaa\xf6L\"h\xf8\xa1p\xeds\xa95V\xe1L\x06_\xf9\x96\xabvU;\x82\xffw]>I\x7f\xa7Q,\xcc\x0fEi\xe7Z\xd93gU[\xd6\xd5\xad\n,\xaf\xb9\xa157\xb4\xe6\x86\xd6\xdc\xd0\x9a\x1bZsC\xdeZ\xd7\xdc\xd0\x9a\x1b\x1a\x94\xe8\xc6\xbc\xe6\x86dYsCkn\xc8U\xd6\xdc\xd0\x9a\x1b\x1a\x9457\xb4\xe6\x86\xd6\xdc\xd0\x9a\x1bZsCknhT\xd6\xdc\xd0\x7f\xbb\xdc\x90?f< \xdd\xaa@Dwb1\xbf\xca\x07\xba)\xaa>\x8a\x7f\xf7\xa2\"\xc1\x8e\xe4\xcd\xd3\x03\xab\xf4\xf2\xa4\xb6\x9ca\xdd\xe2\x14\xdc\x9e\x8c\x90\xfa\x85\x98\x8e\xc2\x19R\x0bZ\xcb\xe45\xde\x80\xa3\x98\x90\x9b\xa2\xfaZ\x9e\xed\x14\xadc\xab\x121\x93x\xb6T\xb8\xd5\x92\xc7\xc3*\xaa\xba\xba\xdd4%/7\xc5\xfev\x8d\\\xaf\x91\xeb5r\xbdF\xae\xd7\xc8\xf5\x1a\xb9^#\xd7k\xe4z\x8d\\\xaf\x91\xeb5rmJ\x842\x172;\x0fB\x9a\x03!\xcc\x7f\xd0\xe5>\xf2\xe7=2\xe4<(\xf2\x1d\x0bs\x1d$y\x8e\xac9\x8e\xfc\xf9\x8d\xac\xb9\x0d\\^\x83(\xa7A\x92\xcfpx\xc3\xeeU\x87$\x8f\xb1 \x87\xe1\xc9_\x047\xcc`\xde\x82PeM\x1f\xac\xe9\x83X\xecxM\x1f\xac\xe9\x03\x8a\xf4\x81\x1b\xee\x9f\x1d\xeaO\x03\xf3_(N\x83\x17\xa6\xe1kt\xd4*ktt\x8d\x8e\xae\xd1\xd15:\xbaFG'e\x8d\x8e\xae\xd1\xd15:\xbaFG\xd7\xe8\xe8\x8c\x8e\xaf\xd1QU\xd6\xe8\xe8\x1a\x1d]\xa3\xa3\xaa\xac\xd1\xd15:\x1a\x0b\x8d\xad\xd1\xd15:\xbaFG\xb1\xd1Q\x9f\x00Jv\xf1\x13\xce\xaa-k\x0ee\xc5/\x8a\xbbMyq\xf5\xc8*\x9e\xa8u!/\x1b>\x12\xd7\x19\xaf\xe0\xbc)\xefN\xfc|\x92\x18_\xd8K\xbe\xf3g\xe6\xe3lYm\xd9\xb3\xaf\xba\xbb\xba\xde\xb3\xc2\xfe\x9c\xa8\xf5\xe0\xe5Czg\x06TQ\x07\xda\xb2\xda\xed\x99\xe8\xf4k\xb5K\x1e\x8b\xb2y\x05E\xdb\xd6\x9bR\x9e\xcd\xf4\x06\x07L\xdc\xed\xd4N\x19\xbcD\xb2 \x15}j\xa1\xe8\xa3R\xb0e\x8fl/\x86\\\xe9\xbcp^l\x1e\x86\x9b\xe4P\xd9e\x08\xf7\xff\xc4\xdac]\xb5\xec=\xdb\x95\xd5\xfb}\xbd\xf9\xf2\xaa\xfb\xed\xaa\xda\x8e~\xb9|`\x9b/7\xcf\xf2\x051\xbf}`\xfb\xf2\x9157\xcf\x03\x7f\xf8\x87\x82\xb3\xe6\x95%\xe3\x02\x87\xe2E\xbc8\xbf\x9dX#\x1c\xa3S+\x85^\xe4\x8b(\xbb\xde\x06f~7\xa8\x89\xaf\xc0h\xaey\xa6\x85sBLfV\xca\xcd\x93y\xe4\x9aA4sG\x0b\xe5\x9c\x8e\xbb\xa6\xd8\xb2N-\xe7\xc7z{\xda\xb3\xff\xa3bw\x89\xa3(\\\x12\xc4H\xe8%\x7f\x98'(\x8eG8\xc8\x96\xfbq\xb5M\x08\xd4\x17#\x05l\xc4\xec\xab\xdaSk\xea\xf4\xb6j\x8d\xf4\x80K`\x0dJ\x17\x84\x12C\xafn\xd7\x91\xc2v\xda\xd4`\xae\x7f.\xab\x8d\xb4\xc6\x90\"\xe0_.\xfe\xf5\x8f\xa1g\xf1q_\x10=\x82P\xac\xec3\xe3jG\x92\x0f\xc8\x10d\x8cm*\xff$\xffd\xb6\xb8\xd3\x80\x0f\xa1/\x1b\xb9E\xa3qo\xeb{\xfe$6U\xb1\x02\x1d\x8f{\x15\xda\x90\xc3Z\xec\xe1\xab\xbaz\xad\xab\xf9\n6\xf5\xe1PT\xdb\x16\xb6'\xd9\x05\xabZ\xdeQ\x82\xfaUI\x9f\xb6\x06\xa7(]\x97|U\xc4B\xc8\xb6\x17p-\xa3\xba\xc5\xbe\x95I\x98\x91\xb5\xbc\x86-\xe3l\xc3\x85\xd7 \xc3\xb1Eo\xb2\xe9\x8ap:\xd4\x8e\x0f\x05\xec\xcaGV\xf5C$s\x1bv\x9d\xc6\x08uK\xa3^H\xde\x0d\xa5\xf0T\xef\x18\xabd.F\x1f\xefL\x93\xaf\xa0\xe4f\xacG\xee\x87J\x8ft\x19\xa7\xde\xca\xb2\x85\xfa\xc4_\xd7\xf7\xaf\xb7\x05g\xbd\xf7c\xcc\xb8)\xc5\xbb\xd7\xc0_\x14\x17\xa6\x1cyK\x0d+6\x0f\xc2\xd5\xd5\xe7\xda\xae^i\x06{.\xb9\xcd\xe1A\xcc8\xf3\x92\n{^\x8b{\x90\xb3\xf1\x83\xf0\xc67b\x11{\xab\xacV\x19\x13\xdd\x91V\xa5E\xe4\xd0m\xbb+/\x1cW\xc2\xbe\xde\x95\x1b\xbb\x9b\xdd\xa87\xecP?\xb2mO4\xfb\xfc\xe1\xaf\xa3\xa8\x8dD\xea\x94\x80\x8c\xc4\xbf\xearB\xdd\x1b\xc1\x1f\x9a\xfai\xc0\x1aK\xe67\x8dW2\xdf\xc2\x04\xfa\xe0m8M\xbc#4\xf5\xcf\xfa\xa0c\xedG\xd6\x88\xea\xd9\xd6\x8e\xac\xfc\xac\xa3\x12[(\xef\xd5\xb8\xe9\xce\xb5l\xf0\x94\xc7\xdaz\xe1\xa5}d\xa1\x0c^\x0e|\x90.\xfb\xd0\xbd\x9a\xd5}\xad\xb3Me\xb5\xd9\x9f\xb62'\xf6z\xfaU\xf6\xf6$\xbc\x95V\xber\\.\x0e%W\xd3_\xe6\x11\n^7b\x11>\xed\xb7P\x9cx-\xfc\x98\x8d\xccq\x9a\x96x\xdd\xd5g\x96\xaa[E\x9a\xbbmy\xc1\x1d3y\xe2\xb3\xfa.\x8f\xef\xc8\xe2\xbbZ\xc5\xa6oc\x19|t\xfe\x1e\x95\xbd\x1f\x19\x9f7s\x9f=o\x9f3k\x9f5g\xbf\xe4\x81#\xf2\xf5\xf1l\xbdY\xfe-\x9f\xf9\xe3\xbe\x18\xa6A\x869\xc3\xe2\xae>q(\xe0\xb8/\xaaj\x10~\x15OU\x86\xa1\xcbNVJ\xaa\x83\x05\x93Q\xff\xfb\xc4\x9a\x97w*h/\xda4\xa9\xc4\xc4\xa4H\xde\xf0\xeb\x83\x89\x99\xabP\x8d\xa5)5\x8c\xbf\x8a\x11\x80\xa7\xa2\xcf:\xb8Frp\xfa\xf0u\xd6\xb4\xd4\x98\x7f\xcbw\xc6\xe4e\xe4]o\x06\xb7\xc1\xa7\x8f\x97\xfd7\x12s\x13\x03\x85\xca7IR a\xb5j\x8f\xa71\xbe]\x88\xf6\xb9L\xf0\x1c\x93\xcf\xda\xe3)\x10\x93f\x8d\xe4\x06\x13\xcf\xde<\x9b\xd14\x95\x8a\x92\x81OA\xcfF\x89\xdd<\x9b M\xe6}L\xe4\x07\x15\xc5\xf5\xe3\xffI\x0c{\xd6\x8d\xffs\x994\xbasfh\xae?\xafk\x1aprw\x10 <\xb9\xdb\xc7\x86\xa6\xd1\x19I\n\xa8\xb1\xd7\x84y3g\x171T$\xb5c\x7fq\xfbbq\xbfk\x8e'\x1dQ\xb0\xc2,\x92\x0bx|;F\xe5\xf0\xef\x00\x83\xf2\xa1\x1fx|?q\xbd\xcb\xc2\x16\x80ZF\xf0\xc4J\xf3\xe3\xe4n1\xcc\x17k`:}\xcby\xe8\x98\xcbB\xc7|6z\x97r\xd14\x9d\x06\xd3\xf9\x8a\xe4\x94\x90\x8b\xb6\xd9\x0cP\xebc@\xd0|\xbe*\xc94\xc8\xa7\x98'\xcdh\x00\xe3\xd92\xa6vK}\x0cB\xa4\xf0+D\n\xc7\x81)\xb0\x10\x9a\xe3\xa9\xd8\x8bx\xe4(\xa2\xbb\x8dl\x0d\x01\xb6\x8a-\xf378\xbe\xdd\xc7\xa6\xb6\xc9\xd9\xc6d\xd8\\m\xf4\x0c\x92 uQ\x0e\xd2\xf5\xb3\xd1\xf1w\xdfQ\x16\xb34a$\xa1\xc4\xc4(V\xbcF\xd9\xdf\xa4\x91\xe9\xb0&,\x12+\xcd\x93\xcf\x1c\x1cb\xdc\xca\x00qt\xeb\xcc-\x14\x89\xfe\xfc\x0fm2j\x88\xec\xccs\x18\x00\x00\x00\x00IEND\xaeB`\x82\x01\x00\x00\xff\xffPK\x07\x08\xd4`4t\xc7\x01\x00\x00\xbd\x01\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00 \x00swagger/favicon-32x32.pngUT\x05\x00\x01\x80Cm8\x00u\x04\x8a\xfb\x89PNG\x0d\n\x1a\n\x00\x00\x00\x0dIHDR\x00\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\x00\x00\x04|ID\xc4\xcf\xd0@\x04&%\xad\x1e\x16\x0f\xf7\x8d\x97AR\xfa\xca\xe7l\x87\x05\xf8\xd2\xfb\x0c\x84\x1d\x0dLVY\xdc/ju\x13\x1a\x88\xd2\xa0\xaaa\x82|nzp_\xf4\x03\xc8 \xd4;^\x8a9}\xeeu\x9a\x91 `\x04\x14s\xec\xe1\x0c\xc6]\xa3\x05``\xd1w\x12*~ \x00\xf3\xae\xd3\xa0\x9cb\x82\xa2bx(\xb3n\x1fqx\xd2\xf2\xda4\x1d\x8a}\x1ck\xd4>\x9cI+\xeb\xb3\xf4k\xc8u`L\x93\xf3]4\xb5\xd0\xc3\xe33\xd9\xee\xd7\xf2\xd9\x19\xea\x18\xc9\xc1Y:\x18\xfb(-\xadN\x82\x06e\xd5\x1f0\xa2\x1dV\xf8\xbe0\xc1\x985\x01\xf8\xd2~\\\xa6\xa5\xb5)&\xf6\x98V\x80l\xe4\x03\xf8\x03\x04\x00s\x9a^\xec\x85\x00\xf4+\x0b\x00\xe1:G\xf2p\x96\x0e\xc4,\xe46\x1e5\xbbP\xdd\x15J\x80}\xce\xa4\xe2\xc8{m\xa4\xe2\xc3\xc2\x01\x07\xc0\xdb\xa4\x18-\xa1\x931\xba\x10S\xfa%\xb6P`\x10\x19v\x99#|Gg\x9b \x10W\xf6\x8dI1\xba\x92\xd66\x17E\x12\xfa\xd9\xa8\xf3UTe\n\x1b\x95\x9d\x81f\xe5\x18\xa5umc\x81\x86\xa6\xeb\xec \x804\xcbg\x17\xa19\xfa\xc6\xf7<\xa3\xbd\xf2\x0e\x7f\x02\x80\x97Y\xc7\xac\x184$h\xa3v\xba! \xcc{\xcd\xb4!\xb1\xd8\x92%h\xe3\x93\xdc\xd3_\xda1\xe6\xaei\xcf\x83\xa6p\xbc$\xf0\xb2\xda\x94\xa2q\x14B@\x13\xdb\xff\xf3\xd7\x0d\xfaA\xb9\xc5n{\x8e\xd6Y\x08\x01u\xc1'~\x16\x8e\xe9\x04\xa2\xfbA+\xc74\x0c\x98\xab\xd7:\xfc0\xd1v\xaf$\xa2#\xb7\xf1\x08\xfdm!OXh8\x10j|g\xd1\xe0a\xb2\x99\x04\x9a[y\x9a\xbdk\xf24C$\xa0\x9e#\x9f\xa3\xa8\x001\xc6\x1a\"\xc0\xe4i\xa6\xcc0\xf3\xf7\xb7\xf5XE\xb8\xe0\xa1\xc9\xc2\x0c\x90\x83\x80$\x838\xdf\xd6\xe3\xd4\x82FNG\x0f\x876\x8a\xbf1\xa8d(\xa7@\x8cQX\x90\xdb\x19\x9f\xc5YG\xe9\x9e\x00\xa5y3]\x9aJ\xe1\"\x00\x00\x00\x00IEND\xaeB`\x82\x01\x00\x00\xff\xffPK\x07\x086B\xc8\xd7\x7f\x04\x00\x00u\x04\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00 \x00swagger/index.htmlUT\x05\x00\x01\x80Cm8\x9cT]k\xdc:\x10}\xdf_1Q\x1e\x92\\\"\xfb&\x81p\xf1\xb5\xfd\x90\xa6\xa5\x81\x94\x06\x92}(\xa5\x14\xd9\x1a{\xa7\x91\xa5E\x92\xf7#!\xff\xbdX\xf6\xae\xb7\xdd\x90BYX\x8f\xe7\x9c9\x1a\x1d\x8d\x9c\x1ep\x0e\x1f\x1f>\xddBe,8/<\x95 \xc9yKE\xeb\xc9h(Z-\x15B\xd1\x92\x92\xc0y>I\x0f\xae?\xbf{\xf8r\xf7\x1ef\xbeQ\xf9$\xed\x1e\xa0\x84\xae3\x86\x9a\xe5\x13\x80t\x86Bv\x01@\xda\xa0\x17P\xce\x84u\xe836}\xf8\xc0\xffc\x03\xe4\xc9+\xcc\xef\x97\xa2\xae\xd1\xc2\xf4&\x8d\xfbL\x8f*\xd2\x8f`Qe\xcc\xf9\xb5B7C\xf4\x0c\xfcz\x8e\x19\xf3\xb8\xf2q\xe9\x1c\x83\x99\xc5*c\xae\xd7\xe0-E!\xbb'A\xa5\xd1\x9bbjD\x8d\xf1\\\xd7\x9b\xeaJ,:\x9c_\x9c\xaf.\xce\xa3\x008zB\x97\xb1\x90a\x10\xff\x9d\xde\xd9\xe5\xea\xec\xf2\x17\xbd\x90\x19\xf5\xc2\xc6\xfa\x18\x82\x9bC\xf8<<\x01\n\xb3\xe2\x8e\x9eH\xd7 \x14\xc6J\xb4\xbc0\xab\xff\xb7\xb8Y\xa0\xad\x94Y&\xc0\x1b\xf3\xc4]i\x8dR\x85\xb0\x8e/\xd0z*\x85\xda\xe7\xf2u\x02=q\x83\xbdL\x86\xe0\x9f\xd3M\x90\x14X\x19\x8b\xe3\xbb\xa8<\xda7\xfb#=CK~O\xb40r\xbdW\xd8\x08[\x93N\xfe\x1d\xdb+D\xf9X[\xd3j\x99\xc0a%\xba\xdf(\xd5\xfd\xa7\xf1\xd6\xaf4\xee'\xac\x0b;\xf9\xc1OI\x0b \xb9;\x0e,OcI\x8b|2\x18^Z\x9a{p\xb6\xdc%\xf1~\xc6\xa3\x1f\x8e\xe5\xdd*\x81\x94\xbfY\xe1\xbc\xd0R(\xa3\x91\xcf-:\xf4o\x14\xf7/K\xd2\xd2,#\xa3\x95\x11\x122\xa8Z]v\x17\xec\xf8\x04\x9e7N\xc51\\\x85{&\xc0\xad\x9d\xc7f\xc8\x97F;\x0f-A\x06\xc3m\x99\xde\\\x85\x9e\x8fGG[\xab\x12`Q\xeb\x8c\xd8v\xfb_}K7\xd3F\xfe]\xb1\xa1\x82h%q{\x8b\x9b6\x88/\xc4i }\xc07u~}\xe5\xad\xfd\xc9\x98\xe7q\xd8_}o\xf1\x92%\x9dx\x15\x9f\xd3yO\xbdX]\x1aA\xc9>t\xd6o\x93\xd3\x92\xf2\x04l\xc5\x8d\x92jz\xc1jN\xd6\xf2\xa9\x87\xfa\xb5]\x05\xcc\xf9\x1acB\xa9,\x9f\xd0\x08\x05\xb7\x962\xec\xdb\xb6\xe2\x16b\xc6\xd5\x942H\x05KfI\x06\x7f\x9c\x98\xa8\xc0\xd5\x9c\xa2\x0c\x13\xa3\xe7U\x8e\xb55;'Nk\xe6\xd0\x9d;\xd4%^\x14\xbd\xd5\xf7\x92QN\x8e.\x1c`\x079m\xe3\x9e\x8a\xfe\xed\xa2\xad\xe0y>\xe6\xe23\xdc\xf8u\xa7=\xa3\xf6\xa1\x98\xb4\x17g\xa9\xf4\x1dA\xa8Z\xe4\xf6\x88_\xfc)\xf8\xd5N\xcf,\xea\xb4\xabS\xf2\xd2\xe0v\x10\x90\x82\xbd\xb3\xe1\xc1g\xc8>\x120\x0c{\x1d\xbd\x1c\xd1\x7fd\xb4\xbf\x82|\xf7\x9f\xd0\xa7\x1e\x82\xc5`H\xc0\x94F3p0$H.\x0f]v3\xaa\x9b\x1c\x83EW}\xba4\x12O`_\xb5!H5\xd1 \x9a\x0c\xaa\xcd\x04\x8cE\xe7M:\xe1\x08\xfe\xefQ\xab\x02\xfe\xb7A\xeb\xb6k\xbb\x05{\xef\x8e\xde\x84\xcb\x9c\xb2\x8f\x04\xd7U\xf9\x9aQ:\xbe\xf51\xf1\x1a\xaaW\x97uR\xdd\xe7\xf59\x974\xb7\xfc5s\xd0\xc4P\xdf\xdd\"\xd7\x96\xc2\xdab7x\xb8;\xfc\x01\xfa'\x00\x00\xff\xffPK\x07\x08]\x12r 9\x03\x00\x00T \x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00 \x00swagger/swagger-ui-bundle.jsUT\x05\x00\x01\x80Cm8\xec\xfdyw\xdb6\xf68\x8c\xff\xffy\x15\xd7\xfa\xf6\x9b!kZ\xb1\x9d\xa5\xad\x13\xc5\x93\xc5m\xb3g\xe2\xa4\xcb\xa8\x1a\x1fZ\x82,6\x14\xa8\x90\x90m\xb5\xf2\xef\xb5\xff\x0e.\x00\x12$\x01\x10r\xdc\x99\xf9<\xcf\xc3s\xdaX\\\xb0\\\\\\\xdc\xfdn\xc1tI\xc7,\xc9h@\"`!\xfc\xf9?\x00\x00\xbd\xec\xf4w2f=\x18\x0c\x80\xad\x16$\x9b\x02\xb9\\d9+\xe0\xd6-\xd3\xd3y6Y\xa6\x04\x0e\xe5\x1f}\xf5\xf6\x00X\x10\xc2\x01\xf4T7\xfaG\x132M(\xe1-\x8a\xbf\xfa\xf1|\x02\x87\xf2G0\x1c\xe1\x80\x0e\\\x839T\x7f\xf5\x8f/\xe2\xb33\x92\x7f|\xfedI'));&\xe6'\xffs\x15\xb0YRD\xd5\xf4\xd5\xd4s\xc2\x969\xd5\xc0\xa2\x1e\xf0\xeb<\xce\x81\xc1\x00\xfe\xbcz\xf0?\xe5M\xf5*\xd0 \xd7_\xe6W2\x85\x80\x0d\xf3Q\xa8\xda\xe5?\x14t\x1e\xd4^\xe5mg|t\xc3|\xc4\xbb\xa8=\xc4\xb6\x0e \x8fZw\xd3\x03\xd8\xdak\xdf\x96]\x1c\xc0\x9fW\xb5gW\xf5N\xe5\xa8\x08\x1f\xd58N\xd3 S\x83\x8b \x8b@\xfbEC\xfe3\x85\x01l\xedj\x0f\xca\xd6\xaand\x9b\xb4?\x87\x01\x90\x08h\x7f\xcc\xa7\xc5\xff\x98\xc0\xa0\x8ep\x11\xb4@F\xfb\x99\xc4\xc5\xf5\x1a\xde\xe2\xd2\xf7\x05J\xbc\xcb\xb3\x05\xc9\xd9J~\xd9\x86\xd08\xa3\xd3\xe4l\x99\xc7\xa7)\xb1\x80\x85.\xe7D=\xdfm??#\xec\x00\xf2:\xc4\xc2j\x8e|\x0e\xb46\x87\xe6\xe8\x15\x86 Z\x93\xfe\xc9 )^\xab\xbd\xd1\xc25\xfdR+\xc1\xe7\x1a/SV\x1f\x03\x1c\xf8}\xed\xb1\xd6\xb4? X\x04\xbd\xb8\xc7\x81\x1c\x01\xabO/k.Q\xb3;\xd9\x8c\\\x99E\x9e\xb1\x8c\xef\xca\xfe,.\xde^P\xb5F\x02\x9b\xf0\xfbz\xfb\x0b\x18@\xef\xf6$)X/\x02\x1a\xd0>'\x12w\xef\xde\x13\xaf]\x05\xc3\x06~P\xbd\xff\xde\xb2 P\xb0<\x19\xb3^59\x9d\xdc\xd0\xe0\x1b\xd5T\xd4D\xb5ZS\xf5\x8f\xbe\xbdw'\x0c\xbc\xbe3\x0f\x81\xe9+-\xb6\x08S+\xd9\x05PN#\xb6\x02\x02 -XL\xc7\x9c\xbe\xb10\x046\xcb\xb3\x0b\xa0\xe4\x02>\xac\x16\xe4(\xcf\xb3<\xe8=\x8d)\xcd\x18p\xe0B\x0c\xe34.\n\x88\x0b\x88\xcb\x1ezacG\xde\xcct\xaaG\x1c\xc1\xf3\x08)\x15\x0d\xf6\xef\xef\x87\xf5M\x94\xc0\x00\x82\x1c\x06\x90\x85|\x07\xe4\xf5\x1d\x90\xc3\x81\x01y%\x9cZ\x1bO\x1f\x8f\x01\x96M8\x96t\x98\x18\xc1\x8c\xafd9\x04|\x06|\x13\xef>\x00\n\x0f\x81\xf5SB\xcf\xd8\xec\x01\xd0\xedm\xd3G\xa0f\x8d\xc4\x99\x8e\x1e\x18\xdf\xc8\xfb\x15m\x81A\xfd\xe7z\xcd\x89\x11\xe4}\x9d@I4\xe9\x9d\xc7\xe9\x92\xf4 \xa1\x90s\x88\x05y\xff\"OX\xf9F\x18A\xb0\x1bA\xa2 \x10\xf2\xc9\xe5\xfdOd\xc5igk(\x0djo\xda\xb9%\x009.\x18\x08\xb0\xf6*E*\x16h\xdb\\\x1c\x04\xb9\xbc\xcf\xbf\xd6)H\xbd\xcf+\xbf\x1d\xa5\xef\xc4\xfaHJ\xc4\xa0\xc17\xf7\xef70\xadB,N\xca\xff\x9dX\x7f\xf7\xde\x7f\x0e\xe9\xad\x04\x84\xe8\x14\xe3=\x99\x92\x9c\xd0\xb1\"\x1b\x9c\xd7\x81Y\\\xd0\xbf18%\x84BB\x13\x96\xc4iR\x90 \xec@\xb1\\\x90<\x08kop\x12C&\xbd\xd0x\x86l1\x8e\xd3%c\xb65\x18@p\x9e%\x13\xd8\x85\x01\xe7\xd2\xe0\x10zK*N\xedI\x0f\x0e\x9a(\xcc\xe9\x1bg$+\xaep\xab\xe4\xed\xf8\xc7\x04\x0e\xf4s\xe9\xaf[R\x18@\x1cp\xec\xfa6l\xaci&\x1f\xdd\xb9\xfb]\xf3Q\"\x1f\xdd\xbd\x17\x86&>0n\xb3\x05\xea|6p\x05\xc4\x8d\x1e\xc4\xb6\xb9\xae\x87'\x16\x90\xdf\xba\x05t\x99\xa6\xb8\x92\xccr\xf6\x1cs,\xe1\x8ceN\x8a\x82\xcfs\xbe,\x18\x90\x84\xcdH\x0e\xa7D4\x90\xe5\xdaa\x14\x01?\xacz\xb0\xbd1v4\xd0\x8eT\x04\x88o5d@\xab\xd7\xf9\xe8k$\xca\xc8\x19\x16,_\x8eY\x96\x9b\xa0\x0d\x88\x0f\xe9\x92\x1c\x00i3\x85\xd0d\x1c\x0d\x8c%\xbf\x14\xdd6\xb3\x96\xd0fPw[/5\xc87'\xae\xf2PPk|\x88\xd3\xcfk\xc7\x01\x13\x92\xce\xc9 \xc2\xe0\xe4\x84\x1fT\x1b\xf2\x01\xb8\x1b*\xa0\xe7\xae\x83\xd6\xbc\xd5T+|\x85\x1e\xe7y\xbc\xd2x\xc3\"M\xc6D\xdb*\xa0o\x17f=\xae\xc5\xdc\xeb\x8b/\xf9\xceqNbV;\x99\xc20\xd2\xf1\xa4\xaf-9\xe7\xc7\x1b\xdb\xc8<\x14\x03C\x0f\xd5\xee\xc5}-6\xec\x8b\x80\x84^-\xe6\xce\x16\x97U\x8b\xbf\xfa\xb6\x989[,\xaa\x16_\xfa\xb6\x98t\xcf\xfa\xd6-\xd8J\xab\xa6\x7f\xf0m\xda@\n\xb5\xa6\xb7\x82-\xc1\x1c\x91\xe1t\xe4\xd7\xe0\xd2\xb7\xc1\x85g\x83\x85o\x83\x13\xcf\x06\xd3\xee\x15_\xaf\xb1[\xaf\xe6\xc6\xbe\xe3\x9b\xb5\xc6\xa7\xffbA.X7\x16d\xea\x8fD\xfcA\xfbI\xf1\x9c\x95\x9ck,\xee\xbc$+\xc2\xc5\xf5\xa5|\x81N\xc8%\xde(\xc4\x8d\xc7E\x91\x8d\x93\x98%\xe7\xfc\xa3T\xdc|\x9bOH\x8eo\x8d\xf9\x0d\xd5\x06\xef\xba_\xb5\xc0\x07\xd0?&\xfc\xbcJ\xda\xf4c\xca\x05\xc4\xbf\xff\xfd\xe4\xe4\xf9\xeb\xd7\x1f?<~\xf2\xea\xe8\xe4\xf9\x87\xa3\xf7\xf8\xc7\xc9\xdf\xff\xdekS\xd6E\xfb\x8b\x97G\xbf\x1e=\xb3\xbc>1t\xf0\xe6\xd9\xd1/\xd6\x0ff\xed\x0f\xde\xbe\x7fv\xf4\xde\xfa\xc19\x0c\xe0^\xfb\xf6\x1c\x06\xb0\x07\x0f\x1f\xc2\xb9A\xf1\x00\x03\x98\xc3\x0e\x18\x8e\x96\x15*\x9c\xda\xf7O\x8dZ\"\xa8\x8e\xb2\xad\xbd\xd6SC3'\xd7i\xc6F\xcb/\x9c\xd8J\xfa\xd8$g\xc4\xf6\"O\x92|dn\x91\xc8\xa3\xa1lp\xd7o;]\xf2\xd3\xcc\xf6\xf0\xd8q\x12q\xbee\xbd\x86\xdd\xb6\xf4W\x13*_\xc7l\xd6\x9f\xc7\x97\xfc\x90&R\xb2\x84\x1dT\xb4\xf0c\x88\xb3Tx8\x06\xa8O\x13Rh\x06\x0f\x81>\x80\x8c\x8b\x9f\xf90\x1b\xf1\xe3j\x98\xc160\x83\xac)A\x99{\xcd\xf6\xa9s94\x9e\x8c\xf4\x8b\xe4\x0f\x05S\xfcs\x80\x0cE\xc2\xe9\x02#\xc1cq\xba\xf2'^\x1d\x7f\xb2B\x12\x99P\xba\x9c\x9f\x92\xbc\xc6\x82\xba$o\x8a\xd0\x7f\xf4\xe8\x91 \xfc\xa0\x1a\xe5|&\x15\x1c,_\xa9\xbb\xfb\xdf\xdd\xfd\xee\xfe7\xfb\xdf\xdd\xc3\x19\xd2R\x05\xfb&~cn\x85/2m\xe3\xba\x0d|\x0c\x1e\xc2.\x1c\n o\x03\xab\xc9,\xe0\x00\xcec\x97\n\xaf\xc1\x14\xda\xdaxkb\xe2\x1aM\x05rm94\xe4Zs\xe8\x08\xa1\x1e\x1e\x0e`\x87\xe2\xc9^g\xce\x0d/3x\xc4\x01\xe85\xb0w\xd6\x95\x97\xa3z-G\xee\xb9a?\xf8\xb6\xc7\xfc\xda{\xed\x018}c\xc0!P\xce]\xcb\xc5\xd6\xf77\x83m \x9c\xf5n\x087\x9cC\x12\xef%\xa8di\x9d\xf4\xfa/\x8e\xdf\xcf9\x1dhS\xe6\xdf\xf9y\xd1\xbe\xfd\x06\x06\xb0\xdf\xbe\xfd\x9e\x9fR\x95tW\x19K\x8eW\xf3\xd3,\xe5\xeb(\xfe\xea\x8bM\x9d\x19\x8c \xcf\xc4I\xa7^0\x1cm\xaf`\x00\xef9\x8e<\xb3\x1d\x01\x1f\xcd4\x87\xcd\x92\xa2O\xc9%\xf3f\xc6?\xab\x95\xb2\xe8\xa8\x94\xc1\xa4Z(\xbe\x05\xf7j\xcb6\xe4\xdf;\xa8(\x1cB^\x9e!\x19\x1c \x91v\x9e\x86\x99Y\xb2\x9bd\xd4v\xe2z\xd2\xea\xef]T\xc19$\x81~\xcequJ\x9a\x96A\xfd\xe1\xe6>\xb7~\xf4ec\x9f\xb8\x19\x83\x866H\xb3\xf4!\xcexu\xf1\x93\xb9\x0be\x91\xe1C\xb5\"\x82\xd4!\x08\xa3\x85\xdf\x8c~tw'\x0e\xd3\xf7Hk\x87\xefG|\xcb\x90\xe1\xb3\x91a\x08\x0d\xb5\xcc@?\x13\xd5\xf0\xbcF\xf4\xb3\x07\x8c\xd5\xc9\xabCXp)^]\xbcpv\x81\x1a\xa0\xe6\x91\xa3\xb6cB\xd0 \xab\x84\xe8>\xcb\x8e\xc9g\xbc\xa5Z7\xb7\x0d\x1aP\x0b\"\xc5'\x93M\x18\x95X\xe4\x02\x181\xae4(M\xa9M\xbfut\xb9 cF&\x82A\x83,\x87DIE\xa27\xc8\xa6b\xcb\x15\x11\x7f\xfa \xa5\x1b\xf1\xe8\x00\xb5\\\xb6n\x8d\xab\xc8\xaf+_d\xfb\xf5\xcb\xe0\xdeg\x19\xcab\n\xe2r\x11\x96\xed\xb5 \xfdi\x9e\xcd\x8f(\xcbW\xe5\xcb\xc4w\x94/\xbfl\x94\x86\x81\x11} |\x9cR\x8aT\xb7\x96\xdec\xfb\xc19\xb6\xe0\xcb\x07\xa7F\x13\"4\x19\xdeo\x8cL\xff\xf5QSU\xb1\xec\x98\xe5 =s)\xdd\xb4\xc1\xf6\x86\xcf\xe5\x01=\xea\xd5{\x88\xe0c\xff\xe5\xd1\xaf\xc70\x80\xe7\xfc\xef\x9f\x1e\xbf\xfax\xc4\x7f\xfd\xce\x7f\x1d\xbd\xf9\xf0\xfe9\xfe|\x13\xd5\xfaOh\xc1Q\x1f\x06\xcdQe\xcb|Le\xf2\xd9\xb3M\xd3\xd8^\\\x7fQ\x11|''%\x00{|$\x7f\xf6\"\xe8]\xf5\x9cc\x1e\xc7\xe3\x19yO\x8a\x0e\xeb\xa8\xd6\xd5\x96\xe8\x0b?\xc4sOt-e\xbd\x8f\x14\x1fL\xf0\xfc\xd2\xdf\x1c\x88\x17+\xac\xef\xb3L\xc8\xb2a$\x1eI\xc1Q\xfbH\x9e-\xf2\x05\xd74\xca\xfe\xbb\xac\x18\xdaDR\"\xbdx\x04\xa3\xd8\xd2\x01\x98{\xc8\xf2\x0d\xba\x18wv\xc1\x82_#x\x11F\xf0km\xf1\x15\xbd\xf5\\\x133\xa6\xbf\x14-\xbf\xf4\xc7\xf4\x97\x0eL\x7fY\x1b`EI=\x9b6\x0d\xf1\xe5\x0d#\xfc\x90#\xfc\xa8\x8d\xf0/o\x18S\xf6\xbcz\xf8\"Liw\xc1\x82\x1f\xc4z\xfe\xe0\xbf\x9e?8\xd6\xf3\x87\x06\xe5b_\xb6\x96/\xfaI!Z\xc8\x08\xff\xa5\xb4\xb7\x1c\xbd\xa5\xba\x96\x8f_S\xe4\xbelko\xbf\x8a\xe0\x9f\x11\xfc\x12\xc1?\xdaJ\xd3\xe3\xa3\x7f\xa0\xc2\xd4&9\x12\xe2\x10\x1dOb\xe4\xca\xd0\xa3L'6\x1b\xb1\xaf\xcc\xd2\x83\xe2/\xa5q\xe9\x13Y\x15F\x1eR\x8cDr\x83\xd5PN\xf8\x07\xc2\xc7\xadF\x077\x19\x1auN>\xa9\xf4\xf3\x96\xf9\xa3\x80\xe1\xaf\xa0\xcb\xbb\xbb\x93\x86\xb3\xa8q\xef\xa9<\x0c\x86#\xaf\x8e2KG\xea,\xaa\x0c\x18\xff\xf04\xb0 7fm\xf0+\xdeZ\xf0\x95\xd4\xb5\x12\x12\x0cG\xa1_\xbbq\x07r\x08\xa3fR\x883\x0fy@\xd9\x05 \xdb\\\xf3\x93\xea\x8d\xdc\xfc\xc6\x1f\xd5\x1b\xd4\xfc\x86Q\xca9\xac\x84\x9cR\xf5d\x16*\xbfL\xd2\x19~\x8a\xe0|\x04\xfc\xb8O6\x92x6\x92Y\x97\x1d@/\xcc\xc2\xdc\x97OO\x08r74\x8b\xc2\x8d\xe4?7\xb0\xc5\x80\x1e\x06|(W\xd7k\x08)\xf1T\x97\x11\xc9\x9a\x99\x81\x9a\xd9D\xf0\xd2\xca\x91\xf0\x03\xa2\xb2l\xecE\x10\x0b3F\x0c\x0f\x07\x90<\x80\xd8\xeeF\x07r\x1cK\xde\xc6\x90r\xd1\nv \xe6\xb2\x95\xc5\xad\x0e\xd4b\x0b\xbd\x1e\x0b\x96\xc3\xbdQ\x84\x8a\xbb\xe5pw\xc4\xbf\x8c\x80\x84\xa5\xa6$\x86mh+\xe1\xa0%~\xa9K}\xd6zhU\xfb\x936\xab\x8c\x9et~Df\xfc\x17/\x93q\x85\xac\x90\x15+\xe7\x02\x0c\xc7\xc6\x8f\x81\x93\xa5P\x97r\xfe\xf0_X\x05\xfc\xedmx\x04 \x1c:\x1a\x07?u\xa7\xba\xacjOu]\xc1\x01|F\x07F.\xcaKL\x12\xe8L\x86{\x8d\x93\xa8\xfc\xa8}\xdb\x03M\xb2\xfc\x1ax2\xb5;\xb1*\xca\xa4y\x94\x0b_L\x8eR\x11XQ\x83\xe3M\xfd\x0c\xa3\xd5\xbe\x91\xba\xcf\x0c\x9bx\x19\xd0\xb0?\x8f\x17\xd5\xba\xbb\xda\x05m\xd2\x08Q\x0c\x1d\xa06\x10:Ts\x13b\x1d\xd2\xaf\xff\x81!\xa9-\xd0^t\xb4\xeaD\xd0\xeb\x99|\xcd\xf8\xd5\xeb5=\xf7\xf0;N\xd3\x17\xde*\xab\x85\xfbT1\xf0#/9\x1b\xc1\xa1\xb4 \\:\x7f\x95\x14\"\nfB\xc4\xf3_\xeb\xcf_\xc7\x0b\xa1\xbb\xf2\x1a\xce\xc4=\x1ce=\xae\xf9]\x0d\x14O\xdd\xd4\xaa\xe9\xaf\xf9Acf\xdf\x11\x1cwHe\xbe$\xb0%\xf5\xef\x0c-\xcc%Fm\xd9\x18%\xc1\x82j/\xeem\xa0\xa6\x97N\x08o\xa7V#\x06So\xb8\xb6f \xb8y\xf9f\x10\x868\xa1\x00=\x0f\xf4\xbb\x9bN\x10\xec\x93\xf4\xa7f[f\xc7Q\xd2'\x9f\x97qZ\xa0J\xde\xf4\x02\xd3^\xd8Ro\x07\xcc\x93#?\xf7Z\xf2\xee\xe5\x8d\x03\x11M\xa4\xd9\xb5+\x87\x07\xed&+o\xca\xc7\xda\xcd\xe6\xe7''\xb3\xb8\x98\xb5\x1a\xa8n\x97\xaf\xd4\x1e\xac\xd7B\x7f\xcco.\xe5\xb0\nu\xa3\x907\xc6\xea\xc6\x18=\xa5;\x90\xb2\xe9\xc1!\x0d\xd1\xf8\xdb \x1b\xe5Z\x81\x9e}\xe6\xb6\xf9H\\\xac\x06J\x88})#\x04\x1d\xe6\x8f>9'\xf9*\xe8T\xa8\xa8K\xb1B9\xda\x00\x83P\xec\x82Nv\"\xe3@\x98\x91 CNQ8/\x06\x94\xc3\x15o\xeeb\\\xa1\xed(\x00\xf4\xdf\x97\xfdq.\xc2c\x8f\xa8q\xda\x16\xa8\xe5gc\xee\xbc\xf1\xaaZ@\x0b\xcd\xd1\xd5\xbe\x88m\xda\x0d\xdbB\x90\xb4 \x0exg\x0d\x0f\xf9\xe6\xa5xK\xc7\x12\x10\xa9\x05\x81\x01$f\x08\x1b\xa17\x15\xc10\xc6/\x16 \xb6\x8frE*\xd1\xc7\x14<\xa8_\x1c\x9e\x9c\x13\xdd\xc2\xd8\xb4\x00\x9d\xa43\xfe{\x86<\x01\xe9\x9f\x11\xf4\x8a\\\x85\xfc \xbf\xab\xddB\x1cQ\x185\x95\x1ek\x06\x8a \x885V\xf1q\xaa\x11\x13\xbe\xa8\x0b/\xba7w\xd3\xbd-T4\xea\xf1bsM\x02\xe2\x1c\xbbj\xc0\x8c\x8fB\x9f\xa3\xbc\x1e\x1a\xfa\xa4\x86/\xcb\x1e\xdc\x86\xdd\xd2\x9fE\xfa\xbd\x84\x91zC}\xe8:\xd8\xfeY\x0e\xed\x9ff\xc4\xf9\xa7\xb4\x19tl5\x1b\xb4\xce:\xa0U\x8b\x8c\x11*\x02O_\xa1\x15q9\x0b\x99\x97b\xd5X\n\xad\x0d\xf3j\x9c\x91@\xbaZE\xa0\xe2\xfb\nF\x16\x10\xc3\xfb\x98\x9e\x118]\xc1n/\x8cpo\xe19\xb4\x1b\xd5W \x0d5\xe8[z\x1bv\xc3\x08i\xba\xf6\x02\xc5e\x94K\x18\x9f\x16\xe8z\xc8\xe0\xa1\xe4\xd8\xf8\xdb;T\x99pN\n\x16\xe75\xdd&\xa1\x13M\xb5y\x82C\xc3\xc1\xeaX\xa3\xa3\x07\xfe=&I\x1a\x04\x0cv8\x01\xbe\x0d\x94\x8bV!\x97\xcd7\xc3\x9d_JX\xfeb\xc6\x9d_\xbe\x0cwN\xcd\xbaD\x81/\x9aJ\xe9\xf1i\xc1\xf2x\xcc\x9a\x96 K\xb3'\xc4\xe5fz\xe1|z$\x9f\xea\x0f53\xd6\xf0\x1f#\x15`\x1a\x10\x12\xc1K\x8e\x19z\xdc\xc3\x19\xe9\x0c\x04\x82\x86\x15\x86\x93G\x94\x0f4M\xfb\xf0\x932g\x84\xa3\xb6gc\xa3\xcf\x8dL25\x7fY\xadG\xe9![S-U\x1e\xb2\x03\xc8\x85\x8b\xac\x15W\xa4\x8a\x88\x04t\xc80\xecn\x07=\xba\xb2\x11\n\x7f\xbc\xa3jgf\x1c\x15\xadT;\xf3\x9a\xac\x9fu\xc84Q\xe3\x14Z\x937\xbe\x95\x9956\x9bikJ \xaa7\xbd\\M\xa8/\xf4\xc3CbD\xf9Z\xdf\xb3\xb8p&\x02\x80\xa6\xa5S4\xdd\x08\x93o\xa9\x02\x1a\xbd|\xe9\xc6\x12\x9d\x8a\x9dU\x99\xaa\"\xc9V\xeb;-\x11;-\xe1;-{\x00\x89;\x16:\xe6\xdf\xe3bf\xb0\x03 \x1c@b\xd1\xf35vf<\x8a n\xee\xc6\xc4\xa8\xb4\xb5\n\xa3\x89\x17\xc8\xae\xb3=%\xb8\xac\xfbS\x03\xa1uw\xe6\x9d{8\xb9\x89=\xbc\xd9*(\xc8\xa1\xa65\xfb\xf7\xed\xf9\x98\xef\xf9\xd8o\x8fk\x8b8\x9cU\x87\x1c\x95\x87\x1c5\xee\x8b\xd2[\xc5c\xad\x91\xf7\x0dk\xbb\xb2&4iB\x86\x85{V\xd8\xf2SP7\xcb\x86v\x94\xb1\xe8$\x9e\x04\xd4\"\x83\x96\xbb8{\x00[\x01F\x9cKyT\x08\xa4\x18\x8b\xb7'\xb4\x10A&d\xe2\x08\xf2\xedm\xb9\xab\x1e\xd8\xa5\x91\xbc s#L+}\xf5\x8d\x025\xcb7\x86\xaaE\x9d\xf3D\xd7\x12\x8b\xed\xf2\xbd\xa5Y\xcb\nl\xbe\xd5\x98\xb6\x0e\x1dZ\x0e\\$\xe1\x8c\x8e{@,\x8dX(\xaf\x8d\x10\xe4\x12\xe5\xf3\xff\x02\x94\xaf\x0e\x15\xfd\x14)C\x08D\xca\xa2\xb6\x83\x80~\xa0\x94\xc6\xa8\x07\x1e\xcc[6LF\x11'T\xadC\xc226\xbeK\xa8\xa6%\x12\xbb\xe4A\x17\xdd\xa4.m\x12\x9a\xd8\x86\xc9H\x84C\x96c\x8b\xeb\x03;\xcdI\xfc\xa9\xbd\xa06lk\x1d[\xc6\xe5\xfd\x8f\xed\xbe\xc6\xc2Z \x9ai\xb1\x8d/\xdf\x08\xab\x8a+\x01\x8f\xaac\xb5Ka\xd8\xbdQA\xc1\x0d\x11\xa5\x02\x9eC\xb1(\x82\xf2\xe4\x1e6\xbe\xe6\xb4.+\xf67\x1f\xfa3\xbcsI\x03\xe6\xe4\xfa.v\x0dA\x1b\x0e\xa1\xf7\x9e,H\xcc`8\xea\xc1A\xf5\x0b\xbd \x98\xa6\x16\xda\x86^u\x0f\xbf\xe5wX2'\x05\xb4\x9d\x8e\xe7\xd7g\xcaML\xb8\x18\x82\x81\x01\xaf\xf5\x93\xd0q\xba\x9c\x10o.|Ft\xc5W;*\xab\xd1<\xa6,\xf0\x99Hm\xffpPYQ^\x8b\xd9\x13S\x85\x03\xa5\xad\xab\x8d\xec\x83\xb0\x13\xc3\x8e\x08\xa6k2\n\xcd\x91\xe6\xe4\x9c\xe4\xc5&n\xda\x1dp\x9d\x90\xcb\xb7\xd3\xeb\x83\x15\x0eQc\xb8\xb3\xe7\xec&\x8d\x0b\xf6\xfc\x06\xba\xaa0\xb4\xb3\xcb\xeb\x0bS*UT\xb9\xc4\x98+\xcaJ\xb0\xca\x03\xa36\\\xda<\xd1\xa8S A\xbd\xe6\xb2\xb9\x94\xb3\x11\xab\xba\x19\xb1Vl&<\x04\xaa(N\xc5\x02Q \x89\xd0\x98\xf0F]7\"~xP\xd8\x1a4\xa5\x91\xd2\x13\x0fI]\xf5\x0e\x87m\xcc\xd4\xa6z\xde\xb6\xf7s\xfa\xbe\x92\xf4}u\xc3\xf4\x1dU\xc6\x8a\xbc\x8b\x1f\x1au\x17\xda\xddm\xe8\xf5\xfb\xfd\xea.\xa1\x13\xd8\x86@\x08\x15\xeaE\xb2\xe0\xed\xc1\xe9\xaa\xf69Y\xf0\x86{!\x9e\x07\xed\x93`u\xb3'\x81\x1an\xa5\x8b\x84\xaf\xebCi\x9d\x11\xabk\x9d\x11\x8as\x08\x08\xec\xe8}\x87p[\xeb\xcf\xba?0@zW\x18\xe452!n\xf05B\x9d\xf84\xcd\x0c\xb6\x87\xc6\x90\xbd\xcf\x9d\xc6\xa1Rv\xaa\x1d.\xe8R \x02\xb2\xcb\xa7\x91\xb0\x15\xe0\x19S\xdd\x0d\xe1\xe1\xa0\xf4-]\x91`7\x82\xddP\x1eO+\x89\xdcg\x84\x05\xbaU@\x99\x0c\xf8}f\xb8\x8f k\x9f]\xab\xeb\x1c6\xe7eTemy,\xf6-\xf8\xbf:\x92\x0c\x06|.vi@d\x17p\xaf3\x94\xf6D\xb5\xd0\xb5\xf3 4\x13mp\x89\x03\xed\xc3j\xf5\x85\xe7#\x0eGB\xd4@sV7s\x16V\xd8\x8dz\xc3J$\xe0\x90\x93\xf2`k\x03S\xf8\x1a\xf3\xe0iw\xeb*G\xeaT9\xd6%\xc4\x08\x12\xa3\x06\xd1\xbcl\x19l\x8b\x11\xed\xf0\x01\xe4\xfe\x0b\xd4\x92\xd7\x8c\x00\xdc\xfc\x00\xae\x80g\x1co\x03\xa0\x969\xf9\x02\xd9\x0c\xce\x9b8\xec\x95 \x9d9\xd5!\x0d\xe8\xf3E\x7f\x84\x16\xc9\xbf\x98\x03P\xca\x17\x94\xd7c\x1f\x91kuC\x0c\xc1\x8a4\x16F\xf8}\xc8\x1fe\xb8\x1d\x9aU\xc5\x13\xfegy_\x92,\xf9 \x9eq\xe7ed\x91\x81\x8f8%*\x9d\xd3 \x89\xe0\x94\xe0\x9f\x17\xd5\x9fG\xea\xcfSRF\xf4\x887\xb5@\x1e\xf1\xbe\x0c\xf29jH0|\xa1/\x89-\xbb\x04\x9el\xc9|\x89 &v\xf6\xab\xd3\x8e\xdf\x0b\xaa$,\x11\xec\x87*\x7f\x06\xbe~\xe0\xbfk\xee\xdf\xbbw\xe7\x1e\xdc\xe2\xe7\xd9\x9a\x13s\xfb\xc6)\xdfd\xe2M;\x92\xe3^\xd9F\xb7\xbbG\x8f\x1e\xc1\xde\xfdP\xde\xe1O\x02V\xde|\xf8\x10\xf6\xee\x8b\xdc3!\xac\x9b\xce\xf8\xb6P\xa6\xe3._Il\x1en\xc1\xde\xee7w\xbe\xb9\xbb\xf7\xed\xfe]X\xc3\x9d\xfd\xfd\xbd\xfd\xfd{w\xbf\xe1O\xfc\x9c2\x9fZ:\xd2)&\xac\xd7\x8e\xe0\xeb\x92\x86Z4\xd5\xdd>\x8f\xaa\xa3\xb6\x07\xa3\xbb\xe3\xae\x9e\xb7\x9a#4Px\xc5\x18\xa8qY\xe6P\xa5=\x18\xd8}\xce\x12\xf4)\xdc\x92C\x15\x0e;\xc2\xa7\xc21P\xd0\xf0t\x17\xd66\xe7(q\xec\x8d\xe0\xbd\x80\xf5\x1b\x993\x83`:\x1cxF0\xf1\x19>\xe7T\x1c\x1b\xe7K}\x9d,\x0bp :\xdb\x08\xc7gq1{\x9aM\x88\x06\x19u\xcb\xa4\\\xc4\x96\xaa\x90-\x1d\xa4\x9e \xb43\x9e\x1f\x9a\xbe\xaa\x08\xbfw\xc2c\x8d\x84a\x97\x1a3\xa9\x9c\x0b\xcb\xaf\xc9\xf09\x19y}\xb9\xf5\xd6:n\xb05\xceOS\xb4q?/\x8e\xaaT\xd8\xe8\x0egz\xe25\x16[g\xdd\xe0\xd5\xbf\x96\xa3\xa0\xd9\x84|X-\xf8\x96\xdb\x0d\xa1\xb8H\xd8x\x06Au\xbf\xab)~\x8d\xe3\x82\xc0\xdeA\xe7{\xa0\xd1\xfe\xfe\x92&\x9f\x97\xe4\xf93\xfb\x1c\xd5\x85\xcd\x7f\xb7a\xf3\x93l\x8c\x01\xc3G)\xe1\xff\x88\xc96n\x96cp6mVj\x83\xdcR\xdaj\x19\xdf3\x7f\xcd\x97k{\xfb5\x89\xf4\xa3\xef\x16\xbc\x16{\xff5\xee}G\x88\xc8\x07\x12r\xac/\xa4,z=G\xd7\x06\n=V6\xd5\x01\xfe@\x97\xe7\xa6\xc7`\xefMFw\xc8%#\xb4H\xaa@\xc2\x02\xe2\x9c`\x92\xe38M\xb3\x0b2\x81\xb8\x80OdU\xf4\x9b\x89\xb3\x9b\xdd\xf3\x0de-n\xf1\xdc\x98\xc3X\xbf|\xd2\x11\xab\xab\xbb*\x86~iI\x8c;\xde\x94|\xbay\xf1\x01\xcc~\xb1\xea\xc2\x15j\xac\xc3\xa6$C\xb2\xc9Z$\x89\xc6\xc1\x9b>\x08\xad\x0d\xb9\xd5m\xfa\xa5\xcb\xda\xfe=\xf7\xe3\xc5\"]I6\xde\x12\xd1\xaf_W\x91\x83L\xf23\xb0\x03\xb2\xddD\xb0\xe6\x94^\x91\xbc\x16\xde\x7f\xa4\x08!\x96AA\x18\xc4@\xf9>\xa8 \xa7\xc6\x08\x19\x95{\xc2\x89\xfa\xfc*\xe7`\x9f\xfd\x06\xf4\xc4y\xeaot\xda+\xe5kI\xd68\xc3\xa0e\xb41\xe6\x03h@\xeb'4]\xf1&\x85\xd6\x14\xd5\xa4c\xe1\xd4{J\x80s\x0fd\xd2\xf7\xf4\"\xfdd\xe1\xedKu\x0c\x13\x8c\x92f\xa1 \xf5b\x16\xfc\x85;{\xf0\xb5HU\xd8\x1f\xcf\xe2\x9c3/\x8fY@Q\x98\xb1\x8aG\xc7\xa4\xed#\xad\xff\xe2\xbd?&U\xc6\x84\xa48*ic\x9bj\xbc\xf5\xdaa,_9\xf0V\xa9;\x8d4\xf3\xcf\xab\x08z\x7f\xefE\x82]\xb4\xea\x04\xc6\xb18\xe2]{\\\xf6cs\xf57\xa0Y\xd8\x16\x97\xdf\x91\x08>XE\xe6\x9fI\xfc\xe9u\xdc\xd02\n\x06/xGd\xe6\x02\xf9\x92\xa1qqF\xb6\xa1\xfc\x1c;<9I\xe6\xf3%\x92p\x8em''\x8d\x14\xed\x1d)\"\x03lE\xfc\x0e\x9e\x93&\xd2\xf3\xfe\x7f\xe7o\xec\xdd7$\xa6\xe4\x0f\xf6\xef\x192\x1f\xbf\xb7\x0cY\xb2\xf86)\xfa\x95e\x03\x9c\x91@\xc4f\xa1tV\xb9\xcd/H>\xcd\xf2\xb9P\x7f\xc7\xa2\x8d\x8b\x84\xcd \xa6\x90\xd0iB\x13F\xa0H\xfe \xbe;\xf0\xa3[\x8cw&\x0d\xfbE$\x0d\xfb\x8cMp\xfeb\x1c\x94\xf9\xd3\xf9\xb3>\x1f\xd9\xeb%\x8byO\x85\x16\xd6\xd2\xa5\xab\xce\xad\xe9\xed^\x91\x80*-?\xedO\xb3\xfc(\x1e\xcfj\xf1V\xc6@\x06u)R\x8a\xdc\x15m\xa9\x9b\xd4e\x8a\x82\xf6\x03\xe7g\xef\\ \x7f\x90\x8el\xe6\x1fI\x04'|\x9e\x1f\x89G2\x9d\xd2| B\x8a\xcb\x038r\xa9\x88\\\x8bd%!\x1d\x15\x86`{\x00\xfb]\xa2\x14\xda\x85\xe1Q\x95@\xc6p,\xbfN\x8a\"\xa1g\x82 \xc3^?\x91\x95\xc8f\xc1\x86\xd4\x94fR]\x82y\xe6/E\xfcU\xde\x97-\xdc\xbds\x9d\x11\xfc\xd76_\n\x85\xa7\x96\x01\xeau\xbc\xb0\xa6<\xfb\xf8\x85\x96\xc5\x93<\xcb*\x959\xff\x81\xa2s\x19K#\xf26\x85&\x93b\xad\xebb\xa3\xae\xff\xa1'\x85r\xcf\xa9 \xec9\xdd\xa0i\x9c\xc8r1\x89\x19y\x8e/\xaf\x0c\xd5\x0cm\xdfn\xba\xb29\x99g\xe7\xa4S\xd26\xccz\xe5nxBR\xc2'\xe0\xdbtk\xd6\xbeS^m:e\xd1IsA\xdc\x89\xa3\x85\x08Y\x92\x17\xa5G;\x94\xae \xa12\xce\x94\x13\x18\x92\x91l\xd4c,m\xf4\xb0\x8c\x06\x83]\xd1)R\xc6b\n\x14w\xf8\xc8\x96$\xda'\x91\xc4\xb9\x8c\x03\x15\xa6\x8d\x95]'\x1aw\xfa\xe2qr\x17K?<;Q<\x97)c\x12YM\xcbb\xd6RW\x01\x03\xc8\x82\xa5\x83\x06\xca\xe5*p\x02K\xe9\xac\xdb\x8e!\x03\xab\xd4qF\x82\x04cH\xd0p\xc3\xf7n\x04\xbd\x84\x9e\xc7i2\xe1\x94\xf8]\xccf69\x88\xcf&\x85\x01\xc4.\x0fT\xfe\xd2XNy\xc5\xa7\x8c\xd4*\xe5\xfb\xc9\xfe\x01?\x07I0\xae\x16\xd0\xa9(\x9d\xe2\xec\xc7r\xf6\xe2\xd7\x8a\xff\x92\xbb=H9\xbe\x06I\xc5\xcb\xb0\x10\xcf\x8e4\x82\xa9\x81\x07\x90{\x9eR\xd4\xe9Z\"\x1ee\xdfy\xd9\x9b\xe4\x9aZu\xd0\x1a;`\x9c\x92\xd8Y\x94Hk\xbc\xed\x16\xc3\x84?\x84Ym\xc0:\xea\x8d\xb3\xee\xf6k2P\xe7\x04J\x8b,_\xa9\xb8x-t\x11&\x06@\x8e\x86 b\xb1\xfeE\\<\x16\xf44@\x1f\xb6\xfe\xc9 \xa1\xc52'o9\xbd\x0e\xea\xc4[\xb1R\xce\x81\x97\xbd{\xee\xc1\xd6\xf9P?7\xf4\xd1pQ\xec\xd2\x0d\xb6\xb8x\xae41\x9b\xf5\xaf\xf7\xd3\xb12%\xc86\xebA\x9e[\xce\xb67spR\x1a\x11r\x01/\xfde\x9e\x8d\xbc\xd0\xbe\xd4\x89Y;\xdcKo\x1b\x94\x03\xdb\x99E:\x88\x08\xba3\x93\x80a\x82\x19\x86\x19eL6\xf7H\x94}\xea\x80\x80\xb6\xda\x9d{K\xed\x98\x8a\xc11`+?\xd2\xfeI*\xd6Fgk\xa2*\xaf\x03\xb24\xc8\xe15\x1a\xd2r?\xe8\x0c\xce\x9edp\x0c\xd3I\n.\xb9\x0f\xe0\xb3\xc1s\xe8{\x12\x01\xb2W\x8dd\xc0\xaf\x1f\xbf\xb3TO{\xc2\xdf\xd6\x81dS\x0f\xfedO\xfc\x81\xc3oOH&*j\x19\x1f\xac5>\x9c @,\x9d\x9c&l\x8e\xe0PN\xb14\x13.\xc8\xd4\xab\xcf\x9f\xaf\xd3\xe78[Rv\xed._\\\xa7\xcbOd\xf5\xa3`\x8aY\x0b\xba~\xdd\xfezs\xdd\xae\xbc;}\xd9\xdd\xe9 \x13\xa5FK\xa7\xe6*\xc2\x86V\xbe\xcd\xf1\xf8\x93H\xd3\xa9(\xcaW$\x90\xbf\xfc\xb4\xa1?t\xa6x\x14\x15\x90D\xc6\xaaVRJ[\xb3_u6k\xa6m\x1ce\xac\xe5o\xd1\xab\xf8\xc0\xe6\x8eyr\xb2\xc8\xc9\xb9\xc9\x14\xec\x97\x85\xe5\x9f\xbeIQ\xeb\xc5_\x9f8\xf2\xf6fJ\xaa#\x11d\xa5H\xc7\xf0\x87F\xe9\xa8\xb8!\xa5\xbb\\\xfc\xaa\x13\xbd\xcck\n\xbf8\x93R\x7f\x8fz\xed\xe0{>\xa0\x7f\x92`\xd73\xff\xdd?\x9c\xb8z.k\x92\x9b\x8d\x9c\n\x15-\xab\xadt8\x17\xc1\xa9\xc5\x9d\x12d~\xd8\x8b\xe0\xc4\xa1\xbc\xc1\x04pL\xf5\x86\x91/\n\xbc\x11h\xcaU\xb1\xb8I\x04q\x18\xc1\x96T}T~U\xe6\x0eD\x1e\\\x19~\x18$\xb2P\xd7!\xe7\x02\xa4\xf6`g\x0fK~\x1d4\xab\xc9\xf1\xeb\xcae\n\x17zvl\xc6g\x14{U\xf9\xc6\x9fp\x9bW\x93\x1cZ\xa1'\x8a\x8f\x19\x1f\x9b\x82@m\xc8C\xea*\x8b\xb2>c\x16\x95\xd4\x07Q\x97\xb4\xd5\x14\xa4\xa5\xa3@O\xb8\\p\x08\x19\xee6\x93\xbe\xc2\x82\x8f\xd2\xe9\xa6\xd4/\x89\x05\x8d`\xe9\xe4U\xb8D%$\xb6\xc0\xf8\xe9\x01GD\xb9\x9e\x84\xf3#G\xc12\x8c\xe0(\x881\xeb\xc3\x05?'D\x0e\xd7!\xff\xcc7\x9d;cn\x1e\xaa\x95\xa8\xf4W\xe1\xf6\xd9\xba\xff\xc2\xcf\x13\x976\x80c\xea[l\xcc\xf2\x08\x1b\x0c\xf8\x02h\xac\xf3\x8br\xa6\xb2\xbaP\x04\x99\xc9\x96\x83\xbbW$\xde\x0e\xaa$_U\xcb\x07\xda\xdf\x8f\x1e=\xe2\xf4\xe3\x16\x9c\x99\xf7\xf9\xb2\xde\x08\xba\xe9k\x1fY),\x1f\xef\x8f8^\xaci\x1b\xc3Z\xfc\xb1\xc4qI\xbd\xea\xb0\x82\nl\xc3\xb9\x84\xccH\xe8\x15\x07\xf5\xd5\xcdB\xfe\xe5C\xf1\x1d\xe1+\x0d\x070L\" \xbeK\x9e3\x17\xbd\xac\x12k`\xf5\x82Z\x86\x02Z\x9a\xe8:\x12\xdfph\xd1a2\xb2\xd3\xcc\x02M\xb46\xeds\x1c,\xd1-:\xe0\xaf\x15\xf5\x8c\xc6>~ \xd3V4\xa1\xba\xae\xc2\x90\x1f_\x8be1\x0b\x0c\x9eEV\xf2\x12+\xa0e~@\xce\x9c@.w=zmUj\x95[\xb7\x00\xb3\xb0\xd6\xd4+\"'c\x99\xd8Wl\x7f?\xce\x12\xc1S\x82\xc9h\x87\xbc\xa3QX\xe3\xc8\x98\x0fG\xa6.\xe5l\xc0\x86\xb6\x04x\xea\xca\x10\xab%\xf9'5\x115FEKl\xad\xfe\x01F.J]\n\xd9\xcd\xb4\x99wU8\x8d\xf2|\n\x0b\x90\xd1a\x9a\x82W\xc9\x99\xd6\x8e\xb9d\xb7\xe0\xb8\x85\x14\xa9\xe8\xb2\xf9\x1f\"\x7f\x9dJ\xdb\xff\x0e\xec\xc1!L\xfa\x8bLT\x82\x98\x0cSN\x8dZ7\x86|\xe4\x9c\x1f\x9f\x08\x06S\xfc\x0e#\xec9hh\xff&\x95)\\ \xcc\x11L\xbaX\xd2\xab\x08~\xbc693F\x97!vY6+\n\xf5\\\\ \x82z\xfdp\x11\xf9IP\xf6\xb1hF\x12EC\x84\xa6\xd7J\xd8x\xc3\\\xce\xb9%\xb8\xbb24\x1b\x95\xb3\xc3%\x13\x8f03\xf2H\xc4q \x19\x89\x99\xd8\x89&x\xaeM\x17k\x99\xa1U\x02\xe8\xa7$\xc8m\xa0\xd2\x04D&Y\x1e\x8a@b\x0e\xa9\xb2P\xf0]\x9a\x9f\xa7u\x18\x9a_\x1acL\xe5\xd6\x00\x82\x14n\x81 \xb5\x91\xae!\xa1\xce\x1a\xca\x1c3AUtz\xc9D\x93\x08|s\xe7\x0b5B\\.\xf3;|\xef\x8d\xe1\x10\x16\xc3\xe9\x08\xdc!\xeb3\xa1(\x9b\x08\x0b\x8cX\xe8\xfaZ\x99g'\xd4\x04\x13\x8f\x83B\xc0\x01E\x97\x85F\xde\xc7N\xf2\xeep\xf3\xaaU\xfc\x92\x0c\x01\xdf\xcf\xa2\xde\xcc<\x8c\x103v\x1fHV\x9f>\x80%\xa6\xf9\xe1\xb81\x80\xbd\x10\xe2\xe1r\x84hp\x0b5\x0bl\x98lo\x8f\x1c5\xeb@\x13J\x87\xf9H\xa8\xb8\x84/|\x80 \x05\xb7\xb1\xda\x98\x81\x90\xf0\xc7\x8b\x08\xd2\x08\x96\x11\xcc,\x90\x94\xe79\xff\xbf\x08S/\xa1\xc4\xe5?\x16,\x86{\xf0/\x98j\x9c\x8b\xba\xe3h\x0f?\xde357\xab\xda\x99\x99\x11\xf1tSr\x7f\"\xd1m\x86\x14\xfc\x00R\xf8\x17\x92\xfd\x14\xd6`\xc1\xd0\x0b\xed\x93\x82\x05\x8b\x08\xa6\x11\xcc\"8\x0d\x9b\x01\xf8\x1d\xe2\xc7yY\xed\xa3\xf2\x80\xb0\x1f\xb5B\xbdZ\xa6\xbf\xc9\xb5\x08Z!\xc5P\x80O\xb9\xa7\x1eb\x99=Q\xf3\xacslz\x97\x88\xf6\xf5\x0e\xdd*\x8d\xa4\xfa\xcc1\x06\xb7\xa2#\xe9\x92\x16\xf0%\xb5L5\x00\xa8\xbbn\x19\xa2\x81_0\x80\xafH\x90X\xed\xe7\xe0\x14\x17\xc6\x19e \xdd\xa8\xf8C\xbb\x7f\xedW_\xf8\xccv\xecj\xa8\xb6\xa7mct\xe6J\xb5\xe6Im\x10\x90:0\xf9*\xa7|\x06s\xb8\x0dw\xdb-\x8f\xd5\xb3\xfd\xf6\xb3i\xf9\x9d\xcds\x7fa\xf1\x188\x97\xb1CG\xc6\x80a\xe4\x9b\xbb\xf3XZ\xe4\xea \xe6\xc9+\xa9\x9d\x99/\xa4\x18:\xec\xaa\xe7D\xdd5\x1e\xc4`r\xa9\x03\n^\x89\xe3:\x87G\"kt\x0e\x0fa\x0e\x87p\x81\x99\x07\xf2\x08U\x0c\x18g\x8a\x85 X@\xfb,\x13\xf2w\x88ei\xd9\xc6n1\xe8'r\x9c\xfc!z6\xa4\x01\xe9\xd2\xf4\x96\x9a\xda\x0e\x7f\x13\x93\x17\x89\x9f\xa7\xc5\xc4\xed0\xa2\xe5\x01\x99\xb1\x8e< \x0b\x16\xc1\x05\xe1l2\xf3\xc8\x03\xa2 \x1f\x81=\xc6r\xc1\xb4#\xeeKsZ\xbcJ\n\x06\xc3^\x04\xbdQ;\xa9E\xad'\xcf\xa4\x16\x89\xaa\x15_%\xc5\x0f\xcb\xac\xe4\xa4\x9e\x95\xdcq\x9ar\x01\xb6d-1I3\x8e<\xcb\x93\xb3\xc4\xe6\xd9\xa6d.\xde\x13\xed\x8b2\xa1\x04n\xc1\x99!\x14\xd2\n '\x0c6\xcb\xae\xe1k\xbf@\x901\x04\x99d\xabjU\xf3\x1dE\xa00\xb1\x7f\xe5\xc4\xc6\xe0\xa1\x96\x0dvs\x975\xc0c\xe1!\xec\xc2!|\x92\x19\x0cq\x9b\xed\xca\x08SqsW\xa8\x1f\xf7\xc43f\x8c.\x03\xb0'\xd8c\xe8\xfb\xa4\x16\xd3\xfcNe\xcf9aq\x92\xba\x19*\xe5\xdeo})q\x06\n \x14\xdfb\x94\xc08^\xc4\xe3\x84\xad\x84A|\x00\x97Xo\xbb\x195 \xe4A\x14\xb12\xf1R\xd6x\x89\xf4ORrN\xd2\xea]\xfb\"n%~\xe1\x06\x89\x08\x9b\xa8BL\xcbuV^\xf6b\x14\x1c^\x9b\xb8\xdc;7\xd3\x05\x82E\xac\x14~\xad \xa4\xcf13z\x17^\xb9\xe2,k\xdbj\xb3\xf4-H \xcaJ\x1c\x9aU\x03 \xcb,\x992T\\h2\xaf\xcah\xaf^R\xba\x0d\xf1p\x91&c\xe4\xdb\xf6lQ\xbb\xb5\xc1&\xb4 \xf9&d\xa0\xd1\xcbn'8\xfe\x0d\xc9$tjZ\xfeTK\xab'\x9b\xc0\x15\xe6\xf8\xd3\xc8>!%%\x81j\xd7NE\xc1\x19)'(\x16\xcbb\xd6\x05 %\xbcU\x11\xfa\x96]\xae\xc1\xc9\xca \xe1\x1b\x16\xbai%\xe0\x9f\x90\x11\x91dQ\xd9R-;\xbe\xe6\x16\xbc\x8b2\xbb\x96\x16\x11%w*\xe8*l\xe3\x1e\x1e\xe6^%\xd9\xea`\xcb|\xf3:|R\x87\xecn\x04;{\xeeV\x97\x14wWW\xcb\xad\xf5\xb8\x16\xb0\xad\xa1a\x9f\xf0\xc8\xd9\xf1\x05\xb3#\xfbd\x99HnH7\x07\xb1\x17(\x9a@\xee\x00\xf0&\x89W\x1e\xfb'^i\xf7\xe1\x95\x90\xa3\xd9\x91o\xe2\x95vw\x1b\xe4\x19y\xec\x97g\xc4\xdc\x87\xd7\xb4\xce\xaf\x93\xd7\xe3qg\x9e\x91&\x9fx,\x08\xad\xd7\x89\xa6o\xc2v\x11\x8dz\xcb\xbe\xf5\x97\xce\xbf\xa8\xee_9\"Y\xe2\xaf\xac\xfa\xe7\x1e\xddfI\x19\xca\xedi\x17gOJ\xe4\xb3\xaf\xcd\x06\x05a0\x14\xb1\xabB.\x9e\xa8\xa7\xec\xdfW\x04\x86b\xd1\xd6\x8d)\xd0F\xd9)\x9aur\xa5\xfe\xd8 _\xbc\x02\xa1s@\xa1\x04\xc1\xa2\xd7w\xa6\xd7\xad\xec\xdc\x98\xc8_\x92d\xe2\x82\x05:\x9b\x135\xb8\x9c\x1a\x87\xa3s7\x91\xc6\xdcl\x94\x90\xc2\xb4\\I\x81\x12\xf6\x00&\xac\xad\xc1\x9a\xb1v\xe2\x89W\xcf\x8f?X2O\x9c\xa3\x05]\x83\x9cM\x7f5gV<\xc0\xb1\xa3h\xac%-\xa8f\xd2\x8cn\xd3\x7f\x9d\xb3\xe1\x8c\xa9`\x90sV\x05\x83\x9c\xb32\x18\xe4\x9c\x95\x89\"\x9f\xc8\x9c\x91\xda\xbbx\xbf|[\xbd\xa5~\xe1\x8b\xa5\xfd\xed\x89\xb2\xc5i\xb7\xd5\x17\xea\x17>\xaaR{=)\xf3|U\x0f\xcadOOj\xd9\x9f\xf0\x85f\xe2\xa0'\x0d\x89\x19_\xd2\x93\xf4<\xd1r\xf6\xc8\x87z\x0e\x9d'\xb5\xa4:\xa2\x0b=\x03\xce\x13=#N\x04\xf3\xb6\x08\xf4\x84L\xb3\xdcd}\xb4iZh\xe9\xd0\x84\xde\xcc\x0c#\xdb\xca\x8d\x81\xeb\\\x86^hL\x97Y\xbb\x88\xfaC\xe1\x13e\x0e\xad\x15\x0e\x80\x8f\\\xadK=\xe1p\xc4O2s7\x99\xf4\xbb\x10\xaaHs/LT\xbd\xb0S\xf2\x18\xf4Q\x0c]\x06,,R\x1fs\xba\x15\xd7\xc0\x8c\xb0\x85\x1d\xd4q\x86!\x8e\x06\xdfJj\xa0jSe\xe3\x80\x85\x95,\xf3\x80\xf2\x12\x06p\\\xe5\xce2\xcf\x7f+1\xabTj\x8e\x13\xbb\x0f\xa0\x10.\xa6\x05\xfaIJX\x14\xa3R\xfc\xb2\x12\xe4\x0c\xddD\x96%\xf48\x8d\x0f#X6)\x98\x01G\x1fO\x19i\x1d\xef\x9d(\x1a\xd4q\x14\x83\x8c\xbf\x00S\xa5\xf5\x13\x85\xfa\x0e\x84\xcd\xdc\x08k\xee\xc4\x0b\x07\x93:\x0e\xda,J\x88\x839&\xcb\xe4\xd8\xa5\x83\xd1\x80\x82\xf8Rf\x86\x0c\x1a\xbf6DN\xb5Y\x9c('\x9b\x8ceoRY\x91\xa1\x92/\x92~mq9M\xceD\x85\x11\xc4udi\x1fog,\x82\x15\x8b8\xd3\xe0J\xa3~b?\xad*^]\x1d\xe2F\x08KEay\xb2\x1b_\xc2\x04-,\xc8\x1dQ3Ryf\x87O-\x91\x88d\x1cv\xc3\xc6\xc4\xa0\x16\xf7\xcc\xe7\xb6\x8c\xc0jc\xad\xe9q\x96\xb5rV\x16O\x13u)b\x12K\xff\xa5C\x85`\xe2x?PQ\xee\xf8\xd3\xce\xa3\x82\xf4K\x89e\xe5\xc3]\xf4\x8c\xdd\x81\xd8\xfd \xaa\x18\xf9k\x16\xbe\x11_y\x04s\xc4\x1d\xfe\xf2\xdca\x0f\x95@\xe8\xe4\xe1\xd5\x95\xa0\xe3,\x9fvZ\xee\x87SG\xd1\x11\xd0\xd4\x12X\xedq'\x85\x03N5\xdd\x9f\xc8\x96\xd1\xb3k9$\xe6\\)`\xdcvx\x97/a\xd1t\xcb\xcfPs\xdc\xb1\xac\xc2\xa9\xd5\x7f\x01S$/\xf5\x05L\xe0\xd1#\xc8\xdc\xdf\x8d1\x00f\x9b\x1f\xeb\xea\x03\xc72\x8d\xcb\x05\x1d\xdf\xf0\x82\xe2\xb9\xf6\xc0\xea`\xa1_|\xed\x8d\x19]L\x97Z\xf4\xa5M\xe8k^\x89,\xb2\xc7E\x9d.\x85|\xf3ZJUh\xe7\xcbv;\xbe\xba\xf80\xd2\x86/a\x17\x82\x83.\xf5#\x92\x8f\xe1\x00\xd2.$\x079\xf2X\xb8\xa2\x17\x98y?\x13\x87R\xc2Q\x83\xf2S;\x0b\xedn \xe0\x9c\x92co ]l=\xf6K(qaL\xf6c;D\x96\xad\xec\\\xe7\x0e\x8d\xc2\xb2T\x93\xc3\x0e\x17\x92\x96\x9a\xaa\\\xfc\xd4T\xe5\x0co(=9\xc5_U\xd6\xa3e\xa9$\xcf\xf0\x87&5&\xe2\x86\xd4\x97\xc7\xe2W=\xb9\xd7\xd2\x0b\x14G\xcc\xa5Q;c\x18\x06}\xc6\x07$\xec\xfa\\|\xf34\x85_\xb6\xa1l\x03q,\xfc\xf1er\x1ewL\x05\x11N\xf3\x0f\x15qS\x8a\xd9\xd6\x07\xc8\x0b#^j\xbe\x14\x99kc\n\x96\xb3\x83sK\x1b\xc4u\xb8td\xcc\x19\x0b\x13\x9f\xb4\xe5\x89\x8d\xa1`\xe1\xd4$\x8d\xc5 \xa5\xf2F\x05\x92\x0d\x136\xde\xb2c\x18\xc0\xd8\x1c6h[\xd1\xa2>\xf2\xf2\xf8'\x95[\xa6\xdeUT\x83\x9d\x80<\n;-\xde\x12\x0e\xcb\x9b\xcaD\x16\xeb\xe3l\xc7 \xd8\xf0\xe6\xd8\xce\xd3\x95j6\xf4\x07(c\xf0\x88\xe6\x99J\xa4\x07\xea\x9c\x05\"?\x97dK\x91+\xe5\xa3\xe2\xe2\xa5g\x1a\xc3\xa7\xf6\x91\x94\x16\xf4\x86\xedW\xb7\xac\x9a\xf9A\xf1\xe5C!\xd0(V\x10\xb6\xe1\xdc\x86t5sD\xc9DJ\xbe\x15\xbf~ \xfc\x16\xd0\x15\x07\x0b\xab\x0eJ\x1f\x06\x11\xaa\x95\xa3'\x03\xffhg\x00\xe7N\xc4\xeb*\xf3n\xad\xe8\xe5L\xd2\xa3\x05\xbd\xa8\xa83Q\xeeX\x7f\xa2\xe2\x0f,\xe5\x8d5\xb3\xbe\x9en\x07\xf33\xd8\xd9\xf6\x0e\xf6?\xf1a\xff1\xc6\x03\xb6m\xc5\x19\x96\xa5\xcc\x8c\xd8H\x91\x9b>@\xb3\xd1.\xfe\xbd\x8d!c\xbc\x05\x83\xc7\x02\xc7\x87\xb8\xb9\xbf\x92.2\x15s\xdc[j\xd8\x86\x86_\x13\xa7R\x13\xfb+\xd1#\xd5\x91i\xac\x82N\xb7a\xccG\xfd \xc4\xe7r\x1fa\xf5\xac\xb4\xbe\xe3\x0fa\xa8\x8cG\xe9H\xee*.\xd8\x8da[e\x1f(\xf8\x9f\xe7\x86\x11\x8d\x85L\xc8\x1f\x8f#QF}\xcc\x0f\x00\xf1o\x82\xff\xba&2\x15\xd2X\x82\x11\x04\xf8\xe72|\x00\x0b\x0e\x11\xec\xb9\xe0\xbb\xc9k\n\xb5\xa1\x8b\xf1\x9a\xf1n\xd2\xe5N2\xc3 \x8a\x87\x18#!\xc8\xc6RH\xdc\x07|`x[Soat\xe3\xc4\xbc\xb2X0]|s\xeb\x16\xc6\x01\xa3h6i\xa8 :h\xc5\x1c#X\x90\x90\xa7bz\x9c\xdf(\x1e\xc0\n\x1e\xc19\xff\x87S\x82.Y\xe2\x14\x060E\n\xb22+I\xd4\xc5\xbb\x9bK\x92s:\x12\xfdV\xbf\xad \xa4\xcc\xfc\x9d\xfaP\xf4|\x8e\xb4\x0b\x060\xe9\xa0L\xa0\x18|\x05\xb2\x80/\n\xc6\xac\xcfj\x8a\x93\x1c\xd9\x98e\x88g\xdd\xa3\x01,B\x8898\x16\xb8h\xf8o!\xdc\x16*\x07\x85VSR\x0f(\xda2\x85O\x96\xee\xc8\\8\xce8\xa5B\xfcp\xae\x9c\xdc\x87\xa9S\x98\xe1\x0bs\"\x84\xeeG\x8f\xf8\x81\xeeZ\x18>\x80\x13\xa4\xae\x8b\xea\xf5\x10Ns\x12\x7f\xb2\x7fu\"\x05\xb5\xed\x01\x04bK\x85\xf05\x9c\xe0&\xd9)!#\xf7\xd3\xf0\xc4,\xdc\x9a\x177\x15X\xfdH\xaa\x11E;M\x90\x16|ev`\xcc\x97(\x15\xfb\xe1\xa1\xd8\x0f\xb5\x0f\xca\xe5,8%\x90\xef+\xea\xb2#\xa9\xca\x8e1\x8ar\xe3\x94\xa4KTkT\xc7\x89`\xbbI\x8d\x9d_V\xba\x1d\xc08\xce\xca\xbd*\xd5\xdd\xabf\xbe\xeeU\x9cL\\\xb0 \x16\xe2\x0eFj6\xa3\x1b-\xc7\xf1c\xbf|\x91\xb9\x9e/\xb2\x16A_eY[\xba#B0)\xb6\x93 F \xc6\x9a\xbe'\x15\x10~$\xf7l\x82\xeb++\xfd\xc5A!RJ\x8aU\xbf\xe9\x94\x92\xb9\x88GK7@\x8f\x04\x1e)\xa7\xc9[\xb7D\x82\xa8\xca+9A\x92\xa2 \xdf\xccrcY\xa9\xb7])\xe6\x84[\xf5.*\xe5\x94\xce\xfa\x9co\xcas\xaf\xf6\xdf\xb9\xdbw\x16z|.\xdc\xe1>\xb0\xaa\xbe#\xbf\xb5\xb1\xdf\xcd\xf9\xff\xfa\xfa\x8e\x1f\xdcP,Ka\x8e\x9b\x08gk\xf0\xb5oJ\xbe\xba\xea\xe1\x9dfT\xb1+!\xaa\x14\xe1(\x02\xe1\x8f\x03\xb4\xdb\xf7OD\xea \x91;<\x15\xf6e\x8f\xdc\xe1^sz\xeeT&\xac\x842a\xc5{|\xcd\x02Q\xdd\xe6\x88\x05\xadP?K\xeb\xbf\xbb%\x0ci\xda\x89\x14KoM\xbd\x14K>8)\x1c\xfc\xbcHI\xc1,\n\xff\xa2\xe2\xf8\xf9\xd1\xba\xb4\xa9\x12\x06\"o\x93\x19o\x85~\xa2KQ\x18K\xf28\x10\xda\xd3\xea\xe7>|\x0d\x89r\xdcD\x1b\x910V\xb6\x93\x9fZDXu\xc9\xfe\xb5\xf9H\x15\x0bJk\x96}\x14\xf6Y\xf6\x92\xac\xc8\xe4\x98|\x0e\xc2\xcd)3\x19\xeeZ\xb8\x86\xb0?M\x93E\xc0;x\x1d\x8b|:\x1anr\xa2\x9b\xd7p\xb5\x8e\xb9\xba\x933:\\\xa0\xf1L\x95}c\xa10\xfe)%\x86\xe6\xdc\x1bkj\x0bND\x96J45(/\xb5X3\xabm\xa6B\x80\x18Qi\x19\x0e\xf7F]\x8b\x9d\x0b\xd5\x9eXG9\n\x91j\xdd:\x081?\xe9L\x1f+\x12Z\xb5\x10\xcbB)\xb2\x19+\xc9\xb0\xf1=\xb9\xfc\x9e(\xca!|\xc3%\xe5\xc8\xcc\x9c\x0c\x07\xe3kt\x7f\xf7\xcc\xbc\xfc\xa6\xc3\xeb\x04\xdd\x954\xaf\x93\x93eA^\x92U\x01U)\x0bE\xf1\xdaI|m\x9d\xbe\xb7\xd0tc\x8f\x9b7\xff\xec\xafm\xfe\xd5_\xdb\xfc\xc7\x8e8\xb6\x7f0W\x8aXV\x1bA\xbd{~\x83o\xf1.\xafN\xad9CR\xe6\x08\x8b9\xaa\xe2%\x9d\x0d\x9d\x97e\x92\xe5G\xb2\xfe\x19\xfa^9\x15b\xfe\x83\x05}7\xc9n\x02\x0b#\x12\x99*\x8a\xf09\xcd\xe2\xa2\xd3\x0d\x15\xf4\x8e\x12:N\x97\x13R4\xab\xda\x97-\xaa\x176kv\x16\xdb[\x1c\xc7\xe3\x19yO\x8a%\x86Q\x12\x1aaE3\xe9Q\xf8\x91\xe2\xe3Z\xd9.W\x04\x93\x12C\xcc\xce\x14P\xa7P\xadzV\x9e\x8c\xa1\xf4:\x14\xbc\xa1]\x1da-v\xa5y\xa7n:?\xa1\xef\xe5\x07\xc1\x9b.\xa9^i7UW\xa2]\xbb\x98\xaeXx?'Vu)\xbbf\xee,_\xab.\xe4RHg\x1d[uU\xfb\x0c\xdd\\\x87\xbb\x1d\xd9\x90\x00\xc3:\xd5\xbb\xda\x87{\xa3H\xfb\xbb\xe5^\xd8\xbc\xdcfQ+\x19Q\x97-\x8b\xb9\x1f>\xf2\x95\xc2\x15\xfe\x9d\xcbLp\x00\xbf[\x11\xa9v\xd3F{?ws\xba\x9d\x148o\x12\xdd|s\xd2b\xa7\x01y3\xa4\xd3\xa7\xa82\xc6\x81bbz7\xc5\xadj\xa6d\x18&\x8c\xbe\xf6\xa2\xc4Nn\x14\xedp@N\x02\xe43\xbck\x13\xa0\xac\xc3\xd9\xa6N\x83\xf2\xa0\x9a\x91\xfaXZ\x04mD)\xeb\x98\xb2\x99(\xf9\xcc\xb9\x86\xc3o:\xeb*o@i\x94\xf8\x9atR\x19t\xb4\x93\x04F\xc9\xaf\xf6\xb7\xcf\xa5OZ&h\x83\xdbE\x05}\x13\x9c4H\xc9\xef\x1cZ\xcbHC\xb6\x18)\xd0\x92\xe3\x9bq\x01\xc0\xa2NhUE\xb4\xec\xf1\xef\xbb=\xd7\xdc\x1b\x9c\xea,\x16m\xeev\xba s\xe4\xe2\xb2\x88`\x7f\xd02\xe7\xcd \xa9S\xe0\xa3y\x06\xa0sW\x1b\x8c\x13\xf4\xbd(\xa4D\xdb\x961pW\xa8Yj\x90-W:\xc1\xb2'\xd4\x04\xc8\xbc\x8f;{\xb0cHa\x0d\x92{h\xd2X+WP\xa7\xb1\xb5\xc6--_\x8f\x8d\xeb\xe0\x0e\xa9\x81\x97\xa3\xe6\xe8\x90\xff8\x0f\xd7Q\x8c\xe4*\x82-\x1b\xec\xcc\xb1E\xae\x19\x19\xcfx{\x0f^[\xfe\x0f_\x95_\xc7\xc9\x8e\x9b1k\xa2\x9a\x15\x8f\xcf\xcbD\xbd~\xc7o\x86\xc7\xd4\x8a\xf7\xb2\xb5U\x11\xc4\xccq\xfaf\x7f-;P\x8e\xa7\xcd\x0bH[\xbb\xa1\xb4P(t\x98\x0e\xa6\xc0\xe5My\xae\xc5 \xd8\xcf\x98\xa5\xb9*/t#|\xe2p\xeb\x05%5\xe8|\x02~P%R\xdc\xde\x8e \xe3\x0d\xe5\x12\x02hn\xb6\xe7\xf9\xe4Sm\xfa\x84\x81Z<7\x1f\xe1\x03\xa6&\x1f\x918*/v\x03m\x036\xc3\xd3\xf9S\xe1\\\xdc\xc9\x8d\x80\n\xca\xa8s$\x89\xfb\x0be\x08K|\xb8\x12\x906\xb1b\xb8\xeb\xb0\x9a\xa9\x0b\xb3Y\x1a\x13\x83\xeaW\x1d_\xc6h*\xd4r\x02}\xc6\x8a\x882\xb7:\"\xcf\xd8\xcap\x82U\xf01\xf3;~\xb6\x81'\xbe\xc4\x8fX\"N\xf9\x0c7r#\xe2B\xc4\x1e\xdcF\x1f\x1c\x0cDD\x9f\x1c\xf9\xfe[Y\xc1,\xeb\xcc\x9b\xc4\xd1\xe6\x9d\xa8cf\xb7'|@\ni \xc8\xe1\x04\x0c\x12X\xaf!\xe6\x7f\xc5e\x8f\x1c&}\x96 \x15\xbav\x10\x07a\x05)\xf3\xa0\xa4\x93w\x0c;&\xcc,`0\x10\x9e~\x01\xdfl\x85tD\xda\x85\x03c\xa5\x89s\xe9\xd5\xe8>vR\xc5bV\xe1\x06K\xac\xac\xa5\x8c\xa1\xcb\xca\x80\x18\xc1\x16\x9eR\x992\x8b-\xcb4>A\xda<+<\x8ea\x99\xe1\x86\xc9p\xd3*)\x10\x93E\x15\x15\x93\xb6\xcd\xe9$\xa6\x9b1\xf8\xb1\x85\x11\xa4_\xa6\xa7\xca\x9c\xe09\x96!\xda\xa4\xc2\xbcf!F\x11\xb4\xdd\xe5\xaf\xf45\xbe\x9e\xb2N\xda\xf4x\xff^K\xe4\xd6\xd3)\xb4\xd1Zm\xab\xf8\xec\xeb\xe3\xb1\xbc7|\x96\xaa\xb5z\x10B\xd6yZrxmo\x17\xf0HC\xf9\xae\x93\xd8+\xfa\x1d\xba\"\xe0\xf9u\xe5V\x13\x10T\x13tM\xa1\xe4\xaa1 \x96\xd2\xe2\x11\x0c\xb0g\x91\xa8\xa3\x13\xc9'\xcfU\x92\\\xf4\xc6\xd05\x95\x9b(\x08\xeaXk;0\x7f\xf2=0\xddd\xfb\x86x`;\x19K|\xf6\x08 \x1c.\xef\xe72\xc8\xc2E\xa7\xba\x11\xdd\xc1i\xa7\x9d\xa4J\xa4\xe4\xc6\xd3\xb2\xc9u\xa7aE\xb5\x8a\x16\xdb]\xb8\xd9\xee0\x02C\xa0\xe5\xcd\xf0\xdc7\xb0,Y\xee\xb3.\x9b0\xf7_~\xdel@\xb0p\x93\xe3\"\x19\x12\xb5\xabk\x92uP\xa4De\x1d\\JZ\x11\xd6Y\x7f\xa4\x0cY\x832d\x918\xc2\xb2.\xba\xd0-7L+\xabG\x07\x8f\xcf1\x04+\xf9\x8d\xf1/\xde\x81\xe0\xf2\x8a\x1a\xde\x8ee<\x93\x83\xbd\x87\x8bY\x92\x12\xb0:\xe5\x81\xae\x0e@\xdb\x95>\xf3\x04\xfb\xd8\x88\xe6\xf9 ?\xde\x88\xe1\xe3\x8b-\x01\x0e\xfcE:e\xa9s$\x07P\xce\x86\x04E\x07\xed9WUC\xac[\x99_\x85\x89\xb2e\x1d\n\x04\xd0\xb8\xe7-\xf4\xbcJ\xe1!\x16\xac\xb9\x05q\x80U\xfb\x90(\xa7\x18\xa8\x0d\x07*M7R\x04*\xcb\x01$()\x86\xa5$\xb1\xb5\x8b\xc59\xedxeW\x95\xf3\x85\xe5_\xb7K(\xfd\x15\xa6\x8c\xdc.\xae\x81\\\xc5aG\xa1\xf3\x1b\xa3R\x92\xadJ\xbc\x94\x14\xc4\xcbd\x02\xea\xdc\x92\xa9\xe672\xcf\xa6\xbe\xf4\x06d/\xb9\xa4\x00\xa5\xfb\xf5po\xc4%T\xd4\x10\x06K\x15O\x81\xd8\xc5\x8f\xd18H\xab#\x93\x96\x84#\x8f\xc4\xf9\x99v\x93E~-\x85sn\"K\xa3\xa5\xad\xe5u\xb6\xa0\\\xb4\x90\xac\xa3g\x97\x1di\xbb(`\xd7\xaa\xdd C\xbb\x01E\xf533\xfd\xec\xa4\xa8\xc2#\x13]@M\xf2\x8b\"\xb8Kk\xda\xe8\xccN-\xc5\x9eT\xda\x8d\x9a\x83 \xeb(\xe2$\xe1>\xccq\xe4\x99(\xbdx\x08\xe2C\xe9^\xc6\xac\xee\x83e\x96i\xeb\x11\x91\xf4\x8b,g~\xd2\xacb\xa2\x022\xbc3\x8a\x80\x0e\xef\x8c\x10\xcb\xc9p\x7f\x04;@\x87\xfb\x86\x0c\xc1aU\x90\xbc\x91\x95\xc1j\xb1I\x86l\xa4v\xd2\x00\xf6\xdbm6+\xf4\xb9\x1a\xe2\xa0\x1f\xee\x99\x06&8\xd7_e\x8d\x0f\xe1\xd6\xfdR\xfc\xfa!h(\x04m8\xf5\xc2\x89S\xc2\xdfE\xc3+\x0f\xbb\xd1\x17\xe2 \x1fJ\x89\x1bV\xbc\xc8\xc9d9\xde@\x87![\xff\x15=+\x05;G\xd1\x87S(*,\xf9\xf2\xdd\xb6\x0c\xd4\x8a\xe5&\xdfWG@\xca&\x03\xaf\x0f:\x12\x89\xf9\xcc\xc3\xf5\xf4|\xff\xd5\x8b'\x13\xf5s\xec[N%\x8f\xbfu\x0b\xa8\xa6\xbf\xad\x85M\xae\xd7U4\x82\xf8\x05[\x03\xde\xedz-b[\xbd\xc6\xfb\xb2\x8a\xbf\xf8\x02\xa1Y\xea:\xf91OH\x90\xfbz8\x97k\xd6\xf2\xb3\x04\x81\x84\xf3\x84\x06u\xcb\x14\x0c\xfc\xf6u3\x0b\x9f\xf0\xf3\xac\xce\xc4\xdfE\xbcv&Bx\xb6T\xfd\x0bM\xa2\x81Z\xfa=i\xa9\x10\xe4\x95\xd9\x92\xf0\x81\x06\x94\xf6|\xba\x05Y\xe2\xc1\xb9\xe5\x9e\xc0U\x97\x022_\x1f~2\xc1O\x01\x86\xb0W>\x97\x1c\xdf\x1d\x07\xfe\xf5\xf5m\x1e\xec\xff\x06\x9c!\xaef\xa7\x00\x86\xba \\\xce\xe4\x9a\x80\x92X\xe0\x02\x88H@\xd2/\xb29\xb9N\x07\x1c\xbd\x1c\xcd\xcb\xfaR\xffFFJ\xe5\xc7\x8c\x11\xbb\xa5\xb3\xaf,Gq](\xe2\x00]\xb3\xbcy\x81\xf8\x87\xce\\\x08\xc2\xc4\"jr\x90\xfe8\xa3\x05\xcb\x97c\xd4,\xfb\xd1\xf7\xaf,\x8e\xdeI\x99\xcdFD a\x89\x116\xcb\xb3\x0bD\xf1\x0f\xab\x059\xca\xf3,\x0fzG\x97\x0b2fd\x02\xc3\x97\x11\xfc4\x02\xb6\\\xa4\xe4\x00z\xb0\xdd\xcaHk\x19\xc3?\xdd\xd1U\xaf\x88\x8cG\x08#x\xea\x1b`\xf5\x8b\xbb\xcd\xa5\x00[^\xb1A\x19\x17x\xbd\x9a\xfe\x87\xbb\xe9z\xc4V {\xfaUc\xb88\xb7\x15j\x81\\^\xbd\x12\x8f\xea\x1c\x9c\x14\xd7\\zT\xee\xf6\xd6\x13\xb41\xce\x9aY\xdd\xf1-\xe9\xa4/\xf3\xac\xbf\xd0\xb3\xcbW\xdf\x0bm\x13k\xa7.\xb5\x8c\x9eu\xe6\xba'\xf0Hf\xa3<\x10\xc5>\xe0\x10v\xf8\x0f\xbfs\x9fZ\xb6\xf2\xb9\xf4E\xfb\xc9x\xe0\xa3\x14m\xe7\xa5\xf9\xd3\x9f=0\x1f\x8f\xc0\xd3\x94@\x96\x03\x06E\xef\xa4\xc9\xa7r\x0f\x98I\xbc\x18\x14\x1f\xb5\x81@X\x97\xd9\x0b\x16yG\xe2d\xc1A\x94$\xd0\x99SLX\xb0\x13Z\xb0\x98\x8eI6\xd5*\x9e;\x9c\"\x10r\x88\x1e\xf5Ok\xc9>\xf3\xc0\xa6z.\x9bpr\xe8\xfc\xa2\xa8\x96\xea\xd6\xb2\xc6U(\xe5'\xb2*\xac~\x89\xea\xda\xf2\xe3\xca\xf4\x8b\xe5+\x8f\xb7\xf8\xc5\x8c\x11\xae^\x9d\xa8K\xceeB\xa6 %\xef\xf2lAr\xb6\x92\x9c\xaf\x7f+\xfc:#L\x13-7\x19\x83\xbat\x12$\xc2&7j\xe2\xaa\xdb F\xbf\x8a\xdax;\x8fo\xd3uF\x1a\x89\x98#\xe8=\x8d)\xcd\x18o\x1d2\n1\x85\xa4L\xcf\x9b\x93q\x96O\xfa\xbd\x92d\x8ah;\x07\x8bi\xba\xba3\xb7\xa9\xcb\x12\x8d\xd0\xbc\xae\xfa\xa7 \x9d\x04U\xd4]\xf7gW0\x8e\xd9x\x06\x086\xf7\x80\xae\x02\xe5\x9a\xae\x8e\x88X\xea'\x90\xeb\xa7\xf1\x9c\x94\xa1\xc3\x9fD(^\x8c?&d\x1a/S\xf6\x13\xe7\x960\xe7\x8c\xb5\x1b\xfb\x00\xc4\xea\x88\x80\xc3\x8f\xa4\xa9\x98P\x97\x05q2\x94)\xcaS\xab\x15C\x9d\x99t]\xa5\xe4\xa7\xb1P\"\xda\xb1\xa9h\xd3\x7f\xb1\xe0\x1d\x8b\xe0#gL\xde\xdd\\\x95\xaew7Y\xa5\xebm>!9\x99\xbc\x8e\x17\xf0g/\x82\xdeU\xbbV\xd7\xbbk\xd4\xea:\xd7k\x04\xf0\x95\x125\xfc\xed\x90\xadyh\xc9b:\x18F\x8a\x1f\xd2PT\xa6m\xd5\xd0z\xf7o\xaenS\x96\x9d\xe1S\x92I\x95\"}\xb4\xb5{\xa1\xcc\x88\xe0\x1c\xf5f\x95\xbf~g\xae\xdaG\xef\xae_\xfbHo\xb8]\x06\xb5\xd6p-\xf5\xb8\x0f\xb0+\x90U\x9f\x06\xa8\xb8\xd1 \xa7?rv\xbf\x91nDGD+\xf2i\xa30\xd8\xd2\xba\xdc\xe8E\xbe\xb9\x80\xa1\x0e\x90\xa1\x05\xd6\x12\xde\xe57/\xbf\x12\x17\xed\xa1O\xf3l~DY\xbe\x12\xbaRM\xf9\xd3\x8d+\x9b\x15J\x10\xc2\xdf\xa0U%\xc1#\xbf6\xab\x11\x85Z\xb7V3BEH\xe4\x12\xd5?\xb2.+\xdf\xd5\xaf\x99t\xe5$\xfe\xd5\x16\xd4\xd1\xc2\xf4\x9d-\xf2^\x18$\x1a\x84dRh\x84t\x00\x1fX\x1d\xbe\xc3\x99\xaanP\x83zY\xe7\xc0\xb0o#`\xc1\x1b\x16\xc1\xafa\x04o\xaeA\x81\xdb\x82\x1fR`\x13&\xd4\x9ao\xc4\x0dt\x96K\x13m\x8b\xa2i\xce\x86Q?rL>oD3\xb0q\xf5e\x9b.\xbc\xa9\xc3\xcd+T\xe8\\\xab\xc8l\xc67\x0e\xdf\xef\x159\xdc2%\x1b\xac\x8dQ%\x1b@\xa3\x86\xf74A\xd7\x1d\x89y*+\x87=8\xfc*l\x05\x896\x80 0\xb7\x13;t\xb2h\x06\x02\xa7\x02\x9fk\x87\xcd\x06`\xc8\xaf\x03\x06\xda\x00\xc3<^\x18\xf0\x15$\x18Z\x85_\xde|\xd9\x19\x119B\x94\xda(\xa99\xe0\xd6&\xaf\x99\xf3<\x1c\x97I\xc0l1KW\x9c@\xa9|\xcb\xff\x14\xeb\x10\x8a,=e\x0fV\xd5y\xd9|\x16\xc9|\xcd\x14\x0eD1 SWa'Q\xd8\xechB\x1b\x9f\x0e\x96\xd0\x01Au<\x99\x8f\x0bZ\xd7=\xb5\x0c\x1aV\xd4m\x82\xcd\xba\xa8\x9e\nye\x19\xa2N\xef\x8bRL@\x83\x8aP\x1a\xa2\xa2Y\xac\x02\x16\xc4G\xbf\xb0\xd2\xbcbZ\x0e\xd7RT' \x0b\xde\xb3\x08^\x86\x11\xbc\xd7\x97\xca\x14\x08\xe8I\xc4\xcbh\xc06%\x7f\xffe\x9b\xab\x93\xd2\xd8\xd7\xc7\xb8\xe9\xbcy3\xdca\x08r_\x96\xcc8S?\xbc\xff\"\x84\xbd\x11\x0ce\xbe\x18\xca\x14\x862\x85\xa1\xa2\xda\x96\xc2K\xaf\x9aa,x\xc6\"\xf8!\x8c\xe0\xd9\x97s\x10\x0e\xe4{v#\xc8\xf7Wb\x18\xf3\xc7/\xe3dn\x0c\xbf\xfe\xc3HT\xe1\xcf\x86\x88\xf4Jr\xba\xaft\xe8\x10)\xcct\xf1\x10\xedu\x94,D\xb3\x9fW\xff\x95\x88\x84\xc7\xa5\xed!\xbf\xbeb\x81\xb5\x88\x9e\xe6d\x11;\xdf*\xd1\x15K\xf4\xa30 \xaa\x12\xa3\xd8Z\xdd\xdc\x157-R,\xbf\xdaz9#\xa2\x1b\x81\xfd_\x83\xe8\x1e\x91\xa1~{\x01\xca\xf0\xca\x9a[\xb8\xa3\xa2\x86Z/\xd6\xe5e\x89\xde\x95\xae\x11\x82@\x0eS\x18\xa0~)\xde%\xee|S\x0e\x1e\xf7r\x06\x87\"\x91\x8b@\x89\x1cQ\xa2\xba\xb9'n\xee\xb5\xf3\xe5\xeb\x97\xc5e\xd1\x83&\xd4\xce\xe1z\x1a\x827\xf6G\xcf\xec\x8f^\xd9\x1fa\x8e\xaa \xa7\x11\x9c\x10.ZP\xed\xcd/T\xb0.\xa9\xe4A\xb7\xa1g\xd5\xb0\xd6:\xdc\xf8\xf8\xaci\xd4\xf9\xe7o/he\xf2qw\xe6\xa9L\x10v\xd0YY\x1d\xdd\x85\xe6\xf5\xcd[\x1b\xdc\x90\x18\xe2\x94ks\xe1\xe2\xeba\xf5\xb7\xd2Y\x18b6\x9b3\xf1R\xfeV\x92\x89Qe%\xfa\xbfuK\x1b@M\x9fk\x9eli\x1f\xd7l\x03v\x9dT\xff\x84\xcc\x17l\x85br\xf9c\x001\x95\xa2\xf6/\xa4\x9d\xf2\xb41UO\x8dq{\xd1*+\xb5\xb0P\xffM\xb3j-\xe9'\x9a]P\xf8DV\xd0\xfb\x1bl\x03\x81m\xf8[\x0f2\n\xfc\x97\xc2c\x8b\x91\xbc\x06\xbd\xad\n|\xb2\x98~Y\x8b\xc3\x8c\x14\x1ez\xc3\x9a1\xa1\xbeD\x85\xd2ku\xe0V\xad,\x846\x9a\n\xe7\xe0\xa0Z\x87v\x1d\xe6\xda\x1ax*\xd7\xed\x1b\xc7OCZ\x9f\xa9\xccS\xea\xca\xac\xd8\x9a)\xeb\x9ci\xfb\xe8\xae\xcd\xf4\x86\xb4\xfd\xce>\xae\xcf\x1eX!\x91\x07\x06\\k:jZ:\x00])e1Y_uk\xd8\x8dS\xbc9v\xf3\xdf8C\xe25\xc1\xff\x84 \xa1\xbeA62\x0dT\x1b@\x06\x0d\xf8\x1a\x04\x1ap\xa8w\x82\xcc\x16z\xd7j\xc0\xb1\x15\xa8\x8c\xc5\nuxO\xd7\xed\xd3\xf2\xd7\x19a\xefT\xf3o\xa7\x9c\xb4\xd8\x11E\x1b\x7f\xde\xcc\xe4\xed\x17(\xb2\xec(\x99--\xfe\xebu\xdd\xcb\xb0\xaf\xee\xf6\xde\xa3\x93D\xcf\xab\xb3\xc2\xdd\x993'\xfd9E\xff\xde\x94\xcacgk\x1c\x94\xc9\xe9\xf9\xb3k'\xa7O\xae\x9d\x9c\xde\xc5\xc1\x97\x92t<\x99\xd8\x8b\x11\x18\xb6\xa6\x17 S7 \xb7\x82-\x04\xe1\x16\x19N\x9b9\xa4\xeb,zF+[UFK\x0bUy\x1b\xeb`\x97\x0f\xda\xe5\xb73*Jdk\xd5\xb2\xab\x9b?'\x18\xd4\xa2\x1e\xf0\x9f\xd5\xc3V\xf9m\xf5\xe0\x19!\x8bF\xf1\xed\xfa\xc3F\xb3\xeaV\xfd%c\x01\xef\x8c\x1aJ\x8dg\xd4XA\xbc\xbc\xdd\xae \x9eQ\x8f:\xe0\x19\xed\xdb\xeb\x80\xe3CW\x1dp\x16\x144\x82#\x8ey\x05\xbd1\x07\x93\x82\xa2-Yf\xd0\xf6\x96D\x02Nq\xfb\x9f\x88\xb0?\x9bZ\xbd1\xa9\xaawL\x98U\x9a*\xbeH\x9a\xaa\xb8Vg\xbb\xf1d\xe2\xdb\xee\xa4\xc0\x9aq\xac\xac\xbcC\xb7\xb7CH\x026\xa4\xa3\xb0}\xec85\x8a\xe5\xb1\xcd\x8f\x1d\x8b\xfa\xc6x\xec(\x07\xa9Z$\xc1p\xb7yx4\x96>\xa1\x8c\xe4\x05\x19\xb3\x9b]\xfe*\xa3\x12\xf3\xab\xbd.0\xc4/\xbeC6\x94\x98NeS\x18\x9f\x17\xcb~-,0\xf0\x14N\xbfg\xd6'\xe7$_y\xb4\xac\xae\x12\x1dJ#\x8cE\xf5\x0b\x02 \x90\xcd\x93\xa4\xc5\xa6$\xeefZ\x1aHR,OY\x1e\xff\x7f8\xf2o\xc2\x91\xeb\xc6ry\xa2\x08&\xb2\xbai\x14Q<\xa4\xcf1\x85`\xc43G\xab\xe5\x10\x81\x93\xebi\xf4$9H7I=/K\xaf6\xd1q\xafCM\xd3\x1e\\[\xe7T\xdf!Y\xce|y\x819\x0d~.\xbdw:Nf\xde\xee\x93\x95\x8f^\xc2\xd08\xebn\xff/\xd2 \x15\x7f\xadz\x85iZ\x85\xb61\xcf#3t\x90c\xcc\xb9\xafa\xd88\x1d?\x85Xk\xc4\x9b\xea\x80L\xf9\xb0;\xd5[\xc5\x7f^\xfb\xb3\x99\xc2G\xf65\x8f?\x91\xe0\x0bu>8\xfb\xa48FM|J\xdb*\xa01\x8d`\xcaq\xac\xf7\xf7\xbf\x9f\x9c<\x7f\xfd\xfa\xe3\x87\xc7O^\x1d\x9d\x1c\x1f}89\xf9\xfb\xdf{mG\x90\x05\x7f\xbb\xf0P\x1aM:\x11\x81X\xaa5\xb1f\xb5&\x05\x05U([j\x88\xb1\x1c\x9c<4\xa5w<\xae\xf0|\xc1V\"|\xba\x04\xa3\x9f\"b\xd6\xbd\x17\xebJ\xae\x85#\x08\xa3\xcaf\xdf(_G\xd5\xb4\x88\xc8\xea]\xad)\xf3M\xc2}\xee\xa4Kc\xcc;\x10\x8c\xf9xg40\x99j,\xed\xce\xbf@\xa5u!TZg\xb4\xd2d]\xfc\xbfM\x93u\xe6\x86_\xa9\xee3\x14X\xd4\x7f-\xe8pJ\x95\x03\xddBSj-*\xa5\xd6\xa2\xae`R?\xeb\x0f$k\xb0\xa0\xba\xcej\xe1\xa3\xf0Y\xb8\x14>\x8b.\x85\xcf\x82\xaa}\x08\x038\xa7\xf2\x06\xdf\x8a\x88\x92\x11\xb0`N9q\n#\x98\xdf\x9cFh\xfe\x97h\x84\xe67\xa9\x11\x92\xfe\xf7.\xc5\xd0\x9cV~\xfa\x82r\x9f\x19(\xf7\x8aFp\xca\xf7\xc9\xdc\x83\x16\x9flJ\xd8N\xffC\x84\xed\xc2 \xcd\x95 l+>\xde\x13\x1a<\xf7/\xbby\xf4\x05\x84\xed\xad l\x97\x1aa\xe3\xb7\xfaKZ\xcc\x92){\x9c\xa6\xbe\xd1\xfc\x97\xde\x8a\xee\xa7nE\xf7)\xad\x1clO\xf5\xbdvA\xe5\x0d\xb9\xd7Np\xaf\x1d\xd1\x08.8\xb5<\xba\xb9\xbdvt\x93\xbb\xe2\x98\xc5\xe3O0\xe4\x1bb\xd4\xde\x10G\xd7p\x05\xa9\x1b\xe3g$6\x14\xaaG\xbd\x15\xd1\x92r\x93\xf0\x81H\xbcNvv\x1e\x84\xf8\xbd\xf0\xaa\xb2\xef\x058\x04\x99\x84\xc6\x14\xf7W\x1b\xf9\x82\x90O\x1b\x01\x88\x8f\xba2\x1c\xf2_\x86\xec\x1d\xad^\x96\xc5\xac\xab\x97J\xdbP\xae\xaf\x9f\xd6\xa1\xd4\xf4\x95\xce$\xb8\xfb\xb7[\xedD\x1a\x03\xcc\x07\x1e!0\x9bo\xc1\x0e\xecq\x88?\x12j\xc3\x9d\x9d\x10?\xb3\xf1\x05\x98Y\xa5lcH-\xb9\x0f\xf9\x825\xd7\x82_\x86D\xcbu|\xb4\x04S\x96\x9c6\xae\x87\x16o\xd5\xac\x18*\xef\xd6\xcb\x9f3\xe9\xda\xff\x98\x9a\xc5\x93\xd6\xe2=\xe6\xa4\xc8C0\x91\xead\xb4u\x05$\x0c\x05G\xe4^\xbf*\x07I\x87\xd4\x82\x0c\xb8\x19\xba\x1d\x9b\xaa\xe4\xed\xcb\xf0\xa0\x0d84&\xb2\xe4\xd9P\x00*4pT\xa7\x10\xeb\xdfN\x9d\x0f-2\x8aw\xca\xc0X\xdb\xfa\xb3\xc6\xfa\xd3\xeb\xae\x7f\xdb\xfd\xba\xb5\xfeYge*\x1de\x8b4\x19\x93`\xcf\xdd\xa6<\xa66i\x97\xa3\xa1\xa7:\xca\xd4\x95\x0f\x067\xbb3\x9d\xa2\x8d\xd67\x9fF\xb6\xb8\xce,6\xb12}i|\xb6D\xa9\x06\x06m\x82W\x9c\x15q\x83\x8d#\x89\xcf\x91\xc9\x89\xca[\xe9\xe8Q\x0e\xd6\xc7\x15\x8cbq\x11\xa2\x7fe\xd6p\x7f\x08jM\xd7-TeG\x17\xa49\xfa*M\x8f5\xc6\xaf<\x99\xf2\xda\xc9\x84e\xce\xb2:\xc9\xe2\x07\xcd\x83\x10\xeff\xee\xd3\xdd\xbd\x88yc\x11\xb3k\xad\xdfcj\xaa0\xddX\xc3\xcd\xd4V\xa5.\xa9\xad\xb9\xaa\x10\x94\xe3\xeacZMH\x9f\xcc\x86a\xc8\xfa\xcc\xf6,z\xa8\xa3kkAe\xdc\x81\xbe$\xd5\xd1\xa2y~\xb9\x90\x82\x8a=\x977\x10!\xaf%\x13\xccU0\x08\xd5\x92 \xe27y\x07\x13\xe85Y?\x1d\xa9\xd7l3\xb3\x0e\xb1\x9a\xa9\xf1\xec\xcb\xfdNn\xcf\xc8\x84N\xaf\x7f\xc5O\xe4]\xf1\x03\xb2\xdf\n\xd0\x91\xf0\xec\x17\xcb`Q\xd1\x98g(Z\xead\x1e\xba\xb2\xf393\xf3\xf9D\x05\x1c\xa1\xd6\x15\x85\x9a\x01\\\x1a\xa4\xf7c\x1a\xc1S\x93\xde\xf5\xc3\xe3\xa7/-\x9a\xd7O\xfc\xfd#\x0fi\xffq\xe9\xae\xd7\x91?\xb4.\xf3\x7frf\x94\xa9\x98\xe1L\xe7\x84\xb3\xa6\xa3^V\xd1\xbf\\\xfc\xaaS\x07\xbf\x94\x81o\x9d\xa7\xee\xb1\xd0\x03\x1cs\x80<\xa6A\xcb=\xc5\xd2\xe8\xbbnq\xb1D{\xabYR;\x9c\x86\xa8\xa3cCjH\x84k\x85\xa4\x9e\xbe\x8bU\xbc1\x0d#\xa8\\&\xb5\xd0\x88\xe3\xd5\xfc4K\xb1B\x82\xeby\xb3\xadf}|\xfd\xd7':|Z\xaa\x17?\xf9h\x03?\xb9\xb4\x81\x9f\xba\xb4\x81\xbc\x0b\xdd\xb6\xf6D\xb7\xb5E@\xfb\xcf+\x02\xf91\xe2\xcbDM\xe9\xbfdJl\x8f4_\xafH\xe0bE@.8\x91\xb9qE\xa6\xed\xeah_\xaf\x8d6zh0\x06U\xbe\x07\x8b\xe9\xcdi\xdaV\xd8c\xa61\xad\x15\xc4\xbbm\x9a\xc0\xb2\xe7tB.\xc9\xe4\x98|\xf6\x00\x8cF\xe2\xdf\xcb\xa8s\xbf^^\x1c\xfb\xb7\x8e\xc01\xa6\xc2\xf6\xd1\xccc\x82\xdf\x9e\xfa\xa4\x07\x9c\x85Y-H6\xc5\xfc\xda/\x8eQ\xe7\xc8\xff\x10\x16\x1e\x0b\xf8P\xbb\xc4\xdf\xf1\x9d\xde\xdb7\xff-\x13|\xfb\xa6\x9c\xe2\xdb779\xc9\x97du\x0dAC\xf8\x13\xd8\xfa\xa4\x93F\x8f\x1eU\xa3\x10\x98\xfcS\xcc\x89\x1aX\xcc\x1b\xa0\xebI\x0f1\xa1\x89\xb9<\xb8aXB+\xb4\x19,j\xc8\x125W\x9c\xa1\x84\x8ay\xbbYh.Sc\x18\x08\xe7@|6o\xa3oRZR\x04=\x84C\xe8aE\x028\x80^\xd4\xb3c2\x83\x01\xf4\x0czTu} \xa6\xbbp\x9c\xcaR\xfd[{\xe8\xb2\xba-,%\xfc_t3\xdaR%\xa4\xb4I\xe1\x9a\x96^4x\xe6\xf4\xda\x9c%\xc8\x1d\xe0\xc5\xb7}\"\xab/ ?\xcf\xbdVt^\x93C=\xd0\xaa\xdcb\xf5\x94\x9d^\x9d\x89\xb3t\xc3\x0d\x16A\xe6\\\xe0\x06\xae\xb5\x1cT\x1e\xc2>\xe6G\xe4\x98\x02\x07b\xc3\xb6\xb6\x83\xae\x06\xc0\x9a\xb5\x0e\xe4\xc8\xe0\x10\x82LR9l.\x94\xed\x92\xb2\xf4\xad\xa8\x18\x988\x0b2\xe7\xfe {\x9f\x9c\xcd\xd8\x86pS\x84Ig\x84*C\x94\x9b>I\xaeG\x9a\xdes\xab\xdd\x1dl\x83\xc6^\xfcq\xb7D*=\x19\xaeWWh\\\xbe&\x06?\xb9\xde!\xc1\xb9\x91\xcdz\x14yYD\xac\xdc\x1b\x8a\xa5\xc2LY0L]\xe5^5&\x9a3\xb3\x06\xe4\x80\xb9\x1f\x94\xba\xbf\x80\xd6\xfc\xee\xd5\xcb\xe9\x92\xbd\x8a7Q\x0f\x88}\x8d\x1e2\xbb\x11\xec\xecy\xf5\x92\x14G\xf3\x05\xf3\xb11\xc8^4\"\xae\xcb\xe9M\xc9\xfd@.c\x9d\x19\xf5\xe0EmFH\xaf\xd9\x8c\xb3%m\xee\xfc\x8e\xf9<\x0dH\xa5J\x12\xdb^\n\xb0\xe2\xe3\x0d\xf4*\xd8\xfb\x13_\xf6T\xf6\xefK\xa5@\xa3T\x1fI\x10V\x06)W\x06<%\xe5\x98\x88w\x17\xeb\x8a\xdf\xcb\xbc AU\xa7\\T\x12\xe7\xbbR\xcfy\xec%\xb5i2\x97\x99\xddU\x97\xa3\x94\n\x9e\x05\xba\xb9\xcdR!\xefJ?o}V\x8f|^\xc6\xe9&\xc2\xd69)\xc9\x86W\xfb2k\xa6\xc7V\xd3\x1dN\xcdk\x8b\x81Z\xfd\x13L\x97W+\xceDHu\xdf\xcd)\xd6\xab\xb7\xfeN\xc3\x86\xaa\xd5\xcd'\xd6\xaa\x1at\xf9\x8e5>&\xc6<\xa0\xea\xba\xf2\xe4\xf7\xc4.}\x93m\xb8\xdf\xa5\xf8\x81;|\xa3\xd3\xa5\x14Y6\xe7,,\xd5\";xn\xea']V\xc2%m\n\x97\xbc\xefa\x16\x01\x1d9\x05L/\xd6\x8aO\xff%\xf1%n5o\xf4M\x84=T\x8dQc\xa9]\xf3\x98\x1agd\xc7\x8a\xe8 7\xb3z8\xda\xb2\x99MF\xb1!rx\x0e\xa5\x02\xdc\xa6\xe3\xf1_-\xcf\xa1\xbc$r\x05\xfdF\x91o\xcc\xbc \xe8\x1f\xfb5\x9f\xc6\xec\xf5\xb5\xa51\xdf5\x02m\x13\xffb\xae\x93\xa4\xae&m\xabk\xea\xbb6\xb2\xd6Bn8k]\xc7\xa1\xae\x895o\xf1\x8d%O\xd9\xe2\x06ga \xd9\x1f5)\xc1WD\xd0\x8f\x12\x7f\x8c\xe1\xa7\xdd\xab\x0d\xcc\x90\xf5\x82y\x1e\xd8R\xa1\xa4.\xef\xfa\x14\x1f\x9fa]m\x9b>5\xaa\xfcd}\x07\xfe\x9cz\x0e\xddTnZ\xf8\x03c\xa1MUa:\xabU\x98\xee\xcc\xb6\x9c`\\\x90GV\xe4\x00}\x1a\xb1Z:\xc6-\xa9\xa4\xc4I\x04+\xceJ\xafB\x14\x13V\x95\xbf\xa7\x19D\xaee\xf1:\xad\xce\xf2l\xb9\xf8w\xb0\xe2~6\xbc@f\xbb{\xc7P\xd5\xc5\xf9wO\x06\xde\xc8\xb9w\xe9\\\xf8\x95\xb59w\xfe\x99\xe0\xdc\xbb\xf7\xb5~I\xf0\x04\"\x04r\xbd\x86\xe1(\xc4\x18\x06\xccY>\x8c#HFp\x00\x89\x87q\xd0A\xc7\xec0P(\xe8G\x81\xb3:\xe5\xed4?U\x14\x8cD\x90\x04&\x12\xa9.\xcb\xf87\x165f\xf1&r\x06\xd2!\x99py%b\x08V\x9e\xbd<\xdf\x84\x86\xab~\x9e\xd3M{J\x8a\xe3\xe5\xa9g\x81\xcfR\x06\x1c\xd8|\xc2\xcaJ)\xc2\xea,y\xf4J'\xe4\xb7\xb4\xe5y\\&\xc6\xd9 \x9f\x96y\x8a\x0b\xce\x0bm2\xc9\xc05K 3m\x96ay\xd3\xffT\xfbDVo\xa7\x1b\x0c\xa9<\xd483\xb7\x11$o\xc0H(\"\xce\xfd\x8f\xf8\x9aV\x86\xef\xea\xe7-)\xd5\xa7\xdbts5Z\xab\xe4W\x1f\xf9Y\xff\xfe^^g],\xbc7\xae\xb11\x97U\xbb\xefy|\xb9A\xaf/\xd8F*\x8cy|\xb9\xe9\x99\xfa\xa2\x96\x8f\xc8\xab\x13?\xa3Yk\x06p\x08\xef\xa9pa\xf9\xe8'(\xcd\x13z\xfd\xe9\x88\xee\x98\xe8\xcewn9\xd9\x18\x13\x8d!\x8f`n\xbe\xf8\x94,6\x80\x9d\xd6\xfe\xeb\x98\xcd\xfa\xf3\xf82\xb0T$\xb6t\xd6\x14\xbe}\xa5\x04\xcb\x1e\xe3M\x06D\xbb\xe3=\x90\x9fgI\xba\xa1\x99\xa1\x1c\xccO\xd74l|J\x16\x1f)K\xd2\xcd\xba\x15@WC\xdeL\x05%\x12\x82m\xd6_\xdb\xcaa\xc8\x0c\x06\xe6\xfeX\xfc\x89l\xb0\xbc\xacf\x80\xb8\x06J\xf1\xfen\x18\xa5x\x93\x9b\xa3\x14\xff\xeaKP\xea:\x92\xc4?\xbc\xb8[\xad\x84\xd1G\x8aj\xdeZ\xf26\x8c\xac\xec`x\x15;\xcd\xac\xdaeuq\x91.\xab\xc7\xe6i\x05Zja \xd8\xb1\xbb\xb5sY\xcf\xbf\xa3\xec\x7f\xc9\xb8\x19\x04\x1f\x82*\x91e\xd7\x0c\xb5f*\xe9\xa7\xfc\xf6\xd6-\xd8\xde\x8eQH\x95\x0dZ\n\x95\xab\xeb*\x8c \xb6\xbeq\x15\x81^\x06\xe9\xbfhU\xb2|\x93e!5o,\xfe\x9d[\xae\xe5\xd7\xd2\xe1Q\xa2.9N\xcf(K\xfdB\xdf\xa9e9\xd3\xee\x0f\xc0?\xe2Q\xbf\x9c\xd1\x8f\xfae\x89\x95\xd0/e\xba\x89;\x8bS\xa9K\xe8\xf0kE\xaa<\x1c\x1aUD\xa3\xac\xdf\xeb7\xd1B:\xab\xfa\xbd\x9d\xe2\xdb{\x1d\xae\xad`\xdaki\x04\x05j<\x0f9i\x1b\x0c\xe0\x8d\x14s>s\x8c,\xf0\x05\x91\xe6o)=C\xfe\x0b\x16\xb7\x8b\x088)\x80\xf1\xe1\xe6\x9aW~\xf0\\\x97\xa9(\x0f\xad\xcd\x98\n\x15C\xb0!_\xba\xb9\x186\x8b\x8b\xd9\xd3l\xb2\x81\xa3\x0b\x9bU\xd9\x05\xb0\x8a\xf3L\xcf6\xd0\xcd#@\xb9\xbd\x84\x83\xf2`\x00{p\x1bv\xcb\x8d\xe6 ]\xcaL:\xeeT\xf0\xf9\xb9\xf2\xa36\x16\x0ea\xcf\\\xf5\xb6|M\x0c\xcck\xf1\x1b\xdf\xf0\xd1^\xa2\x90~\xe7\xee\x9d\xfd\xef\xf6\xbe\xbds\xefN\x18\x95\xb7\xe1\xe1C\xd8\xbb\x07k`\xf0\xe8\xd1#\xd8\xd9\xbb\x17\xc1\xdd\xfb{\xdf\xde\xbd\xf7\xdd\xee7\xcd\xf7\xeeh\xef\xdd\x89\xe0^\xf5\x1c\xd3\xb9\x07\x0c\xb6\xe1\xce\xb7\xf7\xef\xee\x7f\xb7\xbf\xf7\xdd}Xs\x98\xfe\x8bo\xe9\x7f\xc9\xcf\xf6\xeeG\xb0\xbf\x7f\xf7\xfe\xb7\xfb\xfb\xf7\xca\xe6\x8f\xe5\xe7\xd8M\xf9\xe6\x9d\x08\xee\xec\xdf\xbf\x7f\xf7\xdb\xef\xbe\xdb\xfd.\xd4\x9bpl\xb9@\xe7\x0f(\xd6\xba<\xdc\x10j0\x80;{\xf05\xe4\xb0\x0d\x9fi\xf0\x94\xe0\xa6yJ\x02\x16\x86|F\xf6\xce\xc1sw\xaaKh\xc5\xaf\xd1K}R>\xdd\x943\xc2\x8e:;\xd8\xacq\xcfvCc9k( \xa2\x89\x14\xd6\xee4\x95\xc1|/~\x10\xc9\xc9\xb4\\\x00\xfa\x1b\x1f\xe8p\xaa\x02\xbc?\xd0\xe1+\xfe\xf7\x07i\xb2(\xf8-\x19:*n\xcb\xc0\xea\xf2\xbe\x1e8\x04\x03xF\xf1IB\x8b\x85\xc8\x8d\x8f\x9f\x1cg\xcb\xbc\x9eW\xc6\x04\xb2\x86\x12I\xba\xb7\xd6g\x87\xad\x8fgqBE\xdb\xd2\x96)ng\x94\xc5 F\xa5\xe3\x10\x84\xee\x12c\xc4s\xd3)9M\x93\x0dB#K\x01\xe5#\xb3\xae\x84I\xed\xb38j\xb9\xf7\xfbZ\xff\xedT1\xb7\xcb\x02N\xe1n#\xc3j)M('\x89a\x12A6\xb2\x17\x9f\x06\x10FU\xcd&\xe9)4\xce\xe3\xc5\xcb\xba\x0f\xb2/\x8c\xae\x01\x04\xbe\xeeMXt\x89\x19-X\x88h\x04\x07\x10\xb0\x93\xeb\xec\xd6\xd7\x14\x93\x9btf\xeexn\x07\x92\xdaI\xf5\xbe,\xed\xfc\xde\xd9\xce\x90E@F^\x8d\xbd\xb1\x90\xc3\xe6\xd9\xdc\xb1\xd9\xb6\x88O2.h\xc3\xd32\xac\xf773\xac\x9d\x1b\x1e\xd63\xf7\xb0z\x05\xd2\xc0\x9a\xf1\x03\x0e\xe1\xc5\xf1\xdb7}\xf1(\x99\xae\x84\xdaVRK\xcf\xdc\xa2\xaf\x9c\x04\xf8\xd8\x9a\xc9\xd3\xd2\xdc\xc7N\x0c\"\xf0\xb0\xe4\xe0\x08<\xc2\xbfw\x90\x9d\xf3\xea\xe0\xb3G\x07\x9c\xf5\xd9\x86\xfd\xfb\xf7\xee\xde\xbds\xef\x9b\xfb\xdf\xc16\x04\x843d\xf7C\xf1\xe7\xa3G\xb0\xdf>}\xeb\x0b%[{M\x87\x0bu$\xbe\xae\x8eD\x19\xa8\xc5\xef5\xceD\x91^\xa0|\xd08\x14;\x89\x9a\xec\xb6\xb1\xb0\x0c\xa3o\x0f0\xfc\x161\xa5>p<\xd82s\xf2\x93/M\xdf\xe0\xa73\xbf\xd1\xc0\xa9=\xbf\x93b\x9a\xd0 JO\x9e\xdd~\x817\xdd!:\xd3\xc1\x01\xec\xb4\xfd\xffLfN>*?\xc3\xd5\xb9\x9e>S\x99\xa8\x9c\xa3\xd1\xd2\x0c\x97{\xc7\xcb\xd53\x8d\x0b\xf6\xfc\x9a#+\x8dq\x7f\xd9\xe8n\"~\xc3\x13qn2~\xc3\xb7\xcb\xc5\x06}*Dm\x86\x15\xd9\x9d\x98\xf9:U\x96\x02.u\x8a\xa0Z\xb1\x10\x98\xf6j_\xfe\x89\x15\x8c;\xb23\xf2\x8b\xa8\xec\x8c\x9c`\xef*\xe7~t\xce\xafRDt\x04\x85VI\x15\x959\xa3\x03{J0\xef\xc9\xd1\x1eB\x0e\x07\x90\xab\xd0\xfdc=\x02x_94\x88\xd61\xc7\x81gP\xb0r\xee\xfc\"\xf2Qz\xab\xfe\x15$\xe4:\x8e\x9f\xa2\x9a\xbdW\xeb7\xe4\x9a\xe8\x89\xfd\x1b;\x0d6\xd2k\x87\x88\x82\xaa\x14]]\x0b\xa5e^\xafG\xd3\xdc\xba%\xf8\x8b\x99\x96dU\xe1\xed\xb5\xfc\x11EUmKV\xa5M\xdd\x117s^j\xc1\xe3\xd1\x00v1\x07\x85%\x90\xc8\x02(d\xbefUt\xd1\xce^\xf5\xa5<\xb4Z\xd5\x14\xc1v\xc61\x92/\xb2b\x13\xd3\xe6\xf5\x93|\xf8\x99\xf5\xaa\x12\x03%\n\xec\xc3\xd7\xea\xd7\x0e\xec\x89\x02\x03\x0e\xcb\x9f-\xf5\xa1~)\xa3\x01s\xca\xe5\xeaJ\xbe\xd8V\xd79 \xad\x8d`+\xc1R\x00b]Eh)\x17\xd1\xb30\xd4\x92\x96b\xb3\xf2\xbe\xb3\xe5+\xde{\xe4\xca\xa3\xa1C\xd4l\xb6\xf3\x06i\x84\xb0\xaa\x19\xd0~\xc7\xfe;'\xefo\x0f\xbd\x86\xfd\xac\x84l\xc6!\x1b\xc3\xff\xe5\xb2\x03\xdfz\x1c\x07\x92\x9a\x0b0\xc6\xfc\x1e\x88w\xe0\x10>\xf3\xb9\xc7\"\x1d)Zm\xd4\xcfL\xa5\x8c\xed\x02\xbf\xd3ZbIU^Q \xefm\x9c\x92\xf8\xdc\x87\xf3Rf\xb9!\xefbd8\x94C\xc7bq\x1e\xe5\xa5 \x00J\xff\x12\xc1\xcb~6EgZ\xebg\"?\x89\xe6\x9d\xef}\\\xc3\xbf\x8e\x1f\xf8\x9e\x11\xaa7\xed\xde\xe3y\xf2\xffq-\xbd\xeaK\xf5\xc7+\x1a\xb9\x90\xcd{\x0c?'l\xe6sN)\x99G\xef\xc5\x8do\x9c\xa7S\x01\x02\xed\xf1\xdbL\x96\xb5;W!\xa7\x08Uz\xd8\x89\xd27\xe87\xcb\xba-\xef\xd0q\xbd=\xfc\x8dy,\xc4 Q\x0bZ\x9a\x95\xbd\xe4\xb4\xeb\xe6\xd31T\x9d\x86\x9b\xd9l\xd8|\x95\xc3\xcd\x03\xda\x89\x96g[\x94\xd0\xaeY \xf4\xc7\x9a%A\xbf]3)\xfc\x1a\xe9J\xda\x10\xef\xbd\xac-\x9f\xb8\xf7C\xadiq\xef\x84\x18>\xbe \x86\xaf\x8fH\xf3\xf36TT~\xb9\x03\xa0m\xb8\"P_\xb4\xef?\xcd\xd2\x94 \xa4\x0f\xe0\xd4\xe0\x03\x81\x01b\x1f\x0d\x0f\xf4\xb4\x92\xefX\xfb\xb9\xc8\xcb\xb70<\x91\xa9\x02\x8f\x8c\xa3d\x07P\x18\x1e\xe8Y%\xe7\x86\xe7\xef\xc98\xcb'\x07\x90\x9b\x9e\xc5\xf4\x8c\x1c\xc0\xca0\x89\xf7dAb\xde\xa4\xe1YR\x1c\xc0\xccp\x7f\x9agsLmkK\x97|\x15\x01\xe9\x93\xcbE\x96\xb3\x02\x93\xc4 \xac\xbcr\xfb\xb4\xf5\x96\x05\x81\x82\xe5\xc9\x98i\xf9i\x94 ]\xdbn\x9a\x0f\x8d\xdeQ\xb3u\x15\xfb\x16G\xb0\x8c\xa0hn$L\xc6\x1e\xb00\x82-\xe3\x1e\xe6]\xa7m\xfa\xa7\xa5\x01C=OX&L;\xca\xf3,\x0fz\xaf\x13\x9aL\x132\x01r9&\x0b> \xc8\xc6\xe3e\x9e\x93\xc9\x03\xe0\x93d3\x024\xa3;s\xf5\xe2\x84\x9c\x03\xa1\xe7I\x9eQNu1\x02\x8b\xbf4]\xa6)\x10\xde*\xccIQ\xc4g\x04b:\x81x2Ix\xb3q\n3\x92.\xa6\xcb\x14.\xe2\x9c&\xf4\xac\xe8\xf7\x0c\x14\x9b\xa4\x05q\x90\xfc1\xe7i\x9a\xc0r\xf8\xf7L\xed\xfcfP\x07\x05\xeb\xe7d\x91\xc6c\x12\xdc\xfe\xbf\xc5\xed\xb3\xa8\x9b\xa8AE\xd8\xc6\xc3\xe9\xf6v;\x84\x17\x90\x8a\x85a\x9f\xc6s\x0c\x8dxN\xcf\xe3<\x89)\x83\x9f\x92,\xc5\xe4\xdb\x86\xfc\x92\xad;l\x96g\x17\x90\xf6\xa7y<'\xc5\x87\xec\x1dV\x91\xd9k\xa6b\xd3\xb0\xfa\xcb\x91\x98\x06w\xee\x86f\xdc\xcd\xaf\xdf\xba#K\xa2L~>!\xd3\x84\x12\x95\xfc\x9c\x8bE\xbd\x93\x13R\xbc\xce&\xcb\x94\xf4L\xa4T:I5\\\x9e0\x8f\x12\xe7\xbb\x9ef\xf3yF\x8f.\x19\xa1\x85\xcc\x7f\x8e\xf7\x1bwH1\x8e\x17XS\xf1UB?\xbd\x8b\xb1\xae\xa2J\x9d\xdf\xba]\xcc\xe24\xcd.\x8e>/\xe3TV#d\xfd\xd3e\x92N\xbe\xcf\xf2\xf9\xb3\x98\xc5\xe2\xb5,g$\x97OY&o\x92<\x89\xd3\xe4\x0frL\xe2|,\xda[\xc4y\xa1\xff>#\xec8\x9e/Rr<\x9e\x91\xb9\xf8\xee\xaf\x17\xc7o\xdf\x88\x9d\xd1\xe9\x01\xc6\xf2U\x07\xb3\x8c\xb6*D5\xab\x8eF\xe8\xa8o\xdd\x82^\x86\xbd\xf6D\x11\xb2\x86\xb1\xa0\xb7\xa4b\x9fNzp\x00\\\x82*\xf8\xc6\x8d\x97)\x0b\x03\x16\x86\x8ex\xd7+\x18\xc7l<\x03q8\xb6\x1e\xcb\xef\x1a\xd9\x1b\xae\xf8^\x16\x03J\xa6\xabNH\xc8F\x8e\x05\xc3|$\xf9f-\xa9<\x1c4\xfb\xc6\x1e\xe2<\x8fW\x1bt@d\xb3\xe8]\xa3\xff-\xeaI\n+\xefp\xd4\xeeH\xb0%\x92O\xd2z\x03b\x0eM\xe3\xabr\x84\x1eT\n\xae\xe6\xb3\x9eAB\x0b\x16\xd31\xc9\xa6\xb0RK\xd2\xe7[\xd2\xf5i /\xc6\x01U\xcf\x86\x8b\xb7\xd2\xb2)\xce\xb8\xcb\xb4\xbc$\xec\x8b\x8c\xce8\xdb\xea\x95\x8a\xd9\xac\xde4\xd5Nd\x98`\xf0Cv\xcc<\x0b\x05)\x15\xa3)\x87\xbb\xd2\xfd\xecF\xb0\xacP\x91\xb4\xb3\xf3v [\xe6\xf0\xc5!3$\xe80\x14\xbe\xeb*\xc6N\x879\x17\x0f\xc90\x1f\x89\xf4\x8at\x99\xa6fMt+\x13&\x82\x8cf\xf9\x1c\x0f\x0f\x81s\x03\xb8\x8c\x90N|O}\x91\xd6<\xc1vOIQ\xd2\x9dc\xd9\xc7\x92\x8eo\xbe\x175\x11\xaff\x9b\x99\x9a\x8dT\xe2u\xbc\xf0A'+\xca4\x93\xfa\xba\xf4\xa2\xf5ue\x01_Y\xa1\x8a5\xe5\xee\x84?\xdb\xa5\x84p\xc8\xef\xb1\xcb\x7f\xdb\xa8K\xc5x9^\xa7\xee$s\x1e\x08Y\xd7\x81 U\xda\xfcn\\\xdd\xa5\x18r\xb1\x01\x98\x8aU\xc1\xc8\xfc\xc3lI?\xbdN&\x93\x94\\\xc49\xf1E\x9c\xee\xfd\xcf\xfa\x93\xa4X\xf0\xb3I2\x8eH\x97\x9cp\xe9n\xd4\xf4\xb2\xd3\x82\x05\x1d[\x08\xcd\x93\x01 0\x959\x0b,\xbel`\x14#\xccw\x0d\xe7\xa0\\#\x0e\x80e\xf14\x9btC\xf9\xbcL\xb2\xa5\xaal[I4+55\xc1\x05?[.\xf8D\xfc\x93\xa8+\xe0\xec\xf7Ty\xd4m\xe8\xf5Bc\x06\xa5\x10\x19pK0\xf3\x95\\f~\x82\xf9l<\x8c\xce\xa9N9\xa5\xc0\xe1\xbc\xa7\xfc3\xd0\x8a)V/\x8a\x13\xb2\x0d\x0eu\x9a\x11\x99\x83\xc0p\xec2\xce>\xb0\x91\x1d\x96\xf5^\xfaI\x81\x9dQ\x91\xf8\xfe\xa05\x88\xf6\xfcg\xc9\xd9,M\xcef\xdd\xdc\xa5Z\xe1I6Fu\xab\x99\x01\xd9\xaa\xf8\x8c\x9e!s\xaf\x08N`\xe4\x92=\xcd(#\x94\xa94\xac\x8f\xe0\x1e\xb9S\xc5\x03\xe9\xafX'\xdf\x8d+\xb5\xec0\xba\xd2@\xa4\x83\xab\xfa\x88\x90\x0b\xdf\x8dP=\xb2\x1c\xee\x8e\"\xd44\xecE\xa8@ \xfd\x84R\x92\xff\xf8\xe1\xf5+\x91q\x18\x16\xa8V\x10r\xb2\xa8g\xbb\x80\x87\xf0\x0d\x92\xc9\xdf~\xc3\xfdJ\xa5\xe7\xdc\xd8\x99m\x86\x03\x84\xf7\x94\xaa\xae\xb7\xb7\x8b\x910\xafM+\xd8\xecE\xb05\x86\xf5\x1a\x16\xf0\x08\xbe\x15\xbd\x08\xaa\x80w\x87\xb7\x7f;\xbe\xddg\xa4`\xc18\x8c\xf8\xdb\xfc\x83\xdb\xc3\xaf~\xbb\x18i\xf7\x83\xdem9\xb2\xf5\xbal\x80\"iN\"\xf8[\xefo\xa0\xdcN\x92\x08z\x7f\xeb\xe9?\x97\xc3\x02v\xe0\xee\x08\xb6\xd1)\x9e\xf2g\xbd\x9d\x9d\xdf.\xefp\x99\xbc\xba\xf5\xf5\xed\xdeh\xb8\x18\xb9\x8de\xb8,SQ\x98\xa1\x1f/\x16\x84N\x9e\xce\x92t\x12\xc4\x9a\xc8}\x94\x12\x8efA\xafX\xc4\xb4\x17\x86\xfd\x82\xb0\xc7\x8c\xe5\xc9\xe9\x92\x91\xa0W\xb0\x15\xaa\x03\x86\xbdq\x96f\xf9\x01\xfc\x9f{\xf7\xee=\x80iF\xd9\xce\x05\x11 qO\xb3t\xf2\xa0\x17\xe1\x8a\xe1\x7f\xfa\xabxo4\\\xc0!\xae\xdd\x1d8\x84}8@\x08\xdf\x87C\xb8+\xff\xe6\xf7\xef\xc0\x01l\xdf\xfeW\x10\x07\xa7\x05\xcb\xe31[\xa7I\\\xac\xe9d\xadL\x0fk\xbeg\xd7E0_\x17$g\xe1\xe1z\xc9\xb2p}\x1a\xc4\x05Y\x93\xb3\x84\xae\xb3,\x0dHL\xc3\xc3uN\xe2O\xeb\x15#\xe1z\x8c\x8f\xf9\x81\xb3\x9e\xc5\xf9\x1aE\xdb\xc9:\x8d\x8bb\x9df\x94\xac\xb3\xf9\"]g\xb4`\xeb\x8c\xb2\x84.I\xb8\x9e\x90\xe0tyvF\xf2\xf58\x99\xc7\xe9z\x9c\xc69YO\x03\xbe\xc7\xd7$\x0f\x0f\xd7 M\xd8:\x0d\xc8Y\xcc\xc8\x9a0\x12\x1e\x86\xebI\xb6\x9ed\xcb\xd3\x94\xacI0\x9ee\xeb\xb48L\xa6\xeb\xb4 A2\x0d\x0f\xf9<\xb0\xf6\xe8\x9a.\xe7\xebsB\xd9\xfa2\x18\x93\x05[\x93\xf1z\x11\xa4\xc98a\xeb,g\xe1\x9a\x91\x80N\x8a5*M\xd69\x0d\xc3\x90w\x9d\xa6l\x96g\xcb\xb3\xd9:N\x0b\xb2Nh\x9c\x06\xe9\x8a\x0f\xe5\x92O'\x8b\xf9\xd7\x01\x89\xc73>\xfb\x84p\xb0e\xf3\xf5\x92\x8e\x03\xbe{\xf9\x00\xcf\xd2\xec4N\xd7g\x19\xcb\xd6g\xcb8\x9f\xac\x93`\xba\x9e/\x02\x81\x03\xc5Z\x1b\x04\x0d\x12\xb6F\x95~p\x92\xd11 \x0f\xd7i\xc2\xa1\xb5dk%\xfa\xacY@\xf2i<&k\x92\xd38\x0d\x0f\xc3\xc3u\x11\xae\xd3 \x9e\x9fN\xe25a\xebl\xfci\x9d\xd1\xb3p=\x0f\x92q\x9e! \\\xa3\x8ai-\xd4\x08\xe1\xfaM\xfcfM\x83xN\x8a\x05o)f\xc99Y\x93K\xb6&\x17\xeb$]gl\xbdL\xd3p\x9d\x05\xc8\x16\xad\x17\xc2\x10\xbe\xce\xd7K\xb6>'y\x9eLH\xb8^\x04\xf1\xf8S|F\xd6q\x1e\xcf\x8bu\x9e\x9c\xf3u\xc93F\xc6\x8cp@\xb0l\x9c\xa5\xeb\xe5i\x9a\x8c\xc3u\x1e\xc4 \xc7\x98 \x9ed4]\xf1\x85\x9b\xae\xcf\x92\x82\x91|\xbd 1[\x7f^&y5\xefb\xbc$k\xa1b[\xb3|\xb5\xe6T1\x0c\xd7Ep\xba\xe2\x8b\x1f\xa7d\xb2&\xe9t=\xcbr\xb6N\xce(\x99\xac\x93?\x10<1K\xc6kT\xe7\xacY\xbe\x1c\xb3\xf5\xf2\xb4\x18\xe7\xc9\x82\xad\x97\x0b\x92\xafWt<\xcb3\x9a\xfcA&\xeb\x8b\x84\x8dg!\x87\xe8|\x91\xf2\xc1\xcf\x08]\xcf\x92b=\xcb\xb3\x8b\xe2p\x9d\xc7\xb4H8\xd2\xe4K\xb2\xceW\xeb\xd5\x82\x041\xee\x8f \x99\xae\x93\xc9\x9a\xc6s\xb2\xce\xa6a\xb8^\x064\x18K4\x9f\x90i\xc0\xd9E\x8e'\x19]\xa7\xa4(\xd6\x85\x18#K\xd2p]\x90u\x91\xf0\x05:\x0f\xe2|\x9d\xe4l\x19\xa7\xeb,\x99\xacQm\xca\xd7\xe7\"\x18\xcf\xe2\xfc\x84\x89\x01\x91\x9c\xacgIJ\xd6 \x9b\x85\xeb\xcb,_\xaf\x12\x92N\xc2\xaf$\x01\x9cr~iw\x14r\x16T'9\x8a\xdc| \x97\xecM6!\xc14\x0cC\x91Al\xc1)\x94\xa0\xeb\x9cF\x1c\xf0\xf3c\xaa\x1d\x00{{\x0f`k\xb8\x17\xc1\xed\xe1o\xb7\xff\xbc\x1a\x06\xbf\xedl\x7f=x\xf8\xe8\xe0\xc1\xfa\xb7\xdf\xfa\xd1\xe1\xd6\xad\xbf\xff\xfft\xfa{{\xf8\xdb(\xac\xdfhPhI\xa0\xc7\xbc\xe3\x0cS\x93sR\xff\xb0\x07[x\xceH\x12=.\xa9\xf3\x98\x1fS\xdb\x90\xc26\x12\xe8m\xd8\x1b\x95\x7f\xee\x8f\x90 \xffvyg\xbc\xb5\xb3\xd3So\xf2{\xb7\xbf\xae\xff\xbc\xcdi\xe1\xff\x11-\x8e\x86;;\x8b\xd1\x03\x87\x07\xcf\x14\xb6\x070\xf6e.\x8d2\xda<^|\xc8\x1a|\x97M\xf5as\xb1\xe4\xc7b#\xc9~\xf9\xcapo\x04\x87\xf5\x9f\x07\xd0\xfbDV\x06\x96D)\x06\x0d\xed\xef[\xdb\xdf\xaf\xb7\xbf?\xaa1[\xaf\xe3\x85\x89\xe1k0\x90\xaf\xe3E?)\x84\x96\x04=\x81\x84\xf7\xc3\x06\x1cd\x9dc\xa4\xa2\x82\x0dE\x0b\x89\x89g\xe4\xfd\xd3*\xef\xfd^\xa5\x11\xea\xcfI~F\x02\x93\x14x.\xa3\xe5\xbbG\xc3\xdf\xe4\x8c\x155V\x07\xe2O\x0bK\xf4\xbc2\xecl\xed\x99\x9fM-:]p*=K\xe6o\x11\xc1\x04\x06(~&\x9a\x96RE\x06\x04!\xa6 \xe4\x83\x0b\xf8\xb6\x9e\xd4\x1c\x85\xc2\x07r\xd8..\x8e\xf72\xe3\x14\xc3'8\xfd\\\x8e%\xab\xc62C\x17Y\xe7Ws\x0e\x83\xceP\xf63|k\xaf\xe3\xad\x15\xe7i\x83\xb3\x08h\x99m'\x82\x9c3X\xc12\x82yS\x0d\xad_mTPB\xc7\x8a\x0b\x1d\xb1r\xfe\xc0\xec\x87\xb1H\x9a\xb72s\x83\x06b\xa1\xab\x86\x8d\xdf\x8c\xa5k\x05r\xe5\x86\xef\xa7\x9c\xfbHm\x18a\xc7\x15~ma \xdeI_n\n\xedo[\xe2\xe6\x8e\xee@\xf1\xf7\xa14\xe0M}\xe1\xd0\xba#\xc7\x14\xb7I)\xb9D\x8e\xf4\xfb$%o\xe29\xf9>\xcf\xe6R\xa6y\x96\x14\x8b\xac@\xe3\xeb\x8f$\x9ex\x94\x95W\"\xde\xedi\x92\x12~l\x0fz\xc1\xf0_\x0fF_\x87\x0f\x0e{\xb7\x93>\xb9$c\xa3\xe1\x00\xcb\x9e\x08\xdb\x00g\xea\xebm\x94MT-\xd8\x88\x93\xaa\x9e\x82\xcdh\xb2\xa1F\xaa\x8c\xf9\x19\x94\x12n\x99\xa6m\x08-\xe2b\x1c\xa7O\xe3\x82\xc0\x00\x9e\xd6\xef|/\x07\xd9 \x1a\xd9\xc3\xd3\x80Tf\xe2\xdf\xfa\xc3\x7f\xf5o\x8f\xbe\xfe\xea6\x17%B\x93\xc6*\xa6 K\xfe \x1f\xf3\xb4\xb3\x07\x0e\x802vlK\x8b\x1d\xe3\xc2\x9a\xd0u\xb8ekM18\xd6{\x0e\x8dG\xf0\x19a\x8f\xc7\x9c\xcb\xe7\xd8\x92gi\x9a\xd0\xb3\xf7\xa4Xd\xb4\xe8\x86F\xe3$\xab\x14\xfe\xfd\xa4\xd0\xb4\xff\x9a:\x84/\x8dMcP?\xf6\xccoV\xfa\xa5\xbaCx\x97Wry\xc2\x15,\xceY\xf1s\xc2fAo\xbfW\xea#u\x15*:\xe9\xf5\xc6b\xf7\xf4\xf04\xfd\xf3*\xac\xb0\xd0V\xa8\xc1LlK\xd5N\xd0\x93]\x88&\x8dv\x12K\x1b|\xcb\x06\xd40.s#a\xa9|\x93\xa6.5v\xa1\x0d2CVA\x887\x9b\xb7\xf1dB\xc8\"]\x1d\xb3\x8e\xbaLmJ\xf3\xdeP\x86\xffye\x0eLi\xe0hf09\xd9\x15\xdaU\x1cQ\x1edC6\xc2\xbdr\x08\x13\x92\x12F\x80\xdf\xe1B\x0d\xff\x87\xf3\x03\xe2\x0dj\xcce`\xcaV\xabl\x03\x06\xb2\xa7\xa2!\xbd\x08\x89)`\xd6\x95\x19HV We=\x95Y\xd7r\xa6X\xad\x16\xa4k\xc1\x89\xb0Z\x94\x87\x12 \x1d\x0c\x84F|s\xad\x89\x08\x84}o\xdf\x00R\xc5\xect\x19$\xcdQ\xc2\xe0\xe2\x13\x88#\x15\x03\xebS\xf4\xbd\xf8\x90\x95\xfe\x1c\x1ek$\xbe\xb1\xac\x91\xd6\x9b\x15M\x1a\xa6\xbf\xfa{\xe7\xb2\x92\xe7I@\x83oL>\x12ctH\xba\xf7\xcd\x9e\xe1\xd9T~x\xef\x1b\xa3{\xc5B\xb9f|\xbbkz<)\x1f\xdf5=\x9e\x95\x8f\x8d\xe3:\x97\x8f\xef\xdf36>W.%\xbb\xf7L\x8f\xcfpV{\xdf\x99x\xff\x95\xfc\xf4\x8eqR\xa7\nX\xfbw8\xe2\xd7\x9e\x97\x04\xfa\xa4\xc3w\xe1\xd6-\x0c\xe1P\xbeU\xd2\xb5\xd8\x8c\x8b\x12\xa5M\xa5\xea\x9bQ\xf3\xfa/\xbe\xb0\x170\x80\xf2\x08lO\xe5\xc8\xe0\xc0\xd3\xad\xd9o\xc9\xc8fsL{\xb06`]ndv\xae\n\x047&on\xfc\xd8\xd9\xf8\xd6\x16q\xdaW}(\x95c\x0dtO\xa9\x89\xfa\xc8\x06\x86\xa7\xce\x91\xf2~\x17U\xbf\xfc\xe7\xd4\x7f\x18u\x07\xaeN\x16\xce\xa1\xf8\xd9\x8c\x8b\x18Z\xc4a\x0b\x8br\xc7\xda\xf8\x9dz\xe3wD\xe3NN\xbcn\xa2\x97} \xefQ\x7f\xc8\xca\x87\xeb5 `\xcfk\xc7\x88\x0e-\xab\xfd\x18\x9d\x84\xab\xfc\xdf\xb4b\xbfM\x9a\x15\xd0\xfd\x00\x86\xd4\x92\xf6\xces\xa3\xc1!h\x02AR\x04\x182\xc5Q\xd5\xcaq\xf9\xa05\n?\xb6\x06|\xfc\x0e\xf0\x08'\xf8i\xd6&\x06\x82{k\xd4l\xeb*`\xb3\xc5{\x99k\xc3\x1cR\xceY\x0d\xa9\xc1\xeau\xd5\xdc\x12\xeds\xef\x93\xc5\xe1\xb1s\x7f\x80\xb2\xa7\xc2#\xa8\xc2\xc4{?\xc5\xe9\x92\xc0|Y08%\x90\x92\xa2\x006\x8b)\xc8\x96\xbd\xca\xd9?\xb68fn0\xa6\x87\xf61\x9d\xa1\xc2=\x97\xc3\x12\x8d{\x0d\xeb\xad\xd9\x85\xb4\xfb\xb4@9\xf3\xf6\xbfv\x0e\x7f\x9bl\x07\xbf\xf5\xf9?\xe1\xa1\xb2\x0chRjc\xa01H\xb6\xc7gp\xef,>\xaf\x9b\x8d\xcecP\x14#\x01\xcf<\x87\xf5\xc1\xe4\x9b\xeb7&<\x95\xb6\x02\xe2\xf0)\xb4Cn\x9a\xa4\xc4k\x80\xaf-\x0e\xc5~c\xec\xb1|Iz\xb2n0?D\xa7qZ\xe87\xb6v\xb5\xbf\xf7\x14#o\x1b\xf5\xa9\xe8\xdek\xe0\xcf\xcd\xce\xd1~\xe3\x16\x835\xa8{\xecc\x93/\xfb\x0c\xedw\x9b3\xb7\xdf\xe0\x92\xe2M\xfc&\xe0\x9f\x95\xce\xc2\x8e\x95V\xcd{\x8d\xec\x8d\xc9\xef\xdcoTJ\xd8S\xa2F\x9fe\xaf\xb2\x0b\x92?\x8d\x0b\x12\x84\x11l\xdd\xfe\xd7\xf0\xcf`t8\xdc\xdd\xf9.\xde\x99\x8e\xfe\xfc\xf6j\xa7\xfc\xfb\xae\xc7\xdf{\xfbW\xc3\xf0j\xe4E\x18\xf8\xc8\xbd&\xfc\xde\xea~\xefOL+\xde\xc4\x8f\xce\x8b.\xbc\x86\xf7\xcc\x1a3\xb0\xf9\xf06 \xf9\x1b\x8c\xf0\x95%\xd2\xc1{|[\x94\\\xc0{rvt\x89\xfe\xc8\xae\xa5\x9dfi\x9a]\xc0Bv\xd2\x83m\x93\x03{\xfd\x0co\xc7et\x8e\xec\xba\x9c\xed\xad[\xb5\xdfv\xae\xd6\xc6\xf1\"\xab\x87\x94\xe74\x9b\xac\xa4RY\xa8\x17\x13\xda\x13N\xf2\xf8\x0b\xcdX'\x97\xf3\xb4\x87\xee\xf2\xda\xcd\x9eEU\x99T\xea\xce\x9c\xa0\x9b\xc2\xc4\xf6j\x0c\xc2;J\xbe^`\x84\x8b\xe8\xc8\xa2\"\x8e\xcb\xd5\xca\xedv\xc7X47\x97|\x8e\xa5\xf3\xb1\xf6\xa6d=,oN\xab79q\xb6\xbd\xb6\xa8^\x9bf\xf9\x8f\xe0,\x82\xd3\x08N\"\xb8\x88\xe0(\x82\xcb\x08\x8eG\x0d\xe1\xd59\xf6J\xdfd|\xc5V\x92\x0eYB\xe4\x9f\x9f\x86\xcd\xb9\xbf\x97\xb4\x1e\xa6 I'\x90\x14@3\x06\x8b<;O&x\x02\x98(\xb6j\xf4\xdc5X>\xf1\x8f0\x80WA\x16\xc1\xb9\xc3%\xe1#\x1a8\xc4x>\xfa\xba\x1a\x80\x1c\xc2\xa4\xda:\x93\xae\xd1|\x86\x01\xbc\xe7\xa3\x998F\xf3Y\x1b\xcd\xe7MG3\xeb\x1a\xc2\xf70\x80g|\x083\xc7\x10\xbe\xd7\x86\xf0\xfd\xa6CXV\x00q\x96\x1d\xe1\xa3\xf9\x03S]a\x91\x11\xfbh\xfe\xd0F\xf3\xc7\xa6\xa3\x19W\xa3\x19w\x8d\xe6 \x0c\xe01\x1f\xcd\xd81\x9a'\xdah\x9el:\x9a\xfa\x91\xd85\x9e\x9f\x1c^K\xeaB\xee&\xf8 5\xe41#;\x8c\xcbQ\xd8\xfc\x02\x0e\xe1\xf7\x00Uh\xbd%\x176\xca\xbbo\xc4\xdd\xe7\x82\x88\xda\xf9\"u\xc9\xd9\xfedsb\xa9\xc8l\xfd`\xeb\x9a\xdf\x8f0\x80\xd7\x81\xab\xda\n\xce\xee\xc7\x0d\xc6\xf8c\xf7\x18k\x87g\xd7\x10\x7f\x86\x01\xbc\xed\x1e\xe2\xcf\x1b\x0c\xf1\xe7\xee!\xd6O\xe8\xae1\xbe\xc0\xec\x8d\x9dc|\xb1\xc1\x18_t\x8fQg\xb0\xbaF\xf8k\xc7\xd0N\x91\xf9)\xd90\x9f\x81\xfe\xaax\xd6\xe74\x18\xf6\x12F\xe6E/\x02\xc1g\x8f0\xc9N\xcb\xcc\xdd\xe5\xe9\x01\x9a`\xd5\xb5\xed\xf8U\xc3\xa4_\xd1E\x82#\x0b\x86\xaa\xd6\x97P=|'\x1f\xeaT\xe0Wd\xc0\xf8\xd3\xe7\\\xa8\x8c\xa4\xb9]\xac\x83{\xb0\xfcJDVKC\xde\x95\xe6\x85\x995\x0e,\x99\xc4\xd4\xe5\xac7\xdb\x89\x13\x1a\x83\xdc\x85\x12/a\x00\x1f\xba\x91\xf6\xa5\x0f.H`\xbd\xf4\xa5\xc6V\xab\xb7\xc1{\xa5\x9dF\xc1\xcd))7\xa3/w66X:Az\x05m*\xf6\xb7\x0cZ\xa6\xf8g\x0e\xef\xdb\x97\xf3T\xea\xae\x98U\xbeK\x84\xcf\xd5\xe5<\xc5m\x8b\x7fa~\x12\xd7\x9a\x0b=\x0f\xff\x86K\xf9\xf2\xdb?\xaf\"\xfe\xfdW_\xe5d\xaa;\x03\xac\x16\xe8\xb4F\xfa\xb8\xaf\xc5\x9f\x0b\x91\xcf#!\xf2w\x95\x16\xe6]\xf5\xe4\x10\xfe\xf6\xf0\x907~N\xf2\"\xc9\xe8\xa0\xb7\xd7\xdf\xed\x01\xa1\xe3l\x92\xd0\xb3A\xef\xe3\x87\xefw\xbe\xed\x1d>\xfa\x8dJ\xb7v\xf8\xe5\xf5+ \x97\xb8\xc40\x8e)g>O \x9c\x11\x8a\xc9\x19' B\x94\xfef\xf5~R\xd7yY^\n\xa7\xd3\x9fsQ \xb8\xfd\xdb\xf1\xd7\xbf\xdd\x0e~;\xde\x0e\xbf\xba\xed@\xf6\n\x88\xb2\x84\x94'*C\xddXx\xa6,\xb5\x93\xa7\xa8/\xfb\xe5\xf5\xab#17\xe1J\xe2\xe3\x01r.\xcb\xaa\xd5\xdb\x13\x9b\xe0\xfb<\x9b\x8b\x8d \xdbk\xcfH)\xc5l\x92]\xd2%\xd9%a\x08\x87M?\x98\xa4\xf2\x83\x81\x83F\x8eJ\xe9\xa3\xa9\xa7?q\xba}\x9d\xcb\xcc\x86\x7f\x1at\x85 \x93\x17V\xe2|\x9a\x8d1\xcbN\xbf\xc0\xc6-\xfa\xa5Joi\xdbZ=\xa1\xa4w)MD\x16\x94byZ\xb0<\xd8\x0b\xfb\xc5\"MX\xd0\xbbe\xd2\xc6\x80\xee\x9f\x9eCB\x81\x86@\xfb\xb3\xb8x{A\xcb\xdc7\xb9pS\xc4(\xc3a>R-\x0e\xb8XE\x86\x132\xce&\xe4\xe3\xfb\xe7O\xb3\xf9\"\xa3\x84\xb2 \x1f\xee\x8e\xc2\x11\x0c \xe7T\xe8\xd6-0\xbe\xb37\x12v\xd5\x9e\x0f>\xa9m\xdd^\xb3v\x1a\x1b7m\xb5Z\xc5\xfd\xca\x97\xab\x81\xd0\xd6\x8cD\xca\xfdA\x0f\xb6MO\xc9\x90\x19\x0d\xb3\xfd\xdf\xb3\x84\xe2\xf2\xb4\xa7&S\xf5\xb8\x07\xa5\xe6S\xcb\xb9\xa1r\x17Sr\x01$`\x9a\xb9\"\x82\xde\x92Mw\xbe\xed\x85au\xb7w\x1a\x17\xe4\xfe]\xd3\x18\xaa\xd4A\xed\xae3\x0c6K2Z\x1c\xe3[6\xaf\x9d8]\xccb\xcf\\\x83\xa0\xbb\x8f)m\xe2\xac\x17\xe2\x16J \x07h\x9c\xf3)i\xcf,G\xb6yc\xce \x9be\x93k\x8fF|n\x1b\x8fz\xea\xcdD\xb4\xc7\xc8\xe2\xb3\xbf\n\x9c\x8d!{\x0f\xd2\x80\x99\x8d\x14S~\xec\x8c\xc9I\xa5\x8a\x8d\xe6\xe4\xc7z\xfa+_^b\xf5\x10\xd1\xd8\x96\x1c5\x88\xbd\xeao&x\xbb!\x8d\xf8\x06\x8dL\xfb3\x0f\xb5\xc4k\xfb\xbb\xb7\xcf\"\xe8m\xf7\xc2\x91\xdc\x9f\xa6%\xb5R)\xe6\xda\xd4\x86\x94]\xb5\x95\xb48\xd6\x94J3N\xb8f\x15\xe1\xa2\x9aSN\x97\xcb\xc8F\x1e#\xf5\x91\xd7a\xae\x94b\x96\xbcd^\x04\xd8X\xa0\x063\x8ektL\x9a\xb31\xa5Q\x9e\xcc\x03m\x91~\xc3\xecx\xbd\x13\xb4\xd8\xf4z\xae\xe1Z\xb2\xaay\x0d\x93\xc3\xec\xb4\x82\xd9\xc7\xb6{Yd\xc8\xe3\xe6\xd54ig\x9b\xe8N\xc2z\xfb_\x97;%s\xdd\xb9l\x915\xf7\xdc_9Bi\xffY\x97\xf6\xa5ui=ZK\xbb\xd8ZZ\xbd\xfc\xa7\xf2?\xd5\x83\xb2\x90\x16\x0d\xee\xdd\x0d\xfbO\x96\xd3)\x91\xde\xe2\xd7\xca\x06hN\x88\xd9\x9cfI\xa9\x8c\x92\x99\xc8\x15\x0f\xff\x7f\xf2\xde\xbc\xbbm\x1cK\x14\xff\xbf?\xc55\xa7_\x8a,\xd3\xb4$\xaf\x91\xedx\xb28\xdd\x99\xc9\xf6b\xa7\xea\xd7\xa3\xf2xh\n\x92\xd8\xa1H\x15\x17;\xae\xb2\xe7\xb3\xff\x0e.\x00\x12\x04\x01\x92rR\xd3\xfd\xde\xe3\xc9\x89E\x12\xc4r\x01\\\xdc\xfd\x9e@\x15\xcb\xf2\x13\xf1\x83\x9c\xc7\xa2\xfc\x17$\x0b(\x81p\x047a\x16\xe6\xb0\xc8\xf3\xd5x{{\xe6\x07\xe4:I\xbex\xf30_\x14\xd7^\x98l\xa7\xf4\xbb\xedi\x12d\xdb\xf8\xf1\x16#\x9fRo\x91/\xa3\xd3P\xc4nd\x94\x86\xcb\xf3\xb9A\n\xc7\x90\x1fA\xba\xb9\xe9@\x0c\x9b'`=\xf1\xd3y6\xb94Q$\x157\x97\xa2\xcb\xaeB\x1f\xb2:\xeaq5ED\xcd$\xed\x1f\x94\xb3\n\xc8\x99uG\xe2l\xa2\x99\xa4\x16\x1dS\xe5\x15\x98C[\xd2\x1a\xd8\x12\xc58j\xc4\xca\xca\n\xef\xbb\xc4\xa8'\x14\xd8\xe7\xa4\x1f\xac\x932\x1a\xf1#\x9a\xacB\x19\xcbcf\x1d\xa8nz\xf5#\xcb\xfd\xe0\xcb#\xba\x80\x11\x98\xd9\xb8\xe9/:r\xfa\xb7W\x9b!\xb7\xd0}D\xb3\xc2\xb8\x17[\xd6\x18\xfd\xf6j?\xc5H\xcfk\xb5^\xd4\xb3\xbd\x88\xa8=\xad\xca\xa8\xf2\x84\xc84'\x04\x8b\xac\xc3\x8c\x102x\x06{p\n\x19l\xc1\x1e\x8c1\xf3R\x00'\xb0w\x04\x01\x1cCv\x04\x01E\xe3\xd1$\xa0\x05.\xe5\xda&AKb\xf0\x1b\xee\xa5n\xb6\xa3\x86R\xdb3\x93\xe9\xac\xd4c\xc1\xb0\x8d\xe2:q\xd1\x16\xd0\xd4\xc4\x9eux\x8a\x03\xb75 \xdb\xe5\xdf\x1c\xdcR,h\x8a\xc3\xa3p\x8afOSzb\xc2\x7f\xd1\x9f\x05\xfd\xf9_\x90\xcc\x90Zd\xcfV\xecYV\xacV\x11=\x7f\xf2\x84=O\xf0\xb9\x0b\xe4\xeb\n\x03\x9c\x80\x1fC\xe9\xd8\xe1\xfd=\xe3\xa1\xbf=\x8d\xe8A\\z)\x19\xc8\xb3\xbch\xe5X\xc4EK\xde \xe7\xb2\xe8H\xe9\xde\xa9\x8b\x16\x97\xb0\x8d\x99\x95\xd9\x03\xdb\xacN\xe4\x0b\x1d\xf3y\x1eJ\x91~h\xb2taQ\xaeo\n9\x8f\xc2pQfP\x88\xda<\xf1\xc5E;?/\xe5W\xf3\xd6\xf2f\xd8\x1a\x82\xc5\xf5\xda\xe4\xd9\xc2_\x911\xac\x9aoD\xa07\xed\xcb\xa5\xbfzY\xbe\xef\x8d\x1ef\x88\x9c\x1ew\x06F\x18\xe5>\xb3\xf5\xe7\xb6\xb6\x87X\xbc\xd9Z\xdb\xf9\x8a\x9f\xf4<+\xb5'#V\xd0<\xeb\xdaN6\xb9\xcd\xae\xb3\xcap2\xb1V\x0dg\x8d\xae\x9f\xbf\xf2~\xfe\xca\xfb\xf9+\xf6\xf3WM\xd9\x94\xc7\xfb\xcfl\x8b\xed\x7f\xcb\xed?\xe1D\x87.\x9b\xb3\xadi6,S,d\xf6\x9a\xc7\x99\xec&&z\n~\xb3\xaf\x82+\x11|t}\xbb\xf2\x11h\x9c\xc7\x84\xfeu\\\x1f\x1e\xb3R\xa5\xef\x85\xfc}\xac\x8e_\xf4\x97\x16\xaa0+r\x1ae\xcen\xbb\x14>\x03\x06F\xac\x05\xdf}\xd0\x8c\xac\xd00]\xe2]\xce\x8f\xe1\xb4\x0c\x9e\xa7\x9b\xb0\xb5N\xe0}~\x02\xefK'\xf0\xbe\xee\x04\xde\xef>\x81\x05\xd5\x00'\x80\xa6+)\x0b\x9e\xc7\x8c\x1c]\xe1\xbd\xcb\xe2\xb3\x9e\x02QQpm`2\xe2\xe5\xc9\xe8\xa5\xe3\xb14u\xa2\xc0\xf6\x1b\xe7\xe3\xad\xcfl\x9f\xb2\x15 \x18S\x16\xc6\xac@\x88\x05<\x94\x97\xb0\x86\xebk\xad\xb1\xa2\x98&A\n\x0f\xbc1t\xb4++\xf6\xc2\xac\xec\x96\xfa\xcd\xa0\x16\\U7\xed\x99\x96\xfco\xd2ar\xf4D\xed\xec\x8b\x89\xa7P6\xa9X\xec\xac\xd5\xe44B\xda\xa6#\x87\x8f\x81X \xdb\x89\x95\xa8/\xb1\xf2_\xa5\xac\xe0\xbft\x14\x8aQ\xec\xd8\x8c;\xe2\xb4\xc2=2\xc9\x1b\x9b\xa0\xaf\xe0\xaeI\n\x02\xf2\xc6\x8b\xb4\x1b/(7^\xc4I\xdfH\"}g\x8c\xf4\x9d\xc11DG0\xa3\x1b/\x98\xcc\x9a\xa4\xef\xcc\x10\xd0i\x85\xaa\xa6\xc44\xe7\xb1\xbdj\x9ds\xbaf\x0b3\xfd\x84F\xd0\xf6\xeaQKB\xa2_3\xcd\x92X\x18\x96D\xd8E\xbf\xa2K\x00#\xd5\xfa,\x10fW\xc1'S\xef\xe7\xa3\x19\x00-#\x1ce\x0d]\xc4y_\xa5\xc9\xea\xa2\x1cS\xd6\xe8{\xb9\xe2\xb4\x99V\xca\x95s\x83\x91\xab\xca\xc8\xf5.\x92\xb8\x03\x97\xd3\xac<\xa1-,\xe1\x18\xe6G\xb0\xa4\x8b\xc4<\xa5\x18ZJE\xb27.,\xcbEL{9\xa1\xfd]\xd2_\x97V\x89t\x03\x13\xb5K\x81x'\x9f\x82\x08\xae\x12\x80w\x1d\xf3\xd0\xb1\x19\x85xC\x17.\xbb\xb9\x1f[\xb7`\xa2\xdd\x82a\xb9\x05\x13\xc7\xe5 \x10\xc1\x87cH\x8e\xc0\xa7\xd0\x0c'~}\xbb\xf9\xe6s\x0eQ\x07vU\x01r\x88:]\x16\x7f \xf3\x8d\xb8r\xb7\xab!\xa2[\xae~\xfe\xcaq\x84\xdaq\xf8\xe58B\x8eJB \x95\x14\x0c\x95\x14p\x0c\xe1\x11\x14t\\\xfe\xa4h\xa2\x92\xc2\xa4E\xe2(\x8cLrC \xe3^\xca\xda\xf6\xd2\x17r\x97]H\xfb\xc9NV\\\x08\x9a\x91 \x89\xa7e\xd7\x9c\xe6V\x8bM[\xad\xc9\xe6\xb6o5\x90\xa1\x8b\xe1~\xe5H=\xe5\xbe\x9b\xb1}G\xb1jP\xee;\x8a\x9cW\x1c9\x9b9T\x81N3u\xef\x05.\xcc\xca\x99G\xa4\xb8\xf5\x8c\x02\xc5\xa6\xe3\x08&\xb3K\xfa\xcc\xa9v\xa1\xdf\xc6s2\x8bi\xe3Nl\x92\xe5\xa0\xc5\x8a\x0fNs\xf5\xea\x0f\x98l\x9d\x9d<3\xd3\xe7\x92\x05\x8bb\xb7U1\x060\xae\xbdk\x9eK\xb1\xa9\"\xb4\xd1\xd2r\x15\xb5:G\x97Z\"\xee\xff\xa5\xd3\xfe\xb1\xc7y\xd1~\x9cO\xff\x87\x8e\xf3\x9b2\xcec%\xffi=X\xbb4\xebK\xc4x7-\x18o\xd9\xb5\xeb\xe9)\xbdTw\xfd\xc2\x85\x9b\xda\x89\x8b\x1c\xe2M\xf7Y\x0b=%J\x9d\xc6\n\xed[u\xd5\xdc\xaa\x95|G\xfeT\xfc\x925\x85\xcc~\xecQ\x8a\xa3\xed\x1f\xcb\x9f\x8c\xc3\xde\xf2\xb3,\x9cWl\x92\x1d8p\x1e\xc6\xd3\x94\xc0y\x92.\x8a\n\x01\xfdk\x14\x06$\xce\x08\xbc{sQ>\xfcq\xbb\xfc)tR<\x8d\xd9\x9c\xe4\x92)\xd7\xf9\xdd\xf2:\x89\xb2\xa6\xae\x8a\x97\xae%\xb9\x94\xbek\xea\xae\x1a\x1fp\xcb\xca\xbb7\xd9Y\\,\x19\xda9\xd2\xc2\xcdH\xc4\xe8=\xa9pS\xf3\xe6\x18\x94Z\xc3\x89\xdcp\xbb<\xba\x83\x85u\x93\x7f\x1d\x98|\x11\xc9\x04\xb1\x8e5%\x96\x0b\xd6\x1e\xb34\xd4\xc2\xee\xbd\xbf$\x99M\x9c\xc9\xe0\xb2\xb5\x0355\xf1\xef\x0fL)<8\x82\x18\x8eaH\xffR\x84\x97O\xac+\xba\x15X\x0f1\x0f\xd3\xcb\x85\x9f\xbeL\xa6\xc4\x8e\xd1t.\xd6\xf7\xd7\x1a\x0cG;\xbb{\xfb\x07\x87O\x99}KK_s\xc5\xa6\xadK\xc4\x95\xabq\x84\x00$\x0b5\xab=\x8c\x8bXw-I\x91\xe8\xc9p3\xb4\xb6\xb2\xd2\xb6\xc2\x94\xd7\xc4\xbb\x9aE\xfe<\x83'PPZ\xe5\xa5\x1f,\x08K\xa5@[\xd1\xcbxo\xcaLG\x154\xe8\x17)\xd1$\x80\x06\x11\xa7\x82%m\xc2\x82M\x9c@\xc6\xb2\xb8\x02\xed\xe7\xb55!zV\xed\xea\xc3Vm\xfb\x0d\x8fx\x1fO\xc2\x8e8\xea\x19\x02\xddw\xbc\xabi\xb2|\xf3\xaa\x9d\xa2f\x16\xb2Z\xaeN\xbepTGU\xd4\xd1\xe4\x08\xa1\x91`P\xfa\xf3\xf0:\n\xe3\xb9Yy..\xda`d'\x94\x8b\xecjP\\3\xdbw\xa1\xcd\xa3K\xbe\x02\x9e\x91FC\x08\xa8\x97Y\xe7L\xaf\xd4\xb6vF\x16\xed\xa7\xb1\x98A5\xdd\\\x12bi\xde\x9f\xe8\xd7\xe6\x9f\xf4\xdf\xeb\xb6\xc0\xb4\xb9\xb5\x19\xd1\x9aU4(\xbd92\xec~&qa\x96\xd7\xb0\x81%M\xc4\x03w\x7f#\x98\xda\xdb[\xf9)\x89q\xc3:\xb2vA\xb3\x01p?U\xc5\x0d\x83\x83jI\x91\xd2U\x11\x87q\x84U\xa4\xde*Y\xd9\x8e\x83\xd8\x8a\xf6Y\x98U>y\x02+z\x96\xaa(E\x90\xac\x7fj\xb6%\xb8\xe3\xfa8\xe7$\x7f\x19%\x19\xc9rq\xc6\xbcN\x93%\xed\xf2\x18\xa6\xaeZ\xb4Y\xa6\x9d\xfc\x12\xf4\xfeT\x1b\x97^\x82 \xca\x0b\x99I\xba\x84\x13y\x18\xc2\x9c\xfb\x87\xd5\x81\xd8\xe8\x1c\xfd\x86vLt\xb2\xabsa=\xfb:\x91Z\xc6\x98\xcc\xd6\xce\x0e\xba\xf2T\xcf%7\xba\xf2Y\x07\xa7\xc3V\x98T\xdc\x11V\xf7\xa4\xaa\xfb#\xae\x13\xd4\x8f\xda\xd6\xce.\xb6\n'\xf5\xb7\x86v\x8e\xca@\xfcl\xc5\xe4b\xc5\xe01!\xf7\xdd\x08\x7f\xa9P\x1b\x84W) \xe8\x96\xadvl\xc3nD\x14\xe1KC!ub\xf9]\xafe\xd3\nf&L\xe7\xd1\xb2\xe9\xc9Y\x1b.\xdd/E\x14\x19\x8d\xa5\xf5<\xf8\x02\x9f\xaa\x04\xa4\xdc\xc5\xea\xb0\xac\xbeR\xce{\xe6\x1d9\x06k\xe4\xedy{\x96\xaeMM\xc0\xe6\xab+\x86\x01\xe8\xdf\x13q^~+);\xd0\x19\xe0N\xac/a<\xa5|}J\xb2$\xba!,\xf7Z\x9ca\xae)z#D\xc8\x1ff\xf4n\x95\x92i\x18\xf89a\x9f\xacR\x92\x91\x18\xcbq\xf3\xffs\x9e\xec\x8de}{\x1e\x85~F2\xeb\xb2I.O\xac,\xf0#?\xc5\xb2\xe4\xd7\x82\xc4\x01~\xb7\xf4W\xab0\x9e[\x97\x1d\x92\x11#y\xe5\x82__ \xe1\x8c\xe5\xb9\xc8\x85'\xac\xcc\xe1\xe6}\xc3\xb4\xd3Z\xb6x\xd8 \x0f\x9d\xc1?\xcc\xd0w\xb7b\x1bS\xfb\x87\xcf\xf1\x978\xb9\x8d\x81\xa9.\xc0\xfa\x81\x13\xa8?X\x10f\xb0$9%\x80\x90KD\x03oHf\xac\x0cae\xfe\xf6\xfc\xdd[\\\x04\xde\x0f\xcaju\\\xc8\x17a\xe6\xe5\xfe\x9c\xae8~G'\x0f7:\xfe\xe0\xf1\xed\xf9;>\xa1\xf8Z\xfc\xbe\xbf7\x8b\x96@b\xd3\x15\xb3\x07^c\xb9.\x98[Ky'\xd7\xda\xea*\xa1\xad\xb5Z`,\xbctu[\x1fO\xb9\xf4\x18f+\xef\xd4Q\xf35\xc9\xc7-\xee\xea\xa5\xe4\xc5\x8a\x05k\x0f\xeae\xe5\x85\x8c\xec\x1cs\x1e\x95\x9f\x96\x1f\xf8B\x9e%hB\x8c1 \xaf\xb7\xb8\xaf\x08'\x9e\x90\xcb\x9eK\x93^\xfe\xa4d\xc6LR\x9f\xc6\x82\xf2\x1d\x17\xf8\x92\x0e\xab%-\xd6\x95ii\xe3Rc\x0b\xbb\\\x82b\x81W\x165\xf4@\xea\\\xd9\xbdx\xf4\n\x85\x8dvG\x8em\xdd~\xc9\xd4\xf8j\x8c+\x1f\xee\x1b\xd8\xf2\x1d\xc7cR\xdd&s\xaeM\xdc+\x99\xe3\xda\xfd\xfc^\xf8\x02G\x91\xdb\xfd=\xd8\\\xf6\xe6\xd3\xd9\x0f\xc5C\x1f\xf5\xb0cH\x1c\xdbb\xfda\xc6`\x92\xb3\xd4\x83\xe3ey\x82\xa9\x92\xd3>\xb0\xd1#\xfd\\\x0e\x15_\x0f\xdc%\x80\x19\xda\xb1\xbd\xb7\x7f\xa8\x06\xacO\xf8\xab\xa7CG+7\x08\x8dC\xef\x1f\xa3\xde\x10\x9f\xfe\xe1O\xcd_\xe5\xbel\x13\x89\x0bmD\xdb\xc1\x00\x1c\x81\xab\xf6}\x15\x11\xa7\x17\x81)\xce\xf1\xa5\xf0\xae\xfa\xb0\xb3Y\x90\x08\x05S\xb0Gz\xa5,_\x96\xf1}\x88!\xe1\xcc\xef\xfd\x8e`*\xed1\xd8J:\xb5`bH%\xeb\x19\xc1\xbck\x98\xe3\xa6@\xd5u-\xef\x1a\xe3V\x18%[\xb0\xbcj\x94EbHW\x8e\xa4\x9e;G|\x9c\x06\xe6\xb5_`\xb7\x90\xa7\x16\xf3\xb5\x88\x0e\xa0_\xbe\xaf\xee\xa0t\x1b\xe8\x18\x9bIi\xc6\xb2\xf64c\xd0\xb3i\xe0\xcb+\x14(\xd67W\xa7\x1f\x9f\xf6\xa9\xe0\xa1\x1a/\x1f\xd8\xea\xd4\xd0\xcd:\x91\xb7\xd0\xe6\xfayN\x96\xab\x1c\xf2\x04\xa6\x84\x1d\xf5E\xca\xbc\xd9\x84\xbdni`\xa0*\x03\xaa\xcdl\xf7\xa2^%:u\xbf\x1d\xc9\x0f\xf7\xb5H~4\xfc\xbf\x16\xc9K\x07\xa0^\x1c=\xdc\xd3\x82d\xf7\xa9F\x1a\x1d\xdb\x0d!u\xc1\x1e\xab\xa9M\xfaz]\xa3\xf2\xc1\x05f\xbd\xb2\x02\x0c\xe0\x0d\x99\xf7Z\x8f\xaa\xa6e\x81\xbf\xe8\x0b,\xca\x02\xe7\xfa\x027e\x81\x8f\xfa\x02\xcb\xb2\xc0\x0b}\x81yY\xe0g}\x81;8\x81)\x9cB\"\x92.\xd1\x99\xe5\xd9\x97~7e\x11\xbb\xc6h&\xa5\xb6W_\xe8\x8a\xd7\x9c\xc2\x18\x16\xf4/\xcb\xecd\xa7\xbc\x95\xdf\x1f\x9c\xaa\n\x03\x9b\x8f\x9a\x9ei)\"\xca\x1d:1\x98\x9a|\x03\xf3\xe0^)\x11\x8a\xae&\x11\xd3\xb1\x14\xf6\x1d\xaa\x7f\xe8h(\xb1\x1d\xc0)\xbe\x841\xaa\x81\\\xb8c:!\xac[k\xbf\x85\xa5O\xb14\x8caI\xcb\xd1JB{\x86&yc\x98c\x07\xb0\x9a\x13\x98\xc1i\x07c\x00\x12\x83_\xd1\xb8z\x0b?\xf9B\x96n\x11f\xb5x\x1e]\xe2\xd3\x0c\xf3#\x83\xad\xea\xd6\xba\xbe\xa3W\xe0g\x04\x06\xe3\xcerP\xb7\x8f\xd1L\xa1za\xcd\xc3\xf5k\xb6u\xf8\\\xbd\xb0\xf2\xd1c*\xd7\xc60\x92\xaf\x0ea\xb1Z\x996W\x99\xb8\xccu\x95b)f5C\xe7\xdc\xad\x94\xa3\xfa\x1a5\xdau\x90\xc4\xa1\xd5\xfebr\xd9r\xc3\xea\x02\x88\xb3d\xd47\xca\x86\xa8N\x91\x19\xae\xfe\xd7\xfc\x0d\xaa5]\xc0of.\xfb\xcc\xb6\xef\xbc\x1b\x96\x14\x1b7^u\x87\xb8\xc4a[n\xe6r\x8c\xf4\x89~sM\xff\xdb\xb8\xa6\xaf\x9e<\x01\xdf\xbev\x01\xab5\xa7(\xc9\xbc\xd7\xcci;\xf3\xfe\x02'0\xa2?\xce\xe1\x04v\xe9\x8f\x8fp\x02\x87\xf4\xc7\x0bZf\x9f\xfe\xfa\x19N`\x07K}\x86\x13\xd8\xc7b\x9f\xe8\xdb\xd1\xa1[\x93\xb70Q\xfc\xbaR09\xeeT\x85=n\xc3x\x9a\xdc\xd2!\xb1_\xde;\x0c2q\x82ZL8\x15\xef\xc7\x86\xcf3\x12a\x10e\xfaW\xfd\x14\xdf\x8dAL\x84m\x89\xd9^\x84\x99\xe5\xc8\xa6_Zq\xdb\x9c\x8b\xdb\xe6\xdf(n\xeb\xe2\xbc\\~b\x8f\xf6\xd5\xd3\x16\x03\x81\xd1S\x9eE\xcaN\xeb\x9cT\xda\xceI\xa5\xa6e\xa1e\xa0\xda=\x1aPBEx`\xb0\xb0\x96\xd9(w\xb5\xc7\x7fT\x901h\xd4\x83\xa44r\x1ak9\x9b \x89g\xe1\xbch)q\x9b\x86\xb9x[\x1f\"\x86\xa0g\x07r\xec\xd6T\xb1\xd0=wfym \xd1\xd8\xde\xdb\xd9Q\xa6\xa8\x9a\x91Z\x7f\xf4M\xeavH\x8d\xfb\xd4\x8b7\xe3>\xfd\xff\xc6\xb5\xa7\x8e\xeb\x8f_z\xe52j\x17\x15\xd6\x94%\xc3#\xc8\xb5\x860\xb9\xde\x10\xe6F\xcd\xd4\xa0\xb5NoDr\xeb\xb0\xea+\x0dUx\x8072I/\xb9\xf7\x94\x89\xe3\x01\xbd\x89\x00=\xa8\xde\xef\xef\x0d\x06\x07\xec\xfd\xfe\xde\xde\xce\x1e]I\xfc\xd7\x13`\xf2&z\xb7\xaby.*\x1c\x94\x95\x1d\xb2\xe7\xc3a\x95]J\x14\x1a\xee\x96\xa5v\x86\xb5\xcf\x87\xa3\x83\xf2\xd5p\xef\xa9\x03<\xbf\xd63\x18\x0e\x87\xbb\xc3\xe1\xd0a\x97\x04\xd3&T4\xbe\xba!\xcf\x02\x87\x9d6\xa11\x8a\xfe\x18\xc06\xc1\xb6 l\x9d`\xf9}\x07\x9e=\x83\xa1\xca\xbe\x8b\x8b\"\xbf\xbd\xfd\x9d\xd1\x80~5\x1c\x8cv\x10&FM\xaf\xce\xac\xb6I\xf5k\xd1\x9a\xeeS\xad)\xf8\x0dw6\xdd~bO\xfc\xad\xdf\xfe\xe5\x92\xfe?\xd8zz\xf9\xfb\xd0\xdd\x19>8G\xdbs\xc5\xe0\x8dR\xc5\xdb\xff\xf9/\xb6}:\xfe:\xf1\xb7f\xbc\xf0\xe1\xc3\xfd\xa4\xfc\xe98\xdb\xcaW,\xe7\xec\xeep_+\xb4n7\xc5R\xc4\xa5|\x88\x89\x1d\xf0\x14\xcc\x01\xe3\xd0w\xf6PO\x92{\x01\x1f\xf1\xf3\xdc\x1e\xe0\xb2\x88Dx.F\xabc|\xab\xaf\xcc\x946\x9f\x0c/\xeb\xb9\xaf\xe0\x140\x80\xea\x9b8\xb7\xf3\xd2D\xcf\x85\xe1>\xa5h\x1a\xaf\x86\xf4\xd5\x00\xe3\xb4\x16v\x8cD\x8f\x01\xcc+\n\xb8\xc9\x93\xe3g\xd6\xe5v\x1d8S\xe9\xcd\xbc\xfe\xaai\x02B/\xeb\x895\x06\xeb\x89\xbf\\\x1diB#[\xc7\xf86\xca\xb5/\x9f\xe1\xcb\xb9\xf6\xe5\x0f\xd6\x0f\xf4\xe5\xafE\x92\x1f5b\xd15\xa7\xed\xc6\x88S\x16\xb2\x11\xb6\xac-\xe0V\xba=\x84x\x93K\x06a\x86\x1eK\x9a\xc1\x85\xe1:\xfa\xe0\xd6dVR2Lq\x0c\xe6z#c\xb4`\x149H\xf8W\x06\xe6\xbeKum\x0coH/2\x89/y\xe4\x1bm\x19]\x0c\x91\xfa<95Z\xdb\xc5l\xc0=\xd2\xe9q\xa0[\x1368\x8e@.y\x04\xf3V \x11\xff\xb4q<\nSW~\xbe5\xcd\xa9\xeb\xdd\\\xf8xN\xd3\x9fE\xcc\"\x1d\xbek\xcfgWJ\x1e\x84b\xd4\xfa\xe5\x17\xcb\x81c\x18p\xcd\x16)\xe3,\x86.X\x7f\x1eZ\x8e\n\x99\x9f\xfc(\x9c\x9e\xc5y\x98\xdf\xbddf(>}\x81x3\x99\x92\x8fI\x88j\xea\xc2e\x9ajZ\x17\x96\x0eI/A\xb4\xd4\xb5'\x86\x9ee\xae\x9c\x18\x08\xbb\xc5\x06\xff\xd7\x1c\x03\x84w\xb6\xb1\x12I\xd80\"\x83\xa8v\xea\xc2\x8d\x0e\x19\xb51Ak\xc9\xd8\xa5\xa0\xd6U\xe0\xcbS)\xc1;\x8c\xf5\xf2\x98\xae\x1e\x19E\xeb\x0dn\x8f1K\xfb\xeai\xcbD\xeb{\x87Z\xd1\xfa\x81Z \x13\xad\x0fGj-\x8f\x93\xad\xbb\x92\xf4\xdc ^_t\x89\xd7o\xba\xc4\xeb\xcb.\xf1\xfa\xbcK\xbc~\x07'L\xb6\x8d\x923.\xe3f\n\x13!A7\x8a\xbc\xcd\xa2\xf5\xc5\xba\xf2\xf8+8\x81kI\xd8G\xbf\xb9\xae \xff~\xd7\xa5Q\xaaD\xechY)\x89\xd8\xd1+\xd3f\x82v\x14\x91\xdfA]\xd0~\x87\x82\xf6S\xb8\x831\xc4\x0eJ\xd4\xe9\xb1\x8c\xc2\xa5\x00\x8fp!&G\xc9\xb9Q\xa0X\x98\x04\x8aw\x8c\xc4\xb8c\xe2@!2\xfc\xec\xb8\x80\xb2\xc2\x0d\x9ee,\xe4\x02\xc3\x15\x06\x08\x10\x02y\xf1\xd6\xbe\xe2\"G\xa301\xf5\x02\xa6\x9eJ\xdc\xffi\xc1\xa2Y\xf5\xa5*\xb3\xb8\xeak\xa0\xaa\xc4\xf8\x06Uw\"\xdd\xa0\xdb\x96J\x00\x15\x9a}hP=\xdc\xf0\xa8\x01\xdc\xcc&\xc4\x1c\"\xda\x85W``KtM0R\xdf<\xf22*\x95\xed\x82\x85\x11\x15~\xec?\x9c\xa0\xe1\x0coH\n\xba\xec\xbb%\xf9\xe4\xa0U\xcd\x0f\x0e\x8fF\xf6\xactu?\xde.}\"\x9e\x19\x03\xfe\xaegP\xa7\xf1X\x8b\x99\xea3\xb7\x0b\xc7\x85\xd4N\xbd\x8f\xb0 \xa9\xf7\x1a~\x84\xa4=\x02\x83\xe0o,\x0b&\xe4\xd2\xa6c0\x02)gF\x03\n\x05}\x7f\x0f9w\x88\xa3_K\xd9\xe0\xeb\xc3u0 #\xc6O\xae\xb15\xddG\x15\x8e\xba\xeaU\xdc\xc3\xfa$_\x84\x95\xd1\xfa\x83,on\x9a\x19\xd0\xfab:\x0c\xa3\xb4\x1aq\xd5\xc0\x05r\xe3G\x8em\xb1\xc7U\xf5F# \xcd\xb1Y\xc9\xdc\x11\x93\xb1[\x1d\xaf\xf6\x9d\xa4\x905Q\xe3S\xdd\xe6\xfc\xfe\xa2\xc6^\x9e\xb37\"\x19E\xa3\x01\x91xb\xacMT\xb1\x08\xb3SV\x160\xf1\xf0j\xb9\xd0\x84\xe7C\x91\xd89\xf6\xb2\x15 \xceIDh/2\xcd#\xbc\xfb\xb7,i\x15\xf7\x89\xa3\xcc\xf4\xad. \x8e\xb8x\xa7}\xbb\xa0\x0cmi \\\xd7\x1e\xd25\xa8XH\xff\xfe\x80\xb1lb\x9d\xa5\x80|}H\xc3\xb1\xc6\xdeF\\\x0f\x18\xd5\xd3\xd4l\xeeB\xd8\xf7x\x85j0\xe2\xd4\xb8\xf5\xd3\xd8\xb6p\x95\xde\xa6\xfejE\xd21\x04I\x11M\xe3\x1fr\x98\x13\x16\x17\xd4r\xdc\xa6\x9fa\xb3 \xad\x17\x99@dt{\x0c\xfe\xa1\x86\xf4\xcd\x86[\"\xe3\xf2\xcdGiZ\x7f\x15\xaa\x9bO0\xae\xcd\x944\xcc\xf9\xae\xbe\xc9v\xbc\x81g!\x8d\x9fW\x0c\xdan\x17\x13f\xe6\xfe\x0f\x9d.\xeeU\x1d\x15:\xc1\xa7h\xe3\xcf\x08\x91J\xde\x8eqCE\x02l?\xe6\"\xf7\x0d\xc3\x88\x1f-R\x1c\x1d\xa8RBLy\xd1\xe4\xd1d*\xa0\xa4\x06\x18\xda\x96\"\xb2\x887M\x8e*\xa5\xfcb\xd2\xcaQ\xea\xa1\xa7\x0f\xcf$\x8f\xa6\x1f\xaco\xfa\xc4V\x16\xae\xbdL\x03[\x03\x03\xed\xba\"\x0d[s\xa9tx?\xd6\xfc\xb2\xdb\xcc\x7f\xae\x8b\xf9E\x92D2\xb3\xd9\xab}I\x90\xac\xda\xa7\x0b\xab\x1bu1\x84\xdcv[uZ\xf2+k\x80\xfa\x99-\x9f\xb23\xa6\xf1\xdc\x95\xa2\xe6\xd4\x0b\xab\xd1s4\x87\x13\xba\xb4\xa3\xeb1\xda\xe8P\xb4\x8a\xe4Qj\xc7\x8ekN\xdb_\x1e\x0d\xa2\xdaZ\x89\x1a\xe1\xfe\xd0h\xcf\x9a\x93\xdcb\x91j\xe8\x9cg\xe2\xae\xb9I\xad\xe7A@\xb2\x8c\x9e\x7f\x18\xab\xb9X\xd19#S\xd36\xb5\x90d\xe1u3\x86\x8c\x99\x87\x95\x0e)kn\xe4~Vb\x0dw\x84\xb5\xac\xc4\x1e\xd7\xa4\xbab\xbe\xa5\xc9N\xb7a\x83\xcb\x81\xce\x88,\xb6w\xf6v\xb5\x8a\x91}Uz[\xf0\xe2\xaa\xe7\x02J\x9f\xecCu\xafD\xac\xd1]u\xe4L\xf1\xaf\x96\x9ei\\\xadV\x18\xb0\xb3\x0eS\xb4L\x9b\x93\xfcc\x92Dd\xaa\xe6\x87Xh\xe4\x1a7%2)\x1f\x97'\xeb\xb2\xc1\x1d\x9cy\x98\xde\xea\x13 \x928\x08#r\x91\xfaq\xe6\xb3\xd2O\x9e\xc0\x0d0'\xff\xe1h\xc72YOP\xeem\xa2l\xdb8\xccY6\xcfq;\xe3\xc5<]\xc34\xbf+i\xdb\x8ce\x18\xc3\xbc\x18\xecX\xae}\xa5\x88\xa54\x82\xabu\x1a\xd98\xa9\x9a\x81S\xb0g(\xb5\x0d\x08%\x19\xcd\x9f9.\xdc\xdaH\xfe\x95\xdf\x9e\x18\xc3\xb0?\xa8t\xe6z\xc0 \xfc(\xba\xf6\x83/\xff\xbb \x05\xf1R\x92\x91\\\x11{<\x16\"\xf5\x9a\xe3$\x0fgw\xcf\xa3H\xad\xbd\x1a\xc8\xa5nI\xdd5\xe3\xff1\x1f\xe7j\x98\xd2\x9a\xb2\x9d6\xb8\xf2\x95\xebj\xfa\xd7\xd8\x07\xa2\x19\xcd\xba=i[\xd5R%\x1b\x83v\xdb\xa8\xeb6\xe35\xe2]-\x93\"\xce1\x15\x06lA.\xdf\xb7V{\xd5F\xdej\xe1\xa2\x88G\xeb\xab\x96\xc5\xfe\x18\x8ev-\xc4\x9c\xe2\xb9C\x7ffI\x9a\xdb\xd7\x8e\x0b\xab\xcd\xcdz%Ud\xba*\xaca\xce\xa3\x1a6\xd7\x0b\x17tR\x04:\x9b\xc4\x06\x0fQ\x1f\xe7\xe8jE\xe2i\x18\xcf_\xf2\xd9\xcb\x9a\x0c\x1c\xba\x156\x0b\x96\xb3_xQ2\xbfHVo\xc9\x0d\x89>a\x88'c\xa0\xa3\x1b\x1e\xbd\xd6\x90\x9e(\xf4\xae\x82\"MI\x9cs\xc6\x0c\xf3\x89c\x9e\x03?\xc8E\x1b?3\x16\x0b\x8f\xe4\x88\x8d\xa2\x11g\xcba\n\x03\x8be\x03,VS?',\xb8WD\x97\xd4{\x7fI\xe8\xaa\x14\x0c\\\x1e.\x89\x9dt\x19\xab\x00\x87F\xe6\xadH:K\xd2\xe5g\xac\xf7\xcd\xec=\xa1\x84\x85\x9f\xde\xd9\xa1\x8bF\x0d\xcd\x85\xcct\xa7 *n\xa5F\xcf\xe2)\x8b\x0c\xae\xe7>{D\xbe#\nf \xf1\xaf\xf4\xaf\xedO\x82K\x97\xef\xc2\xe2:\n\x03\x11\xb8\xc6V}>\xfe\xd4\xfc\x95\xd8\xb2\xdf\x19D*R\x9c\x93\\\x1a\x1b\x9f\x90\xac\x03\x8d\xf1\xad8oC\x87\xc2-4I\xfb\xe0\xc4v\xb4\x14z)\x89\x88\x9f\x11\xbb\x89\xa0\x1c\x03\xd6b_\xb6!\xa4Z\x9d\xba\x99\xee@v]\xa1\x86\xf8\xd2\xea&\xb6\xa1\x02i$\x16$\xcf\xd1\x89>M\xc6N\x88\xc2-E\\\xd0\x93\xe2\xd5R\xa1k\xd6\xf3\xa7S\x8a\x9c\xc3x~\x91\xd8w\x8a8\xef\xb6M\xcc\xc9\xa3\x0b\x95h\xf1\xfe\x1e\x16\xc6(Y\xb3\x0e\xb7:\xa1\x88\xbb\x93\x8f\x1c=\x86!b\xf0\xf6\x95HKO\xd7\xc2]9\xad\xba\xd4v\xdaN\x19{\xc3\xa8<}\xf3\xe2\xe4\xd0\x04\xb5\x03-\xfd\x08\xb9|\xd4\xd7\xd6tWG\x8d\x82\xa4\xb3\x06/`\\\xed,2V}\x81^Sn\x8cL\x19\xee\xcb\x9a\xeb\xb4\xcc\x17\xd3\xb2`\x97t,7^\xbd\xaaf\x05m\xfb\x84\xe3\xb9\xcf\x1c\xb5\x97\xe75\xd1\xdbP\xf2\x16\xc3\xec\x05m3\x8c\xe7\xbcQFFb\xa0\x81\x9c\x0b\xe8PZ\xe0]\xb1C\x03\x8b\xbfGm\x08\x17Ji^\x9c`N\xbc!\xd2\x98\xdaQ\xb5\x8ed\x16\x15\xd9\xe2\x85\x02\xd5[\x85\x19\x8a)G\xceT\xca\xcd\xe5\x88/\xf5\xf3g\x16\xb1\x88\x8b\x94L\xc3\xbe\xe5\xb4\xe2>\xbd\xb6\xb0I^\xb0\xfe\x08@\x9f\xe7\xa9\x9f\x93\xf9\xddz}9\xa0}\xd1gOQ\x00\\\x92T\x87\xf8\xc95\xdd:\xbe\xf2Es\xda\xc5GO\xe9G7\xfa\x91\xb5M\x9a\x9f\xf9\xab\x1e\xa9T\x03[\xb3\xe6\\N\x97\xf0[\x8f\xd5\xf5\xd2\x8f\x7f\xc8\xc5\xb2\x06?\xc6&@\x1cP\x10\xc6\xe0c\xe8E\xf25\x87\xdb\x05II\xc1\x87\xe2c\x08\x85\x1c\xaeI\x18\xcf\xc5\xf6\xf4\xe8\xb8\xa6%5\x80\xfds\x19n2\xb2>z\x81\xd6\x19>]C\xce\xb0\x11\xdb{C\xc7l\xb4\xc3q\xc0\x01\x9d!\xbd*\xe9\xf7\x07\x17,\xbf\xa1B\x02FytP\x06r\x13]s\xeaxU\x9c\x8c\x87G\xa84\xc5\xd3.O9\xcc~@\xc1\xf2T\x17\x1f\x07_\x8d\x86\xea\xab\xd0\x14h\xa2\xd4b\xa0\xcd_\x861!\xe4\xf7\xa5\xf6\xa4\xd3[^\xc8tUSWz=@\xd7\x8e\x95\xf5\x0b\xdd\x1d%U|\xaf$\xe5Q\xcf\xe4\xd7,\xe2i\xa9\xa0\xa9\xcc*O\xab1\x8e\x0d]]\xcf\x83\xe8\xbb*D\xc4/\xd9;\xb1\x1b\x18\xd2\xac\x9d@hW\xfa\xae\xd6)\xe3\xfd\x97\xc3JR\xe8H\x86\x00c\xd4\x03U\xddk\x9d\xc3\x7f\xc4\xfc\xad\xd1\xf7\xc7oG\xb3\xd4\x93\xb3\x97J\xc4O}S&\xfc\xd6 \xd0\x9a^Bgx\xfe=\xc6( T\x0d\x86\xe6\xaa\x84\x94\x0bTu\xf2T;\xb6\x9f:.L\xaci\x98\xad\xe8\x01\xf2\x12=\xa9-\x17\xac\xab\xdcOylVz\x1b\xfbyx\xc3\xfc+1\x96c\xf6\x8a\xcd\xf7\xc7\x94\xd0gd\xca\x9eRT\xee\xcf\xd1\x08\xee\xa5\xa94B\x1f\xca\xdd%j\xd8p\xdf\x18K\xdb\x10\x1d\xad4\xfb\xd3ft\x03\\\xd4\xa7\xd8i\x96\x01\x8e{\xe3Y\x0c\x00\xec`\xf0y \x8f=D\xc5\xecX\xfa&\x9e\xf8\x9a\xdc!\x0d\xe8\x08Y\x1d\xe6B\xf5\xd4Y\x87S\xdd\xc31l\xb08\x8e1\xb7\xde\xfb\xa9i\xbc(i\x84\xbd&\"\x80\x13\xa0\xdcU\xd8\xb0\x9aR\xf6\x1bZY\x89\xc8\x9d\x1a\xc4\x81<\xb1\xbe\xfc\x9f\x9acN\xedL\x96\\\xd5\xa7l\xc5\xfa\xf6J\x9c\xea=$L\xcdAmh&\\H \xd4\xd5\xda,\xc9t\xd5\xc4\xabw\x05}\xa1\xea\x8fl\x87\xd9\xf8a\x88\xcc:7#M\x08\xafM~r\x02h\xadf\x9e\x95\xc6\x8c\xb4r\xa7Y\x9e\xac\xa4I\xe9\x00\xda\xfa\x80P\xeaGH(\xcfZ@\xc1\xb0\xea\x0bD\xbd\xbc\xc2\xda\xa3\x13\xa6\x80\xee\xbd\xb8:\xc1\xb1\"i\x86\x99\xc4\xbb\xd7N\x98}d\x85\x19\xdaj\xb4\xd3\xd6\x8c\xfc\xadv\xbf\xd4J\xf7\x96\x9a\xd6\xa6\xa7\x07\xae\x84z\x0c\x0d\x96\xd1\x0c\xf1\x0f\xd3\x84k\xa3\xd3\xeb\x94\x15\x95\xd0\x9aebB\x146\x89//\xb5\x12\xd1j_;.dU\xe7\x98kc\xe6\xf9\xc5|I\xe2\xfce\xe4g\xbd\x1dNd\xb8\xa8\xbe'5\x1f.\x84\x8d!b\xda\x0d\x8fn\x10\x93[\xf5\x18J\x99\xec\xbf\xfc\xd0\xa9\xdda\"\x16\xf9A\x9d\x98\x06\x8c\xa6.\x8f3E&\x18\xfbR>f<\x9e\x8b\x98\xa4\x19\x908H\xa6a<\xafgD\xc8\x17$\xc6\x8d\x87\xc9\xd2\xca\xc3\x0fD\xe0\x17\x1fx\x03\x06e\xb88c\xb9\xc1@/\xd57\xffF\x18\x19\x18\xcc\x04\xf4S\x13\xb5\x88\x85\xc0\x0cCC\x8c\x9b\x1f\x84}n}\xdc<\x9b\xa6\x0f\xac\xa2\x16gp\xbd\x03\x1d\xae\xdb\x17\x0c\xdb=y\x82LO\xb9\x1e\xe4w\xcdC\xbe\x85P\xc3\xd0>\xde\xf5]N\xde\xf2l\xdd1FWA\xcf\xf3\xea1\x1cWv\xcb\xeaV\xfd!\x99\xcd2\x92\xff@\x97@R\xe4\x90\xcc\xe0:)\xe2if\x9a]\xb5MZ9l\x82\x8d\xb6\xfd\x03\xc7\xd8\x0e\xdbs\xfd\xdb\xc9\xeb\x99\xd1\x99!juO!\xd5@\nuE\x80\xae\x08n\xe0\xb1\xee1\x05\xb3\xbe'\xad\x88)oCD\xb4\x00\xcf|\xd8\xbaU4J\xe2\xda\xec\x8f\xf5\xde,\xdd\x04\xa1\xb84\x9f#@\xcb\xe8\x0e\xf7\xf7\xcc\xed\xde*\xf2\xd9a\xdb\xd4od^\x98\x9dq\xbca\xc7\x8ei\x13 \xd4bIh\x83\x1d\n\xac+%\xee\xd1\xed$\x90\xce\xd3\x01\xdc\xc3\x82M\x9c\xde\xe2\x10\xf8\xe1\x8a\xd3\x81\xc7V\xea8\xdem\x1a\xe63/HX\xa7\xdcL\x8d\xe1\x98\x11\x91\x84rZ$\xb9)\x1bUJi\x08\xfag\xf3\x04\x86t`\x18\xbax\xb4\xb7\x07O \x9f\xa4\x1a=\xd7Z#\xd4$^\x85r\xdd<;\xa1\xbc\x95\x89jy^e\x96\xf1#\x0c\xbfB\xf8\xce\x82\xc8O\xe7\x842\xa8~\x0cK\xffk\xb8,\x96\x90\xa1;\xc7\xe0+\xe5\xb3}9\xcd\xf5p\xdfAWNJ6i)\x9e\x12a\xdf\xf7\x1c\xd4\xa2u%J'\x8b\x9c;JH\xcb\xf5\xdb\xb4\x0f\x92\xd6\xdasHe\xbc0\xfb)$,\xd0H\xf31\x9d\x88\xfb{ \x06\x14/\xf7\xb4\"0\x9b\xbd\xd5\xb8\xd6W\x8c\x9e\xa5\x13r\x80\xb4\x9c\xdb\xa1\xc0\xa9\xcd\xb2'\x9a\xedU[\xbe\x1b\xc3\xa3#\xa7\x14\x0d\x1bOB\x14\x88Z~\x16\x84\xa1\xa5\x17\x8b\xb2\x12\x91\x9f\x87\xf1\xb0\xb5\xc8u\x18\xfb\xe9\x9d\xa1\x08H\x12(\xfdq\xc2*A2\xaf\xad\x95\"\x9fm\xb5\x96`\x84vg/^\xdb\xc41\x02\x1c\xaa\xe6\x82l\xd4\xde\x9f \xdb\xea(\x91\xcf\x86\xfb\x11\xe9*\xb3\xd5R\x08\xaa~\x8f\xe0\xc7v\x08.\xc8\xd7\xeeZbx\xf6\xec\x19\x18\xac\xb6\xf9t\xfa\x19\xd9\xdf\xed\xae\xea\xb7.@\n\xa32cE\xa8\xedpzO\x0cp&\xcc\xc6\x1d\x95;\xf5\xe8f.\xcf\x8f\xd6\xf8T\x95\xbe\xeb\xd1\xd7M\x1b\xc7\"\xf6\x16\xd1F\xc6\xe7riz\xfc\xb9\xe2\x10L{5\xba\x94\x98*\x83\xc6\xa1B\x01\xa4\xa4\x189\xc0\xb64\xd3h\x10\xb7\xc4\x94;L\x99\xf0\x1cOn\xe49\xe1\x99,\x91;\xc575\x11\x1d=\xdd\xb7\xca'\x87 b\xa1I\xcf\x1cV\xe1f\xecB\x98\xbd\xf7\xdf\xdb\xb1S\x16K\xf8\xe1\\\xca\xb7\xb6`\xe8\x08\x91\x80(T\xbe\xdcDZ?\xa6\x07 \xe9p\x84@\xcb\x95V8\x00\x8f\xfe$7\xdd\\\x19@\xa2\x8c`m1\xa3\xd7\xcc\xcdm\xf4k\xafk\xf9A\x8bH\x8c\xd9\xdd#\xcf>K\x93%\xe5\x15S\x07\x15\xc35\xae\xac\xc6J\xe5\x15\xfb\xb45\x841\xcc\x95\x15eX!Z\xe1\x13\xaf8\x87'H\xeb\xb8\x069\x83\xe9\xd0\xad\xc4\x17\x92\xf6\x97\xc7\xd9\xc5\x08\xa4\xa7\xadE*\xf5\x04\xe7Z\xb5\x85#?\xcb\xdf\x18>\xc0\xb1O\xf2\xcb\xb6\xd1ky\x97\x1b?* {\xc1\xae0\x08Q\xce\x843Z\xfd\xe8q\x15\xfe\x06d\x12\xb2\xf0l\x86\xd8o\x85\xb4p\xf5%2\x89\n\xd6O\xb1\x14\\\x95\x89\x14\xd8\x89\xc6\xf8\xef\xb4\x8a\xc6\x99*h\x14\xe9!~\xb8q\xa1\x15>\xe0gY\xfd\xd1\x96\xf4\xcc(/@\xb2\xb6\xa2\xd8GL\x18X\xddw\xee+\x9fEO-`\x9bEQ\xe5\x7fc\xfc\xab\xd9o\x8dG\x8a`\xd6\xd4Q\xde\x8dai\x92FX\x00{\xe2\xa5\xc4\x9f~~\x13\xe7\xc3\xfd\x17gv\x0e?\xea\xdc\x18\xf5\xfb\xdc\xa8E\x16\xce\x8e\xa6A#M\x87j\x98#\x08\xe1\x18\x8a#\x0877\xf5L\x19\xf0\xc6px\xa1\x83\xfdG\xad4OQ\x1cp<\x1c\xc2\x16\x04\xadr\x1dQS\xf9!]9\xb4\x9b\xa1\xe3\xb2\xcfa\x93\x03(+\xe7-\xa0\x001V\xc9\x91\xec\x16K\"\xc1j\x0ca\xeb\x84\xf7\xc6\xe5P0 g3lb\xd8\x84\x0c\x9eAQ\x9e$\x05lA\xe60\x7f`\x84\xda3d\xe6\xc2\xad\xad\xb6!\x97\xc4\xf3\x8c\x07\x0b\\1\x1ep\x05\xc7\x90\x1d\xc1\xaa\x0d\xe8P\x03[{>\x1cCz\x04\x9b\x9b~\x1b\xfa\xa0\xc7\x84\x9c\xf7\xa2\xb8\xce\xf2\xd4\xa6|\x82\xef\x02O\x8d\xa1_X8H\xa4\xd6\x8a\x8a\xa0\xf0\xf5e\xc9\x84\xee4f\xba\xdb\x03\xe9\x89\xcaz-\x9a\xeb\x8eE\xc3+{a\xbf\xa6\x1bJ^\x16\x0e\xaa\xe4\x9a&@\xa6\x96\xae\xfa\xb6d6\x18(\xeb\x94smM.]Y\x14V\xb2\xf2L\"\x963\x87K&8\"r\x02\x94\xb8C\xa2\xafK\xa8\x98\xaf;\xe8\xdb~\x83\xae\xc1\xa6W\xc5g\xfd*~a\xff\xb6~\xa7\xbf\xf6\xad\xbb\x97V\xa3\x92W\x96\xde\xb6|\xd6\xa4\xadF\xa4\xa0\x15\x1b\xb6\x9d\xd3\xd3i\x84i!\x1c\xbe \x19+!\xcd\x9f\xcf\xf9M\xcaO\xc3!\x8f\xdaL\xd1\xc6\xde\xbe\x0b!\x9b\xf6\xc4)\x7f\x9a4yF\x94\xfc\xf0\xad\x0b\xfe\xbc\x8d\x9f\xad\xb3\x10t\xd8q\x8d\xc5\x84SH\x91\x07yq\x97\x13\x91\xf1\x9dbU\xf5!WQ\xe5u\x9b\xae\xb6~\xbdl\xeb\x17\x05\xf3;?_x\xcb0.i\xc6\x1e\"[:\x9f\xe8\x1aq\x04 \x8an\xdb\xd0&\xa5\xbd]\xb4\xafu1F\x07\x99$-\xc9\xe5\x03\x11,\xc1X\x82\x9e\xe0\x11e\xa5w\x9e\xc2)\xec\xc2\x98\xdd\x8dv\xe0\x14v\xf8\xdd\xf0\xe9\x10Na\x04c\x93\xe8\x05iE\xd8\x84\x19\x1c\xa3\xb0O\xc8\xeffm4D\x9f\x04\xb8\x11\x1c\xc3ptX\x12rQ\x8b^ \x04\x9da.\xd2'-.m\x8er\x19\xc3\xa7#x\xc2\x88X2\xa1\x83\x1b^:L8@\xd9\x17{g\x08O r\xe0\xf8\x18\xf6\xe1\x1e\xf6w\xe0 %^\x9f\x89\x0cb\xd8\xdd\xec;t\xd7`\xf6).\xb9\x7f<3>\xde\x8d.]e(!\xf6\xbe\xfe\xcc\x97F4\xdc+G4\x1c\xc1=\xd8bL\xf2\x10}:\xc4\xd1`\xf7\x80\x7fw\xcc\x13\x96\xdd\xdf#9+%x\xfb^\xe3\xdf}\xfc\xf8\x8b\xf2ng\x0dh\xd4\x9f\x15\x06\x08\x1d*\x10\x92@\xe6\xd7AV8\"\xef\x1b\xad\x89\x82\x8c\xa5\x92\x1bI`\xd2\x0eQO\x12\x97\xc6X\x94/\xc2\xcfi\xdd;.\xee\xe4!\xc5s\x81\xdc\x9e\x1d\x94i\xe4\\H\x19>\x0f\x98\x18u\x00O\x00\xf3\xc5\xdd\xb3I\xe4\xdc\x0c\xcb%w\x0f<\x95\x1cer\xc4w\x18\x1bg\xf3\x04fM\x8co\xc2\xd2\xdd\x14\xc9M\x19\xa7\xa9M|\x8a\x8aq\x8a^\xbe\x94$\x9f&\x1d\x1d\xb71>\xe7b\x10\x9d\xde\x02$\xdd\x85\xa5\xc9V&\xaeT\xaf\x0c\x04(\xc3\xa2\xa4\xa8=\xa4\xc7\xeb\xe6I\x9f\xce\xf0\xe3&u\x99j\xeeK\x07\x11\x157\x81l7\x8eO\xf9.\xf7\xb8b\xe9\x84\x1e\x0e\xb9w\x1e%\xb7\xe5\x93\xf6y\xd8$U\x84N\x82\x12V\x0dC\xc0\xba\x95y\xa8\xba\xb37\x1b\x1e8\x90{o\xde\x9f\x7f<{yq\xf5\xee\xf9\xffw\xf5\xe2o\x17g\xe7t=\x0dL\xb2\xb8\x139\x89\x0e1\x98\x05\xe9\x9fwy\xf6\x18\x83\xdf\x0b\xdf\x1a\xc5di\xd8a\xa2R\xb3J2\x9fie)\xbd\x00\xb0\xe5\x18N\x92\x1e\x01\x13\xc4\xc5{\xb5\xdb\x94\x1f\x89K\x8f;\x1e\\\xd8\x1dqZi\x96$\xb6c\x14\x87\x12\xca\x901K\xd3'O\x84'x\xf9\xcc\x1eb\xc2\xbcJ\xa9\xd8\\\xaa\x9d\xd9\x0d\xf8\x1864\xb2\x93\xfa\xbab\xf1u\xbe\xbc\xf3\xbf\x96\x91\xa3|\x1b\x05\xcb\xab$\x89\xce\xc3\xdf\xe8t\x1e\x0e\x9fb\xf2\xa1+\xeea\xd3\xb9\xe2\xb5\x13[sJT=\xbf\xb8`\xbb\x87\x1f\x8cT\x7fd\xf3\xf0EZ\x0b\xcc\x16!\xb5\xec Y\xeb\xa3v]\xd1\x91k\xcb\xb8\x06\xfb\xc9st\xf5\xa7\x0d\xb1_\x18\x1cJ+!\x13\xdetY\xa9Xa_hmM\x98\xe1K\xdd\xd5\xad\xcd\xccAV\xec16\x08\x02ZGc\xdf\xd43\xd0\xc9\xb5\xd5\\j\xb5\xd0B\x0c\x933\x0c\xd2\"\xd5\xa5\xbc\x07\x99\xc4\x97FvK\xc8\xa5j\xc7\x83\xad\xcb\xb3\x0f\xdcV\xdc\x84\xee\xcc\xbd0\x13\xe7>7F1\xb3\x812\n\xf7\xff\xa0\xf9\xa3\x97\xcf\x8c\xb9Q\x13\xce\x19_\xe1 \xdf\xb1\x16\xa1Z\xb7is\x91J\xce\x1e'\xb0p\xa1F\xe9I\xc7\xe7\xc6\xa0\xfe.\xbb\xf5W\xc3\xfd\xb6x\x9d\xa0\x06\x0fh\xd3\x13\x11\xad\x9eH6\xd7\xe4=\xc9(\x89]\x99\x0e/\x8b(\x0fW\x11\xa1\x10\x1c\xeeo]\x87\xb9\xf6X\xac)\x1a\x06Gh\xbeK\x8e\xd8\xf2\x1b9p#\xe2\x9f\xba\x98\xb4R\xc7\x7f e\x82\x1cB\x04\x04\x10\xeb`\xd9\x19}W\xb0\xec~#XvF\x8f\x02\xcbn\x03,;\x8e[=\xa2`b\x7ftZ\xb85\xa0\xb5\xbf\xfb]\xa1u\xf8\x8d\xd0\xda\xdf}\x14\xb4\x0e\x1b\xd0:\xd0Ck_y\x9d\xe8\xda\xf9\x83F0\xcc\xe6LX}a\xfc\x16x&\x8f\xa7\xf2(\xb1\xfa\xd5\x8b~S\xb1Z\x890\x90\x90\x1f\xa2\x19\x1e.\xba>M\xa0\xd9(\x96>>\xa1\xbd\xe5w\x9d\x1f\xe3\xeac \xa4\x89\xe4\xcc%\x19(\x1b\xa5\x1b\xd0\x83\xee\x14\x17\xef\xc5\xc7j1\x9b\x9c\xac\xa0\x0f\xb5\n\xbd(Vq\xf1\xc6_\xae\xd3x\x1b\x9d+.^\xef\xf3u\xeam\xa5\x8e\xa1\x1f\x85,.\xde\xfe\x87u\xda\xef\xb4\x1d\x86\xaa\xe2\xf3u*n\xa1\xc6\xa1\x17E\x0e=\xa9rX\x872\x87j4\x17\xfdF\xd3I\xac\x03\x94v\xd1Z\xc6\xfa3\x8b\x0eUz+\x8e\xb51\x14\xd4\x8b0w\xc4M\xb0\xac\xbef\xd3\xa0\xa5\xc9\x1eD\x0c\x12\x1c\xac)\x0cI\x1d\xa9\x93_\x0b?j\x8f\x1f\x01ZiC\x87lA:\x0c\x85\x8df\xeb\xc1\xc3\xcf\x80\xfb{\x8e,KY\x88\xde/\\\x19E\x18g+L+\xd6\xefd2)F\x98\xffRC\xca\xdf\xdaqq>=\xe3f\xd3%]Q\xba\xf3 \x8e\xe4\xfe\x92\xde\xd2\xcf\x83\x85\xbd\xed\xfd>z\xd8\x9e;\xde\xdf\x930\xb6-\xb0Dx\xb0\xb22\x9e\xec\x89\xa5P\xf7<\x0f,\xc7q\xc1:\xe6\xf4\x06\xae+]6\xf4:\\\x0c\xf2\xa4N\xa3\xf6\xef?\xd5*\x8fW;YU\xcfmf{\x8e\xda\x11\x0e\x90\xb1Z.-\xed\xb6\x94\x17\xcc\xd6,i\x9c\xa8\xb9\xf0u\xa7'pY\xef\xfd=\np\x06,\xd5\x9cr4\xeb)>\xee\x8f\x9e\xd2G\x80\xf6\xd1\xa6\xf1\xa6\xf0\x8c\xf7'\xa7\xbfZ\xdd\x84\xaa\xf2\x9d.\x04Je\xe6RH\x07\xb8\x10\x97\xbf\xd2\xf2WR\xfe\xaa6_/\xf1^\x88\xae\x03[t\xf5`\x0e,\xd8\xa2\xcb\xa9\x90%z\xa1\x0b\xbe\xc3\xcc7\x10\x9c\xa5^0\xe1*\xd8\x9ae\n\xd3\xec\x0e\x8e`\xc6\x0ci77gf `4\x991 `0\x99\xb5J\x00i7ia\xd6KZ\xda\x8c\x83\x1f!\x01\x0c\xe1\x18\x8d\x90Q\x02\xe8\xc31\x84f \xa0\x8c\xa5\x82\xa8\x98\x92>\xb1\xc6\xa4\xb6\xb8q.\x82\x92\x9b\xe3\xdbf z\xd3\xba\x7f\xad\xc6\x96\xf5\x90\x1a\x98:\xaf\xad\x11\xc9\xe4\xff[\x1b\x1a\xb66\x84\x1e\xfaz\x0cf=\xbdp\xdf\xd4E\x10\x86\x1cm}\xa5\x10?X\xac\x0f\xda0@\\X\"\xe2\x87\x984\xd99\xba\xa8\xf1\xe5\x1f\x1a\x03\x03\xa9\x91\xfe\xd4\xd8t\xa6\xeacz&IB\x07s\x1c\xcc)\xf9\n\xb2x\xa1'D\xff\xde\xc1\x0c\xe5\xa5O\x7f\xce\xed\xa9\xf7p\xc2\xf5z\xc9\xda\xeeU\xadud\xaf\x17\x17Fu\xc3\x1d\xee\x8e\x96\\\x02\xea!\x9e`P\x9e\xe3c8\x84\x1f)\xfd{\n \x8ca\x08[\x908\x0e\xdahk^\xf4\x1a\xf0\xfb\xb5\x06\xbc;z\xba\xfbt\xff`\xf4\xf4;\x8dz\xd7<\xea\xbc9\xac\x1d\x1c\x16\x03F\xaf\xc1}\xea\xbd?\xbeea\x99\x96j\x0b>y\xf4\xfa|U\x1bQ[J\xc6\x90\xeeB\x04\xc0\xc0e\xa0v!\xe1<\xae\\\xc7h\x87\xbd\xa3\x10\xd8\xed\xd5\x87\xb7\x8f\xee\xc3\xa1\xa1\x0f{#\xf6\x8e\xf6\xe1P\xe9\x83|\x97\xa9t]\x1f\xfb\x1d\xe1\x15\xd7OI}\x02\xff\xfd\xdf\xc4U\x83`\xe6p\x8a\xa9Z\xfe\xfb\xbfs\x97\x9d\x14,\x0c\xe5&=\xb5\xcb\x1dBD\xc4\x11B\x0f\xf6\xf2Q\xeaT!\xc9\xec\\\xf9&\x17\xdf\xe4\xe57\xb9\xf4\x0d)\x9f\x10\xc7`\x03\xecT:\xcf\xd2\xea\x1aaa\x0c\x90\xb9\x96\xfc\xa4\xa4\xc0`K\x8d\xcb/\xae\xb8\x0c\xf3\x9b\x08q\x86\x81\xbb\xa81\xe7\x9cNH8\x19\x13S\"\x80\x0d\x04)\x00\xd2\x95\n\x07\xaa\x85V\xf7\x80P\xd8\x0f\x11\xd5\xe0\xedYO\xb9\x1a\xe1\x92\x19!\xb8A\xaaM\x90\x13\xb2|\xa3\x05\xf7\x89\xe56!\xdcgoX\x12G\x9b\x9bt\xd89\x17\xae\xffxB\xe9\x1e\xe7\x88\x13\xb5\xec\x1b\xd8\x84\xf0\x12~\xd4\xb9v\xebIY\xfd\x88_\xfccF\x0c\x9b\xb0\xb5\x95\x8bq\x1f\xe1\xd2\x1et\x0c\x97~\xf0\xed\x03>\xec\x83\x10\x84\xc6\xa9\x1c\xe3\xd0U\x15\x1cl\xe2\xfa\xb48\xdco.\xab^\x8d\x8e\x0c\x8drK\x0f\x04\xca\xf0\x12\xcf\xfc~\xfdhN\xf6\xb7\xf5\x03\xa9\x8dZg\xfa\xf4cg\xf4Hx\xec\xaa\xfd\xb0\xcd\x00\x91\x1f\x8d\xf0\x11\x8b\xf37\xdc?88\x18\x0d)\x17Q\xbe\xdf\xe9\xd9\xedG\x82\xaf\xd1\xedF\x1f(gc+#\x18\xee7\x87P\x1b\xd5\xcee\xab\x08\x9fv\xfb\xff:\x8c\x06\xcfN\xf8\xe7\xc3\xd1\xa1\xc3E\xe1[\x9cv\\%\xb76\xa5\x12(X\x1d\xc7\xedF\x07\xff\x10\xf4W\x03\x8c\x84\xdb\xd2\xcb#$/\x9bX0T\xb0`\xda\x0e\xa4P\x03\xa4\xd0\x08\xa4\xb0\x07\x90\xbe\x13\xcaD\xdf\xebr\xc5\xa3:\xefG\xc0\x88\x10[\xd2>@\xaf\xd3\x9e\xd8u\x0d\xe4j\xc4fM8\xde\x88\xd8\xaaF\xe4b\x84\xfd\xce\xe8`\x9f\x0e2\x86S\xc6\x08\x0d\x86\x07\xfb\x03\xb8\x87\x18\xc6\xdd\x14\xc8\x1a8\xfa\xd1\xc3a\x83\xb8\xaf\xa1\xf0?n8\xdf\x0f\xd5\xaf\x87\xe9\xebx\x92>\x1b\xed\xf6\xean?\xe8\xf7\xef.\xb6\xdc\xect\x0f\xe4\xde\xd5\xdd\xd7Q\xe2k\xb0\xfb\xe3\xba\x9b`\x95\x95\xa2ac \xb8\xbe^\xdd\xf8^Pktc\xd8\xb7\x1b\xaf\x92\xe2:\"\x8f\x04\xc7ag?\x06\x82\x01\xed\xd7\x8fG\xc2\xa3\xbb\x1f\xc3>\xfd@\xe6\xd9\xc8\xcd\x18\x848\xc8\x86n\x92\xda\x01\xc7\xacXPm\xfbF5 P\x0f\x93\xd8\x81-\x8a\xf2M\x8e(\x899\xc6_\xd8\xe2\xf4\x81\x1b\"\xafBN\x13AI\xc4\x8dc\x92\x15eD\xc4 \x10\xd8\x86\x84\xc9\x81\x8c\xe8\x8d\x16n\xc5b%$\xb5d\xc2?\x10\x921\x161BSc\xa4$AS\x88\xcfJ\x88nm%\x18 \x8e\x93\n\x1a\x90&\x02\xa4\xe1w\x03i\x83\xa8h\xb7`\xd1\x00U\x85%E\x16{{.\xeaQ\x8c\xf9~pv\x10\xe4\xb3(IP\xd2\xcd\xb1\xb5\xbc\xca\xb8\xc9\x7f\xaf\x81\xe8(\x90o\x1e\xcb\xc8e\x92\xe3\xb6\xd1\x9cj\xb6\x87[\xcd\xd9\x90\xcd\x19\x8aH)M\xf5\xf7Z\x03,G*=|z\x0e\xb27\xa5\xfc\x07\x0e\x92\x8fF\x1d$\x1f\xbbf\x90\xc3\xb5\x06\xa9\xa3V\xbey\x90\xbb\xae$\x12\xef5RF\xb3\x88\xd1\x8ev\xa5\xe1\x8e\xaa\xe7\xc3}\xc3\\k\x963\x85\xcc{\xfd\xf4\xb7\x92E\x12d\xfe\x80\xe9_\x1f2\x06\xa8\x0c\x0dP\x19\xe9\xd7\xccN;d\x86\xbd!\xb3\xe6\x11+\xa4\xc72X6\x8c\x06G\x02\xd57\x8e\x07\x0c\x1d\xad\x97\x9d6\xce\x96\x84\x1d%[\x1a7o\xbd=\x18\x9e\xc5\xfa\x83\xa5#J\xef#Op_:n\x88\x10y3\x89z\xc1~\nsLv\xb6\xd3\x01]\xe2\x97\x05\x86(r\x95s\xdf\xa6\xa7\x94\x0f\xcf\x9e\xc1\x80\x9e\xa3\xc5w9\xaf\xd6\xa4\x00\xfeO\x99\xe8\x16*\xe2\x9b&[\xcc\x85D`\x84\x15\x81\xb1\xf6\x8co\xfecf\xfc\x0f!P\x86\xa3\x03\x17\xb6\x86\xa3\xc3\xb5i\x14R\xd3!Q\xd02\x9f\x84\xe1\xb7\xd0/\x7f \xf9\xb23:\xd8\xa7cE\x19B?\xd4\xfe\x07\xd20\x7f \xf3\x88\x81\xfe\x81t\xcc\x1fH\xc6T\xf9\x10\\%\xedA\x8f!\xb7\xcfm\x0f\x12\xa7F\x12}\x13A\xf3\x07\xd23f\x10\xd5\xb7o\xcdHB\xec\xe2\x1eP\xfc'\"~\x0c\xf2\xa7v(\xbeR\xe6\xac\xcb\xab\xa2ji\xdd\xf9RZ\x1a\xf6j\xc9$Ejo\xea\xedc\x06e\x12\x14\xad\xd5T\xe7\xa8\x82du\xb7\x1e\xddR\xa5\x9b\x1c\xa0Cd\xe9\"X\xd9\xd5\xe7\x8a\xa7\x97\x94\xa5\xa42E\x90\x0b\xd0\x0f\xf3\xb2F\xae\xe2HK\x12\x10\x9d\x17\x98\xf7eWz\xa7\xb0\x11 \xa5\xea\xa0\xdc\xad\x8e*\xf26\xc3\x9b\xdcO\xe7$?\xcf\xfd4\xef\xce\x86Z\x9a\xf1\x003\xd6T\xba\xa1o!K\x8a4 k\xb4\x90\xb6\xf5\x97\xd5v\x16O\xbb\xebJ\xeb\xce\x17%\xf4\xeb3*\xd9_\xe5\x18{iK\x9a\xa8\xda\xcbM\xadU.\x12\xb4L\xbf\x95\xea\xe3\xd6\xe3\x1cTn\xa8\x18t\x99+\x07\xb1\xc5\x96\x904 \xb0t \xc3#HxV\x83\xad-4\x0bK`\x13\x10I\"\xae\xa3w\xba\xb8/\xa5\x93\x11eA\x86d\x07X\x18\xaf\xf5\xb2\xfe\xb105\x8aY\xda\x1a\xedk\xf3\xb9d$\xaf\xf2\xb8\xd4Lubf\xf6\x14:\xfa\\\x98B\xef\xd7\x86\x08fa\x14\xad\x87\x084NWkg\xb6\x16\xe9 0\xa4\x06?6\x95\x1d\xa2M\x9f+\xe1\x85\xe6'.\xcf\xba\xd1\x95\x19 $\xde\xaa\x16\xb0\xdcdy\x04\x18\x80\xe8\x18m\x8c\xc5Am\x88\x8ff\xce\xb7\xaa&\x9b\xd1\xe4\xc33\xf9\xb3\x97\x19\xbf\xfb&\xf36\x80\x1d\xdb\xad\xe7\x02NM^\xc5&\xcf\x8fF{\x95\x12`:-\xc9\x9b)\xcb-\xe2T\xe9\x17a9\x00n\xab\x87>\xca\xb5A\x08\xbc\xe8OB\xf8_P\xaca\xb3\x977b\xe4\xd4\xfb@\x07\xfb\x19N`{\xf2\x9f\x9b\xbfl\x0f\xb6\x9e>\xdf\xfa\x0f\x7f\xeb\xb7\xad\xab\xcb\xed\xb9\xc9\xf5\xe6\xd7\xf6\x10\xae\x80\xca\xd9S\xb0\x06\xe8\xf4_O\x13:V\x1e\xd4\xfbfh\xf0\xb5Q\x01x\xa3\x0f\xd0\x96\x03\x8f\x8a3\x84\xed\xce\x1c\x97\x95\x83L\"\xc2\xf3\xeb\xf2:\xb4\xa7P Y`\x9bFb\x07\x07\x9ea4\xef=qD\xef\x1d\xec\xec\xee\xb6!\xdc\x90\xe7\x873\x97\x80r\x93>\x83\xbd\xfd\x9d\xe1\xd3\xae\xc2\xf4b\x89(vh\x7f\xb6\x86\xb43<\x99\xc4h\xe7\xa9\x0b\xc3\xa7C\x17\x86\x87O[\xd0\xba\xb8\x82$\xce\xc3\xb8\xd0\xe7R\x12\x979{\x10\xf0\xbe\xfb R?\x19\xa5z\xf2\xf5O\xd4{\\$\xed-u\xb6\xd2\x9e] \x97\xc9\xfe\xce\xc8\x98BP\\\xfd\xa0\xe2\xfe\xc1]\x8e\xb9\x8f\xc6>lR\xban\x8b\xa7 8>\x86!3t\xd9\xe2\xa3\xd1\xd6\xc0O\xc5\x84\xf3==\xc6c>\xc9\xab\xfd\x1b\xb3D\x15]\xfb\x8c58d\xd9Y\xba\xd2\x1f\xf0\xce\xc4\xad\xe3\x10\xf37\x1a\xec\xf6l}\xb4^\xeb\xf0\xec\x19\xe62\xc0\x00\xdb\x98\xd0 \xa6w\xa3\xc3^\xdd\xc2y\xea\xd7\xaf\x9d\xf5\xfb\x85I\x17F\xa3]\x16\xc2\x03\xf6\xe1 \xed!\xf6n\x8d\xbev\xa0F\x1c\x07O\xd9\xa0\x8b3 \xd2i\x05\xc9\x94\xc0*1x\x91\xc9U\xb2\xf1\xee>b\xbc\x87t\xbc\xbb\xe4\xeb*I\xf3\x0cN\xe0\xf7\x07\x89v,\xc1\x106<\xd2\x1b\x9b7#\xf9E\xb8$I\x91\xc3\xc2g~\xa0\xd7\x84\xc4 B\xe6W\xf0~\xd04\xe0w7\x10D\xc4O\xbf\xa1\x89\xa2\xb9\xe0\x19n\xc5\x18`e\xef\xab\xe8\xc2\xe5#\n>\x95o\x16T\xe3\xc9 \xf3\xe2\xda`\xf9\x8e5\xf5\xd0C\xb6z\xecv\xd4\xab\xcf\xb7!\xaab_\xd4\x97\x81\xc8\x0f\xa17\x955\xa6\xef\x10U\xb2\xa5SF\xcb\xd79\xfc\xb7\xb6\xd0\xac\xab\x94\xd2v\x07\x0f\xa8&l\xa3Z\xac\x8d\x95\xa0\x1d\x03f\x9d\x11\xdf\xc8\xbc\xa6\xb4\x10O\xe5\x9b\xb1\x8av[\x13k\xd0\xeaU4-\xdf\x19\xe6\xc9\xd4\xa9\xda\xe2=\xad\xdf\x8e\xd5,\x89\xad\x1d\xa3M\xa8Y\x15\xcb_\xb6\xb4\x9a\xe8\x1e\xe7\xa9\xcd&Jb\xb3\x00C\xbf\xd4\x9f\xcdx\x12\xda\xe6\xc6Y5f\x04\xb3\xb7b\x1a\x0b\x9bW\x05\xa5X\xe0\x14[\x14\x01\xc4\xed\x08\xc3\xa7b\xdd.D\x92\xecuj;\xed\xfbu\xdah\x16\x89\x88\xc0\xc4L\xd2\xb3\xad\xb0W\x1a\x8a\x01\xfb\xd8\xc6KR\xa6S\xf4\xed\x083\x11\xe9\xd79~@\xb1d$\xe0\x8aA\xc4x\xf6\"\x9e\xf2cv\xe9\xa5El\x9b<\xfc8(\xe4&;v \xf0D\xcfl\x8f\xea\xe6N\\\xfd\x8ev&T\xa7\x98K^\x86U\x1a_\xe9\xa1\xdd\x16P\x12Q \xab\xc8G\x14\xc8b5h+\xa5\xabV~\xe1\xf6o\xc6\x8c\xc2\xc4\x95\xda\x06\xf9\x12\xf4\xc2^\xe2\xean\x08d\xf2K\xc6\x9b\xe6\xe6a\xad.@\xa3\x01\x8eL;\x1a0\x8f^\xfb\xe6A\x05\xd8C\xebN\\h\x858(\x0b\x9c\x15(9\xe1B{\x96\xe6\xe8D\xcaZ\xaa\xab\xee\x86n\xec\xaa\xc5\xc4\x8b\xc9\xd7\xfc\"\x0c\xbe\xb4\x12\xa7b\x9fR\x8a\x80\xd1\xbc\x8d\xb8\xcdM\x93!\x94W\xa8\xc5\x9e\xc1\xb0 \xce\x12\x17\xc4\xcc'\x93\xb2*\xea\x97G\x10onRr-f\x86XR\xe8\xe8F\x98\xfd\x883\x1b\xe4V\x80\x0fe\xf7\x98\x15Z\xa2\x07\x03\xfa_aO%T\xe8\xc2B\xb6\xabG\x00\x9b\xcfF> <\x1c+[\x8e\xd5\\\xd4\xaaM\xbc<\xcc#\x0cJz\x9d&\xb7\x19I-\xfa\x90\xff\xe6a\xf2\x13\x8f\xc47H\x07\xd2\xdf~:\xbf\x11y5\xbd\x1b\x92ft\xfeX$\x93\xf2>+K\xe3\xbb\x1b\xfcn:}\x1bf9\x89\xb1\xde\x1b\xf6\x12\xdd\xd1\xd9\xef\xd9L\xfcL\xc92\xb9!ja\xf6\xf4y\x14\x89\x17\x99xC\x96a.~\xafR\xb2\"q\xa3%\xfe\xf8C\x1c4\xea\x8d\xa4\xea\xccK\x8d\xef\xc0\xc9e\x1dz\xd7a\xdc\x99\\\xa5A\xb5\xae\xd2$ YV~\xccC\xa4HA\xf1\xea\x8d\x04\xb7\xd3\xb6\xf9\x16\xac\xd2\xb6\xa5|\xb6\x98\x86\xe9\xe3z\xc6>\xed\xeaW\xb1\xf4\xb3/=z6\x90\xb6>h\xb8\x10E\xc5o\x15\x19AEO\x90KL\x9c\xcc\x90\x98G\x84\x1a\xa0\x8a\xd8\xda\x90Uu:}\x0f\x06\xb1\x15\x03\xf5\xcb\x8aU\x19C\x83k|\xc4@\x9aH/\xd5\xe2\xd0\xca\xbe\xe6\xa4\x0bk&f\x94\xd8\xc0p\xc7'0\xa4\x88E\xd2\xdeT\x98jx\xc9\x835\xc8\x8f\x9a\xf4DlLx+duZ\xb0\x19\xd7\x07\xa8\xc2{\xb5\xd7Lt\xcfP{\xea\xa8\x02|\x9fb\xdep\xe2\xd7\xb1\xaeof\x961\x17\xd6\x86\x88\xa2\x19\x0b\xd0 \xc3&\x91\xa1\xa1GnHzW\xcb\"\xdd\x95\xda\x0c\x19\xb7x\x92^j\xf8\x1bts\xb1\x19W\xcdp2\x9b\x04\x17B\xc7a:\xb5\xd05s\xf2Z\xde\xbb1\xf15\xc2\xb5 \xc7\xb8\x84cN\x0f;8\xc5\xe0\x14C\x1e\xd98e\x07\x1c\xcb\xb9 )\x85k3\xa9\x9d\xe4-\xa0\x16\x97\x00]\xfb\xa6\xef\x03}6\xc4Y\x9a,[Yv;4\xcc\xc3\x83\xf1\xb8\x8f\xbc\x94dE\x94\xbf.\xe2\x80\xae%\x17\x9f\x04\xc9rU\xe4~\xce\xd9\x94\xce\xcd&6Z\xe3\xe5\x03\xab/#\xf9\xa7GWJgH[q\xed\xa1L\x0c\x88_\xb9wuE\xb2w\xc9\xb4@\xf6\x8d\xf2i\x98:\xd6/\xa2\xfc\x1dY&,soB\x9f\"\xda$\x02\x8b\xbedH\x94\x11\x1d\xe5\xcb<-\x82\xbcH\xc9\xb4D\xb6}\x18\xefGP\x99\xbeBe6\x99s+\xc1<\xb8F\xea]\xc8\xfeM\x1dg\x87C\x06\xb30\xcd\xf2*^\";\x18\xfc\x18X\xf5p\xbb )\x01\xe2\x07\x0bX\xf1\\\xbb\x94\x11\xf0A\x9c%\x9a\xa3\xc3Gk\xb0\xb2SG\x0d\xa0\xd0\xbd\xc6\xd3\xf8~!wYC\x88UR\x8bq\x1dU\xb5\xf9\xc3\xd3\x0dY_\x0e\x8e\xdb\x93\xe4\"Z\x84\x9cW\x08\x81\xd3~\x03F\xfb\x11N\xfb\xe5\x93\xb4\x9d\xee\x03i(^J\xa6E@l\x85\x13\xea\"\x98\xc9\x84R\xcb\x97\xcc\x18R\xa3\x8es\xe1\xf7\x07E %\xb1\x9fu\x91\xb6\x8f\x04L}\x99\xd3\xf5m'z\xb5\x97\xc2\xa7 \xee#\xb6\x87\xc3\x03\xe5@D\xc6\xc6\x1e\xed\xee8zV4\xb6\x87\x83\x01\xa5\xfc\xda\x1a\x00Y\x84'\xd2'$6Z\xabK\x83\xea\x91TLZ\x12\xcc\x18tM\x96\xb4\x1a\xea\xc1\xaeaD\xed\xcc\xf5\x86\x1c\x0b\xd5\xc4G\x8b=\xb6\xf1H>Z\xedq\xac*$\xeb\xfb\x8e\xc9\x9c\xc6`\x8d\xbc=o\xcf\xd2\xad\x12\x8d\xfd\xe1\xd5\x153\xd4\xa4\x7fO\x84\xdb@o\xf0\x8d\x0e\x0e\xd6\x86\x9f\xcc\x85\xca)\xe7j\xb2\xeau\xa7Q\xbf`\xf7\x0ev\x95\xe7!\x7f\xbe\xa7<\xa7{\xc7\x9ap\x9c\xf8\xbe\x88\xa2K%Tx!\x17\xf8,\xd2\x9d\xab\xa524n?E\x13\x04f\x0fx\xe1\xcf\xcb\xcc\xde\xdf\x01R\xd2\x89Bo\x0b\xcc|2\xe6\n\x16\x08c\x8ev\x99q'\nF\xc6\xc8&?\x16\xb0{OGz\xc8>\xdd\xeb\x9cx\x0d\xbd,\x96q\xc2\xdej\xb7E\xca\xb2\\\xc4%\xd8\x1e\xdb\xf7\xd1Su\x96Y\xdf\xf7w\xd41\xb1Uqp\xd89$\xc3\x0c\x85\x0c\xde)\x83w\xb26\xbc\xf5\xb2> !\xef\x0e4#\x91NXJl\xb4\x93\xd4\x82V\x99h\xce0\x89s c\xa42\x84U\x98\xf9\xbc\xab\xbdx0\xc0\xad>\x96\x90\x1f\x14\xfbR\xb5\xa1\x17\xc6\x0b\x92\x86\xfc\x149\x1c:\xcd3-\xb6w\x06\xeaL\x16\xac\xae\xda*\xac\xea\xb2g.\xf8\xd2\x9br\x80\x19\xae\xbd\xa2\xd2\"\xf0\x14I\x83#\x88\xe0\x18*uFD \x80\xe6\xda\xa5\x04t6\x89\x14\x18\xce\xaa\xfa&\xc1%\x8a\xb9\x94G\x94)\x93\x1f\xb4\xebwg\x86C\x879\xc7\x88@\xda\xc9\x0cfU~IJ\x12\xce\x1a\x84\x96_W\x95\xb9P\xa8\x0f\x10\xfbo\x08\xd7\x89\x94\xf8S\xff:\xe2\xb1c\x17aV=9a^\x80\xf5\xf2\xb7i\x98\xd7\xcb\x97Oxy\xa6q\x89\xa2\xe4\xf6\xaf~4\xfb\xb0\"1'\xd3\xeb\x15\xd5K\x94\xb55>,\xabL\xe2\x80\xd8\x16\x89\xa7\x96\x0b\xabvp6\xb5\xf4\x9a\xba\x85\xc3\xc1\x95\x18\xc0y\xee\xe7\xc4#\xf1\x94L\xe9\xcb\xb4\xd4\xc5\xd9S\xd6\x85.\x1d}c\x0e\xb16[E\x0d\xf4\xe2;\x99\x1d*\x1f9\x19.\xaf!\x17,\xd1\xaf\xbf\x86\xf3\xc5\xcf~N\xd2w~\xfa\xc5r\xd56\xe2bIRZn\xdc\xd0\x85\xcfI>n\xa7\x98\xc5\xe6\xd6\x00b!7[\xdf\xfc\xd5\x80\x1c\xb7\xd7P\xa6$\xcb\xd3\xe4\x8eL\x1b\xdd\xef\xddE\xc9\x9f\x86\xf5V\xacS\xec-]@\x8d\x12\xb5\xf1TK\xac\xfe\xa5W\xf6\x0d\xbd\xce4\x80(\x0b(d\xb9B\x08\xd4\x06\xa2\xc7\xc8\x7f\xfc\x10*\xfd\xb3i\x10\xb4\x88Q\xe1M\x19,I\xe1z\xc5\xbf\xea:\xe4\xb1Av\x80\x14Q$6,\xae}W\xdeGyM{\xff]\x0e\xca\x9d\xe1\xc8\xb1\x1f{\x8a\x93\xca=\xabT\x91t\xd1\xe8k\xf6o\xff@w\x90\xb3\x10\xf7\xfe\xd7G\xf6;\xb1\x07.\xd2\x1e\xdf\x00\xccu\xcbk\xa9\x94\xa1flvl\x1f:]\xf2\xbe\x90;~z\xe2l\xfb\x98$\xc2\x16\xc0\xc4@\x0b\x82\xa6\xf9\x1d*8\xf4\xb2;\x19\xc1 \xc3Pz\n6\x05\xd6F\x0bez\xd0\xd2\xef\x1b\x86\"\x1a\x9a\xb2}\xd4D>\xca\xf1h\xa7\xe7\x8cm\x8d\xf6,t\xb7\xc5\xedVP.\xde\x16\x9bH\x03\x1f8\xe6\x1b.I\xa2\xf3\xf07R\xe2\xad:L\xe8vl\xa4o\xad\xdd\xfa((\xab=*\x1a\\&\x16\x9cNi\x9d\x94\xb9I\xc6\xed\xa8@\\%\xfb\xda:-q\xad\xcf\xdc\xba\"\xf6\xe6$\xa7\xf7\x88\xac\xd0\x01\xca\xa7O\xcb\xf1\xa2czu{\x02\xc3\x81C\x0b\xa4$\"~F\x98\x84\xaf)\xa1}\xd0\xa8oc\"\xd2\xa9b\x83\xe9X\x05\x08\xbd\xf2\xdbD-\xd5\x0b\x06\x8fY\xe4 \xeb\xa6\xd6Y\xe8\xa0[\xec1\x8b\x10\xe0\xe8\xc0\x01\xda5\x0f\xbauO\xab\xe8\x03\xce|\x91\x92\x06@\xbbD;\xe2\xfa\x16h\xa5\xdf\x05Zi\x19G\xa9\x114Z\\\xfd\x01\xd6\x88\xc8\x00z\x98\xcd\x92\"\xed\x02Y\x8bT\xf1[\xa0\x96|\x17\xa8%R\xf4\xa9\xd4Q\xf5\xf9\xe2Z\x0bp\xae\xd6\xf1\xb8\x8e\xca\xf4Gg\x81O\xdb\xe4ju\x03\x7fmq\xb3\x98tO\x95.%\xfcy\xb7l\xc4p\x94\xa7v\xb2\xfe9.\xf7\xe8\xd1-s\xb9\xd1#\xc8\x08\x89\xfa\xda\xd1\xcb\x8a\x0e\xb5\xe2\x96\xe1P}\xce\x98\xfd\xe1\xfe\x81c[Y\x1aX\x1a\x9e\xff5\xefH)_k\xca\xdfX\xfe\xc1\xc2\xf1\xb2U\x14\xe6\xb6%J\xcaR\xd8\xd8\xde\x1f8\"a\xf99F\xca\xe8\x03$\xce=\x93\x9a\x05\x98m\x94~\xe1\xda-tr\x84\xc8d\x0d\xafx4FH\xe4\x87\x14s[\xb1\xbf$\x16\x1a\xd1$\xd5=7\x9fDIxi\xd2cK\x9f\xf9\xd5\x17>/\x87\xf2\xd6M\xf6{\x0c\x19\xb3H\xe0\xde\xcb\xb9\xe3\xb0\xa8b,\xb6\xcbi)c\x871\x14\xe2\xb6\xf64\xa9\xd6\xc4\x18\xec)\x89HN\xf0\xbd+\xbd\x92\xd7\x94c\x97\x93(3\x85\xe54\xb5hu\xf84h!\x87\x04\x14\xa7}&>Ja$a\x87\xdc\xfeZH\xa1sM\x94z:9\xf4\xc1\xa9\xc4A\xc0\xb8\xcb^\xa5\xd76\xeb\xa4\xbe\xf5\x9bo\xb4o\x10\x81\xef\xeckw\xdf\xde\xaeJ\xc53Q\xdb\x81Z<\xe3\xc5UYj\xc4\x9f\xab\x12\xbb\x80?W\xeb\x99\xf1\xe7*2X\xa1\xd0\x8ci\xb3\xce\"B\x0f\xc4z\x81\xa9T\xe0\xb5O\xc9\xe4\xbbz\x81\x05+\x10%\xb1\xbe\x82\x1b8\x81\xb4\xfeh\xd9I\xb47t7\xd0<\xc8\xe7Z\xb2\xf9\xe5\"\x8c\xa6)\x89\xc7\x86sx\xe9\xaf\xc6\x10zK\x7f\xd5$\x0b\x80 1\xcf\xfc`A\xcb\xf0\x9f\xfarAR\xc49-\x85?\xf4e\xf2\x045\x9f\xb4\x14\xff\xa9/\x97\xc4\xd1\xdd\x18f\x8dw\x1a\xca\xe5e\xb2\\%1\xa1M'^y\xd3,\xf7\xb1HI\xadl\xedA\xb3|m\x05\x8cA\x03\x1cy\x86\xc7\xa0\x81J\x98\xfd\xe4G\xe1\xb4,Rx\xf5'\x9aN\xa6\xc9\xea\x82\x99De\xa6.\xbd\x8c\xfc,\x1bC`z\xcf\xd7\xe4\x18\xa6\xa6\x12\xef\xc2\xafa<\x86e\xf3\xfd\xab\x0f\xef\xc6\xe07\x9f\x97J>\x8d\xf1\xe9\xd5U\xb6J\x89?\x1d\xc3M}q\xea)\x829>\xfdc\x90Nc\x93\x87L\x12\xf0\x94\xb2\x1e\xf6h\x7f\xbf\x12\x14V\xe2\xa5\x85\x9f}\xb8\x8d\x85\xc8P\x8b\x9cF\xfb\xaa\x9eO\xcf\xa1~!wc\xd8\xd0XA\xa6d\xa6\x7fqu\x95\x91\xc8\xfc\x0e)\x84\xb1\x9a\xbeX\xeb\x10\x9a\x19O\nI\x9cG\xbc\x94T\xbbJ'?\x8e\xfaU\xf3\x85\xdcI\xd5\x88_BU\xa1\xe1\x1cX2C\x03Y\xd2\xd4*\xd3\xeb\xcf\x7ff'\x96vE\xe6\x98^\x994_\xe0\x1ch\xb6\x16NA\xdc|\xbeJ\x93U6\x86B\x03\xff\xe46\xa6|PhZ\xd6P\x01\xa7\x8a\x0b#\xbd\x0f\xea\xc7\x88\x060:`\xa4\xcc\xd0\xfaw\x1d\x97\x06&\x0b\xf0\x15\xe8,\xc0\xd1\x9b\x96\x11\x04:\xde\x19\xd5S)\x84t\xf1\xe4,3\xcf\nm9R2s\\\x88\xc4\xc3\x19:\x98\xc0&\xa0\xd2\xcfqky\x06=\xb6\x84\x05\xe91.\x9f4\x8b1z\xb7^\x10\x9f!\x1d\x14\x96\x921\xe6\xb5\xb6Q([\xd3\xe6\x99\x87}f\x1f\x93OR5\xe3.\x05\xdfTg\x18\xb5\x05\xa3&d\x98\x0eh\xea\x80\xef\x05\xfc\x8c\x84Fl\x8f2\xe2\xc3\x14\xbd\x944\xcb\xb4T\xf2-J\xc3\x9e)\x85\x11S\xef\xdd\xc01L\x8f\xe0fs\xd3\x81\xc5\xe4\xa6n\xd8s\x83\x811\x9b\\\xee\xc0\xad\xf7\xa9\xee\x8f\xf8\xd0\x18 \n\xdf\x88\xb0?\xa3\xf0\xcat=\xa5\x9d\\\xa21\x87\\\xb2\xd9|\xb5.\x96N\xcd\x96\x8c\x02^\x9a\x81e\xc3\xe0\xfeA\xb77\x02\xba\xdag.\xac0\xa9&z4\x05E\x9a\xd2\x03\x10\xfc\x1aK\x13\xd4\xc9\xaa^Fp\xca&C\xb7\x9e\xd2 P\xbbWs\x8f\"\x0f\xae\xa4P\x9a\xa7G\xfa\xf3x\xfa\x89\xc5F\xf8w\xd2\xa9t\xa8\xc6\xe81\x86\"w\x19\x96\xa5\x7f\xf8>\xa0?\xf8:'\x1e\xc3*\xf4\x17b\x1eu\xfc\x12M\xd1\x13_\xf8\x0c\xb8\x94\xa8\xb4\x7f\x7f\xa8*n\" \xd4\xba\xd0-\xdc|\xb5\x00~8h\xce~\x0cj\xdd2\x16\x8d\x87_\x17\xd2\xf1kHg!\x90\x0e\xdb5\xe5\xf2\x90q\xd0T\xc5A\x0c\xdel\xe1\xe39.\xaf\xe9\x12mi\xde9\n\xb6\xf1\x0d\xd8\x86=\xb7e$F\xf9\xbb\xba~\x8c\xe2\xbd\x15\xf3\x81\x99\xd1?cqG\xcbj\xb0\xd3rM\xec\xb4t`\xd5\x07;-;\xb1\xd3\xbc\xc4NK\xc7\x85;\x86\x9d\xee\xe0\x18\x96GpG\xb1\xd3|rW\xc7Nw\x06\xecT\xeb\xd0\xbc\xd7\xfe\xe7{c\xea\xc2B \x81\x9b\xba\xfe\x9c.\xfe:u\xfch&\xb8\xa6Gc\x0bD\x90\x12\x0c\x8d\xc9\xad\xca\xa4i\xf0'\xe8&M%\xb1\xd3\x81\xe3\x9d\xdf-\xaf\x93HO\xe9\xa6\xebU7:\xd4\x9b\x0d\x0d\x0f\xbf\xcd\xd6m\x83C!\xa9\x0c\xd0q\xc1\x7f\x8b\xdd\xdb\xc8 \x81|\xaa\xaa\x19\x19\xd3\xbf\xdf\xb0#bt\xf5\xfe\xb0sdf\x94+E\x12\xe4f]p\n\x13r\x89\x96g\xfe\xb7\xc8\x131\x1e~cxJ\xf8\xbb~\x13\x11\x1aB\x972\x95\x1b\xa9\xechH\x13W`\xe0b\xd8lD\xe1\x11k\x7f\xc0j\xa4\x93I\xfbF\xe8\xddV\x02\xa7`m\x0d,J_u\x8c\xbf\xc6p\xe9$E\x9cUb\xe7+F\x1c\xea9C\xc4\xcb\x8a\x15I\xaf\xb8yq\xc5lU\xd6c\xacR;\x97eqM\xec\x15$\xb1\xd0E\x9a\xc4\x17\x98\x98_\xcb @\x87]\x8a\xb8\x84\x89\x82\x9e\x0b\x03\xd6\x8dY8/D=\x1a\x9f\x81\xda\x93\x87\xbaU\xf1\xa3\xc0\xd6\\\x0e\xaa\xd7\xb9\xc2\x88\xc45(\xd7\xe0Z\x9f\x80\x98\xdc\xa2\xe9r-.w f\xf8\xfe\xb6\x07\xfb\x9d\x9b\\\xb7kj\xa6\xceJ\x98\xd8\x97~\x1c'9\xd0\x86\x11\xc5%)\x14q\x19sH\xbb[\xbe\xcb\xa0\x1a^\x1f\xcaxyt@\xfb\xa0\x81@P\x10\x91b\x04_\xba_S\xb9\"\xe6\xfb\xdb\\\xdd\x9ch\x19\xab\x99c\xe5\xfe\xf02\x9d\xd0\xec\xe3\xc9\xf4\x87x.\x89\x93\xa8>\x04\xdd\x0c\xd9\x03\x17B1 g\xed\xc3\xa9\xe7\x8c\xb9\x06\xa0\xb5\x18\x0d\xab;M\xf2\x99\x16f\xab\x18\xff\xf7\xc3\x8cr\xa8\x98X\xe6\xfe\xbeK\xceT\xc6\xd6\xe6Lm\xccX*\xd2dj\x1b\x10|\x048\xca\xc7\xa5\x9c'\xed\x92\xf30S\xef\xfb{a\x06\xde\xc4\x0b \xefg/\xcc\xde'\xf9\x82EcH\xdd\xda\x0b\x06\x8a>\x04K7=W\xf5An\x83\x0b\x93\xfb4\xa1\xee\x04NBpjbB\xc9\x079\xd5o\xad\x99\x94\xac\x88\xdfo\xdd0\xcf\x1e\xf5\xe8\xc6\xa5\x133\xda;f^\xd61lb\xd4L\xccP\x85\xc5\\\xefL\xcf\xc1\xe6F\xf4[e\x81\x1a\xcby1\x18/\x8c\x83\xa8\x98\x12\xa1\x95\xe9p\x1fG\xef\xe0\xb2\xad\xda\xeb\x07\xae\xc9\xed[S\xb3\\\x9bEM\xee\xe5\xfe\x9c\x9b[\xd3_O\x9eP\x1e>\xa4\x8b\x88\x89\x92\xe9O<\x13M!a\x1f\xd0\xaeJkJ\x86ofa\x94\x93\xd4n]\x91PAn\x8b\xc7J.\xb1v\xaeV*\xad\x93\xe6\x84i\xa2\x16r\xf3\x15\x9c\x0e\x14:\x88\xdf\xf7\xf7hK\xc6\xde/WQ\x18\x84,\x1dIy#\x97 _\xa5\x12\xe5\x8d\xae\x8e\x9e3\x85\xb2A/J\xfc\xe9\xbfs [Y\xe0G~jq1\xbex%\xd3Y\x89m]\xa0s&\xbac\xc6I\xbc\xc5\xbeA\x84LO\xbc|A\xa0\xec\x7f\x14f\x18\x07\xdf\x87,X\x90\xa5\xef\xc1\x1b\xf1*%Y\x12\xdd\xd0\x13!\x99AV\x04\x0b\xe6\xed\xdf\x08l\xe3Y\xcdIe\x86=\xc9r\x15Fd\xfa\xa6\x82\x9c\xcf]\x08,\xd1\x01\xcb\x85\xc9\xa5\xfa\xc1\xd9\xd7\xe6\x07\x02\x9e\xda\x0f(m\xf9\xce_)\x14v\x03\x9etK\xf2\x1d\xa4\xd5X\xd0\x8b\x01k\xac\x95\xdf\xe3{\xf2kA\xe2\x80\x98K,\xfd\xd5\ns\x1f\x98\n\xcc\xfc(\xba\xf6\x83/c9h\x97\xb8\x1e\x94H\xf3\xd0q\xea\x8b+\x9e\xb0\xadx9\xc1m\x8af\x16\x9eh\xa9z\xa6\xf1\x15m6GQ9a\xa8\\\xe7\xa7|\x84q\xed\xf3#\x16,v\xe8H2'R!!U\xae\x08Fj\xd2\xd6\xae\x16\xc3\x9aP\xc9Jz\x15\xde\xab\xb3\xd7\xcf?\xbf\xbd\x10\xfa\x95R\xc1\xdf\xb6\"\xc4j\xa8w3\xbb\x0d1\xb2\x9c:h\x1d\xdc\x03?#0\x1ck\xe7\x03\x83'\x8a~)p\x9c\x0c\x0c1\x02\x0c\xf1\x96\xb1\x9d\x91\xb9\x1d\xb9b\xb5)\xd5G\\\\\x86\xa6\x04\xd3\xa2\xfd\xa6\x86d~N\x93x\x0e\xcc3\x141\x88h\x12\xd7\xcf9\xc3&|\x16J\xe9D\x9b\xba!\xe4y.SA\x0e\xa2\x83u^{\x92;.l\x90^\xf1_\xc49+[K\x17\n\xa2R\xf0\xe6\xf9\x8a\x04\xe1,$\xd3\x12-\"C\xcfQc\x06v\x92RD\x19\xc6\xf3\x88\xf0\x11r_]\x07\x83\xc6\xfba,pn\xed\xad\xa72\xb5k\x84\xb1\xd1\x0d#\\w\x18\x7f{\xfe\xee-\xc7\xde\xb51P\xbci\x1a\x81\xf4\xae\xd1\x7f\xb1\x8f\xc9-\x14\xb6\xe6\xdcb\xc7\xa7V\xaa#\xf0\xf8X\xf5\x05\xac \x93\xbb\xad1\xd7$\xf6\x86\xc3\x9a\x19\xdf\xa1\x96\x96K\xda\xe4\x956\x81'\xf4\xa5\x1aXLn+\xd4\x1e+\xef>\x9f_\\}>?\xbb\xfa\xf8\xe9\xc3\xc7\xb3O\x17\x7f\x1b\xeb\x92\xa1\xfe\xf5\xf9\xf9\xd5\x8b\x0f\x1f\xde\x9e=\x7f\x7f\xf5\xd3\xf3\xb7\x9f\xcf\xc6\xb0\xab/\xf5\xfe\xf3\xbb\xb3Oo^\x8aR\x87\xfaR\x1f?\x9c\xbfA\xd6@)>2\xd4\xfa\xe1\xa7\xb3Oo?<\x7fu\xf6J\xed\xc6\xce\xa8\xf9E\x18\xd3\x85\xf1\xea\xc3;\xc1\x10\xbfD\x19[\x97\xf3\x12H\xb2\xd1P\x7f:\x02'v\x89\xc7\xab\x0e z8\x98NS\xe0\xe2h\xe2\xbd\xfa\xf0\xeey\x9e\xa7\xe1u\x91\x93\xf7\xfe\x92d+?\xe8\xfe6\xd3\x7f\xdb\xf5Y$>\x13\x00\xe8\xf5U \xbez\xc7\xe3\x9d\xbc#\xf9\"\x99\xf2\xef\xf4\x98\xba\x94W\xccP^\xe1\x85\xd9\xcb\"\xcb\x93e\xd9_J\x18\x16\xdeU\xe3\xb9\xb0\x97\xe4^U\x9a/\x9d\x16\xba\x1f\xf0`]\x95s\xa0\xea\xd7fL\x12f[\xbb\x87\x96\x0b\xb3\x16co\xdaw\xa4\xcd\xbc&Y\x98\x877\xc4X\xa7\x1e\xcb\xf5\xab\xfc\xc3\x0dI)\x07E\xa6\xc6\xe1\x9b\x90b\x93\xc9\x95/\xc3F\x06~\xf2/<\x05\xe2\xb0 \xf8L\x1e\xa5x\xa6\xefd\x19*(\xb5\xad\xbd\x01\xee?\x174[\xb4ms\x03\xdf\x9a7\xe8\x9c>\xeb\x08[\xb5\xf0j{\x02N\x14sA\xf9\xd2\xbbi\x00:\x96k\xb1\x88\xad\xd4\x8e;\x0es|\xcd(\xaf\x17\x19\xbf\x92w\x1b\x9c@\xc4\xca\x07\xc6\xf2\xf5\xcd\x06'\x10\xb0/dD7\x99]6lv\xc4\xa5\xe1\xd7jO4\xbeq\xd6\xf8\xf9\xd6\x7f\\\xf9[\xbf\xfd\xf2K1\x18\xbc\x1cl\xe1\xdfW\xfb\xec\xcf!\xbb}\xcdn_\xb3\xdb\xd1\xeb\xd7\xf4\xcf\xce\x01+\xbcs\xf0\x8a\xfdyMo\x87\xaf\xf1\xedh0x\xb9\xc5\xfe\xbe\xc2?\xac\xf0hx\x88o_\x0e\xd8\xed\xeb3z\xbb3\x18\x0c\xe9\xed\xab\x03\xfc\xf6\xf5S\xf6\xf6\xf5\xab\x97x\xfb\xea5\xbb}\xfd\xfa\x95&|Is\x05\xbdyu\xf5\xfc\xe2\xe2\xd3\x9b\x17\x9f/\xce\xae\xde?\x7fw6\x06k\xea\xe7\xfeVJ\xfc \x0f\xa7Vs\xfb}\xfa\xf0\xe1\xa2\xed\xa34Ir\xcdg\xf5/\xae\xce/\x9e\x7f\xba\xb8z\xf9\xd7\xe7\x9f\xb4F\x85Ji^\x0e6\xc1\xfa\xe5\x97-o\xb0\xf5\x14\x81\xfc\xe2\x00\xa19\xe0\xc0\xddg\xd0\xdcy\xcd\xa0\xb9;\xd0t\xa3Z\x1cz\xae\x1e]\x0d\xb3,d\x8e\xd2\xf1\xd4O\xa7\x0c\xff\xeb\x91y\xcbQ=n\xa4\x16\x00\xb4DV\xca\xf7\xa1\xb3\xea\xfa \xa6\xfai'\x13jj!3\xe2\xc00\xf5\x03\xb7\xbd\xb2I~\xe9\xc8\nr\x8d\xd6\x15\x8c\xa8B|3ln7\x13)\x8a\xe6\xcdFS\xcf\xef\xceO\x1c\x1c\xee\xd4\x18\x8a\x1df\xa3\xfc\xd4\xc0W4x\n\x8a\xef\xfc`\xf1\x89\xcc2.\xe1Bi\xc7\x157\x9d\xe264:a\x87\x9e\xcfX&E\x9cK\xf6\xf1\xea\xd8P\x98\x1f\xa2\xb5\x94^.V eZ\xaf\xc6\xae\x7fi\x94\xe7\x10\xb5\xdf\x92\xce\xa7\xf9\xd2K\xc9\x8cI\x91\xe7$\xffD7\xff;\xda\xea'\xe2O\xefl\xc7#\xf1\xaf\x05)\x08z\x04R\xcc\xdc\x86_\xe7$\xffk\x92\xe5\xef\x93i\xe7\x8e(\xbb*}c\xb7:6\x17q+P\xb5\x8dxSRN+3\xb1S&\x94>S+n\x08\xb0\xeb\xfd\xe0\xf1\xf3Z'74M+\xe3\x8c\x94^4'\x12\x95:(T\xc6\xc4\x13!\x97/_\x05I\x9c\x93\xafF\xdfdM\n\x10\x90\xd6S\xeae\x8b\xa4\x88\xa6\x9fWS?'\x08\x14_\x9ft\x18\xf0\xacA-B\x1d\x82\xbe\xc3\xec1\xeb \xb0\xc5\xa8]\xf6\xd5\xe3\x16`\xdcc\x016\x11P\xdbT\xadH:K\xd2%\x1b\xef\x9b\xd9{\x12\x90,\xf3\xd3\xbb~\xfe\xcb\xc4\xbb*\xf0\xcb\x17~\x1e,\x98\x86\x8f'\x8a\xc51\x9ajo\xac\x9f\nk\xe81`\xf8=0\xe0\xc8\x10\xedo\xb8\xfbT\xab?\x1b\x19\xfc6w\xf6\xd4\xf2\x183\xad2\x08\x91\"YN\x93\xa0\x10\xd3\xab J'^{\xe2\xc7\xbb\x84)q\xf4\xb5\xc5\xfeM8\xc7h\x9erf\xe5\x93\xe6{\xaf\xc8H\xfa|\xce\x1b\xde\xfe\xe5\xfal:'\xbfl\xff2\xdd\xf6r\x92\xe5\xb6\xa6\xa0\xf6\x1c\xd0\xf8x\xd0\x8d\xd7\xf0\xa9\x00\xd9\x82\xcc\x8b\x93\xa9\xc1:*\xe69V\x995\xa7~W\x8b8\xedz\x8e\xa5\x16?\x9e\xc7\xb1\x8cK:\x00\xc3Y\xb2,h\x93\xf4\xd2\xc5\x1d\xa5\xd9\xbch\xc5Z\xed\xb6E\xbe\x8c0\x8a\x1c\xda\x8e\xd1;\x07\xc6\xd2{\x8aP(\x1c}V\x00\xf1\x8bi\xfd\xd6\xd6]\x84Q)\xbbv\xd2p\xc8=\x16(\xdc\xf0?\x94db\x02\\\xdd\x0b:\xf7\x95\xd9B\xed=\xa5\xe1\xea2\x0bf\xeb\xc1\x03\xeb\x89\x92\x82a\xf9\xfc\xe9\x0d\xc6\x83\xd2C\xe1\x1c+\x10\x85\x84\xd2\x94A\x8e\xb7\xaf>\xbc\x93\x7f\xb3\xca\xc5\xddE\xf2\x85\xc4\xec\xc6\xcf\xfd\x8b\xd4\x8f\xb3\x19I\xdf\xe4d\x89\x0f_\x87\xbcQ\xba\x9d\x9fG\xd1\xcb$\x8a\x18\xc7\x8bO\x94\xdb\xd7I\xba\x14\x0e\xca\xf4\x9e\x85t\x16O\xde\x91i\xe8ce\xef\xc2%\x1e\x80\xcc\x8d\x9b\x9e\x03S\x8a\xce\xde\xf9+\x97\xfe\xc52\x1f\xfd\x90\x8e\xe1\xd7\x82d\xac\xeb\x1f\xa3b\x1e\xc6\xfc\x0f\xfb\xf2\xfc\xa7\xbf\xbc\xc5\xb5\x8e\x05\xce\x7f\xfa\x0b#\\\xc5\xddG?_\x9c\x93yy\x9b\x84q.n$(\x9c\xff\xf4\x176\xee$e\x83f\xd15^\x14\xb3\x99\xa8\x8b\x82\xfb|A\x08\xfb\x9c\xa2\xa1\x8b\xd4\x0f\xbe\xbc\xe4\x00/\x1f\xb0\xbb\xa4\x08\xb0G\x96\x88\xe7\xe1\xd2y\xcc\x18\x99\x93\xa1(Dl\xd1L\x1f\xb4\x93\xee\xccb\x92iv&\xddK)\xdd\x89\x8d73\xe0\xfb-\xa8,G\x15t\x81\xce\x1b3\xee\x8a\x94`\xc8Q\x17\"\xba\x10'\xd1%\xdd\xee\x1e\xc2\xb5c\xcd\xab8\x91\xa1\xa62\xbcI\x17\x024\x1c\xe9\xb1\x08T\xe2eQ\x18\x10\xfb\xd0\x85\xada\x97!\xafi\xbb\x9b[\xeb\xce3\xd5\x99c\xea{\x04\xc7\xeem\xd8o$xj\xee \xf6\x10\x9e\xd0s\xbf\xb9\\\xea\xee\x07\xf6\xc8PNrd\xb0w\x0de\xb8\xbb\x84\xa2;_\x0fAJ\xb8pG\xe5\xbd8\x0f\xb7o\x8a\xd8\xde;xp\xe5\xe5\xe3B\xd2\xb5\x84\x8c\x1d\xdc\x1d8\xdeL\xd7\xc3=},\xe6&\xee\xee\xda z&\x82E\x99M\xd0\x1e%\xe6&\xc6D\xf6\xc9\x08\xb9\xf6\x93\xa0l\xac\xb92T\x97\x93\xbe3\xb9&\xa4\xba\x98\xf4\xdd\xbd=\xc7\xde\x18\xd4D\x95\xa3\x9d\x03\x87\xc7\xedq\xc1jF\xcf\xd1\x9bG^QR\x8eG\xfb!\xc2\xfe\xee\xaa\x9e\x82\xe3\xa1%\x06\x8f\xb0\xb6\x12\xd1\xc2\xae4>\xfee\xb8\xba\xabPooRK\xfe}\xaa\xa5\xa8\x10\xa8<]L\xe3\xf54\x895\xe1\x18\x90\xdbB\xff\xdb\x9c\xf1Wbl\x9b'\xa5\xaf\x84n\x8e\xcd\xaeK\xbc\x9d\xa1qn\x1d\xed\xe4\xfe\x13!\xf5\x162n#\xb6\x87\x83\xa1c\x1b\xa7\x9a\xb7{@\x11\xbb>\xae\xef\xef\x0f.X~#\x8c/\xf4\n\xe5+7\xd1x\xa9\x88\xe7\x1c\xcf_\x07\xe8\xfd\xe0\xda\x9aQ|c\xa3!Vn\xcf>\xadU\x8ftat#\x89\xddk6e\xb3(\xdd\x01\xc0\x02\xcb\x86\xf1#\x17\x1c\x81g0@\x1e#ET\xf1t08\x18>}:\xda\xdb=\xd8\x1d<}:\xa4,\xc7\x9a4\xfd\xb7d\xb5lM\xa1\x07[0d\xe6\xc0\xd6\xbb0fVs(\x12\x06B\xc9\x0f\xf8\x17\x0cyFi\x90#\xb8 \xb30\x87E\x9e\xaf\xc6\xdb\xdb3? \xd7I\xf2\xc5\x9b\x87\xf9\xa2\xb8\xf6\xc2d\x1b\x15\x99\xdb\xd3$\xc8\xb6\xf1\xe3\xad) \x92)ar\x9f\xd30\xbe\xf1\xd3\xd0\x8f\xf3\x13\xac\xb2\x96:\xa6L\x1bHQ\x8e\xf5\xc4O\xe7\xd9\xe4\x92\x95\x8bi\x15\x9f?\xbd\xa9d\xdfRb\x19\xd8\x84\xa1\xeao\xc4\xea\xc0Qc\xae\xb6\"\x8a`I\xb2\xcc\x9f\x13t\xb4\xcb\x08>\x8f\x93xk)F<%7@\xe2\x9b0Mb\x14\xaf\xd2\x8f\xf1C\x1cG\x06~<\x05\x7f:\x0d)\x80\xfd\x08\x16$Z\xcd\x8a\x08n\xfd4\x0e\xe3y\xe6)n27<,d\x95oHM \xc0\xa8\xbc\x04\x85d\x14\xf6o\x04p\xe0\xa70\x89\x90\x9d\xc2\x8c\xb8\xb3\xd4_\x92\xec\"\xf9\x98\xac\xe0\x84\xceT\xf2\xc8\x8d\xd1\x87\xbe\xe3IC)]CJ\xb7\xeb\x1c\xc9\xd3\xf5Vk\x8bI\xa7x\x03\xedj\xaa\x86\xf7\x998\x03\x1a\x91\x04\xa1\x81\xf4r\xe1\x1d\xd5\xba+\xa4\xc6j.Up\xdat\xb1\x1aW)L\xf0\xd9%\x93\x94\xc6\xcd\xc8\xc0\xd887T\xe9\xdb\xbcu\xcd\xca\x9b\x932\xf2z\xdf\xa3\xdc\xb5_\xa5\x1a\xaf7\xa5\xa6\x0fi\x99\x8ee\xcdJMu2}M\xbf\xaa4\xda\x0bm\xadl\xd6{\xd7\xaaqU\xd7\xd6\x8aa\x0f\xfa\xd7\x8a\xc5;k]\x1b\x9e\xb2\xab\xa2\xae\xc2Od~\xf6u\xd5\xb7\xb6r\x8d\xb2\xcf:\x16i\x0f\xa7F\xb9\xee\xfe\x8e\x8dR\x1b\xaf\x14\x0f\x84^\xbd\xa7\x1fu\xf4\x1dq\xea\xda\x15\xe3WR\xcd\x0c\xcfIf\xe5X@\xd7\x9e0\xea\xe8\xdd\xa4(\xd5\xb9d>\xa6\xe1\x12\x0d\xfc\xfaV]\xedk\xd4\xeb\xe9P\x07\xbe\xd0l/|n\x88\xe5\xa0[\xe2P\xcf\xc4\xa7\xed?\x93O1\x970~S\x16{p\xca\x185\xb1\xbd\xb7\xebx\xec\xbd\x9e\n]\xdf\xfdWs\x8e\xe1\x04J\xc1K9'#\x0e\xd9\xbf=\x7f\xf7\xf6\xeck@V\xfcx\xc5\x97)\xf13\x9cY\xc2\x1f,\xfd\xf4\x0b\x0b\xfc\xc0n9\xe9pR%v\xa1\xe5)\xcc\xec\"\xfe\x12'\xb71\xb0g\x8e\xe5\xc0&/\x85\x95\x9c\x82\xc52\xfe\x89'\xe5)f\xe3\x99b9n\xd9\xe5U^\xa4\xe4<\xf7\x83/\x17\xa9\x8fQ\xc6\x0codk\x19)\xee\x01\xad\x10\x9fe\xb4$\x86\x0d\x14\xc4\x87\xc3\x9f\xd1.K\xe9\xcd\xca_iK|\x0b\xd6 9\xedOj\x8c\xbb\x90\xd6_\x8a\xb1\xb6\xae\xec\x1b9\x1b\x01\xce\xd3&Xc\xd0G\x0c\xc9)e\xd79 .lT\xc1\xfcq\x1e0\xe1\x07\xa3\nM\xd3\xe1(\xa1\xb4\xd6\x8e\x83\xd3%\x8884E\x91\xa0\xd3\x94*>$\xa5\xff\xc8$\xb6wv\x07\x8e\"h\x15\xbe\x83\xf8\xfe`o\x88\x96W\x07{#\xb5\\\xe5j\x82\xe5vx\xb9]\xfew\x8f\xff\xddw$w\xf1G\xecN\xf1T\xe6\xaat\xe9:b{\xd4Hu\x11r\x13\x08\xf5\xb90\x8dP\xa5\\E\x15\x103\xf5\xe6L\x14NX\x0c\xaf&\x92\xc8L\xd2-\xd1\xd3\xb61\xaaeso\x1af+\xca\xc82O\x0fo\xb5\xf032\xfdD\xe6a\x963\x05\x08Z\xeeNbs\x14\x89\xc2&\x8d\xa0\xec\x0f\xf4Y\xdc\xb4\nJ\x99\xaa\xdd\xbb\x12\xcd\x8a\xa1\xa2\x01\x8b\xf6\x05\x8b\x1c/\xbdy\xc3\xcf\xb6\xc6'\xe5\x0b\x17\xeaq\x86\x9a@\xd4\x04\xd4\x14\xe1\xfaz\xc1\x03\xa5\xfc^\x9e\xfa7$\xcd\xc8\xc5m\xf2\x91\x96\xb3\x89w\x95\xfb\xe9\x9c\xe4\xb4+.dJN\x9bf?\x02\xbd\x18}\xad\xbe\x98\xe6\x97\xd9\x99\xc8\x1dj\x14\x03!\x9e\xa3|=\xa6\xd6@\x05\xb8\x00$\xd3M7#X\xd2K3\xfaX\x1d1@]\xe6\xd1\x1c\xff\xcc\xb4H\xd1\xc8\x85\x99s)PH\x95\xf1\xb7-\xef\xce\x8f\xf5 \xa1\xfb\x9a\xafj\xcd\xc0\x1f\xb3\x84\x93o[\xc2\xd0 \xc8U\xdf\x05\xadB\x80\x16\x9a\xa9\x0bw\xa0I\xc6\x04\x1c\xae\xd3\x86\xce\xd7\x0f\x82bYD~^.\x85W\xbcM\x92u\x19pb\xf0\x83\xa8\xd5R\xb2\xad\xfa\xf3/\xe1\xea\x02;\xde\xab!U\x15nj\xe8U\x98\x92 _s\x14\xab\x9e\x95\x9f\xc59I\xdf\x12\xff\xc6\x00\xa6\xd2\xb4W\xd7R\xb5\xed\xaajlf\xcd;\xe3 ]L\xabF\x7fRO\xf1\xe97\x1f\x8d\x86\x93Q\x1fy\xaeyb\xf2\x88\xceC\xdd\xc9\xa8;I3\xc3I\x1aUI\xa6~Ws0a\xcc\xf9\x86\xc9\xd1\xacK\x8c\x04b+\xd9\xa1G\xbe\x92\xa0\xc8\xa5y{\x13\x7fH\xa7\x84\xd3\xedh\xfb\x95}$i\x86\x1b?\xb7\x193&\x13\x94\"\x0f\x91\xdd\xd8\xdd\xf5^\xf5f\x8f\x11\x81n\x0cZ+\xeb\xcd\xb9\xb3\xca\x86\xad\x95-\xfaVfy(\xe9\xf4\xae\xd2$A\x93\xaa7\xaf\xea\xf5\xd6\x17\xd2M\x03\xadH\x1e\x00\xcdF\xd8\xcb\xb3\x1b\x12\xe7\xccl\x01\xe7a\x0c\x89\xa7\x7f\xd3D\xf4\x8dr\xd9\x0b\xee\xde\xa7\xa9\x83\xbfk\x9d\xb2\xa2\xa4\xdb\xfa\x19\x06ku\xe51S@ZOw-\xfcR<\xd6\x1cD7\xdce`\xd1H\xf4I/;\x9a\xe4,\xfbh\xc4\"\x81\xfd\xfe\xe08\x93\x10#H\xe8\xeb\xc2\x94_\x8d\xf3\x81\xd9\xebd\xda0b>\x1a|z\xd3p\xfa\xb1\x1a\xbc\xeeY \x866\x00J\x84o\x0f\xa3|\xa1I\x8b\xb4=\xa3\xe4C\x9f9\x00)6\x84v1\x8b\x0b\x835XI\xfc2\n\x83/\x96>\x90B\xa3\xdcK\xc6\xe6\xf6(\xfe*)\xae#\xd2\xb7r\xa9t\xff&\xde%EF^%\xb7\xf1:e\xd7\xac\xfe]r\xb3V\xd95\xab\xff\xbc\xea_\xb2\xbbj\x90\xf4t\xf6\x06\x92\x8a\xfeu\xc4\x12\xbcbT\xc0\xdc\x05\xeb\xba\xc8s\xb6Cy2H+\x8cWE.?\xc8\xd0\x14K~\x92\x93\xaf\xb9\x9f\x12\x9f?sZ\xbc\xa8[#s\x88K\xf4\xb2\xe98\x05\xa0\xea \xc4\x85\x87s\xe3\xcd\x03\xb3\xceV]'DDJ\xf59\x8bY\xed\xc8b:=\xeeH\x8dx\xa8T\xf2SZ~\x92^\xb6a\x00\x96/\xe8\x11H`=\xb4\xc5\xf9\x8a\xdb0\x8a^\xd5Z4=g\xed\x9bG\xae\xc7AX\x1dO\x81\x94N(tz\x0c\xfey\x14\x95lC\x17\xd5)\x98<=\xe0\xeby\xbc\x15\x12[\\\x14O6\xfcpc\xb4\x82\x89&\xf1\xe5$\xbflC\x8ab\xfcf\xf0\xeb\xc4\x06\xe2B\xf8\xa4\x86i\xd0=\xb7\xb9\xa1<\x87)\xef`\x8f=\xf1\xa0J\x90\xf2\xd4\xe7\xc7{\x7f\xca\xbb\x84g\xe8\xf2\xa3r\xc5H\x83\x9a\xfd\xa1\xdff\x7f(.a\x87\xe8O2\x03|p^\xba@O \xda\xc8\xab\x8dF\x1e\x83\x19\xf2\xccv8D.7\xa4\\\x91~q4\x11K\xf3 \xdf\xdea+\xbc\x99\xebU\x13\xdefR;\xc0\xbe\x05\x1a.X!\xba\xd2$ Y\x86U\xffo\xdaHW\xf5b\xcf\x04M\xe8\x94\xfc\x01d\x88%\xe1\x14V0\x86\xa9\xe32\x80Q\xaa\x0c\x93\xb1\xfa^JP\xd5\xfd\xd2/\xe6\x8b\x9c\xe9\xc2[\xbbyu\xb5*\xd29\xe90\x81\x89*S\x0fc=\x12\x91\xf4\xc2\x8f\xbf\xf4\xcb\x8f\x1d\xd5\xeb,\xef\x0c,!\x0b\x01\xf0\x8d,a#\x85\x97` \xd5$A\xfa\xe8:7!\xb9\xed\x9aK(\x83\xe9\xd1\xd2U\xd0n\xbc\xd5\xaf~1\xfd\x89\x16e\x82\xf0\x99\xf4n\xc3x\x9a\xdc2\xcb\x81\xb2b\x8d\x87%H\x87P\xeea\xe2\x85W\xdcKM_\xb8<\x0eO!\x16!o\x7f\n\xc9-\xc6t\xe5\xfe'?\xb3\xc6\xc7\xc0z\xd1\xdc\x85MffJr?\x8c\xfa\x00\xac\x04\x12\xfb\x84\xb6\xdb\x199\xbb5B\xa6\x0b\x89\xda\x16oCRZIy@\x1bf\xa3\xf8\x85\xe7\x17s\n5\xcc\xa3e\xfb\xcc\x0bT^\x94\xfe\xb7/J\xb5\x93\xcb\xe4\xa6\x13_\x10\xcc\xa7\x1e\xe4o\xe2\x9c\xa4\xb1\x1f \x01\x1d\xdd&\xa8El\xdb\xae=\xc4R\xe5t\xe8\x9bi\xab}\xe1w\"\xd3\xbaF\x9e{\xff\xae\xdd\x90\x92\xbe\xde$#1C\xcah\xd7\xac\xc7?\xbdTS8\xa9\xd5\xf7\xdb?nH\x8d\xbcLVwi8_\xe4`\x07\x0e\x8c\x06\xc3}\xf872\x85\x9f\xfd\xdcT\xec\xefdz\xcb\xea\xabl\xc5\x02\xbaz\xd1E\xb0,\xff\xe3\xf6\xffQ}\xdc0\x1f(\xfa\xcd\x05u\xab\xd6:)\xa9D\xbd,\x91G3t\x02\xc8\x14\x16\xe1\xd9\xbe\xa5\x10\x17\xcdh\x95-\xe1,\xc4\x86\xafl\xeat\xf49plo\xcc\x9f\x0c\x92\x90\x85\xcbaR3Q\xa5$\x958\x81P1Y8\x81\xd0\x01\xc2\x9c\xfe\xda\xa8\xb32}L\xddb+u\xca\xaf\x13\xcf_\xad\xa2;\x9eP\xa9\x95\xbf,+\xaby\xc3\x86z\x82O\\\xe5D`F\xa0\xd4\x11\xc6\xc6\xa9\xc8\xcb\x93rG\x17\xde\x1f\xff\x9b\xe9G\xc2\xf2\xceZ\xd0\x1aKR\xc6c\xacy\x814\xeai0\x92\xd2\x85\x0eGk\xd7\xb4\xa2-x\xb2\x9e\x9e\xfa\x81C9\xc7\xd8\xb4(\xcb\xade\xf7\x95T\x9e\x0f\xf6zV\xc8\xdc.\xb8\x0f\x8a\xe3\x9e\x1b:\xd5\xf3?\x81A\xaf\xda]\x16*\xbc\xde\x9a\xe8i\xea\xc7\xd3diw\xfan\x18\xbak1\xf36\xdb\xf2\x82$\x0e\xfc\xdc\xae\x85\xc4\xc74\xc6cJeX\xce\x95\xe5\x82\xbd\xb9\x19\xc3&\xa4Ne\x0e\xb1\xb3\xff\xf8\xe43\x8dh\x06<\xb5e\xe39Sp\xec6\xe6\xcb\x07\x83\xd5|\x05\x8d\xdcc\xd9o\x87\x83\x81\x03\xa7\xfa\xd2\xd0-ZF\x94V\x06Y\x0d\xe9\xf2\xdd\x188.\xa46\xe5\x9d\x13\xa7\xdd\xd0\xdd\x14\x8c\\\xb6v\x7fh\xb4g\xcdInQ\\\xc1\xacW2q\xd7t\xfc\xb2\x9e\x07\x94aKR%\xdc\xb4\xc9\xf3\xcbBw\x0c^7\xe5\x0cE\xb2i\x0f_P\"\xf1\x11KTsP\x89\"\xeb\x9a\x17\xc7e\xce\x88F\\\x9f>=\xc1\x9d\x11\x9002l\x9aY\x94$iW\xef\x0c]\x0b\xb3\xf7\xfe{\xf4\x81\xd9\xc44\n\x03\xe6\x12\xc3v}\nc\x88\xd7O\xe8!\xe1\xa4Q\xaf\x87J\xe3>\xc3\x99\xa6\x91\x1b\xb4\xc4qn\xf4\xc1 \\R\xcaK\xddh\x98\xd6\x88\xcb\xd4\x93\x9d\xfe=\xd1\xb0n\x9aO\xea\x9d\xa91p\xf2\xa5\xf0\x8c\xba\x05\xd9\xe7\x0c&\xd5\xa9[\x92ofC\x08X\xe3\xd05\xef\x97\x7f\xa0\xe7\xaa\xd9Gr_\x9f\xc8b\xcf\xe4\xc3\xd9\x89\x0eR;Y?\xffZ\x97\x98gO/\xe69\xd0Iy\x98\x87Y\xf3\\\xc4A\xd5\x1f3\xbd\xff\xb0;\xc7\x9e\xd9\x14.cF<\x1ao[\x96\x94\xdeGk%\xcb\x82 \xb9\xd4\xb9\xf7\xa2\\\x7f`\xf0\x06\x8f\x1a\x11\xd8C\xb3\xe7\x1cH\x82']8`!^\x9ad\x97]\x84\xaaT\\\xe3%\xe72\xef<6\xa6f\x02\x0ds\xc21X\x1f,\xd8\x84\xcdMM\xf2oq\xddj\x93l@\xe3\xdc\xc1'\xad\x92\xf9\x99H\xeb\xa2\x8dfB\xaf\x7f?\xfb\xdb\x184\xf6#\xef\xcf\xce^\xe9\xd3\x17\xce\xfc,\xffw\xa2\x86\x873mg\xcc\x1a\x90\xc8A5\xb5n\x0b\xcc[]\x9f\xb6\xf2\x14\xacs\xca\xfdX\x1f\xd1X\x9f\x98e\x1d\x1b!NOk\x04a,\x97\xd5:\xf4\xdaj\x97{lT\xd4\x9bu\xd6R6P]_\xc4\xa5\x9fLq\x86N\xd2K/lNl\x13\xf2s\x92\xffL\xfc/\xeb@\xfeQ\x00\xd90\x84H\x84&<6\x86\x7f\x088zi\x05\x92\xf8uJ\xc8o\x9dBn\xa8*\x8f\xd0\x1e\xd4\xa3\x8b\x9b\xfe\xc2\xd8vO\x9e\x80\x00\x13\xfd\x1d\xd8u\xb6K\\:\x02\xb0\x8d6c\xfc\xee\xef\x0fe\xb8\xe77\xd9Y\x19yC\xfb\xf5Z\xb4\xc9\xef\xdf\"]\xd6W\xadw{\xcf]\xb0\xaa\xc8F\x0d\xf7w\x8e\xf2\xe4xG\x947\xf7^\xbe={\xfe\xe9\xea\xc5\xdfPs\x847\xf8\xeb\xfd\xd9\xcfW\xcf?_\xfc\xf5\xea\xecS\xf5\xe0\xfc\xe3\xd9K\xfa\xe0\xea\xc5\xf3\x8b\x97\x7fm<.\x1f\\\xfc\xf5\xd3\x87\x9f\xdfkJV/J\xc5\x05\xedCLn/(}\x1b\x9f\xa5\xed\x9eg|u4\x97\x0e\xc5A\xda\xa8\xcd+\xff.J\xfc\xe9\xb8%\x83$\xd4\x89y\xb5C\x18/\xf3[z\xa59@\xca^\x91\x8e^\x9c\xafH\xf0\x8d@\xc9\xbe\xbd\xf9o\x06\x81&\xbe^\xef>\xbf\xba\xa6;\xd7j2\x01\x0d\xc4]~\x9c\xadH\xa0i92\x1f\x02\x8dO\xb5\xad\x06\xbac\xa5\xfc\xd4/\xf2\x85\xa6\xd5Y\xedT\xc2\xd2\xb8\x80\x95b\xab\xaa\x18;\xc9\xaa\x92W\xd7w\xcc-\xb37_\xb6\xaf2X\\\xc6\xaeK\xdcY\xba?3\xa5\xc0\xe5\xda\xe1C\xdaH\xed\xfb{\xb4\x0fa6?\xc4\xa1\xef*\xeasMfs\x7f\xc7\xe1\xec\x96\x0b\x16s?5E\xaf\xeaE\x98H5\x0f\xf4\xee\x88\xfb\x0d\x19\x0bO\xf7?\xd03\xb0\xfb\x03\xbd\xf0e\x7f\xb0\xdb7\xdc\xb1\x10nli\x98\xa1\x98[U\x01W\xd3\x0c0\xe6\x16W\xe2\xd6\xd7\\\x92r?c\\@\xb6s\x04\x9b\x9b9\x1cCl\x0c\xb3\x99\x1a3\\3\xafa\x92\xdb)f\xcfK'\xc3\xcbv)\"\xbd2\xd9\x0b\x98\x9f@\xa9[{\xccm\x0fO \xa9?\x9f\x13\x96\xfc\xaa\xf6p\xe1\xa3\xe5J\xfda\x86%\x8b\xbauK\xb6\xde\xdc\x0f\x07{}$c*\xd8$\x93\xd0\x13)_x\xbc\xb5u\xd4\xe4C\xb8\x94~\x12_\xb2\xfc\x83\x92\x19\xb0\xf6\xac\xd8\x1a>z\x8f\x0c\xba\x93\xd1kFS\x0d\xe4\xeaj\xea\xe7\xfe\xd5\x95\xb6_\xa9\x9d;p\n\xf1D\xc3:\xe7\x94u\x16\x8f\xc7`-\xfcla\xd1\x134\xf6\x96\xfe\xea\xd1\xe31\xb8C\xed7\xe2\xf2\x89\xf0v\x06w\xa8]\xfd\xc6\xec\x11\n\xd7\x84\xeeD \x9dlA\xde\xa5!\x85\x86.:\xc6)\xf86*\x93\x12\x9b\xe0\xba tg\x89T\xddc\x94\xb8v\xc0M\xee\xdbZ\xbd'\xde-\xb9^\xf9\xc1\x97\x8fIt7\x0b\xa3\x88\xab\xe4\xa7d\x95\x92\xa0\x99\x17\x14=\xdeW~\xbe\xc8\xb8=I\x15z\x99\x7fY\xde\x9e\xb0\xf4\xb3z\x06\x8f\xb8`\xb1dM\xda\xd8f\xb5p\x91\x9a\xf0tk\xc5>#^\xd4x\xad0\xd6\xad\xfd\x0c\xffG\xfa\xa8\x11\xc64\xfa\xd8\x9c\xad\x13\x18>R_\xab\x9a&\xd4\x07@w\xdd\xf6\x7f\xda\xa7\xe3\xc1\xfdd\xb8\xf5\xf4\xf2\x97\xe9\x8f\xce\x9f\xb7\xbb\xb6\x88\x01\xa3$\x95\xb1\x8f>\xef\xfb\xc6\x86\xfd\xff\xb3\xf7\xef}q\xe3\xc8\xe20\xfe\xff\xbe\x8a\xc2\xe7\x9c\xac=\x18\x03I&\x97\xce\xb0,\x03\x9d\x1d\xce\x06\xc8\x0f\xc8\xcc\xce\xaf\xc3\x971\xb6\xba\xdb\x1b\xb7\xddk\xab\x9b\xb0\x9b<\xaf\xfd\xf9\xa8$\xd9\xb2,\xd9\x86\xb0{.\xcf\xd7\x7f@[\xd6]\xa5RU\xa9.T9\xd3\x18\n\xc9`\xc4*{\xf2\x04\\\xd5EI\xde\xf0A\xb2\xb1\xc7M\x87\x0b\x1e]\x80xX\x80\xc0\x1f`k\x97\xff\xfa\x0f\xf4e\xcfi}\x8c\xc5\xfb\x80\x99\xd2]L\xf5\xcd\x82\xed(\x17\xfa5\x8a\xe9\xa2\xf9z\x8b+\xd8\x18\xf1\n\x86\x03P\xba\x82*\xae}\xc8\xa1\x83\x90\xd2\xb1\xa1`\x1f^Y\xc8\x9dg\xfa\xfd\x99 w\x9e\xe9\x0e\xc6\x05V}\xa6\xd3\x99\xa5\x99*M\xc5%\x81^\x0d^\x18\xb9\x85\xd7&\xa4S7\xf7\xdats\xea&Zj\x8c\xa9\xa1\x96:\xc7\xd4\x95\x96\x8a\xe1\xdd\xea%q\xb9\xe1\x91\xe2m(\xfc9!\xb7W\x08vk\x97\xbb\xe3`\x7fQ\x97\x8c\xbb\xacqw=\xae\xd5\x947\xca\x9e\x84K\xb5X\xee\xf1\xd01j\x96\xf7E\xbeHJ\"\xb3%\x01\x0f*N\\^_\xd8\xc8|A\xa8Z_\x88YV\x8d,\xbf\x90\xf0\x93\xd6\xec\x8ao\x0fw=\x08ZK\xe3=_\xa62\n|c\\9r\xcf6\xfd\xbc\xd8\x9d\x8b\"\xf4\xc1>\xa4n\xc6\xdd\xdbh\xd7~\\\x81P*)\x18/\xf7\xf1Z>\xea\xbc\x967\xac\\\x9b\xa6\xc5z\xa6\xc3\xea\xc1\xe9\xb4T\xb1\x1cVE\xb5\xca\x96j\xe2a\xd5\xe0\xfa[\xaa\x98\x0f\xab\xa2\x82\x8fFn\xa3\x8a\x81\x8235\x05\xf2AV\x0d\n\x89\xfd\xecu/\x95e\xbf|\xce5\xaeG\x88nF`\xb4%\x13}W\xb4arq\xaa\xf49F\xb4v\xbf%T\xe1\xd8\xf2\xd5\xce\x90Au\xf2\x0d;\xdc\xb9>\x1e\x82\xe8[\x97x^\xcdJ\xc8x0l\xf3f\xf0\x03$o<\x94i\x91I\xee\xd2I\xb6\xb9y\xe5]\x19\x07\xcf\x8d\xf2\x90\xd7\x16\xf4\xa8\xa6_?h\x02\xccr\xfb\xfaZ\xb45\xb4\x0d\x1a\xacIQ&\xdc\xef\x92PE\x92IA\x92\xc5\xe4\xf3\xd9\xd4u\xd6;\x81\xe3u\xe7\xd8e9\x9e<\x11\x02:s\x8eW,\xcf~\xcf\x85cF>\xd3\xcb$\xd2n\xb1z\xf4u\xfaUX\x18V\xad\xd5X~\xefDa\x9a\xde\x84\xd1'\xa7\x92\x1eb\xf8Y\xb8!\x8aZ\xcb\xef-\xaa\xc5ka\x07\xc7c(\xb4\x94\xb3\x8de$\x8e4\x06F\x92\x0f\xa2\x85\x9d\x1e+_\x8b\xc2\x97|$*\x08\xe4LZ\x8d}\xa0G}K>\xed\x1a{ie\xf5\x11\x1aT\\]\xdb\xa2X&\x1f=\x10\x89\xfat\xe9w\xc9\xe7Q\xbbjU>\x93Ooo\x9f\xffk{k\xd5N\x93OW\x87\x07\xd9b#.D\x12SRS\xee\n\xb6\x90\xb3 \xb9\xb9B\xc8\xd0\x9e\xdc \x1e$\x93ps\xf3\xaaa\x8d\x10\xf6D\xe5\xfd\xe6YQ\xcd\x03zt\xfd\xbf\x0e\xbd\x81\xd68<\x14\xe3\xd5hL=wU\x07\x89\xdf{f\xcdx\xbb\xa6\xb5\x89\xcc/\x84\x97E\x93<2\xe9;\xb2\x92\x0c\x91\xe0$\xbb\xc2s(S\xfc\xc2u\xd9\xb5Y\x84\x10y\xf5]\xa9F\xfe\xca\x83i\x91/\x00\x9d\x83\x85i\x9aG\xca\xcf\x0fY\x19NI+\xe1\"\xcdo\xb5#\x81\x91\xa3n\xe2\x16\xdc\xa7\x0c\x0d*w\x94\xa1\xe7C\xe2\xe6<~b\xc8\xdb\xea\xa7G\xf0h0x\xce4\x1f\x0c\xceA\xe34\xc8rq\"\x88\n\xcc\x94\x8biRX\x0f\xf9\x1c\xdc\xb3\x8b\xbdg\x97\xd6\xc5\x8e\xeeI\xb0j\x9b{6I\xae\x0d\xc1\x14\x98\xc2\x05\xc2>\x14\xc14\x91Z\xc1\x8c\x86\x13\xaf\xcaoT\xb07\x8c],z\xaf\xf2\xe9?a\xec\xf5\xd2\x98\x16E\x01\xbe\xff\xc2\xce\x15\x01\xeb\x81`G{\x05\x87\x83h=u#e\xee\x8b\x97\xdf{\xae3\xcd\x8bq\x18\xcd\x9dA\xa8\xa8O\xe3\xf5\xd9\xaeY\x10\xf1\xcc\xe2\x06r\xf7\xb5.)\x10\x82\x88W\xaa\x18\xd7\x1dL\x8c#R\xc3\xf8$+T\xcfL\x8d3\xdb\xbaC\xfe\x01\x9e6\\\xe5n4\x84\xban)\x9c\xc3r\x97\xb1D\xb0/\x0c\xc2\xcb\xc6\xd1\xf5T\x04\x8c\x94\x8c\x0dFO[\xa1I\x13\xe7\x0b6\xd0n\x08\x93\xc3J\x7f\xd3\x89\x1c\x11\x93KI#2\x04\x97\x92v\xebx\x9e\xcf\x0d\xe1\x1b\xa3\x82Z\x91\xc6\xe0\xc6\xb0\x19\x96%kgP\xc5\x9fI\xfbs\x1d\xa2G\x8fK\x0c%\xdb\xfen\xee\x96\xac[ld\xb5x\xf6\xab\x17\xcc\x86\xf2\x83b\xa9|\xdd\xef@u\x0di^\x15\x945\xf1@\x06\xe6\xc5I\x1b\x8b\xf3LY\x1c\x86\xceh\xa5\xec\x03#H\xc4=\x88\xf8\x8e\x16\xe8\xcd\xef\x19\xb7qS\x1a\xe5\x1fqA\xd3\xba\x0f\xca\x17\x0d\x18$ \x945 \xac\x0c\x80P\xb6\x00\x01},\x98\x16\x1d\x05\xd3\x86%G\x9bd\xc3J7A\xc1\xa0\x01\xa4\x82B\xa9\xafv*V;\xf5D\x0c\xbd\xe8~(\xa9\xc6\x12\xadp\xb9\x02I<5_\x01={f2\x18\xcb\\\x8b\xb0rwW\x17nrt\xb7\xfbB\xc7M\xdc\xa7D[R\xa9\xaa\xbd\xb8TS\x82\xd5\x87\x88\xbe\x05\x97&\xb8\x8e}\x98\xfb\xb0\xf6a\xe1\xc3\x0c\xf6`\xa9\xaa\x89\xdbhU);n}dD\xa5Y\x94w\x87\xc2\x06\xde\x11\x06\xd9Oa\x04:\xbae\xcf\x0d\x92\xe0\xcd \xb6q\xc6\xb3\x1e\xe3\x8e\x84r8i\x99v\xb0\x1a\x13wf\xd4\x19E\xba3\xe6\xa6\x072F\xef\x1b\x88\xe1\x0fp\xf3\x06n67\xcd\xd46\xab\xd1]\x08G\xacwn\xe8\xce\x91T\xbd\xb9\xf2\xf0\x8em.\xee\xd8\xee\\L\xf3P\x06\x81\xb7_\x0b\x1e\x0b\xb2\xba\x9a]4!\x1a\xcd\x7f\xcd}\\\xc3\x1eTq'\xde\xc0\x066\xb9F\x8e\xc3\xf5\xbc \xce3b\xb8\x14\x06\xb5\xb3\xb9\xbb\xf6\xe1\xce\x879\xb7\xc5\xe3w\xc4\x03\xba\xf6\xd5\x0b~<\x1f\x1f\xfc\x99\xc7j\xa5\xc1\xf9\xf8\xf2\xc3\xf9)\xec\x89\xdd\xf6\x8d\xe7\xb3\xd5'u\x11\x1c\x8d\xdf\x1e|xw \xfd\xfe\xa9ww^\xf5\xf8\x9d~)\xfcL\xbf\x12\xff_\xdf\xdb\xdf\xb4BR<\xb7\xdcm\xec\xe8\xdb<1\\\xf1\xdc\xdf\x94\xd1rH\x85Fm\x8aD1pD\xee\xc5\x0d\xb1\x18\xddd\x83\x00\xad6a&\x1f\xec\x96\xd6+W\xa8\x869O_\xeaGCU\xcchc]}\xb5-\xdc\x0e\xa7}\xd9\x7f\xdep\x05\xa7\x07\x82\xc9\x8cxp\xf8\xda \xb39FQ\xde\xe2(\x10\xa6I\x16\xa6ig\xd7:;\x0eP\xb9&\xeb\xcf\x08r\xa4Q\x9a\x97b\x00\x9d\x05\x9aF\xe6\xdcu\xc5\xe0\n\x86\x0c\x0e\xba\xe6\xde\x93\xa8\x15{\x1a@\xba\xd2\xb0\xd9)\x81d-\xb0\x11s\x03a\xdbu\x8b|V\xed\xab\x05\x90\xd8\x81\xfb\x83GM?\xae\xff\x93U\xbcNh\xe7u*\xcffA$\xa0\xf8\x80\xbaa\xa7+\n\xae\x01\xd6\xa3T\xc5\x88,\xe7\xc9\xdfV9}\xd3\xe1\x8b\x83=7\x05 ?\xd9\xb3\xf0\xd6^\x0di-\\,\x1f\xa5\xb1\xd7C\x1a\xfb\xb7\xcfO_>Fk/:\x14\x0d\xa1j-}\x94i|\xd1\xa3b\xc8\xdb\x9a}k[\x83t\xd8\xa2<\xa3I\xb6j\xdf\x0c\x81\x95\xc5\xe3|0j\xf6\xbb l2\xfcX\xaen\xf8\xb5\xb5\xbb\xf2!\xf4\xe4e>\xe3@\x19+\xbc\xa9#:s\xe5b\xaf\xca\xfa\xf7Y\xc9v\xe50\xd2C\x0c<\x92\xbaH\x83\xea2\xfa\xa67\x851\x0b\x852\xb5\xd9@\xaf\xcd\\\x96\"\xbf\xce@ [\x92\x96FId\xb8\xb5\x9d\xa2p\xa1\x99\xb6l\xa3\xabvx>\xf6\xd0|yp\x93\x17t\x04N\xc8\xfe\x1b\xd0\x1f\xcb\x92%\x0b\x0c\xe11\xce\xe2\x11\x94\xae\x13\xca\x04\x92\xc5\\\xff\xb9\x99\xd4]\xcb1%<\"H\xb3\xaeD&\xeb5\xd6\x1f\xba\xeb\xbd\xa0!\x1b\x89Zg\xc9\x92\xf4\xfax\xa2\xb1\xae\x1f\xd3U1\x02\xe7&]\xe9&\xed\"\xc3a\x98\xbdO\xc3\xbb\x118Q\x98-\xd3\xf0\xae3\xdb\xe5\xbc\xc8W\xb3y\x9d\x9b\xf2\x04K\xa1y\x98\xcd\x08\xcb\x8c?,\x99RT\x01w\"\x8c e\xce\x92/\x96y\x99T\x0b\xe6Du\x82uu\x94Bb\x1e\xd5b\x1dS\xa6\x14\xfc\xb0\x8cQ&\xa0\x96\\a\x9a\xadhF\xc9gzB\xb2\x15\x16\xc2\xb7\x05\xc9V\xb6\xecK\x9c\xf8|i\x9b\xf5\x15v{e\xe9\xa9\x12\x1ek\x04N|\x93v\xcc\xe1Q\x11\xceX\xa6\"\x9c\xd93\xf0\xd9ey\xac\xd3\xca\xb3QRT\x19)\xb1\x80\x16f\xfd\x9cP\x99\xf3sb\x1bG\x11\xce0\xc0\xa3\xc8\x99\xb2\xdf\xf6\xacg\xeb\xaa\xf5|\xdd\xd5\xb8\\w\x96\xb3c\xc1\x8f\x8a|\x89\xb9\xf2\xa5%\xc3\x8ao\xd7\n\x9ec\x91\xd0\x05\xd7\xe3\xc5\x92&\x84\xcd'\xe1\xbf,\xd9\xb2\xa8\xb8[R\x9eQ\xfe\xb6e\x8dE\xb6\xd8\x9a\xa5(r67\x84\xfd7gy\x9bG\xabr\x04\xce\x94\xfd7g9\xce\x96\x08x<\x02\x981\xcb\x9f\xc9\xddQ~\x9b\x8d\xc0\xf9D\xee\xe2\xfc\xd6\x82\xca\xfeL\xee\xde\x17\xa4,y\xbe%\xfbi\xcd\xf8a\xc9s\xad,\xab\xf0\x0e-\x93\x19\x0f2\x92f\xca\x8cs\xe9\xca|Bh\x18\xab\x05\x16\"\xc1^H\xc2\x0c\xcb\xdf\x013U\xe0\xb8\x118\x0b\xf6\xdb>\x07U\x108\x99\x95qW\x1dY\xcfp\xee1gn\x9b~\x9e\x91\xef\x03\x9e\xd3\xba\x11D\x988\x99\xd16\xbb\xef\xc3\x121\xdd\x92\xfd\xb7eY\x95<\xcb\xaa\xb4e\xe1G\x89\xfd\x1ca\x19\x92l&\xf2$\x99\x05\x19\xbd/\xf2\x99\x80\x9b\xa5\xf8i\xcex\x1eRRm\xcb\"\xa4\xa4kKr \xdb\x08\x9c\x12\x7fX2\x11\xf2 \xb7Y\x89?\xec\x99\xf80J\xfe\xcb\x96-\xe5\x91=\xab.\x962\xa5\xb3\x9f4LS\xde\x07\xfe\xcb\x92mU. b\xec\x92\xff2g\xbb$\x9f\xa9\xdc\xd1T\xfe\xb6dM\x16\xa4:\xf3h\xb2 ]\x87\xdde\xbe\x8a\xe6\x87a\x16\x116\xa5\x94\xbdE\xf8\xd6\x91\x9d\x1f0\x98\xd7\xde_\xf6U\xec\x17\xcci\xdf/\x98U\xeeX\xcc\xdb\xb1e\xf1\xda/Q\xa9>Z\xa5\xd4d_3\xcdX\xd1\xcfy\xbaZ\xd4P\xb7\xc6\xd7\xae\xf5\xfc%L(\x87\x96[\xfe\xcb\x92mNp*o\xd9\x7f\xcd\x04\xb4Y`\xcex(\x1e\x85\xa6\n\xa2w|\xe4\xc0\xa6\x90\x18\xb9\x8d8\x04^P\xa6ID\xdc\xa7^\x93\x1dX\xa3j\xdb?\xbe\xa2VE\x93\x94>'2\xd2Z\x1d\xa4\xb0}\x990 p\xad\xa9\xa2~\xf99:\x8f\xf9)\xcc\xe2\x94\\\xe6\xcbwdMRw\x1d\xcc\x1b \x9e\x0f\xeb\xa0]=\xec\xf5{ll\x8e\xa2$t\x9ca@\xcc\xbe\xae\x19\xdb{\xf2\xc4\x98\x1e\xd4\xd5\xb6\\\x01j\xb3X\xb6\x9b7\xb5.5\x88\xdc\x0dc?\xbe|\x01\xe3\x87\xa0\xaa\xdf\xed\x0e1\x97b\x81\xcb|\x80S\xd1\x86\xa4\x98\xfa\xd0\xed;O>b\x00=j}\x95\x16\xde\\D\"\x99\xcc\xaf`\x0f\x96\x9b\x9b>D\x13\xf6&\x82\xfcV\xaf\xed\xe5\xe6\x11 `\x0f\x92V\xc0\xc6#\xc20%\xc9\xa2\x84\x94\x13r\xd50f\xcb\x87\x08\xb3P\xcb\x9d\xed\x1c\xabu[\xa1\xc7\x99\\\x89X2+\x1e\xa7\xd8\x91{\x9d\xcb\x86Wht/v\xbd\x07\xfbfp\xa2E\xb8\xfcqu\xc3\xd6\x11?(\xb5\xf8\x12e\x08\xb3\x9d\xd4\xe5G\xfd7\xd5\xa8\xd4 \xaa}@%Gg'H~\\\x88\xf3\x96W\xe4TGqc\x02\xe4\xa1\x0c\x1b;\x9d}\x16\x01o\x95\xf6\xaa\xea\xeb:\xee\xd9cC\x0d\xc6\xc2\xbf\x1c\x9f\x1e\x9d\xfdr\xfd\xd3\xc1\xe9\xd1\xbb\xb1\x1c\x0bR\xd4r(x\x86p\xbe\xbb\x1e\x9d\x9b\xba\x92\xde\x16\xa3s\xef1\xbc\xb7\xa2dUEf\xc1}\x96\xf2\xd8\x17_\n\x01 \xf3\x04\x90`uI\xe6\x08\x15\xd7\xc1\x93\xd5\xecO\x92\xf5\xf5\xa8U\x81\xec\x10\x96G\x1a\x97u\xca\x87\"\x10\x1f\x85N\n\xbeck\x98\xc0\xba\x1d\x9b\xf7\xd6\xb0\xb6W>\xc4\x93\xd5\x15\xef.n\xc7\xbdVHy\xe8;.\xf4Z\xfb\x03\xd5\x80b\x867\xa8\x9f-\x85bK7\x1aK\xfd8\xfdhB\xcf\x90\x8e\x88\xc86<4\xe9\xfbpF\xfe\xf2k\xcfA\x86\xb7\x17\xfa\xad\x1e+\xdd\xe9Kz-\x9c\x86\x9a\n\xba\x0e\xa2\x19\xfcm\xd2\xe3\x92\xf7$\xaa\xd3\x06UQ\xa0k|$+W\x85\xc0`?\x87\xe9\x8a\x9c\xe4YB\xf3\x02 \xba\xdeq*\xae.\x90T\xc0K\xdcu`\x984\x97\xed\x80\x0d\xcc\xb41\xed:|\xd8$\xac\x82\x82L\x0bR\xce\x95~\x95\x96\xfb@\xd3R/\xf8\x18\x94\xd2\xe8\xebzZ\x87\xecR\x1fm?To_-\x06\x08\x83<\x904\xc5\xd4Ur\xa5\xd1P\xb4\xe6\x94k\xb4^\x17\xab\x94\x94\xd7\xd7\x0d\xdd\xf0\xeb(\x8c\xe6\x04\x13-\xd7\x8b\x85Bp\\_O\x93,\xc6\xdcv\xaa\xa5\xad\xf7W5-\xc8\x04~\x8d\xb7\xb5\xfb\x06\xa8\xd5\xb1`\xb3\xe0ds3\xbbB\x85\x01\xae*s\x0fO\x83\xbe6\x82(_,\x93\x944\x07a\xbaB'\xa2\xfb\x06\x96\x83M\xa1\xe3hT\x0cQ\xc6)\xecI\xddn\xda\x8e\x04\x84\x13\x98\xfc~\xe3\xf5\x18\x07\xa8\x95\xa2\xae\xfe?\xd0\x07q\xaby[ OY\x92\xc7\xda\xe2\xae\xf3:\x86oD\xa9\xec\xc9\xd4)p\xd1!X\x86\x13!\x07G\xf9\xe0\xbe|\xd1Z\xe5#\xcd\x82if\x88M\xdd\x1a\xad\x0d\x1cB:\xd0\xf2\xa5\xa8a\x99o\x01\xa3\x11\x1a^\x12\xb1\xbe\xea>\xa3\x19Doq\xb5\x81B\xb5\x8c\x16V\xd1\xef\xc3\xa2$\x05\xb0\xe9C\xc3\xb2i\xbeB~\x1f6A7K\xd7\xf6Eq\x15L\xa5\xf1g\xebK\x98b$c\xfc\xff\xe5\xcb\x90]\xdf\x9c\x9d\x1b2\xcd\x0bb4\xf7k\xb9\xb1ZK\xcfx\xbd\x93\x94Hm\x9c\x8eI\xca\x1fs\x92\x82r\x89l|\xee\xc3\x8e\xc9\xf5!C+F\x13R\"\xd9K\x93C\xc4if4/\x0dS:\x82\xa4\x9e\xf2\xd6\xb6\xbb\xd7\n\x84SJ\x8a\xff=\x0b\xc0o~\xff\xa7-\x02\xc34\xf7@\x13F\x04\xa0M\x08\"/\xdb$\x18T[z'\xc10q8 \xc5cM\x02\xefA\x9f\xf2\x17\xcb\xd0\x0cJ\x8b\xae` \x8c\x00e\x06\xdc\xe3cs.\x86\x1dy\xf5Y\xd9\xd2\xa0\xe7\x87\xd9\xb0j4\xba\xa4\xda%fU!\xca\xce\x1e\xc3N8g]\x87E\x98\x853R\x8c \xc9\xd6a\x9a\xc4bg0\"\xc5\xb4'\xa0\x8d\xbd\xe9\x95:*=\x84\x13\xe6\xbe\xef:\xc5I\xd9Z(}\"\xdc\xeee\xf2\xfe\x17\xcc\xe5\xeec\xcc\xe5\x8cP\xde\xbb\x01jo\xc2\xcb\xc1\x9e\xdeB\x0d\xef\x15\xe1\xe9\xb6\xfa1!W\xda\x1e\xfd\xea\xdf\xdf\xf3{\xbf\xbb\x93\xce\xbd\xbb\xe6nC\nn1hq\xd6\x8e\x16\xc0\xc12/O\xc2\xcf\xed\xaf+\xf9\xb5\xfd\xa9\xc4OIy\x9c\xbd\x0boH\xda>x\x94\x8f^M\xc7\x9b\xf2\xa5,\xcf\x87l\x11\xd2hN\xe2\x8b(_\x92\xb2\x8e\x0dj\xfc\xbc\xb5\xe5\xb7*C>\x05{\x8bf\xf5x4)\x9d\x10\xa2\x14F\\\xed\xbe\xe1\xa3\x82\x1f 4z\x9ag\xfdz\xcd\x0fN7\x07\xa1\xca\xaf\xea\xecaq\xcf\xf3 \xdb\xdclCr\x15\x82\xfb\xf53\xe1\xdb\x11\xbd\x04\xb2\x9f[[V\xd2\x99\x0b{\xcc\xbc+\xea\x80\xb5\xbe\xb4u\xabP)\xb7$EP~J\x96\x97\xf9'\x92\xd9\xc3\xef\x80\xa2\x11\x0f\xfb\xdc\xc5\x19_l\xcb\xa4\xc3\x1e\xf7\x0cb\xfd\x9a\xc1\x16\x9ft\xbe\x06+}\xfeK\xff\xe1a\x15^\xdb\xa2`r)\xba\xeb\xfc\xdd\xf1\x8cq\xa5\\%\xb6r\xa7V\xaa\xd4w\xbd\xa8=B\x15\x02\x8f\"\xc1C]\xc7a\xc3\x17\x0d\xf6j\xa3\xa9\xf5\x0f\xd3\xb8m\xc8IL\xa1H\x9d\xc30\xfb=\x85(LSX\x10:\xcfc\xc830b\xd4\x96\xcb\x8d{\xcew+&\xa20S\xd8\xf5\x02)x\xd2no\xd0a\x87\x08\xe0\xe2\xe6M%\xf5^\x1f\xa4\x96\xc5H`\x1f\xb4\xaa\\\xf4:\xaf\xd8\xb1\xdd\x7f`}\x9d1 S\x14\xd5\x15jD8\xcdW\xb8\xc0\xb6y\x1b\xc1!\x8dd\xf2\x97\xedr\xedt\x19\xae\x9c\x87]+\x10\xe1\xc8\x18\xd3^\xdd\x9e\xa1\xe6\x8eJ\xd1?\xc7\xd9\xf4\xfeun\xfcs\xbak\x83\xe4<[\x93\x82\x82p\xfbKsX\x16\xc9\"\xa1\xc9\x9ap\xefON\xdf.\xd3\xd6\xb9\xe9\x0c\xec\xfb\x9d\xfb\xfa\xe5\xd0\xadpd\xd4w\xdd'\xb8\xf0\xf4\xf5B\xd7\x1f\x0dE\xfa\xae\xe7:\xc7\xe3\xeb\xf7\xe7g\x97gz\xd0\xd1U+jA\xe3s\xd9%\xc8\x02)\xcc\x12\x8e\x99\xdc\xdd\xef_x\xae\x93L\x8bpA\xf4\x86\xe4S\xe0\x05\xa0\xcdS+\x8f\xc2\x12\xa0I\x10#7\x97ix\x07{\xe0dyF\x1c\x1f\xa3R\xecx\x0d;\x17\xee\xa4\xb0,\"\x96\xed\xaf\xe1:\xe4VE#\xc7\xe7\xa4(\x0dP\xe3/\xa3\xbf$Y\x9c\xdfV\x08\xc3\x0b\xf2%\xc9\\\x1e*\xa0H(q\x9d\x1fx\xd1?T\xc2\xec\xb7{\x1c\xbf\xfe\xf0q[|r0?\x1a\xbc\xba\xc2\x95\x14 \xde\xbe\x81bk\xeb\x8d\x07\"<\x8b\x12oe\x92L\x8a+\xc3\x8d\xa4\x00\xcc\xd2\xd5\x0e\xc4\xaecE\xa0\x1eP\xa3\xb6Zi-#\x02\x16\xa2v\xe9.Kq\x8e\xcf\x8f\x17N\x91\xa0\x03t\x1f\x9a\x9f\x85\x93\xd3I\x88n,\xd1\xfe\x04=\x9fka\xd4\xa5\xe3h7\xfb\xff^D\xfa\x17O=\xd7\xf9D\xeeJs`\xdf\xdd\xdd\xfe83\x96\x8e\x17\x82\x86w\xf1\x07w(\xf9\xe0~>5\xd9$\x17\x13\x871\x11\x05\xd9\xfaky]\xce\xc3\x82\xc4\xd7\xd7\x8el\xd4\xfc\x0d\xef\xfb\x1f8\xa2\\\x8e(\xe7#\xfa\xc7\xd7\xbe\xf1\xd8\x10\xab\xa38\xd2\xf7\x9b\xd7\x90~R\xbe\x97 |6\xf5M\x04\x99O\xf3wy\x14\xa6\x84\x9f#\xbe\xe4\x9e'\xb0u\x82~\x07\xd1\xa1\xacsVG]B\xbb\xb2\x02\xcd\"-T\x18;\\\xc34%8be\xe9F\xc2\x12\x19\x1e\x008\xde5#8773\xd8\x84\xc2\xab\x18\x13F\xc4\xf7\x9dl\xd6\xbd\xf0\xd2\xe2\xea\xf7\xd9\xffx\xb6\xf7y\x0f\xa9\xf4\xe2\xe5C{\xfb\xa8\xa4\xd2\xee\xeeK/\x98\x9a\x899\x93\x07\x17\x13\x9e\xea\x1b\x87\xf9\xbe\x07\x95a6r$V3!='5A\xeeC\"\x03\x84\xa2\x03\xb6\xf6foz\xa25\xdd\xecH\x87\xc6\xcd\x8d~\xcf\xb9\xea\xf5\x80\xf3t\xd74\x03\x18{\xbdw-\x19#b\xcf\x04\n\xcem3X(\x03_\xf2\x18B\x82\xa7!\x0d\xdf\x11\xc6XI\xa0\x13L\x8c\xa5\xf9\xf2Eu\xd4\x9e\x19$a?\x86\xb1\x8cW\x04\n9ju\xcf\xc7=)g\x95\xec]}\xaa\xcb3\x11\xd5J\xa0\xd1*\x11e\x13\xe8\x8eVc\x1d\xbf\x81uy\xfa\xbdY\xd4\xf0\xbdM\xce\xd9\x07\xbe F\xefd\xc8\xbf5W|k\xfc\x9b\x03\x9b\x90\xa1\xbf\xdb8'e\xf6{\na\x14\x91%\x85\x82\xcc\xc8\xe7\x96\xd3[\x01\x11\x02\xa9~\xdb\xa6f[\x14\xa5\xc5\xfd\x9b\xd3x\xc6\xc3\x1el\x07\xdb\x9aH\xc9x\xe2:\xdb\xc1\xb6\x03\x13r\xe5jnu\xaa\xa3\xd6(\x80\xef=\xbe\xe9\xa4\xb8\xe2\xf6\xb8\xb0am\x03z\x8et\xd3\xfcn\xdc3\xe0\x11\xc5\x8d\x8c\xb4\xfd\x90\xec=L(\xb27F\xac\xda2Q\x16\xa2\xad\xd6 \xc9M\xa0\x9f\xefx\xc1\xf4\xa1k\x9b\x07\xfc\xcc\xe7\xec\xa9|\xe1\x81\xa1\xfe\xf1\x15\x83.\xd4\x19\xfe\xa1Gtq\xae\x91\xc4!xAs@\xdd\x1d\xd4\x97'\x90d\x1c\x93\xac0f\x95 c\x0b|\x1c\x06\xd3\xd65I\x1f\xac\xb7\x97DH\x8cf\x84*\xfc0\xef\xb6\xd9\x8d\x07\x0fXz\x7fT\xdf\xa1\xcd\xb5\xfd\xddFs\x90\xdf\xc1\x1fc\xc2\x05iI\x9e\xc19\x89VE\x99\xac\x89\x94\xb8\x92\xcf\x94dq\x92\xcdZ\xc5\xc2\x15\x9d\xe7\x05\xfc\x9c\x84\xd1\x9c\x94i\xb8\x86w9-\x17a\x96\xaf\xe1\x87T\xfe|\xf5\xfa\x8f\xb3E\x98\xa4A\x94/\xfe\xd0\xaa#M\"\x92\x95\x04N\x8e/\xb5oz\xd6\xcb9\xe6\x82w\xa2\x84{r|\xe9\xf5\x949\xcc\x97wE2\x9bSp#\x0f\x9e\xee\xec>\xdbz\xba\xb3\xfb\xca\xd8\xe5\x9e\xaa\xde\x93b\x91\x94\x18\x14,)aN\nrs\x07\xb3\"\xcc(\x89}\x98\x16\x84@>\x05\x06_3\xb6L9\x84\xd9\x1d,IQ\xe6\x19\xe474L\xb2$\x9bA\x08Q\xbe\xbc\x83|\xaaW\xcf\xce\x11(\xf3)\xbd\x0d\x0b\x02a\x16CX\x96y\x94\x84\x94\xc4\x95\x1e/Zf\xc04II .\x9d\x13p.D \xc7\xc36c\x12\xa6\x90d\xed\xca \xc8\x9cp\x9b\xd0y\xbeb(\x9d\x83M\x92g\xbe\xf0s\xcdz(?\xa7\xc9\"\x11\x0d\xb2\xe28\x8b%\xd0\\\xaf{U\x12\x1f\x07\xe5\xc3\"\x8f\x93)\xfbOp\x0e\x96\xab\x9b4)\xe7>\xc4 k\xe9fE\x89\x0f%K\xc4\x05\xf4\xd9(\xb7\xf3\x02J\x92\xa6\xac\x86\x84\x94\xc6\x89\xa9\xfb\x8eE\xf0\n\x80-\x06\x15\xd3\xcbz\x05\xb7\xf3|\xd1\x1cgR\xc2tUdI9'X&\xce\xa1\xcc}\xbd\xfarU\xdd+\xb0\xd2\xd3>\x1a\x1f\x81sp\x01\xc7\x17\x8e\x0f\xbf\x1c_\xfet\xf6\xe1\x12~98??8\xbd\xfc\x15\xce\xde\xc2\xc1\xe9\xaf\xf0\xe7\xe3\xd3#\x1f\xc6\x7fy\x7f>\xbe\xb8\x80\xb3s\xbd\xe6\xe3\x93\xf7\xef\x8e\xc7G>\x1c\x9f\x1e\xbe\xfbpt|\xfa'\xf8\xf1\xc3%\x9c\x9e]\xc2\xbb\xe3\x93\xe3\xcb\xf1\x11\\\x9ea\xfb\xa2\xe6\xe3\xf1\x05\xab\xfbd|~\xf8\xd3\xc1\xe9\xe5\xc1\x8f\xc7\xef\x8e/\x7f\xf5\xe1\xed\xf1\xe5\xe9\xf8\xe2B\xaf\xff\xed\xd99\x1c\xc0\xfb\x83\xf3\xcb\xe3\xc3\x0f\xef\x0e\xce\xe1\xfd\x87\xf3\xf7g\x17c88=\x82\xd3\xb3\xd3\xe3\xd3\xb7\xe7\xc7\xa7\x7f\x1a\x9f\x8cO/\x038>\x85\xd33\x18\xff<>\xbd\x84\x8b\x9f\x0e\xde\xbd\xc3\x96\x0f>\\\xfetvn\xea\xfd\xe1\xd9\xfb_\xcf\x8f\xff\xf4\xd3%\xfct\xf6\xeeh|~\x01?\x8e\xe1\xdd\xf1\xc1\x8f\xef\xc6\xbc\xe5\xd3_\xe1\xf0\xdd\xc1\xf1\x89\x0fG\x07'\x07\x7fb}?\x87\xb3\xcb\x9f\xc6\xe7\x98M\xf4\xfd\x97\x9f\xc6,\xa957\xa7pp\n\x07\x87\x97\xc7g\xa7l\xcc\x87g\xa7\x97\xe7\x07\x87\x97>\\\x9e\x9d_V5\xfdr|1\xf6\xe1\xe0\xfc\xf8\x82\xcd\xde\xdb\xf3\xb3\x13\x1f\xd8R\x9c\xbdeY\x8eO\xdb\x9d>=\x1d\xf3J\xd9\xaa5\x17\xf7\xec\x1c\xdf?\\\x8c\xeb\x9e\x1e\x8d\x0f\xde\x1d\x9f\xfe\xe9\x82uH\xcd\xacC\xcdv\xe3]\x9e%`!\xf7\xa5\xf4\x02\x92\x8c\xc1g\xc4\xe3\xfc\x8a\xf3\xb5J9\x12\x97$\x8d\xc4s2\x1b\x7fn:\xf1S\xe2oAS\xc7\xdd\xd88\xea\x874Z\xb6q\x10R&AE\x04\xaa}\xf9\xab\x0e\xca\x00#dI\xa8\x12\xa6\xc1XU\xa5x\xc26<\x1a\xd0\x19\xbc\x92\xf7w\x95M\x89\xa7\xb2U,\xc1E%\xa4\xcbdA\x1a\xd2.k%|\n\x1b\xd5\xf0$\xa3ZVK\x17\xebCF>/I\xc4N\x992\xa1+\xe1\x83e\xd0\x8a\xe4VI\x97\x14\xd3\\_#o|}\xedT\xf7PUh\x99\x96\xb0\xab9ak\xe1\x94\xcbH%\xda\x00\xc1\x10\xe0h\x17\xad\xccd\xd4\xfa:\xd0G\x1d g\xe7\xaa\xd3\x96\xc6R\xefS\xaf%\xab\x9c\xec\x18\xae\x14\xe5M,7\x9e\xec\xce+*\xe4jz\xb5N\x1aZ$\xf3\xeb\xf3\xaa\xbc\x0f\xbb\x06\x9d=k\x14M\xc3\x04\xa0\xf9]%\xe0\xc4\xb7\xa6~\xe0\nidA\xb2~\"w\xa5\xbb24iu\xa1\x0f\nc\x84\x12\x9f\x90\xfb\xa2G\xe1I\xee\xa2gz\x1e\x19$T\xc1\xc2\xd0S\xd2\xe8\xa9\x8c\x9c\xeb\x86\x93\xb2\xba\xf54h6\xaay*\x90%f\xeb\x06\xf5Y\x0b\xa5\xea\xc9\xd0x\x8cm\x03\ntN\xd5\xdd\n\xa8\x8b\xa2\x85G\xaf\xee\x83\xd9~i\x8e\x0c\xa35\xe5\xe2\xba\x97\x8bw\xb3F\xa2\x90\xf9\x8a\xb7\x04-\xd6\xd5\x94\xb6\xf7-\xf5\xf9\xea\xf9\x90[s|E\xdd\x96\x11?\x06\x9a\x13\\\x88O\x86\xd5\xa3\x8d\xd5\xa3m8\xa3ze\xbc\xd7\xbc\xc2f:\x0f,l\xec\xa0!d%\x1bMhA1\xcd\x80\x94\xcf=\x11Oq\x10\xbf|\x1f\xa5K\x9b\x00\xbb\xbd\xf4D\x89\x92\xc4\xd6\xd6b\x94\x88\xcc\xba\x01u\xb4\xd4{qZ'W(\x11n\xe7\xcf\xb8>\xba\x1et\x9a=\xea\x8e\xa7\x86\x1do\x0d7,Q6\x9d\xe4\x96\xbdc\x0c\xb9\x94\x08\xffqO\x9e\x98\xa6\x85\xf1\xf7[\xbb\\\xc6W[\x08M\xf2+6\xbcb\x92_a<\xf7\xc3\xa4\x88ViX\\90\x92\xa9\x04\xb3\xf9\x90 \x97\x0e;\x08P\xe2\xa3!\x00\xaa)\n\xac!\xf6#\xe56ih\x9f(\xcc\xd3D\xda\xd0\xf2\x0bR\x96\xe1LV!\xdf\xf6\xea/C+*i\x18}\x12\xd5\xf0\xdf{2\xd5P\x85\x14\xc57w\x04\x03\xf0 \x06\x922\xde\x06\xe1m\xca\xe4\xad\xf8\xc2-?\x84\x1f_\xe0~\xd5\xf2\xecn\x91\xafJ\xc7\x83Mpp\xfe\x1f\xacP\xf8\xfd+\xf35\xe3\x0bc\xc8#\x96n\xf2|\xcc\xd2\xf5k\x80\x95H\x7f\xed\x99\xcc'K\xbb\xd8\xc9\xa4\x10\x8d\xda8J\x84\xbb\x1d\xae\xf0j\xd0\x9d\xe2zS\xdc\x19? \x0b\xd7{\x03\x9b\x9b\x14~\x80\xcc\xa8S,g\xa2\x1do \xa4\xec\xbc$\xd4-0\xfeW1\xd9\xbd\xb2\xe9\xed\xd6\xbf\x14\xa5'\xde\x07\x86\xac\xfdF\xb2P\x8f\xc2`\x1ceS\x15\x9em\x94f\xe2{\xe9\xf9\xe0\x9c\x84K\x9b\x10x\x90V\xbc\"Un\x85\xd0\x13\x10e\xf1\xea\xf8\xc2\"\xd2|\xd1\x12\x81\n\x88\xda\xd5E\xf4\xa5H\x7fi\x84\xb4\xd4\x0ei\xc2< \x0ei\xc8\xad\x140\x1a\x99\xd1\xca\xaaL\xfe\xce\xf1\x05\xfbaX\xf4\xd4\xb0\xe8\xb9\xdfH\xae\x16=i\xa6\xf3E\x0f\x9b\x89|\xd1W\xcdD\xbe\xe8es\xd1S\xe3\xf2\xa8C\x1e\xacN\xdb\xf0\x9b\xb2\xb5\xcb\x1d\xa7\xd0\xca\x9c\x98\xeb\xdcK\x1f$\x9b\x9b\x19\xfc\x00\xc5\x1b\x0f\xc8$\x87M\xc0\xf81\xed\xb05\x92o\xd3\xe6l08\xbdx\xaa#\x1c\xa1\xf2\xfcZ\x07\x1bcL6\xa3\xaaS\x0b\xda\xba\x84\xc4m\x18\x0c\xd5\xe0\x8a]\xec\xb9\x8a\xb1\x90,@B\\Q\x1e(\xdc\x90\x1b\xb6[E\xc7Z\x8dj\x10\xb8V\xbe\xaf\xba\x03\x1dF\x83\x9a\xf7\xf4\xea\xbe\x8b`>%\x9e\xebkcZ\x83\xf6t'\x9a\x97\x8c\xf6\x14'\x03\x16\x0eq\xd37\xaa\xb6\x08u\xc7A\xab\x99\xb3\xaf<\xe8L\x15E\x15\xd56\xb8\x87\x92\x8dU;\xbd\xd9\x9ey)\x06!\xed\x0e\x1b\xb1z\x95\x9e\xe9\xab\x015\xf2m!e\x90\xbaB\x16\x8e\x08\xffl\xd0 \xcbcry\xb7D\xd2\xc9d\xfe\x88\xf7Af:\x92;\xa4\xc7zH\xa3\x1e\x83\xe9%\xdfW8\xbb\xd5\xd4\xec\xf1\xab&\x19t^\xb0&&\xbf\xe0l\x1e\xdd\x15\xec\xc3*HJ-7\xb2\xd4\x9a\xde{{\xfeAgPv\x9f=\xf7\xaa\xcb\xd5!z7\xafwv^\xee\xbe~\xfd\xf4\xfb\xe7/\x9f\xef\xbc~\xbd\xfbP6\xc5\xe4\xbf\x1d\xe7\xf1\x0f\x8c(\xc7_\xff\x81\xbe\xf1\xb93\x02\x02?\xec)\xa2\xb0\xfek\xb1{\xf5\xa6\x1b1I\xdc\xde\xba\xd4\xed\xe9\xceC\x80\xfb\xe9K\x9d\xc0\x04\x01\xdd\xdf\x08\xc1l\x13\xe4\x8f\x00\xc1\xd5NH\x1a\x10\x8cU\xa3\xb9cDJ\x83\xc5\x9env\xd0\xca\x00\x9d\xf7\xe0 \xe5]u\xeb\x05\xf9\xdb*)H\xe3\xc5uV4I\x1d/`\x03\xb3xb\x01U\xae\xfc\xe5\x8b\xdc\x8e7 \xdeD6^du\xc6zz\x02[}u=\xfbf\\=`3v(W\x99\xaf\xd6[FT\x0c\x04\xb6?\x06_>N\xdc\xfd\xd1\xe4\xffL>^]}\xf7\xc5\x9d8\xbf\xbf\xf2\xdc\xfd\x91\xbb\xbf\xf1q\xd7\x9b\xfc\x9f\x8f\x1f\xaf\xbe|\xfc\x18x\xdf\xed\x7f\xdc\xf5>\xea\x81Yx\x00\x98\x8f\xb7\xdf\xfd{oH\x07\x8b!S\xc3\x8eI\x17\x8bV\x92t\x01\x98F\"k\xc3\xad\xb0\xc7\xc6\x1ed\x08\xd4%R1JB\x158B\xa64\xdc\x0em\xa0F .?\x8f\x05\xc2\xa3\xc8n$\xea\x9b,A\xf9\xf6H\xa4\xd3<\xf7^\x86\x0e\xf7BD\xf7\xa4\x1f\xcd\xf2\"A\x99pm\xd3\xcaE\x17\xf5\xc1\xb9\xbe&\xe5I\x1e\xafR\xe2\xe8\x1a B\x1bAU\x08AC\x9b\x05Y\xe4\xc9\xdfI|\x11.\x96)y[\xe4\x8b\x8bhN\x16\xa1\x90*\xf0\x8f\x87\xa8,\xf8\x97\x93w\xe3\xcf\x98\x8d\xb3\x10\xf8\xf3/\x8bT+\x94dSR(\xefe\xbbfq\x00\x824\x81i\xd4\xac(z(\xec\x98\x89\x1b\x0b\xdd\xcc}\xf1\xfd\x0b\xcf\xb0\x0f\xf0\xd3\x8b\xd7\x9e\x91\x97\n\xed\xeb\x83\xa0\x10\xd4\xf3(T\xf5\xdaXKFF\xd0\xddZ\xfd\xae\xfdk-|\x19\xb6+\xe1\xa2\x99\xe1qm\xa5,\xa7\x95\xc7\x10F\x8bg\xbd&\x8b0I\xef\xd1\xc2\xaa$\xc5\x1f _\x8c \xca\x17\x83\xda\x12\xfdb,(\xd9\xa2\xc9\x828\xc3[t\xe5\xf5\x95\x17\xd0\xfc\xf8\xe2L\xa8\x84\x19\xf8\x02\x83<\x05\xd1\xc4\xf0\xb6\x06\xc5u\xe3\x95^O\xd3<\xa4\x8f\\u\x92Q2{\xf4\x0e\x0bT\xd8G\xff\x83\xb2\xca*\xf6\x94\xb88\x10 \x8dW\xad\xf2\xa5\xdd~\x13\xdc\xdb\xbcLw'\xa4\xcc\x82mt\x17\x9d\x0frr%\x99\xdeyF\xff3 \xc4f4h3a\xf2AO6\xc14/\x16\xa1\x812\x02\x81\x12V\x13\xd4O\xbcv`\x13\xb8\xa9\xcc\xca\x18\xd5S\xc2%\xf6.)\xdf\xae\xb2\xc8s\x13\xc6c%\\O\xda\xf9\x90}\xca\xf2\xdb\x0c\xb5 \x85K\x1b\xec]\xd7\xd4\xa46\\Xa%\xcb\x0d\x93<2[7\x89\x7f\x00\xa4\xa3\x15U\xd6\xfa\x8ep\xf7\n\xf6\x9b\xaf\xa3\x96)\xa8|r\xd3RP\xcbR \x99\xd9\xb1\x14\xca\x97\"P\xe1\x8035V\xb3Vg\xaa9\xef\x1c[\x16\x00m\xce\xb26\x844\x93\xcf\xa2\xe3\xdb\x0c\xc9\xb0\xcf\x0bC\xc0f\xf60\x1c6\xc3;j\xf3\xf7\x1b\xfc\xbe,\xc841x\xb4b\xcfuU\x03F\xab5g\xba\xe5S\x9b\xad\x16\xe6\xef\xe3\x8aG\xb6\x1c\xe0a\xc7\x01\xceN\x90\xd4C\xa8\xfa\x97\x9c\xe2a\xdf)\xee\xb2Y\xbd\xc3K\xff,\xa7\xe1\x8cM\x8e\xc3\xcd\xa5\xdc\x1b\xd8\x87\x1bF\x96\x8f\xd0>\x16u\x01\xee|\xb8\xe6\xde\xd2\x17\x13\xf6\xdd\xf9\xbcH\xb3r\xc4\xce\x8e\x1b\x96 _\xd1_\xc1\xb5\x85\xc0Q\x0f\x05\xc48\x91\x0d\xf9\xb2\xdc\x11\x83\x07\xd8\x03\xfe\xff\xcb\x17\x98qK\x10\x9f\xa7HU\x0d\xe5\x85\xe5\xe1P\x023\x11\xa9>\xae\x88\xbf\xf5$\x93nn\x9b'\x04\x9e\x0d\xd3\x81ns\xe5\x13\xc9\x1d\xc8\xfd\xb6\xb2\xca\x85\xdf^v\"\xe4V\x9d\xa6\xd6\xf94g\xad\xcf\xef\xdd\xba|\xb6\xac\x8b\xfb\x8d\x0bs\xaf\xf6E\xaeV\xa6\x01\xe4\xb6U;\x91M\xfd\x85\x99\xdc\xee!\xa7\x0f\x199\xad\xec\x19\xb4$\x95\x1b\xf0\xc2N\x9d\xb2\xbe]\xe8q\n\x0e9\xde\xd8\xb8\x98\x1c*\x84\xf7\x97/\xb0T?\xd4$7#\xc6-\xd3\xd5h\x87\x95\xe2H\xa2\xfa){(\xde\x03\x06\xb3h\xa9\xd2\xb5l\xf2a\x03\xff\xd4R\xbc\xc3\xba\x90Jc\x9d\xad\xde&;Wv\x96E}\x0ed\xff:\x0fm\xfd9\x93\xa5\x04D\xd91\xbd|\x16\x93j\xd4\x12\x1d\x1e^UG\x16\x92M\x07l\x04\x07\xd04\xb5\x9dN\x0e\x91\xef\xc1\xff\xcdOg,\xfd\x8c%~b\x7fJ\x9c\x8b\xee\x85\xf9\xdaw\x80\xc9\xa7\xd9\xd9=hw\xbe\xe1\xf3H\x9dA\x8d\x18\x94\x03p\x1byx\xba\x05\xce\xd5\x87\xad\xfa{d\x99.\x86\x15h\x82\xc7{Tw\xe5;\x05\xd1\xa8pa\xf0^\xa2[\x8e\x04\xde\xf7L[\x17j\x94\xcc\xa4h\xa8\x0fQ7\xa9\xcd\x118\x07\xd9\x1d\x9d\xa3\x0dT\x98\xc1\x0dAc7\x0bU\x80\xe1Q\x86\x9e\x08zC\xa5\x8doeH\xee\x11\xcf\x99\x018R\xcc\xdc\xb8 \xffSv\xd4W,\x15&\xcd\xd9\xf9\xdbB\xff\xb7lQo9WV\xa2]\xb8Xa\xc6\xe1M\xcc}\xb7\xf6\xfb\xab\x0fcV\xd1X\xef\xfaW\xe3=\xc8\xd4x\x89'\x05\x8e\x11\xff\xda\x84R\x86\x0d\xb3\x86\x9c+\x97x\xc3s3\x93\x19lL\xa24\x94\x81{M~\x0b\x92,\xc6\xc0*\xceG\xaa\x85c\xd3\xaf\xe1\x00\xcda;.\xa5X\x7f\x92\xba?\xd3\xbe\x1b.-\x7f\xda\xaf&Q\xcd][t\xcf\xd5\xf0\xc8\x9aq\x87\x95V\x9ex\x15\x87\x05O[\x84\x9f\xabxrU\xc6Fb\x85\x1b\x95 hw\xc1`\xd7$\x85\"2OCl\xd8YY~?\x8ds\xd5\xd8\xa0\xbb\xe2\xc4Z\xb1\xeaz\xc5\xb0\xd2\x0dGY>d\x01\x06W\x19/\x12\xca\xdd\xdcc\x9a\x12\xac\xa3\x9ayy\xbb\xd8\xf8\xaaMz\x9dG\xac\xfeI\xf3\xfb\xaeV\xbe$z\x0e\xbb\xd4\x03\xa9&\xe5\x06\x9b*\xc6(D\x06\xa8\x10\xbe\xebL\x1e\x152X\xacJ\xca\xd0g\x08<\x1e\xf2\x9a\x88[)\x8b\x1b\x05#\\\x11\x0eo\xf5\xcc6GD\x16 \xed\xb7\x9f\xe7\xfe\x8f|X\xf9P\xfa`\xf0\xc4\xac\x83\xb9\xabm\x03\x0c!'\"\xe5\n+\x1c$\xc4\xd4l\x01~F\x05'\xb7\x9d\xce\xd5\xd2\xda\xe9\xd2\xd0\xceDo\xb1\x9e\xa1\x8b#U^\xe3\xa9\xc6oc^5\x9f|\x03\xcd\xc3F\x1f eZ\xbe.\xbf\xff\x90E\xe1j6\xa7>\xac\xb2rI\xa2d\x9a\x90\xb8\x1a\x1bv-\x00\xf7\xf7\xb0\x89\x0e\xa2\x1d\xcf\xe4.\x84\xb7\x17\x05\"j5\xa7\xde\xa3&\xdak\xcdq\x82^\xa2\xd4\x19\x98\x90+\xbb\x92\x05\xd7\xc2\xc8<\x0f\xca\xdb\x04UXt9\x97i\xca\xa2\xb0$\xb0k\x8e\xf4/\\\xb0\xa2[t3\xd5\x82>\xa4\xdb\x9f\xb0\xd2\xa7\xbd\x95\xfa\xcdu\xba\x7f\x13\xcf\xee\xd9\x84\xfa\xf6\xf4\x9e\x0d\xca\x9b\x7fc\x99UE\xd4\xf7[\xe1\xb1\xfd\x18.\x97\xe9\x9d\xe8\xe0J\xd7{\xad\x84\xf4\xb9k\n\\\x83,\xd4\xfd\x1a\xc4C/\xc5\xeb-n\xda\xe2y\x95^t\xc9C4r\xc7\xe5Pnnz\x90N\xca+\xad\x8bF\xfc\xa3j\x954\xb1L\x18\xc7J\xcc\xd0N\xe5!\xb6\xe3\xc26$oX\xfc\xce\xa4\xb2\xda\x1aYV\xa7^\x17\x96\xecAU\x0d<\x93\x91[5\x02)~cx\xd3u\x94/\x0e\xfa\xff(\\\x1a\xc8.y(\x90\xaf:8\x02\xaaU\x94\x04\x08/\xa5\x9f\xf6\xae\x074\x87$\x8b\n\xc2\x90\x0d\xfa\xb7\x08\x9c\xd6\x92J\xe4\xea\x9b\xe9/\xd9\x7fZ\x84\x11\x1e\x82\x8d\x04\x0cL\xd7u^\xe7h\xe6\x00\x1b`\x15\xb9&<\xfa\x8du5\xd9\xc3\x03\x88d\x12\x83\xee\x83[\xfd\xdec\x8c\x8dyU\xd0\x08[F\xd8J8M\xf0\xad\xeb\xd4\xbf\x13\xfb\xb7\xdaA\x9a\x0e\xe3\xad\xd6F\x07\x81\xad\xed\xd1\xb3\x156:\xc6\\\x15\xe5\x9ci\xeb\x8ax_g\xf4\xd1\x87\x98~\xe6>y\xd2\xb9/\xda]2\xb7f\x05t\x8a\x0e\xc8\x1a#\xd6\x97G8\x02\x90K\xd8\x9eh\xa3\x0d\xb7J+\x19\x8a\xe8\x8dh\xf0#cC\xaa\x0b\x0eF\x9e\xa6\xb0\xf04\x96\x93!\xb3\xa1\x03\x83\xc6\x04N\xd0\x9bjo\xbc\xb1W:\xa9\xf6\xcc\x16\xb4\xf8\x0e1\x13]\xcbh\x03\xeat\x10,\x9b\xc8\xd26\x8d\xc4\xdd\xf1\xea\xdbx\xbfE\xfc\x19(?I\xe3\xc3H\x8b\x16e\xea\xeba\xbe\xca\xba\x05\x02:\xbboS\xae\xa0\xed\x85m\xc3YRy\x94\x14\xd3`q\xa0R\x87+\x96\x16\x9c\xfd\xf8F\xe3F\xec#4\x1c\xe6\x95\xbaJ\xa3T\xbfI\x80n\x0cD5\x0f4\x99\xfbl\xe7{\xcf\x0b.hA\xc2\x85\xa0H\x82s\x12\xc6\"\x02\x1b\xbe\xffR$T\xbcg\xee\xee\xeb\xefQ\x80y\xb4Z\xa6\xe437\x80\xe3)\x97E\x98\x95\xd3\xbcX\xf0\x8aww0\xf5}X\x96\x97\xf3\"_\xcd\xe6<\xf3\x8b\xe7\x83LMz\x1d\x01\xf28_&T,\xdc9>\xdf\xf1l\xf4\x9fA\xd7\x1e481II\x12\xc6|\xa1|\x84\x07\xaa\xe0\xa7PF\x8b\xbbf\xd24\xc9\x92f\xc0E\xdb9\xbd\xd19\x07\xfa#-\x0f\x08o\xd4~\xb6\x93F\xaf\xec\xf9\x04R*\x8c\xe6\xfb\xea\xb3\x16^d\nd\xe0o\xc2\xc8 \x82P\x1f\x1a,\xb9\x93\xc5\xe8fk\x8b\xf1y\x18v\x1d+`3h-k\xbe\x07\x02\xac1\xca\x8bO$>'\x7f[\x91\x92\x96o\x0b\xf4\xe9mJ\x96\x8bDP/\xcdPlO\xd3\xdb\x92\xcfW\xee\x91\xa5\xf5\xedk\xc7\xeeV\xb7\xd3]\x9b\x0fYq\x11\xc6\x06\x0dn\x8a\xfc\xb6\xe4\xd4\xcb\xc4Y\xef\x04\xbb;\x8e\x0f\xec\xc7\xeb\xc0\xb9\xaa]\x81\x04kR\x94I^y\xf9\xf0\xe1{\x8fk\xd2\n{\xda\x04\x87w\x99\xe8KpW\xed\xd3\x0b\x1a\xa2-\xfc\xac\xdd\x9dT\xd8\xad\xbc\xd0\x8e\x954H\xb29)\x12\x81\x15^\xed\x1aX\xaa\xc8h-\x02(|\x12z\xa6#\xdc\xe0\xcf\x06\x99IL\x05\xfe\xd1=\x0e\x80\xd4uvw\x9f\xefJG6\xed,\\u\xebC\x92\xd1W(i\x025`\x8d\xd7R1e\x03\x98\xfb\xa8\xa1\xc5\x1a}iE\x0d\x0b,l\xf983bg\x10\"6\xee\x82\x8a\xa3C\x0420\x84Q\x05e\x1fSU\xf6k \xd5\x11\x99\xf0\x8b\x8e\x93\xd9\x15\xfc\xeaz\x7f\xea/\x10\x19z\xb7\x0f\xbb/`\x04\xbb/\x9e\xbdzn\x99\x85FW\xd0\xaa\xf4\xcb\x17A\x0c\xe7\xb0\x0f9\x8c\xc4\\\xa4\xf5\x87\x94Q$)\x8c \xf2\xcd\x95\xd4\xb1~\xdc\xf6w\xafF\xe6az\x18\xa62,\xa7/\x0f\x02\x12\x1f\x15a\x92\xa9\x89\x1c\xe7i)\xcdr\xfclh\xa6\xc5\xa4\xa4E~'\x12\xcd+\x82\xf1\xf99\x7fE\x82\x98Dy,\xa2\xc9\xd8N\xaaF\x1eVxZ\xb5\x86B\xb2q\x16\xe5\xa2\xb7\xa4\x95\xf6\xe5\x0b8+:}%\xe5I*\x13\x87 l\xc5\xb5\xa1rD\xab\xe4)\xef\xb2HJL\xd8\xfb\x0dn\xe5\xf7\xdcZW+\x9cg\xa8\xff\xd2\xab\xb8\x0b\xedC\xb3\xef\xc4\xe4A\xdc\xaeoU\xec\xd8\xad\x84RpY\xf4]\x16u\xe7\xe3\x81\xe0\xb0\xe3\xd1\x8d\xfd@d\x14c\xff\xa8\xe4C\xb4\xb9%\xb2\x81\x8a\xc6 \x15\x7f \xf7\x1eII\xe6+\xbf\xd9\"X\x1b\xf9\x8a\x871\xf5\x0c\xc4\x87\x99\xa6\xd2\x9f\xad-\xe5x\xf71r\x80[\x9fJn\xeeC\xe1\xf9\xca9\xe5^\x08\xa6\xdco\xad\x03\x97\x9br\xb9\xa8\x14\xa9\x12\xc1\xd8\xf3+,V\x19\xe3\x15\xdc\xdc-\x1e\\\x81\x0f\x17\x1cT\xecZ(\xe89\x8aO\x00es\xd0A\\\xf5+\xf8\xe0\xad\x01\xec\xc1\xd8\xd5YD\xfd \xf1\xcc\x90{\x07\x7f\xb7\xb6 C\xde2\xb9\xa2dX\xea-gB}\x8cfZ\xba\xd78\xcd\xfcj4gsv\xed*\xef\xf6\x91\x1b\xbfXi!\x05\x01\xa8@Y'\n\xf8kl\xfa\xba\xdb\x8d\xfciX\xd2\x1f\xbb2T`\xa6\xd4\x88\x8a\xcem$\xaa\x03\xc2\xae\xb9\x03\x92\xdf\xdai`-\x8d<\xcc\xc8-\x84\xfcf\xb11\x016\xba\xe0\xce\xbc\xad\xb9\xe6s\x930\xd8p\xe7\xfc\x12\xec\x8ew\x00\x8d\xbe\xd9\x8f\x06-\xe05\x1c\xa0\xdeY|\x9f2n\xf6V#\xfaX~N\xa6(\xe1\xa2ok\x0e\x0e7\x08\x9e\x94f}\x0c\xbe\x86\xca\xc5\x87\xc4\xcb\xe2\x8b\xed\"A|^\xeb%\xd7u\xd1\xb5\xbd\xac8\x01\x95\xc22e\xaf\xfej/\x8eg\xb4R\x98\xbf\xef\xc9/\x9e\xe7\xc3T\xb9-\x1e\xb4\xa67M\xa4\xc8E\xe9\xc6k\x03\x15\xec\x19\xfaP\xf6F(_\x05>\xc7\xcb\x03\xe5\\\xc4\xa8+r\xa6\x18\xe6\xa4\xf2$\xe4a\x87\xf9\x17\x97\xb7^\x7fSk\xd9\x1d4\x9ake4\xa6Ad\xd0\x17\xf0Q>\"\x06\xa3<\x83\x9e<\x01\xaa\x10C\xb8\x06-\xe2Hb\xe4\x98\xa59\x06,\xfc\xd5\x15\x07\x84\xc68\x16n\x8d\xbb\x07\x8d\xf3\xd6\xdawj\xa4?\x0c\xb6\x0c\xeb\xca\xb1\xb2\x86:\xcc\xb2\xa0j\xf9PD\xcfo#\xd8\xc9g\x9b\xbf\x8a\xf87b&;\xc1\x91\x8b\xcd\xcd5\xf4\x8a\x0e\x83AtZi@l\xe6\x93(\xa9e\x05\xe6\x0c\x95R\xf4\x8a\xa3\xcd\x92\xcf\x1b:\xfd\xcb\xf1\xc6\x82k=\xa1w \xbc'\xc3\x1c\xbb2\xd0'\xce\x86\x0f+\xd8\xdc3\xc9\xd3\xd8\x93\x07a\x9a\xf2\x83\xa0\xe4^\xd8\xe4\xee\xe3;\xa6\xf2\x92\xe6\x83\xe30\xd2\x82\x1f\x00Mx\xd9\xdc\xc4\xac\x1dG\n'I\x18\xb9b\x11\x0b$\xa2\xaf\x89*\xe7\xf1\xecb\x04qN`?l\xe7L\x1b\xd6\xbb(\x08)&\xee\x94\xc8T\x9c|\x10\xcdW\x99\x85\xd1\x92\x0f\xea\x0b\x05DP\xf6\xddy\xb99r\xbf\x88\x87\xc1}\xb5B\xbb\x88\x99\x1a\xdc\x1c\x8c \xad\x16-\xf5\x19\x036\xd5\xc0\xc1\x0b\xae\n\xb9\xa3\x81S\xdau\xf4\xca\x83\xbd\xa6\xb9\xf9\x1e\xb2\xd4ZW\xa9\x87\x0bhn\xa4Z\xb4\xc8H^\x86\x06fM\x07\x9d\xc2\xa7\\\x8f\xb4\xbc:\x85*\xf1\x96\xb6\x07xx\xf0\xc9\xd5\x1b o<6\x0c\xb4=\x92\xa28\x9c6\xebJk\xe1\xe9\x0c\xc2\xca>A~\xb7\x171\xb3s$e\x1e|p\xf8pZ.\x92\xf4gF\xe8\x08\x0d\xad\x84\xc8\xb5\xdbI\xa3\xfe\xa8\xb7{\xd5\xd4\x1b\xdc\xda\xa8\xcfW\x1f\x1c\x8d\xe9\xe6}\x85\xa4\xacE\xbfBYI\xcbX//\xe3nH\x18\x07\x8e\x0f\xce\xd1\xf8\xfd\xce\xce\xce3\x8b\x8f3ho\xf0*\xb9\xd7\xfd\x99\x85E\x10\xb1\xb4\x9e<\x11\xbf\x82yX\x1e\x0b~\x0bl\xa1C\xa5\x9b\xe8z\x99&\xed\xd2Wh(\x07{\x03s\xfb\x16X\xb8\xf3\x0d=\xeb\x08\xe0\xd5/O\x92Z\x90\x1bsU\xdf\x94\xd4\xfc&\xdb\xed\x9c\xe3\x92\x0e\xa6\x9a\xbc\xa4\xc2\x8f\xce\xfaN\xcb\xaf\x88\x85\xe6\xbd\xe2;y\xce5\"\x9c\xb4\xee\xe5}P\x15G\x97\xc9\x92\xf4a\x07.\x01h\x1e4uP\x90\xc30\xcbr\n\xac\"\x1f\xd8\xafB\xdcp\xea\xac\x88\xd6r[$i\xbf\xa3C\xb2\x9e\x1b\xf0\x1b\x18s\xbb\x8d\xfd\x86\xc1#7\x88\x0b\x85\x8d\\\xa5\xab\xd01:W\xa1_V\xae8\xdd\x02\x17\xb4P'4\xb6\x1fi+$\x0d\x94\xe2\xdc\xed\xaa;L\xf0**Y\x06\xd3\"_\xe8\xf1\xe3\x00DH\x05\xcb\x16D\"\x85\xebWpT\x8dT\x18\xe3\x0b\xf6\xf1U\"@FmsEX\xbc\xe1\xd1$\xd3\xcd\xdak;\x86\xac\xaa}\xe1\xf9\x90\x0b\xb9\xfb\xfe\xb0\xb3[R\x03\n\xc8\xf0\xa5\x0f\xa7\x94\x14@\xb2\xd8\x16d\xd3D\xdd(G\xb4\xc5y\x86\xd8\x8b\x19\x9e\xdc\xab\x16\xe7m\xe7\xd2A\xb9\x9e1Y-\xc9'\xb4\\$\x80B\xdc\xd4\xa4\xf2>\xf7\nN\x1az\x80'\xe1\x1dn\x15>\x11\x98\x1bQ\x0fF'+Q_\xc0\xf1\x8c\xd1\xa3\xb9,A\xb1\xa3\xc989\xd4\xbc\x8er\x0dm\x1eg\xeb0Mb\xc8\xf2l\x8bW\xbb-N\x1a\xe4s\x1c\x0f\x95\xc5\xb9/\x8e\xe6\xbc\x87\xcdy/xJ.\xf9\xd0v\x10\x10\xb9\x069\x97\x99\xf2\x00\xd2n\xde$\xc0B\xc3\xde\xaf\xa4A\xb6\xf5AU\xae\xdek|S\xd5}\x078\xd1o\xf4\x8c\xd7Axw#\x17E\x8b[\x82{Jl_\xda\xe1\xc2G>F\xf2H}\xbeVz\x18\xf6\x8a\n\xee\xb2\xa4\xda\xa0\x8c\x88\xcc\x95\x0d\xcf\x15\x03,\xce#\xcc|\x9e\x94F\x18\xf8\xce\xc2\x18\xb9@>\x95\xd8j\xd3\xaa\x1b\xc9\xeaF\x0b\xb8:8\x12m\xde\x0c\x9a\xcb \xed\xfd\xa6\xeck\xa7\xc3GR-\x18\xc4\xed\xc1\x05\x0c}p\xc3=\xb6\x19\xd8Z\xfb\xfc\xdb\xb8\xe0n`\xc3\x1d7\x02\xc3\xcd\xbb\xfaH\xb1\xc2\x08\xf4P\x84\xda\x83\x07\xce\x08\xb2\x1eY\x85\x90<\x8c \xe9\xce\xc8v:\x8fgo\x07M\x1f-\x86S)\xca1O\xc3\xc8\xc8\xe4\x1b\xf3Z\x85<\x9b{\xd0vs\x06\xb5\xa4G\x95\x94\xacj\xfc\xd1\x89\x9e\xcb.\x8c\xb5\xf2A\xa2\x8cvL\xa0& \xc3\xa0j\x10\xf1\xa4\x11\xee\x1c\x1a77\xbb\xea^eCjo\xf0l\xcdV\xda3 \x1b\x16H\x9e\xbflm\xf9\xca\xad(:\x82\xac\xef\xcb\x14\xa9\x07\xbe\x19o\xcf\xda\x02\x13\xbc=\x93$q'\x11X\x12z\xd4\xba1\xef\xa6\x95\xd0\xd6\xd2\xe2\"O\xb8\x99\xa2\xf9\xbb\xfc\x96\x14\x87a\xc9\x8d,6\xdc\x893'\x9f\x19w$\xee\xdd\xd9\xff-\xfc\x11\x96Q\x92\xb0\x1f7I\x16\x16w\xf8+,\xc9\x8b\xe7\x98+*\x9f\x8a\xff[OE\xb1\xdd\x17\xe8k\x17k\x90\xbf\x8b\xf0VQ3r l\x82\xe3xZ?P\xcf\xa8\xb2\n\xd0Ng\xe9`\xb2\xde\xf3\xe8d\xb2G]W\x83+\x83\xf2\x81I3\xd7\xca&5X\xe6[\x93\xda\x89\x91\x83&U\x9c\x83\x91\x91\xe2F\xae\xba\x97\x93\xee\x18W\xe3\x80h\xef\xdd\xe6\xe8\xbc&\x84]\xdf\x87\xcf\xc8\\\x85J\x15\xd7C\x1e\xe3\xc4\x19\xb1\x96,\x96)Y\x90\x8c\x92\xb8\x87\xb5\xa9/\xe7\xb8h\\\xfdF\xb2x`g\xaa\xbb\x8c!{\xdb\x1a\x90 \xa9\x02\xc2\x055\xe2\xeeW\x11\xbd\xdf\x8b\x99\xa8\xcd\xbf\xa1\xe9$\x83{\xa8\xaf\xee\xa8\xa5\xcc\xabP\xf1MQ\xab\xb0\xc8\xcbc\x8e\xe2p\x87\x16R6\xcb\xd8\xad\x06\xd2\x192S\x80\x07q\xad\x1f\xb4S 7\xfdJX]\xd5\xb9\xaf\xd2\xb2\x19\xbf \xcc\xb3\x88TB\xb7\x0e\xd2\x8d\xd6*G;\xbe\xa2\x9a\xd5\x16Q\x83r\xa8\x14-Fe\xe0\x16\xacT\x97\x8c\xdb\xee^\xdbJY-\xd3\xd5v\xa5\x84\xae#\x14\xd1\x81\xf6\xd8\xda\xdb\xbcl\xf4\xc7\xca\xe7Z\x9aw;\xdb\xc7\xd8\x8d\xf7\xdc\xf9\xf5%\xf7Z\xfe\xd6\xb6\xe9*S\xf3ToZ\xae:O/\xbf\xcb%%Y\xecz>\xd0V\x0c\xf8\xdf\xd5=U\x03\n~\xcf\xa0\xd4}\xb6\xf3\xcac\xc7\xe1\xf1bA\xe2$\xa4\x04\x13w\x87\x85\x0ex\x8c(\x83F\x04\xf2\xbbf\xe7\xbf\xb9\x1b\x99\xfb\xe2\xf5\x8e\xe7z\x95\xdbN\xc6-a\x98\xc8\x17\xafw\xbfa\xa8\xeb\xcam\xfc\xcb\x1ds\xf0\x84\x17\xa6\x88?\x99\xfb\xea\xa9!\x86\x97n]-\x0e\xf6f\xc6\x95)jSWx\xa0R*E\x867\x9a\xff\xc5\xb4\xa1.y\xdf\x05\\W^\x1b\"_u\xa5\x0f\xb51\xa2\x12\x9f!\xb4\x98W6\xcb\xe1\x85@\x86\xc1W\xb9A\xb0W\x9b\xbaF\x9a\x93\x05~F\xa0sI\xf4p\x11y\"\xce]\x04\x7f\xd8\x83\x1d\xc6&\xb0\xb4\x914H\x96vN[\x90\xba\xa5\x1by\xde\x1b\xe0a\xee`s\xd3p\x1d\x85z>\xaa\x94\x95rq\xc2T\x1c\x8d\x13z\xe5C\xe1N\xbdz\x8c\x1a\xbf&R\x15w\xc9\xdf\x00\xcd\x0d#\x89\xd6i$\x05\x95Z\x07\x86\x11\xb5&\xd1\x1b1\xd3\x8bHaJ\xc2\xc4nD\n\x8aT\xb8\xf1\xe1+\x97\x12tw\xaa\x06,\x967\xce#\\r\x11\xc0\xe1\x92|\xa6\xa7yL\\\xc7\xe9p\x1cn\xd0\x00QT\xaf\x06\xdc\xaf \x83\xd3\xc1\xe6{\xf2\x80\xe7\x97\xeb\xdc=\x16\xb5\x9d\xdfC\xfc_f\xfd\xfe/\xb11\xe3W\xb3D\x05\xad\xd6\x9a\xe4\x94E\x8e[;Z\"B\xf3\xa3\xca\x8f'8\xd1c\xd0\xc8\x077l\x1e\xc4!\xe5\xe1|\xf6`s3\x81\xff\x80\xa7\\\xdd\x01k\x0b\xcay2\xa5.z\xa1\x10\xe2\x17ix-(\\6\x82 \xad\x96qH\xc9\xbb\xf0\x8e\xcd\xf3\x00*\xd7@\xb2cD\x0f\x83\x80u\x19\xde\xa5y\x18w\x84\xfb\xa9;\xf06I)\xe9>\xe5{:`\x10\xc9\x0e\xeb@9\xcfo\xfb\xc9C\xc6\xa0\xb6|B\xf5\xf8>\xe7\xc1\xb4\x94\x04#UE*\x17\xb0\xba\xfby\x06\xc5\xb6\xe1\xae:\x86ke\x1b\xb3\xd9\xc8\x14\xbf\x8e=l\x16\xb2\x91\xe1.\xc5f]\x88s\x17\xcd\xc3lF\x84UW\xff\x0c\xdes\xfe\xda\xbe\xe3\x1d\xe7\x11\xa70|\xe4)\\\xe41\xb9\xd7\x0c\x9a\xb8/c\xd0\xae\xf6\x06vR\xdc\xb1\xd7|\xf7\\\xf37\xa7\xcd\x9f\xb5\x91\x81Vr\x8a\x1b\xcfi\xb3p:Z\xd1\xca\xb1\xc1:m~\xae\xc2J2;\x83+\xee\xa2\xf2\xbf\x1ea\xe2\xf5mH\xc9\x8fd\x9a\x17d\xfc\x99D+\x14l\xd2 \n3\xf1\x8a~.y\"k\x0cOR%m\x1e\x96?\xe5\xe2\x12\xa6\xfa\xfeKB\xe7'\x84\xf2Y[\x86E\xb8 \x94\x14\xe6\xd4\xe3,JW%\xab\x94P\x9ad\xb3\xb7ya.\xf6\xe3\xddqL2\x9a\xd0;\xfc\x1e\xa6i~{Y\xdc\x1d\xd3\xb3\x15\x95\x85\x16\xec\xa8\xafn\x0ddj\xa1\xbf\x96\xcb<+\x89\xb9P\xa9\x16)\x1b\x05\xf8\x1b\x0dg3\x12\x9f\xc9\xb1\x96\xcd\xa1\x97\xac\xbb\x97\xe1\xac\xca{Dh\x98\xa4\xd5\xab)\xfby\x9e\xd3c\xaet\x87r)\xca\xa3Z\x88\xf6\xe6rzo\xc2\x92\xbc\x0f\xd1\xacO\x00@Rw`\x9ad\xf1Q\x95\xc6+!\xd1\xaaH\xe8\xdd\x91\x96U\xa6\xf3i.\xf2x\x15\x89\xa6\xa2<+W\xb2\xdd\xbc9\xc2eH\xe7\xb2\xfcb\xcd\xfd!I\xe3g\xfcM>SRdaz\x94G<_\x92M\xf9^M\xca\xb3\x83\x8bg\xbc\xec\x92D\xd5\x8f\xff,9\xa8\x9c\x932O\xd7$\xbeX\xdd\xd0\x82\x88\xe6Y\x06\xedC+\xbdQS\xf5r\x91\xaf\x8a\xa8\xce|Ay_WE}\x19\x8b,\xaf!>\x82\xa2\x15\x94\xb9\xafLA\xdaQ\xa5'GyA\xd1\x0c\xf1Wt\x87\xf8+\x9aH\xafn\x13cm\xbf\x97\xd0nVa\xb0\x1c\xfd\x08\x17\xecL\x9d\\1\x96bF\xe8q\xe6N\x9c\x05\xa1\xa1\xe3\x83\x83K\xe6T.\x9e5G\xb5\xd4\xf3a\xe2T\xdb\xact\xae<\x1f\x0f\x8d\x12Eh\xffy\xe1\xb9\x93+\xcfC\xc8\xea\xb1\x87\x94\x97\xa0\xc1I\xb8\x0c\x92\xf2$\\\nE%\xec\x93\xeb`\xb0\x06\xaf\xd6\xf4\x16\xc9I&\x12\xb5\xb9A2\x81\xf7\xe4$\\z*9\xea\xab\x98\xe1g\xae\xe0\xd2\x7f\xf7a\x9a\xae\xf7Bj%)\xbf \xb1O\x94\xe7\xf1\x0e+\x93%\xa7\xea]RR\xcf\xf5\xbc\xa0 l\x1f\xb9\x8d\xaet\xdd\xc1\xc8\x08\xa4\xb1\x081A\x959\xd9\x97o\x88\xb8\xaf?/R\x87[5\xd4\x89]r\x19F\x9c\xbbj}\x9b\xe0\x04\x0el\xca\n\xf8r0\xb0j\xce\xbb\xbe\xfc\xffP\xa3\xa87\xa7\xbe<\xe6AX\x8e\xb3\xff\x1a:\x87\xf1\x84|\xf2\x83\xa4d\xffT\x81$ \xca|A\xbe\x11f+\xe0\xd4\x94\x8d\xfbf\xe4\x92\x07\x1d\xba\xf49>\xa5$\xa3,\xc9\x0c\xabz\xc7\x14\x08}\xd3\x9aH6\xd5\xb1K\xbcj\x9f\xf7\xed\xef\xd6~f\x0b\xda&\xd5\xb8\x8b\x92\xfb\"\x8f\x81\x953Tz\"n\xceZ\x1fQ\xa7\xac\xb5\xb5x\\]r+vW\xbb\xd8\n\x1d\x93`1yb]\x8bM\x811\xd2\xcd_Fp\x89\xd1\xf30j\x15\xcb\xe8,V)M\x96aA\xb7\xa7y\xb1\xd8\x8aC\x1a:u\xb6\xbcX\x1c\xb1\x14\xcc\xcapE\x12\xe1q\xb8\xfdy\xeb\xf6\xf6v\x0b\x8b\xac\x8a\x14\xaf\xd7I\xecT~\xda\x8d\x04\xb96U\x06h\x14\n*\x15\xc0\x189\x1aI\x894\xf2\xe5\x9d\x00Z\x1d\xe3\x87\xf5\xe1\xde \x83&dy/\xb0c\xc7\x8a\x9c}\xc3\xa1\xd2\xc6*\xd1\xaa(HF\xdf\x0bR\x84\xd3e'\xcdS\x19A\xc5\xfd^\xbfrY\x99y\x04~1\xf4\xd2k\xd6\xc1\xce\xff\x893#\x14\xe1{\xc5\xff\xe5%\xfe\xe7\x1e\xba\xd8\xaf|\x89D\x0f\xfb9'a,\xf6B4g?\xd0\xcb\xa6\xa3E\xd2\x88z\xc5\xde\x15Wf;\xd7\x00Z\xf7\x9fS\x1e%M\xa5VX\xd1P\x08\xcb/HJ\"\x9a\x17\x9e\x1b\xf5\x05\x82\xac\xb0\"\xee\x8b\xaaBM\x9d\x9fs\x04\x9cHz\x94\x86V\x85\x1e\x15\x9d7Q\xd3d\x8f\xd2\x0c\xab\x8e\xa3\x0cG\xf7\xfc\xef\xeb\x04\xe1\xa35\xc8k\x14\xcdf9\xdd\"qB\xf3\xc2\xd6\x01A\x9e>J\xf3\x7f-\xf3\xac\xa2>8\x18\xe9\xb3\xacm\x86%\x87$\x8dp~\x94\xce\x14\xa2\xbe\x9e\x0e\xf9Vz\xbe\x97\\R\xdbC\xecSh\xccB\xf7\x11\xc5Qr\x8b\xce\x91\xcd\xca\x80\x89\xc3\xe8\x03~M\xa8\xa6d\xdc\x8f1\xce\x05\x8f\xca\x8a \"~b\x19\x9c\x151)H\xccg%X\x90bF\x18\xc3S\xd3\xa9#\xdd\x16K[\xbbx\x08\xb3\xf4mK\xd9\xdd\xd3\xa5\xdf\x00<\xcf\xd7\x97\xbeZ\x87\xf6\xaa7\xde\xe7*\xff7\xa8c\xd3\x96\xbaC\xb3\xc6\xb5\x88#)\xb9K\xf34\xcc\xfd\xee\x0b\x16\xd1\x98n\x0f\x8a0+8\xd8\xfe\x8a\xbb\x86\xf1Wi\xaf#\xc8\xcai\xde\x9e*m\xae\x16|d\x1aG\xfd\x98\xddP\xab6\xac\\\x83\xb57\xb7\xbb\x1e\xd8\xae\xda\xaa\xa8\xb3u,h\xc3\x9f \x84%\xe5\x0c\xe6\x0e,\x06v`{\xbd\xefNv\xb6^_}\xe7}\x0c\xda\xbf\xb6\x93\x80|&\x11#p\xb8\x0b\xb7]\xd3lH\xe9\x87\xb9+\xf1\xc0\xae\x10I\xeb2\x02\xaag\x12\xee\xdaB\x18s\xe3\xb3\xbe\xc6\xf1\x0e\x9a\x07\x0e \xca\xe4\xef\x04~\x80]\xaf\xb9\xfb\x05\x17\xdbf)%\x03\xd7\x93\xad\xb9\xd6\"\n\x1d\xec\x83K\xda!\xe9H\x87\xca]\xdd\xd5\x8d\xaad\xd5Uk\x18bc\x1bV\x83\x1c\x10F\xae\\\xb3\xb6\xf0d0\x15\x97K\xd9\xf0\x9a\xb7\x8f\\W\x1f\xb6\x9a\xbd\x9a\xf2\x0bB\xe7y\xdc\xab\x9f_-\xb7U\xa6.\x9f\x84U\xc6\x18\xfb-\xc6\xd8\x9bU\x07\x80\xc3\x95\xe5J\xdat/\x8f\x87\xf0\xa8\xb9\xda\xfanh\xbc\xdf\xe8r\xc3oCR\xbc\xe1\x0bB=\x974\xd9\xb8\xbe\xe3\xe5Z\x97f>vGd\xd5}\x1d\xb9\x95\xc8\xab\x12\xb2~[O$\xd5)\xeak \x9e\x0c\xc8\xca,\xf8}\xd4n(U\x1b\x89\xfc\x968\xba\x97\xd0\xab]\xbfY)=d\xd3\xeav}\xa0W\xbe\xd031\x82xS\xb0!\x08g[\x15v\xb5\"\xd4 F\x99D\xeb\xa6\xdcoI\xe2\x1fe\x96\xd5.\xda\x85\xa1P\xcd\xb6r3\xf0(\xed\xcb\xfa\x8cK+\xee#\x1e\xa5!V\x97\x99I\xac.@\x1e\xa5\x1dQ\xdd\x006\xa5\xfbf\xc6\xdc\x99;\x1fn|\xb8\xee\xbe\xceku\xac\x11\xd8\xdd\xaa\xc5Qe\xe7\xd7\x8c\xaeSu\xd0\xe9\x9b\x02\xf9\xa0\xd7\xa3\xae\x0c2\xd3FS\x18\xda\xaf\xb5\x06j\x07o\x13:\x97\xaa6\xe5\x80\x91\x19+\xd1p>'Z\xe4\xd0\xab\xf4\xa1#W\x1f\x03b\x17|\x8ekP\x11\xd5\x9f\xaf5\xe3S\x1f\x04\xcd\xdeU\xe9\x8f\xdc;\x83E\xb2\xfe|m\x85\xb6o\xe7\xb0~\xb6\xfbpnt\xca\x80|\xe4c$%\xb4\xbd\xa5\xa1h\xae\x97#\xeeC\x1fe\x8b\xb3\xbaz\x0f\xc7\xc6\xfbg\xd9\x87\xfa\x8a\xb6\xf7\x94\x92S\x82~\x81*\xc4\\]\x02q\xe5\x01W\xd9G\x83\xee\xcf\xa05\x1a\xe5\xc6\xcc\xa0?\xd1\x89\xc6\x9a\x83\xbc\xd0\xd8\x08\xe5z\xda<\xed\xb7>\x8c\xfd\xc1\x13A\x06\xdf{\x81r\xc6+`N\xab\xf3YEl|5\xaflJ\xb7\xf2d\x0e\"\xf4\xab\xcfH\xf8]\xf4\xcc'\xf7\xa2\x10\x02\xe9\xf0\xd0\x07QZ\xfdD\x06\xce\xb2@=\xc6A1\x8c\xbf\xd32\\G\xe8\xd9\x03\xfb\x08C\xfb \xf6\xed\xff\xd5\xea2\xf4^\xcbZuC\xb9w\x94w\x8c\x1d\xfb\x11TPn\xc8\x9fz6\xee!'\xb1\x0d\x8a\x18\x83\x10F\x95i\x10\x9c\xe2x\x0e\xf3l\x9a\xccJ\xb6<\xf6\x85\xc5\xcb,\x06\xb8\x17yAM>\xd0\xe5\xc3\xfd\x10\xd7{\x92\xe7\xef\x04\xf5\x0b\x94O\xe4\x05\xfd\xf1n\xd8\x9a(e\xcd\xee\x00\xba\x02\xd4\xea\x8f\x9c\x0f\xa3\xdej!t\x1fV\xd8?R\x94\xca\x1cL\nK\x14}P\xe9\xeb}\x90]\xe8\xb0\x11\xff\xea5)\xa6>\x0f\x0c\xf2\x9e\xdd\xd8g\xe9\x83\xbc\xee\xb3\xbe\x1a\x93\xbc'^z\x02{8t\x8aU\xb8\x05^\xd0\xf7\x0eV\xc1\xdb\xdd[\xbb>\x96F\xdc\xd9[\xd6\x01z\xa0\x8a\x0e\xca\x11$\xf7F\x04\x86\x9d\xd9\xdc\x82\xbe\xa6\x07e><\x86\xca\x9ck\x192\xaf\xf0~\x17\x1a\x9f\xf0LST\xb4\x1e\xa93\xbc\xbe>&\xa1\xf1~\x80]ik\x90=J\x8f\xb4j\xef\xd5\xb13\x8e#\x9b\xban\xf7\xe0O\x0e\x95\x1b_\x96U\xb2\xc9&\xa8P\xb4\xeb\xee\xd1\xc2\xa7\xc1-\x98\xb4\xfa\xee\xd1\xd0\xc1\xe0\x86\x0c:\x85U;\x1d\x0dh\xc6)M\xbd\x10\xa3\xfa\xe2\x90\xdeK\x04v\xef\xbbw\xa3JW\xf3|5\xa3\x92\xfcA\x8a \x03\x9b\xb4\xcaW\x8a\x81\x9c\xb0\x14E\xe7\xb89\xb2\x06\x9d,\x15\x9c2y\xc9\xe2\xd8\xc6\x08\xe2\xa4\x1eX\x0b\xa6\xcd\xc3r\xce\xc5\xac\xf8\xf30\x8f\x89q@\xa0\xe3y\xc3\xa5\x9aXq\x93\x11\xca\x03Y\x85JQI\xed\xb6Y\xf7NMi\xb7o^\xb7N,\xf3\x9ec\x99\x1ee^\x1d\xda-\xc2y\xe9)+\xab\x16\xc2@\x13\xa9c\x7f8\x98^'\xb2\xa3\x0c\xab\xe6\x0cf7\xf4{\x1f\xe3.\xbe\xffh\xfe\x19\xdb\xf7\x1b\x01\xa5\xb0\x80\xc7P\x90\xb0\xae\xca\x99\x98\x93\xdc0\x95&\xe5\xf0oD\x83\xbc\xd0\xd5c\xa1\xb8\x07T\x97\xd4\x9ah]\xba\xa1\x0d\x04\xd7y1\xa5N\xa4<\xac\x0c\xb8\x02p/Z\xd7\xc1\x8e}\xd0\xf7\x17\xf2i\xcd\x0e'\xfa>W\xf5\x93k\x1d\xff\x07Hj$\xdanH|\x8d:r\x06\x17<\xdc\xcc\xb1V\x1a\xc5\xf8\xcf\xce\xb6\x08K9\xd9Q\x02\x12\xaa\x11\xa2do\xe0\xd2\xde\x9f\xff\x81*\xa9lRz\x95R\x0d\xb3p\xf2\xaf\xd155\\\xa3\xa0\x99\xb2\xf4\xf1\xd2\xb9\xbd\x1f\x88\xd0\x85\xccU(y^y\x9d\xf7A\xb9T7\xe5#\xaa\xe5\xb5;\xbd\x97@x\xff\x83A\xac\x1a\xaa\xa0x\xa7\xd4\\\x8a\xdf\xb5\x7f\xb11\x1e7\xe5p\x95\x05M\x1f\nl\xcc\x8fP\xaa\x0b\x16!\x8d\xe6\xee\xf6\xffq'\xe1\xd6\xdf\xaf\xd8\x9f\x9d\xad\xd7\x9b\x1f\xb7\x82\xab\xef\xbc\xd1\xb6E\x0b\x97\xbb\xa0HJ\x19\x90\x80\xb1\xed\x1c\x92\xb3V\xd0\xc1\xd6)\xcb/P$\x8a\x14\x92\xef\xd6G\xe7Z\xac\x0f\x1f\x9e\xc33\xe6\x9ar^\xc3\xf6\xc1`h\xd47%\xa2s\x13gN\xe9\x12\xd54)]\x96\x8a\xb7\xac\xe3\xaa$\xf7\x90U\xb7\xdce\xf4\xd4)\x0d\xe9\xdd,zd\x8a\xc7\xa1S\xecF\x19-\x8d\x07\xdb\xe6Rp/z\xdf,M\x96\x03\x02\xcfJqj\xe5\xfa\xd1\xa0\x0b\x93\xa9\xeb\xd8\xc65\x7fm\xf7\xc4\x8c\xd6\xf61\xde#W\xf3> \x97\xda\xb6\xf9\xaf\xb7\x8d#\x8a5\x9c\xf8\xddp8\x98\xcf\xd4\xd7\x92p3\xf3\xa6W\xc2\x92\xd0\xd6+\xe7\xc7\xb9E\x12J\x80\xc7\x8b%\xbdC\xfb\x9f\x8az\xc6\xaf\x12N\xf1\x93\xb4\xa8\x92\x89\x9a\x16\xe0a\x18\xcd\xd5:M\x86S\x82O7\x7f\xc2\xb4\x0bi\x9c\xb5\x0c\x8b\x92\\\xe6\x95U\xd5\xc5\xf8\xf2\xfa\xe2\xf0\xa7\xf1I\xc3\x9c\xfa||q\xf6\xee\xe7\xf1\xd1\xf5\xc5\x87\x1f/\xcf\xc7\xc6oj\xda\xd9\xfb\xf1\xf9\xc1\xe5\xf1\xd9\xe9\xf5\xc9\xf8\xf2\xe0\xfa\xe7\x83w\x1fx\x99\xc3w\xe3\x83s\xf6~\x8c\xf9\xde\x1f\x9c\x1f\x9c\\(_\xce\xc7\xff\xbf\x0f\xe3\x8b\xcbF\xca\xc5\xfb\xb3\xd3\x0b^\xfc\xdd\xd9\x9f\x1aYXoO>\\\x1e\\\x8e\x8fZ\xe9\xedw\xa5\"S\x0fD\xdf\xc7'\xef/\x7f\xe5\xe9\xd7\xc7\xa7\x87\xef>\\\x1c\x9f\x9d\xaa\x19\xf0\x93\x9a\xf0\x9f\x17\xcd\x0c\x1f\xce\xdf\xa9\xaf\x17\xef\xc7\x876\x034\xd8\x83\x1b7s\x9f~\xaf\x93\x9d\xb9\xf8\xf2\xea\xb9\xfe%\x91e\x9e\xe9_B\xf1\xe5\xf9S\xfd\xcbJ\x96\xd9i\x15*\xc5\xa7g\xcf^\xe9\x9f\xd2\xea\xd3k\xfdS$\x9b\xfa\xdek\xd0\x8f\x1c&/\xfaT?%\xb6z\xc7\xe8\x8e\x82,\xd30\"\xee\xf6G\xba=\xf3\xc1\x01\xd0\xf1\x96\xcdkc\xad/\xd6Fsh/q\xdd>\x1f+3g\x8d\xaej\x9e\x1c\xcd\xbd\xf5-\xb6\xf9\xa7\x1d]\x18\xe0\x1c\xe0\x03j\xe9?\xb8\xf5\xdbok\x9d\xa1\x85\xde\xc5\xec\xe9\xc2\xf8\xa1]\xe0\x06\xf6\x88\x13\xcd\xbc\xb8! bO_>w\xf4\xc5\xcc\xa9q\x95?\x8b\x86\x9e8P,\xf7?x\xb4\x9f\x86\x0b2\x02K\xf0\xa8%?\n\xac*\x85I\xf9\x97E\xaa[\xfd\x00\x0crL\x80\xf3\xd6)\x89\xb4\x1b\x9b\xfe\x8b\xa6\x0f\x87o\x9d\x1c1\xb9\xddSS\xdcsjR\x12\x16?\xeb\xa7\xed\x83A\xfb\xf8A\xf3q\"\x14D\xdbj\x1c\x03\x96U\x9av\xa1\x91a\x1f)\xdb\xd3\xfd\xbf>\xa8\xfb}\xbb\xc1\xb2\x9c\x9f\xc8\xdd\x08tS\xbd\x87\xcc\x80\xb4\x1d\xfb\x1f:\x03\x1a\x1f{\xcf\x19`\xf0\xab\x10\x96\xdf2\xf6\xcb\xc7\x1d\xbbT{\xbe\x87\x0f\x10eD\x92r\xfe\x96\x01\x9d\xfc\xb7\x18PI\xe8}\xd9[\xdb\x80\x8e\xee= \xce\x9ew \\6^\x0bx\xca\xf1\x1ad\xc3\xb6\xf16\x89\xd9iEd\xbe4\xd9\xa5e\xaen\xd1\x19W\x05Z\xf4\xe5\\|\xda}\xd9\xfa\xb4\x96Ti\x9b\xcc]\x88O/_\xb4\xc8\xdcY\xf5\xa9Ej\xdfI\xc3R\x13\x93{c=\x14dh\x1e\xd51\x04\xe9v\x0ca%w\x1a\xf3xm`\x1e\xd0\x14Q\xfa\x9fA;\xc8\xe6\x18n\xdb\xfcG\xa3\xc8\xaaH\xb5\x12c\x03\x07\xd3(\xc2\x95\xa8\x1be>\x9b\xd8\xa0F!<\xd2\xb5R\x83\xb8\xabF-\x84\xf1\xc9\xbc\xae\xfa\xfaF\xab\xf5\xd0\xc2\xc7\xf1\x8a$\xf3l\xec\xd0'\x13O\xc8\xcb\x95\x84^\xcb\x8bt\xad\xd4\x81\x81\xb3T\x0b!\n\xd3\xca\x9cup\xa9uYq\xe9m\xa9\xe3\xbd\x81\xf3\xe5e\xd3|f)ca\xa0y1D\xb9\xb6Q\x9e\x18\x99\xf1fAS\x8b\xc7\x9d\xec\xbdZ\xbesi\xfe:@\x8a\xd0\x00\x95J\xccz\xbd 4\x14\x87j\xb3\xceS\x8b\xb4\xa2QOm\xde\xda({\xde#\x051\xd6q]r\x81\x8bV\xd7Q\x05\x0c\x95\x80\xc5a\xcb/e\xaa\x8d\xcc\xef\x86\xaa\xb8\xb9;>\xba\xa8\x16R\xc5J\xdc\xa6\x9bH\xab\\zS\xe8\xd3K\xfeV\x19:\xad9\xb8\xc5\xe7\x01\xe6,\xcdGLQe\x937J\x96\x8c\xdc\x99\x10)\x8a\xce\xea\xf8\x95\x9c027g \x85{R\x83\x1c\xd4\x1a\x16\x10\xc3@\xc0\x97/\x90\xb8\x18\xb0\n\xc1\xb6C\x87\xabD\x0bqF\xda\xb1i-\xda$\x1d{\xbez\"h\x91\\\xaa\xa0\x0c\xa7\xe4]\x1e\xc6\xc6h]j4=\xf3T\xf2\xa5a\xf4t\x9e\x8aX\xfb\xe8\xf1-\x0f2r\xcbx\xf6qq\x9fN\x9b\xa7\x8f=)Y\x93t\x042\xa0\x935\xdf\x82\x94e8c\xc4GP\x90\xb0\xcc;\xcc\xe4\xd2$\xc3|\x8b\xb0\xf8\xc4OQ\xf6+`\xc9\xa8\xdb[\xbfmb\xe4 .:\xb3\xcck{\xf2l[\x05\x03\x1d)\xde6\xf7\xc0Uba\x85\xb0\x0f\xce*\xe3\"et\xf2\xc1\xb6VTo\xad\xd0\xe3&\xe0M\xd1\x88\x1bz\xec\xd0\x1fH#}0\xc4\x95\xfb[\xa5\xbf\xa5Hf; a0\xecM\xab\x86d\xe5\x85\xa8\x7f\x7fBus6`\x8f\x82t\x83\xde\xbbO\xa1\xf2\xff2\xed\x00\x8a\x15\xecA\x18L \x8d\xe6\xf6L%f\x12S\xd5\x01`\x98\xed\xe0\xc2\xc0\xe3\xc8'\xaaD\xb2\xb8\xfa)\xec\xc3?\xbe\xc2\x08R{\x91\xa9\xbcT\x14:\xc2f\xb5\xa0\x0fh, 7\xe6mXd\xdc\x91\x84\x98\xa2\xc6:7\xc2tB\x99d\x11\x81\xf5\xb3`w'\xd8\x810\x8b\xe16IS\xb8!P\x90E\xbe&1$\x19\xac\x9f\x07;\xc1\xce\x1bX\x95\x04,r~\x11\xd0s\xc3\xf1|\x0ep\xb6XW\x0c4\x18i>\xedRv\x8e10\xd9\"\x8fI*/ZN\xc2\xa8\xe8\x88*5\xc7\x12\xd5\xcdVO\xee5\xe6\x16C9\xce()\"\xb2\xa4y\x87R\xf5B\x94\xe0\x04\x8cR\xc42\xcaz\x95\xeb8?y\xe5i\xc1\xad\x9dG\xf0\xfb\xf6\xca%x\x1e\xac\x8a\xd4\xaa\xfe\xc5&\x8fq\x15\x11\x83\x88wIFNW\x8b\x1bR\xbc\xcd\x0b\xb4\xcf\xdb\xb7}h\x86\xdd0\x84\xc2\x90\xcf]\xd5\xcd\x0bZ\xd8\\w\xcb\x1b\xb7\x0eT\x8f[\xca\xe8cH>\xac\x8dN3\xe4\x9b\xb0$Gyd\xe5\x1dA\xb8\x00mB\xc8\x08b{\xf6&x\x8c\xa0c\xd3\xb7ac\x04\xeb\xae\xec-\xc0\x18\xc1\xc2\x98\xfd\xab\x17\xd09\xc9\x06\xe8WA\xe3\x8e\x95M\x98\xbd\x03\xec\xe1\xf6\xad\xfc\x1a\xd6\xae*\x9eL\xc1Mz \x0c\xa8$\x02\x0e\xba\xf3\xcf\xcc$\x06\x082\xa3y\xfb\x9f\xe1\x1do\xa6(\xd6t\x0d\x11T\xe5\xbc\x81\xda\x9a\xeac%K\x08?\xcf\xd9\xa4LWi*\xb6\xc8\xcc\xbd\xf3\x95\x14i\x15\xc0\xd2\x96\xdc\xc8\xb5\x91\xbd~ \xfe\x9a'\x99\xeb\x04\x8eZ\x04)\x15FU\xcb\xd8\x93$\xa0\xdcE\x9b\x9c7\x1f\xb5s\x84\x8b iu\xccr\x9a\xef\x93\x89\x0f\x8e kz\xa3?\xcb\xa7\x11\xcf\xaa#\x10\xa8\xfa\x08\xb9! Dc\xbd\x85\x86X\x01\xda\xa1\x8e= #\x13/qV\xc6E\xf1#j\x99\xe4\xdf`9XhWfvS\xaaVr\xcb\xfc`r\xa5\x1dGo\x85>\xda\xa2&\xc6\xd8kZ\xbf\x96\x15Y\xcdh\xc7\nh\x81X\x03\xdfQ5b\xa8\x0f!\x0f\x80\xe2C\xec\xc3\xdc\x87\xb5\x0f\x0b\x1f*k\xdf[\x1f\xc6V\x85\xa1\xba\xed\xdbb\xd0\x86\xc1p\x0bo\xdexP\xde&\x9c\xca\x0f\x96\x05F\xfc\xe2\xc1\xd0\xbb6Z\x14\x96\x04vF\xddk;\xe5\xe7\xd7\xdf\x82\xf2\xae\xa4d1d\xe3\x12\x19\x8c\xf1y7\xdc\xb0\xe7\xa6 a;\x92\x9a\xfa\xd8\xc1\x05lH\xc2\x89\xc9\x8d\x00\x1e\xe9\x05`\x04q\x9e\xfd\x9e\xc2<\\\x13\x08\x81\x0f\x06h.\x0c`\x08\xe4\x99\x0f\xe1M^\xd0$\x9b\x05\xdcaQxS\xac\x96h\xe2\xc1\xda\xb0\x05\x07\x069\x93\xcf\xfbg2\xd3yQ\xc1\xc6\x92\xa2\xa8)d\xc1\xb1N3\x1fi\xe2\xbc\xa2\xf2\xf8P8\xef\x97#E\xaaS\x9e\xa1\xa4\xfc\xade\xee9\x04\x94\xd6\"R\xe8`\xacK\x0dw\xf3\xb6\x87U\x1eb\xe8\xd4\x14\x91\xf0\x12\x91\xf0\xa2\x1fh\xe1\x1bp\xb0\xe9\xf9\x16\xbclz\x86\xe0j\xd3S)\x14\x8au{\xeaw\x99\x1b\x9a\x1el\xf9\xe9\x83[\x0e9\x91K2\xea\x0b\xb6\xbc \xe5*\xa5'\xe1\xd2\x17\xbc5\x83\xf2_\x12:?\xe4\x0e=%\xcaV\xa0\xed\xa5\x0f\x89\x9b\xe2\xf9z\xbfi\x93O\xc5tL9\x1f6\x8c\x96\xd2\x1f\x13[r\xf7\xb0\xaat\x96\xe5\xe6a\xd5\x98\xd8\x19\x83\xa2\xd2\x90\xc7\xc8\xea\xdc\xde\xbb\xaa>bQ\x7f\x10\xbc^>\x18\xbc\"\x05\xbc\x96\x88x9\x9f\xc4\x8f\xba\x88sWP\x04a\x9a\xe2 R\xba\x1e\xf7f\x86\x8c\xcc\x10n\xc9\xf6\x0c\xe4\xa2lO\x9b\xbbZ\"w\xb5\xd4\xcc\x16\\.\xa1\xb8?\xfbdz*l`b\xa0\xe6\xee\xfa\x7f\x1b\x03ez\x1e\xc2T\x99\x9e{3Z\xa6\xa7\x9f\xf92=\xa8Pm`\xba\x16\xd2\xbd\xf6\xac>WW\x885\xe3\xf6\x87\xb4\xfa\xd0\xa2\x83\x1e:\xbd\x15f\xef\x94\x10u=\x96\xa3`\x04\xf6\x08\xf0\xb6\xe7A\x88h\xf7\xfb\xfba\",\xe4\x90,v\xeeW\x0e\xd4\xcdX\xd2|i\xf1\x91cz\xba\xa9g\xf9|\xc5\xe8\xf1&G\xb6\xc6\xdc6\xc9\xa4\xfa\xb4\xae\xf0z|)\xa8O5Xs\xd0\xcf\xde:\xba\x07\xfd\x95Q\xc3\xab\x8an\x13\xb8d\x00bW \xd6\x9d\x9a\x9c\x0d\xbb\x93\xab\xcac\xcfR\x9a\xd0\x074\xff\xcf\x8b!D\x84\x15\x9c\xa7\x8a\xc8X\xd4\xd6=\xc0\xae\xf5\xe1\x90\xdb\xc3~\x8e\x95\x83\x92{-\xafxz\x1f\xaf\x8dx0\x10I&>\xed\x06\x07\xe4\xf1\xfaz\xf4\xba\xbbG5c\xf1\x1aO\x87\x1d\xec!^V\xba\xbb\xbb\x9e\xafK\xfe\x02j\xbb{\x80\x8aL\xed\xa1Sc\xb3\xa1\x83\xcb\xc6>\xae \xd3\xdef\x9e\xd9\x9b\x19\x8a\x11\x86\xec\xfe6\xd0\xab\xbb\xda\x87\x89\xb1\xd4\x841j\xbb\xaf\xafZ\x1f\xaf\xda\x0e2\xe0\xd9\xf7\x0d\x9d{\xab\xb5\xc77^\xec\xffM\xc6\xc1\xf4+\xa8\x03\x0cC\xfaV\xf7LX\xbd}m\xdb\x02\xdc\xd3\x11x\x8fJ\xdcy{\xff~\x8b\x8e\x9fT\xd8l\xaf\x99m\x80\xfe\x10\xdb\x1c+o\xfdO\x1a\xdd\xc4\xe2\xc0F\x0cO\xc5\x83\xf7\x1bi\xcb0\xe9[\xd6\xee\xf0A\xa3\xab\xb4\xa5\xcdC\xe4.\xc1\xef\xbd\x84]\xf6X\xdf\xae'\x7f\xf1\xcf\x18\xe9#\x98\x13\xf0\xb058\xea\x9f\x85\xe9\xc2\xf0iS\xb7v\xd3\xbc\xed\xc1j\xae\x03&\xa5_=\xd7\xfc\xb9`'\xb6\xc9\xcd\x81e\xc9>uAK\xc3\xb8\xef\xbf\xe7h\xffv\xaf\xd1\x1e\xf4\x8c\xb6e\xe0\xf8\xbfa\xd0g]\x83n\x18y\xf6\x1e\x9c\x1d\xe34\x8c\x857\xff\xbe\xab\xf9\x96\xd9io\x17\x86*\xe5\xd9Tn\x8aa*{\xf9P\x95\xbd\x95&\xeb6\xe7\x12\xf1\x06\xc3\xf2YOu)\x12\x96\x0c<\x18\xca3\xe7\xe1r$qW`\xcc1\xc5\x1c\x95\x8e\xa8\x05m\xc2\x1e\xacl\x9c\xc1\xfd\xb4S\xac\x9a)\xe6\xec3\xbc0\xe0\xacD\x9b|M\xa6\xe0\xce\xe0\xc9\x13\x98)\xa1\xc7\xf4w)y\xd2\x93\x85{\xd2~\xf1\x93\xa4iY\x0d\x1bBK\x86{\xc7\xaa\xcf\x89\xf6\x1e3\x98\xa5w\xc6\x0b\xcf;\x1d\x07\xb9\x93\xd4\x87\xe8\x8am\x84\x8c\xad6\xd2X^\x17\x9bJ\xd4)\xd9k\xbe~\xf9b\x8d\x1f\x00\xca\xd6P\xcbLx\xc3\x1d\x1e\x0c\xdd\x0dt\x0e\x8e\xa1\xfcv\x84\x8b\xa52\xf9;w\xda\xe1\x9a\xea\x82=p\x0c\xbe\x97\xc0\xcc#\xa0H\x07\x83\xc8}\xa6\x1f\xaa\xc8Lq-\xfa\x91\xcaH\x01\xcd/\xd0\x12\x96\xb1\xcf\x02<*\x00?\x8eQ\xc8\xa7\xbe\xefi\xdfG\xbcP\xca\xfeD\xa2\xf3\xcd\xfcY\x90/\x8fcw\xc6\xefc<\xd4)\xe5d\x96k]\x136\xa97\xb0\x07)l\x823r`\x13\"\xf3\\2v\xb6\xe0\xb1>\xca\xa0D\x1c@\xe2\x0bLro\x90ko%w\xe8_]\x8bjX\xbe\x9f\xc3\" oR\xd2\xa5\n\x05\x18,\x9d\xe5\x1eU=\xe9\x96\x08\xb0\xa5,\x97aDFpc\xcd\xf8\xb5_\xbap\xfb\x08=\xedo\xbf{\xce\xabv+\xf7>\x15t]{\x12\x91\xec\xc35\x8c\xe0\xd6G5^=R\x1d\x0e\xa2\x9d\xec\"\xa0\xf0\"\xad\xa8u\xa2L+\x9d\x17B\x87!\xdfm\x7f\xe7\xd8\x17y\xac\xb6\xfac\x1es\x9c\xc4\x8b\x9bK\xb1\xc1\xdd\x05I\xf9\x9f\x17g\xa7\\0\xed\xb9cT\x8cW\xab\x81=`\x19\xb86\xbc;\xf6F0f\xfba\x8csi\xc8<\x16\x93\x0c\xa3\xf6\xa7\xf6\x86n\xa5\xb0\xa1|\x163\xaf\xb8\x01\xf9\x07z\xe6m\x8f\xe33\xee\xc4\x9bU\x92J2\xcc\xfd\xec\xf9P(\xc4\xa8\xab\x1c\x90\xf5A\x08\x9f\x0d\xb5\x11\xc3\x11\xa6R\x19\xbd\xfeq\xd7\x0d!\xe0\x84\xea*:\xea\x93\x9bG\x99u\xab0\x16m\xc2\xd32\xc0\xbc\xe1\x9bD>_U\xf8k\x0e\xd3p\x97\xcc\xc6u\x01{p\x14R\x12d\xf9mG\xa8\x9bLRg.\xd1\xd5\x05\xad\xd3F\x83x\xc5Qj\xa3\x0d\xd8\x82\x8bj\x0dyO-c4\xa8O}\xf5\x84\xa0\xad\xbfyuJ{\x1a\xea8c\xb9\xf6F\xd7}\x0b)\n.^\x98\xab~m\xccg\x9ei@\x8d$\x0b\xafI\xdan{\xf4aK\xf5\x04\x83\xa3\xaf\x1d\xab\xa3\xaf\x9d\xa6\xa3\xaf\x9d+T\xe37P\xef\x15%\xda\xfe\x96uR\xa0\x89\xd8\x07\xb9b\x9e\xc3}\xfeP\x0c1\xc9\xcb9Wf\x1fi\xdd\xa4\x9bT\xd2$\xc14\xebR\x9a\x0f+}\xd5\x01\xf4;\xe9\xe7\x07\xca\xea\xf6\xdf\x16\xa5\xce\xed>\x0c\xb9\xfa\x80\xe6\x1d\x8b_K\xd8\xa9\xfc\xb0\x1d_W8x\xednl\x8a\xf7\xc9\xed\x03\xcb\xce\x08D\xa6\xa3\xca\x9c\x9d\xd1J\xdb\x9f\x17\xe9v\x12P\x86\xac\xa6\x96N\xccq\x00\x15\x81\xd8\xe8\xbe\x0f\xb1\xfd\xec\x16\x80\xb0\xd2\xb8C\xd4},\x9a\xb85\xb1md\xa1\xfcm\xd1\xbf\xe7\x8a\xdf\x96\xa5\x96\xd8\xa2\xdfb\xd8V^\x92\xc4V\xednS,\xdc\xa9\xa5\xab\xc2\xb4\xd9b\x9fa\x0c\x97\xbb4\xa0\x1c+\xce\xc1_=\xce\xa8H@>/\xf3\x02\xfd>7\xe7\xbb\xb2\xf1\xcd\xdc\x97\xcf\x9ej\x90P\xdb\x087\xbdO\x19\x9b\xb4\xb57@,\x89\x91]\\n\x00\x12f\x11\xbaUD\nKA\x80\xe8\x11\xb4\x80$\x03\xe2\x01\xde\xea\x03\x9b,T\xb4p\xd1\x1f\xeb\x08\x92,\xca\x8b\x82D\x14\x92l\x9ds\x07x\x1b\x16W\x8e\xe4~3hv\xe7U\xd9(\xb9\xaf\x9f+\xcdT\xc3\x0f\xa6CD\"\x19\xb9\x1d\x805Y\x8f\xda{\x8d\xd15\xc1\xb2\xc8\x17 \x8a4YUdX\x9096\xe9\xca\xfcRm\xbe\xb3\xf6,;?\x861\xbc\x17mEyV\xd2b\xc50\xb3M\x97\x11O \x1f\x0f\x1b\x83\xbc\xd6\xf3y\xe7\xc5\x05*\xcb\x84\xbe\xe5D\"\xa3~1M\x0b.\xf3U\xb5;\x1c\xb4t\xf5\"}\xbfcZ\xa4\x01bB\xd4\xb0\xe3GW\x921\xd8D~\x9aLrv\x16\xe3\xbf=\xa0\xec\xdf\x08\nVG\xee\xe3\xeb\xbf\x04\xf2^>\xdf\xb5\x8c\xaax\x8c\xea_\xbd\xb0\xd4\xce@M\xd7g\"\x9f\x97i\x12%t\x04\x13\xd6\xb1\xe7\x8c\xe0u_>\xff^\xfc\x7f\xe1\xa9\xdeP\x1f\xde\xbb\x0eJR\x99\x97\x17\xbb\x167\x93\xec\x9b\x8e\xea@\xd0=\x9a\xc7\xca`s\xeb\xea\xbb\x91\xb7\xef~\xdc\xfe\xb8\xed\xed\xbb\x93\x8f\x17\x1fK\x0c\xc9\xd9.\x1eb\xf1\xc9\xc1\xd6\xff\x1f+\xe0\xffw\xb6^on\x05W\xdf\x8dX\x05\xdb\xedB\x8c|\xb1\\\xad:\xff\x86\x9e#\xc3r\xae\x87\xf3\xae\xb3\xec\xb3,\x7f[\x91\xe2\xce\x9eg[\xfatDG\xca\xd6l\x7fd\xd9\xc2\x15\x92x\xbb\xb6\\\xa7\xe1)\xeb\x13\x8fH.\xaf\x86w;\nl\x8f\xdc\x8f\xf1\xa6\xf7\xef\xdb\x18\xc8\xbch\x14\xebo\x04{\xac5\xd4*c\xa8\xa6}\xce\xc9\x87M\xe7\x08v\xcd-\xe3D\x8e`\xb7\xf5Q\xf5# \xaa\x9b\x8d\xd4\x8e\xaf3\xaepo\xb3\x94C\x015\xfa\x83s+\xc3m\x1a\xa4\xe2\xd4\xe2\xc2@\x8bp\xd5\xb9I\xf3\x9b\x91#d\x9e\xcb\"\xa7y\x94\xa7\x1e\x87{v\x96\xb8\xab\x8c\x94Q\xb8\x94\xbc\x13\x9bF\xcf7WH\xd2\x92\xe8\x8e\xea\xf6t\xf7\xd8\xf2A<\x981\x1cX\xb7E\xb0b\x1fJO\xeaz\x14\x93\xcc \x91\xac\x1bR-\x99\xad\xda\xd6uS\x84\xa1\xdb$\x03\x94\x90\xba\xacr6_\x93LG\xaf\xf2Ql\x14\x8a\xa0L\xc3rNP\xfc\xec\xd6o\x8c\xb0\xa5\x9cQ\x9f\x17dj\x8a\xfa\xd3J\x91\xbc\xe9\xef\x9a\xd9\xccp\x11u{;\xad\x02\xfaZ\x89g\xf3\xa4\xc8\xb5\x1e\x01\xe5\x0e\x9f\xd9\xbf\x80\xe6\xef\xf2[R\x1c\x86%A)\x8fc\xb1v\x17\xa3\x1f\xc1\xc6\x06\x9d<\xb5\xec\xbe\x82\x94\x94U\xff\xac\xbd\xd1\xf4+V\xf3\xd0\xa7\xb6C\x14*J\x8f\x1d\xf1*\xb17\xad\xbdPW0E\xcd\x82\x176\x83\xdc\xec\xa9\x94\x1a\xf7sn\xc1\xb0\x12\xc1\x91-\xdc\xcc\x02j\x97\xdd\xe6\x1c3\x96c\x9eX\xb8\x8a;\xd8\x83\x9dv\x7f\x10L+\x88f\x84\xd3\x02\xad\xf5\xe5f\xaaR\xb8=\x8e\x8f\xcb\xcf\x1d@s\"B \xfe\xb3Q\xf50\xabJ\xe4\\\xcc\xe7\xf1\x82)RH\xec\x9c\xdap\xd9q\x13\xb9\x84{.\xf6\xbc\n\x0f\xe0\x85H(A\xdd\x87Y\x03\xea\xe5\xef/_ \xe1\x1eu\x95\x8cU\x15\xc8\xf8\xc9\x17DL\xea\x9b\xe3\xf8\\l\xc1h7\xea7ku\xd7\x93\xa7l\x83N\xb6\xdd\xe0;o\xbbq\xf4xo\xe0\x0e~\x80\xb5\x10s\xbc\x81\xbb\xcdM\x0f\x91\xb5\xcbx\xd8\xf5\xe4\xee\xca\x9b\xec\\\xf9\xdc\x12{\xb2{\xe5C\xc9f\xa5\x84}\x98M\xe6\xb8\xef\x19|\xb7]j\xb2\x1c\xff\x8f\x1b\xa3,@\xfaX.=~\xc9\xe1dh\xfe\xa2f_\xb2>\xee\x83++\x15\xa0\xb3#tT\x95\xa4\x1861\xb7\x87A\x87\xb5\xfczf,\xcfs\xc6(\xfc\x15\xbb\x9c\xf7C\x14\x8eq\\z1\xdek\xcf\xf3\xe5@\xf1\x9f\\\xa5\xe5\xe4\xd9\x15\xae\x96Hd+\xb0\x9c<\xbfR\xebe\xff\x9a\xa8\xc0\xb0}8`\xcd\x02<\xe9\x90\x14\x12\xbf=\x84+\x15 @\xf1c?\xab\x8e\x91 \x9a\x87\xc5\x01uw\xc4\xdc\xea\xdfy\xef8GQ\x9f=\xa2\xd5*\xd3\x00?\x11\xa0\x92\xdd\x18\xe9\x0c9\x14g\xdb\xf1\x82r\x99&\xd4\xe5?\xe5\x0cn\xedz\xd2a5Q2x\xbep\"\xc1A\x8e\x1b\xbce\x93\x02\xb6\x18\xfd\xc1\xb7\xd2.7s\xdby\x03\xc5\xd6\xd6\x1b\x0f#{\xe0M\xd9\xa4\xb8B\xcf\x19\xac\xba\x08#\x13\xec\"~\x0d\x9a\x19\xdcf\x0e\x1fB\x06\xd6#\xee\xb7\xc3\xdd\xa9\x03Z\xb8 \xf7j\xe0C\xab\xc4\xd6V\xb7\x94\x19\xd7&\x0bVY9O\xa6\xd4u\x1c\xcf\xc7~\xb2\x89\xceq\xa9\x82\xea\xed\xcb\x17\xc8\xb8\x0e\x1cf\xcb\x84\xce\xfc\xb6)\xa2\x8a\xb2*\xbe\xbabl\xde\xd8\xb7\xbc\xa0*f\xe0\xfa\xa93\x19a\x97\xff\xe0\x85yf~{\xc8\xdeV%)\xc4b\xb36\xca\xf26/b\xfc\xcc\xbe2B\x13\xa7d\x89\xdf\xd9\xab\\\xb5Q\xab\xfcr\xb2S\x81}\xa3.\x86#\x04\x02d_\xf2\"\x99%\x19oP\xc1\x86\xa2\xbb\x88l\x93\x94\x8c*\x98\x95y\xf6\xd5\x97Mp\xb6\xb7\x1d\xd8\x94\xc5F\xe00|\x8dM3b\x01\xab\xaf/3\xb53Q}\x9b\xf2J\x85)B\x1b\xc4KBG\xbd\xac\xa7|\xf0\xe0\x13'\x94\x19R*\xeb\xaf\xae\x0bh\xae2\xca9\x86n\xa5\xd1\xdeX\x17\xd2\xdd\x84\x8b\xd4\xaa<\xa8x\xa0\x85d\x82\x17\xc9=\xe6_C4{9\xd7\xd0c\xee*Zc0K}H\x14p\xdd\x17~1\x12 \xb2I\x05\xb2\xd5\x95/\x0f(o\xc8Q\x8d\xc3\xe92\xd7\x84\xa1#\xa98\x9a\xa1\xa3I\xf8\x96\xe2\x13\xbd\xb9'\xba\xcbS\xd9$\xcb\x1e?\xc64#O7\xb4c\xdb\xa3\x8f\xf1\xe6\xbfos\x1a\x9a\xb2Yv\x85\xffxe\x0b'\x12!\xd0`\x99/\xdd\xaa\xc3bSS\x81\x96F\x8e\xa7\xcc\xbf\xfc\xa8\x14\x7f\x9c\xc9\x97 \xd17F\x95\x08\xa2\xcd\xf3\x94\xf5\xa9\xa6\xa56z\xa2N\x0f\xeb\x95\xa4\x8d\xfa\x94\xbcQ\x0c\xd0o\xf4=\xc8\xd6\x13\x0dW\xd9\xc4V\xad\x0b'3\xfbx\xe0\x8f\xc0\xf97\xcb\xb5\xb6\xfaHhP(\x82\x0da\x16\x1e\xb2M\x05&\xe5V\xf5\xf9*X\xc2\xc7@\x15R\x8c=\x08~\x8d\x99\xccF\x1f\x15\x05Rr\x02\xa1\x84\x1f`U\x91\xaf%;\xe7\xed\xf3\xcd\xca10ZM\xca\x0e\x0d\x9dT\xd2q\xc9$\x9d\xec^\xb1\x1e\x8a_\x1a5w\x8fnK\xa2\xa1>\x11\x93\xc6\x89\x98\x18O\xc4D=\x11\x13\xc3\x89\x98\xe8'b\"O\xc4\xa4\xa1\xde\xd3\x0e\xeei\xba\x9f\x14\x05F=\xb2o@\xd7vMNI\xf1\xa5\x8f\x04\x89\xf0\x8c\x84\xf5%\xd3\xbb\x0e\xcd\x1b\xca\xe5\xd1v>\x0f@\xc6\xc9\x95\xe3\xb7\xd0e\xd8%1s\x85\xdc\x04\x85<\x1c\xb7\x18\xa9\x88B\x07\x81\xb8;\xfa\xc4\xe3\xb4n\"\x1d)\xd0\xcb>\x9f\xf2\x91\x1d\xf9U\x97\xfc\x15\x9d\xc4 \xcc\xcd=%\x8d\x11\x7f\x15\xb9T}\xe7\xc7H\xfd\x05I\x7f\x96\xfeGG\xfe\xcc\xf8J\xf3\\\x92\x10\xcf\x87\x8d4X\xa6\xabY\x92\x95\x93\xec\xaa\x0biR\xb9\x86\xe35\xc9h)\xeby)\xeaQ\xab\xe9>5\xe4)G\x03\xb2\x167\xab\x1d\x1e\xad\x14D\x9fd\x10z\xb0r\xc3Iy\x85\xeb\\z\xb2\x17\xaf\x1c\x94;\x19<_\x82\x11\x17\xab\xd7\xb4\xed\x95\\\xd9h\xfe\x94w\xf94\\\x90\xa3\xa4\\\x864\x9a\x0b\xedd\xb6\x19\xcen\xb3\xcaP\x99{\xc9b]{\xed\xa0*BGY!8m\xceA\xad\x8f\xb1\x9c\x87%\x89\xcf\xc9,))\xd7q`uhS\xc6A\xcd\xb0|\xd5\xfc%l\xfe\xacR]\xaeS\xab\x0d\"\xf1<(\xdd|\x92\\\x89\xe9\xe8\xd9\xe9P\xa3?=\xae\xed\xefLy6HPh\xc3B\xfcR\xba\xed\x0f\xa2\x07>c\xd3;\x17\xaf\xb4/\x9e^'\xbfB/\x19\xf5\xc1\x17kwg\xa7\x02\xe7\x8e\xccH\x06\xb7s\x1c\x91%\xc9b\x92EI\x95M\x01\xf1Iv\x15\xc4J\x0ee\x10\xf2\x97\xa4K\x9a\xfd\x16\xfb\xaam\x95e\x83\xa7\xb6\xda\x91e,\xfd\x19\xd5!\xb5s/\xf3\xb2LnR\xd2\x82M\xe1\x01\xa0 \xa1\x19;\x9e\x10y\xbc\xc7\x11a\x8c\xc9>\"#\xafVf\x97\x9d\x81u0\xba\x8a\x83\xe7\x92&~0\xb0\x95\x0bu\xd6\xbf\xa7\x1b\xe5\x8fw\\)e\xc0M?\n\xa5,\xb2f.\x0e\xc3k\x11\xeb\x0e#m4\xd1G\xa7\xe6\xe2N\xc5\x8e!\x133\xeeI\x10\xadH\xb9\x93\x8b\xafr.\x9f\n\x9c\xc4\xf3\xe0\xad8\x17\x80\x0dD\x9fH\xa1\xf6L\xf4\x8c\x88 \xe6\xc0\xf66/p\xd2\x87\xce3 \xe2\x06T\xb7\xc7\x8flUk\x13V\x17\x16\xf6\x1d\xdc.\x84\xb2*\xb3[g]\x1b\xc3\x86\x8e\xbbNqn83\x08\x8f\xcb\xa7\x02)\xd4\xac1`^\xf9\xe0\xc9\xaeC@\xd1 V\xa0\x80\x96}\x96\xb2Iq\xd5\x01uP\x1f:b\xc2\xdbQ\x85\xe4\xd3u\xfe\xcaG\x92\xcd\xab4\xed\x82\xaa\xeb\x82\x94\xa4\xb1}Gv5Nh\x11[\xb9\xb8\xe4A\x8fg\xad\x8d\xc3\xe5\xe1\xe2\xb2\x94\x91]\xed\xe1Wd\x8e\xe4'\x8c\x97O\x12\x88\xedg~\x1f\x12\xa1\x1e\x0f\x9e\xdb\xde\xd7\xa2{\xd4\x88\x13$Yk]\xd6\x8evC\xbc>\xf6\xa0\xd0\xdb\x0d\xd5v\x8bI\xd8\xbc\x804j\xd9\xaa\xf4;_\xcf\x87S\xe9\xdc\xa3\xa2\x99VG/\xd0\xee\xd3\xdd\xa7\n\xdd+Hw\xf7\xb51\xfe\xc6\xaaC\xdd\xad\xa6\xb9P4\xfc\xe5\x0b8\xab\xecS\x96\xdff[\xb8\x8e\x9a\xf0\x85\x04\x11w\xe9p\x19\x163B\xf1biF\xe8i\x1e\x93\xb7E\xbe8\x16\xf7\xa8n\x81\x97\x84\xfb\x10\x06I\xb6\xce?\x91?\xad\xc2\"&\xf1a\x98\xa67a\xf4 }Cp\x7f\x99\xd8-\x82W\x14\xe6\xbcU\x16\xdf\xd0zc\xef4\xa9\x8a\xb6\xdeER\x8e\xb38)\xe7}\xf8X\xecK\x87\xe6\xcb\x93|U\x92\x0fK)\x94b\xd3C\xf3\xe5e\xbe\x8a\xe6\xe3,6%\x1f\xb2\xf1\xa7\xe2K\xd7\xb6N\xca\x93|M\x1e\xd0\x1dV\xcc\xd4\xb2\x92\xde\xdd\xee\x05\x0d\x0b\xfa\x80\x86\x8f\xf2\xdb\xcc\xd40\xd67\xa0e\xa1\x82{\x94\x14$\xa2\x129\xf4u\xa2>\x1c\xaf\xe5\xe9\xf8.))\xc9\x88M\x0b;k\xe6\x960i\xc0\x03M?T\x94\xd3\x10\x8cXx\xe6\x18\xa1\x8dA\xb4\x19\xde3\xcf\x18\x18\x18\x14\xfc\xc4\nS\x97\xd83J\x95<#\x90\xfb\xc6 0}\xac\xc6[},\x06-\n/M\xca\xe36\x95j\xb9\x16]WV\x80C\x97\xa6\x18\xbc4\xec\x9c\xd5\x9d0w\xe8\x01I4\xb6\xf3\x06r\xf8\xa1v\xd5\xfc\xe4 l\x90 )\x19b\x0fg\\[\x9e\xe6\xcb%\x89]\xef\x0d\xe4\x9b\x9b^\x8d\x1d'\xf9\x95\x0fE[U\x12\xa4\xc2\x10^X7\x90\xa9!\xe3\x03W\xe9!K\xc4Fr@/\x8b\xd5`J\xbe_\xbay\xff\xed\x06\xf7\xdar`\\[\xdaI\xbc)\x84!\xbf\x19\x87\x1f\x1a7\x7f\x1d+\\lnv;\x18B\x8azR\\\xb1Ue\xe4\x9f\xa2\xfd3)\xdajG\xa0\xdc\x15\xa0\x87\xe0'O\xd8\xa6\xe6\xc1\xb3e\xc1n!\xa9\xbe\xd8Xe\x97\xfaU\xe7\xde\xee\x847\xda\x05U\xf3\xb0\xac!\xaa\x0f\x80\x14\xf1E\xbb\xbd\xaeV0\x9e7\xef4C\x98\x0cq\x0el\xab\x08\x0ce\xf5@/\xed\xd6t\xd4|\x9f\xd6Zh\xbd\xbb\xb5\xa4<`k\x81\x0e#{\x91\xa5\xe4\x18\x82\xba\x14\xcf\xdb3\x9ew\xf9-Zw,\x16y\xf6\x90\xe6,U\x0cj\xfb}\xc8\xce\xa1{\xce$6\xd9,\xd93\x8f\xb4\x08\xd7\xa4(\xc9\xe5m\xfe\x9e1\x8c\xc3\x14\x11\xaa\xe6\xf4\xe2U\xa1!m\x8e3J\x8aw$\\\x1bZE\xd7\xe6FYu\xab\xed\xba\x1a\xadp'\xfc\xa0\\&\xc93\x93g\x0f\xfe\xf10_,\xf3\x8c\x11\x03\x05\xe9]\x00\x90'l\x1b\xbf\xb4Q7\xaf\x9fU{\xc9\xc7\x10\xa6C\xea\xcf\xcd\xf5\xff\xce\xfcfa\x8f8\xc6x8{\x042 U\x95\\\xf1:\xb9\x0dd\xcc\xb1\xaah\xcb\xa4\xa33j\x14kUQ\xa1\xc2\xc9\xee6\x86\x02\xe5^M\xe3FL\xccN\xcb\xca\xac\x9b}je/\x08\x1a\xca\x1c\x86\xab\xd9\x9c\n\xd7\xe1\x9d\xb2\x02v\x8aY\xcdr\xd6\xc2&\xd4\x12\x14\x86\xdb\xe4\x14\xf5Y\xf4\xadp\x91<\x1c.\xcc\x164&n\x97S7\x94\x13\xd7_\xbe\x00 \xca\"\x1a\xa7dA2|\xbfM\xb28\xbf}\xa3O+\xdb\xef4@\x9b\xaer\x99gq\x92\xcd>\x94D\x96\x93\xfaG\xd6\x1c\x9e\x0f\xcfxh\x9c \xcbc\x82F\xfd\xfb<\x8c\x1c\xc9\xf0\xe0i\xe8(|\xab5\x8e\xd0-t\x9f\xaa\x163y\x10\x85\xd9\x87\x92\x1c\x9d\x9dT\xe0\x1b\xe7\x11\x1a\xef\x06\xc9b\xc9{\xca/'\x9f<\xb1}\n\xe6a\xf9\x96\x84tUH\x7f'\x1b{\xd6z\x94\xcc\xae\xe3\xf8\xa8\x1d\xdc\x98\xd9\xed\xef\xbekB\xcdwp8'\xd1\xa7\x92Af\x98q\x81?$%\x94\xab%[_\x1e\xc0\x89\xce \x08.IP\xc7\xe82=['E\x9ea7\xb4J\xf56N\xcf.\xc7#\xb8\x9c'%\x8f\x0f\x95\xe5\x14n\xf3\xe2\x13\x08\xa3\xbd\xf4\x0e\xa9\xce,\xcf\xb6f\x8c\xc6I\"\xde\x13\xd6\x8fh\x0ea \xbf\xf1H\xca\xbf\xf9z\xd5\xbf\xa1\xb8\xee7\x1f~K\xf30f\xff\xd1\x08\xfc7\x1f\xa3Q\xfd\xc6\x1ds\xfc\xd6\xd7\xc1\x1f\xf3\xa2\xc8oK\x98\x16\xf9\x02N\xf2\x98\x14Y\xf2\xf7\xa2\xaf\xd4\x1f\xd1^\x14\xfe\xc1\xb5\x0f\xbe\xd6\xd7%\x17\xab\xe94\xf9\x0c(D\x84L\x98\xaf\xcf\x02p\xa24\x89>9z\xbdUE\xfb7y\x9e\x920chq\x89K\x8e\xab\xc3\x16\x07\xd7@$\xa2\x9c\xb7\xb1J\xed\x1a\xa51AU#c\\dE\xedenW\x90\xb036\x0b\xd3\xd6\x874\x89HV\x92z\x9a\xe0Y\xb0\x13\xec,\x0b\x02\xee\xe1\xaa\xa4\xf9\x02~\\%i\xec\xc1\x1789\xbe\xd4\xcao7\xde}\xbb-\x9e\x8eL\xd0~@\xddS_\xbe\xf0[\x82\x0d\xd7 \xe3\x18\xe7Z\xd2\xc8\x0e\x83Z\xb9GjVA\xbfY\x91\x1c\xb5\x93g\x0el\x9a\xfc`\xa1PP\xad\xecM\xbbOF\x92e-\xae\xa0\xab\x8d\x1a\x15$\xa4\x12=\xb9N\x9c\xacM\xea\x1daP\x12z@i\x91\xdc\xac(q3\x1f\x84\xb3\xe47\x8e\xd0\xfe7\xaa\xc2\x84\x93\xcc&2\x05\x85\x9d@Mb\xae\xbdr;'\x95\xd8\x0c\xa4~\xf2\x10\xac\xc2\xef\xe6\x03^\xde\x07\xe7Y\xb0\x83\xaa\xd6\xc9\xa3!\xd3\xd6\xd1}\x90\xd2\x118aJ\xffL\xee\xf4\x90\xbayF\x8b<\x1d\x81\x13\xd1\"m\x7f?!4\x1c\xa1\xdb\x82\xb0\xfd\xf1b\x9eLY\xcd\xa8W\xcd>\xd7C\xb0\xd0:\xb6\x03\x0e\x0dW\xb3\x90&k\x82\xf3\xd3\x86\x12\xf43v\x92\xc7\xc94!\xc5\x05\x0di}\x8d\xd4\xfe\xd4bO%\xa0\x16\xad\x1b\x83\x8aS\xc43dc\x83\xaa\x90PC\xc1\xb0\xf3\xbau\xcd\xf2\x08K\x99\xb9\xaf^\x1b\xd4_2\xf7e+=\xe1j1\xbb\xdcv\xf4\xd9k\xfc\xf7t\xf7\x95\x1e\xfd\x9a\x8b\xe4w\x9f\xeb\xe5W\x98\xfe\xec{\xb3X\xbe4b\x151d\x93h\x92S\x18\x93\xdd+!\\\xa7\xe8\xb5\xf8\"\xb9I\x93l\x86\x1eu\xa6IQ\xd2\xc3y\x92\xc6\x86)_\x8b\xab\xf6\xc4\xedc\xafH\x90d%)\xe8\x8fd\x9a\x17\xc2\xb1D]\xa1q0\x91\xad\xaeB\xd4\xc58\x0dQ_\x8b?3\xe94XM\xb7Z3\xb3ob\xdcl(07+\xeaTaK\xec\x840\x8fI\xa4\xcc\xb8]\xb8\x95\xba\xdc\xee\xba\xe0\xd7\xf7\xdc\x82\xbdCk4\xafh_\xf5\xd1\x88g\x1c\x1cZ$Q\xb4\xdaA\x91s:l2\x97\xd6\x03l\x88\x1c\xae\xba\xcf\x9d\xec\x1a\xee\xdfb\xac\x1b?\xef\\\xf1;v\x12\xf0`\x9b\x08\x89-\x0eK\x0355+\xed\x1eFl\x83\x89\x8e\xe5\xab\xc4\xef\xddK\x87|P\xcfR5\xfbZ\x0cc\xfc\xe6\x0861\xa3\x15\x8b|U\xa6w\xe7d\x99\x86\x11a$?\xe3\xe3N\xc2\xe2\xd3j\xd9DS\xeb\xb6k\x8c\x9e\xf2-\xef \x05\xcfuD\xd2d\x91P\x12_\x92\xcf\x03\x0d<\xe4\x84\x11\x8571K~\xf9\xbda\xe7\xb4\xe6\"\x1c\xe8>\x17\x9e\xa7n\xe1\xeb\x14\x08\xeb\x19\x8a\xf6\x18\xe4\xe4x=\x02\xfb\xe0\xae\xf0\xde\xcf\xf3!v\xf9u(E\xd5||\xeb\x95]-\x8b<\"e\xf9\x01=\x14\x97\x03\xc4e\x0d\xeb\xae\x9d7\x90)\"\xe67\x90\xd9u\xab+\xf0\xb2\xea\xabHS\x98\x02oXm\xf5@\xa5]\x7f|z1>\xbf\xbc>98\xff\xf3\x87\xf7=j\xf6\x88u\x0b\xe9\xd8\xc7\xe7GJ\x11\x84SJ\n6\xa7}\xd1\x0d\x06\xd9\x05\x9c\x9c\xfd<\xbe\x1e\xff\xe5\xf8\xe2\xf2\xf8\xf4O=\x1d\x9a\xf2\x0eL\x85\xb8\xf6\x9f\xd4\xa3\x8b\xf1\xc0\xf9 \x1b\xf3\xf3\x18M_\x8e\xffry}xvz9>\xbd\xeci|\xf5\xe8\x8d\x9f\x8fq-N\xcf\x8e\xc6=m/\x9b\xeb0T\xc9\xe9\x9e\xf2\x9a5\xa6>\x88\x1a\xb3{\x01\x9a\xd3\x05#\x9f\xe7\x94.G\xdb\xdb\xb7\xb7\xb7\xc1\xed\xb3 /f\xdb\xbb\xaf_\xbf\xde\xfe\xcc>kd\xf3\"\xa4s{\x99W\xdb'!\x9d\xe3\x9f\x93wZ\xc9r=3\x16{\xba\xb3\xb3\xb3]\xaeg\n\x01\xfe8C\xed%u\xd5\xe8\xe9\xb5\x0d\xf6\xc9\xc5\xc1r\xc9\x10(\xfe@S\xde\x0f\x19\x0f~\x1f\x85\xe9[y>*\x94P%\x826\xaa\xbfvV\xd3\x1f\xd6N^L\xa9\xad\xb4aI\x17\xac\x8e\x1e\xdb\xdb\x8cQ\x8d=s_\xed\xbc4\xd0\xf1\x99\xfb\xf4\xc5+\xcf\xcd\xdc\x97\xdf{AR\xfe\x1c\xa6I\\\xc9\xe6\x1a\xb9CE\x19\xdee4\x7f{\x12nV\x94\xe6\x99\xd9\xaf_4'\xd1\xa7\x9b\xfc\xb3\xf9k\xb2\xc0\xf8\xfe\xa6O\xf3$\x8e\x89\xa5\xd2\"\x8c\x93\xdc\xf2\x89\xa0\xed\xa6\xe9S\xb9\xbaY$t\xd4\xd2L\xb6i \xe9\xeb\x8d\xe2\xee\x0dv\xc8\xe3\xa0H\xfc.\xc9>10\xac?`x\x04\x99\\\xb8\xce\xab\x97N\xaf\xae\xb2\xde\xcc\n\x95X]\xadR\xa9\x9f\xc8\x93\xf2\xec\x10\xe5mR\xc7\xfc\xd5\xab\x9ev\x0c\xdePZ\xed\x88Q\xf5\xb4\xf4\xba\xd1\x92\xfc\xc5\xc002\x9a\xd2\x8a\x88\x11Ch-P\x18f2\xa1\xa8\x93\x19N\xb8.\xd6\x15\x17N\xcb\xee\xf0\xb7\x82\x84\xf1Y\x96\xde\xf1\xb78)\xc3\x9b\x94\xc4\x8c\xbcb\xfd\x1f\xa1\xcb\n\xe1 \xeb\xd7|%\xc3\x83\xc6\x10\xc2o\xd8\xad\xdfX\xd2\x12h\x0e!\xa3y\x160MH\x1a\xc3mB\xe7\xf9\x8aB\x98\xc1o\xb2\xc1\xdf`\x1efqJ\x8a@\x91\x93\x16$\x8bI\x01!\xb0\x8el\xe5\xac'XC\x00\xc7\\\x90\xc7\xeb+\xe7\xf9*\x8d\xe1\x86\xc0bEY\x171\xd4\xfeo\xc22\x0e\xbd\xf7\xfd\x16\xc0\x19\x9d\x93\xe26)\x19\x99@(\x90\x84\xbd\xab\x1d\xc8\x0b\xf8M\x8e\xf8\xb7\xc0d2n\xd9~$~\xf8\xfc?\xe2\x94\x8b\xbe\xfc\xb7\x98\xf4C\xd1\x97\x7f\xd2\xb4\xcb\xd2#H\x026\xf3\xbf\xeb\xc8?\xb5\xda\x13-\xdb\x9b\x16u\xc8m|\n\xbf\xcb\x99\x11\x94q\xdb\xfc\xbf\xd3J\xb0\xe5\x08\xe95\x9b31\xa9\xdc\xff\"\xe4S\xf8\x8d[~m\x82\xf3[\xd0\x0ckh\x94]::m\x00\xa2Oq\x0b) \x18\xbc/\xf2%\x1aE\x0c\x83\xcc\xa62td\x03^6\xbe\xc8\xa4\n-%\x16\xd1\xa4\xb8b\xc74\xe7\x9a\x1c\x06\x88\x8e/\xee\xeb\xf2\x0e\xcb\xa9D\xf5\x89\x83\xe0\xcd%\xdb\x89\x0c\xfb\xc7\xba5\xedV\xdb\x99T\x99\xafP\xd5\xdeN\xde.u!\x81|zI\xd4&d\xcd\x08\xfdY\xc7\xbe\xa6.V\x9a5\xf5\xf1\xb5\x8f68(\xbc\xa8\x12\xff_\xf6\xfew\xbdm\x1cY\x18\xc4\xbf\xf7U\x94\xf9;\xa7\x0f9\xa6\x15\xc9v\x9cD\x89\xe3\xe3v\xdc\xd3\x997\x89sbg\xfa\x9d\x9f\xc6G\x0f-A\x16'\x12\xa9CRv<\x93\x9c\xeb\xd8o{\x0d{\x01\xfb\xec%\xed^\xc2>(\x00$\x08\x14H\xcaq\xf7\xf4\xec;\xfc\x90X\x04\x88?\x85B\xa1\xaaP\x7f\xc4_\"X\xf5\x8d\x15\xc4\xdf\xee\xfb\xc4\xa6=\x8d\xbd\xeb\xa7\xea\x11\xaa\x8d\x84\xd9a\xf5Z\x1f\x81|\xdd4\x06i)vVn\xc6V\xc1\xb7+$T\x94Ql\xd7/\xe4\xfd\xa9\x1c^m|M\xb3q\xb4\"\xab\xc8vJ\xf2{\xa4\xfd\x10\xce.*\xf8\x1aFI\x10?\x1c;\xd5!\xb1\x08\xe8\xfd\x12|\xa7\xe4\x18\xb7\xcc2\xfb\xe2\x1f*\xf5\x8c\xa9\xc4\xb1]\x88\xa0\xd2f\xa0\xda)cI\xa9\xd5\xa0k7Z\x95T\x15N\xab\xcb\xd26|UO\xe5\x98\xb4/b*\x90\xb3@\x92L\x96\xc8h\x18\xc4\\@\x06\x8f#\x8a\xc4M\xb6\xc1\xc1\xaa\xa7\x95<\xd0X\xf0\x0dv\x06\n\x0bd\xae\xd6\xca%\xabN\x83\xdd\xa6)\x0e\xb9\x8f\x95\x8a2q\x9f\x8e\xcc\x87\x16\x0du\x00\x8f\xb0\x0e\xfeQ\xf0}\x82\xdc*\xda\x1f\xa2\xa0Xa>9\xe5FB\x80N-\xa2\xa4\xba\x9a\xec\xdbwFZl\xb1\x9a\xcf{i\x16#\xec\xc2\xedZE\xadV\xd1z\xff)\xa1\xfb\x89\xdd!%\xb2q\xdc\xa8cjW\x84\x87\x90\xb4\x10\x15\xe1\x04\xc4\x0fg\xcf\x9aK\x08*\x00#\xcd\x8a\xf89\x06Q\xb2\x071\x03\x7f+\xab\xdc\xb3G\x91H\x99\xb9\x95\xfal\xc4\x7f\xa1\xaa\x1e\xffp\xdf\xf8\x96\xd06\xd6\xef^\xc8\xd9y\xc1\x15\x9c\xeb\x0b\xb75\x10\x7f\x132\xa6^\xb7\xd0\xea\x12\x17\x8b\x18\x81'\xab\xaca\x85\xbd\x94\xbd\xceU\xd0I\xd7=\xb7B\x1e\x12b\xf5\x10\x91\x88wUl5\xfe\xe6\xa8^%\xb6\xaa\xc40\x84Z\xfcG\xbc\x8dV\xe9\x9a\xd1T\x07\xff\xc4\x97\x9f\xd8\x9d|\xf7\x89\xdd=\xc4Z\xd17\xcb\"Tf\x1bAV\xac/M\xaa\xbdCo\x08\xdea\xdf\x11y\xd1\x1bb\xf1\xae\x9d\xba\x9bH\xf8\xa3\x80\xfd/\x9c9\xf6=4J\x08\x14u\xf7\x1f\x8d\x0e\x87\x97\x8f\xae\xc3\x0e\xe7\x87\xbaZ\x1e1\"\x96c\xa3._\xc5\x0f\xfdV\xa0\xf4q\xda.\xa0\x1c\xee\xf2\xe2\xe1&@\x11\xe0\xf0U\x8466\xea\xa3\xb7)\x87\x95\xf8\x8dQ1Y/__ D\xf4w\x05\x83S\xbd\x18\x04\x81\x06M\xff\xb0\xff\xe5p7xx\x80V\xf8J\xd3\x8a\x07 \xce\xec\xe2\x8a\xf6\x0fP\x916\x18\xec\x9a\xd7\xe6\xf2z]\xde\xab\xef\xef\x05\x9d=\xda\"BN\xec\xb1\xe4\xbf\xd6l\xcd\x04\xdfP\x8f\xccm\xb7@h\xbbJ\xdb I\x94\x1a\xcf?\xfd\x14+\xe8C\x0csQ\xa9\xb8\xe4\x82\x8ah/z*B!\x11\x014\xb3\x8e@\x92\x04fF\x8a\x8e\xf2\xf7\x0b\xd8\xed\xe3\x95\xdb6x\xe0\xf3&\x86\xc0q5\x93a\xaeB\xf0\x02^\x16x\xa0g\xffs\x87\x16p\x9d\x1fh\xeb\xed\x1a^\xa2\x0e}\xad\x03\xbd\x01\xdb\xed?\xce\xdf\xa6\xeb\xa4h\x97\xa0\xd4R\xd1\xfd\x83n\x86RH3\x94\xdeXH\xfclZ\xdaT\xd77\x89!I d\xaa\xecr\xbb\x08\xed\x8b2\xd9k\xe9\xbc\x88U\xed\xe1\xa9mc\xaf-\x94\x9cEu\x84\xd2\xeeb\xbd\xf1\x8a\xa1\x95\xa9\xea,\x87#\xea\xad\x08\xbf\x88\"\x13\xf5\xcd!\x8c\x8a\xcb\x10\"\xebB\xbb\x11 \xaf\xa51^\x07\x11\x93\x91\x03%\xdej\x03\xa5\xbe)\x07\xda\xecM \x07\xfac\x9aM$-\xe8\x8aM\xf4bH\xe3\xder@Z\xc3(\x98\xf0\x11\x15fJ\x0crH\xf2\xe6\x1e-\xaa\xba!T3\x9aH#\xf4rd\xd8\xf0\x7f\xf0\x9e\x14\xac\xaa2\xbdo9l=\xc1\x82\xa6\xd4\x97\xbf|\x02\x99\x85\xf5_\xd5\x90\x17\x84\x9b\xa2a\xd2\x80\x86\xc9e \xf0\xb0\x0b0\xcfYA\x01\xd2\x05\xc5\xc4 E1[?\xa1\xc0\xf8\xe5\x0b\xd0\x05\x870\xba\x0c\x02\x85\xb0|\xd4\xa6{\"=jy\xe3\xe4\xd8=\x0e,\xa86\x8327\xc7h,\xac7\x96\xc9\x0e\xf9\xf9\xdb\xbe1\xcc\xe5\xec\x0093\xd6\x99.\xf7I]\xc0\xee\xae\x87#\xe7\x07\xea\x86l\xc77x\xc9'\xfe`/\xa0\xb8\x90\xbd}\x9a\x0b\xe1<\x86\xee\xaf\xa9\x8f#\xbd\xff8\xba\xdd\xed\xdeT\xc1\xdeP\x928I\xa7\x8c\x16j&\xf3(\xe3\xa5h/\xccP\x1b\xc0yI_(\xbaU)^M\x0d\x84?ARZ\x06\x0e\xf6\xf8\xde\x92\xc8P\xc0\xcbC\xd8\xdbE\xd5\xc1^\xa9[(`\x08\x1bJ\x9a\x15h\xad<\x15\xd2\xc5`\xf7)y\xdd\xbao\xde\xc2b\x98\xc7\x91`\xa1${si\xb0\xe3k8\x04u\x0d]\xe9V\xeaurB\xfbR\xaf\x81q\x0e\xcb \x80\xf5\xb2 \x86,\xa8+k\xec\xdb\x89\x85\x90\xeae\xde\xc3M\x97[\x18a\xf3\xf7\x18\xaa\x8b\x05|\xdfD\x8dJ\x0fdf,\xf2\x84\xe24\xa15\xe9\xd3\x0c\xe7\xa4\xd4Ex\xb5\x8c8\xa8$\xd2yO\x1a\xf7\xaam~X\x0f\xfe\x9e\xe8w\x01\xc2\x8eK\xf4\x94\x04\xbc\xea\xec\xbe\x08\xb5\xfb\xecI a\x8c>\x83j5\xcff!4\x82\xbe\x93\xbc\xa2\xf7\xe3\xcaJ\xd3\xb2eA&1\xd2a\xe7\xb3\xde\xd5]\xc1\xde\x08u\x12\xcd\xf8b6\x9a\"\xe8\xe5\xac\xf0\xc5\x0f\x0cb\xdd\xe6\xdec\x8e^\x05\x87\xc4\xf5\x9b\xc7yo*\xe6\xa5R \x0e!\xe2EJmm\x16\xba\xc1\xa0\x00\xaam\xfc\x01n\xf2G\xfa\xc6\xff\xef\xbe\xd8\xf8\xfa\xbeG\x94\xc4\xa8\x0b\xc5\xfc\x03\x9b\xac\xb3<\xc6$\x86\xebP\xf8r\xf1\xf7mWB\xb8w\x8d\x8dk\xedX\xc5\x95H\xaabs\xab\x9e\xa7|(\x84s\xb8f\x1c%\xe84z\xda\xce\xd2u\x82~\xbcY\x9a\x16\x8e\x9c\x98\xe6~\xc6I\xce\xa3\xfc\xa3BhmB\xc0\xec`\xf3q\x15\xc4\xb0\x99{\x16&B$fuq\x8e\x01\xcb{ \x94\xfe&u\xec\xc5c\x90\xfc\x1a\x14\xf4}\xe4\xc0\x02\x02\xd9\xd4\xf3\x95\xcc\\V^\x94\xb9\xc6\xa7\xae\xdbb\xdf\xb4u\xd5\x9f\x08\x15\xaar\xd4\xeeyjg|\xd4qV\xe9(\xb9l\x99\x18\xb9\xdb\xaa\xe4w_\xeb\xb2~3\xef^\xa2E\xa1\x19(;\"yH\xc3\x12\x91\x92\xbdL\xf9\xa9l\x9cD\x96,\xe1K\x89\xb9 \x12\xf9\x13\x0fl.\x89\xc8\xdfe.fyh\xf0wE\xc6\x98\xe5\xd8EN\x14\xcd\xb5Y]B\xf0q\xdbh{\xa3\xe8!w)l\xb1:\xc6\xd0\xa8d \xcb7Q\x08\xef\x83\xc7\xa6\xbeD\x08\xefOLY_\xba8\x0e\x1e\x93.\x8e\xcf\x06OZ%\xac\x86k\x04\xce\x06Q\x97\xc0\xbc\x81]G\x19\x17\xf2\xf7\x1ce\\\xc8\xdfw\x94q\xf1\xfe\xc0Q\xb6\x82Cx\x0c\xea:\x9cH\xa2<\x05y\xfd\xbd&iV9\xd9\"\xe4\xb4w\xde\xc8D\xdf\x84\xb0\x0c1\xd1\x1bnKL\xea\x96\xfa\xd7A\x08W\x98kv\x8d\xd9\xe4\xf6\x82\x10\xc6\xfcL\xf1\xef*6\xfbV\x90\x99S\xf4\x05?\x82)\xefo\xccE\xa4\\\xfd\xeaW\x06R\xcfa\x0c/\xe1\xf69\xdc\xba\xb6*\xdf\xa6\xfe\nc_p\xa2,\xa3\xe4/\xe1\x10\xae\xfc\x1b8\x84\xbb\xd1\xede\x08\xb7!\xf0\xc1\x99Z>\xb3\xa1$\x80\xd3\xd1-\xe7\xf5\x974\x11\xe1OI\xc5\x96A\xb7TA\xa0\x18\x9a\xbdf\xbf\x17\xd0\xcfjw\xff\xa0\x9a{\xdc\xb9\xb9\x9b\x0e\xad\x1dtn\xed\xb6Ck\xbb\xed\xad\x9d\ny\xe5\xc6\xbd$\xda\x891i\xe4\x7f\x14\n\xc3\x11\x17K\x86\x80\xd9\xf5&p\x04\x13\x18\xc2i\xad\xba\xe9\xeax/\xcd\xa9\x14\xdb\xc4a^j$\x8a\x10\xbc*\xd3\xb7g\xfa^H\xd3z\x9d\x0d\xe3T\x13Sv\xa5Y\xfcW\x95\xde\x1d\xcf\xdf\xf2\xe5\xf1\x04\xed\xca\xa4-\xda\x0fQ\x1eO\x8e\xd7\xc5\x9c%E\\\xa6bpV\xff1\xcd\x96\xef\xa3,Z\xe6F\xad\xd5jA~\xfe\xbeJ V\xf4V\x19;V\x05\xaf\x97\"!1\x16\x9c\x9c\xbd\xfb\xf1\xf5\xef?~8\x1d\x1f\x7f\xbc\xf8 _\xfd\xf1\xf8\xcd\xebW\xc7\x17\xa7\xf8\x83\xbf=\xfb\xf0\xfa\xff\x7f:>\xe3\x7f\xee\xe2\xcb\xf7\xb2\xbaU\xf0\xe6\xec\xf7g\x1f/\xea\x1f\xe2\xaf\xf3\x9f\xce~\xc6O\xc6\xef\xcf\xde\x7f|\x0f\x87\x8a(|W\x81T\x86\xcf\xf5\x13\x7f\xff\xb1yE\x9f\xca\x92\xdd=\xea\xf2\x1e\xbf\x19\x04\xb5C*\x9f\xa7\xb7\xaf\xf8\xa2\xc6\x1c4\x9d|\x9e\xecm_`\xea\xf9 A\xa1\xa3\xbbE\x1aM\x87\xcdbG\xb9\x16\xdf\xd2;A\xfe\xbb\xf5\xbeH\xaf\xd3u'V\xdf\xd5\xf5\xea\xbe]\x97\x13?\xe3\x7f\xed~\xcb\x18\xa6\xf7\x1d\xc3\x04\xa3=\xaf\x05\xe2\x7f\xcb\x08\xe6\xf7\x19A\x1d\xb1#\x85\xbe\xfdg&\xfe\xaee\xd1\x9ee\x96\x92\x0bV\xa7OZ\x9e\x10nEJn\x13&\x1e\x15\xf5\x92\x8a\x1c{zJ\xacv\xcf\xa26\x89\x89c'{|\xab\x8dW\xe9j\xbd\xf2\xec+\x8c:%\xf0J\xcc0\xaa\xae\xea\xf4\xc3\x13\xc8kT\x9ab\xcaK\x17\xf9\xf1V\x19\x1b\x97\xed\x8fSD=/\xa4\x89\x98gU4\xa0?\x17}i\xc4\xd0S\x17\x97\xd8\xa6E8\xbd\x12\xe1p\x10^\x8d\x1a9\xe8o+NV\x9c\x1c\xc5\x95\x94\xcay\xdcp\xc7X\xb3!\xe2m\xd1cY\xd6XKx\xd2\xf3\xc6\xe8\xf2H\xc4,K?\xb1\x84\xae ,\xa8\xa5[#]e!\xf2RM\xe6l\x19\xd15&\"\xc2E\xb4t\xf8\xfb\x8b\x9b\xb1kV\xf8\xdel\x91\xdeR\xe1\x82d\xc4\xf4uO\xe2x/\xbf\x8d\xae\xafY\xf6\xf1\xf5\x076\xc5\xb8\xcf\x822\x85\xe0E\xe51+t\x063\xcep\x88\x1c;\xbd\x84\xdd\xf2e;\xcd\xcc\xa4\xfe\xea\xe1\x8d\xbc\x9e\x92G\x04\x7f\xf2t\x9dM\xd8P\xe5\x90\xa7\xe1\xc1n\xd8b\x08\xdem\x94%qr\xed\xa8%%\xc1!x\n\x8f\xc4\x91\xbf\x8c\xee\xe0\x8a\xc1\x1a\xddgCXEy\xce\xa6\x90\xa3y\xc5m\x94\x83\x88\x0e\x86J\x8e\x9ce7,\x83\xf7F\x95\xe4\xdf\n\x89ml*\xc2|a\x1eRQ\x9b\xb0C\x0cB\x88z\x18J\x0c\xed+~M\x10a\xafm\x00\xf2\xfb!\xc4j\xdd\x03?\xa2<\x821\x13\x97qH5\x0c\xdf\no\xa8\x1e\xdc C\x88\x88.\\$U\xa7\n\x14\xaf\xf6\xeb\x92\x04\xd6\xb8\x11c\x11X\xc3\xb9\x11\x059(\x13\xab\x91u\xd62\x84\x87\x98\xa0\x9b$Tu.\xac\x8bt\xf5L\x84zu\x11\xb3\xa4x\xedhk\xa6\xd59g\x93\x8c92\x9b\xaf\x9c&\xba\xfc\xb9\xce\xa2\xa4\x18\x8b\xf3\xdfS\x03s`\x1e\x7f\xf2I\xca\xabrp\xa6+\x96K\xfbF |\x16\x01\xac+A\xf5\xa0\xc7\x9e\xa3l.}\x15\xcd\xf7JKy\xc5\xa5 A\xc0\x16p\x04\xf3^\x9dL\x1c\x82\x87\xf2\x06\x9a_\xf2\x1d\x92\xf7\xae\x8a4\n\xfc\xa8\xcc\xf8\xba\xc6\xbbM^\x96V\xbbgEy\x9d\xf3G-:\x89\xfc\xae\x8f\x14 \x87\xb0&\xe9\x8a\xcc\xc1[\xce\xc2\x9f\xa0\x06`*\x97s\x1cs\x08M\x82\x10f\xf5\xf79\xae3\xdf<\xe8\xba\xd5y\xf2\x93r\xf2\xb3\x00\xd3\xec\x99\xf2\x9b\x83&\\\xa5\xd3\xbb\xa1ji\x1d/\xa6\\8{\x15\x15Q\xe0\xaf\x1c\x8a\xcdu\xb6\x18\x8a\xe0\xce\xbe\x87T\xe3c\xb60Y\x0e\xf5\x08\xb8\xc6\x0eD`\xd1\x94e9\xc9\x96\xf2\x07AH\xb2\xcdPR3\xe2N\xdcI\xafB\xb7\xb0\xf9[\"U\xa9\xac\xc1w\xdf\xb7\x10\xb3f\xe2\xb2\xeeH\\l\x93b\xfd\xa9a\xe7\xb0\xcb\xce\xdc\x84\x8a\xd0\xc1\x00\xd4S#lr\xfbL26eI\x11G\x8b\xbc\x9d\xc4\xa5m\xb4\xcdI\xa3\x1eb{M\xee\xb3e6\xd9{r\x83\xb4\xec=\"r~\xc7\x0d\xe4\xd6\xe9\xb4\xdb\x00\xb98\xf3D\xba:\n\xc6\xf6c\xb6hV\n;m\x8f\xb3\xb2\x8fV!\xa1h\xe5\x1b\x8a\x96\xadVt\xd8j\xc57o\xb5\x1a\xbaG\xfa\xbe\x1bO8\xc7\xefF\xf7 f\x08(z\x13g\xd81\xac\xa5\x0e\xa6!8`\xa1\xd5\x12\xc7\xd4\x10\xd6\xee\x9aj\x11\xc7\xeb,\x1e\x12V\x04\xd0\xb8\xc3\xb2\x07\xd8af\xd2U\xf5\xb4\xef\xb0t\x93\x1df'\x9c\xbe\xd7\x0e\xa2\x95\xa8\xff\xdcJ\xb5\xe7a\xb6\xd2o\xe6\xd4\xfa\xbbm\xe3\xbf\xff\xe6\xbc\xff\xf1\xb7\xd9\xe6\xfc\xa5\x8e\xbf\xeaZ\xe4\xc1x\xc7\x99C\x13%\x90\xfe\x9a\x152\xeb\x1f]+\xef\xc6\x7f.:i\xcf\x84\x824\x8d\xf2\xbds\x0c\xae\x9e\xbaR\x15 \xbdh\xbeb\x93\x96\x8a\xabrx-\x15\xa7Ho8\xe68\x96\x0e\xcbQ6\xa0+\xdc\x94W2(}\xcd\xe1\x08\xfe\xf6\x15\x9cR\xc6\x12\xdb\x93\x08AW\xb9\xae\xb7\xb8T-.\xe9\xeaw-\xec\xf9\x95\xd05dD\xa4 \xfe\x8c[4\x97\xb7p\x08\xfeJ\xc3\x07\x1f\xad\xe2\xff\xf65\xe8E\xd3)\xde\x11E\x8b\xff\xe0\xf0\x11\xd6\xfa\x82-\xa3\xdb:%\xae\xaf\xf4\xb2Y/\xce\xcf\x8e\xcf\xf7\xfc\x80\xcb\xb0\xfd\x10\xa2J\xa0\xbe\na\xd2\x13\xb1\xf7\xd9\xf4\x1cul\xbe\xc8\xac\x0cC\xa2\xee\x8c\xcfXV\x08\xeb^\xe2\xbaU\xd1-\x1c\xd5\"\xf6\x89\xa6\xb2\xaa\xa9\xdb@\\\xa6\x9f\xca\xb4\xf4\x87`\x08\xfa\x7f\xfb\x1a\x82,\x0c\xe1\x96\xb2\xe3\xe3[\xee3\x1c\xc2i\xe9\xd1\xe0;\x88\xc89\xd1\xbc\x93\xa8\xf2\xf3|\x85a\xcc+\xd9\xf2\xd1_\xf24 \xa1`\x9f\x8bG\xabE\x14'!\xfc\xee\xd1\xef\x1a\xa8\xbcw\"\x82[\xee\\\xdc\xad\x98g4\xf6y\xe7\xf6\xf6vg\x96f\xcb\x9du\xb6` ?\n\xa6\xb6b\x13\x04\xb5\xba\xa6\\\xb3z3VL\xe6\x8eY }\xfd\xec\xd8'\x18\xd6i\x08\xde*\xcd\xcd\xdb\x0c\xf5\x94d\xf5\x9c.\x97\x12\xfd\x8dc_\xe0i\xe18\xf9e\x9c\x1bt\xf3\xe2`N\xb3!\xac\xfd\xa0g\xbfw}\x9f\xaf\xd2$gD\x03V\x81\xd5\xc0\xd7\xa0\xc7\xf92\xbf\x99[\x02\x8d+\xd3,KYo\xcaO<\xf7\x92#\xf5\x97.\x91B\x1b\xfd\xe5\x0bx\xaes\x0d\xd4\x15\x88\xfc\x02;9\xd5>\xa3\xed X/\xfd\x84\x0e\xcc_\xbe@\x06G\xb0hWw\x83\xa6\xf2v\xd0Z\xe8\xa8\xd2\x86\x8e\xeaqhP\x7f\x13\x16\x85\xa0T\xe0yG\x158\x94\x8c\xc1\xd8=\x00\xa9\n\xb7\xf9zP\xdd\xfd\x03\x00\x8f\xf5\xf2\"*\xd6\xf9\x05\xfb\xec\x9a\x08\x85\xe6\x98\xaai\x03<\xaf\xacQY\xa0l\xfch\x04D\xcb\xc5r\xb7\x89\x9b]\xf5K\xec\x90\x06\xae\xf9\xa6\x0c\x00P\xfb\xc4m\xf2C\xe7\xa6\xd2\x1f%\xdbh!M*\x17\xad#}\x03\x8bL\xa4\xcd\xe6E\x99\xdc\xb9\xc2sp\xfb\x10\xbc\x10\x98H\x16%\xc2\x04\xe0\x0ft\xee\xc5\xbf\xc6S\x96O\xb2x\x85b\x9e\xfe\x91\xf6\xbe\xf6\xa9\xfeA\x93m\x92\x96k\xcb\xf6\x0e\x02\xa0|\x86\x00\xfd\xec\x7f\xf3\x18\xbd\x01\x1a\xd7^\xfd\xf6l\xab\x10\xad\xfe\x14-\x17\x82\x81s\x99\x10\x95\x19\xa7\xc8\xe8\xbb\x98k*\x15!U\xeb&\x12Y\xb3\x89\x84\x91\xbb\xb6v\xb7o\x0d\xac\xd1\xd8\x94\xdedR\xea\x89\xab\x0bk\x0c\x87\x1cM-g\xea\xc6\xc4p\xb2\x19\x91\x0fT\x13X8\xa2^\xcc\xb3\xf46\xe1\xa8\xaa\xd3\x9f 4q\xfe\xb7\xb7\xf4\x8b4\x9a2a\xc8vq\xf6\xfb\xdf\xbf9\x1d\x0b\xeb\x8bs|\xf5\xf1\xfd\xab\xe3\x0b\xfdU3^\x98\x16\xc5\xbf\x14Z\xacUh\x86Flh\xb1=\"\xb4\x11\xa5\xed\x91q\xd2s\x0e\x9e\xd9 *PrH\x16\xe9\xf5\xf5\xe2\x9b\xcc\xd1\x08\xe5\xe5}\xac\xa1\x88e\x93\x064\xf9X@\x8ep\xc9&\x96\xbf\xfcH\xcc\xcc\xd3W\xa0D\x9br\xb2m\xba\x86\x1a\xfd\xbf\x07\xf6\x97\xafK;\xadL}D\x07AG\x03\xfd<\xc3\x8bmi\xae\xcf\x92\x9b\x9aA\x7f!\xcd\x17\x95\xc9?\x92\x1b\xe4e\x95}?\xe7\xbcr\xcd\xe0\x7f\x95\xe6\xc20[\xfdz\x1bq\xc1M\xf5%\xed\xb7e1\x9e\x9e\xd6Z\x90j\xe3\xf1U:\xbd\x1b#\xf6y\xb6,e5&\xb3T\x8d/\xfe\xf4\x9enN2Vx\xbfk4\x18\xd5\x1b<\x7f\x7f\xf6\xee\xfc\xb4\xa9E\xb1\xd3\x9b\x9a\\\xd7\xe1\xc5\xc14\xfe\xe3\xf1\x87\xd7\xc7?\xbc9%\xe6,\xa06\xbe\x91\x08/\xa7\x8d-\xde\xeb\xd8\xbf\xd1\x02\x95R1\xc2\x12\x7f\xb7O\xba\xc2\x0e\x1e\x9b\xf1\xad\x84/\xecc\xb3\xbap\x85}b\xbe\x16\xee$\xfb\x8f\xcd\xf0\xa8\x0b\xe19kjK&b,\xfbf\xf5\x99\x18\xcc\xb3\xc0\xf7\xe2\x82e\x11Fv\xaaWYq\xfe\xdf\x1f]b,\x14\x8c\x9c\x91p\x8e\x1a\xe2\x04\xe4K\xdf\xf4ui\x94\xd2@Sl\xcc\xe3\xbc\xbe-*\xc8:\xdd}Q\xfa\x9a\x87\xca\xd3\xd5l>\xf7\x13\xacdFQ\xe2+u\x17\xc2U\x08c\xe1\xea\xda\xae\xe0\xc50\x10\x98 \x0b\xf3R\x9c\x94\x9e\x8e'V~Z\xf5tr;\x15148\xe4\x1a\xf2\xad\x89J\x88\x9fM\xd5\x80\x96{\x1b\xebk\xdf$\xec\x16\x12\xe9\xa7\xee\xc8\xe7\xa6\x9eMT\xa9\x9b\x8c\xa8\xfbH\xec\xbe\x08\xf3\x13\xf4P\xc4\x10\xb5\xaf\x15B\xdb\x95>K\x07 \x0e[8<\xa4n\xe3\xce\x85\xd8k\xbd?\x11\xdc\x02\x1d#\x8e?\x9f\xe0\x10NF3\xcc\xfas2\xf2\xfe\xfd\xdf\xcb\x8d\x85\xafn8>\x9d\x8cn.\xed/\x8f\xe1\x10>\xa1\xc3\xb4\x7fC\xdc|\x9d\xc1!\xdc\xc0\x11|\x86#\xb8\xf5=\x96\x14Y\xccr/\x80!\x1c\x97~\xd9\xf6g\xe8\xd4\x85\xb1&\x84~\x1f\xfb\xef\xc9\xafyoF\x82@\x8e\xf5\xefQ\x1f?\x86C\x98\xf8\xefeT6v\x0b,\x08\x02\x8c\xe5i\x86\xbc\xe2\xd5\xc7\x98\xb3\x13?\\\xf8\xe3\x10N\xe55\xb7\xb8\x93S\xa8\xa0\xdf1\x8c%\x94\"^}\x16\xc24\x08B\xf8\xcc[\xc0\xbc_\xe5\x02\xf1\x1e?\x89X \xbc\xf5s\x19i\xf4\xb8#\x95\xf9T\x05c0\xb4i8\xba\xef\xbf\x87\xadk\x0c>\x8f[}\xeb\\,\x90\x1a\xda \x0e\xed8\x08a=*\xb8\xa8z\xcc\xff:\xe5\x7fMC |\xa49\xfc\xee\x9c\xf6ObNC\\D\xbej\xb7\xbe\x9a\xa6\xe3\xaeS\xc4Y^V\xd5\x91n8*\xcbU\x1d\xc2\x19\xb1U\xe0\x9a\xdeV(\xd8_I\x1f}\xfc\xff\x84O=\xe6S\xbf\n\xe1ntuI\\\xa8\xa2\x03x\xea\xa7\xbd\xf7\xb0\x0di\xefG\xf8\x1d\x08o\xff\xf3\x00\xe9\xef\x1d\x1d\x80e\xc3(\xf7\xfa)\xb0\x95\xf8\xfb\xfb\xa8\xd5\xddJ\xfc\xc7\x83\xc0\x9dQP\xf6\xf5\x04\xb6\x0e\x1d\x829?\x80\x0f\x02\x99\x9f>\x04/\xb2ds\x10\xc9w\x86\xedDL\xf5f\x83\xdc\xc0\xb6^\xe5\\!\xefg:\x07\xdaxLG\xc9|B\xe5\x85\xe1l\xc1^\xe0[9cd\xb0\x8d\x83A\xe0{\xafO\xc7\xef?\x9c]\x9cy\xf7\x0e\xb0\x11\"g\x92\x92\x894\x84\xc2\xd2z\xbdp\xc5M\xc3P\x82\xeb\x00\x12\x0ci\x89z{\x7f\x8d\xb0\xc0\xa8\x902\xc4/\xf1\xe1\xf32 \x0e\xbc\x84\xfcy \xbf\xe3G\xc0(\xdf\xde\xbe\x14f2\xff\x1d\xfb\x0bl\xed\xcb\x97\xaa5\x1a=\xcd\xa8\xe2\x9d\x17hw\x10\xf4T\nb\x1a\xa4\x99\xb8\x8fP\x95d\xd0\xdd\xcdzq\xa1\x01u\x0bb/\xb5\x8d\x0e&\x1d\xa7GN\x06\xd3\xac\x07\x8btj\xe4$\x8a\x08\xcdy\x8ca\xe8F\xf1%\x0c\xe9\x13\xc1\x0en\xaf\x07 \xad\x97\x1e\x19\x91\xef\xab\xc3hX\xffL\x86\x88:\x82\x08\x86T\xe4\xf8\xce\xd0\xdf\xdb#\xa0\x9f\x8d\xbc\xf1x\x92fl\xe7/\xf98\x9fG\x19\x9b\x8e\xc7\xe2\xa8\xf7]e\x87\xf0\xb7\xaf\xad\x1b\xcf\x01\xd2t$r8\xfa\xa9\xd0\x9c\xfe\xedk\xd02\x1f\x17=\xbd\x9fF\x91%\xeb%\xcb\xb8\xf04\x84-\x7f\x00\xdf\x03E\x01\x94\xf7\xb4\xaa\xb7\xeb\xa8w\x9b\xc5\x85\xaa\xb3\xef\xa8\xa3\x14#\xb5\x82o\xba\xd8\xa9Z.\xb7\xef\xfe\xe3\xc0\xdf\xd2\xb5\xd4\xfc\xddA\xe0\xcbh\xbf\xe0\x89?\xbc\xa6$\x1a\xa8g\x1e\x17p\x08\xd2\xa2\xaeT\xca\x8f\xe3\xfa\xcdG\xe8>U\xf8\x98\x98L}/\xda\xb3!Rj\xe0\xc71I\xc5\x12xyXQ\xc6#b\x15%L]<\xe34M\x98\x9d\xe0\x15\x86\x18\xcc\x0d2\x91\x7f\xa0\x9a\xdb\xf6a\x19V\x8f:Feg\x04\xaf,\xfb\x19\xd4\xfb\xd1\x10z\xc3cr0\xa0\x03R=\xde\xbb\xefv++4\x05\xd3\x8fC\x88\xc4y(\x17>\xf5\x0bS&V\x0f\x1e\x05~\xe2(\x15A\xa6]\xd1\xd2\xe4\x98rx\x01}\xe1\xd7\xfeR\xb8V28\x02\xcf+\x85\x00\xbeP1\xb6\xa4\x05/\xcc\x83\x00^\xc0\xe3\xc7\xbb\xcf\x0e\x90\xbd\x83\x97\xf0\xf8`o\xf0L4\xb4\x0d\x03\xe9\xa8\xc9iKd}\xcc+\x88\x06\x0e\xf6v\xb1\xf3\x887\xf0do\x7fO\xf6/\xeacG0\xc44H\xe2m\xbe\x88'\xcc\xcfC\xec\x04s\xd5D\xb0#\x9b\xd9\xe6\xe3\xdc\x91\x83z\xf1\x02\x06\xfd\x00\xb6\xe1\xe0\xf1\xe3\xbd\x83_v\xb7\x9b\xfa\x11\xa9\xab1\xb1G\x86-3\xe9\xbeT\xd5\x98\x1a\x9c\xb5\x0c\xf1a\x9e\xc6RWs@\xebj\x06\x96ng\"\xeb\x9b\x83\x94\xca\x9a'\xffT\xd6\x10\xcf?\x955\xfa\xf3Oe\x0d>\xffT\xd6\xfcSY\xf3Oe\xcd/\xa6\xacqjj\x06duw\x18\xd1\x03\xc7\xdd\xc9\xe3\xbe\x83o\xd3\xc2\xb3w\x12DQ\xfcL\xdb$\xa5\x0d\xf9\xca\xb7Q1\xef-\xa3\xcf6\xcf J\xe2\xa4\xc3 \xe9\x18\xb0d\xb4\x19\xf2\\}8\xe2b4l\x83\n\xc2\x19\xfb\xcc\x88\xc9\x0f\x1b\xac\x8f\x9e\xc8#4\xb2\x96\xc4\xb9\x9e1c%_\xbf\xceOK\xb9/,\xd27\xe9$Z0)\x1b\x95)Qpo\x9c\xcd\xbc^\xbeZ\xc4\x85\xef\x85\xde\x86\xec\xfb\xde\xde\xaf\xa2Dq\x04\xad\xdd\xa5\x95i\xc8o\xe5+6A\xfa}\x8f\x15\x95\xea\xb2H.hk\xca\x14\xcd\x13,\xc2CH\xfd\x16Q\x923?\nF\xf1e \x13\xef\xa4z\x92\xf3\xeeh-b\x17\x87J)h\xddR\n^v\xff\x89 \xab\\nL\x07/{`\xf2\xc4\x13Zs\xc2Y\xd9\x89\xca\xcdl\xb3\xb0\x93^\xce\x8a\xd7\xcb%\x9b\xc6Q\xc1l~u\xd2\x9b,X\x949j\xcc\xb1\xc6[a4\x7f2\x8f\x92\x84\x19~\x867X\xe3U\x9c\xaf\xa2bb\x98},m\xe5\xe55\x11\xca\xe7\xae\xed@CA\x1e\x0ea\x9b\x9fe6I\xe6'\xcf\xb5\x99:\x85\xce\x90\x01\x9a\xe1\xc5\xb5\x93\x9b\x95A\xd2x\x85\x10\n\x9f\xf0 \xa8\xbd1\xa6s\xd5\xcad\xdf\xc9\\ \xc2Q\xa5\xdeV5\"<\x96\xa7(D\xae\x1a\x9b\xac\xa5\xfd\x18]\n\xad\xed\xe09D\xd95n\xed\xbcR\xec&\xcf\x03\x95C\xa3,\x1d%\xdb\xdb\xe6I'\xf7\xcf\xf5h{{y\xd9\xb6\xd0\x02(\x7f\xe5\x0c&_\x87\x9b^\x92\xde\xb6\xb6\x86\xb5\x9c\x0d\xcd\xe1H(\x13|$\x93\xec\x16\xe6A\x8f\xd3\xbd\xdd\x10R\xfcc\xd0K\x93*\xb4\xf9\x95\x08T\x1f\xf9qo\x95\xe6\x85\xdc\x85Hk\x06\x18\xcfi\xd2\x8b\xa6\xd3\xd3\x1b\x96\x14o\xe2\xbc` C\x9aN.\x86\xd6\x00r{\x93^\xbc\xe4=\x9e\xa3\x17P\xceG\xd6<\xb5\x89>\x06<@=/\x04\xefw\xf54\x07\xf6\x88|ON\xc8C\xaejK\x8c\x1c]\xa5\xd2$c\xd1\xf4\x0e\x03\xee\x89p|(]/|O\xf8&a\xaa\x15\xf7\x88\xf2^\xb4Z\xb1d\x8a\xf9\xe8}\xed\xab\xa0g\xb7\xdc\x86\xc3y/c\xcb\xf4\x86\x89\xc6\x90g\x0e\xcb}\xea\xf4\x1c\x80\xa6\xcc\x959+.\xe2%K\xd7\x85\x86\x11\x9c\xe9\xa8\xbe\x0f\xeaF\xb3\xd6\xf7V\xa4Y\xa4\xd5C\x98VM\xe0_]\xb9\x15\xf7`\x1b\x9doh:\x8a\xeaF\x9a\x1f\xbf\x19\x02k'\x9b]\x1cv\xdc]\x13\"\x1f\xc8\xae\xdb:n\x81\xde\xa6\xec\xce\x13:D\xff\xe0I{V3G\x9e\x8f\x0cie\xea\x17vj8\x91\x90\xa8-\xb5q\xdc\x9b\xb9\xb2\xfe\xfa\xfd\x10\x92^\xc6\xf2tq\xc3\x02\x8cl\x8f\xa9\xfc\x96\xb1\x96\xdfjC\xc0X\x10\x10\x80yF+\x01\x91\x0dDg\x86v&\x90\xe2\x00\xe9|\xf3\x98\xc7\x8f\xcb\xc9Z\xdaT\x91wF\xb2x[[\x9c\xc9\xf3>\xb0\xeb\xd3\xcf+\xa4\x8di-%\xe6\x86s\xb6\xf8<\x95\xb0\x81\x9c\xf3\xe3{\xe1\x82ZN?\xed\xc9\xab7\x11\x9aA^\\\x89w\x9cK\xb10>\"\xc2\"F\xd2A\xc0O\xf0\x161\xeb\x9d\xa3C(\x17ac\xb7\x05\x00\x88l\x9e\xb6\nA&\x8c\xf1B\x88\xee\x0d\xc4g\xae\xdb\x84Zf\x97Nr\xa9\xa6\xeb\xc9\xea\xc9\xc57\x1a\xd1\xee\x9eC\xa69\xd8Cyc\x12\x15\xbe'\xf8)O0\x1dB\xc2\xab\x875\x9e\xd5\xeez5\xbe\xf4]\xb4d\xbf\x8e\x9c\xbdk\"\xa2\xdc\x934~Z\xe6\x0fR\x9aylj\xce\x854c\xdd\x9eKaf\xcf\x14Z\x16.@\xbc\x92\x0e\xc8\xba\xe4&\xe0&lS\x8e`\x01- peF$\xcc\x98'\xae\xf9\"\xbf\x90\xda\xb7\xd2\xccL|`\x1eH_\xad\xaedN\xa5\x92\xf4\xa6\xfeV\xd6\x9bii\xfdB`\xa3\xe2\xb2m\xc5\xcc\xe5Jp\xa7\x96\xb1C\x1el;\xa8D\xae\xf8\xc9\xa5\xe0\x8a-~\xa6\x13R\xb9Y\x94\xd2\xdd3\xf1\x1f\xef\x99\x18Ty\xeb\xd4\xfdr\xbat\xd9v\xed\xf4\xec\x80\xde\xa4O\xcc\xf7\xb1c3\x08\xf4\xb6\xac=\xe4\xbd\x93\x95tGS\x94Ey\x1e_;\xd4Q[\xb8\xb5[L\xaa\x944KE\xb4-\x1c\xef9\x92\x9c\xdf-\xaf\xd2\x05\x15[\x06\xb9\xe9\xe8j2e\xb3\xeby\xfc\x97O\x8be\x92\xae\xfe+\xcb\x0b\x8f<)e:\xd1'!dJ\xbf\xe4\x05\xbdY\x9a\x9dF\xad\xd1\x1a\nq\x86\x18\x0e\xadA(,\xc4r\xe1l\x1b\xf0\x0e\xca\xf3I\xdc\x95\x89\xa2\"\x08d\x98L\x0f\x93\xeeVn\x16_\xeb\xcc~\x9b\xd7\\\x84{\x9e\xc3\xdc\x94rC\xa49\x83PFK\x9f\x85\xa8!\x89{\xb3\xe7\x90\xc3KX<\xb7\xf9\xd2\xb2\xe5\x95\x90=\xd7\x9ap\xbc\xe0\xc2q(\x14!\\\xfe\xf3\xa7\xe510\xf1\xa7B\x98\xf1\xa7A\x88\x8a\x90y9\x86\xa5H\xc2u\x03/a\xf9<\x00I&\xa6!\xead\xe6\xa3eiQ\x95\x8cV\xa8S\x1f\xad\x1c2\xb8\x96a\x0d\x86\xdd\xb2J\xb5\xed\x9eA\x9f\xe6\xd7\x06\xa6nI\xec\x9e\xdd\x03j\xf7\xf8\xbc\xe0\x80s\x8f\xfe`\xf7 \xa8\xd9{<\xc5\xd7\x8f\xf7\x1e\x93)\x1a\xd6\xd4\x98\xa1t\xd7\xcc\xd2U\xae\xb9\xfdV)\xd4\x95_o\xc6f\xb9\xcc\xe2\xc7\x7f\n\xafh\x9c\x19\xea\xef5Jc\xf7\x9d\xff\x1d\xfb^\xd4\xdd\xa8\xd7\x9aof\x9c\x7f`\xd1\xa4\xd0\xf3\x10\xf2\xed\xa2W\xc9e>\xfd6\x9e\xb1\x8c\x85e\xe4\x82wg\x89\xc7\xbc\xbe[\x87e\xca\xf8\xa7\x8f\xbd\xa0>\xbf\x9e\x91\xd3\xbf\xbc\xaf\x0ceD\x05\xa2\xae\xcab\xafR\xb7\x85\xe0\xa9)\xd4u\x06\xfa$gi6a\x1f\xed\x00\x01\xe4j\x19\x1d\xfeX}\xab\x04x\xd6qp,\x04O\xeb\xba>\xbeE-\xab\xf1Z\xcfj\x9c\xd7\xf3#\xb3[X\xd4^\x1a)\x97s.\xd3\xe5z\x03ZkA\xfd\xcb8\x7f\xbf\xce\x98\x85\x15[\xfd&\x95AY\xd3r\xe5\xe2\x8di\xa5\xb9\x86\xa8p_\x82\x92\xf8\xcf\x02\x9b\xbc\x18\x0bc\xf5l\xfe\x90\xae\xafa\x861\x0c\xba\xfe\x07\x91\xcb\x13q\xb5k\x1fjk\x10\xf5+X;nb\xee\xbf\x04\n\xe8z\xc2\xb0\x07n\x9aT'\n^\x84\xef.\xf1\x17\xdf\xb8\xf5_\xbe\x97q\xdc\xed1q\xaf\xe4\xa1\xc9\xf0A\x7f\xd0\xdf\xfb\xc5F\x9a\xf8\x8f\xf7\xefm\x9d\x86\xe2\xd6\xd6`C\xd6\x98\x1eP\xed\x82\xf0\xfc\xf4\xe4\xc3\xe9\xc5\xf8\xd5\xd9\xf8\xdd\xd9\xc5\xf8\xfd\xf1\xf9\xf9\xf8\xe2\xa7\xd7\xe7\xe3\xb3\x0f\xe3?\x9d}\x1c\xff\xfc\xfa\xcd\x9b\xf1\x0f\xa7\xe3\x1f_\x7f8}\xf5\x0d\xees\x0f\xe65O\xc1u\xd7\x12\x0f\xa51\xe0\x01\xed\x92\xf7\xd82\xd0\x92v^\x074\xc3\xbd\xfb\xe4q\xdd^\xf4\xc9\xbe\xfe\xbb\x87)\x13=\x91k\xfe\xbcH3\xe65\x98}\xaa\x05\xed]i\xb3\n\xabV\xd2\xe5U\x9c\xb0\x0fl\xba\x9e\xa0\xd7gkKi\xcd\xdb\xa0j\xe9*N\xa6\"\x8c\xd0 \x1fY\xda\xa9\xb1\xd8\xd1X\xb4Z-\xee\xde\xc6\xd3\xe9\x82\xddF\x9d&\x189Z\x9ap2\x9fwia\xbd\xb1\x1b\x85\xe3 Ps\xe8\xd0g\\\x1bs\xd1\xd3o\xcb\x80\xc9|\xb0V\xf46\x8e\x8aFJO\x92.a\xf4\xb3\xda\xad/\xe7\xb1\x11\xf9\xc4\xb5\x98(38m-\x15\xf1\x16\xff\x88:\x9f0\xa5/\xc5BED*\xe5\xd3\xcf+\x8c\xf9\x00\xc5\x9c\x01K\xe6Q2a\x19\x14)\\1\x88\xca\xe9\xf6\xa8\xe8\x8ajq}\x16\x08C\xd9Z\x0d[+A\x8e\xa9h\x1bS&\xb0\xbf}H72\x99/\xa1g\xc6{j\xfb\xf5\x84pM\xe1\xef\xf1\x9e\xda~\xbd\x92\xa7W\xad\xa0D\x88)\xa9\x8e\x9c\xe1\xda\x8a\x1c(\xe2\xfa[X\xc6\x06&\xb0\xe8F\xe7MVS\x8bNM\xdc\xd0L\x8csAX\xd3\x82,\xd4\xe5]\xebj\x80v}M\xa5O\x95s\x98\xfaA\x08\xb32\x9a\x8dU\x0d\xb4\xa94\xda(\x8a\xd4\xdb\x0d\x15@\xea,\xb6\x06!\xef\xd5\x1e\x91\xfe(\xd9}&\xb23\x9f\xd9W\x14\xe63C\xfd\xc4\x84\xf9I\x08\x03\xda\x8a\x0b\xac]A\xbfu\xad\xe4\xd2\xbd\x92[Y/B;\x02k\xe9d\xf08X\xae\xf3\x82/\x19\xc6\xe2\x05!x\xe5=\xf8\x983\x98\xac\xf3\"]\xc2\xb2\xa4\xe8\xa8e\x88\xf2\xbbd\x02\x91\xf8\x9c\\^#-:\xeb\xa1l`\x0d\xe1\xdf\xca!Dw\x98\xb2}\x1e\xdd0\x88\x12(\x83\x1d\x83\x87jiPvG=\xf8\x89W\xb9K\xd7\xb0\x8c\xf3|\xc5\x16\x0b6\x85\x08PD\x89\x92\xe2\xe8\xdf\x1c\xa3Y\x11\x00P\xa7g\xd9\xfdT\x1a\x804\xce\xcd\x1dFs%E\x1bNSr\x7fA\x9a\xc2~\x85Y\x9cD\x8bEc\x1b\x03\xfb3\x9b|\xe8\xf6\x12\x9c\\\xcd\xc4\xd9 \x93\xa6k\x89\xe1\xb7\xb7]\xc8\x7f#3\xb6\x17\xa3\xc4aD\x92\xb6^\x80\x82\xa6\x92\xfb\xce]m\xe9\x0c\xc8\x15\xf7^\xbf{}Q\xff\x94V\"\xadI\xc3L\xb5hd\xec\xf1|}\x95O\xb2\xf8\x8a\x91\x11\x96\xafKq\x87\n\xf5\"\xe4'\x89$m\x92\x1f\xdc\x9bp\xf2\x93,a\x9f\x8b\x0f]O3\xf5H\x1d\x0f\x05Y\xf58!\xac\x1e*Th})BX\x8f\xd2^\xd4j?sS\xf9)\x11I\xacu+Fz\xb8\xdaJ\xb5C\x1a\x14\xb4 5\x91\x0e\xeb\x8b\xbb\x15\xa3\xe0\x9d^\xc9t\x89\x12\xd8\x8a\xec!\xac\x9d=\x96\xe4\xb6\xddJ\x9f\x95\xf6\xd4\xe2/\x7fn\x9e\xeb\xfaC\x93~@)\xa2\xe1pQ\xa2Ma9\xc3\xeaO\xa3\x0d\x82z\xd6\x89\x06\x7f;l\x90z\xba\x9cQ\xf8&\xe8\x843P\x0d\xcf\xf2&\x01\x81|\xcc\xc2\xc6\xf2\x05\x11)\x87\x0b]\xb4K\xecc\xeb\x0e0&Q\x91\xef\x94!x\xff\xfe\xef\x9c\xb9\xfc\xfc\x88\xff\xac\x07\x93\xff\x06\x89Z\x17\xf1\x1d~i\xd6\x9d\x8d\x14E\x1f\x9bWB\\\x1a(o\xc7\x84\xd8|I\x84\xc2Qfk.\x9f\x87\x9cp\xfa\xad\xd7\x10\x1eh\xa5Mo\xad\x8c\x1f;\xb9a\xb3X\xaf!\x92\xb9\xe2\xb5\x81\xe8\xa6v\xc1\x1c5\xea4\x90{\x89\x91{\x01\xcc\xd7\x8a\x7fm\xa1hS*\xdal^\xbc\xc0\x1b\x93\xc8b\xcbxs\xa8$\xe6\x1cIQ5\xd1\xb7\x9bH\x90\x1d\x17\x8e\x07a\xcd:\xda\xb3mY\xc8\xa3\xca-\xd7%\xba+2\xbe\x91\xf0I\x02^uV\xa1\xf7\x83 \xda\xe3~\xd0\x8bzB\xa3e\x82~cm\xd5\xa6\xf5\x9dkm.u\xc9\xcc0\xf2.\xacP\x97\xc7x_\xa6q9exIq\x19\xa8Y\x83^\xda\x8b/xQ\xc5\x18\x95\x08\xd0|\xda\xd0\xac\x8d\xdd\xf8\x80n\xbc\x18\xf5/I\x04)zBz\xf5k\xb0l\x18AWB\xca\xfc\xa2\x87j\x18\xc9\x80\x87\x15T\x88\x13\xc88\xec\x1fDq\xf8`J\xbc\x10\n\x15\x00\xb9\x8b\xf2S\\\x10\xd5(\xb7&}\xc0\x11xq\x12\x17q\xb4\x107P\n,*\xabr\x91\x82\xae\x9b\x83!\xa6\x1c\xbf\x89\xd3u.\xd3)gl\xc2\xe2\x1b6\x85\xab;]\xffP\x8b\xec\xaakM\xcb\xd1w\x81e\xb5g\x9f8\x9cQ-\xdb{y\xb1i\x1e\x19\xca\x84\x9frG\x1d\xc0#\xd3\x98]\xb8Q\x1cA=b\x02\xe5\x90\x86r\x0d\x1cA^\x1e\x07e\xc5j\xf5)}5GJ\x8a\xba\x13y\x06\n\x97Q \xaf\x1f\xfb5\xcb\x95\x82KXh\xc3kW\x8d\xf4\xaa\x0bL\xee!\xe8y\xc0\x17\xd6\xa3i~A4\xa6\x08z_\x18\x9fp\x1c\xe3@,\xf8\xaf\x9d5\xc7\xaa\x9d>G\x96d\xb3\xadS\xed{\xa7\xbd\x9c\x96\x0f\xa8\x84\x0e\x9e>\xe2\x08\x92\xb6t\x87\xa5G\x1f\xbe\xae\x0f^_\x0cm\x80Ay\xb6%\xfe\x9e2\xf0\xde\xdc\xfc\xb6\xcd\xbcag l\xbf\xe5\xa9\x8b\xb6\xf4}\x18j\xb1\x01\xd2\x92\xb0g\xc1s\xd8\xde\xe64={\x1e@*\xe8y\xe1\xb3Qr\x89\xcaT\x87\x1dh\xba\x19\xd4\xb5\x83\xf1\xc9A\xe0{E\xfaq\xb5b\xd9I\x943\x97\x15'}Hv\x02\x0eqA\xaf\x06\xb0C\xd8\x1c\x8bh\x97\x94\xaf\x7f\x81>_\"%\xc6!\xec\x14\xf0\x12R \xcb\x14\xb6\xd1h\x0b]\x81\x12Y\x90r|\x0c\xca\x8f\x12\xd8>\x844\x10\xe0\xe6\x1f'\xf2\xe3\x04v\xf8\xef\x97/1v7\xff\xe3\xd0\xcczU.h\\.U\x8aK\x95\xc1\x0bH\x9f\x07\x10\x8f2\xb4\xa5\x19e|$\xf4a\x17\xb7\xac\x92\xb9D|.\xc2\xc2\xd5\xf7F\x7f\xfe\xf3z\xb7\xdf\x9f\xfe\xf9\xcf\xeb\xe9\xd3~\x7f\x87\xff?\x9b\xcd\xfe\xfc\xe7u\x7fO\xfc\xec\xef\x1d\xf0\x9f3\xb6\x8b?glw\x86\xdfL\xf1\xe7n\x7f&J\xfbL\xfc7\xbb\xdc\xdc`W\xce#\xe9\x15,/\xdaM\xcf\xbabG\x08\x19\x85 \xa9\x03A\xe2\x86\xbdD\xac\x1a\xdee\xc6\x12\x03\xf8\nmo\xa7\x97\xb8v)\xbc\x80\xf8y h\x9e\xcfw\xd7(\xbdD\x0f0\xc76\xdb\x90\xb8U\xdbl\xf0\x9420\xae\x84\xf1J\xcdA\xc6\xd7\x8fI\"\xe3\xd6\xb3\xa0\xe1\x9a4\x04)\x9c\xf6\"\x05\xad\"H\x89[\x83\xa4M\x84US-\x99,ZQ-v\xde\x11(\xdeLXldhx5\xea\x13\xa6\xcf\xa0\xd6[\x04*\xb7\xc5{<\x0f\xb9\xec\xe5\xa7\xd5A\x17c\x1eHs\" \xc7)r`\xd7\x07`\xd7,q]e\x00\x88{9o\x14/\xb4\xbe|A'\xc1\xdaG_i\x94)\xbfO\xd8\xad\x1f\xf7N\xf0\x17\x97\xe38\x0bo\xe0\x13\x7fT\x15\xcc\x8e\xa0\xef\x9ax3\x94\xb3ng\x05\xfbd\x19\xf5\xc6\xba\x04}\x9c\xdf%\x13%,\x9b\x82tM\xd6vUZ\xeb\x95~\xcf\x12\x116\xc0U;\xd7k\xbf\xcf\xd2\xcfw\x97\x8e\xab\xf7\x16\xf9\x18\xad\xff\xdb\xc4\xe1\xcc\xe5F\x81\\\x0c:\x95\xe2_\xeb\xf2\xaf\xb8\xfc\xab\xcd\xc8\x86\xa2\xdd\xb6\xd6\xa1\xc52\xb8y\x92\xa5i\x17\xb5\x01\xdd\xeax\x0d\x11m\xff'\xfe\xb4d\x86jmY\xf8\x8fm\xd2\xecWj\x11\xf4\xd4\x10\x1b\xa2\xfa\xa0\x1f\xf8\x89\x7f\xb0\xff$\xd8\x88{ih\xd0\xdc%b\xf3\xec?i92\xcbKo\x19\xfa\xc8q\x80\nv\x15\xad\x0c\x95.\x06\x8a\x92h\xab\xa2-\xe53\xb4\x95\xfa\x89\xf0kV\xf4\x1c#\x02&h\xae\xaa\xf7\xc7x\x97m\xa7r\xc3\xacim\xdc\xee3\xda0\xe4\xc0\xca2\x14\xa1\xb1n\xed\x15\xa7\x07\xbbm\xd8\xae\xd8\x80<\x84E\x08\x13\x8a\x19@g\x02\xf8\x9e\x0c \xaf1\x8cv\xa9\xc8\xa8Dq\x07x\x1f\xc6\x019E \xfb3@\x1f\xdd\x97\xb0j&%\xc2\x8f\x9a\x9f0\x94nm\xce[\x11\xc5\x9a\xe85\xc7%\xb6\xdb\xbaq\xf08Kq\x87f\xbd\xbf\x96`\xe0\x12\x17?\xb63B\xf4\x04\xc5\xf9\xa0\xbb\xb8\xa0N\"!k!dE\xce\xfb\xdc\xc0\x0bX=w\x1d\xe5\x98\xa7\x96\x8c\xef\x02\xd2)\xba\x18\xdd\x10we\x1c\x00y\x80M\x8c\xf9\ns)\xd9\xbf\n\xe1\x0eC\x1d\x15\x88\xa1\x13\xcc\xca\xe8\x8b8F7\"\x9d\x13\x7fK\xb7\xa6\x99r\x8c]*\x1f^o\x1c`\xea\x9a8Y;\x92\x0c.\x0d\xcb:\xfd\xb9\xcaX\xf4\xc9*\xb1I!:\xa77\x8db\x0b\xa5\xf1V]V\xed\x93\xd8\xbf\xc6j\x9cA\xbd\x13\x9a\x1a\xbe\xfb\x17\xd2\xcdTl\x8bIP\xe1\xd2\xb50\x06p&\xbdl\xea\xb1 \n\xe0\x84\x04\x90\xd0\xf8*\xe2\xa7\xc4\x18+\x86/\xd0\x15\xee\xa3\x85\\\xdar\xe0\x8e\xe1|\xeb\x82\x90\x87\xc8\xa4'<\xcaQCZ\xfe(\xeaN\xe9\xf8\xd7\xbd\x84\x95o\x92\xf35\xc9\x9e\xc4\xac\x9a\x98\xefT\xcc\x97\x84\xa9e>N2\xbf\xf7$\xe8}\x8c\x93\xe2)\x8a\xb1\x0fr^\xee>\xa3B\x80r\xb1\x87\xbe\xc79\xd8\xbf\xaf\xe8)\xe2\xa5~\x93/\xddSz\xac\xbb\xedcr\xeb2b\xa1\xa5q(g\xf8l\x8e0\xf4_\xe6\xc7!$\x1dp\xa4D8x\xfc8\xf03\xc7\xd6M7\xebc\xd0\xa7\xa3RqN\xcd\xbf\n!'&v\x0d\x870\xf2X\x96\xa5\x99\x17\x827Y\x08\x7f5o\xca\xf2\"K\xef0\xb0N\xb4\x16\xef2\x96\xaf\x97\xcc\xbbt\xb9\x08\xdd9\x11&\x06y\x1b\xc3a\x88\xde\xe0ROf\xce\x154\x1aU\xe8F\x86\xb1]\x0f\xbd\xc9\xc5\xed\xd3\xdbt\xca\x9b\xdc\xdab\xda\x0b\x19Z\xd9\xb7\xeb\x99o\xbe|\xc1O3\xb9\x7f\xce\xca\x12\xc7\x1d\xa40r\x98\xc7\xd7\xf3\x9f\xa3\x82eo\xa3\xec\x93\xbd& id\xd5\xeeO\xed\x1f\xac\x89\xd1\x1d\xc1\xe0\x00\x8608\xd8{\xba\xef\x80Bm(\xfc,\xe0S\x12'\xa42\xa5\x10\xb0\x88\xaa\x82(\x90\xd9c\xd6!\xdd\x08\xc6\xfb\x9d-\xd24\xf3\xedr\x15\x96@\x08\x8a \\\xeeo\xca\x84\xed\x18\xe4R\xcb\xd8\x1e\x8b<\xe9\x9c\x8f\xd5_\x9d\xa4k\xf4\xa5W\xf5f\x8b\xf4V\xa4\x1a\xd7j\xb2D\xa4\xc8/\xf3\xb5\xb3d*\xe8W\xed-\x87\xb2\xf8\xb6|\x85.>\xc2\x9d\x05\x7f'\x8cM\x15\x91\xac5(Z\xa3\x8a\xd4\xda\x89 \x8aF\xfbbC\x9cO\xe6l\xba^\xd4G#\xf7\x8f\xf9\x12-\xe9N\x93I*\x87\xca\xacw\\\xae^\x17\xb3\xa7*\xe3|t\x1b\xc5\xc5\xab,\x8a\x13\x0dNr\xaeo\xd3\x8c\xd5\xdb\x9f\xa4S\x96\x99\xe0+{\x13oY\xf5\x8a\xa3\xc4\x1c/\xb2\xe6\x92\x82<\x0bzBE\xf1J\xb4\x15\xd8M\xb3[\x98\xfbU#\x81\xdd\x8fVX\xc3W\x97\xe7\xd7\x95\xdb\xf3\xcb\xa4\x1c[\x88\x8b:e\xb8\xaa8\x08>\xb4+\xd2\x95\x0dG8\xce\x8c\x03\x92\xd7\x17DK\x04\xa9\xa8\xad\xb8\n\xf1 \x14\"4\x03\xcc\xebV4\x06\xdb/w|\x10\xba\xd8f\x89\x1b\xda\x87\xea\xcdaU\x1a`\x14\nW\xdcx\x07 \xc7\xd5m\\\x16B\xeab\xe9%\x17\xc1\x0c\x88\xd8`\xabL\xcd\xe1\x08\xfc\xc8\xd8c\x9d\xf8\x04\xd4\x8d\x8b=\xac\xd6\xc9\xee\xa7\xaa(\xf1\xcc\xd5\x1ah\x9c{Y\x99\xb7\xde\xe4b\"\x94\x01\x8a*!\xd4%\xddRy\xd3\xc2*\xb1\xd06o\xb8N}aX\xb1\x91d'\xf6\xed\n\xa0\xb9xI\xb9\xfa!\x9c\x93\x97\xf7\x1ct\x11\x86.\xf2\x91f#\xbew\x82+B\x81\x9es&\xa2\xe4,zq.\xd8'?\x13\xce\x07\xfa\xb6A\xcd%e\xbb\nztn\xa5*1NKa\xa8W\xf7Mz\x9d\xdcD\x8bx\nI\x9a\xec\x88f\x1f\xc9\xc3a2_'\x9f<39\x9dz\xf0\xb8wLDnk\x02n\x11F\xb0\n!F\xe1\x93\x13p\xbf\xe4bb\xcc\xc7c\x0cY\x1a\x9c\x96\xf1\x97\xfb\x1c\xa3]\xf37?&\x93\xc5qi\x16\xb3\x0bi6\xc7\x1c6\xcdv\xde\xc6\xdc\x16\xbdY\x96.i\xdc\xc0 f\xfc\x94\xd6\x8f<{\xbe\x9aC\x9e\xe0({\xeb$\x9f\xc7\xb3\xc2\x0f \x9a\x15,\x03\x96L\x81\xdd`\xf0\x8f\x00s80\xb48\x10!\xfa\x10X\x02U\xbb\xb4\x8d[F5|z\xf6\xa3h\xd2\"\x0eQyd`nK\x0em\x8c\x0bXn\xda\xdb,\x96\x97{&\xb4\xa5\x8e\xaeJ\xf5\xa5\x8fw\xc0{\xfbT\xed\x9bz\x99\x0ci\x8c\xe9\x9ej\x03\xa2\xb0\xcfT,\xb6\xad\xd5\x16\x93`\xe2$\x84\xd5\xb9 \xdc$r\xc0/L\xe6\xb0b\xba\x98\x93\x8e|\xf5\xcd\xf8\xe3\x0e\x1a\x7f\xab\xd1xj\xc0E\xc9E}\xff=\xd4\xddEp)\n\xc1\x16\x1d\xf1)\x88\xb5\x9eFE\xc4\x97\x1ac s\xa0\xf9}\xb1\xa6\x1d\x89\xa2@\xd2\x92\xa6*\xe4Kx\x1b\x14\xa5\xad\x01\xee\xfb\xef\x914\x06\xa1XT3\x10d\xed\x17\xed\x94q\xa5\x87q\xf2J\xc6\xeb\xdb\x93\x9f\xea\nc\x82\x7fP\x01\xad\xea\xaf+\xce\xcf^bB\n\xae\x8d\xc7\x89\x80\x8e\xee\xfd\xc6\xfe\xf9 \xdf\xee,\x13\x82\x06\xbf^\xc5\x88,\xd5\xdf\xf5\n\xe3u\xa2\xd7)\x7f\x19\xb5\xaa:\xad\x87\x99\x90\x06\x10;\xd6\x8b\x05G\x10+\xccw\xbdq^\xb7K\xc37\"EE\x06\xe4\xf29\xc9AVG\xf4\x04\xcfoC{Th1\xdb|\xa4kxld&7/r\x15eu\x86\x9b\xa1;\xa1 \xfb\xc2\xba\x07U\xac\x9e\xf4\n\xc3\xa0\xa9\xe3*\x1c\x1a\x126;\xfcH\x1d&r\xcf\xb5\x9e\xe4\x97/_\xc2\xa0\xf6k\xb7\xf6k\xbf\xf6\xebi\xfd\xbb\x83\x10\xd8\xf6v`:]\x83\xe0\xb6\x03T>\xbd\xa8q\x17\x0c\xe7\xab\xa0\xa9\xcf\xbc\xb04\x06\xfd\x10\xfa\x1dc\xdb\x9c\xd3PPW*\xed\xc2\x97\xdd;\x97\xf3-e\x05\xc7\xfa\xa9\xef\xf1\xd7\xea\x9d\x17V\x8b\x1eP\xdfH\x9d\x88\xe2\x04\xd2*\xf5\xc6 \xba\xa3\x0d\xe1\xa4f\xe6\x02\x0d\xf3<\xa1\xe7)\x87\x04j\x92\x9e\xc8\xb0\x80\x0c\x87\xfe\xee\xc2N\xea@\xf7\xf3\xc9}\x82\xd4\xf4!\xc8\x82\x9b\x1a\x92~\xa8O\xf2X\x10\xd6\x8e\x13\xbb\xca!\x864\"\x01\x0bXV\x9c\x16\x17\x10\xce\x9c\xab\\\xeaK8x\x8bx\xf2\x89\x1ag\xa7>\xde\xb7\xaf\xb0\xc2v\xa1y\xa3zB|w(\xe6,eZ\x85\x90\xa8\xd9\x96\xe8\x18\x82\xb9d\xdarn6\xa5\x8bo%\x02\x88bS\xdf\xe3\xe3\xa9m\xeb\xe7\xf5AJ\x0b\x01\xa5|\xf2\x83\xe7\x86\xc0\xe3\x1a\xe1\xdb\xb6C\xc88z\x8eDWH\x1d-F\xa9{\xaf\xe3\x98\xdeu\x13I\xfaB\xfbU\xb9\xb0\x08\x07\x16\x0c7D\xe2\x15_$\x91\x93\xa4\x16^\x8a\xb8g\x92%;\xa6\xf4\xa0\xff\xd2\x15:\x99\xd8\x93\xcd\x1a\x02)Mx\xe2\xecd\x9a\x91$\x9f\xef\xc0\xb4\x95\x02\x0d\x01 \xa5\x0dM 1\x8a\x00\x8d\x9er\xfd\xa4r\x832\n(\xa9\x9b\xd0\xfeZ\x9al\x0d\xc3\x0f-\x99\xee\xcb\x17\xa5f\xa8n\xac\xe5\x8c\x87`\x89\xef\xa2\x9d\xb0\xfc$l\xd4\x01\xbd\x16\x97\xc40\x84s\x95q\x81\x13D\xd7<%\x81>T*\xa8@k-p0\xfe\xdf\x7f\xafzq\xb5\x8d|\xb2\x0c\xd0Q\x03\x8d\x13}\xa6\xbe\xc7\xebUJ\x82\x10C|\x18Q\xae\x04\xe4\xaa\x93\xc6\x96\x97q\xfcS\xe5\xf6\x00\x0b\x96\xe7P\xcc\xa3\x04ny\x8de\x94}\xf2\xc4\xb8P\xb9\xaa\xc0\x86\xcd*\xd1\xeeH\xad\x05\xff\x91\xe2\x95\x19\xde!\xa4b\xe1\x91\xbf\x93R\xf94\xc5\x01{A\xa8}_S\xa9HM\x91\x05@J\xa3T\xd38\x9aJ\xb5@or\x10\x1a\x82\xb0X\xc1\x04WP\xae\x8aX\xdaL\x1e\xf1}8*\x05\xbc\xa1<\"\x8f\x1cz-\xfe\x7f?\xd0u\x7f;\xa8\xec$gQ\x02\xd01\xa3\xa4\xdaJ\x9a\xc2C\xe2\x8f\x1a*\xea\xc6\xcbk\x94\xda]\x14?\xb0\xea\xa7\x9b\xa1 \x1ew\"(Z\xc3\xc4\x85\xa6\x80x\x00q\x8e\x81s\xe3\xe5JdH`6\x1d6n b\xcc2\xd2\xca\x8c\x96\x82\xd6\xf7B\xb8#\x8b\xa7Y\x14'^\x083\xb2T\xed\xcf%Y*g\x17\xc2\"\x109S\x8d\x8f\x13N\xaa'\x0deWd\x99\xa467AX\xc6\xbd\xde\x8au-!^\xeb\x8fo\xb3\xb8\xa8]\xbcn\x99/\x91\x08\x96\x9f\xcc\xa88\xb9_\x1b\xd6w\xe2\xbc\x8a\xc6\xb5E\xceP\x18\xeeM;\xc5\xb2\x8e\xeb\x06#\x1a\xef\x8b\x04\xf2\x8c\xab\x8cQ9^\\X\x17\"\xea!|\xeb\xc9X\xc6\x02\xc6\xd5.\xa0A\xac\xb20Pes 24\x00\xd4\xb2!8O\x05\xc4$1\xc1P\xb6\x14*j\xc5Jk\x1c\x8e\xbeBt\x91\xd1@k\xe4\x12\x1d&%qW\xa1\x0ej\x15^\xc2\x80W\xda\x11\xcd\xbe\xf3+\xfa/x\xcc\xad\x95b\xa2f\xd1\"g\x80\xddB\xc6\xf2U\x9a\xe4,\x04ek\x9e\x98\x17\xb0\xb5%n(\xdd\xde\x96\x93\xeb\x8bl\xca\xbc\xbdMw\xe3\xb2\x05\x88\x8aT\x15A\x08W~+5\x13\x08'\x10L\xbc\x17\xe7\x82\xc1\x98\x10\x11!\x9a\x06y\xed\xdcV-\x84\xf9\x8a\xa4 \xee\x8e\xee\x9ai\x93l\xbb\xf5\xb8\xd8\xb4\xdb\xab\xa6n\xab\xc3.\xe9\x89\xbf\xbb\x9d\xfdJ\x9e\x15;\xb1$\xfed7]o\x07\x00\xac`n\xba\xb1\xef*c+\x96L\x15P*/=\xb3D\xe4\x98iP\xa1\xf7\xc6h\xc2\x97\x0b\xe4\x91?F\xc5%\x1cA\xe4\xeb/\x02\xb4\xe3\xab~\xd7-\xb2j\x9f\x1e\xc2( k\xaf.\xb1\x8a\xf0\\J\x1c\x04OCeu`\x8b\x03\xa5\xce\x1f\x88w\x06W \x90^\x9e3|3\xc7%\xa1\x95w{\xc8\x8aU7r\x89\xbc\xcd\xf3\x03\xebR\xdf2\x82\xb1\x18\xf3&\x9d\xd5F*\x03\xf7\xdaWL\xd4\x90Jz\xc1\x1f\xc2\xc9%\xd6b9\xeb\x1c\xbdR\x11\xce\xe3\x9c\xfeh\xe0\xfe\x88U\xcc\xa5,\x87#lIXq(\x89Q\x96\xe1Qi8f\xd8^\x19\xfa)8\x90\xd6\xf0j\x11KvA\x18\x13%R\x92%p\x18\x9d\xfd\x9c\xfcB\xe9\xf0#\x0f\x0b'\xa8S\xa8\xcf\x9c\xde,\x9b\xce\x8an\xa5\x163\xb4\xff\x1cb\x0c\x15\n\xf1\xf6v\x00\xd9(\xbet\xc1\xa0Qak\x19\x0e\x01I\xa6nd\x9c\xc3w~Q\x9d\x9f\x0d:8D\x89H[l\xf9\x99\xca\xd9\x13\x850\x08\x0c@\xec\xa0\xe4cc\x93d~\x14\x08\xe5_\xa3\xfe\xa5\xb6{]\x0b\xdf\xb49S\xeb\xc6\xb5Ib\xcek_Vn\x10\xd2p\x83\xc60A\xd1\x05g\x12\x94\x82\x98\xdb\x00\xadT=(\x02C\xf0l*FRe\xb3\xa2\xdao\xc1\xe5.B=\xe0]Q]\x89\x9c\x11.G|\xe7R\xef\xc5\x85\x88\xa5\xc9\xc9\x1c\x0eM\x99\xa6\xec\xca4}\xcey\xa9<\xd4\x04\x853\xb9\xa6\x9b\x1c\xabM\xeb\x1fM\xcb\x93\x0e\x0e\x0d\xcc\x08\x0dU1\xdav\xb4\x98\x19\xde\xc8@\xfb\x9d\x00]\x9e\xb9\xc6QS\x9d2\xcc`\xf7[1\x15\xa4YJ\xdd\xd0D\x19\x1fY\xe6'\xf5\x1b\x88\xf7\xa4\x01\x12\xe0\xd9*\xd1<\x08(;CC\x0f\xc5\xb9\xdb6@U\xaaV\xbe\x8b\x04\x87\x0dr\xb2B\xc7\xd1\xb0E\x82\xb0\xe3>\xc2\x83\x1b\x99w\x87\x05e\xfd\x1c\xd1\x14s\xf2\xab\x0e\xd3\xbd\xcd\xa2\xd5F\xa7\xbb\xfb8\xef|\xf6g\x8e#\xa2<\x1eR\x8c\xc7\x83\x0c\xa5\x10\xa7[\xc5^NN\xa6\xbe\xc7g\xb3bS\x90\xc2}R\xf7\x97P\xba\xf8f\xc9\x99 \xcb\x87nnP\xf2\xec\xd6\xaf\x0f\\Z3p^c\x16\x9a\xa9\xb6\x8d\xbc\xa5&A\xf2\xd6%,HW4\xfe\xe8\x90P\xc2i\x0d\x14~Z\x9b\xa3\x90SS\x8e.[\x89\xe17R*\x95QS\xafY\xef\xa7B\xa4\xf7\xcd\x0f\xb0\x9e\xb2JQb?\xce/\x0d\x04\xd1U\xba\xf1R\x90\xa4\xb6l\x806\x93\xba\xcf\xd4<\xceG\xe9%\xd4c7kR\x81,\xf4UE\x0d\xa9\xdb\x1c\xee[\xd1K\xab\xcb8\xf3/B%3=\x85F\xc7\xf5\xfe\xca\xe1\xdc\x80\xfa\x1agt]^1\"\x83\x84Hp=\x8a/\xb5\x9d\xde\xbb\x8a\x93\xa9\xa4n\xbc\xa8\xc1#\xa7\xd0\xbd)\xdb!\xa3\xa1\xd0X\xde\x1f\x16\x81\xf2\xfe\xce\x14\xe7Z\x89\x11\xf6Di\xda\xd3\xc5\xddD\x91\x90\x9ao7\xe9z\xc2\x92\xf5\x92e\xbc.\x97\x13lj\xb3\x91k\nEak\x17G\xf6\x1c\xeb\xb3C\xbf\x8f\xf1,K\x97\xfcT\x86Cx\xfb]UV\xcf\xac\x10b\n\x1eG\x82\x05C0\xae\xe5j\xb0\xe3Mti\xa2-\x1b\x90\x88\x99Q\x16\x94\n\x83\x94<\xaa\x1b\xb4,_\xc9Q\xd7?\x97~,\x1d\x0c\x8f\xee}\xd7\x03m~D\xee\xd0\x02\xe23K;M\xbc\xaeZsn:\xf4\xb2\x8e\x84\x9f\xde\x11:\xe1\x94\xd6\x9b\x1b\xf4\x83p\xae\xb1\xb3%\xd3\x93*yA9Y\x08s\x9d{\xba6i\x17\xa7\xd6\xc0\xfcF\x08\xd4?\x96\xaf\xfd\xf2\x04 ;h\xb8\xb7\xe4=\xce\x11\xe7\xcb\xf5 &bv 5(\xf3e\x1dV8(\xbc~E\xd0\x92\xfa,\x87\x9cU\xfbYzd\xb5\x10\x93{\xc3}@\xf3w\x99\x1d~\xc1\xf2\xa1\x996\xb6`\x84u\xf8\x96\xe5\x1d\x90\xdf\x12#\xb0\xca\xcd)\xd4+\x08]Vs\x1b\xc6\xa2\x9aNU\x06\xf9\xe9\x9ca\x87\x0c\xc8\x96\x95\xa1g\xaa\xfbvDd\xafL>\xabG\xcf\xca\xd9B\x04\xb5\xe4\xff\x7f\xf9\x02\xb7q2Mom\xfa\x92\xd2\xe1\xef\x91\x93p93\xd1Y.\xa0\xc4\xb4xZ\xf9N\xf5\xc6h\x89\xfd#\xd2K\x07x\xf0\xcb^\xce\x8a\x8bx\xc9\xd2u\xd1Q\xccI\xd8-\xc4~*N\xb0\xeak\x8c\x87P1@!\xe0\x00d\xa1\xa5\xb7\xc0~_'\x05\xcbn\xa2\xc5=;V\x9f\xd3=\xabR\xa2k}d\xa8\x80\xa9}\xd0*\xffH.\x1f5\xb1\xbe\xd5|\\S\x97fl\x86\xb6\x91\xba\xec=3\xe6k|\x84\xed\xb6\x81\xa4\xb6\xc6\x02\"YX\xe2\x011g\x96d\xe9b\xd1EA\xa4C\xc7g\xbc\xb9\x05\x93?_OQ\xfc\xd0_\xd9\xf8\xc5{['D\x7f\x0f\xd2\x99i\x0e\xc7{\x1b#\x9c\x8f'E|#\xb4\xaf\x91\xfa\xf3[:\xa7/\x08\xe5M\xaaV\xd5\xaeW\xc0\xcbC\x99S\xc9l\x15\x0e\xa1\xda2~+/\xcaz\xe34Q\x93\x17\x97\x12\xe5o\xea\xb6\x87p\xb9\n1\xa4\xd5n\xa0\xf6\xdcr\xc9\xa6\xb1\x08\xce\xd2N\xc2\xea_Ta+*Rh\xd5\xe08X\xb2.za\xb9\xf36\x1c\x82\xf1\x0d9\x08\xbbNm\x18\xf5\xe2\xea|\xe8\x94\xe0lc\xe6\xd9\x11S-Eeb\x9c\xebq\x88\x9a\xf1SY$\xe1\x9d\x82\xe7\xc16\x17\x82q\xbeE\xfa&\xbd\x15 \xc9|\xa7\xfd7\x1a\x11ys\xf6\xd9\xa3\x8d{D9FBj\xa9\xb0\xd3\\#\xca'q\xdcX\xe3*N\xa2\xec\xae\xb9J\x94\xb3\x83\xfd\xe6\x91L\xf2\xdd\xb6\n;-5\x8a\xd9\xe0`\xc1\xda\xea\xec\xb4V\xca\xa2[G9h\x1e\xda\xfd{\xda\\\x95\x1e\xde\xf6\x16\xaf\xefnG6,\x8a\x931\x08\x95B.\xdc \xac\xab'\xb8\"\x81\xed\x0c\xbc\xba\x90\x92S\x11x\xd6r\x11T<\x7f\x1e\x94\x03s\xb6\x0c]p\x17:\xe1\xafz:\x0c\x12\xba\xa0!tBE\xe8\x88\x8e\xd0\x15%\xd5\xa3M\x03k\xb7\xcdd\x11\x15q2h\xed\xbdq\xf7\xaaG\xf5-\xdbl\xeb\xbaq\xbbC'\xd2\x02\x1dh\x9cz\x94\xba\xae\xc1\xe8\xa9mO\x82r\xb1h\x0e\xb2\xa5\x1eN\xb3}I\xb4\xeb\xf4ZD\xa3\xd0R\xd8\xea\x0f\xa5#\xa4n&\x1d\xd1{\xc5\xe5b\xed\x989<\x94\xd1\nE\x120\xdb+\xc4\xfb\x98|J\xd2\xdb\x04\x14\x15\x18\x82\x18\xb6[{\x88V{uJT\x05v(#\xd3Q,W\x07\xb4\xc7F\n\xf6\x99C)/\xdb\xe4\xac\xd3B\x80\x8e\x88\xd1\x08n#\xd7VR\x81\x1d\xcc\xe2\xc5\xe2M\x84z\xba\xf5\xfd{i\xc4j}^\x93\xda\xbcf\xa2\xc7\xbd\x8dzlDX]\x89),\xc0\x0ea\x15\"\xe7\xe4k\x1d\x9b\x92B\xed\x17\xd6[Dy\xf1\x8e\xa1\xa0\xadB#\xf2W\x17i\x81\x92\x92\xfe\xeed\x1e \x9f:\xdd\x1f\xb0\xa6\x0d,\xff,\xcf\xaa\xc8&\xf3\xa5\xa9\xc5\x8bC\x18\xec>QIb\xe0\xe5Kx\x0c\x87\x87p #B\xe3\x9b}\xfef\xb0\x0fG\xb0\xa7^\xed\xf1W{}8\x82}\xf5\xea\x80\xbf\xda\x85#\xd8\x19\xc0\x10vv\x1b\x87\xb4v\x1c\x9fJ\x1bXM\x7f\xa7\x0e\"[\xca\xdf\xc4\x05\x1a-Ov\x9f\xf2\xbd\xec\x0f\x9e\xed\xc2\xf7\x98\x14<\xd0\xac\x99\xeaK\xe1\xfd\xdf\xff\xd7\xff\xe9\xa0\xb2\xe8cTU\x97\x16\x83\x9ak\xd8\xa0\xe9h\xa5\x062p\x0dd\xd08\x10\xa0\x06\xb3k\x0c\x06\x7f\x9b\x1d\xee\xba:\xdc\x95\x1dv&\x9e\x85T\x88>\xa7\x90L\x93$\x12t\xb0\x1f\x1aX\xffB\xf36\xc3x^\xe8\x97YCy\\V}\x1f\xf0\x0f\x03c_\x94\x89\x0d\xeb\xfcVho*\x11\x17\xac\xa9\xa32\xc2\x99\xbe\x9f\xcb\x11\xefh!\xd0\x9a\xf7^N\xaa\x00\xf8z\x95\xd9T8\x8a\x07\xf0\xaf\xb0\xcb7P\xbfI)_\xa5n\xf4K\xf2\xee\xb6#i\x0e\x04\x80\xd7\x91\x93y\x94\x9d\xa4Sv\\\xf8\x9a\x0f\xac\x199Z=\x18b\x9f\x8b\xdd\x8f\x1f\xef>;\x004\xcc\x7fq\x08\x8f\x0f\xf6\x06\xcfj&_\x06.Y\x04m\xdfX\xb8Q_\xa4-\xd6 \xb2{i\xd6\x19Xu\x06\x97!$\x95\xa3\xfa\xce\xe0\xfeF\x1e\x14\xde\x9a3\x19\x103\xd9m\x9f \x1f\xa5c\xe1*4C\xa87\"\xd2\xc2M1\xeb7\xe2G\xda\x81$n?\xa8\x9c\xec\xf5\x8d\xd4r\x11\xe4&\xc7\x0d\xdc\xcb\xb6ksj\x10\xe8\xdb\x01\xc1\xc8\x95h\x84\xcc\x84\xdcbj\xfc\xd66\xdb#\x89T_z\x9b\x1c\xd5\xd6J\xb2\x1a\xd2\xf1\xcc71b\x0fv !\xb0bOY\xa4%j5\x1a\xf1\xa3\xd6\xf47\xed\x87 t\x0c\xbf\x86iI\x0b\xcd\x9a=\x1c\xaa\x91[\xe9\xa8\x11;\xcaA\xf7C\x04\xb0\x81\xa9\xc3\x16lX\xb9\x99\x1d\xc7\xf9\xd0\x0c\x8ci\x03\xf3\xd4\x06\x0b\xada\xf5WQ\x8f\xe7\x06\x87\x10\xd75\xd3\x8a\x91t\x0b\xff\x95\xcdmy\x06\x95\x82\xa1\x01~\\\xb6\xd0t|\xee\xb4\xff\xe3*\xef%\xfab\x96\xac\x99b\xe2\x85\x9c\xe3\xe8\x18t\x03%\xd5Mhs\xbb\xf5\xbd/\xec\x14\xd1\xe5\x9bD\xa3\x04c\x92V\x00\xd71\x89\xf3\xfc\x9c\x10$\x81\xe2/\xeao\xf0:I[\x91:\xd4\xa5\x88\xd0xK\xf5\xc0\xf8\x8f\x1cV\x1d\x9d\xebc\x92RL\xe3]\xc2\x8d\x99\x17\xbd\x81\x01\xae\xec\x93+\x8aAs\x0e\x19\xbc\xe0M(\xd2hW\xba\x91\xd9\x03\"\xbf\x18e\x97\x0e\xfe#E\x0d}\xd9L\x8a\x8e\xbcB_\xaf\xa1@\x8aG_\x08)\xdd\xc8\xce\x0e\x0e\x86\xaf\xde\xce\xae\x10\xb3\x9b\x06\x86\x8c\x956\xb2\xa0\xf3\x18v\x7f\xfd1\xc8\xb60\xf8\xce\xa1\xca\xd2Y\x1f\xd5\x1e=*\xd5y}\xfb\xb8M\x8bQOhly\x9b*\x96\x01\xfb\x8d\xaf\xad\xf3-\xb1\xa9\x8c\x1e\xa0\x01v\xc0O,\xcaMn\x0c\x9a\x05\xef\x0b\xcfijh\xf5|a\xf5\x0d\xa3\xa9\x17\x9a\xa9g};\xbe \x08\xa9C4h\xe4\x85\x1eT@\xa9C\xeb\xde\xc3\xd1\xc4\x98\xfa\xa45 \xc68\xa5\xeeu5\xa3\x9b\x1ei9Nn\xb4\\Pt\xa63LcS\x164\xa9\xd7\x11\x87\x11\x04\xb5\x84*\xf5\xb4 \xb1\x9d\x01\xabfu_Zc\x14Y\x94\xe4\xb34[\ns\x0c\xca3\x06C\x83_\xa8z\x1dl\xa7\xc0d\x9b\x8d^h\xa9*\xe9\x95\xb5\x9a]9*\xb1\x0d\x0f\x9c\xc9\x95[J\xdb\xca\xea\xf2\x983v\x80\xe068\x84\xae\xa2\xc9'\x15\xaaf\xb9^\x14\xf1j\xc1\xa0\x88\x97,w\x86\xbcW\x03\x99\xaf\x93O\xa5\x9bJ9\xba\xea\x8d\xcc\xfaW\x94W\x852ut\x88Y\xf8\xdc\x93M\xbb\xda\xc5\xf3'5Lw\xfc\xd4\x8al\xaeLd\xe1\x05\xa4D\xe0\x8d\xaa+\xdf,\xb6z\xfcZ\x99\x81Ri\x04\x19\x9bj\x88C\x99I\xeakN\xd7\x90`\x14\xf1.\\\xc5\x1c\xf4\x8d5*u3\xafT?/h\xfb%\xc2\x13\x83\xaa\xa6E\xf3h\xcc-RNT3y\xaa\xde\x1d\xea5\xdc\xa9Ff\x8bu>\xd7\x1a\x10\xbf\x0fU\x89\xb2\xbaG\x9b\xedU\xc6J_\xbd\xa8M1J\xf1S\xca\x1d\xa3\x8eg\xe4\xc8\xf4\xd1\x1c\xe9\xbfj\x99\xd3Hnl]\x12\xd7\xfa\xa2p.r-\xc9U\xb5\x7f\x9a\xe7\xb1v\xb1}\xb5\xab\x14\xc2\x88\xd4\xe6\x12j\x99GY\x15\xee\xde\x8a\x14\xa0\x0eL\xeb\xa2\xe3$Z,\xf86\xac\x16y\x9a&\x0cn\xe7,\x81\xdb2\xa9\xd2\xd6!\xf4\xcd\\\x86B\x8bi\x10\xcd\x1au\xdc\xb0\xbb\xbc\x88\x17\x8b\xdaV3\xbb,!C\xb8\x03TB[j\xa5V\x0b\xb5w~,\xd8\x95x\xc3\xe0\xee:\x816']\xa3 \xa5\xdfS\xbd}\xcb\x9d\xac\x1ay}0\xb5\xfd\xd6&)X\x00\xae\xbev\xc4\x98qvk\x8b\xb2t\x97ug\xb3\xa63\x13\x85\x13\xfd\x80\xe1P\xa9\x1dB\xac|\xa3]\xb7\x17!le\x06\"\xd1\xf2Q\xe7#\xc7\xcf\x8c5\xc2\xf3\xe5\x17:q\xbe:Al:\x174\xdf\xaa4\xc2\xb6t;)t\x88\xe25\x82\x02\xb8\x88\"\\cW0\x0c\x93\xc9\xc0\xf4-.\xcb\xd7\x1b\x0dU\x93\x15\x03\\\xf4\xea\xdc\x960!\xb6\xb7A\xdf \x89\x8e\xa9\x1at\xfe\xccd\x14\xed\xd6\x8c-\xd6l\x90Q\xf8\xc2fZ\x10Y\xe1Cn\x12w\x83\xb8\xdc\x8b\xd7\xd6\x98j3\xeb$G_\xcc#\xa9KEiv\x1aM\xe6\xf5\x8aq\x95\xdf~\x92\xb1\x1a.tK\xdf\xab\xf0*\x16D\x93\xa4\xaa\xd2\x8a\xb4\xb4\x1am\x03 \xe7\x069\x8eug\xb4iV\x10M]\x12\x99`\xbe\xc08\x80\xc0F\xc9\xa5U\xf9\xab/\xf3f\xa3\\`\xaeUX\xd34\xc2}\x97\x8b\x84g\x00\x7f\xfb\x86&5\x0c\xd0Sen\x92\xb7\x16\x89\x1d\xb9jq\xfe.z\xe7c\xfa_\xd4b\x14B\x7f\x817w\xdf\x7f/\xd5\x15;\x98\x9b!\xc5\xe8\xd6\xc32\xfc\n^ \xb5\xa7O\xef4\xc7\xba\x0b\xce\xc1\x93\xa7\x81\xcf\x87$\x916\xca\xf3\xf8:\x81!\x16=\xfbV\x9b\xc2\x10\xd2\x10\xb3\xc9\x85\xb0\x0eA\xf5h\xec\xadNv\xbd\xd6\x85\x05\x7f\xb4\xb8 Evg|E{g-B\x90Q\x00I'\xacI\x9a\xcc\xe2\xeb\xb5r\xc3\xea\xd3\xcc\x7f\xe4t\xd2js\xe2\xc2,\xd8C0\xcc\x80\xb5u\x85IT\xda\x8fU\xa7\x93\xb8\xf4Xhw\xb9\x99%Y7\x0f\xdd=\xec\xfa\x90\xab\x91\x88\xd0\x86$\x14\xc3\x8d\x13\xd4\xa35\x0cJ\xa6\xa5.\x0b\x1d!ez\x0d?\x13\xf9\xc1\x05K\x81\x9eZ\xd5*e\xfa\xad\n^\x17\xc9\xd4\xd2\x83\x83 \xc4\x8c\xa8\xa3\xcb\x10\xe2v\xaa\x1aR\x1ap\xce\xf9\xacG\xec\xb2d\xe6\xf9\x8fz\x15${\x05\xf6\xf3\x1c\xd8\xce\xce\xf3@\xb9\xb9z\x91\x07\xdb\xe0oo'A\xa5\x82\xda;0\xe5zM\x8f\xa2\xdc&|o\x96\x88\x9c\xb9XTJ\x1c>o\xb0\x90Q\xeeC\xf0\x02\xd8\xe6\xff\xfcM\xb51K\xa4\xc3\xa68;+\xc7\x81\xe7\xf0\xf5y\x9de\xec\xbcF\x04\xc5G\xf9\xc6\xb1f\xaeD\xf2 \x9eZE`\xa9\x1e\xec\xbd\xc9\x9f\xc8OB3\x01\x95\x03\xfd\x81\xba^\xfe\xfa\xad\xc4I\x88\x1cT&u\x1a\xe9\xeb\x00\xaa\xaa]\xb3\xe2\xec6Q\xd5^\xb1|\x92\xc5\xab\"5\x0c\xa8#\xd7\x07\xef\xa2\xa5\x19\xd3d\xed\xaa{~\xb7\xbcJ\x17y\x87\x93\x89\\cA\x82\xe5\xd1\x9c\xf9\x85\x89\xa7('\xea50\xca@\xe4\xe7\x81bv*\xf1\x9b\xce-G\xae4\x7fpOg\xa1H\xba\x9eQ>\xb6\xfa\xd2\x93M\xa0\xa1\x86\xfd]\x1d\x81\\\xaa\x0e\xcc\xe7\xbe\xfe\x07\x9b\x89n\xe0SJ\xe8\xb4\x9c\xfd]\xbd\x95o\xdc\x15\x8f)\xfe7\xf1\x07\xfb\xe6n\x89iO0\xce\x9e\xde\x17I\xf9\xc1Fd\xc2\xe3\xfb\xa7\xa4v\xa3\xddK\x12\x0c\x19\x92+\\!\xbd#\xc1\x87\xac\xa9\xe5HF\xd9%\xfa8)_\x8a\x08\x05\x12\xf5\x85\xb5$I\x0b\xa0\xf5>\xba1\xfcr\xe8[[R\xdb'B\x10\xd4\xd3\xc8}\xf9\xe2P\xe0![\xefR\x10\xceY\xdbh;\xa1\x05\xcdH\x15!x\xe31\xcb\xdf\xa6\xd35\x9a\x9c\x98K\x89\x8c\x8e.W\x06\"\xde<\xda}v\x81\x88\xbdX9\x17\xae\xdf/\xd6\xd7q\x92\x0f\x1d{\x8be\x99\xab\x08\xb0\xed\xe9z\xc2\xb2|\x08~\x9f\x0b\xbar\xe9\xcd\xe2E\xc1\xb2\xee\xc4\x80\xf5>\xb1\xbbs\xf6_~\xd0c7,\xd3\xc8\xb4\x13\xb4`u_\xb4d\x0bD\xa9mT4d6Q\xb2?z\xb8f\"\x16aw\xb2\xefDg\xd6[\xb2\xec\x9a\xf9N \x19\xc5T\";\xdc\x06X0\xfe\xe1O\x0f\x8d\x08\x9a\x1e\xa3\xf2 N~\x0dtH\xe8pZ\xbf\x06\x805)\xb2.\xc2\xc5B\xe5\xb6k^\x97\x89\xcb\x0f\xf3m%\x94\x0f:\x0b\xe5j2\xa6\\./e\xec\xc9\x95\xaa\x03\xc3{\xfa;\xfb/>\x83\x85uG\xc5\x19\x9b!\x18WS\x0bv\xc3\x16\xc32`|\xadl\xc9\xf2<\xba\xe6Go\xe9\xe6\x8d\xb5\x8c\x1e\xff\xbe\xa2\xb7K\xaf\xd5\xa4\xe1\xb4`\xfb\x97\xfc|\xc5&C(z\x9c\xc98W\xda$\xfc\xf5\x87\x04\xd6\x91\xb28f\xf35\xe8\xc0\xb1\xaaok\xa2\x80\xd8\xa1\xf8b\x15 \xbe\xc4l\xba\xc2G\x87\xf6\xf0\xc9\xae\xa9\xd4\x7fH\xed!Er\x08\xf7\xf8\xff\x15\xf4\x80 \x87\x8e7\xd3\x11\xd2\xe4]q\x8f\xc6\xff\xdc\xab\xfe\xdc\x0f\x02a:\xf3\xf7'_\xb4!\xa3\xeb\xc0\xe8\x80\xc67e\xb41\xc4ZI\xc7\xbd\xa0\x17'S\xf6\xf9l\xe6{\xd2\xe21\x9dA\x84g\xbd\x9f\x07\xa6\x11)\x947\xd1/a\xc7\xe9\xf6\x7fS:q\x1b] \x07ft \xa3:S\x96\xb6\x98\x05\xa1\xf0\xbd\x90\xea\x1e\xf4i\xe7z\xfb\xa1\xab\xc3>\x92\xd8\xed\x0ebB\xadqq3\xe1\x9b\x88\xd0\x90\xd7\xcdh\"\x91i\xdc*'4\xb1\xab\xe5\xef\x970\xc0\x83}\x1b\xbc4\xc3\x18)\x05\x0c!\x1b%\xb0\x0d\x83K\xa3\xea\xae\xac\x8a\xc0\x0b\xc1\xd3kj%X\x80\xbf\x9c\x03\xfc\x1a\x82\x97\xcf\xd3\xf5b\nW\x0c\"\x97Z\xc3O6\xc9$\xe0&~\xbf\xe9\xfdD\x9c\xbdEO\x1c\xfc$\xa1\xd1nu\x1dD}\xb0\xf7TCZ\x071\x0f\x91_\xfcMC\xe6\x1b(\x8dkw\xfa\x14\xf9\x11&@\x9e\xf2s\xeay\"e\xeaj\x11M\x98\x9f\xb0[\xf8\xc0\xaeO?\xaf\xfc$\x04\xef\x9aW\xf7\xbc\x80\xd2\x1b({\xa2\xdf:\x1e.\xa2\xbc@ss\x11Yr\xb1\xc0\x1fy\x19\x16\xd6@+R\xb4\x10\x98\xf6\xd8|\x1d[M\n\xa5\x8b0{U\x0cl\xd0q\xf5\xea\x80l\xd3\xb1\x94k\xae\x8b}JXU\x9a\x16cm\xaa\xa9\xd6\xc1B\x8f:n\x1aB\xd9=oG\xe3\xc8\xbf\xc5$\xe9A\x97\x9d\x90F\x1cs\xb0a\xdb\xe5\x92}\x11\xdd\xa5\xeb\xa2\xdb={)\x88\xfc\x03\xdc\xafS8\xfeP\x1c2}\xbf\xbe\xdb\xef\xbb\xef\xd7\x9fv\x16\xe5\xffW\xe0\xab\xff\xbe\xdb\xca\xc6\x99P\xaahvM\xa3\xa8HaM\xfc\xd0X\xb3& \xb4\xb0\xab\xe6\x98\xa4\xd3\xb8\n\x96hm\xaen\xe7\xa3J/\x90\x86\x90\xf7>\xbe\x7fu|q:~s\xfc\xa7\xb3\x8f\x17-\x8a\x82\xfaQ+\x88\x00\x9e\xa0R\xb9\xa7S\xc2\xc6\xde~|\xfd\xe6\xe2\xb4M\x91\\\xefM\x08\xde\x9b\xf5v\xfe\xd3\xd9\xcf-\x9dX\n\xca^>Oo\x13\x9b\x0e\xa9\xa3b]j\xed\xabO\x8ay\x9c\\\xbb\x1c\xe0\x94\x16\x1f\xdb\x95\x87T\xd5\xc8\xdf\xf8\xd8;\x1ev\x1c\x0e\x19\xe1\xd8\xd8\n\x07 \xf5\xb7g\xafN7\x06\x07\xce\x8d\x06GUi\x99N\x99c\xfa\x18\xea\xdc\x1fy\xbcJ\xee]\xaa\xfb\xab\x84\x0f5\x13\xb1C\xd0\xc6\xd9\xabO#\xfd\xad\x1c\xa5|\xd9\xce\xd7\xcbe\x94\xdd\xe1\x94o\xe7\x91\xc8\x0f\xc4\x7f\xc4\xf99_U\x11\x86}\x9de,)~D<\xd5\xdf\xb8\x98-u\xec<\xdd\xfbUO\x1d\x82\x95\x13de`Z\x97\xe5\x92\xda\xe8T\xa5\x9aS\x07\xf6\xe8Z#\x13\xda\xf2\x86\x04\xb4\xba\xb6&\xc9\x80S\xdd\xb50\xd6\xa5 {\xb4\xd6\x8brw'i\xb6\x8c\x16\xf1_\x19\xba{\x05\xd2\xfe\x1d\xfb\xd6wp\xae\xef\xe0\x00\xcb\xeb\xaf\xf9w 9\xcc\x1a\x0eu\xda\x8d\xa5\xdd\xab.\xa0\xd7SX\xe9\xa6\xb1pT\xff\xe9\x8e\x9e\xd3>kj\xef\x1a\xea\xe5\"0\xa6jo\x1bA\x94\xbaK\x06\xb6\xfc\xdb\x81\x1d\xdfBf\xc3c\xd3\xb8Hk\x18\xd2\x89\x94T\xf2\xcf\xdeAG\xd7/N\xa5\x8c\xa1\xd0jt9\xc0\x14\xf3\xe6d~\x12\x8c\xfa\x97!$\xa3\xc1%zc\xfa&EoTm\xab\xbb!\xd6\x13\xcd\xda\xc2\xa90\x14\xd7\x90#\x16\xfec\xd2\xc8Y\xa4\x0e\xac\xf7\xf8]\xfd\xaf\xce\xb0zb\xd2\x0c\xa9\x96x\x16\xf8^\\\xb0,\xc2\xa5\xb0\xc9\x9b\xe1K\xd9\x06o\xc7\x8a\x9b\xa1\xf4\xfd\xac\x87\x0dk\xc9\xc71{\xdaa\x8d\x9f\xddp\x8a\x8dsI\x8d\xb0\"\xf6\xfa\xab\xe5\x1a=\xb9\x1ce\x97f\xfe\xbdX.b\x93\xa4\x06\xaa\x1f#*Q(\xa1\xc8)NM^\xa5\x1a\x108\xb1[oA\x83 \xedx\xd3\xd9r_\xc4AB?\xe6*\x84\x93\x19oE\x913\xf3=\xbdi4\xc0\xd1R!?\xccb\x02\xa6X\x86Y\x97\xda\xa0\nMr\xb0z\xa6i\xc2\x86b\xdc\x9d\x83^\x878\xb0\x0d\xba\x8f\xa86\x98\x1f;\x08\x03\xeb\xe0\x1e\xd5\x05\xcb\x7f\x05\xfe\xe9\x97VE\xe4xk\xea^\xbe\xdb,Z\x1d+\xfdBC\xee\xe8\x7fH\x85\xc5\xde\xaf\xcb:.Paa\x99\x94\xaf\xcb\xa2\x81Y\x94\xcb\xa2\xbd\xfd\x03Z\x97AD_\xfd\xa7.\xe3\x97\xde\x97$:\xadHw\x81X\x95\xec\x99%\x91,yj\x954i),!c!\x9b\xd9\xb3\xba\x9eH\xb5\xc6\xc0x?\x93\xefwI\x84j\x08S\xfaK\xd8\xb9\xd4\xf4,\x99\xa6g\xd1\xac\x0f\xb3\x10fJ\x06?\x7f\x7fz\xd2M\xefQ\xe6G\xd0\xa2\")\x81\x1b\xa3\xe9\xa2Z\x04-Ru\xa5\x08\xe8\xa3V\n\x01\xc7`>~x\xd3m,\xb2\xb3u\xb6\xd0\xfb\"\xc4\xf6\x86\xce\xfep~\xf6n\xa3\xde\xfe\x92\xa7\xa6\xb4u\x96MY\xc6\xa6\x9a\xee%\xe8\xdc\xff\x87\xd3\xf3\xb37\x7f<}\xb5\xc1\x18P\xf8\xc9X\x9e.n\xd8\xd4\xbb|\xf8\xb1\x8c\xcf?\xfep\xf1\xe1tc\xad\x0c\xad\x8fI\x84\x13\xbd]\x98J\x13\xdab\xde\xa2\xa4Qs=__\x15\x193e>]\xad\x14\x04\x0ehd\xdd\xa1\xf0\xfe\xf8\xc3\xf1\xdb\x87\x9a:\x9f\x9d{\xe6Y\xb4|\x17- \xd0\xc4U\x85\xd7\x84\xd6o]\x15\xdb\x85y\x13\xcc1\x9cg/\xce\xff\xe7\x92\x88 7!tB\xea\xbd\xf0T\xe6\xe7\xcf\xfc$\x9d\"\xd1\xda\x8a\x05g\x0dG\xb0\x16\xaa\x88$Z2\xa17\xeby\xb0\xad\xde\xc6\x89|\xc7?\xde\x11\x05\xaa\x1d\x1f\xf3\xf7\x97_\xc4\xf61\xca\xe9\xea\x02\x8e\xc0\xc3\x19\x8d?/\x17\x1e\x0c\xe5/Z\x7f\xa0i\xf7\x18\xe6\xf3F\xeb$7\xd6dA\x08#\x0f\xa1\xc9\n\x86Wv\x93\x10f\x97A\x08yg\xac9}\xfb\xfe\xe2O\x02w\xc6\xaf\xdf\x9d\xbc\xf9x\xfe\xba\x95\xb0l\x84EoY1O\x89\x1a\x0f\x83Kq2Y\xac\xa7\xect\xb9*\xee\xfe\xc8Ak\xf3-\xc2\x1cx+.y\x1ee\xc2v\x1be\x89\xef\xfd\x1ce \x06\x1el\x02\x08L\xd0\xe4\"I\x0b\xb8f \x17^\x19D\x80c\xfb\x1f\xec\xae\x87\x16d6\n\xe4\x18\x1d\xd7\x81#\x0f\xb3\xe8c\x04@\xce\xd9g/\x84\x9c\xaf\xfd\xba}\xed\xffx\xfc\xe6uE3\xce\x7f\xbd\xe5\x8e\xf3\xb3\xe3\xf3=z\xad5\x05YGH\x04\x84\xfa\x9f0\"\xe7\xb4\xe3\xd1\xe7\xe5\xe2Q\xdc+X^\xf8\xb1\xd8\xde\x1c\x0d\xd6K\x96\x8f\xc5\x96\xa4\xbe\xe4{x\xd2\xe3\x9ca\xc4\xa1\xf3s\x8c\xf3\x8bd\xcc\x10ArB\x18\xb1\x86!6\xdfcl4]c\xb7_R\xd3\xefx\xfb1S\xd6\x8f\x1a\xed\x10m\x95\x8e\x15\x94\x01\x95K\xecV\x18\"\x8e\xb0\x9bh\x11\xf3\xc9\xbd\xe7\xad\xa3\x91\xfb\"\x84\xb4\x835\x18\x87FAR\xe4\xa2\xa2\xc8!(\x0b\x85Ks\xfe\xa4\xd1\x93\x1d\x15\xa5}\x7f\x08\x93\xfco\xdc%\xdavx(\x1cH\xdaq`t\xd9\x15\x07\xbaX\x03\x81\xc5F\xd6\xacCj\xdd\x12\xb0\xdf\x18\xf0\xe7\xa7\x17\x9c\x9b{\x7f\xf6\xee\xfc\xc1\xb8\xb8\xcc\x8c\x07\x035\x1e\xce.\xc3k\x9d\xde\xd2A\xc8\xd6\x0ef\xc3_\xa3\x13\x1d\xc2\x07\x8e\xc0\xd0\xea\xdb\xa0\x15\xd6\xd2dP,\x8e\xfcC\xd1V/!\xcf\xc6\xd2\x90_T\x92? \x9e\xaa\x88\x8au\xce\x19\x16U\xb5zS_\x9bP\x96g,_\xa5I\x8eY\x02\xb2\xa07g\xd1\x94\xa19\xd2\xba\xfc\xfb\xcb\x17K?\xc0\x17c\x824\\\xe3}\xb1\x1d\x8e*i\x08\x91\x8b\xdd_;(\xe4B\xc1\xae\xf7\xc3\"\xbd\x12\xda\x97iTDzPm\xbb\x8e?A\x8a\xed\x1aD\x08^\xc1>\x17\x9cr\x88\xd6\xf8\x112\xe9\x88\x95\xff\xf1\xf1\xf4\xbc\xedJ\x7f\x03\xa4\xfc\xaf\xcd\x902\xd6\x90\xb2U\xec\xf8\xaf5\xcb\x0b9\xe9\xd8\x05\xf9.\xa2\x05\x9f\xf9\xdb\x8f\x17\xc7\x17\xa7\xaf\xfe\x91 \xb0\\\x17Q\xc1\xa6\x1f\x1e\x0e\x10\x929<{\x7f\xfa\xe1\xf8\xe2\xf5\xd9\xbb\xf1\xdb\xd3\x8bc~B||0:\xd5$r9\xa4\"\x01\x92O\xec\x8e\x96\xa6F\xad,\x85\x83[\xeaz\x1eYN\xa0\xe5J(V\x0e\xb5\x0e\xae\xcf\xf3 \x080{dY\xbd\xd2\x0el\xfcI\xab\x90\x8d\x9f\x1eUX\xe2\xaa\xb7\xe0\x87ll\x9f\xaci\xd0M\x1b$\x98\x87\x87>\xc5\x9a\xb0\xa3qOL\xd9\x82I&C'\x87Y\x08\xe9e;\xde\xab\xc9<\xe8\xd6\x7f\x98\xb9\x94{\xbb\xe3T8-;?\xf9\xe9\xf4\xed\x83\xadI>\x993\xeat\xfe&*\x96\xf2s,\xd6\x11\xd5\x13\xfdTT,\x13\xca\x87/_\xb0\x9e\xbc\xb6\x1dR\x1fxc \x83s\xf1\xe6\xb2\x9e\x97$(\x7fv\xbe\xbf\xdd\xa3c\x99=\xdb'4\xdd\xf2\xb67_\xb1I\xccr\xaf\x8b\x1d\x00\xb9\x16!\xb2d\x99\xcf\xd0_?/\xb2\xf5\xa4H3\x12zZ*\xa8HK\x0f\x7fx\x08~\x82mD\x01\xdf\xdb\x98\xdbh\x08\xa9n+\xd0\xe9*\xe1\xa6\x16\x87\x15\xe7\xb8\xff\x8cV\xd8\xef\x99 \x91\x86\x85\xfb\x94\xce>\xf1\x07V\x948\xa9\xb1\xa7\x14\xf6\x93\xde*K',78\xdbU\xc9\xfd\x94\x89\xf6k\xe5S,\xafg\xc0\xaf\xd7\x98c\x8d\xb7\x82\x9f<\x99GI\xc2\x0c\x85\xdb\x0d\xd6x\x15\xe7\xab\xa80\xc35/1\x1di\xed\xd55\x11\x80\xee\xae\xed*\xf7F\xa67\xd8\xb6\xc3_\x83\xd4\xea\\\x1bWJ>s\xe6\xbeW\x97Z\xd7V(R\xf5\x08\xba\x82\x15B(|B\x92\xa9\xbd1\xa6s\xd5h\\\xc1\x1fu\xe1%x\xcez[\xd5\x88V|\xe7O1\xc6\xc1\xaa\xb1\xc9*G\xba\x8c\xd6\xcaQ{\xf0\x9c2lJ\xaa\xe8\xaa\x95\x11S\xb2\xbd\xed\xb8g\xbb\x1emo/[o\xda\xd7\x8e$\x1a\xf2\x06\xe8\xc7j\xe0\xa1\x15\xae:\x84\xcc_\x06!,\xbf\xd3^5\xc7\x86\xd7VG\xff\xc8\x93[\x00\x87\x90\xf8\xcf\xf6\x02\x7f\x16\xe0\xb5l#\xec\xd0\x94\xe1\"\x9e|\xf2#\xff\x0e\xe3\x94\x0ct\xfe\x0f\x86p\x83\xc6`\xbd$\xbdmm\x0dk9\x1b\xc2\xd0\xc2\xb12\x19N\xd8-\xcc\x83\x1e'{\xbb\xfct\xe2\x7f\x0czi\"\x8578\x84\xab\x10\xbb\x8b\xfc\xb8\xb7J\xf3B\xeeB$5\x03d>&\xbdh:=\xbdaI\xf1&\xce\x0b\x96\xb0\x0c\\\x01\x0b\xb5\x06P\xdb=\xe9\xc5K\xde\xe39\x86S\xcdU\xd0c\xf7\xd4&\xfa\x18|tt\xe3\x07\xca\xef\xea\xa6\x87\xf6\x88t\xa7\xa1\xab\x10\xb6\xc4\xc8y_^\x9ad,\x9a\xde\xa1\x1d\xc2d\x1e%\xd7\xcc\x838\x81\x85\xef\x89 \xaf\x1e_>\xf7\x88\xf2^\xb4Z\xb1dz2\x8f\x17S_\xfb*\xe8\xd9-\xb7\xe1p\xde\xcb\xd82\xbda\xa21\x91 \xa7\xdc\xa7\x06\xce\xd6\x16\xb5a|\xac\xb8\x88\x97,]\x17\x1aF\x84\xd0\xaf\x1f\xb8\xfa\xd1g}?\x84\x95q\x06pZ=\x84i\xd5\x04\xfe\xf5\xedq2\x1bM\xebh:\xea\x08\xc2\xcd\x9f\x9b!\xb0v\xb2\xd9\x18\xc9\xb5\xb5kBQ\x02\xb2\xeb\xb6\x8e[\xa0\xb7)\xb3\xb3\xfb\x94dvv\xfb\x8f\xef\xc3\xe2`\xb2\x10\xa4\x95\xa9_\x88|\x1b:\x9b#\xed\xedJK\x08[\xf1\x82\x91\xa2{3;\xa5\x98\xf8\x82\xf3\xc2\xa8\x05\xe3b\x92\xb4\xa4\xe5\xec\xc32\xce7\x8cs[\x8fu\xffd\xef[\x02\xda\x17\xba\xe5\xc0!l\xb9\xcc\xb9w\xfb\xbf\xa4Q\x8e>\x1eY\xa7\x8b\xa5d+\xf3\"\x9c%\x1d\xa1\xc5]\xa8\x8f\x89\xe1\xd40j\x8aw2\x9a\x13\xd8\xe3\x81\xccOC\x88\\\xb5\xa112\x85zn\xa4\xb3}1J/\xfd\x88\xd0\x10\x98\x8f\xd0\x0e\xa2\x8a\xc2Y\xb7=\x8a\xb3ztF\x9e\x0c$\xa3\x1e\xdb\xe0K=x\xeb\xb7\xeeM\xd3\xa4\xda7%`\xd5N\xf0\xf3\x00c\xfav\xd0\x80\xab'\xf3=\xce\x15\xcb\xc8\x1b\x89\x88\xd7 \xd2'\\\xb6exq\x918\xc2^\nM\xc0\xb7R_\x84\xc9\x8e\xe5\xff\x98\x0d\x87\x8b\xdb\x9b\xa1Q5\xe9\xc1>}\xca>1\xe5j\xa9R\xd83St\xca\xfc\x15\xe6\xa1,\xc4\xf0\xa7\xfd.g2\xba\x1f\xe4\xd4\xc9\xbc\x15\xa1d\xa9TP\xf5\x8dX\nb\\\x84\xdf\x19\x84(\xb2\xa3\xa7|\x8aQ\xe2\x82@Jb\xa1\x90\xdaa\x07\x06!J\xe9\xecy\x99o\x12\xc5\xbe\xed\xed\x05\xbc\x80\xc9s\xd7\x81\xc2%\xa4\xb5_\x8c\x16\x97\x0e\x82\xcc\x05w\xc2y\x81O\x01{\x995I\xc7\\\xa6_\x8d\xa6\x0e\xe9XO\xaf\xcd\xbb\xe1\xc2C\xee\xdf\x840\x0da\xc5\x99{QA\x98r\xceQ\x80\xb9\xe1\x9c\xfc\x0d\x0c!\xe6c\xc6@\x17\xfc\xcd\xe8\x92\x9f\xceT\xf8!\xebM\xe6\xaf\xb0\x83y \x00\xc6\x87\xf7\x9d\xfb\x13\xb5>\xf7E\xc2\xbd\xfdN\xbc\x1bq\x14{\xe31\x9a\xb9\x8e\xc7b\xaf\xe0\x9e\xe0\x8c\x88\xfc\xc0\x86z{V\x9cZ\x12\x19\xa2\\Z\xa1\x12V1Zb\x1a\xc3\xbf\x01\x95\xd7\xa3\x82\x0b\xf7\x1b\x9a\xb5k\xf4\xc9\xe4\xc5\xd261\xab9\x10\x16C\x95\x9c0\xc4\x0d\xc1\xab\x9b\xe2\xb6\xc5\x8f\xc10\x94\\&E\xb3\x07B\x06p\x9b\xf7\x7f\xf5\x1d\x8b\x9dv\x81\xc7/lN\x1cBQ7\xa1\xc8Q\x17\xcd>\xb3\xc9\xba`\xf2N\x0b_ \xfb\x81?\xe4ir\xbeb\x13\xed\x95\xfc\xe9\nJ\x11\xfb\x89\xbfO\x862\xe7%\x83=\x87\xa3<\x91\xecX\xad\xc5/c\x0b\\\x9bL\xa3\x0cU\xa9\xec\xf3\x15\x9bH\x07\x05R\x1aj\xc4VfX\xf6TL{(L\xd1rv\x91rx\xcbz\x89^\xc55\xa1\x90Z\xa9_c655\xa1\xa9\x1b\x0c+\xc71\x14 #\xcc\xe5\x04\x11\xbc\x80\xe29D\xdb\xdb\x01\xc4\xa3\xe8\xb2\x96&$\"\x0e\x08\x13d1\x82*N\x14\x06\x7f\xa8_\xcf\x9dD\x939\xa3\\\x8c\x94\xd4\x11\x8f\xfa\x0e\x07\xa5\xdc\x0eP\xbf\x0e\xab;\xce\x80\xb2K\xe0\x8f_\x8f\xb9I\xe5\xacq\xf2\xe9F\x7f9\x1a{\x05\xbd\x7f\xc9\xd8\x8c\xa3<\xdeb\xf3\xedh\xcc\xd2W\xa3\n\x81]n\xc2\x80\x87\xd4F\x7fh\\!\xcd\xb8\x94\x0c\xda[\xa4\xd7\xb2k\xe1\xb6\xea\x9b\x1a\xdc\xfah-J\xb5\xc1h\xcb\xb0\x8c\xf7\x1f/\xc3`\xc7\xd2\xae\xd0\x8aRcP\x95\xbf?]\xef\xa2c\xb8\xd1c\xbd\x9d\xa4\xcbU\x9a`VJ\x0b\x04e\x94\xb6\xf3\"\xcd\x1c\xd6\x01Z\xa0b\xbb\x02\xde\xaa\xd5z\xb1\xeb\x08\xab\xa6\x8c%S\x96\xd9\xa5\xb9\x0c\x1c\xfe\x89\xbd\x8dV+6=I\x93\"\x8a\x13\xaa\xea\xa2\xdc\xbeK\xb6L\xe3\xbf\xb2\xc0\x8fDvr\x91>:F\x1e\xdcJ\xa2\xe5T\x0bfiZ\xbcN\xf8\xda8\x9d\xd9\xf4\x99\x0d\x810\x1c\xe7\x0f1\xf8\xa19\xd0\xdc\x1e\xe8\x02\xc7J7)\xa05\x84\xb5\xfdYd\xdd\x88\x80\xc5\xcb\xba=\xd5Z/\x9a6r\xf6\x02\x0d\xd9(\xc2\xd9\xe2\xf4\x05\xbf\xa8\xe3\x17Tk\xeft\xfe\x02d\xe58\xf3\xfe\x94bf\xd0=\xea7\xb2\xf1uTD\xfa'p\x04\xff$0\xb0\x81y\xbb\xe6\xcc\xdbcj\xbe\xd7$[\x17\xcb\x12\xda\xe5\x0cK\xac\xd6\xd6\xaa5\xca\x01\x11?1\x0b\x16\xb2\xc0\xead\"\x0b\xac>f\xb2\xe0\xc0,X\xe1\xd2\x99\x97\xe4S\xac\xbe2\xde\xcee#O\x9eXC\xbd\x11\xe2\xffc\xf3\xfa|)?y\xfa\xf8\x19\xcd\xe6^\xff\xbal._W+\x1d\xb4C\xe5k\x13\x81\x06\xa3l \x8eR\xa7\"Y=\x9a&\xb9\xad*\xd4\xaf\x18\xf2\x8aM\x12\x1a\xefL\xda\xe1L\xcc\x02?\xeb\x952\xb3\x8a\xe8\xbf\xae\x19\x9594\xe7n\x0d)\x90:\x04\xfd\xd1F:\xab\x19\x06%r\x98\x8b\xda\xdbQ\xfb\xdc?\xb1\xbb!xb\x1f{\xf4A\xa0?\x9224r\xec\xd4#\x07>-\xf5\xd7\"\xee\xc7\xa9Hl\xcf\xe9\x91a\xbf\xf67\xf4u\x0fdn\xf3U\x96\xaer\xf9\xf7$M\n\xf6\xb9h\x81#\xb4\xc2\xf2\xebe\x10\x12\xe1\xd8\xcbb\x7f\xd5+\x89\x9dK9\x8d\x98KC-\x95\x9c\xc2\x0d\x1fp\xc2&\x85\x16\xdb\xa4-\x80\xeb\x8dL\x8eo\x9a_\x7fE31\xe6S\xd1'\xd5\xa3PD?\xbe\x96\xd1\ns\xd0_\xa4\xfc\x04@\xdb\xe7v\xa9\xc1h\xb0}\x9d\xf1\xde\x9a\xba\xc7\xd4\x1f\xf7\x9a|\x0d\xfc\xa4\x8c\xf1D\x146d\xf6Ij7\xee\x0d\xd4d#J\xb2\x01\x15\xf9\xadP\x107t\x1f\x96rl@5\xeeC1Z\xa8\xc5M\xef}\x96\xde\xc4\x9c\x97\xef\xd0\x18 j\xa6Y+j\x82\xe0\xb16\xa3Qn\xf2t_:\xdf@\x97Zh\xd2W\xb1\x81`h$\x0ci\xb4\xf4j\x8c(]r\xc6)\xe7\x8c\x1b=\xa7by\xd9JS&\xd2\xba'\x1670\xc9(\xbd\x0c!\xc3\x7f\x19\x99\x88\xa6i6c\xbc\xacp\xb0\x9f\xc44\x85\xcdc\x830\xde,\xb1C\x9d0\xb8x\x1c\xf58(\x82\x9b|\xeb\xa4\xff>\x14C\xa4\xac\xc5\xda8\xb6\xf6\x93\xe2\x8a\x03'\x12Z~\x8c\xb2G\xa3^\x13=\xb5\xa9J\xb1)U\x11\x14e\xa2\x90\xfb\xe7x\xb1\xf8\xc0&,\xbeA\xa1%o 2&\x81id%\xf9\xa3M\xb8\xda\xbd\x9b\xd2\xd4\xafM\xa4\xa7#y\xdc\x944\xaa\xcb\x06\x0e\xd8e\x1d7\x14 \x8a\xa4\xd3\x96\xa6\xee\x8b8A\x18\xb9n\xdc\xf4\xa7@a#\x0e\xc1\xcb\xd2\xb4p\xdd\\\xa8\xa7\x9d\xa5\xdb\xd8\xec\xc1A\xfa\x1a\xc8\xde\xd7P\x97B\xc9\xedn\xc5c\x03\x8db\xa9\xaaY\x08\xde\xf1j\xe55\xcc}\xde\xabl/x\x7f\xbek\xe6q\x88\xb7\xa2\x81\xc5\xcc\xb4\x1aUTJ\xb3$Z\x12z\x8e\x16\x90{\xd3\xf8\xc6\x92\xe5\xd5\x93\x17w\x0b\xd6\x14\x14i\x15M\xa7\xe8B\xee\x0d\xd8\xb2\x01k'\xe9\"\xcd\x86\xe0\xfd\xff\xa2(r\xe4\xbd\xb3W0\x04\xef\xff\xf9\xdf\xff\xb7\xff\x03<\xf7\xf9\xea\xc5\x9e\x00\\\x08\xdeI\xe9\xa8.\xd7\x96/\x0c\xe6\xbf>\x84\x02\x8e\xc0\xe38\x0f%\xb5\xf0`\xc8\x17\xd1\x0b!g\x0c\x8a9+\xbd\xe3=+\xe4w}b\xb7\xad\xca(\xb5&\xdd\x18f\xb9B[>\xab\xd8o!oW\xdcx\x9c\x7f`\xd1\xa4h\x17.\x9a\x0dI\xf5\xa7\xf3\xd1\xa5\x9e\xf2\x08k\xa7:\xd0\xc2\xdf&N\xfe6i<\xad\x92{\xf0\xb7\xd0*\xd5\xd1'RB\x9eHI+\x9f\x0b\xdd\x89\xb9z6%\xea\xea\xa9\xae\x02:\x9cI\xea\xe9 \xe1&n\x1a\xdcI\xc2\xc5\x1bwz\xda\xd2\xbd\xa8Dl\x01\xa3\x06\x0d\xa8Y\xb5\xed\xde\x1dZM\xfdJ\x06\x95\x91\xb7\x83Yy;\x88\x96\xa9\xe2v0\x85\x17\xc0\x9eC\xba\xbd\x1d \xd7Y\xbb\x1dt1\xb0\xa0\xdf.\xe9h\x9b9 \xd7\xc9TP\xb6XOG\xc5\x87\xea\"\x92\xe36\x89G:d;VL=\xc27\xbb\xc0c\xc6\x8d\x1f\x8e\x99Q\xd4\xddPgW0\xb4\x94\xc6\xf6\x19\x9d\x86\x10\x9b@\x8ag\xe0\x97\xc6[U\xe2\xbf4\x90A+\x13v\x0b\x17w+v*\x12x\xbdcl\n\x11\x88\x0fB(R\x981\x0e\xfd\xa8:#z\xf0s\x94\xc3u|\xc3\x12\x880\xd5\x8d\xaf\x99\x04\xa5\xfcPY'BM>\xe5\xe7\x89q\xe1\x9aZA08\xd6 \xa3-3*\x84\\U\xce\x8b\xc5\xbc]\xe4(\xb0\x1b\xfe\xf3N\xb1\x9f>\xfa\x14\xe0\xcf[?\xc2\x1f\xb7\x82[\xf3\x99\x1f\xf4\x16\xe9\xb5\x0c\xeeR\x9d\x86\xb38\x99j\xc7\x1e\xe70$\xb3Q\x0e\xa0\xd3%\xa1\xdb|_Nx\x08\x89\xff\xe4\x89i\xc8W\xe9\x8c\xeb\x97\x03]\xba\xa4\xaf'\xdc\x03\x99G9^\xb3\x0bG\x89w\xe9\x94\xe5C\x18\xddX\x12\xc2:\x04\xe1V\xa4\x90\xd5w\x10T4\xdb\x16\xb1\x93\x1c'\x838\x94\xd7x\n$x\np\xc4Jz\xf2,\x80\xa1\x8a_\x87\xb1\x89\x9d:\xee\x05\xca\x11\x92\xfd\xec)\xa4\xc6hl[\xfd\xc6\x03\xd0\x81\x8e\x8dwR4,\x0b\xa1U\xd1\x1b4\xb8@\xd26[g\xd0\x84\x1b\xec7\xf1\\\xf5Q\xcbKC\x93\xceO\xd1b\x8cz[\xc4K\xa2\xc4SE;\x8bt\x12-<\xbb\x06[F\xf1\xc2~\xbdL\x93bn\xbfN\xd6\xcb+F\x8ck\x15\xe5\xf9m\x9aM\xed\x92\x8c\xef\x07\xfbu\xce\xa2lBtP0b0\x9c\xef'\xde\x923^gD\x03\xb7\x8c}\xaak`\xdb\x94tN.W\\N*v\xb6\xfe\xab\xce\xb5\x92\xac\xae\xce\xe5\x16p\x04[[\xd9Hp\xce\x98b\x8e\xcf4\xcaX$+T\xe3}p\xfc\x12\xa9\x03\xcf'\\\x8c|\xc3f\xc5\xd0\x0c\xe1U\xabq\x91\xae\xac\n\x19\x9be,\x9f\x8b\n\xb8m\xf3\xb6}\x98\xf5\xac~Q:\xf8\x1c\x9aE\x17)\xfaK\xf7\xeejm\xb4\xee\xc3\xec\xdb\xe1\xe4R\x83\xfa\x83\xc7\xa6u\xbatM\xb7B\xc1E]\xd4W\x9c\x82\xb7\x86\xd6f\xbdY\x9c\xe5\x05\xaa\xf4\xddZ\x1b\x94\x9f\x12\x112\x06\xd3ic}\xferO\x8aS\x1cC/\xeeV\xd5\x89s\x93\xc6S_\xbc\xc7\xa5\x83\xc3v\x0f\x15@`k\xeaX\x8bU\xd2V\xc5T\xfbvW\xf9r\xae\xba\x15\x82{\"a]918\xe2\xc4]\x04\xd3AMy}j\x15\xde\x04F0\xa6o\xa0\xdc\xdd(\x07}\x1f\xcbz\xb3t\xb2\xce\xcds\x86v^~\xf0\xdd\x1f%\xf1\x12c\xdb\xbf.d\x90\xfb\x93t\x9d\x104\xf6*\xcd\xa6,{\xbd\x8c\xae\xd9\xd9\xba@\x06\xbf\xa1\xca\xf9\"\x9e\x10$Y\xab\xf1s<\xa5\x8e\x95\xab\xf4\xf3\x8f\x0b\xf6\xd9Y\xf0\xfb,]\xaf\xc8\xd2\xb3l\x1a'\xd1\xc2Qa\x92.\xd6K\xd7\xdcDan\x17\xcc\xc8\xa1\xcc\xc48n\xe9\x92\xf7i\x1e\x17\xf1\x0d1{^z>\xcf\xe2\xe4\x13]\xf6\x8e]G\xee/1\\\xb1]t\x9d\xc5\xd3\x0f\xd4Xd\xc1iB\x1c\xc5\xb2\xec|\x15%\xee\xc2\"\xca\x08X\xf1\xd2\x13\x84WS\x99\xb3WQ\xec\xeeX\x96\xd3}\xcf\xd2\xa4\xf8\x99\xc5\xd7s\xa2l\x11'\xecd\x11-\x89\xb5\xe7E?9>KW\xd1$.\xee\x88\x02\x1a\xdci\xb6\x9aG\x14\xaa\x14\xd1\xd5y\xfcWb\xedn\xe3izK|\xf0\xd7\xd7\xc9\x94\xc2\xae\xbf\xa6\xe9\x92\x98z\xbcX\x9c\xb9\xc6:[\xa4\xe9\xd4Y\xca\xb9\xd9\x86\xc2,\xfd\xc4^E\xf9<\xca\xb2\xa8\xb1B:\x9b\x91\xdb^\xd4x\x1b\x17,[\xc4\xcb\xd8Y\xa3e\x0c%A(\xcb\xbe\xda\x17p#\xefgv\xf5).\xbc\x10\xbce\xce\xff}\x9b\xfe\x95\xffw\xe6i\x9a\x1e\xa9\x89\xf9\xc4\xeer?\xeb\xe2\xee\x9d\xdauh\xa7\xe3Q\xeba\x0e\x9a:\x11\x13WL\xe6Qv\\\xf8\xfd\xa0W\xa4\x1f\xb90+5\x99\xbc,__ \xc3\x0b\x7f@\xd9\xa4\xa3!\xe8%gf\xf4\xd0\x97X\xa6\xa98\x8d{\xca\xd8\xa2\xf1q\xfe1\x89\x8b\x05\xcb\xf3w\x92i7\xdcs\xf3y\x9a\x15\xf3(\x99*\xad\xd5\xe9\xe7U\x94\xe4\"'\xa3=\xc5\xabh\xf2\xe9:K\xd7|\x8f\xd3\x00\xa8j\x1c\x17E4\x99/\x19Ev\xed\xda'\xb4\xaccW\xc4#\xa4KEA\x8d\xd3\xe4\x7fnR\xf9O]*\x7f`+\x16\x15C*\x8d)\xa1:\xb1;i\x87\xdd\xfd\xc7\xdeiD\x92\xc29F\x81\xa5\x8eC\xba^\xe9\\\x98\xc76W*W\xb6\xfb\xd0~H\x8b\x82\x93\xc2\xa6\x01\x8a:\x9d\x86)\xaav\x1a\xac\xa8z\x8f!\x0b\xf1\xa9i\xc0\xbcF\xa7\xe1\xf2\x8a\x9d\x06\xcb+\xdec\xa8\x1f\xc4y\xd84V\xac\xd2i\xb0X\xb3\xd3h\xb1\xe6=\x86\x8bbg\xd3`/\xd2U\xa7\xa1^\xa4\xabN\x03\xbdHW\x1b\x0d\x93\xf3&\xae\x11\xf2\xb2\x96Ny\x95?FY\x1c5\x11\xca&\xfeG\xafC3\"\xeaib\x87\xd4\xc3[\xf91Z\xc6\x8b\xbb\xae\xf3O\xd7\x05o\xd8\x05\x02Y\xdc\xb2D\xb2V\x0b\xacd\xad\x86\xe5\xf9\x8e\xfe\xe5P\x15\xc4\xf8\xf6\x9b\x84\xaa\xc4\x7fj\x06\xe3K\x85a\xd0`\x1f\xe3\x02\xee\x89\xf0\x80O\xfb\x96\x83\xbc4 \xc2rv\x0b\x1f\xd8\xf5\xe9\xe7\x95\xef\xfd\xe7\xc8\x83m\xc8z\xc7\x17\x17\x1f^\xff\xf0\xf1\xe2t\xfc\xee\xf8\xed\xe9\xf8\xfc\xe2\xf8\xc3\xc5\xf8\xe4\xa7\xe3\x0f\xb0\x0d\xde%]\xa9,\xfe\xdd\xbfXi\xcd\"\"\x1e\xfbZ\x06\x80(_\x96w\xa5\xb9\xf3\xaetkkmG`\xc7\x00\x81\x11\xf1\x9e\xcb\xfd2\xfb\x1a\x1a\xb4\xf9\xeb\x11\xbb\xc4\xb0\xaf\xa8\xdd\x85!\xf8\x91\xf6\xa6\x16H\x9bNs\xdc\xc5\x9e\x10\xf3\x84\xcc\xa3\xfc\x874]\xb0(\x11:\x80\xef\xbf\x87\xad\xaa\xe8\xddz\xc9\xb2xR\x16\xc5\xf9\xbb\xe8\x1dg\xfeT\x05%\xce\x99\x15\x0bx\x01\x83\xb2\xd6\xd9\x0d\xcb\x16i4eS\xab\xaf\x01\xa9\xc0\x03\x89<\x13[\x1f\x87V\xcbo\xa3\xec\xd3z\xf5c\x9a\xbd~\xd5\xaaJ\x13\xd3\xcez\xaf_\x8d\xeb\x88\xc0q\xe0\x90cHj\x85\xb4\xae#@\xce\x8a\xe3\xa2\xc8\xe2\xabu\xc1\xac>\x1d\x8c.f\x9b(\xbf\xf2\x89\xee\x89\xe0\xefM3\xfd\x90\xa6m\xd7\x95\xe5T?\x9c\x9d]\xd8\x93\xfd\xb7C\xcf\xfb\xb7\x0d\xe6i\xf4HB\xd7\x9a&\xd1uXK\xdcK\xf4k\xccT\xed\x8c\x0ePV\xea?\xbc\xfc\xe6\x1f\xc5,'\xf6\xd7Q\xad\xc2\x08U\xc8\xb4Q\x15j ]\x82\x0bF\x8b\x14.\x1f\xa5~\xd0\xf3huc\xe9\x07\xd6\x8b\x14tl\xb3\x0e\xf5\x94\xf6\xff\xe6n\xfc\xf2E\xbcl\xd8@\xfdRE\x1e\xab5\x86!\xfe\xad\x90\xbb\x93\xbe\xb2\xc4\x9d8?Y\xe7E\xba\xac\x16\x15\x01X\x91\x0d\xbc\xc1\x1a\xa2\xf8V\xf5 \x01\xba\xc1*\x1b\xbdtXl9\xc4\\RL\x15{\xa7\xc00#\xc6`<\xaf\x05\xd1\x11\x80ndk\x880\x92\xb6\xe0[a\xe1[\xd1\x8co\xa4\x1f!h8\x94\xf60cW\x9c&T\xbeD\xf5\xf0\xa6\xe2@hw]\x06~l\x913GgP\"x\x8a\xee\xbd\xba\x02\\\x98}\x89\xabb\x13pb\xb9\xe8\xeeT\x9b|\x02y\xf11/\xed>\xd0$Q\x81\xe8\x8eo\x8cK:@\xabzZ\x06\x0e\x9a\xbdQZ\xdfq4\x93\xa4?k\xfb\xa3|\x15M\x1c{\xb5\xfa\xea\xc8\xa0~\xef\xce\xfd\xb5\xc8\xa2\x877\xbc\xe8.O\xed\xe8\xb4\xd3\x8eN\xac\xf6}l:P\xa9\x8c\x8c\xf7\xd8\xa5s\xc4\x8e+|\x9b0\x08Hc\xd0}\x82\x14\x14\x06^Lz\xdaV\xd2(\x86\xdcA\x1d\xf7\xa0\x8b\x0886a.\xf3\x00\xf8\x8a& P\x89\x84\x15\xfaXmH\x15%\xa4\x1a\xc7V\xc7\xf4Mh\x145\x8c\xee==\xf0\xc9\xb71%r\x9e|\xa5\x85\x7fgJ\x94\x06\x9c\xad\nU\xf0\xe3\x06r\x84\x1d\xdb\x04\xc2\xbd\xd9\xab\xa3U' \xee\xddj\x1f\xabG\xc0F1\xb2\xd3\x03\x0c\xfb\x8b\x7f{\x0e\x9fc1J{a\x8d\x93\x9d8d\xc5\x97\xf4>\x12\x17\xe2m\xc8R\xfer\xc8f\"9\xe77\xcaf\x03*lq\xe2\xef\x0e\x1c\x11\xc6\xcdp\xeb2\xcf\x97\xd9\xca\xba\x92\xdc\xb6\x06\xa4\x91lnq\xb1x\xd7\x8bV\xccY\x9a\xa25\xcd\xebW\x95\x0dv\xcd\xdci\xc5\x92i\x9c\\\x7fD\xa3\"\n]\xda\xbe\xc1\xe5\xb7\xb1\xc6\xf0.\x10w\xed\xf2\xcaU\x06C \xf1\x04\xc3\x9aW\xf6B\x94\xfdL\xc5\xb1|\xff=(\x03>\x89\x98>\xeb-\xd7\x8b\"^-\xa8\xb4P\x15\x1e8\xc5=\x82X\xde\x94\xd9\xd8\"\xcc\x81B\x1b(\xf5\xd2UaGEu\xde\xba\xa3\xbbA&\xc4d\xdd\xe5 \xa9\xbb\x1cd#AhG\xe9\xe5\xff\xcb\xde\xbbv\xc7\x8d\x1b\x0d\xc2\xdf\xf3+J\xcc\xacCF4\xad\x8b\xc7c\xb7G\xd1\xeb\xb1\xe5\x8d\xb3\xe3\xcbZ\x9e\xe4\xeci+Z\xaa\x1b\xdd\xcd\x11\x9bdH\xb6de\xac\xe7\xb7\xbf\x07\x85\x0bA\x12 \xc0\xb6<\x93d\x1f|\xb0\xd5$\x88K\xa1P\xa8*\xd4\xe5\xac\x93\xc0\xa4\xd5\x92\xd2B\xdcn\xc1L\x89X\xd0\xcd\x0e\xb1\x8b\xa7\xf9\x197\xa4\xd2\x93\x02\xacPaLU2\xc7[\xf1\x0d\x9e\"\xed\xe7Gj\x82xQ:\x1a\x13\x137\"A\xc3\xa6\xde\x02O{r\xda\x01R\x907\xb3@&\xa0l\xdb!t\x87\xba\xa3#\xac\xb1\xe2k\xe2\xc7\xd3\xbd\xee\x17F\xcc\x12\x7f\xe9\x05\xef%\xa9\xff\x9cW5\x06Mq8\x9f\x84<\xc1b\x19\x99\xecA\xf3\x8c\xd9\x01Nz\xd6\x8c\xe2\x8d~\xb3q_xv\xb8\xf4\x97k\xf0\xc8]\xe7\x9b\xac\xfe\x1b\xeb\xcba\"\xe2\xa0U\xf6\xb6\x8e\xdd\xed\x8c\xbf\x07>QZ$\xc8\x9c1*\xc9\x92:\x89Sn\xb9*\x08\x07et2\x984!?\xf1\xbdI\x8f\xc9\x12\x8eU\xecs\x83\xaeP\xc2\x7fX\xcc\x17EXw\x8d%\x8e\xa20@\xf2\x10\xceoy\xe7\xec\"\xcf|~\xeb\x0e\x04\xdf\x85\xba\x9b\xd8\x0eP\xcd\xb9\xe3*.|\x1ec\xcb\x18\xd5\xe0\x96\x85\xaa5\xd9\xf9_\xc7\xd5kN\xbc'\x92\xa0\xd7\x0dA\xefch\xa8\xa6\x8d\xa8\xf9\x8eW\x13r\x1eu\x16\x99\xbe\xdc\xa0\xc9\xcfF\xb7\x8d\xc3\xee^e\xc1\xa3\xf1\xd3\xe7\xcc!\xc8\xb6\xc6\x06/\x0f\x15\x13\x87\xfa,\xf2\xaaf\xa0\xd7\xec-\xd3\xc6bVmZD\xb2n\xb1\xd6\xc8\x0cY\xe7\xa1e\"\xd6\xfe\\Y4{_Je8\xd2-\xb1\xbe\xdf\xd2N8\xc4\xde.\x99\x7f\xb6\x8da \xd9q\xaf\x19A\x08%Ztex\xb6i*42\xd3N\x0f\xbb\x8e\x07\x9amW\xa5]\x0c\xd5\x15?D>\x13\xaf\x17)G\xfe\xfa\xaaLm7\xb0m\xae\xe7u\x19O\xfbx\xbf\x1b\x91\x80g\xcdy\xd45q\xdc\xf0\xe7\xdd\xfb\x8c\x8a;:\xd3\x0e\x809<3\xdewx\x13 \x19\x93N<==\xb4\x96m\xd6\xab\xf7\x11\xcd\xfb<\x1c\x97\x91\x8fxz\xa2}\x91/\x8f\xee\x88\x98\xc7\x00\xf1\xd3\x0e^J\xb9\xccc\xd9\x92Zi\x8e\x86\xf4b\x86\xb3\x88)\xb1h\x03z\xb9S\xeb:\x84A\xfc4\xa1:z!=D\x11|\x8bI%\xbb\x17\xc2\x0cv]\xbc@Ax\xf9\x0eU\x80\x16\x0d\xa3\xbcu\xbc\xd6\xe6nP\x0bg\xab\x85\xf2\x18\x9e\xaf\xc8\xec\x12\x03K\xf1\xc05,\xf55\xe4\x0b\xf8\xbf\xe8\xa3\x05\xbb\xe0\xfd\xdfH/\x9a\x82Q\xb1\x03\x8a!\xb5A\xac\xf5\xf3\xe8<\xbf\xceHI \x87\xef\xed\x1f\xeeyMX\x89\x04\xd5\xc9\x13 \xf2\x10f6\xae\x98\x16MV,\xb6\xec\xc8\xb7\x1c\xc1\x86#\xdc\xab\xac&e\x16\xa72|\x8b\x8f\xc1%]<`\xc4\xac\x1a\x8cQ3p\xdd\xbb'NPf\xf5\xda\n\x95\xa5\xffF\x8dfK9\xc3&\xa4\x8c\xcb'%\x0b%(?\xea\x03\xc9g\x10\x088\x082r\x0d\x15\x9b\xae/~\xb3\x1a~\x1e\x04\x11\xe7\xb2)\xa3\x83\x87}\xd6zr\x04\x19C4\xbcr\xcb\xe7]r\xc16\xae)7\x99\xc7\x9c\x12\xba9\x89\xdb\x0b\xc3\x9d+s\x0c\x1c\xe1#\xb5G\xec\xd8\xf7\xc2\x86\x02\xb4q\\\xde^\x9c#\x00\xd1p\x8fy\x8f\xcbGk\x96\xc1\x97\xb9)w\xf3+\xd1\x92\xfb\x95\xea\xbf\x98t\x05\x86s\x16\xc9\xa1N0g\x8a\x1a\xe4l\x02\xcd\xadC7\x81,{\xf3uN\x92\xef\xbay\xd6\x94P\x17}\xd4\xfd\xf3\xdb\xd3\x0f=\xc7\x00Z\x9e\xbf}\xfd\xee\xed\xe9\xab\x0f'\x13\xd0\x88\x02'\xaf\xdf}\xf8?\x138\xe8\xbfY\x92\xfa\xc3M\xe1\xc4\xb8\xb7/~;'\x01\xdd\xe8\x11v\x83\xea\xea\xa4\xfak\x9c&s\x11\x15\n\xd1\xd6\xb0 \xf8\xbeN\"9\x05\x98@\x12\xd1\x99\x8a\xa4g\xa5\xef\x1d<\xd2'o\xec\x88\xd4\x067\xf1/\xb5=`\"x\x1f, f\xc68Y\x17\xf5\x8dD\xa4\x97\xf1\xac\xce\xcb\x1b'\x88R\x92o\x9bR\x1f;\xfa\x8d\xb1]\xe7\xd4\xa5\x90\xa7\xed\xb0l`\x90Dl\xa2\x94k8\x82<\xbcS\xd8\x9a7\x07\xdf\x05,Ve\x0f\nm\xf5\xf3\x95\xd6K\xdcpL\xd8\x00\xc5\x81\x94S\x04\xa7Tk\x9fR-\x86\xa9\xdc~\xc4v\xd5\xaf%\x83\x8e\xddb\x82ZK\xfbI\xf5\x01\xdd;\xc6M\xa8\x15\xc8&\x19l_\xac\xb7\xce\xd2\x88\xbd\xfc\x9f$#e2\x93cx\x9e\xc6\x95\xd5! \xf8\xd2j\xb0\xbeO\x9bX?\xad\x89:w\x92\xb8l-\xf9\xeb\xeby\x19\x9aQ\xfb\xe1#\xc6\xe1\xef\xf7rj\x08YB\x97\x81S\xec \xff\xa0\x9fiD\xd1\x94{\x91\xa7\x11,\xbc\x89\xe7.\x08H\x9c\xa1\xfc\x8b\x86\x7fW\xef\xceItIn\xe0\x18\xe2\x88T\xb3\xb8 >>\x08P\xc5T\xe7,G\xaa\x7f\xf8H57\x12\x7f\x8d\x89\xd9\xd51=\xa2\xc7\xc6\x9e\x92+\x9e\xa7\xa9\na\x16\xea\x13q\xd2E)BLr\xc2gQ\x1b\x04 %\xd2\x1e\xe5\x00\xd1\xb7\xcb\xbb`\x92\xaaxD\xf9\xaa\x9a\x13\xa2&\x94\x9a\x88\x94\xd10O\xbc\xae\xc26\x89'\x0dTy\x17u\xf4\xcd7|d\x18\xf4Or\xf83\x7f\x81 \xf1\x85p\xa2\x07\x8b\xc6\x0e\xa3\xf7\x84\x13\x94U\xeb\x05\x86\xda\xf0\xbc\xae\xb9\xc5\x97\xfaA\xb2\xd0\xa9h\xcb\xb2 \xa1\xc2tn3v(\xeeuo\x7f\x17\xec\xf6\xf7Q'\xe0%S\x7f\xe9N\xad\xc2\xec4\xfe\x92\xd7Q\x04lq\n\xf5\x177k\x02\xe4\x98\xf2\xa9\xf5?\xa2G\xbb\xb4!\xf6\x98\x07\x12\x06\x89\x0c\xa2\x92\x14i<#\xfe\x83\xe9\xc7\x8f\x7f\xff&\xfa\xe3\xee\xb1\x1fL?\x9e\xfdr\xfb\xf9\xec\xc12\x04\xef\xe3\xc7o\xeeyJ\xb5vW\x9f\xa5oT\x10\xfd\xf1\xd8?>\xfa\xf8\xf1\xa3\x1f|\xc6m\x1b\xed\xf2\x07g\x01\xb6\xf4\xcd~\xf4\xc7c\x86\x18\xdft\x03\xc2\xeb\xbd`\x85~\x8d\x8fV\xa7n\x96\x06|hF\xdc\x0d\x10?\x184X\xd8,\xef\xb7\xbf\xf9]\xff\xaf\x8e\xb2\xae\xe1*\xd8\x11\xb3(\xf3\xb5Qm\xf2:\xc6T\xde\x85\xff:.Z\x06|\xaf\xe3\xc2AQ\xd3\xaa\x85\xdbL\xb6\xd6y\x1e\x18\xdb8%5\xfb\xe8\x94\xd4\xad!\x9c\x92\xdaa\x08\xadZ\xca\x10\xfa\xcf{q\xa4\xaex\x92r*#\xbc\x8e\x8b>b\xae\xf8\xcbS\xd2am\x9c\x12\x9a\xcd\xa3\x8a\xd4\xecm{\x0d\xc3v\x0e\xea\xa1\xe5\x9fGK\xd2\xd7@\xb3D\xb8\xc3\x0d\xcc\xb9i\xa0\xe6\xe3\xd8\x16T\x8ew\xde\xe0\x8f?g4\xb4g\xa1\x85l\xf2\xf0@VQ<\x9fkF1\xecx\x0e<\x07\x83a\n\xd6\x98\x94\xfd)\xac\xf4Sh6\x94\x8e)\xba\xe2\x99\xe6\xbb\xee\x07\xc0\xb3\xf2\xe9\x9e/\xad\x13\x03Eg\x1a\xe9C\x1ai\xda\xbd\x19\xd3.&~~\x95\xd5>\xe1\x1e\x9b\xfe>ej\xf74\x8a\x8a-P[\\\xdf-\xb5T\xef\x8ae\xc8\xac\xc7c\xbd8s\xf4\xed\n\xab\x8bi}6~?\x0c7\xcd#.\xe9\x9av\xdd-*\xafq\x15D\xeb\xb8\xf0o\xb6\xd8.\xc3\xe3\\\xb3l\xf8\xddD\xf9.\xbb\xc9 \x00k\x0d\x00\\\xf7\x9a\n\x80\xb5\x1e\x00\xbf\xeb\xffE\x87E\x05\x85\xe9\x99\x8e/97\xf3%yo\x1eF\xf3\xa8+\x99\xc2y\xb6J\xd2\xf9\xab\x17:\x99\x0c\xc3Oe\xd2\xab\xfa|\x8c\xb5\xd7\xb5E\xc8\xf6>f\xd8G\xc6B\xd13\xcd\xffO\xd9e\x96_g\xc8s\xf8h\xc2\x0f~\\\x03c\x80\x16I\xca\xa2\xf2H\xd6\xe6\xef\xd1\x1f\xa7\x1f?~|p\xf6\x80Y\x1c\xef\x827au\xd3$#\xccM\x9a>\x0c<\x14<\xb19\xa69\x9b\xc3\xc5\x0d6\x9b\xc9\xf7\xaa\xf3\x87nB'}\xb8k\xf4\x05\xde\xef\xc9\xba\xa8o\xb0\xc1q\xf7\x1b\xde\xefk\xf2\xa96}(\xd4\xd8\xfc\x8f \xff#\x9a'U\x91\xc6hY\xca\xdc\x98\xf0i\xc6\x7fJ\x80\x0e\xce\xec\x93\x01\xa3B\xc4\x90Sz\xde\xbeh\xba\xd1Z\x97\x94\xa2b\xa3\x91\xefW\xcaE\xa5\xb7\xd7\x19)_\xbd\xe8a\xab\xd4\x8b\xa2\xe5\x8c\xae\xef<\x08B\xb8\xc6\xfc\x91\x80\xb1\xc8\xcf\xab|S\xce\xda\x1cE{'\x9d\xf6\xb4\xb6yvJXH\x9d\x92dcL\xab\xf4\xd6\x92\x14\xd03\xdf\xdb\x7f\x88\xd1\x923\xb9\xa1\xe8\xee\xeaW\x97\x92z\xc9$\xf5\xb2\xa5\xbe(\x87-\nY\x8e\xb9\xd2\x90Z\x1f\xb8\x0e/\xf7\x13\x93m\xa1\x1ck+:\x7f\xdc\x8cY\xaf\x8c\x8b#\xc2\x83\xf9(\xcch\xeb!6\xbaO\x1b\x8d\xa3\xa4z\x9do2\xba\xc9Xo\xdf\xed\xb7;+\xe2\x92d57\x90R~\x1ea\x8cr\xe5\x01^\x8e\xca\xd6\x0f<&\xec\xc9\xf7.\x176\x1d\xd5h\xf6\x03Y\xe4%y\xdd\xbaAu3\xe7/}c\xb8H\x0e\x87 h2\xaf\x03FSc\x03\x9e@\xa6\xaf\xc0\xec\x9e\xcc\xf6oby&05\xac\xbd\x84\xb9\xd9V\x8f\xc55\xe4\xc1s\xc6Z#\n\xc8\xfd\xc4\x1b\xd1\x83n\x9b\xddC1JA\x194\xfe\x91\x98\xd5\x8bb\xd5\x1b\x96y)\x87N|\xfd`\xea\xf6V\xae\x95a1\x97Va\xf1\xa6b\xf0\xc6r\x95\x92g\x030\xdbf\x8c\xa8\xc7m\x01\xac\x8e\x94\xb5\xdd\xdd\xb5\x8c&[\xdf)\xc8X\xa4\xc7\x16\xa4\xf6\xf5\x90\xaa|\xa2K\xc7x!\x82\xf7\x0f\x8d\xbb\xd8\x94K\xc2\x87N\xe6r\xf0\x95\xc5\xd5\x14\xc3j\x9eF\xe7EI\xaeHV\xbf\xdb\x94\xcb$3*j[\xc9\x94\xf6\x9e\x02\x81\xef\xe1B\xd2fb\xa6\xcd\xb4\x9c\xfb\x17Sr\xe6\xaa8\x03\x9c\xf8@\xd0\xfa\xe1[\xdaf\xb7\x7f\xc9\xe2 \x85\xcaN\x17\xa9\x86\xfa^\x92\xfa9\x8f\xecW\xc7\xb3\xcbg\xf39\xc9\xe6\x9b\xb5\xebHtVO\x836L\x82~\x9c\x0c\x86\xaf.\x99\xe5$Z\n\xe9\xcf\xbe\x1av\x8f\x18\xeb@\x1a\xae\x81s\x11\xd2*\xcav\x9e\x80\xa2\xe4Z\x88\x08\x87\x06\x8aL\xc1N\x9b\xcf\xa3\xf39\xb9\xd8,_\xbd0\xae\x00\x8e\x0d\x99\x9d\x16L\x7f\xb8y\xf5B\xc4\x9c\x17EcB\xdb\xfd\xc4\xb6\x14\x12\xcd\xf9z\x00y\x1a\xb0!|B\x8e\x9f\x08\xce\xeb\x1d\xdf\xbcC\xc8\xd3\x15i{\xb8\"\x8f.7\xfc\x18\xc4T*\x124\x12\x0b\xa6\xf5\xb4t\xaf0\x8f\xae#\xe8\xf0\xb1\x83\x839q\xf3)n\x1at\x1d\x84\x03\x18\xc4\x19\xe9\xd4=g\xb9]\xbbw\x87\x01\x12\x0e\xb6\xefpT\xecO\x89\xf2n\xa3{'\x19$\xb7\xe19@G\x1e\xcfk$Gi\xff\x15Y&UMJ\xc2\xe8U\xdc\xe5@\xaa\xd5\x9b<;\xad\xe3l\x1e\x97\xf3\xbf\xc5e\x96dK$\xbe\x0e\\\xb0\xf1FB\xa4>,I(\xf2\xc2N\xaat\xd8\xecH\xa2N2\x94;\xb5/\xc6\x86\xda?\xc5\xa7\xdb\x1b\x010G\x97\xeeu\xbf\xde\x9e\x969\x1b\xba\xe9{\xa09gH\x14\xcf\xe7'T\x80\xfc\x91{+2'\xa8\xeeSn\x1e\xb6\xb3\xaf\xb5\xadn\x1a]\xe7Wc\xd2\x8a\x08\xff{C_c1\x90\xc5\x9b\x881\xa4'6\xc9'\xd3<\xf0=\x8a\x00\xbb\x0c4w<\x959\xd1w\xb3\xcd,L~\xb5\xfd\xed?\x8b\x8bzS:\x06\xee\x80\xedW~\xef\xae\xc15\xb0\xf2\x9a\x8bKQ\x06`f\x1f]\xa9\xff\xd8\x05\xcc%\xe7\xa0^\x88$\xba\xeaL\x8d\xe6\xdf\xad\x84kwA\x0d\x1e\x1f\xe8\xc2\xf8\xd1\xe7\xfaP\x11\x87\x8f\xba\x99\x00\xb8[\xddw\x07A\xbb\xfd\x8d.M/\xf3aM\xf2\xecy\\\xc4\x17I\x9a\xd4\x89=u\xc2\xd5\x97&\xa0\x80\x8e\x14\xe6\xb7SQ\xdc\xbb\xc7\xb2Ox<\x8d\x00^\x1b}\xfe\xdcKI\xc1\x9e\x95\x1b\"*\xceXL\xff\x93yR\xc7\x17]\xa7`\x93\x03o\x92g\xaf\xb2E^\xb2(\xf4\x16\x0c\x17\x1a\xb6x`Jz4\xc5\x18\xfb\x04\xdd>\x8c)\xbe+1\xa0\xf7\xccc\x1c\x03\x1cj\x97\xc8G\xb7\x91M\xa4\xce\xc2'Zy\x1el'nI\xaa:/\x89l\xc7i\xf9\xd9\x05[lJ\xda\xc3tZ\xca\x9c\x0d\x13\xc6j\xedi\xeb\x14\xed;G\x9c\xe9\xc7\xab\xb52\x84\xdc7\xe5l`\xa1\xe30!\x90\x19z%\xd6\xd8D\x95\n\xbe2\x84*\x08!\xf1\xcb\xe1\xd0E*\xcc\x9d`\xa5\xd7\x1azr\xda\x18l\x1e\x13Q\x90\x007\x96\x1e\x83*\x16\x93^\x81\x17~\xa8\x87,\xc9\xe6\xad\xaa'\xd9\xbc\x8f\x15\xfd\x81I\xebP ^\xd9B\x7f\xb3\xab\xbb\xd6\xb4\xf1m\x12a\xbf\x1f\xee'\x87\xb8`\xf2\xf5\xcc\xb8\x8eD\x08*\x01\xf7\xb4\x12\x18b>)8\x10\xefg\x11=1\x10\x80\xbe7[\xc5e<\xabI\xe9\x85p\x9f\xa7\xf9\xe2\n\xee\x01\xb1\x04A\xcc\x1b\xa2\xcc\xe3`3\xdaV4Y\xfa\xb9\xddR-\xd2]\xbd\xc5\x98\xf7\xd5\xb0*\xe1\xf3\xe7a\x941\x98\xb8\xe3\x04F\xaa\xef+\x03\xf2[n\xd0\xea\xa82\xe3*3\xbb$\x99&\xd6\x15E\xc5V\xaa\x7f\x91\xb6\x9b2w\x86\x1d\xd4\xdd \xb4v\xd8\xd9\x0bp\x04\xaf\xe3z\x15\xad\x93\xccG\xa7\xad\xd6b\xfd\xc6\xfb\x02\x1dt\xf86\xf8@>\xd5\x83[!\x89fy\x9a\xc6EE|d\xe1\x12\x13bg\xf2e\x0fYs\xb8\xcf_\xb3Y\xe9\x12\xcf\x8aH[\x95\x82\x93CQ\x94\xf4<\x12\xcb/\xb8\x15\x8f\xe4\x96\xe2\xa6\x830>\x01\xee\x8d\xd9q\\\x11\x02\xa2XO8n\xfe\x14\xdcy\xd0\x84\xe2\xeb+B\xf5\xea\xa5\x86\xf7\x9e\xd5\xc9\x15Q\xf2\x08\x91\xe8\"\x9fwRH \x81z(\xbc\x8f\xee\xbb\xdf\xb5\xff\xda\n\x9cW6\xef\xdb\xc7z\x86\xb3\x17f:\xd6\xfb\xea\xb2(\x0e\xfb\xdfv\x1b\xafZ.^}\x0f\xaf\x94\xf5\xf2\xb0+\x15\xcf\xf8\xf3n?\xcc8\xfe\xf0\xdb\xee\xf3\x82\xcf\xad\x1bub\xce\xfa\x17\xe1\xb0\x1f>\xea\x0e`\xc5:z\xdcy|\x85\x8f\x0f\x0e\xba\xe3Z\x8364\xdb\x92u\xdf\xcb\xdfu\xc3\xb9\xf6n3\x17\xaa\x03\xdb\xfe\xc3'\xddQ\x9d\xf3\xee\xbb\xd3\xb9n\x1c\xdb\x92~\x00\xe4N\xe5\x13\x8cQ\xa6\x8b\x1f\xdc\xaa\xf6 \x8e\xba\x9e\xd2\xa7p\x04O\xda\x8f\x9e\xd3Z\x9dj\x97\xc68\xde\xcf\x8c&h\xcc4L&\xcf\xa2\xbb\xf6\x14\x1fu\x93qMZ)\xc8\xba\xac\xae\xce:\xec\xad\xb9Sz\xb6\xca\xa0\x80\x8c\x84\xabO\xfck\x96\x8ew\xd8\xfa\xec\x9d\xd8n!\xf2\xa4\xdd\xbe\x90\x96\xb7\xa9\x06%O\x8b\xa8\x9f5\xdbtv\xc6\xe6\xe8=\xec.\xd1\x14\xf2\x03\x8e\xc0C/~\x16\x8ck\xc2L\x155w$1\x1cC\x0c\x13\x88\xbb\xf6x1\x9a\xe2\x05\xa1T\x95\xd5\xc9\x9a\xf4\xaet{\x13\xa6\xfb~\xd5\x89\xf3@\xc1\x94\x85<6\x01w\xa9D\x07\x98n\xf8\xa8DU\xcd\xd1\xfe\xe8Q\x95`\xc8\x81s\x16\xbdC1\xa0\x88\xcek\x0eD\x1e\x0e\x89e\x87\xffQ\x8d\x88\xf0*\xabsLa\xbd\xc1\x85\"\xb8P\xd9\xb0\xb5\xe4\x07eUuKJ\xc9\xe3:B\xe0\xbe'\xb3<\x9b%)\xf9P\xc6Y\x153\xfeuI\xeawy\x9e\x92\xb9\xbf\x83\xcc\xc1,\xdaT\xe49\x9e\xe6|\x01;\xb3\xce\xa3\x82\x94T\x02\xf5\xdf \xb1\x11\xe4|\x10\xe1`\x7f%I \xe5)\xf2\xe1i\xbd6\xe9\x8d\xf0*d/\x84U\xb4\xc94\xeb\x86\xd6D\x9d\xed)\xf8\xec\x9e\xf4\x15<\x85\xbaI\xfb\xf74\x80\x9a\xab\x81\xf0\xb7\xaf\xbc\x1b\x1e\xec+\xb3\xa5\xf0\xb3\xf1\x96\xc2U\xa4\xcbj\xae\xf3Q\x13f%t\xe9>\x7f\x86\x9d,:_\xe5\x15\xbf\xdb\x18cC\xfc\xb3\x91\xf4\xec\xf8;\xdc\xdeU\x02u\x07\xfd\xde$\x1f)\x9f\x9dj\x9e=\x1f\x06\xdc\x1b3\xe0\x1c$U\x0e^=\x9b\xce.\x88\xef\xdd\x1b\x0fN\xdc\x06mX\xf20{\xfd\x9bW\x93e-\xbb\xf6\xc2\x16\x9e\xe7Y\x1d'\x19)_e\x8b\xbcO\x05z\x07\x83\xf8\x8bN\xf1}\xffl{a\xb3\x88\xc7\x08R%^\xbe\xc2\x11\xbc\xefZ\xa95\xc3}\xa1\xf8(%U;\x88\n\x0f\xe7\xf9\xa2\x15\xd9\x06\xe3\x11\x0d\xf4.\xe6N\x07\xa0\x10\xfdfn\xb4A\xde\xd3\x87\x1e1T#\x82\xd2\xb9\xff\xd8\x93\x8c;\xdfL\xe0E\x87\xeb\x10A\x11\xaa\x1fn\x18\x01B(L\xe0\xb2\xc3\xd4a\xa2\xd4\xd7y\x96\xd4\xb9K\xc4\xc7\xae\x84\xd1\x112\xcf\xd9\xbd8\xedl\xc0\xd2U\x7f\xe8B\x03\xb6\x1f\xa3\xd6\xb8\xfc2\xb4\xab\xaf\xaf\"\x92\xfdcC6\x82T\x8b\x00\x19\x92x\x86L\x08\x95\xf5\x9e\xc7iz\x11\xcf.\xd5\x8a\xb9F~\xa2\x87\xd8\xe0\x9c\x196\xbc!\xd7\xd6ik\xe7\xfc3\xcf\x19R\xfa\xde\xe1w^\x10\xc2&\"Y\xb5)\x89\x92\x14\x97\x03\x02\x93J\xf77\xab\x10=1\xde<\xc6\x13\xee\xd6XG\x17T`!sf\x0dQ\xf9\x1f\xd0\xacY\x8cJ\xdf$\x0b\x8c+1\x89o$#\xad\xb8\x9c\xc6g\xf4\x8bp8\n\x07\x83\xd6\xe9\xe6\xa2. \x9e\xf2\x92(8C\xacc\xc6\x82\\`\x11\xadbT\xaerH>\xa6\x90\xfcQ0\x1f\xba\xee\xd4N\x1c\xd6\xf7\x8bF|\x15]\xc5i\x82&#\x1c\xeb\xfc<\xe4|\xde\x8b\xb7\xaf9A\x11\x96\xec\xad0C\x0dr<\xf1B\x93\xad\x8c\x07\x94\xaa\x93\x18\x83\xa3\x15qU%\xd9\x12b`\x95!M. \xfca\x9e\\\xfd!\xc4\x97\x80\xfdr=\x85\xe8\x07\xdf\x07\x90\x97\xf0\xfd<\xb9\x82\x07\x7f\x8a\xd0-DL\xd0\xb1\xc7YJ\xdb\xc7\x0e_\xe6\xf9@w/\xf3\x9cu\xf62\xcfEg\x99\x1a\x03Z\x89U\xc6\xf9f\xec\xf5\xc3*\xa9`\x1d\xdf\xc0\x05\x81Y\xbc\xa9\x98W\xcd&K\xf0\x02!\xc9\xb38Mo \xcd\xe39\x1dP}\x9dC\x92\xcdIA\xe1\x9b\xd50\xcb\x8b\x84Tt\xc8lL\xdc\x07\xc7\xb0\xa5\x98\x9fX\xdc\x19\xf9\x0b\xd3m\x1bR\xf8 h\xe2\x9ci:\xb0\x9a\x9fRq\xbb\xe0n\xa7\x06\x05\x122H\xe7E\x99\xcfHU!o\xc6\xc3\x99\xfaUt>c\x7f\x1a\x15B\xf4\xeb\xa5~\xe2T\x92\x7f\xe3\xeb\xf2d`\x12\x8c\xa1QSa?\x1d\x12{\x0cSY\x80\x7f\xee\xcf\xd8\x15\x80Y\x07L{X\xb0\x1e\xfaB\x05\xe5\xde7\x17i2\x93\xf1\xbb-\x96)sa,k=[\xd4\x9237\xf3\x85\xf9\"\x14@\xab\xa1\x17E\x9eq\xba\xc3\xd2O1\xac@\x82\xa4d\x1e\x84\xb0\xd0\xb6\xa3\xbfk\xfd\xb1'\x07<\xc3\xd8xvS\x0e\xe0\xc0]!\x1f\x99\x19\x00\xb7\xa6\x12\"r\x84;o}\x93\x82\xfd\x06\x8e\xe0\x95\xb1\x89\x0b*\x82a\x13)\xfe\xab C\x00\\9\"\x89w\xf7d\xa5\"a\x16\xc2E\x08I\xe0\x88\x08\xc6C\x8b\x1bK\xe3\x92^\x07!\\\xdb\x8f.\xb7\xfb\xfcf\x95\x07N Ud\x1c\xce\x08\xa2_X\xdb%\xd6\xcf\xcd\x81\xf8p\xcfD\xe6j\xdc\xed:\"\x83\x8e\x0c\xc6T\xb5\xaf\xd0n{_Q\x96\x7f\xe0\x01\x020\xd4D\xa3\x9191\xd0/!V\xed; '\xaf\xcb\xddc/\xa7u\x8f/9\x0b\xfb\\\xcek\xa1;@\xeb\x98\x9e\xb7n\xeb\xa7F\xf7\xa0;\xde\x93\x10b\x1dD(\xac\x14N\x8e\xb9\xa5\x0d\x86c\xdd\xe0^\x1b\n\xee3\x8ffq\xf6\x9el*\x9e\x19\x8a\x8eb\xd3\xc92C\xc5\x0b2\x8bg+\xc2v:\xad\xa1oQP\xf6M[_6\x8f\x9e\xff\xf9\xe4\xf9\xff:\xfd\xe95\xaa\x16\x99\xf6Q\xdf\xc2\xa6\x97\x93c\xc4\xc7\xe2t\xd8D\xf9\xa6&\xe5\x9f?\xbc\xfe\xd1\xd4Ke\x1b_\x08\xdd\xa8\xbc\xa2\x88\x13b \xb5Q\xe1\xe2Y\xaf\x16\xe9\xba\x90\xa9\x97O\xe2\xce)\x94\x9e\x94A\xa8\xfaWf\xcc\xb1r\xb0e\x10\x8c\x80H\xf5\\\x06\x9c\xe1\x91\xbf\xe5j\x1b\x1c\xec\x85P\xc0.\x1c\xec\xa1S\xf4\xc7\x0c\xfc\x8a\x94W\xa4d\xd5g\xe6\xea\xfa\x99\xe9tWtg\x1dx!h\xaee\xfb4\x03\xb5K\x86F\x0e\x19\xaf\xdd\xd3\xef\x19P\x81\x07\x98r\xd5\x90\xe9'\x94GIV\x91\xb2\xfeP\x12\xc2\x1c\x1b}F\x9d\xe81`\xe4\xd3.X\n\x80P\xb3\xd3kE\xab>\xf2:\xefG|\xfa\x85\xf7O\x87\x8f\xbe\x0d\xf4\xcd\x9b\x8f\xa5\xc6\x0fH\x03$TM*\x1a\xe37|\xed\x98\x95@\xd9DS}\x1a\xa01\x8fN\xb9l\xd0A\xb1\x060\x00\xeb\xb1\xf6;\x98\xc8Z,\xe4+\xcf\xeb\xd7\xb3\xf8\xfb\x82\xab\xbb::?'\xd5\xeb|\xbeI\x89F\xcd\xc3C\xb2f~\xf7\xea\x0d\xc3\xe7b\xbc|4\x7f)\xd5f\x8e\xa1\xd4Z\xd8\xcd\x859\\\xdb\xb4\xeeV\x1d\x0d\xaf\x83r>\xff;\xaaVqA:f\xd3t\xe7\xce\xca\xe4\x82L\x94\x8at\xfa\xa8\xc2\xfa\xc7&)\xc9\xbc=\xe2yR\x15\xf4,v\xfe\x80\xf9\x94\xd5C=4+\x10\xdc\xe1\x12\x84-8\x98\x11W\x7f\x0b\xcd\xaf<\xc0\x14\x16I\\\x89\x90\xb2\xccK\xf5\x8e\x04\x1f\xf4\xb8.\xfd\xddt\xbd*\xf3k\x8c\x80t\xc2\xbfj/\xa9\xde\xbc\xdb O\x95\xcb\xe4\xc7\xdd\x1bJ~\x9b\xdc\xb3S\x14\xa9\xae\xba7\xa41\xaf\xdf\xc5\xde\x0d\x7f\xdem\xbf\xe2\xcf\xbb\x17\xc0\xfc\"\xb9\x97^\x80_$\xf7\xd2\x0b,\xf8\xf3\xee\xc5/\xbbH>x\xa2\xbbH\xce\xfc\xc3\xc7\xddy\xb1\xfb\xe3\xfd\xc3n\xfbW\xbc\xfd\xee\xb5\xfa\x9a_\xabw\xdbY\xf2\xe7\xddy\xb1\x1b\xe4\xde=\xf4\x05\x07\x7fw\xba\xe7\xbc\x99\xeep\xae\xf9\xf05W\xc4\xb4zw\x94\x9f\xf0y\xef\xda\xfa\xb4\xafN\x7f\x0eG\xddh\xda\x97p\x04\x0f\xdb\x8f\x9eQN@\x04\x00|V.\xf1\x12\xa9:\xebD\x18|\xab\xd6\x12\xa1\xeb\xba\x95\xde\xa9\x950\xf4n\\\xe7\xa5\xa9\xf6\x07\xb5\xb6\x88<\xd8\xae\xf2\x9a\xdfb\xcb\xdf\xd3gg\x94g\x9b*\x03.\xe3\x9b3O\xf7\xf4\x87\xcdbA\xca\xde\xbb\x17q\x1d\xff5!\xd7\xbd\x17<\xc7\x87\xee\x03\xd2{\xf82\xcd\xe3\xfa\xf0@\xdf=\xbe|\xf4P\xff\xf2UV?6\xbe\xd9\x7fd|e\xea\xecu\\\xf4\x9e1\x17\x14\xf1\xf8C\xe7-\x8b \xd8\xfb\xe8\x94\xd4\xfdg\xc8\xdf\xf5\x1f\xdf\xac/\xf2\xb4\xf7\xf8\xa7\xc487|\xf5<\x8d\xd7\x05\x99\x9bk\x98\xa6O\xdf\xb5\xe6O\xc9\xbc\xf2\x1e\xc9\xa8\xf8\xeam\xe7\xe3\xbf\x91\xf8R\x02ig?\xd4262,\xef\xab\x10~\x0e\xe1M\x08\xefu\xb7w/B\xbc\xbb\xc9\xe0\x1e\x9c\xf6\x99\xeb\x9f\xf8\xab\xe7\xfdW\xff\xe0\xaf.\xdb\xe7\x03ei_\xe1%\xee\x0b*\xb5\xc31\xbc\xa2\xe3\x90#\x98\xd0\xdfA\x10\xaa\xda\xd3\x17R\x84x\xd1ol\xe7Z\xcd[\xdaa\x9e\xe8\x0c^\xe2\xbdBWJ\xa5\x9f\xbe4\x89\xc1thW~M%\xee\x1fe\xd3\x18\xd5\xf7E\xf7\xe02\xc4\xbf\xa5\x1d\xff\x13\x8e`E[\xe9\xbd\xa5\xe5\x078\xa25\x8e\xe0-\x15\xb8\xf1\xafwz\x05\xc6\x85:\xc1\x8a\x8e\xe2G\x83\xaa\x03[\xf9 \xdb{F\xff\xfa\x01\xb5ToLr\x81\x98\xeeO\xac\xee1\xfcr\x0b\x13Xv'\xff\x13\x1c\xc3\x82v\xbd\xf1_0\x1d\xe7\x04f\xf4w\xcc\x7f\xf7\x1a7\x82F\xf4\xba\xf3z\xfa\xcf3\xd9\xc1\x1b\xee/\xfb\x8bA\xefH\xc7\xb8\xa6\x1d\xfe\x93N\xbf\xdf\xdb\xef\xcc\xbf\xde\xa3\x0d\xde{`!\x18\xcb\xa0\x8f\"\x7f\x85#x\x8f\x9aj\x1d\x9a\xfcU\x0e\xf2\xaf\xfd\x97\xef16#bF\x88~\xed\x0d*\xca\x08`\x92}\xe9\xd9t\x00\xde\xdcbXC\xbf\x14\xbb\xb1D&\xe7}\xd7\x12<\x08u\xe8\x7fn\xeb\xd2p\x9f\xf3\x02\xc7\x9d\x87\xa0t\x9c\xbbvLa\xf6g8\x82\x7f\xc01b\xc6\x1c&P\xc0\x04\xff\xbe$7\xd5\xab\x0c\x03\xe2\xf6:\xfd\x1b\x1c\xc1K8\x16{{\x02\x7f\xee\x01\\h5\xfd\xbf\xd1U\xab\x15\xde\xcf4\x93\xbf!5)1\xc6\x13z\xe8\x9e\xa1%\xfd\x0b\x9c\x8f\xdb\xec\xe4\x93\x91\x1c\xe7\xc1\x93.\x87$8N}\"\xaa\xef\x1e\x8f\x9669<\x12\xe6u\x81W~;\x18Z\xbc\x95\xeb`\xe4\xb8\xf7\x1f\x1b\x92\xc2\x1ety2\xce)?\xd6g\x85=x\xd2}\xbei\xc2\xf62\x0f[\x11A\x97\x1d\xa0\x15%#\x83\n\xdfV\x94\x8d\xe9\x19\x8b\xb2\x81\xce[\x14\x04<\xcc\xc6\xb0{{{}a\x02\xb1\x1e\xe8N\x06\xc1\xeab\xeb\x81v\xd8cX\xb9{\xd4\xf6\xab\x8d\xcb\x9c\xb4\xaeuG\xae\xf0\xe3\xc7z\xcc<\xec\xc9H|\xb0\x8f\x0f\xb7\x1dl\xe2+\xa9\xa0\x99\xc9\x18&\xec\xf7\xbe`\xf0]4\xcc\xa5\xde2\xfed\x1b\xa6\xfeF\xa3Q\xa3@\xaeZi\xd7\xa8L\xe1Z\xc6\xfb\xb0\x0f\x13\xc0\xe0\xfd}\xe2e\xbdc\x93\xa8KA\x1a\x0b\xb9\x82\xc5\xfd\xbc\xbf\xcf\xaebs?i:c\x1d\xa1\x14\xc9\x82\xf7o\x82\xa7\xb0\xbb\x1b\xc3\xf7\xb0y\x1a@\xc5\xcd\x11\xa65\xecB|\xa6?\x17Y\xe3\xfawr@\xa9\xec\x816\xb5/{\xa9\x9f\x06\x90\x8a^L=\x08\xf6\x87\x05\x0c\xcd\xfc\nS\x8a\x11\x96S3\x04\x9d\xdeo\xfb\x85\xefn%a\x0f\xbe\x1f\xf8\xa5\x01A\xbf\xc0\xf7\x91S*\xa6\x15i\x12\xab\x87\xe05*\x16\xaf{Y\xce\xb3\xd3*w1\xb7\x81A\x05c@B\x0d\xd5\xcbzZ\xae\xa6\xf5\xa7=H\x99\xf7$\xea\xe2\xd9\x0dV3\x05\xc9\x1f\x90\xfe1^w\x04N\xd1\x884M\xe9/\xafr\x9b\xc0\xbc^,q\xdayTs\\\x11\xb4\xdedQ}\xc94;3\xd8\xdb)\xb0\xa4k\xd9\x80\xc2\xcf\xfc\xfd'\x07\xc1\x17h\xcf\xbe\xf6\x92\x1bM \xf54\x03\xc3\x88\x18\xbd\xa4\x92l\x91k3\x87\xd1\x92\xe6Km\xee0\xc0\x94\xb5e6\x81C\xfdKT\xdcM\xe0a\xef\xa5\xc659\xb3\x1ao\x82\xb2nSrF\xb9\xb6\xfb\x9a\xfb\xd0~\xd3\xccOs\x96g\x8bdYEi\xbeDs\xc0~=F\x02J5\xdb\x00\xa8f\xa7\x89\x8d\x91`\x97Z\x92 \xcb[\xafDR\xc5\x12\xfe\x04\xfb\xa8\x87f'\x00\xa5\xca\x94\xb0\xee?\x05J&\xcb\xa7\x10\xef\xee\x06\x94F\xd2\ngjkZ\xb2\x89\xa0\xfa\xd3\x91\x12\x92\x95+M\x83)9\x8b\xe2\xa2H\x11\xe5\x06\x0d\xda\xc5\xe9\x1a\xd1\xb5D\xfd6&)f\x17\xee\x1e}\x88\xf7\xb3\\/\xdb}\x8fOY\x05\x8aD\xbd\xf7\xf4!{\x8d\x18\xd8{\x8fO=\xad[>^Vc\x0e\xa8\xca\xe4\x17\x8f\xa8\x99\xf4\x91\xc00]\xa7S\xc2\x9a\x07\x8e21]M\xe3\xd7\xb9vpc\x8f\xc4\xc6\x978\xae\xa5u\xfa\xb3\xc0\xc0`\x90\xce}\xc4:\xbe$\x7f\xae\xeb\xc2\xa7\xc4\x97\xbc\xa4\xaf)Y*\xf2\xaa\xc6\x1f\x06\xd5\xc3\xc5&I\xe7\xef\xc9?6\xa4\xaa\xd5\xe6\xd4\xe7\x06\xd2\xc1r{\xab\x1f\xf1G\xfa\xfa%\xa9\xf2\xf4\xaaU\x9f?\x1a\xac\xcfMM4\x9f\xf17\xfa\xaf+R&q\x9a\xfc\x93\xbc'\x95\xfa\xad\xfa\\\xffe^\xbc\x9a\xab_\xacHZ\x90\xb2\x8a\xe8\xf3\xbbEc7\xdc\x91\xc4\xad\xd6\xeb\x0c\xf0\x84\x9e\x96\x8d\xfa\x84\xfe\x10-\xf7\xe9\xd1\x15w\x1d\xa1\xb5\x8cGQ2\x81\xd2p\xd2\x98\xa3\xe3\xf2.'\xba\xa8<\x1aM\x8e\xe0C\xe8h\x91+\xc8\xc5\xa0Q>W~\xa1\x97N\x94r\xcd\xa7|a\x00=\xf0If\x1anF2\x15k\xceNDx\x0d\x83\xe7wGp\xd0\xb9\xdd\x00^\xb9\xe5\x9c\x7f\xf9\xfc\xd9\xc0A\xb0\xaf\xf5\x90e\xfb\x7fS\xc6\x17)\x19\x00e\xb6Y\x13Q\xc7\xc0\x10,I\x8f.\x01h\x82\x10C\x1d\xd9On\x01\xb0\x1e\xbf\xa8\n\xe9\x96#\x9f\x88-\xd3\x1f\x138Dl\x11\xad\x8c\xc0\x9d:\x9a\xfbY\x08^\xcc\xfd\x8a\xb3\xfe\xd4s\x17\xfb\x18\xde\x9c+\xef\xdaO\xbdRG\x05KL\x05\xb5_Gt?\x1f\x1c*\"\xaf?\x1d\x1c\x82J\x072\xff\xe1\x81\xf2e8<\xf8\xce\x97\xdfn\xfbek\xb4\xe3\xbe\xdc\xba\xcf\xc3\xc3\xc7\xe6O5R{\xfb\xd0o\xbd\x92$\xb2\xd4c\xb7@-\x0dr\x13c@\x1fy\xf6\xdb\x93T\xea\x07\x93\x1b\xf1M\xec\xb6.\x1f\n\x7f\x82\x83\x8e\xb5x\xc3\\\x1e\x9c\xc1q\xfb\xe7\xc4\x98\n\x8d\xb29\xbe\xa6\xf5Cc\xeb\x87\xed\xd6\x0f\xcfP\xff\x1eDW\x07o\x0bRbL\x9aWh^\x12\xd7 \xc6/\xb9y\x9d\xcf5\x1e\x9f*\xa8[\xa9\xddTE\x0b&kP,\x10&\xe8\xf87\x13\xf4#\xf0I\x10\xb0(Qy\xd39s\x84U\xd2r}\xac0\xc7\x96\x174\x86a\xab\xf6'\x01L \xe1W[\xfaE\x1e\x9e\x9e\x9e\xbej\xfd\xc5\xcc\x02\xc9@8K\xdd\x12\x8dC\x00\xfb\x12\x99\xc8\xad\xc0A\xbfnG\x84\x80]\xf0\xce1}P+QZ\xb5\xf3\xff\xfd\xfe\x9b\xff\xf1\xf7{\x7f\xf4\x83\xf3\xdd\xa3\xe9/\x1f\xcfn\x9fN\xbe\xff\xd3\xe7\xe8\xe3\x83\xe3\xf0\xe3\xc7?x\xde}\x96<\xed\\g\x99\x0b\x0df\xb0\\\xe8\xcc\xf3\xb0\xb1\xa1\xdbo\xfa\xad\x95~}\xff<\xf8\xe5 \xbc\x0dD\xd3J\xe6\x12\xff<\xf8\xa3@\x80\xe6\x83\xe9\xf9Y\xf0\xc7o\xf8s\xcb\xc6UF\x851X\xe7~M\x87\xd1\x0f\xa4nX\xdc\xd8v\xa0\xf0\x06\xbd\xfb\xfdtL\xa667\xb66+N\x1fw\xf6\x90\x03q\xc6\xc4\xcaDWA\xdc\xc1\xb1\xe0Vb\xcf\xeel\xb3g?\x7f\x86\x1d\x12\x15q\xbd\xaa\xfa\x8du\xaa\xb3jC\xb1-@Qs\xf1\xea\xfd\nR\xb6\xcf!\xc9\xa0\xd4\x9b\xa8*\xeaXZi\x9a\x1b\xa2\xcc\x03\x87\x85\xf7\xee\xd9\xfbg\xafO>\x9c\xbc?e\x83O\xa2:\xff\xa9(laSD\xb9\xe2\x0eg\xb4\xa7ibP\xa6\x8aB;\x8c\x07\xe9el\x83}\x1cX\x87\x04\xd0\x18j\xdbk\x8aR\x15df\x8c\x13\xa6+t\x95XX\xd1\xdc\xfd\xa35\xa9W9\n]-(\xbb7 i\xfed \x9c\xa8Z4:(]\xc1\x0c4\xbe\xc9\x06]-(\x85\xa1W\xb2D\xe8\xcd\xe0Gz\xa7\x97\xfe\x9b\xf6\xaf\xadT\x96\xa0U[b\xe3\x9a\x0bp*g\x95~\xe6\xef?\xee\x06\xff\x00n\xb6\x86o\xbby(\xea(\xa9\xde>;=t\x125\x98.$/H\x16\x17\x89\x91\x89\xe0Y\x15(\xae\x17\x0d\xae\xd3\xc9\x1ez\x1a\x16<\xa9N\xaf\xe3\xe5\x92\x94\x07#\xc6P\xb1O\xb6\x18\xc3\x81n\x0cy\xf1j\xce\x12\xf0\xd7Q2\x7fY\xe6\xebwq\xbdz\x8d\xf8\xcd\xdcI\xeb(%\xcbxv\xf3\xaa\xff6\xa6o\x97\xa4\x96\xc7\xf9\xfb\xf8z\x84\xf8\xc2\xd9[F}\x8f\xd9Ib\xd7\xd7J\xc9/\x12[\xd7\xbc5\x18!f\xbb\xd5\\+\x11\x8b\xcb&\xa1\xdf;x\xe2$\x83'Nb\xa3z\x89\x12\x19i\xc7p\xef%H^\xa2\xf2\x85\x83\x0c\xca4\xf7\x13\x19\xf0\"\xf6\xf9\x1f\x9b\xb3\xa8\xca\xd7\xc4\xb7\x03\x14\xba+\xc2\xee\x16\xb5uu\x91\xd7\x0c\xd9\x10\xd0>>\x9bK\xdc\x80#\xd8\xd0\x87$\x9e\xad\xd4\x87\x15\x8b\x93Q\xaeQ\xcb\xc5w\xc4\x98\x0dQ\x90\x99~mY\x005D/\xb3\xd4\xa1\xb3\xd9\xc1\xb5F\x96\xaf\x8e\xbe\xf9F\x8emn\xba\x8b\x82\xde\x89m\x0c2+\x0e\xda\xccx\xca\"\x9f\xbd\x17\xc2\xa2uZ\x0e\xac\x9d\xc0\x18\xcc\x92\x15\xafIMJ\x0d\xdb!\x8a\x1cgE\xc7\x19\x07\xb0\xe3\xb0\xe7D\x91r\xe0\x948\xf0\x08;\x9did\x0d\xf6{\xb3<\xab\x93lC4\xa9a\xd4r\xc5]qs\x9f9\x7f\x99\x9cqE\xa1\xddj\x83\x02uK9\xad\xa8tB\xffc\x91\xca3\x8a\xc6\xf8\xf4\x08\xa6\x99ev\xc0\x87\x86\x87\xcb\xb4r\xa8M\x076k\x84\xa6\xfd\x00f}{'\x13\xbd\xd4\x15\x12\x9d\x9f\xe7e\xb2L\xb28U\xc4)\xe6\x96\xa1}\x83\x12\x8cBT\xc2\xf6O\x96\xb7\x9f%L\xe7W\xed\xd6\x81\xe8\\\xab\xbbE\x86\x00Td\xc4\xac-\xf4\xba\xcd\x98\x02\xbc\x80#\x98M\xf7\x1c\x00NKa\x84\x91\xe9\x0d\x15P\xda0*:0\xaa\xac=\x9b\x19%\xfb[\xe4\xe5\x9bm\xcc\xce\x18\xeb\xb6\x04\x0e\x9d\xb9%U\x84ZV\x06\xda\xd7-\x92^\\QzQ\x07\xe0\x15e>\xdf\xcc\x08\x1f\xdc\x15\n\x02\xb3<\xab6\xeb\xf6\xb3\x8a\xcc6eR\xdf\x88g\x9f?\x83\xbf\x9a^\x9d\xa1\xb1\xdb\xd5Y\x08s\xb6\xf3V\xba\x0ca\xddB\x01\xb3A\xc6f\xa5\x909v\xa64\xed\xd0\xbf\xb97\xa0\x03\xc8\x80\x83m\xcd\x14\xf5N\xf5\x81{\x18\x98\x14\xe1\xbar\x03G\\Ab\x9f'X3pt\x8b\\\xa0\x8b\x10\x9d\x16(\xd1M\x1b\xa2;\x0f\x9e\xc2\x8eO\xa7\xe8_\xc0\x11\x9cG\x19\xf9T\xfbA\x10\xcd\xf3\x8c\x04O\xf9\xe4]\xc1%\n\xed\x8f\xb2z\x17,\x00\xa8\xdb\xbcD\x91#>\xa1(um'3\xdd\xc2n\x90N\xce\xc6\x8eZ\x94\xde.\xa3\x0c\xcf\xc9\xb6\xad\x01\x87\xc7\xa7\x91h\xa4+\xa7#QKW\x9e\x8fD7]\x19\x87\x82\xba\"\x17\xf92D\xa7\x95\x0eZ^\xd3\xe5\xa3\x98I\xa1\xe6_\xc2\x11<\xebb\xe6'\x8e\x99;\xf6\xab\x981\xe5\x8a\x87\"\xbf\xdc\x06uu\x85bb\x87\xd7v>\xc5mE\xde\x1be\x1e\x81\xb7\x19*p\xc4\\\n\xc4\xbcq\xfe\xd4q\x9d\xac\xb5\xb6\x150n\xfdJ\x0f\x1b\x8d\xf9K\xef\x89<\x89T\x85\x08G\x8e\xceMQ_E\xbb\xe0J\xd8\x87\xdf\xe9T\xb4\x85P\xd1\xf6\x82Z\x03\xf7\x17\xb6k(\xf8\xf0\x98\x07\xa4b\x11\xa1\\\x15rs\x08\x8d\x06\xab\xdf\xe9jL\xa7D\xb9w\xfc\xfb\xc7\xeb\xb3\x07\xcb\x84]\xfe\x0d\x80u\x9c\xe9\xc1\xe3'\x036\x16\xffo\x98\x1e\xdc\xcd\xd5s\x9a\xc7\xf3S\xa3\xc2\xb0\x94\x9c3\xd3R\xd0\xe6\x0d\xe9\xdb\xf5\xc9\xc6\xe4\xdb\xcb \x90(\xbf43\xf2\x9b2\xa5U6e\xca\\\xc5\x8c\x15\xab:\xae7\x15\xe6$\xc1\xbfl5Y\x8aPQ\x9b\xfe2\x7f\xb1\"\xf1\x9c\x94\xd5\x04\x12\x9fD\xfc\x87\x81B\xe8\x1b\x89\xe1\x08r\xf1\xe5\xd4\xe3y\x84\xee\xd3\x9d\xe7\x19\xf4\x10\x1b\xccC\xf9\xf93\x9c\xfb\xb1\xd9\x0f\xca\xdf\xa0kKM>\xb1\xf8\xe5\x17i~\xc1\x14X\x17\xe8'\x1e\x88\xcd\x1c\xd5+\x929(\xb9)\xc9\xceY{hH\x97G\xf3\xb8\x8e\xd9\xdf\x9b\xc0r\x00]\xf5\"\x01;(\xea\x84\xa63.\x8a4\x99\xa1\x02\xe9\xc1\xcf\x15\x8bO\xc1\\w\xfer\xfa\xf6MT\xc4eE|LA\xb4l\x8c>\xe3\x05\xf91\x8f\xe7C\x0c\xf4-\x1d\x85\x0e\x84\xa2\xe4\x98\x01\x01\x8e(\x85\xc8\xa3\xfc\xe2g0j\xf5\x9dX\x83\x9c\x8d\xf5\x84\xdbl\xeb\xb9\x01\xfd\xe9\xc3a\x91\xf7\xa9\x83\x9b\xe1B2\x9cT\xaaO\x19\xf6\x8c\x94a\xafM\x19\xf6\x18e\xd0\xe3\xaa\xce\xbf\x04\x94\xa5\x15\xe3SC\x8e\x10\xa1\xd6e\xf6@:\x1d\xaf\xf9r@ \xba9\xcd\xe8@\x85\xbf \x9a\xfaGI\xc5\x1d\xa1\xa6\xd9Y\x00\xc7\xac\xd2\x04\xa6\xf4\xff\xb3\x10\x7f\n\xb9\x8b\xe2\x93\xf0U\xd1@\x1d\xf1\xb7\x1b,s\xc0ld\xe0\xa4\xd0Gfy\x99\xf0#C\xc4\x89\x13\xcfd\x9c\xd1\xa3\xadl\xaeVm\xfb\x0dS\xe0\x17\x12\x15I\xf1\xa5\x06,\xcdM\xe3,Oy\xd6\x9a\x97\x98\xf0\xcc||\x90(N\xd3\xfc\xfad]\xd47\x18;\xd8|||\xd9\xcc\x8fE\xf2\x1dJ\x1f\xf5WX\xdd\x04@es\xfdb\xc8\xc8\x1f\xfb9\xcb\xdfp\xc1\xa2k\xa8 \xcd\xe5\xd7y\xff\xe3+\x91~'\x9b\xe5s\xf2\xd3\xfbW\x86\x80P\xa0p\x92\xa8\xcdM\xb8j\xe8\xa6\x99]\x1eX\x1dma\xd0\xfc\x16l\x81\x19\x95\xcf;\xf7\xe4:\xee0\x08\xcdW\xbe\xb9m\xa9rfd\xd4\xde\xbf8C\x97G\x18\xfe\x1d\x8e!\x8f\xd6q\xe1'A\xf4s\x9ed\xbe\x17zt\xf3z\xebMZ'\x0c}\xd4J0\xe9\xd4\xd7\x03`V]M\xc0\x0b\x0d\x06\x99\x15\xbe\xfd\x1f\x07{\x86\xf75{\xbf\xf7\xc4\xf0\x9en\xbfj\x02\xdeg\xaf\x0fP\xa4^\x94\xe9\xc0\x14\xd0\x9e\xe7\xb4M\xab\xe1{\xe0\xceU#\xda\x02\xce73U'7Dx\x85\xd1\xd64\x1b\xb8>\xa1\x9bvg\xa7\x8c\xaa\xcb\xa48\xa1\x88\x9ed\xcba\xab\x82\x9c\x87\xeb\xefo\x0bc\x88V\xe0l\x95\x1d\x83EQ9\xf6/\xa2)\xc6^ny\xe2\xbf\x9d6\x82v\xa3Q\x88\"6\xf84\xa1\xc7\xcf\xc6\x8f\x8d\xeeJ\xa2pc\x1fC\x1a\xd2\x10\xf2 \xd4\x05v\x0e)Oo$0\xeb\x86\x9dB\xa90Y\xa0\xe1\x91~\x14l\x85\xcc\x0e\x0eI6Of\x14\xa3u\xf1R\xbb9o`\x00\x8f\xd3\xdf\x8e\x95Aq\xc3*\xf9\x08\xee\xd4\xf3\xd0\x9d\\[=\xc7\xd6\xfe\xb1!\xa5!\x8203\xa9Y\xe4\xe5Z\x7f\xd0\x0c\x86fM\xfb\xfb9 \xc6X\xb3@\x83\x04\xb1\x9fL\xc9\x19;)\x07\x10|`3\x168\x15\x83\x8c\xc3d\x12\xf9\xf29\x7f\xf9\x01_\x9a\xed;P\xe8{\x80\xf4\xbb\x88\xcb\xfa\xe3\x03\n\xa9\xfbT\"y\x90D5\xa9j\xbf\xb0\x9a|\xf08j\xa6\xf8\x9d\x80J\x04.\x01d\xe4\x1a\xe6\xa1\x06\xa8=\xf6\xd4*\xd6\xb06\xa3\xb8(H6gAu\x92i}\x86\xf6\xbdC\x00\xd6om\xa6\xf4\x94\xe3\xac\xfc\xc40\x1d\x1ez\x98\xe1T\x7f\x07j\x91L\x1bq\x058\xf8V\x98)\xb2*\xd2\xa4\xf6\xbdco\x00\x01\xae\xa0g\x0b\xbc\n\xa1\x1b\x8aB-K\xba\x9b\xa6{\x03G ^ O\xf7\x07j\\\xa0=\x86\x19\x85nl\xf8q\x8e\xe9\x96\x04 db\xe6\xcd\x00\xb2t\x90#\xd7 \x87\xeb\xa6\xe3\x8bu>%f%6e\xab.ZCl\xa8\xf4\xf9PFmP\xa9u?\x0b\xa7(&\x8c3\"\xc4\xb5-\x9d\x8d(\xf2fSG\xb0C\x96\x0c\x08\xcfG\x12\xb0l\xbf{O!\x83\xef\x81<\x85lw7\x10bYC\xb8\x87\xac\x8d\x04gRG\x8b$\xadI9~1\xccZ\xfb[\xc1O\xde3\xb9@@\xd3LI\x8f\x84c\x0fv\xf1(\xf7\xfal\x1d \xa3p\x11BE\x99^}{L\xe1u\x04K\xd8\x85\xeb\xb0\xd9\xd4x\x928\xecj\xed\x94\xbe\xb2\xc1q\x08uT\xad\xf2M:\x7f\x91_gi\x1e\xcf\x9f\xa1Z\x8deg%\xe9\xc2p\xdd.\xed\xc3\xfc\xcc?\xe8eK\xa4Eh\xc5\xf7\x86\x94\xe2Z\xa3\xe6\xb9\xd0\xa7\xeb^\xae\x1a\x8b\xe7\xfe\xcb+\xf1Rc\x0f\xad\xba\x1a\x0b\x9b`\xf9\xec\xcf\xec\x8c\x136\xc1l\x07Ri\xf8m\xf9\xbf\xe9\xea K\xce5)\x97\xe4U\x86\xcf\xde\x96\xb4\x02\x1cA\x8ao\xb8\xc3\xb7C\xc0\x1bh\xd6Zz\xdf\xd8\x11\xdf,\x11\xb2]Y\x7fq3\xda\xfa\xb2E\xad\xfb\xad(B\xf2\xeeg\x90a \xbaK\xab\x9b\x03\xaa\x8c\xf5,2\x08\x82\xaa\x01\xbf_\xf2\xc8\xe85\xfe\x95\xf9\xa4\x97\xa8[6\xd1F}Z\xf9\xe0;\x8d\xc5\xfdZ\xa0\xb5\x169\x97\x02\xc5\xbe\xd5\xbd\xbd\x11\xdf\xf6Ru\x02?\xf5\xe4\xae\xd2\x83\xa3\xed(op\xda\xe8\x83a\x02\x9a\xf4\xee\xdd\x1d\xc0\x8f\"\xdbI \x88?=2\xaf\x14S+y\x94\xad\xe3\xf2RRj f\xae\nUL,!\x17Kn\xa0\x97\x01\xf6\x8d2\xc0~[\x06\xd8?\x1b\x08C(Ng9\xcc\xeb2.\x1c\x0f\x14\x16\x82\xfdi\x00\xd5u\xc2T\xc5QQ\x92+\xe4\x8d3\xf2\xc9\xca6\xce\xe2\x8a\xc0\xded\xb0\x0e\x08\xd3,\x93\x10[\xdb\x84X\x91\xc2\x1e5\x02\x14\x96u@O\x1c\x0c6\xbf\x92\x04\xac\xf9\xfb\xf3gL.\xa7\xdd6q\x10\xc2N\x1c\x95,\xa4\x04\xa6)\x9b\x91\xa2\xce\x07w\xb9Z\x18`\xe0\x08\xf6\x1d\x0d\xb1.J\x12_Zk\xda\xef\x87\xe5\xb5$\xef\xff\x11\x9d~\x7f\x1e\xda\xfb\x17\xb5\xe0\x9a=r[3\x12\xd5{\xcc\x1c\x9fdu\x08\xf4\xe7h8=\xf9u\xc1\xc4\x87\x1c;\x00\xe1\x89\x1d\x08,\xe3lmYjlm\xdfa\x1f(\xa7_<$|\xc6&\xe13\x1c\x96/y8+\xce\x81\x19\xbb\x90<\x9a\xb1\x1f~\xb8\x88\x08z\x92,\xec\x1f\x86\xca\x0ex\x14\x82\x8f\xf9\x1eJ\x8c\xed\x82\x071\x06y\xa1O\xcbt\xf8\"\x0b$\xe0\x1c\x90Q\xb2\xab*2\x8aa<\xa1{]=@|\x16\xaf\xd4\xadw\x07,\xa0[A\xed\x1a HU\xe4YE\xbe\x84\x82\x1c|\xf7\xebn\x8d.\x0598d$\xa47\x13\xa3\x0eP\x14\x84\xdc\xc1\xa1\x1b\xe4HT\xef\xb7\x89\xc8\xfexP=\xfauA\xc5\xc7l\xc9\x0f\xc3\xc0\xe0\x82\xbe\x8c\x8c\x18\x9c\xc3Da\xcd}goN\x82\xe5\xd0\x01\x83\x10$.\x1d;n\x04I\x0b\x0e\x9e\xe0b\x1e\xb0\xbb\xb4\xb8\x9e\xad\xfc\xfd\xc3\xc0\x10\xafFW\x9ai\x1c\xda\xa7\x01w\xb8\xba\xcc\xc4\x8b\x8e\xdd\x01.\x87\x0eh\xce\x1a\xf4s\xae\x94c\x19%J\xc5Z#\x08\xf8\x8f\xe7\xf9\x1c\xc3\xc5\xf2\x9fL]\xc5L@ \x97{Q\xde\xc6G\xf5A\xa8\xbb\x99S\x0b\x1b\xa5\x03\xda \x19\x8b\xf2\xcb\xd1\xeb\xf3\xd0\x02'Q\xeev}\xf0\x16\xd1\x0d\x9c\x89\x0e\x9c\x89\x04'}\x1cv\x93\xcfw\x0b\x82\xf1\xe1\x81\x1d\x8c\x92\x8c\xc6\x17\xe5\xa6\xa8}\x8f=\xf0\xc2^ \xefna]X\xf0 +y$\x9b{#\x86R\xd5y1`\"\xa9\x07\xf9-K\x93\x871S\xa7\xc6o\xa7\xf4\xcc?x\xa2\xd7\xf9i\x02\x18\xdc\xea\xd4D|\xa0v\x85t\x03\\\x16\x92\x10\x07'%![(\x8d\xdbnVB\xa125*{\x06%B>\x98\x07\xfe\xcfU\x9e}\xfe\xb4N?\xdf\xc4\xeb\xf43\xa6\x00\xfdx\xf1\x80\xf1\\_|\xb9\xd3\x8d\x10\xb2\xad9\xe1\xc3\xfd\xffxk\xc2\x81\xc1\xb4/1I\xa0\x06Q\xfe\x1eCi\xe2\xd5\x97\xf7\x00\x83\xa0\xe0M\xba]F\x16\xe6\x04\x99`\x02\xddkTS\xe3\xb3\x01\x13)#\xa3\x85\xbaR\xba9\xd8\xbc\x9b\x00\xcfti\xce\x95\xa5\x19GZ5S\x991+g\x9d9\xaa#i]\x0c3\x19\xeeW\xa4\xfc\x0b\x85\xf1\xd2\x8d\xcaiL\x85\x9d\xf1\x19i\x94ua6\xca2\x0db\xee0\x08Q\xb9e&\xeb\xd4\xfaJ\xdf:zAY\xf6\xb8\x88\x9b4x!\xe1\xc5\xf3\xb9\xb0\x8a\xff\xfc\x99\xb2#\xeb\xfc\x8a\xb4\x9f0\x06\xc5\x10\x99\xc6\xb8/;\xc6Z\xa6 ^\x0d\x82\x0f\xa7\xff\xf93\xd0\xb9\"$\xd7\x9b:\x16\x90D\xc9\xfb\xc6\xd1\xd4x=\xd8\xcf\x15o\xdfo\xe0AA\xd7\x07\x80|\x8a\xb7\x16\xbag/\x08)\x9a\xe7n8\xb4t\xc0\xa1\xaf\x8e\xc87Fcl\xb3\x87\x06\x1f\xe1\xa9\xbc\xd6Z\x92\x1aM\xaf\x7f\xb8y\x97'\x19\xa5\x08\xfd\x18\xb8\x00.n\x0f\x82\xbcw\xb2\x86\x86\xda\x88\xd1\xbf3\xff\xbas\xa3\x84\xbe\xecz1t\xeb\x7f\xce_\x1ej\x0d\x06\xae\x87\xec\x10N\xc4\xa7\xda\xdb\xdcO\xe26W\xf7\xf2T|\xaa\xb5~x>d\xc3p)>\xd5:\x0c>\x13o\x1f\xf7\x8d\x18\x9a+\xdc>4\xe3\xf9|2,'\x8b2(3\x81\x90\x9b\xe8>\x1d0\x1c\x1c\x92\x9b@\x91\x9d\xb4\x154\x08\xd6o\x89\x93\x85 $\xbaw\x94\x8a\xde\xe9|9a\xb6Ny\xfb !\xf5\xba\xab1S\xba\xe8\x1a'\x8a8\x899\x19\xca\x86\xa3\xe5\xdc\x06\xdd %\xad\xb7!L\x87\xb6\xa3\x89\x9a\x9b\x0e\x1ae=\xdb\x8a\x0b\xdd\x9a\xdaV\xf1\xaa!\xb6\xe6\x11f\xcc\xeb\xf85\xa9c\x1c\x1d\xa9\x00\x83}\xadI\x8d\xaa\xcd\xb5_3\xd5B\xc7\x8f\\\xd0\xfc\xcf\x9f[xEk^\xe9)\xd7U\xc8\x9b\x15\xe9l\xafl00\x9e\x85\xf5Y\x10\xde\xf1\xc8m\xc0\\v\x0e\xc7a<\xbb\xd0\x83`)A0\x1ee\x14\x06\xe0\xc2\xc8\x00h\x9f\x8a\xdd\xd7{\xa9a\xcf\x8a\xb8$Y\x8d\xa1\xba5<\xda\x10\x83\xd6\xf1\xf0\xac\xed\xf1\xaa\x95\x84\x9aG\x98B\x17\xf1\x95]\x9b0\xbf\x97\x92\xf9\xbd\x18aE\xfbE\x9f\x18\xd4\xc3\xa2s\xb0\xa5O\xf1\xba\xef\xfd\xa3\x01\xc6\"\x8d\xeb\x9ad\x13\xd0\x04}Yl\xd2\xf4\xe6\x8d\x08g\x84s\x1e\xe1;\xbe\xf0g~\xea\x93\xae\xf6\x1a\xf4\xe3\xc8:\xddh<1\x93\xea]\x99\xaf\x93\x8a\x8c\x18D\xc1\xb5\x86s\x9f`,\x14\xa7\xb1p\xcf\xae7\xe4\xda\x117\x86\xe3\xa3\xf0\xa1\xe0}m\xa5U\xb5\x01\xb8\xa8\xdb`\x08\xcf\xc1U\xc4j&\xf7\xaeL\xd6I\x9d8kA\xdcg\xb9\xf9\xcdg\x99T\x7f\xa9\xf2\x8c\xcb`+\xdd\xfb\xe7L\xde\xed\x89i\x16\x84\x92jn!/\x9b\xb4\xdc`\x1a\x18\xefQ\xe3\x1b\x9fT\xaf\xb9&b\x02W\xba\xd7\xcf\xe6s\\\xb0\xa6\xdaZW\xed\x7f\x92\x8c\x94q\x9d\x97#\xe6\xf5\\\x92d\xe5\xfb\x97\xcd\xd7ns\x13\x1fL@\x93P \xa9\x18\xdb=\x81B\xf7\xf2\x84\xe5\xaeu\x1eq+x\n~\xdc\x1fc\xeb \x95\xdf\x15C\x1f\xa9\x0c\xfd\x9dRap#t\xa3\x8e}A\xae\xb4'\xdb~\xba?\x94fm\xf8\xd3'{\x03\x86M\xb6O\xb7\xcebw\xb0\xf7\x9d\xf9\xd3\xff`s*q\xbfw\x07\xfeJz>\x8c\xe5o\xe8;\xae\xe8k\x97\xbcv\xcfF]_\x9d\x850\xb8N\xea\xd5\xf3\x92\xccIV'qZ\xc11xI6K7s\x82&`U\xbc&\xf7Y\x9cx\x8d+\xb6`\x03\xc4z\xdb\x14yd@hB\xe7\xbe\x81Pm\"p\x9d9\xbd&`G]XML\x01\xecX\xf5\x1e\xb0\x8cyTA\x8d\x177,\xfc=\x9b\xd1\xb6&\x9a\xd0g\xc6\xcf\x06\xd2\x1b\xcd\x9a\xe5\x99h\"\x88\x01\x8aw\xaea\xe0@\x95c/\xf2\xb9>x\xa7.\xcb\xc9\xef\xcc\xbf~\x85\xdb\xbdd\xe8\xb2,\x1e\xf0\xe9]\xc7\x97,\xb7\xf2_N\xdf\xbe\x11N\xbd\xb3\x94\xc4\xe5\xf3x\xb6\"6\xbb\xd6**\xd2\xcd2\xc9\xaa\xa8$\x8bJ\xf9\xb0cB|\xeb\x9aQ\x1eT\xc2R\x9b\x17J\x10\x97z\x95\x18\x92\x99\x9c\xa0X\xd8\x19\xe0<\x9f\xe1\xf0X\x14]\x12\x84\xdd\x19,TX\xf8\xd7C\xeae\xddf2\x84;\x01\xd3f\xba0\xe0\x97~JB\x8c\x9a\xb6\x07m\xd0i\n\xeb \x01N\xd5\xb0cI\x81\x931MM\xd3X\x13\xf2>\x08\xf5\xdf\xad\xf5\xdf1\x9cN\x08~\xc7\x8f.$\xec\x85\xb6~\x9c\xa6o\x17A\xd8\x8d\xf9n\x06\xb55k\x9b\xbc\x11\x1a\xa6<\x17qE^\xe4\xb3 \x9clCi\xf8\xf0\x07IfW[\xa1\xe5\xbdE\xa1\x82\xfe\x8b\xa4\x9aQ1$c\xec\xaa\x86\xebmj\xf3\xd5y\x1d\xcf\xca\\\xcb?\x8b\xb2\xce\xe7$\x15\x94\x86W\xefGE\x01\x854\x9e\xbb\xe4E\x86\x8eos\xdc\xac]b\xf4mv\xd5\x1b&\xdb\xb8\x1d\x8b\xf2\xa5\xee\xc7\xa2\xb8\xba!\x8b\"\xcf\x8a\x9e\x07\x87\xc9\x16\xb4[\x98\xeb\xa0[\x8fc\x1c:D\x91#\xb48v\x882\xac\xf2\xe6\x8e\x1e\xe6f\xb4>\x1b\xa283D\x9d\x0f\x9c}8D1(\xd2\xfd\x00&0\xeb%\x13\xb3\x9d\xe6\xa0\x90^\xc2N\x083\x8b9\x94pl1\x1cd\x8bE\x92\xa2{W\xff~\xde\xc4\x8fT(\x8c\xbe\xee\xaa\x1d\xb0\x0b3\x17\x19R\xdc\xb1]\xd2\xa3E\xfa\xcak9\xc66}\xd1\xd7^\xf2\xa6U\xc2\xa5\xaf\x89\xf1\xe3\x9dy\xf9\x0b^\xdb\x91\x97?g\xebr\x99\x14B\x97\x87<\xa7\xbe\xf25\x8b\xe7U\xd7\x1a\x19\x1d\xb8\xc1\x13\x89\xf8Ibd\xfai\xad\x13tc\x0e\xb1E\xbc\xd5\xbe\xa6\xffl\x04\x9d\x0b1fN\xed\x97\x18\x91\xd1\xcck\x8c\xe03\x1cy\x8c\xdb\xc0?\xe1t\xbf\x9b\xfa\xbd\xcfZn8\xf7\xa8\xb5\xb4\xe2\xd2\xfc\xbe\xe6\x15K\xbbY\x19Rnf\xfe\xd6\xba\x83\x83\xbd\xad\x93\xbb?\xd9Z\xfe\xdfZ\xfa\x1f\x18\xabU\xf6W\xdf\xdc\xb9\x10a\xe2\xc8\x0d\xfaOy\xa2\x9b\xd9\x03TAE\xb3\xb8\xa87%9\xad\xe3\xd9\xe5\x872\x9e\x1186\xbd\xe1\x04\x9d\xfe\x1b\xcd\xf2\xac\xaa\xcb\xcd\x0c\xdd\xdf'\xecYEkR^C\xfan\x06\xec\x99\xe5\xaaA\x1fx+k\x05\xde*Y\xe0\xad\x92\x05\xde*ww\x03\xc8\xa6e;\xf0Vi\xe0\xacqpkRU\xf1\x92`\xae\xc6\xbd\xb3\x90\x99\xd0\xd4\xad\x93J\xa7l7\x11\x8c\xac\xb9\x8bW\x9dUC\xf5\x05\xcf\xedC\x8f`\xf5\xa9\x02:\xfai\xd8q\xa8\x1a\xad\xf5\xfb\xed\xf12\xa9^\x96\x84\xa47o\xe25\xb1\xe7w\x90\x86\xe4S\xd2\xf2\xc7\xd1\xae\x1d;\xc4\xa5\x0b\x9d\x91\x80\x97Q\x92\xcd\xc9\xa7\xb7\x0b\xca\xa5\xfc \xee\xefS\xda\x9d\xcb\x87Y\xf30q\x0d=)WZ4BX#}$\xb1\x12e\xf4i\xf2\x1a\xb9K\x17M?\xc7:\xb80 \x1dX\xe5\x85\xa0f5\x0b\xc1\x13\xe7\x05\xfe\x10\xf9\xf8^\xb4\xbf\x98\x89\x90\xb4\xd5\x83j\xb6\"\xeb\xb8\xfb\xb4\xd5\x88\xf2\xbc\xdd\x95\xda\x0c\xef\xe8\x946\xa7\x1f{\x82cg\xfd= \x9f\xe2u\x91\x12\xefl\x0c\xc6v\xc8\xf7\xc3/ \xc3\xadW\xff\x96*X$G\xc6\xedp\x07\n\xda\xfe6B\xf3\x86~03\n\x87\x8cG\xf9\xc3`\xef\x8c\x9c\xed \xc5T\xef3r%\x91>\xb9F\xab\x8f~'\x1d!TP\xdd~E\xb1g\x90r\x97\xa4\xca\xd3+\xe2w\xb5\x82\x96}[G\xf3\xa4\x8a/R\xc6]-\xe2\x19\xc1\x00Q\xdd1\x84\x18]\xfb\x92<+\x92\xeaC\xbc\x94\xd9C\xfd:\xd0G)\x1e\xa2A\xb34!\x99\\\xc1Nt\xb7\xdfL\xcbxh\xd62\xfah\xed\xffm\x80\x91\xe4\x1e\x05\xba\x8a\x82\xa1\xd4\xa7\xf3\xa9\xc4[\xad\xb7A\x8a\xbb\xf9;\x03SY\xfa\xa9!\x8cb\xe6\xef?2\x06Q\\\x0cEP\xd4\x86\xb0[17\xf9'\x86\x00\x8a\x99\xff\xad\x8e#^s\xbe\xb7\x0d\xd8\x1ce\x0d48\x94\x82A\xae\x06CL\xe5\x8f\xe8\"\xc9\xe6~\xb6I\xd3\x90\x7f\x16\xf0X\x1f\x14\x9f1m\xad\xd2\x04\x7f|\xba\xb9\xa8KB\xdf\xce\xd5\xb7\xe4\x13\x99mj\xb4\xd0\x11\x7f\xd3\xc7\x9d\x18\x8fi\xebA\xabB\x13\xf01\xed=\xa4\x15\xdbJd\xe5g\xc82\x85\xb0\xb3\xe1\x87M\x92\xf2f\xae\xa2w\xcf\xde?{}\xf2\xe1\xe4\xfd\xf9\x0f?\xbd\xfa\xf1\xc5\xc9\xfbS\xd3f\x82#Xi_\xd0\x0f.h\x9b\xef\x99\xd4\x84\xed\xaa\x0f\x10r$-X\x9f\xfd\xdd\x90\x17\xaf\xe6\x13Xc\xe2\xfb\xf6\x86\xc0q+-\xc8\xac\xd1\xe2\xf1\xffY\xd8\x17\xfe\x00\x9d\xfc\x98 \xc5\xfe4\x99\x8e\xdao [\x14\xa5\xbd\xcbm\x17o*n\x0d \x84`\x1d(.\xe8y4\x96fe/l\xf4R\xc8\xc3xt\xef{\x83\xbe\xbb\x94\x08WRi\xcf\x02\x88\xd7\x06\xed/\x89Vy\x85\xbe\xba>\xff\xf3\x082\xfc#@ 3I\x80\xbf\x17\xbf\x8e`\xca\xc5\xdcY\x9e\xca\xe8(\xde\x84\x8a\x13^p\x86_^\xc4\x15y\x17\xd7+\xfe\xa9\xfcy\x04T\xba\xb3/\x80\xaa\x03\xc9\xc7\n\xca\x16e\xd3\xde\x80\xd01\xfc\xe9\xfe\x17\x98\xb8l\xadW{\xb2\xf7h\xdbO\x0f\x1fn\xad\x1f{\xb27` \xf4\xef%\x9a\xa9\xbf\xee\x9c\x1bG\x9bdv\x01\x89\xb8I \xd5\xeb\xb8\x18\x08.\x9e\xc3@\x84\xf0d\xc8\x1dX\x1a\x0chu\xbe\x9b![\x83j\xc8W8\x15\xedj\x87$\x82\xa1\x1fj\x9d\x85\x17C\x9e\xc42C\xa86h\xb4\xe0\xe5\x0f\xf6\x86\xdc\x81\x87Y2E\x14\xbd\xf6I@E\xc1\x02\x8d\xb6\xad\xaa\x1a\x11n\xfdP+5\x89x\xeb\xda\x81\x8b8\xda\x87\xda\xb7\"\x8e\xf6Cm\xc3\"\x8e\xf6C\xed2 o\xf0\x87Z\xafm\xe1\x0e\xfeP\xeb\x98\xed\x94\x08A\xb9\x00\x1e<\x80;\xf9\xb5\x98\x98K\x82^.\x12\xf6b\x98\xcdd,\x92g\xf1'\x99\x93\x8b\xcd\xf2GrE(\xe7\x98d\x8b\xdcR_\xde\xfaO-\xael\xac\xe2\x9f\x93\xaa\xce\xcb\x1b\xb3\xd5\x9a(\x8cy\xb07+|s\x1d\xaa\x16\xcc:|.Y:\xdb\x07U\x1dSi\xc46\xd4\xc2\xb5\xbd\xc6\x0c\xc3\xd2\"\xaf\xf8\xa1$d\x82\x9b\xea\xdc,4\xa9\xa5Z\xe5\xd7/\xe8\x02\x9a31\x89\x12\xa7\xa93\x1c\xd8\xd2Q2M\xa5 FY-h\x91&\x17\xafI\xbd\xca\xe7\xd5\xa4\x8b\xab\x9dd0\x14u\x035\x10\xbcu\xdc\x1d\xc6\\\x93RJ\x14\xca\xc1\x04\xfc\x06eI$\xb7w\xbe$5S\x16\xf0\xceE\x05n\xf3\xad\xd6\xe3\x8f\xfa\xd5Wq\xf5~\x93\xc9\xaa\xecg\xbf\xdau\x19\x17\x05\x99\xbfk\xce&\xfaT\x98\xfa\xac\xe3\xc2\x97\xd5X\x1d\xa5\x89@\x84\xe4\x91\xc0\x89\x1a\x13j\xd1\x01\xc7>fD\xd4T\x8c\xe7s\x7fz\x166\x1cp`\xf9\x80\xe3\\\xf3\x11\x7f \xbf\xdb\x14\xf3\xb8&\x1c\xec\xbe\xda\x94\xde\xd2`\xd0\x11\x87\"\xc1\xbcA\x02\x12\xc2\xd4L\xbd.\xc9\xcd\x04<\xa4L\x03h\xc7Y\x03\xbb\xee@\x14\xe4\xef\xe94\x1a\x9a\xc7\x8c\xf5m\x1f\x82z\x9bV\x87Z-1\xbbBc\x17j\x19\xaa\x8c\x8f!\x83\xfb\xb0\x0f\x13\xd8\x0bBd?\xf6\x9fB\x0e\xdfC\xf6\x14\xf2\xdd\xdd\x00\xcai\x8e73\xadK\xb6\xdc\xc1%\x17\xdd\xbfy\x94\x95 J\xf3e\x13\x86Jc\xbd\xa1\x16\xb39\x8b\xc1Fd\xe8\x90a\xcbtE\xca\x8b\xbc\x1a\x8a\x04\xb1\xd5B\xc9v\x99\xf3_{\xd9l\x0d\xc0\xbf\xcf\x82M\xbd)\x06\xce\x84]\xf0\xce(C\x7ff\x8b\xca&\xcaWX\xcb\x86*\x8dYNKx\x05P\x04dAE\\lk\xd4\x827\xb9\x83*\x13Qr\x83\x08\xd0-B\xfa\x99*\xf4\x99\x9ex\x98F\xb8d\xd70h\xf4\xde\xab\x10\xc0\x04t\x04\xda\xc7\xb0m9\xbf\xc9Qk0\xe9G\xc4\xab\xca\xad\xdcu\xb7\\m\x93P[\x14>\xd1\x9d^\x889\xcc\xc5G\xaeHy3\xce\xb1Y-R\x86<\xe2I\x98\x9d\xbe4$\x1bkU\xb1o*\xde\xb7T\xd4tL-K?\x0f\xc1\x988\xb1[0\x16D\x08\xb3\x10\x16!\x14\xe8\x14\xbf\na\x8d\xee\xab7\xf6\xb1\x80n\x85p\x1a\xc2\xf3\x10.Cx\x16\xc2\xdb\x10\xde\xb9A\xbe[,+\x11o;~\xd0\xadL,V&\xdeje\xbae\xdb\x95\xea\x16\xcch\xdd\xa7A\xf9\xa8\x00\x16C%\x96\xf9r\xb6[\xa4nq\x0fk1T\xec!*l\x85\xa5b\xb8$7x\xd3\xbf\x98.T#\x9a;\x07\xde\xc3\xff,\xe0\xf1\x9d\xd7L\x0f\xe3D\xe3\xd9\xe9\xa3>\xf9\x92\xdc \x0d1%.u-,\xe2\xff\x97o\x93f\xa4\x8f\xbfl@\xe0\x96\x11\xc4V\\\x93H\xd9\n\x9a\x89)\x98\x1b\xa2\xe2m1\x9d\x9f\x85\xa8G[H\xab+\xd5l*\x08Q\x8d\xa6>\xc2\x93\x1dC\xa9\xcc\xf1\xcfu\x88\x87B\xa2\x0dD1\x9b\xe6\xd17\xdf\x94dq\xc6\xb2\x95\xee\xec\x85\xa8=\xdb\xd9gf\xbf\"\xed\x91\xa4\x99\xfb\x0fC\xb4\x0d\xee\xb8\xbe\xd0\x9fU\xf3\xd3\x98 \xd3\xb58\xa7C\xb2\x15J\x1c0\xce\xc5'8\x82\x13\xc4\x1d?\x08\xa2y\x9e91r.Eb\xe4\xe1\x7f\x18m\xc0\xe8&p\x04\x9fD\x10\xf9\xe7p\x04\xf9\xf4\xf4,\xc4\xf8\x95\x0b!\xf7\x9c\x06!\x86\xac\xd4\x9c^\xcf\x83\x10\xdeb\x96\x17\xc4\xb2\x10\x06\xd3\xfa\x8e)\xf1\xd8\x84H\xb6\xf2\xaf\x04\xf5\x9dg\xff\x0d&K\x91^W:\xb2\xf6\x16\xe5\xb6\xd9\xf4\xed\x19\xd2\xb4\x80Y\xb8\xa5d\x19\xd7\xe4\xff$$\x9d\xfb\xa5\xcf\xd8\xd6\"\x08\xc1\xab\xf7\xbc\x10\x0e\x1e\xdd\x05\xcdr\xc9\x81e+\x18x\x9aJ{\xa7,d\x0c=\x83\xef\x1c\x1f\x0e-)\xb8\\\xcb\xbf\n>P\xa0\xbd\xc3\xcc\x06\x19\x8b\xd0\x96a$\xbbw\xff\x0d8K\xe9r\x80\x87\xfb\n\x0b\xf8\x1c%\xbcK\xcc\xddZ\xdc\xc5\xfe8tt\x15\x1c*\x82Q\x89\x9b\xf4\x8b_62\xb8CV\xf0\xf0Ny\\\xc7\xcc\xaaC\xe5\xce&v\x07\x94M\xb2\x91\x87\x98\xb3\x153\x0b\xc6\"c\xde\xc3\x80\xf3\x9e{\x8c\xf7\x8c\xadi\x02m\x85\xc9\x1cw \x9b\xcbq?Ty\xe1\x87\xfb!\xec\\P2s\x12\xf1]\xa4\xfc\xddM\xc05\xb68\xa5Hs)\x9426c>\x0ca\xe7\xfc\xce\x89\xe2\xc3;\xd8\x81\xf0/D\x14Y\xde\xbd\xeb/\x9b\x14[\xc1;\xd86\x92D/\x92,\xa9V\xfe\xc3\xc3;\xc1-\x87D\x89\xb6\xd2\x1b\xd9\xde\x9d\x8c\xec\xf1\x97\x8dl\x1b?sS\x913t\xf4?7\x95\xedp\xf26\x84\xd8\x9e\x98\xd0V\xa6Tj\xa7$\x97\x92\xaf\x87\x8f\x1dB\x1a\x9b\xca\x94\xd2\xbc\x10\xa9\xc8\xc3\xef\xdc\xee\x0e\xba\xc5\x10\x15r\xa8\xdc\xb2\xc4\xf1\x9d\x8b\x83\x9b D\x9b+\x0c\xc9\xcb\xcf\x8d\x82\xeb.\xe6\x8a\xeeBj\xe2\x1f\x852f\xac\xa2\xba\xc8uw\xf8\xdd8mc\xf5\x19\x88\x81[`1\xa5\xd5\x18\x84x\x8d\x1e\x02w\xa1\xae(%\x97\xb4\xa5zb;\x9a<\x1e\xdf\xf9N[\xc2\x11\xac\x85\xc6\xa1\xec\x88m7\xfeR\xbcZ\xf28\xa3K)\xc1\xed\xefo\xb3J\xfb[p\xa4\x02\xdd$l\xb7\xd0En\xc1\x97\xb1\xf1n\xc1`\xcaq\x1el\xc1Pn=\xd0-N>\xb9W\xf7\x1fQ\xe8\xb2\xd4\xd3\x9cA|\x14\xf0\xfd\xbd\xc7\xf6w9\x9a?d\x12\xfa\x16\xfc\xa0\x1c\xd6\x81JO\x0e(\xff\xb7\xa0<\xdfJ\xe1\xffV[\xf2\x7f\xce\x99\xc4\xbb\x85%3\x16c\xa2\xfc\xdd\xd6\xf7}\xe5\x97j\x8b~-Z\xc1\xf8\xb3\xf9\xb8An\xad\xa0\x91\xee\x8c\x9c\xcb9\x18\xcb\x7f9\xe73\xef\x96^\xcfc\xf9+\xd6\xf3\xc8\x93\xe8K\xf8'9\xe2\x91\xfc\x92\x1b\x0e\xdc\x86P\x8e\xe7\x87\xa6\x8fB$(t\xf7\x1e\x8ca\x7f\xa6\x07\xc8\xee\xd0Mu\xe0\xc8\xee8\xb07\x16k\x8a[\x9f\x04}\x03\xe2\x9c\x99\x1d\x96\x81\xcd\x8a\x18\xa4=\xe8\x9bxM&\xc0\xa3.|\xfe<\x14~Q\x94V\xe8Y\x95!\x92\x8f\xfd\xdc2\xfa\xd1Q\x8d\xecVN\x94(\x8d\xb6r\xb2\xd1@\xbbw\x9b(\x8aE\xe4\xaam\x16\xdb1\x1eU\xbc?\x9c\xcc\n\xa4\xf7\xd6\x92\xd4\x82\xd3\xac^\xe6%k\xce\xaf\xd5\x8c\xae\xbf\x0d\xd0U\x83\xec;\x84\xbd4\xec\xecX|\xb72\xd8J\xc9K`\xa1\x0c\xb9\xd2\xfb\xcc-u\xa7Z$\xe8q\xe8\x16\xe0~\x05\xe8. \xc7hno?\x02\xb8\xd6\xf9\xa9Q\x13\"\xd9\x11\xa5\x06>\xb1\x1c\x1f\xaa\xd7n\xcb\x1f`Z\xf3\xfc3_\x11\x14\xef7\xd9\xf3|\x93\x0de\xb0\x1a\x0d\x0buB]\x98\xfbDl\xb0\xaf8)\xde\xd7\x87d\xc8 \x7f\xf4\xb4\xf4K\xdc\xcc\xcbm\x951\xe2\xcf\xb4V\xedeX\xf2\xaa\xaf\x08\x0fA\xe7^es\xf2\xe9W\x03\xc9\x87\xa4\xc0\xe4\xcbj\xe7N0\xf2\xb2\xcd\xfa\x82\x94\x1e\xec4\xbe\xd9p\x0c\xf7\xf7\xc1\x94&\x0d\xee\x04Lt\xb7\xde%t$\xbdkX\x83\xbb\x1f=w@\xd8\x96\xae9\xd8\xc8\xb6\xcc\x92\xc7\x916_C\xd4\xb2\xb3\xb6\xbf\x87\xf2\x9c\xa7TG\x1f\x8c\xa1x\x91_\x08+v\x80}E(\x0d\x03\xa5a\xf1\xda\xe9;\xe8f\xe1y&F\x1e\xach\x8d\xd7\x0b\xec\x1f@\xc6\xbd\xcd\x19Dm\x8bE\x0bf\xd8\x19NY\xa1\x16\xb4\x9b\xd0\x1aqKV\x025\x82\x19sK\xf0\xbb+\x00\xde\xff\xcck\x88!\xcb\xb3\xfb,\x0f0\xf3\x1b\xf3Bp\x19-\xf0!d\x91\xf4\xf1b\xb1\x83\x1b?.1\xf5\xb0\xc5Ys\x1e\xcb'2=\x91\xf0\xd5\xec\xb19\xcd\xf7l\"\xad\xf7\x1fV$s\x82+h\x8cM\xd5\\\x1a\x1a\x88U\xd2\xcd\xca'\\\xed&\x86\xbb]\x7f\xe2\x14\xd0\xf4\xc5\x96E\xb2\xc3\xba\xcc\x15\xdd\xe2\x96\x93D-\xfd\x8c\xc7]\xfc\xb463,\xb0~\x0d\x8e\xbc\x03\x991D\xc3\x06\x97v\xe6\xebvL\x16\xb1\xd2hO\xd1qJP^!\x19\xd5\x19\xe3\x88Z\\\xf5\xae\xc8\xb4\xbf\xdc6xdA$q\xba+\xfesM\xe2)\xe6BW\xc75\xc1\xf0\xbev\x14p\x0c\x1ebY\xe1\xe1\x11\xb3\xc0\x14\xd8\xaet\x81mvp3dJ\xa7\xbf\x02\xb2\xb0\\\xc6\xdb\npV\x84iq[]:\xd5\xc4\x07\xb4\x81\xe8{\xd8\x13!n8U\xfeP&d\x0eu\xce\xf3;C\xdc\xf6\n\x86z\x15\xd7\x90T\xd9\x1fj\xa8W\xa4$;\x9e\x0c\xb7\xd9\x1dFU\xa4 \x95\x18C\xd8\xff\n\x00\xee\x11\xdf\xaf\x05^'>\xb5\xd9c\xfc\xafN\x14\x19''!\x11eN\xb7M]\xb6\x154S\xcd\xac\x95m\xfb\x070\xbe\x81\x06\x8d\xd9\xfe\xe9x\xbb\xda\xdc(\x03~\x890\x0e \xee\xfdkB\xa5\xaa\xe5k\x1c\x07\xaa\xd2h\x0c\xee90\x90\x8d\x97\x18\xa0\xe6p/\xd4\x0bBH\xe1\x04\x15h\xa8\x1c\x93'\x05\x95k\x9eW\xb8\x1f-\x01\xd8\xbf\x00\x1c\xcf7eI\xb2\xad\xa0\xe2\x08\x11!w\xe8\xb4u\xfc\x15\x1f\x04\x7f\xfa\x95tG\xfd\xfeG\xccu\x14\xf5\x89\xf4\x92\xbb\x95\xb6\x9b\x00\xe6\xd7\xb0\xfbU\xe8q\x17\xf4#\x00b\x83\x87:\x97\x99\xda\xc7W\x99\x05')o\x17\x1fn\x8aQ:\x80\x11\x1b[\xd8<|\xa5\x8d\xf8cr1b\xe0\x8e\x83F\xf07a+\xee~\xe0\xe7K\xf25t\x8f\x0d\xcb\x8a\xc9\xf1\xdb\xdc\xeaW\x80\xbf\x12\x14\xe3+\xcc\x86m\x82&\xfc \x9d\xd4\x90\xb8\xb4\xf54\xaa\xadf\xe1\xbe\x07z\x13\xa9\xe8D\xbe\xce\xd9\xc4\x83\x8f\x8c\x99\xc8\x98Y\xf44\xe8\xc6\xc3\x08\xfe\x04>;\xd1\xbf\xc6,gi\x9e\x8d\xa2X\x8e\x93\xfc\xcb\xe9\xdb7<@\x1feMsE6\xfd\x1a\xe7\xab\x88\x8d5b&\xb6\x89H\x97lb\x9f4-\x84 \xce-\x81W\x93\xcc\x97k.\xda\xac( a\xfbH\x14\xd09\xfe\xedW\xc6\x99sM\x19\xc0\xba\xb9\xcf\xb5\x19\xc9\xa0R\xcf\xc9\x11_D\x8ck:h\xf1\xec\x0e\xc2\x06\xed+\x97\xda\xa8\xdc1\xb8v\xb7\x88}i\x8a\xb0\xa6+}\xe9\xe4\xeb\xf6f\x87\x85\x88\x96\xed6\n5\xb6+\x9ekN_\x89\x00b\xf8\x1d\xfba\xfd\xce=\xca\x04\x1b\x8d\xaa\x8a\xf5\x13\x11\x0eI\xa0I\xa3\x9a\x0dB\xf5\x9e\x99\x07\xb3M\xbed\x131]0\xbbV@\x9a\x8c\x11C\xd5\xdfx\xd3\x16\xb6\x1f\xb2\x0c\x1e~\xef\x19Rl\xca8k\xea\xff \xf6\xf7\xb4\xd7\xe5\xd6\x98\xbc\xa2\xb0\xf5\xcb\\\x17O,\x9cT\x99r?P\x99\xf4\xc3\xf7\xfeF\xfepE\xa0$\xf1lE\xe6\x10\xc3*.\xe7\x90&\xeb\xa4\x86|A\xc7\xcbMT\xa0\xdcd\x95g\xa3V\x0eD\xa2DW\xb9>\x87.5\x93zK\x03\x97}&\x92\x08i\x9b\x19oy\x00\xe3\xac\x0f\xc0\x01\x00\x00\xd0_\xfe8M\xfd\xcd\x97\x8e\x0fi\xa0\x88\x97\x13\x82\x0cmfm\xe56p\xcdN\xd0-\xdb\x91\xb4/\xd8\xa9\xbc\xc3Q\x03\xcd:Xv\x04\xa5}\x89\xc4\xb9\x9aE\x1a]\x85o \xab'J\x8e\x0dtu-p\x1f\x1cla\xc7]\xa6\x95\xaa\xd9\x97\x0bPD\x11\x87\xc7P&_]\x89\x99\xf1\xfe\xa8o6\x8e\xd1\xa3\xd4\xe2\x0e\x06Qdh\xb2\x8a\x99 w\\\x08J\xbf\x0e\xd9\xaa\xfe\x98\\\xf8A\x10<\x85\x1d\x9fB\xc0\xaf0\xa9A\xcb\x8c\xff)\x87M\x00\xc4\xaf\xf8\xe5\x87\xf3`\xc6\xdft\x89\x12s\xcbi\n0;\xc5\x11\xe5\x16\x16I\x16\xa7\xe9X\x80\x8d\x071-; %\xd7\x85bL]Hc\xeaQ\x8dm;l\x10\xeer\x01\xb70\xde\x8c\xfa\xdc\xcd\x86\x15\x9ck\xde\xb2;p\xd2G0\xeb\xe7\x12Q\xac\xe2\xb0(\xed+Q\x8ck\xeeO-\x91A\x9d\x8cQEa'\xfe\x04\xfaY\xfeu\xe56p\xb1\xa4\x1d\xb9\xceRTj\x99K\x95cf\xd12!2%\xec\xee\x16\x97\xf8i\xd6\x1a\xd2,\xc0\xf1`\xbc\x1dxo\x90\x8d1&}\xef\xd5\xad\xeel:1J\x07%YT\x13X\x0b4\xd1\xd3sL\xa1<\x81\xe5p\xad&\x05\xd7\x04n,Ue\x04\x9c \\\x88\xaa\xfd\xa9\xb4O 5\x0c\xf9u;By\x93ay\\<\xf8\xc3\x87\x03\xf1\xe0\x87?=x\xfc\xdd\xb6\x9f>\xde:\xa5\xe4\xc1\xf6\x91\xef\xf7\xf7\xb6\xfdt\xff\xbb\xed\x13\x04\xec\x7fIF\xca\xd6+\xa9\x94\xf9\x8d\xe2\xed\xeb\x07\x93\x1b\x95\x98,2LT\x93\x8aY5\xe9\x07\x80\xb5jq\x80Q\x99\xecm\xebV\x9d\xe5Z\x8a\xa1$i\\'W\x04~z\xffc\x08\xd7I\xbd\xca75\xac\xe2\xab$[B\x0c\"\x13E\x84Y\xbe'\xf0\x07\x19\xf4\xf4\x0f\xf2\x1d\x7fZ\xe3S].Bh\xa0\xf8\xa9'\x97\xd6Z\xf5w\x9f2\x89ep\x82^b\x84\x9e \x9f\x0c \xcf\xf3M:\x87,\xaf%DJ\xb2 %\xc9f\x04.\xc8,\xa6X\x93/&\x80\xb3\x16\xb92\x11\xc3:c6\x0d$\x1e\xc4)\x1f!\xe9\x05h\xa3P\xfb\xde\xef=\xb7V7\xc6\xe9 \x9b\xbfwS\xa2\x89o\x8b\xda\x084\xe09\xd5\x98\x9eeA0\xc0\xb1 \xab\x80\x14\x99\x90\xe1U\xa6\x0c\xc2E\xc3 ,{\x8b>\xec\xbfr~\xce\x15\xabz\x1eA\x97\x91\xc6\xca\x10\xf3\x91\xa9C\xe1v\x81\xee\xb8W\xf9\xa4+\xce\xda\xfaKM\xf8\xed\xb6\xd0\x95\xbe\x03!B\xeaWY\x88\xcep\x0c\xbae\xae\x038\x86\x1a&\xd0_\x96:\x80 \xf8\xb4U8\x82W,G\xf8_N\xdf\xbe\xe9\xcf\xdb\xc8O\xf2\xcey\x1b\xb5>U`\x88\xef\xdd@\x90Zq}\xa6\xbd\x85f\x9a7.\x17\x7f\x0f\xfbR5V\xf7\xeb\n\xdc>\xed\xde\xd1\xe91\x1d\xcd\x18\x9b\xac\xe4e\x87\xca\xf6\x89J\x91'YMJNG\xe8\x9e\x87yN*\xacC>%U\x0dI\x06\xf3|\x86\xa1\xa9\xb5\xf9Th\x91\xadh\xce\x14\xcd(\xf9t\xbb\xc9\x16\xf5P\x9e\xe9\x11\xad\x95\xfe\xb21\xf9 \xea\x8c?\xdc\x14\x84\xeb\xfbN>\x15dV\xa3\xaa\x8f}\x14\xc2\x12\xadi\xe9\xbcU\x90\xd1\xc3\xd3\xdbd,\xaf\xcc\xdc\x03\x96|\xe0\xaau\xa3c\x9e\x92\xf7\x80Y(\x92\xe9\xde\x99\xbc!!Q\xb5\xb9\xa8\xea\x12s\xc1\x80\xe7\xc9~\xa6g0\xc1\x0cXHb\x1fx\x01\xd3\x86\xb9a\xdfb\x90~\xeb@\xc3\xd9\x82\x13\x89J\x9b\x8cT\xb3\xb8 >\x91\xc9\x9f\x1e\xfc\xd7\xfe\x83e\x88\xb9\x9d\x94g{\xf8\xec\xbf\xbazP\xd3\xd0\x8a\xc1\xa15\xfdkzg\x1d\xed\xa9\xbd\x7f|\xc0\x1e\xee\xbbv?\x1fdP~\xf6\xeb\xc6\xa4wG\xa3\x95\x11\x9b\x97D\xb3U\\>\xab\xfdZ\xda\x0b\xe9\xe9\n\xcb^\x86\xa6C\xf7u\x1e\xfe\xbc/\x8e_j\xdac\x8a!;\x98\xb9^ \x0e\xfb\xf1{\xfe\x03k\xd0_;t3;M~%\xf8\xcc\x10\xb4:1q\x0d\xf5\x01\xef\xc5K\xcdpsL\xf5\x95\xf3\xc0\x15\x1f\xf0\xda\xb9\x0cA\x1b2Sh\xd2\xec\xa7\x0e\xf4\x01\xc1)\xe01\xdd\x12\x13\x84\x00\xb22q\xe1\x17A\x93@Z\xdb\xda\xad\x9f\x19V#\x86#\xf0\xf1\xee\xc2\xfb\xbe*\xc8l\x1d\x17\xf7);\xf8'/\xa0\xd4\xed\xf7\xd8\x89\x9ep\xd6p\x84\xce\xfc\x1d\xdb\x81\xe9Y\x80i\xcf^\xe43\x0cZ\xea'\x98\xca\xd0\x86B\x1b8\x02\xcf3Q\xffq\x19\xadi[\x1b:|\x84Q\x81\xb7\xaa\xf9t\x83$\x86\xfe\xef\xda\x9c\xd2$n\x92\x18c\xb6\xcf\xfd\xd8h\xe8\xa1\xe3h\x86\xe7\x9eO\x13\xbc\"\xc2\xff\xb9\x93\n\xbf\x7f\x89\xbb\xfbW\xfdu\xe7 \xbd\xdaC\xa3Kr5\x94\x93k=\x94Xk9\x98\xb0K\xa6\x82\xd2~{1\x94X\xeb\x9c%\xba\xd5e\xb3\xbd\x16}jSH\x9d\x88>\xb5\xcd~\x1aL\xf2{:\x94\x13\xeb\xb9\x18\xae\x16J\x97B&\xef\xbfz\xc6\xd3\xea\xbf'\xcb\x93O\x85\xef\xfd\xdd\x9f\xc6\xf7\xffy\xb6;y\xf0\xe0\xf3\x83\x07\x81\x17\x82\x97x\x9a\xef\xder}\xf5\xf3\xe6\x8c\xf5(k\xf7\x9e,\xf0\xf0\xf6\xec2\xb4(x\x03&2M\xe2\xc7,_\x7f\x87\xebGk\x00\xe0\x17\x9c:\x04\xef\x0f\xf2\x1d#\x87\xbd\xe7\x1f\xf8\xa4\x07\x94?\xaf\x8d\x8a(f\xcd\xf1MI\x16\x06K\x0e\xa1\x91\xec\xce\xdf@\xdbE\xc1\x8b\x00\xbc\x86a\xa7\xd2^\x08\xda\x83I\x14\x94\xc8i\xad\xcb(\xa9^\x96\x84\xa47o\xe25\x99\x07~e\x0d\xeeN\xfb\xc2\xb4sJ\xf6#?\x93\x14\xd3~1\xaag\xe2\xda\xc20\x05\xd1\x04\xd6\x9b\xaa\x86\x0b\"Y8\xf0)\x9a\xdc\x7fO\x16\x81\x913U\x0bk\xc5\xe1\xfe\x98\x8f}\x02\x0e\xd9A\x16\x1b\xbc\xa3_\xd9,\xcamW\xa4\x14\x8e\x0b8B\xb1\xdc\xdek\x81\xa1\xb7\xf7\x1c\"E`\xd8\xee)\xf3\x9b\xb5en\xa3\xe5\xca\xf1\xbe\xca\xed\x02\x85\xb6\x96\xd2\xae\x0b8\x86\xdc/BH\xa9 gL.+\xca\xb8\xdb\x01\x8e, =-\xec\xb5A\x15X\xe6v\x88\xc0\x18\xd4\x01\x8e>\x0c%\xae\xdc>p\xc5!\xd0\x1f\xc8\xad\xd7V$[6\x91\xc7\xac\x9d\xdd8\"\x03\x12\x90\x95?\x0f\xe1*\x84\n\xcd\xbb\x1c\x16\x029\xa1M\x9aR\xb6\xeb\n\x8e\xc1\xbfA\x91y.\xfc\x07\x19\x9f\xe8/\x05u\xf1o\x02\xc62/9\xd1\x1dV\x93q\x99\xf6_\x06%\\)\n\x8c\xc6\x88\x80\xee\xa9%OhD\xe9(Bh\xe3_\x850\x0f\x82\x88+\xad\xe0\x18\x96\xf2\xef ,\xbb&]N[\x0ddl\xa3\x11\xbb\x0d\xb6\x00/\x8c\x051l\x01f\x18 j\xb0o@\xe0j\xa4\xa5\xc6\xc5\x98\xd3\xa9\xe9\xa9\xa2\xdeZ\xe7W\x84\n3\xb0t\xc8\xfaE\xf7\xefEK\x1b$\xa4\xe4\n\xd3\xdf\xb8-\xc77\x1c\xae\xd6\xca\xb63\x0b\x84\xc6\x89\xee\xca+\x14R\xd3f\x96\x17\xa12N\x91\x1b\xd0\x9acT\x14\xb9\x94W\xd6\xea\xb7\x81\x03\xe8\xdc\xce+\x10\xc4l\x9c\xc5\xb6Z\x84\xfa@\xab\x005\x15iST\xc4\xf5**\xc9|3#\xfe\xd6C\x00\xf52\x96ytNk\xbc:\x9d\xd6nA\xa2h\xc1\x8c\xfd\xee\xfb\x08F$\xa55\x15>hU7\xcc\x9d\xe4\xb9\xb2$S\xb5'\x7f:\x82=\xd4U\xec\x85\xcdmn\xe0\xd7AG\x1cv\xf2\xa4\xd3\x15q\xb1\xe3\xd7\xd3\xcc\xe1\xb2\xbf[\x86\xe2\xf2\xe8\xca\xad_\x8f1\xb7\xb9\xf5K\xe1\xa5q\xd1\x88\xe4\x17\xd6o\xed7\x12\xdd\"p\xc9\xc6\xb5\x81\x95\x011\xbf5\\\xf8\xf7\x9ejd\xb0W\\\x80T$\xbc\xd7&23\xcfg\xcf\xe3\xd9\x8aL\xe0\x9d\x1e\xb5\xe3\x8b*O75I\x167\x13\xc8\xf5uf)\x89K\xde\x8c\x9b\xd2\x85\xf33;\\\xf1;')\xa9 \xbb\x8a\x98t\xf1\xf7\xdd6\x91-\x94\x16\xcd 6\xa8x\xf4\x93TE\xf0 \xbc\xd5W\xba.\xe3\x82\xd7H\xf45\x96\xa4F2n0\xbfG\xdd\xf7\x04b\xfd[\xf2\xa9.\xe3Y\xfd\xb2\xcc\xd7\xd8\xc8F_M\xde\x06\xb9.\x87r\x19x\xce\xee\x920\x81\xec0\x88W$\x9e\xa3\xa1\x87}\xd3<\x9b\xcdHQO\xc0\x8b\x8b\"Mfh\x8f\xf3\xe0\xe7*\xcfBP\x9f\xdc\xc4\xeb\xd4\x1b\xde/\xc3\xf47\xcd\xe3\xf9)\xdaF\xef\x98\xe3\xaf\xdd:\xdf\x0c\x8a\"\xe8^\x84G\xf6\x80\x91\xce\xb6-_K\x02_\xc5\x0b\xf2c\x1e\xcf\x07=\xb4F\xe1-\xc7\x19#\x0fH\x97\xe1\x1dcF?\xe4\xe8\xa42\x81\x99\xbe\xaa\xb8\x1f\xf9\x8b\xfa\xc9%\xc9&\xb0\xe8\xd3\xa5\xa0k\xb9\xc3\xa7\x08G\xf0\xaa\xaf\x8a\xfc\xd9\xaa4\x17*V\xa2^\x0f\x10\xf5z\xa0cp\xd0\xeeD5J\xa9{\xe6FcMZ\x1enm\x0ds\xf0\xed\xf6\x9f>\xfa\x02C\x1a\xf5\xcd\xaf\xa0Z.\xad\xeb \xdb\x1a\xec\xc0\xb0\xd1\x0e\xe8\x8fI\x93\xc29\x17\n\\3\xba\xf6\x87\xc1\x14\x95h\x12\xa7Q!\x99\xb5\x94 ^1\xe8\xa7\x85lv\x1c\xadI\x1dS\xa4\xe6\x7f\xb24\\6\xe5\xe6f\x1b\xe5f\xdeUnn\xacZ\nf\xd0\xd4Isk\xfb\x08T\x0dl\xfb\x16\x1a!\xd8\xe813\x88i\x9b&\xc3$\xb5\x08;\x8fH\x88\xabL\xb1m\x89\x003\xf8Vhn],\xdag\x98\xee\x04\xb7\xc3\xf0X7[\xf0.\x80\x1d`B,8\x82Y\xcf\xfe\xa2[\xa8x\xcd\xf8\x1d\xfc\xc0\xdfca\xd89\xfb\xf4\xcbm\x08\xb3 \x88\x10\xd6n:\xd7i\"\xe5\xe8M\x08\xbf\xdc\x062c6\xe9\xf8\xa78\nb\x887I;\xc4\x97\xfd+\xe0_624\xe5\xb8\xed\xb8A\x0b.\xa4\xa3\x8b\x81\xa0W]\x13\x89\x94`\xfeqH2h#*\x8b\xbdT\xb9\xe0)(\xe6\x1d\x1d\\\xb5\x9bU;\x9b\x18'\xd1\x9a\x94K\xf2\x82\x90\x82\xae\x98E`\xba\xb5\xc5n\xe2\xad.\x98\xac\xdci|\x16\x04!\xcc\x18]\xa2\x84J\xd6\xe2\xba\x9b\xa9D\x96M\x08\x1eV\xf3\x02\xfaM\x9fG\x10\xc5Y\xd6i=\xc1XTc\x0eu\xeb\x19\xd9z%e\xf7\xdf\xc8\xd8T\xfd\xf5+\x1c\xd8\xf9\xd0\xadl\xd2\\\x90\x8e?&\x1b\x9b\xf0Qgei9+{\xd9\xd6q\x1d\xec^\x82\xe2\xbc\xec8\xa6O\xcf\xec\xea\x9d\xfe\x1d\xa2E\x1c\xe9wC\xa9q\xd2\xb1]+\xa3\xaa \xb3\x10\xaa\xa1})e\x90\xfey\xe2@\x84\xdd\xb4}\x9bi}\xa6,h\x19\xc9\xa5{\x1d\xcf\xca\xdcO\xed\xa4e\x94.E\xe0]\xe3\x87j\x0bR\x03\x0d$\xf2\x0e9\x1dv\xec\x18P\xb4\x04\xea\x8a\x88s/\x0bac\x10\xb3\xb4O%!\xd64d5\\\xfdoJ\xf6oB\xc9\x9a\xa4\xcd\xa3(\x99i/\xd0\xd1\xc6z\x1aa\xda\x08\xd2\xb1qC\xd9\x122d\x06NK<\xdd\xb4w\xf4:\x9f\x93T\xc0\x9d\xedjZ\xc7\x80\xeaN\xbbY\xe5\xed\xed\xbbx\x14\xe3>~\xaf\xc5\xff\x8f\xef5\xfd`\xcc.*\xd2T@\xdf\xf3l\x95\xa4\xf3\x92d\x13]\x8cq\x16e\xb0v3BM\x86l\x95\xe4\xe1&b\"\xca`\x0b$*\xca\xbc\xce\xff\xca\x9fgp\x8c\xbbe\xd3\xde-\x99R\xab\x89P\x8a\xc6\xc4W\xec\x99\xbf\xa7\x04\x8c\x08|\x12\x89\x99i\x94\xcb\xc6\xd3T\xb5\x84e_Ok\xc3\xa5V\xab\n\x1cAB\x913\x13\xa3\xd1\xba\x19t=\xf9~u\xc2\x19\x0fY\xfcm\xf8\xcbC\xdd\xcbJ\x98\xd7i-\xe8RA\x90\xb5\x0d\xcfTM\x91 \xf2\xae\x17i\x9d\xb4\xf6\xcc\xb0M\x86o-\xf3\x9cR\xc1\xdc7\x9a\xba\x81\x8d\xe8t\x1c\xc9I\x08S\xf3hd\\\xac\x11\x81\x89\\\xb8\xb9\xabnP\xf5\xb8$\x19\xc6\xc2\xda\xb1\xa5\x1bB\x1b\x13[\xfb\xa0\x08\xc5dJ\xd4t\x03v\xd5\x08p\xa3\xe3L\xee\x00;K\x17O\xcb38\x86\xc4\xa7\x7f\x0821a\x8fq\xbd\xe8\x83\xc1V\xb8\xe7u\xe2\xcb\x85f\xcdl\xd2t@\x91\xae_\x7f{\xc0\xa9;\x8e;G\x17\xc5\x97\xb1;\xa7g\x81\xd6\x19FL\xccE\xed$\xd9\x04\x19\x15\x92\x81$S\xd3,*\x7fS\x9ei\xef)\xe4\xf0}c\x87~\xef\x1e\xf8\x0c\x03\xf2\xb3\x10|D\xb8\x86lN\xcb\xb3\xe0)\xe4\xbb\xbb\x01\x0b\x911--\xd7\xfbb\x1a\x18\xe0E\xa1\xd7_eu\xd8\x8e\x18\xb3F\x0e\xdb\xaeu\x03A\x945\x82cfi4Q\x9f\x1e\x888\xc9Hu\xd0\xafE\x11\x1cu6\x0dN\xfb\x12Ui\x8dA\xa8\x05\x0f@\xdd\xc9#6\xa4\x98j9\xcd\xd0\xa8\x9eE\x8e-Y\xfe\x85\x1c\xad\xd4\xd0\xe8?\x04\xfalxg*\xc4w\xf4V4\xfa\xb7\x9b\x99\xf7\xd9X\x06o\xf8\xd6\xe5p\xc0\xf1\xf9\xdf\x8b5T\x7f\xfd\n\xdc\x84\x10\xc3\x1e\x0e\x89aZnB\xf0!\xfbZ\x8b{\xc1\x88\xeck\xe5;\xc9\x89<2q\"\x99\xff\xed\x00\xf6\x0cr\"W<\x03Y\x87\x99\x94\xa2\x1bKs\xab\xf2*\x03\x9b\x1a\xb7%f\x0b\x9e\x85\xb0\x08\xa1\x08a\x1e\xc2\nMF\xd7h\xbdv\x03G\x10\x97Kt5T2m\x1d\xa0uYc@!\xabL\x0f\xe8!\xda\xfaI\xf9v\xfdn\x97Z\x141\xf6\xeb\xd29\xf2\x14\x9e.O\x9f\x06P]'L>\x14\xd9, \x86\xce\xb1\xd11LW\xe8\x90\xd5S(\xce\xe1\x08nx\\\x99\x93\xacNJ\xf2\xa1$\x84\xa5\x18\xbe\x11\x86\xf5,\xb50\xad\xf6\x8f\x0d\xa9\xeaWYM\xca\x19)\xea\xbcd\xc9\x86\xe9\x9b\xaa\xc8\xb3\x8a\xb4^\x15\xf8\xaa\xad\xe7b\xd9Jo4\xb22\xcbGl'\xd2\x80\xa10\xea\xd5\x8b\xa4\x9a\x95\xc9:\xc9X~\xbe\xcc\x8d{\x92\xa6~\x06+\x90n\xe9O\xd9x\x83\xdf-\x1a\x98L`\xe1\xf6m\x1bh\x13(\xdc>\xebCu\x02s\xeb\x97\xb7!\xda\xce3\xf6[\xa6\xbe9\xbd\x8e\x97KR\x06\x0e!\xf3\xa0 {h\xadKe\xb15\x86\xf2d\x8aY\"\xb2\xac~\x1bv%\x8cN\xea\x0d*\x8c\xael\x863\xa2\xb0\xe1\xac\xdd\xc0\xd6\xcf\x80\xe1\x1a\xad\xab\xbaL\n\x11\x85\x14\xedl\x06\xadcD\xb1^\x12\xe1&\xfe\xd6y\x13/\x99\xe3/\xc9\xea\x10vJJ\xc2\xda\n|\xe6\xdb\x99\xa9\xcc\xe7\x12\xc1\xcfW]\x91\xf8\x97|Y2\xf4\xd6C\x16\x9f\xaeQ|Qn\x8a\xda\xf7X\x87^\x08K\x97\x19X2\xad\x8e\xc9\xac*\xb5\x18\x96L\xaaF\xc6\x960VI\xebb\xd8\x9f\x8a\xb8\xa5\x93j\x8b\x81\xc3F\x0e\x0d\x93\xb0p\xb9X\x9e\x14V\x9d\x99\x1f\x8ce\xaa\xfe\xbdX#\xfd`\xf2A&@s2\xef\x19O\xe6\xbd\xf6\xc9\xbcg:\x99{kjSE1\x0b\xe97\xf1z\xc0+\x809d\xaf1\n\xbb\xb9\x16\xc6\xe2\x8d(Yf\xe1\xb2\x0c\xb9\x9a\x9dG\x08|\x94\x89\x1eV\xfbFX\xed\xb7a\xb5?\xc4\xc5\x80\x8a\xdb\xe4\x13\x99mj\x16rZa\xcf\x86\x891#\xc2\x04I\x8ay\xc7\x86]\x1aDB\xf0\xfa\xe7\xae\x87O{G*}\xbc\xa9H\xf9\x92\xd4\xb3\x95g\x8d\xc1&V\xd4\xca0\xb0%\x9d@9\\M\x0d\xcaeI)\xac,\xffP\xa8\xb4\xdb\x10\x12\x831\xb7\xf5\xd6\xde\xac\x1f6\xed\xb6\x9a\x1d\x1d\x94\xe6k\xbb\xe4*\xd9\x0b\xfd\xdbF\xcd\xc1\x03\n\x1c\x03\x95\xd4\x0d\xa0\xcd\xb1-\xbe\xcc\x1f\xe2\xa5\xbeV\xd2n3\x87c\xf0\xf87\x1e\x18\xcd\xa4c\x96\xec\xe7\xe0m\x03\xe4\xe7\xf9\xba\x88\xeb\xe4\"I\x93\xfa\xe6u>7\xec\xe2\x8d\xc1\xdb\x96\x96\x05\xbe3\x92\x12\xc6\xaf\x90x\xb6\x92\xdd\x06\xf4\xa8\xb0s\xfa\x8d\xb6\xdbNb\x18\xd8l$&\xc5Z\x12\xc7\xf4[\xdaO\xa3:^Vp\x0c3\xfeg\x00\x13\x98&gc\xcd\xc0[\xce\xb4G\xaa3\xad]\xbb\x8a1\x1cX`\x1c\xfc\x8f\xddF\x0c~\x06\\\x97\xcd\x00\x9e\x17\xaf\xe6\x81\x9f\xe2\xfd_n\xdb\xf0\xa2\x0c\xa3\xc6\x04bk+:W\xedn)PDv\x1b\x11\xe7\x98\xed\x8d\xc2\x18\xba%\x8a\xa0_\x86\xfd\xd2-\x12q\x9c\xfd\xd9Z\xe4\xccL\xdeE\xb1\xf9wQ\x8c\xdaLgg\x01\xd0\x7fwwCH\xa6\x9e\x07\xbb0\x83]|D\xf1\xa5\x18n\x83\xa9\xa9\x9b\xb0D\xf4\xecK\xb0M\xfb\x8aP\xcc\xa4\xa2)\xed\x8a\xa2\xa4C\x04a\xacz\x04s\x16\x8a|\xfcp\x81wK\xe5^:L{m\xeeyA+\xb7:\x9c\xd3\xde\xcc\x89\x9bAQ\xe2\xb31\x17\xc6\xba\x06\x06Z\x7f\xa9\xd66;\xfb\xcaj\xb0\x10\xea\xa8\"\xe9\xc2\xe0'\xac\xde\xb2\x1d\xf6-\x10\xd6\xf1%9aL\x0c\x1cQ\xb2\xc1\x1e=+\x92\xeaC\xbc\x94\xb4\xa1\x92\x7f5\x95\x9d\xf4Vw\xc0\xb2\xea\xf7\x1dj\xce\xd4\xe1\x1b\x9d\xf63^\xb3hMh\x80\x1a\xd9h\xe2v\x07*t8?s\xad\xd9\x85Ic`\xa2\xb5\xa5\xe1@\x96w29$\x99\xe9>KVJh\xa5r\x9a\x9f\x0d*\x9c$\x81\xab\xb47\xf4\xc0x\xb5l\x9a\x9f\x05\xd8Xs\xf8V,,\x8d\xb9i\xceMO\xf0\xebi\xa2W\xf2\x9b\xf9\x0e}\xc3q\x91T\xba`\x81=\x1b\x0d=\xe6\xffK\"\xfaV \xf8\x8f\xd9\x03nK\xd9\x9e*=K\xfa\x84Q(\xf6\xbf\xd5\x9a T\\u\xdf\x7f\x93\xda\xb0\x02\x9a%\xd1\xbalj\xd6z6\xc6}\xa5g\x89\xca\xb4\x12:\xd7CMW\x0b\x16.\x8d\x1d\x1a\xfa~\xba\xf03:\x17*\x88\xa9\x13\xdf\x9a\xa5\x19w\x07\xf6\xe4` \xce\xf1\x7f\x86\xa6\xe7\x0b\x85O\x85\xd14\x1f\n>\x89*2\xdb\x94I\x9d\x90*\x04\"\xee*0JPV\x7f\xb8)\x08{\xca\x14\x08\xcac\xc3I\xc3\xa4\xaej\xb6\"&\xd9\x8c\x89\x9c\x9a;\x11m\xed\x8a\xd7\xee\xdf\x93h\xab\xcf\x98\xdc\xcd\"\x19\xfcT\x1ax\xf2\x05\xd6\x92\xea\x0f}\xa5\x82\x81\x87\x0f\xf4\x87|~\x13\xa2\xb6\xb8\xbc\"\xa5a\xf2s\xaeP\xa6U\xfe\x1a\x97I|\x91\x12\x83S\xed\n\xab\xae\xea\xdapE\xb1\xe4R\xaeP\x93\xe8k\xdd\xb4k\xfd\xb0I\xd2\xb9\xb1\xb2\x08\xe2\xf5)J\xaa\xb7\xcfN\x0f\x03\xbf\xd6\x1c\x147\xe8\xaeO\x1b~\x0b\xc7p.\xef!\x95\x88\xe8\x86 \x83\xef\x8c\xc4bS\xa6\x13cd\xa3YI\xe6$\xab\x938\xad&\x80Z\xf6Ut\x9d\xd4\xab\xe7\xcds8\x06/\xc9f\xe9fN0\x0ca\x15\xaf\xc9}\x16C\xcc\xd0h\xe3\x08l85gy~\x89q\xdeuF\x84\xfd\xf9\xc5\xa8\xfd\x7f\xa7A[z\xb4\x07!T\xb2B\x0fS\xe1\x08*\xca\xf4\xf3\x1a\x12\xed(=7\x80\xf2\x83\\\xaa%\xa9%\x91}\x1f_\x07CQew>\xa8\x91U\x9f\xfb^\xc3\xa4P\x89'\xc3\xd0\xb1Y^\xc3\"\xdfds\x9d\xab\x10\xed\xfb5F\x9e\x94\xd4C\x0f\xbeWmm\xd3k8\x86_na\x02\xaf\xf5\xd5\x7f\xc66\x87t1o\xb0\x86\x10\xd7\xf5\xf3{\x17m\xca\x14v\x8f\x8c\xa6\xa1\x83\xaa\x01F\x93\xcc\x01\x03$\xcd0\xdeT\xb2\x8dm\xbcU\xec\xec{c\x18\x9dF'\xf1\xc6pdr\x1d\xc4\xcf}\xcc\x0cB\xd8\xc9\xa4\xa5\x8d\x88(\x10ql\x0e\xe1]\x1fr\x12joBx\xc7\xd7\x80\xa2\x17J\xc1?\x07Q\x9d\xffT\x14\xa4|\x1eW\xc4\xc7\xa08G\xb0d\xca%=~\xbc\x97*\xfej\xfa\xe6\xccT\xb3\xe4\xd8\xce7b\x14\xa3\xbb=e\xa7\x0ch\xf7\x02\x8e\xe0\x99\xe2\xa9u\xea\xbfR\xc8_\x104\xcf\xdf\xb7\x9ek\x9a{1B+'4\x8a7S\x12%\xd9\x80-ai\x89\xb3\x85\xaa\xbd\x8b|~\xe3\xc9\x18\xb2\x8ca@\xbc\x8b\xd5\xbf\xa3\xc6h_Z\xb4-;\x11\xb5\xd0:\x8a}\x94\xc5k\xfck9e\x7f\x9fQn\xce\xf0>\xc1M\x1e\xb10\xadX\x19&p\xe9\xb3\xbfCx\x11tn;D\xc2\x96\xeb\xb8\xcc|\xef\x9d\x80+\x8f\xd4\xcf\x9a\xc6p\xfdI\x05\xf1\xfa\"Yn\xf2M%\x83\xdb\xd7+\x02<\n3\xee=X\xc5\x15\xac\xf3\x92\xbe\x893\xc83\xd2(\xfa1;\x00~\x91!\xee\xf7z\x88\xb39\xbe.\xe2\xaa\"\xf3\xfbI\xa6|\x8b\xba\x8d\n\xe6 \x8b#\xc6\xfa\x848\x83?$\xd9\x1f\xd8\xdb\xc8\x0bB\x11\\\xebh8\xf6bG\xd5%u\xeb\x8a8\x86\x91\xb9\x1bsCy\xf2\x85\xbd\n\x8cCHJ2\xa7\xbfvH\x84\xb7\xe2'\xeb\xa2\xbe\xf9+3\xf9nH2\xf7\xe2|/>h&\xd8\x06\x06\x856\x9dgQ\xe6W\xc9\x9chI\xb5:\x99\xb7]L\xf3\x98;\xa8@E\x8ev\xf5M\x81\x88\xa2\xd1@\x976\xaf\x0d\xe0[@I\xa3:\x90.\xdf\xcdK\x03d\xa02\x058M\xb48\xec\x85;\xb6vqA\x84\x97\x8c+\x1c\x91!\x041\x18\x15s\x80l\xf2\xbd{\x90Y\xb4\xce%\xf9\x871\x0e\x8d(rl\xd6@h\"3\xc1p-E\xa9\xfcj\xb8\xa6\xcdz\xc4\xd9\x9c\\\xa7f\xa6\xa4\xf1\xc7\xbe\xa9\xc3/\xcc*@\x0f6u\xe8N\x9d\xa0\x9d\xf1;\xcem\xd2\x9e\xae\x9b\x9e~\x0c\xe1]\xc0\x83\xef\x9ct\x1e\x07\xe2\xcc\xc3M\xda\xb6\x80\x97\xe7a`\xf1\xbd\xa43\xfc\xa9\x9f\x8aM\xf9~l\x98/q\x9c\xc8&\x8c\xde\x18\xa0J\x96\xbb\xe0cP\xfb{\xc8\xdeb\x18\xec&goE\xca\x04M\x8b\x06l\xceoC\xfa\x99\xbe\xa7\xe6\x10~\x8ec\x82#\xf8\xa9\xbf6\xfd\x13\x9c\x0d\xee\x9d\n\xe8>\xc3\xc1\x02#\xa17\xf6\xab\xec\x7foHy\xf3\xb6|\x99\x97\xeb\xc0\x7f\x17\x84\xf0\xeew\xed>Z?m\xf7\xac\xcama#\xb20\xb9\x97\x9e\x80ng\xbbMV\x06)/\xdbo\x14K\xa7\x1b\xc5\\\x11\x02\xcd\xb5\x12'A\x15\xa4\xbc\xec$TB+\x99!\x12\xffXp\xe6\x03\x86{\x15\xdf\x02J\x92\xb6:\x84\xa9\x87<\x9e\x87\xf7\x85~\xc9\x82\xd3Rv\xf1\xc7\xfc\xbaa\x17=6\xb0\xca;\x0bD\x9c\xb7\x81f\x1cj75\xcc\x03N1n\xbb\xf9\xfd\x8c\xc7\xd94sj9\xc5fDi\x97,\xae\x14\x91\n*\xc6\x8dL\x85*\xcd@6\xa59*\xdb\xd0\x0d_!c\xe9\xe5\x01\xfc \xee#\xcf\xe6\xa7\xec&\x86\xce\xb2\x9a\xaaUL>\x93;io\xba\xb2\xa1j\xbawF\xc7'\xda\xdb;\x0b(1\x14\x8dz\xbfxM\xcfn3o9zL\xcf\x98\x87\xc7\x83_\xfc\xe9\xdfo\xcfv\x83\xdb\x07K\xd5\xcf\xe3)\x0bs\x81\x862> \x9e\x06T\xb6\xd8T+\xbf\x9c\xee\x9f\xd9}6\x0d*`?\xdd\xe6f~\x16]\x89\xfd\x85\xbcq\xf3sJ\xac\x97\xa1b\xc2\xed\xaf\x86\x8fo\xe0\xc4g\xc3\xef\xf3\xa5\x0d\x9b\xfd\xb3\xb2\x13\xc9\xfd\x17\x99\x1c\xe6\xd6\x0b\xc1[\xda\x02\x81\xd0\xa5O\xa5\x97j9\xe8\xccd\xba\xdb\xd4\xf7\xd0\xb5\xc6\xb2m\xac;\xb9\x1c\xb1\x85\xcd\xae\xef\xc2\xe2\xcb\xd6 ]\xca\x95<\xb6\x19\x93l\x8b\xdfPj\xbe\xa9-\xdf\xd0\x13\xe6\x9d\xcf\x1dLgy\x8a\xb4\xf4\x9d_\xb6\x1f\xd8F\x9b\xe0\xbe[\xe5\x15z\x1e\x96\xf8\xd7\xf0\x17\xcc\x85\x8e\x92s\x14T\x1c\xfap\xc9\xac\xcb\xf1E\x84O\xf3\xe97H\x9e\x138\x86\x9cb\xf4\xe4\x01\xe6\xd4\xf0\x13\xd8\x85\x18\x9d\xf0\x82\xe9F\xf5\x00\x84c\xd8\xb4\\\x99`b\xc8\xbaz\xeb\xa7!hr\xb2\xdf\xfa\xe8\x9bk\xa7\x15\xe3x\x8a!=8H\x8e\xc2\x85\x0b\xc8\xdb\xc7z)R\xb2XX\x8c.j\xe5\x03\xa8E\x97\xb7}oT\xf3 T\x98\xf4K\xfc`;\x0e\xfd\xad\x8cma\xf4/\x8a!1\xc3\xcd\xa4\x83\x9b\xab\xba.\x06p\x87\x19\xf4\n\xdcL\xe4_C\xf8\x96\xe27\"\xb0\xbb\xad\xf6\xcc\x82\x99]\xac\x9caz\x17>\xc9\xae\x99+\x96\xf6\x89\xf0\x1b\x17&\xc6\xf2\xbfy\xf80E\xdd\xc4n\x98e\x8di&i\xa2\xe6nU\x03\x82\x7flH\xf9\x95V\xc86{ &\xb3\x8e\xbd\x8ep|\x08\x03\xf6\x17\x87\xc0\xce>w{\xbbw\x0f\xbc\x8b'?\xbd\x7f\xf5<_\x17yF\xb2\xda\xcf4\xbe\xa7:\xcb\xea\xbc\\\xbf\x88\xeb\xf8_\x12\x00~\xc64\xc1=\x0b\x16F\xa5\xe8\xd8\x11<\xf8\x87D\x13\xfa\xcbiC\x89-a\x1ee\xa7\xe3I\x7f,\xe6o]\xb6\xab\x1ei\x1d\xfc\x05\xfe\x93\x03\x0d\xa8\xbf\xee\x9c\xc5\xe8\xcb\xf9\xf9\x90\x12P\xc4`\xd2\x8a\xc8B-\xf9\xed\xe3q\x81r\xff\x05\x08\x8e\xb9bC\xa9\xcdu\x10*QU\xdf\xa4\x03\x95P/K\xd14\x1d\xf6\xae\xe9\xabr\x86%\x18\x8c_g\x1b!8moZp\x16\x13HP?_%\xeb\x82\"\xd4\xe0\x17|J\x13\xd8\xd0ol\x990X6\xa0 \xec\xec\x1b\xab\x99$\xcb!\xfa\x9f\x0b\xd2\xaf\x0bL\xf2\x1f\xc9\x98\x99\x19\xb06K5\xcc\x88l\xfa\x91\x0e\xbcM\xc6mF=n\xdb\xa5\x04+\xd2\x99\xb6\x8b\xe2\xcd )\xde*\x86\x8d|Op\xc3\xb1\\me\xa4\xb4\x0f\nq\xca\xacY!\xdb\\$\xc5\x8c\xa9\xbc}?\xf3\x86\x0fAQ\xf8n\x19\xb5\x15E\xc1-\xe9\x98r\x95\xf7\xe3\xe8\xce\xcew\xa7\ni\xb7\x0f\xc5\xb6\xe3\x07\xf6{\x82f\xb4\xf0\xd0IP\xcd\xc6\x1dJ\xee;e\xf4\xa1\xd0\xdf\x1e\xad'\xb7}U\x0b]\xdf\xa9\xc7S(K\xe6\x8c\x12\x9e\x9a\xbf\xec\x9ad\x11\x14\xbb\xa6g\xae\xdd\x81\xeat!\xc1\xb0\xff\xa8\xe3\xe5\xac\xdf`[t\xe2\xfd\x0f\x14\xfcM\xed\xfd\x9c'\x99\xefi\x9c\x13\x95w\xd0E\xd8_]#\x9b\x0cid\xe3F#\xdb\xd5\xb9\xb2[\x90\x17I\x85\\!\x99S\xfc\x88g5;\x01\xf3P\x1f\xc3\xdeb\xb8i8_\xb5VF\xf5X/\xb0Krcc\x04\x9cTl\x16M,3\xfd\xb42D\xcc\xafk\x88\x1e\x00W\xeb\xda\xe7(\n\x87\x13\xe6\xd6\xb2Ku\xe2(\x1c\x8e\xe1h8\x8f\xa0\x7f\xe6\x88\xc2\xa2\\2\xa6\x92\xb15M\xb6\xdc\xf1{lc\xca;/7Qhrv\xc1\x81\xa4\xf1\x05I\xbb\xe3`.\xf2_e4\xd1\xe0h\xd6q]&\x9f\xbe2X\xc6&r\xe1M\xb2,2 \x1c\xd3\x83\x84\xb9\xfbQ\x06\xef)\x05U\xcdX=\x0c#2a\xaa\xce\x10\x7f\xe9\xc70\xe0\x8e\x8a``\x8a\xb4#\x9b\xa7\xbe\x90`\x13\xee\x1c\xdb\x8ccB\xfb73\x9e[\xc0\x15\x1c`\x0b\xcaBkn\x02\xc0(\xed\xb3-Q\xc43\xf2\x82\xa4\xc9:\xa9)\x93\xee4\xfd\x94O_\x99\xf8o;o\x0f\x83\x15\x18RX\x0d\xcc\xbeH\x8a\xd1\x93\x9f\xfd\xcbM\xfe3\xc6\x0eu\x9dh\xde\x0d H\xeb\xa1AE\xc7\x1d\x92\xbe}\xc2\x1c\x92\x1e\xe9\x1d\x92\x985\xf9#]~\xff\xd4i%\x05\xec&\x0f\x8e\x7f?=\xfb\xffv\xbe\xb9\xf7\x07?\xf8\xe3n\xf8\xf4\xc8\x93\xf7\x19\xdcp\xb6?\x15\x8d&~L\xa7\x0f\xfe>\x8d\xef\xffs\xef\xfe\x93\x8f\xf7\xa3\xf3\xff:\xdb\xfd\xe6A\x12\xd5\xa4\xaau,\xd7\xb6~\x01O\x0e\xf7\xb7\xb7\xd1?\xd8\xfe\xd3\xc3/0\xefo\xbd\xfa\xb7\xd4\x8a\xca\x00\xa9f\x95\xa6\xdd5\xb5\xec[ a\xcc\x9a\xc1\x84(\x96\x08\x95\x9a|(\xd8\xe6`\"\x14\xb3\xdb\xef\xa2\xef=\x8bw\xa3\x86\xcbbtR\x8c\x84\xc2\x9d\x18\xdc{\xe7\xed1\x16b\x8c\x06\xdfeLx \x80\x89F[q\xeb\xd7\xd4\x10n\xe4\n\xb3-\xdc\xbb\x07;;\x1d\xfd\xea\\D\xc8\xd2\x7f\xb8\xee\xc7\xc6\x8aC\x98z3a\xf6\xac:\xfd\xde\x9c\xb2\xf0\x00<\xb6\xcfP*)\xe5\xa6l\xd1\xbd\\]H\xe3\xb4E\xdb8\xad3\xf42P\x14\xd8W\xf4\x1f\x16\xd3\xa6s}\xd5\xc0\x0bG\xd5\xfc\x94a\x7f\x8e\xc1_il4\x06X\x13\x19\xe0&\x83$\x1bN\xde\"8\x98\xf9t(\xb6$p\xa4^O\xb3\x01{\x0f\xb4\x07\xb0\x9d\xd3R\xa1\xcb\xf3\xd6\x7f\xfel\xbb\x10\x03\x8e\xfd9zN\x0c\x9b\x9b\xb0!X\x9bCy?.\x92\xffEx4\xcc8\x00\x0f\x17\x93\xdf3\xf2\xe0\x98\xfeB8\x19\xc8\xeb\xf0$\x08\xc1c(\xd1\xab+.\xcf;\xb5\xd9\x9dp\xaf\xb6\x08\xc0\xa6\xd6\x1e\x9e\x1d\xa8>\x18\xcc/^\x8c\xde\xce\xf2\x80\x8c\x01\x1aW\xc9L\x8c\x86\x85\xccp\xfd\x1e\x14\xae \xc1@\xc1\xf6[\xcfnAuYT\xc4Uu\x9d\x97\x03a\xcatE\xc8\xb3\x8a\x7f,\x0buA\xd9\xa3\xca\x01z\xa2\xc8\xb5\x8a\x9e\xa9w\x8ep\x04\xde\x0f\x14\xfcN\xf1\xbf\xbc\xe5\x81*-R\xae>R\xa1\xe0r\xf9\xb9\x87a\xdf\xe9\x06\x8eVq\xf5\xf6:\x13'`{x\xb9-_\xb2d\xb3 \xcf)Bi\xfa\xdeS\xa8\xe1{8\xf8\xf6\xd1S\xd8\xdd\xad\x03 ,\xda&\xf3\xca\xa1t\xff{\xd8\x7fD\xb9\xb1=\xc5\xf2\xb1\xe5\x17\xd4q\x0c2\xab\xef:>:\xbeR\xb3\x8ebJ:?\xe4l\xca\xb6\xb3V\x91\x18\x8e\x00s\xce\xd5Q\x91\xc6I\xc6>\xa7\x9c\x1a\x87\xdd\xac$qM\xfcl\x93b|y\xca\x0b\x96l\xda%|/\x1d\xb8\xe8\xdc\xcb@UV\x91iy\x86\xf8\x98\xd1?\xd8\xef\xee\x92sS\xe9f\xcd1)6)\x97\xa43\xfe,\xec;\x92\xa2\xba\xb6IC\xd9\xe1\xc3\xd9\x0d\x99T\x7f \x9d\x9b\xd6\x03\x81\xd6\xed\xc6\x0e\x96\xeb\xa8\xb3\xa5E*gVDk\xfa%r\x9cS:\x1d\x83\xe8\xe5\xe7\xedE\xf8\xfc\x99\x8a(i\x9a_\xbf\x13\x18\x8c\x0fw\xcah\x16\xa7\xa9\xdfEo\xba7\x18\x11 S\x0cv\xbb\xb37b\xc3\x0fy\x809LK&\xcd\xecBLp\x87D\xbb\xfa\xbd\xa0\xcd}\xef\xdf\x8c\xcd)A'\xd0\x16\x9aS\xdc@m\xa7\xae\x95^#\xc7\xe0g}\xc1:\x0b!\xd1*\xc0\x18\x8c \xbe>\x062M\x10\x9f\x15\xad\xb6\x84\x02}\xc5k\xfc\xff\xec\xbdk\x97\x1c\xc7\x95 \xf6]\xbf\"P3KU\x0d\n\x8d\xee\x06@\x11MAt\xa3\xbb\x014\xd4\xe8n\xf6\x03 \x00a\xa0\xac\xcc\xa8\xaaDge&\xf2Q\xdd\x8d\x11\xe6\x90#\x8a\xc2\x83;\xb3\xde\x91\xa8\x91=cy\xd6$H\x00\xb3^\xdb\xeb\xb5\xd7\xf6\x8e\xf7\x1c>\xd6>Gs\xa8\x99\xbf\x80?\xb0\xfe >\x117\"2\xf3\xde\xc8\xac\x02 R\x9c\x1d\xd59\x12\x1by\xe3\x1d7\xee+\xee\xbdqFcp[\xfcSc\xeeB\x81M\xe2o(X%\xf9B\x8e\x97\xbe\x9cjS\xf7\xf8a\xda\x0e\xada4\xd6\xe1j\xd2\x1b^\xf7\xebc6ms\xc2#v\xf4\x88\x01\xe8t1bT\xde.\x01\xbe\x90\xa6\xfe \x9cDs\xd4\x18\xca\xf3\xcb\xa6\x0f\x13\xd2H\n\x88\x9d]\x0foX\x06\xc6\xd1\xc0<.$\x95F'A\xfb\x8b\x93\xaa7\xa8_\xc9\xb1X\xce.|Tf\x17f-\x946\xc0<e\xbe\x9e\x9e5_O\x7f\xc7|\x9d\x9b\x9f\x97q\xc5G\xf5\xc0\xe4\xa0\xd8\x82\x80\xb2\xb9\xf9W40\x12\xd8\x0e_\xe7gO\x96>\xcf\x9d\x9eg\xb2\xd9\xef\xb1\x97o\xb0\xa3\xe2\xcb\xfc+\xecG\xec\xe5\x13\xec%f\xea\x9c:5\x7f\xfae\xd3\xff\xa9\xef\x9c8y\xb2hb~\xfe\xa4nbn\xbe\xdc\x06\xb4\xca^b/\x9f\xb07\xddND\x0bs]\xb9\xb0/\x9f:u\xe2e)S\xcc\xcd\xce\xcb\"\x1d\xf6\xdd\xef\xb2\xb9Y\xf6#\xa6\xbe\xa0\xb5\x97; C89k\x86\xf0\n\x19\xc2\xdc<\x19C\xf3\xd0:\x0d\xac\xc2\xce\xd5\xddh\x14;ns\x14n\xf5\xcd6\x8aaQ\xefV\xdd\xc5Cd\xbdr\xa0\xe2g\x9cD\xf1\x02kE\xd5\x0c{\x96fI\xeef\x91zH\xbb\xf4\xa1\xe8\xab\x16\"4\x85b|\xdfb_VaU3/\x16C \x1bTS=\xfe\xcf\xe6g\x8f\x0f\x8a\x16\xca\xf7\xc4\xd5\xc50\x97\xb2\xad\xadsK'N\xbf\xf22J\x1f\xd3\x97i\x89\xe1m \x8a\xbd[\xe7\x96\xe6\xbes\xe2\x95ib\x8c\x88\x90\x19uY\xeb\xa8-\xf3\x04\xa5\x13jh\xcf\xd1\xcd\xc4+\xe6j'f\x1e-\xf5W\x8b\xc0a\x00f\x95\x9eo_\xf5\x0e\x02E(6P\xbe\xbdF\xb7/l\x9f\x9e\xc3a4\xbe\xfa>\x8f\xbe\x9b0W\xb5\xbd\x93n\xfdY\xe9\x04H\xef\xc8P\xbf{\x02O\xb9H\xc7\xac6/;\x9b,;\x99<\x13\x19\xf9\xf8\x1a\xe33\x03\x9e\xed\xf8#\xde\xee@\xf5\xd2\xbf\x17T\xbc\xfe\x11x\x19\xcf\xa2!Vt\xa6\xe2\xbb\xcc\xf62\x03\xe7@\xca\x9f0\xb0\x05\xf9\x97\xfcc\x9aY2\xb5\xf0A\x97\xb9\xf5t;oC\n\x97\\\x12h\xb52G,~f\xba\x02/\xf6\x0fhp\xf1\xef\xa9\xea\xfb\xd2\x80\xa0\x0b\x1e\xf1\x85\"\xa03\xe3\xe8\xd3\xd1\x01\xf3\x91\xfag\xd6\xe92\xc7\xcc\xb4\x81\x07\xa5\xb2\xe9z&#\xad\"\xe94\x13ef\xb2\xca\xbc\x083E\xbaDSm\xc9\xd0\x02`bA\xc5\x18\x14\x1c=\xda|\xe7);\xbe\x1e\xdcP,.\xb81U\x87\xba\xc8\xb4\xe9\xfeX\xad~\xa7\x7fc\xf5\xe8W4\xf1\x8d\xd4X\x96\xcaj\\\xf6\xb4\xc67M\xd2\x8c\xba\xe4s\xb5{\xde/v\x88\xc5\xd3n\x90\xdc\x9c\xfeL\x1a%Y\xbb\xd3e\xb1\xf9K\x06\xea\x95\x9e\x88\x14{\xf7=\xd8\xc3c\xc7\xeawM\x0e\x04v\x8c\xc5\xd3l\x98\xc1\x8e/\xd8\x99\x8c\xed\xbb\x1e\xdc\xe8\xb2#N\x9b_wotY&\xff?\x9c\x8c\xdbZx\xd14\xa8\x90yi\xfa\xfd\xbb\xc5\xb1\xab\xc0\xee\x96\x1c\xa6\x8c\x7fR\xde,kHu\x9c\x15Y\x17\xcfT\x1e\xce\xbaki0\xadm\xf0H\x1bH\xab\x95\xa8\x8a\xef:\xffV\xe9\xbbA\x0e\xe9\xcc\xa9;\xa9(\xfb3n\x14\xcb\xb7\xf8j\xc0\x92_I\xf1\xa8\xa0\x0c\xea!d[\x8f\xd7go<\xaf\x04\xa49%=(\xc0\x0e\xe8u\xb3\x8d}\x9e8=ka\x9f\x13/\x98\xd5\xe2Fj`H\xad\xbbK\x19o\xd8\x9e?1[1\xb4_L\xa3pS\x1cw\xfd\xa0\x9b3S\xfc\x13\xacN<^\n\xa2P>*=s\xd3\xfc\xb3*\xee\xe5\xd6%p#\xfe[G\xc8s\xa9+\xd4\x11\xa2\\&O\xa9;\xdc\xf9\x8c\xf8o\xf5@\xd9\x14\xaa\xc0*\xa9Kw\x03\xd0K\xean5\xb5\xd5\x9e.\xa7d\x02\xa2w\x0b\x17P\xd4\x1f\x8f\xab\xfcO\xc3i\xe4Mt\x97\x85\xb0q\xa6\x8cM\x8bs\x95\x93JR\xe3\xa7R ~\xd3\xd2\xcf\x91\xb9\"\xbc\xeb\x8cN|.\x1f\x98?2\xdb\xe9\xaa\x82V--a\xaf\xb1Dp\xc2\xd9.\xe3\xf2\xeeDH[l\x81\xc5\xf2\xa3\xcc\xb8\xdcR\x179\x00\xa2\xab4V\x99\x0d\xed\xe8XAE\x8b\xa5\x95\"=x\xb0{\x9e\xee7\x8a\xcd\xce\xb93\xa5\xe6\xe4\x1d\x8a:\n\x16\x9b\x9dlF\x9d\xc7\xe7jJ\x8bl\xe2T\xd6\xb7,\xa5C\xd3\xacT\xa3\x05\x8eO\xd1\x93D\xd4\x10D\x94.\xc3\x0d\x89\xad\xaa\x0c\xa1S?\x06ql\xca\x1d\xdaw@\x9a@\xe4\x11cg\x04\xf75\x88\xd81Od\x01\xb8\xc3\xb2a\x12\xed\x8b-#\xcai\xbb\xb5#\x1a0\xce\xc1\xac\xef\xf8\x01\xf7Z]\xd6\xdaY\xd9\xde\xb9\xb9\xb1\xb9\xb2\xb5\xb8\xb3\xba\xb1~\xf3\xdc\xe2\xea\xda\xcarK\xa2T\xd8e|\x82\x18\x86\x16G\xac8E\x92\xba\xcd\xad\xae]i\xc5\xab[\x88\xb7:\x0f\xecf^\xd9\xaa<\xef\xb4\xcd\xb0\x90\x18j\xeb&\xcd+h\x1e\x81g?\x8c\xe2\x1f\xca\x8bL\x9ed\x87\xccOY\x18eL\xa8\xf9Q\xbfX\xe2\x94\xa9\xa8J\xe6\x87l\xeb\xdc\xd2\xb1\x97O\xcf\xce\x8b\x05/\xd6zc\xf3\xe6\xea\xfa\xe5\xc5\xb5\xd5\xe6\xf5\xd6\xcbR%V\x95\x7fE\xca\x92\x8fT)\x8eU)m\xe6l\x03=`\x90WW2\xd0\xac\xdd:\xde\xb2\xd8>a\x17\xc8\xe7!;\xc3,\x8f\x16\x8cKv>\x0b\xb31!b\x146h\x80\x1d\xd6\x84\xe3J\xd3\xe2\xa1|\x1a\xae\x8e:\nb\xf8\xaa\xf5\xcaWl\xf9@\xda\x16\x877\x14\x95-\x11a\x08\xde.\xc7\xb3]\x1f\xdc`\xaf\xc9)\xf4\xc18\xd6\x9e\xed\xb2\xa1N\xc5z\\f\xe7\x1b\x8a\xee\xc7\xec\x18\xe4\xe2o\x8f\x98\xa1\xbc\x95\x00^\xd9\xf8aA\xb8G\x82R\x0f\x8f\x1e\xc5\xf7\xc8^\xad\x89_\xe2\xfa1@\xf4AG.\x9e\xa7\xad\xee\xd6\n\x0d\xae\x8aL\xe3\xbf\xb4\xf6\x95\xa5\xd2A\xa7\xf9H\xac\x1c\xc4\xdc\xcd\xb8\xc7\x9c\x90\xe5a\xea\x0f\x04\xba\xf7\x9c\x94\x1f\x9b\x9be\xea9d\xa6\x08\xf3\xc8\xd9\xf3\xc3\x01\xcb\x86\\6\x96\xf0>Ox\xe8r\x0f\nH\x80\xf4\xe9c<\xe0\xf2\xa8\xef\xfb\xd9P~\xbe\xc3\x93\xe8\x98h\xd6\x03\x81\xb5z\x8a6\x17w.\xdc\\][[9\xbf\xb8vsqkk\xf1\xea\xcd\xd5\xf5\xe5\x957\xd4\x99\x02\xed\x8e5\xbd\xe5W\x9d\xb2\xdc9\xb1\xa0\x7f\xfc\xc7\x83iu\x1b\xa6\x96p\xc8\xbew\x86\x8d'\xdd\xcb\xc8\x85\xae\xf2H\xf1e\xc0\xbeg6q\x021\x1fr\x19\xc6\xe1\xf7}\xbd&\xec\xd2\xee\xf6\x0e[\xdf\xd8a=\xce\x06\xd2W7a\xd9\xd0 a\xc5\xa5\xc1V\xd0'\xb5\xb8\xa9\xa0Jf\xc9\xab\x0bzyqmw\xe5\xe6\xc6\xee\xce\xcd\x8ds7\xcfn\xec\xae/oO\xbf\x96\xf2\xde \xd8\x92\xb4\xdc\xa7\xd7\xc5\xf4n\xc0\xedV\xd8e^\x97\x0d\x04\x99\xeb|\xfd<\x8b\xd5\xd1R\xfd\xb3\x08\xccE \xc3@\xb9\xc5\x1c9\xc3\x06E\xaa\x83?n\x15\xf8\xe2\xcc\xe4!\xe4\x9a\xdct\xb2a\xe1)8\x90\xa7\xbb\x113\xf0\xaa\xe5\xdf\x9cU\xab]1\xbaZ\x1e\x032Y\xc3\xa8l\x02s\x7fz\x81\xd9&\x16\x13\x07\xe1\xe6\xa5\x91\x7f\xb3\x94\xdf\xce\x05\xe5a\xa3<\xcd\xc4qq\xc2\xe2\x18l\xaf\xbc\xbe\xbb\xb2\xbe\xb4rs}c\xe7\xe6\xe2:\x10\x14\x1c\xe12-\xbb5\x9e>\xf2F\x9f\xef3\x1d\xd6\xa4\x0e\xb9\xf2\x00\xebB>Msk\x9a\xb3\xef\xb2\xf4U\x96\x1f=\xdaa\xfe\xf5\\\x86`\xcau\xba\x9e\x0bN\x05\xf7\xf7\x12R\x16\x8d\xac\xda\x8bO\x054\xbfqC\xe2 \x1bRw\x0bU\xbd\xf6\xa2^\xf4\xd3IVJ\x96rB\xa6\xba\xa9\x10&\xb5%\x1bg/\xae,\xed\xb4\x00k\xc5z\xbcJFy$\xbf\xce\xc5\x01\x9a\xb6\xdf\xafD\xa2\xab\x1f\x9eq\xbe-_\xd9\x81\x826\xe5xEa:b\x87\xa9\x86-\x0cr\x8aa)\x9f(9\x92\x82\xc4\x1d\x07\x12\xa7>\x177\x81\x8dc\xfdv\xfdX\xe5\xa9K3'Q\x1c\xbeu\xbc\xf5\xed/6\xde\xb2\x1a\xc7\xa9\x1a\xc7\xa5\x02 X\xadm\xb9\xa5\x027\xedr\x8b\xc2t\xb9\xe3\x84\xa7\xe2X\xb5U\x88\\/\xe0\x025~(F\xf5C\xe6\x84\x1e\xfb\xa1\x18\xcd\x0fK(\xd4\xa9n\xcd\xb9\xad\x8dK7\xb7V^\xdf]\xddZ\x994W#/\x98\xa9V\xd4c\xf3\xb5P+\xcd\x02\x94o\xa1\xb5Eq\xca\x99\xcb\xd2\xd3O\xdd\xf1\xbc\x1fv\xd9\x0f\xd5\xc8\xd4\"\x88\x115,\x02\xc8\x1b_\xfd*83C'\xdd\xd5\xc9n\xdaz%\xbeyK\xb1\xb4\xb8.H\xdd\xd2\xc6\xfa\xce\xe2\xea\xfa\xcd\xdd\xf5\xe5\x95s\xab\xeb\x13\x96\xc6r%Q6\xc5\xa8e\xa87cB\xa0\xb4<\xe3\x85:\xd8\x98_\x83)kxD+\xd8E 1\x1e_\xd2\x98\x94\x1d\x05\x15I\xfd\xb3y\x0f\x96\x9cP.4OdT\xb2\xa3\x16\xb7$\xe48\x99\x14f=\x9e\xfa \xf7\xa4u\xcfB\x03\xd5\xba..\x97W\xb2I\xe6\xab\xc1\xad\xb2\xe5\xc2|,\x0c\x0fM+\xed\x83W\x99\xa3\xdc\xac\xa2\xe7\x9a\xb8\x98be\xce\x8e\x9c\xa9\x10\xf33\xe6E\x1c\xf0\x91\x1f\xf8if\x99\xfd\xee\xfa\xd6\xca\xf6\xc6\xda\xe5\xc5\xb3k+\xd3\xce\x7f\n\xfaZ\x8fQ\x81\x10\x07\xdb\x16\xff}\xfdk2\xd0\xea\x1f\x18j\x81\\O\xbc\xa3\xab\xc9}.~wo\xd0c\xa3\x7fb\xaa\xd2\xeb\xbdq\xc9\xe4\x9c\x03\x99\xf9\xe2K\xec\x9a\x98\xc7\xd4\xfb&\xd9\xc3\xd4\xfb\xd6(\xd7yZ\xae\xc3;f\xf7\x8b\x93B\xd4\xf3Iq/J\xb8\xd6\xdd\x87\x1d\xd6oW\xe4\xeb\xb0\xd3\xc5\x02\xb7\xd0\x03~\xf4#\xa1\x11\xd0F\x1aL\x1e\x89L\x19\xf6\xa3\x1f\xd5\xe5\x01\xac\x84t(\xd7\xfc\xc2\xab1\x12\x82y\xd2\xe6\xd7\xa3\x1b\xd2\xb79\xd4\xc6\x9dI1\x0b\xcd\xee\x81\x926\x94\xfdn\xf1\x1a\xd7]\x81\x88\x1f\xecLm0\x99\xf9K:\xed\xca\xf7\x92\xcf\x1enF~\x98I\x0f\xfa\xc0Du\x17\xfc\xee\x0cs\xcdW\xd8\xdb3\xaco\xbel\xc9p\xbd\x04\xc7\xe7\xe2y\xe9\x0b2u\x8bb\x91\xd4A\xebM\xbe>\xc5V\xadaR\xd6\x8c\x8a\x85\x12\x13\x1c;\x81\xef9\x99\xf4\xe9\x8aK\x1f\x84\xd6\xe5}K\x15\x9b\xc6\xb3-l\xcf\xbfR\xea\xbd\xd6w\xdb\xa6h\x1dI\x94\xb72\x9f\xb9\x99\x81{\xac^\x9e\x9d\xc3\x98\xab5Y\x0de@U\xe6\x0b\xa9#\xe1.\xf7\xc7<\xe92\xf3\x96\x84L)\"x\xe2\x11|\xcc4*!\x1c\xf9BQ\x0b_(\xad\x0cM)SN'Sr\ni\xcf\xcfw*\x8ew\x96<25\xbe\x93\xf4\x909\xfd\x8c'k\x91\xe3M\x13a \xafk\x93(\xcaVC\x08\xc4>C?\xe9w\xc9\xd1\xf7\x19?\xf4\xb3\x8d\xc5<\x1bB\xb2\x98<\x1b.\xca\xde\xd2\x197\n\xfb\xfe O\xb8\x80Zj\xc6 7)\xdc\x16e*(is\xee\xf9\xa1\xd7\x86\xcb\x0f\xe94\xdeT\x0d\xf2\x1a\x9dan\xb5\x16%O\x94\xa5\xa6\x99\x93\xf1\xcd \x1f\xf8\xa15\x0eD\xfcD?u0&W_\x12\x87t\x81Ez\xb3\xeay\xb7\x03\xcb\xd2\x185\x96\xf2\x80\xbbY$Z\xb4\xbf\x0fY\x93\x95\x16r\xdd\xd4\x0ft?q\xe2E\xdd\xbf\xfdQ\xae\x89\xee!U\xdaa\xdd\x05\x0c(v\xb5\x8a\xf0\x91B\xf8\x13\xa7O\xe2\x9c\x19>\xbc<\xd4\x9e?A\xb2M:\nt\xe2\xf4)\x0c\xca\x0dH\xe6\xd90\xb0&\xb7c`C(\xdbc\xd3\xed{&\xa3J(iWQW6\xbc#\x89\xea&$\xe80\x91D*\x05@\x06\xd1\xdf\xfczX\x93K\xa2L$x9\xff\xa7M6\nj}\xaf\xa7\xcfzY\x93\xf1\xb2Y(s5\x89\xb5\x18\xdb\n\x9d\xacL;\x0c\nQ|/\x1e\x0d\xd9\xd6\xa7\x85\x16\xca\xa5\xcdR\x14\x12\xdc\xd5r\xfaMz5?\xddX\xdc>\xd1\x91 \xcd&>\xb2\xc1\x16\xd8\xf5\x96%\xd3b\xcb\x12\xa6*\xd4\x82\xbc\xdd\x11r\xc8j\xd8\xben\xd2E\xa4]v=\xbbA\xd2\xc1\xc0F\x04\xec5\xe6\xcb\x07\x99\x13\x94\n\xb3![\x99\xfd\xdc\xebdq\xb5\xae5:u\x9c\xcd\xcf\xd2F0\xc5\"8\x0b,\x98\xc9\xa2\x8b\xdb\xe8=gHS+NB#\"\xf4\xeb\x1c\x8d4U\x98\x1a\x0b\xfci\xb0\xc0\x81\xb7[j\xb1 7O ~eX \xc3\x98-X\x907aA\xca^c\xd1\xf3b\x81\x0d\xcb\xd5\x96\xa5So\x19\xfb\xa6\x89F]\xed\n-\xa5#\xca+$\x84d^r\x14d\x8e<\x00\x90Kq\xf5;\xe8+$\x1b\x9e\xc3\x11\x16\x81\x8a\x87\x98\xb7\xf2\x14\xf7\xeb!\xa7\xfa\xaf2\xa9\x97\xfeT:'kT\xca\xc9\xdae\xc1\xcc\xf6\x85\x8d+7\x17ww.\xdc\xdc\xdc\xd8\xdc\xdd\x9c\x90oY\xfb\x95e3\xb1-\x9f\x9f\x9e\xd1L\xca\xb3v+\x1dF\xfbe\x84\x17\xa8Q\xda;\xfbx\xc4P6\xb6V\xaf\xad<\xefH(B'&Op?\x89F\x17\xb7;BW&\xa5\x80\x90\x0c\xc4\x80\x8b\x1c\xc1-x8CV\xbe\xe4\xc4\x1d\x1c\xf8n\xd4%\x1ef\xc9\xe16\xbf\xdd\x9e6\xe3\xba\x96\x0dP\xbaN\xdee8\xb0U\xff\xe4,\xaf\xcf\xd6\xe46H$t\xae\x06\nIe\x159i\xc1 \x17T*\x939\xcfjl\x0c\x95T\xab2\xc7H\xe9\xa5\x1d\xbf#W,\x92[\x1c\xda\xcdG\x85\xa9\xac\x94\xdf\xd4\x9a\x97\x87\x95\xc2}\x8aq\xca\x93.\x86\xa9\xb9R\xebFC\xfca`\xaf\xab\x19\x96u\x9aLm|\xdb\xccET\x0e\xbbL\xd5ot\x9f.xe^?*H3\xb7P\xce\xa6\n\x8f\x93\xf5\xb2\xc8)?\xdaS\xf7Ls\xa7S\x1e\x96\xda\xba\x1b]\x98j[\x7f\x98\x98\x11B\x066\xc3y,\xa1\xb7\x10\xad\xa6?\x8a77\xc4\x9f\xf3/\xe6D\x86\x92Q\xdb\xcfaX\x97,\xd9\xa9\xf1u2\xe7\x10\xde\xeb!o\xfd\n\xaa\x17u \xcfH\x95\x14$z]$\xd6T\x96\xc6\x81\x15\x96\x88\xd7\xb9\xd1-\xe7\x05\xac[\xaa\xb5\x8d\xf3\x1b\xbb;/f\x81,\xc4hf\xdf\xcf\x86\x97\xf2\x0c\xaeG\xa6\xc8\xa8h\xc9\xe4\xd5\xf8\x8c+\x9f\x81\xc0\xb2\xda\x10^\x0b\x9a\xd5\x98N,\xb8\x96L^\xc0\xa5\x8d\xf5s\xab\xe7w\xb7V$/z\xde\x85l\x1a \x18\x16,\xdcG\x8d\xea\xb7+\xc0t\xc1\xf6\xb8\x04\x83\x94s\xf2\xd3E\xb3x\x90\xd4\xad\xfaO\xaf`\xa9\xe7\xa2d\x0bLY\xe0\xbe\xa4\xd2\x0f\x94\x98\xee\xd9\xc3ug\xc4S\\q'2}H\x90`\xd5a\xa9\x9a\xe5\xb8i\xdbS\xde\x0e\xdb'\x89t\x15)\x08\x95\xa1 o\xc3),D9J\xb4z\xbe8\xe2\xafDV\x1a\xab\x04B\xf5\xc7\x8a\x9a\x05\xcb\x967\xcb\xe2\x01\x19\x82\xec\x90Z\xe5\xe8\x08enr\x1f\x8a\xbc#\xd9\xa9\x83p\xa6v/'\xf7\\\xd3\xf1tb\x0b\xd2\xa2l\x0f \xb4\x8d\xec\xe4\x80\xecT\xfb\xcaQh\xe4\xa05?\xcd\x88\x90\xc5\xca\x96\x8b\xe7\x16\xb4\x18\x12\xb6\xa2\xa9\x84-fD\xaa:\x81\x8b)\x9c\xae\x17\xbaXIYt\xac\xe2c\xb9T.\xc9T\xd2\x95/%\x86\xe0\x1b\x9b\xa7\xc3vn#\xb9]\x9c\x17\x91\x92\x12\xeb\xe1o$\xa7S#@H\x11\x80\xce\xcb\x8d\xc24\n\xf8\xcc\xbe\x93\x84\xed\xd6\x95\xc5\xad\xf5\xd5\xf5\xf3\x0b\xcc>2?e\x1e\x8f\x13\xee:\xe00\xeb\xb1}?\x08X\x8f\xeb0\x1e\xed\x91\x19\xf2\x83\x8c\x8d\x9c[Q\xc2\xc6\\g\x9aB7\xe2;\xd3\x04\xbb\x11\xe7\x99\xce`,I\x98?\xa1W\x1b\x8f\xc1\xbf\xca\x9b\x039PF\xa9\xba(\xd7\x95T\xd0\xbc\x97^b\xed6\xbcp\xa1$\xe3(\xe6i\xab\xd3\x99\xd9\xe3_h%\x99\xf4~v\xa30s\xfc0U\x17N\xb2\x87T\x8bI\xdc\"w\xeb\xdf]\xe5\xc1\x98+I(\x08\xa2}\xeem\xc3\xa8\xba,\xed\xa8\xe46\x99\x84\xfb]f9\xe9\xba\x1d\x1f\x9e\n\x95\xb9\xcd\xec\xf4\xc0\xaf\xa3\x07\xddI\xa2B\xfdbh|u\x92\x81\xbc\x08L\x0b\x07\xb79V\xcd\x15f\x8a\\\x9f\xbb\xc1^\xab\xfes\xa1\xe9TMEtT\xa16\x18\xfa\n\xaec\xe7~e\xc6\xa3\xfa\xecL\x9f\x84\xdc\x1c\xf14\x1a\xf1)\xc5fSG \x1e/\xe1\x9b\x9f\xa4Y\xbb\x06G\xac\xb2t\xd3.V\xe4\xbf\xc9\xfc}\x82da3rh\xa2\x84\xb8 \x92D_$\x13\xa9\xeeg1\xa6\x06\xe2\x0b\x9b:\xe3\xa7\xe2?\x10\x1b|\xe4H\xa6\x8c\x95\xcf\xbd\xcf*\x97#2\x9b\xf2\xce\xcc\xc8\x89\xa7h\xa5\xd4\xd2\x91#!\xec\x7f\xddv\x1b\xaf\xd1#s\xb6\xad\xd7\x87\x0b\x99W\x19E\x84\x8a\xa2\xf0\xa5\x11A+F\xe5]\xff\x16\xfbFhD\xfc\x80\xbb\xb9\xf4,\xb0j!]\x95\xe5f\xfe\x94E\xd7\x90\xd6\xceH2\x88\xa4\xaa($\xcd\x8aB5^\xb8\"\xe1\x17\xe3\x99R/\xad\xa0\xb7]\xcd\xcf\x9a\x04)|\x9aj\x9f\x83\x89\x94\x1a\\\xe7\x8e\xe8\xa8\x0c\xd6\xd90\xaayr,\x97%\xa6x\xc1M,C\x968\x0d\xcf\xc9\xd6\x1f\x95\xe2\x80/(\x03\x90>\xeeb\x9f\xaa_\xd4\x89\xae\x97\x1eJ\xd4\x7f\x81%5*\x88\xdc~+hb\xfb\xe5W\xdd\xca\x1d\xe0VMS\xf6s_K\xc8x\x1b[\xa9\xac\x0d\x80\x93_\xcd\x1by\xb0\xa3\x0b\xcc\xb1\x83K\x0f\xde\xd4\xd8(\xcb\xaf\xe6X^\xbf\x95rJ\x1d-\xfa\x86P\x89/\xe3\xf1\xd2\x0f\xebnB\xd3\xa1\x94\xd8Vn\xe7N\xf0}~\x08(\x86\xbe\xd1\xf5\xaa[*j?\x917G\xdf\x80\x15\xa4#K\xdba\xfb$y\xe7:2>\x16\x13\xfd\x8dj\x05I>\xd3\xb7\x10\x16{\x82\x02\xf1\xf3\xa2\xfd0\x98\xd2\x1d\x89Y\xc8emj\n\xfd+\xf4D\x9e$\xea\x02\xb9Y]aZQ\x9at\x8d\x8c\x7f\x8e\xa94u?\x10\xf8Tp\xfb\xc95\x02I\x9f\xfb\xa0\xc4v\xcc\xddv6\x93 ~'\xf4\x8a< \xda\x9d\"\x93\xbf.\xb6\x9b\x04u6\n\xfdk\x1e\xbbL\x14#8\xac\xea\xa2[7\xc6\x00\xfe ,\xdc\x0d\xb8\x934\xbc\x8d\xa1\x7f\xcf\x83dB\xfe\x0f\xa6h3O\x82\x05[\x9e\x16\xfc\x13\x03\xde\x96^\xd1G\x1a\x1e<\xd4?\xf5 \xe9j\x98\xf1\xc4\xe5q\x16%\x0b2=\x0f\xfe*\x96j:\xf9\xb5\xfc#w\x8du\xbf\x1a\xef\xee\xf2/\xe1i\x1c\x85)'C%\x9f\x7f\xfbcu\x13\xee\xf10\xf3\x9d ]`\xad\xd4\x19qEg\x1b\xe2\xe0\xf4O\x91\xb7&\xa7\xf6\xf2OP\xc98[\xa8\xbe\xe2y+\x8d\xc2\xee\x1f\x1c\xff\x83\xc9\xe4\xad\xf9\x94\xdc\xed\xccdC\x1e\xb6\xfb]\xd6o\xb8$\xb0Bj\x96\xc9r\xc8\xa6\xd5\x8c\xb4@x\x1d\xa2\x1d\xcc\xd1\xec\xb2V\x11*\xa4i\x8a\xf9\x08zG\xab\xe1\x0d\xf4\xaa\x1553&Nx\\N\xdf\x01r\x95\x11G\xfcg\x01\xc4p)\x90Ws h\xdf\xa8\x92\x1d6\xebLdT\xd9a,\xa8\x85\x90\xb5n\xc2\x02\xddT\x93\xbb B\xf8\x04\xbcQ\xae#\xb6\x04n\xfaW\xb3I\xe4\xab\xcd\xff\xb9V\xb7\x0d\xaa\xdbh7\xe3N\xb7\xb9\xc6)\xa2\xce\x8c_\xfe\xddm\xb2\x0c\x97\x7fU+qe\xb8pc@\xcc\xd4\xfag\xbb\xd9\xb0\xda5i\xe7\xd3\x04\xd8L\x8a[113\x8d\xd9!u\x10N3v\xd5\xa3\xd5B\xb3\x0d\xd8\xf6S\xb3\xb6\xbc.g<\x98 \xd1)]\xf0nQD\xe6;m&=\xf5\x98\xdc`\xed,\xa2\x88j\x1e\xa0\xa2\x9b\xfa-\xfb\xbf\x90\xb5k\x82\xe7O\xf5\xab \xca\x99\x9f:&\xe7\xab\xf2 \xfa\xed\xda\xe5\xbe\xace\xf3\x85\x9e\xa4\x1a\xf32\xab\xe2M\xdf\x8e7\xf6\xba\xea\xdai\xbaH\xb9t\xe6EG\xca}\xe9x6j7u\xdba\xfb\xf4 \x12\x9c\xa6\xee\xa8N\x9c\xb0\\R\xc9\x00NZ\xc5Q\xa0\x93\xb3\xb3\xb6P\x04\x00\x11\x0bm\xaa\xc6pr\xb6\xe6\xecXB\xb9\xfe\xe9\xc5\xb3}\xcd\x01\x18c\x95T\xb2\xda\xc8\x80gk\x91\xeb\x04 `-4\x9b\x03\xb5\xf7\x834K\xc4N\x92\xf2\xab\xceHU\xed\xb4\x0bi\xa9q,\xbf}bf\xec\xd8g\x0fw\x130Tk\xfb>|op6\x85\xf3S\xb9v\xc0U'^w7_\xa2\x96\x169\x9b\xe9\x87`C\xef`E\xb9\xee\"^O\xe9\xb9\\#\xac\x06*}\x99[\xb9*\xa0\xf2\xb7<\xb7\xe6\x9cFh9\xda\\)\x1f~\x97\xf96\x03\xbf9\x0d~\xfd\x1dIh5\xe2\x87U#>{\x8d\xb5\xa3&\xfb\xbdR!:\x02w\x9f\xab\xd8n\x12\xb4[\xe2CU\x89\x08KV\xfd\xc2\xa8?\x93'\x81@2x\x81]HH\x99\x8a\x84#\xe7%\x04\x03\x89ED\xfd\x06\x9f\x9f2\xe6\x0fx6%\xa6q\x15\x0d\x83\xdf\xdf\x94\xf6\xfc\x05\x19J\xf8\x0d\x9d\xa5v\xef\xe8*\xe1q\xde\xf6\xda\x9f\xf4\xf0\xf0\xbf\xbc\x87\x07e\xb0u\xb1~\x82U\xdb\xef>e\x00\x91\x8e\xad+\xc5sE]\x96\xce\xecn./\xee\xac\xdc\x84\xd8\x86\xed A\x0df\xef\xe0\xb9\xf1j\xb4J\xa1\x04\xd0P\n\xdc\xeb\xce\xc6\xf9\xf3k\xd3\xf6\xfa\\1)8U\x89\x19\xb2\x8a\x05;\x82\x02=\xa2o\xc2=\xf7\xf3\xc9\xd3\xd7\x0d[\xb5\xd9\x1f\xa6\x91\xad\xa7\x90o+ \x16\xea\x8b1e-\xe0\xf8\x15\x8d\xe7\xd09\x9f\xfb\xbe\x91C&\x1b\x95c\xb4[xtNa\xb2f%\x84\xda\xf7C/\xda/.3\x86NZ\x93\x00\x0d\xff\xb2\x99\xc09\x8c\xf2L\xc7uKJ\xbe\xccy\xbc\xe6\x87{\x17\x9ct8\xcd\xfd\xd2\x04\x1b]-\xf4K\x98|\xc4\xae\x9a\xfc\xb6\xb5\x1b[\xf2\xcc\x99\x90\x06\xc4$\x1d\xdaq\x06\x0b\x85\xbb\x10\x1dJ\xe5\xcb\xdd\"\xd1\xacEUq\xa4\x9a`UU\x00\xf4\xb2-|\x07@\xdf\xb1+\x17\xce\xd7'W\xff\xf6 \x89\xbc\xcc\xd8v\x93(\x08v\xc0\xf5.U\xffPw\xe0\xf2[\xc2\x1d\xefp'\x82r\x8a\xb8\"\x1c\xae\xd45!X\xcd\x0e\x8f\xfd\xda\xb8\xf6\xbe5\xf2\n\x0c-'g\xb1\x97d\xaej\x9c>AR\xa34\x86\xb6c\xde(\xdf\xa0l\x07V\xac\xe8\x7f}X\xc1\xd4*\xc5\xe5e\x9cH/\x0b\xc67\xc9\xcf\x06\x9c5\x81&5\xc4\xbdLKp+\xef\xf8c\x0f{\xd8h-\xafU\xde\xc2\xcfT\xee\xe3\x08r\x1f\x17\x9e\xf6y\x8d\x99\x1e\xb2*V\xa9y\xd4\xe9\xb2\xb0\xdd\x91\x8f0\nT\xf4\xc3Ag\x8aG`\xc5\xfeG\x13#D\\Yj\xae\xe1\xd6 0O@k\xa14\x10Bi \x84\xd2\xa0\xa1\x9eV\xa6\x13!\xef\x8b\xe3#+\x9fK\xa2\xd1j\xba=\x8c\xf6\xc3\xef\xf3C\x89\x88u\x0d\xc8\xdca}\xf4:ls\x7f1\x8d&\xeeO\x8e\xa5\xf1\xd8\x19\x16O\\\xa9\xa1,\xd5\xb4Rr\xc0n\xa7\xac\x9e:B\xcc\x12\x93\xef\xc8\xa4\xa2\xf5u\xe7\xe5\x9d\x8cyX\xf65\\\xbb-\xe3\xd0\xe1\xcaA\xd3\xa4M'\x83v\xd9Q\xe6Iw\x16\xf1\xd7P\xaaTs\xd5\xf6^z\xe9\xb9\x1b\xac\x8b\x84\x98\xea.\xbe\xaa\x07N\xff\xb2Z\x95hT7\xc4\xc3\xf4\xb7\xf9j\xa4\xd6\xd8\xca\x8a\x8b( \x107\xa1\xcd\x9bYTs\xfdd\xae\x9dp\x1eIE\x06\xafs\xfaTW\xe3T\x86\xb5\x0cf\xaa95[GX\x85RV\xe4\xb2z\x0c\x9f\x92`2\x85\xe6`z)\xa8p\xa7J\x9f$\xbbh\xc2\x8f\xb1\xc9\x06\x04\x0f\x90\xcc5\x1c\x8d\xd6\x11\xf08\x13\xc4\x8c\xe9\xcc\xf9\x91\xa9\xd8\xe9J\xc4o*\xd1L4|\x9c\xf9w\xfah\x12\xfd\xd3'\x9e\xebwhT\xba\xdd\xf6\xf1\x9b\xc7\x07]\xd6b\xad >\x1c\x13(\x94#\xe9\xa8o\xe8\xa6\xa0\xa2\xbb%\xaa\xda\xf6\x1b\xe6\x18J\xfe\xdav\xba\xf0\xdc@h\x8eP\xdby!\xe7rl\x95\x9f&2\xf3\xa9,l\xac\xe2\xf7\x8b\xd0S\xe0\x9f\x96\xeb\x043\xa9Y\x03\xd7xi\xf9i;\x01\xfd;0Z:\xef\x80\xe1:D\x1a\x0c\x92\x11%g\xc7e*\x92\xa5-t\xacq\xddF5\xb2\xe8\x8b[\xb9f!A\xca\xbd`&\xec\x87\xc5Zn:\x89\x98/\x17\x92\x8cY9u\xd7-\x0b\xc8G\x1eg\xb2\xa8\x96\xac\xff\xd68\xc4@\xae(\x96\xf7\xa7\xb1\xd7O\xc3%d\xbb\x8aWP\x87\x1340\xbb\xe5\xa9\xda\x8d=\x9e\x01m\xc4\x94f\x04M\xf0\x8d\x97\xaf\xfeC\xe1U3\xe5\x97\x84|\x14\xe7\x19\xf7\xb6\xb3\xc3@\xe6#\xae\xad \xd6\xb4\xe5\xf4\xd2(\xc83\x95S;\x99\x89\xa3T\xc6\xea\xd4W\x93\xf1\xf7\xec5v\xbc\xed\xe4Y\xf4#X\xc7\x1f\x0d}\xcf\xe3a\xe78[\xa8\x02:\xc7\xeb\x99O\xab\xef\x1fp\x0f\xf7\\\xbc\x90f\xafidx\x99^\xf0U\xf9\x1fG\xf0\xe0b\x91^\xad\xa7\xd221\xbdm\xa5\x9cN\x97\xb5\x8f\xc8wTZi\xe6d\xbe\x0b\xae\xd3\xe5\x81\xbd\xf4\x12\xf3eZ\xe0v2\x13\x8dy\xd2\x0f\xa2}v\x94\x15\xff\xb8Z\xf9\xd7\x1b\x9d\xc2\xdd\xde>\x17=\xd3IX\x88\x14\xc5 \x960\xc0\xf3\xdaT\xa9\x93\x8d_\x88\x96-\xb0\x86D\xe7\xba\xec\x02\xab\x89q\x13\xbf\xcaQ^`\x83\x06,.\xb3\x9f\x056\xae/I\xa4\xae\x056\xb4\x13\x1f{\x1b\xa5{\xe9\xfa\x95\xa8r\xa6i\x1d\xbf\x18\xc3\x9e\xccM\xef$\xf5UZ\xac\xed\x01\xb4_\xd4{\xa44\x8b&\xa9\x1e^;\xf1\xbb,\xb7SgDX\xb2\xa1\x9fvY\x9d]\xd5\x08\xc1\xa9\xd5\x90\xed\x1aCv\xda\xe9J\xeb\xed\xec\xab\xac\x0f\x8f\xf8\xf5\x8f\x1e\xed0\xf7z\xbfj\xc8\xee7\xbf\x16/\xd8\x9cO3\xa7\xc2 \xe5\xbb\x83\xc1\xcc\xcd\x9b\xd2\xb9\xec\xe6M\xed\x12]\xf2)\x0f:\x1d\xe9a\xa6L\xe2\xbc\xcb\xae\x8b\xba&\xc9\xb2\xdb\xe9\xc8\xf0\x99(\\\x8b\x1co\xa2\xfdL\xff4\x07\xf6g\xe2$\x8a\xd3\"\x93\xc2L\x16\xc1\xc1j\xca5\xc0\x14\x17F\x92G8\x939\x83\xae|\x04U}]\xf5\x1a8*\xbe2\xadH\xb0\x82?\xd4\xe9\xc4p\xc3\x10\x12G\x02{V\"J\x96K\xe6\xe9\xbc\xb4\xd2\xf06<\x92I\x82.\xaby\xf6hO\x88=\xad\x84\x87\x1eOj\xcc\xa6\x8a\xdaL\xbc]a\xc5\xa0Rdq0Q\xaai\xec\x84\x84\x9c\xd1F\xfa\x0b\xf0\x9c\x04\xe0Cm\xe1\xbb\xdd\xda\x9e\xb8z\x90B\"F\x1d?\xa7\xab|\xa3\xd3E)\x19\xee\xb6\x8b.\xcc\x15\xf37\xda\x87\xe7\x1bG\xfaCi\x176\xff\xfc\x1d\xd9/\xfd~G\xf6\xbf8\xd9\xb7\xe8\x85\x9a\x13d\xce\xe0\x0b\xd3\xec\xf0w4\xfbw4\xfb\xab\xa6\xd9\xcf\xe7\x1ag!?\xb5It\xa28='\x13\xb2=\x87\xe3R10\xc4Kt\xba\xaf\x93\xb3\xa7-L\xe3E\xe5\xfb\xfa\xe6\xeeG\xa3\xb7(\xc9{gy/\xa5TA\xbe\xd5~\x86\x85&`\x13\x87\x0f\xfc\x97\x85\xa1\x93\xcc\xd4l\x8a`\xa8)\xed\x19\xcc\x04\xeaB$\xf9tlD\xff\xa6\xf5\x1e\xc2?U/\x91\x0f\xc0w\x1b\xbc7'\xb6f7\x9a\x19h\xb3\n\x03\x13\xbf\x98F!\x9e\xfc\x146L\xf6%\xe6os\xe3jwf\xa2P\x90\xdc\x80g\x96G!m?\xb3\x8c/\xbd\xc4Zz\x10\xe5@\xcdP^\xec\xa6<\xdb\xf1G<\xca\xa5\xbb3<\xb8\x7f\x86\x1d\x99\xeb|\x95+_\x0b\xad1s\x92\xaf\xd3\xd2Y9\x15\xeb\xa1/\xefF\xf9\xbd\xc6\x96\xe7d\xce\x82?r\x06\xfcx:\x1e\x1c=\x18\x05\xaf\xf6\x9c\x94\xbf|\xb2\xbbya}\xfe\xda\xe1\xd9\x13\xce\x95\xadYgy\xd6\xbftkq\xdf\xbd0\xf0W\x97\xceF\xd7\xae\x04\xa1s\xe1\xf5\xd3\xab\xb7V\xf7/]8{r\xd5_\x1c\xf0\xf3si/\xbctzu4\x9c\xf5.,\xbe\xbcvx\xfa\x84w\xc2\xcd\xbd;\x97\xf2\xde\x89\x8b\xe1\xda\x9d\xd5\xfdK\xcb\x8bc\xf7\xc4\xb5p\xd5?;\xef\\\xb9|\xe2\xf5\xd1\xe9\x93\x9b\xdb\xab\xfb\xab\xcb\x8b\x83K;\x8b\xfb\xab\xcb+\xfb\x97\x96V\x07\xee\x85\x8b\x81;\x7f\xf9\xd0\x1b]>\xeb\x9e8\x1b\\=\xb1\xb5}\xf5\x8d\xad\xb8wg\xd6\xe7+s\xf1\xb5s\xc1\xbas\xe5u\x7f\xf5\xfczz\xf5\x8d\xf5;\x9b\xdb\x17\xd3k\x17.e\xee\xe8t\xda;\x1f\xe4\xd7\x0eW\x07\xee\x89\xadS\xbd\xf3\xbb\xa7WG\x17\x87W\xe7\xb3\xd0\x1d\x9d\x9e\xeb\x8d^\xcf\x9c+s\xc3k\xf3\xbb/\xaf\x9e?5\xee\x8dv\xbf\xb3z\xbe\nw\xcf\x9f\xbe\xe3\x88\xbe\xe6O\xbe\xbcz>\xc8\xc5\xdfW\xaf\xec\x0f\x9c+\xa7b\xef|0\xec-\xa7\x83\xab\xa3s\xb7\x9cy\xef\xb0w\xe2r~mi\xee\xf0\xda\x1bg\x83\xabo\xbc^W\xde\xdf\xbcup\xcby\xe3\xe2\xad\xde\xf9\xdd\xc1\xd5\x13\x83\xd3\xab\xb7v\xf7W\xfd\xb3\xb7\xf8\xce\xac\xbf\xbe\xb3\xe8\xaf\x9e\xbf\x16\xf7\xce\xef\x9f^\x1d\xc91\xf9\xab\xe7O\x85kW\xce\xcdz\x17V3\xf7\xc4\xd6ao>\x0b6\xb7/~\x87\xcf\xaf\x8f{\xa3k\xf1\xb5\xc3S\xb7z\xf3\x07c7\x9c;\xbd\xea\x9f\xcd\xaf\x1d\xce\x0d\xbd\x0b[\x87ko\xac\xcf\xba\xa3\xd3\xc9\xb5\xed9\xb3o\xfcDv\xab7\x7fj\xe4\\qso>\xd8\xf3\xce\x0fO\xf7\xb7W\x07\xbd\x91\x9b]}ck\xd6\xf5\xe7\x0eQ\xdb\x87W\xafl\xc5\xde\x1b\xeb\xb8\xdc\x1d\xef\xc2\xc5\xb13\xbf\x9b];\x7f\xee\x8es\xfe\xdc\xa1;:w\n\xd5\xdd\xbb\xfa\xc6zt\xf5\x8d\x8b\x87W\xdf\x08d\xfdb\xfc\xab\xb7\xd6wv\xe7\xc4\xffV\xfd\xb3\xa6-\x18\x93X\x93\x15\xb1&\x87\x9b\xdb\xabw\xd6K\xf5\xd6\xael\x0d\xdd\xf9\xe1\xd0\x0d/\x0e\xc5z]\xda\xb9:\xbbvk\xef\xce\xa5;W\x0f\xd6\x97/\x1d\\\xba\xf3\xfa\xfc\xfa\xf2\xca\xdc\xea\xf2\xee\xfc\xda\xad\xbd\x13\xebw\x06'.\xed\xbc~g\xfd\xce\xe0\xf0\xd2\xce\xa5\x93\xab\xb7N\xber\xf5\xca\xa9\xb8w\xe5\xdc\xec\xb5\xcb[\x87W\xaf\x9c\xbasmt\xfa\xb0\xb7}V\xae\x99s\xe5\xe2\x9cw\xfe\xf2\xc6\xd5+sb\x8dg\xdd\xd1\xb9\xdc\x9d\xbf6vG\xb3\xfe\xea\x85\xadS\xae\xc0\xa1\xf0\xe2\xd8;\x7fn\xf6\xda\xf6\xea\xe0\xea\xfc\xb9\xf4\xea\xec\xdc\xf8\x9a\xc4\xad\x83\xb87\xbau\xf9|\x90]{\xe3\xd2\xe9\xd5[\x8b\xdf\xb9\xb4\xbd:\xb8v\xe1\xb2\x98\xf3\x81{\xb8:\xb8:\xba\x1c:WN\x9e^\xbdu\xf6\x8eX\x0b\xc0\xab\xade\x81g\xde\xf2\xac\xef\\9\xb5w\xed\xca\xb5\xb87\n\xc4X\x8en.\x9d\x1e\xf6F\x81\xd8\x9f\xe0\xf2\x85\x8b\xc3^\xb8>\xea\x9d\xb8\x98m\xde\xda\x1f_\x9d\x0f\x0e\xaf\xce\x1f\x04\xe2oq\xe66\x07\xd1\x99\xd67D\"X\x8a\x82\xc0\x89Sx\xbab\xcd\x0f\xf7\xe4\x1f\xe0\xcb#\xff\\\x0d\xe3\x1c\xfe\xda\xe1\x07\xd9b\xc2!\x0d\xea\xd9<\xcb\"\xe0\x16[\xd2KX6\xa5\xfe+\xb3}\xcb\xb7{\xeb\x82\x11\xa5\xff51Ch\xcf\xecW\xac\xafS\xf6mF\x10G7f3i\xf4mF\x90T\x01H\xef\x81\x02\x10#\x88\xab\x00\x15#\x88\xf4\x13\xb7\x9b\xbf\xbf&\x87m\xdaqLx\xbd\xb10p\xab\x85!3\x16\x06\xae^L\x98}\x95\x85\xec\xbb\x8c\xbf\xca\xc2\xa3G;L\xc5\x0d\x17\x16\x86\x10\xa9\xe1jb\xd9tI\xa3U\xe9#G\xd0\xac:3\xb7\"?l\xb7X\xab3\x93%\xfe\xa8\x8dEg&\xb5\xfc2f\xd5wd\x96#\x9b\x14\nLl \x99R\xdbSb\x1c\xc9\xa8a\xa4|G\xdc\xe9(\x99\x05\x8a\x17\x12K]\xec+\x1aIPj\x0b\x9e\xdfE6\x85\xccj=\x98`9\x98\xd6j\xa0\x11\xa4\xd0\xd6\xebET\x95\x834\x0f\x82\xd4M\xb8\xed\x81)\xfd\x0bM\xc9\xfa2\x96\\q\xbc\xcb\xae\xb7\x8a\xf6e&\x9d<\x08j\xdf\x1e\x93\xc9\xec\x8cg\x8e[k\xf5\xe0 \x88B4\xaf\xad!\xed\x84\xd4J\xf7\x9d\xc1\x80'\xc7\\\x8dn2\xabN\xc8^c\xadcr(l\x81\xb5\xea\xbc\xc6\xa7\x1fG\x9b>3\xe97\x99e\xdc\xc0I\xd3u\xf9XZ\xdc\xf6g\xcc?+\xafj\x95\x7fw'\xbb>\xde\xe8Tb\xfd\xdb\xae\xc5\xceR\xa5\xde\x1e\xf1\x97\x1bE=?\xe0bI\xaa\xfb\x9c9\xbd\x80g\x0b\xacu\x0c\xfeB`\x8f\xa7{Y\x14\x0b\xb8\xfa\x13\x15\x08\x9cd \x9a=6\xf4JW\xb3\xafV\xe8A\xf0;J\x00\xbf\xdf\x1a%\x18\xfa^CV8\xa0\x01{\x9c\xc7K\x90\x8d\xb3\xa1=I\x0b\xf8\x0c\xa0\x93\xd0\x02\x01m\xba\xd2\x9bB\"\x88\xf8Sb\x05\xf1\xdb\x90DC\x0cE\x90\x8brw\xe2\xdf\xd0\xa2|\xabQ!\"k\x19\x94c-\xd9b\x8b< k\x86%\x93\xf1\xbe\xf4\x12;\x12NAe\xc0\xb6*C\xe8\x9b\xa9\xcc\xf5\x1a{\xb6\xe1\xd89\xf3C\xe65\xbb>z(\xedG;\xefL\xd2\xf6\xf5u\x83W\x1b\xec\xa4\x7f\xa2\x83\x1c\x1e\x0d2F\xdc)L :\xc8\xa9\xa85\xb1'\xa6z\x0b\xd8w\xd9\xdc4}0\x99\xd4Q\xbe\xe5\xd2\n\xa3\x90\x0b\x02=mT\xad\xa0\xea~\x98O\x91hob =\x84^\x10\xb9{0\x86\xae\xf9\xe8F\xc11\xf9(\xa5\xfc\xde\xd8\xd6\xf3\xda%t\x0cW\x8c\x0c%\xd7K\\\xc1\\\xca8u\x88=\x11\x97\xbf0\xa7J\xb3\xc3\xa0\xf6yl\xfd\xf3\xfc4\x0e\x9c\xc3\x05\xe9}\xacv\xd1\xf2nG\xf9\xd7`9+1\xc7\x9a\x14J/\x86\x19v\x8d\xc2\xf3;\xb6\xf3\xe2\xd8\xce$T\xf4\xfc\xb1\x1d\x0dK|jZ\xc9\xa9\xa8R\x16\xa1Z\xfb\x89\x13\xc7<\xa9u\xd2{!\xd8S\x1c\xc4vI\x85\xfe\x1d&}}\x98\xd4\x93\x8b\xfeU#\x93\xea\xe5+\xc5\xa5\x8e\xfe&\x98?\xcd\x91Y\x1af\xabF|.\x19t\xeaQp\xd2\x82f\xfc s\x12\xee\xb4*\xb7\xec2\xb5\x936\x1d}\xf1\xc6}\xd1\x02j\xb9r\x86\x8c\xa1j\xaa3Tw\xa1Ws\x80(\xdb\xd4\xe6\xab/z\xb0dV6(-\xc7b\xe9b\x08\x85lo\x81\xeb\xe8\xcc\xba\x17 \xd4jB\x00\xa7<02\x15&\xfc\xb5\xc0\xf8\xcc(\x0f2?\x96V\xa7\xeb\xad\x96\xf4\x0bo\x89S \xaf\xf6j\xb3\xac\xaa\xa3\x17Q\xa4\xedZ/~\xf5\xef\x1bC\x13\x9e_\xa9Q\x0f\x0d^\x16\x1d4\x14\x06\xedF\xafj}\xb9\xa4hte\x14g\x87\xb2\xdd\xfa\xe2\x91\x1e\xab\xdc\x17\xd8?\xf9<\x12{\xcd\xfe\xbd-\xb3u!\xc8\x17\x15\xfa\xc4\x81jt\x0f)Q\x16+\xf9\xab\xad\xa8\x17\xaa1\xab\xac\xc6\xb6\x86\xe5 \x97\x86N8\xe0\xc6?\x05\xfei-/P\x94\xbdV?\xdd(V\"n\xfdt\xd5\x80Z\xf6d\xd6w\xbb\xacu\xecX\xab\xa3DWA\xf6\xaaq\xca\xd3\x054|\x99\x012}R\x1a\xa2 Y1\x91m\x999\xb7)}\xfd\xddnQ\xe8\xb7\xc9\xc2\n|92\x87\xac\xfe\xd5\xa3T\xbd\xd7\xa8\xda\xab\x86\x93BM\xcb\xd4\x81\x9e\x99\n\x8a\x95\x9b\x9a\x18\xf2\xc9'\x91\x1a\x08\x9e\xd6m7\x93\x83p\n*\xe3K\xab\x02\x84\xd7+N3\x939\xc9\x80g3\x80Ei\x83\xf3\xb43\xe1\xa5\x1b\x01\x8f\xd8k\xcc\x9f\xce\xd0\xaf\x7f\xc6\xb7\x06\xe8\n\xb7\xfb\x91\xdd}\x9e\xe0~\xd3\xa4\xc4\xe7\x9a\xf6\x04=\xd4\x93\x97\xe5\xba\x103\x04\x81!\x13\x0f\xbbS\xd3l\x17\xdc\x1a\x12[\x88>\xc2\xff\xeaR\x8f\x85\xd0`.\xd8\x9a':A\xe8g\xbfe\xc1\x9f\x91\xb9\xb2\x17\xc2\xec\xd9d\x86\xcf\x9e\x83\xe9\xb3)\x88\xab\xf3e\xf4\x00\xe8 X`\xad0\x8ab\x1e\xf2\x84\x85Q\xc2\xfb\x9fCe\xd5e\xb0\xce\xb6\xd1\x8c\x98c\xf3\x04\x9d;\xf4\x03/\xe1\x96\x90\xeeIK\x0e\x9a\xbc}U'\x9a\x8d\x86\xdc\x1f\x0c\xe5c\x13ymR\x18\xf1\xebE\x89\xc7\x93\x05eUj\x10H\x9cd\xe0\x87\x0b\xac\xe1\xa1\x92\xd8\xf1\x95\xfa\xf2O\xc9\x04\xb0\x1ee\x8b\xa1?r2\xee} \xc9_\xdfN\x17'\xccO7\xc4Y\xf5\x1a\x84\xc2\xb1\x8e\x19,\x1fL\x85\xf0\x82\xb1\xd4\xe2v\x18\xa5n\xe2\xc7\x99\xbe\x00\x98@6\xef\xda\xce\xc1oO\xe5Q\xab=I\xdb\xd1\x0b8I\xdb\xa9'\x11\xac\xb41\xec5p:\x0e\x95\x8f1,\xfc\xc4\x9dI:F\xe3!\xe8by\xb3\xe3\xc5\x8b\xa6z\x15,\xa2\xa9\x1a\xc6\x82v\x00d\xec\x9b\xe1\xffK\x9dp\xbcZ'\x1c\xcf\xe6j\xe3\xeb*6\x1f\x1c\xcf\xe6j\x93+\x8057\xa2gs\xb5 \x14\x80\xe4\xecw\x15\xe0\xf4+\xa71\xa8\xaf@sd`\xb1\x86\xd8\xfdt\xbc\xaf\xc7OG\xffE\xb4\x91\xe7\xa5\xf5E\xfcQ\xd2\xb5\xa5 \xc1d\xbc\xd6\x8c5!\xee(\xa8\xc4\x1d\xb9\xe0\x15\xe4B\xdc\x91{\xf4h\x87\x05\xd7\xdd\xaaW\x90k\xb9\xe0SK)\xa8\x866\x99\xe5\x84\x11\x81\xdf\x19aF\x115\x9b\xd5\xc5\x1c\x052\xe6(\x99\x19\xf0\xecR\xe4\xf1@HO\x13E\xec\xd2\xf8\x94\x17?7^\xfc\xad\xdf;^z\x15\xfbxKf\x93+2\x87\xfd\xe1\xcc\x1f\xfc\xde\x0f\xca%~p\xfcx\x97\xb5\xa4\x05\xc0\xd6\x96k\xd2\xd8\x1eO\xdd!\x1f9\xa4\xc9\x9aB\xbaQ\xd0\xca\xc8\x14\xee\xaaIo\xf1\xfe\xb6\xac\xf2<\x93N\x14[\xab\xbc\xbf;\xd3\xf7C\xafx\xde\xdbf!\xb8\xdb\x85\x9c\x14\x84\xa1'\xc4 \xa5V8H\xad\xc2\x81\xf3<\xc2\xc1\xd7\xca\x18Uj!\xb9=\xcdJ:\x9f\x98\xff\x94)2\xca\xa7}\xf9\xd8\x81\xc2r\x83\xebK\xe5\xb2T\xc2o\xe7~\xd2\xc4\x99SY.l4\xd2\xb9\x8a\xcbo\xf1~}\xa1\xbe\x99\xc3f\xeds\xf9L\x11`>\xa3nz\x9b\x8d\x832\x8dd\xbb\x05\xecN\x9e\xe4V\x83\xb9b\x08\xa5%\x95\x9aXx\x0c\x857\x13\x7f\xe4g\xfe\x98O\xac0bgX+\x92#i\xd0\x1e\x06\x82\x04\xc2\xab\x902)\xd0\xef\xff~\xc2\xfbuna2 \xa9|\xccx\x00\xe1\x0f\x1a\x07\xcbt\xab=\x10\xb4\xec\x88S\x14sJ\xc5\xccIo\xa7P\xcc\xb8\xa3\x04\xb5\xd6\xdcI\xa1~\xe5[\xa2\x91\x18\x06\x93\xff\x7f,\xf3\xb3\x80\xd7Z<_`\x7f\xd0\xd3\xcd\x9b\x19?\xc8j\xfb\x8b\x05_\x10\xbc\xa8\xb6c\x7f4h\xec7M\xdc\x05\x16\xb6O\xce\xcd5!\x95V/\xe7g\xe3\x83\x86\x8d\xdf\xf7\xbdl8\xb9\xd8Du\x96\x19\x15t\x8d\xf7E\xbfs|4\xe9\xa5=\x95\xbcL\x92\xc2\xc0\x11\xd8<\xa1F/\xca\xb2h\xb4\xc0Zb\xb0\xb5%k\xe2_\xea\\G\x04\x15=\x94\x89\x1a\xfctcq\xfbD\xbbS:\x07\x1e\x8f\x13\xeeJ\xcd\xad\xa6z\xba\xef\xcbL\x84\xae1:J\xbe\xe9\n\xa5\x8c-\xb0#G\x06]y\x06\xcb\xa7+;\x8c9\xbc\x997j2\xf9\xb8N\xca\xcd\xd9]h\\\x99 \x87\xc7\xa3\xb6\xa1\xc6\xe6\x18Bo5\x86\xc6:\xcfelb*\xc0N\x90\xdc\x05\xd6@\x9d\xf5\xaf\xe0F\x8d\xf7)\xfa\x07\\\xa6\xf1\xa12\xfd\x0b\xe5\x14\xa7xL\xbf\xc0\x85\x05v8\xb9\xb8d;\x0b\xccm^\xb4\xa6\xcc\xb1\xb0\xff\x8e\xe0\x0b_n\xfb\x87_r\xfba\x08/v\xf7\xff\xf1m\xa8\x96I\xea\x1e\x8b\xd3\xbf)\xf6T\xbd\xf8X\xbf\xa9P,\xccG=\x9eL,\xe6\x87\x19\x1fLQ\xae\x17E\x01w\xc2\x86rZ\x03\xfc2\xc86\xfe\x92vh\xa6\x91C\xc9\xa9\x13\xef\x02\xd9\x7f\xe9\xd8d\x85O\x8c\xe7\xac\xb5\x0c\x95\xb0s(\xb7d\xe70\xe6\xd4,\xa4\xd7\xa8o\xf6YZ\xa2\xb9w\xc9\x89\xa5Lm\x93\xd0\xab\x1b\x17\x9b\xaaB\x97i\xae\xa46o\xca*\x15\x95\xa3\\\x0b8Um=\xd8\xcd\xa28\x1c\xc4j\x99\x92\x88?\xa9\xa8\xa2\xf1E!q\xc4\xaaE\x8a}n*\xc5\x0fbG(\xac\xb1`\x87EA \x00hx\xd3\x14*\xf1VS.\xf0\xd3\xf2\xc2\x14\xa8Q\x8d\xa6\x87L\xa5\xbf]\xfb\x9e\x18Q\xea\x08\xdd\xfd\x8e\x0c\x90\n\xa8\xc1/\xb7Y\xd6\x84\xe6\xda\xce\xc1J\xd6\x95EN\xce\x9d\xea\xd8\x8c\x7f\xb2\xd0\xec)\xab\xfdO\xc2\xe6N\xd8\x0dm\xf9\xd7kh36\xb0\x19\xc7\xf3.D\xd1^\xbb\xd5\xe3\xfd(\xe1\xdbjy\x14\xd9M\x1b\xd3:\x9a{\xe6a\xc2\xfb0\xcc\x94g\x8bY\x96\xf8\xbd<\xe3m!\x80\xb7\xba\xf6\xdb\xbfN\xb74LlzM\xa7q\x89;\xfe\x87\xd7\x17\x8f]\xfbA:{\xec\xf4\x91\xd7~0s\xe3\xe8\xef\x1f\x1f\xa8d\xc5Ug8\xba\xda\xf5i\x98\x8a\x85\xd1\x88\"\xf0\x94\xae\xf5\xe2\xf2\xf2\xcd\xc5\x9d\x9d\xad\x05v\xbd\x05\x97\xe8\xadj\x86P\x92\xda\x82\xd5\xe6c\xc2C).\x11\xd3(O\\\x8bE\x00\xee\x19\x1a\xfc\x89\xfcBm8s\x06\xee\x0eZ\xd2w\xbc*B\x08\x95;mgE\xd6\xe6\xa4N{\xac\xbb\x94\xach\xabN\xb2\xe7E\xfbaU\xa4\xbbK\x0d\xac\x10\xbbq\x86\x85|\xbf\xb0c\xd6\x08\x8f\xc3l\x14\x88clg}\xd9a\x1c\x0d\x12'\x1e\xf2\xa4\xbeP/\xe1\xce^Z\x0f\x0f\xfcp\xcf\xef\x1f6\x17\xd8\x91\x9b\xbc\xc0Z7{\x81\x13\xeeY\xd2\xa8w\xd4EK;\xb3(\xd0\xae\xcc\x12\x96\xa3\x850w\xff\xafI\x15\x05\xf8\x9fq\x8d\x91\xe3\x8aa\x7fJ\x86\xa6\x01\x04\xb1FN \xd6\xeb\xd9Gx\xd7\x17/m.\xb0\xd6K\xa4|l\xf9\xba\x18J\xccy\xfc\xe7\xb84|\xbf\xf7!\xfd\xae@\x8f\x7fNA\x00\xf8K\nH\x83H>)\xf1\xec\xf1_P\xe0X\x02\xfe\x1b\x02\x90\xb3\xbbGvDz\xa6\xb6\x9e=z\x9f\x02d\x94\xac\xb5\xca(\x85\xf9`,\x02\x90\xe3\xc8\x16?\xb2\x03{\x12\xf8\xd8\x0e\x94\x07\xf2\xd1\x13;P\xf6\xf9\xe8\xa9\x1d\x08\xb3\xf8\x1b;P\xe2\xfc\xa3\x7fm\x07\xca\x85y\xf4?\xda\x81\x12#\x1f\xfd\x1b\nL2\xb9\x02\xbf\xb2A\xc6r\x8e\x0f\x08]\x01\x18L\xe3\xaf(0\x05\xfc\xbfGhE8HEo\x9f\xfc\x84\x02\xee8\x89\xc0\xe7g\xff\xfc?`T\x8c\x06\xd2\xee\xfa)9\xd0\x1a\x80[[\x8c\xe2>\x1c\xf5\x7fO\xaa(\xc8\xcf\xff%\x86\x88S\xf0\xec\xfe=\xf2Y\x10>\x89\x88d\xe9bID\x1fcJ\xe6\x00F\xdf\x7f@\xbe\xfbr\xc1\xee?$\x80(]`\xado\xe3Y\xc4qpxN1#+\xa9s\xe28\x89\x0ej\xc6-@\xfc\xb6u$\x8b\x89\xf4\xac\xb2l\x83\x06|\x80k\xa4.\x10\xcf\x7fI\x0e\xb1\x81\xfco\xa4N\xea\x0f\xe4\xc0\xef\xff\x8cT\x12X\xf0\x07\xe4\xeb\xe1\xa8f\x17\x04DM\xe6\x9f\xe3n2?\xf0$\x8d&L\xd1@\xfe\x07\\'\x17\x02G\xeb\x13\x82Q\xea;!!\xfbn\x14\xfa!\x1c\x14\xcc2\x9d}\x05\xf9\x08S\xf5\x9e\xe3\xee\xb9\x11\xd0\xab\xfb\xefZ\x80Z\xcf\xee\xbdG\xa0\x89\xa4\xbaO1}\xef9\xc9\x98\xcb\xb1<\xc0\xfd\x9du\x92}.1\xfb]\xcc\xbb{\x05\x08\xa3\x1a\x80\x80dS`/\xd9\x13\x80?%\xf3\xee%{\x99\x06\x92%\xab]\xeb\xb3 s\x90\xfd\x81\xcf\x98\xe7\xf6\xbc\xdby$\x97\x1dK\n=\xee:y*W\x0e\x8f\xec\xac\x04q+\xac\xd7\x08\x1b\xc5\xd9\xa1\\\xf4G\x98\x92\xf4\x04~X\x91\x83'a\x94\x8b:oc>qV\x82\x82\xc0Ok\xc0\x99\x9430\xf9\xeb\xa9\xef\xff\x0b\xfd\x0e\xa2\x0c\x1dB\xb6\xcf9\x1co\xd2\x89\x96\xb4\xc8\xbej\x00f6=\x7f\xe0\x02\x05~\x88\x05O\x01\x02\xd1\xf3\xd9/0 \x16\xb0\x1c\xaa\xe1\xc3\xdf\xf3\x07\x91\x17\xc1\xb9\xc4\xb2\x93\x80\xc5\x01l\xe4GX~\x12\xc0\xcc\x1fq\x80ZF\x93\xdeV}~D\xd0\xdd\x1f\xa4\x99#\xb9\xc5_\x90\xa9\xfb\x83,\xf1\xa5,\"\xf4&Q\xe6=rr\x8b2\xd0\xc3{\x98\xd6\xf4\xfcAnF\x8e\xa9W\xcf\x1f\xa83\xfa\xd02)s\xda\x1e\x92\xe5\xd8s\x92h_\x80\xde\xc7\xd4\xa2\x178\xee^\x10\xdd\xe1J\xb8\xfa\x10\xcb,\xb2@z;w\x12 \x7f\x0f\x0b<\x12\xae'%K`5\xa1R\xc2,\x0d\x968*\xa5\x02\xb8\xb5}\xf6\x0b\xb2;\xe5R\x89\xbaT~\xf6\x1e\x96\x02\xa4\xae- \xff\x023\x86^\xb077/\xeb\x90\x03\x12\xec\xcd\x9d\x94\x10BE\x82\xbd\x13\x00\xc1\xc2\xb2LO !\x98\xa1\xf5B\xb1\x18g\x9e\xfd\x183\xda^\xc8o\xe7\xbe$\x07\xf7\xff\xda\x02^\x07\x94~\x8a%\xc0^\x08\x80w\xb1\xbau\xd6\xc8B\xff\x07\xaebd!2nh\xeb\x01\xe9]_i\xdb@\xfb\x99\x0f\xe8E\xe6\x1a\x1d\xf4@J\xf9\xf0>\x05-\xaf \xc8\xcf\x7fa\x81\x04\x12\x82YT/:\xf0\xa0\x0eV4\x04D\xd6\xf9\x19^\x04\xd1\xda\x96\xac\x83%\x11\x01\x91\x07\xd6\xb2\x08\x07\x1e\xd4!\xa8\x10\x1dx\xb2\xce\xcf\x08O\x8f\x0e.\xc8*\x96\x01H2\xfa3r\xf6\xa2\x83\x0b\xcb\xb2\nVo\x05D\xb2\xce\x9fciD4\x06u\xe8.\x1c\x0ce\x9d\x9fa\x92,Z\xdb\x95u\xb0\xbe\" \x92\x95\xfc\x9c\xf0\xfc\xe8`\x08u\xb0\x02$ \xb2\xce\xcf\xc8i\x8e\x0eF~\x08\x04\xea\x01\xa1\xf2\xd1\x81&^\x0f\x08k\x8d\x0e\x0c\xd5}\x80\x15\xb5^t\xb0\x0b{\x8e\x95\x0d\x01\x01<\xc1\x82i/:\xc8\xa1\xce\x7fk\x81\x00\x9e`\xa5S\xb4\x06{\x8e\xb5N\x01\x01<\xf9\xa5\xa55\xa8ci-\x07<\xb1`\xddeY\x85\xd0\x92\xe8@\x9e\xfd\x9f\x11\xca\x16\x1d\\\x06\xd4\xb2\xec\xece\x89[?'\xb49:\x18C\x1dB\x95\xa3\x831\xe0#V\xb6Dk\xb0j\x844F\x07\x97a\xa5\xb1V'Z\x83:XA\x11\x10Xi\x0b\x0e_\x86U\xb3\xec\xf5eXi\x0b\xfa\x8c\xa1\x8e\x05y\xc6\xb0\xd2\x04\x0b\xeae\xe8\xb3\xca\x98\xf6k\xb2o\xf5\x80qO\xb2\xf7\x8f\xf1a=\x0bZ\x10\x95\xb7zF=\xfa\xdf \x84\x8f\x84p\xf7\xec\xad?#\x90:\xc9>Us!R}/\x8d\xc4:\xff\xe0\x07\x96\xefR\x85\xff\x90\xc8#i\x14\x0c\xd3\\\x02\x7fEHv\x1e\xc8m{\x93lu\x1e@j1\x1bH)o\x7fj\x01HM\xf9 \xb6L\x08\x08\xe8\xcax \xce\xe6F\xdf\xb35\xa7@\xb8\xd6\x92\xb6E~\x8a%3\xd7@~J\xea\x80\xfc\x88\x89\xbc\x12G\xefar\xe9:\xb16ta\xf9\xcbu\xe2^\xa2d\xc3\xc7\x98\xd5\xb9N\xac\x9a|\x8c\xf5\x7f\x01R\xb5\xf0\xe8\\'VB\xecc\xcc9\x96\x9c\xd8\xcf\x9c`\xd9\xef\xf7y\xc2\xc3\xccw\x02\xc9\x14~\x82w\xdaubPY\x1e\xff\xe7\x7f\x8f\x1bq\x9d\x04\xb6\xf3-,1\xbaN\"\x15\xd3_\xd3\x05;\x0c\xf8!h\x17X\nqu_\x8f1\x82.\xe9\xf6>\xc5<\xd35\x10Z\x87{\xbe\xd4\xc7\xc9\xb2\x18\x08\xe6YKJW\xf8\x14\xa3\xb4\xab\x01xc\x96J\xaa=V\xc0\\7W\xf3\xa1\xa3\xce\xe34\x95\xc7\xf41f\xf6K\xb0e\x9fb\xb3\x8b\xab\xbe\x93\xfdW\x93\xf9\x18\xcb\xa9K\x02\x1086\x90[R\x1b\xb1\xce\xe6J\x7f\x86\xd6\xc7\xf8\x84.\xf10\xe3\xc9\xb2\x1c\xc4\xc7\x98\x1c\xb9\x12\xe8\xd9\x81K\xfd\xc4\xbe\xdfZ\x9f\xc3D|\xe9\x02\xa8\xd6x{\xdc\xa1\xfc\xfe\x0fdC\x87\x1c$\xe5\xbf\xc4b\x98\x84\x8c\x9c\xc4\x0e]\x1a\n\x12\xfa9\xedF\xaa\xcd\xa4\x17\xb0\xe4\xfd\x82l\x00\xa0\xc6\xaf \xd5\xf0\x13W\x91\x1a,\x9f\nP\xc0\x9d$\x89\xf6\xb56\xf2\xce\xffY_\xc6\xe8\"\xef\xfc_\xd6B\x1eX\xc4\x9e=\xc0\xb2\x8a\x02k\x0d\xf8\x01\x96K\x14\xdcS\x06\x9d\x07X>Z\x92\xf0e%\xd0c\xd9E\xd5\x16L\xf5cL\x9c\x15l[T\xfcs|\x9a\xa0\xd9KF\xd2\xc3B:\xc07\xb5\xb0\x87%u\x00\xef\x18y\xcf\xb2\xba\x92c|\x88\xb5z\xd7\x07=\xd3\xb6\x1f}}\x8c?\xc2\x07\xd2\xf5\x93\x11\xd8^\x9fb\x0b\x82\xeb'\xa9B\x8b\x0f\xb1\xcc\xb5$\xd4\xb7}?\xe5KQ\x98Ey\xb2\x1af|\x908\x923\xde\xc3\x87n)\x88R\xbe\x94'\xc1\xe1r\x94\xf7\x02\xfez\x1ee w\x90-1%\x8b2dc\x82\xbc'\x97\xe6\x97X\x0c\x93\x90\xdc\xcf\xac\xc0\xa5\x08\xac\x89\xcf\xee\x91\xe3\xad \x0b\xb6\x1ap\x03\x83Ey\xd7\x80\x88\xfd\x16@\xb7k`\xa3\x91 Y]\xdbw1\xec\xff\x8a\x02\x80\xd5\x12\x16\x14\x8d\xe2>L\x07Kb\xae|\x19a\xc4\x15\xdd\xb6\xd5\x0c\xf8\x01`\xd7\xdbx_\x8d\x99\x90p\xca(\x1chv\x8bI\xddR\x14\x0e\x92\\ux\x1f\x0b\xbaK\x05\x0f!\x18V\x80\xf0\x11\xb3\xe1\x15-#\xb5t\xdb,\xb4\xfaNw N\"\xb8\xd6\"\xacI\x82r7\xb3C76\xaf\nR@d\x9e(>\xac\xfb\x9e\x02g\xc0\xe7q)\xca\x05?i%\xa2e\xa6\x90\xec!\x99M\xee9I\"W\xe7}26 \x93\xeb\xf3>^\x1f7\xe7\xb1\x84<$s\xcdy*9\xc7C\xacM\xb9y\xa0\x97\x1b\xdbv\x01$\xa7\xf5>\xd6A\x96\x94\xbd\x95\xf0i\xf8~\x0f\xab\x9an.\x84b%\xf9\x126\x92\xc7J\xfe&\xd7:nn\xe4e\xc2\x96s#/\x13\x11+\xd7\xf2\xf2\x03K\x83\x11\\\xe4\x91c\xaf\x84\xbc{O,\x02rn\x90\x92\x90T \x92\"\xe0\xfbX\x8dv\x05y\xe7\xb7\xe3\x84\xbb5\xdb\"\xe1i\xee\xd6mN\x12\x1cjc.\xd6\x80$\xb00\xe7\x12\\\xcd\x93D\x1a\xe6?\xc6J\xb7\x9b'c$\xb3\xd0\xad\xd7E\n\x91\x85N\xbc~d\xea\xba\x87\x0e\xaa|\x83F\x04V}\x83v\x0f_\xc5\xb8\x87\x81\x9b \xda\xf3\xec]L\x90\x97e\xaep\x01z\x13Sc\xaf\x00a\xc1\xd4s\x02}\xa3\x81\x0f\xd8\xb2\xdeh\xd2\xdc\"\x00~\x8aq\xde\xd35(\x00\xc4\xb171QXv\xd2!\\\xb0\xe1\xbd\xf14\xe4\x01f\xea^\xc9>\x8f\x97\xd5\xeb\x05\xd2\xd3\xe0\xd7X\xc8X6Z\x15\xde#\xcf@pc\xcb \xb3cv\xe2\xc1g,\x1e,\xdb\xb5M\xf0\xf5\xf8 >\xb3\x9e\xd7\xb0]z\x1d\x7f\x8a\x8f\xf3\xf2r\x94%\x0e\x984\xdf\xc7\x94\xd7\xf3\xa2,\x05!\xe41FQ\x8f\x0b\x0e\xff1\xd6\xe7\x969p\x1e\xac\x18,\xf3\x00\xae\xbf\xc8\xdc5\x00\xcf\xde+\xe9_\x18i\xbd\xbe\x9f\xc2\xd1\xf9\x00\xbb\xe0,k\x85 \x8f\xc0\xd3\x00\xb28\x17\xe0B\xe9\x03l\xeb\xf5\x86\x0ep\x8a\x9fb!Y@`=\xb1\xcc\xb0\xec;n\xe2g\xbe\xeb\x04\x8bun[\xa52\xa06\xfc\x1a\x0b\xa7\x95\x12B\xd6\xd5mQ,,J\x9eW\x9eT?\xac/\xb2\xa3\xae\xeb\x7f\x8d\x8dx\x9e\xefH2\xfb\x10[\\\x96}g\x14\x815\x86\xc0\xbc\xc90#Gcs\x9e\x80\xa75\x10\xb9h\xd8 N\xad0\xe4\x00\xf8\x03\x07\x04\xe3\xdf\xe0U\xf2\xfc\xd4\x97b\xeeCL\x18=y\x13\xf4 \xc1n\x7f\xec\x83c\x83\x1d\x12\x85\xc6\x94\xfe\x90 \x9a?\x8e\xc2\x03+h\xf9\"\x9ct\x8c5\xde-P\xda\xb1\x1c\xe3\x05n\x94\xc8\x81\xbf\x8b\xf9\x9b\x17\xb8\x89|b\xe0\xd9\xbb\x98\x0f{Q\x10H\x94\xfe}\xdc\xbd\xb9\xa9\xc2:\xb2gD]\xacH*c\x06\xde\x0e\xaf\x06q\xa3Li\xc2?&(\x16eJ\x9f\xc1$[B\x94Pq\x1f\xd3\xa0\xe5([\xb9\x9d\x83>8+:f\x01S\x0c\xae\x01\xd8Z\xc1\xb5\x9d\xf4\xd9}\x8c\x1f+\xb0hX\x0d\xe5\xb0fX\xca\xe1\xcbJ\xd2 \xaa\xc9\x8a\xba\x05\xc2\x83\xd5Fz\"cpU\x01\x1fR8\x9f?\xc1R\x1c\xef\xeb\x860cZ\xd1:\x066\xc3p\x0d\xc07FR\x8bz\xf6\x04o\xc5\x8a \x8b -\x19\x08fy| \x89\xf7\x132\xedA\xaa\x8e\xca\x13l\xe4\x05e\xed \x96\xe2VJ\x86_\xd2\x7f\xe0\x87\x19OdW\x7f\x86 \x13\x87K\xed\xb71\x93\xe2\x01\x0c\x0d\xef8\x0f\xcc\xd0\xf0\xda\xaf\xe8\xe8\x0b\xbc\xc6\\\x03H'B_\x94c\xc6\x04IBR\xb8\x86%@\x99ky{\xe4\x04\xc1\xb6\x91\x08\x7f\x81\xe5\xe3B\x17\xb5\xd7\xbf\xcc\x13\xdc\xc6{\xd8Y\x84\x8fRI{\xdf\xc4\x9cS\x00\xe6NH\x10V\xa3$H\xba\xbe\xbdI\xfa]?\xbf\xc0Z\x9f\x91\x83'-\xef\x9f\xe1\x0b8\x1e\xaa\xce1G^\xd1.\xfe\x0474\x80`\x87\xd1\"\xb0M\x8e\x1b-\x82\xe0`\x0cT\xf4!\xc1\x80\xd8IR\xe0\n\xd8*\xc3\xb5\xf4\xfe\x18Sx\xe5\xb4\xfb9&\xd6+\xc6\xd9\xfbs\xda\x8f\x01\xe1Z\x02$\xb6\xf67\x04p[_\n\x12\xba\xc7o\xd7\x931~[y\x97\xdc\xc7k\xcdo\xa7\x81\x13f\x83,\xb1\x1fT\x00\x07<\xb5\x9f\x16\xa3\x07=\xa6#\xcd\x1dy\xc4\xce\xd8\xaah\xad\xdf6\xa0\x9c\xc3\xb5\xe8}\xcc\x92Vn\xe7~\xe0\xf7\x12?\x97s\xf9)\x16\x18JN\x946\x08\xd8\xae\x1ec\xa5\x81\xdf\x1e\x17\x1b\x8e\xa5h\xaeY\xe0\x07d\xc3\x13Mq\xf1\xa1_\xd1nA\xd8\x10\xc55\x00\xf3m\xaeI\x0e\xd1&W\xd4\xbe=\xc6\xd7&\xbcnCW\xc0tE\xf8\x06|&|i\xe7\x82\xa0\xdb\xb8[\xb0\x96~\x82'\xb0\xa2\"%\xc8IV\xdf y\xc9\x13\xe9R\xff'\xd8A\x8a\x1f\xb8\xa2\xc2\x11\xf2\xd9\x87\xad\xbf\x87\xe9\xd1\x8a\x80\xa4V\x10?\x88\xb9\x9b9:^\x86\xac\xfa\xca\x01${\xf0\x9d@^/S\xdeY\x14\xb03\xd7\xbe\x13\x04\xbe\xbc$T\x96G\xc2d\xcf\x81\x98\x80\xa5\xe6>\x88 \x98\x82\xf6\xf9Hu\xf5K|\xf3\xd0\xef\xfb\x10\xf8\xf8\x9f\xff\x06\xcf\xb3\xdf\xd7\x10Z)\xd0 \xdc\xd59\xcd\xe4\xb1\x9c\xd6\xd7\x00L\xe2\x8a\x01`5\xe2\x9c\x1f\x04\xdc\xc3l \x13\\(ec>X\xec\xea\xdf\x82\x9e\xfa\xb70 p\xc0B\x87\xc5\xaeb\x9e\x18\xeb\xfbA\x16J\xf4x\x0f\x9f\xd3~\x18 \x06\xf0\x9f\xc8\x96\x19\x96\x81\xf5\xb3\xbea\x19\xf8\x10\x9d\x8b\x92E\x10'\xee\x91=\x88\x12\xa7\x1e$\xfdX\x1eb\xc3\x87\x00\xc0\xbd\x00\xe6g\xe7\xa2<\xf1y\x92%p\x0bL\xe6\x14;I\xa6\xfd\x1e\xb0\x10\xdaO\x1cW\xba\xb3\x7fL&& \x92\xa9\xff\x04\xd3, \x12L\xfdc\xbc\x9f\x12rJV\xc2\xc4_\x82^\x96 <\x01 zE\x82\xb0\xe0.@\xf30\n\xb2 \x02\x04}aF$@\xd2\xe1\xfec\xac(I\x08T\xc2\xfb%A0\nl\xfa\x13\xa0\x93P\x0bK\x19\x02t\n\xa6\x85e` \x82\x06\xb1=W\x80\xbe\x03 l\x13\xe8'\x0e\xb0\x97\xb7\x08%HT\xe8\xc3\xbbX\x08?\xa7y\x05\xd9{\xa3\xfbb\x81p\xa0U\xaf\xff\x07\xf3\xe2\xf3\xca\x08\xfd9\xdevm\x9d\xfe\x1c\xb3\x17Y\xc3\x13\x12\x08^\xb8\x81\x81\xe0\x15\x18\xc0\xcd\xed\x13l\x970\xa2\xc9\x13L\xd6\x00$\xf9\xfb\x13L\x8e\x15\x0c\xe6\x8a\x91~\xc0S5Yz\xf3.`0\xc8'\x988\x9c\xd7\x1c\x0b\xab\x17\x03\x0d\xc0\xec\xf7\xbcTd\x1fb\xda4\x00? ,\xac\x0c\x065\xc5\xfd\x11l\xce\xdbXx:\xaf\xaeN0\xa7\x1e\xa8\xab\x13\x82qpc\x80\x9b\x19Hg\xcfgO\xc8\x1e\x83\xbc\xf2\x04s\xaeApK~\xc7\xd3\x1d\x84\xea\x00\x92\x05\n\x8b\x98a\x0b\x10\x10\x98\xec\xc5\x9ckud]\x96U}\xaf\x82\xcf\xb4\xaf\x01X\xc6\xf0G\x0eh^\xb6\xb6\x06~\xe8$\x87\xab\xf6\xd5\x199\x83@\x9d\xe8\xb71j\x0b`\xec@\xca$\xbaw#\x99\xc5\xb4\xf5)\xd6\xd4\xfd\x91\xb4<={\x80Y\xb8?\x8a\xa5\xc3\xec\x7f\xc2\xf8\xb4:\x8a\x03\x1f\xd4\x1f\xe2`\xe2\x87l\xc1v\xf9\xe5\x87\xae2\xb0\xbd\x8d\xafc\xcc\xde\xdd\xc3\x8a\xb7\x84\xa8\xd0\xfd\x0f\xb1\xbe\xec\x87*\x87\x06\x99\xd1\xaa\xc2\x12\x82q\xea;\xd9\x8d0s\x81\xc6<\xc0B\x9c\xca\x08\x0d\xb1\x1a\x98\x81V\x9c\x97,\x8d\xf2\xa4\xae\xd9Uy\x11\xc8M\xf6$\x92X\xc4\x0f\xb3\xc0I\x86\xd2 \xf7\x11\x16\xda\xfc0\xd3A\x14\x1fa!q5\x1c\xfb\xa9/\x1d\xac\xc0fb![\xba\x88\x89qz\x0bK\xe5\xab\x1b@I\xb0m\xd5\x8f@\xf4!X\xabo\xbc0\xc1\xf35\x00\xdf%\xac\x1a\xae\x86\xf9\x92o \xd8\xac\xb5\n'\xf9s\xcc\x07\xd5 \xff\x1c\x0b\x16~\xed*\xf9Z\xca\xfe\x18\xb3\xf9U\xcd\x15\xc9\xe12\\\x11k?\xdaC\x92\xe2|\xea\x87Z\xf0&49\xf5A\xc8}HF\x9d\xfa`#~\x88\xbd_%DZb\x1fb\xca$@c\xfb 2\xfb\x0e\xeb\xfcS\x9f\xe2\xcbp\xdf@\x08\xc1\xcc\xf7\x00-\xb0\xee\xe1+\xc0?`s\xe8\xaa\xbaq\xc1\xac\xdbW\xdf1V\\\xd4\")\x9e\xfa-\x0d\xc0\xeb\xa8l\x1b\x18%\xc0\xb4\xf1\xf7xm/j\x06\x86y\xff-\x0d\xc02\xca-E6\xff_L\x1d/\x1a4\xc5\x87\xe4\x96\x81`}\xea\xa2\xc1!,\x94\xde2\x10\x8c\x90\x17S\x9e\xc0d\xf0\xce\xde\xd2\x90\x7f\xc0\xf2\xc4E\xbdQ\xd8\xa6uKo\x14\xe6\xf8\xdfw\xe2X\x9e!|\xe6\xf64\x00\x930 \x90\x97\xbfX<\xf9\xbe1\x8abo\xa5=\x03\xc1\xab\xf9}\x18/\xe9\x1d>\xe3\xbe\xbf\xafw\x0b\x0b^{\x1a\x80\x91zo\x90@B\xa8O\xb1\x90\xf5}\x15\x0d\x8cwdOE\x03cn\xf5}\x85qX8\xd9S\xd64,\x7f|\xdf`\x03\xa6\xf1{\x06B\xea\x18l\xc0\x82\xd6\x9e\x86\xfc9&\x9b\xc1\xa2\xd6\\\xf0\"\xae\x99\xfc\x02\xf88\x04\x06\x82W8pJ1\x04\xf80\x06\xce q\xe0\x16\x13\xb3\xff5g\xd4\xf3$\xbe`\xdc\x0f\x0c\x04\xabOk*k\xe6\xaf\xb0\xf8\x14h\x00\xdeM\x01\x80\xfc\x8e\x98\x11\x05\xc6\xb3\xccR \xcc\x8exC\xd7\x1c\xf9\xe2\x9a\xbe\xc4\xc23\n\x1cH\xb8\xf61f\xf0kZ\xab\xc7RK\xa0\xed\x00\x98\x85\x98\x986\x1b@\xc6\xf6\xfd\x14\x8b\x18\x12\xd2\x97\xec\xe0}|\xf9 `\n\x84e#\x01\x02\xe1\x81\xa8\xa2\x02\x14\xc8\x95x\x07\xcfH\x06\xd6I\x81\xe5}\x8a)\x89\xb6\xe7|\x80y\x8f\x80e\xb2\xda;\x98\xcb\xa8\x1b\xd2'\xa4\xa7\xc5\xcc\xf1\xa1'\x8a'\x06\x84\x89z\xe0@D\xf2\x13,\xfe\x0b\x00\x98\xa8\xfe5\xb5\x18\x05g\xd5\xb2\xbf\x8f\xa9E\xd0\xd3\x10|\x98\x03\x9d\xe4\xef\xaf\xb0n\x10\xf4\x12\xb0:\xfc\x91\x0d \xea\\\xa7\x80=9\xecGX\xd1\x16\x904\x00D\xc6\x1c\x12`2\x8f\xd1#\xcc\xac\xd6\x8c\xb7!V\xd0\x03\x03\xc1B\xca\x9a!\xbd\xf8\xf8\x05\x06\x82\xa5\xa4\xc0\xe5\xb0\x13\xefb\xd6\x13\xb82\x16\x15\xaf\xc1\x1a\x90F\xb2\xa5\xf0\x99t\xec\xb9R@}\x1f\xb3\x89\xc0\xe48\xc4\x84QB\xc0\xe2AN\x9d\x97x\xda\xe1\x143\xf1\xc0K\xf2T\x03\xc9.x`\xd2x\x87l5\x18!1 \x06\xf2r\x1f\x9fT\xe9\xf2/\x88\xcfY\x81\x07\xe01GhP%.\x80\x90\x81\xb5\xb2\x0d\x89R\x8f\x8a\x85\xc9V\xb7\xec\xedN(\x89)\x80\"\x04\xb0,g\xba\xd1\xc7\x90\x1cj\xd1\xd2\x12\xf7\x03H\xc7J\x91C\xc0\xc1\xf9\xbf\xbc\x14x\x19\xa1\x94t\xd7.\xf9\x8dc\x0b\x85.Ur\x1b\xc7\xb6\x9ej\x11\xed5\x8ei\x87(u.\x88\xa0\x8dw\xb1\xe9VLZy\xe0\xeb,\x7f\xc4\x1f\xbeT\x06\x02|\xdf!\xe7\x85\xf73\xb3|\xa0\x1ec+5\x0d\xf8 FaQ\xa4j+$\xf6\x99\x80\x14!\xadT\x8b\xa4\xb5[-\xcb\xa8iA)r>t\xa9\xf4v\xee\x0f\x8a\x1e1\x11\xb6\x05'`\x8a[\x8a\x9e!\xa1\xa4\nV,\x8c\x0d\x83\xab\xd8\x82%\x1d1\xd4l\x98p^\x84\x98\xe1\xd9\xc8FJ)\x1f\x1f\xe0S_.\xa0\x90\xe9CL\x9c\xcbe\x8c}\xf2\x01\x16\x93D)\x08\x92)\x0d\x19\x0b,P\xa8:-|\xa7\x0feJ\xa1\x1aXG(\x17\xd0\x07\x00\xeb\x04(\xda\x03\xe3.\x8d\xf4 \x82\xd0\n8\\S\xfc\x80\x0bi\xba\x19p\xc1CD\x1a}\xf3C k\xc9'\x80\x9e\xbe\xb4\xee\xbb\xba\x99#\xf2\x9e\xf1 x\x8c\xd7+(\xf9\x04`\xedM\xc1\xe4\x1a<\xc1\xb4&\xe0\xa9\x9a\xacE\xce\xe0\xa9r\\x\x82o\xd4\x03\x9e\xa6\xa5\xab;,\x81\n\xb0\xb6\x13`\x0dZ\xc0\xf8m\xe5\xf7jYc\x01\xd5`\xb25kO\xaa*\x14\xa1U\xa2\x08\x12\xb0 \xe1\x8a\xeeHrA\x94\x80\"\x95\xb8\x0d&\xcdC$\xc7x\x00k\xd9\xb6|\x06\xd7\x92GD\x18\xd0~:T\x1eOJ\x04\x92X{\x12\xa5\xc0R\x01=1\xb4\x91\xec\x00\xa4\x00z\x93X>\x12E3\x1f\x10\xca\x98:Z\xf9\xc6\xf8\xb9\xa6\xafF\x88dh\x8c\x92X\x98ZS\xaa5\xa1\x95\xb5\xdfk\xa4\x81\xc08}ac\x88\x80\x80`J8vz\xbbg\xb3\xc7\xa4z\x82\x041Rc] B\x92vb\xf8\x8c\xc8\x8b\x06\x82\xed\xbbk;\x0b\xac\xf5]\xfcQ\"\x05\xe5\x9a\x99\xa5l\xa0\x9d\xce\x08\xdd6Ng\x84\x86d\xb5\x82\xa4T\x8c\x16l:QP\xa8K\x84=e\x9a\x9d\x7f@hQ\xc9U\x8d\x98v4K&t$K\xe0:\x97hK\x81\x0e1&\x89\xf3\x83,\xd1\xeerdRy\xe2\x19\xc3\x0e9\xb3ybB\x90\xc9\nV|\xd0>\xb2H\xf3\xda\x07\xcd\x02S\xb7\xfa\x1f\xe3\xdb+\x13.\x83g0r\x80\x16\xfc%\xd6\xec\x04\x80\xc3\xe3\x1b\x04v \xc4\x89\xf71\x91\x1e\xc1\xf7w\xf0\x94\n\xfeT\x032\x96\x0dl\x1e\x03\xb0a)Xa\x03\xb0\xb2y\xe0k\x92\x91\x93\xec\x01\xc5z\x0f\xdf\xfd\x8et\xb6\xc5g\x1fa\x99\xf9\x12H\xa0\xd8\xbc7\x82\xcf\x98\xbd\x8eL\xca*l\xe5\x18\xe9H\xe6{\x98\xb1\x8f\xb8\x93\xe6 \xf7\x8a\x07\xb6\xb0\xf2q\x89{~>2Ndoa\x82{\x89\x07\x81\x1f\xeak\x01l\xf4\xbe\xa4\xd5\x01l\x88\x1bi\x00>\xe2\xa3\xa1\xdc\x9c\xb7\xc9\xea\xfb\xae\x0c?\xfb\x18K:*-\xe8=l(\x19\xf9\x9e\xfd\x8d\xa2\x91\xef)\xba\xf0\x14\x13\xd6\x91\xef\xd5\xa4\xcf-\xb2\xc0`\xb2.!\xf0\xc6\x16^\x1b \x82\xd1a \x0e@R]\xf9\x08/\x81\xcc\xc9\xaa\x13\xaf\xde\xc3\x8cq\x14\xb8\x90\xad\x10\xdb\x8fG\x01\xb3\xb4g\x1e\x1a\xa3\xb0\x0c\x1e9\xf8%\xa6M\x12\x02f\x85:\x18\xf8\xfc`\x1f\xbb\xb0'\x9d\x8c?\xc6\xd4:,R\xcc\xd3\xb1\x97r\xc9S\xa0\xce$\x89\x97}]\xdf\xe5|\x86\xb7*4\x10lz_\xd7w9\x9fa\xae\x11\x1a\x08\x96:C\x93r\x96\xf6S\xce9k\x19\xb9Jt\x89Q|\x1d\xc88\xd6\x14B\xf8\x8c\x15\xca\xd0Pw|\xbaT\x82_\xb2\xd4\\{F\xbd\x8fYU\xc8\xf5\xdd+V*D% y\xc7\nQ\xaa\x02\x85\x99\x88g2\xfdu>p2\x7f\xcc\x11\x1fy\x13KW\xba\xdc\xce\xd0w\xf7\xa6*\x16N.u\x99'\x87\xcd%Ko\xf5`KS\xc8S\xaer\"a[AX\x04l[&\x9cf\xdc\xa3A%$\x82\x02\n\x96-\x7fD\xde]\xe7\xfb\xca1\xf9\x07!\x19\x82 \xaf&\xf4\x86\x17\xf1\xd5\x18\xb6\xae\xf9.6\xb8\x85\x1a\x80\x87\x19\xea\x988\x8a\xd9*,\x0e;\x16\x86:\xce\xcd\x06\xb8]\xdfX9\xd6\xcd\x06O\xeb@:4\xccRI\xef\x13\x96\x1aB\x1d\xd6b!\xc9\x03\x00a\xb95\xd4\xc6[\x028\x9f\x01\x06=\xa5\x030\xd1\x0eX\xb7\x0cM\xb8\x03!\xacCexx\x8a\xd5\xbbPj\x0b\xf7\x08\x0e\xc3Cq\x0f1\xf3\x0b}\x10>\x1eb\xa9/\x04\x8c'\x0d\xad+\x93'V\x11Be\xf2\xc4\xea^h|8\xb0\xba\x19\x1a'\x0eZGI)XD\x0e\xf5E2]Du\x97\x8c\xa5\xb5\xb0z\x13L\xc7P\xb9\n&\x03\xb1\xdc \x92M\xb2\\!\x92\xed\xd278dx\xc5\x15\x8emJ\xe5[\x1c\x1b\x19jM\xdbr\x0e@\x1b\xa3\xddh\xb5\xf5!&W\xa1\xd1[\x1fbkZ\xb8\xa6\xce\xc8\x13:8-\xc1c6\xb5\x1e\x9dM\xb8#Y\xd8[\x98\xbb\xadG\xa1\x04\xfa\xe1@\x13w\"l\xac\xebX\x11\"\x9d\x18\x01\x16K\xec\xfam62|\xd0\n\xf0\xe7\xf5(\xab&\x95\xc7\x86\xc9_\x01.\x06\x81)\x7fQ\x06\xc5b\xda\x86b\xe3\x9d\x0d\xe5\x0c\xf7\xc4V\x9e\xa2\x08\x0e\xcclh\xadX&\xcc2\xd6\xa3\x8c\x86\xe2\xd8ZB\xf18\x14\xe1\xa3L\xb9B\x13I\\@\x8c/\xb4\xbd\xa2r\x87\xb6\x03\xc7N}\xbb\xf0\x10\xf4C\xac\xd9\x02\x0cr\x98c\xe3\xd5z\x94aO\x00r\xe8Q\x19\xe3\x0c`[\x19\xabG\x00\xa1\x15\xb2`\x0d\x8dS\xb0by1\xd5U\x05\xca\xc8c\x1dHY\xea\xb2\x0f\x95^\xac\xd6\x95+p\x06\x93\xd7\xf5(\xab\x93\x07\x9f\xfc+[sT(|\xf2\xd7\xb6\xadV\xa2\x00\xf6\xc8\x93\x10\x85\x04v\x18 \x01\xd6\xa9\x01\x06H\x805\x8f\xf5(\xdbL\xb8\xcb=\xf5\xd2\x0b\xb6\xf3\x95\xe0f\xad\x9e\xfc\x1b\xdb\xe4t\xb1\xea\xba>\xb4P\xac->\xe6I\xca\xcbD\x0fOG\x94\x92\x195\xcb\xc8IdlTHc\xa7EOA%\x8b\xe1Y\xa86\xe4\xc1\xd9\xce{*\xe7\xdb\x03+\xb6\x97K\x15\xcdYX\x84.\x18\x8b9C\x83\xd6\x01V\xcb\x15Mb\xd3\x97(Z\x8c\xedO(k7\x05\n\xb7\x1c\xa2#\x8b\"\xae\xcb\xb9\x07\xbb\x8e\x0d\xfa%x\xb1\xeb\xd4XQ*\x86v\x1d\x1b\x1aK%\x8b\xf3\xf4\x1f\xed\x0d\x96\x16\xea\xc75\xb3Ck\xf4\xc0\xc23\x8bn,\x93\x93\xc0\x82\xccXx\xa2,Qeg\xc4Z\xa4J\x15=Y\x86\x81\x99?\xd1\xd6\xe3\x1a\xa9@\x00\x9c P \xf1mPH\xcd\xf1\xf4o\xe9+\xb4\xa1\x8e\x80\xbbG\xa5\x810\x8e\x02\x1d\\\x88M\xc9!?}\xc7Z &Id\xcc4\x8f\x1b\x88\xb2\x02\xabI\xd6T\xd6\x93\xb4\xf4\x9b\xa9|;D\xc8\xd7qx\x9f\x10\x8b\x96\x81\x10;T\xa6\xbc\xd1h/\xe8yr\xaa\xe2\x96K\xc0d\xa8\xaeK\x9e/\xa7\x07\xbfRD\xb5C\x04\x0dy\xa5A\xec\xc3\xf2+1\x0f\xcb,\x9a\xbfG\xbfrH\xda\xf86\xbe\x13\x0es\x9d-\x96\xd8\xb3\xc7\xfa='\xcb.^^\xd6\xcf\x14\x12+\xd8e\xf3\x82!\xb1\x18\x8cM-B\xe6\xc6\xa6\x16Y\xc6\xb1N\xbbe\x19\xc7\x18\xf2\xcf\xd8 \x17t\xb8\n9\xbc\xe3\"\xfe\x1d\xdf\\\x85cm\xcbz\x1f\xdb\xe9\xc3\xb1\x8ee\xb0\xf5\x06. v\x88\xb9\xc4\xb7\x815\x0b{\x9f\xd0\xdd\xb1\xe1\n\x0f\xfe\x9d\xad\xa6~[\xf8?X\x80\xfb\xc6\xe8Oh\xda\xbe\xe6\x99\x04\x15\xf65\xcf\xb4B\x14W\xa3\xb0P\x9b\xc7\xf1\xd5\xe1\x86I\x11\x81\xef*\"\x03\xc1W\x81Q\xdd\xf3\x99\x91\xba\xac%\xeffn\xe8\xf4\x11XF\x894\x00kc*\\\x1b\xef=Dk\xff=\xd6\x89\xa2\xda\x1797\xf4\x9bM\x9f\xe1k\xed\xc8@05\x8a\xe0!\x98g\x1fa\x9a\x13\xe9\xd7\xce\xb0\x93V\xe4\xa5\x91\n{\xc2\x96\xdd\x8d\x15H\xbd\xf0\x19\xde\xff\x88+\x00Y\xf8\xbeZ\xc6G\xd8\x95iC\x1b\xfeI[\x1a\x80\x0f\xa6\nV\xff5\xde\xa9\x0d\x93\xc4\x824e \xd8\xa4\x1d\x81\xb1\xfdC\xcc\xba\"\x9d\xa8\xe7\x116\xc3DC\x81\xfd\x9fc9&\xaa{\xa112\xa6hl\x06\x8f\x02\xbd&d\xeb\x03\xf3(\xe1#\xec\xb4\x13\xe9\xc4\x12o\xd2Z0\x17,\xcbn(O\x98\xcf\xb0\n\x1bi\x006]o\x8c\xf8\xc0\xb1\xceR\x01~\x83\x19\xe8\x86\xf4\x8f\x90\xe9\xa7\xb1M3*@x\xef#%R=\xc2\x86\x9fhT\xfb.\xec\x861\x9e\xe2+\xd2\xc8@\xb0\n`\\)\xb1\xf1i#\xe6\xa1\xf5\xc5U|\xbdo\n\x16E\xb0_Z\x14sx\xf0\xf0\x11\x96\x11\x8c\xef%y\xc5vC\x0e\xeb1\xa1 N\xe2k\xbf\xc8(\x17\x04)\xc0\xb3\xf01\xa6\x14Q\xe2\x81\xb5\xe7mL\x8b$\x04R\x8a\xd8`2\x13\x17\x16>\xa2\xc4\x13\xb8\xff1A\xe4\xc4\x1f\xa8\xec$d#\x13\xf5b\"\xde\xc6(I\x83\x08D\xb9\xc7\xf8>7J$\xa9zLH\xb1\xfd%\xe1\x0d\xa3\\\x90\x01k\xc7\x0fB\x89u\x8a\xa4O\xc8.\x1a\x08!\x94\xeau\x8f\x07\xb8\xca\x86\x11\xf4\xf0\xf6F\x06\x82\xa9\xc8F\xe1s\x8bq\xb2p\xc7%\x8f\x1a\x03\xc8\x81zx\xa97T\xb6\x06\xb2\xd2\xea;\xd9\x9a\xb1\"q\xefbanc\xccu|\x11!2\x12\xa6\x82k\x9f\xfd\x19fe\x1a\xaa\xc2 \xff\x94\xac\xfb\x98'\x9bN\xc2\xc3l\xc8S\xb86\xfc3|\xd4\xb42\x85M\x06B\xd7\x13\xd8\x87\xe7Q\xd1\x01-\x95\x94\xb8\xf2\x14s\xfc\x92}\x82B\x94m\x02\x016\x9d\xc4<\xcfF\x81\xc0\xc61\xf9\x8b\xe13&}1O\\\xc91\xfe\x19\x05\xf82\x1f\xca\x0c\x05\x8c \xd6\xf3Mlt\xd6\x94\xe7\x01\x99>O2\x1eJ\x81\xecM\xac\x85lj\xfe\x8ayu\xac\x01XX\xde\x84\xa7\xd2\xb1\x96\x1b\xc3S\xe9\x98\x1c\xc7Cxu\x00\x1f\x8ax\xa8^q\xa6\xfeX\xf1P=\x17\xfd\x17\xf8&tS\xf6\x8c\xe9z,;\xc6\xfc.\xf63wX\x9b';\x86Q\xe1S\x12\x07N\x08\xef\xc7\x93\xa4i\x00\x82\x84jx\\\x02\x06i\xb7-\xd5$\xd1?j\xf9\xec(\xc6\xff\x11\x16\x92\x05\x104\x7f|\xb2\x04D\xd7\xc2\xa6\x04\x01\xf3\xa4\x9aE\xde\x81\x93 p\xf3#\xb8\x11\xe4\xe0\xd3\xfa\x18\x0bE\x9bA\x9e\xea\x87\xd9?\xc6h#\xaa\x8d\xc2:\x88:l\x1f\x11\x1c \xf24\xdb\x97c\xfc\x08\x8b\xeb\xf1\xc8\xd6\xdaf\x04\xc9\xa8\xc4\n\xcba\x92\xcc\x83\xb1\x90\xb9\xb4\xa1\x10c\xd9\xa6\xbe|\xc5bml\xa4\x04l\xbf\x8a\xa3\\>\xf6\xf81\xde\x95M\xb9\xecO0\xd3\x05S\xe4}\xcc\x0d\xe3DE\x18a\xc2nL\x94\xf7\xb1<\x1d\xc3[\xf5O\xc8y\xd0\x96K\xfa\xdd\xad\xe9\x9b\xbb\xa50&:\x02\xee\xaaw\x83\xad\xe3(\xdf\xb3\x90\xb6-\x97,5%\xaa\x96\xf6\xda^\n\xab4f2e\xe3\xab\x05T\x8e\xd4\xc2\xb2\x96\x84+;\xce\x13\xccu%P\x87Ya\xe9J\x00\xb5\xc5\x10\x0fh3Q\x16\xc37\xe9\x16i\x08>E\x12\x92\xdaq0\xd1Qht\xf8p\xc1j\x19z\xc3\xc0\xd5S\xed\x98\x02m\x96\x1ej'\xd4)\x89\xfaN\xa0\x04\x00\xac\xb3\x08\xa0V3\xde\xc5\xca\x94\x00\xa698\\\xbfKx\x87z\x7f\xed\x1e\x96D7\x93(\x8e\x12\x9dI\xed\x1e\xc6\xcc\x02\xac\x12\xb5\xe1\xfa\xa2a\xf0\x9b\xb7\x80\xea\xb6-N\xf2\x04\x04\x83\x07\x98en\x1a\xa1\x11\xdb\xc6bc\x91\xc6\x86\xc9Mx\x95\x87\xac\xbf\xfc\xfc\x1b,\x96\xc6y\xe8*\x13\x17\x06\xbd\xae9,&\xd7\xb75\x00\xef\xc8\xed\xbal\x8b\xafk:\x87\xcd\x13\xb7\x0d\x9d\xc3\xec\xe2\xb6\xc1\xd9\xb7\xb0\x80\xf9\xbaY\x15\xact\xdf6\xab\x82\xf9\xfc\xed\xdc\xc9x\x12\xfa*3\x01\xc9\x8c*\xe0z\xf4\x98\xeb\xea\xd8\x94\xd7l\xdf\x15\x91\xc2\x02\xd5\xeb\xbb\x1b;\x0b\xec\xdb\xado\xe3*Qf\xf9\x9c\x98\x84KX\x9b\xd0B\xec\xbd\xbf\xfd;\xcc{\xb6\x8c/5\xde\xa0\xc4@0\xc3I\x1c\x0f\x12\x90\xde\xc3;\x91\x94\xb34a\xfa\xb1\xa5c;1\x1a&\x1a\x80u\xf0\xc4\xa4U\xc2'S@\xe4\x94\x1ea^\x9f\x14 \x97hs*s\x12fo[Z\xd9\xc4R\x97\xb9\xfc\xa2\xfd\xab\x1a6\x00\x10\xbc\x0f0]KLR%:\xe6\"\xa9\x12\x19Bq\x97f\x81\xa8JX\x84J\x8atKXQL\x8atK\x18\xf1\x13\x93n\xe9\x03L\x0f\x92R\xba%\xac\xe9l\x99tK\xefc\xa4O\x8aLLX\xd2(]\x03\x92E7 \x97\xb0\xc2\x94\x14\xb9\x98(\xeae>\x10M\xac5IH\xa8\xfd\xe7q\xbd-\x93\x8d [\x18\x13\x03\xc1\x1c%1y\x9a0\x05HL\x9e&\xb2[:O\xd3]\x1b@\xd4\xb9A\x01*O\x13\xa6\x84I)O\x13\x16\xd3\x93R\x9e&<\xa3-\xe3\xa7\x8f\x15\xfb\xc4@0\x03\xdf2~\xfads\x0d\x04\xd3\xd6\xc4\xe4i\xc2\xc6\xb3\x04\xf24\xe15\xd8\x02\xcd\x91\xe0>8\xc3b\xad'\xd1y\x9a0kM\xbc\xc0\xa4\\\"\x87\xdf\xe4p\"\xf8V\xe4p\xa2 \x15\x17Jh\x19\xc8\xe9\x04?9\xf0t+@g\xc9%\xd4\x99;\x81\xc9\x92k\xab\x08\x88K\xc6\xc6A\xdey\x0f\xeb\xae[+\xe7\x05\x91\xc3|5\x81W\xfe\xf1g\x8b\xff\x0fvV\xd6E\xd03r5\xc5vcT\x90<\xb7\x9a\x14\x890\xb0=\")\x12a\x90\xe6U\x0eh\xb2BZ\x90 \xdd\xe8\xc4\x16\xf8\x16\xdb\x84'\x93\x17\x7f\x13\x9d\xd8\xe2\xa7\x04\xe7\x8a\xc4\x16\x98ln\xc98\xba\xcf\xb1\x8e\x95\xc8\xcf\xbf\xa1]DR+'\x8cX\xc6\x88\xe3|]\x18\x8bQ$9\xe6>\xc8}\x820\xa7\xaa\xf7\x84\xb5v%g\x17fTE\x89J\xd4\xfbO\xf1\xfd_\xd1\x91I\xda\x85\xe9\xbfl\xaa\x9c\xb5\x0b\x93\nY\x80\xa6\xed\xc2*\xb5*\x86\xf3v\xe1\xd3b\x8a\x95\x12wa\xb3\x16*\xa3\xf3\x0ea\xf1G\x16;W\x8b\xa7\xe5\x04V:\xc2\x95\"Z\xa9\x10\xf8\x06P\x8c\x13EP\xf6.\xeb:\x97\xf2\x80A)\xc2.D)\x9c{\x8bPf\x9ff\xd4\xb2.\xa2N\x97\x85em\x0d,\xb0\x13[F,\xcfr\x13Z(\x8a\xa0\x8cYx:\xc4\x17\xf1\x01\xa1\xceVG\xc4\xa6B\x85\xf7\x1a\x96\xdad1\x925\x0bK\x04\xaaTur\x98R\xa9B\xa5\xa4WX\x8b\xab\x94\xd0\xf8\x87\x05s\x94\xd3\x8c N \xae\x9b\xc0\xbak\x02\x87\xee\xd7D\x88\xf2\xd3\xea\x83\x8d\xa4\xa2I\xa6CP1\xd0\xe9 \x08\xfa\x05\x90\xf3\x81HQEf\x1bL\x0c\x93jf\x1b\x02\xd6\x81\x0cO \x933 d0WLL\x02\x19\xbc\xe8\x89I \x83iKbn\xd3\xb0&\xb8\xa5uQ\xc2\x95\x8d.J\x04\xde\"/ \x1duqGB\xf0/\xcaC\xaf\x94\xe0\xfe\x03\xac\xde'0\xc6\x8e\xe53\xdc\xf8>\"\x9a]\\r;$<\xc2d\x03!\x04\x19\x85\xf0\x90\xb3[d\xea\xc0\x06\xb5-};E\xebh]\x1b\xfb\xc6l)\xc9\x8b\xec}\xedw\x99\\\x83\x08\xd1&\xb9\x06\x16l\x93\"\xb9\x06\x01\x15\xa9)\x082\x17t \xc7ni\xdf\xc3\xf7\xb0\xa5\xab\xe4db\x81H\xc2zE:\xe2\xc5\x93\xf7d\xbc\xb5\xe8:\xf2a0\xefR\x88\xdc\xc9'd'G*\xaf<65\x08\x00\x84\xaa\xfd\x0d\xcd\x02\xb5\xbdqn\x07\xce*\xa9\x16\xf538\xadX\x9c\x01G\x9f\xe3\xf4\xab$\xe3\x1fb!_\x00\xd4E\x1aa!F\xf0\xc5rQj d\xc9bG]\xc1\xfe\x92\xa0\x99\x04\xe9w\xfd,\xd0\xc4z\xf0\xd3\xdbJ\x96x@\x98\x9f\x80\x80\xaf\xd1\x9f\xd3\xb5Ko\xab\xdc!\x0f\xb0\xb0,!P\xefg\x965\xbf\xad\xfcg\x88\xd4t[\x076`\xb5\xa7\x08\x94x@(\xce\xedR\xf8\x82\xb5^\xe1\xd7o\xab\x0b3 \xb4\xd4D_<\xc04P\x82L \\\x0dPuH\xebJK\xd9{\x98\xd5\x97^\xae'R@=\x08j\xe1g\xa8\xc8.\xd2p\xc0\x86\x02\x85R\x8f\x17\xcb\x16\x06\xd8X\xa4h\x8a\xb0\x11Yn7\xd4#\xa6\xf8\x93;p\x83L\x1e\xf2Oo\xe75\x80\xda\xeb\xa5msk\x89u\xc8\xd4hR\x98#\xa7\x0d\x02I\x03mJ35\xee\x87\x98jogp\xfa\x08 U\x80\xbf\xb0\x01d[\x7fAD\xc6,q\x04\x9f\xe6q\xea\x07r \x7f\x83\x95$]D9_as\\\x9a%\xd2\xeeE\xb2\xdfm\xc3\x01|H\xf0Z\x1dL\xc2r\xf3\x9e~\xb3\x9b\xa8\x0e&\x16\x89\x02\xe0d\x91\x19\xe7=\x9d\xaa\xe7)\xe1\xbayo\x94\x83\x07\xf3S\"[\xe7=\x90\xfa\x9fb\xbb\xa2\x80@_\x84\xc0\xe6=\xcdE\x9f`\xb2\x9c\xe6=\xc3E\xb1^Z\x1c#\xdb\x1a\x990*+H\x11\x05\xcb\xb4\xcb\x11T\xd6\x0e\x8b\xb3d\xaf\xad\x12\n\xdb\xa6 \xd0\xdbu\xeb\xa3\xfd\x1f\xb1-A\x80`\xd3\x9f\x12\xec\x11 \xc8\xf2F8\x86\n\xf6\xa2\xfaj\xee\x96]\x8f\xb0\xd6*\xc0e\xd7#\x8cL\xe5`_\xd2\xb6%\xd2\xb7\xa6\x04r=\xaa\xeb\xa5\x14\xe1k\x19\xa7\x0eY\xb3\x80\xca\xaeGD5\x15p\xedzD\xd4S\x01\xacUPs\xb7^\x0b\xcd\xdd\xe1\xce\xd0\xb1_Bm\xc3e\xd2=\xc2\xf7j\xbf\x83!\xf0\x97\x98\xb8n\xc3v?\xa4\x15\x80}\xd2\xd3\x1a\xcf \xf2\x82OO\x9a\xc7\xf3\xe2;\x91M\xf3\xf8\x84\xf8N\x84\xc7<\xd6\xe4\x05[ \x05H#(\x11XM\x84 \x05\x009\xa0\xd8\x1e\x1b\xd2\x83\x05\xb8j@w\x0d\xb08\xa0\x96\xa6\x87\xca7\xfcWXQ\x9405 |!\x9c\xe6\xb1I\xdbJOSl\xa8!\xa55\xb1\xa2\x86Dp\xcdcE\x0d)\x1d\x8855|J\xc45#\xed\xd8\xb6\xbfn]*b\x90eI\xca\xe1\x94V\xa8\xa6h\x96\xa1\x96)\x9ae\x8e\x9a\xa2\x11\x9e\x9e\xc7z\xad\x89\xc0!@@\xd1\x08\xbb/b\xd6\x88\x19\xc6\xc4\xacachjb\xd6\xac\x90\x9a\xbc\xd7\xe9~\xa8\x8d'D\xba\xb9\x03\x91S\x9f`=q\xc7\x113\xfaA\x86>gN2\x80\x9dy\x17Oh\xc7\x91!\x9aX\xaf\xc8\xe4\xe7\xdf`\xe4\xcf\x94\x9d\x9f\xf8\xea\xef\x18k\"i\xc9@\xb0\xa6\xb1cl\x80\xd8\xfe\x92\x19\x08\x96\xa9\x94zF+H\xdd\x0c#\xbf\xce\x9c\xfcclw\xcdx\xa0\xbcb\xdf\xc5\xeclG\xdb\x8b\xf0 \xcc4\x00\xdb\xcd\xb3!O\xf8I\xd1\xd8=\xb2,\x02\xd4\x8f@b'\xd0\xac\x11\xba3\xe4\xf0\x06*\xa6g\x99\x06`\xb6)\x01\xe9\xa1\xc0\xf7\xdf\xe0\xc3)ac;\xc4w\xf7J\x197\xf1A\x91\xf0:cJ5\x03\xe2[\xbf\xa2/\xf5gC?T\x9e\x8d\x98\xdeU\xb3\x1dbh6\xdcS\xb1\xbdtD\xf5\xe3\xb9\xb0\xb1\xb5.N\x066\xc7d\xc3(\x11X\xf8 \xe6\x1c\x86\xbb\x93\xb6t<\xce\xaf\xb1%\x1a\xa5\xdb\xc0\xc4\xce\x92k\x03\x8bq(\xd1\x06\x99\xa0\xba!\xf9\x84\xe0\xa0\x00\x80\xec\x8d\x15z\x00\x01\xc1\xf8\x88\xa0\xa8\x00\xc2\xbb\xb9XP\xc9\xea\x1e\xe0\xce\"\x0e>B\xd8n\x99\x81\xd7\xee\x03r\xd2\xa3\xb8\x07\xe7\xed],\xd0dQ\xac\xd3\x18\xe3\xa1\xed\x18\xdb\x06\xa6\xed\x99\x81`\xca! *d\xe3)6\x1bdQ\n\xc3\xc6rSVx_\x93\xa3\xb6\xb5\xb8,\x99\xe4\xdb\x84\xb0$\x0e\xec\x91\x05R\\\x9f\xbf\x87\x15.\x0d\xd4\xde\x0b\xefaA\x0d\xc7\xee\x93\xac\xea4t\x9f\xa4W\xd7E@F\xc6HJ\xe2\xfa\xc9\xa5\x9a%\xac\x9f\\\xafe\x89zU\xe5\xd9/\xb0IL_\xc9\xd9z6\xb6\xc1\x8f\xb0\xdc\xbb\x93\xf8q\xc0\x97\xeb\xe8\xb2\x80\xaa\x9a\x96\xe1\x02\xea\x7f\x88]\x06\xb3\xc4\xcf\xd4\xd6~\x84e\xa3,\x89\xf9\x1d\xe5F\xf5gx\x0fw\x8c-\x00k\xbe\x99\xb1\x05\x10\xa2\xa5nz0\xfb\xcf\xd4U\x0f\x96_v\xb4\xf9\x9f\xa0\xb7\xb6\xff\xe3E\xd81\xcf\x0f\xd0>4\x04_\xc0d\xfb>\\\x8c\xdc'\xdb\xb4\x1f\x0d\xb9\xe3U\xf3K\x12\xea\x08\x85\x90w\x13&1\xbb& \x1e\x1f\xba\xdc@\xf0~\xefj\xd1\x07\x8b*\xb9\x96\x960?\xcau\x0d\x0c\x10M\xe9\x00\xfb\x0f\xf0\xb6\xec\xf6\xd4\x93\xca\xf8\xa67W\x80\x7f\xc0s\xde\xed%\\\xc6y\x7f\x86\x97,7\x10L\x13wu\xb4>\xde\xb3\\\x030\xfe\xed\xc2\xa8\xb0\x1c\x93\xc3\x98\xf0\xa9\xcf=\xed:\x809\xc6\xae \xd6\xc7\x04<7\x10LZs\xe3\xca\x89M]y\xe1?\x88\xf9\xe1\xae\x16s\xb0\xd8\x91k\x00V\xd7vM\xc0<\x16as\x03\xc1\x879\xd7\x9e\x85da\x86N\x02\xeen\x98d\xe6& -\x1ern\xde\xc5\xc2\xdaJ.\xdf\xa7\x12\xa0w1\x95\xca\xcbOWY\x80*6\xe5]l\x1e\xcd\xcdC\x18X\xfc\xda\xd5\x11\xf2X\\\xcf5\x00\xbb\xedC\xb0\xed\xc7\x98\xc1\xee\x86\x9e\x8e\xa9\xc5\xef\xe5\x00\xc8\x84\xd4\xe2Ce\xc0:\xa6\x16\xd3sY\x00\x07\xd5\xe2{(c\x8a}\x88\xf1SBt\xb6\xff\x07\xf8\xa8\xed\xaad\x0b\x9fa\x0c\xc95\x00k\xf4\xbb\x86\xc5c\xcd-7\x10L\x04\x9b.\x1cw\xe3\xc2\xb9\x86\xd0\x95\x02f\xa9Wv\xda|\x1f\xdb\x8c\x15\xb8r'KOh\\\xbd\xb3\xc5\x8a\xc5n,\xa4\x81b|\x18\x9eW\xe1\x96\xfa\xd8+\x98\x9c\xeaX91\x9aw?\xc8\x19\xd2%\x8a\xa7\xa4\xc8a\x8ak\xb77\x8e\xf1[MX\x9b\x94E\xd0\xad1\x96awU\x08\x14^\xe4\\}\xc7\xeb*\xbe\x0fm\x15v\x8d\xc1\xfbs, \xe6\x85-\x9cn\x93v\xbf\xc4\x95$\xa4\x187mSa\x10x\x7fb\x99=O\x0c\xa9\xc1\xe7)/?\x02e\x01jRC\x16\\9\x19~F6Z\x03\xb0\xd8\x92k\x0f\xaa_`\x82\xbbkD\x1d\xc2?\x8c\xa8\x83U\xb7\xdc\xbc<\x84\xeb\xecj\xdd\xe83L\xbbr\x03\xc1\xf2w\xae\x9d\xbb0M\xca\x8d\x0b\x17\x96ps-\x0b\x90\xd5\xdeUy\n\x08\xe1V\xdf\xb1.\x97\xef\x1ba\xfd\x11\x96\x9d\xc6N8\x80;\xc8G\xb8\xb9\xb1\x934\\\xab\x8c\x9dD(\xce\xd2c\x01\xaf\xd0\xd8I\xc2H\xe8\xbe\xf0\x9a\x06\xc6\xc2\xb1\x93\xd4\\\xc6\x08\x88o\x0b:\x17\x80\xfa\xb8\xc6\xb1\x16\xa7,\xed%Vz\"\x00\xe0`\x8f\xe5\x86\xb1\x93\x18O\x0clR\x11\xb0\xea\x1d\x03\xbd\xd2-\x97Q7\x0d5\x85*\xa6\xbd\xe62\xca\xc0g-\xa4-\"\xc4\xb6!`H\xd3\"\xaf\x03\x97\xca\x18\xaaH\xfc\xa1/+\xcd\xfa)f\xe1c\xc53\x9e\xe2\x83 \x002\x8a\xef)>\x08\x97A$\xc4\xe4l\x0c\x9f\xf1\xf0\x8a$f\xb8\xeb\"\x87\x19\xee\xa1HaFFe\xea`]H\xb6&%\xaf\xa7\x98\xe3^V\x9e\x9c\xf8\xa6m\x0c\xdfI\xea\x991\xe7j\xb9\x1e`qx\xcc\xb9\xd2W\xb1\n1\xe6A\xe0\xc3\xbd\x02&w\x97y\xa2\xda{\x93\x1c\n\x0d\xfa\x11\xad\x93\xd5\xd5\xc8j\xca\x97\x13\x9bb\xb9T\xc3\xd5\x13\x17u\xd5\xb7y\xec$\x8e\xf2+\xff+,B\xebR\x85\xe5\x07#3}\x04\x04\x13\xe5\xcbZ\x0c\xc7\xc2\xf6X\x030\xee\x8e\xb5\xc4JQ\xdf\xe4\x8e\xb4dz\x1c\x9b\x9c\x8b\x96\x0c\x89\x97\x8dx\x86\x95\xf1\xb1\x81\x10:[\x1b\xef=6o\x17\x92sg\xd8\x16!R\x86ma\xc5z\\\xba\x01\xb6\x90\x8b\xd2-\xb0\x15j\xeeKj\xa0\xbc\x8eZ].\x0e\x17\xd6\x00\xc6w\xfc\xc1\x1dG\xb2\x82G\x18\xf1\xafh\xbfV\xcc\xfd\xf65\x00\xf3\x9d}\xee\xa9\xf3\xf0\x18+\x00W\xb8\x07Q\xbd\x0f\xf1\xe8\xf65\xe4\x1e\xde\x17 \x81C\x89qj\x9f\xfb*[\xcc\xdb\x18\x97\xafht\xc3\xf3\xd9\xd7\x00<\x9f+\x063\xb0\xa0\xb3o \x98\x94\xec\xdb;\xdfO\xac\xa7g?\xe1N6\xb4\x82\xae\x18D\xc2\x87`\xdf \x12\xd6A\x0e\x94'\xd4C\xcc\x04\x0f\xd4\xce<\xfb\x05\x16\xc0\x0e\x94\x13\x14\xd1\x9c\x0e<-\xfe\xe0k\xe67\xf4za\x9b\xc2\x81\x06\xe0\xfd?\xd0\x0f\xb5\x90\xb7o\x0f\xb4\x8eL\x9e\xbb}Cf#\xc06\x90\x03\xf9\x15\xab\x00\x07:\xbd$y\xcb\xf7@\xdfA\x927|\x0f\xd4\xf3d\xe4!\xdd\x03\xfd\xe2\x0bf\x05\x07:\x99\xe0Gx\xaf\xde0\xe8\x80\x95\xef\x03\x03\xc1,\xef\xa0\x88\x0d\xc1l\xea 2\xd6A\xb2\x91:<\x9d\xbc\xdc{\xa0}>\xc8\x83\xbdo\x18L\xc2\xc4\xea\xc0`\x12&\x8a\x07\xc6;\xee#l\x1f<0\n\xd7G\xf8\xb6\xed\xc0\x88\xcc\xa4\xa7q\x0dK>\xd8\xaf%\x00W\x8d\x8d\x0e\x93\xdfC\x03\xc1\xb8yu\x11\x84\x12\x8c\xe6\x87\x0e\xd8\xaf\xf0\xfe\\\xd5$\x0b/\xda\xa1\x06`\xbc\xbc\n\x1d`\xd9\xe6\x10\xda\xc7\xa4\xfd\x90\xcbdBX5\xbb\xaaO\n\x96\xdf\x0f5\x00\x8f\xe7\xea*\xf4\x8b\xef\xa2\x0f}\xe8\x18+\xadW\x0d\xe2a?\x9fC\x03\xc1D\xff\xaaA\x14L \x0f\x0d\xa2`JxU\xd9\x0b\xb1\x08t\xa8\x0c\x86\xa4<\xe8;\x9f\xe1\x83z\xa8\xf4 l\x00\xb8fBQ0\xc2\xdf1\x10LT\xae\x99\x1b\\\x8c\x1ew\x0c\x04\x93\x90k0\x0d\xbc\x8cw\xe03F\x82k\xea\xe5vL\"\xee\xa8\xef\x98\xa6\xdc\xe1\\?\xe2\x89\x19\xc65\x9eDW|/\x1b\xd6?\xa3vM]\x9fb\xc9\xf0\x8e\xfa\x8eq\xe5\x9a\n\x9b\xc6]\xdd\xd1\xc8E\xa6\xa3,\xfe\xa4\x030\xf8\xff=\xee\xe0\x8e?0!c\xf8l^\xd3ar\xf8\xb6\xed\x8e\xc1;|v\xae\x19\xbc\xc3D\xfa\x8e\xc1;|p\xef\xec\xdf\x92k\x85 \xd7\x9d\xfd\x10\x00\xef\xb6\xcc\xf7\xbb\xf2\xaf\xbb]\xd6\xcfC\xe9g\xda\xe6]\x96uY\xd8a\x7fd\n\xb5\xf2\x94\xb34K|7k\xbdj\xbe\x8e\x9d\x84%\xec\x0c\x0b\xdb'\xe7^\xe9T\xbb\x8a\xe4\xf7\xf9\xeftf\xf2\x90\xa7\xae\x13\xf3K^Q\x93\xcf\xf0\x838J\xb2\x94\x9d\xa9\xf6[\xeeTw\x11v\x99\xdfeN\x97\xe5\xec\x0c\xcb\xaa\xdd\x88\x9fh\x84\xcf\xc4Qz\xc99x\xb5\x02\xf5\xfb\xac\xfd\xf2,;sF\x14H\x13w\xc6\x1d:\xc9R\xe4\xf1\xc5\xac\x9dup_\xe2\xd7\x8f\x12\xd6\xce\x8e\x1e}\x95e\xec\xbb,}\xd5VF\xb7<\x07-\xb7Cfo\xbe\xc3\x12\x9e\xe5I\xc8\x8e\xcc\xbdZ\xdb\xc8\xcb\xf3\xb2\x91\xd0\x14v\xd8\x19\x96\xb4\xa36\xb4\x98\x06\xbe\xcb\xdb9;\xca\xe6\xc4\xeat:]v\xe4\x08\x9f\x89\x9d$\xe5\xc9\xcc\xd8 |\xcf\xc9\xf8\x9a\x1f\xee\xb5\x9d\x0e{\xe9%\xd6\x96+!\x16\n\xea\xf0\x99\xc0\x0f\xf7\x96\xa20\xe3a\xc6\xce\x88e<2\xdb\xb1\x8f\xe7\xb4\x1a\x8bhGV\x17K\xc0^\x13\x7f\x9fa\xf3l\x81eG\x8f\x92\x8aw\xc9\x173\xebo\xd5\x97\x93\xeb\xec\xb33lV\xad\xb4\xe8\xf3\xc4<;\xd2\xb4\xa0\xa2\xcc\x91v\xc8\xbe\xc7^\x11\x7f\x86\xec\xbbl\xeed\xe7\xd5\x0e\x19\x81XX\xebd:j.t\xfe\xfe\x83\xf4\xe8\xf1A\x97\xb5X\xab3\x93E\xf2\x0eg\xc9Iy\xfb\x85\xe0\xf0F\xef\x16w\xb3\x19\x8f\xf7\xfd\x90o&Q\xcc\x93\xec\xb0\x9duY\xeb\xe6M\x9e^\x8a\xbc<\xe0\xad.\xc1\xd6 \xe7\x0b\xec\xc8l1\x82N\x97\xc9V\x9c<\xc8\xca\xd3\xac\x99%\xc5\x147\x1a\xc5Q\xc8\xc3,]`\x8en\x89\"\xfb~\xe2\xc4K\xa5\xa2y}\xd14s2\xbe\x19\xe4\x03?L\x17jXA\x1as\xb7\x0e\xc6Tw\xdb<\x90\xb9&\xd2\x05\x96\xd0^\xf4/-J\xf9\xd6Bw\xedu\x9d<\x1b>\xc7\x08\xa2\xe7i;r\xd2\x13Mm;r\x8f\xd2\x05\x96\xd6\xcf+\xe1^\xeer\xd1\xb5[\xbf\xd4\xfaWZ\x84\xc0>P\xf2\xf5n\xcd)\xbcK\xe9l\xdc\x0e\xdb'\xe7\xe7;\x16\xc9\x14@'0\xc87\xa0\x93\x18$\x88W_\x82NaP\xaeA'H\xadT58\x7f\xe2e\x0c\nt_'\xc9\x08]\xdd\xe0\xc9\x13\x9d\xce\xab\xdf20}JX\xbf\x9e\x1c\x08\x02\xc6g\x8a\xc3\xc8^c\x9c\xd96Um\xce\x02\xe3u+j\xe98\xa6\x1d\x0b\x92Mz-\x88t\x95\xd4j\x0e\xfeGw)\xbb \xf3 `G\xce0N\xe59\xc9P$\xcfc~\xc8xG\x93\xa18\x89\xb2(;\x8c\xf9\xcc\xd0I7\xf6CM\x90f\\'\x08\x04Q\x0bA\xd6\xc9\xae\x877\x04S\xb9\x1e\xde@|N\x0d\xb3L\x8b\x04-,-\x02\xfbF\x90J?\xdd\xdew\x06\x03\x9e\xcc\x0b\x8e7\xe3\xa7\x1b\x8b\xdb'\xe4\x9f)O\xc6\xb7\x1b(\x82\x103y\x91\x942\xc5#KtY.\xddJ\xa4\xec\xaa\x93\xe6\xc7\x03&\"\x99\xb0\x90\x00\n\x17^l\xb1\x97{fz\xaek\xcd\x03\xcc\x9f9o0\xefp\xde\xa4=/2+vD\x00\x01 \"\x80$)Y\xd5}\xb0\x96\xad$\"\x10\xd7\x1d;\xf6}'a\x00\x9b*\xfaf\xe7\xbe\x92\x1bl\xbf\x0d\xf1\xed\xd6\x8e\x12\xc6}-\x8cW[\xd1\xde\x07]=\x1d\x13W\x0d\xd8;#\xc5\xe1U^\x10z\x91R\x1c_aP\xfc\xeb\xbb\x9c6\xa2&\xday_\xf6\xa6\x0b!\xdf\x16\xc7\xce\x1cz\xec\xcb\x85\xcdc\xa7\x851\xd5\xf8\xec\xa3\xcc\x94\xf7t\xc8\xb0/\x9fq\x03\xf4\xc5L\xd94s\xb7\x89\x85\xf1o E\xe3\xdf\x12\xfe\xc6\xbfk\xdc\xce\xfe\xac\xd0\xfe\xddLI,e\xffvUw\x8f\x91C\x1d\x82\x83)\x84\x13\xbcXn\x86\x7f\x95\xb8\x17\x87\xed\x85\xf9K\x1f\x89\x15F\xfe\x18\xcee=\xbd\xce=\xfb\xb9MP\x0c\xed6\x93\xc4_\xbf?=#\xe1\x9f\xa3\xe4IY,\x92,\xfc\x99\x18\x88\x8a\x9cR\xd1JZ\x9e\x96\x8c\x1e\xa8Hy\x05!\xe2+ \x91\xd2D\x88\xe4\x9f\x86\xd8\x16\xbf\xe8\x84#\x0d\xaan.\x95-\xee\xceP\x7f7k\x87.\x83}\x7f\xed6\xccvq\xab\x8c'\xdc\x01\xc2+>t\xdf{\x11\xe6\x85\xd3\x06\xfe\xeav#q\x91]\x1d\x92\xbf\xdb\x8e7O\xb2\x03\x7f\xb60\xcc\x0d\xa4[\x93\x1d\x06\xbe\xee\x0e\x1d\xc7\xd8Q3\xa2\x14R\x8a\xe9\xe6\xb1\xba\x14u\x0e\xd3\x91\xa6\x94\xe2\xdf\x92Q\x01\x94\x0d\xb1\x14g\xd8J(\xcb>\xb6P\xbe\x84bn\xfe\xc1c\x7f\xf6}D\xf7|\xd2\x04\x00m\xfdk\x0d\x03\x11#\x03\x92\x96\xf9\xc2\x8e\xc9\x05\xf8\x14\x81\xf3\x1b\xbd\xda\xd6_\xaeQ\x056\xf3\xe6aT\x90l\x00|@}\x88\x18FE\x91-Q\xd6\xbdv\x1cG\xc1v8.X\x8b\xa2H-\xfc\x14!\xd7\xf2\xd3\xf0\xcf\xe4J\xbc\xa1\x84\xc2\n\xc3/;\xfd\xd0>\xe2?\xc8\x7f\xadt\xe5*\x99\xbfJV@o\x8d\x8a\xad\xf2\"\x12\x9f\x15\x0b&2\x7f\x92e\xfe\x95\x9d\xc1c\x18\xc1>d\xb0\x01#\x98\xc0\xa6\xe3\".\x18=\x82\x10\xbe\x82\xec\x11\x84\xeb\xeb\x0e$\xd3\x90V8\x96[\x9b\x86\xc7\xdd\xcd\xa4}\xfaws\xd9\x97\x155\xe3\xd3\xcb=j1\x8b\xd3\xe2\x98\x92\x8b3\xbf\xb0\x13\x87r\x93mV3\xd1^\xff\xac\xe0\xf7\xbf\xff[\xf2\x8c\x9a\x9a\xbdK\xa1\x82\xdc\x06W\x1f\x0f\xe3\xebVe\x91\xef\x84\x8d\\\x99\x81\xbd3\xd6y \x03+\x13%\xf5\x86\xa1Z\xa7GB\xa0\xd5\xe4E\x1d\xde\xd6\xc8\xd7\xe6m\xbev\x18\xf1\xb2\x12\x8f\xe3\xf6*#\xccK[\xe1\x9fB\x89\x7f\xe2\n\xff\x14\x1c\xff\x14\x12\xfe\xc9\x18\xfe\xc9\xe0+(\x1eAF\xf1O<\xcd\xba\xf8'\xd3\xe0\x9f\x04Ug\xb7\xc6?\x127E\xf1\x8f\xdfB/1\xc59]\xd1\x8e\xe9\x88\xaf\x84\xd7?)+E>gV\xa9\x8b\x07\x99\x0e\xa2\xa3MH\xaa\xa2\xfb*N\x88\x15u\x98\xa4Z\xa9\xf1P\xaf\xd4\xd8T)5X\xd1H%\xcdcEz\xa5\xc6\xd6\xef\xab\xd4\x10\xbfd\x91\x7f\xb3\xa1\xa7~\x14\x9d\xfa\xb3\xf7\xf9\xa4&b\x9as\xf9\xb6(\xd2'\xa8\x88\x8b\xd4\x15\xde\x12Lc\xf5u\x12\\Mj\xfa\xbcY\xe7\x90a#\xad\xfa\x92\x97?M\xe2\xc2\x0f\xd1\xdfL\xa3\xbc\x94:;\x08B\xf4V\xc8\xd55_\xa7\x84%\xff\xa9\xfa\xd6(\xe9\x12Q\xf1E\x18\xbf\x9f@(j}\xe6\x87\xc3\xb7c\xbb\xab\x9fKxI\x07\x90C\xbc\xbe\xec\xd8\xa6p\x8cUF\x14l\x91\xa8XQ'\xf1\xd1A\xb4\xff.%\xa8\xf5B\xc0\xedr-\xb1\xb8\x18*ex\xb7\x0e7\x0cI\xc9\xec\x8d_,\xba\xe5LJbU@TA\xa6\xa5\xb0)\x0b\xe7`\xaf\x15\x95\x1e\xb0:\x03\x9cH\xe0\xe9ul+O}J\xf5\xd0\xdb\xc4\x05\xebU\x02\xd5$\xda\xcc4\x9d'SI-\xfd\xb4\xa6-z\x94@\xda\x8e\x83\xf0\xbc\x03e\xe2yO\xae&\x12c\"\x9ekW\xdf\xdcb\\\xcd\"\xc6\xeb\xaf=\xc8\\\xc7\xaa\xf1\x81Z_|\x91\x91\xb9\x10\x13\xecc[0\xb9\xd9\xf8A\xcc!W\x16_\xab\xc6\x17\x99XI\xba\x9b\xf2\x00\xa3jc\xe90\xd5\x8c-\xf0=\x9bUR\xaaa\x02\x83\n\xf7LZ\n\x0c\xf9\xd1q\xd3\xd0\xbf\xf3\xa5\x0b\n\xfe\x94\x98\xd6\x12pX\x13\x98\x99\xc5\x01\xb8\xe4Q\x8f\xc8\x00\xfd\x86,s\xa5%)\x16I\xd0\xdbV\x8a\xee1=\xa2\x15q\x9e\xe9=\xc3\xd8t\x17r\xba\xdd=\x12\x99(J.\x8e\xb2\xab\xe7\xc5\xeb\xb2\x98\xb4\x8d9\xe5\xe7Z!<\xd0\xbdo\xbfko\xe3\xb0C\xcb\x8eY\xfey\x194uo\xa3Pu\xe7\xd0\xcb\xc8\x0e\xc5\x9d\x13\xf6\xdf9\xe1\xe7}\xe7d5\xf1\xa1\xbbu\xa4*\xdf\xd3\x85\xeb\xd6\x0b\x07\xdfNX'\x9e\x87g\n\xa8/\xab\xfb\xabb \xba\x95\x98\xb1\xf8<\xee\x96D\xec\x0ee\x06\x84GW\xa9b\x9c3\xac\x12\xe6\x07\x97dV\x16\x8a\n\xf3\x9e+4\xc5\xf2$~\xba\xf0\xe33\xc5\xf7\x01\x82\x8d\xf5\xd2\xcf\xde\x07\xc9E\xac\x92?.X\x95e\x12\x90\xe8\xe0\xd2_\xa6\x11QU;g\xd5:\xb4\xa1\xaa\xee\x12\xb85q\xc1\xe4\x01\x01\xc9gY\x98\xd2\xad\xb7*]f\xf7\xb3\xb3\xd6g|\xe9\xf8'\xe4\x02\x12\xefu\x16\x90\x8c\x04/\xfd\xb4y\xce\xe9ZG\xb4\xda\x99\xf7\x9e\x08\xe1w\x98\xe5E\x9bu\xa3\x80v\x05{p\x86]\xa8\x90\xd6)\xec\x81\x95\xe0)fw\xd3U\xcd\xef\xa3\n\xdar\x81\xc9f\xdb\xb6?H\xa2\\\x19n2\xbc\xf5(\xeb\x1b\xce\xf0B\xba\x97\xcc\nRl\xe4EF\xfc%\xbf\x08\xe9$\x98\x91k\xe4\x85q@._\xcfm+\\\xfag\xe4\x1e[\x88N\xa1_\x06a\xa2+<\x0f\x03B\x0bu,\xf0 \xdb\xd6\xe7qZ\x16*m\x03\x9f\xcb\x0c\xf6\xeb\x0b\xae\x85DOt7\x1d\x93f[\xf3\x90b\xecK\xf3;\xc1\x0e\xa1\x82V\x98t\n\xb5\xa3)\\lL;(.'\xd0\x8f*/\xae\"b\xb2^\x07\xf4\x1a\x880\x98\x07\x1d\x9d\xb6b\xf72\x026F\xeb\xdf\xfe\xf5\x8f\x96\x90}\xdf\x14\x07\x81\x0e:NN\xf0p\xea:/]\x88(\xc0\xdf|\x85\x1a\xbdfI\xba\xc1O\xb8v\xba\xf6\x17\xfc^p,\xe7#L7 iFf~\xa1\xdb\x0b\xca\x95\x0b\xbcQ\xd5\xa4\x97\x82\xfc\xb7\xd8\x0d\xd3\xf8nw\x88dj\xb8w\x9c\x12\xe1\xec\x1a\xa9\xb0\x06+\xab\xabta\x1a\xf6<6\xf2\xfeA\x98\xa7~1[<\x8f\xc3\"\xf4\xa3\xef9\xcb\xaa`J\xc4\xc3n\xff (\xf8\x12\xf1H\x13\x9c\xa0\x9f\x94\x05\x1b`\xc1\xbaz\x01\xb4\xcd\xc8\x9c\xde\x04B}E\xcehs\x13\x06\x8a\xcf\xe7\xb0\x0f\x01L`\xae\xffhU*\x15\x18\xa5\x8azu\x83\xfd\x86z\xef\x9d\n\x1f(\xa5\x1dZC<\x18p\x07\xc9 \xb24\x9d\xfd@\x05'yRf32\x81es\x04\x86\x83\xb2P5\xd3\xbbW5K>\x01_\xc1p\xcb\xfc\xf8\x04\xcan\x0dr\x99\xfaq\xf0\x8c\xa4\xc5b\x02#\x85t@\xf0\xdbJ\x01\x9c\x80\xda+a\xb8\x83$\xac\x02\xf8jA\xd8\x9c \xc2d\xe2WQ\x9f\x13&z.\xe4\\w:3Y\xfb\xa3!\x12j M\xd5\x15\x90\xd58B\x96L#\x06\xec\xdd\x19\xe8]\xe9 \xefz\x8c\xa7\x15\xe9\xa2\xad\xd2\x90\xbc\xc5\x14\xeb\x95\xb0\xaf\xad\x9e\x18g\xcc\x89\x9d\xee\xed\x05B\x98\xc8\x996\xedh\xd2L\x12\x03VJn\xf8\x17\x0b\x8dW-\xfa\xaf~\xb2\x19\xff\xd4\xd4\x81\\\xc9zS\x818X=f\xaf\xf2\x83\"i!\x04Y\xdbCQd2\x87Z\xd1nY\xbd\x8a\xd1\xc2\xcb\xd3(,l\xeb\xc7\xd8r\x86)\xd3\x15\xad\xc4\xf0\x186a\x9f\x1b\xb3\x11X\x87\x91\xe3\xfd\x94\x84\xb1m\x81\xe5\xc0:\x14`V\xe0\xf2\xcat\x10\xeaM\xa3\xb8\xaa\xa5\xa9\xf5\xc5\x06\x8d\x1d&/\xfa\xe5z\xd8\xb6\xa8\xa8\xf3\xe6=q\xdc4,\xb4#\xafF\x91\xb2\xe5#\xef\n\xf6 \xc5\xb7\x9f\x1b\xf13S\x918 /\xe8\x908!/\xe8\x908>/Pz\xbb\xcfT$N\xce\x0b:*\xcf\x88\xdb\xe9\xd6c\x9d *gf\xa0rf\x9f\x9e\xca1;e\xf6P9x\xa5\xbb=\xc2\x90U\xa1'L\xce\x18\xd3\xd3k\x88M\x9f\xd0\xcbI\xc1\xbe\xaa\xd5Hx\x06\x14gY\xee\xe3{?\x0b\xfd\xd3\x88\xa0\xc8c\x85\x0e\x85R;\xec#\xc8bn\xb3^(\xfa\xd3\x7f\x951O\xfc2\xcbH\xcc\xbf4\xd3j\xd5\xa4\xcfH\xf1\xa4(\xb2\xf0\xb4,\x88m\x05~\xe1o\x9c\xf3>\xfb\xe8\xac\xe6\xc2\xa9\xaf\x06K,\x8d\x05{\xd5\x8d\x82\x91pb\x83\xa9\x0e3\xa66\xc68AZ9\xd1\x97\x9f\xfb\xd1\x04|e\xf1\xb5f\x8f\xabE\x1f\xb4\xa3\x8c\xe3\xc0\xddd_R.\x97\x04\xac\x85\x8e\xe9/\xef\x04\xcd\xdc:\xdc\x00\xfa\xafh\x90\x08\xb4\xbd7T\x9cE8\x8c\xb3\xa8\\\x8b\x9f\x85\xc1\xcb\xa4\x8c\xdb\xc9\xff\xe0\xa32\x19\xdcB^\x0d'\xa4 \xbcH\xf9\xd3\x96\xebcZ\x08%>#\xc7\xcb,\xb2\xfa/^\x15Y\xd7Z\x8b\x1f\xc2(zKf$<\xc7\xcb2\x1f\xb0&\xbd\xa7|\xc8\xa2\xc4\xb2sJ\xdf\xc9^\x15\x1f$\x955{\xe3+\xf5\xdaS\xba\xaf\x1eqk#\xd0\xb5\xab\xf9\xceD\xc4\xd1\x15@/\x19o\x1e\xc6\x81D\xfc\x0d\xa4\xfc\niwyl\xc5F\xdf\xda6LF{h\x8c\x11Vdl\x0b\xb0b\x15`\xe9\x1b\xb3CVO`\xc9\xdc\xaa<>\xa2\x96:zu\xfa7\xb1[\xf3\xc5o>|\x80\xac\xc7\xb0\x11$\xac\xd9n\xa2\xf7Cf\x92\xda_\x0fqj\xa1P\xb7Zz\xe6\x0e\xd4\x08\xb7\xa7Ha\xb31\xf4`\xdf\xa9\xf8\xc4\x8c\xd3\xee\xfc\x98\x0f\xdc7\xcd\xe9\x1e `9\x98\xcf\xc9\xac\x08\xcf\x89\xf8\xd2\x88E\xd0\xfb\xaa}\x92{\xd5\x1d\xb2k\x94|\x92MgW{\x82\x06\x1e5\xb3\x04\x87\xc7\x14\xf4\xf2\xf0g\x0d\n\xe4c\xceo*\x14\x91\xd5|\xc2\x13L\x0d\xd8\xae\xbe\x93\xc8?%\x91\xb1\x9bE\xb1\x8c\xbeA%\xf3\x8d;aa\xd1\x8c\xbd\xd4\xea\x03\x04\xf0&y\xad\xeb0fT 3\xb7k\xda\xa2\x98\x00\xa6o\xe1\x13&p\xeb3\xa0\xe6g[\x8693:C\\!W\xd7\x03\xa7\xdb\xa8\xa7\xb3G\xf6\x8a\x841N\x8e\x905\xf5\x00\x1374\xbe\x0b\x88\xa3\xb4LY\x90`\x83\x8eP\xb7A\xd6S^\x0b\xde\xbd}1\xb1\x0c]7Dg\xa1\x9d\xe1\x8c\xb4\xb5\x17\xdb\xb5d\x8b\xd3\x0c\xd2y5|\xd8\xb4s\xd2Wk\xd89\xf9\xab\xdd\xa9}\xe0\xd5c\x89\x03z\x7f\x0d\xf1\x98\xce\x1a\xda\x06\xd4~\x1bC\xea\xf1\xdb\x95\xc4\xe5\x12\xcd\x11ns\x8e\xe9\xd3\xe2\xe8z\xaf\xf9\xfa\xec\x13\x13\xcfkZ\x8e\xc6\x14V@\x050`\xbf\x06\xa2\x03\xa8\xe2?\x92`B/\xf3\xbd=Hl$\xa6\xfa\xa9\x1c\x86\x1a\xfa\xeb \x9cc\xacH\xb1\x87\x89\xfaq`\xa2\x9fm\x88\x96\xb8}\x93\xe5\xa6\xb5\x05\xb9T\xf1s\xf2\xc3G\xccW\xa2\xcf&\x0e\x86\x83\x83\xb9\x91.\x0c\x9a\x16D\xeb\xf0Q[Ctj\xf4\x88[\xeb\x05\xee\x13\xbb\xce\xf1\xed\xe7&v\x8dtb\xd7H'v\x8dtb\xd7H'v\x8dtb\xd7\x88\x89]\xebQEL\xc0\xaa\x12\xabF\x9f^\xac:\xbb\x8dXU\x12\xac(\xa4\xa7]\xad\xadVy\xdc\x92Z\xdeJy|+\x11\xcf\x9dr?}\xbcM1\xc4)F\x19\xe9\xa3\xa6Q4\xb7\xa5\xeb\xb5\x10\xb2\xa5\x98\x81I\xdbMk\x1f\xa1w\xee1+\xa4p~\xe5\xd8\xed:\x15\xd2\x17\xb0>GI8\x962\x0fE4\xe5a\xf3\xe8\xe3\x9d\xb9\x8b\xdb\x0fYX\x90\xd7qt\xd5\xc0\xbc\xedG\xa7\xabp%\xb0\x1f\x0c\x08\x83\xa1\xb7W\xcc\xc0\x80\x96\xe9\xee\xaa\xd3g\x02\xd9\x85\x1f\x07\x11y\xbd\xea\x88[\xa0;\x14\xd0(\x10\xdf\xfb)O\xe2{\xa1W\x90\xbc\xb0\x0b\x16\xc0^\xb6\x1d\xe0yf`2\xc8\xa6\x00VY\xbe\xf6\xe17m\xaf\xbc\x91vlX\xc1\"9;\x8b\xc8\xf3\xfc \x08\x8b\xaf\x93K0$\x99\x91\x1f\x19\xbf\xb2\xb1\x0f[y\xe9\xdb~\xb9W(F5\x815\x8c'\xc0\xfe2~\xa7\xb6\xc0\x84\x1e\x98\xc7\xa46\x9d\x08W\xf2#\x8fE\xe1|!\x9e\x0e\x82\xd6W\xe5\xa7A\xa3p\xa4\xc3\xea\x14t'w{f\x1bV\xb2\xa9\x80\x15\xf8o\xfa\x08\x05u\xe3\x16\xaa/\xf1\xc1*S\x1d\xf6[\xdd\x02\x02V\xb1\x82\x001\x85\x16\x9e\xe0\xb6\x04\xf5\xdf_~\xa9\x9e\xaa-Ur\\X\x93\x1a\xab\\N\x18\x11\xd8\xf8\xb3\xd2\xeb\x0f@\x0b2d\xae\x8e\xf1o\xbc\xd4\xcf\xc2\xe0]\x1a\xf8\x85.\x08\xc2M\xd7X\xa2\x11\xf8*\xcbo\xb4\xeb\xac\xda\xa5;\x9a\xb2V\x10\x05+\x1e\x86a\xeaxXA%\x0f\x15ie\x88\xb6\"?\x99P\x9f\x0f\x101A\xa5\x9f\x1fx?\x86\x98O\xce\xfa\xba,\n\xb3c#p\xba+\xb3\xad#rY<\xc9\x88\xd2\x15M~JV}\x11\x9e-\xa2\xf0lQ0\xb0\x9a\xf4T\xe1\xee\xab\x97\x9ef\\zz\x13W\xe0\x81\xd2\xd3\x94U\xcc\x0c\xa3@\xf2\xad\x8f\"\x1f\xaa\xf0\xd5SK\x91M\xcer!9\xee\xd9'\xc7\x85s\x13\xa3a-vk\xab\xe7*o^`\x19XS\xbfo\x99fC\xe6%b\x11\xa8\x82R\xf4\xcf\xe9\xc6c\xab|\x13\xf8\x94\xdfqH\x9bX\xb8Rz\xfe\xb4\x15\x01\x15,\x17\xce\xf1_\n\xa2\x06 \x83y8\xbd|\x1e\xacd\x17\x0b\x9ck 3\x12\xe0\xed&\"b\xf6~\xc5\x08\xa2\xfa\xe0\xf5\x7f\xd1q\xae\xe8\x91\xc7\x00\xdb\xbb\xbb\xdc\xbc7~\x9e_$Y\xb0\xf2\xe6\xfd\x11\x9fO\xb1w7\xdb\x0d\xbf,\x12z\xddG\xa4\xa0\xbb\x12\x93\x8b\x8d\x94\xcfu\xc0\xd7\xb1\x08\"8\xf8\x0b\x0ea+|q\xf3\xdd_\xe8\xfdkz\xc2z\x88\xa7\x07\xdd\xe7C\xf6\x85>\x84^\x9e\x83,\xe4\xa1\nf\xda[\xd5\xe0\"\xc8\x8a\x0dF\xf4\xda\x12\x11\xb6\xe4\x94\xf8\x19\xc9\xf8\xbdj\x82\xf7\xdf\xe9\xc6\xc3\xe1\xdd\xea\xca\xbb\xf1u\x87\xd7B\xf0\xd9]u7\xba\xe6\xee\xf6\x8ac\x16\x89\x16.\xcf\xe7\x86\"\x87_m\xab\"\x9c\xbb@6w\x81h\x86#\x99\x01\x08\xc6\xe8\x7fl\xda\xa9a\x08\x81,\xfb\xeb\xd4\x11\xab\x12\x0c\xf6\xfe\xed\xd1\xd1\x1b\xccLK\xe2\x82\xcbR'P\xc6y\x99\xa6IV\x90\x80IR\x08\xa5\x97\xac\xffh\xc1:\xa4\xb0N\x7f\xddN\xfc[\x0f\xaf\x16\x017W8\xed\xb3e\x919\xf6.{\xd1\x002\xb9)c4r\xc6\xab7-\x98\xf4\x1b\xcf\xb4\xab\xccLH_+D\x0b\xb5\x1e\xd5$3c33\xf1e\x95\x82\x92\xaf\x1d\xcf\xe9\xc3\xc4e\xfd\x02$w\xb3\x00\x9d\x99\xa8\xb2\x92\x1b\xb3\xbe\xd1;'O}J\xe3\xd6\xab\xa7\x96\x1e*s\x9d\xd1\x01\x9d\x99\x00\xca\xb4\x9cd\xc8r2Q\xbby9\xd9\xc5=h9\xd9\xeau\x86l\x17\xd5\xec\x15\x06\xb7\xf54\xe5\x15\x87\x9e\x94\xbf\xe2\x11\xa4E\xefT3\x96g\xbe\x17r\xe2\x95\xa7*\x0f\xdbp\xdbK\xd0\x90\xd5\xd0\xa0\x1fL\x15\xe9G\x0d0tM\xb4k\xa9r\xbc\xfa\xf4\x07q\x05LT-\xa7j\xe4\x03\x82\xc8\x19h;\xe5)T\xc7\xa9Q\x07\x8d\xcb\xebxn\xd2\xd5\xe17\x12\x08B\x87\xa0\xba\xbd\xfa\xf2ws\xf6MZY~\xfbp\x03\x85\x82\xde\xaaYGW\xa7\x06 \x96\xf7\x95R>k\xf1\x80$\xa1\xe7\xbc\x8d+u\xe5;pKo\xea\xa2\x11[p\xb8;t\xdb\xa1\xba\x9eT6(\xc2\x9b\xd6\xa3Z4\xa4*U\xef\xfe\x8d\xe2Yw\xe5J\xffhB\x83\xed-\xbd\xd4`\xab\xc3\xd3\x87UQ\xc7\xad\xd9\xaf\x8a\x1e\xe8d\x07\xdb[\x0fu\xd2\x83\xedme\x8ckV\xf4yX\xf2\xc9\xfb\xd9lHX\x8dHym\x9aSyR\x16\x8b\xe7\x05YJ\xb9\xc7\x9b\x15\xea\xec\x0c\x93ZR\xd0\xacR\xa7\xa26\xa6<%3\x1e\xb6\xd0\x9ba?\x98\x90\xeb\xeb\xab\xe7\x01\x89\x8b\xb0\xc0\xa06b\x08\x7f&W\xa8*\xc2\xbe;\x8db`mQ\xf5i\x12\xe7\xe5\x92\xe4?0\x01\xd1JB\xfb\xdea\x17\x8aa\x8b\x0eQX\xe0\xd8Ek\xd0\x9a\xe12_\xcf#\xfft\xd0\x00\x05\n\x97\xd2\xf2\xb1\xbc\x0f\xb0\x8f\xd1\xe0z-%\xea\x0f\xbf\x0f\xf3\x10\x85'k\x9bj*\x8d>\x14FN\xfd\xd9\xfb\xba\xb2:\x1c\x14\xa2QK\xd4^uP\xdd^\x0cCR\xcd\xc00(FO\xab\xd7\xde\xec\xc2\xa5\x98\xbbzT\xca5U\xf6\xa8A\x1f\xf0\xb9j9\xf4\xbb04z\x04\xd3n%\xf1Qv\x95\x94\x05:\x07\xeb+'\xbc2\xf3g\xee\xa9\x1cr\xbd\x99X{}M\x96\xe5\xd2\x8f\xa2\xe4\xe2(\xbbz^\xbc.\x0d\x96P,\x87e\xc1\xeb\x1d\xc4\xfei\xa4\"\xd5\xc4\x83\xf1\x1f\xbc\xb9A\x0b\x12\xad\x10\x0e#\xa8\xebb\x1ag}\xcd\x05\xd6\x1c\x18L\xf6\xbc\xaa\xdc\x1b\x1fv\xc9\xb6`H(\xd9\xb3\xaa\xea\x80!\\UZ\xce\x97\xa8\xc5\xd4\xd7<\xad\x06\xfb\xc6\xa8\x13=a\xdd\x0b\xad\x8e\xbe\xe2\x05\x86e\xaeQf\x8f\xc3\xd8\x01\xab. \xa5?\xd2\xc8%\xfb\x80\x07\x85;BZZ_\xfb\x90\xd5~Z\xa1\xca\x1e\x0f\xb0\xa7\xac\xfe\xdb\xdaM\xbc\xef\x8b\xf7\xb0\x07%\xa5m\x0c>\x7fO(Q\xe5\x859e\xbe\xf4\xb5^\xc3\x1e\x9c0\x16ArS7\xcd\xee\x0d\xec\xc1\xa9\x97G\xe1\x8cP\x9c\xb51rx\x82\xef\xc6\xf7F\xe5\xdf\x8dS\xad\x1a\xb4oZ\xcd\xcd\xc7\xe8\xacO\x05w'}\x0eP\xf5\xdd\xb8\x9f\xd5\x838T>~\x155\xd3\xcc\x1c\xac\xfdX# \x02\xc5l\xc3\x82,\xc1\x82u\x9e}\x8b\xd9\x93v\xae^\n\xf7\x96\x8f\xaa\x1b]2S\xc3\xca\xac\xa0\x13\x1c\xa6\x04\xd5\xf6\xc4#2W>F\xf5ZQv\x86\x1f\xba\x9a\x9er\x0c\xd9x?\xd1~J\x83\xf9h\xdb\xd9\"\xb9\xfe17\xb3F\xedR\xcce\x17\xcd\x9bu-\x1c\x98\x06J\x18\x0d\xa2\x14\x8b\x88\xa7A3\x193=6H1]r 9K\xb3\xf1\xb4\xdd\x02*\xe5\xf5\xaf\x1b\x1e\x10r=\xf4fI\x19\x17\xf6\xad\xceD\x0b\x1c#2\xa0cmg\"7\xcf\xb0\xee$\xc4\xb8zO\x14\xe7W\xa0\xa6\xaf\x96\x0d\xa8\xb3\x18<\xe2Y\x12\xc1,\x89N\xd8\x85\x03\x8d\xdd\x8aN\xd0IK7\x13\xeb\x15\xbap}\x8aq\xc8nO\xda\xe1<\x93}\xa3\x1c\xe3\xb8\x1a\x99\x94\x06\x99P\x82\x8c:%\x9f \xee7\x9fV]\xbd\xf4S/\xcc_\xfa)\xf3\x17R\xd8\x1f\xd2\xe7\xda\x0e\xa5\x8e\x07&o\xd2\xcd\xe7\xa2\xcf\x8fh\x1e\x1bc\x95@G\xcaj\x88ZB\x1fA\xc1O\xe0\x94\xd1\x80}\xd9\x84j\xb6g\x02\x06\xfe\x80>\x99\x7f\x81W\xe6\x04z\xe2T\xa4\xac\xd6\xa2F]?\x84\xc8\x82\xf8\xb5|\xc9\xbe\xc2\xf4%\xc6v\x98\xdb\x94\xec\x94h\xae\xdf\xcc\x04\xd4\xe7\xa3#\x7f!\xa4H\xf2\x97-QV\xff\xbaK\xb2t\x03\x07%jsNo\x02\xe7}\x8b)\xb8\xb7 \xf4\x04\xd7\xaeBEN\xe0\xbd\xb6\xa2.^h#;\x1c\x06\xd8\xbb\x0b,\x7f\x13\xe31m\xc7i}\xdd\xbfJ m\x90o0\x01\xcbj\xdc\x9bm\xb2\xe6\x8e\xee\xad\x8a\"\xab\xef.\xb8\xcbY\x1e\x1a\x07\":\x9f\xf0\xb0\xe2\x98Z\xb2K\xb8\x1a\x0e\x8a\x8c!\x14,c\x1f\xc1y]-\xf5\x13\xdb\xa1\xa4\xe2\xeb:t\xab\x9e9\xb8\x93\x95\xff\x87d/oJ\x0f\xd7\xe0}\x82w=\xa3\xda_\xd7r\x01\x8c7\x80; \xfd\xa9\xbd\x81\xb9$\x03#%\x1a \x83\xa6\x87\xb1\xae\xda\xa5iN\\\xe6y&\xe2\xfb>\xade4\xdc\xff\xe8\xccmk\x8a\xafL + y\xf2 \xf05\x10\xe9\x00\x1c\xef=\xb9\xc2\x1b\xdfH\xa8\xf3\x8b\xa1_\xd8/\x9e\xa5\x97\x93\xe2mg\x06\x03r\x1c\x8bh\xf8fd\x0dm\xdcn\xacmr\x0f\x1e\xc6\xfeI\xd1<\xf9\xd2m\xa0\x06Zw\xcaM@r\x93\x83t\x17\xb8\xf1\xa9\xd1,\xb7Blo\xf4+\xd2\x08\xfc\xf8zP\xbd\xef[\xe0\\\xbd3\x01s\x9d\xf8\xa1/\xf9\xaf|i\xaf\x06\xc1\x03\xdc\xdc\xb5\xa6T\xedG\xa85W\x9be?\x84\x03W0\xcck\xea\xdb\x8e)\x0f\x19C\xe3\n3D\x9d\x12\x0f'\xb5\xe5sY\x0dr\xc0\xa9\x84\xd5h)\xf1\xf0\xc3\x9c\xd0^\x9f\xc7L5\xd4\xfba_\xa4\x90\xc1\x88g\x95 ~Fh\xa7F\x97\xab_\x03Z|t\x03\x8bo\x95\xa5\xf7\xb9\xe8M\x1dD\xb6%\xa9\xe9\xcb\xb5\xd4\x12\x01\xf5Uoi\xb8\xba\xda\xcd\x86\xbe\xac\xab\x92\x95\x94\xdb\x13\x98\xd6!SZ\xf1h\xe9\xaa\x06\x06\x1b\xaf\xf3\xcf\xd0\xa8\xc6e\xa6\x0b\x1d\x03\x16\xcc)\x95\xc1\x1e$H\xecdM\xd3\x91\xccl:\xd2\xf4\x93k\x81\xac_[\xe8\x89W\xab\x98)\x0e4\x94SZ\x83\x85\x83\x84\x9a\xbaZ\\?\xadod\xe9G\xea$\xedyq\x15\x11\x9de)%\xfb\xcf\xb2\xa4\x8c\x83\xa7I\x84\x19\xdc\xff\x7f\x0f\x1e\x9e\xce7\xb7\xbb\xf7t\xeb\xe4\x19\xc6\x92fj\x19\x9dL\"\x9c3\x1bx\xab\xdd\xa8E\x17\xdf\x92O\xfegj\x0d\xd6\x03E\xd9\x10(\xd2\xd8K5\x0dj?\xcf\xe9\x07\xdax\x16\x81\xce\x18.\xd0\x19\xc3\x05:c\xb8@g\x0c\x17\xacf\x0c\x17\xa8\x8d\xe1\x82\xda\x18\xae\xebd\x93r\x0f\x81-\xa5\xb1[\xf0\xe9\x8d\xdd\xcc)\xfe$c7\x15\xed'\x19\xbd(L\xde:\x9e\xc2\x83M\xdbn\x95Q\xf8\xf31\xbf\xe93\xae)jO\xe0\x1es\x11JPO-t\xde\xd98M.\xadc\x03}O!L\xeb%\xcc\xd7i\x8d\xf9M\x88\xe0\xc2\"\xeeX\x9a\x91\x99_\x08i\x80\x1dsI\x8e\\\xc0.\xd7>U\xda0\x86\x8e\xcd\xa7n}\xe3\xc2\xcf\xe20>3\x89\xffE\xdd\x89uW|e\xec\xfd\x94\x84\xb1m\x81^\xe8\x91\xe8{J\xbd\x97t\x16\x1d\xfa\xf3\x97kW\x86\x01\xc3Pd\xb9\xb9\xc9\xb6\x88\xa4\x94#5d\x0b#\x97\xa9\x1f\x07\xcfX\xbd\xbaoOzO\xcf\x9b:\x01\xd4\xcd\x1c!\xfb\x1c \x19_\xa6\xbf\xb3\x16\x9f\xe75\xf4\xef\x0e\x1a\x9f\xad\x83\x86\xc15C\xaf\xa8\x890\x91c\x97\x89\x02~\x93\x87\xde<\xc9\x96\xbe\xa2_\xee\x92\xc1\x03\x9a\xab\xfd1\x84K\xd7\xda\xde\x1eD\x18\xd9\xfb4\x8c\xfd\xec\x8a\xbd\xc1\xecB\xd6\xa9\x9f\x93\xddm\xf1F\xef\xa9\xc1@_\xef\xd2\xa0\xf4\xe4\xe0\x01\x12\xe7\xa12\xdd\x90\x84\xeaJ\x1eS\n\xf6\xc1\n\xe3s?\n\x03\x8b\xc9\xe0\xbbm\x86E\xd4\xfc\xa2\xd4\xd4\\E$\x9a\xdbU\xcaK:\xda|\xba\xa9\x08\xd2\xaf\x90\x07\x04a\xce\xd9\xdc\xc2\x0b\xf3g\xfc\xaf\xe6a\xf8\xcch{\xb7\xca\xbd\xdfL\xef\x0duR~\xe1\xe8\x9e+\xde\xd5u3\x92\xa7I\x9c\x13I\xea\x01R\xa6\\\xcd\xebJ\xde\xc3\xdbnEN\xd2\xb9\xcb\xc6\xf6}\x05\xd6\xd3\"\xb7P\x8b\xdc\x8c\x84R\x15\xf0\xacP\x06<\x8b\xab\x80g\x94\x88\xccX\xc0\xb3\x0c\xbe\x82\xe2\x11d\xeb\xeb\x0e\xc4\xd3\xac\x19\xf0,\xd3\x07<\xab\x15\xf0&\x92\xadJzwx\x95\x17di;M\xdb\\\xfc\xeb\xbb\x9cN\xc7HW1Z\x96\xd9e:v\xc6r\xbf2j\x96\xad8?\xde\x0d^L<\xad\xdb\xf6\x0f\xdd_\x8a\x8d\x0c\xcd\xd1J\x854\xb6\x80}\xc0\xd4\x18\xcd\x06\xacc`\x81t\x9b/\x95x\x0e)\xd5\xe7\xb1\x1d\xf3\xec\x05-XW\xc0]kl\n\x03\x88V\xd3Sag\xfa\xcc/|\x8b}\xe22\x85\x03\xcbZr\x8c}\xb78YWw\x18\xee\xaa\xffn\xe3\xa6\x81\xa8N\xeb\xdd\x8d\xa4\xd3\xba~(j\x84\xd2?\x14q\x1eT\xae\xcc\x98\xb8\xa1\xbe\xf0\x84\x0f\xb3\xd6\xc9:\x91P\x9b\x9are~\x00Ul*\xc59\xc6\x80\xa2\xfb0\x0d\x11|;s\xc2\x98\xcf.\xc4\x02\x94\xf5\x15\x9a\xe7\x0bH\x94\x13\x15S\x8b\xbc\x96\xa6\x9d\xa2\xdb\x8ei\x1b\xb3a{\x93\x0f?\xc8\x9f\xc9\xa6\xc4C6\xc5\xbc#\x03\xb7#6n\xc7\n{\x11W\xaa\xb4\xcc{\x9dq\x17\xf5\xd4\xb1\x1d\xe5\xd6t.\xed!\xfb\xe3Br\xbb\x9d {w\xc6\xef\xdb\x99\x84\xc5\xddeq>\xf7k\x84\xe2\x9b6\x8a%#\x17\xa8G_M\xb5e\x08Mn\x9d\x82\xa8\xa7\x89G\x9de\xa3\xb4}\xa2\xbcrl\xdah\xac\xd9\xb6\x81\xb1\xbai\xeb\xa5\x97\x914\xf2g\xc4\x8e\xc9\x05\xbc%g\x07\x97\xa9m\xfdb\xc1:`D\xc6k\xcb\x05\xeb\xccr:*9\n\x11\xa5\x04\x1f\xf8\xf3\xf7\xa5+\x95\xca\x8e\xd2\x8e\xedqG\n\x1a\xf2\x92Q'4\x0fSX\x8c\xb7v\x95T]\xf9;\xb2\xac\x14\xfb\xfer\xed\xb6\xa5\x82\x99\x0b\xbe\xf7\xee\xcd\xb3'G\x07'\x87\x07/\x0e\x9e\x1e\x1d<;9}\xfd\xea\xe8\xe0\xd5\xd1\xc9\xd1\xdf\xde\xfc\xfbZ\xaa\x88\xe0\xd5\x16\xf5\xf0\xcd\xebW\x87\x07\xbf\xcf\xaa\xeadR\xaa\x98\xac=\xeb\x91\xb8\x10\xeaH\xf1U\x16\x84a\xaf\x93\xef\x9f\xbc}\xfe\xe4\xeb\x17\x07w{du$\xc4 \x0c\x16{\xef\x89\xc2\xa8\xc5\x17K\xad\x069 \xef)\xef\xfe\xcc\x85\xd0H\x11b\x05\xe3V\x94.\xf8\xcd\xf5\xcdnq%\xd72\x8fQ[\xbd\x97\xf0\xd7;\x0f\xa4\xfb6\xa1\xcb\x82y\xf4\x92\xec\xc0\x9f-l\xbdh\x01\xe9>\xef^\x18\x07\xe4\xd2\xfb)gr?-\xd5Gw4\xb1U1\"\x88G.\xd3$+\xf2)#\x80R?\x9f\xf9\xd1S?'\xdf\x84\x11\xa1\xdb\xe8\xd8\x85s\x8c\x1b#.\xd1}\xe9w\xdbAH\xba~\x07-\\loo\xefR\xb2H\x8c\x03\xd7eg\xb43\xe8k\xc3\xb2\x0b\x1b\x8d\xad\xb1L\xd0\xd4\x11\xbd\xecU\x0c5*Z#\x93\xa6W P\xdfd\xc92\xcc\x91r\x89\xed\xed\x9d\xfb\x8e\x0b\x87H\x91\xd7\xa65^^\xf8Y\x91\xff\x102\x0dIlo?\xd8\x1d4\xc3\xd8~8FM\xef\xc3\x07\x9dU\xda\xde\x19\xd6F\x1fpno?TB\xe7\xf6\x8e\xca\xc0%\xb6\xef\xb7_3b\xef\xfeHZ\xe9\xe6H\xc7[\xf7\x1d\x1b\x05n.X\xf8\xaf\xd5\x83\x87P\xbbt\x82\xd2;\x9b\x08'\xb3\x13\xda\xff\xa6\xf8\xe3=ES\xf5~\x18\x92x4T\xa6'\n!|\x15\xac\xe0Da\xd7\x18W\x85\xe1\xfa\xba\x12{\xac\x11\xdcTxL\x19\x94J\x9cm\xd7s\x10\xa2\xb9\xc4\x1e\xa1MzB\x0f\x9bE\x0f;\x8b\xd3\xc6\x8d\x0cYZ\xd9\xfa\x1d\x992\x99C\xec\xe2O\x89;\xbav\xab\xcah]\xf3D\x08*Q\xd7\xc0W:\xb3Y\x17\x0e\xfe\xac\xabg\xb6E\xe2\"\x0b\x890\x9co\xc3\x8f\xbc~\xf2F\xca\x0b\xac\x8e\xd0\xd8\xfb\xa5j\xaf\xf9*\xaaP\x17\x8b\xb9\xda\xdd\x93 \x89)\xdb\xb2f\xa6\xfdoy.F;\xeas\xf1\xb0\x1d\x95\x91\x1d\x8b\x87m\xc1\xb6\x8f\x9c\xc6#\xe9,\xeflb4\xf3\xd8\x1e=tl+,H\xe6\x17\x98CV\x0f\xbb|q(,\xd5\xb3k\xa1\x82>y\x1b\xa9\x11\x11\xc6\xef\xf6U:\x9e\x98\\\x16\x142Gn;u\x00\xed.\xc4\xb6)+\x0b\xcf\xaba\xaf\xb6\xdc\x12\xc2Q\xdf\x86[\xbb\xeau\xdd\xd5\xe2\x95\xedm\x07\xf6\x95\x9coHr\xe81@N\xecv\xa2\xa1Jk\x10\xbb\xb8y!\xaa\x07\x90\xda\xadT\x079S\x16\x94\xf0\x18\xf2G\x0ed\xde\xdc&\\\x182\xcd\xd7\xd7\x8f](\xa6q[\x08!\xa8\x8c\x9b.\xd8\xfd\x91\x9a|\x18\xa9!q{g[\xb3duw\x1a8\xab)\x0e\x96wFGQ\x94l%\xf4q-#$9\x84\xcaES U\xa3\x14\x1c#\x05iBI\x1cv\xa9\xc2\xda\x9e\xde\xb5\x117\xed\x11D\xf0\x18f\x8f\xf46\xc0\xb45\x9bne>\x9d\xad\xaf\x1f;\xb4\xcd\xd2\xa9\xcdU:\x1f2\xe1S\x7f\x970[_\xef\xe9\x16\xaf\x87\x19\x841\xe4Ho\xe4\xd3\xd91\x0b+\xea\xd4r\x0f\xac\xf2\xe1\x03j\xa2\xaak\xe5\xcb/a\xa3\x19\xbbhE\x1c'a\xb3]\xd5\xa9{\xe9\x17\x0bo\xe9_v\xc1\x88\x95\x84q\x1f \xe9\x11\xba\xcd\xb0\x0dq\x1c\xf8\n6a\x9f\x9e8X\xa7C\xdc\xa4\x97 C)7F\"\xea\xf9P\xac\xbds'\xc0\xaf\x83\xfc\x10\x83\xb8SHbD\x9eM k\x0d|\xb3#\xa2\xf3k\x8dPp\xc8\x0e\x88B+\xc1\xc6\x94\xe3\xda}\xf8\x009%/\"\x14\x87\xf1X\xb4\x9c\x9a\x9d\x80\x8dr8o\xb6\xf0\xb3\xa7I@\x9e\x14v\x8ek\xbe\xb33~\xb8K\xbf\x0d\xe11\xec\xecn\x8d\x1e\xb2\x86\xd6a\x84\xe0\x87\xb6\x04\xb6\xdf\xf9\x98V`\x0d\xecn\x8d\xb1s\x9f6p\x7fk{\x8b\xf7\xcf\xeacGt'a\xc2\xdf2/\xbd\xdc\xc5N\xc6\xb4\xcc\x87\x0d\xde\xcc:\x1d\xe7\x06\x1f\xd4W_\xc1h\xd3\x81u\xd8\xdd\xd9\xd9\xda\xbd\x1b\x08\xef\xdc\x1f\x1c vu\xd8\x90\x02\x8b\x83\x12e~\xa5\x0d\x8a*\xdc\xbd7\x90\x19\x13\x1f\xb6\xc4\xf0\xc5\"K.\x802\xef\x98%\x1dO\x80\x05a\x0eqR\x00R\x00\xa7\x11Y\xd3X~dv\xc1\xa2\xf0\x11g\xc5sB/\x81\x07\xc88\x8c\xb7\xb7\xf1\xdf\xed\xdd\x87\xec\xdf\xfb[\xec\xdf\x07\xfc\xfd\x83\x9d\x0eg\xb1\xbb\xe9\x08\xaefHg\xbd\x84\xd4\xaejgd\xd2(\x99\xc6\xf6\xe8\xbec[E\xc2N\xd5\x91\x7ff!\xdbi\xfdlQVn\x9d\x82\xfc\xda\x1eX\xd3\x04o{\xf8\xf9\xd8b\x0c\xd7\xfd-\xc7\xe6\x14@\xed\xc9\x00UCV?mU\xb5\x89\xe9j\x90l\xa7\x90i\x1dK\x1ah\x0c\xa94d-\xe4\x85\\\xa3\x1c\xfe\xa6\xc32\xac\xd8\xa3\xcdQ\xbf\x0d\xf5}:I\xb5(\x9f\xae\xe3\x03\x87Y\x1e:.X\xbe\xd2\xfe\x10\x83ik{i\xf7\xd6)l\x99\x088\x9e_\xaf\xc1\xa0\xf9KDK?\x11\xa2\xb8;0)\x0d\xbb4\xc4\xd5\xf8\xa8s\x0c\xd5z0Le#\x9d\xc3*\x02\xb6\xcdTG\x02$\xd8\x86d6\x13U\x89\xf3U\xf5\xa7\xd2\xb0\xe9\x1bE\x1e\xe5\xf5|\xf56\xd7>\xcep\xdb\xf8\xc6z\xea\xc7\xff\xb1\x80Y\x12\x9f\x93\xac\x00\x0e\xe9E\x02i\x16.\xc3\"<'\x8c\xcdZ\x95\x9a\xef;\xf3\xdb\xbbm\xc91\xc3\xc6\xe3\xed-%\xcd:RJ\x15Z\xec\xd3\x03\xc1>\xdd\xff\xef\x99}\xd2\xb0\xa5\xdb\xbb\xea\x95\x1dw\xc48>\xc7\xca\x94 }~p\xf2\xe6\xed\xeb\xa3\xd7\xed\x80\x15e\x9b\xdfo\x16\xb7\xc5\x01\x9d\xf58g\xb9+\x0b\xde\x15E\\\xe1<3D\xc6@+\x0c-5\x84$w\xe1\xa1S\x90\x17\x84y\x1a\xf9W\xf4v\x88\x93\x18\xf3E\xdb\xe3\x9d\x11\x9a\xf5\x938x\xba\x08\xa3\x00Y\xb7\xc2\xcb3\xcacX?\xf9\xe7>\xf3\xe9\x9dXU\x16J\xee\xfb\xf7C\x18\x07\xc9\x85\x17$3\x14\xa18^\x92\x92\xd8F\x18\xb9\xc8\xc2\x82\xd8\xd6W\xec\xd3\xc7\xa2\x8a\xf7\xcd\x1eC\xd1_\xfdx\x8f\x17\xa1j\xd7\x9bEI\x8e\xe9\x0ds<\xc1\xdf<\x82lc\xe3\x91\x03\x01\x89HA \xaf\x01i\x1aN\xb3c\xbdMYn\xb7`H\x8dI\xf9E\xc1,8)\x9dfD\xad\x889\x95tF\\F\x11J\x90)\x15g\x97-x'\x0ecpcrA\xf9\xbef1s\xff\x8aYZ^\x82\xa6g\x98\xd5\xc2qei\xab\x90p%v|+\x9a\x7f\xa46\x1e\xec\x9c\x08\x0e\xf9\xdb\x0f\xf4\x94\x1f\xbd\x98\xff{\x90\x1d\x8cF\x0f\xd4d\xf1\xb8\x8d\xa0\xb9\xf0`w\xd7\xb1\xd7\xda\x02\x075\xca\xb8\xc1\xfd\xce\x97\xa8\xe4\x84t\x17\x17\xe0\"u_Sfiz\xacX\xf3\x98\xf2\xd5\xa5\xc3\xa4\x04>\x8a\xf31%<^\x9b\x91\x88,\xa4\xf8\xf0\x11\x14BX\xcb\xf7\x03\xbf\xa3\xa8\x01w\x83\xb9\xa8\xfc\xa7\xd0\x8e\xb0\xb5\x0f\x1f\xea\xd6\xd4[\x14\xddt\x8b\x1e>\xd4\xac$\x83N\xdb\xfa\xd9r\xd0\xd5\x82\xd2\x81\xcf\xf3\x83\xb8\\2\xbe\xc1\x96`\x18L\xe6\xd1\x82\xd2=\xac\x93\x83\xd0s\x8d\xe6;y\x1a\x85\x85ma\x8e}\xde!\xb9\xf9 \xed@\x95\xd0ti.\xa7m\xdd\xdc{'\xd3\xe0\xd6\xff]T\xf5\xdf\x92\xa8J\x83\xb2\xb6w\xdb\xef\xc3\x01\x94\x8c__\x94\xd5\xc5e\xbcN\xcfH\xf1FT|=o^\xab\x1aX$\x02\x9d\x01fp\x0e\xf1dMQ\x1b\xad\xa2\xf0)\xa9\x90\xc4y\x91\x95\xb3\"\xc9\xd0\xe4 \xc28/\xfcx\xd6-\xddo\xfe-\xdd\xbe\x93\xe6g\x1c\x0f\xec\x83\xdf6\x00_q\xfdw\xb6nz&9\xfe\xc8V\x17XT\xf7'g\x1f(;P\xb1\x0c\x0f( \xcd\x98\xca-\xc7\x15\xde\xf0[\xfc\x82E\xc6\x80'\x8f\xb5G\x9bc\xc7\xe5>\xb5\x94Z\xc0\x83\x1b\xb5\xb8\x05\xf6\xaa!kp\xd1s6\x17\xba\xb3\xa0\x13m\xe1\xe9\xe1\xe1\xdb2\"/\xc2\\\x11\xec\xe0\xe9\xe1\xe1!%M\x9f\x91Y\xe4\xb3x\xd3\xdd\x80 O\x0f\x0f\xd1\x14\x817\xd1.\x8dB\x12\x17o\xc9\xacP\x97?{\xfd\xd2X\xc8\xe6\xa2->J\xde\x93X=\xf8g~\xe1\x1fe~\x9c\xcfI\xf6\xbc Ku\x1b\xdf\x84\x91f\xe4\xdf\x1e\xbd|\xf1$\x8a\x9e&Q\xc4\"P\xa9\xab\xf4\x95\x7f\x93dK\xee\x85\xa4\xae\xc0\x9c%\xb4U^\x92 \xf4\xd53|\x19. e\x89qs\xbb_\xbe\xf2\x97$x\x95\x04\xe4\xa5\x9f*J\x93@\xb3\xebo\xfc0\x16\xe1O\xd4K\xf3&*\xcfB\xc5|\xd9{\xcdp\x0e\xbf\xff\xd3\x0b\xbc\x8a\xd4m\x1e~\xff\xa7W\xe5\xf2\x94d\xda\xe27\x98%X\x03\x0b\xb4< c\xcd\x80\x0f\xbf\xff\x93 \x90\x0e\xbf\xff\x13\x83\x94$\xd3\x80\xc9!f\\\xfb\xba\x9c\xcf\xb5\x03\xa4\x07\xe5pAH\xa1^\xd5#rY\x1ce\xfe\xec\xfdS\xddQ\xa9jh\x8a\x93rV\xad]Ur\xed\xa2+zb\x07\x945a\x94\xf89|\x05\x0b\xc1s\xc2\xf9\xfa\xba\x8aZ]\xba\x18\xc9~1=W\x18\xbcQ&4\x98\x9e)JN\x91\xacW\x95\x9c\xc0\x1e\x9cR\xa4\x7f\xaa\xba\x90\x80_\xc5'H~\x9e\xd0\xfb\xf7\xc3\x07(\xed\x13\x17f.\xa4\x8e\x0b'\xd3y\xfdn\xee\xc2\x19E~\xd33\xca\x80\xa5.\xa8\xe2\xd2 r]\xd2[=s\xe0d\xba\xc4\xcfC\xfa\xf9\xd2\x85l\xba<\xae\xc5\x9b0\x14a\xf7\n\x804J\xcb\xed\xfbj\xbe\x03\x11w\xe3\xbd_Q\x94:&n\xbc\xbd\xfb\xefv%\xff8v%z\x82\xef\xbec[e\x9c\xcf\x92\x14\xbdU\xda$\\\"\xfc\xf5T\x07\xa6\x123@2\xcd\x8e\x99R`\xe7\x01\x1a\xaff.\xfc\xa2\x97\xf6u\x98\xfaiv<%\xf4\x18\xc9\xf6\xf0\xca\x99\xe8$\xfeF\xd8\xfb\x0c\xed\\\x84\xb1\xa9/(\xa9\xf1v[\xc2\x92W\xc4V\xe35\xa7\xb0\xc6\xaa\xb8%*\x8d\xcf\x9c5\xdf\x16\xd4\xb0p%\xf7\xb7[\xaf\x03\xdez\x1b\x85,8\ni\xd7?\xe7\xef\xdb\xf6\x10K\xd6\xebN\x1b\xb5\x9c\xf1\xf7[\x8e\x97\x93\xd6\xba_\xb1\xb6\x1elvb\xe1\x9dr`m\x8f\xea\x84\xb7\xd6\x1e\xd5\x05\x7f\xdf\x1e\xd5\x01R\x9a\x95\x8c\xbeYx\x89\x85i\x96\xccH\xde\xf2D?\xc4\"\xae\x98k\x16=\x85=\xb0\xf8Gx\xceg\xf6e\xab\xd7\xf7f\x89\xee\x13\xb4\xb0\xdd\x83So\xde,xM\x0f\xc4\x9aY\xda[dW\x1a\x9eW\xe0\xc8C/#y\x12\x9d\x13\xbb\xbdz\xf2\x83\x1e\x1aM\xf6g\x8f\x1ea\xa1\x1e\xccS2C\xfcr<(\x1b\x96x\x88\xfd\xde\x85\xf7z\xd6\xf7\xba\xcb\xd2\x83d\xc7\xf0\x14\xfdQU|\x1c\xdf\x8b\xb7\xe4'F\xd9\x1e\x9c\x93\xb8p\x98\x0fK\xb1 \xb1\xfd\xde\x919\xb4\xa2\xd3\xcd5\xcc\xfcb\xb6\x00\x9cCK\xf9\xd6\x06\xbf7\xbdsF\x15\xb5V\xa8\xbcf\xaf\xa5\xf4\xbb\xe6d*m\xb5\xcd\xe21\xd0a;8\x85\xe6h[\xe0r\xd4\x87\xed@\xe8\xb9\x88w\xa2\x95\x88\xd02\xc4\xb7\xea\x0d8\xe7\xb6\xcb\xc4;\x99\xa9k\\\xe95\xaa\xf2\xd3\xe0.\x89wr\xcex\xcb\x11`\x8c\x9a\x93\x9c\xb1\x97\x9b\x8c\xb5\xac\x05K}p\xc5\x85\x995\x02M`\x1f\n/y\x0f\x13(\xbc\xb9\x1f\xf6\x84@\x87*A\x14?\x1c\xfd\xd5#^\x9d\x02\\\x7fm\x9649H\x96~\x18\xab\x17P<\xfa\x13,?%\xa5?\x124\x1b\x19\xf3\xb5[PP\xf9 \x89)\xfck\x0fF\x8e+\xe2\xff\x94H\x81\xec\xa1I\xb5\x8d\x81*f\x1e\x89\x0b\x92\xd9\\\xa7P\xda\x19\xf2\xe8\x98\xa1\xd8#\x97aas\x06\x7fm\xd3au\xf6\xd0\x1b\x81\xdbX\xefCd\x1f\xd8\x16?w\x1b\xb3\x85\x1f\xc60\xbb\x9aE\xc4B\n\x08Ma\xde\xd8\x14\x82\xf7!d\xda\xd2\x18\xfdK\"Z\x9cc\xc9\x04\"[\x91\x1dP~\x1a\xe7\xb2wYp\xfck>\x9f\x1f\x9fDd\xf7\x84\xdf\xbc6\xe0#\x88k\xd9t\xf8\xc8\x01\xdf\x8e\xa7\xe1\xfaz[9 ?\xf4\x90\xa0\x90\xdc\xad\x8e\xd5\xc8\x05\xd42\xaf\x89}z\xa9\x1b\x93\"z\xe6\xb5\xe9\xf8\xbf\xec\xc5Egl\xf1s\x03\xfd,\x1eD[(\xc4\xe5f\xfbxB\xb5\x13\xa5[\xfc\xbc\xa3\x80\xa9J\xe7\x14\x08(|\xc0C\xe0\xf0\xa3c\xea\xed\xa7\xde\xdeV\x85_54\xca\x80U-\xfa\xb7l7,\x01S\x05\x87\xa9\xaa\x02\xdf.v\x0b\x9b\x92u\x0e\x00'\x01J\xf4L\x0d>\xfa\xc6\x9dz\xd5\xbbv\xc2T\x8er\xaa\xddu)\xbc\x93\x00\xaf\x10\xfcA1\xbd\xcb\xd6\xa0\xf0N.hA\xe1x'\x94\xa2\xa7d\x85wB/\xc81\xfe\xf2\xc5W\xccG\xfdd\xc6\xed\x0d\xe9Eqd\x17(\xc40\x8e\xfc\xed\xb0\x91\xbb\x15o\xaeV\xf5\xac\xc5\xdeI\xa0\x03\x86\xb8\x9e\x14*\xcd\xf9\x9c4\xd7\xaf\xf9\xda\xa5\x9d\xb1\x1b\xb0:X\xf5\xe5\x073\xb4\xec9\xa5\xa7\x19\x89\x87\x00\xc2\"'\xd1\\\x97?\x8f>\xb8\xceo\xd0\xbcj\x7f(\xf1\x04\x12\xaf\xde\x7f\x17\x9e\\L\xc0\x90l\xb1\xaa\x16h\xd3\xb2\x8aGC\x95\x8bg\x18\xc5\"\x0c(\xe9}\xfc\x16/\x98\x11\xde\xcd\xaf\xf8\xef\xbb$\x03^\xb1\xbe\xb2\xde\xc0\xdb\x86\x9b\xdf\xa1wL\x05\xfe1\x03\xff\x11\x85\xef\xd8\x855\xddx\x87\x8d\x93\x8f\xcf<\x91\x01\xfb\xd7\xb3w\xd7\xda\xf9w\xe7\xdd\"2\xea\x1d\x7f\x8dg\xfd\xd0x`\x17<\x82\xe7\xa1\x0b\xe2PX.X'\x0b\xcbq1\xd4\xa9\x0bY\x9d\xc5\xbau*\xd4\xe0Cl\x04\x13\xd6n\x05)\xe2\xcf\x16r1.\xfa\xabf\xfe\xec\xe6\x97\xd5_\xd7.\xbb\xc4\xf5\x93d\xd2>A\xd9\xb1\xbf\xe4\x9b\x97\xbd\xc9e f h?\xfc\xeb\xbcSy!Wf\x84b= \xa7i\xdeco?\x189\xf6\xa1l[\xdb\x1e\x1f\x89\x07\x84\xfa\x17\xac\xdc\x13{)v\xcd\x9cS\xfc=\xec)\xd9T\xa6\x7f\xc6\xb3A\x19\xacf\xad\x9a3G\xba\x97br\xce\xfd \x19C\xefb\xfe\xe7\xa4\xb5&\xb3*\x07U\xb5\xc6\"Y\xcc\x89\xdf.\xcbi\xd9\x11\x9f\xc7\x1a\x05\x93Xp(\xcd}n\x9e#\x04\x97\xbe(v\x92\xc5\"\x13!\x88q\xeaa\x88kG{\xe5\xd41\xb9\x80\xecQ\x17\xba\x04U\xc8n\\\xfa\x86\xdf(\xa8'}\x8b \xd5GNU\x84Z\xe6=v2\xb0D\x86\xe6SoNwy\x88\xb2\x98\xe0\xcdv\x88\xdb\x89?}JA\x93\x0b\x16\xf4m\x82\n\xf5\xc6$\xe7\xf6\xdc\xfb\x13\xac\xc3\xdc\xfb\x01\xff\xff\x0d\xfc\x11\xd6^\xb7\x01\xf2\x8d \x8a\x0e\x1b\x1f3\x13S[\xc6\x15\xdc\xfe}\xec\xd8\xf2+\xa6v\x90L\xe0Y\xc7\x87\x8d.%|\xd3\x9e\x1b]\x9e\xbeM\x16\x04\xd2\x13\x15f\x02I\xf4\xb4\xe9V\xdc\xbe\xc3\x14\x16j@\xeb\xacS=\\\xbb\xa4+\xbc\xf6\xda1\x8e\x1a\xf7\xbbo\xd8|T\x17v)\x0eG\xb5o\x870\x81>\\\xd7\x19\xda\x9a\xfd\x9a\xc9\xeb\xb7\x1fl\x99\xa2\x85\x1ez\xcc\xea\xd9\xc3\x13d\xbf\x97\xc1\xc24-?\x8a\xfa\xa6$\x93\xaa\xea[\x8fa-\x9d\xf1\x10\x8b\x86`\x14\xdf$\xbc\x8a^d\x13\x0e\xe7T\x05\x1e\x9d\x1a\"4\x03o\xd2\x90$\x1f\xb8~m\xa4\xa7\xb1\xce).\xa7\xd7\xc8p9\xeb9\x0f\xb6\x14\xae\xaf\xf7S\x80\xe8!a\xe8\x1f\x90\x98F\xcc\xcbP =\x9b\xeb\xebn--\xa3\x10\x81(r\xf8\x08\x01;\xa6\xa4E.\x88\xf4iy\xcc0\xdf\xc6\x062\x18\x99\x1d\xf7Q\x85Z\xa6\x198\x98KM)\xeb]\xeb\x8f|\xe8\xa1-Ub\x87\xde\xf9\xd0\x8b%\xf3g\xbdg\xf7\xae\x00]\x0f\xc5\xc9\nP\xbc:luw\xbd>v`\x90\xe6i\x93\x08jw a;\x90\xd9\x89i\x07$\x14\x84?o\xa4\"dB\xaf\xf6\xd4\x91\xc7\xb4\x1b\xb6]\x05\x8a\xed\xb9\xaasmo\x0f\x98\x84\x07\xc2\xb8f\x0dk\xa7\x8f\x18\xd6\xc1\x9a@\x18\xcf\x92,\xa3\xb7u\x18\x9f'34K\xd2\xb9\x9a\xdd\xdc\xbe\xb8\xa3\x02\x14z~\xb5;\xf7\xf6}\x95\x9f\xbc\xc2\x86\xbb\xe4f\x01m\xcdc\xce\x9bi\xdb\x02F,\xb0W\xe3\xdd\xac\xe5C\xc2u\x1c\xa6\xdd\x98\xbb\x90\xaa\x08\xa8\xc0\x85\x85\x0b\xe7\xae\xb0\x07Ia\xbf_2\xd4Y\\\xf1\\\xa30Ze\xff|\xc5|Fq E-p\xeb\xd4;E\x13\x96\x0e\xdc(I\xe6\xb3\x9b\xfa!\xa20\xd5>sT\xf3C\x9dJ\x802|a\x9d\xe0<\x82\x00\x1e\xc3\xe9#8\xd5Y\x9a\xa2\x95\xe9\x92\x07\x8c\xbd\xb2}\x9b2#dzz\xecL7\x8f]XLG\x18+\xf0\xca\xc6wN\xed\xa7\xba\xc4\x9f\xb3\xca\x0cu\xd9<\x8ej\x13X\xa6\xf7\xc1da\xdcq\xea\x11\xaca\x97\xe7^L.\x0b\xdbq\xbc \x89\x89\xc6\x1a\xb7\x1alb\x9f\xbbp\xe5\xc2\x82\x07\x82\x82b\xd8\xd0\xae\x1d\xef\xeb\xb7\x07O\xfeL\xc9ezq\xbd=8z\xf7\xf6\x15\xec\xc1l\xb5C\xb6\xd3o%-\xe07\xe90\x90JFW\xe0:\xd8\x87\xc2\xa6\xf7\x14.\x7f\xcc\x97\xbfh_\\\x15\xafk\x8c,I<\xd6\xacB\xe6\x87\xe0'\xe1\xaf\x90\xa1\xd8\xb0rhs\xdb\xfa\xc6?4\x7f\x0d^\xab\xae!QR\x1b\x99Hf\xa0M@7Y\x98\x0c3\x1f\xe1+*\xcd\x11\xaf\x11;cv3L\x8c\x87\x86W\xd3\xe4\x98\x0b\xf5n&:\x8d\x1c/a\x98\xc3NuY\xa1f\x0b?\xf3g\x05\xc9\x9e\xf9\x85?Q\xba\x94q\xfb\x9c\xde\x85H\xbd\xc0/\xd0j\x8aNe\xde\x03\xdfJ$\\\xf5\xa1\x9a\x85'\xde\xdc.\xd0TOA\xf0a\x82\xb4\x12\xb9\xe0\xaeK\n\xac\x1aX\xa5\x90\xe3M\x88\xa7u\x14nLo\x18\x89\xfc\xa4%U\xed\xde\x7f\x82Y\x9b\xde?\x9ef\xc7m,\x1br\x16\xae\xef\xec'M3y`\x13`,\xd4\xac\xd3q H\x04\xe3\xaaB:\x1d\x1c\xc5\xd3\x12t\xfc\x01\xb8\xf3C#t\\fg\xde\x1bX\x87\xcc{kP1\xcd\xc3\xd8\x8f\xa2\xab\xa1\xd2w\x9f+\x8d\x93*j0\xe5\x88\xc5\x1f\x1a\xd1{\xacSr\xab\x92\xd9\xb4\xd5\xc7\xb1,\xa7\xd4\x1ab\xf3\xcfJ\xcchj;m\xbd\x8a\x89\xcc\xeal\xb4\xfc\xa8\x8c\xcb(\xebF\xa9\x8b\x8f<.\x86`V\x1b\x96^u\xf9\x11\x81\xb7\xebP\"\x02\xf7l\xb7\xc0\xf1\xd0\x00\x88E6\x18\x08\xf1\"\\\x84\xb9\x01\xdcB\xa5}\xad\xd0J\xc7\x1eACwn\x0b0\xa9\x953\x8e\x1d\xa3\xd2\xa4_M=dAc{\xfb\xc1}\xae\xa5\x7f\xc0\xff}\xd8\x8cj\xc7\xc3co?\xe4Q\xed\x1e\x8a\xf7;\xfc_\xfe\xfdC\xfe\xfdC\xf6\xfd\x0e%G\xf0\xdf\x11\xffw\xcc\xff\xdd\xe2\xffn\xf3\x7fw\xf8\xbf\xbb\xfc\xdf\xfb\xfc\xdf\x07\xfc_\xde\xde\x88\xb77\xe2\xed\x8dx{#\xde\xdeh[\x19e\x8f9\xdb\x0eY\x8b^0\x1aw\xc2x\x87U\x90J\xbc\x92\x9f\xf2\x10\x8f]\x94(WJ\x02\x82\xfe\xc1-\xc8CD\x88\xe6\x04k\xcc\xd0}\x84\xf1V\xaa\xa0\x19Ul\x91\x0e\x82\x94\x1b\xed\x83\xd0:o\x9f+\xb4\xdc8\xe9n\n?_$\xed{\x0c\xbeVL\xc0\xa2\xc2\xed\xc1z\x9d\xc8\xcf\xc78; \xc5'\xa3\xd1h{4\x1a9\"v>C\x18o\xfd\xf8\x8c\xebH\nYG\xe2\x03\xa6\xb3\x84Y\x12\x10H\xe9dtv\x96\\i]\xc0W,\xba%\xecc4 \x0cy\xca\xa2_\xae\x83m\x17\xb0\xb1\xc7\xca\x1dx\xfc\x18\x10~\n\xf8\x0f0\xda\x1co\xc3:\x8b\x99\xd9\x9b1\x17$\xfc\xcb\xb3\x0c[\xb7\xc3a\xbd`\xa6\x8b\x1b4\xda\xdcR`+\x0dPd\xfe\xc5pP`\xb15\xbc\xcc\xbf\xe0LiX\xcbnM\xe0A\x81\xa7d`\x12\xc3c(\x1f9\xc0-\xb9x\xe4\xd6bZ\xae\xaf\x1f;\x18F\xe2+&kiV\xa8\xc1\xa6<6X\xab\xf9w\xb3\xf4\xea\xeb\x83\xe2\xacM\xc7\xb6\x8a,\\Z&\x85y\x9b\x9bV-\xaa`\x059\x15\xb2u\xbb\x01\xf7\xc2\xca\x8e&\xd6\xdf\xa6:\xbc\xd4\xf6\xc3\xf6{\xba}\xd6\xd4\x82u\xf0YD\xce\xaeXS$\xdb\xfa\xff\xd3Z%\xff\xcf\xfac\x9b/\x8a\xea\xaau\xa5/\xda\xb5f\x03\xb8o\x90\x85\x12\x8aT\xb2\xc0\xc7\x1d\x0e#S\x04k\xb2\xe6O\xc9\xb1\xcd\xbc\xf3~\xfb\xf5\xff\xf8\xb7\xff\xc2\xe2\x9d\xf2\x9fX\xa6l\xe3Zs\x8b\xd3\xb5I\x98;s\x89J\xbe9\x86\xe3\xed0\xca\x807\xfe\x97_\x82\x9dLcZ;GWnA\xfbR\x94_\xca\x07\xb9e\xf9\xd2Z\x809\xec\xc1\xcc\xa3\xb0\xda\xc7\xa0\x81\x04\x8er0eT\x05\x8e\x803\xef6\xe1jE\x96]-w\xc1\xc2\xbc\xeccM\x85HTh\x11\x1ej\xc1\x82Z\x0b+\x8fT\xaem\xfdX\xfc\x18\xffx\xfe\xe3\xfc\xc7\x0c\xfe\xed_\xff\xeb\xff\xf5\xeb\x7f\xfd\xd7\xff\xf3\xb7_\x7f\xfd\xed\xd7\xff\xfc\xdb\xaf\xff\xc3o\xbf\xfe\x8f\xbf\xfd\xfa?\xfd\xf6\xeb\x7f\xf9\xed\xd7\xff\xf9\xb7_\xff\x97\xdf~\xfd_\x7f\xfb\xf5\x7f\xfb\xed\xd7\xff\xfd\xb7_\xff\x9f\xdf\xfe\xf3\xff\xfd\xff\xfe\xfa\xeb\x8f\xe5xs\xfc\x00\xff\xff\xf0\xc7rN\xe6sk\xc8\x19\xbb!M9\xde\xde\xc1(n-vF\x8f\x91g\xe2\x8a~\xd2{I\x0b\xd5q\xafm\xf3 $r\xc3 \xea\x02\x8a\x8d:\xe1%(n\xb1,\x8f\xc4\x01\xe6_Q1x\x14\xc8\xe9\xa7[\x8em\x89z\x96\x81\xa6\x11u\xfaVJ\\_\xa1X*\x17\xe4\xf6\x95\xe76V\xdcg\xf0\x18F\xb0/\xa5#\x1e\x1d\xd7\x06\xcc\xcaV2\x96\xf1\xc7\x1c\xd3\xacl\xe9Iy\xee\x1b\x11\xf9\xddN\xd0\xe493 \x18~j\x0d\xbc\x82O\xc7\xcdM\xe1\xd1\x0f\xb3DM \xf7\xdc)a\x03\xeaK\xbbd6\x15\xf9\xef\x02O\xf7\xc7J\xde_\x06\x8d0\x9eEe\xc0\x82]\xe8@C\xd4\xe9\x03\x8d\n\xed\xff\xa7D\x02\x8e\xba\x07\x0fS;\xbd\xc6\x08\x91\xab\x80\xc3\xed\x0ecc\x99\x06\xe3\x8e\x8c\xa4\xc4/&x\x83\xef:+v\xd9\xb7_\xa3\x91\x96\xb6\xb8\xa9\xb4\xb8\x0e\xdcO\x99`\x05x\xa3\xc0E\x91\x89>\xe4\xf1P[\"S\xf48\xe5a\xfaC\xd8\xdb\x83\x11\xdc\x83M\x05Ca=M\xca\xb8\xa8\x1d\xb7br\xe6\x17\xe19is\x12\x0f/\xc9\xdd\x0f\xbd(>\xc9\xd8\x93\xb8\x98%\xd1\xc78\xb2\xb4i:|\xd1\xfc\xc7<\xb6\xb4\xaf<\xfc\x99|\xbcY\xf0\xd6?\xe6$\xc2\xc2\x8f\xc2Y\xbe\xd2\x1c\x86L!\xfc\x14\x80\xb42\xf2\x19\xb4\xfa\x88\xf6\x17\x19\x99\x7f\xe4\xa5\xcf\x97~\x14\xad4\xfc!\xa3\x17\xad~\xf4\xc5\xa7\xef\xdf\xaf\x06\xfc\x83\xc6/\x9a\xfd\xf8\x13(O\xef~\xf4\xe5'\xc1\xfey\x99~\x84\xa1\xa7w4\xf4\xd8\x1e\x8d)\xb9\xbc\xf4\x8b\xd9\xc2rad\xae.\x0dfZ\xd5S\x8a?\xd5k\"\x1e\xc1\x19\x10\x93\x921\x91e\x0f(z\xa8\xd2\x99\xc5\xd3B\x9f\x19C2\xafO`_\xd8\xe11/\xaa \x9a\xc0q)o\xecL\x8bc!\xc8\xcf:qA >\xbe\xe1jrQ\xa3\xe5\xc2\xf8\x06\xeb\x99)<4`\xd0\x92\x86}K\xea7\x964\x93\x974\x1b\xb8\xa4\x12?\x91a\\\xb3\x04W\x95\xbd\xe1k\x19:,N\xd3\xdd\xadhN\xfc\xec\xdf\x01\xf4\xee\x963\x8d\xc2B \x9e\x1d\x03K\xfd: \x0dGl\x8fw\xda\xbe& D!\xdd\xd7L\xef\x86J\xb4\xae\x90\xc4\x9a\xa1\xf1\x8a\xe5\x9f\x9e\xce,\x9ew\xe2\x9e}\xea\xfc\xf1\x9eC\x99\xe3\x0f\x1f`\x1bu\x1e\x05\xc9\x8b\xba|\x7f\xe2\xdcsac$\xc2:\xd1zc\xac\xe7\x9f\xca\xb5|lH\xaa\xc4\x1a\xf3\xea:\xde\xbeC\xffkT\x92\xcb\x1d[*\xa3\xdc;-\xaf\x8a\xbd\xfd\xaaP\x05r\xe7\xdc\xf7Y\x12\xa8\xde\xb3\x9d\xfd\xfd{\x1e\xb9$3\xdb\xb2\xe8\x1c\x15P3DO\x02\x92\xad\x9a\xd0]\xaa\xe3\x06@\xd3'gOx!\xf14<\x95%\\;\x95\x8a\xfc\xedZ\"\xa7_\xab\x83\xe8\xe1\xe8\xd4\x9f\x9d3K\xff\xdc\x85\x08\xc3T\xcfY8}\x93\x93z\xc0B}\x86gq\x92\x91\xa7>\xc6\xf6\xb3B\x0b&\xf4\xda\x83uZ\xb6,\xa3\"\x8c\xc2\x18\x8b\x96\x8d\xa22\x0eQ\x11\xbf\x0fV\xd9(\xc8\x8bp\xf6\xfe\x8a\xbe\xbf\xe2\xef\xf5CX\x98}\xe4\xcf\x9b\xbbY\xc0>l\x8f\x1fn?\xdc\xbd?~\xb8\x83\xe6\xfe\x8f\x1f?65\x80\xd1g\xeb\x03O\xbc\x1c\x83\xa3\xbb\x10\xc0:Xg:\xfb\x01\x94\xfea\xd0\x06t\x8e\x90Z`J\xce%o\x876\xf2\x85\xbd\xbf\xf6\xe3\x8f\xb9c\xb9\x10\xa84\xd4\xd5\x83\xfe\xeeK\x06\x8b<\xbe\xe7\x9amG\x18y\x0cE\xcd\xb0\x0e\xf9t\xf3\xb8\x82\xf0\xc7\x80\xf1\xd5\xec\x94\x07?\xe12\xa5\x85+>p\x1c\x17\xd6\xd0\xb6\xbf!\xf1\xc2\xa4!\x9b\xc7\x95F.s\xcd\xe4O\xe3\xc1\xa9\xcf1.\x01\xcc\xe1\xab\xae\xe4{\x03\xc6\x8f`\xbe\xbe\xee\xc8;S\x8b\xd8\xe6h\xe8k\xe3\x8f=\xa5D\xbc\xf1\\;nw\xf0|9\xbe\xaaC0\xa2]\x00s\x14J\xe9\x07l%F\x0e\xcf.!-\x1b\x8b1\x1f\xb9\x90V\xad\xee\xc1\xb9\xe3|\x00\xbec,\xa3O{\xfb\xe8\xa0\xeb\xc1\xc19\xecC\xca\xcb6]8\xc7O:#hY.3\x8f\x06kS\xa0F!\xd3\xdct\xa4\x15\xb3\x07a\xb6\xe6\xa5\xd9FW\xb0\x0f\xd3c\x98\x08\x1cT g\xdb\xdc\xa0Z\xcc-\xd1\x08\x1a\xa2\xeb\x06d\xd5\x8d\x08\x01\x89\xac\x8ak\xb2*\xeb\x90U\xb1\x8a\xac\xcaV\xa5\x03\xcc\xf2\xfa\xd4\x8e\xed\xedQ[\xec\x9c\x88\x92q\xbb$\x14%;\xed\x12\x9f\x97\x8c\xee?h\x17\x95\xbchgk\xb3]\x94\xf3\xa2\xadNO\x11/\xb9?\xden\x17\xcdz\x03\xf7U)\x98\x88wrB\xf2\x97IPFD\x97C\x14$\x99\xff/\nW\x10\x8c\xbb\xc7r\xe2\xe9B\x99\xd5\xf9\xdex\x0c\x86v\x8a!o\xe1\xe7\xaf/b\x91\xbe\xb5\nC\x17s\x95\x0d3\xb6 \xdd\x84oP\x83\x10&\xa6\xf3\xcb\xa8\xe0\xa1\x99\x9a\xa0A7e\xbb\xb3Ts\xae|q\x1e\xfd\xa1z/\x96\x0eR-\x8b\xdaY;\xcc\xf4<\x18Y\xa3.E\x92\xd6Y0\xde\xdd\xd9\xdd\x1c\x05-E\x1b\xbdv\xad-o\xf4\xc0\x1b\xb7J\xe8}j\x9d\xfa\xf1OI\xab\xe0\x8c\x16\x1c\xfa\x85\x0b\xe3\x1dxR\x9e\xc1xs\xf4\x006\xefOv\xc6\x93\xf1.\xfc\xe9\xe5\x91t\x10\x86\xe9\ns\xb1\xf4\xde9\xc9\xf20\x89s\xbc*;/?|\x80_\xae]E\x89\x97_\xf8gg${\x17*\x9d\x97x\xb5 (\x02\xdd\x9e\x85\xc5[r\x1e\xb2\xf2\x85\xb2\xfcY\x98\x15W\x13\x08\xba\x85\xa7e\x18\x05G\xe1\x92\xe4\x85\xbfL'p\xd6\xad\xb2\xf4g\x8b0&\x93v\x0c\x85.\x07Ph\x1d\xaf\x82dy\x12\x06,\xcf\x94\x1ao\x06\xc9\xf2U\x12\x10S\x95<%\xb3\x89\xde\x88*\x8b&J5,/\xccMMG\xfeUR\x16\x13\xb0\xbe\xf6s\xf2\x02\xff\xd0\xb4\x14$\xb3\x83\xcb\xd4\x8f\xd9r[Q\x98\xebj.\xfd\xcbg,\xf5( \x8e\xfc3c\xff\xf30*Hf\xaa\x81\xe6\xa4~\x91d\xefp\x9e\x8b\xa2H\xf3\xc9\xbd{IL)^\x01=^\x98\xdc\xab*j\x86\xc5|\x97r\xfdB\xce\xca\xbcH\x96\xfar\x9eO\xf5uJX\xea\xaa\xe7A7\xa9N\xab.\xcfz\xf4\xac\xd4%\xbb\xaa\xea\x13\x92\xbe\x08\xe3\xf7a|\xa6\xaf\x94\xb1\xd6\x9e\xc7\x05\xc9f$-\x92\xacOc[\x7f\xc9\xb0\x97\xb2\x82f\xba\x19\xc9\xd3$\xce\xc9'\xea._$\x17\xe8\xd3M\x02\xbejj\x073\xa8q\xeb\xcb$ \xd1[\x12\x07$\xc3u\xb3\xc8\xa5\xbfL#\xa2\x83`\xe9+\x04\xe5\xe0\x19I\x8b\xc5\x04\xb4{R\xd7\xcf\x87|@\xa7ppY\x10<#\xb9~\x1fi\xbd\xa7\xc9r\x99\xc4\x83j\x97)\xc5\xc3$8,O\x97a\xc1\xa2M\xe4\x13\x98Zg\x04\xd5.i\xc9\xfeIr\xfc\x97e\xd1\xa5\xbf\x92\x94nU\x8e\xfa\x01\xe2\x07X\x89\xcb8\xad\"\xf3g\xc4\xd20\x9eiFrR\xd0>\"\x81\xb0u51C\x17\xad\xa9\xa9\x10\xc6a\x11\xfa\xd1!\xddX\xfd\xd1\x9a\xc7\x86c\x99,\xd3$\xa6|\xcb\xa4\xed<\x05jp\xa2\xfc?%\xd3\xe7^\xeag99D\xb9Y'M p\x82\x89x\x1c\x057\xf1:OF\xac)\xa5X?\xe5\xdd\xf8b\x8d\x1c\x9b\xdeq\x05\xd2\xde\xb1\xa2\xb7+\xed5\x91_\xe5\x05Y\xaa\xc8\x08\xf1T\xd8+\xf5\xf8\xcfU\x0eW\xb5M\xa9\xc7\xf7V\x03kl\x9b\xda\xb3\xd2\x8eJ\\\x1ff~U\xd4J=\xf6K\xdd\xb7x\xc4\x95\x90z\xec\x97\xb6\xb2f\xaeP\xdf\x98\xc6~X\x1d\xdd\xc5)\x1e\xbc]S\xaf\xcc\"\xfd84;\x01\xa9'C\x7f\x97@V\xc4&\xe8\xfb\xa4\xa2\xa7O)=\xdd\xaa\xdd\xfa\xbbEZ\xdb\xa7HRK\xfdS\x15\x9a\x078`\xb2\xdc#\xa5\xc0\x86\xb0\x073\xc7\x85\x13/'\x05\x1bCn\x97\x8e\x0b\x17\x02;=\xc1\x99\xe7^\x94\xf8\x01 0\x8fI\x9d=\x9d6\xb5\x16\xd3CE\x7fZ \xf2\x84\x16KQ\xb0\xe9BX\x8f\xb2\xc4y3^p\xd3\x85\xa4S\"%|ck$:.\xd3\xc0/\xc8\xbb,\xb2-\x0b\x07\xd6-|\x91\xf8A\x18\x9fQ\xe8/s\xdb\xca\xcb\x19\x06~\xd1\xd4>L\xc9\xcc\xa6\x83\xc8:\x83\xc0d)\xcdo\x82\xe4\"\xa6s\x07\x0c\xea\xc1g\xaa\x1d\"\xd6\xe8\xf4+\xda\xe0\xc5\xe8\x81#6\xc0\x81\x0b/C\xd2\xa7\xde\x14\x17\xac'i\xaa\x93\x97V\x91J\xb0\xfeI\xa8\x0d\xcd\x0f\x1c0s9\xb2\xc6\xdfK\x92] \xf8\xab\x9b\xd0\x8bR\xab\xe1\xe5bXj4\xc9\xa3\x89P\xe0\xc0T8\xbceL\x06\xd0x\x89`\xf7\xe1\x03\xf04\x1e\"k\xc7\xe1\xfb0MI\x00YM\x07\xc6 \xfc\x0bk\xe5_ \xc9\xf07\xfd\xf8_\xe0\xc2\xcf\x11\xed\x87\xf3\x90\x04\xbau\xe2x\xe8\xa2\x8b\x18\xba\xe7\xeb\x92bB\x0e\xf2L\xa6\xc8~\xbf\xcb\"\xa5\xac\x0d\xe5\x98\x8dM\xee\xbc\xa0G\x9b\x9d\xa8\xaf\xaf\xdeq\xb0Y3\xd6\xf8\xf0\xc1\xd8\x82\xe2\xfa\xc6K\xed\xb2;\x1d\nlo\xc92)\x08\xfb^M\x81\xab\xd8\x90\xd4\xeb\xbeU}\xa9`)\xe8\xa7\x9d\xd7M\x1c\xec\xc2\x01fb\xb0\x8d\xf3\xbc\xa4\xd5\\\xb8\xa0\x87\xf1@r\x03\xba\x96\x91,\xe9\xa5E\x1c2\xe1\xd8\xde\x19=\xe88\xf0\x8ev\x1c\x8f\x8b\xfd\xde\x93\xab|HC\xf5\xcau\xac\xa0\x99\xb6\xf5\xe1\xae4\xe1\xd8\x1e\xef\xdcwx\xbaM\x03\x95\xd1631\xbb\xed4\xb3s\x03\xacnX\"/C\xb3\xa3J8\x18\xdb;\x9d\xc0\xb0\xb5pq\xd2\x9fb\xb3\xb3\x03\xdc\x83\x1b\x1d\xbe[\xfbp\x7f\xdb\xf1\xe6rL\x94!-\x0e\x9cD{\x9bn7\x89\x9d1\xf3\x07\x1f\xdd\xe7~\xe4c\xeeW>\xbe\xaf\x04\xaf\xc3\xab\xe5i\x12\x0di\xbb\xd7J_\x9d\x8e\xb7\x13\n\x83G\xe9m\xe7\xb2\xe4\x913\xda[\xca\x83\xf4\xee\xb4\x83\xf1\xf2\x19\x8c\xb7\x1d\xef\xcf\x07\x7fk\x96\xb1\xd4\xa1;\xed\xf1\x88\xcc\xa1\xed\x011\x81\xf6\xc3vX\xa1\x94{\x87\xb4\x8d\x13x\xea\xd0\xb6O\xc2\xa2\x82\x94\xe6\xfbs\xfe^\x9d9tg\xdc\xae/2\x87\xb6'\xcc\xb2\x86n\xb5G\xc3R\x86\x8e\xdb\xb5Y\xc6\xd0N\xdc\x87\x0b\xbe\x9a\xed\xb9\x1e\xb0%h\x8f\xf1\x92Wo\xcf\xf5\x90\x8f\xbd]\xff)\x1bL'X\xca{\xb6\xe5\xed\xd7O\x04Bj\xbe~\x0d{\xf0\xb4\x9d$\xf4\x0d\xec\xc1\xfb\xf6\xcb#\xcc\xfb\xd9z\xf9\x12/\x08\x06\xd7\xcd\x92\xe7\xd5\xd5\xd1|\xff\x13\xec\xc1sJ.<\xafQz\xb3\x06\xbd`\x02\xdb:Y\x84A@\xe2\xb6\xca\xff-+-\x927Y\xb8\x0c\x99\xbfM\xb3\xc63\xd4\x03y)g(\x9f\xe7\x07q\xb9d!\x91\x9b\x15_\xd0\x1b\xd2\xb6r\x1c\xfd\x06c\x05\xb3\xabvs\xef\xe4Z\x9dd\xc6\x7fg\xa5I\xba\xa1\xa9\xf0\x0d\xecu\xb4I\xcd\x1a?\xeb\x02\xc2\xbcl\xd6\xfb\x1aW\xf4/\xac\xb1f\xd1\xf7\xb0\x07k_cf\x88\xaf\xa5\x8c/\xad\xbf\xbdy\x18\x07O\x17a\xd4R4|\x0b<\x82odvr\xe6w\xce}X\xdb\x83K\xfb\x0d\xf2fh\xd7\xab&\xd0\x87\xc5\xd8\x82\xba\xe17\xb2\xad\xb0Y*\xc2\x93,\xdf\xd7V\xbav\xbcn\xd0#P\x8aA\xae\x9dv\xddkG\x0eg\xa3\xb1]\x03 !\xbf\xb6\xbfQ\x9b\xd3d\x92\xac\xe2\x9biq\xec\xc2\x9b\xaa=\x1e\x10\x92 \xb7\xf9\x0d\xfd\xf9\x06\x9b\xe9\x04\xc0\xbf\x86 \xbcin\xd9\x0f\xbd|\xbb\xe0\xd9\xdf1\xaf\xf1K\xfbe\x0d\x08&\x1d%fL\xef\xaa'\x9b\xdd\x7f\x07{\xf032\xc5\x0c\xea\x1bP\xeb\x89\x9b\xbb\xb1\x88\x06\x80R4B:\x0b0\xa8\xa5F\x94\xfd\x97\xa6\x19\xfcm`l\x80\xaa\xe1=\xb1I\x7f\xb3\xff^m\xe0\x15\xcb\xe2\x02{p\xc13\xd6\xd1w\xb4$\xb1\xdf\xa1\x91\xc4>\xc6\xd7\xa9\x10\x10f\\\xa5\xfd\xbdby\x85\xa7\xaf\x8e\xa7\x053s\x11\xbf\xf7x\x0e\"\xdc\xb4Xw\x10\xea&)\x17\xb1\x89\x89\x8bT\x90\x0d\x93\xba\xc3\x0f\x1f\x18\xf4\xbdr\xe1\xc0\x1ea6uJ\xa6\xd4\xfd\xd2\xe1\x7f[\xad\x06\xfd\xb6\x86V\xd3b\xfey\x88q\xc8\x95\xd2\xf5\xad\xd6\xbc\xb3\xe0\x1fK\x9e\xe8\xb3\xa0CKXj+\x16e\x97IP\x98\x1fe\xf2\xc8\x81\xbf\xa1\xfe\x1d\xc3\x05&\x18\x06\xa60j\xdf\x8d)7\xfe4\xf88=k\x18\xaf\xe0\xc6\x13\x96\xaaP\xdb\xf3\x1a\xd6\xae\x01\x08A\x83\xe5\xf7\\K(0\x11f\xc1e\xaf\xd9\x05\xa2\xec\xda\x17\x9f\xff\xf9N\xfc\x16%\x0cz\xe8o\xbay\xe4\x18\x0b\xdbv4\xcd)~1d\x8f\x98\xdd\x05]\xff.\\\x0b)\x11\x89\xa9\x9e\x94\xff\xc8\x11{\x82\x87\xcd\x17\xb3\x8a9\x04\x7f#v+dSz7-\x0c\xe70l\xce\xaa\xae\xf73nmi\xdb/M\x81\x0d1\x08\x14=N2\xa2\xef&\xc4\xb0\x18IZ\x87{\x92\x92\xd0w\xf2b\x9c\xf3\x8cj\xa9\xca\xebw\xb3\xe1\xf5\xbb)\xf9\xe6\xbb\x9d)6\"B*\xaf\x13\xe0Y\xdajl\xc0SZ\xfe\x9d](\xcd\x03\xce\xfe\x9a\xbe:\x16\xf8\xc2\xae\x8f\xbc\xb8'\xbe\xad\x0d\xe9\x10\xa9\xab\xd2\x1d]+\xa5|H\xf2}O\xff\xf7-\xdd\xc3N.@\x18\x14I5\xa7T^\x8bXp\\\xf8\xa1\x99\xeeM\xce8h\x15I\xe5\xe3\xdd'\x04)0C\xdf\xfb?\xc8M?\xc5\xa4t_\xb8\x94E\x81=\xf8\x1bF\x90\xdby\xe8\xe0_\x87\xf8\xff\x7fF\xae|\xbc\xc3\xde\xfd\x89\xf1\xe8\xbb\xec\xaf\xbf\xf2\xfc\xc6k\x94\xdf\xdc\xc6e-\xe9\xfc-\x15\xc3`\xb9\xf4kD0\x0b\xfc\xbaWR\xf5\x83\x1d4$2t\xc4\xbe\xedc\xaa;\x1fS\xdd\xf9,[\xda\xcf\xed\xf5f ;\x91\xe8\x16Y\\V\x1d\xe7\xbfPva\xe1\xe7\xcf\xf9\x01p\xc3\xfci\x12\xcf\xfc\xe20\xcd\x88\x1f \x9b#(0\x17\x9d\x85\\n\xbd\xeb2\xd7\x0c\x97\x07\xe8u\xd1\xde\xd3\x958)W\xec\xcc\x91\x7f\xe6\x96q>KR\xda\\.LC-\xd7\xa2\x17\x01a8\xe2/\xf5!!\xe4\x91\x03\x81\xfd\x97)!\xcd\xb4\xe65\x12\"\x98\x8f*\xf0\xf2\"\xc9\xe8\xe5\x12\xf3V\nR7\x13\xd3f\xce\xed\x82L\xe3V;t\x05\x0f\x1bk\xc7Ox7B]\xbf\xfdG%;{Ao\xb5\xf5=\xb47\xdf\x87\x17\xf4TM\xd8?{\xdd\xe4\xea-\x04\xfc\x9e\\}\xd3\xdf\x15Z\xe0\x7f\x87\x16\xf8\xc6\x9c=>0\x1a\xb8\x83\x9b\xa0\x19<-\x8c\xe1\x85ZCA{z\x81t\xdc\x9e\x9c\xba\xc3H\xc6\x9799$\x05\xaa\xb1\x8d|\xda\xf7\xaa\xf0\xc0\x9d\x96\xc2e\x1a\x91!-5\x93\xcd^w\x8eJk\xa3\x19\xc3\xdb\x8dq\x84A\xd4\x07$+\xedZ%\x17\xb0\x0f\x976\xa6\xa5\xfc\xb3}\xc9h\x1d\xe3f\x07d\x1e\xc6D\xa8\xa8'\xf07CqH\xf2 \xfc\xb9Y\xe1\x8c\x14\x92\x8a\xfb\x19\xc9gY\xc8\xd4\n_\x98*\xbe\xf2\x97\xb4\xb1\x7f6\xd5a\xc7 \x9f\xc0_\x1b\xeb\x88\"\x96\xe6b\xdakx\xc5\x1a\x98|q\x11\xbel\xc7<\x16\x8c\xda4.\xa3\xe8\x18c\x99\xfdd\x0b\xba\xd3\xfa\xe5\x9a\xbf\xe9\xae\xbd\xdf1,m}\xc26\xb7\x851\x1d\x17\xac\xef\x0e_\xbfR\x04\x01\xa9\xb4\x0c+\x10?\x9cd#\xc7\x8c\xa3\x18=R\xc5\xe0\xa1,\x05\xa7\xc9\xea\xeb>ib!\xf1\xf0L\xde\x9c \x1a\x1d\xbb`\x9f\xda\x9d\xa4n\x9c\xc4\xffN\xf6\xbf9\xe3\xd5\xecb\x089.\xfaRJ\x87X\x987\xa44;\x06\xf5\x8eK\xfb-\x1c\x0d\x1a\x00\x0e$t\xect\x1a.\xfc\xc4\xb5*\xcf\xbb\xc2\x87\x06XIB\x84\xe9[$\xc6c{g\xd3\x91\x85\x0b.\xbcm\xd4cI\xb6^\xcf1_\xe8\xcb\x1aq\xb3\xbf\xfdb\xe1\x82E\xff\xb1\xf8=;\xe7j\xa6\x1a\x06\xd66\x07\xa9\x00j\xe9xG\xca)\xa2B\xa9\x93\xd8QBaU\xbd\x94\xe0\x073e\xda\xb7\x98\xc5\xe5\xed\x1a\xce(2HV\xa0\xea\xbb\\\x00O\xf1\x11\xed=\xf4\xe6,/\xcb\xe6#(kH\x8d\x1e9\x90W\x16\xe8\x94`/\xa7\x11\x12\xe5HN2\x10V\x1f`Ia\xb8\xda\x8av\x84\xdb\xc2\x9b\x90\x92]\xdd5\xfd\xe5\xda\x13\xa4D\xb3\x10\x83\x03\xd5\x86\x14\x02\x96/\xc28H.P\xc9\\\xfd\xe2BS\x05F\x84}C\xa1\xcdZ\xa0\xb8]v\x8b\xab\xb5\xa3\x83\xa88\x0c\x8akM\xd9H\xe1\x07l\xf2\x18G\\\xe58\xeb\x95n\xe9\x93\xd5T\x04\x88\xca\xda\xaa7\xf9\xbb\x18\"w\xf4Q4\xd1<\xc06\xcf\xbf\xdc\xd4\x14\x0e\x02\x00\xa6K\xb1-?\xbf\x8ag\xcfWR\xc8\x89OY\xfa\x12\xa4\xa5\x07}\xa7\xd6|\x15\xde\xe9UA^\xb0#0\xe4\\F\xdas\x89\xe9\xa5:%\x19\x96\xb4}:\xf9Ro\xd1\xdb\x13\x83/9p\x0f\xb6aC\xe2\xcd\xaf](\xbc\"\xf9\xfa\xaa <3\x9catm\x9e\xfd\xa4\xb0\xe7\xce1|\xf5\x15\x8c\x1e\xc0\x87N\x11\xac\xc3\x88\x17\x8f\xd5\xc5cV\xbc\xab.\xddr\xe8JL\xf3\xf5u\xbc\xa60\xb2\xf2.| \xe3\x9d\x9d\xf6\xfb\x07\x9d\xd7\xe3\x9d\x1d\xf8\x12Z\x89\xa4\xc6<\xc5\xb5\xb8:\xd5\x93\xd1\x0c\x96\xce\xe5\xf1c\xd8\xeev\xd2\xc2\xb6\xa3A\xbd\x8c6\x8dK\xb6\xad_\xb1\xc7\x8fa\xa6\x87wZ\xb0u\xfd\x12v\xb7\xe8\x0bko\xcfB)\xf7\x98\xb7\"\xf6\xcbf\xed\x8cq\x1f\x1e8\xb0\xaemx\xb4)Z\xa6\x80Q\xb5\xcc\xbb\x1aK]Y\xed\xa1\x0b)L7\xdc\xf4\xb5\x82\x7f\x16B\xc7D\x12>Ze\xcc8\x8f@N\x0f\xfb.\x8c\x8b\x07l\x1f\xf7\xe5?&,\x9f\x0b\xdb\x14\xeb\xc9\xd7O\x9f\x1d|\xf3\xa7o\x9f\x7f\xf7\xe7\x17/_\xbd~\xf3\x97\xb7\x87G\xef\xbe\xff\xe1\xaf\x7f\xfbg\xfft\x16\x90\xf9\xd9\"\xfc\xe9}\xb4\x8c\x93\xf4\xefY^\x94\xe7\x17\x97W?o\x8e\xc6[\xdb;\xbb\xf7\x1f<\\\xbfg\xf1h\xdc\x0c\x8f\xf8\x95t\xbe\x84\xaf \x7f\x04\xeb\xeb\xa5\x03\x19K\xc6\xedOK:\xf0\xa9/\x83r\xe9`,c\x95[[\xa4\xc7\xea\x02\xd8\xba\x84U\x01\xff\x01\xb6)\x1a\x13\x8c6E\x9e\\\x16\xf8\xc1vn\xc2\x84!f:^9mfw\x1df:\x8c_g\x8cB\xf7S9:z\xc1v \xa6\xff\xac\xef\xc1\x96\x83\x00c\x13\xba\x13\x14\xe5P\xec9\xda\xbd?\x1a\xed>\xd8d>\xf6\xd3\x92\x9e-\x06\xe9\x14\\w\xc6\xbc\x84\xa1\x0fV>>\xa6\xac\xb9\x80|;\xc4\x8cZ\x08\xff\x0f$\x98\x0f\xf1\xcd\xb8\xfdfWz\xb1\xbb\x05_B\xd8\xe6\xa9*\x8a\xa6{\x14\xaa_\xc9\xd4\xda\xb0d\x08\xdaD\x08\xda\x1dS\xd0\xb2NTE[JzC^\xcd\xc2\xcb\x88\x1f(T\x81<(\x8a\x02\x0cCW\x10\xea\x0f\xe0\x8f\x90PZ\x80b\x06\x85`\x94.\xfc\x88\xaek\xe9\xa8k\xa0\xbf>\xaeY\xb7\x8c^\xcb\x1b\xf7\xbb\xef\xd1~\x06\xf6\xb1\xe3\x11LT\x01\x0bR^e\x83\x96+\x9a\x0e\x10QR2a\xde\"w\xb8\xc3\xfe\xfa\x1e\xa4\x0c\xc3\x04\xf0%\x9f\xc3\xc6\x8cM\x02\x02x\xfcx\x0f6f\x94rX\xa7'\x18f\x18\xd8\x14\xeb\x8fwv\xe1\x8f\x10\"\xc2d\x1d\xb8 \xda\x9b\xc1\xc6\x1e\xcc_\xf9\xaf\xb8\x8c\xa7\xc0\xb6\x18x\xec\x83\x8dY\x04D1o\x92!\xef\x19j\xe9}\xd1\xd6R5\xcf?\x85\x0dX\x1c\xc3\x87=\x18\x8d\xe9\xc1:o\xddp7b\x8a\xb9\x10\xa4)\x9c\xb6\x0b\x17\xac\xda\xac\xb5#B\xe5\x96S\xb2\xb1\xab4bAj^)\xa3G$\xbcd\xac\x8c+\x81%[\xaa\xb8\x12X\xa2\x8a*A\x0b:_\xe4\xbc\xa0\x13l\x82\x99\x9a\x8e\xef\xb7U\xaf\xcc\xd6\xb4mf9\xc7ff\xad\xb7)o\\\x11\xe6\x82\xd9\x9a\xee\xec\xb6\x03]/\xaaO\x1e\xb6?\xe1\xf6\xa6\xe3v\xdfK1\xb7\xce\xac\x99\xc5\xa9&\xa0\xc3\xd5\xa7\x0f\xe8p:D\x1a&%\x1bm\x82\xca\x89IU_M\x8b(UA\x92t\x9e\xb15J\xe5{\xed\n\xb8\xd6\x88\x0d\xb4y\xdc\xd5\xcb\xab\x82\x7f\xb4\xdc\xc9\x84a\x8d\x8b\x05i\xbb@-p\xcb\xcd^\xc1\xbd\xce\xc5+\xb8\xcd\x9a\xbc\xe3L\xde\xc7\xd0\xf1@\xd6\xd7\xcb\x92\xa4x\x1eS\xd4\xd1S\x11\xe7\xfdF\xccN\xe1\xd4\x0c]M\x99xN\x932\x0e\x0e\xc5\xc45\x95\x8a$\x89N\x93K\x8d\xc34bz4\x00\xa8\\\x18\xe9\x1d\x81\x16\x01\xd5\x1b\xef4\x8c\x03\x1e\xf0\x87\x95\xa1\x82\x99\xdd<{p\xeaVn\xd63\x14r|w\xc8\xf6\x9ayUr\xe1[\xb3\x93\xfe\xb0\x85\xe2\xa9\x18s\xda\xfe\x99\xc7\xf6\xf9hQ\xc6\xef_\x86A\x10\x91\x0b?#\x8e\x1d;\x86\xc0i \x06\xf2\x12\xe1FNN\xde\x1e<{\xf7\xd7\x93g\x07\xdf\x1f\xbd~\xfd\xe2\xf0\xe4\xe0\xafG\x07\xaf\x0e\x9f\xbf~u\xf2\xf4\xf5\xcb7\xaf\x0f\x0fNNP\x87\xc7\xbcGsE$\x1c\x90\xc8\xc6M\x97\xd6D=\xe9!\xaa\xdd\xf9\x84\x12;b\xfa\x9ez\x98\\\xffS\xa5*wTf$6?\xaf\x8eXk\x0cO\xc2\xbdK\xd1\x1a\x05\xdfVN\xb5\xf8\x17?\x1e:\xadRk\xbce}$\x89\x0b\xd3\xee\xba\xbf'W\x13\xb0\xe8f\xd1\x19)\xdc\xa2\xf9\x05gTCC\xcb\xc2\x04a\xa6;\xdf\xe6\x90U\xe8\x81\x8dFLx\xc0hz}l\xd7\xd4\xa9\x07txp\xc4t\xb0\xf2\x0b=\xb0\xc9y\x80\x81\xd8&\xd0\x16\x0f\xe5}\x18t\x879\xa37\x1cJ\x91b\xc09\xfe\x1a\xc5JNC\xdb\xa8\x06KU\x9b\xdf\x94\xf1\xac\xf1-\xb1\x0b4\xa0\xd5y\xf9\xaa\x1aQ\x8c\xc0[\xfai-:\xd7jW\xe5\xa7\x1e@\xc7\xde\xb5\xfd\\;^F\x82rF\xec\x0b4\xa35\x0f\x957\xacA\xa0\xc0t4mTg\xeb\x02\x00^p\xfc\xc5qU\x8c,\x01\xb7\x06m\x1cH\x85\xfe\x03\x9a\xd7r\x1f\x00\x08\xfcF\x9b\xd6O\xf1\x9c\x07\x17U\xc0\xedX\x0b\xb7\xe3\xe6\xfd=>\xeeq\x0d\x07Nd&\xde\xc2\xcf_\xa0\xb7\xb6yD(T\xd0W\x19\n\xd3\xa8\x07T\xa9\xdf\x0b\xcf\x9f\x17${\xc1\x9d\xa7\x91\x83X\xdbt\xe1\xc0\x96J\x1cY3\x1f\x9bB:\x9a\xcf\x84\xdc\x0c?\x1e}\x1e\x12\xd52M\x14\xd9\x9f\xc5c\x82\xdc\xbb=`\xcd\x99dB\x18\xd1\x7f*\x07\xcd\x03\x00TY\x80\xeb\"\xfd4\x85\x95\x18\xb0z\xd3\xc5\xbb\xa1\xad\xf0\x18T\xba\xe3\xd13\x02\xceG\x16\x82K\xe2o\x06u\xfe|9\x81\xb9XZ}\xb5\xb7\xc4\x9f\x15\x93:H\xa2\x1as\nn\x8cqi\x12\xcf \x18\xc6\xe5\x96p\xce\xa7u{p\x92\x07\xa9\x8bX5xdw9\xb0\x01\xc2\x82!c\x87\xce\xf8\xbbo\x0c3\xcaW\x99\x91\x96\xb7Q\x0c\x14\xf6\x14q\xf7\x06\x0f\xab\x894\x07\x0c\xcdxE2b\xc4p\xef {(b`\x0bLmW\x97\x18\x9f\x99,.a\xbea\x8c|JN\x7fz\xe9\xa7\x0e\xbdA\xfa\x97\ndZ\x89\xf1\x18\x99fW\xb9\x87V+\xd6\x0f\xa9X\x93\x9a8\x1bB\xe6\xf7RH<\xc6-F\x82&\xd3\xf8x\x85H\xe0\x82\x10Y\x91\x0c\xe9J\xf8br\x013\xef\xa5\x9f\x9a\x19\x05\xe0\x84\x89\xcc\x15\xf7s\x93k\x99)\xc2\xb0\xfc\x08\x93\x80lZx\x94\x1d\x18\xd0x/\xa3\x0d\x12'u`\xc7\x8e\xc9_N~\xf8\x88\xab D \x97\x0c'\xc6/\xf5\xac(\xa8\xc4\xbe\xed\x07aO\x0d\x95\xc8\x0f\xbbm\xa8,\xe4\x08X\x9b.\x04\xde,Y\x9e\x86\xb18M\xb9\xc3r\xea\x9f\xf6&\xc97\xa3\xdf\xa3\xabt\x88L\xa8W\nC\xa6\x9b\xc7^\x91\xbcKS\x92=\xf5sb\xa3\x11P\x15+\xbeW\xec\x86\xa7\x9e\xcd\xcd\xb1\xf5H\xa2\x1aP\xacH\xe7!?\xe7<\xb6y\xac\xcc\xf8-\x1eTT;\xf28\x92&}\x9c\xc1:\xc5u\xa1\x9aU\xba\xcd\xa5L\xc9\x13A+\x0f\xd8\x80!\xb72\xdfN\xdb\xca\xab\x86o7@N\xef\xdfbx\x02\x915\xc7\xe7\xf3v\x07\x82\x05^\x06d\xc5\xcb\xa0\x03T\xc4`\xd6\xa2z\x1a\x02\x06\x8a^\x1c\x13\xa0\x14\x9dL\xe0\xf2\xa3a\xb5o ?j\xeel\xc0n\xf5\x9ef\xba]\xc3\x98\xd1\x06_\xa8\xf2W\x07\xdd\x86\xc6\xcd\xfd\xe8\xbfpi\xaf*\xac0\x8d\xeb\x0c\x0e\x1b\xf7\x9dc\xef\"\xf3S>\xa4\xdeK:\xe3\xf8U\x03h\x03\x04\xbe\xe2\x0e\xca\xa6q\xcf\xb5\xc6\xbbD\xe3K\x14\x10 A\x91\x9d0\x1f\x17\xb4UL\x8e\x1d\n]m\x9ad\xc8P@Z\xaa\xde\xa3\xd9~\xc4\xbd\x88\x87\xa3!\xaci\xa9:\x14Q\xc4t\x8fB\xbf\xd8~\x90\x90\x90\xcfY\xe6\xc8\x16\x89\x92\x87\xb2\xb4\xad\x10\x13\x12\xe4P$\x954\xaa\x96\xd2\x16\x0b\xbf\xe0\xafs\xf0\xb1\x91\xaa\xcc\x0e \x14\x0b\x02\x17\xec\xe4\x00CD\x8e\x0e\x11\xc9\x0f\xef\xe8\xc0\xcez$\xdd<\xf0\xe67\xbcO)\x88\x08\xbd\xafM$\x82\xb6\xf8n\xf1\xc4*\xd7\x8e Q\n\xa2\xce\x8c,\xb26\xb2\xa8%D\xfd\x01\x0e\x9a'S\xce\xa5\xa3J\xe7%?\xe2TN3 9<4)\x16A\xb87)qL\xc2\xd0J5\xf8^\xc4\x12v\x10K\xb1\xc2\xf0A\x16\xcaO\xb3a\x88\xc5\xef\"\x16\x9f!\x16\xb4x\xf5\x99M\xaa\x82\xd9\xe9\x1d\nH\x14\xd5\xca\x88\xa5\xb2\xbe\x0d\x15\x1c\x0d3Mb\x83\x0d\x1dn#\xcdlr\xc3GP\xae\xaf;h\x0e\xdd\xe0M\xca\x9e\xe5\x10\x8f@\xf1\xc8\xcf\x990\xda\x94\xcb\x8b\x9e\xc7v\xe2\x1cS\x8e{\xe6\x17\xb6\xaf \xad\xdb\xcfM\x10\\hBp\x02\xc0~?\x0c\x17\xf6\xa1\xb7\xc2\x80\xde\xd4<\x0e\x08\xf4\xa6a\x81n\x87\xdeP\xca7\x08\x99\x0d\x90\x94fM\x0b\x17\x15.X]^\xd0\x14\x08\x10\njL\xec\xad^\x0e\xf7v\xe2\xbe\xa6|\xfd\x1fg]\x06#\x16\xc1m\xb3C\xabr\x11\x15\xcf\xf5G\\\xe3o\xe2\x01K{c\x99\xe5\xc4+\x93\xc7z\xeaV\x83\x92\xaa\xb05<\xb6\xf9\xbe~\xf4\xd0\x96,\x8b\xb2[m\xce\x9d\xd2jJz\xaa\xd2\x98T\x14\x99\xb3\xa2\x84EEa\xf5RFz6\xb0\x97\xc1\xe1-\xf4\x1e/\xf9ix\x84u\xc9\x8f\xb0\"?2\xa7\x8a\xe6\xe4\xc3W\x90=\x02\x9f\x92\x1f\xe1\xd4o\x92\x1f\xfe\x00\xf2\xe3\x9c\xa7C=\xb0cAl`*$\x0d\xa9\x11\x1a\x93W\xf2\x87O^i\\\x81\x89(m\xd6c\xe9\xd8\x85\xcd\xa2\xca\x1b\xdb4X\xd7|\x14q\xc5] )\x08\xc6\xe6\xfa\xf0\xa1\xa3\xf1\x13jt\xf5R\xcah\xca\xab\x85[\xed\xc8\x1d\xe2Q\x9f\x18\x99\x84\x1f\x80nl4(<\x0d\xc5\xbc\x9ff\xc4\xa7\x07\xcd\xa9\x10\x17\x90\xc1\xa6 \xd2\xc6\xd7\xce\x8b\x85\x99\xcd\xe8k\x1a\xe4\xeb\xb4\xe8\xb3\xe1\x82\x017\x9b\xfc\x08\xe9\x1f\x05\xfd~\xf8\xd6\xbb\xff\xb7\x1f\x94(\xdeB*!\"\x06\x0cZ\x1e\xe0\x1d\x0e\xabI\x1f\xba5\x138\xf7^\x1d\xfcpr\xf4\xed\xdb\xd7?\xbc:9x\xfb\xb6_\x03#\x1e\xcc\x80\xa0\xcf\x92\xa5zR\xff*J\xfc\x80\xa5\xf8Y\xc8j\x84AM\x98\xb5\x1bX\x03\xe6a\xecG\xd1\xd0-\x12@\xd5[\xd9\xdc\xb5\xc9\x02\xb0p\xb42\xd7[b\xaa\x97~\xca(\xe8\xe4M\x96\xa4C\x90\xd5\x10\xf9\xb7\x11\xcf\xf4\xb6\x04M\xac\xd2\xb2\xe3!\x03H\x9a\xdb.\xc93\x8e^\x87\xaf\xca \x92q\xd8\xb2\x0c!\xee\xec\xa6\x87\x02\x8a\xe5\x0dVL\xc8\x81\xd5VG:P\xea[\xb6c\xfam\xf5\xea\xdaV:\xaa\\hCG\xddZ\xc5\xab2\x02-\xd4\x0d\x9b\xac\xa2\x1b\x0d\x8fT\xde!\x0dA\x860\x03\x95\xb4\"\x83\xea\xcbF\x9a\xcd\xea\x05\n\xd8j\x96\x04)\x9a\xd6\xd5\xd6\xaa2\x80Z\x15T*\x91\xc8r\xe6\x1a$\x91\xf0*\xf9\x1a\x067\xe8H\xe9\xf7\xc1n}\x89&\xb6\x9c\x8c\x9b\xc6\x14\x18x\xf4\xea\xf6`\xa7\xd91\x86\x95\xc1yu\x1b\x99&.\xc4\xc7\xc6\xaf\x9bp\xa7\xd0\x19\xb7\xbe\x91\x13\xfdk\x9a\xd5\xba\xee\xcb\x8c}w[\xdb\xbb\xaa\x8a\xa1Y;\xddC\x18\x9b]B\x98\xa261$\xe5ow\x18V\xa9\xa3\x1aoe\xd5\x8f6\xc2.\xc8\xb2\xd5a\xca\xa2j.%\x9d\x8b\xdfG6\x9c\xf3,K~\xaf\xa8\xb2 `9\x93\xd6\xd2O\xa7\xf9\xb1+$\x9fye\xb1\xde\xd8\x96\xee\x9bir\xac|)O\xb2\xb7\x02\xed\x13\xe3z\xf4Ub\xf3\x13\xb0\xdfW\xdd LU_\xf2}\x88W\x8d\xf4I#2\xa1*J\xc4\x81>Z\xc6\xaa\x9e$*\x9c\xe9xQr\x86\x02]\x850$\x96\x93\xa9\xef1Ij\xcb\xf7\xc3D\xec\x0b'F#\xb1\xa0'\xa3\xa5\xb0\x98*N8\xab8\xe1B\x84\x12\x7f\x04 |\x05\xc5#H('\x9cQ\xf8\x92W@wb\x05\x82GcpN\xa7\x13\x17\xa6\xf4\xba\xaf\x00&SY\xae\x0c\x8d\xe5\x85\x11C\x9a\x19\xc3\x08\xcfE\xd7\x036\xd7\x7f\xe8\xfe\x92\x13\x8d\x9f\xe0\xdb\xdeX];[c\x85\x17\xb0\x9c\x14\xa9.U\x07\xc8S{\xca \x9dE\xdbI\x99\xb4\xa3\xca_\x0f\x19g=\xae\xf1\xa64\xdc\xcc\xce0\xcce\xc6b\x86\xb2|7\xda\xb8\xa1\xedX\x9e\x98+\xc5\x9b\xd7#q\x86\x0c\x85.\xd9\xb6)\x87\x94\x9f\xe7\xe1Y<\xa4\xa9\xfeY\xe9'\xc3z\x99`\"\x98-g\xc59\x98\x93\x0c\xc9\xa7\xf2Z\xbd\xfb\xd9\xed{\xa1\xeb\xd8\xf6\x9ef\xb1\x055\xc1\x1a\xb7\xd4\xb9\x8cv\xb6\xdaYyJ\xcc\x1aP\\$O\xf8\x01\x7f\x93$\x11i\xa5{\xc3Yx\xf3\xa4\xccL\xb5\"\xd8\x83{?\xde[\xbfw\xa6\"\x86gZ\xbfi\xdb\xb2`\x1d\xd0\"\x13MG\xed\xc8\x05\xeb\x8b/\xefYf\x94>W\xca>Q\xd0C\xeb\xf0\xfc\x1c\xf4\xcfY\x12\x17\xe4\xb2`1<\xf9\x9b2\xa6\x7fo\x1a{Hu\xe7Ul\x0b\xc1\x9e\xba\x18_\xd0\x9e\xd8m\x0b\xd33_\x99\x84\x19\x0f\xb1\x81\xac\xaf\x9bg\x1aHaI\x94\xf3\xcdH\xce\xf0\x98\x98\xf1{r\xf5&#\xf3\xf0R\x9a3_\x94\xb8\xb3(\xd9J\x8b\xb2\xe8_\x146\x9c\xee\xb2\xf8XZ\x8d\xad[\xa14\xaci.\xafi\xb7\x98\x02_\xc9\xd66o\xadms\x03\x9a\xc4WD\xa9\xfbs\nq\x19\xaeo\xe8\x15\x0b\xbfx\xcb\xd4\xac\x02\xd8)\x05\xcf\x13\x9e\x02\xcb\xe1\x98xa\xfe\xbd\x1f\x85\xc1ADh\x0d\xda\x0e}\x1f1\xc6 Jb\xf2$\x0e\xde2x\xfe3\xb9\xa2\x1d\xf8\xb0\x0e\xf6ZD\xe7\xcf\xe2\x9e MF\xff\xa2T\x01{\xbf\x0f\x96\x05\x13\x98\xd9\xf8\xa7\x03\xeb`\xdd\xb3\x1c\x0cU\xe8\xb8\"\xf0n\xe4\x98\xc1\xe5\xdc\xee\x0f\xcf\x04{`Y\xcd\x85\x113dq\xb9h\x8d\x19e\xc0\xd9\x10\xba\x1c\x03\xdd\xab\x802\xd2\x88\n\x02\xbb\xc0([\xd8a\xb3\xb2O\x87\xb3p\xa1\xa4\\\x92\x97\x91\x88\xf89\xb1K\xf3\x1c\x96=We\xe3\xce\xaf\xef\xf4\xb9\x14P7 \"\x95\x81I\xcd\xd88\x1a(\xaco\x9d\x8e\xc6\xcb\xce\x01\xa1\x9b\xe2\x07\x01]\x830>;J\xec\xb9\x98\xe8\x8d\x06R\x1dd\xa9W\xf9,K\xaf\xefp\xcc\x81\x0by\x8b\xae9\xeb\xc8>\xe7Iv\xe0\xcf\x16\x93^b\x06\x84-7\xb3\xb5\x96\xa2\xac+\xec\xc5\xabk\xb4 I*\xb7f\x84\xa3\x94\x85\x84\x9aWp\xd4\x8e\xc3\xdc\xc4\x0cK?\xfdH\x03\x9e*\xa8`\xfe\x15\x9e\xbf\xcc\x15\xbb\xc0\x9c\x8f\x8diJ\x96~\xfa<.\x92\x1f\xc2b\xf1g\xb1\xdb\x98?5\xf6\xa3 \x9c7+\xe3\x8e\x0e\xd0\x00\xf2\xd1\xe0\xb2-\xd9h\x8ckU$\x88\x12\xfb$y\x82\x95\xe8[\x80B,\x80\x1a\xa5vRg\xd5\xf0\xa9\xa6\xa2\xce\xf0\xed-\xa9\xa8\xd1f\x9b.\xc2\xc0\x7f\xb1\xfd\xc0\xe9\xb34\x16)U<\x91R\x85B+g\xa3\x86H<\x9b\xdf\xa5I\xda\xa3\x83b\xa7\x17\xfdjY(\x16Epr\xdd\x06\xc4\xe4\x02\xbf\xef$gP\xd0\x8a\xe6Y7R\x85\xd1&1)\x8fm\x8dw0\xc7\x85\x84\xdb*\x1fN\xc5\xfaPv\x92\x16\xa5I\x12\x1d\x86?\xd7n\x9d\xcd5\xa1\x97\x9b9\x9d\x04\xa5 \x92.\x01\xdb\x1d\xb7\x8c\xdf\x06\x9c\x15\x90\xc5`\xc6m\x89\x1bc\xe61%\xe3\x1a{\x01g\xf0}\xfa\xb6\x9a/K\xc7T\xfd\xb9\x07#L\xc6$\xb0\x18\xec\xd1\xbbS\x91\x9bIAZ\xc6\xa4I\x83O\xda\x0bB\x9f\x0e=?p\x0dn\x02\xe4 \xad\xddJ\x80\x0e*`\x8fyl~\xd5r\x80\x12\xe6A\x05\xf7\x9dT\x15\xa0^\xceb\x91\x91\xce\x82\x0e\xb90\xe0\x96\xab\x95\xdd\xc9je\xae\xf0\xcb\xeb\\1\xe2\x19\xbe`\xcax\x1e\x8a5\xeb\xf2\x81\xdd%3\x98\x91\xdcf\xd5\x92;Y\xb5\xa4Z5FM\xa8\x9d\xc0VZ\xb8NB\x88n\x0b\x9a{\x8d\x99k|\xac{m\x9b\xa5Z\x1e\xef\xdeW\xc5\xa2\x8b\xed\x9d\xadv\"]\xbf\xbe\x10c{g\xbb\x13^\xaed\xe5\x0f\x1d\x17,\xaf\x9d\xc6\x95N\xc8\x9aX\x9ax\xc5\n\xc4#\x08-\x0c \xd2\xcdx\x80\xef\x05cB8\x8b\xe4{$\x9f\xf9)\xb1 c\x92&\x18Z\x9e\xe5Q\xb0\xb7v\xdb\xd22\xb8\x990\xae\xa2\x06y\xdc\xccj\"\x84\xc7w\x9a\xb90\xd7\x11H\xa9\x8bq\xf2\x84\xb9F\x1761_I#05\x86\x91\xfd\x12\xacSz\xa2\xfcX\xbc\x12YP\x90|sk\x07F\xbcd,\x16\xab\xd9\xc27X\xd7\x8a\xcb\xe5)\xc9\xe47\xf5\xaa\xf2.\n\xef\x8b/\xf8\xc8\xd0\x15\xb2\"wg\x94{)\\\xca\x83\xb2\x00\xcd\xfbP\xc2: \x05\xb2\x89L\xb0\xe3\xc2HM\x13/0\xc6\xa5\xf2\xc8\x9c#\xb3)59\x81\x18\xd6A\xa1y\xa1\xab\xd2\xe4\xcf\x0b\x8d\x06\xa1\x92j/\x99\xc4zII\x8c*\xbc\xf6r}\xdd\x81\x05\xac\xef\x01\xb1S\xba\x0f\xd3\xe5\xb1\x0b\xe78\x97\xd4\x85\xa5\xc3w\xaf;\x02Ml[\x90\xd8\xa2P\x99\x8d\x10\xf8\xf0\xcf\xfaP\xd8\x95\x8b\xd1\x04\xcf8m\xd7\x13Z\xe6\x0c\xc1\xa0\xf0H\\d!\xe91s\xa9\x16\xe5\x84-\xca\x9a}\x05{p\xea\xc5\xe4\xb2\xb0\x1d\xc7\x0b\x12L\x1d&-\xcc\x15K;#\xad\xcd\xc9\xfa\xba~u\xc4CW\xa9\x7f$\xda\x01\xe8\x17H\x91i\xd2\x8e\xe1\xae\xcdSU(\x92P\xdd\xc1\xca4\xc7\xca\x0e\xc2P\x0e_\x0d\xc6\xd6\x9e5\x01koS\x03\xc1\xd6\x04\x8b\xc7V\x17J\xb4\xf2\x02\xeb\x0b\n\x93\x1d5\xc0\xbd\xe9\xde\xe4\xf8\xdeY\x1fc.5TL\xc9q\xb7_#GY\xc6w\xb3(\x9b8m\xdd\xa2\xec\x8di\xf1d\x95Ea\xcba[\x1e;\xccd\xba\x89\x1az\xbaV\xeco\xd4D\x13//O\x19\x15`\x8f\xd1\x97Pz1r\x1ci5\xed\xbd\xcd\x0f{c\xe7\xee\x17\xb4\x86W\xf5\xd9\xb9\x13\xfd\xd7\xfd]\x87\xc7\xe8\xfc\xc6\x9f\x15Iv\xd5=\xc5\n)\xc0\x84\xa2H\xbfM\xa5b\xd1\xe9i\xc6JOO3e\x85 \xc8H\x9e\xb3:\xec\xb7\xb2ZFx/\x19Qw\x94\x15\xe1,\"\xbc\x0e\xfeVV\xcb\xc3\x80W\xa2\xbf\x94U\xca LX\x15\xfaKU\xe5\x14\x8bO\x95E~\xce\xda\xa7?\x94\x15\x82\x90\x95\x07\xa1\xba8\xe1\xc5\xea\x9e\xc33V\x1c\x9e)\x8b\xa3d\xf6\xfe\xefeR\xf01T\x7f*+'\xc1\x15\xab\x96\x04W\xca\nl\xeb\xd4\x1bwZ\x16E\x12\xb3\n\xf8SUi\xe6\xc7\xe7>\xdb\\\xf6S])\xa5\xe0\xcak\xe1oe\xb5\x90\xcf\x8a\xfePVH\xf8\xd6\xd2\x1f\xea\n\x11/\x8f4\xc5gYR\xa6\xa2\x0e\xfe\xa1\xaa\x18\xf8\x05\x03F\xfaCW!\n\xf3\xa2\xaaD\xffPV\x0cX\x95@YH\xd8p\x03\xa2\x1cn@\n?\x8cr^\x05\x7f+\xab\xcd\xd9\xca\x06s\xe5\xaa\x06\xa1\x1f%\x0c\xa6\xd8Ou\xa5s^\xe3\\Y\xcc\xc7\xa9\x1e&_\x05\xe5\xfc\xc9\x12\x0b\xc9R]xJ\x02^~J\x94K4\x0fI\x14`\xd2\xe7\xcc\xb6\xc4\x1f\xea\x8ag2\x98\xd5\x7fj*\x97\x19\x11\x15\xcbL L\xf3$\xc1\\\xb5\xff\x1f{o\xda\x1d7\x92$\x08\xbe\xdd\x8f\xf5+\x9c\xf1\xaa% \x03\x0c1H\x89\x94B\xa2\xd8J%\xb3[\xdd\x99\x92FRVMw0\x8a Fx0PB\x00Q8xdQ\xef\xf5\xcc\xec\xdc\xf7\xee\\=\xf7\xd9\xb3;\xf7\xb1\xc7\xec\xce\xf4\xf4\x87\xce\xfc#\xf3\x07\xf6/\xecs3w\xc0\x017\x07\x10$\x95U\xbbo\xf1\x81D\xf8\x05wssss3s3Q\x08^\xe9B\xc9R\x16I\xc81.\x86\x90\xbd\x18\x92\x99\xdb\x98\xb9Mf\xee`\xe6\x0e\x99y\x1f3\xef\x93\x99\x0f0\xf3\x01\x99\xb9\x8b\x99\xbbd&\xf7qB\xc4\x8b\xad\x80\x04\n\xbe\x92\x85\xcaU\xb6\xb0\xae\xb1\x85l\x85n![\"\xca\x89\x17\xaa\x00\x92X\x92\xc0\x06\xf3\xc4_\xe2\xe4\xe2+Yh\x89K\"X\x92\xeb!\x88V9\xe2\x1c\xbc\xd1ERY\x80\\\x95\xefO\x10\x90\xefOH8\xbe\xe7\x97\xa7\x1cQ\x15_\xa9B\xa1\x7f\")\x04\xbc\x91E\xf8)\x8f\xf0K\xf8J\x16Bh\x85$\xb8\xc2 z/\xb3\xa3\xf7T\x81\xa5\x1f`G\xc5\x0b]`%\xf3\xc9\x89^\xfa\xc9{\x99\x9f\xd0\x1f\xe0Q\x8e\x05x\x94\xdb\n\x04\x99$%\xea\x07]P\xd2m\xf1b) \xb1\x17\xde\xa8\"\x91\x8f\xa40\xf2IR\x18\xc5\x18M\x19\xcb\xc8\x1fTA<0B1y\xac\xa5\n\xe1\xf4\xd2\xdbU\xbc\xca\xca\x85\xa4~X\n*\xba\x17[i^\x9cg\n\xa7\xf1\x95*\x84\xdf\"?\xb2\xf2\x13\x1fg\x00\xde\xc8\"\xc14StU\xbe\x93\xc5T\x11[v|Zp\x8c\xea\x07U\xf0gP\xe2gTV\x82\x03I\xc8\x91$\x08\x85\x84\x84@\x92\x9f \xcf$^\xa8\x02\xd8/\xb2C\xa9\xbf\xc4\xef\x8a\x17\xb2@\x89:v\xc4I\xf9\xb4\x98N\xf9N\x17\x0b\x15~\xe1+Yh\xe9\x87\x88b\xf0F\x16\x89\xf3d\x8a\x13\x82\xafd\xa1\x95/;\xb4\xf2\xe9\xdedI\x1c!I\xc5W\xba\xd0\xa5d\xe0\xe1\x8d,\x92#\xeb\x9d\xe6$\xf3\x9d\xe6\xcb\xa5\x9f\\\xca\"\xf0N\x17\x93\xf3@\xaf\x97\xcc?\x91\xfd\xc80R,Q\xa4\xe0\x9d3\x1b\xf3\x9c!\xd9\xcdH\x92\x9b\xf1\x8b\xac8\xd2\xa8\x1fdA\xc1[`)\xf1F\x16Y`\xfe\x82\xceT[vf\xdb\xb3\xb3@n\x87\xe2\x85.\x90)x\x887\xb2\x08R\xcd\x8c$\x99Y\xe2O\xdf\xcb|\x7fJ\xd2x$\xf0$u\xcf\x11As\x12;\xcf|\xfc\xf0\x99O~\xf9,\x98qW\xfc\xfa\x9c$\x11<\x0c\x83\x95<@\xcaw\xaa\x18\xae$\x9a5Y\xfa\xa7\x92\xbb\x11oT\x910\x88\xb0\x84x\xb1\x15\xf0\x93_K\xfcY\xc0\xa3\xac(Z&Q\x95\x96~\xaa\xf6\xf1\x94\x9c\xe3\x95\x82\xd0\xca\x02\x9d\x95\x9fe<\x89T\x19\xf1N\x16\x8b\xc3\xcbSI\x00\xe5\xbb\xadX1R\xf5\x83*(\xc6\xe4\x87\x95\xd1V\x93\xc8J\x8a\xb8&6\xd2\x9a\xc5\x92\xc8d1M\xec\xcf$=<#\xe7Q\x10\x85\x82:\x90\x05\n\xa2\x9b!\xd5\xad\x94\xb0\xc8\x88P\x05{\x0b2\xa2\xaa]f\xb5w2\x1a\xfb\xae\x1e|\xac\xd2 eMv\xc3~\x18\xc6\xd7\xf8\xe1\xba\xe95j`)\xfdk\xe4\x0c\xeb\xe1\xb5r\xd9\xf7zq\xb4\xa8\x7fp\xff\xbeeL\x8df\x1f\xcal\xe3&\xf2s&\x8doi\x19\xba\xfa\xcaT\x94x\xf2\xc4\x8f\xe2\xe8r\x19\xe7\xe9\xd3\xa7\x84\xa8tn\x95\xaf\xfah\x99v\xe6\xf4\xe0\x8dB;\x06\x82#\xc1\x98\x9e9\x85\x12\xd5RN\x0c\x17\xca\x15\xe3\xb6\x14Dm*\x14\x95\x8aUKA\xc55\x9f5q\xcd\x0c\x19\x8e@0\x1cg\x8eR\xde\xda\n\x02\xd0\xb1 \xbc\xda\n\xfa\xd1\xe5\x88-\x9cD7\xb3{ \xdab;(_\xcd\xdb\xe4\xdd\xeaQ\x9a\x9c\xaa\x7f\x1fk|\xcc\xfaS\xd3wh\xb7\x9a\\\xdd\x94b\xe6\xf4\xd4U\x13\xf6u\x8f\xf5!8j\xefk\x16\xcf\xcbx]\x98\x91`\xc6\xc2OY \x03\x16\x8b\x9a\xef.W\x9cEq\xe6\x83\x8a>\x88\xd2`\xc6\xd5P\x07m~\xb0\xce\xe4\xbd\xc0\xac\xd5\x99#\xdcn\xad;[k\x83\x01\x93\x9f\x00+F\xc7\xef\xee\xf4CBF\x05f\x16\xc3\x8f\xc5\xf0\xeb \x12 \xc5\xb4\x14\xd3\xd2|\xb5\n\x03>cY\xacC\xcdc\xfcb\xc5\xa7\x19\x9f1?B\xe8\x0c\x08g\xb1\xfa\xd3|Q\xbfP8\x87\xa8p\x0e\xd9\x13-\xc8u\xd8\xefw\x05\x0d\xdc\xd6p|\x8f\x85\x05f\x89\x1e\x8fE\xdfC\xf16\xe9y,\xef\x0091AS\xddf\x11.\xe5\x95\x16\x0e7\x18,ey^\x7fl>T\xe8\xa5\xc8q\x93\xea\xe0Q\x80\xdd|%\xae\x89\xe4|\x0d\xc4\xce?>b\xe7\x9d\x11\x9b\xa5At\x1ar\x8c\xbf \xd9\x80\x9ba\xf9M&\xde\x16^Ja\xe8\xf7J\x887\x1cp\xba\xa6\xad\x0e\xdey\x8e\xf1\xeeN\xe4/\xc1\x98\x95\xb8\x9fC=y\xab}\xb1\xedA\x1c\x1cL\xe3\xa8\xb8;qu\xc5\xaa)\xd0\x9bri\xb7c\x9fz\x94\xd1\x99\xd1X\xa7\x16>\x00\x14\x7f)\x90]\xcd\xa4\xa8\x0e%|(\xf1\x8bCw\x0b\x17\x05\xfa\xafk\x12\xb9\xc6\xbbL\xf5\x07\xd0f\xe9\xf0q6q\xeb\x0c\x86>\x01I9\x01\xb1\x05\xd8\x91IY\x80\xa4\xbc\x8cg\xbc\x95\xa3\xb8 \x0cm$\x03\xf9\xca\xef\x95`\xfc\xc2875\xd6V@\xeb\xbbZ;M\xea\xc6\x81UL\xba6*\xf1\xec\xd7_\xcb\xebpd\xf8\xcd\xd61k\\\x17\xf8\xa5h\x1d\xb6\x18\x90?X\xf8\xe9\xab\xf3\xa8\xb8[\x1ev\"\xfd\xac\x99A\x1b\x00\x83\xd6\x8d5c7e\xcf\xd8/\x80t\xc5\xd1\x1a[4q:\xd0<\xe5\x18\x07\xb4\x06\xbb\xbe\x9b-\xdd\x02A\x8a\x95\xa1{X\xe6\x05\x83\x9e\xeb\x17\x8fm\x8f\x18\xd4J\xcc<\x07\x7f\x1e:\x8c\xdb\x97\xa6Xp\xbf\xf1\xf6\xd5\xcb\x01\x9eu\x83\xf9\xa55\\\x80z\xd6\\i`\x1f\xaao~\x1d\x96Z\x1c\xc1\x8eY,\xcf\xa6\xfd\xf2\x1a\xe8\xf2\xee\xb2\xdd\x9cL=\xb7\x862\x157\x1f[\x8fYV\x99\xe9\xac\xfd(\xa6dAb\xef\xec@\x1f\xa9\x9d!*:\x1e8\x1bC\x8f\x15\xb3\xa7\x9c\x87T\xe6\xa6\x80\xd5\x80\x1d\xd6\x8f\xa5\xb0},\xf8\xf4}\x01\xc6\xd4c'y\xc6\x12>\xe5\xc1\x19\x9f\xb1_I\x99\x9f\xb1 \x9a\xf1\x0b\xf6+\xe9\xa0\xe7\xb1\x13\xf4\xed\x05\xf7\xa4k`\xb3\xcf\xee\xf7\xb2\x04\xa5o\xd1r:\xfc\xf6\xe9`\xda\n\xe2\x9d\xbc\x8f\xeaWX\xd3jo\x05\x81v;QG\xd6\x99\xc6vY\x9f\x96\xa5x{\xeb-]t0\xddT\xcf\x0d\xa7\xf4\xff;\xac\xc6\xd7\xf8\xc5\xaf\xd7\xe44:\x1d\xe0\nfa\x1cv\xc4\xd9i\x97f\x99lz\x0en n\x85\x0f\x99\x17\xa0\x9e\xb7\xd6i^\x12\xdd\x16\xcc\xed1%\xfc\x02BK~oX\x9fv\xc6\xfa\x10\xb0\xbe\xee`\xae\xfe\x18X\x1f\xde\x00\xeb\xc3[\xc7z\x85\xc2>:\x93\x04\xfe\xa9\x8dk)V\xca\\\xac\x94N(-J\xaf`\xa5\xcc;\xae\x94\x8d\xd5zpz\xcf\xe5\x99l\xdeL\x8e\x8f\xa2O\xfdY\xa1\xc2\x10\x195\x9e\x0da\x80\xd7\xf9{L^\x139\x8a@\xd3\x06\xb7J\xc8Z\xfa%\x13\xe5\xa7K\xd6\xef\xb0L\xcf\xe4\xa5\xb2\x95\x93zln\xae\xf6y\xb7\xd5.\xe0\xb6(\xc0\xb6\xf8\x05\xadc#\xf5\x83vE\x92\x99>\x87(\xfcQR+y\xfd\xef\xa0pR\x7fu\xc5\x86\xec\x1ed\xc0K\xc6F\x8c\xc3\x85I\xb8\xed\x07\x0cZ\xa5\xb5\x0f\x96o\xcfhJ\x02\x17g\x97J\"\x81\xe8\x84\xe2=\xf0\xd8\x1c`\x92\xa37\x1ep\xb1\x13#+\xfa\xdc\x0f\xc3 :-D\x0e)\x83\x95\x03\x8e\xb9\xd9,H\xf84\x0b/Y\x90\xb2(F65N\x04\xd18\xb9\x84\xc0*_\xaf\x92x\xb5)\x88N\xfa5[\xf9\xd3\xf7\xfe)\x1f\xb0\xafR\xce\xbe.\x1a\x1c\x00\xc3Z\xfct\xdc\xaf\xc5:\x9b\xfaa(\x9aX\x0e\xd8\x1b\xee\xcf\xd82N\xb8\xe0\\\x17Y\xb6\x1a\xdd\xbb7?\x19,\xf9\xbd<\xe5\x9bP{\xb3\xfc\x8eu\x91hx(f<\x19\x07\x13v\x007+\x8b\xcb\xa1*\x0d\x89\xc4\xbb\x05/\xcf:\x15\xa2\x19\xa4`\xe5(\x18\xef\x94%\xfcgy\x90\x80TQ?O!\xdf\x1dd\xa9$\x067b\xdc\xa9\xe0H\xdb\xa5k\xa6+\xe61\xbc3\x92\xa1\x0d*\xb4^\xba\xd6B\x1co\x10\xd7\xdd\xd5#\xc6\x10c,\x91\xa4\xdbm\xee\xa4v\x9b\xbb\x8b\x10\xe11\xdb\x80\x10\x91A\xed\x16ucMV\xeaBb\xbcB\xadM\xe4\xd0\x0e\x9a5nvS}\xea\xc8\xf5\x82\x17\x9f\xae7\xbbAx-\xf0cc\xe9\xf8\xe3\xe1\xa4\xd3@X\x17\xd9\x8e\x0d\xa3\xa5[\xd8\xf6\x05k~\xbf\xeeu\x96&s\xa7\xcdWL\x95\x9e\xc5\xba?\xd5\xe5\x85\xec\x80I\xbb(\xe0\xfc4\xf1\xfa\x1b~zx\xb1*\xef\x81\xf7XGG@\xf2K\xca\xf4\x08\xaf\x9c\x82;\x89\xb7ZJ6\xee\xfd\xea\xaf*\xd7\x1b\xef\xfc\xd3\x1e,\xe0\x16k\xb2L\xef &\x9bpD\xa7W\xa2\xe3\xaa\x07\xf58r6\xe0^\xda\xddwiN\x98a,\x05\xb5+UZx\x07\xd9\x84\xbc\x9a\x9bSR~m8\x01ht\xb0T\x99\xa1\xcf\xfcL\xfb\xfa\xcc\xcfx\x8f\xc6J\xa3&\xcemY7\xe1\xa7\xfcbE\\1\xb6\xa1Q7x\x9e4#+-\xd0/v\xec\xe6\xad\x1a\x91\xb6i\x1bn\xdd\xf6\xd4\xe8\xfd\x088\x9b\xc6=\xb4y+\xc620\x03M\x05$\x98;\xf4\xa8\xa9C]iL\x9b\xd3\xb7\xea/YIs>\xc9\xf6Q\xc5V\xa6xl^;\xa9\xb0}\xc1J\xcf\x07z\xc2\xdc\xd3\xa4b7\xf0C\xd0\xe4x\xa7P\xe9\xdfR\xfb\xbd\xe1\x83\xc1\xee@z\x1e\xb8Vkg\xa5\x8f\xe9\xdd\xfb\xee\xa0\x88\x98@Y\xf3\xb6\x19\x1b\x07\xb2\x9d\x07\xa4}\xef\x83\xfb{\x16\x83]\xdfQ\x92\xb9\xdb\x18\x87aG\x8c\x9d\x1fn\xd3n\xa3\xeb&\xca\xa2\xb3\xbdep\x11Di\xc7I\xad/xuf\x19\x13\xd2\xc3\xd4j\xef\x8b\x9f\x1c\xb1\xdeg\x87\x9f\xbfxyx\xfc\xe5\xb3\x97\xbfe\xf1\xad\x90f~\x16L\xbb\x95])\x0c\xefTZ\xfaS]\xa3\xc2\"\x08g\xcf\xd7\xadu\xca\xb3\xcf\x90\x1a@\x84\x9dj\x9d\xe3/\x0f\xdf\xfc\xda\xe1g\xf6\xaa/\xa2 \x0b\xfc\x10\"\x17\xadY\xf5\xb9\xd6\xddu\xaa&<\x82\xbb\xb4\xaa\xc6\xab\x97\xcf\x0f\xad \x94+\xe8\xc7A\x18~\x89\x8eK;\x80\xa4\xa8\xf6Y0\xbbF-\xf1\xb17\xa8($@j\xc3\xa3E\x9c\x0bp\xc86\xbeZ\xcd*\x10\xed:\xc8z\xbd.\xfd\xfd,\x98]\xa7\x1a|.Zv\x86\xcfW/\xdf>\xfb\xfc\xf0\xf8\x9asB\xd5^\x1b\xc8T#k\x0c=\x87\xa2\xc5\x1c\x8dX\xef\xd5\x8f\x0e\xdf\xbcy\xf1\xd9\xe1\xf1\xa7\xcf\xde\x1e\x12\xbc\x8f\xd9Nh%:\xb0\x10\x93\xe0\x8c\xcf`5}\x9e\xc4\xcb\x86\x15\xd9\xe5[S\xeb\xb7fA\xba\n\xfd\xcb\x97p\xe3\xbb\x13G\xce\x80\xf0j\xf5X]\xac\xab\x1e\x8b\xd6H\xd1\xd4\xce_\x13\x1cgK(\xb9B\xed\x11\xa1\x9a;\xaa\xb8a\x8b\xfa}W\n\xb4\xc7\xd1d-\x15\x17AJ;\xf7\x9b\x0f\x8c\xda\xe2\x88.C\xa6\x19y\xa4\xabP\xd6\xd0\xb5k\xf7\xca\xd2\xa1\x1b\xf4\xc5\xd8;\xd6\xe8N\xad.8\x13\xaa\xa7\xed\xb3\x85c\xa4B\xcb#\xb2\xf4Z\x08\xa9\xed\xc6kt{\xa5q\xa9\n\x84E\xda\xba\xf0+\x98\x87\xce\x1d\xd8\xe8^\x94u[C\xac\xba\x8e\x82\xa8\xbdU\xf5(>\xaf\xdd\xa6_=\xd0\x9f\xba)`\xd4\xd9\x14\x90)\xb1\x97\xe0\x16A\xd3\xd9\xed\xb3\xe2 \x9c\x8d\xd8cw\xc1\x88\xf6y\xe8\xa7\xe9\x88\xfdV\x9c3\x1f\xf4!\x19_\xae\xb2 :eY,C\xcf0\x9f%<\xe5\xc9\x19\x9f\x01\xa6\x88\x9ez\xec\xeb_I\xbf\xf60\x16>n\xd8\xd1\xd1\xdd\x8c\x9dp\x06\x11\xf2A\xb4\x0b3\xdac\xef\xf9\xe5\x80}\x86M\x05\x19\xf3S\xe6G\xa5\xc1\xb4j\x11R\xb8?{,\xca\x9c\x07a\xc8\xd2L\xfc=\xe1\xcc\x9fNy\x9a\x06'a\xd1\xb8n.~\x97vRo{\x94\xd8\x0b\x80\xd6A\xea\xa5\x1e\x90~\xad3;L\xe3\xb9Cs\xa2\xd9\x01\x0b\xc7\xd1D\xca\xe9\xbb\xf7\x83\x95\xa7\xcb\xc0\xa1\xb6C\x10{\xe4\x1e\xebu\x9e_1\x95\x02\xb2\x97q\x9eh\xb6\xc2\xa0 \xcb\x16~\xc4\xe2h\xca\x07\xec\xdd\"H\x05\xe4\xe7a0\xcd\xd8\xd2\xbf\x14s3\xcb\xb9h\xc9\xc7Mm\xd0C\x07\xc8gq0s8\xc6\x95_\xc0\x8b\xc7\xa8\x80S\xb6\xa7Y\xff\xab?\xf2#\xb4\xc7\xe5\xfa\xd3\xde\xac\xbd\xc4\x07\xa42\xeb\xd04?\xcf\xe2\x93 \x9aU-\xee\xd7PA\xd3\x81u\x98f#\x98\xd6\x11+\x13\x88\x95\x8e3;b\x9d\x10U\xee\xdc\x11\xc8Te\xe1\xd0Ml\x05\x8f \x12\xc2\xdc\x9fr\x1bB\xc5g`\x87Q\x9a#\x86eXj\xc9\xb3ENDg\x9f\xe5Y\xfci\x10\xcd^\xfbAb\x89TY\x8dR\x19\xd5\x97\x99\x0f\xcbl:@\xee\x1f\xa6T\xbe\xbb\xa4\xbfw\xf5\xc0\x1c\xd7\x1bC\xbb\x8a\x1cC\"\xb6\xedJg\xf2^h4\xce;X\x8e\xad`\xd8\xc6\xf7\xda\xf5\x80sg\x85!w\xa6fm\x97M\xc7\xf9D\x0c:li\xa9\xc1\xef\xb3\xfe\x881\xcd(\x02\xd8\xd6S\xd6d7\x0d\xc6+\xe0\xac{\x05\xb7\xdc\x86H*\x06\x8a\x92w\xdb\xc1\xc0P\xbfmR\xf4\xe7L\xba\xcfN[\x03\x96\xeaO\xe0\x80\x13q;\x13\xb0\xac\x13@\x99\\_\x81_E\x85\x11\x81 \xd1l\x15\x87\xc1\xf4\x92\xfdJ\n(\xfd\x9e\xc3\xeb\xf9\x82G\xb8\x02O\x81\xdd,\x96\xa6\xa8\x02\xc4x\x89\xb3\xdf\xd0\x9d\x03\x96`\xe4\xd2\x85#^\x042\xb0\x11\xd5C\xf4\xe0\x8be\xcf\x8a\xb2\xdd\xa0/\xddA\xcb\xda\x1d8+(\x1ec\xd0\x93\\|\xc7+*7\xd6m\xe0\x15\xcc-\xbe\x13\xa1\x9fY\xf7\xfb\xea\xb1$p\xa4AY\x83\xaf~\"=\xf3Xo\xc9\x93S\xaeB\x1c\xbd\x8c?\xcbW\xa1\xd8\x90\xf9o\xf2\xcb\xd4qG\xec\xb9\x1f\x89m\x17\x8a\xb1(\x8e6\xb1\x99\x14\x08x\xe62\xe2\xc8\x82Q\xca*:=`\xf8Z\xbf\xf5.\x91\x06-\xf8\xb5\xec<\x96\xf4;\xc5\xed^p\xfa\xa9\xbf\xe4\x18\x06]l\xbd\x9dv\xd6\xc7\x02D+\xf0\xf0*\xf6\x044\x92SE\xa7~\x9eJk\xb2\xf3\xb8.\xb6u\\\xb1\xc5\xd5\x0e\xd3\x8e\xab8\x0e\xc9w\x8b\x15P\xe9\xa7\xd8\x1c\x17\"\xf5=\xbfL\x15\x0b,\x19S\xcb\x0dUeB\xd8 -\x16m\x96\x88:{i\xdd\xf70\xb04F\x83\x15\x10\xf1\xcaH\xb2\x96{\x8e\xe2\x81C\xad\xa5\x96]=\xaaL\xe2\xca{(I{\xe1\xd2\xd6#\xb2\xef\xde\xe0^\x98\xf0\xd5\xcc4\xa5\x9b\x13\xe3\x14\xc0\x0b\x1dV\xa4\xdbz<\xbb1\xe0\xad\x00\xb7\x02\xf5\x9a]]\xb6\x1e\x1524\x9e\xa3\x94\xc4\n\xec\xb5/\xd5[1C\xd1\xa9\x87P\x13\xb4\x82\x86)\x83\xd6\xe3\xe3 \x85J`\xe3\xb7\xb1E\x96&H\xaa\x89\xb4\x97\xed\x1d\xac\x88\xea\xaf\xddG\xda\xde\xa5S\x1fO\xac}\x94\xfe\xc1\xa5\x02\xa9\xb3p\x0b\xfa\x87\xf2\xf8d\xc0\xa3\x9f\xe5<\xe7o\xb4\xa6$\x86\xad}z-\x06\xdc\x11N\xca\x16g\xa3\x0e\xb0\xeb\xc3\xea\xd8\x1e\xd6\x97iF\xa2\xce\xb1\xaeT\xd7y{vB\x90\xb6\x12\xb2M\xe42\xab\xa9T\x93\x06sPV\xa2\x89yXP\x91\xd7\xee\xdc\xe9\xf0e\xf5T.\x11r\xb2]\xcf\"\xeag\xfd}\xb6\xdd\xd6>\xab\xc9,\xdb\x8f\x05L\x9e\x88\xb2q\xc4\xfal\xd8\x81O\x85\xe0\x0b\xfbH\x99\xe2\xeb\xfaA\xf8\x00\xe8\xab\"\xda\xad\xa4t\x9b[C\xe7&|\x0e\x0e\xc4\xbc\xca\xbaP6\xeaQi1\x9fq\x19\xcb\xc7>\x90\xc2\xcaWT\xa9\xb1\n\xec\x80Lv\xdcV\x81^\xe0\x10\xacY\x0evuUs2`\xa6\x7f\x85\xf8\xc4\x88-\xc5\xc9W\xa2\x7fq]]\xf0.\xe2\xd3=\xb1\xb9\xe8\xea)q\n@~_P\xc14\xd0\x14w=\xb7\x06\x91\x9c^\xad-'\xde\x04\x84\xe5\x15c\x97\x88\x9f\xb3cOO\xac\xf8\x10\xc1h\xc8Z&\x85\xe22\xa8_>\x90!O\x9d\x95n\x00\x9e\xb9\xae\xc7VN\xe6\xb1S\xf5\xc2\xd5\xcb%\xec\xb0u\xb5\x08\\EP\xc1\xe6\x0bMI\xbd\x98\xe3\x82\xacB\xef\x1c*\xda=\xd6\xc3\xc0\x07pnr\x06\x83\x81`\x98M\xd1\x16NO\xb0\\\xa15\n\xf3\xd9\xd7\xd8\xc0\xd7\x92\x93\x04f:u\xf5\xf1\xcb@%N-I\x86\x9bj\xe4w\x9a,\x93n`\xd0s\xd6\x12\xd3\x0c\x0co\xca\xe2\x91cs\xe6g\xa7zr\x00F\x0cg\xee\xca\xe0\x96\xc3\xfb;\x10\xdd\xf2v\xc7\xb3\xbdG\xdb\xe2)\x1b\x00\xb1\xd5\xc5.Ek\xfd\x12*5Z\x0b\xc1X\x1f\xeby\x96#$\x8f\xf2%O\xd0\x01\xfe\x86%\xd0\xe8)\xef*]Q[\xf3\x80\x96\xb5\x13b\x82\xc6\xbe\x07\xdf{\xbf\x83[\xe9\xb7D\x93\x8e\x9d'\x1b\xcf\xea\x08\xc4\xf6\xd9\xd0Bv\x18uz\xb8\xc1\xfao\xa3E\x80\xb7\x9e\x14A\xe3M\xa3*\xca\x927\x95\xe0&\xf5 >Iyr&\x86.\xce\xdcp\x0bXK\x1a\xc9\xa0\xbc\xe2P\xad\x12{\x10\xd1]+\xb4\x8fvr\x19:\xc7\xd6\n\x92;\xf0\xf7\x02\x91\x8a\x80\xc7\xf0\xcf\x00Bn\xa4\x98[\x8fYP\x11\xf0\x04\xb4\xcb\xa2\xb3\xc2)N@\xc8f\xb6<\x1a\xc4|\xecO\xf0\xe2\xa7xA\x07G\xb6\xbd\x8ai\"\x11\xbd\xc7u\xeb\xab-\x93\xd8\xa6\x16F\x8a\xe6\xbc6:\x08\xca\xaa +\x04\x04E\xc5F\x91\xe9\x99\xe6a\xabY\xf2\x85\x07C\xec\xbamm\xeaO\x06\x1e\xc7\x04;\xfb\xe2\xe5\x8bw\x8d\xc5?\xb4\\Q\xd5No\xb1\xcb\xb2E\x12\x9f\x83P\x05n\x119w\xdf\xf0Y>\xe5 \xeb\xdde}\x96\x81\x1b\x90\x9e\xc4`>c\xc5V\xc9fy\x82*[\x90 \x05\xdfH\xe3\x9b\x17sT\xaf\x81\xd8g\xe5\xa7)j\xe2DZ\"[\x0e\xd2\xb2\x19\x8f]\xc69\xca5\xf8\xc5*\x0c\xa6A\x16^\x16\x0bf\xc1U\xfb\xd8\xe0\x80\xbd\xab'\x81\xfe-\x8a\xc1B\xb0h\x15\xba!\x1a\x9e\xc5\xd1\xdd\x8c\x9d\xfbQ&:\x91\xf2\x8c\xf9\xd2\x01\x81X'\xa0\xbf\x93\xbd\xc2\x8eL\xfd\x08\x0c?\x80\xb9\x91\x86\x83,\x9ek-7\xb9\x96\x11\xd3\x1f -\x10\xad^\xdc{\xfd\xe6\xd5\xa7\x87\xc7_\xbd\xfc\xcd\x97\xaf~\xfc\xf2\xf8\xd9\xf3w/^\xbd<\xee\xb1>\xfb\xd2\xcf\x16\x83\xc4\x8ff\xf1\xd2q+\xa1\xcd\xb5\xe0\x9e{\xee ]\x85A\xe6\xf4z*\x80o\xe3\xe7k\x93\xdb\x15\xbd\x10\xb5\xe8\xed\x86\x01>\xdd\x00K@\xbb\xbfJ\xe2\x13\xf1\x1ed\x0b\xe63\x1c6|v\xc0>\x83 \x12\xcb5\x8b\xd9\xc2\x8ff!z\x99P\x98\xce\xfa\xec.\x8b\x13\x16g\x0b\x9e0\x1f\xd6 \x88\x18z\x08\xe1Ozh\xd6\xb5\xf2\xd1<\x8a_\x82\x8d\xd54\x06/\xa3 X\x96\x06g\x80:\x85yO\x81q\x1a\x9aM\xf3$\x01\xa3\x03\xc0)\x81\x1c~t\xc9\xf2\xe8}\x14\x9fG\xea\xbb\x1e\xcb\xa3\x90\xa7)\x0b\xb2\x1a\x12\x07\x11;_\x04\xd3\x05\xde \xa4>PAZ\x8f%\xfc\xd4Of\xd0X\x8c+\x06\xbf!\xc1\xd2\x0d\xcd\xd1\xa9\x86\xc0\xd9\x13D\xd9\xc1]\x8b&\x86\xd0\xfe95\xd3\xa0\xca\x01\xd3(\x0e\xc2\xf1\x06\xfa\xddEo)\x96\x87\xd83\x0b\x9d\xa4\xd2`\xc6\xb2\x12\x14\xc9\x80\x8f\xb2\xf8*/\xbd\xbc\x88\xceb4\xdcz\xed'>\x84u\xff\xb2\xf0\xb1\x9b\x15\xac\x84\xf4\xf4@\x124\xf0\x16$\xb6\xae]\x97\xd8\xbbD\xd6\x83]#+(\xb2\xf6\\\xf2X\xeb[\x95\xba\xd2v\xa4\xb2\xfey\xf3\xfa\xb7\x1e\xc0\xb5\x05_\x1bj\xa2\xe6\xd8[\x0bd\xb1^\x8d\x82\xff/1\xe9\x15\xbds\x04\xe5%\xa61P3L\xcdU\xf0}\xcf\x15E\x9c\xed\x8e\x9f\x82\x1a\x89\xa6\x0e\xb5\x1b\x81\xa4\xb9\xa5'\xbb\xb7Y\x9cp6\x8b9zc^\xf8g\x1c%\xf3\xc1L\xc9\x1c\x06\xecK\xff=g\xf2*//#\x8c\x94J\x85\xfa\xe6\x1b\xa4\xday\xf7|\x11\xa7\x1c\xa7&\x05\x99\xb0l7\x1d\x10\xc1k}I'\x0b\x14s\x0d\xed\x13\xba\x0d-\xb6\x84\x17\x19\xaaM\x07A\xaa^\xf5\xb8.\x85\xbbd\x1f$\xd8A\x8aB\x91\xe2\\\x9e\xd5\xa2\xa2\xa8\xc1e18&\x88*\x81\xdf^,\x979\xc4\x83/\xbeZ\xdec\x9a\xc7a\x18\x9f\x07\xd1\xa9rx\x10\x80S\xaa\xbb\xac\xcf\x02T\x1a\xdc\xedy\xacw\x17eL\x83\xbb\xe6\xd8\xe1\xc0%f\xef-\xff\x19(#\xf0\\\xe8\x0e\xe6A\x98\xf1\xa4\xe5\xa8 \xc7\xbba\xdc\xdf\xaa\x1da\xeaZ)Y/\xd7e\xc0\x07\xac\xa7]\x19\x04\x81\x04^\x94,J\x1d\xb0\x9e\xf2\xeb\xd0c\xa3\xe2G\xc0S\x14\x97\xe1\xc0ss\xe0l\x1e\xe7\x118\xa5\xbe\xab&E\x03\x7f\x16\xb3y\x10\x15a\x83\x04\\Q\xf0\xaf\xe4_\x853 \xbcC.\xc5\x1a\x0dp\xd6\xef>\x96\x9dD\xff\x13'\\J\xeaf\x83\xbbuw\xca\xb7\xbf\x1b\xde\x1aE\xf3\xd6\"\x0euo\x9c]tH\xa4d\x13UH\xa0\x1a\x12X\xaed\xa7\x97+)\x0bEQ\xe7\xad\xc8?\xeb\x02(M\xb6y+\x13\xa4W\xacB\xab\xa0\xd0b\xd7\xae\x07\x00/\xe7\xa9:#]>\x199\x8fP\xc4\xfd\xe8\xa1[\xedy\xe4<\xd8\xdb\xead\xe0Y\x1e\xa1\x87\x86\xafC\xe9l\xf0\x91\xeb\xf4\x8a\xd8\xe0\xa4\xad\xf3\xde\x96\xc5\x8a;r\x86\x0f\\\x8d\x8a\xaeq*\xb0\x1d\x084ER6\x8e\xd1c\xad\x16\xbb\x1c\xee\x14@4\x81:\xcdJ\x1c]~\xd7 \xc0\xcdV\x86\xf7~\xe2\xfc\xca\xf6\xd6\xd5Q\xea~\xe2\xfc\xd4?\xf3\xd3i\x12\xac\xb2\xab\x99\x9f\xf9\xee\xbd`i\xc2\xf2\xde\xf8'G\x17\xdb[\x9bG\x17{\x87\x93{\xa7\xf5\"\x01\xb69\xfe\xc9h\xd2wG\xf7N\x97\xe6qk\xdc\x1b\x08Bt\xaf7\xa1\xe1]\x05h\xeaGA\x16|\xc3\xbfJ\xc26a\xd5\x99\xb4\xb5\xf1\xe4\x8e!\xaf\x95\x89cA\x8fRKw\x12\x10j\x05\xfd\x010\xec\xaf\xe6\x0e\x1foM\\\xf6\x94m\x12\xee\x97\x9d\xdc\x95&\xe7N\x04\x12\xc0\xa5\x9fM\x17N\xe0\x8ad4\xd9\x11\x873\x96\x0c2\x9ef\xe8\xb6\xa4\xe7\x9f\xc4y6: \xfd\xe8\xbd\xd86r\xb8\x1d\xae'V\xbe\xb3\xa6\x15e\xb9<\x1e\xd8\xec\xff\x1f\x0e]#\xdci\xc3f\n.\xa2\x07Y\xfcE|\xce\x93\xe7~\xca\x1dpG\x02\xfa\xa3\x03&\x90\x94\x8d\x0c\x1f\x1f\x96\xe5\x15\xaf7\x84]\xca\x9e>r\xb6\x1f\xda\x96\xaf}z\x95\xb0\xdbI\x1c\xeeVG\xb3\xe6\x1a+\xbb\xb7W\x17]|/\xa6\xe4`H\xdelF\xde\x0d$g\xff\xbf1y1\xc7\xf5 \x8e\xba\xd9\x8cw\x03t!d\xb9\x96\xe5\xb8\xbe\xa2)\x84\x13\xeb\xc1r\xa3g\x8f\xf2\xaf\x0b\xcb\xea\x9aCh\x96\xf5\x80\xc5\x03\x19\x94@\x814F\x12\x18 \xd1\x90\xe2y\xa34\x93\xa8\x0e\x96\x91hd\x91\x0d\xa6\x0b?y\x969[\x16%L*\xcb'N\xe4\xb1\xa1\xb2P\x82\x08!\xd9 \x0d\x83)w\x1a\"\xb0\xe4c>\x01\xc5wU\xd8\x7fm\xda\xbb\xfd\xb0\x1d\xc4\xf6cl\x0c;\x9a\x14\xdf\x93\x98T,2\xe9\x02\xea\x80\xc5\x82w\xf7\xd8\x06\x98\x01D\xec\xe9>\x8b\x95Ux\xf1\xa9\xeb\x8e\xe6\xc1^\x9d l\xc1\xbb\x9b\xd0g\x8e\x08\x02\x97\xb4\x92\xf6\xc5b\xe3h[\xbf\xc4Ks\xb65>\xa1\x10\xb97>:\xcag\x0f\xb7\xb66\xc5\xff\xf9|^\xbf\xf4\x96\xa8B[;Xhkgw~t\x94\xcf\xf96\xfc\x9c\xf3m\xf1s{k\x06?\xb7\xb7\xcc&\xe0\xc6\x00|fg:\xc6\xcf\x9c\xd8>\x07\x86~\xe3\x9f\xb4t\n.\xf49\x07#\xbd\xd1\x19\xdf\x85\xe2\xb3\xf9|\xe2\xfe|\xfb\x03y\xc5Oo\xf7d>\x9f@\xc2\xd4\xfe\xa1T~\xa8\x08\xe1sU\x84\x01r\xc5[\xef\xa0V!T\x9f\x99\xf3-\x8e\xff\xe6\x93\x03\x15\xe1\xc9\x91\x9d\xde\xde\xda\x9a\xc9V\xc7\x18\x93)\x9f\xc8\x95~\x85A\xe2\\k\x1b=\xf7\x93\xfaY`\xaa\xf5r\x1c\xa8\xae\x1e\xf4\xf0\x1a<(\x08\xa3z\xfb\xb5~\xcf\xd9\xbe\x0c\x8c\xe0\xc0\xe8\x9c\x83\xfdr\xa40\xe8)F\x8a\xec\x9d\xf6\xae\xbb&\xb8\xe4*\xe7p_t<\xb9\xee2\xde~hc\x08m\xcb\x98\xf2%/G\xdb\x1b\xdf\xfdo\xbf\xf3\xbb\x93\xde\x8dF\xd6\xbc\x9d\xa8\xdd\xdd \x1c\xb1o\x14,\xbe\x0f,\xbe\x0b\xce\x1ez\xbd\x1b\xdd9\xd2h\x9c\x058\x06\x0b\n\x87\x9e\xf1\xd1\xc5T\x1c\x8bf\xbbG\x17\xb3\x87\x9bG\x17\xf3\xdd\xa3\x8b9\xbc\xcc\x8f\xf2\xad\xa1X\x19\xf9\xd6po>\xb9w\xda\x00\xc2u\xc9\xc3M`\xed\x80\xd0\x1a\xa4\x82 \xa9U\xd0\x0c<\x96\xd4a{} \xdew\x9d\xea\xd7{\x7f\xf8;\xbd\x11\xeb=\xab\xad\x9b\xde\x1f\xfe1:\xf9\x8f\xd3\xc9\x7f\x82N\xfe\x1f\xe8\xe4?I'\xffC\x91\xec\x1b\xc9\xff\x88N\xfe\xc7t\xf2?\xa1\x93\xff)\x9d\xfc\xcf\xe8\xe4?-\x92\x9f\x1b\xc9\xff\\$O\x8d\xe4\xbf\"\x92\xeb\xde\xf1{\x7f\xf8\xefD\xf2\xccH\xfe3\"\xb9\xee;\xbe\xf7\x87\x7f\x96N\xfest\xf2\x9f\xa7\x93\xffg\x91\xcc\x8d\xe4\xff\x85N\xfe\x17t\xf2\xbf\xa4\x93\xff\x82H~a$\xffE:\xf9/\xd1\xc9\x7f\x99N\xfeW\"90\x92\xff5\x9d\xfco\xe8\xe4\x7fK'\xffU\x91\xfc\xd2H\xfe\xf7\"92\x92\xffG\x91\xfc\xcaH\xfe\x9f\xe8\xe4\xbfF'\xffu:\xf9o\xd0\xc9\x7f\x8bN\xfe\x0f\"96\x92\xff#\x9d\xfc\xbf\xd2\xc9\xff\x1b\x9d\xfc\xbf\xd3\xc9\xff\x89N\xfe]\x91\xfc\x95\x91\xfc\xb7\xe9\xe4\xbfC'\xff]:\xf9\xff\x14\xc9\xb9\x91\xfc\x7f\xd1\xc9\xff\x99N\xfe/t\xf2\xdf\x13\xc9\xf5\xd8\x01\xbd?\xfc}\x91|i$\xff\x01\x9d\xfc\xa7D\xf23s9\xfc\x9eH\xf7\xcd\xf4\xbf/\xd2\xdf-\x8c\xf4\xff*\xd233\xfd\x1f\x88\xf44\xad\xa7\x7fK\x93\xe5oi\xfa\xfb-Mh\xbf\x05\"n\x90\xb7o\xff\x04\x9d\xfc'\xe9d\x80\x80A\x0c\xbf\xfd3t\xf2\x9f\xa3\x93\xff\x02\x9d\x0c\x84\xd6\xa0\xa8\xdf\xfeY:\xf9\xcf\xd3\xc9\x7f\x91N\x06\x12d\x90\xe5oij\xfd-P&\x83Z\x7f\xfbW\xe9d \x13\x06\xfd\xfd\xf6\xaf\xd1\xc9\x7f\x83N\xfe[t\xf2\xdf\xa6\x93\x81\x04\x19\xf8\xf6\xed_\xa7\x93\xff&\x9d\xfc\xbbt\xf2\xdf\xa1\x93a\xcd\xfe\x9a\x91\xfc\xf7\xe9\xe4\x7fH'\xffc:\x19\x16\xe7\xa9\x91\xfc\x0f\xe8\xe4\x7fD'\xff\x13:\x196\xfb_7\x92\x7f\x8fN\x06\x1e\xc0X\x98\xdf\xfes:\x19\xb6Xc\x07\xfb\xf6_\xd0\xc9\xff\x8aN\xfe7t\xf2\xbf\xa3\x93a\xfb66\xb6o\xff%\x9dLo\x9a\xdf\xd2\xbb\xe3\xb7\xff\x9eN\x86\xed\xe47\x8cd\xd8N~j$\xc3v\xf2\x9bF\xf2\xff!\x92\xdf\x1b\xc9\xff\x89N\x86\x9d\xe0\x0b#\xf9?\xd3\xc9\xbfO'\xff\x01\x99\xfc\xdd\x1f\xa3K\xc3.\x13\x1a\xc9\xff\x85N\xfe\xafd\xf2w\xbfC'\xffq:\x19H\xaf\xc1\x8d|\xf7'\xe9\xe4?M'\xff9:\x196\x01\x83\xa5\xf9\xeeO\xd1\xc9\x7f\x86N\xfe\xf3t2\xd0o\x83I\xf9\xee/\xd1\xc9\x7f\x85N\x06Bm\xf0\x17\xdf\xfde:\xf9\xaf\xd2\xc9@c\xdf\x18\xc9\x7f\x83N\xfe[t2P\xcd\xc4H\xfe\x9bt\xf2\xef\xd2\xc9@\xa8\xdf\x1a\xc9\x7f\x97N\xfe\xfbt\xf2?\xa4\x93\x81\"\x1b\\\xc1w\x7f\x8fN\xfe\x07t\xf2?\xa2\x93\x81\"\xbf3\x92\xff)\x9d\xfc{t2\x90\xde\xccH\xfegt\xf2?\xa7\x93\x81\x98\x1aL\xe1w\xff\x82N\xfeWt\xf2\xbf\xa1\x93\xff\x1d\x9d\xfc\x1f\xe8d\xa0\xb1\x06\x0b\xf9\xdd\xbf\xa4\x93\xff5\x9d\xfco\xe9\xe4\x7fO'\xffG:\x19H\xef\x8f\x8dd \xbd\xe7F2\x90^\x83\xc7\xfd\x0eH\xaf\xc1\xcc~\xf7\x9f\xe8\xd2@z\x7f\xdbH\xfe\xcft\xf2\xef\xd3\xc9@L\xbf1\x92\xff\x0b\x9d\xfc_\xc9\xe4oav^\x98\x1b\x0f\xc0*0v\x9e\xef\xf0\xb8fp.\xdf\x01\xb3\x14\x9b\xe9\xc0X\xde5\xc9\x1b\xec\x1bi\xa9\xd9\xb5)Hi\x8f>\xd7\x16rw\x12\xb0\x11\xce\xd4F`\xa3[\xa9p\x03\xc9Z=\xf6\xa3\x12;R\x96\xdf\x84\xc4M\x9am?l\xf7\xbcG\xabT\n\x0b\xc5}\xd0+x\xba\xea\x04u\xf4\xfa\xc0AA%\xd5\x10~\xa9\x86\x80\x00T(\x87\xcd\xba\xc9a)\xb5\x01\x18Tlmm\x1e]l\xcf\x8f.v\xfc\xcd\xa3\x8b\xfb[G\x17\x0fN6\x8f.v\xb7\x8e.\xf6\xc4\xcb\xde|\xd2\xbfw]%\xa3\xeadt\x93N\xfa\x9b\xdfL\xc6\xcf6\x7f{r\x05\x7f\x7f\xbe\xed}\x80\xb4\xab\xf1\xd6\xe6\xa3\x89x\xc5L\xf9\x02\xa9W\xe3\x9f\xe0\xcf\xad\xcdGlr\xef\x9a\xdd\x8f\xd0Pb-\xb5O\xa1\x939:\xba\xf0\xa7GG\x17'\xc3\xa3\xa3\x8b\xd9\xde\xd1\xd1\xc5\\\xfc\x01\x01\xab\x008B\x1c@\x8e0\x07\xa0#\xd4\x8f.NP\xe0\xba%\x05\xae\xbbsvt\x94\x89\xea'GG\xa2\xae\xbf\x05r\xd9\xf9\xfc\xe8(::J\xa0\xd0\xf6C\xfc\xf7\xe8\xe8(\x1f\xee>\x14%\x86\x0fA\xf9 \x1a\xc2\x7fC\xfc\xb7\x8d\xffv\xf0\xdf}\xfc\xf7\x00\xff\xed\xe2\xbf=\xfc\x87mn=\xc2\x7f>~\x01;\xf7@\xfc\xdb\xd9\xda\xda\xaa\x11\x18\xd46\xf5X\x9fE\xac\xcfz\x16M\xd2\xac\xdf3\x17\x1cH\xa1\xb7\xf7\xe4\xb0\xf7Nh\xa5\x91\x98j\x01\xd4\xb9\x80\xd4|\xf7\x08\xa5\xddG\x17\xa6\xea''5Q\xaak\xa0\x18\xa9}\xd0\xda\xf4\xb3\xcd\xdf>BA;H\xdaQ\xd4~t1\xe36u\xd3\x1az\xad\xf0Zz-\xd0\x18\x8d;\xf7k\xae)\x98\xfcB\x0d\x96S\x8a\xa4\x95Vt\xda\\t&\x8b\xae\xa9>\xb8\xb2\xa9\x12\xdd\xba2naU\xc6\xcd,\xca8R\xf5\xc8R\x8f\x85\x9d\xf4s3Z?wV\xd1\xcf\xd1\xed\x89\xbc\xda}\xcbe\xa9b\x19OQ\xa3\xa7\xe0\xdf\x17`\x03\xc5\x95s0\x9a]\x85\xe1\xd5\xf2*\xe1W\xe9Uvu\xc6]\xf7@\xaa\xef\xc6\x89\xc7\xa6\x1e\xeb\xfd\xb0g\xaa\xff\xd8\xcah\xe8\xb3\xab/\xbe\xb8\xfa\xf2\xea\xcd\xe1\xd5\xdb\xabwW?:\xac5\xc4\xfalnk\xac\xec\xdf\xbcK\xffT\x8d\xb6\xcf\xf79\xc0\x1d\xeb\x87\xd7\xa6\xec\x1b\xce\x06\xd8t \xea\xa6l\x10\xc0\x14\x97\x1d\xb0\x15\x18A#\xe3\xef\x17\x0eG\xd9Z\xa8S\xdc\xb5~d\xbdk}o\xfc\x93\xc1\xa4\xff\xc3{\x03~\xc1\xa7N,z\x10\xc35\xb1\xf2m\xf0\xe2\xf0\xf8\xf5\x9bW\xef^\x81\x91~\x0f\xac\xb8{\xe8\xc8\xd1I\x93\xa9{<\x1c\xa0E\xd3\x88\xf5z\xd7\x85\xc4F >\x18@`\xd6k\x8c\x14\x91~\xcf\x1d\xf7\x8e\x8f\xa7q\xc27\x7f\x9a\x1e\xa7\x0b?\xe1\xb3\xe3c\x9b\x95\xfdu\xa5\nv\xdf6\xed2\x83\xf6s[7\xb0\xa9\xad\x01\x88\xcb\xc2\x87\xcd\xe3\xce\x1de\xde[!JcN{\x05)\xe9\xd2\xe6>\xcb\xd8\x01\x1b\xb2\x11l\xda\xd7\x05\xbf\xa0\x9e\xc4 \xeb\xf88\x8cg~\xba8\x16{\xfdqqg\xe8\xf8\x988v\xb5\xb8OX\x17\xb9*PR\xf0\xa8\x02#\x983\xc7pZ\xcc\xb4\xf3sf\xc0\x8fULN\xf7\xd1\xa6\xb4\x98\xee\xa6@J\xb2VPx\x15\x86\x95.\xbeP\xd8\xfd\xde.\xf0\xbf\x7fx\x16\xc6\xe7\x07\xd5+>0\xc4X\x1b\xf8\xed\x0e\xb4\x01\xcb\xda\x06\xd9\xe4=\xacu\x9c\xe5\"\xeaW\x17#rdC\x8fEb\xe8\xfbh\x8d\xaf\x89\xd82i\x9d\x9c!\x83pS\x02\xd1\xc6\x96\x8c'\xb7\xc4\x88\x0cw(\xf6\x18\x83\xd7h\xcc\xd8*\x0c\xa6\xbc\x0d\xf2\x9d\xd0\x8bf}\x13D\"rN6\x9c\x88=A\xc7\x11N\x04\x9e\xa0\xd4\xd5\xd4M6\x14\xebm\xb0\x8a\xd1WD\x89\x8f`\x1e\xef\xb1\xcd\xcd\x02H\x1e\xdb\xba\xd6\x9e[@\xe9\x174z\x1c\xbb.\xba\x1dG\x93\xf1\xb0m\x0b\xba\xd5\xa1\x146\xaa\xd5\xb1\x08rW\xb91\xf6\x11\xba\xd2u5\x9b\x80\x8d\x01\xb0\x91\x15\xb0\xb1\x04\xac\xd3\xefkH\x12a\xec\xd0\xb1\xf8\xf0\xc4\x85\x08P\xe3X\xc0[F9j_\xdb\x0d\xc3\xddn\x1d\xae\x0d\x89\x12\x15\xf9\xcd\x95G+\xdb-\xa1\xebr\x01\xad\x14\xc9\x8e\xdf\xd2S\x1d\xd9\x9d\x1e\x9e\xe8\xd1\x81\x1b\xf0\x9bQ\xbe<\xe1\x89\x96\x90\x02\xe7\xa9%\x9c\xc4q\xc8}\xe9\xf4M\xf0\xa6\xc7\xc7@\x89\x8e\x8f{2\x10\xc0Hs\xce\xf7}\xceFe\x1d\xc0d\x9c\xf2\x0eb\xfc\x8f\xdc\x07\xdc\xa1>f\x1f\x1a\x16a\xd9\x0fz\x05F\x80\x8c4e\x03\xc1\x034\xeeU7\xdeHnk\xc8\x8a\xc9\x8d\xf7fK\x8f\xb6{7\xae\x8eI\xe5\xdc\xfdV\x90X\xa6\xa5(\x80{\x10\xe9u\xef\xac\xe2w\x9d\xbcI\x06\x8e/b's\xa9\xfa\xaa\x8dT\x11\xb8\x1d\xa2\x05&o\xaa\x05\xe0{(j\xec\xbb\xfe\xc8q\xa4N>\xe6\x13\xb8|\x90wu3k\xa6\x9cI\x8f\xbc\xbc\x00\x87\x95\xf3\x0ea'a\x07,\x1f\xa7\xc0C\x87\x82\xc1\x0c F\x9a\xb1\x1bH\x03w\x87\xf5[ \xf2\x02\x84!`AL\xd8~\xd4*A\xb2\x12\xc6\xd8F\xa3\x87\x15&\xe6\xce\x1d\x96\x8d\xb7&\xe3\xed \xde\x19\x14\xef[\x82\xbd\x13/\xc3\x89\xd8\x82\x8ao5\xdd`\x8e\xa4\x13Q\x88\xb6\x16QAB\xaf\x0d\xb5\xa1qwF]\x8d\xa3\xa064%U\xdbm0\xc4\xaf\x0bd#\x80\x99\x02\x1d\x91n4\x8d\xe1\x0b\x04K\xcd\xe4)\xdbg\x1b\xb9y8,\xce\xf4\x85\xdf\x98\x8dZ\xfc\n\x10\xb0\xf2\x8a\xc7\x03\x96nnZ\xa5\xabs\xd1\xbdqjq}=\x85`\xa18\xbbs\xc1G\xc0\x166\x9e\x8f\xb7&\x02\xb97\x1c\xf1\x06b\x92\xd2\x93\xcdFS\xac\x0f\xe8\xdec\xd6\xef\xa7\xec \x0b\xad\xbdZ\xb1}\xe6\xa8\xae\xb9V\xe7i3\x10\x0d\xaf,\xb9\x0b1IV\xaf\xde\xc5\xd0l\x04\xa5\xe6\x90\x04B\xdco8\xab\xe6\xd1\x8aG\xc6}\xb7\xd3\xbe3\x86Q)\x1bBQ\xe7.\x94\\\xb2}\x96;3\x8f-<\xb6\xc2U\xe1\xb13\x0b\xc5\x04\xba\xabwy f\x12\x0b\x8f\xcd<\x16\xb0+y_\xeeL,\xcae\xf3\x08\x1afP\xd5\xba\xc1\xa1\xad\xf5\xeai}J\xea\x07HT\xd1\xacu\x86\xbc\x01\x8b\xd8~\x04\xca:\xf3\xb5\xa2\xac\xe4\xd5o\xbd\xc3\xfa\xc7T\x7f\xbb\xf1x\xb7\xf4\xad\x9b\xf2r\x16\x8d\xe0C\xea~\x9fH\xaf\x97\x07b\xbd\xd5\xead\xa1\xeb\xa9\x8c \xbfLy\xd9\x8a\xe7ft1\xa6\xb1G\x91\xa5\x15V\xf0Gb\xab+\xdcT=a>\xdbd\xc3bM\xe6\x95\x83\\\x15\xd3\xfb\xfdH\xa2\x90H5\x9b7\xc6!\x17L\xe0\xe4\x1d\\M[\xf8Z\xc5\xd6\xde\x90\x93\xb5n\xc5u1\x9ade\xb7\xa9x\xa7\"\x9d\xd2\x1c \x14\xaa\xab?Sl\xbf\xaeq\x08ew\xea\xcdL%\xdfTO\x9f\x9b\x9c\xc1J\x0f\xac\xfaLy\xf0\xac\x9b\x97\xcc\xaa\xa5\x12\xff\xb2^b\xa1\x97\xc0M\xbb^\xe4\xec\xe6\xc2S\xc5\xa2,=v\xea\xb1K\n\xffO\x04+\xe2PG\xa1c\xc8\xc9\x88\x9cs\xb6\xcfN\xd8\x01\x9b\xb1\x11\xcb\xc9\xba\x87l\x9f\x1d\x17%\xa86.\xc4^/\x1a:\x17\x9c\xcd\x8a\x1d\xb0\x05\x1b\xb1sW\xfc\"8\xa6\xb7\xa2\xb8h\xf5P/~h+\xfe\\5|h.\xe7\xe7bK\x0fA\xd7e\xaedX\xa5!\x9cb\x8a\x8d\xd2\\l'\xe0+\xc5\x83A42>\xc5\xf76.\x8a\x06/A*x\xa964\xd7c'\"e\x8a\"\xdb\x98\x98\xb5\x11\x0bd\xeay%\xc3\x1c\xdb\x86\x13\xb1;lN\x0eM\xcc\xf6{\xb6\xcf.@\x0c\\\xb8\x96\xe9\x1d\x1f\x9f'\xfej\x05\x82jb\xa2\xc4\xf3\x8c\xed\xb3\xb7Z\xb5\xac^\x8d&w\xef\xc5\xb8\x9e5\x9d\x07_\xb1}\xf6\x9e\x1d0>\x00Wr \x11mp\x9a\xfe\x9a\xed\xb3g >-\x8bg4[d\x05\xf6\xa9\xf3\xcac\xaf\x15\x1c/\xdb|^\xd3l\xd0\x06L\xaac\xb6\xee\x9b\xd3w\xfd\xad\xd1\xd8\xea\xe4\xc1o\x9b6\x96\xd9\xdd\x1ev\xf5\xe3zv\xcbf\x1du.M\xb7\xef\x80\x02\xfel\xe6\x80w\xe1\x1a0\xc4\xe3k\xf4\xcd\x9f\xcd\xc0\xabP\x99\"\xb6D4\xca\xf0\x0d\xfb\x8b\xa0jj\xe1\x93\xf0\xad\x037\xba\x99\xae\xa6\x13O$w\xd3\xc8\xed\xb4s~\x9f\x8cX\xfb\xb7\xec\xbae\x00\xbb\x93\xb5}\xc2\x8a\xd06/I\x86\xb9\x93d\xf5\xb6(7\x17\x14\xdf\x90K\xfc\xafo\xf8\xa9L\xaf\xb7\x13\x9a\x1b\xbb\xe0\x01\xb6\xcd\xed\xbf\xd8\xa3?E o}\x93\xae\xf0\x03\x9f\xf9\x99aiZa\x05\xc0\xa3e#+\xf0\xa5\xbf\xa2\xf8\x00-\xd8\xfb\xf2\x84\x1bM,\xf5\"h\x97R/r\xaa\x17y\xcb\x0dn\xe3\xb2\x92\x0f\x12\xf0z\x91\x93J\x11\x10\x81\xd7\x8b\x1c\x1b\x8c\xcf\xa7\xf9|nv\xf8\xbc\x066\xffG\x01?\xaf\x17:,\x9c\xaa\x15\xeb\xde\xe2\x9b\xea\x02\x18\x83\x03v\x88\xfb\xc2\xabyg\xd7k\x8aX'\x1e;\xf4\xd8[\x8f=\xaf\xe3~z\x1e\x80\x0f4R\x8e\x05q\xdc\xceGF:\x93; \x1f\x9c\\f\xfc\x0bd\xf77\xc41P\xfb}u\xc50\xff\xd5|\x9e\xf2\xac\xcc\xc7\xdf\x8d\x1c\x88x8x\xa3:\x01\x00{\xd2\x1b \xfe2\xcbCG\x8f\xe9\x8e\x16:\xcb\xb6\xden\xbcu\x04u\x8f1\x18\x0c\xbce\xaeKl\xfe\xf0\xb5\xb9\xf95H_Y\xd2\xcf\x1a{\x178}\xee\xb1>%y\x86\xda\xb3\xc6\xda|\x10\x81Oq1&x\x03O+K\xe53\x1c\xc2\x9d\xe0\x0fK\xf3KK\xa7/\x9b?\x8b\xfa\xa0~\xc5(\xa9R\x7fA\xd7W\xbcZn\xa9vj\xaf\xf6\x0c5\xfd,\xb4\x8b\x8b\x80/sD\xfb)x{\x85\xb3\xde\x86\x12R\x00\xbb\xfa\xac\x15\xfb\x14\xfb\xf6\\\n\x1b\xec\x9f{U\xb4\xf5\n\xe0aa\xd8\xd8\xd5>\x9bz\xecyy\x14\xb5\x7f\xf858\xb4{\x0f\x88\xf8\x1eC\x15\x94\x0b\xb8\x91!|^\nm<\xf6\xda\x02\xde\x13\xfb\x8a.\xf9\xf8\x0b\xe55P\x0cJ\xfe\xb0J\xaf\x99\xb6\xce\xda\x94\xcf\xed[\xf4\xba\xec\x9c\x0c\xe1\x04\xd3K\xcb\xaa\xb8\x195\x82\n\xa5\x0e\x0d\x8e\xfb\xfdl\xc2\xf6\xc1\x86\x9e\xd7\xee\xa2\xb9\x1fC\xc4\xf5q\x86\xd786\xbe\xf6\xb0\xecv\xb3\x8f(\xf1\xc7\xd0\xe4xn\xe9\xb0\x8f\xf2\xde\x94\x02\"\x08@\xd8\x1d\x16\x9bp\x9c\x82f\x8e:\xcb\x0b6hJ\xf2\xffb=\xcc\x05\xe1H\x9c\xcc\xd5tC\x1b\xa1\x95z\x14\xd1\x8a\x04\xe34\x7f\xccV\x0dJ\n\xc1:M\xc7+\x8b$\x7f\xc3 A\xc0\x00^\x9aG\x9aA\xdb\xcc\xed\xa8\x95\x10\xdfX\x80\x190E\xc1\xc47`4\xa9\x0c\x87R4\xba \xa8\x98\x12\xf0o\xd4\xbc\xab\xa6\xba`-U\xf1P\xea\xdf*\xa0\"\x18\xb9P\x1c\x9eV\xec \x9b[!s\n\x1a\x10\x05\x1f\x8b\"\xe4\x12,\x07g\x16\xf0\xf9n!\xfe \xe1B\xe5%\x1cWg\x80E\x1c\xf0g\xc4|G\x9c`!\x15\xd1+\xb5)~u\x05\xc4 ;\x10=\xdc\xdf\xc7\xd3w.\x1bA\xd4\x84vO\xecJb\x90\xa8\xd0\x14\xfc$\xe1\xfe{#\xc7T\xe1.a{\x03\x9exZ\x1a\x92\x83m\xc6\xac\x89>\x83\xea\x07\xf0wi\x03\xfc1\xb0\\Z\xab4\xe8\xcf\x81\x17\xd3\x8a\x99\x03:\x16\xeb\xe6\\|\xad\xda\xc9@F\xec0R3\xd4D\x91\x01\x06\x8fE\xde\xb1.\xa6\x86\x14\xb2,|\xf3\\/{\x8eF\xdf\x08\xfa\x0e\x1bX\xaao\xa1\xc5\x0f\x81\xe0g?\xa8V\\\x9f\xf4\x13\x87\xcfJ|\xc7\xcd!F\x83\xb5 (\xd0\xdc|\x0b\x03>\x8e'b)E\xec K\xacK\xc9\x87\xa5T\x8fZ(\x9e\xcc\xf1\x01i\xd1\xac\xd9 \xc6q\xbf\x0f\xb1\x0e;\x80(\xf8\xde\x00\xa1\xa23\xaa\x91\xf2\xc7.K0(cf\x04'\x91\xbdKZzg7E\xa0\x05\xf9\xf7\xa9\xfb\xe2\x94\x94\xbcm\x0b\xb3\xc8\x1dbiZ\x9eHf\xeb\xc6\xd0\xb5|\xa7\x953[\x170C\xcbMz\x03`>\x84)-\xc1\xe3\x8f\x0b\xf0}\x1e\xc6~\xb6\xb3-\xb5\x08\x80\x80\xb5\xcc\xdd\xfbt\xe6\x8b({h\xcd\x19\xeeZ\xb3l\x1f\xfb*\xb06\x08Y\xcfC\x7f\xb9\xe23{ \xdb7E^\xe5\xa3\x1b[\x9e\x9e\xafaP\xad&\xdd^E\xf0P\xcb+\xe48\xb5\xf4R\x08afp#Q\nr\xea\xb3!q\xc5\xc8\x00\xa9N-MIrj\xc9J\x17TKVB\x9dZ2\x08r\xeaiRxSK\xfe1\xf7\xdf\x17\xfd\xd8\x18z\xeb-\xc1@.\xc1\xd8\xe1E\x94&\xb1\x1fm\xf8c\xb1*o`\xdaK\xfb\xa0\xd85\xac\xdfn\x81C\xae\x8f\x0dc5\xe9\xf1\x98L\xfb'u\xf6\x18O,,[$6\xe7\xc2\xec\xc6\xd5\x9c\xf6G\xae\xb9\x91o\x00\x03~\x87e\xa8\xea\xb5\x10\xe86\xcb\xd7\x86\xb3\xc6\x9e\xebh\x81\xb6<\xd93\x8b\xe9\x05}\xfd\xc8N\xe5v\\\x07\xae8y\xac\xa7\xd6\x8b\xed\xe2\xd9\x0d\x9a~\x9d\xc4\xcb \xe5\x1f\xa1\xe5\xb7<\xfb\x08\xad\xca\x95uK-o\x1b\x97v\xe5\x8aX\xdf\xc0\xb3\x12\x856.B8gE\x00\xda\xa8\xe1\xf4\x15\xc0\xf1!\xb2\x1c.\x90m\n(\xb6 \x99\x0f\xe9\x06\x96\x95\xd2E0\xcf\x9c\x06D\xd5.\xfe\x03k\xd1\xb64E\xf9\xc0\x89\x8b\xbd\xcb\xde\xb2x\x00\xf8q\xc3\xa2\xa2)-\x99\x8aS\xe1$\xec\xa9\xf4%\xa6\xf6\xbc\x91\xd8\xc0Y\x9f9\xd2\xc8\xfd\x80\xf5\x9e\xdc\x13TM\xfe\xee\xb3\xde\xd3\x9e^Jn\xa0\x82\xa1\x8aD\xe9\xa3Hf\x83\xa6\x10\xe4\xa0\xd4\xc2\xb3\xcfb`\xdf\xc2\xd4)kC\xc7\x138J\x96\xbf\x07\xfej\xc5#\xf0\xef\xe0\xe9\xf84\xc0\xc4\xb8\x92\xa8\xcc\x18\x9c\x0dq\x06\xdd\xd8\xeaB\"\xe0N\x06br\x01\xb5*\xbc4pi\x80*W\xbf2s=`=\x86e\xb5\x072\x0e\xd6\xabN/\x8a3\xe6\xa7ip\x1a\xf1\x19\xcbb\xe6\xb3\x95\x9f\xf0(\xdb\xa0\xf8\x07\xf5\x9ci\xfe\x91\xe8^\xaa\xa7\xf4H\xa3 f\xec\x0d\xe7\x8e\xd6[IT#\xaf\xd2\x02\x8a\x80\xfa\x82\xc1P\x94\xd6\xf5\x9agE\x7f\x14{\xe9P\xbc\xa2zlT\xca\xc2f\x08\x9a\xd7uJ\xb4\x0d\x17\x0d<\xc4\xd0\xe0\x84\xcb\x95\xd7\x1d\xc1\xe7\xaa\x1c\xd1\xd3\xce$\xd3*\xfa\xac]d+~}pK\xc7\xc3\xce\x83\x07\xf2\x80\xdd$\xe8W\xdbyu\x80\xbd;\xbd\x11\xeb\xdd\xf1\x97\xab\xc75\xa2x\xb7wW\xe4\xfc,\x8f\xb3zV\xef.VZ\xc5\xa9\x91\xf5\x04\xb2B\xb3\xceS\xc88\xcd\x1ek\xc1\xfa\xda\x04\xe3\x16\xa9\xb8$^\x92\xb2\x01\xf1*\xc4=\xce\xf8N\xef\xc9\xd3\xbb\x18c\xa1U\xd8\xa6\x04\xccFP>\xe0\xd9\xca\x8e\x92\xd0\xad\x91G}\x08\xf1\xe3\n\xdc\xa5\x19\xc1\xa3\x1dwpx\xc6\xa3\xecp\x19d\x19O(o\x1f\xe6A:\x913\xbd\x08\x0cu\xb5x\"\xe7\xe1\xd0ub\x0f\xfc\x97\xc4\x837%\xc5\x14_\xbc\x0f\x89?N\x82\xacH\xdc\xdd}\x00\x89\x9f\xe5\xab\x90_\xc8\xa4]Hz\x97\xf8Q:\x8f\x93\xa5L\xdd\x83\xd4\xd7~\x9a\xbe[$q~\xba\x90\xe9\x0f!\x1de\xe2x\xb0\x8bu\x97\x1f\xc1\x8a\xb7\xe97\xce4\xdf]6\xc9yL\x9fF\xf9\xe0\\\x0d\x07U \xb8\xd5\x88D.j\x80\xd5\xd8\xca\xcfS\xae\xbd\x1a\xc7&\xfa\x93\x01I\x85\xa2r\x1f\x82\x16\x13\x9e\xe6\xcb\xca{\xe3\xa9,\x1a\xc4Q\xc1\x92\xc5`,\x08 \x89\x1fD=\x8f\x05\x90r\x1c\xa4o\xb3Y\x00r\xfcL\x1b\x18\x1e\x9e\xc1\x119\xd4\x12l\x9c\xc7r`\x88\xc4od\xdb<\x96\xd6\xa5xg\xd2Ztch\x83oN\x0e\xd6\x87\x8f\xf9r\xc7\xe5H\xc7\xbaA/\xed\xd0 y\xa9\x8d\x0ff<\xcd\x92\xf8\x12\x17\xb6\xfc\xd1\xf5\xb3!M\xb7\xc5\x16:u\\OZ\x02$\x830H3\x1e\xf1\xe4\xb9\xd8\x87\xa4\x13\xe1\x1e\x17\x9bi\xcfU\xfbk\x9d\xde\xd2_\x9cZ\xd1d\x19\x9f\xf1/\xe4wjsndj\xf3oV\xd5\xe7\xb9\x9eW\xce9Y\x13F$\x98%\xea\xabz\xae\xed\xab\xd3\xc6\xafN\xc9v\xcb\xdc\x86\x95\xa0\xc8-br\xa5\x9f\xf5\x14\x1d\xdb\xa7\x06\xb6O\x8b:\xd5\x14<\xca\x08\x02\x04gL\xaf\x95\x86\xbb\x10`\xa9\x89\xac\xf7\x04!I\xb3$\x98f=\x92\xaa\xdf\x1f\xba\x03\xbc\xadDZ\x08\xec\xb6z\x9c\xaf\xe3R\x81f\x9cD\xb3\x8d\xf6m\x8d\x15\xa6\x91\x9ci7E3Wg#\xdf]\xae\xb8d%\x9f\xfb\x91\xe0&\xc5>\xc3|6\x0d\xfd4e~\xca\xfc\xe2K\xc4\xb9\xf0C\xe9\x86\x1b\x19\x9e\x05\xf7g\xd2LK\xa6d~\x10VS\xe4y`\xdf\xea\\\x99i\xbb\xbc\xe9E\xaa\x99QS\xbc\xad\xe5h\xe9g\xbe\xd5;Y\xc4/2\x94G\x99\xe34y3}(O\xc1\x16\xa9\x18.\x88}@Q>\xaa@%\xab\x82$\xf3\x98\x8c\x01\x80\xcdT\xa1\xe1U\xc6\x9eG \xfc\xfe\xf8\xc3/\xfa\xdb\x05\x062\x06\x89\x06 \x10\x06\xebc\xac!\xc6:c6Fl#\xf0R\x00V\xb6\xdat`\xe5\xeaH#z4\x10\x10\xa1\xcf3\x12\x01\x87\xc6\x10\x0f\xaa\x03\xaa\xe1x}\xca\x8b/ \xf0\x16\x91A\x949\x05a\xce\xde\x04\x11\x15\xf5\xae\x11\"M\xbdkY\x81\xd5\xaf\xfd4\x0e\xda\x1d\xb8#\xfc\xf7\xeb\xf0\x97\xd0\xa3|\xe6Tn4\x15\x9d\xc5kM=\x14\xc7\xc3\xacHoH\x02n\x8f]\x16\xb1\xfe>\xe8\xc03\xcb\x9c\xd1f\"5\xf8\xc5\xd1\xd4o_D\xcdcJ\x06~\x18\xc6Sg\xcbb\x8an`LQ\xb3\x0d\xedJ\xc8\xc0\xb19F\xb3)\xf9\xbd\xaf\xa2\xd4\x9fs\x87\xb3\xa7O\x9f\x82x\xd2\xaf\x82/\x17\xd3\xf9\x98\xf9\x8f]\x00\x9c\x0f\xdf@\xa8\x06x\xa3>\xf7@\x97\xb6\xbaD\x9b\x1fQ\xa5\xaf\nV\x0c||\x04\xba\x0d\xc4\x81\x01\xe2\"\xe1\x83`\xb5d\xf4\xb7 JW|\x9aU~\x0c\xa6y\x9a\xc5K \x13\xa5t\xa6\x98\xa0q\xbd\xe0\xa4 \xd9\xd5j.*\x11r5\x1c\xd6\x88YI\x8e\xe5\xf2\xa6(\xae]\xfa,to\xa0/\xd2\xc6k=rw6H\xa2\xb6\xef\xea\xeeN+nH\x8eD=\xb0\xefC0\xcb\x17\xcb%\x9f\x05~f\x95jH\x05\x0d\x1a\x19I\xbf3\xe6}7\xfd \xe1\xa2\xbb=\x7f\xda\xa0\x9baRw\xc3\x07\xb3x\n\x922{\xb9Uitt\xca\xb3\xd7\nI^\x81R\x83\xcc\xb0\xba\xb0\x12M\xad\xc0\x92D\xc0\xe4]\xb0\xe4q\x9e\xc9\xe8\x88\xdc+\xfd\x1c\xac\x92x\xca\xd3t\xd2\x835\xfc\xf3\x0fEpIy!x \x0b\xa0\xb1m\x1b\x1dQ\x8f\xa6\x07j\xa4\xdc\xfa\xb3p\x88\x0b_\xea\xb1 \xb8\xd8HG\x9d\xa6O\x80\x12u\xb0\x8a\xd3\xecK\xe9@M\x9c6\xf9 X\x8a%\xf9v\x9a\x04\xab\xccj\xef\xa3\x1eE\xc47\xb6\x9a\xa5\x88LJ\x12\x05\xb3nu\xd1\xa6?\x05\xf3W\x94o\xdb\xf4\xeaOF\xeb\x10\xf4\x07\xf7\x86\x12\x02N\xaf\xe7\xb1\xde'=y\xaa(?\x1c\xd5o\xd9UZ\xa1g\xc2qA\"%\x9b~\xbe\xf0\xa3\x88\x838\xdb\x01{J~\xce\xaaY\xee@\xc0}H\x0f\xb8\x11\xb9\x16\x0e\x07\nn\x93y\xae\x81\xa7\x01tb\xbb\x02\x14\x0b\x16\x82l\x0c\x16b/\x8e\x12\xee\xcf.\xd3\xcc\xcf\xf8t\xe1G\xa7\x1c|\xdd\xcc\x07\xd3\x84\xfb\x19\x97\xa2w\xa7\x97\x02R\xf5\x04`\xc0\x8eq^\x90\x00Yd\x9d\xae*\xd4\xb3~\xc5\x8e`\xd9\xc0\xec\xf1:\xe8%E\xbdt+\xc8d\xc5\xf2d\xfc|\x11\x8430s\xced\x9e\x1d\x8fD-\x94m\xabZv\xc0w\x87SI\xed\x9c\x85\xc7\xb6\x8c\x1bF\xea\x11\xa4\x03\xc43=}\xcf\xf8\xa1\xd8\xed\xe0\x16P\xe2G\xb3x\xe9\xc8@\xb5\xc8m\x14=h4a\xcc\x06i\x9c'S.ob\x08\x8c\xd1\x83sI\x1b\xa5\x812\xe9\x93|\x172%A4\xe3\x17\xaf\xe6\x8e\x0f\x02\xbd\x85\xd3\x97\xe9\xa0pq\x14\xd3b3q\x14\xeb\xd8\x9f\xcd@\xd8\xaad\x14\xb0*\xeb\x89NO.\xba\x1el\x7f\x1bC\x10\xfc\x0e\xfc,\xf3\xa7\x0b(\xe9\xf4\x8a\x85)\x052Ig\x00T\x89\x8c/XX\xa43\x96\xf9\xf5p\x93*&\xa1\xf3\\kR\xb5\x8d\x9a\x19/\x97DGy7q\x80\xd1\xe6MF\x7f\x156\xbd48.\x14\\\xea\x10\xb1 \x11\x0f#\xe4>#\xf6DwM\xd0\xef\xbb\xca\x97@Qo\x0c\xaaA\x8b\xdd>\xd3\xec\xbe\x9aW\xa1\xd8\x8fO\xfc\xe9\xfbF_\xe3\xe2\xf1\x93\xd3\x942\xb8S\x0fq\xacU\x8f\xdc\x86\xc2q:A\x01w\xe2\xa4\xae\xc7\xd2~\xdf\x86p+<\xa2\xe9sG\x1c\xa4\x1b\x8c\x08f\x0d\x16%\x18\x947\xac\xdfhd-M6\x18\xa9\x80t\xd4\xa5\x88\x04\x0d\x94\x86\xe88L#\xca!\x19\xebV=p\x85\xad\x8d\xc8N ?|\xf5'K.;p\x02\x1b\x1dW\x8f\xfe\xa8\x81\xa0RW\xa0Y;\x83\xa3\x9e\x04\xea \xack\xee\xbdz\x94\x91u\xd2\"\xbb\xa0\x1e0\xbc\xde\xb2\x1b\xdfRO\xa3\x01%\xf5\xb4\x98i\xd7\x1f\xe8\xd3p\xdd>%\xe3-\xeajw\xd3s\x9d~m_\xa7_\x1eK\xc6\xc3\xef\xa3w;\xd7\xef\x9d\xf8\xbb\xfd\x91\xfb\xd8j\xebM=\xa0\xb0\x0fA\xe4@\xd8{P\x0f\xcdQWJ\xd8\x98\xa3\xa2\x00\x9b\x07\x91\x1f\x86]\xe8\xc3\x0c\xd8\xb9i\x87\xf3\x825\xb7\xab\xe1oM\xb6\xe7\xf4\x8a\x98\x05:/\x94\xf2p^^aW\xf7W\xb3E\x90\xc2\x0d\xd7\x11\x14\xd0\x94\xc0\xba\x11\xc0\x0e\xec\xc5v[\x80\xee\xd7\xa2\x8a\xed\xc3B6\xed\xc4\x17\xadV\x06a<\xf5\xc3\xb7Y\x9c\xf8\xa7\xbc9\xe6\xda\xd4\x07\x02\xd8\xe6\x15\xa45\xda\x19\xd3U\xca\x95\xef7\xc6^\x97>#\xc0\x9c\xac\x97%9\xc7\xc3?\x9e\xfb\x9d\xc8\x1dd\xf1\x17\xf19O\x9e\xfb\x84\x06Y\xff\xd5\xf9^\x1fS\x97a\x9c^\x14\x7f\xc6W \x9f\x82\xe9ZO\xbb\x97g\xf6Wi\x9b(\xd7\xaa\xf5\x9b\x82M\x1b\xfe\x06ycS/\x119=\xd0\x10\xd5\xbaV7>\xb29\xf7f`\x90\xd0\xcb\x12\x7f\xca+M\xb0\x036\x8d\xa34\x0e\xf9\x002\x1d\xf0w\xa4\x92\xce\xfd$B7\xe0\xb0\xf7w\\SL\x17\x17 \xa9\xc9@%UZb\xb5\xadC\xebR\xea\xb4\x86hA\\\xc5\xf9N\x99\\j\x0cw\x86\x96+\xe5[\xbbd\x00\x98\xc0\\\x1f\xa8\xdc\x03\xc2\xa0\xe9\xf7\x82\x12\x890v\x98\xe1N\xbb4%!\x02\xe8\x8b'\x1e\x04\xd1\x82'A&\x1d\xc1\x0c\xc1\xd2C\xa59\x01\x9a\x99\x04\x9a`\xfd8\xd3\x8cF\x9a\xa0\xc5\x007\xf0\x94\xdc\xea/\xa4\xc1\xb6&r\x86\x8f\x1et\x9a\x9fj\xad\xdd\xebT\x1a>\xba\xef\x96f1\xd7\xac\xaf\x19\xd0ti\xa1M\xe3\xbc3\xa4\x02\xe8\x8bt\x8bK\x82\xbd\xf6[\xea\xf5\x89\x92\xaa\x08\xbc\xac]\x1e\xe0\x0c^H\xa2\x9b?\x88\xe2d\xe9\x87\xc17<\x81k\xa9\xa0\x96s2\xed\x8678.+\x95\x0d\xa5G\x0c\x7f\xe0\xa7\x97\xd1\xd4E\xcf\x04\xfe`\x95\x04\xcb \x0b\xce\xc4\xd6\xa7\x8c`\xd8A\xf5\x13p\xb1z\x0b\x0e\xeb\x19\\\xb3\xc0\xaaF\x89m\x17<\x7f\x8f\xea\xb5\xb5vE\xb1\x1d\x17bQU\x13\xf70Q\xbc>\x84f\x8a\xae\x82\xe5\x8f\xb3\xb7\xf5\xc8\x95Q\x8d\x96\x8146r\xf6\x86\xa0\x9f\x19\xcc\x82t\x15\x97\x89\xbb\x90\xb8\xf4/\x9e\x9d\x16i{*M&lc\xcd\x84\xcf\xc1@\x85'*}[\xac8\x81(\xfe\x9a\xab\xa6\x0d\x91v\xf7(D\x02\xa1\x8f\x7f\x92\x9a\xa8\x049\xf30\xd6\x1dbwC'\xa5>J_\xfa/\xd1_\x05\xba\xe8\x00,\x11Get\xa7\nN?\xee\xdcaA\xfay\x10\x05\xe0\xa2\x1a\x1c\x0dq\xf0\xf2\xe1\xc4\xd2\xdfP\x9bQG'0\xd4\x88\xc3\xde\xb6\x0b\x82[\x18c\x1a\x9cF0\xf5\xbb{;\x9d\x88F\xfb'\xac\xfb\xb3Re\x15\x1f&\x17\x18m6\x05h/\x0d\xe0\x9c!z\xa5\xdbT\xbf7\xb7\xb7\xd6u\xe7\xb1\xc60\xec\xb6\x99\xdadz\xe5\x8c\x03Q\xd0=\xb2pi:\x81>pn\xa3\x9f%b?\xa0\xbd\xd2\x0e\xef\xd7\xfd\xdaH\x02Y\xf7\x98$\x03V\xee\xd1\x01+\x05\x9dm\x86\x0e\xe3\xb4\xb3\x81\x08oCUgX\xec\xe5\xe8\x10\x03n^I\x97\n\x15\x9a\xebjtG\xd1\x1b\xc2\"\xfc\xd5J|\x1d\xf3 l\xe8\xca\x9f\xf4\xb4\xe6\xce\xa8\xe5\xcc\x9bbEt\xd8z\xa0\xda =6\xf7X4\xe6\x13\x88\xe9\x81Nx\xc8K\xe5\xb6\xe3\xea\xad\xe0\xf2\xae%\x16\xe0\xce\x90\xf6K9\xbco\x89 \xfcp\xcf\x1d,y\xb6\x88g)Ejw\x0d\xff\xc0\xa9\xe4\xec\xeaG\xa8\x90^\x0cp,\xac\x96\x9cv]6\xf3re\xa0\xa6\xb1\x9a\xad\xd9(\xa0(G\x12\xcb\x80\xd7\x86\x82!1\xe3\x9a\xdf\x80\x05\xa4\xf2e\x90uXX\xc4Q\n\xec\xbb=vVD*\xf5\xd8\x89\xc7\x8e!\xc8\xec\xa1\xc7.0\x9a\x96\xc7\xde{\xec\x99\xc7^y\x10tk\x0e\xe7/\x9a\xe2c\x00\x11y\xa1\x14i\xb9\xdc\xbd\x0b\xf14\xee\xd6\\#\xe8\x1aW-\x10\xff\x02\x9cu\xea\xc9\xae\x07Qq.\x06\xa7<\xf3 \xf2\xcd\xc5 \x15\xaf\x97\xf0\x8a\x9a\x0d\x0f\x02\xd9\\\xa0\x06\xc5\xf5J\xc1\xcc \xe1i\x1c\x9e\xf1$\x85\xe6_\xc9\xad\xa5H\x15\x8b\xfa\x19SA\xf3\xed\"-Vn\xc0\xd2\xb4\xaa\xa0 &\xf9\x10\x1b\xf2+\xf8\x1e\xf8\xbeq\x02\xb7\xec\xd2>n\xd2K\x91\x08\x8aIb\x9b|-f\xab8\x89C\xe0]_Z&\x9f\xf2\xac\x07\xab6@s<\xd7c\xaf\xc9\xe8%\xa2\x0f\xe8tO\xf0LAi\x808-\xe8 \x9e\xe2\x83\xf1\xd6DP\x80\xb0\x9e\xae\xfa\xbc\x8f\x9e\xa1\xecB!bd\x8a\xb7H\x9c\xde\xf3 \x99\xe6\xa1\x9f\xb0 :\x8b\xa54\xc7c\xbd\xe7/\xde<\xff\xea\x8bgo\x8e_\xbc\xfc\xd1\xab\xe7\xcf\xde\xbdx\xf5\xd2\xa6x\x17\xad\x9e:\x01!\x8bA\xa5\x92\xe8C\x03\x18o\xa9'r6^\xa3J2\xf6\xd8s}^R5/R\x89/\xf8\x90*\xfd\xf4\xd8\x99[x\x15\x14\xeb\xa3Q\xe0\x06\xc7gzV-C\xc5\xbb\x02\x8dh\xa3\xae\x13\x14\xa8[\xe2\x90\xc5\xaa\x10\xf4m:\xb2\x97xT\xc7\x97Rf\xc6F5$s=\x1b\x9a\x17\x9d\xbe\xe5IB\x93\x000\x19&\xa6\xa9\xb8C\x8eV\xad\xa6'l\xdd\x93\xfa\xed\x92\x02\xfd\x8e'lyRT\x0c\xab\xd0\n\xa6\xb8qZ\xe3*5\xa0\xfc\xda\xc12\xbd)5h\xe8\xdc-O\xdf8\x16k,\"'/V\xf3\x16U\x82\xf21\\c>\xa9\xfc\x8f\x93\xe04\x88\xfc\x90T\xf8+n}\xc4\x9e\x99\x99\x92\xd5\x7f \xde\x83`\xb7W?\xcd\xb2\xa7<\xebr\x15T\x0e\xf2U\xc1\xe8\xbdr\xb8\x0b\xbb\xdc\x01[\xa2\xb3\x07\x89\x14\\L\x86I\xf5\xcc//\xfct\x8d/[\xe6\x91r\x12o~\n\xf7\xdb._\xb3\x900\x86\xfd\xa5{\xc00\xaa\xfa\x9d;\xec\x12-\xa5\xd8>{\x0d\xbc\xaa\xb4`\xc0\x1f\xefu\xb4\xc0\x9c\x1e\x86\xa8\xa3\x1cE\x99\x83\x006a\xd4\xae\xf2P\xa2\x15\"N(\x83\x80\xc8w\xee\xb0\x13q\xe6\xd3X#\xaf\xe8\x18|\xa5\xd7\x15\xb0q4j?\xb52M\xa0#\x16\x7f!\x10y\x0bz\x0f6\x02\x1b\xac2\xf9y\x91,\xa1TZRA\xfcW\xf0\xe41\xab\x08\xf5i\xdf\x15f\x7f\xc5\x18Glaf\x14\x87\xe1\x0e\x00\xe6\xc8\xd9\xca\xe5i~\xb6\xbe\xbc\x8fMV\xcd~\x95\x05-\x8b\x1a\x883.A8\xe5\xe1\xf1\xae\xe4d2\xe0d\"\xe4\xd1\xfc2\xc6]\xbdC\xeb\xec\xe9\x85\xa8[\xb6&7\xbfj\x93\xacmi\x11\xe4\xa3\xdcTp\x17\xf1\xcb\x00}\xf5\xfe\x9e\x83\x14\xbd\x95\xf5\xe0\xad\xb0\x93\xdd(\x87.\xf7\xdc\x91\xda\xef4\xb0r9k\x02\xa0%u\x8b\xb0\xb3bE\x9b\x82\x97\xc3\x8f\xd6O\x1f\x82\xd8K\xd8\x93\xdd-\xb1\xa0\xa1\xe3\x1210\xe6\xbe\xd9\xff\x95\xf3\xcc#\xfa\xac\x0b\xbfF,\x00\xd7UV\x12\x1b8\xc7D\xae\xa4]\x81\xe3\xab\xd3\x8e\xf9\x15\xd8\x89\x02\xe7\x9c\xca\x83\xbd\"p\x0e\xcd>\xfbE\xca\xad\x1c\xf1w\x86T \x10q$\xb7h\x99\xea\xe2-\xb1\x97\x83`r0\xf5WY\x9e\xf0\xb7\x99?}\xff.\xf1\xa7\x9a(\xa9\xe2\xab\xa3U#\x15I{D\x94wR\xd1n\xf3\x8aphH\x88\x90\xd2\x9a\x90\x89<\x0b\x07N*\xddm\xe5\xb8\xa9I\x8f\xa4\xca\xa9=hdR\x19\xd50\xc2\x9b\xb8\x81*\x1b\x0d\xa6\xf1L\xe0^\x0eWu \x08D\x84\x8c\xea\x9a\x0e\xa8\xd7\x90\xc7\x93j\x05\xdc\x81\xa5\x90\x02}\x85t\xd7.H\xf7n\x0e\xed\x15e\x1e\xc7#\xd6K\xfcozu\x1ae\x96=\x11\x18\xdf\x9b\x9d\xfb\x1d\xcaf\xc97\x97#\xd6\x13\xffz\x06\x8a\xf3\xc1<\x8eY\x9f\xf1\xc1\x89\x9f\xc0\x7fQ\x0eh\x83\xe8\xca\xec\xdc\x87z\xb7,\xb8\xdd5\xa2B5Hn\xd7\x08\x9c`\xd1\x10\x94\x17q\x02\xc3\xe4\xd6c\xdb5\xbe\x1blu\xb9.\xe9\x04n\xb4b\xa4M\x8a\x1a\xedV<|\x9c@\xfc\xd1qBX\x9b\xb6\x9a\xecD\xe8\xac@\xac\xebV\xf3\x0bd\xf8\x87\x8f\x99\xcf\x9e\xb0\xf41\xeb\xf7}y\x85\xadX\xa0\xfe\xc4\xc3\xf8\xd4\xca=Q\xee\x9a\xea\x13\xcd5KT\xe8EHL\xff\x18\xaa\xc3\x87CT\x1dj\"vT\x1e>\xdc\xfe\xd8\xcaCz\x12\x15\x8f\xa1\xf9\x96\xed\x15Z\xf5\x1ex[\xac\xceC\xe3\xa4\xd26X\xb7-P\xa6\x94#\xda\x00\xda\x96S\xbd\xe3\xb2\xd31x\xc3-\xe6\x06\x8fg\xeb\x1a\x9f\\\xab\xef\x04\xc5\x94\x9f\x18\x91\x97\xa6\xf0\x16\xda\xc8\x98\x9ak\x0e\x1c\x86}\xe7\x0e\x8b\xc7J11\x11\xebr\xdd\x10\xb9\xed\xa8)\xd0\xfc\x01\xe2\xbf\xbc.W\xb9s\x9b\xf9A\xa4V\xc3\xee\x0dV\x83\x82\xb6N\xe6\xd7\\+M{]R\xf6Ulz\x1b\xcae\x88Ju`\xf7R\xbe\xeb\xeby\xf38\xee\xdd\x8e\xaa]\x0d\xd3\x00\xa5\xbc\x0es]l\xa8\x1d\x11+\xcae\xf6\xf46\xf5\xef\xb5\xeb\xa4\x9er\xc8N\xe9\x80\xe6\xb4^t\xd5Y\x953\xeb\xaa\xcaY4\xabr\xce,\xaa\x9c\xda\xe7\x96]5>\xa7\xed\xc1n\xab\x15.I\x8a1\x8d\xa3yp\x9a\x83\xf6\x95\xa6\x1a\xbc\xd0\xce\xd2\xae\xaf\x95\xa7\xa4&\xba\x92\x1b\xdf\x164*i\xe3V\x98\xe2X\xac\x87\xb69\x185\x9c\xea\xb8\xd7;>\xe6\x1c\x0c\x07\x0e4\x07s\x90&\xcer\"\xe9rp\xe6\x87\xb9\xe0h\x16J\"sV\xab\xed\xb1K\xd7\xd3\n\xcab\xd1\x98O\xd8\x01\xe5t]\xe6\x88\x7f\xe8\xb1\x0d\xacO!u\x9f\x8dQ\x9b\x9aM\xca$\xe9\xad\xa3\n\xb1\x1a\x8d\x8f\xa6|\x04\x94\xbe\x1b\x94<\xdd'\x98z*\x80\x8a\x95[>c\xb9F]\xee(J5u\x8c5\xe0*\x992\xdah\xb7\x8a\x05\x07;\x02\xba\xaf\xa2i\xe1\xd4\xe7\xf8\xb8#(\xe6\xf3\x11\xf0\xbe]!!\x89\x04-\xe7F`l\xd0hS\xf1\xa7@\xd7\x97q\x80J\xc4r\xc7|\xd2\xa1\x9e\x896\xe8`T\xd46!\xc6\x14\xeb\x1d\xe0\xed71y\xc98\x98\x08\x1e6pY\\\xfa\xe5\x8d)\xb8b\xae`\x94\xb7\x95s*%\xd2\x97(\x98\x8c\x03i%7\x14\x88\x99\x0c\xd2\x15\xdc|\x0c<6\xa4\xee\xee\x81*-)?\x9b4~V\x8ac\xa3&\xeb\xf8\xb6iG \xa2\xdfzG\xf1\xac\xf0j\xd18\xef\x16:!\xb6\xe3\xb8:\xa1\xf6\x19\xa1\xe7\xb1\xd9\x19<\xccbD(\xc9d\xac6-\xde\n\xdew\xcc\xf0\xc8\x92\xb1',\x12\xd3\x9d\xb9,\x18g\"\xb3z\xd91k\xb8\x08\x07\x1f\x8d\xc1\x81\x05^h\x95\xedn=\x06\xc2\x1b\x8b\xca\xd8\xb4\\\xc5I\xa9\xc9!\x1b\x95\xbaTu\xa3\xac>\x96&\x00t\xb9\xb55+\x88\x0b\xe8\xa9\xec\x03c\xedw\x8b\xba\xdc\xc6\xaa~\xaf\xc6\xb0\xdc\xfc\xeb-\xb7\xad\x9a\xbe\xeeU\x84G7\xebK\xa7[U\xbf\x10\xfc\x14\xcf\xaa\x06\x05\x1b\xe6\xfd\x80\xfe\xf5\x81\xf2\xc6,8\x8b\xa9S\x17z\xe2^:u\xe2z\xba\xd8X\xa6N\xe0R\x84g\xea\xe8\xe6\xd0hG\xb8t~\xfe\x01\x85q:{\xdc\xec\xf5G\x19\x8bi\xa1*\x17N\x88\xce\x88\x8bSc5T\xa4\xc72e\xb4\xc4\xf6Y\xfe\x03vS\x8eY\x9e\xa3\xea\xb1~\x1b\x04\xab\x04\xdb,\xf88\xd2=q\xf9\xbdf\xe7\x01\x1a\xdd\x1f,\xfdU\xbb#hU\x81\x1d\xb0\xcc\xe1\xe3\x08T\xcf\xe2\x7f\x15%\\\xe9|\xc9\xc9+Zi\xf3\n\xff\x07o\xbdc\x0d\xc8\xbd@\xe0\xd516O O\xc5\xbe\xa1Zq\x05\xd7u\x12D\xb3\xf6P\xb6\xddg\x16\x8f=\x8f(S9\x9c\xa8 \x85\xff\xd7<\xd5\xc5(\xda\xe0\x10\xce\xfdv\xba\xdd\xe9 \xadD\xcb\xc8\x98\xe2H\xe6I\\\x0b\xc8\xd5t\xdcF\xff\xed\xe0]\x00\xe6p\x0c\x82d\x0fe\xc4\x13\xd7c\x9f\xc6q\xc8\xfd\xc8\x01V&+}.C\x01\xd4\x05\x81]\xf4m\x8cY\x13\xe4<\xdav\x07A\xc6\x13?\x8big\x8e\xc6\\\xca%\xfa\xc8fAN\x1a\x90\x1bK7\xa5\xe5\xc9!\xbd\xfe\xa7\xf2\x9bur1\xaf\xe3U\xa7c\xb5yX\x9e\xdd\xc6a\x94\xc8\xd7\x0f\xa3f.\x1c\xe6\x08\x1f\x8c\x1f\xac'\xf9\xeaQ}\xddET\xb2\xa5V\x13\xcaV]\xd2\xdbF]\x128Z*%\xf3)J\xe6C\xe7B\x06\x08\xbf\x90\x0e\x12\x99t\x19\x0eh\x0e\x13'R\x02\xf4\xf8\xec\x16\xbe\xf2\xaa\x8d[\xfc1\xc0 \xe8\xc2zF\x9c3y\x89F\xaeN4\xf7tN\xb5\x10\xc5\x82\xa4 \x16\xc9\xdb\xdb\xf2\xc2\x9e8\x9f;\xcb\n\xc71t!b\xd9>\xe3p\x19}i\xe1\x86\xf0T'\xbe\xda\xc2\x85W[\xaft\xaa\xe2f\xe4T\xb05\x91\xcb\x96h\xcc\xc7I\x0bJ\xf5\xc8\x91.\xc9\x02\xe6\xa5R3e !\x03\x7f`/\x040\x9f\x1bzdf*'\x9cs\xe8n2\xb1\xc2\x02\xe0p\x02f\xae\xe7\xf2J*\x1a\xd2\x08\x82\xa9\xe0#\x0e\xc8\xe2l~\x02\xce\xc5\x9c\x128\x1b\xc7\x83Y\x1c\xf1\xc7.(\xe0/\xd8\x81b\xe2\xd0\x1a\xf8\x18%&\xd2\x90\xbd\xf8%\xf6ogVHS\x0e=\xb6p\x96\xb02fp\xddJ\x82\xf9\xb0\xfe\xd1~\xdf\x125K\xcc\x1c\x11\"\xa84\xf7\x9c6`\x03@\xe0\xb4\x123\xdb\x1c=\x8c\xd7\x03\xb9]\x0d'\x0e%B\xc8Py\"GZ%\xed\xb3\xc3\xc1t\xe1'\xcf\xe3\x19\x7f\x969[\xae\xcb\x9e\xee\xb3\x07\x0f\xb6\x1f\xed\x82\xc5\x12{\xb2\xcf\x1e\xec\xee\x0c\x1fA\xf9Cp:9\xee\xf7\xa3\x89\xb4g0\xc0y(\xedG\x0e\xad <+Ax&A\xd8\xef\x9f\xd9\x81v\xd6\x82\x8e\x1a:\x89=\xf0\xd4D\xb8\x02z\xbe\xa3\xad\x9d\x1a\x00\x9dS\x97^P\xe40%4\x15o\xd7\x1d_H~\x00\xbb2\xab\xc8\xee<\xb6,/\x89B\x8c\x90\xa2\xe6\x0d\xf6\xf5\x9a\x96\xe2\xd1\x8e\xd4R\\.O\xe2\x10U\x12\x8f\xee\xdf\x82J\xa2v\xc2)\xf48\xb5-\x1e>[\x91\xc3\xb6\xe9vH\xbe\xcb\xdcb\xc8{(8J\xcd\xf9Bm\xf7`\xfb\xb2\x88\xd3\xcbx\x9a\xc9\xee\xd5\x8d:i\xf5\xa22o\xac\x9b>\xddD\x89\xa8\x97\xd9H\xc6\x95Q\x14,\xd9\x04\x953F~\x16\xbfV\xdaM(B\x95\xc0N\xbf\xf3O'\xb7\xc74\xea\xba\x0e\x8b\x8aC!_\xfdZL\xd8\xac\x90\x98v\xd54\xcc\xbbi.V\x84B\xc2d\xfa\xc2\xfa\xed\x90\x1az\xed\x1b\xe8U;\x97\x14X\xb5\x06\x1a%\x8e+=\xda6i\xa5\xeb\xeaf&\xe7`\x81\x9b\x80\xb3(\xbb\xef50}57\xbb \x92\xc0\xc5\x98c\xac?\x8c\xa1q-wF\xe3\xca)\xb4z\x98\x8f\xbb\\\x8f5\x89[\xbd\xb3\xfc\xd6:\xeb\xc3\xcdrP\x04\x01\xf4CG\xf3j!\xc5h\xda^\x0b\x01\x1a{\xa5\x15\xa1\xe0B\xa6ND[ \xce8\xfa\xa2\x0c\xe2\xe8\xf8x\xc4r\xf0/\x9aQ\xe6|\xc7\x91\xbf\xe4e\x993\xa7n\x02\xfd\xa1*\x1f\x99:q\xfd\x93\xf38\x11\xd5\x9b\xb1L\x0ez\x86\x8a0\xf87\xc2\x7f\xfb,v\n\x8anHE*\xbf\xdf\xf3\xcb\xcf\xbb|\xccb:\x0e\x8b/cA\xc4R`jgv!\xfel\x9cM\xd0\xd6\xb9\xd4\xdc4vm\xe1\xa7/$\x96(X&\xa8\x06\xd1r\xd0\xa2\xaf\xa7\xa5\x18\x01\xd3\x83\xf49\xc8\xaa\xde\xaeT\xc8\x97Zsf\x01\xd9\xaa\x99a6.\xf7\xb1z\x932Y5$\x7f\x1a\xd5\x97\x82\x1c\xd6\xeaB\x9a\xac\x08\xefF-\x19\x19\xa9VO\xc5N\xc2\x9a\xf2\x97Q7\xe5~b|\x12\x13eM\xfcaV\\\xf1i\xc0\xd3zMLUU\xf1\x17Q7\x0c2\xa3f\x18dE\xbd0\xc8\x8cZ\x1a\x0fP\xab\xab\xe5\xc8\x16\xb4\x14\xa2\x9d\x82S0\xda)r\x8av\x8a\x14\xa3\x9dW\xddS\xdfoT!\xeb\xc2_E\x95j+\xae\xd6\xb1\xd8\xde1\xfd\xcb]\xbe\xaa\xc8\xb7\x031\xdcQ\xf01\xa8\x91Q\xd6g=\xd70 \xad\xfc\x863\xc5\xaby\xd7\xaf\xa6\xb5\x98Z\xcc\x1c\xe5\xbc:\xcaXG&\xaf\x0d\xac\xea\xfa\x89\xfc\x0e-\x1e\x95\x8cw-B<8\xc8(0\xce\xd1;E\xf7\xaa@D\xe8\xd5\xb4\xe7)\x98\xf6\xb0B\xd0^!\xae8\xe3\xafp\xcct\x13UHPM\x94l\xf9M\x1cj\xe9\x02\xda\xdd\xb5=\x19\xa1\xdf3\x108P\x9c\x03\xba\xf6/\xf8\x06\xfa\x1c$'\xeb\xd6\x8dG[E\xfc\x1b\x1bx\xd9\x87D\x93\xab+\x91\xaf\xc7*\xc0\xb2o\x8b\xb2\xe0\xc6\xb4\x1e\xca\xe0\xce\x1dV-2\xae\x16\xaa\xce\xfcm\x0cYM\xa0a\x12\xa5>U]\xc6`K\x81\x12\x88.\xcb\xb8\x10\xc0V\x17\xb2\xe3\xae\x8d*Uk9\xee\x02x\xe2_,\x04\"gg\xb8}\xed\xa1\xd8\xdd\x06\xfdR\x0d\xb2\x12\xf2|\xbd\x01\xa6\x86CqX\x18\x88\xe6\xa6)\x88\xf2\xcf\xa1\x1d)\xb0o\xa2R\x0d&\xee\xedY\xcc\x9e\xe9^`\xd6\x1d*\xc1N7O\xef\x01\xb1XR\x9e\x91\xd7g\xe1\xaeQ-\xea\x9d8\x12\xd1\x91\xa4\xa0t\xe2\xf0\xc1)'.\xd3i\x01R\x07)\x071a\x06/\xfbP'\xe5\x10\x9d\\\xdenC\x15\xa0\xfa\x81%\xf0\x07\xdc9\x93\x01\x8f\xb0\x90\n~$\xca\xe0\xad)\x88\xd1\x0d\xfd\x94\x1f\xc8\xd0\xc1Dv;\x14k\x8d\x89)\x04 J\xdej\x1eb\xb5\xa0\xff\xbd\xff\xbeW\xcd\x97\x87\xa2\xfd\xf2\xd20\xc8e'\xeec\xb6\xb9\x99@D\x9f\xfe>\xeb\xfdw V\x00q4\x89 \xd9\xf77j\xb5\x19\xea\xf7%Ik\xbfB\xd8\x12\x95\xc3\xcb\xf0\xd6`\x82\xf2{A\x02\xb8\x18h\xac\xc2<\xe1@\xb3q\xbf\x9f48\xf61\xd0\xb5\xcb>Q\x8b'\x7f\xcb\x17\x18\x86\x86\n8\xae\x8b\xf8Z\x00mc\x1f ]i\x06*)3=\x82\xd3\xbc\xdd\xc5\x8beA7\x9f\xe6\x99f\xc2JwG=\x01\xd8\x8bZ\xb3}\xeb\"QOPD\xdf\xf2\x8b\x15\x13\x8c}\xb8\xba Fe\xaf%>-J\xda\x06\xc0\x14>>f1{\xc2|\xb6\xc9\x86\x8f\x9b\n3\xd9\xb0t\xa7\x07\"\"\xb9?\x04\xa0\xed\xe4\xe3x\xe2j\x0eW\xad\xdd+Z\x83.\x0e'\xa0C\xe9\xf7ckaS\x05\xa9\x1e\xf9\xad\x96>\xb1\x03\x15\x8eN~N\x81\x8fl\x97\xfe\x9a6*#\x9f\xb8M\x9eV\xd0\xc8jo)\xd0(@ao\x03\x1a\xe5\xcdh\x04\xd2\xc4\x8eh\x94\xba,\xc7\x10\x0e\xfd\xbe%\xf0PK`\x03@\x1ah\xe3\xeaJ\xbe\xec\xb3q\xe3DS+\xb3\x9ao\xcd\x9e\xc8\xab{\xe2;\xf2V\x9c\xc4\xd4M\xe9\xfc\xc3 \xcaI\xcfa\xd2c\x81\xf6h(\x1b@\xd5-i\xe4\x0e\x19\xa2\xa2\xc7\xf2\xf1P&~\xc4\xae\x17}\x1fN\xc6\x01\xe0\xb8\xff\xf8F\xfdv=\xd5\x18N\xe05\xf0WJ8\xc9p\x8b\xe6P\xd7\xf3\x8e!\xdd\xc74`\xb2\xdf\x8c\xc9\xb9\xb4/o\xc6\xf5\\\xe9\xc1\xad\xa5B\xd8\x0e:\xac\x05\xc9l\xf9\x02\xbb\xec\x8bAT\x81X\x80\xe3\xb4\x0b=\x0d4,\xedNO5\xee\xdf\x07t\xc8\xc7\x81FO\x9bIi\x88\x88\xe2\xa3\xa7&\xec\xebp2\x8e\x01\xe9\x82k\x10\xd6[\xe9Yq\x15\xb7\xe8\x8c\xa8\xaf\x0c\xf7c\x0f\x10Z\xe4U\x92\x1e\xb3\x0d(&\x15\xe0w\xee\xb0P\x117\x176\xdcp\xb0\x8aW\x8e\xeb\xe1\xa4\xc8_n\x87\x96\xd7X.\xda}\x80.\xeb\xa4\xab\x03\x16\xc9\xa7\xe8|\x89\xd9\xfc\x0f\xe8_7\xe0\xca\xaa\x9a\xff\xbd-y?\x11\xdd\xd2\x0e\xc0\xa9\x9dt\xec|\x93+\x89k1q\xfa\xb7\xd79\xca\x81\xc2\x9b;?\xff\x00\x84\x92;/\xfd\x97x\x0b\x91;;\xf7\xbf\xcf\xb3N\xc1\xf5o\xec\xdf\x8e\x1c\xac\xca:_\x13\xack\xf2\xc6u\"y\x1bl\xb1F.2\x0f,\xe1,fpU\xe6-.\xb9\xb4h\x1cwZuU&\xab\xcd\x7fh\x8642\xc1\x03W\x84\xbf\xfa}\xee~\x9c\xbdP\x93XA\x10)\xd8\xf87`\xa0x\x86\xaf\x12\xab\xa8\xf2\x9b\xa0\n\xb7Ct\x08~\xe5#\xd0\x9b\xdb<\x05\xd2B\x06\x1a\xd5#++j\xe3\xe3\x08x\x10%\x83\x1b\x1e#\xad\xbe\xaf\n\x89@\xc1:\xa1\xa142\x11\xbc\x95\x89h\xdc\xa6\xb3\xca6\xddr \xeb\xc434\xb2\x96-\xfd(\x97\xb7\xfc\x8c\xf5\x10\xd6\xba\xd2\xad\xc7\xa9\x02\x9c\xd2\x00i\x0b\xaf\xdcD\x8fY\xae\x81\xb3\xe0\xc0\xfd\xb2\xa7\xa9\xe4\xc0s\xc5\x81\x8b\xbcT\xe3\xc0surH;\x9c\x1c\x9aN\x0d\x96\x13\x03\x9c\x16R\xf8\xe8p\x02N>\xfa\xfd\xbc\x0b\xdd\xbc\xce(\\O}\x06\xce\x11\x99\xc7\x02\xb0/\x10hHxN\xee@\x0b;a8\x1es\x91\xcb\xc7\xc1\n\xb2\x14\x82\x18 \x93\xc7\xbbk\xe3<\x9e\xa1B8C\xb5\xb3\xa6)B$W\xc1\xbf\xe5)\x0d\x91\xdf_\x03\xf9eo6\x1a{\xd3rd\xc8\xf4\xcf\xe7&#\x9b\x13,r^e\x91\xd3*\x8b\x9c\x16,r^\xfe\"Xd\xb3ekO%G,f\xaa#xn\xb0e\xd9 9\xbb\xe6\xf2\xf2t\"nv\xf5\x07\xf4\xaf[\xda\x03m\xbe\xc1\xe9\xcb3;C\xfa\x82\x9b\xe9K\\\x1aY\x1a\x17_R\xdb\xcd\xb7j\xb1\xf5\\\x84[6m\x88\x16!\xe3\x18\xb4\xdcx\x97B\xd3\xb9\xc7V\x1e\xd8WN\xa5\x81\xa21\x1f\x8b\xa6\xcc3\xd0n(\xc7sf\xfe\x12\xf2\x95\x13\xc6*F\x97\xf5\xc0$\xbc\x99\x97S\x9cF\xe9_\x98\xc4\xad\x04|C\xa9\xa8\x0ep\xaf\xd4*\xa9\xa7\x9d\xad0\xe5\xb1/A3\xbb\xb4`\x9f\xb7<\xb69\x14[\xc3\x99\xbc}2/\x9c\"\xac\xc4\x9b\xa9s\xead\xb1\x1c8\x1a\x00\xd9Y\x83\xe1\xf2\x87\x1a\xf8\xe2H\xb9\xe9m\x87]\xe3\xf5v\xf2\x02%+\xcc\xdd4\x17\x05$\xcct\xc3\xbd}6\x9e\x81\xcb\x8aH\x19\xf1!u\x8f\\\xd4\xc1\x01h \xeeM= nH`\x91\x89tb%}L@\xa8|e\x93\xdfbD\xa3\x1e\xe0?\xect\x94\xf2\x15\xbb\x901\x0d`\xbf^\xa0\xf7\x8d\xd2%2\xac-\xf4\x07\x1b\xe0~%\xbd\x19'\x10M!\x8e2~\x91A,\xa6\xe44u\x0b\xfb\xcd\x04\xe3G\xc4\x88)A\x89BbNlq\xa2[I#\x86\xfb\x96k\xab\xcd\x0d\xc7\x19^\x8c\x94F\xe1\xd6E\x11\x89\xa1\xf3jd-\xe9\xffC5\xcf\xb8\x1da\x14\xff\x8c,\x05\x1f\x043\xbb\xe4O\xfa\xc2d\x8d\xf1\xfc\x01\x03q\xbb\x13\xadaOf\xe3\xb4t\xdb\x8b?\xe2R'ct>\x03W\x9a\xa9t\x80\xc8\x0e\x98\xd2\xec:\xe0P\xdcY\xa0\xe0\xdc\xde \x86\xf6lbnG\xb8\xe2\x1b\x8bbh\xe7\x06Q_\x89Ri\x89R\xa9G\xaf\xaeXF6\x88\x8b;\xc9nCI\x14\xc3\xd5/\xc7C\xf5n\xd7\x90\xf5Gk\x8c\xb7\xdc\xb4gr\\\xe8)\xdc\xc2\xb5\xa1\x087wBy\x9b\xd9\xf4\xfeB\x1d\xb6q+\xa6\xa8\x00\x97\xbc\xb4\x94\xb3\xca\xae.U\xb3\x1c\xe2\x03NOp\xc9E\xb8\x00}\xcd\x05\xf9\xb2\xc5\xfd\xcc\x07OR\xd9\xb4\x03\x95\x85\x95#I\xe1\x1adr0=\xa9Q\xca\xc1\xf4\xc4-\x0d\xa0\xc5\xcf\x02\xd7\xf1G4\x08\xc4\x96)\x9d\xef\x001e\xa3\x12\xa9\x89\xeb\xe38\x8a\xc2\x9bu\xfbvA\xb0\xeb\x14\xb1\x9c\x01\xb1\xbc\xba\x02BY\xec\x9c\x0b\xdd\xabv\x95\x84b\xa2FEU$\x19 \x98 n\xb1\xf5^\xb9\xbcn\xa7r\xa2\x0bD\xff5>\xa6\xe8\x0f4\xaa\xba\x13\x0b\x8cl_\x1d\x92\xce\xc8\x9e\xf3\xa2\xe7&\xea\x1ac)~\xde\n3k2\xad\xc8\xcc\xee\x191\x18\x03\x99^\xbf\xc4\xed\xcb\xf4\xba7]\x15K\x8c\x0epc2\xb9\x1dn\x0c\xc5N/[p\xf0\xd8/\xfe\x8fd$d\xb8X\x1fG\\\xfd/\xd2\xdd:[\xabB\x19val\xb5\x0b7\xc6\xac\xc4M\x99s\xea\xa6\x11S\xa62[\xca\xec_]\x0e\xac\x96)\x14T\x1c\xfc\xa3\n\xf2\xb3\x01\x91\x96\xe8k!w{\xac\x0f\xde\x1eX\x9f\xf5\xee*3\xcf3?\x0cfL\x0dv\x19\xcf\xb8q\xf1\x8d\"I \xee\xeb\xb65\x11Z\x02\xf4\xc2\xb0r\xc7/ES1:X\xf5\xa5\xc9\x14\xb1Q%\xf4\xe14\xc2\x8aC\x8f\xcde\x13f\x19\xd1\x95i\xabS&\xbd4`\xee\x98\xb2\xb7Q\x8f\x18BH\x04\x9c\xfb\x12yj\xce\xb8\xf8=b\x9f\xf1\x8cO3>cy\x14'3\x9e\xf0\x19\x13\x88x%\xb0\x8e\xdd)\"sC\xf8\x9e\\t\xcec\xe7\x8b`\xba`A\xc4\x002K\xff=O\x19F\x1fc3hMpC\xf1\x9c\xa5\xf9t\xca\xd3\xf4\xde\xdc\x0f\xc2<\xe1,X\xae\xe24\x0dNB\xce\x9c\xf3\x05\x8fD\x13wu\xec\xbe\x0b\x13\xeb\x1eE\xcf\xe3(\x0df\x80N\x04m3*?\x1c7\x1f\x1b\xc6 \x15\xbd\xc8\x02\x89\xb5N\x0e\x84'T\x9dc\xac\xf0\x96:\xbbh9S$k\x9d)H\x13\x97\x8fz\x8a\xa8\x8b\xa6\xa5\x90\xe0#\xe9\x89\x9b\x14\xb7JOY\x06\x90k\x06[\x86\xe7\xe3\xfa\xc5\xfc\xea\xe5\xf3\x9b\x03\x88p}\xa5NYm\x91\x96\xad\x86*\xe8\xf9\xfdV\xe7Q\x9c\xca\xd6\xbf\xbd\xd1\xe8\xa2\x1f\xaf\xe28\xe5\x15\x19p\xe8\xa6]\xfc\xd3\xa2\x895H\xad\xcd\x89\xa3\x0eC\xaf\xfd4\xe5\xb3B\x10\xa3\x05\x84\xc6K4\xc1\x9c\xcf\xea\xf1\x8cn\x17~{\x86JG\xcc\xf3\xbd\xf1Qt\x94\x1c\xe5\xdb[\xdb\x0f\xe1\xef\xa3\xc9\xbd\xd3u\xc1\xac\xd0_\xcc:\x89\xfb\x85\xc2\xe2)\x1bnm1\xe5\x80.\x93\x0eX\xb7<\xf6\xe8\x11\x1c\x13\xff\xdb\xef\xfc^O\xde\xff\xcf\xd4=iAq\x9b\x97\x8a\xfc\xcao\xbc}\xf5r\xa0\xc0y\xe9pW6?\x04\xc5Fm\x19\xdd.p\xff_\x83\x9cJ\xcf1~\x19G\x9b\xd3\x98'S<\xc6e\xb1DD\x17o\xf2N>\xea\x85\x8d\xdb\x88\x11o\xd3&\x96\xdf\x0b\x06\xb3 ]\xc5\xa6L\x85p\xa9)\xfaV\xb3\x81\x08 6\xa5\xa2\x9dg\xa7]W\xe0\xcc\x03\xa7B\x1e\xab\xf93\x05\x89#\xf8\xe4AY\x0b\xdbg+\xc5\x96.@\x89P,\xd0\xd4\xb2@\xd3\xe2\xc7\x01\xeb\xe1za#\x06\xbea\ny#\xeb\x8b\xcf\x17\x1d%\xf1u\x86\x0e\xd6R\x9e\xbd\x0b\x96<\xce\xb3\xf6sO!\x00\x8aH\xe1\n\xb7\xe9\xbb\xc4\xa7\x06y\x94\xf0\xb9\x18@\xf9\xcb\x81\x88\xa7\xe0UNt\xe6\xce\x1d\xd6\x8b\xf8E\xf6.\x98\xbe\xef\x81u\x90J\x86\x05\xa4\xba)\x12E\xc5\xf5\xfb/\x8f,\xcb\xbasa\xd9\xff3[\xff\x97\x95\xfe/\xb5\xfe\xb7hpj\xf3@.\xfb\xca\xd8f\x18\xef\xbf\xd0\x98\x8a\xb3\x15B\xc8\x80\x0c\xa7 \xa3\xd7^\x92A\x15\x05.\xf1\xcf\xb9\xd8XE\xb3g\x18\x1ct\x7f\x7f_\xcf\xb9\xba\x92Q\xdb\xcb4\xb1m\x0fvvv\xd8\x88M\x9d\xb9\x83\xa6\xe8z>\x1aGmI\xcc^\xb2}\xf6\xf3\x0f\xd2\xaf\xd6\x90m\xb23\x97}\x82\xd2M%\xaa\xa8\x03\x07t\xde9\x05\"\x18\xec\xd5\x15\x83\x01\xb2}\x0dK<\x16\xb4O\xbbE\xda!\x1e\x0d\xaa\xfb\x1aT\x1d\x0d\x84\x9e\xae\xb0\xabl\xa1h\xbb\xe6\xc4\xae\x8b\nA\x08\xe8W\xb1\xb3\x91\xc6\x03\xd2b\xae\xb2\x8c}'@Hu\x12O\x84\x1e\x0b5 \x05\xfc\xa4$\x9c\xa6\xdf\xa7\xea\x1eT\x839\xbd\x0d\xcd\xdaP\x96\xd5\xd1\x96\xdc\x8b\xd0\\I \x01bp\xec,\xbb4\\Ctn`\xb9\xe5c\x88q\xc6\xf8\x8b\xdf\xb7\xb2\x05\x1a\xbe\x98\xd5\x11\xf3\xd1\xda\\\xb3\xe0\xca\xa4\x01\x87\xd8\x0e\x9e\xb2\xb8\xc9\xb7\x08\xbf\x98r>K\xd9\xd2\xbf\x08\x96\xf9\x92\x15z\x8b\x0c\xa1\xf2}9\x1b\xd9\x1e\xde\xdf\xbb\xffpg\xf7\xfe\xde\xf5\xdbk\x07\xe76\xad\x17\xdd\xd5\xafx\x04bG\xee\xb8\x1d\xcb8R\xc4^\x9c\x14{q.\xdd\xc0Kk\xf258\xe5\xe6\x8d\xd8G\x13\x9bf\xc4\xd7\xdd\xfb\x02\x8b0X\x04\x99\xeaZ\xbb\xc1\xc0i\xf9)b\x0b\x12\xa3W^\x11\x0cr\x00\x99\xd2\x1d\xc2m K\xcb\xe46(\x9f\x83\xf6xW\xeb\xae\xb1\xb32\x044q\xf3\x01\xc2F\x9a\xc9y)\xff23\xd3\xa6\xcc\x10\xda*R\x1f\xed\x15\xa9\xc3\xedm\xb8\x0f\np\x02\x18 \n\x8e]\xae&\x02\xdcz\xff\xf7\x1f\xfc~\xafq\x1d\x9av\xef\x84\x1d\x85\x8e\xb1 \x82\xc178j{\x15D\x96a>\xabK\xb5\xea\xbe;\xd1\x05\x87\x1f\xdc\xe2\xc2N\xe4\xec\x0co\xe2\xdb\x93\xf4]/\x1a\xee\x1d\x1f\xf3\xf4\xcbx\x96\x87\xbcW\xa7\xda2T\x90\x1eJ\xc1EY\x0f\xc4\xd3k\xb2UQF\x00\x89*\xec\xb1X\xbd\x96\x1b\xd0\x07\x93\xdd\x08\x1cq\xb8}Pw\xf3\x1b\xcb\xac\xfb\xdb\x10\x95\xb3\xc8S\x1d\xc0\x90cd\x1f8\x12\x99r\x9c\xd2\xef+\xb5Ca\x9c\xc0\xba\x9f\xbe\xf5\x88\xe9/\xc7\x04\xa8}\x87&\x8b\xd3x\xb9\x8a#A\x0e)8\xa8\xe7\xd9j5b\x97\xc5\x0cZ\xcb\xf9y\xb6\x88\x93\xe0\x1b_\xf4\xe4u\xbc\xcaW#v\xd2\xbd\x1a\xff4\x8bF\xecx\x8d\n\xafV<\x81\x8fA\xcd\xf3n5\xd3\x11;l/\xf9,\xcf\x16/2\xbe\x1c\xb1\x8b\xf6\xc2\xa2\xd9C4{{\xdb^:\x16\xc5\xb7G\xecY{Q\x7f\x15\xfc&\xbf\x14}\x19\xb1\xe7\xed\xc5O\xfc4\x98b\xe9\xf7\xed\xa5\xe5\x91\xe4U{\xc908\xe3ox\xba\x8a\xa3\x94\x8f\xd8\xeb\xf6\nA4\x8fG\xec\x8f\xb4\x17|\x11\xcd\xe3\xe7\x18\xd8\x9d'#\xc6y{\x95\xdf\xc8\x97\xabw\xf1k_\x8c2\xebP>\x8e\xc2 \xe2?\xf2\xc3`\xe6gq\xf2\xa9?;\xe5#\xf6\xaeCE\x85]\xe9\x88}\xb9F\xf1\x11\xfbi{\xe9\x02u\xdf\xe6\xcb\xa5\x9f\\\x8e\xd8\xcb\xf5+} A1G\xec\xcd\xfaU\x11~\x9f\xb5W\\\x04\xa7\x8b08]d\x82\xe1\x18\xb1\x9f\xb5\xd7H$\xa6\xa4#\xf6y\xf7\xd2#\xf6M\xf7\xc2\x9f\xc6\xb3\xcb\x11\xfb\xb4\xbd\xc2\xcaO\xfc%\xcfx\x92\x8e\xd8\x8f\xd6(\xfe&>\x1f\xb1\xdfh\xaf\xc0/\xf84\xcf\xf8\x88\xfdV{\xd9\x05\xf7g\xd0\x91\xdfl/\x0bF\xb4\xe9\x88\xfdZ{Q\xb8\xc5\x17e\x82y\x1d\xb1\x1f\xb6\x97\x8f\xcfxr\x16\xf0\xf3\x11\xfb\xed\xf6\xc2\xf38\xce\xc4\xc2\x8c:,\xb4\xcf\x830\xe3\x89\xb6\x9a\x93\x0e\x95^\x0b\x88\xe3t\xc6\x1d\x8aO\xf3$\x1c\xb1\xa0C\xc9t\xba\xe0K\x81\x83~\x87\xc2o\xb1\xb0\xd6\xf7\xbcC\xade<\xe3\xe1\xe1\x85\xbf\\\x85|\xc4\xc2\x0e5\xbe\x145~\x9c\xf8\xab\x95\xf8\xc6\xb4k\x8d\xe7q\x18\xfa+\xb1F\xd2\xaeUFl\xde\xb5h:b\xab\x0ee\x0f\xa3|)\x9b\x9eu(\x8e\x8c\x8e\xac\xb0\xe8P\x01\xcc6e\xf9\xb3\x0e\xe5\x0bg\xf7\xb2\xce\xb2S\x1dd\xb8F\xec\xb4C\xe9w\xc9\xe5\x8b\xecU\x9e}\x9ag\x99 \xeb\x97\x1d\xea|\xe9'\xefg\xf1y4b\x17\x1dJ\x7f\xea\xa7\xfc\x0b\xff2\xce\xb3\x11{\xdb\xa1\xfc\x8fx\x92\n\xde*\xf1O\x97>\xae\xb7\x11;\xe9^\xf1m\xe6/W#v\xdc\xa1F\xb1a\x1c^d#\xf6\xc5z\x15\x80|~\xd5^\xe7\xb5\xa2\xb7\xf0\x91__\xa3\xc2\x8bh\x1a\xe63~\xb8\\\x89\xd9\xfcq{\xcd\xa2{\x10i\xe4\xc5\x1a\x154\xaap\xda^\xed3\xceW_\x04\xd1\xfb\x11;\xef\x00e\xc1\xff|%H\xda\x1f\x1d\xc8\xd7\xe6\xb2\x02ap\xeb\xc6\n\xeaw\x03i;;}\x96\xa6\\p\xf8\x87E\x87\xc8\xd2\x9d\xe4\xd8\xb4\x9frV;K<\xef\xa4F\x88:\xb5\xf5\x9eh\x8b\xd4\x1c\x8dg\x05\xbc\xd9\xbc|M\xcbW\xbf|\x0d\xcaW\xeal\x8az@\xf9\x8a\x87\xbb\xb0L\x88<6-\x7f\xad\xca\xd7E\xf9zV\xbe.\xd5k\xe3\x89\xf7\x15\x87\xe0\x03\x8f\xa8#/\xe6m\xef\x1a\x11\x8e\x8a\xbc\x9d\xedz\x9e_\xe4\xdd\xdf3\xa2\xe5\x14y\x0f\xef\x1b\xf1\x80\xca<\xe3\xf8\x1d\x96yF_\xa6E\xde\xa3\x9dz\xde\xbc\xcc3\xfa\xb2*\xf3\x1e\xd6\xf3fe\x9e\x01\x97\x85\xca\xbb\xbfe|\xef\xac\xcc3\xda\\\x16y\xc3\xadz\xde\xa9\xca{\xb4c\x8c\xef\xb2\xcc3\xc6pR\xe6\x19\xdf;.\xf3\x8c1\x9c\x17y\xf7\x8d\xbe\x1c\x96y\xc3z\xdeE\x99g\xcc\xfb\xdb2\xcf\x80\xcb\xf32\xcf\x98\xf7\xf7e\x9e1\xef\xcf\xca<\x03.\xaf\xca\xdaq\x07\xdc\xebv\x11G\xab6\xcd5\xd9\x1amW\xc7\xceQzs\xa8\xc5\xe8=}\x10\xa0\xad\x1a\x04D\x10\xa0\xadj3b\x1a5w\xc9\x807\xbfU5\xb2\xf5x\xfd]ugDN48\x81\x1eD\x837\xf0\x03tX7#\xd7\x12\x8e\xa3\x00X)\x8d\xb3\xdb\x87.>\xaa\xdd\x02\xb2\xaaM\xf1\xc1\xaf\xf3\x14Y\x11\x8f\x84)\xc3\xf6\xd4j\x82\x10\xaf\xb4F\xf5\x98\x06z\xc2\xff\x8c\xf9H\xf5-\\j6\xaf\xbe&\x13\xc9\xd0\x19\x14&\xc5\x1b\xd3\xd1\x0c\xc6\xc2\x82D\xff\xda\xaalar\xad\xaf\xb54\xe7\x05ab\x9b\xe7\xac5\xd6\x1a\xec\xe4Y\xe5\xae\x1d\xb1s\xdd\xc7\x01n\x96\x06\xb8\xa9\x0c\x106]\xb7_$\xa9\x86;\xb8\xbfg0\x14.\xe7\xac\xa9\xcc\xb93D|\xc1\x83\x0c\x83\x9b\xd1\x1b\x98\xa3!G\xe2\xac\xf3\x00x\xcf!\x85\x97\xb0|\x0e\xcb^\xcf\x05\x8c\xea\xbe\xec\xc3\n&p\xed\xac\xa7\xcbY\x1f\x96\x8c\x8c\xb0\xaf\x86\x10+\xe6^\x99\xf4-\x0e\xc6\xb5p\xf7\xc7A<\x87\x0e:f,\x06!\xbdM\x1d\xd7E\x0f\n\xcd\x10\x88\xb3@\x17\xadi4\xc0\xab\xe8>\xb0\x01q\x8b)Q\xa4\x19\x944b\x924}\x9f5W\xc9%\xa6\xe0\xfd7!\x1b\xd5\x8d\xcd\xc9\xc6\xb3\x9d/<\xc10{6;\xc9\xe3\xc1B\xd4\x89\x9c!\xab\xc8\xa6NyT\xeb\x07\x12\xef\xd0\x19\xed\xed!)\x15\x14\xf5\xd9\xa6 \xac[\xe2\xef\x9e\xf8\xfbTKh?p\xf3\xc46]Y\xc0\x95\x87\xcd\xec\xcb0\xbf\xb5\x88i\xbc\xcb\x9a\x83A\xa0'\xd0\x92$VI\xe8BO\xb8\xd7\x82u\xa9\x14\xcf\xf9zU\x87r)\x1a\xa9\x96_\xf3N\xb7\xab\xe5+A\xe7\xab\xe5KQ\xbe\xe3\x0e\x12ZQ\xcb\xde Z\xbf\xe3:U^_\xf4^\x9d\xda\xb9h\xad*Y\xde\x88\xf2*;u\x88\xb1ws+\xb3\xf2\xc3[\x1eI;\x8e<\x9aT\x82q\x9e\xe0#\xb1\xee\xe5G\xaf\x18\x05\x17/!\x01\xf7\x9c\xdb*w_1\x0f\xa9(b\x0f`\x1fw\xc9\xc5`Q~p\xcc\xd8\x97\x8e\xdd\x04T\xef\xcf\x0e\x8a\xdd\xc9\xc9\x00\xa3\x8f]S\xa7\x8aG\xea\x87QC\xa7\x9cZ\x17\xed\xa6\xa6\xa13z\xe6*\xb9\xcbg\xad\xac\xfd\xe4\x87:W}\xb82\x1b\xc3\x1b\xa2\xe1\x08\xc2\xe5\xbcb\xf4]{>\x8a\xb5\xf8H\xff\xe0\x11\xd3\x0e\xafi\xc8M\xdb(w;\xbbr\xd5\x94\xa7\x9a\xa0\xf7\xe6 \xc8\x9f\xab\xe8\xf7\xa1q\xce\xd7\xf5\x8c\xa5P\xcc\xa3\xe3t\xd6\x0e\x8fi\xa9\x8b\xea\x84G\x11\x1f\xb6p\xa2)\x0f\xa7<\x98\xd3\xa6`\x85 M\xf0\xe9\xe0\\\xebM\x0bH\x83\xcfCt\xa7\xd4/\xc0\xb5\x08xH\x07\xe7\x9e\xbe\xc6]\xb3\xc5-\xa8\xd2#O\x18z~\xcd\xcd.\xd1\xd0\x91\x0e\xce\x93RZ\x8c\xbcE\xa37\xb9\xfc\x08c\xd8\x82|F\x18\x817\xba\xc2\x98\xa5\x0b\xe2[nq\xe4'\x11\xf1.ps4W\x0fDu\x86p\xcd\xb5=\xac=\x8fV\xc4oH\xede\xde\xc1\xea'c\xf2\x0c\x1at:\x9b\x02v\xe8\x14\xfb\x07\xda\xb5\xe2\xaf}tj\x15\x0e\xb2\xac>\x97\x83\xc6\xe0\xa0\xb9\xbd7\xa0aJcG\xf0\x1f\x19\xba\xbap\xdfPo@o\xfd\xd4\x11\xeed\x9d\xa1\xcb\xeb\xb0\xdd\xa6\xd8\xe2\x07\xce\xa1\xd3\x15\xfbn\xc3\xbb$~\x08\xde\x9d\x17\xd0.\x0fI\xcd\xd6\xf1\x83\x13rk\xd8<1N\"\x9cA\x13\x87\x9f\xd8\x81\x13\x9b\xa9\x01T\xf7e#Xp\xfc\x1d\"\xe6'&\x11\xe8\xdc.\xd5\x8f\xde\x95\x07\x9f\xd4\xf8\x8d\xc8\xb7\x08\xaf\xec\x89 O\xec\xa08uR\x94D\xad#\xff\xd8n\xe4\xfch\xd2\x0f\x9e{\x15\x0e\xce\x8d\x01=\xc3bR(`\x8b9\x19\x8e_\xfb\xb1\x8b:q\x19\x98\x99o\xac\xe2\xf0\x03\x8f\x84\x8f1\x8c\x98`\x1e\xe6\xe0\xa7 \x0d\x16\xb60\xba\x08\xe7\x0f\xe8&=i\xcb<\x81\"Z7\x9f\x85\xe77c\x08\x9b9\x93\xf3\xf9X\xcd\xf1\xaf\xfb\x18\xb8r\xf9i\xc7\xb1\xa4\xf9E@\xe0|\x14\x01\x9e\xd9\xf7#\xf1\xfd[\xb2\x01Gy\xbe\x8c/?\xf9]v\xc6\xe4\xe8\x1fr\xf4\x1f1\xfc\x0e\xfb\xd01\x8d\xb7\xdd8\xc5\xf8\xec\x13i\xb1~\x0dk\xf7\xd98\x7f\x8deQy\xbb*\xfe\x11\xb8\xd7O\xac\x1b\xf6RD.>\xe9\x83\xdc\x14\xdd>t\xcf/\xbbn\x1f\xe6\xdc\xd5Jx\xcc\\\xfaU\x17;=\xfaP\x07\xd1\x84\xb7\x9bc\x8a\xfcY!.V\xa0\x1f\x15=\xd7\xe0\xa1\xa8\xbb\xfa\xfc\x107O\x925Ppv\xfc\x97z\xf2\xf2\x92\x84\x8b/\xfc\xc7\\\xf2~\xf8\xeb\xbaV\xf9R\xad\xcc\x19\xc5b@nq\xa5&\xd4\x1d\xbb\xaes\xa2\xc4\x8c\xaa\x8d\x8f\x86\xe3fQP\x8ar\x07\xceJ\xae\x9ak\xd3\x15FWe\x9dtGI\xce\xca\xcey\xb67\x98\x80e\xd4\\\xe3\xd9\xc9jq\xe9\x07\xd9\x18v\x16\x8b\x9f\xe3\nL\xbc\"\x97\x8f\x841k\x80\x7f\xad>K\xd8\xb3S1\x8f\xceH\x0dTS^\xe7\xf2>Bti\xd2\xdc\xcb\xebH\xd6\x11\xaa\x10\xe48\xcd8$\x82\xe8\x18\x89\xb9\xd4\xc1\x84\xf4\xa6\xea\xb8\x89\xdd\x14\xe9\x07\xa8\x98\xa18Q0\x04\xecG\xbc\xaf\x1a\xb9\xf9#\xc6\xa4\xe0\x93#\xf1D\xc5\xe6\x8b\xc1\x82\xad\xb2\x15\xa5\x8b\x08\x0f\xfb\xfb\x80>r\xfc+a\x1c4\xbd\xe1\xbe[c\x0c-R\x9a\xe4\xc2Y\x0c~\x82\x1e,\x06\xbf\xe1\xffx\xbfr\\E\xc8\x0f\x92):)\xbd\x1c:\xcf\xf6\\G%\x15B\xbb\xba\xeb:j\x11\xa9*Xy\xbf'\xa5\x1e\x15rS\x9d\x1a\x83N\xd3\x1aK\xfe\xe8@G\x98@\xd1<1\xf4\x14\x10w\x1d\x1e\x8aD\x8bg50\x15\xc3u2\x06\xe0\xce\xb1k\x1d5.w\xd3\xb0\xc5\xa8n\x9cL\xee\x8d|\xd9Nro_+\x9aV \xe9\x1c\xb3\x86\x1ao\xc8N\x06x\x84\xbb\x03\xdc@\xce\x95\x8a\x15\xb6i\x91 h\x9a\x92\xca\xa9\xea\x0f=N\xb4R\x83\xd2\x92\xbb\xf2Z\xb57\x91\xa8b\xd6\xd8\xf8\xed\x05UIFm\xb9 A4iI\x90\x0f2\x96\x8b\x99\xc5\xbaf\xa4\x9c\x9d\"\xed\xd5\xac\x18|\x01\xf6\xc1\xef\xf5\x9a\x19\xc0\xc4\x90\xb6C\xfd\x88\xec\xc9\x9c\x02\xb2\xbd\xd9\xeb\xf5\x0be\x19\xc3\x88\x96\xa9\x0e\xd4O\x82\x9cE\x92'q\xc8D\x12\x89\x8d\x0d\x94/b'lb\n\x8d23\x084W\x9a\xd2\xd6\xd3eG\x90.\xc6\x03\x1e}\xc2\xf1\x07\xd7m\xcf\x95\x98x\x8d{\xf7[!\xba\x19\x8b\xa3\x07`\xf1\xc3q\xab\xbe\xea\xc5\xb6\x03\x8b2O#\xdd\x82}\x05\xa2\x81\x08\xc0\x1b\xd9V@!A\xf8\xf5KmMtgu\\\xdcuc\x94\xc1\xf2P\x93\x1b\x1f\xb9\xce4\x8f\\P\x87\x9cG\x12\n\xc3\xb1~%e\xb8\xa1 P\x8c%L\x85\x9aT\x03\x12lg\xd4\xa2\x9dt:\x9c\xa9m\xf5!\xd5gd\xc7\x167[\xb6\xc8Z\x19i\xda\x15\xe5\x86\xd6\xb7\x1e\xd4:\xfb\x7f\xd3\xd8\x87xj\xe8i\xfb\x0bzb\xffo5\xf4'\xea\x180N\xe9B\xc4=\xc66\x94SQ\x8b\x91f\xbb\xb1\xea\x8d\\d\xb9\x1d\xc5\x14\x84\x83\xf7Y\x8a.1\xc7\x17 \x8d\xaf)\x06v\x88\x07\xbf\xd1\x8b_\xfc\xb4\xfa\xac\xfc>O#\xad\xbd\xde\xcc\xf0\x91\xf6z3\xa9^o\x86\xce\xb3-\xd7!M\xd7\xf9ZNX\x1ay\xb5\xca+\x19\xf7ui\x13\xf0> \xa5\x00\x94\xde\x88\x90*\xa4\x06\x16o\x00\x9e\x035&\x98\xe6J\xeeE\xd8G\xbe\x9c\xa2\xdd\xc5\x97(\x88\"M\xd2\x0cPEScl4\xc8\xa3\xd5cl\x1c$\x04\xa9\")\xb6\x8d>V/)\xb5\"\x00\xc2\xaf|\xca\xf8\\\x9e\xaf\xbf\x00'qy\"D\xdb\x9a\x90\x81\x0cv\xe9\x04\xd6\x06\xf3D\x1e\x1d\x9fcgH\xae\xfd%I\xa5n<\xff9HR\x12\xceI\x10\x85\x1a\xad\x05\xc6\x7fC\x83\x1ey\xda\x98\x00z-\xf2\x7f\xe5\x15\x1d\x83\x1a\xaeq\x8a\xf2\xe3\x89\xc8\xa5\xadu)|\xce\xad\xda\x8frU\x95.M\xb5\x06\x92\xfa\xdd\xb1\xe0\\\x94\xb6\x8b5\xec\xc3<\xf2x\x94\x1c\x1e\xff\xeb\x94\xde\xa6G\xd1\x9c:]\x9d\x8e\x92\x8b~\x81;\x888\xe5p\xd6\xba\xb0Q\xec\xe3]\x92\x98x)\x8d_\x93\x94\x8c\xaby2@J|m\x00\xb1\x1e\xccI\x8a\xb7\xbel*\x8b\x06\xfc\xd6\x12\xe1\xbc\x0f\xedf\xbb\x16A\x08\xf5\xdd/\xc21\xc4\x06~\x0cS\xb2\xf2\x9d\xd4\xb4D\x80\xfb\x8e\xc7\xb2b\xef\xc1>\x86\xcf\xa5<\xfe\x0c\xcf\x0e\x1a\xa2\x9e\x1c\x1f\x19\xe6\xd4\xea\xdch2\xbd2\x9c&5\x93J_o\xa8\xc5\xc5\xef\x9a!\x8fLA\xae\xda\x804\xd0\xfe\xdaN\x95,\xb0>\xc1,\x8f\xa8\x15\xf1\x88Zq-D!W\x07\xe1ej\xcaD\x06\x8cf\xbapR\x0c\x93\xaaa\xc0\xa2p\xe1/\xb3\x98\\p#\xdb\xfa\x12/i\xda\"\x0c\xa0\xa2\x0djB\xcd\x07\x9e\xff\x8d\xeb\xa87\xa13\xaccm\xd5\x89\xc1\xf2*\xcbm\xa2\x8aNc'\x1e|\x80\x1e\xc4\x83\x8f\x16i^\xa4\xf7j+\xe8\x10\xa1\x9e\x8b$G\xc1\xf6\x82/\x7f\x18\xa4\x9c\xd0\x84\x1e\x9a\xa0c5E]\x08\x93blF\x93\x17\xf1\x1aOH\xe0\xb8U\x11\xd6v H\xe5\xa8\xb6\x82\xee\x1a\x8f1\x99}\xf8\xee\xe3\x12\x91\xd3\x1e4,\xb3\x96\xe8;\"o\xddt\xcf\xcfM\xf7\xca\xe8xbA\xc44n\x8d\x84\x11#\x11\x987\xda\x88n\xbe\xd6\x92A*\x00\xc3\x01E\x93\"\xa1u\x1d\x17r\xb0\xeb\x84(\x9f6k\x04\xdb\x00T\x82\xce\xba\xde&b\xf4\xd9A\xa32\x99_\xc2\xe9*\x15\xbb5+J\x0c\x01?\x88\xe9\x92\x864f\x0c\xd8\xc7,L\xfd\x15\n\xdd\xc2\xa9gIS\xc5\x95\xe7\x88\xach\xe2\xc4\xee\xc0\x0f\xe7\xf4\xf6x\xc1\xda\xaf\xbe\xdcu\xe1eM\xe3\xe5\x83\x08c\xa7\xeb\xae\x809&{\xd1\x0d\xa8\xe0c\xcb\xd6\xb7{\xec\xd4\xc2\xb4\xec\xfa\xb7\x94\xc8\xf9\xc8;\xd5yx\x11}S\xf7~\xb1p\xc6\xeb%\xeb`\x8b\xf7\xb5\xeb\xae\xb6\xa5\x18u\xd6\xeel\xf4;\x0c\n\xa37tU\xaf\xf8`\xd5\xb1\x9c/v\xd95\xab^\xcb7\x91\xdd\x93\xbb\xd5E\x14\xc0D~\x19\xd7\xccVA\x9c5\xfe\xc0O9@\xd0\xbe\xf1?\xffS\xfe\xec\xd6\xeb\xa3\x8e\x92\x87}}[~\xa9T\xa6y3\xc17e\xb0\xc3S\xb2\x14\xef)%\x9a\xb7\xf0\x92*BX\x95\xce\x94zMOX\xf7\x99\x91\x15\x04\xc2z.\x04\xc8\xf0\xa9\xa8\xe9\xb9\xad8w\xc7\xd4\x0d\xecC\x80\xb9\xa6d\x93\x0c\xde\xee\xe0&&\x8c\x99?\xaf\x93))\x03t\x93,Y\xd3pN\xe7')\x89S\x0d\x0c@H\x04E\xcd\xbf\xfa4\x98\x1bj\xa2C\n\x8f\xa9\xe4\x87:\x90\x820\x06\xefz\xd1j\xcd\xf6\x92\xa9\xa5k\x9ePA\xfbl\xa5qC\xc4\xf2)\x995\xd1Bhb\xce\xf4\xc0Z\x16\xbbfI\xd3\x0fr\xe3\x1c/\xf4#\xbc\x83}X\xb2e^:K\xe7\xbd3\x9d\xb9\xbaKS\xf48\xb9C\xb3(\x14n\x85pw\x87I\xb3ej\x91;\xcd\x8blD\x17h\x9c\xad\xde\xf9\x1e\x96~\x95\x028;+M+\xb7\xa5\xfa\x17\x15\xeb\xed\x93>\x9cT\x8an\xfbp2M\x18\x88o1MW@\x90\xc6\xb3\xe5\xfcIb\xa4(\xbf\xf8\xa5\xcf\xd7mp6\xc3\x83\xd2\x19\xb2\x0fW8m\x8c'\xaeu+\xb5!j$n\xe8\xaf\x9cs\xf5\x0d{dh\xed\xde`\xa7\xf9\x04\"t\xca\xe2\x1e]\x0f\xb9'\xcbU\xcb\"\x9f\x0e\xe5\x8e]Jk\xfa%\xd0\"\xf7+\xc4\x8f\x8b*vuY\xd97 \xb2}\xb8\xc8O\xe3\x074\xd6\x9d\xf2\xd3\x18\xf2\x01Ur\x1e\x82\\\xe0+z\xd7\x9c\x8a\x04\x14R35\xa46\xa8\xf9\xaf\xa7\xd2\xa8\xc4\xba\xbe\xec\x94\xbe\xa6qB\xab\\\xb4\xfa\x91\xa3\x83f;>\x91\xd9@\xde\x1d\x19\x15\xd4\xeaG\xca\x06\xe9`\x1d\xadMZM\xf5\x83\x0c\xb5\x98fn\xd0\xc3\x91\x08\xd3h\x84\x1c\xb5\xb8\x91\x92^l\x94\x1f\xb3\xa5\x1c(\x02q\xde\xde\xd0\xd6\x9e\x96Hx|`l\x91\xdf\xf7\xe1\xb4D\xe8\xf4\xa0Q\x0e\x8c1\x9c\xeaW%\xa6 m\xb4\x02\x91\x1f\xccz\xc1\xedp\xe8\xb5b\x9a%\x14y\xf2gBCy\x81;8\x17?B\xf1L\x81'\xffM\x03\xba$\x18\xa5\x84'\x92\xc4\xd2\x15\x86 \x95\xd9\xc0\xba\xa2\x94\xc4K\xa5\xa54\xbe;\x0c\xd3\xd8\xa7\x89\xcc\x97\xec|p\xfb\xd0i\xb0h,\xa2\x9d\xb3uG\x91\x17\xbaiWxo\x88P\xdbCW\xe1N\xb8v\x86;Kux\xea\xb4\x9eL\n;\x12 \x86X\x1d\xe1[i :z\xf0'i\xb4n\xa1\\\x03i\x00\x95\xa3\x8f\x19\xb7\xa5\x0dU\x05H\xd3\xe1l XP?\xb2\xb8\xd8`*}\xd4\x93p\x98\xd0\x01\x1eJ\xf2\n\x86-\x82\xf9eU\xd3\x14_\x93zb\x020\x83\x821\"L\x8c<\xbc\xf5\xe8:\xc5\xa8\xb4\x0f\xc4J\x06\x9c|\xa0v\x00\x156\xdf\xcd\xb4*vL\xa9\xf6\xd5\x8f\xd4J\x0d\xc4\x96\x140\xecC&\xf0\x16m\xc4\xc5NA\xef\x11\xae\x04\xaf\xa3\xba\xc4s\x86\xcc\x1d\x8b_\x85y\xe4\x12\xc5\xfd:\x1aHg\x9d\x0d\x18=\x07\x1fU\x11\xcfacC\x1b\x17B\xfd\\\x8b\x1c\xffU\xac\xf2\x1b\xcc{@H\xb1\xa4\x15\xf2\x81D\xc08\x8a\xc4\x9e$\xac\xb7w\x91\x97\x13\xe8\xd8\xe9\xd2pn3\x1d\x97\xad\xc8W\xe1\xc5>\xe4d\xabi\xa2 &\x8b\xb9kD6\xf4>tQ\xc3\xf1.\xf2\xba\x96\xd3M\xfd\x04\xe5\xd7\x85J\x18\x1bhw,\xe1\x9dm\xd0f\xb4P\xa3\xcc/0=/\x1f\xb0\x02\xb7\xa2\x10\x1d\x10\x9a\xc7\x01\xda\x96\x8b\xb9\x94\xdaV\x8a\x1b\x1b\xfe\\\\z&\xdfs\x8a\x8d\x0d\x7f6i\x1et\x1f\xbc\xa3\x0d\xd4\xfc\x1b\"\xf7F\x1a\xdfA\x92\x92\x94b\xd6\xf4\x1b?\xbd\x8c\xb2T(\xc5\xa2X\xde\x07\xb4Yy\xf8n\x10\xb7\xd6\xb0\x98\xf9?\x84\x84\x93\x8b8[\xa7-l\xac\xe5G\xe15\xed\x94*\xcc)\x95\xf1Z@~r&\xb0B\xa9B\x03\xbf+?\\\xb9\xaa\xa1\x18\n+\x10W\xb6rny-\x96*.-U3VI\"m\x10\xe8\xd5\xcfEL\xc9\xd57]D@}&\xa6)\xc5\xc6\xc5y\x8f\xfa\x02\x99>\xac+}z\xf0\x16Q\x01\x0e\xc8\xd4%\xbe2el\xcc\x17\xac\x9c\x05\xdb\xe5a\xe2s\xd7\xd7\xfc`@-^#wA\xe4\x11K\xfb@\xc4a\x99\xf6\xb11\xc7\xc2=\x8a\xa3W\x1do\x1f\xae]a\x0e,GA\x1d\xf2 \x06N\xbe\xf6\x00\xa4\xff\x16\x1cVi\xc58<4\xcb\xc6\x1fLJ\xf3\xc7\xf6a\x0c\xe2\xea\xa3R\xd3\xc9Y7\xb9\x83\x04\xf3\xc2\xfe\xd6\x98s\xd1D\x19\xc0\xfctf=\x84Q\xbc\"A\xa9\x07y5\xed\xa8o\xa4n\x1f\x0c\x1e\x7fz\xa0/\xfc\xd0O\x1a\xfd\x13\xf2\xda\x05\xc7o'2iNd\xda\xf9\xd3k\x88L\xda\x82\xc8\x84\xea\x8e\x11\xdbKe\x9csL\x0c\x95\xad\x81\xc9\x89\x17)\x8d\x19e\xe9\xa3\xe3\xb8 h\xf0P\xb2\xdd\xca\xdbC~\xfe\xfd\xa0)\xa8\x92\x80d;\xa2\xcb\x8d\x84\xdb\xb2\xa4\xa0\xd9\xb5\xb1\xd8\xb5\xcd\xfd\x81\xa26\x8b\xed\xbb[\xfd|0\xd9d\xab\x1f\xfb\xb1\x0e\x05\xc10\xcb\x11\xf0\x85GG\x8d\x0b\xf2\x03&\xca\x07\x82\xef!iJW\xeb\xb4\xfb j*\xb5\x01x\xe32\xae\xea%\xad&\x82\xea\x0eR\x94\n\xf6\xe5\x91Woc\x8c7`\xe7\xecc\x9adAzDVt\x0c\x0d\x01-\x18]{\x17yc\x83m\"p\x85\x0e?\x9d\xb8\xe2A\xa1\xab9u,\xc4@\x03q\xac\x95VM\xc0J?sy\xf6\xbcA\xcd+q\x95\x9f\xf1\x8a\x9eI\x89\x0fs(\xf2\xe6\x1d\xea\x01Q\xcb\xa7\xe9D\xaa\x82[\xfb\x0e\x11Z\xe5S\x07\xef8\xa7:[f\xb1\xc8\xfe\xe0\xdc\x0f\xaf#\x8c\x02j\xb3\x15P?\xb9\xdd\x80U\x8b\x99\xb7f\x8a\x95(?\\s\xc8\xd6n\xae\x11\x08rm-\xf8 \x90 \xa6d~\x07q\x16\x86~\xb8\xb4\x89\x01E\xabZc\xf9jU\x95\x1e\xe5\x19\xc6\x0d\xd9\xf0\xe5GL\xf4\xadA9\x0e\xcd\x9a\x85\xb0\xe0\x00\"<\x96\x10O\xfd\xe7\x8d*Z\xc9\xf6\x85\xf9\x06m&\xef\xa4\xa9Q\x10\x0dg\xe8\x14B\x18\x064\xd3W4\x96m\xd32\xc8\xca\x08\xe3\xeb\"\xafns\x1f\xa0(\x85\x1a+\x7f\xa9x\x06\x12\x13\nZ\"\x97\xc7\x85Pjb\xc3B\x0d\xdb|\xfe\xe4\x92\xb9\x8a]E\xa3\xcd0+\x90x!q\x92m\xbc\xcb~\x9b\xde\x01\x9d\xa9j\xba@\x07_m\xf0v\xe2C/1\xb6\xa1BU\xc3\x01\x97O\x9d\x82o\xe5\xad6l\x18\xd8\x87\xb9\xbd\x8a\xd4\x17\xdd\xe4D\xa8\x19\xb1K\xdcq\xd2\x9a\x99\x10\xc0\x957 \x13\xb8\x841\xac\xfb \x8e\x8b\x87\"i\xe3u\xa6\xfa\x11I\xfd\xb0\xabvZ06\xc6\xb1\x18k\xe3\x0b_\xb3\x07T\\MrQ\xc3\xc9\xf1\xae\x90Y\xa4ZV\xd2\xad\xc4\x8eX\x06F\xbaV\xfa\x99-}\xd8\x07\xe2\xf6+\xc97M\xc7\xf0\x8d\xed\xc42;S4\xaeX\x8ai\xb5$z\x99\xd7\x89\xc4\xcb\xdc\xb3\x07\x87\xd1v\xa6\x8d\x11\x1c\xda\x0eQ,E\xc3\x08\xdb\x0e\xab\x15\xd0\x0f1\x9e\xa0\xe1\xe1\xad\xed\xe1\x89\xed\xe1+=0\xa6R\x01\x91c\x9d$=\xb3\xfc\xce\xcal\xd8&?\"hg;\xf1Le\x83\x05\x93\x84v\xb2\xadW\xb7j\xee\xaa\x9f\xf0\x95\xc5\x9a\xb4Nu\xd4\xd1\xa83\xb1\x19\x1a\xe4]\xf9\xad,\x8d\xe9\x8dt\xa7W \xda\xc0\xc3A\xc9\xb2\x90\x07\xbc\x8ey\x90\xbc\xa6\xd7@\xe1:n\x1c:\x0dg\x18a n\xc9{Hr\xd5\xd9\xdf\x177Fm:\x04\xe5\xa8\xc9\xda\x13a\x10\xd7\x11 \xbf@n\x1e!\x14pE\xcb=\x8dE`\xa0(E\x03L\x05\x8bV/]\x17&r\x1dr\xef\xa2` \x9e>\xc8\xb8\xa3\xfaI\x1d\xb9\x99\xa8X\xa2V\xaf~~\x88\xeb\xae\xfaI\x9d|\xd3>\xacC\x17\xc6u\x10|\xd5\xd4\x93\xdc$\x01C\xc9'-\x07\xd2j\xc8\xcd\n\x04\xe2d-x/\xb1w\xd2Z\xb0\xf8R\xad\xb6T\x08\x14J\x06\"K;\x87\xa0\x8f{z\xcc\xa8B\x9dv\xb5\"]\x07\xd6\xc8/<\xec\xa6\xd4\x0bL\xe5\xfd\xacF\x11U\xb0\xb9F\x99\x13or\xea&\x0e*\xb3\x92\xb6`\xac}L:/\xc74\x10\x80\xa9^\x1f\x17\xca\xd8\xc2PB\xcc\xd5\xd0e\xaev\xbc6\xd3\x84T\xc3:\xe5\x1d\x943\xd0\x9f^\xd2\\\xa1\x02\xf3\x88&\x10F)\xac\xe3\xe8\xda\x9fS \xf0\x18\xdf\x7f\x0c\xbcA\x93b\xc8\x86\x0b\x9aH}\xdaE\x8c\x90*\xc7}e%\xc5\xa85\xf4\xb9&H\x0bz,\xf1\xcf\x02\x80Hh\xc5\xebK\xac\x81\xa8\xbc\xeb\x89\xf4B\x90Tm\xe0\x95\x88\xe0\xed\x9dt\x8a4D\xe8\x9dfx}!\xe2\x99\xa7\x85B_\xa8\x9b\n\xee\x02\xcf\x95\xb4\xa4P\xb2\xdb\x19\xe8f\xc0\xb3\xcd\x8f\xcb\xef6\xa0@\xbe\xfc|\xd0\xe0s\x1c !\x88#\xc4\xd4W\xab\x9d{lwa\xd1o \xae\x1d\x1e\x03\x9d\x0egu\xf4\xa9\xaf\xc3\x88\x9b\x9ar\xa0\xc9\xcbd\xcc\xc72\x9a\xb9}\xd8T\x1f\xabz|\xa0\xdc\x1d>\xd7\xd2c\xd1\xd6\xcc\xad\x9b+\xa19]\xdan\xce\x1f\xecs\xa6\xea\xed\xd9\xfd\xbd\xf6\xfa,\xcdMR\xa4L \xbd:R\x8e\xbf\xa5F\xf6\xab\xd1\x94\x0d\x03;\xd5\x0f\xac2W\xd8\x87\xa9}]\xb8\xa9G}e08\xacd\x92\x8f9\x10\x8b\xc8N M\x9d\xea\xfd\xbei\xa4\xef\xf5#E\xaaj\xd3\x16\"|\xa7\xc4p\x07\x81\xb4]\xa1\x12|\x7f R\x9fom\x8fJ\xcf_\x1d\x7f<,?/eU\x1a\xbc>|s\xf0\xe9\xdd\xe9y\xb5\x9fQ\xa5\x1fY\xef\xcd\xa7w\xefJ\xf5\xb6wJ\xf5\x82\x88\xcc\xf1\xc2\x94}\xa9>8\x08\x82\xfc\xd9\x01\xe3 \x8a\xc7 Y\xd0w\xf2]\xf9CWA\xb6\xa1\xfcV\xab\xcd\xb3\xd5\x1a\xb95\xf6\xa5\xfa\xfek\xf9P\xfeP+\xfc\xf5\xe0\xfd\xbb\\q-`\xb0W\x9a\xdb\xfb\xb7Go\xdf\x1f\xbc\xb3-G[0Z \x98x\x84\xbb\xedv\xd9\xb7n\xe9\xd9\x9a\xc4\x18F\xd1w\xba\xf8\xb5\xfc\x14\x93\x19\xcb\xe7\xe2G\xb9\x06\x99\xcf_\x95<\xa5|\xa7[.\xeb~\x93M\xfc\xb4\xea\x06\x1d\x15\x00-\x95\x8b\xb4Z\xdb\xfaDq\x08\xbdRyV\x80\xacT\x9eh\x9cE\xad^\xa1\x01F\xbd-\x15y\x18\x07\xbaL\xaba\x1f\xb6\xcaE\x0c\x81\xb6\xcbE\xf3z[\x97\xf5\xb6\xae\xebm\xad`\x1f\x9eL\xcfn\x87\xc3\x8d\xb3\xdb\xe1\xd3\xb3\xdb\xe1\x8fg\xb7\xc3Wg\xb7\xc3\xc3\x8d\xb3\xdb\xd1\x9b\xb3\xdb\xbd7\x1bg\xb7O\xb7\xcfn\x9f\xeen\x9c\xdd>{s\x96\xbdy\xf3\xe6\x10\xff\x7f3\xbb\x9f\x9ee\xaf\x9f\xb2\x97\xb3\xd7?\xbey3s&\x1dV\xf2\x8a\x97\xb0\x1a\xee\xbd3\x19O\x7f/W\xbb\xff\xdd\xadT{R\x1e\xd6R\x0c\xeb\xe9\xceY\xb69\xdc|\x8a\xff?\xab\xd6\xba\xc3Z\xfd\xb3\xe9\xd9\xec\xec\x1fg\x9f\xab\x8f/\xd8\xe3\xdf\x9d\xc9\xb8s\xdf\xe9\xdcw\xa6d\xe3\xefg\x1b\xb3^\xc7\xfd\xf3\x13\xbf\\\xf3\xbc\xa89\xfd\xbdh\xcfu&\xe3\xff\x98\x0e7\x9e\x91\x8d\xc5\xec\x1f\x9b\x9f\xef\xf9\xf7\xbf\x9fm\xfc_\xcf\xcf\x9e\x9cM\xc6\xff\xf9h\xff\xacw\xf6\xe7\xfe\xf9\xd9\xa0\xf3?g?<>s\xce\\\xf6\xf6\xcc\xfd\xe1\xcfO|\xddYqc<+F\xc3\xc2\x8an\xb4\xc5\xbf+\xd4\xbc\xde\xd4\xa1\xb1\xa9gEK[\x9b-Z\xba}HK8\xbe\x87\x8e\xf5\xc4\xd8\xc3\xf6v\xd1\xd4\xb3\x91\xf2}K\xe9b\xb3\xf4c\xa7E\x87\x1a\xbd\xbaF\xc5,\xc7\xf0\x14^\xec\x0bgI\xf6mg\x0f\x13Zn\xb0\x07cx\xb6\xc7\xca0\xaa\xf8\xd6&\xdc\x0b\x9bF4a\x1c\x0d7\xd1\x9ca\x83U\xea1\xb0\x8cacd\x1d\x98F\xff]\x8c\x82Or\x02\xdd\xb3a\x97\xf7\x9c\x97\xfc\xff\xb0@\xadr\xc1JF\xa3]\xa5(\xc5J\xd5\x82Q\xbe\\\xac(\xe4EjK\xd7X4\xdcT\x8a\x16\xbc\xd6\xb6R\x14\xf3Z\xa3\xa2\xe8\xff\xcfJ\xb6\x94\xd7\x00\x0b\x8a\x97\x1ew\x1f\xc3\x18\xb6\x95i<\xc1\x11\xaa=\x9d\xb1\x92=e8\xff\xe7\x7fc\x9d\x1d\xa5\xe4\xff\xc6:\xeaL\x91*\xb0\xd2\xa7\xc3J\xe93V\xda\xedZ\x17\xe1\xc0\xb8\x08\xb8\xfe\xbb;;[;0\x01\xeet\x87y\x0b_]\x92\xf8U4\xc7\x9c\xa8c\xed\x83\x9d\x9d\xcdg\xbb\xd0\x03\x87!\x0eka\x17^\xbe\x84\x11\xe3uvv\xb76\x87\xe5G\x8f\x18\xbc\xb7\x14o\xd9\x82_\xcb\xed\xe4\x8e\x85\x9a\x043\xee9\x9b;\x8c5\xfb\xa0);\x054\x97;\x85\x17\xb0\xb9\xb3\xfb\x1cN{=\x17\x8e\xa7\xa73\xd8\x87+\xe7\xd4\x85 \x8c`\x0c\xc3>|(\nu\xc4\xe9\xbdV\xc1\xa9\\\x94Dx\xdf\xc7\xc3\x17\x0f\x16~@C\xb2\xa2\xa8,\x0b\xd7Y\x8aN\xb4Q\xe2\xa7huH\x07\x81\x1fR\xb5\x0c6D!:\xd0\x97\xe6^\x1f\xcb[\xedX8\xcf,\xc6i}\xff\x0f\xed\xfbt\x10\x85\xbf\x918\xf4\xc3%w\x8d\xce\x7f\x8a@\x85\xa8U\x12\xed\xeb\x16\x87\xad\xcbQMe\xc4\x18\xb7\x9a\xd1\x99V\xb9{]$\xa4\xab\xcb\x8e\"7\xf0>\xd0\xc15\x8d\x136\x8dG\x8f8$\xba\xf3l\x1d\xf8\x1eF\x1d\x84h\x01\xff\xc1\xba\x84\xb9\x1fS/\xf5\xaf\x91\xc7\xe2IC\xf2\xa4:\xf9\x9b\xe5\x9a@<\xc6`&@o\x89\x97\x06w\xc0d]\x99\x03\x12\xe3E\xb3A\xb0-\x85w\xe0O~w\xd8\xa17\xeb\xb9g\x03\xf9\xed\xcfO\x06\xf4\x96zN8\x1d\xce\xb8\x17\x1b\xef\xc8\x0f\x82\x8dE\x14\xaf\x98\xa4\"\x1a\x04L\xb0I\xa1>Z\xc6\x8e!\x03\xf96L\x9d\x18\xc3B\xe2^\xf1\xcb\xe5\x9b\xb2\x9c\xcf.*z\xcbB>\x13r\x11\x88\xf6%\xccD\x9f20\x1b\xe7?\xe5\xc3}\x081\x12%\x1dx\x97\xd4\xbbz\xe7\x87\xf4\xc7\x98\x92+\x0c{\xc1v\x90\xec\n\x0d\xdc7\x8b\xaf\x7f\x88^\x93l\xcd8Y:o\xe8\xb4\xb4\xba\xd5\xccb\x07?=\x0c]\xea\xb8\xb2iX\xed\xd3\x83\x9f,\x8b\x9d\xdeDE\xc2O\x06\x988\x07\x08\xf2\xc7\xb8\x0e\x17\x83\x94&\xa9\x13\xa3\xa8][\xda\x94,\x81'o\x01g\xe1\xc7I\x9a7\xe8J \x94\xc6\xc0zI\x84\xeef\x90\x92\xe5{\xb2\xc6\xcb[9\xe2\xc7\xe9%\x8d)\x9a\xbb\xc1:\xa6\xd7~\x94%\xc1\x1d\xcc\xa9\x17\x90\x98\xce!\xc9\x16\x0b\xff\x16\xa9b\xf71\xf4 \x86\x1e<\xee*\xc3x\xec\xf6\xe1\x9c\x0f92\x0fy\x1dS\xd6\x8c\x93P/\n\xe7-\xc6,\x07;\x8dg\xb6xr::\xfa\xd1b'\x89\xb7\x0cy>\xb5\xf2\xba\xa2f\x10^\xe8QA\x18\x93Ib+\xdcH\x11q\x8c\xd1\x81\xf1(\x89\xb8\x83\xad\x8fw\xbfB\xed\x06\x11\xbc\x00\x9f\xfd\xe9\xed\xc3\xc8\x15<\x83C\xb0\x8e'\x8e\xb4\x03\x06PW\xf0~/\xf6y|8\x82|\xcfh\xb4=\x1a\x8d\n`\xd3\xdb5\xf5\xd8\x9e\xb8&\x81?\x87\xbf\x9c\x1c\x1f\x15\x11\x0cuv\x8bhp\xb5\xe2\xab\x96)4\x84-E\x92\xc6\x94\xac\xd0\x16\x89\xf8a\x02a\x14n\xacc?\xe4[=o6\xd1\xb6+n=\xd8\xbc2\xd3\x9ai\x96\xecu\xb1d5\x87M\xbc\x7f\xe1\xeb\xd5\x87\xa0\xdc'B8\x1e\xf8 \x17\xfd\x9cP\xc1@\xa1\xaaY\xd1xIaE\xd6k?\\&\xcf\x11\xdb\xc4\xdd\xd6\x1c\x92(\x8b=*.9\xd8&P\xc9\x1aC\xc3\x8c\xaf\x1e\x13\x16\x1d\xc58\xf6\x8a\xdea\xa2\xb7|A3x\x01\x01\xfb\xc3\x17\x14\x9dd\xa6\xd9,\xdf{)\xda&`r!\x1e\x95 \x9c\x12\xb6\xeb\xf9\x0fU#\xae\x03\xcf;\x05\xa3\xd5t\xaa:P\x05}\xf0\xeax\xcd\xb0\x90\xb3MN\xa4\x9e2y\xc4\x11\xf8\x07\xe6\x83N\xc9r|GV\xc1 \x8a\x97\xfd\xcd\xe1ps\x8c\xf0\x13\xa6\xf3u4gm\xf3\xf4\xd2~\xc2\x99\"\xdf\x96\x958\xe0\xe0\xf4\xf0BL\xc2.\x80\x17\xe0\xb1?\x1cv\x12\x17\xfci0\xd3\x9b\xe4!\xf6\xe6\xd5\xeau\xf09\x1d\xfc\x91\xf0\xbb\x95$\x8f\x82\xcc T\xa7X\x13^\xe0p\xbe\x08\xd8\x1e\xc3\x0c_5\xd6i\x1f2\xfe\xa4`\xb0\xca|\x01\x9dK\x14\x83+z\x87!M\xd2i\x84\x17\x7f\xf9\xadM8\x8dfZ\x01(\xb5.\xfe\xa7V\xb2\x94\x102D\x8aMN\xa3\x14JR\x8c\x1c\xf32\x15?{=&Vl d\x98\x80\xa3>\xea\xe7\xa2\xa6\xb5E\xce\xcb\x15\xaf1\x1e\x9d\x83\x87\x00\x02\x16\x9d\x9e\xd8\xf6\x92\x84\x8aSx|\xd6\xc3\xe4C\ng\x8a\x13\x90\x8dY!\xf37\xd3\xd9]J\xc69\x94\x19\xfflSx.\xb2~GZchqyr\xe8D\xees\xd7\xd4Z\xaf\xa7\xb6\xa7\xdd)\xb8\xdb\xb6\xb8he\x08\xf0?\x8f,\x979mz\xd6\xbe\xfc\x19n.}\xc62\x8c\x86\x05#7\xda*\xbe\x8bb\xc3\xb8;7x\x14\xe12\xd6k t>a\xf2\x90f@\xf7!fx\xc5\xd7\xfbm8\xe7\xe6\xcd\xc3\xe7R\x90e\x0b\xa0>d\x95\x1f<\xed\xcf\xba]\xb6!8\xf4b\xba1G\\e$/\xf8c\xcel\xce\xe9\xc2\xf7|V\xec\xe3S\xe4\xfe\x91k\xb3b\xe5\x1b\xc3~\xed\x8bD\xb3r\xc8ZR\xd0q\xb6wpl\xa6\x8d,2\xe7n\xefr[\x01\x0c\xfd$\x84\x96z]\xe81\x82\xdaTe\x93\x13\xc1\x90m\xc5\xad\xbe\x80MC\xff\x9d['u\x1bd\xc8\xbfke\xc0QNjTf\x81\xeb.R\xcc\xda\xcfc\xce\x15\xcf\xe2AL\xd7\x94\xa4N\xf7\x0c\xcdd`\xa3\x94(K\xd7\xf5\x8f\xda\xae\xafE\\A\x89Q)\xd1X\xe2\xf9\xdck2\xf4.\xaby\xb3A\xa8\xa5u\x99Q2M\xae\x11\xeetQ\x08\x95\xbcM1=\xfe\x831\xb8\xf2;;,\x88\x90 \xda\x11+lk\x9b\x93\x13\xfc~\xebX_Dtp5\x97\xbe\x92\xb9\xed\x0c\xfbP\xa6\xffHbY\xf1\xc6\xc8\xad\xef\x96}\x06c\x99\xbb*\x0b\x82v\xa3\xafu\x9f{.\xf0\x0d\xc2O\xdf\xdf\x04q_\xf0<\x1e\x1d\xcc\xce\xc2\xbb\x92\xc8\xe1\x96\xc7\xd7\xa6\xf3~q\xd8#-\xc8\x8f{1\xa5\x97\"^\x8c\x00\xb0+\xce\xb1\x0b2W\x89\x00\x93Z\x08$\xf4o\x19\x0d=\n4Lcm\x94\x80|b\x15\"\x93ji\xa9$\x01\x9dL\xe0\x08\x13\x9c\xd0W'\xc7\x1dd'\xe8\xe0\xca\x0f\xd1\xaaG\x8e\xa0\xdb/6\xd3>\xe3\x0c\x9b\x18\xca_\xcd4*g1\xf95\xbev\x07T1\x9dMq\x8b\x9f&N\xf3\x11P\xd8\x0f\xe8\xdaQ6\x0c\x9b\xbfI\x03C\x84X\xc9\xafv\x18U\xde\x15\x1cP\x9b\xd3\x82\xf1@\xc8\xcfw\xcc\xdcA\xe5\x851lq.)b\xef\x12%\x01g\xb7\xd3\xe9\xb6o\x85\xbf\xd1\xedC\x99\xd11\x98<\x1b\xd9\x816\xdd\xd5^\xcc\xd9\x00\x85\x0b\xd8\xdd4\x1e\xfd\n\xe5(lF\xd8\xecc\x9d \\\xdaem\x86W\xb0\x89Y\x98K\xb04\x9cK\x9d\x80\x10Do\xfc\xf4\xd2\x0f\x81\xc05\x8d/H\xea\xaf\xd8\xcaW\x15<\xa6p \x82sS\xe6\xdb\xb9\xe5\\\\\xbe\x9al\xaf\x11\x98H \x98,\xa5\xceC\x08\x90B\x10\x06z\xeb\x05d\xc5\x11pE\xe2\xab\xa4\x9b\xa7k\xae\xc0\x82\x1dP%\xf1\xa1\x87\xc9\xed\x84bG\x95QCR\xd1\xe9T\xfaL2\xef\xb2$r\xcb\xcc\xe5U\xf4\xe1\xa4\xbd\x1d\xdc\xeb\x0b\xdd\xbc\x9ew\xb9R\xaa\xd0\x15\x18!\xb5\x08\xa2\x1bF.\xd9v\x8d\xe2\xd2\xf8\xcb\xab\xa6#\x7fx\x90u\xce\xf5\xfd1x5\xc0h\x8c\xf6\x1b\xb1\xcb\x03KH\"\x1a\xc3\xb8\xae\x06\x0b]\xa5F\xaep\ng\xa8\xe6\x1a\xb3]*N\x89\xa2\x16+\x93Ou\x8f\xeb\xf2\xb3\xac\xcf\xb5mY\x98k\xd6\x94UG\xcdZ\x88\x9a\xb5\xc7\x98\xda\xdeJ\xbc\x7f6\x13o\x0dY~\xca\xc9r\xf8\x15d\xd9\xcc\xc8\xe8Is\x08\xa2\x86J\x9e\x0d\x03(af\x15\xab\xe5\xc6\x0d\xc5\xc6\xe5\xa2f\xe7\xc4 \xd9\x0en\xd3\xa2\xf6\x84U\xb6M\xae\x03)\xf6cy\na4\xa7\xb0\xca\x92\x02\xdfH\n\x01%I\x8a\xaa{E\xcbV:\xa6\xed\xbb\xa9a\x81\x7fS\xb4a\x9as\x01\xddqQ\x1b\xb6\xea\xc3\xb2\x0fw}\xb8\xe8\xc3y\x1f\xae\xf8e\x94\xe6\xd0~o8\xcc\xff0\x1c\xe6\xcab\x07~\x92\xd2\x90\xe6\xb2\x12\xff\xe5t\xa35\x0d1\xbfx?\xc7~~}\xa3@A\x16\x08~E\xfe\xcc9\x15^\x80jO\xd8Gc\x88u\xc1\x97-\xf8W\x11q\xad\xca\x88:\xefs~\xb5\xcc\xbe\xc1\x84\x03\x01\xd3_\xa9B\xa6\x90:\xf0\xba\xae\xfa\xf0\x85P\x84\x9d\xa2\xf1\xa5\x8b\x17\x1e\xec\x85\xd3\xfa\x19*N\x14\xe4\xa0\xee\xefq3>w\xcb\xc3\x9b\x14\xa3[q~\xec\xbb\x0c\x12\xc6\xd8\xbcn\xfdV \x832\xbfg\x83\xf4\xf3\x1b\x9cS\xf6`-6\x15\x93\xfa\xce1\"w\x0et/'i\x98\n\x80\x1d+}\xb8*\x1f5\xa5{\xc4\x1cR0\x01\xde+\xca^W\x08\x9c\x87\xdc\xb1\xf4\x0b%ob\x96\xce@X\xee\x98%4\xf6YXBr\xcf-\xcf.%Nj\x9f^[\x9f\xae\xacO\x97\x86\x0d\x08\xc2\x8eF\x97\xa7\xf2\x0b\xe4\xc7\x85PY\xb7\x93\x1f3\xa3\xe7\xbf\xf4Vn\x16'\xfbB`\xe6B\x1b\xa9\xf0\xb4\xbb\\(@\x81f\xe7\xa9\xf8~\x7f\xcfhyl\xb5\x84F\xad\x13\xd2\xc1\xb0\x0f^.\x02\x1auP\xea{\x8a\x80\xd7\xe8F\x880n\x03\xb1C'c\xfb\xdcP\xb5\x81\xbfR?l\x84;\xdc\xde\"s\xe1\xd6\xd4y\x85S\xce9F\xc2X\xf8\x94&k\xe2)\xa7\x8f\xaa[\x05td@\x0e\xfa\x8a\xdemp\xd3\xea\x84\xae \xf7\xf0\xc8\xd9\xe9\x8b \xf2\xae\xa4\xd6\x9a\x1d_(l9x\xd7\xb0\xe8\xc3\xbc\x0f\x97}\xb8\xe6w\x05n\x1f\xf7\xc6\xb5\xa0\xd2\xa2\xe8N\x109\x81\xdc\xc8|\xb2\xbf\x97\xf9\xfe\xc57$\xc1\xb7\xc3\xa5e\xf2+\xa6\x04\x88\x97vF\xe9\xba\x91Q2\xe5'a\x80\x17\xe6\xa0\xce\xba\x19\x17\xf8\x9d\xd8\xb3\xad\xbe\xd0\x83sM\xac.P\xbd\x85\xf2\xb1>G\x9b\x9caX\x1beQ\xf9a\x1d\x8e6wD\x8fC\xde\xe3?\xda8\xf4|\x01[\x15\xbb}0\x80\xa1|\xf2\x0b\xfc_[\x19\xab|\xab\xb1\xbd\xda\x06\xbc\xe2\xbe\xb0.\xbe\xf2\x9b4\x8e\xbb\x97%\xdc\xbdVp\x97\xd1\xdb\x1c\x7falR\x1b\xc7\xe6\xc3d^\xf0\x1f\x9c>\x82\x17\xadV\x04.hzC\xa9P\xf8xQ\x10P.\xc0R\xeeD\xc8H\xa3\xc7\xb6\x95H~\xc9\xc5=\x1f\xef\xd99\x9a\x88\x13a\x0dm//@F*%\xf6\xeb\x8a\xd4\xcdU\x0e\xe5\xeb\x84@\xb9N\xf0\n>%Q(h\xa9\x19\xe3\xc2\x97\x05z\x02\xf9\xe5H!\\ \x8ew\x8d\xe4Xj\x9b\xdb\xe0Qe\x04\xba\xb1/\xca$\x9f\xad1\xd2\xb8\x18\xe9\xbc\x874d\xc1]\x81'\x10\xf3{\x13\xac\xc0\x17A\xa9\xc3*\x89\nI\xb5ga\x1e\xde\nI'\xe0\xcc\x1f0G\xd6-\xd6\x1f\xb5\xd8\xb3\x0fQ\x13W\x90\xb1\xaasd-\x9d\xb3\xd1\xa2\xee\x83 \xd9<\xfdn[R]\x15T\xe7f!\xd5$\xf0y\x96g\x0b\x0c\x8a\xab}\xb4\x86Z\xfe9\xf9\xd1\xe9\x01 \xa7\xa9b\x11I\xf3\"\xba\x82\x87\x7f0\xe1\x16\xb7\x08\xa4\x15\xddntP\x04I\xa6\x95\xab.\x8f\x04$.S\xacnW\x12\\b\xf0deC\xdb\xde\xb2N\xbf.h\x89\x1bU\xe22\xfc\xdcg\xe4k\x82+-\x1a\"\xc8\x7f\x8d1\x80\x17\xc7K~=\xcd\x99\x1b\xef2Z!w\xb3B\x86\x92q-\xfe\xc2\xd7[\xe1A\xb3\xd8\x83b\x80\x83\xc4\x83\xbbI\xa0\xbc\xc8\x93ne\xb9\xb3D&\x9d%6F\xbfF\xf1`\xdf\x18\x11\xbe\x8e5\x0c^\x87\x0e1\xea\x16\xac\xe65m0D?\x0ey\xaf\x86]\x9b\xf9\xfe-\x89Y\xc6!X\xc7\x07_3FP\xc7\xd9\xb9q\x88r\xcf\xad\x19\x90aC*\x1b\xce0P\xc5\x1a\xa8j\xe4\xd37\x8d\xbe\x9d\xf2\xc4\xe9x5Y\xe9\x05;\xe4\x1e=\x92\xd6CDc=\xd4\x06b\xe6%\xebxP5{x \x0bdC\x169{\xc1\x1f\xb8}\xb8A\xd4[\xf7z_\xbc\xd9\xeb\xb3\xb3\xe3C\x82\xf3\xbe\xae\x98\xd3TLf\x02\xf4A\xe9\xc1\x1a\xc6\x8c\xb5\x1e\x8b\xb70\xc4\x88\xcc\xf1\xa8\xd8\xe2\x9c\x85M)\x0f\xecA\xed\xcd\xaa\x0fa\x11=\x01\xb6Q\x18\xc7\xb0\xca\xd9\xb8\x96\x83\xe7Zo\xf9\xe6\xc8\xfa\xe6Z\xf0\x8ccA\xed\xd60\xd1M\x17\x90\xee\xd8\xdaix^\x1e!\xb7\x16\xee\x0c%\xe9\xea\x8b\x83\xbbj\xfe\x05\xd5M\xf8\xdc\xfd\n\\e\x9f\x8fB_\xaaj`;\xa3\xb6\xa4\xd3(@W\x8ek\xc9A=P\xbc\xd53'[\xcf\xbe\xfez\x12\xdar\x0bUi!\xc6\xec\xbd\xfb\x9a\x0b\xc76\xe3\xb1\xb0\x1c[\xdc\xa0\xdf\x9a\xf2\x82\xd5\xfb(8\xf6\xd2\x821\xee\xbe\x01,e\x9e\xa5\x00\x8cE\x17\x18\x97\xe6Y\x85D\x19\n\x863\x0e\xa9\xd7\x8d\x83\xb7\xe6\xf9\xd0#1b4\xf6\xe3\xb2\xc3H\x88_u\xf0\xf2}\x94Kt\xfb\xfb\xfb%\xc3\xdfG\x8f\xb8\xf1\xe4\xc4\xca\xefK\x1f\x9f\x82\xe3O\xfcp\x19P\xf8[\x16\xb1\xaab\xedEBJ\xf3,5\x1b\xe9!b\x86\xbe\xd3o\xb1ST\x01\xc3\xb0k\xb69z\xb4P\xd3}\xfb]\x13\xa29\x85v\xd7\xb4\x18\x8fU3\"|W\xb3|\xd0Z\x8a6t\xabC2!>\xaa\xb16e\x9b-\xf6\xa2\xae\xab\x9bvW4\xae\x8a\xfd\xe6}\x98\xeb53\xee/\xca\x90\xfex\x9a\xcd\xdc\xd2\x01\xf3\x01}G\xd4I\xb6h\x11%\x9c\xd1\xa60\x83\xc3`\x93l/m\xa2+\xf1^.\xcal\xc3\x18\x9e\xee\xe4?\x99\xd80t\xe1%\xfb\xaf\xc5]Y\xc4/\xb4}n\xb4\x1d\xb1\xf7\x9eC\xb4\xb1\xe1b\xef\xaf\xda\xc2\x8a )0\xc1f\x1c\x1f^\xbc\x80m\x17z@r\x91*\xdf\x81\x97\xf4\x96\xcc\xa9\xe7\xafH`wiR?*(\x0f\x1c\xbf\x82/f\xbe\x85\xc3RR\x81\xab0\xba \x81&\x1eY\xd3\xdc\xd8\xd3\xd6u}g\xd8)iVPR\xbe\xf5M\x94\xb4\xde\xf0w\xa2\xa4\xf3(\xbbhCI+\x83i\xc1K<\x84\xb4\xeaG\xa1%\xad\x8a\x1aG\xc95o\x0e\xbd\xc6!\xad\xa7\xaa\xdb\\\x87\xd1|\xf1\xdd\x86\xaa\x1a\x1aie\xee\xc4M\xe0n\x85\xf5[\xe7\xc4\x89\x19\xd9l\xd3b}0\x0f2y\n|\x92<\xc8\xe2Ic\xfc\xd8/\x9b:)*\xf5J8\x16\xd5\x10\xf2q\x16\xe6j\x80\xb9\x18G\xc5(N9\x93T5}8\xab\xde]\xd5\xd9U\x86&_j\x8a\x82ZWO\xea[\xd9IiV\xce\x99/\xba\x19z\xdd:^3b1\x88\x9c8\x1ew\xfb\xe4D\x1a\x85\xde\xad\xa7\xc5\xf7\xedM\xa5|\xab\xf8.\x15}\xf8cW\xad\xf4L\xf9\xae\xd4\xd9\xdaS\xea+\xe5\xcfx\xa8\x07\xcf\x8a\xe5x\xe2\xec*\xdd\x0b\xb5\x99\xc7u\xf4\xb7\xcd\xdbHHg\xf7\xf7\xdc\xbe\x8f\xa1y\x8b\x8d\xd5\xcc\xaeD\xe8K^fw\x85\xd5\xba\xd8`\x9e\x95\x0b\x11\xd6\x19\xd6Dp|A\xbfh\x8a\x16\xe1YI\xaf\xb8\xb5\xd3v\x10\xf6\x01\xa0\xafL\x8b>\x9b\xb4\x12\x8dGM1G\xafY\xfb\xc8\xda\xbc\xc1\x8a\xcdV\x10Y\xaef\x91\xd74\x8a\xf1Y\x90\x17p\x95\x89rrn\x8cjw\xd4\xfb\xf6\x04o\xf2C\x14\xf9\xfd\x8b\xb5U\xe2#S:X+\xda\x839\xab\xc0\xe7\xfe\x1f\xdcx\x80\xd1'u%\xc4\xfduI\xe7\x16|{=\x8e\xbe\x14/\xc08/\xc3\xe9gg$y\x191\xde\x0d\xc8\\\xdb\xe6t\xfbp((\x9fS\xae!\x0c\xcd\x0c\xcb\xd1\xe0\xf2`:\x11\xabC\xedtr2\xc2]\x82\x05\x99Y\x94\xe8\xcb\xba\xaeQ\xe1\xacH_ZQr\xf2\xf7\x87@\xa1\xdc\xd1:\xf7f\xc9\x8d\x0d\xba\x93.\xea\xa6,u\x95\x12q\xb3[\xd8\x81\x15gur\x19e\xc1\x1cmu.\xc95\x05\x12\xdeI\xcbk\xbc\x84\x95\xfe\xde\xad\xaf\xbb\xf3{\xc5Buv\x9a\xcf\n\x8d<\x85\x8dg\xa5i1\xean\xa7[\x14\xe8\x9d\xcd\xba\x93n1S\xab&y\xc9ugw|\xed\x85\x11\xd2\xe9\xdd:OZ\xf7\x1c\x96\xf0\x02\xee\xd8\x1f\xf4\x1f\xb7\xd2\x1c\xe7\xa2\xde\xcet9s\x072\xe0\xbb2u;\x9dPp\xe2b\x90'lW]\xd3\xe4:_\xf0\x1b\xe6/\\\x82o\xbb\x7f\x05\xb1/\xb1t\xe7\xb6`T\x0b\x86N\x19\x13\xbfw\x16\xc7\xdb\x91\xf0\xf0;\x9a\x863\xa9cc\xf4\xf4\x0f\xa1q\xe0\xf44W\x82\x15hZ\xd2<\xfc\xc9\xdcy\x99\x1e\x0c\x15\xd1H\xec\xf7\xc2=\xdfN(\xdaV\xe4\xf1\x1c\xdaW\xdet\xcb\x11]D\x84\x07u\xdc\x0c D\xb3W\x13T\xd0\xadH\\\x8b\xdb\xf2[\xc1\xd3\x8bi\xa2\x9d\xc6Z1N+\x03\xa6N\xa4\x1f=\x82%w\xf0,\xaf\xbd_^{\xc8Cq\x84Q\xb8qp\xf2\xea\xed[%\x9eL\x02$\xa6\xe0\x87)\x8d\xd71E\xc7\x87\x04\xc5\xad<\xe8\x9c\\\xda\xa4\x166\xa0\x85<;\x81\xed\xddf \xbb\x82\x15h\x80\xb0RA\xf1\xa4\xdeP\xa9d]\x1f\x1a\xc5\xa8\x0b\x15\xe8Yxp\x94\xd6\xc3z\x18\xff\xd5\xd1Fa,bAQqv\xa0\xcc\xc3\xce\xc8\xa1\xe4\x17\xf2\xb8v2d\x0c-\x03\xa0\x98\x02\x82@\xc4\x92\xb1Wrhn^\xd0\x87\xdd\x9d\xcd=\x11+U}i(k\xb2r\x8e\x15#\xb7J\xfb\xaeE\xde\xe9\x90\xde4\xdf\xaca\xe6 \\B\xc0DL\xf8[F\xcfds/~\x08\x96G\xd4Id\\\xf6T~\xbd\xbfg27>,\x02Y\xb2\xe7\xc5\xafr\x13\x9c\x13\xc1*\xe2\xeb\xfd=W\xeb\xb3\xa7\x18\xa0\x8a=\x93\x91\xaa\xf2'9\xbb\x86o\xca\x1f\xe5\xb6KB\x8cL\xc2\xcd\x07\x8a\x81\xc0\xfd\x80\xce\xdf\x8a:2\x97 \xe7\xdf\x0d\x95O\xf9\xd3|\xe8\xb8v\x052\x88rE\x171\xccG\x8b\xea\x08\xf5\xa7\xd4H\xa8e\xaa!\x10O\xf7,\xf7'\xf2\x17eB\xcb\x97S\xc3\x04\x86b-\x11\x93\x86\xdd\xaev\xe5\x97s\x93t\xf2\xdc$EZ\x12_3#%$V\x11\x82-\x86\x17\x10\xb1?<\x04[\xea\xf8\xd3xf\xa7-?i7\x9c\xdc\x99\x7f\xd5\xad\x1f\x1b\xb1p\xe8\x96\xd9P4\xfb\x95\xd5\x1a\x89%\x95\xb5$X\xa7C\x8dOA\x91\xc9!r\x8a\x8b\xc3\xfc\x86>\xa7\xa0~\xa8P\xd7>\\d),\xa2\x8c\x9drQL\x1f\x94\xc9\xa1He\xf0K\xbf\x9e\xfa\xe0\xa7\xbe1kA\xd3-D\x8b5E\x94\x89\x07\xf46\xa5\xe1\xdc\xa9\x83\x8fo\xea1\x90\xf2|Xg\x95\xe5\x90\xc8\xf7\x85\x8d\xfdI\xf9\xa9M\xe3`\xa5\xccb6?}\xe9l\xea\xf1\x81\xbf>c\x81.\x98h\xe4\x94B/V\xa7\x81tL\x1c$\xf2l\xb9\xc8\x16\x0bN\xba\xeb$3,\x93\xccX\xfc\xf4\xa2 [\x85\xa5@\xa7\x05\xde))\xd8\x07K\x9a\x9e\x84\xfezM\xd3&\x00\xd7\xcc\xd5\xeb{\xb1\xa3\x0c\xd7U\x95\x06:\xd9\x1bD\x00\xf8m\x85c\xd8\xdb\x11\x11p\xc4\xadKi\xb6\xc2:\x80\x1d\xe7\x1b|?w\xcf\x86g\xf1Y\xf8\x7f\xfe\xb7\x9aU\xa0;\xf0\xc39\xbd=^8\xcah\x90\x8a\x1f\xa4N\xc4\xef/\x0c!\xab\"\xd8@2^\x06\xf2\x06\xf6\x9b\xc2\x13\xd8\xe4\x9c\x87^X\xc3q\xc3`0\x00\x1c|o\x1fv\xf4RJ\x1bw3\x04\x91/ A\xea\x90 \xf0B\xc5\x0d\x85\xbd\xfab\xd0\x10#X\x1c\"\xc8\xf8F\x052-\xa0\xe2\xabP!\x0c\xbe_\x01\x15\x81Q\x99\x84\x87\x98\x00\xe7\xea\"\xee\x8aX\x98R\x02\xaa\xa1\x84\xe4\x95\xa1\x01x\x8f\x07\xcc\xefUkAO\xb3\xe6=\xe5\xbc\xe8A\xf7\xf7\xaeJ\xa0\xd4=\x94F\x9c\xfb\xb5\xe6\xe6UB\xf6u\xbb\xda3\xbe\xd8\xfa\x8caE\x0e\xe2\xb1\x1fr\xe1\xb1x\x86\xd1\x92\x1f\xe3U9\xe3XH\xca%\x186)\xa7\xa0\x04(\xd7\xf5\xd8\xdc\x04%(\x9e\x8b\x02~\x05\x82;\x10\x85r|VP\x03G\xa8\xa8x/c\x0e5\xd4]j\xc9tNi\xbe\x92h\x8ev\x953Em\x9d\x9d\xc6\xb1\xa3 \x87\x93\xa4q\xb7_\x81\xf5\x95\x1f\xce\xc7\xc5}n\xe9Y\xae\x90\x1d7\x98w\xd4t\x9e\x98D\xa2\x94\x8b\x00\xca\x07\xbb\xfb/\x82\x00\xfd\x9b\x11\x02\xb9c\xde\xb7\x85A\x95\xb9\xfe\x97\xc3`E\xd6&\x18\xe4\x8e\xb6\xdf\x16\x04\x15\xd7\xd0\x7f=\x08\xd8\x08\x1f\xb4\x13\xc4\xedA\x13\x00|\x19\xbe\x07Ek\xabm\xf0u\x9e\x8cR\xc8\x01&h\xca\x98\x9d\x8f\x1eA\xf7\x7f\xc4\xcd\x1d\xf2\x02E\xb9\xd3\xc5 \x15\xcf\xbaG\xd5\xdf\x9f\xde\xbd\x13\xbf+\xbcv\xf3R7\xac\xb4\xad\xb9uL1\x10Y#\xe0T\xcc\xc1Q\xdaZ\x8d\xe9:\xa6 \x0d\xd3\xb1\xa6%\x8f\x84Q\xe8{$h\x98\x01\x14\xbdv\xffG\x93J\xb3~5\x12D74\xf6HB\x1f\xd02\xaeK\x9b\xc6\xb3\xf5\xfa\xc1\x8d\xe3\xa2\xb6i\xdc#+\x1a<\xb4q\xfd\xc8m\xeb2\xa7\x0b\x92\x05\xe9Iz\x17\xd01tsxu\xff\xe5\xfb\xfd\"\x8a\xfe\xa9\xfb]c?\xd5z\xbf\x97\xf6u\x1agT\xdd\xc7\xa7\xd5\xdf\x1f?\x1d\xca}\xcd\nv\xd4\x97\x17$HJ\xb5\xdf\xd4\n\x0e\xde\x9d\x1c~)]\xb0m\xe4\x87\x0c\xfc[\x12\x90\xeeT\xa4\x13\xf81\x8a\x02J\xc2\x19\xef\xa3\x96\x9cN\xb2\xa12\x03\xed\x17\x93\x1b\x1dQ0&\xc8\x95\xf6\xa00\x91\x00\x1a\x83X\xa56\xdbXG#Z\xf5\xc5\x81=\x96\xeb\xdd\xa6/\x1d\xc9h\xd7\x97\x9c\xd7\x1b\xc3\xbc\xfe\x1d(\x88)C\xe2\xee\x03\x93\x9c\xd6\xb2\xa7\xed\x14\x03\xd54D\xda7\xb4\xa74$\xbfUI]\xa4#u~\x98\xfe;P:\xae\xb4Q5\xd8Z\xcc\x89\xccn\xf5\xba\xa8\xde \x95'q\xa3ylw\x83\x1bB\xf1[\xd4i4C\x19\xad\xdb\x13y\xdesY\x8eN{\xbdh\xe6\xf6\xa1;\x14\x99\xfe\x8d\xe29j=z\x82!\x8b\x1b=\xbfp\x14\x17\xbcQ\xb5+S\xfb\x90\xbby\xf4z\xa4\x9fb\xe6\xb7\x959\x8ev\xddA\x1a}b\x02\xe9+\x92PG@\xa2\xb1\x9a\x0526\x1c\xab\xc8\x85b*\x15I&aO\x0f\x02\x9f$4\xb1\xe1\xe2t\xb3\x0f\xdd\x0b?\xecjR \xe4\x98>\xedC7\xf2R]\x95\x1c\x8e\xd3\xd1\x10\x13Uy\xbaZ%\x88OG\xbb}\xe8^\xd2\xdb\xee\xf7\xbd\x0b0\x8b\xb5\xe5b_\x08\x90\x1f\xe9\xf2\xf0v\xedt\x7fw&\xe3\xe9Fo6q&\xe3\xe1\xfdt\xb4\xf1l\xc6\x8e\xd8\xf3\xd9\x0f\xae3\x19\x9f\x9d\x0d\xe4/VaJ\x0fgXY\xa4\xc4\x9d\xdc\xe7\x15z\xda\xc7\xc5/\xd1\x8c3\x19\x97\x0f\xf2\xa2\x07^\xf9\xecl\xe0L\xc6~\xb8\xb8\x7f\xcb\xfe\x1d\xbdq\xefyQH\xc2\xfb#rt\x7ftp\xe4\xba\x7fV-\xef1.?&\xedU:\xa7O\xcczB\xad\xf0\xbc\x08\"\xf2]\xc4gU\xbf\xcdoF\x18\xa5u:\xbe\xe0`\\\x95\xf9\xa1S\xd5zo\xf6\xcdy\x1am@\x189B\xd8\x07\xc9G\x08\x03\xe4\x1a;2H\xa3w\xd1\x8d\xdc\xd2\x8c\x97\x80 ;\xc8\xc7 b\x00Og}\xe8\xf66\x94+tdX^\x8a\x13\x86\xdf\xa1\x16\xccH\x1fX\xcdE\xc1{\x08\x0b$\x98\x88\xc3l\xf0\xe1\xf8\xe4\xed\xe9\xdb_\x0f\xcf\xdf\x1e\xbdy{\xf4\xf6\xf4\xaf0\x96\x8f\x8e\x0e\x7f:\xa8>\xea\x0eB\x12\x16\xcd\x1d\x91#\x18CZf1\x04is\xd2/\xe33\xa22\x9f\xf1\x86!\x8e\x95\xd3\x10\xb6w1\xe74\xa2\x07t\x95JN#f\xaf\x9b9\x8d\x10~`|\xf3\x18\xbf(\xa3J\xff\x9dx\x0d\x873\x1b\x9d}\xee\x8d\xa1\xe15\xda2\x1b%Bi\xc2\xf8P\xaf\x1c\xf2\x93#r\xc4\xfa\x82\xe4\xc6O\xbdKp\x8c\xca\x03\x8f$T\xd5D\x8e\xb5\xb5@\x01\x0e\"\x9f^<\xe2\x8d\xe5z\xdc6\x8d\x1d\x1d\x1cY\x1b\xcb\x15\xb5\xad\x1a#G\x1a\x8dl\xe1\xf8l\xdcnB\xeb\xf7=\xa0\xc5v\xfe7\x83\xd6\xdb\xa37\xdf\x0eZo\xc3E\x1bh\xd5)\xd0\xf7\x83\xd6\xc67\x05\xd7\xc67\x85\xd7F#\xc0t\xbb\xbdx}8\x18j\xc6\xa2\x9cKe\xbe\xb7\x0f$\xcf\xe95\x810?\xa6\xba\xb4\xcb\x0e\x14\x1e\x083\xb4\x11\x93\x7f\xd6mC\x8d\xff\x8aj\xfcW\xce\x1e)\xff\xb9\x1b\x8e\xe9\xc7\x9f\xbb\x8d\x1c]c\x8b\x93\xca/\xc6\xbb\x9d\xa6\xb3\xfb)\x9c\x9d\xa5\xb3\x9e[z8V{/\xfd\xe0\x0c\"/\xf9\xc1\xe5\x1c\"\xb6\xf0\x83\xf3\xdf\xf7\x0ec\xc6\xdcj7\xa5\xf7\xdd\x89\xebNJ\xac\\\xab\x1b\xdd\xd4_\xd1$%+\xa3)\xcb7\xe7\xd6\x8a\xb0\xe5\xd1\x80\xdeRO0my\xa9/K\xbf\x03\xbf\xa6\x89\x87b\xb85Y\x0b\xf7L\xfd\xb9\x97\xdf\xe0 \x0b\x96\xcf\xc3\xcd\xb9\xb2b\x12j\x9erW1\xf3>\x8c\xe3(v\xba\xafIJs\x9fZ\xca\xcat\xc1\x99|\x91W\xb4\x97NG3\xce\xfc\xf4\xd2\xe9\xe6\x8c{-\x11\xfesk\xd6\x87N:\xdd\x9e\x15f\xb0\xf4\x06X\x07\x0e\xfbo\xf0\xe9\xf4\x95#\xc0\xa0\xf3\xc3\xf3E\x98\x8a\x1ek\x82G\xa9\xe8\xa5\xd3\x9d\x19\x8fO\xd1K\xa7\xbb\xb3>\xa4\xd3\xbd\x99\x89\n\xa3\xca\x15\x03\xdfN\xf7f\x82+\x1d\xf6a\xcb}\x0e\x8b\xc2\xa7r\xeb\xb9\x0b\x0b4\xf0\xd3Q)l\x87u\xb7\xa8\xd3?\x13z\xa5\xd3g3\x04<[\xb3]\xba\x0d?\x80\xb3;\x84\x1f\x10Z\xc3\x19\xf4\xa0\xe7\xa4\xd3\xd1h\xc6\xd0l(\x95\x80\xb8 \xea\x9b\x1bkW\xc4g0\x82M\xc1\x9e\x85\x8bQ\xd5\x1f=\x02o\x90\xd0\xf4\xd4_Q\xc7\x1b,\xc57\x1760\x88\xa6gCa?LR\x12z\xf4x1\xc6\xeeZph\x96M\xc6\x88\xfa\xdb\x93cA\xd7\x8d\x8e\x00\xdf\x8a\x10?\x90\xcc\xf0\x04\xfc\xdf\x8f\xc4t_\xbcP\xac\"L\xe6O\xdf\x0e\x0c\xc5\xcf4\xbe\xab\x0c\x8b\xc3hg\xdb\x1d\xfc\x88\xb6\xc2E\xaf\xe0\x11dd\xd8L>\x97\x1a\xb4(\x18\xba\x07?\xbez}\xf8\xe6\xa7\x9f\xdf\xfe\xe5\x97w\xef\x8f\x8e?\xfc\xd7\xc7\x93\xd3O\xbf\xfe\xf6\xbf\xfe\xfa\xdf\xe4\xc2\x9b\xd3\xc5\xf2\xd2\xff\xe3*X\x85\xd1\xfaoq\x92f\xd77\xb7w\x7f\x1f\x8e6\xb7\xb6wv\xf7\x9e>\xeb=\xd9?\x0b\xcf\xe2\xee\x03%x\xae\xe4\xf9\x1e+\xf6\xc57\xe0\x06J\x1d5^\x8e3\xfa\xe8\x1b\xae\x88B\x1e\x030\xe4\xbeC\xa1\xed\x9e\xa8\xe3 i'\xb9\xfcK\xa5\x19;\x8f\x06\x08\xbb\xdb\x8d7G)\xbc\x80a\xab\xdb\x1f\xd4\x8b\xefj\x1f\x1b)a\x0c\xff\x01OQ\x01]\xc6\xfb\xaf>:\xa3\xb2\x02cz\x16\x9f\x85\xfb3\xa1\xc60\x03=\xb2.K\x86\x91\x80\xb4\x8f\x12\xf3r\x07\x86;\xa1\xdc\xd3{\xf8\x1c\x18\x94\xc9sH{=\x17R\xf8\x0f4\x05\xe3*\x13~\xa5\x13\x88L\x11\xf0\xf2%\x8cv\xe1\x11l\xee\xec\xb8}P\x8b\x9fVK7wv\xe0\x11$\x8c\xec'\x98\x0e\xe4\xc5\x0b\xd8\x85{\xc8rt\x88$:\xa4\xba\xe3U,\xd1\x10dH\\\x82\x03\xfb\x01v\xf1\x9a\xe6\xab\x86\x04c\x18=\xcdu=\xe5\xb6\x86\xda\xb66E)\xbe*|\x0f\x19h\xd4:\xdb\xf9\x9b1\xa6\xdfX\xc4\xd1*\xff\xe2\x04(\x16 \xbd\xc7\xaf\xdf\xd4~\x15C|0)\x87S\xd0\xf67'm\x11:\xe6n.F\x82b@>\xd2Hk2\x0b\xad1`\xe7V\x05;q\xe7g\xd3\x08\x97\x8f-\xfa\xee\x16\xf2|J\xe9\xa6\xaet\xb7R\xb8\xbb\x05\x8f\x00Mr\xd8\x8c\x9c\x88a\xecS\x17z@\xa7\xa9\xf9R\xb5\x8c\xa0[\xfc\x0e\xf1\x1b\x8f\x08\xc6\xb0Y\xa0k\xa9\x9d\xa1\xae\x9d\xedZ\xe1\x8b\x17P\xedqw\x1b\x1b\x1e\x15\xc8\\j\xb9>\xc0\x17/j\x0d\xefn\x97\xdb\xebC\\F\xbc\xfc\xd7Ws\x10f\x89\xb6\xa6\xff+\x87\x9c\xacs\x08F\x85\xe1\x03\x99\xb4\xc8\xe2\xd1`\xf0\xea\xf8\xca3\xdfd\xcf_\x91\xd7\xb8*\xdcx\x1cP\xdb~\xe3\x97\xd2A\xee%\xccv_\xf8\x9c+\x83\xcd\x1ed\"uh0MgE>\xb0\\]\xcb\x01>\xeb\ny\x15\xd5\xb2q\xb3Q\x87\x88\x89\xe3\x87\x10\xdb\xadx\"\xd1$Jj\x16\x8eB\xd6\xcf\x1a\xbb\x96\x9f/\xb2\xd6A\xe6\xa7\xb9\x0fVM\x98!$\xf9\xa1H\x9a\xc1\"\"[\xb4\xca\xdf\x91#Ny[~!\x83S\xd7O\xfc\xb3\\\x8dZ\xec\xfa/\xdc\xc4k\xe2\xc7\xc9\xbf\xd7.\x16\xbe\xbb\x96\x9dJ\xc4\x8c\x0e\xe2\x98\xdc9\x99t\x81\xcco{\xd8\x16\xce\xbel\x0bg\xb8\x85\xf5[7j\xbdu}\xf4\xe7G\xc3!\x85\xe2^\xd1\xbb\x84\xbd]u\xf17\xb5B\xa6\xe9\x8c\xd12\x7f:d\xe7\x0c\xfe\x9d\xcd\xfe\xe9hoXG\x1dW}]\x0d{&R\xd1\x18\xd6\xd1/\xad#\xd1\xae#1\xad#[-\x82\xab\x15\xd5@\xdc\x07_\xc0.\x12\xb0\x8b\x10vF6\xc6\xff7\xd8\xc1\xe5s\xfb\x81\xfb8\xa1\xc6\x0bt\xbdw\xe1\xf7\xdb\xc4\xd6#\xd6\x0f\xc1\x10\x08L9\xc9\xc2\xbe\xb0D\xccIm8Mg\xd6\xfd\xf2mQ\xdeD\xe9\xff\xed<*\xffH\x9ed\xe1\x9c.\xfc\x90\xce\xbfR\xfbb\x81\xc3\xc3\xa1\xea\xd6\xf2\xcd?T\xa6\xbb\x8e\xfc\xb9\x8c/f\xeb]'\xcd\xd94\x7f\xffn\xae\xd1\x7f$Ob\xba\xa4\xb7\xdf\xe5F\xe5\x01\xca3\x1f\x03\xd5`\xbd6\xe7S\xeeW\xa7\xe7\xb3\x19\x11xr\xf6\xc4\x99.\xfd\xd5\xec\x07\xf7\xcfO\xe4\x05\x87\xbez\xac 9\x00\xd2z\xfa\x89\xd4\xbe\x0f\x8dw \xfc\xc2C\x9a\xf2\x86\xd3\x11\xcab\xf2\x16\xe1%\x93K[\x9c\xd8\xac'4\xeb\x9d\xa6\x85!P\\\xb2 *\x9a\xa9\xb5\xf2\xbd\x8f\xe1\x7f\x0e\xc4\xe56Q\x80\xceo\xe1\xaa\xd0-\x19\x13\xf5\xc1\x001\xbc\xd0*.H\xd3~U\x96\xf9J*\x913j\xbc\x83\xb6&1\x0f%(\xd6\x05a\xb0\xea\x01\x1d$Q\x16{\x14z\xac\xc0\x08X:X\x06\xd1\x05 \xc4\xd5_o\x1f\xbaK\x1e\xb9\xaf\xc8D_\x11\xf5\x9fV\xca3\x9b\xd2\xaf\\5i\xd6.\x94_\x08`\x1f\x9eU\xc8 \xec\xc3\xa8r\xad\xb5\x80}\xd8\xda\xac`\x03+\xdb*\x97\xcdY\xd9v\xb9\xec\x92\x95\xed\x94\xcb\xaeY\xd9^\xb9l\xc5\xca\x9e\x96\xcb\x96\xac\xac2\xbe;\xd8\x87\xed\xcaX.XY\xa5\xdfsVV\xe9\xf7\x06\xf6a\xa7\xd2\xc7!\xec\xc3n\xa5\xbd[VV\x99\xdb +\xab\xf4\xf1\x8a\x81\xaf\xe2\x93x\xc5\xca*\xef\x1e\xb0\xb2\xddr\xd91\xe6/\xacT\xfc\x80\x85\x95^N\xb1\xb02\x95\xf7\xb0\xafA\xfa\xe1\x18\xbaggC\xcdQ\xb4\x87O\x88\xe6\xc9S|r\xa1y\xf2\x0c\x9f\xa4\x9a'#\xdeQ\xa8{4\xc2G\xd7\xbaG\x9b\xf8h\xa1{\xb4\x85\x8f\xaa\x0c\x1d\xfbl\xf2\xa1Wu\xd1\xec\xb3\xb5=\x86\xc7gg\xdd\xc7\x9a\xb1\xf3\xbe\xce\xce\xb4\x9d\xf1\xde\x8et\xcfv\xf9\xd4\xceu\x90\xda\xdc\xe2\xad\xbe\xd3?\xe4\xad~\xa8(\x1a\xcaU\xdf\xb2\xf3\xba{\xd7\xedC\xf7\xaf\xec\xbf;\x9a\xe0w\xf1\xe7\xf0\x84\xfdA\xb6\xb7{\xcc\xff?b\xff\xe3W\xfe-\xc2\xaf\xfc\xffc\xac\xbdX`E\xf1\xe7\xcd\x9b\xeeL\x17U\xe3\x8f:\x9d,\xb4\xb6\x95\xabhn\x82\xb2ou-\xeb\xf3\xc8\x19\x9b;;.\xe7\x85n\xbb<\x80\xeff\xb9\xad\xdc\x1a\x19\xab\xef\xee\xecl\xc9\x172\xf1\xc2\xb6\xe6\x05=\xd7\xde\xe1\x8dlo>\xdb~\xb6\xbb\xb7\xf9l\xc7u\xcb\x11q\xbdhNa\x1d\xf9\xa5\x8c\xb9<\x00\xe2\x8a\xdc\xc9L\x0c\xcb\x98\x92\x94\xc6<\x19\xc3\xf0\xf6\x8d\xf8\xe8X\x07\x1c\xe8'1\xd0\xa7\xe5\x95-\xfd\x92\x87\xde\xd9YW\x84u,\xe28\x0e\xf1\xfd\x8d\\Vv\xa1\xa7\x08p\xba\xc8%G\xf5\xc5R\xa2X\xf3x\xe1y\x98n_\x06\xc9\x961\xa7\xdf\x93\xf4r\xb0\"\xb7\x0e\xa6\x0c\x17\xc5\xf7\xf7\xb0\xe9\xcah\xdfW\xfe\xfamxM\x02\x7f\xce\xdbR~\xab\xa1\xb9\x17At\xf3\x8e^\xd3\x00\x99X?9\x8a\x18L\x97\x0e-\x9e\xb8\xd2\x17I)\x93\xbd\xa4w\x81\x08\xc1]:YMLu=%p\x93Ym\xe1\xdb\xff\x8f\xcf\x06\xcds(\x12\xa2pk\x0d\x9e\x845\xae\xdc\x1b\xa4\xf9\xd5\x0c\x8f\x04\xe0?\xe7ARG\x90\x89\x86X?\xac=\x91\xe4!\x18\xa8>\x97}\xc8xg\x19^\\\xab\x8f\xa6\x19\x1b_8%3\xd8\xaf\x06\xc3\x05E\xcd]\xc6gGA1\x868\xd8b\"\x0d%s\xdc\x89\xe2\xf4\x17z\xc7\xb3\xcf\xe4?\xca\x01\xddC\xfa\x9b?\x97\x01\xd5\xf3_\xf7\xf7\xf0T\x86C\x0f\xa3\x8ft\xc1\xdb\x10_\xd5\x16\xc2\xe8U\xb4Z\x93\xf4=\xdb\xce\xbc\x8eR\xa0\xd6\xf4\"\x86\xdd\xe8zu#@\xa9\x14\xa85\xbf \x84\xbcLOd{\xe5\xf0\xb6\x1cu\x1e\xd3`\x85E\xe4\xfaR\xb6F,\x99g\xec\x0d\x92Ra\xaf\xc0K\xb3\x84\xce_\xabOJ\xb1\xfet4\xe2\xa3v3!\xd2\x8b\xdd\x14\xc1~%\x9al\xea\x8at\xc6\xfc~nc\xc4\xf1\x9a\x8d-Q\x83\xa5\x81\x0f/ y\xeeb\xda\x064`\x97\xd9\xfa\x85K\x1f;\xfb\xc1w\xd1\xec\x87\xfb\x8a\x88\xac\x16\xa2\x83\x04\xb3\xbd\x95\x9e\xb0.ydW\x1f\xad\x86\xf8\xf7P\xd5C\x9c Q0\x14x\xdd\xdb\x87\xc8eC\xec\xedW]\xcb\x04\ngV\x10\xbd\xb6\x85\xe3\xd6\x87\xdb\x95\xe4\xf2\x07H]k\xdb\xef\xea$Z\xca\x1c\x08\xb1\x05\xc3>\xfe\xd5\xbe\x8e\x9f\x8c\x0dmm\x96\xa3T\x8d6wQ~\xdf\x1dU\xc3`m>\xdba\xbf\x18\x87RxP0\x96D\xfc\xba\xbf\x87\x9d\xbd\xad\xed\xed\xf2{\xec0\xdeb\xbfx~\x8a\xbc*+\xdf\xadt=\x1am\x8fF#\xebD\xfef\x9c\x08N\xb1\xd2\x0f\xb6\xcc\xbe^\x14__\x15_\xaf\x8a\xaf\xc7\xc5\xd7\xd3\xe2\xebM\xf1\xf5\xd2:\xac7\xc6a=\xf9\xfd,\xfc\x01dT\x13u\xb9\xe57\xb6\x91\xfe^\x0f<\xf2#cs\xcaE\xbf2Y\xa5\\\xf43\xe3m\xcaE\xbf\x01\x06\x99\xae\x0f\xf2/\xf6\xd0\xebl\x1c\xbej\xe7\xd4\xd1\x84B \x0c\xe5\x0b\xdc\xe9<\xeeG\xfd\xe9{N\x07j\xe5\x8cS\xfd$\x12\x92\x96r\x96TV\x12\x83\xf3t\xde9\xfc0\xca\xb0\xec\xbc\xf8z[|\xbd)\xbe^\x14__\x15_\xaf\x8a\xaf\xc7\xc5\xd7\xd3\xe2\xebe\xf1uU|\xbd+\xbe\xae\x8b\xaf\x1f\x8a\xaf\x87\xc5\xd7e\xf1u^|\xbd.\xbe\x9e\x14_\x0f\xc4\xcc\xcc\x89^49\x1f\xd2\xbaJ(7y\x18r\xba\xaaP\xd9^\xcfv\xb3\xd5\xf9$\xc8\xae\xd2\xbf\xafD\x05\xfaM\xaf\x04f+\xf7\x96\x8d\xfdoZc)\x13\x83\xfd\xc5\xc3\xd4\x0e\x12 \x9f\xe7rd\x1d\xf6a\x01hQ\xcdX\x15\xe4Ya\x03\xde\xe3\xe9\xf2\x92[\xf1vA$\xd2\x9c\xbeg'\xc3\xac\x8f\x88\xe9\x1b\xf4\xdc\xb9P\xc1@\xf4\xb5\x00\xd1n$\x1c%\x0e\xbaq\xa8\x7f2\xb7&\xc6\x85\xdcM\x00\x13\x08\xe1%<\x83\"\xed\xd2o0\xc6\xf2\x9fa\x0c\xbf\xc2\x98\x8f\xb2\x13\xf1\x87\x7f\x871\xfch%m\x7fU\xa8Fu\x85\xe8`\x9e\xadJ\xbc\xb7\xe9.\x84\xdf\xfe\xa6\xd5\xdb\xdf\xee\xe3\xc7\x86\x9b\xd9N\x85!\xe3\xa1\xfd\x19H\xde\x16!\x08\x14W\xd3\xc7\x18\xa0\x1dz\xec\x9b\xfeF\xd9\xcf\xb9\x0b;\xe9\x94\xfc\x17'\xed\xf3$\xc6\xbeH\xdeL\x14\x85\xa3\xd1eY\x80\xb0Q~\x92\x1f)G\xe97\x02\x94\xdcYd\xc0H}\xa6\xd9\x90\x87D\xe3\xd9\x82\xccv\xa8 p\xa2\x9ah6\x9c\xe5\x19H\x15T0\xc5n\x04\xeb\xbd\x0d@\x9e$\xa9\xbe{\x8d\x96\xaf\xe8Q\xfd\xf7F?jM\x06{\x90o\xff\xd8\xf8\xb6\xc0\xed\xc2\xe7\xe51z\xbb<~\xdcuM\xf8\x0e\xb2\xf5_\x9b[\xbfg\xad\xff\xc2\xf3\x04r\xbca\xcd\xfe\xe4|dE\xbe)M\"\xb6\xfess\xeb/\x8d\xad\xb7\xc67(\xcb\xee\xb0\x0fO\x9c\xb3\xb0\xe7:\xd3\xdf\xcf\xc2\xd9\x0f\xee\x93\xa5~W\xa9\x1f\x94\xc9\xb3\x9a|\xe1r\xd9DP\x96\x0c&\x90\xa1\x9aA\xb8U@4\x08H\x92\xbeeo\xf0\xfc\xe0\x7f\xce#\xd3\x0d\xfb\x98\x7f;u\x0d{Z\xfd\xa0\xa8~\x16\xcaP0Ct\xffd$^\xfe6c,\x88\xc9k$l\xf5#b\x0c\xc6\xaa\x0b\xb01\xc1\xa7\xfaam'\xc0\xc3\xbc5O\x04\xc4\xc9\x15O7\x1b\xc6\x0cyJ\x18>\xcb\x00o\x80|\xb6\xd3\x13\xe81Y\x0f\x13\xdc38\x88\n0a_\xc7<\x9f\x1d\xf4\xe0\xcfN\xc0\x85I\xbc\xb5\xb0vf\x8ey \x05*\xfa\xc6J\x9f\x19z\x12\xb7 \xdb\x7fk\xc4\xf6\xc7\x98\xac\xa4\xf9~O~rA\xba\xe0\xca\x85\xa4l\xe4\x91\x84\xce\xb4\xc2\x08\xbd\xe4\x02\xda.\xa0\xe7\x0e\x13\xd7v\xb7F\xc8\x04\xd4\x83\x95\xfa(\x15\xf3wv\xb76\x87PD.\xdd\xda\xdeb\xc26*\xa6\xfepF\xc3Mt`Na\x83\xb7\xce\x93\xc9l\x88\xd7z\\\x86c`c\xbc\xdb\x98\xeb\xbc\xde\x0b\xab\xd9\xde>t\x90\x93\xf9\xe4`Zh:\xf5g0\xe6\xa7\xdc\x1fz\xb74\xf5#\xafSmk\xe6\xf2\x8c\xa2\xfa\x86D \x08\xf3\x92\x95t\xba\xfej\x1d%\x89\x7f\x11\x08\xc7\xf71\xf8BU\xc9\x8d@x \xb2n\x13c\xf7\xd9\xb1\xcb\xf3\xbf\x983K\xc1\xbe\xe4\xd7\xa4\x02\x10\xe3\xafin\x01\xe221)\xc5\x95\xd2\xea/B\xb6\xdfx\x8em\xfd{\x9b\x9c\x1e\xe5\xcf\xd8(\xba\xbd..\x97\xdc\x94\x1b\xfc\xb09\x0b\xbb\xd6\x19\xfed\x14\x84MCf\xb8Q\x90\xd4\x8d\x11\xa6\xf7\xb4\xf6\xf1g-\x14\xd1\x1aAq\xbcV\xc9k\xce\x1bTl\x87UE\x96\xe2CY+:\xae2\x90\x85*\x9d\xc0\x0b\x08\xd8\x1f=\x07\x89\xa2\xa3\xe31)oJf\xee\xa0\x88s\xc0P\xc4\x1b\xe4\xf6\x06\\\xcb\xdd\xf1*5\xba\xdc\xbc\x80aR\x9e9\x90\xd3XY/Z\x80\xfaR\xdeN\xder\xa5#F\xfal\x82.\x95\xea]\x98\x80\x87\xdf\xc7\xd0\x9dt\xfb\xe0\x0dr\xbb\x04\xdb\xb1\xc2\xdaXp\x95\xa8\xb8\x1a\x99b33>\x0e5>N\xdfh>\x91\xf1\xbb\x00\xb5K\xee\x13\xa1\x94\xb03sa\xa1\xe2\x06\x0d\x80\xfaA9/\xa9\xf5\x85\x11-\xca\xf4\x99'\xe8\xf7D\x82\xfe\xc7/1k\xbf\xe0\xfdc \x9eG\xd7i\x82Wo\xfc\x04\xe6i\xc2\x10\x02\x8f\x9bN\x9a\xf2\xb4\xa6\x8b\x19\x9f\x99\xf9\xe41OY\x8a\xc3\xb1\xb6\x8a5\xfe\xb4\xc6&K+\xe6w\xec\xfa\xd1\xffU\xd2\xf1\xf1M_\x95\xd9\xd5\xfb\x83|\xc8a\x9fo\xe5\xb0\x0f\x9d\x11F\xc1\xc9\x7f\x0e5\xd9\x82\x13\xc8\xb1\x847Q\xcd\xdb\x9a\x13?U\xa4}\xc1#\xc4\x95\xa5\xdcjVS\xd6|\xd0\x87E\x1f\xed?\xea\xdeR\x0cAQ\xd9\x91?B\x17\x1f\xf9\xa4\xae.C\x85\x9d\xa3h(\xc5\x8dXqI\x92\xcb\x04\xa1\x8b7f\x85o\x06\x02\xeb\xd1#\xb6\x05\x95\x02T\xdb\xdc\xdf\x83P\x84K\xa5\x02\x12\x86\x97 R.\xfb\xa8*u\x85Z\x8aVn_\xa6\xc1\xcc-\xa0\xdf\xfd!\xa6\x8bs\x86\xe3\x15\xf1\xderQ\x8d\xd3\xc2\xb6;\x9a\xc6q\x08\xba\xf2}\x9eR\xdc\x00W\x97\xaf\x1c\xcf*\xab\xde_\x8aU\x96\xc7\xcd\x04\x9cN\xcd\x96I\xa3!\x92\x9f\xb2r\xb9\xaf.\xb0\xc5\xa2\x95\xdf\x1c\xa7\xc4\"\xe0]V\xeeYM\xb9\xf1\x91\xd6H\x1f\x04y\xa5\xe8\xc2%~w\x9aT\x80J\x0e\xd9\xe2$\xd0\xb4\xa3\x145\xb4\xa8\xbe\\\"u\xf9u\xe7*K\xd0\x92\x80\xc0\x05O|\xc3\x13\x98\xdb\x8c\x10\xa1\xa4b\xe5,\xc4e\xe9\xbe\x8d<\xe72\xd8\xc8E\x95=\x135\xc4\x823\xc8\xf8\x0c\xa9\x1d\x0c\x89$\xae\xb5D\x88\x89p\xca\x18\x9c\xcb\xa9?\x9b\xf5\x05\x8d\xe1\x96\x80\x19O\xcb\xce\xffq\xbc\xc7\xdd\xd5b\x07 \xe4\xc7\xbd\xc1\xbe\x15\x1e\x15L\xf0\x90\x89\xe0e\x1dO,\x1d\xd6,\xe77\x9f\x88 N\x13\xc6\xa8\x8a\xaf\xd0\xc5\x8d\xd7\x93\xaf0\x0e\x83S\x81\xd2\xdc\xd4\xa9$|\x1a\xc1\x17\xf4<.z\x1eC\x97\xe1uo_\xed\xdd$\xedHZk\xa2\xee\x89}&g\xe4K\xda\xe2\x14t\xe4QNG\x90\xc9\xe3\x9d3\xd9\xac\xbe[m[\xb5b#\x914\xec\xd3\xa0y\x9fz-\xf7i5\xa7\xb6\x97\xa3o%\xa7vV\xbf\x8a\x9f\xa0\x00\x8eR\x93\xa0`\xfc\x18\xc2\xbb\xddn\x1fq\x02\x95 S\xb6?\xbci\\`3N\xb63\xe2\x87_\x01\xd22N*\x8dq\x04\xcb\x8a%f2\x96q8\xc8x\xa3eF\xbd\x0e\x17\xaf\xb099\x14R\x1e\n\xb2\xe6Y{lR\x8f\xf5\xee?X\xaf \xeb\xbf\x11\xa3\x9a\xd0\xa9\x0b]\x05\xa9\xeac(\xa8\xa5\xf6`.\x1d-e\xf0~\xc9iRx\x00\xdb03\x93\x98i\xc16\xc5l'4\xd9\xe8\xa8\x84\"D[\x1d\x95\xe4)$4B\x12J\xcad\xa6%1\xc1\xb7\xba\x1b\x0c!\xc4W\x9e5\xb8Xy\xfb\xc2g\xca\xc2\x13\xce!\xcd\x9a\x16\xfd\x9fAF\x1a\xd6\x88\xb4X#\x85\"\x84&\x8a\x90\xf3\xbe\xd3xV\xdeA*1\xf091h\xd8\x8c\xae\xd0U\xb6\x82;Q7\xdc\xb4+S-7\xc2\xbe \xf0\xad6\x9cY\x94\xcc\xb7!\xd7(\x89@\x03I\x93\xf4X2\xd5k\xf4m\x84\xaa*-\x0b\xb98F.\x02\x8a\x9eT\x10-\x801/|,i\x048W$Kz!K/'\x95\xf9\x87G\x8f\xf8\xc5\xa4DbT\xe0\xd6\xc1]+i\xe2K\xca\xab\xc1\xc5N*\xc4\xce\xeeKu=\xfed\xee\xa8.\xd2\xe9D\xb5\xff2+\x03sm\x94.\xd4\x8c\xce\x1d\x87\xc7\xbb\x94-\xa3\xfb\x97\x89~*\xb4\xb3\xbe\xa2\xb9\xe5c'O \xa6\xd1\x80\x98}\xec7\x94\xc0\x14\xa1zO[Xy\x15ia|\xdc\x9c1\xf7ui\xbc\x85\x0fy\xbd\xd4\xed\xf3ce\xe0'<\xb4C\xaa\x89\xce.?Uf851\xc3\xd4I\xa7\xfeL@\xcd<\x12{G\xd5X\x11\x15K\xb8\xc8\xd6y\xc4y\xeb\xb0\xee\xc4\xca\xd0$\xe2dZ\xb9R\xf5\x0d\x97\xa8\x90\xaar-\x82,\x9a\xfa\xd3p6\xabL+\xd5\x98\x03\xe6\xe12b\xbb\xd2\x8fR\xab\"\x9b\xb5s\xc43\x02\xb0S\xe8\x1fUOB\xa9\x97V\xcc2q3\x84\xc8\x03\x85}6GZ\x9c\xb0\x13\x08%\x8b\x85\xda\xcbR\x0e\xf2b\xe7\xe5n\x9fr\xfbR\xaadh\x1f$dA_W\xac\x15,\x96{|\x8a\xf1\x80\xde\xa64\x9c;\xf5}\xc4m4\xc7@\xca\xab\x85'~et_\xe4\xf6\xa3z\xb1Z\x07,\x0d\xe9\xd5\xac\x07x\xd9\xd6q(\xecC\x8f\x9aC\xcaX\xa3\x99\xf3h\xe1\x97i\xba\xd6\x04\n\xe7\x0fo\x12C\x0cq\xd1\xdfS\xc1\xec\xd57T\xd1\xb8\xae \xd9zC\xf3\xdb\xdb[\xf6\xf6\x17\xda\xb1+-l\x8e\xec\x0d,\xa3\xf5%\x8d\xedm\xec5Lr\xe1\x07\xa6P\xebzs\x04\xeda\":\xf9\x16\x98%\x1d\xca\x1a\x83\xc4\xd47~d\xbc\xde\x99S/\x9a\xd3O\x1f\xdf\xbe\x8aV\xeb(\xa4a\xea(Q:\xcfzh\xb2\xc0\x18+\xcd\xceM\x07\xdc\x7f\xc2_\xdc5!{NT\xaa\xf1\x05$\xed\xd1\x9e\x8c\xdcQ\xdc\x0f\xa1\xcb;R\x9d\xcd\xf95\x0dZOO\xd0#\xde\x85X(6\xd1H\xf2\xd1#\x10G\x0f\x0dkS\x8cP\xb2\xdbG\xb6\xa0\xfe\x94'\xf03\xd0\xbe\\\xf4I\xd1O\xf2\x8f\xc8\x0f\x9d\xee\xa3\xae[!o}H\xb9go 2U\xb0\x94.\x92\xd1@b\xfa\xfb\xfe\xe4\xd1\xac\xe7\xeeO\x9c\xe9\xef\x8f\xb8\x95\x04\xae\xfa?>?G(\x86V3\x01i0\x159\xe8\xb4i6\x8fb\x156\xabg\x0b \x9b\xe2\x87\xfc\xba\xd7\x89\xa7\xfe\x8c\xb1\xc9-x\xa6\xf8a\x08^\xf8FnU}\x1a\xb9o\xe4\xde\xee\xb6\xd67rk\xb8\xa9\xf1\x8d\xec\x1e\xde\xae\xa9\x97\xd2\xb9\xaag+W\xcb\x14\xdf\x97\xf2\x93$\x7f\xe2\x87-\xc8\xb8\xe1\xcaL\xdc\x94\xf5a\xdd\x87y\x1f.\xfb\xe8\xc9\xa8\x89\x01\xba2X\xe2.\x0d\xe5w\xa8\xf9-\xafSE\xb5Yl\x8a\x92?\xf4\xe9\xdd\x9ar\x9fh\xa2\xe6R\x06\x950\\\xe8\xcf\x10\xb9+\x03=\x02\xe1\xddK\x1du\x04.\x04\xec)\xec\x8bh=\x1c\x10)W\x1a\xd3\x01Y\xaf\x83;'\xeeW#>}6\x0c\xf0\xdc\xech\x8f\x16\x12\xb0\x01\xe6\xfc\xedJ\xbc\xa0Kn\xb7\xf2R\x90\xa1P\xdei\xa0\xe8\xc0Z\xb9f\xcf\x16\xad\xc6t\xa35\x97dC\xa2\xb8\xb3t\xbbj\x01\xce\xb9\x9ac\xe3\x90\xed\xe0Z\xb59\xec\x83\x08\x05\x1fe\xa9s\xd3oa\x94\"A\x91\xc2\x068\x08\x0f{\x00\x88%L a\xdc\xdaB\xbep\xed\xd6\xf3s\x00ga\xabn\xdf\x06\x88\x1cZ\x1d\xad\xe7\n2\xa0Av\x00\x13\xb8`\xaf\x8c\xf9\x9d\x8e\x8a-5 M\xdf\xe3m\xd3\x1a\xe81\x97\x01\xea\\\x0bz\xb6Bl,$^f+\x1a\xa6 \x0f\xe4\x9f^\xfaI\x1fo+\xa8Ei\xc2^V\x90\xad\x10\xbf\x9b\x97\x0f\x14t\xe5\xbd\xd4\x91\x80 $\xab\x02fkmC\x9f\x1d\xd3\xc2\xb3\xd1-]u5\xea\xcd_8\x97m\xe4\xf0\xfa\xc6BSyG\xd7\xa8\xdb\xaf\x8cT{r`\xaa\x0bF\x85\xee\xefQFrB\xae\xfbA:\xd9a\xe7-\x99\xfb\xe1\x92g\xdap\x18\x95\xec\xae\xc8\xedo\xc4O\xbbty\xbb\xb5PS\xe5~p\xa2{#\x97u\xff@ *\xdd\xeb9\xe1-]B\x0f\xab\xac\x05\x82\xe43\xa1\xaf\x0f\x9d\xd8\xa9\xc4\xcd\xccs\x08\x15\x0c\":`\x8c\xc1#\xe1\xe3\x94\xcd\x0dH\x02\xb9|\xd9\xa9\xd8O~\xd6\xef\xd0\x1a\x80\xc6\xa0]\x14\x14-\xba\xe7\xe7\xd8\xfe\xf99R\xe4\x7f|\x86I\x15LZ-\xa89\xe8\x16\x8fC\xe7l?s\x1di\x15\x85\xe2`\x9f\x81vw\xe8\x0e\x16NUp\xee\x832\x0c\\\xbc>l\xba.\xeb\x7f*\xc3\xd9u\x1c\xaa\xda\x8c\xa1\x9aM\xe78\xd5\x14y*\xd5G\xcd6\x9e\xb0*0\x8cl\x87\xa8\xebK%\\\x8aFx\xf9\x9c\xd0\x1cM\xd0@\xf6\xb8\xae\x06\xad\x9a\xc1\xfe\xe33\xbf|\x19\x8b\x83\xa6\x82z\xde%\xf5\xae\xc6\x8aEv\xebM\xab\x92\xf5\x02\xe5\x8b\x8d\xdb\x82\xe8\x1b\x8f\x1d\x0fC6\xf0:\x0f\x1b\xd9\x97\xed}\xde\xdf\x18\xc7\xff\xcc}\xe0~oV\x1a2p\xed|E[\nx\xab2\xb4\x90\xad\xf7\xb4I\x88\x9d\xad\xbd-m\xdc\xa1\xa7\xba\xb0C\xa1\xb3]\xad\xcd\x07\xfft\xbbZ=\x10\xe5\xd5\x83\xc0\x13\xbdVG\xb9\xe0\xf5w\x86\xa5\xd3\xf0\x99\xf2+\x1a\xf8![\x1a\xa7\x82U\xeb\x1a\x19Z\xf8\xe1\xfc\xf5\xf1\xfb\xa3hN\xc7Ui6\xa6\xe1\x9c\xc6c\xf0\x07\xfc[e\x92\xe1*\xca\xc24\xd7\n\x1d\xa4\xbc\x11\x7f\xa0\x7fR~\xfb\x9a\xc6\x89\x1f\x85cH\xaa\xad&x\xc3v~\xc1\xe8\x05\x9d\x7fZ\xcfIJ\x931d\x83r\x89\xe15>\xd2\x93\xec\"\x8d)}\x1b\xa6\xd1\xab(L\x89\x1f\xb2y\x14\xc2\xabB\xa1\xf5\x91\x1a\xcf\xcf?\x1e\x1e\xbc:=\x7f}\xf8\xeb\xe9\xf1\xf1\xbb\x93\xf3\x9f\xde\x1d\xffx\xf0\xee\xfc\xe7\xe3\xe3_\xce\xd1CWk9e\x7fM,\n{\xbbU\xc5\x8ar>\x87\xe7iL\xa9.i\xf8\x92\xa6\xaf\x82(\xa1I\xfaV\x10\xe47q\xb4\xe2\xab\x12\x0f\xccO5\xba\x16\x8aK\xc6*\xc8\xcaM1\xc3@\xb9b\x18\x88e\xa0\xf3|\xcc\xfc\x02\x921\xfbR/\n=?`\xcb_\\h|\xaepH\xeboAL\xf6\xf6\xaa\xd1\xca$5\xa9\xeewNM\xf6\x9e\xea4u\xac\xbc\x1a\xdd,\x13\xe5U\xaa$\x88\xe1\xd3j\xbf\x81(\xaf\xf6\xcb\xe9\xc9\xde3==\xa9\x11\xc35'3\xa3*Y\x9a\xf3\xf2\xcd\xea\xe1w)\xcaG\x95\xf2kQ^\x9d\xeeJ\x94W\xc9\xe4R\x94W\xc1p'\xca\xab`\xb8\xe0\xe5[\xd5\xf6\xcfEy\xb5\xfd\x1bQ^\x9d\xef!*\x18\xdb\xf0n|{6\xc4\xce>D>\xeeP\xb8p/\x07\x87\xd74L\x0fW~\x9a\xd2Xl\xf0\x8f\x94x)\x96\xbf\xf3\x93\x94\x864vVn^\xf7C\x90-\xfd\xf0\xe7\xecB\xd4V\n\x8f\xe39\x8d\x1dR\xad\xfb)\xf5\x83D\xd4.Q\x0bga\xab\xcaj\x9c\xc6\x84\x91d\x12\xa0\x80\xde<\x82\xe4\xc7\xbb#\xb2\xa2\x9a\xfbC\xf69\xf1W\xeb\x80*\xd5\xc7pS\xa72\xecs\x18\xa64~G\xc9u\xb9v\xa6\xaf\xfd\xea\x92\x84\xcbrMCv\xb3\x13\x1a\x94\x07<\x86s}\xcd\x1f\xe9\"\x8a\xe9\xdbp\x9d\x95\xab\xd7]\xb4>#d~\x8e\x92\x02\xb8\x020?\xb1\xb5\xf3\xbd\xbc\xf8U@\x92\xc4\xf1\x8c\xf5O\xe9mZ\xa9|\x89\x95_\x1f\xbf\x97\xd7T\xa2\xaaR\xf2*\n\x17\xfe\x1235\xb4\xab\x99\xb4\xaey\xc1\x17}\xb5f%\xe5\xb1\x96\x0b\xdf\x10/\x8d\xe2\xbb\x16\xb1>\xa5\xc2\x81\xde\xc0\xba\x1a\x98\xb2\x80\xa68\xcd\xf3\x0d!\xc8\xf5iL\xc2\x84\xf0\x1e\xee4\x15\x7fd\xbc\x80\x1f.O\xd2\x98\xa4ty\xe7\\c\xa5\xda\xd8\xc3k?\x8e\xc2\x15\x0dS'0K\xf3\xf8\xed\x8b\xc8\xbf\x99F\x08\x00\xfb\x8cw\xa9\x03\xa8Kb\x9flxY\x1c\xd30\xed\x8eu\xf7 \xbc\xca\x9c\xa6\xc4\x0f\x12k\x15?a\xac\xcf\xdcV\xe7\xd2\x9f\xcfih\xab!\xfc\x02mU\xae\xe8]r\x19\xc5\xa9\x97\xa5\xd6\x01\x05\xe4\x82\x06\xb6\nq\x14\xd09M\xbc\xd8_#\x07e\xa9J\xb24\xf2\"FMRj\xab\x87\x92\x97\x1d\x06\xf4vM\xc2y\x03\x9cH\xb2\x8e\xd6\xd9\xda:=zm\x9f\xde*\x9a\x13{\x05\x19\xb5\xbc\xb1R\x82d\x8c-\xaf\xadj\x14\xfb4LI\x13,\xf1\xce\xfa2\n\xe64\xb6V\x8bi\x92\xd8\xc1\x14S2\x8f\xc2\xe0\xce^\xe7o\x99\x1f\xdb\xdb\xe1\xd3k\xa8\x13\xc5\xd6\x1drM\x82\x8c\xae\xc8ms\x1d\xdf\n\x1d\xac\x13F7\x8duRzk\x1d\x10I\xa3\x95\xef\xd9j\\d\x89\x15t\x81\x7fm]\xef\x98\x06\xf4\x9a4\x10\x0eF\x7f\x16\x0b&\x9f[j-crqa\x87?\xa3\xc2\xd7\xb8]i8o\xe8\xd4\x8b\x02\x8f\xf1\xe1\x0du\xd0P\xae\xa1N\xb2&\xd6\xe5\xf2\xa20\x8d\xa3\x06\xca\x884\xe6\x82\xce/\xac\xe0F\xcf\xe8\x15M\x12\xb2\xb4\x82}\x11D7id]8F\xf9\x82\xa6\xfe\xa2\x9b\xd0:\xecu\x94\xf8aB\xadP\x8c\xa3\x9bFH\xc7\xd1M#\xa4\xe3\xe8\xa6 \xd2 M\x13\xff\xef\x08\x99R\x8d\x8a\x00\xf6\xfa\xf8\xfdA\x9a\xc6\xfeE\x96R\xc6\x1a\xb2s\xaf^E\xf2\x1dy\x8d\xbc\xc2W\x9c\xc2\x8aFgX\x95V\xc4\xd5\x81^\xa3\xb3\xb7W\xad.e\xb0\xaap#e\xb0\xaap\x83q\x08\x9f\xf5a\xb4\xd5\x87\xcd\xbd>lmV,[\x990\xb6\xb9\xa9 \x14\x1d\x0d<\x12~J\xe8\xeb\xe3\xf7\xa8O@\xde%\xf1\xd9\xcc\x91\x0fE\xbd/O\x11Q~\x19\xc5\xb5R\xda\xfcjS\xf3\xc8\xc3+\xda\xf7\xd1\x9cb3\xb2\x00\xa4\xc3\xa0,\x18\xa8U\xab\xca\"~\xd3Zm\x9c\xf1\xae\xd5\x01\xb2\x07\x1d\xee\xb2\xe7\xd4\x0dk1\xf5\xbbHv\xc1V\x9f\xb8F\x05\xcaz \x14C\xac\x06\x9a\x07\xbd\x0dS'/u\xdc>\x8c\x86.\x8f\xe7\xa7\x11?+cu:\x1e\xc8HT\x0b\xc0\xec\xbe\xec\x0b\x86\xe4\xabL\xf6Z\x13\xa6{\x95G-\xc5t\xbc\xaf\x84W\x03\xe35K\xf5\x96\xdax\xd2\x17\x85\\\xa1\xe3\x00\xd9g}I\x12:\xffH\x97~\xc2\xf8X?\n\xe5\xb6\xd0Vg\x9f\x8b\xec\x82\xf1zc\xe8F\xa1\"\xb9X\xbc\x10<\xb2N\xb3\xb8\xfe\xca+^^\xb7\xe5\x87\xfa\xde\x96\x9f9]\xd3pNC\x0f\xd9\xdai7\x8d\xd6*\xda\x86\xf3n\x1fX\xe1/\xf4\xee\x03\xe3\"\xc4O\x862b\x98\xf8\xfb\x03IR\xda\xd5$\xe5\xab\xf7\xea\x95\x9a\xffN\x80\xac\xce\xa1\x1d,\xcbo}#p\xfe\x18d\xb1\x80\x92 \xb2\xaf\xa3\x9bP\x0f\xe7_\xe8\xdd\xa7\xb5\xf8\xfe>\xca\x12\x8aU\x1f\n\xe7\x93\x94\xc4\xdf\x0be_U\xba\xf9\x02X\xe3{\xdf\x15\xdabd\xff,xs\xc9\xf6\xfb\x03\x9c\xf7\xf3\x05\x10\xe7/~W\x90\xcb\xb1}C\x98\x97J*\xe3\xbb\x13\xaa\xbe\xbc07\x9b\xba\xd0^\xa5I{r\xad\xb2\x83[C\xe7C\xb3ZD\xd7r\xf7\xa2G\xc5\xab\xf2\xe1\xabk\x18gim:o {\xd0D\xd3S\x9b\xe3\x105\x19\xa8\x97@k\xa9\x84ki\xb7\x00\xd7\xc4\xac\xb3F0j\xb2\x1c\xd7ymhL \xafe\xde\xb7\x01W\xa0\x94G!:1\x05A\xe9\xceIJ\x90\xbbIa\x02\xe9\x80\xfd\xac\xdeI\x14#b]\xdd\xe4,Y}t\x87\x92\x8f5\x84\xa6\xcd\xfa\xba\xd8\x0e\x1e\x86l\xb3\x99FC\x13^\x82\xbaT5\xf2\xd6\x18\xf3k9\xa8\x9e z\xe39]\x17\xec\xbczX\x07\x87\xe1\xbc}\xf3\x82Z<\xac\x07\xfeR\x13\x9d\xe0\xd7O7\xdc\x96\x10\x85\x8fG\"J|u\xb8h=\xd7df\"1M\xd9\xc4\"\x92\xd3\xa3G\xca\x8e-\x07\xba\x16\x031\xf7\x8e\xab\xe1\xf6AI\x18^\x16\x08\x00\xf9a\xf6.\xc6q\x17\xe1{kMp\x1c\xab>:\x0c\xd1j\x8f\xe7\xa9c\xf2\xcd\xcd`I\xd3\xd7$%\x8e\xcb\x81\xb3\x0f>\xdawEQ@\xe7NTu\x05`X\xbd\xc0,\xc4E\xa5\xac\xd8\x03udO\\X\xf0]V\x8bsbp\x05\x95\x97\xd9\xe7Z\x7f\xfb\xdc\x92GDH\x91m\xb7qn\x8c\x07\xc4\xf3\xb2U\x16\x90\x94\x9e\xdeD\x1f\xd8\xf1\xfb\xdaO\xd6x\xf9\x9c\xe0E\xca\xc2J\x8dn\x1b\xf6;\xa9\xcf\xbf\x83\xd1\xa2\xe6U\x13\x9fo\xb6\xe3[m\xc7s\xa7\x1a\xb0F~\xda\x1c\x1c\xf2\x93\x1fF7\x97\xbew\x89\x8bp\x0d\x13\xbe\"cp\xee\xc4u\xd8\xaa\xa9\xabBd0\xf7\x95\x1bv\xe3\xfa\xea\x1b\x04\xe5&\x02Q\x1dc_\xdf\x15C\n\xf5\xef5\x86\xd9S\xf6]3M\xc1\xad\xdc\x82\\0d\xb81\xad,:5\xd4\x17\xb6\x88\x0c\xd7\xf1\xd8\xdc\x04\x07cj\x05\x14\xc0)\x1b\xbb\x11z\xfe \xa6\x01% un\xdc~~\xe0\xf5\x0d\x01,\xf5\xae\xce\xeda\x06\x0fBu.O\xb6Z\xabo\x8e\xe1\x8f\x1eA\xa7\x85iD\xe5m\x87\x0e\xbc4\x0e~\xa1w\xb8\x1ayJ~\xd8\xd0\xd1\xa2\xcf\xd1s\x80\xf2\x83\xf7\xba\xf9\xbe\xb9t<]XD\xa8\xb1\xa8\xf8*\x1b \xba1\x8b\xdcQ\x1a\xda\xd6HX\x01J\x810\xc1\xaa\xac\x96\xbc\x0d\x1d\x9c\xdf\xc4d\xbd\xa6\xf1I*\xb2~\xa4\xe5\"\xf3\xd5\x01gT0\xd0\x980\xd7\x0d8\xaf\xd3\x0d\xb3\xd5\x05\x8d\xf3\x95c\x0b`\x19\x0b(\xacw\x97\xe7\x8c\xc3\x03\xcc\xdc3`\xf4\xb5%Ms\x93TG\x9cyn\x112\x17\x1d\xefk\x15\xb4+\"?\xfa{\x8dz)\x9eB\x81\xd1\xe1D\xafp}\x8f\xa5_)*\xef=\xd595\xab)\xde#q\xa4\x8a$\xe2V\xb4i\x197\xd5@\xe0\xf8\xe5\\L\x17\xf5\x85\x928\x18\xd60\xd7\xe2\xce\xaf\xcfV\x00\x13\xa0\x0e\x0f8\x92]\x04\xbe\x97SMd\x02\xe2\x01\x99\x17n\xa8\x07\xc9G\xba8\x8d0m_\xbf\x1ab\x0bp\xe1B.\xc8\x0d\xce\xa3\x9b\x90Vc\x96\x16K\xc8\xc4\xb7\xe42\xca\x02!\x06\xb5\x81\xa6\x84I]r\x03\xa9\xae\xac]a\xe4\xd0\xa7\x06\xe8c\xb9\xc8\x86\x16\xd3\x85LL)\x86_\xbf\x0f\x89\x8c\x03\xf0\xb5\x03P.W\xecX\x90\x13\xcb\x94\x8f\xc3\xc7\xafb\x1c}\x08\xf1m\x0c#\x9eG+,\xde\x8e\x90\xc0\xf1\xbdY\x062g\x89\xdb\x80\xf7\xff5\xc8\x8a<;\xe2fLW\xd15-\xa3';\xf9\xbf \x82~\x075\\)\xe2\x80Q\x03iP\x8a\xfc\xe6\xc1^\x0b\x13G\xedR\xa7\x91Xh\xf3\xfb\x1e\xe6\\\x9a@d\x89\xfc\xe2\xac\x8d\xc1V\xd8\xe73_\x81 W8z\xe6!\x8b\xf0\xa0\xfb\xfb\xe0\xb5\xc4\x94\xb9h\x16D\x92\xe4\x04\xc6|\xb05\xf5G`\xb8\x96\x07\x19uD\xb4\xe2Y[\xf1,\xad\\WlZ\xc9\xa0 P\x88\xd0\xb8S\x0ds\xc9ov\xf0\x9d\x80S'V\xcc\x17\x0c\xd3`]WVq_\x17\x95\x17\x04dV\xfa\xd1 \x81\xc60\xca\x96\xd1\x08\xd0\xaf\xca\x83\xa2\x9c\xb6\xb3\xe2\xbc\x7f\xf6\xab:\xa8y\xd9\xce\xa98D\x95{\xa9\xeb>\xac\xf8&w\xfb0e\xbf\x1a \xa9\xfe\x8c\xcf\xb0\xf4+\x0f\xd2Z\xf4\x1bv\x8e\xca\x00+~\x14\x0e\xde\x7f:9=\xfftrx\xfe\xe1\xe3\xf1\x87\xc3\x8f\xa7\x7f\xad\x9f\xafj\xf5\x9f\x0fN\xce\x7f<>~wxpt\xfe\xeb\xc1\xbbO\x87\xf5c\xb7Z\xfd\xe8\xd3\xfb\xc3\x8fo_\xe9\xaag\x9a\xea\x1f\x8eO\xde\x9e\xbe\xfd\xf5\xd0\xf6^\xa2y\xef\xf8\xd7\xc3\x8f\xef\x8e\x0f^\x1f\xbe\xb6\x0d0\xd0\x9eR~\xf2*K\xd2h\x95k;\xc6\xf0\x91.\x0fo\xd7J\x94\xfc\x94&\xe9\xe0\xc2\x0f\xe7NHo\xc4c\xa7\xfb\xbb3')\xb9'\xb1O\xdc\x0d\xcc\x01\x14\x0f\x0eNO?\xbe\xfd\xf1\xd3\xe9\xe1\xf9\xd1\xc1\xfb\xc3\xf3W?\x1f|\xc4\xbc@?\xfc\xb9\xab\xcb\x1ao\x0f\x85\xc1><\xb3\x8e\xd6\x07\xb9x\xfc\xea\x92\xc4\x185\xd1R+I~\xa1w\x96\x1a)\xc6\x1c3=\x0e\x82\xe8\xe6M\x16\x04'^L\xa99\xb6\x0c\xd6\xc3\x08%xjx\x96\x0e\x03\xcbp\x13\xcb\xa3\xbb\xd03w\x9f\xa5\xd1+\x11\x12\xc3\xdcD\x96F\x1f\x02rglE\\\xec\x9b\x9f\xd3 \xf8@\xe6s?\\\x1a;auN\xd6\xc4\xb3\xd6\xb9$\xf1\x89e\xd5\xbcK\x12\x04\x14-\x1c\x8c50\xb4\xc7\x18\"\xb87\x8e\xd6\xb7\xc0\xc2\x0bH\x92\xbc}m\x7f\xceYLS\x8d(H\x8cA\x89\xbc\x88\x01\xc1\x8cV^\x14\xa64\xb4@\x80??\x9c\xfb\x18\xe8\xc3^\xef6}O\xc3\xccZ'\xc6\xc1\x9a\x00%*\xbc\xf3\x13\xdb\x88\xa2xnFO/\x8e\x92\xe48\xf61L\x92\xa1\x0e\xb7\x0c2?\xa4\xa7\xbe\x05\xdey|\\\xc3,\xe6t\x81\x81 \x0dO\xfd\xd8\xdc\xb2\x08\x96c~9\xba \x83\x88\xcck\x91 \xf3\n1Y.\xad\x0bEC\x8f \x04\xc6\xe7\x8b(^Y\x1f\x1e\xd8\xe9\x14\xabr\xd8\xa2\x8f\xf74\xbd\x8c\xe6\xd6*G\xd1\xaf$\xf0\xb9\xff\xa9\x01 \xac\x1a\xe7\x0f\xcc-\xc5dE\x7f\x8cb\x8c\x16i\xa8sI\xc9\x9c\xc6f\xa4\xba\xa4\xfe\xf2\xd2\xdc\x05\x0f`d\x1c\xe4\xa5\xbf\xbc4\xbf\x1b\xd3\x85\xf5\xe1;b!`\x97\xe9*x\x13Y&\x96\xa6\xeb\xc3\xbfe\xfe\xb5\xb1\x86\xefY\x16\xd37/\x10\xden\xbd\xc7\xf0\x8d\xc6\x1a)]\xc6~j>\x81|3\xc4\xaf\xe8\xdd\x07\x12\x93\x95\xb5\x86\x15\xc9\xae\xfc\xd0d\xeet83ov*nd\xd9$e\xba]D(4\x7f2\xec\"~]\x19\x95\xea3\x08a\x08|\xda\xd7\xed\xbe\xca>3$WK\xbe\x052\xd5\xd0C\xe4\x87xVE2\x11\x9b\xf4\x99>?\x84.\xd9L\xac\xac\xe8\xa40\x9d\xe7\x89x\x04\x85r\xbas\xff\xfa\xffa\xefM\xdb\xdb\xc6\x91E\xe1\xef\xf3+`\xde9ij,)\x96\x9d\xc5Q\xe2\xf6u;\xce\xe9\xdc\xc9\xf6\xc6N/\xa3\xf6\xf8\xc0$$\xf1\x84\"8\\d\xbb;\xf9\xef\xef\x83\x02@\x82d\x81\xa4lgf\xeey.?\xd8\"P\x00\xb1\x16\xaa\n\xb58\xfa\xbe\xb7\xb9\xf2\x1e\xfe\xfd\xb7\xf4//\xdc\xdf\xae\xb6\x07\x0f\xf1Q\xe8\xa5\xdbX\xbb\xca\xcf\xc5\x9a\xa2\xee\xd6\x04\xd1DL:\xfd[\x91\x8ab\xf8\x8af\xde\xd2M\xdb/>\x01Ug\xb3\xc9yU\x1f\xbc9\xf1\xa8yVH\x94np\xe0\xd6u'\xe1\x82\x1bkd4\x0e\xa2\x88%b\xbb\x08\x9c<\x9b\x9c\x93m\xc2\xc86 g\xbb\xc8\n/B\x1a{\x00\xbds\xfe\x9cx\xa3\xd1\xf3\x81\xd4\x0c\x1d\x874\xcd`\xe1V\x17\xa6\\\xda\xd5O\xb1\xe6\x90\xce\xb5B\x98\x9a\xf4\xf4\x87\x9b3\xba\x80H\x0d\x8e\xf4\xb7^?a\xe7:`\xb3\x8c\x16\xadgkH\xb8;\x1f\x8c\xe7<9\xa1\xde\xd2\xcd\xeaF\x80E/br \x83~\x81\xfa\x89\x1b\x8d=\xd1x\xb1m\xd3\xc1s\xb3?\xa2\x87Z\xdfQn\xe42\x0f7\x99,\xf1\xfc\xd7\xfb\xd8\x7f\xfb\x96\xcdm_\x82\xaa\x1d\xedkT+7nI\xcd\x1cTC\xb7\xaa\xd0x`\x86#~\xf0\x808r\x06\xc05\x03T\xb2\xe5:)\xcb^G\x19K\xd64\x94\xe9\x83\x8a\xde\xbc\xa9\x13)p\xb3 \xcd\xe1\xf3r*\x82\x14\xfe\x8b\x06\x8bO{4\x0c\x19S\xf5\x83\xa9G\xc6V\xaa\xda\xea2\x13%\x0eI\xa3\x12 \xa2\xc0\xf6\xbf\xdb\x98\xa3\xdc\xaf6\x7f b'\xe1\x0d\xd5c\xb7U\xd5n\xb6\x85r\x86\xc3\x08\x16+20\x99\x91\xad\x0c.\xc1x\x81\x8c\xc8\xa4\x18 ]\x1c\x9d\x9c\xb1\x1c7\xa3\x9ez(\xf9AK\xbc=\xb5.d?\xcb[v\x18F\x15\x87\x1d\xc1Jf\x9c\xbc&UX\xec\xbaH\xef:7\x13[U\xfa\x9e\xe0\xe4\x05\xc9\x9e\x13\xbe\xbd= \xd1\x8c\x9f\x8bI\x98q\x04\x05i\xf5\x9c\xe6\xdcO\xc9\x8c\x9d\xdf\xef\xb6\xb3\x1c{XP\xa4\xbb\x1ec\xa0\x13\x89h\xed\xcd&C\xf2\xdd\x0b\xc9\x1f\x16\x02\xec\x03'Kr\xe6|\xff\xdd\x908/\x1e\xca\xcc\xef\x9d\xf3\xe6\xc1(J;/\x80\xb1\xfc\xde\x01`\xf5\x1b\xf1\xf4=\xdb+a_d\x97\xdc\xbf\xf9\xfeE\x96\xe8b\xc9\xf7/\x1e\xaaDK\x1d^\xd9\xda\xf5\x82\\\xaf\xc2(=\x00\x8eo\xfa\xf0\xe1\xd5\xd5\xd5\xf8jo\xcc\x93\xc5\xc3\xdd\x9d\x9d\x9d\x87\xe9zQ\xb4~\xbdhT5G\xa9x\xe7/\xceT\xf6\xe8\xf0\x85\x1f\xacU\xcb\xe0\xd7y\xf38\xa4 \xa3\n\xfc\xc5\x8a\xc6\n\x1a~!\xd0\x1e\x0f\xa7d\xb6\xdb\x1c\x01\xddi\x8f\x87\x8b\x84\xe7\xba\x9e\xe2\xd56\x1a\xe2 \xd9\x82E\xben\xc4<`\xa1\x9f\xb2L\xd5P\xbe\"%c\x9a\xd0\x95.(1\x8b*\xa6_\x90BY\x82vAM`\xeb\xdc\x11y\xb7\xb0\x90\"wDn\xcacy\xad\x8bdyT\xe5!l\x92\x1e&4\x13\x9a\x84\xe7\xcc9\xcf\xf0\x9c%\xb3\xdcog~#\x08\xa0,0\xad\xbb\xa7,w\xfa\xcc\xf1\x82\xc4\x0b\x81\xc5\xf5\xc2 \xfe@\xb3\xa5\xf8\xed\xb39\xb8n`a\x18\xc4)d/\xc4\x9f`E\xa5\xaf\x07\x08\x80\xa2\xfe\xd3\xe4?\x13\xea\x07,\x02-\xdd\x15M\xc1\x03D\xac\xaaR72\xf0\x93\x877\x0b^\xfc\xd4u\x88\xc244\xebHddJ'\xcd\xb8\xf4\x0d\xc1\xae\xa5\x060\x84;8/(\x1b\xfba6\x07\x0f>\xc4\x1b\x12*\x7f\x99\xc1xk^N:i\x88@\x9c6\\\x9e\"\xf3\xda)\xa2N?p!\xe4\xfcEpV\xd4\x02\x11T\xe8?\xe7/\xa5m\xb5\xf3\"\x0c\xa2\xcf\xe4\xe1\xf7\x0e\x99\x12\xe7\x85\xa3HP\xe7\xfb\x17\x0f\xcb\xdfN\xd9\x95`<\x0f\x12M}\xa9\xe4C\xd9e\xd4\xd3\xed]\x0f\x01T\xc8`Qwoe~q\xe1BO\xeeW\x1f\x9d\xb8\x82(\xe6\x83\x99\x80\xab\n%\xfb\xd0\x0e/\xa2>\xac$Nl\xde\xc1<\xa2S,\xd1p@\xa3\x19\xc9z$=-\x97\xa8\xcfI\x8eK7R5\x85x\x9c\xc1\x86\x02\xa6\n[\xfa\xa4\xce\xbe\xaa0\x83\x0dW>\xb1\xaa\xbe\x9e.\xe3\x0cN\x1e\xd7;+\xe3\x0c\xee=\xae\xc3\xaf\xf1\x15\xa5\xc2\x0c\xee\xd4;\xab\xc2\x0c\xee\xd4 \x91\x1b\xd5\xfc\xfa`\xaa0\x83\x0d\xbb\x8d\x0b)\xb5\xd9{6\x18B\xb8\xc4\x9d\xba\n\xa4\x8a7\xd8\x18\xbe\x13U\xf0\x11\x14\x9c\xf8\xeb\xebB\xa2`r\x0b\xa2\x85\x16{\xf7\xa8\x10\xf9;\xe4l\x19\xa4D\xd0\xf6\x82c%W4%:L,\xb9\xbc!\xff%\xce\xa9H\x9cS\xff5Fn6\xfed\x7f\xd3\x1f(Ka./\xde\xa1'\x83\xb4Z\xfd?36\xbe\xc8\xe8\xe2\\\x1a\xd7(s\xcfl\xac\x97\x85\x1e)\x99jY\x0c\x8a\x1fu&{O\x1dA\x1d\x88\n\x87\xf6\xc1?$\x0e\x81\x0btA\x8f\xa9\x91P\xaa;\x84\xcf \x9c\xda\x96\xb2\xe5\xc0\x8b\xe1\x1a\xc3\x91\x0f\xf6\x89]M\xb4uO6\xfc\xc9\x0eHu\x11\x9b\xd9\xb6\xfa\xce\xc0\xa3\xa4\x15B\x8a\x94\x9fL\x9cA\xa5\x81p\xcf^1\xd158\xf72W\x14\xddu\x86\xb0\xec\x07\xed.M>\xb6x\xdc\x90N\xb6\x133P\xfd\x15\xea!\x19\xf1\x88\xa8m\xa6\xd9\xf8b \xa1!\xda[\xe4\x05\xac\xf2\x07\x0f\xf4\xcfRN#h\xb6\xd7`\x99#a\xa6\xe2W\x87 \xd3\x91\x9b\x0dI\x00>\xb2\x16L\x06\x8e\x85\x88\xc7\x1f\x19\xf5o\xdc\x81v\xa6\xe5\xbe\xc4\xee\x0e\xa0QQ\x9aM \x12\xeb\x99\xa0\xb6v\x16\x97\x9a\xa1:3\xa6\x88\xdf\xe7\xafVKQd\xb6^6\\ \xcd\xc7q^\xc6\xc1\x05\xe7\x92\xa2\xcd\xca\xcfd\xbd\x85*Y\xb7\xa7}i\xbci|l5\x8ey*G\xf0g\xe9\xca\x02\xbe\xd8^\xcd\xa7F5\x97\xb7\xa9\xe6\x1f\x8dj\x16\xdd\xd5\xe8_b5\xbej\x1ca\x19\x8f\x8f.y\x02w\xd3\xe2\x7f\xed\xcc\xcbx|L#i\x0e\xe0x4\x8aCzc\x05)\xfc\xe1h\xc8L&4\x0b\xbc\xcc\xe5|\x1c+\x0f\x85\x8e\xaf\x12<\xcc\xab`\xc6\xe3\x93U\x9c\x05\xe0K\x90\xc9_\x08H\xe4%7q&\x81\xf4o\x0c\xccW >\x9a\x9d$p\xa3\x0e\x91\xfd\x9a\xd9o8\xf5\x99/\xfd\xd6:!\xbc@\xc8\x0f\x0b\xe0[\x96Q\xdf\x04^\xa9\x04\xbc\x80\x8a\x9f\x04\xb0)\x12\xe4\x08\x1c\x96\xe7\xa9\x18\xb0X\xfcG\xb2\xe5L\xe1\xd3$2\x81\x88\x80\xfc Z _$\xa0X\xe6\xc4\xeag\x13\xe8#\xcdX1s \xcd\x98m\xd6N\x19\x03\xf3\x0b'\x85\x1f8\x80lQ*\x7f! \x19\x0d\xa5\xcf\xc9T\xfeB@\xf24\x06I\x8f\x93\xca_M\x90\xb3`\xc5t\xb4$'\x0bV,\xc7B\x1ae<\xfe\x89\x87\xf9\xaa\xec\xdd\x1a^m\xfd\xfb\x99\x06\x99l\xfe\x95\xfce\xd0\x11\x18 \xf6{c\xff^\x8f\xb3\x84z\x9f{\xec\xfd\x1f\x1aeK_\xcb\x82\xe0~\xfdR\x1f\x98{\xf5\x8b\x1a\xb1\xf3\x199 \xea3\xd5\xcc\xc2W\xbe.\xfe\xc8)<\xf4ft\x81\x1du\xd2\xd3{\x00\xba\xfb\xd6 ?\xeap\xc6\xdd\xb5\xcb\xeaMW@\x05>\x06\xb9\xa9/\x86%\xfeA\xba\x1bU\x0e\xdc\xd4\x1e\x01\xb9\x8f\xfc\xcf\x06\x96k\xe0\xcb\x84\xd1\xcf\xcd,\xd9\xb0u\xe03nm6\xcd\xfd\x00\xcb%\xa6\x0c=+]a\xdb\xfbp>$\xaf\x06\xe4U]\x1e\x93\x01\xb1\xd7Vx\x1c\xe7\xe9\xd2E\x86 \x1b\x92W\xb3\xec\\t\xdcB7\xb7v\\j\xac\xdd\xef\x8c\x9cH4Y\xe0\xcb[\xceI\xb0Z|\xf3v\x0d\xc9\xb7\\Us\x9e\xac\xee\xb7\x0b\x1f\x19h\x88\x11'Q?Z\xbap\x9a_\xae\x02)\xb4\xd4\xbfn\xd7\x8d\xc0\x128E\xad \xe9*\xce\x1a\xd7\x8b]g4a\xf4~\xc7\xe1\xb5\n/>\x14\xad\xd3?\x99=$\x01\x82;\x7fj\xe0\xce\x1b\xa0\x9b\xe4\x89\xd0\x87p\xfa\x11\xe5\xfd\xe5%\x07&k\xb8\xa4\xe2\x94Fs\x12<\x1d\xae@\xb0\x0c\xb6\xba\x14\xc7\x1f\x96\xb5\xb4\xd4\x15\xac,\"\x90@\xc6\x14\xc5\xb2>\xb3\x9b\x05\x8b\xf0\xbc0\x88>\xe39\x82\x9e\xc1s\xd4\x1d\n\x96\xa5Ug\xb1<8\x0e\xf1\xac\xab\xcbN\xe1\xcd\xcf\xe84\x89Uf\x95\n\xc5\x89\xad%j5w}\xf3\xff\x80\xff\xbe\xe6WW,\xca\x83\x8c\xad\x90\xf2\xe4\xc7\x9ap\xedW\xd0\xa2\x99\xd1\xd1\xefG\xa3\xbf\x9d\xab\xff\xd3\x8b\xdf\xc6\xbf\x8d~\xf3\xcf\xff\xf2\xe7\x87U\xf0\xbf\"\xb7\x95\xff i\xb5\xd3\x06#B\xfe\x8cJ3\n\xedJ\x1d^\xd0\x199\x03\xf2\xfd\x01\xd9\xa9J0\x02[\xa4\x92\xbfA\xb0\x01\xe4{\xbf\xb4\xc5\xd8\x13|{\x15\x17u\x85\xc4\xf9Oy\x03\xfeW\xf03\xfb\xe5\x0bq\x7f\x05\xf3su\xcf!\x08\x98\xc7\nW\xfeU\xdf\xbd4\xdc\xbc\x16\x04NUFb\x86\x03\xc9\xe8\x824\\C\xea\xcc\x88\xaeX\x1aS\x8f}\xfa\xf8\x9aT\xe3ph\xb9\x94\xbee\xa8e\xc7 [\x07r\x9e\xb9e\x9dRZ[\x1a\xa4\x05,u%\xa99\x17\xb4\xbe\xa5\x9d*\xbcv\xee\xc6\x16\x08\xd5s\x18\x92\xd7Q\x90\x054\xd4t\xbb\xa0%\xe7C\x92\x0c\xc9\xd5@\xfa\xd8o\xfa\xf4\xfb\xda\xe6fP|\xfd\xa4\\\x98\xf0\x8d\xf71\x8b\xce\xe8B\x9a\xdd\x1cE\xfe\x87\xf2\xda*\x85\x0f\xb6,\xf6\xebZ]JA@\xd6\xa5[k\xe9\xa7h\xfe\xd6\xb5@)?\xce\x8a]yN\x0e\xc9\x89X\xdeR\xf3\xebD\xaet\xb2M\xae\xc5/\xb9\xfc\xadKC\x02\xf7@\xe0\x1b\x92\xaf]\x14O\xc7\xc9\xf2\xa68\x82\xe6c\x9ag\x1c\xc2\x88H\xd3\xba\xd6r\xc1x. M\xfe\xe3\x9fr\x14w4\xeb\xd3\xbfSwZ\xa9\" r\x99gY+-\xf7o\xd0\x8dNz\xb3\xa3Q\xff\xe8O\xbc(\x99J\xab\xbeN\x0f\xcc\xd0CCQ+\xd6\xc8\x03l\x83\xb3\xb0\xb8\xd2H\xe0J\x03?\xc7@\xa7\xa7~\x8f\x91t\xc6\x89\x06/\xee\xb3\xa4\xc5T\xcf\x0c)\x11\xd8\xcfP\x0d\xfa\x1ek\x03x\xa7\xfe\xa8N\xa1\x04\xe2\xa2\xd8\x0e\x04\xfdt8\x87\xd5\x8f\x03\xba$\x92\x96\x01\xcb.7P\x7f5&\xc6$6\xdc\xfd\xe3\xebP+\xa2\x08\xa2-\x80x\xf6r\x9a\xe5\xfc\xbe\xe2 \x94H\xdd@-\xa6\x8e\x06\x135\xa29\xc1\xdc\xeccOA'\x9b\xf4\xe4\x9fK,\x0c\xeb\xe8\x90\xbcm\x8e(\xc8\xd4\xc4\x87\xbcz\x9bk~ ]1\xd8\x10(\x01\x85.\xab\x94\xda'\xb9\xd4 \"\xdb\x07\xc4\x01\x15\xa5\xbc}\xc2\xfb\xc6\xcb0\xcc\xc2#\x9f%g\\\xf0\xf9\x81'\xdbA\x0eID\xa6\xfa\xf4\xa9\xd2\x1cf[\x1a\xad\x07\xfa\x03\xf4\x8eZ\x80^\xbfT\x15\x83\xech\xd0\xea\xd3\x1d;\xb5\xfb\xf9s_\x17\xe1Kp\xe2\x80\x93\x16\xb5\xad\xe6J1\xf7\x1c\x1f\x14\x0b\x85\x8f\xa5\xce#\xccRB\xca\x04divP=b\xc1\x7f\x98\x15\x1aYZUL\xd0\x1b\x86\xe2\x98M\x01R?T\xadu\xc0\x0df\x84p]\x83\x9d_)Q\n\x0c\xdc\x89\x1b\xb4\xd1\xc5f \xda\x86\xd3\x12\xbd\xef\xa5\xfcQ\x13\x8aT\xc5[\x18\xff7\x0f\"\xd7qng\xa7O\xca\xa5\xfc\xb3I\xa3 \xce\xf37\x15\x02,\x19{K\x9a\x1ce\xee\x8e\xd8\xbb\x90\xbcM\x1225\xe2^\x10\xeb\xca\xab\xd1\xb7\xbd\xa5\xa6Z\x89\xed~\x97X>\x86\xd3T\x94\x17\x08\xe2\x7f\xc6bs\xa4\x83\x89\xc0\xe8 \x84\x86\x06\x0c\xd8{\x05Z\x1bY\x9c\xd5i\xfbB\x94\xec\xca\xces\x12\x92\x17$\xd5\xb6\x94$\xdc\xde\x1e\xe8fI\x0e6\x19\x92t\x16\x9ew\x912\x8d\xe8\x14\x1e\x0b\x8c\xf0\x14\x9ba1\x8c6i\x0e\x0d\x06e\xdc\xceHv\xb0h\x81\x9b\xc1\xc9\xdf\x8czR7\xe8\xab\x16\xbb\xc5\x16\x00\x19=\xbe\x8c\x82o+\xd7\xefb\x8c\xb8M\xdc\xcb\x15 \x82f\xda\x96%\xb9\x17J\x9a\xdb\xa4\xb3\xbaMh\xe6\x9d\xda\xd4)\xba\xe56\xf1\xacn\x13\x9ay\xa76\xf5\xe0\x03\xb9M\xec\xaa[\x85f\"$\xb3\x9d\x01\x7fW\x14j\x13\xaapE@7`\n,\xa3 \xc4V\x19v\x8b\xf8\xfa-\xde\x95\xda\xd1\x15M\x8c!\xb9\xc6\x83\xe3\xde\x95\x03\xec1\x1f\x97X\x83\xee\xf0\xc9\xcee\xd9\xc1t\xfe\xd4\x8f\xe9\xac\x9f\xfc\xc8\x0co\x80\xade\x8cI\x0b\xcf\x98 >\x00\xf4\x03:\xf3\x08\xc3(Y~4Y\x1f\x7fl\x96 \xe7\x91Yq\x85+\xeb#YN\xed\xecZ;\x1f\x05\xfd\x0cD?\xd3\x01I\xeb\xed\x0e\xa4\xec\x1fX%pU\xf2\xc7\xd7\xc1,8\x07B\xbd\x83\x9d\xb33\x8f\xedW\x8e\x92Z@\xb8`r\x08\x03G L\xad\xdc\xe6\x89`\xcc*\x0c\x1fka\xf8f\xd8A\xecB\x11\xd1\xed9\x90\x81q\xc5dfn\xaa\xd1\xc4\x83M\xd6x\xebZ\x12\xe0\x10\x98\xa6\x87Pb.\xa6\xb0}\xf1\x0dI\xdc\xb5\xa7Hek\xc4\x03\xb2\x15#{\xe3\xcb\x172\x87\xb1\xc0\xf3n\xb5o\xaa_\x9e\x0f\xd0\xca\x1f< \xb1\xa8OL\xc1\\\xfc\xb0\xecR\x91\xd7!\x81\x90\xfbM\x14E\"\xfb\xe9\xa7\xa0\xe0Q\xe9\x94\x98\x1aC85\x07|;\x95k\xa3\xdc\xaa=j\xaf\xc9n\x06\xf6\x9d\x9c\xb2\xacm\x1b\xb7\xdf\x8d\x17\xdf\xdb`\xa3w\xa3`\xdf\xa6|^\x7f\xca\xddrX\xedI\xd1K_u\x81L\xed\xd8\xc5\xdf0\x10k3\x05\x84U\xd4l\x80\x12\xd8\x15\xe3\x98c'\xb2\xf5\xfc\xbd5\xd7]\xb0\xb6\xac\xc2\xda\xb2~\xac\xed\xdd\x99c\nZz-6|\xd6L\xc5\xd1\xe3\xd5\xe6m\x02\x05\xd0\x8f\xbfU\xb5\xa9\xc1\xc6\xf3\x92\x8d/G\x0b/\x16vq\xffx1\xaf\xf25\x03\xbd[\xbc\x07\xcf+\x9f1\xe0\x11\x1aKg\xa5\x05q\xa4B]e\x06\xff\xabIr\x89\xb8#uF{\xa2\xc8\x16 _\x03\xf8\x8c]gJ\xf8\xe8V,>\x03PF(\xe4\x16\xd6\"d\x9b\x04\x03\xe3\x98\xcc\xc9!\xa1P.\xaf\x95SW\x92\x8e\x14\xf2\x1aE\xc2\x1a`\xd1\x81\x10\x0bg]\xdbL\x8a\xffy\x07\x0e\x85\x8b]\x84\xed\x1d%F\xab\x1b\xd5 u\xe6\x91]\x95\x10\xabyC\x9e\xfd\xff\xe9\xe2\x19\x8f\xd6\xf9\x95c\x87[\x01\xd8\x0f\x07iV\xdezvT<\\\xed<'\x11yA\xb2B\xfa\x15mo\x0fH6\x8b\xce\x95\x0e\x87\xcd\xf2\x9c\xf4a\xe7\xda\xf8\xd9\xde<\xe6\xf58\xcdx|\x96P\xefs\x10-\xbaN\xc7\xce6\x81\xc3\x82\xb6&-\x19\xf5\xdboo\xb9\x7f\xd3\xd2\xde\xc4u\x9e6\x1f\xe93\\\xf6\xd9i*C\xea\xa7\x8f&\x8bA6\xe0\x07\xa2\xf4h|\xc7\x03\xf1\xe9\xb3\xba\xcb2\x0e\x86\x87\xa3U:\xea\xf4\xdc]_\xeaj\xeb&n\xe1e\xdd\xe5C\xe2\xac\xd2\x913\xa8\xe3\xda;\xb5\xfb\xe1\xc8\x1d\x0f\x1e.n\xd9\xbe\xb2u\xc9\xb0\x1b\x85kW\xe0\xe3\x8c\x7f\x12\x14$\xe2\x02\xfc\xeb\xbdv\xceF\xa5(\xaa!\x19\x07\xe9\xa7(\xc8B\x96\xa6\xef\xc0\x7f\xd9\xa0k\x1cZ]\x19iQ\x02h@9\x97\x9c\x87\x8cV\\\x17\xcb\x0c\xa5\xc0_z\xe0\xaa\xed\x04\xady\x11\xa4\xef\xe8;7\xab\xa1\x07\xbd2DU \xe80\x9c(s\xc4?\xe5\x83\x07\x84K/\x922\xd2\x05\x99\x82\x08\xbc\x11!\x80HG\xe3`\x96\x99\x04+\xd0\xcf\xca\xc4y\x13_7N\xf7;N\xca\xfe\x0e6)\x0f\xff~\xb7\x8d2\xa8\xec\x94\x11l\x95\xfbl\xf7Cwv4\xfa\xdb\xf9=m\x16g\xf4\xe7\x893\xb08\xc3\xbfCk\xfb\xb5H\xcb\x0b\xfe\xf8\x8a.\xae\xa2 z\xe6\x17\xdb\xb8\xb6\xd8\"y\xf9\x90\xcd\"pq-M\x89\xa5\x14>\x82\xd54\x8b\xec~\x05\xc8m;lpg\x8fw:\xf7\xafej\xbes\xbe#\xdb\xb0\x88\xc8\xb6x\xb9\xe7\x86M\xcc\x86i\x92\xa9\xda\x10q\x08\x87\xecL\xd9\xfcb\xa2l\x8e\xcdE\x97A7\x01?\xa9\xea\xa6\x1b\xdc>\xa4 !(|\xa7B\xda\xff\x07\xf7\xe0[\x13\x84\x9ft\x931\xbb\xce\x12\xeae\xbat\xd9\x1e+s\x8e\xcf\xc2\xbd\x84~\xd9}2\xc0\xec\xe09z\xe8h\x9e\xc1\xb2\xcc\xa3\x19\xabn\xc0s\xcc*=\x9a9?\xb3\xcb\xcfA\x06\xae\xff\x80\x1c\xb9*\xde3\xc8\x7f\xcb\x7f/3W\xf2E\xe6\xac\xd22\xe3\xedi\x99\xfe\xbeL\xe6\x90\xda\xf8jm \x12\xe3`hN3\x8d\x82\x15\xb8\xf8\x02OM\xdcu\x8et\x823$\xe5\xcbI\xe4c|KQ:\xc8\x98\xf4\x14\xd6R\xc7k\x0d\xd3Z\x93\n\xf5g\xad\x05\x9cqa5d\x89\xa0?\xcd\xae\x9c\x15)\xa2\x86\xf2\x0d:S]\x81My\x02\xe6v\xde\\\x0d\xa6k{q\x00\xe6\xfd\x18\xf6\xca\xa0\x8a}\x01Q\x1b\xae\x82\xc8\xe7W\x80\x04\xa5\xa8\x8d\x04csf\xca\x97!i\x02\x14\x83\xdf\x0e\x06#[\xbe\x0e\xaac\x82\xb4\xa5\xa8\xa22\xb4\xc6[o\x9f\xd9\x82\xc6\xa13v^P.\xe2\xe5y\x03d+0a\x90h(\xe2\xe4 \x1aE\x0d\x113\xce)\xa2\\b$5\\D\x91\xbc\xd2.P`\x88\xce\xd1\x8d_qIJ\xee\x8e\x946s\xfc\xdct\xc1,%_\xbb\x93\xba\x0f\xe3\x1c\x97:J\xc7\xcf\x8f\xf6\x8cCE\xbb#~\x86b\xc7\xb0\xdb\xbd\x19h\x13 zY\xc6@5\xeb\xf5\xac\x07\xaa\xe3-\x99\xf7\xf9\x92_\xebHU:,\x1c\xb8\x84\xe7\x95\xd4\xc3R;d\x0c\xc5\x98oj\x8c\x8c!R\x9b\x05\x1d6\xa3)\x98\xaa|\x1b\x88\x95\xe8x\xa1$ nf\x11\xed$\x1a\xecX6\xb2A\x9a\x93\xb2\xff\x98\xcf\x1a\xf1\xc8\xb0\x9aR\xe8f\xb9f\x850\xa8m\x10\x10(\xba\x15\x80^k\x80F\xfeWX\xddx\xe3Tx\x7f\xd5\xbd\xf6o(\xd8\x9fd\xd8\xc16H\x15\x99P\xcfg\xa4\xccFX\xed\x9e*\x90*\xf4P!^\x91\xa7\xdb\xa5\xabJ\xc8!h\xe8[\xaaR\xfd\xc0++\xddc\xd6K\xeb\x9c\xe6\xd0\xb5\x9e6\xa6\xd9\xff\x06\xeb.\x1b\x9b#\xd9\\O\xac\xa7\x8b\x8dj\x9f\xcb1\xca\x8a-uh\xfc\x9e\x96\xdfm\x1d%sR\xcc:aN\xa1F\xf9kJl\xb7\xffU\x8f\x1f]s\xd1M\xcc\x92\xc6m'\xa6\x11\xde.\x9b\x95\xfb\x9d]3/\xcf\xd8{\xf5q7k\xb7mK\xc74\xa5\xb1\x1bv\x1aI\xae\x0b\x85\xf6\x88\xaeZ,\xe4Azh`Ce\xfbk\xe8k\xa2\x14\xbf\xf9\x14G\xa68Xr\xfb=\xd1\x10\xee0\x82\xe7\xc43\xc2\xf7=\x1f@j%\xa9\xdf\xd7\xe6P\xec\x1f9KnNA\xf7\x96'Ga\xe8\xca\x9b\xdb\x99\xe8\xf5\x81\xa0i\xff\xcf\xe9\xfbwc)i\x08\xe67Re\x01D\xd8\xdf\x9d\x83\xda\xcc\x81\xea\xfd\xf9w\x03\xe9\x02`\xe79\x89\xc9\x8b\"\xf4\xd9s\x12oow\x0d\x01Q#\xee\x83\xd6Y\xdc!\xb3$j\xdc\xfdR'\xc3\x1f\xcfy\xb2\x82\x19\x08\xe0g\x9f/\x12\xf5\xd5\xa5\x1ew=\xdeb\xec\xe1\xd2\xb5\x1e;\xcd\xf6,\x95c\xadg\xe0\xe4\xbb\\d\xcbn\xc9*.\xfa\xec\xce\xb5\xe7\xa0\x01\xa8\xf4\xf3u|\x19D>\x1a\x9eO<\x1e\x8f\xb2\x84Ko\xb2\x1e\xa6N\xd0\xaaM]\xa1<\xba\xf0\xc0\xda\xea@\xbfe\xf3Kd\xab\x10`sn\xca\xe3\xe9\xc1\x03\x12\xa0\xdaq\xf8\x06\x13\xdc\xb4\xa3\xaa\x85;\x1b\x88}\x8b\xcc\xbe&\x17\xad\xd5\xe0\xb8\xb1N\x9b4+\xaeZ\x84\xe1x|N\\)'\xe4pG\xa1M\xde\x00{\x0f\xf4\x0f\xc1\x8d\xeeX\xc4\xf2\xc5MD\x11\xd2\xad\xc4Y]\xb8\x1aD\xec4I\xe5]\xa1\xab\xbe6$\x93\x1d\x90\x18\xb5\xdc\xc9\xb8\\\xeai)\x8f1RcK\xb7VbH0\xa9,\xdb/\x91\x0c\xbe\x80e'\xca\xe2\x1a\x1c\xaf\x039\x8b!\xd6\xa3\x16\xf2*x\x03_W\xcfr\xd9\xd4JJ\xf1\xc9&\xa4[\x03E\x01\xb5f\xd9\x81y\xaec\x0d8.\xf3\xca\x8au\xe2\x01\xd9\xda\xaaC\xb6\x926u/\xe8\xdfl\x7f\xda\xb6Fs*\ne\xb1\xd6\x05\xa8\xf4\xab\xa4\xd7\xd66\xed\x1c\xe9\x05\xb6\xc5d\xa5KA\x08\x02\xbd\xb7~\x02\x9a\x06\x1a\x85\xdc\xa3\xed*I+\x1ee\xcbv=\xaa\xae\xaf]1f\xd3n#\x10a\xb5\xdc2C\xe3-\xea\xa0i\xf5\xd32\xaa\xaa\x82>\xdf\x8ej\x0c\xa2~\x9a\xc7\\\xc1\xb0[(3eb*\xdd\x11H \xa99?,\xbbdl\xa2zZ_(\xfc3u\x05\xcd\xe2\xcd\"M\x9dC\xea\xad\x04\x17f5\xce\xe9\xc9\xf1\xc7\x93\xb3\x8b\x97\xef/\xde\xbd?\xbb\xf8ptzzq\xf6\xe3\xeb\xd3\x8b\xf7\x1f/~}\xff\xe9\xe2\xe7\xd7o\xde\\\xfcpr\xf1\xea\xf5\xc7\x93\x97\xce\xed\xbfi\x08K\xeaR\x11\x15o\xb9\x1e\x0d+\xc0\x85\x1f\x94\xe0q\xa0\xf2\xf2^\x0f\x8e\xdf\"\xb3\x90V\xa4\xf6{\x90\xfa\x15\x9c\xe6\xe2\xc7Z\xad\xae\x88K\xc7\x86\x1d\xc8\xaf\x90[\x10\xe9\x9f\xacq\xd3&\xc5 \xe5)Z\xa6\x1f\x92\x8cl\x8b\x92SiN\x01\xd2\xc8\xad\x9d\xba\x9c}0$Y\xb9:*#\x1c\xe2\xee\xd9\xb8\xe9K\xc2\xd0\xa5\x96\x94\x8b2\xf6\xab\x17,d3\x92!\x01\xc4\x03\xea\xd5\xd7\x99[\xbf\xa8 V\xe4\x10\x0c[\xbc\x80\x98=\xb7X@\x08\x90\xc0PDo2\xca\xdbb\xf7OI\xea\x96\xfa\xef\x03\xf9\xd1\xad\xc9\xb0\x16\xe0\xb7]7\xa9\xe0\xc6\x0c{\xf4\xa4b\x8fn-J4\xf7 .\x0ef\xe1\xb9\xe4~\xfa0>rEv\xb36\x80\xda[\xa1,\x8a\x1b\xa5Y\x90l\x9dl\xda\xed\xe5\"r\xbd\x08\xa6$\xefX\x04\xdf\x96\xe8\xb1s\x1c\x06!\x19X\xe8\x9f\x8a\x037\xd7\x01xg\xa8K\xb6\xd2n\xb7\x14\x87&\x16\xf9e9\x9cm\"\xbf2l[\x8b\x14\x12\xa1\xeaJ\x99oU$\xa7\xbf\xaaN\xcc\xe2\xd5\x0ei\xe1\xbf\xc0\xe7\xa3\xb9\xf7\xec\x02\\\xf5-\xaft5\xcd+\xd7r\xa4\xcf!-U\xee\xeez`nt\xbb\xd0\xbcE\xa0\xf8A\x9aoz\x8b\x90\xf6\xbaE\x08;n\x11\xf4/\xfc\xb8\xdap\xb9j\x81E\xc9\xff\xd8\xad\x9e\x12\xd7y6q \x82\xfe\x1fmRp%\xaf\xbe\x1f\xe1w\xb9\x13\x1c\x159nC\xa1\xf7\xbf\x8b\x9c:\xe8\xbe\x1f\xb1\x9c\xf8\xa6fT+\xc5@\x1b\xe2p\xbb\x187$\x07\x9d\x0ed*\x96QnE\xd7V\xac\x85]\xb1\x16\xaa'n(\xc5 \xa1:F\xc9\x8b\x032\xd1\xf2\xb9=G\xf9~ g;\xe7\x03\xe9\xdc\x16\xe644\xb8r\xa9\xc8K5\xd7\x00\xc2\x9b\xe6\xfc4R\xfa\x1efUq\xbc\x94S\xfc_&w\x0f6\x95\xbb\xab-\x9eK\xc9hZ8m\xec\x10Rv\x8c\xfa\xbfD\xfcH7\x92\xfc%\xf5]\xd7E\x92v\x10\xe3\x92\x9e\xc2\x07Z\xda(F%%\xe2\x96\xfc5\xafH\x9d\x1ar\xab\xa8.\xb7B\xa4o\xcd\x15o\x17\x995+\xac\xc9\xc0\xda\xe6\xf1\xb6D\xdbf3#E\xc9Yi\xc1\x89P2\xea\x82\xdb\x8e\xee\xa1\xafY)\xc5\xd8\x90\xfd\xff\x96\x94\xc5\xee.f\xcf\xe4\n\xf8]\x19\xe4X\xda\xf2l\xaeg\xa3A\x9f*v\xc3\xa85\xfd\x90\xf0\xa1\x9dQ\x04Y\xbfv\x90\xd6\xd6\xec\x14\x1cGgC8;i\xdd`\x99\x0dE-\xc5\xe7\xa4\x06\xa9\xbd\x86\xf28B\x17V\xc7\xaa\xe0bU\xd0\x86\x05q\x04\x12T\xd8\x0fQ}M\xf0\"\x9a\xf6d\xdffg\xa5\x95\xbeg\xaer+h_DR\x1d\xca9;\xf9\xe5\xec\xe2\xf8\xfd\xbb\xb3\x93wg\x16G\xacD]1\xc3\xd0X\xa2 \x8bg\x0e\x07\xb8\xcf\xae\xbb\xbcR\xce\xd5M}\x17\\\xc6{UG\xe7\x19K\xca\xfaP\xb8\xaf\x03\xcc\x1d\xa4m14\xdd\xd8\xfe\x8f_\x07\xa7'g\x17o\x8f>\xfe\xf5\xd3\x87\xff\xb7\nH\xdeq\x1c\xdbVCf\xf8\x16\xbc\x1dIp\xdb/\xd7\xcf\xc9\xea\"\xb4\x8f\x1aG\x14\xb5\xcd\x87v\x9c\x809r6W\x89\x19Wz0\xa5\x92\xa0\xb0\x9f\xcf\xe2\x1c\x84\xab\x97V\xe7wp\x0c\x0d\x0b\x973\xed'\x1f(6\xb5\x83\xf8\xdd \xcbn\x90\xb5\xf5\xe6B?\xb0\xe1=\xa9*\xddZ\x15\x0cC}\xcb{\x9d\xe4\x00Qc\xb3\"\xeav3\x99y=\xe8\x02\xf1,\x04E8\xf3z\xa8oIU\xad\x059$\xee\x1c\xa4\xb9su\xe4\x97\xc1cVC\xb2\x1eB$\x9e\xc1@\x86\xe3yK\xb3\xe5xE\xaf\xdd\x95y\xc0\x0b\x80!Y\xd5\xce\xfc\x18|\xf1\xad\x80\xb1h/\xabB:\x95M\xb8(\x11\xe8\x91\x04s\x17CBg\xcbs\xdd\xa2L\xd9B-\xb7\xb7\x07C\x12\x0b\xf2b\xad\xf9|\xed\x81\xc7E\x9c\x7f\x98\x8f]\x7f\xab\x9c`>h\x1a\x03zR\xbaUk\xb2\x89\xf5]\x980\xc2g\xde\xf9\xa0\xcdm>\xf8?\xd2\xe8}^\xfa\x0fi\xd2\xb5\xcdK\x17\x82\xf6\x00\xc3\x7f\x91\x95\\o=\x087<\x05\x9b\xe7^f\xfah\xb5\x84\x9c\xec\xd3\x81bA\xf6vLF\n7\x05\xe6\x92|!\x80\xeb\x96y\x1d\xa8\x98\x94\xf4g\xfb\x9eU'\xef\xdb\xf7?\x9d\\\x9c\xfc\xf2\xfa\xf4\xec\xf5\xbb\xffl9|\x89y\x00w#?\xe3\x1c\xae\xf4\xa9\xbb\x94{\xcd\xae\x11\xaf\xac\xc7E\n\xb1L\xed}\xcd\xeb\xc7\x13\xd8\xc3\xef\xde\xbf<\xe9;\xab\xdd\xe3\x7f\xd7\xfd\xdbB\xa2\x93\xfeT5\xe9IY\x93\x8em\xdbkV\x9bg\xf8-$a\x85\xc5w\x95\xb4H\xd4\xa9b\xe0\x05Qe\xd4\xbbm\xe6Q\xd5s\xcd\xe9\x0b<\xf8\xb0\x19b\x8f\xe1w\xf0\xc4\xde\xfcH\xbaBl\xb6\xf4O\xf8\x9bEt\xedA\xea\xadD\xd7\xa5\x9b'\xd4\xd6W\xb9\x17\xa8\xfb\xe1 \x86\xa7\xae\xfa-8)\xa5\xdb\xbb\xbb{ \x97\xde\xdd\xdd\xad\x0b\xb4\x89\xa1x\xb6_\x1b\xb4\xdau91\x85\xccy\xc7\x81\xbfV\xb6\x1b\x86\x17&\xd60Z$\xe6} \xa8\x89H\xa1\xb7\xb4\xb3\xe7\x82^i*\x89U\xc7FV\xbfu\xa0*x\x0fN \x11\x15\x0f\x81=.N\xde\xfd4%N\x9cp?\x87^ \xe8\xe4\xe7\x93\x1f>\x1c\x1d\xff\xf5\xe2\xf5\xbb7\xaf\xdf\x9d\\\x9c\x9e\xfd\xfa\xe6\xe4tJ\xb6&\xd5F\xd4FJ\x8b\x0b\x9b\xdfE\xa4\xd8\x1b\x13M\xfa\x8e\x8a\x0dL\xb5\x80v\xb9j\xdd0\\?Z\xbc.>\x9d\xcb@\x01\x1b\x88\xf1\xda\xba@\xa1\xc2\x14\xa2U{\xe0k\xd7\xde#\xf0\xe9\xd1y#+\xf8\x9c\x0e\x9e/n\xf1\xbd\xa4\x1f\xd4\xba6\xee\xcd\xf3 \x06\x15\xd8%\xb8\xd8b\xb3\xf8\x1c\xb8\x0d\xbf~G\xda\x8f\x1d\\\x83\xf5n_k\x1e\xbd9@?(p\x97C\xb2\x1e\x0cH2\xae\x07Sq}`\xc3\xf2!\xf8b\xca\xa4\x1f\xa2\x96\xb1\xd3O\x0f\xbfJ\xfa\x91*JTV\x9dT\xa8W\x1f\xdc.\xd4\xbd\xa2\x8a6mM\xfa\xc4(#\x06w\xcd\xdd5l\xfa~\xa5TOW\xfd\xa0\xc57\x16\xd0\xfaZKW\xf5\xa5\xdb\xaf\xbeH\x8a\xcf;\x98Z\xd2\xca\xd8\xb6\xe7\x96k\x9c\x0d\xc8V\xc3\xc7[\x0cV&\x80\xf8\x90\x05.\xcd\xf5\xc1[[|.\x98\xf5\x8d\xa7\x0em\xd7]Y\xdc\x96\x13\xbdj(o\xf1vG\x88\xc5\xe3]\xd4\xb9\xa55r\xc4O\"\xf3A\xc6\x84\xa3\xb4\x8c~\x90Q\xa9\xa4\xd4\xd0\xb1I5\x94\x17|_\x07\xca\xb5\x8c8\xac\x1f?V\x13p+z\xa2\xf3*\xdc\xa2d\xd7PV\xa7\x96\x8bs\xa5dW\xf7\x89\x99*U\xbd\xba#\x80P\xb5\xa5\x9e\xeeU|h\xee=y\\'P\xe68\xe5\x13\xcb\xfa\x1a>9}Y\xdf\xbe\xa2w&\xf5\xea\x96\xaa;\xf5v\xacK%\xfbzO\x05Z\xaa9\xce\x14Xd\x17\xbb\xd2\x07\xc7T\x7f`\xb7\xf2\x97\xe8\xca/\x15H\xcb\xe5rS:\x7fU\xd1 M\xdf\x15\x18u\xc8\xc8\x01 \xc5\xbe\x96:\x89xX\xe8\xc6\x02\x85\xbb\x0b\xe9\x94Z\xaa\xf7(\x12^*\x97Wbf\xd5c\x0d(*B\xf5\xa9\xa2\xb5_]\x82\x17\xcd\xb1\xbbB\xe9$\x8fGi\x96\xe4^\xaf\xebALM\xcb\x88\xf3eq\xf7\xeb\x89\xad\x9c\x06\x19;\xbb\x89YA\xf4\xcb\xbc@i\xc6\xd4\x92\x8d\xd0\x8f\xcd\x8c\xca%l-_\x0e\xdb\x0f4\xf3\x96\xd2\xffZ-?f\x91\x1fD\x8b\xb2\xedH&h\xd6\x80\x03#<\xff\xa3\xf4\xb9\xa5\x15\xeb\xb6&\xb5\xfcW<\xf1\x98\xbc-\xa8dk\xc1\x9f\x18!d(\n\xb9\xa0\xc6|\xb5|\xb5>j\xa9\x80,\xdf'r\xb1\x16C\x9e)\xafOJi \xef\xc71\x0d\xc3K\xea}N\xeb\x1f\xa2ah4\xe3\xe7 \x0c?I\xa4\x0c\xddi\xac\x0c\xabZD[\xe46\xab%z\xbd\xb3\x1c\xed\xe9\xc5\xf66\xbaV\xb2\xd6\x85b'\xdd\xe9\xd0\xb8\xf3\xe9\xaf\x83G\x14\xe6U\xe3\xaa\x14}\n+\x11{!\xcf\xf61\x1ce\xe8g\x0eJ\x82\x0b\x96\xc9\xe5%\xbdl\xb5|\xc6o\xf5\xbeS\x7f\x14v\xd9r\xb7X\x89\n\xc1\xfa\xd8x\x1f\x07)\x04\xbe*f\xb7\xe5lv\xbd\x96\xb6-\xcb!\xd08\xa8B\x08I\xca\xd0F\x13\xfafD\x86%1LV\x97\x1ay\x1f\xf6\xf2eF6\xe8\xf8\x87\x9d\xe9\xb3tl\xb2\xeb\xb6N\x05\xd2\xb8!\x91\x1e\x06b\x1eD\x99-\xa0\x07\xee\xaa^?E\xd4Vl\xa5V\x9b\x83#f\xed\xda>o=\x0e\xc6 \x97\xa4\x91K\x07u\x1c\x86\xee=7o\xd9\xf9\xa0\x96]\xadC#\xa7\n\xdd\xf0\xc1(Y/`2\ne\xaa\xc2\xc2\x83\x016\xbeV\xba\xb2\xc9bo\xed\x808\xa2\xd2\xeb;\x0fu\xdbZ\x0dn\xb9\x1ao\xb5\xf8\x8aq\xd6\xe3f\xa7IZ4_\x83\x12\x83 \x8a\xb8@|.\x96\xe1v,\x87\xa0\xc7\n\x08\xf4\xa4\x07\xe5<\x0f\x86\x15\xc1~\xa1\xaan\xce4\x90\x0543&\xdc\xb5 \x03\xd7\xca\xe5\xbd'\x90\xb78\xecQ\xcf\x18\xa4\xa1flp0H0,b\x08\xe6\xcd\x81\x07a|\x95|\x02i8\xdc\"x\xe3\x93\xb7\x1f\xce~m\xbf>\xb2,hI\x85\xcc\x11\x15\xdeD/\x92*\x81\xbe\x0cB\xdf\xa0\xd2\xb1(\xde\xc8z\xec\x1f\xd2\x8a\x187\xb3\x15\xb1\x9f\xa5\x03\xbd>\xbfi\xf4+\xa2E\xf0\x96ov\\\x02d\x8dmc\x97\xdcII\xbf\x87q\x8c\x0f\x1e\x90\xad\xac\x8d\xa7\xecs\x87\xd0\xc1\x92\xee\x0c\xdb\xef4\xf4S\xb9\xb8, \xbam\xe2\xa0mw\x07\x1d\x01\x05\x08\xe8w\x07\xd1\x9a\x7ff\xff\x99\xd3\xc4g\xbe\xe6\xa9A\x05\x00\xadU\x9a\x93e-!E )\xac\xd6\xf1*\xda\x82a\xd9\xb6\x08\xe8i51\xbf\x05\x1c\xd3W\xba\xa5\xd8\xa2&\xe1\xf9\xf6\x14r%\xdb&\xe3h\x95\x03\xe1\x92\x16\\\xb8e\x93\xb4\x84:p\x99\x8dE\xec\xb3\xe5/V4\xfd\xac\x10U\x9f\xed\xben3\xa7\x04\x1eVuM\xcc\xa3%\xec\x07\xf8\xdb-C \xc4v\xfc\x8e\xf9\xc1\xd6O5~N6 \xd1,9o\x0d`c\xf5\x14\x87\x8dKU\xd2\xb2\xf9\xd0\x18\xe3j=\xf2\xf4\x99\xb3Q\x83\x8c\x93\xa5w\xabL=\xfb\x8d\xa4AM\xca\xc6>\xa5\x81t3[6\x8f\xe8\xe8\x0c\x8d\x1c\x19\xa8\xa1\x0d\xa1VC\xf0 \\\xb5\xf2rpl\xac\xb6\x82\xa5~\xba9K=\x90\x1f\xc2j\xd5B\x8f\xfd\xcdj\x15g\xbe\x1d\x89\x96.w\xbf\x02\xdf\xdb{\x0f\x13\x83\x1d\xeb\xb5n\x80`7;\xd4_\xab\x0f\xf3\x81\xd1H\xaa_X\xf7\xaf~]Q\xbd\xef{\xe5\xceM\xa1\x9e\xe8T\x1b9\xd9\x86\x84\x95\xdeCyP\x011\xc7@I\xaa\x9f\xaa\xa4b\x1f\xe4\xd9\xf0z\xfe\x8e\x89\x0dJ\x93\x9b>\xfb\xb2P\x8e\xc1\xdayH\xe6ME\x80\xcc\xb0\x14\xab\xc2\x0f\xcb\xfb\x11M\xc7\x97\xce\xa8\x0f\xac\xa7\xe1\x97/\xf6\x83\xee\x10\x1f\xa3\xf2;\xd5\xd9jO\xad\\;\x99M\x94 \xb6\x1b\x95>SPk z\x0f\xd0a\xfdI{\xe2\xb8\xc8\xf4\x97 0\xc2\xde\xa6\xa2\xbb\x16\x16i\x08\xbc\xcc\xd6\xa4m1\x17D\xc3\x81\x0c\xd2\x9b\x83\x11\xb8N\x9dJ\xd7[jF\xab\xf7\x04\xc1@\xd5o\xd3\xbeX+\xc7&\x9dW\x11\x10\xe2\xd8\xe6\x1d\x88\xc0\xd5#X\xe5\x03\xeeW\x9f\x1cJ\x17\x98\xb4Ji~\x94\xeb\x1b\xbc\xa6td\xbb\x9e=\xa6\xd9Z\x07\xfe7\xfb]\xe1r\xa1\xb0\xbdGq\x8bw(\xeb\xf6\x80\xf8h\xe3t\xc9\xf3\xb0$K\x8b\xad\x13\xc3\xc4\xa0\xb9\xa25\xf3\xa1\x8c\x82\xacg\xb5\"\n?8 \xd2\x8c\x03\xda\xe5\xbb\xe1\x90x\xb0\xac\xb6|\xf1E\xd1\xa3!\x99\x03\x9f\xde\xbe{\x86$&\x87\x9a7\xeb$e\x01\x91\xd5\xdb\x1aI\x9d\x19\xb8(ab\x17\x81\x95 \xb6\xd5\xc57\x9b\xb4m0$\xb4\x10\xea{\xe2E\xcb$\xe6Cc\xe5\x1e`\xa6=-$\x909\xbb=\xd5O*|Y\x0f)My,5\xd0f\x1fb \xe1,\xect\x93\xb5\x08\xc6m \xcc\xccVii\x11\xb5]dHGo\x0f\x1e\x90\x89r\xa4+\x1d\xc6\x14\x85\x93\xd9\x8e\x85p6\x88\xb1\x03E\xb2\x08\xfc#\n\x88sF~T\xb9\x84\x13\x19\x132%;\xcfI^\xf1\xee\x96\xb7\xfb\xc5^\x1bf\xd9v\xb2\x89\xbbtH\x1c=\xe5\xa6'\xc2\x94\x1c\x92T\xea\xd8H\x8dE\xb9\x1c\xa6$\xbd\x05e\x85\xf8\xbf\xc1\x96#\xbakn\xa1y\xad\xaf\x87\x87\xda\x13A\xdfe*\xb0\xf1\x0f2d\x9b\x1bV\xee?d[,8\xd3#\xda\xe3O\xa8%\x809\xbc(\xf4\x02\xbe:\n\x91\xe0\x90\x845\x19\x81D \xe07\x0b\xc9(\xee\x03p\xaa\xc0\xd4\xe6\xa8\xa0\x8a\xb0@\x15\xd9P\xb7E\xe2\x95\xd0@\x15I\x15\xef}\xac\xcb\x06\\\x18\xe8\xa1\xec#o\xbf2\xc2\x86L\nO\xc2B\xe9Ut\xbf\x1fv\xb24\xe8V\x18\xaa).iEU\xd1m\xc8g\xbb,\xb7\x1d\xc5\xd9\xa4\xd7s\xe2.]\x10\x95\x0f0\xf2URb\xacMP\x9a\xd9\xa4\xc8\x1d\xca\xac\x1a5U%\xa16{Y\xf1 r\xaah\x88\xbb@\xd7OS\x92\x8d\xb9\xdb\xd6Ou\x1a\xbb\xa5\xd9d\x03\x896\xef'\xd1&-\xb2\xba\xd6\x90\xac\x9a\x18\xc4\xc4\xdd\xc5\xfc\x95:1fJ\xcd{E\xdbT\x8bm\xda\xddp8\x0d\xc5\xf0\xfd\x1cdK\xe9]@\x1c\x01!\xca\xa2\x91\xdeR/\xb4\xe2\xfe\x9c+\x1d\xe3-c\x1b\xd8\xd9Y\xf7\x9fy\xb9\xfb>i\x8az\xda0\x08\xeb\xc9\xcb\x14\xc62\xb2\x11\xee\xddZ\xdc\xb7q]4P\x95\x14\x16+|\xd1F2\xe4c\x85\xf4T\xa7[VS\xeb\x95\xafx\xba\xaf\xb8\xd0iA\x06N?_\xc9<\x88h\x18v}\xd9\xec\x05\xca\xf5\xea\xa7\xd5\xf9\xec\xad\xdb\xdf.*\xd5\xdaA\xcc\xd0\x0eb\xa8v\x10+\xb5\x83\x9em\xc8\x16\x0f\xfbI\xb2h\x96Qo\xf9\x91\xcdos\xa2.X\xf6!\xbf\x0c\x03\xafp\x94f\xe9\xb9\xe6\xf2#\xcd\xe5Ov\xda\x18w\x194\xa7w\xedn\xa4\x14\x99\x0e\x0e\x80=\xd3\xaf\xe4\x8f\xaf@I\x8b\xb7\x81\x0c\x04\xd7\xcbv\xc7g\xc8\x98\xd8\x06D\x05\xd5\xb3\x8d\x07||\xc6\xce\xfb|W\xcdl\xdf\x8d\x7f;\xe1s\xf3~\x10\xcc!*)\xe3B9\x86[\xdcQ\x15\xa8\xae\xa6\xae\xa6l+j\xa9\xacPbS\xf9\xfa\xb5\xaf@\xaa1\xb0\x1b\x8fQ/\xcc\x8d!L\xedc\x02\x96\xf0\xb4\xdf\xa6\xb2\x93\x19\x88\xcd\xaa\xc56R*X\xdd\xc9\x96a\x82\xd7l\x1d9\xcd\xb2no\x17\xc9_\xef\xde\n\x94\xb1<\xbdY]rp\xc7*\x7f\x8d\x057\\ys\x9dD\x8c\xdc\x98\xc9U\xed\x00\xba{\xb23\xd9\xd9\xc3{\x95\xfc\xb3Z*\xa3s\xf2\xa4:\xed\xe0W\xf3\x7f\xffo\x9dy\xeb8\xcc*\x04\x0c\xa8\xe6\xcd\x92s\xd8=3~^\xc3|\xe0\xb3\x1dkmy\x01X\x0f\x0cp\xab\x91i\xb1\xb2\x95V\xb2\xcf\x1b\x9d\x90F4\x9b\x19\xc7\xf2\x0e%;0_\x12CR\\Y\x19\xc1\x12\xda\xf6?\x18/\xb53^\x86^\x0e\xb7\x9a9\xed\x0c\xa5\xa9md\x1a\xdf\xba\\\xda\xddvG\xb8\xaa\x0e\xd2\xbf\xca\x04\xd7\x16\xdc\xd5r\xda\xe3\x96\xb4\x08\x02m\xbbS\xd6(\xc5\xd57@-\x8e\xd3\xbf\x891\x17\x1eb\xe4I\xdd3\xba\x0e1\xf2\x14\xb1\xe6*\xcd\xad\xf6'\x0d\x07\xa79x\xa4\xaa~\xbai\xd9\xacd#\xd5S\xabb\x1e_\xfc.6E\xd8D\x12p>%L9\x8f\x0d~g\x10\xef\x97\xaa\x1a\x87:_\x90\xaag\xfc4\xa3Y\xe0I\x1e\xca\x10\x0f\xe5);6\xa3\x19\x9b\xf2\xd0\xbc\xb4NP\xea\xe5\xb4\xd5k{\xd3\xdd\xa9\xe0\xe2\xcb6)\xe5\x8a\xb4\xe3\xb4V\x8b\xa4\xea!\xa8v\xac6EN\xfd*M;*5\x0c2\xfaUX\x1f\xa8\xb6\xfa}\xa6\xa9\xa8\xda\xccW\xc1J\xed\xcfV0\xad\xe6\xd9\xb2\x8a\nP7,\x0d \xc03\xaa7\x18\x12>\xa6\xbe\xff\x81\xf30\x88\x16g\xdc\x0dk\x18\xe1^\x1c \xef\xee>2\x10\xbfD\xfa&\x14o#@\x8a\xb5\xcf\x9a\xe7\x0d\xa9\xc5\xb8o\xe1Q@\x15\xc6eD\xd3|p.\x0eH\xb6L\xf8\x15\xacjA\xd8I\xfd_\xe7\x98F\x11\xcf\x88\xc0<\x84\x12/\xa4iJhJh\xf1%\x07\xc1\xee\xea\xd6\xb8\xd0\xb5\xca\xca%/\xce\x83\xea\x92\xa8\xce\xa1\xa6\x9bM\xf3\x14X\xd3\xac\xdb\xe6G\x9b\xbb\xd4\x10\xfb\xb0R\x9dB5Z\x81\xaa\x8e\xe9-\xf2\x97z7\xc6A\xfa:\xaa`\x17\xe0\xdc\xea\xb5\xe3\xb2\x19\xbcE\xd5k\xb2\xf6\x9en\xd8\x1c\xa3\xea\xba\xc3w\xbc-\xb5\x0b\xa1\xceU\xb5a{\xcc\xea\xdd\xa6\x1e\n\xde\xa6S\x96}\xab\xf6\xe8\xaa-m)1\x88\xc9a\x9b\xa8\x81\xdf\x07j\xb0\x9c\xc5\xfb\xb6\xb3\x189\x8a{\xac\x1a\xe4\x0e\xb5f\x87\xfa\x8e\xfbu\xa5\xc5[\xdb\xad\xfa|%\xf5\n\xab\x83jbbjb\xe2j\xa3\xbb\xcd-\xad\xbeb\xa8\xbc\xa0\x08\xfcc@\x1e\xc9\xf6v\x93\xf8\xaa6\x91\xa2\x9d\xdd\xd4\xf0R\x0b\xec\x1d\x02\xec\xd9\x88\xad\xe2\xecfJ B\xa5\xf1\xb9m\xe2\x10D\x0bW\xfa!\xa8\x93 m\x14|*\xfb\xc9\xaf\"\x96\xbc\xe4^\x0e\x12\x0e\xe55\x89\xaf@HfSb\xd06\x0b\xe38a\x1e\xf5\x96\xacP\xe5\x967P\xdcEn1\x9b\xf2\xc0\x9aT\xb7FX\x1d\xca0^\xceo\xd7{\xde\xd6h$\xc6!\x17\xbd\x1f\x8d~\xbb\xdecNm\xaf\xd5\xce\x02\xab\x8eW\xf3\xf0\xef\xaf\xc4^t\xdb\x1a\x04\xba\xadQ-\xda\xea(\x930\xce\xa3\xea\xd8\xd6j/qK\x8d\xda\xa0\xf7\x82R&\x15b\x03\x0f\x1b\xc0Q4\xea\x14\xb8\xc0\x01\xe7\x19J\xd0\xba\x07\xd1]j\x99\x99\x91Y]k\x86\x07\x0eP.\x06\x86\xf39\xe1\xcfI3\x80\x1d\x89\xea\x9b\xb4\x12\xb5{G\x1a\x03e\xcf }\x0e\xbfh\xb5t\x80\x96~N\"2\"\x01\xf9\x9e\xec<\x1f\x80\xbc\x8bU\xaf\x91\xa2\xd1\x08-\x16\x90\x11\x89T1@\x04\xd5b\x01ZL\xef\xfe\xe89\xc9G\xa3\xe7v^\x1dB\x02\xb71\x8dHK\x1b\xad\xb0\xac$R\x15\xa5\xff\xa9 a\xae\xb3j\x0b\x83\xf4(\xf2XZ\xa5\xc8m\xa7\xacm\x89$\xc9lr\xbe\x89\x96W\xdb\xdc\xf5gIk\xea\n\x06\xea\xb5\x88\x08\xda8\x07i\xe8\x88\xec\x0e\xbcS\x05\xd1\x01*\xf1v\xa6x\x1c\xb1\xeb\xec4\xb8\x0c\x83h\xf1\xdcJ\xa7\x93\xda\xc5X\xa6\x14Z\x9e\x14\xd6q\x12\xe9\x0e\x86d_2A\xe3H\xab)>x@j\xf8\xcc\x80\x90\x11\x0d[\xbeJ\xcaE\\\xc7 \x16c-\xfd\xb4G\xe0\xb6;\xd3\x94\x04\x981,=\x17\x8d\x9e:A\xe1U\x0fx\x1c\xab\x9d[\xcedVWa\xba\x9b\xa8\xe2vD\x81\xc0\xd0\xb7\x15q\xdc\xcb\x85\x8aEj\xfa\x08'\x07\xf1\x1bL\x19h\xb1:x\x16\xef\xcb\xfafqJh\xf3\xb0\x15\x83\xd7\xb5\xd7 (\x02\x07)\xd8\xce\x04\xd1B\x85M\xb4\xb8\xa0k\x9b_Qfv\xdb6\xf2\xf1<\xcc\xd3%\xb4\x82)-\xf4T\xaa\xa1\xf3\x86\x04Gv%+\xbb!e0\xc9`\x08\x85A\x17m\xee\xd6<\x91}%W\xcb d\xc4\xadKT\x8cX\x82 \x97\xe1\xe4E\xa5n-b\xe1 \xa1\x81\xc5Qd\xce\xf8\xf9\x90,\xc7\xcaC\xd7\x99\x9a\x03\x97U\xa6C:\xb53\x87j\xd8\x18;\x1c\x17\xc7v.\xde\xa6\xa9\xd1\x18&lu\x18$Du\x81\x18\x19\xf5\x01h\xde\x19\x96M\x06n\xb1\xa2\xaa!\xf8\xc5qv\xc5\x8f\x92\x05\xf0\xb5\"\xa7\xe2dx\xad\x1c\xefW\x1b|\xc1\"z\x192\x7f*0d5\xa7:\xc4X\xdc\x95\x9f_\xbf{\xf9\xfe\xe7\x8b\x1f\x8f\xde\xbd|s2%\xc1\xd8\xa3\xd1\xa7\x94\xbd|\xff\x96\x1c\x92\xab \xf2\xf9\x15\xc1\xca\xa5,\xfb\xb1Vy\xbb\xe4\xa81\xe1bQT\xc7\xa6\xf1\x85\x13\xdd\xb1\xce\xaa\xd5\x10\x88Sb\xab\xb5\xd6 mV\xdar\xfc\x96U\xb7U\x9a%4\xfeAJ\x1faQ\xf4\x13V\xeb\xdb\x0drH\xf8X\x06\xf0W\xb1\x89\x96\xa0Z-\x0e@\xa8N\x124r\x99\xb1\x81\x16\xd7v5\xe8X\x892o\xdb\"%\n\xbd\xaf&\xadx\x14d<9\xf5\x12\x1e\xca\x88\xe8]\xd3\xaaQf;\x94x\x98\xeb\xb9r\xad\"\x8e\x9b\xbeV\xdb\xda$<\x8a\xc1\x97U\x0c\x89\x93B#\x1dD\x8d\xa2\x8aN\xcc\x11\xe9)\xd3(\x17T\x1b\xd1$0f\x0c\x86\x06\x02\x05\xb4\xc6\xeei\xb7\xcfI\xc7U\"\xce\xf5\xedr\x81\x1eF7\xf18a!\xa3)so+\\(\xde,$\xd7\x12RoEr\xf5S\xc1.\xc4`?K\xe4\x067\x1d\x86\x0eY\x91q\x88\x8c\x03\xc4\xc5\x8a\xe9\x82\xfd\xf2~>O\x99\x0c\xd82\xf6\xb5\xc6\x82\xfe\xa1m4\xe4:z\xc3\xe6\x88\x00\xf5FW\xf5\xeb\x06U\x9d\xf1\xaaX\xf0+\xc1\x82\xceC+;\xbfm\xa9\xf1O\xd5_\xb7\x9a\x89\x92\xf8\xdd\xaf3\xaa\xea\x9acb!~\x1b\xd7\"\xed\x81\x16\xf6\x9e\xe0\x91\x16&\x8f\xeb\xf5\x84\n\xbe\xde\x1e\x0f\xa7\x97q\xbe\xc9\x10B\xd0q\x10\xfd7\x83qi\x8e\xef\xcb\xf7ou\xfc\x8d)I\xda OVqvcT\x9b\xb7\x02\x0b<\xf3!\xcc\x17A\xf4c~)\xb8\xdf~\xc0\x9f\xb2 L\xc5\xd9\xde\x05~\xb2\n\xb2\x8c%S\xf0\x9bg\x05\xfd\x11t\x88\x8a&\x87m\xb0\x05\xef\xe8\x95P\xd5\xf5\xf6/\xe0\xbc\x1e\xd7\x99\xa6\x00g\xb1\xa8e-\xa9\xb5\xf7\xb4\x9e\x9eV\xd4\xc8'\x8f\x9e\xd6\xd5\xc8\x15\x17\xb6[\xff\xbe\xd7-\x03\x01\x8e\xe0\x94\x85r\x08_G\x82\xd9\xa5\xf8\x98+\xd9H>N\x80\x16eE\xa9\xea\xc0c\xf1\xb9\xcd/v\xca\x7f\xb4\xbc\x97\x8e\x0b\xa2\xaa\xc3&\x92\x8eK\xa2\xce\x85X\xe3\xbd\x0c\xad\xea\x02)+\x1dP\xa9\x1f \x94S\x17D\xddu\x04\x94\xa4\xa8\xa2\xb0.F\x9da\xc6\xad=:\xb6\xd1w\"\x9e\x05\xf3\x9b\xa30\xc4\xbeU\xed(*\xf8B\x98\xfbv\xc9W\xbb\xe5Aa^Pk'\xa8Q\x94\x94Ldx\x99D\x8c\x14\x0c-\xd5\xca\x86\x8e\xef\xd5\x06\xc1\xab\xad\x83z\xc5\xb7\xb2A\xc0:\xdf\xf1\x9d\x8d\xcd\x12Z)l\x9b\x81\xc1&\x0d\xae\xf8\xa8n\xfb\x18b\xa6`W\x18hl\x11\xed\xca\xba\xa1\xc6]y\xed\xcd\xae\xf3\x82,\xc5>7\xb0.\xcc&\xcfR.\xbf\x12\x91%\xee\xdc\x14)\xa4C\x12\x0f\x86$\xa8\xf2\xee\xf3\xba\xe1\x15\x14\xbf\xe3\x01\xd6\x90\x05*]\xea\xddz\xdc\xa7@\x1dl{\xa8\x18\x8f\xb6h)\x94\xd78\xdap[*\xa8%\x96\x8d\x98KO\xe6\x85\x90\xe0\xc1\x03\xe2\xa4\xfa\x80\x01\x85/M\xb9\x8a\xac-\xd71\x8f-\xc8W\x8cZ\xf3\xe8l\xce\xeb\x82e\x928N\xa7$'\x87=N\x00\xcd3\x16tt\xd16u}\xff\x91F\x8b\xd6\xa0,`\xdb1\xce\xd8u\xa6d8vP\xb8\xb3\x1d\xfby\x1c\x06\x1e\xcd\xac\xd7\xb5 \x84\xaa?\xe3\n\xcb\x9dI\xb7\xa6C\x92\xc8\xd3\xca\xff\x00\xbb\xcd9\x89|@\xaaI\xe6\xd8\xb9=-rK\xcc\x16\xb6\x9e\xb9-\xbc\xa1\xf8VC\xed\xcf|X\xe4OA\x03\xa5\xe9\xf7\x95\xe0\xcc\x1e\xe9\xc2\x07\xc4\x98$\xb9\x12*\x84\x8dX4H\xb2mh\xe5-\xb1`\x9dv\xd4-k\"\xe6\x174mz\x86\x05\x95\xf3M#o\xc9!\xdep\xd7tKH\xb9,\xed\xb0\xd2\xb7\xc1\x9c{y\xda^iP\x02v\xd5\x99k\x7f \xb0\x86\x8f2\xd7\xe6\x91\xb0]$\x90\x8fa\xe2\x0b+\x80\xe2\xeazH\xf21\x8b\xfcf\x06>\xf9:XC\x9f\xd8=\xa8\x07\x00\x82.!b\x98\x04P\xb723\xf5\xd1\xaf\x8cpu\x14\x07\xe4\x90\xec\x10A\x04g\xfc\x14\xd40\xdcA\xe7~\x0eA\xf2\xee\x85<\xd2h\x02\x1f\xdfPa\x15\xf1]p\x06\x12e)\xec\xe8P\xedh\xb7>\xc6C=\xea\xaau\xf6\xe5\xe8)\x0d\xa7z\xf9\xd0,/^\xcd\x99R\xef\xd5\xae\x87\x9bt]\xf0\xbb\x1e\xd9&-\xee+c\x13\xadV\x90)\xde\x9bX\x0c\x06\xe03W\xb94\x8b\xf5\xf0p\xbb\x03#\xad\xd2\x14\x8f=\x1e\x864N\x99%`k_\xf4\xe6\x8bs\x83L\x89\xd7\x81\xe6\x04\x9c'\xd0W\xcfu\x8a\x90\xf3\xa9\xf5\xb8\xear\xb52\xd4\n\xcb]\xe7V\xf7icX\xbagbQ\x90CIL\x00\xf2\x801!\xd3\xe2\xd7\xf7\x05\x8c+\x01X\xe4\x0f\x15\xa2\x03\x08\xf0Zi\x94\xd5\x99,\xf2\xc1\xd4\x14?\xd9d\xba\x9c{\xc7[\xd2\x84z\x19K\x1ci\x19\xce[\x8e=^\x14\x16\xcb\xa4R4!\xa3\xa2\xb8\x18\x1a\x8c\xeb!=\x84\xb0D\x1d\x1b\xc8)\xd3\x86\xc8\xf4Q\x81\x1eN\xf6\xa5E\xd4\xb9\xc1f\x81;8\xef\xdc\x86DI\x1d\xde\xd2l9^\x05\x91[\x0e{\xc7G\xf2\xaa\x93\x03=\xad\x94L\xcd\xca\xe4\xf4\xb6\xa9\x95\x89\x035\x1a\xb3\xebL\x94\x7f\xf0\x80P\xf2=i\x0d\xc7C\x0c|\xdd\xe2\xa0\x8d\xa86Ri\xff\x92Z\x01\xed\x9aJZ9\x15\xb4\xd6i\xc7xx\x1a\xd0f7FTo\xc1\xe9\x87\xd7\xa7\x87\xf3\x0d\x11\xa0~\xe6%\"\x0c\xe1L\x15\xe8\x9aK\\=\x04\xc7Eb\xc1\x1f\x85!\xd4\x96\xba\x10/\xe8{\xc0 n$\xb8\x0c\xf9\x959\x00\xcb\x99q=U\x91\xa7+\x82\x8d:\xd7\x08\xb6\x91-\x8a\x1a5\xe1\xc2{b\x1d\xfeN\xb1>.\xc5\x93\xb3\xbc\x11\x13T$\x17\xdcKbWB\x00\xe1\xfdx\x1e$\xa9t\x91_(\"\x18I\x95\x82\x9a\xdb)\x12\xb1\xdb{n\xff\xa0\xdd\x16\xca\xd4\xa0+\xf5\x1a+\xea\x86\x8d\x82\xb2\xad\xa5\xeaCuH\xff\xd4\xfc\xd5\xdb\xb3G\xc5`-\x01\x9cl\x18\x9f\xed<'\x91\xb5'{\x92\x13,\x88\xbf6\x1cJ\xc1i\xed6\x89\x80\x1bQ\xa4\x90Fr$ /\x94\xea$%\xdf\x9b\x86b\xf6\xad\x16\x81\x96)\"\xd3\xd4\x8f\\\xceS\x92\x91\x11\x12\xa6\x8a\x90FHi\xfd\x04\x851b\x05\xb8\x91\"\x07\x8c\xbb\xd1\xe0\x9b\x9a\x7f\xec\xef\xedX\x8c\xb0\x8be(\xd5\x9c,\xfc\xfa\x96b{\xb6\"\xb0\x01WVe\x11$%n&\x13\x137\x1a\x14\xfaR\xc6:\x13\xb8\xc2\xf1$\xf1\x98*\xbb\xb6C\x88f#\x93D\xb1)\xd9\xda\x92\xf1mhR(\xda\x7f\xe0i\xa0\xb9\xb4\xad-w\xf2\x84< V 1\x84\x0d\x15\x8d;\x0f\xdb\xa4c\xd8\xac\x17~\x80F\x1e< {\xe0\xe9\xa6\xc9\xdb\xdc\xa1}\xfd\xda\xa1\xb9^\x97\x899\x19W\xec+\xe0\xf2\x8fL\x8b\xe3e0\xf6\xd9\x9c\xe6a\xf6S\xc0\xaeD\xa6$;Pd\xb6\xe5nI\x17\x83\x16_Qc0\xba9\xac\xder\xaa\xd4)\xeak \x84:\x118D\xaf\xa4W\x95\x9c\xa5v{\x13\xe0\x1d]\xb1\xfb\x9dwg\x99e\xf1\xf4\xe1\xc3\xab\xab\xab\xf1\xd5\xde\x98'\x8b\x87\x93g\xcf\x9e=\xbc\x0e\x83\xe8\xb3\xd3\x94\x90!\xf0\xbf\xbc}#\xca\xec?\x8c\xe8\x8a\xa51\xf5\x98\xd3\x94\xa05\xf1\x12\xf5<\x16e?\xb2`\xb1\xcc\xa6\xc4\x91\xaf\xa3%\xbc#>\x9a\xa8\xe7\xe5\xab<\x04O\xd6;H\xb6\xef\x07Y\xb0\xb6d\x86\xc1\"\x12s\xff\x03MY\x18DL|O\xa7\x8d.U\"\xf6\xd10\xe4W\x1f\x19O|\x96@\x99\xf2\x15\x85\x8e\x97\xf4\x92e\x81\x87\xb7b\x15\x87A\x96\xfb\x966&\xf42\xf0^\xf1d%>\x04/\xa39OV\xd8wR\x0fn\x07\xb1Z\xb2, .\xf3\x8cI7\x88N\xe5\x1d\xabJ\xe7\x8b\xa5g\xc2\x8bw\x0c>\xcf\xf8G\x06\xc6\x92\x02\xba|\xc3`\x7f\x0fVy\xb6D\xdb)\xc6\xfcU\xc2\xfe\x91\xb3\xc8\xbb\x99\x12\xa7\xf2\x8e\xd4%\xf2?$|\x1e\x84LA\xab7\x0b\xac\x98\xcf\xd3e0\xcf\x14\xb4x\x1f\xa5\"\x01+p\xc9\xaf\xf1V\xb2E\x10\xe19\x01M\xf1\x8c\x1b4\xd9\xa3\xa1\xf7\x16\x0e`G\xffD\x1a\xe2\xd1\xb8\xd8\x0f\x1e\x8d\xed\x9b\xc1\x0b\x83\x18\xffN\x18\xc4\x1f\xa8\x18tG\xfc\x1c\xc54[Z\xca\x7f\xcca,\x01,\xc9\xd1\x91\xd4\xb5}\x8a\x02\xc1w;\x95w\x0c\x9e\x87\xb3#\x1b?\x98\xcf\xf3\x94\x1ds\xe9\xabsJ\x9cZ\n\xd2\x1b?H$go\xa9\x11\xbc\x9eZ\xf2\xd6\x81m |\xbe\n\"Z\xc1\xef:\xa9\x0d\xbd\xfb\xb9\xa5:|\\}\xbca\xcc_0\xb5\xb7\xf5O\xe4[,dkj\xed\xb8\xd4[\xfb\x81z\x9f\x17 \xcf#_\xd4\x05I\xa3\xcb\"\x0d\xab4\xc2'U\xd0L\x91m\xda\x04\x9b\x9bD4\xfc\xc8R\x9e'\x1eK?\xb2\x7f\xe4A\xc2\xe0\xa3\xb6<\xe4\xe3\xf3 \x0c\xd1\x0f\x88\x8c\xf71\xf5\x02\xf0k#\xdeF\\\xbeZjQ\xa8\x08 -\xa8H\xeew\xdb\xe72\x96|d\xa9\xacB\xfe\xb6V\xa1q\x99\xf1\x86\xc1\x86\x9c\xfb\xc7\x02\x13\x08P\xf12\x02\xbc`\x035\xba\x0b\xc0-\xfd\xe5^\x9e\x8a\x99\xc5\xfb\xc2\xa3\xec\x15]\x05!T\xc5\xa3l4\x877\xb4\xa2(;\x05]\n \x98\x06\xbf\xa3\x03\xa7\xc0\x8e\xfc\xff\xce\xd3\xcc\x04\x1eQH\xb2\x95\xc9\x12\x96y\xcb\xa2\x80|\xb5\x02\xdf\x84eC\xc4\x8b\x05\xf0'\x9a\x04\x12U\x00\xe8Z\xbeZ\x80\x7f\xd6g!\xc0^\xd9\x0eC\xa9\xae\x83\x0fg\xc2Wx\x06\xbe\xc3\xe7\xf8\x0e_L\xf0\xe4]<9\xbc\x89\x97\x8a\xfe\x82\xdf\xa3\x08'\xbe \xf3}\x12\xb0(\x03\xcc\xf0#O\x82\xdf\x05\x9f\x18\x16%y\x99;Z\x16\xd9=\xea\xfa\x89%Y\xe0YjZ\xabL[=\xe0\xb8\xdb\xd1?1\xa8\x84\xfa\xa2:\xd0\x12\x99K\x9a\xb5\x91\xd6RNo\xc2\xca;\x02\xbf\xa4\xd1\x02Ned\x98a8\x8e\xfc\xf5/S\xe2\xc0\xef\x11\xf5\xd7\xa3k\xac\x16\x91\xfb> \x16AT\x02sxG\xe1\x03\x9f\xf1EB\xe3\xa5\x85\x90\x0fVt\xc1L\x92\x01\x12ZI\x86 \"xU\x11\xbe\x86\x80\xd8\xf1X\x8c/\xeb\xcfx*\xbeJ?\xe3_\xf8\xbc\x87'?\xc2\x93Y\x12\xb1\xf0-\xcd\x92\xe0zJ\x1c\xf3\x15\xe9\xad\xcc\x16\x93\xfa\x06\xe4UE\x892\xc9R\xca6\xd9\x9f\xd9\x0d\xdci\xa4P\x95\xfa\x8d\xd6qs\x1a\x8b\xd3^\x01\xaa\x17\x1c\xf2,Xi8\xf8\x89@Iy[\x81;\xcdW\x14:\xcbXr*p?\xac\x0b\xf9>Je\x02V@\xa040\xa6\x95'\x8d~\xb7\x1e6`\x8f\x0e\x05\"v\x14-\x00\xe96\xd2\xb0r\x1cp\x012\xb2+\x9a|f\xc9 \x90\x1c\xf2\xf7\x88\xa1\xb4\x86\xcc|\x1b\x18\x80\xab\xc0\x0ex*\xaf\x085h*o\xa1,\xc0\x05\xd7c\xbeZ\xa15\xf60\xde\xac\xb0?\x07>\xac?\xe3\x0d\x85M\xf1=U\x84\xcb-qV=\xc9R\x9d n\x87\xcb\x96lE\x15\xa2\xc6>\xcf-\xd2\x82(_\xbd\xf72\xba\x86\xf5[\xbe \xdf\xd0R]\xa4\x12\xae\x89\x164O\xbaa\xc73\xa5<\x04\xcd ld\xa7q\x00\xd9\xf2m\xdc6_\xb3d\x1e\xf2+k\xa6\xd8\xe4Z6:%\x8eN\x1a\xc5*\x0d\x1b\x17\x05s\xb6\x0c\xbc\xcf\x11KS\xb3\\\xa6\x13\x91\x821\x0d\xa2\xec\xbd\x92\x08\xc1\xcb\xc8&\x10\x8ai\xc4S6\x018\xf1k4A\x81\xb2e\x81&\xcb\x17\x1cRP\xe7\xb5\xf5\x88\xa4\xda\xcb\x9a\x07v=\xc9^\xaa\xf6)\xeb78\x1c[\xa0\xee\x0e\xe0\xf2}\xc4 \xc1V\x00\x97\xa3\xc8\xac\xa3\xec\x17]\x8f\xf8m\xad\xe2(\xfb\xd5\x80\xfb\xb5\x05\xeeo\x06\xdc\xdf0\xb8\x84\xa5,Y\xb3\xa30^R\xf0\x1bo\xbc\xb7\xc1\xa71\xf3\xb2\x8fby\x9b\xa5\xcaT\xb4,`\xee5+\xc6\xb7\x92\x80\x94\xc07\x9d \xa2r|\x18\x136\x17#(\xfea\xd5\xb1\xf9\xaf2\x17\x1b\xb2\x82\x9ey\x0d+\x0b\x00U\n\x08cP\xba=a1\xa3\x19(\x89A\x81\xe2\xcd\n\xfbR0\xe1N\xf1\x1b\x85\x93<\xe8\xc9u\xc6\xa24\xe0Q\n\x05\xea\x89-%_1\x9a\xe5 3\xcb\xe9$\xb4\x94\xd2oA\x074\xcdCK\x16\xcflR\x94\x04g7\x12\x1c\xf7\xa6\x1e\xb5\xb0\x87)c8\xc3\x9f.i\\!I!\xa1\x95$MC\x1e[\xbe\xa2 \x184\x8fyyH\x13C\xe8SO\xc2\xbe\xa5@N\n\xb9\x84SO\xc2K\xd9\xba\x1b'\x8c\xfaoY\xb6\xe4>\xd4U\xbeb\xf5\x94\xda]\x02\xb8|Ca\xfd\x97l\x1dh\xe1\xa5\xf9\x8aB\xb3\x15.\xe0\x169kKN\x90y\xcb\xb3 \x84\xe5h\xbc\xa1\xf5\xf3X\xd3\x86\xe2\xb7\x95.\x14\x99\xa5\x0c\x02@\xed\"\x884K\x82\xcf,[&<_,\x8dc\xb3\x92\xdevvV\x00\xcd\x03\xb4ZC\xdb)*o\xb8,\x03\x94\xf0\xcf\x96\x95 Y/i\xba\xa4IBeWE\xca\xc8\xd7I\xf8\xa7T!^\xae\x81\xa2\x14\xb7\xaf\x04\x01\xf3&\x88\x98G\xe3\xb2L(\x13Z\x0b\xfc7\x0f\xa2j \x91b-\xf26\xc8\x04\xdd\xb1\n\x8c\xa6\xad\x8a4k1s\xbe\xa1L\xeb\x8c\xf3\xcfL\xd3\xc2\n\xfc\xcaB\x0c\xa7y2\xa7\x1e;\x95X\xc81_1\xe8\x1b\xb1\xd4\xdf\xd0h\x91\xd3\x05\xc0W\x12\x90\x12\x19\xbd\x0c\xa5\xb7&\xb1d\x8c7\x146Y0 \x02\xd4/+\xcc\xaf\x05\x0cv\x96e\xec:;\x02\xfdV\x01\xc6\xae\xb3\x91\xd4v\xb5\x80\xbed\x1eO4\x0e\x00p\xbfH\xb1\x141\x91/\x94h\xc3\xbd\x02\xa0\xa0\xf9\xca\x17\x0c\x92\xa3\x1b!+\xe98$7\xc7%\x019. \xc8E;k\x14t\x91\xd6\x86\x06\n \x13\x05\x94%\xdb\xb6\x7f\x1e\x05\x9e\x8d\xb7Qy?\x04~\x00\xf5\xc1\xdb\xe82\xf0\x03{E\xa0|e@\x83\xaa:\x0e\x9e\xa5\x1fXr\xb2\x92\xc0Y:\x8a\x05\x85\x8a\x11\xbf\xeb#\xe3>\xd7Y\x8f\xca\xeb]\x0c\xf8G-\xaar\xd6#%\xb6\xc2\xc0^\x9b\xb2%g=2dM\x18\xf8\xdb\n\x87\xe8\xacG&\xcb\x88\x15P\xdb\n\x19\xd65\xf32\x9e\x9c\xcc\xe7\xcc\x13xF\xbe\x8e\x18\xbcc5\xb1$\xb5\xb1jk\x96dG\xfe\xfaW\xa8&\xc9@\xf0\x86\xa1\x1d\x91Y\xca\xdd\x00\xb4E\xecVB\xffZ\x83F\xeb\x0e\xd8\xd5\x0f\xfcZ@\xca_\x16\x983\xc0 \nL\xbe\xa0\x90ip\x19\x846n\x18P%>\xacW<\xf1K\x89\x8fxk\x91\xf7\\% \xa9Q\xb7E\xeam\xb4\xc2o\x8cp\x9a\xf1\xba\x90\x95\\\xdb\xef\x87\xafq\x04p\x8d#\x80\xeb\xe3%\x8d\"\x16J\xad[@\x91\xf5$\xec\x1ba\x10}>\xf2\xb2\x1c\x88^\x07^\xa7T\xbe[\xc1\x13/\xe1\xa1\x01.\xdfm\xe0?& \x88\x96\xb0\xcb\x04\x15EC\xe6G\xb3\xd2\xb6\x1aO\x97\xfc\xaa\x00L\x97\xfc\xca\x06x\x16dF\x95\x99x\xb3\x82\xca\xab\\\x05\x89_\xe2^\xaf\xc2\x1f\xc0\xd3\xb6s\xbd\n\xa7\x97\x14U\x98\xb8^\x85\x11\xbe\xc8 \xe7\x17\xf8\x00\xd4\x10\xa5SLAG\x81\x8a\xb3W})\xa4\xe8:\xbc^\x85b\xcd\xea\xf6`J;D\xfa2@\x1as\x83/\xae\x1b|q\xdd4\x17W= \xf9\xf2\xefh]\xbfs\xbe:\x8a\xfc\x0fT\x1cQ\xe5K\xab\x7fT\x8a*\x1f)\x17\x02\x81\xc0\x95\xf5@\x11Dz\x1982Ug`\x84R\xcc!\x04il\x85\xa4Y\x1dil\x806 \xb9\xec\xdb >v\xd6!\x17z\x1b\x84Z\xe1\xad \xb0\xb2m\x10zI[\x8c\xdc\x8a\x85h\xcfWk\xb0WH\xd9\xc6\x8cL\xcd\xc8]\xa4\xaa\x9d*#\x02\x8e?\xb3\x9b\xd4\x0d\x06\xe39ON\xa8\xb7t\xed\n\x84t\\\xae\x08\x19\xe7vgH\x02\xf1\xeb\xc1\x03\xe2\xd2q\xe3\xeb\x12H@\x18\xeax\xdf$@\xc7N\xddu\x02\xc7\xedW[\x82\xfe`\x0e\x15\xa4\xa3\x85Guk\xd7T\x81\xef\xe2>>\x1e\xe3>>vw\xeb\xd5\xcf\xc16\xbdj\xcb\xaa50\xdf\xea\xf8\x05\xa69k\xc3;\x8b\x80\"/\x0e\xc8\xa4\xe6=\xb1i\xaeN@2\x12\x02]\x83o\xd0xIS\xe6\x7fd\x8b \xcd$\x15\xaf\x97\x10\n.\x1e\xe5\xf1~J\x1c\x1eID\x85\xa0)\xfdh\xd7\xf6\x06\xb4r\x11\xe5\xa0e\x90\xf5M@\xd9&\x16LC\xe4\x01^\x9a9\x19\x8f\x7f\x08\xf3\xc4\x19\x12\x07\x04\x01\x10\x1b\xfb-\x8br\x95\xf2\x8a{y\xaa~\xff\x95\xdd\xbc\xe4WQ\xf9\xf6)V\xbf\xdf\xf2\x06\xe8I\xe47'\xab\xa9\xa2\xbf\xa1EV\x8b\x05q\x87\x0b\x12\xfbf*\x0dM\xa7=\x0d\x82Mc\xd4io\xd3\xe0\xc2du\xda\xcfB\xd8\xb0j\x9dV\x8d\\\xf1m\xdb\xb17\x88\x1a\xed\xa6\xa5a\xab\x85b\x0f\xdb\xc4[\x8e\xbb\xb4KP&\x84\xd3\xc2PA\x07\xc7o\xb1\xf3\x92Q\x12\xa4\xf1I\x0b\x14\x8f\x05\xd0%\xcf#\x1f|5\xc4v\xd8\x90\xcd3\x13\xf8\x0d\x9b\xdfn\x94\xbf\xba~m<\xc0\xb2n\x0d\x8a\xfa\x9e\xbb\x16\x07,6\xde\x80~\x9a\x03\xa9\xcd\xfes\xc3\x93J\xac\xe6aH\x96Cbq\x10\xa7\x06\x9fC\xb4xr\xa0]58C\x91\x04|\xa6\x98\xd7!I\xc6\xa5\xea\xba\x8e\xb8\xf3Ry\xb7c\xa9\x0bf\x99\xd5\xfe\xfd \xf9\x8c%N\x93h\xfce3X\xee\x9aE\xa0\x84\x9aNImF\xd8u\x96P/\xd3wtu\xca\xa4%|\xf4\xd6\xa2\xc3\xea_\x0fdF\x0em\xb1\xd3\x06d\x8a\x9a[\x88'\xbd\n\xdam\xde=\x9a2\xe3\xd8\x9bZW\x9a\x1b\xba\x1c\x82\x9d;Y\x923\xe9#\x9e\x8f\x95\xaa\xed\x89\x1f\x80\xc8Q\x9a\xf1\xf82\xb6\xc7R\xfa\xa2\xd5\x07T\x8b\xd1!\xb8\x82\xc7\xb3\x8b\xf6\xc1\x99mo^qd\x96\xc7d\xf1\xe5\xbb}\xb8<\xe9\xed_\x87\xe3\xd6\x12\x17\x8b\xf4\xfc\x8eI\x89\xe0_\xaa6\xe9S\xdc\xd2 \xb5\xa6\x14\x19@n\xa4E{G\x0b\xeaT\x8b\xbdz\xb1t\xe7\x83^\xdd\xd2$TG\x97$m\xd5\xd9!\xd5\x91\x0edFZ\x1c94\\b\xfa\x1f\xf2\xec\x0d\xf8\xd3d\xf5\xe8k\x16\xaf\xa3%\xf1*M\x97a\xd1\x03u\xb5c\xb5\xc1\xc3\x8d\xaf.!\xf5\xae\xcc\x0c\x1e\x99\xc9\xe6\xaf\xbb\xc9\xfbP\x9c\xc9\xc9\x95\x05\xdbc\x94\x9b\xd9\xdf\xab\xf3J!\xce\xfc(\x8f\xdd{u&g\xae\xd2\xeb\xf0\xb1jM=\xdd\x97\xf0\x8f\xea\xbdZ\xaa\xf4\xfa(\xacUz\x9d\xe9Z\xa9A\xab\xc3/\x14|\xdd\x07\xdf\x8d\x1c\xcd\xfa\xe8\\*\x1e\xad>\n\x17e\x84\xaa?\xbe\xd6\xf2\xaej\xe1\xe8g\x0e\xbd\xe4\xe0G\xc0\xa1Q \xdd\xe3\x9dD~\xe5\xfdu\xc6\xf4\x15\x89\x91\xaa\xfd\x0f8\x97\x8a\x95\xf1h\xf4!\xa47\xc6\xcf3ya\x08)a\xe0}\x86\x1fUn\xc7\xe3\xb1,\x91C]>\xcf/Cv\xac\x81\xfd\x84.\xf4\x7f\xd5*\xf9S\xfa7\x90/\xd7A\xa6\x7fC\x8c7\xfd\xf2~]\x02\x15\x8d\xf5\x13\x0e\x1c\x92\x9f\xcb.)<3$\x0e[\xc5Y\x00Q\xcc\x1c\x16y\xc9M\x9c\xe9\x17_\xfdH\x12\x0e\x15\xce5{\x16D\xb1lv\x10\xadi\x18\x00\xd4\xe7\x92_\xfb\xccn>$pO\x02\xbf%k\x16r\xea\xeb\xff\xcc\x7fI3Z\xbe\xbde\x19\xf5\x8d\x94\xa2\xd5+\x93\xd5\x83\x97\xb7\\v\x14^\xde\xe7%\x94\xee\xf5\xaa\xe4\x06c\x9afL\xfe\xc8S\xf9C\xcd\x93\xf8\x0f\x12m\xe2\xc4 _\xe8\xc6&4c\xe5\xc0\x80s>\xc7t\xf1\xeb\xa4\x8c}\x96\x83\"~\xa9\x1a\xd2\x8c\x86\xa1J\xcd/WrV\xd2<\x8d\x99\x9c\xb9,X\xa9P\xd4\xf0\xc6soy,\xc8\x87\xb0xUS\x0c\xbfu\x07\xe1\xa5\x18\x08\xb8\x1f\x0b\x8cE\xba\xe6a\xbe2\x1a{EA\xf6\x0e?\x97\x8c\x85\xcey\x0f)\x91f\x8d\xd8l\xe7|\x9c\xf1Oq\xcc\x92c\x9a2w@\xb6\x05c\x16\x06\x1es\xeb\x9b\x95(\xcbg\x87G\x10\xe3\xb7\x99\x0bv\x98\x19\x8f-\xd9\x1c\x15x\x90;\x8a5Z\x0c\xc1KiFD\xb6\x89s\x0f\x92\x8c\x04\x91*T\x0f\xe3\x0b)P\xe3Cr5K\xce\x8b\x80\xd9\x00Y\xf3\xd2~\xa2PS\x91X\x08\x07\xae\xad\x16\xca\xce\x18\xe2P\x8d/\x12\xce\x81.}\xfd\xb2\xac\x1f\xa9\xe9\xd4^\xd3e\x9ee\xd2\x0c\xf8@\x06\xe0T\xdb\xdbHH\x8d#W\xa6\x08TF\x13FU\x9a\xf1m\xfdK\xf4\xec\xb8\x95\x92\xbf\xd8\x90\x92\xe7(\x13D\x13B\x87pR\\\xcd\xd89.-\xd8\xba\xe9 \xf5\xfb\xd3\xeaGpjtPT\xc7\xeaD\xe8\x07\xa6O\x8b\x0e\xe8\x97U\xcc\xdd\x01}\xa2\xb0z\x17X\x81\xf1;\x01\xfd\x1e@pRt\x00\xbd\x86\xd5\xd5 $\x0f\x96\x0e\xb07\xe2P\xe9\x01\xa3\x0e\x9c^\x90\xc5a\xd4\x03Z\xe2\xe7\x0e\xc0\x0fp\xfat\x01\xf5X/\x1f\xd4\xa9\xd5\x05\xa6O\xb4\x0e\xb8\x8f\xe5i\xd7\x05 'a\x07\xd0\xa9<\x1b{@\xf5\xe8\xc3\xa9:S\xbb\xc0\xe4y\xdb %\xcf\xe2\x0e\xb0\xb3\xf2\x9c\xee\x80\xfc\xc9<|;`\x7fV\x07\xb3\x9d\xbf\x12<\xc0\x1d\x19\xe5\xbfj\x8a\xab\x9do\x94\xfe\x9e.\xdd\xa8M\x82\xac\x9f\xfbf#!\xb8\xd3\xdd\xba\xd9\"\x88(`\xba\x84)\xa2\x19\xde\xdd\x9a!\xc9\xf4\xf6\xa1\xdeU\xaeq\xe4\xe9\xba\xc9p\xbf4X\x81\x8e\xbev\xc9G\xaa\x80@Y\xf6\x01\xb4Nc\x15\xec}7\x1a\x7f[P\xe6\x1d\x80\xdd\x12\x18\xa2\xe6.\xbe\xdb\xdc\xbd\x14\x9cUGc^*\xae\xab\x17X\xd6\xdd\xb9\x97\x9a[\xeb\x01'9\xb9\x1e\x80}F\xf5e\xc1\x01v\x02\xf2\xae\xadkq\xadHz\x8e\xfb\x99\xc1\xf6t\xe1a\xcd\x12\xf5\x81\xeb\xb3\xa8\xcfJV\xaa\xbd\x8f\x16\xef\xb8\xa4g\x1f\x8fLABG\x9b\x8e\x9aB\x86\xbe%\xfa\xf4\xa4\xc5\xbb^\x9f\x9e\x9cU\xd8\xcd\xf6O\xad\xef\xf6)\x19\xe4\xa7\xe3\x1b\xab\xbb}\xe3g\xe0\x88\xdb?\x81\xf8\\\xd3O\x9fO\x1c\xf3\xb8\x93~;\xeeF\x98\x1f@d\xd1\xde\xd2\xa6?\xc4\xa6\x08\x96\n.-q\x9d\xfd'\x0e\x1e\xc8H\xf0M\x17\x10\x90\xa1\xbc%\xba)9\xadf\x01u\x80\x05\xed\xb7?\x17\x83!\xb9\xa8\x94\xbd\x07\xa1/\xdcV\xf3H\x1e\x89\xa5\xdcw\xeb\xd4e\xe3\x8b\x8c.\xd0\xdb1b\x08j\x05\x1fm\x17\x0f\x04z\x18\x90`\x83\xf8\xac\x9f\x08\x96\xfe\xcb\x17\xe2\x9e(\xde^G\x85\n\x0c\x89\xdf\x0d\x16_\xaamh\xae\x820|\xc9B\x961\xcb\xf0\xdc\xfb\xd8Djll\xbd\x8c\xce\x95\xc3Iw0$>4\x0dR\xbb\xfaU\xbcYd\xef\xc7\x90zG\xd9\xfb\xa3}\xd4\x81=o\x11\x18h\xf7nc\x8f\x86\xa1\x8a\xacn@\x97\xcd.~%c\x9aC\xbc\xf8\xe3\x90\xa6\xa9\xcb\xeba@\n\xa9\xb0\xf4\x8f\xd0\xd4\x06a\xd2/\xb1\xe0-\xb0\xec8e\xb9\xcf\xcb\x0b\xed\xca\xadhM\xfd\x8a\xdf\xd3\xa85o,\x9a+\xc4\x0b\x83\xf8\x92\xd3\x04\xf8\xe6>~\xda\xb54\xa9RP\xe9\x94\x1c\x126\xae\xa4\x17\xb7\xa6\xd5\xe4\xaee\x85Mw\xf0-\xa7;\x90^\x86\xcdI\x08\xeec\x12&\x93\xc9\xbf\xc1\xdaM\x98@\xe2\xbeV(\xff\xf6k\xafy\xf1\xc3-79\xb8\x87\xbd\xcf\xecf\n\xf7V\xf5[4\xa2<\x02d\xa0\xe0\xdf\xdce\xe2\xf1\xb2$\xfc+T\x80f\x83/\xb5\x96|\x1a\xb6\xe5\xaeXF[\xb2\xa51\xa8-\x17|\x19\xa0\xd8\x81\xc8\xb8\x16o\xb9\x1f\xcc\x03pA\x90 8wwR\xbf\x18\x14\x8f\xb7\xa4\xc9q5\xf4~\xe7v\xfd\xccnb\x10\x1cH9\xae\xd4\xfd8\x94nm\xa7\xb5x\xa4\x04\x17\x8f\x7ff7\xb7\xf8\xaa/\xb8V\xf3\xa3_\xbe@z\x1e\xd7\x9a\xc2\xc6\xea\x03}\xdbs\xb5\x0c\xbc\xe5\x86\xadi\x19\x83\xfbll%\x05Eg\xf4[b\x00:$\xc1\xb7P\xe9m\xee_\xfcP9I\xbd)qNR\x8f\xa26\x05\xa0=}I\x93)q\x08\x92\xfd\x06\xf4\xad\x9c\xa3$\xe1W\xe27\x02\xf2)\xd6\x00\x9f0\x83\xc6\x8f\xca\xd0\x04 >ZLM^\xf2\xabH\xc3\xc8\x9b\xc7&\x08\x0b\xa7\xc4\x91\xa4\x1a\x92\xfd3\x18K\xbe?E\xb2\xde\xb2(\x9f\x12\xa7\xa2\xf9\xda\x00:\x8a\xe3\xb4\x13H\xb2MS\xe2\xc8\x1fo\xb8\x87\x19O\xbc\xe5\xbf\x7fH\x82\x08\x14\x84\x00?9\x9f\xa2\xc0gQ&\xf0\x89\xdfjg\x80\xa3\xe0\xfd)q~\xa0\xdeg\x9b\x85\xc5\xb3)q\xce\xe8%\x923\xd9\x15}\n\x19\xc5\xcc#&{ba\xc8\xdb\xedf\xe6\x13\xd1M\x8b\xaf\xcb\xc9S5T \xc7\xec\xc7&\xa2\xc1G!ZR\xb4U\xca\xe6\x9b\x99\xbb;S\xb8(L-\x03\xbb\xfb\xb4m%\xef\xedZ\xd6\xf0\xde\x1e|s\xc1\xd0\xf5\xb9\xf7H\xe5Z\xd6\xdd\xdec\x18%\xcc$|O\x8c\xd1\x8f\x1cu\xcb\xb5\xf7\xb4c\xdb\xec\xed\xb7n\x9b\xbdg]{\xe6\xd1N\xc7\x8ey$Z\xfe:J\x19\xea3\xe7\xd1\x93\xb6\xed4\x81\x95\xf3\ns52\x81u\xf3j\x17\xcd\x12\x83\xf9j\x0f\xcd\x12\xady\xf5\x08\xcd\x12My\xf5\x18\xcd\x12\xc3\xf8\xea \x9a%\x06\xf0\xd5S4K\x0c\xde\xab}tC\x88Q{\xf5\x0c\xcd\x9a@\x97w\xd0<9\x1c\xe8x\xec\xc2xL\xd0\x01y$\x06\xe4]\xbe\xb2\xac\xe8 \xccQ+6\xd9\xdd\x15U\xbce\x19\xada\x0e\x9c\xcb\xb3\x9f\xc0\xd2\x0b\xfegvc\xbb\xd1\xcd\x04\xc99\x03\x90s\x19\xec\xf63\xbbir\xa9\xc0\xfcV0\x1ah\xc8\x97\xde\xe3\xab\n\xb9_\x1b\x8d@\xcf~[\xa3\xb4\x7f|\xabld\xa2\xfc\xe1\x93C\x8d\xcc\xc8\x94\xc8\xb0:\xe3y\xc2W\xc7\x8a@\xab\x07DF\x15d7\xa2;\x82YAy\xc0x\xd5\x06eJ\x9cr\xc6\xee\xc1\xc9\xb6\xd4\x11\xfb\xd7s0>\xcd\xa8t\xf7\xc3\x92\x7f\x1d\x03\xd3\\-\xa0\xbb\xc3R\x1bI/\xb5\xa9\xcf\xda\x81<\xb8]\xf4;\xa0\xee\xc4\x96\xdc\x91%\xb2q&\xd5\xb5\xfd?\x86i\xff\xb7X\xf1\xb1\n\x15\xfd\x7f\x8b\xb8\xe9\xdf\x04O\xb00\xa3\xbft\xf1\x84\x1a\xf1JhCv%\x13\x04\x16\x05\xd5\xba\x97\xd5\xfc\x11\x1b\x1b\xc9\x0d\xc6\xaf\x11\xa74\xcc\xe8\xaf\x1b5\xe5\xd7zS~\xad6\xe5W\xbc)5(\x1c\xa8Ws\xff\x86-%\xc8\x91\x86\xff\xdfj\x19 \xce\xf2\xf1\xa0\xb9\xac\x9eu\xd1\x1b\x88\xac\\\x1f\xe0\xcd\xb1\xbe\xc8x\xfc\x86\xadY\xa8\xe2\x02O b`u\x11\xf8\xe0\xf5KdO\x90\xecJ\x84\x8e\xa9\x8a\x91R\x84\xc0\x80 \xa9\" \xc2\xa9U\xa3y\xd8\xb0\xeb\x85\x8co\x83\xe8O^dta~B\xe0\x82q\xc6\xdf\xf0\xabB{\xd3^\xa9\xb6\xfd\xfe\xf4\xf1uQ\x87\x91F\xa6\x88\xda\xfesl{F\xb5}x\xab\x196\xa7\xaf:3\xf5x\xcfS\xb2U3\xa0\xcfS\xf6*\xb8\x14\x13\xb25\xb9\x8f\xb6\x18\x91c\x1e\xd5\x15\xe6\xc51\xff\xf0\xb7\x87\x87\xdf?\xac\xa6\x0b&\xf9\xe1\xdf_\xfc\xb6\xf5\xdb\xe8\xb7Q-\x0f7\xd4?\xfe\xf1\xe4\xf8\xaf\xa7\x9f\xde^\x1c\x9d\x9d}\xbcxw\xf4\xf6dJ\x1cA\xc7\x8c \xe4\xf0\x08b*\xa79\x1a&\xc3\xf7\x8fU\xee\x19\x97\xb1\xb4\xbb\xf0\x081\xe8i\x9ct%\xe6\xd5^\xc6\xd2LTt\x08\x01f\xd88aqH=&\x10\xaaC\x1c\xb2M\xe8\xb8\xd9~\xb2M\xbe;p\xbe#\xdb$\x13?\x9d??\xf8\xae_@s\x1a}dy\xca\x9a=\xe9\x8a\x80\xa8c\x9b\x16\x16\xec.\xd6\xae\xf6\xce\x8aJ 6QL\x93\x94\xbd\x8e \xf0\xe4dg0\x94\xc1\x7f\x80\x8eo\xf6\xc2\xb6/\xeeY\xa4\xf6\xe4\xf1\xe3\xddI\x17\x92\xab\x0fQ\x11\xc7KL\xf6d\x08=\xdc\x91\x91\"wdH/V\x84\xdb\x12ks\xf4\x88< \xc1s\xc2\xc9\x0bB\xd1\x10_E\x8d\xb9\x19f\x90\x93m\xf2h\xe7\xd9\x93!\xa1\x03Y:\x17\xff\xb6\x0f\xc8\xa3\x01\x89\xc4\x7f7\x13\x7f\xd9X\x0b\xa4\x8f2\x97\x0f\x06d\x1b\xcd \xdbd\xd2\x96\xb9\xdb\x96\xb97@f9#\xffq@\x121\x00\xffa\xc6\xa6&\x8d T\x91\xdaD\x17\xc48lo\xab\xf6c\xcdGq\xa0+?5 _\x88\x1b\xa9\x9f/^\x90\xc9\x93\xfb\xc0G\xe6\xac;\x93\xc7\xe3'\xe3]\xe7\xf6\xb5u\xd8,\xb9\x91\xfb\xe8\xc9`(m\x91p\xdb\xa5I\xdd\x9aG{bx40\x8f\xec}\xa8\xe5\xd9\xc6\xa1\xb7\x04;\x1e)kw\xd6\xa2/'\xe0&\x8a\xfb-\xe3\xce)pV\x85\xd5\xbb\x01\xac7\x1b\xe8O\xd4T\x8a\n\xdcL\x06\x11\x1e\x08\xf4\xc7\xed\xe6\x9e\xcd\x16\xa1\xa1\xb4\x04\xf2\x8c|&N\xfd\xc4u\x1e=rDY\xf1\xeb\xb13\xac\xb8\xf3\xb8\xe7\xf8WbB\xf6,\x83\x9f\xa86\x9d\xe6\x97Y\xc2\x04\xd2\xe3EX\xe0\xdb\x7f9\x1b_\\\xb0\xf4-\xf7\xf3\x90\x81!\xdeP\x86\x87\x8b\x98\x97\x01\xa6\xfe\x90\xf0u \x86BG\x1dm\xb6:p#w\xff\xf1n}\xe5\xf1\"\xeb\xd1\x00e#\x02\xabY\x83\x8a\xf7h4M\x1ejM,\xa7\xa2\xa7MIwL\xc5J_\x12\x1dw\xad\xda_\xae\x93\xefyDU\xad-\x83\x18\xb9u\xfb<\x0eK:r'\xd8\x96\x16\x19{O\x1f\x9b\x18T&=\xc1\xc7\x9a\xfes\xc7Z\x9f;-\x07\x9en\x99\n\x1a\x8d|o\xab\x1fU\x016\"n5\xe8\xdd`@\xb2e\xc2\xafH\xc4\xae\x88@2`\xdc\xe0:\xc74\x8axF\x04oJ(\xf1\x04\xc3IhJh\xf1%\x07\xa1~\x14\x17\x8b\x99\xdd\xaf\x95\x95y\xff\x862\xb3e\x1f\xd9\x9c%,\xf2t\xf3\xc4\x87\xc8\x92\xa6\xd1w\x19\xb9d,\"A\x14d\x01\x0d\x83\x94\xf9dD\xd2\xd3\x05\x1b\x93O)+\xeb\x1b\x83\xb4\xa2xu\x07$\xe3\xf2d\xcc\x96l5&\x1f\x19\xf5\xc9J`m\x9a\x11\x15hu~9^\xb1\x87y\xca\xa4\xa8cT~\xc5\xa9\xdf\x8a\xe1\xa3\x91\xb5-~\x1b]A`\xd0\xcb\x95 \xb8\xe1&\xaf\x80\x0b\x08\x95kn\x04C^r\x1e\xa2\x19\xa2\xb1h\x86\x8c\x94\x8bf\xc9\xa3\x15\xcd\xd2\xce\xc5\xb1\xac\x9b\xd5\xa5\xa5\x114\xc2[\x0d\xfdy?Ge\x8bLK\xdb\x90r\x9a:\xb2\x14\x95\xf2Jk\xc7,\xa5xd\xab\x0fr\xa4\xc7F$\x17\xe2\x01\xe0]\xb8\xa6b\x18kW\xbf(\xff\x1e\xd5\x160\x91r\x83\xb1\x99 \x0e\xec\xa2\xec\x1d\xf0F\x83\xa8o\xa2\x14u\x82\xd14\x0d\x16\x10\x9e\xbb\xaf\xb0\xe79\xc9\xc8\x0bB\x93\x05\x88\x94S%\xe6yN\xb2\xedml\xaf\xe8\xa5^\x14\x98e\x88\xe1t\xf1\x89\x84\x04\x91\xe8\xa1j^y,-i\xfa\xfe*R\x8e&o$-')qqN3\xa9\x1b\x1f\xcd\x92\xf3\x1e\xd7\xdd\x86 9~\xe8\xb4\x8d8Q\x9d\xf2\xccN\xa9Q \xdf\x93=\xd1\x1e\xc95\x01\x8e,\xfb\xbdwN\x0e\xab\xaf\xb8\xfb\xd4\x159 ?p\x1e2\x1a\xa1\xa6\x04\x0b\xa2\x0c\xe3\xe7\xcd\xbc\x1b\x84e\xd3\xe9x\x14n}S@\x0e\x89\xbb#\x0e=5\n\x03)\x81\x88\x9b\x88\x0b<\xa2\x80\x8b\xc0\xe6\xf7\x05\xbd\xe3\x8d\xe3H\xf2z\x1dNb\xdc\x99^u\xcd]Y\x8a\xe6\xd58\x00\xe5\xdb\xbdp\xd4\xeeJ\xcb\xd3\xe8\xcb\x17\xb2%\xe8oZ\xd2\xdf\xba\xce\x12j e$\xf5\xb2\x07\x82\x0d\xa8\xbb\xb2\xd5\x0f: \x95\x11\xbd\x8f1\xa9N\xd1\x1d\x87\xc5\xaf\xe0\xad\x96\x91\xa9\x00\x9a\x83\xe3\xd70\xdf\xa6\xe3\xf3\x96%\x0b\xe6\xdfit\xba$OX9\xb1_/\x8b\x02\xed\xacf\x8b\xf3j\xd2\x85\xa1H\xc1N\x1a\xcb\x08\x1b\xd3\xcd\xa6oKV\xb9*\x07O\xcc\xc8)L\x0b>\x81\x06\xa89}f\x0d\x9bL^\x90\x9e\xe6\x97\xa9\x97\x04\x97\xfd\xe7K\xb5\x1d\x97\xa9\x89\xc6\xe4Q\xaa+\xed\xd3\x86,\xb9)\x1a\xd1\xb7\x0d+p\xbeQ\xffZ9\x1ef\xe2\x81q\x1f8.\x92%\xdc\x92F~\xa8\xa8\xe2\xf1e\x10\xf9\x90<\x18\x0cI#\xdbE\xfc\x8c\x10\xb47\x9f*\x1f\xef\xd5\x9f^=qu\xb3\xaa\xbd\x13\xecd\xaf\xa6\x15\x92\x83\x97\x81\xff\x96\xe7Q\xe7]\xab~\xe0\xa3\xe64\xb9\x9b}\xef\xe7 \x0c?2\x8f\x05k\x84\x93h\xfb\xf0U\xcbN\x90[\x0c\xdc\xc3\xa8\xb9j\xf2@M\x7f\xe5\xfaik\xea\xa7hu\x9b\xd1\xf9\x84\xcc\x94)\xb3\xe8\xd5\x8e\x02~\xa3\xaf\xd7\xb17h\xa5\xd7\xcf\xc2jz\x15c\x18\x19\xb6q,\xb2\x9b\xecd5\x7fm\x9c\xf7?0\x16}H\x98GC\x0f\\\x19\xf9\xca[\x7f\xadi\x06H\xc0#\x10\xa3T\x1b%o\xe6\x99\xaf\xb4\xd4\xab\x99v\xa2\x0b\x01\xaa\xf1%\x0d-|\xfd\xd4&\xc6\xc4\x04}\xa7\x06\x14\x1fk\xfb\xb5\xcf\xa1VCY}\xf9[\x02:\xb9\x07\xc6\xd8\x8eK\xe9Z\xfb\xd9\x07\xec\x8b\x14'\x00\xd1\xd9\xd9L]\xe8\xaa\xc4\xc3m\x1c]\x9f\xea\x08&\xcd\xef\xa2\xf2\xebO\x96\xdcl\x00M\xcc\xab \x1a\xc7\xe1\x8dk\x11\xe2`\xcfW\xe2\xd1vo\xc6\xb6G}s9\x06y\x9a<\xb0\x97\xbdk\xb0\xcb\xb3\xccGQ+6r^\xee\x8a\x0e\x8aI?\xb0<\n\xe7\x9a\xfd\xcaDp\xd3\xb5\xc4\xc8o|\xb7\xab\xd1\x18\xf4\xc7#\xedb?\xd2k\xa8z\xe1\xb4T\xef\xc0~\xd3l\xca\xb4q\n\xc8|\xbe\xb6\xaf\xb8\x16\xe9e\x1f\xbc\xb5`\x99\xb4\xb7\xf2\xb5zu_\xec\xa59\x8c\xea\x15\xc7\xf5\x908g\x9cP\xcfci\n\x97\x12W\xb2\xfa\xe2\xf6kHnxN\"\xc6|\x92q\x88\xe0\x1f\xcco\xc8\x1fD]kNI\x96\xe4\x8c|%T\x16\x9f\xf3<\xc9\x96\xc5\xe50\x01\"\x12\xeeF\xe0~q\x00\xf7HcgP\x1c\x04\xf3t|U\xedQ\x9fq\xe8\xa7\xda\xa5\x1f}\xcdi;\x10\xdb\x11qT\x96l\xae\xab\xf6\xa2\x81\xf9\xd1\x96\xe5\xdf^\x0b\xad\x9c\x02\xb6=\xd7^G\xae\xeb\xa8\x1d\xbd\xf6\xdd_\x1cw\x16\nb\xd2AAL\xfa\xef\xfc\xcd(\x08\xaa\xefih\xbb`-\x95{\xbeuX\xc2\x8e0Hp \xe6\x80\xf5R\xad, /e\xba\xce\xc8!\xd4m\xc2\xb6\n\x88:\x84\x84\x1e\x12\x1d\xb1\xfe\xccU\xb4D[~@\x0ee=;dJ\x803u=\xbd*l\xe7\x8a+x\xa7\x10`\xe7UXT\x82\xe2\xb6]\xc5\x16L\xf2\xd6\x96\xeb\x81\xd6\x07\x8c\xe6\xa0\x18\"\xab\xe8\xc1\x95\xbcqN\x0eIN\xa6jY6i\xc8k\xa5\xf9\xc1\xd5\xf5\x99\xca\x01\x1e#q\xff\xf8\xda$\x95\xbb\xee\xd3d\xe0\xe9\x1a~\xc2#`\x10\xc0\xfd\x03\xd1\x88TX\xc7j\xc5\xd5U\xb4l\xac^um^\xb5\xdf\xaf\x16Z\x93\x03\xe5!\xe0~\xb4\x1e\x87v\xa5\xbez'\xc1K\x90ti[\xdcR\xd5\x8f8\xcd\x98U-\xea\x9a\xc7KR\x83\xa9#\x19\xb0>\xd4\x1a\x83\x82\xd3L\xd4K\xf9\xe5\xda\x81T\xa8G\xf2\xb2j\x9bj\xa44\xbf\xddyN\x02\xf2\x82D\x85zf\xb0\xbd\xdd\xc4\x91\xc0\xd3p\xa5\x194$\xd1,8\x07a\x12\x9b\x89\x9f\xe7\xf2\xeeE\xfe\xb6\xb6\xad\x18\xac\xda\x0e\xf9\xb6Sh\xd9\xe7\x05\x00\xca0\x1b\xd4|\x02\x82\xce#\x00\x06\xdb\x7f\x9e\xa4\xf2\xbc\xe9\x89&\x957\xc2\xa7J\xb4\xd6\xd1[(QV\xd0J\x83\xe3#C\x0c\xb9\x08\x8e\x04\x1a\xd6\nv5\x12\xaf\x17\x94\x1aw8v[\xa0\xcaS\xd2\x0e\xb4`\xd9\xcb^\xb5\x01`\x12\xac\x99\x0fd\xd5\xab\x84\xaf:J\xac\x82\xeb j\xc9/\xceS;H\x06\x8a\xdf\x08+\x8dh\xe7f\xd6\xf1\x8fZG@\xee\xc3\xd6f\xca\xed\xdc2k4\x0c\xc1\x05E[~K\xf9B\xf7\xb8\x0d$\xc8n\xfa\x0e\x85\x81\x0b}6\x0f\"V\xa0\xa0\xe6\xce+A\x17,3\xb0\x15\xc4\\k\xc2s\x1b\xfc)\x98 %\x02[\x89\x97,\xf5\x92 \xce0^\x8fV\n\x19\xdaMMPA\xcaPAEP\xa5'\x85[\xe9\x17\xb4H\xea\x86C\xe2\x0d\xc9\x1cCD\xa0['\x0d-L\xcd:\xcf\xc6\x8e\x0bx\xd4\x0eG?\x023\xc4`g\xeb\xb5\xf0\x12\xb1h\x7f\x0cX\x1d\xb83hc,\xda\x88\x16\xc1e+\xe2S>\xb8\xf8\xb0}\x8a\x13\x1d\x1d\xd8\x17\x84\xb1G3\x97\xbb\xde\xc0\xc6\xe5\x14\x87\xdbR\x9e[K\xf2\x82\xf8\xc5\xb9\xb5\xbd\xbd\xec\xea\xb8 \x1b\xfc\xd9\x121+\xd0\x8fRN\x9e\xad\xc1a]\xa6\xfe\xcfE;\xe7\xb3\xf5\xb9\xd5o\xbd~\xc4WV`\x1f\xee\x0d\xc9\xbaC`\xd8O\xfc\x1a\x89\xb1_\x0f\xc9\xaaC\xf2e\xcaW7\x16\x83\xa1\xa9j\xa56%\xfeMp\x14\xd48\x12\xab\xde\x97\x12\xb7\xd7Y\xd8\xed\x81\xa2^\x1aL\xd1\xf8\x90\x04\xb8A\x9a\xd6\xdcn\x0e:\x084\x9a\xb3%\n\x18\x96\x08\xd9@\xc6\xbaeWD)\xaf\xbe\x0d\"\xf0fH\xd8\xb5\xc7b\xd8\xcf\xdc\xf3\xf2$a\xfes\"\x9a\x9f-\x19\x89x4Zi@\x9f\xad \x8b\xd6A\xc2#\xe0\xab\xc5\xa2\x06\xc9^\x1e\x86\x04\x82\x9a\x92\x15KS\xba`\x84F>\xa1\xbe\x0f\x11OhH\x96,\x8c\xe7yH\xaeh\x12\x05\xd1\"\x1dc\xda\xe2,L\x99eQ\x89>\n\xcehV\x1f\xa6s\xbb\xe0\xc3\x83\x9d\x86f\xbb\xd5\xa1\xc8\n\xbf<\x0f\xff#}\xb8\x18\xf6\x13\x1d\xeau3\xf3\xb6\xb7\x9b\x01\x1c\x88d\xfa\x07\xd2\xee\xe1\x808\xaf\xa35M\x02\x1ae\xe4\xa7\x80K\xe1\x15b\x00\xd1H\x91\xf2\xact\xd2\xec\xcc\x1f_\xf1\x1d\x828Hi\x02\xea\xd5\x87\x89\xd0\xa4#\xa8l\xd8A\x95\x13C}L\xbaE\x91\xf6\xd1!\\k\x83<\xb04\xaf\x9a\x0c\x86\x98\x8d\xff`Hr\xd1QO0d\xa0h,\xc5o\xa2\x7f\xdc\x8d\x86\xe4\xe9\x90\xa4\xd8\x01T\x1c>s\xe3;\xcf\xc9|4z> \x01\xa8\xfc\xcd\xe6\xe7-R\xa2\xeaR\xb3\x99\xdd\xa2\x0b\xcf\x1c\x8c\xde\xbe\xe5\x8a\x06\x8b\xae\x8d&C\xa2E\xbc0U\xe4\x90\xec\x80Nvy|F\xe4\x05I\xe0\x86R\xe9\xd2\xb9l\x16\x9dK.~\xf0\x1c\xa7b\xea1V{o\x99\xc6\x9a\x96;\xe6\xc9\xa3.{d\xac\xab\xa6\xec\x06\xd6\x11w\xb3AE\x90u?\xad\xdb{\xba\xffo\xd1\xbcF\x88t\xd9\xbcI#\x02\xbbB7O\xea\x88\x82vK\x07\xba\xfa\x89\x9e\xad\x89\xcb\xca \x8eA\xc3\xb7\x91\xbe(\xe2\xa84D\xac\xd3\xd9\xb9E\x9e\x91\x835\xd0\xc0u\x0c\x1b\x0c\xa0\x88sP\xe0\x83\x8b\x00*\xe5\x13L\x9c\xfc \xd1\x8e\xc6q\x9e.\xdd\x1c_\xbb]\x06\xb4\xdd\xbb\xae>\x06\xba\x7f\xf5^\x14Hr\xeb\xa0.]%\xd5\x9d\x1aDj^` 3\xd9\xfe\xba\xaa\x9e\xc6\x81\x9b-\x9f\x8e\x88\xdb\xdaM\x1321\x1c\xe2j+c\xb3\x83\xaay\x8f\x8c\xebdx\x95\x14i8\xd3\x05\xd4>R\x8f\x14\xb9B=\xacR\x0ff%N\x943\x81\xa0\x9c\x90\x03Q\xf5!I\xc6?\xe4\xf39K\xc8T\x99}\xdaX\xb3CB\xc74\x0c\xb9\xf7)J\xe9\x9c\x15\xf0\xd5A\xee\xbd\xbb \xa9;\xed\xd21\xca\x91\xc3`]h\xa4+e\xe4\x06\x04QL0\xdc\xc6\xb8\x11h\"\xb3+\x02z\xdez\xe1\xa3\xba\xe3\xc5\xc7=\x1e\xdf\xb8\xc9`h\xf52\xf7uP\n\xf2\xdc\xc9\xde\xa3A\xe1\xeek\xf3-\x80\x0c\x88q\xe64\x1bi\xf4\x1d\xd9\xe9\x99TP#\x07\xe4(I\xa8\xe8\xc5\xa08\x99\x9e\x0fH6\x8b\xce!0|t~\x1f;\xa2\x13\xdfO\xf6\xefr\x1c%\"\x13P\x9d)+\xbc\x9f\x96\xed=\xedt\xdcqO-\xab7+\xba\xff\xa3C\xa3M\xfb\xa6H\x14\xabQ\xdd\x05\x16\xc9\x8a4\x82\xd5B\x13\x03\xcf\xccv\xce\xe5\xa9\xa0\x8f '\x88|v\xedH\xcd\xe0d\x0co\xd0\x0e\xf85$\")\xce3\x95\x14\xe7YeSm8\x93\xbb\xbb8\x93\xb0\xff\xb4N\xae\xabS\xfb)\xee\xdap\xff\xe9\x1e\xca%\xec?\xad\x9f\xf2b\xd4\x9d\x99D\xb8\xdaQ\xc0\xb9\xd3d\x19\n\x98\x974cu\x00\xcf\x04xK\xe3z\xfe\xdc\xcc\x7f\x07\x8eD\xea \xb1 \xf2\x91-N\xae\x1b\xb5\xf8&\xc8)\xcb\xea\xf9\xcbJ>Lm\x1dd]\x01\x01\xe9_\x1dde\x82\x00\x86\x91GF\x1dnQ\x1b\x14\xfaS\xc0\xae\xea@7&\xd0\xab\x90\xd3lo\x17\xea\xac\x03^6\x00\x9f\x01\xd4\xb1\xbbA\x1d\xe2\xef\xc4Z\xd3\xde\xc65\x89\xbf\xbb\xbd\xbc\xe7j+a1\xd6\xb7]\xa9\xfb\xb6\x1b\x90G\xf8R\x9d<\xc3tk\x04\x1b\xdbzH\x90\x9aL\xcd\xc9\xb8\x143;-\x91\x0c*^\xf5\x9aHH<}<\xfb)\x83\x07\xc1~\xe0\x00\xa6\xbb\xbf\x06@\xcd\"V\xb0i\x01\xbe\xf3\xf0\x18`\xdd\xbb\xc5\xb2O[93\xbd\x04,\xab\xa4{\xe3j\xd6h\x7f\xa76\xb2bYL\x9e4\x97\xc4K\x9a\xb1q\xc4\xaf6\xc5:\x9a\xdeA&0hj\xbf\xf5\xe9\xfbZ;\x02\xb5\xf9 \xc8\x01{\x8e\x88K\xc9\x08\xf5O+\x98L\x88\x86#\x0e\xa7\xef\xc9\x0e\xf6\x15\x0d\xb7\xbd\x9d\x91\xef\x0fHapnx\x8e\xdei\xaa\xd4}\x95\x1a\x82\x19\xae\xd7W\xdb\xb8\x9a\xcd,j\xbc'\x89\xe1\xe4\x11.\xe3hluEn?\xc3\xc9\xed\x06S\x9a\x93\x03T\x0d&\x85\xf4\x86\x16L\xd8}\x95Y-\xe0\x011\xde\x89G@ \xdb\xcd\xe0\xf0\x92\xb1\xbb\x80\xc6L\x95\xd6Os\xd8\xc5\x94\xa0\xf3[\xd5\x0c\xc9\x06$,\xf1\xb1\xe6|\x80D\xcafQ\x1d#[\xa8+o\xb3\xa9\xda\x7f\x86\xc7\x93\xd8\xdb\xe9\xbe\x1a\xb7R\xbc\x05\x08v\n\x13\xe3\xfb\x18iG\xf4\xbahU\xa1\x90\xfc\xaf$\xbf\xa2YPeL\xec\xbbR\x14\xd9\x85\"\xbb\xe7\x16\xc5\x10\xa2\xe7\x85\x1aW\xd6\xda\x9f;\xea\xe6Ip\xdan0\x1a\x81mu\xd1\x06\xa9Y\xcf]\xf3`\xcd\xe5U\xb4l\xfc\x0b\xb2g2\x06T\xdak\x81^c\xb1p\x05\x95A\xb6\xb7\x13\x08\x16h\xc3\x12\x9aP\x8ef\x89E\xf5\x1d\xcc\x95\x81\xdcNe4\x8f\xa6\x92\x92U\xb8V\x0bip\xeb\x83\xbeyp\xab\x95fa\xc2\xf7\xf6m\x11\xe5\xfap\x83\x81\xab\x83='bS\x92m\xe28\x1b6\xbd+\x12\xcb\xfe3\x1c\xcb\xed?{j \x1bWo+\xd8/\x03j\xf2xH\xaa\x8e\x8aB\x9a.e(\x882\x91\xe6\xd9\xb2\x9a\xb2\xe4i\xcd\xfd\x8f\x18\xa4&\x8cR\xb0\xae86Jku\xa5\x8c&^-\xed\x1f9Knj\x1f\xa0\xd9\xb2Y\x9dH\xad} asRs)T.\xb2l\x0c!P\xc9\x01\xb9\x1c\x92l\x9c\xb0\x94\x87\xebN\x97\xaejr\xc1\xc7\xdd\xd6\x04\xfc\xba\xe9\xa2\xa6\xaf\x9a\xafF\x95r\x1f\xf5\xac\x98\x91C\xb4\xf2b3V<\xac\xc3g\xe6\x0eRIl*y\x16H}.\xad\xd7D\x15\xdf\xf9\x01D\xe0\x96_\x81\x18\xcb\xa6\x1f\x0f\x99\xac\xafZ\xaa\x0d\xfb\x94\x88%\x15TW.\x85\xd0\xc1\xee\x8c\x8e~\xdf\x19=\x1bo\x8f\xce\xb7\xa7\x83\x87A\xf3\x98}8\x9d\xed\x8c\x9e\x9d\xff\xe5\xcf\x0f\x9bG\xed\xc3\xbf\xbb\xbf=\xfc\xed\xe1\xa1{\xb8\xf5\xdb\xc3\xc1\xec\xef\xbf\x1d\xfe\x96\x9e\xffe\xe0\xfev8\xfb;\xfc:\xac\x97\x02\xb3\x04\xe7\x0fgH\x9c\xaf\xe2\xcf\x17\xf1\xe7\xb7\xdf\xc4\xdf\xbf\x8b?\xff\xe5\x9ck\x03\xa1\x99\xf3B\xa4|\xef\x0c\xc9w\xcew\x90\x07q\x80E\x81\x04\xfeF\xf07s\xce\x07\xcd\xd3{\xe6|WV\x15\xd6\x00\xe6\x00\xf0\x1f\xa2\xf8C\xf1\xe7P\xfcy.\xfe\xfc\xaf\xb2\x90W+\x14C\xa1\x12\xfe\x7f95s\n\x1fFd\xb6-\x87\xf4h\xf4\xb7\x8b\xd1\xf9\x1f;\xc3'{_\xeb\xa3\xb0T\x83\x8f\x80\x0e\xdc\xf1_\x06u\xf85ja\xf8\xdftM\xa5!\x1b\xce\x958\x06\x80\xd3\xe0(j\xd6{\xabo\xff\x89\x05\xfa \x88\xcb\x84V.r,\x86\x89s[\x99\x05\x8f\x976\x83\xc8y`\xe3\xdf\x1ch\x84\xd3\x92\x99Zs\xe7-%Uk\xacEE\x83:\x87\xedF\x9d%\xfb\xe8Yri\x93q\xfc\xff\xec\xbd\xeb~\xdbF\x928\xfa}\x9e\xa2\x84\xec8@\x08R\xa4\xe4+mZ\xeb\xc8\xcaF3\x89\xedc\xd93\xbb\x87V\xf4\x87\xc8&\x89\x18\x048\x00\xa8K\xc6\xdeg9\xcfr\x9e\xec\xff\xeb\xaa\xeeF\x03\xe8\x06@\xdb\xc9dv\x07\x1fl\x11\xe8{\xd7\xbd\xab\xab\xe8\xfa:\x17<\x06a\xa6\\\x8d\xc9\xbc\xa2S\x95\xa6\xe4\xb5\xd2\x1b/4R\xa7\x94(\xb7\x1a@\xdde\x0e\xc7\xa1Q)I\xe9\xdb\xec3\xe2\x12\xbaF,-)\x05^\x05i\xb0f9K\xe1\xebm\x1a}M\x19\x05.\x19\x04\"gU-\x81\x80\xc9Q=,<\x01_.\\\xe7\xc81(s[\x94Q\x8b\x14g\\h\xd3\xea|\xe5xp\xc4\xe9\x02\x8c9a\xa8\xd7\x8f(S\xc6&\n\xf3\x9a\x97z4\x1d\x9e\xc3\x04\xff+\xaeV\xbd{\xb7\xbfD\xf2d\x18\xf0%\xa6\xfb\x99@4\xf89 \xe3Z{|\xf5x\x91\xcbA\x9e\x86k\xd7\xf3a\x0fS\x8d\xcb\xb4\xc54\n>\xe6\x06\xf3\x17\xef\xe7\x02&\x90\x91#\xc3\xa5Ew\xbd(\x07\xf0\x16\xcc\xff\xb2\xcc\xf9/\xeb\x02\xc3\x05J\xc1\x17\\\xf8>\x92\x81\xd0\xa4\xd4\xc1\xdfV\xa4\x8e\x1c\x8e\xe0V\x80\x9bV\x18\xc3\x96\xe6\xa9;\xf2T\x10n\xe3\x07(\xa2\xad\xc9N\x1c\xa7\xd2\xc5\xdf?\x8a82e\\\xac-\xfe5\xd7\xd6\xcd\x8b\x82\x91\xffl\x8by\x02\x13py\xe5\xeb\xe9\xf0\xdc\x1b\xe4\xc9\x0f\xc95K\x8f\x83\xcc\xe8>^\x15\x08O|\xa0-\x15\x13\xbb\xaey\x1f@m\xb4x\x19\x81\xab\xa6\x18\xc1\xf0r\xb0\xc6H\xea\xfb?q\x96=\xfd\xe9\xdf\xdf\xed\x9f\xf7\xfe]\xfc\xbfo\xbc\xef\xca\x87\x8dn\x83\xfb\xfb\x0e\xc2\x8e\xea~\xe8\xc3\x81a\xd4{7\xd4\xdd\x9d;\xb0\x9e^\xe3\x8dZ\xb74\xec\x03\xaf&\xd5V#\x91\xd6\xe7\xb0\x87m\xf1-,\x9a\xdf[N\xaf\xcd\x97t\x95&}\xe6\xc3\xb1\x8f\x9e\x87\xfd\x91\x8f\xde\x82\xc3\xc7\xf0\x0c\x9e\xc0F]\x85zfNP\xc6\x1f\x81\xec\xeeK\x1c\xbeD\xf4\xcd\xf4\xd9\xb9\x88/\xdc'tz\xcf\x87\xf4\x12\x9e\xc0{z\xcd\xfb{iP\xaa\xb8^J-\x1e\x13)\xa1\xcaGpY8\xffpJ\xf2\xef\x98\xa9\xbb\xf6\xd2\x87\xf7\xa2\xdf3ZO\xbcw0\xf4\xe1\xd8S\x90\x81\xaf\x8e1\xa1}YM\x98\xb3Y2go_\x9f\xaa E\xee\x99\xe7\xc9\xb5\xb1(\xbd\xda\x82-\xba,\x18_\xf2\x97\x8f\x8bi\x96\x17n\xf1y\x0bG\x15d\xb1K \xfce\xddG[\x95\xf7\x95Uy\xef)\x12\x94f\xec\xfb$\xcb]\xaf\xae\x14\x95\x7f\x7f\xf8\x00\x8e%\xb3\xd6+<\xd7&\x9c(U\x12\x8e\xe7\xce\xb9\xe9[\xe9\x974'\xf4adP\xd5\x11\xec_\x99\xef\x81+\x00\x7fS\x1d\xb2\xa0\xec\xfb\xef\x06\xfb\x9e\x0f?r\x82\x83\xbb\xe8\xc3\x1b\xb9b\xb4\xa1?6\xee$\x88Y\x9e\xc2\x04\xdeL\x9f\xb5\\\xa2?Et<\x15\xd4e\xdezq^\x0d\xffgA\x85_\xd0\x10_\xc3\x04N\x15\xa0\xbd\x80'\xf0\xfa1\xbc\xe0\xa3<\x1d\xccVAz\x9c\xcc\xd9\xb3\xdc}\xe1\xc1S\x18\x1d<\x80#\xf8\x19z\x13pn8\xcf\xc5?O\xa7/\x1a\xc6\nrY\x7f\xee\x97\x8b~ \x19\xc2\x198\x1e\xf4\xe0\xd2\x80\x15\xcf\x8b\x12\xedc\xb9LY\xf0\xbe\xb1T\xdd\xbc\xd4\xfc\xa5\xfe\xd6\x88GO\xe1\xe0\xde=\x99\xeeA\x1b\xbd\xe3H\xc9\xc0\x86\xe8eV\xec\xc3+-vvQ%\x1d\xe4\xc9\xb3\xb3\xe3\xd3\xd3\xf2\x17\xd3\x05b\x0e2\x7f\x93\xbd\xa0\x15\xe6\x08\x9c1\n\xa1\xea\xcd\x98\x83\xbeq\xbe\xdfu%D:\xe9\xfb\x0ez\xf07]\xe8\xeai\x8d\xf0))\x01\xc8\xba\nRb\xf2\xcd\xeb\xdb\x07\xce\xbb9\xccp\xea~)\x08\x9d\x06H\x97^+\x1f\xbf\x9a\x9e\x9c[.E\n:\xc5i\xd6\xac\xe06\xad\xa4\x8a/\xf5/\xbc\x8e\x95L\xf1\x8e\x05//\xb8\xd1/\x8d\xa8\xcf\x1b\xfd\x96\x8b\xd8q\x8dm\xfe\xd2\x80\x02\xdf\"\xc9\xff\x05\x97\x05\xabg\xb3`\xc3x_\x8a\x17!y\xfe\xc5#\x84\xfa\xd6L\xde\xeb\xf0^\x97A\xffR\xe2\xad\\\x92/\x18\xef_\xb4\xbd&\xcb\x9e\x92\xbe\xfeR\xe1\x8aC\x1f\xfeR\x05`\xde\xfc\xf7\xe5\xe6\x8f\xaa\x88\xaf\xad\xe9\xf7u\xf1]u\xf7\xbdW\x11\xb1\x8b/RH)\xc6*\xcb\x94\xa4||\xe9\xd5G\xfd\xfd\x8eb\xfdeQR\xd3A8\xb1[NO\x10\x90\xcb\xb8\xa1\x82w\xab\xd2\xa6\xfa\\9\xabj62\xbb\x18\x0d\xc8\x04e\x05e\xd0\xea\xd8\x04\x8d\xbf\xaa\x88\xb54\xc1&R t\xaf\xbfA\x0f\xfe\xda\x80\x89\xba\xba&\xf43\xfc[\x1a\x16+JP%^p\xdd\xc8i:eU\xd4\x05\x05P\xc3\xa0\x992~\xe2?\x06Lc\x9e\xa7\xc5\x199|\xb6\x1f\xfa\x9c\x88\x92 \x7f\x02\\N\xae\x03\xae\x8aM\xac4'\xec\xbbNhc\xf3&\xd4\x0b\xa6Z\xcc\xe2\x95\xadPh *\x1b @\x96\x87YP\xed#2\xcb\xdd!\xf5\x14+\xe6\x18#\xc1*\x9c\xd1\xb0.\x86\xe0p\xberD\xc0\xc7r]\x0ex\xfc[\x0f\x8f\xad\xb6r\xe2\x18\xa8\xabR\x94/\x14-\xca\x16ij\x0fB>Ht7/phz\xf4\xd5y)ZOSLQ#B\x96\x89\x8a\xc7\xe5E\xec{\xab:q\xber|p\xfexp\xe8\xe0\xd7\xd4FEL\x87<\x96\x83\x18\xdc\xa2\xf2\xe1\x8b~.\xe3)\xba\xd5\xd2\x97\xe1\xf4\xc7du\xac\x18\x1d\xcd6\x91\xdcl\x16\x85\xe24K\x1b\xa1O\xd4\xb0\x81\"\x97\xe2\xb7`\xbb\x14\xc2\xa5\x8aQ\x9e\x8f\x14e\xf8\x18\x02x\xa2\"\x84>\x86\xc0\x9ef\x1d\xfdO\xa6\x81\xc9\x83q\xba=\x17\x086\xdd\x9e7\x8c\x8eB\x93\nQ\x02\xbd&V>\x97\xaa\xc9\x96\xc89H\x11\x0cH\x1d\xf5i\xdc$\xae\xcb\x0eL\xe1\x1c\x85\x82\x90\xd4\xba\xd1\x9c\x93\xd5\xc3\xac\xa2Uu\xf8\x18\"x\x02E\xd6\xf9\xa8Y\\\x9c\xc1\x04\xb2id\x11\x17\x1d9\x16B\xb5\x19\xe1\xf1tF\xd1\x08f\x06\xf1\xd5z\\\xbe\x9c\xc6jf\xe2:zI\xc0\x88\xcb\xd2E\xacNN\xeb2\x86ya[6\xadXW@g_\xf5\x8bHU\xd3\xa2\xa3\xb4\xbe\x9c\x16u\xcem+Z\n\x96T\xdd\x9e\x0dm\xcf\xa6dB\xda\xb4\x1b\x1e0\x04\xf1t\xd3\xa0\xcc\xc7\xd39\xed\xc8\xdc\x12K\xcc\xf8\xb6\x11L;l,\xa1\x82f\x95-\x16\xc8\xe7\xb8\xc09\xf8\x87\x0f\xb0./\\i?\x99\xfaQ\x9f\\CD\xb7R@D\x97U\xc4\x16O\x9a\xf4\xf7\xb9\"\xb0\xd2X\xee\x9e\xcb\xa4\x8a\xb8\x1a\x90=\xc0\xabEx\x92O1\x83\xa2\x162*V\xd2E]V\xd6\xaf=$\x07\x1c\xa8VB+\\)\xe3\x03~]\xe9\xfe\xf8\xf5\xcf\xa5\xf5Y c\xc3\xbe!\xdf\xbbmC\x94\xf0\xcf\xc4\x9f\xbcM)\xff3\xfa\xcb\x17\xd8G4LL\x93+\x0b\xb14\x922\xfc\xc3\xd7\xb1tR\x999\x13\xeat,}+\x18\xfeQ\x9a\xc2\x87\x0f\x107H\xff @\xfc\xaa\x8c\xe8\x16\xc1R>x\x04\xd8\xa2\x03\xf0G\xd1\x90+\xe8\xc1m\x87\x05T\x18\xa1y\x99\xe8\x02\x91\xa2\xd4\x9f@\x83\xe4IU\x99\xce9\xe2(\xa1x[H3\xf5\x05\xb8(\xed\x173\xb6\xc4:\xb5t\x0d\x13\xb8\xe0\x8d\\\xd2\x16a\x9bD\x17E\xedz\x9d\x13\x98\xc0u\xfd\xf5MmR\xdad\nL\xe4\xfdL\x0d\x11\x17\xcf8\n\xafJ\xb4\xa0<\x90z\x1b\x1a\xb9\x06:\xfc\xd0X\x8bA9?\x13\x1c\xa5\x84\xa7\x1a\xdc\x92sN\xb1\x08\xae\xe0\xe77\x1c\x81\x8f\xe8\xbf\x89\xfc>\x86\x1b\x85\xb0\xf4\xca\xf34t\xe2\x0d\x97YM\x99@P_\xac\xdc5\xabu\xbd\xa2\xaeW\xd45\x93]\x17\xb4\x82\xa9\xae\x15q\xc2\x0c\x7f>n\xedu\xad-D\x135+^\xef\xc23\x13\x01)\xca\x90R\xa6\xba\x8e\x15\xb6[ B\xa9.\xbe<\xd2\x7f\x8c\xb5\xba>t%T\x1c\xbc*WY\x903\xf0\x8d]\xa9\x13[<\nso\xe8*\x8b\x0f7\x83M\xb2\xe1\x18\xc9\xdf\xdcH\x17\x96\x95\xd7\xb5[K\x7fx\x08\xffb\x1bE/\xd3\xb71Et\x9e\xbb\xb2\x19\xa3|\x8c\xe0\xe7\x95\x17M\xad\xfa\x8d\xe4A>\xb8\xaf\xb8\xd2\xbc\xe7\x16@H\x7f\x15\n\xed\xbf;\x1eyD\x17\xdf\x04b\xfc\xbb#\x8e\x92\x14\xf1~U4\xac:+\x0d\xe1U\xc1\xfd\x1a\x88`\x87\x85\xf2A.\x89[`=\x8eF{/\xe9?\xdf\"E\x93\xb5\xf2p\xa4\x13\x901g\xa2\xa8\xb1\xc9\x11\x1c\x15\x83\xc1\x8f\x9f*\x02\xee\xdd(xQ\x93\xdcT\xbd\xf6J\xbd\x8a\xb1\n\xad\xb5\x18D!\x9dJ\xd2\xd1*\xe9+\x99\xe5\x98v\x1e\x8dw\xfd\x91\x87^\xb0\xefiA\n\xca.\xff\xba)\x0c\xfaB_w\x06\x84e\xc7\x88q\x03\xf9\xcb\xd3\x10\xf0X\x9c\xef\xfa\xf0\x12\xfb\x92\xb2\xe6Kx\x8a\x12\xe8\xcb~\xdf\x03\xd9\x0e\x1e\xc0\xdeL_\x9e{\x9c\xd4!L\xcd\x98\xfbR\xdc\x7f+:\xe0J\x7f\xf9\xb3O\xa6\xe81<\xc3\x81\xd5>\xf6\xfb\x06Z\xbcG\xe7\xd5'\x16\xc3\xf7c^\xed1<\xf34*\xcb\xc7Pi\x89\xb2\x10\xead\x9a\xaf\x95\xb8\xfb\xf0\xf0\xfe\xdd\x07fM\x8ck\xfc\x87\xf7\xcd\xdff\x18f\xdc\xf8\x89\x83\xf9\x81\xa5\xda\x867\xf9\xd0\xfcm\x0e\x13xP\xbd\x13'\x1f\x8ez\x0f\x0e\xcc\xdf\xb8n9:\xb0\xb4\x8a\x91\xf1\xfa\x16]s\x89~\xc97q\xbf\xbfo.\xc0\x05\xa1\xfd\xe9O\xefn\x0e\x86\xfdw7\x0fN\xce-\xe5.\xb1\xdc\xbb\x9b\x83\x93w\xdb\xc3\xe1\xf0\xe0\xdd\xf6\xbb\xef\x86'\xfc\xdf\xfb\xa3\xf3\xfd\xa5\xb9\xd2\x855\x8f\n\x7f\x92+\x96.\xa2\xe4z\x0c\xceK\xf5'Em\x8c\x19\x9bgp\x1d\xceY\na\x9c\xb3%K3\xc8\x13\xd8\xa4\xc9\x8ceY\x83b\xed\xc4I\xde\xbf\x0c\xb2p\xe6\x8c\xc19\x8d\"\xb6\x0c\"\xd1*\x17\x1dn\x1e\x0e\xc1\x8d\x93\x1c\x02\xc0R\x80h\xb4I\xc28\xf7\x9a\x9a\x0d\xe3\xab \n\xe7}l \x9b\xa6\x17\xd4\xb49\xf1\x9d!\x9d\n\x08\xc55\x82>\xcc\xcc\x9f\xb9\x8e\xfac\x90\xaf\x06\x8b(\xb1\xe5\xae\xe4:\x01\x19\xb5\x07\x8b4Y\x1f\x0bo\x1a\xcd\x9dX>\xca\xad\xf8\xcc|<\x00*\xc6\xfe\xeb ^\n/\xdc\x8b)3\xdaE\xed\xad\x1f[o\xd4A\xd5\x1e\xaeB\x85\xa2I|z\xfe\x18b\x0c\xc4\x9eR\x84X\n]n1hI?\xe5\x9d\xc6\xf6\xbeql\xc5\xb0\n\x89\xc2\x0e\x07\xa9\xe1\x00P}\x93\x02y!\xef\x82<\xf8\x89\xb98\xd5\x03\xf4\xfbC\xceON=)\xf4\xe0\xd8\xa5\x13Su\xe6r\xe9s\xc9\xd6S6@\xca \xeb\x15N;;\xcd\xfe\x99}\xdf\xd5\xb6P\xac\x06\xda\x0e\x1f\xaf:\x0d}\xe1D-\x05\xef\x84\xae\xa9\xb9\xa4jk\xee[I\xaf\xe7y\x1c\xb5\xee\xdd;xt\x9f8\xc7\x93 \xdc\xbb\x7f8z\x84R\x0b\xaf\x08G\xfc\xc5\xc1\x10\xe3\xa2\xdc\xbf{ot\x00\xe24\xad\xde\x96G\x01\xce\xb8\xbc\xea\xba\xa3\xe1\xc1!\xdc\xe1\xbb\xf7\xe4 \x8c\x86(\xc5\x88w1\xffq\xff\xde\xbd\xc3\xfb(X\x89*9\x17\xa0\xb8r0\x06\xf5\xe6\x0b\xc2\xd2K\xfbj\x8a\xf6\x10\x13\x9a\x8f\xe4\xe4#O\x9el\x00\x05\xfa\xbd\xa1\xa78\xd7{\xa0\x0e}\n\xa3!\xdc\x01\\\x9e\x0f\xb4\x1dB\xa0\xa1\xb5\xff\x00b\xe5\x18\x1d*\xf2&\x0c!\xcd\x01\xcf\x02\x05\xb4\xed\x08l\xaf\x1aQM\xcd\xa5\x07\x07\x07\xd0\x83\x07\xf7\xe0\x1bp\x19<\x81\x83\xfb\x1e\xf4\xc1u\x87\x18\xcd\x0c7\xfb\xden=\xbf\xb1\xdd<\x90\xcf\x95\xb8\xfd`I\x89\x82\xb8\x80\x98 Gp\xe22\xd8\x879\x06\x95\x03\xbe\xae\xc2G\x81\xde\xe7\xdec\xdc\x8fk\xf8\x06\x16\xf8\xf91G\xe4 D\x1e\xae6\x95\xban\x06\xbb\x13\x97\xe3\xbe{\x8d~3\xf0\x0d\xf0*._\x99\x8d\xb7\xdb\xc4\x7f\xb4\xc3\x98\x86\xdaz\xce\x18L\x075\xf7a\xe9\xc3-9\xe2\x98\x8c\x9a\xf2\xb9\xd0I\xb6\xb5\xd4\xb5\xf9\x16\xbe|8\xbf\xba\xb2\x7f>\xae\x1b\xc8\xe4\x83\xfb\"(\x85\xeeA\xbd\xf6f\x82\x82\xd0\xf3\xe1\xc4\xbdF<\x86\xa7\xc0'xc\xe8\xea\x86\xf0\x9d\xca\xf1\x89\xfe\x11\xb3\x03_J\x0b\xd1u\xaf\x87\xa1\xa7n\xba\xfa\xfcA\x81\xfb/\xdd\xcb\xddp\xfc\xf4sq\xdc\x87\x0b\x9fC\x9b\xb8>QMr!\x1f\x04\xccK\xe9\xc3\xf5\x0c]\xb6\xa4\xb0\x96#\n\xa3\xa8$\x84\x83U\xc9{\xe1\x92c\\\xe0\x11tN\x83s\x8e\x9e\x02\xd5\xde\x13j\xdd\xb85\xaf\xa0R\xc7)\x06{\x99\xc0{\xd5g\xa2\xd5^{\x84\xd9\x97\xed\xa8\xc5\x91)k\x19\xdcS\x91\x81\xfc\x16\x9e\x88,\xe6\xbc\xd6m\x837\xa8h\xba\x0fy\x81\x1a1G\x0d\xf7\x02c\x82pBn\x02\xda\x98C\x12U\xe4\x84\xfe\x82\x96rk\x1a\x9f\xb5o\x10\xa6\xc7\xd2\xea\xe2\xf8{\xbd\x18\xa1\xb8\xde\xef-P\xda3\xfbb\xc9\x07g\xc6IK\xec\xa3\x8e\x1a=\x96\xc8\xcc\xd1q\xce\x919\x14\xc8<\xe7\x0b\x17j\xc8<\xc70(\xdec\x98\x0bd\xe68\xb8\x81>\x87<\xa9\xe8,\xfd\x02\x04^\xb9K.\xf3\xc2\x1f98\x0e=O8\x15\x9c\xb8\xc7\x0dF(O\xf9\xb4\x13OAj\xafW\x97\xf0\xf4\xe7c\xaf\x17\xf3R\xf5\x84S\xd0\x86\xc7\xef\x9b\x84\xa4\xea\x9b\xadU\x17\xbebi\x16&\xf1\x18\x1c4\xe6X\xb4\xd0\xed,;0\xe5\xb2\x96\x0f] \x1a\xc33;\x9b%\x1f\xb01\xbc4O\xd5b\xb4\x10\xed\xfeh\xfe,\xdb<5\x7f\x16.\xf6\xe3\x8e\x12\xb1\\\xd8\xee2\xb4V\xebv\x90\xb3,\xa7\x98|\xceM\xdc\xef;\xd0#\xd2iJ\x99-\x9f\x8f\x16\x02n\x9b\xcf\xdb8\xa4\x19w\x1b\xdfg\xcdh\xa9\xcd\xe8GW\xe6\xa6\xb9[\xb9k\xf8i\xf3\xab\x83\xac\x0fZ\xbeD\x94n\xac\xa6Y\xf9\x88qn\xeb\x8d\x15\xc1nP,g\x14\x02\xd3\xd5c}$\x15\xffC\xdd\xe3\xcf\x90\xe6\x86\xffy8\xb2d\xbb\xe9\x14\xdfC\xef\xbc<\x1f\xe9\"\xd8\xb6\xabb\xbe\xa6\x0c%\xe5\xb9\xf8\x95\xe6\xc9\x91\xaak\xf3\x16K\xab\x88\xf58i\xeb\xec\xc56\x8a:v%\"\x85vjR;1\xde\xad\xf5\x1dC\x89u\xda\xcb|@\x84 \x0d\xf8\xf2\x16z\xec>|\xf4\x88+\xb7\x03\"Kd\xdd\x97\xde\xc9@q\xaa\xba%\xf3.\xf7\xaa^+\x91,m\x8a5\xd2\x12\x99J%\xb1\xa9e\xf0\x81\x96\xb0\x87>\xd4l\xf8x\x84\x81G\x89w\x1cbzxC\xd8\x99\x18\xf2\x8a\x07\x86L\x90\xa19M1zC\x0c\x853D\xe5\xc89\xa8\xb7\x8cqE\xde\xf5\xf6+\xc29\xd3\x0ckU;\x8ct\x01\x1d\xb1\xc3\xca\x888\xac;1\xe6\xa3\xd1q \x1c\xac\x83\x9b?\xb3[\x14v0\x85\xa9zch:\xd2\xcdW\xa5\xaf\x99\x0c\xf5\x19I\xc9 \x13PV\x1bQ\xd61J\xa4\n3\x8c,\n\xbd\x9e1\x833zLJ\xa9{\xe5\xa3\xc9\x9eMg\xc5\xfd\xff-\xfaQ\x0fm\xc6\xc55\x17\xaf\xd5\x81\xa7)5\xc6\x1a\xed\xd7p\x04\xee\x02\xcb\x16gTk!D\xa9wk!\x8c\x8eEY\xfa\x8c\xc7\x94s\xf3\xed\xe1\x85\xe7\x83\xe5b\xf1\x86k\xd6n\xe0\xc3\xdc\xa3\xb0\xd3\xd39\x1e\xb4\xf3\xffI\x16[a\x1cTr\xe0\x9c\xf2\xff}X\x9d\x17\xafV\x16\xec\x87\x02a\x82\x02\x0f\x8a\x89\xe3\xf9\x97\xcc'6\x083\xfc\x9f\x83e\xab\x8by9Q\x90\xb8\xba[CJ\x19&\xb2\x1ecgw\x02\xa1\x8f9m\xf4IWYld\xf8\n\x030atO\x89\x94\xcdA>\xebpB\x95/)gTKm.)\xe5\xe9\x96a\x94\x8bE\x10e\xcc`\x8a\xa4\x06\x05>6\xe7B\xc9\xbe\x0b\xe30g$\xb1\xd0\xc1s\xbd\xbd9[\x04\xdb(ol\xc9q,@\xf3\xd1\xcc\xce\xeb\x84\xb2\x16sX\xb4l\xa7\x97\xbe\xc6\x0dA\xdef\"\x91\xc8\xb3\x1c\x7f\x1eA\xe8\x06(\x9b\xa8\x01\x046\xea\xc0I\xa4\xe1\x16F\xea\x06x\xb5\xc2\x90wW\x8c8qI\xe3\xe3\x9d\xf1\xbf\xba\x08\x92R0\x83\x9e\xb9Of\xb22\n\xa3/\x86\xc2\xb2\xd7\xe4c\xa9\xde\x1c)U<2W\xdc\xd24\x1bF\x84\xf0\xf2\xfb\xa2\x04\xe6`o&\xd6O\x0e\xfa\xeb`\xa3\xe5\x92\\\x07\x9b\x1a\xdb+\x9d\x85M\xcfKV\xcb\xe2\xb8%\xed\xf5<\x99\x035w\xd94\xe5\x05-\xfe*\xd5d\xa8\xa0q{\xcd\x81\xbfy\xbd\xae,\xf9O\xcba,\x99\xd7Y\xb6\xa1 \x97\xbfR\x1a\xd4\xda\xea\xef5\xeb*fb-\x9fn!0\xe5#\xc6\xee\x96\x82.\xe5\x82\xde\xc5\xec\x1ar\xb7\x80(\x97S\x8e\xcb0\x0e\xd2[\xc7\xf3\x8a\xd7\xcee\x90\xb1\xfbw[-\x07V\xa5\xe8\xde]O$M\xed$\xce^iY)\xcdA\xdd\x0f, \xcf\x0f\x87\xe6\x84\xe7\xf7;\x05\xf47\x1c\xc8(\xde3\x01\"\x9d1\x14\x19\x0bb\x91\xb1 uC7\xf6\xd0\xc2\xaa\xc4O_$ \xc6P\xacB\x17\x8e\xd1\xbeV\xb8\xe6 un\x81*}@\x9f6p\xc9 \x84\xbe\x8c\xd7o\x14\xc7`\xf0\x84\xe6\x81\xf0\xe0)\xad\x1a\xaf.j\xa5\x9eN\x14\xd4\x90\x13\xf4n\xc8p\xa5%\xfe5E\x84\x1f\xd57\xf3n\xdb\x86YfL\xb9\x16\xe0\x03\x84m2\x92\xde\xc0^C\xc3\x16\xed\nt2\x9b\x9bQ\xd0\xaa\xaf\xc8\x95-.\xfb\xf9\xb0?\xfd\x89\x02\xf2\xbd\xeb\x7f\xf5o\x7f\xbc\xf3\xf57\xbd\xc1\xbb\x9f.\xfe\xcf\x87\xff>\xdf\x0f\xa5m\xc5\x12\x88L\xfaw\xccVA\x1a\xccrtD\x81\x15\x0b\xe6,\x85E\xc8\xa29\xc4\xc1\x9a\x99\"h(\xf2_\xb2\xd2\x94\xd1\xda2\xe7\x8ef\x87\xb6iW\xf5msg\xa9\xb93\xc9 \xcc\xd4/f7\xba\x19\xc3F$Ak\x88I\x7fK\xbbqWL\xd0\xde\x16\x7f\xe6I\xcc\xc6\xba\x8d\xca\xe0\x10\xa8?\"6\xbb\xd9\xb0\x0b5Rk\x7fkH'%\x06\xbc\x1a\x849\x85\x88\xa7s\xf9)%/\xa5\xb7y\x92\x9e\xef`D\xab\x8f\x13\xe3\x97u\xda\xca\xc4\xbc\x95\xe8\x9f\xb8\x0e6\xa8\xf6\xfb\xe50\x81\x89\x0c>z\x12\xccV\xed\x81\xb1Us\xc1f\xc3\xe29%\xbb\xa9\x8f\x98n`\xa3G\xb5.\xab \x85\xc0\xd0]\x97\xbe\x18:\x98\xb3\xe9\xc8\xe4\x94T\xf4\x88{ \xc4\x93%\xcb5\xa1\xe4E\xb0f\x99\xcb\xbcz\xff\x9d\xe7:\xcd\x1b:\xef\xb4G\xa1\x9d\x9e\xb1\xc1e2\xbf}\x9b\xb1\xb9\x12\x1e_\xa5\xc9:\xcc\xd8 exC\xbaB\x9c\x9eE)\x0b\xe6\xb7\xc0\xffuL\x87jE\x8b\x18\x90\xad\xd3\x00\x83f[\x1e\xbb\x96\x83j\x0f\x02\x0e8\x84$\x8e\x92`\xde\x05\x05\xf8\xc3\xc5\xa6\x94e\xdb(\xb7Y\xe4\xb1I\xc6W\xa0k\x9b\xb1\xcb\x06X\xa1\xb3\x11\xbc\xdb^n\x9bI'_\xab\xef\xc2\x88\xbdFva\xa6R1\xca?&\xe7$I\x0f\x06|w\x9feZ\xb2c\x12\x97:\x8d0k\x826\x94\x9dj9\xef\xabn\xfdP\x99Q\x91b\xd8-\xa5\xe9l\x98A\xc6\x08t\xf5\xaa\x18\x82B\xa4j\xec4\x95\xa8)K\x05\xe2\xa9\x0e\xeb2\xdc\xd1E\x18\x87\xf9\xb7\xc9\xfc\xb6\x93P\xcf\xd7\x85\xaa\xf1\xb6N\xe3\x10\x19\x97\x91\xc6\xe9UL\x07\x01\x1e\x14\x0d\xbda7\xd8\x90\x9d\xf3i\x17\xc1.\xa3\x04\xc3\xda|\x1b%\x97\x9a~\x15f\xaf\xe4\xdf/\x17B^\x91\xed\xf3\xa2\x9d\xdb_$\xe9\xfay\x90\xa3\xf3\xf4w\xe2\xef\x8e\xfd\xc8\xe2\x9d\xfb\xa2\xcb\x05\x18\xcc\x15-\xaco_\xffp\xa6\xbd\xea\xd8\xad\\>M\x9d\xea\xd4{P\xa0\x0c\xe0\xf5d\xb9\xb4\xebJ\x07\x1an\xc1\x84\xe3\x8cL'\xeaC\x0d\x1a8\x1c\xf3\xf5v\xa7\xc6\xfa6\x97Uh\xbe\x07.\x1f\xbcXT\x1e\xf9\x87\x0f\xb0\xa7u\xd0\xb0f\x80WH+\xb2\xac`\x15\xdb8\xdbn\xb8\xa8\xcf\xe6\xf0\xad\x9c\x0d\xaf\xd9\x16\xfc\xada\x95\xecH!s\x94T\xb7\xd0\xe6\xe2H7(\x90Lf\x9ci\xbb\xce,\x89s\x16\xe7}\x1a\"\x1e\x1a\x9a\xb0LE\xc6\x11u\xb3Z]\x1f\x9c\x9c\xdd\xe4\xfb\x9b(\x08\xe3\xc7\\\x8c\xcfX>y\xfb\xe6\xbb\xfeCG\x05\x97-\xb0H\x86\x8cRo\x06\xbc\x95.\xdd\x18\xaayx\xd1\xf5\xd3\x91@\x8d\xa6qz\xc1f\x13\x85\xb3\x80S\xb6\xfd\x9b\xfe\xf5\xf5u\x9f\xa3x\x7f\x9bFda\x9bWgm\x94`\n\xec \nxI4\xa5\x95\xbf\xca\xeb9!\x8521\xef/\xf2\x1b[@j\xbdPy\x11\x0db\x90\xc8\x04P.\xd6\xa5=\x0dz\xad\xcd\xb6\xe2v\xa7\x9e$\x954`\xe1,\xd9r\x8d1\xc9QdS\xe4\x17x5\x082\xe0\x8bnC\xc8\x1d\xc6\xcc\xb1\xadj\x9d\x85BP-\x91\x97\x0e[\xac\xf3\xd8\x1a%8\x92;\xcfq\xd4\xbeO\xa5\xe5\x17X\xc7g\xebz\x83|\xc5bwk2D\x8b\xe1\xe6D\xfeZh\xd2m \x8ak\x05\x06\xc1Q\xda\xfb\xd85i\x88n^\x98\xf74Kx^\xb1\x84OQ\x956\\yq\xf3i#\xeb\x95\xda\x8b\xddU\x0b*+\xa6/D\xa7\x95\xfb\x0c\xb4\xe7\x00\xbe#\xda\x97\x91\xddB\xd1uQ\x8fj,\n \xae\x15\x9dt\xb4\xe7#\x94\xa8\xbah@\xd5\x9f\xb3$\xfe\x9c\xb6\xfft\xf6\xf2\x05\xf9qX\xa9W\xe9\xbdMY\x98Y-\x18\xf2\xcc\xc5U'\x80\x7f\xff\xe8\xa1\xeaP_\x7f\xa4\x15\xba\xb5\xc4x\xe6\x0f\x06\xf5\xddhK,\xab\xeb\x0d\x92\xd06%\xb7\x85m*S\xed\xccR6gq\x1e\x06QFn\xdf\xc5o\xaeF \xf9\x00\x8a\x00\xb7\xe2\x05\xa1X\xe22\xf9FE\xfe[\xb3|\x95\xcc\xb11\xfaS\xbe'\x87\x19\x86\x7f\xf8t*\xaa\x1cx4I\x18\xef\x1cC\xe9\x9d_\xb57\x18\xf6P\x13\x0ci\x96\xca`i^~\xc3\xec\xf3\xd2o\x19\x98\xb3\xf2\xceI\xd6a\xee\xf8\xb0W,NE\x98\xb2/Vn_\xacv\xd2W\x98;\xf3\xe4\xedfc\xcf\x04\x00\x05\x1a\xdc*\x8f\x0ftF\xef\x8f\xb8\xbcit\xe7\xfb\xe8\xe6r0r\xe2\xc5O\xe7?N\xde\xa8\xe8\x87k\xe9\xf8\x84\x7f\xa8\xc2\xe2\x87\x96\xc5)e\x0b\x96\xa6( \xd0[\x17\xdb)BRj\x1d|\x7f\xf2\xecy\xed\x0b]\xc7\xb7\xc0<\xaa\xdex\xd12\x8a\x92k6G\xb6\xf0\x1f'o I\x81\xb7\x06)\xfb\xdb\x96eyfB\x08\"rR\x83w\xe3nV\x99E\x07\xab\x8c \x83MV{L\xb1!/\xdf\xddq\x0cV\xc3F3B\xabxP\xbam8i\xbam\xc8\x9f\x94.\xdd\x93\x05]\xcb&\xd2\xc3l\"\xd0V\x1d\x0f\xf7\x04\xf3\x9b8\xc6\x06\xec\xcc3\x97\x16P\x83[\x10\xd7\x91\x0d\xaf\x13\x83\xf4 \x16S[W\xeb\xf6\xa6}_\x93\x86\x0d\x951\xf4\xd3\xa3w\xf1\xfe.\xbbY\xdb\xacq\xdb\xd5\xd0b\xa3\x08\x8a\xec\xe2C\xed\xb6\xbf\xfeH\x7f\x07\xb9qc\xa7\xb9A\xd0\xf7*\xf5\xab\x9e\xb5\xf2\xf9\x9c=\x98[\xf9*q\x84\\O\xb8B\xaa\xf3\x04\x1c\xe1\xea#\x95\xe4,\x0f\xf2-'\xb7\x0e\xfd\xe5`jLN\xf3\xe4\xa71\x1c\x0c\x87\xa2t\xf2^\xc5\x8b\xa5\x8fO'\xfc\xab\"\xe7\xe2\xed\x138TU\xe8\x95\xb49\x14\xbfj\x1da\x9118/\xff,\xc7f\xe7\x05\xbe\xce\xb5r\xfc_\x84\x9a\xab\x90\xa9j@\xd5\xd2/4\xf0\xb0\xc1\x82\xe5\xe68rW\"\x16\xa0\x19*tS\xc2\x18\x9c\x8a%\x01\xa7g\x08w\xc6\x1fy@5\x06\x87\x0e\xa7\xa80\xfaX\xcac*|E_\xcd\x8dp\x85m\x0cN\xa1\xd0h\x8dp\x0d\xa3\xf8\xd9*\x00\xf2'Oo[\xcca\xda\xa1\x03o\xdf7eO\x96\xcfG\x98\x05\xe8R\xd7\xd5\xad~odo\xcb\x8c8\xb6l\xc0R\xaa\xe6k#\xfel\xda\x0bM\xfd\x1e\x83\xa3)\x1aT\xa9\x8e\x9ef\xd1\xa8d&\xf4\x10r\xae0\x95\x9dtv:\x95\xfa\xd6\xb9\xe3\x17.P\x85\x1aV\x7f}\x1c\x05\xeb\x0d\x9b\xd7\xbf\x9e\xc6\xf9\xe8\xbe\xb9\x92\xe9\xfdi\x9c\x1f\x1e\x98\x8b\x9b\xde\x7f\x17%\x81\xfd\xc3\xfd\xbb\xe2\x83\xe5z\xea\xba\x93\\\x06\xba\xeb\xc6\x9d;\xc07\xe9/!\xbbn0\xbf\x99\x81\xc0<\x88\xa5\xf4K\x13V\xda0\xe3\x8d7;[\xe9\x8f>\xb4\xc2\x01\xb8\xd5E\x8d\xc4E\xf3@\xebP\x93h-\x11\x9b\xa8\xf8\xbbX\xd9\x11\xa3\x90\x0cB;\x8f\xdd\xd4\xc2\x82$\xcb\"\xf10\xd8L\x99\xe5\x8e\xa1V@$wO\xa0\x07\x8e\x8f\x81\xb1al\xba\x8f\xef\x97\xc6?g\x11\xcbY\xa7\xad\x17EU\x97|\"\x86\xbc\xda\xe5\xf6\x97,\xef\xd4\xb8\xda8\xb9@\xc4F\x82\x8c\x0e\xbb\xf5y\x8e\xcb\xa9R-\x1d\xaf\x82\x9d\x1c\xd0d\x07\x15\x07<77;w\x96\xfb\xca*\x93l\x80\x80\xf2\xea hk_\x08Ym\xb9Y\xe5SI\x96-z\xf4\xacs$\xe7B\xa6\xfc\xe1\xd4\x18\xe3s\xbaqT;\x957\x8c\x11\x9d\";\x98,\xa4u\xd1vkV\xdf\x8f\xba\x83A\xc3 9\xe0)\xb9p\x904\xa32\xfa\xde\x9bM\"\xfaT\xd0\xd5\xe57\x98L\x87\x99\xd8N\xef;\xce\x84\xc5y\x1a\xfe\x16S\xe9\xb6/S\x0eL\x06\xcf\x0fh\x99R\xc51H\x9b\xa1\xc9E\xc8\xb0\x00\x96\xb3\xf8[\xe4\xf3\xcfO~8ys\xc2\xf9%W\xd8}\xa1\x9e\xfb\xe0\xbc|\xf5\xe6\xf4\xe5\x8b3\xfe\xe7\xab\x97g\xf8\xe9\xd5\xdb7\x8ea\x81fZ\x97\xb3(\x89Y\x97\x15\xd7\xa4\xb2\x19ZP\xfc\x86\x15\xbcL\xe6\xb7\xfa)\xdbi\x1cZ\xee\xd8\x1aWP\xa4\xcb\xd7\xc6\xe9\xa9\x97\xf3\xd2\xcb\xf9gNe^9\xf9o\x9a\x14i\x0fc]\xdb\xb0k\x84\x85\xaa1\xae\xaa'\xf6JB\xeb\x18K5D\xd3M\x1a\x94\xcfm\x1a\x8d\x95\x9a\xb2\xc3*\xcf\x07\x9d\xfdi$\xba\xd1\x92\x91\xc5\xa8}\xa1\x1a\x82\x82\xe8\xcb\xe3X\"h5\x9b\xcf\x98R4q\x16N\xd5\xf3\x11\xcc\xd2\xd0\x95\x88c==\x1c\x8e|8\x1c\x1e\xf0\x7f\x0e\xf9?\x0f\xf8?\x0f\x0d\xe82\x1f\xa4l\x1e\xa6\x1d\xd2\x8d\xcb'\\\xa8\xfc.\x97\x9a\x95O\xb7\x96i\x11\xb7\x94\xbb\xa9Pjg\xc9\xdcz@_\x02\xdd\xae\xfb\xd0\x05\xe2\x9a\x95\xa7(\xa1\xa3\xe6\xc6\xcb\xc6;\x80\x1e\x1b|\xafT\xee\x84\xff|M\x06A\x98\xc0\x8c~f\x9b$\xc6{\x9ds\xfe\x1b5\xe7\xae\xab\xaf\xadQ\xcdi-n\x10v@\xb7\xbe \x99\xc3^\x9aml\xa1(\xfc\x9f?\xfe\xf0}\x9eo\xc4<\xec\xa6\x9apG\xcf8\xd0\xb0\xaf\xb9\x14h;\x1e\xb6\xd2\xa7r\x0dB\xc4\xb0\x13\x91\x92\x8f\x02\x9d\x8d\x1br\xc1\xf9Y\x14\xc9m\x13\x9b\xeb\x8a\xa8\xbev\x97\x110#\xa9\xfe0a|qR\xd1\xf8\xdb\xd7?\xa0\xca\x1c\xc2\x11\x84\x03\xed-\x8c\x81\x95\xfdI\xfe\xb3/\xf6\xa3\xcf+\xb5\xf8\xbcH\x93\xa2\xea\xc8\xd0\x0b\xe6\xe9\x97?\xf8257\x19\xbb\x82\xc7\xe0%x;\xe6\xf8\x08\x16\x9d\xa9\xb1|\xd2\xaak\xe8\x0b\x96_'\xe9{i^\x87E\x10Fln\xf2\xfd\x90\x8f\xe8:\x0f\xd7,\xd9v:o\x97\xcf\x17\xeb|\xc3b7Q\xc7Q \x9d\x7fa\xaa\x1d'\x8cg\xd1v\xce\xe8\xf0!)\x9d\xf6p\xc9*\x1c\\\x87\xf9\xea\xb8tND\x15\xd5\x16\xddn\xe46\x96|\xc1\\m\x17\x05\x17!/\x0c>\x00 B;\xf9G\xcb'\xe4\xea\x95\x80:B\x03\x8b\xbb\xb4|\xb8$\xc9+\xc5sWsoO\xb4C\xb7#:\x8a\x1b\xeb/mR\xa9\x99\xd8\"\xf9\x1cl\x92\xe8v\x11F\x91\xc9+X\xfd\xe5:[y\xd1_\xbfk\x90\xb1h\x01G\xf4\xdfXS\xb1>\xeb\xa2l\xec>\x1a\x9a\xae\xaf\xf0\xf7\x0f\xcd\x17\x92\x1e>\xb2\xdc<*\xef\n\x85!\xe6\x84\xb0\xdc\n\x1e2\x8f!)\xbfUQ\x02\xc6\xb5\x9c\xf7\x9f9\xbf\xc3\x87\xd5y$j\x1e\xf5\xf9\xd5!\xeb2\x0df\xef\x19\x9fHg\xd3\x00f\x84\x9b\x9e\xd7e*\x83\x0d+\x8c\xe7\xe1\x8c\x95Zo\xe7\xab\xd4\x01f\x96\xa3\xe4s]zJ\xd9\x86\x05\xad10@\xeb\xa5\xdej\x19d\xeb\xf7\xd2\x9e\x079+Y\xcdN\xcf^\x92\xe1\xac\\\xd6\x1c\x8dg\xce\xa2p\xcd\x15\xb31\xde\x0e\xae}\x97\xc1n\xf6\x0cR-}K\xc7\x90\x8a\xe0\x13\xb6\"\x7fA]\xfde\x1c\xdd\x8e\x8d9\x063\x96\x86A\x14\xfe\xc2\xf8\\vX\xad\xa0v{U>\x86\xbd\xc8\xde\x87\x9b\x17\xdb(\xca,c@p\xe6\x05\xbe\x0f\xe2y\x84\x91Q*V\xf3J\xa3\xba\xc6\x0eL\x04~Q\xf1\xc82\x1f\"\x9f\x8buE\x88\x04\xd3l\xa4%\xdb\xc0R\xd1\xdbZv\xa0{\x82F\x1eV\x89\xb8Xwe\xba !\xdd\x82\xaft\x7f\x0e\xbe\xb6Tq\xe36\xd6RW\xc2\xaf\x9a\x04\xfdP\xb9LQ\x06\xb4\x15\xa7\x93|D[\x01\x0c\xe8\xfbf\xb8\xe2\xcd\x9f+\xf4\x8fm\x81u\xb0{\x9c_\xa1\x84U\x8f\x97A\xefe \x80\xea\x87t\x10f\xe2V\xc1\x95\xa7\x0d\xff\x08\xa6s\x17#\xc4\xc3\xb8:\x07\x8f#\xfb\x84\xa3\xfd\xdc\xcd\xdc\xab\xd2\xa7s\x18\xf3\x9a\xb1^F\xb8x\\y\x9eA\xa5\xe2\x9b\xbd\xf6\xd1~n\xb2\xe0\xe0\x96\x15\xcc\xf0J\x0d\xd1\x10\xff\x8f\x97-\xdf7\x8a<\x0f\x8f\x07\"\xcb\xd6\xdaU\xdc\xdbJ\xda3\x13t\x808|\x98\xc1\x11\xdc\x0e\xb2$\xcd\xdd\x19\xdf\xe0. \x9a\x94\xa9\xf3\x92\xbc\xdd.\xe1 \xac\x95\xb7[\xafw\xd9\xa4\x7f_\xc0\x04\xd6\xd3K\x8b\xc1\x0b\xdd\xbd\n\x80\x9d^`&\x07wY\xbd9\xef^yp\x04K\x99S\x86\xb9\xbc\xa8\x0f FP\xf3Z\xd0\x96\xcf\xb3V5\x86\x1e\xb8\\8p\x06|\xe7/T\x9e\xd2\x0b\x95\x9b\xb4\xb9Q\x03\xd1\xaa\xbd\x91\xfb_&CfQ\xa0\x91\x99\xa9s\xfd:\xe1\x0b\x80n\xe5\xa6\x83 \xcb\xc2e\xec\xfe\xfd#606\xc6\xcdQ\x01\x99\x02\x89\x07x\x8aS\xdc\xf7-\xbd\xd7\xc8W!T\x05\x05\x810\xba\xd1\x9c\x88\xfa\xab\x00\x03\xa0_2\x08\xd4\xe4j9E\xaeD\xdc\x1b\x0do\x82\x81bjp\x04[\xed\xd7X\xffV_\x89\x19\n\xc4u\xe2\x11\x0c\xea\xcc\x01\x8e\xcc\xaf\xc7\xb05\xbc\xae\xf7\xb5\xb0\xf7%\xf9\x14u\xa1~a\xcb\xf2W\xbd\xc1\x8d\xb5A\x11\x18\xea\xa8\xf8s\xac\xa8X\xbd\x1d\xae\xa2\x1b\xb9N\xb1\xb1G\xda\xdfES\x86\x05]\xd9\xdb\xca(\xa5\xbc\xf8\x83N\x8b\xea\x0d\\\x15;K\xb0\x85\x9eU\xcf\x93\x1cy\x8e\xf6\xb3^u\xdd\xd0\xb7.n\xd0 Jop\xa5\xf57\xf5\xd6\x97-\xab]H<\xdaji/\x8be+^\xd6\x91\xad\x04\xd4$\xdc{\xea/4\xa2\x0bo\x93r\xd5\"\xf3U\xa7\xc8\x15\x89h0gi\xe6\x17\x1dY\xb0\xf3m\xfc>N\xaec\xa1k@\xb2A\xf1g\x93&W\xe1\x9c\xcd\x8d\xf8)\xc2\xb1\xe2\x80\x8b\xae\xa6\xb2\xa7\ni\xb7l\xda\"\x8c\x08\xa1\xd1\xa1\x95s\x12\xf9\xces1/\\\xfd\x06\xae*\x80\xba/&o\xd7\xab\xd5\x07z\xedc*\x82*oF!D\xc6\xc2)\xe8\x98\xee.:\xe1\xfd\x0bj]\xbd\xf8s\x8d\x9d\xa2\xff\xc2w\xb4h\xc2\xc0R~9\xe6\x8a?*&\xa8\xba\x07X@\xbc\xe1lF}\x1csE\x9f\xeb\x15\x8e^\xa7>\x9b\x1b\x98@8\xbd\xaeL\x06\x83\xc8\xb8U\x96\x1f{\x18\x0d\xeb\xce\x1d\xc9\xdc\xabw\x1c\x15\x0f?#\x1e~\x06O\xe0V\xe3\xe1g6\xe1\xf6\x18&p;=3\xf0\xefE\x89w\xc7\xd3c\xe2\xdd|\x07N$\xb7\xcd\\\xfe\x1e\xa3\xf8\xde(\x0e\nG0\x97$\x83C\xd6\xca\x87+\x9f\x0bV\x17>,\xab\x8c\xf5cm]\xdec\x07\xe8f\x16\x19\xcc\x9c\xcf\xd0P \x90.\x98\xcf\xff\x9f-Ko_\xa5l\x11\xde\xf0m8r\x0c1\x9e\xc4\xce\xbf/\xf2 \x0c\xe1\x08\x9eA\x0f\xdeW\"\xfc\xe0_\xbf\x8az\xdd\x82\xeb]\xf4nEN\xcd*\x12~Vn#\xb6B\x1c\xa4\x7f\xe0,v\x0c\x07\x06\xa5\x91\x1c(Qi\xa4?ME\x9au\xd29\xdb\xe4\xab1\xdc30\xc1 \x0d\xd6,g\xa9\x18\xc0\x88\x1d\x1a\nEA\x18\xd3j}1]0\xe8\x10L\x05\xda\xbce\xd5\x0ekl\xeeH\xcb\x92\xb1\xffn\xe0N\x7f\x1aL\xcf{\x1e:\xb2N\xffmt\x8e\xf7\xfa,\xbeW 6z\xdf}7\x9d\xfe4}w~\xfe\xcd\xb9gK\\\x03b\x16\xe5\xc2\x94h*m:\x86\xe3\xd4\x0d\xc5Gq\xa5\xda'\xb2\xc5n0!\x85\xbdb\xd6p\x8e\xcd\x97\xa9\x16\xcd\xacZ`/\x1e\xe8[ \x98/\x0c9Z\x15\x1504\x1a\xa5\xab\xae\xc0\xb0$\xdav\x83vF\xa7\xe2\x86;[`=\xfdQ\xc4R\xe4\xf6VB\xb3\x1b`\x08G\xb1\xa88\xa6\x08\x9e@<@\x90n\x0c\xf3\xcdg\x1cA\x0fC\xe7\xef2\xf3`::\x17[3\xf2\xa1/\x02v\x7f\xc6J\x04\xc6\xa0\x14`]\x0ci\xab\xe1\xdd\x8a&HQ\x92\x10\xa3\xc0E\xe8M\xd6\x01tA\xb0Ry\xb9\x0d\x1c\xa9r\xca\xf2\xa2%7\x1b\x89\xe4\x03\xc3\xc7\xd0\xef'm\x8d\x81@\xd0\x90\xa2\x98\xb3i\xd2\x90\xda[>(9LE\x0c\xb6\xc0Cl\xc44\x08\xd3sO\xb28\x9b{\x99\xfet\xb8M-\x1f\xb4\x18\x97\xc1\xe3H\xf2\x86Y\xca\x82\x9c\xa1\x0eg\xd2\xefl\xcf\x95\x08\xe5\xc7\xb7\x8d\xd8b\x91\x9f\x91+y\xe7\x95\xd7\x81\xb6\xc6\x1e\xc9\xd7\x1a\xfcq-\xcc\xbe\xc7\xd5\x87S 4_\x9f\xc6\xb9\xbb\xf5ad\n\xd9`z\xf6\xc2\xecE\xf0\xc2\xcdp\x88\x01b\x1f\x06\xbd\x17\x06\x9a\xcc\xc31\xe3\xab\x8c\xc2\x8c\x8a\x1c\xc8i\xc6P|\xcc\xe8\xd3\x13\xa4\xc7\x8a\xa9\xc1\x91\xda\xc0iv\x8eQ\xf0\xc7\x10N\xb7\xf8g\xeb\xc0\xcc\x18\xa2?\x1cT\xc3\xc6R\xcdm\x08l\xb3\x0f\xe5\xa3\x9b \xec\xa9\x15\xa9\x98\x9a?\xc3\xcc\xf0 \xf6\x84X\x88\x03U{B\xe9\xbd\xd1\x9e\xa0JX4\x96\xe7l\x07{\x02\x8ei\x10.\xe3$e\xba\xe4\xa7dB\xc3G\x1f\x87 \x8d\x0c\x13S\xacl\xbd\x80\xb0D\xbef\xcb\x93\x9b\x8d\xab}\xf10I\xa5n\xae\x085s\x85\xe4\x12\xbc\x83\xba\xe5S~\xc3?eI\x8c\x83=\x11\x9eZ\xc1\xa0\xf8\xe9#f\xb1\xcd\xb1\xf0B\x0e\x06\x17\xea'f\xa5\xc8f\xc1\x86\xbd\n\xf2\x95\xba0\x8b\xa5\x0c\xefy\xf1ml\xab`\xfcR\x1e\xfe\xd6\x90\xd7\xaf\xd5\xad^\xc0c\xbb\xcf\x01]\xd0\xbc\xccXzE\x1e\x9c\xd3syk\xf3\xf2g\xa8f\xfc\x80\xba<]\xbdQ\x17\xed<\xb4\xb6@\x95\x9cv]\x06\xb3\xf7\x14\xc8\xad4`\x98\x98\xa2mV\x07h\x8a\xfd=\xab/I)\x8b*\xe5\x9cJ1-\xb9\xa471<\x81\xf41\xc4\xbd^]\xcb@\xdb\xce4>\xa7e\xc3H\x0bd[\xb7N\x0d\x19VlQ\xb7/S\x16\xbco\x99\xd9\xc2\xcd\xe9\xbe\x88\xaf:\xe3\x7fm8\x14s\x11\x0b\xd3D\xa8\xdfR{E\xabJ\x81\xaaz\x1b\xa2\xa4\xe1\x08\x81R\xc8\x8a\xefF#q\xa8\x1b\x891\x94\xad,.`\x8a\x15\xfb\xa8n\xfc\xf0_n\x88\x89\xbf4jY\xdf\xac\x85\xab\xb2\x01\xd4,\x1a\x18b\x82\x92\xe9\x98\x96\xda(\xa4\xe7\x83<\xf9\xd3\xd9\xcb\x17@9X'\xea\x85k\n\x14\xa3\xe0\"D\x9epAK\xfdg\xce\x9ar\x8f\x84\xa1\xf2[\xe6\x91\x98\xb37\"\xde\x17\x94\xac3\x99\xb0\xced\xfd~\xa3X\x83\xe6\x18\xe4T\xd3\xec\xbc\xc1\xa2\xb8\x97\xd6.\x8e\xf9\xb0\xf1*\xd2g>\xdd\x9cWt\xd0\x08Mf$\xc0\x94\x8f\x98rO\xc5\xac\xb7\x9bg\x92\x0d\x1e\xd9\xac\x93+\xd6\x90o{\x13\xe4\xab1\xdd\x0c\xdc'\xf3\x98\x81\xe0\xb9\x1b\xfb\xc5\x1c\\HK\xae\xd7\x16\x03\xd2\x95\xc8\xf9\xc2\xe7n7\xaf\x18\xf2ADP$i\xa2\x1f\x86B3\xbd\xd0\x8c\x0b\x89.\x89\xa2\x1cJ[\xe7\xcb\x85\x1d2\x11`;\xee\xde\xd0o_r(\x96\x1d\x05\xf3\x86u\x87\x1d\xd6\xbe\xb9\x15\x11}9\xd5X\xa0;kr\x81\xedjF5\xfbEm9\xe0*j\xb2W`\x8f\xb9YDNMm\x08\x15\xb5\xcez\xbd&\xeb'\x07\x8e\x0d\x9e%f\x0d\xc0Q\xc3-f\xc3-\xae\xfau\xde\xbf`>\xff\x87\xed\x1d\x1fm\xd3\xf6u\xd8=\xcd\xc5X\xfd\xc5\xa5\x1c\xc1\x96\xdb\xeciZQ=+\x02\x97\x94:\xb6\x80\n,\x99\xbe\x9bE\x9cR\x08\xb3!\xf1\xf5\x82\xa1\xe7\x94`871tPL=\xd7\x98\xba\xd2\xe1\xf9\xeb\xf2\x9a\xd4\x02 \xf1\xda\x898\xdao\x95vJz\xb9\x90?\xb9bq\xfeC\x98\xe5,F\xfb\xa3\xed\x93\xeb\xac\x93m\xc6\xb6\x1b\x87\xac.\xd6b\xef\xd9m{!lk\x9e\\\xc7m\x05\xdf\xb3\xdb.\xc5f\xab ^2,\x85\x807Of\xdb5\x8b\xf3\x81\xfc\xe3$b\xf8;\xc8\xf3`\xb6\xc2\xda\xae\x93\xc4\xe59u\xad\xa5O\xb1k\x9d\xea\x8c\xbb\xd6+/@\xd7Z\xfazt0A\xc4\x15\xb9;\x16\xaa\x01iO\xb1\x99J\x9b\x80z\x86y[\x8c m\x84\xddV\x12\xa7\n~!R'\x1f\x03\xc9+\xf4\xc3\x12\xc9C\x9e\xadw%r\x80\xc7>\x8c,\x08\xc9 _\x87\xaehH\x02\xb1\x0d\x13\x0d_-\xc8h,i\xc0G{\x8bu\\\xb3\xb5\xa9J6\xe3\xdb\x9c}\n\xbeUju\xc27SO]0\xa7\xdeW1\xb5\n\xeap\x8eT\xc0\x01\x85n`\xd7@I\x99\xbcRD\xd6\x8fd\xad\x8aYJ&\xa8\x19\xff\x8dv\xbe\xb4\x9b\xa0bp \x91F\x90B\xb1Em\xbd\x9a\x01\xac\xc9h\xa8\xb4\xe3\xcfI\x02\xd69\xadW)\xe1\xafQ\xa9\xd63\x94\x1d\x95~\x8d!\xf6\x06\xd9*\\s\xf6\xdd:/\xb9dZ\xc6\xb7%\xeer\x86'\xf2v\xa2%\x06\xdd\x12q'\x90\xadi\x92\xa7\xd9DdH\xab#}!-Ck\x0d\xf6\xa3mo\xbd?C\xee\x17uK\xcb\xac\x82\xd2\xfb\xfa\xb1\x19\xd3\x8c=\x9d\x9ce\x99\x0f\x0e\xff\x831\x87\x1cij\xb56\xa2\xfciv\x12o\xd7\x14\x11\xc3P\xf7\xc3\x07\xdd\xa5\xec\xa3Kq4\x0b\xc8\x89\xe1\x08}\x0b\x12oPD\xb3\x9f@JVR\xfdUb\x04\x94\x9d|\n\x8d`JQ;p\xe12\x11F\xad\xfaQ\x85\xf4(\x1d\xa8Y\xf6F.y1ih\xba\xebU\xda\xd1\xe6\xf1\xb1\xc1,\x89\xb3<\xdd\xce\xd0\xc0=\x99\xe8\xdf\xd0t \x86\xabv \x8e\x8aI\x8d\x0d#3A\xb9\x1d\xea\xb4\x93\xcc#\x0ee\x11\xb6\xaa\x9fh\xf2\xf7\x1a_\x1c\xeb0:)9z\xd7\x8bR\xa2\xc8#Sz!\x07\xcf\xe5K\xed\xb5\xf4\x9b\xb6\xe1\x96!g\x8f\xc4e}\xc8 \x0d\x00\xb3\xc2\x8c\xd58\xb4/\x81[\xc9Bo\xea\xcc\x90\x7fG\xe9\\\xeb`\xe3\x86\xcdc5\xe4\xa4\x91\xf4\xdcz$,\xe9y\x15\xbdE\x80%7\x9f\xc6\xe7\x18W\x9dM\xe3Z\x10\xfc:\xb57\x8c\xca\x90\x87\xa6\xa4\\+\xbaZ\x18\x82G\x15\x83\xa3*2\x1d\x9d\xf3\xb5\xd4\x7f\x8eIX5;\xf0bT6\xb6\n\xae\xc2d\x9b\x8e\xc15\xf4u`\xed\xeb\xa0\xdc\xd7\xc19\x1e3z\x83r\xabx\xc5N\x9a\xd5J#Pg\xe4|\xeb\x9a\xad\x0d\n\xb91&u\xb9\x15\xcf'+:}\xf3\xa5\x13e\xc4\x85\\%\xf2F&Y\xb7\x94\xbf:\x9dF\xe7t\xda\xad\x1f\x91\xceD\xe2\xe8\xe1c\xd8\xc0\x13X\xa8\x067v#\x18o\x11#WL7\x0d\xa7\xe6+.\xf0L\xe7\x0d%\xae0\x97\xe3\xaa\xc1\x12\xb5\xc6\x12\xe1tn\x8b\xef^\xba\x8a\x80W\xde\xec\x12?\x96- \xe3\x13X7\xa9\x1b \xe6\x8a\x0e z'k8\x02>\xa8\x0e>\x83!%\xc0\xce\xd0\xebk\xba\xf4a\xeb\xae\xbcs\xa3\xbb\x99|D\x9clQs[\xbbz \x1fu\xadE\xa76m\xf3\xd7\x8av\x9a\xfb-\x1ex\xdb\x86 \x1f1V\x07O\xbd\x1d\xe1\x17VA\x13Z2\xe9+pk\xbe,)\x9f\xf2\x1a\xd8\x07\xa0\x97Z\xd5J\x18\xd5\\\xfd\xc0H5\xd3)\x17f#\xd5\"\x12$NA\x90\x84\x1dA\x8en\x1ecL\x1e\xcd)\xc1Hd6(R\x1a\xf0\x02\xe7zk\xd3\xd4,\xefg\xe4\x16Q\x8c\xdd/\x06=\x88\x93\x1f\xb7y\x907*\xe6j\xf0\xcc8\xf8\\\x0d^\xe6g\x18\x92\x1e\xcdH\x8f\x06\xc1\x07\x8a\x81V\x0f \xd5@\xc9\xbf\xd1<\xd2\xeb0_\xbd\xc4+R5\xdfI{\xba\xd5L}\xafl]\x8b\x8cg\x0f\x0c!\xf3\x8fC\xec>\x1a\xdd\xab\x10\xa0\x8b\x0b\x96\xfd\x98\xcc\xb7\x11^\xf3\xdf\xad\xcb\xd8\x1d=x\xc0\x17\xd0}t@\xff\x8d\xee\x8b\x9f#\xf1\xff\xa1\xe7\x97\x05[wt\xcf\x1b\xfc\x95\x05\xef\x7f\x0c6]\xfah\x10]}\x99\xc9\xf7p\xe4\xb9U?\x8ePtV\xbd,C^\x0e\xa3\x83\xbb\x95\xf7[j\xea~5Y0\x0d\xfa\xd1\xa8\x1a\xbb\"\xa2\xf2\xd5\xe6g\xf8\xfa^\xd5{d!\xbcG\x0e*\xef\xf1\xdcr\xb0d9_\x91\xf2\xa7y\xc1\xbb\xc2\xec\xe4&gq\x16^F\x95\xcb\x1e\x9c\xedd\x83\xed\"\xcb\x93\xb4\xf2\xe9\x8a,\xca\xa5w\xed\x01d\xab^\x076\xaa)Y\xb8\x88\x8ag\x904\x86%qbx\xaed\xd3V\xd7\xe3\xf2\x98\x97FYg\xc9:\x05\xd6\xc0{\x13(A\xdb\x89\xbf\xa4q\x1bcj\x06\xf9\x88 \x0b?\xe0\x1c\x8e`\xe5.\xc4\xec\x1d\x01\xcf\x8e\xe7a\x0c&\x94}1\xfa\xb6HU\x14\x16\xb37v`8\xf4\xab\x8b Yy\xca\xedAK\xb2\xc1\x9c-\x0c\x83\xf4\xd1?d\xc7m\xb8\xadj\xa8\xee\xa3\x83\xa1\xe7\xaaV\xf1\n\xde\x12o\xbb\xef\x0d1\x96Q\xb1\x963\xb7\xcd\x18\xf1\x00\xf6&\x80\x96\xa5[\x0fs\x7f\xc9\xbb,\x8b\x94\xb1_P\x18\xa4\x17\x9e{\xe5\xf9\xf0\x80\xd6Yc\xff\x1fI~\xdf\xba.\xa6l\xe3\x9f\x8f\x0b\xad\xd0]\x977I\xbb!\xb3\xf4|\x08\x06/NN\x9e\xe3\x01\xba\x0f\x89;u(\x8e\xae\xe3\x83\xb3\n2\xfe\xdf\x92\xe5\xfc\xbf\x8c\xe5\xce\xb9\xdf\x00w\x12\x96n\xb5.j\xeb\x8c>\xf2\xb5x\xc1!\xc6L\xd2\x1a\xcf\x0d^\x1c\xa0`:'\x03\xc4\x1c\x9d\x10\xcc`@\xb0\xb7(\xd2\x7f\\,\xc4\xe1TSP\xe3P\x065\xbeXL\xd99\x8d\xc2\\Zj\x86|U@\xe8\x9b\xbc&\x8c\x0d\x97\x18\xec\x0e\x91\"\xa8-\x02i^\x8b\xe5\xffQ\xdfc\xfa\xbbs\xa2\xf0G\xa3\x87\x96\xc8I\x8dh$\x07\xc6\xae]\xd4\xbe\xf5\x10\xaf\x9d\xf8b1\x82\x1a\x7f\x10\x1c\xab\xc6\x96\x04\xbbz\xe4\xb9N\xb6a\xb3\x90\x95\xd2\x84t\x93\xd8\x10\xf8\x8cb\nj\xe5\x1c?LW(\x84\xf1I3\xa2\xa0}\x8a\x9c\x85PJBHK\\\xcd\xce\xe5\xa9\x1c\x08\x82\xa6\xfb\x90\n\x90T\xe6\x10\xf2\x18\x9a\x86\xe7\x9e\xf2\x1f\x12\x85\x8b\x1c\xf1\x92\x96R7\xe3\xd6T\xf6\xdd\x85\x03Z\xe7\xe1}\xe3\xfas\xf6o\xe6\xba\xc2\xcd\xb3Z-0\xef\xa6\x10\x1a\x86UaBH:w\xab\xef#%\xaf\x18\xa5\x86\xaat\xd0$5DnU\x92\x9b\xe3\xdb\xea\xc8WxxT\x86\x93\xaeR\x00\x1b\\`\xea\x07\x17\xff \xd2\xb1\xae\x1e\x10\x94~\xae\xdbN\xcb\x90\xb2\x04hrojg\xd9\x86\xa3P\x8cr\xe3\xb2A\xd0D\x94+\xe5\x19\x17F\x10\xf0j\xa5\xaa\xd9\x90\x0b\x98Zk\xd6\xc3\xaa<\xd2A\x16\x91|a)\xe8\x9c5 \x94:\x83\xcb\xa7\xa3\xc6\x15Z\x05\xad\x01\xd2\xa4\xc8\xb2W\xf4\xda\xd4b7\xf9B\x1e;4\xcd$F\xe7yT\xf5r\x99\x021\x10\xf1\xa5Y=\xbete\x1c\xc4|\xdb&'WT\x043\xd6\x01\xa0M.\xca%\x00\x18\x9cv\x0d\xb3\x11\xb5\xfe;\x07\x99\x88%\x90\x07\xa2\xb9\x8f\x97\x08\xf6\xf6\xfe\xbb\x9aTF\xfd\xe57(fe!e\\#u>\x84\xb6\xa9\xa3\xdbc)J\xa35\xc4\xeb\x96\x7f\x8d\xb0E\xe7\"$g\xd7\x8b\x9c\xdcE\xd8\xe0\x82S\xbcU\xaf\xe7\x83@r\xa2\xcc~a$\x04\xbc|\x97\xb9)\x8e\x88M\xc3ss*|\xfb\xd2\xa5n\xa4\x8b\\\xe6av\xdbv\xf9\xa0Gg\x80\x92\xbd\x04\xf3\x91]x\x97@\x9b\xec \xe2s \xbeR\xd2s\xeey\"\x11\x03I\xf71_\x93\x99\x1b\xab\x9c8\xc8\xe4D\xfe\x85X\x89\xfd\xc6\xbe,\xee3\x1d0Z>\xff\x88\xd9\x8bD\x0f\xa6\xa9\x9bgi\x80\x10\x1f\xa2f\xcc_\xd4\x91\xc0\x86\x01)YK\xd1\xb7x\xcft/\xb8<\xa1\x14'\xc4H\xbb\xc8\xc5\xa5\x9bt\xcaP9\x9b d7\x0dM\xa8\xd8c\xb8*P\xfb\x0f\xf0\x05$\x94\xaa( \x04D\x8b9\xa3f\xb6\x08\xcc\xf6\x06\x12L\xeeU[\xc9,RQd\x91Wf\x16\xf9fa\x16\x876$uW\xc3\x9b\xce\xf1\xf5\xdd\xa17X\xd4e\x13\x8b\xf9\xe6\x8a\xea\xdcm\x15\x82%\xa5$\xed\xf3\xd6$\x13_\xe2y\x003\xd8\xe6/`\x02\x97\xf5\xd7\xd7\x9c\xbf\xe1!!\xa30;f?\xd4\x13\x98\xc0\x05G\x86\x8b&m\xef\xc6p\x1e%@\xf3\xcaz\xba\x89\xcd\xba\x18\xad\xe7D\xe5\x16\xe1Rx`W\xa5\xf9\x83*\xf4\x85'\x93*\xb8\x1ez\"\xb9U\x95\xca\x83#p/0\x91\x8b\xaen\x1aqm\xc6\xbf\\\xa0j\xea\\\xcc0\xeb\xe2\xe0b&\xa4\xc1K\x9dO a\xc0\xebsK\x1f\xf2\xe9\xf5y\xcd\xca\xc0)\xc0\xca\xe5\xcb\xe9\xa3\xc3\x94O\x04\xd3\x173\xf4\x97,\xf7WA\xe6g,\xf7\xdf\xb3\xdb\xcc\xa7<\x1f\xbe\x98\x8eO\xb7\x0f\x1c\x99\x9e\xce\xe7\xa3\xe9&&\xe0\x16\x82\xbcnZ\xa8\xacu\xb2\xc1 \x8c\xe1\x84\x9c\xcdq\x03\x1c\x1c**L\xa4Em]}\xc3K:{S\xa8uN\xb4e\x16 \xbe\x9e\x9cn\xa1LA\xfa\xd5\xc2\x8d\x0br\x8e\x06\x07\x1a\xae:\xaf\xb3\xab\xec*\x0f\xd1\xc5\x8c\xab\xec\x05\x05\x1frr\xed[\xd5})\x0f\x15z{R+W\x15\x89=\x9f\x82H\xcd\xcb\x8b\xe0d\xe1/\xcc1\xf1\xf6\xb2t\xdc&\x9a\xd1,\x06\xbc\xb5\xfaPjP<&(^W\xcd=dIY\xfap\xed\xf9\x90\x95G\x1a\xe3\xadOe\xf0\xf1|\xd8\xb8b;n(G\xd3\x85\x0f\x89\x9b\x0c\xfe\x03z\x90\x0c\xfe\x8a\xff~\xe7\xc3\x8d\x9c\xf9\x9a\xb3\x90\xb3\xc9J\x98\xa4\xcd\xb0\x16\xa1\x1eTy\xaf\xec#\xe72=O\xb5\xe7\xc3\xfe\xf4\xa7\xa0\xff\xcb\xb0\xff\xe8]\xff\xab\x7f\xfb\xe3\x9d\xaf\xbf\xe9\x0d\xde\xfdt\xf1\x7f>\xfc\xf7\xf9~8\xc8Y\x86\xb9\xd7\xcc\x81Wd\x82\x97\xd9*H\x83Y\xceR\xceW)\xcd\x00,B\x16\xcd!\x0e\xd6\xc6\x9c/\xca\xfa\x94'?$\xd72\xaftyq-sn\xb6\x84t\x9e6\xeb\xd4\x99\xc1\xf1\x11t'$#p\xc5\x98u\xa4\x95\xac\x82\xd6\x10\x93Iv[\x957{[\xfc\x99'1+9\x88\xb5$<\x11\xb7\xa2\xccI\xac\xc0\xa8\xe2\x99\xdf\x1a\xbcF\xc4\x80+i\xc3rS\xb2\xb0\xd6\xb5\x92\xb2C\xbd\xdf\xce\xd9~\x0d\xde}\xa0\xa5\x02\x14\x97sJ\x19\xf2\x13\x0c\xfd\xb1S\xbe\x0c2\x1eQ\xd6bs\x82\x0c\x91\xf9\xbf\x1e\xcd\x14\xbd\xeaL\xddu\xe9\x8bM\x87\xe7>0c\xe86\xadG\xdc\x03q\xee\xb6d\xb9\xe6\x1e\xf7\"X3\xae\xfd\xef\x90!\xaf:\xd7\xa9)\xab\xdcGS\xe6B\xdb\x1e\x19|\x13A]k\x90\xd9\xf8\x95\x04-\xb2 \x0dR\xc6\xe7S\xcd\xdb\xf2,JY0\xbf\x05\xfe\xafc\xba\xcc\\\xc9\xef\xdfi\x80\x06\x7fF(K0\xb5\xd4LM\x81\xec\xd8\x8eY\x93r\x97\xcf6\xdbF\xb6D)x\xff}\xb7\x8c;\xb1\xcb(aZw\x1bO\xa7\xa52\xf8n\x82F\xf1\xf8Z\x15\xb9\x97\xcdT*FW\xa9\xdc\xce?\xf2\x01\xdf\xddg\x99\x96\xac\x96\xdc}:\x8d\xd0\xe0\xc7 \n\xda0\x86\x8cvCP\x04\x9f1\x8cE\x9fQ\x91\x8f\x98\x03\xecm\xce~\xa0\x0b\xbb\x0d3\xc8\x18\x81\xae^\xd5C\x15\xfc\x12'\xd4i*QS| \xc4S\x1d\xd6G\xd54\xdf\xad\xa7E \x0f/JY\x05\xe9\"UC\x12\xa0\xd0\x9c\xdd\x81yZ\x0eE\x91\xd9\xdc\xa0\xa6\xcbG\xf9\x05\x16\x89\x8e\xbe\x8d\x92K\xcd%\xbf\x9a\xecXo\x9f\x17\xed\xdc\xbeL~\xcd\xfb\x90\xe1g:\xf6#\x8bw\xeeK\xcf\x7f\xce\xfb\xab$@\xef\xd8\xad\\>u\xc1\xa2I\x86\xd0z\xd7\xd2mC)\x87\xd4\xba\xd2\x81\x86[\xe8\xf7\xc9\x04\\\xca\xec\xc0:4\xc4\"\xb7\xb9;5\xd6\xb79\xbdB{\x00\x03\x90&\xf1\xf2\xc8?|\x80==S\xb5}\xcd\xd0\x00\xb3\xac\xc8\xb2\x82U\xe8\xd7-\xbe\x95\xb3\xe15\xdbr\xab5\xac\x92\x1d)\x84+hm\x0b\xab1\xa7\xe5\x83\x05K\xf9\xdffI\x9c\xb38\xef\xd3\x10\xf1\xf8\xd6\x12\x04\xadT7\xab\xd5\xf5\xc1\xc9\xd9M\xbe\x8f\x01\xa9\x1es1>c\xf9\xe4\xed\x9b\xef\xfa\x0f1\x04W\x05\x8b\xe4\xe1\x98z3\x10W-Z\xbb1T\xe3\xed\x7f\x0e\x12\xa8\xd14N/\xd8l\xa2\x90\x92<\xee\xdf\xf4\xaf\xaf\xaf\xfb\x1c\xc5\xfb\xdb4\xa2\xe8\xfc\xf3\xea\xac\x8d\x12\x8c\x96a\x8d\x88)\xd1\x94V\xfe*\x8d&!i\xcc\xe6\xfd\x0d)d\xb4\xe44\xf6B\xe5E4\x88AY\x12]\xb1j\xb1.\xedi\xd0km\xb6\x15\xb7;\xf5$\xa9\xa4\x01\x0bg\xc9\x96k\x8cI\x8e\"\x9b\"\xbf\x98t\x17\x82\x0c(\x93]\xa3e\xa2\xcb\x989\xb6\x9d\x9b\xb7\x99\x04\xda\x12&\xb7nq\xc9\xaaY\xa5\x04Gr\xe79\x8e\xda\xf7\xa9\xb4\xfc\x02\xeb\xf8l]o\x90\xafXl\x8aM\xfdQ\x92\xdf\x9c\x88G\xeb8\x7f\x13Pl\x17\"`G\x11P>vQP>\x15\x91\x90o\xb3A\x16\x94\xcf\xc7_\x0bM\xba-A\xc9\xf3\xbe&\xfd\x91\xbfzaS\xcde\xdc\x17\xf2\xba\x1f\n\xaf{u\xb5E:\xdf\x9f+\x1b\xc7`\x91&\xeb\xe3U\x90\x1e's\xe6\xe6\xd3F\xd6+\xb5\x17J\x99`\xcbk\xfa\xd1\xb2\x10\x9dV\xee3\xd0\x9e\x03\xf8\x8eh_Fv\x0bE\xd7E=\xaa\xb1($\xb8Vt\xd2\xd1>\xc7\xf37B\xd5E\x03\xaa\xfe\x9c%\xf1\xe7\xb4\xfd\xa7\xb3\x97/(\x06\xaf\x95z\x95\xde\xdb\x94\x85Y\xab\xe7\x0f\xf9\xf5\xd1\xfd,\x0fU\x87\xfa\xfa#\xad\xd0\xad%\xc6\x08\x94`P\xdf\x8d\xb6\xc4\xb2\xba\xde Q\xda\\F\xf9T\xf1\xcd\xac\x94)\x95\xe9\xbf\xb9\x1a%\xe4\x83\xc2Gv\xa5r4\xc7\x98\x8f\\e\xd7\xf5\xe4NQ\xd6VlL&p\xa5\xf7\xc9\x9c\xd1\xdbd\xce\xfcR\x82\x18`\x9a$\xcc\xbb\xc2l\\z\x06\xf6\x8a\xbd\xc1\xb0\x87\x9a`H\xb3T\x06K\xf3\xf2\x1bf\x9f\x97~\x7f\xf8P_\xa1\x0f\x1f\xc0I\xd6a\xee\xf8\xb0W,NE\x98\xb2/Vn_\xacv\xd2W\x98;\xf3\xe4\xedf#\xed\xbe\x8d\xc8}\xabe\x1a\x87\xa7\xd0\xa7{H\xa6\x8c\xdd\x1f\xdd\\\x0eFN\xbc\xf8\xe9\xfc\xc7\xc9\x1b\xc7+\xefcN\x7f\xa8\xc2\xe2\x07\xe5\x9d\xc1W)[\xb04EI\x80\xde\xba\xd8\x0e\x99V+\x1d|\x7f\xf2\xecy\xed\x0b\xf9\xcbZ`\x1eUoN\xf90&4\x9b#[\xf8\x8f\x937\x90\xa4\xc0[\x939\x873\x13B\x10\x91\x93\x1a|5\x8e\x8f\x0d\xf7\x17\x1d\xac2\x82\x0c6Y\xed\xd3p\xedz\xf2\x8c\xfe\x8ec\xb0\x1a6\x9a\x11Z\xc5\x03B\x1e\xd1~cxb\xfe\xe0\xf6H\x0b\xba\x96M\xa5\x87YT\xa0\xad:\x1e\xdc \xe67q\x8c\x0d\xd8\x99g.-\xa0\x14d\xf8\xed\xeb\xd3\"&\x19\xd7\x91\x0d\xaf\x93\xeeq\xe1:[\xb77\xed\xfb\x9a4l(\xad\xf4\xfe\xbb\xf4\xe8]\xbc\xbf\xcbn\xd66k\xdc\xb4\xda\xe5\x8d\"(\xb2\x8b\x0f\xdd2\xda\x8b\x8d\x1b;\xcd\x0d\x82\xbeWi\xed\x0e\x82|>g\x0f\xe6V\xbe\x9a+_\xfa\xbf\x17\x82\xbbH\xd0-\xae\xeeI%\x99R\xd5SXs\xfe\x17\xe6\nC\xf7\x0d\xf9i\x0c\x07\xc3\xa1\x8c\xfe\xfa^\xfa\x85\x88\x8fO'\xfc\xab\"\xe7\xe2\xed\x138TU\x8a\\\xf8E'\xfcW\xad#,2\x06\xe7\xe5\x9f\xe5\xd8\xec\xbc\xc0\xd7\xb9V\x8e\xffc\x8a\xfc\xaa\xa1\xb1j\x17)/7\x1axDZo\x1b4\xaf\xac\xc7n\xba)a\x0cN\xc5\x92\x80\xd3\xb3\xe4Q\x92\x07Tcp\xceD\xcc\x88P\x06\xa6\x90\xc7T\xf8\x8a\xbe\x9a\x1b\xe1\n\xdb\x18\x9cB\xa1\xd1\x1a\xe1\x1aF\xf1\xb3U\x00\xe4O\x9e\xde\xb6\x98\xc3\xb4C\x07\xde\xbe_=\xc3\xd0\x9f\x8f0\xc3\xe0\xd4\xcd\x94\x174\x97\xca\x91\xbd-3\xe2T\xa3\x1f\xcbGJ\xd5|m\xc4\x9fM{\xa1\xa9\xdfcp4E\x83*\xd5\xd1\xd3,\x1a\x95\xcc\x84\x1eB\xce\x15L`\xaa\xe2\xd5\x9cJ}\xeb\xdc\xf1\x8b(6\x85\x1aV\x7f}\x1c\x05\xeb\x0d\x9b\xd7\xbf\x9e\xc6\xf9\xe8\xbe\xb9\x92\xe9\xfdi\x9c\x1f\x1e\x98\x8b\x9b\xde\x7f\x17%\x81\xfd\xc3\xfd\xbb\xe2\x83%,A\xfbuP\xf9H^\xc0!\x94o\xd2_Bv\xdd`~3\x03\x81y\x10*[\xaf\xb0\xd2\x86\x19o\x9cS\x88\xdd\x87v\xa5\xc4\xc1\xd6\x10C$.\x9a\x07Z\x87\x9aDk\x89\xd8D\xc5 \xd5\xca\x8eP\x94D\xb5\x9d<\x83\x9a\xae\xde)?\xbeu\xb0\xb1:Di\x05`\x82\xa7\xd0\x18\xfd\xd4\xc7\xe8\xa706$\xff\xc1 ^\xc5\xf8\x85\x93z\x97\xad\x17EU\x97|\"u\x9f\xf6J\xfbK\x96wj\\m\x9c\\ b#\xe4f~T\x9a'\xa5{l\xebx\x154\xfbFU:\x96\x1d\xd4\xc2Bs\xe8h\xeb+\xabL\xb2\x01\x02\xca\xab'\x80\xa0\xad}\xe9\xf3\xdb\xe1\x1a\x14\xd4\x02\xdc\xc8\x1e=\xeb\x1c)\xdc\x8d\x88L\x95\xfb\xc5\x18\xe3st\xfc\xcak\xa7\xf2\x861b\xd0\xb2\x0e&\x0bi]\xb4\xe5\xfb\xd3\xf7\xa3\xee`\xd0\x92\xea\x8d\xc9\xc8lfT\xc6\x8b\x89f\x93\x88>\x15\xf23\xfe\xf5'\xd3a&\xb6\xd3\xfb\x8e3\x11\xae\xd2\xbf\xfeT\xba\xed\xcb4\xae\xdf\xf7\x92O\xd3\x94*\x8eA\xda\x0cM.B\x86\x05\xb0\x9c\xc5\xdf\"\x9f\x7f~\xf2\xc3\xc9\x9b\x13\xce/\xb9\xc2\xee\x0b\xf5\xdc\x07\xe7\xe5\xab7\xa7/_\x9c\xf1?_\xbd<\xc3O\xaf\xde\xbeq\x0c\x0b4\xd3\xba\x9c\x89\xf4\x17\xad+\xaeIe\xd2\x13\xdc\xbe\x82\x97\xc9\xfcV?e;\x8dC\xb3+\x96!\x16\xf5G\x1f\"Bnm\x9c\x9ez9/\xbd\x9c\x7f\xe6T\xe6\x95\x93\xff\xa6I\x91\xf60\xd6\xb5\x0d\xbbFX\xa8\x1a\xe3\xaazb\xaf$\xb4\x8e\xb1TC4\xdd\xa4A\xf9\xdc\xa6\xd1X\xa9);\xac\xf2|\xd0\xd9\x9fF\xa2\x1b-\x19Y\x8c\xda\x17\xca\x90D\xb7\\\x84\x96\xc7q,\x83nDm\xa6\x14M\x9c\x85S\xf5|\x04\xb34$/\xd5L\x0f\x87#\x1f\x0e\x87\x07\xfc\x9fC\xfe\xcf\x03\xfe\xcfC\x03\xba\xcc\x07)\x9b\x87)\x05\xd8\xed\xc4\xd2\xb8\xa0.RK]jV>\xddZ\xf6:\x88\x97UwS\xa1\xd4\xce\x92\xb9\xf5\x80\xbe\x04\xba]\xf7\xa1\x0b\xc45+OQBG\xcd&\xeb\xa4|,\xea\x93\x11\xf4\xd8\xe0{\xa5r'\xfc\xe7k2\x08\x02\x86^\xe5?\xb3M\x12g|{\xe7\xfc7j\xce]W_[\xa3\x9a\xd3Z\xd3%\x17\xd0\xad/H\xe6\xb0\x97f\x1b[(\n\xff\xe7\x8f?|\x9f\xe7\x1b1\x0f\xbb\xa9&\xdc\xd13\x0e4\xeck.\x05\xda\x8e\x87\xad\xf4\xa9\\\x83\x101\xecD\xa4\xe4\xa3@g\xe3bN\xa7gQ$\xb7Ml\xae\xeb\x91\xb1\xc4\xee2\x02f$\xd5\x1f&\x8c/N*\x1a\x7f\xfb\xfa\x07G&\xa2\x0f\x07\xda[\x18\x03+\xfb\x93\xfcg_\xecG\x9fWj\xf1y\x91&E\xd5\x91\xa1\x17L\x0f(\x7f\xf0ejn2v\x05\x8f\xf1\xc1$\x97\xcb\xe7\xa3\x8f`\xd1\x99\x1a\xcb'\xad\xba\x86\xbe`\xf9u\x92\xbe\x97\xe6uX\x04a\xc4\xe6&\xdf\x0f\xf9\x88\xaes\x8a\xfe\xfd\x0f\xe9|\xc3b7Q\xc7Q \x9d\x7f\xe1\xe5&'\x8cg\xd1v.\xe2\xd4%\xa5\xd3\x1e.Y\x85\x18\xa5\xec\xb8tND\x15\xd5\x16\xddn\xe46\x96|\xc1\\m\x17\x05\x17!/\x0c>\x00 B;\xf9G\xcb'\xe4\xea\x95\x80:B\x03\x8b\xbb\xb4|0j\xe4 c\xf1\\\x0f\xa6\x9ah\x87n*}\xa0\xf6\xd2&\x95\x9a\x89-\x92\xcf\xc1&\x89n\x17a\x14\x99\xbc\x82\xd5_\xae\x9e\xc1\x163[\x90lQ\x8d\x85\xf6\x07\xd1xiqv\xbai\x94\x9bn\x19\xdd\xbb\xeb\x0d\xc8\x98b\nd\x1b\x1a\xb7\xc0lQ\x14\\\xc0pLQ5\xd5J\x13\xa2Q'\x10\xcd\xa4*\x8d\x9b\xf4\xc6\xe5\x03\xd1|\x13m\xeb\xa9\xfe\xaa\xb6\xd0\xc6\xcd\n\xb5\x18\xef2\x89\xec\xdd\xf2`W\xf9Ml\xe9\x9eQF\xffE*KN\x910\xdc\x9a&\xe7J\xc4\x1b\xcd\xe0I\x11N\xfa\x88k\xd6\xc2\xbf\xe2Y\xee\xa2s\xfd\x8b\xe0E\x9d\xcee\xd7!\xae\x9a5\xdb\xfd,\xc8\x18\x0c\xc7V\xc0\x97\x0dX\x8f\xd7\xe5\x83\x0d\x1d>\xb0\xb7$\x1f-\xd9\x80\xb8z\xd5\x10Y@>\x98\x86\xad\xb9\x18\x0e\xe0\xeea\xfb\x00\xf0J\xac\xcb\xd7\xf4\xf0\xa0\x85\xdb\xc8\xc0\x86\xadm\x06\xd3\xa8\xd73'\xea\x94\x8fY\xf2\x82\xe6\xc9\xe1\xa4F\xf6\xfe\xb9\x0c\x1b\x92<6\x83\xa7\x13\xb8\xfb\x90On\xc6!\xeb\xde\x03\x0f\xd7z\x06}\xb8\xfb\xd0>O\xe5\x95\x8b\x0d\xdc\xbf\xa7\x1ax0,\x1a\xb8\x7f\x0fz0\xb2\xdc\x10\x86\x1d\x1ch\xa9\x97G\x0fT/\xa3\xe1Ac\xf0<\xf9\xa8\x15>|\xe0k\xcb-p\xab#\x045\x96\xb2o\x10\x08\xb0\xe5+\xf1\xe8\x01\xae\xc4'l3\x1f\xe8\x81}\xa0mPp\xd0\x0c\x05\x82\xc4\x98\xa0 \xfd\\(H\x7f\xe7P\x10\xea\x10\xf1\xeb\x83B\xfa\xd9\xa0\xa0F;\xba\x0f\xdf@\x0c=\x93Q\xfd\x0f\xf6_\x82\xdf\x05ER\xe2\x08\xfaz\xea\x94\x8f\xbe\xc6\xca\xf8\n\x15\xab\xa2XVP\xf2\xf2;\xb8w_2\xaa\xc7\xb0\x85'pp\xef\xfec\xe8\xf5\xb6\x1e\x04\xd3-\x86#\xfe\xa3\x03=p]\xfeqt\x1f\x8e\xc0\x19:\"]r\x0f\xb6\x05\x97\x1d\xdd\xf7<\x9b\x87\x8d\xcc\x9e\xd6hFo\xb8E\xd9\x9b\xf0\xfe\xca[\\\xf2ft\x9cR\xceP\xe1\xac\xc8\xb4T\xc5F\xcdRj\x94%\xb6j:I!\xf0=<$\xf9\x8fkNw\xefi\x7f\xdf/\xfe~\xa4\xbd\x1f\x1dh\x1f\x12\x0e\xfb\x87\x8f\xf8\x8c\x12\x0e\xfbw\x0f\xd4[B\xdc\x84\x10W\xbd%l\xc4\xb7\x8f\x86\xea-a\x0f\xbe\x1d\x1d\x1cX\x04xtd\x80>\xc4*\x1dh\xce\xd7P^(BE\x9b\x8b\xd3|K\x0f\x1e\x12\xbdO9T\xfb\x80\x05\x83ib\xb1\xdd*\x82\xc1\xeb\x1e\x0c\xef\x1a+\x8f\x1e\x1d\x00\x0e\xf7)\xdc?\x87\x1e\x7fs\xf0\x10>\xc0\xfdC\xb8\x03\x9dZ\xbew\xef\xe0\xd1}5\xe7{\x0f\x0e\xef\xde5utppWv4:\xd0{\xa2\xbe\xe1\x0e\xdc?\xdcm\x00\xcd\xd6\x87\xb0\xc1v\x80\x10\xd2\xeb\xe9pW2*\xbd}}*\x94\xb1\xb7\xafOa\x1dD\x8b$]3\xab\xdb!\x08\xfb\xc5hx\xc0\x07]\x81P\xdf\xb4\x18w\x87\xf0\x81\x12\xc5\xdd\xbfw\xef\xf0>b\xad\xa8\x9ex\xf0\xe4 \x8cx\x81\xd0\xf3p\xbd\x1e\xd6\xd6ktP[\xb0\xe6u4\x0e\xbc\x03\x01+\x02\x890\x8c\xfbT\x12qs\xe8\x15\x80\xea\x95c7\x96\x15\x95\x96\x88\x05\xd4\x97\xe5\x8e\n\xef\xd8\x94\xb9\x85#K\x98}\x17\xc6!E\xe4:\x02\x87\x93?,~\x99$\x11\x0b\xe2zSG\xe0\xe4\xe9\x96!Y\\\x04QF\x7f9\xfa\xb8\x0b:,\xf5\xa5hw}\xc9\xae\x1e5\xc51,8\x02F\x1e\x18vQ\x87h\xd1\xc2\xc5-&\x0c\xa4[+U\xa5\xc8\x9c\x0fX9\xf1:w\x04MF\x87UgR\xb9ht\xa5\x12\xfa\xd2\xd8\xca_\x89\x0e\xd8\xa2\x18%bD\xba\xe6H\x96\x03<\xb3\xa9\x7f\xe4\xf8B\x99b'\xf6d>\xa6%,qM=\xe3\x83\xcc1\x1c\xa8\x88$\\\xbd\xdbrvL\xd9\xf29GZ\x10+Z\xc0\x13\xd8r\x1e\xb4h2\xe1S\xaa\xe1EC\xa6\x879\xa5$n\xc9\x16\x11\xba\x19\xe6\xb7\xedU\xd3A\xca\x87\xafm\xf9\x12\xf8\xbcQ\x08Skp\x05\x13\x98\xab\xf9\xaea\x02W4\xdf%\xcds O\xe0\x8a\xcfs\xe9\xc1\x8c\xd3\xa4\x15\xf4p8\xf3\xe9\xf2\x9c\xf3\x1b^`-\xd4\xb0\xde\x04\x9a.V`\x08+\xbep\x91^\xdeLp\x88r\x97{\xe4\xdd\xb5W\xaf\x8bj\x02gf\xedDL\xc7o.v\xa1\x8f<\x024\x995\xbe<\xba\x04\x86\x88_\xa1-\xea\xc6\x87\x0f2[\x8fdFJ|,\xb7`\xa8\x9d\x17\"CM\xec\xba\x12)\xf1c \x08\xb5%$\x8fp\xdbW\x8e\x1b#vXn\x94P\xbdN\x8e\x93\xc1:\xb8\xf93\xbb\xcd\x94\xee\xae\xde\x18\x86\xc5\xd1m\x04\xfbU\xb5p\xa6\x84 ^`f\xa8\xb8\xc1m\x93T\xd2443\x15\xaa\xdb\xaf\xb0\x9b\x0d\x8e\xb3\xfe\xd1&\xc0r\xbc\xde m\n}D\xe1\xe9\xb9\x8f\xc86$,\x1b\n\x0c\xf3\xf1\x94\x99\x13\x96K\xf1\xff\x05\x9d\xc1\\\xd3\x7f'T\xe8\x86\xb0\xf1\xa6\"\x00\xdf\xd8\x04\xe0\xb3\xaa\x00|c\x11\x80\xcfp\x8c\xb9^tm\xa5\x1c\xbc\x82\x18<:]\xb9\x87\x0f\x10\x1c\xcf\xe0\x08\x07:\x821\x9c\xa8\x9d9+\xc4\xe0\xb3B\x0c>+\xc4\xe03RJ\xd5[\x12\x83\xcf\xa4\x12 G\xc0es\xe8\xf5(\xc2\xda5Y\x9b\xb1\x8f \x86\x91\xe6\xb4\xc7j\x0e\x035CJ\xba\xa2\xcdp\xd9\xaa\xa0\xf2\x8a\xbd\xde\x12\xabn=\xb8\x82'\xe0\xbe\x87 \xdc@\x1f\x96\\B\xa38\xd5\xb7\xba\x04~\xe5\xc3{N\xa2\xc4\x96]a\xf1^\x9bIl\x96\xc4y\x18ow=\xe6\x03\xe1\x0d7\xe4\x00\xf3\x9bo\xc5Ee+\xcc4\xdc\xf8\xf6\xee\xa1\x18'o\x077\x10\x8e\xc0\xe5\xebz\xa5\x86[]\xd6\x1b\x0f\xe3\xa9q\xd2\xf5\xc7\x83\xa1\xc0\x11\xea\xbfR\xf3\xd2T\xf3R\xaby-\x8f,\xd4\xf6\x188H\xa1\xb7\xf4zk\x1cn\xd6\xc4\xe5\x8f}\x90\xb0\xb1\xb6o8oN\xce\x97\xc3\xd3{\x1b\x04\xc1X\xfb^\x9d\x10B\x98\x8c\xf88\x81\xc8\xbd\xf5a\xc3\xdf]\x8b\xe2\xfc\xdd\xa5x'\x8e\xc4W\xeaH\xfc\xd6\xf3 \x98\xde\x9ec(KXMW\x82\x96\xf0\x17\x86\x9bY 4(\xf7\x18\xe5\x98\xdbsO\xbf\xa6\x85r\x06\x1c\xc1\xf1\xf4Xk\xe6\x12\xc6\xb2\x8b\xe9\xb1\x0f\x97\x16\xc5\x8c\xaf\x06\x06\xf5\xea\xf7\x17^\x93\xc1\x8cou\x99\x16\xdeb/D,\xd5.\x12UE\x8c\xa8\xef\xe7\x1f\xec\xbf\x16\nt\xaet\x95\xe5\xc3\x07X\xf2/^\xfd\x93\x0e\xb7\xe5\xdd\xe3;\xb7\x86'\x90\x19v\xce\xfb\xcc}\xe3Hb\xdd9D\x84\xcf\xd9\xa3\ns\x90B\xc5\x1f\xcak\xd69\x93\xc1#K*\x83\xc3\x87#\xaf\xfdtO\xba\x13\xc8\xebpp\x04\x7f\xffH \x0dAB\x8b\x91\xeb\xc7e\x9d2]\xea\x03\xaeF\xd5\x13\x03\x1e\xb6GI\xb4'\x85HE\xa7\xad~p\xa2|\xe2\xb2Z\xfa\xb3\xd6\xc8p\xd69\x8d\x0e-s\xba[M[D\x81\x05\x1f<\xea2U\xc3\x0cJ\xfaT\x7fD:\x94\x12\x16Qt\xfc\xfbG.\xad\x04\xa83\xd9D\x16\xbc\xf01\x0d,\x9a\x10\xe6\xe9\xe3#\x88\x0c\x82L\xec\xce\xf8\x07\xa0\x98\x81>\x84nDA:g6\xbd\x18\x8aU\xcfv[`\xf3\x19\xeb\xfe7{E\xdb\xdf\xc0,I\xde\x87L\x7fs\x9cln\xd3p\xb9\xca\xdd\x99\x07\x07\xc3\xd1A\xff`8\xba\x0b\xaf\x93u\x10\xc3\xd9*\xbf\x8d\xd6A\xdcT\xe1\x1e\x1d\x9e#\x0f\x99\xa3*O\xfcf\xc4\x99H)w\n\xc4\xd3\x0d\x95\xc3?&\xb0u\xe7>d\xed\xa1)M8SI\xe4\x9d\xb14\x0c\xa2\xf0\x17\x93~\\],E\xa0\xc4v\xd7WZ7O}\xf8P\xbdm\x88pY\xa8n\x05d\x86\x16\xc8L0\xa9\x1e\x88\x06\xc3\x0cB\xf2\xfe\xab\xee2\xeep\xd0\x12\xa8R\x81y\x1c\xac\x9b\x1a\x93\x1auX\x8b4A\x07|\x18\x9e\x9b\xfa\xda\xb6\xf6u\x15D-]\xe1uu\xe8\x813q\xa0\x07\xdbz\x8f\xc2R\x06)W\xb5\x9f-\xadW<#(\xca@\xdft\x18\x8b\xc7\xd4\xd9\x8b\xe0\x85\x1b\x99\" \x89\xaa\xd9\n\x831 \x0dxA&\x00\x03\x14g(\x98?\x86\x1f\x83\x9b\xfe\xb3%\xc3\xc1\xff\x18\xe4\xab\xc1\"J\x92\xd4\x8d\x9a\xa87\x1e\x87\x0c\xe6\xc9:\x08\x8d=\xe8o\xb0\xd7\xe4\x15$'(\xfa\x98\x9cUe\x9b\xea\xd3\xe6\xdd\xe0D\xc1\x8d\xb3C\x87?\x047\x9f\xd3\x9b\x90\xc5v\xe8\xf0sf\xd8\xeaF\xd4\x04\xf4j\xbfu\xa8\xaf\xb5\xd4\x81\xffj2k1L\xc9Y\xebF\xca\xba\x1aP?N\xa9\xab\x04\xfb\x8f\xe1\x9b\xfd\xf2k.\x9a\xed\xff4}\xb7\x1d\x0e\x87\x8f\xf8\xbf\x07\xc3>\xff\xef\x01\xe3\xff>\xa4\x1f\x8b\xc5y\xef\xdf\xf6M\xc7c\xdb\xdf\xeax\xac\x1a\x93\xb9\xfc\xd7'I\xf8\x1dC\xaa\x8b\xfek\xcb\xeb2-\x1c\xc4t\xefk\xd7\xfb\xe6|\x7f\xd9\x16\x8b\\\x1eK\xa0\xbbF\xc9\x9e;\xf4J^\x1ae'\x8d\xf2\xec\xdb4H\xbd\xe3n\xb3,\xb9i\xc8\x1c\xf32+\xb2\x92\xc7c\xbb<\x9eV\xcd\xd3\xb1E\xe4N\xd1U\x00\x1d\x07\xee\xdc\x81\x14m\x97\xf7\x0fG\xe8q\x11C\x0fF\xfa\xc9|\x83X^s\x08\xc1\xca\x16\xc1\x9a\x0e*\x9fbW\x07h\x1c\x12n\x1c\\un0\x1c\xcb\xe3\xcf\xd1\xf0\xe0.|C\xde\x1a8v\x0fz\x90\xf0\x1f\xd8^\x8f\x8e\xf2\xed\xe4'\xa7\xebp\x07w\x87ey(\x84}\xb8\x7f\xb7\xf8\xc7\xf3at\xf0\xd0Z\xc6\x83?\xc2\xfd\xbb\xd62\xe5\xcf!\xfeB\x1f\x84^\xa3\x1bg\xa3\xbd\xban\xf25\x9c\xc6Qh\x89\xbb\x0f1B\x04\xcd\xf4\xe0ny\x84i\xf3$S\xc3\x04R\x9a\x00\xe7\x97\xbc\x03\xfeR\xb5?zt`l\xa0^WTH;\xd8\x0d\xda\xd2O\xea\x90\xb2gw\xf3\xe7@\xc3la\xf9\xedF\xb2J\x91\x86\x0b\x96(\\\xa6z\xfe/\xcb\x19\xb2\xc4\x93\x86[d\xa1\xddAs\x9e\xb4`F\x80V!v\xc3f\x8d\xa9\xc5\x94\xb62\x99L h4\x0d\x83\xd2\xcbCx\x02\\\xbao)\x9c\x90S\xcd\xf0\\\x19\xa7\xc2^\xcf\x0c\xc8p\xbd\n#\xa6\x14'>\x14s\xbb\xd2v\xc7\x81N\xf3x\xe9\x8f\xcc\x19r\xfe`\xdfIK\x8a\x00\xd0\x9d\x04\x85v\xbaS\xbb\xc2\xach\xa3\x8eZz\x8d;\"\xbd\xc1\xd4\x99\xfet\xee\x9c\x97\xcd\x07d;\xe0\xa2l\xcd\x9e\xa3\xda\x12\xa4\xbd\xed\x92\xf0\x0ea\x81\xb0\x1a!%\x1bd\xc96\x9d\xd9\"Fx\xbe,\x18\xca\x82\xe48\x98\x0efI<\x0bD\x10Gv\x0d\xaf\xd9\xf2\xe4f\xe3\xa6\"\xe0\xcf\x07\xc7\xab\x99]\xc1H\xba\xd8`\x11\xc6\xf3\xe3U\x90\x9e\xc6sv\xd3fB\x93\x0f\x87\xd1\\\x87\x0f\x85\x89\xfd\x86\xb3\xa22\xceZ.>\x95,i\x89\xeb\xf9\x02E\x0b\xd7\x98X\xa2\x1c\xda\x1c\xdcx\x10\x05YN\xc3\x7f\n\xb9\xf7\xd8\xe38\xd0\xb8]\x86\xfc\xcc\xbeX\x8aoos\xb6\xd3R\xc8\xd9\xf0\xd5\xc0\x1b\xb4\xb4 \xe4\x95\x858\x83\xf5q&\xe6x\x8b\xc4\xc5\x9fu\xbe\x1a*\x17\x87n\xa6\xebc\xa6j\xf6\x0d\xe0\xd2\x0c\x9e\x88\xc6\xc6\xbd\xb3EY.\xe4\x1b\xe5\x98\xc9\x85\x8d\xea\x89\x88\xfe$\xe8t\x84\xfb\xd4\x92~KQ\xc6\x84\xeb\x8c\x94)?\x99\x0e\x8dq6tyg\x97\xd5j\xbd)\xa3?r\\Hc\n\xdc\x92(\xe8#\xb50\xee%\x7f>\xb6\xedA\x8a\x06W\xd9\x8b\xf1^\x0c\xd8D\xbc\x96\xa5$\xa9\xf2\xc9\x84\xbcA\x92B\xb4+\xcd\x89\x8f\x15}?\x87\x9e\xafdN\xe95\xca<\xa7\xd0=\xa8\x07\xee\xa2Q\xe0\x10\xde$\x9c\xf4\xbdJ\xc2\xb8\xc5\xe6!\x9f.\xb6\x0f\\\xdb\x99lW\xae\xb1\xc6=DjIU\xc4\x13\xd6\x12\xa1~j\xef\x1b\xa7o\xe1\xfajBo\x84\x85\xe8\x8bM\xac?\xb9\xcf\xd7\xf2\xf9w\xdf\x9d\x1b_\xeek\xbb\xfeQ\x1c\x16t=\x13\xf8\xba\xdf\xef\xbf\x8b1\x00\x96\xb3\xca\xf3M6\xde\xdf\xdf\xb0\x1c\xf3\xdd\x0f\xb2\xeb`\xb9d\xe9 L\xf6\xaf\x0e\xf6\xe5\xaf\x9f\xb3$v\xde\xc5\xf3d}\x11\xce\xc7\xe0|%>\xf4\xb7\xa1\xf3\x8e\x0e\xc1\x82\xd2>\xab\xa60\xf2\xc15-\x07\xf4a\xe6\xc1>$\x1dg\xa5?ie{\xb4\xa3\xc0\x0cz\x10\xc17d\xee\x1d\xdc\x83#8\xc08\x0e\xdf`$&\xfe\xbf{\x17\xfa\xf4\xd2C\x95\xd2\xa6\xe0\xd8\x9e\x02Py\x17#\x0e\xac\x08\\\xdf3t\xef\xf5\xf0\x00\xf2 \x10`\x0f\x88L\xd37.\xb1\xa0\x0b\x90\xbe\xd2\x81\x0f\x8f\x1eiPo\xc7\xce\xea\xf3\xd1\x87G\x1d\x8b\x7ft\x9b\xcb\xd9/%5\x90\x84h\x07S\x85|2wK\xf1\x9e\x8dG4\xf2\xb1\x84\xb4\x93\x8c\xc8N\xa4X\xbe\xdd\x8c\xbb[\xbb\xa1h\xd4\x1571\x91*y\xeap\x8c\x8fU|B\x87\xe6\xdcS\xc6\x9d\xdck\x8a\x1d)\x1f\xe1`\xf4|\x9b\x8a\x00\x90q;\xb8\xb3\xf9\x92\xbd\\,2\x96\x9bBz\xeb\xcf'\xed[\x9e\x8c\xc1\x92\xab\x80>\xff\xd7\xb8\x89\xd6\x85q\x9e\xfc%d\xd7\xe5u6]\x9c\xad>\x92Wc\x9c\xf0o\x93m<\x0f\xe3\xe5q\x14\xb28\x7f\xcdf\xb9\xeb\x0dV\x88'\xed+\x14H\x8a\xae\xf8Z\x0f\xc2\xf6j3YM\xe2j{\x95\xc5N\xbcc\xc3Q\x02zm\xa1n0\x05\xf2\x13Xp\x88\n\x91^<\x85\x19\x1cQ\xbc\x01Z\xc91\x04\xe2\xc3\x06\x8e s\x03N/\xf9\x9b\xa2\x00\xb1\xd2\x06\xccn\x80\x81\x19\x8bs\x96\xd6\xb60\xed\xb0\x8b\x99\xdb$]\x94I\xe1>\x1c@\x8f\xa3\x0b\xc7\xaa\x96]\xe7\x85=OL\xefS\xe6\x94\xe5\xc9f\x0c\x81\xbd\xc0:\xb9\n\xe3e\xc7\x0c\xfcP\xd0\x86\xbd\xbd\xfa!\x90|\x1a\xc6\xc3\x81f,\x80\xa7\xb1\x14.\xdfX[Jca\x833N\xbdUN\xb3\xa4\x14?\x90\x7f\x9cDl]s \x04\xc1G[\x17C,\x82\xd0E\x88\x9f\xfd\x17\x1a\x91\xc5\x8f7\xc9\xa6\xcb\xd0\xd0j\xef\x9a\xfb\xa0x\xd7j\xe0\xd4n\x18/\xc5\xc8yo\xea#/k^N\xa4\\\xddd\xe5\xd2l\xde$\x1c\x92wL]\x81\x9bkIN\xa9P\xa0#\xac\x95\x978\x8cc\x96\n\x89\x01\x97y\x86\xc8Bov\x1c\xa3\x00\xadn\x8b\"\xf5T+\xa2\xe6\xc9\x86\x93 \x14\xde\xe2A\x82,\xca\xb4\xfb`\x06W\x83\xb75\x06%\x0drv\x86\x1bQ\x8b\xeah\xa3G\xd2N\xd5\x08N\x96D2e(i \xcb\xaf \x9c\x03\xef\x8ek\xff_\xbb\xed>k@'h\xec\xe8S`M\xc9\xe7\xac\x04^~' \xdc\x15S>\x0d\nw\x86/\x01/\x7f\xa8\xbct\x82\xf9\xfc\xe4\x8a\xc5\xf9\x0fa\x96\xb3Xd\x0c*L.{b\xcaq\xf2\xff\xb2\x98\xcc/\xf8\x9a\xb9%\x9ac\xbc'&E\x1ag\x15fy\x92\xdeV\xad9\x9bm\xb6:\xcb\x83\x9c\xcc<\xa2\x90y\x9d\xb8L\x13\x92 \x08\xe1\xe05\xe3\x85Qj\xd4+\xd7%\x0b\xcaT*>\x0fj\x95\xf9\xe8\x82m\x9e8\x9e\xda\xdc\xea\x82\xb8N\x94\x04s\xc7o\x87 \xeakWE\xb1ql\xeb \xde\x06\x91%\x86=Wq\x1a\x86\xbdI6\x19\xaen\x9b\xe7\xb5|\x18\x86\xe8&K\xdc/,\x16\xdc\x8cRH\x15\x9f\x12T\xf1\xc4\x8bAQ\xce\x06\xf7\xb0\x87\x97\xf3\xc40e\xb0\xf7\xc1*\xc8\x10\x92v].iUL\x06\xa8\xd0\xb8\xde\xa0\xd0\x08\x9aO\x0dZ\xedC\xd2h\xa7 {\xc9\xa4x\xf0\xed\xed\xe9\xdc\xadM!e\x0b\x99\xc1\xef+\xc7\x9b\x8e\x9a\xf2\x05\x83t\x8ek\x1b\x05\xd4\x0c\x05$L&\x850\x99s\x1e\xc3:\x88\xdc \xe4\x98D\x08\xe9\x9c5\xb5+\xf4Cx2\x81\x14\xc8 \x1d\xd0\xff\xdc \x124\xa8\xa8\xd0\xac}\xd9\xa1\xd9D\xb6\xf6L\xae\xebW2\x8aO\xe1\x86\xe5\xb8?}x\xf7.\xf34J\xe5\xbe{\x97}\xf87\xcf\xe4\xc2i\xc5\x9aY\x14\xce\xdewB\x99\xd2\xb1!\x1b\xe4A\xbad\xf9c:\x89q\x9e9\"\xd8L\x1e,_\x04k\xf6\xd8\x13G\x9f\x9b eq\xfe\"\x997$\n\xdfs\xf7\x90\xb1\x8c(\xe0\xd7\xe0z\x15\xceV\xa4&`\x1a\xc8?\xb3[\xfa\xb5fy\xa0~\xcc\xf24R?\x82\x88\x97j\x8c\xfd\x82\x16\xc86h\x94\x90\xa8\xa8\x94\xa2\x10\xf5\x08d\xe52G\x95\xdf\xe3\x9a\x91\xbc\xfa\xc4\x1a5\xd1\x80\xb6\xb9R{\xca?\xd0\x88\xac\xb8\x96\x82\\\xc7\x8d\xeb\xe7k\xd5\xa7\x94\x02pW\x90\x06\xdd\xc5\x0b\xb3\x18\xe4y\x1a^ns\xe6:\x9cv8\"\x85A3\xd9\x12\xc6\xfe\xe2\xce\xf6W\x0e\xf9\xb7n\xc9C:\x1f\xcc\xa2 \xcb8\x90\xb5\x86\xfa\x91\x06\xdf\x06\xb7w\xf9D\x0d\x840-\xdcZ\xdcQ\x9b\x89\x10\x8fW\xber\xc4\xd1j\x87\xbdB\x0c\x88\xe4\xd1J;\xb9\xca$\xac\x10q\x8c>\x95.\x01egJ\x19'\x08\xcf\xc94\xd5\x06}W\xe2\xcac'\xd6\xa5?\x15^\x02\x93\x16c\x164\xab\xd3\xf2Y\xec\xcc\x19\xa9\x16]\xff,3\x9c\x0c\xfa\xb0@/\xeb;\"x\xd9N\xb3\x94(\xa7\xa4<\xf7\xef\\\xdet\x8c>^\xfa\xf3\x11C\xbb\xa2\x94\x91\xf9\"\x83\xf4\xac\xc1\xe8af'\x16V\xf2\x07{!\xe9\x07\xa7^~t\xcb\xdea\x18\x9e\xd1\x18J-\xc5[\xad\xc1f\x13\xdd\x92\xa7 \x8c9\xac\x7f\xf8\x00\xae~\xa2\x1c\x9a\x0f\xa0;\xdd\xc9\x13\xc1\x1b\xe9\x94\xb2\xc8\xc9\xe7\x83sq\xc1\xb2\x1f\x93\xf96\xe2\x92^y_0}\xdbX\xcf\xc8\xa0\xeb\x99\x926m\xdc\xd8\xbd\xeb\x19\x02\xa8\xf0\x0f\x07\xd5\x0f\xa1\xf8pX\xfd\x10\x88\x0f\xf7\xaa\x1f\xb6\xe2\xc3\xfd\xea\x07L\xf6\xe0\x0e+o#,^MJ\x85'G\xbc\x15\x94&\xf1\x0f\xb2\x88\xb9\x87\x0f\x1fT\x1b^P\x94\x17\xcft1\xd3\x90\xf4Y?\x83f\x83b=E\x9c\xd5:\xac\xcb\x9b\xb1-\x97/A,2E\xbdX\xb1h\xc3\xd2l\x90lN\xe7\xe5\xe1\xb6;\x02\xaa\xd1\x0b\x7f:\x0b\xfe\x91\x9c(F\xe7\x89Lj6\xcf:\xa9\x9e\xf1JA\xb5\x92\x9b\x0f..0\xfd\xd9\x05\xc5\\\x1b\xfa\x18\x19R\x16\xf2<\x91#\x11K\x93{g\xe3\xc1D8\xc8\x93\xe52bg\xab\xe4:\xeeJK\xa4\xb0\x1f\x0e6i\xb2i9c\xcc\x85\xd3\xeem\xb2\xcd\x9fa\xdb-\x15b!\xb7-\x9b\x8b\x91\x97\x1cG8$\xd5\xd5\xcd\xab>\xc25;\xc3\x896\x17E\xad\x96s\xae\xd7,K\xa2+6?\xdb^\xe6)k<\x0f\xc53P\xcd?'@;\xf9@$\xc6\xa95\x84!KV\xc9\xb5;u\xd4\x0c2\x87\xec\xd9\xe7>\xec\xd9\x9c\x9a)u\xcfq\x10\xcfXt\xccE\xe2\xae[\x869j\x04\xbdo\xde\xae\xf4\xf64\x7f\xb9\xcdO\xe2\xe02b\xf31\xec\x85B\xa7\xac|\xb1\xb6b\xc8H\x03\xc5\xd8\xdf\xa4\x1c\x10v\x1a\xfb'\x80[\xb6a\xb3\x1d\x80m\x13\x98b\x8a\xea\x0fA\x1be,j\x10\x0c\x7f\xcbU\xe60\x84.\x1b\x7f!\xbf$F\xc9\xc11\x87ejs\xab\xa3M8\xb9a\xb3m\xde)q\"\xec2-F\xed\x9e\xc6\xaf\xd2d\x99\xb2,\x1b7&\xf2n\x18c\x1d\xfb\xba\x0e\xf6\x13\xa1\xe5\x8cEl\x96'\xe9\xaf\x00/]\x08\x13\x1f\xc2\xab _\xd9aK\xdd\x07\xc0\xac\xf6\x1b6\xab\x12\x15.\x9b\xfd\xe9\xcc\xf5\xe8\x12\xb1\xa9\xc4\xd4\xe1\x03Wt\xa6a\xf9\xcdt\xebW\xde\x82_\x0da\x7f\x85\x0d\xb0\x10\xf6\xf2\x1eX\nu\xdf\x06R\xd1\x9b\xb2\x00\xd6 \xc9\xc8>[\x13zZr\x8a\xfb\xa6;\x97\xb57\xca\x11\xc1\x87\xad&\x85\xf8\xc2\x07\x81OA\x7f;5\xcf\xe3=\xbb\x1d\x83\xb3\x0e6Hb\xde$\\\x8c\xce\x1c\xf34\x84\xe8\xdc\xd9]B\x1aJ\xf2A\xb2i\x07\x98\\\xc8)\x1d\x89A\"\xc4\xb4\x9c\xdc\x1d\xe3E\xb8\xcc\xbc\xb63w\n&?Of'7\x9b \xce\xc2\xa4\x834\xc2\x85G\xb6\xf9!\x8c\xdf\x87q\x8bX\xb4\xa5\xe2a\xb6\x89\x82\xdb\x97]\xa5\xa3L\xaf%R\xd9I\xff\x8f\xe6\x9a\x11\xa9\xb6\xdb\x0d\xd7\xa6\x10\xc6\xd7a\xfe#\xa2]\xcb\xeaa'OO\x16\x83\x1f\x83M\xab\xd2\xfe\xb3\xd0\xf4\x17x\x13\xfcOg^\x0b\x8b\x03T4\xc6p\xda\xdc,\x7f\xf2`\xd9\xe9\x86\x05\xa7\xdfV\xef]\xfd\xc9\xa4\xee\x91[\x14-\xfa.\xf4,\xc7\xc2\xdd\xf4g\xce6)\x9b\x059\x17\xf1OI\xf3-^9B]3\xf6\xa5\x15\xa3\xee\x9a\xccS\xf2!\x0e4\x86\xa4\xbdh\xa1\xa7t\xb8JQ\xd6UZTi\xa8\xaa\x8a-j\x19\x96\xaf\xdb \xc4\x82u\xb7X\xb4\xf7R\xd2/;\\\xf0SzU\x8b.\ne\x15\xaaE\xf6\x80\xbaN\xd9B\xf2AW\x81Z\xf4O\xb0\xe8\xc6-\xda(4\xe8\xc7-B\x12X\xd5\xfd\x16\xce\x0ff\x89\x96\x04b<\xd2\xa9}mo\xb0f\xd6\xd5\x9a\xebzB\x04P\xf7_\xd7\x1fa-\x89\xa4\x89V\xb8\xb5\x0b\x8f\"\xf7\xc7\xb6\xabb\n\x9c\xc7\xf0s\xf3\x8c\nm\xba\xcdh\xdf\x11<\xba\x82\xb4v\xb6-\x96P{\xd3\\\xb5tR)*\x97\xde\xb5U\xd7\x0eiUu\xed][uqD\xa7\xaa\x8a\xdf\xcd\xd5\xa4<5\x86\xcb\xf6\x82\x82\x95\x8f\xe1\xba\xbd\xac\xe2\xe3c\xb8h\x19y!$\x8c\xe1e{Y\xad\xe5W\xcd\xa5K\xf2\xd0\x18\x8e\xbb\x94\xd6Z?k.\xaf Och\xd9\x9d\x92\xe44\x86g\xcd\xa5u\xc1r\x0c'\x1d\n\xa3T9\x86\x9b\xe6\xa2\x8bx\x0co\xac%l\x87\xab\xb5\xb7\x1f\xcf=\xbfrO\xe4\xa3\x9b\x0d^mSfJ1\xb9\x92\xe4\x02-\x1d\xb5\xb3\xa9\x12s\xda\xab84\x16t\x00\xdd\xc7J\xdf*\xbc\xa4Z\xd5\xc4\x0c\xaa\xb2\x84\x8d\xf2k\xc6\x05\xcc\x15#&\x00\x13\xa0\\\x14\xbf7\xc7\xaf\xc8\xe6\xf8\x15\xd9\x1c\xbf\"\x9b\xe3Wds\xfc\x8al\x8e_\xfc\xc3Pw\x1a\x8a\xc8\xb9\xcb\x92k\xfa\xb7\xf6\xd9\x9a5\xfadi\xfeX&k\x8cv\\ip\xc7\xf2?\xd9\xe5Jx\x18bq\x992\xa7\x9a\xd6\xc8\xe8\xd4\xf8\x19\x07\xa7d\xa0Z\xb2\xfc\x07$t\x06)\xbe\xab}j\x17\xdbT\xbe\x83\xaa\x1c\x9b\x14\xdf\xc1l\x9b\xa6\\\xbch\x10t\xd1>\xe9\xc6\x98T\xbc\xd1y\x0d\xef\xe8\xb6\xceO\xab\x90Yd\x1dg5r\xa4O\xeb\xd7\xf0\"\x11\xdc\x03D\xf0\x19\xbcS\xe0|\x8d\xe7\xf5_;\xf0ug\xd2Z\x86\x00\x93@\xd5bg\xfc\xa4=T@a\xb3\xe6\xb6\xac\x06\xa3\xa50\\\xfb(\xcf\xa7\xcc88\xd3\x90\xed\x99\x18\x87Nwg>\xccj|\x84Z\xff\x171\x16\xcf\xfftb\x8c \x8b(\x15\xfa\xd5|a\xb0\x8b\xd3\xac\xba\xf0\xc3WL\x91_\x15_?\x82 \xe5 u3\x8fr\xe8\x0f\x1f\xc3\x0c\x9e@\xf6\x18f\xbd\x9e\x07\xd1tv\xae\xd7\x9c\xce\x0ca\x01\xc5R\xc6x\xe1\xd1\xe6\x9c\x8b\x18\xd8\xca-fA\x14 \x96\xc1|\x98\xf2\xba\xe72\xf4b\x84IZ\xc3\xc1,J\xb2N\xeeV\xc2\xc5J\xb7\xfd\xa11\xfc9G\x85\x10\x7f\xbbU\xffz 4\xc3\x8bZ5\xa6\xc77\xe3\xb7\xe0\\_\x96\xe4ub[\x1d\x0d\x9eqwcj\xba\x03;\xa4\xd3\x15\x96\xa6\x1d\x86\x10\xeeb\xf1\x0e\x84\xf1t\xf0\xec\xec\x8d\xbd\x14\xdfm\xed\x04-\x90)m\x1b\xcc`\x98\x0e\x15\xa1)\xd6\xc1\xa9\x81sS\x8aT\x87\xaf]f\xcb\xd0\xd0\xc6\x8a\xe7\xe1U\x8dT\xeb\x8f\xbaV5\x06g\x1e\x06Q\xb2\xecoo\xacWq\xbfH7\x97\xc1\xec\xfd\x1f\xea\xe57Z<9\xa5>^\xcf\xff\x8d\xfaZ\xb1`\xfe)\x9d\xad\x0e\x95\x1c\xe8<\xbb\n\xc2(\xb8\x8c\x18\xea\xfbI\x1a\xfe\"\\\xb8\x9a6\xfbr\x9b\xe7h\xe0\xb5\x0f8\xbf\xdd P\x89\x92\x9d&\x86\xfc\xa0\x8f\xd3k\xa8\x91\xc4\xba\xb9 \xeb\xec\xbc\x02\xd9\xd5\xb2q\xf4\xd7\xe1<_\x8d\xc19\x186\x0cd%\xa2;\xf0R;\x8f`\x9b\xd5e5\xfdY\xa5l1\x06\xe7+\x9c_\xc3 n\xa20~\xff}\xa9\xb0\x05y\x91\xe9~Y\x00\x9c%q\xce\xe2\xdc:\xfbh\x80|\xee\x8c\xfd\xcd\xf5\x06\xeb`S\xcaI\xdex\xfd\xb7\x85~\xce\xda\xcc\xb6\xc8~[\x0e?\x9e\x9d\xbdi=\xf0\x98\x17,\xc1\x1a\xb7D>e\x13X\xcb\x19\x96\xce\"[\x0f\x81*\xa6\xb8\x96\x93\xdb\x92\x91\xaf\xc5\x00\\1{\xd6\xdd\xa1\xe5c\xb3\xb4y\xf8\xd4\xbe}9%\n\xdf\xfeK_\x12\xcf\xbf\xf4\xa5\xff\xc5\xfa\x92\xe0|]4\xa6\xce\x97S\xf2\xeez@\\\xd7/\x06\x1a}|\x93\xa8\x83g\x9bI&\xafim\xe6\xd4\x15\xffR\xda\xccO,\x80\xac\xac\x8dy\xa4\x8b(\xd9\xedU\xb2\xd9n\x1c4,6+u{{\xbb)>\x89\xa8\x13\x14\xee\xce\xde \x0b\x7f\xb1D\x13\xf9\x92:\x10\xef\xb2\x7f\x9d\x06\x9b\xcd\xa7\x08\xbc\x1d\xe4U\xad\xb3\x04\x8e\xc0\xb9\xccc%\x113\x88\x92\xd9{6w`\\\xfd\xb0\x8d\xc5\xa7\xae\xf2\xaa\xf8\xb5\xf3\x14\xb2M\x10kR\xbb\x1c@\xa3\x98\xfe\xcf\"\xe5\xe2\x82\x7f\xa5\xad\xf1W\x1d\x96U\x13|\x1b\xea\x9bG\x8c\xf4\x14\xddkm#\x8f\x85u\xf8_\x92\x0d\xfcK\xb2\x81\x7fI6\xbf\xbddc\xbd7\xc0\x06Y\x9el8\xd4\x07\xcb\x80\xf8\xb0\x99\xff\xc8\xcb\x05\xd2z,:\xb1\x88&\xe8lop\xa9\xff\x9f(\x8e\x94\x1c\xd5?\x8dy\xef\xc6R9\n\x96\x85\x94\x8b\x0b\xceH5\x9am\xf8\xda\x81\x0b8A\x1a\x06\xfd(\xb8d\x91c\xea\x06h\x9c\xd6\x8e\xe4\xf7\x0e]}!>\xfeO\xc2\x93\xd9g\xf2\xe4\x86\xfa\xe6\x11\xff/\xb4\"\xcc8K\xad\xf1\xd4D|\xa9q\xe1PV11\xdb\x99\x89\x0bo\xc5\x87\x1a\x17\xce\xc4\x87\x1a\x17\x8e\xc4\x87\x12\x17\x9e\xc9\xc8G3\x11\xf9\xc8\xc4\x8fg\xbf=?^t\xe5\xc7\xb6\xb0EU*l\xe5\xb9W\"\xafz\x95\x98[}g\x92:\x0fl W$\x16+\x18$1\xa7\xcd\xc7\xab ^\xb6g0\x02\x8d\xcf\xb1A\x1c\xac-\xbaXP\\[\xab\xb0\xe8\xbf\x7fDL`&\xf4\xe3\xfc.\xc3\xbb\xee|H\x9d\x06S\x0fb\xc7\x1b\xa9\x1f\xdf*\x15\xca\x0d\xc8\xe3\xd7\xd2}\x94,M\x91tv\xe8\xbfY8\x08\xda\x14t\x8a\xab\xd0\xc9@B\xc1\x154\x93H\xcd\xe6\xdd\x1a\x80U@\x819\xa25 \x1d\x19\xe4 \xc9w\x96\x99\xc5b\xcd\\s:\xd3\xa0~\xec\xbe\xc3b\x9a7\xb3\xe3Y|P\x84\xfa\xe0\xbf,8\x0ee\xd9)3\xcaN\xc1?@vj6\xe2t1\xf6\xc4U\x00i\x83\xa5\xee\x87\xeeyW\x1bR\x88\x85\xbb\x9d\xd0\x07t\xd2\xcd\x91\xff4g\xeb\xa6\xabH[*Jy\xe0\xda\x8cO\x19\x15\xfe\x96d\xc8\x96\xa3\xf6\xa4do\xb2\x97\xa5\xc0\x19\x8b0\xcaY\xfaIH\xb7\xb77\xc3k?\x96(\xea\x80\xd8g\xef\x7fc\xee\xbfc\xe7r\xe5D\xd4]\xbc~\x94\xdfnXC\x8c\xd8\xa6\xc1\xcc\xbf\xcc`&;\x0c\xa6Q\x8f\xb0\xdd\xbf\xd8\xdd\x088K\xe2<\x08\x9b\x0e\xd9\xf7\xf66h\x95\xe4b\x87\xb5\xdfE\x92\xae\x1b;Nb\x8a\xf2\"o\xa5(6h\xebvS\xa6\xf6mI\x97Z\x16&\xe8t\xc2\xd9v\xba7[\xb1u\xd0z`\x18\xe3\xf2\xb6\xb4\xb5\xd3\xe9\xa6.\xc3\x8c\x81\x95d\x9a\xe6\x9a\x81vy\xad\xe5\xdeK\xf9\x08\xf5\x13\x8e.\x0bN\xea\x7fA\x00\xbd\xcc\xe3VK\xb5\x00P\x8e^\x0b\xfa\xf3\xc8:\x82\xack\xef\\e\xa6\xa3yi\xa3\xee\xac\xcdjR\x96m\xc8\xce\x0fX\xc6\xf1`\xfciC\x15\x1e!\x84H\x1d=B\xeaS*\x00\xc4\xba\xb8e\xeb\xf8'\x8d\xb5e\x0c|\x8b\xe7I\xdc\xe4\x97\xb1\x83\x97\x8as\x8cn\x1bh\n\x9bs\xa25o\x03 \x01\x94t\x18\xf0E 7\x9b%\x1b\xd6\x9f\xb3E\x83/\x87\xa5\x9bMq,q\xc6[\xc9 H\x19l36\x87<\x81e\x1a\xc49\x041\x04\x9bM\x14\x8a\x80\xd3\xf3p\xb1`)\x8bs\x88\xd8\x15\x8b2H\x16\x10\xccf,\xcbx\x95y\x90\x07\x90\xc4p\xc9VA\xb4\xe0\xdf\xf2\x15\x03\x16\xcfy\xa3\xe9\x00N\x82\xd9\n\x9e\xbd:\x85up\x0bs6\x8bx\x7fI\xcc Ia\x9d\xa4\x0cp2\xd9\xa0i\xf7\xf5Q\xf3\xa6R\xf6\xb7m\x98\xb2\x0c\xbbZ$Q\x94\\\x87\xf1R\xb6\x04Dg\x80b\xe1'1\xcb\xe06\xd9\xc25\x9f\x9a\x9ac\x9e\xc0\x19\xa5\xd1\x85\xb7\xa7\x03\x07\xe3\x03\xef\xc6\x81?\x8d\xfb~\xac\xbb\xd64J<\x9f\xcb\x91A2\x9f\x06%\xc5\xbe\xf0\xdb\xb6\xa6w`\x00\x92\xbd\xb5\x05\x8dA\x10oR\xa9\xda\x19\x04\xa7z\x9ft] \xeal\xa3\xa2\xe4b\xbf7\x1b\xd5\xef\xf2<\xc8\xa7?,\x96\xa8\x7f\xb6\x93\xa1\xffy\x17\xb6\xbe\xa8\xda\xdd\xa6T\x8b\xd0\xaaH\x0b\x9aUo2\x905\xeb\xdc\xbb9\xbaw\x93kC\xe5\xe3\xd1\x16\x1a(\xd8\xc1}^h\xdc\xc1&\xfc3\xbb\xe5\xc3hR\xa4#*|\x19d\xe1\xac\xad\xecL9\xd17+\xdb\xb9\xce\x9a\xcc\xda_v\x1db\x06\x93E\x13C\x9a\x05\x19\x031\x0fgl-\x06bh\xb6\x83\x8dV\xce\x02\x1d\xb5&\xe8\xae9AW\xed j\xfaJ\x87\xc8\x1c:+\xec\x10\xf9c'\x0d\x0dHF\x15\x1a\x9a=\x8d&4\xe8\xf6\xf2\xb9LY`9V\x05\xb5\xbf\x08z\x9f\xb1\xbd\xd1\xbf\xb6\xf7\xf7\xb9\xbd\x92U~\xf2\xcev\x928A\xedn\xf3\\|p\xde\xc6\xef\xe3\xe4:Vas4'nTB\xc1\xf1a\xd1\xf5v+t8\x0bo\x1b?\x8d\x1bz\xe0\xf4\x7f\xde\xae7V\x15\xcb\x90h\xe6\x7f\xf8 \xe8\xefR\xba\xfc\x97L\xf9\xbfD\xa6\xe4\x82V\xd2@HU\x1c\x00\xd7A;E\x93\xd0\x14\x17e\xd7,\xcb\x82%k*\x9d\x16\xa5\xb3d\x9b\xce\xac\x02\xd4\xe7\x92\x1e\xdd\xc6\x83\xb3\xb5\x85m\x05\xcc\xd3}\x1b1\x13\xe4\xea\xcfe0{\xbfL\x93m\xd4)\xd5\xe7\xfbm\x80\x1e\xf5\x07\x97\xe7\x1f\x16\x98\xbay\xa7\xa1t#\xaa\xc9\x95\x16t\x7f\xea;w\x8a\xd4\x10\x9c\xe0\xe14\x1c[z\x9c\xfa\x92\xdbX\xd8\xef\"\x94w\x1b\xdc\x83.(u0\xb2\x81\x12\x95\xba\x99\xc4@\x19\xe6\xda\xf7.\xc44\x8d\xcei\xbc\xd9\xe6m1v\x03*\xfb:\xb9n+\xb9\xa5\x92\xc7I\xa3\xb0\x08*\xff$\x1e\x19\x9fp\xc1\xac\xad\xfc\x8c\xca\xff\x18\xa4\xef\xe7\xc9ukX`\xcaB\xe9\xfc C\x9d\xbe\n\xf2U\x9bO\x0e\x08\x17\x96\\\x04W\x12\xa4\xa9\xb9\xc2\x1c Y\x10E8\x85\xcc\xf5v;\xf0\x92\x8fdo$\x11\xf3%9\x9d;\x1e\x9e\x7f}\xba\xe9\xa2\xdb9W\xcb\x19\xea\xean{\x99Y2g\xaaT\xa2\xe2\x04\xbb\x0e\x07B<\x07t\xfe\xff\xff\x0f\\2pz\x8e\xbd\xa5E\x9b\x11\x84\xa2#OU\x16\x19\xcd\xe7\xce\xf1!9\xb7V\xc6\xb4\xb6\x9bF\x87\x98\xd5}\xc3\xf5\xb2y\xd3\x19j\xd0\xb62\xad\xb7\xf4I\xf7\x19\xcb\xf5\x9a\xb3l\x96\x86\x9b\x1c\xa3^7\xcf\xe5\x93\xc7\xa4\x1f\xfc\n\xbd\xa8\xeb\xd6\x96w\xf5\x8b\x8d\xe24\xde}\x0ca\xfc\xd9#\xa0;\x13j\x14\x88\xeec\x07\xc1\xa4\xc1\xf1\xa04\x18\x07\xbe\xc1\x07\x1a\x9dB\xb6mC \xdb\xc0Dx\x8ep\xe5\xabE\xcd*L\x9e\xf2\x92\x06\xfel\x82%\xcf\x87yS\x98\x8a\xae\xde\x83\x9f\xe4g\"\x1fT\xcd[\x0f\xb2\xa1\xfd\xe4\x1d\xc0\xea\xefD\x9f:\x0b\x1a\xa6\x80\xa9\xa6\xc3\xec\xf2\x907m\x97\xd3u\xc1\xa2N\xbbK\xbb\xa67e\xdd\x85+\x91\xfa\x8e\x15\x97\xbcZN\xe3\xc8[6\x0f\xd2%\xcbi\xe3\xede\xe5\xdd\xb7\x8a\xbf<#\x91\xbcmg\x85\xc0ega6\xf6\xc5\no\xfd\x10\xd3L\x87\xadz\xfc\xbf|\n\x8a\xe7\x93\xac\xbe\xffd>\x05\xb0\x9bN\xde\xe9f)\x88\x9e\x7f\x83\xc4\xdc\x0b*\x186\x8cb\xdb%|\x05\xdf\xd1m\xab\xde\x11a\xa9f\x9d`&\xf3a\x0b\xc1w\xb0\xcdXj\xbfP#v\xbfK\xf6RR\xce\x1b4o\xa9\x9c7\xccS*\xe7p\xd4Bs\xe4\xa8m\x8a<\x7f>r\xf0\xb4\x9a\x19\x7f\xeb\x94\xa8\xffp=\xbf\x8bc\x06\x94\\HZ\x95\x0e\xbaM,\xf5\xfcX\xd3\xf39\xda\xd8\xd6\xbe\xbe\xf0\xffK\xb5\xfdv\xed}\x978\x93\xf0;\xd0\xf6\xa3O\xd3\xf6wS\xdf\x17\xbb\x99\x08\x0c\xda\xbe\"z\xedj\x7f\xf2\xab\xaa\xfduc\xa3\xfetP\xfb[N\xccH#\xb1GH,\xd4~\xe7\xdb \x0bg\xe5\xe8\x88\x8e\xbdj\xab\xce\xdb\xac\xc3\xa7]tx\xfb\xb0\xad:\xbc\xadJ\xd0\xb6\x14\xad6\x89O\xd7\xe1?yLU\xdd\xf5\xad\xe4yR}\xb5V\xac\xa8\xaf\x8e\x0f\x1b\xfc\x9f\xeb\xaf\x0d~e\xcd\xc3\xf9\x82\xfa\xabpC\x9f#q\xa7?[j\x10\xafw$\xde\xfe*\xfa\xf1\x17\xdb\xa8WA\x96]'\xe9|\xe7\x8d\xd2\xed\x0c\xbf\xde>\xed\xbe\xfa\xc16O8g\x8bX\xcew!f\xd7\xfd\x8d\x98c\xb7}\xebXZ@P\xc7\xd2\x9f\xb6\xcb_\xc4\n\xf2Y\xde{\xff$V\x10\xd3\x11yy\xc8\x8b\xdf\xbf\x15$\xd5\xac \xf6R \xda\xf7;\x18I\xd2\x16\x99\x8d\x1c\x9b)\xb5\x176gf\xe0\xc14<\xe7\xb2\x85\xaf\x9b@\x9a\xe4V\x94q\x03\xf3n\xa2\xe5\x84Y\xa3\x0b\x94w\xf5\x9f\xc9\xc7aa\x8d\x1b\xb2\xb0\xf98,l>\x0e\x0b\x9b\x8f\xc3\xc2\xe6\xe3\xb0\xb0\xf98,\xc8\xb2R\xfe\xc0\x05Yw!M,\xfc\x8fGw\x1fxf#\xcb\xe2\xb77\xb2l\xbe\xa4\x91\xe5\xf7\xe6\xf80\xff]:>\x04\x9d\x14\xee\x85*\xd9A\xc3\xe3\xbb8\xe3 B\x17\xf8\xb3\x06\xc5\x07\xa3\x98\x0c\x8a\x04d\xae\xd0\xc8\xed5\xae`Bb\xf7\x86$\\%j\xb5f\x16]Wj\xce\xa2\x90\xc5\xf9\xa9H&\xba\x1a\xc8\xdfm\xed,\x8d\xed\x9c\xb1Y\xca\xf2r[\xf4\xae\xad\xbd\xdbJ{R\xacx\x8379\xb0\xb6\xc8Q\xd8\xbfL\xe6\xb7\xceg\xbb\xa7\x04\x9b\x0d\x9d\xb5\xad\x06\xe2O\xfb\xe0\xbe\x84+\x0b]\xdb\x1c\xc3\xf4\xbc\x01\x14\xc5\xe27\xa6\xdb\xd4W\xb51\xb9favkH\xea(\xd7y\xdc\xb8;\xfan\x8c\xe1\xd6X\xee\x1f\xe0\x8e\xf3\xab\x18\x9b\x9a%\xbd\xaeaU@\x85Vi\xa3?\x00\xbbEV\x81]\xa3\xab\xc0\x8e\x11V@\xb0\xe1\xbc\x83\xcdkKS\xec\x96/\x05\x8a0+\x9d\x8c^\"\xa9I\x07\xa3\xd7\x82Jv0zm\xba\x86y\x01\xe9J\xb2\x83\x85lE\xe5w\xb3\x90]Q\xa5\xae\x16\xb25\x9e\x1b\x84\xd9\xcbgg\x87\xcd%9\x89^\xbb^-\xfe\xe01\xd7c1\xea ^o\xc7\x9f\xcd-\xdd\x16-\x11\xf59N\xd9\x9c\xc5y\x18D\x19\xb5T\\\xa4oi\xea\xff\xb2\xf7\xef\xebm\x1b\xc9\xa28\xfa\xffz\x8a\x12fN\x06\x1c\x93\xb0(\xdf\x99(>\x89-\xef8c\xc7\xde\x96\x9d\xcc\xda\x1ao} \xd0$\x11\x83\x00\x02\x80\x944\x89\xdfe?\xcbz\xb2\xdf\xd7\xd5\xdd\xb8\xf6\x0d\x94l\xcb\x19c\xd6r(\xa0\x80\xbeUW\xd7\xbd\xe6\x98\x04\x06I\xfc\"6/\xeci\x0d\x8eu*I\xc8\xe2\xf9\xd9\x91\xc0\x9f\x14\xfc\x96\xfeSg\x98)\xba\x9d\xb9\x07\xdf\xf7\x0d/\x1e\xa1\x15\xe6Cj\x16\xe5\xc2\x82\xb8t9u\x80W\xc5\xdf;\xbaT\xa7\x9c\xad\x1fG![\xbff\x88\xbf\x08\x040\xf4\x0fsC\xe8;y\\/dK\x1dgT\x9a^\x99\xaf\x94?\x06\x07\xdc\x17\xdfm\xca\xd5\xc1\x18\xe8\xed\x16\x1a\x823\xd2\xb9\xbc\xacL\xca\x02\xbd\x0e\xd57\xe8P\xcb\xba\xca4\xe7Ft\x1e/\xab;\x0d\x9dj\xbd\xf5\xd0g\xa7\xff\xa5J\x9b\xc8\xde8\xd6\xb9\\mM\xc3\x14\xaaU\xd9Zj\x868\x86\xb3\x1d=\xbd\\'Z\xd3\x11F%\xc3\xcc9\xdd\xf8s\xfc\xb9\x1ci\xbf\x99\xf5?\xc9R}\xbcy\xf5l\x80{SRo\xd8\xea\x13o\xf2\x98\xe5F\xa9\x19\xd5~\xef\xea\x9f\x17\xd6\x1d}\x9d\xbe#\xac\x83\xd6\xfds\x1a\xb8\\\xd2\xd7\xab\xcei\x1b\xd4/s3F\x077\x88zm\xc7\xe0<\x89\xd3\xb3\xe13\xca6\x1e\xfa\"\xd6\x93\xb8\x87\x93\xf8\x10!5\x0e\\\x81i\xe7\x1b\x01*=\xb0~\"V\xe5:~\x82AB\x98\x01\xe5\xb4\x92\xb4\xb4\x13\xb2ij\xff\xcf\x068\xaf\xb57pe\xf9\x12;X\xf5\x19\xa3E\xa4\xf4\xe71\x15\x17\xa6\x9a\xf8y@UE\xf1\xaeL3\n\xa8\x1b\xa0r8\x11\xf2u\xa6\xdeDa\x7f>\x0dl\xb7\xb5\xb9\xc2 \xfd\xd2\x9f\xe0'/a\x83@\xfe\xd4JE\xfd\xb1\x11\xb0\xda*Z\x04\xcc\x9aV\x8d!\x08h\xe3=\xf9\xf9b\x9b\xa5\xb1b\x98i\xa3\x8dq\x96/}\x16\x18'\xc6r\x8a\xf94\xb4\x08\x87S6\x14\xd9\xda\xd4\xae\xa9d\xf8|(^\x81r\xafqR\x11 \xdb\xf3\xb9\x0bV\xbd6\xbf\xb8\x1bfiF\x98f\xdc\xbf@?B\xaeoi\xab\xe9\xb48\xf3\x8aA\x02B\xea\xf8\x95\x81=`i=\xb4M\xd7\x0e\x14W\xd9\xf0o\x1b\x92\x1b\xc6\xfc\xbf)\x08d~\xee\xafII\xf2\x02}\xe6)#\xc99E\xd4t\xaa9^|\xdce9\xbf\xfaJ\x8c\x19\xd9'\xc5\x96B\x1e\xd4\xdd;\xa3\x9f@f\xbc\x01'\x14\x8fZ>\xf5\xea\xe9\x0bk\xf642\x1cf\x15\xd8`\x02\xf3g=\xcd\xea\x89\xb3:\xc8,\xd8\xa6\x86\x9fA\x07\xbd\x0c\xda+\x86\xfa\x12\\\x1aB\xde*+\xc4\x87 m\xbd\xfduE{\xe9\xa3\xef\x93\x82YWl\xf6\n\x03\xfd\xb2_\xda\xfb\x85O\xe0n\x18\xcd,.W\xb5\xdfd\xf8\x7fl\xd3\xbdK\xec\x81=$\xfb\xa7\xf8\x8fe:W{-\x01W\xc2\xee\xb4\x92\x98\x9d\x9d\xe3 \xd3\xef\"\xe6\x9e\x0e\xcb^\x0df\xa5\xa1\xd1\x13\x12\xacS:]j\xe2\xa03y\xc1\x8a\x04\xef\xe6\xa9\xa2 \xb8\xb84\xadZEt1\x9cc^\xdfV\xe9\xc3\xe8\xdea9\xa2\x1c\xb8\x01s\xfc%\xba\x8a\xb7\x84\xfb\x8c\xd9PD\xaf0*(i\x08gpf\x06\xe6[\xa9\x9a\x19\xf3\x1b\xf5\xce ^\x9a \x1e\x19\xb6\x05p\xdd\xe4% 54\x89\xb5\xf5|\xed\xba\xd4\"\x9d\x8a\xb9OM\x0c\x8bJ]~\x170M\xc4.H\x8dTp\xe7Q\x9au\x94\xd0iO\xaf\x96\x03\xd6^r9\xbd(t\xdal\xea\xbfMM\x97\xf2\xb2\xd4\x15\x84$\xb5\xef\x18\x8e\xae\xc2\x03R5\xe0\xd0f\xb8\x1f\xcf\x03\xf2\x92\xf87<\xeb=\xb0\x859G\xc9H\xc7'eC\xda\xd6&\x887\x1e\xee\xbd\x0c\xf8\xba\x9e\xdb$\xc0\xff4}\xaf\xde\xd2v\xbf\x91\x15_\xb3\xfa\x97\x1d\x81Ej|\x18\x90\x1e\x1fx\xe7\xab\x14\xf9R(K\xc7\xddz\xcc*\xc7\xdd\xf0\n\x1cw{\xe5\x95\x94\x94\xa3\x94\x94W\"\xbb\x97Wj\xe3\x82i$\xc0GS\xd6n\xc3\xea%\x1b\\\x04\x8b\xe4\xb9\x112\xad\x1dq\xd0\x15O\x0d\x19\x0dq\xc1\xf1\xe1\x10R]\xe2\x92\x8d\x88\xf4\xac\\\x00\x15\x0en^\x10\x13?\xd7\xf8\x1f3\xc7\x82\x19\xe8Y2\xce]\xf9\xfa\x82\x1c\xc2\xd8\xcb\xe0\xe4h\xce\xbd\xb6\x02\x81\xc7#C\xdffU\xa4\xba\x16\x8c\xaf\x94\x96M\xad\x17T\x9b{6`S\xaa\xcd\x7fK\x9b|$\xe06\x8a\x91*\x11\xbc\xc5mZm3\xe1\x1covw\xcf\xd1q\x02\xb9H\x9doj\x8a`\x94\xc1/D\n\x019\x06E\x0bp\xb1\xcc\xf4d\xca==\x18K\xca\xcbJDIH\xce_,\xdctd\xf2\x97\x8b\xa0\xf72\xaf\xa0{\x92\xbe\xd5\xf8uXy\xd1C\xc3crx\x15\x1d qA`/g\x1e\xda\x8a\xf1\xc1\xb7t\n\x18\x84\xb9C\xa23\x9d\xcf\x0dv\xba\xa9\x9c\xc7\xf7\xb4\x89\x84\x94\xf5\x8148\xd8P\x04\\1\x0e\xb6\x91KOY0\xaa\xd5\x14\x9e\xe1\xcbsX\xa4cPE\xdf7\x16\xc9WO\x02\xe3\x98\xacF\xdf?\xe8\xd4\x1e\xe9\x89\xcdy\xc46\xaa\xd5y\xc4\xe6\xd3\xe6_\xfb\xe7\xca\xbf\xbe\xf2\xb2M\xb1r\x9d\x9c\x14Y\x9a\x14\x04\xed\xca\x87\xa8\xd3WP3E\xde|\xd6^ev\x1c\xd2\x1a\xba\x9c\xed\xd4\\\xdf\x95\xf8C\xcca\xcf\xf3y\xc8\xe0\xd8T\xb6^hS0\x87R\xa0d\xe9\xc0\xe1!\x92\xd1t\xc1\xa2X\xc4\xe7*C\xdd!\xaa\xff\x12\xfa\xc17\xaf\x9eV\xb2\x9e\x9bu\x03\xa5(A\xd9b.\x03Vr\xeb\x15 \xa3\x9c\x04\xe5\x9bZ\x9f\xd1\x13\xe8t\x0c+\xfe\xd1\xaf\x9c\xd1[\xf6\x93\x8bS\xa7\x95\x84\xe1\x8b\"9\xa6@\xb09\x8b\xe5\xd4\x19\x89\xba\x06\xa2y\x99Lp\xee \xcd\xe6q\x1a\xbc\xc3\x12\xeey\x1a\x9f\x9e\xceK]\x08c\xdbF\xc4\xff\x92B3\x0b\x11\xf1sI\\\x94\xb1\xde\x89\xa9\xce\xc9\xf5\xcc\xa1\x8aD_\x9a\x03\xe4Z\xd69\x19\xb3\x1f\x07X\x15\xd9\xbd\xf7y\x9c\x05\xd0\xd29\xad\x88\x1f\x92\\b\xf53\xed\x19\xbb\xe0\xc9F\x98\xa1\xa0=\xc0\x9b\xd4\x17\xb2\xce\x1b\xd9\xc1\xbb\x12L{\x81\xcc\xc9N\xea\xd1\x86\\d\xfc(\xc3e\xae\xe9\xa2I\xfb\xe1\x8e\xc1\x81u\xe1\xe8G\x1d\x1aGm8\xf3\xa1M\xa0%Y^\xc6;gr\xb1\xa9\xa7\x06=*\x06W\x9c\xdb\xa1X\xa5\x9b8\xac\x08\xe1\x9b,\xf4K\xdb|\xac6\x15\xcd\xeb$\x0e\x9e\xd0\xf9\xa0tI\xea?\xff\xf8\xa3 E\x0fq\x0e\x81?\xdbO\xd9\xf1\xcd\x9f\xf3?\xda\x10aTd\xb1\x7f\xc11\xeb\xb1P\x7f\xb07\xe4\x0f\xa5c\xf8\xdcR\xb2\x8a\xe9\xd4\xc3\x0eM\xca\x9a\xd6\xf0\x06C=T\xd5\x8e\xe5\x93\xac\x7f\xd3\xafx=\x0b3?T\xcax=\xc7\x07\xfc\xc8\x12\x98\xa2\x87\x0c\x98\xf3\x00\xba\\<\xdfPi8\x14\xe4\xe9!\xf8\xde\xbau\xebI\x9a\xbb\x9b1\x14#\x98\x81\xef\xe5\x9d\x9b\xfa\x86B\xa8\n(S\xa1{cL\xa9\xb0\xa2\xa7+\xcf@$\xd7\x974\xafm\xfd\xf9\xea\x10\xf1\xca\xf4\xc7cSE\x97u\xfdb\x92\x96\x8f\xd3\x00I\x12\x86\x87k\xdf[\xd6\xef\x11\x9b\xf4\x1d\x175<\xfa.\x1a\xc0\xe75x\xe3\x98\xd0\xber\xda\xb7{n-\xd2VlO\x1c\xca\x9f\x92\xa4\x9c`\xe4\xd8[JZ\xb6'\xce#~\x13\xa3\xc24y\x85\x80\xeb\x94\x12\xd7 ,\x16\xea\x9c\x81\x8a\x8d\xfb=\x0b\xcf\xd2\xber\x0c\x87]wm\xa3)\x1c,\x0enk_W\xe8p\xf9\x0c\xc3\xe2\xc8\xe8\xf5%.\xa4\x95z\xa7\\\xe0l=8\x98\xe3\xcc\xc1\x90\xf7\xed y\xcb\xa2\x15\xb5\xef\x9a\x92x<\xa2\xe24\x1e\x06\xc7\\\xe0\x96\x8b\x82`1iMn'\xd0E\xaa\x1c\x99f\x96\xd3\x0fm\xe2\xf6\xd1\x18V\xda\xf4\x06v\xcc\xd7\xed>\xf3\xf5\xe6\xd53-\xdf5\xd4)TD&\xd2-\xa0\x1e\x8f%\xa3\xb7\xd2\xa7Xh\x8e\xe7\x98\xe4[\x92\x83\xd8O\xda1a\xf0\xcc\xc0Q\xb1\xcf\x16\x13\xf6\xeeN#+\xe9~1\xafR\x99\xef\xd85\xb6\x1dw\xec[8\xa8\xd1 \x8d!H\xe3S\xd6d5\xeb\x13z\x8f\x1fk\xban8h$\xd4.\xd1\xd5\xf5\xc7\xca}\x9cv\xea1)\xfd(.\x0cy=J\x8c\xa4\xfdP\xab\xf8\xd1Vo\xe8\x92\x85cX_e(S\xd5\xfe& kfc\xa7\xd1G\x8d\xe0\xba7\x8d\xaf\x81S\xf9\xf8_1\xaa\xed\x84_K\xdd\xf4\xb5\xca\xf7\xb6\n\x8e\xc1\x0d<\x04\xe1\x86\xb8]\x95\x99\xae\x03\x18.4\x9f>7\x0e\x8e183\xb80\xb0\xc8\x0c\x8e\xa5'4\x04\x17m\xf2x\x06\x06\xe6\x9c\xf3\xa7\xda\xcc\x89\xf4j\xca+\xba\x98\xb1\xf7\xf5|<\xd2\xcc\x871\xb4\xb2\xea\xd7\xb1MS\x11=\x96\xe7\x97 k\x10|\xed\x0c\xe6\xe6\x06\xd5\xe1-\x97\xf0\x85\x97\xeb?C\xbc{\xdd\xf4\x9f+\xa5\xfe\x13\x9f\xf4\xb4\x96\x91x\"S\x80\xaed\x9a\xd1\x0d\x7f\xd0\xd3\x8c\x16\xfcA\xaf\x8d\x98?\xe8iF\x03\xfe\xa0\x97\x1dy!\x1a\xdf\x7f\xd0}\x94Q\xf1e%\xb4\xa7h}\xec@\x84\xa2\x83\x8a\x9aU\xab\x8f\xafO\xdd\xda\xda\xd6T\xa9\x94\xa5&*\x99\xfd\xac\x99B\xb9\xb0Q\xbcEm\xc5\x9bE\ne\xac\xd0\\\xc7]\xbc\xc9\xe3!\x96-\x9eU\xb9\xad\xce\x90\xcb\x19\xc2LG\xce`!z\xe9\x12o\x93\xc7.\xe6\xe5\x17;5N\x99\xa3\x00\x95\xe4\x99;\x87+\xd1\x14\xca\xe7*\xe5s\xd5\xd4\xe3\x8c\xdc\x91\xc7\x1d\x8f\xd2\xbc\xe7\xf3\x04`\x9d\xe3\x17\xc9|\x7f\xbaT\xba\x86f\x9b\xb3\xa6\xabd\n\x0f\xc1Y\x95eV\xccn\xdeL\x13*Q\n\xbf\x06/JoV\xef9 \xab\xaa\xd7K\x8a\xab\xb4\xb1\xc5\x0d\\\xa8\x15\xa6m\xcb\x9b\xd2\xc6\x16\x08z\xf9K\x14\xc7\xafH@\xa2-\xd2\xb6\xc2\xc2\xec\xa6\x94\xd3\x85\xe2}\xf8\x12\x81\x88;\xb2p\xac\xc7uB`\xdb\xa5\x02\xddr\x95\x03\x96K\x1eZ'\xf3\xb1o/\xa1\xec\xd4\xbc\"[\xa7\xd8\xa9t\xce\x1b\xba\xe3\xf6\xe4\xd3\xed\xab\x9e\x1a\xb1d\x99W\xf8t.\xffM\xde\xe41\xa3Bu\xb1\x83j\xf2TqF^\xb0\xc9s\x92\x94OXj\x08s\x85\x93-%I{\xcc\xf9\x03\x7f\xbb\x1b,4\x97f\x05\xff\xc6f\x0c\x18\x9f\x88~\x16{Q\xf1\x93\xff\x93\xbbB\xfd\xca\x8a)0\xc4K\x1b\xaf\x88\xa3\x80\xd0M\xb2\xd2U\xc9m\xf9dlzy\xc5|\x13\x9fDw\xc3F \x87\xeb\xa4\xd5:\xea\n\xba@=dU\xbf\xac\x12\x92\xb1\x9d]\xb5\x89\x89\xf5\x0c\xf5\xb5\x00\xb5 \xcb\x17\xf3_\xad\x12\x99\x95\xfeR\x9b-F\\\x9d\xdd\xa7\xcdB\xd3~\xa7\xca[\x93\x9a\xdf\xa8\xf7\x9f6\x8bC\x0b\xdc\xc2& \x8c\xe7\xe8\xae\xbei\xe9\xa1!,\xf0\xe5\xcf|L\xa3m|\x0d*\xb2\xc5\x8d\xc5\xe5*5:\xf1\x89+\xc5@M\x816\xcf\xa2\x82\x9e\x8b\xb4ez\x98&c\xc8u9g\xc4\xc5\xd1\x8f\xc7j\xba%\xaf\xa3\x85\xa5\xad2\x98\xc1bTi \xf3Q\xad\x16\xdc\xb9\xb0\xba\xb8XJ\xd1*3\xa4\x05\x9a\xd0\x8b\x9e\x1e/\xb1\xac\x90\x05\x96\xd0+\xcd\xac\xd0\x1b\xaarE\x169@\x01\x83\xb9\xe9JY\xa17T\xdb\xc7\x08\xaa\x91\x8c\xd8\xe3F>D%d\x13\x8a\"3\xa6\xb5\xfd\x06\xa6\xbaB\xde\xab[\x0d\xaf\x8c\x9fR\xa8\xc9\x17p\x856D \xce\xfe^]8\xe9R\x96mYy\xe6\xcf\xc9\xb2-\xad\xe1\x9b\xaaj\xf8F\xaa\x1a\xbe\xbe\xaa\x86\xefFU\xc3\xb7P\xd5\xf0\x8d{5|Y \xcf\x82K\x05m\xe8@\x04\xcb~\x16%~\x0d\\\xfb\xa7\xe4\xd8\xafi\x88\xe0\x10\xee\x9cq\xe6\x8c\x1bPC%\x02J\x0d\xc2\x8e\xb2`\x15\xc5aN4\x944\x1d\xc6\xa9GC\xb8t\xdf\x9aC\xdf\x0c\x90/\xb0p\xb2\x8e%_\xb0\xc38\x0d\x8e\xce3?)\xb4Q\x14\x19?\xb8I\xf6,J\xdeE\x89fFCQ\x04\xd8Y\xf8qAX\n\xfeL\x0dO\xb9\xf4\x0d\x96\xfd\x8c\xfd\x0c\x1dk\x95\xa0[\x06jSes\xcd@\x1f\xf3\x1e\xeb@\x97\x0c\xd4\x04V\x05\x164\xa1\x1aJ1\x9cb\xab\xb7\x15\xb5r\xc8\xe7yz\xa6\x19\xdcY\x14R\xd2\xe0\x1c\xec\xeb\xbccH\xb4\\\x95\x0cjpo7\x85>\x14\x88\xed\x08\\\xab\xbf\xc4\x14\xcf&\xd8\xe7 r8t\xa9\x9aw5\x9d<\x8f\xa3\xe4\xdd\x0f\x83>\xa6\"6:\xad\xa3\xb6\x86rT\xbc\xc8HB \xf6\x91j\x9er\xa3\xf9@\x92JC'xg\xe2)\x1a\xe6{\xce'BcX\xab\x9d\x16y\xba\xfe\xf1\xd8\xfd\xbd\x1b\xcd\x87\x1a\x0f\xa7\x9e\x94\xf7\xe3k\x97\xd0\xb4/\xd4g*\xa1>S \xf5\x99J\xa8\xcfTB}6,GS\xe6vc\x94\xa9\xe4\xeef:\x97\xf3\x05~\xed^sY\xb96@&\xecg\x1f_\xd8\xd7\x9b\xe9\xbe\x08\xfb\xe2\xfap\xc2\xbeP\xa4\xaa\xe1r\xcbT\x05)\x87\xc3@R\x0dc\xc9\xb4\x07\xe9r\x19\x13d1\xd5\xa0L\x82O\x93\xd79\x15\xf8\xf1\xb8T\x03o8\xf0#? Hl\x00.8\xf0\xd19 6\xba|\xfb\x0b\xa3\xe1.\x1b\xa0<\x08\xadU\x12\xabjq\x8cz\x8e\xed\x10s\xea\x1a\x81\xad2q/+P\x8b\xef^\xb0 \xf5\x8b[\xc6\xef\xce+P\x8b\xef\x9e\xb6\xdd\xce*\xc6J\xc3z`\xb8\xbd)w\x02\x15\x9f\xcf\xbc\x90d9 \xfcRW=\xe0\x1c!\xb98\xa4\x06;F0}n\x8bG\x08c\xcak\xf1\x0e\xa1R\x8dn\xe7;\x84\xd0*\xe0^\xf0\x8f\xf0\xe9\xd2\x95\x9c|\x89\xa0~\x1c\xa7g\xaf\xf3\x8b\xa7\xe5\x8b\x8d\x06\x83_\xb3y\x1b\x98-\xe49\xeb0\xff\xfa\x11\x13?\xd5\xe0O\x11\x9c\xb0\xbd\xf94y\x99\xa7\xcb\x9c\x14\x1a,\xf9\x15\x0e\xe1\x9d\xd7P\xea\xa8A\x7fB\xd0\xa6\xeeF\x0d\xfb\na1\xdd\xb7,\xa3\xb7\xb8\x1e#\xc6 %Q\x9ai\xb5@\xcf\xe0\x10\x1e3#_\x15\x02\xae\xd3\x8f\xbd\xa9\xe1\xb3<\x0d7\x81\x1e\xfc7\xee\x8f\x8c\xa9G\x9eEE9r\x1f\x8f\xe1\xc4iT\xd5\xd5\xf5\xee \x1c\xc2\xb6F\x9bc\x1c\xba{<\x86G\x9a\x97\xfe\xddQl9c\xf8n\x0c/4\xca\xab\xef\x9b\xbd<:/ \xeaI\x8b\x91\xfbX\xd3\xcc\xcf\xc8\x04\xd9\xcd\xda\x0f\x0c\xb6YKX\x0d\xfc\x0b\x03\xe6\xf8\xa6\x83\xfc\x91A\x06,w\x9d\x1a\xee\xbf\x19\x9c\x8d\xf2\xf5\x1f\x0c\xd4F\xf9\xfa\xbf\x18(\xc7G\x1d\xe4_\x19d\xe5\xd5\xc1\xb2,h_\xf9?\x9dW\x8e\xf4I^\xfe\xd9ma\xb3^\xfb\xb96\x17\xca\xfff\xaf\x98\x14\xc2\x84\xf2/!\xcf\xe9S\xe3\x86\xda\xa5\xf7\x19f\x8fe)d\xd1\xc4\xf9-\xec\x9b\xdc\x95\xd0\x9d~\xef\x19\xee+\x1e\x9a\x97{\xad\xec>,F\x87\x838\x9c{\xd3\xb9p\xe4\xe8\xe0R\xf43\xf1\x8c\xa1$\xb6\x16R\x10\x1e\x04\xb4\x7f't\xdfI\xd2\x84\x02\xd8\xe69\xb1\x12\xe6\x9b\xaa\xdb*\xe7c}2R\xf9\xf6\\\x06\xe2\xc0\x0dx\x047\xc0\x91\xe9x\xdbP\xea\xd5\x8e\xc2\x99F\x03\xfe\xefZ\x01\xaa\xd4\x80\xaa\xa6\xe0\x9fZ-\xb1\xc0[\x94ngp\xaa\xeea\x83S\xd5\xfa\x98\xb4}K4\xa7w\xab\x84\xd3Z\x0f\xd7\xf0\x9f\xd1\x1c\xf6\xb53\x84\xca!W=M\xffm\xa7x8\x1f:\xfdC0\xb0R\x8d\xab\xeb\xe2\xbf\x1f\xc3c\xba!\x1f\xb3-\xfe\xc7\x1f\xcc\xff\xe4\xf0\xf0\x10\x1e\xd7\xce(\xea\\\x13\x06?\xe8J\x15u\xeb \xd3\xd5S\x15z-\x03\x18\xbaU'\xee\xed\xe9TC\xe8d\x13\x10\xa7~\x18%\xcb\x89\x9fDk_c\x1f\x19\x8d\xe1H\x9bX\xc8`%\x91\xb5\x8d\xea\xcd\xd3$\xcd\xd7\xbe\"\x07\x10&x\xfa\xc5\xcf\x93(Y\xce\xe0qM\"Fc\xf8\xd5\"\xcf\xd1\xb0\xfe4\xd89}\xa9\xca\xab\xc6Bcf\x10M\x83\xff\xb01G\xfc\xaaX\xd4\xd1h\x0c?\xd1y\xfc \xc3=/\x91\xb6E6,\xc1\xf3N\xc24(v\x9f\xd1\x0f\x86YO\xa2$\x84u\x9a\x13\x08EF\x9f+^\xd8\xd6\x0c\x0c\x1f\xb91\xd0\xd5\xd8\xe6\xa99\xeb\xcceq\xeb\xa7\xa6\x18\xa4\xc23u\x1b\xff[\xd7\x86}\xb0\xac\xc5L\xc4\x91\xf6\x0bJ\x8b\xd6O\xda\xe8X\xf6\xb4\x91c\xa7yj\xa87\xd4\x0f\xbaa\xd7R\xc4\x0c~\xb3:\x85yA\x10;\xf1\xa3\xe2Ef\xf0X\x03\xc5+x\xff\x03\xdd%uj\xb8\xa6\xbaL\xeb\xaa\xdb\xd2\x95I\xeb]\x89\xab#\xb9\xcf\xe0\xb9\x86mi*\x12f\xf0R\x0d\xb9H\xa4Ev\xc4e\xcdP5\xb4d\xda\xecE-\x15\x996\x7fQ\xe6\x97\xab\xe7\xdc\xb1\x93q\xe1\x86nr\x17\xe4P\xb1\xe1*l|\xae\xc1\xc1\xbf\xeap\xd0z2\x98M\xfeX\x0d \x1cV5Ly\xda\x91\x1bgB\x03Q\x98\xe5H\xda~\xf5\xda\x16\x15b\x85;\x12\xda\x91\xe31T\x1f\xd1\xe9!\x96\x84\xbb\x83\x91\x90}l\x06s\xafh\xdd\xd1\xacs\xff\xe5\x0b\xafw\xd3\xf0>\x05\xf9\xd9\xcf#\x8a\xf0?3\xed;\xffH\xef\x89a\x18Mx6\x8ca_8Z,HPF[\">\x85\x9d\x11\xdf\xa9\x9e\xe2}3\xfe}\xf5\x15\xbc\xa4\xff\xbc\xc2\x7fLtq\xa7cV((T4Z\xd5\xd8\xff\xd2\x9eo\xec\xa33x\xf5aq\xdf\x96\x98\xf0H\x16\xa6!\x9b\xc1\x13\xc5\xcc\xd7S\x7f\x15S\xfc\xbcRu\xbc\xa4\x12\xf9\xbcL&\xcb<\xddd(ys\xfd\x95\x91\xb3{.\xdeW\xf5\xe8\x17+\xc9Y{Z\xd9\xce\xe20\x92|\xd9\xb5\xad\xec=3(\xacvJn\x9a\xaa\x1f\xb5(k9 \xf6C\xd3wz4\x86\xa7W\xb5\x97\x85 \x1aT\xc1dCw\xf3.\xcd)]'\xaaey\xa6\x19\xe0\xcf\xba\xd6*\xb5\xf1\x0c\x9e\xa9g\xbaJ\xea\xab\x89*\x11\xcc\x90(\xfb\xa0\x8d\xfd\xb0>\xb7[l\xc4Ul\x98\x86-N\x9b#\xd2\x1aK\xb9\xf5a\x06o\xcc@\xfc\x90\xda\x8a\x80\xbf\x97\xfc\xfe\x934w\x19C\xa59\xfc\xfb\x8c\xb4\x95\xce\xdf~\x1b\xa9A\xe4\x86\xad\x19\xbcV\xbf\x82\\\xac\x89\x9a\x10\xf4\xa0\xf8\xdet\xdc\xfe\x1f\x1d\x06\x93J\x17>\x83\xef\xad1\xce@2vq\x1bz\xb9\xc9\x89\xcce\xa8\xca|'w\x19j\x9c\x1c8)\xad\x87y\xb5\x99d\xcf\xf8\xa6\xec?\xaaQ\x85J\x8a\x0b\x8fY\xbc\xba>5\xcc6\xa1\xf3B\xfa\x12Z\xd4\x9e1\xa5\x17\xd2B\xee\x85\xb4\xa8\xbd\x90\xee5S\x19-4\xeeF_b\x8b\xfe\x03\xdd\x8d\xac\xfc~\x86\xc4\xfb\xe7\xf6\x0e-\xe9\x10\x87\x16\xe6\xa6\xd4\xb6\x13\xa9\xa1}K_\xaa\x0d\xd6\xd039\xa7\x14,\\\x9d\x91-5X\x80`QQ\x95=\xd5\xf0\x0d\x0b\x845\xb9\x9ed\x08\xa5s= Y\xd7V\xe9\xd9\xb1\xa9{+\xfe1\x0b\x17\x94-\x03\xcd\xa3e\x94\xf8\xf1\x0b\x9bW0\x12I8\xa2X\xbd\xb1\x84C\xc8\xcc\xb3z\x81K\xc4\xd5\x1d\xc1&\x8fJ\xadU{\xce\x12(Tu`\xab\xae|_j\x8d\xf9\xa7\x9d\xc4\x0b|:\x9f\x1b\x03\xbf\xcf\xe4/\xbe4\x04\x9a\xf3\x1a'?n\xd6\xd9\xeb\x14\x811;\xc4\x07\xb7.\xd7Z\x01\xd6O\xe8\xfc\x8d\x06b\x8d\x16\xb0\xae*(\x05\xd1\x08 \xa7\xba\x1e\n^P\xc5\xb9\xa9?{f\xaf\xa6\xd3\x05>v\x0c\xd0\x1a\xc3r\xcd\xe3\xc8\xe3\xc6ig\xc3\xab\x92\xfb\xba\xabcc\xafX\xd2\x83\xad\xa8\x99],\x8a\xedn\xe9\xdd\xd5\xc8\"{\xfen=\xab\x93\\D\x8a\x02\x04\xef\xc7 :Qg\xdc\xff\xea+\xb8\xf0\x82t\x93\x94\xae\xaeos\xbdY\xbc&\xb93\xd0d\xcc\x1a\x1e\xe3!N\xd4\x941\x94\x98\xef\x97JMT\"\x89r\xec[\xe1^\x982\x89 \x81\xae\x13\x06\x17\xae\xc2\x01\x05z\xacEu\xd7\xac\xb8\xd2V\xc8\xc9\xb4\x08{\x85B\x87!N\xa1\xbb\xcfL\"D\xb0\xb3\x08q=\x03\x19>i\xa6\xb2\x01\xc5\xa6?\xa32\xa3_\xc4\x04q\xed.&hK:\x9b\xb8\x8fK\x1d\x1b<\xb3\x8e\xf4\xdd\xf7c\x94P\xded\x19\xc9\x1f\xf9\x05\x91%W\xd9\x99P-\x86\x13\xaa\xfa\xbb\xe3\xcf\xa0\xc4\xf1g\xaa\xad\x10\x91S_\x94\x16\xff\xb1\xd4H\xcd\xc0\x95\x034\x11\x89Dc`\x14\xf5\xe9\xc6I\xac\xe2PR\x844\xc6\xa1D\x08\xa6\x8fC\xf1\x11F\x1b?\x82u\xf1\xed\x84\xf7\x82w\xecq\x9d\xc6\xc4\x18\xe1AO\xd8\xb2\x99G\xe4\xc3\x9f\x04y3'\x838\x0d\xe8<\x9d\x9e\xb6\x9d\x9d\xa5@\x83\xcd_\xdazUU\x02\x06\x9d\x02J$`\xd0\x98\xa2\xb2\x06\xdf\xca\x9ao\xfbO\xfbXy\x80J\xd8\x1b\x0d\x0e\xb2,\x0d\x91|\x84Wy\x04^7v\x99\x9e\xaa\xcd\x80\x078\xe4\xe5R\xfa\x87[D\xcf\x84\xfb\xb2\xd3-\xea\x96\xd0\x8f\xd8\xe9\";=\xa2\x8f\x7fz\xf8\x98\xc1\xa63J\xf5q\xb2\xad*\xca\xd7\xe6\xa6>\xe6$\xed\xd27b\xa5\xdb\xe1#\xaf\xd2\xb3\xee\xbe\xe6\x83M\x87j*\xa4\x0c\x9d,\x81\xcc\xfb\xf1\x95~\\Z\x9bS\xd7F\xb3\xb4i\x1d\xbb\xe2P^\xe3R\xfd\xc2\xf2\xa5*c\xbc\xaeC\xa2f*\xeb\x93\x1a\xacU\xe3T\x0d\x96[\xc0\xc8\xeb2\xaa\xcb~\xf6\x06\xe3<\x89H\x8cN\xe5\x1f\xb2\x114Q\xb3\xa2\xa1\xeafZECK\x8f$e~qL~\xc3\xec\xb7\xa6\xcc\xa0\xdbF\x8d\xa8f\x9d\x9f1\x1c(\x881=\xbb\xcb\x93}\x85\xb3!\xee\xe4\x93\xa9$ \xc8\xb0\xad\x12\xd5Q\x84\x0cUT\xa5\xdeT\xb8\x8a\x9e\xa3\xcb\xa9BAy\xfe\xb3\x1f\xcb\xf4<\x9d\x04\x96\xef\xdb\x05\x10\xdf\xcb\xcf\x04\xf6\x99\xebu&\xbcJ\xcf\x0c\xc7\xc2\xed\xe9\x9f\xe2X`\x03\xb59\x19(B\xc8\xcf\x04\xe2Q|\xe8?C\xa6\x14\x1eR\xa63\xfd\xf1\xb8\xfa\xe1\xa2\x92\x91+\x1a\x87\x9d\x14\xd6\x94\x88o]#1ap\x9d\xbd\x1a}&H\xdbG\xcc?Q\x02\x13\n\xf0\xe0\xee\xfe\x9f#g \n\x9f\x98\x949\x1a\xc3\xa6O\xca\x15\x82z\x1fp\x91\xe6\xe0\xd2\xaf\xd1 \xaf$p^Bn\x8c\x13\xceR\xff\x16\xa31N\xf4\xfe\xd7\x10\xc07P|\x0d\xc1\x8d\x1b#\x88O\x82\xb7\xcd7O\x02\xf5\xc1B\xb7v\xc4O\xb2\xbe\xb2\x00ei\xa3\xc2 \xf0\xe3\x98k\x0d\xc8\x18N\xe8\xbboE\x11\x87\x18O\xe1\xc8Cs\x85\x1fG\xff\xae\xa5\x07c\x19\x07zE\x1e\xa1\xe3\xed{?\xbfG\xadBz\x865y^\x936\xef\xab\xfa\x1a\xf3$\xaai\x00\xd7X\xe2\xbe\xa3\xdfc\x7f.\xa2\x98PN\x03S-\n\xef%\xaf|\x0b)Z\x0dY E\xac\xce\x9c\xc07\xacVa\n7 \x82o\x0f\x99;n\xc2\xe2\xbbqs\xf39}\xcc\xd6JV]u\xcc4\x19=E\x17\xdd}\x1fC[u\x95\xb5\xcf\x98\x9c\xbf\x8a\x96\xab\x98\xce9\xaf[I$\xc1P\x1d ]\xc6\xff\xf5\xbb\xf7&\x0b\xfd\x92\\\xaf\xfe}\x02e\xdfV\x1f\x90\xc1vV%h\xe87\x14\xa9\x88\x0f\x15\xc3\xb4:.,0\x86\xc4\xc4\xb9\"\x9f\xeaj!&A\x1a\xaa\xca2\x8eQ/v%\xed\x89\xa1Nx\xc5yY57q\xd5^\x1dt]\x9a\x14Z\xd5M\xe71\x07r\xcc\x96i'\xcb\xf5\xc9\x01YYN\xda\xb4\xe4\xc8\xd1\xf5\xfa\x97\x15!qU\x04KG\xd0\xd5_i\xcc\x19\x96=\x80uD\xbf\xa0\xae{\xfa\x9er\x00\xc6M\xd4W\xc3\x99Tpr\xa7\xd7\xe6N\"\x1e9\xcf\xd2\xbc,Z\xc7S\x9f\xbd\x85\x06\xe7\x99\x903\xf8>N\xe7\xee y+[\x83\xf2\"\xc3\x91ST\xa7\xfc@\xc4\x8ad\xdfL\x83\x92\x94\x93\xa2\xcc\x89\xbf\xeeH\xeb\x1d\xf6'ZT\xf5v\xf7\x0e\x0f\xe1,J\xc2\xf4\xccK\xfcm\xb4\xf4\xcb4\xf7\xd6\xc5\xb1\xbf%\xb4\x0f#\xddC7\xefsV$.\x88\x82k\xa3\x87\x1e\xff\xda\x9bW\xcf8\xc61\x0e\xfe\xcd\xabgn\xae\x91\xe9C\x9e\x0c\xa4\x8b\xa6\xbeL\xef\x1dyX/W\xb8\xb6\xc1!8I\x9aP|\x8e\xbcUN(G\x9c\xd2\xdf\x05)\xbf+\xcb<\x9aoJ\xe2V\x9b\xcfa\xb2N\xa3\x1cq\xcd\x00\xd13\xb3\xfb\x1ec$\x9cq\x15\xd3;\x1a\xd7\xdd\x9d\xa7\xe1\x05\xe5\xd9H\x12>ZEq\xe8F\xc8\xa6\x05t\xeb\xba=\xc0\x9c\xac\xd3-\xa9\x01\x1b\x93\x95\x93m\xfa\xae1Y\xa9\xea\xe8}/E\xc9\xeb L\xc9\x95\xbfR1+R\x89Y\xbeJ\xcc\xda\xa8\xc4\xacB%f\xc5\xfcAOb\nx\xca\xc7\xbe\x1cUKZYU\x12B\x98>+\xe0?\x81`\x95\x8f\xc1\x97\x0bV\xd1u\x14\xacr.Xml\x05\xabt\xa8`\x95{\"x\\\x84\xe1\xfc\xc2B\x04\xad\x84\x0e\xde\xd5\\T\x88\xac\xc3\x85\xbc\xa0\xf5QT\xa8\xba'\x02\x10M\x90\xd5k\xcc\xed\xe2-\xe5\x9f{\xad\xbcg]\x14\xf1T\x8f\x18\xfb\xf0\xfa\"#\xac\xd7V\xdd\xace#\xca~\xe4i\\|\x17\x04$+\x7f@\xf5\xaf\x89\x9f30})\xe6v2\xb0\x8f\x11\xba\xedY\xa5@\xf4\x11To\xa4\xdd \x8c\xceO\xa6\xac\x08\xbad\xea4EZ9\xd1\xd3\xe5\xb4d\xde{j\x00\xe1>\xbb\x91BH\xaa\x17\xbd\x1f3\xabs\xafp4\xdd\xad\x96\x82X!\x15\xc4|;A\xacX\xa5\x9b8\xacX\"ka\xc7\xb4/\x1a>M\xdd\xc0@\xe4NH\xff\xb6(\xbf\xcf\xde\xaab\xdb8x\xfdw\x1bN\x84\xd6q\xb0\xeaO9\x14n\xc6\x0e(\xbb\xd7\x86\x97\x07\xbc\xf1\x17\x15\x0f;-\xfa\xe5J4D\x7f\xb6\x9f2D\xe1\xcf\xd9\x1f}\xdch/\xffG\x92\x06\xf5$\xc1F^d\x1e\x19\xd5z\xe9)C\xd2\xc3\x03=yH,\xbdN65\xac!\xa5,\xf3\xd3\xb0\xcc\x13\x8bl\x841\xefm\xd2\xc6-5p\xc8\xdc\\\x06\xa6\x0d]U=\xd6G\xd5l\xf9\x11Zi\xed\x8e1\x89\xdf\xa34$#7\xd5x>\xac\xb1\x98\x8f\x13\xd4d\xd3T\xd1\xc6w\x9d8\xda\x12\xb1\x86\xa6\xca6~\x1d\xbbj\n\"\x91m\xf5\xaf\xbe\x92\xdd\x16Q\xa4\xb27f\xb5\x84\xf7\xb2\xf5D\xdd\xf8)\x1cB\xd1\xac\xf6\xc7\xa6rIJv\x82>b\xe7)\x95p\xc5\xb0\xe9\xacJ\xcd6\xe229\xee\x0c\xd1+T\x1b\xcc\x98\xd9\xe0J\x9a\xb3q\x01\x10\x971O\x16w\x05x\xd5\x88_n\xcf\xb5)q]\xec\xcfI]3\xc4\xe4\x08\xd5i\x0e8b\xa3\xcc\xad\xcb\xa6\xa5\xad\x16\xc3\x89\xab&(L\xb0\x97\\1\xa2\xe065\xc4\xa6\xde\x7f\xc5\x0c\xe6\x1a\xc0\xc6:\x89t\x17\xfc\xe5 \x8eQ\xbeJ#]\xc6\xabA\xc8Q\xe3b\x94\xe8\x92\"Df\xa5\x9a~E\xb5\xd5^\xea`i\xeb|\x94\x1a^\xae\x99y@\x93\x03\xaa\x93y@CP\x18\xf7\xd8a\x11\xcc\xbcd\x8fk\xd0\x1c'\x8a0}U\xfe\xa5\xe1\xdb\xd4B\xc9(\\k\x86b\x0e{o0=i\xbb\xe8\xa8\xc1\xf2\x1d\xba\xb4+\x8dS\xb8\xe1\x88K\xed\x8eS\xa1\xf0\x84\xde\xe39wU\xcd;\xf4 \xd7&\x03\xbc\xa2~\xd8\x04\xbb9\x8f\x1b@]j\xfe\xa1;\x18G\xc9;\xcd<=\xc3\xc7un\x07\xdd\x8c\xb5<\x9bR\xa5gS\xa9b\xa5\x81\xb3\xd3I\xdf\xc3\xa9T{8\x89\x0bYg\xa5\xa7\x93\xb8\xb0|\xc9\xc9\xd4\x00\x15\x027\x18F\xed\x0c\xcepx\x08)<\xac\xf1\xfc\x94'#A'_G\xce\xb8\x80\x99y\xb9\xd0\xad$\x08a\xc5P\x96\xb8\x8e:[\xb1\x1c':6\x15\xd0\x1d\xf8\xb1\xd0\xa6mQ\xafkh`\x91h#\x13\xa1\x8du\x1aZ\x8b\x90iH\x8cC\xaaO%M8/\x0c:I\x803\x07]u\xce\x8c\xa2\xc6\xe1\xa1.m30\xbe\xa4\xabK\x9aa\xd9\x0f\xa5\xaa\xc9\xdc\x15\x0e\xae\xe5\x87\xc0\xfeT\x85\xfeI\xad\x84U\x14\x85n\x15\x83\xde!\xa1K\x8d\xe7;$u\xe9'C\xeaGX\xd6\x99\x83\x98\x85\x98U\x8a\x1a\xb9'-\xfb\xcf\xaf\x85\xa4\x16\xa7\xea\xa0\xdf\x9b\xd6\x03\xf8\x1c2\xb9\x84*w\xacP\xe5\x8e\x15\xaa\xdc\xb1B\x95;V\xa8r\xc7\n\xa5\xe6\x8b\x98?\x91Z\x10\xdcP\xd8\n\xc2\xcaV\x80\xbf\xa6\xb7z\x05\xa4\x17R\x8b\x03\xaa\x07Te\xa5\xc3\x8fo\\X\xd9\x1a\x17\x88\xc4\xb6 C<\xb3hkjo);O)\x0e\x8d}\x914\xc1'+\xf2N%$n\x90\xba<2)\xb9\x12\xe6\xeb\xd3oF\xfd\ns%\x92\xd1m\xf9\x99\x8b*\xec\xe3\xd2/uJ\xeb\xbcO\xb2\xbbK/\xae\xf7h\xd82\n\xb4\x9a\x11\xc8\xcf\x9c\\\xd1Z\xef6\xfa{Q6\x84\xf4\xe8\xa5\xb8\xa4\xc3q\xfa\xac\x1d\xfd\x94\x02\xbf\xe1\n\xdd\x94\xaeF\xb3\xca\x08-Z\xe0RK\x1d*3\x9aP\xfeB\x0d\xc3\xac%\xe6\x02d\xccbb\xe1\x9a\x13\"\xa0Y\xaf\xb8B8\x9d\x12t\x8b\x10v\x9a\xdau\x0dk\xd0\xd4.\xab\xfeYhj/\xf8\x0cVx\xa4\x06\x9dW\xa0\xf6\xf6\xb1S8\x84\x95\x17%\x0b\x92c\xaeS\x8d\"\xe1\x0c\x0ea\xc9\xc5!5\xd4\x11\x1c\x82\xcf8u&\xe2h\x93\xfa\x9d\xd7\xd0\xe4\xdc_g\xb1>\x07\xe0q\x0d\xced%\x0d\xec#8\x84\xadU'\xdeqH\xe1P\xc5\xe5Q%\xfcw\x0c~\x9d\x86$>b\xbd\xd6\x81\xbf`\xe06%\x80^2\xd0*.\xd3TL\xe75\x83\xb7Tp?\x17\x9b\x16i\x97'\xa1Q\xf4\xc8\xbaPP\xf1\x05\xb8g\xee\xc8$/>\x15+\x84\xc5\xb2x\xc7\x9c1<\x7f;\xe6\x8a\xe7\xe7~6r\x7f\x7f\xdfe3\xba\xd7\xafp\x08O\xb9\xc4\x87\x88\xe9\xf4>\xa0\x16\xf1\xeaP?4M=ma\x98#\x94\xe0\x99W`m\xa0hq1r\xbb0T\xccf@KR\x1e\xe3M\xb6AF\xee\xaf\"\xec\xd70\x9b&A2J\x82x\x13\x92W\xc4\x0f_$\xf1E\x8b\xcb\xec^\xf4\xd0\xa3\xc7\xcd\xaf\xf0\x10\xcaJy\x95\xf0;\xa7U\x9fj\xc5V\xce\x9f\xb9\x8d\xcc\x89\xcd\x151\xf5]L\xfb[\xfaI\x85\xe6\x8d9T\xd1^\x9c\xba\xbe\xe8\x01k\xda\xf7V~Q\xad\x1d\x9d\xf2\x90g\xfb\xacnQ\xb9\x14\x07\x95T\x0b\xd2\x9b\xebd\x0c\xcfu\xf3(\x99C\xcdi\xc4\x80\x7f\xc9\xa3\x92hg\xfc\xbd\xde\xfcq\x8e\xbe\xcc\x94v\x9d[\x04\x8a\x89K\xb0\xc0\x94\x1d\xa2l/+&\xf5\xd7\xbf\xe6d\xe1\x08\x97.\xda\xae\x8a\xebQ\xe0;\xddu?Y8\xf05/a\xdcF\x0bTeo\x1a\x16\xff\xd6\xbc\x9a\xb1p\x0d3\xbe&\x16\xaey\xe5\xda\xb8\xb8\xe6\x95\xf2\x1893\xa4\xe0\xd0[{<5%V\xba\xa4YK\\\xc8t\xc9\xd9IqiMKw*\xcd]\xaeQ\xf2)\xe3\xfe\x9aW\xdb\xa4\xc2h\x9by\xf68[(\x8f\x19\x17\x97,v\xbc~V+-(J_\xd6^b\x1c\xeb\xf0q\n1A3\x06A\x05\xe4\x1b\x92\xa2\xf7\xf9\x18\xde\xed\x98\xdc`\x07M>8p\x03\xdc\x0ds#\xd7l,'\xf4K\x9f\xb9\x85+\x03\xff\xafN\xdd>D\xd7\x1f]\xa1\x9a\x7f\xb0n\x7f\xe7}-[\x8bn\xab\xa7\xa7z\x93\xa1\xaa\xf1\x17\xba\x86E\xd5\x1f_\x94)l\xd8&T\xa7\xc4\x18\xce\xcc\xbb\xcdj\xacL\x9dWQ\xf3\xe6\xd0\x1b6Y\xd3\xcet\x84@2\xf1Q\"\x11\xd6\xa8\x19\xcc5[o\xe84\xbe\xb60q\x1b8\x1e\xf5\x94\xb4\xec\xd7|-\x04#E9\x9b\xee-\xef\x1da\xc7(\x88\xc4\xd5\xc7\xe4\xb7^\xd2\xb9\xe6\xd51\xb1\xcb\xf4>\x8a\xf5\x1e\xc3\\\x9b\x83q\xed\xc7\xb5\x83\x81\xc3\x9d=\n\xd0E\xa1 \xe1\xa8^ar\xa43\x1a\x83\x03l\xe9\xbc\xda\x06Uq\x9b?i:\xf1\x9d\x16\xc5+K\x89u\x9a}MV\xfc\xa6Z^S{\xb1c\xa2\xd0\xd5^D>T\x88\x02L\xb5\xfd\"\x0fIN\xc2\x91\x9bhV\x94\x1fB3\xf8I\xb1p\xd5\xd4\x1di\xa6\xee\x91n\xea\xb8h;\x83#\xeb\x99\xd3\xf7e4\xae\x04\xfc+\xb5w\x0e0r\x1e\xc3C8\xf6\xcaT\xc6\x85v\xa2W\xba\x97\xe1\xc0}i\"T\xc8\xb5i\x14<\xf4JpP\x06 :B\xad\xfe\x11,\x17\x064\xa4p\xa4\xad\x87Yo\xdf\x9fR\xe0\xaa\x92j\x95{\x1f\xbc\x94\x05i\xa5\xb7 \xd5fCF \x85u\xe8\xf7\xf7]s\x89\xcc\x9a\xd7TL6T\xffm\x9b\xd0\xea\xbf\xf8\xcdke\x13Z)sG\xacTQ%+UT\xc9J\x15U\xb2RE\x95\xacTQ%+\xa5Mh%lB+\x8c\xc8\xbf-\xb5\x04\xb1g\xbd/W\xe6\xa0\xf6\xedP\xf4]\x91no\xf5\xf1\x0dE[[C\xd1\x97(\x94\x8e\xd1\xca\x14\x85\xa2\xb7\x88d~^\x90\x90oq\x85X\x85\x91\"\x1bt\xdd\x7f\xd9\x04\x1fd\xf2\x12!)\x9c\x1bSk3\x99\xff|\xa9\x16b)\x10S\x91@\x94\x14\xa5\x9f\x04$]\x00\x0b<4\xebC\x12\x1e,\xf9$\x8aQ=\xa52\x8f\x89+\xf1R\x16\xc6g\x91\xc3\xa0y\xe56\xe6\xb5\xe6\xd5] \xca\x0cobydn\xf3R\x9cD\xd5\xe31~\xca\x0f\xbf+^\x93\xf3\xd2\xd5L,\xd7\x1bZ\xf7\xbc\xd3\xe3\x92\xf2\x07\xac\xaa\xbbN\x03!C\xafO\x1b\xa4r\x95\xd9\x02PN\x90\xec\x15\xd7\xea\x88W\x07a\xec\x942@\xb9)\x95\xbd$b\x7f^\xa2\xabWc\xd5\xb4\xb4d\xd6\xc1g\x16YB\xad\xccu\xac^\xc9&\x97$T\x12\x17\xabR\xc2\xf9|5\x98_\x9b;Xz\x8d\x87\xf0\xfb{\xd0\xba\x0fo\x06d>-\xdav\xa3\xd6nT\xbf\x85\xf5A\x06X\xd5\xe8\xc1\\\xfb\xf2\xa1\xa6\x8b\x92\xcf\xc7~I\xb0\xbe\xe8\xebhMt\"\xf4\xba\x9a\x04\x8d4$\xc9\xf5\xd5\xbc(\xc5\xa7\xcb\x92\x8aL\x0d7\xffo\xc3\x87\xe9_\xad \xf6\x9b\x91W\x92\xa2t\x93\x11\x05\xf6O\x1c>#\x93\xc7Q\x91\xa5\x05f\xe6w\xde\xd2\xe3\xe3\xa6_\x96~\xb0\xa2\x07\xb5xI\x05.\xbe%4,\xa1\xdd\xb7\xa4\xe0\xbd~5\xb4G\xec[\xf4h\x82\xd7\xb9\x9f\x14\x0b\x92\xcb\xba\xd6|\xa3\xd75\xeb\xcfI\xdf\xd0(\x8f\xe9*8\xf4\x98u Jx\x9c\xb9\xe9$\xa4[\xf9\xa2\xca\xb1Q\x92\xf3\xf2\xe6\xaa\\\xc7\x16\xban\x0c\xce\xe9\x1e\xf0\xc2\xcaV%;(\xa5\xc9\x0ed\x17K\x80pa\x84\xed\xca?\xb2\xebT\x9f\x94`n\xf1\x8938\x84\x93\x0b\xca\xd0\x15\x9byQ\xe6n\xea\xc5~Q>MBr\xfeb\xe1:7\x9d\x11\xdc\x80\xe9h\x0c\xa7o\xbd_\xd3(q\x9d\x99n\x9b\x8a\x0b\xed\xfc*D\xd5l\x08=\x13\xd4\xc9\xfdpdZv\xe0K\x7f^\x99{\xc8y\x99\xfbA\xf9\x84\xe7oz\x92\xa7k\xde\x8fF7\x98W\xc4\xc8=2\x18\x84\xe8\x85!<\xb43\xcc\xeaG\xe7\xf3\xdc\xc0 i\x9fR\x1aTy]\xd6\x99+\xe8\xc7%\xb7yB\x8b\x17\xf9\x8b\x8c$\x1c3/eIq|\xa3\xc6\x16\xaa\xfa\xec\x06\x07\\\xd8\xa9\x06\x8a\xb88We3hw>\x863\xfd\xa4\x83q\xe2\x9bYf`\x11 #\xff\xb5\x9aM\x91\xcbc\x06g\x83\xc7\xa2|\x81\xb3\xdb\x14\xf1\x94\xe3`)u\xb8\xce\xa8\xfa2\xe7< $%\x96\xd6\x86\xf9\xa6\x84\x8bt\x93\xc3\xd7r/\xda\x99f\x96k\xda\xe7\x06'\x84\xa2\x81\xdbN~\xc8x\xd7\x9b\x14\xe8_7\xb3\xd8\x8f\x92\x9b\x8d\xd9\xff\xc8\x036\xf0k\xc2\x88\xa7\x181\xcc\xe0\xe6\xff\x8d\xd6\xfe\x92\xfc\xebf\x0b\x87\x12\x8f\xbb\xfd\x14\xaeSl\x97\x8e\xd6\xb0\xd1\xa4\xf9\x0e8\xa8Fv\xc0\xd1+\xdb\xd7K\xed!\x80\xf9\x9ed\x9a\xcb\xe6\xb5\xf6\xcf\x7f\x89\xc2r5\x03g\xba\xbf\xff\xff\x93c\" \xe5W7\x94\x073\x1d\xbb\xa8\xd0\xc8\xf0\xb9\xf37a\x94v\xe6\xce\xea\xb8P\x9f\x8d\xf4\x8bzC\x117G\xaa\x1d\xb1tA\xd1h\x1c\xd7O=\x9d\x11]\xado\x96\xacL\xb5\x89\xe8\xc48\xcc\x7f\x88n\x1f\x04O\x17P~\xfc\xbdQ\x9e\xcbtE\xe22o\x0d\xee\xe4\xf5-\xec\xc3C(lw\x80z\xf9\xad\xcd\x7f\x91:\x9c\xf1M\x92\x93 ]&\xd1\xbfIX\x99\x89p\x8e\xbf\x16\x81A\x94\x89\x10A\xee~\x81\xd4\xdd\xd3E\x8a~\xca\xd9/4\xa4\xf8\xd3M\xe4\x06K\x91@\x99\x8a)\xad\x8d\xf7Z\xb7\xa5\xe5\xa5q\xa4\xe1\xc5Vg,\xc0\xb0Tz\x9e*]\xab\xacm\x916UH\x98Yu'\xcb`\x95\xef\xd0}p\xf7\x8e\xc4\x88\xa7\xd7}\xd6\xbe\x9eY\x1c\x95\xeeM\xf7\x9b\x7f\xdd|x\xf2\x7f\xbf}{\xe3\xdb\xd1\xcd\xe5\xc8[DqIr\x0b\x0fK\xfe!\xc7\xa9\xb2\x0dEkY\"\xdc\x8e\xfa\xba\xdd\xdf\xc8\xb6\xbf7\xbf\xf9\xd7\xcd\x1b\xac\x9b\x9c\x11 \xda\x0f\xfb\xf6\x1f\xc6\xaf\xfe\xeb\xa6\xddw7\xb6\xdf\xb5\x9e@\xec\xc0\x9er\\\x80\xc8E0\xef\xf0^$~\xf8\xbdn\xd6\xf8!\xcf\x9d\xd9\xed\x850JuM|\xf0-Li\x13\x0d]Gm\xcb\x9b\xbe\x85\x87\xed?g\xf0\xbb\xe4\xdcg\xb1[\x82\x83\xed?G\xbd\xad'a\x89\xfb\xa01\x1c\xca\xf4\xa6\x01\x1c\xc2IGeSg\xb2\xa5\x7fu\xe2\xac\xe9x\x17c4\x07\xbb\x0b8\x042\x86\xd4]\xd8\xb8\x13\xf3uR)\xeau!]\xec\x14wK\xd6^\xe4\x96\x94uq\x1e\xc5i\x11%\xcb\xd7\xfe\xd2\x81\x19l\xf8\xdd\x17\x19I\xea\xbb>\xbf{L\xe2E\x1b\xdeyM\xe4\xb9\xbe\xe5\x01\x81\xed\xa3\xf7\xfdH\xe2\xba2\x86TeR\x8eLI\xeaX\xfdq\xa4\xe8\xbd\xe7\xad\x81R\x1e\xdf\xa7\x88\x15O&\xf2\x9e\xd2\xad\x95\xbb\xc9\x18b\x85\x92\x0fK\x89\xc3\x0d\x88\xfa\xef\xa3b\xb69\x83us7n\x8c\xa1\xd0\xd9Y(J\xa4'%L@\xe7\xbe\x1dVP\x07\nM\xa1|\xb8l\xb9\xf0\xef\x0c\xe7 ov\xbb\x1aV\x8f\x109\x1d\xac\x9c\x057 ds\x0f7 \xab~ET\xe8\xc4\x80\x05\xec\xcd\x18\xb0\xeb\xc6\xf0kh\xd0\xa6\x0eN\xb4\xc7\xc3\x81\x02o\x91\xe6G~\xb0\xb2\xdb\x1e\xd9 yK\xf7_\xf7\xe4\xa42jfw\xaa\xf0/\xed\xedu\xfc%F\\\xfb\xfb\xaf\xa6o\xe9%\x12\xb6\xde\xfc\xfb^\xdd\xc0\xdf!'\x19\xf1\xd1vB\x99\xbaoVe\x99\x15\xb3\x9b7\x97Q\xb9\xda\xcc\xbd ]\xdf\xfc5M\x8a`\x15G\xc9;\x92\x977[\xf0\xdf6\xbe\xd4\xfc\xe8\xa34\xbb\xc8\xa3\xe5\xaa\x047\x18\xc1\xc1\xfe\xf4\xf6\xe4`\x7fzg\x0c?\xa6 \x1cW\x1f\xf3\x9a\xef<\x8b\x02\x92\x14$\x84M\x12\x92\x1c\xca\x15\x81\xe7O_\x8b\xdbM\xd0\x9b\xd5od\x06X\xd4c3\xb3\x842\x7frw\xdeq\xe3\x08Ab\xaf\x12$\xc8\x08\xcaU\x9e\x9e\xa1\x9d\xe1\xf5EF\x8e\xf2<\xcd]\x87\x9cgL\xdd\xe6\x03\x7fI\x92\"y\x8a(]\x8e*^\xa3\x0fr\xd0\x05\x81\x1b]0\xe1\xa9@\xc4\xc1\xf4w(\xfb\x1f\xca\x19\xf7A\xa9~\xc3\xce\x98\x8fX\x16\xf4\xfe\xc4@S\x9d\x97Vg\xde!\xc5\x1b\xde\x97\xca\x1e\xb1O\xb1\xa9\xfd*z\xc7|\x8d\xa5\x00\xaa\x97\xd1\x0d\xe3[\x98~=\xa2''\x0b]qS\xb8q\x88F\xf8\x12\xbe\xfd\xf6\x10\xa6c:\xc4\xc3\xee\x18E\x8b\xf4P\xe2o\xb4\x1a\x1f\x86\xed5cxw:2\xe1\x82\xc2\xbb)w\xc9\xc8+\xd3g\xe9\x99\xa8D;\xac\x0f\x1f\xdd\x99\xed3,\xfe\xba\xa82\x1b\xd0_\xf7F\x7f\x8e\x82\xaf\xdb/\x05f\xd4\x05f\x84\x17\xfd\x80h8\x81\xe0\xb9\xaa\x8a\xf6\xa8\xe2\xa8\x8e\xceKM1\xef\xb4[\xb2;U\x97\xecN?\xbeZ\x88 t\x9d\xb1\x98-\x8b\xe6z\xddReh>t\xb7Jy\xa7\xd3Sr^\x92\xa4\xe8\x1d\xf6\xef\x99\xe7\xd4\x0c\x9c1\xf0\xa3)1\xd7\xda\x8e\xae\x1bB=e\x9ecG\xeb\xac\xbc0\x94\x89\xef\xc5\xd4\x8a*\xf1\x98S\xb5~'\x12\xfa\xc9\x88\xeb'\xafU\xc5x\xd5\xc8m\xf0\x10\xb1B\x85\x88Q\xc1\xbf(9\xea\x98\xf9S}\x02\xfb\xfc\x0b\x8f\xa3\x02)\x9d\x14\xa1\xf9\xb9\x8f4\x0f{\x8d\xda-\xf4\xf6\xbb\x0c\xaew\xf4\xa9-\xd4\xa7\xad\x9c\"\x0e\x9d\x96\xe9r\xa9\x11>B\xdesY\xfa\xe7\x9e\xeb\x86\xba\xbfQ\x92mJi#\xcc\x04\xee\x04+\x12\xbc\x9b\xa7\xe7\x12MY\xa3\x0b\xfd\x87\xf8\x1e\x1e!\xa8t\x90(tj^\xc9\xac\x9c\x8c\\Q\xc1\xda\xe3\x1f6\x1e\xb7\xa318\xc7$ \x01'\x95mL\xa7\xe7#\xf4Y\x95\xe8\xff\xa49\xa1\xe5&\x93Pj2Q\x94\x93T\xa4\x88\xbeu\xd0\xcb\x0b\xf0%\x17\xb4\xdc\xb0ag\xd4\xb0\xcd\x05-v\xe0.f\x82\xa1\xeeG_}\xd5\xfa[-F$&\x1bD\xc3\x02\x90TC\x18\xb9\x89'$\xc618\xcc9\x03\xad\xcb\x88\x13\xcc\xbaLD^\xc2\x84\xd5PB\x91\xbfOG\x9a\x96\x14\xebCK\\\xdbai\xb2\xad\x94\xc8y\xad\xc2W\x03\xa5\xd6\x9af\x1fS\x1aX\xc9\xb4\x9b\x1a\x94\x8a\xc4\xda\x05IxT6\xce\x15.\x04N\x1e\xe5\xe4\xdct\x0c\xfe\x186*S\x10\xe6\xf3\xe6\xd5*X\xcdA\x8b\x8c\x05\xc2\x00c\x9ci\xc6KX\xea\xf6\x13\x10u M\xd3\xc8\xca\xb5WHg\\\x18\xb5r\"\x19C\xae\x98\xdbF\xf4\"\x96\xf0`k!\x0e\xb3\xaf\xbe\x02\x07\xb5Y\xb8\xdf\xd2z\xa1t\xfa$\xc1\x9a\xe9\xa2\x96\x01\xcf\xc3\xa88>\xf3\x97K\x92\x1f\xa0N\xd6\x87\xaa\x8d\xf3I\x9d\xf9\xf6\x8f?\xd8]L\xcf\xcbi\x11\x8f\xed\xad\xefW w\xabT\x8aj\x88\xc67f\xd8\x0b\x9e=\xea\xab\xaf\xc0m\xf4A\xd1\x83\xddZ\xaa+`\xef \x07\xb0\x1e}tY8h\xb2Y\xcfI\xfe\x9a\xeb\xc7F\xae\xaf\x88\x93\xeb{q\xc90\xdd\x1d}\x9c|\xedU\x12\x86_\xa28~E\x02\x12m\x91;\x91\xd5\xdc\xb7\xce\xc5Ps\xea\x9fxw\x99R\x88G\x97\xda\x83Hd\xa2\x02 \x1b\xee\x84\x1cf*3\x9a\xcd\xeeJ\xab\xed\xe4F\xad|\xd4#q\xa8\x07,%\xf5h\xc4Q=\xd9\xac\x91w\xf5\x81\xe5b\x88:\xf7u\xad \x17\xcd\xc6{53lJoP\x18\x86\xd2\xd84\x1b\x8c\x03\xa1\xff\x9d\x893#'\xbfm\xa2\x9c\x84\x8cT\xe1\xae\xf2\xd9\x19L\xf72\xba\x89x\x8b(/J\xb7\xb3\x01\xb1\x90e\xc1?+jZ\xdam\xc7bTe\xd1\xee\xee\xb4\xfe\x86lo<\x99\x18\xf4\x01\xbc\x05\xec\xce+\xc3q\x9fX\xee\x8f|@V\x8e\xb4\x865\x98\xcb#.?sm\xaf\x9e\xd7 Z{\xfe\xa6%\xaa\x0b\x95\xb7\x1e#\xad\xe9M`Mo\xc2\xea\xb3\xe6\n\x0f\x85\x91\xde`\x95\x07cj\x11\xafX\xa5gGB\xdde(\xef\xc0\xa0\x1f\xa5\xebu\x9a\xd8\xbcs\x81^\xd9\xce\x8fE\x9a\xb0\xcc\xe7O\xd2|m*)\x9b\xbb\xcc\x98\xfc=\x0b\xaaQ\xc2\x9e\n\xc7\n\xc6n\xa8\x01\xcf\xe0\xb0\xc9\xa2\x9c\x9a\x0b\x98\xceM\xf6\xac\xb6\xc1\xc9`\x15Y$Zk6\xd4\xf6#\x83\x95)\xa8\xec3\x85W\x15S\x10\xd8\xea\x06\x06\xbbP\xd0\xf4\x8f\xa2\x9fh\xa4\xf3\xc1{\xf4\x135\xcd$E\xd9\xc8\\hot\x92\x91I\xbbwk\xf3\x93\xa1\xf4X\xc3\xc2\xa3\xc9\x05\x04\x83\x8b\xb65\x8dL\x81\x12R\x97\xe1\xe4\x88\xe1\xafm\x0d\x8ds\x06nSC\xe3\xb8\xb13\xb8\"\xddT&\xa4 \xde\x94!MEC\n-\x93\x12P\x89^\xfd\x81\xef\xea]\xb9H\xf3\xb5\xaf\xed\xe5\x0b8\x04\xf4\x81^!7Rv\x18\x11\xed\x86x \x87\xf0\x82\xbdP\x1a\x10\xf45%\x00\xb47\x8f\xfd\xd2wL5\xf8\x9eS\xe8'\x15t\x94\xd4\xa1\xe5\xea\x97\x9e\xd6\xc3\xae\x19\x0e5\xf8\xaf\xa2\xf3(\x0cD%Y\x17T\x16\xc0\x81t\xab\xc95\xaf\x9f\xe0\x10\xde\xc1Cx\xd7\xe5\xa1\x1cM$\xe7+8\xc4\xc0GW\xd4\xa2\xe8\x12\xf0\x91[Vy{\x95_y\x0c\x87\xb0n~e\xe0\xfb\xcf,\x12Y\xbd\xb1\x80\xf9\xcd\x02\xe6 \x1c\xc2\xdeT\xab)h0z\xcc\xe9\xfeY\x8dOl=:\xec\xe03:v\xda\xc1gM\xbew\x8c\xfd\xe1\xb7\x84(\x87\x86\xe37\xf5\xf7\x04h\xe3koh\x9bo\xea\xf0e\xda\x03\xec\xf5~\x1b\x8e\xf5\xed\xb7\xfa[U\x1b\xe3f\xccB\xd9\x15G\xb1\x02FWL\xd6z\xa4\xe8\xf3\xf6\xb3\xdc\xfbH\x17&\xa8\xb0\x99\xd9\xba$4\xdf\x8c\x12\xa7\xe5\xde }\xe9\ns\xf8\x0fq&\xba\nC\xffSx\xd82#\xd2\x06\xa1\xa2\x070\xeb=T\xf6\xa6=\xb9\xf8au\xc6\x00VF]\xddC\xabT\x0dA\x1ac\xbe\x10\xdaS\xf5\xd9\xa7\xea\xaf\xf3?\xff\xef\xefN\xc3\x8f\xee*f\xb39Y\x9a:\xe9cx9\x86_Q\x0fu\xe2\xc0\x0d\xf8\x15n\x80\xf3\xd6\x19\xc3w\x18\xc2\xb7\xf3\xac\xb5z\x92\xa7\xd9\x84\x9fg\xca)p\xffJ\x1b\x1d\x833\xd2o\xb5\x1d\xa7 $YN\x02\xbfT\xad\xcf\xfbq}\x96\xd6\xdb\xbf\xf1\x16\xc6\x846\xfe\xfep\xab\x15i\x9c\xe4\\g\xdcb\xdbq\xba\xc6\xb0\xa4}~%\x94\xe3\xaf\xae4G\xfa\xb1\x89\x9dgnW\x14o&\x14\x83\x0c\xeeR\xe7\xff\xb0H\xa9~\xfe\xb3\x1f\xeb\xcb\xb0\xc8g\xa8N\xa0\xbf\xa63\xf2X\xcc\xc8\xe3\xff\xf8\x19\xb9\xc2\x1a+;8wV\xdb\xa9\xe1\xe2\xa9!\xca\xe7Zz\xcc\xeb\x9f\xc8\xbei\xc2\x8a\xbd3\xd4\x0b\xc3\x1f\x7f\xc0\xde\x13\xb3$\xab\xed\x87\xca\xf9\x85\xb2+\xea\xb5\x14\xbdw\xbe\x89\xbe\xfdn\xebG1\xa6\xe2@V\xb4\xf8\xe6f\xf4-=\xe6\xe0\x06\xbc\xb1\x88\x8eo^\xc2|\xaa\xc1\x8f\xda7\x8f\x07\xf5\x8eU\xc9\xcd\xde\x8fZ3\xd5\xe0\x94~\xfb0s&\xd82\xbbi\xe3*A6i\x8d9\xfbM9\x98\xd7t,{\xcf\xb5'Z+\xcb\x13\xc6\xdc\xce\x0cY\xed*)\x07\xcb\xebP\x94\x8a\xcc\xd3\xa3\xad$o\xd0uX\xebM\xb8N\xf3'5\x84`\xabf\xf0T\x0d\xd4\xd8Z\xf2\xedVK\x9d\x8c\xd5\xa2\x14\x0f&\xd0p\xb9m\x83\xcfXx\xbd%\xef\xbb\xabV\x84\xd0\xc5+fB\xccc\x7f\xea\x1a\x12\xf5\\^(\x11\x087\xc3\x0b\x0d\xc5:\xd2-\xab\xf5\xba\xd5\x0e\x96\xdd\xba\x88\x06\xa4\xe0\x0e\xd9\x9a\xacVvZ\x1f{\x8d\x8f\x98\xb3\x8e\xd6A\xb3*\xa2\xf6\x8d<\x89\xa5\x84H\xefX\x01G\x816M\x1d\x8en\x9a\x84K\xda\xac\xa9\xc9\xa9\xec\xe0\xc7\xa4,\xa3d\xf9$\xcd\xdd\xa0'g4\x183\xcdD\xd4>k3\xf8\x89\xb96PY\xf5'\xe4U\xd4\xaf %\xa7~\xf6\xae\xca\x89\xf9\xfa\x97R T\xaeT\x81\xca\x95*P\xb9R\x05*W\xaa`\x98+U\xe0\x16\x8d\x8e\x06jO\xe2\xe0\xe3\xfb?-l\xfd\x9f\xbe\x04\x98\x0b@\xfb\x00\xf38\n\xde}j\x87\x17k?$R[?4goevS\xc30\xcb\xe0\x1aU\xferma\xe2m\xfd8\xe2\x85\x1e\xfcu\xe1\x9e\xa4c\xf0\x91\x02UO\xbe'\x8b4'\xfcp\x12\x00\xa8\xb7\xe3\xb3\xe4\xa5 \x7f\xca|::7\xdd\xd1\x18\x12\x8f\xf0?4\xc7\x82\x18\xb4\xf6\x04\xce\xf0\xf4\xd5\x9c\xa3kn\xe1\xe8\xfb\xec\x02\x12*\x837\xda\xcb<\x0d7\xc1\xb0\xb8\xfe\xca\xdb\x8f\x8d\\\x92r\x80\x7f\x94\x19\xc9O\x04 \xae^\xf5\x1a\xeb\xf8\xdb?i,\xbf)\xf6y\xce\xa2\xabme\x93y\x99\x00G)\x10\xe1G\xfc\xd8f\xa9\xa6\xae\xdb\xb1\x8d\x19X\xee\xab\xb2\xc6H+\xa0I\xd3\xc9\xf8\xaat2\x1bU:\x99B\x95N&\xe6\x0f\xe4\x15\xd0Z\xb9c\xaeY\xc6\x98\xfeG\x84\x1e\xfa/\x0f\x1e<\x90 \xe9\"M\xcac\xa6\xcfv\xa2\xd2\x8f\xa3\xa0\x1b\xa2\xd3\xfa34\xd2'\x03\xe3\x00m\x1a!)\x83\xd6\xab\xbb\xa4\xf6\x93\xee\x94\x1fc\xc72\x03\xaf\x18\x02#\xff\xdb\xe9\xd1\x8e\xa5\x9b\xc0L\xb9`\x00\xf5\x82\x81\xfeEP\xb1\x08\xc62@\xc0\x19\x04:\xac\xb6\x17\xd1\xc8u\xc4\xd6V\xf9\x05C#\x94\x06\x9ae\xe1wVyC\x87\xd0\xf2\xfe\xeb\xe39\x01\xf46&C>\x06\x90\xb7yz\xaaI\xca\x00\x9c>\xff\xc0\xcb\xa9\xea\xe3\xe4\x8dI\x06@\xde\x85\xdd\x86;$\xd3\xc0\xd0.M\xf2\xf4l\xd7^\xed\xd2\\\x90\xc6\xfa\x05\xb8l\x92\x02\xd8\xb1\xddV6\x82\x8f\xdf<\xf3\x1a\x1a\x90\x05\xa1\xf4HR\xe6\x17\xb2\x12\xb9&\xdd\xb1\xf0\x01\xee\xc8?d\x0c\x07\x06\xbf%\x10\xee\xbb'\xfb\x9ax\x10q\xa1\x0b\xef\xc9\xd4\xa2\xda\xcf\x9e$\x1f\x83\x1b\x8d\xaa<\x81\xeaL\xd5\xe2\x12N\xbc\x91\xd7\xf1\x19\x7f;\x12N\xb4\x1dOr\xee=\x02\xb3\xc6S\xa3G\x89\xb86\xb2\xa6Z\x0e\xec\xfa\xee\x9a\xd8W\x8b\xbd\x0c\xe2HJ\xb5`\x97\xf0\x0f\x10\xd7P|\x06\xd6lz \x13\x94\xb8vl:\x92(\xa3?]o|^Fb\xa39H\x13\x9b\xf6)\x97\x80\xb6CGx\xcb\x991\x95\xbe\x83\xa6D\x83\x97\xa0\x80\xe5\xdcb\xa6\x1f\x94F\xfdX\xc3t\x93CHS\xbd\x83\x94c\xeb\x88?x\xcbP\x82\xba)\n\x85x\xf7\xba\x89B\x9fT\x83\x19\xc8\x04\x1e* \xb9\x81\x10xP\xdc\xf93\xa8/\x1b\xfc\xbeDK\xd9g\xf9m#5m$\x90k\xaa/\x19\"m0I\x83\x84Q\x99\xe6F\x0d#SF\x92<\xb7P\\2md\xec_\xa4\x9b\xd2\x02\xbf\xb3p\xb9#\xcc \x884\xdcH\x18\xe55\xf8\xf3\xd5\x07\x84\xcaL\x04\x82gv\x8a\x8c\x04\xe6\xe1\x84W9\x9c+\xeb<\xf3\x0b\x93#\xc8h\xa7tj\xb6\xfc\xfc\xa2\xcdL\xeb\x93\xa7C+\xcc\x19gA>\x05\x0c?u\xc7;\x9e\x95\xa5\xe1h\x14\xec}\xd9<\xa2\x94V\xea\x9d\xf6jo\x9f\xaa\x8f\x9f\xf7c,Mgh\x86\xe9\x90\xf4\xa7\x87\xd031\x7f\x1fVg\xaf\xe9+\xcd\x99\x0fx\x08+\xb7\x03\xc5\x1c\xc3\x1a\xae_\x02\x16Co\xc4\xcd\xcc/W\xf8\xbe\xb2\x1f\xc5\xda\x8f\xe3F-F\xbf\x84\xee\xeb\x0d\x7fW\xf5gt\xce\xebFw\xff\xb3UT\x92\xe3\xcc\x0f\x98k;\x99\xe0\n\xabw\x95U\x15Gi\xaa\x01>\xb05)\n\x7fI\xb4\x07\x8b\x16]\x8cC\xc2\x8a\xa0\x93\x90\x04)3\x91;3p\xb0\x12\x8aah\xc1&/\xd0\xdc\x94\xa5QR*\xb9\x1f\xd9\xd8\xb0\xb6\xb5\x8e\xe6i\xaa(W\x07\x7f\xe2\xcd\xa3$t\x19:\xe4R\xbb\xb6\xf3\xe3f\x9dA\x99\x02\x1d\n\xc5\x96\xbc\xd6U\x88\x1fm\xb24\xd4\x04\xb6\x13m\x91C\xe5\xbc\x8c\x8f\x92ZtwJ\x8e%h\x9fEE\xe9E\x05\xfd\x8f\xdb\xd9\x0c\xf6\x9bI\xb2\x97\xb8\x9f\xb0\xc7v\xd5%>\xc4\xd2\x804\xc8!\xfa\xe3&\xe8\xe5\x91c\xcc\xa4\xdd\xa7\xd3\xa4Z\xc6\xd6\xe7v\xde\x19\x9f\x90\x90Z\x13I\x0c\x0fB\xc4\xfd\xc8$\xcd~3\xff\x99 \xd5\x95\xd2\xa86\xd6Z\xd1\xab\xf6+\x06\xda%\xd3\xd6\xad\x94\xda:\x17\xd3k9\xce\x88W\xa4t\xc0\xb1\xb1\x1d \x11\xfcd\xff\xadW\xa6o\xe8va\xf5\x8a\xe0\x06\x10\xaf\x88\xa3\x80\xb8\xd3N\xc7\x04-\x81^\x1d10\xa7\xccm\xf2\xa4-\xa51\xfb\xc2\x17\xbd.\xbf,\xf5\xbaA\x95\xbb\xefO\xa3\xe1\xfd\xe2\xa0jQ\x01\xe9\x12>\x87\xe2\x13u\x12O\xdc\n\xd7\xd0\x93\xb0\xca\x92\xf58\n\x9f\xa7\x9bD\x16Td\xab$\xaf\x95\xe3\xcdl\x1fE\x95\xce\xa837\n\xf0*?R\x7f\xb2\xda\xf3!;J>`\xea/\xd2\x1bT\xfbN\x9d\xe6\xa9s\xbf*\x9d\xcf+)0\x9dH\x13G\xa4\xc3\xbf\xc4\xf8?\x81\xb9\xa39\x04\x93\xb5\xa3\xe2\"M\xa6\x0e\xec\xaeV%\xddv\xb3\xda\x89\x89\x82^\xc8&\x8edR^dD\xb0\xb7\xc8f\xba ?\xfe\xa5\x9f\xd1\xe9\x11\x0b4\xd6\xec\xd4\x03s\xcd\xf4\x9c\xf5J\xab\xf7\xd5\xc4\x85\xa9\x06SZp6\xe22\xe9fR\xe6C`\xa5\x953\xe8\xdb\xf8\xa05\x81\x9bR\x8fm\x80\xaeE}\xc7\xda\xe9z\xa5\xdbB\xcf\x98I\x12@\x8fzU\xa9\xf9\x08\x93^~\x93\xe6\x16cI\xb5co\x91\xa7\xeb\x1f\x8fG\xee\x89C\x0f\xb5(@.\xff\xe6\xafE\x9a8o\x1b\x9c\xe3\xf8\xday:\xd3\x1e\xbd\x10!\x06\xcf\xa2\xe4\x9d&5\xfcug\x10\x13\xf7\xb6* \xfdg\xc9\x18^\x05?\x98H\xf9\xc1\xa8\xe2\x07\x93\x11\xe3|\xf6\xbf\x86\x0d|\x03\xc9\xd7\xb0\xa1\xfc`t\xb2i\xf3\x83\x1b ?(\xf8\xcd\x0f\xc5\x08F#M\x12i\xcc\xb2\xf8\xda_\xa2\x05\x17u1\xa7\x8d\x1bLx\xa5\xccn\xa1X,\xb8B\xe6\xad\xd9\xb2\xc5i\xaf3:5\x98\xb1\x96\xc7\x003\xfd)\xf2F\xb7\x87\xa8\xe6G\xe87^d\xd7\xb9\x87\x9f\x80c\x1a\x14\xadf\xed\xf4\x91\x0fq\xfaH\x07\xa4\xcad eK\x7f\xb9$aE\xb8\x0b]\xc6G\xcc\\lv 11\x0f\xf6\x8aB;\xee*\xdd\x92|\x1b\x913S\x8d\xc1\x17\x1c\xceA\xa1p\xb0\xf56\xad\xad\xb7U(\x9d6\xaa\x1e\xf8$\x9f4z\xe8/\x0bg\x0c\xa5\xc1Y\x98y\xcf\x08\xa7\x92\x08\x1dI\x8c\xb6\xe2\x9dye\xa86M\xd5OT\xc2*_\xb8\x84\x9f\x05\xec\xe4\xb6\x00\xf5(sF\x1d\xe8\x9cl\xd4\xee\n\x00=;F\xf7jbPL\xd9\x95\xe6\"\xe9}\xd3\x85\xef\xaa3A\xa7\x87\x1b\x0e\xf3\xa2S\xcd\x89o\x9a\x90\xda\xef\xc1\xe0\x93j\xf4}\x00\xd6\xc3t\x00\xab\x0f-\x0bN\x992\x86PG\x06\xc4U\xa7\xeb7\xc32b\xb36d\xb0\x15\x17\xf33\x8b, \xe9N1$G\x05\xce\xde%\x0d/\xad\xc6\x06\x1e\xc3\xc6\xd29}g_\x0b\x10\x1b\xcc\xa2\xa7\xc6\xf8[q\x898\\C\nSzE\xe1\x0c\xd2*\x19\x93\xc5\x0bt\x8b%Z/\x9c&\xe4\x8b\xec\xa9\x19u\x9b\xc0/s\xb2\x88\xce\xb1\xb0]\xbd\x0c\xc6\xb7W9Y\xcc\xc0\xf9K\xf5\x12\x8e\xc6\xa2\xd9\x8a\xde0\xda\xa1'\x1a\xb6\xfe\xdbR\xb0&\x08&\xca\x8f\xfeM\xe0\x1bVUDM1o5\x0c\xfa?\xa5u\x9cv\x01L*\x0b!J01\xc9\x1eHm&\xad;\x03\xe5[\x83SI_\xa4\xb3\x12D\xa4\x04\xc7Z\xe4\x10\xd2\xc6\xae^\xc9\xcd\xfa1\x1a\xbe?i$.H\xbcS\xfe\x077VQ!\xb0=\xaf\xff%\xf9\xc4\xe5\xf9}\xde\xea\xc7\xe5S\xf964\xb1\xa8\xed\xed*'\x91\xcc\xc3\x98\x8fb\xe4\x9e$\xc8\xdc\xc0\x1e{[V\xe4\xbf=\xab\xd7\x8a\x81\xd7\x1d8I#\xd7\x83\x89Y\xc7\xa1\x9b\x98tJ\xcev\xe2\x9fc\x8fnE\xdd\x99\xc3(\xa5\xe6\x0c1\x9a\x99\x81\x87J\xffB\xa2\xe5\xaa\x9cAN\xb9\x9dy\x1a\xb3,\xa4I\x9a\xaf}m\xfc\x9ez\xec\xb2\xe4\x00j\xf0\x96wl\x9c\x06\xef\xaad\x04\x94e\x1b\xee\x05l%z\x08\x9f\x0b;\xe9\x83\xce\xca$\xf6\xe7$\xc6\xf3HQ#|\x0cI\xdbT\xbc\xb3/\x03(\xdbW'\x1f\xb4\xb0=\xd8\x1c\x1b\xff\x05\xd7B\xcb\xf84Y\xa4o\xf2\x18\x8f'\xfa\xfb{\xbf /\xfdr\xa5Q8JS+\xa4\xaa\xd4\n\x91*\xb5\x82\xafJ\xad\xb0Q\xa5V(T\xa9\x15\xe2Vj\x05\xb4C\xb7\x01\xea\xdc\x0b\xdcR=\xdd\xbf\x16\xa9\x17zsn\xc5\x11h\xdc(\xbeD%5\xe1\x86\x9eY\xab\xb4\xd0\xe8x\xd8\xa95\xe7\x8b\xb5\xd3q3(\x16\x84\xb64\xd9\xe4jR\xe4\x9c\x00E\x1dx\xf3\xea\x19\x96\xc1-\xd1g\xc1\x81\xb7\xbb$\x80\xd11\xb6vn\xd1\x06\x0c\x85O\x8c\xa5\xd0\x9b\x05\xb8\x12l\x053\xc6\xc2\x00\xac\x85\x81\x98\x0b\x15\xf6\x86~i\x90\x89\x93\x01\x1aM\x00h:\x9e\xf3\x94\x9c\x7f\xfc\x01N\xb9\"\x10\x92-\x89\xe9\xc9c\x905\xd3\xfa\x0b\x14\x93-\x14|\x1c\x9a\xac\xfd\xc8\x08\xefc\xf2<\x87\xb2p\x16\xf1\x1fV\x8cL\xaa\x15/mX\x1e\xa3\x86\x8aq\x94.\x96\xf5*\xfc$*\xa3\x7f\x937y\x99%r\x90\xfb\xbb\x9d8\xc5\x14\x9e\x945\xd4\xb1\xf3L\xb5\xb9\xc9c\x1d\x10\xb3\xd3\x08\xee\xc4\xe4\xe5^\xa2\x0c\xa9\x83bR[S\xca\xd3A\xc7\xcc\xea\x83L\xee\x15x\xcdc\xee\x98\xbc\xcaV\xa8\xa6\xe1\xb1\x8e\x86\xd3\xdeh\xf99\xe4\x984\x829c\x085\x06\xbc\x9a\x19\xd4\x9cZ\xcd9\xd4\xba\x91\xb6\xcfA\x85\xa3\x8d\xfa\xa4\xb8\x949\xb9y8\xb0\xda\xfe\xd7\xedp(T\x87C\xa1:\x1c\n\xd5\xe1P\xa8\x0e\x87\x82\x1d\x0e2\x92_||\x92\xaf\xd7\xa0\x7f!\xf9\xe2\xb2%\xf9\xc2/v\x97 Z\xc6\x1cXo\xa1\xf8Zn\xa1\xeb\xc1_\xf5\xf7\xd6\x17v\xea\xcf\xb2\xb7v\xd6/4u\x0b\x8b4Ugp\xfa\x8f;\xf7\xae\xc7\xa6\x157\xffDB\xd1\x97\x94B\xda\x94BO0\x9f9K\xff`4\xe5\x03\x9fO\x1ed\xd7\xc8 $\x17\x06\"i\\\xf4&\x0b\xfd\x92\xb0\x86e\xc6\xdbO\x9e{\xe8\xd2d\xf2\x03K\x9d\x83\x82\xae\xa5\x96\xfdG\xa9\xd6\x90B\xe9\x8e\x13\xa7~\x18%K\x96\xd5\xb8\xf4\xf8\x9f\xc7\xa5_n\xb4B\"\xc5[g\xe1G1 \x07\xbf\x8bn\x85^\xb0\xc9s\x92\x94\x1cC\x0c\xd2\xeb\xef\xef\xb5\x82(\xba\xde\xb9\x1b\x0f\x0b\xea\xd1\x9e\xe5$tF\xdc\xdb\xb0y\xff/\xbe\xefk\xb3\xa07%W\xfa/\x8e\x0dmw{S\xfe\xbb\xaa\x1a\x7f5\x07$\x8e\x1f\xebU\xfaQ\xb2CN\xfa|XK rf\xaa'|\x9d\xce\xa3\x98\xcc`z0\xb4/N\x94d\x1b\xfbTCut$\x9f\x05\xfe\xba\xf2\xe5,\xf6\x03\xb2J\xe3\x90\xe43p\x18\xea\xc0\xfc\x02J\x7f\xa9y\xab\xbc\xc8\xd0\xbeE\xceu\xdf\xee%*j\x12M\xf5k\xd5\xc1_c\x8aS\xe6\x1b\xe2T\xd8\xe28\xa0U<\x84U\x81qs\x14\x94\xdcn\xf6\x81\x13x_O^*S\xf1R\x99\x8a\x97\xcaT\xbcT\xa6\xe2\xa5\xb2a%\xc53\xca\x15\xb4\xeeb`L\xa6\x89\x9cY\xe0\xc7\xa6\xfbR.,\xfb\xf8\\X\x08\x87\xf0\x84\xb7\xef!\xebAwO\xbb\xcf\xfa@\x1a\xe8\x84\xd7v\xf0\xa4yYse\xc0{\xa7\xe6\x96\xec8%\x11iK\xfb\xa4Wmn\x19|\xc4B\xa3K\xbf$\xd2\n\xae\xe2\x8a\x8a\xa30*\xbfO\xcfg\xb075\x12\x0bGI\xe4#\xc3.\x86+a\x80`P\x02F\x18\xc0\x13\x81H\x95\xc3\xd8?\xacq]4\xa7\xbef\x96\xac\xcdc\xaa\xd3dx\xb6E\x90\x8cD\x9boB;\x14U\xa2\xb7\xa1#\xf8d\xfel\x8c\xcf\x14\xe7\xde\xa34)6k]\xfeD\xa8\x9c\xd62?\xf7\xd7z@\xe6\xb5\x16\x15\xbcf\xb6\x1e8\x1a\xc2\x1eC\xe5\xb7\x96\xf9\xe5\xea\xb9E\x9a\x8e\xcd\x003\x0ep\n\xbfq\x9d\xefYE\x1c\x0dk\n\x9c\x82o\\\xe759/\xbf\xcb\x89o\x02\xcf\x18\xf8*Z\xae\xe2h\xb9*\x1f\xa5\xa1\xd1\x81,d\xef4R\xf0\x99\xde@\xef\xed\x08\x8bg\xe2Z\x91\x92\xe4\xbfD8[\xfe\xf7\x17OC\x92\x94Qy\xe1\xfa\xdc\xe7<\x1fyu\xd9\x94\xc2\x19s\xd3\xf7\xb3\xa8(Gn\xf7\xc8\xea^[,\xa7\xd9\xe8\x1c\xdb*\xae\xcf?\x9a\x93\xdf6\xa4(\x1f\xd9\xf7~\xddBb\xfai\xc4\xccN*Wq[\xf8,\xc8\xde\x98\xd5\x8c\x0c%\n\xd5\x03}\xfbK\xd1>\x12~=\xec\x05\x1c\xc2\x92\x89\xc7z\xc09\x02V\x07\x85\xd1[\xed\xca\xaa6\xcf\xd3\xf0b\x82X`\xf0zpB\xbf\xf4\x19\xe4\x04c6f\x907#8\xec\xdf\x8e\x92\xfa\xdd(\xd1\xd5\xfc\x1a\xc3\x9c.k\xaa\xa9\xae\xb9\xd8m\xb0\xa7\xa7\xc8\xf0\xc3\x0dpW\x0d\xeb\xa3\x03Q\xb2\xf5\xe3\x88e\x070\x0d\x8a\x93\xdf\x0b\x03\xadk\x8b\x0e+? c\xf2\x82\xdfT\x8f\x9d\xee\xbc\x0b:z\xd5\xc8\x8d\xce@\xaa\x91\x13\xab\n\xa3bp\x9a\x1ej\xca\xae\xee\x8e\x86\x13\x96\x91U_P[\x87\x11\x97i\x9b\x84Q\xa9mX\xd5h1\xa0\xc19\xa6\xa0(\x13\x08\xfc$ 1H\xd6\x86u\x04D%\xb50*\xd5PF\xeck\xa4\xa9(\xd3\xe52&O\x05\x99\xd1\xef\xbc\x87\xe0<\xc2\x1ebG\xe8+u\xd5\x02\xcd\xd2\xb3\x0c\x0e\xa6\xf9X\x95\xeb\xf8 \xd6q\xd8i\xbe\xdb\xf1N\xceKq\x8c\x89L\xb4\xc0\xca\x92\xa9?`\xf4U\xe3\xf8\xbf\xd5Oo;\xf1\xad\x89\xeb\xa9(\x81\xc1\xf9Z\x81\x9d\xad\xe4\xcb\x9a}\xa9L\xea\xd4\xbb\xab\xf0.k\xc7\x9c\xd4\x87\xd1\xaay\\\xf6D\x1eq|\n\xdf8m\x02\xe0\xf6\x04\xe0\xf8\xba\xef\xfd\xfe\xbe+\xbfW\xf3\x17\xca\x1f<\xaaz\x10V\xcf\xdf\xb7\x95\x03\xdb\xa6x\xda\xe5\x97\x9b\x98y\x05\x89\xd9\xfdY\xcdLDU\xde\x10T/\xa5B\xbd\xa4\xd0\x1cQ6\xf9\xe6\xf9:\xbe\x19y%)J*\xceJ\xe1(\x83\x8c\xcbf\x02D\xab\x08<\x84\x84\xc7\x80\xd0\x9e\x9e\x9e\xafYu\xb0\xe6M\x99\xe7P\xb4\x00\x97w~\xef\xf0\x10\n\x9db=\x86C\xd8C\x8e\x0f\x93\x17\xfe\xfe\x9e\x8e\xb2\x903M\xc4+HyLY5W'\x1c\xe1fW\xd4\xb0\x1e\x8d\x9b9\xf1\xf5\x9eH\xc5?\xd7\xb1V\xa1\xd7P\x06(\x12\x9cK\x94u@\xe2\x82\xe0\xdc\xb6\x92\xf3\x17x\x0c\xb8\x0e\xce\xb1\xaa[\xfa.i\xbb\x83L\x88\xacEMc\xda\xcf\xb5)\x0d\x17\xf8\xd97\xad7\x14\xd1I\xafXvK\xb7\xe3R\xae$J\xbcE\xe2E\xc9\x82\xe4\xc7X\xe2\x7f\xe4\xe6<\xdaF\x9dg\x8d\xbe\xb7\xa0h|\x8c=\x16/\xa6\xa8\xefT\xcc\x07+\xb0\xf0K\x1e\x95\xe4E\x12_H\xf3]*\xe6EL{kf\x14\n3\xa1\xf7Lj\x19B=~\n\xf4\xcf\xb5\xa44\x99q\xaf\xf0}\xa2\x90\x90\x0d\x8bOw\xd1i]bc\x0c\xa9|\xdc\xa7C\x06\xee\x92N\xed\x0e\xf8\xe3\x0f\x08G\x0c^\xfa\xf96\x03>\x14\xedl\xe8p\xde%\x98\x89\x82`\xa6\x1d\n\xac\x82\xa3\x84=\xa7Bl\xcb\xe0\xea\x95y\xb4vYA6\xbd!\xb6\xb1\x85\x95ek9\x99\xe8\xc7\xba(\xb0\xb3\xc3J\xea\x8eUh\xa8\xa6k\x0c3+\xd9\xf8;v\x8aURc\xbe\x14^\xc2\xfc\xa8\x0c\xc9\xef\xe5\x96\x8e\xeb\xe9J\x7f\xdd+\x10\xd0\x1f\x0f\xee\xdf\x1a\xfd9\x8a\x10\xfc\xf9\x1c\xc2\x189|\x92\x06\x9bK\x96 \xe2$\x88\x15\x94\xa1\x1cB\x98\x068\x0e\x8f\x9c\x93\xe0Q\xba^\xfbI\xe8:A\x9a]\x98Sd\xc9\xa8\xd4\x07\xf3\xcc\xf0\xb8\x12R\xcd\xb4\x95\x9ck\x88\xeb9%W\xe0\xfd\xae\x0e\xce\xac\x8bK:\x8fX\xee&\xd3\x17\xd5T\xb2]\xbf'\xa3\xd2dQ\xaa\xb3\xcb+\xdb)\xc9y\xe9\xe7D](\x11P\x14CTj)\xbb\xf0\x8ezrs\xe2\x87\x8c7b\xb6q5dk$tZ\xd4\xa0V\x89A[\xc52/\x91\x0bT\xb0E\xf2)\xfd\xa0\xe6\xf7\xebP0\xa7\x7f(m\xe8\xa14\x95\x9dJ\xf4\xc9\xf4\xbe\xecX\xa2O\x1eLUqlj\n$\xbc\xd1N$\xa5\x08(\xe3&\xab?U\xd9|\\gE\xfc\x90\xe4EW$\xa5\xe2h\xe9e\x9bb\xe52T\xc3\x84\x9d\xec\xef\xc9?\x9d\xb1x\x9d\xe5\xd1\xc5\x18N\xfe\xf8o\xce\xdf\xb0zf\x9d\xa1\x08n\xc0\xdf\x9c\xbf\x8dx|\xf4\x06M\x12*V\x93\x9e\xaa{\xfbrTC\xb1Wa@\x0e$9C\xc5U\xe6\x17\x8a\x8dP94.\xc6h{\xea\x9c\x1b\xdd)\xf2HR\xe6\x11)\xa8\x90\x04{.\x16\xba\xa1\xc7i\xe6%\xe4\xbctG#/L\x132\xfa\x9a\x8f\xc2d\x8e\xc4L`6\xd6\x91\x15\xefZ\xe3\xc8\x0d\xc7p`R\xcfS\x9e\xedd\xdfP\xa1b\x8dPS\x89#\xa6\xb8(\x12\xad\x1b\xab\xff\x038\xdd\xd5\xde\xc2\x0dpf\x98?m\xcdW[N\x0b\xfa\x84\x00\x02\xbf\x0cV\xa0>Yc\x86\x11\xb8\xc2}{\xc1{XD\x89\x1f\xc7\xaa\x15V\xaf=\xbd\x98\x12%\xf3\xf8\xa1\xd5\xf8\xed*\x06`h\x0e\xf8\xd6\x89GP\xae\xf2\xf4\x8c\xbb\x07u/\xc9<\xfc\x97\xfa/\xfaA\x8e\x8a\xf34\xbc\x90\xa5\xd6\xa1 \xcez\x13\x97Q\xe6\xe7\xe5\xcdE\x9a\xaf'\xa1_\xfa\xcc\xd1\nG\xe6\xbc|q\xfc\x9a\xfd\xdd\xdd\xbb\x1aNa\xa9\xd9\x8f\xc0-|:\xa7\x8e\xb9f_\x82q}\xaa\xfdy:\xc6\x8c\x1c\xf2\xfd\xc9&\x057\xe7\xc51\xf9\x8d\xefN\xdas\xf7\x14\x0e\xe1\xac\xbb;\x97\xc6\xdd |\xf4G\xfd\x8dw\xca7\xacq\xfb\x01\xcf\xf5qd\xdc\x82\xc0\xb7\xe1\x91v\x1b\x02\x9e\x08|\x0f>q0h>J\x8a\xd2O\x02\x92.j\xae\xdb{\x12\xa1\xb0\xd0\xda\xa0\xe7t\x83\x1e\xfe\xffq\x83z\x89\xbf&\xf4\xef\xaf\xcb\x8b\x8c\x1c\xb2{\xf4'\xdf\xb9(P\xf7\xde5\xeem\x90\xe25X\xedq\x10\x98\xb4?F\x8c\x91\xdb\x05m6\x9f\x1e\x9f\xe8\xb5\x87\xc1\xfcg\x8d=\x7f\xa6\xdf\xf3`\xd94\xf0}x!\xf6\xfe|\xe8\xabe\x0f\x1b\x94\xb7#E\xb5 \x84\x97\x13t\x07uo\xfe\xeb_\xc9\xcd\xe5\x18\x1c\xa7\xab\xd8\xe3\xe3/e\xe5\xac\xdb\x1c\x8d\xcf\xb9\x93[\x8aJz\x9b\x8f'\xc4^7F\xefK\xcc\xca\x97\x98\x95O\x11\xb32 Z%B\x95c\xb0\"k\xab\x9a\xd7\x0dp\xab\xcf\x0b\xf1#29\xd5 c\xa0.K\x1b\xb3\x072\xbeD\xc1/\xa0#\\U_\xb0\x1e\x19\xe2J~\x0dCiZ>\x98\x97\xad\xe3-Q\xde\x148\x01\n\xeb\x1f305\xd6\xff\x9aV\xf0n\xba\xa7\xb1\xd0\x17\x8e\x82H\x9b\xf8\x10\xebr\xdd*p\xcc\xa3\xdb\x1b\xb3x\xfd\xf2c\xff\x00\xca7\xbd\xd2\xad\xea\xbc~_\x91\xf64\xec\xa6\x993;\xae\xd4N+\xbcW\xc3\x95h\xc6\x94\xa3M\x1d\x17o\xc5T\x0e\xf2\x98wF[\x89\xc5\\\xe7[Q\x8c\xdb\xa8\xf6R\x16\x8a\xe1d\x16E\x92\x01u\xfcL\xebdY\xb2\x9b\xf7\xce\xa0Z`\x85\xbd\x95 \xb6%\xbbM[jw\x05\xdf\xf5\x8c\xaf\xf9\xc2\xf7} \xbe\xef\xcfg`\xfa\x14gF\xcd\"\x99\xce\x0d\xcb\xb0\x82|@\x90\x00s\xb1\xa8\xc2\x17\xf91\xac\xd1\x96D\xf8\x02'\xf6\xe6\xd8\xd8\x82\x04\x9b<*/\x1e\xd3}\x1d\x95\xa6Z\xc7t+\xe5\xc6x\xdf\x98A\xf9\x9br\x95\xe6\xd1\xbf\xc9\xf7%\xa5\xb0{\xdd@\xb6\xe6\x15\xb0W\xc4Qx\x05\xf60\x8c\xd4\xe5\xc5&\xff\xf8\x03\xfd\x9d\xae\xc4\xea\xc5\xbax\x890\xda\xcd\xb0\x96\x8a+\x89\xa3m\xce\x86z\"\x02m\xd7\x9a\\\x91>\x84\x94u\\\x9b\xdf\xaa\xb1\xad\xd4\xc6\xae\xcaAX\xb7z<~\xbaJq\xf5\x1f\x9b\xeb\xea\x93zo\xc8\xe3T\x03\xb7ht4P\x1f\xad\xd7\xd9wC\x15Xj\xad6\xd9~\xf8\x80\xd2\x88\xfbP\x89*\xf4\xa1\xc9\x87\n\x1a\xf94\xd2\xe45\xbe\xcchD\xfb\x9e+n\xac\xd3\x90\xc4\x942\x8da\x8f\x07\xaaz\xe4<\xf3\x93\x90\x84#\xa1\xea0\xb8\xc6\n\xf8Y\xff\x13\n\n\xd0\xdf\xc3\xf2\xe9\xdd\x98\xb4&\x18iW\xb5&\x87\x89\x11&\x10S\xc8\xe3\xc8\x94\x1a*S\xb8n=ZE\x9f\xba-\xcd F\x99[\xac\xfeK\xee$\xd8\x86\xeaOI7\x9a\xf7\xc3\xf0^6\x11\xbc\x1f\x8e\x0d[E!9&\xf1\xe2Er\x84\xd3j\xe2\xc5\xf4+\x0d\x15\x1bV\xa1\xb5B\xe7C\xf7D\xd2\x89\x07\xac\xf6F\xdes\x0c\x85!\x1a\x90\x0f\xad\xfd\x11s\x80N\xf0\xf5\x94T\xa3\x19\xb4cw\xd8\xaa\xb6\xf3\xf0 \xb8z\xd4\x82\x98p\x08\x991\x956P\x98|\xaa\xe8\xcd\xfe\xfc\xb2U\xe8b\xae.\xdcl\x88F'\xc1\x0c \xea\xf2\xb6\x0d\xb5\xde*\x8a\xc3\x9c$\x943\xfa(M\xebB\x0d\xcd\x0d\xc9\xc2\xcc\xaasM\xc3Q\xdaxi\x05\x9b\xbc@\xa5[\x96F\x892_\x1c\xf4\xb0\xb7\xba\xcb$\xe7?\xed\xe0v\x1fX\xab\x92\x04%\xaa\x1368\x8c\x8b\x95\xed\x12\x1eP\xe4\xd4\xc7\xa0\"|\x17S\xf6\xcb\xbf Ar\x985a\xbb\x87\xa7\x91J\xf5\x85\x02\x990\xb0h\x1d\xd1\x92\xe8\xb5\xee\xc1\xee\xfc\xeey\xde\xfb\x0e\x89k\xb0C\x1d\xaf\x0f$O\\\xf8i=\x10GO\x9b(v\xdc \xbb\x14\x87~\xbf\x1e\xd2\xf83\xf0\xf9\xbb\x96*\xc11\xfb\xa10\xdc_g\xe5\xe0\xe7!\xc1\xf8A\x19m\xc9k\x7f>\xc8VZ\x99aC\xbf\xf4\x0bR\xa2G\x8e\xfc\xc8\xb6\x92Q\xaa^\xa8\xd5\x12\xbd\xdb\x97\x13JP\x13\x98,\xa2\xa5\x02\x8a\x89%\x86\xc0\xce\x00\x13QW\xb9\x86\x9fS\n\xfc\n\xf9\xaa(Y*E\x18G\xc4\xef#\x8b\x18\xa0k\x1b\x12\xef\xc6\x0d\x97~\xba\x02\xb4HS\xd4\x98\xc1\x98R\xf9\xaa\x8d\x99\xc4\x83\xefc\x0b/W\xc9j7\xb2\xce\xb0-^\xffIg\xafq8\xb5\xe0ly\xef\xc6XG\xee\xc4\xd1\x90\xefG%Y#\x9fY\xd3\x9a\xc3\xc3ff\x9d\xc6\xd9\xf2\x10\x1c\xbe\xb3x^\x96\xc1}\xd3\x07\xadt\xba\x16G\xc9;U\x860\xa8\x92\xd9\xf0$8\x8e9\x9dJ[~\xa8\x86\xa5\x1aDD\xc7{\x14F%`\x8c)\xcb\xbe\xc1\x1a\xe1wX\x154\x8dqd\xd7\xa5\xe0\xe7\xc8\xf5Z\x08\xda\xb3\x88'\xe7i5n\xbbBlTW\xb6>l\xc7\xd6\xb9P\xcc\xb1Y<\x92\xcb\x8c\xe8_}\x05\xe9\x18\x8c\xcb\xa0\xa9\x84\xa65\x071b\xab\xad\x94\xd2.M\xa2\xa1\xf55 \xd5\xa6;h\x1d\x06\xda\xc4'\xa4\xa6\x993\xd0\x14\xb3\x14\x14Y\x97\xef\xb4\xf7\xc0(1~\xdef\xa4\x05\x15\xb1z\x12S\xca\x9f\xf4\xa4\xb2H\xbc\"\x13\xbe\x162\xa9l\xc3\x1f\xf4\xda(\xf8\x83\x9eT\x16K\x0dL(\xfe\xb8qS,W\x1b\x98\x16\x1f_<\xcbl\xc53\xbd\xcfn>\x06\xbf\x7f\x92wy\xdfk\xe3\xb3+\x92\x84ozb\xa2\xc2g7\xed\x8b\x8az\x9f\xdd\xbc6X\x1d\xb6\xb7\x8e\x8aG\xcde\x89\xe3\x01\xabE\xc92\xca\x17\xab\xf4\xcc=a\x94\xb3p\xc6@\xde\xd2o\xf7\xe9\xc0\x989Q\x8c\xbb\xe3\xa5+f\xe9\x0dSH\x85\x1a\xdfN\xa8\xb9\xe6\xbc\xbb\x0dc\x9c6\xf8V\xdd!\x1c\x19B\x9f\x9a\xda\xf8\xe6\x92V\xc7\x05J\xb2Q\xdb\xdb\xb7\x03\xe2E\xc5\xf1*=K\x9aK\xdf\x80\xa6\x1c\xc0[\xccB\xa0?\xa0\xed8\x12\xa6\"\x9d\xa7\xe7J\xdeX\xd5L:\xeejX~o\xa9\xfbu=h\x1e\xb4\xc6\xe3\x93\x84Z\x0f\x8e\x90\x9d\xae\x9ax\xb5ZYY2'P\xf6\xa7\xa9]~l\x97]C\x16\xde\xa7T\xa3\x9f\xf5\x06v<\xabc\xe3\x19\x9d\xe1]\xc3\x19\xed\xea\x1e\x82\xf2\x10\x07\xbe\xad\xd0^\xe2\xf06)g\n%\xc6\x9c\x89^\xcc\xa0c\x84\x16G5\xe7\x02\xfc\xa2\x88\x96h\x931\xeb,\xaa\xe3\x806<\xfd\x1aJ\xf8\xa6w*|\x0d%\xa5\xfcj4\xda\xf2<6\xf5\xa1Pj\x82\xed\xaa&s:\xb4d$\xba]%\xfd\xf6V~\xf1\xe2,\x11l\x0c\xd3\x16b\x04\x02\xeeZr\x92\xd3\x13(9\xc9\xdf\xdaF\xc2B\xe3x\xef\xe3D\x1f\x01S\x1bw\x89\xea\xc4&\xda\xc3\x06\x9aCN\xd8\x81\x9a\xc07PV\xb3\x9b\xe8g\x17\x1a+\\\x9e$\x860\xc6\xdc#\xc9fMr\x7f\x8e\xe7a\xebO,&1\xc6\x9a\x88t\xd3o\x04\xd0\xde\xfe\x18x\xf64\xba$X8\xd1\xcd\xbd\xb3<*+\x88\xd1X\xc1d\x12\xfa\xc1w\xe4B\x1a!\".\xdb\xa0<\xa8\x17\xaa\x9a\xff\x92\x87\x9fh\xa6\xa8\xe27(\xeb\xe66P\x89\xee=^ \x12\xd3B\xe5\xbd\x9c\x84\xe2\xea\xf7\xe5\xbd;\xeao\xb3\xc8\xa8\x8c\xae\xd0\"2\xd5\xb9\xb2\xe2U\x80G>\xee\xb9\xa4\x19\x92Z\x8eD$dB\xce\xe0\xf5EF\x8e\xf2<\xcd]\xe7\x91\x9f$i t\xcf\x80\xcf\x8e\x18\xf0\x0b\xf0\xab\xd6T\x825g\xcbT \xf8\xa014c\x87At\x9a4{\xf9\x8a,HN\x92@t\x956\x08+\xbfH\xfeV\xc2\x9c\x90\x04\xd0\xe5\xd4\x8f\xa3\x82\x840\x81b\x93\x91\xdc\x1d\xb5 \xe8\xb0H\xa8+\xb9\x0f\xf5\xfc\xee\x95h\x97N\x11m\x1d\xd8;\xc4\xcc\x9dt\xf2\x90\xc0V\x13\xd2z\xc2\x98}9\x8e@c\x9e\xdc\xa8\xcd\xba\xf2\xcd\xb1$\xe5K\x81|/\x16nd\xe9\x1e\x0dR\x0c\x1c\x82'\x18\xa5.\x1f\xd2W_\xb1\xc21\xa8\x84V\xa0\xcd1\x9dlz\xe0\xe6\xa4((\xf6\xae7E $*W$\x879a\x1fH\xf3\x06\x1e\x8d\x81\xe2\x99\x037\xaa\x86\x14\xabB\xea\xedX\x9fQ\x8c\x87q\xb1s\xad\xfd\xaaa\x97\xd2\xa4(\xf3\x0d\xe5\xcdL\x96o\xbb\xf8\x8c\x9a2\xea\x8b'\xd0K\xd0\xc2\x996b\x1fX7+\xda*M\xc9'.\x05M\x1cq\x87 \x97\xcfT\xd1\xc2(x\x08\xd2\xfb\x1c7f(\xb9\n\xb4<\x94\x8a)n4\x86\xa62b\x0c)\xbd\xa5-\xd7P\xac\xd2M\x1cV\xef\xbc\xc1l\xa5\x96\x95\x03\xb4\x019\x82\xf5\xc0\xed\xa1\x9d\xd7T\"\xaf\xc2\xb70\xa5s\xd5H\xeeY\xf3 \xd3\xb7\xf0\xb0\xfd\xe7\xacg\x1a\xef^Q+\x01;\xdd\xd7\xaa\x02P\xd0\xa03\xcc\x9f\x81\xa5p}\x910\x1f\x80\x9a$\xbc#\x17\x85\x9b#WNZu(F#\x8flI~Q\xb3\x8b\xdaC\xae\xd1b\xe2E\x05\xf2Ac\xb6y\xb2B\xc9\x0c\x01\xe2\x14\x1e\xfd\xedn\xa2\xb9I\xd1\xcf\x94\x9e\x03\xfd\xeeiW\x12:\xddKO\xa8\x9c\x1c\x9d\x10m\xc7\xe4{\xa0\x8f\xb4\x94S\xef\x18\x06\xbb\xc73\xf1\x9e\xae\xd7\x1b\xdc\xa5\xad$\xc3p\x08\xd1\x18H\x83\x89\x8f4\xbc\x8cNa\x06R\xa5\x19\xb4\x07\xf2\x9e%\x88t\xf7E\xdd\x1d|r\xdd\xb4z\xa14WR\xca\x9f\xdc\xef)\xe9\"\xfe\xa4\xa7\xef\xf3\xf9\x83\x9e\xbeo\xc3\x1f\xf4>U\xf0\x07=}_\xcc\x1f\xf4\xf4}\x81T\xdf\xb7@\xf0\xa0s7\xe3\x1f\xb9\xd7t*\x08\xd5\x8a\xc0\xf0\xe3+\x02\xf5e\x8c\x86(\x02\x15\xc1\xfb=\x97\x0c\xad\"0\x96*\x02\x83J\x11\x18\x8f\xc68\xd7\xfb_\xc3\x02\xbe\x81\xf8kXP\x81%8Y\xb4\x15\x81\x0b;E`a\xab\x08\x8c\xec\x15\x81\x01W\x04.yd\xb2\xff=\xaf\xa9n#\xc7\xf1>\n\xdd_\xcb\xaa\xe0E\xc5\x8b\xef\x8eoa\x01\x87\x93\xdak\xa0p\xc6<\x1e\xc7/\x1cz\xae\x9c8a\x1d1\xe5\xbc\xed\xb5\xf3\x9e\xf7\xeeQ\xc7\x13l@\xff\x1c\xe8\xab\x86\xf0\xb3,\x11\xde\x15h@\x15\x8aN\xce\x8f4\xe7G\xbc\xc0\x93\x1b\xbe\"E\x1aoIx\xbc\x99\x979!\xeeI\xb50\x1d\x85\xaed\x85\\\xbar\xf4\x900\xa5\x17(Z\nU\xdb\xf4\x02\xb1T\xa1\xba\xf9\x04\nU\xbd*\xd5F\xe5\xca\xb2\x1d:\xfaa3<\xcf\xfd\x80\xa0\x8d\x18\xb8#\xb9\xaa=F\xb8,\xa9\x90\x1dE\xb4\xebb\x94$$\x9f\x18z\xa7l\n\x1d&\xad\xdb\xda\x0d\xe1\x9c\x12k' z}\xa4\x99#\xa7\xcc\xb5\x9d\xb1\xcb|\x96\xc6\x98\xf8\xec/w\xef\xde5h\\\x17iR\x1e\xb3o:Q\xe9\xc7Q\xb0C\x9a4\xf5`\xc2\xfa\x90jp\x893GG\x99\x1a/\xa9`^h\xa7(\xdd\xe4\x01\x99\xc1\x91\xbc\xbb\xa3Q\x8d\x80\xe7\x94H\x9f\x8b<\xd0\xe7J\xc3\xb4\x95\x0fw\xc7i\xcf\xa2\x8e\x1b\x0bi2\xd9\xae\xd1=\xe9dj\x80\xa2\xf2\xe4\xa9\x8b\xa7\x8e/\xd8\xf2,'\x81_\xea\x99X\xe0\x02\xe6\nm\xa9^T\xa0I\xf5\x1d~\xe8\x9d\xc7\xad&\x85\x9b\x1b>\x91)\xf3\x1f5\xaf-\xe5\xdc\x03?\xfe.\x8e\x96\xc9\x0c\x9c2\xcd\x0c\xf8I\xaf\x8cr\xff\xc9\xf2\x15\xf7\x9c\xd8\xf7\x0e\xc8\xda\xc03\x1amQ,\x026\xf3(\xfe\xff\x82>\x19p\x08\xce<\x8dC=n\xeaw'\x08\xad\x84&\x0d\x04\xb4I\xca\x86G;Vk\xa5\xde~\xa6=\xa3\xef\x17\xa7\x1c\x99\xee\xfb9\xe7dv'\xcc`K\xa3\xa0A\xa7r\xdd\xb0AIy\x80\x1f<\x7f\xd7s:\xf6sc\xee\xb1\x0c\x81w\xef\xb9\xaa\xcb/\xc7\xddT\x00\x16(\xc7\x03\xbd\xd0V\x99\xc0\x0dp\xf0WN\x7f\x9d\xd2_\xbe\xae'F7\x07!\x0f\x1b-\xf1m\xbf\x00\x83\xd5\xab!\x9b\xf1:\x84\x0d\xcd\x00\x86+\x9a\xdb\xe2\x0e\x02\x81\xa1%\xeeIa\xf0 \xe0Q\xdc\x0b\xb8\xa1\xb3\xa8\x8dd\xd62\xf6\xa46\xa8U\x87\xcc\x99\xf1\xb8\xe7'\xe4\xff\xfc?\xa7\xfdV\xf9\xb1\x0f\xa4\xc4\xea@J\xf9\x81\xa4&\xb2\x18\x8dw>\xe1%b\xbd\"\x8e\x02B{s\xa0,\x08+\xae-/\n\x99\xc2CH\xbd2\xfd\xf1\xb8\xfa\x81S\x9a\xf2 \xb2\x8a\x80\xbc\x0c\x19\x07\xb1\xaf,\x1cU\xac\xc9\x074\x99\xb3{\xf7\xee\xe9i\x07h\xe9\x07\xd8\x1c \x0c\x97\x92K\x92G\x18:\xc6\xc1d\x12l\x86\xda\xf1\xfc\xf3U\xbb\x10\xd4\xbc\xaal\x7f\x1e\xd3\x13\xefX0\x816;\xd5f\xce\x9do\xe0\xef\xf0\xed\xa59]\xc9Q`\"\xd75\xa9\xd6EuZ\xd3\xe9>\x8d\x1e\xaa\x8c\xb5$\xd3\x82D\x1f\xabA\x8c\xe4\x19Is\xb5\xb2\xbf^\xe5z\xa2\x0e\x0c&\xdf\xda\xae\xe8\xaf\x1d\x8am\x88\x197\x91,\x1b\x1f)\xa4W\x9a\xd8\xed+E3\xb0F5\x18\x82n G9T@\xa2\x89\xd2\xdc\x8c\x19\xd5\xa0\x81n\x06\xa7 #\xca\x01(\x92\xad@W\xda\xfc\xe9*\xd1\x11U\xaa\x03\xd0\xf1\xa7/\xe8\xd8\xb8.\x89\x8eL\x9f\xfd\x99\xa3\xe3\xab\xabD\xc7$-\x07 \xa3\x01\xad>\xbf#\x11\x0d\x14Wv\x02\xbe\xba\xec XW\xff\xba\x94 \xa0\xaf\x08\x0e\xe2\xb4\xd0\x94K}\xef\xec\xe0G\x98\x19\xfd\x08\x99\xe1\xee\xba9Pe\xca\xcc\x90\x99\xd4M*\xe2O\xa41\xe4\x99*\x86^z\x971\xa8\xdc\xbc\xac\xdc\xc6\xa0\xf2\xf42\xbbR\x01W\xe1G\x83E\xffd&\xf4\xb7^\x94\x84\xe4\xfc\xc5\xc2\x95\xa4\x12j^\xa6\xd8\xa0%\xcf\xeci\xe1\xfa\x03\xdci\xac\x1c\xe0\xd6\x03\xdcw\xcc&y(p\xe7\xb1\xd2u\xc4\x81h\x02?\x83C\xd8R\xd2~\xb98\x17\xd8\xc5\xbb\x02\xe0\n\"l`wg\x06`\xedo/\x13\xe0d\xd5GK;3\xe8\xe7C\x1b\x9d\x0b\xb5\xeb\x82!\xc4\xaf\xf6L\xf0\xe1\x9bC\xd8\x18\xc8L\xbf\xc2\xd3\x89\xe7yo\xb5#pN\x9c1\xac\x85\xdem\xbd\x9b\xae\x1b:\xfa\xeef\x90\xa9Y\xdf\x0d\xd6:o\xa8\xcc\xb5:\xbd7\x98q\xc1\x18\x97\x05\x95\xe2\xb96\xe2\x98\xfbF\x8f\xd0\x7fX\xaa\xab)\xec\xcf~l\xb4R\nX\xceB\xc9+\x1d\x8aK\x91\xcb\x8a=\xaad\xce\x0c\x1e\xee\x1ej+\x0c\xfb\x1a\x13&m\xa9B\xa9K\xc5\x1b\xb6v\xa3\xa0\xda6C4\x11\x01=\xd4\xfc\x12\xe9\x8c\xc1>\xa51\xb4\xa4\xd8\x80K\xb1V\x078\x0bvN\xb4\x9ex\xd0\x10f\x0d\\\x87\x9dh\x0e\xb5\xe8\xeb\x1bU\x1fcpZ\xf17\xad\xe7\xbd\xbb\x1dy\x14o}\xb6\xb1mr\xc93UI\x9e\x91J\xf2\xf4U\x92\xe7F%y\x16*\xc9S]\xad \xeb\xc5qRy\xd4\xcd\xea0\x9c\xe9\xfe\xe7\"\x80\xde\x9d\xd3\xff]?\x19TR\x14\xa1/\xf4)e\xd0\xf4\x03\xc8\xa0;\xe6\xf8\x87\xeb\"\x83\xdaH\x89\xc9@i5\xddAZ5\xcb\x8a\xfe0Yqc+\xda\x16\x18D\xdb\x0d\x15\xd1{\x03\xb0d\xc4{\xe8\x9f\\E\xa4\x18J\x07\xa0\x06S\x9f\x0d$n\xc4yP\x81\xce\xc2K\x8d\x83/\xd2|\xedk\x95\xb6\xc0\xb7#\x7f\xe1|m\x94\xaa\xb654F\xaa\x1a\xc0\xd7\xd2 \x15\x9f\xfec\xc8\xa7\xb1\x1c\x1c|\x03\\\xa8d\xe1vKR\xd6\x0bG\xf7\xb6\xfeE\x94,\xafL\xf2\xc6\xa9\x19C%\x81\xf3\x95\xb8\x02\x11\x9cw\xf1\xa7\xb4\xdc\xb9\x97\x17\xde\xca/\xcc-\xe9\xe7\xeb\x14\x8fe\x18\x83i.)Y<_\xc7\xe8\xfa\xb7\xfa\x0f\xd9\x13vS\x07;m\x0c\xe3\x84\x83\x81\xf1h\xae\xbd\xf3?\xff\x8f\xfe\xcf\xc1\x14\xe2\xce\x0c\x9c1\x1c\x97y\x94,\xddT\xe7M\xdaL\x94T!\xe8Vw\xe6\x9e\x99&\x83K\xaa[\x03\xa7\xdf\xf2II4=\xbc\x9c\xc2\xcb\\\xfa\xeb:(\xbc\xc6Pz\xe2}I <}\x86\xa7k\x91\xe0I\x14Qj\x8d\xc3&\xd3\x13?\x1e\xfa\xd8\x92T\x8f\x7f\xf6%*\xd9\xb4z\x8c\x87\xc0\x15ef\xe2{\xb2\x97\x0d\xc9*\x05S\xd9\xd9yI3W\x92\x1c\xf9\xa2k\x80|}<\x8be:\xd5\x94?\xe8\xe9T#\xfe\xa0\xa7S\xf5\xf9\x83\x9eNu\xc3\x1f\xf4t\xaa\x05\x7f\xd0B\xf2X\x8d\xe4\xf1\xc7G\xf2\xe0\x8a\xb2\x14\xa5*\x05f\xcf\xbbF\xa6\xc0\xcc\x87+0\x95Y\x8a6R\xc5edR\\~\xb2,Ei\xf2:\xbfH7%\xa6\xdfV\x03'\x1c\xf8\x91\x9f\x04$6\x00\xe7\xcc\xab%\xf1\xe71 \xb5\x01\xfe\x86\xba\xdd\xea\xb3\xb1U\xa8<\xbf\x98\xa4\x1buT\xb7\xb6R\xfb|S\x96\xf6Y\xd1\x9dy\x99\x00o\xef\xf4\x94\xfe\x11\xe0\x84\xd8\x147\x97\x1f\xcb\x94\x0fd\x93\x8aa]\x1f\xaa\x9f6\x1dT\xd4\xfc\x1b\x83\xf3:\xbf\x80\xa8\x84tS\x82\xccdfp\xdd\xd4\x17\xf7\xaeX#V\x12\xaak?i\xe1\xe7\x0c\x9e\xf0\x1d\xd0\xa8\x86\xd6\x01o`\xa8\x19\x9c\xe3\xe8\x0c\xf6jc!&\xc8\xa8\x0f\x95\xebYp\xfc\xcb\xa1\xf2\xe5P\xb9\xbe\x87\xca\xfc\"\xf3\x0bC\x91\x16\xe2E\xc5\xf1\x99\xbf\\\x92\xfc\xc0t\x94\xb0\\?\x1a\x12\x86P~\\\xa4\xc7\xab\xf4L{\xe2\x94\xba\xc3\xa0\x19XP\x8f\xd6\x0bVQ\x1c\xe6$A\xa1\x0e\xcb\xfc\x98?bG\xa6\xb7$/\xa24\x99d\xb9\xbf\\\xfb\xca\x13,\x1d\x7f\x88\xe6NO\xd7\xa4(\xfc%\x01\xc5\xfd\xc9\xc4_\xcf\xa3\xe5&\xdd\xa8\x0b~X\xcd\xa5\x12hu\xab\x0e\x0ey\x83\xb4\x18\xca\x14\x18\xc6\xe2\n@]\xea\x06\x13\xc7\xa8>\x94\x99\xdb\n\xd2\x90\xd4\xad\x15\x0c\xf5X\"V? \xa9\xa4a\xf9j\x9a\x91\xc4\xcf\"\xf6\xea\"\"qXP6 IK\x98\x13\xc8rR\x90\xa4\xc4\x8a\xd4+\x02\x85\xbf&\xc0\xf1\x1c\xd2\x1c^d$\xf9\xee\xe5\xd3\xc6\xb8\xeeY\x8e\xdc9\xdedY\x9a\x97$\x14\x0b*z\xe7\xe7d\xc0\xf8\xf8\xd4\xa0\xf0\xf57\xe7\xc0\xdbw\xfeV\xcdR\xb9J\x0b\x02\xe5\xca/a\xed\x97\xc1j\xc0g\xf9\xb4\xcd\xe0\x96\xb7\xef%l\xf6\xdcE\x9a\x039\xf7\xd7YL\xc6\xbb~k\x1f\xbf5\xf2\x1c\x11\xd3BI\xb0\xc5\x16\xd5\xee\xf3\x0f\xb0\xdf\xae\xdf\xf6^GE\x11%\xcb\xcfgs;\xafWt\x87\xa5\xdb($a\xe3u\x08SR`\xad\xdd\"#A\xb4\xb8\x00\x9f\x1eoQg'X\xef$\xbe#\xa3$\x8c\x02\xbf$\xd5\xd7$\x1b\xb9\xdd\x00|\xd9\x83\x97\x11\x10Z5I\xed\x85\x04q\xf2\xcb<\x0e\xc5\xa6\x96=c|\xca\xe7\xc7\xfd_c\xd5\xe5\xe0\xdc\xf4l\x97\x0c\xd48\xae\xfd8\xae0Q \x96\xe5\xf2\x9cm\x12\x9a\xd9u\xb7\x03\x07\x13\xb6\xe3\x7f\xafY\x92v\x8a\xa0\x8f \xc9\x9eE\xc9\xbb\xcf]\xbd\xdd\x18\x87\x0d\xb2pq]\xa9\xde\x96F/1\xe1\xa0$\xe7\xe50$\xf3\x8d\xb8\x93\xa4\xa8\xe1\x96\x88V\xb5N\x05\x1e\x1a<5\xa11\xd9^\x96\x93-I\xca\xc7\xacG\xae\x84\x92*\xf3\x9b\xae\xb0\xa2[\x89\x15\xddn\xb2\xf4N\x0c\xb4\x8b\xd9&=>\xdbT\xe9g\xa9n\x1f\xe3j\xf7\x1d\x89)\xb6\xb9\xb8+F\xacLk\x0b\xa1s=B\xe7\xed\x19\x94O\x86R\x8a\xe6k\x1b\xd9\xb0RJ UU\xc1\xf3u\x9c\x143pVe\x99\xcdn\xde<;;\xf3\xcenyi\xbe\xbcy\xb0\xbf\xbf\x7f\x13_\x93\xbf\xf4\xcf8J\xdeI\xdf\x9c>x\xf0\xe0&\x16 \x94\xbc\xabM\xf0\x93\xa5\x05rc3p\xfcy\x91\xc6\x1be\xf9{^\x05QQ\xbcF\x94?\xdc\xef\xa3\x7f\x17\x99\xd5\xd3J\x16\x85\xc5\xbc^\xac\xe7i,\x9d\xdamD\xce\xbeO\xcfg\xe0\xec\xc3>\x1c\xd0\xff\x93\x0c\x06\x0bNm\x928\x0d\xdeu\xd3\xd3\xe9z\x97\xb1<\xe0\x12\xa4\x9b\x81\xf3|z\xc7\xbb\x0f\xf7\x7f\x98\xde\xfe\xf9\x8ew\xf7\xd1\xf46\x1cx\xf7\xf6o\xc1\xf4\xc0\xbb{\xf7\x0eLa\xba\x0fS\xb8\xe7\xdd\xbau\x1b\xa6p\x97?\xbd\x0bw\xbc\xbb?\xdf]\x1dl'\xde\xfd\xfd\xe9\xa3\xfbp\xcb\xbbw\xe76\xdc\xf7\xee=\xb8\x07\xb7\xe8K\xb7\x82\xa9w\xb0\x7f\x8b\x0e\x07\xf0\xd9\x01\x1cx\xd3\x07\x0f~\xbe\xff\xc3\xed`\xe2\xdd\xb9s\x0b\xf6'S\xf0\xee\xde\xbe;\x99\xc2\x14\x1fM\xef\x05\xfb\xe0\xdd\xb9\xfd\xc0\xbb}p\x9f\xde\xbb\xf5\xc0{p\x87>\xbd\xb5\x7f/\xa60\xf7\xbc[\xf7\xef=\xba\xe3\xdd\xbdw\x00\xd3\xfb\xde\xfd\xbbS\xb8\xeb\xdd\xb9\x03\xd3\x07p\xcf\x9b\xc2\xf4\xc1\xea\x8ew?\xa0\x9f\x80}\x98\xd2\xcfL\xe8W`J\xbf3\xa9>swB\xbf\x13xw\x0enO\xbc\xe9\xdd{\xde\x83;\xb7&\xde\xbd;\xec\x07m\xee\xee\xcf\x0fh\x97\x1eM\xef\xc1}\xdaG\x98\xde\xf5n\xdd9\x80\xfb\xc0&\xec\xdf\x9d\xf9\x1f\x8d>\xf8\xca_\x9bu\xff\x93\xac\xe0\xf3\xe9\x01\xdc\xff\xe1\xfe\xcfw\x10l\x10\n\x7f\x82\xd5\x97\xe4\xb9\xb8\xc4\xe2\xdf\xf6n\xdd\xbe\x0f\xd3\xdb\xde\xfd\xdb\x0f\x82\x89w\xfb\xee\x03\xfa\xff\x93\xa9wp ~\xdd}p\x0f\xf6\x9fQ4\x98z\xf7\xa7\x0f\xe2\xc9\x81w\xf7\xce\x94\n`\x07\xdaW\xf0Q\xe3\x1f\x04\xa0\x98B\x1f\xc7\x07\xde\xbd;\xf7'\xb7\xbc\xe9\x9d \xfd\xf9\x00\x7f\x1e\x04\xb2\x97\xee\x8b\x97\xaa\xdb\x80\xb7\xc5\xcf\xaa\x83\xf7\xbd\xe9\xfd[1vor\xcb\xdb\xbf5\x0dto\x80\xe8z\xf5\x9ca\x1a\xed\x1d\xf6\x89b\xc2\xf4\x0e]k\xf1;P\xbe\xf2)0AY,\xf7\x12\xf8p\xcb;\xb8\x03\xd3\xfdgw\xbd\xe9\xfe\x038\xf0\xee\xdc\x0f&\xde\xc1\xdd\xfb\x13\xef\xe0\x1e\xffqo\x1f\x17\xf7\xc1\xbd\x07\xe2\x81wo\x7f\x8a\xff}p\xf7\x01\xec\xc7\xf7\xbc\xfb\xb7\xe0\x9e\xf7`\xff~@!\xbc\x83{S\xfc\xef\xbd}:[\xf4\xc5x\xd2\x80\x99\x08 \xfa\xe9)\xb6\x83\xdf\x11\xed\xd2\x15\xec4\xfcL\xf4\xf3\xd3\xce\xfa\xa4\x1fyy\x89\xa9\xbf\xe7\xdd\x9e\xde\x07\x9c\xf8\xc0;\xb8w0\x11\x93\xc6~<\xb8\xf7\x00\xf6\x0b\x9c\xcc{\xfbS\x9c\xc8\xbb8\x91\x0f\xf6\xef\x03\x9d\xce\x00\x97@\xcc\x14\xfb\x81/q\xa0I\x05\xd4XQ\xfc\x14N8[\x81~\x93\xb8\xf3\xe9t\xc7\xd8\xc1\xc9=oz{\xfa\x81\xe6\xfd6\x1c\xdcV\xcd;/\xcbqe\xd3\xfd\x00\xeemo\xffp\xc7\xbb\x7f+\xbe\xe5!)\xba\xf3\xe0\xd9}\xb8\x1bO\xee\x02\xfb\xdf\xd4\xbb=\x9d\xd0\x7f\x9eQ(\x98\xde\xfa\xe1`\xfa\xf3\xbdO0t\x16\xf1~e#\xdf\x87\xe9\xfd\xd5\xed\xed\xe4`5\xb9\xbd=\xf8\xf7\xf3[pw{\xb0\x9a\xde\xff\xf9\xee\x0f\xb7\xfe\xbd\xbe\x05\xf7V\xd3\x83\xed\xe4\xe0\x87\xbb\xdb\xff\x8f\xbdw[r\xe4F\x16\x04\xdf\xfb+\x90l\x9d*\xb2x\xc9d\xd6E\x123\xb3\xb2\xd5j\xe9\xb4\xd6T\xdd2\xa9\xfa\xcc\xce\x90\xacj0\x08\x92\xa1\x8c\x9b\x10\x08ff 5\xd6\x0fk\xfb\x03\xbb\x0f;f\xbb/\xfb0k\xf3\xb2f\xfb\x0b\xf3)\xfd%kp\x07\x107D0\x98U\xea\xd3\xe7LS\xb2\xca\x08\x04.\x0e\xc0\xe1\xeep8\xdc\xcf\xeb\x9d\x1d|\x1c\xc5\x84Q\x18D\xfd\xf3O\x07\x13\x9a\xa6\xfe6\xaa\x9f+G\xfd\xe9\xd9Y\xd5\xa6\xd47\x1f\x9e9\xce\x95\xd5\x87\xe9s\xc7\xb9\xb2\xfa\xf0\xb4\xbaCK\xf1\xc3\xf3j\x13\x81\xf3F\xa5\xdd\x9b\xa9\xba\x9e}\xee0u\xdddA\x80\x9f\x9f\xbb\x82\xedxq\x18\xc6QH\xf9\x8d\xce4\xad\x1c\xc5\xba\xd4$\x9ekP\xd5\x0f\xce\x10R\xee\x91+\xf5\x19\xdeX\x04\xd1\xbb\xf5[\x0c\xd7\x95\xd0}\x8b~\xd6_D|\xc3\xe0\xc3|\xa9S\xfc(\xf0#\xf6*^3rEN\xa6\xa5T<\x0d\x85G\x9d\xbeR\"(\x1e\xba\xaa'\x9d\x8aJv\x86\xa7\xa7\xe6\xc5\xb4x\x9f\xc4[N\x93\x9d\xfe\\x/\xa0S\xbd\xf7\x1b\xe7-\xa9^\n\xe6y=rrE\xc4}\xc2\xe2\x0d\xea\x8c\xfa\xa0\xb1\x19\xc1\xc1qOOWoP\xedL\xc4nIV\xe9\x89J\xa3:\xcd\x8b\xb9\xc9\xe6\xd7\xbb\xa6\x92c\x93\x9c\x056-\xad\x8d\xba\xbd\x1e\xef\xc1\xd5\xc9\x8c\xb3~0gK\x03O\xcaD\x1f\xae\x1e\xfe\xfc\xbe\xba\xa4`\x08r\xf3\x11\x95\xb5UY\xc5\xfb\xc5\xa6G\x84\x15*\x1c\x95j\xb2\xa0tR~\xa9Z\xcb\xfa+\xb80\xc9\x06D\xecx|\x0b\xfd\xfe\x8a\xf3\x98\xf7{\xff\x81\xc7\xd1\x96\xfc\x993\x85\xdet\x15\xb0?\xe3\xa1\xa4\x18\x11o\xc7\xbc\x1b\xb8\x9c\x7f\xea\xa1\x13\x8e\xea\xbd0\x8b\x9f\x18\xabF\x8d\x8cM\x1a\x8c\x88\x02[\xab\xe7!\x87V\xe4\xdc\xb0\xfb\xb4_\xfc6\x98lb\xfe\x15\xf5v\xb9-{m\xd5`sy\x99y\xb4\x84i\xc4\xa6\xcd\x1b\xd7Z\xbf\xbe3+\xc4\xd2\xaa\x10\xc6\xa6\x01W\xd4\xef\x8a\xb4\xde\xf93\x8a\xb8\x82\xc1\x87zj\xaa1\xa1\xfcp\x9dj\x06#\x8d\x99\x9e\xae\x18\xf29\xd5\x91\x16\xedU3\x1eK\xd3~4\x18\x91H\xd3\x89&@\xf4\xa1Z\xb7\xde\x01:!\xb6W\xd6\x94~@\x14\x86\xcea=\xe5\xf5\xa4RZG\xe4\x1b\xb3\xbc?\xe2\xb8D\x15\xbax6\xfa\xa0\xa1\xea\x06\xe2\x03\x06\x0c+\xee2l\xe0\xf7+\xe6B\xd1\xa7M\xe1u\x92 ?H\x0dC\xfe\x15\xf9(|\xbd\x81\xa1?u\x1e\x07\xf85%\xa6%\xb1)D\xfeE!\x01\x9c\x8e\xc4\xa6\x97[&~\xcb\x19U\x14<\xb6/\x0ebZ\xec\xb6\xaf$\xa7nS\xe3\xe0\xba\x9b\x98\x93\xbe\xe9e\x0e\xe1Hk\xfc\x03\x16m\xc5n\x04B\xca\xd9\x08D\x92^\xef\x82\xc4\xe3\xf1\xc5\x80P2\xbc\"|\xce\xe6\xfeR1@\xb6T\x8d\xf8\xc3!\xb6\x84]r#\"-\xcea\x1d\xfa\x8f\x0b\xf7x\x9a\x03>\x1c\xfa\xe4\x92\xc4\x17\x03\xd2\xc3\xa5\x80\x8e\xf3m\x17\xc85\xf6\xaa\x80\xa0\x06\x19U\x16s\x0ej`\x9a5\x8c\xc1Q#\xf0\x91\xb0s\xb2\xa3\xa9\x0bC\xd5\xa7,b\xa9G\x13\xf6j\xed\x92=U\x0e\xce\x92\x80z\xec\xabH\xf8\xc2g\xa9K\x12U\xd9\xb0\x9a\xdf\x8b0\xa8\x8b\xa4?\x17\xb4\xfa\x19J\"?e\xb1`o!\xa6\xd5a\xed~\xef2/\xf3rQ\xd8\x88\xbe\x1f\x95\xeb\x03\x95QG\xb2\xd3\xbb<-\xd4\xda#C\x92b\xf6r\xed\x1eR\xc4.5\xb2\xb9Xj9\xeb\x9a\xf4.\x13\xce^^\xaa\xe2P9\xed\xc3g-\x17\xc0u\xe6\xcbS\xf8zy\xaar\x16\x00 3\xd2\xebR\xb02\x0e\x1b\x16y\xae\x85=R2`\xe0\xe2\x0f\xdeH\x91F\x08\x1d;\x17\x8ekjkX\x1b\x8e\xc305\xeb\x93\x80F\xdb\xef8\xdb\xf8wu\xc9)Q\xe4\x9a\x86\xa9K(Q\xdf\xc1\xc9\x0c\xf8\x9f\xd1\x19'i\x12\xf8\xa2\x7f\xbaH\x87\xa7\xdb\xc1@\x87\xf2\x86H\xde\xbc\x1f\xe0\x12\xc6\x1e\xbe\xf5\xb2T\xc4\xe1\x88x\xf3\xb3\xe5\xc0\xfa\xb1p\xe5\x99\xab,\xcb\xca8\xd4\xed\x17U7\x1f\xe3\xd1\xe3U\xef1\x19\x92\x1d\x0c\xbb\xdf\x8f\xfb\x9b\xc1@\x8d\xf8\xe3\xde\xe3R)\xa7)ia\xc6\xd5\xbc\xad\xd5L\xc1\x0c\xf6\xa3\xc9\xce\xdf\xee\x02\x88p\xf4\xe8\x11)\xbcj\xc3\xd5B\xca\x88\xcc\x133\xd90\xeb\x1e\x15}o\x80n)\xfa\xf6\xd3\xa0\x15\x83\x1c\x88\xa1\x87DK\xeb\xd9d\xc7\xe8\xda\x8f\xb6\xb5%\xd8\xbabv\xaa\x0d@\xc7\xdd\xb7l\xcf\x02\xecb\xb95S\xf1\x91k\xd1Yum\xad\xef\xbap\x00c\xda\x1bM\xeev\"\x0c\xfe\x98\xc1\xb1\xed\xe5\x8e\x93\xd3\x97=X\\;\xfe\x12<\n8\x87k\x95\x05\x01\x13o\x03?\x15\xdd T\x168\x08S\xa1\xa2#G#\x0b\x9a\xa7\x13\xea\xf3\x05\x0b\xbbC\x17\xf8\xd5Y\xca+\xa9A\xd6\x0cU\xe0\xd7;\x19s%\xaa\xad\xdd\xc3\xd5&\x98\xaa\xb9v2\xc0\xdee\x1c\xe8e\x03\x95\x93\x97dJ\xae\xc9c\x92\n\xca\x05\xaeP\xf3 \x96&FTu#L \xbc#'!n\x99\x04E\xb5`[\xdf\xa9\xcfE\x06!\x80\x0c\\\x93\x1e\xa2bR\x9d\x99\xbc\xe6N\xe0\x9a\xe1<\xe9\x17jW;\xe659\x07\xe1\xf1%\x05\x1b\x10\x03\x07R*\xce6\x06\x06\x0c\xf3\x15\xbb(\"\x8c\xc1\x11\xcb\x8cV+\xf0C\xba\xed\"\xb2\x9b\x01|LR\xee\x95 M\xb9\xa7\x01\xad\x8fS\xf6\xd0!oX\xbd~\xb85Q\xcf\xfa\x8f \x0d\xf4hc-4P\xf3\x80\xcc\xd5$\xa0]1.\xe1\xc7\xbd\xc7\xeaO\x86\xeb\xbfH\xbf\xc9i\xaf\xb0\xd0+#\x04\x11D\xbb\xd3C\xc8^'\x16X\xcb\x113\xd5T\x8f\xe2\x81G@\xa3\xb27\xd5r\x0c4\x0d\xf5\xac\xe2\xf5\xfd\x11\xd0\xa8\xecM\xb5\x1c\x03MC=\xfc\x08Pxm\x9e\xf9Q p\xd7\xa8v\xa2\xd8\x1d\xb8\x94\xd8i.E\x03\x7f\x1bi\x0eu\xaf\xd6\x8d`wb\x0c\xa93\xa43\x98\xa3\xca\xac\xea\x90\x1d\xd3\xb7]\xad|\x1d\xe5\x1e\xda\xb3\xf5G\xee\xd9qh\xbc\xae\x96O\x05\x8f\x1d\xa2jc\x15\x98\xbf\xa1\x96# q\xd7s\x8c\xe0\xc5BG\xe9# \xa8\x97_\xb3\xa0{\xf3k\x16\xb8\xca\x1f\x01\x80\xa3\x06?J\xbbC\xe0G\xa9\xab\xfc\x11\x108j\x08)\xaf\x0b\x15\x8d5\xa8\xdc\xce\x1a\x8e\x00\xc2UG\x9a\xad\x0e\xad\xb5\x1c#\xb3U\xf3f\x1e>V\xebN\x8e\xa8;i\xab\xbb&`\xee(_\xaf\xb4.\xf1\x90D\xa1\x1b\xa9\xec\xa4Vj'\xb5\x88P\x12\\9\x88l\x1ao\xc4\xd1M@\x81\x94\\whM=\xd6);\xbb\x13\x1d\x07\xad2T\x95\xf1\x11a`N\xcb\xbaTV\xac\xaa^\x93\xa0\xdb\x0f\xae\x87\xaeVu\xae\xd9R\xd3\xe3KU\xe2\xa0\x14\xf7\xf2\xb1\xa3\x99#\x16\x85\xca_SB\xc5\xb1\x88b\xc1\xder\xb69\x04\xad\xe1D\x7f\xc8\xc2\x15\xe3\x08\x9f\xbf&C2\x1dLD\xac\x1d\x938N\x97\x95\x88\xdb\xdbD\x9cm\xc0\x10\xdb\xc9\xc4P\xea\xcdV\xdf\xac\xc9Kr\x06G\xa6\x9c\x0c\xafHof\xf5\x0c\xf0u0\"\x8f\xd5\n2\xea\x1f\x03\xffX\xd5\xfe\xd2\n\xfd\xbf\xdeD\x8fuL\xdf\xc7=\xe2\xaf\xaf\xac\xc4\xff\xb8\xf7rn>\xf5\x96Jxw.:;.\x80Y]wD\xba3eI\xf8\xf1\xe5\x8eW\xc1M\xc7)Kz\xb0N\x14\x1fn\xce\xa22\xc0\xec_\xa6\x0c\x9a\xaeeSY.\xe3\xa0^\\m\xa1\xa1|k\xcf\x8e\xc0\x9f8PM\x9dj@\xeaT\xc4\xd6|\x14\xea\x07>\xcc\x0fNX;j\xe1l\xd6\xa6\xde\x17,\xac-\x0e\x0b\xcc\x11\x1dt\xe9Kl=4\xf2v\xf1\xc1CE\xb3Fr|o\xefR\xd7\xc5\x105-\x06\x92\xe3|\x01\xe3\xabC\xb4\xa2\xde\x0d\xac\x90\xbf\xfe\xaf\xffM\xe1|e\xb0\xd6\xc7\xc8(\x0e\xcd\xd9\xfa\x08\xcd\xdbZ\xd4D\x9c#\xf6^\xeb\x9a\xb0\xb9>N>rC\x7fL\x0d\xc2Q\xc3Q\x02\xf3\xba\xb2\xe9+\x1f\x03\xa5\xe4\x8ad\xc5\xf3\xc3.\xcb\xa8_\xe4\xa4\x84\xf5]\xc4\xa9\x90}8\x8c\xc8\xcb+\"\xf4\xe9\x1a\x19\x93s\xc5\xc7\x15\x9b.+\xcaP\x13\x05\xd6\x07F\x0b\x85/FmU\xd2X\x89\xb9B\xbf\x82\xc6\xea\xac\x9c\xac\x99\xa5iU\x15\xafh\xcf\x8a\xf5\x9c\x97\xda\xd4 Z\xab\x85=Tip\xc5\xb9\xd4\xcf\xf78P\x03ri\x8f\x0f\xa1\xa9\x8a\n\xd5*\xd9\xecya\xaf.\xa7\xe4SS<\xa8\xcd \xf5\x03\x0f\xfa\xea\xc6]1\xb9\"\xf3\xda\x94\xcd{@\xa8{\xe8\xdb\xff\xec\xf9\xc0q\xf03\xef)\xden\xb2\xbcpg\xe1l\xc38\x8b<\x08\x13\x0f\x19?ug\xd4S\xaa3}\xe6\xced\xe9\xa2\xa0~`\xf2~\xde\x0c\xdc\xb9\xce3=k\x82\x0e\x8e-C\x16 \x03\xdft\xea\xce\x9a\x86\x94\x0b8\x06\xb49\xcf\xdd9\x03?\xba\xf17\xf7&\xd7\xd3\xc1\xb2\x94iy\xc4q\xbf\xc3z\xaahd\xc5\xcb\x84\xdc\x1ej+\x92pvA\x18\xb9$\xb1F\xc6\x0b\xc2\x86\xc3A\xa1\n\x8c$\x12\xcf\xd9r~\xb6\x1c\x11x\x98.]\xa6W\xc5\x03vm\xe5Q\"\x10.n\x84Gi.\xf8\x04\x9a\x02D\xe66X\x01\xa2-\x13\xdfg\x01K\xfb\xbd\xde``\xe1\x16\xe4\x92D\x17D(\xf0\xf9\\,\xfb\xac\xd1\x84\xe3\x03n\xc3\x95,A\x1a\xbb\xc6\x8a\x160\xd7\x84i;\x17\x1c\xcb:\xe1SC6\xb3\xd4\xcae\x01\xa9\x830\xb1I\xca=s\x88\xde?]D\xa7[\xbc\xf6:\x11\xdc\x0f]\xe2m\xc0\xf6,p\xde\xdeRm\xa532?\x1b\x91\xa9\x03?\xf3\xbb\xd8\xf32^\x82CWm\xc2h\x0c\x8f\x14X\xa3\xa2\xbd$\x9b\xb0h?\xb2\x1d\xff\xd8\xc6\xafO\xab\xb6\xaa\xdaJ\xe6y\x93\x91\x0c3\xa7\xb6\xbe\x0b\x0b)\x9c\xe6\xa6#\x12\x8c\xe0\x18\xbb~\x04\xfd\xec\x9c\x9c(\x82<\xf1v\x94\x7f\x19\xaf\xd9\x17\xa2\x7f\x96\x9f\x17\x8f\xa7\xf5\"\x9fO\xebE\xa6\xedE\xb4G}f\x1d\xe4\xf7\x96\xb3^{\x11j\x96x\xa1\x8b#2_\x0eF\xa4\x9f\xc1\xd5b:\"S\xe07gDJ\xf2\xfc\xb3:T\x19\xc8}\x8d\xcd\xc0r\x0c\xc8\x15\xa1\x93$N_\xd1\xbb\x11\x8a\x01\x8a\xc1]\x90\x94\\\x92@\xb1\xb0\xe9\x19\xd4L\x01E\x0b\xb5\xa7\x83\x0b\x92\x0e\x87naR\x873\x0c|\x8f\xf5\xcfG$\x1b\x8c4[\x86C}\xf3\x05\x9a\x1a\x91\xd4\xa0\xb9Y\xf4\xe4\x9a\x8c\xa7dF\xfa>l7\xd9\xde\xa7H\x07\xa5\xac\xa7)\xda8\x18\xe9;\xd8\xd0F%\xc7\x1c%Xo 2m\xe3\xc7+\xb2\x19(X\x1c\x14\xb0\x1bq(\xd0=\xf0'\x82Q=p\xa1\xb8\xccF\x0b\xb4\xa4~\xc9\xd8\xd2\xca)\xd2J\x9aKM\xd3\x12M\xac\x954\x0d8\x85*Z=\xde+\x89R\xd4\xca%\x8dR\x92\xaa\xc0J[.a\xcf\xfc\xa0\x03jY\xd3\x82\xc6\xe2\x82\xf0\x82pt\xd2\xef\xab\xf5\xed\xf7\xf9\xa8`R]\xa56\x88\xe3\x83\x8b\x01\x10 \xaeQ'68S\xb7\xd40\xbfb\xc3\xaa\xe4(o\\\xe1Q>\x14 \xde\xa1=c\xde=\x9bx\xc8[\xef/N\xf9\\6W\xcf\xa6U{B\xaa\xd3\xab\x86\xf8h\xed\xff\xec\xfc\xccIA\xd3\x9c\xbc\xd4\xccp\x14t\x9apB\xe4\x80\xf5\x88\xecFd?\"\xe1\x88l\xbb\xd1\xc5\x03\xa4\xf4\x01t1\xa8\xd3\xc5\xd4\xd0E\x0f\xe8b0\"g\xedt\xd1\xeb@\x17\x13rE\x02K\x17\x15\xd1\xf2\x90.n\xc8%\xc6p\xe8?=G\x8a\xb6\x86\xac\x15\xea\xb8Ac\x9c)R\xa4\xf5\xe0\x82lj\xb4\x12\xc8\x80\xaf\x00\xde\x1c\x80f\x0fM(\xc1R\xc7m\x1ca\xfc)\x03\xa4\x82px\xa5(\xc3G\x04\x0fZ\xb6\xf5\xed`\x1c7\xea\x91\"\xc8\xe4\x9a\xf4\xc3:`\x16(%O@\x86^\x0fSw\x83\x02|\x1a<\x07d\x17\x03\x05\x8c\x93\xad\xd8\xd2\x9a)9J[\xde\xb1U\xbc\xacoX\xcdtD\xbcA\x99M\xa4\x93|s2\xdf\"w\xa8\xa6\xb9.\xbe\xe8\xb8\x9c\xa1\xc3\xe4\x0d\xfc?\xecK\xe9\x8a7m>\x1eS\xf1[\x99\n\x10\xccB\x17\xb4\xc7\x8eR\x92\xb6\xa1>\x92\xff\xf8\xc7\xf3\x9f\"g\xf1\x1b8K\xce\x99\xfc\x1agr\xf2\x1f\xffh\xfe\xe3\x1f\xe2?\xe9/\xc4\x7f\xfcv\xfe\xe3\xbb\xf8\x8f\xff7\xe5?\x0fA\xc1F\xfc\x83\x01\x8fpw\x07n>\xec\x0e.\"\x97\x84_\x90H\xed\xe0JX\x01\x08\x16\xcf\xa3\xe5\xc0\xce\xba\x99\x07\xbd\x03\x11f\x00]\xbb\x10\x91{\x8b\xfb\xd7\x1a\x0d\x90\xcaK\xdb\x0c\x18\x80\xfar\xc2{d\xb5\xf4\xa4b\xf8LJ\x0b\xd9\xaa\xd5\x816\xb1\xfc\xa2\x9a\xddx\xd6B}\xb5\xe8\xdfz\xc5c\x17\xa4\x06\x85\xf5\xc7\x8cB\n$t\x85\x8b\xe6F\x1cF2\x0f\xe8\x8a\x05#r2\x053\x1cGUE\xfdV\xb9\xae\xe9\x88$Z\xce\x0e\x14IMM5}`'z\xfb\xcc\x06#r\xb2\xa9^$\xd2\x93\x9d\x0f\x05\x18%\x0e\\\xdd\x04\x04\xa4\x96\xe4\x95K\x8c\x0en\xd6I\xbeaw\x9c\xc348Q\xd1\xdbpo8\xac}\x06/Q\xb9\xb2\x83:\x15\x1an0\xa0']\xe0%\x0e\x98[\xa0%\xfa\nmK\x90\xc3\x96\x0e\x11\xdd)\xdc% *^\x93>lG\xe7\xcbAG8+\xb4\xbf\x19\x12\x81\x0eh\xda\x82\xcdv\x006\xeb\x08V\xa3\x8e\xc6\xfc\xac\xae\xc6eEh~\x06\xa0\x96j\xac\xfa\xa50\x8c\x1f\x0c}\x95U~\x8cQ\x1d\x8f\xbd\x06\xb8\xe0\xe2\x8a\x82\x1eh\x02\xd0&\x886\xab\xd7x\xfei9\xc8\x97]\x91ji\x83\xf5l\x80\xf2\x8c\x9b\xd3\x9b\xdcs[,\x97@\xac\xf6<_$q\xd2\xcf\x03\xbe\xc4\xf9\xbe3\x8b\x04\x9cg]\x17\x13fJ\xac\xe1\xa8%\xe5p\xa3\x87p\xb5\x1c\x1f\xba\xe6\xf0\x98\xee\xe1\xab\x0e\x0e\xd6Z\xc3|\x1b\xccj\x98\x12\xb7\x14\xe2#G-\xf6\xc9\x1ft\xa3\x84\xc4\xd1\xcbC\xb8u\x10q\xea4\xb2\x96\xd2\x0567\x95n\x83\xae\x05\xb2\nT\x1f$W\xd9d\xbb\xbf\xe6\xcd^\xfdruo\x7f>\xee\x0f\x16\xf3\xc5\xf2\xe7\xf7\xc3\xeb'\x93O\x16o\xe4h\xf6\xeb\xcb\x93\xc5b9\x00E\xf0b\xf1\xc9\xb4\xf71\xf6\x10\x0ey\xa5\xb8\xbb\xef\xb0\xb7()\xcf\x1a\xb6\x0dy\xce\xef\xd9\xf6\xab\xbb\x04\xc4]\xb8&\xd4\x7f#\xe7=\x08\xd2\xb8\x88\xfa\x83\xf9\xf2\xf1\xa27\x19\x9d\\\x8f{\xfafO\xaf\x87\xc1\xb7\xb8\xb9\xdb\x83\xa6\x82\xcbA_\x95*_t\xaeC\xd31n\x97\x9d\x804[\xa5\x82\xf7\xa7\x0e\xbc\x1cL\xd2\x98w\x0cN\xaa\xeb+\x9ck\x9a\x13@W\xbd\xa5\xeeI\xec\xdf\xa0\xff\xc9\x03\xc7\xa5g\xe4\xa3\xc2h\xa3\x82\x04_\xfa\xeb\x11\xe9m{j\xe7\xbb\xb1\x92Q\x9e\x17E\x933$\x98\xbb\x92\xc0\x1e\xa3\xc0\xee\xa6+\xd5\xed\xdd\xce\x9c\xd5\xba\xf3\x93\xe2\x86\xb2\xafH>\x14\xb0\xd2{eo\xf9\x12\xe8\xb2\x18\x8f\x9bk#\x06\n\xc1\xee\x84\xdeLP\xbd\xd9\x1b\x1c\xdc\x1b\x9a\x9f\xd5\x80\x9f\x8d@OF\xf3\xdd\xc6f\x12\xd0T|\x13\xad\xd9\x1d~\xf7\xb4\x0c\xb7g\x81\x11\x8d/@|\xdfL\xd8\x1d\xf3\xfa\x19\xe8-\n\xa5^\xa2\xfa\xfc \x95-\xfe4e\x83N5\xd3\xd9\xe2\xcf\x8a%\x99\xde\x98\x06#\x92\xa0>\x8d\x0cI2\x9f.\xf5\xe0v\x08EG\x0e\xf1\x99\xe2\xef=\xb8q>\xbeo\xd6L\xadc\x07\xb5\xb6\xc5\xb1\xde\xb5\xb8\x91\xcc\xcf\x97\x1d\xa2\xe7\x91\xc3\xf2b\xf1\xf7\xd0\xee=d\xeaT\x0f\xba\x15\xf9\xdb\xcc\xce!>_\xfc\x1d\xe0\xf9\xc5\x9f\x82)\x80\x05\x93/\x921I\xe6O\x0d\x8a6\xabR\xcc/-ho\xfa\x01\xb9$Y!\xe1!\xfd}\xc8t\xd9\x95\xf6K,\xa9\x12aT\x04\x0d(\x8d\x91\x98}\xdd\xf4\xd9\x08\\\x1b\xa4#bR\x04\xea\xb4\xdb)\xe6\x07 7&\xd5\x1cZ\x9c.\x86c\xb9\x98,&rq\x8d\xff\xc9\x93\x93\x93\x139\x1a\xc9\xf1\xf8\xb4~\x98q\xba\xe8\xf7=)B\xc9e2X\x0cN\xb7~\xfd`\xa3>w\xde\x8c\xf4\xfe\xfb\x7fsL\x11W\x1f\xfe_\xc7\x87D}\xf8\x7f\x1c\x1fD8#\xbd\xbf\xfe/\xffw\xaf\xf4\xa5\xc1\xda\xa6\x8b4\x95\xcbQ.iIk\xab\x8a\xbe}\x1a\xe4\xa5\xd2\xde\xa8\xc8\nS\xcd\n\xd3&VXc\xc4v\xd3\x94v\xe7\xc7\x19)\x97;\xcc\x96I\x91\xed*,\xcd,\xdb\x85\x95 gQ9/U\xafx\xd0<\xc8Oz\xfa=<\xa3\xb9&\x01\x99\x91\xc0J\xc3\xf1\xa8\xdd\xf6\xac\xfa\xd3\xd2\x97?\x17\x13\x11\x7f\x1b\xdf2\xfe%MY\xbfbtS\xfc\xa9e\xc6'\x82\xa5\xa2O\x07\x16^Z0\xbf\x18\x8eA\xec\xfe\xef\xff_oPH\x9d\xfc|>z\x0f\x1f\xfe\xfa\x97\xffZ\xfc\xd2\x9f_\x9f,\x07\x7f\xfd\xcb\x7f\x85\x8f\x9fL'\x93\xfa\xd7\x9f\x9f\xe9\xb2\x9fL\xd5\x7f\xc5\x0c#[\xef\xa8T\xee\x8d\x9c\xbf\x19/\x07\xe3\xf1\xb8\xaf\x1e\xe4'\x83\xd3m\x085\xfc\xf5/\xff\xfb'\xe7\x95\xbc\x8bt0\x1e\xf7\x17i)\xdb\xffV\xcb6\x7f3^\xa4\xaa\xd2>>\xd5\xb3\x83\xff\x96\\mM?\x8an\xd5\x12\x8d\xf9\xe3\xde\xd2E\x1c }[\xa7\x08\xa7\xf3\xf1\"\xc5\xdd\xd1\xf2\xd4\xb5\xc3\xa2m\x16\x8a'}a\x0e\x02\x01\x7f\x8d`\x0e\xd3~\xe2#\x120\x85\xbc\x85N\xd6\xdb\xc8\x0e\x98^\xdb\xad\x04\xd0em\x10k\x13\x914WF\x91<\x80\xde\xf8\xceM\x9b=\x92\x1d\x91\xfb\x11Y\x8d\xc8\xdb\x11\xb9\xfd0\x82t\xab5\xbf\xab&\xc2\xb4\xd2\xc4`u.\xc5\x9a\xccFaK\xaer\x88a\xe8\xb60tx\xfct;\xdf\xea\x9c\xe4\xf2\x8al\x06\x17d;\x1e\xb7\x9c(\x99_a\x0c\xb6\n\xb9P\xae\xd2\x9b\x14\xd8_\xd9\x15<\xe8,[\xb1\x19v\xe1\x82(\xc1\xca\x03\xc2\x18\x97vAz\xe3\x13\xe3\x86\xc7\x1f\x0c.\xda\x87\xd9\xfc\xc0\xd7\x07\xb9\"'\xb4\xafPX\xefN\xc6d\xaa\x05\xc2\xd4\xeeW\xa6#rO\xaeH\xef1NL\n\xa6\x89\xa0:\xc0\xb2\x01\x1e[']\xe6\xc3\xfcT\xeb{U\xc3zDB\xf57\xe9\x06\xb5\xf9\xc1\xa0\xb4\xcdc_\xcd\x83\x9a\xcaQeJ\xc9f\xa0\xa7\xf4\xa8\x06\x89\x06z7I\xfdh\x1b0\x18\x8a{\xd5R\xa1r\x95\xb69f\x18\x8a\xbf\x1c\xe0{rM\xfao\xe7;\\j\xc5\xe3\xca\xcc\x91<\";\xb46\xc8\x89 Z\xc4\xce\xcf\x97\x15\xb6\x91\xf5\x0b\x02\x80\x9e`G\xb9\xa7K\xd0&\x7f\x0c\x10\xce\x1e\x08\xc2t\xa9X^qI\x1d^+\xae\x9fj\xca\x8f2V \xbe\xd1\xe5WW\x836\xfd\xf6\xe4\x9a\xdc\x1e\xb3\xcf1?\x18\xc5V\x1d\xb4\xeb\x97\xc4\xe9\xcc\x0e\xddQ%\x11ug\xc4\x11\x07\xbb\xed\xa7\xf7J\x9b\xce\x85\xc0j5T\x8b\x03VH\xff0\x02\xf4\xfe\xfa\x97\xff\xe2\x8a\xa0\xea\xfa\xbd',H\xd9G\xad\xfa\xa3\xee\xc1\xc0\xc0\xbc\xea\xf8\x15\xe4\xa9\xdb\xdb[\xf9\x1b\xb9\x98-N\x17\xa7N\xb9\xc9o\xd4L\x9f\xbe\xb9\\\x9c\xd2E\xfa\xe4\xe5\xa9\x91\x90\xda\xc5#Z3^7F\xe8s\x87^CX\x0b.7\x06\xab\xce&\xe82\xaa\xf9\x9c*\xe3\xc1\x8c\x9c4\xc4\xae`!\xf5[>\x8b[_\x08\xc6\x9b+\xd7\xf2\xf2\xd7Q!0g\xd3\xdd\x16\xf3Ko}\xe1\xed\x14\x92l\x99x}\x9f\xb0\xfeA\xa1\xc1\xa3)#\xbd\x8c\x07\xbd\xd9Add\xc7\xacy%\xb2\xccH4\x81\xc8dl\xfd\x9a\xddu\\\xf60\xaa\xd0\x83?\xf1\xc0\x11\xf9\xa6\xfak:w*\xfe\xe0\xc2n{6\x1c\x08\x98\xb5\xbf\xaf\xa1\xe8)\x90D\x0cjF\x18\x96\xafTB\xbf\xb0\xa3z\xa3s\x9c\xfa\xa3\x92[\x9b\xa6\x9f\xe3\x0c\xcc~j\xfcb63Sg\x8ez\xb9\xea\xb4\xe8\xf2\xf5\x11\x0b\xfc\xe8&\x9d\x11V\x1f\x12\x9a\x89X}U\xcb\xa4\x1c\x93\xda\x15L\xea\xd8\x8d\x0co:\x80*\xeee\n;\x80:|jg\x12eA\xab\xe2E\xdf\xc3i\xd8\xe3\x14,\x95\xee]\x96J\xce\xb1\xaemk\xee;\x1e|\x14\xb6+\xa0o\xb9\xffX\xe7\x1f\xb9\xdb\xa0\x1eXD\x822);\xea\x14\x04\xea\xd1\xb7\xd0\xb5\xdc\x9d\xabr\xb6 \x9f[Vw\xfa\xe6\x92\xce_.\xd2\xa5a\x0d\xdb\x01\x1a\x87\xea+\xa3\xbb\xf1xD\xfc~\x9a;\x18P\x89\xc3\xe1@\xc9\xc6\x90\x0bR\n\x9b\xaf\xbc\xad\x18k\xcc\xcbv\x01\x9e\xe8\x0e\xac\xe0\x90Q\xc9\xf9}\x85\x1b\x14.\x13(\xf4F\xa1\x7f5\xc91\xda\xee:l\xaf\xf6\xa5=e\x08\x05\xfb\x81\x82yo\x15\x06F\xbc;L\xf1\x88\x99tOo\xa3\xd7\xd0\x9a\xde\x11np\xc7\xba!\x97\xb6Y4\xbe\xcdM\xdf \xce%\x15\xec[\x05\xc6~\xbeYN2\x1e\xa0\xa6J\xdb%\x1b-\x1a|\xd4;T\xf5Y\xb5\xb4\x1e\x11\xef\x18\x12I\x1e\xa4\x0d'E\x8dx\x90\xab\xa5\x93\x8eJq\x92\x0b{\xebN\x05 \xb2\xc0C;f\x1d\x8c\x1d\xd1;m\xcc\xab\x87\xbf{9}`\xd5f&T\xfd\x99\x81\xe8p.E\xb4\x02\xf3\xa1#\xf1\xd0)\xb6\x98\xd6\xbd\xec\x91\xd3\xfb\xf0>\x15h\xe0\xd1\xd0\x8d\xc7\xdd\xe1\x0b\xd0\x92\x1eP=!\xc3|L\x0c\x91\xe8 \x0e\xa9_P8\xb4zh\x9f\x1f:\x8fG \xf2\xd1\xf3w_9\xbb\xcaJgWY\xf9\xec\xca\x1b\xd9\x834}vu\xb0\x9d\xf6m2\xee\xd5\x0eV\x82\xe7\x1e\xe3\xf1\x05pI\xadM9\xb9\xb2\x14\x9a\xe0\xadmC/\xe0Sf\xac\xd7/\x06\x8a-\xdb6:\xed\xe0\xf6:(\xe2\x88\xf89z\xc4\xfa\xe6+\x1a\xc0\xd9\xe2U\x8ew\xfa\xe4\xa4\xdc\xa1'\xe4\x0b\xcb\xc7&?\xa6\xd5\x8fg\x93\xe9\xf3\xc9\xd3Jj5\xd3\x97qr\xcf\xfd\xedN\xf4\xbd\x019?\x9b>'\xff\xcc\xd96\xe6\xf7\xe4\x7f\xa2^\xbcJ\xc9\xe5\x96\xb3\xedo\xd4?\xe3\x1f!e\xe2\xc5\xe1\xcbj5\xaf\xbeyM\xbe\xf5=\x16\xa5l=!\x85\x18\x86j\xdc\xd28\xe3\x1e\x83X\x86\x01\xe6IOC_\x8c\xf5\xcb$\xd9%\x07\xa0T\x15\xa6\xb3\xd3\xd3\xad/v\xd9JAp\xaa B\x80N\xdbF\xe1\xb4\xf4\x0e[\xd1Q\xd9\x80\xbd\xddF(\x9e\xfcI\xf8\x81q\xb0\xae\x9d\xe2W\xac\xc4\x9c\x02v\x9c_\x94v\x9fe\xc6Q*x\xe6\x89\x98\xcfH\\_\x88\x19\x0fR\xf7\xb6\xb5eG\x9b\xeff\x1d\x1f#v\xfb\x1f\xfch\x1d\xdf\xba?\x97\xb7\xda\xae\xcay\xa6\xd6.\x9b\xe9{3\xf5\x1c\xc5X\xac.'\xd0\"\x0c\xbe\xa3\x14\x9d\xf8\xe9\x97A\x9c\xa2\x13\x9ck\x18\x89WT\xec&!\xbd\xebGj\xaf2R\xd2\xfc\x0cvK#\xa2\x1d\nT\xfd\xd5\x17\x7f\xa0KC0\"\xe1\x8b{\x0b\xc51e\xf1\xeeV\xab.\x86\x98\xcb\x8bfz\xf5N\xf0\x07\xc1[\xdbP?\x0dJ\xd0\xb2OGX,\xcc\xce\x8cnV\xa5\xe9\x04\xb7F|\xb5\\\xef\xddX\x8d\xc0w\xc1mc\x8c\xa8\xb1\xfaU\xbe\xb6\nj\x0bf\x02w@\xa0,\xc8\xf3=\x94\xfb\x17\x1a\xe8\xa8\x03] s\x15\xef\x02#,=\xf74\x14\xc1\xb7j8bb\x19\x95\x93'\x1e\x0d\x02\x13%FS\xe9\xc1(\x8f\x86te\xa3! rM\x04\x99\x91\x13\xbco\n\xbe\\\xec\xe8\xa0V\x08\x8c\xc7\x05\xf1\xa3T\xd0\xc8S\x85\xe2\x89\" \xaf\xe9V\x15.\xfa\x83\x9a\xd9\xd1}m\x89R\x7f0Y\xa9\xa7>+\xfaY\xea2\x88%\xd23k\x16\x05\xcc\xcf\xa8V\x01\x86\x9c\xbc\xb6\x0e'\x83\xcd\xb1\xa3\x94 \xe0TH\x9a\xe4\xd0\x0cF\x8e\xb3\x0cw\x17^\x15i\xf8q}(\x90\xffc:Q(f{QH\x9b\x141\xbf\x99T \xcb\x85\n\xd5c3\xa9\xd5\x1c\x18r\xc2ssV\xcb\x91!\xb3~k\xce^b\xc2P\xa4\x90\xe2&.\x83#f\xe6u\x81q\x1e719\xcb=f^\xf2RvZ\xbe\x80\xdb\x11\x85\xc5\xd2<\x1f\x05\x81\x05j\xb3\xef-\xc3me\x14l_\xbf6\x17(\x88,H\x05\xcd\xfbQ\x83]Jy?\"1p\x99C\x9e\xb3H>n06}\x81j\xaa~U\xc0\x1c\x19t\xd6\xbe\x7f\xe2\xf2\xaa\xfd9\xcfPIS\xb2\xabS\xfa\xa4\xabTp\xea\x89WL\xec\xe2u\x07d\xc0\xa0f=S\xae\xd7\x05\xe1Ph\x9e\x1d\x1e\x04R\x94\xc3\"\xe2G*\x9b\x98\xech\xfa\xc7\xdb\xc8F\xa3\x8fP\x14a\xf3hI\xd0#X\x03\xfb6\xb8\xd8\x05Fv'X\xb4\xee\x08#\x80\x87\xf2\x1f\xcb\xc5\xfbf\xe4\xaan\xe7\xde7\xdc\xcc)m\x15\x1a\x16\x98\x91\x18AW]\x1b\x9b^a;\xd1\x1b\x00\x93*\xa4\x90\x0e\x13L@\xde)\x14\xd2\x81F\x90\x99R\xbe\xcd\xc01V\x83\x843(u\x01\xc2\x03\xb6\xce\x0d-\x81\x07q\x19\xe9$\xcd\x12\xc6a\x01\xe2\x0d\xe95\x0b\x98`\xe5\xae\x8c*;2\x8a\n\x84\xa8\xd3\\\x07\x81\x9f\xa4~:k\xdd\xa2\x17\x7f\xd6\xa4K\xebh^b\x90\x04\x98\x83(\x0b\x02%VD\xe4\x9a\xf4&\x93\x9e\x12~1\xbc\xa21\xf6Rl\x1f\xf4\xfcc\x12Y\xd5\xf1\x90D] \xb6V\xecvDN%\x0f\x7f\xc19\xbd/x\xe8\xd25\x0c\xf2\x8e\x18eq5r\x83\xf9\x15\x96\xa1\xdd\xeb\xb0\xceG\"\xc4\x9c\xbb\xc0\x1aU\xd2\x95m:j\xc5\x87q\xfd8\xcb1 p\xff\xe5\x8bh\xfd%MD\xc6\xd9\x11\x03s\"&\xdb ^\xd1\xc0\x11\x9e\xf1\xcfP\xed\xf7l\xcb\xee\xfeL\xc2,\x15dG\xf7\x8c\x88\x1d#\x8f\xb7\x8f\xc9&\xa0[\x92\xb2Z`F\xf3\xcbG\xac\xb23\xbc \xb8T\xc1@\x8a\x81\xcf\x00}\xb9\xb9\x80\x1f\xf1\x08\"\xe9\xad\xd9\xdd \xdf7Eh\xbf\x82\xe1(\x8c9\x94Jl\xb5\xdf\xb2\x1b\x8az#Pw}\x84\xeb\\\xc6H\xb9Wf\x99!}\xec\xe3m+W\xdc\xdc\xdb\x9d/X\x9aP\x8f\xc1\x08\xce\x08\x04dr\xec\x0f\x8a\xfa\x8e\xc3\xdb\x02\xb7\xde\xc5\x86+\x8d\x18W\xa0\x1a9#O\x90\xb2\x98\xf2\xfa\xd5\xb7\x9d\xf0\xcanw\xbb\x80V\xdc\x96\x08,\x86\xa1UE12\xa5\xf95\nb\x95\xe6\x8eiMJ\xd2\xeb\xc4\x81S&\xbe\x10\xe5\xbdb\x87\xbbkzC\xa3J\xa6\xfd\xc1\x9c-\xf30\xba]\x1a\xdd\xd6\x1b=\xba\xc5.\xed\xe8\xce\xa5]\x1a\xaa*xtK\xad\x0b\xa9\x82\x829\xfeu\x01n[\x07\xae\xcb PU\x06d\xe8\xc2\xebU)\x0c\xae\xf9\xb9G\xe4K\xc5>\xbb\x8cH\xb1U=\x92\xfd\x1e0\xdf^M\xc3I\x1a\xe4\xbb\xf5\xbass\xb9\x9a\x0d\xd5hf\"\xa0\x82\xfe`\x94\xc7^\xac\x10\x14\xd4\xaf\xe9\xb9\xd0\xdc\x0bo\x11D\xe0\xf8\x1d\xefDr\xb5\x13W\x94\x17\xef/\x98\xc4\x0b\x98\xf4l\x92\xee\xfc\x8d\xe8+\x12<&\xb8\xed\xf7QrP\xdc\x9c\"\xc1l\xe2\x88n\x1c\x9d\x189\x85\x16\x03\xcfu\xc5\x0e\xce\xc2x\xcf\xfe\xee\x07\x8f\x16oX\x95FR\x0de\xbbv\x13\\p\xe2 _\xc0\xa8\xc3\xb1\n\x8e\xb7j\xc1c\xfdtD\x1c\xd7m\xc9!\x8d\xd9G\x9d\x89m}\xc9tY1\xb5\xe6;\x93\xe4\x1dM;\xcf\xbb\x15\x8e\xd0\x9a\xa3GzdX\x9d|\xb8(\xdc+\xdc\xa5\x81LL'w\x81(e\xe2\x1b\xc3?\x8f\x80\xaa\xc6\x89\x8f\xe3\x80\xae&\x8fk\xb1\xf3\x90\x1b\x1d\\\x87\x96J:\x8f\xa2\x16\xbcE\xe5`\xb2\x83\xce\x0f\xb0\xe2\x07\xc1\x0f\xf0\x96y\xef\xb2\x87\xd1\x95 \xaa \xf5\xdcb`2\xd2{\xd9\xcb\xa3\xf8\xda\x91R+\xbdwy\x8a\x05{/{\xcb\xa3T\xc7%\xf0:\x0c\x05\x8a\xcd\x96\x0bYA\xbe\x1a\xc5\xcb\xfc\xaaC\xa7\xd7G\xfb\xc0\xcd\x97\x87\x84j\xe2G\x84\x0d\x08sk\x03\x84\x16\x98\xc9\x90<\xc6\x08\x0b\xb0\xf5\xc0\xa8`\xed\xf4<\xa7\x16\xf5\xd1+\xa5\xbcW\xa2xMou\x84\x88\xfcQD\xdf\xceS\xdc\xa5\x89\xa2\xd6\xc9\xc8\xfcm\xbe?\x8c\xb4\xda\xa3-f\x06\x14\xe5\x1d\x98\x7f<\x0d@\x14`\x85\xd3+T\xb5\xe3X\xfe\x9e\xb3M\x7f\xd0\x82 ~N\"\xa0R\xedoZ\xcf\x04\xbb\x13\xfdBm\xa8\xb7oROt\x19\xbd\x02\xcc\x1d\x05f\xb3On\x1e9bm\x87Dc\x1e\x07(\xe6g\xf9:\xc2\xf6e\x8a\xbcC\xed&\xdb\xe6\x95\x1b\x13u\xa3K1\x1b'\xabA\xd5\x190\xb6!\xb9\"\xbd\xb7\xab\x80F7\xbd\xae\xaa\x942<]P\xae$\x81[-k\xfb\x12\x85\x93\x9a\xa1\xa5\x8dC\xd2\x1b#s\x9bu\xa4\xfc5\x8c\xe9\x02\xa9Uek`\xd7\xf1k\xadF\xae*f\x89\xbb\xd5\xbc\xc0\x11\xcd\x19b\xa2uT\xf6X\xce\xa8\xb0\x15\xbb\xc3@\x1e\x93\xef\xfe\xf8\xc37\xaf\xbf\xf9\x97\xaf\xde~\xf3\x87\xaf\xbf\xf9\xc37\xaf\xffc7\n\xe6<\xd69\x82\x8c\xa9\xf2z\x8f\x0f\x1a\xfe\xd3\xfe\xf5\xac7\x7f\xd3[>\xb9\xee\xc9\xc7\xf37\x8f\x97O\xae\x1f\xcb\xf9\x9b\xc7\xbd\xab\xcb\x97\x7f^\xa4\xcb\xe1\xe0\x14\x19\xdc\xe9\xfc\xcd\"]\x9c\xf5\x1e\xbf\\\x9c^-\xee\xce\xa6\xe3\xc5\xdd\xf4\xeb\xc5\xdd\xa7_/\x87\xa7\x134\x0fQ\xb3\xdb\xbf\x9e-\x16\xe9\x93+\xf5O\x0foM\xdao\x83\xeb\xde\xa8\xe8\xcbd\xaer+Vy\xd9?\xf9\xdd\x1f\xbf|\xfd\x1f\xbf\xfbj\xa0^u\xeab\x91\x0e\xf3W1\"= \xeeQ\n\x15\xaa\xcf\x83'\x86\xdb\xe2\xbb,Tq\xd9?\x85F{\xe0o\xe6t~6\xfe\x9c\x8e\xdf}1\xfeO\xcb\xfcq\xb6|rZ\xad\xb3\x0c\x81\xb0\xad\xa8^\x9d^\x17\xda\xcb\xf9\xf7\x88\xf4\xb6~\xcfE\x0b\xd5\xa0\x7f\xb9\xa3\x9cz\x82q\x13Q\xddhZ\xfa\x8f\xa2U\x9a\\\xc8G\xbf\x9e\xbe8\xbb\x90\x8f\x02\xa1\x9e\xe1q\x8b\x8f\xe7\x17\xf2\xd1OY\x0c/O\x9f\xc1\xbf\x9f_\xd4\xaf\xdb\xab\x1f\x989tA\xd8\xd2n\xa4\xb0\xf7\xb0\xf8Q\xb2\x8c\x98//PUzb|]\x82\xf2g\xfe\xf4@nE\x10ON\xc4A7\x1bAE\x93\x1b\x8f\x88\xd0\x9a\xbaf\xab\x81\xc0\xaa\x87\x91c\xa91Ut\xe7\x8bh\x0d\x93w\xff\x87x\xcdR0'\xf6At\xd1Zv\x7fD\xa2\x81M\xec\x17h\xfeWh\xa4\xa1\xca\xf5\xb5\x8f\x81\x81\xd6\x0d\n\xab\x1b\xa4M>\x86H\xe3fJ\x89wq!@\xc9\xa1\xa9\xf0\xaa\xc3\xd12\n^\xb7Q\xf0\xdc\xa3pD'4\xed\xf4\xbbP\xe5\x06(\x8e\xc3x\xad\xdf\x8dr\xb2Y\xd1I[\xba\xdd\xbcp\xf5~]\xaf\x8f\xc8*\xd79Z\x0eA\xd0\xb1\xf3C\xd3\x01{\xf89\xef\xb02\xa29\x07/\xb2\xcd\xd3E\x0b\x92t\x01\xf3\xd4X!\xda)\x84\xcb\xdc\x99\xf2\x91\xecg\x0f\x99\xba\xbaX\xd4(m\x14V\xc2\xd1'85\xc3\x86\xe2\xb2j\x11|Adh9\xe1\xb3\x92q\xc5\xe1Ds \x0f\xad\xa8\xaa!\x83\xcc\xef\x18Q5\x1f\xfb.H\xdc8\x12\xf9\x0c\x1e\x1c\x88\x0f\x06\xd9\xe0\xd4\x87\x00l\xf1\xf2\xe3\x81\xfb\xabr\x06\x87\xb4\xa4\x1a^\x9e\x8e\xb4S\xb0I\xffz\xe6G\x82\xf1\x08\xbc\xf4\xd1@Z\xf2\xe7\xc7\x91z\x01\x92\x14\xf3T2\x95-\xe1~\xcaR\x99\xecb\x81^i\xeee\xc2\xe35fO\xe5&\xce\xa25\xd4$\xfd0\x8cW~\xe0\xb3H\xfa\xd1:S}`\xa9\x0ciD\xb7\xb0VU\xb9\x84q%tI\xc1\xbc]\x14\x07\xf1\xf6^z;\xee\xa7\"\xa4\xa9\xf4\xe20\xcc\"_\xdc\xcb\xb5\xcf\x99\x82\xe1^\xb2u\xe6a\xf5\xec\xa7\xccO\xa0\x1e?J\x85/2\xc1dH\xf9\x0d\x13~\xb4\x95i\x1cd\x08\xd1\x9eb\x81T\xae(\xdfR_=\xc4\x99\xf0\x7f\xca\x98\\\xa1\xa20\x95j\xfb\xaedf\xe9\x05\x8cF\xf8\x10\x8b\x1d<\xc4a\x92 \xc6\xe5\x9a\x85\xb1\xc7\xa9\x90k\x9f\x86q\xb4N%\xf4\xdf\xf7R\xb9\x8b\x83\xb5\x1fmS\x19\xf8\xdb\x1d\xb4\x9fP.\"Us\x12d\xe1\n \xca\x92$\x80\xber\xeaC\x13{\x16)y4\x95\xd4\xa3k\x16\xdeK\x8fr\x06\xd0\xc4aB\xa3{\xe9\xf1\x0c\x06{\x1d\x87\x007\xbbK\xe2\x94\xad\xe5\x06\x9aI\xe5&\x88\xd5X\xc9-\x0d\x02\xc6\xef\xe56\xf3\x05\xe5\x00\x8e\xbf\xa6\xf7\xf2\xc6WX\x11\xc9\x88e\xa9\xa0\\\xc67~Do\xa9\xe4\xcc\xf3\x13\x96J\xce\"A\x03\xf5w\xef\xb3\xdbT\xa6;\xff&\xddQ\x89\xce R\x009\xe6B\xa6\xf7\xa9`a*\xe9\x96E\xde\xbd\\1\x1e\xf8\x91\xf4h\xc88\x95\x1e\xa0\x85\xf4\xe2\xcd\x861\x85/\xeb8\x95\n\x05\xa2\xadd\xa9\xa0\x82I\xa6z\n\xe03.\xe4&\x13\xab8\x9074\xdb\xb0H\x06\xd9]\xc6\xefeH\xfd4\x8ed\x18G4\xdd\xc90KY\x16\xca\x88n\xe3{\x8a\xb8\xa6\xa0L\xa8\xcf\xd5\x1f\x80)\xf6|\x1a\xe0\xa8\xdeKA\x85\x88c)|\x16\xad\xa9\x1a\xe1=\x0b\xe4\xde\xa7?\xb2T\xee\xfd \xa0\xeaO\xaa\xd0f\x1f\x03d\xfb\xf8\x9en\x99\x04\xccF4P\xa3\xbfN\xa5\xb7c4\x91\x9e\xdaw\xc85\x8d<&a\xd1\xcam@S5\xb2Y\xaa\xd0,\xda\xc62\xf2\xa3\x1f)L\xb4^\x0e2\xdd\xc5j\xd4\xe2\x80r)b5\x03\"\xbe\xb9\x8f\xa5\x88\xe3 \x95\xb7j\x8d\xca\xdb\x98\xdf\xa4\x922\x1eK\xca\x13*i\xeaS\xb9b\xa9\x90+\xff\x86\xc9U\x00h\xf9\xee\x9d\x1a\xdeDzA\xb6\x92^\x1c\xabU\x19'rCy(7~\xba\x93[\x7f#\xe46\xe3\x99\xf4\xa3M,\x7f\x8cW\xa9\xbc\xf1o}y\xc3\xd9Z\x064Z\xcb\xc0\x0fc\x19\xf8\xd1\x8d\x0cY\x94I\xb5\x18e\x18\xaf\xa9\x8ch\xc8d\xa2\xf06Q_\x938\x15\xf2\xa7$\x8e$\xf7\xbd\x9d\xe4\xd9\x8e\xcb\x94\xdd\xddK\xe1'\xa9\x1a/\xa6\xfe\x89\xe5-\x8d\xb6\xf2V-\xe7[\xff\xc6\x97\xef\xe2\x88\xa9%%W\xfeZ\xae|\x05\xf0J\xad#\xe9\xb1Xa\xb0Z\xaar\x1b\xef\xa5\x1f y\xe3\x872\xf4\x03\x191!\xe3(\x901\xdf\xaa\xe5/\x93l%\x15\xc0\x82\x052\x8bby\xcb\xd6\xf2\xee\xeeN\xde\xdd\xbf\x93\xd4\x93t-)\x93t#\xe9VR_\xd2@\xd2P\xd2H\xd2X\xd2\x9f$\xe5\x92\xa6\x92\nI3Io%\xbd\x93\xf4\x9d\\Q\xb9Z\xc9\xd5Z\xae\x98\\m\xe4j+W;\xb9\xf2\xe5\xeaG\xb9\n\xe5*\x92\xabX\xae\xb8\\\xa5r%\xe4j/W\xb7ru/W\n|\xe9y\xd2[Ko#\xbd\xad\xf4v\xd2\xf3\xa5w#\xbd@z\xa1\xf4\x14)\x94\x1e\x97^&\xbd\xbd\xf4n\xa5w'\xbd{\xe9\xbd\x93k&\xd7?\xca\xf5\x8d\\\x87r\x1d\xcb\xf5;\xc9<\xc9\x98d[\xc9\xb8d\xa9dB\xb2Ln|\xb9\xf9Qnn\xe4&\x94\x9bXn\xb8\xdcR\xb9]\xc9\xedZn\x99\xdcn\xe4v+\xb7jb\xe56\x90\xdbPn#\xb9M\xe4\xf6'\xb9\xe5r\x9b\xca\xad\x9an\xb9\xbd\x95\xdb{\xb9\xbb\x91\xbbP\xee\"\xb9\xe3r'\xe4.\x93\xfeZ\xfaL\xfa\x81\xf4C\xe9G\xd2\x8f\xa5\xff\x93\xf4\xb9\xf4S\xe9\x0b\xf9#\x93?\x86\xf2\xc7X\xfe\x98\xc8\x1b&o\xb6\xf2f'o|y\x13\xca\x9bH\xde$\xf2\x86\xcb\x9b[ys/o\xde\xc9\x80\xca`%\x03O\x06\xbe\x0cnd\xc0e\x90\xca@\xc8 \x93\xc1^\x06j\xa9\xca\xd0\x93\xe1Z\x86L\x86[\x19\xeedx#\xc3@\x86\xa1\x0c\xd5\n\x96a\"\xc3\x9fd\xc8e\x98\xcaP\xc80\x93\xe1^\x86\xb72\xbc\x93\xe1\xbd\x0c\xdf\xc9\x88\xca\xc8\x93\x11\x93\xd1FF[\x19\xf92\nd\x14\xcb(\x91\x11\x97Q&\xa3w2\x0eeBe\xc2d\xb2\x91\xc9V&;\x99\xdc\xc8$\x90I(\x93H&\\&\xa9L\x84Lner/\x7fR4M\xf2X\xf2T\xf2L\xf2[\x99R\x99\xaed\xea\xc9t-S&\xd3\xadLw2\xf5e\xfa\xa3Lod\x1a\xc84\x94i$\xd3X\xa6\\\xa6B\xa6\x99L\xf72\xbd\x93\xe9\xbdL\xdfI\xe1I\xb1\x96b#\xc5V\x8a\x9d\x14?Jq#E E(E$E,E\"\x05\x97BH\xb1\x97\xe2V\x8aw2\xa32\xdb\xca\xecFf\xa9\xcc\xeee\xf6N\xee\xa9\xdc{r\xcf\xe4~+\xf7\xbe\xdcGr\x9f\xc9\xdb\x8d\xbcM\xe5=\x93\xf7B\xbe\xa3\xf2](\xdf\xdd\x0e\x16\xab\xd3\xaa\xe6\xb47\"\xe8\xffoq\xbb\x1c\xfc\xa6\xbf\xb8\xfdy:\x9a>\x7f?0\xba\xcc\xb2:\x14r_\xcf\xe6\x8b\xf1\xc5\xec\xd1\xd5b\xb8\xf8d\xb4\xb8]L\x96\xc3\xdf\x14\nD\xf6\x897Ub4\xa3\xb6B\x94\x19\x96\xf3\xf1dh\xc5\x87\xe5p\xd6\xbf>i\xfa\xb48]\x9c\x0e\xfa\xd7'\x8b\xf5pqz=\xe8_c\xca\xb5\x13\x90\xbaJ\xb7?\xb9>E\xa5\xaej\xff\xf6\xf6v19\xbadsG\xad\xf6\x17\xd4\xc5\x8b\xb1\x05|\xf8\xe87\xbf^\x9c\xfe\xd3\xd5\x7f~\xdb\x1f\xc8\xc7\x9f\x80@Tg\xe1O\xbc\x0du\xc8\x11\xb3@\x8c\x0f\xaf\x03y\x12=\x1a\x7f\xe2\x81&-''Y\xb7\"\xdf\xb3\x80\n\x7f\xcfl\xb9\xcd\x81S\xc8\xa3/\xfa\x117\x99$\x87NX\x9a\x87\xd0\xd2\xf7\x19I\x9a\xa1\xb54\x7fF\x1cZc\xf3\x0b\xb1\xdf\x0d\xc1~\xba\x10\xf7vj\xd4E\x08\x81\xdb\xe4\x03\xe3bX!\xf9\x17\xa2_\"W\x87\xf8\xb4\x00$\xc6\x95r\xba\xe8\x9fn\x0f\xdc\xb7\x8fJ\xf9\x07\xa7\xdb\x03<\x1b\xb9\x80\x0d\x0e#%9\x1b\x90K\xd2\x07\xf2\x14\x95\x92-!?9\xeb8\xa6$\x9fs\x87w8\x976\xf2UU0\xeb\xaa\x84\xf4#pK\xd5(X\xce\x17\xb7\xcb\x06\xc1rG\xd3\xaf\xb3 \xc8\x8b\x9a\"-\x12\xbf\xa3\x9a\x8c\xfb?x;\x16\xb2\x83\x15\xb8a\xf8\x0f1_\x7f\xa90d#\x18\xaf\x023\x9b\xbfY\xa4\xcb'\xd7\xa6JG\x15E\xe6\xdb]\x1e5\xd3S\x94\x06tM\x7f2\x1dR\xec\xca\xdcb\xc94!\xfa]\xcc\xd2?\xc4\xe2\xf7to)\xf6\x1f\xf9\xefb\xa1\xad\xd3Z\xb2\x7f!\xbee4\x15\x7f\x8c\x98\xe9q\xa5\x8c\x9f~S\x9b\xcc\x9c\x92\xf5]\xe7\xf1\xce\x13\x89r'\xba,\xd7\xea\x82\xd3](\xce\xeb`~\xb6,\x1f\xac\xb6J\xf1\xbd\x1f\xe9\x9e\xa6\x1e\xf7\x131Cg=0\xce\xbd\xfd\xaa\x9c\xd8\xa5G\x87\x86\xbe\xa3\x89\xa0\x9d\xf1\x13\x86\x8e\xe7\xd5\xfa\x07\xfb\x00\xc7:@\x9fw89c\x13A\xdb\x1avO\\\xded\xbbA^\xc7\x82\x87\x81\x7f\x827&NL\x0f\x9aWQ\xcdW\xac\xf99\x91\xa7\x0d\x05\xbb\xa0\x92\x01\xf3\x84\xd9\xf1m#Q\xcd\xc09\x88$\n#P\xf8\x08\n\xf9Q\xf6\xcf]\x06\xef\x01\xc7\xbc\xaf\x8abS\xd7C\xae\xc2\xbe\x18Jv\x84-7\xf5=\x06\xc2\xa2\xc1\xa6\xb3T\xe3<\xc1\x8e\xc3q\xf6W\x98\xc5\x8fs\xe6\x87\x1ej;\x8e\xc2W\xb8\x7f\xe9Zy\xbe\x1f\xecX\x7fq\x94\xbb6R\xf4g\xfb\xc0\x06\x1f\x80A\x0d\x8d4\xce\xa7\xde\x8a\xfd-fT\xef\xd5\xba\xce\xe9\xeb\xf2\xd6\xaek3E\x0d\x00\x96\xed\xd8\xde\x83\xe6\xd88N\xd3\x0d\x82\xe74;\xe1\x0f\x87\xe2\xb8\x89\xef\xfd\xa6k\x93\x8dh\xf0'\xfe\x80E\x9d\xf1\x00\xf7S\xb9\xc2\x13\xc6\xc3(\x8d\xfb\xa8\x00\xbe>uY\xc3VX\x91\xad\xa2A\x1e5\xf9\xbf\xe3,a\xd1\x9a\xad?\x96\xedI\xc6;S\x99?\xf1.4\xa6tO'\xe3\x0dJ\xa2\"\xb6:\xf7\xb8V\x80\xacn\x9ak\x1f\xec\x90\x94}\xc3d0\xa5=\xed+\x10\xcc\xbdGM\x05!\xf4}G\xaf \x0f\\*\xd0\xb2qv\x9e\xfb\xf4~D\xc3\xe4\x02\xe21=\xeav\xcd\xea\xd85R\xbd6\x05\xed?tN\x8c\xbe\xae\xa8P(\xe7\xc3\x05\xd1\x07\xe7XU\xb5\x83\xa3\xf8\x9f\xcc\x12\xc2\x12\xf6#^`}\xcd\xa9\x1f\xf8\xd1\xf6\x87\x80B\xcc\xf6.\xe3S\xae\xb6\x8bl\xe4V\xd1\x97\x17\xb7\xdb\xe1zS\xf3\xeeAy8,Nb\xd1\x19$\xc7X\x1e\x01J\xef\xb4M\xe1Q\xd4\xe0\x1a\x87\xab\xe3i'/F\x8a\xfa\xda\x94\xf7#\xedh\x11c$\xf16?\xa5\x1a\xb0x\x92\xfb\xe5\x84\xbb\xc0\xf9`\xbc7\xbeeFd\xbe\xc4(>\xfd\xa2\xdbx\x1d\x8a\xeaC\xa3a\x1b\x8c\xc8<\x0fa\xde\x1b\x91\x1e\x04\xa4\x86\xf02\xea-\xf0S\xd1s\x85(\x9d\x973Bm\x9f\x7f@m;\xaek9?\xfb\x80Z\xe0\x93\xaeg\xdaZ\x8f\xbb\xbc \xcbm\xea8\xaf\xd4\xd1\x00;\xa3k?\xda\x9aBO\x1f\xd0pP\xa9\xe3\x99{\xf6v\"\x0c\xa0.\x93\xef\xf9\x03\xda\x12t\x15\xd8\x1e~\xda\xa9\x87k\xb6)\x0em\x15m\xdc\x85\x8aPA\xb1\xcf+\x81\x0d\x97\xee\x98x\xd5\x05\x8a\x14<\x0b\xacW\xb6\x8a\xcb){\xdd\x81\xa1\x1b\x1bF.\x89o\xaf)\xb0\xe1pP\xa8BG\x92\x9f\xb3%\xc4\xe7\x82\x87\xe9\xd2%\x8e\xd1@\xcc\x08\xe6<\x87\xf3\x85\xf9r\xa0\xa9\xd2\xa0BzrJa\x9fh\xc1\xad\x11\x04\x82\xf0\xdf\xb1\xaa\x835\x87\xe6\xcd\xf6E{\xfb-\x00\xbee\xe2\xfb,`)\x1e\xa3\xa3\xa3\x04\xec$\xbaH\x10\xe8\x10\xe1dzA(\xb9\xd4GHl\x12\xf8\x91j\x98\"Q\xbd\xf1\x93\xaf\xc2D\xdc\x7f\xebG,\xedS\x08m@\xc9\xcb+\x12\xa1\x17\xfe\x93>\x9b\x88\x1fv\xfeF\xcc\xe9\x12\xae\xdb\xac\x82\x9bo\xa25\x8b\x84\xfb\xfa\x13\x00\xccq\xe0\xe1F\x08\xd4\x12\xcf\xf9Ru\x91\xc2\xf1\xe6\xc9tpA\xf8p\xe8\x90\x130\xea\x85\xf0\xb7;\xa1`\xcfF\x84M\xfc\x14@4\xb0[\xbe\x90\x19\xb9\xaa\x8f\x9dQ_\x07\xa6\xa7y1\xda\xa86W\x8da%#2\x1c\xdaAB\xaa\xa1\xb9RB9\x8b@\xe8\xad\xd7\xda\x12\x0e&\x1f\xe7\xda\xe7\n\x9f\xcaq\xa5\xcc\x0420S]D\x0bQ\x8b%\x99\x82q*W\x1f\xb3\xb3\xb3\xcf\x9e/\xe5|\x91\x9d?;\x7f\xb6\xc8\xce\xcf\xce?\xd3\x89\xd5R\x01\x94\xca\xce\xce\xe8\xd9i!,X\x111\xe1\x8e\x91\x03+G\x84W\xc7P\x81\xe8#\xa2\xb9<)\x03\x02\x94\x92\xe1>>\xb3\xc7\x02\xd5\x9b\xf3\xc0\xe55\xab7\xc2I0\x02'\x10\xb98\x9b\x8eHo\x11\xa9\x14\xabU\\\x88\xde \x8f^W.\x9f\x15\x18p\x93Z\x1b\xd6V}\x0e5\x94\xd3\xb3\x82p\xf2e\xbcf_\x88~4 \xd7:,,F\xf9\xf3t<\x14\x08\xfe\xa6P\xbf\xa7j\xe8i\xda\x00\xee\x85)\x19\x13o@\xfe\x89<3\xc7\xb5\x90\x08\xc5y\x95z\xe8\xd5\x8c>\x15\x99\xf1\x07k\xe6\xc1\xdc\xab\xd54\xa4\xef\x8f\x14q\xf3#f\xfe\xbe\xa2w\x05\x024*\x05\xb4Al\x1fz\x1epZ\x86U?@e\x18kM\x9a\xeb\xae\xae\x96\xab\xdf\x8a\x00\x9c\x0dj\xa8X\xac;\xdf7\xfd\xaa\x0e\x08/\xbaUD\x1e\xd6\x1a<\xa0\xb8Y\xc7\xfa\xe7li\xd5`(\x11\xb0\xa5\xa2\xbc\x85.\x14=\x9f\xbd\x1f\x95\xda,K\x1a\xadM\xd7]\xda\xeb\xfe\xa2(\x87g\x8f\xfdC\x90]V\x00\x1b\xa0\xe8w\xe1\xea%k\x83\xfa\x87\x84zGC\x9cr/\x978\x0d\xd0z\x15\xd9\x0c\x85%\xc8\x1e\x0c\xde\x97;\xca\xd3C\xaezKn1\x9d\x00F\xf6\xe4\xa9\x06\x19\x02\xfdA\xf0\xfd\x96z5w\xc2\x0e\x86\x0c\xd2\x1f\xb9\x04\x97\xf8\xa6n\x07\xdfP\x10\xbf$\x91#b/Z\xaa\x9d4\x0c\xf2x\xccr\xbb\x04\xa6\x96\xedq\xdd\xd92Q\xc7\xdeV \xa9j\x19\xa98]],b\xb0\x8c\x1a=\x14\xa9,\x81\x82\xb6\xe2\x92\xd4/\xaf\xffy\xa0V\x01F5\xf0\xf1\x10\xce,\x87`9\x02\xb7\xad\x8acpr]Z\x19Pjj\x1c\xc1\xdb\xc4Q>\x82(\xc7\xa8~\x0c\x1c\x93\x91iQ\x05|\xb7\xf6\x05\x19\x83\xe1\xac\xf6 \x1a(\xd4\xbf \x81\xa2\xbc\xf1p8\x80\x88ne\xc8\x06j*Ax\x03&?\x18\x01\x07;\xb3)gZ\x1c\xaa\xf54\xc5\xfe\xe0\xc8\xa8\x15&e\xf7\xcee\xf3xY\\\n\x8d}\xd4c\x9d\xd5}UUD+\xb4\x8d;J\xb42\xa9\xee\x90\x83\xee%b\xf6\x82\x0e,2c*\x96j\x12\n\"\xcd%y\x96\x9b\xe3L\x1ds\x18\x03^\\\x81\x8f\x9a)\xee\xdb\x9aVW\xbe\x03\xe2j-\xb9x~\x8b\xdd\x1fl\x02rHy\x15\xd2\x97W\xe4Y\xfb\xc6J\x81:\x1c\x1er\x06k\xf5\x9cZ\x86\xe3\xa3<\xf6{C\x8c*\x1d\x8b\nUf\xb5\xaf6\xe6TN\x05\xd4\x96\"\x1e\x91g\xe0\xe8\xc5va\x04[\xd2ZyP\xc2\xb8\xaf'*\x10\xd3\x19\x99\x8b\x91\x86\xd7\xa1<\xd1\xe1\xab\x18\xca\x8c\xa5\xcf\xef\x95\xf0\x96\x8bI\xef\x7f\x194\xecN\xdf\\\xc7F\xe8|C/^\xb1\x84\x11\xb3\xc8Z\xcf\xbe\x81\xec\xccd\xaf\xa3\xbaG\x86\xe4)yI6\x8dh\xadrM\xcf_\xa0\xd7\x96\x18u\x1def\xe0\xa1\x82\xe3s\xcc\x13\xb7\xd6\x04\x92\xf7\x08%\xe7\xbeg5'\xc0\xda\xfa\x9e\xda\x03\x0d\xc8\x98\xa4\x03rI\x9e\xb6V\xa45\x159\xc5\x01C\xf9\x89\xe0~\xd8/\xeej\xff\xac7\xb5\xad\x95\xf1\x82\x8d]\x03a\x16\x17\xe4\xa4?\x1cf\xa8\xd1A\xc1 :\x90\x16g$+\xcdH\xb6\x04\x9b\xbe\xd2$\xa84P\x7f\xd8<5]P\x03\xb5\xa8\x8d:0\xb1\xb8\xa2[\xca\\\x84\x00\x04\xf8\xe6\xd1\x06\xe5R9\x0b\x8aj0\xb5\x10\xb0\xbe\x81\n\x01\x9a\x9e\xb9\xe9\x0b\x90\x9en\xd4\xc5\x87vs<\xce\xc9MF\x86\x8ae_\x03\xeb\x81\x93\xbfn\xc4\x07\x94\xf1\x0e\xea\x93PN\xc3tFhG\xc2\x84\x8a\x85\x0c\x16\xa7\x93\x1c\xfd{\xa29\xf5\xb0\xbb\xc7Q\x9b\xf0\x10\xb5\xd9\x93\x97$l]\x89/\xce\xb5\xb1[\x05\xdb\xf7\xc3\xe1\xa0\xb5\xa0\x1e\\\x85\xeey\xac\xdf\x90\xde\xfd\x81\xa5\xc2\x8f\xb6\x1f\xb2\xfc\xf5f\xa3\x0e\x13\xac\xe4\xbd\x92\xc84\x11\xc8Y\x17\xab\xeaA \xeaaa,\x01\xc9\xf3\x91\xbd\"{\x14\xce X\xed\x9e\\\x92\x10\xc2\x11\x15\xd6\xe2~@fd\x0f\xd4,D\x81m^\x98\x0d\xa8/\x17[T\x1d\xe3b\x0b#\xcd\x0bP-TS|\x17\x8e6\x8cO)\x94`b\xb3\xa39\xe9\xf7K\xe8\x10\x97\xd0!^\x02`\xfd\x12\n\xc4\xcb\xc1\x00\x03\xa09IZ\xfb\\7\x8b=~\xabXc\x03+\x9fLGpW\xe7\x0c\xaf\xa6l\xec&-!\x97d}A\x92C\xb1\x0b6\xf3d\xa9/eE\xb0\xfa\xdbt6\x04\xaeA4SC\xf3sSE\xf3k\xf6\xd0\xb5k\xedtf\\\xfd\xdb\xc9Q{\x14\x93\x98\xcf\xd1\xa88c\xa0A{\xfa\xf4\xd3:\x8dF\xc1\xb3\x03\xde;\xdb-\xa2\xc8\xf1x}\x18\xe8\x12f\xc7K\xc7\x8a\x0dH\xf9\xc0aT>~\xb8\xaa\x9c{v\xe4)y\x99\xa6\xa0\xc1\x9a\x19@\x84g1\".wue^P \xed\xfb~0\xca\x97\xa8\xd5K#\x11\x8f\xbb3\xbf\x02\xa0M\xf1om\x9c\xdb&\xa6T\x190\xc5\x1b\xe6\xd3\xa5=\x1d\xd2K\x0b\x17\x13\xcd\x97\x16F\xac\xd6s\x93\x90!\x01Z\x94\xcd\x93\"}\xb2\xe9t\x9e,\xdd\x8a\x83\x12\xf9L\xff.xd\x99\x17:\x0cJ\x0eq\xbf~F\x86%9Gm\xd8\xd3V\xce\xf4\xec\xbcE\xee\xce\x80N>zD\x9e=G\xc9\x1b\xa4\xf0\xe7\x07\xa4pX jEN/HF.I\xea<|\xac\x88\xd8\xb5Vm{O\x11B\xda\xd8\x1e\x01\xbfrVT\xf5\xab(\xef\x9a\xfe\x93\xbe\x8f\x1b\x80G\x8fH\xff\xe4\x84k\xbb\x10-\x13j\xa1\xac\xe3b\xd8\xf1\xe6\x85\xfaaR\xdb\xa0z:}\x14N\xda\xe4\xcai\x90\x0b \xf5\xf9\x90s\xa9\xf4y\x9b\x90\x86\\9.\xa3\xe6\x80\\\x93\xb1\x12\xa8\x0dzE\xae\x89\xe6\x15\xf4\x02)\xe0\xd9S\xfd\xack\xe0\xe4\xb2\x84\x07\xf5Zlc\xbc0Z\xf5\xce\xc7\xad\x9d?N\x0e\x8d\x0f\xadD\xf0\x83\xa8F&_&c\xd7\x1e\xb3e\\.\xc9\xb3\xcf\x14ZF\xe4%y\xfeic5\xa8em\\b\xbc\x1d\x08b\x15=m\xa0\xa8\x1d\xdegj\x0e\"ry\xa5\x80i\x13\x9e\x9e\xa1\xee3R\xb0?{a\xa2\xa6\xb6\x88\x16\x16\xb4\xda\xd7\xa6\xe3\xf7B\xa9\x07\xa2\x87yj\xa7\xd7\xb534p\x87\xd9\xb2\x9b\x19)\x01c;\"\xf7#\xb2\x1a\x91\xb7#r;\"_\x8d\xc8\xdd\x88\xfc0\"_\x8e\xc8\xcd\x88|\xe1\x10\xe1\x00\x15\x94\x08\xa9q\xd4(\x14\xb6\x8e\xbc\x0d\x1a;=\x89\xaa\x12^\xaa\xa4\x95lB\x03\xd3\x96Q\xfe\xd0\x8dO\xe8B\xaa\xb5\xbe\xcf\xed\xb7\xef\x8aV\xb8gG\x12l\xace\xb6\xe4\x1a\xef\x017\xafV\xd8T\xa2\xffj\xad\xd4\xd07\xca\xd5<\x911I\xf0~fg\xfa\x1e\xf35\xe3l\xfd6\xf0S\xd1$\x97A\x9e\x19\xd972\x82\xdb\x87KlJz\xed\x08\xea*\x0b\x02&Z!\xfdpx\xac\xc9\xd2[\xbd\x07\xbak\xdb\xf7\x81\x81\xce\xe0\x82\x9c\xf4O\xfa`\xb6\x836\x98\xb0\x81\xea\xdfW\xd5AkD[K[\xe9Rkf\xee\xc9\x98\xac\x958\xf3\x0cX\xb6*\xadPhG.\xc9\xb4\x94\xa2\xa4\xa8uQ~\xa7\n?v\x9dg\x1b\xc6\xce\x17,<0\x80_}\xc8\x00\x06\xd5\xdd<\xea\xc5\xc0H\xc1\xec\xf5\x0b\x08\xbdq\xec6\x8a;\xf1\xfb\xeaN\xbc,\xdd\x82e\x965\x808\xab\xefU\xb4}`\xd3\xc6\x00\xf7\xa6y%j\xaf\xfe\x16f\x11\x88\x99\x1a\xf5\xb7Vn'c\"\xc8K\x9c\x14\xa7=X\x15\xba\xa0\xda\x9b\xb4\x08\xaeW\x83v\xf3\x80\xa9|\xf0&\x050\xbd\xb0'\xf9\n\xb7(tD\xee+\xd2:\xd1\xa6xj\\\x8a\xa6g\xf8~\xbc]\xde\x8d^\\?\xa0\x82\xe1KrE\xee\xec.\xe8\x07rI\xbe\xbc ?4)\x18\x14\xe9\xbd\x9b\xffP\xb4\xe3kW.\xdc\x1cP,4+\x15\xea\n\x05\xd5\xf8M#\xc7W_\xb7m\xf2C\xce\x08)HAg\x83&Eo\xeev#\xe7{\xe52\xee\xe6C\xb7\xa4\xb0\xd6\xf7\xf6\xeb\xad5\x1cXuAB\xc5\xaf\xca\x1c\x04q\x91T\xa8\xf5\x831\xf4\xd6bdn\xc7\xa8\xa4\x8cG\x8f\xda\xcd\x0cHY\xf2G\x1c\x07>?$\xe7\xf5q\x03\x9c\x8c\xf4\xde\xe8\xdc\x08\xcc%\xe6L\xc6\xe4\xbc\x14\xb7\xd3f\x98GKcAevi\xb9\x851\xd2Y\xad\x08\xca\xf3\x0bm\xc6\xd9\xcf\x13U\xcb\xcb\n!+\x14(\xa4G\xe8\xd8\xbc1k\x97\x82\xa1\x7fO\x9b\x8bv$\x08\x99\xb6g\x1b\x92sT+\xf43\xb3\x0b\xf4\x14\x17x\xfe\x99{\x08\x87\xc3lPVDd\xc3\xa1\xc2m\x16\xed'\xe6VCjn\xae\x94\xd2 \\c-\xeb\x84\xb3\x8d3?~\xd0\x85R+\x9a\xe3\xf1f\x80\x0b;S\xcb\xb8\xa1\xcey\x0f\xae\xf0\xa6Km\x1a\xd9\x8d\x04\xda\x9b\x19o9\xdb0\xce\"\xafY\xbdIW\x8a\xda9\xe2\xe1\x1f\x14\xa9\xe2*?\xae\x1d\xf9\xd1\x03RTI\x10\xcd\x06d\x8c\x82S\xf1\x08%+\x0b/\xc3+\xf2\xac.M\x15.\xa2\x14\x1b(1~C\xd9\xec\xd7\xe1U\xedx\xc7\xb6;.}k\xd1\xe0\xe6\x82Z \"Z\x86z\xac\xa1.\xf6\xdd\xaf\xf64\xfe\x90\xd9}03SR\xca\x07\xe9\xbcL\xea\x07Q\xe7\xe3\xe8\xf2A\xad,\x9c\xe8\xb7ka\x9f>o\xd3\xc2\xe2\xb5\xb5\x03\xd5\xe4ZW\xb3\x16\x1cd\xe6\x82<}\x9e\xf3`P\xce\x82\xca\x94\\^\x91\x17\x17\x03\xe2\x83\xf1Wci\x17\xd5;\xe9\xfb\xe4%y\x81\x10\xea\xfa\xb4.&.S\xb5\xd4\xae1kg\xd8OG\xe4\xa9\":\xf9\xcd\x90\xfa\xf7\xe7\xea\xbb\xda\xfae$7\xcc\xac\x01H\xf3\xcb&`=?(\x08DG\xeas\xf1:W\x13\x8d\xda}\x8bX\xec\xb8\xc9\xfd\x11\x94\xbev\x0c;\x02\xebG\xaa\x9dv+\xa8\x9c\xc6CH\x1fm\xc2r\x084\x18\xb3\x07u\xd1\xdb\xf9\xc1\x1a\x1ci\xcd\x97\xb5\x0ev\xec\x97\x99\x84&R\xd26\x0b\xbf\xacZ\xdd\xa4>\xc4\x12pd\xee\xe1\x88F\x8bV{\xa7K\xcb\x10\xcd{GG\x86\x8aa\x8e=\xe0\xe8\xf7K\xec\x91\x96\x88\x1a\xd5:|\xbfH\xc8\xe8R\xcb$\xfdg\xcf\xf3\x8b\xb8\xb5U\x17#mz\x81:_\x8eE\xe2\xf2B\xee\xc7x\x17\xc6BQ`\xb31l\xd7\xfcb\xb9F\xb5^\xe1>\xdc/\xb0\x9cM\x17\xb4\xbe\xe9\xfca\xa8\x7f\x00\xf7:\x82|\xdc\xa2\x06V\x9d\x1f\xbd|\xdc\xe5\xad\xa8\xea\xbf\xf2\x12\xef03\x87W\xfc\xe0# \x16\x85;\xdfg\xe7\xd5\xbb\xdd\n\x81O\xdf\\\xf6\xe7:x\x9fvu=_\xa4\x8b\xd3\x97U\xd7n>f^\x9c:\xb2\xbf\\\x9ev#4#B]\xb4&?\xa0\xa8H\xc5\xb5\xa1\xab\xd8o\xd63$e1\xba.\xbbxJvMF\xe4$\xdf\xdc\xedD\x18\xb4\xca;\x89\xa2M\x8apx\xb0[zyu\xc0<\xf4\xc5\x99{\xeb\xe4\xb5\xef<\x9f\xe2\xa6\xae\x9f\xb9H\x97\xa7w\xae\x8a|a\xbe\xaci_Y8{._rz\xdfv\x1c\xf3\xecS\x00\x1a\xa4\x96\x93\x96\x1b)\xe6g.\xa5<='\xb2z\xf5\xc0\xfc4\x18`t\xf9\xf9\xa7\xaaf\xa1d\xb7\xe9\xf9y-\xfb\xfb.\xdb\xdeg\x9f6\xf7\x9c\xd8c\xa5\xeaV\x11-a\xd1\x95\x9e?(\xb6R\x87\"W\xd2\xb5\xd7\x13\x0f\x0eC{\x82h\xc0\xe7\xe9|Zq\xd6\xb7o\x0b\xd5m\xfcm\xc6\xa1U\xb5\xb3e\x1c\x9fx\xa8\xfe\xee\xa6\xf0\xef9\xfc\xfb\x14\xfe}\x06\xff>\x87\x7f_\xc0\xbf\x8c\xae\xb1\xd4\xce\xc2\x03\x1e2z\xfe\x86\xd3P\xbb\xc1P\xff\x86\x14>\xc6\xe0\xd9\x0f\x9e\x00\xd28\x13I\x06\xef\xf09A`\x12\x1eo9K\xa1\xf3\xe8b\x12\x9e\x98g\xe0N\xc5=\x8e\xa6\xf1\x11\xd1\x13f\xd8\x04tY\xb0;A9\xa3\xf0\xbc\xc1\x0b\xaf=\x01~'\x04\xc7gF!g\x06p\xec\xfd5\x8b{\xcb\xc9&\xe6_Qo\xd7o\xb9\x808g\xcb\xf2\x0dP\xad\x95\xfa\x90\x1b76\xb9\x8b\xf9\x8aCr\xcc\x95)\xb5u\xc0\xdb\xb6\xecv\xf9\x16N\x8e\xc1BdL\"\x97\xb7\x88v\xf6\xdc\xf5\xcau\xd1\x8a\xa0\xce\xc8\x04\xb2\xc9\xc2];\x17\xbb\x0bJ[]\xe4\xd8Am\xd7\xd0RA\xbf\xa4\xfa\x08J\x12x\xb0,\x9f\xcc\x06\xcd\x14\xd7\x87\x0b\x1d\xa80\xd6\xbb\n\x87J#\xb7\xfb\x81\x1b\xbfZ;\xea\xb7\xd6J\xady\x030\xef\x1199}3\x1f\xcf$Y\x0e?9EW\x9b\xb4]$\x80\x1b\x08\x14C\xa9\xf6{\xb2\xa7\xf6\x1f\x10\x03\xb5M\xad\x92\xe8\xeb\xe7)Z$\xa6\xe4\x92\xe472[no\x9f\xc0\xb9\x947O\x97\xe6\xdaH\x1b\x9fE\xff\x05\xa0\xb8M\xe1\xd1+\xb9W2\xd7\xb2[\x05\x83\x83\xde\x98\x89\x01\xed\xf4\xcd\xecz<\x9c]\x9bq[\xb7\xb3\xdf\xe7\x9f\x01H\xeb\xd2\x81Y \xbek\x92 {se=S\xdf{\x18b\x0b\xce\xbe\xb8\xbf\xdd\x89\xde\x80\xcc\x9c5\x9f\x15\xaa\xeb\x05l\x839MB\xaf\xed\x06\xb7\xea\xdc\x18w\x0c\x05tq\xdc\xdb\x81\xb9o\xc1\x14D\x14\xeb\x9d\xed\xcdB\xca\x85\xfc\x04\xfc\xb3\xf5\x06\x05\x04\x1a\x91\xc4\x8c\xc3Ia\xd2Z\xeb\x8e\xdb-_:\x8a\x0b@\xe8\x0f\x98)\xec>\xc4L\xa1+\x1c\x8ao\x1c\x80C\xc1\x00\x8b\xf6\x97\x84\x83\xff\x92@4/\xfe\xae\xe0\xed\x9a\xc0\xa3\x81\xbf\x8df$\x99\xa7.\xc0>\x02\xec\x1d!<\xacw(\xd0\xb2\x8f\x00\xe9/\xa3W\x10\xbb\x87\x1e@|\xc0R\xe4\x0fm\xf3\x88n\xa9U\xf6\x8b\xb7\xa2d\xc6\x03\xcbh\x0f4\x05\x8f\x0b\x1fDW\x8c\xa0r\x8e\xdb+}\xfb\xa7Efy\xf4\xc88)\xcfiz\xe0\xa6\xe9p\x83\xbd\xd1\xaa\xa6;Q?4^\xa4\x0b\xdd!\x87F\x83|0q!\x058\x1a\x8909DdHW@7F\xa0\xc9\xc3\xf3+Q\x0f\xc4\x15\x95\\e\xe2p\xabrD\x9a\xf2\xc0{Y\x8a\xa8$\x91Y1\xc5j7\x8f\x19\x97F\xb2F\x8a\xa4\xad!\x8a\xca!\x8aE\xda\xa8\x16\xe9\xb8\xf8Hi\x12\x9b\xd689\xb4\xce\x89\x83\x8a\x11\xd8\xa2to\xbe\x99\x90\x91n\xcd\x97W{\xe9\xcdn\xad\x8e E\xbf8\xc1\x03!\xea\xc1\xad\xec\xd0\xfcj\x8f\x7f\x82QI\xed\xf3a\xea\x13\x9b\xdce\x03\\\xb0\xe2\xea|r\xedw\xd8\x06\xc7j\xd3\xe7\x1b\x13z{M\xdf}\x18d\xees\xe8\xbd\x1c7\xc5b\x14\xc7#\xd7\xe9\x8f\xce\x12\x95\xda\x89*\xe3F~\x91}\xb6\xb5\xd6o\x15\xd0\xfb,\xf7\x08\x06\x96\x85\x8f\x1e\xd9\x89x\xe9t\x9d\xb7)\xee\xc3\x8d\xaep\x03\x05\x87\xc3\xcd\xc1m\xbc\x9d\xb3\xcdQ{w\xdf0\xc6\x8d1\x81lm\x03\xd0\xf9h\x9b,m\xa7\\4\xfb\xeb\xbc\xd2\xd6\xc1\x01\xb9\"\xf8\x90\xbdJ\x866\xe9J<\xa8\xf8\xafc\xb3\xb6K2\xf0\xe9^\xdb\x0dn\xb5\xd1\xed\xa1\x1e\x91B\xaf\x1a-\xedIA$\xceF$\xfb\x10\xb6{\x04@\xdd\xb8]A\x03\xac`3\xd8Z\xf4\x8d2m>J$\x1d\x8f\x13I\xb7!\xf8\x98\xfcs\xddlKK\x0e\x11t\x82\xfc\xd3\x89'$_\x9d\x07A!\x05pZe2\x92\x8f\x8f\"k\xf3\x8d\x1b\xf9m\xd6C\xa8B\xf4x\xe1\xb5\x1b}\x9d`\x0d/\x86\x86\x8d\xf4\x89^a\xa6\xf7\xc5#>\xba\x1c\x81\xd2\xa0j)W4\xd9gE\x1f\x89E\xfb\x03\xd8\x12\x14\x13\x14M/\xdd\xc5\x18\x91\xf6\xab\x08\xb9\xb7b\xa7\x91\x1bu\xdfF\xd8\x82\x81\xd1\xbd\xb9\x8d\xb0\x05\xb0\xf4\xf15=x\x1b\xa1\x08\xee\xbe\x08`X\x83oW\x1d\x8adT\x1e\x8du7d%%\x0ciCX\xd2\x05i\x89\xd9F\xa0\x18\xb2\xb1\xfdW\x02\xfb\xcb\xfc\x02^\xd3\xb1\xe2\x01\xb6s\xb0\xac\x83\xf9\xb4\\\xf8\x03\x1a]_x\xb5\x14\xe4\xa5/\xdb\xee\x0f\xfa\xda-\xf0\xa6\xc8j\xb3f\xb7T\xa5\x8e\xd6<\xe3\xb4\x95\x82\x8d'\xd0\xc9\xc1a\x90J\x17@\x1e=\"t8\xcc/\x88t\x01\xadn\xec\xd3\x06\x9a\xef\xbe\xfdP\xca\xfc!\x92\xf8:x\xb8\x80\x1ch\x94,H\xc6\x9b\x11\xb9\xff\xc7\xfd\x04\xe7\xfd\x04\xef\xa3\x1d\xba6\x8a\xcb-\xdb\x87\xe2\xfd\x04\xb7\x91\x9a\x0f\x1e\xb6.\x8d,\xaf\x8f\xc5\x07\x95s\xf1\xd4\x11=\xceZ\xf37\xde\x14\xcc}\xce\x0fP\x13\x12\xd5\xaaE\x9dH#\x19*\xe8\x90R\x971\\\xdb\x0d(\xeb\\O\xc9\x7f>^\xba\x82%o\xd51>\xb9$\xf4\x82\xf8m^]\x88\xa1Is\x1f._\xa5]._\x99_\xdc\xc1\xbb\x0b9\xe8\xe1\x858i\xa9\xf9\xe9\xcdM\xd7\xfb\\\x9aN\xe0j*\xda\x0c\xa4\xcd\xd2b\xbe\xd0\xd3\x11\xe1f\xf1\x15\x97\xca\x01rSYzu\xa2\x03K\xc9\x1d\xf5\xa8\x8b\x19DY\x8c\xaaQ\xac\x8eP\x1eV\x96\xf3CMw\xb4\xc1\xfb\x85\xec\xef\xf2an\"\xeem\xe3\xdc6\x86\x1f\x8d\x88\x1d\x8e\xb0r\xfe\xf4\xb9#\xc0J\xd4?\xff\xb4\x92L\x1b\xe2\xae\x08vgbc<\x9d\xba#wD\xec\x16\xa7\x1as\x9d\xbbs\xb1\xd4\xa3\x89\xcd\xf4\xd4\x9diE\xbd\x1b\xe1{7&\x8a\xcb\xd3\x86`!k\x16\x98\x1c\xcf\xdd9\xfc\xc8\xd6\xf1\xc2\x9d#\xa4\xdc\xc4\x1ay\xda\x10Q\x86\x85\xc9\x8e\xa6\xbe\xad\xe93w\xb64[\x99\x1c\x9f7\xe5Ht\x8egg\xee\x1c\x81\x1f\xd9^?k\x18h{\x95\xc4\xac-\xcc\xdd0\xe0\xc5\x8b'&k\xc3\xb0S\x1d\x1e\xc8dk \xd1\"\xa8 \xe4\xf2\xaca\\Y$|qo2}\xd6%0J\xf6Q\x02\xa3\xe4^\x90\x9c\x81Q\xa8 \x8cB10JE\x11\x0c\xd9\xf7\x18\x81\x99}\xebG7\x8a@\x17\x16i\x1d\xea\xb4n\xe9\xb3\xb7\x81t\x91\xd8\xb7E\xcc\xd5\xbc\xc3\x1c\xc6\xabb\xbe9z\xf9J\x8d\xa1\xafXI\xf1\xf8f\xd63\xf1hU\x89\xb9\x0d\xa6\xdb\x1b\x15\xe3\xed\xf6\xc0H\x0bM\x9c\xd6T\xd0\xde\xd2\xd6 \xcc\x11\xce\xac7\x98\x9f-]\xe6:Y\xc5\xe7\xf5kE*[=\x86C\x9fG\xc6KLa\xd4KQ]j\x88\x02\x8ez\x8d\x8e\xac\xf6\x15u\xafI\x9c:4y([y\xd4\xdb\xb1\x7ff\xa2\xef\xc3\xe5\x97\xb3\x01\xe6W\xe8R\xd1o\xb9MP1l\x03b\x8f \x97$\xbe \xa2Mx\xe2s\x01\"\xcbI\xc1g\x08\x04\xe2\xd2\xa0\xfc\xa0@\x19!\x10\xce3\x86$N\xf1\xdeb={)w>\x17\xefG\xa5\xe90\x1b\xfd\x8e\xfe\xdb\x0fNIy\n\xf2!G\xf7\xf40\x98\x97\xc4o\xd6\nF8x\x91q1s\x02\xc3\xc9\xe7\x11\x8e\xd3t0\xc0}\x84{W\xd6\x18\xe8\x187z\xaa\xf5\x97`\xef\xd4z\xbb\x9dM\x12\x16\xad\xfdh\x8b7\x04S\xee\xcd\xf5H/\x1b\x06\x95\xe0d\xe8R\xa0\xf7P\xe4\xe1;L\xe8\x0f\x9aF\xff\xd8\x802\xcdaO\x1ct\xc7\xeap\xfcF\xa7\xdc\xd9\xaf\xc8\xb1bB\x9dd\xf1:\xc2\xa4\xb7\xbe\xf0v\xc4mw\xed\xd1\x94\x91\xe9\xd9\xcc\xfd\xe1\xf3\xf3\xa6\x0f/\x1a>m\x1a\xad\xa7\x9f65\xdf4(\xd3\xf3\xc6\x91o\x82\xebE\xd38>w\x8c\n)\x98\xd29vbk\xb6\xa1Y \xda\xcb5\xf9S\xeap\x94\xd5H\xec\"\xcb.\x80\x1c\x192\x06T\x89\xd7]7G\x83\xc1\xc5@\xd1&'G\x8e\xf4e\nE\x82\xd4\xb6L\xe8\xbb\xe2UJ\xa3\xad\xf4!\xa3Z\x87\x83Q\xce\x82\xca\xf6\xe2\x1f \xe2w\x1e\x8b\xaa2\xc8\xc9;\xa7\x0d\x17E\xe2v[?=\xbc\xd8\xff\x82\xf1\x81\xd1#\xe1h\x8f\xc8\x89p;\x9a\x85\xd3\xcb\xb3\xd2\xf5TSYyV\x9c\x88ck\x98\x1e\xacA\xbb(9\xa0\xc6\xb0\xf4\x19U^>\x9eS\x12\x7f<>\xac\xb9\xb0~\xd4\x1c\xcd\xfb\x9d\xd4\x189\"\x15\xab\xc9\xedE\xce\x14+\x1e\x92iC\xe8\xd9\xe2\xefC4\x1d\xec\x90\xfe\x9d\xe4[\xe1\x1d\xe5kh\xabE O\xdaw\xbd\xc5\xdf{\xf70\xd7Xzi|\n1SG\x87\x81\xd7\x80\xa7\xf1F\x1c\x02\xbc\x03\xd0N\xa3\x11\x0d\xeb\xc1\x13\xb7C0\x1ch\xdfiv\x17\x0f\x87\xe8\x19\x9a\x93\x96;\xdf\xb1\xa2rq\xe3\xfd\x1b$U\xf1\xc7RF\xd8\xa5\xc5\xb59\xb8\x0e\x9c\xa2\xc0<\x7f\xfe\x02\xfdP\x13\xbd\x19;+\xf4\xaa\xb7X\x9c,z\xbf\xfe\xe4\x9f\x1e=\xee\x0f\x9e\x0cG\x93\xd3\xd9\xc5\xe5\xd5\xcb\xeb\xdf\xcc\x97o\xde\xfe\xf9g\xf9\xfe?\x8f{f\xe3\xd2\x1bt\xbboQ6\xb4Z\x92\xabb$\xa9\xca\xe5\x8b.d\xd5\xd2\xd4\x96\xad\x8a\x92\x9bk\xa4\xf3\xf3\x06\xbf\x8b\x07(\xeep\x18\xe3\xc5\xdf:j\xf9\x8d\x8e1\xf1\xb6\xf0\xf9\xf3\x17\n)\xcc]\xb0(\xbf\x88\xd0\xc4\xc8\x8c\x8fg\x85\x10\xc3+r>r2w\xcd?\xb4\xc3J7\xca\xebM\x15\xf8\xf4\xea\xb6B\xbb\x90\x96N+\x14\xa2\xf2 \xb6\xf9\xc7/\n\xf3k]\x1c\xb6\xb1_5\xbf5\x0fuo\xb1\xe8\x99aV\x1b\xc1\x8f\xb3\xea\x8eE\xe4\xd29F\xb3\xa0\xa0c\x89\x1c\xe3*\xc8\xee \xb3\x11\x01\x0f=\xbc\xb4\xa1\xcc\x0c\xb5\xfa\xfcE\x93+\xa1\x8b\x81*\xe8\"w\xa4,rE\xe8\x12\xc3\xd7\xc1_\xb3\x0b\xb0\x84\xac\xdc\xa7)D \x81\x93\xbf\xe6\x8d,\x85sx\xb8\xceH\x0fAIU=\xd4\x85>>\\\xc0\x19+\xa8\xae\xf2\x00\xb6\xe5\xc5\xd7\x85_4\x84\xed!\xa4\xd9i\x85_\x08\x93?'\x8bh9\x04\x93]\xd2k7Q1\x91|\x9a,S\x0e1\xa6\\\xde\xa5\xb5u\xd2uU\xc4E\xca\x93G\xfd\xfd;Z\x1cJ\xb2\xadu>m\x91\xb1\xcf\x1b\xd6N\xdaN\xf2\xdb\xed\xd7R\xf4^\x06w\x91[\xb257\xfe\xcb9\"\xf3u \xce\x94\xbc$g\x18\\\xa0\xda6\xd8.\xcf\xc0)\x96\xd3\xa7\xb9\x82\xee|0\x02\x03\xca\xab\x83\xd7\xdcL\xaef\x9f\xe7~\xee\xed\x8c*\x9c\xd3|\xab\xb9\x00\xd0\x01\xaeC`\x9ec\xdc0\xb8\x99n\xda\xaa\x81\xcc\x15!\xa8\x05\x0d\xf3\xd1\xa74T\x93\xc7O\xb2\x08\xce\xc9\x98\xa4\xa3FF\xacWt:\"\x1c\x0f\x89\x1c@\x9a%\x97\xe2A~\x8c\x8e\xe4u\x0b\x10>.k\xf4v\xdd\xd8\x19TC\xb6\xf6\xd7\xb6\x80\xceH\x9c\xf7\x161\x0f\xda\x0dY[Xj\x96\n\\\xd2T\xc3\xea@\x11\x9b\x01\xd1\xc4\x82b\xef?\x9a\x8d\x17\xbc\xd8P\xa8\xd7$\x1e\x8f\xc9\xcc:\xc1/|\x84\xe7\x18\x1d6]\x82\xa7\xe7&\xa1%\xfa\xc0\x18J\x04wSxjou\xe6}\xd6\xc1\xd4;\"\xd7zF1\x06\xaa\xd6%T\xe6\xd8\xa2K\xbb\x15\nk6 m3\x8c{\xef\xf6\x98\xd6\xb6\xcb*\xb4\xf8@\xc3\x97\x02\xef\xb0\xdd\xd7\xd6qv02P\xa2\x90Y\x01\xe7A\xad\xfco\x963h\xdf\xfd\xff*\x8c\xa1\xb1\xed\x7f\x13|\xe1\xd9\xd3\x0elAg\xfa[p\x85g\x0d\xee0\xdb\x98\xc2\xc9\x95\xae\xe7\xef\x8e-4\xf5&\xe7\n\xad9\x8e`\n\x1a\x0b\x1f\xce\x13t\x05\xff` \x9dX\x82\x1f\xa5\x7fc\x96\xa0Z\xfc\x07K\xa8\xfcZX\xc2\x8b\x06w\xc3\x7f\x0b\x96\xd0\xd8\xf6\xbf \x96\xa0\xdd\x9e\xb5\xb3\x04\x9d\xe9o\xc1\x12tS\xffNXBSor\x96\xd0\x9a\xe3\x08\x96\xf0b\xfa\x81,AW\xf0\x0f\x96\xd0\x89%\x84\x94\xdf\xfc\x8dy\x024\xf9o\x8c)\xd8\xe46\xd3 \xb3f\x89\x0d\x00\xc50\x00\x14\xa8\xfaT\xea\x8b\xe76\xf5\xf33\x9b\x8a\x9e\xe9X\xd53\xdd\xd1Q\xb9\n\xfeR\xeb\x03\x9b\xa1-}-=mH\x0fZY\x98\xe7Z\xc6\xc2u4\x85\x97\x0c\x1a\xc8\xbb\xc8\xc9;\xeaZ\x03\x18\x89j6\x8a\xa1\x95=\x97\xaaU\x0f:\xdc\x16\x81\xd2`5\x0f\xf7\x9a\xfa\xa8\x10\x1e\xeb\xab\xa7\xcf\xc85\x8c\x02\xf4x\xaa\xf0\xe3i!\x9a\x1f\xb6\xee\x80\x91\x16U\x10H%bt;o\xda\xd1\xd5D\x85\x1c\x91u\xe1\x0c9>G\xa7\xb0\x1e\xc0\xc7\xfb\xda[\xad\xad\x80\xf7\xe3\xdc\x15\xf3\xc9t\xa0\xd0\xbc\xbe|<\x1a\xc1J\x9d\x91\xcc1!4\xc25\xe5t\x07\xbff\x81\x1f\xa63\xe27\x10\x97\x07\xd8Z\xe4RO\xf5\xdap+\xe2l\x9a\x0f\xce\x12\x17Nm\x06uF\xa9C*&\xb0\x01\xc0\xb1O>@\\\xfb\xbb\xdcW>z\x84\xfd\xd3s\xa4\xbax]7\xb7\xb0\x01\x05\x90\xad\xa3C\xea\xd3\xfe\x1b9\x7f\xb3X,\x07\xfd\xc5b\xb1\x18\x00\x83>9\xcc\xf9U\xb6(?K\xd5\xb1\xf8\x80\xcc\x18s\x08\xe3\xdc\xd4\xde\x07}p\xfc\xe1\xc0O\x9du\xe0\x87+2_\x0e\xcc\xee\xac\xfe\xbd\xe0V\xd4E\x0e\xe2\xc3\xe8Xv\x0cR\xa7\xcb\xeb\x87\x84\x8d\xac\xac\x1b\xdc=\xd6\x1c\xa1\xba\x17S\xbd\x93s\x7f\xa9\x06\xaf\xde\x03\xa8p\x96W\x9d&\xb8\x9d\xa9H\xfe\x95%ZXCqm\x07\x90\xd9\x08x\x1fc1\x1d\xbbhJa/\x9b\x17M\xcbU\x1d\xc5\xba\x9e\x92\x97\x07\x8c\\N\x1c\xf8ZM\x83 \xd6\xad\xb54EGo\xb9\x16\xd4\xa60\xc8~9K#k\xa7\x93\xe5v:\xf4\x82\xf0\xe3\xa3\xa3\xf3\xc3\x81\xd7\xa6\x0d\x02}\x87\xa2M\x81\xd5y\xf7\xc0\xeahG\x04\xfd\xd4\xe4\x8e\xab\xe1B\xd7\x8a}\xae\x96cT\x11k2\xe3\x05\x10\x05#-\x12\xe1\x1c5\xc65\x8f\x96\xcd\xe4\xaf\x1bMk\xaf\xfc\x12D9\xad\xaah%|\x0e\x82\x11\xbb \x86\x8e\x98\x1e\xb9\xb4\x08Y$f\xe4\xacN8\xda`\x84\xa8\xcd3\xe2\x82\xb1\x94\xb1\x99~\xcf\xe3\xe5\x04\xdan\xec\x08~\xd6\xd2\xc7\x87R\xf2\xd8\xc1\x80\xb3\xd57\x0f\xa0\xf1\x05\"\xcaK\x04\x94~\xc4\xc0\xe4\x05Y\xe4\xecY\xd5u\x99\xd1\x99|\xe6\xd0\x99\x14\xe2\x8a\x9e\x8d?\x9f\x9c\x80\xf2\xf4\xc9pqzum\x15\xa6\xc3\xdf\xe49\x96\xfd\xebY\xfe6^\xfe|6z1}_\xf8>\xb8\xee_\xcf\x16\x93\xa3J\x0c\x9e\x0c^\x9e\xd6\xf56\x05\xd8&\x8b\xf1\xf2\xe7\xe9\xe8\xfc\xf9\xfb\xc1\xac?\x7fs\xf9rqwv6^\xdc\x9d\x9f-U\xd9\x87\xf3\x91\x92n\xa7U\xc2z\xd1\xa8}\xd0\xd4\xa3_\xa5\x16\x9b\xa2\x13\xaa\x97\xbd\x82(\x04\xaa\x90H\xab\x0f)\xb8\xab?\xe9s\x9b9\xab\xc5\xa1,\x94U\xbb\xa1l~\xb6\xd4\x8dL\xf5\xd5~\x0f\xac\x08\x02\xb5\xe7:\xb1\x02C\xd1/W?(\x8ba\x1dd\xef\xd6\xfd\xc3\xc1]Be\x1d\x1c^\x96\x02|\xe69(\x8e\xd6[\xba\xc2S\xb2\xaa\xe3\xc3\xa3[\xed\xb2\xcb8\xb0\xb2\x87zF\xf2[\x98\x03E\xedN04i\x94\x874\xb5\x13\x986M`/\xa4~ b \x87m\x93\xe9\xfdc2K\xbf\x8f:\x99iu2?\x0e\x91.\xd2\xa6y\xcf\x8b1N\xe7:\xf6\xeb\x8e\xe8(\xa5\xfa\x0fD\xe6\xa4\xab\x18CwR\x0f\x0b\x99?>\x04\xd6\xf48\xfe\x05\xb7u\xf0\x17#\x94\xfa\x18\xffs\x0d>\x1d\xads\xbb\x8d\x80\xb2[\x16\xc3\x1f\xfdo\xb2\xd3\xd1E\x9f\x9ec\x04R\x81\xd9\xd4_(\xee\xd3;\xf8\xa3\x9b\xf6C\xfcW\xbfE\x1b\xa8\xc7O\xf0\x95\xfb\xa9\xf9;Y1f\x13'w\x89W|\xces\x05\xb7\xef\xd4s\xb0\xc6\nq\x19\xc0\x13\xf6-Lyb\xfeB\xa9P\xfc\x84 Y\xa2V\x85z\x8c\xd8-|\x8a6\xf8\xc7\xc7\x7f!\x16i\x14a\x7f\xe2\x84\xfe\x94\xb1 \xf6n`+\xa4\x92\x92\xd8DD\x85b\\\xa4\xf0\x9e2\xbe\xf7=\x86\x8fij\xe2\xa1\x9a\x81I}\xb6\xc7\x8f\xbe~G\xb8\xd2\x10\xffD!&\xc74\xb1C`_ \x0b\xfa\x84\xec p\xca\xa9\xfeD\x188V\xe8\x19\x12;?\x0dY\x9a\x82\x06\x8a\xf4D\xf4\xf4\xfc\xd33x\xc2\x16\x05\xccr\xc6\x01\xae=\x0bC\xe8/\x0e\xc1-\x86t\xbd\xf3\x10j\xf5w\x9c\xa5L#\xca]\x18\xf0\xc4\xb3`\x15^\xb1T\x88\xd3\xf8\xee\xe9\xe7\x93\xe7g<\x7fDd\\\xfbYx'8b\xe8&\xc1?\xf8 \xb1\x82j$\x16\x82z\xbb\x90E\xf8v\xab\xfe]\xb1tG1\xf4\xec\xca\x17^\xeccX\xde8\x80\xb9\xf6h\xa0g\xdd\xdb\xf1\x18\x83\xda\xe2\xd3\x98\xdd \x16\xa566o8f{\x16\x89\x15\xf7\x05\x1bS!X\xb4f\x98\x1d \x0c<\xee\x01\xa8u\x10\xd1q\x12\xd0\xfb\xd4\x8f\xb6\xda\xbf\xa3IR\xb9\xa9\x1f!\xea\xaf\x05T\xbe\xde\xaf\xd4\x1f\xb6>\xbfQ\x7f7\xd4c\xc2GX6\xcc\x84\xf9\x8d\xb6:\x84\xaf\x9f\x02zma*\xb7\xbe\xc0?\xef\xc28\xe1\xb1 \xc0\xbb\x154\x80\xbav\x1e\xae\x04=+~\x82\x7f\xb8^\x13\xde\x0b\xfd\x17\x97\x85@L\xfa\x91BK?\xe2\xdb\x0d\xbbO(\x16\x08h*60\xe0j\xd5\xe0\xa2\xa0[\x8dD\xa1M\xe17:%G\xa5\x10\xeb\n\xd3\xf1\x8e\x05zYE8wa\x16\xea8\xbf\xe1\x1e\xa0\x03\x19[=\xc4\x88; \x0dB\xfc\x9bPN\xdf\xbd\x03\xa4K\x02*L4\xe3\x84\xc7w\x10\x1f8I\xef\x01\xce\x9f2\xc6!\xc1,0\x96\xc6\x19\xc7\x95\xc5\x11iyz\x1fA^.\xf4\xb2a^\x1c\xad\x03\x7f\x83KL\xaf\x88t\x8bk\xf0\xe6>\xc1\xf4\x10\xa6*\x8d\x835\xc5\xc0\xc5I,\xfc\x0d4\x96\xe2\xc4\xa4\x82Q\x00+\xc5\xee\xa8\xd74\x01\xc7)\xb0\xc2\xa2-\xc0\x94\xad\xa1\x81,\xe2\x8c\xc2r\xcc\xc4\xf9\xd9\x19DaVx\xc6}D\xd0\xbd\xcfn\xc79\xf4\xb7l\xe5a\xf6[Aq\xf5\xdd{\xfe\xed= \xc3\xdd\xc6GD\xbf\xe3\xf0\xe9>L\xb7\xbc\xb7|8\xff( \xf9\x9f\x0e&\xbf\x7f\xfd\xea\xdb\xb7\xaf\xbf\xf8\xe7\xb7\xdf\x7f\xf5p\x01\xb8\xa2Eq+\x17+A\xf8I~CE+^\xc8Ic0}\n\xc7\x1aE3\x05\x14\x97\x9f\xea;\x8dN\x97\x0e\x06\x17\xa7\x15\x8d\\\x8a\xe5@u\x04\x98\xac3?\x9d\xbeW\x99\x1f\xce*\x8b\x97v\x1c\x04\xab\xc0\x0f\xeb\xfa\xf8\xa7\x9f\xb9\xb9\xa3w(Z8\xde8\xdd\xb8/\xa9<}\xee\xd6Iy\x9a}\xbai\xa6\xbf1f(9\x93\xf1\x0c'+\x1cI\xa0rA\xf1\xe7\xde\x1dF\xaa \xe6\xd3\xa5b %\xdd\x14\xb9&\xa0\xa1\xf8&\x12}\x95\xc1\xe85\x06#2}\x01\x01\xd6\x8b_Gd\x8aa\xb6\n\x97\x81\xfc~\xa4j\xa1}\xa0\xcc\xb4\xff\xe2\xf9\xf3\xa7OK;\xf2\xa0\xcc\xb6\xea\xc4\x1am6\xc0p\xa8\xb1k)2\xe9X\xf1\x01\x05J\xb5\xa7%\x98\xf8\\eY\xb6\x00\xe1\x14\x95\\\x0e\xec\x1e\xfd\xc2\xfe\xeb\xca\xb3\xac\x05\xb5\x99c\xf2\x95\xe0\xe1\xf6[v\xa7>\xfd1k\x88\xca\x01\x07*iC\xc4\x0e\x1am\xbf\xe3l\xe3\xdf\xcd\xd4\x8e$\xdaft\xcb\xc6.\xed\x8b\x1f\xdd\xf8\x9b\xfb\xc6\xf8*7\xaf)\xdf21sJ\x03\xe2>\x89!\xa8\x08\xe3\xee\n\x809\xa63\xd2\xfb\xeb_\xfe\xcf\xbf\xfe\xe5\xff\xfa\xeb_\xfe\x8f\xbf\xfe\xe5\xbf\xb8\xd4]\xfev\x17`\xfc\x91(\x0b\x1cJ\xa8\xfc\x8clF\xce\xab\xa7\x1c\xa5W/\x0e\x938b\x91p\x8e\xb5\x17s\xe6JW?\x9e\x05\x10\x8a\xa5\x07\x9e\xe4z\xa3<\xea\x8b\xda\x1c\x19+\x19|\x03\xc9E1\"x\xd7\x83\x88{\x1f\xca\x05v\xbb^\x8e\xaeV\xfc\\=\xd8\xa3\x0eA\xfd\xa0\xe7\x08\x83\xe8\x98mto\xd7\x05th\xbe72\xce\xf7\xd4\x06\xd9@`\x1aV\xcf;F\xd7\xc8 {;T2\x890\xb0}\x0f\n\x9fu\x90\xbeB\xd0\xa6\x91\x8e\xa5\xdb\x0dv\x1c\xc7\x83\xc0\x17\x02w\x94b\xa7\xe8\x00)\xc5\x00&y\\\x8e<\x14K5FH!\xc2\x87\x0dHR\x08\xef\x82\xbaP\x07\xfc\xbfr\xbf\xfd\x83,\x14?\xfe\xbb$\x0b-\xcb\xae\x0d\xab\xff\xce0\xc6q\x1d\xbe\x801\x8e\xaf\xff\xc0\x18\xf8=\x04cj\xe9\xe4(F\x82\x0c\xa1\x13\x0d\xfd8\xf4\xffCh~'0?\x94\xd4\x1f\xa2\xf1\xff\n4\x1d\xb6]\xf9\xd2\xe4\xc5}IU\x98w\xaffS\x0b\x83#&jf\x1e\xfez<\x8e\xeeQ?\xbf^s\x86\x07\x04\x943\xcc\xc5\x85\xef\xa1\xde\x97\xa6>N&\xcd\xd6>h=A\xc9\xbaZ\xfb\xf8\x07\x93|\x18\x99\x95\x1d\xda\x12:\xac\xe25\x8c&\xb6\xbc\xca\x84\xd0z{\x1a\xed\xf1D\xcb\xa3\x890\xca|\x16 T\xa6{~\x19\x9b\xbc8\xd0\x7f\xb6<\xce\xf0\xc4+W\xef\xe7\xa7]\x82\x1a\x1cZ\xe39\x18\xf3bNE\x8cZ}d\xe9k\xa6$ d\xf2\x1b\xd4\xf3\xfb\xf8\xdd\xc7\xc32\xcc\x05\xb5\xb0\x80\x99S\x0b\x06\x03\xb6\xf1Y\xb0N\x99\x8e\x11\xb5-\x00\xbf\xf1\xb7\x19\xd72\x01\x96P\xb2\x81>\x1b\xd0\n\xf1\xdd\x14\xfe\x05yl\x87\x87k\xa0X\xde=\x87\x7fA\xe9\xaf\xd6\x83\xf9\xab\x0f\xe2l\x9f\xf3\xf5\xa3\xfe\xc2,\xf8!\x0c\xbf\x1f%x.\x88a\xdbz7+\xa8\x04\xacw\xe0\x81mY\x84IP,\xa4x\xde\x12\x9aC6\x08\xe5\xa6\xfe\xfe\x94\xe1\xf1I\xc8\xa2\xcc\xfc\xf5\x05\xf6>d\xbaC\x11\x9e+F1\xce+\xceN\x9c\x08\x0bil\xc7%\xce\x84\x06\xcd\x9c\xad\xe1\x9fxk0\xef'\xf5\x0f\x9e\xe9q\xc8\xc8\xb3\x15\n\xb6\xf0\x0f\xb5\xe7\x00\xa6\xca\x94\x05\xfa<%\xdd\xd1u\x0c\xc7IiH\x03\x80\"\xd7\xc9\xa7 \xf5\x10\xdc4\xa1XPp\xff\x86\xe9\xa7\x18\x89N*\xee\x11\xdb1\x08]/\xcd\xc2\x90\xe2)\x05\x06\x9d\xd3R\xa7z0\xd8,`$\x05\x0b\x93@\x1f8*\"`V\x90P\x13\x0f\x0f(\xb4\x9a\x195gG\x82\xe3\xbf\x14)\xa0\x80\xbc0\xd6\x19\xf4`\x8f\xc7<{\x7f\x8d\x07\xb3\xb7+\xdes\x04\x8a\x03\xa3\xb0^\xba\x87^\xe0\xd2\x0d\xc46\xb8GQ\xd9<\xafQ.5\xaff&i\xe4\x87T0/\x0epm\xe8\xf706c\xac\x13\x04\xa7Qj\xd0\xd7\x92\x81\xc2\xea\xf5\xb9&\x16^\xe0' \xc5.\xaf\xd9F\x0b\xd1)\x9c\xe5\xb0 \xf0\x93\x14\x17\x87\x1f\xd8E\x81\xcb\x04\xcf\xcb\x0c\xdc\xf0`\x84\xe9\x1b\x86G\x9a\xda\xf6\x1e\xe8\xaf\xfdK\xf9\x96\xd3\xb5\xaf\x97'\x9cnq|J\x11\x97\x99\xa0\x862\x84\x06\xb2\xc2_\xa1+O\xe2\xe0~\x1b\xdbG\xcb5\xe9\xda\xa7A\xb1 n\x90N\xe01q\x8e9\x10\x01\n\x9e\xee\xc3U\xac\x0fq\xef\x84\xf9k\x1a\x05\xabzx\xd0\x1d\x14\x061\xed\\\xef}\x06\xe8\xbc\x87\xae;f=\x82Y\xdf\xb0\xdf\x06z=o\xd8\x97j\x12_Q\xc1\xfd;\x93\xa0\xc5\x88\xd70{z\xb819\xd5\x94U\xbdF\xfb8\xd8\xb3b\xc9\xdf\xf9\x9bM\x96\xb2o\x958\xa3\x99\xb2JL\xed\xde\xf3\x15\xd2\x0bH\x144\x12\x90\x13S\xbe\x0e\xe2XC\xf4u\x16y_\xe4\x8f\xbf\xcd\x1f\xff9\x7f\xfc\x1e\x1f\xff\x99fi\xea\xd3\xe8\xb7A\xa6\xe1|\xc5\xf8\x96\x15\x1e\xff`E\x8aW1Ovq\x10o\xef\xf1\xfd\x8f\x9b\x8d\xa1\xc5\xa87,\x80\xf3C\xc2\xbc,\xa0\xbc\xdc\x97\x1f\x92\xb8\x98\xe9\xb5\xb1\x84`\xaf3\xbe\xca\x02%\xb4\xb8F\x1d\"r\xf4B=\x8f!\x8b\xb4e\x89z\xe6\x1c\x97P\x08\"\x0f\x9a(l8\x05\xc4\x0f-^\xe3\xe9f\x08\x04\x99\xad\x91\x04\x84a\x16\xf8h\xea\x81\xa7\xb0H\x92\xd1\xd8!\xdektN\xe8z\xad\xabMv4\x121\x92b\xae\x89L\xc8\x91\x00\xea\x83\xdc\x04\xa8\x1e&\xfc\x84\xe44\xbc\xb7\x98\x1aj\"\x17j\xd2\xa6\xde\xcd\xa3%s!\x92\xb7\xd0\xa0p\xa8\xa1\xcd\"\xcd\x90\xf0 \x00t\x8cU\x0cc\xf5k\x14\x8b\x1c\xd2\x1a\n$\x9e\xc7\xb4m\x80%\xeb4\xf0\xb7\xfa\x01\xbfd\"V\x12q\xc0\xb4,A\xbd\x1b\xc5`\x10\xefW[K\xbcV1\xd7\x90y,\x08\xd4x\xe9\xf9V\xafj<\xcc\xeb\x8ey78\x94V\xc0\x08(2!/`Hvm\xad^\x8cB\x82\xfa\xab\x97\xa9\x17\xc7|\x8d\x89\x9a:A3\x8a!\x8cW4e\x86g\xd2\xd436>\xe6L\xcf \x84M00\xd3w~\x98!`\xaa\x8a\x8d\x9a \x16y\xf7&A\xd59Nw\xfe\x06\xea[1\xbd\xd2V>\n\x1e(!\x16\x96/ZB\xa9\xbfc\xc3o\xe1E\xed\xffz\x95u\x1d\xf3\xb1Z <\x89\x03j7\x1f\xf5\xe41\n+i\xfe9\xe1\xb11\x9e\xc3\x04\xce\x14)4\xf4\x05f\x07\xbb\x80\x8b\x1d\x12Pf\\#k\xf5\xe2\x08\x18'&\xf1\\\xa8]\x03\x97\xd5Y\xf7~\xaa\xf7,\xc8\x14\xd9z\xcbB\xcd\x06Y\xc0\xf6\x16j#\x04\xf8(\xfc\xaa\xbf\xe3XQ<\\\xf9\xf0nF\xa0 z)V=\xb6#\x82\xaf\xc5bq$\xc6\x1b\x1a\xfaA\xfejP\xdb\xbe\x8c\xe9\xfa\xc7,\x15y\x9a\xe0L\x8bA\xfa]c1\xbc\xed)\xf7i\x94\xe7\xbe\xb5h\xb6A\xd9\x03Z\xda\xc2\x06i\x0b\x1b$`\x9dc\x83?E\xb9\xd0\x08eY\xe4#\xe34 %i\xb5@8u9M\x1a\x950Y\x9e8D-?\x82va\x99\xdf\x00 7\x98\x00;\xb5\x1b\xd8\xa9)\xb1L\x17\xbaa\xf7\x89\x929R\xfd\x92&\x10X]\xbf)n\x00\xcf\x96\xd4\x02%\xcd\xc7,`\x8a\xd6\x8d\x0b\xecI\xd5\xcd\x82\xd0\x8ac\xf8\xae:\x99S\xe1@K3\xf9\xe4\x05\xb16P\x1c\xb3\x84\xef\xbc\x1d\x8d\"\x16\xa0\x00\x84=\xbdw\xa4Asw\xd0\x8f;\xe8\x07\xca\x1f*7\xfc\x03_\xee\xe1\x0b\x18|\xbf\x8b\xe3\x90Fk%09d\x94\xac \xa3\xf4P8\x81U\xaa\x97\xb4\x15{Vl\xcf\x02-k\xdbM\x9a\x17\x07Y\x18\xa56\x13\xbe[r\xad?kQm\xcd\xa28\xb4Y\xd7,\xd1:\x0d+\xcb\xe7l\x1a\x1es>\x07\xbbG\xf5\xc05ykbA\x81\xc2\x1f-q\x17H{\xc4\xc4\xce\xf7n\"\xad\x17\x0b\xecV.\xb0\xfaT\xb5\x05-\xef\x83T\x8a]g\xea\xc50j\xf5\\\xe0\xba!\xbd\xb3_\xfc\xc8>\xc6{\xb55\x81U\x03\x8dFqNL\xa3,\x1f\x07#\xad\xf3\xf8\xd6\xa6\xf1\xf8\xd6\x8e!\n\xcc\x06w\n\xe23\xb7\xbd\xe0\xb6\x17\xb8\xe7\x05\x03\xc5\xfc\xb5\x00\x95\xde\x13\xfb\xef\x98\xde[\xf8Z\x8f\x07\xe8e\xb5\x80 \xb5L\xc2\xbeh\xe2\x03\xa2\x88V\xe2\xe9 \xffV\x96L\xb3\xa4\x9ar\x1f\x86Lp\x1f\xe4\xf1}N}\x0e\x8b\xcex\x83\xe3.\xf0\xa3\x9b\x99\x99\xe3\xbb0\x98i\xebzH\xb7\xe2\xba\xfa`G\x03\xaa\x9cA\x8e\xde\xb2`?I\x8a&\x8f\x81\xd3\n\x89T#7\x9b\xab\x9d\x17$\x1a\x8f/\x06\xa8\xe8\x8c\xb6=ru\x05\xa6\xa6\xf1\x86\x88\xb9\xb9}:\x87[\x98\xeaO\xe5f\xd9\x88\xb0\xb9J^6x\xdf2\xa6\x9b\x95\x83\x0d7\xe4^\xbb-\xae\xebp\x93h\xf5\x16^\xa6\xad\xb7\xaf\xbdc\xfb\x11a\x03\xf2\xc7\xd5\x8f\xcc\x13\x85\xf0\xf2;\x9a\xfe\xf16\xfa\x8e+\xd1A\xdcO<\x1a\xc0\xe0i\xcf\xd1\xba\xd7l\x1e-\x1d\x9eT\x8c\xc9N\xc3\x91\x0d\xd1\x80o\xc0\xbb\xdc\xcf\x8b\x9f\xe7\x8bt\xf1\xc3\xf2\x89\xd4\x7f\x17\xef\x17\xefO\xb7a\xbdG\x89*p\xf9O\x95\xec\xff\xf4\xd2\x99y\x0d\xd6jk*\xe8x\xbe\x18/n'\x8b\xec\xec\xec\xb7\x9f\x8e\x17\xd9\xd7_\x7f\xfd\xf5\xf2\xd4q\xf2\x08%\xd4\x12\xc7\x12\xcb\xe1'\x8e\\{\xc8\xd5\xbf\x9e\xe1\xff\x1b\xb9\x13\x03\x91\xa4\xd7\x12o\xd6H\xc1\x02\x89\xd7-\xa4\xe7\xaf\xe5]\x98$\x83\x99\x9c\xbf\xa1\xe3wK9\xa7\xe3w\xc3\xc9b\xbc\x1c\xf6\xafg\x90\xa6\xdefK\xf9\xc9`P5\xb7#\xda\xb3\x154\xb6\xb8\x1d\xe2\"\x93`\x829se\xde\xaa\xccs\xd5\xcd\xb3\xb3\xb1\xfas~\xa6\xfe\xfd\xe2l\x91M_|\xa6\xfe\xfd\xec\xec\xabEv\x8e\x9f\xcf\xcf\xce?W\xff>\xdf,\xb2\xa7ggg\xcb\xd3m\xbd\xca{rEz\x06 \x8b\xf8\xff\x03hf\x15.\x18%m\xed\xe3D\xc9\x0f\x8a\x86\x90\xeb\x03\x16\xe5\xa4\x803XC\xdd\xa9\xee{2\xeb^\x0b\x03\xc0\xda\xe1f\x13\x10\xd1x\xa6\x18,\x18\xe1\x15\xbe\x81M\xa1\xee\x86]\x13\xe4:\xef\xec\xac\x05\xd2&\xea\xb3r\xc3\xedoH\xff\x0b%\xb5M\xfc\x14\xfe\xf6Y\xa3\x85\xa1%Sj\xd1\x9f\xe1=z]\xc6\x98\xb0_\x10\x01\x11\xe7\x0d \x13\xc3\xe1\x80Ds\x81\xebU,\xeb\xcb\x95\x14\xdc\xf5\xd5{\xd3\xb4\xba\x11\xe4\x0d\x8f\xc3vG\x80\n\xda\xb7m\x07\xae\x85:{J\x00\xd9\xf8\x11[\x17\xe7\xec\xd6\x8f\xd6\xf1-\xb9\x06{\x002\xd3\xef\xe5&\x9d6\x83v\xe4o\x9d\x8d*\xc8\xbe\"W\x84\xf2m\x06\x86`&\x92\xfcK\x8c\x0d_\xf0B`\xb3\xcc\xcf\x96\xe4\xba\xfc:#o\x9b\x02\x9a\xde\x95\x0c`\x9b&\x95\xe4\x10\xdfV\xc7\xd2\xfc\xde\xbb\xbd5\xdcM\xf6\x8c\xa7\xaa\x8bW\xa47\x9d\x9cM\xd4\xae\xfan\xc2Y\x18\xef\xd9Z\xc7\xbd>\xf9\n\x9ck|5Y\xc7\x1e\x80\xad^?\x87~\xe5i\x93(^\xb3\xd7\xf7 \xb3\xb6\x9bw\x13?\xfd!K\x92\x98\x0b\xa8\xead:\"wu0\xd4(\xfe@\x8aU\xb9\xc7\xe2\xcb\x06\xbf~\xeaw\xd3\xf2\xed\x8b\x0eu\xff\x11\xf2\xfcN\xe7\xf9\x9a\xd3ms\xde\xef \xef\xef_\xbf\xfa\xf6\xb5>p\xfc\nO\xa5\xdd\xd9_C\xf6?\xd4,\xad\xcd\xef\x95\xfd\xfe5\xe8\x83\xdc\xb9\xbe\xc1\\4dk\x95\xf5\x15M\xdc\xf9~\xb4\xfc\x1a(\xd27\xe4\xbaRLM\xddW\x93W\xf1;H\xfcB\x08\xae\x12g\xe4\x1bw}\x7f\x80v_\xb3\xbb\x86\xde}\x0f\xdf\xbfD\x8b|w\x96\xdf\xe1\xd8\xfe\xf1\xd5wp[\xda\x9d\xe9[\xc8\xf4?\xbf\xfa\xf6\xf7B$\xdf\xb3\x9f2\x966T\xf7\xa7r\x0f\xbf\x85\x1e\x96\x0b\x92\x19\xf9\xd6]\xf8'h\x86Ej\xff\xf6\xa7\xef\x1b\xfa\xfcu\xb9\x85\x9f\xa0\x05[\x86\xcc\xc8O\xee\xb5\xe4\xe4\x17\xdf5-Z\x85\xf6\xef\x14\xf5\xfd\xff\xd9\xfb\xda\xae\xb8m%\xe0\xef\xf7W\x0c~zR\xfb\xe05\x90\xa4\xb7\xed\x06\xc2!\xb0ii\x03\xe4\x02i\xdaK\xf3p\xcc\xaev\xd7\xc1k\xed\xe3\x17^z\xcb\x7f\x7f\x8eF\x92-\xdb\x92\xec%iz?\\\x7fHXk$K\xa3\x91\xe6E\xa3\x99`\x9c\x92\x8a\x88\xdc\xea\x18\xdb\x10\xc4\xff\x8f@\x98D\xd8\x16S\xfe\x08\xe8mBRI\xc1(c1\xc27\x94\xdb.\xd5\xc8\x87u\xf0\x15\xeb\xa0\x1eK\xbf\xc0\x0e\xbc\n\xa2\xc5\x92\xf7\x1b\x95\x14=\xe4\x8f\x08\xc9G\xc9\xa8\xf0P\xb0u=\xf4{\x84\x9e\x91\\ ${u\x7f\x1e\xce\x18\xb5\xea\xe1\x7fRZ\xef\xb7\x80\x7f\x83\x1d8c=\xa7in^\x97?\xa3T\xdc\x9e\x82\xe6\xae\xf6Kc\xa7\xffE\xf4\x85m\x10\xeat\xf0\xfdr\xaf\xdc\x88\x8e\xe8Ds\xf7\x8d!\xfd\x07\x8c\x8c\xa6\xed\xd4W\xb0\x03\x86\x95\xffo\xd8\x81\x89\xbe\xe8W\xd8\x81\xb9\xbe\xe8_\x18wM[D\x08\xec\x80F\xa4cON0(\xa0\xb6,aez\xcf;@F\x05;\x10\xbb\xffy\xf0\xe1\xe2\x03\xa3\xceq\x98\xbbW\x188\xeb\xca\xcd\xf1\xdf\x04\xffM\xf1_\xeay\x06\xdeH\xed\xdf\x89\xf4\xdf\x89\xb0\xd5\x10\xff-\xf0\xdf\xcc\xf8\x85\xd0\xfe\x85\xc2^\x9c\x11Cb\"\xc0[\x81\x96\xc21\xb1\xb0\xb3\xa9\xadpi+\x9c\xd8\n\xe7\xb6\xc2\x1b[\xe1\xc2V8\xb3\x15\xde\xdb\n\xafl\x18\xba\xb4\x15\xde\x12\x8bB;R\xc8\xa2r\xa0\x91.A\xd2\xa3\xa0\x8a\xf7PZ\x93T\xef\"\xe1\xe4\xc3\xbdD>\x98d7\xed\x97J\xcf\x12\xe1(V\xb9Gq\xa7\x1aSkg\xb5\xd6\xb8a\xb99}uh\xf8\x98R\xc6*\xb1\x97\x85ZI\xfb)\xa5LVB\xfaw\xde\x9d\x8d.\xdf\x9e\x9e\xbc>|3\x92\x9fz\xf2\x04\xa6\x81\xfa\xde\x17\x9b\x14\x0f\x82'\xfa}\xb9wz\xb8\x87\x0d\xfab\x9b\xaa\x17\x1f\xec\x9d\xcbb\xdc\xa8\xe4\xfbw\xc7?\x1f\x9f\xbc?f\x8d\x9f\x9f\xec\x9f\xbc9C\xa5a\xcb\xe7;\xd648\xdb{=\xba|}rz\xf9\xd3\xbf\xde\x8dN\x7f\x93\xa5\xcbF\xe9\xf9\xe8\xe8\xed\x9b\xbd\xf3QY}\xc2\x01\xde\xffx\xf2ftyp\xb2\xff\xeeht|.\x0b\x17\xbc\xf0tt\xfe\xee\xf4\xf8\xf2\xe0\xe4H\x16\xcc\x9a\x05\x97\xafO\xf7~P\xab\xde\xb7 \x0e\x8f\xde\x9e\x9c\x96\xe57\xbc\xfc\xf5\xc9\xe9\xfe\xe8\xf2\xd5\xc9A\xd9\xe3\xab\x1aR\xce\xf6\x8e\x0f\xcf\x0f\xff\xcd\xbav\xe4\x8b\x8dI\x96\xfd<\x1a\xbd\xbd\xdc?9>\x1f\x1d\x9f\xfb\x9ciV\xc4\xf1\xee\xf4\xf0\xf2t\xf4\xc3\xe8\xd7\xb7\xac\xe1\x9c *0\x0c\x11\x91i\xd5f\xfc\x05\xdfa7=\x9cZ\x0c\xecI\xb4\xbc\x0dy%\xa7OT\xdb\xf8Z\xb8%Uh\x80\xd8M\x88\x0f\x8c\xd7\xc6.%>D<\xb3\x97\x84\xcbnf\nX^\x82\x85\xe5_Y\xab\x02\xd7Z2\xa5^\xd2]\x8f\xed\xb3Gj\x97\xd2\x12\xb2P\xebx\xb8\x9a\x0e\xf8\xa2(\x87\xbe\xb3\xc3\xa4\x88\x12\x11c7!\x1e\xd6b-U\xf0UmF\xad\x08Oy\xed\x88\x94\xbf`\xecRQ\x9b\x12\x15\xbe\xaa\xcd&\n\xc9S6\x13\xbbgD[\xe8!\x01\xf0\x8e\x95.Wr\xee\xb8\x85\x94\x1b\x96RB\xfe \xb8*\xab\xb7\xc2\x82\xca\xcb\xdc\xa9\xe7\xf3\xadu\xaa\xdd\xfd\x0c\xdc\xed\x84\xf46\x18\x94J\xbe)&\x82\xfa\x08\xbf\xeb\xa1\xc6Z%\x9f\x07K\xce\xb1<\xbd\xb7\xf4\x04dv\x08\x92\xa0<.:\xb6?\x8f\xe2\x89\xc9\x9c\x01h\xd1\x1b\x87\xf9x\x8ey8\xbaZ\xa7ENR&\x92c\xe8rs\x93\xab \xfb-\xe9\xba\x9e\xac>\xdd8XiF\xd8S\xfa\xf0\x0c!g\x1a\xd3\x9e\xfc\xcd\xb0\xc8$\xea\xce\x16\xa6)]\x0c\x1bv\xf6\xe6\xf3\xd0c\x06\xac\x94\x06\x9f86\xb3p\xa1>\x9f:\x14\xf3\xc4\x89\xae\x97\xd85\x9a\xd8\xf4\x9d<\xef\xbf&\xa5a\x96K2\xf61\xdbNf\xe4\x13M\xc1\xbd\xe1\x1b\x12\xca\x04\xdb|$/\xb77\xc4\x1f\x0e\xac#7\xb8\xee\x9a\xbfn\xeae\x0f\xfb\xc8k\xdb\x92\x85&\xd1\x98\xd1\x0ej\xb4\x03r\x0b\xef\xcc\xc3dO\x1a\xa4$[\xd2$C\x1b$\x1b\xacT\xb4\x1d\x1f\xd2\x80.I\xe2:?\x8c\xce\x1dq/e\xc86\xe7\x0d\xc6\x18_\x8c\xe7a\x9a\x91|\xa7\xc8\xa7\x83\xef|D\x89/\xd2\x9a\x06\x19I&.#@\x8fGE\xa9>\xf3\x08Jb\xd3\xb1\xef\xf5\xc0%\xfb\x92\xcb\x06}\xe0\xf1\x18\x83\xafS\xba8\xc33D\xb6\xcf8e\xdf\x9d\x9ek\xd3\xdc\xa7\xf2v\xfc\x93'\x90\x97\xc6 !\xa8\xe3\x95y\x9e^\x94uIg\xdap\x1d\xc7\xf3\x82+:\xb9\xf7L[x\xa2\x16L\xa34\x93\xcdc1\x13\xc4k\xdb3\xa3\xc7\xf7\xfc\xbc0G\xe9oW\\\xb1\x81\xa1\xb8\xbf\xe4]l\xb6\xefw\x81\xde\xc8]7\xd70 \xd8v\x8c\x00\xca-\xads\xe2~\xbd\x9d\xdd\xcc^n\xcf\x80\xa2\x8f\xf0\x0e\x06~k\x0f\xd3\xf5\x9c\x97\xdb\x1b\xb3\x97\xdb\x1b\x0c\xfck\x03#$\x01\x86\xdb:\x13.\x19.j\x91\x18\x82\xc9\xbd\xe62\x82\xbe\x9e\x9d\\\xdczW\x97/\xb7Qo{\xb9\x1d-f\x90\xa5\xe3\x1dg{\xa3\xf1\xe6\x0eh\x82^\xf2;aL\xd2\xdc\xdd\xf266\x9c\x97_{\x9e\xa6\x83\xc0\xd4T\xae7\xed\xf3N\xea\x11o'\xb6\x07W36\x86\xe7\xa3\xfe{\xa3 \xd4\x1f\xc5Ir\xc3\xde\xf9\xe7\x9fl\xd1\x12\x1f\x8e\x82\xb3\x1fO\xde_\x8e\xde\x8c\xb8\xac/_\xec\x9f\x1c\xd5_\x9c\x8f~=\xf7\xbb\xa9\xa1\xf1\xf9\xa3\xe0\xf5\xe1\x9b\xf3\xd1\xe9\xe5\xde\xfe\xfe\xe8\xed\xb9y\xf5\xd5s.\xd5\x8b\xb4\xaf\x0fWFE\xa9\xfd\xee4\xb4\xdfs\x8d\xf6{\x8e\xb1l D\xe8U6&t\n\xe70\x14\x07\x9d\xa6\x86\x88\xa6!\xc2\xd5h')\x16W$UM\xdd\xa4<\x02\xe2\xc7\xba-\x9f\x07\x0ep\x1c.\x0c)O\xf5\x88\xf9\xd8\x12\xb3\x1a\x973\x9b\xcf\xcf\x17\x04]+\xd8\xff\xc1\x94\xa6\xa3pN<\x95\x0c\x8eQ\xfdT\xdf\x9cb\xe8/\x8d\xcfJ9\x7f\x86 \xce\x03\xc6\x99\xf6\xab\xe3 \xed\x91H\xaer\x07\xcewJi/S\xfb\xf1\xb1\xb3\x89R&\xb3@f\x8a`\\\x05\x969\xe1\xb9\x1al\xf9\x7f\xa5\xf4Q\x91m\xddA\xa7{J\x8a%M\x1a\x13\xc2\xe7\xa3\x83\xfd\xf3\xf3\x8e!\x18\x8eH\xe4\x13\xc61\xbd%\x93\xf3p\x96\x0d!\xb1\xa9f>\xac%\xe4\"\xfd\x80\x01\xff\xd8\x1f]\x8b\x80\x8d\x80\xab\xb2k#\xach\xc2/ \xa2$#i\xbe7\xf9\x18\x8eI\x923&\xdeG\xc4\x01\\i\xed\xba\xae\xb37\xcdI:Bg:\x06\x90p\xc1\xe0\xb3\xc9\x94\xcd\xf97c\xadk\xff]\x9b\x12\x1eT\xb0%\xd3\xf0\xd7\xca1]\xf9C\x0f\xbb\xb6\xb1\xbd1\x0br\x92\xe5.Q\x97\x10\x97\x0eV\xd2\x9d*M=\x18\xc74\xe1\xaa\xa0m\x03\xaba\x99'9\xa9:P\x06\xe8c\x1d\xf4\xc1y\x12\xe7/\x1c\xcf\x93\xa6*\x99\xeaA\xdd\xf7\xb9\xb8X\xfeS\x1fO\xd9\xde\x0f>8\xc0$G\xf9\xe2+\xfe\xc2\xafW\xa8\x82J~\x01,\xa8\xdf\xdd\x81\x84\x0d\x93-\xe2\x90\xd1\xa3}[\xddZ\x85\x0b\x9c\xae\xc8\x05V\xd6\x07\xedpiO8\xda\x13.\xea \x17\xf6\x84+\x1e\xcd\xf2\xca]\xbe>;<\x82j\xc5a\xba\xb6>\x86\xf4v\xcc\x15\xdd\xc3\xda\xe4\x1b\xb5.\xa0\x89\x0e\xfa\x970.z\x82_\x13\xb2d#\xd2\xc7ki>\x82\x15T(\x18\x0253\x04\xd0\xebJ\xea\x83\x8ebl.\xc2\xd2\x11\xac@_\xd6n\xb4\xc8\xec\x92(k\x84\x17\xc5\x07/H\xc2\x05\xf1\x91\xf4\xf2\x00\x0f\x98\x82<\x8d\x16\xae\xe7\xf3\xa0\x85u\xbe\xeaC\x16H\xd4\xf2\x04P\xfc7\"\x8f'\xeb\xc8\x02\x89\x1e\x91J\xb3\xc9m\xf7\x94\x18\x96hJ\xe6_W\x1a\x92\x07d\xb8\x85Q\xe4o\x87G?8\xca\x8e&\x05\x9d0\x88&\x1e\xd29\xfb\x8b\x13\x14w^\xab\xbc]1\xa0]\x10.\x97\xf1=\x1e.\xbf%.?\x8e#\xfcG\xc2\xff\n\xcbL\x12\x91\x07/\xa1\xe0\xbcA\x95PD\xb5\x88\xa3\xc9\"c\xc8\xc7\x90\x12Q\xf7\xa0\x93\xca\xe1\xf1\xdbw\xe7\xbaa\xf2\xbb\x0e\n:\xf0f\x1d\xb7\xb6\x0bs\xf9\x05E b\xad`\x7fy\x1eF\xc5\x8d\x92B\xe3\xc7\xa0{\xd8\xc8\xb0\xb9D3\xec\xc4\x07\xc7Qp\xd5\xd9\xa2\x9d\xcb\x83\x18\xaeB(\x18)\xf8\nY6\xf6d\xad\x1c(\xa7\x03\xfe\x9b\x0d\xcfM!J`\x8f\xfd\x8d\x7f]\x13\xcf\xe8P\xd9|\xd8G\x05#d\x04\x87\xff\xa4\x9dl\xcf\xc3\xa3\xb6'O\xe0\xdf\\\n\xa0^\x8f\x99\x079\xfb8P\xac\xfe\xebc\xaa\xf7\x1b\x18\x88\xc1\xad\x95d\xc0\xa9`E\"\x00\xd1\xcc\x19V\xee_\xa7\x1chN\xf8\x18+\xa4\x12\x82\xb4\xd3w\xcc\xa0\xb6\x86\x97~\x15RPn\x0eT\x04\xc1\x1d{\xaa,0\xdc\x80\xc8m7kw\xe4\xc2\xa4 |\xe8\xa6b\xf5\xc1\xb0\xa2\\\xe6\xfe\xd7g\x18#\xa8\xe3L\xaby\xea\xd5@\xf7\xea\x82N\xd3T\xf3i\xaf\xf8\xd4\xf3\xd5\x93\x01\xba\xb4\xc8h\xea\xb3\x82\xb8\x0f\x9d\x83\xb1\x97\xb6$@\xad\x94alb\xa5\x03\xa5\x03U2\x04b?\xd7\x92wM\xfa\xc8Tl\x13:b\xed\x99\xa9\x07\xf9}[\xa6:\xc3\x80>\x07'G\x0e7\x87\xb0\xc1\xbe\xc0\xef\xa6AB\xeer.X\xbf\xf0Z\x0c\x98W\x14\xa1B\x92R\x18;&n\xc2\xb5\x9a\xa4\xd4\x8f\x14\x8d\xff\x049CU\xe6\xf9p\xcajX:\xde\x9a ]\x97\xf5\xb3`\xbcxr\x17d\xa2\xb1\xbe'|}g\xa3\x8f\xf4\xddG\xf2\xee#u\x87\x1d\x924f#\xe4Qqa\x07\x9c\xdf\xef\x9e\x8d\xd7\x06\x83\xdf\xef\x9e\x11\xc6\x88K\xf3\xceZ\xa5\xeb\xe3\xdetH,\xf7\x0b\xa0\xed\x0b\xab\xd4\x0fr\xcaO1<\xc8\xe7)\xbd\xc5\x83\x1d\xa68\x8e\xd2\x94\xa6\xae#\x8b!\xca \xa19\x84%\xf2M\xce\xb0\xe5\xf7Z\xbd\xc5AU_t\x19\x0b\xd7~t\x12\xa5\xf9}\xf5E\xde\x90\x0f\xe1\x15M1N\x8d\x81x\x8c(]\xab\x1d9t\"J\xb5\xbd\xde\xbb#\xecp\x98GcnHa\xc2\x8a\xce\xec\xd2\x84\xeb\xb6\xe6\xe8\xec\xb1\xa55\xac\xde\x9c\xdb%w\xb2\xf6\x04\x19\x18\x1a\xa8NtV\xdd\x1b\xc1t\xb3M>f\xcc\xcf\x91\x9a\xf7\x08\xba\x916/1\xd4M\xdf\x1e\xf0,\xbb\\HK\xf8\x19J} x\xf5#\x06\xc5a\x98\xed\x04k\x9b\x9eW\xb7w\xbf:9\xf8M\x88\xcb\x95\\\xbd\xcb\xf7J\x18B\xc2\xb4\x03\x92L\xf8\x99Xj:$\xb2\x0bdH_\\\\_\x9b\xe0\x7f\x03\x99-\xb8\x14N\xb6\x1d%\x7f\xb7}\xd5\xac\xc9\x91\xa3\x80+\xea\xf0^\xf3\x9b2\x06W \xfd\x14\xf0\x93\xe6\x13\xb6}\xa3\x95\x8b\x1f\xef\xe9{P\xdeC*8kJ\xbc\x17\xb8\xef\x15u\xae\xc2\x0dL\xb4\x86h\xca]x\xd8T\x1f\x13\x97rnB\x8d\xdc\xe4\x80T\x85\x9c\x9dP\x91\x8c\x98\x1a\xfa\xc60\xb3\xb0\xdae\x18\xc4\xacCG\xc1\x11\xb2-\xf8'~\x9e\x904<\xf0_\x80\x8a\xa6\x17\x1e\x845\x02\xe9\x81C\x90\xf4\x82A\xfb\xcd0b^\xef\xb9V\xc2\x80\x7f\xe3]:\xf3e\xaaK\x1f\xc2\x15&Z4\x88G\xb3\xea\xd9-#\xf2\xd2\x94\xd8\xaa\xf9\xc0\xd6dF\xf2}\x9aL\xa3Y/\x1b\xd8\x1e7\xd2r\xdfdMly\xd6\"\x06\x8aj\xb7ij\xb2rW\x95.\xcf\xfaf\xc3\xc9\xe4GJ\xaf\xfb\xf2\x7f\xfd\xd9\x03\"\x1c\x8f\xa3v\xf8\xa9\xd4\x9f\x7f\xe2^\x84'Sh\xc6\xcc=\xcdU\x8cj\xf3ju\xc1\xf4\xfd\xda\x99\x97^\x90n4\x9b\xad\xd4\xae\x1c\xc5\x85F\xa7Q\x1a\xde\x8b\xe3V\xdb\xc6\xa6\xd1\x0fW\xdbZ\xed\xe5\x832\x16\x9e\xce\xb6\x0c\x8b\x9c\x8a\xa2G\xc5W\x16\xfev\xfcpS\xdeSvs\x1f\x9c\xcbK\x92\x1d\xd1 \x0f\xd3S\xef\xfc\x0d7\xe0\xa9\xa9\x02\x94\xd5)O\x8cb7q\x9f7o\x15PQ\xf0\xb4Y\x10\x89\x82g\xcd\x82P\x14|\xd3,(D\xc1?\x9b\x05\x99(\xd8T%f\xf6b\x8b\xbd(\xdf\x94:F\xdc\x9ey\xf5\x06, *T\xe0\xe9\xb1.\xa8\xaf\x88\xaf\xd6\xf4\x0dlF\xd8\x05\x81\x9f\xb1\x95\xee\xca\x9e\xe5\xb6k\x9e\xee\xa6\x0f4\x10\x1f\xf6\xdc|\x1ee\xdc]\x95\x15\x84\xcd\x027\x0f./\xd1Twy\x89\xccb\xd3\x87T\x01\xf2;\xd3\x88P\xd0%\xbb>\xba\xaf\xab\xe0\xc5\x82\x93\xb4\xb4\x88\x99 \"[/\xaa\x8554]\xc3\xe4`lM\x0dM7<\x01\x0f\x0e3z6\xa7\xb7f\x92[Zmh\xe6\x01,;\x87\x18\xf7Et\x94Li\xba\xe01 ;\x88\xc2\xd2\xa1\xb1\xeds\x0bz\x15\xc5d\x08[OWm\x96\x8aqz\x96\x91N:q1\xed\x84\x98wB\xc4rg\xf8D\x0cXx\x08\xc9\xaes\xba|\x0c\x9a\xc2\x1eh\xfa\xaf\x1e@Q\x0e@\xa7\xb3\xd5\xde<|\xf0|\xe5*\xc2\x83[\xb5Y\nS\n\xa3\xcbe)\xec\xc0\x18\xdf\xfe\xbd\n\x8d\x0fy\xf0SF\x13\x14\x15\xc2Kn\xa1D&\xad\xbc\xbd\xa24&a\xd2|\x8d\xe1\x03\x9b/\xb9\xe9\xb1\xf1\xf65M\x17\x1a.-u\xa8{\xa6*\xb5T\"*KZ:Q$JZzW(\xab\xe8\xb4\xa8{\x9d\xde\x95\x89\x82\xd67bQ\xd0\xd2\xbb\xb8\x94\xd7\x14\x88\xa6\x08>n\xbc]\x8aF\xb6\x9a\x8dp\x01\xed\xdb\xc6\xdb\xb9\x04\xdfj\xf5\xf3F\x16\xb5\x86\xb6\x90%\x9b\xdf\xb4\x061\x13\x89\x8a\xb5\n\xe1\xfd\x97U\x08\x97\xe5\xba`=\x08\xa2\xecT\x84\x85\xf6\x95\xa20\xb9\xf7\x1b\x90\x96bN\xad\x86\xa6x\xa1\x0f7\xe5\x9b8\xcar\x15\x82\x91\xb5\xedw\x98\xdc\xd7i\xf5\xaa\xe5*t\xa3w\xf2\xa1\xc9\xfe\xf9\x86\xb6]\xcd:\xff\x1c:\x7fK\xb5\x97:\x7f\xd6,\xd0\xe9\xfc\xaaF\xfe\xa9:\x7f\xac\xb4U\xe9\xfcuK\x80Q\xe7/\xd3J\x1dD\x93#\x1eG\xb6\x05\xf9\xd7\xa9\xff\x93([\x86\xf9x~\xc8t\x860\xe6\xceP\xc6:\xdc\npc\x07\xe2^\xd2\x92\xc0\xf5\x1a\x17\x1aCS7\xe9\xe4\x9d:\x16\xff\xf7\xd9J\x90\x84\xbb\xd0\xc3\x97Z\x17~:\x90\x18\xd5\x90h\x91\xd8W\xb0\xcb\x14\x08;5\x1c\x0e\xe4AN\x7f\xe2\xd7\xaa9{g?]\xd3a\xbb\xf4\x8b\xb4|.F\x17\xbb\xfc~i\xe9\xfe\x18a\xb8\x9a\xbf\xe0\xa6\x80>*\xa9\x0f\xb4=\xe3\x06\xc6\xd3\x06\xac\x9di6c\x02\xfa\xb88x\xa8\xc5\xc2\xe3\xf9\xaa7_\xc0\x18\xb6\xa1x\x01\xe3\xf5u\x0f\xe2\x8b\xf1\x07\xb5\xe6\xc5X\x13kQ\xc6Y\xc4S\xe5\x1d\x03\xf3\xc3=\xae\x93\x01\x8e\xc38\x16\\\x90\xf8p\xc1\xea\x96\xc1$\xb8\x9e\x96\x96\xdbQ\xaf\xc3\"\xe9\xae\xaez\x8er\x92\x17\xfbh \xa2`\x92\x80G\xec\x0e\x18\xa0\x88\x81X\xbeC\xba4,<\xd1\x9a\xec\x15\xe3\xb2\xf2\x9d\x90\x90\xb4\xc7Sl\x1c\xa3\xa4X\xac0\x16\x81\xe7\xd6\x17\xf5\x1f@\x9bvK\x14a\xf4\xf4%\xe4\x89\xbf\x81/\xf6c?+\x08\x0f]\x8c\x96\xf6b\xb4\x9c\x87J\x99\xb8\x8b\x87N\x08\x8f\xf3d\x8c\\\x07\x82\x85\xa6\x01I\x8a\x85\xd92\xcd:G93\xdd\x15\x7f\xb8\x1e\x0c\xf1\xac\xb7\xe82U#Ou\x1d~\"c\xf3s\xea`;V\xbe\x02u\x8b\x1a\x95\x91Jw\xc1\x89\x12\xcc\x07\x84\xd7\xab;\xee%`\x90\xa8Zm\xda\xa3\x96\xb8\x9b\x80\x82ff\xe5]P\xd1\xaceF@\xb69Z,\xf3{q\xa5b\xcd\xc2\xa2\xa0\xc6\xcb\x90\xc8\xd5\xfd\xc0X\xcft\xbb\xd3\xb8\x86b\xdc\xfch\xba8\x08\xf3Pn\x80\x11\xba\xbb\xaf\xb9\xce\xeb\xb2 JD\x0c\xda\x8e\x83\xa3\xdcu\x0e1\x91\xa4]\x10\xa9\xed\xb7b\x8b5Q\x89\xd5\x82\xc6\xea\x0eEs\x96\x9e}\x12\x1d\xadNC\xad\xa9\xeb\x92\x90e~\xaf!\xc4\xfa dk\xd3\x84\xa0\x85|\xdf\x03Q\xcb0\xcbni:\x91\xb8\xe7R-CFU2\x94\xb9\x07\xffk\xf0\xd9\xbd\xc2\x16Q\xf2\x06[\x1b\xda\xfcK'\xe4\x8a\x16\xc9\x98\x9cG\x0bB\x8b|\x08\xcf\xbe\xb1@+\xa1\xe7\xacb\xe9_0\xdb\xad\xd7\x9fU\x02\x95\x16\xcf^\x02(1\xdc]\xef-dJ\xf3\xe8c\xad\x1e<\xae\x06Bc_\xcc\xd1\xf7\xf5\xc2\xdf\xaa\xf2R\x1ady\x98\x0b!\xc0(\x9c\x1d\xe6D'\x9cY\x1c\xae\xd2 #\xf9\x19k\xba\xba\xdao\x8d\n :hg\x91ri\x88Kj\x19\xc9\xb98f\xacd\xf2\xefW\xb0g\x184w\x98b\x03\xef'\x8fj\xc6k\xbd\x1f\xb0\xcax\xe5\xa5<\x11\xce\xe4/\x19o8\x994\x07\xbb\xcaX\xfb\x04\xc4\x10T\x06;p\xe9J\x8a\xeb\x12\x8a\x04\x06\x048w\xcaslau\x1e\x8d\x80\xd5U\x10\x0d\x1az`\xa1\xdfx\xff\x82\x01\xe2B7^\x9c\x15\x1f\xaefF\xdbH\xed\xe5_\xa3-\x95\xd6\xd7\xf7Q\x1c\x9f\x921\x89n\xf0\xb4,\xeb\xa1@\x19\xe7J\x92\xde\xda\x8e\xd0\xa2\x94]\x8f\x89\x7f\xfc\x9d\x9cN\x9bB\xa0\x92\xa3~*:\xf9\xd9\x17\xb2\xa0\xdau\xc4>\xba$?=\xec\xa7KR\x84\xedV\xed\"\x84\xebR'C\x84\xeaR'\x0b\x842\x99OC\xbc\x11,\xb4\xbeP\xd5\xfa\xec\x06\xd4\"\x88\x92)I\xb9\xf8\xe0FA\x94\x93E\xd6\xedhV?Q\xe9\xe1s\xf6\x8ag\xf7\xef\xf0\x1f\xcbP\xb7\xb5\x88W\xd0\xa6h\xb3&\xbc\xec\xd2v\xe7\xd2\xd3\xed\x13\xb5\xddy\xd7\xc6\xaeH\xd5\xe1\xeaR5T\x92\xb5R;\xecQKf\xdf\xed\xbe\xb7/\xd6\x9c\x85\x96\xa1\xad=\x1b\xa2\xbf\xd7\xa0kz1\xfd\x9b\xf5\xe2\x8ey\x14\x0eW\xdc\xedc\x8dGC\x99\x04\x98]\x91\xfd-\xfet=\xd8\x86\xad\xea^\xca$X\x84KE\x10\xf2\x81v\x11^$\x84\xe6\xb4n\x96\xcf:.\x96\xc9\xd9\xb75\x0f\xe2\x13K\xdc\x10xZ\xd7\x9e\x92\x8b|J \x06\xaf\xf1\xf0[/\xd6J\xb6p\xab\x80'\xeb\x82j\xe5\x9d\x8f\x8b\xe5\xc5\xe6\x07\xbe\xe3\xc1:P\xcb\xdd\xe4\xce{Y\x1dsi\x1f-2\xa2\x0e\xa2T}\xbf>f4\x19\xf0\xed|\xc0\xf4\xeb\x01\xdb.\xad\x0e\x81\xa6\xeeY\xdd\xcd\xa0\xfbd\x05Z\xa7+\x1dF*)]\xf7]\x81\xfd\x04{\xf9\x94$\xa3\xaaO|)\xd8)\xc7\xde\x1dy\x9e\x13Y\x96\xbf\x19\xc7V\xf3\x124\xa6\xf6*O\xe0*O\x06\xd9\x02\xb4\xb3<\xe0\xfaH\xc7\x86K\x93\xfd8\x1a_\xf7\x10^\xd4\xa7\xc4^\xa5\x87\xb9]\x88\xb3\x11\x9d\x03\x03pL\x9e\xa8^\x90S~\xf4\xf3X\xd4\xad\x84\xb6p2\x01\x07\xd6\xab\xcd\xab\xc1\xf8\xb8\x1b\xa1\xf1[%B\x91#\x08\xbdM?06\xee\xbd\xc9\x04\xd8g\xb5\xc3\xef\xb4\xb4\xbc-R\xb2\x8a\xb5\xa5r;\xebeo\xf9\xdf\x81\xdf\xca\x07~\xabj\xa9\xff;(\xd3?\x7f\xd1AY\x97\xceB{\x1d\xa7\xd5\x0f\xca\x0c\xa7\x0bx\xf2%\xf4\x9b\xb4\x9f~\x13\xf69\xcc\xea\x10#\xc2\x9e\x1ba\xba\xbaX/Dz\xa5f\xda\xcfX.\x82\x08$\xb6\xdbFuA\x9d\xbb\xc6MS\xba\xf8\xe9\xccs)jYx\xff\xd3\xc9S\x9e`e\x1a\xc6\x999\xe1\x0b\xe8\xa5\xf9\xb2\x1d\xdb\x81\xd7\xaaB}\xb7I\xe1\xd3L\xe4\xa5\x07\xf1\xa3\xf7\xec\xde{\xb2\\\xa1\x9fl\x1f\xb7X\xc6\xd9\xc2\xc9H\x8esrN\xcf\xc2\xc52\xeee#\xaf\xbc\xbb\\\xf6\xe5\x19\xdb\x1cxm\x8e'\xcf%5w \xfd\xdd`\xa2\xb5\xcb\x1bEF\xd2\xf2\x990\xb4:\x0f\x93ILNVi\xfb\xa6\xccw\xdc\xed\xbb\xa1\x0c^\xe7\x03\xe8\x1b\xbd\x85\xe132\x80\xcf\xe9y\xb9V1\x81\x86\x9dO\x9d\xc3\xf2e\x9bdtw\xb4\xeb8\xf8B\x86\xbc\xffbN\x96\xbb\xce9\xb9\xcb\xf7R\x12>\x92\x9b\xd4\x0c\x0c& \xda\x93\xe50R\x9b+\x06\x04c\x1d\xf6\x08\x9e\xc4\xd8M\x16\xfda\x0d\xcfkF\xbddX\xac\x05d\xc3\x1fi\x94\xb8\x8c}x\xfd8\x97EGm\xb0\x89\xfa\x06\xa0\xad\xf5(w\xbe.\x11\x1f\x81\x1fu\xe3E\x1e\x86\xe2E\x87\x7fz\xc1\x818\x91F\xa7\x89\n,\xad\x17\xf0\x10\x92\xb58\x02\x8f\xef\xc2g\xbdt\xd3\xec\xa6\xe9n\x8c\xf8h\x98e\xd1,a\x8c\xcc.\xa6\xd7\x92>o\xf1\xfc\xceMuE\xe4y\xb6\xef\xf3\x95\xa6bJ\x03]~\n\x03'&=\xf3\xc2c(8\xb4Ta\xac\xe9\x1dH.R]\xa0\x89\xd6\x1b\xc9\x90\xeb$X\xa7x\xda\xc5\x9aK\xd1\x83XO\x9ck\x19\xfe7_@\x02\xdbj\xa2\x7f3\xf6@\x99\xb9\xfc\"1`\x0e\x90P\x99tG\xd2\xf0\n\x05\x8a\xdaO\x91|,e\n\xdb4\x9a\x15\x12hm\xb3L\xda\xc7P\xce\xe3\\\xa6\xc1m\x1a\xe5%D\x99}\xaaI\xa7\x845xM\xee\x19\xfe\xf5\x0b\xbe\xff$\xa8\xd6X>\xa1V\x85\x91\x07\x01u\x15\xd2\xe0\x99\xc3R\xf1\x9eG\x07l{\x157\xb6\x9b\xe6\xc5r\xa6\xd8\x14<\x02F\xbd \x14\x05[\x9b\xdf|\xab\x0f\x86Q|\x91\xbbOn{\x99\xf7\x92\x8a\xb5+{\xad\x9f\xb3\x04\x8f\xf5T\x8b\x80\x95\x9b\xc2\xa1\xed\x87IBs`\xeb\x12B\xce\xfb \xccj\xa1\xd8\xdas\xd2!\x90'}\xbd:\xb0\xa3D\xed\xd9)\x99\x92\x94$\xe32D\xdc<\xca`\x1ef\xc9\xd79\\\x11\x92@\xc4\xaf\xb1D\x19\x99\xc0\x00\xb2bIR\xd7\xabA\xb0\xa1\x90I\x87\xf8\xb0\x86\xc7\x0dJB\xc9Z\x10\x1fm8\xbb\\P\x81\x86F\x0d\xfa\x86X\x843\xc2\x98\x1f'\xfa\x93i\xcb-\xc7\xa2y$\xab9d\x93`I\xd2,\xcarSX\x05\xc9\x14\x92\xee\xd3\xbdd\xa5\xe3kU\x1f\xd0o,=s\xaf\xb0\x1e\xd2~=dO\xe9\x06\xf7\x92U\xe1\x82x\xe9\xcd\x86\xe1\xaa\x12\x9aGS\xbc\xe68,\xb7oxYU|\xf2\xa4\x02J\xf1\x88\xa8G\xbe\x066\xd8!\x08p1\xf8\xaeZP\xe1\xcb\x92\x91\x0e\xf4\xeayUd29\xb7\x89\x12\x13-%?\x93\xfb\x03zk7\xa0\xca\xa7\"\x0f\xa9C\x8a\xda\xfa pFI\xceS\xc20\xf1\xfe\x9a\xdcsdNi:&\xc7\x12\xed\xbe\xc85e0\x10\xb2.\xbe\x8a\x8b\xf4\x91\xfdcUM\xf4\xbbb?\xb8\x86\x80\xf0\x11\xe9\xd7\x1f\x1eQs\x1b6\xbd\x92\x86\xba\x84\x0f\xf9\xc8\x05^\xc4\x06/F\x83V-\x03\xfc\x8a\x84=\xb5\x0f'\xc1\x84\xf2\xf1Z*\xdb\x97^.L)\x8a\xed\xa5\x1b\x0d\xf2I\x82(\x13\xbc\x8e\xdf\xd1a\x02L\xd5)\xab\x9f\x19\xdb\x07\xcd\xcb\\\x87\xddGtg\xd3\xd7\xcf\xbf|\x90\x0e\xa6q\x91\xcd\xfbN#TS\x99\xf3\x9a\xb6\xb4\x13Hf\x8c!\xc7\xab\xb4\xafEk.\x1a\xb2}NOXz\xea\x97\x93\xd4\xa7cI\xc3\xc4$\xce\x18D|Z\xe5r\xad\xfeS\xca\xba\xec5\x9f\x98_\xa0\x86\x03\x1b\xc6J\x0c\xe3^$\x91d&--K\xec8\x81\x04\x0d\xb31\x7f!Wx\x14E\x9e\xa4\xac\x08\x0c\xa2X\xfe\xfeR\x0c\xe8\xf1i3{\x07\xdf\xc1\xa9\xee\xe5\"(\xdd\xe6\x98<\xd6f\x8c\xd8\x8en_\xa9Aj\xcd\x87\x9d\"\xa81r1\xb2\n\xf4=A\x07?\x83\xe8|\xc6\x84O w\xcb\x94d\x19\x93\xda\x17E\x96\x03\x89\xf29I\xe1\x8a\xf0\x06h\xaa\xc8\xd2>\x06\x1dv`\xbd\xfc\x90\x862I\xa5\"U\xba?\xe7N\xae\xc8\xdb\xa8\xe8Pz\xd4\x8ei\x92\xe5i1\xcei\xaaS[\xe4#g\xc0L\xef\x95F\xda\x8e8\xa0>R\xff\xb4\xbbA\xa9\xba\xec\xd0\x94\x8cICK\x92{\xbb\x02\x1bYM\xa2\x86]\xd0\xbe\x17\xf3>DUN\x8a\xe5l:\xeb\xa4\xc3t\xcf\xf2T\xa0a\xbd\xf2\x81\xf630\xbf\x8f\xe2\xf8S-\xcch\x95\xab\x8b!\xaeb`n\xdc\xbf\xe8\xb2\x97X\xac\xc9\x7f\x89K\xac\xdcH;\xb7\xd0D\\\xc6\xab\x8dF\xbf}\xe2\xe8k\x8b\xff\xcf?\xcb\x8c\x85\xb84+g[\xc5\x01\xb7Q\xd2[\x8f1\xddi\xf6!\xa9<}\xb5\x93Q~\xac1}I\xb7\x01\xb5\xe74\xbdK\x16\x9f\x83\xbc\xb8t#{k\x92Xzw\xf1o8\x97\x10\xb9\xbe\xec\xf4\xe5*\x91\x15J\x8a\x04R\xb1k\xbfM\x82\xec\x95\"\x9b\xbc\xbaG\xf5\xc6\xe68\xc3\xa3-TUNP\x1f\xb1\x9c\xef\x8a\x90\x0fB\xab2\x03\x16\x02\xd0\xde\\\x86PQ\xb2,\xf2S25\xc3\xc5}\xcd1\xf2\x916\x9c\xff\xf4I\x1aUZ\x7f\x89\x07y\x19\x96<\xf5\x98\xb8\xb3\xa9XA\xec&aR\x9a\x84\x13n\x12\xc6\xac\x85\xf6\xcfK\x1d\xca\x08\xf4\x80~/\x8e\xa0\x18\xc7\x07G\x12\x85S\x1aQ}pJ\xa2\xc0d\xd1u\xa2\xc0\x83\xfb\x16Q4\xde\xf2y\xe7\xed\x8b\xb9\xe5?\xe4k9G\xd6\xd3\xffqG\x0cKt\xf3\x86]\xcb\xdc\x95_/\x1d\x01\xc4o\xfd\xbe\x06C\x08\xfb\xb6g\x88\x17\x0eC#\x910\xba\x98v\x0c\x89\x95\xd3\x8e.0\x1c\x96\xe3a?\x8c=)z\xb5T\xadB\x99\xba\xb4(r\xaeueb\xe8\xba\"\xf3=\xd8\xd6\xdd\xd7\xad\xcd\x06D{\x93h\x8b\xc2\xad-\xa3\x0d\"w\n\xd9\xc1\n\x97\xf8W\xc7\x99\xa5\xe5\xae\xa0\xdc\xd3\x9d\xd1\xdd\x92\x8cs2QM\xfcmBIa\x07\x8e\xc3\xe3v\x01cz\xce\x85\xf0\xf09\xbb_\\\xd1\xf8\x83\xa6~\x04;\xb0\xf1\x7f\x7f\xcf\xd6\xff\xfc=[\xffjc\xd6\x86\x08\x11\xe2b\xb0\xfea\xf3\xeebs\xf0}8\x98~X\xffjC\xe3\xe6T \xe4\xe6\xd5\xc5\xe6\x96\x01\"\xe3\x10\xf4bs\xf0\xad\x01\x841A\xcc\xad\x7f\xa8\x93\x1d\xd8\xde\xaa\xa4f\xa9\xe9\x81B\xe7:\x11NM;R'\xc3\xd7\xed\xa6\xa6\xfa\xa62\x12OY\x0d\xf5\x7f}\x9b\xac\xa4\xdd,\xdb\x80\xc6x\xf6\xcb\xfey-\xe7\xd9\x91\xd6\xa7y\x949\x9e.\xec\xf2\xa4R\"+\x16,\xd3\xe4\xb4\xc1\xe7\xb0\x03Ga>\x0f\x16\xe1\x9dF\xac+K#\x8d\xf8\xd2\xef\xb6'\xef\xf028`\xdbNBou\xf2\xa7r^\x07\xea\xb9\xd8L\xaf\x7fH\xddC&\xba1\x1e\xa8\xac\xad\xf1\xac\x18\xb5 \xd2d\xddiz\xa7\xea{\xa3\x89\x9e\x08\xd2\xac\xa0\xc9\x97nK\xd3\xc2\xeat\xebX\xa2\xbe\x93\xe1\xba\xab5\xde\xed\x16\xd0hD\xa0BC\xaa\x066\xc0Z}\xf2\x04&B`\xf3@{i\xe5AM\x13\xa4\xb1\xcdc.\x15KF\xa9\x9b2\xa8PmBdF)\xdc\xbdQ\xe5/\xffF'U\x93\x17\x1a\xec\xc0\x8cm\x86\xbb\x90\xc3:\x8f)\xd6u\xc6\x0c\xcd\x0cJk\x9a)\xac\x12\xe6\x13\x18\xc2\xba\xe6\xf3D\xb8\xdc\xf2\x84~\x11\xe6\xf33\x1f\x97\x16\"\x1d\xb4\xe5,\x90\xcdp&\xc1`\x17bW\xe4!u\x9f\xa2\x86\xba\x0bOa\x08\xdf1l\x84\nX\x8a\xfdk\xd0\xb3\xfaK\xf5\x8ci0\x17\xed\xa1>\x1e\xd1\xf9\x10a6\x99\xc2\x87\x0c\x85\x13\xf4w\xd7\x0b\x1cSn\xb2\xd3\x96--e\x13\xb4\xd9\xebIH\x9fpLo\xa8K\xbc\xc6v\x02\xea\"\xbe\xea\xf6w\xb4\\_b|2\xb2Jv\x8ca*\xe9\xdbx\xa0\x17_\xa8x\xdcr\x9e26\xae\xa1Js\xa75\x91;\xe5#;M`\x00\xb1\xb5gJ\xc0\xbd\x98\x11W\xc2T\xb6\x9c\xff\xb5\xcdu\xb7%zB\xc0\x00\xc6\xac\xac\xad\x04\xd8\xfax\xdb\xa9\xf4/l\xe1\xff/k\xf9\xc6\x8c9\xca\x18\xd5f$\x17\x82\x99{\xeb\xf7\xdc\x05K_V\x18\x80\x8b\xb8\xea\xbe\x9c\xba\x84]\xb8q\x13\x1fBYi\xec\xa1\x05\xdf\xb8a\xae6\xab\xa3\xce\x9d?S\x08i\x02\x98\x1dk\x17\xae\xf89\x82\xdb\xa4\xb4b\xb5\xaf\xdf\xf5\x99/\xf3JHx\x1c\x06\xcb\x8cR\xd5\xa5\x8c\xe7\xe4\xe2.\x10L63EJQ\x1bP\x086\xf3\xdaV\xfe.\xb3\x86\xa80\xe6_k\x13N\xee\xf90\xad\xf0\xa9W\x14\x01g\xd6F,\xe2^\xb42c\xed\xcf\\\xb9\xa6\x00\xfb=\x17l\x86b\x8c\xaeq\xcf\xd7\xf4\xdc\xe8\xc5\x95c\xe4\xe8\x1ccbn\xfa0s\x85\x15\x06\xf7\xec\xb54\x88 \xe6f\xe0Y\xb0]\xb6[;\x8b\xf0\xee}\x18\xe5\xdc\xfd\x8cq\x98\xb9{\xef\xa6\x81x-[B\xc3{\xe8\xe3&\xee\xe4i\x18\xc5\xc8K\xd1em\x17\x9b\x96/a\x08\x13L\xe0\xd7\xffhT\xb1\x00#\"0)\x98\xc4B&o_\xf1\xebG\xb1X\x15\xd5\xd2ic\x87}\xbd\xf7\xb9\xafn2v\xa1\x80!\x8c\xdc\x85kH\xf0U{\xa9\xb8\x87IW \x1f\x12\xf7\xd9\x96\xa8\xdc\xa1\xe5I\xe7\xc2z\xf7\x9c`#\x8c\xe3\xe0c\xe6\x0c\xe1\xf9\xf3\xe7~\xab\xb0\xc8\xe7\x1b!6\x9aq\xa8\xa7\xcf\x9e\xea\xa1\xd0\x88\xc7a\x9e}\xffL\x0f\x93\x92I1&i&\xc1\x0c\x1f\xccd\xe2! \xf7\x8d\x01nI\xc6\x83\xdb4\\\x0ej]|\xf6\xfd?[\xf0\xfc\x10)k\x8e\xa5\xdd\x01 8'\xf1\xb2\xec\xe9\xd3g\xed\x01I\xc0\xda\xb8\xbf7\x82\xd5\x87\xfe|\xb3\x8dE \xd9\x18\xfd\xf3\xcd-3(C@mH\xcf\x9b&\x06'\xd8\x98\x10\xb2\x1c\xc4Qr\x1d%\xb3\xfa\xb8\x9eo\xb61[\x83V\x06\xf7|\xb3\x8d\x83\x1al\x1c\xde\xd3\"\x97\xc0m\xcc\xd6\x80\xcb|K\x83<\x9c\xe1\x1c.I\x1a|\xcc\xee\xb0\xf2\xb7}+7+\xb6'~Bo\x93\x98\x86\x93A\x91\xc6r\x96\xbekA\x914\xad\x93\xc6\xd6\xd3v\x1f\x18\x10\xdeG\x18\xe4i\x98dS\x9a.H\x9am\xcc)\xbd\x16-?mO\x95\xa1R\xedGB\xf3\x01\x9d\x0eP\xc9\x16\x0d\xb5\xc9\xa3OC\xcb0\x0d\x17$'\xe9\x80&\x84Nec\xed\x89\xeb\xd3\x18\xd3d\x96\x03\xe9\x0e*\xdbj\xcf+kK]\x04[\xedE\xc0@\x1ak\xffi\x9bN\x19Ts\xe9?m\x13(\x8f\x9dP'\xcd\xf6\x8c\n(\xba\xccxV* \xd9\xee\x1c\xa7\xdb\xc6\xce\xa0YF\x02N\x1d\xea\xd36\xbd \xa8\xe6h\xdb\xd4$\x00[\x03n\x0f%\xa6\x8dm\xe6\xbb6Rh\x98=knn\xed\xceq\xa8\"\x9f\x0f\xc8]N\x92\x8cAo\xe0\x06\xda\xdct44\x83\x95\xcb\xe3\xc5l\x83\xf1\xa0\xabp|\x9d\xc9\xd5\xa7\xc1F\xb3\xce<\xcf\x97\x03\xd6\x01YG\xc3M\x9au\xd4\x89\xd6\x90C\x13\xbc\xda\x1c\xd8vQ\xf6\xad\x8dVs\xc5\x8c\xa7X+\xfb\xd8\x8d\x8b\x94\xfc\xbf\x82d\xf9\xe0\x8aN\xee\x07d\x12\xe5\xb4\xdc\x93\x9e\xb5\xf7\x04[\xed\xb2\xc3m\x8aiV\x13\xdd\xac\xb2\x1d\x95\x9fl\x13\xaf\xa1n\xf9\xb5\xf6\xb2\xc0\x1a5n\xf1\xcc\x80\xfc\xda\x04\x19F\xdb`\x7f\xcf\x0d(m\x92\xe1s\x03y \xe3Sh\xb8E\xbe\xedmJ[OO\xfb\x86\x8f\"\xb0\x82C\\HQN\x16%\xde\x0d\x0b\xa0YQE\x98F\x04\xd1\xd6Q\xa38p\x1b\x93D\x91\x01\xe3\xcd\x06\x16az\xcd\x98\xa1\xfc\xaea2[\xd5\xe8\x84\xc4r\x80\xcf\x0d\x84\xd5\xacD\x938J\xc8\x00\xaf\xb6\x859M\x07W\xe1dF\xe4\x97\x0d\xb4\xd6l\xa4df\xd5B4\xac\x89f\xcd\x1b\x9e\x02r\x90\xe5\xe1bYV\xd6\xec\x00 \xd6\x8aINjs\xb2\xd5\x1ef\x86\xb71\xb3\x8d\xa9\xc0\xdf\xd6\xf7m\"\x910\xb5\xad\xba=\xbd\x8c\x06\x9b\xdcF\xd3\x18\x83R[\xd2\xec\x94\x08\xd3\xe04\x9a\xcd\n\xc1\x1aD\xfeT#U\"\x9cF\x9c~\xde&k\x99\xd5\xeecc\xb4m\xc8\"\x8f\xe2\xba\x8c\xdc\x9e\xc4\x9b\x88\xdc\xd6`\x9e\x1b`RJ\xf3A\x94|$\xe3\xbc\xec\xdcw%\xa46]\x0d5^\xd8I\xdc\xa8fly\xd0\xd4\x8e\xda\xb5\xa5\xad9\xbd \x8d[Z\xfc\x06M\x0e\xeb\xb0U\xbb8S\xbf43\x8d\x92 ,\xf8\x0d\xa1\xaf\x1dX\x07\x02\xeb\xe0|\x1d4\x0d\xbdR\xd7V\xfa'\xff\xa2\xc15\xb9\xb7\xe6O\x16\x95\xc5\x11\x0e\x83v\x95\xcb[\x0f>\xd0 %\x19\x8do\x08St\xeb\x17\x1d)+\x8d\x98\n\xbe\xb5\xf9\x0d\xc7\xee\xc3\x07\xef\x1f\x0f\xde\x8b\x7fll\xfc\x1f\xc8h\x91\x8e\xc9Q\xb8\\F\xc9\xec\xdd\xe9\x9b\x9d*\xc3\xe1\xe0\xaaH&1[\xe7\xc1\"\\\xfe\xff\x00\x00\x00\xff\xffPK\x07\x08-\xe3\xb5\x97=9\x05\x00\xf7\x0c\x1b\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\x00 \x00swagger/swagger-ui-standalone-preset.jsUT\x05\x00\x01\x80Cm8\xec\xbdys\xdc6\x9a0\xfe\xff|\x8aG|w\x152M\xd1\xdd\xad\xc3:,k\x1d\xc7\x9e\xf5\xbb\xf1Q\x963\xf3\x9b\xb7\xa3UQl\xb4\x9a1\x9b\xec\xe1!Y\x13i?\xfb\xaf\xf0\x00 \x01\x10 \xd9\xb2\xb33\xbb5\xacT\xac\x06A\xdcx\xeec\x0b\x16U\x1a\x95q\x96\xba\xa5\x0f\xc4\x83\xdf\xfe\x00\x00\xe0dW\xbf\x92\xa8t\xe0\xf4\x14\xca\xbb5\xc9\x16@\xbe\xac\xb3\xbc,`{\xdb\xf4v\x95\xcd\xab\x84\xc0\x19\xff#\x10\xb5O\x81\xb8\x1e\x1c\x83#\xba\x91?\x9a\x93E\x9c\x12\xda\"\xfb+\x08Ws8\xe3?\xdc\xd9\x05\x0e\xe8\xb8k0g\xe2\xaf\xe0\xfc6\xbc\xbe&\xf9\xcfo\xce\xcb0\x9d\x87I\x96\x92\x0f9)HY\x0f\xa1\xec\xab\xf3\x87\x07\xb7\\\xc6\x85\xdf,\x89X\x8e\x9c\x94U\x9eJK%^\xd0\xe7&\xcc\x81\xc0)\xfc\xf6p\xf2\x87\xbaPT\x85\xd4\xcd\xe5\xca\xf4\x89\x17\xe0\x92Y~\xe1\x89v\xe9\x0f\xb1b'JU\xdavLG7\xcb/h\x17\xcaKl\xeb\x18r\xbfU\x9a\x1c\xc3\xd6\xa4]\xcc\xbb8\x86\xdf\x1e\x94w\x0fj\xa7|T%\x1dU\x14&\x89\x1b\x8b\xc1\xf9\x10\xfb \xfdJ=\xfa3\x81S\xd8\x1aK/\xea\xd6\x9anx\x9bi\xb0\x82S(}H\x83\x88N\x8b\xfe1\x87S\xf5\x10\xfa\xd0Z\xb24\xc8\xf8\xf9\xbc\xbf\x87\xf7x\x1c\x02vL>\xe4\xd9\x9a\xe4\xe5\x1d\xff\xb2\xbdBQ\x96.\xe2\xeb*\x0f\xaf\x12bY\x96\xb4Z\x11\xf1~\xdc~\x7fM\xcac\xc8\xd5\x15\xf3\x9a9\xd29\xa4\xca\x1c\xf4\xd1\x8b\x13R\xd2\xa3^\x06\x97\x97\xa4x+\xeeK\xeb\xac\xc9\x8f\xd8 :\xd7\xb0JJu\x0cp<\xec\xeb\x01{\x9d\x06s\x97\xf8\xe0\x84\x0e]d\x1f\x88:\xbdL\xdf\"\xbd;\xde\x0c\xdf\x99u\x9e\x95\x19\xbd\xa9\xc12,\xde\xdf\xa6b\x8f\xd8i\xc2\xef\xd5\xf6\xd7p\n\xce\x93y\\\x94\x8e\x0f\xa9\x9b\x06\x14pL\xc7\x07\xac\xda\x83;\xd3\xceG*\xf7\xefT\x05\x81\xa2\xcc\xe3\xa8tN\x94[\x99\xc3)\xa4\xee\xfe\xd4S\xf7\x94^\xa8\x99\xf39N\xe7\x8e\x0fNN\x8a,\xb9!\xf4\xcf(K\x8b2\xaf\":\n'N\x8b2L#\xf2~A\x7f\xads2\x8f\xa3\xb0$\xec\x935\x05\x1b)\xd6\xe3[s^\xde%\xf8\xb2\xa0\x7f\xbcH\xe2\xb0 \x85s\xa1\xf6\x9ca\xcfE\x14&a\x8eu\xc9_+\x92F\xf8\xdd*\\\xaf\xe3\xf4\xda\xb9h\xe6PJ`\xb4s\xf9\xe9dS\x1f\xaa\x936\x9c\xa1\xb7\x8c^\x9a\xdf\x1e|\xb1=\x9f\xc9]\xe1\x12/Xd\xf9\xab0Z\xbau\xd3\xadvE+;\x138==\x858\x88\xd39\xf9\xf2~\xe1\x12\xcf\x83r\x99g\xb7\x90\x92[\xc8\xdd\xef~N?\xa7\xd9m\n\xd9\x1a\xa1\x9e\xf3\x1d\x8c\x80\xc0\x08\xbes .`EJ\x88S\x06\xd8c\xac\x90-X\x9d\x92\xd5\xf9\xcb\x8b\xb7?!l\x0f\xbe\xf3\xb4\x8b\xe6\x03\x05\xcaA\x19^3\xc8\x81\xbf\xe8\xe6\xd1\x99\xb1?\xee\xef!\xad\x92\x84\xbf\xe3\x1b\x8a\xaf\xc5\xdf\xf7\xf7\x83\xae\xca\xd6X\xed\x9c\xb7X\x9f\x0bl\xb3\xf9%\xb7\xda\xba\xf4`\xbd\x81\xbc\xd5\xe6\x80a\xb3\xd2Ou>\xf5\xd1\xc3j\xcd/}\xd6\xfcL\xf2y\x8b_j-\xf9\xb0bE\xa5@\xad+\x1fd8\x057\xc5\x0f\x94\xd2\xfa\x83\n\xf1\x9f\x8f\xbf`\xeb\xf4\x14R\n\xea\xe4\xf3\x96\x1a\xce\x9bq\xcd\xd2Yy1\xf0h\xd2\xa7\x9a\x9d\x97y\x9c^\xbb\xc4\xa3\x18\xb2lUzh\x1f\xa8\xca\xf3\x81\x1f\xe9\xac>\xd2\xf5\xb9\xb2\x1dm\xd0F%\x1e:\xba\xc8\x87\x85\x0f\x89\x0fk\x1f\x96\x8c\x06\x81\"x\xdd\xa6r\xe83\xaf+\xfc\xd1\\\xe1\xa6\xaepn\xaepWW\xf8`\xaep]W\xf8\xc1\\\x81\x12\x88\x94\x0b\xc8\xe1\x18n\xe8\xbf3\"N\x17A\x1a\xf8\x81\x12\xf3\xae(\xfe\xed\xc1k\xe8\x0ds\x8b\x97\xbc\xc5\x98\x9eB\xd1Z\\\xb7f\xfe\xe8\nN\xe1\xb2i\x19\xbf\x91\x7f\xe3\xa7'\xadO\xe9\xf5w#Dvx\x98\x10hz\xb8?\x94Lv]\n\xec\xb7\x96\xf4\xdd\x8a\xfe\xef&\x8b\xe70F\x90\xb9\x9aE\x17\x1e\xe5\xa0\xe0\x18Ro\x16]\xf8@\xe9\xa2kZm\x01g\x10\xba R\xc6\xc7p\x87L\x98\xe9\x0e'X\xef5\x7f\x83\xf4\x96\x0f \xfd&\xf1Y\x87\x95\xbb\xf2\xe9\xa1\xa0P\x1e\xb7\xe1g\xcf\x87\xcbYt\x01[\xa7\x90\xe0\xcdu/\xb1\xc6\xda\xf3YOW\xf2[\x17\x7f\x9dB\xa2\x81\xd5f)\xf2 bw9\xf6\xe9I\x83S\x98\xd0?\xfeHI:\xfa\xc79\x9c\xc2\x1e\xfd\xe3\x03\x9c\xc2!\xfd\xe3\x07Z\xe7\x80\xfe\xf5g8\x85]\xac\xf53\x9c\xc2\x01V\xfbH\xdfN\x0f}\xe5\xc6\x17\x9b\xdd\xce]\xe3\xed\xdc\xd3\x8b\xf9\xed\xd4\xef\x1b\xbd\x9dO\x9c'\xd7\xed\xcb\xa9\xf7n`]@b\xe38\xaa\xca\xdc\xd2\xb3\x1c;\xda\xa8\xf3\x8c\x02H\xd2>\\\x1c\xde:N\x83b\xdd\x10F\xa7\xe0\x00\xfd\"\xa5\x18\xe7\x14\x91\x0f\xef(\xf7(%\x90\x84\x11q+\x1f\x9c\xed\xbfVYy\xe2x\x88\x99\xbe\xf3|\x08a\x04\xces\xfamL\xffz\xf6\xc4\xe1d\x9b\xf3\xdc\xb1m\xeffD)\xe7\x8b\xe5\xf2\x94a \xe2\x86\x9e\x0f\xb9\x9b\x07\x1f`\x04y\xf0\x1a\xbe\x87\xd8\xed\xa4\xd2\x04\x1f\xe580+/\\:\x07\xeb\"\x11\\#\x12\x94\xd9O\xd9-\xc9_\x86\x05q\x91{$A\xb1N\xe2\x12\xbf\x0e\x12\x92^\x97Kx\x0e\xbb\xeat=\x1f\x1c\xb6\x86\x94!\xe9C\xdc}\xe8\xc9\xa9R\xc6\xac\xce\xe9\xce\x89\xbbz\x1b\xa7\xf3\xec\x96n\"\xfb+x\x1b\x96Kz\x97\xf1\xdf3\xf1\xfe\xd8\xf2yA\x92\x05\xfd\x98\xfe\xab\x7f\x8a\xef\x8eA\xc0\x01\xd7\x11\x84\xe82.\x1c\xcf\xf5z\xf0\xe05\xc7\x83\xd7\x8f\xc0\x83G\x9d\xa4\xca\xbe\x8e&\xd9\x8d;\xfa\xdfC\xaa\xd8\x89\xb8\x03\x9d\x16\xa0Kb\x90m\xc9\x1b[o0#\xa5\x91d\xe5\x7f\xf27\xed\xe5\xcc\xe9\\b\xfa\xbf\x01\xfb/\xaf^6\xf8p\xbf\xc8\xf3\xf0.\x88\x0b\xfc\xd7\xdcX:\xb8\xb1\xff\xe57E\x9e\xf2\xb0\xb3J9nN\x17\xd0\xbe\x04;\xf2\xe9nM^\xe5y\x96\xbb\xce\xcb0\xfd\xae\x04\x8a\xdd)k\xbd\xcc\xe6\x90\xa5\x00\xec\xac\x9aey\x9bB\xb0\xa6\x15E\xb4e\xb9Vt\xb5\x9a\x1e\x94\xf3\x95\xdfi\x9f\xd0\xf6\xd2\xce\xd3\x89wq\xec\x03\xb9 \x13\xcfuXq\xd3\xfee\xd9\xc7\xbf\xcc\xfb\xf8\x97\x9b>\xfe\xe5\xae\x8f\x7fi\x18\x9c?\xdb\x19\x9c\xe5\xa6\xec\x08\xe5aV}\x8c\xce\x15o\x99\xb2Ns\xc1:\xd9x\xa5.\xdee\xa9\xf1.\x8ckY#3\xa0q-W\xc8\xb5loC\x88\x8c\x05\xbb\xbc\x94\xd5\xa1,\x0b\xf2\n\xc7\x90\"3\xb3b\x8c\xc3Rc^\x9a\xd3\x8f\xb5\xcf\xb0\xb6`rh#Y\xcd\xf7\\\xd7\xdc\xc8\xe9)\xb2:\xdd\x92$\x90H\xc6F\x90d\xa7\xd2\xc5C\xaf'\x05: Dr\xecf\xda?\xa0Oq\x1b#T\n\xf3\xebjE\xd2\xb2\xe0\xb4e\xdfw\xf4\x89\xc2\x82\xc0\xf8\xb8\xb7\x1eH\x02{r\x0be{\x0b\xf5\x07[\x9el\xde\xb2K\x0c\x94\xb5\xfe`\xe3\xd3\xc74\xae\xd0\xd4\xa6\xe7\xa1\xf3m\xab1\xba\xa1\xd6/\xecm\xd5\xea\x95p\xbdN\xee\xb8\xf2\xaf\xde@s\x8b\x0f\xe6u\x11\\\x87\"!\x904!\xb2J\xa5n\xcaE\xce\xfc\xa6\x93\x9b\xcfl\xdc<~\xe6\xba\xab\xe0&\xce\xcb*L\xf0\xe25\xbf\x10\x96x\x9cW\x17\xbc\xfeG\xfa\xcd%\xfd\xdf\x16\xb2\xfc(\x0f`\xdc~\xe2yV\x8e\xfe\x1f\x85\x8b\x9f\xeab3.dk\x953\x1cu\xa8#4\x8a\xa2\x8c\xca\xc3f\xaa$X\xb06\xf7=83W\x96\xd5n\x16\xccE!H\xee\x96\x9e\x8f\xb0'\xa3gtk\x8c\xdc.jL=\x03Y\x04\xcd!\xaa\xeaf\xd5\x0d\x91 \x9f\x87V\x7f\xce5)\x1d\n\xbc\x91\xb8r\n\xf1\xcb@>\xbe\x88\"R\x14Y\xce\x08\x8a\xa2Z\xd3\xfd \xf3-\x0bA\xe1\xdc\x84IEx\xdb\xf4\xd0\x95\x0cY\xa5\x01\xbe\xf0\xfcMI\x0e\xf9\x08l\xa5\xee\xf4\xc8\xb3\xf3\xfd|\x0cO)\x9e0+~\x7f{\xe0\x8a\xcb\xf6\x82\xa2\xe6\xb6S\xa4 w\xd1\xbe\xa0\xea\xfa{A\xd8\xcc\xb3\x9f\xd8o\xe4\x1f\x9a\x1a\xb4\x8f\\\xb4\xebWS\xa3\x06u\xc8\x92K\x82j\xcb%\xda\xdd\xb3\xb0\x85\xa9\xbb7\xf5\x14dk>\xf4\x82\xc5\x0e\x16\xbcF\xecNh5\x99t\xef\xbf:\xb5\xf1\x01;b\x1b\x9f-I\xe67\xb1L\xa8\x9b0\xdf\xa2\x17\xb7}iT\x1a<\x05\xc6k\xd8\xaeL\xdf\xa0\xfb\xf8`uX\xff\x8d\n\x8dne\xba\xb2rCd\x82\x88\x9bc\x1f2\x1f*\x1fB\x1f\n3\xa8\xa4@d\xcbHc!\x03\xd0\xc6\xb9\n\x8fL\xc9T\x88\xe8\x1c\xc9-p\x18\xf76N\x99B\x8e|\x89\x08SJgQT\xe59\x99\x9f\x00\x9dd\xb9$\x90f\xe9\xceJT\x9c\x93\x1b \xe9M\x9cg)\xc5\xffH\x0e\xd3J\x8b*I\x80\xd0VaE\x8a\"\xbc&\x10\xa6s\x08\xe7sTe\x87 ,I\xb2^T \xdc\x86y\x1a\xa7\xd7E\xa0\x9f\n\xfa\x90\xa4 \x1dD*E;3}\xb1.\xcct>}(\x86\x1f\x9bi\x11W]\nR\xcb\x80\x9f\xfck\xf1\xe4\xda`\xdedz\xf8A^\xcc\x92\xd1\xe8\xc2X\xeb\xc1\xf3\xbc \x0dW(\x91}\x93\xde\x84y\x1c\xa6%\xfc)\xce\x92\x10)\x99\xd6WmJ\x8c\xdd\xb2(X\xe4\xe1\x8a\x14\x9f\xb2\x0f\xd9\x9aQ\x1a\xd1\x1f\xcc\x1f\x0e\x82\x01}\x16!OM\x9c\xae\xa4\xac\xeeW\xec\x0b\xb6bvaa\xa3\xd8\xa5\x8eS\xca8\x90`]\x15K7\xed\x10V\xab\xb35_\xacD\x9d\nW\xf2\xca@.\x0b\xe2tI\xf2\x98\x83\xed\xdd}O\xfd\x84\xb1\xe8\x93C\x1d\x03p\x1e}\xf2\xd4\xd8\x16e\xbf*\xe9M=?\xdaK\xec\x86\x0d\x91\xeb\xf9x\x0b\xc7'\x10\xc13\x10\x1c\xd0 D\xa3\x91\xbe\x88\xe2\xc8\x17\xb3H[\xc2\xa4io\xb6`\xcc\xb1Vt\n\xa1R \xa3\xc2f\x94|\xff \xb1\x80\xf9\x16\x8b\x97x\x9e\xccY\xd0\xef\xd4\x91U\x1c\xfb\"\x9b@\x89\xbbP/@\xa9\xec\x16\xb3,(\x83\x9c\x84\xf3\xf0*a@\x98\x1bi\xf0\x92S\xd8\x9a\xb4\xea\xdf\xe6q\xa9\xd6\xafKD}Z\x18&Iv\xfb\xefa\xb2x\xbf&)7\xbdS\x1bRk\xd4\xad\xb5>\xac\x9b\xcc\xd2\x88\xb8\x0eA\x83\xa8u\xf7r\xae[P\xc3\xd0\xf6\xfd=+\xbd\x14\x138/\xc3\x92\x04$\x9d\x13\xb4\xd6\xc9\x83\x94|)?\xc5\xd1gw\xc9\x86\xd0\xdd\xe9\xb2\xbd\x87%m\xcd5\x89\xf2\xccTb\"\xf3b\x8e\x18\xd7\xbf\xc7\xd7\xcb?\x87%\xc9\xdf\x86\xf9\xe7\x16 \xa9\x18\x06j\x86\x83\xfd\xa4\xa5$\xd5\xd4\x17b)w\xab\xde\xfdfB\x9e?h*sR\x94yvG\xe6\xad\xe1\x0f\x1e\xa2$\xcea\xa3\x15\xe7\x14G\xab |\x0c\xf3i\x8e\x98\xfaeP\x8f\x8d\xd60-D]Acu4a\xa12\x113@\xfe\xfd\xa7\xd0X\x9f\xd9&A\xabx\x1d\xdb)m\\p\xc9\xbf\xea\xa3\xfc\xb1C\x86?\xaa$\x11\x17\x16\xcf\xbe/\xdf#\xe2\xcb}\x7f\x13499\xda\xb3\xea\x8a\xec\xbb!\x8e=\xaetN\xd7\xb56\n\xeb\xa3\x8a7\x1c\xdf\xde\xc1\x9e\x01\x8f\xbf\x0d\xcbe\xb0\n\xbfv\xeds7\xde|\x02\xd2\x80\xcc\xe3\xd9\xb73\x88LZ2\x90\xb5\xfb\x87a\x10\xa7\x87\x1b/\xf0\xdf\x85A\x1c64!\xaci+\xc1J8\x93\xee\xa0\xcd\x19\xe3\xdb\x8f\xa8S\xc8\xb5\xb5U\xba\x1d\xf2-\xebg\x9a\x85\xeec\xf7\xdeb\xaeg\x16$\xee\xeb\x06\x96\x8c\x90>:\xf4\\\xa7\xc8#\xdd\xd4\x81\x92\xd3\xb5\xd0\xb6\xcc\x98\x1dI[\xfd\xe5:\x0e\x8c \xf4\xb8=\x8a#j\xca'\x06-\x08\x838-\xd6$*\xcf\xb3*\x8f\xc8\x90C \x08S\xe9f\xf96K \xc1\xa5\x87&\x12=\xb2Y`\xa4\xea\xa9\x8e\x10\x7ffn\xea\x83CYB\x07\xf5@q\xf3\x9b\x1e \x8a\xbc\xe8\xadm\x8c\x97\xa4\xcf\xaa\xe6\x8b\x8a\xd7;\x03\\\xa1\x92i\xb1\x8a\xe0\xd7,N\xdd\xda\xda\xd7\xc3\xf6\x90\xe2\xcd\xe1\xac\x86\x07p\x0c\xa1\xf8\xa9\x94\xc6\xcd\x818\x06wN\x12R\x12|\xefK\xaf\x14K\x8fF\xf2.\xd3[\xf56u0\xd2\xe2.\x1a\xef\x19e;894\xab\x90\xc1\x91\xf8\x08\xb9\xffot\x0d\x7fo\xc0\xb01\xd66_\xbd\x03\x93\xa2\xd9M\xdd\x83\x03\xcf\xc7\xf7\xe3\x86 \xb69\x98\x18\xaf\xe9\xe4@7\xf3\x0b\x8d\xaeT\x9f\xc9\x9d\xd9\xff''\x0b\xf3\x8b\xcb\xcb\x82$\xf6wx]\x8f[ \xcb\xe4%VX\xb7M&[\x83\x9c,\xa4\xcdh7\x13\x0dk\xe63\xb9\xd3\xf6\x14$\x96\xbc\x0d\x1ar!\x962\xc2\x88\xb6\xbc\x92>\xff\xf2/\xec\xf8\x1cC\xd5^\x1c\xfa\xea\x18\xca\xf6\x0b\xdc\x03\x83v\x1b\xb7 m\x97\xaf\xf3l]\x1cChX\xff\xec6%\xf917j\x12\x8f\xd9\xfbI\xb2]\x91\xc4\x1cA\x94\x93\xb0$\xaf\x12\xb2bn\x15}\x94 \x9e\xf1\xda\x17\xa25\xa2\x84\x9e\xc6*I\x0c\xb3\xe0o\xd4\xc1QZ\x83\xdfNY\xdc/\x1e\x14\xc3\xe4\x10\xd3\xc3CP\x03\xef\xae\xb9\xef\xc7\xc2\xf3!\x12\x85 3\x98\x1c\x01\xa1\xfb\xee\xf9 \x8bM\x03v\x84\x05\x1c8\xaeK\xda\xd5\x18\xf2Q+b\x19\x02\xa5\x8c\x810\xe6\xbb\xb7\xbd\x0d[\xa1v5]V\xeeV\xcc\x93\x11\xfd\x1fOZ\xcb\xb7\x84S\xd05\xe8\xb0\x03\xd3\xf6\xca0Y\xc7\xd2\x83*\x88\x96q2\xcfQ\xa4\xa1\xa1%\x94\xb9\xd2\xdaKx\x0e\x13\x13YQ\x0b\xb3\xe6\xc2\xac\xcd]\xd25bb\xac\x1bx\x06\xcb\x13\xb8\x19\x8d<\x98\xcfn.\xe4\xd1\xcdn`\x04S\x83\xfco\xec\xabc\x9a\xab'\xb05\x13\xee\x15\xc8=q\xe8z\xb5\x84\xe4\xc0\x97\x07\x8dO\x94\x9a\x16\xf1#\x9e\x8b;O\xdeD\\xi\x07\xee\xe8\x0et\x0cM\x08\x80\xe9ig\xee\x03c\xfc/\x0eP\x8a\x9e\x96\x14g7\x17\xc7\xaf/\xcc\xeb0*\xb3\xfcn\x90G\xa4v\xc9\x82\xab8\x9d\xbb\xdc\x07\xc9L8\x93@(\xd75/\xc5E\x10%YJ^\xa4\xf3\x8fL\xdc\xfd\x1f\xa4\x97\xb9n\xe6\x18p%\xbd\xcf\xa0,\xfd\x87\xdf\x03\xfa\x07?\xe7e\xc0\xa0\x8a\xcf4\xfb\xebB\x9f?\x1d\xc0f\xf0\xa2\xaa\x0d\x9brTd\x8a\x86\xdb@\x02m\x9b\xe8\x15n\xbfB\xc1\x03\x0e\xbb}j(\x12\xed\x9a\x8b\xb79\xd0\xa9\x14\xa03\x17@\x87\xdd\x9a\xfax\xc80h\xa9\xc3 \xb6\xde\xec\xe0#\x1e\x97\xcft\x0d\xb6\x0c\xef<\x0d\xdaT\x16h\xc3\xca\x15\x15\x11%\xb6T9P\x02g\xb0\xa6\xc5\xa7\x90\xd0\x7f\x8e\xc5/Z\xd7\x00\x9d\xee6\x84Nw\x1e\xac\x87@\xa7\xbb^\xe8t]C'\xbaz+\x06\x9dV\xf0\x0c\xeeN`E\xa1\xd3\xf5l\xa5B\xa7\x95\x05:)\x03\xba\x1et\xff\xf9\xddX\xfa0\x17@\xe0F\x95\x13\xd3\xc3\x1f\x17\x7f\n\x93xn:\xfe\x9bP\xa4\x8a\xbc\x88\x1d\x10AJ00&\xf7\xaa\x10\xc0\x7f\x80~\xe2T\xd2\x0e\x1f\x98Y\xc0\xdd\x83~\xa9@\x87\xb3\x03c%\xcc\xa0+wS\x8f\"P8\xe6\x87\xb0\x99\x8aq\xec\xfa\xc09%\xa6\xab\x8a\x8d\x04ef\x10\xd3\x0b\xc3R\xae!-H\xf9)^\x91\xac*a\x192\xb1\xc5\x15!\xdcK\x97\xcc\x9dn\x91|\xd5\xdfA\x94\x900\xff\x8a.B\xb3\xfc%\xc5s\xd0\x8c\xbe\xd6\xda4Et\xf9\xc6\x06\xc8\xc6\xbf\xcd(\xd3\xb5\x95\"\x880\xb4C\xf7\xb1)\xf6{\xda\xed\x94r\xa4\xec\x0b\xf5\x9a 9\x87\xd1\xa7\xd5\xdc\x1c\xb4l@8\x92l\xb5\x0e\xbd=\xb4\xdb\xe2\n,s[\x16\x10\xf1\xb0eg\x7f\xcdsHm\xb2\x04\xe9 \x9e\xc9?Z\xc4{\xa7\x80(\xad=\x18\xea\xfa\x03\x06\x95\xdb\x06\xa5\x1c\xde3\xf5\xe7\xb1\x04\x85\xa0w`\xb4\x8b\xca\xb6\x8a\xae\xa6\xa2-\x98\nu\xa6i\xfe\xd1\xfeV\xd3@Q\x0c\xb931]\xfe\xb6\x8e\x8e\xf9? J\xe4M\xd5\xeaY:9z\xe0\x83(K\xa3\xb0t#\xb4/\xc4\xb6}\x88D\xa5\xedmX\xba^\x9f\x96\xcet]\xb7\x166j\x96\"\x89\xd0]\x1b\xd4\xe28F\x83uC\x8d\x0f)\x01\x18\xd5\xfaerb;\xe7\xf8\x01\x85\x92\x91X\xd7\x13\x18\x8d\x12x\x86\xdf\xe0\x82\x14\xb3\xe4\"\xc8\xab\xd4\xb5X\xbc\x8a\xa5\x90\xbb\xec\xb9%\xc0%|\xec\x8e\x9a\xf6N\x865\xbc\x92\x0b[Jk\xbd\x1d\xdeP\x85 \x90\xf1d\xc6F\xe9\xa9\x95_\xf8\xc3\xbb\xb1\x830\xf1\xe4n\xd9\x864\xe2\xe9\x87^\xe2\xe9\xef\x08d\xb5\x83\x0c7\xed\xdd\xc3FC\x80V\x07\xc2\x1a\xa0\xbb\x03\xfb\xec\x8do\x1e\xf4\x05{\xe8\xbc\x89s\xbb*qQ\xa5\x92&3\xa44%%x;\x9b\xbbq\x15\x8b\xd3\xb8\xd6:\x0e\xe2\xf1(E\xc0hW\x03\xed<1`\xe9V5J\x1d\xdba\x01\x9d\xcf\xe4\x04Rx\xd6\"\xceO \xa5\xc41\x99\xa5\xb4+\x95@N5\xe28\xe2ZVr+\x96\xcf\xf3a\x82th\x0d\x05\xef\xef\x01\xa3s\x84\xeeR\xa1~\xe7\x92D2\xaf:=\xa6\xc4&p\x9bs)\xde\x06\xee\x85\xd2l\x1c\x94q\x89\xd6\x1f\xceU\x9e\xdd\x16$wh!\xff\xbb\x89\xba\x94\xde\xf0\xf0\x1bq\x10\xe6\xd77\x0c\x7f@\x1cp\xbbAd\xbe\xa4\xdfE]\x1b\xdf\xdd\xe0w\xf3\xf9OqQ\x92\x14\xdb\xbda/Q\xd9\xc0\xfe^,\xc4\x9f9Ye7D\xaf\xccJ_$\x89xQ\x887d\x15\x97\xe2\xefuN\xd6$m\xf5\xc4\x8b\xdf\xa7Q\xab\xddDj\xae\x97\xa1\x98]\xa8\xabw\x15\xa7\xf38\xbd\xeeVR\xe9T\xeb:\xcf\"R\x14\xf5\xc7\xb1f%\xedh[\x14\xdd\xce\x07x\xc89O\x1c\xed\xb3\xe5\x0f\x18\xd9&\\\x88\x91R\xe22y&\xc8\x81\xb3\xe1\xbd\xf9\xd3\xab\xcb7\xef^\xbfy\xf7\xe6\xd3_\xb0\xc6\x04\x9e\xd8V\x9a|)I\xda\x8a\x8bh[\x02\xa6\x9dk\xd3Q6\xf9-.\x0d[:7S-\x9f]\xe2y\x0d\xed\x04\xcf o\xd6\xae\x9c\xc5\x94\xc5\x9e\xa5\x17LD\x1a_|\xfb+$J%9\x9d\xd9]\xa5\x15\xd4\x8fYj\x8c=\xd35\xac:5v\x063n1\x95 N\xa3\xa4\x9a\x93\xa1\xa1\xcb(\xa7_\xf7\xa5\xbc~\xe0\xc6\x0fC[2D@3\x8c_<\x84\x85\xc7C\xe5.\xfdk{[\x84\xc6ce\xf8\xe7\xf66\xe4\xc2\x12\xbd\xd5\n\x1d_\xca\xde\xea\x9c\x06\xbeY\xc4IIr\xb7\xf3-IN(\x11\x17\xa2\x17\n\xfb\x06\xc11z\x0d, \xd4\xe3\xa740d\x0b\x08\xa1\x88\x96d\x15\x06\xf0F\xbcb\xf1\x0d)>\xc8\x16PT\xd1\x12[(Z\xc4a\xe0\x18\x8e\xe3\x12C\x1b\xae\xd6qB\xe6o\x9a\x95\xab8\x0b\xeb\x88\x018>\xcc.\xf4\x0f^}i\x7f \xd6\xd3\xf8\x01E\xcco\xc3u\x17E\nB0\xc4n\x90\xd1\xae\x80>l\xb1\x8e\x8dZv|\xcf\xc3j\xdak\xf0`\x9b\xf6\n\x8b0I\xae\xc2\xe8s+V.}d\x89{\xfdA\x07\xce\x17O:cW\xf1b\x86\xd7\x94\xf9P\x8a\x9e\x9a2C\x0c\xc3vw\x14\x90\x97\x0c\x90\x13\x83Z\xea\x04J\x86\xf9J\x0e\xbd\x1b\xc6W\n\xaf\xa8k\xff@\x12\x0d\xab\xe7\xc55\x9e\x16\xcb\x99\x90/\xb7\xf8+\x0c~|\xf5\xfa\xc5\xcf?}\xaa\xe5b\xa1`\x19:N\x848\x0d\xea07\xf1\xb5\xef\xf2\x80G\x01\xa4\x18\x97\xb6\x8e\xb3\xb1AyF\x9f\xab\x9c\x84\x9f\xdb\xaf\xba\x9c\xe1K\xada\xbd\xab\xc9f]q}\xa8\xa5/\x19\xc8\xfc9\xcf\xd2k`\x9e\x81\x08AD\x97x~\xce\x194\xe1\xbbP\xb3v]F\x01\xcc^\x81\x02vN\x0c\xd6N\xceM \xf3\xe5\x0b\xc8\x0d\xc9\xefz\x80\xa7\xc0\xb3\xb2\x1bN\xa8\x01*\x0dn\x9e\xd7\x916\x05XDn\x88\x83\xc6\x02\xdc,\xa7\x802N\xaf\x13\xc2g\xc8Mq=\xca\xa0\x95a\x9c\n\x98\xab\xbcm\xf9\xec!wA\x1e=\x8dl\xd3i\xd4\x81B\xb59P\xb8i\x9b\x81\xf4\xae5~q\x8f\xc9-\x84\xae\x01o1\xf4id\x89\x05\x1c?\xd6\x1d\xd3\x14\x11\x83\xcc\xa4\xb1M\x1bj\xab\xf8\xdb \xcaP2Ho\x05\xc6\xe4\x81Om\x16\xe9\x83}\xf9j\xcdl\xe9C\xac\x83\xad^},s\xee\x16\x06\xa1\x9b\xb2\xaf\x9a\x0e\xce\x0b\x8a$\x8e\x88{\xe8\xc3\xce\xa4o(\xdd\x0e\xf5{\xbb\xff+\x1d\xea\x87-\xeb?\x80\xd5\xf9\xb7:\xf7\xfb&?U\xe6\xdf\x12\xa7\x8f\xa3\xec\xb3\x9eC:@/+\xb7=\\7+\xf5\xf1\xa3&F\x1d4z\xfaQ\xcf\xd8\x91\x86\xda\xb8a\xfcJj\x19\xc3\xc1\xc8\xb21\xac`\xeaO8\xdc\x0e\xeeR\x81\x9e]G\xe6C\x1e\xaf\xe22\xbe\x19\xbcL*\xa1i\x04\x1d\xf8\xc2p\xbdX\xfc\xc5\xf6\x05a\xe5\xed#\xaeS\xb2FPW-\x16x\xe9\xcb\xfaG]\xed\xc1\xab\xddaR\xf7\xe0\xd0\x0b\xd8{\xb3@es\x0b\x06\x03\xe9\x8e\x1b(9-s=\x80\x08\x06\xf6\x97\x17o\x7fz%\xc2\xae9u\x82\xaa\xb0\xc8d\xdb\xc3U\x98\x7f\xe6\xa6?\xf8\x93\xc7V;mb%\xd1\xfat\xcd\xdc\x8a\xa7`be\x1ef\xb0p\x9bF\xcex\x02\x8c\xba\xa4\xc6b,\xf7\xa4\xe3\xf9\xf5\x90\xd7e\x95\x93\xf32\x8c>\x7f\xcaCth\xb4\xbc\x11\x86\x9cK9\x01X\x86q\x88\xb1\xac\xa05\xd1EYXhy\xbc\x8c\x0eY\xb2\xf6\xaa\xff\xca;,\x9c\xd8 \xe4HZ\xb9\xd5\xf2&W_\x8a\xb9\x0e\xa3U\xea}\x1a\x81s\x0c\x8e\x91f!h%\xd1\xb7 >l1\x07\x9dz\x1f(\x85C\x9a|$\xa6\xed\xd0s\x0b\xca\x94\xd6\xa0\x84\n\xbd\xf6\x026\xf7\x1d\x96\xcdK]\x95Z\x08>K\xdd\xe9x\xeaiV\xf7B\x01\x8a\xef\xf7w'\xe8\x88\xbe\xbf\xdb\xaa\xd7\xc8\xcb\xb1\xde.\xaf\xb7\xc7\xff\xdd\xe7\xff\x1ex\x92\xc5\xcbc\xc5\x9dv/\xc66(S\xcc\xda\xdc lCip,\xd4\xcc\xd6\xdc\xa9\xa5\x9ed\x00\xe7\xeeY\xeap3;Mm\xa0\xdd\x85!ru\xcd\xc4.\x17\x82\xcf\xb8\xa3Q\n#\xc8\xbd\xe6\x00\xef\x1e<>\xae\xce\xe3\x03\xfapV\xea\x11a\x89$%\x8a\x1e\xc4\x84\x87\xf7oE\x1f\xcax\xb9\xce\xb0n\x10=\x99\x05\x8c\xfdg\xf4\xe4\xea\x9bDO6\xdd\x8f\xbfOPa\xd3H\xf0ZF$N,7v\x91dY\xde7:\xcb\xd0\xe2\xe2]\xf8\x0e\x15\xce#\x14#\x8c\xe1\x18\\\xa1\xc1\xc81OZ\xbfD\xc1.\xaa\xe9\x0f\x10\xdcw@\xd5\x10\xb4|\xd4\x9a @X+\x18\xad\xb7\xba\xcc\x13xs\xf5h\xac\xe6_R\xe5\xb2!\x05\xdb\xf27\xfa\x18D\xd7]\xa6\x0b\xad1\xf4\xe4Nh\x0f\xc3\x1a\x9b\xdf6\x92\xdd\xe1#Ah\xb0\xe1`\x14E\xaf\xfc\x0c\x90N\xd6\x9dw0\x0e\"\x9b\x00\xb1\xa6\x12\xd8\x04\x1f\x0e\xbb.qoB\x99\xded2\x8f\x0dTf\x8f\xaefQ\xdaO\xc6\xbd\xb7\xce\x02\x0d\x1e\x15\xd6\xae\x8f^l\x85\xfc\xe2\xf2Z}\xf0\x0c+\xb62\x06VbNm\x19m\xea>\x16\xbe\xdc\xf0\xa8:\xa1k\xa4\xd7\xb0\xed\xca\x87\xc2\xe7\x99\xf0\x0c\x95(\x1e\x8efcC\x00\xe9\x04\xdf\xe8&G\xd9\xb0\xcc{\x1d\x9a/2+.\xba4\x9fZu\x83q\x80\xcf\x8c\x12xv\xbf\x96\xc5(\"\xcf\x98\x07\x00S\x1c\x17|X y\xc0\xe41\xf2\xab\xc2\x87)\x93\xb5\x9eu\xe3BhF\x96\xd4\xf8\x90q\x80\xfa@\xa0/\x16\xa9\xb1\x1d}6}\xc7Xn\x98\x91U\xbf=\x18\x15\xd0\x8f\xbf\x04\xc3.\x9f\xa2\xeb5y\xf01\xedo\x13p\xfd# \xa3\x92\x07L\xff?\x0e\xcf\x84\xec\x9c\xc0M\\\xc4%,\xcbr}\xfc\xe4\xc9\"\x8c\xc8U\x96}\x0e\xae\xe3rY]\x05q\xf6$\xa7\xdf=\x99gQ\xf1\x04?\xde\x99\x93(\x9b\x93>\x81\x9c\x999\xe6\xa3\x91\xc7,\xd5\x9d\xed0\xbf.f\x17X\x8f\xa4\xb4\x89\x9f?\xbey\x99\xad\xd6YJRY\xaf\x96\xc3\x08&\xba\xf2\x8c\xb5\xa1\x06\x7f\x17\xa2\x89,\x1f\x1e9\xbe\x89\x1a_\xf4\x87\x8b?i]\xff\x18\xe4\x10\xee\xba\xaa\x8e\xc1\xf4\xb83\xfa\xba\x0fq;\xacz\xdcs\xea\x06\x9d\x1b\x89\x82\xb2q4\x8f`\xe5\xebb\xf1I\x87\xf7\xcc <\xac^\xb8?\xb4\xff\x12\xeb,\xb7&\xc1\xb78(\x97a\xf9\x11[+\x98\xd8E)z\x1d&\x05Z>\xba\x18H[y\xf7)\xaf\xf8\xab\xb1\xfe\x8a+\x17r\x11\xcfW\xfdn\x19w\x9a\x8f\x88\xb9)\xf9\xf6\xb46^\xf0\x03>\x04\xa5\x9a\xfdO\xe0\x94\x1f\x94\x8d6P\x94v(\xa5\x9e|\xbf\xa5n\xd7\xf7\xf0iI\xe0\x8a 7W\xd9\xbcJ\x08,\xf2l\x05i6'\xc1\xaf\x85__D\xee\xf4\x1ah\xdf\xeb\xcd\xfd[X\x95\xcb,\x07\x80\xd7$\xcf\x8a\x02^\\e\xd5\xe7e8\x8f\x7f%Kx\xb6\xc0\xc2\x7fc\xff\x04Y~\xfd\x1c\x9e \x88\xd4\x94\xb5\x1a\x15\xf6H\x8aA\x12{\xf9\xa4uu\xb9\x1c\xaa\xc5?CC\\\xb4\xb2\xe4A\x93X\x0f\xef\x94\xf2\xb2\xbe\x10\xed\x98+\xd0le\x11|\xfa\xcb\x87W?^\xbe\xf8\xf8\xf1\xc5_.\xcf\x7f\xfe\xf0\xe1\xfd\xc7Op\x06\xd3\xc9\xde\xd3\xbd\xc3\xdd\x83\xbd\xa7p\x0c\x93\xf1\xd3\xdd\xa7{\x93\xc3\xa9\x96\xef\xd6\xd2ah\xc5\x95\x94\xe2\xa4\xc3yF_7\x86\x17\x1f\xc3\xf4Z\xf0\xc9\x14(%\xf1\x1cI\xd190Os\x865:\xcc+l\xb3p\x85\xbd\xd3\xcfqZ\x1e\nCc/\xb8\xbcDl\x7fy\x89!,\x1a\xf9\xea\xb1b*\x82l7o\x00}\x9c\xe8a\xe7\x18\x8c\xe5\xb8\xd3\xa1\x85y=\n\x1b\xc5\x06\xc2\x88\xcb5O\x80\x07\xc4\x97\x95 \x85\x9an\xa0i\xba\xbd6H\xde\x1b\x14\x0d6\x12\x0b\xeb\xb7\x15\x10\xcaN\x89MZ0\x1c\xc9=\x9d\x8b\xda,\xb9\\\x12\xe6\x86\xb2\x88\xf3\xa2\xac\x11?\xac\xaa\x02\xedgB(Z\xd1j\xe5G\x10A\xf6x\x08\x0f\xb63\x105\x01i\x0cr\x1c\xcb\xd6Db\xfd,\x0c\xaae\x0d\x89\xd9l\xe8;!\xb5Q\xe7\xcdm\x87BnR\xdf\x91~\xda\x9c\x89\x16\xcf-W\xe5lo\x03\x91\xcf\x83\xfc\xae\x1dK\xbb\x83\xedFW\xbf\xe0\xea\xae$?\xe1\x89\xf6\xd1\x0co\x0c\x98\xeb\xba)\x86g\x8d4K\xbf\xaa\xdfe\x8bEA\xca\xef\xe8\x11\xc8*4G\xbf\xca\xaat^\xd8vW\xef\x936\x0e#p1\xf7\xf0\xd8\xb3\xf6\xc3\xee\xdc\xf0~0\x00A#cI\xa5\x00n\xa7<\xf0o\x0b(\xd4F.\xd6*x\x81\x8fM\xc5t\x99\xcd#\xe9\x04L\xa4\x0b\x10\xd1\nk\x06H;\xaf\x8a\xc1\xd0O\xd9\xfdc\x93R\xb1\xc5\xd8tx \x1a>\xc7\x05\xad\xf3\xc9\xdf\xdf3\xe7P\xa7*\x17\x87][\xbfU\x04q\xf1\x8a\xc3\x0d7\xb58`\x7f\xe7\x08\xd0\xe2H`\x83!\x056\x94\x1a\xf6\x98n\x12H\xf8t\x0c\xf70g\x1bg\xf6\xd7\x02\x8e\\]\x16T\xa8d\x86\x8e\xb7y\\\x12\xd7\x02U\xd9'u\x96\x02\x97\xf9\x042#\xfc\xb1\x0f\xb1\xf7\xe8\xed\xf2\xfaL\x1f\xc5C\xd7\xb2\xa8\x15\xba\x141uH\xb3j\xd5\x08\xdc\xc3\xd2%\xc2\xe7\xc9\x166c\x08\x906\x9a]Iu\x82\xb8\xf8SLX\xda\xfdv\xb1\xc9\"L\xaa%\x8f\xb4!0\xdb\xa3\xad\xa9\x99-\xd5R\x0e\x11\x1dK\x1caX\xe2\x9b:\xd9f\xd7*pj\xb3\x1eIW(\xc2\x1c\xc3\xfb\x9d\x9cx\xb5\xa2\xcf\x8a Q\xbd\xe5\x84E\x14\xc7\x8eY\xc9\xc5j$a\x19\xa7\x93\xce*Wq\x1a\xe6w\x96* )w\xcd\xe8\x845\x82d^W/U\xb9\xd8\xe9\xac\xc1\x08\xed\xdeQ\xfc\xec\x96\x9eu\xc1\xa1\xe9.*\xa6\xdd\xe3\x89\x8a\x9d\x9e\x1a\xe5br\x90\x90\xbe:;\x1d\x95\xa0\x19\xf7\x14\xbe\xef^\xc1%\xf9\xd2\xdfJ\n\xcf\x9f?\x07\x83?\x114\xdb\x19\x16\xe4`\xaf\xbf\xa9\x1f\xfa\x16\xb2\xd37\x1c\xa0v\x0c\x19\xba1\xc0\x990\x96\xac\x86Ph\xf6SvK\xf2\x97aA0\x03\x19F\xa1k}\xaa\xebR\xcd\xe0\xeb\xa6\x8bc\x11w\xab\x9c\x11\x03\xec\xe7F\x14\x14\xfd\xf9\x02 \xe6\x83:\xbd\x93\x98*\x8b\xfe\xb8\x01\x01eM1\xf2\x05\xdb1l\xa3E\xdc\x92R\xee\x10\x85\x81\xdc?\x0eyNx.K\xe4\xce\xf0\x8d\"\xa2\xa3\xd8}\xa7.9D\x90F+Ie\x1ekp\x94\xfa\xdcB\x82\x852\xc6j1G\xce\xa5\x1ccQ\x88\x04D\xa5\xfa\xe5\x08i\xfd\x94\"\xc0\xb2#\x88\x82\x98e\xdc\xb9\x0e\xc0C\xe0\xc8]\xb7OF\x13\xf6h\\\x99\xc2J\x91\x86}\xda\x99\xc01\\k'\xcarB\x8c\xc2'\xde0\x81m\xa4u|\x8b\x9c\xc1\x86t\x1b\xf1\x85d\x10\xcac\xee\xc0\x19\x1e\x86\xae*\x8d\xe5\x0f\xe7Z\x8d\x95\x93\xb0(\xdfX>\xc0\xb9c\x12%\xfb\xec\x8d\xbc\xcbM\x98\xd4\x84\xbd`WD\xa0\x8a\x9c\x93W\xadP\x14\xe6\x1b\xad\xaf\xbf\x05\x98d,5\x8b%\xbc_(\x1d\\s\x8dB\xa2\x82\xcd[,\xa5\x16`\"\x05\x86\xd1\x18\xffM!\x01'\x04s\x0d\x8c\"=\xc4\x91\x1b\x17Za\x01\xc7ej\xd1\x8eTf\x95\x17\xc4,*\x91\xa0\xd8\xa7L\x18\xd8\xfc\xee\xbdWt\xa5\xa6>\x84\xf0\x04\xff-\xf8\xbf)\xfek\xb8o\xad\"M0k\x1b(\x1f\x06\x0b\x17U\x89\x8c]\xc7<{\xee\xcfo\xd2rr\xf0\xc3+\x97\xc0\xf7r\xb6\x11\xf1\x98\xef\xb9\xd5&H85\xda&\x8d4\x1d\xaaaN \x83g\x10\x9e@6\x1a\x99\x992\xe0\x9d\xe1\xf42\x0f\xc7\x1fQ\xf0\xc1C_-8\x1c\xce`\x07\x16\x9dr\x1d\xd1R\xfd\xa1\x88\xd2\x9dy>\xfb\x1cF|\x81\x8az\xdf\x16tA\xacMr \xbb\xc3\xc2\xd7\xb2\x163\xd89\xe5\xa3\xf1\xf9*X\x80\xb3}mR\x18A\x01\xcf!\xac1I\x08;P\xe08\xf9\xaa=Gf.\xdb\xd9\xe9\x9arM<'<\x88\xed\x9a\xf1\x80kx\x06\xc5 \xac\xbb\x16\x1d\x94\x85\x87\x11\xac=\x16\xa4\x97.\xfe\xbaw\xa5\x81\x9b\xc0\x98\xfc\xbb\xf5\x07\xe3\xeft\xd62\xcbq\x80\x0f1\xa9\xb7+3\xd6\xb3j@vt7k3\xe0[\xf5h\x07\xe8\x061o1J!\xdc\xdf\x9b\xf8\x18\xa1\x04\x97\x90\xb6\x81\xe2\xcd\x05-\xc3\x9b\xa3\x90\xe79\xc4x\x0chqLq\x01\xfea\xee!\xeb\x85\x9d\x19\xfc+L)/7\xb68r\x0bu\xe2\x92|\xe9P=\xe5\xf0\x1c2x\x02\xd3zh\xf8\xabK\xfeP\xb1\xb3W\xb1h\x87\xa3Q\xd5\x05>(\x9aX\x87yA\xde\xa4\xa5K\x82\xa2\xba*\xca\xdc\xa5|B\xe5\xc3\xd4\xf3ar\xd0!7g\xd4\x9a$(\xac\xccu\xcb\x19\xbdi\x98\x8a&\x1c\x00\xf4Dc\x83\x0e\xcde\xcf\xa1\xe1\x8d\xfd\xd5\xfd\x19s\nK\xc7\xc2C\x95\\\xdb\xa0\xd3\xd6\xd3\xd5\xd0\x9e\xec\x06\x03u\x9b\xb2\x11\xd2\xecB 8Q\xb3\xf2L\"\xc6\xb3\xed3\xc1Q\x19D<\xe4\xc4\x8b\xd2M{$\xfam\xc0\xf7\xc0dy\x9bL\xfav\xd8\xa4\x95\xb5\x19\xd4\xf0\x97a\x0d\xff\xd5\xfda\xf3A\x9f\x0fm{\x90VC\x0e\xec\xc0\x83\x93\xf2]\x93\xaeZ}\xb0\xb6\xb7a\xcbu \xc5NS\x0f9\x02~ \x19+!\xed_\xc5\xf9M\xcaO\xc3!\xcb\x84\x93R\xb0\xb1\x7f\xe0C\xc6\xb6=\xf6\xea?m\x9a<+H~\xf8\xda\x03\xff\xaa\x8b\x9fUY\x08\xf4\xe9TXL\xf4\xd5\xa7<\xc8\x0fw%\x91<\xa2[\x85\\E\x85\xfd\x0c\x1b\xd7\x8b\xaeq\xa5RL\xa1\x9af\x1c \xb2\xc5\x10\xf3\x18\x83\x1ab\x14\xddv\x81\xcd\x8c\x85\xf8\xf0E~\x93r\x16\x1bLS\xc5\x83N$\xc6L\x89\xe2A#V\xcaJ\xef\x1e\xc1\x19\xec\xc11\xfb5\xdd\x853\xd8\xe5\xbf&G\x138\x83)\x1c\xdbD/\x08\x91a\x04 \xad\x87[|\x83\xe1Z\x8c\xf8\xc5#\x8f\x8f\x81\x05\xf6kz\xe1kS\xc9p\xf4jY%\xcdh\xb2_\xcfh2\x85{p\xc5\x9c\xe4)Vt\x8a\xd3\xf1\xdeS\xfe\xdd3\xd8\xdf\x9f\x1e\x1dP\x92\x88\x92\xb3\xfbOw\xf7v\xbdo:\xff\xbd\xc7\xcf?\xac\x7f\xedn\xb0\x1ajYhY\xa1Cm\x85\xa4%\xab\xd4%\x0b\xe9\x92\x1d\xec\xef\xef\xee\x03\x06\xf4x\x06\x93\xc9do2\x99J\xcbd\x9c\xa2\x99$\xae\x8d\xb1(_\x84\x9f\xd3\xb6w}\xbc\xc9\x18tl!\xf7\xe7.(>\xa0?\x0f|\x11\xb5x\xc1\xc4\xa8c\xd8\x86\xc9x\xba\x0b\xf7l\x1397\xb3\x7f\xb0;\x1d\xc3={\xb5\xcd\x0c\xc2\xf9w\x1e\x05T\xa3SH\xda\x10\xdf\x06\xa5\xfb)\x12A\x8c\xd8\x15 \x14\xe3\x14\xbc\xbc\xafI>C8,\xee1\xc2\x13\x85\x1b\xf5\x16 \xe9.\x1c\xc7\x0e\x18s\xb32\x10\x04\xf4\x16\x06\xd3\xdcXz\xc0`8\xba\xc9}\xa6\x9a{\xdfCD\xa5\xedEv[\xe8S\xfeE\x82\xda\xb7\xbd\xf0\x81\x04\xe7Iv[\x97t\xef\xc3\xa8l\"\xab`,\xdc.\xbbBT\xdd\xb9#S\xa0\x837\xef\xce?\xbcz\xf9\xe9\xf2\xed\x8b\xff\xef\xf2\x87\xbf|zuN\xcf\xd3\xd8&\x8b;U\x93)\x9b\xcd\x82\xcc\xe5=\xb1\x13\xed\xf9\x8cn\xa4\x88o\x92\xc9\x92\x9e=G<\xb5\x02M\xb6J\xb2\xe3\xb4\xba\x96Y\x00\xd8\x81\xa8\xb3l@8H\xf1\xf0Q\xed\xb5\xe5G\xe21\xc3\x8e\x07\x1f\xf6\xa6\x9cVZd\x99\xebY\xc5\xa1%e\xc8\x98\xa5\xe9\xf6\xb6p\xeb\xad\xcb\xdc\x89\x0f\x13OR*\xb6\x8fjg\x0c4h\xe6\xb0e\x90\x9d\xa8\xe7\xca\xf5\xe8\xc9\xfa\xfc6\xfc\xc2-\xe4P\xc5L\xcf\xd4:\xcb\x92\xf3\xf8o\x14x\x1cN\x8e\xa6\xb4\xe82\xac\xae{M\xb6\xc1\xb6\xb1\x85\xe2\x0c\xa3\x1fo&\xd8\x1e\xe0u$\xb5\x1f5\xe9\x05\x0d\x16\x98\x1dBjW\x1a\x8b2F\xe3\xb9\xa237\xd6\xf1-\xf6\x93<\x9c\xcc\xf66\xff+@{U\xc2\xf3\xb8\xa9e\x17LbF_\x99\xc3\x9c\x16\xbe\xd6\x8a)\xe0)wh7S\xa3\x9d _\x1e\x98\x1a\x01\xc1\xcef\xab\xbf\x81\xed\xa7\xf8\x02Y>D4ca\xd6$\x1bB2\xf3\xbe3\x93\x05`\xde\xd4\x0f\x161\x0b\xea\x86\xc6\x86j\xa1Tb\x00\xf0}\xa7\x05\x17\xe1\xe7\xb4\x08\x17\x83\xe3\xafX2\xb5\xe9\xcdQl\xf1-\x9a\x94\"\xac\x0cjk\xcbmb\xa1\xdd\xdf\xc3V\x19\\\x8a&\x0c\xadG\xd9j\x1d\xe6\xa4\xcf!\x1bd\xf3\xca\xdar\x03\xdb\xd7\xf4QF \xd9\x8b:\xba\xb7P\xac\xb0/\x8c\xb6&\xcc\xf0Eu\\\xee2s\x90\x15{\x8c\x0d'\xf5\xaf\x98\xc5\xa1\xcfdN\x92\x99\xd2\"k\x98Q\x86\xde\xe2t\x8b\xc3\x98\xc5\x17xD\xc9,\xbe\xe8B\"\xa9\xe0\x1cY\xff\xad\x0c$\xf2c\x97\xddZ\x89>\xccw\"\x94zh\x8e\x04g0Q\xe2\xe1Bs^\x84\xf9k\xef\x89\x11l%W\xfe\x94-\xe5\x8fy\xc2}\x06\x06\xdf\xca\x84\xe3\xbf\xc1\x1ee\x80\x8d\xc3?\xa8\x01\x88) )\x0c1\xb3\x18L'\xf8u\xe6\xd5\xc1\xd0!\xb3\xa6\xbc\xfa\xceI\xe2\xa24\x99N\xf2\xe0{\x90-\x04P\xb0YQZ\x0c\x1f\x04\x01m\xa2\xb1\x11>\x98[S\x02$\x18W\x0b!\x0ca\x10\xa4C\xaa\x8b!\x89f\xe9\x85\x95\xdd\x12r)\x05=P\xbch\x86;f>IO\x1d\xa5\x8d\xc2N\x9cW\xdc\x18\xc5\xce\x06\xca \xbc\xfa\x9d\xf6\x8f>\x153\xe6FM8g|E\xf4\xd6\x9e\xb3\x08\xcd\xb9mEg+dg\x8fS\x98\xfb\xa0Pz\x12\xfa\xdc\x1a\xab\xef\x8a\xdbp=9\xe8\xf3\x0c\x17\x0c\x0e\xc6\x8c\xea\xd2\x13\x95F=\x91l\xae\xc9GRP\x12\xbb1\x1d^UI\x19\xaf\x13BWpr\xb0s\x15\x97F\xb4\xa8(\x1a\xc6'h\xbe[\x9e\xb0\xe37\xf5\xe0\x86\xbb&\x11Jm\x8dZ\xd9KA\"\xd1e\x17M\x10\x8b\xa8.\xcb\xee\xf4\x9b.\xcb\xdeW.\xcb\xee\xf4Q\xcb\xb2\xd7Z\x96]\xcfo\x8a\xe82\xb1\x7fLZ\xb8\x0dV\xeb`\xef\x9b\xae\xd6\xe1W\xae\xd6\xc1\xde\xa3V\xeb\xb0\xb5ZO\xcd\xabu\xa0\x15O\xd9?\xfbZ\xf1.\xfbg\xef\xf1kk\x8a\x1f\xd7\xb5\xbah\x9e\xdc\xb5\xc2\x8a\xa6\xa3\x8e\xaa\xc5~\xb6\x02\x08\x9c\xc1\x0b>\x9b1\xa5\xcc\x07\x84\x87\x92\xc7\x93wh\xf2\xe9F+\xf8\x07\x8d`\x98\xcd\x99\xb0\xfa\x1a#\xdb\xf4\\\x9eO\xe3Q\xe2\x0ck\x17\xfd\xa6R\xbd\x91\xda\xd4N*D3<\x8a7\xcda\xb69Y\xc1\x10j\x15\x06Q\xac\xe2\xe1\x9d\xbf\xd8\xa4\xf3.:W<\xbc\xdd_7i\xb7\x93:\x86a\x14\xb2xx\xff\x9f7\xe9\xbf\xd7v\x18\x9a\x86_m\xd2p\x075\x0e\x83(r\x18H\x95\xc3&\x9494\xb3y;l6\xbd\xc4:4v\xd1F\xc6\xfag\x1e\xf9Rx+\x1e\x83\xcd\xbd@~J\xe6\x8e8\x02\xc7\x19j6\x0dF\x9a\xec\x81\x8b\xe4\xd9dmA\xa5T\xa0N\xfeZ\x85Iw`\x170J\x1bzd\x0b\x122\x146\x9a\x9d\x88\x87\xe3\x80\xfb{\x0e,kY\x88\xd9/\\\x9bE\x9c\x16k-xr\x17f\xb2)F\x98\xffRK\xca\xdf9p\x81\x9f\x9es\xb3\xe9\x9a\xae\xa8\xddy\x10Fr\x7f\xc9`\x15\x96\xd1\xd2}\x12\xfc6}xr-2l\x80#\"\xe3\xd6\x8d\xf1\x10\x80,\xc8L\x10\x04\xe0x\x9e\x0f\xce3No\xd4\xe1r\x9e;]\xebb\x91'\xf5\x1a\xb5\x7f\xfb\xad\xd6y<\x05\xb3\xea\x9e\xdb\x0c!\xa2v\x84/\xc8\xb1^/\xaf\xed\xb6\xb4\x17\xcc\xd6,naT\"|\xdd\x11\x03\x8bv\xef\xefQ\x80\x83/b\x1d5\x9b)>\xee\x8f\x9e\xd3\"@\xfbh\xdb|sx\xce\xc7C\xe8_\x9dnBM\xfd^\x17\x02\xad1{-\xa4\x03|H\xeb\xbf\xf2\xfa\xaf\xb8\xfe\xab\xb9|\x83\xc4{\x19\xba\x0e\xec\xd0\xd3\x83!\xcd`\x87\x1e\xa7P\x96\xe8e>T\x1e7\xdf\xc0\x00\xc8B/\x18s\x15\xacb\x99\xc24\xbb\xe3\x13H\x98!\xedh\x94\xd8%\x80\xd1,a\x12\xc0\xc5,\xe9\x94\x00f\x18\xbc,\xe1:sZ\xdb\x0e\x83\x1f!\x01\xcc\xe0\x19\x1a!\xa3\x04\xb0\x82g\x90\xd9%\x802\x94\xc2(\xc2C\"\xbbI}q\xe3\\\\J\x91%\xd7.Ao[\xf7o\xd4\xd9\x9d\x1aR\x03\x03\xaavu\"\x99\xfc\x7fmG\x93\xce\x8e\xd0C\xdf\x0c\xc7l@L\x8b\xb9Y\x93\xb8L|$\xddt\x9f\xf3_\xadVj\x0f\x14\x1d@\x99\x83\xa6\xe4,J\xf9F\xad\x9b\x8f0\xc2\xe0\xb8x\x1d\xa7\x18\x97\xc03\x04d\xe1\xae\x92,r\x81p\x8c\x10\x84\x87\x0f,P\xc7\xcc\xe7\x91t.<\x16\xc9\x11\x92,\xbd\xa6\xfc\xaa\x88Fk\x0f\xa8q\xcf\x00\x85\x18D\xea\xc1\x19\x05\xcc\xac\xd8\x08\x899\x07Ay3\xd9\x9f\x89\xd5\x1db\x94_\xdb\x18K\xa8pGO\xea\n]\xacU,98\xc9\xc1{\x9e\xd7NM\"\xe2 \xe3\xef\xf0\xafA`_r\xeeeg1\xab\xca\"\x9e\xd7A\xa9\xec\xf1I\xf2:\xae\x805^\x86\x02^U'Q\xabJo\x08\xff\xc5/\xdbJ\x0b\x94c\xde\xf2^\xd6k\x18\xdb\xc5\xfb\xbc\xdc\xa0\xcf>\x8e\x8b7y\xb5A\x93_\xab\x8a\x80\xa6\xdb\xdb\x0d\xba\xed\xe5\xb1x\x9b_6h\xf3\x1fN\xd9q>h\xf0\xbd\xdc\x14Z\xf3o\xc4I\xd9,u\x01\x98A\x13s>\xd5\xbd\xa6\x98\xc2\xb1\xdf\xf9T\x97v\xfd\xdf\xf3\xf7\xef\xfa8\n\xbe\"\xe6\x1bJ\xdb9\x06\x11\x0c\xc4\xccr\xcc\xc32<\x06\xdd\x93\x0e\xe9\xa3&oFp\x19\xe6\xb9\x88\x0d\xe6\xf7\xc3R-\xf8*\x05,\xef\xe1\x14\xf6\xc6G\x07\xb6\x90q\xbfv\xe1l!A3I\x92\x1ec\x16\xac\x98\x03\xa3\xce\x97\xd9\x8c\x992@\xa2\xc1)js\xed\x0c\xe40\x87\xde\xcf\xff\xa8S\xfc\x16\x93{3drv\x1bDw\xcb&\xf5t\xb78r\x95\xd8\xa7\xbc\xc1\xb2\xa6+\xa9,\x82\xe3\xb0\xfbG\x98\xab\x1c.F\xe61}\xd3k\xb7\x9ce\x1dS\x8f\x07M\xfdm\xd7\xd4\x15St\x8d\xf1\x90\x877f\xc3\xcbk=^\xc659\xb1m\xd7\xf2Yv\x01#\x98\xee\x1f\xc0\xf7\x90\xcf2S\x90X\xd8t.\x9f\xba\xe6\"4\x12\x13\xd4H\xb0\xd8\x18\xf6H6\x0e#\x01E\x04\xef*NK\xbb}\xc7\x08\xc9 k\xdc\xb7O\xf9]\x9c^c`\x13Lj\x00W\xe4.K\xe7\x82\xf6ak6\xd0\x0b\xf7\xa5*\x82@\xa7\xc8\xc7K!\xbes\xd8\x18\x8ca\x80\xb8\xb0D\xc4\x0f\xb1i\xb2 \xba\xa8\xf1\xe3\x9fY\x03\x03\xe9\x91\xfe\xf4\xd8t\xb6\xe615\x88$t\xb0\xc7\xc1\x9c\x93/ \x8b\x17\x06\xae\xe8\x87\x1ef\x88\xd4>\xfd\x84\xdbS\xef\xe3\x86\x9b\xf5\x92\xca\xed\xd5\xadud\xaf\x17\x1f\xa6\xaa\xe1\x0ewG\x8b/\x00\xf5\x10\xdb\x18\x94\xe7\xd938\x84\xef)\xfd{\x061\x1c\xc3\x04v \xf6<\xb4\xd16\xbc\x184\xe1\x8f\x1bMxoz\xb4wt\xf0tz\xf4\x8df\xbdg\x9f5iOk\x17\xa7\xc5\x16c\xd0\xe4\xde\x0d\xbe\x1f_s\xb0lG\xb5\x03\x9e<\xfa|\xfe\xa4\xcc\xc88\x9dZ\xaer\x7f\xcf\x16`\xec\xb3\xa5\xf6!\xe6<\xae\xdc\xc6t\x97\xbd\xa3+\xb07h\x0c?>z\x0c\x87\x961\xecO\xd9;:\x86Cm\x0c\xf2\xafB\xa7\xeb\x86\xd8\xef\x08\xaf\xb8aJ\xeaS\xf8\xaf\xff*}=\x08&\xe1\xb9O\xfe\xeb\xbf\x88\xcf0\x05\x0bC9\xa2X\xbb\xbe!\xa5\x888RR\xc4^\x17\xe5^\x13\x92\x8c\xe5\xea\x92\xbe!\xe2\x1bR\x7fC\xa4o\xca\xba\x04\x93\x1d\x1b\x03\x985:\xcf\xda\xea\x1a\xd7\xc2\x1a s#\xf9IM\x81\xc1\x8e\x9eeE3\x86\x11\xec\xec\x101\xef\x13<\xda\xe3\x9e\xe9\xd2\x0f\xbe~\xc2\x87C\x00\x02o\x90\xd4s\x9c\xf8\x9a\x82\x83o\xdc\x90\x1e'\x07\xedc5\xa8\xd3\xa9\xa5Sn\xe9\x81\x8b2\xb9@\x9c?l\x1c\xed\xcd\xfe\xbaq \xb5\xa1\x0cf\xc88v\xa7\x8f\\\x8f=}\x1c\xae}A\xe4\xa2)\x16\xb18\x7f\x93\x83\xa7O\x9fN'\x94\x8b\xa8\xdf\xef\x0e\x1c\xf6#\x97\xaf5\xec\xd6\x18.D\xe2Li\x06\x93\x83\xf6\x14\x94Y\xed^t\x8a\xf0\xe9\xb0\xff\xd7A4x~\xca?\x9fL\x0f=.\n\xdf\xe1\xb4\xe3:\xbbu)\x95\x00\xdf\x03\x06\xf3\xec\x05\x07\x7f\x0f\xf0G\x94\x85\x91`[~q\x82\xe4e\x1b\nf\x1a\x14\xcc\xbb\x17)3,Rf]\xa4l\xc0\"}#\x90\x89\xbe\xd7\xf5\x89Gu\xde\xf7\x80\x11!v\xa4{0\x11\xa9\\\x07@\xd7\x0d\x80\xab\x15\x9a\xb5\xd7\xf1F\xf8UX\x81\x8bu\xedw\xa7O\x0f\xe8$S8c\x8c\xd0x\xf2\xf4`\x0c\xf7\x90\xc2q?\x05\xb2\x01\x8c~\xf4t\xd8$\xee\x15\x10\xfe\xfbM\xe7\xdb\x81\xfa\xcd \xbd\n'i\xd9to\xd0p\x87\xad\xfe\xf0\xe1b\xcf\xedA\x0f\x00\xee}\xc3}\x9dd\xa1\x01\xba?n\xb816\xd9(\x1a\xb6\xc6\x82\xeb\x1b4\x8co\xb5j\xadaL\x86\x0e\xe3\xc7\xac\xbaJ\xc8#\x97\xe3\xb0w\x1cc\xc1\x80\x0e\x1b\xc7#\xd7\xa3\x7f\x1c\x93!\xe3@\xe6\xd9\xca\xcdX\x848<\x9d\xa7\x82\xe0\x98\x15\x0b\xaam_\xea\x06\x04:2I=\x96t\xcc\xe6\x88\x12\xdbc\xfce\x1dN\x1fx!H\x13r\xba\x14\x94D\xdaB\x93\xac*#\"N\xa1\x84'\x1039\x90\x15\xbc\xd1\xca\x9dP\xac^I#\x99\xf0w\\\xc9\x14\xabXW\xd3`\xa4$\xad\xa6\x10\x9f\xd5+\xba\xb3\x13c\x808N*\x18\x964\x16K\x9a}\xb3%m\x11\x15\xdd\x16,\x86E\xd5\xd7\x92\x02\x8b\xfd}\x1f\xf5(\xd6|?\xb8;M\x06\\\xb7\xf4\x04\xb4\x96O\x197\xf9\x1f4\x11\x13\x05\xf2\xd5s\x99\xfaLr\xdc5\x9b3\xc3\xf5\xf0\x9b=\x9b\xb0=C\x11)\xa5\xa9>(\x1dl1\x1b\xfb\x91\x166\xd2>\xc9\xc1\x94\xf2\xef8I>\x1b}\x92|\xee\x86IN6\x9a\xa4\x89Z\xf9\xeaI\xee\xf9\x92H|\xd0L\x19\xcd\"f;\xdd\x93\xa6;m\xca'\x07\x96\xbd6\x1cg\xba2\x1f\xcd\xdb\xdfI\x16I+\xf3;l\xff\xe6+cY\x95\x89eU\xa6\xe63\xb3\xdb\xbd2\x93\xc1+\xb3!\x8a\x15\xd2cyY\xb6\xac\x06G\x02\xd4\xb7\xd0\x03\x86\x8e6\xcbN[\xb8%f\xa8d\xc7\xe0\xe6m\xb6\x07C\\lF,=Qz\x1f\x89\xc1+\x19\xdd\x08\x917wJb\x7f\nsL\x86\xdb\xe9\x84.\xf0\xcb\x10C\x14\xf9\x1a\xdew)\x96\xaa\xe0\xf9s\x18S<\x1a~\x13|\xb5!\x05\xf0?e\xa3;\xa8\x88\xaf\xdal\xb1\x17\x12\x81\x915\x04\xc6\xc6;>\xfa\xfb\xec\xf8\xefB\xa0L\xa6O}\xd8\x99L\x0f7\xa7Q\x14\x1d\x12]Z\xe6\x930\xf9\x1a\xfa\xe5w$_v\xa7O\x0f\xe8\\Q\x860\x0c\xb4\xff\x8e4\xcc\xefH\xc2\x04_K{0`\xca\xdd{;\x80\xc4QH\xa2\xaf\"h~Gz\xc6\xbeD\xea\xf5U\x8c$\xc4-\x1e\xb0\x8a\xff@\xc4\x8fE\xfe\xd4\xbd\x8a?i{\xd6\xe7U\xd1\xf4\xb4\xe9~i=M\x06\xf5d\x93\"uw\xf5\xe3c&e\x13\x14m\xd4U\xef\xac\xa2l}\xb7\x19\xdd\xd2\xa4\x9b\x1c\xa3Cd\xed\"\xd8\xd8\xd5\x97\x9a\xa7\x97\x94\xa5\xa41E\x90+\xd0\x0fI\xdd\"Wq\xe45 \x88\xce\x0b\xcc\xfb\xb2/\xbdS\xdc\x8a\x84\xd2\x0cP\x1eVO\x13\xa4\xcb\xf0\xa6\x0c\xf3kR\x9e\x97a^\xf6gC\xad\xcdx\x80\x19kj\xc30\xf7PdU\x1e\x91\x0dz\xc8\xbb\xc6\xcbZ{\x95\xce\xfb\xdb\xcaU\xe7\x8bz\xf5\xd5\x1d\x95\xec\xaf\x08\xc6^\xda\x916Jy92Z\xe5\"A\xcb\xf4[\xb99n=\x12\xc8\x8d\x1b*\x06]\xe6\xcaA\xec\xb1#$M\x0c,]\xc2\xe4\x04b\x9e\xd5`g\x07\xcd\xc2b\x18\x01\x03\x92\x14\xd6\xd1_\xa6\xb8/\xb5\x93\x11eA&d\x17X\x18\xaf\xcd\xb2\xfe\xb105\x9aY\xda\x06\xfd\x1b\xf3\xb9\x14\xa4\xac\xf3\xb8\x94\x8a\xa9N\xca\xcc\x9e2\xcf\x9c\x0bS\xe8\xfd\xba\x00\xc1\"\xc6\xf4\xf6\x1b\x00\x02\x83\xd3\xd5\xc6\x99\xadEz\x02\x0c\xa9\xc1\xd1\xa6vC\x8c\xe9s%\xb8\xd0\xfe\xc4\xe7Y7\xfa2#\x81\xec\xe2$\x07,\xb7Y\x1e\xd1\x87n\xe9t\xff\xa0F\xd4\x96\xf8h\xf6|\xabz\xb2\x19C><\x9b?{\x9d\xf1{h2o\xcb\xb2c\xbfj.\xe0\xdc\xe6Ul\xf3\xfch\xf5\xc7s\x97\x98\xf2\x9d\xf3\xc5b\xa9\x92\xacF\xbf\x1cF\xca\xe0\xe7\x19\xc3\x0dj\x91\xd5*\xfa\xfd`O`\x0c\xe7\xd1\xc4\xcf\xa3\xed\x9b\xa1Tf\x1bl\xe3\xcc\xab%\xba>SF{\xcc\x93\xc8\x8d}h\"{P,gL\x0bo\x87'\x06\x8b}\x04\"L\x93a\x01\"viB\x85\xb6|r\xacB\x96Q\xf8g7\x15)\xeds)\x01\xa6\xd7\x91\xbc\x99\xb2\xdc\"N\x95\xf9\x10\xd6\x13\xe0\xb6z\xe8\xa3\xacLB\xc0\xc5j\x96\xc1\xbfB\xb8\x81\xcd^\xd9\x8a\x91\xa3\x8e\x81N\xf6op\nOf\xff9\xfa\xe5\xc9x\xe7\xe8\xc5\xce\xff\x0bw\xfe\xb6sy\xf1\xe4\xda\xe6z\xf3\xba;\x84+\xa0r\xf6\x0c\x9c1:\xfd\xabiB\x8f\xb5\x02ul\x96\x0e\x7f\xb6*\x00o\xcc\x01\xda\x08\xf0\xa88\x13x\xd2\x9b\xe3\xb2q\x90\x89Ex~S^\x87\xee\x14*1\x0bl\xd3J\xec\xe0\xc1s\x8c\xe6\xbd/P\xf4\xfe\xd3\xdd\xbd\xbd.\x80\x1b\xf3\xfcp\xf6\x1aP_\xd2\xe7\xb0\x7f\xb0;9\xea\xabL\x1f\x96\x88b\x97\x8eggB\x07\xc3\x93ILw\x8f|\x98\x1cM|\x98\x1c\x1eu\x80u\xf1DYZ\xc6ie\xce\xa5$\x1e{\xf6 \xe0c\xaf@\xa4~\xb2J\xf5\xe4\xe7\x1fi\xf4\x98\x10\xaa\xb3Jo/\xdd\xd9\x95\xf0\x98\x1c\xecN\xad)\x04\xc53lU\xfc\xdfy\xc8)\xf7\xd18\x80\x11\xa5\xebvx\n\x82g\xcf`\xc2\x0c]v\xf8l\x8c-\x88\xb4\x89\x9c\xef\x190\x1f;&o\xeeo\xca\x12U\xf4\xdd3\xd6\xe1\x84eg\xe9K\x7f\xc0\x07\x93v\xcf\x83\xef\xdft\xbc7\xb0\xf7\xe9f\xbd\xc3\xf3\xe7\x98\xcb\x00\x03lcB\x83\x94\xfe\x9a\x1e\x0e\x1a\x16\xee\xd3\xb0q\xedn>.L\xba0\x9d\xee\xb1\x10\x1ep\x00\xdbt\x848\xba\x0d\xc6\xda\x03\x1aq\x1e(\x14!\x92\xb4&V\xd2\xdar\xf6\x99p\x86\x19X(i+\x93\xab\xfbu\xd6\x7fy\x8cw\xa6\xe3t'\x13>\xb5\x07\xbfS\xb8&h\xa8\xd4}\xea\x05,\xe8|\xd3q\x19\x90/\xeb,/\x8b:\x85\xf1\xe0\xd6\xf6\x0e5\x8a:f\xc5GZ1\xa5\xd3\x9cY\x86a\xf0y\xd0\xfb\x0b\xc7<\x02\xfb\x89\x15'\xa7\xc0\xefU\xc6\x8c\xae6\xfdb{\x1b\x90\x0d8=\x95\xee\xdd\xc3f\x93\xda\xdd\xf5\\\x16\xb1\xdf\x07'\xcaIX*~m_\xb1\\\xbbOw\x8d\xeb\xb5\xfbt\xcf\xb0`\xb4|_+\xafx\xf9\x81V\x1e\xf2\xf2\xa7\x9e\xc4\x0d\xd4\x07\xbbh/\xe6\x0d\x8f\x0e\xbac\xd0}\xa6\x1c?\x03\x0f\x9f)\xa7sV\xcfk\xad\n\x0d\xa2\x84\x84\xb9\x8b\x87\x9cX\xb3q\xddt\xa7\xd4FQ\x10)\xdd|6\xbe\xf0!\x9fMt\xbb\xff?\xb4\xffRd\xc0t\x0ctWT\x89\xd0\x9c$\x04c\xfc\xc4j\xf95\xa1\x102S\x0b\x97!\xdd\xd7J-,\xb0f\xe8+{_l\xb6\xf7O\xf7,gH\xf9\\_5c\xf8\xfb\x13HwvN\xda\xf0\x17\x05\xa8n9K/p\x01\xa5\xbc\xd1\x1aU\xc9K\xa5,\x9f\xe6+\"\x8ff\xf0\x90\x1b5\x92\x88y\xdad\xc9!\xf4/\xf2\xe8\x8b\xf9\xf4\xe81k\xd8,\xdf\xe5\xe5<,\xc3\xcbK\xe3j\xe4.\xf1\xe0\x0c\xd2\x99E\xbeW\x17\x1f\x83\xb3\x0c\x8b\xa5s\x01\xc7\x90\x06\xabp\xfd\xd8\xf9\xec\x8d-\xe0s\xa2_{\x06\x0e\xf0v\x8b\xa2\x8d`f\xc6D#9\xcb\xe8G!\xe5c\xc7<\xb1\x80\xb0\xc9d\xf7\xb1\x83CP#NH\xec6\xd2N\x8aY\xf3\xaf\x18\xeb\xd3\xb1a\xa8\x9a\xa8a\xd8Hmbbz\xbaY\x0c\x01q\xea\xdbb\x1bT\x12a\x14N\xe3\xb1s\xc6\xd8\"\xaa\x04\xe8\xd8\xe8\xbd\x81\x9d\x98\x1e\xb8\x9d1=l\x1b^\x17\xa7*XB\xf3\xa8\x94:lh\xc6\xd6\xf5\xd8\"\xc1\x0d\xc9\x0b\x8a'j\x0dS]TG\x86sn\xc6\x81\xe3u\xd7\x98\xd0\x1a\xb5]\x8b\xb9\xc6!\xads\xa6,{\x1bO\xa4\xe4K\xf9)\x8e>\xab\xb1\x98;bK\x82\xd8#Q_\x96B\x97\xb6\x08\x0f\x94\x8e\xba\n\xa3\xcf\xc6\x18\x0f\xa2%[\x98\xfb\x9b&\xab$\xb4\xc3J\x9b\xbf\x11\xb1\xb7\xc2.b\x1c\xa3&\x8d{\x02\xd5\xf6$\x80\x14\x16@\x81XI\xb7+X,\xb6\xd8\x93\xdf\xb1\xddb\xbd5}\xe2\x0f\xc0k\x86D+\xe7\xfa\xcd\xac\x83x\x1e\xfa\x86\xda\x93\xdb\xf1\x9b\x0e\xb5\x95{U\x7fzG\xdb\x93\x89\xf1[\x8f\xd6\xb7ir\xc4\xd35\xe0\xde\xd8Z \xcb\xc1\xe9}b\x1ci\x88\x16|\x8a\x1c6\x137\xc1\x83lV\x8dF\x17\xf2-\x99U\x1dq3\xe1[\xac\n\x8bX\xcc\xa5\xc4}\x0bb|\xdd\xc7\xe2? U\xdc\x801 N\xcb,\xda\xee\xde\xa6,\xda\x81\x89*\xc8y\x96B\x13y\x9f\xf5\x91\x8eqJ\x81 \x99q\xae3m\x14\x13\x0f\x86\xe6*\x9by\x86\xe0L\xeb\xf7R3\xe2\xaf\x98e{\xa3\x98\x9c\xa7\x1ek\xfe\xe4 \xb8\xf4\x02L\xa1\xa5\xa2\x84\x1c\x8e\xc1\xcd\xdc\x9cN\xcb\x9734V\x9e\x0f\x99\x1b\xb3H\xb0\xd5\xd0\xccr\x88\x1aL\x8a\xaa!\x01\x88\xd3\x8cc\x04\xde\x80gD\xe3\xa6E\xa1#\x1c\x9a~M\x19b/\xee2\xc5H6\x0fO\x1c\xab\xb8\x85\x01\xf8\xc0%5.1ghKYf\xe8\x98\x9fh\x9e\x13\x1a\x7fJ\x7f\x8f\x15?\xe4f\xee\x03\xb2\xae\xfd^so\xb6\xc6\xb4)\x03\xf3\xb7\xfd\xce\x83\xcb\xa5|\xa3\x1b\x93\xbafZO\xbeH\xa9\xbbwp\xe4\xb9\xce\"\xcb_\x85\x91\x08\xa5\xf5\xa8f%\x1e\xe0H\x17?p\x1e\xe0H\xe7\x0d2\xce\x1b\xe8\x10\x8d\x891\xf6\x9e\x1eJ\x8b\xe2n\xc6\xd0\xf9\x94\xfa\xe2 \xbd\x8d+\xdb\xca\xf4\xf1\x0c\xa6\x94~5\xd8)\x94p\xc6r\x15s\xf3\x8d\xd2g\xc9N\xab$\xa1'\xbcPP\xd7\xf4\xc2W\xa4#\xa8N\x0cy\xe2!\x16g\x15#\xd5\xa6\xa8P\x16v.N\xe4\xf0\x80\x91R\x19\xa1e\xa1Zv\x8b\x01\xd9##]\xcc\x93A\x1a\x12\xa2\xaa\x99 \xd3v\x05\x92V+\xc2_g\xed\xd7\xb7y\\\xb2\x97\xa1\xf2\xee\xc1\x87\x02\x19\xc7\xd8-\xe8\xb0\xe8\xcc\xa2\xe6\x90z\xc1\xf5\x90\xa8\xd3t\xc3\xf8V\xf9\xb00\xb3A\x96]\x89\x1a\xd3\x18\xf3\xe6D\xca\xe6\xecJ\x9bC\xc1\x99\x14\xba\xe8\x182\xce\xe1\xf3\xf7\x14\xae\xa5\xea\xfb\x149\x1c\xb9S\x1e\xc1\x87nh\xd4\x8cAz\xa3\x1d\x06q\x10\x8a\xe6 \x84\x86\x83P\xb4\x0e\x02\x8fa\xde\xde\xf4kR\x1a\xb7\xbc\xa0\xe5\x86\x9dV\x8fB\xd8}\x14Z\x89y\"\xbe\xdb\x11\x1d\x0ff\xc3\xf9\x16 I\x92\xe1\x1c\xdaD\xa9\xc1\x8f\xaf^\xbf\xf8\xf9\xa7O\x9c\xb0\xcc]\x0d\x0e\xb3 \xe7\xc70K\xdd\xfd]O\xcb\xdeO\xbe\xac\x938\x8aK\xfe\xfa)\xdd\x16w\x7f\xf7\x90\xff{\xe4I$\xcf \x18hgP\x05\x8d\x0c\xa9;m p./I\xf16\x9bWZ>\xd6AKG\xdb\x93\x05\\\x8a\xf5C\xea\xd6\x1abwz\xc0AI\xea\xee\x1eq\xaa;u\x0f<\xd7\x11&\x1b\x9f\xc2k\x01Z\x9c\x97\xe7\xe7\x1f\xab\x84\xfc\x14\x17\xa5\xff\xf2\xfc\xfc\xbc\xbcK\xc8\x8f$J\xc2<\xa4#\xa1e\x7f\xa2p\x85UHb\x92\x96\x1fIT\xe2\xcf\x1f\xdf\xbf\x95\xfff\x8d\x8b_\x9f\xb2\xcf$e?\xc22\xfc\x94\x87i\xb1 \xf9\x9b\x92\xac\xb0\xf0u\xcc;\xfd\xf7Oo\x7fz\x91$/\xb3$!8y,\xd1~\xbe\xce\xf2\xd5\xab\x84\xd0[\x8c\xbf\xcf }+J\xde\x92y\x1cbco\xe3\x15\xa1\xe8\x96\xa5\xe9}\x17\xae\xc8\xfc]6'o\xc3\xb5O\xff\xc5:\x1f\xc2\x98\xce\xe1\xaf\x15)\xd8\xd0?$\xd5u\x9c\xf2\x7f\xd8\x97\xe7\x7f\xfa#K&\x87\x15\xce\xff\xf4\xc7w\x88\xa5\xc5\xaf\x0fa\xb9<'\xd7\xf5\xcf,NK\xf1CZ\x85\xf3?\xfd\x91\xcd;\xcb\xd9\xa4\xcf\xd1D\x95\xa1sV@\x97\xfb|I\x08\xfb\xfc\x13eg\xf20\xfa\xfc\x92/x]\xc0~eU\x84#r\x82b\x9d\xc4\xa5\xeb\xf8\x02Z\x8cO0 ~X\xcb\x80\x8b\xd1\xc8\x04g\x11\x1e\xce\x8a\x8b\xf6\xbd\xa7\xe0%\x9fE\x867h0I\xe9\xf2E#\xf4V\xa14\xe6<\xdeJf\xd5\x05\x13\xd2%(\xf9\xa0@\"\x9bE\x94\xab\xc8\x02\\\xd7\x9e\x13\xaf3<\x14\x8e\xfe\xf6P[\x1am*\x96\x13\x02D\x0eH=\x1e\x86\xf5\xd0\x87\x9dI\x1f)e\xbb\xec\xdd\x94`m\"\xd7\x10\x80\x12\xf1\xf72L\xbf+\x81\x0e\x06V\xa4\\fs\xc8R0\xe6\xeaii+7\x1b$\x07-\x83Y\xca\xa9\x0d\xeav\xd2Y\xa8\xc7\xef\x13o\xa6\xbe\x1e\xa1\x87\x19\x16ZR\xa4s\xe3+\xb1\xe3B\xc8\x8b\x80Mlc\xd3\x9f\xa1\xe5\x8eF\x91\xbe\xff\xf4\xde1h\x1aeY\xcc\x83\xfa\xba\xd0^\xb7`\x0d\x1dl\xc9\xa9(w2=\xf4\\'^\xe4\xe1\x8a\xe8\x1d\x89'G\xe8b\x13\xab\"\x92$AA\xc1l0\x8f\x8bu\x12\xdeQ\xac\x97f)q|\x9c\xfb\xa1\x17\x84\xeb5I\xe7/\x97q2g\x99\xca\x83\"\xa7\x80\xd2\xf95\xbc \x8b(\x8f\xd7\xe5\xb1\xe33\xabV\x12DYZ\x92\xb4\xfcs\x9c\xce\xb3\xdb`\x9eEH\\zA\xb6&\xa9\x8bn\x03,j\xa7\xf3\x8c}\xfa\\T ^\x9f2\xc5\xf1\xb3_\x9e\xf0W\x98\x81)\x88\x92\x8cE\x8c/\xf08\xbd>\x81|g\xe7\xc4\x03\xae\x9a\x94t\x8d\xb3l\x96_\xd8\xad\x02\nWS\x89\x9a\xaf5O8\xcf\x94\xd7\x94\xa4\xed\xe7\xa7\x8c\xf0\x89\xabf\x04m\xdb\x0c\x93\xa2\x12\xb7\xf4\xfc:\xdce\xe8\x83\xfa\x9aK$)\xc68e\x0eX\xb4j\xe1\xaaY\x95\x08\xd2\xe0\xc7\x10\xbb\xa9/'\xe8\xed\x07\x87\x02}\xa0\xf7hDb-=~\xae8\x96\xf6\x01?\x9b\xa4\xabx\x17\xbe\xe3\x0e\xce\x1eW\x84\xbb%\xfa\xf5\xb0\x10\xa8\xa9\xb71\xcf.\x11t\xbb\x9e\xeb|&w\x85~\xf2\xd9\xa5U,\xcc7\x1av\x8e\xe1\xa3\xee\xc1\xc5?\x98\xec\xe7\xf1\xa34 #g\xce\xe5e\x94\xe5d\xe7\xd7\xe2\xb2X\x869\x99_^:\xa2O\xf3;\x8a\xe8\x1f;\xa1XL(f\x13\xfa\xed\xa1o:6\xc4\xe9DYZ\x94y\x15\x95Y\xee/\xc3\xe2\xfdm\xfa!\xcf\xd6$/\xef\xfc\xb8\xf8 \xce\xef\xfb\x85\xbf\xe6\xc5o\x8aW5\xbf\xe4\x97\xd9OY\x14&\x84a\x03_\xa0\x05\x9fc\x1e\x99j\xdbl\x95'{^\xb00\xcaTtQKf&\xf6\xfbV\xd6\xcc\x98\xa3\xcau+\xc6#\x9er\xdb\xf9\xb2\xb9\xc6\x18\xd0\x98\x99\xd4\xa0\xb8\xa5\x0d\xcdUfs\xcb\x10PA\xc8,\x94\x17\xbd\xfb\xb7!W9\x9d\x1cy\xee\x96\xec\xeeBq\xcb\xbe\xc7s\xde\xfb\xe0\xb0?\x1c\xbf\xe3\xb0\xa1\xfd\xc9%]\x8a:S>\xf7O\xbaD\x83\xaff\xc8\xbe\x1d\xc5I\xe8\x8d\xb7g\xb6\xaf\xe1\xed\x9a\xa1\xaebHvf\x17\x041@\xda\xee`\x9e\xa5*\xffI\x9f\x07\x06\xbc(\xe0\xc6\xe5m\xe66\x92\x8d\xeb\xad\x9d\x19&\xc2\xfb\x99X\xf7v\xc3[\xb071\xcb\x15[\x9cm\xebF\xd4r\xd7\x02\x89\xb7\xbc[]\xa4K\x08\xd5\xf1\xbb^\xefm2\xed:A\xfd[\xd5%d\xaf\xf3\x11\xff\x9c\xce\xc9\"N\xc9\xdc\xa1H\x84\xc9\x8f\xf8\xabwU\x928Fg1\xa4E;\x119\x0e8\xbf3\x94Jc)g\xc4\xe0\x98\x02QX\xa7\xe6\xd5\xf4\\\xe8\xd1\xca(\n\xbc\x12\xb1\xe7q\xac\x9d\xa1\xb0\x08\xb5\x00\x0e\xab\x80\xc3u+v\xca<\xcfFV\x03KBCP\xe3 m\xdd1T=\x80\xc1D\x02\x8c-\xa8?\x0f\xd3y\xb6r7\xdeM!\x92d\x86\x8a\xaeC \xc2(,]}\x17\xe9xK\x1f\x1c\xef\x92\xd2\x8e\xa3Q*\x92\x04q\xf8\xb1{\xf0x\xb4\xbbk\xbe\n\xfb^M\x8f\xb6/A\xee\xc6\x1c\\\xc7\x9c\xf4\xe3\xf2\x93\xc7\xae\x00\xdd_\xad)fA\xf4\x9bn\x8a7x^\x93\xddn\xaa\xe7\xa8\x9fS\xfd\xef\xa0z\xf6\x9fZ\xf0\xf1\xbe.\xf1\xcb\xcc \xaao\x12\xff\xbb\xf1\xf1\xc1\xc4\xb4\x00\xc1b\xc8>Rn\xc2^ $h\xdb\xe6\x92\x10\xa3\xad\xf3l\x15\x17\x843&\xa5+O\xc4\xea\xc5\xa4y\xb4\"\xd3$\xfdN\x0d\xd2\x9e\x1f\xc29|\xe0}Id\xa5=\xf3!\xea.\xd2\xdalX~\x1e\x04:\xceI\x91%7\x84\x03\xd0\xba\xf0W\x96\x858\xd7\xddZ\x1e\xbe\x82\xff\x98\xec\x99\xa5\x05\x93\xf1#O/\xb3?m\xb2JJk\xc5n\xc6\xffq\xd0L~\x04\x0e\xcc3R\xa4\xdf\x95\x98\xf7g]BN\xae\xc9\x97-\x8b\x8e\x94\x83\xd3\xaf\xba\xd0\xf4\x82b\x8e\xe4\xfe\xabiD\xeep\nO\x82'\x9a|\xc7\x88j\x9d'\xc1\x13\x07f\xe5\x85K\xb4\xbd\x128\xb6\xb5p0\x04o\x93Y~\x81J%\x1f\xb6\xac}@\x0f.7-\xef\xa6z\n\xf3\xe5'A\xa3\xfb@ e\x1b.Tn\xeaN\x0f\x0ft/\xdc\xb8~u\xa8\xbfB\xd2\xceD?\xc4\x01W\xc3 \x85\xd1\xf6\x08\xc8\xeb\xf7g=\xc0DPE\\\xe7\xa8\xed\xd8\xf1\xc0\xaf\xad\x84\x8e2\xd02\x90\xe0\x04\xcb*\xad\xbcFPS\x17I\xe2\x94\xb3f\x8e\xc7\x96\xa1\x9a\x0c\x83*+\x90\xe5\xc3\x91\xb6\x8c!\x9b\xf6\x0ckuWi9I\x0f\xd2\x11\x10\x93\xd9p\xd7N!s\xeb\x1d\xf3:\xb7\xccBPW2A\x9d)@\xb1s\x0f\xff\x1e\xfb\xb7\xc1\xd8\x87\\G\x82h5u\x0f6d\xb6L\x82\x9d\xd4\x9d\x1a\xc9\x9bC\xb3\x01\xc7dl\xf6CAi\xc6c\xc1l\xcc\x1d\x94\x98\xc0G\xfc8Eb\xf4\xb7\x0748j*\xfc\xa6[3:\x97l\xf7\xd0\xbd\x1bC`0\x0f\x84\x98\x87\x9f\x0e)\xf3[v\xb0\xb9U\xb0p\xb5\x08\x06\xbd\xd4Q{;\xb8\x00\xf6\x9a\x94\x92\x84\x89\x0d{C\xbf\x91\xdd\x03}K\x84\xcf\x90\x99\x12\xdd=\xd4\xad\xde\xb9\xcf\xd0\xa1\xceQp\x9f\xa1\xc3\xe9?}\x86\xfeA}\x86(\xaf\x94\xbaO=\x1f\x9c\xb7\xe1\xfa[9\xa1\x1d\xea\xde%\xdc\xebdj\xf6:\xd9\xdb\xd5\x0f ;P\xfa\xf1\x0by\xedG\xfb\x81\x18\xe1o\xc9\x11\x93|\xb628\x06'k\xe4\x0dR\xd5\x8a9\xba\xc4n\x89\xe7\xa1\xa4\xe7\x81\x82\x0c\xc6\xb6\x86\xfd\xc0U_3z\xae\x8f\xc6\xe3\xa7\x93\xa3\xa3\xe9\xfe\xde\xd3\xbd\xf1\xd1\xd1\xa4-nx\xf2\x9f\xee\xd9\xf1\xf8~6\xd99\xba\xf8e\xfe\xbd\xf7/O\xfa\xd6\xc0\xa2\x86\xc1\x10>|:FZxk\xcb%\xd2U\x13\xfa\x13\xc2\xb2\x9f\xc8F\xae13v\xe3hg\xeb\x94\xf9\xee\xe7AI\x8a\x12u\xba\x88\xb1\x84\x0b?\xcb\xffy\xcaC\x97\x96\xf0\xac\xd7\xefd\xc8J\xf5\xad\x82\xed$Xb\xeft\x0c\xf7T\nu:\x08m6\x17\xc2\xec\x84\xd5r\x1e\xa2\xb7\xe1\xc9/\xc1\xfd/3\xf7\xecx\xf6\x9f\xb3_..\xbe\xbfwg\xcew\x17\x9e{v\xec\x9em\xfd2\xf1f\xff\xf9\xcb/\x17\xf7\xbf\xfc\x12x\xdf\x9f\xfd2\xf1~\xb9x\xd2\xbe9O\xfe\xf3\x97\xdb\xef\x1fu@\xb8\x7f_\xa3o\xde\xd2\xc2\xdf\x8bm\xe8>A\x8a9k\xaa\x90bu\xc1U\x96%$L\x9b\x12\xc5Ik\x0bY1z\xbe*q\x9c0\xbaX&\xff\x12_\x10\xb6Cq*d\x88\x1b\xa9\xf9j|\xd4\x96\xe42\xf15\xb9!).\x9d\xf2\x13I\x03!\xe1^\x85_~\x8a\x8b\x92\xa4$o**\x855\xb3/\x8d\xac=\x84|C\xd0\xd5\xd9Xlo\xcc\x04\xda\x9a-8\xedi8\x1bD4k[\x00\xda9L}H\x83Wt-_\xad\xe2\xb2D\xdb{,k\x10\\\xb3\xf2\\\x0d\xa1\xbe\xd5\x16\xbd\xa9\xc3\xa9\xe3\xb7\xea\xfb\x89\xf6}A\xf4\x1av\xa8a3\xd1\x06\x91\xc9\x18\xdd\xc3\x99.\xd7$\x9cH%c\xeduV0K\x8cN\xabm\xf3\xb9\xf2\xd50N\x0f\xea\x8c\xc8*\xee\x8e\xc8 )\x11,\x96\xcd1\x8f&(\x1fsW\xbb\x06\xbf=Pr\x81\xd0\x999M\xd4AwK\xae\x16\xe0k\xee4\xdf*gF.\xedr\xe1\x97i\xa2\xd2x|\x0e\xd9\x14\x97b^\x91!9[\xb0\xb0\x1fb\xf1\x0dY7\xe9\xec\x17\\f\xc7\x1d\xf4~N\xa3\xb0\xba^\x96>Ti\xb1&Q\xbc\x88\xc9\xbc\x9e\x1b\x0e-\x00\xf7;\x9e}\xd7\xf1L\x927\xd6\xdf\x82\xd9t|)\x99 \xefB\xa9\xf6\xd0Z\xe3\xac\xc9\"\xcaW`V^\xd8\xc1.\x83\xcb\xa9\xe75\x0e~\x9a\xed\xb9i\xc9\xba\xfc\xf8\xd2&G\xbfE\x9ah \x7f\xd2\xe5\xca'5\xea\xab\xfb\xb4y\x17\x16\x17r\x82\xde\xb8\xaa}\x92\xb7,\"\xdcD4\xdb\xf6\x91\xed\x84\x92=\xa0J\x813)\xb9\xadG\xbf\xcd2\xe8!\xdct\x1d\xe9\x8d\x83\x0c|\xee\x92@\x0c\x89\x92\xfc\xcd/$\x87}\xfd\xfa2\xae@\xbb\xd2\"\xcaaS\xc4\xc2\x06\x11\x91\x9aOn\xe0\x14fZ\x91\x0f\xe4\xc2X\x91\xf8\xa6\xcet\xb0J\xbb\xbb\x0d\xf3\x94\xcc\x81\xa5\x0b8\xa5\xc8\xbb\x85ZP\xdbjD\x9b\xc7\x06D\x84\xddT\"\xf6\xb0\xde\x1d\xb7)x\x0e\x15vi\x19\x0dsa\x88\xb2\xb4\xc8\x12\xc2\x80\xbf\xeb\xb8i6'\x1e\xd0*\x18>s\x9d\x15E|\x95\x10P\xc8\x84\x15Ye\xf9\x1d$$\xfc\x0csR\x92\xa8$\xf3\x00\xfeu\x0eI=\xeap>\xa7e?\x17\x04\x08\xfbJ\xc7\xf6\xae\x07e\x06q\x1a\xe5\x84\x02\x9b$^\xc5e\xe0\xb4\xb6\xb4\x89\x93j\xa4\xbf\xc4\xf8\xcb<\x8c\x90\x08U\n\\\x91\x0e\xc9v\x932\x14i\x98\xaf\x96^\xb3?\xf9\xf67\xbaY\x82\xc2\xa7(Hy!\xd1\x95&dS25\xd2*\xbb!b\x0et\x98\xb1\xc7\xe3\xbb#\xc2\xa3\x9bNT\xf0#\xa0Y+\x82\x92\xfcKXi57\x10o\x00\xf6\xc9\x96#\xeeYkud}kyS\xfb\x7fQB\xe9w\x81`\xd8\x8c\x0e\xbf\xf4\xcb\xdb\x11w5^\xb0\xfbl$$j\x0c\x901a\x1a\xddQ\xa1s\xcc\xddT\x02k\x94\xea\x97V\xf5\x14\x83\xbdr\xd9T\x0b\x16)\x90T[Q\x15\x98\xaa/\x19<\xd5\xe3-\xab\xb8\xd0p\xa4jlX\x9d@\xb8\xb3C!\x8e!&\x0d\xf0\xc5Hg\xe1E3K\xfa\xab\x99\x17\x9d\xa5R\xc0'\xda\xeeS\xf5\xdf\xc4\xfe\xab\xf6\"I\x86\xf1Vf]{\xebz\xf4\\\x85\xad\x8e97!\xecYf\x1c\xddm\xf3Lg\xf4Q \xa0\xe3\xdc\xed\xed\xce{\xd1\x1e\x92\xb97\xebA'\xe8D\xaf\xccX\xdf\x1en8 \xb6\xb0\xbd\xd0nGLs\xdb'z'\xda\xf9\xc1\xe5\xd0`+\x18y\x9a\xdc\xc2\xd3X0\x83\x1e\xee\xbe Oi\xa1\x8bO\xea\xbbqbotV\xdf\x99\x1dh\xf1\x1d|%\xba\xb6\xd1v\xa8\x93Ag\xd9D\x96\xb6i$\x16'I\xbf\xc6g-\xe2\xcf@\xf9 \x1a\x1f\x8eav\xd17\xd6\x97Y\x95v\x0b\x04tv\xdf\xa6\x1e!\xed\x8dm\x9f\xb3\xc68\x83/\x83!u&z\xee\xd4\x15\x84\x05j?\xbc\xd1\xb8\x11\xfb\x0c;\xc2\x85\xa9_\xf5\x0b 5q.\xcf\xc5!{\xbeO\x0e\x9fz^p^\xe6$\\q\xd7\xdd\xe0# \xe7\xe1\x15Z(\xe0\xef?s\xbfg\xf6\xc1\xe4)\xfa\x86\xfcX\xad\x13\xf2\x85\xa9C1MLP;\xf9\xb1zGS,\xfd\x10\x16\xc5\xa7e\x9eU\xd7K\xa6\xfb\xd8?\x1c\xa4\x83\xed\x0d\xd1d\x0ett#\x92\x99\xb9\x18\x07MyW\x93\x7f\x06\x95?h\xc7\xc4$$\x89\x0b\x8c\xb4\x02\xc2o\x83!\xa1\xb4\xcc\xef\xd4\xa2E\x9c\xc6\xc5\xb2\xcf\xc7\x87>[\x9dK\xa0?\xb5\x96\x8fujG\xed\xa52*{=\x0e\x93r\xa3NQ~\x84\xd6%\x0fD8({\xa3\x80\xfa\xdd5I\xe7qz\x1d]\xed\xecP6\x8f't\x81\x1cW\xd0\xfam\x9b\xf2\x10\x0f \xa2,\xffL\xe6\xdcc\xb5x\x9d\xa3]\xac\xa9XlRIy\\\xd3g\xa7\x86\x00\xa8\xf4y@\xb5\xb7\xc1V\xa8\xe3r\xcb\xb7i\xd5fCB\xee\xe4N\x82\xab<\xbb-\x18\xf12sn\xc6\xc1d\xec\xf8@\xff8\n\x9c\x8b:\xfaW\x13\x0f\x8cA\xc9\xb1\x0f\xfb\x1e\x8f!\xcd\xbci\xb2:\xda\x8f\xda\xdb\xaa\xbe\xa6\xe7e\x88Z\xd9\xeb\xf6pP\xc8\xe2\xee\xeby\x04\xa3 N\x97$\x8f9L\xd8\xd5\xd36\x08\xb1\xa3\xf9\x90\xcc\xc9:'QX\x92c\xbc\xdeO\x0d\x0b\xd8V\x85'\x1c\xfa\xe8z%\xfa\xac\x99\xc6i\xec\xf1\x906\xed\x1aK4\x81h\xf2\xa6(\xde[\x1e\xfcfH\x0c0\xf7\xe1\x86\xf7i\x07\x0cw\xf8\xb1\xe5\xe5\xb5\x114\x03\x97\xaf\x85H\xb23X\xc8N\x1f\xaaW\xda\xf7D\xdcb\"\x0b~\x0dt:\x82\x12\xa6\xe5x\x9b\xcd\xd1\\l\xab\x94\n|\x16V\xd7m\xd7\xd3K(W\xb6\xc5\xfc\xf1\xe8\xf9x_\xbf1PZ\xb5~5X\xc6\xd7\xcb?\x87%\xc9\xdf\x86\xf9\xe7\xf6\x16\xd0'\xc2\x8a\xa2\xdd\x7f\xef\xff`a\x18\xdd\x19L\x0e\xe0\x18&\x07\xbb\x87{\x96UP\x86\x02\\k\xcbh\xd3\x18\xce \x86c\xbe\x16Q\xf3\"\xa2\xe4H\x04\xc7\xb0\xf0\xcd\x8d\xc8\x19\x15[\xef\xbd\x06\x94\x87\xc9\xcb0I\x98\xc0g\xe2\x0b4@\xe6?\xe6a\x9c\xca\x85\x0c\xe2i%\xeaw\x0c3\xa8esR\x94yv\xc7\x0b\xcd;\x92\xe0;\x9e\xe7fN\xa2l\xce\xbd\xablxJ\xa9C?N\xea\xdePB&R\xc1\x00kP-\xbb\xbf\x07\xa7*\x17\x87B\x98$spX@w\\\x9b*\x03\xb3R\x9d\xe2.\x8d\xb8\xb8\x04\x7f_\xe1U\xfe\x90g\x11)\n\xed\xe3,E_\xd1N:O<[\xdd\x94\x92\xfc\xdc41Moe\xd8h>\x9b\xe2\xc9\x99 \xfa.\x8d\xba\xeb1\xf7f\x1cxteG\x87\x94\\\xec\x9f\x95xJ}mE\x07\x0d\x85Q3\x07\xe2\xee\x91\x84\xa4\xbe\xf4\xb7\xe2\x86\xa5?\x0f\x88\x8a\x89g =\xba#G\x8aggGB\xee>\x1a\xe0\xbb\x0dNrc\x1fr\xcf\x97\xb0\x94\xfb\x8as\xe4~k\x1f\x98\xd0\x94 E\x85<\xb5\xe4\\=\xd3_\xd1\xc60f\xbfO\xc5\x1b\xcf\xf3!\x91T\xc5\x83\xf6\xf4R\x05\x8aL\x8en\xdae\"\x1f{\n>\xa4\xbbQ\x89\x9f\x1c\x9e\xa3\xe6@\xc2\x8b\xe8\xbc$V\x8aBN\"0!K*\xc1\xde\xb8\xac\xf7\xe6\x9d\xdc\xcad\xd0l\xae\xa4\xd9\x98&\x91B_\xf4\x03\xf1\x88\xb8\xc6\x1c\x07moc\xf4QA\x0ca\xda\x9b6q\xc4!\xf2\x9c\x969\x06(\xfc\xe0\x96\"\x86\xa5\xc26\xe6n\x03\xbb\x07\xcd\xf3\xd6:vb\xa4?\x0c\xd9\xb4\x04\xcd@t\xd0a\x16\x04\xd5\xdb\x87\xf2y\xa6\x8a\xa0\x98\xcf\xb6~5\xf1o\x84Lv\x82#\x069\x92ln\x89\x02\x02\\\xeao\xe2z\xcd\x98(k$\x05\xe6\nu|\xad\x90\x81\xcd\x82\xad\x1b\xda!\xc7\xa8\xae`&O\x98^\x0e\x95d\x05\x0b\xea\xc6\xa3^\xe0j\xf8\x10\xc2\xe8\xd4$L\xa3\x0f\xc69e\x88\x00\xcd\x7f\xfd\xfa\xf6\xb1\x1bSg4\xf3\xc1q(i\xc1\x10\x80z^F#\xac\xda\x81R\x18IB\xc9\x15\x8bP \xe3c\xcdd)\x8fg\x17\"0<\xc1\xce\xad\x0d\xcf\xb4\xcfz\x17\x05!d\xc4\x9d\xf2\x98\x9a\x8f\x0f\xa2e\x95Z\x18-\xf1\xa0\xb1P \xd29v\xd7M@\xc4\xeb\xe9\x16\xf0\xd0s_\xef\xd0\x04!\x93\xc2\xcd\xc11D\xf5\xa6E>e\xc0\x12\xed8\x98\x17\x8c\xde\xf9\x1a`z\x1b)\xa8\xe8S\xbb\x88\x0b@d?\x0d}2\x1e\x90@\x86\xf2\xado\x81$\xc3\xe0\xf0\x97n\xff(\xc1Abtx%\xab\xb10ld\x85\xfa\xb8\xd0d\xa2\xe1-\xd9O\xbe\x8c\x83\xc6un\x85\x9b%G\xa7\x0d\x0bc\x95Pj\xc0\x1b7A'\xc6SviU\x1aN\"\xda\xeb7\x8e\x05\xf2\xd3\xe7a\x182xe\x9d\x94\x80\xf1_\xbatM\xec\x10\x0d\xe46\xd59\xdd\xdf\x03Q$\x07\x14,Z\x88\x17N\xad T\xd2\x80\x99&{\x18+\\\xd59\xe7\xaa\x90;\x1a\xb8\xa4]\xa8W \xf6\x86\xe6fw\xc8\xd2j\xd3\xa4/\xd9\x94C\xeb\"5\x92EJ\xf2R0p\xad:\x8a\xd4A\xab;e\xe55\x16*\x85\x00I\xbb\x03,\x98\xc8\xec\xe2\x04\xca\x13\x8fN\xa3*\x96,4 \x12\x82t\xd9\xac;\xadyy\xb7\x81d\xaf\x18\xdf\xee\x96J\x1f\xee\xe6\xc4\xfc\xd7\x84\x9b\x93{-{\xac;l:\x8e\xc9\xe5J~0\xcc\xe9\"\xa8%\xae\x9b\x05|\x97U{\xf5\xd2\xbbv\xde\x10\x18\xc7\xe7hL7\x1b+\xc4E#\xf9\xe5\x96JZ\xc5f{)wC\xc2y\xe0\xf8\xe0\xfc\xf8\xea\xc3x<\xde\xb5\xa4F\x83\xf6\x05\xaf\x8b\xed.\xbb\xf8\xda\xb5\xb1\x08\xdc\x13n{\x9b\xff\x15,\xc3\xe2\x0d\xe7\xb7\xc0\xe6\xd3\xf8\x9a\x97IQ\xc7\xda__\xd0\x8bK\xef\xc6\xb0\xda\xbe\xe5,\xac|\xc3\xc8:\xdc\xef\xfa\xe5I\xb5#\xcc\\66-\x1b~\x93\xde\xf6\x15\xf0T\xcd\xdb-\xc9\x8a\xcc\x8f^\xf7a\xcb\x07\x84B\xf3^\xf1]\xedG*5^\xb6\x94\xf2>\xac$\x10\xb1\x8e\xd7\xa4\x0f:0 \x80\x8ah\x9a\x1c\x8a/\xc34\xcdJ\xa0\x0d\xf9\x18\xa7>\xe7\xeaM\x9d\x15\xd1zn\x8b$\xed\x1a:$\xebY\xe4Y\x03cn&\xbb*\xc6\x1e\x19\xdfa\x80\xe4X\xa6\xab\xea\x84\xfb>\xac\x9b\\\xce9nh./\xe8\xd2\x8e\xd2B$\x0d\xd6J*h\x91\xd9|\xf0\x91Zc>\x01\xdd\xfb\x13\x80\xe7\x10\xb4\\A6\x81T\n\x0eM\xa90\xca\x17\xb0\xf0\xd3\x02\x00Rj\x1b\xd1%sr\xd5$\xd3j\xeb[R\xf0}\xd1\xfa\x9d\xe7C\xcc\xe5\xeeg\xc3p\xb7\xa0\x06\xa4#\xc3\xb6>\\\x94$\x07\x92\xcem\xc1*L\xd4\x8d\x84\xa2\xf1\xb0\x98V \xefb\xca\xc3^\xeb\x9c\xb7\x9dK\x07I=c\nZ\"\x9e\xca\xa2H\x00\x89\xb8iH\xe53\xe6\xa9\xa8\x06\xe8\x7f\x1b\xde\xe1Ua\x0b\x81\xb5\x11\xf4\x14PfP\xa0\xb1\x80cM\xd6\xdf\x04\x05a= 9\xa4\xaa\xa3\\C\x9f\"\xd7i\x9a\xa5;\xac\xd9'\x1c\xd3 \x9f\x83\xc1\xbf\xb9A\xae\xb6\xee\x95\xba\xee9+\x89\x05\x1f\x1a[\xf7 f2S\xe6\xe6\xe7\xc6*\x01V\x19\xee~-\x0d\xb2\xed\x0f\xdaq\xf5*\xf1MM\xf7!\xf0R\xd7\xe8\x19\xd5A`\x8e\xdd\xdf\xdc)~}\xb1\xc7\x1e\xe9\xb4\x91<\x92\x9f\x87\xda\x08\xc3\xdeP\x8e\x06_U}A)\x11\x19K\x17\x9e\x99\x05T\x16\x8co\xbd\x03!J9Z|g\xde\x99Y\xaa\x16[\x8d\xac\x86\x91\xb4\xed\x02$ \xd73 \xaaf\xd0\xfc\x1d3\xdd\xd7d_c\xcb\xba\xa0\x05Q-\x18\xc4\xeb\xc1\x04\x0c}\xe7&b#k\xb3\xb5\x1d\xfa\n\x0b\x17\xdc}\xd8\xf0\xc6\x1d\x83A\xf3.?B\xacp\x0cq\x8f\xaa\x8c\"\x1cc\x1c~\xf9\x11\x92\x07c\xee\x05\xf9\xa17\x9d9;\xdb\x8f&\x0b\xd2\x1f Q\x8ey\x19\x8e\x8dL\xbe\xb1\xaeU\xc83:\x85\x89\xf9\xf02I\x8f,) \x1b\xf8\xd1 \x9e\x8b.\x88\x152\xce\x0f/\xb0/\x85\x82\x836 CO\xd5 \xe2I#\xdc\xd9i\x1c\x8d\xba\xda\xae\xd2!\xad+<\x9b\xda\x8bA\xa7!4a\x0c\xc8\xb3\x1f;;\xbe\xa4\x15\xa5\xe4\xab\xa4/\x93\xa4\x1e\xf8\xcb\xa8=k\x0bL\x98\xf6\x8c\x93\xc4\x9dD`A\xca\x1f[\x1a\xf3nZ)\xb6\xa5A\x14\xa4V\x19\x94\xd9O\xd9-\xc9_\x86\x05\xf3\xb0\xd8rg\xce\x92|\xa1\xdc\x11\xd7\xbb\xd3\x7fw\xf0\x8f\xb0\x88\xe2\x98\xfeq\x15\xa7a~\x87\x7f\x85\x059\xd8\xc3ZQ1\xe5\xff\xeeL\xf9g\x93\x83\x84\x88\x16\xc4\xdfyx+\x19\x19\xb9,\xd3\xa2\xa7\x8d\x03\xad\x8cp0\xb59\xe2\x90\xbbm\x8d[\xc1,\xae\x9bt5\x12{@ \xccM\x98 )\x10\xf7\xf6\xb6\x1c\x98\x8e\xb1\xb8\xb5\x8eZ\xc8\xbcr\x19\xde\xe4\x8d \x8bP\x1e3\x10\x8774\x17\xb2Y\xcan)@g\xc8J\x01\"\xe2\xc6>h\\\x0b7\xfdZX]\xb7y&\xd3\xb2)\xd3\x04fiDj\xa1[\x07\xe9F\x1a\x93\xa3\xb1/\x99f\xb5E\xd4 !\x95\xbc\xc5\xa8\x0c\xbc\x82\xb5\xe9\x92\xf1\xdamt\xad\xe4\xdd2\xa8\xb6k\x0bt\x1d\xa0\xf0\x01\xb4\xe7\xd6\xbe\xe6\x852\x1e+\x9fk\xe9\xde\xed\xec\x9f\x9e\xe1~1\x89z\xd3\x1a%\xf7\x8d\xf8[\xbb\xa6U*\xd7\xa9\x7fi\xb5\x9a:\xbd\xfc.\x93\x94\xa4s\xd7\xf3\x81\xb4\"8\xfd\xa1\x19\xa9\x9a\x9b\x11\xb3\xe8\x1f\x8d=\x8a\x0e\xdf\xacVd\x1e\x87%\xd9$\xb5~\x7f\x0e6\xfb\xbe\xf0\x03\xd2\x1b=\xe2\x9b\x0c#u\xf7\x0e\xf7<\xd7\x833\xee\xbf\x8c\xc9\x13\xd1\xb0\xf5p\xff+\xa6z\xd3\x84o>2\x87R\x99\x9a\xd3\xc2\xed\xea\xc1\xc3*\x83k5G\xec\xedPC\xfc\x1275\xb5h\xee\xca\x07\x850\x8a\x0c\xaf\n\xf5M\xf4Uy\x02n\xea\x90\x0d\x0b\x1f4k\xf4\xb8\x95=\xa5\xb2\xf8V\xaa\xdf\xa1B \xc5\x00\xb6\xcc\x1b\xd8k\xfc\\\x17Z\x84\x05\x86#h)\x0bo\xb1\x10Y\n\x16\xf0\xfc\x14\xb3\x14D\xee\x82\xa7\xfc^\xc6\x8d\x93\xd3\x0eDn\xe1.<\xef\x04X\xe4-\x18\x8d\x0c\xea(\xb4\xf3\x91\xa5\xac<\xccP\xc2Q\xe3\x8c\\\xf8\x90\xbb\x89\x94\x02E\xc3\x8f\xbc\xb47\xd3\xfc\xa0\x93\xa6xH\xb4\xb0\x91\x10Tj\x03\x18F\xd4\x9aDo\x96\x14\x8fHa\n\xc2\xc4\xeeA\n\x12]\xa5\xbcx`R\x82\xeeA5\x07\x8b\xd6\xad\xf3\x8b\xb0P\xcc\x9f\xc8\x97\xf2]6'\xaec\xcb\x99\x92ah\x01\xdbx\xb4\xb0\xb8]\x029\x0b\xfb\xcd\x1d\x858\x82g\xcau\x16#\x9bX\xf1w\xb7u\xa1\x90.\xb1!v0\xfdp\xaai\xe5\xc4c\x96\xa8\xa0\xcb\x9aJNY\xe4\xb8i\xe3\xc3\x08u\xfa?V\x1f1x\xe9Zf\x86\x176\x0e\xe6a\x19b\x98\xc2S\x18\x8d2\xf8W\x982s\x07l-(\x96\xf1\xa2t1\x04\x05\x17\xbf\x08\xafkN\xe1\x95\x06m\xd5\x83\x17dW\x05\xc9o\xd0R\xca\xbcx\xd12\xcc\xc3\xa8$\xf9\x8fa\x19\xb6\x82\xfe\xb3V,\x16\xeb\xbd\xf4\x02}X\x9a\x17\x0cai&X\x99\x94{F|(/P\xec\xc0\x15\x94\xa8\xbde\x04\xb0iq\x86\x88\xc5\x1e|3\x1c\xb6^\xe3v\xe4$$p\xec\xaa\xb0&\xc1\xb4\xe4\xf6f\xf6B\xe9\xe8D\xdcO\xdaM\x9d.\xa8C\x8cj\x1c\xca\xdb\xaa\xc4\x84|\xef\xd9\x8e7~\xb1\xb1\xdbze\xbf\x95\xc6\xa6\xffL\xae\xfe#.;:\xb0Th\x1f%\x1bH1\xdf\xa8\xde\xe0\xbb\x80\x8c_\xee\xea\xa2\n\x00\x16\xb8\xd5\xd8lA\xcaO\xf1\x8ad\x15J;\x0c\xdb!U\x182\x80\xa6\xba\xcb\x0e\xfb\xd8<\x98\x96T\xeeA\xba\xb2\x83\xe8\xcaoBeY3h\x9a\xb2f\xaay1\xa7l\\\xfb\xd3}\xfe\xef\xc1\xc6y1;F'\xd2S\x1e\x9a\x92\x8d\xa1\x86\x8f\xa7'P\xc3\x0e\xe7\xdda\x87\xd5X\xe9\x96|WV\xc8 \x84t\xed\x0e\x92,\xc2\xc3~\xdcJaF\x9fe\\\x94Y~g~\x99\xadI\xaa\xb2\x7f\x86J\x98\xf2\xab\xb7\xd6\xeb8\xd1+\xd9\xe6\x0b\xe2\x86K\xf1\x82\x9b3\x7f\x8b\xc9\xcal\x89\xfa\xccV\x1cta\xd8wmxr\xc3\x1dFm\xda\xb8\xb4C\xc5\x9b\xd7\xf1\xde\x0c\x82P\xab=Im\x08\x13\xf3\xb0Ih\x15$\x82B\xbb3\x87\xae\x95\xe3\x83\xf3C\x92]\xd1\x7f_g\xf9\x8a\"=\xe7\xc2;\x01\x16\x16\x13\x13\xf3U\x08\xc0]\xcf\x0b\xe6YJ\x90\xc4E\x8dE\x07\x92\x13z\x97\x98\xe5\x10\xb4\x93\x1f!\xc4)_3\xc693;QV2\x0b/\x86`5,\x91\x0d>\xec\x0b\x93;\x8c\xee\xe0P`\xe0\xd0k\xcb\x0b]=\xc9@\xaf;\xbb$\x1eW\xcf\\\x9f\xb8@h\xd6\xe7>\xdc\xf8p\xe7\xc3\xb5\xde|\x81y\x0f}\x98\x1b\xdc\x92W>\\\xfap\xe5\xc3m/\xbb\x08\x82\x83Z\x83\x08\xb6\xfa\xa2\xc6\x05/\x8c\xf1 \xe8#\xc2\x15v2\x00\x18\xef\x8fe\xec1\x87\xe0k*1C\x8a\x8ej\xd0\xacf/\xfbi\xf8\x86R8i\xad\xdd\xea\xfc\xca\xe2\xfce,\xdddD\xc3Gb\x00vmt\xf9\x05\xbd\xa5G\xe0\xc0\x1bq\xa0\xdb\x95\xce\xe1\xb4^[\n&n\xdaU^Y\xd0\xf1\x0bT\xca5\x82\xedV\x85\xf7p\n/f fNz1s\xfe\xed\xdf\xea\x8b\x85E\xe8\xfc\xf1bvcH\x1a\xfd+\x05\x86L\xdfxc\xe00?S\"\x00\xce\xe0\x1c\xce\xe0\xd6uHZ\xe61)\x10\xa2\xfd\n\xf6\xd4uoX2\xb7<\xbc\xc3\xa9\"\xa2z\x11\xf0\xafio\xef\xdb\x14\xd1\x1bD\xc5W\xf4\x96\xb8o\x18\x19\x8e\"\x0e\xcf\xf3P\xea\xae\x8b\ni\xf5+\xa6>G\xcfj\xf7\xca\x87/>%\x11(\xba\xa5<\x85\x89\xed\xb8\xe2\xabT\xd1\xea\x89\x0fK\xcf\xf3\xe1\x9c\xb6\xf0\x1e\xe1\x8c\xd8 \xec1H\xc3\x15\x93\xad\xbf\xe2x\xfc\xd7\x81P\xe6\xbd\xd5\x9f\xcb\xe3n\xf1[L\xf7\x8bW}\xeb\x15\xdb 1\xb4\x178\xb4_=\x1f\xc2\x19\xa1\x94\xc9\xaf\xf4\xaf/\xf4\xaf\xa5\x0f7f\x11\xdf\xcaj4\xc1\xe6t\x8c\x9bHw\xed\xd6\x15\xd3\xb4\xc8\x14(\x988\x86\xbb\xa6\xba)\xd3\x97x\xf8\xae\x1e\x83A\xb1\xe8\x9bl3A\x90\x89\x97\x14\xc2\xad<\xc0\x7f_\xd0\xa9gt\xea\x97>\xacf\x97\xa6\xf0\xa2,|\x91\x1b\x07\x1f`\x04q\xf0\x1a\xbe\x07wM\xbf{\xe5!\xfc]\x99c\x11\xad\xea\xc2A8\xf7FJH9\xb5\xd0\x0f]\xdfC\x1d\xa7\xa7\xd4\xd2\xe4\xda\x08{\x01\xc1\x8d\xba\xb9\xae\x08\xb3:\xcc\xeb4\xd2\x12}7,\xae\x05\xe4\xb5\x17\xbe+ mk\x0c\x1d\xd6\x81`\x1c\x06\xfd`\xa3\x91X\xe2\xd6\x9aF\xd2\xe30n\x1c\x8c\xd5\x1f\xb9+\xce\xca\x10\xf4S\xf7\xc64\x08DV\x1fX\x9a\x1etb\xe5\x93\xb9\x95\xba\x93}\x16\xa54u\xa7G\x9e]B\xccG\xf3\x14\xb6N-\xcaT\x91\xda{\x1e\xdf8\x9e\x0fN\xf8\xf5j\xd4\xa7m \xa1\xce\xdc\x0b\xc2f\xf2\x1b\x92\xfbS35|\xf4?3\xdd\xa2\xaa\xf6\x9bn\x9a\x19\xa8\x95s\x98\xab\xf1\xcc\xf9A\xa6\x93}\xcf\xdd\xd2)uc&\xf9\xbeu\xb1\xc7\xfa\x0cyB\xc76\")\xda @\x813\x163\x8d\xec\xe5\x9a\xb58\x85\xd0\x83\x94\x1e\xde\x8a\xed_\x88K\xb1\xbd\x0d\x11\x13^\xeb\xc1\x0d\xb8\xf3\"i\xc2\xe7\x16'\x1e\xff\x8e\x12p\xb3b4b\xf1}\xdd\xff\xca\xdc\x08[\xbb\xbfoZ3#\x97h\xb3M\xed\xdd\x9f}s\xaa\xe8\xcel\xfe\x95A\x93\xda\xc5\xf7\x06\xd7\xa4\x94\xb2d\xabV\"\x96c]\x8a\xbd\xe3y+\x91\xc5\x9de\x176\xf9\xae\x9ae\x8b\xf33\x8dW\x85\xf2\xf6L\xfd-\xd1x\xc7\xeag\x9c!?\x83J\x97\xe4n\xb8\xf8\x87\xe6\xc5o%\xe4no\xc5?s\x14\xd7\x03\xee\xcbu\xf8?;G\xb1\xf5\xec\x98\x12/\xfd\xcf\xcd\xa5\xdf\xb9\xcd\xbc\xb7\xf6.+\x16\x8b\xee\x04\xb6\xc1\x04\xd5\xb5<\xb6\xee\xd4RO\xd8,\xd1:{\x96:\xe6\x8c\xb7\x9b\xeda\x9f4m\xb2{\xd0N@\xbf\xfb\xf4\x9f \xe8\xa5\xe7\x7f@\x02\xfa}sR\xc4\x01\x19q-\xe7\xbf\xae`\xb3\x9f\xa4}\xf3@\xe6\xcd\xbe\xc7\x14.\x99y\xe6\x82g\x016\xbf\xa5TOhu\x14\xe1c*DJ\x9c\x82ns\x84 \xd6x6s\x8e\x03\x8e\xc1\xc5\x08\xdb\x98D\xf1e6'/J\xb7\xf0\xe4\xee\x9d\xe7\xc3\xdd\x1f\xa4\xa2e\xe7t\xa5\xdd\x91?r\xf8\x15\xc0!\xa4\xee\xde\xc4s\x13\x0f-i\xbb\x1aK\x1a\xd7\xcb\n\x83\xf4\xfa0\x91\xcc\xae\x1f(eI\xf7\xe1&H\xb3\xdb\xde\xd6\xb0\x96\xb5\xa19\x86\xce\x16\x06\x99\x94\xa2\x9c{\x01\x05zS\x1fb\xfcc\x12d\xe9\x8a]68\xa5\xd4\x07\xc6\xcap\xb3`\x9d\x15%\xbf\x85\x08h&\x18\x81i\x11\x84\xf39&\x1a\x94Se\x197Cj\x00\xc9\xbcE\x10\xafh\x8f\xe7Q\x1e\xaf\xcb\x82\x8e\xac{j\x0by\x0c\xdc\xa1\xdc\x07\xe7{)\xac\x17\x85\x94\xad\x11\xb9\x0e\x9f\x90\x83\xe4\xd4\x16\x1b9\xed\xcb\xc9\xd2\x9c\x84\xf3\xbb\xa2\x0cK\x12-\xc3\xf4\x9a [\x1d\xb9N\x81\xa3r\xbcNK\xf5\"\x08\xd7k\x92\xce_.\xe3d\xeeJ_yA\xbb\xe5\xbe3,\x123\xb1\xc6J\x16MY\xdcS\xab2\xb9\xd3\x94Q\xb2\xa0oN\x84bG\x8f\x99>%\xc4\xd7\xfa\xfe\x18\xd6\x1af\xa0\xb0\xfa\x18\x9a\xecC\x9b\xd1)\xf6\xc1\x9a\x95\x0fVy5},\xce\xf5\xf4\xb996{\xee\xa8\xeb\xd8i\xd7\xda\xdb\xb5\xc5\x04\x9bv\xdd\xd7q\xcf\xeamJ\xe9\xb4\x0c29\xa53\x1ed\xed\xa2O\xbe1u\x89]\xe6YH\x14\xe5\x1e\xea\x9bl\x9e\x857<\xb6U\x16,ZQ\xc4\x05!\x8c9\xc5sRd\xc9\x0d\xf10\x9c-F\xb1[\xc5\x05y\xec\xc2\xb4V\x80-\xcc\x9e\x9d\x04\\\xd1\xad\xef'\x00M\xd4\x9f\xd9\x99\xb2\x0en&9\x963O+N\xdemmQ\x02\xcf\xf9H\xae_}Y#h\x8c\x15\x0f\x9bAS\xb6\xdf\xd6\xda5#u\xa7\x87:A\xd7\xb8v(\xf2\xffA]\xca\x12V\xe3*\xeb\x9dq\x03\x84\xa3\xde\xc5\xb5Q\xd7\x88\xa1\x02\xae\x1b\xc6\xa46\x1eW\x8f\xb12J\x16\xb5\xaeX\x85\x84\x9d\xba5\x15\xcf\xfb\xcb\xb2A\xb9yp\x0e#\xc8\x91Y\xce\xba\xf5\xbc\xf4\x90(\x85\x98\xbf\x9dk*}9|\xd4\xa054\xcb\xae\x89\xecr#\xc2\xb5\xf3}\xec[(\x14\x8e\xba\x8a2\x9d\xd8B\xa9\xf0\x80\x84\x14\x97@\x08Q\x12\x16\x05\x84\x85\xe2%\xfb\xbbLG\x93\xd2\x0bO\xa4\xc9\xbe\xe9\xc4|{W$\xe3Z\xb6\xc8\n\xfe\x02J\xab^\xbc&oS\x96\x1a<\xc5\x18]\\\x9d\x03\xe9h\xd4E\xe8\xe7h\x89\x92Z\x08\xfd\"\xd2\x84\xac\xa0s\x01\x0f\xad\xaeB\xf6\x89\xe4\x95\xbd\x95\x07\x0b\xce\x97\xb1\x80J\xe5\x8c\\l\xb8_\x8f\x03%8WJY\x1d\xea\x1a\xdf\x98\xbf\xda\x1dO\xf5W\x19\x7fE\xe1\x8f\x9c\x86\xb0F|\x86\xdc\xa4\xb5\x89 \x0b\xd4,\x83\xa5\xb2\x1b,iA5\xfe\xd0\xfek#\xf8d\xb9\xea\";\xc1\x163\xc27\x12=\xe7\x14:\x01\xf9\xb2\xceIQ`\xd6\xa4\xaa(\x81\xc4\xe5\x92\xe4p\xc5c\xccf\xb9D\x05\xb1`\xcd\x0e\x8c6\x86J\x1a\xb8\x935s\xccc6\x96\xaa3\x8eJ\xc2\x8d\xed\xe5\x94\xd8-\xd3jC\xa7\xf5\x0d\x0c\x08@\x07\xaa\x91\x96\x85\x95\xd5\xcc\xbd\x0c1,\xd4\xdd\xc6\xfb\xc8\xa8\x11\xb1\xc7g8\xfd\\\xa1CD\xb2\xa1K\\\x83\xcbKJ!}\x93\xfb\xa3\x1aX\xef\x8e\xbfM\xfc\xa4\x03\x93}`\xea\xee\x99\xedz'-\xc5\x12zMS\xe09f\xe1\x07\x0e&\x9eb\x906e\xe5\xbb\xe3\x03\xe3\xf5\x0cMc\x06a\x97\xb6\xce\xb3u\xd1\x845\xa4\x98\xaa\xe4\x01HyIN\x16\x05K\x0d\xc5B\xcc\xad\xe7a\x89\xf9\x0f0Nr&\xad{\xbb\xef\xe2\xef\xd8w\xa4\xba\xdd\x87r\xf4\xa9\xe2# \xa3\xf2e\xb6Zg)\xc1\xbc7\xbf=\xf8J\x95\x82\x94\"EY'\x90\x91\x88\x11%n\xa69\xf4\x90\x04x\xd8\x8f\xdcu\x0e\xf7\xeb\xec\xef|~\x01I\xffZ\x91\x8a\x9c\xf31\xd4V\x15\xbe\x94\x87^\xab\xfb\x92\x87\xa2\x15\x11\x9d|p\xc4\x14T\x01\xa7<\xc9E\x96G\xe4gl\xa8[\xb6f\xe8\xf0u\xf3\xad\x906\x96\x03\x07W\xfa\xe0H]\xab\xe3\x8b\x14\xd8\x17\xcap\xaeP^Qp\x1d)\x85\xaa\x94 \n\x1fb\xb7\x90\x1b\x90Z\xf3\xd4/\xe3\xe2C\x95\x93\xd6\xa9\xe0 D,\x8cB]\xf3\x18B\xf5\xca\xd2\xc6\xa4\xb7\xc5\xb7\x00N\xa9{ ;\xaf\x0b\xf8\xa2\xe1\xbc\xe2mV\xa5%\x99\xf7\xc5\x0d\x14\x14\xb5fc\xa9NC\xdb\xbe6ae\xae/\x1d\x0dm\x18\xe6\xfa\x1f\xc9: #\x16\xa0ph\x1f\xe2n\x18\xea7\x8bm\x86\xec\xf9\xe3\xf7@,\xba\x1c\xac\xfe\x1b7\xfd\xdb\xb7\x1f\xb5\xfd\x04GU\x9e\xe3 \xdd\xdcu\xa2{\x16\xc3\xb2\x9a,\x98#H\xf3\xcburz\x05\x03\xc2\xd4\xf8\x0e\xfa\xdb\x1c\x8c'\xe3\xdd\xdfuQ\x9c\xf3W/?\xbe\xfat\xf9\xe3\xfb\xcbw\xef?]~xq~~\xf9\xe9\xdf\xdf\x9c_\xbe\xffx\xf9\x97\xf7?_\xfe\xf9\xcdO?]\xfe\xf0\xea\xf2\xf5\x9b\x8f\xaf~t\x86\xf4\xa9Q\x12\xd3\x897L*\xd1\x17!\xafu\x97\xcd~z\x14\xfc7T\xb7\xd1I\x8f\xd3\x7f\xba17\xa6\xbb\xba&\x14\n\xae\xb2\xf4\xd5\x97\x92\xa4\x94\xf8-0\xca\xf85)\xb5\x12RD\xe1\x9a\xfcH\xc8\xfa\xa78\xfd\xfc!\xc4\xa4\xcb\x84;\xbb\xb5\x8a\x8be\x98$\xd9\xed\xab\xbfVa\xf2\x1f\xe4\xae\xe0i\x05\xe3d.\x82\xbe\xb0jY^\xb2\xccz$\xb8*3^H\xf28L\xe2\xbf\x91s\x12\xe6\x11ko\x1d\xe6\x85\xfc\xfb\x9a\x94\xe7\xe1j\x9d\x90\xf3hIV\xec;L\xd1\x10\x96\xe4C\x98\x87+\xad\xa4,I\x9e*eo\xe3\xf4'\x91;Z*\x0d\xbf\x18J\xffX\xc5s\xa5\xe0\xc7\xb0$\x9f\xe2\x15Q\n\x99%\x8cR\xf4C\x96%$T;~\x1d'\xeawo\xd2\x92\\#\xad\xd3\x94\xbd\xabVWZ\xd1\xdb8\x8dW\xd5J\x1fn]Fi\xac\x97K\x12}\xe6\xdf\xad\xc8*\x8b\xff\xc6\xba\x8a\x8b7\xabU%\x84~\xa6\xd0>\xe2:_Q\xd6p\xfa\xd4d\xbd\x1e\xd7\xaf\x8fL\xaf3\xfe\xfap\xcf\xf4\xb6\x12\x1f\xef\xee\x9a^\x87\xf5kc\xd7\x05\x7f\xcd9S\xf9\x15\x9d\xdc\xff=\x7f\xff\x8e\xeb\x00\xfa\xec\x19\xec\x9eK\xc2*\x816\xc6\xce\x9b1\xb9-p~\x93\x85\xa4kb\x97\x0d\x11P\x15*+X+\xc6Z\x9d\xf4\xa4\x93\xb2\xa1\xf4:\xedD\xbc\xb8\xeb] \xde\xc8+\x17C\xd6|qy\xe4\x9a2\xfb\xbf\xe7.\xb2]\xaa\xdfj\xdd\xc3\xff\xcf\xde\x9fw\xb7\x8d#\x0f\xa3\xf0\xff\xcf\xa7(\xeb\xc9/C\xb6i\xc5r\x96N\x9c(\x9et\xe2\xa4\xdd\xd9z\xb2\xf42\x8a\xc6\x87\x96 \x8b\x1d\x89TH\xd0\xb62\xf2\xfb\xd9\xdf\x83\x02@\x82$\x00\x82\x8e\xbbg~\xf7^\x9e\xd3\x1d\x8b\x0b\x96B\xa1P{\x85i\x1a\xae;t@E\xb3\xe8\xd8\xaa\xfe\x8d\xbd\xbc\xf70@v4nv4K\x93\xe5O\xef\xdf\xa6S\x92\x125\xef7PO\xab|g\xabr\xe1\x11c*S(VN\xb1\x84,\xe5\x92\xf4\xd9\xbe\xb4}Z\xc0\x8b\x94\x19x\xa3\x8c\xcf\x04oM\x8a\xa6\xde\x93/\x1e\xf1\xfb\xcbp\xe5Q\xccd\x1fe\x14g[\xbe\"\xa6\xf5:\\\x95oB#\xc6 +;D\xf1\xf4C\xe2$\xa2\x80b\x16\xab\x1b\xb8\xa0jV\x0d\x159\xdb\xef\xcf\xa2\x05%J<\xa3\xb1 \x91hA\xefD\xa3\x8d\xf9\xf3\xd9i\x7f\x18N\xe6e\xeb\xc6\x1c\x01\xd2*0J\xc7h\x0dM\xc78{O\xe4^\xd7X#\x9a%\xfe\x18\xc8\xe2$]\xe2 \xc2qn\x08\xef\x03\xa4\x13\xcfcW\xa4m\xc9\xe8\\\xf4\x14e\x05\xdd9\x14}\xe4X\xfd\xf8\x9a{\x91\x13qj\xb6\x8a\x9bu\x97\x10A%^\x87+\x17t2\xa2LJ\xa6\xf9D)\xf2g\xcb\xfdP]W\xe2\xb1\x95\xe5\xa6\x9df&\xd8\xcb\xa0\x12\xd1\x08\xca\x90\xdfa\x97\x7f\xd9\xa8\xcfD=\xabr\xbc\x06\xcb\x9cP\xf7Z\x0f\x84\xa8\xed@\x88D\xa5\xa7\xdd\x00\xf2\xf2n\x1c@\xd4 L\xd9:\xa3d\xf9a\x9e\xc7\x9f_G\xd3\xe9\x82\x9c\x87\xa9]\xe4\x07\x9d\xe5\xce\x04\x13\xd2\x9fJ\xf7I\xc1\x85\xe9K*@\x97Fu/7\xf4H\x86\x0f\x8cyKc\x8fz\xe8\xbfE\x9c$\x8b\xe9\xc3\x1e/_\x8f\xff\xa9\xaf\xe2\xbd\xf1h\x05\x07\xb8v\xb7\xe1\x00\xf6`\x1f!|\x0f\x0e\xe0\x8e\xf8\x9b\xdd\xbf\x0d\xfb\xb0}\xeb_^\xe8\x9dd4\x0d't\xb3\x88\xc2l\x13O7\xd2y{\xc3\xf6\xec&\xf3\x96\x9b\x8c\xa4\xd4?\xd8\xe44\xf17'^\x98\x91\x0d9\x8d\xe2M\x92,<\x12\xc6\xfe\xc1&%\xe1\xe7\xcd\x9a\x12\x7f3\xc1\xc7\xec\xc0\xd9\xcc\xc3t\x83\xf2\xedt\xb3\x08\xb3l\xb3Hb\xb2I\x96\xab\xc5&\x893\xbaIb\x1a\xc59\xf17S\xe2\x9d\xe4\xa7\xa7$\xddL\xa2e\xb8\xd8L\x16aJ63\x8f\xed\xf1\x0dI\xfd\x83M\x14Gt\xb3\xf0\xc8iH\xc9\x86P\xe2\x1f\xf8\x9bi\xb2\x99&\xf9\xc9\x82l\x887\x99'\x9bEv\x10\xcd6\x8b\x8cx\xd1\xcc?`\xf3\x88\xb3<%\x9b8_n\xceHL7\x17\xde\x84\xac\xe8\x86L6+\x0fS4o\x92\x94\xfa\x1bJ\xbcx\x9amPs\xb2Ic\xdf\xf7Y\xd7\x8b\x05\x9d\xa7I~:\xdf\x84\x8b\x8cl\xb0l\xf9b\xcd\x86r\xc1\xa6\x93\x84\xeck\x8f\x84\x939\x9b}D\x18\xd8\x92\xe5&\x8f'\x1e\xdb\xbdl\x80\xa7\x8b\xe4$\\lN\x13\x9alN\xf30\x9dn\"o\xb6Y\xae<\x8e\x03\xd9F\x19D\xecEt3Y\xe4S\xe2\x1d'\xf1\x84\xf8\x07\x9bE\xc4\xa0\x95\xd3\x8d\x14}6\xd4#\xe9,\x9c\x90\x0dI\xe3p\xe1\x1f\xf8\x07\x9b\xcc\xdf,\xbcpy2\x0d7\x84n\x92\xc9\xe7M\x12\x9f\xfa\x9b\xa5\x17M\xd2\x04I\xe0\x06\xf5L\x1b\xaeK\xf07o\xc27\x9b\xd8\x0b\x97$[\xb1\x96B\x1a\x9d\x91\x0d\xb9\xa0\x1br\xbe\x89\x16\x9b\x84n\xf2\xc5\xc2\xdf$\x1e\xb2E\x9b\x15\x8f\xaf\xdc\xa4\x9b\x9cn\xceH\x9aFS\xe2oV^8\xf9\x1c\x9e\x92M\x98\x86\xcbl\x93Fgl]\xd2\x84\x92 %\x0c\x104\x99$\x8bM~\xb2\x88&\xfe&\xf5\xc2\x88a\x8c\x17N\x93x\xb1f\x0b7\xdb\x9cF\x19%\xe9fEB\xba\xf9\x92Gi9\xefl\x92\x93\x0d\xd7\xb3mh\xba\xde0\xaa\xe8\xfb\x9b\xcc;Y\xb3\xc5\x0f\x17d\xba!\x8b\xd9f\x9e\xa4t\x13\x9d\xc6d\xba\x89\xbe\"xB\x1aM6\xa8\xd3\xd9\xa0\xa9a\x93\x9fp\x97\x84M\xbe\"\xe9f\x1dO\xe6i\x12G_\xc9t\x83\xb1\xc4>\x83\xe8r\xb5`\x83\x9f\x93x3\x8f\xb2\xcd\xf7|L\xd1\xce\x06\x87\x11^\xf3z\x8a\xf6\xcc)E\xfb\x14\xab\xfc\xa2AB\xefGR\xbc\xdc\xf4\x86\x99\x06Pw\x06\xae_X\x8b\x8c1\xa6\xd6\xb7N\xf1\xadA\xcb[K\xc6\xd3z\xa7\x01\xc4\"\x83\xc9\x00K\xede\x84za\x00k[\x81\xe2&*H\xa1c\xc9\x84\x8e\\: .1\x19\n\x0fq[\xea\xb9A\x0d\xb1hMU\xdb(\x9a([0\x11\xa7\xc2\x9b\x8d{\x87\x95\x84\xbe$U\xa3\x81\x86\xb8H%\\\xa3\x08J\x80\xf6\xb5l\x12.\x9e\x86\x19\x1b\xd6\x93\xea\x9d\xe7b\x90\xad\xa0\x91\xeaG\x8f\xf6Sn\xe8\xf7n}\xea\x8f\xfe\xd5\xbf5\xfe\xee\xc6-&J4K\x7f\x92~\x16\xc6\x11\x8d\xbe\x92\x8f\xe9\xa2\xb5\x87H\xad_\xabz\xdb0a\xadW\x8b7\xd2\xc9\xd6\x8abp\xa6\xf6\xeck\x8f\xe0SB\x9fL\x18\x97\xcf\xb0%M\x16\x8b(>}G\xb2U\x12g\xed\xd0\xa8\x9dd\xa5\xc2\xbf\x1fe\x8a\xf6_Q\x87\xb0\xa51i\x0c\xaa\xc7\x9e\xfe\xcdR\xbf4\x8b\xe2\xa9\xd7\xaa\xac\x91Wq\xc2e4Li\xf6kD\xe7^o\xafW\xe8#U\x15*\x83\x89\xd7\x9b\xf0\xdd\xc3\xad\xf6\xff\xbe\xf4K,lz\xfe\x01\x98+X\x15\xaa\x1d\xaf'\xba\xe8\x89\xc4\x9b\x1a;\x89\xa1\x8d\x14\x9d\xe64\xe3\xd27\xe2\x17\xca7a\xea*\xb3\xa4\xc5\"O\xa2Y+\xc7\x9aM\x9bx2%d\xb5X\xbf\xa7i\xb4zI\xd65~\xcd\x927\xecZX\xaab\x99[\x94\x81:\xa7L=\xb6ut\xbb\xafZ51\x99N]K\xb7\xd9\xa8\xe4\x8f\xf1q\xb1\xcd\xd4&5\xef5e\xf8\xbf\x19\xb05d\xb1\x86\xa3\x91\xc6\xe4dVh\xe3\x98b\xee\xa1\x17a=D\xd4*\x8a\xc8mv\x87 5<\xa1\x0c\x15o\xe8\xd3V_\x9aU\x90\x91\x86\xec!\x15s\xb1\xa3F\x86\xa2\xdd\xa6\x94\xe2\x80^)\x0c\xb9A-\xeb\xcdp\xddp\xa6\x18\xad\x16\xb4m\xc1)\xb7Z\x94\xd5\x8dMn\xf5P%\xbeU7_n\xdf\xd3T\x94+\x98\x9d6\x83d\x91o\xb1\xd9\x84iM\x18L\xc4g\x1a\xd2\x1f\xa3\x03\xc6\x87\xa4p\xeapX#\xfe\x8da\x8d\x94\xde\x8chR3\xfdU\xdfc\x9bb\"\xfd \xee5\xfc\xfa\xa1\xc8\xbaq\xfbN=<\x05D\xee\x0d\xf4\xb0\xb83\xd0}\xba\x92-\x7f\xbf\xab{\xaa\x0f\x89\xaf\x16_e\x0f\xcf*\x07\x89\n-\xa3\x05\x19\xb3\x16\xf4\xa3\x18\xf5\xe3\x99\x17\x97\x0c\xb8N\xb7\x02\xaa'\x809:\xd7m\xa3\xc1\x01(\"A\x84A\x13\x11\x16Z5\xf2\\.hm\x8d\x95t\xf1<\xc0C\x9c\xe2\xa7Q\x93\x18p\xfe\xad\x9f%K\xd5s\xa2\x8d\xddd\xbd\xac\x95a\x8eb\xc6[\x8db\x8d\xdd\xeb\xb2\xbe%\x9a'\xdf[\x83\xdfc\xeb\xfe\x80\"\x10\xf01\x94\x02T\xef\x97p\x91\x13\x1e\xe8uB`A\xb2\x0c\xe8<\x8cA\xb4\xdck\x8e\xb1\xb9;\xfe0\xf8gv\x18\xd3#\xf3\x98NQ\xe5\x9e\x8aa\xf1\xc6\x9d\x86\xf5Y\xefI\xda~Z\xa0\xa4y\xeb_;\x07\x9f\xa6\xdb\xde\xa7>\xfb\xc7?\x90\xb6\x01EN\xad\x0d4\x04\xc1\xf8\xb8\x0c\xee\xc8\xe0\xfa\xdamt\x0e\x83\x8a!\xe2\x8d;\x0d\xeb\xb5\xceE\xd7mLx*\xd5\xf2+\xd4\xbc\n\xcd\x90\x9bE\x0b\xe24\xc0\x0f\x06\xbfb\xb71\xf6h\x9a\x13N\x1aD\xccR\xb8\xc8\xd4\x1b[\xbb\xca\xdf\x03\xc9\xca\x9bF}\xc2\xbbw\x1a\xf8S\xbd\x8f\xb4\xdb\xb8\xf9`5\n\x1f\xf3\xd8\xc4\xcb.C\xfb\xd9\xe4\xd3\xed68^\xb1\x9f}V\xb8\x0b[VZ6\xef4\xb2w:\xf7s\xb7QIqO\n\x1b}\x9a\xbcJ\xceI\xfa4\xcc\x88\xe7\x07\xb0u\xeb_\xa3\x7f{\xe3\x83\xd1\xee\xce\x83pg6\xfe\xf7\xfd\xcb\x9d\xe2\xef;\x0e\x7f\x0f\xf6.G\xfe\xe5\xd8\x890\xb0\x91;M\xf8\x8d\xd1\x0b\xdf\x9d\x98\x96\xbc\x89\x1b\x9d\xe7]8\x0d\xef\x951t\xa0\xfb\xf0:\x90\xfc\x0e#|f\x08xp\x1e\xdf\x16O\xebpzx\x81\x1e\xc9\xb6\xa5\x9d%\x8bEr\x0e+\xd1I\x0f\xb6u.\xec\xd53\xbc\x19\x9e\xd1:\xb2\xabr\xb67oV~\x9b\xb9Z\x13\xc7\x8b\xac\x1eR\x9e\x93d\xba\x16je\xae`\x8c\xe2\x1ew\x93\xc7_h\xc8:\xbeX.z\xc7\xd0\xf9LyS\xb0\x1e\x867\x17\xe5\x9b<\xc9\x85\xfe\xb5U\xf9\xda,I\x97!5\xbd8\xaf\x8cQ\xec\x00\xc3\xbb\xd3\xca(\xed\xef\x9e\x95\xef\n\xc4\xad\xa7\x1e\x01\x01G\xeet\x950\xa67\xb2f\xe6\\3\x91\xbdT\xcc\x0d\x01\xbf\x8c\xf4\xfd\x83Pe\xf4B\x99\xe0[\xbc_\x15\x9ay\x82\x97H\x16\xd306u\xackJot\x94MN\x92<\xa6&-:\xbbN0\x9c\x8fq$\xcal\xccl\x8d\xb9!\xd4eH&\xa1l\xcb\x8bx\xa6\".\x96X\x06r\xc1\xbe/\xb5i\x95\xcfw[\xbf\xc6\x94\xf1\x92\xf9\xeb\xfe\xf9\xa1\xc1\xc8\x0e\xd2\x00\xd7\xd0B,\xcc\x9e|V\xed\xaa\x9bdvhp\x08\x90\x17O\xef\xad\xd7\x11G6u\xac\xbc\x94\x80\xa7\xc8\x0fD\x7f\xc6/\xda\xed\xcf\xf2\x92\xb4\x88\x1b\xb8{H\xf7 ;\xde\xf88y\\bq\xf6\xe1\xf1\x80c\xe9\xf9\x81\xa1\xfc8h\xf5\xb9 \xb6\xe3\x13F\xd2\xd7\x01\x9c\x16\xb5#0\xb5\xfd\xfb\x00\x0e\xc75\xe1\xd5:\xf6R\xdf\xa4}E\xa7\xe6\x07\xb1\xd4 \xf2\xcfe\xf9 9\xf7w\x82\xd6\xc3,\"\x8b)D\x19\xe6\x0fY\xa5\xc9Y4\xc5\x13@G\xb1e\xa3g\xb6\xc1\xb2\x89\x7f\x85!<\xf3\xa2\x00\xce,N _\xd1\xc4\xc1\xc7\xf3\xd5\xd5\xd9\x00\xc4\x10\xe6\xe5\xd6\x99\xb7\x8d\xe69\x0c\xe1\x0d\x1b\xcd\xdc2\x9a\xe7\xcah\x9ew\x1d\xcd\xb4m\x08\x1fa\x08\xaf\xd8\x10\xea\xa5E\xd4\xeb\xa32\x84\x8f]\x87\x10\x96\x00 \xdbF\xf3\x03\x0c\xe1-\x1bMh\x19\xcd\x0f\xcah~\xe8:\x9aY9\x9aY\xdbh\xbe\xc0\x10\xfe`\xa3\x99YF\xf3E\x19\xcd\x97\xae\xa3\xa9\x1e\x89m\xe3\xf9\xdd\xe2\xb7$/\xe4n\xbc\xdfQC\x1eR\xb2C\x99\x1c\x85\xcd\xaf\xe0\x00~\xf6P\x85\xd6\xcb\x99\xb0Q\xdc}\xc7\xef>\xe5D\xd4\xcc\x17\xc9K\xcc\xf6w\x93\x1bKIf\xab\x07[\xdb\xfc~\x85!|\xf0\"\x0b\xb0qv\xbfv\x18\xe3\xaf\xedc\xac\x1c\x9emC\xfc\x05\x86\xf0\xb9}\x88\xbft\x18\xe2/\xedC\xac\x9e\xd0mc| C8j\x1f\xe3\xcb\x0ec|\xd9>F\x95\xc1j\x1b\xe1\x8b\x96\xa1\x1d#\xf3S\xb0a.\x03}!y\xd6\xa3\xd8\x1b\xf5\"J\x96Y/\x00\xceg\x8f\xfd\x00\xa2\xa6\xa1\xbb\xcd\xd7\x03\x14\xc1\xaam\xdb\xb1\xab\x82I/\xd0I\x82!\x0b\x06\xabV\x97P><\x12\x0fU*\xf0\x02\x190\xf6\xf4)\x13*\x03ap\xe7\xeb`\x1f,\xbb\xa2xJ.\xf6\xa1\xc5g\x90]$M\x93t_\x13/\xa7^\x97\x96x\xb0v\x9cP\x18\xe46\x94\xb8\x01Cx\xdd\x8e\xb47\\pA\x00\xeb\x86+56\xda\xbd5\xfe+\xcdl\nvNI:\x1a}\xbb\xbb\xb1\xc6\xd2 \xc2/\xa8\xab\xd8\xdf0h\xe9\"\xa0\x19\xbco],\x17BwE\x8c\xf2]\xc4\xbd\xae.\x96\x0b\xdc\xb6\xf8\x17\x166\xb2\xad9\xd7\xf3\xb0o\x98\x94/\xbe\xfd\xf7e\xc0\xbe\xbfq#%3\xd5\x1d`\xbdBO\x18\xda\xc7}\xcd\xff\x14%WD\xb9'\xda\x0f\xa7S\xf4M\x0c\x17?\x97O\x0e\xe0o\x8f\x0eX\xe3g$\xcd\xa2$\x1e\xf6\x06\xfd\xdd\x1e\x90x\x92L\xa3\xf8t\xd8\xfb\xf8\xe1\xf9\xce\xfd\xde\xc1\xe3O\xb1pl\x87\xdf^\xbf\x02r\x81K\x0c\x13\x9e\xe2\xf7\x84\xc0)\x89I\x1aR2\x05\x1e\xa4\xf47\xa3\xff\x93\xbc\xa4!LL\xa7\x8f\xa9\xb1\xbd[\x9f\xde\x7f\xf7\xe9\x96\xf7\xe9\xfd\xb6\x7f\xe3\x96\x05\xd9K \xc2\x10\xa2\xd1\xa0\x19\x8c\x08F\xc6B1\x16\x9eJK\xed\xf4)\xea\xcb~{\xfd\xea\x90\xcf\x8d;\x93\xb8\xf8\x80\xb0\x89$\xc2\xc3\xa8l\x8fo\x82\xe7i\xb2\xe4\x1bA\xb4\xd7\x9c\x91T\x8a\x99$\xbb\xa4M\xb2K\xb0\xbcm\xcd\x13&)=a`_\xc9y\x06Pxi\xaaYP\xac\x8e_g\xa2\x0eI=\xa9\x92\xbc\xd8\x12\x94\xe2\xfc\"\x99\x84\xac\xa9~\x86\x8d\x1b\xf4K\xa5\xde\xd2\xb4\xb5z\xa8\xa47\xee\x11y\xf0\x90~\x96\x9fd4\xf5\x06\xbe\xac\x17tS\xa7\x8d\x01\xd5C=\x85(\x86\xd8\x87\xb8^>%\xe5\x8e\x8a\x18g8J\xc7\xb2\xc5!&[\x1bM\xc9$\x99\x92\x8f\xef\x8e\x8a,]^:\xda\x1d\xfbc,\xdd;@u\xa1\xf6\x9d\xc1\x98\xdbU{.\xf8$\xb7us\xcd\x9a\xd9l\xec\xb4\xd5h\x15_\x86+\x07\x7f6\xf19\x12\x83\xea\x8c\x88\x0f\xdb\xd0\x1b\xa2\xb6\xb6\xf9\xb4\x9a\x99T^\x97~\xff\x8f$\x8aqy\x9aS\x13\x19{\xec\x83\x92\xf3\xa9d\xdd\xa0\"n\x17K\xd5yD1W\x04\xd0\xcb\xe9l\xe7~\xcf\xf7\xcb\xbb\xbd\x930#\xf7\xee\xe8\xc6Pf\x10jv\x9d`\xb8Y\x94\xc4\xd9{|\xcb\xe4\xb5\x13.V\xf3\xb0%\x97\xacz\x154\\j\x13\xe7=\x1f\xb7\xd0\x02S\xc1\x85)\xf1\x88\xfa\xccpd\xeb7\xe6\x92\xd0y2\xbd\xf2h\xf8\xe7\xa6\xf1\xc8\xa7\xceLDs\x8c4<\xfd\xb3\xc0Y\x1b\xb2\xf3 5\x98Y\xcb4\xe5\xc6\xce\xe8\x9cT\x94\x8c\xeeQ\x0cF\xbd\x91\xf4\xe6\xa5F\x0f\x11\x85m\xe1\xa5oz\xe5\xdf\xa2\xcc\xd1(\x0e\xd8\x06\x0dt\xfb3\xf5K\x9f\xfa\xff\xd9\xdb\xbdu\x1a@o\xbb\xe7\x8f\xc5\xfe\xd4-\xa9\x91J\x11\xdb\xa6\xd6d\xee\xaa\xac\xa4\xc1\xb1\xa6P\x9a1\xc25- W\xac8\xe5\xb4\xb9\x8ct\xf2\x18\xa9\x8e\xbc\ns\xa9\x143\xa4's\"\xc0:\x8f[d\xcaT:&\xcc\xd9\x98\xd4(\x8d\x96\x9e\xb2H\x9f2\\\xa3c\xb4\xd8\xf4z\xb6\xe1\x1a\x92\xab9\x0d\x93\xc1\xec\xb8\x84\xd9\xd7\xa6{Y\xa0I\xe7\xe6\xd44m\xe6\x9b\xb0\xecd\xf1\xd1\xad\x7f]\xec\x14\xccu\xeb\xb2\x05\xc6\x14t\x7f\xe6\x08\x85\xfdgS\xd8\x976\x85\xf5h#\xecb\x1ba\xf5r\x9f\xca\xff)\x1f\xf0\x94\xdfl\xa7x\xf7\xee\xfb\xfd\x1f\xf2\xd9\x8c\x08\x7fq[\xf5\xa3\xb3\"sSq\xf2\x95x\xa2\xa6\x19\xacX\x8c\xc0%S|o\xc49U\xfe\xe9\x18\x91:nT\x8cr\xca\x06\x89\x94\xae\x1cWjcD\xf59\x0eAaO\xf9T\x94d\xbc\x8bhBL^\x97\xc4\xb8\xbc<\xa4\xaa\x9aL[\xe4K\xe4\x14@-1\xe1c)+S.\xd9zZr\xfdP\xecx\x99\x97\xbe\xaf/\x9b%\xb9\xf4-\xa6\xd6\x16\xc3\xb2\xc5\x17\xae-F\xd6\x16\xb3\xb2\xc5\x1b\xae-&\xed\xb3\xbey\x13\xb6&e\xd3?\xba6\xadI-\xaf4\xbd\xe5mQ.\x87\x8f\x16c\xb7\x06C\xd7\x06\xeb\x898L\x0df\xae\x0d\xce\x1d\x1b\x9c\xb4\xaf\xf8f\x83\xdd:57s\x1d\xdf\xb41>\xf5\x17\xf1R^\x83\x85x\x91\xfc#\xe1\x7f\xc4\x8a3+\xcf\xd5\xcd\xee\xbc$kL\xcf\x17\x8a\x17\xe2)\xb9\xc0\x1b\x19\xbf\xf1$\xcb\x92I\x84\x99!\x00s\xb8\xc4e\x00\x1c`x~\xdc\x97m\xb0\xae\xfbe\x0bl\x00\xfd\xf7\x04k84\xe9\x07\xa6\x19\xf8\xfb\xdf\x8f\x8f\x8f^\xbf\xfe\xf8\xe1\xc9\x0f\xaf\x0e\x8f\x8f>\x1c\xbe\xc3?\x8e\xff\xfew\x8dji\xd5\xfc\xe2\xe5\xe1\xef\x87\xcf\x0c\xaf\xcf5\x1d\xbcyv\xf8\x9b\xf1\x83i\xf3\x83\xb7\xef\x9e\x1d\xbe3~p\x06C\xb8\xdb\xbc\xbd\x86!\x0c\xe0\xd1#]\xb5\xf3S\x18\xc2\x1av@\x93\xaa\x7fi\x90\xf7\x8f\xed5\xae\xf7\xeb\x89$A\xcf\xf9\x9f\\\xa5\x19\x13-?o9\xd8\xb9q\x18\x0b\xbb;\x92\xe4\x0b}\x8bT\x1c\x0dE\x83\xbbn\xdb\xe9=O*\xaf\x7fxh9\x89D\x84\x9bF\xaf^\xa9\x0e%\x0bH{\x98x\\\xa88w\xb0JH*r\x9e\xcb\x94\x05<\xd3\xc6\xeeCLw\x11?\x84h{\xdb\x87t\x14\xf1$\x89\x11\x13\xe8\xcd\xee\xf5\xa9\xd3l\xed\x01\x0d\xaa;:\x06\xa2\n\x98f<\\\x82\xf6\x8f\x8fy\xe9|\xe2\xfd\xc1OW\xf6\xc4\xa9\xe3\xb7\xd6Tb\x85\xf5A)\xe9a\x13\xc1P\xb9\x04\x8f\x1f?6\x995\x84\x92j\x1bb\x11C\xbd\xd9\xc0\x9d\xbd\x07w\x1e\xdc\xfb~\xef\xc1]\x9ca\x19\x99\xf8&|\xa3o\x85MZ\x93\x92\xcf\x04>\"\xcax#\x90\xb7Q\xf1\xe1\x06\x9c?l\xc5\xf2\xeb\xf9\x9c\x0dm|v\x90\xda<\x19jP\x16\x9d\xde\x92Q\x91\x14\x1e\x0da'\xae\x14,\x1cJ\xd0\xd5_&\xf0xXW\xc0\x9a\x06v\xd4\x96\xbd\xf1\x83\x18\xb9\xe3\x86}\xed\xda^\xbd\xaa\x8f\xa1\xbd\x0f\x0e\x80\xab\xc5i\xc4\x986\x97/\xb6\xba\xbf l\x03\x1a\xc5j\xb1\xb4\x8cC\x92\xe5\xe2\x99\xbc`\xac\xde\n\x02\xbf\x9f6\xabT\x83pd\xd6\x9c\x07\xef`\x08{\xcd\xdbo\x9c\xb3\xb6\xf3M\x9d\xa4\xcd6^\xf1\x93N\xbe\xa09\xda\x9e\xc1\x10\xde0\x1cye:\x02\xbe\x1a\x08\xf6<\xca0\xbb\x8833\xfe\\\xae\x94!\x99\xa7\xb4Z\x94\x0b\xc5\xb6\xe0\xa0\xb2l#\xf6\xbd\x85\x8a\xc2\x01\xa4\xc5\x19\x12\x89\xb2\xc0\xd6\xd3\xd0\xe0\x078Mb\xd3\x89\xebH\xab?\xda\xa8\x82uH\x1c\xfd\xac\xe3j\xad\xdcc\x18\xd4\x0fv\xees\xebWW6\xf6\x8b\x9d1\x00S\xd5h\x8a8\xe3\xd4\xc5\xefv5\xe0\xaf\xda\xf4\x1d\x05-\xe7Un\xb5\xc5\x96\xf5\xdd\xfdj\xef\x8e3(o\x90\xd6\x8e\xde`\xedR:ze\xcaM\xa4\x9d\xbb\x92\xb7\xdaiD\xbf8\xc0X\x13\xcc,\xb8\x14\xa7.^Z\xbb(\x92\x01\xa8G\x8e\xdc\x8e \xcf\x95-\x85\xe8>M0]\x83\xb5\x80\xb5\xbc$P\xd1y\xbd\x12\x167\xac\xd5\xe6!\xe7@\xa85\xc3\xfb\x96\xa9^\xd8\xe1\xc5\n3\xd3q\x06\x0d\x92\x14\")\x15 5K2\xe3[.\x0b\xd8\xd3\xcf(\xdd\xf0G\xfb\xe8.o\xeaV\xbb\x8a\xecj\xa6\x083\xc0\xfd\xc5\xb7\xc1\xbdO\x13\x94\xc5$\xc4\xc5\"\x84\xcd\xb5\xa0\x98\x9f\xfd0\xa6\xe9\xbax\x99\xba\x8e\xf2\xc6\xb7\x8dR30\xa2\x0e\x84\x8dSH\x91\xf2V\xe8<\xb6\x1f\xadc\xf3\xbe}pr4h\xe0\"\x14\xef\xd7F\xa6\xfe\xfa\xaa\xa8\xaa\xa8&\x1f\x81e\xb0\xbd\xd1\x918\xa0\xc75\x05t\x00_\xfb/\x0f\x7f\x7f\x0fCx\xca\xfe\xfe\xe5\xc9\xab\x8f\x87\xec\xd7\xcf\xec\xd7\xe1\x9b\x0f\xef\x8e\xf0\xe7\xbb\xa0\xd2\x7f\x14g+\x9e\xed\xbc6\xaa$O\xab\x99\xb9m\xf4\x85\x1d\xf0\xe6\xdc\x0bJ\xcb\xa3g\xe3\x0em\xd6\x1b\"\xdeK\xae\xb7x\xd9Of\x8e\xed\xbc\xf4\n'\x92\xc6\xc0^V\xa7L\xbe8\xb6\xa9\x1b\xdb\xcb\xab/*\x82\xef\xf8\xb84\x8e\xb2\x91\xfc\xbb\x17@\xef\xb2i\xcfQ\xfb\x99\x84\x939yG\xb2\x962\xc7JW[\xbc/\xfc\x10d\xc5\xafB\xd6\xfb\x18\xe3\x83)\x17\x06\x957\x87\xfc\xc5\x12\xeb\xcb\x8a\x0f\xa2\xfc\x99\x14\x1c\xcb\x8f\xc4\xd9\"^\xb0M\xa3\xe8\xdf%\x86HLdB\xcb\x82d\xbc\x02\xa8K\x0f\x89S\x00\xbe\xe8b\xd6\xda\x05\xf1^\x04\xf0\xd2\x0f\xe0Ee\xf1%\xbdu\\\x13=\xa6\xdf\xe0-\xdfp\xc7\xf4\x1b\x16L\xbfQ\x19`II\x1d\x9b\xd6\x0d\xf1\xc65#\xfc\x88!\xfc\xb8\x89\xf07\xae\x19S\xea\xb5\xdd\xf5=|\x13\xa64\xbb \xde\x8f|=\x7ft_\xcf\x1f-\xeb\xf9c\x8dr\xd1o[\xcb\x97\xfd(\xe3-D\x94\xfd\x92\xda[\x86\xdeB]\xcb\xc6\xaf(ro4\xb5\xb7?\x05\xf0\xcf\x00~\x0b\xe0\x1fM\xa5\xe9\xfb\xc3\x7f\xa0\xc2\xd4$9Rj\x11\x1d\x8fCQ+\x83\xd6\x88M\x17\xf6\x95\x18z\x90\xfc\xa50.}&\xebL\xcbC\xf2\x91$\xb26\x88\x1c\xca\xf1gQ\x0b\xab:4\xd2eh\xb1u\xf2Q\xa9\x9f7\xcc\x9f{\x16:+\xe8\xd2\xf6\xee\x84\xe1,\xa8\xdd{*\x0e\x83zm\x1fCG\x91\xa1#y\x16\x95\x06\x8c\x7f8\x1aX\x90\x1b36\xf8\x13k\xcd\xfbI\xe8Z)\xf5F\xe3Ff\x16}\xbby\x0brh\xd2\xe0\x88.\xa8\xdf\xe4\x9a\xbf\x94o\xa4\xfa7~(\xdf\x88\xf5oh\xa5\x9c\x83R\xc8)TOf\xcf\xbe\xabK:\xa3\xcf\x01\x9c\x8dAd\x8a\xed \xf1t\x92Y\xc3\x16\xa0gza\xee\xdb\xa7\xc7\x05\xb9k\x9aEfG\xf2_j\xd8\xa2A\x0f\x0d>\x14\xab\xeb4\x04v\xc29\xa9\xcb\xa8`\xcd\xf4@\x8dL\"xa\xe5H\xd8\x01QZ6\x06\x01\x864\xef>\x84\x1c\x1e\x0d!y\x08\xf9\xf6\xb6\xa9\x11\x10\xe3\x08\xd1S8f\xa2\x15\xec@\xced+\x83\x7f\x15\xc8\xc5\xe6z=\xe2\x85\xa3\xc18@\xc5]8\xda\x1d\xb3/\x03P\x02\xdas\xd8\x86\xa6\x12\x0e\x1a\xe2\x97\xbc\xe4g\x8d\x87\x96\x04s\x0dV\x99g\x83tZ\xa6\xd9\x9f\xbcL\xda\x152B\x96\xaf\x9c\x0d0\x0c\x1b\xbfzV\x96B^\xd2\xf9\xc3}a%\xf0\xb7\xb7\xe11:W\x9b\x1b\x077u\xa7\xbc\x8cjOy]\xc2>\xc7\xcc\xb9P\x1f\xa9i8s\xfbp\xa4E\xbe\xe2w5\x94r}\x8e\xf4z\xa8\xe9\x93j\xbe,\x03\xb8\x05\xbb\x85?\x8b\xf0{\xf1\x03\x89\xce\xf2C\xdb\xc1\xf6\xcfbh\xff\xd4#\xce?\x85\xcd\xa0e\xab\x99\xa0u\xda\x02-\xaa\xaa \xb8\x8a\xc0\xd1WhIm\xceB\xfa\xa5X\xd6\x96BiC\xbf\x1a\xa7\xd4\x13\xaeV\x01\xf4\x9e\xf2(\xde\x8c\x92\x15\x84\xf0.\x8cO \x9c\xaca\x17\x83\x1eAX'w\x83\xea*\xc9\xba#\xb8V~\xa0$\x01\xe0\x9eo\xa2\x1a#.ax\x92\xa1\xeb!\x81G\x82cco\xef\xc4\xd2\x84s\x8c\xc5\"T\xbd\x1f\x89\xa7\x8aj\xf3\x18\x87\x86\x83U\xb1FE\x0f\xfc{B\xa2\x85\xe7\x11\xd8a\x04\xf8\x16\xc4L\xb4\xf2\x99l\xde\x0dw~+`\xf9\x9b\x1ew~\xfb6\xdc9\xd6\xeb\x129\xbe(*\xa5'\xa2\xfaa\xdd2ah\xf6\x84\xda\xdcL\xcf\xadO/\xc4S\xf5\xa1b\xc6\x1a\xfdc,\n\x01\x11\x8f\xd2\x00n\xb0\x95S\xe3\x1eN\x89SIW\xc9\xb5\xb3U`\xe4\x91\xdb\xb4KM\xfb\xe8\xad4g\xf8c]\x05\xf3J\x9f\x9dL2\x15\x7fY\xa5G\xe1![Q-\x95\x1e\xb2CH\xb9\x8b\xac\x11W\x84\x8a\x88z\xf1\x88Q\xae\x14v\xd0\xa3+\x1a\xa3\xf0\xc7:*wf\xc4P\xd1H\xb5\x1bu\x1d\xb4\x93u\xb3\x0e\xe9&\xaa\x9dBc\xf2\xfa\x89\xea56\xdd\xb45\x05\x10\x1e\xa3\xfa\xc3\xc6\x819i\\\xac\xda\x16\xaei\xa1\\\x02/Wf{\x9b\xad\xcd\xf6\xb6C\x14 CuB\x03x\xc1\xe8\xd6\xd5Q\xbd\xee\xe5\xaaC}\xae\x1f\x1eQ-\xcaW\xfa\x9e\x87\xee\xf1lJ\xd3\xf5(wM}\xa2\xeb\xdcX\xbcS\xbe\xb3JSU \xd8ju\xa7%|\xa7%l\xa7E\x0f!1+q\xcfDY\xbc\x14\x173\x82\x1dH`\x1f\x12\x83\x9e\xaf\xb63\xf31V!\xae\xee\xc6D\xab\xb45\n\xa3\xcd\x14\n\xd7\xb5=\x05\xb8\x8c\xfbS\x01\xa1qw\xa6\xad{8\xb9\x8e=\xdcm\x15$\xe4P\xd3\x1a\xfdu{>g{>w\xdb\xe3\xca\"\x8e\xa6\xe5!\x17\x8bC.\xd6\xee\x8b\xc2[\xc5a\xad\x19*\x96\x121\xaeeEhR\x84\x0c\x03\xf7,\xb1\xe5w\xafj\x96\xb5\xd4\xb02\xe8$\xbex\xb1A\x06-vq\xf4\x10\xb6\xbc\x08O\x05\xb5*#(\xb9\xbc\xbdHT]\x84t{[\xec*]\xfdR1\xe5F\x8e -LK}\xf5\xb5\x025I;C\xd5\xa0\xce\xf9\xa2j\x89\xf9v\xf9hh\xd6\xb0\x02\xdd\xb7\x1aQ\xd6\xa1E\xcb\x81\x8b\xc4\x9d\xd1q\x0f\xe0\xd2\x08\x15\x9e\xd3F\xf0R\x81\xf2\xe9\x7f\x01\xcaW\xea\xc8\x17$\xb0\x08!\xe0\xb6\xaa\xa6\x83\x80z\xa0\x14\xc6\xa8\x87\x0e\xcc[4J\xc6\x01#T\x8dC\xc206\xb6KbEK\xc4w\x89\xb1\xf2\xbc\xa4\x9b\xb1M\x9b\x84&\xb6Q2\xe6\xe1\x90\xc5\xd8\xf2\xea\xc0NR\x12~n.\xa8 \xdb\x1a\xc7\x96vy\xffc\xbb\xaf\xb6\xb0F\x82\xa6[l=\x10\xafc\xef\xe1J\xc0\xe3\xf2XmS\x18\xb6oT\x90p\xe3En\x8b\x8dkQ,\xf2\xa0<\xb1\x87\xb5\xafY\xad\xcb\x92\xfdMG\xee\x0c\xefZ\xd0\x805\xbd\xba\x8b]M\xd0\x86\x03\xe8\xbd#+\x12R\x18\x8d{\xb0_\xfe\xe2^\x10\x8aZh\x1bz\xe5=\xfc\x96\xdd\xa1\xd1\x92d\xd0t:^_\x9d)\xd71\xe1|\x08\x1a\x06\xbc\xd2\x8f\xac\xf4\xe3\xca\x85O\xa9\xaa\xf8jFe\xd5\x9a\xc7\x94\x05.\x13\xa9\xec\x1f\x06*#\xca+1{|\xaa\"U\xd2\xba6\xb2\xd7\xa2\xba\xe4\x0e\x0f\xa6\xab3\n\xf5\x91\xa6\xe4\x8c\xa4Y\x177\xed\x16\xb8N\xc9\xc5\xdb\xd9\xd5\xc1\n\x07\xa81\xdc\x19X\xbbY\x84\x19=\xba\x86\xaeJ\x0cm\xed\xf2\xea\xc2\xd4\xeeC\x88\xe1\x91\xb2\xc4\x10;i\"*\xc3\x8d\xeb'ZlUB\xc4Ns\xe9.\xe5tbU\xbb\x11k\xc9f\xc2#\x88%\xc5)Y\xa0X@\xc27\xd6\xd9\x83\xeb\x12?\x1c(l\x05\x9a\xc2H\xe9\x88\x87\xb4\xaaz\x87\x83&f*S=k\xda\xfb\x19}_\n\xfa\xbe\xbcf\xfa\x8e*cI\xde\xf9\x0f\x85\xbas\xed\xee6\xf4\xfa\xfd~y\x97\xc4S\xd8\x06O\x08\x15\xf3B\xcd{\x00=8YW>'+\xcc{\x84I\xe74'\xc1\xf2zO\x029\xdcR\x17 \xdfU\x87\xd28#\x96W:#$\xe7\xe0Q\xd8Q\xfb\xf6\xe1\x96\xd2\x9fq\x7f`\x80\xf4.7\xc8+d\x82\xdf`k\x84:\xf1\xd9\"\xd1\xd8\x1ejCv>wj\x87J\xd1\xa9r\xb8\xa0K\x01\x9e!\xe5\xd3\x80\xdb\n\xf0\x8c)\xef\xfa\xf0hX\xf8\x96.\xa9\xb7\x1b\xc0\xae/\x8e\xa7\xa5@\xeeSB=\xd5* M\x06\xec>\xd1\xdcG\x905\xcf\xae\xe5U\x0e\x9b\xb3\"\xaa\xb2\xb2B\x0d\x85/\x18\x031.\xc3\x1c\xd4r\x07V\x87\x03\xe1Z\x89N\x96\xece\xeeSa\x19((x\xba\x0b\x1b\x93s\x14\x1e\xa1qY\x8d\xd3\x8b\xe1_C5G\xd1w@\xfd\x87\x0c1\x94\x9b\x0f}\xc0\xd7(\xdcR\xdf\xb5\x12\xdcC\xea9\xa5J\x8f\xea%]\x145b\x99\x9a\xffg\xaax\x99\xeb1\x0d\x94UxEG\xd4\x9e(\xb7\xea\xb1\xf2\x96ao\x00o8\xac\xdf\x89\x9c\x19\x14\xd3\xe1\xc0+\x9e\xe8\x1c\x9f3*\x8e\x8d\xb3\x83\xef*Y\x16`\x9fw\xd6 \xc7\xe7a6\x7f\x9aLU\xc8\xc8[:\xe5bT\xaf\nV~\xe8\x08B3\xe3\xf9\x9a\xd6\\M\x11~G\xdccM\xadPji\xa3\xfe5\x1d=\xa5c\xa7/\xb7>\x1b\xc7\x0d\xa6\xc6\xfb\xa2\xea\xc1\xfa(;\x8c\xf3\xa5\x08\xc0Bw8\xdd\x13\xa7\xb1\x98:k\x07\xaf\xfa\xb5p\x98\x8c\x93)\xf9\xb0^\x11@\xd2\x9e\x9dG\xbc\xfeYq\xbf\xad)vM\xc2\x8c\xc0`\xbf\xf5=Ph\x7f?\x8f\xa3/99zf\x9e\xa3\xbc\xb0\xf9\x07\x1d\x9b\x9f&\x13\x0c\x18>\\\x10\xf6\x0f\x9fl\xedf1\x06k\xd3z\xa56\x88-\xa5\xac\x96\xf6=\xfd\xd7l\xb9\xb6\xb7?\xd0@=\xfan\xc2\x07\xbe\xf7?\xe0\xde\xb7\x84\x88\xbc\xa6>\xc3\xfa\x8c\x18=\x1c\xc1\xc1\xd1\xb5\x8aB\x7f\xc8\xfa\xc8C\xfc\x81.\xcfu\x8f\xc1\xde\x9b$\xde!<\x95q\x19H\x98A\x98\x12,\xfa\x86\xd9\xb5\xc9\x14\xc2\x0c>\x93u\xd67\xd5=\x90\xdd\xb3\x0d%\xa2\x8dy9\x89\xd2#$\x80\xa7\xd4\x14W\"/R\xec\x9b}\xd8\xb2\x04x\xb1k\x92\xc4\xb3\xe84w|\xfb<\x8d\xa8\xdb\x9b\x82O\xd7/>\x80\xb9\xa4\x1e\xa8\xe5\x0d+N\xf5\xddH\x86`\x93\x95H\x12\x85\x83\xd7}\xe0\x1b\x1b\xb2\xab\xdb\xd4K\x95\xb5\xdd{\xee\x87\xab\xd5b-\xd8xCD\xbfz]\x06\x162\xc9\xce\xc0\x16\xc8\xb6\x13\xc1\x8aSzI\xf2\x1ax\xff1F\x08\xd1\x042B!\x84\x98\xed\x83\x12rr\x8c\x90\xc4bOXQ\x9f]T\xce\xc1<\xfb\x0e\xf4\xc4z\xeaw:\xed\xa5\xf2\xb5 k\x8caP2\xdah\xf3\x01\xd4\xa0\xc5\xcb)\xb3&y\xfddT\x93\x96\xa5y\x18\xf7@\xa6}G/\xd2\xb7\x06\xde\xbeP\xc7\x10\xce(\xa9\x16\niiG\x03\x05\xbep{\x00\xdf\xf1T\x85\xfd\xc9\x829\xf3Ld\x15\x16\xd6\x97)\xdc\xbdu\x9d\x11\xfcW6_r\x85\xa7\x92\x01\xeau\xb82\xa6<\xfb\xfa\x8d\x96\xc5\xe34IJ\xcd,\xfb\x81\xa2s\x11K\xc3\xf36\xf9:\x93b\xa5\xeb\xacS\xd7\xffP\x93B\xd9\xe7\x94\x11z\x14wh\x1a'\x92\xaf\xa6!%G\xf8\xf22h?c\xcd\xdc\x92}p)Y&g\xed\x92\xb6f\xd6K{\xc3S\xb2 l\x02\xaeM7f\xed:\xe5e\xd7)\xf3N\xea\x0bbO\x1c\xcdE\xc8F\x89\xcb\x03\xe1\n\xe2K\xe3L1\x81\x11\x1d\x8bF\x1d\xc6\xd2D\x0f\xc3h0\xd8\x15\x9d\"E,&Gq\x8b\x8flA\xa2]\x12I\x9c\x898P.\x80-\xcd:\xd1\xbc\xd5\x17\x8f\x91\xbb\\\xf8\xe1\x99\x89\xe2\x99H\x19\x93`\xf0Hk\xc5\xd8\x0c\x86\x10y\xb6\xb2\xdcb\xb92\xbe\\\xc2Y\xb7\x19C\x06F\xa9\xe3\x94z \x03\xb2\xc8\x1b\x9c\x11\x1a@/\x8ay\xb5\xfb\xcfd\xfd3V\x883Cf\x82%\x80-\x1e\xa8\xec\xa5\x99\x98\xf2\x92M\x19\xa9\xd5\x84\xed'\xf3\x07X\xa0\xd4\x9b\x95\x0bhU\x94r\xd6e&f\xcf\x7f-\xd9/\xb1\xdb\xbd \xc3W/)y\x19\xe2\xe3\xd91 `\xa1\xe1\x01\xc4\x9e\x8fc\xd4\xe9\x1a\"\x1eE\xdfi\xd1\x9b\xe0\x9a\xea\x96\xd9\xfa\x0e\x98,Hh-J\xa44\xdet\x8b\xa1\xdc\x1fB\x1c8\xc9yL\xd2\xa3gp BaE\x0c\xe3n\xa0\x9e\x14CQ\xb4S|\x83\xc1\xfb\xc3\xf2\xac\xe0w\xc3\x05\x15\xf5N\xb6\xc4M_pw\xd6\xc9,Iz\xda\xaat\x90\x90\"\x02\xae\xb2ks>\xc0f\x1f\xbfF\xd5\x92c\xb6\xf3\xa4\xe8\x08\xfd\x97\xea|\xd2\xa0\xe9\xc8\xd1\xec\xaeJ\xa0\xec\x86pM\x0fFl\xa9\xd2L\x12 \x84\x03\x07\xad\xaf\xf8\xde \xf0\xf3e8\x90\x7fI\x1d\x0d\x12\xd5}\x88Gj4^\xb3\xa8m\xcb\xf1\x81M>#\x18,\xdbi\x9d#\xd2m\x8dY\x1fN\xeb|%\xd0\x17\xc3J\x88\x87b\x85\xe3\x88\xfe7\xa2\x02\xae\xd6\x81\xfa\xebzQ\"KR\xea\xca\xe7\x1c\x11\xef\x17R\x98\xfd\xdb\xdb\xfda\xdd\x81uT\x1b'\xed\xedWd\xa0\xd6 \x14\xb2\x16[\xa90{\xcdu\x11:\x06@.)\"\x16\xe9\x9f\x87\xd9\x13NO=\x1f\x8f\xa1\xe3c\x12gyJ\xde2z\xedU\x89\xb7d\xa5\xac\x03/zw\xdc\x83\x8d\xf3\xa1zn\xa8\xa3a\xa2\xd8{;\xd8\xc2\xecHjb\xba\xf5\xaf\xf6\xd3\xb22\x05\xc8\xba\xf5 \xce-k\xdb\xdd\x1c\x9c\xa4F\x84\x9c\xc3\x0dw\x99\xa7\x93\x17\xda\xb7:1+\x87{\xe1m\x83r`3\xb3H\x0b\x11\xe1\xc1v\x1e\xc1\x043\x043\xca\xe8l\xee\x01/\xfb\xd4\x02\x01e\xb5[\xf7\x96\x9cI\xc9\xe0\xe8\xb0\x15\x0e\xe0\x9f\xb4dmT\xb6&(\xf3: K\x83\x1c^\xad!%\xf7\x83\xca\xe0\x0c\x04\x83\xa3\x99N\x941\xc9}\x08\xcf5\x9eC\x1fi\x00?\xd0f2\xe0\xd7O~6TO\xfb\xc2\xdeV\x81dR\x0f\xfenN\xfc\x81\xc3oNH$*j\x18\x1f\x8c5>\xac @\x0c\x9d\x9cDt\x89\xe0\x90\x90\x8f\x13\xee\x82\x1c;\xf5\xf9\xcbU\xfa\x9c$yL\xaf\xdc\xe5\xcb\xabt\xf9\x99\xac\x7f\xe4L1i@\xd7\xad\xdb\x17\xd7\xd7\xed\xda\xb9\xd3\x1b\xed\x9d\x1eS^j\xb4\xdc9E\x84M\\\xfa6\x87\x93\xcf\xc8\xbc\x14\x14\xe5'\xea\x89_n\xda\xd0\x1f[S<\xf2\nH\xa6}\xac\x0b\x025!\x0f\xad\xa9,$fGAA}\x10u\xa9FM\xd1\xd4Q\xf8X\xe4\x0c9\x84\x08w\x9bN_a\xc0G\x11%^\xe8\x97\xf8\x82\x06\x10Zy\x15&Qq\x89\xcd\xd3~\xba\xcf\x10Q\xac'e\xfc\xc8\x85\x17\xfa\x01\\x\x0cU\x18\xc4_\xc8\x1c\xae#\xf6\x99k:wB\xec;\xbeVy6\xf74\x9eEF\xf2\x92K\xa0En@\x8e\xac@.v=zm\x95j\x95\x9b7\x01\xb3\xb0V\xd4+<'c\x91\xd8\x97o\x7f7\xce<\xb1\xef\xeeR\x9433\x15\x002\\\x0cu\xf8Ue\x1a\x8e\xb7\x92\x8c\xba\xf2\x9c\xab\x84\xcc\x9ax<\xb9\x8a\xce\xadjx\x9e\x8d2\xf2\x85\x1e>jY9\x13@r\x97e\xe1\xdb\x1c-Cq\x7f\x16\xb1\x93\xc1\x01\xfd\x8a\x8f\xcb\xc4\xb9\xcdA\xfa\xbeb\xedb\x07\xb2\x9af\x17\xe9jy\x8am\x18\xa9\xc0\x94\x87\xca7W7\xb5\xa7\"\x1a\xaa\xf8\xc4\xb6\xe2\x80&pq\x1e\xa5U\xabi\xab\xf7pE\xfe^\x8a\x1a\xa3\x08x\xec\xd2\xf8\xad\xc6e\x02o\xabA0\xa6\xa5\x93\x17\x95n\x19\x86\xf4\xb1\x97\xd5z\xd2\x05A\xc3\xb2\xd2\xf1(\x1a\x17\x0e!\x9a\x81bf\xf2\xca\xd1\xe7\xc5\xa3]G\x89#l9iA\x84\x86x\xf7\xef\xde\x7f\xf0\xe0\xf6\x9d\xbb\x0fx,\xcf\xce\x10\x03ax\x1c\xcc\x9d\xdb\x83{w\xef~\x7f\xef\xae\xef3f\x0f\x1f\xec\xc1M(\xbeQ\xee\xdfa'\xd3\xde\xdd\xbd{w\xee\x0en\xdf\x0d\x80\xc2\xb6h\xea~\x00\x83\xbd\xefy\xf3\xf2\xde\xe0\x9e\xdb42\xe2(\x85\xa4\x02\xc5\x0fm\x15E\xa3\x11\x19\x0b\x01\xa3\xd6\xbb\xfa\xeb\x0b\xba\xba\x08\xde\xec\x0b\x15\xe6p\x18\xb2\xbf\xb9\x15.(\xffD\x9dz\xf1\xd2Q\x1c\xc0\xef-N\x11\xe6\xb9T\x0eCUz\x17\xc7\"g.\xa2\xf2X\x84G\x90\xf3\xd3\xd1HH\xa7\x88\x9e\xd1(\x193\xd4)s-\xb2\x1b\x03\xe7R\xe6\xb5Y\x19\xcd\xf0*\x1fi\x9d!\x16\x1b\xe1;6\xc0\xd3\xb9:\xdd \x9f\xee\x0c\xcfc9\xdd <\x02\x8cm\xda\x9abB\xe0l4\xc1I=\x84\xc9\xf6\xb6\x81![\xc0\x90\x7f\xa7\x17\xc8\x16p\xc0\x9b\x19\x8cq0\x11\xec3\xeeWQN\xea\xbf\xe3|\xb0\x17\xa2g\xd4\x02]\xc9.\xbc\x84IQaIH\xb3\x96\xec8\x18\xc4\x81\x0e~[!\xfb\x7f\xe1\x9a\xf0x\x08\x13]\x98\x8a\x15y\xe4\xc5\xa5Z\xe9\xb1\xf8\xdebp\xaf\xa0\x9b\xe0\xfah\x00\xe8\x88\x1a\xc0\x88u4\xf6+\x1c\x19q\xe1\xc8\xe4%\x9d\x0d\xc8\xc8\x94\x00O^\x11b\xb5 \xff\xb4\"\xa2\xe6\xa8h\xc9\x8d\xd5?@\xcbE\xc9K\"\xbb\x9e6\xb3\xae2\xabQ\x9eMa\x05\":LQ\xf0J9\xd3\xd81\x93\xf7V\x0c\xb7\x90\"em6\xff\x03\xe4\xaf'\xc2\xf6\xbf\x03\x038\x80y\x7f\x95\xf0J\x10\xf3\xd1\x84Q\xa3\xc6\x8d\x11\x1b9\xe3\xc7\xe7\x9c\xc1\xe4\xbf\xfd\x00{\xf6j\xda\xbfyi\n\x97\x02s\x00\xf36\x96\xf42\x80_\xafL\xce\xb4\xd1e\x88]\x86\xcd\x8aB=\x13W<\xafZ?\x9cG~R\x94}\x0c\x9a\x91D\xd2\x10\xae\xe95\x126\xd60\x93snr\xee\xae\x08\xcdF\xe5\xec($\xfc\x11fF\x1e\xf38..#\x11\x1d;Q\x07\xcf\x95\xe9b%3\xb4L\x00\xfd\x84z\xa9 T\x8a\x80H\x04\xcb\x13#\x90\x88E\xaa\xcc$|C\xfd\xf3I\x15\x86\xfa\x97f\x18S\xb95\x04o\x027A\x87\xdaH\xd7\x90PGue\x8e\x96\xa0J:\x1d\x12\xde$\x02_\xdf\xf9J\x8e\x10\x97K\xff\x0e\x1a\xdd\xe1\x00V\xa3\xc5\x18Z\n\xb1sE\xd9\x9c\x9b\xc5\xf8BW\xd7J?;\x1e%>w8(8\x1c0\x94|\xa5\x90\xf7\x99\x95\xbc[\xdc\xbc*\x15\xbf\x04C\xc0\xf63\xaf7\xb3\xf6\x03\xc4\x8c\xdd\x87\x82\xd5\x8f\x1fB\x88i~\x18n\x0ca\xe0C>\n\xc7\x88\x067Q\xb3@F\xc9\xf6\xf6\xd8R\xb3\x0e\x14\xa1t\x94\x8e\xb9\x8a\x8b\xf5\xc8M\"\x98\xe3A\x1f\xcc\xcf\x1e\xaf\x02\x98\x04\x10\x0605@R\x9c\xe7\xec\xffj\xb9z\xb5H\x7f\x93*\x11\xb4x\xb2\x04\xb6\"\x12\x0df\x81c\\\xeaWxS^q\x0eRQp.W\x88?{k\xe03V4\x1fc\x9ck\x0e\xdb\xc6\xd4\xb8\xd0~xs\xa8iA\xd6\xc2!\x15\x1c\xb6\x84\x9a1M \x14\nu\x84\xda\xb6@\xaa\xa8\x84\\!P\xb8\x80.\xa9\x80\x8e\xab\xd6\x10tb\xcf\x86\xf0\x08\"\xdc\xb1>\xbb%h\xbb\x97\xf0-\x1b\xf3\xd7w\x06\xa8\x9d\xe5\xf7\xe8(\x84m\x97rn\x86\xc2\x1f*\xee\x19\x8f\xcc\xe3\x82\x9d(\xac\xa8'5\x93\xe6y\x95\xbb\xe0&\xda\x93\x00\xce\x1b\xe7\xe5/\x7f-;aa$Z\xf8\x08\xce\x10Df\x11)\x81\x03Ht,\x82\xceo\xf2\x97\xffel\x82\x94\xcd\xb4/L\x1cNa\xc6&LF\xa1\x81Lg<\xf8\xc6\x911\xa0\xc4\x9bu=\xa2\x85#\xadC\x0f\x05O\x81\xf6z\xc3\xb1\xd2.\xc3\xed\xec\xac\xe0\x11,\xae,\xb7U\x08\xecn\xa0?\xe0cy\xc0s\xa1y\xc0%\xe5R,c\x14d\"\xce\xfc\x0c\x1e=\xc2#\xbf]L\x9b\xa1\x98\xa6[\xac\xca\x9beT0\x1e\xb3!\xfe\x89\xb4\xd1\x8b`3d\xc2T\xce\xf9 \x06yc[\xad\xf2ZIB\"-k\x01\x92\xbd\x98 \x87\x11\x1a\xcd\x8c\xab\xedm\xfd\x9a\xcf\xbb\x9e\xf2\x8cS\xcc\x88\xc7\x99\x99\x05\x93\x9c\x8cta^\x90K\xe9\x00\xb2\xaaQ\xcbi\x95ZrNj\xc5\x98\xa4:\xd9xyej\xf9\xdf\xacKz\xf9\x9f#\x86\x82\xae\xe9wy\\\xe6Z\x14\x86\xbab\x8e\xa1\x92\xc0\x8f+\x7f\xb8\xbe'&\x8a_\x1d\x0eZH\xe1\x9a1\x14K\xf2\xff }WXr\xee\xb3\x8a\xd5\xf4E\x99\x97P\xc0\x92M\x80\xb1\xee\x13\x93\xf1\xb4\xb3\xa6\xa5]\xcb\xf2\x1f\xd4\xb0\xbc\xd4\x00`\xde\xd8\xe0/\xae\xbc\xc1\xa5\x18\xc3\xa3B\x0b\x9f+\x86 2\xa2\x8e\xdf\x18\x8cu\x0c\xc9\x8b\xeb\xd9\x835U\xaev\x99\x90\xe4!\x06W\x87i\\./\xc3\xea\x19\x05\x12(\xf3\x08\xfd\xc6F\x0ce\xc0\n\xc3H\xd8\x87\x0c-\x01Z4\xaa\xac\x1a\xb68,\xca\x10\x89e\xd3\xe1\xadXv\xde\xa5f\xd7#\xd1)w~c\x91+\xba\xf3\xd2\xb9\xf6\xa5\xfeve\x0d\xac\xa4=n\xd0\x91\x94\xd3\x91\xa8V\xb6\xe8!\xa4\xa2\x84L\xea\x94\"9.\xea\x97\xa0\xe7\xc1X\xadwY\x9f\xdc\xaf\xfaY\xfcrm\x93\xe3L\xa6\xdb\xd4\x0c\xbcN!|\xd5\xe6\xa5\xe7w\x18(\x12(\xb3\xcf$\xfdJ9\x06\x13,@\xa7=}qE0H\x8a\xac\xa0k\x03\xad\x88w\x83\x06\xf0\xd5\x0f\xe0\x86\xdaKL.ZS;\x14P\xa6\x12\xca\xe8_\x19\x94A\x02\xdc\x99\xf2!\xd8\x8b6\x88\xfa\x13\x04\x17\xc9\xac\x0e\xc7\xd4\x98<\x0b\xaa\x8e#\x03)f\x8b\x89Z8\xd6\xa8\xa8\xadZ\n\xe1\xdcg3\xd5AI^\x97en\x9bT\xee\x96\xb6n\xb0\xbe\x99\xa8b!>Q\xf0\xce\xd7v\x1f\x91l\xc4\xc1'\xddS\x0f\xb0\xcc\x1e\xafy\xd6:6\xb5KD\xfbj\x87v\x95FR~f\x19\x83]\xd1\x91\xb4I\x0b\xf8\x92\\\xa6\n\x00\xe4]\xbb\x0cQ\xc3/\x18\xc2O\xd4K\x8c\xf6s\xb0\x8a\x0b\x93$\xa6Q\xdc\xa9\xf8C\xb3\x7f\xe5W\x9f\xfb\xcc\xb6\xecj(\xb7\xa7ic\xb4\xe6J5\xe6I\xad\x11\x90*0\xd9*c\x1e\xea5\xdc\x82;\xcd\x96g\xf2\xd9^\xf3\xd9\xa2\xf8\xce\xe4\xb9\xbf2x\x0c\x9c\x89\xd8\xa1\x0bc~=\x87<\x96\x9a\x88Z\xf6\xe5\x9cxJ\xcaI\x8d\xf0-O\x82\xc8\xa3\x96\x0c\xa3\xb1\xbd\xc6\x03\x1fL*t@\xde3~\\\xa7\xf0\x98g\x8dN\xe1\x11\xac\xe1\x00\xce\x89\xb7\x8b\x0c\xcfY \xe2L\xb1\x10\x04\xf1\xe2>M\xb8\xfc\xedcYZ\xd2\xd9-\x06\xfdD\xdeG_ \xf6\xacI\x03\xd2\xa6\xe9-4\xb5-\xfe&:/\x127O\x8b\xb9\xddaD\xc9\x032%-y@\xd8ArN\x19\x9bL\x1c\xf2\x80(\xc2\x87g\x8e\xb1\xe49\xbc\xc4\x11\xf7\xad9-^E\x19\x85Q/\x80\xde\xb8\x99\xd4\xa2\xd2\x93cR\x8bH\xd6\x8a/\x93\xe2\xfbEVrZ\xcdJn9M\x99\x00[\xb0\x96\xe8+\x83#O\xd2\xe842y\xb6I\x99\x8b\xf5\x14\xf7y\x99P\n7\xe1T\x13\ni\x02P#\xbbF\x05\x06\xdd\xb2k\xb8\xda/\x10d\x84\x83\x8c\xb3U\x95\xaa\xf9&\xbfo\xf4\x0d|\xac:\xb1\x11x\xa4d\x83\xed\xee\xb2\x06x,<\x82]8\x80\xb7\x82\xc7\xc3m\xb6+\"L\xdfJ\xa7\x04\xb4\x00\xf0gD\x1b]\x06`N\xb0Gp=\xe5b\xea\xdf)\xed9\xc74\x8c\x16v\x86J\xba\xf7\x1b_J\xac\x81\x02\x08\xc5\xcf\x18%0 W\xe1$\xa2kn\x10\x1f\xc2{t\xc2\xabG\x0dpy\x10E\xac\x88\xbf\x14\xd5^\xa2\xfd\xe3\x059#\x8b\xf2]\xf3\"n%\x8e\xe1\x06Q\xfa\xd0Z\xee\x00\xf8\xd8\xd6\xba\xd0\x13\x8e\xc6\xec$\xd3w\x13 \xbf\x0b\xae\x8a\xd4\xf7\"\xaa^\x98)y\x0e\xea(F6\x03\x16\x16\xa9\xcf\x19\xdd\xca+`F\xd8\xc2\x0e\xea8}\x1fG\x83o%\x15P5\xa9\xb2v\xc0\xdcJ\x169@9\x84!\x1c\x96\xb9\xb3\xf4\xf3\xdfJ\xf4*\x95\x8a\xe3\xc4\xeeC\xc8\xb8\x8bi\x86~\x92\x02\x16\xd9\xb8\x10\xbf\x8c\x049B7\x91\xb0\x80\x1e\xa3\xf1~\x00a\x9d\x82ip\xf4\xc9\x8c\x92\xc6\xf1\xde\x8a\xa2^\x15G1\xc8\xf8\x1b0UX?Q\xa8oA\xd8\xc8\x8e\xb0\xfaN\x9cp0\xa9\xe2\xa0\xc9\xa2\x848\x98b\xb2L\x86]*\x185(\x88/Ez\xc8\xa0\xf1\xab#r\xca\xcdbE9\xd1d.z\x13\xca\x8a\x08\x95|\x81\xf0k\xcb\x8bi2&\xca\x0f \xaf\"K\xf3x;%\x01,I\xc0\x98\x06[\x1a\xf5\x13\xf3iU\xf2\xea\xf2\x10\xd7BX(\n\x8b\x93]\xbf\x0c\x80J\xbe\xd4\x165\xc3\x0f}3|*\x89D\x04\xe3\xb0\xeb\xd7&\x06\x95\xb8g6\xb70\x00\xa3\x8d\xb5\xa2\xc7 +\xe5\xac\x0c\x9e&\xf2\x92\xc4$\x17\xfeK\x07\x12\xc1\xf8\xf1\xbe/\xa3\xdc\xf1\xa7\x99G\x05\xe1\x97\x92\x8b\xca\x87\xbb\xe8\x19\xbb\x03\xb9\xfd\x93 F\x9a\xee@n\xe0\x1b\xf1\x95\xc7\xb0F\xdca/\xdb\xec\xa1\x02\x08\xad<\xbc\xbc\"t\x9ce\xd3\x9e\x14\xfb\xe1\xd8Rt\x04\x14\xb5\x04V{\xdc\x99\xc0>\xa3\x9a\xf6OD\xcb\xe8\xd9\x15\x8e\xa8>W\nh\xb7\x1d\x80\x0c\xab\xab\xbb\xe5G\xa89nYV\x11 \xea\xbc\x80\x13$/\xd5\x05L\xe0\xf1c\x88\xec\xdf\xcd0\x00f\x9b\x1d\xeb\xf2\x03\xcb2\xcd\x8a\x05\x9d]\xf3\x82\xe2\xb9\xf6\xd0\xe8`\xa1^l\xed\xb5\x19]tW\xa1\x8b2 }\xf5+\x12E\xf6\x98\xa8\xd3\xa6\x90\xaf_\xa1P\x85\xb6\xbel\xb6\xe3\xcb\x8b\x0dcR\xf3%lCpP\x08&G\xf2\x19\xec\xc3\xa4\x0d\xc9A\x8c<\xe7\xae\xe8\x19f\xde\x8f\xf8\xa1\x940\xd4\x88\xd9\xa9\x1d\xf9f\xb7\x04\xb0N\xc9\xb27\x90.6\x1e\xbb%\x948\xd7&\xfb1\x1d\"a#;\xd7\x99E\xa3\x10J59;\x9b\xd98UU9\xfeTT\xe5\x04oH=y\x8c\xbf\xca\xacGa\xa1$\x8f\xf0\x87\"5&\xfc\x86\xd0\x97\xe7\xfcW5\xb9W\xe8\x04\x8a\x0bb\xd3\xa8\x9d\xa2i\xd0C\xc5\"\xb7\xeb3\xf1\xcd\xd1\x14\xfe\xbe e\x13\x88s\xee\x8f/\x92\xf3\xd8c*(w\x9a\x7f$\x89\x9bT\xcc6>@^\x18\xf1R\xf1\xa5\x88l\x1b\x93\xb3\x9c-\x9c\xdb\xa4F\\G\xa1%c\xce\x8c\x9b\xf8&\x1c\x0e|cHXX5I3~B\xc9\xbcQ\x9ed\xc3\xd0\xc6[t\xccXi}\xd8\xa0iE\xb3\xea\xc8\x8b\xe3\x9f\x96n\x99jWA\x05v\x1c\xf2(\xec4xK8(nJ\x13Y\xae\x8e\xb3\x19\x83`\xc2\x9bC3OW\xa8\xd9\xd0\x1f\xa0\x88\xc1\xa3\x8ag*\x15\x1e\xa8k\xe2\xf1\xfc\\\x82-E\xae\x94\x8d\x8a\x89\x97\x8d\x02P\xfa\x91<1\x8f\xa4\xb0\xa0\xd7l\xbf\xaaeU\xcf\x0f\xf2/\x1fq\x81F\xb2\x82\xb0\x0dg&\xa4\xab\xfarJ&R\xf0\xad\xf8\xf5C\xee\xb7\x80\xae8XXuX\xf80\xf0P\xad\x14=\x19\xd8G;C8\xb3\"^[\x99wcE/k\x92\x1e%\xe8EF\x9d\xf1r\xc7\xea\x13\x19\x7f`(o\xac\x98\xf5\xd5t;\x98\x9f\xc1\xcc\xb6\xb7\xb0\xff\x89\x0b\xfb\x8f1\x1e\xb0m*\xce\x10\x1623bc\x8c\xdc\xf4>\x9a\x8dv\xf1\xefm\x0c\x19c-h<\x16\x18>\xe4\xf5\xfd\x95\xb4\x91\xa9\x9c\xe1\x9e\x12s\xc0\x0d\xbf:N\xa5\x1a/Q\x88\x1e\x13\x15\x99f2\xe8t\x1bfl\xd4\x0f}|.\xf6\xd1\x84\x8dkR\xdd\xf1\x070\x92\xc6\xa3\xc9X\xec*&\xd8\xcd`[f\x1f\xc8\xd8\x9fg\xba\x11q\x99\x90=\x9e\x05\xbc\x8c\xfa\x8c\x1d\x00\xfc\xdf\x04\xff\xb5Md\xc1\xa5\xb1\x04#\x08\xf0\xcf\xd0\x7f\x08+\x06\x11\xec9c\xbb\xc9i\n\x95\xa1\xf3\xf1\xea\xf1n\xde\xe6N2\xc5 \x8aG\x18#\xc1\xc9F\xc8%\xee}60\xbc\xad\xa8\xb70\xba\xd1pda\x905\xff\xe6\xe6M\x8c\x03F\xd1l^SA\xb4\xd0\x8a5F\xb0 !\x9f\xf0\xe9-a\x08\xd9CX\xc2c8c\xff0J\xd0&K\x1c\xc3\x10\x16HA\x96z%\x89\xbcXwkAr\x8e\xc7\xbc\xdf\xf2\xb71\x81\x94\x9e\xbf\x93\x1f\xf2\x9e\xcf\x90v\xc1\x10\xe6-\x94 $\x83/A\xe6\xb1E\xc1(\xf6iEq\x92\"\x1b\x13\xfax\xd6=\x1e\xc2\xca\x87\x9c\x81c\x85\x8b\x86\xfff\xdcmaR8(4\x9a\x12z@\xde\x96.|\xb2pGf\xc2q\xc4(\x15\xe2\x87u\xe5\xc4>\x9cX\x85\x19\xb60'\\\xe8~\xfc\x98\x1d\xe8\xb6\x85a\x038A\xea\xba*_\xf7\xe1$%\xe1g\xf3W'BP\xdb\x1e\x82\xc7\xb7\x94\x0f\xdf\xc1 n\x92\x9d\x022b?\x8dN\xf4\xc2\xad~q'\x1c\xab\x1f\x0b5\"o\xa7\x0e\xd2\x8c\xad\xcc\x0e\xcc\xd8\x12M\xf8~x\xc4\xf7C\xe5\x83b93F \xc4\xfb\x92\xba\xec\x08\xaa\xb2\xa3\x8d\xa2\xec\x9c\x924D\xb5Fy\x9cp\xb6\x9bV\xd8\xf9\xb0\xd4\xed\x00\xc6q\x96\xeeU\x13\xd5\xbdj\xea\xea^\xc5\xc8\xc49\xf1r.\xee`\xa4f=\xba\xd1p\x1c\xff\xe1\x96/2U\xf3EV\"\xe8\xcb,k\xa1=\"\x04\x93b[\x99\xe0 Z\x01M\xe9{&\x1c\xc2\x8f\xc5\x9eMp}E\xa5\xbf\xdc\xcbxJI\xbe\xea\xd7\x9dR2\xe5\xf1h\x93\x0e\xe8\x91\xc0c\xe94y\xf3&O\x10Uz%'HR$\xe4\xebYn\x0c+\xf5\xb9-\xc5\x1cw\xab\xdeE\xa5\x9c\xd4Y\x9f\xb1My\xe6\xd4\xfe\x91\xbd}k\xa1\xc7\xa7\x9ce~M\xca\xfa\x8e\xecVg\xbf\x9b\xb3\xff\xf5\xf5\x1d_\xdb\xa1X\x94\xc2\x9c\xd5\x11\xce\xd4\xe0\x07\xd7\x94|U\xd5\xc3\x91bT1+!\xca\x14\xe1(\x02\xe1\x8f}\xb4\xdb\xf7\x8fy\xea \x9e;|\xc1\xed\xcb\x0e\xb9\xc3\x9d\xe6\xf4\xd4\xaaLXre\xc2\x92\x8d\xeb\x03\xf1xu\x9b\x0b\xe25B\xfd\x0c\xad\xffl\x970\x84i'\x90,\xbd1\xf5R.\xf8\xe0(3x\xfdb=6LIA\x0c\n\xff\xac\xe4\xf8\xd9\xd1\x1a\x9aT C\x9e\xb7I\x8f\xb7\\?\xd1\xa6(\xcc\x05y\x1cr\xedi\xf9s\x0f\xbe\x83D:n\xa2\x8d\x88\x1b+\x9b\xc9O\x0d\"\xac\xbcD\xff\xca|\x84\x8a\x05\xa55\xc3>\xf2\xfb4yI\xd6d\xfa\x9e|\xf1\xfc\xee\x94\x99\x8ev\x0d\\\x83\xdf\x9f-\xa2\x95\xc7:x\x1d\xf2|:\nn2\xa2\x9bVp\xb5\x8a\xb9\xaa\x933:\\\xa0\xf1L\x96}c\xd4%\xc2\xc3\x9c+1\x14\xe7\xde\\Q[0\"\x12J\xd1T\xa3\xbcTb\xcd\x8c\xb6\x99\x12\x01rD\xa5\xd0\x1f\x0d\xc6m\x8b\x9dr\xd5\x1e_G1\n\x9ej\xdd8\x08>?\xe1L\x9fK\x12Z\xb6\x90\x8bB)\xa2\x19#\xc90\xf1=\xa9,\xb4\")\x07\xf7\x0d\x17\x94#\xd2s2\x0c\x8c\x1f\x90\x93s\xcc\xbc\xfc\xae\xc5\xeb\x04\xdd\x95\x14\xaf\x93\xe3<#/\xc9:SJYH\x8a\xd7L\xe2k\xea\xf4\x8d\x81\xa6k{\xec\xde\xfc\xab?\xb7\xf9g\x7fn\xf3_[\xe2\xd8\xfeAl)b\x89:\x02R\xed\x9e\xdd`[\xbc\xcd\xabSi\x8e6\xb1?\xc0b\x8e\xb2xIkCgE\x99d\xf1\x91\xac\x7f\x86\xdeg\xb6\xbe\xdd\x07\x0b\xean\x12\xddx\x06F$\xd0U\x14as\x9a\x87Y\xab\x1b*\xa8\x1dE\xf1d\x91OIV\xafj_\xb4(_\xe8\xd6\xec<4\xb78 's\xf2\x8ed\xf9\x02\xf9\xdf8\x00\xc5\xa3\xf0c\x8c\x8f+e\xbbl\x11L\x85ZO\xebL\x01U\n\xd5\xa8g\xe5\xc8\x18\n\xafC\xf4\xb5\xa7fu\x84\xb1\xd8\x95\xe2\x9d\xdau~\\\xdf\xcb\x0e\x82wmR\xbd\xd4n\xca\xaex\xbbf1]\xb2\xf0nN\xac\xf2\x92v\xcd\xd4Z\xbeV^\xc8\xa5\xd0\xd6:\xb6\xf2*\xf7\x19\xba\xb9\x8ev[\xb2!\x01\x86u\xcaw\x95\x0f\x07\xe3@\xf9\xbb\xe1^X\xbf\xecfQ#\x19\x91\x97)\x8b\xb9\x1b>\xb2\x95\xc2\x15\xfe\x99\xc9L\xb0\x0f?\x1b\x11\xa9r\xd3D{\x9f\xb7s\xba\xad\x148\xad\x13\xdd\xb4;i1\xd3\x80\xb4\x1e\xd2\xe9RT\x99\x97%O\xcd\x85~\x0b\x19{(r\xd0G\x18&\x8c\xbe\xf6\xbc\xc4N\xaa\x15\xedp@V\x02\xe44\xbc\xab\x12\xa0\xa8\xc5\xd9\xa6J\x83R\xaf\x9c\x91\xfcXX\x04MD)j\x99\xb2\x9e(9\xcdY\xc5\xe1w\xe6\x14\xce\xdd)\x8d\x14_\x93V*\x83\x8ev\x82\xc0H\xf9\xd5\xfc\xf6\x99\xf0I\x8b8m\xb0\xbb\xa8\xa0o\x82\x95\x06I\xf9\x9dA+\x0c\x14d\xcb\x91\x02\x85\x0c\xdf\xb4\x0b\x00\x06uB\xa3*\xa2a\x8f\x7fl\xf7\\\xb3o\xf0Xe\xb1\xe2\xfan\x8f\xbb0G6.\x8br\xf6\x07-s\xce\x9c\x90<\x05\xbe\xeag\x00*w\xd5a\x9c\xa0\xeeE.%\x9a\xb6\x8c\xae\x8c\x07\x83J\x8dl\xd9\xd2 \x16=\xa1&@\xe4}\xdc\x19\xc0\x8e&\x855\x08\xee\xa1Nc\x8d\\A\x95\xc6V\x1a7\xb4|56\xae\x85;\x8c5\xbc\\\xac\x8f\x0e\xf9\x8f\xf3p-\xc5H.\x03\xd82\xc1N\x1f[d\x9b\x91\xf6\x8c7\xf7\xe0\xb4\xe5\x7fpU\xf9\xb5\x9c\xec\xb8\x19\xa3:\xaa\x19\xf1\xf8\xacH\xd4\xebv\xfcFxL-Y/[[%A\x8c,\xa7o\xf4\xe7\xb2\x03\xc5x\x9a\xbc\x80\xb0\xb5kJ\x0b\xf9\\\x87ia\nl\xde\x94gJ\x9c\x80\xf9\x8c \xf5Uy\xa1\x1d\xe1\x13\x8b[/H\xa9A\xe5\x13\xf0\x832\x91\xe2\xf6v\x00\x91\x87~ \x1c\x02hn6\xe7\xf9dS\xad\xfb\x84\x81\\<;\x1f\xe1\x04\xa6\x1a\x1f\x91X*/\xb6\x03\xad\x03\x9b\xe1\xe8\xfc)q.o\xe5F@\x06eT9\x92\xc4\xfe\x854\x84%.\\ \x08\x9bX6\xda\xb5X\xcd\xe4\x85\xd9,\xb5\x89A\xd5\xab\x8a/34\x15*9\x81\x9ecED\x91[\x1d\x91gfd8\xc1(\xf8\xe8\xf9\x1d7\xdb\xc0\x17W\xe2G\x0d\x11\xa7l\x86\x9d\xdc\x88\x98\x101\x80[\xe8\x83\x83\x81\x88\xe8\x93#\xde\xff,*\x98E\xady\x93\x18\xda\x1c\xf1:ff{\xc2k\xa4\x90\x86\x80\x1cF\xc0 \x81\xcd\x06r\xf6W^\xf4\xc8`\xd2\xa7 W\xa1+\x07\xb1\xe7\x97\x90\xd2\x0fJ8y\xe7\xb0\xa3\xc3\xcc\x0c\x86C\xee\xe9\xe7\xb1\xcd\x96 G\xa4]\xd8\xd7V\x9a8\x13^\x8d\xf6cg\"Y\xcc2\xdc \xc4\xcaZ\xd2\x18\x1a\x96\x06\xc4\x00\xb6\xf0\x94\x8a\xa4Y,,\xd2\xf8x\x93\xfaY\xe1p\x0c\xcb\x0c7\"\xdc\xb4L\nDDQE\xc9\xa4m3:\x89\xe9f4~l~\x00\x93o\xd3SEV\x1e'*\xb2\xea\x95\x8eY\x06B\x87\xd6\x81J8Nu\xfd\x95S\xc3\xa2\x03\x92\xd4\xd7\x12E\x9cqW\x02\xe3\xf3I+1\xbe\x12\xcb&|o7\x1b\xd8\xc2r\x90\xf9\xf66<\x82\xa4\xdcl\x13F\x83\n\xad\x9c8\xc7b,\xf8\x80\xe7X\x84h3\xe1\xe65\x031\n`\xa2\xa3G\x93oT\xd6 \x9b\x1e\xeb\xdfi\x89\xecz:\x896J\xabM\x15\x9fy}\x1c\x96\xf7\x9a\xcfR\xb9V\x0f}\x88ZOK\x06\xaf\xed\xed\x0c\x1e+(\xdfv\x12;E\xbfC[\x04<\xbb.\xedj\x024P\xb5N\xa1\xe0\xaa1 \x96\xd4\xe2Q\x0c\xb0'\x01\xaf\xa3\x13\x88'Oe\x92\\\xf4\xc6P5\x95]\x14\x04U\xac5\x1d\x98\xbf\xbb\x1e\x98v\xb2}M<\xb0\x99\x8c%.{\x84x\x16\x97\xf73\x11da\xa3S\xed\x88n\xe1\xb4'\xad\xa4\x8a\xa7\xe4\xc6\xd3\xb2\xceuO\xfc\x92je\x0d\xb6;\xb3\xb3\xdd~\x00\x9a@\xcbk\xe2\xb9\xbf}Y\x92\xd4e]\xba0\xf7\xdf~\xdet X\xb8\xc9q\x914\x89\xda\xe55MZ(R$\xb3\x0e\x86\x82V\xf8U\xd6\x1f)CT\xa3\x0cQ\xc0\x8f\xb0\xa8\x8d.\xb4\xcb\x0d\x8b\xd2\xeaa\x7f\x99q\xa2\x0b\xac\xe47\xc3\xbfX\x07\x9c\xcb\xcb*x;\x13\xf1L\x16\xf6\x1e\xce\xe7\xd1\x82\x80\xd1)\x0fTu\x00\xda\xae\xd4\x99'\xd8G'\x9a\xe7&$\xfcz-\x86\x8fo\xb6\x04X\xf0\x17\xe9\x94\xa1\xce\x91\x18@1\x1b\xeae-\xb4\xe7LT\x0d1oeve:\xca\x16\xb5(\x10@\xe1\x9e\xb7\xd0\xf3j\x02\x8f\xb0`\xcdM\xc8=\xac\xda\x87e\xf2'\x18\xa8\x0d\xfb2M7R\x84X\x94\x03HPR\xf4\x0bIbk\x17\x8bs\x9a\xf1\xca\xac*g\x0b\xcb\xben\x96P\xfa3L\x19\xa9Y\\\x03\xb1\x8a\xa3\x96B\xe7\xd7F\xa5\x04[\x958))\xa8\x93\xc9\x04\xe4\xb9%R\xcdw2\xcfN\\\xe9\x0d\x88^RA\x01\n\xf7\xeb\xd1`\xcc$T\xd4\x10z\xa1\x8c\xa7@\xecb\xc7h\xeeM\xca#3.\x08G\x1a\xf0\xf3s\xd2N\x16\xd9\x15r\xe7\xdcD\x94F\x9b4\x96\xd7\xda\x82\xf0\x8eJ\x90\xac\xa3g\x97\x19i\xdb(`\xdb\xaa]#C\xdb\x81\xa2\xba\x99\x99~\xb1RT\xee\x91\x89\xd1\xaa:\xf9E\x12\xdc\xd0\x986:2SK\xbe'\xa5v\xa3\xe2 HZ\x8a8 \xb8\x8fR\x1cy\xc4K/\x1e\x00\xffP\xb8\x97\x11\xa3\xfb`\x91e\xdaxD$\xfd,I\xa9\x9b4+>!\x1e\x1d\xdd\x1e\x07\x10\x8fn\x8f\x11\xcb\xe9ho\x0c;\x10\x8f\xf64\x19\x82\xfd\xb2 y-+\x83q\x97\x96;i\x08{\xcd6\xeb\x15\xfal\x0d1\xd0\x8f\x06\xba\x81q\xce\xf5\x85\xa8\xf1\xc1\xdd\xbao\xf0_?z5\x85\xa0 \xa7^Zq\x8a\xfb\xbb(x\xe5b7\xfa6\xed\x82,u\xe0\xdcRG\xe0\xcaK\x02\x99\xad\x0f;\x99\xe0w\x0fC\xd8K\x9fK\x86\xef\x96\x03\xff\xea\xfa6\x07\xf6\xbf\x03g\x88\xab\xd9*\x80\xa1n\x02\x973\xb9\"\xa0\x04\x16\xd8\x00\xc2\x13\x90\xf4\xb3dI\xae\xd2\x01C/K\xf3\xa2\xbe\xd4_\xc8H\xc9\xfc\x989\xe6\xc7\x14\xce\xbe\xa2\x1c\xc5U\xa1\x88\x03\xb4\xcd\xf2\xfa\x05\xe2\x1f[s!p\x13\x0b\xaf\xc9A\xfb\x93$\xceh\x9aOP\xb3\xecF\xdf\x7f28zGE6\x1b\x1e\x81\x84%F\xe8(6j\x0d\x810\x01\xc9\xcd\x818mI\x9c\xcc9\x88\x82\x04Zs\x8aq\x0bv\x14g4\x8c'$\x99)\x15\xcf-N\x11\x089D\x8f\xea\xa7\x95d\x9f\xa9gR=\x17MX9tv\xc5\xa8\x96j\xd7\xb2\xe6e(\xe5g\xb2\xce\x8c~\x89\xf2\xdar\xe3\xca\xd4\x8b\xa6k\x87\xb7\xd8E\xb4\x11\xaeN\x9d\xc8K\xcceJfQL~N\x93\x15I\xe9Zp\xbe\xee\xad\xb0\xeb\x94PE\xb4\xec2\x06y\xa9$\x88\x87Mvj\xe2\xb2\xdd F\xbd\xb2\xcax[\x8fo\xdduJk\x89\x98\x03\xe8=\x0d\xe38\xa1\xacuHb\x08c\x88\x8a\xf4\xbc)\x99$\xe9\xb4\xdf+H&\x8f\xb6\xb3\xb0\x98\xba\xab=s\x9b\xbc\x0c\xd1\x08\xf5\xeb\xb2\x7f\x12\xc5S\xaf\x8c\xbak\xff\xec\x12&!\x9d\xcc\x01\xc1f\x1f\xd0\xa5']\xd3\xe5\x11\x91\x0b\xfd\x04r\xfdq\x88\x81\xbcK\x93\xe5aL\xd35\xd7\x95*\xca\x9fv\\\xe9V(\x81\x0b\x7f\xc3F\x95\x04\x87\xfc\xda\xa4B\x14*\xdd\x1a\xcd\x08%!\x11KT\xfd\xc8\xbc\xacp\x00\x1f\x88p\xe5\xecPmA\x1e-D\xdd\xd9<\xef\x85F\xa2AHF\x99BH\x87\xf0\x9aT\xe1;\x9a\xca\xea\x06\x15\xa8\x17u\x0e4\xfb6\x00\xe2\xbd#\x01\xbc\xf0\x03xw\x05\n\xdc\x14\xfc\x90\x02\xeb0\xa1\xd2|-n\xa0\xb5\\\x1ao\x9b\x17M\xb36\x8c\xfa\x91\xf7\xe4K'\x9a\x81\x8d\xcb/\x9bt\xe1]\x15nN\xa1BgJEf=\xbe\xb1&>Jr\xb8\xa5K6X\x19\xa3L6\x80F\x0d\xe7i\xaa\xcd\x88yJ+\x8798\xfc\xd2o\x04\x89\xd6\x80\xc01\xb7\x15;T\xb2\xa8\x07\x02\xa3\x02\xcf+\x87M\x070\xa4W\x01C\\\x03\xc32\\i\xf0\x15\x04\x18\x1a\x85_\xde}\xdb\x19\x11XB\x94\x9a(Y\x1e\x13\xd5\xc9+\xe6<\x07\xc7e\xea\x11S\xcc\xd2%#P2\xdf\xf2?y7>\xcf\xd2S\xf4`T\x9d\x17\xcdG\x81\xc8\xd7\x1c\xc3>/\x06\xa4\xeb\xcao%\n\xdd\x8e&<\x1eT\xb0\xf8\x16\x08\xca\xe3I\x7f\\\xc4U\xddS\xc3\xa0aD\xdd:\xd8\x8c\x8b\xea\xa8\x90\x97\x96\xa1\xd8\xea}Q\x88 hP\xe1JCT4\xf3U\xc0\x82\xf8\xe8\x17V\x98Wt\xcba[\x8a\xf2$!\xde\x1b\x12\xc0\x0d?\x807\xeaR\xe9\x02\x01\x1d\x89x\x11\x0d\xd8\xa4\xe4o\xbems\xb5R\x1a\xf3\xfah7\x9d3o\x86;\x0cA\xee\xca\x92ig\xea\x86\xf7\xdf\x84\xb0\xd7\x82\xa1\xc4\x15C\x89\xc4P\"14\xe5\xa6\x10\x81\x97N5\xc3\x88\xf7\x8a\x04\xf0\xa3\x1f\xc0\xabo\xe7 ,\xc8\xf7\xeaZ\x90\xef\xcf\xc40\xe2\x8e_\xda\xc9\\\x1b~\xfd\x87\x91\xa8\xc4\x9f\x8e\x88\xf4Lp\xba\xcfT\xe8\x10!\xcc\xb4\xf1\x10\xcdu\x14,D\xbd\x9fg\xff\x95\x88\x84.1\xa6\x87\xec\xfa\x89x\xc6\"z\x8a\x93En}\xab@W,\xd1\x8f\xc2\x00:vr\xb1\xb5\xbc\xb9\xcbo\x1a\xa4Xv5\xf5rZD\xd7\x02\xfb\xbf\x06\xd1\x1d\"C\xdd\xf6\x02\x14\xe1\x95\x15\xb7p\x8b\xf3\xa4\\/\xd2\xe6e\x89\xde\x95\xb6\x11\x02G\x0e]\x18\xa0zI\xde%o}S\x0c\x1e\xf7r\x04\x07<\x91\x0bG\x89\x14Q\xa2\xbc9\xe07\x07\xcd|\xf9\xeaepYt\xa0 \x95s\xb8\x9a\x86\xe0\x9d\xf9\xd1+\xf3\xa3g\xe6G\x98\xa3\xcaK\xe3\x00N(\x13-b\xe5\xcdoT\xb0\x86\xb1\xe0A\xb7\xa1g\xd4\xb0V:\xec||V4\xea\xec\xf3\xb7\xe7qi\xf2\xb1w\xe6\xa8L\xe0i\x9e\xe6Eut\x1b\x9aW7oep#\xaa\x89S\xae\xcc\x85\x89\xaf\x07\xe5\xdfRg\xa1\x89\xd9\xac\xcf\xc4I\xf9[J&Z\x95\x15\xef\xff\xe6Me\x00\x15}\xae~\xb2R\x99\xa0\xda\x06\xcc\xd3\xec\x1f\x93\xe5\x8a\xaeQL.~\x0c!\x8f\x85\xa8\xfd\x1bm\xa6<\xadM\xd5Qc\xdc\\\xb4\xd2J\xcd-\xd4\x7fS\xacZy\xfc9N\xcec\xf8L\xd6\xd0\xfb\x1bl\x03\x85m\xf8[\x0f\x92\x18\xd8/\x89\xc7\x06#y\x05z[%\xf8D1\xfd\xb2\x16\x87\x16)\x1c\xf4\x86\x15cBu\x892\xa9\xd7j\xc1\xadJY\x08e4%\xce\xc1~\xb9\x0e\xcd:\xcc\x955pT\xae\x1b7\x8ey\xa6\xc48\xfb({\x8f\x9a\xf8I\xdcT\x01\xcd\xe2\x00\x16\x0c\xc7z\x7f\xff\xfb\xf1\xf1\xd1\xeb\xd7\x1f?<\xf9\xe1\xd5\xe1\xf1\xfb\xc3\x0f\xc7\xc7\x7f\xff{\xaf\xe9\x08\xb2bog\x0eJ\xa3y;\"\x18\xaa5\x91z\xb5& \x05Y([j\x88\x91\xcd\xe5\x87\xa6\xf4\x8eg\xa0^\xae\xe8\x9a\x87O\x17`tSDL\xdb\xf7bU\xc9\xb5\xb2\x04a\x94\xd9\xeck\xe5\xebb9-\xca\xb3z\x97kJ\\\x93p\x9fY\xe9\xd2\x0c\xf3\x0ex36\xdei\xec\xe9L5\x86v\xd7\xdf\xa0\xd2:\xe7*\xad\xd3\xb8\xd4d\x9d\xff\xbfM\x93uj\x87_\xa1\xee\xd3\x14XT\x7f\xad\xe2\xd1\"\x96\x0et+E\xa9\xb5*\x95Z\xab\xaa\x82I\xfe\xac>\x10\xac\xc1*VuV+\x17\x85\xcf\xca\xa6\xf0Y\xb5)|V\xb1\xdc\x870\x84\xb3X\xdc`[\x11Q2\x00\xe2\xadcF\x9c\xfc\x00\xd6\xd7\xa7\x11Z\xff)\x1a\xa1\xf5uj\x84\x84\xff\xbdM1\xb4\x8eK?}N\xb9O5\x94{\x19\x07p\xcc\xf6\xc9\xda\x81\x16\x9ft%l\xc7\xff!\xc2vn\x85\xe6\x92\x13\xb6%\x1b\xefI\xec=u/\xbby\xf1\x0d\x84\xed3'l\xef\x15\xc2\xc6n\xf5\xf38\x9bG3\xfad\xb1p\x8d\xe6\x7f\xef\xac\xe8~bWt\x1f\xc7\xa5\x83\xed\xb1\xba\xd7\xcecqC\xec\xb5\x13\xdck\x17q\x00\xe7\xd4\x0f\xe0\xe2\xfa\xf6\xda\xc5u\xee\x8a\xf74\x9c|\x86\x11\xdb\x10\xe3\xe6\x86\xb8\xb8\x82+H\xd5\x18?'\xe1\xb4\x89\xcf\xa8\xb7\xa2JRn\xea?\xe4\x89\xd7\xe9\xce\xceC\x1f\xbf\xe7^U\xe6\xbd\x00\x07 \x92\xd0\xe8\xe2\xfe*#_\x11\xf2\xb9\x13\x80\xd8\xa8K\xc3!\xfb\xa5\xc9\xde\xd1\xe8%\xcf\xe6m\xbd(9\xbe\xe5\xfa\xbai\x1d\nM_\xe1L\x82\xbb\x7f\xbb\xd1N\xa00\xc0l\xe0\x01\x02\xb3\xfe\x16\xec\xc0\x80A\xfc1W\x1b\xee\xec\xf8\xf8\x99\x89/\xc0\xcc*E\x1b\xa3\xd8\x90\xfb\x90-X}-\xd8\xa5I\xb4\\\xc5GC0e\xc1i\xe3z(\xf1V\x8d\x8a\xa1\xfcn\xad\xfc\xb9p\xed\xff#\xd6\x8b'\x8d\xc5{\xc2H\x91\x83`\"\xd4\xc9\x98\x1f\xda\xa3\xbe\xcf9\"\xfb\xfa\x959HZ\xa4\x16d\xc0\xf5\xd0m\xd9T\x05o_\x84\x07u\xe0\xd0\x08\xcf\x92gB\x01(\xd1\xc0P\xf5\x18\x8a\xf5o\xa6\xce\x87\x06\x19\xc5;E`\xaci\xfdIm\xfd\xe3\xab\xae\x7f\xd3\xfd\xba\xb1\xfeIke*\x15e\xb3E4!\xde\xc0\xde\xa68\xa6\xba\xb4\xcb\xd0\xd0Q\x1d\xa5\xeb\xca\x05\x83\xeb\xdd\xe9N\xd1Z\xeb\xdd\xa7\x91\xac\xae2\x8b.V\xa6o\x8d\xcf\x16(U\xc3\xa0.x\xc5X\x11;\xd8\x18\x92\xb8\x1c\x99\x8c\xa8|\x16\x8e\x1e\xc5`]\\\xc1b,.\xa2V\xe95h\xb8_{\x95\xa6\xab\x16\xaa\xa2\xa3sZ\x1f}\x99\xa6\xc7\x18\xe3W\x9cLi\xe5d\xc22gQ\x95d\xb1\x83\xe6\xa1\x8fw#\xfb\xe9n_\xc4\xb4\xb6\x88\xd1\x95\xd6\xef\x8fXWa\xba\xb6\x86\xdd\xd4V\x85.\xa9\xa9\xb9R\x10\x14\x0e\xf0L*\xa8\xbd2\x99\x8ea\xc8\xea\xcc\x06\x06=\xd4\xc5\x95\xb5\xa0\"\xee@]\x92\xf2hQ<\xbflH\x11\xf3=\x97\xd6\x10!\xad$\x13Le0H\xac$\x13\xc4o\xd2\x16&\xd0i\xb2n:R\xa7\xd9&z\x1db9S\xed\xd9\x97\xba\x9d\xdc\x8e\x91 \xad^\xff\x92\x9fH\xdb\xe2\x07D\xbf%\xa0\x03\xee\xd9\x8f\xcb`\xb2\xfa\xeag\xc8[je\x1e\xda\xb2\xf3Y3\xf3\xb9D\x05\\\xa0\xd6\x15\x85\x9a!\xbc\xd7H\xef\x87q\x00Otz\xd7\x0fO\x9e\xbe4h^\xdf\xb2\xf7/\x1c\xa4\xfd?\nw\xbd\x96\xfc\xa15\x8f=kF\x99\x92\x19\x8eTN8\xaa;\xeaE%\xfdK\xf9\xaf*upK\x19\xf8\xd9z\xea\x1er=\xc0!\x03\xc8\x1f\xb1\xd7pO14z\xd4..\x16ho4K*\x87\xd3\x08ut\xec\x9f&J\x18!\xa9\xa6\xef\"%o\x1c\xfb\x01\x94.\x93Jh\xc4\xfb\xf5\xf2$Y`\x85\x04\xdb\xf3z[\xb4\x06\x11\xf5\xd7\xdbx\xf4\xa4P/\xbeu\xd1\x06\xbe\xb5i\x03\xdf\xb6i\x03Y\x17\xaam\xed\x8b\x9aE%\x80\xb8\x7fT\x12\xc8\xaf\x01[\xa6X\x97\xfeK\xa4\xc4vH\xf3\xf5\x8cz6V\x04\xc4\x82S\x91\x1b\x97g\xda.\x8f\xf6\xcdFk\xa3\x87\x1acP\xe6{0\x98\xde\xac\xa6m*\xb0GOc\x1a+\x88w\x9b4\x81&G\xf1\x94\\\x90\xe9{\xf2\xc5\x010\n\x89\x7f#\xa2\xce\xddz\xf9\xe9\xbd{\xeb\x08\x1cm*l\x17\xcd\"W\x87pa\x84p\xefn\x1d{!\xa7,\xd2\x94]\xd2I!\x17;\xf6\xde\xa9\xdb\xec:\xbb\xed\xbcI^u\"\xa6\x9d\x9a\xcf\xaa\xb3R >\xce,\xac?/WY\xaa!\xe4\x9c\\ \x052\xae\xee#\xbc\xb86\xd0\xbf\x8a\xb2\x0eK\xbe\"\xd7\xd5/7C\xb8\xf7\xdc\x1b!\xc7r\xb2 \xe3\x9eK\x0f\xa5\xa9\xc3\xb1\xfc\x85Y\xbb\x04\xdb&\xc6\xf2\xba\x9f\xbe\xf2\x12\xc3\xcc\xb91\x8f\x97\xd9e\x94?\xc5\xb0\xc7}\xce\x14\xc2\x01\xe4\x98\x92|\x1fB\xea!\x7f\xd8\x8f2\xc1'J#\xe0\x88\x8e\xb5\x94[\xbd.}wOo\xf5*\x10\xc0\xe2\xf5\xad^\xa6\x8a\x1dP1\x16D\x0d+\x8f\xfd\xabA\xed+\xfb\xb8\xcfD%\x84h\xb4\xebP\xe79)\xed\xad\xb8\x08\xa1\x97\xa0\xc7\xae\x0c\xc4\xcd<\xa5\xd0j\xb3\xde\x96\xbc\xcc\xd9W\xcfD\x95(Q\xfdBW\xd7X^\x92\x92ci\xe9!L\xeaT\x14\xc7\xc4$N\xf9T\xd2S?\x90\xf7f\x8b\x90R\x12{[\xbb\xc2\x12\x83\xdaEM\xd1\x13\xebV\x00\x01\x1c%\xcd\xa8\x13\xba\xc8-\xc4\xfd\xa0\xec\xc0\x87f\x1fJ\x85X\xd86XN\xe4e\x06\xf8%\xaf\x8d\xd6,g\x8b\x0f\xa5\xfaV\xe3\x0e\xed\xc6\x8eH\x8f^\x97\xb4\xc9*\xbbV\xf5 v\x897\x98\xda\x12#k\x0b!4n\x91\x98\xa6Qe\xac.CU\xf4{\xef\xdc\xba9#\xe9\xda\xf1Lq\xe4\x82cK*\xf2\x16.8\x0d\xc0V\xf2\x13\x8a@s\x8e\x03\xbc\xd6\x11~\xa1\x14Z\xe3Z\xa2\xad\x81\x01\xf8uG\x12\xd0\x03\x86\x13]G\xc8\xd4O\xae\x1f\xd4|\x82\x9a\xf0'0\xf5\x19Ok=\xbaT\x8db\xc0d\x9fbNT\xcf`\xde\x00UOz\x80 M\xf4\xe5\xc15\xc3\xe2Z\xa1n\xb0\xa8 KP_q\xeei\x89y\xbb\x89\xaf/S\xa3\x19\x08\xe3@\\6o\xbd\xef\xc2\x92\xc2\xe9!\x1c@\x0f\x19\x1f\xd8\x87^\xd03c2#\xc1=\x8d\x1eU^\xdf\x82\xe96\x1c\x8fE\xa9\xfe\xad\x01\xba\xacn\xa3\xd2\x14\xffE7\xa3-YBJ\x99\x14\xaei\xe1E\x83gN\xaf\xc9Y\x82\xd8\x01N|\xdbg\xb2\xfe\x06\xf2\xf3\xd4iE\x97\x159\xd4\x01\xad\x8a-VM\xd9\xe9\xd4\x19?K;n\xb0\x00\"\xeb\x02\xd7p\xad\xe1\xa0\xf2\x08\xf60?\"\xc3\x14\xd8\xe7\xf9\x90\x1a\xdbAU\x03`\xcdZ\x1b\x01\x84\x03\xf0\"A\xe5\xb09_\xb4K\x8b\xd2\xb7\xbcb`b-\xc8\x9c\xba\x83\xec]t:\xa7\x1d\xe1& \x93\xca\x08\x95\x86(;}\x12\\\x8f0\xbd\xa7F\xbb;\x98\x06\x8d\xbd\xb8\xe3n\x81Tj2\\\xa7\xae\xd0\xb8|E\x0c\xfer\xb5C\x82q#\xddz\xe4yYx\xac\xdc\xbb\x18K\x85\xe9\xb2`\xe8\xbaJ\x9djL\xd4gf\x0c\xc8\x01}?(u\x7f\x03\xad\xf9\xd9\xa9\x97\x93\x9c\xbe\n\xbb\xa8\x07\xf8\xbeF\x0f\x99\xdd\x00v\x06N\xbdD\xd9\xe1rE]l\x0c\xa2\x17\xf5dR\xe4\xf4\xba\xe4\xbe/\x96\xb1\xca\x8c:\xf0\xa2&#\xa4\xd3l&I\x1e\xd7w~\xcb|\x9ex\xb4T%\xf1m/\x04X\xfeq\x07\xbd\n\xf6\xfe\x83+{*\xfaw\xa5R\xa0P\xaa\xaf\xd4\xf3K\x83\x94-\x03\x9eD\x0d\x1d\xf1nc]\xf1{\x917\xc1+\xeb\x94\xf3J\xe2lW\xaa9\x8f\x9d\xa46E\xe6\xd2\xb3\xbb\xf2\xb2\x94R\xc1\xb3@5\xb7\x19*\xe4]\xaa\xe7\xad\xcb\xea\x91/y\xb8\xe8\"l\x9d\xd1\x82l8\xb5/\xb2f:l5\xd5\xe1T\xbf\xb6\x18\xa8\xd5?\xc6ty\x95\xe2L\x94\x96\xf7\xed\x9cb\xb5z\xeb\xcf\xb1_S\xb5Z\xcf$\x0e\xc6A\x0b\x1d3\xc3@\xa2\xa0\x1b\x05\x8e\xaa\x94\xb7\xd5\xfc\xa4P\xb0\x00\x12OG\"\xe5e\x18\x7fgQc\x1ev\x913\x90\x0e\x89\x84\xcbK\x1eC\xb0t\xec\xe5\xa8\x0b\x0d\x97\xfdp\xaf\xd1.=E\xd9\xfb\xfc\xc4\xb1\xc0g!\x03\x0eM>aE\xa5\x14nu\xe6<\xba\xa2\x13r[\xda\xe2<.\x12\xe3t\xc8\xa7\xa5\x9f\xe2\x8a\xf1B]&\xe9\xd9f)`\xa6\xcc\xd2/n\xba\x9fj\x9f\xc9\xfa\xed\xac\xc3\x90\x8aC\x8d1s\x9d y\x0dFB\x1eq\xee~\xc4W\xb42lW?mH\xa9.\xdd.\xba\xab\xd1\x1a%\xbf\xfa\xc8\xcf\xba\xf7\xf7\xf2*\xebb\xe0\xbdq\x8d\xb5\xb9\xac\x9a}/\xc3\x8b\x0e\xbd\xbe$\x9dT\x18\xcb\xf0\xa2\xeb\x99\xfa\xb2\x92\x8f\xc8\xa9\x137\xa3Yc\x06p\x00ob\xee\xc2\xf2\xd5MPZF\xf1\xd5\xa7\xc3\xbb#\xbc;\xd7\xb9\xa5\xa43&jC\x1eA\xdf|\xf69Zu\x80\x9d\xd2\xfe\xeb\x90\xce\xfb\xcb\xf0\xc23T$6tV\x17\xbe]\xa5\x04\xc3\x1ecMzT\xb9\xe3<\x90_\xe7\xd1\xa2\xa3\x99\xa1\x18\xcc\xefW4l|\x8eV\x1fc\x1a-\xbau\xcb\x81.\x87\xdcM\x05\xc5\x13\x82u\xeb\xafi\xe5\xd0d\x06\x03}\x7f4\xfcL:,/\xad\x18 \xae\x80R\xac\xbfkF)\xd6dw\x94b_}\x0bJ]E\x92\xf8\x87\x13w\xab\x940\xfa\x18\xa3\x9a\xb7\x92\xbc\x0d#+[\x18^\xc9NS\xa3vY^L\xa4\x8b\xaa\xb1yJ\x81\x96J\x18\x08vlo\xedL\xd4\xf3o)\xfb_0n\x1a\xc1\x87\xa2J$l\x9b\xa1\xd2L)\xfd\x14\xdf\xde\xbc \xdb\xdb9\n\xa9\xa2AC\xa1ry]\xfa\x01\xe4\xc67.\x03P\xcb \xfd\x17\xadJ\x92vY\x16Z\xf1\xc6b\xdf\xd9\xe5Zv\x85\x16\x8f\x12y\x89q:FY\xaa\x17\xfaN\x85\xc5L\xdb?\x00\xf7\x88G\xf5\xb2F?\xaa\x97!VB\xbd\xa4\xe9&o-N%/\xae\xc3\xaf\x14\xa9\xb2x\xa9\xcaKF4R\x11\xc3\xdb\xfa\x01\xbb2\xe1\xac\xea\xf6\xf6\x04\xdf\x1e\xb4\xb8\xb6\x82n\xafM\x02\xc8P\xe3y\xc0H\xdbp\x08\xef\x84\x98\xf3\x9cad\x86/\xf04\x7f\xa1\xf0\x0c\xf9/X\xdc6\"`\xa5\x00\xda\x87\xdd5\xaf\xec\xe0\xb9*SQ\x1cZ\xdd\x98\n\x19C\xd0\x91/\xed.\x86\xcd\xc3l\xfe4\x99vpt\xa1\xf32\xbb\x00\xd6e\x9a\xab\xd9\x06\xday\x04(\xb6\x17wP\x1e\x0ea\x00\xb7`\xb7\xd8h\x16\xd2%\xcd\xa4\xb3V\x05\x9f\x9b+\x7f*\x8a\xdf\x0e\xf4Uo\x8b\xd7\xf8\xc0\x9c\x16\xbf\xf6\x0d\x1b\xed{\x14\xd2o\xdf\xb9\xbd\xf7`p\xff\xf6\xdd\xdb~P\xdc\x86G\x8f`p\x176@\xe0\xf1\xe3\xc7\xb03\xb8\x1b\xc0\x9d{\x83\xfbw\xee>\xd8\xfd\xbe\xfe\xdem\xe5\xbd\xdb\x01\xdc-\x9fc:w\x8f\xc06\xdc\xbe\x7f\xef\xce\xde\x83\xbd\xc1\x83{\xb0a0\xfd\x17\xdb\xd2\xff\x12\x9f\x0d\xee\x05\xb0\xb7w\xe7\xde\xfd\xbd\xbd\xbbE\xf3\x87\xe2s\xec\xa6x\xf3v\x00\xb7\xf7\xee\xdd\xbbs\xff\xc1\x83\xdd\x07\xbe\xda\x84e\xcby*\x7f\x10c\xad\xcb\x83\x8eP\x83!\xdc\x1e\xc0w\x90\xc26<\x8f\xbd'\x147\xcd\x13\xea\x11\xdfg32w\x0e\x8e\xbbS^\\+~\x85^\xaa\x93r\xe9\xa6\x98\x11v\xd4\xdaA\xb7\xc6\x1d\xdb\xf5\xb5\xe5\xac\xa1 \x88:RX\xb9SW\x06\xb3\xbd\xf8\x9a''Sr\x01\xa8o\xbc\x8eG\x0b\x19\xe0\xfd:\x1e=c\x7f\xbf\x16&\x8b\x8c\xdd\x12\xa1\xa3\xfc\xb6\x08\xac.\xee\xab\x81C0\x84W1>\x89\xe2l\xc5s\xe3\xe3'\xef\x93<\xad\xe6\x95\xd1\x81\xac\xa6D\x12\xee\xad\xd5\xd9a\xeb\x93y\x18\xc5\xbcma\xcb\xe4\xb7\x93\x98\x86\x11F\xa5\xe3\x10\xb8\xee\x12c\xc4S\xdd)9[D\x1dB#\x0b\x01\xe5+1\xae\x84N\xed\xb3:l\xb8\xf7\xbbZ\xff\xcdT15\xcb\x02V\xe1\xae\x93a\xb5\x90&\xa4\x93\xc4( \x1a\x9b\x8bO\x03p\xa3\xaab\x93t\x14\x1a\x97\xe1\xeae\xd5\x07\xd9\x15FW\x00\x02[\xf7:,\xda\xc4\x8c\x06,x4\x82\x05\x08\xd8\xc9Uv\xeb\x87\x18\x93\x9b\xb4f\xeexj\x06\x92<\xd5\xaa}\x19\xda\xf9\xb9\xb5\x9d\x11 \x80\x8e\x9d\x1a{g \x87\xf5\xb3\xb9e\xb3mQ\x97d\\\xd0\x84\xa7aXo\xaegX;\xd7<\xacW\xf6a\xf52\xa4\x81\x15\xe3\x07\x1c\xc0O\xef\xdf\xbe\xe9\xf3G\xd1l\xcd\xd5\xb6\x82Z:\xe6\x16}f%\xc0\x87\xc6L\x9e\x86\xe6\xbe\xb6b\x10\x85G\x05\x07G\xe11\xfe\xbd\x83\xec\x9cS\x07\xcf\x1d:`\xac\xcf6\xec\xdd\xbb{\xe7\xce\xed\xbb\xdf\xdf{\x00\xdb\xe0Q\xc6\x90\xdd\xf3\xf9\x9f\x8f\x1f\xc3^\xf3\xf4\xad.\x94h\xedCT\xaf\xc2h`\x95\xcb\xe5\x95|\xb3\xad\xaeu@J\x1b\xdeV\x82\xa5\x00\xf8\xba\xf2\xd0R&\xa2G\xbe\xaf$-\xc5f\xc5}k\xcb\x97\xac\xf7\xc0\x96GC\x85\xa8\xdel\xe7\x0c\xd2\x80[\xee*1~\xd8\x7f\xeb\xe4\xdd\xed\xa1W\xb0\x9f\x15\x90\x8d\x18ds\xf8\x1f&;\xb0\xad\xc7p \xa9\xb8\x00c\xcc\xef>\x7f\x07\x0e\xe09\x9b{\xce\xd3\x91\xa2\xd5F\xfe\x8cd\xca\xd86\xf0[\xad%\x86T\xe5%\x95p\xde\xc6\x0b\x12\x9e\xb9p^\xd2,7b]\x8c5\x87\xb2oY,\xb6/op\x02 \xf5/\x01\xdc\xe8'3t\xa65~\xc6\xf3\x93(\xde\xf9\xd6s\x96\x14\x1b\xdf+\x88\x81\xb8\xc7\xe8\x80\xc8H\x13\x94\x94\xc8\xcd\xc7\xa9\xab\xcb\xdd\x92z\xbbj\xcaj\x97>\xae\xe0_\xc7\x0e|\xc7\x08\xd5\xebv\xefq<\xf9\xbf^I\xafzC\xfe\xf1,\x0el\xc8\xe6<\x86_#:w9\xa7\xa4\xcc\xa3\xf6b\xc77\xc6\xd3\xc9\x00\x81\xe6\xf8M&\xcb\xca\x9dK\x9fQ\x842=\xec\\\xea\x1b\xd4\x9bE\xdd\x96#t\\o\x0e\xbf3\x8f\x85\x18\xc4kA\x0b\xb3\xb2\x93\x9cv\xd5|:\x9a\xaa\xd3p=\x9b\x0d\x9b/s\xb89@;Q\xf2l\xf3\x12\xda\x15+\x81\xfaX\xb1$\xa8\xb7+&\x85\x17\x81\xaa\xa4\xf5\xf1\xde\x8d\xca\xf2\xf1{?V\x9a\xe6\xf7N\xa8\xe6\xe3s\xaa\xf9\xfa\x82\xd6?oBE\xe6\x97\xdb\x87\xb8 W\x04\xea\xcb\xe6\xfd\xa7\xc9bA\x10\xd2\xfbp\xac)\x90\x81\x01b_5\x0f\xd4\xb4\x92G\x1a\xe7 \x9e\x97o\xa5y\"R\x05^hGI\xf7!\xd3\xe5{\xbb\xbb\xd3O\x9f\xf2\xe9\xfd\xdd\xdd\x1d\xf6\xefl6\xfb\xf4)\xdf\xbd\xcd\x7f\xee\xde\xbe\xc7~\xce\xc8\x1e\xfe\x9c\x91\xbd\x19~3\xc5\x9f{\xbb3\xfet\x97\xf0\x7ffc\xd3\xe0\xcc\x14\xad\x100(\xc9\xa8J\xc7.\xbb\xc1i\xb0\xfb\xa0\xc6\xeb0.\xb2wx\xb1\"\x13J\xa6\x10\x16\xed\xf4\x14c\x8f\xbc\x07\x89\x96\xb0G3\xf0\x94\xf8\x88-\xc5D\xb0\xd9\xc8\xecA\x1cE\xb4\xaf\x11\x1f\xe8\x9e\x864<>\x16\xd9F\x9bX\xa9h\xf1\x84\x14[\x83\x0c\xbb&\x9a\x1aTQP\xb9]\x14\x82M\xaa\xf7yQ\xc4\xbcz\x933\xc4a\xf5f\x86ofUB4\xe9\xb6:\xb7\x1f\xe8\x97\xe7\xce\x83\x96\xe3\x18\xa8\xc8\xcb\xc1Co\x1b\x8e\xeb\xca\xe6\x15\xc6\x0eOT\xe6\x04R\x9c\x80\xf2\xd1V\xc4\xb8\xab\x9b7\xd9\x1f\xb1\x8fJay8\xc6\xec\xaf\x98\x1dA\x95\xfe(\xeb\xf2\xca'\xfe\xed\x07\xb7\xb5\xb3\x1e|_G>\x81\x94\x0f\xeei\x90r\xd0\xc4\xc7\xbd6\xd2!k\xb9pG\xe1\x99\x0e\x15\x17\x98\xb5\xf8&\xe4\xcd\x03\x17\x0b\xb2\xca\xb2\x8c\x8d\xa7s\xc4H\x9dY\x8a\x11\xa8\x15\x03\xe4\x1c\x81\xec-\xd8?sx\x0c+;]F\x9d!\x0f\xd0\xf5\x9b-bAK\xfeX\xa9-6\xc5%n\xb6u\x06C\xd8\x194G\xbd\xe62t\xe3\xfe\xa9\x00C\x08\x07|'\x82\xf4\x8e\xae\xb6\x8dy\x01fx\xfc#\xa9\x0f\x80\xff \xbc\x06\xe8\xf6\xf6\x19<\x82\x956\x11\x00\x1b\xd6\x92\x81ttf\xe0n\x8e\xb1(\xcc\x99\xc6Q\x9c\x01 \xf3\xb1\x89\x13\x18\xc2\x02\x0e \xf3\x8e\x03X\x06p\xc6\x03\x91py\xf7!\xf3\x96\x01\x1c\xe3]\xbe\xfa3\x0d?SK\xe2{b\x92\xae\xd9{'>0\x018\x8aM)\x0b\x10\xa2\x03\xfd\xb3\x93\x94\x84\x9f\x1bO\x9a\xe7\n\xeb\xe8\xd46\n\xb6e;\xd8\x0c\xf0\x93\xc4;\xc5\xd7n\xde\x04oY\xe6\x8c\x9e0\x08Q\xb9-f~\x89K\xa7<\x16\xdf\x18\xdel\xeb\xd1\x06\x050B\x02\xb4\xd0\xb8\x04\xb2\xc8\x08Nb\x89\x0bt\x8c\xfbh\"\x96\xb6\x18\xb8a8\xdf\xba \xda\x13y&N\x10t\xba-~0\xfc_\xff\x9f\xea\x876n\xc8H\xa5\xeas\xa9\xd4_\xdb\x11 /%\x11\xa7\x98&o\xbf\xa0Ml\xdb\xc5\xf0\x08\xd2\x87\xcd\x95C\xd3\xb8GG\xf1\x18\x01\xa7r\x86\xbbZ\xfeOI\xef\xd4\x91\xcc\xdf\x19\xd4y\x83\xe2pkRyQ\x91\xa98^\x9b\xf4\x1e%\x19\xa5\\S\x93\xfc\xa3*\x08\x9f\x1de\x87q\xbe\xe4\x8a\x9f&{\x92\xda\xad\x1db\xe2\x85\xb8VE\x06\xcf\xf7\x85 \xde\xae\xec\x13\xad0\xe6\x9bak.X\xcc\x00z\xec\x0fBz\xfc\xc4\x0d\x9b\xf7\xab\xfd\xe9\x8f\xb4\xcce),\x99\xf2\x15\x06Qch\x10\xeb4\x18h\x9e%m*\x97-\xd2\x8f\x93)aB3\xdek6\x81\xab\x89\xa2w\xb3\x1d\xca\x8d\xd4\xac\x1dZiG\xa3sbk\x9es\xe0\x16\x90A\xc1\xe4\x00\xd2\xfe\x0f\xf9lF\xcaS\xab\xf95\x03\xa3\xc7\x8e\xb7\xb0\x1fe\xb5\xb7Q\x8a\x8d\xccJ\"E\xe2\xa9(\x89\xee\x0f\xfc\xc2X\xdc}\xdf\x1b\x988\xda?''\xabp\xf2\xf9\xe7d\xb1\x9eE\x8b\x05\x0fY\xe9O\xc9*%\x93Z\xedG&O0\x96t\x15\xd29k}4\xc6L\xf1\xf3h1MI,\xbe,~\xb2\xe7e\xb9\xb4)\x99E1\x91\xfb\x0bqr\x91\x84S2\xed\xe9\x14\xab\xa4\xd8a\xfbz\x0e\xa2K\xd1\x19\xda_4\x1e7\x95\xd4\xe6qF\x7f\xc9\x18#\x8716Wk\x08\x83J\x02\x9b\xced\xd4 #\x0c\xea\\t\"\xee\xdf\xd1p\xcb\xb8\xdf\x92~\x94\xb1\xfd4\xe5Q\n\x95\x97\xf8f:\x80\xc8\xcbQ\xe5\xa4\xa7;a\xb7\xb1\xdf\xdd\xbd\xaaZ\x91\xf2\x83\x8d\xd1\x81\xb4]\xb9\xd8\xbe\xb74g\xaa<\xc9\xe5;Z\x87\x17\xa9!\x10\xfa\x05\x91E\x90\x8e\x85;_\xcd\xdf\x84p\x8f\x92H\x16'\xf4\xe2\x9a\xa9\xeb\xf2\xaaX0\xb8_\x97\x818\x16|\x7f\xbf\x15\xc2m\xec\xc4.\xf72\xf0\xb8\x1a\x88\x07\xf1\x17\x9cD\xa1X\xe1\xd2\xe0#H\x1e\xfa<\x85\xe8(\xf2\xc8(\xde\xde\x1e\xfbc\xbdv\x8f\x7f!\x082-h\xebU!\xa0\xd7\xd9\x0d\x1a\xd8.v\xc1^\xfd`\xe3\x8a\x8c;\xdf_\x05^bJii\x18\x8c\xc4{\x07\xc0\x90a\x1f\x12/\xaf\xb8 9M\xae\x97g\x042\x9aF\x13\xaa\xa8\xf6*^X\x0d?\x11\xe9j\x13{\xdf?\xa8\xebF\x94\xe9\x1c7E@&\xbas\x98\xdd\xfb\xbe\xf6\xe5q\xff\x1d \xa7\x8cN\xbe\xa7\xfc@YV_`\x80\xbe\xeb\xf7\x0f\xcfHL\x0f\x97\x11\xa5$mv\x10\xb6\x81Q^%\xd1\x8f2Jb\x92b\xd1M\x8er\x8d\x0ft\x96{\xb1%\xea(\x01\"\xb88\xf6\xee\xef\xfa\x82\x03h\xbe1CA\xfdc\x14\xd3\xfbH\x07\xd9\x9e\xad\x9c\x9f\xcd\x99-85\x1b\xd4\xc0\xb6\xe8G\xf1\x9c\xa4\x11\x15J\xaf\xbb\x1a\xf3\xc0\x8a\xa3\xdd\xdd:\xb1\x06\xa12\xd0 \xd5\xec\xfe\x8am\x9fU\x7fJN\xf2\xd3Er\n\x07\xca\x0f\xaf\x97\xd1\x94\x84\xcb\x9e\x0f\xfbmC\x9f\x06(\xfb\xb3!\xd4w\n\x08\xe1\x88\x81\xb2\x8eK\xe5\xd4\x98X]7\xf9\xb3\x86O\x19\xf7\xd0#i\x9a\xa4=\xc6\xbd.\x92\x8c\xb0?\xa6$\xa3i\xb2f\x7f\xae\xc2\x9c\xdfKI\x96/Iol\x8a\xd6Y\x1a\xd1%\x01\xa1i\x8e\xbd\xbd\x81\xa8a\x81b\xab\xae\xbe\xa0$\x16\x04\xa28\xa3a\x94w\x86\xe5S\xdf\x0f \x13j\x85F\xb6?\x13 OJ\xe5\xb8)\xdaS\xe1!h\x0d\"M\xb0 \xdd\x147i{ym\x8f9q \xa8\xaa\xe2{X\xae\x93^\x89\xc7_\x14xfSJ\x9e\x15\xc5\xdd\xc4\xcb\xacu[*\x15\xce\xc3J\xaa\xc4\xa0N\x04\xdd\xe2\xaa\xd1\xd8\x0f\n\x9d?l\xb3\x86\xab\xd4\x17\xf6\x8b\xaf\x0dJT\xed]RR\xae\xdd\x00\x0e\xb5\x86I\x06\xba\x1c\xeb,zH\xb3\x11\xdf\x9d\xe0\x8aP\xd0\xcf9\xe5Uy&\x85F\xc4KQ\x15\x92\xaa\xdbf\x86\x94\xa6\x19}I\x94\xb8\x83a!\x0c\xd5NK\xcc\x12\\u\xaa\xe8\x1d\xc5g\xe1\"\x9aB\x9c\xc4;\xbc\xd9[\xe2p\x98\xcc\xf3\xf8s\xcf\xb7\xc5\xd3\x18&\"\xb6\xb5\x06n9: \x06\\*A\x02\xee\x15\\L\xc2\xe0\x99\xd7\x86,\x1c\x89\xc4*?\xc6\xc8\x1f\xcf4\xff\xfa\xc7e\xa5\xf9\x9f\xa5j\xf3\xed\xcc#<]\xb1bND\xd8\x10\xa7\xe4#bn\x13\x0c%\xd7\xe3\x06N0e\xa7\xb4z\xe45\xe7\xcb\x16B,\x02\xe7(\xfby\x9c\xcd\xa3\x19\xf5|\x08g\x94\xa4@\xe2)\x10\xc6\xf5\xf7\x10\xd7\xce\x11\xedd:;\x04\x16GU\x97\xb6q\xcb\xc8\x86\x0f\xdf>\xe7M6\x88C^\x1c\x19L\xfa\x8f\x19\xb4 &>\x92\x9b\xf6<\x8d\x84\xae\xbd\x0em!\x85\xcb\xb5:\xa8\x8cw\xc0z{[\xee\x9b\xea3\x9fW\x8fb\xcbP\x1d\x90\x0e\xfb\xea\xaa\x83\xb6\xb5\xda\xa2\x02LH\xb8\xab\xdc\x04n\x92\xa2HV\x8d9,\x99.j\xa4#\x97^\xeeF\xe3\xcf\x15\x1a\xaf\x1b0)\xb8\xa8\x9b7\xe5\x1eVh\xdf\x16\xe1l\xd1\x01\x9b\x02_\xebiHC\xb6\xd4\xa8\xf7b@\xf3v\xf9\x9a:\x12E\x8e\xa4\x05M\x95\xc8\x17\xb36t\x94\xb6\x02\xb8\xff?{\xff\xbe\xdc6\x924\n\xe2\xff\x7fO\x91\xc2o\xc6\x03|\x84h\x92\xba\xd8\xa6M\xeb\x93e\xb9\xc7\xd3\xed\xcbH\xb6\xbb{\xd8\xfa\xa9!\xb2H\xa2\x05\x02l\\(\xab\xc7:\xd1gw\xcf^#\xf6\x01\xf6\x9f=o\xb0O\xb0\xb1\x11\xe7MN\xef\x03\xec+lTV\x15P(T\x01\xa0,\xf7\xec9\xdf\x87\x88nS\xa8B]\xb2\xb2\xb22\xb3\xf2r\xef\x1e\x92F\xc7e\x8bJL\x9a\x16\xfa\xe85\x87\xe7\xd2}C.\xb8\x18\xd4\x9d\x1b\xa9\nU\x17$\x85\x7f\xb8wO\xf7\xba\xe0\xfc\xaaK\xac\x91\x81\xdb\x05\x0c6to\xd7\xf6OO\xf86F\xc3\xe7%\x83\n\xc1\x88\\\x8b\xdf\xe5\n\xe7Y(\xd7\xc9\xffRj\x15u\x1a\x0f3&\x0d vdA@\x11D\xe3\x06.7N\xeb\xb6ix]\x8es\xdf\xc8\xec\x08\xf5P\x19\xd1C\x91\xebN\x1b\xa9\x80.\x02\xd25f\xf1\xa6r\xf3,Hv\\f\xb8\xa9\xc0#\xc8>\xbbl'\x98\x99\xd1qyg\x8eK\x19\xb9\x92SB\xc5\x9fC\x81 \xdfs\x8d'\x0f\x9f\xa3\xd4<\x93 (\x87\xa2z\xc4+]\xf8\xc9[/K\xca.P5]l\xf5\x8b\x94_\n\x86r\xfaT\xd7YBd)\xa9\xd5\x9c\xda\xc91\x95\xcd\xa2\x885\x86z\xb2p\xc3j\x94G_U\xac|\x84\x11<\xdcy\xf8p\xbf\xf7\xd0\xa4/95\xa2n\xae>\x7f2b\xfe\x8dU:N\xf2#\xbb\x87d\xb6B\x9dS\xa6\xf0=(\x1f\x08\xd2\xa9\x9a\x93\xe6\x05\xf1\xa6]z\x08\x88\xb2aQm\x88a%\x80(\x07\x1ac\xa2U\x8dA3!\xcb'\xf6t\x04\x1fQ K\xff\xa5\x9dloSY\xeb\x13\x1d2F\xf7*\xfd5(\xfd\xb5[\xfa\xeba\xf9\xbb}\x17\xd2NG\x9bk\xe0\x86\x9d3\x08U \x0e\xe8!\x92CS\x9e9\xa9h\x0cz\x98\x9f\xb9\xd59}\xac\x87Bn(\xd7H\x8f\xaa\xbd\xf7\xe9\xe9\xa9*+(\xd6/l\x8b\xbe\x16\xef,\xb7XtG\xf7\x0d\x9bI\xce \xb0|\x1f\xef\xfc\xc9\xa5}\xc8#/\x1eV\xdceM\xf3<\xd4\xcf\x93\x0f \xc4$-\xe4.\x18\xc3!\xbf{\xd56\xa0\xcb\x1b\xe3n!%}\x08\xb2\xe0\xaa\x86\x04\x9d\x8e\xf2I\xfe\xa4u`2u\xfc\x93\xb1\xe3\xd2\x05Ln5FY,\xc1z2\x86K\xda\x7f[\xa4\xe0!I\xc10\xea\xf6\xd7\xc2\xb6\x96\xde\xf5\x05\xa1\xab\x86\xf3@\xf5B\xcf\x92\xd94\x17m\xfb\x8a\xce\x9d\xc7Ny0\x0d\xc0\x1a\xa9\x89\xbfL@\xb84\xaer\xae/\xa1\xe0M\xfd\xc9\xa5n\x9c\xad\xfax\xd9\xbc\xc2\x02\xdb\x99\xe6M\xd7\x13\xe2\xbb^1G\xaa\xca\xb4\x1c!Q\xb3\xcd\xd1\xd1\x05u\xc9\xa4\xe5\xdclJ\xaf>\x97\x08 \x8a-l\x8b\x8e\xa7\xb4\xad\x1f\x97\x07\x99\xa7R\xe6\xe3s\x1e+\x02\x8fi\x84\xef\x9a\x0e!\xe5\xe89`]!u\xac0J\xf9\x91\"\xc4\xcf!l\xa5\xec6\xf5i\xa9\x0d\xbb\xa4\xc0\x91\x0f\xa3\x9f\"?\xb4-\xbc\x13\xe9\xf3\x9eyI\xcd\xc1%\x0b\x1a\xdc\x9f\x92\x14>\xb1EQ@\xbc\xd8F\xd9&\xd4X\x94\xd6\xa9Z\x0c\x1a\x8a\x94\xed]\xf5\x00=\x00Lu$\x97H\x91B\\\xb9@[-u\xf2,\xc8\x1c\x06\x9a.\x88\x04\xe5p\x93\xf0\x96\x05\xc5\xa2\xad\xea/\"\xc4\x13Wmt\xd5\x07\xef1qlf\x15\\\n\xdb#\xf0\x8dDI<\x88\xed\x8f\x81\xc5r\xa4\xf4\xa46\xf7\x14\x08uf>\x80\xfa\x81\x82\xb8\x91\x81\xa7\x10\x15p\x8c\x8a\x13\xbf!\xb2\xb2?\x03;c\xd6I\xc5\xe7>\x95\x8e#\x18\xf2\x1f\xe5\x85f\x9b\xc7\xc6\xe9g\xb5\xa6\x96\xe2\xa9\xb4ow:\xb1\xcb\xc1\x81\xab\xbe`Zf\xfefX\xbc!\xdd\xd4\xf3\x03\xae\xe7\xe7\x02\xbc\xa8\xecr\x08A1\xc4\xcc\xa4\x91\x93\x1f\xb3\x85\xa7xn:\x1d}xc0jFA\xb2m\x17\x13\xddFw\xa0\xaam\x0e\x085)q6\x89\xab*p|\xd2\xf5\x82 \x9a\xbc\x0f\x13oF\xdaE\xe1m\xb1+(\xca\xd7\x98\xc5\xc6l\xa7N\xa2\xd55\xaa\xde\x04\xe7c\x97\x83\xe4\x8b\xe0\xbc\x1eSaS\x9c\xf7k\xc2]\xb8M\xc1\x974\xb9\xee\xf0+~\xde\xb9\xc5 K\x19E\xc3ev\xb9{\x13\x9bp\xf4\xb9\x8c\x0c\xbb\xde\xe1\x13\x7f\n=\xd95\x93)\x98\xffd\x910\x17Ql\xc7\x024\xa5\x9dB\x14\xe2\x9d\x02Y\xae\xd2k`J\xe8?i\xe6Bd%9\x13\x02\xe4\xfb\x17\x89\xfd\x7f\xabMrb\x8c\x1dj\xd6\\)=rU\xa1\x98$\xb3\xd2,_V\xf7\\\xce\xcbVD:\x9b\xce\xdej9\xa6\x93v\"I\x8fk\xbfr\xc9\x84\xd9\x93C\xd8\xe9\xe8/\xb20\x1a\xfa8\xe4vq\xc5\xbd\xaaQY\xb6\xadJ\x0f\xf2_\xb2B'f{\xb2^C\xc0\xa5 \x8b\x9d\x9d)\x8c`\xe5\xc5 y\x19\xa2[J_\x17\"e]\xf2;+\xe1\xa0\x9e\x12b\xa43=z\xf2\xf5\xe3\xca\x0d\x9dQ@N\xdd\x98\xffyE\x93-a\xf8\xa8\"\xd3}\xfa$\xd4\x0c\xc5\x8d5\x9f\xf1\x10*\xe2;k\xc7\xcd?qku@G\xec\x92\x18\x86pl\xf3\xcblJ\x10M\xf3\xe4\x04z$TP\x8e\xd4\x9ac`\xfc\xef\xdd\x13\xbd\x98\xdaF>\x99\xa5\x13-\x83\xc6\x88>\x0b\xdb\xa2\xf5\n%\x01\xe6\x15\x11#$\xd2N\"\xd2IS\x95\x97q\xfc\x0b\xdb\xe2u\x02\x92$\x90.\xbc\x10\xaeh\x8d\xa5\x17_Zl\\\xa8\\\x15`\xc3f\x85hw \xd6\x82\xfe\x11\xe1\x95\x19\xde!\xf8l\xe1\x91\xbf\xe3R\xf94\xc2\x01[\x8e+}_R\xa9pMQ\x05\x80:\x8dRI\xe3\xa8*\xd5\x1c\xb9\xc9\xbe\xab\x08\xc2l\x05C\\A\xbe*lic~\xc4\xf7\xe0 \x17\xf0\x86\xfc\x88<0\xe8\xb5\xd0\x0e\xc7\x91u\x7f\xdb\xa8\xec\xd4\xce\"\x07\xa0aFa\xb1\x95$\x85\x07\xc7\x1f1T\xd4\x8d\xe7\xd7(\xa5\xbb\xa8\xb8\x92w\\Q\x10\x9f\xb7\"(R\xc3\x9a\x0bM\x06q\x07\xfc\x04\xc2(\x05\x7f\xb9\n\xc8\x92\x84)\xa9\xd2a\xe5\x06\xc2_\x91\xd67\x10\xb5\x01\xd5\xa2\xb6\x97\x13\xc9\x95\x8f\xae\xc6\x91d8eb\xad&^B\xa07\xd4\x96\x01:\xe0\x0b{\xac\x1af\x0f\x99 }1\xb6\xdfo\xd3\xfe\x98\xfft!\xad\xc9\x13S\xd3\x15\xbfOi\xec\x8b] 5^wI_0\xd3\xb3\x0e\x95n\xe9\xce\xc7%\xc5 \xa0\xa3?N!Z\xa5\xc9\xe8\x8f?Yn\xa9\xb6\x9e\x1f\xa3\x8b\x8c^([\xcc\x90\xb0\xcf\x15r$\x9c\"YJ\xf9\x1dP\x92N\xa3,U\xde\x908\xa6\x92;\x0c\xe1\\\xb9%\x80\xb2\xc3\xb5\xce\x88X<\x0b\xdb\x8a\xc2,\xa4\x03\xb5\xd8m\x92\x08\x88\xca.\xdf\x99\x1e%\xee.\xbc\xe4=\xd6b7\xd8\xa5\x17\x8c\x06,lk\x12\x10/\xccVB\xa7\xb6\x8c\xd6\xdc\xf6\x8d\xc4vn\x1e:\xd7\x96\xce\xfc\xd0O\x16\x96\x0bKm\xf14\xf6\xfc\xd0r!\xd0\x96\x8a\xfdy\xad-\xe5\xb3saB\x89G\xf5\xe3\x90\x92\xeaYM\xd9\xb9\xb6\x8cS\x9b\xb5\xe3\xa2\x85/\xde\x82E\xb2\x96\x10\xaf\xf5\xcf\xafb?-]\xbcn\xa9/\x91\x08\xe6\x9f\x04\xfa\xa8\xf8\xe6\xf5\x9d\x19\xaf\xa2qm\x913d\x86{\xd3\xc68P\x808^2\x18\x91x_\xe4\x11\xc2n\x14N\x88\x00\x0dZ\xbeu\xa3\xb0\x04e=\x9e\x07\x8d\x14\x174v\x15Mrz;\x01B<|\xb3\xbe \x9fs|\x92\xd5\xba\x8e\xa2\xe5\xc5\xf3\xa7\xf8{{\xbb8\xcf\xca\xb58\xfc\x8c+\x8cQ1m\x886~(h\xc1\x7fc\xeb\x84-\x06\xe3b\x17\xe8A\x8cx\xa8\xd1-\xac\xb9+9-3#\xd2\xda\x9c\xab\x171\x89M\xd0\x05\xa1\x12\xe7\xd4*\xcd\xadq(\xfa\xb2\x83\xdd\xees\xa9\\\"\x97\xe8}\xc4\x89\xbb\xf0<.Ux\n}Z\x89\x87_=\xb1\x0b\xfa\xcf\xe3t\xae\x04\x135\xf3\x82\x84\x00v\x0b1IVQ\x98\x10\x17\x84\xady\xa8^\xc0\x96\x96\xb8\xa6\xb4\xd3\xe1\x93C.\xa4\x8b\xedm\xba\x1b\xaf\x1b\x80(H\x15q\\8\xb7\x1b\xa9\x19C8\x86`\xec=;\x17\x14\xc6D\x17L\xb1f\x90s\xe3\xb6j \xcc\xe7Z\nb\xeehYO\x9bx\xdb\x8d\xc7\xc5\xa6\xdd\x9e\xd7u[\x1cva\x97\xfdnw\xf6\x0by\x96\xed\xc4\x9c\xf8k\xbbi{;\x00P T%\x1b\xfb\xaeb\xb2\"\xe1T\x00\xa5\x08P\xae\x96\xb0h\xcd5*\xf4\xee9\x9a\xf0%\x0cy\xf8\x1fcr\x06\x07\x90\xd9\xf2\x0b\xf4n\x92\xfe.[d\x95>\x1d\xc18tK\xaf\xce\xb0\x8a\x08\x1e\xad'x\x12*\x8b\x03\x9b\x1d(e\xfe\x80\xbdS\xb8\x02\x86\xf4\xfc\x9c 1f\xa1 \xb4\xfcn\x0fY\xb1\xe2F.\xe4\xb7y\xb6S\xb9\xd4\xaf\x18\xc1T\x18\xf3Z\x9d\xd5&*\x03\xf3\xda\x17L\xd4P\xbdL\x15\x8f\xc6\xc9\xa5\x90\xc3I\x89\xa3\x17\xd8\xa1\x0d_O?\xea\xd7|T0\x97\xbc\x9c\x07\xccfV\x1cBb\xe4exT\x96\x1d3H\xc5+\xa3t\n\xf6\xb95\xbcX\xc4\x9c]Hy\xc4YnH\xaf\x1f\xf8Vmp\xd2\xb8\x18\x98Y\x83\xedCy\xe6\xfa\xcd\xb2\xe9\xac\xf4\xad\xe4\x8a4\x16\xe7\x1a\"x\x02\xfec\x88:\x1d\x07\xe2qtf\x82A\xad\xc2\xb6b8\x04Z2\xb5\xe61\xdcNlR\x9c\x9f5:8D\x89LZl\xfeY\x97eg\xb03\x17\x9d\x97K\x80\xd8F\xc9\xa7\x8aM\x9c\xf9\x11 \xe4\xbf\xc6\xbd3i\xf7\x9a\x16\xbensF\x95\x1b\xd7:\x899)}Y\xb8Ap\xc3\x0d=\x861\x8a\xce8\x13'gm\xcc\x06h\xb9\xeaA\x10\x18\x8dRY\x84,)lVD\xfb\xf5\xb8\xdcJ\xa8\x07\xbc+*+\x91c\x8d\xcb\x11\xdd\xb9\xba\xf7\xecB\xa4\xa2\xc9\x89\x0d\x0eM\xb1\xa4\xec\x8a%}\xceq\xae<\x94\x04\x85K\xbe\xa6\x9b\x1c\xabu\xeb\xefM\xf3\x93\x0eF\nf\xb8\x8a\xaa\x18m;Z\xc4cL\xdb\x02:?s\x95\xa3\xa68eR\x85\xddo\xc4T\xe0f)eC\x13a|T1?)\xdf@\xbc4GP.\xa2\x9c\xeb\xec\x0c\x15=\x14\xe5n\x9b\x00U\xa8Z\xe9.b\x1c6\xf0\xc92\x1dG\xcd\x16q\xdc\x96\xfb\x08\x0fnd\xde\x0d\x16\x94\xca9R(\xe6\xf8W-\xa6{\x15{\xab\x8dN\xf7\x9a\x1b\x80\xb6g\x7fl8\"\xf2\xe3\xc1\x07?\xe4\xa2\x1d\xd7B4\x89\xbd\x94\x9c,l\x8b\xcefE\xa6\xc0\x85\xfb\xb0\xec/!t\xf1\xf5\x92s\xca,\x1f\xda\xb9A\xf1\xb3[\xbe>0i\xcd\xc0x\x8dI$S\xed*\xf2\xe6\x9a\x04\xce[\xe7\xb00&\x1e\x94!!\x84\xd3\x12(l\xbf4G&\xa7\xfa\x14]\xb6B\xc5o$W*\xa3\xa6^\xb2\xde\xf7\x99Ho\xab\x1f`=a\x95\"\xc4~\x9c\x9f\xef0\xa2+t\xe3\xb9 \xa9\xdb\xb2\x0e\xdaLJ>S\x14\xbb\xc6\xfe\x19\x94\xe3\xd2JR\x01/\xb4EE \xa9\x9b\xdc\xed\x1b\xd1K\xaa\x9bR\xe6\x9f\x87\x81\xadM\xe5\x07\x065\x86\xaf\xbb.\xd7qF\xf3\xfc\x8a\x11\x19$D\x82\xf98:\x93vz\xf7\xc2\x0f\xa7\x9c\xba\xd1\xa2\x1a\x8f\x9cT\xf6\xa6l\x86\x8c\x84B\xe7\xfc\xfe\x908\xc2\xfb;\x16\x14\xa7\x10#\xaa\x13\xd5\xd3\x9e6\xee&\x82\x84\x94|\xbb\x9b\xa3\xd8hL\xaa6rM\xd1Q\xd8\xd2\xc5Qu\x8e\xe5\xd9\xa1\xdf\xc7\xf9,\x8e\x96\xf4T\x86\x11\xbc\xfb\xa7\xa2\xac\x1c1\xdb\xc50\xd8\xed\x02g\x97bpW\xa3M\xb4iB\x1fNc]\x84\xbaz\xa4\x8dI\xeakO\xea\x1a%\xcb\x8dv\xd0\xe5\xcf\xb9\x1bK\x0b\xbb\xa3[_\xf5@\x93\x1bQMd\x01\xfc\xac\xa2\x9c\xd6\xbc.Z3\xee9t\xb2\xce\x98\x9b\xde\x01\xfa\xe0\x14\xc6\x9b\xed\xfbA8\x97\xb8\xd9\x9c\xe7\xf1\x85\xb8 |,\xd0Z\xc7\x00\x91F\xcf&\xe9\xde\xb420\xbb\x16\x02\xe5\x8f\xf9k;\x8f(\xee\xb6Ppo\xf1$\\\x07\x94-\x97'\x18\xb2\xd9\x85\xbaA\xa9/\xcb\xb0\xc2A\xe1\xed+\x9e\xccZu\x96A\xcc*\xfd\x99;d5\xd0\x92[\xc3\xbd\xafg\xef\xe2j\xf4\x85\x8a\x0b\xcd\xb4\xb6\x05%\xaa\xc3\xe7,o_\xfb\xadf\x04\x95ru\n\xe5\nL\x95U\xdf\x86\xb2\xa8\xaaO\x95B~>?\xf6\x9f\xec\xa4\xc8\xb0\x12#H\x84\xec\xd4\x9a\xca\xe1\xf0\x13\x12\xcch\x15\xfc\xf7\xd3'\xb8\xf2\xc3itU\xa5/\xbe>\xb272\x12&_&}\x00\x7f\xc81\xcd\x9f\x16\xaeS\xdds4\xc4~\x816\xc8\x06\xf0\x00\xf2\x9a I\xdf\xf9K\x12eiK)'$W\x10\xd9>;\xc0\x8a\xaf1\x1cB\xc1\xff\xb8\x80\x03\xe0\x85\x15\xb5\x05\xf6\xfb2LI\xbc\xf6\x82[v,>\xd7\xf7,J5]\xcb#C\xfdK\xe9\x83F\xf1\x873\xf9\xa8\x88\xad&\x96\x8fJ\xda\xd2\x98\xcc\x94\xec/\xec\x8d<_\xe5#l\xb7 $\xa55f\x10\x89\xdd\x1c\x0f4s&a\x1c\x05A\x1b\xfd\x90\x0c\x1d;\xa5\xcd\x05\x84\xff\xf9r\x8a\xd2\x87\xfc\xaa\x8a_\xb4\xb7,\xd4\xf4w'\x9d\xa9\xd6p\xb4\xb7s\x84\xf3\xe1$\xf5\xd7\xe8'\xda\xf5\xc4\xcf\xcf\xe9\\\x7f?\xc8/R\xa5\xaa\x1a\x8dV\x91bQm\x15FPl\x99\xe6\\ri\xf7<\n\xc5\xe4\xd9\x9dD\xfe\xb7\xee\xb2G\xe3q\xe5bD\xab}G\xec\xb9\xe5\x92L}\x16\x9b\xa5\x99\x84\x95\xbfP\xb2e\xb2\x01\xa95(\x0e\xe6\xac\x8b\\\x98\xef\xbc\x0d\x87\xa0|\xa3\x1dD\xb5Ni\x18\xe5\xe2\xe2|\xb8M\xde\x9a&\xde\xd9\x14P\xcdGU\xa2\x9f\xc8Q\x88\xea\xd1S\xd8#\xe1\x8d\x82eA\x07R~\xab\x99F\xdfDW,W\x8em\xb4\xfeF\x13\"kA>Zz\xd3\x1eV\x8eq\x90\x1a*l\xd7\xd7\xf0\x92\x89\xef\xd7\xd6\xb8\xf0C/\xbe\xae\xaf\xe2%d\x7f\xb7~$\x93d\xd0Ta\xbb\xa1F:\xeb\xef\x07\xa4\xa9\xcevc\xa5\xd8\xbb2\x94\x83\xe4\x9fm\xc8+\xd9hq\x95\xfbwWwxys\x1b\xf2\xfc\xe8\x18\x19Ee+\x90\x0b\xf7\x07i\xeb\x07.(`3\xff.\xae\xa3\xf8T\x18\x9e5\\\x03\x91\xc7\x8f\x9db`u\xca\x97F\xdc\x85V\xf8+\x9e\x16\x83\x846h\x08\xadP\x11Z\xa2#\xb4EI\xf1H\xd3\xc0\xdaM3 \xbc\xd4\x0f\xfb\x8d\xbd\xd7\xee^\xf1\x88\xbey\x9bM]\xd7nwhEZ\xa0\x05\x8d\x13\x8fP\xe9\x98\x87\xd5\xb8'A8X\xd4\x87\xd8\x12\x0f\xa5\xd96'\xdaez\xcdbQl\xf5\xb4\x9f\xeb4\x84\xba{I\xbc/\x13\xd12\xb6\xca\xc1\xc5\xed\xd213\x1a\xf1X\x85,\xbdQ\xd5'\xc4z\x1f^\x86\xd1U\x08\x82\n\x0c\x81\x0d\xdb\xa8\xc7`\x07l\x99\x12\x15a\x1d\xf2\xb8t:\x8e\xab\x05\xdac#)\xf9(\x92\xc6\xb06)\xe74a\xa0\xd3Dh\x04\xb3\x89k#\xa9\xc0\x0ef~\x10|\xe3\xa1\x96\xce\xbb}/\xb5X-\xcfkV\x9aW\xc0z\xdc\xd9\xa8\xc7Z\x84\x95U\x98\xcc\xfek\x04+\x96f\xdc\x96:^\x98$g\x10\xe3\x0d\xbc$}MP\xce\x16\x81\x11\xe9\xabwQ\x8a\x82\x92\xfc\xeeh\xe11\x8f:\xd9\x1b\xb0\xa4\x0c\xcc\x7f\xe6gUV\x13\xd6\xfa\xc9\x08\xfa\x83\x07\"c\x03<}\n{0\x1a\xc1>\x1c\xc0@\xbc\xd9\xa5o\xfa\xbbp\x00;\xe2\xd5\x0e}\xb5\xd3\x83\x03\xd8\x15\xaf\xf6\xe9\xab\x01\x1c\xc0v\x1f\x86\xb0=\xa8\x1d\x92g8>\x852\xb0\x98\xfev\x19DU!\x7f\x13\x07h\xb4;\x19<\xa4{\xd9\xee?\x1a\xc0=L\x0f\xebH\xb6L\xe5\xa5\xb0\xfe\x9f\xff\xeb\xff4PY\xf40*\xaas{A\xc91\xac_w\xb4\xea\x06\xd27\x0d\xa4_;\x10\xd0\x0df\xa0\x0c\x06\xffV;\x1c\x98:\x1c\xf0\x0e\xdb\x13O\xae\x0f}\xacC2I\x90\x08\xd1\xbd~\xa8`\xfd\x13\xc9\xd7\x0c\xa3y\xa1Wf \xe5qY\xe5}@?t\x94}\x91\xa7l+\xf3[nuS\xb1\xa8`\xb5\x1d\x89\xcb4y?\xe7#\xde\x96\x02\xa0\xd5\xef\xbdD\xab\x01\xa0\xebe\xa7\x85'\x10q0!\xf9\x08\x1dWjt\xf2\xc5\x0cs\xf2n\xb6\"\xa9\x0f\x03\x80\x97\x91\x93\x85\x17\x1fESr\x98\xda\x92\x07\xac\x1aWZ<\xb4\xd1\x98J\xdd{{\x83G\xfb\x80f\xf9OF\xb0\xb7\xbf\xd3\x7fT2\xf8Rp\xa9B\xd0v\x95\x85\xe3)\x9a\xc7\x12D\x06gj\x9d~\xa5N\xff\xcc\x85\xb0pS\xd7\xe6\xd9\xae\xbc\xd1\x9bxh\x89\xa32\x93\xbef&\x83\xe6\x99\xf41\xe5\x85v\xe1\n4C\xa8\xd7\"R]\xaa:\x90\xef\xc3\x0f\xa4\x03\x89]~X\n\xe5@jQ\xdaH\x0d\xf7@fr\\\xc3\xbdtL\x9bS\x82@\xaf\x1a\x0eL\xb7\x12\xa4\x1623\xed\x16\x13\xe3\xafl\xb3\x1d-\x91\xeaq_\x93\x83\xd2ZqV\x83\xbb\x9d\xd9*F\xec\xc06\xde\x94\xa8X\xb1#\xec\xd1B\xb1\x1a\xb5\xf8Qj\xfa\xb3\xf6\x83\xe3\x1a\x86_\xc2\xb4\xb0\x81f\x05w\x87j\xda\xadtP\x8b\x1d\xf9\xa0{.\x02X\xc1\xd4a\x036\xac\xcc\xcc\x8e\xe1|\xa8\x07\xc6\xa2\x86yj\x82\x85\xd4\xb0\xf8E\xca\xd1\xdcX\xc6\xc7\xa8d\x1b\xe4\xa7\xf5\xc2\x7faq\x9b\x9fA\xb9`\xa8\x80\x1f\x97\xcdU\xdd\x9e[\xed\x7f\xbfHB\x87\x9e\x989k&\x98x&\xe7\x18:\x06\xd9\xba\xf12u\xbd\x84\x02>\x1e}\xae\x9a\xdeJ4\xb2\xbd\x8d\x83\xa1\xab\xb7=`bv\xdd\xc0\x90\xb1\x92F\xe6\xb4\x1e\xc3\xe0\xf7\x1f\x03o\x0bC\xef\x8cD\xca\xbc\xf2\xa8v\xf4\xa3\x12\x9d\x97\xb7\x8f\xd9\xb0\x98\xe9 \xcb[\xbeJ\x15E\xb8~\xf5\xeb\xca\xf9\x16V\xa9\x8c\x1c\x9e\x01\xb6\xc1\x0e+\x94[\xbf1\xb4,x\x8f\xf9M\xeb\x86FKL\x1bFR/\xd4S\xcf\xf2v|\xa2!\xa4\xfaq\xd5\xf3Bw*\xa0(+p\xeb\xe1\x14bLy\xd2\x92\x04\xa3\x9cR\xb7\xba\x99)e?/^\x17\x176\x035y\x1f\xcfq\xae\xcf\xcb\xac\xd1\xae#\n#\x04J\xd9T\xca9\x13\xa2j\xda\xf0\x92\xc9}n\x8b\x91\xc6^\x98\xcc\xa2x\xc9\x8c1tn1\x18\x17\xfc\x9d\xa8\xd7\xc2r\nT\xaeY\xe9E/T\x85\xdd\xbcV\xbd\x1fG!\xb5\xe1y3\xb90\x0bi[qY\x1c3\x06\x0e`\xcc\x06\x85\xd0\x857\xb9\x14qj\x96Y\x90\xfa\xab\x80@\xea/Ib\x8cw/\x06\xb2\xc8\xc2\xcb\xdcG%\x1f]\xf1\x86\xa7\xec*L\xadx\x1aWW\x93O[<\xe2\x80apl\xe1}\xe0+\x86;\xb6_ k.\xecc\xe1 \xf8\x9a\xa8\x1bEW\xb6Z\\\xe9\xf1\xa6\xb0\x01\xd58\xdd\xd1\x8e%\xc4\xd1\xd9H\xcak\xae\xaf\xc1\xc1\xc8\x82]\x98\x8a)\xe8kk\x14\xdafZ\xa9|\\\xe8\xad\x97t\x0154\xd5\xa4P\x1e\xb5\x89E\xf2\x89J\x06O\xc5\xbb\x91\\\xc3\x9cgd\x16d\xc9Bj\x80\xfd=\x12%\xc2\xe4\x1e\x0d\xb6W1\xc9\x1d\xf5\xb2&\xbd\xa8\x8e\x9d\x12\xbe\x18e<\xd3\x8fL\x1a\xcd\x81\xfcW)g\x9a\x96\x19\xf3r\xdaZ^\x14\xcaDz\x9c\\\x15\xfb\xa7~\x1e\x9e\x89\xeb+\xdd\xa4hLH\xabLB)\xb1`Z\xc4\xba\xaf\x84 \x10\xe7e\xe5\x9e\xe3\xc8\x0b\x02\xba\x0d\x8bE\x9eF!\x81\xab\x05 \xe1*\xcf\xa8\xb45\x82\x9e\xa5\xe9?U\x89f\x89:n\xd8]\x92\xfaAP\xdajj\x979d4\xbe\x00\x85\xcc\xe6W\xf2\xaa\xb9\xd2;;b\xdcJ\xb4adw\x99@\xab\x93.Q\x90\xdc\xe9\xa9\xdc~\xc5\x97\xac\x18yy0\xa5\xfd\xd6$(T\x00\\|m\x080c\xec\xb6*\xc9\xea\xbb,{\x9a\xd5\x9d\x99(\x9b\xc8\x07\x0c\x85J\xe9\x10J\xf37\xd2m;qa+V\x10I/\x1e\xb5>r\xecXY#<_\xbe\xd0\x89sc\x04\xb1\xeaYP\x7f\xa9R\x0b\xdb\xdc\xe7\x84\xc8\x10\xc5[\x04\x01p\x16B\xb8\xc4\xae`\x0c&\x95\x81\xe9U\xb8,[n\xd4\x15M\x16\xfc/\xe9\x96\xb9-f@\\\xdd\x06=#$Z\xe6i\x90\xf93\x95Q\xac\xb6\xa6l\xb1z{\x0c\x96{=\xe4D\x969\x90\xab\xc4]!.\xb7b\xb5%\x9eZ\x97\x89\x17sH\xcaBQ\x14\x1f{\x93E\xb9\xa2\x94\xe2|\x12\x93\x12.\xb4K\x8b+\xf0*bDSKU\xb9\x0din3\xda\x04@Lgz\xef\xde\x06\x8c\xb6\x9e\x15DK\x97\x10\xbd\xd9\x1c \x18\x04\x10\xd2qxV\xa9|c\xf3\xb4\xb8\x18\xc9X]+\xb7\xa4h\x84\xdb.\x97\x16\x9e\x0e\xfc\xfd3\x9a\x940`\xc7iZ93\xcd\xf5\xf5\xab\x96\xbc\xf6^\xdb\x98X\x16\x95\x18\x84\xa9/\xf0\xe2\xee\xde=\xae\xad\xd8\xc6\xc4\x0c>\x86\xb6\x1e\xe6\x8e\x95x#\xd4\x9c\x1d\xb9\xd5\x1c\xcb\xfe7\xbb\x0f\x06\x8eM\x87\xc4\x91\xd6K\x12\x7f\x1e\xc2\x10\x8bv>\xd7\xa2\xd0\x05\xdf\xc5Tr.x.\xcf\xe6:P\x13\xa4N\x9aH\x0b\xe8\xee+\xe8#\xe7\xcc\x8f\xaf\x95\xaf\xf4\xaeY\x13\x17x\x08@\xad\x07\xd6$\ng\xfe<\xab\xc9$.\x985\xbdl\xd1\xe4\xc1\xb5\xf6\x82\x8c\x0cA1\x02\x96\xd6\x15&^n>V\x9cN\xec\xcec\"]\xe5\xc6\x15\xc9\xba~\xe8\xe6a\x97\x87\\\x8c\x84\xc55\xd4B\xd1\xdd8\xa12\xa5h J\xa6\xb9*k\xc4s\x06\xa60\xa4\x87>B\x86\xb1\x14\xe8\xa7U\xacR,_\xaa\xe0m\x11\xcfn\xfc\xe8\xa1\xe3b:\xd4\xf1\x19\xcbl\xdd@U]\x9d\x02\x9cr>\xde8=\xcb\x99y\xfaG\xb9\n\x92=\x82\xfd<\x86t{\xfb\xb1#|\\-\xcf\x82\x0e\xd8\x9dN\xe8\x14\x1a\xa8\x9d}U\xae\x97\xf4(\xc2i\xc2\xb6f!K\x98\x8bE\xb9\xc4a\xd3\x06 \x0fq\xef\x82\xe5@\x87\xfe\xef\xef\xa2\x8dY(\xbc5\xf1\xec,\xdc\x06\x1e\xc3\xcd\xe32\xcb\xd8z\x8d4\x14\x1f\xe5\x1b\xc3\x9a\x15b\x8f\xc2\xe7\xe0\xa9E\x9c\x8a\xea\xa1\xba7\xe9\x93\xd9\xe8\nU\xde z\xf4\x07\xdd\xed\xf2\xcd\xe7\x12'&r\xe8\xb2\xad\xeb\x91\xbeTM:\xe7\xe7$}s\x15\x8aj\xcfI2\x89\xfdU\x1a)\xf6\xd3\x99\xe9\x83\xd7\xdeR\x0dh\xe2\x99\xea\x9e^//\xa2 iq2i\xd7\x98\x91`~4\xc76Q\xf1\x14\xe5D\xb9\x06\x86\x18\xc8\xec\xc4\x11\xccN!~kC\x0d\xeaW\x1a\x9b\xb6\x99\x87M\xc4\xc2\x14j\x14?\xf2\xd2k\x9b@\xee\xb2\xfa]\x19\x81L\xaa\x0e\x0f0\x82\xdb\x7fY3\x91\xed{r ]/g\xffS\xb9\x95\xcf\xdc\x15}\x1d\xff\x1b\xda\x0fUUs\xa4w\x03\xa3\xdc\xe9mq\x94\x9ek\x9a,xt\xfb\xe4\xc4n<8\xd3B!Fj\x85\x0b$w\xc4\xd8\x10O\xb7\x1a\xe18>C\x07'\xe1H\x91\xa1<\"\xbe\xa8\xacH\xd8\x00g\xb9\x8fv\xfc>\x1f\xfa\xd6\x16W\xf6\xb1\xf0\x03\xe5\x14r\x9f>\x19\xb4d\xc8\xd5\x9b\xf4\x83\x0b\xd24\xdaVX\xa1\xe7\xa3\x88\x0b\xd6\xf99I^E\xd3\x0c\x0dN\xd4\xa5D>G\x16+Yt!/N\xc8\xf7\xde28BnE\x93\x16\x7f]D\x88\x0e\xed\xbdAO\x83q\xc8\xfc\xb0\x80\x0dq\xb7\x18\x04\x1c@\x0cC\xcd\"\x0bSS5\\p\xd1\xa9n`\xb5\xa8\xaa'\x0f|-#\x91\xe3\xaf\x9bx3\xf2M\xe4M+ \xacjID\xce3\xb1\xd0\xc8q|\x88\x03I\xba!\xb9zG\x89@x\x1c\xc7v\xa1IB*\xad\x1c\x97\x1bz\x916\x11\x84\x9d\x87\x06q\x88\x8e\"\xb6\xcbs\xf0\xc3I\x90M\xc9\x10\xc6\xa1=\xe8\xed8g\x12\x12\xfcC\x07\xd3\x1f\x0c\x9c3\x85\xb0-W\x81?\xf1S,\xdf\x1b<\xc0P\x06{\x83\x87\xfc\xdfG\xec\xdf\x9d\xde\x1dM\xe2N7S\x10y\xcc[\x99t\xdf\xbd\xf9\xea\xabo\x8e\xcf\x8f\xde\xbc~\xf1\xf2\xabS|\xf5\xfe\xed\xf3\xc3w\xf2\xab\xda\x9d6\xe8\xed\xfdN;-[M\xbd\xaa\xf6\xd2@\x165\x07\xf3\xf5\x8a\x0c!\xab\x9e\x10+\xef\x9a\x02d\x08v\xcf-\xb6\xa0c\xff\xfdF\xd5\xe2\x02(\x9a?\xd2M\xa3\xf9<\xa87\x0ej\x18\x91&\xabJ>\xa2\xd4\xd4uy12\xfd\xbaYL\xb2K\xce\x19\xe4\xac*\xaf\xa8Y\xff\xfc#63K^\x81\x1cod\xad\x89n\xaeU\xad\n|\x1eA!2\x12\x8dJ\x0ef%l\xec\xef\xa9\x0c\xc8\x97\xc2F^\xa7\x85b'\xa7\xca~\xc8\xe2:\x94\xd1\x8c}U\x1d\x04\xdf\xbca\x83\xae@\xa3i\xd8H\x17\xa1\x18\xac\xa0\xa9\x16\x8b\xde\x19\xba\x9br\x87\x94\x1a\x10\xf9\x1c\x18\xdeQy\xa1\x8f\xb7\">\xdd\xd1\xd6%\xb9N\x90\x91&\xdc\xa3\xc2\xc2\x1d\\\xbc\xc3\xe47C\x16\x14w\x1c\x9e\x9d\x95t.\xa22\xdeZ\x1e\ny\x05%\x0c\x0e\xe9\xd8f]\xa0\x91\x86T\x1d\xc3\xd0\xa7\xb1O\xff\xd2\xe2O\xa3haT}7~\xb9\xd1\x01\xcc \x9a&\x18\xde4\n))\xda2\x1ew\xb7\x1c\x9d:4\xbf\x1cJyK\x96\x87\x98\x90\xfc\xeezE8o\x0c\x1d\xb0\xc4\xed\xaa\x977\xbae\xba\xafn\x18\xec\x86\x9b\xf8\x91~\x0f\xef\xedj\xb7\xf0#\x95\x05\xcbP\x18.\x1a\x0e\xed\xc1\xbecg\x94\xf2\xec;\xb6\xe5\xa7$\xf6\xd2(\xa6\xe8\xd3t\x94\xa7r\xf0\xb2\x1b\xa7F;\xa8\xbb\xba.h&\x8c \xa6#\xa8\xe2EH>\xa6t\x13i\x12\x91\xd3\xdd\x80m\xe3b\xbc\xcc\x87\xbd\x19\xb0%\xf5\x84\n?N\x1a\x1fh\xc1\xba\xdb3\x93\xc0=\xe9\xea\xa3\xc4\x94\xfb$i\xca%\xe8W\x14\x9dEf-\x17\xd7.B}\x04\xe5\xd02N\x81\x98\x06\xae\xf7\x18\x85\xbd\x07;\xbb;\xbc\x7fV\x1f;\xa2\xc8\x82\xce\xdf\xf4-\xf3\xc2L\\\xecd@\xcb2\xd8\xe6\xcdt\xe88\xb7\xf9\xa0\x9e<\x81~\xcf\x81\x0e\xec\xef\xed\xed\xec\xdf\xcd\xa6\xaf\x1c\xa9\xfc\xe0\x18\xf4\x8dg\xea\xc0\xe9\xceI*\x0e\xf9\xe6[Y\xa4\xf3\xeaIjd\xf1H\x03\x8b\x87<\xd1E@L\x0c^l\x13n{\xe4\xdcz'\xf6w\xf4\xd7#\nOV\xa10(\xa4\xb5\x03\xdb+\x92.\xa2z\x034\xc9\x8dl\x0b\xa3\xcd\x0b\x9a:\xf6\xcf0\xc0\xc5\xd8\xfa\x97\x7f\xc9\x87\x83\xaf\xa21\xa5Ng\x9b\xcd\x9b\xae\xf6\x0eJ\xbb\xfd\x1d&\xf5\x0evv\xf9\xbfLM:\xd8ej\xd2\xc1^\xaf\"\x0e\xf7\x1f9B\x14o\xd3Y#C\xad\xc3G\x99E\xf6\xc7\xa1\xddwlK\xdc\xc6\xbf\xf3\xe6\x96s\x06#\xb0~\xc1L\x8d\x1d\xba\xcf\xb7F`\x8d\xd9E\x0b\xfcrf1\x1d\xc1N\xcf\xe1VK\xa5\xe8\xbd\xa2\xa1\xba\xb0\xdd\x1c\xf2y\x9b\x16t\xe89\x80\x01L;`\x9d\x95\x9c\xe3\xb6\xda\xe9\x07d0n\x85\xf6\xee\x80%G\n\xed\xdd\x1d\xc7\x1cx\x8d\x8f\xe4\x01\x9d\xa2^\xd7\x1c\xda\x8f\x1e9\xb65\xf5\xd7Tl\xb0<\xad\x19\xccF\x81\x86\x1fT\n\xd5\x9b\xcc\xaeW\x00\xa0\xd5\xe4%]\xbf\x89\xd0\xd4\xb3\xe6\xe8\xaa\x81'\xb1\xdeV\x813\xe9~\x95\xea\x10\xd3\x95\x9a]\x8e\x13\xc0\x96#\xe6\xb1\xc7\x05I)|\xd1j\xe9\x99\xda(\xca\xd4of\x9b\xb7\xb9\xf5e\x86\xab\x92X\xeb\xc8\x0b\xff\x94\xc2$\n\xd7$N\x81\xa3y\x1a\xc1*\xf6\x97>\x06+\xc4)l*\xd25m\xf7\x81\xe1\xfc\xe9\xef\xe8%\xe8~O\xe5_\xaa\"t\xff\x01\x17\xa1\xfb\xff\xaaE\xe8\x87\x86\x83]}\xcf\x01\xbb\xab\x03,\x05x\xcf\xb1\xad\x97\xc7\xe7oO\xde\xbc{\xa3\x1ez\x9e\xaa\x9e*\x17\xab\xda\xab\n\x15U\xba/F\x8c>?\xf9\xe1>/b9FxXV&\x1e\xa7\xdd\x17\x8f!F\x8b\xb3) HJ\xe4\xac7\xe3h\x1c\x9fir\xa6\n.W\x8d\xed\xaa\xa7\xa3%c\xe5rP\xc7v\xa6b\xbc\xbb\xdc\xca\x1d\xefF<\x05\xdd\xd1\x80\x1b\xd8\x0d\xad\xe7B\xb9\x98{\xe3\x8c3\xb4'\xc6\xec\x93hzVX\xc0\x8c$}\xac\xcf\xb2\x19\xdf\x16\xf1\xf7\x0c\x14\xc5\x80\xf75\x1c\x1b=\x92\xff5(\x8f\xf6\xf4\xa4b_wEG\x99\xc2\xbeco\xb5\xa3\x16\xb78\xd99\x80<.5T\xe9\x00\x82\xa8\xfaz\xc2\xcc7\xab\x10Gsv\xcfaJ\xa2\x8c\x19Z{\x08\x8b{\xf7`\"\xfc\xb44\x1f>\x96\xa3@\xe1j\xe0w\x94,\xe0Z\xb0d!\xff.\xb2'\xd8\xda\xa7OEk\xfa\x05\x9a\xdcv\x81vM<\x12\xb7\xe3\xb3~\xb1\x1c\xba\xe1\x90\x01|\x99\x1c\xe7\xf7\x8ev\xaf\xc0\xe0\x12\xc2\x9a\x18\\\xce\nS.#f\x96\xec)&\x10Km\xcb\xa2\xfb6\xb7\xfa\xbf\xedT*H\xc5pmWg\x9c@ \xb6I\xb5\xdb8\x95\x92^\xe2\xdf\xf4\x94\xff\x15\xe9)\x0d\xe4j\xb0\xa3\xfa\x1dD-8\x18\xc9j7?\xb1j\xcf\xd19I\xdf\x8a\x8aof\xf5A\x92s\x90pZF\xf7\x94\x0b\x11n\xabqt\x06C\x93i\xdf$\n\x934\xce&i\xc4r\xe3\x83\xe4\xb7_.=(\xff-\x1d\xbb\xc3\xf2g\x9c\x08\x1c@\x06\x8aG\xf3\x86\xe0\xef\xdfzK\xcaV\xc7\x9b\xf5\x9e\x1f\x9d\xc2w\x07\xfdH\xf3\x03\xdc\x15\xda\x97\x9e\xe3\xf2\x93h\x8f\x1f\xad(\x0e\x08\xcf\x94\xdd]\xc7\xc5\xfdLe\x03\x177\xed\xa4,\"\x04\xecUI\xb9\xc0\xf2\x82'\xe2~wQq\xcc8:==\xc9XN\xbe\xaa\x19\xc7\xd1\xe9\xe9)eH\x9f\x93I\xe0\xc5\x1e\x9da\xd5E\xe3\xe8\xf4\xf4\x03\x15\xafx\x13ji\xe0\x930=!\x93T_\xfe\xfc\xcd\xab\xdaB6\x17c\xf1\xbb\xe8\x92\x84\xfa\xc1?\xf7R\x8fy\x11\x92\xf8eJ\x96\xfa6^\xf8\x81a\xe4\x7f~\xf7\xea\x9b\xc3 8\x8a\x82\x80L\xf4S\xa7U\x9a\xca_D\xf1\x92k\xbb\xf5\x15N \xfd\xdeX\xe5\x15\x99\xfa\x9e~\x86\xaf\xfc%\xa1b0.n\xf5\xcb\xd7\xde\x92L_GS\xf2\xca[iJ\xa3\xa9a\xd5\xdfz>]\xb1\x9f3\x92\x18\xd6\xe5m\x90\xcd}\xcd|\xd9{\xc3pN?|\xf5\x0d\x1eC\xfa6O?|\xf5:[^\x90\xd8X\xfc\xd6K\x17\xa7\xc4\x80\x0b\xb4<\xf2C\xc3\x80O?|U\x87H\xa7\x1f\xbe\xca\xfdM\x0d5\xa2,\x9e\x10\x16z\xdeP\x83n\x94\xd3\x05!\xa9\x1e\xaa\xef\xc8\xc7\xf4]\xecM.\x8fL[%\xafa(\x8e\xb2I\x0e\xbb\xbc\xe4\x86\xa5\x0b\xf7m\x0cY\xc98\xf05<\x81\xa9\x904a\xdd\xe9\xe8\xf8\xd4k\x17\xe60\x82\xe9x\xad\x18\x9d\xd2g #X\x8c\xe7\x9a\x92sd\xe7u%\x170\x82sJ\xf1\xcfu\xa7\x11\xf0c\x18\xdd\x89\xed\x0bz\xf6~\xfa\x04\x9e}\xe1\xc2\xcc\x85\x95\xe3\xc2\xc58(\xde\x05,\x07s2\x9e\x9f\xb1\xe8\xbaK\x8d/\x03R\xd6kz\xa2\xc7\x0e\\\x8c\xaf\x99\x1a\x99~~\xedB<\xbe>+\xf4\x99\xd0\x96Z7*}\xb4>9\xf4\xbd\xe1~_\xd5\x05e\x82\x954In\xfd\x9d\x07\xfff\xf9\xf4_\x8e\xe5\x93\x99\xd7pl+\x0b\x93I\xb4\xa2\xd2L\xa22o\x1a\xa7m \xdf\x84f\x01\xfcq|\xc6\xae\x00\xfa\x0f\x1c\xdbG\xef\x8f\xbf\x9b\xf5{\x15I~\x1c\x9f\x8d\xd33\xc5\x89^;\x11\x93~\xbf\x16\xf5\xf8\xa2\xea\xc4\x93\xbb5\xc4j\xbfMe\xb7^\xbe\xa1T\xa6;\x11lV\xe9-c\xae\xf6U\xab\xa8\x19\xbe\xae\xdc\xed\x04\x8ckS\xde\xae\xd8[U\xc3\xb0`M\xab\xaf\xa7\x9ct\xa8\xd6\x91k\xf6~W\x1d\xca5\x17,\xd5^\xe7\xfc\xfd\xae\xd3M\x88\xb2e\x97\xbc\xad=\xc7V\xbe:\xe7,\xb1*\xd5^\xf0\xd6T\xf8\\\xf1\xf7*\x01\xfc\x88\x1cf\xae\x8fW\x8eE\x91\x0c{B\x12\xc5\x91\xf0\x18\x8b\xf8\xfd[\xb9\xe8\x10F`\xf1\x8fp\x87\xcf\xecS\xa5\xd77\xf5\xea\xdb\x9f0\x92\xde\x08\xce\xbb\xb3r\x01\xa5\x84[[\xf5\xaa]\xb3\x7f\x9d\xa0\x8e\xc7\xdd\x98$Q\xb0&\xb6\xba\xa6\xf2CX ZY\xe6\x19\xd1\xdd\xcb\xaf\x01\x93\x15\x99 a9\xab\xdd\xc3\xea\x93\xdao\\xc\x96v5\xd9\xfaA\xb2\x0394zl\xf1\xa58!?1\x86\x163_\x8a\xac8\x0b\x12\xdao\x1cY*\xab\x8a\xe55\x1e\xb27*\xf6\xbdl\x9c\xf3\xba\x9aX\x05\xa4s\xc4\xde\xc2\x98\xaf\xe5\xc9\xe4w\xf1,p)\x0e\xdb\xc1)\xa8\x89\xb4J\x7f\xbej\xa2s \xae\xb4\xd2\xee\xb9Q B\xcb\x14\xc7\x01\xf9Y\xe7\xe1\xbc\xcf'\xfa\x1a\xcb\xe6\xa4U\xa0J\x94i\xf7|\xcd\xe4\xc9>.e\xf7\x1c\x00\xe9F\x97\x18\x94e\xe6\xf9\x9ahc\xea\x93\xe0\xc5\x03\xdf\x1b\xcd\xd5'\xbc:E\xb8\xe6\xda3\xac=\x8d\x96\x9e\xdf\x94 \xc4\xb8\x81\xe5\xc7c\xc1.>}b19)\xec0\xdc\xd8[\xc6E\xd1\xbfF\x18\xa4t\x8b)\xf9=d=Fh\xedoc\x0e\xadY\x97\x84)\x89m~\x81\xe0\xd91\x8a\xe6\x94\xc5\x9du\xc9G?\xb5\xb9P\xbf\xd5sX\x1d\x8c\xb4\xb3\xe2\xe6\xff\x070\xb1?\xda\x16\xdfw\xdb\x93\x85\xe7\x870\xb9\x9e\x04\xc4b\xa1\xea\xe9:\xbe\xb4)\x06\x1f\x087\xd0\xd0\x85\xc4\x85 -N\xb0d\x08\x13;6S\x03P\xf7e#Xp\xfc[\x19\x9f\x1f\x9f\xc4\xc4\x94f[<75\xf4\x08\xc2B\x19\x1d=v \xb3\xc3q\xd4\xe9\xe8\"\xc8\x8a\x87n\x12\x1e\xe1&p\xd4p\xad\x9a\xde\xde6\xf6\xb6)\xfe\xea\xb1QF\xac\x1c\xe8\x7ff\xaba \x9c\"\x1c\xa7\xf2\n|\xb9\xd8)\\\x83Rm\xd0I\xa0\x12\xddS\xad\xb7~\xedJ\x9d4\xc2n-\x05S\xab\xc2\x85t\xcf1S\xb4\x8d?X\x184\x84\x01\xe9\x9e_\xd1\x02\xe2t\xcf\xd7,F\x1d\xe9\x9e',{\x04\xe1+l\x13\x86y\xa4{>\xe1\xc6\x94\xf4\xa0xe\x13\xd4]\xd4\x8e\xfcu\xbb\x91\xbb\x86\xc8g X\x9a\xb0{\xae\x0d\x05\x0f\x18\xec5\x9f\x14\xde\x90\xf39\x19\x8e\xdf\xfac\x17\x03M\xb2\x00\xf6bc\x15\x87\x1fL\xd0\x88\xe7\x82\xeefd\x1e\xa6\xe0\xa7 f\xaa\xa9\xa4\xfc \x9c_\xa2%\xd5A[\xe6 $!\xbd\xf9,<\xbf\xd2zGV\xaaM\x87\xba\x84\x82\xf2c\xe0\xca\xc5\xd3\x8ec\x11\xe6\xa1\xf4<~\x8d\x07L\x1f\xcf\xe6\x13\xfe\xfb.\xd9\x80\x93\"\xf3\xed\xadO~g\x88y\xc39\xfa\x87\x0c\xfd\xfb\x14\xbfC\x17\xb6L\xe3m7N>\xbe\xfa\x89\xb4X\xbf\x86\xb5\xbb1\xce\xbf:o\x85\xc9(V\xfc\x12\xf7\xfaq\xed\x86\x9d\xf2\xa8I\xc7.\x88Ma\xb9`\x9d/,\xc7\xc5t\x14\xae\x1c\xd5\xbaU\x14\xa3\xd4F4a\xed\xe6\x98\"\xfeT\x88K-\xd0O\xca\xf1\xb4\xcb_\xe6\x7f\xdd\xb8\xec\x107O\x92\xa9\xf9r\xce\x0e\xff\x92O^\xf6&\x91U\x97\xe5l\xe5\xebJ\xe5\x85\\\x991\x8a\xc5\x80\x9c\xb2-\x8f=\xd8\xddw\xecc\xd9\x86V\x1d\x1f [\xc4\xfc\x16\xa2\xdcO\xb6\x88uu\xac\x0b\x97-\xac\x8f\xa8\x0c5\xd2\x8a\xa9\xec\xca\x19\xf7\x06\x15\xb0\xca\xb5F\xe5\xd4\x83\x94\x92s\xe9\x07\xd9\x18z\x16\xf3?\x87\nL&R\x08_\x0e\xe3<\xf0\xa8\xa7\x96a*\xdfW|\x1e\x98\xb8>\x14\x12Jy\x9d\xcb\xfb\x08\xd1\xa5\xce.\x03\xca\xd6\x89L\x85\x90\x8f\xd3\x88C\x8e\x12.\xcd\xa4\xa0\xc6x\x1a\x8f\xab\xd8%\xb8\xc2\"];?Q\xf0z\xf45\xc6[\xc8\xb3\xf33&\x05KNx\x89\x8c\xcd\xe7]*s\xfe\xd4\xe6\x828\xc5\x93\xed\x18\x97\x13\x7ff\x94\x83\xe6\xc1\xe9Q\x8d-\x1b\x9e8.\x04v\xd0\xfd\n:\x10t\xbf\xc5\xff\xbf\x80\x7f\x86\xadK\x15!\xdf\n\xa6\xe8\xb8\xf41\xb3&\xb5eZ\xc1\xad\xdd\x1f8\xb6\xfcJD\xa3\xcb\x0d\xddY\xc7\xa7\xa5.%z\xa3\xce\x8d\x82\xa7i\x91\x05\x83\xf4\x93\x8e2\x81\xa4z\xea\xb9\xb9\xb4\xef\xb0\xe8\x9bzD\xab\xc0\xa9\x18\xae\x8dl\xd3\xd6\xa5S;j\\\xef\xa6a\xf3Q]\xd9\xf9\xe6\xc8\xd7\xed\x98'\x93i\xc0S\x05\x92\xf6%\xd3\xd4\x0fv\x1fJV\xf0\x95\xbe\x8f\xbb\xcc\xc0\xb9\x8b;\xc8~#\xa3E\xdd\xb4\xbc h\x9a\x92\xcc\xaa\xeaO=F\xb5L\xf6BxsQ\xaf\xbe\xf1y\x15\xb3\xca&j/\xa9\n::\xd6\xdc'\xcaO\xa4\xb7\x9b\x93\x1f\x8a\xe8\x86\x14\n\xf4YSZN\x8f\x91\xf6zV\xb4\xb0\x82\x11D\x9dN3\x07\x98\xd4\xa4p\x10O\xc8(/#\x81tov:n\xa1-\xa3\x18\x81$\xb2\xfd\x08\x01;\xa6\xacE\"\x98\xf4\xb1w\xc6(\xdf\xf6vFKb;l\xe2\n\x8dB3p4\x97\x9a\xd2\xd6\xbb1o\xf9\xa8\x8bG\x97oG\xddu\xdb\x83%\xf6&\x8d{\xf7\xae\x10\xdd\x8c\xc5\xfe\x06X\xbc9nUW\xbd\xd8vP\xa3\xcd\xd3\x88\xb7P\xbf\x02>[\x81\xd8\xf6\xebV@\"A\xf8\xf3V\x97\x83L\xe9\xa5N\x9dgp)\xdd\x1c\xa0\xda^\n \xc84<S l\xc4\xe5\xb6\xa6m\xef\x97m\xe2\x81\x8d\x9fIN\xb38Z\xdaQ\x83\xad\x0c;7\x07F\x90\xe8ma[[\xd6\x17\x01T\xb6\x8a\xb4\xe3\xaa\x86Y\xe8\xcf\xd5\xf7z~A\x02\x9c\x9e\xd8\xa0g\xbf\x06\xa6\x90\x1f\xb9MP\x85:\x9f\x00\xf10\x0f\x80\xb0\xba\x00\xe2\xd1\x9cj.\x0el\x83\xee3]\x1b\xa9\x1d\xd5\xdczk\xe9\xfa\x9d\xa4\xa9\x90\xc8\xa5\x9e\xcbV=\x00\"-u\xe2\xf4\xa6\xa2.\xe4~\x0e\xbb\xfb\xd2\xba\xc5v\xdc}\x0b\x1d\x88\xbb'5wJ3?\xf4\x82\xe0\xba\xad\xba=\xe3\xb7\xc4~\x1e\xc1\x9aJ\xc2\xe2\x0f\x83\xae=4\xddjk\x98\xdd\xca}q(\xab&\x8d\x96\xd7\xfc3\x8fRGT\x84\x95/R\xea\xf8\xab\xca2\xcb\x8f\xce\x9a\x8c\x8al\x94\xad\xf8\xc2\xe3\xe2 u6\x1a\x96\xf9\xae\xf2\x0b\xa2n\xc5\x7fD\x84?\xd8S\xb0\xf1\xb4\x06\x0f\xd3\xb85\x0e\xd2C0\xd5g\xe0\x86<\xd1\x97\xce\x9eV\xdcB\x87]\x82\x86\xed\xfc\xee\x7fX\\\xc68v\x88\x97$\xcd\xd7\xd2m\xe0\x19\xda\x83\xbd\x01\x8f=\xb7\xc3\xff\xdd-\xc7\xaa\xdb{\xc0\xff\xe5\xb1\xea\xf6x\xac\xba\xfd\x1e\xff\x97\x7f\xbf\xcf\xbf\xdf\xe7\xb1\xed\xf6\xf9\xf7\xfb\xfb\xfc_\xde\xce>og\x9f\xb7\xf3\x80\xb7\xf3\xa0\xcf\xff\xe5\xed=\xe0\xed=\xe0\xed=\xe0\xed=\xe0\xed=\xe0\xed=\xe0\xed=x\xa4\x8d\x9d\xc7|j\xdb\xc0\xa2\x11\x8b*\xbeNQ\x1ep\x13\x8f\xe3#\x1e\xae\xb2J\x10\xe5J\xd1\x94\xa0\x17\xb0\x82xH\x06\xd1z`\x8b\xd9\xb5\xf71\x9eJ\x1e\x16#\x8f\x1dR!\x8fr\xa3M\x08\x9a3\xb4\xdc\xe4r|\xe6\xe2\x9c\xf3\xccPy\xa4\x9c\x8c\xf9\xe9\xc6\xf0\x142\xb3v\x80g\xb9\xeb\x14\x99\xa52\x8c\xa2\xe3Sj\xd2\xef\xf7w\xfb\xfd\xbe\xc3r\xf7\x8a;\x91\x13/\x9c\xf3K\x11R\x8e-\xbe\xf6\x02\x7f\n\x93hJ`E'c2\xab\xe4w\xd4\x04\x9e\xb0H\x9dp\x80\xb1~0B,\x8b\xe4\xd9\x01\xdb&\xb0=b\xe5\x0e<}\n\xfd\x1e\xca\x14\x7f\x84~o\xb0\x0b\x1d\x16\xffS\x97|\xcc\xb4'C\x9eSP\xcd\x9c\xbb\xe1\x8ek\xc22CT -\xa52`D\xec]\xb5\xc7\x03\x16;\xa3\x1b{W\\\x10\x8d\num\x1dnP\xcc\xf1\x18\x8e\x84\xf0\x14\xbc\xc7\x0edl]x\x08Z2\xf6:\x9d3\x07\xe3D\xdc\x87\x9eF\x8a\xb0\x8e\xa2,L\x0b\xe7\xac\x90\xcc\xbd\xd4_\x13U|\xe0\xc1\xf8\"x\xaa\x1ar\xf1\xc7\x8e\xe0\xe9\xd3\xa7#\xe8;\xdc\x9b\xb53B\xc3#zb2\x07\xd7\x90\xbdz\xac\xac\xd3\xef\xa7\x84\xdb\x948\x17 \xda\x9a6aQ\xb3n\x1b\x16\xb5\x9a6\xa2\x8eD\x97\xfa\xd0\xad\x00\xe2\x88o\xe7\x84r\x93\x1d\xea\xe6\xe1DM\x99/\xe2[\x10\xd6\x18\x97\xad \xac!\x15\x92(\xec\x84E\x0b%\xac\xf1g\x11\x07\x93dBW\xc5\x0b'\x8b(\xdeH2\xa9\xe5\x06\xf9b`\xd4z+\xf4\x96\xc4\xaaK\xec\xf9\xd9\xc3\xbf\xf0\xe7\x1b\x8d\xbd\xcd\xd0Y\x9b\x16\xfe\xf7\x05G\x1e\xf8\xe1\xe5\xdd\x8f\x9d\xb7\xfa\xc5G\x1f\x05\xd3\xbb\x1f\xfc\xef0\xf0\x99\xff\x91\xdc\xfd\xc8\xd3\xf4\xf7\x18z\x14\xa6\x93(\xf8\x12\xbb\x956MG/\x9a\xff\x82;\x96v\x95\xf8\xbf\x90/7 \xde\xfa\x17\x9c\x83\x9fz\x81?I6\x9aB\x9b\x19\xf8\xbf\x03\x16mLvZ\xc1\x1e\xc9\xfd\"&\xb3/\x0b\xf8d\xe9\x05\xc1F\xa3o3x\xd1\xea\x97\x06=}}\xb9\x19\xe2\xb7\x1a\xbeh\xf6\x8b\x8f?\xbb\xb8\xfb\xc1g\xbf\x07\xd5O\xb2\xd5\x17\x18\xf9\xea\x8eF\x1e\xda\xfb;\x8em-\xbdt\xb2\xb0\\\xe8\xd7\xd7\x96\xc62\xce\xebi\x15\x9dz\x88\x88GH\x02i\xddE\xa2/+\x1aP\xcf\x90\xe7_\x0b\xc7\xc4\x9c\xdaB2\x9b\xf7\xe1@\xd8\xd81\xcf\xa8!\x9a\xb7q}n\xe8\x8c\xc9\x99P\xd8\xc7\x95X\x1f\x10n\x9a\xd5\x9f\x03\x93\xeb\x14-\x17\x06\xb7\x00g\xecV\xdd.\xa0\x15D\xa3&\x88f%\x88\xc62D\xe3\x96\x10\x95\x04\x88\x18C\x95\xf9\x08T\xf6\x86\x832rX\xe8\xa5;\x03hB\xbc\xf8\xdf\xd0\xf3\xce\xa0\xb9\n\xfcT\x8b\x9c\x15\xcbI3\x98\xc4EFh\xf7wUc=\x10z\x8f\xeakv\xb9\x867eU\x8d\x885A\xe3\x14\xcb\xbb\xb8\x98X\x92\x89mYt\x8e\x1a\xa4is\x1d\x02\x92%\x9a\xd0\x01\xe8\x03\x01@\xd9\xd7f$\\\x8bx\x12\x9d\xdc\xceMM\x86\"\x7f\xbb\xe5\xcb\xa9\xd3\x8a\xa8x8:\xfdgkf\xc2\x9f\xb80\xc1p\xd3\x01\x0b\x8b_\xe7u\xbe`\xa1;\xfdy\x18\xc5\xe4\xc8\xc3`}\x96o\xc1\x90\x1ey\xd0\xa1e\xcb,H\xfd\xc0\x0f\xb1hY*\xcaB\x1f\xaf\xda\x0f\xc0\xcaJ\x05I\xeaO.\xaf\xe9\xfbk\xfe\xde<\x84i\xbd\xd3\xfb\xba\xbc\x9a\xb4\xb3\xdd\xc1\xa3\xddG\xfb\x0f\x06\x8f\xf6\xd0\x8e\xff\xe9\xd3\xa7u\x0d`4\xd9b\xbf\xa7\xdd\x04\x83\x9c\xbb\xb0\x80\x0eXs\x93\x85\x00\xaa\xfaX\xf0\xaa\xb8\xdc\x02\xbb\xcb\xbc\xe6\xed\xd0F\xfe`\x1fl\xfd\xf0C\xe2X.,t\xd7\xd0\xf9\x83\x0e\xec\xd7\x0c\x17y\xc0\xce-\xdb\x9e`(1\xd4*C\x07\x92q\xef,\xc7\xf0\xa70E\xad\xe1\x8aG3\xe1*\xa4\xa9+>p\x1c\x17\xb6\xd0h\xbf\xa4\xe0\xc2\xc4\x1f\xbd\xb3\xfc\xe2-v\xebY\x9f\xd2\x83S\x0f0\xd0\x00\x04\xf0\xa4\xaa\xe4\xde\x86\xc1c\x08:\x1dG^\x99B\xa3\x16\xa0\x15\xaf\x8d?FZ\xe5w\xe9\xb9q\xdc\xea\xe098\x9e\x141\x15\xf1\xf2\x9f9\x00\xad\xe8\x07\x0c\x12}\x87g\x89\x90\xc0\xc6b\xc5O\\X\xe5\xad\x8e`\xed8\x8f\x1d\xb8\xee\x06^\x92\xbe\xc4\xb6\xf1>\x83\xf7s\xef\x9e\\\xa4\xc6\xf4\x16\x0f\xdf\x8cSv%S\x84\xf5\xde\x9a\xb1\x06(\xc9\xc4,<\x9f>\x01_1\x96\x93G]>:\xe8bp\xb0\x86\x03X\xf1\xb2\x9e\x0bk\xfc\xa42\x02\xc5,\x99\xb9*X=A\x1a\x85\n\xb3\xe7H\x10\xb3[Q\xb6\xf2\x99\xa9\x92+8\x80\xf1\x19\x0c\x05\x0d\xcau\xb1\xaa\x14\xa8\xd7iK,\x82\x81\xe5\xba\x05Su+>@b\xaa\xc2\x82\xa9\x8a+LU\xa8c\xaa\xe2M\xd9\x80z\xe5|f\x87\xf6\xe0a_U3\xfb\xbchg0P\x8b\"^\xb4\xd7\x7fHIL^&\xc6\x80A\xf1\xf5\\\x1a.f\xda=?'\xc9\xabh\x9a\x05\x18G\x1e\x86\x9a\xa5\x98\x92\x99\x97\x05\xe9P\xbd\x9f\xff\xa7\xea/q\xd2\x8e\xfd.\xff\xca\x85\xa8\xf8i\xa46|L\xd5\xbe'\xd1r\x15\x85\x94\x80\xe8F\x06\x98{B\xf8.}\xe3]GYJ\x17\x8fw\xd8\xb4Y\x8a H\xa8\"_Ny\xb7_S}\x8eW\xe2\x82U@\xbcr\x0b\xc2\x03\xc7\xcb\xe1\xea\x9d*\x9aLl\xca\xf9=\xd4\xa1 \x16\xed\xf5th\xc2\x8a*\xc8\x95\xe5E;j\x91\x97\x17\xed\xabEI^\xf4@>\xda\xf0\xd5\xfe\x9e\x1e\x15'\xbf?*\xcej/\x18\xf3\x91\x91:\xc1\x9f\xd2\xde\x1c\x9b\x1dN\xe8\x88\xe3bA\xa6\x16\xd8\xa4{~\x8e\xce\xe7\xe7\xe7\xc8&\xf4\xdc\x02\x1f\x1d\x9b8\x0e?\xadX\xf5\xfcxTE\x0c\x1d\x98h[\x9e\xd4\x96\x0b)\x1fFTz;\xae\xce\xe5\x92\\\x0f\xc1\x8aI8%\xb1\xe6\xa6\x94\xe3]#3\xb0\x96\xf3c\xac\xe2he\x88?\x03\"UFwN\xd2#\xb1\x85\xcduYd\xf0dE&,!P\x14\xd74\x1c\xb3\xd0\x1fq\xdc\xa2.\xdd\x13\xc4\xb6\x8e\xa20\xf5\xfc\x90T\x1cn\xe4'buO\xa2\xab\xbaZ\x99h1\xa8\xab\xe5\xb1Z\x18\xb57\xb10\x9c\xa9\xb9\xf2\x84U~\x17\xad.\xbc\xb8\xa9\xf2\x8cU~\xe6%\x9c\xde5}\x10\xb0\x0f\xa2\x90r\xeb\x1f\xbc\xc0\x9fzi\x14?\xf3\xa6s\xd2\xf4)&t\xe8\x06\x917\xf5\xc3\xf9i\xea\xa5Y\xa2F\xb2\x97\x9f\x05z/S~\x89\xdd\x9f7\xb0\xf7\x94GZP\x04\xb1\xad%I\x12oN\x90+\xb24J\x01(6A\"P\x9d;T\xf2\xdcQ\xb6o\xf2\x94\xa4\xcf$\xf0\x92\xe4\xb5\xb7$C\xb0\x92+o>'\xf1v\xe6[\xda\xfa7.L\xe0\xc0\xd8\xcf\xc4\xc5$l\x0eO\xc6\xe6\x82\xc5\xe1c!_\xb4b|\xaa\xfe[\xcc\xed\xddv\x9c~8\x8b\x8c#\xbc\x93\x1e\xf8\xc0\xb7'\xf9\xee\xf8=\xba3t\xe2`\xf8\xb7\x99\xe7\x07d\xfa\xaf\x12\x94\x8b\xdd\xd6\xbd\xa5~\x1a\x10c\x0f\xd6\x0b\x04\"\xa4\x11\xd0a\xc1\xe1\xdb\x97\x80l\x88Oi{\xd7r\xcc\x83\xf08rKkq\x84\xae\x95_dE\xcc\xe4\x013A\x9b\x18>\xf1,\xbd\x8f\xdf\xfa\xd3t1\x04\xeb\xe1\xc3\xde\xeacM{\xacz<\xf7\xc3o\xc8,\x1d\x82\xe5ei]\xffE\xfd\x13\x7f\xbeh\xf9AJ>\xa6\x87\x81?\x0f\x87`M\xd0\xdf_\xbfDP9\xdf\xf3\xb7\xff\n\xb01&\xcb(%\x85\xc7n#NZ+\xcb\xe5\xa4v\x8a\x88\xb9\xb5B\xe5_\x92MD,\x8c\x06\xcc\x9cq\xac6\xf7\x11\x89\x1eL\x15\xb2\xa6\nA\xbes\xaa:\x0dE\xea8+\x85H\xba\xb1\x8b&sNIb\xa9\x89(m\x1bl\x8a\x8a\x90;\x15\x8f\xa5\x81\xd3\xd5\xe6Am\xd3\xa2d\xdc\xa7\xcf\xff\xd6\xdf\x91\xad\x96\xa9p\xf2\xc8\xb1\xadrGV\xb3\xf4g\xe6\xd4\xa5J\xbe\x92\x86\x14\xe06\x17o\x83\x87{\x1a\xc1J\x02\x93^\x1ely\x01\x12\xabb\x9f\xa8^\x8c\xb3\xcd0\x8ba\xf5U\xeb\xce\xc2\xabk\x8b\na\x94\\\xb3qWvmy$C\\\x1d\xa7;\xdb\x10b2\x10*\xed3\x89\x8c\x02U\xbd\x8d($\xbaas\x0e\xb6\xca\"=b\x0ey\x0f\xf7\xaa\xfew\xbd}\xa7;\x93\xfd\xe8\xdb\xb4\xd8r\x12\xaa\x01\xeb\xe7Mb\xf0\x88\xbb!>\xe2n\x86|V\x83G\x0ft\x9b\xf4\xf4zy\x11\x05m\x9an\xb2\xf34\xd8\xe1\xaa;\x98\xdby\x1a\xbc\xad\x0d\xce\xd6\x03\xb5q>\xfeG}\xa7\xfb\xf5\xf1\xf7\xe5\xb2 /S>\xe1\xa9\xe5\xd4\x1eXj\xb9G\xeaxXn\xb9=\xf55\xcf-\xa7\xbc\x9d\xe6HR~\xbf\xe6\xefU4\xbd\xe6#T=\xe4\xe6\xfc\xbd:F\x9eV\xae\x82\xed\xec\xb5\x1a\xfe\x92\xa5\x94\x1b\xe83\xcaU\xb0\xed#\x9b\xa8\x1a\xfb\xee\x94\x81E\x95\xd6\x8e\xf9\x08\xd5\xea\x87|U\xd5N\xdf\xb0\xf7j\xf5\x9f\xf0u\xc5\x0d\xf5\x12Fp\xa8\xe6\x90{ #x\xa3\xbe|\x85i\xe1\x94\x97\xefP\x1ed\x18].9\xc2\x92\xbf\x9c\xbey]~\xff\x16FpD\x8f\xf2\xa3n\x82\xaaW\x7fv]\xaeqB\x05G\xdb:_\xf8\xd3) U\x11\xfc5+M\xa3\xb7\xb1\xbf\xf4\x99\xadv\xb9\xc67\xe8\x00\xa6\xcd\xb9_\xae\xf8\x9c\x92{\xdbJp\xf4\xdb1\x99\xfbI\x1a_\xab\xcd\xfd\"\xd7\xaa\xa4\xb9|\xc1J\xa3\xd5\xb6\xa1\xc2{M\x12\xf3r\x8dg\xa6\xf8\x01\xef\xca\xf5~F\x88\xfe\x955V.\xfa\x1eF\xb0\xf53F\x0e\xffY\xca\x08\xa0\xfc\xdd\x9d\xf9\xe1\xf4h\xe1\x07\xd3\xf2\xd7\xdf\x02\x8f\xf18\xa9w\x8d\xe3G\xdf\x03\xd8\x1a\xc1\xa9\xfd\xd2\xfe\xfb\x0d7\x0f\xd33\x91\xed\xe2\xb1@\xd1\xf0K\xd9\xe4\xac^0\xe0\xda\xac\x07\xc6J7N\xd7\xd3\x16V\xd9\xf2\x1bG\xad{\xe3\xc8\xd1\x0f\x0c\x8c\x00H\xa4\xf8\xd2~\xaf\xbf\x9dE\xd7\xd5) HJ\xe0\xfd\x98\x9c\xb9t\x92\xbc=\x1e8,\xc5;\x8a\xf7\xf4\xe7Kl\xa6\x12 \xf9\x06\x86\xf0\xb2\xbcd\x1fj\xb5\x9e \xd9\xd0\xff\xc2|\x0dO\xedw\x05\"\x98\x0d\xd8 K\xa5\x9bV\"|\x96\xbb\xff\x1aF\xf0\x8c\x8e\x98o\x8b\x12\xd6v\xc5\x91]\x02b\x0dBi\x1aI+\x00h\xd5R)\n\xf3\xbb\xba\x19|\xd5\x82\xd5+5<\x12\x8b\xf4\x95\xfd\"_\xc0%\x8b\xf2\x0f#\xb8\xe2\x19\x8d\xe8;Z\xe2\xdb\xbf\xe0\x9d\xdb\x01\xc6c\xc8 \x10f\xe4\xa3\xfd\x9d\xb0\xbc\x93\xe3\x93\xb31a\xb7\xa6\xe2\xf7\x88\xe7\xa8\xc0E\x0bM\x1b\xa1hr\x08\x1f\xed\x1e&\xb6\xd0a6\x0c\x8b\x0e?}b\xd8w\xe2\xc2G\xbb\x8fyv)\x7fR\xf4K\x87\xffm\x0e\x0d\xfa\xed\xcb*_\x0bU`\xfe\xa1\xcd]\xe3R\xeb8\x91;\x93\x87\xcca\xfc\x9a'\x82#th>K}\xc2\xa21\x8a|\xdf\x11<\x05\xff\xb1\x03_\xd9)\x83R<\xf61n\x00\x19\x87\xba\x10\x96b\x05\xeb&\xf0\xe7\xd6\xdb\xe9\x9b\xd2](.|\xcaRY\x19{\xde\xc2\xda\x05\x02!j\xb0\xbc\xa3[>E\xa6\x94\x19\x04\xd8[6#\xd9\x85\x0b'\xff\xf3\x17\xf1[\x94p\xecY\xf8 ]\xbc\xf4\x0c\x0b\xd5k\xd9\xf2\x14\xff\xd2f\x8d\xfc\x19s\xdc\xbd\xd0\xe0\xb5\xa0S\xf9\x90\x08\x1f\xd2\x0b\x16bY\x8f\xa7\xc2n\xe6\xd2\xae\xb1_\x11\x80\n\xab\x8dW\xb6\xca\xa7O\xca\x8e\xe2x[\x8d$sS\x07\x8e\xbf5\xae\xb8\x1a\xee\xe2\x95}\xc1\x9c\xa0c\x1e\xc1 \xe2\x11\x0c\xba\xa5\xdc\x8fl\xf4\x94\xd9b) qe(e;\xc9\x7f%,T#\x0bDa\xc6\x9b\xb8n\xfc\xdfm<~N\xc2\xd8\xf8_a\xe0\xa1\x170\x04>\xa9\x88OJ\x84\xee(&\x95=v\xc4\x9a\xe0f\xcb\xc4\xacB\x8e\xc1\xef\xc5jElJ\xbf\x8cI\xcd>\x8c\xca\xb3*\xea=\xc3\xa5\xf5l\xfb]]\x14,\xc4P\xba\x9ddB_\x0d\x99n1\x96\xb4\x88\x0f\"\xe5(\xaeDN\x17W^+\x9d\xcfX\xaf\xe43\xd6\x93\xbc:\xdd\xca\x14\x89\x94\xd3\x01\xc9\x19\xa9\xac4\xca=\x04\x9b\xf4E)K\xc4\xffOr\xd3\x87\x98\xb4\xe8/.\x15Q`\x04_a\xc4\xa1\xbd]\x07\xff:\xc6\xff\xff\x8d\xbe\xdb\xe7\xaf\xfe\x8c\x15z\x0f\xd9_\xdf\xf1\xf4\x97[\xa1\xfd\xf0!\x02\xd5\xa3\xb3\xb7t\xe2\x82\xe5\xd2\x8f\x91\xbcL\xbb\xf5\x17\xcd|\xbc\x1f\xecEIuE\xc7\x9b\xd9\x19&B\xca0\x11R\xc6T:\xcfTh3\x84\x1dJ\\\x8bl\x17\x90o\xe6\xbfRaa\xe1%/9\xfa\xbb~r\x14\x85\x13/=]\xc5\xc4\x9b\xa2\x90#\xf8/\x17\xcd\xce]n\n\xe623_\x97\x87rt\xd1x\xc8\x95\xe4(W\xac\xcb;o\xee\xca\x99\xfd\xb9\x9d\x91\xe5Z\xf4\x18H\x19\x85\xf8k\xb1E\xd2\xf4\xb1\x03\x0b\xfb\xaf\xe34-'\xbd-HP\x8a\xd9J\x16\xdd$\x8dbB\xa95o\x85\xa4E3!mfm\x93t\x1c*\xedP\x08\x9e\x96`\xc7\xf7w5\xa0Q\x14\xb7d\x15}\xfb9=\xd3:#4^<\x80\xe7tO\x0d\xd9?\xa3j\xea]\x85\xfc^\x92\xeb\x17\xcd]\xa19\xe7\xd7h\xceY\x9b\xd3\xc1\x03\xc6\x01W(\x13\x94\xc3\xed\xf8!<\xd7\xdb\xd3\xd1\x9e\x9e#\x177\x92\xe3\xbb\xd72\xf1YBNI\x9a\x92\xb8AJ\xfb^\x17I\xb2\xd2\x92\xbf\\\x05M\xf6\x05\xdf\x97\xb3\xd7\x01\x94\xf5\xba\xaen\xa1\x0d:O\xa6\x9ao\x91\xca\xaej\xe2F\x99\xf0S\x1b\x93\x96\xfd\xc1>e\x9cN\xedb\xab\xfa\xd5\xafj\x8a}\x92\x0c\xe1\x0f\xe5\ns\x92\xbe\xb9\n\xc5\xf7\xcfI2\x89\xfdUJ\xd1\xe7/u\x15_{K\xda\xd8\xdf\xea\xea\xb0m\x90\x0c\xe1\xbb\x12\x1cQ\xc1R\x06\xa6\xbd\x85\x07l\x8d\x88/\x8e\xc1wjxL!\xa6\x8d\xc3,\x08\xce0\xfe\xcd[[p\x9d\xd6\xdfo\xf8\x9b*\xec\xbd\x8a\x11\x8f\xf2 [\\\x85b:.X\x7f9}\xf3Z\xe3@\xce\xf5EM\xfb\xae\xc4\xfap\x86-=\xe3Y\xe4\x1f\xebb7P\x81\x82sd\xc5a\xef\xebSx\xf3<\xaf\x9c\x1d\xea\x9f\xb9`\x9f\xdb\x95\x94?\x9c\xc1\xffZ6\xe6\x9e\xf3j6i\xc3\x8c\x8b\xbe\xb4\xba!\x16\x1a\x08\xf9\xcc\x8au\xa6\xe3\xd2~\x89c \x03\xc0\x91\x84\x8e\x9dN\xc3\x85\xb7\xdc`\xe9\xa8\xaaz(\xa1\x95\xa4B\x18\xbfFV<\xb4\x07\xfb\x8e\xacZp\xe1u\xa9\x1eK\xc2\xf2f\x86\xd9\xe4\xde\x15\x84\x1b\xff~\xe5\xa5\x0b\x17,\xfa\x0f\xb7S\x81\xc0\xe6J\xc3\x1c\x07\xb6z\xad4\xff\xd2\x0d\xd6\x9ec[K\x92z\xba\xd0\xbb\x1a\xe5m\xa4\xd7\x9a\x8b`\xa4\x8e\xaa\xf3\xf4\xaav\xebI\xa1\xe4\xf3\x93\xe3\x8f) \x13\x9f\xca&\x9f>\xd5\x13D!\xf8\xd4R\xd7 \xa5\x9a\xa8]o\xa5\x9eK\xec\\\xddH\xd6$L\xf9p\xa20\xb1\xa9\xc0\xaf\xec\xc7rW\xf5<\x0e\xe0Q\x9c\xa2\xf7\x91I\xdaC\xb5\x9c\xbe\x90>\xfe\x10\xac7\x16t\xa0\xd3\xf1\xaa\xbc\xa4x\xae\x86j\xb0Z\xf1\xe8\xb4wu\xb0\x0b\x94\x1cR\xd5\x91}}\xfc\xbd68\xf9\xeb\xe3\xe3\xe7C\xd8\xeaWKf^\x92~M\xae[\x9c=\xa0u\xe9\xd0\xa9\xbb\xb85$s$e\x86Fr\x99u\x8a\xde\x14o\xd1\xcd\xc2\x90C\x81e\x01\xc0\xe51J\xe3y\xbd\xa44\xa0\x17\x06{\xac\xbcz\xe1\xb9b\x1d\xd7\xd4\x9d\xa9\\\x93x\xf4\x8b)x\xfcq|\xd6\xad\xe6\xce\xd7\x84p\x9b\x93\xf4[\xe2]n\x02\xf9[\x01dK\x1f\xe3\xa5\xa8M\x8c\x11\xab\xe5\xe73\xc0q\xd5\x06\x1cQ\xf8\"&\xe4\x97\xc6d\x82P4>\xa1\xc7F\xd0\xa5\xc8\x8d\xe6\x146?\xa68\x98\xe8\xef\x19rD\xed\x0c\xab[\xd3\xe4\xca\xbd\x93\x08\x19\xa4'\xc6\xfb\xa6\xe4G\xe6\x89\n\x05]\xac\xcd\xd4\x16\xb2\xc0\xba\xe5\xb5\xc2\x83\xbc\xbaB9\xf7\x90\xb9\xfc2\x94\x02\x84\xf6\x1eug,\xa1J\xef1x\x05\xf30y\xec@\x92g.\xa7\xe7\x867\x9e\xa0\x96\x04\xe5{\xe4*2=O%\x19\x89l\x06\xd0\x87\xfb\x06\x08\xb1\x08\xef~\xc2RY\xc9\x07\x90If\xb5\xb0*\x92\x9c\xd8\xbe}\xa6\xab\xca\xed'_\xe2\xbd\xea \x1a\xb1\x1b:!oV\xcf]+b\\\xbfD\x06\xaf\xfcp\x1a]Q\x88\x16\xbf\ns\x17\x95m\x86\x83\x9aB\x9b\xb5@\x05\x80\xb1\xce+\xa0\x9d\xa8\x8f\x81v\xad1\x1b)|\x8bM\x9e\xe1\x88\xf3Di\x8d\x17 \xe6\xbc7\xb9\x94\xaa!!\xcd\xf9\xe3\xc5\x10\xb9kQ\xa3\xbd\x92\xcdS8\x97\xedn\xf4\x08\xe0\xc0\xdf\x1b-\"\xfa\xbd\x07\x8emy\xc9u8y\xb9\x91\xfd\x86\xf8\x94%GA\x1dL\xab\xef\xda\xd9}<\xba[\xbb\x8f\x9d^\xaf\xc6\x08+\xf9\x0c#\xac\xaa1\x90Y\x12.\xf73\xc4q\xf51\xa7U1\x9fV0\x94\xb6\xb2J\x95}\xbd5D\xd4F\x8c\xa1T\xd6G\x12\xba\x15S\xf9\xe7\xde=4\xa3+\x07v.\x14#\x84eCe\x11\xd9\x12\x92\x82\x97@.Ml\xa9\xe1\x18\xf44\xb0\x02\xa0!h\x17\x05e1+w\xe6\xb0\xc0\x0f\xe1\xef7\xd5\xbb_m\xca\x1b\xf3\xde\xb5\xf9\"R\xd1\xe8\x05o I\x82\xcb\x0d6\xba3\xbbb\x12\x00\xd28XF2\x188\x0e\x1d\xc0\xf8\x8c\xdf\xc5(Yf\x91l\xdf\x86:\x10}f\x8a*W\xc2\xc9\x88\x0c\x0d\xa3V[(\x95Y%\x96\x0f5\x95\x1ceF\x10\xc2\x90\xe5\xc0 \xdb\xf0\x17h]\xb0\xd5wL\xfa\xf6\xc9\x82L.\x87\xd2uB\xabM\xdb\x8aN\xecT\"\xe2}.\x9d\xd8\xfdlKD\xc3!\x14s\x1bUVg\xb3\x81\xdd\x8e\xdc\x08\xc5\x1bZ*\x15\x1d\xb6\xa20M\xf6l\xbb\x06\xdb\xd3==\x97\xb8S\xb1\xf2b2\xfbN_\xb5\xf2bl\xdc\x8e\xfa:\xe1\xd5u\xe9\x89\xe9{\xb5\xf9\x19\x7f\xaf\x0e'\xe0\xcd\xab8\xba\xc2Li%+\xe2r\x85\x85T\xe1\x857I\xa3X\xb1\x85\x9a\xb2\nA\x14\xea\x1bXW\xe3@\\7\xca\xf0mn\xc4\xe7Za\x19\x8d\x87b\x12\x9aD\xfc\xa5\xb7\x1aB\xd4]z+\xbdp?\x8b\xe2co\xb2\xa0u\xf8O}\xbdI\x94\x85):\x1e\xd3\x1f\xfa:i\x84\x04\x90\xd6\xe2?\xf5\xf5\xa20\xb8\x1e\x82&\xe7Y\xb5zn\x9c=\x04\xbf[\xe3\xd3\xf66\x8bI\xa9n\xe9E\xb5~ \x03\x86\xa0\x01\x8e\xbc\xc2C\x98V+\xf8 \xfau\xe5U\xbcn\xf9\x8df\x90q\xb4\xa2\xc7j2\x04\x8d\xf7\x1c\x1b\xd2Q\xe0%\xc9\x10f\xa6r\x8e\x93C\xd0\xac\x13\xab\xf1\xca\xff\xe8\x87C\xd0\xc0\xfe\xf9\x9bWC\xc8\xaa\xef\xd7$N\xfc(\x1c\xc2\xa4Zv~\x9e\xe05\xd6\x10\xd6e\xe4\xd4S\xc8V\xa99\xea\x89\x8e\xacQ3\xf4\x12\x7f~/\x94V\xe9y\xaa\nM\xe2\x02\xb0\x81\xb2\xf5T\x0e\x96\xa5\x13M\xaf\xa2C\xae\xb6~\x1bE\x81\x9a\x8e\x14g\xd1\x9dEY\\W\x8bR\xbd\xfb?\xdc\xef\xdc\x9f\xeb\\{gFA\xc8\xb6,\xe8@\xea\x94\x82\xbd\xff\xe1\xde}K>\x8f\xaa\x0d\x06\xdas\x0d/|i\x1df\x85\x86\x7fN\xa20e\xb9\xb9H\xfe&c7\x88\xb5=\xact\x0b\x05\xd2\xb2\xa4\xd8\x93f\xb3a\x19\xefV\x91\xdb\x99l\xe7c\xc3)\x1b\x88\x9c?]7\x8e\x85\x18\x87\x86\x93\xc4\xe9\xc4$a\xde\x1fb\xc6\x97\xe4\xfamLf\xfeGi\xce\x1c(a\x05(\xf1F@\x996\x03\x85\x0d\xa7\n\x96\x0cK\xf3\xb1U+x50Md\x98j\xa8 ;\xe8(l\x13\x05\xb6\xe5\x05(\xe97\xec \x95\xb1\xd7\x14\xe3b\x84o\xd4M\x17^z\x82\x88\x99\x08d\x17\x8e\x9c\xb05b\n0\xdbW\xa8'm\x87\xbe\x9f\xa0\x9a\x08\x89\xf1a8=a\xf8\xfc5\xb9\xa6\x1dd\xd0\x01{kB\xe7\xcf,yP\xb9C\xff\xc2\xe4\xf2\xf8\xeb\x00,\x0b\x860\xb3\xf1O\x87\x8a2\xf7Qg\x1b\xa2\xe1\x10S\x05M\x9cztYK\xe8\xe2V#g\xacy\xd4\x0c\xd5\x89V\xcc\x90\xdd\x0c\xa1hf\x87b\x08U\x83\x17\xbaV\xe8\x9a\x8b\xa4`j\x13\x8c\x8c\x81\x1d\x96+\xa3\xc6\x7f\xea\x82\xe7\xb8\xb0\xe8\xc6$ ^Bl\xaf~\x0e\xd7&,\xe34\x83\x0eVj@\xfc\n\xa4\x8b\xa3)\x11\x06;u\xf6@\xa5\xad\x81\xee[\xca\xee(\xbd\xacl\x10\xba(\xdetJa\xe0\x87\xf3w\x91\x1d\x88\x89\xdej \xf9F\x96z\x95\xf7\xb2\xf4\xfa\x0e\xc7\xbcp!Q\x04\x8c*\xfb\x96\xb3^u\xa7\x98xP3J\xf1\xa9dM\xa0\xb9x\x10D#(c\x92.\xc9:\xe2\xd1\nS\x17@\x90\xe3\x91z\xdfX\xa6\x0c\xc8O~\x91\x01\xeb\"p S\x01\x9b]q\xb1U\x10\xa6\xda\x0d\xc3|\x19\xa6\xd1\xb7~\xba\xf8Z\xac\xf6\xcb0%q\xe8\x05CX+\xc7,\xe3m\x1b\xf5&B\x87G+\\s\xd7\xc3\xbaA\xe4\xfcp=\xf3/\xf4\xe4M\x00 \x02\x00z\x92Z1\x10/\xf0\xf3\x8b\xf1j\xa1\xbd\xaf\xd31\xdb\xa1M%\xaf\x86y\x0b\xc3\xc1\xae\xd0\xa0Pl\xad (\x07\x12\xac\xaa\xdf\xad\xa2\x95)\xf3\xb5\xc0=\xdc\xbd<\x12|\x15^P\xa7p \xc9\x15~_1B\xaa\xd5\xbfi\x95T\xb2\xc2\x08\x0d\x0f?}\x82\xd8\xb6\x06{h\xcb%\xd16\xdbq5\xf3\xe4w\x1cOx8\x90(\nN\xfd_\x880>V`B\x0f\xb7z\xb3\xa9\x0c\x934\x97^yZAS\xa6o-\xf6\nH\x96\xc6\x86\xebQ\x01\xda\xd2\x98\xb9\xd1kXP/\xb4\xeb\xf8\xf4 2\xfa6\x9f/3:\xce\xff\x1c\xb1\x8cp\xa1\xa0b0\xa2g\xa7\xc6\x02\xb9\xca\xe7P\xce\xa2\xc4\x83\x0fU\x80\xd0\xa7\xc2\xcf\xb7\x84\xc1m\x90\x1cd\xd8m\x82\xe8\xa0Cv\x11\xa8P\x07\x0e\xd0\xe2<\xe8\xf0\xbeb\x92\x05zp\xa6\x8b\x98T\x00\xda\xe6\xc0\x80\xcf\x84V|'\xd0\x8a\x19\xb4tG\x8cx\xda\x03\xac\xe2\xa5\x01z\x98U\xe5\xc0*\xc8\x0c:o\xf8L\xa8\xf9w\x025?\x87\x1a\xe3&\xaa\xb6\x03\xb0)\xe0*\x86O\xd5\x16\x0c\xe7\xdag\xc4\x0fk>\xd7\xfa\x05\x1f\x15?f${\x1f^\xd7\n\xb3\xe5\x05\x89\xe57\x05Ty\x17\xa4\xfb\x87?\xf0\x91\xd1wE\xfe\xf4\x99\xcd8V\xcb\xca\x93\x87y\xd0\x81 \x9dp\x0f\xc5`\xc7\x05\x8d\xc5\n\x9dqM8\xd65\x8a\x9bR\x93CLd\x93\xe8\xa1R\x96\xd0\x89\xc6\x1f\x01d+\x8bkfOq\x0dO\xf2$<\x8f\xe1\xba\xd3q`\n\x9d\x11\xa4\xf6\x8a\x9e\xc9\xe3\xeb3\x17\xd68\x97\x95\x0b\xd7\x0e_\xbd\xea\x0808\xa6\x99C\x98\xb3,\xa5\x06rC\x87?o\"bK\x17\xdd\xc0\xe7\x9c\xbb\xab\xa1\\\xd8\x1c\xbb\xe8\xec\x920\x8d}\x92\xe8\x81!\x9e\x1c(\x17\x0c([\xf6\x12Fp\x8e\xa9\xe9m\xc7\xe9N\xa3\x90<.\x01f\xc9\x0c,%\xd8\\t:f\xe8\x88\x87B\xa9y$\xc6\x01\x98\x01$\x1e:\x89\xabb|\xe6\x91\x88\x07\x0d:lifWhZ\xbbF\x03fN.\xae\xc6\xbd3\x87\"\x9e\x98kO\xcc\xb4\x1e\xac\x06[B\x86+\xb8\x91K[\xac \x01>\x1a\x92\x91\xc9\xcfi\x11+\xba\x0eCb\xdb\xda\xe9[naG\xc2n\xdd\xce\xd8HN\xe1@\xec~\xb8\xf2\xd3\x05\\\x92\xeb\x04\xfenAG\xdcg\xd3\x176qx\x9a[\x17P\xd9d\xddX0\x84S\x17>\xb65?3J\"\xd3R\xc1\x0d\xa5\xb8\x96\xa5\xf2\x1a\xadn\x1b\xeb\x8f@\xad\x8d3\xf7\xe1\xbaw\x8f\xff\xca\x1d\x8b\xabg\xa5\xf5/\xff\x92\x07\n\xd1\x9f\xd3f9)\x97\xf2\x80\xc5\xcdEg\xc3\x18\xcd\x9b\xd3\xb1\xafZ\x80\x1b-\xb2\x89\xc6\xdc\xfa\x0e S\x1e+\xdb\x08me|=\x1a[#k\x08\xd6\xa8g\xc0`k\x88\xc5\x83j\xb8\xa7\x1b\xa3\xc6\xc0\xfa\x03\xc5\xc9\xcaE\xc0\xfd\xf1hxv\x7f\xde$\x9aK\x0d\x91qzV\xed\xb7^\xa6\x0c\xef\x06(=\x9c\xb6 (\xa3\x01-\x1en\x02\x14\x06\x0e\xdb\xea\xb2\xcd\x9c\x8e{\xe8\xe8Ma\xc5\xfe\xee\x9f\xa1\x8dD\x92]0.\xc0\x1e\xd0#Z~\xd1w\x1c \x9a\xf6\xa8\xf7i4p\xee\x1e\xa0\x05\xbe\xea\xf7\xce\xdd\xdc\x80\x0d\x9c\xba\x9bn_\xaf\x07\x18R\x12Y\xb1\xe4\xc7\xa2\x8b\x8b\x98\x95^\\h\x83~z\xd3iL\x92\x84\xd5a\xbf\xb5\xd5b\xc2{\x89\x89\xbe\xa38\xf5'\x01\xe1u\xf0\xb7\xb6Z\xe2Oy%\xfaK[%\x9b\xfa\x11\xabB\x7f\xe9\xaa\\`\xf1\x85\xb6\xc8KX\xfb\xf4\x87\xb6\xc2\xd4g\xe5S__\x1c\xf1b}\xcf\xfe\x9c\x15\xfbsmq\x10M.\x7f\xce\xa2\x94\x8f!\xffS[9\x9a^\xb3j\xd1\xb4\x12P\x05+\xb0\xa5\xd3/\xdcE\x96\xa6Q\xc8*\xe0O]\xa5\x89\x17\xae=\xb6\xb8\xec\xa7\xbe\xd2*\xf5yS\xfc\xb7\xb6\x9a\xcfgE\x7fh+D|i\xe9\x0f}\x85\x80\x97kc\xc6N\xa2`\x1eG\xd9J\xd4\xc1?t\x15\xa7^\xca\x90\x91\xfe0U\x08\xfc$\xcd+\xd1?\xb4\x15\xa7\xac\xcaT[H\xd8p\xa7D;\xdc)I=?Hx\x15\xfc\xad\xad6c\x90\x9d\xce\xb4P\x9d\xfa^\x101\x9cb?\xf5\x95\xd6\xbc\xc6Z[\xcc\xc7\xa9\x1f&\x87\x82v\xfed\x89\x85d\xa9/\xbc S^~A\xb4 \x9a\xf9$\x98\xa2\xe9`l[\xe2\x0f}\xc5\xb9\x8cf\xc5\x9f\x86\xcaYLD\xc5,\xd6\"\xd3,\x8a\xd0+\x93V\xc2\x9f\xfaJ\xf1\x92W\x89\xb5s\\\xf4\xb1x\xd1\xd7\x16\x0eX\xe1@[\xb8\xc3\nw\xb4\x85\xbb\xacpW[\xb8\xc7\n\xf7\xb4\x85\xfb\xacp_[\x88V\x1f\xb4\x98x\xda\xf5\xa0\xef9P\xd8Om\xa5b\x97-\x8c{l\xc1[\xd1\xb7\x90.\x19\xca\xd1\x1f\xba\n\x8c\xc4j \xac?\x8b1\\&-\xc7\x9f\xdaJK\xb6%\xfc\xa5v?\xf8\xe1*c8\x87\xbf\xf4U\x12^A\xbb+//\x18 //\xb4p\xbc$\xd7s\xc2P\x95\xfd\xd4U\n\xbc\x0bN!\xf0\x97\xb6\n\x99\x93\x90\xf5\xc4~j+1h\x05Zp\x05~x\xc9\x8b\xc3K]\x85\xa5\xe7\xb3\x81\xd2\x1f\xfa\n+^\xae]\xe8\xa5\x17_\xf2\xf2X\xdf\x01 3V\x81\x84\x99\xa9\x82\x9frR\"\xfe\xd0W\xe4t[\xe7w\xc8+p\xec\xc5_\xba*\xa1\xc7Ha\xe8iIa\x181\xbfaV\x87\xff\xa1\xab\xc8\x04F\xac\xc6\xc5Z]%\xb6\xbc\xfa\xe3*Z\xa5\xc5F\x12\x7f\x18*\n\xba\x17\x19i^\x94\xa5\x02\xa7\xd9O]%\xd6\x97\xb6\x93\x95\x17{l\x05\xf0\x97\xb6\x8a?I\x05]\xe5\xbf\xb5\xd5D\x15Sq4\xcf9F\xf1\x87\xae\xe2\xcfX\xe3g]Q\xcc&\x12kg\x123(\xc4Z\x08\xc4\xd9\x05\xe3\x99\xe8\x0f]\x056.\xed\x80\x12o\xc9\xfa\xa5?\xb4\x15\n\xd41#NB&\xf9r\xf2\xdf\xfaj\x81\xc0/\xf6S[i\xe9\x05\x0c\xc5X\nN]\x15L\xa3\xc4\xea\xe0Om\xa5\x95\xc7\x07\xb4\xf2\xf4\xa3I\xe3(d$\x95\xfd\xd4W\xba\xe6\x0c<\xfe\xd2V\xc9\x18\xeb\x9ddZ\xe6;\xc9\x96K/\xbe\xe6U\xf0\xb7\xbe\x1a_\x07\xfd~IY\x1c\x95\xd8\xb6R\xe6\xdb\xa2\xa9\x92\xf3\xce\xa9\x89yN\x19\xd9M\xb5$7%\x1f\xd3\\\xa4\x11\x7fh+R\xde\x82\xd5\xa2\xbf\xb4U\x16\xac\\\x9br=\xcd\x8f\xec\xd4tf\xa7>?\x0e\xe9\x0f}\x85T\xc0\x03#L\xeb\xaa0\xaa\x99jIf\x1a{\x93K^\xeeM\xb44\x9e\x11x-u\xcf\x18\x82fZ\xec\\{\xac\xe3\xb5\xa7\xedy\xedO \x13\xa7\xf0\x97\xae\xca\x15\x17r\xae\xf4R\xce\xc4\x8f\x85T\xc9~j+\x05\xfe\xea\xad\xc7\xd7A\xfc\xa1\xab8%3\xc1\xaf\xcf\xb4$\x82\x04\x81\xbf\xe2\x02$\xff\xad\xab\xc6v\x92\x9e5Yzs\xce\xdd,1\x93C\xb5J\xe0\x87\xac\x06\xfda\xaa\xe0\xc5_\xc5\xde\xd4G3f^\xb5x\xa5\xfbh\xe9%\xe2\x1cO\xb4k\xbc\x12\x10Z\x19\xa0\xb3\xf2\xd2\x94\xc4\xa1\xa8C\x7fk\xabE\xc1\xf5\x9c\x13@\xfe\xdbT-\x9f\xa9\xf8CW\x91\xce\xc9\x0bJ\xb3-\xbf\xd2~$\x88kl\"\xadi\xc4\x89L\x1a\xe9\x89\xfd\x9a\xd3\xc3\xb5v\x1d)Q\xc8\xa9\x83\xb6BNtSFuK5\x0c:\"v {\x07:\xa2:\xbbvn3\xdd7\xb9\x07\xfb\xc2\x9e\xecs\xc7\xd1\xdf\xdb\xd8\x01Yx\xe4\xd0\xfe\xe4`\x8cw\xa0\x03\xd6\xd8\x83s\x8f<\xf5\xf6\x97[\x8f\xebcYT\xdckx\xa8\xe7}5V\xb0\xf0\x8b1\xf9\x18\xd7\xda\xa2\x08[\x92\xcfQ\xe9\x03\xb7\x08\xd6\xab\xf5E/3Z\xe3\xc9\x13/\x8c\xc2\xebe\x94%O\x9fj\xb4\xb7\x81Q\xe5\xeb1s\xb9\xb5m\xe1/\xddN\x00\xd4eQ^ym\xe7\xf7\xba\x86zt\xbaX/\x9f\xb7\xa1\"\xbb\xe0\xc5\xaa\xfc\xae\xd7PQ0\xf2\xeb:F\x1e\xf2\xc08X\x91\xdf'\x9b*\xf2 ck\x11\xcf\xd8T\xd1\x0b\xaf\x870\xb5c\xd9\xf6\xef5^`\x9bA\xf9f\xd6\xa4\x82\x17\x8f\xb8\\*\xe2\x99\x14\xe6\xce.DM\xf7\x8b\xca\x15\xccVal\xe0\xc8\xf6\x1d\x0b\xdb\x12n\xdf\xf0\xa3\x05\x1d\x88\xa0\x03\xd6\x8f\x10\xcd\x8a\x94s\xac f\x05\x0b/\x01?\\S\xea\x93{\xcf@\x18\xa5\x98\xc0\x82\x8a\xdd\xfe\x94\x88\xa9vM\xe9C\xc5C\x11\x14\x13I\x8dCC\xb2W\xf1`D\x89\xf2\xa5yV\x1b\xb0B<\xb4\x0b4\xad\xacD\x17\xd0=e\xc8\xbc\xe4\xf3\xa4\xd3\xf71\x16\x99\x02\"\x0c \x8d\xef\x12\xf6.\xc9V\xab\xc0gi>$\xa8\xb9@>\xae\xc8$%S\xf0B\x06\x9d\xaeu\x9b\xebX\xf1\xe4w\xe0<\xd0\xc2\x04\x9e@\x96\x1b\x06L:\x9d\xb6\xa0\x99aj\xc9\x0c\x93\xe2r\xcc\xa2#\x1e\xd3\xb1O\xe8\xaf3\xcb\x05\xaf\x05\xe4\xe8\x02\xcddCJ\xf4T.\x8c.>c\xb2:sx\xf5\xb91\xdc\xe2\xea\xb7\"\x11\x1eb\xf9\xde\xfa\x82;qC$O7@l\xef\xcb#\xb6\xd7\x1a\xb1!\xf1\xc3y@\xe0\x84x\x93\x94s&\x9f\x87\xe5\x9f\xb3\xf0\xa6\xack\x02C\x7fWB\xbce\xd3\xc5/\x99\x19\xb7^c\xe6P\x14zK\x16)K?+\xf5\xf1\x1a\x8d\x9eM\x0f\xc3\xc1\xae\x14\n\x16\xe3\x0d\x97\xde\xe0h\x8a\xad\xdd\x8c}\xe2\x11vp\x95\xc6Z\xb5pc\x1b\xa2W\xab\xcf\x97Gv\xb1\x92\xf4s\xac\x91a\x8d\x7f\x1c\xba\x1b\xb8(\xbc\x92\xbb%\x91\xabu\xb0R\x1fD\x9bk;\x1d\x933Ge0\xe4\x05\x88\x8b\x05\xf0\x0d\xc0\x0e\xab\x94\x05I\xca\xebhJ\x1a9\x8a\xcf\x81\xa1\x89d0\xbe\xf2w%\x18\xff0\xceM\xcc\xb5\x11\xd0\xf2\xa9\xd6L\x93\xdaq`%+\xb3\xad\xd1\x08\x92:T\xbaC\x8e\x8c\xf5\xd98g\x89\xeb\xf2C\xc8\xea\xf7:\xf0 e\xdd\x85\x97H\xd1\x95\xecI+\xd2\x0f\xf5\x0cZ\x17\x19\xb4v\xac\x19|.{\x06\xff\x00\xd2\x15\x85\x1b\x1c\xd1\x1a\xe9@\x8aTW\x11\xd0jL\x0d?o\xeb\x16Q\xd1\xc4\xce`\x810\x1f\x83\x07O \xcd\x19tO\xf6\x866=tR+\xba\xf2\xe9\xd8\x93\x89j\xed\x04@\x12y\xfer\xfa\xe6u\x91?H\x9bYB~6\xdcih\xb2*\x1f~-\xb6Z\x14\xe2\x89\x99o\xcf\xba\xf3\xf2\x16\xe8B)\xda\xef\x8e2R\xe8i\x16\xad\xbb\xb4\xd2\xa4Y\x14\x13\xba\xa0T\x9b\xa9_~\x8c'C\x98\x0f<\xb2\xb7\xfa.\xe4\xab'\xe2\xf4\x96\xd6&\x87U\x17\x8eU\xb1\x14\x8f\x8f\x05\x99\\\xe6`L\\\xb8\xc8R\x88\xc9\x84\xf8k2\x85?&\xe0\xa5\xe0\x87S\xf2\x11\xfe\x98t-\x17\xce1\x99\x0bA\xe7m\x05l\xe6\xd5\xfd]\xb6`\xef1d\xa5\xe5\xc8\x9a\x97\x03\xa4\x1d\x94\x8e\xb3\x86%\x01(\xfb\xd5&\xe5\xd1R\x02\xed\xb4\xa2\x8e\xd0\x9a\xc6\xb6\xd9\x9f\x86\xadxw\xfb-Y\xb4\xb0&\x15\xcfg.\xe9\x7f=\xac\xc6\x8f\xac\xc7\x1f7\xe44Z p9\xb30\x9e\xb4\xc4\xd9Y\x9bf\x817\x1d`\xac\x84;\xe1C\x82\x1c\xd4\xf5\xdb\x01\x1a\xb7D\xbb\x0dswL \xf9\xe8M\xd2\xdf\x11\xeb\x93\xd6X?A\xacO6\xc5\xfa\xc9g`\xfd\xe4\xce\xb1^\xa0p\x86q\xed\x18\xff\xd4\xc4\xb5\xe4;%\xa0;\xa5\x15J\xd3\xda+\xdc)A\xcb\x9d\xb2\xb5\xda\x0cN\x97\x84\xcbdA=9\xfe!|\xe6M\xf3+\x0cZ\xa0\xf0l\x0c\x06,\xc6\x80\x05\xdcs\xe5\x87\x10/\xff\xd0\xd1E\xfb\x95\xec\xf7\x92:\xa5\xef[l\xd35\xf7s[\xd9\x89\x0bAu\xb7\x07\xedv;\x85\xdb4\x07\xdb\xf4\x1f\xb4\x8f+oo$\xafM\xa8\x06B\xd2\xe1\x8f\xd0Z\xe5\x891x\xf2\x02\xf8\xf4 \xfap\x1f\x0b\xf0\x07\x81!f\x00c^2\x84\xfeR\x03@\xe8\xfb^\x18\x02\x13,\xfc\xa4\xbb$I\xe2\xcd\x89\x14\xf8(I\xbd\xc9%\xbaW\xb5j|j\xc8\xff \xcaC\x9b\x11\xa5\xc8\x85\xcc\x85\x04)\xbc\xd6\xe5\x93>6=\x883\xa6\x89D\xa23\xc1\xa4V.\xb0X\xa5\x9e\xc3S.`b&dE\x8f\xbc \xf0\xc3y\x11j\x0dp\xe7xi\x14'0\xf5c2I\x83k\x91\xe4\x85n\x94(\xa6D\xe3\xe2\x1a\xd2\x05\x81\x1fWq\xb4\xda\xa6D'\xf9\x11V\xde\xe4\xd2\x9b\x93.\xbcO\x08\xfc\x987\xd8E\x865\xff\xd3v~\xa4\xfbl\xe2\x05\x01mb\xd9\x85\x13\xe2Ma\x19\xc5\x84r\xae\x8b4]\x0d\xef\xdf\x9f]t\x97\xe4~\x96\x90m\xfcz\xbb\xe8\xc7\xb8I$<\xc48\xd0\xe3\xe8\x0c\x0e\xd0\xd93\xf7W\x15\xef\x18\x91x\xb7 \x85\xacS\"\x9a~\x82\x86\x97\x94\xf1N &?g~\x8cZEY\x9eb|\xb7\x9f&\\\xd4\xf2\x13\xf8\x91vD\xe9(\x0c\xbf\\\x1f\xb9\xbf\xae\xe8\x88Nn\x08\xa9]\xc2\x91&Op\x90\xaf\xe6\xbb\x17~8\xb5\x19\x19\xda\xeak\xc0\x9b\x8b]~r\"F\xaa~\xd7\xabF\x981`\xfc\xba6\xa4\xa3\xe9@v!3a\xbd\xb8k1_\xe1\xf0\xb6\xe7\xb6\xe7p\xe2p\xd0\xee\xa8(\x1d\xa9K\xfay\xdbS\x95\xbeM\x05[\xcf\xd7\xa9\xba(\xaa\x17\x93\x1eb\xd7\xb6\x96\xf2%W>\x8b\x92\x9b{\xef\xe9\xe13\xf1\x12\x92;e\x0fk\xaa\xf0\x9b\xf7\xba*\x85\xbb\xb8\xbe\x16\x14\xd06\xa5 `\x0d S\x84\xe6f\x0c\x9e\xb7\xac\x19\xce.\x99[\xd1\xbas\x8b\xb6I\x97\xacI|m_7x@\x97=\xdeS\xb9\x89\xbaD\x0bk5Bc\xa3\xa8\xb0.9r\x86\xcc\x913\xe4\x8e\x9c\x93\xa6\xdb\x95\x8d\x1c;\xd5\xe7\xa6\xd1\x0f|+n\x953\x82\xce\xc1\x17)O[9\x98\xc7\x8a\x83y\x1b%\xc2c\xd8\xb2}LhPv\xec\xae\xfd\x12\x8a\xbb\x10\x9fyuK\x0b\xd97\x83f\x03gs\xdd\x98Zr\xbd\x18Z\xa8\xad\xb39*\xaf1\xf1\xc5\xb5\x9d\x8d\xfbg\xad&\x02mt;&\x8c\x16\xe1\xa5\x1b\xbf\xaf\xf6\x7f\xd3\x8a\xcc\xcd\xeb\xbd^\xc5=\x8b\xf1|R\xf5\x85p\x00\xdc.\n9?I\xbd~B\xe6\xc7\x1fW\x85k\xba\x05-\xa3\x13\xf1\x9e\xa4\xfc7\x9c\xd3\x14I\xa1\x18\x95\x18[\xff\xf2/R*B\x0b7p\x835\x19\x91\x07\xc8^W\xe1\xc8\"q\xd1\x81\x8b\x11T2W\x1a\x80\xbb4\xc7\x14\x93\x12\xcb\xe1\\rjW\\i1\xb7\xe8*\xe4\xc5\xda\xcc\xb5\xfa\xebJ\\\x82\xfa\xa8O2\x00\x9e{\xa9\x94\xb1g\xea\xa5\xc4\x90\xb4\xa7\xf2%[\xdb\xe2\xdb\x98\xcc\xc9\xc7\x95\xc6\xeb\xd9\x84F\xed\xe0y^\x8f\xac\xfaT\xd1\xe2\xc4n8\xaa\x19\xd2\xd6\x1d\xc3\x8d\xc7\x9e\x98\xbd\x17\"gS{\x86\xd6\x1f\xc5\xac\x0e\xae@]\x05\x0e\xe6\x16#\xaa\x1bP[\x1a\xd3\x14\x89\xae\xfc\x17\xffH\x8a\x88 #v\xc5&g/\x08\x14I\x05F\x94\x95\x0e\xba\xf2\x8b\xc0\x055\xe8\xe7\xad\xccb\xebb\x01\xe5W\xfaw\xd4\xbe\xd5\xdf\xeb\xeewy0\x84[\xb5\xb6.\xc2\xec\xef=tLa\xc5\xfdV\xf6\xcf>\x7fu\xf8\xfa{C\xbc\x87$\xf5R\x7f\xd2\xae\xee\xaa\x08\xb4\xde\xa26\x8f\xf2\xba\xc1\x07\x0b?\x98\x1em\xfa\xd5\x9c\xa4\xcf\x199\xa0;P\xf9\xe6\xfc\xd5\xf1\xc9W\xc7\xcf\xcd\x9f\xbe\x0c\xfd\xd4\xf7\x82\xd3\x14S=l\xf4\xe9\x914\xdcM>\x8dI\x88\xfe\xbd\xe2\x8b7\xaf\x8f\x8e\x8d \xe4[\xe8[?\x08^\xb1p\xaa-@\x92\x7f\xf6\xdc\x9f\xde\xe2+\xda\xd9 \xbb)\xd4\x80\xd4\x84G\x8b(\xa3\xe0\xe0m\xbc_MK\x10m;I\xf5\xbb6\xe3}\xeeOo\xf3\x19v\x17.[\xc3\xe7\xfd\xeb\xd3\xc3\x17\xc7\xe7\xb7\\\x13\xdd\xd7\x1b\x03Y\xd7\xc8\x06S\xcf\xb0\xaa\x94\xcf\xc1z\xf3\xe1\xf8\xe4\xe4\xe5\xf3\xe3\xf3g\x87\xa7\xc7\x1a\xe6\xa7\xda\xce\xc4Htp#\xc6\xfe\x9aLq7\xbd\x88\xa3e\xcd\x8el\xd3\xd7\xcc\xd8\xd7\xd4OV\x81\x87I\xceZ\xb2\xe4\x80\x84W\xfa\x0eT\xbd\xaex\x0c\xd7F\x82\xa6\xb6\xee\x8d\xb2\x9c\x9a\xd8\x9e\xf2\x93\xdf{\x84\xec\x9e;,\x85\x86\x0b;\x1d\x87k\xb4\xc7\xe1\xd9Fw\\\x1aR\xdaz\xdci\xb7\xf25f\x1b\xfc\xfb\x8d\xab+\xd3\x060\x85\x9a\xa1\xddzT\x86\x01}\xc6X*g\xc7\x06\xc3Q\xbe\xc5\x00G\xea\xbb\x11L\xed\xca[ly\xa8\xad\xbd\x11BJ\xa7\xf1\x06\xc3^Il\xaa\x00a\xfenS\xf8\xe5\xccC\xeb\x01l\xb5\xaf\n\xed\xf6\x10\x94\xf7\x91\x1f6\xb7*\x1e\xc1\xe85\x1b\xf5\x8b\x07\xc7\xa3\xda\x02\x86\xadm\x01A\xe8\xbd(\xbb\x88W\x9d\xed\xba\xa5Odo\xf9.\xfc \xadhy6\x9b\xef\xa3\x0c<\xbc\x10I\xc9r\x95\xfa\xe1\x1c\xd2\x88gi\x07\x0fb\x92\x90xM\xa6\x88)t\xa4.\xfc\xf8\xc7\xe4G\x17\xd2\x85\x97\xf2\x03;\xfc\xe1O)\\\x10\x88B\xbc\xa9\xb1\xf8\x8aZpI\xae\xbb\xf0\x9c5\xe5cn:/,,\xa6E\x8b\xf8\x86x\xd3\xc7\xb4\xce\x95\x1f\x04\x90\xa4\xf4\xff\x17\x04\xbc\xc9\x84$,94o\\\xb6\x17\xff\x93>t\xbe\xe9\x11z/\x04\x9a!\xee\xb5\xeeA\xf5\xd7&\xab\x03\x12\xcf=\xa9.4\x1c\xc0d\x1c\x9eqE}\xfbq@!^F\xb6\xee8D\xbd\x87\xe7\x82\xd5z}\xe9RR\xc8^GY,\x19\x0b\xe3\x0dY\xba\xf0B\x88\xc2 \xe9\xc2\xbb\x85\x9fP\xc8\xcf\x02\x7f\x92\xc2\xd2\xbb\xa6k3\xcd\x08m\xc9c\x87Z\xd7ba\x99\xd7\x91?\xb5Q\x8f\x8ct\x0bo\xad\xe3\x86\x80\x93\xf2S\x7f\x01,?\xbc\x13}\x1ch\xf5in\xd6\\\xe3\x86Q\x99Mh\x9a\x97\xa5\xd1\x85\x1fN\xcb&\xf7\x1b\xdcA\xeb\xd3\xfd\x80d$\x98\xa8\x88E(b%cbF\xacs\xcd'\xf7\xeeQd*\xb3p,tm \x8f0?\xc3\xcc\x9b\x10\x13BEk\x12\xc7\xfe\x94\xa3\xd4,\x8e\x96\x1c\xa9\xe8\xd7\x90\xac\xc8\xc4\x9f\xf9\x13\xb40\xef\xc2q\x98d\x0c\xc3RVkI\xd2E4\x85\x10\x93\xd1N#\xbc\x01\xa6-\x06\xde\x8a\x85\xf2\xc4\x91\xf0jhjH\x1c\x97\xdd\\\x94\xb7\x82\x08\xbb\xfb\xe9\x93\x96a\xbc\xcd\xcc\xbe\xc8V!\xedn\xe3\x90q3\xa7\xf00\x11\xa5\xc8`\x1cZ%\x0d\x7f\xaaL7K(\xd9/&\xc8\x160\x8a\x8bAQ2\xceg\x02/\x19\xe9v\xe1\xa7,I\xf9\xb71\x99g\x81\x17\x17\xb6\xf4.=w\x08\xda\x86n\xde\xff\xc6\xbd\xe9 \xea:\xcf\xd7T\xa8\xe1\x8c;\xde\xc7\xfb\xa4\xf3\xf3\x98\x0e\xf60K\xa3g~8}\xeb\xf9\xb1&\x863\xc8\xac\x83G\x8f\x96P\xddf\x19\xcb\x14\xdee\xdc?.)\xff\xedh\xa3\xd0\x8b\x07\xd7Xm\x8c\x19Vxx\x8d\xd5x*\xad\xb9ch8\xf6Z\x98\x8e\xadp\xda\x95\xfe\x9a/\x02\x03{\xc5\x12\x01\xcd\xaa_;0\x1b{gt\xd2\x93\x86\x96jbQ\xcb\x0f\x9d\xd3BG\x00\x9bF\nu\x86\xd3h\xbd\x82\x01\xc4W\xe8\xe6\xd6g\xa4\xa2+(y\xbb\x13\x0c-\xf5\x9b\x16E~\xd6<\xa4w2\xf6Zr\x8f\x80\xfb\x1b\x03\x9b\x9b\x99\x80k\x95\x00\xf2\xd7\xea\x0e|\x1f\xe6V\x04\x94D\xc3*\n\xfc\xc95\xfc1A\x94\xbe$\xf8\xf3jAB\xb6\x03\xe7\x14\xbd\x8b\xadI?Ab|\xcdV\xbff8\x07\x10\x8f=\xc6\x13\xd0\x1f\x14\x19`\xa8\x1b!\x8b*\xcc\xea\xae\xf3\xba\xed\xa0\xcfCT\xf3\xaf'\xcd\xf0d\x11\xadY*\x16\x8f\xf6\xe3\xe6\x1f\xd7~[\xc3+T\x8f\xf8V\x84~a<\xef\xcbbIds\x8b\xb2\x9a\xfc\x01\x9a\xf7\xc4\x05kI\xe29\x11\x89\x97^G\xcf\xb3U@\x0fd\xf25\xb9Nlg\x08G^H\x8f]\xac\x06a\x14n\xb3f\x12$\xe0\xc4\x01\x8d\xc8\xc2r\xa7\x95.\xf5\x90\xe1k\xec\xeb]\xcc-ZXo\xe9U\xc4\xe9w\xc2\x8e{\xca\xe9'\xde\x92P\x14\x1c\xe2\xd1\xdb\xead}LA\xb4\xc2\xa8\xb3\xf4L`Vr\xa2\xea\xc4\xcb\x12nNv\x15\xa9j[\xdb\xa1G\x9c\"L\xdb\x8e\xe088\xdfMw@i\x9c\xf4p\\\xd0\xb7\x97\xe4:\x11,0gL\x0d.\xaa\xc2\x86\xb0\x15ZL\x9bL\x11e\xf6\xd2x\xee\xa1OI\xd7[\xad\x82k\xccE\xe2\xe6\xde \x89\xc1\xd1\x91>(\xd4\x1a\xbe2\xdf\x8f\n\x9b\xb8\xc2\x11%n\xae\\\x18{\x84\xe6\xd3\x1bC\x1ek\xe2G\x83t\xebf\xfbl \xf0\x87>\xd9I\xbb\xfd\xb8\xfel\xc0\x1b\x01n\x04\xea-\x87z\xdd(*\x10f=\xa7\xbb%\x16`WzR[\xd1\xe77\x06\xfd5A#h@X\xb4\x9e\x9f\xfb ~\x84F~\x9a$\xeb\xa0'\xa9U\xa4]6\x0f\xb0\xa4\xaa\xbf\xf5\x18\xf5\x06/\xad\xc6xn\x1c#\x8fY\xce/\x90Z+\xb7p|L\x1f\x1fwI\xf8sF2r\"5\xc51lc\xe95\x9fpK8 c\x9c-\x15`\xb7\x87\xd5\x859\xd90HV\xa2\xf6\x85|\xab.\xf3\xf6p\xae!m\x05d\xeb\xc8%Q\xaeT\xe3\x1a{P(\xd0\xa4*,\x88|p\x94\xf9o\xecY<%/\xc2T\xdb\xaekP\xf5Cg\x04\x83\xa6\xf6A\xd1Y6\x8b\x05\xc0%\"2\x0e\xa1\x03\xfd\x16|*&\x84\x181\xca\xe4\xdf6\x10\xc2\x0d\xa2\xaf\xc8\xb3\xb7\xe2\xda\xedj\x96c\x91\xd07&3\x0cj\xe6\x96\xf6\x850R\x0f\x0b\x93\xf9T\xe4\x172ODh\xef\xf0\x13\x85U\x80\x03\xedk\xdbiT\xe8E\xb6\x865\xf3\xd0\xb0\xaelO\x86\xcc\xf4\x1f5]\x0caI%_\x8e\xfe\xb9\xbf:\xe5]h\xd7\x16=\\\xe4\xeb)*\x050~\x9fR\xc1\xc4\x97.\xee,G\x81\x88\xa7\xdf\xad\x0d\x12o\x8c\xca\xf2\x92\xb5KH\xae\xe0\xc2\x95_\x96\x82\x88`\x8ef\xb9P\x87\xe2<\xd5\xa0'\x12\xdf\xdb+\xd9\x02\x9c8\x8e\x0b+\x9b\xb80\x17?R\xf1c\x89'\xacz-\x82\xbe\x08\xdd\xa9rS\xa2V\xb3\x1d\xd4U\xc8\x83c\x17\xed.XR\nx\xbb\xdb\xedR\x86\xb9\xaa\xdab\xcb\xe3/W\xcc\x1c\x05<\xf8\x915\xf0#\xe7$\x91\x99N\x1cy\xfe\xd3E\xa64'\x13\x8fJ\xb4\xfc\x83A\x14\x92\xffJ\xcb~ \xca\xad\x8d`p5\x80e\xd1\n5\xa9\xd3Y\x80BM\xc1\x0c#\x12j\nD\x04BM\x91p\xd8\xd3\x14\x89(\x83\xba\"\x1eWPS\x84\x91\x04u\xefE\xc8@\x8d\xd62\x8fa\xa6\xf9N\x0er\xa5\xf9\x94\x85\x052N\xcc\xf0\x15\x8f\xc8a*a\xc1\x174\xa5\xdcU\\7\x05\xe6N\xab\x98\xc3jy\xbe\xb0j:\x19\xbb\x10\x96L'C9\x9f\xeag\x10\x0e\xee>\xc9n\x00\x8a[\x13\x17\xac\xf3s\x92\xbc\x8a\xa6Y@,WA?4\xaa\x1f\xca\xd2\xcc\x0d\x1eI\xfc\xf0\xa9\xa3\x1e|\x8aUt\xce\x85\x98dh`\xef\xdeE\xab\x0b/\x1eB$\xfa\xa9\xd42Y\xad\xde(\x84\xd2\xcd\x89\xfc\x8e\x86*\xda\x94\x90\xfa\xa8\xf9\x89\xbb\x05\x14\xe0\x00b\xd0\x8dMX\xd9V\x1c\xb6\xe0\x1f\xbe(\xd5\x03be\x87v\x7f\xf7\xa1\x9a\x03\xd4\x17E{=]^QVT\xc9\x1c\x9a\xe5E\x95l\xa4^^\xb4\xaf\x16%\xdcfU=\xa8&\xcc\x0fWy;\xa3+\x82-\xed\xef1\x9e\x88\xae\xdb\xae\xa3\xb6\x1a\xf0\xf3l\xdf\xd1\xa5*]\x19\xcfg\xd4'\xa6\xe5uN\xeb\xd7\xd9D\xcdoJ\xd0^\xd4r\x07\xd2\xb9a\xba\xff\xb2{.\xf8\x02\xd7\x1d.\xe9\xea\x9c\x7fho\x88\xb8=\x172\xf5\x03\x9br\x9f\xc8v\x9d\x9f#\x13\xd6s!.*\x11\xc7a^E\xb9 \x1d\xea\\B\xc5\xa5|7\n\xdf\xc7\xc1\xd1\xc2\x0b\xe7\xa4\x95+V!\xe6\xa5^<'i\x9dCN\xd4MH\xca\xc4\x00\xb3\x80\x97\xc5\x81JE\xc5\xa3\xf1\x8b\xbeq!\xea\x06\x917=]\x91I\xab\x01GL\x0e\xebR\xa6\xf7\x10\xeb\nA\xeb}\x1c\xa0\x87\xb9\xae\xc64\xba\ni7j\xba\xf3|\x0c\x08\xb7S\xcc\x8e\xd0j\x18z\xb8\xa1\xe7\x9ax\xb3\x88\x89\xc1.\xa6\x98\xb2Mp\xc0\x14\xae\xd87\x99\xd2Y\xe0\xcdrw\x15\x935 \x85t`\x1b\x06.f\xf6>\x0eZ\x0d\\\xea;b\x82W7\x8b\x83\x0d:\xc4\xb1z\xf1\xa4~\xff\x88G\xc0\x89\xa2u\xd0]yqB\xd8\xd7\x8e)\x834\x19[Y\x1cPq\xdb_z1\n\x91\xd6Y\x1ew\xd2\xac\x9c\xa5\\\xd8\x95\x1fN\xa3\xabn\x10\xf1k~\xdcW\x93\x08#\x1f\xdc\xbfoA\xa7Rc\x11%\xa9\xe6\xf5\xcaK\x17\xe6\xeeXmJ\x98\xf8w\x0b?I\xa3\xf8\xba\xfa\x06/v\x98\xcc^-\x93un\\\xac\xb4,\x97\xc5\x1c<\xa0\x83e@KH\xec{\x81\xffK\x0e8]\x86\xde\x9b*\x1am\xb4>b\xd3\xccIz\x14\x853\x7f\x9e\xd8\x0eE\x8c\x84\xa2\xf4\xd8\xa0p\xc1I\x11I\xc7\xc4n\x86r\x899\xef^\xe7\x12Pj\x88v\xc5]\xb2\xf0B\xa7\x0d\xa5\x81<\xb5 \x99\xbe\x0c\xa7\xe4\xe3\xd0\x90\xc2\x1e8\x03$\xe1\xae1\xcb\xb1\x89FE\xe1\x0b?HI\xfc\xc5H+\x03\x7f\xe0]GYZ\xa6k\xacc\x9d\xfd [t\xae<\xd1\x0f\x02\xc9q\x8a\xb4\x90\xa1F\x14'\x14\xd8\xa6\xf8\x92\n@\xab\xfap\xdag\xe9\xa5\xd6\xf9\x88b\xae'\x9dbL;B\xdfF\xa5\xb7\xe3\xea\xa8\xf1\xbe\xcd2\x1a\x98kl\xc29g\xd5\xbc\"L\xd9\xd4\x8cYf\xa0\xb5\xc6\x992\x88T^\x10\xf4\xf3D\x9du\x8b \xd6a\\\xcau\x86f\xa5*\x11Z\xc5\xea\x8e7\x7f\xc4.q\x9a\x08\x02\xde\xa8\xd1\x1d\x1cr\xa2P\xb7\xe9\x0b\x15\xb0\x86\xe0\x9bU\x981k\x7fc\x1a\x03Hg0v1F\xc7`|e\x0bl\x10OkZ\x03z\x9ch(j\xbc\xb7o\x81D\xe2\x06\xec\x8ep\xe86g\x02\xe7\xd7\xa53\x816\x94\xf3\x1c\xe9\xb8\xd0\xf8vK\x10=C>\xe4\xf6@`Z\xce;\x9dy\xc3\x1eb\x80\xd1z\x07\xca\x0f\xbb\xfb.\x11\x13s\xe5\xb8h\x18!n\xae\x89\xf7!\xb6\xf5\xcc\x98pU<\x11\xab\xf8\x8d!i\x9fx\xd0\xc9\x8f\xae\x93\x1f\xce\xb9\x95b\x97\xffIwHVK\x1e\xbc\x9a\x9bqk\xe6\xf9\x01\x99\x1a\xda\xc4\xf3\xde\xebN\xa2\x00\x15\xf3V\x8c\xd9=!S\xdf\xff\xff<\xcf\xab\xb3\xac\x0b\xd0\x11\x80\xe1\xa7y\x9c+\x83\x0f\xa2x\x16\xb5\xf72<`\\=I\x9bb\x17f\xfa\x15TIW\xd3-+}\xa6\xccFh\"\x8eO\x9e\x9aYh\xadE:?\xdd\xfeP\x1f\xdc/5\xb6\x87\xe2\xe1\x1b'\xa50\xad'v.\xe7\xcek\xac\xa4(\x03\xb6j\x98\x03\xcb]\xd94\x054\x07e.S<\x9f\xdd6\xff\xb0\xf6\xb3E\xba\x0c^Dq\xfeQ\xd5uK<7.\x18\x87\x88\xf9\x95\xf2(f\\`\xf4\xf0\n\x86\xa2\xad\xf9;\xd6g\xd3\xdc\xfci1\xbe\xfa\xe9L\xfd\xc4\xbb\x08\xc8t\x08Y}\xc5(d<\xeb\x90\x116I\xd0\xad\xff\x8e\xaf~PO\xb0\xeb\x808uLL63{[\x08b+\xc9\xb0\xcdH\xc2\xd2\xac\xd6\x01RF\x10\xd1\xf4v\x16\x07\xdb\xfcS\xe3\x87)\xaa\x8dY\x9a\xad\x1az\xaa\x01({c\xfeFl\xa5\x02\x94Y\x1c\x98\xab\xb7Z\\\x9e#\xd1pi\xea4\xef7\xffV@\xe4\x19\xbek\xe1\x13\xf8\x93\xcbaem\xf5\x03u\xc1:\xfe\xb8\n\xa2\x984\x05;3\xa2\xc4\xd4_\xb7F\x88\x14\xb5\xd4\xfa\xcd_\xb7\xf17\xe9\xe3*\xf6V+\xf2\x85;a\x13\xd9\xbem_\x91 b\xe6\x8d\xb6\x9c\xd7\x0efA\xfc\xf9\"\x1d\x82\xb5\xd3\xab\xc1\x86+\x7f\x9a.\x9a*%\xf1d\x0831\x90\x1a6#\xa0\xfd\x9d^y\xf39\x89\xe1\xfdK\xc3\xack q\x89\x80'\xac)\xcb\xa9\xfb\x04\x13v\xb7]\x96\xd2^\x11\x8bS\xb7YN\xb3\x8b\xa5\x9f\x0eaaZ\xc1Uw\xe9\xad\xda3\x0b\x92\x04\x9et'A\x14\x8a\x898\xf4\xd3\xfa\xe3\x87q\x06f\x9an\x92\x7f\x1d\x1d\xa5W8\xf73\xc7\x95\x9a\xbe\x91\xa8R\xceCK\xdb_\xbe\xacb\x90Qojd\x18\x94\x02\x80`J~\xccxy\x7f\x15\xce\x1f_x \xd9\xdfu\xfd\x0f\xcf\xde\x9c\\\xf5\xbe\xfej\x1e\x1d\x1e\x1e\x1e\xbe>}\xbf8~??<<|\xb6K\xff&G\x87\xaf\xe8\xbf\xaf\x1e\x04\xfb\x7f\xa5?\xbe\x7f\xf1\xec\xd5\x87\xe3\xf7\xb4\xc2\xfb\xd9\xd5\xad\xfe\xeb\x05\xbf<\xbb\x1f\xf6\x9e\xcd\x16\x1f\x9f\xad~\xba>\xea}\xdc\xbd\x7f\xff\xfe\xfd\xce\xcf\xeb\xdd\xa3\xbf\xac\xfa\xcf{\x8f:\x9dY\xbast\xff\x97\xbd\xfb_\xf7\xf7\xef\xbf\xdfy\xf0\xe8\xfd\xec\xea\xf9l\xef\xe1\xfd\x9f\x1f<\xea\xbc\x8f\x07\xcf\x07'G\x97\x8f\xe8x\xfe\xfc\xdd\xc9\xe9\xbb\xe0\xd5\xe1\xf1\xf1\xe1U\xf8\xe8\xfe\xfd_v\x0e\xe7\xeb\xdd\xfb\xeb\xef_>\xbf\xaf>\xef_\x91\x9f\xfc\xfe\xe5\xe1\xe1\xe1\xf3\x87\xa7\xefO\x9e}\xf8\xf3\xfcY\xf0\xb7W/\x0e\xa3\xbf^=?|w\xf2\xf1\xe2\xbbg\x0ff\x9d\xf5\xdb\xaf\xc3\xe0\xbb\xc3\xbf\x85\xfb\x97\x83\xc9l\xe7\xf0\xd1/\xf7\xdf\xce\xde\x1c=|\xf9\xf2\xfb\xd0\xdf{\xb1\\\x1e>{\xf5\xf0\xc5\xab\xc5\xd5\xbb\xfe\x83\xc9\xa3E\xb8\xf0\xff\xf6M\xff\xe8j}\xfcM?]\xbe}\xde\xfb\xf9\xf4\xeb\x9f\xf7\xe7\xdei\xfa\xed\xfd\xcbW\xdfy\xe1\x87\xe5\xe1\x87\x93\xe7\xef\x83?\xf7\xdf\xac\xb3\xec\xdd\xcb\xd7\xd1\xfe\xe5\xa3\xde\xe9\xc7\xd9\xc3\x9f\x937\xe9\x8b\xfd\xf9\xeel\xd6\x8f\x92\xb7;o\xc2W\x93\x0f\x0f\xa6\xbb\xab_\xa6/\xdf\xa7Y?:\xdc\xfd\xd0{\xfe\xb7\xe8\xeb\xe5\xc7ep\xfc\xfd:}\xfe\xfe\xa7\x9fNw\xd2\xe5\xd7\xcb\x9f\x9fuV\xdf_?\\=\xef\x7fx;{\xf0\xd3\xdb\xe3\xde\xcb\xdd\xde\x9f\xff<\xf1\x9e]\x85\x19\xd9\x9f}\xf5\xcb\xfc\xfat/\xfd\xee\xe5\xfbG\xfbo?<\x88/\x9f\x7f\xfb\xe7\xd7\xdf|\xe8=\xffz\xf7\xc5e\xf4\xf5\xf2\xc5\xea\xf5^\xf4>\\\xfb\x0f\xbf\x8e\xc8\xe1\xe0\xfe_\xbeK\x96\xdf\xfd5\x8b.?\xf6\x12\xff\xa4\xff\xd5\xc3\xf4\x9b\xcb\xd7\xfb\xe4\xd9\xa3\xe4\x9b\xab\xbf\xac\xee__/'\xd7\xde\xdb\xfb\xef\xe2\xb7\x9d\x93\xb7\xcb\x8bW\xaf\xfc\x8f\x93\xbf|\x98\xbf;\xe9{\xef\xff\xf6h'\xfa\xea\xbbd\xfe\xdd_\x0f\xbd\xaf\xf6\x8f\xaf\xe8\xb2\x1c\x9e\xbe\xff\xf0\xe6\xe4\xeb\xbd\xa3\xef_\xbe\x1c}F\xd0\x19\xd2\xbd\xb8N\xc97Lj\xae\xd3.\n\xad\xe2\xc4N5\xf2\x18\xaai\xc6=\x8d\x84\xc34-\xaa\xe9\x1c'\x16;\xf0\xcf`\x87\xd0\x81\xd8\x81\xfb\xb0\x0b\xdb\xd2]\xe9\x8d\x0b\xa4\x9bF\xcf\xaeS\x82\xa6a\xf5\xd7f\xb9\xe9 \xb3\x10\xc4Q2\xcb\x17:*\xe6\xfc:\xee\xf3\\\x14!\xb9\x82\xa8\x92\xe4\xa7\xc6N\x03\xc7I\xa0C+\xb1q*f\xc3x{\xe6BF\xe99%\x06=\x97\x05q\x86\xa7\xd0\xc3\x0b\xe2m\xd8\x85!\xad\x120\xfb\xc5\x00\x9e\xc0\x8c\xfe\xd3\x19\xc1\xae\x83\x90\xf5\xc7iw\xb2\xf0\xe2\xa3hJ\x0eS;p\xce\xe0\xc9\x13\xe8?\x84O\x95\"\xe8@\x9f\x17\x0f\xf4\xc5\x03V\xbc\xaf/\xddq($\xc6I\xa7\x83\xe6\xfa\xf0\xf4)\xf4\xf7\xe1\x1e\x0c\xf6\xf6\xd4\xf7\x0f+\xaf\x07{{pO\x0d-5@)\x9bI\xcf\xe6\xc9\x18\x06K\xe7\xf2\xf4)\xecV;Q\x18\xb3~\xab^\xfa\xbdZ\x90\xed\x9a!\xf6\xf4)\x0cZ\x03\xc0\xd1\xa2\xb4WF\xe0Y\x1c-o\x87\xc2B\x97\xc5\x8d\x12\xe0\x8f\xb0\xc3\xc2=\x8e9>\xf782\xc36\xf8,\xc7\x83G\xff\xe9\x8c\xa0\xbf\xbf\xf3p\xc7\x81\x88\xb1\xe13\x8a\xe0\x99\x8b\xd1n\xb1\x04\x9e\x82\x07\x07\xe0\xc1\xb0x\xa7\xb2\xc0\x0c\xd2>\x1c0@\xa7c\xda\x0d\xdd?\xbc\xd1x\x8c\xc0\x19\x9c\xd1\xcd;&\x0c\xae\xf7`\x7f\x87\xbe\xb0F#\xcbq`\xc8\xb1\xc2\xcf\xd7\xcbf\xed\x0cp\x1d\x1e:\xd016\xdc\xef\x89\x96)b\xe4-\xf3\xae\x06RW\x15\xee=\xbf\x93\xfe)\xf2C\xdb\x92\xec\xb4$E\x91d\xc5\xc9 \xea\xf3\x7f)\x84\xa5\xf8\xab\x92\x9f\xdc{?L\x1f\xb2u<\x90\xff\x18\xb2\x90\x88lQ\xac\xc3gG\xcf\x8f_|\xf5\xe7\x97\x7f\xf9\xfa\x9bW\xaf\xdf\xbc\xfd\xeb\xc9\xe9\xbb\xf7\x1f\xbe\xfd\xee\xfb\xbfy\x17\x93)\x99\xcd\x17\xfeO\x97\xc12\x8cV?\xc7I\x9a\xad\xaf\xfe_\xea\xde\xb4\xc9\x91d9\x0c\xb4\xdd/k\xf6\xfe\xc2~q\xa4\x86\xdd\x99\x83\x04\n@\xdd\xa8F\xd7\xeb\xd7\xd3#55\xd3\xfdl\xaa\x1f\x9fH\x00S\xcaJ\x04\n9\x0dd\x82yTW\xcdT\xafQ\xd2R\xa2H]\xdc\x95(R\x07\x0f\x1d\xe4.IQ\xa4\xb4\x07wy\x99\xed\x9b\xf9#\xfa\x03\xfb\x17\xd6\xc2#\"32#\"\x13\xa8\xaay\xd4\xc2\xac\xbb\x00\xcf\xc88=\xdc=\xdc=\xdc\xafo\xbe\xec\xf5\x07\xbb{\xfb\x07\x87G\xc7\xed\x1d\x8b\xa7\xcbat\xa4\xc8g\xe9\xc1\x13HN\xa0\xdd\xf6\x1cqS+\xc3+b\xc18\x93Q\xd9s\xe8#O\xe7\xec\xe0\x9b\xa9z\x9e\x1d\xa4\xf4\x14\xc35\xc0O\xc0\x1e%c\x0e\xa4\x8b8z\x87\xc4\x13\xa3\xba\x15Q}\x99\xc3W\x178\x1bAO\xd0\x0b\x02\x1e\xac\xb2e\x1a\xac\x97\x98\xf0f\xaf\xaaE\xbb\xca\xef\xe7`\"\x95\xd7s\x9b.\xa6v-;\xfcN\"\xb0x\xad#\xbc\x03=\x0eq\xa3\xe4\xf1\xc8\x87\x8c0\xd3\xfeN\x8b%\xd7\xcc\xc3\xdcD\xf1s\xa4\xe0\xa1\x90\x85+.m\x90\xad@H\xff\xb4G\xb0\xeb \xc2\xd8)] Jr(\xf5\xec\x1f\x1c\xf6\xfb\x07G=\x8a\xd7\xf4 \xba\x8c#\xa6St\xdd\x1f\xf0'\x8c|\xb0\xe7\x03*\x9df\x02\xf3\xed\x88y\x18Q\xfc?\x92p>B\xc8\xa0\n9\x90\x00\x07\xbb\xf0\x08\xa2\xea\xad+>}\x99f+\xe4\xdf\x82\xb1\xd5\xb1d\x0c\xea!\x06\x1d\x0c(jY\xe7\xbaG\xbbZyC\x9eM\xd2\x8d\x897\xab\x0b\xbb\xa7\xa0\x02\x0b\xabM\xe7\xfa\x08>\x84\x80\xca\x02\x942\xa8\x12\x05\xdd\x17v\x9f\xce\xab\xe7\xe8K\xf80\x82\x04\xe7L}F\xd9r\xe7P\x85\xa3\x9f\x10\x9cb\xc3}\x18BO-\xb2\xe6E:\xf4\xb9\xa6\xea\x05K`\x04m\xa8\xe6T@\xc4B^\xbff\x14f\x01\x8f\xf8\x18:s6\x08X\xc0\xd3\xa7#\xe8\xcc\xa9\xe4\xd0\xa6;\x18\xe6t\xdb\x9d`\xf9\xc1\xfe\x01|\x88\xe1\xb2E\x03.\x88\xfa\xe6\xd0\x19\xc1\x91\xa3i\x91\"p\xa4\xb6\x14\x95[\x8a\xf3\x96\xb2\xbc\xa5l\xf3\x96(\x91`7 #\x07\xfb\xda\x87N\xf5\x06\xaa\xe1~3}5\xc2W\x8b\xcc3\x19\x9c\xc2+\xef\x15\x9da\xd8\x81\x1e\x15\xbc\x16\xf9\x9ck\xf44\xc8\xf0>\xf5\xd2Ew\x1d\xbd\xb3\x07\xec\xee[D;Z\xbe\xc8\xaa7\x17KU\xe3\xa8?,U\x15Q$\x94\xf6\x0ce\xe8\xef\xe2 \xad^\x93\xa9\xcdiBq\x9b\"6\x0b\x19\xcf\xd1\x9b\xd6\x1c\xe8\x91w\x9e\xa3\xb7o@o\xf4\xb00\xa07\xc5\xd1\xc1n\xce\xbc\xe5\xd1t\x06{\xb4\xc2\x12\xe8\xf0\xd0\xd1\xe3:\xc5\xe5\x98\x93\xd5H\xdf\x8d\x19/B\xa7\xaf\xa3y~\x85\x12\xd4\x13\xe8\xc1\xed-\xbf#\x8b\x8e\x1b,K\xc4\x13\x14\x8cq\xa7i0\x97\xce0v\xd4\xbbH\xd0-)H^y\xafl\x82>\xf2\xcc\x90\xca\xd0\xe3\x14lJ2\xf2\xc7\xbcJF\xbc\xe7tp\xb8\x0b\xb0\xae\xf92\x8ab\x1b\xbf.\xa3KZz\x87=\xf8\xe4\xd5\xc0q\x81P\\K\xa0\x8cM\x9d\xccq\xe0 \xf4\x91\xf3d\x9d\x0ee\xcb\x1f\x8e\x80\x96\xa7\x07\x82\x11\xee\x94%<\xa5\xfd9\x855\xec@\x02CXW\x10\x89n\x89\xa5CQ,\xa1E\x07\xac\xb6v\x9b\xd6\xb6\xc3j\xcb\xeb\x99\x8b1\xc9\x83(\xb5\x82Om\x82\xb5u\x18\xe6\xca\x8d\x05\xac\xb6\x11,q\xf8\xc8\xbd*E\x96\xe6\xf7F\xd0s\x9c\x13\x08hcG'(\x9f\xb5aQ\x88\xbd\x1e\xa5T\xed\x11\xcc(\xad\xdeAzA\x85\xa7:\x12\x94Qd\x0e\xe0\x96\xbe\xeb\xd3w\x83\x13\xf0\x19\xc5Q\xaa\xcf\x8a\xea\xb3\xbcz_W=\x7f\x15:0\x9b\xc2\xed\x08\xfa\x03\xba\xb1\xae*\x1c\xae\xe1P,+p\xca\xdb6\xf7\xea\x0c\xed\xdd\xc1Q\xe5\xc8[x\x85\x96\x1dk7i\xb2\xb8\x921\xd08\xdb\xc6\xdd\x9f<{\xfd\n\x1d2\xf9W\x9d\x87M\x9e\xe6fXI{S&yMW8\xccwS\xf2\n\xf9\x85\xdd@{[w\xa3\xf1\x9a\xf4\x0e\x92g\xed\xa8\x14\x0d]LPd\x87\xf6\xee\xae\xe2w\x1c\xf0GG{\x8e\xd6\xa57\xfa\xf1\xba\xf4n\xe3\xdd\xde\xa8KU\xd3(H\xf9\x185q\xbbh\xf9\x8a\xe3.\xf3\x11\xa7\xef9\x1b7\x0b\x924^g\xa5\x8eq\xa5j\x94\xcaxM\xd8\xfc\x9c\x12\x03\x161\xc1\xe0\xc3\x11\xdf\xd4(\x8a\x8bP3\xeclT\xf5\x83vN\xa0\x85>\xfaH\xf2\x92Rv\x00f\xee\x0fy\xbc\x0b\x9e\x94\xc0\x85\x16z\xce\n\xa7!\x96\x1f\xc19\xe1\xe34\x18\x85\xde\x83\xef\xb1\x84 u\xda\xf0\x88M\x15\xcb\\n\xa8g\x1e\x84\xderY7\xe4\xfa \xa1\x9f\x16\xfa\x13%]\xbe\xd4\xd2w\x83\xd3\x18l\xd84\x08\xf9L\x9c\xfb2su\xfa\xf1i\xa1\xda[\xf7X\x9ca\xa7:\xe7\xc5\xa9\xf3\xcd\xcd\x9aTN\x9e<\x80\x12\x0bV\xc5\xeeYf1\x8b\xe1\x11\xa4$\xf6.\x96E\xc0\x7f\xe5\xc2V\xd14{\xf2 \xbcb\xb7\x1a\xdb\xfa>\xbc\"\xb4\x8f\xf6\x1d\x17B\xfb\xf8\x00=\xa5\x8b\x0e\xd0\x96\x06\x1bu\xbb\xe07\xfd]\x1d\xc7 \xed\x03\xc7\xb6p\xb6\xd2(\xaez\xea\xb0\xeb\x80\xbb\xa6x\xe1\x94\x89u\x83\xe4\xa5\x98\xebM4\xc89\x85\xd2\x9eUyD\x15\xdc\x8a\xe3\x80\xa5t\xf8\xeew\xf3\xee\xe1\x9d[L\xb7U\x8d\xc9\x12\x97|k7\x9a\xde\x0dWt\xefAWtww_Y\xcb\x81\xd3\xe5w{\xbc$ .\xc3Mj\x92\xd7U\x9a\xca\xd8\x8e\xbbg\xd0\x86\xb8\xfb\xb1\x0b\x16\xabU1\"\xb2V\xd8\xe8\x0e\xa4I\xdb\x08\xa1\x9an\x9a\xeeU\xaf\x94\xf2\xa8\xef\xbd\xaa\x14\xc5p\xeb\xa0:\xbd,F\xfd~5v\xbc\xc7j\x19T\x8b'9J\xf1\xc9\xd3cj\x0b\xbd\x07C{p\xec\xd8F>-\\\xf1\xbe\xd2\xc4e \x068e\x9a,\x91\x88\xceQ\x0d}\xc8t\x9a?K\x8b\xfd<\x80\xce!e\xe9\xc9z\x19\xa4\xb6e9\x1a\xc7-\x1d\xeb!\xe3t\xaap\x9b\xf7\x8e\x0b\x87\xd0\x1aA\xc2\x82\xd5:<\xcf\x91\x9c\x1e\x91=\"\x8e\x93\xab\x89\xe8\x0b\x92%\x86\x1e\xabj\x85\x88R \xe6\x0cm/t\xces\x911We\xd3\xf3o\x9f\xd9F\x82\xee\x9cYC\xa2\xee\xfc\x84\x9e\x8b\xc0\xd7\xe4\x15\xcak^\xbbx&\xf5\xec\xbc\xd2\xb1\xdfnO\x1d\x17\xcf\xa1\xf4\xd0\x14\xdb\x0b\xa7\xebG\xa1\xef\xa5\xf6\xdc^\xa0\x02\x9a\xc2\\<\x89\xce\xf2>\xdc0\x0b\xcc\x15<\x85\x9b\x13\x07\x96\xec\x9e\xd3\xc2\xc5\xb3\xf3l|Cke\xe2\xc2xM't1^\x1b\xf4j\xd2MK\x18B\xb2\xc9\xe6\xd9\x90\xe4<\xe4\x81\x83\xd6w\\Cr(\x0elRO\xb1\xc3\x95\xbd\x19\x88\x8d\x7f\"\xb5\xda\xdf;vl\x8b\xd6n\xb9[\x88\xc65f\xb8\xc0\x8e\xa9`[Fp M7\x19E=\xf5\xda\xf9\xdc\xfe\x89A\xefv\x928\x1f\xda_xW^\xe2\xc7\xc1:\xbd\x9dy\xa9\xe7\xec\x04+u\xd4;\xe3\xcf'\xd7\x83^gr}\xf8b\xbasY-\x12\xb1:\xc7\x9f\x0f\xa7mg\xb8s\xb9RI\xdd\xd8\xeaZ.X;\xb2\xef\xb9\x19K\x12/\x0c\xd2\xe0K\xf2\x83x\xd9t\xf3@\xd8\x92\x98R5\x15\xd7~\xe8Y\xce\xd2y\xb4n\xb4\x12 k\x95\x85\xde>\x1d\xf7\xa6\x0e<\x85\x8e&'\x95\xed9\xdc\xd6\x84\x8a{\xaf\xbb\xa2\xd2\xb3\x1d9\x8e\xb0-1\x0bm\xdcMI\x922\x15\x8e\xe5]DY:\xbcXz\xe1[\x0b\x86\xe0a\xc4<\x19hB\x81M0\xa0\xc0\xe3\xdd=\xbd@\xb4\xbb\xbf\xeblc\x1e\xc6`\xf8\xdd4\xfa$zG\xe2\xe7^Bl\x0c\xd1\xda\xa6C\xa6t \x03\x96W\xe3\x9e\x1a$\xaa`\xbb!\xec\xe9\xc3:\xf4\x0f\xef\x1e\x98\x027Yy4[\xcaUE\xf7\x0e\xaa h\xf8\x04\xefU\xb98\x93\x05\xaad\x8f\x89\x02\x87U\x81\xc2\x03\xae\xfeS%\x81\x98N\xb8\x14\x93e\xc8\x05\xcarIf 8\x85\xa4+\xf2\x87\xe5\x05\xebg\x0d\xb3\x12V\xe6\x0d\x03k\xf2\xa4\x8e\xfal\x80\xaa\xc2<\x92\x93\x1b\x06<\xdfX\x1b,K-\x9a\xc9E}8\x05_\xa4\xfb\xa3\x9b\xa2\xf2\x82\xe0\xc1DS\x19\xaf\xc2\xeaa/\xc3B\x15;\x1aA\xc7\xa3\xdb\xae\xd3\xa3\xbb\xad)~\x80\x89\x9dm.!t\xfa\xdc7\x83\x07\xc1K\xb9\xa2\xb9l\xf2f\n\x90\xd89\x81v;\x84'\x10\x9f8\x10\xf0\x00\x83<\xbcv\xa8\xe6\xc6\x16s\xfa\xa0\x18\xcb9\xa5!~.Z\xed*\xc7\x11\x15\x8f\x83\x1c\xd7TdfX+\xe5\xb2\xdb\x10\x1d\xcd\x87\xac\x88\xdf\xde\xc6\xf0\xa4\xa5\x12 \xae\x86(qW\xf5\xda\x86\x94G$5\xe8m\xc4\xccUB\xd8\x95\xb4$\xef\x95.\x06h\xdbf]\xd4/`\xcc\x9d\x06NE\x07B\x18\xc2\x8c,IJ\x10R\x8ap\xd8\x8c\xa8\x02\xf5\xaa+\x99O\xfa\xb6\x13-D@1\x88\xbb\xe2\xdb\xee^\x95\xe8 \n\xaeO\x92\xb5\xbb\xaf\xcb\x92\x85\x8c\xe0\x8eC\xc8\x0bhu\x83\x04%zSx\x01:\xa5\x01c\xda\x11\xa3H:r+>\xcc]\xe5\x149>\xe5\x88hZF\xb3\xb2\xbe|\xc2\xcb\xc7v\xe8B_:\x9e\xd0w\x93e\xe0\x13\xbb&\x91\xb27N\xa76\xa5\xaaI\x193\xef\xbeR&-H\x93\xa8 0^\xefe!0)\xdfd\xdc\xd7\xe1\x14\x02J\x8dQK\xf9\xe8\x11\x84\xf0\x94\xd9\xf4R<\xd7\x88\xa6\xb6\xd8\x03\xdbv9f\xa4Z\x99_\xf3P\x98YOx\xfbt\x08<\xc5\x1eS\xda\x1e@\x1b\xbd6P\n\x0c\xf9\x03\x1c\xa0\x93\xbf\x84a\xfc\x02\x87\x91\x7f\xfar\xc8_\x0e\xa1\x83\xceXO\xa1\xe7\xb2/#\xad\xd9\xf0\x8aG\xbc`\xac#@\xd6\x11\xc3\x13\x08N\x1c\x88Xh\xb1t\x1c\xd3\x9e\xe8\xfd\x11\xa3;\xe3\xc6~u\xb76\xed\xe2A#.\x19\xe5\xb3\x94m\xb7\x94\x1dp\x1bIO3\n\x18ZJ\x0b\x15\xc4\x16M\x08\xb2`\x8d'\x93lv\xd4\xebu\xe8\xdf\xf9|>\xad\xb8\xa3\xc7\xa2Po\x97\x15\xea\xed\x1e\xcc'\x93lN\x06\xf8sN\x06\xf4\xe7\xa07\xc3\x9f\x83\x9eZ\x05\x9dd\x0b\x9b\xd9\xf5\xc7\xac\x99\x0bSs\xe8\xd85\xfe\xbc\xa1S\xe8\xc3e\x9f\x0e\xe5Jg\xe4\x00\x8b\xcf\xe6\xf3\xa9\xf3\xd5\xe0\xbd\xa52\xf0\xf2`/\xe6\xf3)\x02|sC o(\xcfk~\x9b\xe7Fw,\x16\x89A\x95Y\xb1\x999\xe9\x11\xf6g>=\x15i\xefm\xde\xe9A\xaf7\xe3\xb5\x8e\xb9G\xcd\x94\xd3\xcd[\x0bEL\xc7X\x87\xe5|XU\xff\xce\xa5^\x8e#\xd1\xd5S+\x0f\xed\xe6BX\xad\xbf\xd2\xef%\x8cx\xb6X\x1bGg\x9f\x8e\x8a\x91\xe2\xa0\xe7\xd0\x06\xdf\x05\xeb\xd2\xba\xeb\x9eH\xf9\xa9r\xe9\xb0+\xc2w\xdf\xc6\xd5s\x898\x10V\xa3\x01\x8am\xac;\xb1\xf0\xd1Z\xe3\xc7\xff\xe5\xe7~mj\xddkd\xf5\xccY\xc8JvdS.\x9c\x1f\xf13<\xe2;\x18\xb7\xc72\xdb=\x1a\xf7rC\x02U\x13\x9f\xd31\x8d\xa8F\xde\xd7Pr\x14\xff\xa2\xdc\xdf/\x1d\xb7\xdb\xc1\x14\xe9y\x00O :q\xd81\x87\n\x06\xe98\x98\xa2\xeb\x8dA\x92l:\xcf\xd4`\x83A\xcfU=s\xa3\x96g<\xb9\xf6{\x9d\xc9\xf5\xec`r=;\xeaL\xae\xe7\x07\x93\xeb9~\x99O\xb2^\x9f\x92\x82\xac\xd7?\x9cOw.kpf[zx\x1f\xe4\xb2S\x14\xdfR\xc7a\x96q\x81>\x11]\xdb\n2\xdd}\x12\x0f\x9dJ\x90\x03\xebG?g\x0d\xc1zV!\x14\xd6\x8f\xfe\x96\x1e\xfc\xb7\xf5\xe0\xbf\xa3\x07\xff\x8fz\xf0\xcf\xeb\xc1\xbfI\xc1\x9e\x02\xfe-=\xf8\xdf\xe8\xc1\xffV\x0f\xfewz\xf0\xbf\xd7\x83\xff\x1e\x05?W\xc0\xbfC\xc1\xbe\x02\xfe'\x14\\M\x91j\xfd\xe8\x0f)x\xa6\x80\x7f\x81\x82\xab D\xad\x1f\xfd}=\xf8\x17\xf5\xe0_\xd2\x83\xff\x17\n&\n\xf8\x7f\xd5\x83\x7fW\x0f\xfe==\xf8\x1fP\xf0K\x05\xfc\x0f\xf5\xe0\x7f\xa4\x07\xffc=\xf8\xf7)8P\xc0\xffA\x0f\xfe\x03=\xf8?\xea\xc1\xbfL\xc1\xaf\x14\xf0\x1fQp\xf5\n\xab\xf5\xa3\xff\x89\x82_+\xe0\xffY\x0f\xfe\xa7z\xf0?\xd3\x83\x7fE\x0f\xfeU=\xf8?Qp\xa4\x80\xff\xb3\x1e\xfc\xbf\xe9\xc1\xff\xbb\x1e\xfc\x7f\xe8\xc1\x7f\xac\x07\xff\x1a\x05\xff@\x01\xff\x0b=\xf8_\xea\xc1\xffJ\x0f\xfe\xbf(8S\xc0\xff\xb7\x1e\xfc'z\xf0\x9f\xea\xc1\xff\x9a\x82\xab d\xad\x1f\xfd\x19\x05\xdf(\xe0\xbf\xd0\x83\xff.\x05?S\xb7\xc3oS\xb8\xa7\xc2\x7f\x9d\xc2\xdf,\x14\xf8\x9fSx\xaa\xc2\x7f\x83\xc2\x93jH#\xebk=Y\xfeZO\x7f\xbf\xd6\x13\xda\xaf\x91\x88+\xe4\xed\xeb\xbf\xa3\x07\xff\xbc\x1e\x8c3\xa0\x10\xc3\xaf\x7fA\x0f\xfeE=\xf8\x1f\xe8\xc1Hh\x15\x8a\xfa\xf5\xdf\xd7\x83\x7fI\x0f\xfe\x87z0\x92 \x85,\x7f\xad\xa7\xd6_#eR\xa8\xf5\xd7\xbf\xac\x07#\x99P\xe8\xef\xd7\xffT\x0f\xfe\x15=\xf8W\xf5\xe0\x7f\xa1\x07# R\xf0\xed\xeb\x7f\xa6\x07\xffs=\xf8\xd7\xf4\xe0\x7f\xa9\x07\xe3\x9e\xfd\xab\n\xf8\xd7\xf5\xe0\xdf\xd4\x83\xff\x8d\x1e\x8c\x9b\xf3R\x01\xff\x86\x1e\xfc[z\xf0\xbf\xd5\x83\x91\xd9\xff5\x05\xfc\xdbz0\xca\x00\xca\xc6\xfc\xfaw\xf4`d\xb1\n\x07\xfb\xfaw\xf5\xe0\xdf\xd7\x83\xff@\x0f\xfeC=\x18\xd9\xb7\xc2\xd8\xbe\xfe==X\xcf4\xbf\xd6s\xc7\xaf\xffH\x0fFv\xf2\x93\n\x18\xd9\xc9\x17\n\x18\xd9\xc9_W\xc0\xff'\x05\xbfU\xc0\x7f\xac\x07#'\xf8D\x01\xff\x89\x1e\xfcgz\xf0_h\xc1\xdf\xfc-}i\xe42\xd5\x981\xd6\xd7\x7f\xaa\x07\xff\xb9\x16\xfc\xcd\xcf\xe9\xc1\x7f[\x0fF\xd2\xabH#\xdf\xfc\xbc\x1e\xfc\xf7\xf4\xe0_\xd4\x83\x91 (\"\xcd7\x7fW\x0f\xfe\x05=\xf8\x97\xf4`\xa4\xdf\x8a\x90\xf2\xcd?\xd2\x83\xff\x89\x1e\x8c\x84Z\x91/\xbe\xf9\xc7z\xf0/\xeb\xc1Hc?S\xc0\xbf\xa2\x07\xff\xaa\x1e\x8cT\xb3\x1a\x93\xc1\xfa\xe6\x9f\xeb\xc1\xbf\xa6\x07#\xa1>S\xc0\xffJ\x0f\xfeu=\xf87\xf5`\xa4\xc8\x8aT\xf0\xcd\xbf\xd6\x83\x7fC\x0f\xfe-=\x18)\xf2\x1b\x05\xfc\xef\xf4\xe0\xdf\xd6\x83\x91\xf4VC\xe4X\xdf\xfc{=\xf8w\xf4`$\xa6\x8aP\xf8\xcd\xef\xea\xc1\xbf\xaf\x07\xff\x81\x1e\xfc\x87z\xf0\x7f\xd2\x83\x91\xc6*\"\xe47\xbf\xa7\x07\xff\x07=\xf8?\xea\xc1\x7f\xa4\x07\xffg=\x18I\xef\x0f\x150\x92\xdew\n\x18I\xaf\"\xe3~\x83\xa4W\x11f\xbf\xf9c}i$\xbd?\xa3\x80\xffD\x0f\xfe3=\x18\x89\xe9\x97\n\xf8O\xf5\xe0?\xd7\x82\xbf\xc6\xd5y\xa92\x1e\x9c\xab@\xe1<\xdf\xb0\xe3\x9a\"\xb9|\x83\xc2R\xa4\xc2Q\xb0|\xac\x927\xe4\x1bI\xe1\xcab\xf2\x08a\x8ex\xdb\xab\xe9\xee\xa3Q\x945u\xdc(5\x84tL\xa6\xa5\x17\x9aT\x895J!\x83_\xc8\x81>\x1d\x89\xa2q\xcbx\xf1~\xa3\xeaKo\xde\x12zc\xbcK\x92\xf2\xe4\xdd\xdc\xf2\xc6\x9c\x92\xe4\x81\xa3}\x93\xdb]\xb2\xc2\xee\x82\x1aL\xa6x&\x9b)\x9euv\x12\xf4 \xeb\xf5:\x93\xeb\xc1|r\xbd\xebu&\xd7{\xbd\xc9\xf5\xfeEgr}\xd0\x9b\\\x1f\xd2/\x87\xf3i{\xe7\xae6j\xd1\xc9\xf0>\x9d\xf4:_N\xc7\xcf:?3\xbd\xc5\xff\xbf\x1a\xb8\xef\x11v;\xeeu\x8e\xa7\xf4+{\xc8\xbf \xf4v\xfc9\xfb\xd9\xeb\x1c\xc3t\xe7\x8e\xdd\x0f\x99g\xd8Vv\xae\xdc\x085\x99\\{\xfedr}\xd1\x9fL\xaeg\x87\x93\xc9\xf5\x9c\xfe\x87\nV:\xe1l\xc6q\xca\xd9\x9c\xe3\xa4\xb3Y\x9f\\_0\x85k\x8f+\\\x0f\xe60\x99\xa4\xf4\xf5\x8b\xc9\x84\xbe\xeb\xf5P/;\x9fO&\xe1d\x12c\xa1\xc1\x11\xfbs<\x99d\xfd\x83#Z\xa2\x7f\x84\xd6\x16Z\x11\xfb\xd3g\x7f\x06\xec\xcf.\xfb\xb3\xc7\xfe\xec\xb3?\x07\xec\xcf!\xfb\xc3\xea\xec\x1d\xb3?\x1ek\x81un\x9f\xfe\xd9\xed\xf5\xaaq\xae\x98y\xcd\x826\x0b\xecm0\x9d\xcd\xda\x96\xba\xe1P\x0b=8\xe4\xc3>\xbc\xd0[\xc9\xe8R\xd3I\x9d\xd3\x99\x9a\x1fL\x98\xb6{r\xad\xda\xba<\xad\xe9Mt\x0d-A\x95\x06\x8dU?\xeb\xfc\xcc\x84)\xdaQ\xd3\xceT\xed\x93\xeb\x191\xd9\xd7\xb60\xe4\xf9w2\xe4\xa1\x89l\xbcq\xbf\x96\x92E-\xcb\xed~\x9e\xcer\xb6\x96\x8a\xce\xeb\x8b.x\xd1-\xcd\x07\xb7&\xdb\xa9S\xb5>\xce\x8c\xd6\xc7\x85\xc1\xfa\xa8\xb5\xb5\xe2\x1d\xe8\x8d\x0c\x92\x0b\xbdA\xf2\xaad\x90\xd4\xd7G\x9f\xcd\xca\xaf\xdd\x14&\x96\xf1<\x8fs\x8f\xf3\xdf\xa6\xd3\x86\x96:\xfbt8\xbb].oW\xb71\xb9Mn\xd3\xdb+\xe28\xa7\xdc^9\x8e]\x98\xbb`}`\xa9\xf6NX+\x15}t\xfb\xc9'\xb7\x9f\xde~\xf6\xe2\xf6\xec\xf6\xcd\xedO\xbd\xa8T\x04mX\x9a*+\xfa\xb7\xdc\xa4\x7f\xe2\x8d\xa6\xe6-\x17\xf7\xfb\x87\xf6\xe9\xb0\x7f\xf6\xe6v\xf0\xea\xa3\xdb\xdd\xcf>\xba\xb5O[\xe3\xfe`w\xeaL&\xb37\x7f\xcd\xb1OG\x93\xc9\x05\x92\xf1\xf3\xa9#\xbf\x93\xa4\xb7\x83pv\xbb\x1b\xcfJ\xef\xa4\x8b\xfc\x9dg\x9d\x9fa\xef\x04.\\I\x03\xbb\x97\x8dJ0\xaf\x9b\xcd\x98\x97Y\xe48\xa8\xe6\xf4a\"\xc7a\xd5\x05\x98'@\xeb7:\xd0V;\xcc\x82l\x06_\x12vw\x9b\xe7\xc6\x9cy\xa9w\xae\xcf\x7f\xba\xf0\x92\xc5\x10o\xb6\xc5\xae\xf2p\xe5\xad\xf1\x99\x1d\xd1q\x07\x1a\x0f)\x91f\x0b+(=\xbd\xbb\\\xa6\\\xc6\x11rYU^\xe3\xf6o\xc55\x97\x0bf\x8a\xdb\x8b\xc7\xe1\x03\xed\x9d\xdd\xc4\xec\xc8\xa8\xb3%\x87\xdb\xd9\x92Y\xd6\xcc%\xf1b\x1b-\xc8\x04\x03\xb9\xe8\xa4_1\x13T\xd2U\xfd\xcaD\x18\x7f;f\x1e\xeb\xe3\xfe\xb4\xde\xb4N?\x89\x9c\x0b\x92\xf6\x81e\xed\x92\xc1\xdc\xab\x11\x13x\xca\xf0K\x82\xf2i\x19\xb8\xf0(\x12fe`\x82%\xbd\xf2\x1d\x8f-/u\x1c6\xca\xd2Z\x84\x970\xb5\x9d\xf1d\xfa\xd5\xfb\xdb\xe9\xce%\xd2\xf1\x0f\x1eYR\xb1r3\xb7\xf9}\x07\xa7\xfb\xe1)R\xf4\x89\xed\xdc\xe2\x06\xea\xb69`\xea`M\x1f\xf4\xbb\x1f\x9e2~\xf5\xc1\x9d\xe9z\xcbn\xa1\x0b\x1b%n\xc2\x03\x01o\x1e`\x18\x8d!x\x0e\x13\xfb\xb3\xd2\x8d\x9f\xcdQ'\xcf\xe5\xa6$\xbe\xccs\xb9\xed\x8c?\xefN\xdb\x1f\xect\xc95\xf1m\x8cR\x16\xe0m\xa8\xe2[\xf7\xe5\x8b\xf3\xef\x7f\xf6\xfa\xcdk\xbc\x87j\xe1\xa5\x15\x8b\xdf\xf6Kb\xdf9\xefw\x99\x03W\xd9\x15\x7f\xbb\x99hE\xcc\xd9%\x08\xb7M\xfa)\xed^gl\x9d\x9f\xfbQL:_$\xe7\xc9\xc2\x8b\xc9\xec\xfc\xdct\xa7\xe8\xae*\x05\x8dc\xff\xc6\n\x83\xe6C\xdbf\xb3&\x18\x03\xd2\x96\x85\x87\xac\xe3\xd1\xa3\xdc5\\\xa6I\xe3T\xef\xe6Y\x90\xa5\x0e\x0b\x1e\xc6c\xc6\x90;\xcf\xbe\xce\xfb\xd3:?_F3/Y\x9cSF\x7f\x9e\xc7\x94;?\xd7\x1c\xb9\x14\xbf\xf4\xf2\xf6\xdc\x16\xb5J\x93$\xa6\xa3<\x17\xc1\x1cl\xc5\x83\x0b\xa4\xb33Q\xa6\x0fJ\xde\xca<\xc4P\xbe\xdau\x99\xf4\x85\x7f-\xbf\xba\x82\xd7]N\xd9\x8dU\xe12\xfe\xa0s\xff\xe3\x9f\xce\xfc\xda\xc2i\xf9\n;\x8e0\x90\xc6\xfd\xa0\xe3\xac\xc1\xb1\xa61j\xf6\xb2X\xf9\xe6a\x16;\xa8]\xde\x89L\x18\xeb\xbb\x10\xb2\xdb\xc8\xe8\xc7')\xd7\x08\xf7\xfa&L8\xb8/uh\x12I\xc6\xd3\x07\x12B\xb42\x08\x0b\xd5\"\x89a\xebe\xe0\x93\xa6\x89\xdf\x08\xb9\xf4Bo\xccPH\xbb$-;\x14\xc1\xb6l\xba;\x8b\x04i\x1d\x8c\x1aE\xba\xebh\x8d\xa9\xda\x0bl\xc4k\x15.t:\xf9\x1c\xb9\xd0\xbb\x13\xbb\x15\x93\xf4\x974\xf8\x90\xc7\x13+T\xb6\xe3p:\xee7q\x9f\x87\x1cI\xee\x8b[\x1e\n\xa5t\xa5\x9b\xb1\x0f\xdf\x93Mw\xb2:\xad\x18q\xca\xae\xb9E\xc7\xa7\xd5n\xb7%\x0c\xe1at\xc6\xb4\xe1)^\xb3\x0f\xc7\x01\x9dm\x96\xe0~\x83}m\x1e\xed~\xe3hM\x18\x14\x8bT\xa5\x0e?P\x99n\x96\xdd\x95\xfb7\x12#3r\xb3\x1b\xa1\xa9\xb6;\xf2\xd5Q\x8clb\xb1\xac\xdb\x12\x80e\xcd\x96\x00\x17Q\xb4$^\xc8!\xa7\x94\x0d\xf0T\xae\x16\xb2\x9d\x94\xae \x93\xc8F\xf7\x90)\xb7_\x8c\xd2&\xc0\xb5\xb8$\x1b\xa8\xee\xbf\xdd.0\xd6\xf4-v\xa1f\x03\x16\xdd\xd0\xef\xbe\x101QO\xd3P\xd7\x80\x95\xbbe\x86\x1brv6\xcaoW\xf5\xef\xb7\xedv\x8f\xf6\x1c;\xb4\xf7v\x0f\x9c\xad\x8c\x90\xe63{_\x7f\x1f\xeaPw\x18\x0b\xed\xc3\x83\xc696,s^\x80q\xb3\xcc$\xd0zE\xe0!\xdd]F*\x0c\xb7\x02\xbci\xad\xbe/\xeaH\x04\xb5\xdc\xd5\xd4\x00\xfc\xaed\x84\xe1*\xc3\xda\xbe\xcb\x1f>\x8e\xc4\xf6\xc6\xe9\x14/lx\x86l\x17\nT\x85\xd0^\xfa\x94\xe0\xe4\xd3a\x14\xe0}\xe4Jp\n\xde8AQ\xdc\xa7\x82\xaa\xaf\x91\xc7\x01\xee\xa3Q<2\xdc\xa1P\xe2\xf8p\xbd\xeb\xd1\xde\xd6\xa8 \xc8l`\xa2\xf8\xfd\x928\xf4\xe8\x11\xa6*\x18\x0f\xa6\xec\xd6*\xfd\xde\x9b\xba\x0c\xd8\x9fR~\x96\xb7\xa5\x18\x8e\xa1z\x04J)Af<\xd4Ub<\xdcu\xd6\xfa\x87\xd5\xfbF\xe2:\xa1N\xe5\xd5W\xd5]\x83\xa69\x14wx<\xddd&H\x98\xf8]|e\xf8\x18\xba+`i3b=\xe5\xa3\x0d{\x0e\x96\xbc\xc1(M\x0b\x17f.\xac\xd9\xaep\xe1\xca@1\x91\xee\xca]\xbeAO\x8b\x99\x0b\x0b\x17\"\xb8\xe5w\x0c\xaf\xe8\xa6\xbc\xa9\x1fA\xcd\n\x8a\xb7\xee~\xfak\xbc\xad[]\x91\xeaA\x94Yy\xb6:\x8b\xdeC\xdel>L\x91\x8d\x85dZ\x96\xcb\xfd\x0f\xdea\xb91\xd1\xdf\xcd$\xc6\x07j\xeb\x9e\xa2\xa1>|P\xbf\xaf\xf7b\xea\xf7\xaaV4$\xd5\xbd\xc6 \x1f\x9b\x1e\xf04\xc4\x17D\xf4\xcbh\xae\xde\xd7\x04I8\n\x0d\xb5@.\x1dQF\xe7 &\xfa\x042\x16C\x9aO\xabW:\x13\x96\x11\xbd\xdd\x0e9\x06Q\xa8Z\xbd2\x0e\x10)z<\x13?\x85F1YH\xc9\xf7\x13\x8c\xcd\x8cX/\xc8\xee\x1e\xeb=\xd5\xf6zz\x83\xe8^\xbf\x8a\x12\xc8{\x95@H>\x17\x8e\xaa\x885\xe7\xf0*\".U\xb1\x00\xbdI\x84\xad\xeb\x99\x08\xa2WuOY\x94K\xc5\xdeM\xb5\xc4L.\xc18v\xb5\xc8\xd5\xfd5\xb0B>\xb9q\xe1\xd2\x85\x95\x0e\xfd)\x9a$\xdalT\x17\xf8\x84h\x9e\xbc\x83\x11\x9c\xc3),`\x08\x9e\xf6\xddk\x18\xc1E^BW\xc7\x19e\xf4\xb4\xa2wT\xacY\xc3)\xcc`\x08\xef\x1c\xfak\xa6\x16\x7fA\x8b\xd3Z\xaf\xe5\xe2\xd7\xa6\xe2\xcfD\xc5\xd7\xean~F\xf9\xb9\x8f\xd62u#\xe3&\xf5\xe5`Q\xad\xbe\xba\xd7\xcey\\\xe23\x0c\xd5\\\xb3\xbb\xf2\xf6Zgy\x85+T.\xae\x04;s\\8\xa7\x909S\xfc\x06\x9aU\x1bB\xc4\xa1\xefJ\x0f\xd4\xb1\xb5\xec\x10\x1ea\x90|=\x8dz\x0d#8Cer\x1e\xd9\xc8:?g\x89\x0eg\xe7\xe7\xa6\x0c\xd3_\xc0\x08^H\xaf\x91\xeakzj\x87\xf6\xbe/\xea\x0e\x83o)\x8e\xc3)\xa4,\x984*Vk2H\xbe\x84\x11|\x81Z\xd8\xa28\xd1\xcbD\xc6\xc9\xbe\xb4\xdf\xba\xf0R\xcc\xe3J=&n\"\x03\xb5pQm\xb5\xf6L]\xbe;3F\x95\xd3qc\xec\xb1\xfe\xd4\xb7{\xbc\xaf\xf5\x0b\xc9\xbe}\xbf\x90\xaa\x8c&;\x88`\x01o6\xb3\xd31\x99V'\x83~2\x89\xbey\xb3\x19\x06\xb5* \x94#2\xaf\x8eLq\xe0\x88\xca\xbe\x1a\x99v~\xab\x93\x1b\xde\xcf\xe2\xb3\x91D\xc4\x99i\xe8l\xc48\x7f\x9cbXs[f\xf3t\x8aM\x90\xa6&\x8c\x08m\x8acx\xac\x8fi\xac\xb8\x9ad\x06\xa9\x81\xbbE\x1d\xeb\xa5\x80\xbd^\x95\xdf\xfb*_\xa7\"\xc0@\xe5\xfe9\x8b\xfe\x1e\xd3\x15WytI\x1c\xf8\xc8K\x15G\xd5\x92$\x80a\xd7k%\x81O\xbd\xb5N\x0c\xc8\x9f\xbfB\xa5v\xb5\xc8\x8d\\\x849\xb6T\x8b\\\xcaE\xce\x88\"l\xacJ\xcfQ\x97^-r^*\x82\xca\xf4j\x91\x0bE\xee\xf9^6\x9f\xab\x1d~W\x996\xef\xa7\x02\xf2\xaeZ\xe8z\xe3@\x94g(\x17\x9c\xc25c\x0b\xaf\xe7\x1b\x07\xfe\x13\xb4:v\xe1\xda\x85\x17.<\xab\xa2~\xf2.\xc0\x08|Z\x1d\x96\xef%\x04\xde\x0d\x158p\x06\x98\xcayA[\xa3r\x9e\xd0\xdb[`\xcf_\xcf\xe7 I\x8b\xe7\xecw\xad\x00B?)\x06\x10\xbb\xc0 vy\xf4T\xf6K-\x8f\x1d\xbd\xd0w4\xb7|6\xf5\xb6\xf5\xc2\xa6\xc4=\xc0\xab\x1e\xec\x1bqtY\xbf\xb1\xb5\xa5\xda\x1a\xc2\xd7\x06\xf8Um\xef\"\xbb\x9d\xba\xd0\xd6i\x9d\xf1\xedE\xed\xdbi7\xf4V\x84\xe9/\xf1\x1b\x06jY\x91$\xf1.9\x98\xff0T\x7fc\xe8\xf4\xaa\xbeYfYR\x83\x88\xe6\xef\xcf\xf4\xef\x0bQ\xcd3\xbcvi~\xed\x0b\xe6.P\xcd\x1d&>\xb9Xf\xd3\xfa\x13\x0ch\x8d'\xbd\x96\xd0P\xa0\xb4\xfaE#\xf6 \xe9\xed\x19\xd74\x98\x9b{\x9b\xd7\xf5\x16\xe7\xc3 \xaf\xc1\xed\x08\xe6.<+\x0e\xa2\xe6\x86_b8\xc5\xd7\x88\x88\xaf\xd1T m\xe0Zy\xf0Y\xa1\xb1q\xe1\xa5az\xcf\xcd;\xba\x10\xe3\xcfD\xccJ:\xa83\x11M\xb6\xf4\xa2^v\xbc\xbb\x11\xdb\xe9\x16 3\xf5\x94\xed\xae.i\xdb\xca\x87<\xad\x0e\"\x8cA\xf5\xa5\x89\xb7\xaf v\x85\x15\x8e\xdbm2\x85\x11:\xf5\xa7\x95\xcbq\xce\xb7\xa11\xfbv\x86W;65\xa1@\xd3\xb0\x8cx\xb0\xd7\xd3i\xcc\xfa\xaa\x08\xf5@\xda\x03\x9ewO7\x89\xa8Q\x81G\x10\xa8\xf38gv[\xcd\x89\x123\xef\x19S\xa5.1m\x82M\x1c\xc9\xd2\xd4\xf2\x8d\xf4\xa8Hm\x00#X\x9e\xc0\xba\xc6\xe4\x81\xb9\xb9\xc7k\x83]\xa0e\xfb\xa8\xb1\xc0\xdc(C\xc9\xcbn\xe1lh\xe3\xa0m\xcc\xd03YG\x13i\x1b3\x96[\x88>\x96T\x0c3\x0d]\x14\xe6\x82V%Bg\"+\xea\xd8\x0f\x8dCO>+T4\xf4\xe9il\x0dO`i\x9c\x99K\xb4\xa7\x88\xf91\x98UV\xe8\xce\xb80L_\xe6\xe4\xfa$\x1fox\xae\xf0\xfc\xbb@,J\x11\x7f\x86\x90\xd9\xf4H\x8cP\x86^\x89\xc9\x8c,\x9b3\xce\xe1\x94\xf6p4b\xc7y\x8fW\xc2P\x13\xeb=7\x9b\x9cQE\xa3\xe7 \x171\xf1\xde*OT\x83\xf0\x0d2L\x94\xb2\xfd\xc2\xb7\x1d\xfdF\x16u\x14\x1f\x0dI\x88\xbf7\xa6\x89\xbf@!N\xaaU?\xf5\xefP\xba\x93\x8a\xa9\x03\xba\xa0\xfb\xe6\x1dm\xad\xdc\xc9\x80\xa7lS\xa0\x8c\xd3\xdb\x96\xd8\xf0r\xd8\xf5\x0b\xfa\xecBV{#D[\x16\xdb|'\x97}\xc7\xfc\xd0\xd9\xd4o\xc0\x12\x13\x99)\xe7?(\x82o\x99\x88P\xa6\x91\xfa\xeb\x0e{=}\x0c\xca\xbb\xfbN`\x10\xe1\xc8\x85\xe0\xce\xc7\xe2\xbd\x9e\xfe\xbe\xd0Qc\x97\xd4ZE\xcd\x11\x8b\xefnpHc\xaa\xc6\x08o`G.\x84\x1b\xdc\x0ehf\xb2\x1a\xbd\x816^=)\xc5\xa7\xcf5KR|\xfat\x1c@\x1bX\x8c\xfaqh\xf0>\xbf\xfbl\x9b\xf2\xae\xe8\x8c\x11\n\x0b]s\xe6\xf92y\x11f+\x96\xb0K\xd5R\xf0\xd7.I*\xf1[vfNT\xddEV\xca\x0c\xa4#\x15\xc2J#\xa9\xe5\xc6S\x18V\x0c\xfe.\xc46\xcb\x1b\x94\xd7\xa6\x0dO \xd5XD\xb8'\x1aMh5K\x0c\x0c!\xd0\xe3\xa4\xf7-#M}\x92\x83\x9e\xc8\xe9/c\x91\x9e\xe0f,\x0f\xbf\x86\x89a\x8cN\xf4\xe2D\xea\x15\x8d\x83v\x1b\x13\xc4o@\xc1\x9aB^7N\x84\x81\xb8\xdc\xfd\xa6\xe6\x9eAy\xdc?\xd4_B\xd4'\x0dQme<\x81X\xbf*\x82&\x06\x1b\x9a\xee.\xd7\xf6r\xa8\x8e\xc4\x85\"\xec\x84\xb2\x92\xe8D\x83\xa99\x02\xa3\x00\xca\x9e\xb7\xd0\x19$\xd3\x96ZWJ\xb5\x96(\xbci\xcb.P\x0e\xbe\xbd\x859\xfdoI\xff[\xab\xa5f\x98\xb3\xfc\x94\xb2\x8c\x1c}\x99\xae\x8d\xca0\xba\x9c\xa1r\xce-\xa3\x84\x87~)<\xbe}\xcb\xcf74\xbb\xeb\x8b\xf2\xb3m\xb1*\x90m\xdf\xb0.\"8BUS\x01\xb6\xd6^LB\x0e\xc0\xf7\xd7\xac S,I\x05\x0b\xd5P\x05\xf8Z\xaa\xd2a\xe2\xda\x8d\x0bW\x0e~\x9f1\x03\xf7\x8d\x9e/\xcd\xee\xbb\x8b6&'\"-\xac\xa0\x17\xe9\x89\x03\xb1\xc8\x8a\x12\xea{\x17\xdfy+\xeasS\xec\xe96\xa2\xce\xb6\xdc\xb4?\x0c\xb4#\xe0w\xbab\xae\xa3\xf8\xb6h\xd4\xdd\x15\x1a\xa6\xa4\x1d\xfd\xaa\xec\x16\xe9',\xc3d\x82\xc5\xf4d\xe3|\xfa>^F^\xba;\xe0\xb6w$\xe3\x95\x87\x07{\xfa\x87/\x85\x86E\xf7\xa4\x7f`|dj\xacP\xd9\xe8\x1f=_z\xab5\x99\x99K\x98\xda\xa4\xcfJ\x8db\xa6\xdc\xb1\x0e\x83*o\xea\xeb+\xe9\xeb+\xcfr\xf3G\x05^\xe8\xee\xd5\x07D\x01r\xfbGu58\xae(\x0f\xd0\x18R\x81 \x03H\x05,<(*`a\x0b\xa9\x80\xd1\xfeQ\x85q\x9bG\x05\xfcC\xe2\xbd\xcd\xfb\xd1\xea\xbb\xdbm\xc1\x88o\xc1 '\xf8\xf8\xb3\xd5\xca\xc6tW61\xf7\xc6\x1d\xd9\xec\xcf]#L\xa6fu\xe5F\xfb\xb8F\xf3Ul\xf1\xbeb\xf3\x03\xbe\xcf-6\xc3\xa5d_tr\x18\x1b#\xdd0\x9a\x9177k\x06S\xab\xc0tQx&U\xeba)\xca\xb1\x9e\xb4T\x8f\xc6\xb5\x80\xd2\x10vs\xb8\x98\xe0\x11\xaf\x1a-O>I4~\xba^\x1da\x14\x9f\xfa\xc4\xd3W\xb6+\\Q\x95\xfe\xb1\x98S\\\x8b\xb3\xfbG}'?Zn\xce\x15\xfa\x86\x03Z\x7f\xa3\x03\xdav\xb2eu\xe9P\xf7\x14\xcb \xe3U\x7fx\xa1=\x1eO\x0d\"YHE\xb2\"\x85\xbct\xc8\nq\xff\x97U1-\x9eF\x8e\xb9:\x98\xa4\x8fm\xeeU]\x19\xd2tm;\x19b\xa0<\xe5\xbfQ\xfd$\x99\xbbF\xa0W(\x11>\xc2\xdc\x92{{\xdb\x9cv\xa9\x06E\x8eD\x8e~\x0c0\xe0\xf2\xa1nu\xed\xa6\x99\xba\x9a=!\xf22uW\x1bR\x9b\xca\x92\xf7\xa2\xb1\xd2\x90\x07\x86\x84\xd0\x067\xd9\xbdA\xd5W\x92\xfbP\x0e\xaa'4\xeeC9\xa8\n]\x89^F\xe3N\x94\x8as\x06=t\xf9v\\\x81b0\x0e\xbb\x1axg\x8d\xd0\xa8\x02] 4\xab@g\x08\xad\xe6\xdf\xa3\x07#\x89 \xb2L'\x1a\xb1\x84\xee\xae+4[\xc7\xf8\xbf$\xe4\xd8}\x87\x1dJ\x82\xd2\xbb\xc8\xed\x8b\xd7\x02,\x12\x95\x8a|?\x8eVABD1J\xae\x93hyElV_V*\x8c\xc2FQ_\xc6\xceD\xa5\"\xb9\x90Q\x14\xf3\x9cB\x87\xda\xbcA\xf5\x87\xd2P\xe7c*.;\x96\xb6sM\xc69\xc4>8\x05\x9f\xa2\xba\x9a*\x93\xc7?\x10^\x12Z\xfb\x1e\xdaT\xe7\xb5\x96r\xcd\xca\xa9\xdc\xce\xe4V\xa0\xab\x07\xa7\xd3P\x85\xc6\x03AWE\xbe\xca\x86j\xea]\x0e\xca\xebo\xa8\xc2`\xfe\xafV\x91\xe3\x87\x81\x94\x80\x96MT\x92U_mGovw\x1d;\xb4\x0f\x1d\x17,\xb1&\xa6(5[\xdej\x94j\xe6S\xfc\xf0\x15\x9f\x91\xf4\xe1+\xe5\xcb\xf0@\x15\xf7\x8f\x0c\xa1\xd4\xb6\xb7D\xe4\x82\x87\xb8\xbf\xe7\xf2\xdb)B\xb5\x1e\xd6\x18E#\xaeeW\xb7>p\xa6\x91\x8e#\x9d\xba\x94\xa9Kx~\xb4\xd8\xce\x1cSX[\xd8\\\x8a\xa9\xb9B`\xba\x01\xa9\x0f_\xb57\xd0)\x0b(\xbb\xd4\xc5\xaf\xd2\xad\x86PhV\xcb3\xfewXe\x8bs\xd5\x04\xbf\xdc\xf0\n\xa1A\xc6\xc8\xf8\xe1\xd1c\x99A\x13\xdb\xc7\x95%\xcdW+\x85\x9e;\xd0\x05%\x90Z\x90L\xac\xec\xd4\x90\x07\x17\x89\xd8\x9bh \"\xb8\xc0s\xb8\x85\xe5\x03\xc92\xfd\xa3\x8dn\x83\x1bL[\xb8\xf0\xba@I,\x9d\xa7^|\x96\x86\x1a\xc0)\xa6\xc1mJ|k\xe8\xfe\xce\xf8\xf3\xeex2\x9d\xb6o'c\xfbthwN'\xb3\xb6}:\x9ct'\xb3\xb6s\xea\xdc\xdac\xeb\xf1\xd4\xb1\xe9\xb3\xd3\xd6d\xe0\x8c?\x9fL\xa6\xb7\x93I\xd7\xf9\xf0\xd4\x99\x0c\x9c\xc9\xf4\xd6>\x1d\xe1\x1b\xb7\x93\xf1d\xea\x14_o?p\x9cj^3:\xdc\x9d\xc9\xc4\x9eL\x9c\xd3\xea3\x81\xebGN\x83\x1b\x8a\xe9\xc8\x02\xc5\x0c\xed\x1d\xb0\x9b\xb8\x98N\xf6y4#\x98RV:\x98X\x16r\x14\x11\xfa,.O\x17s\xa2\x8cLGa^GLq\xab\x94C\xff\x83>f\xa2E\xe5y\xaa3A\xc9!%\x18D\x8f:\xd16\x8bH \x8a\xce\x89f\xbf\xf9\x1a\x99I\x06C\xec\xab_\x05\x90,y\"\xf8\x00W5\x84\"\xb4\xa2[\xf1\x14\x026 \n\x8c\x11x\xdf\xf3\x17\xfa\xb8\x07w\xa6\xb4{\xbb\xfa\x83\xc6\xdench\xc3\x1ab\x86\x1b\xb6\xc5\x8f\x92\xe2\x8eK\xdct\x00\xbc\xcf\x11\xad\xd4\")\x9d\xc8\xef:5}\xc35\xfc-mj\x8a\xedL\xd8\xd4\xf4,\xe8\xf0\xae~\x00\xb9X\xe0s\xcb\x07\xe5Q6)\x82\x009\xb9\x15j\xc9\xbcd\xa0\xdd\xf6\xe1 \xcck\xafg'6\x19\xfbS\xa3\xdf\xceR\x90g1\xf7\xd8\xbf5=k\xa1\xbf\x8d\xfa^\xca/s\x97\x1eh\xc5\x074\xac\xd1>\xb6F0\x87SX\xc2\x10Z-{\x0ef\x031g\xa1s\xfc\x9b\xd9k\x17\xe6\xdc\xbekKq\x13\xef\x8d\x87\x06$\xbc\xbb\x97\xc2\xae\xde'doW\xef\xbf\xa2\xca5\xd9\xa6\xc8c\xe8z\xc4\x9cD\x98G\x01\x06\xbcj\xde9w\x9e\xa7\xbc@\x9d\xc2Z,1)\x87\xa8\xaaz\x8c\xdeu\xca7\x91J\xee\xd3\xfd\xb8\x12\xb9\x0e\xee\xd3\xd9\xbd\xdd\xaa2T\xa8\x83\xf4\xa9\xb2\xf7vu\xc4\xe8S/]tW\xdeu\xd3\xb0\xcd\xc2\x98W\xb3\xf5TMA\xcb\xcb\xd5\xaa\x9d\x8aO\xde\x95\x88\x98\xc1+\x13I\xcb#\x93B4\xc9\x13\x9e'\xe8\x0d\xeeA\x1b\x12\x0c\xbc\xe62^\x1c\xd0\xf9\xdeu\\H\xee\x8f\xb6\xc2\x15V\xd1o\xe44V\xf6eb\xde(!\xb4\x01\x05\x9e>\x0c\xa1\xd3wN\xf06K\xd4\xe9\xc0\x10\xda\xed\x88%TW\x90\x85N\x13\xb1\xe9\x91\x0b\xbd\xca$Et\xa4\x9d\x86\xbb\xc7D\xdb\xdbm\xce\xc4_#\xec\x98d\x12\xf8 \xe8\xeb%\x12\xb1w\xe9\xd2\x12\xe8\xa0\x10N`\xd8\x18\xc2\xc1<\x82=\x9d\xa8\xd2\x87\x9d\xaa\"\x0b\xe3\xbbt\x0f\x8f\x0f\x0f\x8ew\xfb\xbb{G\x07\x83\xdd\xfe\xfe!\xd9\xed\x1dm;\x01\xb9\xaa\xfb\x94\xf9^1S\x01\x13\xe3\xa8\x04\x8b_;\x01{\xcc\xc2\xbeu\xe8\xfa\xf7\x1d\xf8\x10\x1d\xeeR\xb1SR:r\xfc7\x92!w\x9d\x0b%^3\xd7&\xe8\xb4\xc3\xaf\xbcW*-\xd8\xf9|\x92\xb4o'I\xfb\x83\xea)\x83Ex\x1ew\xda\xd3\xde\xf5\xb8\xd79\xf6:\xf3i\xfb\x83\x9d@\x15Vv>\xef]\x8c{}\xcdS\x9f=\x8d\xc6\xbd\xce\xa1\xe61\xe5\xe0k/N\xc8\xcb0\xddvI\xe8\x8e\x91\xa3\xbd #`\xbeqR\x95\x10\x05\xb6yc\xa1J\xd3p=\\\xe0\xbf\xd6\xc6\x91\xe6\xd7\xcfN\x8b\xef\xecJ\xb3^\xe8\x89\xd9\xc9\x9e\xdd\x10\xa2\x9b\xa1T\xea\xbd:J\x11\xe4\xae\xa5\x19e\x19\x8f\xda\x95&\xd9e\xb1r2j\x95\x00\x87,\xac6K\x14\xa3\xdd\xc4xN\xf3E\x118\x85\xb9\x9dv\x93e\xe0\x13{\x80j\xa7S\x18\xc0\x10\x8e\xe8\xa8=\xa9X\x84}\xba+r\xf7\x15uK\x03\xb7\xdb\xab\x8a\xd8\x99V \xe7\xa6\x8f\xbdf!\xc9\xcc\x01\x19\xf7a\xb2\x12\xe5W\x86iC)4\xaf\x86\xb2-\x8aGL\x8c\xa1VE\xf1\xfcc\xd3\x172.\xdaf\xf0\x04\"\xe6\xe8\xd4\xc7\xb8q\x81\xed\x8d\xb3)\xbbH\xe6\x9c\x98\xf5\xd1\xa6\xd8\xe7\xdb\xae\x84\x9eN\x18\x82\x0d\xa9\xea\x98L\x08T\x1b\xac\xa7\x86)\xe0\nd\xf2\nT\xef\x1f\x89\x83\x93\xf0\x8d\xd0\xd2\xdeV\xab$\xd5x\x18\x1b\x86\xb1\x8e\x08\xf7e\xae\xe0\x18\x96\xa2\xdfz\xb9\xbe+\xe4\xee\x9f\xe1\x98L\xb7\x8f\x99ne \xc1\xec8~*\x99/\xb9\xd3\x05\x0b\x97!\x9clx<\x18\x92|\x1a\xcd\xb2%\xb1\\\x85\xc1,32,E\x8es\\\xbcs\xbd\x8a\x82/\xc9\xec\xcc[\xad\x97\xe4\xe38Z\x9d\xf9\x0b\xb2\xf2`$=|\x1e\x13/%\x7f\xe3\xd3O^\\c1\x16J\x0d\xbf\xfe\x8d\xd5\xb2\xf2R\x10\xceI,\xfdN\xd4\x9a\xb9\xa1\x1bH\xd7Wk^\x9eh\xf0\xa9\xaf\xa4H \x90\xe7\x87\xf6\xde>=n*H\x85\x8f\x0ev\x9dM\xa3\xb1\xc8|\"\xed\x16\x13\xc9e9\x95\x1a\xcc\xc8\xdc\xcb\x96\xe9\xb0z\xab\xf4;\xea7\x81kj%\"\xf3Q\x8e\x04&\xaa\xcc\xbb'\x90L)\xf3^= \xb2\xa2\xe7d\xe5\x05\xcb-Z\xc8\x12\x12\x7f\x97\xb0\xd5\xe8\xfa\xd1j\xa3\xb6x\xbf\xceg^J:i\xb0\"\xd6\xe6-\xa2\xaf\xc5G^J\x9cn\x1a\xbd<{\xcd\xbc@m\x8d\x1dBs\xda\xc5\xcd\xb9y[\xbd\xcd+=\x9f/#/}\xe0\xaa\x830%\x97\x0f\xdea\x1eD{X#T\x88\x8fX\xe5<\xee\xb6t\x8c\xe9r\x94fQ1\xf8\x0f\xb5\xfd2\xba\xab\x07\xd0\xfaN\\\xe5\xfel#\xb0{.\xc4]\xe6`\x11\xcco\x1c\xadB\x03rC\x8b\x9a\x82H|\x02|>\x8f\xe2\x95g\x88\\EI\x827\xc6\xfc\x91\xe7\x16\xb4!\x98\xa2\x0b\x90\xf6\x12\x92\xc0K\xec]\x90|\x9c\x85\xbecGx\x82\xb2\xd1\x1ek\xfd |\x1bF\xefBxs\xb3&C\xa0\xf5\xa5\xd8\xbb\xba\xa9\xf1M\xc40\xa7J\xa9^u)\x0e\x85\x9e\xf0%\x17\x97\xb2\x9fB\x1f\x8a\x9c\x14\x94\xc9\xe7E\xc6\xfd)\x15\xde\xe4\x9f\x98\xc7\xca8{\xcaR\xe8\xe2\xc5\x81\xf0\xf9\xadY\n\xb4yw9\xfd\xd0\x17\xf1\xb0\x08\xbf\xc4\x17\x10\x8dg/\xf0\xf9\n\xba\xdel\x16\xd0\xc9\xf1\x96\xdfo(?\xc7\xf2AJV\x86\x02h\x14\xe9\x06\xa1\xbf\xccf\xe43\xe2\xcd^\x87\xcb\x1b}\xd1\xb5\\\xf4\x87q\x90\x12ZV/\xe8I\xd3\x9f9e\xdc\x99\x11\xb2^\xdePz\xb6\xfe\xeb\xe4\xc6\xc1#\xff\x07\x1f\xc4dnma\xa5\x94\xe5\x8a\x92ou7\x08g\xe4\xfa\xf5\xdc\xb6\xfe\x8aU\xc9\xcc >\xefM\x16\xa2H\xef\x7f\x1c\xb0\xe0\xb7\x91\xe4\x1a\xae\x176kb\xec\x82hc.f\xc3 \xaf\x8a\xdb6^\x1c{7*\x97\x01\xedy\x01U0\x85\xb7\xf9\xc8l\xed\xbe\xe2\xc1\x06\x14\xcc\xae\xba1\xca\x9fY\xe56\x8b\xfc\xc9E\xf5+*\xd8-\x1cX\x8c\xaf\xa6t%\xe8\xdf\xee\x8c\xacc\xe2{)\x99\xe1\x8d/\xf9Q\xccq\x0d\xd8\x05\xb6\xea\xe3w\x02\xbf\xf0\xf9\x1a\xef\xb9\xcfh\x81\x11\xa46-A\x85B\x83\xd0\x8f\x13\xcd\xb4N\xbe\x03\xb3\xcav\xe9\xd7\x8c\x06W\x90\xbe\xee\xebQ\x01\xaa\x11\x0c\x94y\xf4\x1d\x97\xc5,\xb0o\\\x8c\xb2\xb6\x82\x11\xf4O`\x05O`\xef\x04V\xed\xb6\x03\xb3\xb1U\xee\x12\xa5\x95+:\xb4K}\xb78\xd2\xcfTT6\x91i\x8e?\x0c\x19\xe0\x94\xa7\xb2 \x12v\xbdl\xde\xf5\xc2\x9b\xd7s\xd4\x92\xb1\xaf\xdd\x95\xb7.<5\x9a\xee\xe6\xb2\xf8\xf3:\x9f\x08\x18*ME!\x11M\xe1\xd7\x07lj\x9c\xdas\xfa\x94\xd2q\xd2%a\xb6\xc2\x10\x8c\x82c\xcb\xdf\x87|\xa9B\xca\x0e\x97\xc1\x97\x04\xbb\xe7\xd8\xec5g\xdc\xa3uX\xf3`IX\x8a\x8d\x08\x1d\x9b\xd0\xa5I\x17/_U\x12\xdbU\x19\xbf\x9e\x96\x89\xe1u\x13V\xfe\xd1#\xa6\xb6\x17\x00\xf4h)\xb8\x01{\x8e\x1cF\"C\x8aO\xc6{\xd7x\x04\xd9\x88\xa1\xb2K\xcb\xdf\x1aO\x8d\xb6\xe1\xa9x\xff\xa5\x86\xa7z\xf8|\x13\x86\x19m\xc90\xa3&\x86\x19\xd5\xb3\xf25c\xba\x9b\xf0\xd4\x85\\4\xe7\xa9\xfa\xb23l\x99#\xb4\xbe\xc8\x15\xd26\xfd\xb3\x9b\x9ag\x97(\x86]\xaf\x96\xfa\xc7\x94\x86]b|2\xfd\xf3s|\xbe\x8e\xc9<\xb8\xd6\x97\xb8\xc8kH\xd6\x9eo\xa8\xe6\x1d\x9b\xda0[\xe9\x9f_\xe7\x87d\x03\x03\xcfj\x188\x9a\x07\x1c\x96\xda\xfc\xc7\xc1\xc5\xb3&.\x8e\xd1Y1l\x8c\x15F\xa9wI'\xc7b\xfe\xb1\xf69\x9c\xc29\x15\xcb\x87\x16\xba\xb6;\x94A\xb8p\xc1\xf4\xf37c\xfa\xdc\xba^-\xc3\x043e\x9f\xd3B\xf8\x13o\x03^\x18\x04\x1c\x99)\xa0[\xe5\xdcD|i\xe99\xc5\x07J8\xf0\xef\xed-\\\xd2\xff\xbez\xef2\x08\x0f\\'\xff\xa0e\x18\x96\xc0e\x97\xc7\xe0\xcd\x85\xbf+\xee\x95;u+\x1cbIy\xc3R\x8dZe\xe4\x0c\xf43\x17;\x90\xe5\xa4\xa2\x953?>\xe4\x08U\xfd\xbe\xf8h\xf8\xd3\x8c\xb6>\xdb\xbau\xc1V\xb6n]L\x03/9u\x01%\x9c\xa2\ns\xab\xe7^\x9a\xc6C\xb81T\xee\xc2\x95\x1e\x1b)e?3\xb8XB\xc1\x8a4\xabb\xdfsY\xce6\x9a\x15\x17\xce\x0c\xebb\xdfsa\xb6j\x9f\x97R\nm nk\xd3\x12\x01\x9f\xfa\x17zq\xbbA\x9c~F\xc5ii\xcf\xd0\x9d\xb8\x14\x1b\xf0\x85Y:\xa5}{Q\xb9jh?ct\xa3\xf5b\xfcL\x12\xbcooa-?(Dn*\x8c\x1b\xa6\xab\xd4\x0e}\x8b\x11\x89\xfc\xab\xe8!\xff\xdd\xa58\x1b\\di\xed\xb2\x89\xcf\x15\x8f.YF\x05\xac\x0b\xa54\xda\xd9\xfc\x971\x05K\xf5\xf3\x85\xe8_-\xd3\xae~\xde\x8a\xb78F\x99)\xbd\xf8\xdc\x8c\xf3Q\x0br\xf8l\x9a\xb3,\x14\x9b\xbe\xa0#\xf8\x82>\x91\x80\xcb\xf13<\xf7\xe0\xdf\xf2\xa3\xb7\x14\xfe\x96\x0214f\x82sQ\xbf0\xb5\xa9^\xe4O\xb9\xb3#P;\xef\xca\xce\xe9\xf2\x0cV\x84A1\x00\xbbT\x86\xc1Mv\x19\xe9s\xc5\xe3f\xa6lt\xcd/\x94\xd1\xe3%\xa5\x14|\xa7 \x19\xf5\xa3\xd0\xf7R\n\x1fJt\xf5e\xc3\xb4\xd5\x91Fq\x98\xe4\x0d5\x11\xea\xb2\xb49\x04\xebYx\x93.\x82\xf0\x12|/\x84\x0b\x02\x0b\x12\x13\x83T@;\xedo\xca\x11\xaa\x0d%\xa6s+%r\x0f\xc8g6\xa0\x91|\xe6\xae\xcb\xf8\xbf\xe4\xae\xb1\x12h\xc63&\x94\x17\xf5\x1d]\xd4w\xecT\x96\xb0\x80kl\x85o\xe0\x14\xc6\xfa\xbe\x1b\xfb\xfd\xde\x85kZ\xd1u\xb5\xeb\xef\xb5v\x90\xa5\xd9\x17\x81\xca;\xeci\x19K\xd1\x08Z\xd2s\x05\x82n8vX\xb5:\x01\x1aJ\xfc\xa5\x17{\xb4\xc1!\xb44\xd7\x1b\x83pF\xc2t\x08\xd6$\xad\xdc\xae\xab\x9a\xcb\x00o1\xd4X\xa5h\x7f\xa2\xa2?\xcb&\x13W\xa5<\xc7\xa9\x06\xab\\\x0d\x87\x96<\x05\xf6\xabn1PxK\xec\x0f\x9c\xeeY\x1a\x13O#\xfe\xa3N\x8c~\xb1\xa4\x15\x83\x8a\xf5Jo\xf5\x04\x919\x80\xd24\xcd\xc9\x01=\x05\xd0\xa5\x11\xc7\x1e0\xd1!\xbf\x92k\xb3\xf7\x9c\xee\x17Q\x10\xda\xe8KgYU\xdb\x9a\xf8$\x94\x8c\x19\x84oC4\x08\x1b\xbdD\xd3\xb1\x142\xe0-\xb9I\xec\xd4\x19\xf7\xa6SdyI\xf7\x9c,\xc9\xaa0\xdbr\x80\xa0\xdc\x91\x9bC\x02?\xcaB*\xfd\x84\x12\x0c1\x89\x0d\xab\x0c\xa3-{20%q\x9c\xadS\xcc\x00'\xc0\xfa\x19\xf3\x99\xd3\xbe.4\x14\xf0S2\x957\x95\x87\xf9z\xad\xcd:\xde\xf24l-\x02\"y\xab\xf5m\xa8~r3g\x1b\x1e\x8f\xac\xc7\xd0f\x0epmxl=6\xbe\xf8\x1e\xbd\xa6\xc7dj\x14,7 \x93\xe2z2\xc7\x08%\x94\xad\xf8\xe0\xa5\\\x81B\xfa\xbb\xb9Pv\xc6\x18\xd1\xca\x0c\xf7\x1a\xc4'\xe9\"\xcd\xa48\xb6\xb6\xf9\x0f\x0cty\xee\xcf\xbc\x14\x95RK6\x9d\xb6\xf5\xa45~\xfe\xd1\xb37\xcf\xc6\xf4\xc0)J8\xb9\xe3\xde\xced:\x99>\xdd\xb9t\xc1\x9aN\xa7\xd3\xa7y\xf1\xa7xx\xb5\xa6\xd3\xa7\x16V\xcdW\x13Q\xdf\xe7\xa1k\x96\xd2=\xaed\xc3\xf8\xc5\xf2G\xbb\xb7N\xc1\xc2\x01!T\xd9YpJ1\x90\x0f\x19\x86\xa2\x0b9\x15\x816\xf4\xf1r\x81\xbdd\x89\xb5]T%\xb5zyo\xd1\x13\xd3,T\xbc\xc77no\xa5\xc1\xd5\x8865\x0b%L\xea\xc6w\xf3\xfe$\x9a\xee\x189\xb3~F)E\x19B\xa4\xdf\xd49}\x18\xd2U\xd3\x16\xc9\xc5\xfdd\x08s\x83F.\nS\xe4l\x06e\x13#aC\x08M\x9d@\xca5\x04\xaf\xeey\xd5e\x15\x94\xa9xo\xe0#^\x1d\x1f)\x11\xf2\xc2HL$\x97&\x8a\xcf\xba\x08\xf1\x82 \x12\x89\xcc2\x0f|\x0c\x9fK\xa7$\xbf\x9d`\xa6\x9a\x81\xd14\xce\xd3X*\x95\xd5\xed\x1d\xe1$W\xbc\x94,\x82yZ\x0d\xa8#\x7f*\xc6=\xadKX\xb5|d\x07N\xb3\xc2\x8c~p\xf25gp\xf1\xd1K\xe9z([\n;F\xed\xf5)\xce;\xe3yB\xa1f\xf3\x94\x0b\xa7`=\xd9\xa1T\x8d\xffn\x83\xf5\xd4\x92Kq\x06\xfa\xe8\x11\xb4BZz\x12\xf2\xc7\xe8W\x8c\x17\xc9t\x1b\xcf\xbc\x8aQ\xa3\xd9\xa3\xd5\x92\xf1\x04\x9dr\x8b\xdf]o\xbd&\xe1\x8c\x8a\x0d\xae\x8cO]\x06\x0cJ@\x11\x1d\xccn\xf5\x1c\x17Z\xbdMH\x04]4\x8e\xc9\xf9\xac\x95\xe7K\x9a.i\xa2\x8a\xdd/,\x07\xa7`\x01++=CI\xca\x02\xcb)\xde\x8dq\x85D\xf5|\xfaqo\x08\xd8\x8eiM\xc4\x02\x97\x96\xa5\x15W\xb7\xa4xC.\xa8\"#\xae\x0c\xde\xbd3]\x87\x82\x1a\xa7;-\xcd\xd0\xd0\x0bD\x1a\xf4H6\xa8_9\x0d\x0b\xd5\xb52Q\x16\xf41\xc5\x08\x00\xdd\x04eh8e\x99Px\xaax\xb3\xb5\xc3\xb2\xcc\"\x9c\x89\xcc\x0bW\x00>\xa3\xfc|,A\"\xda\xac\xf894\xb6\xb1\xe0q\xe4\xcd[ef\xe6\xfe\x0b\x863\xe4:}\x13\xf8o\x99\x13J\xba\xe5N\xbc\xaa\x95\x0f+\xc4\x0e\xf5\x1e\xf6\x1c\xda#\x96\x8c\x12\xf2\xd8\xab(\xc9 \xb7\xc79\xe7\xd7V{\xa2\xd0\xb2\x89\x08\xe3\xc1\xd2L\x1agv\xa3g\x94\xf8\xf8]\xb2\nR\xdb\xa2\xd2\x99\xa5\xb5\x9c\x8a\x0f\x15P\xd8\xfaoHT\xeb\xe6\xf1\xa6v\x1e=\xfb\x8a'\xa0[\xbb\x98\"\x91\xb2\xbd\x9e\xa3\x0f\xed\\\xd3\xca\xa5q\xf8\xccf\xdf0\xcb\xe9\xb75\xcb)\x95\xf58\x88\x843\x0b\x7f\xc6\xc4\x9by\x17x\x00\xa7\x04H<\xf7\x97QB\x0c\x91\xee@\x7fl\x00\xc3rT!\xc2M\xa0y\x1c\x0b5=$p\x94\x08\xbb\x92j\x02q\x1b\x8f\xee2\xd4\xc5s\xae\xbe\xe6+\x12'\xa8\xd3\xb0\xfa\xdd\x9ea\xd7\x93\xd0\x8ff\xe8\xe1\x19w\xc5wFr)\xbd\xfa^\x8a\xd9\xd4%K\xb2b*\x85\x02\xf6\"\x87\xd5b\x9f\xd8\x87\xfa\xe1\xa2\xc2a\x08\x99\xcd\xb4\x81E\xecD\xbc\xc8\xc5\x82\x15\xe6\xbe\x06&%\x0c=\x0dm\xe2\xf5 \xc2\x9a\xcb\xf2@\xa2L\xe5@\xba\x88\xa3wH\xc61(\xacm\x85Q\n^\x92\x04\x97!\x99A\x1a\x81\x07,\x14uK'?\x88\xcf\x95\x94\xaa\xbb\xde\xdePdG\x96\x143\xe6\x8a=[\xea-'\xaa\xa1[\xaa\x81\xa9\x80\xdaT\xc0\x10\x94V\x0e\xbc\xdfD\xdb\x08\xaf\xdc\xd6\xc9\x8a\xe2c\xa2R\x86#\x1f\xa5y\x9b.\x89\xc4p\xd9\xee\xa1Ccv<\x91\x01\x9a\xca\xb9\xe2 \xed\xe9\xc6$S\x9dW!$\x96\x91=\xffU\x8a\x1a\xba\xbbg\x88\x18*\x0fG\xb0\xf3\xf2\x00\xadG\xd6\x10\xacG\xdej}R!\x8a\x8f\xad\xc7\xf4\xc9\xcffQZ}d=f/\xad\xa3Dy\xf4\x04\x1f-\xd5w\x9e\xe2\x83\xcb\xf4\xa4\xa0\xa3\xd2\xb0\xb7\xbal\xc5\x89\x17\xa7lH\xbcru\x8f=~d=y\xfax\xea\xec\\\xd6LF\xa5\xc2pL\xaaI\xb4`\xb8m(\x8a\xd2%\xba\x93\xd2\xbc\xf3[\x11\xfd}\xa7\xfb\xe2\x8a\x84\xe9\x8bU\x90\xa6$\xd6)\xf9\xd5\x83t\xccc\xa1.\x02\xe5Z>\xfd\x84\xf6\xee\xbec\x07.&\xd3\x0d\xba\x9f\x15\x14\x93\xb6x\x80\xc0\x1f\xc6A\x9a\x03\xf7\xf6\x8f\x11\xf8Q\xb6^\x92k\x06:\xe8!\xe8M\xec\x85\xc9<\x8aW\x1c\xdaG\xe8\xf7\xbd$y\xb3\x88\xa3\xecr\xc1\xe1\x03\x843\x9d8;\xd8\x05r\xc2\x8f\x00\x9d\xc1j'\xffJ\xca#o\xd2\x9c\x07\xfa\xd3h\x8a\x06a\x1c\x0e\xbb0\xc5X\x0dZ\x89\xe9\x1b\x18\x1bh\xede \x91\xbe*\xc7&}\x93\x91\x96\n\x85\x05\x1f\xc2\x1ac\x92d\xab\xd2\xf7\xdaSY\xd8\x8d\xc2\\$\x0b\xd0\x81\x0e\x01\xb1\x17\x84\x96\x0b\x11B\xce\x83\xe4,\x9d\x05\x11\x957\xe4\x81\x11$*\xb7\xb7`\xb3j\xa8\x18\xe7\x82\x87\x02\x11\xfd\xcd\xc46\x17\x92\xaa\x16\xef\x8a\x874k\xf5M\xf3\xebi\x07\x9bac\x19\xe7\xb8)\xa3c\x9b\xcd^\xb2A\x85\x86{\xe03\x92\xa4qt\xc366\xff\xb1i\xb3\xbe\x9en\xa3\xaf\x90\xed\xb8\xdcN\x1cw\x97A\x92\x92\x90\xc4\xcf)\x1f\xc2\xfd\xe4\x82E(3\xb5\x1c\xc1_\xab\xf4V\xdf\xe2\xdc\x88&\xab\xe8\x8a|\xc2\xdb\xa9\xac\xb9\xf2PZ\x7f\xf5Uy\x9d\xab\xcf\x8a5\xd7\xbe\x89#\xa2\xc2\x92\xaeU\xf9\xa9\xa9\xd5ym\xabsm\xbd\xc5\xd3\x9a\x9d \xc8-\xc3\xe4R?\xab\x10\x19\xdb\xe7\n\xb6\xcf\xf3w\xca\x10v\x94\xa1\x04\xc8b^\xceM4\xdca\x8ec5d]\x7f\xab\xaf\xa0\xeaG=\xa7\xcb\xc2\xe3\x96\x19\x9e0\x1e6\x86\xc8\xa9\xa2R\x8ee\xa9\x16\xcbZ\xcd\\\x0d\x84\x00i\xa7 %\x19#\x8e,E\xbe\xb9Y\x13.I>\xf7B*LR6\x03\x1e\xf8K/I\xc0K\xc0\xcb[\xd2\x1c\x0b\xdf\xf3\x0d\x94\xcb>\x0b\xe2\xcd\x80E\xa3\xe1\x90\xd4\x0b\x96e\x08?\x0e\x8c\xaa^\xcb:$I\xd5\x8c\xe6\xf5r\x9a\x10m\xf5\xf3A\xb7\xa21S~H\xaeS\xa6\x8eR\xc7\xa9\x8af\xf2P\x9eb\xc0\x92|\xb8\xa8\xf5\xc1\xdb\xc0\xc3\xd2\xac\x90\xf2\x94\x10\x17\xdam\xa9\x9a\xf2l\xb8\xa5\xb1g!\xea\xbe\xbf\xfd\xe1\xe7\xfd\xddd\x0ex\xec\x0ci&\xd0\x11\\\x1ec\x051\xb6\x19\xb32b\x13}\xe7\xe2xQk\xddy5\x15'\x1a\xda\xa3.\x9d\x91Z\xbf\xc3\xbe2\xc4\xd3\xd2\x80\xaa8^Y\xf2\xa2%:\xbd.t:RU\xda\x98\x85u3\x82\xb1\x0e\x9bf\xa4\xaew\x0d;\xb0\xdc\xda\x17Q\x106\"\x1c\x9b\xffQu\xfe\xc5E\x0f\x8d\x17s)\xean\xdeY\xe6Zl1m<\xae\nO\xcdM\xe7\xed\xc4\x81\x10\xda#4\x81\x13\xc3\x9a \xaeR;\x7f\xe8{u\xcf1\xc5]o\xb9\x8c|\xbbg\xf0cV0\xa6\xd0\xf57\xa0]13xj\x0eXl\x08\xde\xde\x0f\xc2\xc4\x9b\x13;\x85\xa7O\x9f\xa2v2+O\x9fG\x97\xf3\x04\xb2\x13\x07'.\xc36\xd8\xacF\xfc\xe2\x04^\xde\x8e\xd67,\xb0\x01}\xa5-\n\x96\xa2\x18dl\xd2MS\x1c)S\x9c\x03\xdeSI\x0b\x03s\x06\xdd L\xd6\xc4OK?\xba~\x96\xa4\xd1\x8a\x91\x89\\9\x93/\xd0\xb8ZpZ\x87\xecb7\xe7/i\xd4jlXC0\x92\x1c}\xb8\x1e,.\x05z\xcfMo\xec\xe2h1^\xe3\x89{c\x7f$\x1d\xfb.sw\xbd\xddF+\x90\x88\x0fS\x1cu\x13\x92\xbe\\\xad\xc8,\xf0\xcc\x1e\xae\xdc>\xc3|\x8cx\xcab5&\xb3\xfc\xf1k\xaej\x007\xdb\x98L3\xc0M7iw\x16\xf9\xa8(3\x97[\x97\x12B~_ \xc9k\xcc*\xa7}`\xcc\xa7N\xab\xc2\x8clk:'o\x82\x15\x89\xb2\x14NaM\xc9\xb5[D\x8c\xe7yk\xa6\xccq\xfa\xab\xf7\xdd4bW\xdb\xf9\xe9[$\xb6aQ\x8b\x9a\xe8\x88\xf8Hf\xa0Z\xca-\x7ff\xb6&\xaa\xaf\xf8\x98\xf4[0\x94Q\xa7\xae \xb4\xa1v\xd7Q\x92~\xca\xb3\xf9\xb3\xac?\xc1\x8an\xc93?\x0e\xd6\xa9\xd1\xddG|\x04\x11\xd79\x08V?x\xcc\xefF\xe1\x8a5Woh\xcf\x85\xbf\xbc|\x13\xd3\xab~\x88\xde\x84 \x7f\x18o(f\xc0\xb6,\x17\xac\x0f-~\xa8(\x1a\x0e\xab\xa1\x94K\xb5\xe8W\xc2vP!\xc5\xab~\xbe\xf0\xc2\x90,\xe1\x14l\x1b\xa3\xa7\x90wP~\xe4t\xe9\xbc\xf7\xf5\x03\xaeE\xae\x99\x9d\"\x057\xa9<\xb7\xc0\xd3\x08;1(M\x8a\x01\x0bQ5\x86\xc6E+\nc\xe2\xcdn\x92\xd4K\x89\xbf\xf0\xc2K\x82i\x92\x97\xa3\xddvD\xbe\x8b\xe2\x0e.Z\x06\x0d\x97\xbd@r\xfb\xaa\xdf\x85\x94\x1f_x\xfe[\xe3qV|\xbc\xf82\xd1\xf9\xdb\x89\x8f\xe1\xae=\x14l\xc8\x1f'S\xa6\xdf\x8e\xed\xc4q!i\xb7M\x08\xb7fG4y\xed\x16J\xd9:\x1f\x82\x85y\x89Yzw\xf0\xab\x81\x9b\xa1\xa1\xca\x1a\x1f\x15T\x8e::\"\xa1\x9f\x94\x86\xbb;\x02[h\x17\xeb}\xf4\x1a}\x9e\xe7\xdc\xf5\xa6\xaeL}\x9a@\xf1im\xb8{\xe4O~:\xed\n4k\x16p\xc4'\xc6\xf7(\xd6\xd5\xf7^|\xf2\x14P\x0d\xba\x0b\xdd\x07\xfd\xae{f\xdf[\xdd\x87\xd4\xf9O\xea>\x0d^\xda\xd5\x0f\xf6\xa9\xbfm\x9f\xe2qo\x93\xbbU\xf2\xe7.\xfd\x1a\xdc\xa5_.\xc4\xe3\xfe\x8f\xa3w\xbbw\xef\x1d\xfd\x7f\xf0-\xf7\xb1\xd1\xd5[\xf7A{\xfd\x12U\x0e\x1aw\x0f\xddG/Q\x97J\x98\x84\xa3\xbc\x00\xcc\x83\xd0[.7\xa1\x0f\xccp?\xdf\xe0\xbc`|\xba\xa9\xdfoE\xb7g[Y\xc8\x02\x02\xcedY(!\xcby\x11\xa9?\x0fN\xbc\x08\x12\x0c\x83=\xc4\x02\x92\x0d\xb8\x949\x14y\xb1\xd9\x15`\xf3[Q9\xfb0\x90M3\xf1E\xdd\x03\xe9.#\xdf[\x9e\xa5Q\xec]\x12)\xa2\xa3:)r\xfeTm\x855\xef*\x10aQ.\xb7\xaf\xe5GBa\xc8sn\xa07\x99\x95\xc6\x19a\x87\x7f\x1e\xd2.t\xbai\xf4I\xf4\x8e\xc4\xcf=\x8d\x01Y\xfe\xb5q\xf0R\x10wal+\x8c>\xe2A\x88\xd0\xc0b\x8a\xbd\x0d\x92\xb1\xa9\x1a\x15\x13\x8a\xb14\x9eapm\xb4ai\xe5\x12\xa1m\xa1\x85\xa8\xd2\xb5\xaa\xef\x91\xee\x1e\x81\xf8\xd0*b\xcf'\xa5*\xe0\x14\xfc(L\xa2%\xe9\xe2C\x16\xc0F\x80\xdeyq\x88g%\x1c\xa4\x1aD\x0f\x8c;-W\x170R\x93\xa2I\xaap\xc4j\xda\x87\xc6\xad\xb4\xd1\x1e\xd2+\xe2J\x19\x96\n\xb0\xe4\x06r\xac\xcb\xa3\x14\xda\xfb}\xed\xad\xcfH\xdd\x1e\xdc\xb6G\xe9\x82d\xde\x8b\n\x1c\xa2+\x15\xa9\x01\xc9\x0bG\x12MpS\xac\xb8\x1b\x84\x0b\x12\x07\xd8yt,q%\x98\x1d1'\x93H\xd2\xab\x9f\xa7\x92\xcbH\xddd\x01\xa2\x06\xb7DT\xdb\xde\xc2\xb3\x86.\xcf\xe1F\xcbS~k\xd0\xbf\xc3K\xfd\xfe\x81S8\xc5\xdc\xf1}\xc9}f\x93\x1a\x9a\xec\xcd\xfdc}\x16\xc4\xfe\xb1>\xcf\xcd\xdeAs\xac\xf6\xeaBqK\x04\x0bH-\xc7P\xd2\xeb\xcc\xb3\"zU\x8c\x97R\xd1*g\x13)\x8a5\xe6\xd6\xcb\n\xebWau\xe8z\xc9M\xe8\xf3\xe4\xadYw\x1d\x07\xab \x0d\xae\x08\x9c\xe6.0pZn\x02\x87u\xbc\xef`6\x0c\x1e\x03\xca\xd6\x948pl\x82w\xe5*\xcf\xa4zi\xb1C\x07S\x0e\xc8\xc0\xfd^\x9f\x01\xe9\xd7\x01V\x93w\x15\xfd~\xec\xfd\xde.\x82\xd6,!\xa7\x00\xee!p\x16$\xeb(\x07\xf6\xd1f\xd3]y\xd7\xcf.sX_\xc0\x04\x80\xbd\x19\x939\xba\xa7\x90X\xc0\x0f\xe8\x8e\xa3\x88\x92m\xb9k\x9a\x10i\xef@\x17\xb9\x1du>\xdeE\xa2\xa2\x12>\x99/#9\x97\xf5f\xe8\xc4\xd1$H^y\xafl\x8c\xfb\xcf\xd2x \x96\xa40\x82W\x18\xc3\x153H\x0d\xd8\x9e\x92\x07\xc6\xcb\xc9l\xfd\xe4\xe8\x02\xd9]\xb1 v\x89\x0b~y\x81\x03L\x9dBe\x1f\xbb\xc8?_&\xb9\x8eDv\x04\xb9\xd1\xb8\x83\xbf^\xd3\xc6\x13x\x8c\xa5\x1f\x83\x17\xce\xe01/\xfe\x18|\xe6\xe2sA K\xd0]\xfc\x92\xa4\x0b\x12W\xb5\xe5|\x19\xcbazr\xd1\xc8:?\x17\xd1\x19\xce\xcf-\x16\xaf>\xec\xce\xa3\x18\x9dp \x0cYf)\xcf.B\xe3\x93\xfc[X\x0c#\xe24\x9f]\x0c\xcbh\xd5 s\xd7\n\xa8\x8c\xd1(A\x87c\x82q]R\x1e\xa8\xddW\xee\x13\xb1T\xce\xe7\xe7\xeb8\x9a\x07K\x12\x9f\x9f\x03\x8f\x14^@0$\xa6\xdf\xcd\xd63/%/\xc2+\xbcJ\x9d\x87\x9fx\x90\xbd\xd3\x88\x93\xbb\xba\\\xbcBU+\x89Y\x17A8S\xb1TS\x90.\x95\x8a\xb6r\xe2\xff\xd2\xc3\xa4x(y[\xf1u\x7f\x99\xbc\x08\xb3\x15\x89\xbd\x8b%i\xa2\x07\x9b%j\xd0\xde\x84\xa2\x934g7\xd3\n\xbc\x1f\x18\xe27\xacK\xa5vk\x0ew\xc5n\n\xec\x90\xa58\xf3\xf9q\xdf\xb3)\xae\xa1Ux\xdeM\xa28\xb5\xb5\x04v\x8d\xa9W\x11\xf9\xd7\xb8\xdc\xc3\"\xfbL\x83\xc6}>N\xa7\xc8\xcf\x99\xc4\xed\xd2\x01\xca\x93e<\x88\xf1\xde'\xecE\x96R\xf8T\xd4\xe3\xbb\xb0t!\x1c\xa7S\x17R\x91gD{\xa3\xdctX}\x10\\\xde;\xacRR!\x81\xea\xf3E\x1c\xe9\xd3E\xec\x1d\xf5\x9d\xee\x8a\xa4\x8bh\x96\xe8(\xed\x9e\xf2\x1eg\xd6\xc7\xba\x04\xd3\x9a\xbd\x80g\xc2r\xc9\xf9\xa6\xbbfYl\x0cff,?\x96\x1c\x14J\x89\x1d\x94\xf0\x9d\x0b\x94\x81\xa3J\xcc\x80\x19B\xc9*hL\xdd\xa5?H\xa1o\xb7\x0bW.\xdc\xb8p\xe9\xc2\xca\x85s\x17.\\x\xe7\xc2\xb5\x0bg.\xbcp\xe1\x99\x0b\xaf]\xf8\xc2\x85\xb7.\x86\xb1Z\xe2\xe9KO\xf0\xaf\x98T\xdc\xe2\x020%\xe5\x9cw\xe7\xbai\xc6\xabS\x89\x9eK25\xc5\xfb3\xcct*\x831\xb8\xd3\x08\xce\xba\x97$e\xd1\x87\xcf\xba \xfd\xba\xc2\xaf\xcc\xac\xe1b\x94\xce3f>q\xdcB+\xd3\x8dI\x12-\xafH\xcc\x82\xcc\xbe\xe5\x9c%\x87\xd2=\xfd\x05\x8f\xbc\x144\x04a\xe1\xfc\x97\xfbU\xe5\x04D\xa5\x1e\x94\x1fcp3\xb4\xd6\xbf\xb5#\xa7\xe8\xd2\x88\xf1\xe8\x1b\n\xa4Et\\\xf2%]\xad\xfc\x1c\xfe\x82\x16\xcb\xb8W\xf2%I-\xdc\xb4\x11\xf3\xc5s\\x\xa9\x8dhO\xfb\xc0\xd2\xf2a\x94\xe4\xc2\xfbp\x9e\x93\x13v\x86\x8f\xc6\xbd)\xeaQ\xaap\xd1\xe7\x11\xcb}c\xd6\x08iF&D\x8b\xd8\xb6\x9e\x07\xb1\x9f-\xbd\x18\x82\xf0*\xe2\xaa\x1c\x17\xac\xe7/?{\xfe\x83O\x9e}v\xfe\xf2\xd5O\xbd~\xfe\xec\xcd\xcb\xd7\xafLVwZ\xeb\xa5\xad\x89_\xfe\xbe\x08i]3\x8d\x0f\xd4\x13\xbe\x1a/\x99=2p\xe1\x99\xbc.\x89X\x17n\xc1\xa7bH\x99|\xbap\xe5\xe4y\x07\xe9\xfe\xa8\xd5\xb6\xe1\xe1Y\xbf\xaa\x86\xa1\xb2{\x02\xb5h#\xae\x12\xe4\xa8[\xe0\x90\xc1\xa5\x10\x8dm\xba\xa0\xc9\xa7\n\xbe\x14\n3\x18V\x90\xccqMh\x9ew\xfa\x81\x17\x89\xf9\x03\xa0\xbf\xb0f\x99\xf2\xfb\xe3\xb8VD\xcdu.\xa7\xfa\x7fXR \xdf\xefD\x8e\xc7\xf5\xc4\xb8\x0b\x8d\xd3\x14\xd4.kP\xa6\x06\xba\xcc]\xb8M\xefK\x0dj:\xf7\xc0\xcb7\x0e\xe8\x1e\x0b\xb5\x8b\x17\x88u\xa3\xe2\x97\xe2\xae\x9bi-\xffQ\x1c\\\x06\xa1\xb7\xd4Z\xfb\x85\xb0>\x84/\xd4\x87\\\xd2\x7f\x85\x91\x83\x90\xdb\x8b\x9fj\xd9K\x92nr\x0d\x94\x0f\xf2m.\xe7\xbd\xb5S\x07\xb9\xdc)\xdc\xb0@\x0f\x1c)R\xba\x18*\xd5S[^x\xc9\x16-\x1b\xd6Q\xe3\xda\xa3i\x8a\xf1\xdbMZ3\x900`\xfd\xd5\xf7\x00\xe7\x04\xfd{W\xccM\nF\xf0\x12EU\xee\xbe\xc0~\xbc\x96\xd1\x82=\xb1P\x9a%\xba Q\xea PL\xd8 #\x8fP\xac\xbc\xd4\x0f\x03\xcf\x83\xe7\xf4\xc8'\x89Fn\xde1l\xc5\xdatb\xa3R2\x9f\x9aK9B\x9dC7\x7f\xae\x0ey\x81F\x0f\xccI&\x83\x9f\xe5`>K\x85\x1b\x95\xfdZD\xf1X\x94T\xfa\xfa\xb8\x15j\x7f\xe9\x18\x870S\x1f\xe4g\xe1\x0d&8e\x92-\xdf\x9ej\xb3\xd5\xed}\xa1\x8aj\xe6{,n9\x87\x8e\xba\x86l\x0b\x86\xb8\x05\xc3\xb2\x8cFP\x92 \x99\x8c\x96q)\xb3j7\xde\x92\xa7\xe7\x8an^\x1bg~\xe5*\xa1iki\xc8G\xc1T\x18\x17\xc9[\xa8\xa6=w1\n}P\xefF\x8cH\xdf8w\xbc\x1b\xc5\xd09\xcf\x1d\n~'Mk\xcaW\x8dNhA\xddB\xd6Y\xba\xa3U\xbd\xcb\xf5\xb7\xd6\xcf\xac\xbb\xf0\x121\xf7\xda\xee\x16XP\xd3q\x8e\x18\xb4\xaeT\x93pum\x7f\xa1\x0b\x8c*\xeb\xbe\x86\x10a\xd8*#\x89\x8d\xec\x0b\xcdSN\xbb\";\x13\xa7\x1d\xb5\x15\xe4D\x91\xfdN\xf7\x0cyEd_\xab}\xcer\xc8\x83\x9c\xf0\xfb\xc7\xba\xfc}\xf4\xe4\xaf?\xe1\x0ft'|\xd4Kv}o\x9df19K=\xff\xed\x9b\xd8\xf3%\xb6B\xe48\x1d\x8d\xf6\xa8\x90;#2u\xa7.\xf7\x98\x07\xe5\xfc\x1fj\x89\xa4\xa2c\xd2\x9e\x85#;\xe1\xa1\xb6<\xc6\xd4x4R\x91\xb8\x1f\xed1\x89\xc8\x14\xc9n\xe1F\xa2l\xd8\xf5\xa3\x19\x8a\xddxO\x87\"\x1a-CJ\x02\xcf=\xd6hs\xa3\x02\xe3\xc0\\I\xc1\xe2\x84ln[`\xb1l\x88\xad\x8f\x882\x8f\xa2!X\xb1\xf7\xa5U\xa5Qj\xd9\x0b\x8a\xf1\xd6\xec\x9d\xb7A\xd94\xfe\xf2f\x08\x16\xfdS\x0d-\xecb\x80\x9a\x08s\xb7]x1\xcb\xe1\x16\x7fy\x83\xb4\x81ve\xf6\xce\xc3\xf7\x1eXo\xbbgH\x8d\xaaU\xdc\xa2\x11g\xe5]o\xa0\xd41\x18\x08\x8a[8\x91\xe2o\xeb\xc2\xa0\"w\xa3\xa3n*+:Q\x1a-yhk5\x8df\x17\x9et\x1cS\xf9\x9d\x8cc\x8d\xabi\xa3\xbfN\xc8\x02\x15\xd0}\xdd\xe8{\xc1\x04\xfe\xfe d\xf0\x04\x92\x13h\xb73v\x7f\xad\xd8\xa0\xd9\xd4\xc5\x80\xb7yh\xa2jv\x82J\x1c\xb407\x8bh1\xfd\xdb0\x1c\x1e\xee3\xc3\xa1\xa4ag\xa6\xc3\xc3\x83o\xdbt\xa8_D>V9\xae\xac\x95\xdb\xd4-\x8c\xb4X^\x87\xdaE\xd5;`=\xb0>Y\xe1\x1eA\xd9d\xd1\xb4\x9d\xaa\x1d\x17\xe6f\x8c\x84\x9b\xaf\x0d;\x9em\xebzr\xa7\xbek(&oB\x1fR\x9d]A\x1b*Ks\xc7\x81\xe3\xb0\x1f=\x82`,\xec\x12\x98\xbe\xa1\xf5 f\xd6*\xfe\x1f3\xfc\xe7w\xe5J\x17nS/\x08\xf9n8\xea\xddc7\x88\xd9\x96\xc9\xfc\x96{\xa5\x8e\xd7\xc5E_1\xe7\x88\x08\x17\"\xa06r/\x91\x9d\xbb\xfal\x1eE\xd6\xc3\x18\xda\xc50\x95\xa9\xe4wa\xee\x8a\x0d\x95#b\xc9\xb6\\NDy\xdf\xceW\xee\x92\xba\"\x18\xbb\xc6\x04\xb4\xd4[E\xd7\x1b[r\x16\x9bZrf\xf5\x96\x9c+\x83%\xa7\xd2\xdc\xcd\xa6\x06\x9fK\x9dE\xb5\xac4)\xbf\xb0\xd2\x12\x0c?\n\xe7\xc1e\x86\xb6W=\xd1 \xb9mV\x1f\xf5Z\x04I\xaa#+j\x9akJ\xa2\xe2&a\x05\x84\xc0b<\xb3-\xd1\xa5\xe1RF=\xeb\xfc\x9c\x10t\x1b8\x95b\xcb!\x8c\x1e\xe5(h\xd5\xc5\xbc\xe70\x82\x99P\xc8\\U\xdeva\xe5\xb8RA^,\x1c\xa7S8\xd5\xc5[\xe7O\xe8\x1f\x16\xac\x0d=O\x11:\x821\xb3\xa5\x92i\x01\xe2\x91:\xca3V\x11\xf5B\x9f\x0c\x91\xd0o6K\xae\x1c\x0eL|J\x13\x15\x88\x88|\xcan\x0d7\xb9\x9f\xc8\x8d\xd4\x01{\x03\xaf\x91 \x97\x8df\x8fX\x8c\xadCg\xf7u\xe8\xe7\xf1|\xce\xcf7\x9c\x8a\xf9|\x88\xa2\xef\xa63\xc1i\x84^\xcd\xcd&\xa3\xa5G\x9bR,\x05\xfd\xfb-\xbb\x82X\xce8\x9dn\xf0\x9e\x8a6,\xb6(}[\x9d1\x10\x92w\xc4n\xbe\xd1\xc5\x8b\xc7\xd1\x94\x8a\xb0\x91\x03A\x11\x927\xd0\xcd+{J\xe5\xe4\x81\x88K%4\xfa\x1c\x05\xe3q\xc4]\xe40ie\xdcM\xd6x\xeb1r\xa1\xaf\xbb\xb7\x87\x96\xb4\xb8h6\xaem\x96kc\xc3:\xcf\xf8\xa6eg\n\xc4\xac\xf1~\xe2U\x1e\xd1\xa2v\xdd\x0dt\x82r\xe3\xa0\xbc\xa0\xe6\x15\xd1\xafc}\x1cx\\\xc5Pc#c\xb6!9\xd5\n\xbb\xebH\xd8\x89\x85\xc0\x13\x08\xe9r\x13\x07\xa21\xa1\x0f\xcb\x17\x1dI\xcd%8l4\xc0\xe0\x15\xec2+\xaf\xb7w\x82\x847\xa0/\xb3\xaa\xf9.\x8e\x0bC\x8e\xb6RnJ\x15\xb7\xc9\xaac\xa9\x9b\x80Mnl-\n\xe2\xb2\x08\x92\x86{F\x0d\xf7\x8a6\xb9\x89Un\xaf\"\xaf\xdc\xbf\xf5\x86\x9bVu\xad\xbb%\xdd\xd1\xfd\xfa\xb2\xd1\x8d\xaa\xbf\x14\xfc\xa4\x9fue\x16L\x98\xf7\x1d\xfd\xaf\xf7\xba@\xcch$\xb1\xab:O\xc6K\xe7vP\x85S\xc62\xb7#GGx\xe6\xb6\xec\x0b\xcd\xbc\x08o\xec\xaf\xde3]\x9c,\x1d\xd7_\xa1\x16\xaeb\xccU\x02\xad.3\xdbgq\x88\xf3C#\xadTn\x8c\x08\x9f%:\xa3\xdf\x81\xfb\n\xcc\xdc\xd5\xa9\xea\xd3_\xa3W\xd5\x88\xcd^\x9e\x9b\xb0\x12\x99\xb8h\xaf>p\x80D\xf7+i\xb05\xdeG\xd2\x0b\xe8,d\xa7\xe3\x10-\xcf\xf4o\x19%\x1c\x91\xf4\xce+\x19\xa5\xd5\xeb\xfb\xef\xdd\xedN5\xa8\xf6B}\xd7\x86iy\"~(\xce\x14\xcb\x8aC\xa5\xae\x8b ,\xc5]\xb9\xefQ\x88\xadS\xffX\xa3\x1d(%\x94\xbb\xe3\xa1.`\x9a\x8d\x94\x8a\x07\x0f\xd4\xed\x8d\xce\xd1B\xb3\xcc\x04S6\x92y\x1cUrq\xd5\x9d\xb6Y\xe8v\x14\xddq\x0d\xc7\xa8Gv\x99\x8ax\xea\xb8\xf0\xbd(Z\x12/\xb4Q\x94!E\xb8e,\xc0LA\xe8\x15\xfd\x10c\x96\xf4\xbcG\x07N7HI\xec\xa5\x91>\x90\xe3\xb1\xde}|O\xb9\xcd\xc5\xf6\xe8\xa0\xba\xa3=\xfd\xd6M\xf4\xead_\xbf\xff\xe7\xbc\xcdj\xe5\xcb*^mt\xacV\x0f\xcb\x8b\x878\x8cj\x9e\xcb\x87Q\xf5)\x1e\xe64\xf1\x17\xdf\x1bO\xf2\xe5\xa3\xfa\xb6\x9b\xa8\x10K\x8d\x1e\x94\x8d\xa6\xa4\x17\xb5\xa6$\x0c\xb2T(\xe6\x13\xa6\x98\xf7\xed3\xa4A\x9e}\xc6\x83#\x02\x8f\x16\x8eh\x8e\x0bG!\x11\x0b\xf6\xec\xe4q\xf2\xca\x95\x1bb1\xe0 \xe8\xcc$\xee\xa1S!\xde\xa0\xe1\xbb\x93y{\xda\x97P\xc4\xe9\xa7$\x85a\x11\xbf\xb9\xcdo\xeb\xd1\xf3\xb9}S\x928\xfa\x0e&+\x1bA\x8a\x17\xd1o\x0c\xd2\x10;\xd5\xd1V\x1b\xa4\xf0r\xed\xa5N\x95B\x8c\\R\xb1&t\xe0\x86\xf9\xf2\xa5Z\x07J\xf1\xe1#5$\x0cU\xa0*\xe4\x06\xb3\x05~\xc7\\\x08\xe7|\xa9\x98\x91A\xb5M\xd8\xef\xb0\xbb\xf1\xd48\x178\x0f\xe7\xe8\xe5\xfa\x8e_Ge~4\x94`\x8a\xf9\xa1\x07\xe4\x0b\x18\xc19\x06\x16\xb3\x8b\xc9i]tgQHN\x1c\xb4\xbf\x9f\xc1\xa9\x10\xe2\x983\xf0\x05\xd3\x98p7\xf6\xfc\x17\xe5\xdf\xf6\"\xd7\xa6\\\xbb0\xb3opg,\xf0\xae\x15\x9f\xe6\xebj\xa3\xed\xb6!a\x16]9Mv\xa0\xc2\xdbs^\x83\x0d8\x03\xf2\xda\xebF\x8f\xe3uQoW\xc1\x89k\x8e\x10\xbfz7\xa4\x82]#\x05\xbb*\xc7\x92\x1c\xa9\xb6\xc0\xa2\xd8vx0\xdb:\x9bt\xd5\xd8\x0c| f\x8c\x07\xd8\xb3\xa2\xfbn\x8d\xccW\x89\xb0\x1b3\n8\x1b\xa7,\xcb\x1f\xcb\x9e<=q\xa0\xdd\x8e\xb5\xd4\x0b\x8b\x8e\x80\x17\x9d\x8a\x9c\xab\xf6\x9a\xa9]\xac\xef~\x17\x03\xab\xb9\xe0u/\x13.:\xd5\x1fI\x0bo V\x13\xd3\xb5\x10\x17<&.\xe2\x93~\xf5\xb4Zry\x97\x83\xd8F\xb52/J\xa4J\xc4\x08}y\xfa\xf9\xf9\x8c\xb00\x94A\x14\x9e\x9f\x0f\xc1\xc3\xd0\xa2D\xe7\xccw\x1ez+R\x94\xb9\xb2\xab\x0e\xd0\xef\xcb\xea\x91\xb9\x1dT\x9b\x9cG1}\xbd\x1e\xcb\xf8\xa0\x17\xcc\x0e\x86\x7f\x86\xec\xcf\x08\x02;'\xe8\x8aR\xa4\xf4\xfb-\xb9\xf9x\x93\xc6\x0c\x8e\xe3\xb8\xf9\x08\x04!$(\xd3.\xcc:\xfc\xc5\x98L\x99\xa7s\xce\xc1Hm\xd7\x16^\xf2\x92c\x89\x98\xcb\x98YA\xa4'\xcc\x9f\xcf\x92 J\xaa\xf4 y\x8e\xaa\xaa\xb3\xb5H\xf6R\xa9N-\xc0kU\x1f\xa8\x95s6V\xad\x92\x83EE\xfc\xa7\xf2\xfa\x8a\x92\xc3\xca\xbb\x08\xe3/\xe2w\xe5-\x9e\x13\xa9\xf2\x9e\xc8\x9a\xc4\xde\xe4\xbf\x94w\x13\xe2\xc5J\x93\x0c\xc8\xdfd?\xd4\x17\xd7\xc4\x0fHR}\x93A\xc5\xab\xec\x97\xe6\xdde\x90*o.\x834\x7fo\x19\xa4\xca[\x92\x08PyWz\xc2k\x90 \x9azrAA\xa9'\x7f\x92\xd7\x93C\x94z\xb20\xf1\xa35E\x83\xea,HOx=\x12\xa4\xe4E\x82$F\xa2J\xd5\x9d/\x119\xdaFU{.\xba'\xda\xaf\xb5 \xcb\xba_A\x95*;\xae\xd2\xb1\xc0\xdc1\xb9\xe5MZ\x15\xe4\xdb\xc6\xec\xedL\xef\xd1\xad\x90Qh\x83\xe5(\x0e\xa1\xa5\xdfx\xa4x=\xdf\xb4\xd5\xa4\x92M\x0b\xd4Q.\xcb\xa3\x0cddr\x9b\xa6U\\>\xe1\xed\xe8\xb5\xa3\\\xee\xae\xe4\x86\xc7\xe0\x189\xc6\xd9r\xa7\xf4\xbd\xca\x11\x11{\xe5[\xae\x98S\x8b\xbd\x105\xbf\x10\x94\xe2\xf0\x97\x04f}\x15\xe5\x99\xd0UQH\xe5\xf7\x89\xa5%\xe9g\x8f{[G1b!\xcfP\xdf\xa0\x93\x1cR\x8c\xea\x9f\xcb\x0d\xfac\x90\xd8\x1c\xc52\xdc}4\x9b\xf5:?\n\xb1\xab>Z4\xb9\xbd\xa5\xcf\xe54\x05\xac\xecY^\x16#\x98V\xb3\x18\x9e\xf2\x8b{\xb4\x1d~'\x8ecj\x87\x87\xfe\xb0\xa3b\xd1=\\\xf4\x80\xa2=\xf3\x93\xc5X&\xe3\x1e\xf7q\xc7\x07\xf4E\x17\xbcq\x9f\x03\xbf\xc5\xae\xe7}\xefO\xc7\x11\xe2xvr\xaf~;\xae\xa8\x8c-\xe0\x1d\xf0\x97k8\xb5\x99\x16\xd5\xa1n\x17\x1b\x83\x07\x8f\xa9\xc1\xe4\xac\x1e\x93=\xee^^\x8f\xebyn>c)\x1f\xd9\xc1\x06{\x81\x0b[\x19\xc5.\xf3f\xa0\xaf`\x1a\xc0q\xb2 =\x8d$,\xdd\x9c\x9eJ\xd2\x7f\x86\xe8\xe0\x8d#\x89\x9e\xd6\x93R\x9f!J\xc6\xe24\xb1\xbe\xf6\xa7\xe3\x00\x91.\xba\x03a}\x90\x9e\xe5\x17q\xf3\xce\xd0\xf7\x85\xdf~\xe0\"B\xd3g%\xd0 \xb4\xb0\x18\xb7\x7f?z\x04\xbe n\x0e2\\\xbf\xbb\x8e\xd6\xb6\xe3\xb2E\xe1\xbf\x9c\x0dj\xdeb\xbbH\xd7\x016\xd9'\x9b\x86_\xe1r\x8a,\x97\xa8\xd5\x7fG\xff\xeb\x1eRY\xc5\xf0\x7f\xcco'\xb2\x90\xb4]\x0ci\xc7\x83:\xdf\xe7B\xe2VB\x9c\xdc\xf66G9\xb4w\xa7\xf6W\xef\x91P\xa6\xf6+\xef\x15\xbb\x83\x98\x16I\x1e\xe0\xe1fk\x03\xa9\xbf5z\x18=XYt\xbe\xe3\xb4n)\x1bW\x89\xe4C\x88\xc5\x12\xb9 .:\xc2\x19\xbc\xe0\xca\xc2[PHi\xe18\xd8h\xd7\x95\x85\xac\xa6\xe0\xa1,_6K\xac\xe3B\xc8~\xb5\xdb\xa9\xf3\xed\xf0BIc\x85\xf9\xa3\x90\xf1\xb7p\xa0\xec\x0c_&Va\xe9\xb7\x86*<\x0c\xd1\xd1\xc8+\xdf\x02\xbdy\xc8S\xa0^\xc9\xa0G\xf5\xd0(\x8a\x9a\xe48\xcd|hJF\xf7\n\xc7\x15\xcd\xe09\x82\xb8\x10\xa1\x7f\x01ECM\xd8\xe4\x0dh\xe1F\x18\xce\x8e\xb9L\xcag\x83\xa5d\xc9G5\x00\xe1\xc7\xbb;\xe3<;C\xf9x\x86j\x16M\x136#\x9e\xcb\xf3~\xf3S\x1aC\xfel\x0b\xe4\xe7\xbdi\xd5\xf6\xa6\xe1\xc8@\xe4\xe6=U\x90\xf54\"\xb2W\x16\x91\x93\xb2\x88\x9c\xe4\"\xb2W\xfc\xd2\x88\xc8j\xcd\xc6\x9er\x89\x98\xae\xd4\x86\xd3s\x0f\x96e&\xe4p\xc7\xed\xe5\xcaD\\\xed\xeaw\xf4\xbf\x1e\x86\x07j\xef;\x85v\xff\xb8\n\x8f8\xfcH\x7f\xbfM $..\xcfT\xef\xe0$\xa6\x8bo\xe5b\xdb\x05\x0870mL\x15\xc1\x93\x184\\x\xe7J\xd3\xa5\x0bk\x17\xfd+\xe7\xdcAQ\xa5/u\x0f\xaf\xd0\xba!\xc2\xce\xa9\xcfo\xf0\xb9\x08\xc1X\xc6\xe8\xe2=\xf4\x08\xaf\x97\xe5\x84\xa4QD\x17\xd6\xe2V\x8c\x91\xa1DJ\x07\xbcVj\xd4\xd4\xebC\xad\x80\x88\xd7\x1737\xbb$\x17\x9f{.t\xfa\x945\\\xf1\xcb'\xcb<&\xc2\x9a6\xab\xda\x9c6rX\x8eli\x02\xe1\xaa\xc6o\xf9}e\xfa\xa2P\x04\xe9m\x9e\xbb\xda\xdb\xed\xda\xfb\x93\x90\xbb\xbbI\x11\n\xb4s&;\xee\x8d`\xbc\xc0\x88\x15\xa1p\xe2c\xd4=t\x98\x0d\x0e\xa7V#\xbd\x89O\xcc\x18\x12\xdd\x95KF'\xd6LZ^b\x96|\xe1\x92\xdf\xe0D#>(\x7f\x98\xe9\xa8.R\xec\x8c'4@~=c\xc17\x8a\x80\xc8\xb8\xb7X4\xd8\x88\xf1+\x1e\xcb8\xc6T\nQ\x98\x92\xeb\x14\xf30\xc5\x97\x89\x93\xfbo\xc6,yD\xc00%*P\x88\xae\x89)Et#id\x99\xbe\xf9\xdej\x8a\xc2q\xc5\xeeEr\x9fp\xe3\xa6\x08\xe9\xd0\xd3rV-\x1e\xfeCT\x0f\xa9\x19a\x84\xfc\xccD\x8a\xb4\x1b\xcc\xcc\x9a?\x1e \x13jS\xf9\xd3\x82\x9c\xdd\xd1\xdaXO\x16\xe3\xa4\x08\xda\xcb~\x04\x85MF\xe9>\xbf3\x86X\xa1\xf4\x8a\xffX\xe2\x8f\x9cq\xc5\xdb\xf5e\x81\x0eZZ\x94\xc6\x1b 6-\xc0\x88\x8e\xc3\xa9\x0es*^8\x90u\xe9\xcf\x0dD\xa1\xc4\x9esa\x85\x8b\x14Z \xa5qJ\x12{\xad\xe3\x0fj\xefs\x1a\xc2\xa8\xa2\xe8\xaf\xf9x\xa6\xbd`\x9b\xe1M\xfb\x0d6\xc5g$\x8d\x03rE\n\x8a3\x8b\x08#D\xc1j\xbd$T(\x12h(\x90\xf8\xb1\x96*\x89\x0fk\xda\x9e\xbb\xa0\x1bqe|9\xb5\xff\xafq\x9c\xe5\xcdj\x1aoM\xdf\xf8\xfb\x0f\xd6\xbd\xbc?\xdb\xf5P\xac\x08\xe6n\xe0oh\xd1\xb1\x04)\x04\xaf\xaa\x8a\x81\x85\xca3q\x1a\x93\x8a\x01\xf9`\xbb\xad\x0f\xeaW\xe3\xe7D\x19\xc0R\xfb\x12\x88\x03\xfe\xa64I\x7f\x8e\xc7\xc1\xe8\xe9\x8e\xbeM\xcf\x8e\x1c\x93\x8c\x1f\xe1\\cVF\x9ct\x84x\xb3\x03I\x1elH\xf2\x7f\xd5\xefa\xe9\"\x1asj*\xee\x84y\xccO\xb1\xd5\xe9x\xe2\xe4R:\xac\xb4z\x98\x9fP{]L\xc3\xbf.I\xfa\x19G\xd0\x1f\xd38z\xc5 <\x16LV\xb3\xfd\xef\xa7\xd4\x92\xd2\x0f\xe96X\xe8B%DsXD\xecm\xf1\x88\xbd\x04\x86\"\xa5b#s@\xaf\xb2\xee\xf3\xb33\xba\x1c\xf8\xa5K\x12\xdf[\x17\xfaT\x19\xa8N\x95`,\xcd,H\xc4dP2z\x19\xbc\xd8\xfef\xd1\xec\xdf\x84\x98\xfcl\x16\xc4$\x01\xaf\x08}g\xf4X*\xc5\xbb\x96\x82L\xf1\x10La\x9ea\x81\x12\xcfN\x9f\x1d\x83)ya\xa2t)[\xc2 \xb4\xdb\x01<\x81\xf8\xc4\xc1\x19\xe6\xf9{\xe4B\x01\xde{\x8c\xa0Mg\xff\xe9\x08\xfa(\x05S\x01d\xb7\x8ftgp\x08\"\x03!N@\xc0\n<\x1d\xc1\xdeQ^v\xff\x10\xcb\xd6=\x7f\xf4\x08\xf6\xf6i\x81\x8c\x12\xc6\xc9\x04\x83F\x15\x96\x89\xfe\x01Zr\x80\x12K\x1b\xfb\x1a\xb0*[\xfdJ\xd8\x01\x82uup\xc4\x1f\x88\x0e\x1e\x17_\xf5=D\xe8\xc1~\x0e=\xee\xe5\xd0\xe3\xc3\x1c\xda\x1f\x0c\xf02(\xce\x13\xce\x11\xa5\xe0\xac\xcbe \xce\x9b\xf5\xff\xfe\xc5\x9fY\xb5\xfbPuz\xd78Q\xc8\x18\x8b\x1a\x18\xf6\x0dO\xdan \x91Y\x8a\xcfJt\xe5r\xec\xeeX\xd6\x1b\xbew\xf2\xdb:\xa1\xdd\xef\xdf'\xb0\xa76p=\xad\xd8:?'\xc9\xa7\xd1,[\x12\xabJ\xb5y\x9a 9\x8d\x82\xc3T=\x98K\xaf\xceQ\xc5x}9I\xbd\x94|\x7f\x99]\x06a24l\xdadM|\xd33\xfa\xf1\xb0\xcdd\x08\x99Y\xc8O\xc8\x92\xf8i\x14'C0\x04c\xd2\xbf\xcbR/\x19\xbb\x068\xb6Y\xe6\x13Zs\"\xa6\xc2\xdc\x8f\xbc\xaf\xd1F}\xf5\xf4}U\xf1\xf0;\xfa_\xefU\xf9mn\x87\xf6~\xffX\x89\x90\xcd\xed\x0c:\xbb\x84o\xd3'{J\xa0e\xfeh\x7f\xaf_}\xe4\xe5\x8f\x06J\x90i\xd1\x87\xbd]\xc79\xf9N\xfeL\xe0\x0e\xf8z\xc5O\xca\x98C\x81\x9f\x05s8\xa9\xa0)\xe3\x06_U6\xa7|+G\xa3\x10\x93b\xe6\x05!=\xb65\x1c\xac\x0bC\x1d\xa7eEF$\x93\x19\xbc\xd8(i\xd9\x8fC\x9d\x84\xb9\xd1\xbdB\x99\x07\x1e\xb4X'a\xb1\x1c\x97\xd5 \x93\xdfQ\xbf\xd1q/\x95[B\x97$\xfd$\xf2\xbd\xe5s\xdc\x04\x9b\xc5\xfa\xb3{\x18\x8c\xd8\x8b\x13\xf2\xd3\xde\x8a\xbf\xea\xd8\xb1\x18\xfcv^\x0erC2]|\xdc\xe9t&a\x16/\x87`-\xd2t\x9d\x0cwv\xd6$M\xd2(&\xdd\xe4\x9dwyI\xe2n\x10\xed\\\x0dv\xc4\xaf/\x92(\xb4&\xe1,Z\x9d\x07\xb3!X\x7f\x85?\xe8d\x815 \xd11\xddK\xa3\xf8\x07\xa5:\xa3p\x19\x84\xe5\x1aEAk\x12F^\x96.\x06\x9f\x91Y\x10\x13?-\xde\x1c\xee\xec,\xe9\xbc-\xa2$\x1d\xee\x0ez\xbd\x1dV\xb2\x13\xf3\xa2\xddE\xbaZZ\x93\xf0\xb1v\xd0\x1bQp\xc9\xb5c\xd07hR\xe3\x87\xa9^\x7f\xdc\xdb\xdf\xebi\xb7od\xc4\xdcZ\xf4Q\xbcH\x85\xb5\x120\xfe\xa6\x88\x15=#\xeb\x98\xf8^Jf\xe0\x853\xc9\x91&K\xc8\xac\xdb\xe0C\x03\xf2\xfct\xa9\x98\x87#\xe9\xc9IK\xbbg\xfe\x82\xac\x98uu\xf7\xa8\xf4\xe4\xe3g/?9{\xf6\xf1\x8b\xf3\xb3\xe7\x7f\xed\xc5\xa7\xcf\xb8\xc1vP*\xf3\x93g\xaf_\xc9\xcf\x07\xbd\xdd\xd2\xf3\xe7\xaf?{Q~^~\xff\xa3\x17\x1f?\xfb\xc1'o\xce\xab\xed\xec\xefj\x8b}\xfc\x83O>\x91\x8b\x1d\x95\x8b-#o\x86\xa1\x02\xe8\x97\xea\x83g\xf4P\xc1\x9f=c\x17\xce\xc4\xe3\xc4\x9b\x93O\xc4\xbb\xe2\x87\xae\x80\xa8C\xfa-\x17\x9be\xab5\xc6\x0c\xa4_\xaa\xef\x7f$\x1e\x8a\x1fr\x81\x9f~\xf6\xe9'/\xae}\x82!\xe89\x1e\x96\x86\xf6\xe9\xcbW/?}\xf6I\xddZl8\x87\xe6\xe9K|/D\xd5\x81E\xbfY\xa5gH\xe1\xd8C\xfcZ~\xeaG+\xee{\x12\xd9\x16\xffQ.\xe1\xcdf\xcf\xa5\xf0\xe1X\xb0\x0c\xb3\xee!\xdfI\xfe}\xd5\xab\xfcA>\x9b%0\xbfD\xa5h\xa0\xb3|\xeaJ`/\x9f\xaf\x128iVH\x97_\xf0U\x85\xf2\x1cF0(\x83(\x92\xed\x96A\x14u\xf6\xca\xa0\x85Z\xd7L\xad\xebJ\xad\xeb\x86\xb9\xc2]\xf7z\x9d\xc9u\xefhr\xdd\xfb\xde\xe4\xba\xf7|r\xdd{\xd1\x99\\\xf7?\x9e\\\x1f~\xdc\x99\\\x1f\xedM\xae\x8f\x0e:\x93\xeb\xe3\x8f'\xd9\xc7\x1f\x7f\xfc\x02\xff\xffxz;\x9ed\x1f\x1d\xd1\x97\xb3\x8f\xbe\xf7\xf1\xc7S\xfb\xb4E!\xcf\x19\x84\x96pn\xed\xd3\xe1\xf8\xf3r\xb1\xdb\xcf\x9dJ\xb1\x9dr\xb7.y\xb7\x8e\xf6\xcb\x1ez\xe5R+,\xe5N\xc6\x93\xe9\xe4\xab\xc9\xfb\xea\xe3s\xfa\xf8s\xfbt\xd8\xbam\xb5n[c\xaf\xf3\xe5\xa43m\xb7\x9c\x0fv\x82r\xc9\x8b\xa2\xe4\xf8\xf3\xa2>\xc7>\x1d\xfe\xc4\xb8\xd79\xf6:\xf3\xe9W\x83\xf7\xb7\xec\xfb\x97\x93\xce_9\x99\xecLN\x87\xdf}4\x9a\xb4'\x1f\xb8\xe7\x93n\xeb\x7f\x98|\xf8xbO\x1c\xfa\xf6\xd4\xf9\xf0\x83\x9d@\xc7\"\xde\x19YD\x9f_B\xc33\xe3.\xfb.\x11q\xb5\xaakcU\xc7EM\xbb\x83\x0dj:\xdb\xa6&\xec\xdf\xb6}}alao\xaf\xa8\xea\xb8/}\xdf\x95\x9a\x18\x94~\xeco\xd0\xe03\x83yG+\x9e\xee\x1d\xa1\xb9\x02\xa5K~\xd2>\xc5 9{G0\xa4\xc7\xea'\\\xef\xb0;\x80[`\xc9\x9c\xd91\xbb7@}O\x87\x16j\xd3i\x19B\xa7_\xdb\xb1\xd7\xe6\x998\xca\x15]\xd6\xa4g\xb1\x96s\xc8\x7f\x87\x00\xb9\xc8\x05\x85\xf4\xfb\x07\x12(\xc5BU@?_.\n\n\x19H\xae\xe9\nA\xbd\x81\x04\x9a\xb3R{\x12(f\xa5\xfa\x05\xe8\xbf\xa7\x90]\xe95\xd4}\xec\x16/=\xb6\x1e\xc3\x10\xf6\xa4a\xec`\x0f\xe5\x96&\x14r(u\xe7\xff\xf9y,\xb3/A~\x13\xcb\xc8#E\xaa@\xa1G\xbd\n\xf4\x98)\xabk\x17\xe1\x8b\x9a#\xc6\x93\x11\x1c\xec\xef\xef\xee\xc3)W\\a\x96\xe9\xe7\\\xdfd\xa7\x85\x03j\xf9\x01K\xe9\xd9\xa6\xa7\xb5\x0e\xd6p\x00O\x9fB\x9fJX\xfb\x07\xbb\x83^\xf9\xd1#:\xdf\xbb\x8a\x11\x15\xe4\xd3\xd8[\x90\x13\xd3\x0e\xf6\x0f\x1c\x17^j`\x9f\xb2\x84r\x9f\xc2\x13\x18\xec\x1f\x9c\xc0\xa7\xed\xb6\x03o\xc7\x9f\xd23\xd9k\xfbS\x87\xc7\x19\xe8\xb9\xf0\xb2\x00\xea\x88\xd3\x1b\xad\x1e_hb\xc9;\x08P\x01C\xdeQI\xb7;\x0f\x96$\xf4V\x84\xb2\xf6 \\g)\xde\xdb\x8f\x92 \xc5;\x96i\x97\x9e\x1fd\x18t8\xf0,\xf5\xe2\xb2\x9b\xbc\xda\x97\xe7\xda\xbe0Q\x99\xf7\xb3\xf6\xfd\xef\xeb\xdf\xefF\xe1\x0f\xbd8\x0c\xc2Kv\x96\xcc\x7f\xf2\xeb\xea\xe8y\xca\xeb\xd7-\x0e]\x97\xcf\x94\xd3\"\x15\xd9\x86\x8d\x16\x1a\xf1\xbe1d\x0b?\xa2\x8f \xed^\x918\xa1\xc3x\xf4\x88\xcd\x845\xcb\xd6\xcb\xc0\xf7R~3\xf5'h\x93\xc0\x8eT\x98Q\xca\xe5\x91\x0fC)`\x15{\xb3\\\x12<\x9f\x8a\x96 \x90k\xcfO\xf1b*\xc9U\xba\xb4\x9a\\\xe3n\xc7\x8c+R\xa67m;\x93\xae\xf8\xf6\xc1N\x97\\\x13\xdf\x0e\xc7=\x1e\x03\x8d5\x14,\x97\x9dy\x14\xafdw\xffh\x0e\xe9\x82\x80\xda[*\x8b\xa1\xf4\xf82L\xedx\xdc\x9f\xbal\xafDe\xf8@\xc0\xa5\xb8\x8e\xac\xb5,d#\xc1lhX\xbf\x983\xde\xe6,\xf2\xf3A\x15\x13:\x82\x90E-\xef\xfa\x0b\xe2\xbf\xfd$\x08\xc9\xf7b\xe2\xbd\xa5\xe2[Dw\x90h\n\xef\xdc\x0e\x8a\xaf\xdf\xe7\xad&\xd9\x9a\x8a\xb1d\xd6\xd0hiu+*\xb67\xcf\xfe\xeav\xe8\xa2\xe2\xca\xc0\xb0\xdao\x9e\xfd\xd5\x9a\xc5N\xdfE\x85\xfe\xdf\x12\ny\x16\xd1\x0e\xbf\xd1u8\xef\xa6$I\xed\x18\x03@(K\x9bz\x97\xb0\xf0\xc2\xd9\x92\x80=\x0f\xe2$\xcd+t\xc4$\x94\xfa@[\xc9C*\xa4\xde\xe5\xa7\xde\xda\x85\xb8@\x9b\xc7\xe9\x82\xc4\x84\x1ep=X\xc7\xe4*\x88\xb2dy\x033\xe2/\xbd\x98\xcc \xc9\xe6\xf3\xe0\x1a\xa9\xa2\xf5\x18\xda\x10C\x1b\x1e[R7\x1e;.\\\xb0.\x07\xe6.\xafcB\xab\xb1\x13\xe2G\xe1l\x83>\x8b\xce2\xbf\x87r\xe0\xfc\x92\x96Q\xa5=\xaf\xc4\x92\xe2@U)\xa4\xc8\xdf\xaa\xaa\xe9\x08<\xd1\xa3\x02\xbac\xb0\xd8;\x94\xd8\xf2+\x1e\x888\xb4\x19\xa5<\x08V\x120sz$E\xf5f\xf9\x08\"\xfa\xa7=\x82\xbe\xc3e\x06t\x0e\xf0\xaa\xb6\x15&\xfb=\x19AF\xd7,C\xb9\xa7\xdf\xdf\xeb\xf7\xfb\xc5d\x93\xeb5\xbb\x83\xcf\xa2\x1c\xfc\xe4\xd9\xebW@\xab\xf1\xfc\x94(\xb90A\xdc4\xbca\xab\xe6I4\x84.E\x92\xc6\xc4[\xa1\xc3\x81\x17\x84 \x84Q\xd8Y\xc7A\xc8\xb6z^m\xa2\xab7\xed\xc6$\xc9\x96\x98/\xd53\xad\x99f\xc9>)\x96Lqo\xb9\xe2 \x04\xd0-\xac\xe2,\x833\x1cw\x83\x84\xa7\xdb\x0f%\x0c\xe4\x1a\x9a\x15\x89/ \xac\xbc\xf5:\x08/\x93\x13\xc4\xb6u\x1c]\x053\x8a\xddQ\x16\xfb\x84\xe7o\xa6\x9b@&k\x96\x93\x87\xd8\xa4\x87E[\xf2*xKn\x12;t\x9c|A=x\x02>\xfd\xc3\x164\xc3\x80\x8f\xde\xd4\x95\xe2\x9ce\xd87\x9b\xb0\x90\x94!\xfa\xdb\x04\xecG\xabW\xcfM?\x920Z\xce?\xac\x9b*\xdf\x85\xb9\x8a\xd7Aa\x08\x0cd.\xc3S\xf2\x08#\x91\x95z\x97\xc3\x1bo\xb5\xecF\xf1\xa5;\xe8\xf5\x06C\x9c?\xe6q\xabAsZ7\xbb\xeb\x18$L(2E>\xc0\xa5\xe2\xae0\xf4\xa0\x1d\xe5s\xe7\xc3\x13\x98\xd3?l\xee\x04.Dc\x1fS\x90\x1b\xb07/\xa6\x96\xc1\xe7)\xea]\xe9\x94'y\x8cb\x9e\xde\xa9X\x13\x06\xb0\x99\\\x04t\x8f\xdd\xde\xeaD\xa7\x11x\xecI!`\x95\xe5\x022\x13(\x06o\xc9\x0d&\xe0#\xe3`\xcaB$\xe5\x97~\x83\xe6D>\xea\xe2\x7f\xb9\xd1Y\x8a\x1f2p)\x05\x8d\x92(I\xd1s\x87\xdd\xe8\x12?\xdbmz\xac\xd8\xe5\xc8p\n\xb6\xfc\xc8\xcd\x8f\x9a\xb552Y\xaex\x8d\xca\xe8lz<\xc0\x89\xbd\xa0,\x9en/A\xa8\x18\x85\xc7gmt3\x92$S\x1c\x80\xa8\xacvf>6\xf1\xee\\\x86\x97s\x0e\xd5\x0e\xe1\x84;\x10\x04\xda\xb8\xac\xdc+\xeb\xda\x0e\x1c\x1e}TS[\xbb-\xd7\xa7\xdd)\xb8\xdbv\xd9\xd1\xca\xe0!7\x8bj\x0c~\x9b\xb4\xac}\xf9=\xbc[\x04Td\xe8\xf7\nA\xae\xbf[|\xe7`C\xbf[\xef\x90\x15\xe12\xaa%pv\xbeD\x07\x83\xe6\x89v!\xa6x\xc5\xd6\xfbe8\xa3R*\x9e\x9f\xf8A\x96.\x80\xfc\x90\x16\xdez\xd8\xefu\xbb\x8c\x87\xb0\x0d\x8b\xe1\xc6\x0cq\xa5\x9e\xcd\x0c\x99\x06\x8f{\xc16\x08\xe3\xbe?\xc5\x89\xfb\xd2\x85V\x1f\xbd\xe3\\\xd1\x94@\x0e\xa7\xdc\xbfM\x1aw\x0bf\x8f\xb4 g\xf7|HO\xb9\x83\x10\x9f`\x87\xf3\xb1\x0bo&\x13\x01zj\xf1 !?\x9b\x91\xd0'@\xc24\xbe1\x8a\xd9\xcc\xc7\xacDd\x88\x96\x96\n\x12\xd0\xf28\x8e\xd0\x83\x13Kd$p\x07\xc5\x89\xb4\xfb6\x08g0\x02K\xf4\xc0r\x8b\xcd\x841\xc6\x9a\x04\xca\x9f6\xd3\xa8\\\xc4D\x8c\xd6\xef\x80*\xa6\xd3!\xee\xee\x16\x11\xc2\x1b\x04\x90\xdc\x7fBW\x8f\xb4a\xe8\xf8M\x1a\x18\x8f\x1f+\x99i\x87R\xe5\x03.\x01m\xc2-0\x12m\xc41~\xb3\x17\x86\xb0\xcb\xa4\xa4@D\xb1\xc58\\t\x19Z-k\xf3Z\xd8\x1b\x16\x0b6 \x0b\x94\x91N\xf20\x8a\x03\x9b4\xa7\xbc\x98\x8b\x01\x92\x14p00\xb2~\x89r<\xc9\xb3\xf8\xd1\xd1\xc7\xba\x83pi\x97m\xd2\xbdBL\xcc\xc2\xfc\x04K\xc2\x99\xd0 \xf0\x83\xe8\xbb ]\x04!xpE\xe2\x0b/\x0dVt\xe5\xab\n\x1eS\xa8#.\xb9I\xe3m\x9d1)._M\x96D\xe0T\x9c\x80\xbdK\xa1\xf3\xe0\x07H~\x10\x06r\xed/\xbd\x15C\xc0\x95\x17\xbfM\xac<\x0eqe.X\x16\x85\n\xdd\xcd\x15;\xf2\x195\xf4*:\x9dJ\x9bI\xe6/JGn\xe6\xa5I1\xaf\x8c>\x8c\xb4o6\xef\xeaB7\xaf\xe7*WJ\x15\xba\x02\xe3L\xcd\x97\xd1;J.\xe9v\x8d\xe2R\xff\xcb\xab\xa6#\x7f\xc8\xc8Z\x17\xfa\xf60\x99u\xfd\x1c\x0d\xd1m#F]\xe6)\x08\"\x1a\xc3PU\x83\x85\x8eT\"W8\x85STs\x0d\xe9.\xe5\\\xa2(Ea\xe2\xa9\xee\xb1z~\x16\xe5\x99\xb6-\x0bs\xcd\x9a\xb4\xea\xa8Y\x0bQ\xb3\xf6\x18=\xc1k\x89\xf7\x0f\xcd\xc4[C\x96\x8f\x18Y\x0e\xefA\x96\xcd\x82\x8c\x9e4\x87\xc0K\xc8\xe4\xd9\xd0\x81\x12fV\xb1Zl\xdc\x90o\\v\xd4l\xbd\xb0C\x07\x93\xc76\xd7\xa8\xe5\xb0\xd2\xb6\xc9u \xc5~,\x0f!\x8cf\x04VYR\xe0\x9b\x97\xc2\x92xI\x8a\xaa{I\xcbVb\xd3\xf5\xbb\xa9a\x81\x7fJ\xd2\x86i\xf8\xc2U~I\xf2\xc6\x85K\x17V.\x9c\xbbp\xe1\xc2kf\x8c\xd20\xed7\x06f\xfe}\x033\x97\x16{\x19$) I~Vb\xbfl+Zc\xd4\xd9T\xe8j\xa1\x88\x1e\x9d\xcf\x82\x00pyE\xfc\xcc%\x15\x06@\xb5'\x8c\xd0\x19b]\xc8eLA\x85A\xeb\x1f=R\x04Q\xfbM.\xaf\x96\xc578e\x93\x00\xc3\xca!\x93\x9f:\xd0\\W}\xf8\x84+\xc2>E\x97x\x07\x0d\x1e\xf4\x85O\x0d\xde\x9a'L\x82\xba\xbd\xc5\xcdx\xe2\x94\xbbwZ\xf4\xee\x86\xc9c\xdfJ'a\x88\xd5\xeb\xd6\x8f\x07j\x80\x11\xbc\xa1\x9d\x8cr\x0b\xce\xa7\xf4\xc1\x9ao*z\xea\xbb\x80\x11\xf8\xc5\xa4\xcfs\x92F\xf0<\xd6\xa6\x9c\xecu\x99\xd5\x94\xec\x88\xf9L\xc1)\xbf:\x8eg\xaf\xd789\xdb\xd8X\xdcB\xc9\x9b\x98Og\xc0=w\xcc'4\xe0^;_\xd5\x8475=\xcb\x91T\xfb\xf4\xaa\xf6\xe9M\xed\xd3K\xc3\x06\x04\xeeG\xa3\x0b\"|\x87\xf3\xe3\x92\xab\xac7;?z\xc6$D\x18\x84\xa8\xa9\x1e.\xd6D\xd2\xa1-\xab\xc8\xb4\x07\xecP\x80\x07\x9a\xfd#\xfe\xfd\xf6\x96\xd2\xf2\xb8\xf9\n%\xd2\xc1\xd0\xc5[\xaf\xec\x08h\xd4A\xc9\xefI\x07<\xadL-\x7fX\xaa\xdf\xa6\x91:'pm{t\x9f\x1b\x8a6\xc8W\xf2\x87\xf6p\x9f\xf9[x\x0e\x9c\x99\x1a\xafH\xca\xb9\xc4\xe8Q\x11\xfe\xffc\xee[\xbb\xdb\xb6\x95E\xbf\xf7W\x8cx{\x1c2\x92\x15I~$Qlk\xa5i\xd2z7ur\x9a\xa4\xfbt\xcbj\x16-A6\x1b\x89T\xf9\x88\xed\xbd\xdd\xf3\xed\xfe\xb1\xfb\xcb\xee\xc2\x0c\x00\x82$@\xd2N\xd2\xd6k\xb5\xa1@\x10\xcf\xc1`\xde\x93\xb2d\xe3\xcf\xb5\xdbG\x97\xad\x82\xbf\xe4%\x9c\x82\xfe\xc0\xae\xb7\xd1w\x02\x12\xb6\xf1c\xa4\xc6\x149}\xb6\x8a\xe6\x1f\xa4\xd4\x9a__\xc8l\xb9\xa8kX\xf5\xf2\xa88Z\xc4\x9b\x8f\x02K\x8b\xa2\xb5@r\x02\xb8\x91\xf8\xe4\xff.\xd4\xf9\xc5/$\xc2\xaf_\x97\x86\x9c\xcc\xf2\x0f\x01c\xad\xb9g\xd1\xd5\x93\x14\xee\x9d9\x07\x96\xfa\xee\xf8\x9f\xd2\x13aD\xd8\x98\xf9\x0b~\xf1\x07kN\xcd\x04\xa9\x12\xe8o\xfc ~\x02>\xcc\xa3U\x14\xf2\x95^\x07IR \x9bW\xfe3\xbbKC\x1d\xb3\xa2\xff}\xaey\x9a\xe6X\xdcz\x12_\xf0 \xae\xb3U\x1a\xe0\xd9\xf9\xc0\xaea\xed_\x830q\xd6W\x05\xd5\x1b\xf6\xb9\x19\xdf\x88\x19\xef\x13\xcb\xe5\xf3\x0b\xf2\xd3\x80Mp\xed\xe42yN\xedi08\xc8Y\xcb \x9cG\xeb\x0d\xea_\xd8\x95ec\xf9l\x91\xceS{\xfb\x04\xa2\x18\x96\xd1j\x15]\xb2\x05\x9c]\x83\x8fj\xd0\xd4?\xcbV\xa8\xeca\xebMz\x8d\xca\x0d\"\xfcr\x9c\xa8\xbc\xa6c\xf3\xc6P(\x11\x0dEYeP\xae\xa4\x037DZ\x04T\xca\xa7\xab\x1f+A\x06hB\xb1s\xbc\xd9+k{-b\xd9\x1b\x97\xb7(Hk\xc6\x88\x9e\x81\xa8Qr3\xbfVnV\x80;\x9b\x17c\x93\xe8\xac\xf2Q\x15\xf2\xc4\xd1AH\xb3\x01\xda\xba j\xab\x9c\xae\\\xd4&\xf1d\x81~\xc5\x16\n\xfd\xfe\x81\xc4O\x0f\xce\xbc*\x01d\xa3~\xcaZ]\xccY\xb3\xd4\x93\x88u,\xf9\xc6\x17\xf5\x84\xd2\xc7FB\xe9\xda\xe0\xad\x04\x02H\x859\xa8\xbbi\x86\x05\xd2\x89=\xde\xe9 98IbM\xe9\xc9k0\x1f\xefs8\"\x82ac\xe5EUmN>\x8f\xf6D\x8f\x03\xea\xf1?M\xfeip7\xb2*\xf6(\xc3T\xd3=- \xabM-a\xa5\x8e\x1a\xf3z\xad\x96W\xe8\x0b\xab\xec+i\xd2\x08v\x17\x05\xd8\xfd\xa8\xc1.\xc7\xb7\n~al\x13\x1b\xc7\xf6\xcb\xe4\"\xa7?\x08?\xc2>9\xc5\x9f\x04\xe1\xf9\x8a\xc1\xefY\xc4\xab\x8a\xbdGZ\xa2n\x96\x86\x83t\x1b6\xc3\xdc\xe9\xe78):\x83a95\xbb\x04\x1e-\xc4t\x9f\xff\xd4`\xe2m\xf3\xa9i1\x9eZ\xc9\x88\xf0]\xf5\xd5\xa0\x8d\x18m\xe0\x95\x87d\x03|\x14c\x8dd\x9b-\xce\xa2\xa9\xab\xcbv*\x1aO\x87~\xfb9TrM\x9f\xfcE9\xd0\x7f\x98\xfa3\xafp\xc1\x1c\xa3\xef\x88>\xc9\x16-Rp\xd1\x910\x83\xe3\x1c\x8b\xcf\xcf\xd2\x08]\x89\x1f*Vf\x17\xc6\xf0hO\xfd\xe4l\xc3\xc0\x83#\xfe\xbf\x16\xba\xb2\x80\x14\xda\x11\x19m\x07\xfc\xbb'\x10lo{\xd8\xfb\xd3\xb6k\xc5\x99\x14\x0c\x1b\x87~5\x07\x07\xb0\xebA\x172\xc5R\xa9\x13x\xc1\xae\xfc\x05\x9b\x07k\x7fU\xef\xd2\xa4\xff\xe9K\xf9\x9b\x1b\x95\xe0\xc5N\xb7\xd0ZJ,\xf0!\x8c.C\x10\x11\xd3\x94\xcc\xac\xa6\xeb\xea\xc9\xa8\xc7\xa4~\x8eI\xe9\xe8\xdb0i\xb5\xe1/\x84I\x17Qv\xd6\x06\x93\x96\x06\xd3\x82\x96\xb8\x0dj5\x8f\xc2\x88Z51NGC\xb26\x0c+\x0c\\\xcdXu\x97d\x18\xcd\x8a\xef6X\xd5\xd2H+s'2\x81{#\xac\xdf:\xcf\xdd\x98\xa3\xcd6-V\x07s+\x93\xa7U\xe0'\xb7\xb2x2\x18?\xf6\x8a\xa6N\x9aH\xbd\x14\x8eE7\x84\xbc\x97\x85J\x0c\xb0\x10\xe3(\x19\xc5iw\x92.\xa6\x0fge\xddU\x95\\\xe5`rWS\x14\x94\xba.\xa5\xbc\x95\xdf\x94v\xe1\x9c]\xd1\xcd\xc1\xeb\x8d\xbbl\x06,\xbe\"\xcf\xdd%\xb9}\x12\x92F\xa6w\xe7Q\xfe\xbc;\xd2\xcaw\xf2g)\xe8\xc3\x1f\xfbz\xa5\xc7\xda\xb3Vg\xe7\xa1V_+\x7fL\xa1\x1e\x96\xb5P\x8e7\xce\xbe\xd6\xbd\x10\x9b-IF\xff\xa6\xf9\x18 \xee\xec\xe6\x86\xec\xfb8\x98\xb78X\xcd\xe4J\x80\xbe\xe4ErWX\xad\x8b\x03\xb6\xac\xa5B\x84u\xc6\xb2\x89b\xb8\xe3\x14k\x98g-\x8f\xef\xce^\xdbA\xd4\x0f\x00}eZ\xf4\xd9$\x95h\xbcj\xf29.\x9b\xa5\x8f\xbc\xcdK\xac\xd8l\x05\xe1+1\x8bT\xd3h\xc6gsU@\"\x13\xed\xe6DdP\x14\xdc\x1c\xda\xb3t\xe9\x7f\x99\xc6\xbf\xdfYZ%\xfej\xe3\xb6\xcb?\xbb\xc0\x04\x8af\xf8\xc2\xff\x83\x8c\x078~\xd2wB\xe8\xaf\x0b27Kr\x01\xf9w\x179\x8e\xb9\x14\x15`D\xcb\x10\xfe\xec\x0c%-#\xc6\xbb\x0d\xbeWw8\xbd\x1e\\ \xcc\xe7\x16k\x08C3\xcbv4\xb8<\xd8n\xc4\xf2P;\x1d\x85F\xc8%X\xa0\x99\xa2\xc5\xea\xa6*Q!R\xa4'\xad( \xfd\xbd\x16 \x94\x07\xd0\x96\xde,\xca\xd8\xc0\x998(\x9b\xaa\xa9\xab\x95\x08\xcdnn\x07\x96\xdf\xd5\xc9E\x94\xad\x16h\xabs\xe1\x7fd\xe0\x87\xd7\xd2\xf2\x1a\x95\xb0\xd2\xdf\xbb\xb5\xba[\xe9\x15s\xd1\xd9\x8fjVh\xe4)l\xe1h\xf5\x91\xb9\xda\xd4\xeb\xf1\x84\x06\x13\xef\xfbs\x19;OwM\x93\xfb\xfc\x9e4\xccw\xdc\x82\xcf{~\x05\xb2\xcf=!\xae7\x8c\xbaFh\xbf\xb9\x01g\xe9\xafVg\xfe\xfc\x833\xeb\xc9\xed\x99\x80X\xb7\xda\xeaS\xac=+\xccT\xac\xd1\xd6\x16\xbc\xa7O\xa8\x18\x1f\xcd\xa1d\x10\xa2\xf1=\xdf\xfe\xce\x01\xc6\xe0\xc4\x95\xec\xc2\xbd#H\xfds\xd4< \x98?\x13\xbe\x13\xa2uN+\xf6\xf0 `i\x9a\x97\xdeC\xff\x9b\xca.\x93\xc3{\xd3N\xdeq\xebr#4\xa1'\x13\xdd\xa31\xd9\x82!\xbfS\x9a\xa1s\x94+\xe1\xd0\xcbI\xf7\x91\"~\x94W,\x7fdI(\xd5\xc2\x8a\x7f\xbe\x8a\x12&\xcc\xf8K'\x99_\xe8\x95\x89\xdf\xdc\xc0\xeb\xafr\xf8R\x8f\xcaw\xe1\x87v\x9e\x85\x1a\xfa\xaf\x00\xa9\xc9\xc3P\x90~Z\x18!\xe1KP\x0d#\x94\xf6W\xec\xdc\x9f_\xf7\x94K\x8f\xc8l\xa6m\x18\x99=I\xb1U\x0b\x97E\xdc\xf1\"\x9f\xd1\xfcU\x0f:nIs4\x10tw\x07-z\xcc\xd20\x9ck\x06\xed\x9d\x13m|d\xc1\xdf\xadMC5\xbc\xect\xd63\xfa\xba\x15\xd8=\x19\x0f\x05\x0e\xc8\x8d[\xb8\x07\xa9xH\xc8k\"kiR\x1b\xeb\xe6\xcc!PKNCd\x06\xf8L\xd1\x19\xa0\xa8\xa1\xad\xcd\xb1\xd4\xa8\xa3m3\x04;\xd26\xf8hR\xfc\x05\xfbUPC\xdd[gZ\x1b\xd2\x01\xe4\xb2~1\xc0\xe2\x7f\xb1t\xe7\xae\x81\xa8\x16\x04\x9d6&\xd2;\x8b\xeb\xed'\xe1\xe1\xf7\xd34\x9cI\x19\x1b\xc7\xa7\xaf\x85\xc4\x81\xf0\xa9\x12\x82\xe5`Z\x90<|e\xef\xbc\x88\x0f\x06\x1ak$\xce{\xee\x9e_\x8f(\xdaV\xa4x\x0e\xed+\x8f\xbcbD\x17\x11\xe1A\x1f7_\x90\xccpV\x13\x14\xd0\xad\xfd\xb8\x12\xb7\xe5\xe7\x9c\xa6\x17\xd3D;\x8d\x8df\x9cV\\\x98*\x92\xde\xda\x82sr\xf0,\xee}T\xdc{P\xa18\xc2(\xdc~\xfa\xe6\xd9\xf1\xb1\x16O&\x01?f\x10\x84)\x8b71C\xc7\x87\x04\xd9-\x15tNnmR \x1b\xd0\x82\x9f\x9d\xc0\xee~\xf3\"{\x82\x14hXa\xad\x82\xe6I\xbd\xadc\xc9\xaa<4\x8aQ\x16*\xc03\xf7\xe0(\xecG\xede\xfc\x9dk\x8c\xc2XL\n\xc3d\x86(~G\x0e$\xbd\xa0\xe2\xda\xc9\x901\xa5\x05\xc8\xa7\x80K b\xc9\xd4Wrs\xf3\x82\x1e\xec\xef\x8d\x1e\x8aX\xa9\xfaG\x03Y\x93\x97\x8b<\xfa^\x19\xf7Q\xb2\x04\n\xc5\xd9\xa8YK/\x82\x84\xb6\x100\xfd\x01\xfe\x96\xd131!\x92\xfa!H\x1eQ'\x91\xf1\xd8\x99|\xbc\xb9A\x9e\x9b\xbf\xcc\x03Y\x1eb\xda*\xf9\xab\xd8\x04Q\"XE<\xde\xdc\x90\xd5\x02\x7f\x8b\x01\xaa\xf8;\x19\xa9J\xbdQ\xe4\x1a~)\x7f\x14\xdb.01|j\xf9\x981\nx\xb0b\x8bcQG|\"\xe8wK\xe5\xb7\xf4V\x0d\x1d\xf7.\x07\x06Q\xae\xc9\"\x06j\xb4(\x8e\xd0\x7fJ\x89\x84^\xa6\x1b\x02a\xa1:\x9fH_\x14\x11-m\xa7\x81\x08\x0c\xc5^\"$\x0d\x1c\x158(\xac\x1e\xd3P\xbb\x80<\x08\xf5A\x90\x9bFX8\xb7&\x92\xf3\x89^\xe7 \x0f\xf8\xb8\x0d\xc3'\x1e\xfc\xe0Z<\x8c\xc3|n\xb5\x07\xf4k\x9b8Z\x13E\xc3!\x9d\xe3rW\xc8G\xcb\x96\x1c\xcc-B\xf9\x88\xf3\xfc$\x91aFZH\xac<\x04[\x0c\x07\x10\xf0\x7f(\x04\x1bs\xa3i<\xab\xc7-\xdf\x1b\x0f\x9c<\x99\xdf\x99\xf6/XJ\xaa&T\xc9\xaf\xaa\xe7\x95\xd7\x1a\x8a-\x95\xb5\xe4\xb2N\x07\x06\x9f\x82<\x81C\xe0\xe6\x8aC\xa5\xa1W\x184\x085\xec\xda\x83\xb3,\x85e\x94\xf1[.\x8a\xd9\xad\x128\xe4I\x0c\xbe\xeeU\x93\x1e|\xdf\xb3\xe6+h\xd2B\xb4\xd8S\x04\x99\xb8\xcf\xaeR\x16.\xdc\xea\xf2\xd1\xa1\x1eCV\x9c\x0f\xef\xac\xb4\x1d\x12\xf8\xee\xd8\xd8W\xdaOc\x02\x87Z\xcc,f\xf3\xfd]gS\x8d\x0f\xfc\xe9\xe9\nL\xc1D\x03\xb7\x10z\xb1r\x97r<&.\x12\x89e\xcf\xb2\xe5\x92Pw\x15e\x86E\x94\x19\x8b\x9f\xf3h\x95\xad\xc3B\xa0\xd3\x1c\xee\x02-\xa3\xc19K\xdf\x84\xc1f\xc3\xd2\xa6\x05\xae\x98\xabW\xcfbG\x1b\xae\xa7\x0b\x0dL\xbc7\x88\x00\xf0\xbb\x1a\xc5\xf0pOD\xc0\x91\xf1o\xf4\xd9\n\xeb\x00~\x9do\xd3yvN\x07\xa7\xf1i\xf8\xff\xfe\xaf\x9eU\xc0\xe9\x07\xe1\x82]\xbdZ\xba\xdah\x10\x8b?M\xdd\x80\xf4\x17\x96\x90U\x01lS\xf0\xc0\xc2\"oc\xbf\x0c\x1e\xc0\x88(\x0f3\xb3\x86\xe3\x86~\xbf\x0f8\xf8\xee!\xec\x99\xb9\x946\xeef\xb8Dz\x1e\xbd\xd2Jd\x9c\xec\xd3\xa6\x97\x93Ww^\x9a\xcc\xba,n&\xd0\xf8vieZ\xacJ\xa4\xafJ\xc6\xd7\xf7\x13VE@\x94/\xd7CL\x80\xa8\xba\x80\\\x11sSJ@1\x94\xe0\xbc|4\x00\xefR\xc0\xfcn\xb9\x16t\x0d{\xde\xd5\xee\x8b.8\xbf::\x82\xd2\xcf\x90L\x19\xd86\x1b\xb5\xe3\x18\xef\xf8\xfc\xe8s\x82\x15)\x88{A($\x8f\xea\x1dFK\xbe\x87\xaarN\xb1\xf8)q0\x0e\xc6\xa3W\x98\x00\xf9\xba.\x9f\x9b\xc0\x04\xf9{Q@*\x10\xd2M0\xb9\xa096p\x85\x88\x8az\x19\xd3\xaa1\xde\xad\x11M+L\xf3\x89Hs\xa0])z\xe3\xfc2\x8e]C4\x9c$\x8d+\xd9\xfd>\x04\xe1b\x9c\xabs\x0b\xef\x94\xf7\xd7lu\xdb\xc6\xcd#\xaf\xdb\x17\x91\xe7\xf1Mz\xbdbcp\xd4z9\x7f\xf5q?\x8b\xa2?\xf5\xb8\x1bL\xa7Z\x1f\xf7\xc2\xb1N\xe3\x8c\xe9\xc7\xf8m\xf9\xf7O\xef\x9e\xcbc\xcd\x0b\xf6\xf4\x8f\x97\xfe*)\xd4~Q)x\xfa\xf2\xcd\xf3\xbb\xa2\x85\xbas|\x9b\x81\x7fN\xfc\xe1LE&\x81o\xa2h\xc5\xfcpF}T\xf2\xd2I\nT\xa8\xe1k\xe7^\x8bmL8\xc1\x9a\x82\\\xd2\xad0\x91\x0b4\x06\xb1KmN\xb1 E\xb4\xea\x8b\x16{,\xf7\xbbM_&\x8c\xd1\xae/9\xaf\x17\x96y\xfd\x1d\x10\x88%3\xe2m\xb3\x9aV\xf2\xa6\xed\xe5\xe344\x94\xb5o\xe8\xa1\xd6\x90|*c\xba\xc0\x84\xe9\x820\xfd; :\x12\xd7\xe8\xb2k#\xe0\x04v\x87zS\xc3\xca\"\x17\xee\xe4FU\xe8\x1a_\xe7\xbfD3\xeed\\\xbc\xc7\xf3\x1e\xa8\xf2\xe9i\xdf\x9d\x8c\x83pys\xcc\xff;y\xe1\xddPQ\xe8\x877'\xfe\xc9\xcd\xc9\xd3\x13\xcf\xfbZ7\xb9\xc7\x80\xfc\x98\xadW\xeb\x9c=\xb0K \x8d\xbc\xf3r\x15\xf9_\x84{\xd6\x85\xdb\xa4\x15\xe1\x88\xd6\xedD\x82\x80\xf1t\xda'\x9d\xeaf{\xb3\xcfN\xd2\x18#\xc1\xc8\x11\xc2!H2BX\x1eW\xa8\x91~\x1a\xbd\x8c.\xe5\x89\xe6\xa4\x04L\xf8=>\x06\x11\xfcw:\xeb\x81\xd3\xdd\xceu\xe7\x0c\xe9\x95#q\xc1\xb8d\xf2\xa7h\x91\x1e\xf0\x9a\xcb\x9c\xf4\x10\xa6G0\x11wY\xff\xf5\xab7\xc7o\x8f\x7f~\xfe\xfe\xf8\xe4\xc5\xf1\xc9\xf1\xdb_`,_\x9d<\xff\xeei\xf9\x95\xd3\x0f\xfd0o\xee\xc4?\x811\xb0\"\x85!0\x9b\xcb\xeeFf\x04E2\xe3\x05\x07\x9cZBCX\xe7\xc5Dh\x04\xb7\xe8\x8aIB#\xe6\x9f\xdb \x8d\x10\xees\xb2y\x8c\x0f\xda\xa8\xd8\xdf\x89\xd4p\x89\xd6\xe8\x1c\x92\x1b\x86\x81\xd4hKk\x14\xf0\xa4\x0d\xe2C\xb3l(HN\xfc\x13\xde\x17$\x97A:\xbf\x00\xd7*;\x98\xfb \xd3\xe5\x90cc-\xd0\x16\x07\x81\xcf\xcc\x1dQcJ\x8a\xdb\xa6\xb1\x93\xa7'\xb5\x8d)1m\xab\xc6\xfc\x13\x83<6\xf7x\xb6\x1e7!\xf4\xfb\x12\xab\xc5O\xfeg[\xad\xe3\x93\x17\x9fo\xb5\x8e\xc3e\x9b\xd5\xaab\xa0/\xb7Z\xdb\x9fu\xb9\xb6?\xebzm7.\x98\xe9\xb4\xe7\x9f\x0f\xfa\x03\xc3X\xb4{\xa9H\xf6\xf6 S\xc9\xbc&\x10\xaak\xcaa\x0e\xbfP(\x02fX\x87L\xfe,]C\x99\xfc\n*\xe4\x97\xa2\x8e\xb4\xffy\xdb\xae\xed\xc7\xd7N#A\xd7\xd8\xe2\xa4\xf4\x8b\x93no\xd3\xd9\xcd\x14NO\xd3Y\xd7+\xbc\x1c\xeb\xbd\x17~\x10}H%\xf7=\"\x10\xb1\x85\xfb\xee\xbfn\\N\x8by\xe5n\n\xdf{\x13\xcf\x9b\x14(\xb9V\xea\xdc4X\xb3$\xf5\xd7V+\x96\xcfN\xac\xe5\xe1\xca\x83>\xbbbsA\xb3\xa9\xd2H\x96~\x01r\xcd\x10\x07\xc5\xa23\xd9\x08\xb7L\xf3\xb5\xa7\xf47H\x81\xa9yx\x8a(\xcb'\xa1\xe7'\xf74\xf3\xee\xe7q\x1c\xc5\xae\xf3\xad\x9f2\xe5K\xcbx\x99)(S \xf2\x89v\xd9t8#\xda\xa7\xcb\xa6\xa3\x19y+e\xf4sg\xd6\x83\x0e\x9b\xee\xcer\xf3Wv \xbc\x03\x97\xff\xaf\xff\xee\xed3W,\x83\xc9\xff.\x10\xe1)\xba\xbc \x8aN\xd1e\xd3\xbd\x19\xc5\xa5\xe8\xb2\xe9\xfe\xac\x07l\xfapfC\xc2(p\xc5\x80\xb7\xd3\x873A\x94\x0ez\xb0\xe3=\x81U\xeeK\xb9\xf3\xc4\x83\x15\x1a\xf6\x99\x90\x14\x88\xa8\xd1\xddU\x15\xfd\xd9\xc0\x8bM\x1f\xcfp\xe1\xf9\x9e\xed\xb3]\xb8\x0f\xee\xfe\x00\xee\xe3j\x0df\xd0\x85\xae\xcb\xa6\xc3\xe1\x8c\x83\xd9@\x8a\x00qC\xf4/\xb77\x9e\x88\xcb`]6\x0dzV\x1eFS\xdf\xda\x82e?a\xe9\xdb`\xcd\xdce\xff\\\x93?\n\x0d\xda\xa5\x0b\xce\xd3o\x9e}\xfb\xfc\xc5w\xdf\x1f\xff\xe3\x87\x97?\x9e\xbcz\xfd\xdf?\xbdy\xfb\xee\xe7\x7f\xfe\xcf/\xff\xf2\xcf\xe6\x0b\xb6<\xbf\x08~\xfb\xb0Z\x87\xd1\xe6\xf78I\xb3\x8f\x97W\xd7\xff\x1e\x0cG;\xbb{\xfb\x0f\x1f=\xee>8<\x0dOc\xe7\x96\xec; x\xbe\xc4\x86\xddY\xfbm\xc1\xd3A\xa3b\x9cc\xc7\xc8\xa2\x1e\n)\xf2_H\x1eCa\x9d\x8e\xa8\xe3\"b\xcfr3vi\xbcN1\x00a\x7f\xb7Qk\xc4\xe0\x00\x06\xad4?(\x13\xdf7\xbe\xb6\xe2\xc1\x18\xfe\x0b\x1e\xa1\xf0\xb9\x08\xf6\x9f|q\x06E\xe9\xc5\xf44>\x0d\x0fgB\x86a_\xf4\xa0v[|\x8c\xffc|\x95\xd8\xb7{n\xd1\x07)\xff\xee\xc1\x13\xe0\xab\x9c=\x01\xd6\xedz\xc0\xe0\xbf\xd0\n\x8c\xe4%\xa4\xce\x99\x8b\xfc\x10pt\x04\xc3}\xd8\x82\xd1\xde\x9e\xd7\x03\xbd\xf8Q\xb9t\xb4\xb7\x07[\x90p\xa4\x9f`\x12\x90\x83\x03\xd8\x87\x1b\xf0\x158\x04\x12\x1c\x98\xe9r\x15[4\x00\x19\x087\xc3\x81\xdd\x87}T\xd1|\xd2\x90`\x0c\xc3GJ\xd0Slk`lk$J\xf1S\xe1q\xc8\x97F\xaf\xb3\xab\xbe\x8c1\xe9\xc62\x8e\xd6\xea\xc1\x9d#O\x80\xe8\x1e\x1f\xe7u w[\xa9\x08\x06\xf6\xe0,\x0e!\xd0\xf6Z\x93\xb6\x00\x1d\x93s\x8b\x15\xa1X\x80/k\xc45~\x0d\xae\xb1@\xe7N :\xf1\xe4\xfb\xd3\x00\xb7\x8fo\xfa\xfe\x0eR|Z\xe9\xc8T\xba_*\xdc\xdf\x81-@s\x1c>#7\xe0\x10\xfb\xc8\x83.\xa4SfW\xa8\x16\x01t\x87\xf4\x87\x9fyD0\x86Q\x0e\xae\x85v\x06\xa6vv+\x85\x07\x07P\xeeq\x7f\x17\x1b\x1e\xe6\xc0\\h\xb9:\xc0\x83\x83J\xc3\xfb\xbb\xc5\xf6z\x10\x17\x01O\xfd\xfad\x02\xc2\xca\xceVd\x7f\xc58\x93U\x02\xc1*,\xbc%\x89\x16\xd5x2X\x9c9>\xf1\xca\xb7\x19\xf2\x97\x985\x12\x83[o\x03C\x80\xca\xfc\xb8\x91>z\xae\\\x83\xf9\xe1\x0b\x9f\x90 \xd8\xea6\x16\x88|\xa1\xf3)\x9b\xe5I\xc0\x94\xa8\x96\x16|\xe6\x08f\x15E\xb2q\xb3=\x87\x08\x84\x13\x84\x10\xd7\x1b\xf0\x04\xa2Id\xd3j\x08\nY\xdfo\xecZ\xfe\xdd\xc9P\x07i\x9f\xe6>x5a\x81\x90\xa8;1k^\x16\x11\xce\xa2U\xd2\x0e\x058\xc5SyG\xfa\xa6*\x9c\xf8\x93<\x8cZ\x1c\xfa;\x9e\xe1\x8d\x1f\xc4\xc9\xdf\xeb\x10\x0b\x7f\xdd\x9a\x83\x9a\x89\x19=\x8dc\xff\xda\xf5\xa5\xdb\xa3R\xf4\xf0\x13\xec\xdf\xed\x04\xfbx\x82\xcd'7h}r\x03\xf4\xe1G\x93!\x0d\xe1~`\xd7 \xff\xba\xec\xd6ok%\x9b\xb2\x19Ge\xd1t\xc0o\x19\xfcw6\xfb\xd3\xa1\xde\xb2\x8f&\x9a\xfac9\xd4\x99\xf0\x06\xb6\xeccT\xd8\xc7\xcc\xb8\x8f\x99m\x1f\xf9ne\xb8[Ae\x89{\x10\x89\xb5\x0b\xc4\xda\x05\xb8vV\"&\xfa\xeb\x0fp\xf1\xd6\xbe\xe51N\x98Uun\xf6)\xfcrg\xb8\xf6\x82\x0dB\xb0\xc4\xfe\xd2\xee\xb1\xb0'L\x10\x15\xa2\x0d\xa7lV{\\>/\xc4\xdb\xf0\xfc\xdf\xcd\x8f\xf2\xb7\xe4A\x16.\xd82\x08\xd9\xe2\x13%/5\xcbp\xfbE\xf5*\x19\xe6o\xcb\xcf}\x8c\x82\x85\x8c(V\xd7\xbb\x89\x93\xab\x13\xfa\xfd\xcd\xbc\xa1\x7fK\x1e\xc4\xec\x9c]}\x11U\xca-\xe4f\x01F\xa6\xc1zm.'\xe5Mg\xa6\xb19\nxp\xfa\xc0\x9d\x9e\x07\xeb\xd9}\xef\xeb\x07R\xb3a\xae\x1e\x1bb\x0c\x80\x18\x94\xf3@\x8a\xdd\x07V%\x02i:\xa4\x05o8\x1d\"\x1b&\xd5\x07G\x9c%mq]\xf3\x9e\xd0\x9aw\xcar\x03\xa0\xb8`\x0b\x947Si\xe5K\xdf\xc1\x7f\xce\x8a\xcbS\xa2-:\xa9\xdf\xca\xab[0\"\xea\x81e\xc5P\x93\x95kFY\xaf\xcc\xc7|\"\x92PT\x1au\xd0\xd6\x14\xe6\xb6\xf8\xa4vC\xf8Zu!\xed'Q\x16\xcf\x19ty\x81ua\xd3\xfe\xf9*:\xf3WB\xe7\xd7=\x04\xe7\x9cB\xf5\xe5\xa9\xe7\xf3Wkz\x15\x9c\x87Q\xcc\x9e\xf9\x89\xfe.\xe0\xef\xd8\x97BfO\xb4J\xea~\xd1\xa21]\x06\xe1\"\xbaT@A?\xfb,\xd9\xc4\xc1\xda/\x19\x06\x06\x8d\x98\xd1\xa8N\xf8-y \x07\xff\x17\xe3\xc6\xaa\xbaF\xfe)\x18p\x11\x06\xf8\xe6{\x16\x11!\xc8\xf48}4\x0e\xe3g\xa1\x9eM\x8f\xfd\xf0\x9c\x8dkyo[TQq8^\xc7\xd1y\xec\xaf\xe9P\x84\x18\xfb\x8e\xef\x98\x0c-v\x16-\xae\xb58<\xce\xf3+\x0e\xf9I\x10\x85oR?ek\x16\xa6\x8eVu:\x98\xa9&\\\xe7i\x1cG\x97/\xc4\n\xe7_\x96?`\xea\x0d}\x8bN\xcf\xb7\xfd\xca\xc0\xe6\xebZ\xb1\xba5hD\xd4\x9f\x84\x8eEt\x9c\xe6\xcd\x0f\xb4\x8d\x0f\xeb6\xbe~\xd3\xff\xb0`s\x9b\xc3\x0b\xdej\n\n\x88\x81\x95\xdb0\x14\xbfu(\xe0\xbbc\x84\x82\xbc\xaa\x82\x02^\xd7\n\x04\xc5\xfae \xe0\xc0v\xeb\xaf\x0cf\x10/\xfc`\xc5\x16\x90F\xca\x16B!\x0c\xbb6\xc5\xd8\xc1\xc6\x8f\xfdur\x0b\xab\xd0H\x06T\x0d\xfd\xb5 >\xc5\x0di\xec\x0cW\x1c7\xba\x07\xce7\xabh\xfe\xa1t\xde\xec_\xe1\xf2Mp\x0d\xe4\x02\xbaQ\x0fB\x199x\x8a\x96\x0b\xfc>\x9e\x0egt\x01\x0b\x95\x8b^\xdd\x91\x08\x02#F\xe5\x9f\xd2g\xf5&4w\xbe\xa1\xe5\x00\xfe\xd4;Z\xdd\xba\xcat\xed\xcb\xda8X<\x00\xf6F&\x8b1\xf7\xd1N\xa98\xa3\xda\xe5b\xbfN\xdaW\xac\x9a4\xcb\x15J\x08\x0f\x0e\xe1q\xb1h \x870,i\xb3Vp\x08;\xa3\x12(\xf0\xb2\x9db\xd9\x05/\xdb-\x96-x\xd9^\xb1\xec#/{X,\xbb\xe6e\x8f\x8ae\xe7\xbc\xac4\xbe5\x1c\xc2ni,\xefyY\xa9\xdf3^V\xea\xf7\x12\x0ea\xaf\xd4\xc7\x15\x1c\xc2~\xa9\xbd7\xbc\xac4\xb7\xe7\xbc\xac\xd4\xc7S\xbe|%7\xc4W\xbc\xac\xf4\xedo\xbcl\xbfX\xf6\x01\x93\x15\x96*\x1eca\xa9\x97\x1f\xb1\xb04\x95\xb7ph\x80\xf8\xc1\x18\x9c\xd3\xd3\x81\xe1\x1ez\x88o|\xc3\x9bG\xf8\xe6\xcc\xf0\xe61\xbeI\x0do\x86\xd4Qhz5\xc4W\x1fM\xafF\xf8jiz\xb5\x83\xaf\xca\xd4\x1c\xff\x1b\xd1\xd0\xcbBh\xfe\xb7\xb3;\x86{\xa7\xa7\xce=\xc3\xd8\xa9\xaf\xd3Scg\xd4\xdb\x89\xe9\xdd>M\xed\xbdi\xa5F;\xd4\xeaK\xf3Kj\xf5uI\xc6P\xac\xfa\x8c_\xd6\xce\xb5\xd3\x03\xe7\x17\xfe\xbfk\x96\xe0\xb3\xf8\xe7\xf9\x1b\xfe\x0f\xd2\xbc\xce+\xfa\xff \xff?>\xd2S\x84\x8f\xf4\xffWX{\xb9\xc4\x8a\xe2\x9f\x17/\x9c\x99)\x90\xc6\xeb*\x92\xcc\xc5\xb5%\x0d4Y\x9e\x1c\xd6z\x93\xf5(X\xc6ho\xcf#B\xe8\xca\xa1h\xbd\xa3b[\xca\x02\x19\xab\xef\xef\xed\xed\xc8\x0f2\xf1\xc1\xae\xe1\x033\xc9\xde\xa1FvG\x8fw\x1f\xef?\x1c=\xde\xf3\xbcb\xf8\xdby\xb4`\xb0\x89\x82Bz\\\x8av\xb8\xf6\xafe\xda\x85\xf3\x98\xf9)\x8b)\xf3\xc2\xe0\xea\x85\xf83\xd1\x0d8\xd0wb\xa0\x8f\x8a;[\xf8%o\xbc\xd3SG\xc4p\xcc\x836\x0e\xf0\xfbm\xc5'{\xd0\xd5\x987S\xb0\x92\x9f\xaa\x9b\xa5\x85\xac\xc6\x9d\xc9crG2\"\xb6\x0c0\xfd\xa3\x9f^\xf4\xd7\xfe\x95\x8b\xf9\xc1E\xf1\xcd\x0d\x8c<\x19\xda\xfbC\xb09\x0e?\xfa\xab`Ami\xbf\xf58\xdc\xcbUt\xf9\x92}d+\xa4`\x83\xe4$\xe2kz\xee\xa6\xf9\x1bO\xfa\x1fie\xb2\x97\xf4z%\xe2m\x17\xaeU\x1bE]\xcd\xffkH\xdfU\xe0\xdcrw\xfe\xff\xfca\x919\x87\"\xfb \x19iP\xc6\xd5\xb8\xa40`J'C\xce\xff\xd1\x13\x8a\x88:\xa4\x8c\xe4\xf14\x10Z]q\x16\xd84C\x0f\xeeN\x87\xc8\x99,7]\x1d\x91A/\xff\xcc\xc0\xd5r\xd0\xc8\x94\xff\xb6\xd7\x03\x97\x12\xb8\x95B\x90\xf7eV!\xde\x0foOdt\x98\xf7u7\xcb\x1e\xf8\xd4\x99\x8f\nk\xfd\xd5\xd4\xe7\xe3\x0b\xa7\xd9\x0c\x0e\xcb\x91oA\x13p\x17\xe1\xd9\xd5@\x8c\x03\x0e\xb6\x98H\xf3H\x05;Q\x9c\xfe\xc0\xae)\xd5\x8c\xfaQ\x8c\xde\x1e\xb2\x7f\x06\x0b\x19=]\xfd\xba\xb9\x81G2\xf6y\x18\xfd\xc4\x96\xd4\x86x\xd4[\x08\xa3g\xd1z\xe3\xa7?\xf2\xe3Lu\xb4\x02\xbd\xe6<\xe2\xd0\x8d\xeeV\x97b)\xb5\x02\xbd\xe6\x1d\xe2\xc5\xcb\\Du\x9f<\xbf*\x86\x98\xc7\x9cWa\x1e\xa6\xbe\x98I\x9a\x97,2\xfe\x85\x9f2a\xa7@\xa5Y\xc2\x16\xdf\xeao\n\xc1\xfdL8\xe2\xc4x\x98\x10\xe8\xc5i\n\xe0\xb0\x14:\x96y\"w1)\xe6\xb6\x87\x04\xd7|l\x89f\xaa\xf4\x04\"8\x80\xe4\x89\x879\x1a\xd0j]\xa6\xe6\x17n|\x98\xf8?\xf2\xd0\xda\x87\xfcCD\n\x0b\xd1A\x82\xa9\xdd\nox\x97\x14\xc65Bc!z\x0eu!\xc4\xa9\xe0\x03C\x01\xd7\xddC\x08<>\xc4\xeea\xd9\x9dL\x80\xb0_\xbbD/\xebbo\x9bc\xebJty\x1f4\xce\xce\xd4\xf6\xb7U\x14-\x19\x0e\\\xb1\x15\x87>z\x9c\xd76\xf4okC;\xa3b`\xaa\xe1h\x1f\x99\xf7\xfda9\xf2\xd5\xe8\xf1\x1e\xff\xc5)\x94\xdcm\x82\x93$\xe2\xd7\xcd\x0d\xec=\xdc\xd9\xdd-~\xc7/\xe3\x1d\xfe\x8b\x92Q\xa8\xaa\xbc|\xbf\xd4\xf5p\xb8;\x1c\x0ek'\xf2\xc2:\x11\x9cb\xa9\x1fl\x99?\xbe\xcf\x1f\x9f\xe6\x8f\xaf\xf2\xc7\x0f\xf9\xe3\x8f\xf9\xe3e\xfe\xb8\xa8\x1d\xd6;\xeb\xb0\x1e\xfcz\x1a\xde\x07\x19\xc8D\xdfn\xf9\xc4\x0f\xd27\xd5X#\xbfs2\xa7X\xf4\x0b\xe7U\x8aE\xff\xe4\xb4M\xb1\xe8g\xc0\x88\xd2\xd5A\xfeP\x1fg\x9d\x8f#\xd2\xed\x9b:\x86\xe8'sK\xf9\nO:\x85\xfa\xa8\xbe}Kx\xa0R\xce)\xd5\x7f\x8b\xec\xa3\x85\x04%\xa5\x9d\xc4x<\x9do]\xba\x8c|,;\xcb\x1f\xdf\xe4\x8f\x97\xf9\xe3\xfb\xfc\xf1i\xfe\xf8*\x7f\xfc\x90?\xfe\x98?.\xf2\xc7\xeb\xfcq\x9d?n\xf2\xc7\xe3\xfc\xf1*\x7f<\xcf\x1f/\xf2\xc7\x8f\xf9\xe3\xf3\xfc\xf1713{V\x17C\x82\x07\x839\x8a\x97\xbf\xed\x10\x0bb\xf2\x06\x0e[\xff\x13a\x05c\xdd\xef\xd7\x9a\xcdS\xff\xe3m'@\x91\xdd\x9a'\x02\xe2\xe6\x8a\xa7\xa3\x861\x83\xca\xffB\xb3\x9c\xa3\xfa'\xe2'=\x81.\xe7\xf50\x9b=_\x07Q\x01&\xfcqL\xc9\xeb\xa0\x0b\xffp\xe7\xc4L\xa2\xd2\xa2\xb63{\x98K\xc8A1\xb2V\xfa\x83\x83g\xe65A\xfb\xcf\x8d\xd0~\x0f3\x934+\xf7\xe4\x9fb\xa4s\xaa\\p\xcaV\x1aI\xc8LK\x84\xd0\x111h\xfb\x80\x0e;\x9c]\xdb\xdf\x19\"\x11P\x8dO\x1a!WL\xdf\xec\xef\x8c\x06\x90\x07+\xdd\xd9\xdd\xe1\xcc6\n\xa6^\xbb\xc3\xc1\x08\xbd\x96\x19lS\xeb\x949f[|\xd6%\x1e\x8e/\x1b\xa7\xdd\xc6$\xf3z+\xcce\xbb\x87\xd0AJ\xe6\xdf\xfc\xe2\x99@:\x8df0\xa6[\xee\xb5\xd9\x1bM\xff\x93\xba\xd4\xba=\xf3(}\xa8\xb9!\x11\xfc\xc1\xbee\x05\x99n\xb0\xdeDI\x12\x9c\xad\x84\xb7\xfb\x18\x02!\xaa$\x0b\x10\x8a=\xe64\x11v\x7f\xb8\xf5\xfc\xfc\xd7\xf64Rp(\xe95)\x00\xc4\x90k\x06-@\\D&\x85XRF\xf9E\xc8\xcf\x1b%\xd46\x7f7\"|\xa4\xde\xf1Q8]\x07\xb7K\x1e\xcam\xbalNC\xa7v\x86\xdf[\x19a\xdb\x909l\xe4(u{\x88\xb9/\xa9\xf4\x85a,\x8a\xf8\x99\xb2\xf1/E6\xfe{G\x98\xa2_\xd0\xfe1\xf8\xf39\xdb\xa4 \xaa\xde\xf0\x06^QN0\\\x81{M7MqZ\xd3\xd5\x8cff\xbfy\xecW\x8ad\x87cc\x95\xda\x90\xd3\x06\x83,#\x9b\xdf\xa9\x97\x8f\xfeOA\xc6G\x87\xbe\xcc\xb3\x17\xf4\x07r\xc8a\x8f\x8er\xd8\x83\xce\x10C\xdf\xa8\x9f\x03Cj\xe0\x04\x14\x94P\x13\xe5$\xad\n\xf9\xe9,\xed\x01E\x85+r\xb9\xe5\x14\xa6\xbc\xf9y\x0fV=\xb4\xff\xa8\xbaIq\x00Ea\x87z\x85\xbe=\xf2MU\\\x86\x02;W\x93P\n\x8dX\xae$Q\xbbM\"@-al~\x13\x18\xda\xd1\x8a\x1aZ\xd4?.\xa0:\xa5\xee\\g Z\x12\xf8pF\xa9n([y\x9d\x05\"\x14D\xacDB,\n\xfa\xb6\xec \xf1`C\x0fE\xf6\x9c\xd5\x10\x1b\xceW&\xe2@\xedb\x1c$\xa1\xd6\x12\x91%\xc2)'p\x16\xd3h6\xeb \x1cCf\x80>\xe5`\xa7\xff\x08\xee\xf1t\xb58A\x02\xf8\xf1l\xf0\xa7\xdc\x9b\x823\x1e2\xeb\xbb\xac\xb3\x14[\x875\x8b\xc9\xcc'\"r\xd3\x84\x13\xaa\xe2\x11\x1c\xe5\xf1MS-\x1d{?\xf1\x97\xec\xdb\x92\xb5B\x8d\xe5\x1eM1\xee\xb3\xab\x94\x85\x0b\xb7z\x8e\xc8Fs\x0cYq\xb7\xf0\xc6/\x8d\xeeN>?\x02\x90\xc85V\xba\xd6\xf0\x83\xed\xbc\x7f\xcf\x92\x1f\xa3E\xb6\xaa\xc6.\xfd\xe8\xaf\xb2\xa2w\x1f:\x8a\xf5\xcfY\xfa,\n\x97\xc1\xf97\xd7\xefb\x0c\x86\xdb_D\x97\xe1*\xf2\x17T\x0e\x87\"\x1eB>\x80\xdc\xe9h4\x18j;h\xf8\xd4\xae\xf1*\xdb\x16\x18\x15\xbd\xa2\x92;\xe0C]\x86\xfd%K\xe7\x17^\xc5E+\x9f\x93qJmvU\xd51\x92-\xca\x97\xb8\x9fl\xd8\xfc)\xd6L\xccH2\xf7\xe7\x0dJ\xcb\xe1\xa6^?\xbd`\xe8\x07\x17\xe9\xe9F\xe5\x9f:E\x91y\x14\x80\x9aSM\xbe\x8c\xce\x88\xa8.\xed'\xa9\x9ff \x1c\x1d\xc2\xee\x00\xd3[\x04\xfdl\xb3\xf0S\xf62\xf2\x17Ax\xfe\x06\xdf\xbb\xce\x12\x1d\x17i@\x9c\xb3\xb8e\xb5w\xf1\xcaux\xc1<\n\x93h\xc5\xfa\xa8\x14se\xffo\xd9U\xaa\x91'Y\xbc\xe2@\x86\x17\x07R\x89\xcc\xe5[)\xdcQ\x7f\xf1\xd7+\xea\xc1s\xc3~\xca\xae\xca!\xb4\xa1\xaaF\xfb[\x9d\x1f\x1d\xf2\xcfY\xda\x12\xd2R^\xf78t\xcbw\x15L\x80\xc1\x18\xa6l\xf6\xf7\xc2\x12\xa5s\xaf\x08w~\xfa\xf7\x0c^\x84H\x91\xcb\x1b<\xef\x0b&\x10\x83)9\x93\xd4\xc7\x96\x83\x17\x16[F5\x9a;\xdc\x7fT\xea1\x11#\xd9-\xe2!j\x93\x02I\x92\x0b\x06\x07\xbcL\xbe\xf0\xdc\xa0\x07I\xff\xdd\xebo\x9f\xbe}\xfe\xfe\xd9\xab\x93\x17\xc7\xdf\xbd\xe9\xb5\xdc>\x0c\x0e\x8d\x80\xeccp\xd1\x7f\xbc\xf1\\\xd6\xdf\xf8\xd7\xfc\xa8\xeb(\xde3\xf7\xfa\xf6\xd5w\xdf\xbdl\xdb\xab\xbc9U\x07f\xb5/\x02UEt\xa2\x86\x9c\xf0\x97=\xe8\xc4\xc5\xd1\x05\xc2\xf3t\xe6}\xc5\xf7\xf9\xc1\x83\xff\x03\x14J\xe2G\n\xdb\xf4\xee\xa7\x97\x87\xc9\xa5\x7f~\xce\xe2\xed,\xd8\xe6xg\xe1\xaf\xa2\x90m\xa3N$\xed\xff\x96\xf4\xd7\xfe\xe6\xff\x07\x00\x00\xff\xffPK\x07\x08v\xf2\x8aA\x86\xba\x01\x00\xc5\x87\x08\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00 \x00swagger/swagger-ui.cssUT\x05\x00\x01\x80Cm8\xec\xfd{s\xdb8\xb27\x8e\xff\xff\xbc\n=\xbb\x95\x9a\x99\x1dS!EQ\x17\xabf\xeb\xc8\xb1\x93q6r\xc6\xcem\x92\xad\xad)\x8a\x84$\xda\xe0\xe5\x90\xd4\xcdz\xf6\xbd\xff\x8aw\\\x1a $;s\xf6\xf7\xad\xb3\xd9dl\xe2\xd3\x8dFw\x03h4\x00\xb2\x9bl\xed\xe5\x12\xc5\xda\xda;\xfc\x9fN\xe7\xe5\xdf\xfeo'\x08c\xdf\xc6\xde#\xea:I\xd2\xd9\x0c\xbbzW\xef\xfc\xbf\xce\xec\xfac\xe7\x9d\xe7\xa0 A\x9d\xff\xd7Yz\xe9j=\xef:\xa1\xff2@N\x88\xed\xe4%M\xf7\xb7\x97\x8b0H\xb5\x85\xed{x\x7f\x9e\xd8A\xa2%(\xf6\x16\x13'\xc4a|\xfeWs\xde7,\xe3\xdfD\xfd\x9dU\xea\xe3\x03\xf6\x02\xa4\xad\x90\xb7\\\xa5\xe7F\xd7\xb0&\x9a\x9fh)\xda\xa5Z\xe2=\"\xcdv\xef\xd7Izn\xe8\xfa\x8b\x89\xb6E\xf3\x07/\x85K)\xce\xf3\xd0\xdd\x1f|;^z\xc1\xb9N\x95\xd8q\xea9\x18\x9dQ\xcf\x12\xcf\xa5\x9f,\xc20E1\xf5h\x85l\x97y\x14\xd8\x1b\xea\xf7\x049\xa9\x17\x06\x07\xd7K\"l\xef\xcf\xe78t\x1e\xe8\x16\x1b\x87\\K\x99\xf0\xe7=\xe4OJ\x19\xbb\x83!\xf2;\xb4\xa4\x0bo\xe9\xd8Q\xc6\xf0\x8cy\xbc\x8eii}\xdb\x93UZPT\xea0\x90\xdf\xe9\xeb\xd1\x8e\x96+>T\xca\x9d\x87\xbbL\xe4\xdd2\x1f:\x16a\xec\xf3\xca\xfbg\xba\x8f\xd0/1JP\xfa\xaf3\xbe Y\xcf}\x8f)\x01*\xcbf\xb5\x92\xa2(\xfdW=\xb6\xdaQ\x84\xec\xd8\x0e\x1ct^\x14\x01\xd5\x974\xe7\xe7\x9a\x1f>j\x8b\xd0Y'\x9a\x17\x04\xcc\xd4C\x8a\xaa\x04-\x85o\xc1\x16\x95\xf3 \xde\xeb&\x91\xed\xba\xd9l\xa0K\xda\xd0\xb0\x89\xbd`)n@+\xae\x92^\x02,E\xa7\x11\x87p\x9df\xbevnD\xbbr\xec\xed\\\xe4\xc0\x8fh\x972\xb3$\xc2n\x82\xd2C\xd5\xb0\xaei!\xbf\xd3\x1d\xe6\xff\x0e\xb8a\x01\xa3%\n\\h\xda\xac\xe7\x14j\xd6$\x9e\x16\x83a5\xacW\xdd>\xb5\xe7\x18M|{\xa7m=7]\x15\x1d\xa5\xd6\xf2d\xbb\xf2R\xa4\xe5\x83\xf4y\x11y1Sl\xb8\x8cQ\x92\x80\x83\x8f\xd2(Xw\xe1\xbaw\xd9\xeb4\x04\xac\xeb\xac\x90\xf30\x0fwP\x1f\x89m\xd7\x0b\xffu\x92Vd\x0e\x15\xac\xfd9\x8a3\xef-\x19\xe7^\xa9%\x91\x17h@\x17\x14\x10\x85\xeb\x94&:\x94C\x90\xa0\xa1 \xb2cg\x05v\xdfLY\xb9\xc7LJ\x0f\xd3\xc2\xc5\"A\xe9\xb9\xd6cB+\x8aU#K\xf1@s2nX\xdc\x06\x11]\x13\\@\xd2q#[C\xbf\xf00\xd2\xd6\x11\x0em\xb7R\x82pt\xcaG\xed\xcaO\xe9X\x00\xa5\xb6\x87\x13:\nE\xc1Z\x12\x85&k\xdf\xb7\xe3}\x8d\xc0^\x92j^\xca\xf4*\xc7\x0e66\xec\xc4\xb4V\x8b \xed_\xcc$\xe4G\xd8N\x115\x93Rd]\x17\xcd\xd7\xcb\xce\xdf\xa8q! \xb1\xe7v\x96!v\x01\xac\x96\xf7;\x90\xe2\xaf\x8b\xc5\x02\xa2\x98c\xdby\x80)\xd8\xf8\xa7\xa4X\xc6\x9eK\x04Ndx\xdbY\xc7\xf8G\xd7N\xeds\xcf\xb7\x97\xe8e\x14,'Y\xf7\x1d\xf4\xcf\xbc\xcf\x17\xef\xef\xb6\xfa?\xde,\xc3\xe9t:\xbd\xf9\xf0iu\xf5i\x99\xfd\x98\xffs\xfdj\xfau:\x9d^^]\x0e\x07\xef\xb2\x07o~\xbf{\xfd\xe5\xd7\xbb\x8f\xf3\xde7\xdd\xed\xbd\xde\x7f\xbb\xbd\xb8\xf8\xf6f\xec}\xfbp\xf1v\xfe\xe5u\xf0\xed\xf3[\xfc\xf5\xcb\x9d\xe58\x18\xff\x96\x11\xecW\xd1\xe7\xd7+\xfd\xcb\x951{\xef\xdfl\xe6\x1f\xacU\x81\xb7\xfa\xf3\xdf\xa7\xc5\xff.\xb7/\xd1\xaf\x17\xab\xaf\xbd\x14\xbb\xaf.\xbco_\xdch~\xaf{\xc3\xe1\xfa\xe5\xb5w\x11}\xbb\xd4\xbd\xcf\x8f\x9fofW\xc6\xf6\xb6\xf79\xb4?\xad\x06\x8e\xff\xf9#z\xb0>}5\xa3\xf8\xeb#~\xb8\xbe\x1f\xfd|}\xb9\xeb\xbf\x0fV\xa9\xf3\xc6\xc0\xee\x9b\xab%zc$\xf3`6@\x97\xba\xf7\xf5\xcb\xdd\xe6\xab\xffi\x90\xfd>\xff\xf2Y\xff\xfaa\xe4]\xff\xba\x1c\xa07\xc6\xd6}\x93\x8c\xaf\x1f^?\xcc{o\xf1\xf5\xeb\xd5\xcd\xa7W\x17\x97s\xf3-\xbe\xbe\xfc\xb4\xbe\xf1\x8c\xfb\xd9\xc7\xab\xdd\xf5\xa5c\xbd\xbb\xbf2\xde_\xce\xf67\x1f\xb6\xcb\xd9\xfdtw\xf3a\xb4}\xffa\xb4\x9b\xbd\xd2\xb7\xb3\x8f\xe1nv\x19\xeeg\xaf\xa6\xcb\xeb\xea\xef}\x7f\xf9\xdb\xafo\x1f\xbe\xddG\x1f\xee\xae\xbe\xd6\xf28\xfe\x9d\xff\xdb\x87\xb7\xa1\xfb\xeb\xdd\xf6\xbd7\xda\xb8\xa6k\xbe\x0b\x9c\xc7w\xfex\xffm?\xda\xbd\xff\xf8`\xbd{\x9c\xee\xdf=^\xef\xdf\xfd\xfe\xf6\xe1\x9bg<\xa2/\x96\xfe\xf5\xf7e:\x0ff\xf7\x04\xdf\xabo\xbf\xdf\xdc;>\xde\xbao\xf0f\xee]\xec\xbf\xbd\xf9:\xf8\xfa\xe5\xed\xc6\xfd\xfdv|\xed]7:xcl?~\xd2\xc7\xd7\xfeJw\x7f\x9d\x0e\xde\xed\xc7kg_\xdb\xe2~\xde\xd37\xe8\xcd\xeb\xed\xbb\xc7\xab\xf5\xec\xd58\x9d\xe7\xfaY\xa5\xf37\xd6\xe3\xfb\xe0F\xff\xe4\x7f\xa6d\x9e\x07\xb3u\xa9\xd3\xf5\xd7\xde8}g\xaeV\xce\xab\xd1\xee\xdd\xfdt\xe3\x18w\x96\xf3\xe6\xd3\xe6\x93\xff\xf9qn~\xde\x7f\xed}\xfe\xf0\xed\xcb\xd7\xfbk\xef\xa2?\xff\xb2[;\x8fQf{EY\n9\x9c+\xe3\xe6\xfd\xc3\xdd\xe6\xab\xf99\xfd\xf6\xc5\xd2?|\xba\x1d_g\xb6~e=\xd8_n\x07\xb3\x8fw\x97\xef?~\xed\xdf\xe8\x9fz7\xfa\xe7\xd7\xb3\x8f\xaf_\xdf\xdc/{\xb3\xc7o\x97\xb7\xf7\x0f\xdb\x9b\x87\xdb\xfe\xec~\xb9\x9d]]\x13\xfc\xf0\xda1\xefVs\xff\x06\x13\xfc\"\x9a\xdf\xad\x1a\xbf\xcb\xe8\xd2\xf1?\xaf\xdc7\xe3\xfd\xe77\xe3\xcd\xfcR\xf7n\x0b\xfd,?\xbdYm\xdc7\xe3G\xfb\xcdx{}usy}y\xbd\x9d}\xfc\xb4\xfc\xc7\x95\xb1\xfa\xda\xc3\xeb\xbc\xec\xd5\x83\xf7\x9b7\x1d\x95v\x1a\xdc\xbd\xf9\xbc\xb7\x7f\xff\x86\xbf]}\xdb\xcf{\xfa\xd21\xef2\x1d\x0e\xec/\xd6\xa3\xfb\xe6\xf5\xfak\xef\xf3\xdb\xbbK\xdd\xcb\xf0\xef|\x1c}\xbb\x0c\xcd\x9b{g\x7f\xfbpk\xde\xdc\x7f5o\x1f?\xedf\x9f>\xf5n\xef\xdf\xbe\xba\xd5?\xedo.\xa7\xfd\xd9\xc7\xe9vv\x7fe\xce>\\\xd7\xfc\xbe\xbd\x19\xdf\xbb_\x0c<\x0f\xee\x08~w4\xbf\xc7V~\x9bL\xf6w&\xe0\x93\x99\xaf\xbe\x1a\xe7~\xf9\xe9\xe1\xeeM\x81+\xfa]\xde\x0f?\xf6\x97\xbf]\x8e\xfb\xce\x9b\xd7\xf7v\xef\xb3~\xfd\xe6\xf3:\xeb\xef\x8ew\xfd\xf2\xb7\xe4\xe2\xc3\xcfof\xd9\x08q\xff\xe1\xd3\xdd\xc5\xe7_\xef\xed\xaf\x9b\xc7\x97/\x1fG\x97\xef\x92\xcb\xfe\xd2y\xf3\xbb\xf7\xf5j\xfa\xe6\xe2\xfa\x1fo.\x02\xf4\xf2\xe5\xe2u\xb4\x9d.\xb7\xd3\x8b\xf1hj\xbf\xeeE\xf7\xf8\xd3mF~\xf1\xf6\xee\x93u\x15?\xbc].\x97\xbf\xfc\xf2S'F\x11\xb2\xd3\x8e\xde\x11\x8e\xa4\x9a1x\xc6\xc1\xf4\"\x1f\xe6n\x8b\xc1t\xba\x18\xbd\x1c\xaf\xfew0\xfd\xdf\xc1\xf4?u0}\x7f\xf9u\x7fw\xbf\xba\xba\xbb\xcc\x06\xd3\xaf\xfb\xd6\xc1\xafe0m\xf8\xdd\xaa\xf1\xfb\x0f\x1aLo?\xb6\x0e~G\x0d\xa6\xb7\xed\x83\xf3\xf7\x19L7\xaf>\xe8\xc6u6\x18\xcd\xea\xc1\xd4\xbf\xeb\xbf\xb4~\xbex\xfd\xdb\xc5b:{\xed\xbf\x9c],w\xa3\xbb\xe9\x9b/\xaf\x02c:\xf5?,\xcd\xfe\xed\xe0\xe1\xe2\xf2\x1f\xb37\xb3\xcbW\xdb\xebWhv\x8d\xfc\xd7/\xad[{{\xe5E\xd3/\xdbO\xab\xed\xd5\xfd\xecr3\x9f~\xc1_\x1e6\x9f/\xb6\xeb\xd1\xe6\xf6zz1\xbd\xda^\xbc\x8aV\xa3O\x03G\xcf\xc7\xa5+\xfc\xfa\xe3\xc3\x87\xf5\xad\xff\xea\x95\xd2\x00<\xd2\xf2x\x97\x1c\x85\xb3`\x99\x1d~\xef#T\x8f\xbf/\xc7\xf7/\xfb\xb7\xd3\xafw\xbf\xaf\xa2o\xcb\xe9\xf4\xc3\xa7\x87\xff.\x03\xd9\xe6\x7f\xbf\xbdL\xa6\x17\xaf\xaf\xdc/71\xba\xcdF\xe6\xdbj\xe0|\xd9\xbf\x9d\xed\xec_\xeft\xe72\xdc\xbc\xebY\x8f\xef\xfcb\x1c{\x97\x8f\xb5\xe3\xfe\xd7\xdf\xa7\x9b\xd9\x87\xfe\xf6\xddv:\xfa\xcd\\m\xbf~\xb9\x89\xbf\xfd~\xbb\xfc\xea\x7f\x0e\xec/\xfd\xf1\xf5\xfa\xe7\xe1f\x7f\xbd\xb4\xbf\xdc\x8e\xaf\xb1c|\xfcxq\xe3\\\xdd`\xfb\x0d\xbeF\xc1[\xfc\xc9\x8c\xde\x7f~s3\xb0{3\xeb\xdb\xab\xeb\x97\xb9\x8f^f\xfd\xf7\"\xfd\xf6\xfb\xdd\xaa\x19#\x96\xe3\xeb\xb2\xee\xf7\xbe\xf5\xf8\xde\xcf\xc7\xe0M\xd6\xe7\xf31\xf9\xd7\xbb\xf8\xb7\x0fo\xab\xb9\xe2\xeb\xc7\xcf\xd3\xe5mo\xbc\xff\xf6aj\xbc\xbb\xff\x9a~}\xbc\xda\xcd>L\xcd\xf7\x1f\xfa\xbb\x9b\x8f\xcb\xc7\xd9\xfd\xa7\xa4\xec'\x9b\xd9\xe5\xc3f\xf6q\x9a\xce.\xaf\x06\xb3\x8f\xd3\xc1\xec\x9e\x18c_]g\xe3~\xed_\x8d<\x99/\xea^\xad\x1b\xd35\xdd\xbde\xce\xf6\xd6\xc6\xf1\x9d\xcd\xec\xe3\x83\xf5\xfe\xc3h;\xf3F\xfb\x99gd\xf4\xa9cf}\xf1u\xff\xdd\x17\xeb\xf1z\xdf\xf0\xbd{\xf3\xf9\xf1\xab\xf96r~\xbd\x8b\xe6\xbd\xfe2\x1b\xbf\xdf\xfb\xaf\xbd\xb9\xf9Y\xff\xed\xc351Nf\xe3\x00Q\xa7\xcc\x1e\xfb\xff\xc0\xb1\xf9\xf7\xe9\xe0\xd6|\x8b\xbf\xfe~\xb7q\xf0\xddf\xde\xdb\x12\xf3\xe2E87\xef6No\xb5q^]\\\xde\xee\xa7\xfb\xd9\xe5\x95q\xfdju\xf3\xf5\xcbM4\x0f\xb2\xb2eT\xf0\xb9\xb8\xf9\xf81z;\x0fn\xf4\xaf_\xac\xfbo\x9f\xf0\xd5o\x1f\xdef\xfc\xd7\xf6\x17\xfc\xf0\xfe\xe1z7\xbb\xbf\xd6\xdf\x7ft\x1eo\xee\xddW\xb3\xc7\xab\xdd\xdd\xc7o\xaff\x0fo/\xef>^\xeb\xb3\xcb\xe5nv9\xdd\xcf>:;\x82\xdf\xd5\xbcwc\xcc\xbf|^\xbbW\x0d\xbfoo(~z+\xbf|\xee\xac\xe7\x13\xec\xf8\xb8\xf7\xed\xcb\xdd\x1b\xc7\x1f\xa7\xd7\xbf\x16\xba|\xef\x8b\xe7\x85\xdb\xfb\xab\xfd\xec\xfe\xd6\xbay\xbc\xea\xdd\xe8\xd7\x8f\xf9\xbc\xf0p\xbd\xbf}\xb8y=\xbb\xbf\xdd\xbe\xbf\xbc\xda\xce.\xafw7\x8fW^\xc3O\xde\xfa7\x97\xa3\xf0\x1f\x97\xe3_\x7f{\xfc\xf4\xb2\x8d\xa6\xfd\xef\xe2\xe5v:\xbd{5\x9d^O\xa7\xcb\xcb\xe9\x87\xeb\xe9tuu1\xdd]]\xbc\x1c\xddN\xbfd\xe3\xe6\xed\x14\xf8\xdf\xd7\x8b\xe9\xed\x15\xf0\xfc\xfa\xeajzu1\x9d\xce.\x98\x82\x8b\xe9\xe5\xd5\xab\xa9~u7\x9d^]^\xf0<\xef\xae?\xbe\xbe\xf8\xf4\xe5\xea\xc3\xf5\xe6\xa5=\x9dn/\xa7\xb7\xd3WW\xb7\xb3\xbb\xe9\xe5h\x1a\xbe\x0f>~6n?^\x0e\xdf\xbeMV\xbf\x99\x9b\x0f3\xf3\xb7\x97/\xbf)\xcd/\xc6@m\x829*\xbe\xcf\xe6\xd7W\xb7\x0f_\x96\xbd\xe9\xff\xc6\xf7\xff\x7f\x1d\xdf\xab\xce\x01t\x1c\x9e\x8d\xad\x8asV\xcfH\xc9y\xab\x8c!U\xe7\xad\xc7\xcf\xbf\xe2\xed\xb7\x0f\xe3\x0f\xdf~\xbf\xd9\xb8\xbf\xbf\xbd\xcf|\xe9\x9b7{\xb6\xf8Y%\xae\xbfy\xfcj\xce\x1e\xde^\x15I\x97\x99!\x1f\xbf\xdb\xd7\x1d\x0d\xbf\xaf\xad\xfc\x9e-\xbeoOn\x1c\x15\xdf\xdf]\xb6\xf2\xfbN\xf1=\x1a\xbc5\x1f\xb2\x11\xe2\x91M\x96\xe8\x9f.\x93\xd9vv\xff\xe1.\xfc\xfa\x9b\xf5\xe6\xbf\xfb\x1f~\xbb\x99\xdf\xdd\x7f\x9e]\xdd\x1a\x8bWw\x97\xcb\x9f\xbd\xe0\xe5\xe0\xe7\xb7\xc6\xf4\xed\xa7]\xb2\x9c^\xbd\x99NM\xe3b\xfav\xf6A\x7f\xf3\xb5\x18\xcf?|\xfa\xfc\xfe\xee\x1f\xd6\xab\xaf\xd7\xd7\x92\x04J\xb3\x15C\x1f\x8e\xa1\x7f\x03\x8e\xcf\xccCwO=\xe0N\"\xb8\xf4A\x04\xd7\xa3\xcf\xcd\xb8\x98\xfe\x95\xdeZ\xae6\xe6\xe8\x87\xfc\x01\x9dE\x18\xfb\xf4F\xacA\xff\xda\xa3\x7f5\xe9_\xfb\xf4\xaf\x16\xfd\xeb\x80\xfe\x95?\x0b\xb4J}\xba\x15\xf9Nu\xb1\x89\x83|\xdb\xc3\xff\x12\x95\x96\xdbT\xa2\xe2\xc8N\x92m\x18\xbbB@\x8a\xc4\xbcS\xb4K\x85\x85\xeb\x98!,\xb64\xe9G\x1e\xbd\xc7c{\xf4.UH7\x9a>'\x101\xe7\x94\xca\xf3Q\xd4\xb3|\xd7\x93~BKPmK\xd2\x0fW\xf4\xaf\xb4-\xd6\xf8\x94\x0dH\xba7\xd8I\x84\x9cT\xcb\xf7\xd8\x0e\xe2\xf3%b\"M3\x06\xbbq\xb5\x9b\\\x9d0\xb2\x06\xdd\x9e\xf5BF5\xde\x19\x03\x96\xca\x18\x0e\xbb\xc3\xa1\x94\xac\xbf3Y\xaa\xa1\xbc\"s\xd7\xe7\xea1\xcd\xaeiJ\xa9\x06<\xd5`\xd0\x1d\xb4\xc8\xc6\xb7\xc8\xd2\xa5$\xa3\x9d\xc5U\xd3\xeb\xca\x1bd\xedF\\5\x03y5C\xbe\x9a\xa1\xd1\xed\xf7Z\xea\x19r\xf5\xf4\xe5\xf5\x18;\x83#a\xcf,2$\xc5\xc9\xb5C\xedq\xf6< \xf1:E\x934\x8c\xce\xf5I\\zd\xc9M\x9f`\xb4\xc8~'\xce\x0eT\xe7k\xb2\x9f\x1f5/p\xd1.\xfb\xe5\xdf\xff\xe5#\xd7\xb3;\x89\x13#\x14t\xec\xc0\xed\xfc\xe8{Ay\xea\xc0\xd4\x91\xff\xd3A,W\x90<\xa17d\xd4'u\x08\x80P\xadO\x00\x84\xed\xdd\x02\xaaM\xa9g\x00\x84*\x9d\x03\xaa\xaf\xbd\x7f@\x95)t\x11\xa8\xb2\xf6^\x02\xe9Q\xa5\xa3@\xb5\xb5\xf7\x15\x88J\xa9\xbb\xe4\x84\xcf\xdfc\x14\xbaL\xf9\xb0>\xbd3h\xe9G\xfeS\xba\x91\x7fb/\xe2\xe8\x14;\x11G\xa7\xd0\x87\xf8\xba\xd4\xba\x10G\xa7\xd4\x83\xf8\xda\x14:\x10_\x95J\xff\xe1\xabR\xe8>\xbc\x06\x95z\x0f_\x97B\xe7\xe1\x89\xd4\xfa\x8e\xff\xe7w\x9d\xb6^\x82\x9f\xd2K\xf0\x89\xbd\x84\xa3S\xec%\x1c\x9dB/\xe1\xebR\xeb%\x1c\x9dR/\xe1kS\xe8%|U*\xbd\x84\xafJ\xa1\x97\xf0\x1aT\xea%|]\n\xbd\x84'R\xeb%\xf8\xbb\xf4\x12\xb2^\xcf_\x1e\xe8c\xa0\xb4XN\xb8A1y\xce>?W\x9d?\xfd\xbf\x9e\x1f\x85qj\x07)K\x12\xa4\xb6\x17\x00D\xf9s\x82\xac}\xa6;\xf0\xc2d\xd3\xee)\xf2\xc0t\xacH\n2)\xcc\xbe\x85\xa0\xfeirBd\xc7\x89)\x94\x08\x9f&\x11D\xc6IDQ\xce\x97\x9a\x83\x82\x94v\x9d\"\x19t\x1e\x84\xe5O\x13\xa2\xac\xf6sn\x90\x98/\xb54\x8c\x8e\xe6\x93\x86\x11\xc7'\xef4Gs\xe2;\xc5\xbc\xea\xc7G\xf3*\xc88nY\xe7=\x9a\xd7\xf1\x8b\xab\xda*L_P\xaaN`\x98SX ms\n3\x89yNa'\xb1\xd0)\xec\xda\x82\x12\xd5\x11\xa51\xdd\xf1N'\xb2\xdc\xf1\x9c\xc4\x86;\x9e\x97\xccn\xc7s\x93\x99\xedxnmV\x93\x1a\x08\x1f]\x9d\xc8@\xc7s\x12\x1b\xe8x^2\x03\x1d\xcfMf\xa0\xe3\xb91QL\xb7<\xfe\xce\x1f\x83\x07a\x1aqL\x1389O\x94\xc2\xe4zMt\xfc\x18\\\xf1\x08\x92\x13\x84\x05\xa9\x14\xe4%\xe9\xda|[uD\xaa\x98\xfb\xa7\xb4\x03 Ri\x86\xaf\xdc\n\x89\xc0\xf8\x14\x81\x01\"\x15\x811)0\xed\xfb6}\xcf-g9)\x1f\x95\xd18s\xbb\xa7;O+\x9alt\x00\xe8\xb2\xc7\"\xda\xfa^]1\x1e\x00\xd4E\x81\x88~N\xdf_\x86\x18\x94%\"\x0e\xb8\xe2\x90wz\x80>\x7f.\xa2\x0e\x80{\x81\x94\xba\x8e\xef\x8bs;\x9f\xd2\x8f7\x03Av\x8a%\x08\xf2S\x8dA\xb08\xdd\x1e\x04\x93\xd3L\xc2\xa9\x0f\xb2\x8a\x82Y\x14\x86\x9b\xb9\x9d\xcd\xe3'\x98\xca\x7f\x92\xa5\xfc'\x1b\xca\x7f\x06;\xf9O4\x93\xffT+\xc1\x06\xc1'\x19\x04?\xc9 \xf8\xc9\x06\xc1\xcf`\x90'\x0ee\xac\xe6@\x83\xd04Zq\xd5\xaf\xa2\x13\xbc\xe3 \xc3\x05\xc8\x8eA\xb0a\x18\x1c\xd8\xb5\xe3\x07m\x19\xdb{\x06k\x9a&\x87\xf5=\x17\x82Z\x96\xc5A\x01\xd8p8\xe4`\x89\x877\xcd\x85\xef\x128\x1e\x8f9 .\x8c\x0d\xc1m\xdb\xe6%\x0d\xc3\x00\x92\xc1q\x1c\x01k\x00\x8c\x10\x82u\x9b\xdf\xd2d\xc0\x8b~\xf6\x87\xc3\x83P\xf6&g\x85\xd3\xc6:\x0d]%\xd8\xfeQ?\xd3_\x9ce\xb1\xf8Yw\xfc\x93\x80p\xd4B8\x12\x11\x0e[\x08\x87\"\xc2A\x0b\xe1@Dh\xb5\x10Z\"\xc2~\x0ba_Dh\xb6\x10\x9a\"\xc2^\x0baODh\xb4\x10\x1a\"B\xdd\x92\x13\xeaB\xed\xe8\xbd6\xd2\x9e\x98\xd6h%6 \xea|\x8c\xe1\x9c6^\xces\xda3\x1dt\xd8\x82\x88uX\x92\x08p\xd6\x82\x88uV\x92\x08p\xd4\x82\x88uT\x92\x08p\xd2\x82\x88uR\x92H\xa8\x08\xd6AI\"\xc09\x0b\"\xd69I\"\xc01\x0b\"\xd61I\"\xc0)\x0b\"\xd6)I\"\xc0!\x0b\"\xd6!I\"\xc8\x19K*\xd6\x9f(2\xb1+\xf1\x8eH\x11\x82N\x98O`1r\xd9\xc1{\xa8\xf7u~\x9c\xe5\x81\x8bE\xdf0\x07\x82Y\x01\x82\x0f{\x16?\x89\x84\xb1\x1d,\xf9\x81~`\x02\xf3\xf32\xc4<\xd7\xf9\x10@\xee\x11\xc6\xe1\x96\xc6\xf2\xaf\x0e\xa8\xa5\x85\xe0\x7f]\xcc\x17\x86\xcdO\xa8\xd1:\x8e0+\xb0\x85z\x8e\xcdO\xe6\x05w\x90\xc2\xee\x0f\xccE\x0f6J\xe4\x05l\x04\xe2Z\xba>\xe2\xad\xb2\nS\x08\x9d\x99f\xce\xcf\xa9 r\xa4\x0b\xa7v\x10o\x9b.\x1f\x8e\x94\xc1\x10B\x01\x837\xcc\xe1\xd0\xe2\x9b B\xc7\xf6x\xc8\x0b]E\x19<\xc1\x18\xa1\xb9\xc3\xeb$\xb07l@\xa2\xeb\xc6\xbc\xcf\xb3\xce\xa5\x9e\xe35k\x1b]\xef\xf7\xc7|\x08\x03 Mk\x88\\\x91W\x01\xf8\xf1\xc0q\x80 &\xc7\xa3\x04$q\\\x04\x91l\xedd\x85\\\x88`1X,\x16\xbc\xf4%\x01\xa4H4Z\xb8\x0b\xde{K\n\xb8s,\x16\x0e\x9a\x8bH\xa0\xde\xef.\\\xbe\x15d:\x91\"\x10f\x88\xe6\x9aV\xbe\xea\x84&\x80\xde\x7f\xd2\x9d\xc7\xf5\xd0\x1d\xdb\xae\xb7N\xce\xd9\xa1\"6\x18@\xd7\xe8Y1b\xd3\xadq\x8f\x85\x81(\x93EA\xa0>\x032\x00\x8cf\xe8\xac\xe4@R9\xd6\"\x0fc\x067\x1e\x8f\xc7\xc0\xea\xaf\xdew+\xc0y\x92<[iUz!\xd7\x90\xc5:P\xa41\xad\xd8U,\xe0UV\x1bbU\x96\xb5q+\xf7\x16[\xe4\x82*\xe2y\x15\xdb\x81\xa2\x96\xc8\x05kO\xb6\x1cX\xe7\"\xd3Q\"\xff\xe21\"\x17\x03\x90\xb0\x97\x01@\xd0\xd1x\x9c\xc8\xd7\x00\xa4\xc8\xddx\xa8\xdc\xe3\x98\x8c\xdfS\x9c\x8eO\xdd=\xd9\xefT\xa4Sw=\x86\xdb1\xde\xa7\xe0~*\xb9\xbeX'\x12oB\x97d!B\x8f\xe4\x80\x02\x87\xe4p\xb0?\xb20\xa1;r@\xa17\xb2\xc8\x16g|\xb6\x01\x90\xcbN>\xdd\x15\xdbe;\xc2\x13\xfd\xef\xe3\x88\x02\x9fc'!\xc0\xe7X\x88\xd0\xe78\xa0\xc0\xe78\x1c\xecs,L\xe8s\x1cP\xe8s\xc7M\xb9,\xbc6oc \xa2\xa0<\x9e\x06\xfb\x1c\x9b\x80}\xba\xcf\xe1\xe7\xf49|\xb2\xcf\xd1\xfc4\xadx d\xc5\xaeH\xf5\x02/\xe5-\x82\xf8,\xe4d\xa0\xf93\x0eZ\xdeF&\x91\xc0&f\xb6\x84\x08\x03D\xe3\xf2w\xd4\xb5\x0f\xd1\x07\xb8!\xdcn\x8f\xb4-\xd8\x92a\xb5\xc8(\x1cDd\x17\x1e\x08\x9b\x86\xc7\x81\xd6\xe1`\xa0\x818\x14l#&\xee\x15\x9a\x89\xdb\xbe\x17Z\x8a\x0f\xf5\x85\xc6b\xf7\xe2\xebm\xc0v\x83\xa9\x0cl[\"\x1a\x15\x1a\xd1W\xb4!\x8b\x13\x98\x90\x85\xc1\x16\xf4U\x0c\xe8+\xd9\xcfW3\x9f\xafj=68\x16\x1b\xcf?\xc1v\x023\xe1V3aE3\xb18\x81\x99X\x18l&\xacb&\xacd&\xacf&\xacj&6\x9e\x14\x9b \xc3f\xa2\x80\xc9\xcav\xc3\xadf\xd0\xd7\xba\xf3\x87\xe7zG\xef\xf4\xa3]\xa7\x17\xed:\xf4\xa6\xcbD \x05\xd6\xd4\x13\xd54R\xaa F\x815\x99PM\xbd\x92\xbe\xbd]r$Xc_Vc&\xb9\xaeP\x1f\x84\x03k\xb3\xa0\xda\xfa\xa5\xc4m\xb5\xc9p\n\x83\xf0\x01t\xa2lT\xff\xd3\xfcHR\xd9\xf3\xbb\x92\xa0\xb2\xef\xebM-\x95\xb6\x99\xf8x\x87\x12T\xf8,>\xa5\xe0T\n3{\xedi\xfe\x9f\xe8h\xc2\xba\xbe\x83\x9f\x81u}g7\x93\xd6\xd9f\xf4\x13\xbc\x0c\xac\xefOp2\x99?\xe1?\xd1\x9f\x84u}\x07\x7f\x02\xeb\xfa\xce\xfe$\xad\xb3\xcd\xbe'\xf8\x13X\xdf\xf3\xf8\x13Ua\x14\xa3\xfa\x0b\x1e\xda.\xff\xb4E\xfdq.m_~\x08\xa8\xf9\\W\xe2\xc4!\xa6?%\xd2\xcdb@=\xff\xe6\x11\x13\xb0\x15Q\x9f~\x80S\x89E\xa4\xa7W\x9fRb\x8a\xf3\xf0N?\x14\xe9I\xbe>#\xaf\x8f\x0fa\x8b*\x8d\xb2J \xc4-j5\xaaZyD^\xb1QT\xcc\x97fu\xf7\xf2\xba\xf9\xc8\xb8\xa8\xbbW\xd6\x0dD\xceE\xdd\xbd\xaan\x1e\x91\xd7\xdd+\xea\xe6K\xb3\xba\xcb\x86k\xa2\x96\xd7M\x07\x10e\xfdM\xe3\x01L.A\xd5|\xa0<\x97\xa1P\x80&\xd2@\xad\x02\x00Q\xc9P+\x01\xc0\x142\x94j\x00\xca\xab{\xd4\x9a\xb6\xf00>HoS+\xcc\xd0\x07\xde\x99\xb3\x98\x01\xf0\xe7\xc2'\xb3B\xc8-Ko\xcf\x8a\xa5\x0e_\xa4 \x9f\xcf\x1d\xbb\xaa[\xe4\x99u\xf5B\xe7o$\x10\xfb?!\x84\xc0\xc9+9D^Z\xcb!\xec\x08\x8d\x1c\xe2\xbe@\xc8!r\xf8J\x10\x89\xcf75\xc9\xdc\x9e\xa8K\xec\xf9u\xb3\x84\xce_\xcb#\xf6\x7fB\x1eI\x17 \xe5\x11\xf6\x82F\x9e\xb6\x8eP;\xad\xb0/(t\x06\x85p\xb5\xe8!\xbe\xa4\x83\xf8\xd2\xfe\xe1\xb7t\x0f_\xda;|y\xe7\xf0\xdb\xfa\x86\xdf\xde5\xfc\xb6\x9e\xe1\xcb;\x86\xdf\xd6/\xfc\xf6n\xe1\xb7\xf6\n\xbf\xb5S\xf8*}\xc2W\xe8\x12~[\x8f\xf0[;\x84\xaf\xd2\x1f|\x85\xee\xe0\xab\xf6\x06\xffI\x9dA\xe8\xf7X\xe2\xf7X\xea\xf7\xb8\xc5\xef\xb1\xd4\xef\xb1\xdc\xefq\x9b\xdf\xe3v\xbf\xc7m~\x8f\xe5~\x8f\xdb\xfc\x1e\xb7\xfb=n\xf5{\xdc\xea\xf7X\xc5\xef\xb1\x82\xdf\xe36\xbf\xc7\xad~\x8fU\xfc\x1e+\xf8=V\xf5\xfb\xb6\x80\x88&v\x16\xe7\xf6\x82}5j\xf6t\x8e\x16a\x8c\x0e\xe5\xc7{\xcf\xff\xd2\xf9\x0b\xfd\xe5A\x98\xcd\xc1\xc1\xc8\x8e\xcf\xe7a\xbab\x01\x87\xbf=\x86\x99o1\xcfqI\x92I\xc7\x14U\xdc\xf2\x960esqMAYt\xd2N\xb9\x93O\xa3b\x91\x9aRP\xaa\xa6\x18\x12\xac)U\xd8 V\x9d\x8e\x9dl\xa8\x93\x08\xecK\xe5\xf5e\xe2\xfa\xea\xd2\xc2\x82\xc9\x8c[\x17\xc2\x82a\x99`\x98\x12\x8c*u\x03\xd9\xe7\xfc<\xe6S\x81L\xf1\\\xf2A\xc2\xae\xeb\xcd\xdb?4\xd8u\xbd\x94E\x01\xfd\xc5m@`\xa9C\x17k\x0eb\x17\xddn\xaa\xc5\xe1\x96\x81\xc5\xe1\x16Bi\xcb8\\G<\xb6x\xceQ8!^\xfb\x01+A\xfeP\x80\x05+ \x8b8:m\xe1\xed\x90{(\x90\xd8\xde\x87\xeb\xf4<\x7fD\xbc\xfeJ\xa1\x7f\x1c\x18\xdbg=Lf~\xb2\x1c\xf6\x00\x12\x01;\x01\xcfC\xe0\x07\x00\x1046\x89\x83\xbd\x81C\x08\x1d\x82GJ}\x02\x84K\xdd\x02\x10\xa5\xdd3DDR\xe7\xc8\xd73R\xffPp\x10\x85\x01\xd4\xcd\x06:\xa9\xd3\xf8m>\xe3\xb7\xb9\x0c\xcbA\xe41\x1c\x0ev\x18\xbf\xcd_|Uwa\x81ro\x01\xd0rg\xe1\xe4P\xf0\x15\x98F\xee*\xfe\x93<\x05v\n,w\n\xdc\xe6\x14\xb8\xcd)X\x0e\"\xa7\xe0p\xb0S\xe06\xa7\xc0\xaaN\xc1\x02\xe5N\x01\xa0\xe5N\xc1\xc9\xa1\xe0\x140\x8d\xdc)p\x9bSPt\x0b\x8cvu%D\xee\xbd\x0e{5?\xd12\x10\xf9,\xfb\x9dfS\x9a\x08\xe4V\x99\x99aJ\x90\x90E\xc4c^R\xcd^\xa7!\xb5E\x90==7&\x95\x94\xe7F\xc7\xe8\xe4\xd9|\xfa\xb7\xc6\xeb\xf5\xfc\xe7\xea\x85\xa9@\x15\xf9\xe1S\xae\n\xbd\xa9\"\x7f\xe7A\xfd\x13\xc0\xa1\x8c$H\x1ea\xece\xeb\x89\xea\x0b\xe3\x13\xb2\xcc\xf5\xe2\xe2\x95\xff\xe5\x17\xcb\xeb\x9a\x88\x92\x82\xe5\x04|\nH\x90\xc5H@\xf5\xab0\xf6\x1e\xc3 =A\x808\xdc\xb2\xb5s\xfd#/\xdf\xc6vt\xa8\x19d\xbf\x9dg\xffL\xe8_A\xbd\x03\xa4\xc5\xc3 \xfb@P\xaf\x16\xa3\x0d\x8a\x13\x04\xd4_\x15M\xe0\xc7B+6,\x8f\xb6fU\xa3\xd0\x9c\xb4L\xa2R\xd8\xbc2\xb9Z\xcd,\x91\x8c`\x0d\xd8\x1b\x96\xc9K\x91\x9fhIj\xc7)%N\xf1\x19\xfd\xfcyS\x15\xf90\xff9\xff\xbcy\x92\x8f)\x05\x0f\x889\n\\\x805\n\\\x96q\xf6\x88c\x8b\x02\x17bZ\xbe\xe8\x93\xe7[\x14\xb0\xac\xcb\xa7$\xf7\xe2\x11\xc4{n'(\x1b\xc8\x00\xeeU\x11\xcb\xbf~N\xd6P=\x845\x1e\xa3\xd4Y\x81:\xcfKx\xad\x17\x8f\xc9\n\xcag4\xff\x04\xe1Ee\xd0\x8aE\x06\x07\xac\x97A\x85\xc6\xcb\xf9\xe4\xb6\x03\xb84\xa6jxp\x96\xca9T\x86\x02\x98PF\xc9\xf9@6\xc9\xb94&\x01\xf80\xca\xcf9\xc1\xba/uS\xaa\x1e\xd4\x0e\xa9\xe5\x9c\x13\xa8\xe4\xfbu\x92z\x8b=\xd0q\"\xdby`\xfb\x0d\xf1\xac\"\xac\xb2T\"\xedW8\xb6\xf3\xe4\xac\xa8\xbeS?\x01YsF\xa9Q|\x07\xca9\xb1\xfd\x87|\xc8\xd6\x00\x99\xab\xc2\xccQ\xbaE(\xe0+(\x01L\x0d\xd5S\xb6\x8a$\xb2\x1dT1\x83k\xb2\xf3\xd74\x1eh~\xae\x97\xa4\xb17_\xa7H\xc0\xb2\xa0\xa29\x96\x08\xb6\xf7\xe4A\x0da\xc3\xc29\xda,X1\xa3\xbaP\xc3\xaa\xe9Ar{Ul\xd8~\xd4p\xa2\xba\x91\xcc4\x15\xab\xda4<\xaf\xca\x0c43\x89\x11*\x9e\xac\x11\x1a\x96\x84% \xaer;0=\x95\xb4\x04\xd9Qk\x96P_-\x0e\xdf\xea\xccl\xebz\x81\x8d\x8bh\x9c\x88A\xb5\x1c|\xaeO\xca\xffB\x9c\x0c \xa7\x1e\xcb\xc9(9\x19\x10\xa7\x9e\x84\x93\xc9r\xea\x95\x9cz\x10'S\xc2\xa9\xcfr2KN&\xc4\xa9/\xe1d\xb1\x9c\xfa%\xa7>\xc4\xc9\x92p\x1a\xb0\x9c\xac\x92\x93\x05q\x1aH8\x0dYN\x83\x92\xd3\x00\xe24\x94p\x1a\xb1\x9c\x86%\xa7!\xc4i$\xe14f9\x8dJN#\x88\x13\xb6\x93T\xe6\x9cz\xf6?\x96\xe38\xfb\xdf\x84\xf8\x19\x085\x97Y\xd4\xa7\xcb\xd6C\xe5\xbbm7\xe8\\\x9f\xd4$\xe0\xca*\xe7e\xc8\x96o\x0d/\x83\xe0e\x00\xbc\x92U\xec\x05\x0f\x99d\x15i\x80\x966)F\x81\x00\x05)\x89\x0d\x80\xd8\xa0\x88\x0d\x85\\\xdb\x81\xe7O\xe4\xfd\x88\xc6\x9e\xbe\xa4\x86\x18>\xf7\xaaZc\x0e\x0c/\xbe\xcb\xc2\x1a\xac\xe5\xf8\xb55\xcbFmA\xf6\x9c\xcbk\x81\x04\xadK\xafgZa\xe7\xd5W<\x8e^d\xf3\xd4\xa7\xad\xb3a)\x9e\xba\xd4>\xcd\xb8\x7f\xcaj\xfbT\xab\x7f\xbf\x057+\xd1\xf3\xae\xb9a\xee\xcf\xb2\xec\x86Y?\xe3\xca\x1b\xae\xe0\xb9\x17\xdf\"\xfd?\xd7\xfa\x9b\xeabOY\x82\x8b\x18\x1d\xbb\n\x17\xf19a!.bu\xdaZ\\\xac\xa9\x13\x96\xe3\xacY\x9f\x7fE\x0e\xd6\xf0|\x8br\x90\xfd3\xaf\xcb\xc1:\xbe\xd3\xd2\x9c\xb2\xee3\xad\xce)\x9eO^\xa0\x0b\xb8\x9d\xb6F\x170;u\x99.`\xf7\xc4\x95\xba\x80\xeb\xd3\x17\xebB\xc3\x1c\xbb^\xe7\xe7\xeb',\xd9\xe5\xcc\x8e\\\xb5\xcb\x99\x1d\xb9p\x973;r\xed.gv\xe4\xf2]\xce\xec\xc8\x15\xbc\x9c\xd9\x91\x8bx9\xb3#\xd7\xf1rf\xc7/\xe5[\xfc\xf6\x89\xaby\x96\xfb\xe2i\x0bz\x90\xddS\xd6\xf4T\xf7?aY\x0f\xd3\xb3+{\x85\xa5\xbd\xc21\x9a\x9c\xa7\xff\xcc\xcb}\x9e\xdf\xb3\xaf\xf6\xfd?c\xb1\x0fTr\xc2Z\xdf?a5\xf8\xacK}P\x80\xd65\xdfs\xad\xf4\xfd\xa7,\xf4Y\xe2\x13\xd7\xf9\x90\x0cO^\xe6\x9fb\xd7?g\x95\x7f\x9a\xc1\xbf\xe3\"\xdf\xff\x9ek|\x88\xf9\xf3,\xf1!\xce\xcf\xb9\xc2\x87\xf8?\xfb\x02\x1f\xd6\xfd\xb3\xad\xef\xfdgZ\xde\xc3|\x8e^\xdd\xc3lNY\xdc\xc3\x9cN\\\xdb\x8b\xb4t\xca\xd2\xde\xff\xde+{\xa0\x82g\\\xd8\x03\xdc\x9f{]\x0fT\xf1\xbd\x96\xf5\xfe\xf3\xaf\xea\xfd\xe7\\\xd4\x83\xccN\\\xd3\x83\xbcN^\xd2\x83\xdc\x9e\xba\xa2\x07\x99>\xc3\x82^`\x93\xa3\xd7\xf3\xec\xcc\xfc\x94\xe5\xbc\x8c\xd7\xb1\xaby\x19\xafc\x17\xf32^\xc7\xae\xe5e\xbc\x8e]\xca\xcbx\x1d\xbb\x92\x97\xf1:v!/\xe3u\xec:^\xc6\xeb\x84e\xbc\xd4]\x9f\xba\x8a\x97\xae\xae\x8e^\xc4K\x17\x84'\xac\xe1\xfd\xa7-\xe1!\xf2\xe3V\xf0\xa2\xc5:~\xe6\xc5:\xcf\xef\xd9\x17\xeb\xf8\xcfX\xac\x03\x95\x9c\xb0X\xc7',\xea\x9eu\xb1\x0e\n\xd0\xbav{\xae\xc5:~\xcab\x9d%>q\xb1\x0e\xc9\xf0\xe4\xc5\xfa)v\xfds\x16\xeb\xa7\x19\xfc;.\xd6\xf1\xf7\\\xacC\xcc\x9fg\xb1\x0eq~\xce\xc5:\xc4\xff\xd9\x17\xeb\xb0\xee\x9fm\xb1\x8e\x9fi\xb1\x0e\xf39z\xb1\x0e\xb39e\xb1\x0es:q\xb1.\xd2\xd2)\x8bu\xfc\xbd\x17\xeb@\x05\xcf\xb8X\x07\xb8?\xf7b\x1d\xa8\xe2{-\xd6\xf1\xf3/\xd6\xf1s.\xd6Af'.\xd6A^'/\xd6AnO]\xac\x83L\x9fa\xb1.\xb0\xc9\xd1\x8buvf~\xcab]\xc6\xeb\xd8\xc5\xba\x8c\xd7\xb1\x8bu\x19\xafc\x17\xeb2^\xc7.\xd6e\xbc\x8e]\xac\xcbx\x1d\xbbX\x97\xf1:v\xb1.\xe3u\xc2b]\xea\xaeO]\xacKWWG/\xd6\xa5\x0b\xc2\x13\x16\xeb\xf8i\x8bu\x88\x9c[\xac3\xf4\x87\x05\x0e\xed4\x7fG\xce\xe4\x0fz-\xcc@\xe3\x12\x9a\xbf1\xa7\x05\x1b\x94\xd8\x93\xde\x82\xb4\xc8\xdf\x82\xa4.W\x83V\x12\xad\x81+\xbcYH\xfd\xfc\x81\xe6\x1f#\xb2\x7f\x94\xc4\xbe\xba\xc0\xb0l\xc7\x98\xb9\x06\xab\xc9\x86)\xd9\xa8\xd2\xc4\x0e\x12-A\xb1\xb78,\xc2 \xd5\x16\xb6\xef\xe1\xfd\xb9fG\x11FZ\xb2OR\xe4\x9f]`/x\x98\xd9\xce\x87\xfc\xd7\xd7a\x90\x9e\xd9\x1b\x14xq'@\xbb\xea\xe7\xb3\x15\xc2\x1b\x94-r\x9b\x9f:\x01Z\xa3\xb3\xf5|\x1d\xa4\xeb\xb38\x9c\x87ix\x16d\xff$h\x19\xa2\xce\xda;\xb3c\xcf\xc6g\x8d\x14\x8ct\x9c`K\x14\xc6K\xcf>\x83\xc0\xb9t\x9a\xa0E\xc2*J*\x9e\x80\xc7:\xa1\x8b\xa8\xf7\xa0e\x0f(\xa2Wa\x90\x84\xd8N\xce\xfc0\xb0\x9d0\xfbO\x98G\x13,\xa3u\xec\xa1\x98!\xcd\x9fun2\x95\x96\x00\x11}\xad`\x8a\x03\xa3\xf6\xc6\x1e\xa2\xb6\x17\x86\xa3x\x00v\x15R\xa7+\x84\xed\x84&/\x9e\x9dI\xccT\x16\xa9Z5\xf5|D\xd7\x91?\x81\xa0\xf3\xd0\x0d\x03\x8f\xc2^\xe4\x8f:\xb3\x8f\x10\xde\xb1\xb1\x97\xa4!m\x85\xe2\x99\x80bi\xc7\xb6\x1f\x06.-|\xf9\x10\x14\xc9N\x1eP\xbc\xf10\xa6\xfd\x84x\x0e\x91\x95\x8d(>\xa1\xe5\xa56\xf6\x98\x0f_/\x12\xad\xc8\xc3\x91\xc0\xe2\x89\xc2`I\x8f=\xf9;\xafT\xebc\xb0e\x95\nu*\x0c\xd0^6\x88\xaa\xca\xe1\x1f-\x06X#V\xaf\x11\xd25\x8d%M\xb2-r\xc8}\xee\x93\xefT1\xf7E\xf8\xc5\xd6\xa0\x00\x06\x0f\xe8Q\x80\x1e\x0f0)\x00\xf7y\xfa\xc5\xb6/\x17q\xb1\xb5(\x80\xc5\x03\x06\x14`\xc0\x03\x86m\xcd\x1cQ\x80\x11\x0f\x18S\x80\xb1~\xfc\x9b\xba\x19\x8f\x15Z\x84E@Fa1\x90]X\x0cd\x1a\x16\x03Y\xa7U\xe2E\xf1\xb9\xb36\x1b\xb1\x18\xc8L\nm\x1f\xb1\x18\xc8X,&\xb3\x97\x82\xc1\x14F\x05\xba\xbf\x8b\x8d\xe8\xb7\xb5\xc3` \xa0 \xfdv\x0b\xfa\xed\x06l\x11v\x91\x7f\xed\xac\xd5|~\xbb\xf5Z\x1b=b \xa0\xed\xfc#M'\xb6R\xdb\xe0\xc7\x00@+\xe1v+\xe1v+\xe1v+\xb5\x08\xbb\xc8?v\xd6j%\xdcn\xa5\xd6F\x8f\x18\x08h%\xcc[\x89\xc2xA\xb4N\xb5\x18%\xa8\xb9\xdfnG\x11\xb2c;p\x8a/qN4?|d\x1f2&Z\xa7i\x18\x14l\xce\xcfs\xfc\"t\xd6\x89\xe6\x05\x01\xfb\x16`\xa2F\x1eZ~\x86\xed\\\x9fD\xb6\xebz\xc1\x92]\x18\xaf\x8cC\xb9\xd1\xca\xbf>y\xd5\xab\xca\xf8\xd7\x19\xaf\xcc\xaa\xac\xcf\x97\xf5\xab\xb2\x11_f\xd5\xf5\x0d\xf8B\xadW\x17\xf7\xac\x17l\xa1\xa5W\x85\x16\xfb\xa9\xe5\x956\xac)\x87<\xa5\xa1\xd7\xa4\xfcg\x9a\xf3\xcd\xe6\x1cBl;\xf3\xb0\x0d-\xddf\xc5\x15\x93\xf2\x01\xc5\xa4\x84@1-#\x0b\xc8D\xdb@R\xb2\xc0U\xf1\xce\xb9\x12\x90\xfd\xcc\x96{\xc1\n\xc5^ZA\xca_\x15\xe6\x89\x03\xe39\xd9t#q\x1e\xa2\x18\xf2\x1f\xa2\x18r!\xa2\x18\xf2\"\xb2n\xd8\x91\xc8\xea!_\"\xcaAw\"\xcaa\x8f\"E\x10;U\x86j\xf7+JX\xd0\xb5(qA\xef\xa2\x04\x86\x1d\x8c\x16Y\xecc\xbc\xd0\xb0\x9b\x11\xfc$\x9eF\xa0*gS\xf06\x85\xa8d\x95E\x132\x0f\xf4\xa5\x0e\xe8K\xfd\xcf\x97\xba\x9f\xdf\xe6}\xbe\xdc\xf9|\xb9\xef\xf9-\xae\xe7\xabx\x9e\xaf\xe2x~\x9b\xdf\xf9mn\xe7\xb7z\x9d\xaf\xe6t\xac\xbc\x02\x9f\xf3U\\\xce?\xce\xe3`\xe7\xc2R\xe7\xc2R\xe7\xc2R\xe7\xc2R\xe7\xc2m\xce\x85\xe5\xce\x85\xe5\xce\x85[\x9c\x0b\xab8\x17Vq.\xdc\xe6\\\xb8\xcd\xb9p\xabsa5\xe7b\xe5\x158\x17Vq.\xcc9\x17\x05Lc\xdby@\xee\x01\xa34E\xb1\x96D\xb6\x93E^]\x83\xfb>E\x01\xd4\xd2\x8c\x19\x0b\xd7\xba\xba%\"\xf0\xd1\xd2\xe6\xd8\xf72x\xfb\xb8z\x009\xe6\xdf/:F\\\x80\xa2Mb\xa8\x92\\h\x05\xa9\x15f\x83\xba\xaac[\xc2\x11\xb46\x84\xafB\xa1\x1d\x12\x91\xf1\xb1\"s\x04\xad\"\xf3U\x14\"S\x14x\xa5%!\xf6\xdcC\xbe\x8f^u\x16\x0e\x93z)F4\xa6\xdb\xb38\x98\x13F{\x06e)\x98\xfa\x00\x8a\x94;O\xbbT\x1cL$\x18\x0f\xb4\x9e\xc9\x0fk\x89}%\x81}EyY\\\x9b\xb82\xc9\xb0\x92dXQ2\x16g\xb1^\xe5\x05\x0f\x87\x14\xedR\xcdEN\x18\xdb\xe5 Vv\xd1\x9b\xc1\xce\xb8'\xe7\xb6\x93z\x1b\x04\x14\xe4\xcb\\\xe0\xf9*\xdc\xb0k\xe4\xfc\xb9\x80\xff\xc6K\xbc\x145o\x1cMc;H\xbc\xea\\g\x18w\xba\x86\x95t\x90\x9d \xcd\x0b&\xd2R\xbe=\x85\x90\x87p\x9df*:7\xa2]\xc7\x0d\xd3\x14\xb9\x1dg\x1d\xc7(H_eLX\xba$=d\xff\x14Yn-\xddGP\x8e\xc0\xdf\x16\xab\xc1\xda\x15\x81\xd9zk\x90\xe5\\,\xe1o{D9\x1f\xc6\xf8[\x93(\xe7\x03\x19\x7f\xdb'\xca\xf9P\xc6\xdfZd\xfd|0\xe3o\x07\x04\xc0\x84$\x18\x92\x12@U\x8c\x08\xc0\x00\x92qL\x00\xc6\x90\x0c\xc5+\xd4\x1b\xd0I\x9b\xf1\x859\xf2\x85\x93\xdc\"\x0c\x042\n\x0d\x01\xedBC@\xd3\xd0\x10\xd0:\x8c,\xa0\x81h\x0cl#F\x1a\xd0L4\x06\xb6\x14\x8d\x11\x1b\x8b\xc6)\xec\xf6\xab\x8e\xdd\xa5\x15\xfdV#\xfa\xad6\xf4[M\xe8\xb7Z\xd0o5\xa0\xdfn?\xbf\xdd|~\xbb\xf5\xfcv\xe3\xf9j\xb6\xf3\x8f3\x9d\xd8J\xb8\xd5J\xb8\xd5J\xb8\xd5J\xb8\xd5J\xb8\xd5J\xb8\xddJ\xb8\xddJ\xb8\xddJ\xb8\xddJX\xcdJ\x98\xb3\x12\x05\xdb\x1a\x07\x91Z\xb7\xbd\x83H\x9f[\xf3 R\xe4\xb6\x7f\x10ipk\x1d\x84\xaa\xcb<\xa1*e=`\xab\xf5\xaa\xb2\x1ePVq\xe5\xd6\xd0[\xcd\xac\xe8L\x9e\xce\xac\xda`\x9a|Y\xd5\x08\xb3\xcf\x95\xf5+\x9e}\x9e\xa7U\x95q\x0b\xf6\xad6\xa8\xca\x06|\xd9\xb0*\x1b\x02eU\xfb\xb8U\xfeV\x1bUt#\x9en\\\x95\x8d\xf9\xb2,\xe0\x10\xf5\xb7\xad\x96\xae\xbc\xd8\xad\x95\xd35\xb3\xff\xf1\xa0mX\x00\x93\xaaY\x83\xee`0\x18\x0c9d\x9e\xc7.0\xf9b\xbc}\x80?0.\x9aM\x13b/mJ!GmJ!_mJ!w%\xea\x85=\x96\x00@NKH\x06\xf9-Q\x0c\xb9nS\x0cz/Q\x0c90Q\x0c\xf90\xa1\x16\xc8\x8d\x9bb\xd0\x93\x9bb\xd0\x99\x9bb\xd0\x9f\x89b\xc8\xa5 \x9b@^\xdd\x14\xc3\x8eM\xdaD\xe0\xdb\xa4\xeaZ\xdd\x9bh\xab\xcc\xc3\x1bX\xee\xe4\n^\xae\x10\xc6\xe4\x01\x8a\xc4\xf3}\x99\xe3\xfb2\xbf\xf7en\xef\xb7x\xbd/uz_\xea\xf3\xbe\xd4\xe5}\xa9\xc7\xfbR\x87\xf7\xa5\xfe\xeeK\xdd\xdd\x97z\xbb/uv_\xea\xeb\xbe\xd4\xd5}\xa9\xa7\xfbrG\xf7[\xfd\xdc?\xc2\xcd}%/\xf7\xd5\x9d\x1c\xf6g,\xf3g,\xf3g,\xf3g,\xf3g\xdc\xe2\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xee\xcf\xb8\xd5\x9f\xf1\x11\xfe\x8c\x95\xfc\x19S\xfeL!\xc2\x0d\x8a\x178\xdcj\x1b/\xf1\xe6\x18\x1d\xaa\x07\xe7\xe5\x03\x01|\xe5\xb9.\n\x1at\xf1\xbb\x00\x9c8q\x88q\x03.~\x17\x80\xf3H\xaa\x86\xf2;\x1b5p\xc7\xc9\xac\xedZ\xa4\xde\xb1rk;\xb9\xe4;Vvm'\x97~G\xcb\xaf\xedd-\xd8\xf3-\xd8\xb7\xb4`\xcf\xb5`/o\xc1\x9ek\xc1^\xde\x82=\xd3\x82\xfdi\x01-\xebXY\xe8p\x94oQ\x04\n\xeeE\xe1[=\x8cB\xab8\x19I\xa0\xecg\x0c\x91\x92\xab14\n\xde\xc6P\xa88\x1cE\xa2\xeas\x0c\x91\x92\xdb14\n\x9e\xc7P(\xcc\xc1\xaa\x81&\xe7\x92\xfe\x91\x1e\xe9\x1f\xe7\x90\xfe1\xfe\xe8\x1f\xe9\x8e\xfe \xde\xe8\x1f\xef\x8c\xfe\xb1\xbe\xe8\x1f\xed\x8a\xfe \x9e\xe8\x1f\xef\x88\xfe\xb1~\xe8\x1f\xe9\x86*\x1e\x87\x8f\xf48|\x9c\xc7\x1d3\xc7\x92`%\x8f\xc3'x\x1c>\xde\xe3\x8e\x9dki\x02%\x8f\xc3'x\x1c>\xde\xe3\x8e\x9dsi\x02 XKR;\xf5\x9cCq\x055\xcc\xdf\x8d\x91\xb2\xb7Ob\x84\xf3;\xa2\x0d\xaazB\xe3\xecy\x12\xe2uJ\xe0\xaa'4\xae\xf8\xa8~\x0d\xca\x7fU\x18\x8e\x0f\x80\xe0\xd9\xc8\xae$;\x05\x94\x8bOA%-\xa0pE#\x14Z\xa10\xa9\x94M\xf3\x15[\xe6+7\xccWk\x97\x7f\\\xb3\xc4-\xc0\x8a-\xc0\xca-\xc0j-\xc0\\\x0b\xe8N\x92'r\xc3\xc8v\xbct\xcf\xbdu@\x1b7e\xdd1[8\"\n\xd9\xbb\xe9\xda\x90(d/\xc1k\x03\xa2\x90\xbdm\xafYD!{\xad_\xeb\x13\x85\xec\xfb\x034\x93(d_T\xa0\xf5\x88B\xf6\x8d\x08\x9aA\x14rJ\xd0\xad\xa6P\xe7$\xd2{d1{0\"\xd4\x1a\xce\xccy\xfb8L\xed\x14i}\x8b>o\xb0\x08c\xff\xbc(\xfb\xb1o\xb9h\xf9\xd3D\xf0\x1cd7\xd6\xc5\xec\xc6:\xcc\xaex\x0e\xb23L\x89x\x86)\x90\xaf,\x809\x8e$\x12\x1a#\x81\x88e\x01\xc8\xb1\xd7\x93\xc8\xd8\xeb d,\x0b`\x8eC\x89\x8c\xbd\xa1@\xc6\xb2\x00\xe4h\x1a\x12\x19MC cY\xa00\x96\x1e`\xd7\xd2\x88\x0f\x1c<\x8fwI9\x9e\xe6`R\x96\xa7\xfa\x98\x9c\xe9\x89n&ez\xaa\xa7\xc9\x99\x9e\xe8lR\xa6\xad\xfe\xa6\xe0p\n\x93w\xe3\x85\xfes;\xa1\x84\xe1\x89>(\xe1x\xb2\x0b\xcax\x9e\xea\x81\x12\x9e';\xa0\x8c\xe7\xa9\xfe'\xe1\xf9D\xf7\x93z\x1a~nO\x930<\xd1\xd3$\x1cO\xf64\x19\xcfS=M\xc2\xf3dO\x93\xf1<\xd5\xd3$<\xdb=\x8db:\xc7\xb6\xf3\x90EP\xf9y\xce\xf3x9\xb7\x7f\xd4\xcf\xb2?\xdd\xf1O\x10t\x04AG t\x08A\x87 t\x00A\x07 \xd4\x82\xa0\x16\x08\xedC\xd0>\x085!\xa8 B{\x10\xb4\x07B\x0d\x08j\x80P\xdd\x02\xa0:\xdb\xae\xed\xca+\x02\xde\x02\xbbJp\x8e}qf\xe8\xfa\x0b\xded\x05|$\x82\xb3f+\xe0C\x11\x9c5]\x01\x1f\x88\xe0\xac\xf9\n\xb8%\x82\xc3M\xed\x8b\xe0\xac\x19\x0b\xb8)\x82\xb3\xa6,\xe0=\x11\x9c5g\x017Dp\xd0\xa4%\xf6\xaf:{\x93:@v\xacQ\x10\xc3`V`\xae\x1d?h\xcb\xd8\xdeW\x08\xd3dVw\xbe\xe7R\x00\xcbb\x96ad\xe1p\xc8\xacG\x13\x0foP\\\x15s\xefB\xc3\xf95\x0b\x1ad\xdb6#A\x18\x06\x94\x08\x8e\xe3@lH\x08B\x08\xd0E\xae\xdd\n\xb2\xe8g\x7f\x00\xf5\xd7\x80\xc5\x02PV\x8c\xdc\xba\x92\xa1\xde\xd7\x19\x0cQ\xbcX\xf4\x0ds\x00IJ\x81\x86=\x8biN\x18\xdb\xc1\x92\x10c\xc0]\xe9_\x86\x98\xe00\xe7\xae\xd9\xef\x11\xc6\xe1\xb6Dd`H\n\n\xf4\xd7\xc5|a\xd8\x8cy\xa2u\x1c\xe1Z\x10\x0b\xf5\x1c\x9b\xbd\x9c\x90s\xa2qv\x7f`.z\x80\xea\"/\xa8=\xd1\xb5t}\xc4\xe8n\x15\xa6\x14&S\xe0\x9c\xb1\x10]>\xd2aW\xa0Q\xb6\xe9\x0eA\xb7G(\xa8{\x869\x1cZ=\xd6\xb3I\xc0\xd8\x1e\x0f\xfb\xb0\xdf\x11\xb01Bs\x87iW`o\xf6M'5\xe6\xfd> \xcd\x1c\xafQ\x03\xea\xf7\xc7\xec\xcb\n\x88r\xd3\x1a\"\x17\xb4)\x89\x1a\x0f\x1c\x87u\xe1\x1c\x85\x12\x1a\xe8\xb8\x88\x03n\xedd\x85\\\n\xb6\x18,\x16\x0b\x04\xc2(\x15\xa0\xd1\xc2]X \x8eq\xb9\xc5\xc2As\x10H\xf5\x10w\xe1ro'\xc3a\\_\xb1/\x80\xd5-AZkK\xad\x8e<\xe6\xb6\xf3\xb0,\xde\x91ZPH\x83\x90\x8ap\xd4B\xc8\x85$\x15\xe1\xb0\x85\x90\x0bP*\xc2A\x0b!\x17\xaeT\x84V\x0b!\x17\xbcT\x84\xfd\x16B.\x94\xa9\x08\xcd\x16B.\xb0\xa9\x08{-\x84\\\x98S\x11\x1a-\x84\xdc\x0cY\x11\xea\x96\x9c\x90\x0b\x81\xe6K\xad\x8e\x828\xca\xb6\x80\xa8&\x86\xdc\xa7-<\xaa\x89!\x17j\x0b\x96jb\xc8\x8d\xdaB\xa7\x9a\x18r\xa5\xb6@\xaa&\x86\xdc\xa9-\xac\xaa\x89!\x97j\x0b\xb2jb\xc8\xad\xdaB\xae\x9a\x18r\xad\xd6\x00\xact/\x9e\x92\x0f\xc7\xe6K\x8d\x88\xc8x\x02.8\x9b/\xb5&>\xe3\xf1\\\xa86_ju\xb4\xc6\xc3\xb9\xc0m\xbe\x14A\xb90n\xbe\xac\x824\x1e\xcc\x05u\xf3\xa5F\xc5u< \x17\xe2e\x92\xd7Q\x1e\x8f\xe7\x02\xbe\xba\n\x01\x01\x17\xfeU\xba/\x02<\x9e\x00\n\x06+\xc7\x80\xe0\xect9_\x16+\xe4\xc8\x8eQ\x90\xf2\x14D!l\xe3l\xc2\x03\xda\x01D\x98\xf3\xa5\x00\x0c\xc5\x9b\xb5\xa2D$|\xf49_je\x00\n\xe1\xf9X4s\xa3,\x1c\x85\xd0|d:_VA\x00\x87\xe7\xe3\xd4Zz\x11 \x18\xb5\xce\x97U@\nt\x02 \x86\xadk\x11RA\x11me\xb8<\xd4\xe4I\xa0\xf8v\xbe\xd4\xea\x10\x176\x1f\x1b\xedfM\x11\xa1\xf9\xd8\xb7i\x88\x88\x86\x8f\x84\x9b1&\x8b\xe0\x80A \x88\x8b\xf3\x81C\x00\x07\xa2d\xa2\xb3\xc2DP\xcc\x9cu\xd8,l\x86\xc6U>\x82\xaeZ\x91\x87\xab\x10 \x10O/Eh(\xba\xae\xdb \xa0\x81b\xed\x8a\xa6\x0e\xb7\x81\x81\x0d\x88\xbc\xb3a\x87\x08\xbe\x013\x02qxC$R2\x14\x957T\xe2\x0e\x06\xc4\xe8\x0d\x99hT\xe1#\xf6\xf9\xb2\x0e\xd79\x020r\xcf\xef\x97\x17s%t\x07\x9d,\xce\x7fn\xd6N\xec\xbb\xd7rd3\xf3\x8a\xb9\x11\x18\x8a%71\x17\xf0zn\x16sl \x14Cn\xe6.\xd0\xd5\xe4-\xe6W#(v\xdc\xcc^\x80\xe5\xacx6\xdc\xac_\x00\x8bY\\\xcc\xa8,\xa7Xq1A\x01%\xc3\x021C\nE\xb1\xe5\xe2\x86R+U\xe8 Q\\\x0d\xa1\x18r\x81\x05)\x81\x9c#\x81\xa1Xr\xa1\x07\xe1[y8\xd1\xe2\x7f\x05\x86b \x05'\x05E\x0bC\x88\x17;\xdc\x10\x1dI\x1b\xeb-]-C\x90\xecd+h\x92l\xd4\xcax$f\xcc.\x8fH\xb2a+\xe3\xa1\x981\xbbt\"\xc9\x06\xad\x8c\x07b\xc6\xec\xb2\x8a$\xb3Z\x19[b\xc6\xec\x92\x8b$\xeb\xb72\xee\x8b\x19\xb3\xcb1\x92\xcclel\x8a\x19\xb3K5\x92\xac\xd7\xca\xb8'f\xcc.\xe3H2\xa3\x95\xb1!f\xcc.\xf1\x88\xae$\xed 5\x82d\xdc\x96' Ie\x9d\xa4F\xc8\x98\xc3\x1d\xa5J%\xb41\x1f\xca\x99\xc3\x9d\xa5J5\xb41\x1f\xc8\x99\xc3\x1d\xa6JE\xb41\xb7\xe4\xcc\xe1NS\xa5*\xda\x98\xf7\xe5\xcc\xe1\x8eS\xa52\xda\x98\x9br\xe6p\xe7\xa9R\x1dm\xcc{r\xe6p\x07\xaaR!m\xcc\x0d9s\xb8\x13\x95\x81\x9e\x98w\x05 Y\xcb\xa2\xc3e[HW#\n\x8e\xd0\xd2\x00\x0c\x17\xa9\\\x8d\x94=\x174\x02\x8b\"8~$\xd3;\xd2*\xd8(\x12X\xb2\xc0\x01%\x91\x10\x92V\xc0\x84\x95\xc0\xb2\x19\x8e0\xcb\x0c\x92\x94\xb7\x94\xaf \xe4\xac\xd3MR\xceT\x84\x08,\xc9\xe0\x18\x94\xc9NIk\x00\"Q 9\x00\x07\xa5dJK\xae|&4\x05V\x89p\x94J%\xc1\x14\xda!\xadC\x10\xb6Ry\xb3\xf6~@\x06\x9c\xc0\xbaP\x18\xc7V\xa96i\x0d-\xcc\x05\x81-\x95\x98\x93\xf2'q\x82Z\x84i\xbc\x9a\x89B \xbddci\xae\x1a\x85\xb0z\xa9\x12Y/\xd9\xe0ZZ\x93 \xce^\xaa\x84\xdaK6\xda\x96\xd6$\x08\xbc\x97*\xb1\xf7\x92\x0d\xbf\xa55 \"\xf1\xa5J0\xbed\xe3qiM\x82\xd0|\xa9\x12\x9d/\xd9\x00]Z\x93 V_\xaa\x84\xebK6b\x97\xd6$\x08\xde\x97*\xf1\xfb\x92\x0d\xe1\xa55 \xa2\xf9\xa5J@\xbfdcziMpdBl\xf6\xb5\x8fA\x92\x9e\xab\x16\xef\x13\xbb\x83\n\xb5\x89{\xaf\xda\x02\x80\xd8NT\xa8M\xdc\x83\xd5V\x04\xc4\xfe\xa3Bm\xe2^\xac\xb6D 6,\x15j\x13\xf7d\xb55\x03\xb1\xc3\xa9P\x9b\xb87\xab-\"\x88-Q\x85\xda\xc4=ZmUA\xec\xa1*\xd4&\xee\xd5j\xcb\x0cb\xd3U\xa16q\xcfV[wT;l\xe2\xaajDQO\x15\x14\x01\xdbo\x05^\xca\x8c\xe3\x03\xed\xcc\x15\xd0zsN\xcc\xad\x810<\xf9\xad\xbb\x82\xa0\xd8\xbd\x133,\xcb\x19n\xfc\xc6^\x81^\x86X\"\\^\xcap\xe27\xfd\nl\xb1\xc7 \xe6U\x96\x93\xdc\xf8-AR'm\x0c)\x14-$\xb0mX\xd0\x14{\x80b\x9ee9\xc5\x0d\xdaT$%h\xe3I\xa1(\xce\xd0\xc6#\xe1\xb0\x91\xe0\x05\xbd,\x84\xe2 \x9f\xbc\xcb\x08\xaa\xcdI1\xcb\x1a\xc1\xb97\xbbsYjK\xca\x0d\xe2\xc4\xefjR:\x92\xf2#0\x0cW~\xdf\x93PQ\xbec\xd6\xa2\xc6\x02Cq\x85vF\xcbN!g\x08\xf1\x02\xb6M\xc96\xb5p$A\x14_hg\xb5 \xec\x8dd\xcd\x98\x97R\x9c\xa0]WB?s\xbc\x968x\x03ax\xf2\xdb\xb2\x05\x81\x9c\x1d\xcf \xda\xb2%U#\xe7G`h\xed\x01\x9b\xba\x04E\xb5\xaf\xdb\xc2\xb8\x86Q\xbc\xa1\x9d\xdf\x82\x88\xd8\xfc\x15s&A\xb4\xaf\x03\x9b\xc3\x14I\x8b+Q(\x8a3\xb4\x81L\xd1\xb4\x0d\xc74\x8c\x96\x1a\xd8e\xa6\x88\xa43$\x81a\xb8\xf2\xfb\xd0\xa5\x07-\x15b\x02\x12T\xf0\x05\xd2&\xc2\x08\xa18\xa6#\xe5.c,\x0e\x19\xc8#=R\xf6l\xe0\x00U\"\x8a!\xeaC@\xd2\x1a\xa8H\x02b/\n*\xca3CR\xe6Dh\x01\xb1\x16E\x19\xf5\x01#)s\xca 9\xf6\xa2\xb0\x839\x8f\xa4\xa0}y=\x928\xa4>\xc4$\xad\x84\x8a\x19x\xf6\xe2\xc0\x849\xf3\xa4\xd0\x92\x96\xaa\xc4\x91\nyP\xaa\xbd\xb3\x11\xb37_\x898t!\x8eVI\xeb`\x02\x18\xb8\xdf\xc1\xb1Ly\x16Kn\x0f9kQpC\x1d\xdcR\xb1\x85\xbc\x1aQ\xb4C\x9d\xf5j7\x059\x07\xf0\xd5\x88\xc3\x9f\xeax\x98\xbcw\xcb\x99\x0b\xe3!\xfa0\x99\x82\xae\xe4\x15\x89\x03\xa4\xf2\x00\x9a\xb4\x06\"L\xe2Y\x8b#&\xf2\xb4Z\xbb\x19\x889\x1e\xaaD\x18B-\xdb\xf9KY\x8bc*\xea0\x9c\x82 \xa4\xd5\x88\x83,\xf6\xfc\\{ML\xa8\xc5W&\x8e\xba\xe8Sw\xd2\xaa\xf8\xd8\x0b\xe8\x84\xc20\x8c9\xa9\xa7R\x93\xdc\x85\xc5q\x19{\xbcO\xa5\xae\xb6 K\x18\xa8Q\x87\x02Uj\x92\x07&\x92\xc8\xadu\x17\x99\xc0\x08*\x00\xf7\x94#[?\x08\xbe\xdf\x1a\xd9F]\xd4\xedY\xdc{j#\xbb\xd7\x94C\xc5f]\xcc\xbfY7\xb2\xfbu)\xffj\xdd\xc8\xb6\xeaR\xfe\xdd\xba\x91=\xa8K\xf9\x97\xebF\xf6\xb0\xa9\x97\x7f\xbbn\x84\xeb\x06k\x18-R\xae\xd5\xd8\xa0\xcb\xc1\xa6\xe3\x1e\x03\x820&\x8d\x01\x94\x80\xfb4\x04\xd0\x04\xb6h\x08\xa0\x0e<\xa0!\x80N\xf0\x90\x91\x05PL\xdc(&\xce\x06\x16N3\xb1\xc1\x00@\xd5\xc4=\x16\x05\x81L\x06\x04('\xee3\x18@;\xb1\xc5`\x00\xf5\xc4\x03\x06\x03\xe8'\x1e\xb2\xf2\x00\n\x9a7\n\x9a\x87i\x1a\xfa\x9c\x86\xe6\x06\x8b\x00U4\xefq0\x08e\xb2(@I\xf3>\x0b\x02\xb44\xb7X\x10\xa0\xa6\xf9\x80\x05\x01z\x9a\x0f9\x99\x00E\xa5\x8d\xa2\xd20\xe2\xb4\x94\x1aT1\xa8\xa2\xb4Gc \x88IA\x00\xe5\xa4}\n\x01h&\xb5(\x04\xa0\x96t@!\x00\x9d\xa4CZ\x0e@!\x1bF!\x93\x16?\xda@\x1ab\x89@\xbdm\x00\xbdq\x84\x10\x1d\xafL\x96\x0cP\xf0\x86W0K\x05(}\xc3+\x9d\xa5\x02\x0c\xb1\xe1\x0d\xc1R\x01\xc6\xd9\x00\xc6\xe1\x1a\x06Xl\xc5\xce\x125\x11<6\xae\xc0Y\x83!\x02-\xb6\x82\xa6\x12\x96\x10\xa2\x03\xa6\x17\x86\x0c\xb0\xd8\n\x98q\x18*\xc0b+`\x12b\xa8\x00\x8b\xad\x80y\x89\xa1\x02,\xb6\x82\xa6*\xb6a\xc0\xc7\x85l\xfd\xe0\xdb\xf1\xd2\x0bX\xdb\xf8\xb6Q\x95@\x06\xf0\xed^]\x0c\x95\x9aU)\xf0\x95'\xbb_\x15\x02\x9fU\xb2\xad\xaa\x10\xf8Z\x92=\xa8\n\x81\xaf-\xd9\xc3\xbaN\xa0\xa1\xb8j(\x18\xbf\xf8\xd8\xa0\x8a\xc1&\xe3\x1e\x8d\x81 &\x05\x01\x1a\x8f\xfb\x14\x02\xd0\x00\xb6(\x04\xa0\x06<\xa0\x10\x80.\xf0\x90\x96\x03PH\\+\x04\xec\x9b~l\xd0\xe5\xa0J\xe2\x1e\x03\x820&\x8d\x01\x94\x12\xf7i\x08\xa0\x95\xd8\xa2!\x80Z\xe2\x01\x0d\x01\xf4\x12\x0f\x19Y\x00\xc5\xcck\xc5\xc0\xf3\x8c?7\x18\x00\xa8\x9ay\x8fEA \x93\x01\x01\xca\x99\xf7\x19\x0c\xa0\x9d\xb9\xc5`\x00\xf5\xcc\x07\x0c\x06\xd0\xcf|\xc8\xca\x03((\xad\x15\x04\xc4)~j\x90\xa5\xa0j\xd2\x1e\x05\x81\x10&\x89\x00\x94\x92\xf6I\x00\xa0\x91\xd4\"\x01\x80:\xd2\x01 \x00t\x91\x0e)\x19\x00ElhEL\xe4n\xb3\x01\x143Qp\xa4\x0d\xaf-\x96\x0c\xa2\xe248i\xf5\xb4\x0d\xa7\xd4I\xab\xe7m8=OZ=q\xc3\xa9~\xd2\xea\x99\x1b\xde\x1al\x83\x00\x0b\xad\x98Q\xbf\"\x81\x87\xbc\x154 \xd0$\xa0\x85V\xc0\xc4\xc0\x90AT\xfc\\A\x13\x01\x16Z\xf1\xb3\x07M\x03Xh\xc5\xcf'4\x0d`\xa1\x15?\xc3\xd04\x80\x85V\xc0\x9c\xc34(\xb7P\xfb[-\xe9\xd7\nFv\xfer\xce2\x96\x01\xf2-d\xa9 \xe5BA \x84I\"\xc0\xc4\x0b \x00s/$\x00L\xbf\x90\x000\x03C\xc9\x00&a\x08\x84(\x0f\xc3A\x04\xa9\x18\x1e\x07\xc1L\x0e\x06&d8\x14\x98\x93\xe1P`Z\x86C\x81\x99\x19^.09C\xc2D\xf9\x19\x1e#H\xd1\x00@\x08g\xf280Q\xc3\xc3\xc0\\\x0d\x0f\x03\xd35<\x0c\xcc\xd8\x00\xb2\x81I\x1b\x12'\xcc\xdb\x00 A\xea\x06BB@\x13\x00\x82 \x1c\x00\x07\xe6p\x00\x1c\x98\xc6\x01p`&\x07\x92\x0fL\xe6\x90@8\x9f\xc3\"\x04)\x1d\x0e\x06\xa1L\x16\x05&vX\x10\x98\xdbaA`z\x87\x05\x81\x19\x1eN&0\xc9\xc3)\xaa=\xcf\x03kN1\xd5\x03\xeaS-\xdb\x03)Y)\xe1\x03)^)\xe7\x03\x19C)\xed\x03\x19H)\xf3\x03\x1aM-\xf9C\x92*\xe6\x7f8\x92cR@<1D\x0b\x91\xc2\xd3\x9aJ\"\x88#T\xcd\x05q\x84\xaa\xe9 \x8eP5#\xc4\xb7Q9)\xa4\xe5\xdfs\x8f\xe1\xbc\x10Q(H\x0d\x91\x08\x08`\x12\x000AD\x94\x839\"\xa2\x1cL\x13\x11\xe5`\xa6\x88\xac\x1fL\x165\x00Q\xbe\x88E\x08RF\x1c\x0cB\x99,\nL\x1c\xb1 0w\xc4\x82\xc0\xf4\x11\x0b\x023H\x9cL`\x12\x89@\x89\xf2H\x1cD\x90J\xe2q\x10\xcc\xe4``B\x89C\x819%\x0e\x05\xa6\x958\x14\x98Y\xe2\xe5\x02\x93K\x04L\x98_\xe21\x82\x14\x13\x00\x84p&\x8f\x03\x13M<\x0c\xcc5\xf100\xdd\xc4\xc3\xc0\x8c\x13 \x1b\x98t\"pp\xde\x89\x01\x08RO,\n\x02\x99\x0c\x08L@1\x180\x07\xc5`\xc04\x14\x83\x013Q\xac<`2\x8aUPk>\nT\x98ZJ\n\xd2\xa2RV\n\xd0\xacJb\nP\xb6Jn\n\xd0\xbfJz\n0\x89J\x86\n\xb2\x92R\x92\x8a T\xcbS\xb1\x04G\xa4\xaa8R\x80\x12\"\x04\xe7(\x85\x84\x15K\xa6\x98\xb3b\xc9\x14\xd3V,\x99b\xe6\x8ak\x9b(y\xa5\x90\xbdR\xf8&Kd\xeb\x9a_\xc5fPF\xab)\x14%\xb4\x08\x04\x040 \x00\x9c\xcej\xca\xe1lVS\x0e'\xb3\x9ar8\x97E\xd4\x0f\xa7\xb2|f\xad\xc0\"\x0c\x16!Jd\xb10\x08e\xb2(8\x8d\xe5\xf3\xb1=\x0b\xb2X\x10\x9c\xc4\xf2\xf9\x98\x9d\x05\x0d9\x99\xe0\x14V\x83\x12f\xb0X\x88(\x81\xc5\xe1 \x98\xc9\xc1\xe0\xf4\x15\x8b\x82\xb3W,\nN^\xb1(8w\xc5\xc9\x05\xa7\xae\x1a\x988s\xc5aD\x89+\x1e\x08\xe1L\x1e\x07\xa7\xad8\x18\x9c\xb5\xe2`p\xd2\x8a\x83\xc19+^68e\xd5\xe0\x04\x19+\x1a JX1(\x08d2 8]Ec\xe0l\x15\x8d\x81\x93U4\x06\xceU1\xf2\xc0\xa9*FA\n\x99*Hc\xaa\x89*@\x8f\x8ay*^\xb9ji*^\xe1jY*\xde\x08jI*\xde0j9*\xc0X\x8a)\xaa\x86R5C\xc5P\x1c\x95\xa0bi!R\x88\x12\x9c\xae\x94\xd2S\x0c\x9drv\x8a\xa1SNN1t\xca\xb9)\xb6}\xea\xa9)\xbf\x8c\xd4\xa0\xccT]&JL5\x00\xa8\xdcl\xca\xe1\xb4T]\x0cg\xa5\xeab8)U\x17\xc39\xa9\xa6n8%\xe5\xd3k\x04\x16`0\x00QB\xca\xe7\xc3\x7f\x16d2 8\x1d\xe5sq=\x8b\xb1\x18\x0c\x9c\x8c\xf2\xb9\x88\x9d\xc5\x0cYy\xe0TT\x0d\x12f\xa2\x18\x84(\x11\xc5\xc2 \x94\xc9\xa2\xe04\x14\x03\x82\xb3P\x0c\x08NB1 8\x07\xc5\xca\x04\xa7\xa0j\x948\x03\xc5BD (\x0e\x07\xc1L\x0e\x06\xa7\x9fX\x14\x9c}bQp\xf2\x89E\xc1\xb9'N.8\xf5T\xc3\x04\x99'\xaa\\\x94x\xa2A\x10\xc6\xa41p\xda\x89\x82\xc0Y'\n\x02'\x9d(\x08\x9cs\xa2e\x81SN\xb4b\xda3N\x80\xa2\x14\x13N\xbc\xf6\xd4\xf2M\x9cF\x95\xd2M\x9c\x92\x95\xb2M\x9c\xde\x95\x92M\x9c)\x94rM\xbcu\xd4RM5\x9db\xa6\x89\xc6\x1f\x93hb(\x01B\x88\x0e\x9a{T\xd2L4\x95j\x96\x89\xa6RM2\xd1T\xaa9&\xa6]\xa7\xa5\x98\x04\xd9$\\\x85SP6\xa9)\x14e\x93\x08\x04\x040 \x00\x9cMj\xca\xe1lRS\x0eg\x93\x9ar8\x9bD\xd4\x0fg\x930\x13\xd7\xb3\x08\x83E\x88\xb2I,\x0cB\x99,\n\xce&a>\x16gA\x16\x0b\x82\xb3I\x98\x8f\xb2Y\xd0\x90\x93 \xce&5(a6\x89\x85\x88\xb2I\x1c\x0e\x82\x99\x1c\x0c\xce&\xb1(8\x9b\xc4\xa2\xe0l\x12\x8b\x82\xb3I\x9c\\p6\xa9\x81\x89\xb3I\x1cF\x94M\xe2\x81\x10\xce\xe4qp6\x89\x83\xc1\xd9$\x0e\x06g\x938\x18\x9cM\xe2e\x83\xb3I\x0dN\x90M\xa2\x01\xa2l\x12\x83\x82@&\x03\x82\xb3I4\x06\xce&\xd1\x188\x9bDc\xe0l\x12#\x0f\x9cMb\x14\xa4\x90M\x824\xa6\x9aM\x02\xf4\xa8\x98M\xe2\x95\xab\x96M\xe2\x15\xae\x96M\xe2\x8d\xa0\x96M\xe2\x0d\xa3\x96M\x02\x8c\xa5\x98Mj(U\xb3I\x0c\xc5Q\xd9$\x96\x16\"\x85(\xc1\xe9J)\x9b\xc4\xd0)g\x93\x18:\xe5l\x12C\xa7\x9cMb\xdb\xa7\x9eM\xc2eP\x06e\x93\xea2Q6\xa9\x01@\xe5fS\x0eg\x93\xeab8\x9bT\x17\xc3\xd9\xa4\xba\x18\xce&5u\xc3\xd9$L\xaf\x03X\x80\xc1\x00D\xd9$\xcc\x07\xf9,\xc8d@p6 s\xf1;\x8b\xb1\x18\x0c\x9cM\xc2\\l\xceb\x86\xac{U\x1fl?w\x15\x1fV\x00w\x17\x1f\xd4\x00w\x19\x1fR\x01w\x1b\x1f\xd2\x01w\x1d\x1fR\x02w\x1f\x1f\xd2\x02w!\x1fT\x03}\xe7\x1e\xd6\x01}\xe9\x1eT\x00}\xeb\x1ej=}\xed\x1ej:}\xef\x1ej7}\xf1\x1ej4}\xf3\xbelq\xfb\xc1\xcb\x033f\x90\x17UD\xa3\x1d\x05\x01\x07<\x12\x01\x8ey$\x00\x1c\xf6H\x008\xf2\x91\x00p\xf0\xa3d\x00\xc7?\xf6\x00\xabh\x08\xe4q\xe0(\xc8\xc1\xc0\x81\x90C\x81c!\x87\x02\x87C\x0e\x05\x8e\x88\xbc\\\xe0\xa0H\xc0\xe4\xe3\"\x00\x04\x87F\x1e\x07\x8e\x8e<\x0c\x1c y\x188F\xf20p\x98\x04d\x03GJ\x02\xd72XBHp\xbc\x04\x80\xe0\x90 \xe0\xc0Q\x13\xc0\x81\x03'\x80\x03\xc7NH>p\xf8$\x80\xb2\x11\x94\x83\x81\x83(\x8b\x02\xc7Q\x16\x04\x0e\xa5,\x08\x1cMY\x108\xa0r2)l5\xaa\x9ef\x0f\xc8\x83W\xc2\x81\x96@\xc0\xe3l\x03\x80\x87\xd9\xa6\x1c\x1ee\x9brx\x90m\xca\xe11\x96\xa8\x1f\x1eb\xe9\xfd[\xe1\x08\xcb\xc2\xe0\x01\x96A\xc1\xe3+\x03\x82\x87W\x06\x04\x8f\xae\x0c\x08\x1e\\Y\x99\xe0\xb1\xd5gF\x1b\xd1\xd0\xca\xe1\xe0\x91\x95\x85\xc1\x03+\x8b\x82\xc7U\x16\x05\x0f\xab,\n\x1eU9\xb9\xe0A\xd5g\x07\x18\xd1\x98\xca\x03\xe1!\x95\xc3\xc1#*\x07\x83\x07T\x0e\x06\x8f\xa7\x1c\x0c\x1eNy\xd9\xe0\xd1\xd4\xa7\xc6\x1a\xd1`\xca\xa0\xe0\xb1\x94\x06\xc1C)\x8d\x81GR\x1a\x03\x0f\xa44\x06\x1eG\x19y\x14\x86Q\xc1\x88\x89\xeb\xe1F4b\x12\x08x\xc4l\x00\xf0\x88\xd9\x94\xc3#fS\x0e\x8f\x98M9\x96\xdc\xca\x05\xfajr\xc1\xa8\x10\xa6\x95C\xdb7\x12Kf\xae\x1d?\xb4\xf2\x92}I5\xe3\xf3\x80\x0e)\xda\xa5\x9a\x8b\x9c0\xb6S/\x0c\xce\xb1\x17 -]\xc5\xe1z\xb9\xa2 \xd6\x81\x8b\xe2\xac\x98\xa3\xa9K\x18\xc7\x0b51M\x10\x06Ha\xe9s\x00d\xce\xd6Q'\x88\x0d\x91)H\x0e\x91\xe5\xc2+H\xaf\xb0p+\x9b\xe4\x9f\xd4\"\x9eJ\xa5A<\x95B{\xc4\xa2\xe3\x93D\xe7\xa9TD\xe7\xa9\n\xd1)\x8a\xb4D\xd9\xd8[\x06\xe7YT\xc0\x94\xc7dy>Q2\x00\x87\x048(HQ\xac`\xed\x03#E\xed9bA\x18\x08(\x0b\x83)\xc5Q\x90G\xc1\xfbR\\y\x83DF\xbf]D\xffh aaZ-G#`a0$\x0c\x0d\xaa,\x9c\x7f!~\x11\xc6\xfe\xb9cG^jc\xef\x11\xb1P\xccBq\xb8E\xb1c'\x1cr\xcd\"\xd7Q\x04#\x03\x16y\xd2p\x98\x12\xce\xa1\xd4\x12\x00-n\x0c\x00\x16\xb7\x07\x00+\x0c*\xcan\xda\xb8\x98Z;9\xb0\xa4\x99\x1cV\xd2J\x0e\xab\xd0HA{8\xb7\x92\xb5\xe7\x08\x1f\xe4\xb1\x92\xf6pX`8]h\x833\xe6\xc1\n\xd9n>\xab/\xc2 \x8b\xf5\x1e\xd19\x1fR/4\x8b\xa5K\xd6s\x80\x94\x0f\xa1\x17\x06Ql\xf2\xc5=\xa2\xb8\x07\x05\xea\x0b\x93@\x18@\x90\xbe\xe8S\x00\x88\x85E\"\xf8\xe2\x01Q\xdc\x1d\x0d\x01\x06C\x12Q\x00\xda{\xc3\x81\xd5\xbd\x16$\"\xf5g\x9d\xae\xc5\x02\x005a\x04\x9a\x01d\x07\x1a\x01\x99\x82F\x08\xacA\x83`\x83\xb0\x18\xd0&\x0c\x080\x0b\x8d\x10X\x86\x01\x15\x18\x05\xeb(\x8cU\x99\xc9|\xa1\xc5\xfcV\x83q\xb4\xa4\xbd\xfc6s\xf9m\xd6\xf2\x15\x8c\xe5\xb7\xdb\xcaW0\x95\xdff)_\xc1P\xfe\xb1v\x12\x98\x04\x0bM\x82[M\xc2\xd1\x92&\xc1m&\xc1m&\xc1\n&\xc1\xed&\xc1\n&\xc1m&\xc1\n&\xc1\x80I(\x8c\x8f\xecd\x1d\xa3C\xd3O\xb2\xce\x03b\xb2r\n\xd8\x17\x01\x03;\x8e\xc3-\x01\xedq<\xbd\xc0EAZLi\xc5\xcf\xe7Fs\"+m?\xcf\x98\xf86\xc6\x9acG\xe5\xe8\xb0\xb1c\xcf\x0e\xd2\xf3\xe69\x8dO\xe3u\xe0\xd8):\xe4\xc9\x81<5\x82\xce\x83p\x1b\xdb\xd1$\xdc\xa0x\x91\x7f\x9c\xcfs]\x14Lr\xa9\xea\x87\x08c/J\xbcDa\xcc9\xc0\xeaH\x94\xd5\xcb`[4L\xa3EJ\xae\xe3\xbd'\xea\xb9\x1e\x88UU\x9d\x11\x9c\xaem\x05u+\x0c\xf1\x95\xc2|u\x13\xf8\xc7X\xc0W1\x80\xff<\xfa\xf7\x8fT\xbf\xff\xdd\xb4/Q4VW4>F\xd1XE\xd1\xf8y\x14\x8d\x8fT4~\x8a\xa2)\x96U\xb9\xe6\x84Aj{\x01\x8a\x0f\xf5\xa3\xfdy\xe2\xc4!\xc64E\xb1h\xa6\xb7\x12\xecu\x1aN\xc8\x9d\x96\xec\x01\xa3\xddX\xcb\x1e\xf2t\x0c\x0cS\xb0\x86Y{\xe7<\x00bj\xec\xd9\x1buIARPX\x8d9\xf4\x94\x03\x15\x04V\x18M\xcaV\xf8'7\x02\xa0\x84\xdb\xe0\x1f\xdb\x04\xb1\xb4\xf8di\x01JXZ\x0cHK\x8b\x82\xbd\xe8\x10\x85\x89\x97'\x02\x17\xde\x0e\xb9\xff\xd7\xf3\xa30N\xed \x9d\xfcQ\x97\xd8\xf3$\xc4\xeb\x14\x11\x85\x19\xe9y\x8c\x9c\xf4G#\xdau\x88\xbf?\xd1Eg\xc4\xdf\x9f\x14\xcc}\xe0\x04\xcc\x1c\xe7\xcf\x94QAH\x15\x9f\xcc$\xf7\xff\x83\x04\x17\xc9\x88\xff\\\x19)\x01\xb6\x89\x16\x84\xb1o\xb3#u\xf6\x88F\x16\xa370\xa0\xd3\xb0(\xa6#\xc9(>>'X\x0b\xc5\x07J\"\xb9\xe0\x90\x8a\x13\x8d\x85e\xd2)\x88\xa7\xe0m\x8d\xcclt!\x14\x19\nCx\x89\xfd#\x05\x96\xca\xa6jfp\xe6\xe6e\xc3\xbcl\x14f\xa3\xcd\xed\x04\x1d6(N=\xc7\xc6e:;{\xc6\xef\x91l4\xdfsY\xa8\xef\xb9.\xe6\x80i\x18\xb1\xc04\x8c\xb8\xaaS\x9f\xab9\x0fp\x14\x0c~\x00\x9a\x91\xf9\x8ezK\x00\xb4\xb01\x00\x16n\x0f$B\xd1$\x856)8q\xd9P^o\x92vr`q39\xa8\xa0\x95\"\xbb\x1d\xed\xf8e{\xf01\xed\xe1\xc0\xe2\xf6pPA{\xf8\xfa\xcb\xf6PX\xd7\xf3\x0fad;^\xba?7\xb8\xa23\xf6\x01\xf41\xfa\xecq\xf1\xfdym\x8b\xe6\x0f^\x99\x15/f\x90\x92w\xa7kXI\x07ez\xf1\x82IK9'\x86\xbc\xd6J\xfc\xae\xc5\x13\xdaN\xeamP\x03\x19M\x94d\x0c\xd7\xa9\\\xc8p\xcd\xec\x9e-q\xb8=\xe3\x9e@\x82\xe7\xcf\xbf\xa3\xbe\x14\xea\x15\x18|\x95-\x03\xf3S\x11\x9dn\xfe\x9f\x1a\xa8\xab\xa9\xedXQ\x9b\nKC\x95\xf5\x9e\x89Py\xb3\xda@y\x1b\xd9\x16\x18\xdf\xa7\x05\xcd\x06{^+\xa4w\x16R\x98 _\x7f\xb6\xef\xe1/\xe3p{\xd0\xfc\xf0Q\x0b\x93\x9dVd\x0f\xfd0LW^\xb0<_\xc6\xf6>ql\x8c\xea\xb6\xcdm\xe7aa;H\xdbx\x897\xf7p\xd6\xf2r\xc1+)\xa24\x93of\xe5?a;E\xdf~\xd4\x7f\x9a\x88\x9e\x03\x1a\xe5Xu\xba=A\xa7:\x02z:\xe4\xac\xa5\x16^\xdb`\xd7\x89\xe1.\x9b\xeb$\xb7\xc0\x8fFW\xb7HM\x11O\x81:\xcaaI\xc4\xac;\xe6Yu\xc7\x00#\x0d\xdb\xf1\x12\xfd\x7f\xc5A\xbc\xe0\x18\x1f\xe1\xd1OEI\x9d\xa5\x80\x88L \xf2\x9a\xb2\xb4\xcdwz\x90\xeb\xf4\x84\x06o\xf7\x1f\xc0\x17\xb3\x87L0\x1dzAZ\x8fH\xce:N\xc2\xf8\xbc|H#\x93\x95\xed\x86[\x0d\x02N\xea\xc5b\x8c\xb0\x9d\x89\x05\x99\xdd\xc6\xb8\xd3\xb5\x92\x8e\xb3\x9e{\x8e6G\x8f\x1e\x8a\x7f\xec\x1a\x03\xeb\xac;\xea\x9fu\xfb\xfd3\xe3\xa7\xc9\x91x\xb1\x88\xe7\xf6\"\xcd\x04\x0d\x83\x14\x05\xe9\xf9_\xfe\xd2\xf8\x7f\xb8\xd3\n\xe4\xb9\xde\xd1;\xc6 \xdauz\xd1\xaeC\x9e\xf7\xeb\xfd4Q\x86\xe5\x07;c\xdb\xf5\xd6\xc9\xb9\x17\xacP\xec\xa5\x93f\xd2\xe4\xd6\xd1\x93\"\xf3\x99\xe7e\xf4I\x11A\x1a\xba\xfeb\xb2ByN'\xff\xf91\xcf\x98\xee\xce5\xf9\x9cu\x846Ui$\x1a\xcd\xfd\xbb\xd0\xeb\x99\x18Ej_\x10d\xcc\x97\x9a\x1dx\xbe\x9d\xa23\xc1s\xa8/\x11\xa5\xc2\xd0\x89=\xc4IM\xdb\xec(\xd0\n\xa6\xa5~\xd4\xf4Ce\x17\x9d-2\xea\"\x83-\xea\xd5E=\xb6\xc8\xac\x8bL\xb6\xa8_\x17\xf5\xd9\"\xab.\xb2\xd8\xa2\xf1x\\\x17\x8e\xc7c\xa0\x98*\xe7\x00\xbe\xbdk\xa45\xfa\xc3\xfe\xc8\x1c\xf4\x87,\xaa\xf4\xf2\x1aY\xfe\xce\xc3\xbc\xd4\xb3q\x0d\xe3\xb3\x95\x8f\xda:HP\xc3(\xff\x8d\x86\x04(IQf\xa0h\xaf\x15\x11T\xdeM:!\xb3\xaf,\xc2Ej\xb05>\x10\xbf\x9e\x1b\xecB\xa2\xa4k6\xae \xda\x95\x01\xd6\x01c{G`\xcd#\xb0\xfd#\xb0\xd6\x11\xd8\x01\xa3\x17\xe8`\x7fA\x8f\xbd$\xd5b\x94 \xa1q\x08\xc4\x9a{\xf1\x1c\x99\xaf\xd6'94I\xf7\x18i\xe9>B\xc5\xd1*\xa1%\x8b\xed\xa5N\xf4sDm7u\x8f\xdbo\"9&(B\xb1\x9d\x86q\xce\x94\xe0at-A\xfb=\x7f\xd9\xf1\xfc\xe5\x81\x18\xd2\x9b\x9cG\xfe\xab\xeb%\x11\xb6\xf7\xe7s\x1c:\x0f\x02\x1d\x06\x0fI\xc7>\x94\xe7\xe1Mk\x88\\\x17\x9a\x02\xf8\x01k\"-\x95\xd5\x06\x0d\xb6\x0c\xa2\x9c\xf5\x0b\xa9\xc6\x03\xc7Y,\x9e_\xaamlG\x11\x8a\x05\n\xec\x0f\xf4hW\x1a\xf0\\\xef\xe4\x9b&\xa5\x0b\x9d\xeb\x9d^VH\xcd\xf0\xdecVRN\xcf\xf3p7\x01\x9f\xd2\x12\x84Qn\x1a-\xb5\x97Z\x82\x9cL\xeaCe4\x82ymH\xcdO\xb4\x05F;\xf2Y\xf6;%I\x18{\x993V\x99\x18\xaa\xcc\xf5\xe2\xa2\x9a2%:\xa98\x12%N\x88\xd7~0\x01\x9f\n\xc5\x7f\xba\xd8\xe4 \xe0F,\xeai\xfe\x8b\xe6\xa5\xc8O\xaaG\x95E\x0c=\x0b\x97\xb2\x7f\x8c\xea\x9f \x134\x8aB\xc4^\xc2E\x81\xbddR\x9b,\xef\xb9F\xb4\xeb$!\xf6\xdc\"\x1c\xb3\xc6g\x03\xebld\x9cu\xcd\x9f\x84*)\x9d\xb8\x99\xf5\xa9\x1b\x1e:\x1bj\x93\xca$\x8e\x18\xf5I'\xd4;V\xb4\x9b\xe4\xa5\x0b\xdb\xf7\xf0\xfe<\xb1\x83DKP\xec-&U\x1f\x9e\xf7\x0d\xcb\x10\xf2\xee\x06\xa1\xe6\xa2\xc4\xe9$\x91\x1d\x1cH\x03d\xfa>7j\xd5\x9f\x1b\x93\xe2?BV\x9dd\xb3\x84\x82\xa2\\\x85}^\xab\xfdD\xc2\xca\xb71u\xde\xa9_5t[\xcc\x04}]\x9f\xa8HK\xf4\xd1\xdc \x8eWVd\xc7\xb6\x8fR\x14\xff\xf1G6\x15\x90B\xf5\xa2]\xcd\xdf\x8av\x1d\x9db\xef\x87A\x98o\x10P\x82\x0ft]V\xdb\xc6C[\xad\x9a\x06\x1f\x0e\xfc\xca&\x9b\x04\xcch7\xa9\x0e>\x90\xfe`\xa9{\xb9\xc5\xdb\xc3\x82\xedq \xdc\xcd\xc8j(\xba\x02\xd1\x07\xfe\xaa\xeb:\xb3\x10\xe9\xb3\xc3a\xb3\x921\x99E\x8c1\xe6\x16;\x00\x04\x14\xad\xd3M\xedy\x1e8\xa0\xf8\xe9#\xceQ\x0eOV]\xfc\x9c\x8dC\x87\xc6\xdb\xfa\xfc\x90s\x04\xa3\xf3\x85\x17'\xa9\x16.\xf2\xf0\x83a\xdb\xd1;\xfa\x11\xbc\xbaebs\xd5/:9\xe7S\xa7\xf3*\xd7Y\xfc\"\xb3\xbe\xad\x999L\x1eSY\xfa\x8bj\xb5\xd9kV\x9b\x99\x9f\x00kd \x9b\xf3\xfb\x8f\x9a\xa5\xbf\x00\x13=U\x111\xb4.c{\x0f6\xab\xeb%Z\x18\xa1\xa0\x19n\x92\xb5\xef\xdb\xf1\xfe \x1a\xe13\xef\x16h\xa8fQL\x8a\x95'V\xd6\x1a\x95s\xd0\xc4\xf7\x82*\x82\xb5\xb2\xdf A\xd9\x1b\x83\xa3\x9f\xe0~c\x00\xcb\x7f\x83\xe980\xe6(\xd9\xcf\x8e\x01w\xb0=G\xf8\xe9\x1d\xef\xa4\xa9\xfe\xa8f\x95\x922C79,\x0fu\xbd\x1eG\xb9\xc30'\xcc\x1aJ\x02\x95\xfd\x91\x9a\xa1$\x9d[\xc0j\xd5g'J\x95Q\xadi\xeds4\xae\xe8C\x9a\x8f\xd2U\xe8\xca\xe6\xed\\\xcf\xf5\xd6\xe5H'f\xd0A\x16\xa8e\xe3\x05w\x03\x8c\x99\\L\xba\x0b\xe5\xd3ONC\xf5\x04\x9d\xed+\xf2v.\x16\x0b\xc5F\x86\xf9\xd2,3\x80\xe7\xb6\xf5\x97\x92$\xb2\xd3\xd5\x11\xd0?\xfepQ\x14#\xc7N\x11\xa5\xccAD\xf4\xacS{[n~\xbdq\x08\xbdc\x16\xab\x19\xfa\xb7'w\xd0\xc96\x8c]m\x1e#\xfb\xe1<\xffW\xb31\x96\x85c\xaa\xf1R\xb9\x19N\xec\xe8\x0f\x07\xa3h\xc7l\x81\xff\x07\x9a\xaf\x17\xed\xd8\xd3\x9d\xcal\xd8\xcd:,\xbc\xa6\xab\xd4p\xa6\x8b*r\xc8\x16\n\xb1\x17\xe5\xebR\x82\x81\xa9:\xe4<\xdfH\xf3?4\xe9\x90\xd1\xbeZp\xc7\xc8\xad\x18\xe0\xf7\xea\x00\x9f\x98\x95\x9e=\xb2\xe7\xa4\xab\xf6\xad\x19\x19\xcb\xb0m\xc4,5\xe0\xf8\xaab\x19\x85IJ\xbc\x8f\"3p\x7f\xec8c}\xc2\xae\x80\x87\xe6YO\xef\x9f\x19\xfd\xbe0\\\xa1\xb8\n\xa7\x1drN(\xea:\x81\x19(\xb3\n\x1f\xf5p\xf9h9\xd7\xac&\x17\x8em\x98\xbc&{V\xef\xcc\x18\x18g\xfd\x91\x82&\xd7j\x8a,\xaa:\x9e\x17(\xb1\x02\x9b\xd3\xd4\xa8\xc2\xdeE\x18\xa5\x88\x95kl\"\x13\xf1\x9a\xec\x8f\xcf\x06\xbd\xec\xff\xad\x8a,\xd8\xaa\xe92\xaf\xec$v\xa0\xd8j\x9cN\xd4\xa8B\x0dK\xc4:\xe6\xc0\xb0\x17\x0b^\x9d\xe3\xe1\x991\xb4\xcez\x96B\x17_\"5\xc7,\xaa:\x9e\x17(\xb1\x02\x9b\xd3\xd4\xa8\xc2>\xb2Sg\xc5\x88e\xe9\xc8tz\x9c\"G\xfaY\xaf7<3\xc6\n\x8a\xcc\xd9*\xa9\xb2\xa8\xec\x14n\xa0\xd4J\x8cNS\xa7J\x05\x19WF\xae\xb1n\xf4\x00\xb7\xcc\xa6\x1cc\xa4\xe6\x96\x19W%e\x16u\x9d\xc0\x0c\x94Y\x85\xcfi\xaaT\xe1\x1f\xe6\xb1^\xc2H\xa6\xbb\x96m\x0fym\x9agc\xfd\xcc\x18\x0c\xdb\x95Y\xf2U\xd2gQ\xdbi\xfc@\xc1\x15Y\x9d\xa6U\x95*\x88\xb0\xbe>\x15:\x98\xd0\xa2\xa2y\xf6\x07\xce\x14\x8d{\xc0\xab\xa5\xc4\x95(i\xb9\xa8\xefd\x96\x07Hzun\xa7\xe9ZR\x0b!\xa0\xb3B>J\xb8\xa4\x9c\x1aY\xa7[\xfe\xa0\xa5^\x8aQk\xaef\xe1\xe14kD\xb3\xd6*\x9eh^\x90Eq\xd4\xd6b\x1eI\xe7{T:\xb5oU%\xd8{M\n\xd2\x1d\xb9.b\xbc*\xb5\xe7\xa7\xad\x82\xa8\x9a\x8bex\xdd,b\xe3\x1b\xd8\xf3N\xedy\x07{l\x1a\x8d<\x89N\xf1b\x16,\xc7\xaf\xfe\x8a\xfa\xd8\\8\xb7bbv\xf2\x99\xcf\x96\xf5X[C\\\x85\x89\xecb\xdf\xbe`5\xa8WeF\xb4\xa3\xceK\x11)l\xc1\xfe\x1e\xbb\xbdW\x08Q\xfa\xf8\x81\xc9\x90\x81\xbeI\xae\xbe\xb5r\xaf\x1aLJhh\x97\xa28\xb0\xb1\xe6\x86N\"\x87\xe6^\xfdGy\x13\x8a\xb5+\xbd\xcdX\xbb\xa8U\xa5\xb5\x8f7\xa8\xa4)\xdc\x11\x12ik\x84h\xb2ALf\x14h\xd3\xf3\xb6 :\xa6\x01\x020%\x7f\xc4fR\x9f\x9e\xb3\x15\xaa\x939\x0fC\x13\xa3\x1dr\xd6)\xaa\xe0\xf50\x98\xbb\x81\xfc\x9d^\x0ci\xa7;O\x03r\x1c$\xc7\xe5>7.\xcfCw\xaf\xe5;\xb0u,r\xd2\x98\xf7?s \x82\x97\x9ez\x86\\/=P'\x16\xf4V\xfab#\x83T\x9a\"M'A\x189i\xb5\x9bkB\xb3W\x8c\x92(\x0c\x12\x94h^\x100f\x96\"\xb9\xee\xc8\x95[\x82\x9eXN\xa3\xa7u\xc6\xaa\x96,\xec\xf8#I\xedt\x9d\x80{\x0fOeJ<\\\x07n\xe8\xac}\x140\xb9]\xe3\xd8d\xf6X\xcf\xfeH\xaa\xce\xcf>1\x9f\x0f\xcd\xcf\x93UY\xef\xbe\x8e\xfc\xc9\xf36\xb78o\xf5?\xd1Zb<\xfd\xe3\x8f\xc2g\\o\xd3\xf5\xed\xf8\xc1\x0d\xb7\x01\xec]2\xca\x18\x05.\x8a\x91;+9\x80\x9b\x7fE\xa0\x93\xbf\xb9\xcd\xa1\x8f\xc75C-\x10\x9a\x91\xa7\x1c\xa8d\x9e\xd1\xef\xf7\xd1q\x9a\xe1\xf6\x9dT\x1aW\xa9\x85\x9dEThY\xc5t\xa2\x038\xad|g\xc9\xedg\x90\xdc>\x1c%\xf0h<_\xe8\xfd\x89\xe2\xbd'\x15\x89\x9a\xd6\x14\xa9\xf3\xe7h\x13}\xd8qd\xcc\x0d\xddy\x82d\xec\xce\x95\n1'T\xba:N\xd3\x8b\xc5BxbN\xb8\xd3\xaaeSW\xf3\x1b\x0e\xed|\xe4+\x0e\xdd\x93G!\xa9\x0ej6gl\x9b\xfd\xfa\x96\xb7TP\x15F1w\xa6\x0b\xee\xfb\xcc\x95\xef<\xa2)69\xb3\x9f\xca=\xce\xecwx\xe7\x93{\x98C\xab\xe0c\xb5\x8fV(H\n\xf1\xb3\xa0\x83z@\xfd\xa24\x06\xd5/\x89ae;\xd6\x8er\xcd\x15'\x18\x1at\xf3\x96\x86\x16\xban\xb1\xdc\xcf\xba\xddAr.y\xe5-W\xc5{\xc0\x9d\xd0\x05\xd6~2\xf4\xdf\xbb\xbe\xe7\xc4a\xfe\x80|iN\xe9!\xbb\xeaHN_g\xce\xe8\x0c\xd8\x13\xd6Y\x1f\xc8\xdcQ+\xd7y\x89\xf8\xc4S\xee)\xe5\xca\x138tJZj\xe8\x8ezc\x138\xed@n2\xf2\xc6&\x0d\xf8\xd1K=\x8c\xbd\xb5\xdf\xf9\x82\xe6g\xc4\x84/\xe9\x97L\xc4P\xb6\xd9\xd4\xeb\xc5\xed\x90\xdb\xdb+r \xc4+\x88\x88eT\x8f\\\xf3\x9bE6\x83\xdaG \x8ej\x83\xa7\x95\x98s\x1a\x96\xe0P\x13\x07\x93\x8bX'n\x9e\xbe^8i\xa7XQ\xba\xbf+\x1dLzr\x13\xbe\xe7\x92\xa7\x1a-\xb5\xe2\xb8\xb5U,,N\x88D[\x94T/`\xeat\x93a\xd6\xcb\xcf\xe6T\xa0\xe0\x85\xb9\xd5l\xd2\xf8p\xe5\xb3\xe5\x89J\xe2x\x7fq\xd1\"\x9bW\x9a1\xc1x\x8e\xa37\x91\xed\xbc_'\xa9\xb7\xd8W\xe3L\x8d}\xaa7\xfei\xce\xd0\xa2\xf4\xfaQ\xdbH.\xa6,3uD\x8f\xd1\x81\x1e\x03'\xf2,\xfdEs\x18\xb5\xce\xd9\x95\x8c\xa5\xa7O\xf3\x13\xa6g\xc2\x13\xa8T\xb1\xc0\x1fO\xe8\x11\x12-\xcc\xd1\"\x8c\x91 aI\xb5\x93\x8e\x9a\x88Dm5\xdb\x11G\xc8\xb5\xbcG\x01\x07r\xeb \xec<\x0e\xd3\xfc\x87\x8e\x91t\xbc`\xe1\x05^\x8a:\xd94n\xc7g\xc4%\xcf\xc9\xf1\x14\xcd{\x12\xb8\x04x\xb1\xf7i\x9d\x15\xff/\x0e\xbe\xe6\xf3b\x1aF\xe5\x9e\x039;\x0c\xd8{\xb1y\xa6\xa9\xf6\xf3S.\xa0\xff\xfb\xbf*\xf2\x07\xb4_\xc4\xb6\x8f\x92N\xd5\xb0C\x1a\x02\xf7\xa0\xf3R\xf4\xa3\x91\xae\xe3\x80t\x1a\xea\xf9\xbf\xff\xfd_\xcf\xccO\x14\xec\xe7&\xa5N\x93W\xc3\x9c\x02I7\xfb%\x0eq\xa2\xd9\x8e\x83\xa2\xb4\xda\xac)\x87dj\xf3g\x19#\x14<\x85g~\xf5\x83\xe0ED,\xdd!\xf2!K\xcc\xb1\x17<\xa0\xf8`\xe9/\x9a\x17\x86P\xba\x15 H1\xcbc\xb5\x9d\x95y8\xba\xab\xda\xdd \xcc\x93 u\xb8\xe1\x05\xdc\x92\xb2\x06\x9d\x81O\xcf3\xa7\x83\xce\xfaU\xb7\xba\x8b\xea\xeb\xdf$\xc7\xcf6(N\xbc0\xd0\xa2\xd8^\xfa\xf6\x81\xdc\xaa\xa8\x83K\xe4\xb3\xe9?\x9a\xea\x8f?|\x94$\xf6\x12==\x82:u\xde#\xe5&\x06\xfcn\x0f\xf9@\xd8\xcc\\\xa0E>q\xd8\xb4\xcb\xc5\xf4\x82\xc6\xfe\xdd\xf56\xc4\x8bE-\xcbY)\x9dmTb\xde\xc9\x171Mt\\m\x97\xba(\xfbS\x8b\xdb\x8fv\x9d~\x11\xf6\xb2\x8bN\xba\x9ay\x1a\xb4\x9d\xb5&\xaf'\xf5\xc8\x83\x9a\xec\x19A\x93?6h&\xfcH\xbc\x8c\xed\xbd|\x05\x9as\x89\xec\x18\x05\xe9s_e8a\n\x9d\xa7A\xf6WK|\xd1\xc5\xad~\xa9\x19\x8e\xee\x9f\xae\x97\xd8s\x8c\xdc\x7fU\xef\x9b\x08\xc2\xcc\xe5p\xb8En=[uM\x8e\x90y?\x00s\xb9\xc9b\x9aer\xd7\x9fx\x04\xdf&\xc7\x0e\x1c\x84\xd9Sa\x8b\x81> \x97_e\x01i\x12\xb9\n\x0b\x0e|u\xf6:]\x85\xb1\xf7\x88\xe8\xeb\xd8\x13z\xb4\xab\xb8T\x07=\xe5\xa7?y\xe1$\xf5\x16\x89\x86\x05\x0e\xed4\xff\xb6\x0cm>p/\x9e\xa1\xdf,\x0f\x0b\x0fc\xf8\xc8e\x86-w\xaa\x80\xfe\xd9\x1f\x8fu\xd4\x03\x92[T9\xc7Q\xcb\xb8D\xa7\x0d\x9f\xe4\x8aZ\xc0\xb8\xe8\xff\xc7\x0fN4\x83r\x1f\xbcxU\x15\xd7\xb13\xadv\xb8\x03\xe2\x0c\x07l\x0b\x18\xe4\xa4\xf9_F\xdd\x95Y\xec\"\xf3\x98\xb5\x83\xb9\x18P\x0e\x0e\xca\xa2\xd3\\3\x0f\x95s\xce}\x98\xb8\xf7Y\xf6B~w\x8ef\xcc\xa8V\x06-\x0f\x80\x13}E\xcf\xfe\xb4\x89-\xbc\xf5\x0bO*\x05\xeb\xa1\x9e\xfd\xa1X\xcf\xd7i\x1a\x06\xec\xdb}\xc2u\x9a\x0d.\xbc\x02\x0bx\xd7\x0b66\xf6\xdc\x03\xbfVIV\xf6\x03\xeat\xfbI\xc7\x98\xc0O\xdb\x0e\x03\xffu\x81\xb83Fe\xd0{\xc4\xc4\x9b\xa7\x18\xac\xea\x1e:\x7f\xbc\xa7\xcc\xd9\xca\x13\xbb\x8ba\xf6\xa7\xb3\x8e\xf1\x8f\xae\x9d\xda\xe7\x9eo/\xd1\xcbd\xb3\xfcy\xe7\xe3\xc9\xdcN\xd0\xa0\x7f\xf6\xdb\xaf7\xbdo\xfb\x8b\xfe\xfc\xcbn\xed<\xea\x9e\xfd\xeb\x9d\xee\\\x86\x9bw\xa6k\xba{\xcb\x9c\xed\xad\x8d\xe3;\x9b\xd9\xfdt;{5~t}\xc7\xbb\xfe\xf5[\xf4\xedw\xf7\xd5\xdc\\\x8e\xaf\xef\xa7\xcb\xd9\xab\xe9\xbe\xf8{\xfd\xf3\xf5\xab\xe9\xf2\xfar\xb7\xfd\xfa\xfb]x\xfd\xe6v|\xfd\xa0\xeff\xfb\xbe>\xfb\xb8\\\xde\xec\xfb\xfd\x9b\x8f\xf8\xfe\xdd\xfd\xb59\xfb\xa0\xafg\xf7_\xfb\xef\xee\x9d\xed\xfb\xfa\xe7\x07\xf3\xfd\xab\xe9\xf6\xfaU\x7f\x7f\xb3\xef\xefo\xee\x97\xeb\xd9\xbd\xb3\xcf0\xb3\x0f\xf9s\xeb\xe6\x1e'\xef>\xce\xd6\xef?N\xfb\xd7\x97\xb3\xf5\xfb\xcb\x9b\xfbw\x1fj|\x9aa\x9b\x9f\x1f\xcc\xf7\x1f\xa6\xdb\xf9+\xfd\xf1\xdd\xfd\xc3\xf6}\xfe\xdf\xe5\xe3\xd7}V\x9f\x93\xbe\xbb\xbf\xee\xdd\xd4?\x17u\xbc\xfb\x90\xd5\xf1\x90=\xdb\xe5|\xef\x97\xeb\x9b\xc7\xa9U\xfd\xfc\xfe\xa3\xd3\xbf\xbe\xbc\x98\xcd>N\x97\xb3\x8f\xaf\x93\xb2m\xe9l\xdf\xdf\xdd\\\xbe\x1e\\{\xa3\x9f\x7f+\xf4\xf4\xf3O\x9d<\xaf[\x9c\xfc*b\xceN\x10j1\x8a\x90\x9d\x92\xf3ZqS\x9f{#\x84<\xa3\xd9SK|f0\x95(\xa8Y\xb9G\x11\xb2\xe3,Z(F\xa4\xfcEm\xecC\xe6w\xc0\xdd\xff\xe9\xafq\xeaE\x18\xfd\xabJ\xfeZ\xd4\xc15\x0b\xf4V\x80\xd1\x9f\xde]\xe9\xbd\x07.\x89\xd8\xcbg\xd8\xa3\xee\x94 8\x19#\x9d\xbd\xe0\xa5\x94\xdd}\xea\x99\xa4\xfch\xe1?\xb3%\xf5/\xc8\xb7=\xfc\xaf3A\xe9\xc2\xc3HX\x18\xd9I\xb2\x0dcW\x08H\x90\x1d;+aq\xb6\x1e\xa3\x0b\xb3'v\x8clRE:\x91l\xa2\x1dh\xc4\x0c\x8f\xc4\x86\xa1;\xce\xfe\xb4\x0d\x8f\x8b\x85\x9a\x15\xff\xf3\xd5\xd5\xbct&\xdf\x8a\x91\x1b\xbb\xeaO\xd2V\xb4\x81\xea\xd6\xb4\x01\xcbV\xb5\xc1\xf2\xd6\x81\xa0\xaa\x95\x7f\xca0\x00d\x8ar6\x07C\x7fq6\xd6_\x00Y\xb6:\xa5k\xba?jF\xb4\xcbF]0\xe5K\x96\xff\xbb\xa7\xbf8\x1b\xb5\xf2\xeb\xc9\xd9U\xc5\xff6\xf5\x17g\x96\xfe\xe2l\xd8\xcaQ\xeb\xb7HX\x95\xff\xbb\xaf\xbf8\x1b\xb4\xf2kaWs#3k\xff\xab\xd1g\xd1(8\x1403\x07y|\xbc\xd9\x9a\xeaQ\xb7\xe8\xf9\xd5\x137l\x92\x01u\xcb\xbb(\x8e:-\x00\xccMUK\x8aw|\x1d\xf8\xd0\x17\xb8\x1fU\x0f\x11\xce:\xe6\x0f%\x13[r\xe4d\xc2\x9c\xd5\x88QN\"P\xc0\xb3\x9f\xd9rV\xc8y\x98\x87\xbb\x03\x19\xf5\x97+Y`mD\xeez\x08\x1eW*\xd5\xb3?peOx\xfd\x86\x80aD\x1dD\xef\xeb:\xf1\xd1\x8d\xc2\x0e\xe4y\xb9J\xf3,HU\x8bP\xba\xae\x16\x85\x98L\xaag\xff\xaa\x9b\xca/\xa5\xa5t?\xe7\x8a\xfa{\xb7xC\x8f\xf0\x8dJt.K#\xf7\xcb\xf27/Tn7 \xcf\x91\x8f\xca\xedn2\x0ef\xcf|\xd0[Q\x8c\xff\xa1Q\xf6G\xf4\xb2$=_\x02T i!\x97\x08\"\xde\xf1\x90\xf7\x83\xfa\xa7\x13U\xd7\xfe\xca_\x85WFKk;\xcf\x7fB.e0^Y\xf9\x1a\xf8/\xc0\"\xd8Y\xd9q\x82\xd2_\xd6\xe9B\x1b\x9d\xbd0_%\x9be'\xb7\xe0/?\x18\xfa\x0f\x9d\xc2\x82\xbf\xfc0\xfa\xa1\xb3\xf1\xd0\xf6\"\xdc\xfd\xf2\x83\xd9\x19v\x0c\xbd3\xfa\xa1\xb3\xf3q\x90\xfc\xf2\xc3*M\xa3\xf3\x97/\xb7\xdbmwkv\xc3x\xf9\xb2\xa7\xebzV\xc7\x0f/\xcc\xab\x17\xe6\xab\xc8NW\x9d\x85\x87\xf1/?\xbc\xe8\x99}\xa3?\xec_\xfd\x90?\xd0\xe25F\xbf\xfc\x806(\x08]\xf7\x87\x8e\xfb\xcb\x0f\xb3A\xd74\xcd\x8ea\xbd3;\x86\xd1\x1d\x0c\x86\xd8\xc8\x9eh\xd9\xbf\xfdN\xaf\xd3{W<\xce\xc40;\xa3\xac\xec\xf1\x87\x97EMY\xa5/\xcc\xab\xbf\xfc\xd4\xb1\xf4\x17\xcdZ\x93\xd6\xa8\xeb\xd98\\j\xeb\x1d\xf35\x9d \xf9\xa2U\xea\x1e\x8b^\x1dV\xaa^\x03,`\xd8\xe9f\xbaw\xe30\x02\xb8K\x19\x8an\xc1\x8c~\x12V\xe5\x87\xae\x8d\xa9z\xea-m\xae!\xd4\xfe63)\x16\xbf\x9a\xe5\xdcP\x7f\xf3\xc3\xe2\x86\xe2\x937\xf8\xf9\x05JuY\xafm\x81\"\xc8\x07\xe8\xd1\xaeS\x9c\x9c\x92\xbe\x04Z\x8ckUj\xb5\xb1&;\x06g\xf5\xc90\x82O*J\xd8\xd2\x17U\x80{6U\x9e\x9c\x9fk\x95V\xb8\xd2\xba\xe9K>#f\x81=h\x16\xd8O8\x9a\x04\xd5\xff\x94\xd7\xce\xd5\xb1J\xaf8/':*[:\x16\xe96'\x9d\xffQmM\xa7\xeb\xe00AZ\xfe\xf8\x88\x94\xfc\xf3e\x9bd\xc2\xad\xc8\x0f\x83\xf7\xd8c?\x03\xf2\x0d^\x8d\xe8\\\x1eN\xb4Ir\x82[\xf8\xa1+O\xef\x98\xfa\x91g\xea\x85\xb5t\xba\xc4}\xd9$\xb2\x99\x1b\x11<&u\xabc\xb9\xb6\x9e\xfd\x11\x9d\xcc\xe5(\xff\x9e\xba\xcc\x8dK\xf5w\x0f\xe5\xcc\xb44\\.1b\x8fh\xc1\x81\xd7@\x14x\x95\xa6\xccF\xa9N\xd7D\xbe\xc2\xebo\xb8\xe1]\xf8*`u\xe4\xa9\x08\xe8C\x0e$\x03~**\xcf\xf1\x8cu\x17-\x81\xf3=\xe5s\x8eN\x0bc/\xcf\xa6\xe9/\xb2(a\"*\x10\x1b\xaa\xeb\x84\x18\xdbQ\x82\\\xf1\xa9#\x81P\xf9c1\xe7\xf2\xac\x1et\x02\x8d\xdd\xc0\x12\\\xa1=*\xd2k\x0f\xe0\xaa`\xb0\xd7o\x82\xc1\xec\xe7:\x1a\xcc\x83\xea~\xa7\xd7'c\xbd,\x8c3\xf4\xce\xe0\xdd\xa8k\x8d;\xc3n\xdf\xe8\x18f\xd7\x18v\x8c\x1e\xd6\xfa]k\xd4\xe9w\xad\xf1;C\xef\x18#<\xd0\x06m\xf1\x1b\xb7W\x90\x05/\x90\x16\xef\xd7~\xa4\xa5a\xfe60`\xe1\";\x01\xc43\x10\xbfz\x8a:;\xa8u\xfb\\g\x03-\\\xdc\x87\x97\x1f\xe3$\xa0\xd5\xbb\xa5\x8aG+/H\x0f\xc4!\xbb\xfcG\xf6cc\x04T \xab\xd1\x1d!\x7f\xc2\x9f\xe3\xab\x86\xff\xae\x81\xfcN~\x14\x08\xf8\x1eo9<\xaa\x04od\xb85\x84\x1c\x9e\xb8D\x95\xad\xfb\x99\xc3F\xe5\xc9\xb2\x02\x9a\xd4W0ub\xf2\x97\xbdR\x9a\x97M\xc2\xbdz\xc1)1{\xeb\xfc\x0b\x0f`\x9a,\x96b\"7Qh\"\x7f\xef5\xcd\x9e \xd1\x9e\xe5-\x86'\x85Ap\xb2\xe8Y\xdf\x13.\x0f\"\x06:w\xbc\x86S\xd5\x13_\xa3\x0d\xf0;\xe9\xcd\xde\x1c\x9f\xe3\xde_\xce\x92[\xac\x07\x90\xddEo\xdd\xf6\x02\x0e\x0b05\xa8\x0d\x99\xf9\xeaQ\xda\x17*F\xc0e\x97\xfa\x82\xc3Q\x1f\x1c\x02\xde\xc6\xa7>\xd8\xb0\xdf\xeej\x91\xb5\xc5F\xc3\xe3\x98\xd1Q \xf1\xda\x90\xa3\xb8\xe4\xa7\x83\x18&\xad#\x12\xc7\xa6|\x90\x08\x0cLM\x0b\xa3\xfa\nVf\xab\xe6\x15;\x96B\x85\xf3pw\x90\x1e\xdai`T\xc2\x19\x8ca\x95\xcd\xcc\xbe\xcc\xa7\xae\xe4\x08\xb7\xe6Ni\xd5L\xba\xd0\x0b\x87,\xf1\xa4\xce\xf4Ty\xcf\xb4\xf4\xec\x0f\xc4\xac\xa9U\xdb\xdaq\xe0\x05K\x903\xb7|\xab^\xdcR\xddn\x17\x1fV\xe4_Q\x97\x8du\x7f\xcf\xfe)\xa7\xe5\xee<\xb6\x1d\xa4\xe5\xabZjF\x84\xceBEq\x18i\x81\xed\xb3\x87\xb8\xa9\x15I#\x1d@\x9c\xfbx\xa5\x18\xcb\x06\x10(X\xfb\xb2\x0b\x8f9(\x0b\xb1\xed\xf4 \x9e4\xba \x8a7(\x16\\\x1f{\xb6\x0bYd%\xa2\xebW\xf47f@\x06\x9dU\xbf[\x9d%\xaf\xee\x1e\x94\x01E\x8fUcE\x92\xdas\x8c:i\xf55\x16So\x01\xba\"\x9b\xd5\xd2eQ \xf8\x85\xdb u\x1f\x82H\x82i\xc4\x9dNy\xe5\xf0\xeb\xfaKWik\xa3\xdb\xe1^\x0eE\x1c|\x87I\xbbN\xe8G\xeb\xack\xadc\\\x0f\xcd\xfc\x91~\x10_\x1cC\x07\xf5E\x9c\xaa\x9d\x88&l\xce\xf5\x978\x9c\xdbX+\xea\xfa\x8f\xbe%*\x90\xb4\xd6S9\x00\x92g\x9c{\xd50$~=S\xf5\xaa/\xc0\xdd\xcb1C\xe0\xed\xb9\x03@/\xc3\xa12nZ\xb5>?\xaf~\xe0\x99\x94\xc3]\x9a\x9fLJ\xe3\xac?\xd4\xbcX\xafg?\xd6,`\xc0\xf8tu\"\xa5O\xbe\xe2\xab\xd8\x84\x82ZU\xde\xefN2IZ\x12dp\xa7|j\xda\xac\xec\\\x80B\xaa7\xb7)\xe9E\xa2\x91fl\xe9Q{\x0f\x03\xe2\xe6 \xf0V\x9f\x92m\xfe\xea\xc6\x9c\xed\x99\xact\xd5vz\x8cI%\x13\xd7b\xf2c\xf2\x8a\xeb\xb7\x9e\xda\xa9Bf\xae\xaa\xbe\x8c\x93\xb0/\x93\xe0\xce\x02\xc1\x1f\xd52\xf9\x17>Ix\xd2\x97\xcdJ\x86B\xfa?\xfe\xc8grI\xc4\xd1\xd7O\x99\x14\x99\n\xba1\xfa\xef\xb5\x17W\xaf\xc7\x11\x0d\x12\"*\xf86+\x1c\xe0i\x03\xfasCM\xca\xac\xe2\xf6\x97R\xf0\xf2e\xd0V1\n\x0e\xd8o\xae6\xb2\xa0]\x8a\x82\xc4\x0b\x99l2\x81\xf0\x14^\x9csLW\xe5?\xccBT&|m\xfe\x13+\x8d\x91+V\x81\x1f\xa5\xfb?66^\xa3?\xf8\xc4\xb5ID\x03\xe5\xda\x91\x8b\x0e\xb8\x17\x0cJ\xb9\x97\x93=\x15L\x0e\x8f\xe2\xd0\xad\xee%5\xc1<\xffjH\x8c\x80\xab\xee\xfc\xa6^\x1aFs\x9b\xfeb\x0dpE\xa7|s\x0eDZ\xfd\x17~\xcd`\x89\xb1O\xdb%{r\xbe\x07\x14\x98:U\x95\xe7\x06\xd9!U%WB\x8eb\xf9^3\xbbIR\x1c\xb9\x90\xaf_\xd8cD\x95\x84E\xca\x06\xd8\xcc\xe2#\xd1\xca\n\xf5+J\xd61\xae_\xd3\xf7d\xad\xe7m5\x9b\xd6\x9b\x93\xea \x01\xca/r\xa2\xc0e\xaevfO\xd8{\x9dy)\n\\\xf56\xb4\xcc$\xa5\x86\xf8seV\x7f\xb8\x80\xbeJV]h\x12\xdf*\x91\x8b\xd3-f!\xed\xf4\xb3WOw\xeb 8\x99\x0e\xa8\xe3p\xa76\xa9\xbcgG\xcf\x9aJ\x1d\x82\xf6\xd2<\xc0\x92\xbf\x19\xf2\x18\xa1\x8a\xa9\x9f\x93\xa3\xd7\xc8\xd1\x9b\x94\xff!\x94#t\x0b\xea\x04$\xb0\xee(\xcf\x0dR\xbf\x1f#<\xf5\xb4\xbc\xd5$\x89D\xc88\xae_\x1e\xf2\x90\x9c\xe1$\xae\xd5Q\x8b\xa8\xb2qG\x0e:^\xb0\x08\xeb;\x1d\xc0K(\xb3\xf2\xce*\xbf\xee\xd7\xf5m/`\x97urt\x87=\xc4\n\xc0\xb1w\xc6?\x8c\x80g\xc5z\x89\xe0w\xda+\x0f\x0b\x19\x0d\xa0\x02\xf6\xf3\xc8\xc5C\x13z\xd8\x87\x1eZ\xc7\xbf9\xa0\xa0,\xdenU\xad\x8f\x8b\xdbb\xea\xe9C\xdd:\xf2\xa4.\xf4\xee\xf7\\\x0e\x9b\xd5\xeeQ\x1b\x11-\xb6\x80\xae\xc9\x16\xb5\xd2\xef\xbc3\x16\x83\xb1\x03xay7\x9f\xdc\x9f\x02\x98u\xe7v\x824\xe0\xe80\xa9\x0b\x93:\xdbZ\xcf#G)Qh\xcc.\x9bF5\x07O{w/\xc1\x95\xff2\xaad\xc1`\xb5\x1c\xae(\xd6\xef\xe4\xcb\x9d{\xc5\xc0\xc2.\x8d\x93u\xc4\x1dd\xb5\x86\xcc\x01\xb7\xa1;\xea\x8f!\xf3\x92\x92\xe7\xaf\xdbST\x057T\xd9\xebt\xa5\xcd\xd3\xe0i\x01\x0e\xbd6\x7f\x8e\x17U\xc8\xa5,\xeeK\xbba\x80\x0e\xf2\x14rN\xf8\xa4\xa6)M\xd4\xcf\x1a\xbb\x912w\x88\xd7\x040)\xd0&4\xd1\x9a\x97\xe3\x01\x9c\xc0\xe4\xa1\xc1\xdeo(\xd2\x89-\xa7\xe6d\xdc\xe1M)a\x1dl8E3#v\xcd\xcbc\xffV\xb4\x13\x1d\xb7bH\xeb\x8f\x8e\xf3\xc1\xbe\x94\xae\xf5&\x9a\x84\xa0\x08\xa3\xd9\x1b\x90R)Q\x1c\x87q\xc2\x0e\xa8\xd4\x06\x18?Y=y0M\x9c0BIg\xd5{\xfa\x94\x9f\xb3\xd2\\\xb4\x90\x1f\x8b(\x1b\xaa1V\xe9\xc1\x0eXu$\xe2\x92\x9acc\xf4)b^\x80E>\xe5C\xd2\xea\xfaZ\xebd/\xf9&\x15-v\xf9;\xdb\nx\xd3\x0b$e\x8fl\x08\xdf=\x7f\x92]\x05U&\xc4\x8b\x9f\xc0M/\x86\xae\x882\x9f>P\x9e\xb4\x06S\x90\x8c\xd6a\x8f\xba\xac\xa44P+\xb99t\xc7\xb1\xf0\xb7\x03x9\xad\xbc\x971\x02\xeej\x8c~\x9a4\xaf\xc6\x02\xdfAV\x00\x0d\x9e\xd6hH\x0d\xfav\xe0\xff\xb4,\x94\x9d\xee\xf2kaq\xb7\no\x9aTZ\xe5\x1d\xf9J\xef\xff\xbc\xfc\xdb_;I\xb8\x8e\x1d4\xb3\xa3\xc8\x0b\x96\x9f\xee\xde\xfd\xd20\xea:I\xd2\xf5\xed\xe8o/\xff\x7f\x01\x00\x00\xff\xffPK\x07\x08_;\x94/\xe8Y\x00\x00\xa8X\x02\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00 \x00swagger/swagger.yamlUT\x05\x00\x01\x80Cm8\xec\xbd\xeb\x92\x1c7\x92&\xfa\x9fO\xe1K\xb33$\xbb\x8bIQ\xea\xd9\x1f\xdc\xe5\xd8R$\xa5\xa91]\xea\xf0\xb2\xfdc\xac-\x89\x8c@fb\x19\x19H\x05\x10U\xccQ\xb7\xd9y\x8d\xf3z\xe7I\x8e\xc1\x01\xc4-\x03\x08DVR,\xb5\xdc\xad\xdbT\xcc\x88p\x00\x8e\x9b\xc3\xbf\x0f\x80\xbaa\x9b\x0d\xaf\x9e\xc1\x83\xaf\x17_=\xb8'\xca\xb5|v\x0f@\x0b]\xf0g\xf0\xf6\xb0\xdboey\x80\xc7\xb0ys\xf5\x12\xbeg\x9a\xdf\xb0\x03\xe42S\xf7\x00r\xae\xb2J\xec\xb5\x90\xe53x\x01o^\xbf}\x07\xa2\xd4\xbcZ\xb3\x8c\xc3ZV\xa04\xd3\x1c~\xa9y%\xb8\xba\x80\x82oXv\x00]\xb1R\xb1\xcc|g\xd4\\\xf3J\xa1\x8a\xa7\x8b\xaf\x16_\xdd\xdb3\xbdU&\x13O\x94K\xfe \xdf\xcbl\xab\x9e\\?]q\xcd\x9e>\xc9\xea\xaa\xe2\xa5^\xe2\xcf\xe6M\x80\x0d\xd7\xf6\x0f\x00U\xefv\xac:<\x83\x97\xf6\xb5\xd7\xe6-\xd8W\xf2Z\xe4\x1c\xdc\xb7\x80\xdf\x82\\\x83\xda\xf3L\xac\x05\xcfA\xe4\xbc\xd4\xe6\xcf\xcai\x92{^1\x93\xcb\xcb\xbc\xaf\xcd=\xaf\xb8\xda\xcbRq\xe5\x93\x06x\xf0\xf5W_=h\xffyd#Ug\x19Wj]\x17\xcd\xd7\x8b\xce\xdb*\xdb\xf2\x1d\xeb~\x0f\xa0\x0f{\xfe\x0c\xe4\xea\xff\xf0L\xf7\x1e\xec+\x93A-\xba\xe9[\x191PW\xacF\xa5+Qn\x8e\x1e\xaee\xb5c\xfa\x99\xa9\xc8\xff\xfe\x97\xe6i\xce\xd7\xac.t\xb8d%\xd4%\xff\xb4\xe7\x99\xe69\xf0\xaa\x92\xd5\xe7, &0\xab`\x99\xccy\xe8\x03\xd3f7M\xad\xb7\xd21\xc57_\x0f\x9e\xee\xb8Rl\x13T9\x9a\x87\x9ck&\x8a\xa3\xc2\xf8oXU\xb1\xc3\xd13\xa1\xf9n\xe4\x93\x88\xd9\xac\x84\x8d\xd7~\xbe\xac\xabb\xfc\xe9D#1r\xcd\x8az\xa4\xfcV&\xbfn\xad\xbb:h\xee^\xd9\xb3\x8a\xed\xb8\xe6U'\xcf\x8f\xa1d;SI\xc3\xdeiD\x94\xcfpt\xe9\x9a\xad\xe2\xbf\xd4\xa2\xe2\xf93X\xb3B\xf1\xce\x93\x91Li\xb6\xe9\xa5\xf5\x7f;e\xc1\xb1\xc7\xfe3<\xe8\xe0\xf8pY\xae\xa5j\x86\x9c\xaa.KQn\xec\x90\x83\x8f\xdcG\xbd\xf1\xe5\xf5\xf0\xe9\x9d\x1d]\xba&\xe8\xca\x97h\xc5m\xab\xb8EK\xecY\xf1\xdf\x1e\x07\xde\xea&\x06B\x01\x83\xba\x14\xbf\xd4\x1c*\xbe\xe6\x15/3\x0eZ\x82\xde\ne\xda\xb1\x16Y]\xb0\xe31\xc5\x8b\x16;^-F\x1f+\xcd*\xbd4/\xdc\xa2L\xbew\xe5L\xf3\xc7F\xd7-\xcb\xdef\xca\x94]o9\x96\x00\x98\x86\x9b\xad\xc8\xb6\xcd/\x15\xacE\xa54\xf0\xeb\x91\x01\xd5\x8b\x16\xd9G\xb5\xb8\x17|~\xb9\x1e\xa4'JL`]\xeb\xba\xe2\x17\xf8\xb7\x9d\xc0oDQ@)5\xac\xf8F\x94A\x85u\xa9E\x81\x9f\xa1\xdep\xca&\xc1\xf1Z\xc9k\xdbWoQ'\xa9\xb6\xf6I\xf5,-JXq}\xc3y\xe9\x8a>i\xc4\x12d\x95\x9b\n\x91\x15Nqe\xcesX\xf1-\xbb\x16\xb22mu\xc5a\xc7\xf5E\x93^\xb8\xf2\xb7\xb2.\xf2pR+\x0e\x9b\x8a3\xcd+\xd0[f\xeb*\xdb2Q*h|\x82U!\xb3\x8f\xce\xbeAE\xaf|\xc9w\xb52u\n\xa5,\x1f\xff\x17\xaf\xe4x\x9dL\xf89V\x12*f\xdc\xe7\xe9Kj\xe5\xf5\xf2\xe4k\xb0\xefu\x96\xf5n\xc5\xab\x0b\xc0z\x01\xa9\xb7\x91\xaer#\xab\\]\x84-\xb6\x957\xb0c\xe5\x01-\xab`\xcbT\xa7+>0m\x84\xe7\x0f\"\x16\x7fg\xba\x15\xf6X\xf3.<\xece\xff\xf9\xd3G\xa6\x049_\x8b\x92\xe7\xc0T\xa4\xe34zlE\xdfl\xa5\xe2\xf6o\xdf\x89\x87M$\xa8\xab\x99\n;\xa3@B\x03X\xde\xc9\x813\x94E\xa7`\xc5U;.\xd9\x9e.\xd7Q\xeb\xf8\xb6\x84U\x1c\xae\x10\\\x88]\xb3b\x81U\xec\xffe\xea\xe1a(K\x91f\x16,\xc5\x9f\x9b\xd1\xe3o\xf0\xd7-/\xdb\xd6\x17\x1f\xfd/\xecL)\x14(\xaeA\xcb\x13\x92~\x0e\x05ScY\x9a\x1eXeY\x1c@\x96|\xca\x88\xd8'\xcc\xf8\xc9`#\xaey\xd9u\x012V\x82\xcc\xb2\xba\x82=\xaflK_\xdc\x0b\xab\xfa\xe9\xe7w\xaf\xff\x1b\xd6E\xb0@;\xb3\xb4\x16\xd7\xbc\xda\x84k_\x89M)\xd6\"c\xa5.\x0e\xb0\xae\xe4\x0e\x1bKx\xfc`E\xf18k\xc6\xde\xce\xd4\xb9\xe2\x1bV\x02\xd3\x0b\xf8\xeb\xe0\x1d\xb9\x0e\xaa\xb3\x9f\xda\xc6j\xb2\xbb\x8a$\xfdo\xff\x16,\xea\x02\xde\xd6\xfb\xbdT\x93\xad|\xac\xd6\x9f~\x15i\xa8M\x15?\x87\x7fmRi'$\xd8H\xae@\xae\xd7\x85(\xd1{\xd1\xcf\x9f\xfe\xe5\"\xa8\x8d\x959d\xd2\x0c\xac+\x96}4\xcdF\x94\x91\x12\xa3\xbeo\xbe\xba\xc0\xef\xf6\x95\xcc\xeb\xcc|j,\xab\xccC\xe3\x14\x1d\xbc\x97.\xaey\xc4\xdd0\xf2P?\xff\xe6\xe9\x05|\xf3\xf5\x05p\x9d-\x1e\x85\x13\xfe\x136,\x93\xb6\x1f~\x8d_\xe4\xc6\x94\xa6\xc6MC~\xf8\xf4\xab\x0bx\xfa\xaf\x7fK\xd0\xf5tZ\xd7\xbf^\xc0\xd7_\xa5\xe8\xfazR\xd7\xd7_]\xc0\xd7I\xf9\xfafZ\xd7\xbf^\xc07I\xf9\xfa\xcb\xa4.S\x9d\xdfL\xe7\xebO\x7f\xd2\xcf\xbf\xf9\xef\x7f\xfa\xd3\xb4\xbe\x7f\xbd\x80\xbf|\xf5\xb7Qu\xb6\xb1g\xd2\xb8\xab\xe5\xc6\xb6z\x9e\xc7'\xb3\x95\x94\x05g!\xdf-u\x96\x1aO\xd9.s\\\nf\xc4f\x1aD\x99\x8b\x8ci\xae\xc2C\xce\x96\x1b\x97\x06\x07\xf8\xb0\xd9\xbc\x13k\xfc\x14\xe3\xb5\xd8\xe1\xe8\xc0u\xfaL\xbf\xe5b\xb3\xd5g\x98\xebc~\x9f\x0b\x85\xce\x9c\xe1m\xd6\xbc\xfbg\xdb\x84\xfb\xcd/\x99\xc2\x93\xce\xd0a\x0c\x1b\xd1\xd5\xd3\x02\x1e\xbe\x0b%\xd3q\x07\xcdt\x19\x9d\xeax\xfeh\xe4y\xaf\x0d\xfd}\xdc\x0e\xad\xcb\x86MF\xe9\xaa\xce\xb4m0}?'g\x9a\xc1F\x8arc\xac.G\x951\x97_\xefw\xae\x0e\xf8\xe9'\x17|\x81\x9d\xcc\xeb\xa23nRpr\xf0\x94\x82\x93\x9f!89\x1d*\xdc\xb0\xdd\xae\x05)\xd6\xbb\xdd2\x93e\xc6K]1\xcd\xf3\xe5^\xcabY\x88\xf2c$|\xd8\xe9^/\xbf\xfb\xf1\xc7\x97\x9d\xef\xaf\xa4,~0_C\xc5u]\x95\nvb\xe3\x9c\x1d\xd4\xda\xc4\x07\xcc\x97\xc6\x05iUu\xd4\x80\xc9\x86\xf2\xcd\xbe\x0fq\x84Rt/\xdf\xd9\x88dc\x88e\xc53\xb3`\x0e\xb5\xe2@\x83\x8c7\xc7\x15+X\x99\xf1j\xa9e\xbcB\x87\x12\xeb9\x10\xeb=0\x95a+S\xbd\x08\xba\x99\xc7\xcc\x8a\xa03\x01i\xfd\x02:}\xa3\x8eM\x9b\x00Y\xf1[\xa7\x99\xea\xec|\xebl\xf2N\x8e\xb5v7\xed\xe04&\xcaM\xc1\xb1w\x85\x0d\xec:\x9d\x7f;\x12%s\xc9b\x0f\xc4%B\x93B\xb7YA!~\xa9E.\xf4\x01_\x0c/\x0f\xde\x99\x05\xb4\xc9\x9b\x99sk\xc5\xf3\xe82\x9a\x15\x85\xbc1\xde\\/\x17Z\xba\xce\x83\xc1\xeb6?\xac\x94\xa5\xc8X\x11T\xb7\xae\x8b\x02*Vn\"\x05\x8e\x94\n\xf6R \x8c9\x06\xbf~1\xc8\xaaYo\xafle`Q\x81\xc1\x8e}\x12\xbbz\x07r\x8d\x8b\xf9,\x9c]\xa3\xe1\xc2\xd9<+\x1a\x85\xd1\x90f$\xa5^\xce\x8ek(\xe63\xfe\xe8\xc7\xaa7v\xa82V\xd2\x18*e\x85\x0dQ\xf7\x07\xf3&\xa9\xee\x80\xdeJ\xd7\xc6c\xa5\xc1\xd1\xbe\xf9\x9d<\xa5\xc1S\xf2\x94\xd2\x87\xcd\x17\xf0\xfe\xcd\x0fO*\xaed]e\x1caY\xeb\xe1[\x1c\xac8\xb4\xd11\x17\x84>\xec\xa3\xc1$\x8c{\xf2J\xb0B\xfc\xd7x\xeb\xb5\xb2\xaf\xa4\x96\x99,`U\xaf\xd7\xbc\xf2\x95\xb6\xb0#\xa0-\x9bE\x0c\\_\x02\x16^\xe7\x14\xdc\xac\x82\x82\x8fM\xef\xbe\xff\xe4>d[V\xb1L\xf3\xca\xc6O\xcd\xd2 \x14\xdf\xec\xcc\xa2\xcc\x06h\x8d5\x1e(\xd83\x1d^\xcaa\xa6*\xbe\xaf\xb8\xe2e\x0cvBp\xab(\x0e\xf0K\xcd\nKGA\xfb\xba\xa4\xd0\x92\x0f\x99\x02\x11\x19\xb2>\x98\xac<\xd9H\xb9)\xf8\x02m\xb6\xaa\xd7\x0b\x0f\xa9|xdK\x82j-\xa0c\x06\xb9\x08h\xc6\xdai\x00\xfbP8\xe5\x87|\xb1Y\\\x18\xd3\xe6\xa6*\xee/\xee\x9b)\xa9\x94\x1aX\x96\xf1\xbd\xe6\xf9\xa3Xh\xf4\xb2\x84\xbd1\xb6\xc8\xf8\x05h\xcevf:\xab\x991\xc7\xde8t\xbb\xbd(0\x84-\xedjZ\x94\xac\x1a\xf7\xa8\xc0Nth/e\x1b\xa7\xde\xf2C$\n\x81c\x1d\x08m\x86\xf9Zq\x8f4\x9a\x86\xc4?aU\xbf(\x0f\x0b\xf8wy\xc3\xafyua\x0c\x11T\xf6\xfe\xcd\x0f\xca-\xbak\x1bt\x8c\xac\xdc\xcd\x08\xca\xe1\xc3V\xeb\xfd\x87\x0b\xfb_\xf5\x011\xa1R\xba\xa7\x17vVc%H\xec\x9d\xc6\"a\x85\\C\xbd7k\xe7\xc3>\x96.\xaf\xae-\x06\xa3a\xc7\xf6\xca6-\xcc\xb9\xf1\x05l\xcf\xb2.\x10\xce\xcf\nX8\xd2\xb3\x96\xc6\xa9P\xcf\"u\xfb'\xb8\\\xb7%2\xcd\xc2\xd1\"\xf2\xa6\xd0\x182P\xaa\xde\xf1<\x02T\xfd\xc9LN\xff\xfe\xee\xdd\x15|\xff\xfa\x1d\xc8\xd2wA\xdb\xc7\x0e\x82\x179\xb0\xe0\xd7\xff9\xec\x16\xef\x0e{\xfe\xb7\xff\x1c\x0f\xc3Y\xc1%$\xc2\xae\xd8\xde\xdc4\x825\xe4B\xbb\xc0J;\x85\x85}\xb4?\xc1\x8b\xfd\xbe\x10\x19s\xb6\xac\xb8u\xc4\xac_\x91\xb1\xcc\x8c-R~\xac\xf7f\x9e\xad\x0b\xad`\xc5\x14\x1f\x9b\xe9\xad\xc88t\x86\x8d\x10\xf3\xb8e\xd7\xd8\x04w\x9d>\x94\xdbN\xc4|\x91\xcc\xdf\xd7R\xe4\xc0\xcap\xc3\x02\x97A\x1c>*\xbe\x96\x15\xbf\xf0\n\x8c^\xa6\xc5J\x14\xc6\xb1+9\xcf\x95\x03\x96q\xc8\xab\xae#%\xc1\xb2d[\xe3B\xe2G\xd8g\x17\xf0\xf0\xbd\xe2\x9e\x12h\xacd\x9a\xa7\x19\xb3l\xfbd%\x8b\x80#\x00\xab\x8a\xb3\x8ff\x0cr\x8acA\xf3\x9f\xa4\xe6\xcf,\x0c\xb5\xae\xcb\xcc\xf60S\x0e7v\xb9\x18\\q\x00v\xcdD\xc1VEt\xb84\xedQ\xae\xd7\"\x13\xac\x98\x98\xcbV\xf5\x1a*nf\"n\x9dR\xa1}\xa2\xe8\xc7\xafe\xd5\xf6\xcb\xa0*\xa4< \xb3\xe8F\xe8H\x90\xd0hZ\xd8\xf6\xcf\xf6B-2\xb9[\xc0\x0be\xc6\xb6\x1f\xd9\x01\xbe\xfe\xea\xebo\x90Ra\xdaf\xc5Mg\xbd\x119\x8f\x0c5v\xada\xf2gG\x93p\xd2b\xb7/\xb8\x993}\xfb/s\xa3\x7f_\xb0\x12\xeb\xb3ynF\xba\xd8\x14\xf1\x16\x87\x0fe\xc1r\x8b \x0f\x86Nxh\x8c\xb6\xe5\xc0w{}p\xe3\xcdX8\xd3\xca\x0e\x83\xa41\xf8\nKi,;(\x85g\x8cf\xa0\xf8\x8e\x95Zdj\xbc\xff\x7f\x86\x18\xd4PR]\xb7\x1f\x1d\x9d\x82\x99L\x89\xbc\xe3u\x1d9W\xce\xe3`+y\x1dA!\x1b\xd2,6\xae\x91\xf7Rr\xf6\xe1Ey\xf8\xd0Y\xff\x94\xc0\xaa\x95\xd0\x95\x19Y\xc29\x1cU\xe5'.VH\xd7\x1f\x80\x8dW\xad\x992F\xe2\xd2\xceW\x1d\xf8\xa4\x8d\xab\x19h\x9aW\xbe7\x17b\x85\xd9v\x93\x9b\x02U\xef\xf7\xb2B\xb7b\xcf\xb2\x8fO\xea\xd2\xfc\xc78\x13\xb6]\x8cwk\xcfs\nz[r\x0d\xb5\xb6\xa3\xad\x1f\xb3\x94\x19\xedY\x9e\x0b;\x80\xc1\x86\x97\xdc.\xb9w\\oe\xaeb\x84\x02\x93\x1f[\x85\xe3\xe9\xbd\xfe\xc4L\xe3\x87\xa7\xcf\xe0\xca\xe4\xdft`W\x14\xd6\x18]\x94\xf0\xf2\xcf\x7f\x8e\xcc\xdd\xdfI k)\xe19,\x16\x8b\xff\x11|\xcdd\x86\x95\x87\xf0\x0b\xac<,L6\xbe\xab\xe4\xee\xe1Z\xcaG\xe1W\x17\x8b\xf0\xa4,\xd6\xf0\xd0\xa8z\x8f\x05y'\x1f\xfe\x8b\xd1\xf5\x08~\x8dL,1}\xff\x88\xdb\xee\xeb \xdb\xfd\x07\xbbfg3\x1ey\xf2\xc44\xeb\xb4<\xbee;n\xfc\xb9\x176\xb7\x1b\xae_\xd98\xc7e\xa94+3\xfe\xf0\xd1)\x99\x1f\xd5\x13+\xcb\xf8#\xdf\x0c\xbe\x99h\x06W\x07\xbd\x95e\xa4!\xd8L~'\xe5\xc3\xc5b\x11\x9e\xd9\x9aF\xf00\xfa\x0ev$l\"\xa7\xb6\x10\xa3\xe4\xd2\x9a\xfc\xd5\xeb\xb7/\xdf\\^\xbd\xfb\xf9\xcd\xa3X\xb0\xb7\xedt\xf1\x84m\xd2qs\xfee\xc2\x9c\xdfGb\xa1h\xcag\xcf\xe1_\xf6\xab\xc5wR\xfe\xbaX,\xc2-\xd1\xe4\xfa\xc2\xf8\xf9\xe6\x0bV\x1e\xf6\xab\xc5O\xfcf\xa2\x00b\x8d_\xfc\xb7\xe7P\x8a\"\xda\xf4\xa2V\x8et\x90\xf8w\x83\x02F\xd4\xb8\x9c\xda\xb2-\xde\x97;V\xa9-+\xdeI;|\x9c\xab\x18\xa3\xcf\xdem9\xce\x8e\xcdL\xe5\xd7\x86\xb0:\xb4\x9e\xb2\x9f[\x91S\xb1\x1awK]`\xd38m\xe3I=\x18\xf1\x82\x9f\xac\xeb\xa2X\xe0\x03\xb3\xc2x\x00\xac\xe3\x0b\x18?\xc1\xb4\xad\xd0\xcci\xdb\xdcxb\xcd\xc4[\x16\x07\x1f\n8\x8a\xef4+\x1b`kK\x8b\x1cO\x08CO\x0f\x9e<\x18O\xcay\x0c>\xcb\x18\xa0\x00\xee\xfa\xc8\xfd\xb5\x94\x8b\x15\xab\xb0\xb0\x9f\x9e\x1c\x16\xffu\xdfZ\x11\x97\xcb\xa3\xfa\xc2\xd1\x03\xcc\xea}\xa3#\xe4,\xfc\xc7\xdb\x9f\x7f\x1a\x7f\xf2\xfc\xf9\xf3\xe7\xe1&`\xbek\xa3d\x8e\xa1g\xc6\x17\xe7!\xda\x95x\xad\x9c\xabV\xf1\x0dR\xebG\xf5\x1d\xabA\xd6\x01o}\xba\x0b\xe0\xbb\x15\xcf\xf3\xd6\xbb\xbb\xb0\x0b\xa81u!\x88\xa0\xe3o\xad1\xf4\xf0\xe1\x7f\x19\xcb}p\xe1\x9f\xc6\xa7\xed\xd6\xcdx\xffp\xe3\xd9\xb3\xc8\x92\x91e\x1f\xcd\xa0\xd6\x860\xd6\xa2\xe0\xe1\x89\xc8\x0f\x82W\xbcR\xb2\x8c\xf6Z\x17;E\xe2\xee\x12+\xf89<\x0dkn>@\xe2\xa5{\xff\xeb\xf9S\"@4W\xf7\xd1\x96\xf7\x9f\xc1\xfd\xb1N\xdb7\xc3\xc2\x96\xf2~\x98\xc3\x07p\x1f\xcb\xf7\x13\xdb\x19\x9d\xff\xd3\x16\xe1\xdf\xa2\x1f\x98\xf2\x0d\xde\x9f[\xc8\xcb\xb5[\x8d\xf6\xdb\x9am\x0dB\xc1\x0d/\x8a\xc7\x1fKyS\xe20\xb3e\n\x18d\xb5\xd2r7\xb3s\xf5\x9b\xbc\xa3i\x0d\xfa\x81\x1d;;\xd91\x0d8\xb0\xf2d\xb6I\x8f'\xf6\x01;\xa3o\xe7[Y\xe4\x9e\xe1nrn\xbb\xb2(\x9b\xfea\xb7\xc4\x8c\x0fl\xae\xcb\x8c\xa7\x83YX4\xb3\xfdC3\xacy\x13\x1e\x05\xf3|\x8c\xfbo\xff\xf9\xb7G\x91\x8et\x8e6\xd7O0\xde\xec\xd0TF\xe5\xd3\xc5\xd7O\xbfV\xf7#M\xc8\xfew.\xc5\xe4\x88\x8c r\xe4#,\xd7\x95\xdc-\xb3\xf5n\xf7\xe4W\xe4\xa1\xb8\x87\xff\x08\x13O:K\xf4!(~\x99\xff J\\sy\xe0\xbca\xa0\x98\x9aG,U\xe4\xc3U\xe680iAg\xe4\x11*\x0f\xb0\xe2j\xddh\xb2\x14kd\xaftq\xd5>G%\x989\xf3\x9d\xfb\xe2\xce\x12U\xc6jl\x16\xf6\x18dB\x10\xb2;xJ\xc8nZ\x10\x0e\x08\xd9%d7\xf8&!\xbb(\x84\xec\x1e\x0b!\xbb\x84\xec\x86\x84\x90]Bv \xd9%d\x97\x90]/\x84\xec\x12\xb2;\x94y\xc6#d\x97\x90]Bv \xd9%d\xb7/\x84\xec\x12\xb2K\xc8\xeeP\x08\xd9\x1d\xff\x80\x90]Bv\xbf\x00\xb2\x1b;\xd9\xb4\x8b\xd0v\x14\x89\xf2\xd9\x10\x82h\x8f6\xd5U=q\xb2)\x84\xb0\xc2\x99 \xf3Z\x14\x9aW\x0e\xaeL;\xb9\xe0\xca\xbc\xf9W\xa1\xb7\xdf\xe1\xb76.\xaa\xe0 k\xd3h\xf0\xbc\xd66\xd4\x82j\xed\xba\xde\x14\x8f+\xdd\x89,\xb6fs?\xf5\xb0\xe0A:\xee\x95;\x0b\xfev\x0c\xd8\x15M\xd8\"a\x8b=!l\x91\xb0\xc5q!l\x91\xb0E\xc2\x16 [$l\x91\xb0\xc5\xc0+\x84-\x12\xb68\x14\xc2\x16 [\x1c\x17\xc2\x16 [D!l\x91\xb0E\xc2\x16\x87B\xd8\"a\x8b\x84-\x0e\x85\xb0\xc5\xf1\x0f\x08[$l\xf1\x0b`\x8b^\xf6l#JL\xe0\xd8\x9b\xea-\xac\xdb\x17\x9b\xb3\x8e5\xce\xa9\xcd\xcfn~\x18\x03\xc3\xacD\xf1\xa78\xfaT\xf2Oz\xf9\x91\x1f\xc2\xc8T4\xc21\x19\xdfH\xb9\xae\xa0\xcd\x85\xbf\xa2\xc1\xfc\xe9b\x90L\xd9\xb3\x94\xe1\x8am\xf8\x1b\x8bI.\xec\xf3\x802\x0bi\x1a5F\xad1$\x87\x9dT\x1a8F\xf60\x1c\xb8\x80K\xdd\xe9P{}\x00\x11\x02\xb9za\xb5\x9d\xac\xb8\x0f\xf3\x8eM\x06Zj\x16\x00\xf2\x92\x8d\x199V{\xea\xfe\x0bL\x1e\xad\x88\x7f\xd8\xbb\xcd\xcc\x0c\xea#\xd3\x9d0h\xa8\xbc]C\xe3\x1d$KT\x16\xea\x937\x0co\x8d\xba\x00\xa1\x95\x0f\xb8+\xa8K\x7f_\x04\x86\xfbnD\xe7v!\xda\x1d;xJ\xbbc\xd3\x82\x8d@\x086!\xd8\xc17 \xc1F!\x04\xfbX\x08\xc1&\x04;$\x84`\x13\x82M\x086!\xd8\x84`{!\x04\x9b\x10\xec\xa1\xcc3\x1e!\xd8\x84`\x13\x82M\x086!\xd8}!\x04\x9b\x10lB\xb0\x87B\x08\xf6\xf8\x07\x84`\x13\x82\xfd\x05\x10\xec\xd8\xee\xd8\x9d(\x97\xcd\xdd\xb1\x1dM1\x98\xf7\xad\xed\xadn\x10\xcc\xa4\x19\x91D\xe9/\xb7u}Yq\x93\xac\xb6\x93n&w;f\xcc\xde\xf7m\x9e~U3-w\x17O\xbf\xfa\xaa\x96j'\xbbC\x99(\x9fY\xe0\xb7\xf3[\xbbAw\xcd\n5\xb9C\xd7\x97\x117\xff\xe2\x0c\xf4y\xd47\xc0\xfe\xe2#O\xb5\xa1\xc3\xc6\x99\x9b\x85\xec\x89\xcf\x18Iup\xadCG\x1b \x1d\xe3\x9f\x9bA\xa0\x10K`\xac=\x05\x8e\xffl\\\x06Yb,B\xae\xd7\x8ak\xb3\x0e\xeag\x17:\xf8\x8d\xe2\xfa\xcc\x95\x11\x08<\x8d\x18\xd1\xe6/d\xc7A\xd0\xc7\x15\x06MY\xd6;^\x89\xcc\xff\x86\x03\x96\xbb\xd6\xd8F\xdd\xb6\xbc\xf4\x86\xaf\xcb&\xfa:X\x12\\\xda\xc3\xb3\xb9R\xad mh\xb06-\xdc(\x98g\xcf\xbe\xfa\xcfl\xdc\x01\xd5`\xc4\xbc\x85\xd8\x89T\xeb\xe2\xbb\x9e\xc3\x11b \xd8\xc8|\xb7\x05;rK]\x0c\x10{\x1b\xf2\xea\xfet\xb9\x86\x82\xaf\xb5gl8\n\x87w\xbb\x11T\xb0\x1d\xc4&b\xec\xbc:\x00g\xd9\x16\xd8~\xff\x05\xad\xd8\xe5Q\xb4\xdf\xc7l\xd9\xf9\xc2X\x14[\xa8\xc4\x93\x06\x00c\xd6e.2\xbc(\xdc\xc1\x8b\xce\x82\xf8\xa2kH]u\xa2\xcc\x8a:\x1f8\xd5\xcc\xa6\xd2\xe0\xbb\x83\x1aC\xb6@\x07v0\xb3_\x8f\x96\xd4S\xf6\xfeR\x0djkP\x04\\\x87T\\9^\x07v\xaf\xb6?\x9a.\xb7p\xbdIlJY\x0d@\x1b\xdf\x1b\xfbIX\xcb\xdc\xb6bWR\x16\x9c\x95\xb1\n\xac\xf85\xafz\x9f\xc6*\xcf\xbd=\xac8\xd1\xe1\xe1T|\xbc'\xf4\xf4\x984x\x89p\xb6\xacr^\x0d\xd7\x98\xca\x9e\x95)\xd4\x0f\xd0\xe4\xa5\xdc\xc5\xbc\xed\x84\x10\x13\x00\xdb\xc9\xba\xd4\xb7T\x93\x12\xec1\xf2R\x8a\xf6\xb4\x1a\x06Z~\xe4\xa5\x0b\xd6\xd8\xe2x\x8e\x88\x19\x11Y\xe92\x17\x8b\x0b\xfe\xf4\xf3\xbb\xd7\xcf\xd0\x89\xb0\xef\xba\xd9X`4\xe9\xb2\xd4n\x9cj\"x*\x1a=w\x83\x98u\xdf\xc2\x89*\xb1)\x99\xae+\xae\x1aR\x84qX7r#q\x848\x9e\xe8\xdd\xf9+\xaeC\xdaQ\xb3\xe5K\xdax\xef\xd6,[2^jq\xcd\x95\xeb\xa7\x8d\"\x02\xee\x07O \xb8O\xefv\x04\xdc\x13p?.\x04\xdc\xa3\x10p\x7f,\x04\xdc\x13p\x1f\x12\x02\xee \xb8'\xe0\x9e\x80{\x02\xee\xbd\x10pO\xc0\xfdP\xe6\x19\x8f\x80{\x02\xee \xb8'\xe0\x9e\x80\xfb\xbe\x10pO\xc0=\x01\xf7C!\xe0~\xfc\x03\x02\xee \xb8\xff\x1d\x00\xf7\xfe\xa8\x90'\xbf\xe2\x9f\"\xffG\x18\xc5\x1f\xdc\xc9o\xfc\xe5\x06\xd2\x1f.\x80\x8d\xb6v\xb4z\xe3\xde\xba\xff-+\x8c\x17\\\xdd\x07l\xac~,\x10\x9aW\xac\xb0[\xe4\xfd\xd7\xf6\x8c\x8b\x95\xfb`\xa0\xf0uU\xc9J\x19\xcf\xa3\xfb\xfa\x9aa\x84\xd2\x86\x0f17\x19S\\\xf3|\x94^\xe0\xcb\xe0\x9e\xdd]r\x81\xaf\xa3D\x88\x91\x10\xda\xc1SBh\xd3\x82i@\x08-!\xb4\xc17 \xa1E!\x84\xf6X\x08\xa1%\x846$\x84\xd0\x12BK\x08-!\xb4\x84\xd0z!\x84\x96\x10\xda\xa1\xcc3\x1e!\xb4\x84\xd0\x12BK\x08-!\xb4}!\x84\x96\x10ZBh\x87B\x08\xed\xf8\x07\x84\xd0\x12B\xfb\x05\x10\xda\xd8\xed\x14\x0e\x83\xed\xe8\x10\xe5\xb3!\xfa\xd0\x1e\x7f\xad\xab\xfa\xd4C\xdeO\xc0\x89\x8f\xf7w\x1f\xc1\xa9w\x7f\xa3v\xec\x04k\x02\xf5\x08\xd4\xf3B\xa0\x1e\x81z\xe3B\xa0\x1e\x81z\x04\xea\x11\xa8G\xa0\x1e\x81z\x81W\x08\xd4#Po(\x04\xea\x11\xa87.\x04\xea\x11\xa8\x87B\xa0\x1e\x81z\x04\xea\x0d\x85@=\x02\xf5\x08\xd4\x1b\n\x81z\xe3\x1f\x10\xa8G\xa0\xde\x17\x00\xf5\xbc\xb4\x17\xee\x1e{S\xbd\x85u\xe7\x1ab\x7f\x0c\xad\xc69\xb5s;\xb1\x1b3\x8f\xc10+Q\xfc)\x8e>\xf9[\xd6\xc3\xc8T4\xc21\x19\xdf\x88\xdd\x04\xdfJs\xd7\xbb\xbbp\xbb\xb9\xf6\x1d\xf6L)\x1bh\xb5\x97\xc3\xffRs\xa5\x17\xf6y@\x19^\x12\x8cjb\xf7\xc2_\xeaN\x87\xc2+\xb8C W/\xac\xb6\x93\x95\xbf\x9fz4d\x84WD\xdf\xd2\x98\x83\x0br\xbb\xe2\x0e\xed\x0d\x86\x89\x9a\x1b\xaaCW\x96w\xc2\xa0\xa1\xf2v\x0d\xdd\xbd\xec;\xf0\xfa\x0d\xc3\x9b\xa1/@h\xe5\x03\xee\n\xea\xd26\xe6\xdc\x86\xfbn\x84\xa2\x83\x83i[*!\xd8N\x08\xc1&\x04\xbb\x15B\xb05!\xd8\xe3B\x08\xb6\x17B\xb0 \xc1\xee\n!\xd8\x84`\x13\x82\x0d\x84`\x13\x82\x8dB\x086!\xd8\x84`\x13\x82\xdd\x11B\xb0{B\x086!\xd8\xe1&@\x086!\xd8]IE\x13 \xc1F!\x04\xfb\x9f\x05\xc1\x8enKmP\xe9\xc5G\xde\x9d\x04c8\xaf\x03v\x99\x1bB\xedA\xc1\x18\x06tX\xa3\x83\xf6\x1a\x14\x18\x83w\x9bA\x94\x0ba]\xd3\xed\xa7\x90\xdd\x9f\xcd|'K\\H\xcb\xf5Zqm\x9c\xf8~v\xa1\x03>(\xae\xbb\x83\xa2(\x9f\xd9\xb4:\xbf\xb5\x1bm\xd7\xacP3v\xda\xf6\xa2&#F\xb4\xf9\x0b\xd9q\x10\xb1p\x85AS\x96\xf5\x8eW\"\xf3\xbfao\xcbXi\xcacCF[^z\xc3\xd7e\x13:\x1c\xf8\xb3\x97\xa8\xad\xe0J\xb5&\xb4q\xadZ\x19S\x7f\xe43\xed\xd9W\xff\x99\x8d;\xc0\xc9G\xcc[\x88\x9dH\xb5.\xbe\xeb \x08!\xf8\xdc\x86\x95\xbb-\xd813\xeab\x007\xdbxM\xf7\xa7\xcb5\x14|\xad=\xdd\xc0\xf1\x0f\xbc\xcf\x88\x11q\xdbAl\"\xc6\xce\xab\x03p\x96m\x81\xed\xf7_\xd0\x8a]\x12@\xfb}\xcc\x96\x9d/\x8cE\xb1\x85J\xdc\xa4\x0e\x18p-s\x911\xcd\x1bl\xccY\x10_t\x0d\xa9\xabN\x94YQ\xe7\x03\x8f\x90\xd9T\x1aprPc\x08uwb\xe6f\xe8\xeeqjz\xca\xde_\xaaAm\x0d\x8a\x80Nt\xc5\x95#%`\xf7j\xfb\xa3\xe9r\x0b\xd7\x9b\xc4\xa6\x94\xd5\x00q\xf0\xbd\xb1\x9f\x84\xb5\xccm+v%e\xc1Y\x19\xab\xc0\x8a_\xf3\xaa\xf7i\xac\xf2\xdc\xdb\xc3\x8a\x13\x1d\x12I\xc5\xc7{BO\x8fI\x83\x97\x88\xc5\xca*\xe7\xd5\xd0a\x7f+\xca\x8c?\x83L\xaa\x9dT\x8fU\xfe\x11\xbeZ\xfc\xe5\x9b\xb3Z\xe3\x94\xb3\x0dR\xce\xbf\x7f\xf0\xca86\xa6 \xe7\xcf`\x8f\x10J\xb3\xc2b\x85\xe6\x951\xfc5F\x00>\xa1V\x0b\x19U\x0f\x9c\xa2\xa3\xe3\x12\xee\xf9\xd2\xdd\xe1\xd3\x12BT\x93\x93xg:\xca\x18\x99\xc4%R\x02\xfbg\xe7\x8a\xa41EN\xe1\x89\xc4\xf9 '\xb1A0\x89\x80\xc2I.\xc8\x19\x98 '\xf2@\x82\xe8y\x1a\x0b\xe4V\x1c\x90\x93\x18 \xc0\x8a\"d\xc54\xfe\xc7)\xec\x8f\x18&\x9b\xc4\xfd83\xf3#\x89\xf7qF\xd6\xc7$\xe7\xe3L\x8c\x8f\xdb\xf0=f\xb3=\xce\xc0\xf583\xd3c\x82\xe7qv\x96\xc7\xe7\xe1x\x9c\x9d\xe1\x91\xce\xef8\x8d\xdd\x111\xfa\x14\xb7\xe3l\xcc\x8e4^\xc7H\x98\xe26\xac\x8eTN\xc7\x99\x18\x1dg\xe6sL\xb19n\xc9\xe5\x8809&\xfd\xa5I\x16G\x9aCu^\x06\xc7\x14\x7fc:O\xa7q7\xfcT3\xa2p\x8a\xb9qF\xde\xc6-X\x1b\xe3\x04\xb0\x18g\xe3\xbc\x8c\x8d8_\xe3\x1cl\x8d$\xba\xc1\x04S#\x99\xa7\x11\x06\x0d\xe7s4\xc2\xbaF#\xf4gag\xcc1V*3c\xda&\xc9\xac\x8c\x138\x19!\xa4x\x8a\x8fq>6\xc6\xed\xb9\x18\xe3\x88\xcc\x99x\x18I,\x8ci\x0eF\n\x03#j\xed\xb9\xec\x8bT\xeeE\x88yq\x06\xde\xc5\x0c\xd6\xc5|\xceE2\xe3\"BT\x08f'\xf2M*\xd3\xe2<<\x8bh\xe6G\x9e\x9c\xc4\xb0\xf0\x91\xf1\x11}\x01~\xc5\x99\xd9\x15an\xc5\xa9\xcc\n\x0c\xd9\x8ce|\x9cWq^VEhe>\xc5\xa8\x08A\xbe!6\xc5y\xb9\x14\xa73)\x02\xac\x89\x938\x13\x93\xfc\x88y\xec\x88dn\xc4Lf\xc4\x1c^D\x90\x15\x11\xceM*:\x9d\xc6\x88\x98\xc9\x87\x98\xc1\x86\x18-\xday\x99\x10\xa1Nq\x0b\x16\xc4h\x1c)\xc8\x818\x8d\x01\x11c;\x9c\x9f\xebp\xfb\x96\x94\xccsHe9\xf4'F\xb7\x9b\xfa\xb6h\x0e\xedh\xa6\x1d\xcd#2\x1d\xbe\xb0rf\x94*\x15\xa7:\x0d\xa9\n*\xa3\x1d\xcd\xb4\xa3\xb9\x95S0\xad\xa02\xda\xd1|,g\xc2\xb7n\x87p\x9d\x80q\x9d\x05\xe5:;\xce5\x89t}\x06\xac\xebs\xa1]\x9f\x01\xef\x9a\x83x\x9d\x8ayE\xc7\xf0)\xd4\xeb\x8c\xb8W*\xf2uv\xec+\x1d\xfd:\x1b\xfeuv\x04l\x1a\x03\xbb5\nF;\x9a'sv\x1a*6\xaa\x8av4\x9f\x82\x8fM!d\xe7\xc1\xc8\x12\x81\x9fI\x9cl\x06R6\xb9\x1bs&ZF;\x9aiG3\xedh\xee\xca \x98Z:\xaaF;\x9a\xbd\xd0\x8ef\xda\xd1L;\x9a\x93Q\xb8\xdb\xe0p\xa3\xeahG\xf3\xe8\x07I\xc8\x1d\xedh>\x1f\x8eG;\x9ao\x8d\xf2\x9d\xa7\xcd%#}\xe9X_\xe2\x8e\xe6;}\xd1n\xbb\x19\xed \xff$\xf4R\xdd\xb0\xfdRmY\xc5\x97l\x87;\x14Ey\xb4M\xad\xb7\xbb\xec%+\xb2\xd7\x9f\x84\xbe\x92\xb2x)E\xa9\xcc\"\xef\xad\xd1p\xe7\xaf\xe8\xd5\xf2#/\xd5R\xd6\xfan`\x829/\xe5\xee\xe4\xc0\x93\xad\xaf\x13?O \xfb\x98\xdam\x8e\x90g\xd6z.dc\xb3\xee\xf7\xbe\x9aq\x91\x95.C!\xa7\xe3\xa7\x9f\xdf\xbd~\x86n\x84}\xcf\xcd\xc7\x02\xe3I\x97\xa5v#U\x13\xc3\xeb\x0eW\xa3\n\xad\xf36\x9e\x98\x12\x9b\x92\xe9\xba\xe2\xaa\xe9j\xc6U\xdd\xc8\x8d\xc4\xb1\xa1m\\\x84\xb4\x0f\x9e\x12\xd2\x9e\xd6;\x80\x90vB\xda\x83o\x12\xd2\x8eBH\xfb\xb1\x10\xd2NH{H\x08i'\xa4\x9d\x90vB\xda i\xf7BH;!\xedC\x99g\xffw\x14\x98?.T\xefi\x0c\xc3\x8b#x\x11\x88}\"D\x14\x83\xd7\xa3\x9fN\x87f\xce \xac\x9f\x19V\x0f\x83\xea\xe9\x90:\xa1\xe0\x83\xa7\x84\x82\xa7\xf4\n+\x84\x82\x13\n>.\x84\x82\xa3\x10\n~,\x84\x82\x13\n\x1e\x12B\xc1 \x05'\x14\x9cPpB\xc1\xbd\x10\nN(\xf8P\xe6\x19\x8fPpB\xc1 \x05'\x14\x9cP\xf0\xbe\x10\nN(8\xa1\xe0C!\x14|\xfc\x03B\xc1 \x05'\x14\x1ce\x12\x05\xb7\x00qx\x87\xfb1\xf0M\x9b\xd2O\xc3\xfahS\xfa\xe9\xe8\xf9\xb96\xa5\x13\x82>xJ\x08zZ\xef\x00B\xd0 A\x0f\xbeI\x08:\n!\xe8\xc7B\x08:!\xe8!!\x04\x9d\x10tB\xd0 A'\x04\xdd\x0b!\xe8\x84\xa0\x0fe\x9e\xf1\x08A'\x04\x9d\x10tB\xd0 A\xef\x0b!\xe8\x84\xa0\x13\x82>\x14B\xd0\xc7? \x04\x9d\x10\xf4/\x80\xa0\xcf\xc4\xae\xdb\xbd\xdb\\i\xb1c\x9a?Q7l\xbf\xe4\x9fX\xa6\x97\x16x\\\x8a\xf2\x08\xd3\xfe<\xa7\xb6\xbfvyx{\xc3\xf6\xafM\x0e^`\x06.}\xc4\xec\xce\xe2\xe4\x08\xf5.e\xedM\x96\x08\x06\x12\x96:xJXjZ\xd8\x0b\x08K%,5\xf8&a\xa9(\x84\xa5\x1e\x0ba\xa9\x84\xa5\x86\x84\xb0T\xc2R K%,\x95\xb0T/\x84\xa5\x12\x96:\x94y\xc6#,\x95\xb0T\xc2R K%,\xb5/\x84\xa5\x12\x96JX\xeaP\x08K\x1d\xff\x80\xb0T\xc2R\xbf\x00\x96z7v#\xb7i*^\xe6\xbd\x05\xf7)7|\x0f\x12\xf5\xba-\x82\xd9\x8b\xa7\xddZ\xfb\xe7\xc0\xa2e\xad\xbf,\x18\xfds\xed\xc1\xac;\x8eF\x8b\x92\xc0h\x02\xa3 \x8c&0\x9a\xc0h/\x04F\x13\x18}$\x04F\x13\x18=\x14\x02\xa3 \x8c&0\x9a\xc0h\x02\xa3 \x8c&0\xba'\x04F\x13\x18=\xd9B\x08\x8c\x0e\x7fC`tO\x08\x8c&0:\xdc\x04\x08\x8c&0\xba+\xa9\xc0 \x81\xd1(\x04F\x13\x18\xed\xe4w\x07F\xcbZ\x9fS\xfd4\x1a-\xca\x8c\x97Z\\s\xd5`\xd2,3\xff^nX\xbd\x19\xb9\xd2\xba\x01\x9e_\xe0k\xdf\xe3[Pq]W\xa5\x02\xfb-\xd8o\xdd\x17=\x84\xb9\xfb\xd5=_\xa2;\x8a)\xe7L\xb3\xbb\x81j\x8a\xfc\x0cq\xb3A\xa3\xee\x8b\x16\xba\xe0\xcf@\xe0a\xdbf\x00\xb3 &\\\xbeB\xd7\x03\xb0\xc6\xc6\xf3\xa6\x96{^\xed\xb9\xae\xd9\x04\xea\xba\x92\xb2\xe0,\x141N\x89\x90\xc1 =\x84J`]\xb0\x8d\x19X\xd5V\xde\x18\xff]\xe8\x07\xe6\xe7\xf6\xad\x08FU\xca\xf2q\xfb\"\xb6\xdb\xf0\x80\xf9\xd3\xf1\xcb\nra\xac\xbf\xaa5\xba\xb5\xa2\xb2=Y\x01\xff\xc5Av\x81\x10\x9d\x11\xbe\x97\xd9\xd6\xcc\x1d\xc5\x04<\x86i\x99\xd2:\xff\xd6\xf5\xb3=\xaf\x84\xcc\x17\xc6\xb5\xe9e*\xa8\xa7\x93Y\xc4\x05;\x19\x0e'\xce40P\xa2\xdc\x98\\\n\xe3\xa0\x97\xb9\xf5\xe5Ceg\x1b\x16A\x06d\x99\xd9%\x80/U8\xe9\x8a\xafEQ\x18'\xf5\xb2\xd4f\xf4\xb5`\x80YC\xd8Pt3|\xd9i~\xc3\xc3H\xb7\xd7\x059\x13\xc5a\xdc\xfbl\x0b\xb4\xd42\xd8\x9am_\x89\xb4\xd1\x9e\x1a\xf4n\x10Nh\xcb\\\xf1\x1bV\xe5\x16\x00k_\x0e\x83CZF\x02!\x08\xfb\x0b\x85S\x85YI]\x0b\x06\x85\xcc>B\xee\xa6e\x90\x95YA\x9a\xbaS\x9a\xed\xf6\xd1^\x1a\x1c\xa4 a\xa0\x02\x84\xc7\xb2\x8fK\x9c\xb6\x96\xa81\xf8b\x8a%\x8d\xfc \xb3\x8f8s\xbds\xbe\"k\xc2\xd3XLL+\xe6y\x00|{0J\xbc\x9b\x02\x7fw?\xbc\x13\xbb\x18z\x960\xb8\x1a\xe1e\x1d\xbc\xa1\xc1\xcac\xf8\xf6\xe0\x13\x9f|q\"S\xe6\xa5\x9f\xa4\xc9\xfd\xa4\xa6\xef+Y\x87*\x1b:\xf4\xa7\xb4\xdc\xa5\x0e\xd0pTe\xfe~\x88!\xb0\xd0\xd6^T\x19\xf6\xec,\xb4\xf4\xf4\xc2\x05ba+n\x9az\xb7\xe5+\xcd*m\x07\xaeN\xba\xe1\xe8L\xf4\xc6\x0dHo\x16i\x8d\xfb\x95I\xad]\x9e8#\xe15\x1a\xbd\xfb3n\x10\x8d\x8c\xaa*\xa4D\xacWKk\xd9H\xdd{\xfb\x9c\xa1\x98s\x9aE\xd3\x01\x85r\xa8\xa9\xb4\xf5\x8f\x19VvL/d\xb9\xe1U\x93\xc5\xa9\xa6a'\xc4\x06\x81\x8b7\x12\xaft\xd1f\xc5\xc6+\x905QJD\x05KQ\x98\x01{\x8aY\x00\x9d\xf6\xeb\x97\xb1\xf1\xd4?\xf4\x87\xa1\x0f\xe16\xd8\x0c\xd5g\xa8 \xef\xff\xe5L\xf3\xc7:>\xb8\xcc\xa9\xccw>\x8fMm\xae|=b\x973? =b\xd2\x8e-|\xda\xd4O\xdc\x90m\xd2\xf1\xdaK\x1ea\xdc\xc4\xf2\xa1\x9d\x16>Ld\x01G7\x8c\xfd\xb4-Ww-\xd2\xd2%J\x19vJ\xa0\xcb\n\xe0y\xa8E\xa4\xd6\x0b\xe6\xea\xa5,]\xb4\x01\xe7J\xa5\xab:\xeb0)~\xe9\xe7\xbc\xdeG\xfaX.\xd6kn\x8a\x01\x99W\xaa\"\x86\x19t*\x8c\x17\xf7\xabJA\xe6\xa9v\x9e\xc4\x15\x9e\xb9s\xbe\xe7%R\xe8\x1c\xcd'\xf8fo\xbe\x197b&E\x19\xf4Zb\x8b:+\xc1\xa5\x9d\x95\x04\xdf)\xcd{J\x98\x7f\x92{~\xfc\xf6'+I\xaaR\x9b\xdf\xec\xfb\xa0&3\x1f#\xc1\x9cx_TD\x9f\x8b\xda\xc5n\x8d\xb2\x92~wT_\xa6}\x02l\xa6~\x11\x8e\xd7\xac\xf9\xb2\xc9\xb5{\x88\xfe\x10\xf2\xd9V\x9c\x97nI\x18T8\xb1\xa6}\xc9\xca\xee2nW\x17Z\xec\x0b\x8eI\xd9\x1a\x1b_M\xe2\x10\xbf4\xbd\xfb\x0c\xa1\x89\xa9\xa9\xc9\x99\xadM\xd3\x1b\xa8\xc99\x12\x91\x1aGoTMY\xef\x96\xb8\xe0V\xcb=\x13\xf9R^\xf3\x11\xb2\xbd\x95\x19yO \xabD\xea{,W\xbete\xbd[9\n\x126\x04\xfb^d\xb0\xee\x18\xc3E\xb8\xc3\x15\x9fI\xd3+\xcc,m\x92\x1c}\xcd\xae\x97]\xf6\xbe\xbc\xa9z\xd99\xb6\x91\xfb\xbdg\x85m\x84\xad\x8b\x9d\xa7c\x85\xc8\xfa\x82\x15\x15gy\x00jm\x97\xefK\x9acF%I\x15\xcd1\x03\xf9|s\xccQ\x93\xc58\xd4\xe8\xe4\x92\x12\x9c\n\xf7\x8e\x94:\xfd\xde\x876Y\xe9\xda\xb6\xcd\x83\xd2\xd2\x14\xdd\xd4a\x9b \x05\x07\xebEj9\xaa\xac\xe2\x99\xd8\x0b\xac\x85\x9bm\x80\xf1\xa2\x98\x16j}\x80\x8cW\xb89\xa6\xe3\xd9\xc2\xcb\xc6iw\xd1]\xc7[\x1cU\xd4~\x08\xac\x92\xb5#G\x8c\x0f\x12\x8dc,+\xd7`\x18l\xc4\xb5_\xe5\x9b\xf2\x1bw|l\x05\xe0\xea\xf3E\x17Z\xc1\xf0\xeb\xe0\xcd=\xdb\xb8\x86?\x02ZX\x1dW\xcd+M\xffi\xbf\xb24k$\x14XH\xe5XKl\x00\x8a\x0f<%\xff\xa4\x97\x1f\xf9\xc8\xa5\xaa\x902@Lr\x7f{-\xed\xef\xa1\xa6\xefs\xe1'\x0f\xf3\xa7\xe3\xe73\xe5\xe2\x11Wl\xc3\xdf\xf0_j\xae\xf4\xc2>\x0f(s\x0b\x7f3\x07\xf1O\xda\x18\x92\xc3N*\x0d\x1cY\xef\xd8\x8c\x16p\xa9;`\xf3^\x1f@\x846\x80\xf5(\xe7;\xb3nv[ \xc6:::\x04\xb74fd:\x9e\x1aC\xac?b\xac\x88\x7f\xb4\x93\xb0\xdf\xb5\xd1\xd9\"\x10*o\xd7\xd0\x19ntEe\xa1!\xf1\x86)P\\_\x80\xd0\xcaoFQP\x97\xb6!\xe7\x96\n\x7f#F\x9a\xed\xf4(d\xb3b[\xbd-U\x8f\x1c J\xd8\xbc\xb9z\xd9t\x0c\x8f\xbc\xbb\xb8\xfeX\xf5\x8c\x0f\x04\x99\xac\xac\x0e\\\xd4V\xb6\xf0\x0d\x8e\xbfe.\x8e\xd2\xb5\xcc\xa89\xfc\x17o\xe5\xae\xcdw\x94\x8eV\xf1=G\x12\xf4\xb7\xacj*i\x82\xdc\xd27\x0b\xb6\xef\x10\xbd\xa5%\xd4\xd1\x96\xda\xc1S\xdaR\xfb\x196~D\x99!\xcd\x8cf\xc6\xefP;\x1c\xcc\x11nR`nd\xb1|\x06\xdb\xf5\xbb\xbd`\xd1\xcc 8Dl\x06(g\x13Z\x9b\x9a\x15~.\x8b\x03\xeef\x94k\x90\xeb\xb5\xe2\x1ad\x05\xfd\xecBg[\xaa\xe2\xba\xdb9nM\x0c\x81\xd0\x9c:bD\x9b\xbf\x90\x1d\x07\xe3\xa9+\x0c\x9a\xb2\xacw\xbc\x12\x99\xff\xcd\xc38\xa6\xe2\xf6\xc1\x1cc\x12\xb7\xcf\x0bq\xfbF\x85\xb8}\x83\x0f\x88\xdb\x17x~\x97\xb8}]b\x02\x0c\x9b\xdf+\xae\xd0\xbb\xb23)\x06\x0f\x9b Y\x8f\xe2p[:\xcb\xa0DD<\x9cc-\"\x1eZ\xf9\xcc\xc6\x9d\xa6\xcc\x11\xf1\xf0\x1cV$\xe2!\x11\x0f\xffH\xc4\xc3\xa2Xn*Y\xef\xdd\xa7\xa3\\\xc3\xa2@\xcaB\xe7X\xc0\xa2\x00\xfb\x95{\xb7O*\xf4\xef\xdf\xf3\xc5\xb8\xa3L\xc2n\xc1\xbb\xf2%<7\xcc\x8b%\x80.?7\xaf\xd0\xb8\xc6U\xc9\n\x9f\\\xb9\x0e\x93\xaa\xa6\x83\x9bS%\x03\xbf\x06]\xdep\xb1\xd9F\x83\x92 \xe5s\xd0\xc9\xb2\xe2\x99\xac\xf2h8u:\xb4\x0b\xd3\xe1]H\xb3\x82\x95\x14[X\x99\xaa\xe9V\x92l\xe2%\xa1\xf6[qXxB\xbdX\x99\x95\x93\xe9\x95\xfcP\\\x94\xef\xaf\x98\x1b\xef\x9c\xb8<\x82\xcd\xa3\x9d\x00E\x18=h\xc52\xfaV\xdc\x0c\xc9\x9dp\xa9\x19\xcb\xd72r\xa7O+xu\x12\xc2\x17\x0b\xf8NV \xdc5 \xf6\x10\xf2kY\xd4;\x0ej_\x08\xadS\x0c\x02\xb0\x97\x85\xc8\x0e\x17V\xb1\x0b\xa4F\xf1\xf3V\\j\xed\xe5'\xce\x1b\xc3\xd3\xd3-_5r\x0dJ_\nQ~\xe49\x9e\xb8\x1b\xa6\xbaX\xc9\xea]]\xe0\x85\xa3w\xa7\x91\xf8\x1c\xb9v\x82w4)\xc0\xf3\xa5U\xc9\xf6j+u\xba-X\xe6\x8a(+\xd7Vt\xc5\xb2\x8fS\x84%+x\x95\x19\xe0\x95I\xae\x11\xb8*\x1ei/ \xea\x86-\xaa\xd7^R\xf2\xd36\xa9N\xc5y\xb5>blk?A\x9bi\x1f\xc0Z\x8a\x1e6\xb5z\x9f3\x1d\xa0r\xa4W\xe7O\xd2\xfb\xc3\x96d\xbd\x92z\x8bTb3+!\xf2pY\xae%\xb02\x9c\xcf\xde\xdbop.\xb0\x1c\x96\xb0\xa14\xcf\xb6x\xddcq\xb0\xee\xdc\xbe`\x99Eo^\x99\x01\xc2\xa7i\xffeu\x06\x95\xad+\xb9C{\x1a3=n=\xabp\xf2;\x99\xd7\x05\xbf\x80\x1b\x0eY\xc5\xcd\x8a@\xf1=\xabpi\x80\xf79Z2\xb2\x84\x8f\x9c\xefA\xd6\xe1&\xc3VJ\xe3\x85\x92\xb2T\x90\x19\x17\x10M\x15|\xbf\xe2,\xc7u\xc1\xc3Af\xfb\xa8lOm\x8c\xd5\x88\x8bnQ\x9a5\x9cq1\x83\xef57\x89\xdd\xb0\x83\xbb\x94Jr{\x0f\\.*\x9ei\\f\x14h\x01\xe9\x18\x11!]\x85\xdc\x88\xec\x91\xbb\x13\x95\x15J\xc2\x96\x17\xfb\x88\xb9k\x05J\xe4\\i\xbe\x07\x06\x15_\xb3\xcct\xf2\xce\x9d\x80 vx\x87Uv\xc8\x8a@\x93n\xfa\xe2\xd2\xf6\xc5[\xf8eq:\xf2c\xf8\xf6\xf0\xbf\xb1\xa3\x06\xbbVC\n\x8e\xbe7\x85\x06\x00\xbc\xf5e\xba\xc2\"A\xce5\xafv\x0d\x13\xd8\xd4\xd5\x8d\xf9O\x89\xcb!\xb4@PW\xa7)\x89\xd2\xfa\xb0\xdf\x87\xb6:\xa4\x0c\x0e\xb8n\x88\xa0\x8e\xf0\xf4\xd9S\xd8\xb1\xfd\x9e\xe7n\x82\xbf|u\x01\x0c\n\xa1\xc63)\xd7v\x1c\x8b\xd0m\x8c\xfbk\xaf)d#\x03\xf9\xbb-W\x16\xe9\xc1\xd25wL\x8e7\x17\xbb\x1b\xa3\xd3\x91@\x07\xe0N\xbc&\x13\x07\xe5^\x1f\x94k\x9bNo\x0b\x85l<\xf6QU\x0e{d\x99\x19\xb0,\xd3x<\xcd\x1e#\xf7\xb8\xac\xcd7\x84\x0b\x0c\x9e\x12.\xf0\x19p\x81[\xc6+\xa6/4\xf0a\x88\xe1\x9d\x06>x\x11\xbb\xd6\xa0\xff\xad{\xe5\xee\x062:\xa6\xe8\xca\x97hj\x9f;xA\x9b\"iSd\x84\x12H\x9b\"{2\xed\x0e\xd2\xa6H\xda\x14\xd9\x15\xda\x14I\x9b\"\x03B\x9b\"iS\xe4\xb1\xd0\xa6\xc8\xc4\xa4iSdOhS$m\x8al\x856\xac\xfc\xfe6\xac\xd0\xa6\xc8\x11\xa1M\x91\xb4)\x926E\xd2\x1cc\x85\xe6\x98[\xce1\xb4)\xf2\xf7\xb0)\x92\x10\xc3\xc1SB\x0c\xef bh\xc6]\x0b\x1bZ-Q\xd4\xf0\xafBo\xbfw\x01\xf0!\xeb\xd9-\xa1\x11F\xe8@\x89N\xd78\x92\xd8\xe8so\xdd]0q\xdcX]\xf9\x12\x0d\x12\xb3\x15oO\xb7\x86\x03\xd2H\xd8\x90\xd6\x80!\xd5\x9b\x9cE\xc8\x86\xb4\xd2Bb\x89\x8d\xa4\x92\xb3!\xbd\xdc3H\xda\x90\xe4nzI kC\xba\x85\xac\xa4\xda\xc9JJ\xebh%\xd9^^\x12[L+sI\xdcpJ\xaeR\x9c\xa3cI#t'*C\xd2\xf4\xedI\xdd\x00i\xc4\xeeDU\xe3d\xdd\x99\xe4n83\xc1\x1b\xe6\x91\xbc\xe14\xa27\xfc\x96\x0d)\x8d\xf4\x9d\xa8\xce\xb2\x12nA\xfc\x86\x19\xe4\xefDuc[\nf\x13\xc0!\x91\x04\x9e\xa8\xaa\xd3\x86f\x12\xc1afU\x9f\x81\x10\x0e\xa7\x91\xc2\x8d\x9c\x95\x18\x0e'\x91\xc3\xe1\xac\x04q8\x81$\x0e\xa7\x11\xc5\xe3y\xa8x2Y\x1c\xceL\x18\x87SH\xe3p.\xe28\xcc \x8fC\xfa@\x9aF\xdf\x88\x12\xc4\x01\xd2\xc9\xe4\x90\x14\xa2\x813\x93\xcaa&\xb1\x1cf\x0c6'\x12\xcc\x83\xfa\n\xa1t\n\xc9\x1c\xceK4\x87yds8/\xe1\x1c\xe6\x90\xce\x01\xd2\x89\xe7] ,=\xad$\xf8\xf7)^\xfdo\xb9\xc6\xbb\x0do\x15\x12\xb9\xab\xd0\xe4:\xce_\x85\x19=\x06N\xe2\xb1F\xd5\xc9j\x1e\x97\x15N\xe4\xb3F\x15\xeey\x95\xcei\x853\xf2Z\xe1Tn+\x9c\xc2o\x8dk\xdb0Q\xce\xe1\xb8\xc2\x99y\xae\x90\xc8u\x85T\xbe+$\xcfXsx\xaf\x89\x8a\xf28\xf7\x15\xce\xc8\x7f\x85\xb4A\x10\x12\x07B\x98\xc7\x85\x85d+\xc3y8\xb1p2/\x16\xd2\x07rHr\xb0`\x0eG\x16Ry\xb2\x90\xca\x95\x85D\xbe,\xc0\\\xce,\xcc\x9c\x14\xe0\xdc\xdcY\x80T\xfe,\x9c\x93C\x0bi\x18\xf3\xacf\x94\xde9\xce\xc8\xa9\x85y\xbcZ\x804n-\xcc+\xfa\xdc&4\x83g;\xa9\xabi\x06s\xb9\xb6\xdd\x8f\x93\xf8\xb6\x93\xda\xfa\xed\xdev\x87\xa9\x99\x15f\xf1n\x01\x12\xb9\xb70\xaf\x02S\x89N^\xe6V\xf8\xf9\xb8\xb8p\n\x1f\x17\xe6rr'\xb5\xf5jx\x0e/\x17\xce\xcb\xcd\x854~.\xcc\xac\xb3\xf9<\xdd\xa8\xbaz/\xcb\xb9\\]\x98\xc9\xd7\x8d*j\xb8\xbc38\xbb\x90\xc6\xdb\x85)\xee.$\x83] @W\xa2\xff\x97\xee\x01&\xce\x83\xb3F\x93\x14\xce\x15\xccQ9\xa7\xe9\x9e\x93\x7f\x05\x89\x1c,8\x85\x8755zc0?\x91\x8b\x05\xb7\xe0cA\xb2\xefr\n\xf77\xde\x9a\xfd\xc2+^\xb6S9\xc0\x90\xc4\x03\x86\xf4\x968g\x9a<\x0b'\x18f\xf2\x82a~YRCX\x13m\xe3\x8c\x878\xaan\xcb\xd4\x1c\x1e1Lp\x89a\x0e\x9f\x18h\xde\x0bH\xb2J\x9a\xf7\xee\xc4\xbc\x97\xceGNU3\xd1\xcbR\xeb\xfd\xac\xdcdH\xe4'\xc399\xca0\x8f\xa7\x0cp\x1aW\xb9\xf3u\x82i\x87dP\\\xfely\xb1\xe7\x95_\x05\xf5\x01D\x8b\xa6\x85\x98\nB\x07b\x00L)\x99 d\xfe\xa0\xa9\x88[M\xdc\xea;\xcf\xad\xees\x0f\x97\xab\xc3\xb2\xcf\xa0}\xf2k\xff\xdf\xff\xb0)\x8c\xf1\xae;\xd7(\xf4h\x83.\xd2m9@\xaf\x1a.\xf6\x08\x93P \x87c5\x8a\x06\xfc9;.\xb0.c\x1b._\xb9\xb7{\xa4\xedH\x0e\xdc\xebw\x97\xbd\x8d\xa6\x0eq\xf8\xbeDk\x9f\"\xcc\xceh\xaf\x11\xc7\xda5A\xac\xc3Y)\xd1\xf0:xJ\xc3\xebg\x18^c\x97\xe0\xf4\xc7\xc8\x8eNQ>\x83=\xd3\xdb\xceO\xed\x95\x00\xba\xaa\xbbq\x82@\xb6F{\xceIc\xbd\xcd\xdf\xea\x80\xc3zt(\xc7\x91\xf2\xdbCg\xb4v\xce\xdf\xea\xe0\xa8 \xeen q\x1d\x1a\x80\x1b\x15\xf7|\xb1\xef\xf2p\x1bj\xf6\x81\x16\x1co\xbf\xa1\x81r\xb2\xdd%\x0c\x92\xa72\x90\xa6\xb9G6w1\xd6Q\x8a\xb3}\n\xd3(|b\xde\x0c\x8e\xd1)\xec\xa2\xc8iy\x89\xbc\xa2\x99\x8c\xa2N\x86\x02\nS\xb9D\xb3YD\xd1S\xf2\x92\xf9C\xe7c\x0eMs\x86\x12\xd8BS\x0b\xfe9\x0c\xa1\x84\xcd\xc7\x11n\xd0yXA\x93q\xb1\xa9\x89s\x06\x07h\xcav\x90\xcc\xfb\x19\xf0z\"\xfa\x92\x18?\x93\xc3$$\xb0|\x12\xf9= \xcc\x9e\x04N\xcf4\x9bg\x0e\x8f'm\x98\x85\x13\xb8;\xd8'#\xfa&X;g\xe2\xebLDj\x93\xaa?\xa5\xf1\xce\xe3\xe5x\xdeMD\xe1$#g\x9a\x8b\x93T\xb8\xf4\x060\x83y\x93r\xc2\xdd<\xce\xcd,\xb6M\n\x17#\x99g\x93\xca\xb0I\xe0\xd6$UH:P\x98^u\xe7\xe2\xd0\xccd\xcf\xcc\xe2\xcdL2\xfe\xf4\\\xc6\xcc\xd9\xb82\x93,\x99\xb4\x9a\x98\xcf\x8c\x89\x9d`7\x8b\x133\x87\x0d3yz]*\x0ff\x92\x01\x13\xc1\x00c\x81\x00\x98\xc2\xfd&=\x9b\x14\xdffr\xeeH\xec\xcf\xd3\xc8^\x82\x9a\xb4\x066\x1b\xc7K@\xeafct\xd1!$\x11\x9d;\x0d\x97\x9b\x9a\xa7O\xe1\xa0DJ\x13]!\x9e\xc6;\x99b\x9cL\xb6\x94\xb4\xc9\xe3\x0c\xfc\x92tfIr\x9e\xa7\x03\x11\xc1\x9a=\x1b\x83d\x0ewd\x925\x92\xc0\x17\xf9-\x8c3\x9f\x17\x129[.\x99\x11\x1299+\x8d\x05B3@Oh\x068\xc3\x0c\x90\xce\xc6H\x08\xd0\x84Z\xf8tM\x9d\x91{1\xcd\xba8\x13\xdf\"\x99iq\x1b\x8e\x85\xab?k\x1f\xbb\xb7GV6\x1c\x8f\x060\x9d\xf6Z\xe4\x9d\xcd\xd6\x8d\n\xc2\xe5\x06O \x97\xfb\x8dq\xb9\x1e\x16\xd7k{\xdf\xbb\xc6\xeaN\x8eqa\xdb\xce\xdbw\x0f\xb9s\x9f\x05\xf1\xba\xf6~,<{\xa5\xdegff\xd9\xd8Y\xc5\xe2\x12\xbd}\xcd\xc7p\xdd\x9d\xbf%+g\x9a\xdd\x8d\x9e\xf0\xb9\xc9\x10\xa7#})X_\n\xda\x972kZ9'\xe27\x0b\xf3;;\xea\x97\x8c\xfb\xcdF\xfe\x82zN:G\xe0\xbc\xe8\xdf\x0c\xfc\xef\x9c\x08`\n\x06\x98\x84\x02N;\x99gG\x02\xe9\x8e\xac\x04\\0\xaa\xe2\xb4\xb3\x00\x12\x06WH@\x07\x93\xf1\xc1$\x840 #LA \xe7\xe1\x84\xe9\x034\x9c\x80\x15F\x95\xa5\xed\xf1?\x13^x\xae5\x7fj\xe3\x9e\x87\x1bFU\xcd\xd8\xcb?\x8d\x1d&\x17sN\xb383\x828\x17C<\x01E\x9c0\xf8\xbc\xfd\xfa\xa9Hb\x12\x96\x98\\Ai!a+s*\xf3\\\x98\xe2lT\xf1\xdc\xb8\xe2 \xc8\xe2\x19\xb1\xc5\x04t1\xbd^\xce\x8b0\xce\xc4\x18\xcf\x8c2\xa6\xe3\x8c H#\xdd\x91\x15\x90$U\xa9\xcdov\xf4y2\xf3\x7f\xb8\xfbK\xce\x8cQ\xd2\x1dY\x8d\xa4#\x96\xb3\xf2\x9e\x12V\x89\xd4\xf7\xd9\x90\xcby\xd8e\x02z\x99\x84_\xfe\x96\xa6:+\x8e9\x03\xc9\xa4;\xb2\"/\xd2\x1c\xf3\xfb\x9bc\xce\x8a\x82\xd2\x1dY\x93\x88\xe8Y0\xd1\xf7S\x08\x8b\x97=\xdb\xb8\x0e0\x02^X]W\xcd+M?j\xbf\x02w\xe8\x7f\x03\xad\x1ck\x89\x0dD\xf1\x01\xa8\xe4\x9f\xf4\xf2#\x0f\x9cm>9P\x8c r}\xe9\xb5\xb8\xbf\x07\xe9B.\x17~\x121\x7fji\x16%{\xa6\\\\\xe2\x8am\xf8\x1b\xfeK\xcd\x95^\xd8\xe7\x01e\x9e\xec\xceQ\xad1$\x87\x9dT\x1a\xf8z-2\x81\xcdi\x01\x97\xdaO\xc9\xc0w{}\x00\x11\xba}Bc\xac\xd8\xf4\xc8R\xc2\xce\xac\x9f+\xae\xeaB\xab\xb1\x0e\x8f\x8e\xc1-\x8dy\x0bj\x91\xf5K\x8c\x15\xf1\x8fv2vY\x06v\xcdD\x81W\x04\x04\xcb\xdb5tfF\xd8%*\x0b\x0d\x8d7L\x81\xe2\xfa\x02\x84V\x16\xe1\xc5\xf8Ci\x1br\x0e\xd2\xd8\xefF\x8c4\xdb\xe9\xd1\xc8f\xc5\xb6z[*[_+\x9e\xe7\xf6V\x82\xcd\x9b\xab\x97M\xc7\xf0\x10\xbb\x8b\xef\x8fU\xcf\xf8\x80\xd0\x92\x1aL\x87\xael\xe1\xbd6\xd4\xf3\xdd\x84:\xf3\x0e\xd43\xdc~\x9av\xef\xe9\xe4P\x16\xa3\xe1N\xdcr\x9av\xbf\xe9T0\xfc|w\x9a\xa6\xdff:\xdd\xe9O\xbc\xc1\x14o*\x1dQ7yw\xe9i\xb7\x96\xba\xfd\x05#\xfa\xa6\xef+=\xed\xa6\xd2\xf0V\x89\xa9;Ju\xe2\xed\xa4\x14\x02\x1f<\xa5\x10\xf8o\x1c\x02\xbf\xbb\xa7\x83\x162\xfbh\xe6\xc8\xa5G\xc6\x9d\x8a\xb1pEgX\xfb\xc1}\xe6\x89\xa6\xed.D\xaf\xb0\x81\xda\x1d\x95\xc1\x0c5\xd7\xac\x10y\x17\xc0\xed\x1c\x8c\xd8\xfc\xd6\x19%ZO\xb1\x17\xe68J\xdc\xbdtg\x83\x1c!#w\xe5\x16\xdd(\xd0Rc\xd3\xe4;\xe3\xcc\x0ej\xa8V\xbcR\x08\x08 [\xdb\xd2P\xd6\xe8\xba\xdb`\\p\xe3;7\xde\xb5\xdbJ\xd5\xd6-\x8d\xba\xfdg4\xea~\x86Q\xf7\xa4A\xcf.G\x96Z.;\x1b\x04;\x9c\xc1\xb1\xc1\xefG\xfc\xe6\x9d|\xd5|\xf1\x12;\x88\x1f\xf7:\xac-\xf4\xaa\xa4\xdb\x01\xb4\x1a\xdbX\xd8\x1b\xce\x02\x9a\xdd\xabwvP\x0bp,\xbfD\xc3\x8c\xb2('\xdbU\x9c99\xf1\xf9\xb4\xdf?\x9b'9\xc1\x86<\x89\x07\xe9\xd8\x8e\xa3\nc\x0c\xc8\xf9\xdcG7\xeb\xbc\x1c\x90\x18\x0f\x16\x15\x1a\xed\x0d4W\xd0\\q$we\xae@\xb7>2/\\\xe1\xf3f\x1a\xe8x\xafv\x96\xb1\xeb\x82\x863\xd8\x1b\xf9/\x9b\x97\xad\x16\xf7\xce\x9d\x1d\xf2\xbb\xb6\xe8J\xb4\xad\xc4[\n\x8e\x06v+\xc1R\xe4\xc6\x1akq\xf2\x01vS\x81\xa1\xf1\xc4\x00\xcf\x05`\x1e+\xd0\xb8S\xba\x13\xc0\x08(\xf3,R]\x89\xcd\x86\xdb\x811\x14\x9c{\x98\xb3\xc3\x05\xdcp\xfe\xf1\x02\xb8\xce\x16\x8fF\xde\xb3\xb8%\x86G\x85,\x97k\x1e=z\x90\x8ecs\x922\x01\xc3\xd9'a8u\"\x0ejK\xdc\x8e0\x7fB\x86\x84\x8eq\xdc\xf6<\xb6h\xfel\x12\xd2\xd2\x87\xef\x19\x94\xfc&\xa6,T\x02\xcbwAfL\xb6e\xd5\xc6jeE\x01,\xcf+\xae\x14W\x969l)e\xcdp\x1aP\xe7\xc6X\x96!\xf5&\x94\xa8\xac:\xda\x1d:X\x97\x157\x0d+\xc3\xcd\x17\xa6T\xb2Z\xdel\x85\xe6\x81\x80k\xfc\x83\xcf\xd6W#\x8d?\xad\xe9\xc7\xf3m\x99\x81\xf8\x97\\w\xac\x1493\x9eUAP\x16#\xc0\xb6JW\x87=S\xa6\x91\xda\xb41\xcc K\xd8\xf3j'\x94\x12\xb2D\x06\xe1\xf7\xb1\xb6\xe2\xdb\xe3\x02.m\x9d\xadk\xd3\xf2\x11F\xda!\xd4\xc9?\xed\x99\xdd\xee\xa1x\xd3:'\xf8\x0f\xe1\xcb5\x14\xdc\xf0\xa2\x88\\\xf6`\x96u\xac\xf0\x00\xbb#\xa6\xdb\xa87\x03U\xafr&\xcd/;V\xb2\x0d\xef\xb8\x02\x01\x85\x1d\x06j(M3@\xc9Z;,Vi\x89\xf0\xc0\xea\x00\xff\n93\xdd\xfe\x9aW%+3n\x86m\xe3\x01`[\x0f(\xdb\x8a\xcd\xd6t\xe8` _Xb\x9db;{\xc0\xd0\x05\x08\x0d\xfb\x8a_\xe3\xe8\xa5\xf6lg\x92\xde\xb2k\xdc\xfe\x82c\xc3\xda\xa4W\x047 \xd8\xae\x8c\x91\xa5\xb1\x91\xa9a\xd1\xd4\xfb[\x9c\xb5\x9b\xd6\x0f\x06i\xf9\x01\xce\xfd\xab\xd9\x95\xdf\xc0\x12\x93\xd5gZ\xb3\x94\x85\xeb+\xa1\xde\xa7\xb8;%\xc6\xefdz\xd8\x1eH\x80\xc3\xe0K\x89 Y\xea\xc2\x0f\xe2\x97Z\xe4B\x87\x887\x98\xe0\xa3\xf0\xac\x84\xfc8\x075\xb9\xf4*i\x8f\x85\xaad\xbd\xd9\x0eQ\x97\x8b\x18U\xa4\x89h\x03[\xafy\x16\xba\x01\x13\xbav\xc4\xbe!U\xb7\xf5\xfb\x8e\x05\x0f\xc5\x82/z\xaeU(e\x9f[\x8b\xd8\x87\xb1V\x8f\xf8t\x12C\xb7\xccX\x1d\xbb\xa8\xcd\xd5\xa3\xb1\xb6\xb7\x13\xe5\x12\x17\x19\xcb\xb5\xac\x96\xdd\\\xc5\x9a\xe1\xad\x88\\\xb7\xbf\x03c\xcae\x9aT\x91\xd6W\xce\xed,\x9d\xd3UJr\x94\xe6\xbbI\xcd\x8e<\\\xceme\x91\xab\x0e\xa4\xd3\x90F\x8e\xd6w\x8d\"\x8aa\x0c\x9eR\x0c\xe3\xae\xc40\x1c4\xb3\xe4J?\xf9U\xde\x94\xbc\x8a\x90\x92;\x83\xc2\x1b\xfb\xddk\xa5[Zr \\i\xb13\x8b\x00\xc7\xaa\xf3g\xe8\xad+\xb9\x83R\xde@]jQ \xeb\xe0\xe8,(;\xf3v\xbd9\x1c\x15\xec\x89y\x95?;\xcc\x1d.\x8c\xa99\x97\x14\xfd\x1a\xe4\x96\xcbv\xff\"\x1e\x9c\xd3*o\xf7\xf4\xea-?4\x04\x8f\xb5\xb0.b\xf7\xaa\xe6>X\xd5\x0b\xca\xb4\x85vO\xefl8\x86\"\xf0\x908\xa3\x9dw>;i6\xfb\xcd#\xf0\xa3\xa6x\xed\xfann\xcf\x95\xf1]\xd7\xf2\x10]@\xcb\x01\xba90\xed{\xe2\x18\x07\xd1u\xcc\xb1\\\xe3H\xd02s\xec\xf9V+\xaeo\xf0\xa4\x0f\xc7VnN0\xe5\xe6\xff{\x99\xb5\x84\x08\x9aJ\x07Oi*\xfd\x0cSi\x8c\xb0\x83\x93d\xb0\xf9\xb9) {\x8dP\xfd\xc3\xc4q\x16rS\x1boz\xdb\x90\x1cq\x06\x16\x90\xcf*\x1e\xf3*z\xba{\xb9\xc5\xb5\xe7\xe5+\xe5w\xc4!\x89\xd5e\xd0f\xcb\xe7\x13\xcf\xfbk\xb5\x9c\xb2\x95j\xd8\xaaF\xdaS\xb0\xb2\x82\xfb12Y\x14\x1cCH\xdf\xb9W\xf0t\xac#K\xf0\xd2\x1dJ\x142\xc5`\x8f\xf1\xfb\xfd\x9eWv\x1c\xb2\x1b9q\xd3\xe6\xc0\"\xbd/~\x907\xbcjw}\xfa\xa1\xccn\x82\xb8\xa5\xe9\x8e,\xd2\x19\x10n\xc7\xf1\xf2g\xc2/\xa7\x0e\x94\x7f\xe3\x9c<3n\x9a\xb5M\xeec\x08-\x8e[J\x8dX\xae\xcc\xb0\xf0\xa3\x84\x06\x7fB\n\x9d.\xdf\x97\xa9A\x92N\x97o\x85N\x97\xa7\xd3\xe5\xe9t\xf9\xae\xd0\xe9\xf2t\xba\xfc\xc8Kt\xba<\x9d.\x1fz\x95N\x97\xa7\xd3\xe5\xc7dNe\xd2\xe9\xf2t\xba\xfc@\xe8ty:\xf9wV<}2\xf3\x7f\xb8\x93\x7f\xe9t\xf9\x11\xa1\xd3\xe5\xe9ty:]\x9e\xe6\x18+4\xc7\xdcr\x8e\xa1\xd3\xe5\x7f\x87\xa7\xcb\xbb;}o\x90C\xd9\x1b\xe4\x90\xcdh\x81\x95\xc1\xc7t\xd0|\x00\xe0k\x85\x0e\x9a\x87\xb4\x19zjX\xa1\x83\xe6\xe9\xa0\xf9\xae\xd0A\xf3D\xda\xb9+\xa4\x1d:h~\x1e\xb1\x84\x0e\x9a\xff\x8c\xc6\x9d>\"\x9d\x0e\x9a?\x87\x15\xe9\xa0y:h\xfe\x0ft\xd0\xfc\x80\xcb\xb7\xdc\xf3j\xd9 \xf3Ll\xe8\xe83\xf3\xaex\xe5q\xe9T\xde_\xa3\xa9\xe1\xff5\xbf\xac\x0ev\x91\xeb~\x880\x02}\xba\xee\xcd;\xcb\x0c\x1c\xe5Mv\xe5K8eD\x12l\x85H\x82D\x12$\x92`W\x88$H$\xc1\x91\x97\x88$H$\xc1\xd0\xabD\x12$\x92\xe0\x98\xcc\xa9L\" \x12Ip D\x12$\x02\x07\x118nE\xe0 \x92\xe0\x88\x10I\x90H\x82D\x12\xa49\xc6\n\xcd1\xb7\x9cc\x88$\xf8;$ z8\xa5\x07\xd3\xec\x98\xce\xb6^E9\xba\xd2!\xa2 \x11\x05a\x8e1\x89(\xe8\x85\x88\x82\xa3BD\xc1\xc1\x07D\x14\x0c<\xbfKD\xc1.O\x01\x86\xcd\xef;Qh^Yl1<\xcf6\xf7\xbc\xa2\xae\xdb\xd2d\x06\x85#B\xe3\x1ck\x11\xa1\xd1\xcag6\xee4\x15\x8f\x08\x8d\xe7\xb0\"\x11\x1a\x89\xd0\xf8\xcfJh4\xeb\xdaz\xdf\x90\x19\xdd\xb5-K\xbb\xdc\xb5\xf1\x87\xe9\x03\xaa\xed)\x85\xc0\xdc*\xb9\x1b\xac\xc8X\xf9\x00\x91\xbf\x1b\xa1\xb7y\xc5n|\xd6zl\xc4\x176\xd9\x1f\xf0s\xbak\xb1/S\xbe\x1e\x9d\xf4<\x15\xf0\xfb\xfc'=\xd3\nj\xf0\x94VP\xbf\xf1\njx>\xf2-O3\xbe\xed\xcc\xe1c\xaa\xa9\x93\x87\xf27\x86\xf99\xa4\xe2\x99\xacr\xe5G\x8avu\xd7g\x1e\x85\xa7\x91\x01i\xee\xce\xce$H\xf4\xb8\x1bm\xfe\xf2\xd5\x19\xdak\x14GL\x990\x00s\x02}\xaa\xbb\xc8\xfb\xfc\xc0\xe0\x97fj\xb0\xbc\xf8\x86b$\x14\xe4<\x139\xcf\x91Oc\x7f\xf4W\x99\x85 .\xa2\xcc*\x9cC\x8c\x07\xb7:\xc0SS\xc4p\xc2\xc6k\xf2\xbd\x9e\xa2\xa7\xf5/s\x1d\xcf\x9e\xdd-\xb3tw\xd4TK7\xd5\xdcb\xccK-\xae\xbd\x17\n\xde\xb8\x94\x9b[@\xfc\xdc\xd7\xbd\x14\xe4\xc6E\xbb\x83\xcal\xfe-\xc4\xe7n\xcf\x8a\xcd\xf6\xba\x7f\xf3\\w\x1cZ4{~\\\xf8\xc8N\xa0\xab0\xcb\xd9\xc7@M\xeb\xb6A\xec\x083l\xcb\xca\x8d\xdbG\xa4\xb8Y\x11h\x0e;\xb5\x19\xab\x9c\x14C^\xe1.\xb5\x1f\x9c\x9f\xd4l%\xb3{\x14J\x811X\xbb\x93\x0dZb\x0fY\x9c\x1d3y\xa0\x86Q\x13\xbb\xdc\xb1\xdb\xf4\xce\x10A\xf9]\x1c\xa4Ha\x94\x11\xa10\xca\x91P\x18\x85\xc2(\x14FqBa\x94\xa1P\x18\x05\x85\xc2(\x14F\xa10\x8a\x93\x14CR\x18\x85\xc2(\x8d\x1a\n\xa3\x0c\x9eR\x18\x85\xc2(I\xda\x07\x87&\xdcZ\xf5\xb9#4\xa5\xd4\xcbfI\xb3\x94eq\x98\x0e\xd7t\x16\x99'\xb0]\x80\x7f\xca\x8a:\xb7\x07-\xe3\xc1\xf9^\x99w\xde\x9b\xfc\xb8'\xa9a\x9d\x9f\xa4~\xef?5\xabT\xf79Ex\xa6\x87\x03\x8a\xf0t\x85\"<\x14\xe1\xa1\x08\x0fEx(\xc2s,I\xaaR\xdb$Ex(\xc2\xd3\x95\xd4\xe2R\x84\x87\"\xc22\x88\xac\x98\xd1\xa9l\x16y\xe80u\x07\xb9\x15?\xc8\xee\xe51Nk8\x92r\xc5\x94\xee\\\x9cF1\x93\xe9\x0eF1\x93\xaeP\xcc\x84b&\x143\xa1\x98 \xc5L\x8e%IUj\x9b\xa4\x98 \xc5L\xba\x92Z\\\x8a\x99P\xcc\xc4\n\xc5L:B1\x93\xf1\x0f(f\x12x\xfe\x87\x88\x99\x0c\x03\x07p\x8e\xa0 D<\xf4s\x05T\xe6n9\xc21\xc4\x07UV\x07?\x0d^\xb4\x16\xb8\xe8\x91x\xa6#(\xb4\xb9\xa8/S}\x8e\xc2(]\xa10\n\x85Q(\x8cBa\x14\n\xa3\x1cK\x92\xaa\xd46Ia\x14\n\xa3t%\xb5\xb8\x14F\xa10\x8a\x15\n\xa3t\x84\xc2(\xe3\x1fP\x18%\xf0\x9c\xc2(\xa3\xdao\x19F\xb9\xc3;\x8f\x9a\x08\xcd\x99\xb6\x1c\x15\xe7 \xc4\xc0\xd1n\xa4\x13v!\xf9\xc8\x0f\xed?:y\xc4\xa0 PW(\x08DA \n\x02Q\x10\x88\x82@\xc7\x92\xa4*\xb5MR\x10\x88\x82@]I-.\x05\x81(\x08d\x85\x82@\x1d\xa1 \xd0\xf8\x07\x14\x04\n<\xa7 \xd0\xa8\xf6\x84h\x0c|\x0e.\x8d\x1d\xa6\xd8\xaa\xe0K\x1c\x93\xa6\xe32>\x18\xd3~\xe9F3\xeb\xc8\x18\x87\xa0\x946\x1c\x93W\xec\xa6\x84\x03\xf7mi,\x9e\xf2\xbeQ\x83\x0e\xc5=o\x98;\x1a@ \xb8\xe8_\xa2\xb7E\x9d\xf0\xc9\xce\x12w\xbc'>O\x99\xebg\xba\xd9\x13\xce\xf4In\xb4s\x96G\x15\xc6\x1c\xe8t\xd7\x99\xe6\xb0\xc1S\x9a\xc3~\xdfs\xd8-'\x12\x9e/W|-+\x8e\xa1\xa8\xb9\x93\xc9\xf0\x18\xb1~4\xdf\xa8M\xda\xde\xfa\xde)\xfb\x16?\xa1-\xae=\x99j\xff\x14\x96\xef\n\x85\xe5),Oay\n\xcbSX\xfeX\x92T\xa5\xb6\xc9\xd9\xeb\x85\xc9\xccSX\x9e\xc2\xf2\x14\x96O2$\x85\xe5),\xdf\xa8\xa1\x90\xc6\xe0)\x854~\xdf!\x8d\xdfoX^\x94\x9b\xd3\xa2\xf2\xa6cg\x9dpz8J\"\xca\x0d\xc5\xdd\xfb2\xd5\x9d(\xee>\xe5'S\xdc\xdd\nMR\xadL\xf5\xaa?\xf8$5{\xa60\xff\\\x0e\xd6]O~\xc5_E\x9e0Q\xa0\x9b\xe9\xbc\xef\xd5\x01\x84\x8f\xf1\xf4\xa6\n\xb3$\xb0+,\xbf\xc0\xba\xe7\x8bvG\xe7\x89\x81E\x12\xfb\x03\x0d'\x83\xa74\x9c\xfc\xc6\xc3\x89\xeb\xb8\x1de\xb7\x1cP \x04\xc7\x9c4\xd2\xf0|\xb9:,E\xfeYF\x18\x9e\x7f{\xb8|u\xcf\x97\xf1\x8e\x8e,\xa68\xa1\xb6\x1dh\xa6\xf1F\x1aB\xda&\x1bW\x02\xca\x96\xe2(\x9e\x8e\xb0\x9d\x0b_\x9b\x85\xae\xc5\xb1\xb5\x08\xb26i\xcf4T\xed<\x98\xda\x19\x10\xb58\x9e6\xaf\xb4\xc1\xa6qV$- G\x8b\xa0hq\x0cm\xb2\xc4i\xf8Y\x9a]\xe6cg\xce@\x01}\xa9\xc8\xd9|\xdc\xcc\x1b4\xa00 5;\x153\x8b f1g\x00\xa6\xd0\xb2 \xa7\x00&\xc7\\+\x938\xd9d\x93\x82\xc9\x95<\xa4\xa9Iku\xe7^\xd5\xc3\xa9+\xfb\xa0\xb6D\xfc+}\x85\xdf\x954#\x9d\x19\xf9\x9a\xc6\xbdf\xa1^\x93m!\xad\x90g\xc4\xbbf\xa1]g\xc4\xba\xd2\x91\xaet\x9ck\xdax\xe7\xc4\xb8R\x10\xae3\xe3[)\xe8\xd6\x19\xb1\xadid\xebd\\\x0b1\xac\x11\x85\x93\xa8\x16aZ\xe3\x1f\xd0\xfa>\xf0\x9c\xd6\xf7s\xd6\xf7\x1d\xa7(\xb6\xaa\xd7R\xb3\xc2\x0fe{^Y\xef\xa3w\xed\xef\x9e)\x0d\x1bq\xcdK\xe8x\xdb#\xcb\xfe\xdf\xc5\xb9\xa9!7o\xb4Nh\xa0\x19<\xa5\x81\xe67\x1eh\xce~\x08\xd0\x1d\xbbU\xcb\xba\\\xcb\x15+X\x99\xf1\xa9\xf1\n\xd6uQ\x80{\xd9\x07V\xac\n\xf7AoX\xfa\x11\x9f|k_\xbf\xe7\x8bsG\x07&\x82\xc4!\xc9\xf3?\xf7\xe2\xf9\xa4\x853A\xe2Vh\xeaie\xaaW\xdd\xc5\xa9\xe7\xd4\xf1\xda9\x99\xdd\xae\x1e\x19\xb5\x9d{9s\xdc\xb6N\xe5\x0bL\xc2\xbdE\x83\xf7t3\xa3\xc1\x9b\x06\xefA\xf6i\xf0\xbeu\xaf\xfa\xa7\x18\xbcK\xfe\xc9\x1e\xe6\xb9\x14\xf9\xd4\xa0\xad\xc0\xbcm\xc3|\x0d\x9a\xdf\x1b\xa5\x7f\xe2\x9f\xf0\xf8\xcc\xdf\x07\xd6\xdf\x14\xb9+Q\xbb\x07py\xea\xdb\x83\xa7\xd4\xb7\xefB\xdf\xc6 \x82\n\xf7\xea+|\x0eU\x87\xcdS\xefm\xe8A\xf9fy\x14\xd3\xab\xf7\xf63\xf7\xfc\xcev\xf0n\xe1\xbb\x12m\x18\xf1f\xb1\x96U\xc6\x1dq\x7f\xc9\x8aB\xde\x18\x7f\xd7\xe2q\xb1\x86tK0\x9c\x02\x904\xd8\xdc\xfd\xc1F\x1dJ\xbd\xe5ZdK\xfb`\xb9:x\xbfb\x0e\xa5\xb0Q\xe3\x87\xa3\xd5\x01\x8c\xf7\x7f\xcd\xfd\x0f\xe3,\xc3\xb7\xfe;;F}{\xb0\xff\xbd\xfb\x8eH\xdfng\x1d\xaf\xea2\xe7Uq\x10\xe5f\x19tw \xa5\x85\x9c\x8d\x8e\xf8\xbe\xc9\x11\xce%=zb\xf3\xa4S\xdd\x0f\x14\x08d\xa3\x85\xda\xf6Vt\x9aL\x88d`\x1b\x0e\"\xe2\xbd\xd6\x05?\xbe\x7f\xfb\x0e\xb6\xec\x9a[^U\x93\x83\"\xc0\xcb\xc3\xcf\x97\x91\xd5\xf4\xa4%\xd3\x88\x88\xd8\x98\x11:\xf3\xe6i3n\xc18d\x7f \xcb!\x93\xbb\x95_\x1f\xcbu@\xe1\x86\xedv\xa0\xb6\xac\xe2\xf0g\xe8`\xe8\xbaV\xf0g3|\x88\x9ciYyr\xc9\x17c\xe8i\xa1\x0b\x1ei?\xb5r\xe4\xc4\x0e\x13`0`\xa8\x0b\xcb^\xcc\xb0\x11\xb5mc\\a\xf3\x8diI\xa1\xf6\xd3\x90\xf2\x1c\xfb\xa5.\xbb\xbc<|:\xf2\xe59I\x9c\xc1\x962$q\xfaD\x1d\x83s\xd0\xde\x1b.g@\x1b\xd3\xa8d/E\xa9A\xae;V\xee\xb0\x0dO\xa1\xe6\xf4Fg\x93W\xcb$)7p-*];\xb8\xb9\xde\xc3\xcd\x96W\x1cJ~\xe3\xda\xb9\x18c\xca\x0c\x9a\xfc\xc8\x1b\xb2\x12\x1bQ\xb2\xc2iae\xde1\x85\xaa\xd7k\xf1i\x01/t\xcb\xec\x94\xebhSq\xb9\xf3\xfc\x97\xb1$\x1bF\x8c\xe5\xc7dY\xbd\xab\x0b\x9bG\xa4\xfc`o-\x94tD\xcbz\x9f#\xb9\xc6|&\xc7\xc82\xbf\xd4\xbc\x12\xbc\x02%r>\xca\x05\xd2[~@v\x15\xa2s\xc0\x14\xac+\xce\x0b\xfc\xab7cR\x0c\x8a\\\xc7\xdf\xd2u\xfc\x9d\x92d\x86\x0e\xac\x9a\xe9\xc1\x8e\xdcf3\xc3\x99\x05x\xc5\xf7\x15\xcf\xcc\xa0\xf0\xcc\xccsa\x8f\x16D\xa94g)n\xb0\xfa\xbd\xfa\xc1w\xa4{\xa5z\xd0\xb3\xba\xcaY\x8e\xce;\xc9\x93\x0ej\xb3d\xdf\x14_\xfa\x8c\xdet\x82?\x9dd\xd7T\x93\x9d\xe8U\x07\xf5\x8d\xbb\x1eV\xce\xe0pO\xb9\xdcI\xb6Is\xbb\xa7\x1d\xef\xf9\xaewP\xd1\xc8W1\xe7\xfbT\xf7{\xca\x01O2_\x9a\x13~n7\xfcdG<\xad/\x9c\xd7\x19Oq\xc7Or\xc8\xc3#FwF\x8d\xb9\xe4\xb7q\xca\xc7KQN\xbb\xe5\xe4\x98\x0f? \xc7<\xf0\x9c\x1c\xf3q\xc7|'J\xdd\xb8\xe5|/\xb3\xedr_\xc9k\xa1\x84,#p\xd6k\xf3\xe6U\xf3b\x83kYzGU\xf1R\x83Qmz:j\x85V\xab5\xf7(\xe85P{\xcf\x9b\xe2\x8e\xfa\xd1\xe3\xf6\xeaJ\xb4\xf1\x8c4\x9bV\xa6g\x97a\xea~B\x1c\xda\x7f\xcf\xab\xa3:\x18Q\xd7\xab\x15+\xf1)\x19\x1b\xd3\xa0\xc6\xde8c\xfb\xbcx\xe3\xa3!\x9c\xeb;,+\xeay2lQo\xae^:6\x10\x0d\xdd4t\xa7\xfa\x8d\x11\xa7\xfa\x05\xbc\x7f\xf3\xc3\x93\x8a+YW\x19\xc7\xa1\xd8.B\xeci\x0d\xc5\x01D\xceK-\xd6\x82\xbbM\xfa\xa6\xc9\x06\xc3\xfcv\x07\x9d\xe2\x95s\x8e\xc3>5\x92\xd32Y\xc0\xaa^\xafy\xe5+\xcdm\xf4\xb4e\x83]\xad4d\xb2\xd4\x0c\xb73\x06\x95\x15\x9c)\x1dNK\x96\x1c\xee?\xb9\x0f\xd9\x96U,\xd3\xbcZ ;\xaf`J\x83\xe2\x9b\x1d\xb7>\xae\xc9\xfa\xfb7?\x94\xdbN\xc4|\x91\xcc\xdf\xd7R\x985d\xb8a\x81\xcb \x0e\x1f\x15\xdear\xe1\x15\x18\xbdL\x8b\x95(\x84>\xe0y,\xd8\x8cV\x1cp\xc8\xab\xae#%\xc1\xb2\xd8-\xf5\xf6\xe0\x12\xd3g\x17\xf0\xf0\xbd\xe2p\xcd+\xe3\xc4\x18+\x99\xe6i\xc6,\xdb>Y\xc96\xb1\xd2\xaf*\xce\xecq\xa3V\xf1\xe2Q\xb8E\xfd$5\x7ff#\x89\xeb\xba\xccl\x0f3\xe5pc\x97s\x03\xcdZ\xf8\x9a\x89\x02\xaf\x16\x8b\x0c\x97\xa6=\xca\xf5Zd\x82\x15\x13s\xd9\xaa^C\xc5\xcdL\xc4\xed\xeet\xa1}\xa2M\xe4\xaa\xe9\x97AU+\xbe\x11ei\n{#\xf462\xb9\x1c\xf6|a\xdb?\xdb\x0b\xb5\xc8\xe4n\x01/\xf0\x90\xa0\x1f\xd9\x01\xbe\xfe\xea\xebo.L\xeeM\xdb\xc4\xdb\xd2\xe0F\xe4<2\xd4`\x1e1\x7fv4 '\xdd\xf0\xd6}\xfb/s\xa3\x7f_0\xdc\xba\xdb>7#]l\x8ax\x8b\xc3\x87\x02i\xf2iF\xafr8t\xc2Cw\x06\x04\xdf\xed\xf5\xc1\x8d7\x8f\xc23\xb3\xd8lu\xf4Ts,%\x12\xfb\xfb\xa5h\x8fIP|\xc7J-\xb2@D\xf43,\x8a\x87\x92\xea\xba\xfdh\xc6\xc8\x15\x07f\xa3\xb9\x1d\xaf\xeb\xc8\xb9r\x1e\x07[\xc9XX\xd4\x9a\xc05\x83Sc{\x1f^\x94\x87\x0f\xdeg\xc3\x1d\x0f\xacZ ]\x99\x91%\x9c\xc3QU~\xe2b\x85t\xfd\x01\xd8x\xd5\x9a)\x03g?\x9b\xc3U\xdfW\x1d\xf8\xa4\x8d\xab\x19h\x9aW\xbe7\x17b\x85\xd9v\x93\x9b\x02U\xef\xf7\xb2B\xb7b\xcf\xb2\x8fO\xea\xd2\xfc\xc78\x13\xb6]\x8cwk\xe7}\x84\xbd-\xb9\x86Z\xdb\xd1\xd6\x8fY\nlh^\xd8\x01\x0c6\xbc\xe4\x15F\x06\xed\xea\xcf\x9f\x066\xaa\xcf\xe4\xc7V\xe1xz\xaf?1\xd3\xf8\xe1\xe93\xb82\xf97\x1d\xd8\x15\x855F\x17%\xbc\xfc\xf3\x9f#s\xf7wR\xc2ZJx\x0e\x8b\xc5\xe2\x7f\x04_3\x99a\xe5!\xfc\x02+\x0f\x0b\x93\x8d\xef*\xb9{\xb8\x96\xf2Q\xf8\xd5\xc5\"<)\x8b5<4\xaa\xdecA\xde\xc9\x87\xffbt=\x82_#\x13KL\xdf?\xe2\xb6\xfbz\xc2v\xff\xc1\xae\xd9\xd9\x8c\x07\xcf\xd1a5\xa9\x9c\xc1BB=\xfcN\xcaEV0\xa5&\x0cd\xb3h>\xb2e\xec|\x18\xce\xc3?\x82O\x9e<1\xcd:-\x8fo\xd9\x8e\x1b\x7f\xee\x85\xcd\xed\x86\xebW6\xceqY*\xcd\xca\x8c?|tJ\xe6G\xf5\xc4\xca2\xfe\xc87\x83o&\x9a\xc1\xd5Aoe\x19i\x086\x93\xdfI\xf9p\xb1X\x84g\xb6\xa6\x11<\x8c\xbe\x83\x1d \x9b\xc8\xa9-\xc4(\xb9\xb4&\x7f\xf5\xfa\xed\xcb7\x97W\xef~~\xf3(4\xe1\x81K\xd6v\xbax\xc26\xe9\xb89\xff2a\xce\xefe\xd8\x92h\xcag\xcf\xe1_\xf6\xab\xc5wR\xfe\xbaX,\xc2-\xd1\xe4\xfa\xc2\xf8\xf9\xe6\x0bV\x1e\xf6\xab\xc5O\xfcf\xa2\x00b\x8d_\xfc\xb7\xe7P\x8a\"\xda\xf4\xa2V\x8et\x90\xf8w\x83\x02F\xd4\xb8\x9c\xda\xb2-\xde\x97;V\xa9-+\xdeI;|\x9c\xab\x18\xa3\xcf\xdem9\xce\x8e\xcdL\xe5\xd7\x86x\xfa\xd5pn\xbd\x11E\x11:\xc6\xcb\x1f\xe2U\xab\x80G\xf7`\xc4\x0b~\xb2\xae\x8bb\x81\x0f\xcc\n\xe3\x01\xb0\x8e/`\xfc\x04wj\xd5\xa8B\xdb\xe6\xc6\x13k&\xde\xb28\xf8P\xc0Q|\xa7Y\xd9\xd8#\xa6\x82 a\xe8\xe9\xc1\x93\x07\xe3I9\x8f\xc1g\xd9\x82\xda\xdc\xf5\x91\xfbk)\x17+Vaa?=9,\xfe\xeb\xbe\xb5\".\x97G\xf5\x85\xa3\x07\x98\xd5\xfbFG\xc8Y\xf8\x8f\xb7?\xff4\xfe\xe4\xf9\xf3\xe7\xcf\xc3M\xc0|\xd7F\xc9<6k\xfcA\xeb!\xda\x95x\xad\xb8\x0f\x89o\xea\x82\x05V\x1d\xc7j\x10\xe2\xe6\xadOw\x01|\xb7\xe2y\xdezw\x17v\x015\xa6\x8e\x85\xb0\xda\xd6\xdf\xb2;v?\xfc/c\xb9\x0f.\xfc\xd3\xf8\xb4\xdd\xba\x19\xef\x1fn<{\x16Y2\xb2\xec\xa3\x19\xd4\xda\x10\xc6Z\x14<<\x11\xf9A\xf0\x8aWJ\x96\xd1^\xebb\xa7x~\xe7\x12+\xf89<\x0dkn>0m\xd2\xbf\xff\xf5\xfc)\x11 \x9a\xab\xfbh\xcb\xfb\xcf\xe0\xfeX\xa7\xed\x9baaKy?|g&\xc0},\xdfOlgt\xfeO[\x84\x7f\x8b~`\xca7x\x7fn!/\xd7n5\xdaok\xb65\x08\x057\xbc(\x1e\x7f,\xe5\x8d\xdd)\xbee\xc8\xe4 o\xec\x0ew\xae~\x93\xbf\xb0\xab\x9bA?\xb0cg';\xa6\x01\x07V\x9e\xcc6\xe9\xf1\xc4>`g\xf4\xed|+\x8b\xbc\xbb%\xddveQ6\xfd\xc3\x9dH;\xae\xcav\x99\xf1t0\x0b\x8bf\xb6\x7fh\x865o\xc2\xa3`\x9e\x8fq\xff\xed?\xff\xf6(\xd2\x91\xce\xd1\xe6\xfa \xc6\x9b\x1d\x9a\xca\xa8|\xba\xf8\xfa\xe9\xd7\xea~\xa4 \xd9\xff\xceD\x9bgn\x99\xc4\xb1\x08\x8fKS\x1c#\xdb\x0d\xbe\xd9@\xed\xa3\x98\xf2\x8f\xa2\xd4\xbf\xefm\x94\xbd\xcc\xd8\x97\x9a#\x1c\x90\xba\xd4\x18\xa0\x7f\xb6\xc7\xf1\x88\x1dE\xeb\xe2X\x9d\xb1\xf6\xf9\xb6\xe3\xb4\xda\x1a\x1a\x17\xfe\xc3\xe5\x1f\x0f\xf5\xd4\x12_\x1b\x9bw6\xbc\xe4J\xa8\xe54\x00\x0f\xb3\xb3\x16\x8cC\x85\x12=&8\xac+$8r;3\x05\xd4\xe1W\xa3\xbb\x7fP\x7f\x03F\x9e\xe5\x1c\xf6\xa1N\xb4\xac\xcbx\xe7W\xbe\xd8,\xe0a\xce\x0e\x17p\xc3\xf9\xc7Gc\xd9\xabx^c\xe4fi\x8f5]\x8a\xd2\x9a\xe4T\xebw\x00\xee\x94\x0doAj`8cX\x17\xed\xd9\xad\xeeG\xa1A\xb3\x8f\x81P\x16\x98\xe6\x87\x1a\xb9\xf3\xda\xf0P\xdf\xb8A\xd6,\xd3c\x8c\x00H1CZ#\x1c&\xd6\x12-\xdc\xef\xb0\xab\x0b-\xf6\x85\xa9N-\x81\x7f\xe2Y\xad\x83qbG~\xe4%\x1e\xaa\xcb\x99i\xc7\xf6\xb0Z3\xc8\x06\x0f\x1d\x0e\x9bz4\x98*L\xb1W\xb5\xfd\xa0\x92{Y\xe9poM\xb3CHgo`\xec\xbe\x14\xd0\xd3\xfd\xd4\x0f\x9e\xa2\xd4a<\x1f\xc7\xa9\x05\\\x96.\x98\x7f#\xab\\]4\xc9Z\xc7B\x99\x86e\xbc\x0b3&\x1b\xe7%hGP\xb0c:\xdb\x9a\xae\xbda\xb5q\xa0r\x1b\xacq`\xf7(]\xbc\xd1\xe7\x1e\xdeY\xb6\xf8\xd08]\x89\xc2oq\xf0\x0d\xf9\x10\xcb\x18\x8bd\"\xc8S\xf1L\x06Y^\xfa\x0e0m\xb0-D\x8e\x17\x86\xe92zI:f\xf8dN\x0e\xe1\xda\x83\xa7\x84k\x7f\x86\xe8\xeb\xe9\xc33\xff\xa4yU\xb2\x0e)u\x89}+\xb2\xa7\xe7\xb5\xfb\xe4\xd2\x7f\xf1=~\xd0\x8c\xdd^e\xcb+\xb5\xddu|\xac\x0ehs\xaf\xde\xdd\x91\x9biv7\xda\xe3\xe7?c\xdd\xb1\x98D\xde\x1e\x99.~\xa99\\\xbe\xc2\xc5\x10`\x8d\x8d\xe7M-\xf7\xbc\xdas]\xb3\x89\xfe\xb2\x92\xb2\xe0,\x84a\xa5\xc4\xeca\x90\x9e=\x98|]\xb0\x8dq\xf5\xd4V\xde\x80X\x83\xd0\x0f\xcc\xcf\xed[\x11\xd4\xbc\x94\xe5\xe3\xf6El\xc3a\x17\xee\xa7\xe3\x97U\x97\x91\xa5\xb7\\T\x9e\x83\xc8\x7fq$\x82\x00h\x00~\x0b\x91\xf1f\x8b \xc0\xde\xf9E\xca\xaf\xb8\xddU>vW\xc7\xc2,\xb6z\x99\n\xea\xe9d\x16\x99\n\x9d\x0c\x87\x13g\x1a\x18(Qn\nw\x10\xb5\xbd\xa0\xa58\x04\xcb\xce6,\x82U\xca\xd2m\xd6\xf1\xa5\n']\xf1\xb5(\n\xb3l\xbe,5/s\x7f\xde\xba\xe2\x0e\x1cki\xf6\xb8\xf0\xd8\xf00\xf7\xc6\xeb\x82\x9c\x89\xe2\x10\xe0\x816\x05Z\xea\x11\x7f\xcd\xca\x14\xe3o\xa0\x06\xd7[\x08p\xb6enh\xe5Ug\xf7K\x04\xae\xd62J\xb4\x15H;\xb5\xe7p\xe7p-\x98=T\xbd9r]V\xb0:`\xdd)\xcdv\xfbh/\xbd\xb5\xdf\x86\xc7&\xe39\xdfK\xd4\x18|1\xc5\x92F~\x90\xd9G\x9c\xed\xde\xb9\xd5+k\x003,&\xa6\x15[\x0b\x01\xd8;?\x9a#\xe9\xff\xee~x\x17>\xfd\x1f\xd2\x06W\xc0; \xea\xe0]\x0dV\x1e\xc3\xb7\x07\x9f\xf8\xe4\x8b\x13\x992/\xfd$M\xee'5}_\xc9:T\xd9\xd0q\\\xd3r\x97:@\xc3Q\x95u\xf7%\xe8\x0e\xd4\xd9\xd6^T\x19\xf6\xec,\x14\x0c\xf3\xc2\x05\xa2\xf3+n\x9az\xb7\xe5[^\xad\xbf\xd2\xca\xa7\x1b\x8e\x17G\xef\xde\x80\xf4f\x91\xd6\xb8\xed\xe5\x1b\x1dB>\x1a \xaf{\xef\xdd\xf3~\x83\xfc\x88\xa8\xaaBJd\x9fhi-\x1b\xa9\xfb\xa9{ \xbd\x98s\x9aE\xf7N\x08\xbf!\xc0\xde\x08\x80\x17\xdc\xd81\xbd\x90\xe5\x86WM\x16\xa7\x9a\x86\x9d\x10\x1bN@\xbc\x91x\xa5\x8b6+6\x82\x8a<\xaeR\"O\xa1\x14\x85\x19\xb0\xa7\xb8N\xd0i\xbf>\xb0\x16O\xfdC\x7f\x18\xfa\x10n\x83\xcdP}\x86\nJ\xbd\xef\x04fV\xe6;\x9f\xc7\xa66W\xbe\x1e\xddm\x1c\xb0B\xc2\xd6\xa4\x1d[BGS?qC\xb6I\xc7k/y\x84q\x13\xcb\x87vZ\xf80\x91\x05\x1c\xdd\xfcU>\xae\xe5\xea\xaeEZ\x02W)\xc3N tyJ\xe3\xf7\x97\xc0\x8cz\xc1\\\xbd\x94\xa5\x8b\x7f\xe2\\\xa9tUg\x1dn\xd7/\xfd\x9c\xd7\xfbH\x1f\xcb\xc5z\xcd\xf1\x94\xfa\xcc+U\x11\xc3\x0c:\x15\"X\xfd\xaaR\x90y\xf2\xaf\xa7\x95\x86g\xee\x9c\xef\xb9\xbd\xe2\xc5\x11\x0f\x83o\xf6\xe6\x9bq#fR\x84\xb62O\xc7\xbb&\"^I\xbeS\x9a\xf7\x940\xff$\xf7|\xbb\xd3\xe7\x0c\xaaR\x9b\x1f\xc0K)\xcaf\xbegn\"s\x1b\xcbz\xf3\x99i\x1b\xc1\xb5 4\x99\x8f\xd1\xf2\x00~\xfa\xf9\xdd\xebg\x88\xe2\xb9MM\xb6\xdd \xa4s]\x96\xda\x01\x05M\x07S\x13C\x91\xc3\x11,\x82\x1aKX\x89M\x89\xd7\x15\xa9\xe6\x02\x103\xfam\xe4Fb\x98>\xd4\x8f\xa7}\x02l\xa6~\x11n7\xbd\xb9\xb2\xc9\xb5{\x88\xfe\x102lW\x9c\x97nI\x18T8\xb1\xa6}\xc9\xca\xde\xa6\"{*\x81;\xda\xc3\xeef\x1f\xfd\xd6\xee\\\xfam\xaf\xe2j\xd3lN#\xe9l\xa6\xea8z\xa3j\xcaz\xe7\x0e?X\xee\x99\xc8\x97\xf2:tf\xc7\xac\xbc\xa7\x84U\"\xf5=\x96+_\xba\xf6(\x0c\xdb\x10\xec{\x91\xc1\xbac\x0c\x87\xb9\x85+>\x93\xa6W\x98Y\xda$9\xfa\x9a]/GO\x0d\xf9-M\xd5\xcb\xce\xb1\x8d\xdc\xef=+l#\xfb\x07\xb0\xf3t\xac\x10Y_\xb0\xa2\xe2,\x0f\x90?\xda\xe5\xfb\x92\xe6\x98QIREs\xcc@>\xdf\x1cs\xd4d1\x0e5:\xb9\xa4\x04\xa7\xc2\xbd#\xa5N\xbf\xf7\xa1MV\xba\xb6m\xf3\x80\x97\xd1Y\x1c\xb8\xcd\x84\x82\x83\xf5\"\x03\x1bd+\x9e\x89\xbd\xc0Z\xb8\xd9\x068x\x8ai\xa1\xd6\x07\xc8x\x85\xdb\xf5:\x9e-\xbcl\x9cv\x17\xdduL\xeaQE\xed\x87\xc0*Y;\xba\xd6\xf8 \xd1\xbd\xfc\xd06\x18\x06\x1bq\xedW\xf9\xa6\xfc\xc6\x1d\xe7\xb4]\x96`\xc5\xdf \xac\x88=\xe4\xb1\xc8\xd5\x93_\xed\x917\xb1\x9b\xa0;\x9d\x1f;\xfc\xa5\xe9\xc3\xec#oi \xec\x82\xb1K\x0f\x19\xe7\x85\xb4=\xc4\xf5*?\xc7\xf7@G\x9f\x8c{vgQFOsPK3\x85-\xc3\x91\xb9/\xd1b\xa78\x183\xda\\\xc4\xf9\x9b\x8aFN\xa6\xe2\xb2\xd9\xc0\xdb{^\x99?G\x07\x0b+\xa3*i\xc4\x1d<\xa5\x11\xf73\x8c\xb8\xb1+G\xdd@\xdaQ\xf6\xe5\xae\x1c\x0d\x8d\xfb\xfe'\xf1_<\xc7s\xa7\"<\x92\xcb\xce\xbbW\xe6\xd5fxo\xc3\xa3]}h\x80\xd1\xe1\xfcH\xd3=o\x8c;:\xae\x87\xcc\xd4\x95/\xd1%\\\x13;C\x9b\x8e\x8c\xe8\xc6\x97e\xab\x82G\xa63+\x93\xc9}\xbe\x19\x88F\xfb\xc1S\x1a\xed?\xc3h\x7f\xfa8{\xd4\x87\"\xe3\xec\x0f\xee]\x0f\xc0\xb4\xe3l\x8f\x08\xa2p\xfd\x89\x83\xd1(Q\xcf\x0c\xacG\xaa\xdc\x8bwv\xa0\x0d\xd9\xa9+\xb7h\x8d\xe4#\xd2\xa8\xf1;\x1a5f\x9e\xd6?8\x1c\xd6\x1d[\x1f\x1c\x1c\x1a\x06\xaf\xfa}\x1f\xd5\x1fm2\xf1\x06cO\x95<\xdf\x11\xfb\xd1\x83\x03}B\xbd\xd3\xf7}x\xbb{\x08\x7f3\xe2\x04O\x0el\x0f\xc4\\\x1db`\xba\xbf\xae\xc1\xddM\x80\xd5\xdeih\xeew\xc8%W\xe5\xff\xf7\xff\xfc\xbf\x1aX\xa6\xeb\xc8\xe1Px\x82\xbd\xcfg(Q\xa1\x15/\xd6\x17\xb0\xaa5T\x0c\x89\\\xf6\xb4\x9d\x11\x98\xaf\x87\x83\x86\x12e:\xdb\xda\x8fCIZ\x00!\xef\x99\x99\x82\xaf4\xcc\xdf\xada^\xd5{^\xad\x8bZ\xe4\xcd\x08\xcf\xb2L\xd6xRs\xc17\x0c1\x9cb\xb9\x97\xcaB\x11O~u\xbf\xcbj\xe9NpM\x0b\xcb\xbeq3\x02+\nK\xf9\xaf\x15\xaf\x1e(\xdc9\x0e\x15+7\x1c^\xfe\x00M:\x16\xa4a\x15\x876\x8b\x8d.\xb8\xdf\xcf\xed/\xab@\x89\x9c_\x84\x13\xd7[~\xc0s\x83\xed\xce\x08\xa6`]q^\xe0_\x9d\xa9\xa3\xde\x07\xb6\xe0Y\xef\xcfx\x1aqn\xd9\x99&\xe7\xf3\x8c\xff\xd34\xb8\x045\xa9-{&\x01.\x81\xe6v^\x92[\"\xc5\xed4\x82\x9by\xf3\x9a\x15\xbc\xd4K\xbb\xcc\xa0f\x12\x90?\\3\xa1\xa0\xcd\xe0)\x05m\xd2{\x0b]0A\x17L\x8c\x0b]0\x81B\x17L\x1c\x0b]0A\x17L\x84\x84.\x98\xa0\x0b&\xe8\x82\x89\xc9 =]0A\x17Lx\xa1\x0b&\xe8\x82\x89q\xa1\x0b&\xe8\x82 \x14\xba`\x82.\x98\xa0\x0b&\x86B\x17L\xd0\x05\x13t\xc1\xc4P\\\xec\x94.\x98\x18|@\x17L\xd0\x05\x13_\xe0\x82\x89\xd8\xc6\xd7#\xd2jG\xdb-\xb7\xc0\xde\x8ad[\x97\x9e\x8fPn\xe6\xf3l\xe72_\xdfwR\xbb\xe7KJ\xe4\xd7S\xd1C\"\xbf\x12\xf95!P\xe7\x85\xc8\xaf\xc7\x92X\x1fs\xccL\xe4W+D~\xed\x0b\x91_\x89\xfcz$D~\x1d{\xedl\x93\xf3y\xc6\x7fb5v\xe4\xec\xac\xc6\xae\x10\xf9\x95\x9a \x91_[!\xf2\xebyz\x0b\x91_\x89\xfc:.D~E!\xf2\xeb\xb1\x10\xf9\x95\xc8\xaf!!\xf2+\x91_\x89\xfc:\x19\xa4'\xf2+\x91_\xbd\x10\xf9\x95\xc8\xaf\xe3B\xe4W\"\xbf\xa2\x10\xf9\x95\xc8\xafD~\x1d\n\x91_\x89\xfcJ\xe4\xd7\xa1\x10\xf9u\xfc\x03\"\xbf\x12\xf9\x95\xc8\xafq\xf2kQ,\x99R\\\xbbO\xc7N\x8e\xed\x1e\x17[\xf1\x8dP\x9aW<\xef\x1c\x06\x0bV\x83\x1f\x19{T\xd8\x17E\xf1\x02\x9f\xde\xf3%\xba\xa3$\xd7\xae\x15\xba\xa2\xbf\x00\x1c\x18\x05\xe1'cNX\x92%\xbe\x16R1\xc91\xc3:{\x87\x83\\\x99\x8b\x8ci\xae\xe0f\xcb]\xdc\x8e\x1fU~\x9c\xc3\xe7\xe80\x16\x99\x97\x95\xf1 \x8a}\xb8\x87#{\xef\xd4\xd2\x03\xf0\xb2\x8e0\x18\x1eC\xcb\xc6nJ\xf9\x13\x8b\x92\xe4F\xbf\xf9\xe1\xeam$\x9f\x81\x8fz\xac\xf0\xc8\xe7\x1e\xe2\x9f\x95\xd9x\xb5\x0e4\xf9[7\x91\xa0\xc6\x04\x86\x0c\x8fj\x15\xa7\xb9\xee=|]\xb1\x9c/\xf3\xed\xbd\xf6'b&\xf4\x84\x98 iAd f\x021\x13\x82o\x123\x01\x85\x98 \xc7B\xcc\x04b&\x84\x84\x98 \xc4L f\x021\x13\x88\x99\xe0\x85\x98 \xc4L\x18\xca<\xe3\x113\x81\x98 \xc4L f\x021\x13\xfaB\xcc\x04b&\x103a(\xc4L\x18\xff\x80\x98 \xc4L\xf8\x02\xcc\x84\x93)\x02\xa2\xd4\xbc\xda\xf1\\\xb0\xea\xb0t\x07f%2\x06:\x98bW\x0bx-!\xd6\xc0e\xe7\xe5\x17\xee]\xf7\xea\xdd\xe5\x10\xf4,\xd3\x15\xfd\x05\xa0\xbb\xdb\xb1\x08\xaeY\x81\x1c\x95\x93\x15lX\xbd\xe1\x9f\xfd\x80\xab\xd3\x8f\xfb\xda\xb3\x8d;\x18 T]']\x1a_\xf2Oz\xf9\x91\x1f\xc2pj\xb4\xd0\x93A\xb9^\xc3\xfe{($\xe7s\xe1\x8f\xba1\x7f\xba\xc09S\xca\xa2\x03Wl\xc3\xdf\xf0_j\xae\xf4\xc2>\x0f(\xb3\x07\x9c\x185F\xad1\x1c\x87\x9dT\x1a8\x86\xa31\x86\xbd\x80K\xdd\x99\x05\xf6\xfa\x00\"\x84\xcc\xf6b\xc1;Yq\x8fM\x8cy0Zj\x16@\x9f\x93\x8d\x19i?ST\x18L\x1e\xad\x88\x7f\x94\xf5ne\x83\x98\x1eN\xe9\xc4\xeeC\xe5\xed\x1a\xda\x9e5\x88\xcaB\x13\xc9\x0d\xc3C\x95.@h\xd5\x1e\xb3T\x97\xfe\x1a{\x8cQ\xdf\x08u\xdc>\xa6\x83\xa26+v\x00\xb4\xa5\xea\xcd\xda\xa2\x84\xcd\x9b\xab\x97\xcd\x18\xe9\xa7De\x0f\x0f\x1a\xab\x9eq\x102\x93\x95\xd5\x81\x80me\x0b\xdfL\xb0\xc6\x19\xc1\xf0w\xd72\xa3\xe6\xf0_\xbc\x95\xbb6\xdf\xd1ub\xc5\xf7\x1c\xa3\x93\xdf\xb2\xaa\xa9\xa4 \xaf\xb3o\x16l\xdf!\xbf\xb3]\xe9\x12\xd7e\xf0\x94\xb8.)=\xd0\nq]\x88\xeb2.\xc4uA!\xae\xcb\xb1\x10\xd7\x85\xb8.!!\xae\x0bq]\x88\xeb2\x19I \xae\x0bq]\xbc\x10\xd7\x85\xb8.\xe3B\\\x17\xe2\xba\xa0\x10\xd7\x85\xb8.\xc4u\x19\nq]\x88\xebB\\\x97\xa1\x10\xd7e\xfc\x03\xe2\xba\x10\xd7\xe5\x0bp]b\xa7p\xb4\xd0\xff\xe2#\xefN\x821p\xdd\xa1\xe9\xcc\x0d\xa1\x15r\\,f\xda\x85\x0f\x17\x0d\xf4\x8e\xc1\xbb\xcd \xca\x85X\xba\xe9\xf6Sp\xfa\xcff\xbe\x93%.\xa4\xe5z\xad\xb86N|?\xbb\xd0\x01\x1f\x14\xd7\xddAQ\x94\xcflZ\x9d\xdf\xda\xd3D\xd6\xacP\x13\xc7\x89@(j2bD\x9b\xbf\x90\x1d\x07\x11\x0bW\x184eY\xefx%2\xff\x1b\xf6\xb6\x8c\x95\xa6<6d\xb4\xe5\xa57|]6\xa1\xc3\x81?{\x89\xda\n\xaeTkB\x1b\xd7\xaa\x951\xf5G>\xd3\x9e}\xf5\x9f\xd9\xb8\x03r\xc2\x88y\x0b\xb1\x13\xa9\xd6\xc5w=\xeb#\xc4Y\xb0a\xe5n\x0b\xb6\xbe\x80y\xda\xd3\xb6\xb7\xf1\x9a\xeeO\x97k(\xf8Z{\x8e\x87#}x\x9f\x11#\xe2\xb6\x83\xd8D\x8c\x9dW\x07\xe0,\xdb\x02\xdb\xef\xbf\xa0\x15\xbb\xcc\x8b\xf6\xfb\x98-;_@{\xd1\x95\xaej\x0e\x18pu'\xa34\xd8\x98\xb3 \xbe\xe8\x1aRW\x9d(\xb3\xa2\xce\x07\x1e!\xb3\xa94\xe0\xe4\xa0\xc6\x10\xea\xee\xc4\xcc\xcd\xd0\xdd\x96i\x18B\x7f\x7f\xa9\x06\xb55(\x02:\xd1\x15W\x8e\x94\x80\xdd\xab\xed\x8f\xa6\xcb-\\o\x12\x9bRV\x03\xc4\xc1\xf7\xc6~\x12\xd62\xb7\xad\xd8\x95\x94\x05ge\xac\x02+~\xcd\xab\xde\xa7\xb1\xcaso\x0f+Nt\x98;\x15\x1f\xef ==&\x0dni,\xb2\xcay5t\xd8\xdf\x8a2\xe3\xcf \x93j'\xd5c\x95\x7f\x84\xaf\x16\x7f\xf9\xe6\xac\xd68\x99\xb6\xd9\xfe\xbcl\xaf\x9b\x8a\xf06;3\x9e\xa7p\xb6\x8d\xd2]\x85c\x86O\xb5\x93\x1d^gq\x00{C\xd1\xa2\xf3uK1j\xae\xe0\xb1\xf6\xad\xcd\xd7\xa3\xa4\xcfw&\x99\xf6\x94\x9aWm\x8e\xdd\xdbw\x96\xf7\x89\x06:6q\xef\x95\xb1\xe1\x8b(D\x83\xa7D!JC{\x80(DD!\n\xbeI\x14\"\x14\xa2\x10\x1d\x0bQ\x88\x88B\x14\x12\xa2\x10\x11\x85\x88(DD!\"\n\x91\x17\xa2\x10\x11\x85h(\xf3\x8cG\x14\"\xa2\x10\x11\x85\x88(DD!\xea\x0bQ\x88\x88BD\x14\xa2\xa1\x10\x85h\xfc\x03\xa2\x10\x11\x85\xe8\x0bP\x88N\xc3]\xf1\xf6\x95]]h\xb1/\x04\xaf\xc2hk\x17bEH\x95\xffR\x8bkV\xf0RC\xfb\xbd\x0d|\xb8y\x05iB\x15\xcf\xcc+|/\xb3\xed(\x90\x8a\xf7{\xfc\xd8hp\xaf\xdcY\xf4\xd4\x94}\xd9\x96\xfd\xc8v]\x89\xc2sqp\x0e\xed\xb5\xb4\xd4\x8a0x\x97t\x9eH\xe88\x91\xc8\x89;\x93\xba\xddA$GW\xb0\xa0\xce\x0b\xcf\x8a\xfa\xe1\xaa\xbdE\xa7{\xab\xce\x88\xca\x98\x19a*G\xd3\xf1\"\xe3)\xfc\xacv\xf2\xf1\xeb\xa6\xe6\x1e\xb7m\x0e\xde\xf0LV6t\x8a\x86\x07\xe3R\xacy\xa5\xc6\x8f\x99i\xfa\xc0\x8d\xac\xf4\x16nF\x9d\x1e]q\xa6\x8d\x1f\xf2\xc3\x95\xbd#\xc8x\x88[v-\xca\x8du\xb4XQ\x18\x17\xc3%\xb8\x80\xd7\xd7\xbc\xd4u\x00\xa7\xc1H\xb3\xf9_\xa9y\x99\x8f\x03\x9e-\x87\xc9\xf9\xa2\xef\xc4\x8e?\xbe\xe1b\xb3\xd5<\x7f\xcc\xaey\xc56\xfc\xb1\xc9\xf9\xe3\x15\xcb0\xd4\xbd\x96!\xe7\x91\x97ZT\x1cr7Z\x8d%\xd8\xe6\xfe\xf1\xd3\x05<\xc4\x10\xff\xea\x00\x85\xb4\xbao\xb6L?PH\xa3P\xbcg\xdcQX\x08\xb1\x0b\x8fQ\x8c<\xdfW\xc2\xabPP\xf1\x1bV\xe5\xea\x91\x07\xd7P})o.\x1aK\x95\xd2\xd2\x9c\xde\xfd\xf5\xc5\xd5Xj\xb5\x06Q*\xcdY\x1eJP\xed\xa56\xa9f\x1c\x1cej%\xeb2g\xd5a\x01\xdf\xc9\nr\xb1^\xf3\n\xe9{\x08\x19\x1a\xb7\x13\xef\xe5\x1a\x8f\xf4[?^\xd7\x15\xbf\x001\x8a\xe7f\x08\xacZ\xf4\xa1\x1d\xba\x88w1xJ\xbc\x8b\x94!\xcf\n\xf1.\x88w1.\xc4\xbb@!\xde\xc5\xb1\x10\xef\x82x\x17!!\xde\x05\xf1.\x88wA\xbc\x0b\xe2]x!\xde\x05\xf1.\x862\xcfx\xc4\xbb \xde\x05\xf1.\x88wA\xbc\x8b\xbe\x10\xef\x82x\x17\xc4\xbb\x18\n\xf1.\xc6? \xde\x05\xf1.\xbe\x00\xef\"vt\x0b\xc2\xe1\x1d\x0d\xa7\xec\xae\xef\x85\x1bnA\xf2@m\xf8i\xe2f\xfa#p\xdfh\xb8\x80\x9b-\xc7x\x8eX\x83\xd0\x0f\xf0\\\x14\x0b\xed\xdb\x97\xcc\xba\xb6\x84b\xdf\xa8C\xec;\xcc\xfc0k\x00\xf7\xf0\xcer>\x86\x06\xecJ4&\xc4\xcbz\x94a\xf1\x18\xda\x93\x03\x1a+\xfc\x84fL}\xfb\x87\xab\xb7\xc6\xb0\xa9\xaf\xbf\x94e\xc6K\x8d1\x86\xf1\x0f=\xcc<#k\xb1\xebhF\xb44g\x90\xa8\xa6\x11a\xe4f\xd8\xce\x84\x1a\x1b\x0eX\x8fBr\x01\xc5\xde\xd1*\x8c\xd7\x01{)\x0b\x0c\xa1g\x9d\x82v^\x18Qh>i~&\x90}\xf0\x94@\xf6\xb4x(\x10\xc8N {\xf0M\x02\xd9Q\x08d?\x16\x02\xd9 d\x0f \x81\xec\x04\xb2\x13\xc8N ;\x81\xec^\x08d'\x90}(\xf3\x8cG ;\x81\xec\x04\xb2\x13\xc8N {_\x08d'\x90\x9d@\xf6\xa1\x10\xc8>\xfe\x01\x81\xec\x04\xb2\x13\xc8>\x02\xb2g\xb2,\x11\x1c\\\x8aR\xf3j\xc7s\xc1\xaa\xc3\x92ex\xa9\xc1\x93_\x0b\x99}\\\x8a\xfc\x1fa\x08\xde\xe3\xee\xdd\xef\xc1}\x0f\x8dz\x0cMv1S{\x9a=n\xba6\xce\x81\xf0\xb3W\x0fj\x7f\xe9?\xbf\xec(\x7fau\xdf\xf3&\xba\xab\xe8\xbb\xcdf\x08U<\xe9x\x85\xd3\xcf>\xb8f\xc5\x92\xe5\xf9)\xc7\x14\x00lX\xbd\xe1K\x91\x9f\xf4q\xf0\xfa\x90VL\xc6\xb8\x8a\x00\xa2t\xa8?\x10\xee=\x19_M Q\x02\xe1\xde\x84{\x07\xdf$\xdc\x1b\x85p\xefc!\xdc\x9bp\xef\x90\x10\xeeM\xb87\xe1\xde\x84{\x13\xee\xed\x85po\xc2\xbd\x872\xcfx\x84{\x13\xeeM\xb87\xe1\xde\x84{\xf7\x85po\xc2\xbd \xf7\x1e\n\xe1\xde\xe3\x1f\x10\xeeM\xb8\xf7\x1d\xc3\xbd\x1d\xa2\xdc\xd1!\xcagC\xf4\xa1\x05\xbeuUO\xe0\xde\x10\x82\x18O\x02\xc4\xb9\xd2b\xc74\x1f\xbf\xd7}i/h_\xae\x0eK\x0c@0-\xabe\x07\x95\x1d\x03\xc8\xffm\xfc\xc2\xf7\xf6\xaaw\xd6FbP\x15\xb8\xf4\x1a\xd4\xdc?m\x92l\x9b\xc6;wlx\xc1V\xbc0\xdd\xa1\x04_\x82\x0bX\xf1\x8c\xf9Y\xfb\x86\x1d@h\xc8X\x91\xd5\x05nfn3\xd1h\xcb\xba\xd3D\xc1Y\x0e\x95\xac\xed\xbd\xfc\x18\x1fV\xb0\xae\xe4\xceN\x06U\xcd;\x19\xed)\xeaa\xf8\xaf]v\x8e.\x9d\xe7\xf9\x0b\xfc\xe8\xdb\xc3\xff\xf6\xe5z\xd5\xe1D\xdcY`\xbfw\x11=\xcf\x97\x99\x14\xe1\xcb\xe8\x7f[\x105\xc2\x0fH\x88\xd4\xd9:<\xf1\xf3\x948\xd9K)J\x0b\xc9p3I\xd8K\x16l\x8c\xcbf]\x94v\x947\x13 +]\x86B^\xdaO?\xbf{\xfd\x0c\xfd.\xd7\x95\xac\x03#0\x00wYj7\xb47A\xcf\xee\xf8>\xaa\xd0z\xbb\xe3\x89)\xb1)\x99\xae+\xae\x9a\xb1\xc9\xf8\xf6\x1b\xb9\x918\x98\xb6\xed\x8c\xa8 \x83\xa7DMH\xeb\x1d@\xd4\x04\xa2&\x04\xdf$j\x02\nQ\x13\x8e\x85\xa8 DM\x08 Q\x13\x88\x9a@\xd4\x04\xa2&\x105\xc1\x0bQ\x13\x88\x9a0\x94y\xc6#j\x02Q\x13\x88\x9a@\xd4\x04\xa2&\xf4\x85\xa8 DM j\xc2P\x88\x9a0\xfe\x01Q\x13\x88\x9ap\xc7\xa8 -\xa4\xefv$w\xb4\xddz{\xfe]\xdb\xf9\x8f\x86Pa\xda\xc2\x15>\x87\xaaCY@\xe4\x1b\xa3\xe0r\xdd\xdd\xcb\xdf\xda\xd4\x8f\xbf=\x06@\x8b\xfc[\x9d\xf7|\x11\xef(\xc0\xdf\xb5LWz\x99\xb1/5h\xb6F7\xcb\x9b\xc1\xcf\x89;\x99\xd7\xc5H\xec&\x98)\x98\x84#w\xa2\x14\xbbz\xb7\xac\x84\xfa\xb8\\\xb3L\x8f\xa1\xbb\x90\x12\xfdJ \x1f\x8d\xa6g\x86V\x1b\x81\xcej\x0d\xb2\x84\x9f\xdf\xfe\xf83\x98\x06{\xcd\n^j\xebL\x04\xf4\xc95\x14{\x0b\xfd+Dz\x02\xef\x0d\x8e\x8a\x10\xe5\xe6\xa2=\xeb\xff_\xff/\x0b\xb4\xb9\xcc\x81\xc9\x1c\xd8\xcc\x05\xd4\xdd\xc8\xea\xe3\xe8\xf9\xfc\x80\x8c\x0e\xc0\xb3\x1ax\xf5x\xc5\n\xb3\n\xb51*{D\x85'\xea`$]\x94\x0f\x14\xf0O{\xa9\xea\xd1[\x0c\x9c\xbakV Y+{3@(\xd9kY0\x0c4 \xae.\xdc\x0cu\xcd\x11\x9c\xf0e6F~Pq%\xcc\xe2X?\x00-\xa7t\x1dFZ\x9b\xbd\xef\xc0uh;\x9ft\xda\xeaZ\x1e]h`\xdbm\xa3\x88(\x0d\x83\xa7DiH\x1d>\x88\xd2@\x94\x86\xd0\x9bDi@!J\xc3\xb1\x10\xa5\x81(\x0d!!J\x03Q\x1a\x88\xd2@\x94\x06\xa24x!J\x03Q\x1a\x862\xcfxDi J\x03Q\x1a\x88\xd2@\x94\x86\xbe\x10\xa5\x81(\x0dDi\x18\nQ\x1a\xc6? J\x03Q\x1a\xbe\x00\xa5\xe1$\xf8?v\xbcA\x98\x14\x108\xcb\x00\xb7\xc0w\x01\xc4\xf6`\x00\x8f.\xba_du\xd1\xd2,Z3XJD\xf3O]\x89}\xc1G\x8f\x138:F@\xc8\xf2\xc5\xeewq!@`{\xbd\xfe\x02\xf8\x1f\x1d\x14@\x07\x05\x0c\xb2O\xa8\xfa\xad{\x95&T\x9dPu+\x84\xaa\xa3\x10\xaaN\xa8\xfa\x91\x10\xaaN\xa8\xfaP\x08U'T\x9dPuB\xd5\x81PuB\xd5 U\xef\n\xa1\xea\x84\xaaO\xb6\x10B\xd5\xc3\xdf\x10\xaa\xde\x13B\xd5 U\x0f7\x01B\xd5 U\xefJ*\xc2I\xa8:\n\xa1\xea\xff,\xa8z\xfc\xee~\x07f\x7f\xde\x83\x02\xfeP\xe7\x11\x8c\x12\x12\xd4\x93_\x8fl\xfd\x8f0=\xc1s\x12\x10v\xd8v\xef'\xe8\x9eV \x95\x8b\xa6\x9bv\xdc\xbb|\xc1\xa54q\x8aAKT\xc2\xffT\xef\xbc\xee\x112\x91O\x18\x0fS\"\x9f\x10\x89b\\\xa2H\x11\xc6\xd2n\x91(\x86|B\x1c&\x1e\xc3\xc4GE\xbf5>!\xb2\x88F\xbf\"\x8b\xc8o\"\x00\xb2\x88\x90Ed|\x12YD\\\x90Et,\xc8\"B\x16\x91I\x90E\x84,\"d\x11!\x8b\x08YDJ\x90E\x84,\xa2\xb1\x84)\x0fYD\xc8\"B\x16\x11\xb2\x88\x90E4\x14d\x11!\x8b\x08YDcA\x16\x91\xfe\x05d\x11!\x8b\xe8\x81\xb1\x88~\xafy\xcc\x9a|DRj )ai\xcd,\x94\xa5\xee\x13\xf9\xa5O\x92\xb3\xb6 \xdfdg\x1f\xfam\xc0tg\x9a\x97\xa2\xf1O\xa4'!\xef\x84\xcbg\xc3;Az\x12\x0e\x13\x8fa\xe2\xa3\xa2\xdf\x1a=I\x88\xc8d\xd5.\xca\x98\xf0L\x8a\xcf\x88\x98w\xc2DM\x96\xbbJxV\x1d\xf2zK\xeb4YfEr\xf5@\x86\x07\x1b\xb5evH\xf3K^\xabe\xba\x8e\xecl\xe8\x01\x80M\x9a\xd7\x7f\xfd\xf3DS\xfa\xa1\xad\x19\xfcP$W\xf0\xe65\xebG\xb5\xfd\x95\xbf\xb0\xc1qM\x81U\xfdq\x05\xa9\x19\xbc\x177\x12\xa7U\xd7\x0bf\xeb\xc7Jk\xf6\x0b\xb6kU\x0f\xf3\xbf\xc1\x8f\x1f\xde_\x08\x9e\x02\xc9\xfb\xb5`?\xeaWN^\xc0r\xda\x1c\xf4W\xd9{\xf65\x1eG\xa0T\xd55@\xc40\xf0\xa367\xb5I\xb1[\xc9\xb9e,\xaf\xd8\x98\x95tIv;\xa8\xb6\xa4\xa4\xf0GX\x159'R1\x93\xdaT\xf0\xc7no\nroj\xd8X\xe4\xebe\x9d\xee\xe6\x00\x9d\xd7\xa4\xa6_\xb2\xb2LE\xa5uF\xad\xdak\x99\x0cM\xde\xb6g\xd0\xff\xcd\xbe\x12\xeeJ\x92\xb0Qg,H\xf3\x16\x1bzf]J\xe6N\xc59Qu\x01M\xce\xc9L\x12\xd2\xe5\xbfj\xdf]\xcbS\xfd\x04\xf5\x0d\x86\xd6\x7f\x99\x95\xa3\x1c\x08j`\xa9O\xab\x93\xe6p\xa2p\xe6\x0b3\x8d\xc6\xf2\x04\xd1\x0d\xf6E*\xf8\x89\x9d\xce\xb7\xa4b\xe3\xa8\xac\xe9:z\x9b\xa1j\xc3\x0dGZARRqX\xbeN\xcb\xba!\x99\xec\x18\xb8\xe1$\x92\x9c\xde\xc8\xe9\x91\xeaQ\xee\xde\\1\xce\x89\xa2L/\xd3\x9cd\xb2$\xb6\\uJ\xa9\x9a\xcd&\xfd\xb4\x803\xd1j6LM<\xd3\xf1\xe0\x91u/L~\xdd\\\xdc\xbb.\x03c\xdey\x135g\xee*Y\xa8\x18$\xfe\xe7!k\xc7#\xa7\x7f\xce\x8eFN?r\xfa\xf5\xaf#\xa7\x1f9\xfd\xc8\xe9W\x82\x9c~\xe4\xf4\x1f r\xfa\x91\xd3?\x16\xe4\xf4#\xa7\x1f9\xfd\xc8\xe9\x07\xe4\xf4#\xa7\x1f9\xfd}AN?r\xfa\x9d#\x049\xfd\xe6w\x90\xd3?\x10\xe4\xf4#\xa7\xdf<\x04\x90\xd3\x8f\x9c\xfe\xbe\xf8\xf2\xab\x91\xd3\xcf\x059\xfd\xbf\x0fN\xff\xad\xa5\xc3\x8bb\xf77\xf9\xbe(\xb2\xe5\xcd6\xadi\x96V\x12S\xb4\x91\xf7 \xb0\xe7\x98In_b\xa7\xfb\xa2\xc8 \x15~CQ\xa6\xb2\x93\x03\xce\xfe\x07\xfe\xd3\xdf\xd4\x8b_\xa8V>P\xa2>\xd7M:3'\xdf\xe8-2\\\x80\x89h\xef\xe8WD{\xfd\x1cs\x80h/\xa2\xbd\xc6'\x11\xed\xe5\x82h\xef\xb1 \xda\x8bh\xafI\x10\xedE\xb4\x17\xd1^D{\x11\xedU\x82h/\xa2\xbdc S\x1e\xa2\xbd\x88\xf6\"\xda\x8bh/\xa2\xbdCA\xb4\x17\xd1^D{\xc7\x82h\xaf\xfe\x05D{\x11\xed\xbd\x07\xb4\xd7\x0d\xbb\xf2\xf0\xd3\x0dI\xea\xa2<\xb4\xc0+\xc9\xb2\xe5\x8a;\xe6\x96\x15\xcd\xd7\xcbmQ\\Uf\xf4\xb5w\x1a?\xcb\xb2\xaf\xf9\x8b\xefi\xbe\xfe\x9e\xbdv&\xa0\xe46M\x05\x1b\x95\x97\xef\xce_\x89lqre\xe3^\xf0\xb6\x90KZ\xf3T\x0d$\xcbT\x1a\x0eZ\x893\xb8\xa8\x15\xb0Z\x01\xab\x15\xb3\xddiU\xd3r\xe0\xea\xbd\xe0F]\x06\xd8\x97*\xb1\xdbM!\xa0\xb4\xeaDx\x06JrPq\xb7\n5\xe6\xf1\xb72\xf0\xb6-M\xe0o\xed?\x8b\xcdq-\xdaZ\nH$]\x7f\xeaJK\x8aR\xd4E\xb92\xd9\xbbmi\xac\x8c\xae\xecAa\x8f+V\x90\x16\xaa\xb6\xa8Y>\xfe`ak\xae\x94y\xb1N\xad\xd3k<~\x97m\x1f\xdd\xf6\xb7\xed\x9e*>\x05-\xfd\xd7&\x86P\xd3\xa5\xee\x0d\xe6QY\"\xd7SS\xd2\xe1\xfc\x11\xc2\xde\xb3M\xc7n\x12b\xf06\xc2\xf9F\xb7\xf1-8\x9d#W%a9N\x7f\xe5\xff\xff\xcfS\xd2\xd4\xdb\xa2L\xeb\xc3rGk\xb2&51\xafP\xff\xd5\xcd\xc2\xd7\xec\xed3\xf5\xee\x8f\xf2U\xd7\xe2\x04\x1bZ'\xdb~+\x0d\xe5\x88$\xa1{R\xd6i\xc2\x0e\x15\xc2\xdei\x8d\xb8\xbe\x04\xf9\xe4\x83\xb5\xdf&\xb5\xf7\xc5:f\xed#\x96\xacw\xa9!\xd5\x9as\xb0\xd5i\x9d\xd1\x17\xf0\x8a\xe4bg\xba\xaf9\xc8\ny!\x8a\xe50\xa6B,\x8ajWTi\x05\xc7T7!n\xbc\xc10\x02\x14\x94Q\xc1n0(Z\xc3kH\xe7\xc3\xf1U\x05\x05\xe9\xf6\x9c \xd9\x13\x0e\x8c\xb2\xb2\x8bkZ\xb6\xd9C\xe4L\x91c\x0d\xdeq(*/n$\x08\x97\xea\xb0\x01\xeeJ(r\ngL5\xba\xef\xedi\xb9K\xab\x8a\x1f\x01V\x0d\x07\x14\xf7\x19\xc9s\x0153\x0d\x7f\xaai\xbe\x16\xff\x14\x0e \xb6\x16\x0dO\xa5\x1e\x8b\xa1^\x8f\xd6u\xb0[\xf9F\x05n\x04f7n\x8e\xa1\xabp \x94\x82K\xe0\x1d/\x81\xa1\xa9\xb5o\x95z\xeb\xb3\xda\x8e\xb7\xd3^k\xedp\xef)\xb7\x9e\xae\xa5\xb6}[\x1d\x039z,\xdf\xed\x8e{j\xaa\x1f\x1d\xc6\xb4k\xad\xb6&\xf2\xc1\x07\xbb\xd4&E\xb5\xbb!\xd5\xce\x9c\"s\xca\x19D\xab\x92\xf9\xad\xee\xf03hr\x95\xa0\xc9E\x93\xab5\xb9\xcbMY\xec\x96II\xc5\x1d\x06\xf2?,7\x17\x8c\x0f7\xd5\xb7e\xb1{%^s\x19\xdb\xf6\\\x03$\xcbz\x13\xb2KCW\x01\xaf\x81\x80\xd0z\xd7\x1f\xf0\x1d\xf5\xa9\xac\x9d\xf9|\xd3\xaf\x8c|\xe8\xc1\xda\xdb\xbbqMy\x98\xe6#\xcd\xbd\xa3\xbf4\xb4\xaa\x1dVY\xc3%6Y\xe5\xc1\x18A\x9b,\x05m\xf2\x03\xb2\xc9\xc9\xc0h\xc0\xbdYe^\xc7\xcal~{S\xf8\x9c?j\xb5\xb9\x12K\xeb\xee\x9a\xe9\x7f\xb3-hW\xac\x9b\x8c>\xee%\xc6\xee4\xa5\xb5\xb5\x17\xbdRD-\xe4S\x0f\xd6\xd8\xf6\xd5\xda\x97Ae\xf6C\x85\xd6\x9c\xde\xa1\x14\xa1\xb0x\xa1\xacc0\xdc:_<\x12\xc7\x8a58-\xf2\xe5\x86\x1a\xc6\xbdm\x1e\x83m.\x83\xab~B\\s\x1aT]\xcd?{MMW\x86c\xf0+\xc6\xed3\x132g\n\\!Q\x89p\x8d\xa5\xddb\x96p_%\xf1U\xfa\x95\x1c\x80\xdf\xd2\xe1\x81lC\xa9t\xc1%[R^\xd2\xb5=\x8aC\x8dc\xce\x81\x81\x9c\xde\x98\x9a$\xfd\x87\x17\xf2\x13i\x05\xeb\x92\xdc\xe4\xc0v\xa4\xfc\xc3?V\x97\xbcN\x94W\xefq\xc5O\xdd\x06\x06u\x9b\xe4\x9fG$\x98>Y\x97$\xaf6\xb4,;7bR\xecvM\x9e\xd6\x07\xe8\x87\xea\xf6e4=/I\xb5L\x8a\xbcjv\xd6ij\x19\xba\x86\xe8\xd6\xbeDt\xdbw\xa4z%\xaa5\xe8\xbdKR\xb1\xa3}\xcd\xf7\xdf\xa2\x11\xc6\x19\xc5\xbbKa\x08\x86gx\xd0\"\xfb_.\xdd\xb1\x9c\xf9Q\xed\xc9\x8em@\x98j\xf3\x84\xc2\x8e&[\x92\xa7\xd5\xce<\x8d\xdeS\xfa\x02x\xf0\xc3\x8b\xd3\xd3\xcb\xb4\xde6+NVxUT\xbb\xbf\x91j'\xd6\xc7/\xd5\x02\x99VUC\xab\xd3g\xcf\x06\xc5ylo\xc5\x02\xd5\xcf\x80?\xd8\xcf\xb2\xdej\xbd;\xfc\x85S\xb9\xb0\xbe;\x7f5*OLQ\xdc\xb6\xe2\xb6\xf5.\xb7\xad\x1e;\xc9O\x1bJ\xabv\x0f\x994\xe5\x92\xa6\xfb\xe5\x8aT\xb4\xdbM\xf4v\x93\x83\xcd\xdcw\xb4\xfe&\xdd\x7fM*\xfa-U\x9f|\xb0\xfb\xb8a\x93\xfa\xa2\xd5-N\xd0\xd1\xaf8A\x1f\xc2\x04\xddP\xba\x14\xb7\x17\x1dMM\xddA\xef[J/\xc4]G\xe5Q\xe6\x11\x1e.\xbe\xa5\x83\x0c$b\xc3\xc6_\x90\x14\xf0\xb4\xc7\xd7\xe9\x18b\xe2\x82\xa2\"\xab\xf8\xc5H\xeb\x82\x8a\x18\xce4O\xb2f-X\xdf\xcc,\xf0]\xc6\x89\xa2L\x92\n\xd2\xba\x83x\x8b\x9b\x1e\x9a+\xce\x9e4_\xef\x8b4W\xbd;06mS\xe4\x8f\x0f\xd6\xd0\x8c\xbb\xa8/\x13\xc6=\xda'\xb4O\x0f\xdf>U\xfb\xa2^\xee\xcb4\xa1\xe2\x8a\xe3\xf6\xc8\xaf3T\xdc<\xbc\xdf\x17\xf59{\xa13QY\x06\xac\x1c\xe0\xe5T\xec\xa8JI\xb2\xedc\xaa\xe2$\xee\xa0,\xb5%\xcb'\x1e\xac\xc5\xe8\x94\x160z%\x89\xc8\xe2\x98o\xdb?\xf6\xca_\x96\xfb\xc4\xcf-\xcf\xcd23\xf6\xac\x8a\xe3\xe3\x18\xafq{\x00\xeaEF\x7f\xe2\xeb\xc8\x10\xabB{5\xfa\x15\xed\xd5-\xd8\xabP\xec\xf4\xb6o\x82\xe7\xd7\xd4U5\xcf\xcc\xe1r\xd4\x0f\x0c\xd8{\xfe\xe6{\xf1\xe6\xe7\xed(\xb7\x0e3\xfb +\xe9\x0d)\xd7\xcb\x92\xd4q\x0e\xb3&_\x89\xcd\xear-\xe3V\xa2\x8a\x91)\x0d\xe8\xda\xb8\xaf\x03\xc7\x1c\x04?\x1f\xbb\xb1\x06R\x11t_$\xdbe\x9blLc\xc0<\xca\xea\x942Kq;\xf2i)G\xb8\xf5\xaap\xe7\x84\xd6f\xfd\xc0ec\xf4+.\x1b\xb7\xb0l\xc4Zr9-\xc5\xb0_\xeei\xb9d\x87b\xbbe\x7f\xc7\xdf9\xe3\xaf\x9c\xd3\xf2\xbc(\x14\x9f\xe5\xe1Z\xf6\xb6Q}\x99`\xd7\xe3\xef\xbb\x14\x97r\x8a\x9b8\xa3\npf\x17\x92_\xb0\xdc\x83=\xe5\x0bb\xc4<\x10eF\x9bk7\xc64'r\x1a\x85\x99\xe2\xe5\xa1\xb8,\xf5\xe5s\\\x96>\x8b\xd3\x8c\xf8\xab\xc7\xc2'\x8e4\xb8\xde\x0d\xe57\xbb\xde\xa1\x89\x1c\xfd\x8a&\x12M\xa4\xeaJ\xb7\x8d|\xf8\xee\x9e\xae5}\xb9\x8f\x81ie\x16:\xc7\x95\xdb\xc4z\x14\xe24\xb3>\x866\xfe;hlG\xbf\xa2\xb1\xbd\x05c\x1bk\xffz3\xact\x18\xc0\x0b\xf6\xe8{\xf1\xa4\xfc\xfd\xc1Z\xc0A\x83\xfar\x1f\xe3e\x9a\x0dLl\xa4j\xed\xdbhqF\xbf\xa2\xc5y\xa8\x16\xc7\xd31\xdb7=\x9f\x89c\xd6a\x81\xee\xf8\xacj1\"hB\x94\xa0 \xb9c\x13\xf2Y\x9c\x10\x9b\x8a\x96\xc2\\\xd9m\xd4\x87\x8a\x96\xdcD}\xa1*\xf7\x90-\xd3\xbc\x86\xc9\x98\\\x02\xdccc~\xf7V'\x1cE\x9fX4^V\x87\x86\xf1!\x19F\xfd\xbd\x9a\x93L\xe3C\xb5\xba\xbd\xad\xa2\xdb\xf6v{\xc4/T=?K\x03|\xb7\xa3\x7f\xda\xd9\xd4\x1e\xf1\xebx\xdd\x8dT\x03\xbc\xa6I\x18\\\x0dk\x9a\xa4;\x92Y\xaak\n^\xb4b\xd9\xafi\x12\x88e\xdb\xd0l\xc4\xb3q\xc5\xf9]\xaf83,\x0b-W\xd2si\xf8\xa0\x9e\xffB\xd5\xf7\x81.\x0fi\xbe)\x1e\xc6@\xb5n\xeb=F\xda\xa4\xe5\x01\xdc\xdb\xfb\xa9\xcb\x97\x18BK\xcb)\xc1\xa3\x10<)\xf4\x04\xed6\xdam\xa3\xdd\x0e\xb0\xd8\xbf c}\xe7\xae\x94h\xd2(\xb8mm\xbc\xef\xd9me\xbd\xeb\x86\x16\x16-\xeco\xdc\xc2>@_\x0c\xf7W\x0c\xe2\xab\xf6Ee$I]}&\xb9\x00\x04@\x174WL\xf6u\x82\xb9\x8f7\xab\xd1\xc6\xde\xedw s\xb9|v\x11\x02B\xec\xdc2\xab\x06-K\xa5\x9dI\x16^*\xaeq\xa3_q\x8d\xf3\x99\xc1B\xce\xe0\xc3\xbb\x1fNKZ\x15M\x99\xc8{=y\xf2\xd0&O\x7fihv\x806\xc0tp\xe1\xb8\xb1\xc0zp\x11\xb99\xab\xe1\xf8\xfevuc\xb9\xc83'\xda\x06\xbb\xa6\xaa\xd5\xa5\x94\xa0\xbd\xceDHFIu\x94\xe0\xa0\x93\"\xa7\xf0\xe8\xf4\x11OcH\x92\x9a\x96\"\xf9 \xbf\xa1\xb4\xa2\x97\xe2\"\x7f\x91\xe5\xf3\xc3\xbb\x1f\x1eW\xe3\xf4\xafC\xe1\x95j\xef)4\x7f\xb5\xd6\\\x9e\xca\xf5+?\xc55\xf9\x84T\xa0\xbf\x17E\xc8GV\x15\xe3=~\x1f\x9f\x8a\x96\xf0b\xabm\xd1dkXQV\xa0\xa9<\x02 \xc9\x8b\xcb\x0f\x0b\xf8\xbe\xb8\xa1\xd7\xb4\xe4w\xcf\x1a\x0b\xfb\xf0\xee\x87J.@\xf2F\\K\xa6NfA)|\xdc\xd6\xf5\xfe\xe3\x89\xf8\xff\xea#\xbf\x0f(/\xe4\xaf'|4&$\x87\x82\xcfN\xa6\x11s\x81\xb4\x86f\xcf\xd6W\xe3\xf5\xb6\xe2\xb1\xf2\x9a\xdf\xc4Kj\xd8\x91}%\x86\x16\xafy]\xb4\xd7O\xf2\xd5\x9a\xdfnY\x01\xd1\xdf\xe3\x0f\xdc\xb2fYqS\xbd\xb0\xf4\xed\x1f\xe0\xcd\xa6k\x11\xbf\xb1G^\x80\xdc6\x9a\xaf\xdeU\xd5\xec\x067&\x1e\x17t\x96\xc3\xf7\x17\x17\xe7\xf0\xdd7\x172\xbb(\xbf\xc1\x98\xcf1~\xdb/\x10\xe3\xdbG\xf7i^\x1c\xf6\xf4\xe7\xbf\xffl|An\xfe\xd9x\x10\xe3M.#\xbc\x87\xf6e\xb1n\x12\xca\xf6\x1c| \x1bo\x06:\xf9\x03\x9c\xed\xf7Y\x9a\xc8\xc4\xf5\xa4\xa4l|\x167\"\xb7hB\x12f[\x8a\xe2\xaa\xd9\xb3u\xb6\xc9\xea\x8a\xa7\xaf\xd3_\\\x0c\xdc>Y\xf3\xc4\x82\xb8!\xb9(\xc5\xe5M\xf5\x96\xeezsh-&\x11QMb\xff}]\xa4l\xd7e\x1eX +\xc8\xcdG\xc9\xef\xce8Q\x05\xb0rI\x9d\xf2;\xa0\x0e\x90S\xaan\x94\x04n\xf2\xcakKKx[\x92-\xc9/)\x7f\x89\xcf\xd9\x05<\xf9PQ\xb8\xa6e\x95\x16y\xff\ni1>IN.m\xad_\x95\x94\x9f6T\xc1\x8b\xa7\x96\x0c\xbdEM_@\xcd\xd6\x90M\x93'b\x86\xb1vH\xdb\x954eI\xf3:;\x00\xb9&i\xc6\xce26s\xc9\xc6c\xb1\xd9\xa4IJ2\xc7Z\xb6j6PR\xb6\x12Q\x9e\x8a\x96\xd9\x1f\xf9\xd1\xa6R\x17\xc9\xa8yi,jE/\xd3\x9f\xbdA\xf2\xc3~\xb5\xf8\x89\xde8\x1a\x90n\xf8\x1b\xff\xed%\xe4if\x1dzV-[&\x88\xfd\xbdQ\x03-\xc5\xc8\x9a\x8a\xb6->\xe4;RV[\x92]\x14\xc2|\xcc\xd5\x0c\xedo\x17\xfc\xf6\x94\xe4\xaa]\xa9\xd4\xd9\x10V\x87n\xa7\xac\xd6\xd6\x9b4\xcb`\xa5\xdf\x96J\xc7&\xdb\xb4\xe9?\xf5X\xb3\x0b>\xdd4Y\xb6\xe0?\xb0\x13\xc6c \xbd\xbd\x00\xdb'\xc8\xcc\xc8\xda\x02\xc5\x98\xd3\x7f\xac]x\xf3\xec\xa0\\\x01G\xfe\x9d\xf6d\x03dS\xd3\xd2\xf8!\xeezz|\xfaX\xff)\xb9cPU\xe6\x0e\n\xa0r\x8e<\xda\x14\xc5bEJ\xde\xd8O\xa7\x87\xc5?\x1e -\xf2\xe3\xb2\xb6<\xb3\xf7\x80W\xf5\x11+\xc3\xb4Y\xf8\xf7\xf7o\x7f\xd2\xff\xf2\xf2\xe5\xcb\x97\xe6!\xc0\xde\xeb\xbcd\xdd\xc5 \xb9\xdc!\x8a\x93xS\xb5\xd7\x8c]6\x191\x9c:\x8e\x8ba\xaf\xaci\xb7\xa7;\x01\xba[\xd1\xf5\xba\xdb\xdd\x9d\x88\x03\x94\xae8b\xf0\xb7\xf5\xf6[\x02\x81\xf8\xf8oLs\x1f\xa5\xfb\xa7\xdd\xd3\xf6\xfbF??\xa4={a92\x92\xe4\x8a\x19\xb5\xce\x85\xb1I3j^\x88\x94\x11<\xa7eU\xe4\xd6Y+}\xa7\x9b\xb4\xac\xea%\xef\xe0\x97\xf0\xcc\\r\xfb\x02\x1b\x93\xea\xf9\xe7\xe1K\"\x80\xb5V\x8f\xb8.\x1f\xbd\x80G\xbaI;T\xc3B\xb4\xf2\xd1\x89\xad<\xde\xbe\x9f\xc8\x8e\x95\xf9?E\x13\xfe\x97\xf5\x05\xd6\xbe\xd1\xf3\xa1\x8d|\xb3\x91\xa7\xd1\xe1X\x13\xa3!\xad\xe0\x86f\xd9\x97Wyq#p\xaf-\xbf\"\xc5B\xff5O\xae\xe1\x90?Q\x17z\x0d\xe6\x81\xb0\x9d\xbd\xea\xb0\x01l\xe2\xd9\x89!\xad\xff\xd8G>\x19\xd58\xdf\x16\xd9\xba\x0f\xb1\x89\xa9\x9c\xe6\xed\xfc\x907\xe8\xe8\x8b\x12SF\xff\x1d^\x85E\xbb\xda?afM\xa9\xf0\xc8\x99\xa7|\xdc?\xff\xfd\xe7\xa7\x96\x894\xc7\x98\x1b~\xd0>\xec\xb8\xaaX\x91\xcf\x16\xcf\x9f=\xaf\x1eY\x86\x90\xf8\x7f\x1b9`U\xac\xfbK_\x9a\x1f\xfd\xc9x\xf3\xdcLh\x1dB\xdc\xbfO\x88{L\xf4\xf8\xb1\xba\xf4\xa0y4y\x00\xd1\xe3\x83x\x18\xa9\x1e}\xf9\x0c\xe7\xc1\x9c\x016\xd1s$<\xb8f\xfa\x1cQ\x824\x90\x88 \x854\x10\xa4\x81 \x0d\x04i H\x03A\x1a\x08\xd2@\x90\x06\x824\x10\xa4\x81\xe8\x05i Z\xf1\xdd\xba!\x0d\xa4\x15\xa4\x81\xf4\x05i H\x03\xd1\x08\xd2@\x90\x06\xe2\x1c!H\x031\xbf\x834\x90\x81 \x0d\x04i \xe6!\x804\x10\xa4\x81\xf4\xc5\x17\x92G\x1a\x08\x17\xa4\x81 \x0d\x04\x90\x06\xe2\xf4\xa9\xdc\"\xfc\x1d\x86}\xff\xc6h ;R^\xd1\xba\xe5\x7f\xd0O\xc2\xf7\xba\x94\x85\xf2:\x8a\xf7M\xa9\x9a\xbe\x91\xaf\xbc\xeb\xbd!\x9f{\xb0d\x10K3\xfbR\xdf\x03&\xbc\"\x15]\n\xefur\xb0; \x8d\xdf\x00\x8f\xef\x80}:\n\xf1pt\xba2\xfc\x81_1\xeei*d\xce\xc9*$j\xca\x1aK\x93K\xa9-\xed+\x04L\xdf\xa1t\xc3\xd6x\xe3\xbaU\xd9\x9c\x91\x82\x06=d\x8cD\x8d\x8e\xdb4\xe8B\x06J\xf8\xaf\xb1\x12xR'\x9d]~'M*\xab\xbf8\x8d\xc9\x7f\xf3\x8d\xed\xa6\xd0\x1ddya\xa7\xba\xd2\xe0\xdd\xf9+\xd9\xa2\xaev\xc8R\x1a\xfd\x8a,\xa5[\xc0\xd2\xdci\xccF\x1b\x1b\xbe;?\xde\xc9T\xcdnG\xca\xc3\x0b8\xe7\xbf\xf3\xdcj)\xb3\x1aY\xd6\xdb\xd0\xabq9\xd8\xf7\xfc\xc8? \xde\x93\xbf?\xd8\xfdN\xbf\xf5}\x19TF<\xd4\x1a\xce\x9a\xfb\xf7\x94\n\x943fW\xac\x9bL\x03\x1aNXC\xdaUM\x7f\xaf/\xf8\x0c\x12\x07\xdc\xbaK\xf3eU\x13AuXV\xfb\x92\x92\xdb\xba\xae\x97|Z\x964\xa1\xe9\xb5\xee\xb4\x05\xb6/\xd8\x176>\xc2\xc5h\xf3\xb2\xe2\xd2n\xcbq\xfd\xee\xfc\xd5\xa8<\xb4\xdbh\xb7?\x03\xbb]\xdd\x90\xbd\xd9j\xbf\xbf!{(i\xdd\x94y\x05U\xbak2\x8e\x9d\xb3\x97\xda]\x9dxe\x98\xa1\xf2\x86\xec\xe5\xdf\x1f\xac\xc9\x16\xadZ&E\x9a\x9b\x86S\x94\xb5\xc5\x1d\xfb\x03\xd8\xb1\xeb\xad;\x1b\x96!\xb6\x9d\x8f~\xb4\xech\xd9u\xbf\xdf\xb5e\xb7\xb9\xbf\x8b\xcd\x86\x96\xdc\x94\x99\xc6`\xf7\xc4`\xff\xc9\xff\xb0\xa2i~)\x9e\xa0kx\x92.\xe8\x02\x9e}\xc5\xa5\xc9\x9a\x9c<\xed\x0f\xd2\xc9 \x92{\x89\x9d\xab\xab\xe58\xff\xf2\xa0\xd2\xed\x03\x83:\x8b\xbf\xc8\xed2o@]\x88\x15ih\x12&\xd7\xd4\xb8\x96&E\xb5+\xaaS\xd2\xd4\xdbv\x1d% \xbf\xfes\x99\xe6\x9b\xe2\xf4W\x99\xb3\xfa\x9f\xe6\x95\xf5L<\xff&\xdf\x14\xdd\xa1H\xfc\x8d\xe7\xbbWV\xb4\x82\xa4\xd8\xed\x04V\xc4\x0eM\xea\x99\x9a\x13\x82e\xa9\x03\xad=~\x9f\xe6 }\x01\xa2\x96_V\xeb+\xf8j\xf1\xe7\x7f},\x9f\x1d,\xd4\xbdZ|\xa14\xf4@\xd7k\xfd%\x00\x83\xaap\xbdI\xbb\xae\xd7e\x0b\xfc\x89\xa5\xe4kRQ\xa9\x82YO\\S\xee\x17\xd87\xab\xe5\x155x\xa6\x1dv\xcdU/\xf0\xb0m\xce\n\nq\xef9\x94DEFY\xca;\xe2\xa1Z\xa8L\xf3FG9\xe3\xa3\xe6\x8e\x90\xf2\x8f\x91\x9a)J*.N\xcaR\x1cS\xa8w\xa4\xd4\xe4X\xa9\xb9\xa3\xa5\x02\xe3\xa5f\x8e\x98\n\x8b\x99\n\x8c\x9a\xb2\x8d\xe16\x9e\xca7nj\xe6\xc8)\xaf\xd8\xa9\x19\xa3\xa7\xa6\xc6OEEP\xcd\x14C\x15\x13Ee)\x8c\xc7W\xb9\xe3\xa8n%\x92\xea\xf6b\xa9n%\x9a*,\x9ej\xf6\x88*\xdf\x98\xaaY\xa3\xaa\xfc\xe3\xaa\xc46\"(\xb2\xcaR\x96\x88\xb9\n\x88\xad\x9a1\xba*<\xbe\xcai\xa3\x9fzDX\xcd\x10c\xe58\x87z\xee\xf4<\"\xadB\xb6\x83\xc1\xd1V\x96\xb2x\x1c\x96G\xbc\x95o\xfdf\x8c\xb9\n\x89\xba\x9a9\xee*.\xf2\xca6\x82*w\xecUt\xf4\x95\xa14\xf65W\xfc\xd5\\\x11X\xdeaD\x1eQXAqX\x8e\xc0\x80\xa8X,W\x99F\xda\xf1L\x11Y\xe1\xca\xf4\x8f\xcar\xb5-\"2+26\xcb\x1a|\xe2\x11\x9f5o\x84\xd6<1Z6J\xfalqZ\xde\x91Z~\xb1Z\xbe\xd1Z\x1e#'y\x14C\x10X\xcc\x86\x19\x93P\xd2\x85\xb8b6\xcc\x00\x94\xd5\x13c\xf5AX\xfd\xf0U\xcc\x86\xc9%\x06Q\x0d\xc0S1\x1b\xe6\x0c\xf8\xa9\x13=\x8d\xc5N\x8d+'f\xc3<\x12\xcc\x86\x19\x81\x91\xba\x11\xd2P|4\x00\x1d\x0d\xc6F\xc3\x90Q\xcc\x86\x19\x86\x85b6\xccVn\x03\xff\x9cc\xcc\x05`\x9f\xfe\xc8\xa7O6L\x19~\xd8+c\x18V+~\x1eGJ\xaa?\x8bA<\x8e\xa4\x1da\x17\xc6t\x9a\x1agEL\x1c\xad%\x93\x90D8\xab6/\x05\xf7\xe2\xb3\xf9\xf3)\xadj\x8e\xcd\xcb'\xb4\xe1\xb1=\x07\xc3\xdf\xb64\x87\x84d\x19]\xc3\xa6,v@r\xe14\x12IxN\x84\xc3\x8f\xc7\x10K'PR\xe4U\xc3\x96a\xd8\xa6\x97[\x99\x00\xa1-\xaf\xd8t\x03\xea\x92Tl\xbfT\xf3m\xcb\xa5J\xaf\xd0\xa6JH\xf3\xa4(K\x9a\xd4\"\xc8\xaa\xbfLjq\xd9?\xc9\x9fu\xd1\xbb\x0f>;\xd2\xb0O\xfbR#\x0c\x8a0\xe8@\x10\x06E\x18T/\x08\x83\"\x0c\x8a0(\xc2\xa0\x08\x83\"\x0cjx\x04aP\x84A\xc7\x820(\xc2\xa0zA\x18\x14aP.\x08\x83\"\x0c\x8a0\xe8X\x10\x06E\x18\x14a\xd0\xb1 \x0c\xaa\x7f\x01aP\x84A\xef\x01\x06\xed\xa4N\xeb\x8c\xbeh\xb1&\xee\x98\xd1\xa2\x82\xa37;t\xeex\x1f6\xba\xbe\xa3\x85\xf1\x86Wx\xb4\x7f\x96+\x8b\x0eI\x13bE\xae\xec\xb8UN?\xd5\xae\xbc\xb0\x1eQ\xa7F\xcf\x88=\xf6T\x89\xaa\x85\xc2\x8e\xd9\x7fJ\xef%\xa9*\xe1\xa2='\xe2\x16#Z\xd5\x0b\xf1\xbb\xa10\x01\xac\xb2bX\xb1L\x91\x14vEU\x03\xe5>A\xeeH\\\xc0\x9b\xba7\x15\xf7\xf5\x01RK\xca\xa8\xce!\xb7+J\xaa\x1c\xc4\xbae\xc4pU\x17\x84(\xd3\x18\"\xdc\x8eF\xa3\x83\x89\x7f\x9ek\x91\xff\x87\x88Xfk\xaf\xf2i\xf7\x1c\xa8\xa6\xf6\xf6\x15-\x02\x9fya\xa6\xd9|C*\xa8h}\x02i])W}\x05M.\x06\xf3Z8\no\xd2j8><\xd2\xea+\x18:$\xb5\xfe\x99~2\xf6/\xbc\x1a\xb7\xc3\x8a\x8bc\xbc2\xc6+k\xc4\xc7\xa7\n\x08\xd4#Po|\x12\x81z.\x08\xd4\x1f\x0b\x02\xf5\x08\xd4\x9b\x04\x81z\x04\xea\x11\xa8G\xa0\x1e\x81z%\x08\xd4#P?\x960\xe5!P\x8f@=\x02\xf5\x08\xd4#P?\x14\x04\xea\x11\xa8G\xa0~,\x08\xd4\xeb_@\xa0\x1e\x81\xfa{\x00\xeam\xf1\xca\x1d\x84\xbe\xb8\xa2\xfdE\xd0\x06JK\x14\x9aH\x13*\x82\x81\xb9\x1bP\x02\xa3\x12\xdak!k\xee\xbc\xbb\x1cy\xb98\x06\xcd\xa6\xbd\x0b\x86~\xcb\xd6\xbb\"\xe7\x07\xe9b\xb3\xa9h\xcd6\xf1\xc3\xeaB\x0f|\xe0A\xbd\xdd\x0f\x93/#\x06\x93\xd7D\xa3DQ?\x93\x1eG\x1e\x0b\xd9\x18\xae\xca\xbc\xd9\xd12M\xd4\xdf\xf8lKH\xce\xda#\\F[\x9a+\xc57y\xeb:\x1c\xedg\xdf\xf0\xd22ZU\x9d\n\x85_\xab\xa9\x98\xaa\xafh\xa0>\x87\xc5\xdf\xb2rG\xa0\xbeF\xbdY\xbaK}\xb5\xcb\x9fU\x80\xb8 \xeb\x17n\xe5\xfe\x08\x96\xf0y\x93\x8d\xe0f\xe1\xaf\xe9\xff\xe9\xcd\x062\xba\xa9\x157B\x92%\xd4\x9e\x91{\xc4\xc5\x04\x11\x1faz^\x1d\x80\x92d\x0bd\xbf\xbfG-\xf6\x19\x0b\xdd\xfb6]\xf6\xde`\x1a\xe5#\xb4\xe0\xf9\x07\x80;\\\xf3u\x9a\x90\x9a\xb6\xd8\x98\xd4 \x7fP\x0e\xa4~qi\x9ed\xcdz\xb4#$\xe2+-89\xea1\x0eu\xf7|\xe6\xcct\x0f\x08@\x83\xc2>\xbc\xa9F\xbd5j\x02\xdfD\x97\xb4\x92\xa4\x04>\xbd\xba\xf9\xc8\xa6\xdcB\xce\xa6\xf42/\xca\x11\xe2\xa0f\xe3\xf0\x13B3S;vU\x14\x19\xed\xdd\x12\xab\xe9\xc0\x92^\xd3r\xf0\xaa\xad\xf3\xe4\xd3\xe3\x8eK{\x8c\x97\x92\xeag\xc2\xa0\x1c\xf6\x0d\x9as,\xb6(\xd7\xb4\x1co\xd8\x1d,\x919\xb4\x11\x95\xcf\"\xe0N\xf8.\xb1\x85\xfc\xb7det\x97\xb3\xca\xa2T'\xeb\x92B|\xa1Z\xf6\xb0sB\x98\x98&Q\x1c\xb9\xdaJ\x18q\xc2\x12>~\xfd\xd9\xa9\"~D\x91\x18\x9a\x88\x9d\x0e\x12E\x06\xe1\x9f0\x14\xe8\xa4\x82\xcc@\x04\x89\xa4\x81\x98o\x8e\xf1\"\x81L\xa2\x80D\x11@\x80\x18/\xab\xaa\xfd\xe8\x1f1\xe4\x0f\x1b$\xebE\xfd\x98\x99\xf8\xe1E\xfb\x98\x91\xf4\xe1\xa4|\xccD\xf8\x98B\xf7\x08&{\xcc@\xf5\x98\x99\xe8\xe1\xa0y\xccN\xf2\xb8\x1d\x8a\xc7\xec\x04\x0f\x7fzG\x1c\xb9\xc3\xa2t\x17\xb5c6b\x87\x1f\xadC\xe3\xa5\x98B\xea\xf0\xa5t\xccD\xe8\x98\x99\xce\xe1\"sL\xa4rX\x88\x1c\xce\xfd\x92\x93\xc4\xe1\xb7\xa1\x9a\x97\xc0\xe1\xa2o\xb8\xeb\x14G\xddPK\x8d\xa6@\x17qcF\xda\xc6\x04\xd2\x86\x9e\xffe\xa3l\xccK\xd8\xb0\xd35\xe6 kx\xb1\x0d\x1cD\x0do\x9a\x86\x193\x0c\xa7h\x98\xcb\xd2:\xe8g!g\x84(\xcb\x97\x98\xe1\xd6\x897)#\x82\x92a\x02\x8a]t\x8c\xf9\xc8\x18\xd3\xa9\x18z@f&\x1a\x86\x17 \xc3M\xc1\xf0!`X\xb5\x1dJ\xbe\xf0\xa5^\x98\x88\x173\xd0.\x02H\x17\xe1\x94\x0bo\xc2\x85\x85\xa7`\xac\x8e\xe5\x1d_\xa2\xc5<4\x0bk\xe55\xbfD\x11,\x94c\\S\x9e\x81^13\xb9\xc2L\xad\x88%Vp\x97\x8d\xae\xe2zZ\xc5\xbc\xa4\n\xd3\xc9\xdcE\xa80!\xbe&2\xc5\xbcT\x8ax\"\x85\x814\x11E\x99p\xd2#\xc2\xc8\x11\xde\xd4\x88@bD\x08-\xc2H\x8a0\xd7\xc6\x17\x9c\xf6#D\x04\xd2!\x02\xc8\x10\xda\xa6\xcdK\x840M\x8a $\x08\xad\x1f\xc9H\x81\x88#@\xd8\xc8\x0e\xf3S\x1d\xa6\x8f$o\x9a\x83/\xc9a\xb80\xfa\x07LG\xc4K\x8fJ\xeb\x87Kw\xdf\xc78\xe8\x81`\x1c\xb4kPv23\xb8\xe5\x0bo\xc5\x01\\\xc6\xc20\x0e\x1a\xe3\xa0;\x89\x81\xc2\x8c\x85a\x1c\xf4\xb1\xcc\x04\x8bM\x03\xc6\"\xa0\xb1Y\xc0\xb1\xd9\xe11'@v\x0b\x10\xd9m\x81d\xb7\x00\x93\x85\x00e\xb1P\x99\xd5\x86\xbb\xc0\xb2\x19\xe12_\xc0lv\xc8\xcc\x1f4\x9b\x0d6\x9b\x1d8sCg\x93\xc13\x8c\x83v\xd6,\x0eL\xd3\x16\x85q\xd01\xb0\x9a\x0bX\x9b\x07Z\xf3\xc4\x8b\x9c\xf0Z\x00\xc0\xe6\x8c\xe1\x0c\x04\xd90\x0e\x1a\xe3\xa01\x0e\xba/\x11P\x9c?\x18\x87q\xd0J0\x0e\x1a\xe3\xa01\x0e\xda\x1b\xbc\x9b\x02\xdfi\x8b\xc38h\xed\x0b^\x80\x1f\xc6A\xcf\x07\xffa\x1c\xf4dpp\x9e1\xe7\x0d\x10\xfaC\x84~q\xd0\x9e\xf76\xf7\xb3\x8f\xab\xbf\xd5\x85L\xa7\xbd\x19\xba*\xef\xf4\xeafQ\x97\xe5\xea\xb0L\xd7\xa7\xbf\xa6kw\xa8\xdb\x99x\xe5\xeb\xc3\x9b\xd7GQo\xaai]\xd4\x9b\xfcA\x84c\xaaV\x0eT\xf4X\x1b\xfe\xf7\xd7\xc5\xf3\xc7\xf2i]\xa8\\\xaf\x12_(\x15=\xec\xa8\xb9\xa5\xd4M\x00\xa6\x19\xa6&Y\x98!\x89y\x1f\xc4\xee)\xcf\x89g\x8f\x8a\xd1\x8d\x81}\"wV\xed\xb3\x88g\x8f~E<\xdb\xcf\xf5\x08\x88g#\x9em|\x12\xf1l.\x88g\x1f\x0b\xe2\xd9\x88g\x9b\x04\xf1l\xc4\xb3\x11\xcfF<\x1b\xf1l%\x88g#\x9e=\x960\xe5!\x9e\x8dx6\xe2\xd9\x88g#\x9e=\x14\xc4\xb3\x11\xcfF<{,\x88g\xeb_@<\x1b\xf1\xec\x07\x86g\xa7}{m\xcb\xe5\xfd\x9a\xf5|\xc2\x0e\x80'|\xedQ0g\xba\x864\xafjJF=\xcb\xfe.\xf1\xef\x01&\xdcz\x02:T|E90\x9e\xd2\xb5\xc4^6G\xeb\x88D\x16\xb8\xf7qE)\x1b\xdc2\x7f1<\xc9\xd2+\xee\xfe\x1c}\xa8z*\x9c`r\x8c\x0e\x8ak\xf6k~\x94\xad\x0bU\n\x1b\\\xb0i\xea\xa6l\xdd\x84mM\x9bz+\x90\xfb\x19Q{\x18\"\x88\x9a<\xcc\x9d\x82={\xa8\xdf#\xe1\x9a\x1f\xf6\x9e\x16|\xfe\xd7Q\xf3CS\xf4\xfae\xa2\x0e\xe23\xach\xb2\xfd\xd3s3\x87\xe1k\xfe\xfbyI7\xe9'\xd9\xd4\nV\xbd?\xca\x17|\xa0w-?\xe1\xeb\xe3\xb2\x1e,3A\xb4{\xb9\xe7\x95\x0d\xc0\xa6\xedN\xb7\xbe\x06\x9c\xf4\x82a\x87\x94\xfbdTX\xd0\xc5\xe2\x7fm\x1fB\x02\xc2\x91\x1e\x91\x80\xe0\xe3+\x06$ \x01\xc1\xf8$\x12\x10\xb8 \x01\xe1X\x90\x80\x80\x04\x04\x93 \x01\x01 \x08H@@\x02\x02\x12\x10\x94 \x01\x01 \x08c S\x1e\x12\x10\x90\x80\x80\x04\x04$ \x01a(H@@\x02\x02\x12\x10\xc6\x82\x04\x04\xfd\x0bH@@\x02\xc2=\x10\x10\" \xdd\xf6.\xd6\xe5\xeaPS\xeb\x8d\xac*6\xb9\xa6\xd5E\xf1^L\xe4\xa4\xc8\xafiYW\xed}\xadg*R\x9d=\xc6zo\xe0\xa2\x88\x86\x7fu\x1f\x97\xcf=X\x18X)Vh \x00\"\xb4\xfb>t\xaap\xe2\xc1\xfa2d'v\x91\xe6\x08\x08\xf7_@@\xd8\xf0;\x02\xc2=A@\x18\x01\xe1N\x10\x10\xae\x11\x10\xd6\x0b\x02\xc2J\x10\x10F@\xb8/\x08\x08# \x8c\x800 \x8c\x800\x17\x04\x84\x11\x10F@\x18\x01\xe1\x9e <\x10\x04\x84\x11\x106\x0f\x01\x04\x84\x11\x10\xee\x8b/8\x87\x800\x17\x04\x84\x7f+\x80\xb0G\x86u\x81\xfb\xf6J\x9a1\xe0\xba\xe7h\x98\x04M\x8b\x0f\xb8\xb1i\x81g^\x14\x1c\x1b\xeda\xd3\x12\x93\x96\xb6\xa6.\xa0\xdf\xe6\xa9\x98\xf4\xe0\xa3\xf2\xb9\x07\x8fIs\x05\x04\x81\x94\x16\xf7\x91\x17^=P\x93\x13\xaf\x1e\xa0\xdc\xa3\x02\x11\xae\xd6\xbf\x80p\xb5\xe1w\x84\xab{\x82p5\xc2\xd5\x9d \\]#\\\xad\x17\x84\xab\x95 \\\x8dpu_\x10\xaeF\xb8\x1a\xe1j@\xb8\x1a\xe1j.\x08W#\\\x8dp5\xc2\xd5=A\xb8z \x08W#\\m\x1e\x02\x08W#\\\xdd\x17_\xe8\x10\xe1j.\x08W\xff\x9e\xe0\xea#\x97\xc1D\xbc:\x08\x98\xde\x15\xeb&\xa3K\x99\xef\xbb2\x03\xd2?\xf2\x07ePt\xd5\xdd\xe7\x9debV|J\xab\x9a\xa36\xfc9\x95@\xbcu\xa4Dc\xd2\xc3\xef~\xa1\xd4\xf1P\xd1\xe8\x81\x1e\xfbR#\x94\x88P\xe2@\x10JD(Q/\x08%\"\x94\x88P\"B\x89\x08%\"\x94hx\x04\xa1D\x84\x12\xc7\x82P\"B\x89zA(\x11\xa1D.\x08%\"\x94\x88P\xe2X\x10JD(\x11\xa1\xc4\xb1 \x94\xa8\x7f\x01\xa1D\x84\x12\xef\x01J\x14b?:s\xa8o\x88\x98\xb9\x03\x13\x8f\xbb\x80\x17s:B\xfc\xde\x9d\xbf\xc2 E\xcd\x0b\x18\xa4h\xf8\x1d\x91\xc5\x9e \xb2\x88\xc8b'\x88,\xd6\x88,\xea\x05\x91E%\x88,\"\xb2\xd8\x17D\x16\x11YDd\x11\x10YDd\x91\x0b\"\x8b\x88,\"\xb2\x88\xc8bO\x10Y\x1c\x08\"\x8b\x88,\x9a\x87\x00\"\x8b\x88,\xf6\xc5\x17\xe5Ad\x91\x0b\"\x8b\xbf\x15dqJ\xc0\xe0\xe9\xafl>Z\x12\xd9\x0eP\xc4\xaf\x0flx\xb7\xc1\x83\xac\x07\x87\xf1\x82\x90\xe6\x9b\x82-\xc3\xf2\xcf\xacpY\xa29*P\x94*\x1f{\xe8\xa1\x81&\xfc\xce\x00\xc5\xd9\x818;\x0c\xe7t\xf6\xf8xKf\x07\xe0\xfc\xe0\xb7\x18\xf0\xcd\x0e\xb2EAl\xfc\x13\x86\x02\x9d\x00\xdb\x0c\xf0Z$\xb8f\x84$\xfc\xa0\xb5I\xc0Z\x14\xac\x06$\xcbLZ\xf4\x03\xd5b 5\x9b\xa3\xdb\x0bP\x9b\x19N\xf3\x02\xd3f\x84\xd2\x9c@\xdaL0\xda\x14\x10-\x18B\x9b\x01@\x9b\x19>s\x80g\xb3Cg\xb7\x03\x9c\xcd\x0e\x9b\xf9\x83fq\x90\x99E\xe9.\xc0l6\xb8\xcc\x0f,\x9b\x19*\xf3\x05\xcaf\x82\xc9f\x06\xc9\\\x10\xd9D\x80\xcc\x02\x8f9\xf7KNh\xccoC5/,\xe6\x02\xc5\xdcu\x8a\x03\xc4\xd4R\xa3)\xd0\x05\x87\xcd\x08\x86M\x80\xc2\xf4\xa8\xba\x0d\x08\x9b\x17\x06\xb3\x83`s@`^\x18\x8e\x03\xfe\xf2\x06\xbf\xcc\x9e\xd8p\xe0\xcb\\\x96\xd6\xed1\x0b\xe4\x15\xa2,_\xb8\xcb\xad\x13o\xa8+\x02\xe82\xb9\xdf] \xd7|\x10\xd7t\x80K\xef\xe6\x9a \xdc\xf2\x82\xb6\xdc\xc0\x96\x0f\xace\xd5v(\xa4\xe5\x0bh\x99\xe0\xac\x19\xc0\xac\x00(+\x1c\xc8\xf2\x86\xb1,\xe8\x8f\xb1:\x96w|\xe1\xaby\xc0+k\xe55\xbfD\xc1V\n\xa2\xd2\x94g\x00\xadf\x86\xac\xcc\x80U,\\\xc5]6\xba\x8a\xeb\xc1\xaay\xa1*\xd3\xc9\xdc\x05S\x99\xfc\xe8&\x88j^\x80*\x1e\x9e2@QQ@\x94\x13t\n\x83\x9c\xbc\x01\xa7@\xb8)\x04l2BM\xe6\xda\xf8\xba\xfc\xfd`\xa6@\x90)\x00b\xd26m^x\xc94)&@KZ?\x92\x11X\x8a\x83\x95l\x10\xd2\xfc\x00\xd2\xf4\x91\xe4\x0d\x1e\xf9BG\xd3B\xd2\x04\\3S\\\x9aD\x94\xfa\xc1i]\xbd0\xeal \x18u\xe6\x1a\xac\x9d\xcc\x0cz\xf9\xc2^q\xc0\x97\xb10\x8c:\xc3\xa8\xb3Nb 2ca\x18uv,3\xc1e\xd3\x00\xb3\x08\xc8l\x16\xd0lv\xd8\xcc \x9c\xdd\x02tv[\xe0\xd9-\xc0g!\x00Z,\x84f\xb5\xe1.\x10mF\x18\xcd\x17H\x9b\x1dJ\xf3\x07\xd3f\x83\xd3f\x07\xd4\xdc\x90\xdadP\x0d\xa3\xce\x9c5\x8b\x03\xd9\xb4Ea\xd4Y\x0c\xdc\xe6\x02\xdc\xe6\x81\xdc\xc0\xff?Z\xe4\xff\xb2$ymA\xfe\xdf\xc9\xac\xb5YZqG\xf6\xc7\xb3\xa6\xde\x16e\xfa\x0f\x81\x07\x9c\x00/@x\"Y\x17\x8a\x7fR\xb6\xf6v\xff,\xb5\x14\x81\xef\xf8\xa7\xe5/\x0f\x96\x1e\xd0WP_\xea{\xc0\xe9H_\xf7v\xa7\x90\xf1\x1b\xe0\xf1\x1d\xf0\xc0\x04\xc1\xcf\xff\x04\x9en\x1c%\xa1\xf8\xa0\xb50\xbd?\xc6\xb2\xa5\x9f\x1b'\x047V\x08\x11x\xa1\xbd\x01*\x83\xaf\x0ff\x08s\xe1\x86\x10\x89\x1dZ\x0bd\xca\xf5\xc6\x0fa:\x86\x08\xc18\xa2\xb5\xa8.\xcb\xaf?\x96\x08s\xe3\x89\x10\x88)B(\xaeh\x1f\xd9-\xe6\xe8\x8b-\xc2\xdc\xf8\"\xf8a\x8c0'\xce\x08\x93\xb1F\x88\xc3\x1ba.\xcc\x11\xa2pG\xfbt \x15]\xbb\xb1G\xb8\x1d\xfc\x11n\x11\x83\x84\xdb\xc1!!\x10\x8b\x848<\xd2e\x82\xfd0I\x98\x17\x97\x84\x00l\x12b\xf0Iki\x02\xbb\x0c\xc0(aN\x9c\x12\"\xb0J\x0f{\xfe\xd4\x03\xaf\x8490Kp\xe1\x96\xe0\xbfw\xf4\xc0/!p\x8b\x19\x8ccZK\xe3\x18\xa7\x07\x96 \x01\xb5\x9c\x11\xd3\x84 \\\x13\xe6\xc66!\x12\xdf\xb4\x8f\xab\xca\x8dqB<\xcei,\x8f}\xd1\x85u\xc2lx'\xf8\xc3v\xe0\x83{B\x18\xf6 .w|$\x06\n\x1e\xe5Z\\~3\xe1\xa1\x10\xa5\\\x7f\\\x14U\xb3\xcc\xb3\xf9pX\xf0\xc1ba\x02\x1ek,\x90=h\xc3dan\\\x16\x9c\xd8,\xc4\xe2\xb3\xc6\xd2\x84\xeb\xc1\xee\x85q\xe3\xb4`\x85\x93\xc0\x8a\xd7B\x14fk,\xca\x8a\xe5B,\x9ek,\xcd\x92!Z\xc8|\xb8.xa\xbb\x10\x81\xefB\x18\xc6\x0b18/\x04c\xbd\xe0X\xca\x1d\xf8\x1b\x04`p\xbe\xb8/\xc4`\xbf\x10\x8a\xff\x82\xbd\xe118\xb0\xb1\xb0\x1e\xca\xea;e\xfc\xf0`\xeb\x84\xc8/\xed\x980\xcc\x8b\x0b\x83\x0b\x1b\x06;>l|'\x167\x86\x19\xc7n\x00~\x0cA\x182\x18w/\xf4\xd3>-=pG/2\xfa\x9a\xd4\xf4\xcb:\xdd\x99\xb4\\\xa7uF\xad\x1e\x12\xf62\xdcli\xde\xa1\xccb8\xf2zR>\x0b\xd4\xf0\xdc\x97MN\xd7\x0bxc>\xd9\xe7M\x96q\xf7`\xaf\xa7\x9f\xea\xe5\x15=L\x8c!\xf7\xbb\xbb\xcd0>\xbaZ\xa80r\xf6\x9f\x12\x1d!U%\xe0\xa0srI\xdf\xd1_\x1aZ\xd5\x0b\xf1\xbb\xa1\xb0_\x1aZ\nr\x08+\x96i\x92\xc2\xae\xa8j\xa0\x1cc\xe0\xe0\xc4\x02\xde\xd4\xbd\xe5e_\x1f \xb5\\\xad\xdb\x05\x1d\xed\x8a\x92*0J\xb7\xa5\xaa\x8b\x9a\xc4^\x1c\xec\xcc\x00\xe06\\\xfc\xf3\\\x8b\xfc?\xf2f\xb7\x12^f\x15\xb7\xd7\x0b\x123\xb5\xb7\xafh~\x1b\xc0\x92\x17f2\x1c7\xa4\x82\x8a\xd6'\x90\xd6\x95\x82\x06+hr1\x98\xd7\x02`\xb8I\xab\xe1\xf8\xf0\xc80 \xe8;^\x19\x06t\xaf\x9f\x9e\x0d'9^f \x053\x0d`\xa6\x81N0\xd3\x00f\x1a\xe8dVfP\x08+(\x88\x11\x84\x99\x06\xa6\xb2\x7f\"\x98?\xb3\xb0~\xc2\x19?\x98i`\n\xc3'\x84\xdd\x13\xc1\xec\xc1L\x03\x80\x99\x06|Y;\x98i\x003\x0d`\xa6\x01\xf0'\x868\x197\x01l\x1b\x9f\x18\xf5\x10\x96\x0df\x1a\x88 \xd6w\xb1h0\xd3@\x00[\xc6\x93)\xe3\xc3\x92\xf1c\xc8`\xa6\x01.1,\x98\x00\x06\x0cf\x1a\x98\x81\xe1\xe2d\xb7\xc42[\x8c+'f\x1a8\x12\xcc4\x10\xc1Hq\xb3QB\x99(\x01,\x94`\x06J\x18\xfb\x043\x0d\x841L0\xd3@+\xbf\xcbL\x03\xb6\xcb\x0c$\xec\xde+#\xcd_\x08\xec\xb7\xf7\xb7\xeeB\x83\x0d\xc9\x06\x10\xa4\xd6\xe10,\x9c\xdeN\xe1\xbb\xear\xa9`\xaa\xde;6\x0f\xc1[\xe9\xef>\x19\xbc|\"\x08*\x1c|\xe5\x03Z \xdf|\x95\x95,\x86\x1d\xa9\x93\xedx`_\xa6\xd74g%\x1dy+fleG`X\\\xd1\x83\xa9\x9d#F\x80\xa4\x00\x10\xb9\xc4\x95<7\x04w\xd3JTZB\xaf-_\x80;W/G^H\xde\x02f\x96]\x1c\x80\xb7LSE\xce\x1d\x1d\xc5fS\xd1\x9a\x1d\xb2\x86\xd5\x85\x1e8T\xd1zfm\x19\xbcZ\x1a%\x8a\xfay\x8e\x17\xd9\x18\xae\xca\xbc\xd9\xd12M\xd4\xdf\xb85LH\xce\xda#\\zl\x0cI\xc57y\xeb\xda\x1d\x9d7\xde\xf0\xd22ZU\x9d\n\x85\xdf\xb1\xa9\x98\xaa\xafh\xa0>\x87\xc5\xdf\xb2rG\x8c\n\x8dz\xf9\xad\x14\x9e\xda\xe5\xcf*>\x82\x89h!\xdc\xfe\xfd\x11,\xd9\x0bM6\xa2\x03\x08\x7fZ\xffOo6\x90\xd1M\xad\x88)\x92\xa9\xa2\xf6\xf4\x1c\xb1\x10\x13D|\x84\xe9yu\x00J\x92-\x90\xfd\xfe\x1e\xb5\xd8\xa7\x8bt\xef\xdbt\xd9{\x83i\x94\x8f\xd0\x82\xdf>\x03\x82\x86\xb6N\x13AB\x13\xd8\xa5\xd4 \x7fP\x0e\xa4~qi\x9ed\xcdz\xb4c'\xe2+-x<\xea1NE\xe8a\x1ali\xed\xd1\xafF\xc6\xe5\xc3\x9bj\xd4[\xa3&p\xf3[\xd2J\x92F\xf8\xf4\xea\xe6#\x9br\x0b9\x9b\xd2\xcb\xbc(G\x88\x90\x9a\x8d\xc3O\x08\xcdL\xed\xd8UQd\xb4\x97OA\xd3\x81%\xbd\xa6\xe5\xe0U[\xe7\xc9\xa7\xc7\x1d\x97\xf6\xe8F%\xd5\xcf\x84A9\xec\x1b4\xe7XyQ\xaei9>P\xbdO\xf3\x84\xbe\x00\x91_\xe8\xcbj}\x05_-\xfe\xfc\xa7Y\xb5\x11\x93\xd4\xe8Tn\x13N\x7f\x95\xff\xf1OQ\x82.\xcd\xd1w\xe2 \xc1i\x92\xca\xe8\xb3\x0e?\xf2_\x86\xb9\x8f\xd8\xa4\x96%\xab\xae\x1f\xf4\xc6c\xad^\xfe\xfaX>{\x9c\x0bI}\xff\x0b\xa5!L\x89\xe4$\x14\xc9}f4n%;0\xfa}L\xc9\x84)\x990%\x93E&\x92\xad \x98pe-\nS2aJ\xa6XR\x16\xc4\x11\xb3`.r\x16D\x11\xb4\xec\xd3\x01S2\x85\x11\xb6 \x90\xb4\x05q\xc4-\x97 \xf6#o\xc1\xbc\x04.\x08 qA\x0c\x91\xcbZ\x1a\xa6d\x9aB\xee\x02\x17\xc1\x0b\xfc\xf7\x8e\x1eD/\x08\xdcb\x06\x13\xbe\xac\xa5aJ&L\xc94\x92y\x88a\xe0\xcfo\x02\x1f\x82\x18\x84\x91\xc4\xc0\xc5[\x88$\x8b\x81G\xb9\x98\x92\xc9\"Qd2pf\x8aq\x93\xca`fb\x19\xccD.\x03L\xc9$%\x8ax\x06A\xe43\xc0\x94L\xae^\xc0\x94L\x13 k\xe0CZ\x83 \xc45c\x815\xa6d\x12\xe2&\xb4\x01\xa6d2=0\x1f\x01\x0e\xbcHp\x10A\x84\x8302\x1c\xc4\x10\xe2 \x98\x14\x07\x98\x92I+1\x849ca\x98\x92I \xa6d\xd2\xc8=\xa7d\xb2g59F\xc6\x81~\xaai\xbe\xae\x80\xb4\x99\x99\xea-\xac\x8az\xcb\x87\x0eY\xafKZU\x86\x982\xb9\x12\xa8\x9c>l\xee\xb4)|\xb4/\xbci\x89\x1bl ^\xd2\x9cVi%\xba\x84\xbf\xcd\x89\x07\xe2\xdfG\xef\x0f\xbc?\x92\x93g\xcb64\xbc\xe4h\xbc@`N!.\x98S\xa8\xfb\xc9W\x99\x98S\xa8\xcb)\xa4h0\xf1\xa9\x85\x86l\x1e\xcc,$\x053\x0baf\xa1N0\xb3\x10f\x16\xeadV\x82K\x08\xb9%\x88\xd8\x82\x99\x85\xa6\x92X\"\x08,\xb3\x90W\xc2\x89+\x98Yh\nQ%\x84\xa4\x12AP\xc1\xccB\x80\x99\x85|\xc9'\x98Y\x083\x0baf!\xf0\xe778\x89#\x01\xa4\x11\x9f\x9c4!d\x11\xcc,\x14\x93\x9c\xc7E\x06\xc1\xccB\x01\xa4\x0fO\xc2\x87\x0f\xd9\xc3\x8f\xe8\x81\x99\x85\xb8\xc4\x909\x02\x88\x1c\x98Yh\x06\xa2\x86\x93\xa4\x11K\xd00\xae\x9c\x98Y\xe8H0\xb3P\x04\xb1\xc2M\xaa\x08%T\x04\x90)\x82\x89\x14a$\n\xcc,\x14F\x94\xc0\xccB\xad`f!)\xf6\xe4?#\xf4\xa1\xcb.P\x97\x8d3\x87\x06&\xc5\x89\xcb8\x82IqnQ\xb9\xeet.\x98\x14g\x0e-bR\x1cL\x8a\xf3\xbbK\x8aS\xaa\xa48\xa53)N9J\x8acK\x89s\xd22\xe5\xda\xdc8-&817N\x89\xb9q\xc6\xe2\xa2\xc4`n\x9c\xe3g<\xe2\x9b}\x10\x1b%\xa1T kaz\xe8\xc5\xe2\xbd\x9b\x9b\x12\x04nZ\x10DP\x83\xec\x0d\xc0\xdc8\xb1t!\x08\xa6\x0cY\x8b\xc2\xdc8\x98\x1b'\x96V\x04q\xd4\"\x98\x8b^\x04Q\x14#\xfbt\xc0\xdc8a\x94#\x08\xa4\x1dA\x1c\xf5\xc8e\x82\xfd\xe8G0/\x05 \x02hH\x10CE\xb2\x96\x86\xb9q\xa6\xd0\x93\xc0EQ\x02\xff\xbd\xa3\x07U \x02\xb7\x98\xc1\x94%ki\x98\x1b\x07s\xe3\x8cd\x1ej\x13\xf83t\xc0\x87\xe2\x04a4'p!\xef\x91t'\xf0(\x17s\xe3X$\x8a\x0e\x05\xce\x94\x1dnZ\x14\xccL\x8d\x82\x99\xe8Q\x80\xb9q\xa4DQ\xa7 \x88>\x05\x98\x1b\xc7\xd5\x0b\x98\x1bg\"\xe5\n|hW0\x81ze,\xb0\xc6\xdc8B\xdc\x94,\xc0\xdc8\xa6\x07\xe6\xa3p\x81\x17\x8d\x0b\"\xa8\\\x10F\xe7\x82\x18J\x17\x04\xd3\xba\x00s\xe3h%\x86\xf2e,\x0cs\xe3(\xc1\xdc8\x1a\xc1\xdc8\x0f$7\xce\xea\xd0\xab\xdc\x91\xab\x1es\xe3p\xc1\xdc8\xddO\xbe\xca\xc4\xdc8\xbd\xdc8\xe5<\xb9qJ\xcc\x8d3\x14\xcc\x8d\x83\xb9q:\xc1\xdc8\x98\x1b\xa7\x93Y .!\xe4\x96 b\x0b\xe6\xc6\x99Jb\x89 \xb0\xccB^ '\xae`n\x9c)D\x95\x10\x92J\x04A\x05s\xe3\x00\xe6\xc6\xf1%\x9f`n\x1c\xcc\x8d\x83\xb9q\xc0\x9f\xdf\xe0$\x8e\x04\x90F|\xb2\xaa\x84\x90E07NLz\x19\x17\x19\x04s\xe3\x04\x90>< \x1f>d\x0f?\xa2\x07\xe6\xc6\xe1\x12C\xe6\x08 r`n\x9c\x19\x88\x1aN\x92F,A\xc3\xb8rbn\x9c#\xc1\xdc8\x11\xc4\n7\xa9\"\x94P\x11@\xa6\x08&R\x84\x91(07N\x18Q\x02s\xe3\xb4\x82\xb9q\xa4\x0cs\xe3\xf4O\xbf\x98\x1b\x07s\xe3`n\x1c\xcc\x8d\x13\xa7E\xcc\x8d\x83\xb9q~\x9b\xb9qV$\xbfjS\xe3\xacHF\xf2\x84V\xa7\xbfJ\xfe\x9d%)\xceY\x96}-\x1f\xe7UT<\x06Y\x06?\x93d\x19$\x05\xdb\xd9\xb3\xa1G\x80\x19\xd4\x8c\x02I\xf8\xc8R\xbdn\xea\x88\xbf\xb1\x11\x93\x90,\xa3k\xd8\x94\xc5\x0eH.\x00\x8d]\xb1n2z\"\xc0(\xc1\xea\x12\x00ER\xe4U\xc3\x8e\x88\xb0M/\xb7@v\xec3my\xc5\xa6S\xfe%\xa9Xo\xd6\xfcH\xdd1\xea\xf8\xe1\x84\x0d\xe0<)\xca\x92&\xb5\xc8\x7f\xa0j:\xc8\xc6\xd3k\xbf\xfc\xf9\xc1\xe6\xe2Q\xdd\xfa0H8k\x9a\x17\xbbh\xa4Gtj\xe4\xeb>8\xcb\xab\"\xed1.\xa1.\xaeh.1\x12Qu5Z\xd8A\x84\xe4\xb2B\xa6S\xfeOo/\xbey\xc1\xcf\xed\xe2\xb9n\x8c\x91\x1c\xde\xe4\xb5<\x1a\xb4\xa0Y\xff|\xa0-PxK\xf4\x1f\xab\xd2\xcb\x9c\xd4MI\xab\xd6H\xf0\xfcS\xc5e\xc17\xe3\xc7g\xea\x81B\xd40Q;\x80\xf6\xdfr*\x0b\xaaG\x9a\x1f!xS8\xad\xa3)\xd8m'\x90\xd3\x8a\x9c\xd6\xdf\x0d\xa7\xb5\xb7\x98\xc43Z\xfb+\xf2\xbb\xf3W\xe3F \xbd\x15\xe9\xad\x8eYy\x0b$\x0c\x9b\x97Fn2M\x03P\xfe\xac&\x82\xfag]H\xb3\xd7\xaeO\x9b!\xa9\x0c]=\xe8\xeaAW\x0f\xbaz\xe2\xb4\x88\xae\x1et\xf5|\x9e\xae\x9eN\x1b%\xad\x8a\xec\x9a.\xf9y\xd5[\x11\xbdw\x94e\xd8d\xe4\x925^\xfe(\xe1a\xfe\x80\xe0Fo\x9b\x1d\xc9\xbf,)Y\x1f\xa5\xa4cSN8n\xd8[;Z\x935\xa9\x89\x8f^\xfe\xf2\xd5\xacz\x99\xe8\x02;]\x1d\x96=\x9f\x85\xce\x17&\xb7\xddF?\x98\xf2|\xb1\xd3\xb3\xd5\x176\xf00\xc9R\xbfPm~\xd8\xde%\xd3\x168\xea\xa8n\xf1\x119\xb6\xa16\xff\x90\xf5U\xb7ohN\xcf\xd0\xcc~!\xb3W(\xcc'\xe4qT\x95\xa3\xd2\xeb\x98*\x0f\xa6\xc3\x81\xac\x04C.\xa5\xe0\x99\x14\xcf\xa4\xce-\xac\xaa\x9fuI\x1f\xac\xdd\x890W\xec/^\xd5\x0b]d\x07\x15\x0cZcy\xa5\x96\xc5MN\xcb\xea\xf4W\xfe/\x0b\xd0\xd43C\xaf\xd9\xa3o\xf9{\xedZ\xcb\x97\xd3,S+i\x979B\xec\xb79e\x88\xf5x\x9d&\x9c\x08\xd76\x82\x99\xef\xceb\xf6\x0d\xf8\xe7\x84Luo\xeao\x92\x90?\x0f6\x16=5\xca\x9f\x1f\xec\xe6\xa2?T\x1e\x86A\x93\xe3k\x82Er\xef4\x84(\xe3\xd2\x87JZ\x83#\xc7v\xa5\x1f\xdcc\xd1\x8d\xee\xa1\x18wqB\x1cJ\x03\x0f\xc5\x81\x0b\xfb\x03?\xf5\xb90@\xf0+\xc6\xb7\x17\xe6\xdc\xf5 \x89\xda\xfb\x19K\x93\\B\x1b.\x08\xc1\xfb@!>*\xealI\xab\xa4\xaa.\x9b\x84}\xaa\xe3U\xf24Ryk\xa3\xd9\xe8\xd5\x96\xc6GtQJ\xaa\xa4!(\xad\x1b\xef]\x07p\xdc\xec\x8a\xe6\xdc/1 \x14\xcbo\xda\xe6\xb2\xe8:\xf9\x9cmvt\x0c\xe9\xf1g\x0d\xddm\xb5\xc9J\x10>\xe5\x82\xf0i\xf7\x93\xaf2\x11>\xe5\x1b\xcd\xde\x86\xa6=\x97\xf6g\x08;j\xb6\x07T\xee\x909\xde\x02)a\xcf\x8at`Gs\xda1\x9b\xf1\xf0:\xfa\x15\x0f\xafw|x\x0d\xf1\xf7\x8a\x93a\x7f\x96t\x07F\xb5\x9c\xb4\xe7\xc6\xfe\x01\x8b\xad\xcd\xe3is[\xa7]D`\xddGo@\x04V\xca-+\xd7\x8d\x1d\"\x02;\x87\x16\x11\x81E\x04\xf6\xf3D`\xa3\xbd\xa0\xcb\xd5a\xc9?\x1d\xea\x06\xfd\xfa\xc0\xbf\x11\xe4\x0dm\xcb\xe9\x1d\xa4C\xbd\xa1\xda{k\xff\xf2\xd5\xe2O\xda\x9bk\x8f+,\x9fB\xbfc+\xae\xbd(\xfa\x1d\x0d\x8f\xb8\x14\x07\xe8w\x14\x82~G\xf4;\xf6\x05\xfd\x8e\\\xd0\xef\xd8\xfd\xe4\xabL\xf4;\x8e\xfd\x8er_\xe3\xe7~\x1c\x95\xa5\xd9\xcf\x05z!\xd9\xce\xab}\x0c\xfd\x90\xa3_\xd1\x0f\xf9;\xf6C\x86\x9e\xe8\xd0\x139A[\xe8\x89\x14r\xcb\xcau\xfb\xd0\xd0\x139\x87\x16\xd1\x13\x89\x9e\xc8\xdf\x8b'\xb2Z\xaa\x10\x0d\xb3\x0f\xf2\xbfF>\xc8\xeaG\xf9\xca \xf2!\xc9\xb85U\xc5\xb5>\xc9\x92^\xa6UMK\xba\xe6K|[T\x7f\xa9\xaf\xb4\x91\x10\xc3\x8f\xc9'\x1e\xac\xefP5\xfc\x81l\x1e\xfb:\xd0>\xe0\xb1\x03\x14\xee\xd0&Ok\x87\x03R\xdf4!\xc6\x06\n\xf1p\xf5\xb9\x1b+\xc4\xe9\xee\xf3h\xb2\x12\x1fgT\xffi\xb6\x9bm\xfdObB\x88\xaf\x0c\xee\xa8\xb9L\xaf\xa9\xf9v\x84~YL\xe9\xfc\xce\x18hH]\xec\x9e\xea\xdd\xa8B\xe8\xa7}\x91S\xbb\x8b\xd2u\x90\xeaK\xefPe8\xed+ \xd3\x92\xaag_Q\xfb\xe2F\xac_\xcf\xbe\xea~\x17\xee\xe6\xdc\xec\x85\x14\xb2kl\xb7\x14 )I*s\xcb\xaeH\xa5\xc2\xdc\xf8\x92,\x8c4\xfbo\xfaKC2\xab\xd7S\x08\xef=a\x95>\xe4i\xfd\xb8\x92'\x1e\xc7k\xcfd\x97\xbe\x84g_\xfd\x7fm\x1b\xbb\xea\xb8\xde\xe77\x07)\x1fp\xaf\x15\xc5F\x8c\x8d\xee\n\x9c\xa4\xa4l\x97a\xbe\xe2EH\xdb\x02V\xc4cV\xc4c\xc7\xf5\x18B\xda\xba\xbf\x84\xbf\x9e@\xbdm\xaa\x17\xf0\x0c\xd8\xfb\xa2m\x7f\xf5\x18\xab$KIe\x9f\xc6>FE\x88\xc3\xb4\x08\xf1\x9e\xf2.\x17\x96\x12\xd9\x04\x18\xdc\x06)'\xbb\xfaMEByOx\xe33~~J\x18tko~\x11\xe9\x1f\x1f\xdf\xe7@\x9cU\x1b\x1c\xc5\x1b9Z\xe4DJ\x13\xe5\x88\xd6\xbf\xebVeoi\x19\xdbM\xa5\xd2\xfeD\xe3\x9b cabb\x0ev\x17}as&z\x0d\xf47r\xec3\xe3\xb6\xf0\xbf\x89\xe9\xfa\xa4;\x81\xb3_\xda\xd6\x19\xcb\xe33\xbe7\xe7\xbe2L\xacuZ\xed3bp\x94\x87\xb7\xd02\xc6\xe4\x97\xda\xf3\x8c\\\xe7\x9a\xcbKZ\xb1S\x82\xb4\xael\xa4\xb5\x8du\x15&\xf6\xd2b\xf3h\xb8$\x86\xef\xefgj\x9d\x16\xc1\xfes\x8b_\x8fE\x0e\xe4\xc7|\x11\xef{\xab\xfa\xab\xba\x00\xe9\x9e\xd0\xcb\x17\xf0\x8a\x17\x0bg\xcc\x0c\xea\xcb\xac\x0e\xbbU\x11\xef\xd2\xf3\x1f\x8e\xe2C\xdd\x01\x9f\xd5Q\xfeM\xdd\x1cWm\x8b\x9b\x1c\xf8\xad\xbc\xf2.(ci\xbcug\x17o\x7f|*\xaf\x14Llw\xaa\xcb1^\xf1\xcc\xed\xa2\x02\xb2\xbb\xad\x17\x18\xb9\x0eH\x9d4ez\x07*\xfc\xf0\xee\x8d\xf0S\xac\x8b\xa4\xe1W0=)\xd8\xbe\x81\x9d\x84\xbfL\xb6$\xcd\x9fJO\x94\x84\x00\x8d%\xf5r\xa1\xa7\xb9\xd8_\xb1\x83*\xbc\xdd\x8b\xbf\x06\xabe\x8c\xea i\xcat\xb9%\xd5\xf6nt\xf3=\xa9\xb6b\x15\xac\xb6\xe4\xf9_\xfe\n\xec\xd3\x82h\xdd*l_\xa4\xeaz\xe4\x0f\xef\xde\x98w\x06o\x98\x95o$\xa2vM\xcbts\x10\xb8\xad\xf1\x0d>\xa8\xd4g\xd6\xe9:\x7f\\\xcb\x1b\xcdfV\xab\x8fulO\xc4\xee\xa5W\xfb>\xb1\xaf\xaa\xeeNi\x8f\xdd\xed\xedJ\xbd3yo\xc8\xb5\xc7r\xfdv\xb7wX\xe7U\xc1\xa4\x7f\x88\x1e\xf3\x87\x11=\x9e\x15=n\xbdZ^ \x15t\xc5\x9c\x8e\\q\x98\xfa\x0f\x11b\xed\xef\x0f !F85\x0c\xabB8\xf5\x16\x95\xeb\x06\x02\x11N\x9dC\x8b\x08\xa7\"\x9c\xfa\xfb\x83S\xdd\x19n\xf8\x06\xce\x0bJ\xe5G\xea\xce\xc9\xa9\xe5\xd7\x1f#\xa7\x9f\x1bpj\xdaRE\x1d\x00\x9d\xf0\xa7cs\xe3\x84>]\x18\x85\x15\x9bpl\xfb\xc0\xd9\x1f\xf4b\xbc\xcb\x1d\x0c?\xb1\xad\xb0$a\xae{\xd7!\xe8\"\xd6&d\xce\x9a\xe2\xa7js\x90,E\x91\xa2\x1c\x9fT$j\xf2\xca\xe0\xd5\xf7\xe2\xf0\x10\xe0\xc7j\x8b\x0b\xf3g\x0d\xbe'\x9fF\xe7\xd6@\xd0\xb9\xd5\x89\xdf\xaeB=\x8b\xce-\xbd\xa0s\x0b\x9d[\x1aq\x19\n!\xe8\xdcB\xe7\xd6@\xd0\xb9u$~# \x9d[\xe8\xdc\x1a :\xb7\xd0\xb9\xa5/\x0c\x9d[\xd3\x9c[\x83\x83\xa6\xd3\xd35*\xaen\xefA\xf3\xf5t\xc1\x9b5\xcd\xeb4!\x99Xp,\xde\xb6U\xc36\x12 M\xaf\x8ft V\x00\xa2.\"\x92\xbb\x9e4\xe7\x0e\x05Z\xd5\xe8PC\x87\xda\xef\xc3\xa1\x16\xca\xfd\x8aw\xa9\xf16\xca\xc7u\x9e\xb3s\xfe\xfb\xc05\xd6\xa9\x85\x99\xf6O\xbc\xbb0\xd5\xea\xdb\xa2\x84K\x9a\xd3*\xadN\xd8NL\x1ca\xe8Mv`;V\xa6\x80\xbe6db\xdec*l'\xb209\xb8\x8c\xdf}_\x17%\xb9\xa4'\x90\x15\xc5U\xb3?\xe1)gw$O\xf7M&\xdc\x06|\x86\xf1\x9b\x05\xbb\xd0\xc0\xd4\xd4\x13yq\xa3\xb8\xeaW\x94\xee\x8f\xb9\xb8\x9d\x9c\xf1\xc9;\xdc\x04\xfe\xab\xbc\x1a\x91\x93\xa0\xe9\xa7\xb4\xaa\x85\xeb`E\x92\xab\x1bR\xaeM\x9fM\x8a\xdd\x9e\xd4\xe9*\xcd\xd2\xfa\xc0\x8aU\xad\xdf\xa4\x19\xd5\x9eU\xe5\x96f\xe9;\xc1uc\xdec\x97(\x0c\xb16\xe9\xe71\x00\xda\x06\x9e\x08#\xaf\xb3\x96\xdc\xe8\xe1\xc6\x0c7fw\xb91\x0b\xda\xe1\x1cO(\xdd>\xa7o*\xfbW\x13\xf4\xffN\xf3\x9a\xfd]\x8dS\xd3l\xbb\xe8\xeeR\x95\xb1\x13uS\xe6\xd5\xc0\xf7Y\x89\xd3\xe0\x96\\S\xa8\xf64I7i\xd2\xffV[XE\xeb:\xcd/\xfb1\x1ag\xf9a\xe8G\x15\x07\xcb\x82V\x90\x17\xb2L\xd2\x95*K\x1017\xd2\x90\x8f\xe7kW\xb8X#\x16:k$L1/\x86}\xa7\x1f\x03\xb1:\xf4n\x90u^\xf1\xfa\xaf\xf2\xe7\xc1.\xf1\xb8\xf1\x0fv\x9bh7\xd1\xf71I\xad\xfb-\xe7\x1cs\xec\xb3\\{,\x9f\xed\xc9l{+\xef}\x95qO\xe5\x9d\x06@\xdb\x94\xf0\xdc\x00\xc2\x1e\xf0\x0d\x92\xa6<\xb9\xb7\xd0\xb5a_\xf0-\x0f\xdb\xbb\xf5\x92\xe9W\x83\xbd\x96r\x8d\xb0rxt\xdd\xac\x87\x0dLE\x80\xa9\x08F\xf2PR\x11\xf4\x0c\x8a_\x06\xfb\x9e \x1a\x95\x17\x90\xb5\xbe]\xbap\xa7\x8b;\xdd#\xb9\x85\x9d\xae\xd3\x05Y\x99\xc6\xdfh\xda\xc8\xb5C\x9a\xd0vs(\xff|(\x1a\xb8!y\xcd\x0f\xdd\xd0\xec\x17\xf0\x03e\xdbHa\xfc\xea\x82m\x99\x07\xc5\x91,\x1bo\x87!\xd2w9\xeedM\xf7\x1at\x97\x14YF\x13\xd6\xdco\xa5\xe6vMV\xa7G\x8a\xc2\xd4\x0dn\xa71`\xea\x06)\xb7\xac\\w\xd2\x01L\xdd0\x87\x161u\x03\xa6n\xf8\x1d\xa4n\xa8\xf6\xf2\x9c\xbb\x947\xafU\xa7\xbf\xca\xcb\xda,\xf9\x1bz\xca{\xaf\n\xf8Z\xbe?\xc0\xfa\xda\xe2\xfb\x17\xbb\xb1\xc5\x9f\x9d\xdf\xc7\xb9m\x99\xf5\xcdz\x03^\xde{\xe3\xf2\x97\xfd\x8d\x8d\xb3\x84d\x1cG(\x8b\x1d\x90\x9c\x1f\x0b$|v\xd2s-\xc1.\xbd\xdcrFM\xd5\xec(\x10\xd8\xa6\x97[y9`[^\xb1\xe9\xaapI*uz\xee\xcd\xa3\xf6\x1a\xc14O\x8a\xb2\xa4I\x9d\x1d\xc4\xa8vx\xae\x14'd\xe8\xb9\x1akP>\xf4`\xfdWj\xa4<\x8cm\xf74\xdf\x95\xfd\x86K\xc7\xebnw\xcf\xdc\xb7ZF\xddh)o\xae\xd4\x16h\xbb\xcd2\xfc&\xcb\x81B\xd40\xe9\x1d\x1a\x86\xb6\xa0R\xc6@\xd1\x1c0\xe5&\xfa\xb9\x00\xfd\\\xb3\xfa\xb9\xc6\x8b\x8b\xd6\xdbu9pw\xb5\xd7\xca\x8e\n\xecC\xba\xe3\x86tw\xce>\xae43\xdd\xd3=\xd6q&\xd1=6\xfa\x15\xddcw\xec\x1e\x93\xbb`\xd3\x00T7\x1aKc\xdb^\x17\xae(z\x9a\xd5n\xde\xc8W\xf4O\xc5\x1e\xfe\xd1?u\x8b\xcau{V\xd0?5\x87\x16\xd1?\x85\xfe\xa9\xdf\xb9\x7f\xeatuX\xf6N\xff\x81\x8e\xaa\xafE\x80\x89\x87\xbbJ:\xa6F\x9c\xfdMQ\xf6\\U\xea\x99\xdf\x9e\xcfJ\xcf\xb6\xd2+S>\xfa\xd0=W\xa6\x0dq\xd4\xe1\xdf\xe2\x7frlJm\xbe'\xeb\xabn\xbf\xd3\x9c^\xa7\x99}Nf\x8fS\x98\xbf)\xe2\xf0+G\xa9\xfb\x08<*\xac=\x10\x0f'\xbd\x90v\x0bl?\x02\xcb\x88\xf1!r\xeey,F\xd6\x08\x1e\x8b\x7f#\xc7\xe2[?\x0cO\x0b\xac\xb3U/t\xd73\xa8`\xd8\xa6\xa7\xd9\xef\xb3\x83yWs\xc16\xc0\xef\xf9C\x83\xed\x8b\xd8\x18\x8b\xb7\x07@\xdb\xe7\xb4\x1d\x91%\xf4w\x1b\xbd\xf6\xca\x9f\x1f\xec\x0e\xa3\xdfu}\xb9\x0f\xd3\x82\xc8X\xfc.endLb\x0ern*D\xac\x9d\xa9-\x026z\xd1\x1b\x00\xd3\xa2B\x11\xa8\x98\xa6\x14\xe7\x91P\xc8\x84-4\xe2g\x88\x9f\x8d\xe4N\xf03SC\xf8\xe2\xdc[t\x9c 0\x8e\xdc,*\xd5k\x7f\xa56\xa6\xbfh\xff\x88\xbb\xfb#\xfd\xe0\xee\xfeNw\xf7\x08%\xb9\xb7\xf2\x80P\x92\x94[V\xae\x1b\x04A(i\x0e-\"\x94\x84P\xd2\xef\x01J\xe2\xdb0\x0f\xd0H\xec\xd7\xden\x86\xd0P\xe7UQX\x0f;\xb0}\xe6\x9e\x15\xd5T\xf9\xdb\x83u\xab\x98\x9c\x11\x13\x0e\x9d\x88\xdb\x84yD\xee\x12\xb7\x91\xa3\xd2\xeb\xdc%OZ\xa3\x91\xac\xe4\xdd\xf9+\xbcN\x03\xf0\x98\xf5\xb0\x8eY\xbf\x1d\x90b\xc9\x8cS\xd1\xd4K\xb1Y2/\xaa=O\xc8\xdf\xc4+o\xc5\xf6*\x08\xc00\xc1\x02\x83\"\xbfPM\x7f\xa0\x8b\x19b\x04\\\xdc\xab\xe1\xbc\xeb\xe1\xec+\"b\x04\xad8\xf7\xfaB&l\xd7\x10#@\x8c`$\x0f\n#\x18\xac@^\x1bW]\x81\xa7\xc6e\x12\xd1\x03\xdc\xd6\xea~\x7fH\xdbZD\x0f\xdc{l@\xf4@\xca-+\xd7\xed\xf7F\xf4`\x0e-\"z\x80\xe8\xc1\xef\x06=\x18\xb9;N\x7f\xe5\x87PK\xa6\x94\x18,A\xeb\xa1\xff\xac<\x1c\xe8\xae\x0fwO\xcc\xec\x9c\xb8\x07w\xfdLG mq\xe8\xc8W\x82'\x9e\x07t\xe2\xb9=G\xfe\x84`\x08\xf7\xbaV\xd1\xd3\x9a\xe6kZ\xee\xd2\xbcn\x978\xb2JRq!\xb6y=\xebY\x80\xb3\xaf_\xbd\xe1E\xf7,\xa0h\xd7\x96\xe4\xeb\x8c\x96\xf22\xc6f\xbf/\xca\xba\xe2\xcf\xb7\xcb\xe0:\x95\xc8t\xcf;\xc6\x0cB\xfb\x0f\xb2\xdfgl\x1b\x98\x16\xf9 \xac\x0e{R\xf13\xc7E[m~GFFk\xcaNu\xccl\xb6\xe5\x1f\xc4%\xbb\xaa$y\x7f^\xafh6J\xd257\xca\xb2vt\xcd\x15~\"7\x93<\x9ck\xbf?\x91\xe6\xf5\x04\xf6\xcf\xe5M\"U]\x94T\x0b\xfa\xeb/y\xfc\xab\xba\x92q\xb0\xa8\xb7\xaa\x93?>\xd8\x85|\xa2\x81:r\x0ef\x85\xe6\xceG\xcb\xb4L\xf3M\x11\xf8\xc2\x9a~\nz\xc3^a\xad\xc7\xd9\xab4\x8d\xa7\xd9`\x9cb\x8b\xdb\x97E\xb1Y\x16{\xa3\xed\x8e\xdahi\xcb\x03\xc7z\x00\xb65\x01\\\x15\x12\xe2Z\x1b@\x15c\xfc\xd5\xcb\xc2\x1b\xfa\xb4\x13\xaf2<\x10\x05&\xfa\xfb\xef;\x99\xef[\xee\xcd\xaa\x90s6h\xde\xee;\x9b\x9dw\xa6I8\x87\xd8\xde,!Y\xc2\xefK\xca/\xe1GZ^\x1d%=\xef\xa4,\x8aZ\x18`~\x1b]r\xec\xe8\xe9\xcb\x8a\x02)Wi]\x92\xf2 \x9bu\x02\xe2.4~\xd3\x82dKJ\x92\xd4\xb4\x14\xab[F\xaa\x1a*z\xc9\xaf\x88\x963\xf4\xc3\xbb\x1f\x1eW\xe3\xa3\xdaPx\xa5\xda\xeb\x9c\xcd_e\xc5m\x9a\x8cGt\x93\x8cip=\xbc\xf1\x9di\xf2 \xa94\xd3\xbc\x93\x8f\xac*\xa7\x97Eq\x99\xd1\x05\xd7\xd9\xaa\xd9,^7by\xff\xf8T\xb4\x84\x17\xdb!\\\xa9\xe9\xe2K\xeeE'y\x91\xf3\x8b\x99\xd9\x1c2\x7f\xf9 ]\\.N\x98j\xf9:\xfeh\xf1\x88\x19\xb5\xbc\xa8\x81$ \xdd\xd7t\xfd\xd4\xb6\xf2\xbe\xc9a\xcf\x94\x9d&\xf4\x04jJvU{s\xfc\xbe\xa4\xec\xa4\x97f\xac\xa6\xcc\x02n)\xac\xd2\x9c\x1c\x19\xdcNxN\xd9\xc3\x9e\x8fA\x01!h/H\x12\"l\x1d\xa4\xdc\x97\xddTT\xc16l \xd1O\xbc\xab\xcf\xf2\xc3\x02\xbe/n\xe85-O\xac\x9b\x92\x0f\xef~\xa8\xa4\xa3N]\x95f|\x96[P\n\x1f\xb7u\xbd\xffx\"\xfe\xbf\xfax\x02E y!\x7f=\xe1\xa31\xe1\x9b\xb4\x9a\xdfB\x9e\x99\x9b]\xd1\x1a\x9a=\x10\xb1HX\x1e+\xaf\xd5\xe1\x9c\xdf\xa5\xc5\x87\x16\xafy]\xa8\x99%V\x15~\xb1|\x05\xc4|O\xe9\xa6\xc8\xb2\xe2\xa6za\xe9\xdb?\xc0\x9bM\xd7\"6,\xe4\xdd\xb7\xeb\xb6\xd1|\x01\xac\xaafg\xb9P\x94\x15t\x96\xc3\xf7\x17\x17\xe7\xf0\xdd7\x17P\xe4j\n\x8a9v\xe0\xeeRb|\xfb\xef\xe3iqq\xd8\xd3\x9f\xff\xfe\xb3\xf1\x05P$\x91\\\x8e\xb7v\xbfZ\x94\xac \xeb&\xa1l\xfb\xcc\x970\x1d\xc5F\xc8\x1f\xe0\xacse\x08t\x840\x9d \xb2PB\x12f[\xf8]\xa5-\x82\xb2\"\x15\xd5]\xf6%\xa4\xb0\xdd\x92\nb\x10\xf2:\xf2\x9b\xfc\xea-\xdd\xf5\xe6\xd0ZL\"\xa2\x9a\xc4\xfe\xfb\xba\xe0\xce\x10\xf3\xc0\x02YAn>J\xba)Jz\xa2\n\x18\xdeT\x9aS\xbaV8(7y\xe5\xb5\xa5%\xbc-\xe2\x9a}\xfe\x12\x9f\xb3\x0bx\xf2\xa1\xa2pM\xcb*-\xd8\xbe\x86\x0fOf\xb3\xc4\xf8$9\xb9\xb4\xb5~URr\xc5l\x90,x\xf1\xd4\xb5\xe1\xe7!\x18\x9b&O\xc4\x0cc\xed\x90\xb6+i\xca\x92\xf3\x06\xfat$\xb3\xb9d\xe3\xb1\xe0H\xb9\x99\x85$\xd7\xb2U\xb3\x81\x92\xb2\x95\x88\n\xc7\x92@\x97\xd9G\xdbCX;/\x8dEq\x1eD.ng\xac\xb7\x96\xc5\xe5\xb0\xa7\x0b1\xfe\xc9>\xad\x16I\xb1[\xc8\xfbj\x7f$\x07x\xfe\xd5\xf3?\x9d\xc0\x80>v\x93\xae\xa9\xc5\xd4\xf0:\xf2\xfa kb\xfet\x8bW\xa8\xf1\x9f\xafY\xf9\xfb\x8c\xe4\xbc?\xdb\xdf\x99\xa5\xb3-\x11\xef\xb9\xf9\xa8\x04MK\xd0\x10F\xa6\x13\x9e\xc8-\xb9\xc0\xd0\x85\xbdyj^\x99y\xb8\xcd\xcab)\x05W\"\xad\xb7\xa3V\xf4/\xc7\xdc\x91\xbcN\x13-\xc5\xeeV\xbc\xd1c\xf1\xdd\xba\xfd\xc8l$;}K\xe7g\xb7\xeb:\xda\\\xc9\x1d\x07Y\x15\xd7\xe6\x89&U \x87\x81\xae\xf9>5\xfbx\x96\x1f>\xaa=\x1bwFt\xde\x01s\x0d\xb5E\xa9\x85\x8bd\x85\x9c\x0f@\xf4]\xcb\x96\x0cq\xe7)\xaf\xe1j\xb8W\x1d\xedI\xdb\xad\xa6ah\x9e\xab\xd9\x9c\xa5+^\xed\xf6bw\xe9Zf\x83|O\x92\xab\xd3&g\xff\xc7\xaf_\xe5\xe3B?\xad\xe5\xee\xc3\xbc\xdb*6\xd0\xd4\xc2\xda*\x9bU1kO\xd6\xebT\x180~Yt\xc9o~\x14\x88\x99\xbaU^[\x1e\xab\x8f\xe8B\xfd\xf7\xbe\x91~\x96g/\xe0\x9c\xd5\x9fM`\xd9\x14\xd2*=\xcd\xe1\xd5\x1f\xffhY\xbb\xbf-\n\xd8\x14\x05\xbc\x84\xc5b\xf1?\x8c\x8f\xb1\xca\x90\xfc`~\x80\xe4\x87\x05\xab\xc6\xb7e\xb1{\xb2)\x8a\xa7\xe6G\x17\x0b\xf3\xa2\x9cn\xe0 +\xea\x03o\xc8E\xf1\xe4_XYO\xe1W\xcb\xc2b+\xef\x9fv\xdd=w\xe8\xee\xdf\xc95\x99My\xf0\x92oX\xd9Wf\xd0PZ=\xf9\xb6(\x16IF\xaa\xca\xa1 QE\xf6\x92hc\xefEs\x1d\xfei\xfc\xe5\xf4\x94\x0dk\xbf:\xbe';\xca\xf6sg\xa2\xb6\x97\xb4~-\xfc\x1co\xf2\xaa&yB\x9f<\x8d\xa9\xbc\xb6\x1c[[\xf4?\xa9a\xf0'\xc708?\xd4\xdb\"\xb7\x0c\x04Q\xc9o\x8b\xe2\xc9b\xb10\xafl\xed xb}\x86O$>DbG\x08+\xe4\x8dP\xf9\xebo\xde\xbfz\xf7\xe6\xfc\xe2\xed\xbb\xa76\x87w7\xe9\xec\x1f\x16\x9f\xb6\xab\xf3\xcf\x0eu~W\x985\xc9U\xf9\xe2%\xfc\xcb~\xb5\xf8\xb6(~],\x16\xe6\x91\xc8j}\xc2\xf6\xf9\xec\x0d\x92\x1f\xf6\xab\xc5O\xf4\xc6\xd1\x80t\xc3\xdf\xf8o/!O3\xeb\xd0\xb3j\xd92A\xec\xef\x8d\x1ah)F\xd6T\xb4m\xf1!\xdf\x91\xb2\xda\x92\xec\xa2\x10\xe6c\xaefh\x7f\xbb\xe0\xb1&\xc9U\xbbR\xa9\xb3!\xac\x0e\xddNY\xad\xad\"\x10B\xbf-UT\xc9\xa62\xec\xe8\x1ekv\xc1\xa7\x9b&\xcb\x16\xfc\x07v\xc2x\x0c\xa4\xb7\x17`\xfb\x046\xb6L+\xa7\x18s\xfa\x8f\xb5\x0bo\x9e\x1d\x94+\xe0\xc8\xbf\xd3\x9el\x80lj\xaac\xc4\x08\xe1\xae\xa7\xc7\xa7\x8f\xf5\x9f\x92;\x06Ue\xee\xa0h\xd1\x91G\x9b\xa2X\xacH\xc9\x1b\xfb\xe9\xf4\xb0\xf8\xc7#\xa1\xc5\x83\xe1Bi\xb0x\x0fxU\x1f\xb12L\x9b\x85\x7f\x7f\xff\xf6'\xfd//_\xbe|i\x1e\x02\xec\xbd\xceK&6\xd9\x05\xb3/r\x87(N\xe2M\xd5\xba\xe3/\x9b\x8c\x18N\x1d\xc7\xc5\xd4\xfc\xf2\xebnOw\x02t\xb7\xa2\xebu\xb7\xbb;\x11\x07(]q\xc4\xe0o\xeb\xed\xb7\x04S\xeb\xe3\xbf1\xcd}\x94\xee\x9fvO\xdb\xef\x1b\xfd\xfc\x90\xf6\xec\x85\xe5\xc8H\x92+f\xd4:\x17\xc6&\xcd\xa8y!RF\xf0\x9c\x96U\x91[g\xad\xf4\x9dn\xd2\xb2\xaa\x97\xbc\x83_\xc23s\xc9\xed\x0blL\xaa\xe7\x9f\x87/\x89\x00\xd6Z=\xe2\xba|\xf4\x02\x1e\xe9&\xedP\x0d\x0b\xd1\xcaG'\xb6\xf2x\xfb~\";V\xe6\xff\x14M\xf8_\xd6\x17X\xfbF\xcf\x876\xf2\xcdF\x9eF\x87c\xad\x85|nh\x96}y\x95\x177\x82\x1f\xb8%\x15\x10[\xb4\xa1yr\x0d\x87\xfc\x898\xdd\x8c\xe6A\x17D&\xab\xc3\x06\xb0)\xaeS\xde7\xaf\xfd\xf1#\x9f\x8cj\x9co\x8bl\xdd\xa7\"\x8a\xa9\x9c\xe6\xed\xfc\x00\xe1\xb3\xd5\x17%\xa6\x8c\xfe;\xbc\n\x8bv\xb5\x7f\xc2\xcc\x9aR\xe1\x913O\xf9\xb8\x7f\xfe\xfb\xcfO-\x13i\x8e17\xfc\xa0}\xd8qU\xb1\"\x9f-\x9e?{^=\xb2\x0c!\xf1\xffV\xb2\x19\xa9\xfb\xee\xcd\x18\x02th(\xca\xc0&\xce\xf0AU\xb2\x00\x84\xe7-\xdb\x84\x18\xb7\xad)\x87\xfe\x8c\x98O\xda \xe4\xefiy\x9d&\xd4\x83j\xb7\xca\x8a\xe4\xaa:\xcdHM+K\xd0\xfcw\xb4\xfe\x81?\xf25{^\xf2\xe9\xc5l\x13\xaf\x02/HK\x1c\x1f\xbe\xfb\x85j\xdf\x03%\x9a\xf1v,\xd3\xf5\xacT\xa6-\xa9\xb66.\x93\xc5\xf7\xe6\xf0\xbc\xedIY/+Z/\xb7\x94\xac\xa9\x06\xc0\x06W\xcd\xc1Y{&\x96(]p\xa2\xdeJlD\n%fU\x81\x8f\xba\xc0\xad\xb26\x94\xf6\x9c\x94uE\xeb\xef\xb9\xe6\x8e\xbb[<\xc4\x07\xed\x9b\xd7\xbaQ\xa2\x19\"\xe2\x9d\xc7\xaf\xd9\x8a\x97\x90\x9a\xcd\xdf=\xf7\xad\xf3\xad\xf7\xc7j}\xb5\xe4\xaf~\x844\xafjJ\xd6\x8fg\x1df\xb7;\x06$\x12b\xe9\x1d\xd1\xfc\x15\xa9\xd2D\xa8\x88\xf3&\x1d\xbdi\xe5\xe2\xf9\xd4\x0b\xcc\x1d\xd2\x17\xaf\xb1\x03~Q\xe5B\xc8~\x7f\xb7\x9f\xf4\xf1d\x0by\xc5\xccc^5\x15$d/b,$\x96,\xff\\6\x99\xe0{3\x053\xbbj\xaf\"i\xfbS\xe0\xde\xec\x1f\xc9\x96\xa4\xf9\x89\xc5\xb5\xd1'1\xb3=_\xfb\x92 \xd5\xb5\x14\xa6J\x9dnE\xad,\x05*D\xa0\x032\x1fW\xb6\nT5\x8f\xdf+I^\x89=\xe0\x8e$\xdb4\xd7\xc2\x04Lx\xed\xb4\xd6_\x89G\x97\x9aHfJ<\x8a\xf0\xb3\x95u\xba\xb3\x90P\x83>\xb3&5\xfd\x92\x95gx\x92\x9f\xb2\xcck\xa3\x92\x19g\xb4}!\x00\xdf\x06\x82\xcf\x82 \xc4k-U\xe2\xd5R\xf0n-\xb8\xd7\xd8\xf61\xaf\xb5V\x89\xcf8R\xe2V9\x84\xa8\x1d\xfcU\xef\xb9&\x8f\x1e\xd6\xaf\xcdJ\xf8\x90M\x8a\xdd.\xad\x97w\xb1\xab\x80\xaeb\xecs\xe2Via5G\x07\xa6\xbe\xb0\x9f\xee\xa8z\x1co%uQVw\xf4\xc1\xb1>x\xdeIi\xbf\xa1h\xea}Sw\x7f\xdb\x97\xf4Z\xa8\xcbP\x1a\xcf\xbbp\xe7mhW\xcc;\xfa\x1e\xd9\xef\xef\xe8K|~H\xa6\xcf\x1d}\x92^\xa7k\x9a'\xf4\x8e>\xd7\x8e\xbfn\xdbc\xd9\x8f2C]T\xb4\\\xca\xbb\x82n\xbb~\x83\xcd\x9c0x\x03\xaaw\xc7\xf0\xe6\xf1\xd9\xc2\x92\x88\xa5I\xcbr0Fx8\x97*\xf7\x12U\x7fr\xaa\xc3\x1c\x8f\x03\xae\x98\x1c\xf0\xd5\xa9\x87V!h\x9b|\xf1IR3\x95S\x92\xef,\x05\xe8#\xf6\x8e\xff&=\x1b\xdf\xf3M\xdd\x1f\x9fY@Q\x15:\xcd\xc9\xa6Y\xc6\x94\x06-\x95\x89\x1b\xae\x05\xc0\xdf\xe8\xe3\x92\xc2\xffk\xaa\x1a\xc8eI\xa9\xbd\xb9\x92[\xc8\x13\x13\x08\xd7\xb8\xf5\xfb\x9c\x84\xbc\xa3\x9c\xd1\xc4Z%\xaa~\xb6\xdf\x7fO\xaa-\xac\x0b*\x88]2Q\x05+\xfa\xe8\x8a\xb9\xbe\xd4\x9f\x0ct\"WR\xad\xd7\"\x00\xa7\x07<\xf0t,\x1b\xb1\x13'\x92+\"\xab\xa1\xcd\xca\xd0\x89iIP\xb6\xe4\xd6\xc6\xbc\xfd\x030\xef\xc0wn$\xdd\xf5\x15\xd2\x06o,\xaf\x8b\x9a.\xdd\x8d\x10\xe2Y\x0b\x08\xa8 \x13^\x07k\xe0\x99\x92\x80\n@`%@\x15\xef\xf5\xa4\xb7)\xea\x0b\xcd\x1bc\xf2\xcac\xf9\x12\xde\xbf\xf9\xee\xa7o^/\x7f|\xff\xdd\xf2\xe2\xff\x9e\x7f\xb3\xfc\xf0\xd3\x7f\xfc\xf4\xf6o?M(\xe1\xfc\xdd7\xff\xf9\xf6\xe2\x9bi%\xbcz\xfb\xe3\x8fo.&\x95\xf1\xf6\xfc\xed\xfb\xb3\x1f<\x8bP1@\x13\xf5\xe1o\xef\x87\xf2>\xbd\xcc\xe9\xfa\xc7\xea\xf2\xa2\x8d}\xaa%\xf7\xae\xe2?y\x97\xd4#{\x0c\xdc,Vk=\x12c\x9f\xbe\x80\xff,j\xab[d$\xe6~y\x01\xe7|\x97C2\xbf\xe2\\\xae\x8c\xa1DL\x9c\x90\xe3\xa9\x90\xb2hr\x8b\x07b(age!\xb6\x18-\xbd\xb8\xfd\"C \xb4u\x10a\xef\xc0\xfb8\xdfID\xf7\x81\xef\x96l,A\xbe\x96\xa1Dh\x0f\"5\xc8\xc4\xd3+3\x94\x98q\xa7$|J( \xedp\x88\xeft\x88\xed\xf8@O\xcfP\xbc\xfc>C\xa9\xd3\x1d\xadj\xb2sx\xea;\x89P\x88\xaf\x13u(\xad+\xc3}\xe0\x1c\xca\x84\x1azwUW9C\"\x0b\xbd\xc4\x8c\xfbp{\xdb&\x8e\n\xab\xd6\xedj,~\x1b\xc2V\xf7\xaeM*\x82\xbe\xed\x01y\xb5\x8a-*j(\xcc\xb6\xa6I\xba\xe7\xc4\xfb4\xefy?T\xb6+\xef\xa2HU\x15I\xca\x0b\x1a\x00\xfcv\xa1\x9fj\x9a\xdb\xa1\xc2\xa1|\x06\xfd\xd3\xb6i@\x0c\xb5\xc7\xbf\x0d\xa5\x07Z\xc9l\xa5\"\x00F`pTx\xaa\xfd\xbbFn9\x0d'\xf4\xb1\xb4\xd5_\xfe\x16'O\xd79\xe3i\xe4]\xce\xd1t\x1bO#\xff\x9e9\x9ao\x9ai\xe4]\x98i\xa0\x04\xf5\x7f\x8cr\xb9b[\xea\x1e;\x1b\xedK\xca\xce\xf30\xa8\x06\xfb\x8bWy\xdc\xd1\xdf\xb9\xefYk\xfc\xb4\xd0;L\xb9\x1e\xe5\xee\x86\x95\xcf\xc0\x0e\xdcD\x86n\x1e\xd1\xdd0\x12t7\xa0\xbb\xc1-\xe8np=\x0d\xe8n\x08\xdf[\xa0\xbb\xc1\"\xe1SBIh\x87C|\xa7Cl\xc7\xa3\xbbA \xba\x1b\x84\x84\xdb\xdb\xdf\xe2\x89 \xdd\x0d\x0f\xbb\x7f\xd0\xdd\xf0Yt\x0e\xba\x1bt\x12\xa3\xdc\xcf\xd1\xdd\xc0\xf7j\xcb\xeb\xa2N\xf3\xcb\xe5\xbe\xb8\xf1\xdbX\x06\x0e\xf0\xb0\xfdY\xb7\x90>\x8c\xfa\x04\xed\x87\"k\xe2\xbb\x0f\n\x1d\x96\xaf\x15\x95\x86\x8d\xcdo$\x91\xa6\xa35)j\x0d\xa7\xe79\x0b\xeb&\xbc8\xebC}S\xb0\xb26Y\x9a\xf0\xec\xc6ld;\xc6\\\xc6N\xc7\xcb$Ki^/I]\x93\xe4\xea\xbe >\xbd\x16,=bp\x84\x04\xd4\x05\x02\xeb\x03r\xbfF\xd7\x81G\xbd\xc0:AD\xbd\xc0\x11\xa2\xa5\x97\x88\x8aAd\xe5\xc0'\xc8K/\xa1\xa1_z\x89l+Lh/\xf8\x05\x8f\xe9%\xd0`\x8dE\x190g\xa0\x99^\x9c\xe1gz\xb9\xcfJ\x87\x9a\xe0\xb1\xf8\x85\xb5\x05\x17;\x0c\x83\x1b\x05\xbb\x05\x97\xe6\x19\x1c\xa7\x17\xdf\x90\xb9\xe0\x82\x07!v\xc1\x81tz \x0d\xaf\xd3\x8b;\xe8N/\xd1\x039\xcc\xcd\xac$\xfas\xa1{\xa6\xbe\xd8C\xfc\xf42CE}\xb7TC\xf1\x0c\x12\xd4\xcb=\xd9\xfe\x18'&LS2\xc4\x1dY;\x99\xe0\xcdV2A\xdb0Q\xe3\x10\xeb\xe5V\x12\xe3\xf5\x1bK\xfc\x8cT\x12;p`\xfa\xe0\x81\xa9\x03h\x92W\\I\x84w\\\x89\x7fh\xa6^&\xe8o\x82\xde\xc2\x83;\xf5\xe2\x11\xf2\xa9\x97\xfbh\xb6w\xc0\xa5^\xee\xa3\xca\xee\xf8$\xb3\xf8F\xaa\x06\x17l\x8bl\xd5KX\xbc\xab^\xeeC\xfd\xbe\x11\xb3z\xb9\x8f\x1a\xbbcn\xf5r\x1fu\x0d\x88\xda\xd5\xcb}T\xda3\xeeW/\xf7Q\xe1\xb0\xc8a\xbd\xf8\xc7\x13\xeb\xe5\xee\xdb=\xe5t\xee\x19\xc0\x1cT\xa69\xd8Y/bG\x11\xa2\xe7\xc8mp\xec\xf6\xf73:x\x06\xf1\x9e\x94L\xd9\x99\x87\xe3\xf2J\xf0\xc4\xe9#\x916A\x08\x9e8\xa3\xc7\xb5\x92\xf8\xa9\xa8$v\xe0\xc0\xf4\xc1\x03S\x07\xd0}\x9f8\xbb\xbb\xe6C5(4g\x0f\xf2\xd7\x8b3\xf4_/\x93&\xca\xb4i\xa2,\xe9r\x93\x11\xcd\xfd\xc8>2y\xa0\x85q\xdb\x87\xf2%|\xfd\xc3\xdbW\xff\xb1|\xf3z\xf9\xed\x0fg\xdf\x05\xf2\xba\xc72.\xed\xec\xeb\xf7\xdf\xfc\xe4OW\x1f\xca\xb8\xb0@\xee\xfbP\xc6\x85\xfd\xf4\xc6\x97\x02?\x94\x96\x10?\x9f\xda\xe2\x8f\xdeB\xc4\xe4^\x7f\x9b\x91KH\xf35\xc7\xdf\xd5Mvr\xe2G\x812B:\xbeN*(!\xae\x17\x8e%\x9aG9\x94\xc9\xf3d\xb29\x0e f\x1c\xcbl\xd5\x8fC\x1a\x84\x04s\xcb\x862[\x1b\xa2\xba`\xcaaK\xc8+~\xdcy\x9f^\x8aX\x12\xb6GS\xb8\x1egS\xa9\xfc:\x11E\xa79\x10Y\xbe\xff\xf1kZ\x9b\xc4\xd7\x86Y\x83Z\x8a\x0d\xcff\x14\xe6e\x15\xce\xd9\x1bR\xc9ca-(\x94D\xa6\"\n*\xab\xf3\xc2\xf9i\xa3\xb3\x11\x15\xf5>\xeeE\xac\xfb1\xab}\xd7\x16\xffwbwA\x11;\xa0\x08-\x08\x89\xd1\x85\x90h;>\xc9\x80L0\x1e\xfbf\xb5\xbc\xa2\x87\xd8\nG(\x17&)\x98 ]?\xff\xcb_\x9e\xfd\xf7\x98W'*\x1a\xa6)\x1b\xf8M\xb5\xc9\xfe\xf9_\xfez\xf5\xecs\xac\xfe\x94\x1d\xd9y\xb3\xca\xd2\xe4?\xe8a\xe0\xd8\xbb\xa2\x87\xaaw\x11i\xdc>\xaa\xa9\xa8\xb8\x1c\xf1?[\x83\x14XJ(\xf1v(\x93:e\xcaa\xbe\xf5\x0b\xef\xcb\xb4(\xd3:z\x1e\xdfi\xddU\xadC*\x1binb\x0dM\xa4\x1d\x9f\xa0\xcc\xe8y\x19i\xc1#\x15\n\x13\x94\n\xd3l\xf7\x04\xe5\xc2\x14\x05\xc3T\xab}\x7f\x15\x8f\xb7\xd7\xb7f\xad\xa7\xda\xea)\x96zBG\xc4Y:\x98\xc3F\xdfy\xad\xe3bQ\x94DV7\xac\xaa\xec\x1cV\xe4K\x7f\x10,\xb0Va\xb5Y\x1d\xfeA\xf2:\xcd\xe92\xecD\x14v\x12\n8\x01\x05\x1b\xf7p\x93\x1e\xbcB\x06\xf6\x80\x90\x08\xdb\x17\xbc\x1e\x06+\x0b\xa2\x14\x06\xb1\xab_\x94\xe2 Ny\x10\xbf\xd6\xddm5cV\xb6[X\xd3\xe2W\xb38\xf3\x1a\xa5\xe40c&d\xc2\xaau\x07u\x8c[\xa1\x02+\x16X\xa5\x10'xdM|\x1d\xdc\xa1\xbe\xd3\x1f\xd8*\xfa\x8a\xc7\x02\x9e\xf1P\xc0\xa9\x11\x8a2E{/f\x96\xd45\xdd\xedytb]\xc0.\xad2J\xd6@D\x1c\xa2\xb3<\x11\xa7\xa8s\x98\xf6\xe8\xbfz\xc5;\xad\xbb\xdb\x92\xbbv\x19^\xbd\xe93\x9a\x1cD\x19\xf1\x1d\x17u\xc0\x87\xfc\xe2\xa6\xb98\xd5\x06^\xaa\x03/\xae\x81\x97\x02\xc1\x7f\xa9\x08\xa2\x98x\xb5\x14\xbc[\x0b\xe0M\x10\xf1\xebO%>\x03H\x89[\xe5\x10\xa2v\xf0W} 9\xc3\x8b\x86\xe1C\xb8\xf0\xd9J;7\xd0\x9eC\xc1w \x04Q \x02:\xc3\x8f\xd6\x10K`\x88\xa4*D\x92\x12\xc2\xe9\x07\x93\x88\x06\xfe\xdb\xc6\xb9\xc8\x03A4\x81`B@\xc0\xa8 \x98\xc0\x9e;\x99\x88\x8f\xfb\xed`\xbc\xc1\xf8\x88\x1a8\x9a\x1f\xb2u\xf2\x05\xcd9\x04\xeeQ\x92\x1e\x10\xf6\xab\x91\x07\xe4m\x80\xb1\x0d\x05\x92\xe3M\xdc\xb8~\xed\x15\xb4\xc7\xdd\xa4n\xaf}\x9f\xe6 \xa7\xbeW\xbb\xa2\xfa\xb2Z_\xc1W\x8b?\xff+\xdeT\xebZd\xdc\xf5\x02\xbfd\x03\xde3D\xcd\x0fg,\xbe3U\xc0\xdc\x9f\xf4\x9b\x00\xe0\x1d\xd2\x0fxS\xedP\xdcA\xf3\x1e]zg\x87$\xbc\xa9\xd6\xdd@\xf0_\xf0\xf0\xac\xe4T9\x84\xa8\x1d\xfcU\x7f\x1bg%\xffph\xaf\x16y\xb5$<\x98\xd9#ly\xae\xeayG\xbd\xce\xf5\xc1\xb1>\x9c\xf1\xbfxS\xadG\xd4\xec\\_\n\x88y\x9d\xeb\x93\x9e\x11\xabs}.,\xde\xd4?\xb2\xd4\xab~\xfe{\xb5\xf1\x87\xd9\x19J\xdcO\x9a^\xa69\x91\x1b\xa7\xf61KI\xb2\x80\x13\xa9\x1cv\xaa!\xec<\xf65M\xb6\x7fz.kl\xcd[\xf9&\x87\x0b\x9a\xafi\xb9K\xf3\xfa\x04\xea-\xab\x8bL\xac\xff\x91\xa9\xba\xfax\x02\xab\xa6V\x1b\xc1\xf7\xaf\xff\xe3\xc4R\xdc\x0d\xdfr^\xd3\xb2\x86\xb4\x86\xba\x18\xd7\xc5V\x15\xb67]\xd1\xba\xa6%|\xf8?\x1e\x07Bw\xacl\xd72\xbc\xf7\x97\x8b\xd7\x1c\xf2\x1f\xc8x\xef\xafm\x8f\x83\xf7\xfe\xe2\xbd\xbf\xc7\xe2[\x13\xc0{\x7f\x0d\x82\x17\xf1H\xc1\x8bxz\x82\x17\xf1x\xbd\x13\x94\x90\"\xcc\xf3 \xc4\x07\x83\x1f\x8a\xdb\xcb4\x94@[\x07\x11\xf6\x0e\xbc\x9d#\x9dDt\x1f\xf8n\xc9\xc6\x12\xe4\xb9\x1aJ\x84\xf6 R\x83L<}\\C\x89\x19wJ\xc2\xa7\x84\x92\xd0\x0e\x87\xf8N\x87\xd8\x8e\x0f\xf4\x9b\x0d\xc5\xcb\x8b6\x14o@TI\x84B|]\xd2C \xc6\x8b\x95L\xa8\xa1wW\xe1E<\xa1\x1a\x8b\xdf\x86\xe0E<\x9fA\xff\xe0E<\x9fE\xe7\xe0E<:\x89Q\xee\xe7x\x11\x0f\xde\xfb\xab\x13t7HAwCO\xd0\xdd\xe0\xf5\x0e\xba\x1b\\\xcf* =}Ft\x1f\xc4\xed-\xd0\xdd`\x91\xf0)\xa1$\xb4\xc3!\xbe\xd3!\xb6\xe3\xd1\xdd\xa0\x04\xdd\x0dB\xc2\xed\xedo\xf1\xc4\x84\xee\x86\x87\xdd?\xe8n\xf8,:\x07\xdd\x0d:\x89Q\xee\xe7\xe8nx\x80\x91\xecx\xef\xafYB\x87%\xde\xfb\xeb*\x14\xef\xfd\x0d\xa9\x17\xe0\xbd\xbf\x0e\x89l+Lh/\xf8\x85\xe2\xe9%\xd0`\x8dE\x190g\xd8\x9e^\x9c\xc1|z\xb9\xcfJ\x87\x9a\xe0\xb1\xf8\x05 \x06\x17\x8b\xf7\xfe\xba\xc2\x12\xf5\x12\x1a\xac\xa8\x17w\x08\xa3^\xa2\x07r\x98\x9bYI\xf4\xe7B\xf7L}\xc1{\x7f=d\x8a\xed\x8fqb\xc24%C\xdc\x91\xb5\x93 \xdel%\x13\xb4\x0d\x135\x0e\xb1^n%1^\xbf\xb1\xc4\xcfH%\xb1\x03\x07\xa6\x0f\x1e\x98:\x80&y\xc5\x95Dx\xc7\x95\xf8\x07\xba\xeae\x82\xfe&\xe8-\xaa\xec\x8eO2\x8bo\xdcop\xc1\xb68a\xbd\x84E\x0f\xeb\xe5>\xd4\xef\x1b\x7f\xac\x97\xfb\xa8\xb1;\x82Y/\xf7Q\xd7\x80\x18h\xbd\xdcG\xa5=\xa3\xa8\xf5r\x1f\x15\x0e\x8b\xc3\xd6\x8b\x7ft\xb6^\xee\xbe\xddSN\xe7\xeeX\xe6p\x0b\x88\xf7\xfer\x99a \x84os\x83xOJ\xa6\xec\xcc\xc3qy%x\xe2\xf4\x91H\x9b \x04O\x9c\xd1\xe3ZI\xfcTT\x12;p`\xfa\xe0\x81\xa9\x03\xe8\xbeO\x9c>ih\xf5\"4\xe7{\xcfC_\x9c\xa1\xffz\x994Q\xa6M\x13eI\xbd\x92\xde\xeae\xf2@\x0b\xe3\xb6\x0f%6m\xae^\"\x93\xe9\xea%2\xc5\xae^\xc2\x13\xef\xeaeR:^\xbd\xc4\x1f\xbd\x85\xcc\x95\xbaW/A }\xf5\x12\xcd\xa3\x1c\xca\xe4y2\xd9\x1c\x07\x103\x8ee\xb6\xea\xc7!\x0dB\x82\xb9eC\x99\xad\x0dQ]0\xe5\xb0%\xc47\x85qD\xd1x\xef\xef@\xf0\xde\xdf\xb8]P\xc4\x0e(B\x0bBbt!$\xda\x8eO2 \x13\x8cG\xf0-YJ\xa2\x95\x0b\x93\x14\x0c\xb1\xb7g)\x99\xa4h\x98\xa6l\x88\xbfUK\xc9\xfdV\x7f\xca\x8e\xec\x16n\xddR\x12\x7f\xfb\x96\x92P\xe2\xedP&u\xca\x94\xc3\xfc>\xfev.%\xf7P\xf7=\xde\xfb{,\xd1\xf32\xd2\x82G*\x14&(\x15\xa6\xd9\xee \xca\x85)\n\x86\xa9V\xfb\xfe*\x1eo\xafo\xcdZO\xb5\xd5S,\xf5\x84\x8e\x88\xb3t0\x87\x8d\xbe\xf3Z\xc7\xc5\xa2(\x89\xacnXU\xf1\xde_\xab\x04\x1b\xf7p\x93\x1e\xbcB\x06\xf6\x80\x90\x08\xdb\x17\xbc\x1e\x06+\x0b\xa2\x14\x06\xb1\xab_\x94\xe2 Ny\x10\xbf\xd6\xddm5cV\xb6[X\xd3\xe2W\xb38\xf3\x1a\xa5\xe40c&d\xc2\xaau\x07u\x8c[\xa1\x02+\x16X\xa5\x10'xdM|\x1d\xdc\xa1\xbeS\xbc\xf7\xd7j\xc9]\xbb\x0c\xaf\xde\xf4\x19Mx\xef\xafc:x.\x15A\x14\x13\xaf\x96\x82wk\x01\xbc \"~\xfd\xa9\xc4g\x00)q\xab\x1cB\xd4\x0e\xfe\xaa\x0f$gx\xd10|\x08\x17>[i\xe7\x06\xdas(\xf8\x0e\x84 \nD@g\xf8\xd1\x1ab \x0c\x91T\x85HRB8\xfd`\x12\xd1\xc0\x7f\xdb8\x17y \x88&\x10L\x08\x08\x185\x01\x13\xd8s'\x13\xf1q\xbf\x1d\x8c7\x18\x1fQ\x03G\xf3C\xb6N\xbe\xa0\xf9o\xf5\xde_\x9f\xba}-\xa2\x9f+\xa8i{\xfd\x14\xeb5\xf1\xc3\x898<\xb1\xcaJ\xd2\xf7\xde|\xcf\x97\x9c\x12\xba\xd0\xe2MJ\xb3\xb5\xbal\x8b\xae\xd9\x16s5\xbc\xf5\xab\xff\xb4\xbd\xd6\xdf\xd1\xfa\x076\xd7k^\xc3w\xb4\xda\x17yE\xd5\xb5d\xa5\xfa7o\x84\xcaJ5,\xe1\x7f7\xb4<\x9c\x0e\xcb\x81w\xe7\xaf`G\xebm\xb1\xee*\xa3LY\xef\xfdA\xdd\xcerhr\xfaiO\x13\xd6(Z\x96E\xd9V\xa0\xdf\xa4*\xd9\xd2\xdd\xe8j\x1c\xe3Zf^\xbd\xf8\x07\x8e\xa7\x9ce\x92%\xc5Z3G\xed\xfb\x1a\xdb\xfeTf\x06\n\xaa\xc3\x9a\xd6$\xcd4\x96\xd2\xb6%0n\x05\x1c[\x00\xd7\xd2\xcf^_6\xa5q\xf3\xe7a\xb0\xdcsJ\xc8\x19|x\xf7\xc3iI\xab\xa2)\x13\n9\xd9\xc9\x89\xde\xe4\xe9/\x0d\xcd\x0e\xc0f\x7f\x9dnR\xe9\xe8\xa8E\x82Xc\x81\xe2n\xad2%Y\xfa\x0f\xba6G\xf0\xef\xcb\xa2.\x92\"\x83U\xb3\xd9\xd0Ru\xdaB\\\x19&\xda\x06\xbb\xa6j\xad\x11\x10\xf3n*\xa3\xa4\xb2\xa4\x0e+r\n\x8fN\x1fA\xb2%%IjZ\xb2\xafP~\xea\x83\x8a^\xeeh\xde\x9a\xdc\x0f\xef~x\\\xc1\x9e\xd4[ci\xbcRmb(\xf3WYq\x9b&\xcb\x0e\xf0KC2\xa6\xc1\xb5\xd0\xaf\xfc\x14\xd7\xe4\x13RYsk}dU9\xbd,\x8a\xcb\x8c.\xb8\xceV\xcdf\xf1\xba)y\x8a\x84\x8fOEKx\xb1\xd5\xb6h\xb25\xac\xd8\x92a,\x8f@B\xf2\"O\x13\x92\xf19d\xfe\xf2\x13\xba\xb8\\\x9c0\xd5\xf2\xe4\x0f\x8f\x16\x8f\x98\xf5\xe2W\xc9% \xdd\xd7t\xfdt\xf1\x85\xf9\xf579\xec\x99\xb2\xd3\x84\x9e@M\xc9\xae\x82\xa6j\x08S\x87H\x9e\xb5O3V\xd3\xba\xe0\xcaX\xa59)\xcd\x9bn~{\xddaO\xe55r<\x1d\xa0\xf1aa\xeb\xe4m\x89M\xd5\xcfJ\\\xd3O\xbc\xab\xcf\xf2\xc3\x02\xbe/n\xe85-O\xac\x1b\xaa\x0f\xef~P\x1b6V\x945{ \xb7\xa0\x14>n\xebz\xff\xf1D\xfc\x7f\xf5\xf1\x04\x8a\x12\xf2B\xfez\xc2GcBr(\xf8\xecd\x1a1\x17Hkh\xf62-\xb3\xe5\xbb\xb4\xbc\xa6\xa5P\xcd\x8e\xec\xe5u\x93\xbc\xe6u\xd1\xe6f\xe6\xee\xcaT\xdctG\xcc\x0e\xc6M\x91e\xc5M\xf5\xc2\xd2\xb7\x7f\x807\x9b\xaeElX\xa8\x9c\x80m\xa3\xf9f\xa6\xaa\x9a\x1d][\x92\xbd\xfd\x81-N\xdf_\\\x9c\xc3w\xdf\\\xa8\xbb\x05?\xbc\xfbA\xcc\xb1\x03_\x8f\xcd{\x9e\xbf\x8f\xa7\xc5\xc5aO\x7f\xfe\xfb\xcf\xc6\x17\xf8\xd6\xb8\xe1\xe3A\x8c7\xb9\x8c\x9c\x88\x94n\xc5\xbaI(\x90\\,afb\xdd\x1f\xe0\xac\xcbRR\xf1\xcb\x14 \xd3\x99\xd82$$a\xb6\xa5(\xae\x9a=\xc8\xb8HX\x91\xcaB{,\\i]>\xbc\xfb\x81\xd7qK\xae\xf9\x10\xdc\xf5\xe6\xd0ZL\"\xa2\x9a\xc4\xfe\xfb\xbaH\xd7@r\x1b\x1e$*\xc8\xcdGI7EIOT\x01\xac\\R\xa7\xab4K\xeb\x03\xe4\x94\xae+\xb1\x15\x02n\xf2\xcak+\x81\xb3\xc8\x99\x99\xcd/)\x7f\x89\xcf\xd9\x05<\xf9PQ\x95\xc8\x89i\x89\x0dOf\xb3\xc4\xf8$9\xb9\xb4\xb5~URr\xc5l\x90,x\xf1\xd4<\xa2~*j\xfaB\xdc\xb9\xbai\xf2D\xcc0\xd6\x0ei\xbb\x92\xa6,i^g\x87\x9e\xb3\xdeb.\xf9]\x97\x9bM\x9a\xa4$s\xace\xabf\x03%e+\x11=\xe1\xb9m\xd2Z}\xb4\xa9\xa8\xc8^\xd8\xceKcQ+z\x99\xe69k,\xdb\xd3Z\x16\x97\xc3\x9e.\xc4\xf8'\xfb\xb4Z$\xc5n\x01g< \xc0\x8f\xe4\x00\xcf\xbfz\xfe\xa7\x13V{y\xd9g^\xc0M\xba\xa6\x16S\xc3\xeb\xc8\xeb'\xac\x89\xf9\xd3\xe9n\x9fQ\xb6f\xaa\xf1\x9f\xafY\xf9\xfb\x8c\xdf\xf2Yt\xbf3Kg[\"\xdes\xf3QA\xc1\xea\xc9\xacW>6\x9d\xf0D&\x90\xa4\xbb}}\x90\xf6\xe6\xa9yeN/\xb75\xac,\x96\x92\xb7\x92\x9f\x16\x86\xad\x80jO\x93t\x93&P\xd1\x1d\xc9\xeb41\x10k\xb9\x01\x99\xb0/\xf38@\xfan\xdd~d6rE\x81\xc8\xf4\x98\xdd\xae\xebhs\xa5\x92+\xad\x8ak\xf3D\x93*\x90\xc3@{\xa3\xafG\xcd>\x9e\xe5\x87\x8f\xdd \x92\xe4@\xcaUZ\x97\xcc\xb2\x98k\xa8-J-\\$+\xe4|\x00\xa2\xefZ\xb6d\xf0\xd5O\xd4p5\xdc\xab\x8e\xf6\xa4\xedV\xd304\xcf\xd5l\xce\xd2\x15\xaf\xb6\\\xdc*\xa8\x9a\xfd\xbe(\xf9\xb6bO\x92\xab\xd3&g\xff\xc76\x13b\\\xe8\xa7\xb5\xdc}\x98w[\xc5\x06\x9aZX[e\xb3*f\xed\xc9z\x9d\n\x03\x06\x974\xa7%\xcf\x9f*N\x7f*_\x96\xb6y\x1aSym9\xb6\xb6\xe8\x7fR\xc3\xe0O\x8eap~\xa8\xb7En\x19\x08\xa2\x92\xdf\x16\xc5\x93\xc5ba^\xd9\xdaA\xf0\xc4\xfa\x0c\x9fH|\x88\xc4\x8e\x10V\xc8\x1b\xa1\xf2\xd7\xdf\xbc\x7f\xf5\xee\xcd\xf9\xc5\xdbwOm\x1e\xd4n\xd2\xd9?,>mW\xe7\x9f\x1d\xea\xfc\xae\xb0\xa4\x04d\xaa|\xf1\x12\xfee\xbfZ|[\x14\xbf.\x16\x0b\xf3Hd\xb5>a\xfb|\xf6\x06\xc9\x0f\xfb\xd5\xe2'z\xe3h@\xba\xe1o\xfc\xb7\x97\x90\xa7\x99u\xe8Y\xb5l\x99 \xf6\xf7F\x0d\xb4\x14#k*\xda\xb6\xf8\x90\xefHYmIvQ\x08\xf31W3\xb4\xbf]l)_\x1d\xdb\x95\xaa\x9f/~?^[\xc55\xf7\xfam\xa9tl\xb2M\x9b\xfeS\x8f5\xbb\xe0\xd3M\x93e\x0b\xfe\x03;a<\x06\xd2\xdb\x0b\xb0}\x82L;\xa9-P\x8c9\xfd\xc7\xda\x857\xcf\x0e\xca\x15p\xe4\xdfiO6@65\xd5\xb9u\x85p\xd7\xd3\xe3\xd3\xc7\xfaO\xc9\x1d\x83\xaa2wP\x00\x95s\xe4\xd1\xa6(\x16+R\xf2\xc6~:=,\xfe\xf1Hh\x91\x1f\x97\xb5\xe5\x99\xbd\x07\xbc\xaa\x8fX\x19\xa6\xcd\xc2\xbf\xbf\x7f\xfb\x93\xfe\x97\x97/_\xbe4\x0f\x01\xf6^\xe7%\x13\x9b\xec\x82\xd9\x17\xb9C\x14'\xf1\xa6\xa2\xca#~\xd9d\xc4p\xea8.\x86\xbd\xb2\xa6\xdd\x9e\xee\x04\xe8nE\xd7\xebnw'@\x01mq\xc4\xe0o\xeb\xed\xb7\x04\x14\xf0\xf1\xdf\x98\xe6>J\xf7\xcf\x00\x15Q}\xa3\x9f\x1f\xd2\x9e\xbd\xb0\x1c\x19Ir\xc5\x8cZ\xe7\xc2\xd8\xa4\x195/D\xca\x08\x9e\xd3\xb2*r\xeb\xac\x95\xbe\xd3MZV\xf5\x92w\xf0Kxf.\xb9}\x81\x93`\xe4\xf3\xcf\xc3\x97D\x00k\xad\x1eq]>z\x01\x8ft\x93v\xa8\x86\x85h\xe5\xa3\x13[y\xbc}?\x91\x1d+\xf3\x7f\x8a&\xfc/\xeb\x0b\xac}\xa3\xe7C\x1b\xf9f#O\xa3\xc3\xb1&FCZ\xc1\x0d\xcd\xb2/\xaf\xf2\xe2&\xe7ffK* \x904U]\xec\x02'\xd7p\xc8\x9f\x88\xd3\xcdh\x1e\x08\xdb\xd9\xab\x0e\x1b\xc0\x86\x93'\x11CZ\xff\xb1\x8f|2\xaaq\xbe-\xb2\xb5\xccb\xcck.\xa6r\x9a\xb7\xf3\x03\x84\xcfV_\x94\x982\xfa\xef\xf0*,\xda\xd5\xfe 3kJ\x85G\xce<\xe5\xe3\xfe\xf9\xef??\xb5L\xa49\xc6\xdc\xf0\x83\xf6a\xc7U\xc5\x8a|\xb6x\xfe\xecy\xf5\xc82\x84\xc4\xff\xd7\xe4\xb2\x07\xf3| \xefiy\x9d&L{\xa7IQ\xed\x8a\xeatE*z\xda!\x9b\xa7\xd7\xcfV\xb4&\xcfN9\xd2Z\x9d\xfe*\x98c\xff\x14\x85\\v\xf1\xbbU\xb3\xdb\x91\xf2\xf0\x02\xbe\xa3\x02\x1e\xfc\xfa\xf0=\x7f\x14~ih\x99\xd2Jb\xb5L\xcd\x97\xe95\xcd%\x07M\xd9\xacbOE\x8b\xdf\xac\x8f\xcb\x90\xcf(\xa0\xb0\xd7\x84\xc7\xcf\xbf\xfa\xea\xb1\x19m\x84\xaaI\x12ZU\x9b&\xbbM\x98\xd1L>\xb3\x82ov\xe8\xcd\xccxr\xbav\x1c\x8e\x1d/2\x99\xb5\xe6\xe0\xac=\xb8Ic\xb5\x17Y\xcc\x87$f'\x879\xd5\x05n\x95y\x92\xc0\xac\xe4/C\"}\xf9\xce\xe3\xd7\xcc\xa0&\xa4\xa6\xeb\x17\xb0\xe7\xae[\xbe\xb3\xfbX\xad\xafD\xda\xe8\x8f\x90\xe6UM\xc9\xfa\xf1\xac\xc3\xecv\xc7\x80\xf3\xc6\x84\xd0\xbb\x11\x9cu\x02\xafz\x81\xdf\xcd\x06^c\x07z\xe3\xc7\x99\xf8\xdfy/\xc1\xdc\x9f\xf4q\x94\n\xf1\xbb?\x00\x86\xf7\x01\xd8\x9a:\xb8)\xc07\xf3\xbfo\x8e\xffa\xce~K\x81\xa1\xd9\xfcC\xf3\xf6\xbb3\xf4{t\xe9\x9d1\xb2\xed9\xf3\x83>\xe3\xa2\xbeyf\xbc\x9fqF\xbbY\xc2^\x0d\x04\x9f\x05A\x88\xd7Z\xaa\xc4\xab\xa5\xe0\xddZp\xaf\xb1\xedc^k\xad\x12\x9fq\xa4\xc4\xadr\x08Q;\xf8\xab\xdesM\x1e=l'f\xfb\xe7^\xf7j\x91WK\xc23\xa7{\xe4H\x9f\xabz\xde)\xb6\xe7\xfa\xe0X\x1f\xced\xe3\xd6\xd4\xb9ai\xc2\xe7j\x83o\x92\xef\xb9\xbe\xe7N\xd1=\xd7\x97\x02\x12l\xcf\xf5I\xcf\xf4\xd8s}.,\xb9\xb5\x7f\x1a\xeby\xea7\xd8\xccyf\x95\xb6d\x8af\x86\xe4\xd6\xb6\xfe\xf5'\xa7:f\x89nq\xae*N\xadB\xd06\xf9\xe2\x93d\xfe)\x9f\x17\xdfY\nLA\xec\x1d\xffM\xde,*\xbc\x17\x7f|f\xbdb\xf4\xa7\xb7\x17\xdf\xbc\x10\\\xc6,cJ\x83\x96)\xc3\x0d\xd7\x02\xe0o\xf4qI\xe1\xff5U\x0d\xe4\xb2\xa4\xd4\xde\\I]+J68\xb8g\xd2\xfa}\xceq\xddQN\x98a\xad\x12U?\xdb\xef\xbf'\xd5\x16\xd6\x05\x15\xbc!I\xfdgEW\xb6U\xb9\xfed`\xab\xb8\x02U^\xb3\xed\xfd\xc0\xaf-\xe9\xfa|'N$\x15\xa1\x1f\x81`\xe6\xa9\x99\x96\x04\xfb}\x903\x8cy\xf7\x85\x933\x0e|\xe7F\xd2]_!ku\x97\xe7\xf2\xba\xa8\xe9}\xdf\x9a\xc9\xeb`0KC \xa8\x00\x04V\x02T\xf1^Oz\x9b\xa2\xbe\xf8\x05\xbd)\xf9\x12\xde\xbf\xf9\xee\xa7o^/\x7f|\xff\xdd\xf2\xe2\xff\x9e\x7f\xe3\x19\x1f\xd6\xc9q \xe7\xef\xbe\xf9\xcf\xb7\x17\xdfL+\xc13,N\x89\xae\x8c\xb7\xe7o\xdf\x9f\xb9\xa2\xe4\x94\xb4\xd1r\xd3\xf4\xe1o\xef\x87\xf2\x9e\xdf\x9f\xfacuy!q\x16A\x88f\x86J\\\xad\xea]R\x8fK0p\xb3\x04\\Hm\xee\xd3\x17<`\xcb7u\x83\xb5_^\xc09\xdf\xe5\x90\xcc\xaf8\x97+c(\x11\x13'\xe4x*$\xe8\xbe\x86\xb0\xb3\xb2\x10[\x08\x90^\xdc~\x91\xa1\x04\xda:\x88\xb0w\xe0}\x9c\xef$\xa2\xfb\xc0wK6\x96 _\xcbP\"\xb4\x07\x91\x1ad\xe2\xe9\x95\x19J\xcc\xb8S\x12>%\x94\x84v8\xc4w:\xc4v|\xa0\xa7g(^~\x9f\xa1x\xc7\x0b+\x89P\x88\xaf\x13u(\xc1\xe1\xd4J&\xd4\xd0\xbb\xab\xba\xca\xa5\xf9\x9a~\n\xabZ\xd8\xb8\x0f\xb7\xb7\xde\x11\xd8J\xeeBc\xf1\xdb\x10\x1e\x8e\xddE\xe2\xaf\x0e|\x0f\xd1\xdd\xa3\x9fr\xd0\xc3' \x9b\x10f[\xd3$\xdds^w\x9a\xf7\xbc\x1f*\"\xd8\xbb(RUE\x92\xf2\x82\xc4Y\xd2\xebM\xfa\xa9\xa6y\xc8\xe5\xea\x9fA\xff\xb4m\x1a\xf0\x0e}r,(\xe9\x81V\x0bx\x9bg\x07\x19_!08*<\xd5\xfe]#\xb7\x9c\x9e\x89\xda\xdb\xea/\x7f\x8b\x93\xa7\xeb\x9c\xf14\xf2.\xe7h\xba\x8d\xa7\x91\x7f\xcf\x1c\xcd7\xcd4\xf2.\xcc4P\x82\xfa?F\xb9\\\xb1-3\x8c\xa7\x90();\xcf\xc3\xa0\x1a\xec/^\xe5qG\x7f/\xe7\xd6\xa6\xb0\xc4\x82\xf5\xa5w\x98r=\xca\xdd\x0d+\x9f\x81\x1d\xb8\x89\x0c\xdd<\xa2\xbba$\xe8n@w\x83[\xd0\xdd\xe0z\x1a\xd0\xdd\x10\xbe\xb7@w\x83E\xc2\xa7\x84\x92\xd0\x0e\x87\xf8N\x87\xd8\x8eGw\x83\x12t7\x08 \xb7\xb7\xbf\xc5\x13\x13\xba\x1b\x1ev\xff\xa0\xbb\xe1\xb3\xe8\x1ct7\xe8$F\xb9\x9f\xa3\xbb\xe1\x01&z\xef\x16\xd2\x87Q\x9f\xa0\xfdPdM|\xf7A\xa1\xc3\xf2\xb5\xa2\xd2\xb0\xb195\xe9|7\xe1\xc5Y\x1f\xea\x9b\x82\x95\xb5\xc9\xd2\x84'\x9eg#\xdb1\xe6x:\xfa\xa5H7\xbf$<\x17\xfe}\x13|z-Xz\xc4\xe0\x08 \xa8\x0b\x04\xd6\x07\xe4~\x8d\xae\x03\x8fz\x81u\x82\x88z\x81#DK/\x11\x15\x83\xc8\xca\x81O\x90\x97^BC\xbf\xf4\x12\xd9V\x98\xd0^\xf0\x0b\x1e\xd3K\xa0\xc1\x1a\x8b2`\xce@3\xbd8\xc3\xcf\xf4r\x9f\x95\x0e5\xc1c\xf1\x0bk\x0b.v\x18\x067\nv\x0b.\xcd38N/\xbe!s\xc1\x05\x0fB\xec\x82\x03\xe9\xf4\x12\x1a^\xa7\x17w\xd0\x9d^\xa2\x07r\x98\x9bYI\xf4\xe7B\xf7L}\xb1\x87\xf8\xe9e\x86\x8a\xfan\xa9\x86\xe2\x19$\xa8\x97{\xb2\xfd1NL\x98\xa6d\x88;\xb2v2\xc1\x9b\xadd\x82\xb6a\xa2\xc6!\xd6\xcb\xad$\xc6\xeb7\x96\xf8\x19\xa9$v\xe0\xc0\xf4\xc1\x03S\x07\xd0$\xaf\xb8\x92\x08\xef\xb8\x12\xff\xd0L\xbdL\xd0\xdf\x04\xbd\x85\x07w\xea\xc5#\xe4S/\xf7\xd1l\xef\x80K\xbd\xdcG\x95\xdd\xf1If\xf1\x8dT\x0d.\xd8\x16\xd9\xaa\x97\xb0xW\xbd\xdc\x87\xfa}#f\xf5r\x1f5v\xc7\xdc\xea\xe5>\xea\x1a\x10\xb5\xab\x97\xfb\xa8\xb4g\xdc\xaf^\xee\xa3\xc2a\x91\xc3z\xf1\x8f'\xd6\xcb\xdd\xb7{\xca\xe9\xdc3\x809\xa8Ls\xb0\xb3^l7m\xea%r\x1b\x1c\xbb\xfd\xfd\x8c\x0e\x9eA\xbc'%Sv\xe6\xe1\xb8\xbc\x12[i\xe7\x06\xdas(\xf8\x0e\x84 \nD@g\xf8\xd1\x1ab \x0c\x91T\x85HRB8\xfd`\x12\xd1\xc0\x7f\xdb8\x17y \x88&\x10L\x08\x08\x185\x01\x13\xd8s'\x13\xf1q\xbf\x1d\x8c7\x18\x1fQ\x03G\xf3C\xb6N\xbe\xa09\x87\xc0=J\xd2\x03\xc2~5\xf2\x80\xbc\x0d0\xb6\xa1@r\xbc\x89\x1b\xd7\xaf\xbd\x82\xf6\xb8\x9b\xd4\xed\xb5\xef\xd3<\xe1\xd4\xf7jWT_V\xeb+\xf8j\xf1\xe7\x7f\xc5\x9bj]\x8b\x8c\xbb^\xe0\x97l\xc0{\x86\xa8\xf9\xe1\x8c\xc5w\xa6\n\x98\xfb\x93~\x13\x00\xbcC\xfa\x01o\xaa\x1d\x8a;h\xde\xa3K\xef\xec\x90\x847\xd5\xba\x1b\x08\xfe\x0b\x1e\x9e\x95\x9c*\x87\x10\xb5\x83\xbf\xeao\xe3\xac\xe4\x1f\x0e\xed\xd5\"\xaf\x96\x84\x073{\x84-\xcfU=\xef\xa8\xd7\xb9>8\xd6\x873\xfe\x17o\xaa\xf5\x88\x9a\x9d\xebK\x011\xafs}\xd23bu\xae\xcf\x85\xc5\x9b\xfaG\x96z\xd5\xcf\x7f\xaf6\xfe0;C\x89\xfbI\xd3\xcb4'r\xe3\xd4>f)I\x16p\"\x95\xc3N5\x84\x9d\xc7\xbe\xa6\xc9\xf6O\xcfe\x8d\xady+\xdf\xe4pA\xf35-wi^\x9f@\xbdeu\x91\x89\xf5?2UW\x1fO`\xd5\xd4j#\xf8\xfe\xf5\x7f\x9cX\x8a\xbb\xe1[\xcekZ\xd6\x90\xd6P\x17\xe3\xba\xd8\xaa\xc2\xf6\xa6+Z\xd7\xb4\x84\x0f\xff\xc7\xe3@\xe8\x8e\x95\xedZ\x86\xf7\xfer\xf1\x9aC\xfe\x03\x19\xef\xfd\xb5\xedq\xf0\xde_\xbc\xf7\xf7X|k\x02x\xef\xafA\xf0\"\x1e)x\x11OO\xf0\"\x1e\xafw\x82\x12R\x84y\x1e\x84\xf8`\xf0Cq{\x99\x86\x12h\xeb \xc2\xde\x81\xb7s\xa4\x93\x88\xee\x03\xdf-\xd9X\x82%\x94\x84v8\xc4w:\xc4v<\xba\x1b\x94\xa0\xbbAH\xb8\xbd\xfd-\x9e\x98\xd0\xdd\xf0\xb0\xfb\x07\xdd\x0d\x9fE\xe7\xa0\xbbA'1\xca\xfd\x1c\xdd\x0d\x0f0\x92\x1d\xef\xfd5K\xe8\xb0\xc4{\x7f]\x85\xe2\xbd\xbf!\xf5\x02\xbc\xf7\xd7!\x91m\x85 \xed\x05\xbfP<\xbd\x04\x1a\xac\xb1(\x03\xe6\x0c\xdb\xd3\x8b3\x98O/\xf7Y\xe9P\x13<\x16\xbf \xc1\xe0b\xf1\xde_WX\xa2^B\x83\x15\xf5\xe2\x0ea\xd4K\xf4@\x0es3+\x89\xfe\\\xe8\x9e\xa9/x\xef\xaf\x87L\xb1\xfd1NL\x98\xa6d\x88;\xb2v2\xc1\x9b\xadd\x82\xb6a\xa2\xc6!\xd6\xcb\xad$\xc6\xeb7\x96\xf8\x19\xa9$v\xe0\xc0\xf4\xc1\x03S\x07\xd0$\xaf\xb8\x92\x08\xef\xb8\x12\xff@W\xbdL\xd0\xdf\x04\xbd\x85\x87\xca\xea\xc5#\x80V/\xf7\xd1l\xef\xf0U\xbd\xdcG\x95\xdd\xf1If\xf1\x8d\xfb\x0d.\xd8\x16'\xac\x97\xb0\xe8a\xbd\xdc\x87\xfa}\xe3\x8f\xf5r\x1f5vG0\xeb\xe5>\xea\x1a\x10\x03\xad\x97\xfb\xa8\xb4g\x14\xb5^\xee\xa3\xc2aq\xd8z\xf1\x8f\xce\xd6\xcb\xdd\xb7{\xca\xe9\xdc\x1d\xcb\x1cn\x01\xf1\xde_.3\x0c\x84\xf0mn\x10\xefI\xc9\x94\x9dy8.\xaf\x04O\x9c>\x12i\x13\x84\xe0\x893z\\+\x89\x9f\x8aJb\x07\x0eL\x1f<0u\x00\xdd\xf7\x89\xd3'\x0d\xad^\x84\xe6|\xefy\xe8\x8b3\xf4_/\x93&\xca\xb4i\xa2,\xa9W\xd2[\xbdL\x1eha\xdc\xf6\xa1\xc4\xa6\xcd\xd5Kd2]\xbdD\xa6\xd8\xd5Kx\xe2]\xbdLJ\xc7\xab\x97\xf8\xa3\xb7\x90\xb9R\xf7\xea%(\xa1\xaf^\xa2y\x94C\x99\xa3 \xef\xfduL\x07\xcf\xa5\"\x88b\xe2\xd5R\xf0n-\x807A\xc4\xaf?\x95\xf8\x0c %n\x95C\x88\xda\xc1_\xf5\x81\xe4\x0c/\x1a\x86\x0f\xe1\xc2g+\xed\xdc@{\x0e\x05\xdf\x81\x10D\x81\x08\xe8\x0c?ZC,\x81!\x92\xaa\x10IJ\x08\xa7\x1fL\"\x1a\xf8o\x1b\xe7\"\x0f\x04\xd1\x04\x82 \x01\x01\xa3&`\x02{\xeed\">\xee\xb7\x83\xf1\x06\xe3#j\xe0h~\xc8\xd6\xc9\x174\xff\xad\xde\xfb\xebS\xb7\xafE\xf4s\x055m\xaf\x9fb\xbd&~8\x11\x87'VYI\xfa\xde\x9b\xef\xf9\x92SB\x17Z\xbcIi\xb6V\x97m\xd15\xdbb\xae\x86\xb7~\xf5\x9f\xb6\xd7\xfa;Z\xf3\xba}}\x10\xf74\xbd\xa3\xd5\xbe\xc8+\xaa.&+\xd5\xbfy3T^\xaaa\x19\xff\xbb\xa1\xe5\xe1t\\\x12\xbc;\x7f\x05;Zo\x8buW!e\xcez%\x0c\xeaw\x96C\x93\xd3O{\x9a\xb0\x86\xd1\xb2,\xca\xb6\n\xfdfU\xc9\x96\xeeF\xd7\xe3\x18\xd73\xf3\n\xc6?p<\xed,\x13-)\xd6\x9ayj\xdf\xdb\xd8\xf6\xa82;PP\x1d\xd6\xb4&i\xa6\xb1\x96\xb6m\x81q;\xe0\xd8\x06\xb8\x96\x7f\xf6\xfa\xb2)\x8d\x1b@\x0f\xa3\xe5\x9eWB\xce\xe0\xc3\xbb\x1fNKZ\x15M\x99P\xc8\xc9NN\xf6&O\x7fihv\x00f\x01\xeat\x93JgG-\x92\xc4\x1a\x0b\x14\xf7k\x95)\xc9\xd2\x7f\xd0\xb59\x8a\x7f_\x16u\x91\x14\x19\xac\x9a\xcd\x86\x96\xaa\xd3\x16\xe2\xda0\xd16\xd85Uk\x91\x80\x98wT\x19%\x95%}X\x91Sxt\xfa\x08\x92-)IR\xd3\x92}\x85\xf2\x93\x1fT\xf4rG\xf3\xd6\xec~x\xf7\xc3\xe3\n\xf6\xa4\xde\x1aK\xe3\x95j\x93C\x99\xbf\xca\x8a\xdb4Yv\x80_\x1a\x921\x0d\xae\x85~\xe5\xa7\xb8&\x9f\x90\xca\x9a_\xeb#\xab\xca\xe9eQ\\ft\xc1u\xb6j6\x8b\xd7M\xc9\xd3$||*Z\xc2\x8b\xad\xb6E\x93\xada\xc5\x96\x0dcy\x04\x12\x92\x17y\x9a\x90\x8c\xcf!\xf3\x97\x9f\xd0\xc5\xe5\xe2\x84\xa9\x96'\x80x\xb4x\xc4\xec\x17\xbfN.I\xe8\xbe\xa6\xeb\xa7\x8b/\xcc\xaf\xbf\xc9a\xcf\x94\x9d&\xf4\x04jJv\x154UC\x98:D\x02\xad}\x9a\xb1\x9a\xd6\x05W\xc6*\xcdIi\xdex\xf3\x1b\xec\x0e{*\xaf\x92\xe3)\x01\x8d\x0f\x0b['oLl\xaa~f\xe2\x9a~\xe2]}\x96\x1f\x16\xf0}q\xf3\xff\xb3\xf7n\xcdq#I\x9a\xe8\xbb~\x85\xaf\x1eFR\x0fEvU\xf5\x99c\xa6\xddZ;jI\xd5\xcd\xd9n\x89G\x97\xea\xb36\xd6\x96\x05fF\x92\x18\"\x81,\x00I\x8a[\xd3\xff\xfdX\xdc\x80\x002.\x1e\x91\x91\x12\xbb\xca\xfd\xa5JL\xc0\x11\xe1\x88\x1b\xdc?\xff\x9c\xdd\xb2\xf6\xc4{\xa8\xfa\xf4\xfe/\xfa\xd0\xc6Uy\x19\x04\xc5\n\xca\xe0\xa7\xeb\xbe\xdf\xfet\"\xff\xdb\xfdt\x02M\x0bu\xa3~=\x11\xa3qY\xd4\xd0\x88\xd9\xc9-\xe2V\xc8z\xd8m\x155\xb3\xe7\xb9\xac\xbde\xad4\xcd\xa6\xd8\xaa\x92\x93\xa2\xe5}3\xf03\x0b\x97e)\xab\xdd\x15n'\xe3\xba\xa9\xaa\xe6\xae{\xe1y\xb7\xbf\x83\xf3\xf5\xd8#>,4/\xe0\xd0iq\xa0\xe9\xba\xdd\x86\xad<\x84o\xbf\xe3\x9b\xd3\x9f?~\xbc\x80?\xbd\xf9\xa8\xeb\x0b~z\xff\x179\xc7\xee\xc5\x9e\xec>\xf7\xfc\xc7|Z|\xbc\xdf\xb2\xbf\xff\xc7\xdf\x9d7\x88\xe3\xf1N\x8c\x079\xde\xd46r\"i\xdd\x9a\xd5n\xc9\xa0\xa8\xe5\x16\xe6\x06\xd7\xfd\x0e^\x8eL%\x9d(\xa8Xp\x9b\xc9c\xc3\xb2X\xf2\xb5\xa5inv[P\xb9\x91pYt\x1e\xe8c\x13\xa2v\xf9\xf4\xfe/\xa2\x8d\xd7\xc5\xad\x18\x82\x1bc\x0e\xad\xe4$*t\x97\xf8\xff\xdf6\xe5\n\x8a\xda\x17\x13\x92\x0d\x14\xcbG\xcb\xd6M\xcbN\xb4\x02\xae\xb7\xe8\xcb\xcb\xb2*\xfb{\xa8\x19[u\xf28\x04b\xc9ko\xbd \xce\xa6\xe6\xcbl}\xc5\xc4Mb\xce\x9e\xc2\xd3O\x1d\xd3dN\xdcJ|x\xf25K\x8e\xcf\xa2.\xae|\xbd\xbflYq\xc3\xd7 \xa5\xf8\xf4\x99{D\xbdmz\xf6B\xd6]]\xef\xea\xa5\x9ca\xbc\x1fj\xedZ\xee\xda\x96\xd5}uo8\xec=\xcb\xa5\xa8w\xb9^\x97\xcb\xb2\xa8\x02{\xd9\xe5n\x0d-\xe3;\x11;\x11\xfc6e\xaf\x1f\xba\xeb\x98d0\x1c\xe6\xa5S\xd5%\xbb*\xeb\x9aw\x96\x9fk=\x9b\xcb\xfd\x96\x9d\xca\xf1_l\xcb\xeet\xd9lN\xe1\xa5 \x02\xf8kq\x0f\xdf\xfe\xfe\xdb\xefNx\xebU\xc1\xcf\xba\x81\xbbr\xc5\xde\x1e\xf9\n\xed\xcf{\xf3\xb9\xe0\x83\x1f\xbey\x01\x17\xbc\xfd|\x02\xab\xae\x14f5\x87W\xff\xfa\xaf\x9e\xbd\xfb\x87\xa6\x81u\xd3\xc0\xf7pzz\xfa\xdf\x9d\x97\xf1\xc6\x14\xf5\xbd\xfb\x82\xa2\xbe?\xe5\xcd\xf8\xa1m6O\xd7M\xf3\xcc}\xe9\xe9\xa9{S.\xd7\xf0\x94\xab\xfa$:\xf2\xb1y\xfa/\\\xd73\xf8\xc5\xb3\xb1\xf8\xf4\xfd\xc3o\xbbo\x03\xb6\xfb\xf7\xe2\xb6\xc8f<\xf8^\x1cX\xf9S2X\xa8\xec\x9e\xfe\xd04\xa7\xcb\xaa\xe8\xba\x80\x81d\x13\xf9M\xb2\x8f\xc6\x8d\xee6\xfc\xc3\xf9\xcb\xd9\x19\x1f\xd6\xb86~(6\x8c\x9f\xe7^\xca\xd6^\xb1\xfe\xb5\xf4s\x9c\xd7]_\xd4K\xf6\xf4YJ\xe3\xadz|}\xb1\xff\xa4\x87\xc1w\x81apq\xdf_7\xb5g \xc8F\xfe\xd04OOOO\xdd;\xdb0\x08\x9ez\xaf\x11\x13I\x0c\x91\xd4\x11\xc2\x95\x9cK\x93\xbf~\xf3\xe1\xd5\xfb\xf3\x8b\x8f\xef\xde?\xf3yQ\xc7I\xe7\x7f\xb0|\xb4\xdf\x9c\x7f\x08\x98\xf3O\x8d\x87\x16\x90\x9b\xf2\xc5\xf7\xf0/\xdb\xcb\xd3\x1f\x9a\xe6\x97\xd3\xd3S\xf7H\xe4\xad>\xe1\xe7|~GQ\xdfo/O\xdf\xb2\xbb@\x07\xca\xb5\xb8\xe3\xbf}\x0fuYy\x87\x9e\xd7\xca\x9e \xe2\xbfo\xd6A\x8f\x1a\xd5R\xd9\xb7\xd3O\xf5\xa6h\xbb\xeb\xa2\xfa\xd8\xc8\xe5#W7\xac\xbf}\xbcfbw\x1cv*\x933~;\xdf[e\xa9{\xfb\xb1T96\xf9\xa1\xcd\xfe\xa8'\x96S\xf0\xd9zWU\xa7\xe2\x07\xfe\x85\xf1\x04\n\xe3,\xc0\xcf \x8az\xd2\xaaP\x8e9\xfb\xc3\x86\x8d\xb7\xae\xee\xb5+`\xcf\xbf3|\xd9@\xb1\xee\x99\xcd\xb1+E\xb8\x9e\x9e\x9c=\xb1?J\x9d\x18t\x93\x85\x83\x02\x98\x9a#\x8f\xd7MszY\xb4\xa2\xb3\x9f\xcf\xeeO\xff\xcfciE\xf1\xb9l\xd5\xe7\xf6\x1e\x88\xa6>\xe6:\\\x87\x85\x7f\xff\xf0\xee\xad\xfd\x97\xef\xbf\xff\xfe{\xf7\x10\xe0\xf7\x8d^2y\xc8n\xf8\xfa\xa2N\x88\xf2K|\xd71\xed\x13\xbf\xdaU\x85\xe3\xabc_\x0d\xbfe\xc5\xc63\xdd \xb0\xcd%[\xad\xc6\xd3\x9d\x0c\x0cX\xd5\x15\x0e\x7f\x9bq\xde\x92\xe1\x80\x9f\xfe\x1fn\xb9\x9f\x94\xfbg\x12\x19\xd1\xef\xc6>?\xd4z\xf6\xc2\xf3\xc9X,o\xf8\xa26\xba0\xd6e\xc5\xdc\x1b\x91^\x04/X\xdb5\xb5w\xd6*\xdf\xe9\xbal\xbb~!^\xf0\xf7\xf0\x8d[\xf3p\x83\x00\xc2\xa8\xeb\xbf\x8d\xdf\x12\x01\xbc\xadz,l\xf9\xf8\x05<\xb6M\xda\xa9\x19Ne/\x1f\x9f\xf8\xf4\x89\xfe\xbd-6\\\xe7\xff\x90]\xf8\x9f\xde\x1bx\xfff\xd7\xc7v\xf2|\xad\xbeF\xa7cM\x8e\x86\xb2\x83;VU\xcfo\xea\xe6\xae\x16\xcb\xccu\xd1A\x01\xcb]\xd77\x9b\xc8\xc95\x1d\xf2'\xf2\xebf6\x0f\xe4\xdai4\x87\x0f`\xc7\x97g!\x87\xb4\xfda?\x89\xc9\xa8\xc7\xf9uS\xad\x14\x93\xb1h\xb9\x9c\xcae=\xcc\x0f\x90>[\xbb*9e\xec\xcf\x11M8\x1dv\xfb\xa7|Y\xd3&\xdcs\xe6i\x1f\xf7\xdf\xff\xe3\xef\xcf<\x13)\xc7\x98\x9b>\xd0?\xec\x84\xa9\xb8\xcaoN\xbf\xfd\xe6\xdb\xee\xb1g\x08\xc9\xffn\x8b\xb6\xd8\xb0\x9e\x99\x80\xee\xe7b\xe1}\xa1pa\x86\x8a\xb2~1\x0f>\xb4\xec\xe7]\xd9\xb2\xd5\x0b\xe8\xdb\x9dit\x87\xb7\xc1\x86\xf2\xe9\x8b\xab\xc9\xd3?\xb0\xf6\xb6\\reg\xcb\xa6\xdb4\xdd\xd9e\xd1\xb1\xb31\xc2zv\xfb\xcd%\xeb\x8bo\xce\xeaf\xc5\x16e\xbdn\xe4\xedWc\x06q\xb7\xdbl\x8a\xf6\xfe\x05\xfc\x89\xf5o\x9b\x15;\xaf\xd7\x0d\xfc\xbcc\xad\x8e\x14)W\x1bp\x15\x82\xb0L\xaf\x95\xcd\x96IK\x9f\xaf&w?\xd2\x1d\x96\xb1I\xa3\xc5O\xbe\xfd\xfd\xef\x9f\xb8\x03\x9c\xd0\xed\x96K\xd6u\xeb]u\xcc\xc8\xa6:\x8f,f61\xc5\xa9\x15\x82a?\xed\x11YxI\xef\xbd\x0f\x80\xe0C\xc4\x15\xdfzp\x19\x08\x17\xd68\xc4\xbc\xac\xeb\x01\x1e\xfb|\x0f\xf22\xcf\xe7y\xcc\xf4\xcd;@\x8f\x81GUe\xd7\xb3Z\xc0r\x92\xee\xafY\x7f\xd7\xb4\x0e\x8b\x06\xeeE\x0c)\xe7\xbd\xcb\xeb\xa2\xae\x99-4\x8e\xb89\xe8\xf0\xdc4uy\xe3\x02X\x06\x94\x0b\xbf\xf1\xd1\xa6I\xff9T\xfe-\xd8w\x80v\xbb\x0c\x03\xb1\xdd\x8dA\xf5\xe2O\x83c>4\x18\xd45E\xefE\xfe\"F\xbd\xb8L\xe2$7\xcdjW1?\xa0\x02Q\xe5%\xe9\xa1J\xaf\xf3\xfa\xce\x0f\x82\x8d{\xe6\xf2\x9a-o\xba\x9d\xfd\x9c?\\\xf5W\xd9\xb2\xd2\xf8\x88\xe4\x87\xe0\x1feK\xcf\xed\xac\xae\xf2\x88\xb6\xe8V7\x07\x0d\xbe\xa1\x11O>\x94\xf5R\xd0\xc9r\xbd\xcf\xbb\xd5\x0d\xfc\xfe\xf4\x0f\xdf=\xd9\xbbgr\xca2\xda\xb8\xd7~\xfe\x0f\xe3 7\x00\xde\x86H\x8bS\xab\x0d<\xb7\xa7\xc6\x87\x9b\x1b\x91r\xb3c\xa4\x16\x82\xcc)!\xc8\x1cA\xe6F!\xc8\x1cA\xe6F!\xc8\\O\x909\xbb\x10dN\x0bA\xe6\x082g\nA\xe6\x082G\x909 \xc8\x1cA\xe6\x84\x10d\x8e s\x04\x99#\xc8\x9c!\x04\x99\x9b\x08A\xe6\x082\xe7\x1e\x02\x04\x99#\xc8\x9c)X\xf8\x12A\xe6\x84\x10d\xee\xd7\x02\x99K\x87\xabu\xf7\xf5\xb2\xac\x15U\x92\x03\xac\xf6A^3`\xd5\x04>M\xdd\xe8\x82\xa8\xa9{\xd4\xaf\x0f\x16\xa16\xe9\xbe)R\xd7e\xd3T\xac\x98\xba\xee\x82\xd1X\xd5\xf5\xc8`\xec\xd4`Z(\x16\xab\x84b\xb1\x14\x8b\x1d\x85b\xb1\x14\x8b\x1d\x85b\xb1=\xc5b\xedB\xb1X-\x14\x8b\xa5X\xac)\x14\x8b\xa5X,\xc5b\x81b\xb1\x14\x8b\x15B\xb1X\x8a\xc5R,\x96b\xb1\x86P,v\"\x14\x8b\xa5X\xac{\x08P,\x96b\xb1\xa6`\xe3b\x14\x8b\x15B\xb1X\x8a\xc5\x8ee\x1fX\xdf\x9dUE\xcf\xba\xde\x1b\x98\xfd\x8b\xb8d\xa8\x83\xf7\x81\xf5C\x8cV\xde=V\x92x\xde\xb1\xde\x15\xab\xddW\xa3.|\xb0a[Y\xe6\xc7U$\xcc\xeb\x96\xf1\xd5t\xf2\x95\x12\xed\xbfB\\0@\x84\x10t?\x05\xear\x06Z\x07\x88\x16\x02\"z \x98\xa6J\xc18\x9c\xb4\xc4F2\xbd\xca\xec\x9e#\xcf\xc7G\xee\x88&\x84\xa3\x9a\x90\x10\xd9\xf4w\xa0\xe8\xaf\xd1\xd1M\xc8\x15\xe1\x84\xc4(\xa7W!7.:\xd2 \x87G;!:\xe2\xe9U\xa5\"1QQO\xc8\x1d\xf9\x84\xc8\xe8'\xc4F@\xfd#{\x88\x8eb\xa3\xa0\x90;\x12\n\xb8h(\xe4\x8c\x88\xc2\xc1QQH\x8b\x8cB\xae\xe8($EH\xfd\xd3\xa1\xe8\xd8*\x1c%\x85\xe3DJ\xe1\x88\xd1R8N\xc4\x14\"\xa3\xa6\x90\x169\x0d-\xc1\xb8\xe8)\xe4\x8d\xa0BD\x14\x15R\"\xa9^m2\xca\x1a\x11M\x85\x9c\x11UH\x88\xaa\"\xd6\xf3g\x88\xc8*\xe4\x88\xaeB(\xc2\n\xf8\xb3#\"\xd2\n\x91G\xcc\xe8\x88\xabW\x9b\x88\xc6\"\xa2\xae\x10\xd1\xca\x8c\xd1W\x88\x8a\xc0B\xee(,$Fb\xfd\xe3\xaa\x0bGc!=\"\xeb\xd4\xc7\x9f\x18\x8a\xcaB\xb6\xc8,\xe0\x03\x8c\x80\x89\xd0B\\\x94\x16B\x81\x83\xc4h- \xf4z\x9c\x93\x99\"\xb7\x90d\\|\x04\x17\x10\xbdL\x88\xe4Bj4\x17\xfc\x01+TT\x172Gv!St\x17\xfc#&_\x94\x17\xf0\x91^@F{\x01\x1d\xf1\x05\xdc\x88\x8a\x8f\xfcBT\xf4\x17\xbc\x11`\xc8\x15\x05\x86\xd8H0$F\x83!.\"\x0c\x88\xb7\x10\x98h\xe1\xfb\xf1\x11b\xc8\x18%\x06L\xd3<\xf3,_\xc4\x180Qc8 r\xecT\xc8/\xf4E\x8f!w\x04\x19\x82QdH\x8d$;\xb5I\xd7\x83\xdf\x0b\x13\x8e(\x837\xf0\x05\xde\xc82$E\x97\x9d\xaa\xbcQgH\x8d<;\xb5\xc9\x03\xb4\xc7\x17\x9a/\x02\x0d\xa8(4$D\xa2!.\x1a\x0d)\x11i\x88\x8eJC`+\x0fD\n!\"Z\x88\x8dPCJ\x94\x1ab#\xd5\xe0\xefxJ\xc4\xda\xa9\xcc\x88\x07c\xa7\x0c.r\xed\x9d\x10\xf5\x95?z\x0dy#\xd8\x10\x8ab\x83?\x92\xed\xbc'5\xc2\x0d\x19\xc7nD\xa4\x1b\xa2\xa2\xdd\xe0<\xbd\xdc6}Y_-\xb6\xcd\x9d\x8bk\x1e\xe5\xd2\xf1\xc5i\xa5l\xdbf\xdbt\xac]l\xdb\xb2i\xcb>\x10\xe7<\xe8iSbg\x1d&\xb6\xd2:[C\xeeZ\xb6\xc5UY\x8bw\xb1\xdf\xd8\xc93\xc6\x0be\xf4\x82 \xe7\x8e\xf1W\xfd8[\x94]J\xef\x0b\xef\x06X\xee\xd9\xe7\xde\x1d9\x0e\xda3\xe8\x8a\x9bt\xf5\xbf\\\xee-\xdd\nmf\xfe\xbf\xca\xd5^t\x9d\x8c-\\\x14W\xec=\xfby\xc7\xba\xfeT\xfe\xeeP\xf6\xf3\x8e\xb5\xf7B\x0dW\xcb-\xc9`\xd3t=0\xe1\xb0\x16\x9e\xeeS8\xef\x8d\xb5j\xdb\xdfC\xe9r\xf2Lrm6M\xcbtd\xc3\xb6?\xf7M_8\xe2\xe3hczJz(\x9ar\xa7\x9fP<^XQ\xfcO\xbd\xdb\\J\x97\xa5NW3r\xa3\\\xfd5\x0d\xbdlvu\xbf\x10\xca\\\xcb\xd8]\xd1A\xc7\xfa\x13(\xfbN\xc7\x99:\xd8\xd5r0\xaf\xa4\xb7\xfa\xae\xec\xa6\xe3#\x98[\xbf\x0fUA\xa5\xd9\xcf\x14\x0dI\xf7\xa6\xa2?\xde\xffY\xe0I(\xe7^\x0b\xe5\xdcS\xce\xfd(\x94sO9\xf7\xa3dE\x9e\xc4\xa0N\xa2\x10'\x94s\x7f(\xba$\x01Y\x92\x05U\x12\x8f(\xa1\x9c\xfbC\x10$1\xe8\x91\x04\xe4\x08\xe5\xdc\x03\xe5\xdccQ!\x94sO9\xf7\x94s\x0fx\xe0A\x10\xd1\x11\x81\xe6\xc0dk\xc7\xa08(\xe7>%m=\x84\xd2\xa0\x9c\xfb\x084\x06\x12\x89\x81Aa\xe0\x10\x18\x94s/$\x05e\x11\x81\xb0\xa0\x9c\xfb\x0c\x08\x8a z\"\x159\xe1\xdc9)\xe7~O(\xe7>\x01\xf1\x10F;\xc4\"\x1d\"P\x0e\xd1\x08\x878t\x03\xe5\xdc\xc7!\x18(\xe7~\x90\xdfd\xce\xfd\xb6h\x8b\x0d\xebY;\xc9\xbc\xe7\xf3\xcc\x8c\xa4\x9f\xde0s\x13\xf4\x05\xa1U\xd4\xb9PKh\xcb\xfa][\x0b7\xa0\n\x84\xaa\xd0\xde\x10\xa2\x16\xce\xbb\xab\x99\x97K\xc4\x9c\xf9\xb4\x0f\x85\x9d\xdf\xf1\xfd\xae\xa9\xc5\x87t\xb3^w\xac\xe7\x87\xf8is\xc1\x08>\xcc\x90\x05e\xfdB>\xcb\xf8[\xcb~\xde\x95-[\xbd\x80uQM\xc2\xac\x0e\x0f\x8a\xd5kb1\xa2l\x9f\xcb\x8e3\x8f\x85\xea\x8c0e\xbd\xdb\xb0\xb6\\\xea\xbf\x89\xd9\xb6,j\xde\x1f\xe92\xbaf\xb56\xfc\xae\x1e\\\x87\xb3\xf3\xec\xb9\xd0V\xb1\xae\x1bM(\xfdZ\xbb\x8e\x9b\xfa\x86E\xdas\xaa\xfe\xc8\xc6\x9d\x05\xf1-\xe6\xad\xcaM\x89\xb5\xae\xb8v\x00\xa18b\xfb\xd2\xadl\x8e`\x15&\xdfU\xb3p\xb3\xf4\xd7\x98\x7f:_C\xc5\xd6\xbd\xc6B(p\x84>3\n\x8f\xb8\x9c \xf2!\xdc\xce\x97\xf7\xc0\x8a\xe55\x14\xdb\xedW\xb4\xa2\x89P\x18\xef\xf7\xd9\xd2\xb8\x83[T\x8c\xd0\x06\xfav\xc7@8\\\xebU\xb9,z6\xc4\xc6\x94\x05\xc5\x85j \x99\xea\xcazY\xedV\xb3\x13a!\x9f2\x04'goL\x84\xba\x0d\x9f9_\xba\x0d\xc4\xcflq\xf9t\xde\xcd\xde\xd6\xac\x0b\xe2\x10\xdd\xb2N\x81\x12\xc4\xf4\x1a\xe7#\x9fr\xa7j6\x95Wu\xd3\xce\"\x0ez6N\x1f!-s\xe8\x8b\x9d\x97U\xb0\xbc\xc0\x96\xdd\xb2vr\xab\xef\xe5\xa9\xab\xe7/\xae4\x10.-\xb3\xcf\x84\x89\x1e\xfe\x0cV\x8bXl\xd3\xaeX;?\xb0\x7f(\xeb%{\x01\x92\xc7\xe5y\xb7\xba\x81\xdf\x9f\xfe\xe1\xbb\xac\xd6\xc8E\x1f\xf3\x8bdG\xf9\x87\xd4\xe5 \x90\xb1\xe2_4\x85\xcc\x04\xc8\x06E\x0f\x05\\\x95\xb7\xac\x06\xa9Y\x0f\x829\x9b\x8cM\xe7#m \xe2\x93\xd1\xd2\x7f\x05\xcc\x0b\xf1\xc9x$\x16\xa5\xe3Uf\x8f\x8ax\x1ck\xb9\xd1:\x10F\xec@\x02j\xc7\xdf\x01\xe2\x93IE\xf2@4\x9a\xc7\xab\x8a\xf8d\x88O&\x15\xf1\x03i\xa8\x1f\xc8\x85\xfc\x81$\xf4\x8f\x7f:\x10\x9fL\x1c\x1a\x08\"\x11A\x90\x86\n\n-\xc18d\x10\xe4E\x07A\x04B\x08RPB^m\xc4's\x08r\x08B\xe8!\xc0\x9f\x1d\x11(\"\x88\x19%I\xa8&\x88B6\x01\xf1\xc9\x84\xde\x02\xf1\xc9\x1c\x88\x86\x02\x0c\"\n\x0e@E9\x15\xf6\xc4'#%\x8c\x96\x02\xe2\x93q]\x90\x0f]\x05(\x84\x15$\xa0\xac \x0ei\x05)h+\x88F\\\x01\xf1\xc9X%\x05\x8d\xe5TF|2Z\x88O\xc6\"\xc4'C|2\xd6\x0b\x82\xae8\xe2\x93\x19\x7f\xc2\x1a\x93\xf8d\x1c`\x15b\x94\x19\xc53\x9a\x88Q\xc6r;1\xcaD`T\x88Q\x86\x18eF\xc9\x8a=\x89\xc1\x9dDaN\x88Q\xe6P|I\x02\xb6$\x0b\xae$\x1eSB\x8c2\x87`Hb\xf0# \xd8\x11b\x94\x01b\x94\xc1\xe2B\x88Q\x86\x18e\x88Q\x06\xf0\xd0\x83 \xa6#\x02\xcf\x81\xe1\"\x89\xc1q\x10\xa3L\n)K\x08\xa7A\x8c2\x11x\x0c$\x16\x03\x83\xc3\xc0a0\x88QFH\n\xce\"\x02cA\x8c2\x190\x14A\xfcD*v\xc2\xb9s\x12\xa3\xcc\x9e\x10\xa3L\x02\xe6!\x8cw\x88\xc5:D\xe0\x1c\xa21\x0eq\xf8\x06b\x94\x89\xc30\x10\xa3\xcc \xc4(\xa3D\xd3\x14\\\x9b9\xed\xa0\xb2\xfeg\xc1\x871\xe9\xbfow\x11\xd4\x16Af\x0b\xe2\xb0\x81\xb0\x15\x89\xc3\xe6\x88\xc6\x0d\xb3\xaf\x10\x87M\x0e+\x12\x87\x0dq\xd8\xfcZ9lV%\x9f\x18\x97;n\x89\x81\xc0f\xd9l6\xbb\xba\xec\xef\x17\xdb\xa6Q0\n\x1bq\xcd+}\xddE\xd3T\x03]\x8d\x8c\x15\xab_\x80k\x80eS\xd6CD`\xc2S3Q\xf1H\xf7\xf1\x81\xb2\xd3\x8c\xd60\xa5\xff\n\x10\x97\x15\xab\x9bMr\x1c\xa5\xd8\xf0\xc9\x9dx;&\x8a\xf1\x9a-_5\xa5\x81p\x84\xbe\xb9a\xb5\nB\xc8\xd6\xeb\x95\x88\x9f\xf4\xf9\x9f\x96\xe5\xa6\xb0g,\xc8\xe6\xba\xbe\xb0\xdf\xbe\xfb\xf8\xe6\x85\xf8f\x96\xd7\xa9\x8f\xcfR\x04O^\xb3\xa5:\x96\x0f\x01+\xf3lnU(=\x15\xf6\x87u\xe5U]\xf4\xbb\x96u\xc3L\xe4\x9b\xd4Us\xd5\x88\x83\xf0\xfe\xf7\xec\x14\xfc\xc9'\x836\xcat\x8e<\xe9\xa6\xb3\xc4r\xf7\x9e\xb1\x05\xd8m2\x83\xd2!s\xd3\x898\xbb\x84psJ\x087\xe7[W\x8e\x10\xdd\x9d\xef`\xff\xaf\xda\x0f\xbd\xfb\xd7\x8aU\xecJ\xd0}\x9d\xfd2\xfc\xffB\x91n\xfd\xe3\xacewE\xbb\xea\xdc\xfb\x9a\xf1\xfd\xf6Z\xde^6\xf5G~\x14z/o\x9d\xecu\xf2\x8c\xa4\x94B\xb1\\\xb6;\xb9*\xf0\xa3\xeb\xa0h@\x8f[\xb7A\xfbc\xd4\x95\x0fv?\x9c\x18\xd2\x94\xaf1z\x07\x03/\x0eeW\x93\xdd\xf2\xdfn\xef\x9b\x14g\x0f\xa5\x04\xfa)%\xd4[)\xdec\x80\x94`o\xa5\xf8\x8f\x04RP\xaa0\xc7\x03)\xd1\x87\x04\xaf!\xc4\xf1!pT\x90\x92t`\xf0\xe8Sn>\xdf\xb1AJ\xfc\xe1\x01\x97P1.\x1e\xaf\xf5b'\x17\x90\xd1\xe3)W\xaaqPY\xf54kav\xa5\xe2I\xa7\xff\x9f\xbf\x009'\x02\xc7\x1b\xbd\x06\x0eo\xb4\xaa\xd4)dom4\x1e4W\xea\xc8\xa9\xf8\x1ak\n\x1d\xb3\x07I\x9a5_\xe9\x98-wdm\x15\x01_\xdam\xc4\xf0\x9e\x0eH\xcfY{o\xaa\x89\x83\x87}\x9bN?t;N\x17t\xdcVB\xc7\xed/|\xdc\xf6E[\xf6N\xd2\xae\xa1\xb8w\xe1d*\x0e\xbfj\x16\\\xe8\x1b\x95\xc4\xb7\x9en\x06\x07Fs\x8e\xf8\xe9p\xf6\xcb\xdei\xd3\xc3\xef<\xce\xf2\xa8\xcf\x87\xc2\xd8\x7f\x03\x1f\x0d\xf4\xbd\xb0\xffsh\xfa\xd1\xde>\xc8?\xd3\xde>?c\x86\xce\x97\xc6\xe4\xb1h\x0bm\xf3\x19wx\xda\xdcgB\x9b;m\xee\xc9\x9b\xfb\xd8\xf2\xbd\x9d\xd8\xd5\xf2\xbd\x0b'-\x1f~=v\xcb\x8fq,\x99\xd77\xf0\x9cB\x9av\xc8\x8c\x9f\x9eCF\x1d3G\x80\xef\xecaj{\xa4m\xf1@O\x1fG*\x02\xe1\x98\x85\xe1=\xde0\xb8u v\xe6K\xe0;\x8f\xde\xd1\xacs~=w\xa4\xe0\xf79\xf3%\x1e\xbc\xd3M\xc6\x17\xeduJh\xaf\xa3\xbd\xeeA\xed\x18\xfc3b\xd5\x16w\xd3`\x89w\xdf\xf8\x9b\xba\xe5\xa5\xea\xad\xde<\xb4\xaa\xc1\x0c1\xdb\xc7L\xe9#m\x9d\x07\xba\x87\xd8\xcdf\n~S\x98\xebJ\x1c\\q+\xfd\xcc\xde\x19\x96\xfb\xf9\xb0\xa05_ \xad\xf9\xb4\xe6\x7f\xd95_\x18\xc0\xb3\x94_\x88\xdf\x87\x85[^>\xe4\x03\x19\x1aa\xd3\xacv\x15\xb3/\xdd\xc6uR\xe1#\xdd\xbd\x07\xbah\x9bf1e\n\xcd\x92\xc60_\xf68\x9e\xb4\x8d\xa6f\x19\xc5;\x99\xfcSi\xc4Z\xf6\xc5g\xf7\\\xf3\xcc\x86\xcb\xa2c\x8b\x813\xd1\x07^\x08N\xab\xf0G\x0b\x08\xd7\xe4\xb6e\xcb\xa2\xe7#\xf9\xe35\xb36`t!\xae\x86\xab\x1d\xea\x04\xd9G\x07u\x03US_\xb1V\xa0\x89]qt\x858\xff|f\x19\xaeO:\xe5 \x84\x0d[^\x17u\xd9ml!\xf5\xcb\xa6\xdeu_\xd7`\xb6\x16<`\x8bMN*\x0bV\x17\x97\x15\xf3Zl\x8e\xc9\x86\xa0\xa9\xc4\xfa&\x97\x13\xd4\x99D\x9dB\xd4\x8a\xf6\xfe\xe2\xd5L\x1f\x9d@\xe8\x04\xf2\xe5O I\xbb\xf6\xe8\xf0\x89\x0b+\x1ashp\xb9\x98\x9b\xf3y\xbdn\xf6k\xc8\x8a\x0d\xa7\xec:\x157\x1aTt\xacZ?\xdf\x03\xfctb\xbe\x0d7\xab\xab'\xe7\x01\xe7\xb3\xd5\xc5\x0f\xf6X {\xe1\xc3\x0b\xe2\xbf\xe5\xe6\xba\x1c\xaee}\x99>=\xce\x17[\xfe\x12\x16\x97M\xbdZP\xa8T\nf\x83\xa5P\xe9 \x13s\xed\x8d\xa6)$\x8aUk#H\xda\xd9AQ`\xac\x174\x18i0&\x0fFc\xdb1G\xa1\xf1\xe7\xe9R\xd9\xb2%+o\xd9\xca\xe3\xea\xb2\x1f\"\x9d\xfbQ\xf0\\9\xd36\x9e2\xdd\xdb+9\xbb\x94\xd0Q\xf3\x0b\x1f5}\xce\xae\xdfDH\xdc\x7fl>\x9bo[\xb6\x13\xf40\xaf_\x8d\xab\x90>0\x17\xcb\xe5n\xb3\xab\x04i\xa0\xb1H\xf1\xe3p\x11H\xe6\xb1\xa8}\xa4\x8d\xf2@\xcf\xc2\xbeM\xfe\x08\xcb8\x84\xe6d\xd8g\xe6j-\x04\xd6\x08\x08%\xe8\x04\xd6\n\x08\xb6NJ05\x071\xedC\xc7\x15\xc0\xa9\xc1\x1c[ \xe5\xe8\xe2\xe9<6\x1d'\xe9\x08\xe3\xd4\x86L\xc5\x89;\xca\xa8\"\x1c\xf6\xc0\x9ae\xae\x07\xcf\x19\xce\x98\x9am=\x1aO\x18\xc3-t\xc0\x98\xfdJ\x07\x0c:`\x8c?|\xa1\x03F\xb3\xeb\xbb\xbe\x10\xfc\x1e\x8b`F\xf10\xb3\xdf\x8dw\xcd\x93\x01\xf4G\xba\x80O\xec\x99\xc6\x7f\xd2\xd8W\xfbH[\xe9\x81\x9e8\x02\x0e\xae\xa4s\x81S'\xd0\xa1`.t(\x98I\xdc\xa1\x00P&\xf4M{#7\xd7XJ,J\x9e\xee\xea\xe7:\x02W?\xd3\x83\xdc\xd6\x91\xd9\xc7 \x94\xe2\x14Pw\xe5-\x934F\xc5\xf2\xe6D\x16\xdb\xe8\xa0\x13\xe6\x83\xae\xa8\xcb\xde6#\x96\xd7ly\x13OG\xe2\xe9r\xf0`4\xd3g)\x163;'Y\xccJ\x1e\x19%t`\xa2\x03\xd3\x83:0uU\xd1]3\xcc!\xe9\x83\xbcr8\x19\x89;\x81\xdd\xca\xc5r\x8dw\xc0(E\x8f\xb4\x01\x1e\xe8Yhb\x19S\xbe\xc6\xd4\x1a\xdf\xdc\x96\xb5e\x13\xe0AAM\x12O\x85\xcb\xb5(r\xe6r\xe4\x04\x9f\x12\xde\x82a6\x1a\xde\xf0Qdn\xbe\xe6\x86i\x0c4\x07\xd7\xbe*$Yv\xe2\xf4Q.\x05\x8de\x7f\xad@6]\xdf\xb4\xa2\x9c\xa9\xe3nQ\x9c\xaf\xecDU(]\xee\xaaZ\n/#\x14[\xfef\xdaR\xfc\xffFS;v\xbd\xa8\xddd\xd5&\x0eb\xd6\x83\x80<\n\x98\xc1=yb*Z6\x80yj\xc5\xb1^\xa8^_;\x8a\x9a5KQ\xf4)\xc4\xfd\xa1\xc6\xf04\xc4\xa8\xfe\x86s \x1eRBW\xc2\xf5\x0cv\xcb\xc9\x01#\xab\xf3\x91J\xe8R \xdd\x99|\xf9\x12\xba\x01g\xa4\xda\xf7\x82\x07\xee\xb0'Ro\xc5t\xacVB\xc7j:V'\x1f\xab\xc7\x96w}\xd1\x8ar\xfa{\x1c\xf6\xbe#\xcd\xec\xaeI't=\xd4\xe1\"E\x8f?\xf6e>\xd9\xd5\xf6<\xef_,\xe5\xf0\xde\x0b\x0d0kKN\xe4#t\\\x91-?\xd0nS\xe9\x8083R\xe9\x80#\x1a7\xbd\xff\xcbY\xcb\xbaf\xd7.U\x01?\xb1>\xed\xea\xf2\xe7\x1d\xab\xee\x81\x1b\xa6/\xd7\xe5\xb4\xb2\xb0Sa?\xa98\xec\x8e\xd9\xcd\x0b5\xeb\xd2\xc4\xd2\xd1&\xfb&\x8b\xe1\xab\xeasP\xb8\xc2\xb7\x00\x15+\xba\xde\xfd,\xbe\x8d?>{\x0c\xcb\xeb\xa2-\x96=kE\xf1wY\x8a\xb0cW\xb2b\xb7\\P?\xbd\xff\xcb\x93n\xfe\x9d0\x15\xd1\xa8\xc1\x0b\xe9~jo\xa9\x92(\xec\xab\xd7nn\xc9\xa7E\xc7We\xa7\x92\x9fxS\x9c\x05\xbb~z&{\"\xd4\x8eg;OY\xf7\x82\x9f\x97\x9a\xba\\\x16\x95\xd8\x0b\xddO~\xcaN\xafNO\xb8i\xc5b\xf6\xf8\xf41\xa8\xa2\xee\xc5r\xc9\xb6=[=\xf3\x05\x82\xcfk\xd8\n\x07\xf1\x92\x9d@\xcf\x8a\x0d\xdf/v\x057\xc7X\xc1_\x16\xf0\xe7\xc6\x90\x15\xf8\xdd\xcd\xae*a\xafn\xd8<\xef\xdd\x8f\x96~\x0b~\xd6\xe8\x1bQ\xafR\x1dX\xf8@\xe2'\xe8f-\x8a\n\xc3\x9f\x9b;\xbe\xe8\x9fX\xe2\x97\xa3|z\xff\x17\xed\x82U\xa5/=qhQ\xa5}^\xca\xfd\x84\x1f\x1c\xebF\xfdz\"F#?\xb4\xea\x8f\x1fOiz\xbe\x13\xed\xb6P\x88\xbe{\x9e+\xea\xd6K\xd3l\x8am'\x87\x96hy\xdf\x0cu\xe6\xc4\x87W)}\xca\x0e\x871\x88\x13\x92\x082\xbf\xf0\xbc\xdb\xdf\xf1S\xdd\xd0#>,t\xa5\xd3\xb1~=?\xafw\xddn\xc3V\x9e\x1a\xc0\xbf\x83\x975\xfc\xf9\xe3\xc7\x0b\xf8\xd3\x9b\x8f\xa0\x10\xa8\x9f\xde\xffE\xce1Q\xd6\xd3\x83J\xd8+\x9c\xf7\xf1~\xcb\xfe\xfe\x1f\x7fw\xde\x00\xdaeW\xab\xf1\xa6\x8e\x83\xe2\x0dm\xdbf\xb5[2(j\xe9\x8e\xb29<\xa5\xfc\x0e^n\xb7\x15?\xcbI[\xb6L\x06\xe6uX`\xc9\xd7\x96\xa6\xb9\xd9m\x87\xb3\xc3e\xd19S\x82Au\xdc\xd3lQ\n\xb5i\xe1\xba\xb8\x15Cpc\xcc\xa1\x95\x9cD\x85\xee\x12\xff\xff\xdb\xa6\\AQ\xbb\x07\x16\xa8\x06\x8a\xe5\xa3e\xeb\xa6e'Z\x01\xd7[\xf4\xe5\xa5\xac\xcb^3\xb6\xd2_\x00b\xc9ko==\x11}Y^\x17\xf5\x15\x137\x899{\nO?u\x0c\xf8\xf9\xaalj\xb3V\xac\x1c\x9fE]\\\xf9z\x7f\xd92\x11I\xd1\x8aO\x9fy\xf0'M\xcf^@\xcf\xf7\x10]Q\xbe\x10\xfdPk\x97\x08\x88\xf0/f\xd39\xec^.\x85\x93B|#\xba}\xc2j/\xbb\xdc\xf1\xa3\"\xdf\x89\xd8\x89L\xf3\xee\xf5C\xc5\xb7\xa9\xf0\xd9\xeay\xe9T%<\x00u\xa9\xaa\xfe{6\x97\xfd\xb2\x8e\xa7\xf0R\x84X\xffZ\xdc\xc3\xb7\xbf\xff\xf6\xbb\x93\xa93\xff\xae\\1\xcfR#\xda(\xda'W\x13\xf7\xa3\x07\xec\x8e\x1e\xff\xf5\x8a\xeb\xdfVE-\xde\xe7\xf0;_\xe9|[\xc4\x07\xb1|t\xd2i.?\xc0gK'\xa6e\xb2\xc6\xf1P1\xb8\xa8\xa1h/\xcb^\x94\xbcv\xb7\xd0\xaaJo\\E\xd5\xa8\xf9\x00\x85\xfd\xd5\xf2-C\xec~\xb2\x85\x97\xd3\xb3\xea\xecL:\x1c5\x1dC\xf3b^\xa9[mn\x1dt\xbb\xed\xb6i\xc5\xb1b[,o\xceT\xa1\xf6\x97\xf5\xbd\x1c\x17\xf6i\xadN\x1f\xee\xd3V\xb3\x86]/W[\xbdfu =\xda\xba*\xf3\x15\xab\xf9\x87\x95h\xbc*\xc6\xbdv\xee\x19\xbc=\xf2\x15\xda\x9f\xa7\xab\xd0~\x13\xa89\xff\xea_\xff\xd5\xb3w\xff\xd04\xaa\x86\xff\xe9\xe9\xa9\xbbh2oLQ\xdf\xbb/\xd0\xc5\xfb\x7fh\x9b\x8d,\xd2\xee\xbc4P\xc1\xff\xe9X\x90\xffc\xf3\xf4_\xb8\xaeg\xde*\xb9>}\x8e:\xc8\xdav\xdf\x06l\xf7\xef\xc5m\x91\xcdx\xf0\xbd8\xb0\xf2\xa7d\xb0P\xd9=\xfd\xa1iN\x97U\xd1u\x01\x03\xc9&\xf2\x9bd\x1f\x8d\x1b}e\xb2]\xbf\x9c\x9d\xf1a\x8dk\xe3\x87b\xc3\xf8y\xee\xa5l\xed\x15\xeb_K\x9f\xe1y\xdd\xf5E\xbddO\x9f\xa54\xde\xaa'\xbe\xe4\xb7\x1e\x06\xdf\x05\x86\xc1\xc5}\x7f\xdd\xd4\x9e\x81 \x1b\xf9C\xd3<===u\xefl\xc3 x\xea\xbdFL$1DRG\x08Wr.M\xfe\xfa\xcd\x87W\xef\xcf/>\xbe{\xff\xcc\xb5\xe1\x81z\xac\x9ct\xfe\x07\xcbG\xfb\xcd\xf9\x87\x809\xff\xd4\xb8-)L\xf9\xe2{\xf8\x97\xed\xe5\xe9\x0fM\xf3\xcb\xe9\xe9\xa9{$\xf2V\x9f\xf0s>\xbf\xa3\xa8\xef\xb7\x97\xa7o\xd9]\xa0\x03\xe5Z\xdc\xf1\xdf\xbe\x87\xba\xac\xbcC\xcfke\xcf\x04\xf1\xdf7\xeb\xa0G\x8dj\xa9\xec\xdb\xe9\xa7zS\xb4\xdduQ}l\xe4\xf2\x91\xab\x1b\xd6\xdf>\n<\xcf\xf2f\xd8\xa9\xf4\xb7!\\\xde\x8f'e\xbd\xb7JX\x8a\xfdX\xaa\x83\x04\xbb\xceq\xa2{b9\x05\x9f\xadwUu*~\xe0_\x18O\xa00\xce\x02\xfc\x9c\xc0\xc7\x96k\xe7\x94c\xce\xfe\xb0a\xe3\xad\xab{\xed\n\xd8\xf3\xef\x0c_6\n\xa1\xe5z\x90p==9{b\x7f\x94:1\xe8&\x0b\x07\x0505G\x1e\xaf\x9b\xe6\xf4\xb2hEg?\x9f\xdd\x9f\xfe\x9f\xc7\xd2\x8a\xe2s\xd9\xaa\xcf\xed=\x10M}\xccu\xb8\x0e\x0b\xeeB\xfd\xdf\x7f\xff\xfd\xf7\xee! J\xe7\xcf\xca\xf67|}Q'D\xf9%\xbe\xeb\x86:\x00W\xbb\xaap|u\xec\xab\xe9\x05\xa1\xdfx\xa6;\x01\xb6\xb9d\xab\xd5x\xba;\x91\x1fP6u\x85\xc3\xdff\x9c\xb7d\xd6\x82*\xe9\xaf\xdc?\xc3\x99\xd6|7\xf6\xf9\xa1\xd63O\xf1~>\xce\xf8\xa26\xba0\xd6e\xc5\xdc\x1b\x91^\x04/X\xdb5\xb5w\xd6*\xdf\xe9\xbal\xbb~!^\xf0\xf7\xf0\x8d[\xf3p\x03\x1f\x93\xfa\xfao\xe3\xb7D\x00o\xab\x1e\x0b[>~\x01\x8fm\x93vj\x86S\xd9\xcb\xc7'>}\xa2\x7fo\x8b\x0d\xd7\xf9?d\x17\xfe\xa7\xf7\x06\xde\xbf\xd9\xf5\xb1\x9d<_\xab\xaf\xd1\xe9X\x93\xa3\xa1\xec\xe0\x8eU\xd5\xf3\x9b\xba\xb9\x93 5\xd7E\x07\x85\x8f\xb4\xc3=\xb9\xa6C\xfeD~\xdd\xcc\xe6\xc1\x08\xe9S\xcd\xe1\x03\xd8\xf1\xe5Y\xc8!m\x7f\xd8Ob2\xeaq~\xddT+\x93nDN\xe5\xb2\x1e\xe6\x07H\x9f\xad]\x95\x9c2\xf6\xe7\x88&\x9c\x0e\xbb\xfdS\xbe\xaci\x13\xee9\xf3\xb4\x8f\xfb\xef\xff\xf1\xf7g\x9e\x89\x94c\xccM\x1f\xe8\x1fv\xc2T\\\xe57\xa7\xdf~\xf3m\xf7\xd83\x84\xe6\x7f\x99|>\xeb\x88\x93\n&N\xc3i{\xce\x07\x02\xd8\n!\x80\xed\xf8\x13\xd6\x98\xbf9\x80\xad=\xb9\xcd\x08F\xa7ck\xcd0\xf8\xfb\x8bW\xf3N\x10\xca\x96P\xb6A\x0f0\xc6\x89\n\x14\x99\xa7\xc8\xbc\xf3J\x8a\xcc\x0b\xa1\xc8\xfc\xbePd\x9e\"\xf3.\xa1\xc8=Q>\x1c\xd1\xb8a\xb2\x02\xa2|\xc8aE\xa2| \xca\x87\xdf\x18\xe5\xc3\xd9/\xd7Ew\xed)U\xb9G\xfb0\x00\xd7D\xe4\x0c\x9az\xfc\x0bW\xa5\xdf\xf2\x84 \xe2\xd7B\x03\x91\x04\x8a\xeb\xbd\x98\x91`d\x02\xe3\xda\xcf\x8e\x16\xc1aER\x90\"~DH\x12\x1eD<\xc2\xa10\x88\x06\xc9\x80\x05ID\x828\xe3\xe78\x1c\xc8A(\x90$\x0c\x08\x14\x95\xbd\xd4!`\x11 )\xf8\x0f_T\x16\x85\xfe\xc8\x8c\xfd@!?2\xe2>\x82\xa8\x8fL\x98\x8fC\x10\x1f\xd1x\x8f\x0ch\x8f\xccX\x8f\x00\xd2#;\xce\xe38(\x8f\xec\x18\x0f<\xc2#\x0d\xdf\xe11z\x08\xdd\x91\x0d\xdb\x81CvX\x1c\x15\x87\xe0:\xb0\xa8\x8eL\x98\x8e\xcc\x88\x8e\x10\x9e\xe3@4\x87\x07\xcb\x11\x8d\xc3DD\"\"\"\xf0\x10\xd6\xae\xe5\xc5B\xb8&\xc5\x018\x08\xab\x1f\xc9\x89\x82H\xc3@\xf8\xf0\x0e\xf9\xd1\x0e\x87\x8f$4\xd2\x01\x8bs\x98n\x8c\x88\x0c\xe9\xa8\xf4h\x95\x10=\x0b\xech\xa1\x92CJ(\x19\x9a\x92\xa1G\xa1dhJ\x86\x1e%%\x18\xe6TF\xc9\xd0\xfb\x92)0vXh,!8\x96%<\x96=@\x16\x0c\x91\x1d!Hv\xac0\xd9\x11\x02e1\xa1\xb2\xd4`\x99w\x0d\x0f\x85\xcb2\x06\xcc\xb0!\xb3\xecA3|\xd8,[\xe0,{\xe8,\x1c<;8|F\xc9\xd0\xc1\x96\xa5\x85\xd3\xac\xaa(\x19:%\xb0\x16\n\xad\xe5 \xae!#F\xc1\x00[D\x88-\x98\xc8\x19\x19f\xa3dhJ\x86\xa6dhS\x12\x82q\xf8p\x1c%Ck\xa1dhJ\x86\xa6dht\xf8\xee\x90\x00\x9eU\x1d%C[o@\x85\xfc(\x19:_\x00\x90\x92\xa1\x0f\x0e\x0f\xe6\x19s\xe8\x10!>H\x88K\x86\xbe.:s\x89\xf2\xa5@\xf3K'\xcc\xe3\x93\xe40\xbd&\xb6\x92\x10\x9a\xad\x8c\x02\xc2\x135\xd6\x94\xb9\xff\xdb\xb8\xa4\x14\\\xe7\x93\x95s\xcc\x98\xeb\xdb]0/T\xf7M7`\x11\xd1\xc9\xc9=\x93\xde\x86:ijy\xcd\xa7\xc9\x92\x7f-\xbf\x80O\x9d\xbc\xf7\x04\n\xf8\xf3\x9b\xff\x0fX\xbdl\xf8T\x91\x8d>\x81\xb2\xeezV\xac\x0eM\xa1\xc4\xa4o\x87R \xd7\x8c]\xb5E\xdd\x0f\xa9\x84\xc2\xa9\\\x88\\B\xf1\x03k\xff\xa1\xff\x8fy\x12\x0b_\xea\xdb\x06\x06|y\xcf\n\x8a\xaa\x92?\xa8\xa0\x8b\xd2\xc5\x0ff\xe3?[k\xa2\xe1\xa0\xf4\x916\xc8\x03\xcd4\x1c\x8c\xb6\xff\xcd2i\xcfp\x9d\xcc\x86\x1f\xff\xa9\x8d\xc5\x17'\xc3@3\xe3\x8c\xe2l#\x04#\xbdJg\"\x1e\x1f\xe3\x8d\x1b\x9e\xa11\x07\xc5j\xd5\xb2N\xbb\x8f\xf8\xf9K\xf5R\xa0G\xea\xd1\x0e\x0eu\xf2\xbe\xb2\x85\xf5\xae^Y}\xa4\xcaf_\xa0S\xcc\xd7\xa9K\xc6{4\x8c|\x97\x8b\x7f|\xef\xe2p*]\xd1\\\xc1\x93\xce\xddE\xcf\x18\x03t\x1f\xc6'+\xd6\x05\xfe\x8d\xdf\xac\xe1\xb2\xe8\xca\xe5 lY[6+\xfe\x7f:\xb6\xb4f\xae\x972\xa8\xb2\x9fF\xbd#\x14\x82\xa3\x14\x10\x88\x04\xc4\x9b\x05\xb4e \x15\x97\xe0\xd1\xb7\xe7\x05\xf68\x12\xf2b\x13\x82\xe8\x84\xdc\xf8\x04\xcb\xb2|\x94\xc5\x7f\x92\x11\xac\xfc\x90O\xb1\x98\x0f\xb1\xcc\x9fa\xb8\x8f\xb0\x8c\x9f`\xd8\x0f\xb0\xe8\xcf/\x82\x95C\x8e\x8f.\x82\x95\x13\xac\x9c`\xe5\x10\x8d\x8c&X\xf9D\xe2\x8cG\xb0r\x82\x95\x13\xac\x9c`\xe5\x04+\x9f\n\xc1\xca VN\xb0\xf2\xb9\x10\xac\xdc~\x03\xc1\xca V\xfe\xc0`\xe5\n\xf3i\xe8\xf0}b\xa7\"D\x07,\xe8D\xdb\x1eh2\x1b\xa0\\\x81>\xa3z\x15\x05\x11\x9dtm\xa2,\x04\x0c=\xb0\x8f\xe9\xc8\xf0.\n\x10\xde\x0d\x88p\x11\xf8\xd0\x90\xefn\xe0\x1e\xbb*oY=\x98N\xd9\xcc\x8f\x07\xd7\xce\x89\x87\x0f\x08\x7f QX/\xe8\x1b\xe5\xec\xc3\xf8\xcb\xe0\x80\x89\xedT\x18\x06\x7f\x07\xe0\xdfG\xe8^\xd4\x0cw\xeaJ\x82\x81\x07\x81\xe0\xf8\xbed\x04\x83\x07\xe1\xe0\xc1\x11\x0c\x88Q\x0c\x08<\x01\xe0\xde7D\xd8 \x12\xb0\x05^ev_\xae\xc7\x1d\x90\x1bc\x00a\x9c\x01$`\x0d\xfc\x1d\xd0\xb5\x9d0x\x03\xc8\x859\x80D\xdc\x81Wa$T\xfc`\xfc\x01Dc\x10\xbc\xaa\xc6\xfaOx\x1c\x02\xe4\xc6\"@$\x1e\x01b1 \xfe\x91\x9d\x00\x1c\xcf\x8cM\x00\x1c>\x01rb\x14\xe0`\x9c\x02\xa4a\x15 \x17^\x01\x920\x0b\xfe\xe9\x80\x05\x92\x1f\x05\xbb\x00G\xc4/\xc0q0\x0c\x10\x89c\x804,Ch \xc6\xe1\x19 /\xa6\x01\"p\x0d\x90\x82m\xf0jK\x00\x97g\xc48@\x02\xce\x01\xb1\x9e\xe3 \xe6\x19\xf0\x0e\x10\xc2<\x00\xfe\xec\x88\xc0>@\xe4\x113\x1a\x03\xe1\xd5\x86\x03\x9c\xfb!\xe7\x99A\xe7v\xd898\x93\xa4\x8d\xa5\x9d\xff\xf3I\x17\x99&=\x96\x12\xde\x7f\xe1\x93'\x1a\x05\x96u\xfa\x7fQ\x9b\x7f\xd5\xae\n\x9b\xc7@\x8a\xf7\xeb\xc6\xff]\xa3\xeb\xc7\xbb\xf1\xd3\x19+\xa4\xfd\x97k\x0c\x0eU\xec\xd5\x97\xedP\xd0\x1e\xb6E\xd7\xc9\xadU\x96\xbd\x17<\x08\xa7\xf2w\x872\xc1d \xd4\xf8*\xde\x9f\xf7\x86\xdbW\x14\x17\xf7\x14\xb0\x1d\xc1_\x1b>\xf2\xd4\xc6n\x1d\xd1M_\xa4\x96\xe7uT\x177\xc5?a\xd4\xe3\x85\x15\x1d\xc5\xd8\x0d\xb0\x9e\xab\xbf\xa6\xa1\xcd2\xe6\x8e\xcb\xef\nQ\xf3\xfa\x04\xca\xbe\xd3\xc7\xac\x0ev\xb5\x1c\xcc+\xb9X\xdf\x95\xddt|\xc4\xe4{t\x19\x12>:\xca\xf8\xd0B\x19\x1fy\xbcq\xb1^\x19\xedyq*\xc4zd\xb2zc(\xe3\x832>F\xc9\xeae\x89\xf1\xb0DyW(\xe3\xe3POJ\x82\x17%\x8b\x07%\xde{B\x19\x1f\x87xKb<% ^\x12\xca\xf8\x00\xca\xf8\xc0z@(\xe3\x832>(\xe3\x03\xa2\x93\x16(\xe3c\"q\xc6\xa3\x8c\x0f\xca\xf8\xa0\x8c\x0f\xca\xf8\xa0\x8c\x8f\xa9P\xc6\x07e|P\xc6\xc7\\(\xe3\xc3~\x03e|P\xc6\xc7\x83\xcc\xf80-y`J\xc2\xa8z\x8c\xbd\x9f\xde0s\x7f\xf5\x05\xb3U\xf4\xbaP\xab\xb3L;\x90\xa0\x05\x19PUQ\xc3!\xd4-\xfc\x82W3\x07\x9a\x88]\xf3\x15%\x14\xbe~\xc7\xb7\xd2\xa6\x16\xdf\xe8\xcdz\xdd\xb1\x9e\x7f\x1fL\x9b\x0bF\\\xa3c\xfd<}\xe3\x18\x8c\xffV#\xca\xf6\xb9\xec8s\x86\xa8\xce\x08S\xd6\xbb\x0dk\xcb\xa5\xfe\x9b\x98\xc8\n-.\xbdQ\xd7\xac\xd6\x86\xdf\xd5\x83WrvT>\x17\xda*\xd6u\xa3 \xa5\xcbl\xd7qS\xdf\xb0H{N\xd5\x1f\xd9\xb830\x80\xc5\xbcU\xb9)\xb1\xd6\x15\xd7\xea0\xba\x0b# =\xd6\xe6\x08VA\xf7]5\x8bdKW\x90\xf9\xa7\xf35Tl\xddkL\x85\x02Y\xe8\xe3\xa8p\xb6\xcb \"\x1f\xc2\xed|y\x0f\xacX^C\xb1\xdd~E+\x9aH\x87\xf1~\x9f-\x8d;\x04H\x89\x89\xfe\xf1\x85\x06\x84/\xb7^\x95\xcb\xa2gC\xd8MYP\\\xa8\x06\x92\xa9\xae\xac\x97\xd5n5;l\x16\xf2)C\xdcs\xf6\xc6D\x14\xddp\xc7\xf3]\xc1@\x0e\xcd\x16\x97O\xe7\xdd\xecm\xcd\xba \xce\xe7-\xeb\x14\xdeAL\xafq>\xf2)w\xaafSyU7\xed,\x98\xa1g\xe3\xf4\x11\xd22\x87\xbe\xd8\xcb\xa6\xa9\x98\x01\xab\xb6\xbc\xc0\x96\xdd\xb2\xb6\xc3&\xcb\xa9\xab\xe7/\xae4\x902-\xb3\xcf\x84\x89\x1e\xfe\x0cV\x8b0o\xd3\xaeX;\xff\x16\xb0V\x9f\xf9.\xab5\xa2s\xe9\xca\xae\xdb\xb1\xd5XbE\xde\xec\xcf\xa3\xfb\xe3\xfd\x9fTn\x95#\xa1N&\xd2]\xde\x0b\xb7\xb5LLR\xda&\xaf\xe1\x89\xd5 \xff\xf6D]\xeb\xc8\xb8\x1b\x9e\xfeH\x1b\x88R\xef\x84\x84\xe00\x94z\x97\xb5{\x94z\xe7VF\xa9w\xce/;-\xf6\xa0\x9a\xc7/\x9b\x1b\xec\x05a\xc0\x17$\x80\xbe\xfc\x1d\xa0\xd4\xbbT \x18D\x83\xc1\xbc\xaa(\xf5\x8eR\xefR\x01c\x90\x06\x1a\x83\\\xc01H\x02\x8f\xf9\xa7\x03\xa5\xde\xc5\x81\xc9 \x12P\x06i\xa0\xb2\xd0\x12\x8c\x03\x96A^p\x19D\x00\xcc \x05d\xe6\xd5F\xa9w\x87\x00\xcf \x04>\x03\xfc\xd9\x11\x01B\x83\xc8#f4\x18\xcd\xab\xedW\x91z'vZ\xb1\xd8^2V\x83tX8\x8a\xb6j\xa1\x84;!\x94p7\xfe\x845&%\xdc\xcd\x12\xee\x06\x7f[\x8e\xcc\xbb\xd1uh\xa6\xe0\xcd{g\xf7\x0b\x0e\x17Q\xa6\xde\xecW\xca\xd4\x0b\x8d\xe9Qb\x9d8\xdaQ\xe3T\x88u\xe0du\xdeP\xa6\x1ee\xea\x8d\x92\xd5)\x13\xe3\x90\x89r\xc6P\xa6\xde\xa1\x8e\x97\x04\xa7K\x16\x87K\xbc\xb3\x852\xf5\x0eq\xae\xc48V\x12\x9c*\x94\xa9\x07\x94\xa9\x87u\x98P\xa6\x1ee\xeaQ\xa6\x1eD'\x9bQ\xa6\xdeD\xe2\x8cG\x99z\x94\xa9G\x99z\x94\xa9G\x99zS\xa1L=\xca\xd4\xa3L\xbd\xb9P\xa6\x9e\xfd\x06\xca\xd4\xa3L\xbd\x07\x99\xa9g~\xfdR\xa6\x1ee\xeaQ\xa6\x1ee\xea\xa5Y\x912\xf5(S\xef\xd7\x99\xa9w\xd5\xdc\x0eIzbG\xed\xce~\x91\xff]pu\x9eD\xbd\x0bq\x95h^\xc9dn\xde\xb8%\xeb1y\xd5\xdc\xc2\xa6Y\xed\xaa\xc1\xef=I\xb7\xfbSs+\xd5<\xd2}{\xa0Iv\xb7M_\xd6W\x0bi\x99\x00\xd8or\xed\x80\xf7\xeb\xc5\xe7\xfb`\x9f\x96U\xc2\xed\xdc7\xea\xfa\xac\x88?\xdd\x04\x91V\x95\x88T\x9b\xf4I\x9f\xe1\xf4{\x95\x0fPy[\xf3\xa6\xaf\xd8\xb6\xe9\xca\x1eg\xad\xe9\xc5\x08s\xa9\x1b\xb2\xdakS\xd6\x0b\xa5\xd7g-;Z |\x88%\x085LJ\x08\xb9\x04\xc2lu\xb3\xf1y\x0c\x83\xaf\x94K\xb1\xe1\xcb\xfa\x81j0\x01+.\xaf\x9a\xd2@\xbcB\xdf\xdc\xb0Z\x05\x9cdw\xf4f\xc4\xbf\xea\x8aZ5\xce\x17\xdb|\xfb\xee\xe3\x9b\x17\xc2\x11\"\xafU\x1e\x85RD\xc4\xce\xeb^}k\x0dQH\x7f\x86\x9c\xfa\x10\x93.(\xf7C\xbb\xf2\xaa.\xfa]+j{\xca\xd5W\x94\xe1h\xae\x1a\xf1\x95cwVL\x8c\xf4\xd7\xb2.7\xbb\x8d\x1e\xbdb3.\xc4ko\xba\xa2\xe2\xe3\x9a \xbc\xa2wbq\xd9\x14\x9f\x17\xc3\x9c\xc96\xbf\x9d\xef\xf0\xaf\xc5g\xd1n\xf9(\xd1\xec\x97\xdcd\xfcc\x96O\xccqB\x02\x7f\x8dC\x8f\\\xfe\xcd\xf3\xba\xec\xcb\xa2R\xf1^\xf8\xd6e\xf4MS\xf7\xd7{\xb1\xe2\xbe\xa8\xaa{\xdc\xbab^\x8aXU\xc4\xe5Y\xd7\x94\x9fwM\xbbs\xcc\xd7\xe0\xcb \x86\xb3\x91oO\x8d\xba-k\x97\xac\xee\xf9\xd7\"_\xc0\xc5\x91\xae\xeb\x8b\x1b&`(\xc36$\xcf\x88.`\x90:\xa1\x8ac\x8f\xeb\xb5-\x9b\xba+W\x8cO\x10\x11<\xb7\xc2\xa7\xaf[\xd6\xf1\xf1\xf3@l\xc3Gl\xab7\xb7\xff\xcd:a Y\xae\xd7\x9c\x9f\xdb\xa2s&{\xa8\xd0\x97\x1e\xd5\xbf?\xfd\xbflW\xde\xb2\xbeY<\xb0\xde\xcb\xef\xadf\x0d?25\x06\xc4\x9c\xfe(\x86\x88\xfc\xa7\xd8\xf9=X>\xd3H\xee\x91\xc1;\xcf?\x11f\xa6\xfa\xe6\xec\xbb\xa9\xa9\x10\xa0qydD\xe1\xc4\x152\\\x9dU\xdf_\xbc\x9a\xe9\xa3\xea,\x84\xf9\xcev\xda!\xcc7a\xbe\xedB\x98o!\x84\xf9\xde\x17\xc2|\x13\xe6\xdb%\x84\xf9&\xcc7a\xbe \xf3M\x98o-\x84\xf9&\xcc\xf7\\\xe2\x8cG\x98o\xc2|\x13\xe6\x9b0\xdf\x84\xf9\x9e\na\xbe \xf3M\x98\xef\xb9\x10\xe6\xdb~\x03a\xbe \xf3\xfd\xc00\xdf\x06j\xcd\xd0\xe3\xfb\xcc6\xee\x18\x10\x02\xf2\xb5\x19\x18\x81\xbeQdc\xeb\xa6=\xd1\x00c\x89\x05\x9e({,\x91\x1b\x8fO\xa6\xe6},\x80\x05\xfc\x07~\\\x7f\xac\xb0\x12\x8f\xe7\x90\xc7\x03\xa0\xe9Q\x08?\x15\xaaU7Xa}\xfa\x92)\xb2o\xf8\xeb@a*\xd9\xf7\xbb\xbe\xe8w\x9d\x15\xdc7hz\xa4;\xf5@\xc1}3\xab\x98\xd2\x7f\x85\x88\xa5n\xce\xa2t`\x04\xa2\x9cc\x1e\xa2\xb9\x99\xb9\x8d\xe7N\x0032z \xe5J\x1f\x16\xfc\x18\x1f\x11\x19r#\xcc\x02\xc6\x01\x84\x81\x00\x11\xd6\x05\x9c\x95\x00\xe9\x89\xd3\x12\x1b\xe2\xf5*\xb3\xbb\xd4<_e\xb9C\xbd\x10\x0e\xf7BB\xc8\xd7\xdf\x01\xe2fO\x0d\x03Ct(\xd8\xab\x8a\xb8\xd9\x89\x9b=5\\\x0ci!c\xc8\x156\x86\xa4\xd0\xb1\x7f:\x107{\\(\x19\"\xc3\xc9\x90\x16R\x0e-\xc1\xb8\xb02\xe4\x0d-CDx\x19RB\xcc^m\xc4\xcd~H\xd8\x19B\xa1g\xc0\x9f\x1d\x11!h\x88\x07L\xd3<\xf3,_(\x1d0\xe1t8 \xa4\xeeT(\xbd\xb1\xee\xb0:\xe4\x0e\xadC0\xbc\x0e\xa9!v\xa76\xe9z\xf0{a\xc2\xa1v\xf0F\x04\xc1\x1br\x87\xa4\xb0\xbbS\x957\x1c\x0f\xa9!y\xa76y\x80\xf6\xf8B\xf3\x85\xe6\x01\x15\x9e\x87\x84\x10=\xc4\x85\xe9!%T\x0f\xd1\xe1z\x08l\xe5\x81\x10*D\x84Q\xb1\xa1{H \xdfCl\x08\x1f\xfc\x1dO \xe5;\x95\x19\x81r\xec\x94\xc1\x85\xf4\xbd\x13\xa2\xbe\xf2\x87\xf5!oh\x1fB\xe1}\xf0\x87\xf8\x9d\xf7\xa4\x86\xfe!\xe3\xd8\x8d\x80\x00@\x14\x0c\x00\x9c\xa7\x17\x19\x86v\x9d#'\x8e\x0dy\xe9\x94\x12@g0O\xa3\xd9sA\xf8\x84X\xedJ\xf9\x07\x11\x9c\xbfx\xff\xee\xe2\xdd\x87\x97\x7fY|\xf8\xf8\xf2\xe3\xa7\x0f\x8bOo?\\\xbcyu\xfe\xc3\xf9\x9b\xd7\x11w\xbd~s\xf1\xee\xc3\xf9\xc7\xc5\xc5\x9b\xf7\xe7\xefbn\xfc\xf1\xdd\xc7\xf3\xb7\x7f\x8a\xbf\xef\xe2\xe5\x87\x0fQ-|\xff\xe6\xdf\xdf\xbc\xfa\x18u\xcb\x0f/\xcf\xff\xe2\xbcA\xe7eG\x1bp]\xd6E\xb5\x90d\x102\n\x80\x1a$\x1e\xef\xd7\xbeF\x9d\x81.~\x91L\x12\x9a,!\xe0\xa1\x1b\"\xe9\xf0\xb7k\xe6\xd9\xb2\x07\xe6?\x832\xe4\xb6,\xe0\xea\xfd\xc5\xab\x13\xe5N\xd7<(u\xe3\x0e\xf8n\x9b\xedNR^\xec\xea\xbe\xac\xfc\xa16\xfd\xa4'\xdd\x94\x95D\xac\xdf\xac^1+\xbb\x03\xe4\x8b\xf1?\xb9g\xdd\x93\x0cN\xda\xc9\x9b\xbdg\x9d~_#U\xda\xfd\xc0\xfa\x80\"1\x01(.;~H\xca\xdd\xb8\x80kX=u\xbf\xfd\xfa\x87\xb1\x0f^=\xe1\xfe=\xa9\x9b\xec\x96\xaf\x9b\xfd\x86\xd7M\x9c\xdd\xebf\xc1\xcf\xb7\x8b[\xd67\xb9\xdb\x170\xbe\xf9hkG\xc4\xc1\xfbv\xa4\xd1h\xfc\xb1\xe7Pw\xbb\xdd\xe5\xa6\xec\x17}\xb9\xc9\x91#\xb7*z\xf6\x9c\xeb\xc2\xac~\xc6\xa3\x07:\xc8R\".\xc6\xad\x92_\xd3ueS\xdb\x9b\xaf9\x8aX\xbd\xfa*}\x98?_w\x84\xd5+\xd9\x19~\x9aR\x179;!\x98r\xfc\xcc`~\x8c\x98\x14/;\x18j\xb9\xc4-\x98\x10\xe6\x08C\x19\x1cP\x1f\x03\x9d\x8f\x82\xcd\x13\xa3\xda\xa1\x10\xf9\x04x|\x16h|<,\x9e\x18\xd5\x0e\x81\xc1\xc7@\xe0\x13\xe0\xef\xc4\xa8\x06\xc4\xa8\x86\x85\xb6\x13\xa3\x1a1\xaa\x11\xa3\x1a\xe0\xd1\xd3AXz\x04$\x1d\xc3\xc5\x15\x03E'F\xb5\x14R\xb2\x10\xd4\x9c\x18\xd5\" \xe5H89\x06J\x8e\x83\x91\x13\xa3\x9a\x90\x14\xa8x\x04L\x9c\x18\xd52\xc0\xc0\x83\x10\xf0T\xf8\xb7s\xe7$F\xb5=!F\xb5\x04\xd8v\x18\xb2\x1d\x0b\xd7\x8e\x80jG\xc3\xb4\xe3 \xda\xc4\xa8\x16\x07\xc3&F\xb5A\x88QM\xc9\xc0\xa8\xa6 \xa1$,\xda\xd0\xe5\x8b?\xcf\xee\x9a\x84\xdf\xd5\x9ff\xe6\x07\x13\xca\xf0\xc9\xae\xe3\xa6\xbea\x91\xf6\x9c\xaa?\xb2qg(1\x8by\xabrSb\xad+\xae\x9d\xa2s\xf7\xc1c\xd6:\xf2\xea\xd7\x89\xb6\xad\x0c\x0b\x98\x7f:_C\xc5\xd6\xbd\x06\xdb)\xf4\x9d>\xf8\x88\xc0\xab\x9c \xf2!\xdc\xce\x97\xf7\xc0\x8a\xe55\x14\xdb\xedW\xb4\xa2 \x81\x1b\xef\xf7\xd9\xd2\xb8\x03f\x85\xf9E\\\xaf^\x95\xcb\xa2g\x03\x04C\xa7`\xf1\x0b\xd5@2\xd5\x95\xf5\xb2\xda\xadf\x8e\x87B>e\xc0\xc0\xcc\xde\x98@T\x19\xa1YQ\"\xd6D\x94N\x94}:\x9f\x1flg]\x10\xbe\x9a\x96u\n\xfb&\xa6\xd78\x1f\xf9\x94;U\xb3\xa9\xbc\xaa\x9bv\x16\xd8\xd6\xb3q\xfa\x08i\x99C_\xece\xd3T\xcc@\xd8[^`\xcbnY;\xb9\xd5\xf7\xf2\xd4\xd5\xf3\x17W\x1a\x10\xca\x96\xd9g\xc2D\x0f\x7f\x06\xab\x05\xe4\xa7iW\xac\x9d\xfb\x85>\x94\xf5\x92\xbd\x00I}\xfc\xbc[\xdd\xc0\xefO\xff\xf0]Vk$\xf1-\x9f\xfd2|\x16\x95\xab\x7f\xc8\xdb}\xec\xcb\x03\xf9\xf2v\xc4j\x0b\x08\xe0HS\xa8/=\x7f\xad\xdf\xb6\x95}\xf9\x91\xee\xe3\x03'_va\x1b\x93\xf0\xd7\x86\xb1\x8f\x87\x1a\xb6\x02\xdc\x0f\"O\xf6R'{\xcd\x01A\x93\x00\x02\xb9\x89\xb0\x0b \x03\xedR\x92\xf0\x9b\x1e}Qd\xc9Y1\x9cA\x14gn\x1c'\x1e\xc9\x99 \xcb\x99\x86\xe6\xf4\xa8\x8b\xa4G>\x10\xd1\x99\x1b\xd3\x19\x89\xea\xcc\x8c\xeb\x8cCvFb;}cx@}b\xd1\x9d\x99\xf1\x9d(\x84gF\x8c\xe7\xa1(\xcf$\x9cg&\xa4g\n\xd6\xd3\xa3\x0cM\x80|\x04\xbc\xe7\xf1\x10\x9fG\xc1|\xc6\xa1>\xb3\xe3>\xb1\xc8\xcf\xac\xd8O<\xfa3\x01\xff\xe9\xd1\x95@v\x9c\x0d\x03\x1a\x8f\x02\x0d\xae\xd18\x9a\xe3\x83\x91\xa0A\x8ac\xd4I\x0f\x81\x07\x8d9\x0eFcB=\xba\xf0\xc4\xc6\xb8\xf6eD\x86\xc6`C3\xa3C\xd3\xf0\xa1\xbe\x11\x84\"3N\xc4\x88:\xb4\xf5(\"\xe3<8Q4\xd8\x11\x81\x15\x8dB\x8b\x86\xd8,S\x10\xa3!\x9dNpD&\xdch\xbc1\xf1\xd8\xd1P\xdf\x12\xf0\xa3\x89\x08R?\x83j\x18E\x9a\x17G\x9a\x07I\xea\x03\xcedC\x93\xa2\xf1\xa48D)\x16S\x8a\x189\xf1\xb8\xd2\x18d\xa9\x9f\x928\x0b\xba4\x12_\x9a\x860\x8d\xc2\x98\x86\xac\xee\xa7!\x0e\xdc\x8b\xc7\x9a\xe6C\x9b\x06\x1b\xe5\x9cA\xf90\xa7\x08\xd4i:\xee\xd4\xa1\xae\x0f\x92\x0eg\xc5\x9e\x86\xd0\xa7\x89\xf8S\x87\xae0\xd9p\x18\x83\xea'\x1a\xf6\xd1\x0c\xe7F\xa2f\xc7\xa2\xba\xd1\xa89\xf1\xa8\x18Dj<&5\n\x95\x9a\x80K\x8dE\xa6\x06\xa8\x83\xfd\xad\xc3b\x05\xb1\xf8\xd4\x04\x84j$F\xd5\xd3\xdd\x14\x9c\xaaC\x15\x82,8\x05\xab\xea\x19\xf2a\xa2\xe0\x8cx\xd5 I\xf010\xab\xb9\xc6b\x04n5\x06\xb9j?9\xf8\x08\x80\xa7\xdc\x86\x89\xf4\xbfA\x7f\x89\x8f\xfa\x17\x0f\xb0\xf3\xdd\x83\xa2\xfd\x8d\x01\xdd\xf9\xee\xf2R\xfe\"\x81x\xbe\x1b\x9a\xdf!\xe2\xeb%\xf9\x8d\xa4\xf8\x1d\xa9|\x1d\xfa\x82\x04\xbf\xfa)\xb1\xf4\xbe\x19\xe2\xd0\x01b\xdf\xe0T\x83\xf9[\xccA\xea\x1b\xa4\xf4\x8doV\x04_o\xb0y~F\xde\xf8\xb6\x1d\xce\xc6\x8b\xe3\xe2\x8do\x99\xd7\x85\x9c\xc0\xc2\xeb\x8d\xde\xf9:\x19d\xe0\x0d\xf6\x0d\xc7\x069\xdd\x9f\x0e\xe6\xde\xc51\xef\x1e\xa3\xed\x198w\x11\x8c\xbb\xbd\x87\xf3\x0cBl\xbb\xc1\xd5\x0b\xb3~A\x98g7h^@q\xec\"\xd4`\xe7N$\xbb.\x82C7/\x83.\x92?7\x8d=wb\xa4<\xdc\xb9H\xe6\xdc\xe0\x1bL\x98g\xce\xb7\x9c\x8f1\x17\xd1\xf3/\xbf\xbed\xe3\xc9\x0d[3\x1fG\xae\xbd\x15\xfe\x16L\x98:QD\x9d3j\xce\x99\xbe\xf7\x17\xaf\x88\x98\x13\x88\x983\xdbf\x92\x04\xec$bN\x0c\x9c\xd3\xe6<\x8f\x06s\xa6@9\x89\x983#\x803\x06\xbe\x19\x05\xde$b\xceC!\x9b \x80\xcd,p\xcdx\xb0&\x11s\x1e\x02\xd2\x8c\x81hf\x06h\xf6(xfFp&\x16\x9ai\xf1\xd8\x131g\x18\x90y0\x1c\x93\x889\x89\x98\x93\x889\x01\x8f\x10\x0c\x82-#\xa0\x96\x18J\xc7\x18\x98%\x11s\xa6p[\x86`\x95D\xcc\x19\x01\xa5D\x02)10J\x1c\x88\x92\x889\x85\xa4\xc0&#@\x93D\xcc\x99\x01$\x19\x84H\xa6\x02$\x9d;'\x11s\xee \x11s&\x00!\xc30\xc8X\x10d\x04\x042\x1a\x00\x19\x07\x7f$b\xce8\xc0#\x11s\x0er\x0c\x90c\x8e1\x17\x01p\xc4\xc3\x1b\xa3\x889Ks\xe1\xce\xc7GR\x8a\x02\x9a\x93ep\xe4\xc8\xe9\xdb]*\x13T\x06\xea\x9c3\x15\xa1Wzl\x1c:\xaf\xd5\x15\x03\x87NQ\x0d\x81}\x15\xb0\xed\xca\xfa\xaa\xda\xef\xfb\x84@G\xaby\xa4\x0d\xf0@ t\xa6\x061\xa5\xff\n1\xc8 \xf3N\x94\xbb\xcb\xc3\xbe\x93s\xbc\x9b:\x159\xe2\x01\x8d\xc7\xb8\xbb\xc0|\x16\x92\x88\xd1\xa9h\x98*\xf6>\xf9QF\xbeA\"\x85\xaa\x97#^f4\xbe*\xd8\xf8_s\xf5r\xd5f\x19\x1eR#^\xea\x19&E\xaa#Y-\xdb\xe3\x9b\xd0H\xb6\xe9s\xf8\x9f\x97\x92\xecO3\xb4:J\x1f\x8b+\xfb\xf2\xd6\xf1)\x84\x04\x19\x0d\xfb\x8f9\xd7\xc7\xda\xd7\xfa\xe7\xb9\x16\xaaw-d\xd2U\xaaw\x8d2&\xd5\xbb\x16\xc7K}\x8c\x8bA\xd1\xcd\x8e~Z\x08E\xa7\x84PtyN\x80\x84\xa2#\x14\x9d]\x08E'\x84Pt\xfbB(:B\xd1\xb9\x84Pt\x84\xa2#\x14]\xd0\xadH(:B\xd1i!\x14\x1d\xa1\xe8\xecB(:B\xd1 !\x14\x1d\xa1\xe8\x08E7\x17B\xd1\x11\x8a\x8ePts!\x14\x9d\xfd\x06B\xd1\x11\x8a\x8ePtYPtT95\xb5,%UN=\xa2q\xc3c\x94*\xa7\xe6\xb0\"UN\xa5\xca\xa9\xbf\xd9\xca\xa9\x03\xfc\xfb\xec\x97\x01)\xe8)\xa7j\xd8R\xe3\x025(\\A\xc0\x07\x16\xb8Z\xce@>\x1a\x87Bh\xfa\xc9\xe7\xaf\xc7S\xc9\x88\xdaU\xb8A\x1fx\\\xfd\xf4\xd0\xb1\xe3.\xe0M\x12\x160\x88\x00\x0f\x06j\x10\x08\xb6|\xa7\xb4Q\xa3\x17\xf9\x1dl4&<\x93\x0d\xf3\xedE|\xfb\xb0\xcf}\x00\xedM\xdc\x99V\x89\xc4v#\x10\xdcy\xf1\xdbH\xf4v\x1av\xfbp\xe4v\xd8\xcc\x99Q\xdb^\xcc\xb6}\x15\xc0CI\x13\x90\xa43m\x04$UB@\xd2<\xeb\x13\x01I Hj\x17\x02\x92\n! \xe9\xbe\x10\x90\x94\x80\xa4.! )\x01I HJ@R\x02\x92j! )\x01I\xe7\x12g<\x02\x92\x12\x90\x94\x80\xa4\x04$% \xe9T\x08HJ@R\x02\x92\xce\x85\x80\xa4\xf6\x1b\x08HJ@R\x02\x92f\x06\x92\x0e\xb1[W\xfbcq\x0bv\x84\xc2\x81\x1d\xc9\x81\x1f\x12e\x9b\xdd\x80\xa1\x8f\xfc\xe7\xf7\x12\xfe\xa6\x91Bb\xa3\x10!\x0f\xc1\x1d\xa9\xd5\x89\x12\x8aV\xf0\x8f\xa1\xe4\x91\xee\xe5\x03\x05\x00\x19\xe60e\xd2\x16\xd9w;o\x99\xf8m\x7f\xf7t\xb6\x04\x82qSOm\xe8\xa0cn\xd2\xecCkB{\xebA\xc75%W\x1dhw\x0d\xe8\xb8\xf6\x1cV\xfb9\\\xf79\xae5N\xe7h\xceZ\xcf\xc9\xa0\x0fc2\xc7\x00?>Z\"\x82\x04\xfbPB\xb0\x0f\x82}\x8cB\xb0\x0f\x82}\x8cB\xb0\x8f\x9e`\x1fv!\xd8\x87\x16\x82}\x10\xec\xc3\x14\x82}\x10\xec\x83`\x1f@\xb0\x0f\x82}\x08!\xd8\x07\xc1>\x08\xf6A\xb0\x0fC\x08\xf61\x11\x82}\x10\xec\xc3=\x04\x08\xf6A\xb0\x0fS\xb0!x\x82}\x08!\xd8\x07\xc1>\x1e.\xec#\x07\x8cB\xc4[\xdd0\x8a\x1fE8V\x03(Tpv\x0d\x05\\\x95\xb7\xac\xde\xeb\xed\x04=!\xee}\xa4\xfb\xfb@q\x13F\xffM\xe9\xbfB\xbc1\xc8\xb7\x12\xe5\xda\xfa\xe2\x157\xb9%\xb3U\xdb\x14\xcatx^\xfeC\xf3D\xa0\x1a#\xa3:\xae\xd6`O/Z\xb6\xe6GI\x19\xcb\xfaI>\xa0\xfb \xca\xba\xebY\xb1R\x11\xd3\xb5\xf3\xf4\x07\x033\x15_\xc4\xd5\x8c\xf2\xb8w\xd7b\xef\x12\xc7\xdcr\x0d?U\xac~\xaa\x9e\xf9\x0c\xbe\xff\x1e\xbe\xf9I\x1d\xa1\x8b^u\x96\xefsNuwL8e\xbf9\x85\xf3\x1a\x8a\xca\xe3E\x97n\xe0e\xd1\xb1\xeeDy\xf0\xc5)l\xc6\xaa\xe6\xbc\xff\xc7w\x1f\xdf,\xde]|<\x7f\xf7v\xf1\xe9\xed\x87\x8b7\xaf\xce\x7f8\x7f\xf3\xda\xf5\x05\x83\x18\x18\xac\xdeyXf\x9e\xbb\x9e\x88\xbc\xe3\x7f\xbf\xf9\x80\xbc\xf2\xe5\x1f?||y\xfe\x16y\xf5\xdbw\xe8\x0b\x17\x7f;\xff\xf8\xe7\xc5\x8fo>\xban\xd1\xd8\x92\xa8\xae\xaa\xd1\xe2\x9f\x91\x0f\xa3\\\xac\x7f\xb6J\xc1\xceY)jJ\x98\xcb\x99t\xcf\xf3\xb5D\x9b\xe6\x04\xca^\xc68\xeb\xc6\xdd\x05)\x1a\xfe\xb0\xda\xc9\x98#\x9bh\xf2|\x9f\xe3\xc6\xb8\x14\xffH\x97\x12?\xdem\xf7\xf9F\xbd\xed\xfa\xd0\xd8\xb7\xdd\xe3\x99\x01\xf6\xcb\x83\xf3@J\xd2l\x90\"\x97A\xbf\x89\xd1o+nD\xaa\x15\xd8\xd8\xd2\xf4\x9f\x8a\xaek\x96\xa5\x08+\x88\xe8\x8a\xfe\x1d5\xc4\xdd#\x0f\xdf\xbc\xbf\x89v\xb0\x15?\xb0\xbd\x9bN\x9c\x82\x9f\x02\x04VC\xb4\x98\x7f*\x04\x9a\xd6m\xab2P\xf28\xc8Ph\xca\xa4\x1b\xce\x8a\xb1\xc3r\xa7\x0d|\xa7\xfa4\x9b\xa6\xce\xdb\xd1m\xc2\x98\x95\x1b\xd20\xa1lB\xcdO\xcd\xcd-k\xeb\xa2^\x9a\xe7\x17\xab\x8a\x97R\xc9\xb2\xa9\xbb\xb2\xd3\xd5\xee\x07\xc4\xf2\xf9\xeb\x93\xf1dt\xa2\x9di\xeeW\xe3\x1a+{g\xaeiYcyJ\x916\xa4\x8a\xc6v\xd3\xe2\xc6'U4\x06\xdc\xb7\xc9o\xa9\xa2\xb1\xf8@\x8e\xc1\"\xcb\xaf\xf1\xf7\x17\xaff\xda\x08\x8bLX\xe4\xe0\xa1\x05\xb3q\x01a\x91 \x8b\xec\xbc\x92\xb0\xc8B\x08\x8b\xbc/\x84E&,\xb2K\x08\x8bLXd\xc2\"\x07\x036\x84E&,\xb2\x16\xc2\"\x13\x16\xd9.\x84E&,\xb2\x10\xc2\"\x13\x16\x99\xb0\xc8s!,2a\x91 \x8b<\x17\xc2\"\xdbo ,2a\x91 \x8b\x9c\x05\x8bl-\x90I\xb5\x8c!lF\xaae|D\xe3\x86\xc7(\xd52\xceaE\xaaeL\xb5\x8c\x7f\xbb\xb5\x8c\x05>\xee\xec\x17\x81\xc6\xf3\x141\x16\x88>3\x97f\x15\xacV,\x11~/W\xab\xd6\x99b\xf3H\xf7\xfa\x01g\xd8\xb8@4I\x88\xbe`\x9eL0\xe8\x82\xc0\xa1\xe5;qi\xf1\xe4\xc7\x04\x1b\x9c17\xc6\x87\xb5\xc7Ds\x92\xb3b\xa0t\xc58q91Y3b\xb0\xf90\x87e\xc3D\xe5\xc2\x04\x07\x81/; 6+\x00\x9b\x0d\x10\x93\x05\x80D\xffG\xa2\xfe\x13\xd0\xfe\xde\xcc\x97>\x90\xf7\xf2%\ng\x87\xf3]p3QJ\xe6\\\x97\xf4L\x97\xe0\x08\x96\x12\xcer\x89\x1d\xcd\xb6\xbbB\x19.1#\xdbvG \xbb%r\x94KI\x18\xebR\xc2y-\xc8w\x133\xee2g\xb4\xf8\xf3Y\xb0\x0d\xcb\x98\xcb\x12\xccd \x9eNG\xc1e \x1c\x94\xc3\x82lM\xd8\x90\x07g\xaf\xe4\xcc]\xb1\x8d\n$\xb4>\x16YO\xc0z\x02\xd6[\x7f'`\xbd!\x04\xac'`\xfd(\x04\xac\xef Xo\x17\x02\xd6k!`=\x01\xebM!`=\x01\xeb X\x0f\x04\xac'`\xbd\x10\x02\xd6\x13\xb0\x9e\x80\xf5\x04\xac7\x84\x80\xf5\x13!`=\x01\xeb\xddC\x80\x80\xf5\x04\xac7\x05\x0br&`\xbd\x10\x02\xd6\x13\xb0\xfep\x98\xd7\xf1\x81\xf5\"`\xeaj\xbb\xc4\x81M0 \x13d\x98\x0ew\x0e\x10\xc6\x8cm\x0fA(7e\xdd\x0f\x18\xca\xa2\xaewE\xb5\x10'\x95n\x84\xe9\xd8\xf0\x92/\xc5\xa5\x17\xc3\x95\xda\xa3\x08\\!_F\xa5.\x18u\xc9\xad\xce\n\x95\x9c+{\xa4\xfb\xf9@a\x93\x0e;\x99\xe2\xf5\x81y\xbd_a\xef\xd2\xde\xe3u\x14=\xf8\x0e,\xca&oE\x8a\x1f\x10!F\xd0\xfc\x8d\xa1\xe2\xf96Eg{\x03\x89\nx+\xa1\xd8\xbe\xcf\x87|\x04\x0ft\xd4ZY\xd6\xeb\xca`X\xb5\xad\x91\xe7\xfa\x12\x85\xb3\xb7O\xd2A\x91g\x81\x1c4\xa9\x1f\x1f\xec\xca8\xb3\x8a)\x99V\xc4\xd1\\\x8eE\xcfaO\x8b*;\xce\xaa\x92\xa9\x83E\xdf\xb4zc\x9bn}\x86\x1a\xf5\xfb\x83\xdd\xf8x\xaf\x1e\xc6@S\xf0\xc6\xe4\x91\xd2\xf5E\xdb/\xae\xbd\xf4IA%\xe1\xbd\x16<\x8b\xeb(\x7fV\xecI\xbdB\x07\x0f\x03F\x94\xa0\x15 lI*\xb1\xe2\x7ff\xf0\xee=\xff\xc1\xa9nW?\xe7\xfb\xad#\x85\xbc\xacW\xec\xf3B\xf2\x93\x1e\xb9\xe7\xe1\x8dM\xca\xeb7\x17\xef\xdf\xbcz\xf9\xf1\xcd\xeb\x17p\xce\x9b\xa7\xecPvP\xd6\xcbV\xa4\x10\xf3\x0d\xe0V8\xb4J\xfeu\xea\xd45\xda\xae\xect\xe8\xb1\xac\xa1\x90\xe1>\x11Vp\xde\xbb\xd8\x14\xf7\x0bI\x00 \x0fH\x82\xbe\x88=_6\x9bM\xd9K\x8a\x89^\xb1\xa7x\x12\xda\x97M\xfd\x9f*\xc7t\xa0\xc1r?\xd4v\xf2\x1b\xe2\x01=k7\xc3\x17\xacxs66US6\xa5(+-{{Y\xf6\x9bbk\xcf\x9f\x90Cd\xb1\xab\xfb2}\xb9\x1e\xc7\x01\x1f\x98\xcf\xf9\xbb9p,|,7\xac\xeb\x8b\xcd\x16D\xcb\xd4H\xe85\xb7\x9d~\xb3\xb2\xf5\xb0\x12\x94\xc8NeUy\xcbj\xd6u\xc3A\xd4n\x8a\xbe\xd9\\v}S\xbb\"\xdf\xda\x10s:\xdd\xa9`{\xf8\xb7k&\x92\xf1\xe5p\xd2\xa9\xe5\xa2c\xd7E\x07\x97\x8c\xd5F\x8b\xe0\xe9MY\xb9\xe62\x97f'\xa9\xcd\xb4\x12\xcfHc\xfd3\xcdD,\xc04\xf5\x92\xcd,+Gz\x07\xceN\x02\xb0\x9fw\xe5m\xb3TiB\xadtz\xd4\xf7\x92a\xc0\xfd\xf0eS\xaf\xcb\xab]\xcbV|\x88^\xb2\xeb\xe2\xb6t\x11\x80\xc81\xac\xa7\x84`[v1\xa8F\x8d\xd1\x1ck\xd5KP\xed\x91X$1\xd9\x9e\xeej9\x8b\x9f)P\x81\xb6\xb2$|p\x8fOI\"\xb2\xabk\xc67\xef\xa2\xf5\x10\xee\xb4\xacXu\xdaK\x8e\x9c\xe4\x98>\xfd\xa8\xdf\xbdq\x0e1I\xe0\xf4\xcfOfg\x1b\x17\x9f\xcf\xa6\xa9\xcb\xbei\x15\x19\x7f\xe9\x18\x11\xc3\xc4\xe4\x9fW\xb7e\x7fo\x89n\xcamS8;\xb8\xe3\xef\xcc\xf6z\xecG\x97e\xd3J\x1d\x82\xb7\xac\x95\x9d\x1f\xf2\xcc\xf86&\x96>\xd32Vs\xe8;>4\x9b\xb1\xdd\xdet\xe9\x96m\x99 \xe9\xf8c\xd1\x0e/)\x90|95\x8b\x18\xdf\xae\xf4\xcbi\xc2\xb7\xd7/b~\xb8\xa1\xbc#6%g\x93\xafH'\xa2{\xf8#\xb9L\xf6\xecC.\x93\xec.\x13o>%\x95\xf9 \x02\x0e\xc0\xb5\xd3S\x99\x9f\xbc\xc6\x0d\x17\xa8\xa12?9\xacHe~\xa8\xcc\xcf\xaf\xb3\xcc\x8f\xdf\xfb\x7f\xf6\xcb\xb2\xa9\xbb\x85\xf26{J\xfc\x98_\xcff$|\xfe\xc9*\x91\xceK\xc1\xe9(\x95*M\xae\x98\xc0#\xdd\xe9\x07\x1a\x12\xb8-\xaa\x85i\xb2\xac\x1f\xdb^/\x7f\xe0h\x13\xf6\xf0\x07\xcfFa\xbfQ\xe8\xf32\xabg\xdf\xe7\xd7\x0f{\xf53\xf46\xfc\xfd Y\xbd\xf9\xe9\xbe\xfc8O\xbe\xe9\xb1w(\x0c\xf9\xf1\xb3z\xf1\x91\xee\xbd\xb0\x07\x1f\xfd\xce\xfd\xde{\xdc{\xcf\xe8\xb9G\xf9\xedC^\xfb\xb0\xcf\x1e\xd7\xaf4\x7f=4;\xdb\xd7 H.\xd2\xa0\xb7>\xcaW?\xf1\xc9\xbb\x1e\x8a\xf4\xd4\xe3\xfd\xf4\x11^z\xf48\xfc\xb4\x8fU\xb5\x10\xd8\x1f\x00P\xa5\xac\xf6\xd4\x94a\xcaj?\xa2q\xc3\xf9\xd8\x94\xd5\x9e\xc3\x8a\x94\xd5NY\xed\xbf\xd2\xacv{fE\xd3\xee'V\x9c\xb5\xcc\x80\xd8I\xa5\xb64\x8b\xf7\xe6eCR\xc5\xe4\xe61\xc1\xfd\xd7\x91>1\xe9\xb2\xba\xe0\xc1\xe6M\x98o\xe2\xa1eN\x98m;:P\xfa\x81\xe6N\\\xb2\xe5\xf5w\xdf>\xdf\xcf)\xf0\xaa\x9b\x1c\x871)\x14]\xbb\xfcJ=\xb7\xb6A\xf7~L[6\xc7\x82W\x9f\x02o\xc9\x199~\x0b`\x8c\xb0\xea\xfa\xafn\x04\xa3\x0d\x07\x18a\xc5\xba^\xaf]xK\xb0\xbao\xbd\xb3\xc4\xbf\x0c\x8c\x12(I\x04\xb8y+\x053{\xa5,[&\x971??\xf7(\xc8\x17)%\x9cknJ\xcc\xcb\x972k=L>m\xd5\xdf\x06n\x04\x84>s\xac@\xdf47\xb0\xadf\x15\xd2l\xb2l6\xdb\x8a\x89\x86\xb8\x0bW\x98\x92d\xc4\x10\xed\xf3( \x86\x9c\xf6`b\xc7]]~\x96\xe4!>\x98\xdb(\x13#\x8e\x8aCF\x14\xd0\xb2\xa2Z\x04\x92|F\x892b\xbcIf\xed\x99\x98D\xfd\xa6\xd3<\x10\xda\xc4\xe9}b\x19A\x9a\xe3N\x10\xd3\"SF\xf8\x12\xf7\xd5-26E\xaf\xb2*7(\xb0\xb1J1\x96\xd7\xe7\xe3\xea\xac2b\xc4D\x16\x11\x1e\x84&\xd3\x8c!\xf3\xed\xeaK\xc9\x9c\xba(\x9d\x8c\xe3\xa3D\x19\x10\x91\xb8`J(\x89\xc1\x94sM\xde#r\xc5W>@u\xe9\x86\x82\x8d\xc27\xa9\x90eGK\xf1\xf5\xb4\xa9V\x8b\x96\xad%\xd7\xc8\x91\x0c\x97\xdfn\x1f\xfa\xb6\x14\x9f\x19\xdb\xa6+\xfb\xf2\x96\xc9\xcf\x92\xb2\x93\x16x\xd2\x8d\xbdDh\x1b(g\xba\xbe\xd9ne\xfc\x91}\xeeY[\x17\x95\xfal\xf2\x1b?n\x8a\x99\x9f@oxs\x8d\x8c\xbe\xc9\xca\x818\x00(\x16\xa5\x96U\xec\xb6\xa8{\xd8\xb0\xbeX\x15}\xe1\x9b.\x93\xd6\xaac\x8d\xfcL\x17\xce\x15\xa3\x01\xeaG\x972l\xb7\xdfO7\n#8V\x95]/I\x03\xb6E\xdb\x97K\x11\xd9s\xa9\x19\xce\xecO\xcco\xe4\xfaJd\xc8z\x92\\\xe5W\xb0\xf1\x04}\x0c\x1eW'\xe1PC5a<:\x06rX\x03\xe7\xc5\xf0Y\x11U\xba20Dp\xe7\xc3\xc9g\xae\x98@t\xbb\xf9#\xdcYf6\xd3\x19\x14\x13PzR@\xc1H\x84\x88!\x95\xf0(4\xe9&\x14\xb5\x84\xef\xf9\x1e\xd6 \x9c%\xcd\xce{\xcc7\xfd\x1a\x90\xf6\xb1\xeaS6\xeb\xf4I\xda\xde\xf8!\xe7\xf7`\xab\xa1\xed\xe5\xb4\x14\x91b\x08\xf1\xc1{F!R\x0c\xc0m\xde\xa1\x8d\xe7\x9f\x93\x14c\xaf;\"\xdc>\x89\x0e\xa7\xb1aLc\xeaN\xd2\xd1\xf1E\x12+\xc6\x9e\x81\x88\x15\x03\xb3\xe1\x01\xb1b\x10+\x86\xf3Jb\xc5\x10B\xac\x18\xfbB\xac\x18\xc4\x8a\xe1\x12b\xc5 V\x0cb\xc5 V\x0cb\xc5\xd0B\xac\x18\xc4\x8a1\x978\xe3\x11+\x06\xb1b\x10+\x06\xb1b\x10+\xc6T\x88\x15\x83X1\x88\x15c.\xc4\x8aa\xbf\x81X1\x88\x15\x83X1\x8c?\xa5\xb1bt\xedr1\xad\x8e\xe4j\xf7\xfe\x95\x93\xb6\x8f\xe05\xa3\xed\x03@\x87 \xd8\xf3\xbc\x07\xb1\x19\xd2\x8e>\xac\xba\x1e\xd9\x87\xfd+\xa3\xfa0-\x05\x93\xb1\x07\xc4M\x82\xb1\x16q\x93H9\xb2q\xc3\xac\x1a\xc4M\x92\xc3\x8a\xc4MB\xdc$\xc4M2\x02\xac\x0d\xa0\x94T\x8e-\x05\xfbI\xabp\xd5\x84\x1d\x9e\xb1W\x1dvP&HMFC\xee\x9d\xc4\xf4pr\xbd\xe1\x07\xces\xe2\xb5\x95\xba\xe1\xc1\xf2\x9e\x8cC\xe4\x81\x91\x9eL\xc7\xb2\x87\x8a\x02\x11J\xc4D\xe3\xc0\xf6LH+e:\xe8qFFq\x15[3v-W\x95\xd6_O*dT\x1e\"\xe2MH\xc1g\x9a`\xdf\x9c\x94y\xdeai\xcf8Dg\x9b\xe0R\x0d\xa3\xd2\x0c\xa3m\x84K/\x8c\xb4\xd3,\xad\xb0\xb4d\x14\xa2\x8d\x84K%\x8cJ#D\x1b)\xae\xdb\xbe\xd4AUKX]\xe2\x01\xb6H\xe1\x1b\x0b\xdfVW\xf2\x03]\xd4<\x06\xfe\xa9\x862\xc6\xd74\x82\xa7\xf3\x93\xaedy\xeb\xf84?to\x11\x19\x02ZB\x99\x02Zr\xa6\xf5\x85R\xfa\x92\xd3\xf9\xa2\x0d\x94\xcf>\x11\xe9{p\xed\x81\x82JIN\xdd\xc3\x8fs\xcb\x19s\x96\xb9W\x1bM\x0e\xe6\xed\xc5\xe5\xecM\x9a9\xa7\x93\xb0}\x08\xf8h%0}\xb6\xf4\x96\xdb\xb7U\xdf\x1e\x82N\xa2+\xeb\xab\x8a\x99\x94\x11VUc\xf3<\x1c\x12|s\x184\x8e\x1e\xcb\xb2\xe6f\xe5\xdb\xc7s\xf1Y\xc8V\x82\xceb\xde+J\n\x13BIa\xe3OXcRR\x98\xf0s\xcc\xe7;\xbed\xf2L\x9b%\xf9@\xe6\x8cy\x9f@\xa5\x94\xb5P\xd2X\x9e\xcfnJ\x1a\xa3\xa41\xbbP\xd2\x98\x10J\x1a\xdb\x17J\x1a\xa3\xa41\x97P\xd2\x18%\x8dQ\xd2\x18%\x8dQ\xd2\x98\x16J\x1a\xa3\xa4\xb1\xb9\xc4\x19\x8f\x92\xc6(i\x8c\x92\xc6(i\x8c\x92\xc6\xa6BIc\x944FIcs\xa1\xa41\xfb\x0d\x944FIc\x944f\xfc)-i\x8c\xd2\x95\xe2rA(]\xe9\x88\xc6\x0d'\xdaP\xbaR\x0e+R\xba\x12\xa5+Q\xba\xd2\x00\xb8\xf3\xe4(\xfd\x97%G\xe9\xc7\xe1\xbeIf\xd2\xa8\x0e\xcaz\xdd\x88\xf1)\xeb+\x0f\x0f\x1et\xfd:2\x91>Hc[\x0c\xa3\xae~\xb0iH\xf3WoJ\xff\x15 B\xbaX\xec\x17\xcc\xd0\x99?rr\x10\x9df\xe7\x8c\xe6r\x80]M}\xff]\xd4N\x1e\xf2|\xcaZ|p\xd8?\xac\xf9heu\xb7\xeb\x16\xdb\xdd\xa5\x13\"\x1a\xb4. ,\x0c\x08 \x16\xe0,\x0c\x11V\x86\x04P\x96W\x99=\x08\xe6\xf1\xa3\xe6\x06gA\x18\xa0\x05 -\x7f\x07\x8a\xfe\x1a\x0d\xd4\x82\\`-H\x04ly\x15\x8a\x82\"X\xd0\x16\x1c\x0e\xdc\x82h\xf0\x96W\x95\x02\x95D\x01\xb8 7\x88\x0b\"\x81\\\x10\x0b\xe6\xf2\x8f\xec\x01\xe8\x85\x05tAnP\x17\xe0\x80]\x90\x13\xdc\x05\x07\x03\xbc \x0d\xe4\x05\xb9\x80^\x90\x04\xf6\xf2O\x87\x82\x7f\x9a\x07\x01_p\x1c\xd0\x17\x1c\x11\xf8\x05\xc7\x01\x7fA$\x00\x0c\xd2@`\xa1%\x18\x07\x04\x83\xbc`0\x88\x00\x84A\n(\xcc\xabM\x02\xc6\"\x80a\x90\x13\x1c\x06 \x001\xc4z\xfe\x0c\x01\x12\x83\x1c@1\x08\x81\xc5\x00\x7fvD\x80\xc6 \xf2\x88\x19\x0d\x1e\xf3j\x13\xc02\x04\x80\x0c\"Z\x99\x11H\x06Q`2\xc8\x0d(\x83DP\x99\x7f\\ua`\x19\xa4\x83\xcb\x9c\xfa\xf8\x13C\x003\xc8\x062\x03\xea\xc7\x9a$}:j=\xfe\xd8\x95Wu\xd1\xefZ\x06O\xd9g\xff7\xf2\xa7\x8b\xa6\x15\x18\xe1\xff\xc5\xee/\x8b\x8e9\x17o\x80;v\xd9\x95}\x8e0\xc9\xa4\xc7J\xad\xb5G\xfa\xb7\xaa\xaco|K\xcfr\xd7\x96\xfd\xfdB|\xab,\xbd\x1c\x91)-\x0c\xbc\x93\xf9\xe3\xad=a\x9b\xa2\xac\x82\xd0\x07\xad\n\x94*w\x9f\x9d4X\xa3\xa4tU\xa9\xd5\x1b\x81\x8c\xe7\x0d\x9dP\xbf\xda[5\x92v\xfai\x90\x11\xcd\xc2\xb0sb\xdf\xd0\xbcY\xfa\xed\x9c@\xb9\x1e\x7f\x14\xd1V\xcd\x81\xec\x81Hiz\xe4\xb2\xdb;\xde]\xed\x0c\xbe\xcc\x90\x89|\x1c\xc8\x11\x06\n\xf1\x1e\xc7\x1bI0\x1b{L\xb4)\xeb\x81\xfd\xd8\xa9nz\x90\xec\x1bM\x84\xcbB\x06Z6\x9bM\xd9u\xd8Ms\xbc|\xb21\x1a\x7f\x1esz\x8e\xbc\xe5\x8d\xcf\\\xb4E\xef\xe7\x0b\xc7\xbe\x15\xb0\xe8\x9dtT\x111\x1b\x17yuI\x05\x12(2\x80\x1b$\x1d\xb8\xf8\xdeEl{({\x01\xd2f\xa0\xda\x14\xf2\xf7#&\x84\x96\x18\xd3\x82z\xbc\xfe\xf41\x86\x8d\xf8\xf3\xf2\xbah\xaf\xc4\x990\xa8f<\x0d\x9e\x80H%\\\x0bP\x9e\x9f\xf7\x19`S|^|e\x03\xe8&L\xc6\xd5\xa6\xf8\\nv\x9b\xb9E\x82\xca\xe4\xea8\xce\xfceQ\x03\xbbe\xad2e\xb4m$\x8a\xe8!\x98\xc8h\x89\xd5R\xab\xa2\x0c\xd2\xa1\x8b\xdc\x98\x96\x15\x1d\xdb\x03_\x1b\x96\x96F\n\xaa\n\x1bq\xb7\xe5\xbbC\x90m\x1fi8\xec\x8e\x03\x91\x066Z\xa9\xe7\xa1\x880\x88?\xd8f\xe5]\x00<)\xdf\xd4\xcan\x97MY/\xf8\x87\xaaQ\xc5\xe6\x80]\x18\xdbO\xcbS\xf7\xdc-O:\xf1\x05\x0d+\xb6\xac\x8ayJ\xd2L\x99\x18q\xeaj\xad\xd0K\xdfeK\xde\xf97\xeb\xe5 \xcc\xeb\x08Ca\xces!rb\xe9\x9c\xb73\xac\x9bV\x9c\xb0\xac\x0b\xaf\x9bGa\x1c\xbf\xbaI\xd4\x7f\xec\xc2$\x81 \x89`{\xc6\x98\xb4*;\x01\xd0\x1e\x8dV\xae\xba\x13\x99\xc7\xb8\x97\xc2\xc0\xcf\x08nc\x1aT\xf1\xf3\xb7b\xb9\x073u\x86\x9c#\xe3\x8b~\xd0y\x02}s%}\xad\"\xc2\xd5\xeb\xb4B\xab*\x99,\xa5\x01r\xfe\xa7=\xe9\x84\x0bV;\x86\x14\x0bI\xd9\x02\xfb,\xd7\x16\xb9\x0e\x89SmY;\xce\x95\x1f\xaa\xa2\xbb\xe6\xc6\xd0ix\xael\x84\x82\xcfx\xb9)\xa8\xb8\xe9\xe41'\x12\xc3, \xb52i\xcb\xaaeYT\xcb]5\xc4\x0b\xd7;\xfe\xf1o\x7f\xe0\xae6\xabkq\xdb5\xbb\x9e\x8f\xc9V\x1e\x03\x9b[\xe1B\x19\xbc[*S\x8dw\xd5\xde\x81v\xea+\xb4?u: Nf\xbb_\xd9\xf1c\xe8\xaa\xec5\x94\xb30V6\xab\xbe\xbb\xeb\xa6cc\x06\xa9\xfd\xa1\xe6k,\xbb \xa2\xdb\x18\x11\xa2kc\x17\xac\x9aV\xe5\x80\x0d\x90\x11\x1e\x01K\xb6?u\xf2\xfeN\xe1\xc7F\x98u\xdb\xdc\xb1Vg}\xeb\xd7\xc5V\"\xde\xef\x1c\xb6:\x14 \xba`\x7f\xdafW\xf5\xe5\xb6*\xf52f>{\xef\x86\xc9\xac3\x92\x1a\xad\xd5U\xbb'2\xd9Q\x94Fp\xd6\xa1\xa2J\x05B&]\xa5J\x05(c\xfe\xe6*\x15\xec\x8d\x0b\x91\xe2l\xc9\xb1\xf5\xd6'\xb0x\xafeA\x02[\x163\x95!PBe\x08\xf2|\xcb\xc4f\xbc\xcaaKe\x08\x10\xd9\xad}\x8e\xcc\xd6\x94\xacV*C\x901\x835&{5*s\x95\xca\x10\x1c\x9a\xa5\x9a\x90\xa1\x9a%;5>3\x95\xca\x10\x1c\x92\x89\x1a\x93\x85\x9a\x90\x81Je\x08\x80\xca\x10`\xb3K\xa9\x0cA\xa0e\x19\xb3G\xf1\x99\xa3Y\xb3FS2F\x81\xca\x108$\x98\x19\x1a\x91\x15\x8a!\xb0\x8f\xc9\x06\xa52\x04)L\xfe\xa1lO*C\x10\x91\xd5\x89\xcc\xe8\xc4ds\xe229\xa9\x0c\x81\x90\x94l\xcd\x88LM*C\x90!\x133\x98\x85\x99\x9a\x81\xe9\xdc9\xa9\x0c\xc1\x9eP\x19\x82\x84\xcc\xc9p\xd6dl\xc6dD\xb6dt\xa6d\\\x96$\x95!\x88\xcb\x84\xa42\x04\x83P\x19\x02%T\x86\x80\xca\x10P\x19\x82\xf1o\xc9\xc6\x0d\x13\xe8S\x19\x82\x1cV\xa42\x04T\x86\x80\xca\x10\x8cX\xba\xb3_\x86\xff\x97\xbf\xc9GD\xd7%\x18\xca\x12\x18\xe0IGE\x02\x0b\xfev[\x94\xc3\x1e?\xa1\xfb\xdf\x7f\x90\xba\xea\xe1\xd3\xfc\xbb\x108I0A\x1cY\x7f0l\x83\x89{\xe4\xa6\xe9\x8f'\xe9\xc7Q\xf4{\xad A\x8b\x02\x02\x9e\x84\xb0(\xa0\xad\n\xa9 %\x8f\xbe(R\xfe\xac@\xa5 T)7X \x0fW\xca\x04XJ\x83,y\xd4E\xd2\xf0\x1f\x08[\xca\x0d\\\x8a\x84.e\x06/\xc5\xc1\x97\"\x01L\xbe1<@\x9b\xb0\x10\xa6\xcc &\x14\x8c)#\x90\xe9P(S\x12\x98)\x13\x9c)\x05\xd0\xe4Q\x86&\xda?\x02\xa8\xe9x\xb0\xa6\xa3\x00\x9b\xe2\xa0M\xd9\xc1MXxSV\x80\x13\x1e\xe2\x94\x00r\xf2\xe8J \xd5\xcf\x06t\x8a\x87:\x05\xd7h\x1c\x9d\xfe\xc1p\xa7 \x95>\xea\xa4\x87\x00=\xc5\x1c\x07\xa3\x81O\x1e]x\x02}\\\xfb2\xc2\x9fb\x00P\x99!Pi (\xdf\x08B\x91\xe6'\x02\xa1\x1c\xdaz\x14a~\x1e0\x14\x1a\xd1\x83\x00DEA\xa2B\xac\xc9)\xb0\xa8\x90Ng\x040\x138*\xde\x98x\x80T\xa8o \xa9D\x98\x94\x9f\xa9;\x0c\x95\xca\x0b\x96\xca\x03\x97\xf2E\x87\xb3A\xa6\xd0\xa0)\x1cl\n\x0b\x9cB\x8c\x9cx\xf0T\x0c|\xcaO}\x9f\x05B\x15 \xa2J\x83QE\x01\xa9BV\xf7\xd3\xdd\x07\xee\xc5\x03\xaa\xf2A\xaa\x82\x8dr\xce\xa0|\xc0*\x04\xb4*\x1d\\\xe5P\xd7\x07\xc9\xed\xb3\x02\xacB\x10\xabD\x90\x95CW\x98\xd4>\x0c\xb4\xf2\x13\xda\xfb\xe8\xecs\xc3\xad\xb2\x03\xae\xdc\x90\xab\x9c\xa0+\x0c\xec*\x1ex\x15\x05\xbdJ\x00_\xc5\xc2\xaf\x02\x14\xf5\xfe\xd6a\x011X\x10V\x02\x0c+\x12\x88\xe5\xe9n\n\x18\xcb\xa1\nAJ\x9f\x02\xc8\xf2\x0c\xf90!}FPV\x90\x8c\xfe\x18\xc0\xac\\c1\x02\x9c\x15\x03\xcf\xb2\x9f\x1c|D\xf3\xbd5\xd6n\n\xceE\x90B1/\xa8\xe4\x1d\xfa\xb0\x04\xf3>zy\\\xcb\x93\xa8\xe5\xa3\x89\xe5\x83.%\x1f\xa9|,\xa5|\x14\xa1|\x1c\x9d<\x9aL>\x81J\xdeG$\x1f\xb4\x1f\xeee\x1fJ!\x8f!\x90\xc7\xd1\xc7g\xeaP.\xe2x\\u\x10a|\x80\x0f\xb6?\x1c\x19\x10$\x8a\x0f\xbeJ@[\x052R\xc4\x07\x99r\xc3\xf4\xf0\x99{\x96\x99\x18\x1eM\x0b\x1f$\x85\x8f\xef\xe7\xa1\x84\xf0x:\xf8\xf8\xb6y\xdfA6\"x,\x0d|\x90\x04>\xbe\x83\xc9\x04\xf08\xfa\xf7`\x83\xc2T\xa1\xb8\xf7\x91\x93\xf6\xfd\x10\xd2w\x0c\xe5;\xda(~\xf2\xddX\xc3\xc4P\xbdcv @\x13\xbd\x87h\xde'=9\x9c\xe4=\xc3F\x85\xa7w\xc7\xbd\x05\x88\xa7v\x97\xf4\xed\x1e}\x07\x11\xbb\x07m\x04(;\x01\x8a\xd2=8\xe0\xb5\xe0\x8d h2w\x93\xac=\xa0\x10MW\x8e#r?R\xb7c(\xdc\xe5Z\x16P\x98\x83\xc0=\x8a\xbe\xfd\x88\x86A\x11\xb7\x0f\xc4\xec\x01\x85A\xda\xf6\xa0iP\xa4\xec(s\xe0\xf6\x04\x882Zf2v\x0f\x15;\x9a\x88=h\x0b\\\xef2R\xb0G\x13\xb0\xa3\xe9\xd7\xa3\xc9\xd7\x83\xc6 \x9f\xa6BL\xab]^\xd2\xf58\xcau\x04\xe1\xba4\x81\x9bn\xddK\xb6\x1e\xb4_\x16\xb2\xdal$\xeb1\x14\xeb\xe1i\x91F\xaf\xae\x88\xb3-\xfa\xdc\xe4\xea9\xa9\xd5\x91\xc4\xea\xd1\xb4\xea&\x85\xba\xbdsnR\xf5\xbc\x94\xea\x18B\xf5\xbct\xea\x082\xf5$*uM\x9bn\xd3\x17$RO\xa3QW\xcem\x8b>7\x89:\x9aB}2\xa7\xb0d\xce\x03\x97\xf3!D\xce\xc4\xe3\xac\x85x\x9c\xfd\xfbUx\xdd\x97\x92\x94\"E<\xce\x98\xc4(\x1b\x0c%:-*%)\x8ax\x9c3\xa6B\xc5$BE\xa5A\x11\x8f\xf3\xa1\xc9O \xa9OY\x12\x9f\xe2\xd3\x9e\x88\xc7\xf9\x90t\xa7\x98d\xa7\xcc\xa9N=*\xd1)c\x9a\x136\xc9\xa9\x8fMq\"\x1eg\xc8\x91\xd8D<\xce\x81\x96eLd\xc2\xa71eMbJIa\"\x1eg\xd7e\xc1\xb4\xa5\x88\xa4%\x0c\x03pL\xc2\x12\xf18\xa7P!\x87\x12\x94\x88\xc79\") \x99\x92\x84IH\xc2\xa5#\x11\x8f\xb3\x90\x94\x04\xa4\x88\xf4#\xe2q\xce\x90n\x14L6JM5r\xee\x9c\xc4\xe3\xbc'\xc4\xe3\x9c\x90R\x14N(\x8aM'\x8aH&\x8aN%\x8aK$\"\x1e\xe7\xb8\xd4!\xe2q\x1e\xe4\x18\xe9B9\xc6\\D\xaa\x10>Q\xe8\xd7\xca\xe3<%\xb0t\xb5yz\x95\xbd\xb2\xf4\xb1\xdb\x1cK\xe1y]v}\xd3\x96\xcb\xa2Z\x94\xf5\xba9\xfbE\x02\x82=\x1c\x9d\x7f\x1e\xee8\xaf\xd7\xcd@\xca\xc9{9*\x9b3sJ\xad\xba\x9f\x13\xfe\xcd\xa9\xbeG\xba\xcb\x0f\x94{\x93wq\xff\xcb`\xd2\x14~\xc9\xe4\xe5\xcf\xcd\xa2H|m\x96\x19\xc5\xd96\x08\x06S\xafY\xb1r%\x96x\xd5BP5\x17\xe5\xd3\xf6`\xf8$(\xe8\xb2\xe8\xca%\\V\xcd\xf2F\xf4\xdb}}\xa8M\x80j\x17\x17\xf1\xb4L\x80K\x04\xfcIJ\xb1\xdd~\xd9Gb|\x92R^i\x9eSX\x16\xdb~\xd7\x0e\x00r\xfd\xe7vW1\x99\x0b\xb5m\x1b>\x7f\xfcM,\x86\xf7)#\x98\xfc\x1f\xcb\xeb\xa2\xacO<\x1f\xa9\x8a\x90Z\xe0\xbb\xf8\xee=\xdc\x04\xab\xa2/\xb8]vK\xd96\xf5\x9d\"[\xe5Q\xa8}\xbbcH\xea\x89\x15\xde\xa2\xa5\xeb\x05\xb6\xaa-\xeaN\xee\xe6\x9bby]\xd6\x0e\xf6*\x81\xde,\xebE\xe9Hn\x05\xdc+\xf5\xe5\x82\x00N\x05\x06\xc5\x08\xf0\x05\x11\xb5\xe2\xbc,^\xa0\xdf:r\x05\xd8\xb6\xec\xf6\x0b/\x00\xd7Ew\x9dy2z\x99\xd8\xc4Y\xa7_t\xac_\xf8\x96]-\xa8\x9e\x02\xba\xb7\\\x04\xf6+tQ\x08Z4\x17\xcc\xb0\xd3\x1269\xc4\x98\x1d\xf0\xa6\x1f\x06\xdaE\xd1\xf6\x1d\xeb\xff,\xde\x80o\xe8\n\x10w\xbf\xf07\x19\xd5TT\x13U\xf3\xf8\xe3\x98\x08_\xc8\xc9\xc0\x97=\xc7=\xfc\xa7/\xd4\xbc\x91\xa1\xfd\x0b=pn\x8fu\xdbl\xf4:\x0e\xcd\xae\xdf\xee\xfa\xf1o\xe3\xda\xe1\xd0&\xca\x9f|\xf1>\x8c\xc4\xe1_\xe6y\xc5v\xfb\x85\x9e$\xe6\x87\xc2n|\xa1G\xb2\xdbr\xc5\xea%\xfbB\x8f\x1b\xc6\xdfx\xfc\xf1lK|\x05n:\x16\xe0\xc3\x87l\xed\x9b\x1c\xea\xe4J6\xf9\x8a\x18\x8eI\xc2\xa5\xa8V\x12\xb9\xe7\xd8\x8e1\xb7E\xd51o\xee\xc4A\x89\x03\xde-\x0c\xb3y\xe1\xca\x0dHA\x198\xe6X\x1cU\x80\xc0\xab\xc7\xcc\x04\x89/C \x05W\x8c@\n\xc2\xfa\x80|\x03\xa0\xd4\xf9\xcb\x13\x8c\xd7!\xde\x00D\xbe\x05H@\xe3\x06\x15\xf6V\x04\x84\xef\xf3@\n\x1a\x9d\x1b\xd44\xa2wC(]-\xb1h\xdd\xa0\xc2m\xd1_\xa3Q\xbbZl\xd1\x9dh\xf4\xae\x16<\x8a7\xa8\xcaD\xf9F\xa0y\xb5\x1c\x88\xea\xd5\x12\x87\xee\x0d\xaaS\xc8\xc3(\x94\xaf\x96X\xb4oP\xe1\xbai\xa3P\xbfZ\xa2\xd0\xbfAm)\xa5\x10\xa4\xa0\xd0\xc0A-S\xb40\x06\x15\xac%\x1b:xTx\x08JXK\x02ZXK\x16\xd4\xb0\x16\xc8\xcb\x84\x12\xfd\x19\xfe`k\xd3\x98\xa60e\xd2\x18y\x91\x9a\x8d\"\xfe!\x0eV\x83\x914\xcaD\x02z\xf6\xf7!g\xbb \x18\x81\xc4\xc0\xd5\x83\xbe\xaeIgf\xb8r\x05\x1e\x93\x18s5\xed&P\x1c\xdb\xb6\xba)>\x1b4\xf2\xbeV\xf9\x8a'\x84a[\x93\x86O\x1f\xaa\x1b\xaeQ\x96\x03\xa6\xc2\xe0\xe8w5\x9d\xd5}\xeb\x8d\xf8fm\xb7\xd3oh4\xc5\xe8\x0d\xe8?\x89\x93f)\x1c\xb2\xc3\xcbph2\x10&\x02Q`\xfc\xfb\xe9\x96\xb5\xb0-\xca\xf6\xaco\xcb\xc6\x9a\xa2d\xd4\xb3z \x96\xd9o\x916\xd0\xf8\x9a\x8deV_\xe3\xc4=mY\xdb\x95\x9d5\xe5\x87\x1bv\xb1bu\xe3\xc8\xdb\x8d\x9b\\\xa3\xb6 \x14\x98\xffY\xc47\x96MY\x83\xf8\xbd\xac\x15\xcer_\xe3\xa6\xac\x17\xb3\x1c\x82\xc4\xb6\x85\xd0w\x96'\x0d\xe8\xf9\xeb\xa2\xac\x9f\xdf\x95+6@D\x83)\x0b\x12|\xc6\x8fG\xc5\x0c\x1d.\x81\xe1 \xc1j#bk\xa2\x07\x81\xea\x91{J\x10\xcd\xa3\xf0;\xf2j\x81\xdb\x99\xea\"\xd8\x0e\xc1v\x82\xe1!\xdcJE\xb0\x1d\x82\xed\xb8\xae$\xd8\x8e\x10\x82\xed\xec\x0b\xc1v\x08\xb6\xe3\x12\x82\xed\x10l\x87`;\x04\xdb!\xd8\x8e\x16\x82\xed\x10lg.q\xc6#\xd8\x0e\xc1v\x08\xb6C\xb0\x1d\x82\xedL\x85`;\x04\xdb!\xd8\xce\\\x08\xb6c\xbf\x81`;\x04\xdb\xf9\n\xb0\x9dhxK\xd3T\x1epK\xd3T\x13X\x0b\xbf|\x82\xd4\xb1\xa2Y\x9a\xa1\x1a\xdb\xc3\xc5\xb2\x0c\xfd6e\x8ad\xe1}5#\xd3{\x9d\x1f\xc5\x1b\x82\xf3\x07\xe0\xea\xa6_H\xd2\x87\x85\x8f\xea9\xe0\xed9D\xc3\xa4\xd72v\xdc4\x15:r\xcc\xad\xf2\xfe\xe2\x15E\x8a\x81\"\xc5A\x8f$\xc6\xa9\x07\x14)\xa6H\xb1\xf3J\x8a\x14\x0b\xa1H\xf1\xbeP\xa4\x98\"\xc5.\xa1H1E\x8a)RL\x91b\x8a\x14k\xa1H1E\x8a\xe7\x12g<\x8a\x14S\xa4\x98\"\xc5\x14)\xa6H\xf1T(RL\x91b\x8a\x14\xcf\x85\"\xc5\xf6\x1b(RL\x91\xe2\x7f\x82H\xf1<\x87\xdd\x16/\xfeqL9\xd7Q\xe3\xa2\xaa\x8c,s\xed\x0b\xee\x97\xb2\xe4\xc3Uy+\n~\x14\xfdnpl\xb8\xbe\xe6\xffv\xcdjX\x16U\xc5V\xb2\xaarQK\x0f\x8d\xa4\x128\x91\xde5\xc9-!=.\xcb\xa6\xeev|\xcf\x83\xeb\xf2\xeaZ\xd5\x02\x18\xf4\x99%\x05\xae\x8aNV.\xe1g\x84+\x95o\xacV\xdb\xb2\x83\xb2V\xd5\x1a\xaa{\xe8Xo\x0d~\x8f}W\xbf>\xd8\xd8\xb7\x8f\x8d\xa0\xff\naEi\xc6\xa6]\x14\xabU\xcb:\xc7U(7\x16\xc6\x13\x04\x96GN\xe2\xfc\xfao\xf3\xcaRO\xdc\xeeQ\xad\xef\xbf\xc3%[^\x03\xab\x97\xcdJx\xc0\xc5\"e\xdf\x8c\xf9\xe8du\xb7\xeb\x16\xdb\xdd\xe5\x0ds\x96|\x0dX\x17\x10\x16\x06D\xf0\x16p\x16\x86\x08+CB \xd7\xab\xcc\xee8\xf3|{\xe5\x0e\xe8B8\xa8\x0b \x81]\x7f\x07\x8a\xfe\x1a\x1d\xdc\x85\\\x01^H\x0c\xf2z\x15r\xe3\xa2\x03\xbdpx\xb0\x17\xa2\x03\xbe^U*\x10\x15\x15\xf4\x85\xdc\x81_\x88\x0c\xfeBl\x00\xd8?\xb2\x87\xe006\x08\x0c\xb9\x03\xc1\x80\x0b\x06C\xce\x800\x1c\x1c\x14\x86\xb4\xc00\xe4\n\x0eCR\x80\xd8?\x1d\x8cBK\x81.\x1c!P\x0cG\x0c\x16\xc3q\x02\xc6\x10\x194\x86\xb4\xc0qh \xc6\x05\x8f!o\x00\x19\"\x82\xc8\x90\x12H\xf6j\x93A\xe6\x88`2\xe4\x0c(CBP\x19\xb1\x9e?C\x04\x96!Gp\x19B\x01f\xc0\x9f\x1d\x11\x81f\x88CT\x00\x1ar\x07\xa1!1\x10\xed\x1fW]8\x18\x0d\xe9\x01i\xa7>\xfe\xc4PP\x1a\xb2\x05\xa6\x01\x1f_\x05L\x80\x1a\xe2\x82\xd4\x10\x8a\x9b$\x06\xab\x01\xa1\xd7\xe3\x9b\xcd\x14\xb8\x86$\xe3\xe2\x03\xd8\x80\xe8eB \x1bR\x83\xd9\xe0\x8f\xd7\xa1\x82\xda\x909\xb0\x0d\x99\x82\xdb\xe0\x1f1\xf9\x82\xdc\x80\x0ft\x032\xd8\x0d\xe8\x807\xe0FT|\xe0\x1b\xa2\x82\xdf\xe0\x0d\x80C\xae 8\xc4\x06\xc2!1\x18\x0eq\x01q@\xbc\x85\xc0D\x0b\xdf\x8f\x0f\x90C\xc6 9`\x9a\xe6\x99g\xf9\x02\xe6\x80 \x9a\xc3\x01\x81s\xa7B~\xa1/x\x0e\xb9\x03\xe8\x10\x0c\xa2Cj \xdd\xa9M\xba\x1e\xfc^\x98p@\x1d\xbcq?\xf0\x06\xd6!)\xb8\xeeT\xe5\x0d\xbaCj\xe0\xdd\xa9M\x1e\xa0}E\xbd\xb3\x05\xe0\x01\x15\x84\x87\x84@<\xc4\x05\xe3!% \x0f\xd1Ay\x08l\xe5\x81@)D\x04K\xb1\x01zH \xd2Cl\xa0\x1e\xfc\x1dO \xd8;\x95\x19\xe1p\xec\x94\xc1\x05\xee\xbd\x13\xa2\xbe\xf2\x07\xef!o\x00\x1fBA|\xf0\x07\xf2\x9d\xf7\xa4\x06\xf8!\xe3\xd8\x8d\x08\xf4CT\xb0\x1f\x9c\xa7\x97\xff,\xca\x8a\xad\xfc1\xc7\xcb\xa6\xa9\x983 \x80u~\xc8'\xa9\x08\xeb\n\xee\xae\x99r\x81\x19\xa1U1\xc2/\x19\xab\xd5\xd5\xee7\xdc6\x9b\xa1F\xbe\x80\x0d\xc8 \x86\x95\xaf\x1c\xd4%\xae^b{\xa0\x1e\xa4\xd8\xbe\xc7F\xcb\xbf;o{*\xdby60\xd2\xab\xff\x13A+\xfb-\x08'\x1a\xabw\x0e\xfau\x108\x8e?\xbe{\xfbz\xf1\xe1\xe3\xcb\x8f\x9f>,>\xbd\xfdp\xf1\xe6\xd5\xf9\x0f\xe7o^\xa3\xef\xe0\xff\x8a\xbc\xfc\xfc\xed\x9f\x90\xd7{\x95\xeb\x84\xf1\xa8.\xf82\xdeQ\xf6\xc4\x0e\x02\xf9 5\x8c\xd5yCp\xb3\x8b\xe8\x89\xf8\xediY/+\xf7\xc6\xdf\xb1j\xfd|,7\xe0\x18\x04\x03\xe3\xfb\xa2\xbb.ZwD?c\xd7\xe6\x8f\x1c\xd1\x10M_T\xa0\xfeXv\xddNF\x8a\xdc[\x91\x81\x950\xa8\xeb]\x1d\x1d[wp\x07\x86\xeb&H\x0e\xf3\xef=k7\x9d\xe6.\x08w\xc0?C\x0fFcl\x9a\xba\xbca\x16>\x82Q\x10/\x18\"l\x04\xe3S\xc7\xda\xfb\xbf\x91?]4m\xcfw\x99\xff\xc5\xee/\x8b\x8e9\x17o\x80;v\xd9\x95\xae\n\x14RRz\xac\xd4Z{\xa4\x7f\xab\xca\xfa\xc6\xb7\xf4,wm\xd9\xdf/\xc4\xb7\xca\xb2\xcf\xdd\xc2\xc0;\x99?\xde\xda\x13\xb6)\xca*\x08}\xd0\xaa@\xa9r\xf7\xd9I\x9d1JJW\x95Z\xbd\x11\xc8x\xde\xd0 \xf5\xab\xbdUc9!Y\x0b\xeb\x80\xa5=\\=\x06\xff\x86\xe6\xcd\xd2o\xe7\x04J\xa3\xb6\x91\x88\xb6\xea\"^\x1e\x88\x94<\xeb\x8b\x80\xf5\xfcxw\xb5\xab\xfd\xb5\x92p5\x9c\xa2\x0c\xb4*z\xf6\x9c\xeb\xcaf$Y\xfe\xc9m\xa2MY\xcb\x12Q\xbe\xa1<=H\xf6\x8d\x00,T\xacg!\x03\x8d\x85eP\x9b\xe6x\xf9dc4\xfe\xbc_\xa1l.\x99\xb6\xbcY\xf1\x1c\xef\xc4\xc4\xbe\x15\xb0\xe8\x9dtT\x00\x8a\x8a*\\\x8fG\x8aT \x81\"\x03\xb8a\xd9\xb2\xa2\x97\xdf\xbb\x88m\x0fe/@\xda\x0cT\x9bB\xfe~\xc4\x84\xd0\x12cZ\xd0\x85\x8a\xca\xbda#\xfe,K\x15\xad\xdc\xc5\xa4F\x19O\x83' \xd2\x0f\xd6\x02\x94g\xaf\xea4\xca\xa6\xf8\xec)\xea4\xca\x11\x0d\xa0\x9b0\x19W\xba\x94\xda\xcc\"Aeru\x9c\x16|b\xb7\xacU\xa6\x8c\xb6\x8dD\x11=\x04\x13\x19-\xb1ZjU\x94\x1e\x9a\x07-e\xcdg[\xc7\xf6\xc0\xd7\x86\xa5\xa5\x91\x82\xaa\xc2F\xdcm\xf9\xee\xe0\xddi\x00o8\xec\x8e\x03\x91\x066Z\xa9\xe7\xa1\x880\x88?\xd8f\xe5]\x00<)\xdf\xd4\xcan\x97MY/\xf8\x87\xeab\xfcP=`\x17\xc6\xf6\xd3\xf2\xd4=w\xcb\x93N|A\xc3\x8a-\xab\xa2\xf5\xf8\x88t\x0d6u\xb5V\xe8\xa5\xfc(\xeb%\xe3\xbbe\xb7i\xba\xe7\xdd\xea\x06~\x7f\xfa\x87\x7f\xb3^>\x1e\x04\x9azq\xddT\xabE\xcb\xd6\x8be\xb3\xab\x8f}\x9e\x0bU\xa8\x93\xcey\x91\xa4\xb2m\xba\xb2/o\x99Lj1\x8fbO\xba\xb1\x07\x83\xd7\xcd\xa3\xb0\xd9ne\xc4\x8f}\xeeY\xcb\x8f\xb82\xdd\xc6>\xc4F\xe3\x94\xab\x80\xe7\xc2\x9ec\"\xc5\x99i\"\x05a\xcf\xd1\xa2\xbb\xc3LZ\x95\x9d\x00h\x8fF+W\xdd \xb0by\xbd\x9f\xc2\xc0\xcf\x08nc\x8e*\x9a\xf9[\xb1\xdc\x83\x99:C\xce\x91\xf1E?\xe8<\x81\xbe\xb9\x92\xbeV\x11\xe1\x12\xd1\xa9\xa6/\xec\x81D\x99\x1c\xa5\x01r\xfe\xa7=\xe9\x84\x0bV;\x86T\xe6r\xd9\x02\xfb,\xd7\x16U\xdd\xb0\x115\x1c\x1d\xe7\xca\x0fU\xd1]sch.*W6B\xc1g\xbc\xdc\x14T\xdct\xf2\x98\x13\x89a\x16\x90Z\x99\xa4e\xd5\xb2,\xaa\xe5\xae\x1a\xe2\x85\xeb\x1d\xff\xf8\xb7?pW\x8f\x8bF'l\xd7\xecz>&[y\x0cln\x99Y\x98\xf1Te\xa6\xf1\xae\xda;\xd0N}\x85\xf6\xa7N\x07\xc4\xc9l\xf7+;~\x0c]\x95\xbd\x86r\x16\xc6\xcaf\xd5ww\xddtF\x0dP\xfbC\xcd\xd7Xv\x13D\xb71\"D\xd7\xc6.X5\xad\xca\x01\x1b #<\x02\x96l\x7f\xea\xe4\xfd\x9d\xc2\x8f\x8d0\xeb\xb6\xb9c\xf2@t\xc9\x86\xd7\xc5V\"\xde\xef\x1c\xb6:\x14 \xba`\x7f\xdafW\xf5\xe5\xb6*\xf52f>{\xef\x86\xc9\xac3\xf2\x16G\xec\xa6*i,\xf3\x1bW\xe0\xae\xa0;&\x12\xee\xafd\x93\xc7\x18\x19\x87\x13\xba\xd9\xf1\xcfj\xdc\xdbr\x02\xa5x?9\x02\xfc\xb3\xecs\xbfp\xa6\x9f\x05\x97\xda \x9ew\xd2\xd5\xffr-\xb4\xba\x15z\xd7\xe7\xff\xab\xf0\xfaE\xd7I\xb7\xf3Eq\xc5\xde\xb3\x9fw\xac\xebO\xe5\xef\x0eec}q\xae\x96\x1b\x92\xc1\xa6\xe9z`\x02\xf5.\xe0\xf2\xa7p\xde\x1b\x01\xcfm\x7f\x0f\xa5\x0b):\xe1+\xdb4-\xd3k\x96me\x13c\xf5@cz\xf6\xac\xd0\x8e%]\xf6\xa5\xf6\xdd\x8f5\x80\xf52k\xf0\xcb\xb9\xfak\x1aZ\x1cl\x16r\x02:.\xbf+\xf8\xc9\xac?\x81\xb2\xeft\xb2J'VQ\x19\xf1\x13.\xb2\xbb\xb2\x9b\x8e\x0fWGD\x1e\xf2\x98L\x8b\xa5!\xdeK\xbf\xd52R\x13\x0f?\x103\xf1\xecWb&\xc6\x9d\xb7 !\xa1U\x0eVb&F$\xaf\xf69\x12WS\x92V\x89\x998c\x82jLrjTb*1\x13\x1f\x9a\x84\x9a\x90\x80\x9a%\xf94>\xf1\x94\x98\x89\x0fI4\x8dI2MH0%fb fbl\xf2(1\x13\x07Z\x9619\x14\x9f\x18\x9a5)4%!\x94\x98\x89]\x97\x05\x13?#\x92>1\x9c\xb61\xc9\x9e\xc4L\x9cB\xee\x1bJ\xe6$f\xe2\x88\xa4Md\xc2&&Y\x13\x97\xa8I\xcc\xc4BR\x921#\x121\x89\x998C\xa2e0\xc925\xc1\xd2\xb9s\x123\xf1\x9e\x103qBbd8)26!2\"\x192:\x112. \x92\x98\x89\xe3\x12\x1d\x89\x99x\x90\xdf$3\xf1\x88H\x1eOQ\xcf\xc5\xc2\xfbb?\xe5n\xf2\x85\xad\x12\xf5X]\\V\xd2U&C\xc1\xdclF0_\xf0\x0fK@\xaf\x8d\x80\x18\xc4\x86\xf2B\xdek\xfc\xade?\xef\xca\x96\xad^\xc0\xba\xa8&\xd1L\xab\x1bC7y\x8c\xe3\x9f\xde\xb0{W\xd3g\x91q\x15\n/\xd4\xaa\xdf\xb2~\xd7\xd6\x92QVFgU4r\x88\x9b\x0b\x7f\xe3\xd5\xcc1'z\xc0;\x1a\x8a\x85\xbf\xe3[tS\x8bo\xfff\xbd\xee\x98Hx\x996\x17\x8cx\x89A\x82\x0cy\xac\xe5p\xf4X\x8c(\xdb\xe7\xb2\xe3\xcc\xc9\xa2:#LY\xef6\xac-\x97\xfaob\x81Pp\x13\xe9\xe5\xbaf\xb56\xfc\xae\x1e\xbc\x9d\xb3#\xf8\xb9\xd0V\xb1\xae\x1bM(]q\xbb\x8e\x9b\xfa\x86E\xdas\xaa\xfe\xc8\xc6\x9d!\x0b,\xe6\xad\xcaM\x89\xb5\xae\xb8VC6\\\x80\x03\xe9 7G\xb0\xc2\xb2\xec\xaaY\x84\\\xba\x98\xcc?\x9d\xaf\xa1b\xeb^\x034\x14bC\x1fs\x85\x13_N\x10\xf9\x10n\xe7\xcb{ \xce+\xb6\xdb\xafhE\x1361\xde\xef\xb3\xa5q\x07\xb7\xa8\x18\xa1\x0d\xf4\xed\x8e\x81\xf0\x11\xd7\xabr)Pu*\x9c\xa7,(.T\x03\xc9TW\xd6\xcbj\xb7\x9a\x1db\x0b\xf9\x94!\x9e:{c\":o\xb8\xf9\xf9\xb29A!M\x94}:\xeffok\xd6\x05q\xeeoY\xa7p\x14bz\x8d\xf3\x91O\xb9S5\x9b\xca\xab\xba\x99#z\xf5l\x9c>BZ\xe6\xd0\x17;Ol\xb7\xbc\xc0\x96\xdd\xb2vr\xab\xef\xe5\xa9\xab\xe7/\xae4`7-\xb3\xcf\x84\x89\x1e\xfe\x0c\xa60\xa2\xed\x8a\xb5\xf3o\x0c+N\xf9\xbb\xac\xd6H\xaf\x0bp\xf6\xcb\xf0\xff\x82W\xfd\x1fR\x8d\xb7P\xc0P'\xc0\x80:\xd6\xebF\x0c=\xb97\x8f?(^v\xfd\xf2\xed\xec\xfb\x8ft\x9f\x1f:\xf9\xbe\x0b8\x93\x04\xe2\xc3Q\xe8\x07\xa3-\x98pEn\xf2\xfcx\xea|\x1cq\xbe\xd7\x9a\x10\xb4( PE\x08\x8b\x02\xda\xaa\x90\x8a-\xf2\xe8\x8b\xa2\xca\xcf\x8a/\n\"\x8crc\x8c\xf0(\xa3L8\xa34\xa4\x91G]$9\xfe\x81h\xa3\xdcx\xa3H\xc4Qf\xccQ\x1c\xea(\x12w\xe4\x1b\xc3\x03\" \x8b<\xca\x8c=B\xa1\x8f2\xe2\x8f\x0eE %a\x902\xa1\x90RpH\x1eeh\xfa\xfb#`\x91\x8e\x87F:\n\x1e)\x0e\x91\x94\x1d\x93\x84E%e\xc5%\xe1\x91I \xd8$\x8f\xae\x04\xaa\xfbl\xf8\xa4x\x84Rp\x8d\xc6\x91\xdc\x1f\x8cR\n\x12\xdc\xa3Nz\x08\xacR\xccq0\x1a\xaf\xe4\xd1\x85\xa7\xb5\xc7\xb5/#j)\x06\xb7\x94\x19\xb9\x94\x86]\xf2\x8d \x14\x95}\"~\xc9\xa1\xadG\xd1\xd8\xe7\xc10\xa1\x818\x08\x1cS\x14\x92)\xc4e\x9c\x82f\n\xe9t\x06\xee2a\x9a\xe2\x8d\x89\xc75\x85\xfa\x96\x80mJD7\xf9\xf9\xb3\xc3\x08\xa7\xbc\x18\xa7<('_P7\x1b\xd2 \x8du\xc2\xa1\x9d\xb0x'\xc4\xc8\x89\xc7<\xc5\xa0\x9e\xfc\x84\xf4Y\x90O\x91\xd8\xa74\xf4S\x14\xfe)du? }\xe0^<\x0e*\x1f\x12*\xd8(\xe7\x0c\xca\x87\x87B \xa2\xd21Q\x0eu}\x90r>+.*\x84\x8cJ\xc4F9t\x85\xa9\xe6\xc3\xf8(?\xcd\xbc\x8fd>7J*;N\xca\x8d\x94\xca\x89\x95\xc2\xa0\xa5\xe2\xf1RQ\x88\xa9\x04\xccT,j*@\x1c\xefo\x1d\x16\xc7\x82\xc5N%\xa0\xa7\"\xf1S\x9e\xee\xa6`\xa8\x1c\xaa\x10T\xf1)8*\xcf\x90\x0f\xd3\xc4g\xc4R\x05)\xe2\x8f\x81\xa7\xca5\x16#0U1\xa8*\xfb\xc9\xc1G\xff\xde[c\xe4\xa6\xe0\\\x04)\xc4\xef\x82\xe0\xdd\xa1\x0fK\xfb\xee#}\xc7\xb5<\x89\xf0=\x9a\xee=\xe8R\xf2Q\xbd\xc7\x12\xbdG\xd1\xbc\xc7\x91\xbc\xa3)\xde\x13\x08\xde}\xf4\xeeA\xfb\xe1^\xf6\xa1\xc4\xee\x18Zw\x1c\xa9{\xa6\x0e\xe5\xa2s\xc7\x93\xb9\x9b\xed:\xa8\xe1\xc3U\x07\xd1\xb8\x07XZ\xfb\xc3\x91\x01A\xfa\xf6\xe0\xab\x04\xb4U #q{\x90\xbf6L\xda\x9e\xb9g\x99\xe9\xda\xd1d\xedA\xaa\xf6\xf8~\x1eJ\xd3\x8e'i\x8fo\x9b\xf7\x1dd\xa3g\xc7\x92\xb3\x07\xa9\xd9\xe3;\x98L\xcb\x8e#e\x0f6(L\xe0\x89{\x1f9\xc9\xd8\x0f\xa1b\xc7\x10\xb1\xa3\x8d\xe2\xa7\xc4\x8d5L\x0c\x01;f\x97\x004\xfdz\x88|}\xd2\x93\xc3\xa9\xd73lTx\xd2u\xdc[\x80x\xc2uI\xaa\xee\xd1w\x10\xddz\xd0F\x80\xb2\x13\xa0\x88\xd6\x83\x03^\x0b\xde\x98\x80\xa6X7)\xd4\x03\n\xd1$\xe28z\xf5#u;\x86X]\xaee\x01\x859h\xd5\xa3H\xd5\x8fh\x18\x14\x9d\xfa@\x97\x1eP\x18$S\x0f\x9a\x06E\x95\x8e2\x07nO\x80(\xa3e\xa6H\xf7\x10\xa4\xa3\xe9\xd1\x83\xb6\xc0\xf5.#1z4-:\x9a\x14=\x9a\x12=h\x9c\xf0i*\xc4\x83\xda\xe5\xa5B\x8f#BG\xd0\xa0K\x13\xb8I\xd0\xbd\x14\xe8A\xfbe\xa1\x92\xcdF}\x1eC|\x1e\x9e\x16i\xa4\xe7\x8a\xce\xda\xa2\xcfMy\x9e\x93\xf0\x1cIw\x1eMvn\x12\x9b\xdb;\xe7\xa6:\xcfKt\x8e\xa19\xcfKr\x8e\xa08O\"8\xd7d\xe66}Az\xf34rs\xe5\xdc\xb6\xe8sS\x9b\xa3\x89\xcdqT\xcb\xd1L\xcb3mD\xb4,\x85\x88\x96\xfd;Sx\x85\x97\x92\x94\x0cED\xcb\x98\x14(\x1b\xe0$:\x01*%\xfd\x89\x88\x963&=\xc5\xa4Q\xaf\xc1\xc3X7F\x7f\xc5\xe0Ph\x04\xdb\xc8\x17\xf8\xc8\x03\x8dy\x00\nz(g\xe0\xaaoaD\xeb]\xfd5\x0dmV\x86p\\~W\x882\x02'P\xf6\x9d\xc6\x85t\x02\xad+\x99\x14\xc4\xf7\xc0]9K\xfbP\x1d\xd9\x1b\x11S\x94\xa7ql\x0f\x02>m\x8a\xce\xac_?\x84\xfd\x94B\xd8\xcf<\x1b=a? \xfbi\x17\xc2~\n!\xec\xe7\xbe\x10\xf6\x93\xb0\x9f.!\xec'a? \xfbI\xd8O\xc2~j!\xec'a?\xe7\x12g<\xc2~\x12\xf6\x93\xb0\x9f\x84\xfd$\xec\xe7T\x08\xfbI\xd8O\xc2~\xce\x85\xb0\x9f\xf6\x1b\x08\xfbI\xd8O\xc2~\x1a\x7f\x8a\xc1~ZK\xb7\xdf\xb0{W\x9bg\xc1Q\x15\x1f/\xd4\xb2oVf\x97![\x15\x8e\x1c\x82\xe9\xc2\xe1x5\xf3\xcc\x89\x8e\xf1\xa5*\x14 \x7f\xc7\xf7\xe8\xa6\x16\x1f\xff\xaa\x10~\xd3\xc2\xb4\xb9`\x04L2T\xba\xdf\xf3\xfaX==\x16#\xca\xf6\xb9\xec8\xf3\xb2\x8cU\xfd\x0b\xa8w\x1b\xd6\x96K\xfd7\xb1B(\xde#\xe9\xe6Ru\xfdeH{pw\xce\xce\xe0\x02\xb8\x05\x15\x1f:\x83 \xa5/n\xd7qS\xdf\xb0H{N\xd5\x1f\xd9\xb83\xb8\x81\xc5\xbcU\xb9)\xb1\xd6\x15\xd7j\x1c\x87\x0b\x85 ]\xe1\xe6\x08V\x00\x97]5\x0b\x91K\x1f\x93\xf9\xa7\xf35Tl\xddk\xd4\x86\x82q\xe8s\xae\xf0\xe2\xcb \"\x1f\xc2\xed|y/y\xe0\x8a\xed\xf6+Z\xd1\xc4R\x8c\xf7\xfbli\xdc\xc1-*Fh#\x16\x1a\xc1C[\xd6\xabr)\xa8\xdcTBZ\xe6\xd0\x17;\xaf by\x81-\xbbe\xed\xe4V\xdf\xcbSW\xcf_\\i`qZf\x9f \x13=\xfc\x19L\x11\x12\xb6+\xd6\xce?2\xac\xc4\x97\xdfe\xb5\xc6\x91\x92\x16\xce~\x99\x02\xad\xff!\x9fa\xcbb0\x80\x80\xe8\xdc\x85\x11#\x0b\xdb\xa2l\xad \x02\xaf\xe7\x8c}\xffLi\x01.\xa0M\x12\x100\x04\xee\xf7\xaa\x86\xa0z\x88\x83\xf5#\xa2@\xb8P\x8a\xbe2\x17\xa0?\x08\xe7\x8f\x00\xf3g\xeed>\x18\x7f\x10\xc4\x1f\x82\xf0\xc7\xf7\xecp\xf8>\xceP9\xa1\xfb8\xe0~\xc5\xb7q\xdceK\xcb\xae0\n\xb2\xa1\x08RL)\x8aQ\xf2\xbc^\xb6\"`$\xb6\xe4\x95\x0f%Svb\x95\xf4\x04\xdb\x86\xae\xf0\x05\xa0\xa9V\x8b\x96\xad\x17\xcb\x0c\x1c\xc2\x10\xb1\\\x858?\xa5|\xe8\xdbRp\xe1o\x9b\xae\xec\xf9\xfb\x12\xdc\xf9\xba\x8fO\xcc\x93\n\xff\xe0\xb9d\xcc\x1dO\x05\xf1\xb9\xd9l\xb7\xbaZ{\xcfZ\xfe\xbd-Y\xfd]aQ\xect\xb2\x1cr\xde\xf06\x8eX\xcc\xdah\xacw\xa3\x01\x19ojY\xc5n\x8b\xba\x87\x0d\xeb\x8bU\xd1\x17\x08\x88\xb0\xda e\x16\x86\xb9\x82\x9b\xc8cuQ\n\x90\xd2vh\xec\xfa\xa6\xe5\x8f\xac*\xe1d\x81\xae\xac\xaf*\xe3\xa8\xf1\xc4f\xda\xb1a\xfc\xbfV\x9c1_h\x07m\xe3\xc1\x93\x7f\x0c\xd6b)~.RG\xd8\n\xaa\xb2\xeb\x8f\x89\x8c\xb4\xdd~f;\xd5\xfe\xff\xec\xfd\xfb\xb2\xe46v/\x08\xff\xaf\xa7X\x9f\xcf7!\xa9\xbdk\x97Jj\xb5\x8f\xeb\x84\x1cQ7\xc95.Iu\xeab\xc5\x89\x13\x8e\x146\x13\x99\xc9)&\x91\"\x90\xfb\xe2vG\xcck\xcc\xeb\xcd\x93L\xe0F\x82$\xae$\xb6TR\x03\x11v\xabv\x92\x8b\xc0\xc2\xc2\xc2\xba\xfc\xb00y\xb0 &U+\x88\xc9\x82\x98\x1cZAL\x16\xc4\xe4\xd0\nb\x92\x15\xc4\xa4\xbd\x15\xc4\xa4n\x051Y\x10\x93f+\x88\xc9\x82\x98,\x88I(\x88\xc9\x82\x98\x14\xad &\x0bb\xb2 &\x0bb\xd2h\x0519j\x051Y\x10\x93n\x11(\x88\xc9\x82\x984[,z\xad &E+\x88\xc9\x82\x98,\x88\xc9u}\xce\x89\x98\xb4\x81\"\x15q\x1b*\xd2\x08\x8e\xf4wkZ\xd2\xbb\xd4\x82\x8f4\xe8\x8b\x0d\xb3'4\xc3\xb1\xb9\xc21?\x1dp\x0b\x15j\x1a\xbc\x85]G\x8e\x80Z\x19b\x93\xb8\x84\x0b\x19\x1e\x95\x1c\x97!\xb3\x8a\xb4\xf4\xcc\x8d\x168\xd4\xfb\x83\xaa\xcb\xd4\xd3#\xbba\xf9\xed\x11\x95\x88\x89\xd1\xd5\xbb}\x05\xa7\xba\xadH\xd7a\x81\xb00\xaaM\x8e\xc0\x9b^\x86\xa8\x17>r\x18'\x97\x03K\x17uc\xbfA\xce8\x12\x0c\x1a\x15\xa4\x8c\x89\xf3\x81\xed\x9b\x0bK\xe9\x05\xaa\x05F\xa2H\xb3\x0e-\x11d\x1a\xa6c\x1f\x9a\x17~\x1a\x06\xa0\x06 \xa8A\xa1\x92-$Z\xb2%\x00Q\xa3fB\xb6XtW\xfc\xcc\xc9\x96\x17\x90\x1a\x07IM\x02\xa5.\xe0Q\x0c05\x99O\xf9\xc0\xa9q\xf0\xd4$\x80j\x02\x93\xd2\x86\x9d\x0d\xa6\xba\x0e\xa8\x1a\x05U\xbd7&\xc4\xe2Y\xb3\xccz,\xde5a\xb4\xd1\x98\xd7Xp(\xa4\xc1b\x03\xb4\xfc\xa0\xd9\xc5\xb0\xd9\x05\x0c\xca\xc7\x9fD\xf8lH\x001n\x17\x00hS\xe4<+\x886\x0dF\x9b\x15H\x1b7\xe6l`\xda(8\xed:@-\x18\x0e\xc4\\\xdeG\xa35<\x0dSW\x8d\n\xec\xab(\xe2\xdc\xf0\x97\xcdk\x08\xf9\x0d }Q\x88\x1b\xab\xe9]\x8c\xc1\x8c\xffh\xa8\xff\xe5\x12\xe6\xfe\xba\x12\xb5C\xf77\x97\xc0 Q*w\x1fy\xbf\xc9/gL\xd9\xa5\xfc\xddAL\xfa~,p\xb5\xc9Kf\x84\x98\xc4-\x12.\xd8\xe7\x08h\"\xaa\xd0*\xe0\x93M\x90\xc5-\x07+\x99\xe9Q\xf9!U\xd6_\xb2\xe0\xbau\xc3\x00\x06\xb9\xc6k2\xda\xbc\xaf\xc2\xf1\xf8\x0d\x12\x97\x1b\\@\xcd\xa8\x86\xa0qM)\x85y+\x01075\x9d\xdfh\x10@\x9c{]i/\x08}B\xcd\x02k\x94\x98t\x7f\xf4\xa2\xc0\xd1U+p\xf4o\x05\x8e^\xe0\xe8\xaeV\xe0\xe8\x05\x8e^\xe0\xe8\x05\x8e^\xe0\xe8\xba\x158z\x81\xa3O[\x1a\xf3\n\x1c\xbd\xc0\xd1\x0b\x1c\xbd\xc0\xd1\x0b\x1c}\xdc\n\x1c\xbd\xc0\xd1\x0b\x1c}\xda\n\x1c\xdd\xfeB\x81\xa3\x178z\x81\xa3\x1b\x7fJ\x81v[/\x9e\xff\x80\xef\\}\x9e\xa4\xd5U\x1e\x1d)\xb5o\xde+/S\xbb*\x1d\xd9'\xddE\xc0q?\x89\xcc\x89\x81qU\x15J\xa4\xff\xc8\xf7h\xd2\n\xe7_]\xe3O:\x18w\x17\x8c\x84I\x86{\xfagQ\x1fk\xa4\xc7\xc2D\xd9?\x17\x1f'Q\x165\x18\xc1\xca\xf6|\xc4]]\xe9\xbf \x0dQ\xa1\x96\x8fG\x86\xb9\x0e\xb8\xd5\x8c?\xb7}\xb8sb\x83\x8b;\xa2\xa1\xe1\xa2\xd3\xb3P\xc6\xe2\xce\x94\xb3\xfa\x03N\xe4\xe7\x98\xfc=3w\x02K\xb0\xb0\xb7\xa9\x8fu,w\xc5\xb3\x1a\xef\xe1B+\xc8P\xb8)\xc1\n\x08sn&)r\x19c2\xff\xf4r\x07\x0d\xde1\x8d\xeePp\x0fm\xe7\x8a(\xbe\\ \xf2#\x9c\xcfWw\x80Qu\x00t:\xfd\x86\\41\x17\xc3\xfb>^\x1aop\x8e\n %B\xd1\x80\x08\x12\xb7\xdb\xbaB\x0c\xf7\xf9<\xc5A\xf1\xa0\x12$\x93\\\xddV\xcdy;\xb1b\x91\xfcJ\x9fP\x9d\xcc\x98H\xcf\x1bq~\xbe\xdd\x8c L#b\xef_\xd2\xc9lM\x86 \x0c\xff\x0eS\x05\xa4\x10\xcbkX\x8f|\xc9\xa9\x1b\xd7\xa1\xde\xb7\xa4\x9bdI\xf4j\x1c\x7fBrf\xed\xc4^\x11\xd2`\xe3:x\xcb\x04v\xf8\x1aw\xa3W}\x93\xa7\x9e\x9eN\\m`v:l_ #:\xfc\x1bX!\xfd\xba-\xee\xa6N\xc6\xdb\xba\xad\xf0c\x90\xc7\x83\x1e\xd0\xed\x07\xf8\xe2\xf2\xcf_e\xe5F\xe8L\x12\xbb\xed\x8f#m\xf1\x80D9\x11:?d\xf4\xee\xf6\xb9x\x04\xe4\x93JOt\xa8\xa5HDm\xf5<\x8eX\xfb\xa9u\x90\xff\xf4\xa9zvtRG\x7f\xe0\x13=\xd2_\xe3P\xce\xff\xbf\xc3\xbb\xc7\xf0\xe9\x7f{h$\x88\x15w.\xd9\xed\xa5\xe2\xce\xa5\xee\x9b\xde\xab?\xfdd\xe8B\x01 \x8dZ\x01 \xc5\xe5\x8a\xa0\x00\x90\n\x00\xc9\xf9d\x01 \x89V\x00H\xf3V\x00H\x05\x80\xe4j\x05\x80T\x00H\x05\x80T\x00H\x05\x80\xa4[\x01 \x15\x00\xd2\xb4\xa51\xaf\x00\x90\n\x00\xa9\x00\x90\n\x00\xa9\x00\x90\xc6\xad\x00\x90\n\x00\xa9\x00\x90\xa6\xad\x00\x90\xec/\x14\x00R\x01 }d\x00\xa4+\xb25\xb7\xbe\xba\x9d\xfd\xc9 \x12\xca\x94\xadc\xb7\x9b\xab;\xe6.\xea\xe7\x08fx\xc3\x18\xa30\x81\xfe\x80\xc6ut\xe8\xc6\x96\xb3\xb5\xbc9+\x0d2\xa4@E%\x8a\x9e\xa2\xfa'\xbb\x1b\xee\x1b\x84\xb7\xb8\xbb\xae+|9I\xe9\xeaf\x16r\x98\xfcd\xcf\x17\xab\x87\xa6\xe9l\xf5\x19_B\xfb!:\xd6-\x89Hk?\xe1\xcf\xf5\xb9m\xd4\x82\xfc\x83\xc1,Y\xddRW\xe4\x93leD\xac\xcfl\xb9o\xf1Q\xf5\xc0\xaf\x93\x00_ \xb5\x82\xa5\x9b\xff\x8b\xda*\xe98\xe5\xd6\x1f\xbd\x1a\x8d\xdf,%\xc2\x8c:;#\x19\x9b\xca\xcdD\xe2$#}r\x97\"x%\xcd_\xd2\xfc\x96\x16\x13\x91\x85\x92\xe6/i~\xe7\x93%\xcd/ZI\xf3\xcf[I\xf3\x974\xbf\xab\x954\x7fI\xf3\x974\x7fI\xf3\x974\xbfn%\xcd_\xd2\xfc\xd3\x96\xc6\xbc\x92\xe6/i\xfe\x92\xe6/i\xfe\x92\xe6\x1f\xb7\x92\xe6/i\xfe\x92\xe6\x9f\xb6\x92\xe6\xb7\xbfP\xd2\xfc%\xcd_\xd2\xfc\x93\xfe\xca\x84\xa9\x8c\xfc%%\xcc<\xa1\x8c\xa4|j0c?y\xfd~\xb3\xa9Ii|\x99o\xf7&\xf0_\x88GTf\xfe>\xce\xa5\xcb\x0f\xa8\xdf>\xda\xb4\xfc\xaf\x0e&\xd1P\x08\x13#!\x1eH\x83\x95H\xee\xaeK\xfa+\x11X\x02*)\xb9\xfd\x92\xdb\xb7\xb4\x980,\x94\xdc~\xc9\xed;\x9f,\xb9}\xd1Jn\x7f\xdeJn\xbf\xe4\xf6]\xad\xe4\xf6Kn\xbf\xe4\xf6Kn\xbf\xe4\xf6u+\xb9\xfd\x92\xdb\x9f\xb64\xe6\x95\xdc~\xc9\xed\x97\xdc~\xc9\xed\x97\xdc\xfe\xb8\x95\xdc~\xc9\xed\x97\xdc\xfe\xb4\x95\xdc\xbe\xfd\x85\x92\xdb/\xb9\xfd?vn?\xba\x1a\xb8\xceY\x8aL\xba\xce\x1a/\xc8kG\x1cO\x97\x9f\x92\xa7\xd1u\x8a\xdb}<]\x88\x1a#\xe3c\xea\xd9R\xe0\xbf\xa3\xe3\xe9\xbf.\xda\xc2`O\x8eDv^\xbcE\xc9p\x97\x0c\xb7\xa5\xc5\x04#\xa1d\xb8K\x86\xdb\xf9d\xc9p\x8bV2\xdc\xf3V2\xdc%\xc3\xedj%\xc3]2\xdc%\xc3]2\xdc%\xc3\xad[\xc9p\x97\x0c\xf7\xb4\xa51\xafd\xb8K\x86\xbbd\xb8K\x86\xbbd\xb8\xc7\xadd\xb8K\x86\xbbd\xb8\xa7\xadd\xb8\xed/\x94\x0cw\xc9p\xff\xb13\xdc\xce\xb4S(\x9f\x9a\xb9\xdc\xf7(a\xba\xfcx\xfa}\xa4K\x93\xd2\xf8\xb4>\x9e\x1b\xc4|\x07\xd4\xdf\xaaG@?K\x01\xdf\xe2\xea\xcc\xb8FE\xe3\x14>\xdf\xc4)\xab\x8fH\xfc\xb8G\x14\xce2\x0e!i\x8e\x92\xf2\x9a\xae\xfa\xed\xa3\xcd\xc7\xef\x11\xdd\xd4\xed\x8e\xcc\xa5g\xd4\x1d\xfd\x98\x96\x03\xfe\xdf\xddQ\xaa1tE\xceL\xb1\xa3\xbfl_\xf3sv\x8f\x01\x84\xd2\xab\xfe\xe4*\xef\xc8\x0dj\x19\xde\xbaS\xaf\xde\x10\x9e\x0e\xe0\x9d\xeb\x96\xfd\xe5\xcf\xd6Gb\xc2d\x00\xdf!\xfa\x93\xe8\x88\xe6\xc9\x11\xdd\xd6\xc7\xf3\x11\xcem\xcdD|\xe7\x86t\x1f\xe0F%\x17dL\x9b\xdd\x02#\x0e\x82'\xdc\xf1\xce\xd9,\x12>j\xce\xdc_i\xcc\xdf!\xfa\x9e\x0e\x03CGr\x96\x19V>\xc9\xa8b2\x0dX\x91V\xe5\x87\xc6\xa4d\xce$ P\xf2!\x03\x86\xc1\xff\xa5C}\xf7#:[\xc4\xd0J\x06:\xa3\xbeq\"\xf3\x1c1$\x12k\xed\x9d\xe8\x0dt\x98\x9d\xbb\x16o%\x88\x0c\x84\x16\xa3l!\xa8\x0ch2\xce_#X\xce\x1bb\xac\xab\xaf\xce\xd6\x12+C\x0b\x0dW6\xef\xa0e\x8b\x18\xbal1\x0c\x90\xed\x03\xb6 \xe2\xa6-\x8a\x17\xb2yS]CK\xa0X\xb7[|\x1bK\xf1\x8a\x90\x06#wj\x16\xa2\xd7\x8an/\xb8\x1c?\xd1\xf3,\x14)\xd0\xba\xdd7\x98\xf3\xee\x81\x8cH\x9cP\xdd\xf9\x1c\x00\xde\x10\xa5\xa4\xaaE:Ff\xa5Z\xb9F\\\xc1\xb2\xd8n\x8a\x0e\xca\xed\x9e\x02\x1a0\x06\xb0\xc5\xd7\xb8\xe1r \x12\xac\x881T\x1d\x8cp\x85\x93\xa0\xa9\x10\x98'v\xaaa\x8d\xdf\xd6\xad\x88\xa7a)\xee\xd3IM\x86\x1e\xfcQ\x980\xfe\x13\xbc05\xf0\xe2@a\x11\x16\xd4I\xca\x8b\x11\x85\xa58Q'5\x95\xdaq\x7f.\x1f^\x14\xa20\xa3\xb0\x007\ni\xd8QX\x82\x1f\x85d\x0c)\x04\xb6\xf2\x00\xae\x0f\x12\xb0}\xb1xRX\x82)\x85T\\)\xf8\x07\xbe\x04_\xea$f\xa07c\x97L\x1c\xce\xd4\xbb \x04\xec\xcd\x835\x85\xbcxS\x08aN\xc1\x8f;u\xbe\xb3\x14\x8f\n\x19e7\x01\x97\nI\xd8TpZ/q\xa1\x8bQns\x0e\x90\xd1\xf9\xd1\xe1\x11\xb1\x0b\xd9iq\x8d&aEO\xda;\xea\xde\x86\xac\xb0\xce\xbf\x8c\x1e\xf6_F\xa3!\x95kj\xf8\xf44\x0c\xfc\xe9\xf0\xf5R\x87g\xd4J\x1d\x9e\xd8\xf5\x94\x9e\x0f\xd7q:'\xc1\xd8\\x\xd6\x16\xfb\xd8/g\xdc\xdd\xe9\xfa\xf0\x17J\x08T2\xa1\xcf\xbd\x8c\xc8\x89x\xc3'\xb6\xce Z\xa6N\xac\xdb\xc7\xf2\x8f\xc6\xdf\x86\xb4\xf2\x0e5\xd4\x94#fM\xb6Y\xd2l\x8eHKE\x9a\x06\x0b^|\xab\xe2,\xa22\xff\x8c\xef'\xb4\xaf[1\xd9\x97\x1f\xf0\x9d\x8b\xff\x93\xc3\xb4\x1f\xf0\x9d,\x9f-\xb7\xae\xfe\x1a\x02n\xe6\xa3}\x7f\xc2\xf6\xb2\xc5\xb7l\xc3\x1f\x16A\xd3\xfd$\xba(\x98\xa1*B\x03\x7f\x94w\x06\xc3\x91O\x0b\x16\x91F\x11\x9e\xbc\x84\x1f\xb9\x9dAZ\x11\xc0 \xbb\x1d\xc5\x8c;O\xe3\xee\x82\x91\xf4\xa1\x98\xade\xfc\x8c\x9f\xd6h\x95\x85\x89\xb2\x7f\x91r\xac\x06#X\xd9\x9e\x8f\xb8\xab+\xfd7\xa1\xe5*\xd4\xf2\xf1\xc8P\xdd\x01\xb7\x9a\xf1\xe7\xb6\x0f\xd9N\xc4\xfb\xa5\xa0\xd6`J\x07\x16\xcax\xa2,\xbe\xfd\x01'\xf2sL\xfe\x9e\x99;\xb9`\xc4\xc2\xde\xa6>\xd6\xb1\xdc\x15\xcfj%\xc1\x08C\x0dg\xf2\x95\x0c\x02\xeat\x84\x0c\xe7\x9b\x12\xcc\xfa\x0bEF\xd4N2Nf\xfe\xe9\xe5\x0e\x1a\xbcc*$[3\xb9\x0di[]d\"\xe4\x02\x91\x1f\xe1|\xbe\xba\x03,\x8a\xb7\x9fN\xbf!\x17+rn\xd9F\xb0$\x92\x97\xc6\x1b\xe2\x06\x0e,\xc6\xc7\xba3\x06\x11\xe8n\xb75W\xaa}NR_\xc9\xc2\x1fT\x82d\x92\xab\xdb\xaa9o'\x968\x92_\xe9\x93\xc2\x93\x19\x13\xba\xcf\xc8U\xf0-s\x18\xd34u\xf1\xfe\xe5\xf4f\x91\xc9\x10\x84\xf3\xd2a\xaa\xc0 by\x0d\xeb\x91/\xb9K\xb5\x9a\xea}K\xbaI\xa6G\xaf\xc6\xf1'$g\xd6N\xec\xf4\xe6\x03\xcb\x04v\xf8\x1aw\xa3W}\x93\xa7\x9e\x9eN\\=\xac\x02\xd4a\xfbJ\x18\xd1\xe1\xdf\xc0\xad\xc8\x81\x8b+`\xa6\x8e\x92\xb5D\xc3W\xf7\xc4\x0d\xd1\x83\xcd\x95{\xcb\xfar\x12\x95\x7f\x00?\xbey\xfe\xe2\xcd\xe6\xe9\xff\xda\xbc\xff\xe1\xed\xeb\x17\xcf^~\xfb\xf2\xc5\xf3\xc7\xd6\xbf\xf6\x19\x00\x11\xb6?\xb7\xd2\x90\xa5\xa4c\xc3\xe0\xe1G\xfe?O\xef\xf4\x82\x1f\x87\xbc\x19\x81'o\x9fI.\xd6\x14*D\xa7y\x04\xa3?O\xde>{<\xfa\x97\xccP\xf3\xaf\x8f9\xee\xa4\xf0\xfc\xc5\x88\x04\xffgOc:m+'d\xa6wp{>\x8em\x12;\xab]\x8f\x86\x07\xb2p>\xa0\xf1\xcbf\xb9\x98uS\xfa>\xd6I\xafA\xaf6\xc1\xbf\x99'\"\x9f\x11\xbb\xa3\xc4\x88\xdc\x8a\x18\xd9\xb8<\xf5;\xdcnqw\xac[\xf6)\x1d3\xef\xdd\xed[\x8c\xba\xea`^|(bK\x92\xeeQ\xe5?\x857b\xd5\xcac\xa5\xfc\xf5\x179\xd9\xe9\x06\xac:.M|\xda\x11\xb4\xad\x10e\xefn\xe1J\xff\xb7\xc94+0\xd5x\xeb\x13\xdd\xcb_\x03\x98\xca\xd2\x81\x9f\xec\xb6/\x8f\xe4\x82Q.\xba\x82\xee\x80\xeb\xfd\xc1r5\x1e\xc4d\xdc\x0d\x9c\xa8\xe3\x12?V\xb3\x06?\x16ru%n\x00\x92\xdf\xb3<\xcbn\x0f\x88\x1e\x16vd4%\xef&\xcb\x85\xd3\xb5E\x12+\xb2\xc5\xf4\x84*\x07\xe2 \xf8Q5\xb6\x1f\xd0Q\x92\xd1\x85\x9e\xe0\x19\xd9\xda\xe27v$.@\x08\x8d\x0bQ\x9c\x1e\xb1\xa0/H\xc5\xbfi\x05\x1b,\xbfyp\xfa!\xaek\xb9\x0bK/t\x8a\xcb\xf2Z\x87n6\xf7}\x81\x1d\x9fwrf\xa7so\xef\x1b\x17^}J\xa1!\xfb=\xee\xe0\xb3\x0e\xdd\xa8\x8f}~ \xdf;\xaf]s#]Z\xd2>\xd8b&\xf4jMY]\xd9F\xdc\x90\xfdG|G\xd3\x91\xee7\xc1\xbb\xd3\xc2b)[X8\xc1w\x7f\xa1lA!\x80\xc0\xbd\x81\xb2\x85\x98+\xdbos\x9d\x9e \x19x&\x92\x11\xb2\xc5\xdd0([\x1ccd\x8b`\x8fl\xd1L\x92-\x9eU\xb2E\xdd?([\x02\xd7d\x0b^3a\xb6D\xeaq\xfaj\xdc\x86[\x04{G\xad\x1d&\x18n:t:\xe1\x0en\x0e\xb8\xf3\xc19\x87\xc6\x15\xe0\x07|'r%\xd2\x0cF]\xe0\xfe\x0e\xdd\xe4@\xa9\x0e[\x0b{\x1d\xddH-\xef\xc9Y'\x8f\xfc\xad\xf8\x8e\xdd\x96x\xbe-\xf3 \xb7\xb43n\x89\xa7\xdc|2\xdc\x9f\x7f\x8b=\xe7\x96\xf9\xa4[\xd4Y\xb7\x8c\xa7\xdd\xd6\x9ew[t\xe2-\xd3\x99\xb7%\xa7\xde<\xc4\xa2\xaf\xcb\xbc\x87\x93o\xf7w\xf6\xed^N\xbf\xa5\x9d\x7f\xcb~\x02.\xf6\x0c\\\xd6Sp\xf1\xe7\xe0\xa4\x19\x91t\x12\xceCk\xc1\xd5\x98\xd9N\xc3\xa5\x9f\x87\x0b\xea\xe8\xb8K1W\x9f\x89\x0bF*\xa2,\xbd\x88\x93q)\xe6`\xf2\xe98\x0f\xad\xf8k0\xe3\xfa\x97\xf1\x8c\\\xca)\xb9\xcc\xe7\xe4\x96\x9d\x94\xf3IP\xd4\xd5\x97\x0bO\xcb9\xa8\xb1\xa8k/\xf3\x9c\x98\x8b>\xf6\x15qj.\xe9\xdc\\\xe8\xee\xb3%g\xe7B4\x9d0\xf1L'\xe8\xd2\x99\x19\x7f\x8a.4\xb6\x05'\xe9\x16\x9e\xa5\xf3\xdf\xb7\x17>O\x97\xf7D]\x9e3u\xbe#\x04\xd9\xce\xd5E\x9f\xac\x8b;[\x17{\xba.Br\xd2O\xd8\xa5\x9c\xb1\xf3_`\x99\xe5\x9c]\xe2I\xbbeg\xed\x92N\xdb\x85\xb8\xee\xbf\xb42\xf0n\xfc\xa9\xbb|\xe7\xee\x82\x9dr\xae\xa0|\xa7\xef\"\xce\xdf-?\x81\xe7 \xc7\x82WTf=\x85\x17:\x87\xb7\xf0$\x9e\x83V\xf8j\xca\xf0i<\xff\xb5\x94\xbeK)s\x9f\xc9\xcb~*\xcf}./\xe7\xc9\xbc\x98\xb3y\xe9\xa7\xf3\x92\xce\xe7-8\xa1\x97zF/p\xd1\xa4\xbfw\xb1\xa7\xa6bO\xea-8\xab\x97xZ\xcf3\xdc%'\xf6\x1c\xa4\"\xae\x96\\rj\xcf#\xf2\xe1k%3\x9e\xdc\x0b^)y\x1f\xa7\xf7r\xc9b\xc2 \xbe\x943|v\xcb\x81\xd5GL\x19:\x9e\x16f\xf7\xe2\x82\x04\xef\xea!\xa9r\xea\xf0uM\xceT\"\x14/\xe1[\xd2)\x98\"\x85\x7f\x81G\x17P\xb3O\xa9gfo\xc4\xb3B\xfc\xb75\xe2\xba\xda5%B\x83\xea\xf1\xe9*3*\x84rM\xd8\xe0\xa2\xcb\x9e\xbcB\x94=#\xc7c\xcd\\\xeav\xe8*|\xf3\x0d<\xbap\xee\xb4|\x04\xdcq\xa75\x15=\xb0\x11\xf4\x81\xab\xd8G\x80Yc\x01\xf8TP4 \x1a2\x15\x1a\xael\x110\xa9\x88\xa1\xcb\x16\xc3\x00\xd9\xa2@QQ\xbc\x90-\x12\x08\x95@1\x08,\x94MR\x9c\x1e\xc6\xb1\xb5\xb85\xad\x9b@\xc5\x0cp*q\x14\x92\xd6\xed\xbe\x11x\xa8\x07\x03\xcc't\xfb-\xa2\x94T\xb5\x08u\xa9\x9b\xbb\xc7E\x8e\xa7-\xb6\x9b\x12\xb6#\xf2;\xd4\xc4\x98\xc0\x16_\xe3\x86\xcb\x81\x08n#\xc6\xc4Q\x85\xdeM}\xd7\x91\xa3\x18(j\x19\xbe\x84\x9f\x0e\xb8\xc3\x88\xc2+\xb2\x9f\\\x8f,\xfb\xe8\x92e_\x82\xc70\xfc\x8f\x98\xa1-b\xe8\xa2\xff\xbe\xf0\x01\xc7C\x0c\x0f/\xf1\xae\xe5//\x1f=\xba\xe0\xff\xf1\xe7\xcb\xaf\xc5\xff~={;,#\xefn{\xb4{\x00R\xd6\xe1\x06_\xa3\x96\x01\xbb\x15\x00x\x87\xaf\xacy!R\x98\xb6\xf10\xb4\xa7\x068P\xba\xc5\xaa\xf2\x0d4d\xcfU\x8e0\x0e\xb7\xb8\"[\xbc\x1dK\xbf\xef\xd0\x18\x98GR\xd6\xdc*m\x9e\x87)\xb7J\x97\x92\xe6\xc1\xbd;\xbc\xced[\x04\x04+%\xcdc\xe0_Y\xc0_K\xa0_\xa5\xa4yF\xc0W\n\xdc+ \xecUJ\x9a\xaf\x85x-\x00xe\x81w\xa5\x83\xbbJI\xf35\xa0\xae\x14HWf@W\x1c\x9c+#\x98+\x16\xcae\x89\xf0\x95\x92\xe6a\x00\xd7j\xf8V)i\x1e\xe8YF\xb8V\xfc+\x1f\xa1')\xfbD>\xfc\xbaA\xad\xba\xcd\x87\x8fD_\x90\xd6\xdc\x81\xa2\x06\xea+\"\xbe\xc4M\x88\x9aQ\xc1=k\xee\xd6\xa0\xfa\x89\x1e\xf2\xaf\x91\xc1u&\xfc\xdc\xa9> \x0fKJR\xba\x80^\xbay\xc0h\x12~\xa6\xfe\x86\x98Z\xea\xfc\x17\xc1\xd7\x1bD5\xc3\xc7;\x9a?\xe4\xf3?\xb90\x1a<_r\x8f\x8c\xa0\xf1\xd0\x14\x07K\x1d\x9fr\xb1L\xc9y\x07c\xab1\xe1I(9\xef\x92\xf3v>Yr\xde\xa2\x95\x9c\xf7\xbc\x95\x9cw\xc9y\xbbZ\xc9y\x97\x9cw\xc9y\x97\x9cw\xc9y\xebVr\xde%\xe7=mi\xcc+9\xef\x92\xf3.9\xef\x92\xf3.9\xefq+9\xef\x92\xf3.9\xefi+9o\xfb\x0b%\xe7]r\xde\x1fY\xce\x9b\xff\x7f\x83\xc0\xc8\xbf\x16+Q\xe5\x0e\xcd\xb4\x81\xce\x05\x8b\\\xa5N\x82\xf3\x1d\xe2\x1e\xf3\xdd\xffS\x1dbvf\xbb\xcf\xec@\xba\x9a\xdd\xb9s\xdco\xd4\x85\x11b\x08\x95<\xf9.]z\xfd\xae\x08\x9e\x92v{\xae\x98Ntk\x87:\xe2\x92\x84\xbfX\xafHx\xa2\x89\x7f\xa2\x99\xf0\x91f\xc0\xd1v\xdba\x9ar\xbfO\nO\x14\xa9\x9a5\xf8\xb1JTk\xc6\x84\xd3\xd4*)=\xe1d\xc9;\x97\xbc\xb3\xa5\xc5\x84\x08\xa1\xe4\x9dK\xde\xd9\xf9d\xc9;\x8bV\xf2\xce\xf3V\xf2\xce%\xef\xecj%\xef\\\xf2\xce%\xef\\\xf2\xce%\xef\xac[\xc9;\x97\xbc\xf3\xb4\xa51\xaf\xe4\x9dK\xde\xb9\xe4\x9dK\xde\xb9\xe4\x9d\xc7\xad\xe4\x9dK\xde\xb9\xe4\x9d\xa7\xad\xe4\x9d\xed/\x94\xbcs\xc9;\xff\x06y\xe7\xd4\x1c\xae\x8aP\x89\x13\xcb\xee4\xee3\xf9\xd4\xe8\xa8\xb2\x9c2\xf1\xf7\xd1 e\xeb\xa9d\x83\x80\xfa\xf9\xa3\xcd\xc9\x0e\x9c0\xdb\xa8+\" _\x87Y04o\x8a\xce\x9f\xa0\x13\x98\x01\xeb\xbc\x07\x03@1\x11\x14\x80\xb7\x98\x19x\x03uDY\x8fGe\xc8\xc4OZ\x03\x88\xb0\x96\xc3\x8a\x02\xf3egBN\x05g\xfbh \xd9\xb1\x1bU\x9d\x1d\x9dN\x8dtCE\x84\x085\xf0\x0f\xa4}\xa0\x08\xba\xe4\xbf\"\xc7#j\xb7\x14\xb6g\xc1\x0cO\xd7\x84\"\x87\xa7x_\xb7O\xc5\x89pii\x0d\x16T?\x93\xb5\xe3@\xf8\xd0d\xe5|\xd4P\x91\xf8q\x8e\x96\x11\xd8b\x86+\x067\x07,\xa2\x8fh\x18\xb2fE\x85Z8\xa0v\xdb`@\xb0\xaf\xaf\xb1+L\xdcO\x8c\xc8\x8a\xb8\xbe\xa9\x07!Iv2\x9e\xc5\xfa\xa9\xe4{\xc5\x15\xc6\xad\xc8\xf9X\x8a\xe0\x0fMw\xf4\xa2\xbf\xfa\xc1\x1d\xf1T)\x98\xe1~\x84~\x945\x05rf\x0f\xc8\xee\xc1\x161,/\x160x\xed\xa0\xf7\xae>b\xee\xc3\xff\xab>\xc8\xef\xfap\x87Qu\xe0[\x92\xb4\xb6\x87\xef\x8a\x0e\xe3\xdb\x9a\xd9\xa6\x90\xd5\x8bW\x96\x0e\xac\xf2\xd1<\xe0tV\xac\xbf\xe7|\x9f\xad\x10\xc3\xdb\xc7r\xc4\"}\xd3\x83ad\x1aFL\xd6\xb6\x7f\xf2R<\xe9 8z\x1f\x1a\xb2\xaf+\x17\xe3z9\xe8\xf0\x91\\\xe3-\xec:r\x14,|\xfb\xfc\xdf\x9c\x81\x04a\x98\xd4T\xd9\xad*\xed \x82\xe6\x17}B\xab\xd7\x16\xec\xd0\x91\x1b\x8bJt\xd7\x7f\x80\x94\x19\xb0\xd7\x81\x80)\xf7\xdf\x0d\xd7\x11\x8dj?h.\x1dUx\xfb\x84;N\xd9\xbe\xe6\xebvG\x16vW\xa1p\x9cB boC\x9eo\xc8\x10\xf4\xda\xa8\xdd\x11\x95\x18S\xf7\x8a\xb8\xf2b\xa4}P\x1d\x90;\xcdO\xcf\xd5AVM\xd9\xd7L\xa8\xceZ\xdd\xc4#\"\xfb\x88\x91\x8eB%\xb2\xfb\xe8\xcc\xc8\x11\xb1\xba\xf2\xe4\x8du\x07\x19\xb1<\xa07\x82M\xd5\xd4\xdc\xcc\xa0\x0c1\xef\x9as\xa2XB\xdb$D Y\"\xe6 \xa2\x97-,\xc5\xb3x\xe8\xcd\xb2\x07\x9e\x00T^LK\x10\xd5\x92\x1b\xd7\x12\x8fl\xc9\x84mY\x86n\xf1\x90\xe3\x0c\x8d\xc6\xb7\xacF\xb8\xe4\xc6\xb8$\xa2\\2\xe3\\\xd2\x90.\x89X\x17\x9f\x0c\xf7(\x98X\xb4Kf\xbcK\x14\xe2%#\xe6e-\xeae\x11\xee%\x13\xf2e \xf6\xc5CL\x9aEA\xf4\xcb\xbd\xe0_\xee\x0f\x01s/\x18\x984\x14Lv\x1cL,\x12&+\x16&\x1e\x0d\xb3\x00\x0f\xe3\xa1%\x912 \x88\x98\x8c\x98\x98tTLPG\x7f\x1e\x81\x8b\xc9\x80\x8c `c\"-\xbd\x08|L\x8a9\x98\x8c\x91\xf1\xd0\x12\xe8\x99\x08\x94Ll\xff2\"eR\xb02\x99\xd12\xcb\xf02> \xa2a\xc4\xccb\xcc\x8c\x83\x1a\xffZ\x085\x93\x0b7\x13\x0d\xfe\x88\xc0\xce$\xa1g\x02\xe9\xdcE\x08\x9a\x10Mg\xb2(\x13\x8e&\x9d\x99\xf1X\x9a\xd0\xd8\x16\xe0i\x16\"j\xbc\x90\x81\x08TM^\\M\x1ed\x8d/\x91\x98\x0d]\x13\x8d\xaf\x89C\xd8\xc4bl\"$'\x1dg\x93\x82\xb4\xf1am2\xa1m\x12\xf16\xcb\x107I\x98\x9b\x10\xd7\xbd\x8b(\xf4n<\xf6&\x1f\xfa&\xd8)\xe7\n\xca\x87\xc1\x89@\xe1,\xc7\xe18\xc8\x89(\xb0\x07\x89\x93\x19\x8b\x13B\xe3,\xc4\xe38hI\xf7\xde\x17\xe1\x08cr|\xc0\x01\x1f.'?2';6\xc7\x8d\xce\xc9\x89\xcf\x89A\xe8\xa4ct\x92P:\x0bp:\xa9H\x1d/V\xc7\x8f\x9c\x88\xc7N\xc4\xe2u\x16 v\x121;\x9e\xe1.\xc1\xed8H\x19\x98\x98\xb8%\x11\x87\xdd\xf1\x88|\xbb\xf7\xa3w\xb2\xe2w\x02\x08\x9e\xfb\xc1\xf0\xe4\x92\xc5\x04\x1cO\n\x92gj9D\xd4\x9f7\xd05\xe1\x83\xfd\xae\xfa\xf3&\xc6\xa7\xd4\x9f/u\x00\xac\xbf\x97:\x00F+u\x00J\x1d\x80\xa1e\xcd\x8f\xa6dG\x93r\xa3\xa5\x0e\xc0\xda\x8c\xe8\x82|h\x96lhz.\xb4\xd4\x01X\x93\x03M\xc9\x80f\xce\x7f\xc6e?3\xe6>c3\x9f\x16\x83\xb8\xd4\x01\x08\xe7;Wg;K\x1d\x80R\x07\xa0\xd4\x01\x80\xf8\x04\\0\x97\x99\x90\xc9\x8c9A\x9e\x92\xc5,u\x00\x96\x1c\xa5\x0fe-K\x1d\x80\x84Led\x9e2&K\x19\x97\xa3,u\x00D[\x92\x95L\xc8I\x96:\x00\x19r\x90\xc1\x0c\xe4\xd2\xfc\xa3s\xe7,u\x00f\xad\xd4\x01X\x90g\x0cg\x19Ss\x8c \x19\xc6\xe4\xfcbZv\xb1\xd4\x01H\xcb'\x96:\x00}\xbb\x8f\x1cb\x0e\x99K\xc8\x1f\xc6g\x0f\x97\xd6\x018\x92\xed\xb9\xc1\x1b\x15-\xa3\xeeR\x00\xdf\x8b\x07\xff]=7\xaa\x06\xd0\xd4T\x84\xb9%-\x1dy\xa3\xf2L\xa98\xf9\xa7\xf5VD\x15\xf3\xaf\xac\x95\xdd\xc7_WO|\xb4\xa5\x04\xacL5\x1b\xfb\x0d\xd2|\xeez\x02Q\xa1$u\x90\xb5\x1d\xdfM\xa0\x86j}G\x0d\x7f\xc57u\xf8\xea\xec>\xec\xdbw\xac\xe2s\xd9\xd23\x9d\x16\x19\xf0\xf6r$\x1e\xffe\x8f1\x8dd\xaf\x8f[q]\xab\x04^\x86_\xe9\xbc\x0b\x0e\x07\xc4.\xf7\xb3G\xc3\xf1\xaf\x89\x9c\x89,\xc8t5\xca\xc0\xb7*\x03\x80\xebn\xe8\xa5\x85\xa0\xa64\xb63\"\x90\x08\xe3\xf5\xb9\x1c\x8c0Y\xe7\x93g\xde\xbc~\xd6\xe3\x11\xa6\xbf\x05\x98Z`\x0b\x93_\x0bl!$\xd8C+\xb0\x85\x02[\xb0\xb7\x02[\x10\xad\xc0\x16\xe6\xad\xc0\x16\nl\xc1\xd5\nl\xa1\xc0\x16\nl!\xe8\xf7\x15\xd8B\x81-\xe8V`\x0b\x05\xb6`o\x05\xb6P`\x0b\xa2\x15\xd8B\x81-\x14\xd8\xc2\xb4\x15\xd8B\x81-\x14\xd8\xc2\xb4\x15\xd8\x82\xfd\x85\x02[(\xb0\x85\xdf\x00\xb6\xe0\xbb6_e9[\xcf\xed\xf9\x93\xcc\xad\xf1\x86\xcc\x89JM\xd5_\x9f\x8f\x86H\x86%3<\xcf$\x1b@\x06x\x85\xd15W\x04\"z&#.\xb3:\x1c;\xccT\x99i\xbe\xf5%\xe0#\x00\xe4e\xfe\xbf(\xd4\x86n\xc3m\xfe;\xd4P\xb3\xbb\x96hJ*\x04d\xa8\xd5\xac\x07.\xcb5?\xfc\xabPv\xb2z\xf6\xdf\xdc\xc8\x10#\xc6\xf1^\x91z\xa6)\xbd\xe5\x84\xc6WG\xf4\xdc\x15\x1f\x91kV,R\x11R\x1bdX\xa8\x05\xd6\x9d)w\xe8?\xe0\xae\xc5M\x7fIA\x8bo\xd98\xcf_S\x10\xc5\xaf/\xe1\xa5\"'L\x103\xccE\x19\xe9\xf8\xfa\x97%\xea\x85q\xa1*\x83\x8f)|\x12\x1a\xce\x9b\xd7\xcfD\xc4RE:t\xb0\xac\xc1{T\xdd\xa9\xc1\x1a\x9b\xb4\xc8\xd5u\xa7\x8a\x8b\xe2P\xc9\x1dZr#\x07\xff\xf2\xe93\xa1\x04kF\x81+\xc5\x0e\x9f\x1aT\x89\xb0\xdb@\xe43\x11\xeb{\xfc\xf0\xe1\xbef\x87\xf3\x95X\x9bj>\xeb\xab\xea\xc1\x9e<\xbcj\xc8\xd5\xc3/\xab\xff\xfe\xdf\xbf@_~\x89\xffy\xf7\xcfU\xf5O_\xef\xfe\xf2\xe5\xd5\xd7_\xfeS\x85\xfe\xf9\xcf\x08\xfd\xd3\xd7\x15~\xf4\xe8\x8b\xbf|\xf1\xc5\xa3\x87bA\xf3W\x1fV\xa4\xc3\x0fe\x99\xee\x87\xd7\x8f\x1e\n\xd1\x93\xeb\xfd\xbf\xbd\xfa\xfa\xcf\xda\xd2\x1f\xa1q\xec|QO~\xb4\xa8\x1c\x97\x9c'\xa5\xc0\x03\xc1I\x05F @\x9bd\x8b\x80U\xd8\x19\xbd\x1c^\xe1\x98\xb8\xc9\xb3&\xccB\xff\xad\xe0'&\xbf\x16\xfcDH\x82\x87V\xf0\x13\x05?ao\x05?!Z\xc1O\xcc[\xc1O\x14\xfc\x84\xab\x15\xfcD\xc1O\x14\xfcD\xc1O\x14\xfc\x84n\x05?Q\xf0\x13\xd3\x96\xc6\xbc\x82\x9f(\xf8\x89\x82\x9f(\xf8\x89\x82\x9f\x18\xb7\x82\x9f(\xf8\x89\x82\x9f\x98\xb6\x82\x9f\xb0\xbfP\xf0\x13\x05?\xf1\x91\xe1'\x8c,\xbeA\xc7\x87\x9f\x98\xe5\xc6\xb1\x0ei\xc9\x14y\x7fk6\x17\x13>i\x1d\xfe\xe5\x8c\xe98u\"\xb6\xc4\x9a\xea$\xa5\"wn\xb7\xb8S2 \xb2\xf8S<\x80\xc8\xcb\x90n\x14\xfe\xab\xdb\xc7\xd3l\xc9\x80\x88`\xdd9\x00\x88\x80q*\xaf\xaf$`\x07J\x18\x11l\xfe\xe3t\x02\x9f\xb4w\xf2\x9dY\xfam\x9ep\x9b\xa7\xd8\xac\xbdsG<\x96&\xce&+\xc7\x9e*[\x92\x1c\x9b'\xc1\x16\xa5\xbd<\xe9\xad\x85 \xad\x85),3U5\x91\x16\x93zr\x9ajQbj\x92\x80\x1a3e\x94\x8aZ\x92|\x9a$\x99\xc6\xd4M\xe2K\x13L\xeeD\xd2\x92\xd4\x91=E\xb4\")\x14\x95\x06\x8aK\xf7,L\xf0,M\xe9\xd8R7Y\x925\xf9\xd23Y\x122\xfe\x14\xcc\xb2\xa4\x0b\xb8\x92+\xe9\xe9\x14O\xdadi\xa2dH\x88\xccV\x8bI~E2di\xfa\xc3\x9a\xe6X\x90\xd8\x98\xa42\xac\xfb\x9f5]\xe1\xde\x14\x17\xa6$\x86\xd4\xc3t\xe2>q\x7foY\xa2\xc1\x92TP\xf4\xfa\xd4\xc2\xcad\xc2\x8a\xf4\x81-U\xb0\"9`I\x04,\x0d\xfd;\xe3\xd5\x96\xf0\xbe7\xa0?\x8e(\xc5\x05\xed\xc7\xef\xfcm:\x96\xe4P|h0\xbep\xbb\xbd\xff\xde\x90zd\x10\xdd\x0c\xe7\xd9\x02\xe5\xebB\xe3\xcb\x82\xe1\x83\x1b\xbc\"\xe0\xed\x0cq\xdb\x83\xda\xae0\xf6\x8c\x1b1\xa1j_p\xda\x0cG/\x0c@\x07B\xceqAfoXy\x12\x81\x1d\x91\x9f\xfc\xe6\x0b\x0f/\x0f\x08\xcf:\xa0\xfe\xb5(\xcck\x0b\xe9\xae \xe2N\x02\xb6KC\xb4\xb3p\xec\x8a\x00\xec\xc8\xc2\xb6\x85W\xcd\x98\x8f\x19B]\x1f4]\x1e&5B\xa2\x8b\x82\xa0\xd6\x80g8\xc4\xe9\x0djF\x841C\x81\xcbQ\x14oL=64\xe4\x0eGF\x04 \x03!\xc7\xbe{+\xc2\x8a#qZ\x114\x9c\x06\x08\x97\x85\x04\xa7\xe1\xbf<\x01\xbfe3\xe7\x0d\xea\xf9\xc2x\\q\xee\xbbSu\xb9G\x0c\xdf\xa0\xbb\xcb\xee\xdc\xb2\xfa\x88/_\x0c\xc8\xf6\x88\x08\xd3\x04\x07o1\xaf\xc7\xb8wf\xc5\xbb\xdbp\xee3|\xbb\x85\xf6\x0c\xcf\xce,8\xf6\x19~}6,\xd9\\xu\xe6\xc0\xa9[] \xd9B\x10\xa2La5\xd9|8\xf4 9\"7\xdf\xf5W\x86(G\xb4\x98\x05\xb7\xbc4h)[\x00j\xeb\xc4'G\xe0\x92m\xf0\xb8\xb8\x90\xa6\xfb\xfd\xbf\xd9\xc7\x9e\x1c\xe4\x94-n\xf0a|\xb1o\xa4\x11x\xe2\xc8\x10\xa8ls\\\xa3\x1b7\xbc.(*\xdb\xb2\xd0\xa8lS\x9c\xd0\x8a0\xa9l\x01<\xb0\x0f\x07\xec\xc7\xff:\xb8\x17\x13D\x95-\x8c\xf3\x9d\xe3{\x17\x86Ue\x8b\xc2\xf3\xc6\x85Xe\x8b\xc0\xefZ\x01\xaf\x96\xcfZ\x9f\x0b\xe3s\x97\x87aesto\xf4\xb7l\x81Y\xd92\x86ge\xcb\x16\xa4\x95-W\xa8V67\x1ev\x0e\xd5\x9b\xe3_\xd7\x87pe\xcb\x12\xc8\x95-_8W\xb6pPW\xb6\x08\xbcjD\x80w\xf4`\x00\x9fj\x81l\xda\xbe\x1a\x1b>\x0c\xe1P#\xc2\xbf\xea\xc1\x18\xdc\xe9\xa4\xf3\xb9\x02\xc2\xb2e\x0c\x0b\xcb\x96'8,[\x9e\x10\xb1lk\xe6;\x02\x03\x1a\xc6~r\x95O\xef\x8e\xa7\x03i\xef.\xf1\x89T\x07z\xa9j9]\xbe\xe0\xff|\xd9\xeeHt\x04\xb9\x8ft\xfa\xc3\xc8\x13?exK\x16\xd8\x92\x81S\xe8\xf0\x0ew\xb8\xad\xb0\x9c\x8d\x9a\xc2 u\xac\xae\xb8\xf6\x01V\x1fq\x1f8\xa1\x0cul\xc3\xff\x14 \x0e\xd9\"\x86\x1f\xf0\xe7\xed\x1d\x1a9N\x03q\x8d>\x15\xff\x8d\x98\x12&\xfd\x97N\xea\x05\xc0\"\xb0UW\x1f\xe8\xc8\xb6x\xb9\x9bP\xd2\xc8\x893;w\xf8B\xae\x1e\xcep)\xd8-a2\"\x00\xe7\x96\xd5\xcd\xc4\xa7\x11\x94L\xea\"\xda\xaf\xfe\xbdU\x12\x912\x05#\xcc\xae&0\x1ao\xdd\xc2\x15f7\x18\xb7\xaa\x9bj\x88\xc3k/[ \xdd\x96\xf3\x81t\"+\xd0\x8a-\x1c\x1f\xd0u\xcd\x9d{\x11\x08:bv1|@\x06n\x0d\x1aW\x18\xf6\x1dFLG \xc4\x1a=\x08}\xdf\xd7\x03\xbajH\xf5a4b\xde\xf4:\xe8\xe1\xc4-i\x1f\xfc'\xee\x88~H\xc5u6\xa2\xf7\x91r2\xbe*\xcc-##\xda\x9am\x1a\xe5,\xff\xd8\x9e\x8fW\xb8\x131\xb8\xbaU\x81\x90\x1b\xd2m\xe9\x859\x8f\x07r\x03Gn2\xf3\xe1Q\xa1&\x07\xf9\xfa\x94\xb3\x1co?\x1d\xc9\x15\xdf\xc1\xa5\xe0\xf1_\xe1\xb3QW\xbey\xf4\xb9,\x14\xb6\xab[\xae!G\x97`\xb1\xfeM\xc9\xd1\x9b\x03\xa1X\xfe\xb7\x96\xd1\xd9\\\xf4*\xc1\xba@\xac\xac\xde\xdc\xeb\xeat}j\x12\x7f\x10?HA\x9e`\xd0\x05kM\xb6p\xc9\xed\xaeQ#\xf3\x0b\xfa_\x9c\x1b\x9f\xb9>6\x9aBg\x8f\xfe\xb1\x97\xfb\xff\x80\x9f\x0e\xb85fV\xac\xa5\x8b\x1e\xe2N\xf1\x08\xafK\xa2\xc8\x7f#\xcd\x0d\xcfg\xa5\x01KZ{\xf4\xc5\x05<\xfa\xfa?\xaco?\n\xbf\xfd\xf5\x05|\xf9\x85\xfd\xed/\x83o\x7f\xf9\xc5\x05|\xe9\xf8\xf6W\xe1\xb7\xbf\xbe\x80\xaf\x1c\xdf\xfes\xf0m\xce\xfa\xafl\xdf\xfe\xd3\x9f\xd87_\xfd\xe5O\x7f\nS\xf8\xfa\x02\xfe\xfc\x85N\x18I\x91\xaa\x08\xdf\xe3\xdb\xbd\x94-\xbc\x9d\xaa\xc9+B\x1a\x8cZ\xbb6\x1c\xed\xdcvz\xd2\xaaRT\x941]\xb7\xdb\xbaB\x0cS\xb89`\x15\x95\xaf\xe9\x94\x94RO|\x1b\x92\xeb\xed\x0e3\x9f\x92\x97\xe7r\"\xd5\xfcxsU\xc5\x0e\x83\xca]\x1d\xfdQ{\xacd\xb7\xfa\xdb\xc8$S\xefNGdN\x9db\xcf%|\xf6\xceKJ2A8\xf3r\x07\x96\x91\x1a\xfb4\xf4;\xa4\xe4:e\xdd\xb9b\xb6\x90\xf8\x161\x04{\xc2]\x96\xbaezCE\xeakz\xcb\xbe\xba\x13\x0f\xdf>\x94\xb6\xb9*\xfbz\xe9\xb1\xda\xc5\xc1\xa3gr\xf4\xa23\xba\xc2c\xb4\x15\xbf\xc6R\xf2\xf6Jt\x87r\xe6$\xf7I\x92\xbb_p\x88\xcd{1 \x85\xe1!\xab=\x19\xd9l\x16S\xb0#n\xebI\xb6Pr*\x93\x9f#\xdb:ogF\xae7\xe1\xe6_\x9a\xfa\x016\xffG=\x199\x89\x96\x9b{\x17zD\xb2\xe5\xf0\x8bd[\xee\x1d\xc9\x16\xf4\x91ds\xac\x7f\xd9\"$\xd0v\xc1rH\xfa\xb2yP\xb2\xa5\xfbQ\xb2-\xf7\xa6d\xcb\xe5S\xc96\xf7\xacd\x0b\xfbW\xb2E\xcc\xd5Rm\xb1\xd6\xef\xb2\xaec\x1b\xf4`\xa57&\xdbJ\x9fl\xde+\xe1\xa3M<\xb3\xc0\xa7\"\xfd\xb3\x19A\xd2b\x17sV\xf9j\xb2\xad\xf1\xd8f\xc4l\x1e\x9clk\xfc8\xfb\xb2\x10\xdd\xb2\x01AV\xfat3z\x13\x1fO\xb6\x95\x9e\xde\\\xb3\xa3\xea\x83\xc5\xdf\x93m\x95\xd77\xa3\xf6\xd5\x97\x17s\xdfO\xb6u\x1e\xe0\x84\xc6\"?pBc\x9178\xa1\xb1\xc8'\x9c\xd0X\xe4\x19\x9a4\x16\xfa\x87\xb2I!u{\x89\xb2\xd9}E\xd9B\xf6\x8d\xfd\x0b\x8b\xfcF\x83\xa0\xcf{\x94-\xc6\x87\x94-b+\xb3\x99\x1d6\xafR\xb6\x15\xbe\xa5\x8b\xd6\xdc\xc3\x94m\xa5\x9f)\x9bo\nW\xfa\x9c\xb2\xc5{\x9e\xf2\"\x82\xcb+D\xf1\xa5\xbc\xe1A{y\xaf\xd1\x1e\xbf\x91\xe5;\xa2=\xbb\x0f\xf8.\xd2\xc7t\x1f\xe9\x1d\xf1\xe3\x03\xbe\x93|\x90\x89\xeb\x0e\xb3s\xd7\n\x90+\xc8\xfe\xa9\x8b\x04Z|\xcb6\xfcaa\x81\xefG5u\xc5\xb0\xe4\xcd,\xea\x82\x90\x13\xdac8\x12\xee\xf8\x08\xd4\xa7\x80\x88^\xc2\x8f*\xa4\xcaw+\xb2\xdbq\xab\x80t\xbc\x0b\x06\xb1\x01\x9eN\x87\x05 \x1f\x8e\x1c\xf9\xd9\x93\x88\x18\x8d]uA\x0c\xbf=\x1fqWW\xfaoB\x1c\xb8Up\x85\x15X\x92\xdb;\x8aY\xe7\xb6\x07\xbb\x8eR:\x82T\x83)\x1dF-\x0d\xd73\xe5\xdc\xf9\x80},\xb0\xa6w\x0c\x164\xf5\xb1\xce\xc1\x81\xd1\xea\x16D{?\x8d0\xd4(\xc7\x81wO\x83\xa5\xa5\xcfeJ\x06\x93W_\x9c\x9bQ\xa0@b\x13\x87?\xbc\xdcA\x83wL\x81Tku9\x8cF\xa2\x08\x0c\xb5\x14:\xf9\x01\xce\x8a\xab;\xc0\xa8:\x00:\x9d\xfa\xc8\x19\xd7\xb3\x1b\xd1\xb7\xa4P\xdf866\x10\x19\xccQQ\xbf\x06\x04$W\xe9\xe9\xfeT\x81\x1a\x9dxp6/u[5\xe7\xed8\xd4,\xbf\xd0\x1f\xd5\x98pR\xc4Z\x0c\x844\xdf\xbcNh_\xb7\xcaOn\xe1\xfd\xcbq``\xd2a\x91\x8b\xe80Un\xab\x10\xc6Az\xb9\x80^*\xf1\xab\xf7\xad\xb8k\x87?2^\xe6&y\xc9\x03\xcd\xe2\x8e\xdbDt\x96p\x8ag\xaf\"0em=\xc8\x10\xea\xb0C\x8e8U\xdcN\n[\x89\x10\xc0\xa4\x9c\x82\xf5^\x97Of\x1d\xebW\xb8F\x19\xbc%G\xadf\xe7\x08\x82o \x01J\x8ex\xd3\x97q\xb2\xa2T\x0cUmN\x9c T\x91p0\xb5\x85\xf6\x9d0_\xac\xf5R\xeaA\x18\xdc\xf6}\xf3\xfa\x99.\xe2\xa4\xbbL%\xc8I\xeb\x10Ej\xf8\xee%\xbc\xb8}\x1c\xb1\xb5$F\x0d\xb5\x8a\x8fT2\x91\x1bL\xbfq(-\xd3\xef!pB\x94\xca3\x1a\x06\x97.\xe5\xef\x06\x01yqXhk\xd1wO]iP|m\xdea2B\xf6\x1fI\xa7\x17x\x1f\x80\xb2\xea\x978\xed:\x9d\xf2\x9e\x9c\x9cp\xbbN5NK\xecF\xc37\x16\xbeA\xef\x06\x89\x95u!n\xaaR\x87e\xa8\xa8\xe8%\xcd\x0f\x11\xdf\xb9\xa9Um!\xfbd\x982\xe1\x95E\xf5H/\x8c7\x82y\x83)W\x91N>$\x10D\x13\xd9\x15\x06\xac\xd81\xcdQ\xf5\x0by\xbc(\xd5\x97f\xab\xb2\xc3',\xd0\xe4OQ\xd7\xb3\xcc\xbd.\x15\x19!\x19\xd3%i\xae\x11\xbd:\x9e\x91\xba\x8d^\x15[\xdc\x92\xa3W2\xd0\x91\xcf\x99\xe7\x11\xfb|\xf0^(\xfbQ\xdc\xb7F>\xe0V\x81\xfc\xe4G\xb5\x96\xe1\x8e,\xf7\xfa\xc5gzV\xfe\xf0\xe3\xbb\x17\x8f\x85\xbb$\x7fP\xf8\xbfZ\x9cUx\xd9jS\xb9?\xdf1\x82pI\x90\xa6\xa2D\xeb}\x8b\xd8\xb9\xc3\xb4\xaf\xed\xc67\xe2=\xd9\x13\x01\x9c\x1a\xe5O\xf6\xe8x\xec\x19\xf9\x145\xa8\xadp\xf7\x8e<#m\x85[&\xce\x00\xbc&\xa4yU\xb7\x1f\xa2Y|\xa5\xc8lN\x844\x9bz\x96\xd2\x8bY\x87U\xb3\xfcm\xfb\xc6\xe6\x1f\x9c1s\xdc\xb8k04\xfc\xaf:\xc6\xad\xff\xfa\xc9d\x88\xc0;)gT\xbfW\x19\xd4\xa1\xa9\x7f9\xd7\xdb\x9a\xdd\x89\x07\xd5iUAY\xed\xf3\x8a\xde\x10L\x13G\xdd\xb8\xe79\xfa\x02#p\xac\xf7\x9d\xb0i\x88\xf1\xad\xe1p\xe7\xb9i\xa0C\xed\xbe\xef\xa2\xa7\x1fp\"T@\xfd\xf4\xb3O&\x9fS\x962\xef\xa8\xd4\xe8\x08\x8e\xe8\xb6>\x9e\x8f\xc2\xcem1T\x8dx\xf2B\x8d]\xfdS\x7fz\x80\xb5\xfa\xa9\x8c\xbe\xea\x96\xcb\xef\xc5\xd0k\xd2\xbe\xc1\x15\xe9\xb64]\x12\x19\xd9\x98\xfc\x90\xb2\xc5;v\xcfY5\xf7R0\xc9y=\xfb\xf3\xdc\xb5\xb7-\x8e\xe5\xf4|\xd1\xeeu\x8bfDj\xbc\x80d\xcb\xb1\x8cF\x04e\x15\xb0Id:\xdb\x92\x92-ea\xc9\x96ay\x8d\xe8i\"\x13f\xa6-\xb5\xb9\xa53]f\xc6q\xb9F\x800\x05}\xda\xcfoOR\x86v\x07\xae|2t\x93:\x17\xf5kn\xa1\xc7/e!\xf0U\x87E\x077;j=\xbc\xe9L{\xc7\xfa\xb6\x9d\x02\xa4\xda>\xf0+\x89w\xc8\x1e\x82\x90\xa4{\xed\"\xf0\xdaF\xb0\x92vh\xbdd\xb4\x95\xc0a/\xc1J\x9biF\xcctE\xac\x19\xfd\x15\xb6\xd3\x8c\x96\xc5\x96\x82E\xf6\x14d\xb0\xa9,\x82\xe3\xb0\xab`\x89m\x05`\xcf\xbf\xad\xb1\xb1\x0c2#k\xcb\xf8\xbb\xdf\xe4\x92z\n5\xd5\x8b\xdb\x9aq\xc1\xe4*\x9e~\xdb\x91\xe3\xdb\x03\xeap\xba\xa6\x12{\x02\xdd\x90\xf3,\\R\xac1\xdd\xd6l~K\xad\xb1\xc0\xf4\xff\x9f\xa4n\xf9\xf4\xff@\xde\xde\xa0S\x99\xfb?\xd4\xdc\x8b\xe7\xc4\x94\xda\xe6\xa6\xe7A\xa4\x88,\x14\x0e\xd1\x01\xfe\xfdM0\x9aZ$\xe9c\x95$\x9f\x88L,\x9c\x97[n\xe3\xf0\x9d\x84\x9b\xc1\xc9\xe22\xb7O\xd3\xe3\xbe\x9e\xde\xfep>\xf2N\xa6\x8bq{>\x8a\xee\xcc,\xf0\x15\x9d\xe1=\xf9\xf5][f\xad\xfd\xe8\x14~\xbf\xad\x9b\xb1\xea\xa3\xbb\xe6c\xbe\x8a\x8f\xd9\xea=:\xab=\xb2\xe5\xb5\x1esUz\xf4\xd7y\\T\xe51o\x8dGg\x85\xc7\xbc\xf5\x1d\x1d\xd5\x1dW\xd6v\x9c\xb1\x9bY*;\xe6\xad\xeb\xb8\xb2\xaac\xe6\x9a\x8e+*:\xe6\xae\xe7\x98\xad\x9ac\xdeZ\x8e\xd9*9\x86\xeb8f\xab\xe2\xe8\xaa\xe1\xb8\xa6\x82\xa3\xb5b#[S\xafQ.\xb61A{\xb5\xc6\x95\xb5\x1a\xd7Uj\xb4\x00\xf2\x17\xd6e\xb4Tet\xee\xd4\xce\x8a\x8c\xfe-|a5F\xeb\xd5/\xa0'\xf8\x93\xf0\xb73\xd7a\x9cWa\xccP\x831k\x05\xc6\xe9n\xbc\xb2\xfa\xa2b\xb4IqM\xbdEo\xc1AG\xad\xc5`\xa5\xc5y\xd9\xb3\xf8*\x8b\xf3w\xfff\x1b\xeb\xa2\xfa\x8a1\x83\x0d\xd5Vt\x8f-XW1\xa1\xaa\xe2\xb4\x16\x9d\xab\xa2\xe2\xfaz\x8a\xcb\xab)\x8ek`\xad\xac\xa4\xe8\xad\xa3\xe8\xae\xa2\xe8\xab\xa1h\xe5Vl\xfd\xc4P\xf5\xc4i\xed\xc4\x15\x95\x13#\xea&\xc6WM\x0c\xd6L\xb4\x94$\x9c}\xce\xf2L\xa8V\xe2\xbaJ\x89\xd6N\x19\x7f\xc9Z#1s\x85\xc4\xac\xf5\x11sVGt\xd5F\x9c\x16\x9c\x9b\xd6E\xccS\x151[M\xc4\xbc\x15\x11\xe3\xea!\x06\xab!\xaa\xe8C\xa8\x16\xa2z\xcc[ qV\x07q\xfe\xb5\xd8\x9ax\xfe\x1a\x88\x91\x15\x10#\xea\x1f\x8e\xba\x9c\xb3\xf6a\xe6\xca\x87\xf9\xea\x1e\xe6\xabz\xb8|v\x83\x15\x0fC\xf5\x0e\xff\x16\x8eK\xa6G$ \x99\xc1\xecK<\xb2\xc4#K\xe7l\xad\xb8\x95\xf9\x18N\xc2\xc9\xeb\xb5\x17j\x18\xeeZ\xc4\xeak\xb1g\xdd><\x11\xd2Hg\xb5\xfb4\x1c\xd4\xe4f\xc8\xa2\xc0\xe6F<\xd7\xf7\x9aE\x03\xa8\x97\x81M\xad@\xd3\xbc\x08hVn\x00\x17-[\x04\xb6\xdc\x00\x9e)\x1a[n\x00_\x1e\x99]\x1d\x9b\xcd\x1e\x9d]\x15\x9f\xcd\x1f\xa1\xcd\x18\xa3\xcd\x1d\xa5\xcd\x18\xa7\x8d\x89\xd4f\x8c\xd5\x96\x1b\xc0#\xa3\xb8k\xe3\xb83r\xe5\x06\xf0r\x03xt\xbcw\x1e\xf1]\x1d\xf3\x1d\xd1b\xe5\x06p\xeb\xd8\x17E\x84c\x07\x1f\x8a\n\x97\x1b\xc0\xcb\x0d\xe0\xc1\x98q\xb9\x01<\x14E^\x1bG.7\x80\x97\x1b\xc0\xd3\xa2\xcb\xb9\xe3\xcb\xb1\x11\xe6\x88\x18st\x949.\xce\\n\x00/7\x80\xaf\x9a\xef`\xfc9\x1c\x81\x1ev\x8a\xa1\x18\xf7\xb0\x93\x8e\x9c \xa3J\xb8.\xe5\xc0\x84\xde6\xab\xbeK\xfd\xa0nX\xe8\xe9Xc\xb4\xf6\x08\xed\xbcd7\xac\xc7\xda\xcc\xae\x11\x0b\xd0\xe0\xe6P7\x0e\xa8\x81\xa0\xcdG\xa3\xfcF$\xe4\x8b\xd3\xaa\xc9\xf6\x12^{:\x81,\xf7\xf7\x99\x1d\x9b\x7f\x0c\xb1\xe1\"@V\x1f\xb1\xd0p\"\x9e\xe7\x1a\x1b\xda\xa3\xba\x05\xd2Vx\x96O\x02\xa3\xf7\xf3OuxW7\x0d\xde^pu\x88\xdb\xadJ\xf4\xf2\x8dJ\xa6'\x87\x9b;EXc\x8fY\xff\xce\x8c\xd8\x16\xd5\xcd\xdd8\x82:tx\xc3\xc8L\xca&\xb7&;^\x13\x11\x19\xe1w\nOD\x8c\xa5\xc37\xa8\xdbJ\xb0\xc1\xf00\xf7\x85\xe7\x11\\\x818\xaa\xa9\xf0Jj\xbc\x85\xeb\x1aAC\xaa\x0f\xb0U\xd1\x08 \x1dW\xe4\x9c\xd5\x94\xa1\xe3\x14\x18\xe2X\xd3\xe0Y\xd7 \x90\x07\xd5\x87\x8d\xf0\x84&\xa7\xdf\x87\xe6\xf2pe{E\xaa\x0fr\xcfWa)\x89O\xe1\xebYt_\xd0\xbe\x80\xa7w\xfcA\x1dY\x81\xff\xb2\xd2\x92\x0f\xbd\xab\x8f6 \x82G\xe7\xf0\x86\xdb\xb3\xf5\x1e]\x80\x07\xf0\xf4N\x7f\xd8\xf9\x80\xe3\xa3\xfc\xc7\x1f\x08\xef\x95\xf3\xcd\xef:bA\xe9\x80\x0e\xa6?\xf6\x7f\xdd\x1fU\x91m\xccb\xd3\xe1eF\x0ex\xe0\xb6\\\x04\xd5L'\xca\x86k\x81\x18\xb8\xc2\"\xe2o\x08\x17e\xa8cr)\x1b$\xe7\x92\xba\xec\xca\xe2\x90\x1c\x89\xcdo\x08H\xaa\xf1 sjdG\xdd\xc8\xc0NC\x88@\xa5\xccbH\xb2 fX\xa6E\x8fwA\xf7C;\no\xbd|\x0fW\xac\xaa)\xe1\x1d\xa2R[5\xa4\xdd\xe3n`=;8fJd\xf6\xfbzw\xd6G4\x91\xcb\xe1\xd3\xd2z\x14\x18\xab\x96\x08lD[7\\5\xb5\x131\xb1\x7fS\xaeb\xfb\xd7~\x1e\xaf\xe2\x9f\xe7\xb2\xd1k\xa7\x05\x0c\xd6\x96\xc3\x161\xfc\x80\xd9\xd7c\xcc$\xbc\xd3}\xe8g\xe1J\xf3_\x888\xff\x83\x00YM\x18l\xa3\xd5\xf3\xd7\xce\x90\xe1S\xd1\\\xef9l\xa3\xf7\xf3\xa0\x01\x7fv|R(\x02\x91 \x19$\x8a\x99#\x1e\xc0V\xbc#\xbd\xd7\x80\xb7\xd3\xd9\n\xf1R_\xfc\xa7\xe2\xf7B\xb5\xcb\x98\xda\x80\xb5\xfae\xdc\x9b\xf3\xc9\xa2\xe4\xb6\xf5n\x87y\x97\xa0\xd2\xc4\xa8ep\x13\x01\x16\xd9\xc31{)T\x1a\x94\xaaa\x92\x17\xb0\xc5'\xdcnm\x12\xa5\x80{\xb3\xbf\x8f\xd4\xe9\x98)\x15\xa9\xdb\xd9&i3\xa9e\xb3\xde\x94\xed\xdd\x8a\xfd\x9b\xb1G\xb7\x06W\x8f\xfbJ\xf8\xc0\xab!1X\xe1\xe3Zh\xadqv-\xe4\\\x97\xc3\xc7\xf9\xc1fs\x9byB(\xb4\xc3\"\xa3\xf9\xaa\xefd\xa7~\x14\x1b\xae\xc0\x81^a\xdc\xa7m\xf63o\x86\xb7g\xa85-\xe4\xe3\xb9a\xf5I\\\xe6]\xab\xadn\xac\x1b\x84\xce\xda\xf0\xa5\xb0\xc0\x0bs\xe9R5\xda\x81\xb6\x1e_\xdf3\x81\xf3\xeb-\x82\xd1\xeb\xed\xf9\xb8\x11\xbe \xdd\x9cP\xbd\xdd\x90k\xdc-\xe8\x9b\xcfC\xb4\xc8\xa1\xed\xab\xba\xd7CvE\xce\x8f|n4\x98\x19=\x95C\x9a\xcbNE\xb8\xf0\xf1m\x82\x7fb\xf4\xb3t)T7\xee\x7f\xc8\xa3\xcf\xcd\xc7j\x19\xa5\xc8\x02s\x19\xf4\x8d\xcar2\x005\x1dF\xdb\xb1~3<\x96MQ\x8c\x7f\xef\x8aq&\x0d\xc2\x0c\xb7\xaa?\xd3\xd5\x9d\x0b\x96\x8f\xad\xdf\xe9\x00\x06j\x95\x98H\xda\x94\x11\xde_\xce\xc6\x818\x85;i\x150\x02\x1d\xae\xeaS\xcd\xd92\xa2ws\x98`\xca(b5\xdd\xddA\x85;q\x9c\xc7\xb0H\xe0Yo8\xa9\xf0\x88F\xc6\x0e\x0f\x8dh\xa1\x8e\x9c%\xc4i\xfc\x8d\xde\xb0\xe7\x06\x92\x9c5\x04\xfb\xfaZ{2||\xdc\\2-2\xc5d\x19\x10\xd4\xdfWG9Xu\xd0/\xb6#\xcb\xdd\x060P\x84^\xcf\xa1\x05\x06\xac`\xa7\x80\xe1:U:\xbc\x1d\x1fe/\xb0\x82\x02+\xd0o\xb8\xe7P~R%\xe4k}t\xa5\xc7\x17\xd5\xed$g\xaf@?F(\xcd V\x91N>(@I\x9d\x1cI\x8f\x13\xe2;\x9f\xf0K\xcca\x8e\xc6\xa6\x9f|K\x8eC\xa7\xac\x10\xcb\x0e\x9f\xb0\x00\xaa?E]\xcfY\x070m\x0f\x90\xcf\x0d\xe3\x0bEP \x18E\x81\x8c\x91\x14X\x17M\x01w\x1e\xd5;\x17>IY\x17n\xb1\x10\x9cM\x82\x1b\xb2\xe7\xedt8{\x9b3 \x03\xbe\xa0\x0c\xac\x0c\xccX\xc817L/\x04\xd2\xf3@\xf4\xbc\x0c\x0dAJbX\xbe0h\xe3\xe3\xa7\x8d\x05\xf9B9\x10\n\xe7@\xa6\x90\x0e\x04\xf9\x973\xb4\x03\xee\xf0\x0ed\x08\xf1L\xc8\xd9\x81xN\x18\x9e\x05kb\xf3\xdc\xc0\x853qn\x96~\x8c\xc92X\xb3\x1b]\xe2y-\xb4P\x16{w3Jk\\\xbc\x191\x17\xa6$\xde\xef\x03\x8f\xb1\x95-p\x04I\xc1#\xf0@\xec\x82\x1e\x8e]\x17.\x0c&A0\xa0\x041}J@\x18\xac\x0c0M\xa89\x00uN8\x9d\x07L\x97s\x90+\x82O\xee\x91\xcc t\x16\x9c\x93\x1f>WT\xda\x1fN\xa5e\x08g\x81\x97\x95\x19\xc2Z\x06\xb5 8.O\x94\xcb 8\xd9\xf3\xd3\x82^\x8a\x84d\xac\x1c\xb7t\x8az`\x90\x18X\x7f\x9d\x89\xf4\xc7_>\xf7\xc5\xcb~\xc2\xf5\xfe\xc0\xd2\"e\x0b\x8b\x81\xde\x88Om\xc4\x88\x9d\xef;;Z\x0e\x01\x8f7\xd4r\x08xJ\xae\x1c\x02^\x13\x1b,\x87\x80\xc7-\x18+\xf4\xc7\x80r\xc6\x0b\xcb!\xe0r\x08xA4\xd1Jm\x0e\xe8\x92\xad\x1c\x02\xf6\xc6\x16\xbd\xd1\xc5p|\xd1\x1ba\x0c28\x1ce\x8c\x9b\x84|\x91\xc6r\x08xA\xd4q\xbe\xe6\xca!`\xa3\x95\xb3n\xf9\\\xf8{8\xebV\x0e\x01\x87\xe2\x941\x91\xca\xa8\xbe%\x9e\x88\xcd\x1b\xb1,\x87\x80G\xad\x1c\x02.\x8a\xb1\x1c\x02\x0eF:G\xb4\xee\xe1\x10\xf0\xfbS\xc5\x85f/\x05\xc6<\x11\xac\x9e,\x87\x81\xcba\xe0r\x18\xf8\xf7|\x18\xb8#\xe7Stl\x7f\xcf\x9f\xde\xac\xc9F\xd4\xad\xb8\xc1\xaf\xd1D\xda\xdd,)\x11\xb5\xf6\xe5\x95|7F\x1aeLd&\xea\xf2{\x1d\xaeH\xb7\xfd\x0d\xf2\x9fs\x9e\x0d-2\x0ea5\xd6@\xfb\xd7V^\xc8\x96!\x90\xa4\xf6\"\x99\xb6\xd2\x9aP}Ye\x98d\x90\xae\xa6*\xd6|\x85\xed_\x83I\xe4\x99\x0f\xcf\x1eY\x10\xc4\x84My \xdf\x92\x0e\xea\x962\xd4VX^\xa5\x7fM\x9a\xf3\x11\x03=55c|1\x9eHSWw\x17\xe25+=\xb5i[}p\xde\x14\xc5=nq'V\x9er\x9b\xc4\xfd\xfe\xf2\x10\xb7\x8eC\xd6\xed\x07\xbc\x157\xf4\xcdCN\xd5\xf9xn\xc4\x15\x95\xf7=%\xfa;jV(\xee\xae\xb9Q\"\xe2\"-:\xd1\x03a\xba\xc7\xa8R\xdd\xb2$\x8d@\x1c\xc8\x11\xc1\xcb\x0eq3\xc0\xce\x9e+D\x85\xb1>c\xb9{v\xec\xd3`\x9f\xb1\xc0\x94\x19l\xd5\x13\xa5M\x08c6\x00\xf5\x01c+=1\x95\xe7\x13\xf7Bc\x8e0\xfe@\x98\xca\xf5\xca$\xd7\x15a\x07\x91\xf2\xe1\x1aL\xd8\x86/\xdb\x1d\x11\xc6\xd1\xe8\xafo\x84\x96\x91\xd1!s`\x0cW\x87\xb6\xaeDB\xed\x8ao\xdd\xa7\x06U\xd2\xdc}\xce\x17EOM\xfcKQ\xd9u\xe48\xd9\x85\xf8P\x1f\x0cJ\xdc\xfc\xc4\x91l\xcf\x0d\xbe\x80\x1b\x0cU\xc77\x10\xa0\xf8\x84\xb8<\x0b\x99\xa3 75\x02\x1f0>\x019w\x80\xae(\x9fwaOB5I]\xa2v4\x00n;\x8b\x8d\xfd\xb3I\x17\xc6N\xdf\x88$7V\xc4\xa6X\xb7\x80\xe0\x1aww\xa3T\xbf\x0cwVp\x83T\x9e`K0\x15\xa1\xc2m\xdd\xe1\x8a\x9b\xbf\x1dnD\xff\x89R-\x0d\xd9\xd7\xd5\xe7\x972E\x85\x1aj\x1a[\x07\xdc\x9cF\x0c9S\xa0\xf5\x16S\x86O\x80\xa0\xc3;T1.8\x04\xd05\xa9\x85\x1bT\x1f\xa5Y}W5\xbdX\xf4R\xba\x91R\x1a\xd8\xeb\xa6\xd9\x9e\x07\xf0\xf4\xee\xdf\xc7k\xc0\xc8\xbfL~\xb1\x19Zo\xf5\xf7_\x8b\xcf\xc3\x163\xdc\x1d\xfbD\x0b\xe7\xd6\x0d\xff\x9f\x96\x89\x1c1\x7f\xdaL;\xd6\xe6$\x8a]\xfb\xbb\xc1l\xb7\x0b\xbc\xb0\x04<\xbe\x0e\x8f\x85\x06\x1e+\x0d\xdc\xf1\x9d@\x84'\x14\xe3\xf1[m\x10\xde\xc6!l\xbdA\x94\x05\x07q\xdf\x8a1\x1b \xb35\x07 \x16\x1d,\xb6\xea\xfc\xe4B\x96\x1d\xe4\xb3\xee \xd6\xc2\x83\xdcS\x96\xd1\xda\x838\x8b\x0f2Z}\x90h\xf9\xc1\n\xeb\xcfI\x90\xec\xec\x16 \x04'b\x9d%8!6\xb3\x0b!\xa3m\x08~\xfb\x10V\xdb\x88\xd3\xc1p\x8bqj'B\x0e[qBoj9B\x06\xebqB\x8e\xdb\x92s\x0b\x12\x96[\x91\xe0\xb5$\xc1\xa7\"\\5\x9a\xfe}\xbe\xc6\xdc\x96%8\xacK\xc8la\x82\xc5\xca\x04\xef\xa2\xcaam\x1a\xe4fP\xc7U\xb6\xa7A\xc7\x10O\xc3Z\x84\xb56\xa8I\xc7b\x8dB\x94E\n\xe5\x0c}\x16\xdcl\x04j6+f\xb6\x9c\xa1O\xc7\xc9\x963\xf4\xe5\x0c\xfd\xe4\xa7r\x86\xde C\xf0\xceE9C_\xce\xd0\x87\x11Y1,\xcf\x87l-g\xe8#\xd1\xac\xe5\x0c\xbd\xd1\xca\x81\xd35\xa0\xac\xac\x07N\xcb\x19\xfar\x86\xbe\x9c\xa1/*\xed\x0f\xa4\xd22!L\xcb\x19z\xf1\x96\xdd\xad\x9a$P\xa5\x19t\xc0\xcd w\xda\x1a\x1a\x87\x05el\x8d\xb3\xa6\xeeG\x8f(%U-\x92:b<\xael\xed,^/\x17\xc5l5\xce\xd7\xa0=\xa7iY?\x8e\x1c\xa6M;\xac=\x05\xef\xcaMzV\xb5G\xdd\xfas\x90k4E\xa6\\cL\x8eqYn\xd1\x8e\x18\xf3\xe5\x143\xe4\x12\x839\xc4U,_\x96+tp\xde\x99#\\\x90\x1b\x1c\x1e\x9dQ\xf3\xe7\x04\x97\xe6\x02u\xceoF\xd0\xcc\x01\xda\x19\xba.\xe77\xce\xf2\xe5\xc8\xee9\xb2z\xeb\xb2y\xf3\xfc\xdd\xea\xbc\xdd(S\xb76Cg\xe2\xbbF\x99\xb9\x05\x19\xb9\xe0\x9e \xf9\x1e\xbd+\xcc5\xb0u\xd1Z\xb5\xaeK\xdfZ)\xb8\x17\xfcB\xed:\xd1\xa6\x06\xc1\x89^]\xa1Q\x1d\x1at\x95\xee\xf4h\xcdd\xc6\xad\xd1\x916\x9d\xb8J\x1bZp.S=\x98Q\x03\x0e\xba\xcf\xb6$\xbe\x17\n\xe5\x1dy\xde\xcb\x08\xb7\xf6\xd3\x0b\x01\x95\x92\xf7\x1fw\xc9\xfbg\x13O\xe6\x0e3u8\xc6\xd0\x0e\x0e\x19y\x8d:\xa4g.B\x14\x04A\xe9\xb3o\xea-'\xb2\xab\x83\xd7S\xd8\"\x00vB2\x97\x87\xb4\xfe\x10\xb1\xdf\xd1f\xa5c\x19\x03!\xd6\xd5\xfb=\x96<2\xe7\xe5\xb3-\xba\xe3{)\xfep\x01\x98U\x97\x9f\xab\xdf$\xeeRl\xb05i7;\xef\x844\xe6\xe4p\xe11\xd7\xcd\x99b\x85\x03\xd0\xa1\xac\xcf\x86\xec\x9cX\xab\xcf\x88 (m\xcdW\xf5/\xe7z[\xb3;I\xf8\xf3q@\xf2-\xff\xb6B\xa6)j\x1d\x91H\x98\x8e\x9c\xf7\x87)\x88K\xd9\xb9\xdc\xd9:b6\n\x86\xa3\xdd\x0eW\x8c\x8eM\xe9~\xd4B\x8c\x08\x1d \x8a\x12;\xf8\xac\xbe\xc4\x97\xa3\xdd\x8b\xea\xef\x1b\xc4\x14\xd2\xd6\xf8\xcb`J\x1aD\xc5\xbe\xc7y$:*\xbf\xfe\xb9\x9e\xe1c\xddn\xc4\xd9\xda\xcd\x8et\x1b\xf3\x8b\xd3\xc9\x8e\xc2\x93Yv,\xc7\x06d\xdb\xad\xc2R5R=\x19\xf6\xa9\xbc\xbbT\xdc\x1e\xd5\x1f\x8d\xe7\xd6\x13\x1cH\xb35\xc4\x87\xf6V\xbc1\x83\xfd\xe6\xe1\xb6\xc2\x92\x0d\xf3\x93a\xbcY_\xb1\xbf\x06\x11\x86\x1c\xf8\xac\x14WJ'\x9bQ\x07\x1e\xc3\x0e<\xc6\x1d\x04\x0c\xd91\xce?X\xab>\x86\xa7e\xdd)\xb0\x199k\xed\xc7<\xe7\xc3\x86\x16\xa8\xff\xb8\xf6\xcc\xd8|P\xae\x1a\x90\xabO\x93\xcd\xe8\xcd+\x88\xcb\xb6\xf6\x9c\xd9\xfcC\xceZ\x90\x8b\xce\x9e\x0d\xcd_\x0f\xd2\xabL\xecQ{GUH\x08\xd4\x85\xf4\xb9R\xebjC\xce\xc8\xd5\xad\xb5:d\xc0\xba\xcd[!\xd2R#2_\x95H_\x9d\xc8|\x95\"\xdd\xb5\"c\xaaE\x86M\xe7\xfe\x18\xfeB\x1bz\xc3\x9d9i\x8e\xfe\n\xe6t&c\xd7o\x9aCxw\x0f\x18\x83\x11f:\x84\x8d\xdb\x90i\x1b2\xd9!<\x8e\x08\xd3\x1d\x82\xe6;\xf8Mx\x08\x8fT\xb6\xd0xe\x0b\x9b\xf3\x103n\xdd\xa2\xcczH0\xed!\xe5\xeb!Cd\xdcr\x9a\xf9\xb0\xd0\xd4\x87ds?@,\xe2\xf8\xb0\xad\xa5\x9a\xfd\xc1^\xb8\x9d\x02Hs\x0c\xe0>\x05 \x8b\x93\x00K\x1d\x05Ht\x16\xe2\xe60\xdda\x80\x05NC\x88\x1f,\xc6q\x80\xc8)\x8bw \xac\xaf\x07KK\x8c\xdbbG\xc2N\xed\x80\xc3\xce\x04,q(\xacT\xfc\x85)\xc6m\x8dca%h\xbd\x9ehh+\x1c\x0c+\xbd\xbe\xb8\x85\xcb\xc9\x80\xb5\x8e\x06D8\x1b\x10VP~\xa8\x90\xd5\xb1\x80\x08\xe7\x03\xbc\x0e\x08,sB\x1c\x13\xdb\x8b\x86\xd3\x11\x81\x88\xc5\xbc\xd2!\x99\xd1\x9b_\x984\xb4|\x8e \x04\x9c\x13\xc8\xea\xa0\x80\xd7I\x81(Geh\x13WB\x11Xf\xe7\xdf\x87m\xbf\x04\xa2\x0b\x01\x98.\xf4\xbd\xb2Cu!BR!\x1bd\x17ba\xbb\xb0\x02\xbak%&\xed6\x0f|\x17VAx\xad\xe4P\xd3\x80\x1f\xc6\x0b+\xa1\xbcV\x82=\xfa\xc1 %\xcb\n\xe9\x05;\xac\x17B\xd0^\x00\x1f\xeec\xf6\xfaZ\x88/d\x80\xf9B\xd8\xdf\x0cy\x9a\x11\x90_\x08ne\x90\x19\xfa\x0b!\xf8/\x84u\x1bx\xf7v\x88\x81\x02C\x08\x0e\x0c!H0\x04`\xc1\x10\x0d\x0d\x86H\xbd\x08K!\xc2Nj\x15\xb2@Dt[\x8d\x1f\x06?\x9c#j\x9a\xc3\xc2\xb9\x0cO\xec$\xa7\xee\x03\xb0a\x8a!\x80+\x86\xb8!\xc5N\xf5\x12\x8c\xb1{X\xea\xb6\x80\x10\xce\x18\x16c\x8d\x9d\xe4\xc6hX\xe7ca\xcc1@\x00w\x0cq\x13\x10\xc2\xcc\xe9\x16;Q9q\xc8\x10\xc6\"\xc3\n<\xb2\x93`Mc0\xc9\x90\x8cKv\x7f\xd0\x8dW\x86H\xde\xe7\xc2-C\x88!\x11#By\xa1}\xb0\x14\xde\xe7\xa05\xae\xd8\xe2x(\x15\xe6\x07\xc1]u)\x0e\xdaJ\xcc\xe3t\xa5\x02\xa4\xc1\x0b\x92\x86\xb0L\xc4(\xfeU\x80i\x88\x04MC|_C\xfe\xbbc\x0e\xd3A\xd4\x0e\xb5H\xe7Uk\x1cB\xe3\x04SC\x08P\x0d\xf7\xce\x8e\x9c\x00k\x08\x82\xac\xc1\x01\xb4\x06\x88\x00[C\xd1\xdcEs/\xd4\xdc\xcb\xb0\xdb \xf2\x1b\x9a\x99\xa5\xb8\xee\x19\xa1\x01\xe7=\xc7vCf|7x0\xde\x00\xa98\xef\xfe-\xcf\x81\xdf,wG\xc8\x16{\x83\x844\x96\xcd\xd4\xbb\n]\xc8<\xde\xf3t\xe0\x8c@0\xd8kYg\xc6\xcc8\xb0\x12\x1e=\xe2\xd9.d\x8f7bJ\x03\x14\x9d|\x14\x8c[\xcb\xbf1\x12\xc8\xca\x13;G|\xb8\x1f'O\x9c\x1c \xa2|\x9c{\x8a{/\xf1cz<\xf3\x16\xc0\xf1\xf8\xf6E\xe7\xae\xb82\x8a\x1aB\xea\x04w\xb3\x08\xe3%\x16\x97\x13\xf1\xad\x90\x86\xd6-\x19\x85\xe3\xb8bC\xb7\x14\xfcM\x1a\xf2&\x08\xb4\x8f\xc6\xdc\xa4\xa2m\xd6\xe7\xb6\x01\xbd?U\\@\xf6\xf2\xa1\xd7\xb8\x13\xe9\xf8\xe4\xd5uVd\xa4\x13z\xcf\xeb,W$a \x86\xae\x94\xb9\x9c\x92+e.\xd7a\xe2J\x99K\xb3E`\xdeJ\x99\xcbR\xe6\xd2l\xa5\xcc\xa5{\x10\x0b h\xa5\xcc\xa5j1h\x83\x98I\xc8 /+e.\xd7\xc3\xc5\"\xa1b\xcb`b\xa5\xcc\xa5j\xa5\x9a\xdb\xb8\xc5;\xc4\xb2\x952\x97\x10\x8b\xda\x8aAlE\xf4-\xb1\xe6c:Bk4\x98\x19\xbdR\xe6\xd2h\xa5\xcceQ\x8c\xa5\xcce\x1a\x0c*O\x99K\xd9\x14\x93utP\xf7@\x0c\xfe\x88Xu\xd0\xaf\xb6#\xdb\xfd\x84\xf6J\xc4\x1eOI\xbd\xee\x7f\xea%tx\xba\xcf\x04w*\xf08\xbcm[\xa2\xf6\xa5\xd9\xe2[\xb6\xf9\x80c\x93sZ\x07^\xdd\xb1i*\xce\xe7\x02\xeb\xafh\xf5\xc7\xffS^]~BT\xb9X\xaf\xd1\x1e\xbf\xc1\xbf\x9c1e\x97\xf2\xf7 \x11\xed\x16cA\x8e3\x02\xc3\x91Pf^\xa1v /\x87`7>\x9e\xd8\x1d\xd4\xd3\x93\xdcL\x04x\xb8\xe0\xb7\x04\x8e\xdc\x85\xe80=7lt\x95\x99\xd8\x82\x12\x99b\xd9\x18\\\xdb\x82\xdc\xe1\xc4\x9dq\xfc?\x86\xed@u\x05\xd05\xaa\x1b\x91E\x9e\xf5\xdfd\x94\xb8ep#\x88L\xd5\xc4\x0d\xa2@1\xbb\x80\x9aQ\x10\xf7p W\xaa\x95\x82\xb4\x95w\xb8\xdd\xd4\x86\xd8\xb8\xe7P~RJ\x99\xec\xb5\xe4\xef\x15\xdene\xd2z\xff\xe6\xf5\xb3^\x10\xe1\x88)E\\\xf6\xfb`\x9aA\xac\"\x9d|P\xe4\xfe:9\x12\xfd\x8a\xd8\xfb\x84gb\x0es46\xfd\xe4[r\x1c:\xf5W\x8b\x92\x84\x0e\x9f\xb0H\x88uk\xe3M\x0b\"LS\xfe\x8c}O\x93A\xc1\xe3W\xd6h\xa6ZP\x0b\x83\x95\xb6\xc0\xa4uYO\x83\x90\x8e\xd0\xa3%\xe0h 3\xce\x83\x8b\xbe\x90\xa2{\x15\xae\x9dNX6\xa50\xb7\xda\xac\x8f\x9c6\x08EUB\xde\xfb\xcb\xe7\x13\x0cB\xbd\x1d\xef`\xb37\xf8\x14J\xa0B\xaf\x8fj\n[\\\x89S\xb0b\x81\x8b?\x8a\xda\x105i/\xa0n\xabN\xcc\xa9-\xbcpu\x07\x8f\xec%_\xf0\xb5\xdem\xc6\xbe8\xb9i\x93\x02m\xa1\xdc\xe2\x8f\x9c\x9e\xe6\x02\x92\"\xa2O\xf3\x8e\x86)>\x1bU\x1a\xa1\xdb(\x05\x9a\xa0 B\xc3\x90\x158\xe0\x8d\xfa\x02\x15\xa5\x06\x8b_R\xfc\x92\xe2\x97\x14\xbf\xa4o\xc5/)~I\xf1K\x8a_R\xfc\x12\xa3\x15\xbf\xe4\xb7\xf5K\xeav_\xdc\x92?\xa8[\xc2W\xaeTlZ\xaf%\xcf\xf2D\xf3N\xe7\xbb\xe7\xab\xed\xd3x\xbb\x0c\xff>\x9d\xc8\xa8O%\x7f\x85\xbf=\xfd\xc6D2\xedr9\xf5\x9f\x9c\x02\xe9\xf1\x9d\xfc\xdbQ\xaa\xdf\xb4\xcek\x82\xab\xa9\xfdf\xf5\x99\xec\x1e\x93\xc5_r\xf2\xc3\xef+\xad\xf3\x94V\xf8Iv/)n\x14\xb3\xa9\xcb\xec\x1fY\xbc#\x8bod\xf7\x8c\x82ri\xf7\x8a\xfc\xe3[\xe5\x11q\x0fhB\xcf\xe5\x0f\xad\xf3\x86`~\x97\xb7\xd5\x17J\xf5\x84,~\x90\xcb\x0b\xb2\xfa@\x1e\x0f\xc8\xe7\xff,\xbb\xdd\xd8\xed\xf9\xac\xb0\x93\x17\xef\x8d3Jk6\xc8\x191\x97\xbf\x13\xb3k\x0e\xcd?\xf8\xbc\x9e\x8e\xc5\xcf\x89\xf2r\x16\xea\xa5\xac\xfe\x8d\xc7\xbb\xc9\xec\xdb\xd8=\x9b\xb0_\xe3fFV\x9f\xc6\xe2\xd1\xe4\xf5g\xac\xdeLf_f\xec\xc9\xac\xf3c\xb4\xefb\x10\x9cy1Y|\x98\xef\x05\xe7\x9f\xa2\x06\xb5Uz\x94\xbd\xf8.\x1f\xbd\xef\"'X\xda\xf6OD/\xca,\xf7\xed\x0f3\xcb?\xe0[\x81\xe4{\xf9\xba-\xc72\xb4\x91p\xe6s\xeb&.]\xd0\x9d\x0b/\xffQG\xd7\xb9p\xdai3\x08N\x14\xecZ\xd7mr=\xeb\xd8m\xf3\xbbl\xf6A\xafw\xd5\xa6\x0eZ>\xe7l\xe6\x98\xe5p\xca\x0cW,\xab\x1b6r\xc1\xb2\xb8_\xe2\xfeNi:%\x1bn'\xc3\xe2\xb2\xbeb\x7f\x0d\x12\xac/p\xe8^\xf0\x07\xe6\x9c\x96\xd8\xdb\xbb\x96\x1d0\xab\xab$c\xec\xdcnq\xd7\xdc\xd5\xed~\xb3\xd0X\x95\xcd\xad\x12\xde\xf7_\x10\xb7\xaa\x8e\x8c\xb5\xfe\x17\xae\x97\xaf\xa5\x80|J\xb9\xf9&W\xf6\xe8\xb2Z\xaa\x07h\xaeY5x.\xae\xfag)f\xdf\xbf\x7f\xfb\x0e\x0e\xe8\x1a\xcbM\xb5\xff\x92i\xed\x88W61\x97-\xbbw\x1d\xc1vy \xb3\x1a\xd6\xd0\x11AY*;\xa1\x1c*r\xbc\xd2[\x101\xef\x99\xdf\xa3\xe3\x11\xe8\x81+\xf8\x7f\x04C\xb4\xd9\x99\xc2?r\xab\xa1\xde\"\xc6\xad')F\xd9\xcc!\xdb}\xf9\xfdM\xbc\xc6\"\x1b\xb1\xf6|\xa2\x17\xd2\x96\xab\xc4\xa4\xcd\x7f5\xa8\x8994\xfe\xdd[@JI\x9f[\xd3\x08\x12\xbf\xaa\xa7\xb3\x9b\xa2\x9a\xa0\xb2C'\xf2\xd2[\xa4\x06\x05\xc4\xc4\x8b'R\xb7\x8c+\xc2\x81#\x86y\xe6\xdb\x1dFk\x92\xf7C*\xc8v\x0f\xd7u\xc7\xce\xa8Q,S\x17\xf7\xb7\xf8F\xc9\x0c\x7ft,,\x8a\"\xe9\xea}\xdd\xa2F=\xc7\xd5\xec0\x10z\xde\xed\xea\xdbKx\xc2\x06\xe3\x95\xecf\x13\xa4Hie\xadI\xf7*[*\xf0\xaa:\x1f\xcf\x8d\xfc\xbe\xd8]\x84\x0c7\x94(\x1b\xf3|\xda\n\xed\xcf_#\xad\xb8\xb7\xb9\xc6\x1a\xe3E\xeb-\xbe0\xb4\xf9\x9d\xf0@\xe45\xd4\x88\xc2\xae\xc3\xb8\x11\xffe,\xfc\xf3\xc9\xa6\xc5G,<\x9f\xe4\x85\xd5\xe7\xd3\x02g\xbcg\x83\xd0t\x8bt\xbbO[\x82\xcf\xc4]\x9cf\xcd\xa6=\xc1\xa5Aa\xad\x16\x05\x97&\x05\x1fG\xfc\x89\xd6,Z\x15\x96kV\xc8\x9d\xb1\xb4iZX\xa5m\xadSH/f\x1a\x17\x92\xb4.X5/,\x9f\xc9\xf5Z\x18\xd24\xf1\xacK\xff2\xdb\xae\x97id\x83\x8a]7C^\xfd\x0c\x16\x1d\x0d\x99\xf54Lu5d\xd6\xd74\x9b\xc2\xbe\xe7\x90EH\xb5{\x16\xc0\xca\x13\x08YU\xbcG\xc9gP\xf3\x1eE\xef\xe5\x8f_EdT\xf7\xab\x14\xfe\xbd\xc0\xf7]\x8a?\xa3\xea\x0f(\xffT\xf5\xbf\xfeL\x86e\x86\xf3l\x03\xc9\x1b\x81\x7f\xf5\xe5\xd9\x0c|\xdbA\xf6\x0d\xc1\xbe%\xac\xdc\x14F\x94\xd4\x061\xdf\x16\x96n\x0c\xc7\xbae\x97\xd7\x8f\xae0C\x8f.\x9f\xd7\\|\xae\xce\xbcg\xaf;r\"\x1d\xff\xaf\xf8\xdc\x16e\xe8C\xdd\xee\x17;\x85\xea\xfd>J,\x84\xa9\xef\x87N\x89\xf0.\xe3\xad\xf8\x9f\xcdX\xff0\xceA\x83\x1ej\x1aRIV\xd2\x9e\xb8\ncj1<\x11\xd2l\x86\xa8eJ\xdfG\x02;\xa1\xb3h\x0c\x06\xb9\xb1\xa6\x10\x03\x1b\x0f\x87\x7f\xcf\x88\xb6\xf69\"|\x8d\x1b>/\x1b5\xce\xc5\x03\x9aQ\xba\xdf!12|\xb1\xc7\x07M\xf6\x81\x8a\x1c\x8f\xe7\xb6fw\x1b>\xfa\x94\x91\x8d\xc4lLf\xd1\xb0\xc6J\xc62\x16\xfej\xff\x1d1Y\x96PD\xdf+\xc7\xc2\x1bumk5\x9c\xad\x8c\x00\xbe\xc5\xd5\x99YB\x91\xb8\x15)!\x8c\xb8 \xc8\xa4\x0c\xb7\xe9\xae\xee<\xbc\xe8\xf5\xb6\xb1\xba7\xa7\xe9\xde;\x1b\xc0XS;\xdeMQ\x1f\x069\xb5\xf0\xcd\x0f\xac\xd6&a\xf2s\xe5\"[B\x00pf~@tdd\xe6\x01\xac7E&\x04\xe7 \xd4\x18\xeb\x04|\x16\n,\x1f\xdeJkeBM\xef\x88\xd3?G[-\xe0\xb7\\`\xf9@W[1\xcb\x86\x1ac\xcd\x80\xc7\xa2\x81\xe5#^g\xdd,\x1e\xae\xcb\xe0\x01\xb8\xc1\xf5\xfe\xc0\xf0v3\x9b\x8b\x1e\xdap\xcf\xe1\xa3\xd4\xd3\xbe\xb2\xc7\x91\x8f\xfb\x9c\xeb\x9f\xd4\xd05\xd2\xa2\xc3\xa7\x0eS\x81KAm\x0f\xb8P \x18\xf9U@\x94\xd6\xfbV2\xb5\x9e\x1cc~w\xc0\xfa\xb1\x9a\xca\x18\x85\x904\x86\xbbc\xddb\xc7$3\xc2P3\xb6\xe7dSX\x159\x9bJ\x14\xd4T\xced\xd5-t1\xf3;\xc3\x98\x10\xbd;\xd84\x80)nz\xf1\x08&\xc9O\xd1\x9eG\"`\"\xf6[\xdd_\xc1\xa2\x9d\xf0\xe9\x15Bh\xe2\x85\xf0\xa7G\x01\xdb~jDwxO\xb5\x8de\x18s\x7f\x1a\xedW\x8e\xfd\xf6r\xael\xfe\xa4A6\x9fR%\x0c\x9a\xa3\x9c\xddu\xbb\xefY5\"*B%\xd2BXd\x95\xd9\xe2Z\xb1\x1f\x94q\x1aePr\xe9\xd2\xcfM7q\xde\x8d\xf9D\x89\xbf\x8c\x84E\xba\x03\xc0M\x03*\xb1\x1b\\^\x07|\xd0\xedCa\xc1j\xa4\x8d\xcb\xab\x10\x88\x91\x17\xbcW\xaf\xfbyI\x8eZ'\x9a\xfe\x9a\xbbWw\xcc\x01S\x9cIJ\xad!g]\x87\xf9\xa8$\xa3\xb8=8w\x11Dp\xcf\xe7\x17\xfa\xc6<\x98\xa9\xea\xdf|\x04\x138\xa2x\xff\xe1\x84\x00\xbcy\xfdLa\xe1\x02\xdc\xce\x84\xcf\x19\x8dM\xfe8\xde\x96\x06\x99\xd0\xdbR/\x0b\xe6\xe4D\x19\x816o\x12\xa2w\xd3\x05^%Dy\x96\xf1]\xc8\xe3a\x82\xd7\xcb\x8c\xef\xcdJo\x13\"=No\x87\xec:\x0e\x02{o\x16\x0f\x14B^(x=Q\x88\xe6\xb3\xa7\xf3K\xbdR\xc8\xe3\x99B\x94w\nA\xbbt\xad\x97:\x9d\x95!D5\xfdPNo\x15\xac\x1e+\x84\xbcVp\x1b\xa9\xbe\x93\xbaV\x0f\x16|B\x04A\xbe\xc3Jo\xd6B\xae\x0f\xb5[~\x8b\xf5j!\xe4\xd9\xc2\xfaa/\xf1r-d\xe6\xee\xbdm\xe0i\xde.\x84=^X\xcf\x80e\xdeo6\x16\xc4z\xc1\x10\xf0\x84a='\xb2z\xc5\xe0\xf6\x8c!\xd5;\x86H\x0f\xca\xb6\xa9$a\x93\x93\x8b\x068\xbcf\x08M\x86\xdd{\x0e\xbc\x16\x9a\xc1\x95\x9e\xf4\x8c^==Y\x02\xeb\xdc\xeb\x19-\xfb\xa6\x91\xe6sC\x9011\x92\x13\xe5{\x83\xcb\xff\x86\x0c>\xf8T\x1e\xf9\xd2\x99\xfa\xe1\xb0\xcc\x17\x87\\\xfe8$\xb8\xc8\x91\x06\x9e\xdbnu\xe1Nb;\x10\xe5\xa3\x83\xddO\x07\x9f\xafnq\xfb\xbc~\xa6\xf20\x95\x8b\x1f\xe3XN\x16r\xb4S\x19s\xf8i\xaayf\x8f\xd8M\xee\x95\xba\xc5\x88\xd2\xadP \xe3\xbd7NK\xf4\x1c\xe6\x1b\x8aag\x8c\xf0\x1c/\xdb\x1d\x89\xe6\xb2\xe8\xca&\xc8GP'\xa0\xee9n\xbbG\xe7=\xce\x06\xf6\x8b\x8a\xeaF\xb1\xf4\x8d\x18|4S\xe7\xc3\xf0\x06\x9bF]\x0fLE\xa8\xbb/\xd5\x9f\xea\xff\xc4\xdb\xd7\xbd]\x15\xd1gi:/\xear\xa3\x8a\x95o\xa2\x0e\x89,eNh\xe4\x0b@\x08b\x1bM\x84!\xccB\xac\x9a\xc8(~4\xe0\xcf\x860\x12\xbe=\xe1J\xad\xeba\x91\x8fJ\xa9qWtB\x9e{S*:\x06|B\x1f\x18\xee\x8d\xfc;l \xa6\xed\xff\xfb\x7f\xff?\x0cP\xc5\xce\xa8i\xeed\xd0F\x7f\xd9$Y3\x8a\x9b\xdd\x05\\\x9d\x19tH\xb8\xcbG\xd4\xa2\xbd\xcd\x1d\xefO!\x8a\xfd\xfb\x88Xu\x90\x8f\x8ds\xb9\xf2\x1c\xa5\xc9\x8a\x18U%\xf6\x91^_%\x87\x1cEG7u\xaf\xea\xac\xaf\xd9_\x05\xa7\xda\x03\xb7\xaa\x99\xa9?p\xa8@\xc8l\x94\xbbT\"\xf8\xd5\"\x84p\xd0 f{\xd4T\xbe\xb8e\xb8kQ\xa3\x15\x10\xfe\x8ew<=\x96\xbcE\x0c\xdd\xef&\x93k{\xe9\xad\xbaz\x0b\xe3\x82\x17\xb2\xa2\x05\x02\xc1\x82\xf1\xb7\xe9\xe6\x84\xbb\x13\xe6\xcb\xd4\xde\x8b+B\x1a\x8c\xda\xc9o!o\xc9\xa4+\x81\xd9\xbb\x06\xed\xb9\xa6\xa1\x07r\x03\xf5\x0ejy\x90yx\xcaR\x01\xbc%\xed\x83\xe1\x01!ys\x7f\xe6\x87\xf9C\xd4\xb0G9\x1f\xeaN\xdb3\xf8\x17\xa9\x8f\xfal\xc8\\\n\x0fu\x83\xa7JE6A\x9b\x8fF\x1d\x9fW\xc0k\x19\xb7\xbc\x84\xd7\x9eN\xa0f\xee\xa0\x99\x1d\x9b\x7fL\x9e\xe4\x96\xe7\xc5\xfb#\xd9\xa4m\xee\x9ccC{T\xb7\xfdqjg\xef\xe7\x9f\xea\xf0\xaen\x1a\xbc\xbd\x80\x97-\xc3\xad.\xc6q\xa6X\xda\x9c\x86\x86\x17\x9aw\x8fY\xff\xce\x8c\xd8\x16\xd5\xcd\xdd\xc4\x83\xec;\xbcad&eRf-\xa0\xf0\xd1k\x9c\xed\x12g\xcd9/\xc7\xd2\x07t:c\xa3\x10\xfb\xd94\xb6\x03\xfd\xe9\x7f\x89_\x96\xa7\xf8\x05\x98\xbc\x87\x9a\x13Q\x0d\x80\xb3\x9a2t)\x14\x81>\xdc\xa6$\x8a\x99#V\xb8\x8a\xe6Nt\xa4\xaf\xf33\xbd\xea%\xccK\xf1\xa5g\xa4\xdd\xd6Z\xa4\x11\x9f\xbcs\xc5\x86\xb3_\xbf\x8c{s>Y\x94\xdc\xb6\xde\xed\xb0\x80zT\x9a\x18\xb5\x0cn\"\xc0H\x95\x842\xd8K\xa1\xd25w\x88\xe86j.`\x8bOX\x9c\xa0\x9a\x11\x14K\xcbb%\x8d\xd4\xe9\x98)\xe5\x12\x16\xdb\x92Z\\\x97\xcaBkMy*\x0b\xb9|\x97\xb0\xb8\xcd<\xe9\xd2\xeb\x82p\"\x12\xa9\xfa>\xf6\xf7\xc5\x01TQ\x1aH\x99\xdf\xfb\x997\xc3\xdb3\xd4\x9a\x16\xb2\xc2(\xa8\x90\x87L\x99\x8f\xde\x91A\xed\xfb9\xd69\xd0\xee\x831f\x0eW>\xb4\"\xf4H\xe8\xa5\x02\xc8\x0e\xf0\x02\xdc\xe0}\x9a\x96\xdd\xcaW\xc8\xa2\xfa\xc0\xb3\x97\xf5\x94\xe2\xb6\"[n\xe1\xa8?\xabY\xed\x9f\xd7vT_\xb3g\xc9\xd7g/\x07\xbe\xde?\xaf\xbf.J %}R\xbe\xa1\xa6\xc5\x1c\x92\xf0\x08\xe5\x8f\n~f+\x1e9Tl\x18\xde\x9aDu\xafH\xbbU\x81+\x99\x18:pK\xf7\xeaN\x98\xc8\xaa\xc03\xbc4*H\x90\x1bUx\x98\xb4\x06\x83e\x95\xdeZ\xe0\xecHU\x0b \xa9\xa4\xca\x19A\xe4\xa1\"r#}%\xd2\xe2\xe9|D Y\xb2&\xdaN\xe4\xd3\xfa\x9a\xfdU\xf0\xcb*D\xab\xa4\xd52\x0b~\xb9\x8d\xef\xc9j\xf9\x05\x8b\x0c\xc7\x7f>]\x96g$\xc65Y\xf3\xc94\xe4\x96k\x98\xca6oW\xf2\xf6\x9e\x85\xa2\x18\xbb#\xda\\\xec\xb0\xa2\x19qv\xb1+=\x90X\xe3A\xcf+\xdf\xc7\xb9\xc9!\xd5gBD9\x95k\xd4\xe0V\xe0\x81\x0dQ\xc2\xb7\x15>)O\xb7\x16\xee&\xf7M)\xa0\xf1$B-\xa0\x962\x1a/\x80\nB~\xd5\xa8\xf8\x86\xdfa\xa0\xe7\x9aq\xa3M8\x9fU\xc3]\xe2\x1e\x97:FD\xd2\xf3 w\xbb\xe6\\o/\x9f4\xcd\x13J1K\xb7\xbb\x90xm\x91]\x18m\xb9[C?\xce\xf5/zd\xcde\xbb\xe3lb\xf02\x7f\xddn\xeb\n1\xc1V,\xcc\x1d\x91#\xeaY%\xc9\xcb\\\x88,\x196#&E\x97t\\\xea\x9a\xd3<\x02#\xa6-v4\xae\xbc\xf6\x03x\xdb\xf7\xa9\xef\xfd\x0f\xf6\x0eY\x9f}\xf5\xfa\xad\xa5\x1f\x8e\x87\x9f\x11aVv\\\x15\xd9^\xebS\xdd1\x9d\xb2O\xc3\xe4M\x1d\xf1a\xe2\xf0k-T\xddl\x168\xd7T\xe5\xb8\xe9 \x14\xfe\x8e[\xd8_\xb6\x0cwG\xbc\xadQw\xa7nj^ \xfa\xea\xc5\x8fI\xf8\xafQ#6\xda\xe8\x17r\xb8\xa3C\x8b\xaf\"qB{\xa5\xd0\x17mM-\xbee\x9b\x0f\xf8.b\xcb\x01\xd7!u\xf0\xeeG`|E\xdb,\xfc?\xa5\x9b\xa6ns`\x04^\xa3=~\x83\x7f9c\xca.\xe5\xef\x13\"\x1a\x91\x81\x059>p\x0cGB\x19\xe0\xdd\xae\xaej\x11p\x14\x96\x81\xcaG\x00>\x9e\xd8\x1d\xd4\x96\xd3\x9c\x9d\x84>\xb4D\xaa\xfa\x0e\xd3s\xc3F\x87aD\xf6#\x91)\x96ytiJ\x99\\\x11g\x1b\xf9\x7f\x0c\x99\x08\xd5\x15@\xd7\xa8n\xc4\xf63\xeb\xbf\xc9(\xb1p6\xf2T\xd0\xe4\xb1\x1b$\xca|^p\xcfs(\xfcyn\xb5\x97(\x0e\xac\xde\xd4\xd4Ql`4\x87\xf2\x93\xc6\x19\x0d\"\xf9{\x85\xb7\xdc\xf4\xac[\xd8\xbfy\xfdl8\xb6q\xc4\x94\n\xd7\xb6\xc7q\x19\xc4*\xd2\xc9\x07\xb7\xf2\xb8\xa6\x18\x89~E\xa4]DR\xdc\x1c\xe6hl\xfa\xc9\xb7\xe48t\xea\xaf\x93\xd1\x8b\xd6\xe1\x93\xbc\x98\xe4)\xeaz\xce~\x03\x8f\xfe\x87\xed\xe1\xd1\x18\x85p}\x03_\x8e\x9e\xfc\x9bK\x0fr\x1d\xfa}\x7fB:Y\xffq\xcfi3\xd84\x9b\xe1\xb0\xf5\xa2%-\x0f1I\x91J\x94\xe0\xa9\x00\xc7\x1b\xaeC\"t\xba\xb7\x08\x1a\x17\xearTx\xf5z\xd8\xd6U\xa5P\xf1o\x83\x94m\xf8\xce/\xbb\x03H\xdc|\xfd\x91\x1e\xc9\x83\x17=g\x1f\x0c\x93\x04\xf2\\\x850\xee\xe4\xd1\xa6\x1f&7~\xf1Y1\xc8\xdd\x90N\x1cH3E\x91u\x181n\x9d\xbcz\xad*\x0d#\n\x07t]\xb7{U\xaf\xb7i\xfa\xf4\"\xfcp /\xaeq\xabBGL\xa2\x14\x0dj\xb5Bd\x8e\xbe \x16\x1ag#\x92\x9a\xf3]}\xc4\x0f\xf4I\xbc\x07\xe8\x1awh\x8f\x1f\xf0\xbe>\xb8B\xf2\xe24}\\\n\xb7\xac\x1e\x19\x18:\xfah~`\xe8\xdd\x83G\x97\xf0\xd9;\xbe^\x15\xc8\x87\xd3\xba9 \xf6\xa9@\xc1\x9e)\x1e1\x0bQ\xb8B\x14O\xaa\xc6N\xa2R\xa7\xae\xd6\xafP\x8d\xe1\xfc\x1c\xfe\x95\xdc\xe0k\xdc r-\xb9\xb9\xd0\xbc\x100\x1b1\xc8\x9f\x9e\xbc\x86\xab3\x1b1\x872\x8cf9\"z\"\x8c\x7f\xa5\xc2\xba\xfc\xc0\x159\xb7[\xd4\xdd]\xc2\xb7\xa43\x103\\z\x84s,\x0dm\x85,0H\xed\xce\xdcG\xe1\xea\xf2\x93\x91\xb2:7[u!\x94\xd3\xe8\xd7\x16Z\xf2\xca\xb7\x99\xd8V1\x9f\xda\xaeqVk\xa4\xbd\x9ah\xa9&\xd8\xa86(\x88\xe5\xadxg\xc1\xa0\x83F\xfa\xe3\x02\x9a\x93Z\x83\xf2\xa2*B\x9a\x0b\xaed*c\x1c\xd3\x07\x1c\xf3i\x0e\xfd5!\xcd{\x8a\xbb\xd7\x84\xd6\xd2\x0dM:\x8e\x95\x16\xb2<\xa9\x8f,\xccc\xcd\xca\xd5\xc7\xbfZ\xaeD)W\xa2\xa4T\xc8/W\xa2\xc4\x0d\xdc?\x93yj\xe1'V\xc2w\xaf\xa9q,x\xe9\x19\xf4@h\xed\x1dP\xc6_?\xa2\xeaP\xb7\x12\xdd\xca\x89w\xb0\xebj\xdcn\x9b\xf1\xa1b\xee\xfaZ\xa2\xd3\xddH\xeb\xc2\xfd\xea\xcbY\x06e\x85\xb4\x07\x140\x84$\x1f\xee\x01\xf2/[P\xc5Cb\xdf\xb2\x1c\x02\x90\xcdv\x14@\xb6\x94\x0e-;\x16`!dQ\x1e\xeb\x8e\x08\xcc\xc8\xbd\xb4\x97P_yr`NO\x9e$p\xcb\xc2\xb8g\xb3c\x05\xb2-^\x0cE\xf5\xff\xb6\xaa\x7f\xd5\x81\x85\x11%\xe3\xf0\x82Mb\x96\x9ea\x18\xd1\x1a\x9dg\x00(\xf1\xf3\x08\xf94\x89\xac\x11\xcd\xa5\xf1s\xe8\xa7)lG\x16O6\x92\xf51\x8c\x8f\xf7d\xfb$\xd6\xb7K\xf3X\xbf\xc6i\xa0\xe4#\x0e\xd6\x14a\xe0\x1dg\xba\xd0\xfa\x9e\x93\xc5\xef\xdb\x13!\xcdO\x87\x9a\xe1\xa6\xa6\xe9\x99dU\xb3`\x19Gg\xc3r\xd7\x110\xfa=\xc19Fw5\x9c\x85\xb2\xa2F-\x18\xaa\x05\xf8\xca \xaar\\\xa9wv\x0ck|\x00\xcb\xca\xac\xdf!pU\xb1r\xfd9*\xdf\xd9)K\x17L 1\xb8hr0\xcc\xbd\x08\xce%p-\x8dc\xbd\x8a\xcf\x01\xf1\xbd?x\xaf\xcd;\x97\xf0\x83d\xb5b\xdfo\xa3\x94J\xb4\x9a.\xf6\xd1\xd0\x96n\xd3\xee\x80L\xf4T\xa7\x95\xbeH\xc3}\x17\x8c\xe0z\xe1\x88\x11\x0d\x88\n\xbe\x16\x96ge\xb9}@\x19B\xa4\x9a_+c\xa3}<4Vq\xd0\x92\xaa\x8a~\xb3\xa4\xaa~\xcf\x81\xae\x18m)[\x99\xc6\xa1}t\xd3\xf8\xc7HU\x95\xd0dP\x14M\"k\xa4p\xa9\xe9\x0dPB\x93\xd9Y\x1f\xc3\xf8\x04\xd3e%\xc0\xbe\xd8/\xb67\xcb\xc6\x07+\xe5~F,\xc7\xc6W\xec\x97?\xc44\xfe\xfe\xed\x17\xbf~\xb6\x1c\x95K\xbaH7\x9c1\x88:\x01\xb6\xa6\x84v(\xca\xe5g\xc0\xfbv[\xbc\xeb\x05o\x96\xdd\xe9\xf7\xac\xd6\xca\xee\xf4\x87\x98\xc6\xdf\xff\xee\x04\xbd\xdbvn\x8b\x7f\x1d\xe5\xe2\xad\x93\xc35\xfe\xf5\xb8R\xcf=OP\xa8\xa6\x8fW'x\xafj\n)\x8c\xac\xb5}<\xd5}2\xd4\xf7\xf1T\xf8\x89\xd7\x99\x96\xdb\xd2\xb2\xd5\xf9YU\xe9\xc7U\xeb'j\xea\x03\x97\xa6Y\xe6=[\xcd\x9f@\xd5\x9f\xd4\xba?\x0bn\xcf \xcfp\x9e\xfa?\xc9\x15\x80\x02{V\x96*@\xbe:@\xd9+\x01\xd9k\x01\xad\xac\x064\xa2\xa4*\x03\xcd\xeb\x01%V\x04\xb2\xf9A\x02>h\x8d\xd6%\xfb?\xa3\x18\xb9\xed\x9e\x19\xafC\xf6\x9e\xe2n\x84\x03\xea\x7f\xd2\xd5\xefh_\xaf#\xb9kU#\xee&\xdapsd\xd3\x17\xba\xfbU\\\xb3\xe5\x0e\x96\xb5 _\xe0\x9d\xe0uG\xd9\x88\xb9\x8a\xf6\x994\x93\x9d\x86\xf0\x96\x0f!\x0f\"\xb0\xf5C\xc4\xf6\x0fkL\x00+5Q\xb3\xc1c\x06@\x1eS\x00\xfc\xe6\x00\x84y\x17\xda4 \xafi\x00k\xcd\x03\xf0\x98\x08\x10\x1en\xc8T\x00\xaf\xb9\x00yM\x06\x08\x9b\x0d\xb0\xc0t\x00\x8f\xf9\x00a\x16\xc5HD.S\x02\x96\x98\x13\x10\xb1\xa2s\x99\x15\x100-`\xady1\xa3\xa6\xfae71 \xab\x99\x01~S\x03R\xcd\x8d\xa1\x95P\xe1\xef9\xc6TB\x85\xbf\xebi\\hl\x0fi\x91v_\xec\xedE&r\xb1\xb7e\x0b-:(\xf6v\xb1\xb7\x07\x12\xc5\xde\x0eID\xb1\xb7\x8dV\xec\xedbo\xff!\x0c\xb5\xa1\x15{\xfbw<\x8d\xbd\xbd-\x06#K'\xde\x19W\x12\xb7\xe4\xf8\xe4\xcc\x0e\xa4\xab\xd9\xdd\xf7\x98\xa1-b(\xda\xb0F\xdbc=\xbbko\xc2y\xb5\x81>\x93\xd5\x80\xe5=t\xb2z\xac|]\x1c]Er\xa7\x17G\xe4)g\x92\xdc\xed\x05\x11\xfb\x16d\xef9\xd0\x13\xae\xea]\x8d)g\x9a\xfc\xd3n\xb0\x1e\xc4\x99e\xc4\xa49\xa5\x1e\xd5J\xb7B't\xa5J:\x02\xb9\xc6]/\x00\x8aiR\x02.\xe1M\xbd?0h\xc9\x0d\xc8\xdb\xf3j\n\xa4md\xd1\x9c'|D\x8a\xe0 w\xc7\x9aR\xa1\x98EA\\\n\xa7\x06\xb5m\x7f-;\xbe\x95\xa5\x81u=bY\xd76\x93\x9f\x19\xf1q\x8f(T\x842Y\x1dH\x9b\x87h\xb0\x05\xcd-\xf1\x9d\xaay\xadk{s\xfb\x87\xab\x1et\x84-f|\xecm\x85\xe1\x88\xab\x03jkz\x1c\xc9\xd8[\x8c\x1f\xc3\x81\xb1\x13}\xfc\xf0\xe1\xbef\x87\xf3\xd5eE\x8e\x0f\x9f\x11z\xfc \xd1\xe3C!\xb8\x0f\xd4\x9a\x7fXSz\xc6\xf4\xe1\xa3GsU\xf8\xda[XX\x17\x8e55\x88Qf\xd8\xafaD\x9d\x91'M\xf3\x14\xefH\x87\xdf\xe2v\xfb\xaf\x84|\xa0O\xb4\x16M\x8e\xc0\x08\x16.\x0b\xb5\x8cf\xffJth\xc3eps \xe4\xc3\xa6W\xecki\xdb\xd7_,#F\xb3\xd0_\xfd)!m\x83\xabcT?\xe6\xcfy\xe8\xca;D\x85\x99\x1d9[cJ\x8aP\xf2\x9dH\xc7\xf06\x8b\x18\xc1\xd0Qy\xc1]\xbd\xc5-\xe3+\xd1\x7f\x9ew\xe8t\xd2kGt\xbbQlu\x14\xedp\xc4\xa6\xae\xee\x18\x0e\xcfPN[5\xc1\xd2\xb4\xce4\xb8\xf7V\xdf\x8c{^s\xcf<,3gg_\x08J\x82\xe7\xdd\x18\x89\xf0\xbc\xee\x93\x0c\xcfk\xcb$\x84\x90&]>\x08i\x16I\x87\xc5\x07p\x0cF\x9e\xb0\x90)\xc1\xa8\x17f\xa3\x9fP\xb2\\\xc3\x10K)\x96\x8f\x0b\x16\x1a\x7fk\x91\xd6\xba\xa7\x8c\x89\x9b\xed\x9e\x97\x9c\xac\xf71?\x85^\xcc\x04\xbc\x11\xeb\xf55\xee\x8aD\xc7Q\x92\n\xee\x9e\x07\x1d\xad\xbe\xdc\x19\x964\xeb\xe9\xa3+\x14\xe5\x96Xy\x1e\x8d\xcbCG\x97\xca-\x95\xaf\xdf\xf3,V\xc1IL\x1do\xae\x81\xfe\x96\xba\xd2\xc2\x95E|yOq'\xd8\xb2\x8c)\xcb&?\xe6^t\xdd\xd6j\x1a\xd0WF'\x92\x98W\xfd\xf73q\x10\xb0L\x9c\xfc-\xa5+\x1bv!\x9b\x03*[>7T\xb6\\\xda\xb4\x17\x80\xf7\xda\xf8N\x16\x82\xba/\x06\x05\xf7$\x02\xa98\xfd$!\x00\x9f!\x96&|\xd2\x81\xd9X\x16m\xd4\xd7S\x17n\xde)\xcb\xae\xff\xa2\x8d\x18p\xcf@\xfcf\xeb\xe6}\xf0\x9b\x91|\x7f+\xff\xfd\xba\xb7y#\x18\x1d\x8e\x8f\xd9\xed[k\x9f-<\xb2\xdb\xb41o\x07\x06kZ\x1d\x19G[y\x036\x81>\xf5\xf2\x9eT~.\x0c\x9b\x88\x08R\x82\x9d\xfd\xe1\x01\xdb\xc5\xd2K?R\x1c{\xfb'+'\x96\x88\x12\xcc\x0d\x95\x1c\x03\xfc\x9e\xee\xc5\xf8\xde\x19\xa1\xaa\x88QJ\x93w\xc1tG)\xc0x\x85\x14\xad\xfe\xfe\xbe|\xb8\xf1\xac&\xef\\ev\x7f\xdb\xd9\x85\x8fw\xcb\xfa\x9e\xee\xdf\xb7\xb4h\x8c\xdf\x9dL%\xce\xeb\xdf\xb3\xce\xc8\xea\x95\xe6\xf5Icf\x1a>\x06\xedqD\xdd\x07\xccz\xf1zq[\x1dP\xbb\x17\xa0\x84\xba\x13\x03\x8d\x96,\x01\x01\xa8\xce\x02+r\xf7\xf1KO\x9a\xe8|$\xda\x817\xac\xe6\xc8\x9f\nw\xcdpb\xd6\xbd\xff\x98-\xbb\x11\x96\xd0c\xddr\xe9\x16\x18\xdb\xbb\x0d=u\x18-\x91st\xbbQ7\x93\xfb4\xd7\x82\xd3\x07\x929\xb6s\x07\x13\xb6I|\xcc|u\xa4+\xe0a\xfa\x0c*\xd3Q\xe5\x0d\x199V\xa6\x97\x96\x8f\x1e\xb8\x82A\xe0^\xb1\xb2\xd9\x83Q\x81\xd7\xfe\xae\xa1\x98\x8e\xd5.\x9b\x85ibO(\xda\xf7\x9e\xb4\xaf\x07\\\xeeS\x0e^\x00\xa3I\xe4\xa1\x8d\x8a\x0b\xd4hSQ\x99\xd0:\xbf*\xb2\xdc\xb1\xc7\x80O+8B\xa4\xfe\xfdf E\xfb\xdec\xa5t\xff0V\xdb\x8c\xbf\xbdA\xa7\xe4\xf9\xee0;w\xad\xa8\x1b^t\xc5\xaf\xa1+fS\x15#\x0c\xfc\xf9\x89((\x9c*:\xb3C/\x06\xea\x00\xdb\xd3;\x86\xe9;\xf2V\xb05Y\"T\x81\xf7o^=\xec0%\xe7\xae\xc2\xd0\xa2#\x96g\x02\xcfm\xfd\xcb\x197w\xd0\xc3)%\xdf\x05\xbb\xe5N6!Eq\xa7\x8a\x17M-9\xb1\xd4+\xd2\xc0\xd5y\xb7\xc3\x1d\x1c1\xa5h\x8f/\xe5a\n\xd9g8\x9e)\x83\x8a\xb4\x0c\xd5- \x06\x0dF\x94M)\x91\x16\xc3?<\xfc\x07qb\x06U\x0cw\xf2\xdcK\x83(\x03\x8a\xf7\\!\xe9m\xf6\xfd\x9bW\x9fR8!v\x10\xa4'\x84:|\xea0\xc5\xed\xec\x0b\xe2d\xce\xb9i\xee\xe0\x973j\xe4\xc9\x00\xc1\x15EV\x8c\xff3D\xa1\x9e\xd5\xf0\xf9\x99\x7f\xec\xe1\x9e\x90}\x83/\xc5\x98\xaf\xce\xbbK]S\xe9\xe7\xcfe_\x051z \xe7f\x0bW\xf26\x8b \x9d\n\xb5\xa4\xad+\xd4\x88\xf52\xfd\xcag\xf8r\x7fy\xc1\xd9#\x8a)\xfd\xc3\xe5?\xf0%\xd1\x12\x06\xa8\xaa\xf0\x89\xe1\xed\xe7s\x83\xfde\x0b'\xce\xb0\xba\xc2\x17\xc00\xdf8\xcf\xf4\x8c\xf80O\x1d\xae\xc8\xf1T7\xbc/\xeap\xcfU\xdd\xa2\xee\x0eP\xd3\x88\xf1Nk' \x01a\x07|7\xfd\x0c\xbe=\xe1\x8aA-\xebYQ\xac/\xf0\xe0\xd3\x8ao\xc5\xd4b\xf8\xf9\xc0\xd8\xe9\xe7\x0b\xf9\xbf\xf4gq~\xb6%\xea\xd7\x0b!)\x15j\x81\x08\xc9\x17#\xa5\x98\xc1\xf94c7\x1f\xe1\xec\x1b\xb8\xbb\x16\x97\xf9#\x06Gt\xa2r\xdaEO\x19\xd1\xf2+wZY\xd5P\x94P\"MCn\xe8\xe3\x19\xf7\xff\x04/wC\xdf\xc4\xd9\xd6\x8e\\\xd7[\xbc\xed\xbb/6XJ\xcfG\xbc\x9d\x1d9\xfa\x13{O1\\\xe3\x8e\xd6D\x9cJ\xe6\x02\xc1\xd7\xb2\x94\x08\xd4\xa2\xfd||W\x1d\x16AiM\xee\xf2\xf3\xe9\xdc\xfe@\x18~,\xcb\n\xee\xcem%e\x95\xf7T\xadi\x19\x8b`\xcd\x1d\xa0kT7\xe8\xaa\xd1\x8bj\xaa\x19w\xbb\xba\xaaQc\xd5\xbdW\xe7\x1dt\x98kT,\xca|\xf0\x15\xaa>\xd0\xd7\xbd\x1b$\xfc\n\xef\xeb\xb6\xe5\xdd\xe6\xa6\xe3LA\xde\x9d\xf0\xa5\x945t\xaa\xe9eE\x8e\x97\xf0Dx7\xdf\xa3;\xf8\xff\xd8{\xb7&\xb9q#Q\xf8\xdd\xbf\"\x8f\x1e,i\xddS\x1ailo\x1c\x9d\xa3\x8d\xd5u\xdc\xf6H\xeaU\xb7\xc6\xbb\xe1\xf0\xd7bU\xa1\xbayTE\xd6\x90,I\xed\xcb\x7f\xff\x02\x00\xc1k\x02\xc8\x04Y=\x1a\x07\xf2eF]D\x02H$\x12yC\xe2\xd1\xb7\x8f\xbe;\x01}\xf7[\xf2G\x96\xc3\xe7t-\x0f\x12\xfd\x1e\x90\xdcl}\x84z\xaf\x0d\xbbi\x14L\xc3k\xd9Z\xe2\xdao\x93LQ\xbc\xf9]\xeet\xe4\x96\x9d\xdaj%\xe4r$r\x1fgC\x81\x01\xf7j\x0dR\xdf\xc5\xd7{\xf3>\xec\xd4\xfd\xf5\xe5H\"\xa8\xd1+U\xba?\xb2\xe6\xb6<\x94b\x97dU\xba\xeaU6T\x9b\x8dxR;\xd2\x89\\G\xf8k)\x05\x96\xa2)\x1e\xd0\x9e\xc3\xa3\x83\xb7>\xc3\x92e\xfe\xa9s\xf3\x0d[\xe0_\xf9\xfb\xfe\xf04\xbb\xf9`Nle\x1e$\xc52\xad\n\xb9\xeb\x1cc0\xc23\xd9\xe6\xbd\xf9k3\xa5Kv)\xe2\x94\x04\xd6cX\x8e5\x90n?F\xa9\xe8\xb1\xc2\x99\xe1\xfem\xbaT\x03\xab\x05oi\xee\xb4HV\xda'\xab\x8f\x0f\x0e\x99\xfc\x8f<\x9e\xf4\x9a\x95\xe3m6<\x8d\xf3\x0d\x1c*-W\xcc\xde-AWWH\xf5F\x86+\x91 U\x08\xb7VC\x1b'\x80\xecG\x13\xba\x8b\xf1\xe5\x97D2\x17<|\x0cgr4\x92\xe9\xeb\x81%\x0d\xe1\xd2\x0c\x9e\xff\xe67\xa3S\xe2U\x9e\xc3&\xcf\xe1 ,\x16\x8b\xff3\xf8Qv\x97d7\xc3?'\xd9\xcdBv\xf4\xaa\xc8w\xf76y~\x7f\xf8\xc1b1<\x02\xd2\x0d\xdc\x93\xcd\xde\xaba]\xe4\xf7~-\xdb\xdd\x87\xbf\x8f\x84\xdf\xb8\xed?\xb1\xb9>\xf2\xcc\xf5\x8f\xc9\xa7$h\xb2\xf0D)\x1b\x12#sniy\xefU\x9e/V\xdb\xa4,\xd1\xa9\xe9\xae\xe5\xa7z\xc4\x9d\xcf\x87\xbd\xfcs\xf0\xef\x07\x0f$\x8b\xb8\xfa>OvB\x9e\xddO\xf5(\xaeD\xf5Bl\x92\xc3\xb6:\xcd\xca*\xc9V\xe2\xde}\xfa\xa0\xd0\xd6\xe31v\xff`\x16\xe6;\xcf\xc2\x9c\xddT\xd7y6Z\x1a=\x8cWy~o\xb1X\xdc\x1f3\x9c^\x96{\xc8/\x8a\x15\xd5RQVJ68\xd5$z\xf1\xf2\xfc\xf9\xbb\xd3\xb3\x8b\xb7\xef\xee\x8f\x1d\xe6-\xb3b\xa85rl\xfa\xbf\xf5L\xff\xfb|\xe4\xb0\x96S\x7f\xfc\x04~\xbd_.^\xe5\xf9\xdf\x17\x8b\xc5p\xf5\xe5hN\xa4n%\xbfK\xb2\x9b\xfdr\xf1F|F\x07\x96n\xd4w\xff\xeb d\xe9\x16Yn\x84*#f\xc3\xbe\x19\x0cr\xd4\xa4\xeeW\x8fo\xf1>\xdb%Ey\x9dl/r\xbd\x89B\x06\xd5\xf9\xcb\x85r\x89\xae>6\xf2\xd0h\xc2\xb0\xbciu\x15#\xad?\xa7\xdb\xad\xfca\xadYX\x1e\xc2]dw\x11]\xe4\x814\xde\x16\xea\x07\xa9\x9d\xdd\x95\x8aysj\xc8\x13E\xaeg\xa5\xca?\xcbqt\xd15\":\xd3\xda\nj\x0b6z\x1f$\x9bJh\x0dB\x99\x9fw\x1f\xdc\xed\"\xab-\x1f\xd3\xad6uD\xcd[w6y\xbeX&\x85\x1a\xf0\x97\x077\x8b\xbf\xdd\xd1s\xd5\xca\xfc\xd0\"Q\xdd\xdd\x91_\xf5\x8f\x8b?\x9e\xbf}\xd3\xfd\xf7\x93'O\x9e\x0c\x89-\xbfi\xad\xdd\xb6\x90\\V\x9f\xdf\xda\x1a8\x94MM\x97\xab\xc36\xe9ic\xe3\xc6\xf2\xc3\xb5h\xcf\xde\x13\x10\xbb\xa5X\xaf\xdbS\xf8\xa4>\xce{6r\xe7\\\xd4N\xc5\x0f\xff)g\xfa\xa1v)6\x9aD\x97n\x0b\xb3\x1f\x1f\x8f\x14\xdbd\xf5Qn\xc5\xd6\xec\xd9\xa4[1\x14mf\xc3\x9e\x89\xa2\xcc3\x84ck\xef\xc3&-\xca\xeaR\x11\xfa <\x1cbi>\x93+m\xbez\xe4\x16\xa3\x00How\xd4\x8c\xef<\x86;\x18\xeb\xf6\xa7\xb2\xd0c\xbe3\xac\xcf\x01pG\x8d\xf6M\xb2\x93\x98\xfe\xaf\x1e\xda\x7f \x9f\xc9\xd1\x0e\xber\x0d\xf9tS\xeb\xc3\xfd\xb5\xd4k\x91\x96\xf0Yl\xb7\xdf|\xcc\xf2\xcf\xda\x7f|\xad*_\xd4\x9e\xdf!+\xf6\x99\xe6D\xebq\x03N\xd2\xbb\xbb\xd3\xa1d\x10U\x8cC\xb1G\x17\xdd\x07\xc5\xa6\x86S\xae\xf3\xed\xba\xe7wVL\x9ef\x0d\x87\x99\"%5\x83u1)\xd4\x0dW\xc1=\xb9-\xcdDG&\xb4\xf1\xdd\xfc\xf5/\x7f\xbd?b\xc0\xf0\xd5\xed#\xc7\x16XMW\"z\xb8x\xf4\xf0Qyg\xb4l\xfa\xbfu\x05\x97\xcb\xec\xb0[zR\x95Z\xf3\xa2WV\xa5\x14?\x1dD\xe6\xac\xccai\x8b\x1b\x06\x1d\x87i'\x10\xb1LJ\xd1<\xea\xaah\x03\xa7U\xc7t\xd8n\xd5reb%W\xa20\xf6\xbdZ\xab\xa6z\xba\\\xa9eR\xa6\xab\x06S\xcfb^(\xbd\xaff\x88n_\xc6\xd9\xa6+\x88\xd5\xc8\xbae\xd9+\xe3A\xee\n\xa8\x9e1\xae|n\xf0I\x94U\x9a]\xdd\xb7E\x17\x9e\x89\xd5\xf5w\x8f\xce\n\xb1I\xbf\xb0\xdd\xe8K\xd5\xf8r\xafZS\x83\nM\xf0\x07\xeb\xda\xee)\xef~\x0d\xc5~\xd5\xfa\xc856\x96\x8b\x9c\x99&\xb3K\xbe\\\xee\xc4.\xbfl\\\xb8\xd4\xa0A\x8fo\xab/\x97ezu\xb9Mw)5\x01\x7f\xdc\xfeo\xe2r\x95\x97\xd5\xe5^\x14*|\x11\x82H\x8e\xe2\x93(\xd2\xcd\x8d\xc6%\xd6\x8f~\xf7\xbb\x87\xff{\x0eT\xa5X\xed\x1f\xfd\xee\xf7\x1f\x1f\xf2\x91\x05$\xf8\xc8E\xed\xc4\xa6\xb1\xa5V\xb1\xb6zw7\xd1\x96\xd3\x17l^7b\xcb\x1f)\xe9\xcd\xe3.\xce\x97\x8bGwu\xc7X\x05!\xfbh\xad\xdb\xa3n>n\xd9\xd9*\x04\x02\x9df\x9b\x9cM\x99\xfe\x0d\xab\xde\xec\xe5Of\xcc\xed\xfb\xd8\x9b\xdc\x04d\xcb\xf6x\xd5\xdatG\x14\x07%\x1bp.m\x8d\xe2Y`\xeb\x0b\x9c\xd9R\x15\x1a\xdb\x02\x97\xd7\x0c\xbc\x0e2\x987\xce\x05\xceX\x17\xcc\x1a\xef\x829c^\xe0\x8a{\xc1\xb4\xd8\x17\xcc\x18\xff\x02o\x0c\x0cB\xe3`0%\x16\x86Q\xecfo\x8a\xa8b\xf10\x98\x12\x13Cp\xe9\xadn\x89\x8b\xc1\xc4\xd8\x18\x82\xee\xb0\x87dd\x8d6}\xcd\x1a#\x83\xe9q2\x98?V\x06\xd3\xe2e0-f\x86oQt\x90\xb3E\xd2`\xf6h\x1a\xcc\x19Q\x03RT\x0d\xe6\x8c\xac\x81#\xba\x06\x13#l\xd8\x1eGbn05\xeef\xc1g\x89\xbd\xc1\xf4\xf8\x1bL\x8e\xc1!\x08\xc7Q9\x08\x8f\xcc\x01\x1e\x9d\x03\x9f\xaea\x8d\xd2\x01I\x11 \x8c\xd6a\xf2\xb7\xad\\\xd9\x8b\xd8\x81w\x1c\xd3\"w\x03d*\x8e\x87D\xef`\x9e\x08\x1e\xcc\x1d\xc5\x03$\x92\x07\xd3\xa3y\x03l\xd5(\xb6\x07\x13\xe3{\xe0\x0b{\x81=\xce\x07\x94X\x1f\xe0\xee{V\xcc\xcf\x8ec\xe4\x1c\x9d\x14\xff\x03\x061|q@\xf0\xce\xdb\x1b\x0f\x04^L\x10\xb0P\x8d#6\x08\xb3\xc4\x07aR\x8c\x10\xb05\x9c\x1a+\x04_\xbc\x10\x9c1C\xf0\xc4\x0d\xc1\xb5\xb2\xd4\xf8!\x10b\x88\x80\xc4\x11aZ,\x11h\xf1D`\xc5\x14\x81\x12W\x04+\xd5P\xa6\xb5}\xeb\x8b3\xc2\xe4X#\xb8\x06:\xf8\xeb\xacqG\x98\x18{\x1c\xa0\x1aG\"a\xeeh$\xcc\x1c\x91\x04GT\x12\x90\xc8$ \xd1I\x98-B sF)a\xf6H%\x90\xa3\x95@\x89X\x02=j \xc4\xc8%\xa0\xc2\x1d\x8dq\x01#\xce\xe5\x8eb\x02=\x92 \xb4h&`\xd3\x983\xaa S#\x9b\x03\\\xa38'\xcc\x1a\xeb\x84Y\xe3\x9d0\x99\x1f\xbcqO \xc4>ap\x0e\xd9b\xa0@I\xb5\x1c=11\x8e\x87r\xf18.>\"\x91\x01\xe3\xd1\xd7\xd7\x98:\x1f\xf4\xe3\x12\xee\xd0\xdc\xbf\x13\xc2\x11\xecPD\xb2B\xabn\x91B\x07U\xbc\xa22\xdd]\x1f\xaf\xa8\xd0\xdc\xf2\xda\x9d8\xa2Q\xbc\xa2\xc2q\xbfOt\xbd\xcf\xecv\x9f\xe0r\x9f\xe0nG}\xbf\xb39\xd6\xe7u\xaa\xcf\xe6P\xf7;\xd3gs\xa4\xc7+*=\x98\xe6\x1e\x8fWT~\xe5\xef{\x9a\xa3;^QA\xdc\xd8S\\\xd8\x94[\x1b\xf1\x8aJ\x07\xe2\x15\x15\x03\xf1\x8aJ\xe7\xdf\x13\xdc\xca\x04\x972\xdd\x9d\xecu%\xc7+*S\xdc\xc4\xf1\x8a\n\xd5\x01<\x9b\xf3w^\xc7/\xcd\xe9\xebu\xf8\x12\x9d\xbd\x14Go\xbc\xa2\xd2\xe2\x9a\xe4\xc8\x8dWTHWTp\xd5\x1c\xf3KR\xaa<\x99\x8b%\xef\xce\x9e\xd7\x98\xdc\xe5\x9e\xba\xfd\x04\x146\xaa\x1b\x0e=\xa0\xf3V\x9c\xac,\x19\xcfV\x13\xccgk\xcd\xea0ug:\xcf\xe74\x9d\xd1m\xea\xccq\x9e\xe0:\x9d\xcfy\xeas\x9f\x06:P\xe7v\xa1:\x9c\xa8s\xbbQ\xad\x8e\xd4\xc9\xae\xd4\x11>[>\xf3\xbc\xee\xd4\xc9\x0e\xd5\xd9]\xaa\x93\x9c\xaa\xf3\xbbUgt\xac\xce\xedZ\x9d\xd1\xb9Jq\xaf\xce\xe8`u\xe5)Oq\xb2\x8e\x90\xe19\xca\x88FAw\xbb\xa2\xd8\xac\xf9\xc9\x13]\xafS\x9d\xaf#tXfr\xa0;\xd6\x92\x95\xec\xd0\x07\x1c\x19\xc9>U!\xd01;\x96\x9e\xd6\\d\xd7\x08fv\xcfb\x0e\xdaY\\\xb43;i\xb1\xfc\xe3\x89\x8e\xda\x1e\xae\n\xc9=\x9e\xe2\xb6\xf5\xa6\xdaZ\xb3\x8e\xbd\xce[<\x81\x8f\xee\xc0\xc5\xdb\xff\x13\x9f{\x90\x1b\x97:y\x9f+\xd7=S\xaf;\x97\xe5\xd0\xc5\x125\xed\xb9\xc5\xd3\xdd\xbaS\x1c\xbbc\x9f\xc4D\xe7\xae7\xa3\xd8\x95O\xec\xce&\xb6P\x8f\xea\xe6\xf5;z\xb1,\xe2 \xce^\x92\xbb\x97\xe3\xf0%\xb8|-)\xb9H\xb7\xe8w>\xd7\xefT\xe7\xafux\xbd\xbf\xcd\xea\x02\x9e\xdd <\xb3\x1bx^G\xb0+/x\x9cN9\xce \x9e\xc7!<\xa3Kxn\xa70\xd5-Lp\x0c\x93]\xc34\xe70\x9a\x03\x8c\xf5Ju\"\xfa\xf2\x7f\x89Nb\x92\x9bx4\xf89]\xc5\xb3;\x8b\xe7t\x17\xcf\xe90\x9e\xb6\xde^\xa7\xb1\xdfm\xdc=)\xea\x82\x1e\xc6\x0f\xab\x8cF\xb5\xa4_RU\x88\xa7\xf9\xa5n\xb1O\xae\xea\xf7\x0d,%4\xda\x0f\x06\xc5P\x9a?\xd7\x92\xd08\xa1\xdb\x93\x02\xf5\xea\xe2>\xddL|\xa9l\xc50\x82Sj\xfe1\xb4\xddL/\xc6o.\xff\xb7\xf6l$e\xa9\xdd2g\x89~\x1eE\x94\xd5B\xff>@\xf2\xd3A\x147\xaa\xb9D' !`\x97\x97\x15\x08\xe5GPN\x07U\xaa\xa9emi\x0b\xa7\x9b\x01\x9e\x9eQ\xbf\xcb\x0ba\x9c@\xdd\xa3v\xf0\xde\x0eP\x882\xca\xcf\x1e\x97yi\xfe.\xd1+j\xa8\xff\xd1\xe9\xe0R\xee\x1b\x7fT\xc7y2\x1c\x7f\x97P:\x9b\\!\x19\xee\x8e\xcfI \xa5\xa8N \xadJ\xe3N+\xe1\x90ifZkg\xc2\xe7\xb4t\xbdm\x80\xc6$\x18\xc1\x8f\x12\x89~\x98q\xa2\xc9\xe1\xdf\xb9\x82#\xafU\xbd\x9f\x1a\xf5\xb3\x1b)bC\xe3$1Q\x9c\x19\xf3\x98-\xe2\x11\x13\xc5'D9b\xa28/\xb211\xae1sTcBLc\xee\x88\xc6l\xf1\x8cy\xa3\x19\xb3\xc52\xfc\x91\x8c\xd9\xe2\x181Q\xbc\x07\xd3b\x151Q\xfcW\xfe\xbeg\x8eD\xc4D\xf1i\x11\x07J\xeetL\x14\xef@L\x147\x10\x13\xc5;\xff\x9e\x10; D\x0e\xe8q\x03o\xd4 &\x8a\xcf\x1c#\x985B0g| &\x8a\xc7D\xf1\x1e\x16Z\x0c\x80\x10\x01\x88\x89\xe2\xe1~\xff\xf0\xd5\xf5\xfa\xfc}\x1e\x7fo\xa2\xb8\xc3G\xe9\xf4\x9bvq<@\x90\x10\xde\x0b\x1e\xf7\x1f\xd3\xc8C\xdc\xa91\x8d\xbc\x03s\xb9V}\xce\xd5@\xf7\xea\xdc\x0e\xd6\x98F\x1e\xeel\x9d\xecn\x9d\xdd\xe1:\xc9\xe5:\xbf\xd3uF\xb7\xeb\xdc\x8e\xd7\x19]\xaf\x14\xe7\xeb\x8c\xee\xd7\x98FNt\xccNu\xcd\x8e\xd0\xc54\xf2\x98FNv\xe1\xc64\xf2\x0e\xc44r\x92\xb3\x97\xe5\xee\x8di\xe41\x8d\\\x03\xc1\x19\xccq\x07\x13\x1c\xc21\x8d<\xa6\x91\xc74\xf2\x98F\xeew \x93]\xc8$'rL#\x9f\xc3\x9d=\xd4\x11\xf3\xc7'\x847b\xfe8/\xa411\xa01s8cB0c\xeeP\xc6l\x81\x8cy\xc3\x18\xb3\x051\xfc!\x8c\xd9\x02\x181\x7f\xbc\x07\xd3\x82\x141\x7f\xfcW\xfe\xbeg\x0eA\xc4\xfc\xf1i\xa1\x06JJu\xcc\x1f\xef@\xcc\x1f7\x10\xf3\xc7;\xff\x9e\x104 \x84\x0c\xe8\x01\x03o\xb8 \xe6\x8f\xcf\x1c\x1c\x98540g` \xe6\x8f\xc7\xfc\xf1\x1e\x16\x9a\xf3\x9f\xe0\xfa\x8f\xf9\xe3\xe1\x0e\xff\xf0\xd5\xf5:\xfb}\xae~#\xb4\xc5\x97}Z\xa0\x9e\xc4\x81yaL\x8buR\x89o\xaat\xd7\xaa\xb5Xi\x11\xf9\x01|\xbe\x16Z\x84]\x15IVWCQ\xfd \xb5\xfaf\xf1\xf6\xc5!\x13\xeb\x85\xf2p\x1c\xb6[e\xfa\x0d\x15g\x85\xa1K\xbeu.\xca\xecn\xa5\xed\xfeD\xf7\xd7\xce\x05\xeei\xabm\x95g\xeb\xda\xbb\"\x17\xf7C\xcfu\xda[\xd4]r\x03\xc9~\xbfU^\x824SvPR\x89v\xf8\xfat\xc5\xab\xcb(\xff-\\\xa5\x9fD {Q\xec\xd2\xb2T}V9\x88/buh\x8c1\x15E\xd0\xc7U}Vh)\xd7\x19\xb9\x9c\x89\xdbQ\xfct\xec\xff\x1d\xf9~\xc7~_5\x89\xeeK\x9f\xc8*\xebo\x84\xf3\x9b\xe8}\x8e\xde\xe7\xe8}\x8e\xde\xe7\xe8}\x8e\xde\xe7\xe8}\x86\xe8}n!z\x9f\xa3\xf79z\x9f\xa3\xf79z\x9f)+\x15\xbd\xcf\xd1\xfb\x8c9y\xa2\xf7\xb9\x81\xe8}\x8e\xde\xe7\xe8}\x8e\xdeg\x9b\xf7y\xe8y\x1e\xbbGA|\xa9D\xb6\x96\x0bm\x9c\xd0\xd55,\xf3\xeaZ\x1b\x12\xebu!J);j\xa9P{@k|\x92Kj\xbfis\xc6\x9e*\xcbSYSi\xa6\xf4\xe32-5Q\xd4\xf7\xaa8\xb8\xfe\xb7\xcd\x8b\xab\xd2\x83\xbf\xd7=\xa9\xff\xf0S\xd7\xd5\xa8\x8e\\\x1ce\xe41\xeebA\xcc\xbf\x91\xf7\xd8\xf3\xbd\xc5\x93\xdcm5\x1a+8\xc6\x0bV\xdfr\xfb\x9b\xe5\x127x\x8dT\x0d3z\x9b5\xb8\n\xbc\xc0\xac\x9eg\x0d\xb3\xf9\x9f58\x8a\xbd\xc04_\xb4\x86\xb9<\xd2\x1a|\x85_ \xd4;\xad!\xd8G\x8d\xd3\xeef\xafx\xc8Z\x04\x06\xa6\xf8\xabQl\xfap\xb2\x16\x83\x81\x89\xbek\x14\xe1ao-\n\x03\x81~l\x14\x91\xa3X\x0cL\xf7p\x1b$\x04?7\xda\x92\xec\xfb\xd60\xc1\x03\xaea\x82\x1f\xdc\xb6\xd1-C\x9d\xcdC\xaea^?\xb9\x86\xd9\xbc\xe5\x1a\xfc>s\x0d\xb3y\xce5\xd8\x8b\xcf\xc0D/:.+\xd0\"40\xc1\xbf\x8e\x8b\x07\xe3s\xb7\x16\xa3\x81\xe9\xbev\x0d\xa1\x1ew\x14\x99\xcd\x0b\xaf!\xd0\x17\xaf\x01-P\x03~\xfd\xc6Q\xa8\x06\x88\xeaO\xa0\xa7\x1e\x97\xec\xd6\xa25@\x18\xcd4\xdf\xfd\x08\x9d\xf2\xe5\xa3\x05l`\x1e?\xbe\x86i\xde\xfc\x11:\xa5^\xa1\x9a\xccD\xcf\xfe\xb8'\xa4\xa8\x0dL\xf4\xf7k\xf0\xd4w\x01W\x81\x1b\xa0D\x004\xa0u'X\xd1\x00\x0d6<\xc8\xdd\xfdI\xf1\x01\x0dt\xe2\xf8b\x05\x1a|T\xf0\xc6\x0d40\xa2\x07\x1a\x90B\"\xce\xa280K]\x99\xfd\x88\xef\xb8\xd7\xa2J\xd6I\x9506\\;z\xd7\xb6S\x83\xba\x94\xa3 \xa3;9\xbf\x089c\x9c\xb6\x89/\xe64I@\x8c\xb0\xf5\x19Q\xc3Xlh\xc0\x85\x87\x06\\\x84h\xf0\xcdh\xba8\xd10Q\xa8\xe0\x94\x1ew\xc3\x115\x1a&\n\x9c\x11>-\x80,\xc1o\xae\xf0\xd10\x12A\x1a\xb0\x0d\xa1a\xb4-\xba\x0dP\xc6\x9eA4ip\x998\x13\xc4\x94AN\x13V\xbd9u\x84\xc9pg\x9a\x19vO/9\xbd\xbaoX\xe5\x8d\xcd.9\x83\xa3*\xf4\xb6\x92l<\xec[\xfdM\xb3\xda\xbd61M\xfe\xd2\x92\xc9\x98\xdc\x8ag:\xf8\x9e\xc0\xb7\x0d\x8b\xac\xd3r\xbfMn8c\xeb-K\xdd\x1e\xd2l\x9d\xae\x92\xaa\xd6\xf5\xcb\xc3\xd5\x95(\xa5FV\xefT\xb98\xcd0\xc7\xcduR\xf7j+\x0d\xcc\xc6D\x94\x12\x8f3\xae\xbb\xa8\xbe\xf7\xdd\xdd\xe1\x8a\xdeU\xa2\xb4k\x9a\xf42\x06\x95\xee~O\\=\x86\xe7\n\x11<\x95[\xca`)ov\xcb|\xcb\x19Vo)usc\xdf\xe9\xbe\xea\xbf\x99L\xbe\xf2:\xff\x9c\x81J\xa77ICj4O/\xde\xbe\xbe\xaf\xd32;\x08W}gx\xcd\x03\xa5\x8a>\xe8Nj\x12\xf7}\xff8\xa9\xea\x0f\x0eE\x1a<\xc1\xf7\xefNU\x96\x15\xac\xf3\xd5A%\xc4\xdc\xcb\xa5\x8c\x86|\xb3\xf9fu\x9d\xa4\xd9}\xcd\x0dmfE\xe3\xb9\xef\xa0I3}\xeaHc\x10\xde\xd6I~\x84)\xfc\xbe\x9d\xc2\xe5uR^O\x99\xc7\x1f\x92\xf2Z\x8b\xb2\xf2:y\xf4\xbb\xdf\x83D\xa8b\x1d\xed\xe4\xf6yjn\x0e\xbc\x7fw*\xad\x99\xbb\xf5%\x85\x9ek\xe5\x93(\xd2\xcd\x8d\x9axw\njy\x0c\xaau\xba\xce\xeeVuNW\xc0\xa4\xf1=j\x94,\x82\xcc\xac[$\x14\xdd\xed,)\x12sF\x104\xb7Rd\xebK\x91%\xcb\xadX\x7fM*\xd9hH\xdd\xef\x97y\xbe\x15I\xf7\x08qi;\xe7\"[\xbf\xd4\xe8t\x1e\xe9J\xfb\x04jE%\xe9\xd1\x00\xca*\xa9\x0e%\xdc\xfb|-\x94\xa37\x19O\x02\xd2\xb2\xaf\x01H\x04\xb2\xf5}\x8b\xdb\xb47\xa0\x17r\xb9\xa5@^?\x86\xf7\xa5\x92n\xdd\x11\xa6\x994\xcb\x93\x9d:\xab\xd7\xcd\xb7=\x8f\xc4\xab\xbc0\xf7lN\x9a`g&>oo\xe4\x9e\x95\x93\xe8\xce\xa8vW\xd4No\xdd\xac\x83L/`\x0f\xffy\x95\x17*\xa8\xa7S.u\xc2\xe0.\xc9\xd2\xfda\xdb \n\xa6eW\x1a\xe8t\xc2\xcf\xe3<\xc5\x8fB\xec\xd5\xa5\xa1\xce\xdftN`\x7f\xb3\xfc\xfb\x89\xc6\xa9B\xb8\xe2KZV\xfa\xd0^&\xab\x8f\x9f\x93b]\x0e\xf2<{:Z=/\xd8\xa4[\xd1\x9cSu\x98\xfa\xd2\xc5\xe4]^\xea-\x9a\xdeH\xbd\xd3H-\x8c\xa8D\xd1*Kr\xef\xc1._\x1f\xb6\xc2\xb6#\x95W\xf0\xe9v\xfbL{G\xf8\x172j\xb7\xcaWe2a\xae9\xeb\xe7.\xddq\x06\x07\xdd\xdc.:\xaa\x93n45\xb3PF\x8bh\xfe-\x8f\xa6\xad\xb6\x80\xa4\xf0)\xa7\x84A4#6\x7f\xae\xf7u\x0c\x83\xc40\xc81\xc3 \x88\xfc\"\xc5B\xdaf5\xb6wg\xcf\xcd \xdd\xf1\x10\x85\xa0n\x1c*2\x87\x12\x93\xb4\x1b\x10AhY\xf5\x18\x9f@8e\xb0d\x14.\xa9\x9b\x90Ce\xaa\x95\xb2\xa6\x8d\x12\xfd\xecF\xfd\xed\\\x91\x9d\xcd-\xbb\x9e\xbf\x13m\x847\x1c\x92\xc2\xcf \x16\x1f(X\x0eu\xb09},\x87;x\xeeH\xa2\x87<\xb8\xe4\x9ai\xe7\xf6&\x02\x84\xfbHQdH`\xa5\x05\x9b\xaf\x14\x9a\x89\xe0\xfeR\xf0\xf8L\x818\xd3\xb9|\xa7\x10\xe6?E\xf18\x035-\xf0\xfd\xa80\xd1\x97\x8a\"l\x02:\x8e\xcbDa>U\xb0\xfbU\xc1\xb1\xc94X\xfc\xab\xe0\xdf \xb3\xf9Y\xc1\xabG\xcd\xe0o\x05\xe0\xfa\\\x01f\xf6\xbb\xc2\xc8\xf7\n.*\xbb\xb7\xe5\x14?\xec\x00U\x87\xeb\xbe\xed\xb1\xd6\xc8\x1f\x0b\xe4\xf1\x8e\x96p\xa2o\xb6\x83\x02\xf5\xcf\xc2\xc8G\x0b\xe4\xb1z}\xb5\x00\xf3\xf8k\x01\xf1\xd9\x02y\x98#\x16\x98\xec\xbf\x1d\xe0S\x97\xecW\xe3\x84f\xaa\x1f\x17|\xbe\\\x18\xfas!|\xf23\xf9v\x81\xe6\xdf\x05\x9f\x8f\x17P?/L\x9a\xdf$\x9f\xef\x00]\x95\xdb\xfc\xbe\x00!\xbe_\xf0\x13\xc4.\x0f\xf8~`\xc0|\xc1N\x9d\xdc\xaf+\xd3k\x91\xf4p!\xe6\x1c\x9c\xaa2\x18\xabd\xab\x15\x86\xf1\x00\x9a>\x97\x07y\x82\xad\x84J^\xd52\xaf\xb9\xc2\xaf\x0d\xfd\xfa\xe8L3e\x8cHc\x97l\x12D+ Z\x01\xd1\n\x88V@\xb4\x02\xa2\x15\x10\xad\x80\x06hc\x8dV\x80\x86h\x05D+\xe0_\xd3\n\x98_\xf1\xf7j\xe6\xea\xe6BY\x9b\x1fl\xf5\\\x1f8\xb9\xc21T\xd1\xe7\x8d\x84\x8f\xae\xd5t\xb1\xa0g\x7f\x8f\xe83]\xb1\xd10\ndu\xc7rK\x8a?\x1e\xeb\xf74\xf3i\xd0\xc1\x81\xaf\x11\xa6)\xf1\xaf\x11\xb2:\x1e6\xfa;-,\xa6\xc15\xf5\xc9Wxz\xd8\xccu\x9e\xde\x1f'\xdf\xea\xe9o\x86\xfa\x86\x0f\xc6\x95\xe0\xb8\xe8\xd3\xfb\xde)\x16c\x12DL\x82\xf8e$A\xd8O\xb1\x1ec\xbe;{\xde\x1e\xa7R7\xa9q\x8c\x9b\xabOu}\xecf\xc7`{\xe5w\xdf.\xbe#\x1e\xaf\xf1\\\x8d\xe7j\x19\xc7S;mq\xea\x8cd2\x9eV\xd3s1\xab\x9f\x9a\x86\xca\x19]c\x1b\\\xb8\xa3\x11\xcc\xf4\xac\xb1\xe1T\xab\x11\xf6I\xe69n\x9em\xf3\xd5G\xf2\x11s-\x92\xb5yj\x19m\x827\x03\xfdfT\x99\x8e\xeatn\xe9\xf7\\\xaerV\x1eJX%{m\xc8hS\xc4\xfc\xb98l\xeb{F\xfb\"\x97\x92I\x05\x94\x1b\xea\x0d\xd0\xc9\xb6\xea'\x95\xee\x7f2\x94;i\xb6\xda\x1e\xd6\xfa\x02\xd3\xb6\xf3\xa1\x16u\x0dC\xebw\x8b\x15\xb3\xab\xde5S\x8e\x89\xa4x6\xcd\xb3\xbb\xa3\x1cE\xa9# \xa8\x8a$+\xd5\x05\x03\xd8%\xab\xeb4\x13]i\xadz\xbeL\xd1\xec\xb7\x11\x99\x87b\xc0\xf1\xa9\xfd\xc6`\x95\x92+\xbd\x19\x14\xeb\xa4\x12\xdf\xc8v\x9d_\xb7IY]*\xe2YF\xcf\xe2^\xecb\x04\x91\xdb\x90\xb3v\x9f\x14\xd5e)\xaa\xcb\xe1\xde5\xe0\xd0N\xdc\xfa jE5?\xa1\xeag\x17|\xb78q2\x80\x8f\x14\xe0Sgj\x99s\x96\x14U)\xaa?(\xaa\xfc\n\xf9@I\xc6\xd3\x17\xc3e^\xe5\xbb]Zq\xea\xb3YGSw$Q\xe9=\xa5\xf7\xb0\xdcz\x9d\xef\xe4?g\xe8\xeeS\xb2M\xd7I\x95\x17\xe5\x0c\xc8\x86c\xdf\x14\xea\xde\x9a\x902\x00\xf2C\xb5?T\xed\xdf\xf6\x85\xf8\xa4\xa7\xd6\xc1\xa0\\\x06\xb3\x8e\xa9\x91\x903\xe0J\xf6\xfb\x19\xb0(~\xa9-\xfe\x19\xd0\x89O\xe9Zd+1\x03\xaaf\xfd\xdacep\xee\xca\x8d\x9f\x97\xa2\xb8D\xeb\xcfX\xfbs\x9fmC\xa4\xc6\xc1\x90\x17\xe9U\x9a%\xf5\x01\xd4|f\xca\x80\x9c\xd4\xd3\xa8FZn\"u\xa5gbu\xfd\xdd\xa3z4\xa3\xb4\xf1\xd3\xae\x1a\\'q\x1b=\xeb\x83$K\xf9\xe1D\xd5\xd4\xae\x1dr\xe7/\xfet\x02\x9f\xd5\x81\xfbI\x14\x15\x8c.\xb9+\xfb\xbf\xd7\xe7\xb0K\x95\x17.\xaaJ\x14\xf0\xfe\xbf-\x9a\xb7\x96;==\xb2U\x1fU>b;\xea\x9a,Z\x80\x1b|\xc1E\xb7\xab/\xd3mYT\xf6\xd2\x9c\x87#\xa6\xb8\xf8R\xea\x9bk\xc6\xaf\xa7\xf4\x08mnh\xad\xe1?5\x01\x16\x7fPG\xfeo\x1e\x8e\xd6X;\x91\xb3\xbc\xd2\x89M_Jh|\x80J\xc4,\x00\xfe,\xee\x16\x02\xfe\xdf\xa1\xac \xb9*\x84\x90*O>|tQ\x82\xbe\xab\xbfI\x8br|\x05A)\xe9;\x91d\xf5\x88\xf5\xb0\x9e\xee\xf7\xea\xe6\xe1:\x17\xa5\x1a\x84V\xaa\xd4E\x88R\xc8\xe1\x8c\x9c\xce/\xb45\xda\xa9|S\n}9[*H\xc9J\x92\xaa4x\x9a\xdc\xe9\xae\x0c5\xc2 \x88\x05\xc6\x8d!\x8c\x0f\xd8>\x8d\xc6\xae\xb9\xfc\x94W\xe2\x12\x1f\x88\x06\xa7^\xe2\xd3L\x00\x14~\xd4o\x01~\xe4@\xe8\x00\x0c\x1a\xeb\xaf\x04ME\x83\xc8\x0e\x96\xfa\x1e\x06\xbe\x81\xf3\xd3\xef\xdf\xbc|q\xf9\xfa\xfc\xfb\xcb\x8b\xff9{y\xf9\xfe\xcd\x9f\xde\xbc\xfd\xf3\x1bf\xab\xb3w/\x7f|{\xf1\x92\xdf\xea\xf9\xdb\xd7\xafO/\xd8\xed\xde\x9e\xbd=\x7f\xfa\x83\xa3Y}\xfb\xe5q\xc0\xfc|^\xa4.\x9c\xa7W\x99X\xbf.\xaf.\x1a\x13[\x1d\x02\xf9FE\x8c\xc4\x1av\xa2,\x93+1~\x89u\x0c\xcd\xa19\x12\x10\x03\xb0\xd2\xff1\xfc\x98Wb\xfc\x8e\xbf\xb7\xb5\xa6\xe7c8SGd\xb2\xb5\xa3\xc0\xec\xa3>\x10\x99\xd3\xa7\xa7k(\xf2C\x86^\xa03\xe07\x084t\xba\xfb\xee\x91\xf5;\xdc\xd8\xea\x03a\x8f\x03q\x9f\x83\xd3\x1ei\x81HR\xf0\xd9(]\xf0\x1ap} \xce\x1a\x183\x07p\x9az\x83\x0f\x89\xebl\x80\xc6^\x06(\x8b\x00\xbc\x85\x00\xceb\x10\xccG\xf4\xf3\xb119\xfcl'\xca*\xd9!n\xa6\xceG\xb4I\xb9<\x15}h\xec/\\\xcb\xef\x03\xb3w')\xdb\x8e\x07\xb1\xa31P\xf9\x89&7\x9a\xf4\x00\x7f\x97\xf3\xcc\x94wL\xc9S\xa1\x1d\xa3q\xb87\xd4\xaa/\xd6\xdd\xd4U\x15\xd3}26\x89\xfa\x90f\x1d\x13\xcfDn\x9d-\x92\xb2\xccW\xa9\xba\xc6\xa7\xd5[\xeb\xd7\xe2K%\xb2\xb1O\xb7\x0f?3-\x9b1\xd6\xf1\x9c6\x8a\xd1\xf1V.\xe0m\xff&\xe3\x18\xd4\x12\xd4NW\xa1]@n2\xd6\xeaDI \xdf\xe5/\x81)[B\xfa\xd9\xd3\x89\xad\xcb\xba\x9d\xa0\x05\x0e#\xdeE\xd8\xd3\x89@.,\xb6x\xde\xf5\xa1\x12H\x11\xa7W\x8ce_\x08i{@\xaf;\xf5\x97M\x81\x14\x033\xd0\xfa\xc2\xa0scl\x0c\x1d\xe5\x13\xfbY\x99=\xcbh\xf6D\xb3\x07\xa2\xd9\x83\x02\x919izi4{\x80NR\xa0\x9fO\xd1\xec\xe9\x01e\x11\x80\xb7\x10\xc0Y\x8ch\xf6P{\x8ffO\x0d\x9cc*\x9a=3\xd32\x9a=8L \xa4\x9f=\x9d\xd8\xa2\xd9\x83\xc3Lf\x8f:\xa7/?\xe5U\x9a]]\xaa\x1a\xden\x13\xc8\xc9P\xfe\xb3\xb9\x15\xe4\xc7\xef\xcb{F2zq\x9d\x8d\x94\xa5\x7fa\xc2wr\xfd_\xd6\xc1\xbb6\x90i\xc2y:\x80\xdd\x10 EU\xdb\x1f\xd5\xe7\\\xb6\xdfl\xd3\x95J\xe4\x95\x1c\x83\xac\xf1Vj\xf5\x97\xba\xfc\xe8eRU\xc9\xea\xe31\x83\x87\x9d\x11]Z\x92 5\x10\xd4N__\xd0\x10\x83\xa0\xea\x12\xfa\x03b\x9f\x80\xe4s\xe2@\xec\x14\x18\x1d\x83-#\x14\x07J\x9e\xa8\xa5%}\xec\xc0\x1c?\xd83Mq l\xd4!\x98\x8d\x8bf\xa5\xe2\x80\xe6\xaa\xe2p\x1b\x03\xa2\x88\x95!\xd0s`I\xe8\xd0\xfav\x0f\x95\x82\x90\x1b\xe8=o\xa8\xa7L;6\x1f\xe7\xd1OP\xe2\xe9I\x9c\x89\x06\xea|4\xb0\xe4\x10{#17\xd1\xfe\xb0\x1c\xd77\xb4\x01\x8b(\xc0&\x8c\x04\xb1~\xf4\xbb\xdf=\xfc\xdf\xd4\xcf\x03\x08\x04|\"\x81\xaaA\xb7\xda?\xfa\xdd\xef?>\xfc\xda\x86\xc6=\x9d\xcf\x0e\xcbm\xba\xfa\x93\xb8\xe9\x19\xf3\x1f\xc5M\xb7\xaa\"\xfd|=\x94B\x17-\xfd\xb1\xd9\xac\x84\x96\x94L\x93>\xb0\x89\xc95\\\x1a\xe7\xcb\xbeH\xf3\"\xadX{\xe2(\xe32#\xf2\x0d\x84\xb1-9\x1b\x92!\xa7\x98D`\xf18CB1\x08\x01Lb\x00_61\x89\x02\\\xc2@\x88T:\xfe\xa0x\xf2\x88*\x8d\xa4\x9c!!\xe4\xca\"\xae$b\x12\x90\xbe\xdb!T\x06\x1dmD\xf4\xa4\xc0\xa6\x05}(\xfeaH}5\xcf.\xdd\x0e[B\x8f\xfe\x9e\x967\x7fK\xb2*\xcd\xc4\xa5_\xe3\xf4k\x9a\x1e\x0d\x93$\xa4h\xa2\x89$\xa1 \x14\xd2@\xdc\xe7$yL\x9a$\x90'\n\x1c\xe9K\x9e0\xd0'\x0du%M\xfd\x0c\xcc\xb2_\xac\xd3[\x9f\xfc{Q\xa9>\x9f\xdd\xe8\xea\x8f\xecW1\xc6G\x13\xe7\x84\x9d\\i\xd5y\x04\x05\x1c\x90\x96c\xc7}\xe4\xb8\x8e\x9b9O\\\xe7\xf1\x82\x1e-\x83\xfb3\xf57w_\x88}!\xa4\xb0Z?\x86\xfdV$\xa5P\xba\xfe\x87r\xfdQg\xd1\x7f\x804++\x91\xac\xef\x06-\xebi\xb7\x19B\xc7\xe8\xbb\x97\x10\x8a\xd7~\xc3 \x14#\xe1\xae@(jO\xd6\x7f(ZZ\xfe\xbe?[?\xac\xff\x99\xf2\xee\xc7\xcf\x8e\x05\xa8h\xa3b\xf7\xd0\xe0\xc1C \xd6\xe0G\xb8\x95HQ{f(\x82\x0f3\x17\xc2\x07O1|\x98\xa5 >\xb4\xcc:\xbd(>xj\xdb\xb3X\xc7^^b\x02\xff\x04W\xa4`\x14\xce\x07\x7fo@\xe8\x11\xbcE\xf4\x81\xd6\x11\x10;\x03\x83\xce\xf9\x85w'v\x81\x96p\x1dVe\x12oI\xa94imIL\xae\x0e\xaa8 \xd3\xaaN\x02I\x8c\xf5a\xd6\xea\x93\xc0\xa9@ \x93\xabP\xda0\xd0+Q\x02\xf9\xb2\x16\x83\xa1)Z\xbd\x06\xd2\x05-\x9a)\xa1\xc1\x16\xfb\x19\x03\xf5R\x16Qv\x00C~\x80\xd7\xaai\x81Av\xf0\x9d\xf0C \x99\x8a}`P\x03\x98\x14\x91\xc0\xbap\xc5\xe1\x0b\x03t\xd64@](\xe0/\x16p\x17\x8ch\xa8\xa2M(\x97\xaa\xbc\xa1\xef\xe6C\xfaD}>\x96>\x90B8]\x08\x18\x89\x97\xd4\x8c\n\x98\xc0\xe4C\xba|\"\xdf\x079\x06\x05\xf8\xc7(\xb1:\xa6\x17\xcf\xa0\x04!\xb7B&\xb0\xaad\x02\xb5R&|]t\x9e\xabr&\x84T\xcf\x04R\x05M\xe0W\xd1\x84\xaf\x95\xc8N\xb6\xf6\"\x1b\x15\x85\xf5V\xd6\x849\xaak\xc2\x94\n\x9b\xc0$\xdal\x956\x81Qm\x13\xfc\x157\xc1\xfb\xd8\x00\xd0\x95\x1a\xaa2\x13\xcd\xc3h\x1e\xda!\x9a\x87t\x1d<\x9a\x87>`\x90\x1dxgf4\x0fIm\xa8\x0b\x05\xfc\xc5\x02\xee\x82E\xf3p\x04\x01#\xf1\x92:\x9a\x87\xfcc4\x9a\x87\x1d86\x9d\xa3yx\xabD\x8e\xe6\xa1\x8fh_\xb3yH\xbf]\x04t\x06\xa4\xe9\x11\xc4\x07\x1a`\xee~I\xe78\xb3G\xdf\xf9Me\x97\x19\x1fo\x00\xf6\x03\x0e\x10\xf0\x88\x03\xd0\xd4^\x8a\xaaK~\xd0\x01h}\x02\xb1_\xe0<\xee\x00\xf4\xbe\x81\xd1?\x90\x1fz\x00\xde\x00\x809\x08\xe0=\xfa\x00@\xcf\xa4\xc6\x819\x17\x08\x98\x0fp\x1f\x81\x00\xba\x00\x18\x82\x11\x08\xe4\xb7\x1740\x1e\x84\x80[\x1e\x1cUt\x0d\x81\x96%NF\x87g\x93S\xddN\x06<9\xe68P3\xcf\xc9\x08\xb1\x0cu\x7f>:\x0e\xd4,u\x1c8\x8fK@\x08\xe3\xd1\xdcg\x06\xd8\xe8\xa9g~\x17\xa8\x0fN\xc0\xb4\x01\xf9T\x82>\xb0\x1f\x9f\x80\xdb\x93\x9d\x1c'\x0f\x84\x11\x0dx&K\x0b\x01^:\x03\x01\xd4\x83@\n\x020\xbdw\x068\xde\x93!\xf0w\x86\x01\xee\x82C\xf8\xa2C\xe8\xc2\x07y\xfb\x0c0\xbc~\x06\xfc7\x1cp\x08\xa0K\x00=\xe8w$p`=h\x01\xb74-\xef\xbd\x06\x1cnch\xf4B)-P/z\x90\x11\xda\xee\xd3\x8d\x81vM\x04\x87\xdb \xa7\xef\xa2 \x0e\xb712\xcec\x18pKc\"\\v\xc1\xe16\x06\xc7~$\x03ni`\xb4\x0b78\xf8\xaf\xe1\xe0p\xfcy\x85Xg\xc4\xfb>$\\\x94\xb78\x80\xfc\x1e\x07\xf0\xd52\xae:\xf6\x15\x1a$\xa48\xbf\x81\x10\x8d\x90\x1eW3\x10-\x11\xc6\x1e\xd4\x10-\x11+\xf0\xb7\x84\x01\xee\x82C\xf8\xa2C\xe8\xc2\xdf\xb6%\xc2{\xf7\x03\x1a\x8aP*\x97\x1b V07\x10\xc4\xc0a\xeck$\x13\xf3-\x10\x98\xc2\x18\xb4\x1c\xc4>p\xcaV\xd9\x81Q\xd0\xca\x0e\x8cRWv\xa0\x15\xc1\xb2\x03\xbb<\x96\x1d\xf8\xa6\x97\x06b\xa5-&Vo].;\xb0\xf3y\xfa\x10\xcc\xcf\xc1b\x8e\x108\x1d\xc3\xe4a\xf2<\xa9\x1a\xc89\x15}\x98!\x88\x14\xd4\xc0\x90!\xe4\xf3\x80\x17\xd2~E\xbb\xb4\x15\x9f\x0b\xe9\xfe\x95\x82.>\x172\x04\x9f\xd2\x12\xb5J\x8cU\xe2s!\xc3\x1f\x19\xf3\xf2\xde\"\x89\xcf\x8580\x12nP\x84\xa2\xfe%?\x17\xe2?\xcb\x87\x1d\xa8\xf7\x07\xaf\x05\xe4Ez\x95fI}\xd06\x9f\x19O\xf6 \x82JOVj\x93\x89\xd4m\x9f\xf5\x1f\x1dD\x1a\x9cfp!\xcc\xe3\x83'P]\xcb\xbe\xeb\xb2\x84\x1f$\xc9\xca\x0f'\xb0\xaa\x02\xf1Q\x95\xf8\xa8\x8aOw\x8a\x8f\xaa\xf4\xbf\xf1io\x1ah\x19\xeb\xb1j.m\xbe~1\xd6\x87X5\xd7\x1f\xfc\x07\x1eCSl\x1f\x0d\xa4\xdbt4\x83K\x83+\x88\xd2\x07\xea\xad9\xa2\xec\x00\x86\xfc\x00\xaf\xed\xd7\x02\x83\xec\xe0;\xe1\x87@2\xa8\xfb\xc0\xa0\x060)\"\x81u\xdb\x8d\xc3\x17\x06\xe8\xaci\x80\xbaP\xc0_,\xe0.\x18\xd1\x9cG\x9bPn\xady\x9d\xf3\xcd\x87\xf4\x89\xfa\xaa\xc2m\x19\xcd\xc3\x16\xa2y\x18\xcdC\x17\x10e\x070\xe4\x070\xac\x0e\x06\xd9\x81wfF\xf3\x90\xd4\x86\xbaP\xc0_,\xe0.X4\x0fG\x100\x12/\xa9\xa3y\xc8?F\xa3y\xd8\x81c\xd39\x9a\x87\xb7J\xe4h\x1e\xfa\x88\xf65\x9b\x87?\xe3U\x9f\xf8\xa8\xca\x18\xe2\xa3*\xf1Q\x15\xdfw\xac\x01\x00s\x10\x10\x1fU\xd1@\x14\x00C0\x02\x81\xf5nI|T\xc5\x0f\xf1Q\x15\x1c\xa8\xb9\xfc8\xc4GU\xdc0a@>\x95\xa0\x0f\xf1Q\x15\x8e\xc9\xd2B\x80\x97\xce@\x00\xf5 \x90\x82\x00L\xef\x9d\x01\x8e\xf7d\x08\xfc\x9da\x80\xbb\xe0\x10\xbe\xe8\x10\xba\xf0A\xde>\x03\x0c\xaf\x9f\x01\xff=\x10\x1c\x02\xe8\x12@\x0f\xfaM\x12\x1c\xe2\xa3*\xbc\xa1\xf1*\x9bh\xa0^\x87!#\xa4\xd7\x1f\xa5]\xa6\xc1\xe16\xc8\xe9\xbb\x8e\x83\xc3m\x8c,>\xaa\xc2\x1c\\|T\xa5\x03\xc7\x9fW\x88u\xe6\xbf\xfaC\x97,\xf1Q\x95!\xf0\xd5.R\x9c\xdf@\x88FH\x8f\xab\x19\x88\x96\x08c\x0fj\x88\x96\x88\x15\xf8[\xc2\x00w\xc1!|\xd1!t\xe1o\xdb\x12\x89\x8f\xaax\xab*\xe1\x10\xcc\x18\xb4\x1c\xc4>p\xeb2\xe1\xc0\xac\xd6\x84\x03\xb3\x86\x13\x0e\xf4\xcaN8\x04\xd5{\xc2\x81ozi \x96\x8dbb%\x15\x99\xc2\x81\x9d\xcf\xd3\x87`~\x0e\x16s\x84\xc0\xe9\x18&\x0f\x93\xe7I\xd5@\xce\xa9\xe8\xc3\xe4\xb1\xb2H\x1a\xa2\xbck\xa0V\xdbb\xa0\x8c\x8f\xaa\xb8>e\x9dq\x9c\x93\x8dV\x02\xda\x00\xef$g\x9c\xe2\x8c\xd9i\xe0\xccQ\x03[\xc6\x05m\xc6\x80\x8dH.!m\x80M,\x08\"\x18pKK\x1b\x08\"\x1c\x84\x11\x0f\xf8%\xa7\x0d\xdc\xee0C\xb4\x06jIj\x06\xca\xd0\x87\x06\xb8%\xaa\x0d\x04\x119\xc4`\xdb\xf3KW\x1b\xb8\x851\xee\xe3\xa3*\x0e`J@&\x81 \x80H\x10&\xfb\x02\x88\x05!\x04\x83P\xa9w{\x03\xe4\xcb\xbb\xd9\xa5]\xa8\xac\x0b\x91t\x01\x84\xe5I\x10\x98\"\xe3\x8e>:^\x1eo\xd3\x8a7,\xda\x90\xe2\xa3*8\xd0E \xf9\x84 RP\x03C\x86\x90\xcf\x03\xf2\xe4\x81E\x00\xe0J\x7f\x16!\x80G\x0c\xe0\xcb\xfa\xe3\x0e\x87#\xd9\xa92=>\xaa\xd2\x83#\x8c\x85'\xa1\x89\x03 vMq\xdc1{\xf49\xe5\xa8\xfe\xa1\xf8\xa8J\x0b\xae\xd5\x8c\x8f\xaa\x10\xc2\xab\xde\xe3\xc8\x7f\x04\xc5\xf2\xd7=\x88\x8f\xaaP\xa2T\xcc0\x1d3 G\x0f\xbd\x05\x05\xd9\xe2\xa3*\xe4c\xcd\x1bUb\xf4d\x99\xce\xbf\xdc\xa3*\x831\xfc\xa3;\x86g\xfa\x0eO \x95hjMK\x12\xea\x1fN\xb4\xba)\x07U\xa7\xac\xed\x07\xc5\xba;\xa86\xa9\xd8\xaeM\xb9l\xb1\x96'\xfe\xb2_\xa7{4\x94\x86\x1c\xdf\x8bJu\xf8\xecFWn~'\xca}\x9e\x95\xc2\x94\x0c/\xcc\xbf\xd5\xd8\xccU{\xdd\xf6\xbf\x0e\xa2\xb8y0\xc4\x00\xef\xce\x9e\xc3NT\xd7\xf9Zv\xac\x9f\x8dY,\x93R,\xda\xa9.>=\\\x8a*y\xb8\xf8^T?\xc8\xdd\xa6q\x98\xde5\x8f\x8d\xe4\xe5XB\x8eOrT\xc8\xe2\xa2u|\x0cYy\xd8\xc2\xb9\xce\x939@u\xb2\x9c\xc0dMgt\xe2\xceY\xde\xdey\xa2\xa2'\xe9\xe0\xe6\xa1yP\xe8\x85\xd8\x17B\xca\xd8\xf5c\xd8oER\n\xe5.\xfb\xd0\xbcA\xf4\x01\xd2\xac\xacD\xb2\x8e\x8f\x0c\x8d\xc0+f\xcd\xfa\xc5G\x86\xda\xafh\x97\x18\xe3#C\xdd\xbfR\xd0\xc5G\x86\x86\xe0S\xe2\xa3\x95\x85\xb1J|dh\xf8#c^\xde[U\xa8\xf8\xa4\xdd\x8b\n\x1d\xa3\xefVS(\xde\xf8\xc8\x10\x00\xed6\x8f\xff\xdeNX\xff\xcc\x97t\xf4\x8e\x8b\xcf\xe7\xc4\xe7s\xe2\xf39v\xad >\x9f\xd3\xff\xc6\xa7\x97h\xa0\xddM\x88\xf5\x91i\xf3\xf5\x8b\xb1>\xc4\xfa\xc8\xfe4\x0f\xe014E\xab\xd7@\xba7I3%4\xb8\xc2e}\xa0\xde\x8f$\xca\x0e`\xc8\x0f\xf0Z5-0\xc8\x0e\xbe\x13~\x08$S\xb1\x0f\x0cj\x00\x93\"\x12X\xf7\x1a9|a\x80\xce\x9a\x06\xa8\x0b\x05\xfc\xc5\x02\xee\x82\x11\x0dU\xb4 \xe5~\xa27\x0c\xd3|H\x9f\xa8\xcf\xc7\xd2\x07r\xd4\xc9@\xc0H\xbc\xa4\x8e\xf5\x91\xf9\xc7h\xac\x8f\xdc\x81c\xd39\xd6G\xbeU\"\xc7\xfa\xc8>\xa2}\xcd\xf5\x91\xe3\xf39\xdc\x96\xd1\x9f\x13\x9f\xcf\xf1}\xc7\x1a\x000\x07\x01\xf1\xf9\x1c\x0dD\x010\x04#\x10X/\xd4\xc4\xe7s\xfc\x10\x9f\xcf\xc1\x81\x9a\xa5\x8eC|>\xc7\x0d\x13\x06\xe4S \xfa\x10\x9f\xcf\xe1\x98,-\x04x\xe9\x0c\x04P\x0f\x02)\x08\xc0\xf4\xde\x19\xe0xO\x86\xc0\xdf\x19\x06\xb8\x0b\x0e\xe1\x8b\x0e\xa1\x0b\x1f\xe4\xed3\xc0\xf0\xfa\x19\xf0\xdfp\xc0!\x80.\x01\xf4\xa0\xdf\x91\xc0!>\x9f\xc3\x1b\x1a\xaf\x86\x8d\x06\xeaE\x0f2B\xdb}\xba1\xd0\xae\x89\xe0p\x1b\xe4\xf4]4\xc1\xe16F\x16\x9f\xcfa\x0e.>\x9f\xd3\x81\xe3\xcf+\xc4:#\xde\xf7!\xe1\x8a\xcf\xe7\x0c\x81\xafv\x91\xe2\xfc\x06B4Bz\\\xcd@\xb4D\x18{PC\xb4D\xac\xc0\xdf\x12\x06\xb8\x0b\x0e\xe1\x8b\x0e\xa1\x0b\x7f\xdb\x96H|>\xc7[?\x0b\x87`\xc6\xa0\xe5 \xf6\x81[\x81\x0b\x07f].\x1c\x98\xd5\xbap\xa0\xd7\xf0\xc2!\xa8\xb2\x17\x0e|\xd3K\x03\xb1@\x18\x13+\xa9\x9c\x18\x0e\xec|\x9e>\x04\xf3s\xb0\x98#\x04N\xc70y\x98\xc7\xf5)\xeb\x8c\xe3\x9cl\xb4b\xdf\x06x'9\xe3\x14g\xccN\x03g\x8e\x1a\xd82.h3\x06lDr\xb1p\x03lbA\x10\xc1\x80[D\xdc@\x10\xe1 \x8cx\xc0/.n\xe0v\x87\x19\xa25P\x8b\x8f3P\x86>)\xc1-Fn \x88\xc8!\x06\xdb\x9e_\xa4\xdc\xc0-\x8cq\x1f\x9f\xcfq\x00S\x022 \x04\x01D\x820\xd9\x17@,\x08!\x18\x84J\xbd\xdb\x1b _\xde\xcd.\xedBe]\x88\xa4\x0b ,O\x82\xc0\x14\x19w\xf4\xd1\xf1\xf2x\x9bV\xbca\xd1\x86\x14\x9f\xcf\xc1\x81.\x02\xc9'\x04\x91\x82\x1a\x182\x84|\x1e\x90'\x0f,\x02\x00W\xfa\xb3\x08\x01\x87\x10^\xf5\x1eG\xfe#(\x16v\xeeA|>\x87\x12\xa5b\x86\xe9\x98\x019z\xe8-(\xc8\x16\x9f\xcf!\x1fk\xde\xa8\x12\xa3'\xcbt\xfe\xe5\x9e\xcfi\xde\x03iif\x9e\x109O\xb3\x95J\xc8+wy\xf9M\xb9\xfe\x08\xdf.~\xfb\xef\xf1\xb9\x90\x11x\xd9\xca0U|.\xa4\xfd\x8avi+>\x17\xd2\xfd+\x05]|.d\x08>\xa5%j\x95\x18\xab\xc4\xe7B\x86?2\xe6\xe5\xbdE\x12\x9f\x0bq`$\xdc\xa0\x08E\xfdK~.\xc4\x7f\x96\x0f;0\x0f\x0c\xe6Ez\x95fI}\xd06\x9f\x19O\xf6 \x82JOVj\x93\x89\xd4m\x9f\xf5\xdf:D\x1a\x9cfp!\xcc\xd3\x83'P]\xcb\xbe\xeb\xb2\x84\x1f$\xc9\xca\x0f'\xb0\xaa\x02\xf1Q\x95\xf8\xa8\x8aOw\x8a\x8f\xaa\xf4\xbf\xf1io\x1ah\x19\xeb\xb1j.m\xbe~1\xd6\x87X5\xd7\x1f\xfc\x07\x1eCSl\x1f\x0d\xa4\xdbt4\x83K\x83+\x88\xd2\x07\xea\xad9\xa2\xec\x00\x86\xfc\x00\xaf\xed\xd7\x02\x83\xec\xe0;\xe1\x87@2\xa8\xfb\xc0\xa0\x060)\"\x81u\xdb\x8d\xc3\x17\x06\xe8\xaci\x80\xbaP\xc0_,\xe0.\x18\xd1\x9cG\x9bPn\xady\x9d\xf3\xcd\x87\xf4\x89\xfa\xaa\xc2m\x19\xcd\xc3\x16\xa2y\x18\xcdC\x17\x10e\x070\xe4\x070\xac\x0e\x06\xd9\x81wfF\xf3\x90\xd4\x86\xbaP\xc0_,\xe0.X4\x0fG\x100\x12/\xa9\xa3y\xc8?F\xa3y\xd8\x81c\xd39\x9a\x87\xb7J\xe4h\x1e\xfa\x88\xf65\x9b\x87?\xe3U\x9f\xf8\xa8\xca\x18\xe2\xa3*\xf1Q\x15\xdfw\xac\x01\x00s\x10\x10\x1fU\xd1@\x14\x00C0\x02\x81\xf5nI|T\xc5\x0f\xf1Q\x15\x1c\xa8\xb9\xfc8\xc4GU\xdc0a@>\x95\xa0\x0f\xf1Q\x15\x8e\xc9\xd2B\x80\x97\xce@\x00\xf5 \x90\x82\x00L\xef\x9d\x01\x8e\xf7d\x08\xfc\x9da\x80\xbb\xe0\x10\xbe\xe8\x10\xba\xf0A\xde>\x03\x0c\xaf\x9f\x01\xff=\x10\x1c\x02\xe8\x12@\x0f\xfaM\x12\x1c\xe2\xa3*\xbc\xa1\xf1*\x9bh\xa0^\x87!#\xa4\xd7\x1f\xa5]\xa6\xc1\xe16\xc8\xe9\xbb\x8e\x83\xc3m\x8c,>\xaa\xc2\x1c\\|T\xa5\x03\xc7\x9fW\x88u\xe6\xbf\xfaC\x97,\xf1Q\x95!\xf0\xd5.R\x9c\xdf@\x88FH\x8f\xab\x19\x88\x96\x08c\x0fj\x88\x96\x88\x15\xf8[\xc2\x00w\xc1!|\xd1!t\xe1o\xdb\x12\x89\x8f\xaax\xab*\xe1\x10\xcc\x18\xb4\x1c\xc4>p\xeb2\xe1\xc0\xac\xd6\x84\x03\xb3\x86\x13\x0e\xf4\xcaN8\x04\xd5{\xc2\x81ozi \x96\x8dbb%\x15\x99\xc2\x81\x9d\xcf\xd3\x87`~\x0e\x16s\x84\xc0\xe9\x18&\x0f\x93\xe7I\xd5@\xce\xa9\xe8\xc3\xe4\xb1\xb2H\x1a\xa2\xbck\xa0V\xdbb\xa0\x8c\x8f\xaa\xb8>e\x9dq\x9c\x93\x8dV\x02\xda\x00\xef$g\x9c\xe2\x8c\xd9i\xe0\xccQ\x03[\xc6\x05m\xc6\x80\x8dH.!m\x80M,\x08\"\x18pKK\x1b\x08\"\x1c\x84\x11\x0f\xf8%\xa7\x0d\xdc\xee0C\xb4\x06jIj\x06\xca\xd0\x87\x06\xb8%\xaa\x0d\x04\x119\xc4`\xdb\xf3KW\x1b\xb8\x851\xee\xe3\xa3*\x0e`J@&\x81 \x80H\x10&\xfb\x02\x88\x05!\x04\x83P\xa9w{\x03\xe4\xcb\xbb\xd9\xa5]\xa8\xac\x0b\x91t\x01\x84\xe5I\x10\x98\"\xe3\x8e>:^\x1eo\xd3\x8a7,\xda\x90\xe2\xa3*8\xd0E \xf9\x84 RP\x03C\x86\x90\xcf\x03\xf2\xe4\x81E\x00\xe0J\x7f\x16!\x80G\x0c\xe0\xcb\xfa\xe3\x0e\x87#\xd9\xa92=>\xaa\xd2\x83#\x8c\x85'\xa1\x89\x03 vMq\xdc1{\xf49\xe5\xa8\xfe\xa1\xf8\xa8J\x0b\xae\xd5\x8c\x8f\xaa\x10\xc2\xab\xde\xe3\xc8\x7f\x04\xc5\xf2\xd7=\x88\x8f\xaaP\xa2T\xcc0\x1d3 G\x0f\xbd\x05\x05\xd9\xe2\xa3*\xe4c\xcd\x1bUb\xf4d\x99\xce\xbf\xdc\xa3*\x831\xfc\xa3;\x86g\xfa\x0eO \x95hjMK\x12\xea\x1fN\xb4\xba)\x07U\xa7\xac\xed\x07\xc5\xba;\xa86\xa9\xd8\xaeM\xb9l\xb1\x96'\xfe\xb2_\xa7{4\x94\x86\x1c\xdf\x8b\xea\x07\xc9\xed\x95\xea\xf6\x9d(\xf7yV\nS0\xbc0\xffV#3\x17\x8e\xff\xeb \x8a\x9b\x07\xfd\x965\xbawg\xcfa'\xaa\xeb|-;\xd5O\xc6,\x96I)\x16\xed4\x17\x9f\x1e.E\x95<\\4\x18\x1a\xad\xfa\\Tf\x08\x9a\xcdF\"s,$\xb5X\x1c*\x1d(7bg\x13f2c\xd2}$\xd5-\xd2\xdc&\xc5-\xc2\xc0\xbak,v\xa8\xe3\x0cq\x9d\x1f\xb2\xd9\xe5\xa1@Ow\xcf\xc6\xa5h\xb3O\xe1\xfd\xbb\x1f\x1e\x14\xa2\xcc\x0f\xc5J@\x96\xec\xea=t\xc8\xd2\x9f\x0eb{\x03rcU\xe9&\xad\xad\xb0\xaa\xae\xa4d\xcb9(E\x91&\xdb\xf4ob\x8d_\x07\xdb\x17y\x95\xaf\xf2-,\x0f\x9b\x8d(\xcc\xbd\xf5\x85.\xf9\xad\xe7\x02\xbbC\xd9lpH*\xd8\x8a\xa4\xb4\xd40\xc83\x01w\x1e\xdc\x81\xd5uR$\xabJ\x14\x12\x93Pj1\x94\xe2j'\xb2F\xfa\xbc\x7f\xf7\xc3\xdd\x12\xf6Iu\xad:@\xd157\xde\xf1\xde$\x9a\xcda\xbb\xbd\x81\x9f\x0e\xc9VRe\xadiVw\xa1\xa8s/)\xad\x05\x01>\xc8\xee\x1f\\\xe5\xf9\xd5V,\x14-\x96\x87\xcd\xe2\xc5\xa1Pw\xe8>\xdc\xd7\xa3W(\xcb\xeb\xfc\xb0]\xc3R\x95\xa9\xc2oD\xac\x92,\xcf\xd2U\xb2U\x1b\x04\xef\xf1\x9eX\\-N$ \xd5m\xc0;\x8b;RF\xa8R\xee\xab\x95\xd8Wb}\x7f\xf1+\xbc\xe9i\x06{I\xd4t%N\xa0\x12\xc9\xae\x84CyH\xe4\xf4u\x05\x80}\xba\x95\xa3\xabr5\xf9e\x9a%\xc5\x0d$\xdb-N\xbb\x9b\xbd\xa8\xcb\xb9\xab\xba!\xe8G\xe2\xcb^\xac\xcc\xcb\x01\x87\xd2\x94\xe8R\xcc \xbe\xa8\xa5|\x9a\xdd,\xe0\x0f\xf9g\xf1I\x14'J\xb4\xbd\x7f\xf7\x03n\xd5kE@\xa2\xb1\x96\x19)W\xd7b'\xe0\xc3uU\xed?\x9c\xe8\xff\x96\x1fN / \xcb\xeb_O\x14\x97\xad\x92\x0cr\xb5\x9b\x14\x05\xc6'\x89\x86\xc3\xbe\xae7f\xe9O\x14\x9fD\xa1\xc9\xb0K\xf6\xf5\x13\x0br\x06\xca\xde\xab\x0b\x93)\xbfG\xaa\x0b\xd3'\xf8\xdc6\xf9v\x9b\x7f.\x1f[\xd6\xee\xdf\xe0t\xd3\xce@.\xb9),\xd2LR\x9d\xcfey\xd8\x89\xb5\xa5\xf2\xc4\xbf\xc1\xd3\x0c\xfepqq\x06\xdf\xbf\xbc\xa8\xab\xf9\xcb\xb1\xea\x0dz\xa3N/\x9c3\xff2d\xf1\x8b\x9b\xbd\xf8\xeb_\xfe\x8a~\xacd\xf9A\xadu\xcdCZ\xde\x9f\xe8Z\x13\xf9\xfa\xb0\x12\x90d \x8a\"\xb7\xa4m\xff\x1b0F\xe8\x92m\x9e]\xe9\x15I\xc6K&E\xb8:\x81\xf4\xa8\x96c\xdd\xae\xdb\xa7Q\xd1\x106;3\xbbp\x9b.\xd5P\xebC\xa6\x84\xf2\xb0\xdf\xe7\x85:\xc6\xf7\xc9\xea\xe3\x83C&\xff#\x0fo\xbd\xdeJE\x1a\xa2S\xea\x15\xaa\xc9\xe4\x1b8TZ\x12\x1a\xd9RJ)\x9c\xac\xd7\xa9\x164p%2Q\xa8bJ\xda\x8ei\x8a\x14\xfe\xd9b\x81\x1f\x84\xe9\x06\xeeI\x14\xef\xd5\xa0/\xf2{\xbf\x968\xee\xc3\xdf-\xc2\xdd\x86\xe7\x9fv\xda<\xf2\xd0\xe6\x8f\xc9\xa7d2q\xe0\x89R\xf4$\xf6 TH\xcb{\xaf\xf2|\xb1\xda&e\xe9 \x82\x1e\x92l\xa0\xe7\xd3i\x84\xf7\xfbO\xf4\xaf\x0f\x1eH\x96\xf4\x8f\xe9<\xd9 \xa9\x0f=\xd5\xa3\xbb\x12\xd5\x0b\xed\x03;\xcd\xca*\xc9V\xe2\xde}\xee`Q\x1c\xb6\xb1\x8f\xffl\x96\xf6;\xcf\xd2\x9e\xddT\xd7yfY\\=\xb0Wy~o\xb1X\xe0\xa7H\xb3\xb0\xf7\xac\xbf+\xe6WK\xce]q\xd9\xf8T\x93\xf4\xc5\xcb\xf3\xe7\xefN\xcf.\xde\xbe\xbbo\xf3z\xb5\x9b\xc4\xde\x99\xee\xceN\xae\xdfz\xc8\xf5}n\xa9\x89\"I\xf5\xf8 \xfcz\xbf\\\xbc\xca\xf3\xbf/\x16\x0b\x9c\xa3\xe4(O\xa4\xde+\xbfN\xb2\x9b\xfdr\xf1F|v\x0c8\xdd\xa8\xaf\xff\xd7\x13\xc8\xd2\xad\x95\x85\xacT\xb40\xb6\xfd\xfb\xc1D,\xcd\xebQ\xe99,\xdeg\xbb\xa4(\xaf\x93\xedE\xae\xb7\xf6\xd4!\x8f\xfe.mh\xb5\x1a\xe6$\xe8\x16U\xdc\x0f\xcf,\xfd4\xda\x8dqD\x8f\xb0\x1dJD\xeb\xb9\x8bh\x85\x0f6\x87\xedv\xa1~\x90\x9a\xf5]H:\xe7\xaa\xa2\x1f!\x00\xd6Q\xdcQ\xb4\xb9\xf3\x18\xee`\x9b\xa6?\xdd\x85\x9e\xd1\x1d\xecIK\x85K\xcd\xe5M\xb2\x93\xf8\xfe\xaf\x1e\xf2\x7fX?\x96s\x19|K\x9d\xd0\xe9\xa6\xb6\x8c\xfa<\xa1W3-\xe1\xb3\xd8n\xbf\xf9\x98\xe5\x9f3\xb5\xad\xaf\xd5+\x9b\xabCY\xe5;\x0b\x93\xf7Y\xf0Dk\xe0\x03\xbe4\xcf46\xddJF\xcb\xae\x10/\x8bb\xbbq'\x1f\xd4\x860|x\x9do\xd7u \xb3vd\xca\x9fX\xf3/\xd4\xbe\xbb\x9a}\xc7\xf8T7\x0d\xe7\xc2=)\x1e\x0c)FN\x1e\xe3\xc7\xfc\xeb_\xfez\xdf\xc2\xe4Sy\xa4\xdf\x91\x9dM\x14\x19$\xba\x87\x8bG\x0f\x1f\x95w,\xcb\xde\xfd\x97+\xcd\xc5a\x8a\xda\xe3\xe6\xde\x1c\x9e\x00\xac=;\xf2\xc7\xb6jmG\xd4\x98hO\x13 \xf9\xa6\x14M\x84m\x9f\\\xa5\x99\xa2];\x98\x1e\xce\xf6\x83&\xfb*\xc9\xba\x7f5\xe8M\x88\xa9=\x96+,\xc4\x81\x077Tq\x97Q\x94\xc4J\x0f\xab\xa9o\x0f\xd3A\xa7\x17C\x1e\xf9\xbf\xb5\x0b-)K\xed\x1b@\xf2\xd3A\x14\xbaH\xb0D')!`\x97\x97\x15\x08\xe5\xa0R\x1e\xad\x05\x9cV\x9d\xbd\xbb\xafn\xc6u\x84{\x1e\xa2]^\x08\xe3\x89\xec\xea5H&\x87\x97(HeD[\xb6\x9dB\xaf\xa8\xa1\xfe';\xec\x96\xda\xb5a\x9c\xa2\x1d\xcf\xdcp\xfc]B\xad\xf2CV]*$\xc3m\xfe9)\xa1\x14\xd5 \xa4Ui\xfc\xba%\x1c2\xcdLk\xed\x8d\xfa\x9c\xd6\x99{\x9e\xd8&\x16_t\x868k\x04M\xa0\xb3\x8b\xe0\xd9\x8d~\xe3\x96\x1d\xeb|\x93\xaf\xc5i\xb6\xc9\xd9\x11\xceZ\xa3\xbc\xcc\xf2\xb5\xb8L\xb3M>\x8cT\x92\xf6\x8a\xf1\xf9\\\xa25NQDvd\xea\x97GH\xd6\x81\xd3\xd9\xe6`5k\x99\xd2p\x84ha\xd10t\xfd\x15X\x93v\xd66-+\x91\xa9$\x10\xd2\xf7\x99\xa8>\xe7\xc5G\xd2\xb7\x8e%\x1c}\xbb\xbaN\xb2LlK\xd2\xc7V\x19\xb9\xcb\xb3\xf4\xe3\xf0@\xb3 Q{s2{U_l\xaf,8\xd6\xb0\xd8\xafX\xaf\xaaw*\x8f\x8e\xf7\x05csIE\x97D\x9bd\xbf\xbf$\x7f\xccY\xe6\xab\xd4\x95\xc09\xfa|yH\xb7\xeb\xcb*\xb9\xa2\xf1\xc5U\xee\x12\x1b\x16\xeck\xb1G\xb1\x8f\xd3\xe6\xd0\x949+\xcf\xb8S\x1d\xf6I\x85&\x17:w~s\xd6\xed\xf2\xf5a+\x14\x92\xd1G\x8e\xe2\xd0,\xe45\x9e\xd1w%\x9e\x97G\xc3\xbd\xba\x16\xab\x8f\xe5aXA\xbf\xfe\xf5\xb5\xeey\xa8\xdf\xfd\xa8Gr\xda/\x06\xa6\x8f\xb2\xcbr\xfd\x91\xb5\xe8Mgw\xcf\xd3l\xa5\xaa\x8dI<\xdf\x94\xeb\x8f\xf0\xed\xe2\xb7\xdf\xddm\xbe\xedk\x9f\xed\x18P\xfd\x1399\xdbX\xc2\x08[\xf7\xf0\x1f5\xa3e5\x99f\xf2\x80\xaf\x91q\x8e\xf9\xf3\x9bl\x95fW\xecS\xbe\xd4\xed\x86\xe2g\x99\xe7[\x91d\xee\x99\x0e\xfa$N\xb4n\x158OL'bO:&o\x99\x161y+&o\xc5\xe4-\x88\xc9[1y+&o\xc5\xe4-\x0d1y+&o9\xf5\x9b\x98\xbc\x15\x93\xb7b\xf2\xd6\x00b\xf2\x16\xc4\xe4\xad\x98\xbc\x15\x93\xb7B3\xa1\xd0?\xc7\xe4\xad\xe1\x1fc\xf2VL\xde\x8a\xc9[}\x98\x9a\x98\x13\x93\xb7b\xf2\x96\x8fGb\xf2VL\xde\xea@L\xde\xfa\x17M\xderE\x18o9}\xeb\x0f\x9d\xcaK#\x16\x1f\xb3\xf78\x95\xc4\xf3P4c\xdb yR|\xf6\x18\xe5FqQ\xd8}Y\xb4\xc7\x8f\x81\xfa\xa8\xb1\xe5\xd9b\xea\xc3\xc4\xe8\x83\xc3}B\xe0O\x0f\xfb\x1e\x17\x1e?\x1f\x8c\x9008\xb0\xdd\x7f\xa8\xd7\xd9lX\xb6\xc7\xf2\x9c.\x83\xc3\xc6\xe5\xb9\xbc\xdc1\x10\xca\xce\x8ae\xe8H\xc0\x9d\x0b\x86W&\xd3\x98\x08\x15\xe0F\xb9\x81x\x052\xc7Y\xec8\x7f\x9c\x95\xc6\xd0\nc\xf6\x07U\x9d+\xdd\xeb\xd9\xff\xec)\xf2\xb0)\x15\xbd\xf5\xbdL*\x82\xe1\xf8\xbc/\x7f\xf6\x1e\xbfp\xbf\xd9I\x1d\x83\xedeMj\xfb\xf1\xfb\x97\xd4\x96\x8eW*\xa9(,oIR\x9b\xbb_|\xdc[\xdftD\xf1\xdbe\xfd\x10\x919\x95\xf3\"\x95\xbab-\x98aX\xbb\xea\xa4\x1er%\x8d\x9bnh;\x81g\xfd\xc2U\x9d\xdfN3\xb8h\x0e\xe6\x13\x1dc4\x86\xd8\x079\xf5\xf2\xc3 ,\x0f\x95qg\x9c\xbf\xf8\xd3 |\x16\xa6.\x96\xce'\xb0\xf7\xd5\xedJ\x9eMKQU\xa2\x80\xf7\xff\x8d$\x99\xf9_\x91lGZ\x93\xa0},\xd2\xa3i\xe8L=\xb2\xa6\xd1\xcfvD\x97\xcf\x9a\xd9hIxu6\xef\xe7.\xf62\x16]\xad{\xd9\x89\x9c\x9cD\x0f\xb5\xce\x8a<\xdf\xbc\xdd\x93\xc9\xa5>q\x8d\xb8g\x8fPw\x9b\x94\xb4\xdcV\xf8\xa6\xaa\xe7\xd35\xbb\xe4\x14\xb4\xd5\xd5\xc4\xb3W\xc9vu\xd8&\xaa\xbc\xebkQ|\xdc\n(\xf2\xbc\xd2\x89C\x9d\x13`\x95\x1fZ\xff\xc0Rt\xc2\x89&\xb9B;E%\x9eLHUL\xfe\xa64\xa8\xae\x0b0\x93Z\xcc2?t&\x94\xe5\xeb\xc6\xed'%T\xeb\xe6\xd3\x19\x00\x17\xdd\xdd\x99\xc0\xfa\xa0\xb5\xac&\xb4h\xe6\xa9\xacy\xfd\xa11\x0e\x9a\x98`\xbb\x87\x08\xdb\xa6FX\x929!\xdf\x1f9g\xb0\xcfj]\x14\x88\x82aM\x16t:\x06\xc6\xa6p\x8f\x11C\xf1\xb8\xe2\xd4\xd3\x19t4\xe0>\x9bj\x08f\xd6\x1e\x96.\xe3\xf6XVC\x9fq5\xcc\xc7\xbe\x1a\xfaL\xec\xd9\xf6\xea\xfc\xac\xe9\xb5\x97\x7fj\xb0.\xb5\xf7a\x9b\x96*\xff\xcd|\x1f\xb8\xed\xca\xf9\xf6]cZ\x937\x1eE\xe7\x18\xe5\xcf\xa2{\x0f\xdfy\x15\x9a-k\xdd\x05\xee\xa4\x8c\x19sc\xedY\xb1\xf3\xe5\xc3\xce\x96 k\xcd\x81\xc5\xa2O\xc4\xec\xd7\xb9\xf2^\xdd\x19\xafA\xb9\xae\xc1Y\xaej\xbe\xc3\xe4Lk~kpf\xabv\xe5\x0f\xb0YrZ\xa7d\xb3\xaa\xcc\xd5\xe1l\x90\x08_H\x06\xab=[ub\x9e*)C\x95\x9e\x8d:!\x0fuB\x06*\"0f\xcc3\x9d7\xc3t\xb6\xdcR\x7fV\xe9l\xf9\xa4\xb6L\xd2)9\xa4h\xbeh\x15\x98)\xdaf\x85\xa2{m\xd8\xcd\xc4\xec\xd0\xd0\xbcPk\x0eh`\xf6'\x92\xf7i=\xa9i\x01\xa0\xd1\x11\x1e\x98\xdf\xd9\xe6rb\x0b\xfc+\x7f\xdf\xd3\xb29u\xf6f\x07\xdd8\x8fs\x86\x0c\xcei\xb9\x9b\x83m6<\x8d'\xe6k\xd6\x84\xeeb\x9c\x92\x99\xe9L;\xb4dcz\xf30\xc7 I\xf4\xdc\xcbq\xdb\x7fbs\x0d\xca\xb4\xa4L\xd6\x97]i\x9f\x9b7\xa3\x92\x91K9\xcc\x16\xb3\xe5ON\xcf\x9c\x0c\xcf\x99\xecg\x86L\xcc\x93tfH\xdas#]Y\x91(\xb5\xa8\x99\x90\xbe\x1c\xc8a\xf6\xe3\x84\xbcGB\xc6#=\xd7\xd1\x9b\xe5\x88$\x0b\x8e\xbaC\xbe\xf1e3N\xcbcD\x07\xd5\xf9\xcb\xa4\xac\xc5a\x96\xe2\x94\xfcD$\x1fqR&\xe20\xf3p\xce\x9cC[\xb6\xe10\x05k\x98a8On\xe1lY\x85\xf3\xe6\x13\xd22 \xbd9\x84\xb5\xf7\xc1\x97=X\x7f\xe6\xcc\x1b\x1c%\xd8\x8d{\xa3f\x80\xb9\xb3\x04\x89\xf9\x81\x84\xcc\xc0\xde\x90\xe7\xcc\x06\x9c\x94\x078\xce\xfb\x9b/\xe3o\xbe\\\xbf\xf0\xd5\xf5\xe6\xf7\xf92\xfb\x8c\xd0\xc6\xb3\xf9P\x03\x03K\x16p\xe4\xee\x11qL\xc9\xd4\xf39^\xdb0\x19\xd9\xf5\xda/<\x83\xcca\\\x9d\x06\xf9\x88\x126\xc4\xaa\xd1 \x9faUh0lH\xf5\x19+\xb6~\xd5\x99\xea\x08\x91\x1d\xac\xc2\x8c\xd5j\xf5V\x96\xb1T\x95!#\xc4\xaa\xc9 \x95d\xfc\xf8\x90\n2\x9cH-x*\xc7\xa0\x03\xa0T\x8c\x99\xb3ZLg#\xad\x8a\x9b}\x95/\x9aWb\xc9\xbbh\xf4:\xafS\x18t\xbc\x15\xc8K\xba\xb4\xa6&\xc3\x88\xf1\xa0-\xf2\\mg\xee\xfbG\xfbEm\xf7\x18j\x91\xa7o\xaf#\x87n#K1\xbaa\xed8+{ZS\x18\xbf\x86,\x0eG\x96[T\x87\x02\xf0\x89\x03tu\xbc\x05\xa6\xb7\xc7\x00\x93J\x10@)\x00\x86\x17\xc8\x00\xd5z\x1f\x02\x8f\xbb\x0dp\x16\x13\xc2\x16\x14B\x16\x95\xed5\x1a4\xf3y\x8f\x0c\xb8\xb3\x90q`\xd2\x809wZ\x1e3\x0e\x96\xecf\x1c\x8e9\x0dg.2\x0e\xc7\x1c\x0eX\x9f\x85\xc0\x81\x9a\x88MB6L\xd6\xc6\xc1\x9f\xc2\x8d\xc31\xc9\xe6J\x02\xc7\xe1\x98\xa3\xc1\xd3\xc8q8\xe68<\x89\xe88\x1cs@\x8eTv\x1c\x8e9\x18\x7f2<\x0e\xee\x14y\x1c\x8e7\x8f\x19\x92\xecq\x18V\x07\xc0\x81\xa1\x9bpt\x92\xafD\xb3\xf6\x06>\x0dpU!Z@\xc3@T\xa9\xad\x10Uj\x05<\xb66\xc0YL\x08[P\x08Y\xd4\xdbR\xa9\x9bh\x07iI\xf5\xec\xc77Gp@\xef\x93\xe0\xc0fF>+\x1a r\xb9\xd9&W\xd4F\x81\x0b\xeeOx\xea\xc37\xf0\xec\x87\xb7\xcf\xffty\xfa\xe2\xf2\xd5\x0fO\xbf'$\x07\x0da\x88\xe1\xe9\xb3\xf3\x97o\xdc\xf9L}\x18\" $D\xf5a\x88\xe0\xcd\xa9+/\xaa\x0fM\x96\xd442\xf0\xec\x06\x0dz\xa3\xac_m\x93+H\xb3\xb5\nz\xd4\xb5\xac\xcd&\xf2&L\xf5\xa1\x0d \xa6t\xd7%3Y\xa1\x0fA<\x1a$\x92\x08Y\x1c}\x9844\xba\xdbM\x03)\xd0\xdc\x87I\xe3#\x93.\xc47\x0e\xf0\\\xa9\x9f\xe7\xe9\x95N\xe8\x93\xe7\xbcq\x1e\xab\xb0\xac\xb96HD\x97f\x90\xd48}\x0ec\xeex5\xd6\xfeE\xc7&F\xa8nP\x1a\xb5\xfbs\xe2\xc9\nl\xd4\xeeJ\xe72$\xe6\xc6dkn\xdbG\xdf\xee\xa1R\x10r\x03\xbd\xe7\x0d\xf5\x94i\xc7\xe6\xe3<\xfa J<=\x893\xd1@\x9d\x8f\x06\x96\x1cbo$\xe6&\x1a=\xb7\xe1\x02\x16Q\x80M\x18\xc0*l\xf9\x80M \xe0\x13 \xf0\n^>\xb8\x9d\xa1qOgj)1\":\xbc\xe0\x98\x0f(\x99&}`\x13\x93k\xb8\xec}\xcf5\xe3p\xc4q\x99\x11\xf9\x06\xc2\xd8\x96\x9c\x0d\xc9\x90SL\"\xb0x\x9c!\xa1\x18\x84\x00&1\x80/\x9b\x98D\x01.a D*\x1d\x7fP\x924\xa5\x8b 2q\xfc\x1bW\x03Sj\xce\xd8?]B\x12:%t\xe7s\x141z\x99\x9a\xca\xfc\x83\x94\xca\xcfUB\xf1S\x95O\xecKg\xd6\xfe\x06\x14W'\x89=\xa9*\xb1\xdb\xabT\xe6*\x87]ZnE\xb2\x86D'0\x83N`6\x8e\x8aN\xdeJK\x10T\xf2\xe0Rf\x96\x82\x8fH O\xe3\xc0B-\xb6\xe0\\\xac\xf4\xd8\xfb\xc9J?\x03\xbe\xad\xf2\xf5Uz\xb4\x05\x84l\xea\xc4\x9cE\xc3\xbc!\x1a\x0fQ\xeca\x17N\x80\x85\x11Ja\x04Mh\xe1\x11v \xa4\xb7\x8e\xde(\x86?6A\x8aBx\x96\xc1\xc3\x99\x8e\xa3\x81\x88\xd8~$8#\x00D\xec\xc8\xb0{\xe7\x0c\xd5-\x8f;\xdc\xedG\x16\xcb\x89\x8e;\xc9;\xd8\xfa\xeer\xbc\xf8\xf5\xe9\x0bM\xa6\xd1v\x1do\xd2\xbe\xa0B)\x89\xd0\xcf*\x97\x19\x87\x1f\"\x7fI\xe7VO\xdeN\xad\x1bj\x95\xa7#9j\xa3\xf4\xabF\xa4\x8dz\xee\x8a-\xb7\xa0r\x8a&\xa70\xb2\x89\x1f\x82\xc0\x99.bF4y\xde\xd1\x85(\xcc7\xd0\x7f\x9c\xec\xd7]\xfa\x81\xce\x83\xf3\x0d\xa6\xeb\x8c\xf5\x1c\x06\xc7Ne6\x8f>\x13\xa0mYt\x18\xb7\xfe\xe2\xd2]\xe6T\xdf\x9c\xba\n\xaa\xa7`:\n\xa6\x9fL}D\xc7\xa9\x8f8&\x8b\xeb!T\x1d\x84\xa8\x7f\x10u\x0f\xbf\xdeA\x10\x01-L\x17\x06-xu\x0d\x07\x89\x1d\xdcd\xd1/\x08\xc8p\xbd\xc2\xaaS\x100\x0e\x867\x93\x1e\x81\xeb\x10\xf3\xe9\x0f\x1e\xdd\xa1\x198Y\x80[6\x12J\xc0\xe1\xe6\xf1o\x1b\xef\x86\xf1n\x15\xd7&!n\x8fy6\x86cKPu.d\x038\x9b\x0e\x99\x1eawZ\xd7\xb30\xf7\x88\xd9^4\xe5\xcf |\xd6+y\xce8\x11F{\x18\xdd\xbfv\xd5}bi\xf3Ie\xcdu!\xf3\xee\xd8G%\xcd\xa7\x953\x9f\xa5\x94\xf9x]\xb1\n\x03\xe4\x85\x1e\x16\xfdfhg\xea\xd3\xce\xbf\x1dr\x1c;\xc7\xa9\x95\xea\xa8\xb5\xe9\xe8\xd5\xe8\x88\xf5\xe7X\x15\xe7z,\xfd\x8f\xa1\x03\x95[U\xceU9\x8e[+\x8e[\x1d.\xfaH!\xfaH\x87p$\x1f\xa9E\xc7\xf4\xb2\x1b\xa6_z\x94`/\xce\xc1\xd4\x9c\x95\xc7\xf8\xbcl\xd1}\xb9\xa3\xf2EjB\xea\x82\xf5j\x7f\x0d\xf0Y*\x81\xb9j\x7fY\xaa}\x1de\xa6\x8c\xaa]mq\xa7\xe1v\xb6\xd5\xe9\xc2*?ykqM\x9c\xe6\xe8\xe4`\xd7\xd4\x1a\xd5\xcd\xea\xe3\xa3\x14\xca\xea\xb7`T\xc6\xb2O\x85[\xfdjX\xe5\n\x99\x80\xe9vX\xbf7j0\x0dD\x0d\xa6\x01\xef\xbe\x8c\x1aL\x07\xa2\x06\x135\x98\xa8\xc1D\x0d&`\x9aQ\x83ak0\xae\x9c2t501i-\xb0I\xc60\xcd\xdf\x89\xf3zX\xf9\xcbN\xa9\xcb\x1a\x0fZ\xf0r\xe4\nc{\xbf\xbc\x8f\xeb1\x94I\xec\xf9\xbc\x80\x93~\xac\x93\x82\xefx\xb3e\xebP\xf5S\xfc[\xfb\x0b\x10t=\xd5\xf6\xb5\xe5\xb5\x07\x96\xbe\n^\xc9\x033\xeb\xad\x10\xa0\xbb\xda\xda\xf8\xdeg\xb0\xe5\xc0\x93T>L}\xb2\x94\x1fq\xebd6]\x00\x9c\x85D&h\x8f\xc7R\xf0\x08:/\xf8F\x0e\xde\xd1\x83[\xff\x05/\xbd\x0d\xf8\xf4`\xf0\x16\xdc\xf0\x92\x0b\xfc$#\xe8\xc5\xe0\xd2\x8d\xc1\xae\x1f\x83o\x88.=\x19\xfc\xba2P\xf1#Sw\xea\xcd\xe0]C\xd7\x9eqd\xd5\x85\x8e\xd6\xa7eB\xb8N\x8d`\"\xbd\x11\xe0\xd3\xc7\x1c\xef\x01\x1c\x9d\ns\xe8\xdb\xe0\xd2\xb9\xc1Q\xd3\xdf\xab{\xc3\xed\x92\x80\xc9\x12\x08B\xbc.?EEG\x9a1\xf4t\xf0\x1e\xfe\xf3\xe9\xeb`+\xa6\x8f\xbd\x1c\x165\xbe\xa8\xf1E\x8d\xaf\x07Q\xe3\x8b\x1a_\xfd\x13\x85\x95\xa3\xc6\x07\xbe\x85\"\x1e\xf4\xcc\xe3=j|Q\xe3\x8b\x1a\x9f\x01T\xe3\xf3\xdd\xfe\xb5\xae\xa4M\xbc[\xbd\xb6A\xd8\xe6\x0bF\xd9\x19k.\x8f.\xd8\xbc\xba@~\xbc\x08=\xbb\xf1\xf3\xda\xf3\"\xc4}:\xc8;& \x8d\x0bh\x8f\x03\x91\xd4\x1c\xe80\xb7\xf7\xdd\x1d\xef\xf3?sw\xe9\x97\xda\x06\xe8\xcf\xfa@\xfbd\x8fk\xaa\xcdzBE\x7f\xcc\x87\xf3\x84\x8f\xc2\xabF\xe5@\xc8}\xb8\x87\xfb\\\x8f\xff\x91\x1e\xc2\x92\xfa\xca\x86\x13P\xd0\xd4z\xf7\x93;\xacn|u>\x89\x8f\xea\xcc\xb8\xa3\xfde\xa1I\x13\x04\x9f&\xd4\x02\xc9\xec3@\x9a)\x90g\x0b~s\xb0\xf9\x8cd\x16\x1a\xa0\xf0\x91\x01?\xc9\x81Cv\xa0\x93\x9eh>\x0e>vW\xd8\xa6?UC\x9a\x11i&\xfc\xc7h\x08O\xd0\xcc5\xbcVk\xbd\xa5\x0e\x87\xf4\xf0\xbe\x0f\xd3\xdcU\xc1\x80\xf7\xe2\xcb\\s\xa0\xbe\xe92W\x7f\xfeW[\xe6\xea\x89\xf1.\xcb\\]\x12_^\x99\xab;`\xbd\xad\xb2'\xbf\xa82\xcf\xf8z\xca\xdc\xf47S\\/\xa5x\x0f+\xff!ukJ\x8d\xe7\xb5\x13\xda\xe9\xe7r\xac\x19\x88\xdaL\x0b\xa4\x99\x02y\xb6\x10\xb5\x99\xb9\xb5\x19[Q\xa8.\xe8\xb9\xb8+\x9b{k\x9a\x13Y\x81\xca\x08\xde\x82R]`,\x06\xed}\x0f\xff\xcduZ;\xe2[\x1e\xde[\xee\xb4f\xfew;\x887\xe2q\xa0\xd6\x86\x9c\xefe\x0eo\xcd\xab.\x10\xc25}`p\x0dc\x03\x13\xdf\xd9\x08\xe8\xdcgkkp\xd6\xd1\xeaB\xc0\x08<\xd3\xa7\xbb\x99\xe8/d\xa8*\x03\x04L\xb8g\x866\xa2\xf0\xf2\x1b\x16\x84\x84\x97/ZnE\xdf\xbbpJS\xb7\x0cm\xfbt)uvi\xef\x94\xf4\x04)O\x91\xf0\x84\x1dJdO\x12k\x12\xea \x13&\x06\xc4\xc9\x01\xbd\x920q\x92@\x9d(pj\x08\xcf\xdf9\xed\x84\x98\xb7v0\xa1r0\xa5x.\xd0 BS&\xf7\x9c\x8a\xc13\xf5\xbcw\xbe\xe6\xe0eq?s{\xf7-i\"\x04n\xf2\xeeX\xefd\x804!\xa0\xeeU\xd2\xc4\x8069\xa0\xef\xd2y\xbb\xa5\xec\xcf9w\xa7wo\xd2v&\x89\x08\xbe\xbd\x01\xbc=9K\x9f\xbe\xe8}\xf3\x9d\xaf3[G\x8e\xf7\x0b\xac8m\xb8\xfc/\x14\xd84\x879\x0b \x1f\xa9v\xadC\x9ex$\x89O\x86x\xa4\x87wi [\xd7++\xa6wb\x1c\x0f\xdc\xcd\xef\xda\xe2>\xbe'\xae'\xbe\xb9H[9\xb0\x07\xdf\xb6eo\xad\xdbH\x93 ,\x96\xdf1\x17:\xc8\xa8%\xf2\xad\x17\"\x7fHKz\x91X[\xa2\x0d\xa9\x00\xdch\xe3\xda6\xac\xf7\xea\xa5\x13\xab\x0b3X.cj\x98(_T\xf3\xf0}\xef\xf6wq\xd2\xf7m-\xecI\xfc\x8e\x16\x1e\x0f\x17#\xa1_\x03;\xad\xdf4\xa3\xf8\x07\xf8)\xfeVD\x9e\xd4\x7f\x0d!\x17\x00\xec-}\xd7\x004\xdc\xc2\x13H\xce\x08\x8d\xee\xc1\xed\xcf\xf7Gg|\xb1\x19\x82\xd5\xe0\xdb\x8f@\x08\x11\x10\xc8\x05\xfe3Y\x03#\x1eC\x98\x1d\x10g\x08@\x8c\xc4P\xd6\xcd\x80\x9fE\x0c\xf8\x08\x0ct\"\x03\x95\xd0\xac\xe8\x0b!\xf6\xe2u\x05\x13&@s\xfd\x92=\xdf\x8c\x1e\xad\xa4\xf2^]\xd0@\xe1\x0b\xff~\xf6:\xb3\xe7\x98\x11\xfd\x18\x98\xef\x92\x83\x06\xd2U\x07\x0d\xbe\x0b\x0f\x1a\x1c\xd7\x1e4\xfc\x0c\xf4b_\x87\xb0\xa2\xebe\xec\xdbIe\xbb\x1a\xa1\x81tAB\xc3\xcfJ,?\x9bY1\x0d\xd9\x8f\xce\x7f\xb4K\x14\x1a\x98W)4P\x881\xe1Z\x05\x8ao\x93\x17\xf8,\xd0\x1b\x17\x1a\xb0\x9b\xb6\x1a\xa2:\x1f\xd5\xf9\x06\xa2:\xef\xeca\xea\xf1\x1f\xd5\xf9\xa8\xce#@\"tT\xe7\x81B\xaa\xa8\xce{\xf5\xac\xa8\xce\xd7\x10\xd5\xf9pb\xf9\xd9\xcc\x8a)\xaa\xf3=\x08Q\xe7}\x11\x9d\xfa+7\x83\xb8\xcf;\xe7\xc5j\x0d\x93\xf0\x1f\xf3\xf5M\xdf2N\xba\x82=\x9e\xc9\xe7\xdc~\x11[\x03\xed:v\x8d\xce\xae&\xb9T#\xcf\x05m\x0d\x13\x8d=\xcf\x95m\x0d\x045\xcf\xd7\x0fx.qk t\x04\xc4\xce\x80r\xad[\x03\xf7rw\xdd\x8a6V`\x8c\x17h\xd7\xbd5\x10\xce\x8a.\x98\x0d\xe6\xbd\xfa\xad\xc1{\x01\\\xc31\x07\xe1\xdb\xf2C\xa0_\x0c\xf7\xa2j/\x8e\x07^\x0f\xd7\xc0\xbd$\xeeE\xa8g\xc0\xbd*\xae\x81{a\\\x83\xff\xda\xb8\x062#\xf8n[i \xa3\xf3\x9dI]p_*\xaf\xbf\xe1wLKz'^3\xd7p$\xd9B1r\x81G\x04\xa0\xa9\xa4-0\xbc\x0b\x06\x18\xd4\x00&E\x00\x88^\x07\x03\x14+s\x08t\x0e5@](\xe0/\x16p\x17\x8c\xe5\xa5\x184q_\xfc\xd2@\xbf\xcc\xae\x811_\xc6<\xf9\xd7\xdb5\x10.\xb9k8\xc6\xb0\xc9W\xc65\x1cc\x08\xf3^\x84\xd7\xc0\xbb\x0e\xaf\xe1\x18s\xa3^\x90\xd7p\x8c\x11\xf8\xaf\xcck8F\xdf\x8cK\xf4\x1a\x8e1\x08\xe2\xb5z\x0d\xc7\x18\x00\xef\xa2\xbd\x06\xfau{\x0d\xf3\x8f{\xe6\x0b\xf8\x1a\\\xd7\xf05\x10\x0fj\xea\x01\xfd3\xaa\x8a\x9e\xab\xfa\x1a8\xba\x80\xdf\xf3l \xea\x88QG\xf4}\x0d\x8c\x85\x02\xfeb\x01w\xc1\x8e\xad#RJ\x04h\xd03u\x17\n\xd0\xe0-\x17\xa0\x81\xc5X<\xb6b\x15\x10\xd0\xc0^HZ1\x01\x0d\xa1%\x054\x04\x16\x16\xd0\x10X^@\x03\xbf\xc8\x80\x86I\xa5\x064P\xae\xabua\xae\xb2\x03\x1aX\xc5\x074\x90#\xb7}`\xf3\x1d[|\x10\x8b\x12h\x08\x1e\x0e\xcdW\xa3\xc1\x1b\xad\xebC\xf0\x98H$\xe2:C\xe7,_\xd0\xc5\xe7\xf2\x16r\xc6\xc8*h\xe0\xc4\xd4-v@)k\xa0\xc1S\xdc@\x03A\xf6S$\xbe\xaf\xdc\x81\x06\xda\xc9E8\xb5\x08\xa3\xd6@\x19\xbb\x06\xb2\xac`m\x02\xc6\x06\xf0^\xb66@\x9e<\xb0\x08\x00\xfek\x94}`\x11\x02x\xc4\x00\xca\x85\xcb>\x1cw8\x9cS\x90s\x7f\x93\x80\xcew\xc3\xb3\x0f\xbe\xf0z\x1fXD\xe3(\xf0\xa4\x9b\xa1}8\xc2X\xdc\xa5\x184\x10\xb7\x13u#\x11\xe5\x08c\xb2d>%J\x10\xe2\x84\x811i\xe0\xc9\x0e\xc6\xe4\x81C\x00\xe0J\x8d\xe3\x0d\x84./f\x95\x16\x1cY\xc1\x91\x14\x0cB\xd1v&\x84\xc8\x88\xd9GA\xcbHj\xbe\xa6u\xef\xee\xdaQ,B\x83\xa7\x177v\x7f\xf9\x08\x0dnM\xcc\xa1\x81y\x85\x87_dx%$\x89\xce\x84\xbd\xe8\x95\x87\xde\xc9\x00iB@\x95~\xa4\x89\x01mr@\x97u\xf3vK\x91l\x1c\x99\x16\xcb\xd7\xb8\xfa\xa4I\xa8I2\xe3\xe7\xcci\x0c\xac\x971\xc2\xd3J\xbb\xf0\xaa\x19\x7f\xe8x\xe2G\x92a,\x05F\x99w\xbe\x1c;T\xda\xe0\xd2\x05\xc9\x90\xb3.\x84Y\x82Q\xc2\xd9(\xbf\x8d\x8b\xc2\xbex\xf4<4{\x9e\xd9p\xba\xe3\x8c3nnY/w\xacO\x08<\x8b\xcc\x97/6\xce\x0cCH8<\xc9Q*c;\xb0\x9f\xab\xe5l6\xdc^\x96L+\x06\x87\x8dC+^\xee\x18\x9c\n\xce\x08\x96\xf5d\xb5\x9f\xa6\x96\xf8\x93\xc6Dx\x83o$\xd9\xf0\xe8\x91S\xa0Y\x0f@g\xec\x07\x8d\xf2\xd8s~\x9c+\xdd\xeb\xd9\x9f\xb1\x83\xe4\xe6P\xd1[\xb3O\xa8\x08\xa6\xe5\xc5\xb83`\xa8c\xb0\xe5\xafP\xdb\x8f\xb3O\xa8-\x1d\xb9#T\x14\x96\xcc\x0fjsw\xde\x86=C\x83\x86\x7fb~\xc5\xe8tU'\xfd\xb3\xf6\\#\x9c\xb0\x96\xc4}\x8e\x94\x9bG4Y\x93\xec}G~\xf3\x9d\xcb\xd0p\x1b\x18\x8edy\xafziU\x0d\x0cXS\xe0\xa7\xa2\xf6\xe9}\x13U\x08\x04\x1f-y}.\x95\xc2\x807A\xdd\xa7b\x18\xb0'\xa1;\x96b\xf6\xb7\xa3\xf1\xf4q\x12:\x9b\x05\xe0I\n\x9f\xb03\xec\xd9!d\xee\xb5\x18\xba\xa4\xe4\x1c\xe7\xc8\xc1;z\xb0\xab<\xcd\xcfN\xd5\xc7\x00\xc5fu'\xd2x\xc9\x05~\x92\x11\xd3c\x9c 1\xfe4i\x12'\xa2#\xf4\xabR\x06\x1c\xe9\xce\xa1\xdd{\x13}C\x11OS\xc1\x0c\xd0\x92\x91C\xc7\xe8K1\x0e\xc5kO\x1c\x0e\xc5HH\x07\x0eE\xedI\xf2\x0dEKK\xdd\xf5'\xeb\x86\xf5?QE4\x80%\xdd\x06(i\xb3\x1f\x86\x96\x04Y\xb7T\xee \x1c%\xc1\xc6S\x10\x85x\n\xf6\xc0\x95\x08\xaa\xc7\x88\x87m\xacA\x1b\xcf\x12\xf9\x16\x88\x94\xc2I \x9e\xafh\x16/C\x91\x99\x8a\xc9L\xbe\xa4\xa7[\x06%X\xf6\xd6\xdf\x9b)I\xcb\x81$g=\x12\x96\x8a\xc0\xe5\xb7U\x86\xc7\x9b\xa1\xc8\xe8\xc92\x9d\xde1\xc6J)D\x13\x06\xdd\xa6/+)\x10I\xfc\x1b\xa0C\xd3\x00-\x89\x7f\xa8\x1c\xc0w\xbf-xl\x93?\xf1\xed\x81\xf8\xf6\xc0\xbf\xd2\xdb\x03x\xdeX\x80R:\xb3\xc6\xed`\xe3 *\xa4\x93\x81\xbd\x9c\xe5\xe1+\x0f\xebNC??\xd3\xbaY\x96\xb4j\x18\xbb\x12\x985\x08\xb7/=\xc0\x8at\x88\x10\xf7\xd7c\x91y\xdd\xc1\x88\xdd\xc6,\xe6\xa8\xed\xc38\x8a\x1c\xd5{\x02\xf6\xa3\xcd\x94\x99\xb0{\x9c\x15x\xa8\x01\x02\xf0\x8d\x01\xbc\xe3\x00\x7fe\x1d\xeff\x83\x0eg8\x0b\xd88k\xe7\xcc\xd5\x8d?\x88\x00\xe1\x81\x04\x17\x05\x89\xc1\x04\x98\x12P\xb0\xe0#W\xbd\xa1\x06\x16\xc0[\xe1\xc6\xb3\\\xae+\xca\xde\x95\xf6\x99\xe5\xf6z5d\xd4.\xfb\x81P\x91f\x86]w\x1b~\x05\xa2;\x06(3\x02\xd2\xac\x00\xbc\xae\x19hz\xf3\xb9g\x80\xc0\x0b\x06\xfc\xb7~I$\x05\x1aY\x89.\x9b\xce\x87\xf6\xdb\xbc\xfe\x00\x06PF\xef\x1d5=\x98\x01\xfe\xfa-S\x87\xe3\x0d\x1c\xc0\x0c\x9d\xcc\x13\xe8\x00r\xb0\x03f\x18\xb3/\xf0\x013\xf4\xe1\xae\x9e2\x15;! \x023tC\xa8\x802\xb5\x0bZ\xa0\x04H\xc1\x12\x98<\x9e\x99\x02'\xe0\xa8X2A\xa1=\xea\x81\xef\xa8:\xe2?I:\xc8\xd1\n#\xf1\xa4G\xc0?+\x88'=\xfe\xa1\xfd\xa4\xf7U\xeb\xd0\xe3\xfey\x9fw'\x05n\x80Nd\x7f\x9d\x0dn\x10\x07kC\xa8\xa9\xc1\x0c\xe6`M\xdc\xf53\x82\x82:\x00\xb4\xbb1\xe4\n\x19\xbd\xb8\x8f\x8f\xf9\xad\xbf\x93\xe3B@\xe7\x04\xe2f#\xd4\xbb`v\xe8\xafm\xe1\x8d\x17\x01\xbfW\xc74g\x8e\x1d\x8dPZR'\xc3cH\x98,s\x95\x93p\x14\x91\xb0\x8a)G\"\xad\xe3R\xa2Kd\x1e+\xb6}\x0b\xa1R\xcf%\xc4\x99d=\xe1\xfa!a2@\x99\x10\xf8\x9d\xfa\x1a\xe6\xeb\xd0/V\xd9\x11\x00+&\xcfuC_H\x0bh\x13\xf7kH\x84\x88\x81\x86\x89\xbd\xe1\xa1.\xf0\xb1\xa6\x9b)\x8fh;yv\x94w?\xf9w\x93w/y'\x00\xfeI\x00m\x17\xcd\xd3\x95o\xff\xcc\xb5{\x9c{\xc7\xbfs\xbc\x93\xf5\xed\x1a\xe2\x9e\x99\xd4\x8f/\xe2\x06\xbe\x0e0\xe4\x96\xa2\x00(\x1e\xac\xbd\xfb\xda?v\xb2N}\xc7\xdd\xb2\xc3\x1d3\xb7r\xa9e?;v\xb2k\x0f;v\xafg\xdd\x9d\xdb\xc8\xb9W\xc3\x11\xcf\x1d\xc0v\xf1%am\xc6\x0c\xef\xddRL\xac\xae\xedCfw\xc4\xb4p\xb6\xed\x9b\x0d\xb8\x82\x1dx\x13}\xfcNR\xf0\xfd\xf3\xb3\xa4\xa8\xce\x8d[B\xcfl\xb4\x07\xc6\x9c?p\xdc\xe8\x16C'\x0dF\xc4\x90K\x87\x16\x07\xcah*\xfaiO\xe6L&\xdc\xf3Cc\xf0\x94\xd8\xbbU\xc8\xd8E\x8c%\xc6N\x92\xf9h\xb0\x1b\x8d\xa5\x87\xa2\xf3e\x1f\x06\xc5\xca\x1b\xea\x0d\xd0yb\xe4\xc1\xb1q\xe4\xb2\x9d3&N\x89\x85\xe31p\x0b\x991\x17\xb8uEl\xc2s\x1c\xdb\xf6\xa2\xc0\xfc\x1b\x8e\x18v\x00\xf7\xce{\xff\xc4\xeb\xa9v\xaa\xe3nU\xdc\xe1\x91\xc6\x85\\\x17|\x9a\xe2\xb1\"M^\x0f\xb3\xd5\xb3\xec\x8e\x1d{9g4\x1aZ\x8c\xd8\x12\x1b\xe6v\xe7\x8c\xa7r\x91M\x8f\xf5\xfac\xbc\xdc1\xb9b\xb9\\\\x\xcc\x96\x8b\xc5\x13\x9b\xe5\xa2s\xc4`\xb9\xa8\xfc\xb1Vw\x8c\x95\xd7\xdf\x0c\xb1\xd4a\x0c\x95\xa1x\xccrP 1Q\xbb\x84\xeb \xe9\xc5@\xe3 \xd1\xfb\xe9_\xf0\x84\xb0\xc5\x1c\xf5x\x8e{)\xc3\x1bK\xf4\x10\xc5\x1e;\xe4\xc4\x0c\x19\xb1BF\x8c\x90\x16\x1bd\xc7\x04\xe7\xbe\xe4E\n\xe4y\x96\xc1\xc3\x99\xc7\xab\x03\xe7 \xcc\x11\xb1#\xc3\x9e1\x00\xe7*w\x16\x1ep\x1bW\xac\xeb\x07\xda,\xb6\xf3\xeb\xf2\xeaB\x12E\xb5\x1b\x91\xa7\xbb\x9d\xbe\x81\xf3\xd3\xef\xdf\xbc|q\xf9\xfa\xfc\xfb\xcb\x8b\xff9{9\xe0\xc9\xf1\xefg\xef^\xfe\xf8\xf6\xe2\xa5\xeb\xf7\xdev\xc1\xbex{\xf6\xf6\xfc\xa9\xde'\xcd\xcep\x8d\xa3G\xdc\x7f\x18\xe2\xf6\xe6\xaa\x17M\xceU.\x9a\xce\xfb7\xef^\x9b\x8c\xec\xce\xeb\xd2\x86\xa2\xd6\xf9=V\x8b^\xba\xbe\xd3\xb3x\x0cgJ!I\xb6%\xb6 \x8d\xab\xad\xbb\x18NOF`\xc9%\xc4\x15\xcaPEP\xc7\xa7W\x17\x19l)\x8b\x9b\x93\x87f>\xa7\xe6D?\xa1\xc3yI\xc2ag\x85s\x13\x0c'pCt\xc9G\x97\xfc\xd7\xec\x92\x1fG\x80\x19Rg\x06\x0b\xce\xc2nVf\xb3\xb3\x9a\x95\xd1\x9c\xdc\xe0\xe0\x05\x07\x8b\x85\xa1\x9c\x97\xb9f\xb8\xf7g\xc0\xc3T,|\x93c\x1d\n\xff\xa6\xafGY\xbf\x19\x99\x1e\x1e}\n\xa8:\x15X\xf5*\x98I\xb7\xb2\xce \xd1\xafl\xdfb:\x16L\xa9\x9b;p\x97\xe8v\x8e\x88W\xe3&\x19\xbbH\x18\x82n\xba_,\x16\xcc\x1d\xfc\xd8wqL\x0b\xea:\xedc'\x9e\xce\xd0[\x14i\xb6\x16_Bx\x0c1s\xa9\xbd\xbb,Pe\xbe\xb6.\x82\xe5\x8d\xda\xb1\xcdx!UV\xee\x8d\xe2\xb1t\x95\xee\x93J[\xb9\xad\x0b\xb6\xefR\xa8\xaeEw\x93'e\x99\xafR\xd5Hm\x12c\x14\x8b/\x95\xc8\x06U\xce\xc3f\xf3\x8f\xd1l\x1a\xdc\x92\xc5\xa51\xbd6\xd3\xea\xc4\xfa\x16\xf06\xdb\xde\xe8\x89\x82\x0eK\nm_w\xd0\xd5r\xac\x1c\x8d\xfar\xbe\xd5p\x8d\x9f\xbf.\x1d\\\xbd\x15\xd2\xd3\xb7,\x86\x04\x1b5\x064\xc0\x87\xae\x86]\x88}!J\x91U\xcaCR\x88O\xf2\x8f=T\xea/*\xc0\xd2\xa9\xaa\xdf\xb2O\xe7\x98\xe8\x9d\xd4u\x0c~\xd1\xc4\x98\xc9\x076Z\x1c\xc0\xb2B\xbd\x90w/rNm\x86o\xb2\xa9\x91\xf1N\xc8\x1a\x89\x88\xcf\x11 G#\xe0\xae\xc8\xf7*/wy\xb9X\xa7\x92&\xcb\x83\xdaN\x9f\x1e.E\x95<\\\xbc\x10[q\xa5p\xd5\xff\x97\x17\xef\xc4\xe7\xa4X\x93\x17\x8d'n\x8b\x0e\xf2\xf6\x93y\xed\xdf\xb5\xc8\xf2\x91\x93\xd9zz%\xbb\xfc\x90\x8dn\xb9Y>\xb7\x8b\x02\x80\x17b\xf5<\x97KYk\xf2 T\xf9G\x91i\xb5=\xd1\xa3J3Ek\xb5\xbc\xf2O\xabt\x97l\xeb!\xf4\xb5-x\xa34\xab\x0b)\x07\xd4\xcf\xb0I\xc5v\xad\xf4\xb7L\xf6U\xbb\x8e\xd3\xdd~+vj\x1b+>=\x94U\xbe\x83\x9d\xa8\xae\xf3u\x0f_\x1b5\x80B\xfctH\x0b-g\xaf\xf2\xab|_\xe4U\xee\x12\x18V.\xe9J\x11\x1d\x855KR\xb7T\xb1\xb6\xb5it\xb74\xff/\x89\xa0y\xc1\xc7\xa1gI\x91\xec\xe82D\xca\xaeC\x96V7\x97U2:\xb8{\xeb\xb9LJq\xd9\x98;8c\x0e\x18\xc0~.\xbf\x90tXIY\xad\xd7\x0cC\xde\xae\xe0\xba\xf9ZqBZB\xd6\x0d\x8bn\xf3\xecJ(\x9bo\xdd\x7f\x06C\xd1\xf8\xcb\x83.\x9d`\x97\xaf\x0f[q\xb7\xac\xc9 ;\xb1\xbaN\xb2\xb4\xdc\x99\xe3b\x99g\x87\xf2x\x13\xc5\xb0\xffL3\x95;m]$\x9f\x95$\xba\x14\x99\xb4\x9eG3]\xe6\xf9V$\xd9\x98\xdb5\xa3\xf5c\xc6:\xb5o\xaf\x7f1\xe722(\x1f\x13\xff\xd7A\x147\xcf\x0dk\x9e\xe5\xf9\xf6\x9d(\xf7\xf2L!3\xf6>\xcfG\xe9}Qn~-rs4I\xb9\\\xcd\x94\x1a\xa1\xa4\xfe|W\xfe!\xcd0\x15\xad\xd9jv\x86\x913Q\x9a\x81\xf9\xb7$\xb9\xe1\xcdn\xeb\x07\xbd\xe6\x86H\xef\xce\x9e\xd7\xb3$\xf1l+\xf9\xb5\xc0/\xd9|\xab7\xeb\x91]\xde\x91ugd\xddz\xc5z\x92\xd0\xfc-Y\xad\x8a\x83\x89h\xb6g\xb9Kyp\xf3\x11\x9d\x9dG(\xc2y\xf9\"\xaf\x92\xedW\xcd\xd0\xde \xbf\x95\xb9\x87\xe7{\xf7s\xecR\xa5\xe5J\xa5e\xbc\x1a\xdc\xe98\xe8f\xd4`\x1d\xb5\x06|c\x12\x9a\xfa\xef\xca\x06oU\xeb0\x17\xbf\xc2JrM\xd9\xc3\x08\xbazW#\xbf\xd07\xb7O\x86\x85\xea\xf6\x1ah\x1a>2\x8e\xa1\x98\x91\x16\xb1O\xd4\xe4M\xae\x1ez\xdda\xde=\x18\x0f\x95\x19\x0f\x15\xb5^}\xe5\xfa\xb0S\xcc\xd3_v\xc6I\x82I\xf1\x90\xe3\xa4\x8b'\xf0L\xc9\x8b6.\xc7>P&\xe6\x05\xb8L\xb7\x8e\xe3\xaeK\xfa\xce\x9f;[K\xdbk\x9a*\xd9\x95$\x1au1\xb0\xe9\xb3W\xa2\x8b$x\x19\xfe\\\x9b\x80O\xf5\xa9\xc9^\x8b\x9e \xe9sf\x0dH3l\xdb#yKe\xf3k\x95\xc3Or\xec<(\x19|\xc843\xad!\x97t\xf8\x9c\x96z\x1d)\xd2} E\x03Dz\x8d\x81!\xc7\x9b\xa6OW\xab\xc3Nm\xfd\xf5\xf3\x81\xa9A\x10\xe4\xd1:\xf9\xfa\xad\x13|\x82n\x06\xe8\x9dC\xed\x07\x9d\xf5\xae\xd1\x0c\x95\xa0\x8fb_A\")U\x1c\xb2L\x1e\x19j+\x89\xe2\x04VI&\xa5G\xe7T\xa8 \xc9n\xd4\x15\x122\xbb\x8e\x95\x172\xafF\xcf\xc9/\x9bQC\xb5\xf8Fw\xd7\xf8fQ\xdbI\xbc\xda\xaaud\x1e\xb5\xeb\xac(S\xa0'\xe4XC\x1d\xb5\xf5P:H\x1fej\xa23\xe9\xa0\xd3\xb5\xcfz)Me\x90\xbe\xa5\xf3t\xbb5\x15E\xd9F\x8e\xe8=\xbd G\x128\xf2\xf3\xcbC1\xbaR8\xc1\x89\xf0\x14\xde\xbf\xfb\xe1A!\xca\xfcP\xac\x04d\xc9\xae\xae\x97r\xc8\xd2\x9f\x0eb{\x03rbU\xbaIk\xdd\xb9\xaao\xa8\x8e\x0b@\x02\x94\xa2H\x93m\xfa\xb7q\x98O\xcd\xa9\xcaW\xf9\x16\x96\x87\xcdF\x14\xe6:\xd4B3\x87\x1e;\xec\x0eeS\xc4E\x1e\x19[\x91\x94\xd5\x18W\x9e \xb8\xf3\xe0\x0e\xac\xae\x13\xc9\xff\xa2X(\xf9\xb5M\xca\nJq%\xa5\x94\x89I\xbf\x7f\xf7\xc3\xdd\x12\xf6Iu\xad\x90\x8fP55jE\x89{I i6n\xfcAv\xf9\xe0*\xcf\xaf\xb6b\xa1\xe6\xbe\\1Mu-n\xc6]I\x99\xbb\xaa \xad\xe4\xce?\x94\xdd\xeb\xcc\x95\xb4B\xf2\x0d<\xcdn\x16\xf0\x87\xfc\xb3\xf8$\xb5\x07\xb9\xd1\xdf\xbf\xfb\xa1\xde\xe1#|\x12\xc5\xe0z\xa4\x86ru-v\x02>\\W\xd5\xfe\xc3\x89\xfeo\xf9\xe1\x04\xf2B\x9a)\xfa\xd7\x13\xc5=R?\xc9\xd5\xaeP3.E\x05\x87\xfd\x08\x9f\xbe\x8f\x8d\xf4#\x8aO\xa2\xd0S\xde%\xfbR\xb3\x82\x1aq\x957\x97\xb6\xd5\xf9\x9cjQ\x95\x94\xb0\xc9\xd51\xf3\x18Y\x8b\x7f\x83\xd3M;B\xb9|\xe6\xc2e3 u\x1e\x97\xe5a'\x05\x19\x82\xe0i\x06\x7f\xb8\xb88\x83\xef_^@\xedr~\xff\xee\x07\xbd\xa1n\xd4\x81\x9e\xc0_\x86\xecxq\xb3\x17\x7f\xfd\xcb_G\xe8\xc0\xd8:\x99Yw}\xf8\x9c\xe8k\x88\xf9\xfa\xb0\x12R;\x10E\x91\x8f\xde;S\xa3io\xc2\x95J@\xab#\xd6\x88\xfe\x95\xdc\xaby\xfe\xf1\xb0oL\xb5e\"-\xd8\xbe\x0f;\xa9%\x8d\xd0-\x11\x89\xa2(\xaa\x14\xf8\xfeh\xa1\xdc\x8bU\xbaIWP\x8a]\x92U\xe9\xaa\xec\xef7\xb5Q\x19\xfa\x80\xa3\x94\x8aOUx-e\xc9R\x18\xdd\xb0s\xda\x8f\x0e\xf7\xfa\x84L\x96\xf9'DK\xd0S\xaa\xf7Ew:\xae\x11|x\x9a\xdd|h\x0b\xbc%\x19$\xc52\xad\n\xb9s\x1d#1\xc28\xd9\xe6\x03Zhs\xa9\xbf\x14Rd*\xa9\xaeG\xb2\x1c\xeb<\xdd\xbe\x8c\n3`\x993\xb3{\xb6\xe9R\x0d\xaf\x16\xe6%\x94\x87\xfd>/\xd41\xb8OV\x1f\x1f\x1c2\xf9\x1fy\xf8\xe9u,\xb1\xad:>\xf5\xf3\x0d\x1c*-\xa5\x8c\x0c(A\xe7\x11\xa4Z \xc0\x95\xc8D\xa1\xacxm\xa159zO\x07BQ/A\x1f\xff\xcb/\x89\xb2\x84\x1e>\x8639>\xb9a\xea\xa1&\xdd\x92$\xcf\x7f\xf3\x1b\xe4,z\x95\xe7\xb0\xc9sx\x02\x8b\xc5\xe2\xff\x8c~\x96\x93M\xb2\x9b\xf1\x0fIv\xb3\x90\xdd\xbd*\xf2\xdd\xbdM\x9e\xdf\x1f\x7f\xb2X\x8c\x0f\x9bt\x03\xf7d\xd3\xf7j\x80\x17\xf9\xbd_\xcb\xb6\xf7\xe1\xef\x88\x80\xc5\xda\xff\x13\x9f\xfb#\xcf\xdc\xff\x98|J\x82'\x0fO\x94\xc2#\xb1\x06\xcc4-\xef\xbd\xca\xf3\xc5j\x9b\x94\xa5e\xa2z\x08\xf2c=\xf6N\x83q_\xff\x1c\xfd\xe5\xc1\x03\xc9N\xee1\x9c';!\xf5\x87\xa7z4W\xa2z\xa1+\xe2\x9cf\xd26_\x89{\xf79\x83C\xdbcc\xed\xff\xc9,\xd7w\x9e\xe5:\xbb\xa9\xae\xf3\x0cY0=\x98Wy~o\xb1X\xdc\xc7\x98R/\xd6=\xf47\xc5\xb0j \xa9+(\x1b\x9dj\x92\xbdxy\xfe\xfc\xdd\xe9\xd9\xc5\xdbw\xf7\x87\x02\x1cj\xf4\x9a\xa9\xf1\x0et\x1789~\xeb!\xc7\xf7\xf9\x98\x12\x8a\x14\x8f\x9f\xc0\xaf\xf7\xcb\xc5\xab<\xff\xfbb\xb1\x18s\x86\x1c\xd5\x89\xd4\xfb\xe4\x97Iv\xb3_.\xde\x88\xcf\x96\x01\xa6\x1b\xf5\xe5\xffz\x02Y\xbaEY\x01\xa5\x12\xc2\x90\xf8w\x83\x01#\xcd\xea\x11\xe8\xb1.\xdeg\xbb\xa4(\xaf\x93\xedE\xae\xb7]\xe8\xf0z\x7f\xbbP\x01\xa5\xd5\xc7F\xd2v\x8b\xa5\xec\x87g\x81\x8e\xab\xdc\x98\xf2Q\xf2\xe0\xef\xa3\xbb\x8bhF\x0f\xa4\x19\xaa\nm-\xa4\x16yW\x9a\x13\xcd\xb9$\xcf,S\x94B\xafu\x1fas\x00dZ{B\xed\xdaFC\xad\x1d(\x951\xa7\xef>\xb8\xdbGW\xdbn\xa6km\xac\x89\x9a\xef\xeel\xf2|\xb1L\n5\xe8/\x0fn\x16\x7f\xbb\xa3g\xacM\x90\xb15\xa5\xba\xbc#\xbf\x1b\x1eB\x7f<\x7f\xfb\xa6\xff\x97'O\x9e<\x19\x93^~\xd7Z\xf1Zi\xca\xe5>\xab5\x06m\xc9\x1c\xca\xe6\xba\xe4\xd5a\x9b\x0c\xb4\xc4q\xf3J]\x0ch\xcf\xfa\x13\x10\xbb\xa5X\xaf\xdbS\xff\xa4V \x06\xb6\x7f\xe7\x0c\xd6~\xd4\x0f\xff)g\xfd\xa1vV\xf5\n\xd4\x1a\x1a.\xcc\xbe}\x8c\xa8\xe2\xc9\xea\xa3\xdc\xb4\xad\xe9\xb6I\xb7b,\x18\xcd\xe6>\x13E\x99g(7\xd7>\x96MZ\x94\xd5\xa5\"\xfc\x13x8\xc6\xd4|\xa8\xea\xd7\xd7\xdf=\xf2\x8bb\x00\xb4\xd7;j\xfew\x1e\xc3\x1d\x8c\xb1\xfb\xd3Z\xe8\xd1\xdf9\xc1\xf0\xa8q\xbfIv\x12\xd7\xff\xd5C\xfc\x0f\xf4C9\xee\xc1w\xbe\xc1\x9fnj\xed\xbd\xbf\xc6z\x85\xd2\x12>\x8b\xed\xf6\x9b\x8fY\xfeY{\xd4\xafU\xd0\xa3v\x81\x8f\x19\xb5\xcfN'Z\xa3\x1c\xf0X\x1b_\xad\xbb\x94\x8c\xa3\xea\xd5(\xb6\xe9#\xfc\xa0\x98\xd8\xf0\xd0u\xbe]\xf7\x9c\xf0j\x0b\xa4Y\xc3{P\xfblj\xd6\xeb\xe3R\xe8\x1b\x8e\x83{r\xfb\x9a\xe9\x8e\x1c\x04\xc6_\xf5\xd7\xbf\xfc\xf5>\xc2\x9cS\xd6\xbb\xdf\x01\xbe\xe4j\xda\x12\xd5\xc3\xc5\xa3\x87\x8f\xca;\xc82\x9a\xff\xeb\x99\x0eM\xe5\xe7BT\x87\"\xd37\x18\xcd\x1f\xcb\x98=\x10\xb3\x07\xbe\xf6\xec\x81~&(\x12\x99\xa0\xdcS\xe94\xab\xb1\xbd;{n\x069J\x1d\xc0\x83\"\xb3GDH{\xa2B\x03\x1d\xd6\xe5w{.f\x0cq\xd8\x03\x1c\xf3\x857f\x0bnXC\x1b\x13\x02\x1bs\x855\xdcA\x8d\xa0\x90\xc6\xbc\x01\x0dk8c\xde`\x86%\x9411\x901\"\xf7X\xf1\x9e;\x8811\x841s\x00cB\xf8b\xee\xe0\xc5l\xa1\x8by\x03\x17\xb3\x85-\xfcA\x8b\xd9B\x16\xb6\x80\xc5\x94p\x05\x1a\x9e@4WzpBo\xb6>B<41101-,\x81\x84!\x02\x83\x10H\x08\xc2\xab\xa8\xb9\xb5\xd7\xd1\x11\x1e\x18zhC\x0d\xd8\x02\xff\xca\xdf\xf7\xccA\x87q\xc8a\x86\x80\xc3\xac\xe1\x86\xe1i<1\xd4\x80\x84\x17\xa6\x04\x17\x9c\xdeuK`\xc1\x1bV\x18\xfb\xf8\xe8!\x85q\xdb\x7fbs\x0d\n&P&\xeb\x0b$\xd8\xe7\xe6\x0d\"0B\x08C\xc7\xab-|0=x\x10\x1e:\xe8;|&\x86\x0d\x9cA\x03{\xc8\xc0\x150@\xa9E\x0d\x16\xf8B\x05\xc3@\xc1\x840\x01!H@\x0f\x11x\x03\x04\x88\xff}\xd4\x1d\xf2\x8d/00-,\x80\x0e\xaa\xf3\x97Y\x03\x023\x87\x03f\x0d\x06\xcc\x19\n\xb0\x05\x02\x86\xde\xd5a\x10`\x9e\x10\xc0l\x01\x80y\xdd\xff4\xe7\xbf\xd7\xf5Ot\xfcS\xdc\xfe#\xa7\xff\xb87\xaa\x03\xd8\xed\xf0'\xba\xfb \xce\xfe\xde\x90\xe7t\xf4\xcf\xec\xe6\x9f\xcf\xc9?\x9f\x8b?|u\xbd\xee}\x9fs_\x0bm\x87S4\xc4#j\xda(G\xa8\xc65\xf2\x83n\x84\xb8*\x92\xacj\xfc\xa0\xdf\xcb\x7f\x91\xfd\x9e\xaa\xad\xf7=%\xbb\xc9Q\xb77\xb31%Dj\x91t(E\xa1?Q\\\x94i\xdf\x84\xd4y\xea/\xd2\xee\x1b\"\x9bC\xd6\x16\x97\xd0\x88}\xefl\xf8\x06&\\\x03[\n9*\xfd\xe1z8\xba\x0e\xaa$\xd36\xablt\xb7\xec\x0f\xb3ib \xca\xb4(\xeb;FR\xdf\xca7\xb0L\xcatu\x02\xfa*\x85\xfc?\xe3\xb5\xd9\x08\xd16\n\x8a\xd0T\xd1\x1b\x1d\xbd\xd1\xd1\x1b\x1d\xbd\xd1\xd1\x1b\xdd@\xf4FGot\x0f\xa27z\x06ot\x9d\xac\xa04NP'u^\xe8g\xe2$\x96?\xfdx\xaenVV9\xc8M[H!\xa4\x94-M&y\x88\x1a\xc1\xefPgMF\x81V\x88\xd8q}\xba~\xa6\x1e\xb4l\xffi\xd4B\xc9\xfaF\x97\\\xde\x18}7H1\x1b\xe9\xda\x10\xae\x97\xcd\xa9w\xc3P\xf7\x06L\xff\x86\xa9\x83\x9dE\x17\x07\x8f>\x0e\xf8\x9a\xc3\xb1\xf4r\xb0\xb1\x008+s\xe1::\xb8H\x0c^2\xc3\xbc\xfa:x\xae\xc8\xce\xa9\xb7\xc3\x9c\xba;\xb8/\xcaN\xd2\xe1aF=\x1e\xbc\xba<\x84\xea\xf30E\xa7\xc7(&u\x1c\xd7\xa5\xd9 \xba=\x82K;\x95\xac\x17g\xa7\xe9\xf8\x08:\xa9\xf5\xa3z>\xcc\xae\xeb\xc3t}\x1f\xe6\xd7\xf9a\x9a\xde\x0f\xd3t\x7f|\x8b\xa2\x83\x9c\xcd\"\x80\xd9\xad\x02\x98\xd32\x00\x92u\x00sZ\x08\xe0\xbcd;\xcdR\xc0\xf68z\xd1v\xa2\xfd`\xc1g\xbdl;\xd9\x8e\x80\xc9\xb6\x04\x82\x10\xbbr\x1bla\x80\xed\xda\xadG\xd7p\\\xbd\xa5(\"\x81V\x07&\x7f-\x17p\xe7\xb4>|\xf9\xcc}\xeb\x83\xe2\xbbo\x1a\xb1\x9c\xf7\xfd\xfe\xcag7\xdfk=?\xdc\xee9rQ)\xd4\xa6qr\x96\x8fu&X6c\x06\x97\x96\xce\xd8@\xb0X73\x0c{6\x1b\xc7o\xe5X\xed\x9c#Z:\x0e[\xc7]\x87\xd8n\xefx\xa4\x90\x9f\xf00\xbf\xd5\xe3\xb3{\xe6\xb6|f\xb6}<\xd6\xcfd\xfbg^\x0b\x88b\x03M\xb0\x82\xe6\xb5\x83H\x96\xd0\xbc\xb6\x10\xc1\x1a\x9a\xdd\x1e\xf2XDa6\x11\x8a\xc8i'\xcdb)\x11m%\xb4%\xcb~\x9alA\xcdmC\xd9\xad\xa8\x99\xed\xa8cXR3\xdbRTkjf{\xcamQ\xcdnS\xd9\xad\xaap\xbb\n\x17\x0f&V\xe3\xb0\xacf\xb1\xad\xc2\xad+\x14\x99-z\xa3a\x82\x85e\xb5\xb1\xbc\xfa\x8d\xd3\xce\xa2\xa9?\xf3\xd9Z\xaerG\xf3\xda[`\xd5S\xeb\xd3UI\xa6\xa5\x10\x19\xa4eY\xbf\xdf*;\x1aD`B\xaeE'Y\xf7\xaf\xc6n\x8b\xd7\xa2\xe3\xb5\xe8#_\x8b\xb6\x99\xf5N\x87B\x17\xc7\x03\x04I\xaf\xb4\xba\x19\xfdy*\xed\xc2\xda\xcf\xf0M\xb9\xfe\x08\xdf.~\xfb{\xba\xe7!:\x1c\xa2\xc3!:\x1c\xa2\xc3!:\x1c\xa2\xc3\x01\xfb$:\x1c\xa2\xc3\x01\x81\xe8ph!:\x1c\xa2\xc3!:\x1c~\x11\x0e\x87F\xee\xc9\x7f\xde-\x89\xc9\x9f\xd1\xf5\x10]\x0f\xbf4\xd7\x03\xc9\xe30\xf25\xb8r\x18\xae\xf2O\x8d\x13\xe1\x85\xd8\xe7eJ\xbf}(\xff\x92\x97\xc9\xf62\x0dzNh\xb8\xddZl\xbd\n\x88\xda&\x83tm\x84\x91\xf9\xd0p\xcbZ\x0f;g]\x83l\x1a\xf5\xfa\xaa\xffj\xccqQ\xc2\xa6\xc8w\xbd^\xdb\xbb\x83\x83'\xb6\x8e\xe1.\xf9\x99\x1e\xfd\xe2\xbd\xf8\x95\x05<\xf5u*\x05\xfd1\x9e\xfa\x1aM\xad\xee\\\x0b\xbbz}u\xcb\x86\x05\x16\xe3\x0d\xd8\x10\xa4\xde\x13\xdd\x13\xa0\xc6\xd8\xc3%\xff\xbcR\xb2\xa0q\xe5H5X\xfe\xb5J\x9b\xa3\xb3\xcb\xb9\xf6\xfdw\x96\x14\xc9\x8e\xfe\xfa\xdc.\xcd.\xd7\xdd\x9d\x0b\x91\x19\xbfVf|\x9df\xe9\xee\xb0k\xe4\x8c~2\xce\xb0\x85d\x19\xa1\x9c\x99\x9fr\xe5\xaf\xd4\xce6\x83k\x97|1\x0bM{\xc4\xcd\xae\x0b\xbeN\xbe\xa8qh4j\x18O\xe5L\xaf\xf3\xedZ\x14\x8aw\xcd\x10%a[\xc6\x85Si\xa0\xf7^\xf5\xd6\x8a,<\xea\x12|\x97g\xd55\xf6\x0cu\x8f\xc5\x07\x85n\xd5\x9f\xf4\xb3k\xea\xa3R\xf6}\x95\x7f\x12E\xa6\xfc\x91= \x8cl\x9f\xb3\xfaw\xf2\xce\xf9J\xce/\xa5\xe6\x8eO\x12\x92\xf6X\xc5\xdb\xe2\xd3\x9d\xa0\xf1\xb68\xcd\xc1\xa9\x9d*#\x1a\xc5\xdb\xe2\x9c\x1b$\x13]\x94$\xe7$\xdd\x119\xc1\x059\xc1\xf9\x88z\xbffs1\xce\xeb\\\x9c\xcd\xad\xe8w(\xce\xe6J\x8c\xb7\xc5{\x10\xea\x12\x8c\xb7\xc5\xf5\x02\xff\xca\xdfw\xac]\x1ak\x97\xc6\xda\xa5\xb1v\xe9\xaf\xb0a\xc4\xda\xa5\xb1vi\x0d\xb1vi\xac]\xaa \xd6.%W\xb7\x8c\xb5Kc\xedRo\xedR\xc9\x95Iu(-\xb1l\xfdc\xdf\xe1j\xbc\xce\xfa\xb7a\xf0z`\x93\x88\xec\xd0\xf3\xfd\x7f\x03g\xef\xde\x9e\xbd=\x7f\xfa\xc3\xe5\xf9\xc5\xd3\x8b\xf7\xe7\x97\xef\xdf\x9c\x9f\xbd|~\xfa\xea\xf4\xe5\x0b\xe7w/^\x9e\xbd=?\xbd\xb8<{\xf9\xee\xf4\xad\xfb\xd3\x1f\xdf^\x9c\xbe\xf9\x9e\xf2\xe5\xd9\xd3\xf3sO\xbf\xef^\xfe\xf1\xe5\xf3\x0b\xcfG\xaf\x9e\x9e\xfe\xd0\xf9\xa4>k\x1e\x13&\xbbI\xb3d{Y%\xdb\xed\xcd\xa5\xf6wX\x96\xa2\x17\xde\x18\xb72\xa1]\xf5\x0b\xa8_j\xff\xc9\xc8\x7f\x0c\x7f\xbe\x16\xddD.\x15\x9f\xd7\x9b\xa6Y\xdcOi\x02W\xef\xce\x9e\x9f\xd4~\x05\x13\xf6\x90\xe6\xfe>\xdf\x1f\xb6\xca 9dU\xba\x1dX8\x06\xc5\xdd\xb2\x1f\x8eP{]dk\xb1\x0e\xcaw\xb8{#\xca\xbbD#\xb8G\xb7\x1bi\x86i\xda\xb4\xd1z\xf9\xc7Oy%\xcaA\x9c\xa2\x83&Y\x96\xf2( \xe9\xb2n:\xee\xd6\xfc\xe0\xe9\xfan\x96\x07M5\xcb\xc7]f\xb9\xaf\xb7,\xbf\x94\x07\xed\xe5'Q\xe5a\xbd\xb6\xed\xd1\xfe\xd51\xae~u\x8c\xa4<,wiuY\xa5;_\xf5_\xe3\xe2X'\x95\xf8F~o\x11]-B3*\xf5\xff\xf9\xa6#\xc2\xe47e\x99J\x13\xc4\xa0\xd0\x812\x91\xadg\x1c\xcb\x10\xab\x19\x90\x90z\xa4\xfcw'|\xd5\x19\x8cJ\x0f\x89A\xda_H\x90\xb6\xb7Z\x0d\xcb\xa94\xa1NP\xb4B\"yZN^\x96UR\xcc\xb9\x03Fh\xcd\xa0\xd4_\xa4dV\x7f\xac\xf7%\xbe-k\x1c\xf3n\x87\x01\xd2\xd1n\xc87\xe6\xe8@\xc6\xd4\xc3db\xb7=\x0de\x95\x17\xa2\xe6\x81\x9d\xd4\x0b\x0b\xe51K\xb0\x98\xb0'$|\xde\xd1\x8dF\x13\xee\xaa6\x14\xb5\x86\xa8\xd2\xd0\xd4\x19\x8f*\xe3Uc\x9c*\x0cY}\xc1\xb7v\x9fz\x8aN\xca\x81\xa9W\xa7v0\xab\xdfD\xbd2\xedr\x18\x86q\x12\xd49\xb0Ab\x966\xfamJ\xaboM\xc6=\xf5\x7f\xef\xc8\xaeA\x17\xb0>(k\xafj\xd3\xc3\xeaN\xfb\xd9\x19\xbe\xf5\x1e\x8f\xa0\xf73m\x00z7Q\xfb\xd7\x9c4\xeeX\xff\xdd\xd1co-\xcd}^\x13\xf8\xd5 \xa3\x8en\x0d\x87\x8e;6\xbf\x84v\xad\xee\x13\x17B\x1e\x85\xce\x11\xe8-0\xee_\xff=\xb4\xf7M\x92n\x85-wR\xe5\\\xd6\xd9-\xec\xdb\x97\x16\xcd\x80\xa4O\xa3I,@ -!\xd9\xb2\xf3$\xb4@;\xa5<\xa8^\xee\xf4\xe4L\xb0(7\x98\xca\x05\x98\xda\x05v\xd5\x0b<\x97\x17Q\x15\x0c\\\x93\x07\xab*\xe6i\xe6\x0e\x06NP\xcbF\x98\xa6\xe8f#d\xb5\xae6\xfa;]a\x83\x91\xa9FM\xf3\x1c\xb5\xeci\xb2\xb3\xa6{\xc2\xff\xcf\xde\xdf6\xc9\x8d\x1b\xe9\xc2\xf0\xf7\xf9\x15y\xf4<\xb1\x92\xbc\xad\x925\xf6\xec\x1dG\xe7\x8c\xe3\xf4H\x9a\x99^\xcfH\x1dR\xcb^\x87\xc3QB\xb3\xd0\xd5\\\xb1\xc8\x1a\x92\xd5/\xde\xe3\xff~\x07\xdeH\x10H\xbc\x91h\xed\xec\xbd\x85/RW\xb1\x12 \x10H$\x80\xeb\xca4 \x9f\xae\xf7\x85\xd9\x8e\x18\x84\xb7R6\x12\xde\xadW\x93\xce\x10W\xa0\xbc\x87\xdd\xbe8\xad\x99w\x1ax,ZN\x9b\xe6\xb4j\xf1s4\x8fe\xf3o\xdcl\xeb\xe6\xb0o^\x0b\xe7\xb7q\x1e+\x17\xb0s>K\x17\xf8i\xc8\xda\xe5\xb4w\x99-\x9e\xdb\xe6\xa5Z\xbd%v\xcf\xdf\x85\x0bm\xdft|\n;\x88\xcem\x87\x1d\x1eP\xbf\xfa\xcch\x05\xcd\x86n\x86\xaf\xd5\xaf\xe7\xd0\xb7\xf8\x84\x1a?\x96\xd7rG\xfa\xd6\x91\xbe\xf5\x90\xf4-s\xc9MX\xda\xa3\xa9[\xfcW\x02U\x9f\xbc\xb2\xcbS\x9c\xbdF;\xb1Z4y\xc6\xc6\xed\xd3\x9e\xb6\xccz\x89\xdb\x04q\x10U\xd6\xdbY3JUe0\x1c z\xf7\xa0\xee\xd2\xd4R\x8e\x92)\x06\"\x85\xaf\xd5\xd3\x87\"\x9a-\x7f0\xab\xdd(\x8f\x07\x8e{\x96\xf9kx\xd6\x15\xfc\x01\xf6,\x8b\xd8@\x10`\x04A\xf4|\xb1A\xa4\x19\xd9A\xe0`\x08\x81\xc1\x12\x02q\xd5\xe9\x9f\x8f\xfa#\x11\xb3\x91?>k.\xferh\xda\xc3.\xb23\xe3\xd6t\xbb\x97\xe5\xdb\xdf\xd3\xb6\xa0u\xcfVcf\xb0\xf8z\xd6\xf5\xe43\xe5\x00\xf5\xc1\x9cR9<\xe4]\xb0\xb5\xba\xdb(\xe5\xa2\xa9\xbbrC\xd9\x80\xe4g\xb5\x93\xe5\xf9\xba\xa5\x1d{\x9f_\xa8\x8dl\x84\xb4\xca(\xffe\xb8\xb4\xbd\x12<\x83a\xbc3of\x05\x12\xa4\x88\x8f\xa2\xdf\xae\xbe\xd1\x1brC\xfbf\xfd\x85[#\x9c\x81\xe6\n\xfe4\xde\x85\xf6\x0d\\\xf0W'\xfe\xe4+\x90\xd9\xbc\xe0\x1bc\x8d\xa1\x9b\xa1\x03T\x93_<\xff\x1dr|\x80,\xf91\x9e\x85\xa4\xde\xe9Q\xe7<\x1e\x85T>\xd9\xa7P\xad~9g\xf6\xfdJ\x8f4-\x9e\x1e\xf8\xd6[\xf7j\xdb\x1f\xb3GY%\x1b\x97\x0fB\xe1\xcc\xfa\xf9\x9c>\xc8\xc8\xeb\x83 \xb7\x0f\xe6\xf2\xfb` \xc7\x0f\xeb\xb1p\x08\xb3\xd9\\?DV0|\xd9\x12\xce\x1f\"\xee\x98=j\x19\x0f\x10\x96q\x01\xf1)\x8a*\x99\x8d!\x08\xd9Y\x82\x90\x93)\x08QlA\xc8\xc9\x18\x84c\xf6\xa8t^!,\xe6\x16\"\x02\x8f\xd9\xa3\xf4\xe2\x0e/\x16\xd2c\x19#\xd1\x10\xc6\xf9\x89\x08+\x11\xf20\x13!7;\x11\x10\x86\",g)\x1a\xd2z\x8b\xb3\x08\x0by\x8b\x10\xa2\xf3\x81\x9b\xbf\x081\x1cF\xc0iII\\F\xb7\x0c\x8b\xf4\xb1\x88\xd7\x08 \x9d\x11\xe27B\xb0\xddA\x9e#\xa4q\x1d\x01\xa3\xa0y8\x8f\x90\x85\xf7\x08\x8b\xb8\x8f\x80\xbd\xc3\xa5\x1cH\x08\xf1 \xc1\xcb\x85\x84\x00\x1f\x12|o6\x96\x17 \x11\xdcH@\xf8\x91\xb0\x8c# q\xf1\xa7-\xde'\xfe\x18\xc2\xfd\xc4\x1f4\xf8\x9f\xc0\xfb9\x92D!\x8a\x8f\x07\n\xc1]k\x06>\xa8!q!)\xd4\x90\x86\x1c\xc9*\xa91\xc1\xc3\x9bl\x90\x1f\x0f\xe8'M\x89\x1c\xc0\x1f\x17\xf4'M\x93\xf9\xf0\x9f\x10\x00(M\x0f\xc7\xa1Y.\x18\x10\x0e\x04\xf2@\x81\xa2\xeew\xf1\x9b\xffl\x80\xa0\x10$(\x9f\x8e\x0b\x80A^h\x90\x1b\x1ct\x0c=\x98\x0c\x17\xca\x0c\x18z\xb0\xd0\x83\xcb`CA\xe0P\xbeQ\x9f\x0b>\x14\x00\x10eWx>\x8c\xe8A\x80D\x96\xd8\x01\x9b3\x8e\xfb\xaa\x92[f\x15\xb6\xd1\x95\xbf\x1d\x8e!\x1c\x8f!\x1c\x7f\xc5!\x1c\xff/\n\x94K\x8b\xb44L\x8f\x14\xa8\xdc\x05\xdb\x0e\xbc\xe7]\x90\x0c\x96\xe3[ \xc7\\\x12\xdb\x0c<\xb6\xea\xfc@i\xc7lN\xe1z\xe7\xb9\xde\xbf\x86lN\x1e\xe8(2Lc\xe6\x04\xffY\xd2|\xf8S\xd3\xd3\xe4\x89\xc0Z\xf4r\xcexv\xe2@\xe7X\xbe|\x08P\xd6\x9eY\x99\x14\xf8\x0f\xd5\x8b\x11\x7f\xa8\xa0\xcd\x9e\xea\x04$\xed\xa5[\xace\xcc_\xd3}K\x0b\xd2\xd3\x0d\xf36\xe8\x15m\x15\xd8\xee\x93\x10\xd6}\x82\xb2\xeezJ6\x12\x969\xb8\xb4\x1d\xed\xed{{\xb6\xd0\x95\xb43\x0d:\xbf\x91\xdb\x88\xbb\x8b\xf2\n>U\xb4~\"\xe5?\x85o\xbf\x85\x17\x9f\xe4}\x08\xe9e#\xf8\xe1\xc4-\xe5H\x93\x17\xa6;{Vsd\xa1\xf1\xa9\xc0\xb6\x14\xa4\xa3\xdd\xe4\xec\x84\xaf\xa9\x8a-\xdd7\xf0\xa7w\x17o\xd6\xef\xce/\xce\xde\xbd\xd5\x8f\x8fVq\xaf '\xda9dz\x9f\xfb\xcb\x9b\x0f\xde\xefO\xbf\xfbpqz\xf6\xd6\xfb\xcc\xdbw\x81\xaf\xd7\x7f>\xbb\xf8q\xfd\xa77\x17\xef\x8cQ!\xcf\xd3\xc2\x8a\xcb\xf7\x84\x8d\xe2\x87\xe5\x94`\xa3Y\x94\xf0\xaeN\xfdz2e\x05\xaeG\xec\x15D\xa3\x98\x87!\x00\x8c\x1c\x94&njPq\x9b\x83\x80\x14\xd2\xc9\xef\xb1k\xc8\xc0V\x16?\xe9\x85\x84Q\x84=m\x8f%\xec)|DaOZ\xe3\n\x7f\xc81\xbaDI\x18c\xa2\x88\xe9\x8euN\xcaI\x954\x1a\x9a\xedT\x1f\x91\xaek\x8a\x92\x1f\x9f\xf2Et\xf8^\xbcM\xef\xa6\xd9\xda\x17\x00\xfc\x99K\xa5\x1b\xb6\xd2\xbd\x9b\x8e6\xc2\x96\x87^\xee\xf7\xc4Z\xca\xff\xd3\xed\xab\xd2\xcc\x9e\xc7\xca\x87\xb2.\xe8K\xb9\x96>\xeb6\x9f\xe1\xb7\xab\xdf\xff\xce\x98\xb1>m\xe4xT\xad\xbe\x95\xaa\x19\x83\xf5\xab\xa4Z\xdd5\xb2\x16km\x1dw\xdf\xde=(\xc0\xa9\xf8%\x0fp\xdb\xf5f\xda\xa6\xb3\xd7'\xe3rw2\xe4\xf8\xb6\xde\xd0D/\xcb\xd7\x88\xf1f\xb8\x16q\x91T\xd9\xa3\xe9\xec\x17\xee\x99\x99\x8e\xcc\x7f+\xe6\x0b\xe2\xf9x\x15\xcb\xe0\xfd\xb8V\x8c\xd0j\xb1\xcc\x07\xb2\xc4\x95\xb5\xcb\x0b\xca\xee\x07\xb9<\xa1\xcc\xbe\x90\xf7\xc5\xb9n.c\x8d~x\x1d\x8b[\xc3\x82\xebW\xf4\xda\x95\xb4n\xa1\xde\xd1\x97=Vw\xfbI\xe1\xb1/Jf_)\xc5[\n\xae\xed>\x8f)e\x9ca\xcf\xbb\xbc\xa6\xd81\x87=\xeb\xf0\x9c\x12\xc6\x9f(I\xa3P\x14\xb7\xff\x14\xd1\xcb\x0f\xe3C\x85\xfc\x16\xc8\xebG\x05}\x1aQB:\xcd\xf2\xa6\"\xea\xf6\xd5;\xd7\xa7\xca\xe5UY\xfa\x89\xd3%\xdd&\x88eMt\xc3\xf12\xa0?^\x06\xfc\xda/\x03l\x0f>vw\x10\x91h\x81\x1f\x89\x9ekiO\"\xf6\x05f~\x12\xf4U\xa0c\xd3=.\x97\xe6#\x81K}\x06\xb8\x92\x8f \xa9:f*\xff\x07T\xf9vF\xa2\x11\x9b-\xa6%\x19q%\x18\x99\xa95\xda\xe5s\x13\x8aL\xbb<){\x886\xea\xc0\xca\xa4#\xfa\x8b\xdf\n\x95\xf5Vj\xd0\xd4\xce\xcb\\\xd7\xa8~\xaf\x01\xe6\"F\xb5q\x99\x84\xf6\xf0\xe2K$\xeb\x02)\\\xcd\x92\x8b\xa3\xe9\xa5Q\xb8\xae\xf4\xcb\"\xfc\xa2(\xa6\xa6\xcc\x17D\xda+\xd7\x1c\x90\xae'\xf5\x86\xb4\xf2\x92Q\x1a\x8d\xf8\x0c\xfe\x7f\x1anr\"\x06\x10z\x96\xe1\x9d\xa8\xc6\x12\x95\xe7\xe4\xc28\xb3\x08\xbf\x8a\xf4s\ns\xaf\xe6\xb6\x8c\xcbN%\xa673\xc8y\xc4\xd2\x93\x088\xd3+0\xce \xb2\x9d>\xa0\xaf\xc0\xdc\x0f\xc6\xec\x01}\xfb\xbe\xd0^\xcf\xb3\xbf\x8b\xd8\xd3E\xee\xe3\xacs\x84\x8783\x9cw>\x96\xf1t \xee\\\xe0x\xda\xe4j\x02\xbe\xc3\x8f=V\xcd\xb2\xab\xf7m\x902\xed\xe4g\xdfK$\xef\xdb=5\xe1\xb5\xcc\xd9\xa5\xe7\xd8\x9f;V\xd8w\xda\x84\xb6F\x81>WB3\xc45/|\xb3\xc11\x07\x02#?j\xbc\xe3&I\x1bV\xacm\x9c\xe1\xef\xb2G\xcaa)o\xa8\xee\xffJI\xe3+R\x83\xc1\xd9ANE\xb5aP7\xcf\x9a=:a\xac~}i~\xa0\x89Q\x1e\xb0_\x88| /\xb1\x0fGa\xf5\xc4\xc9\xf5K|\xfb\xee\xa5\xf1\xf7\xa4mQ\x12\xc6\xb7l\xca\x1a\xbf\x99J\x9d\xba\xa9\xc1\xb1^\xd6\xdb\xc4\xcd\xb6#!q\xd8\xad\x8bHD\xde\xd1\x9c\xbf\xbc\x8f\xcb\xb9&\x0e_\xd8\xff\xfb8r\xe6\x12\x1d\x1en\x0b\x97e|\xa1Z\xbc\x14;\x97F9Nwe\xdd\x0f\x035qf\xb2\xdf\xae\x0d6\x08\xdaO\xf2\xd8\xb1\x97\xc1h\x8a\xa6\xe4,U\xf6{\xf9LY_U|\xb2\xae\xd9j\xb0\x16a\xa9\xe2\xa4\xeed\xbadR\xd7\x07R\xc9\x88VP\xd6\xa3Lh\xc7\xb1=V\xb4#wi\x15\x84\xe4\x05O5\x94\xa5\xb2\x18\xd9\xd1\\\x88\x18\xe3\x0f\xae\x05 Fr\xc4B\x00\xbe\xc5\xc0[G\xf8N1~ax\x80\xcc\xe9bbL\xfd\x98W\xda0\x8b\x98x\xdd\xe1\xb2\xdb\x93\xc2\xeftLn\xa6\x91\xef\x8d\x9b,\xeb \xdc6i\xea\xea;\xbf\xb2\xde\x947\xe5\x86/\x1cj\x96\xcb\x91/b\xfa\x88`\xba\xba\x10\xf6\x88\x10tn\x9f\xeb\x1b\x9d\xb4\xd8J\xf9\x8c\x14\n8\x18Z1\xcb8\xd9/\x08\xdc#6\x16B\x80\x04\xaa\xf4\xbf4\xc7\xe0\xcd4p\xf9\x0f>\xc8\x86\xa6\xbf\x16\xd5E\x0f|\xfe\x8c\xbf \x8f\xf5\xf8L\xefsA\xeb,\xe9\xbeco\xd5\x93\xda\x9ei\x9cI\xaa\x152\xd0V\xbd\x19\xe8\xb3L]~e2\x11F\xef\xca\xaeg\xafvz\xca\xc9~\xa0D\x99trt\xf3\xf5/\xf6\xa0\x9az)\xd6\xfb\x87)mP\x1bi\xc2\x8f\x1e\xc2\x8f\xf0\xc3\xb2!VwK\xb7e\xd7s\x0c\xc000\x86v\xf26\x8a\xc35M\xfb\x80\xda\xf8\xa0\xfd0\x19\x0e \xc34dj\xe7\x0d\xe3\xa0\xb9]:*\xb4\x91 \xeb\x9d\x0e\x01YK\xa0\x13\xbb\x8at\xd7e\xbd\x9d\xbb\xf9\xee\xcamM7k\xb9\x9c\xdf\x96\xf5\xa6\xb9\xf5v\xe8\xb8\x88\xebk\xf8\xae\xac\xd7R\x14s \x92\xe4h\x9e\xfb\xa6\xb9\xad\xfbrG\xd7\xffN\xcaj\xbd\x91'o^9\xbc\x03\xd6W<\x1a}S\xaf7\xcd\xe1\xb2\xa2\\\x97\xf4\xea-YB\x9bTA\xd8\xfeu\x88\xe6e\xf9\xdbC<\xeaK\x01\x03So\xd4\xde\xccZ\xefz\xf1\xdakM\x8d\xb8%\xd4;f \xc6\x014\xfd\xbf\xc0\xf8\x89\x92i\xa0\xf7Bc\xc9#3fLy~\xeeT)8\xbe\xd2\x85f\x1fk\x83'\x9e\xcb\xbf\x0e\x8d\xdf\x0f\xe5\xb6.\xeb\xedY}\xd5$\x0f\xe2\x1bR\xf1\xd7R\xd6\xdbuY_Y\xc8\x99\xa8\xe1,A\x1aQoAD\x1f\xb9F.^\x83\xaf\xcd\xb9\xe5\xf9Q\x1e\xef\xaa\x800\xfc\xbc\x9d\xf4M\xcb\xc1\x8e<\xaa!\x10(H\xbda\x1fSx\xf7\x9e\x7fq\xa8\x9f\xb1\x91=\x89\xf5_\xd6\x1bz\xb7n\xae\xae:\xba\\=?\x12\xe0\xf5\x9b\xf3\xf7o^\x9d^\xbcy\xfd\x12\xceX\xb5*\x9cM\x07e]\xb4<\xa2\x0d\xdd\x00\xbd\xe1\xf0\xd6r7\x84R\xe7-+\xcd\xd4\x15r\x9bY\xd6@\xc4\xd6\x8f-\x9a&\xf8s\xbd#\xf7k\x91_A\x18\x0b~uJ\x9f\x15\xcdnW\xf6\"3G/\xf1/e\x0dES\xff\xbb\x0c .\x82\xf8O\xa5!\xe1\xd10\xcb6\xecDz\xda\xee\x06\xff\x89\xf7\xb4\xc2*\xef\xca\xae\xb3r.\x88V\\\x96\xfd\x8e\xec\xf5+s\xf1\xd2\xd6f\x89\xf7-\xeb\xa4\xaaFE\xd4\xa4\xc2X\x8e \x1b\xce#;\xf1\xc8NT\xbfp\xbfCQ\xa5\xe6\x156\x93\xf0\xffe\xcd\xe3\x82\x8f\x8e\xa2\x8c\xbd\xdf\xc1-\xef\xebi6\x91\xa2i\xc5\x83\xb8\xcc\xcc\x12\"\x10\x7f\xc8{N:\xa1\xd2\x7f'\xe5\xa5\xf8\xcf\x98\xd5\x8av\x9d-\xc7\x16\x19\xe0\xb83\x8b\xce\x04|\xb5\xc8\xeb\xba\xe2Nk\x82:\xee% \xa3s\x1atK\x17:\xa4\xa6\x03\xba\xc8\xf5\x14\x1a\xea\xdaO\xd6M\xdc\xdd\xf4\xf6\xb8\xedb\xba{=\x97[i:\x94\x98+\x89;\x91n\xddr9\x8e\xa8\xcb\xb8\xc8YT\xce\xa1&\xcfr\x13\xfd\x0eb\xc05\x9c;\xa3&\x8b\xc6|\x17p\xe2\xf2\x8d\x02\xe3|=\xfc\x85.\xf0\xef\xec\xe3\x9b\x89g\x87\xfat\xca`\xf7<'\xed`\xaf\xbfk\xea\xcd\x07-\x81\x8b\xd5\xcfSf\xccw\xef\xde\xbev\xa7\x131\xbfg\x7fy\xbf<{\xfb\x03\xfa\xad\xf6\xc3\x01J\xee\xab\x1a\x7f\xe5c\xdb\x06\xffU\xfc\xc5YEC\x07\xeb\xc4\x16G%/\x01%\xb3\xd4P\xd6\x12\xff?\xcc\x11#\x9d\x0d\xde%L\x9e\xf8\x1f\xf6\xc6\xc5\x05\xb8Lc\"L\xb7W\xde\xd9\xdb\x1f\x94\xc0\xb3\xb7?x%\x1e\xeaK\xe1\xe58\x04*\xf5\"\x94\x1b\x15s\x0c\xadW\xccZ\xf0D\x10\xd1\x0e@1\xfc\x84\xa3\x18]\x10\xcd\x89Q4\x7f3\x01r\xf0l\xe0\xfc\xc4Q=\x04\x92 \xc5\xfdEu\xe3\xa7\x8bk)\x11pb}\x84\xa8o\x13\xf61\xac\x9eHw}\xd28\xf6\xbb\x01\x8b;U\x9bg\xeb\xdf\n\xb3\xb4\xa1\x15\xdd\xf2m\xd7 \xf0\x1cZ\xea\xe2tr|N\xee\xd6s\xf5\xb0v\x08J\xd8\xa4\x83\x15\x8c\xd3\xd4\xd4t\xaa\n\xeb\x94\x84\xf9-\xb2A\x81\x16\x088^\xde\x86h2\xd1\xf6lHY\xdd\x0b?\x8bt*\xbb\xaf!\xc7X\x18y\xeb\x1dM9\xec\x99\x0f\xb2N\xc0K\x04|\x16M\xa0\x1a,\x15\xe9z\x99\xe5\x01\x19:\xccy\x15\x8d\xc6hY\xe3\\\x1dzC\x13`P\n\x14Up2?\x82F\xe0\xfd8\xa1#,\xc1\xf4e\xa3=\xf5 \xb3\xc6\x9e1\xe1\xba'\x03l\xe9,\xe1\xf3B\xb7G\xbe\x19\xe2\x9c\x1d3\x94\x9e5#4WRS\xd9?\x1bp5\x8c\x81\xb2\xc0\x8a+\x0b\xae\x96u\x125P_kZ\xc5\x0eR\xe6\x86}\x0ez\xa9\x93\xf6\xca\x9fh+\xeb\xf5aG\xeag\xcc\x93\xe4\x87+\x1c\x12\xa7\xb6\xe4\xd6\nTnh\xdd\x97\xbd\x1f \xed{\xd3J\x80\xee\xc4\x08\x86\x1c\xa9\xc6/\x87\x9c9\xf0\x84\xde\xad\xe0\xe3y\xd3\xf6\xd3#\xe1?\xd2\xfbK\xd2\xd1\xa7J\xb1[z\xd9\x95i#P\xfe\x04\xd5D}W\x95\xf5gUEG\x8bC[\xf6\xf7kN\xa9,B\xdb\xedI]\xe6o\xd1J\xe9\x8e\x94\x15\xef{\xf58\xc8\xc7\x95\n\x1b\xda\x93\xb2\xf2\x1fP\x185\xcb\x9f\xc8\ne\xb8\x8f\xa1J\xf9-21\xb4\xf1\x88\xbaa\xda\xc3\x9eQ\xfdc\xd9\xb1}BA\xaa\xa4\x83\x98kJ6\xf6\xb8\x8er{nh\xdb\x95\x16\x92L\x9c\xb9\\\x92\xae,\xe4\x06\xa9\x1c\xefg=u\x80\xe7\x1aT\xdeI\x99\x1fz/\x10\xbcG\xa3\x00d\xbf\xcf'\xce\xef\x84\xbcj\xea\x8e\xd6\xdd\xa1\x83\x82\xecEz*\xb1v\xa9\x8f\xdbC5\x06\xf5b[O\xe1\x94\xaa\xde3\xc4\xb1\xdf\xf2\xaf\x8akR\xd6'\xe6\xd1kY\x17\xd5AdD\xad*\xedA\xe6f\x10\xd6\xb6C!tP1\x15D\xed\xa8\xdbC\xf6\x82\xc9\\6\xf5c+n/\xdb\xfeP\xe8[R\x8b\xf4j\xb0#\xc5uYO\xee\xd5x\xcd\xb1\xd9'\xb2\xa0\xc9f\xe0\x08\xb1kI\x9e\xe2\x97w\x9e\xad\xbd\x18\xe1\xfb\x96\xded\x1c\xe0\xd7\xa4\xbb\x9e9 \xad\xfb\x10\x0ej\xed\xd7\x1d\xed\xd7\xe6\xf4V\xc5\xa9!x\xb5\xe4?\xb5o'\x86\xaf\xb8\xd4\xb2\xee\xe9\x96\xda\xb7\x8a\x10\xb8\xd6\x03g7@\xa8+\xc0\xdf\x1d\xc3K;'m\xdf\xd1\xfeG\xde+\xe6\xeb\x16g^k[\x85\xe0\x08\xb2\xaa\x94\xd51Qbn\x89\x81\xc2\xa6\xa0\xf6\x1c\xfb3Cu\xe3\xb5\\\x06a\xa6\xeeWm\xb3\xe3f\x82\xec\xf7\xd0\x1c\xfa\xfd\xa1\x1f?\x1b\xe7\x80&\x81\xdf\xb7e\xd5i\xb0\x94\x19d\x91\xfd>\x83\x14>^\xe4\xa5N\x06q\xf4\x86\xf9c\x05\xcd jx\x7f\xe3\xf2b\x98'\x11^\x83\xb6\xeb\x14\xbco\x0c\xeaZ\xcc\xaa\x89;?,7\xe2 N\xcc\x02a\x93\xd42qC*\xe4B%/\x8c\x8a}\xca\x06#\xded\xafm a\x0dL\xd1\x93\xe6\x1ba\xef\xb4\x83^\xa7\x9c\xff\x05\x97\xb4\xb8\x06Z\x17\x8d\xbc\xc7\xf9\xd7\x0f\xef\xdeN\xb1\x15\xe3|\xd8\x1f.\xad\xfbs\xafq\xf7\x99v\xf6\xb3\xf5\xa1Em{\xc0\xfa\x86z \xf8\x91\xfc\xc7\xf7?=oi\xd7\x1cZE\x08\xe2'\x8c\"\x02!\xdbq\xf2M\xc9U){\xaf\x974h\xdb/\x11\xa5\xa3mI\xaa\xf2\xef\x14M\x06\xca\xdb\xda7ES\xc1\xe5\xe1\xea\x8a\x0eI\xd9\xe5\xdd\x96h\x8b\x88\xde\xa2\"\xb7\x90\x1e*J\xba\x1e\x97\xd7\xd4\x14\x1e=\x7f\xc4\xf7\xe9\xa4\xe8i\xbb\xe2IM\xf9aLG\xb7;Z\x0f\x19\xaf?\xbe\xff\xe9q\x07{\xd2_\xf3\nPq\x03;\x01\xaf\x8d\x89\xb9:T\xd5=\xfcr \x15\xeb\x95\x8d\xe83Y\x05\xef\x9d'\x84Mo\\\xc0'V\xbd3/\xfc\xa7\xa7B{.\xb2\xbbn\x0e\xd5\x86m\xb0KW\"\xe2\x82\xd4M\xcdv\x17\xdc\x10\xe05>\xa1\xab\xed\xea\x84u!\xf7?\x1f\xad\x1e\xa9\xa3mR\x14t\xdf\xd3\xcdS\xca\nm\xafZ\xdd\xa3\xf94\x80\x1f5\x02\xe1mu\xd4G\xdb\x1b*O\xf1wd\xdf\x89!\xc3Z\xc0\x83\nH$\x03\xb7W\xdc\x81\xef\x80\xe0m\xbbj\xaa\xaa\xb9\xed^:\xde\xddo\xe0\xecjl\x01{\xe5<0\xc7\x86n\x86F\xb2\x0fI\xd7\x1dvt\x83\xc6\xa7gBNk\xf8\xf1\xe2\xe2\x1c~xs\xa12\xed~|\xff\x93\x98\xa0\xf72\xffj\x0e\xf1\x8b\xfb=\xfd\xdb_\xff\x86>\x0c\n\x8dR\xab1$\xd65\xfe\x16\xf6m\xb39\x14\x94_z\xb6\xad\x89hS\xe57p:n\x8b:\x8e\xe5!\xac\x7f\xc4\xb1cA\nf\x13\x9a\xe6\xf3a?\xc0>.IG7\xd0\xe0y!\\\xe6\x0dX\xf3\xb9^\xfc\xb2\xbe\xbf\xa6;m.l\xc4d \xaa\x19\xc3\xf5\xe5\xf4jV/B)>\xed[z\xd5\xb4\xf4D\xfd\x98\xc9$}yYVe\x7f\xcf\x03c\xab\x037n\xa2\xda\x1b\x04%*JS\xcb\xa3f\xfe\x03>\xefV\xf0\xe4cG\xd5\xe9\x00\xeb\x156\xec\x98\x9d\x11\xe3\x8e\xd4d\xebj\xf1eK\xf9\xa9\x86\x12\xbaz\x8a\x8f\x96\xb7MO_\xca\x18\xaa\x12\x9d@\xb8\xee\xd2\xde\xc8\xc8&\xd5\xbd\x8ee\xaa\x9d]\xddp\x10\x97\x0dc\x12E\x0d,h)[\x1d\xa8\x08GX\x0e\xf7v\x03\x99l\x9c_\x97t[\xd6\xb5k\xa7\xc2\x81\xbdN\xc3\xb5\x12\xe3\x99\xec\xcbnU4\xbb\x15\x9cr\x07\xe2gr\x0f_\xff\xf6\xeb\xdf\xf1\xb8\x88#\x86\xec\xb6\xdc\xd0\n\x7f\xe3\xe2Z\x9b\xe9$,\x01^\xe5\x90v[\x8d\xe7z\xc3\xe4\xee+R\xf3\xf75|\xcf,\x93\xcb|\x7f\xe0S\xbf\x93g^\xfd5\xa9M3\x07O\xe4A\xa7\x00\xc6 [\xf1\x14\x15\xb6\xe3p\x9dK\x87U\xe3\xad\xe2H\x94\xa9\xe6\xd0\xediQ^\x95\x05ttG\xea\xbe,\x90\xcc*H|\x02Q\x02\xfe\x8dwo\x19\xe7\xfe\xfc\xcc\xec\xd8\xe5\x80\xdc\xd1\xbc\x17\xcbQ\x91+<\xb9ln\x1c\x9e\x8fh\xaa|\xbdf3C\xda|:\xad\xef?)\x9fG\x04El/\xcb\xbee\x96\xc0\xa3\x95\\0,q\xa4j\xea\xad\xcc\x0do\xbf2f\xc2\xf9\n$\xb4\xba\xb4};\xbdN\xe5\xa2!\xc3\xec\\\xcd\xc2\xaa\xbc\xe4\xaa\xcaE\xa6\x83\xee\xb0\xdf7m/\x02\xe1\x17\x9f\x9f\x1fj\xf6\x0f[\xbc\xc5\xfb\xee\xec34\xe9^\xa1\x9eLs\x05\x87^XBe[:f\x85\xc9fS\xca\xb3\xdc-\xady\x98\xcd\x8dD\xc9\x0d\x1e\xfe)b|\xc5+\xb2\xebysG\xd8\x00\x86\x17/\xe1\x9c\x08\x9c\x16H\xd5\xc9\xb0:\x975\xbc\xfa\xe7\x7fv\xac\x99\xdf7\x0d\\5\x0d|\x0b\xab\xd5\n\xc5\x15\xf2N \xf5=\xfe%\xa9\xefW\xac\xea\xef\xdbf\xf7\xe4\xaai\x9e\xe2\x8f\xadV\xf8BX^\xc1\x13&\xe2#W\xfa\xa2y\xf2OL\xc6S\x1c\x0e\xe9\x91\xf3\x0fw\xdf|\x1d\xe8\x9b\x7f%7dq\xe7\xc0\xb7\xdc\xd1c\xd2\x17\xf4B\xd9=\xf9\xbeiVEE\xba\xce\xd3 B%\xf6\x03\xd1\x1e\xedGx\xbd\xff@?}\xfe\x9c\x0d\xc9\xb0N\x1f\xc8\x8e2\x7f\xe8Th\xb7\xa5\xbd\xcc\xa7pVw=\xa9\x0b\xfa\xe4i\xaa\xb2\xa8\x0c\x97\xee\xf6\xc7\xea\xd5\xfe.\xf0j\xcf\xef\xfb\xeb\xa6v\xbc\\\xa1\xd8\xf7M\xf3d\xb5Z\xe1\xab\xc8\xf0b\x9f8\xbf\xe7\x83\x9f\xbf\xf2\xd47\xce~|&\xba\xf4\xf5\x9b\x0f\xaf\xde\x9f\x9d_\xbc{\xff\x14?\xb8\x14U\x89I\xe2\xaeLT\xe7\xee\xae\xdf\x07\xba\xeb\x87\x06\xef)\xdeU/\xbf\x85\x7f\xda_\xae\xbeo\x9a\xffX\xadV\xf8\x88bZ\x9e0\xbf\x97=M\xea\xfb\xfd\xe5\xea-\xbd\xf5(\\^\xf1\xa7\xff\xc7\xb7P\x97\x95s\x089{\xd11\xb0\xdd\xcf\x1b\x0dq\xfc\\j%\xda\xb0\xfaX\xefH\xdb]\x93\xea\xa2\x11S{\xa9\xca\xd6\xe7\x17<\xb0@\xf1yX \xd4\xde\x07.\xefG\xcfQ\xadY\x82\x1dp\xaf\xa0n\x96\xb4C\x87x=\x8f\x11\xaf\xf0\xf9\xd5\xa1\xaaV\xfc\x0b\xe6Y?\x06\xa2\xad\xabl\xcd\x95\xb7;v\x0d|\xec\xd8\x95\x0c\x0bY]\xdd\xabm\xacu\xfe0x\xf2@\xaez*\xfc\xb9\x8a \xe7\x1b\x8f\x9f?\xb6\xab\x90\xfbk\xa5\xa2\xd8PS9\xbe\x1f]5\xcd\xea\x92\xb4\xbcqw\xcf\xefW\x7f\x7f$zKl\xfd\xf0].W\xe5\x11{\x16[`\xff\xf5\xc3\xbb\xb7\xf6\xa7\xdf~\xfb\xed\xb7\xf8kd\xcf\x8f\xa72C\xacc\xe6\xcbr\x8fI\xec\x1c\x0f\xdd\x109h{\xa8\x08\xe2U\xdb\"\xd8\xe3\x1b:\xfa9'#}AN\xe1\x13\xe9@!g9\x9a\xdf!\xf2E|\xfa?\xac7>\xc9#\x87\xc1\x8f\xd3\xfbv\xa5\xec\xc6K\xc7\x96\x86\x14\x9f\x99\xe1\x18\xb7\xceWeEq#\xae\x8c\xcc9m\xbb\xa6v\xce\x1ay\x9e\xc6\xe1\xf4k\xfeb\\d\x87\xf1a~\x8c.\x9f\xfd:~ \x01pj\xf1\x88\xf7\xcd\xa3\x97\xf0\x08\x9b4\xd3\xe6\xaeD\x8b\x1e\x9d\xb8d\xf1\xb6\xbc%;&\xef\x7f\x0b\x95\xff\xe0|\x98\xb5\xc5x6\xb6AgWrg4\x1d\x13\xe2m\x96\x1d\xdc\xd2\xaaz\xf6\xb9nnk>\xad\xaf9\xd2\xa68t}\xb3s\x0c\xf2\xe9\x10<\x11\x1e\xb81.G\xa6\x92\xac\x96\x0d\xb4z\x8b\x9c\xb2\xf0agW\xf2\x89O\x085\x0e\xaf\x9bj#/\xb6G\xcd\xf8y\xa2\x1c\xbf \xcf\xee\xe4\xf0\xb5\xe5\xf1j\x86\x91\x0bO8\xfcYv\x85u\xc8\xa3\xce1\xff\xf6\xd7\xbf=u\x0c\xf2\xa5cdZ\x91{\x98\xf0n`\xe2^\xac\xbe~\xf1u\xf7\xc8\xf1\xda\xf5\xbf\x04\xa7\x00?\xb7\x9f\xc74U,\x05I\xb0\xba\x95\xfc\x81\xc9\xb5\xc3H\x1d\x90O\xf3\x8b<\x81\xee\xb5\x04*\x00\xb5\xe0\x83|e\x7fej?E\xe1L\xc0\xd8&f\x1a\x9e\x88J\x9f\x0f e\xf9?~B<\x15\xeb\xd9\x99\xbb\xd2\x9e\xf8\xa1\xeb\xee'' v\xffc#\x9c\xdd\xf5\x1c*,\n\xe2\xaeJ\xdf|\xa6\xae\x1c\xba\xe1\xbb*\xf1k\x05F\x12+\x10GD\xf2sJ\xfe\xdd\x93\xb2.\xaa\x15t\xb4\xbaz&\xbf,\x9b\xdax\x03\x03\x8er\xdd]\x93\xd6\xbe7\x8a\xd5\x07\x19\xb3\xa6\xe8\xf1\xeeL\xa4\xe9\x13\x1f\x96]w\x90\xfc\x0c\xef\x0d\xda\x08\xf84\x1b`\xc0\xfd\xf0\xaf\xf4?&\x97x\xfa\xe7=mw\x9d\x1b\xb3\xa7J?\xef\x02\xce\x02\x19\x8e%p>\x95\x13x8\x16\x1b\x828\x96\x14\x85\x1c'b\xf3\x01\x8a\xa8\xb8\xa6\xb5\xa0\x8ac\xb1@\x8bcIiI*\x90q,nH\xe3XR4q\xf4\xe9L\xf4#*\xcb@D\x8e\xc5\xc2F\x8e%\xa5 xIU\x86\xf5\"o\x8c\x93P\xcf\x9a\xd5\xaa^=a\xdb\xcd\xe1K\x91\xb1\xe8\xda`\x9b\xf6\xd7H\xf0\x10sI\xde\x1ej\x84\xb0c\xd4mC\xdb\xa2\x1a<7\xea\xc6\xb4b_\x93wlgW\xee\xcc\x88\xf9c\xd1(E\x0d\xbfl\xaahO]\x0d.\x0c2\xd1X&\x1a\x176\x8f\xa1\x9f2\x02F.C&\xfb\xec\xe6,\x8d%\xd4\xab\x98\x9c\x04\x04<*o\xb8\x80\xf23\x9a\xc6\xe2i?\x04\xf1\x7f\x18\xdfi,\x01\x03\x00\x91]\x04\xb2\x9a\x19D\x0f\xa7<\x8ct4\x16\x9c@5\x96\x8c\x0dK'\x8e8E\xd9\x84\x920\xd1j,^\xca\xd5X27=\x99~\xe2\x94\xd6\xdb\x9ce\x1f5k,(IK\x93\x1bw\x1b\xe8\xb2\xac\x10\xd9!s\x98]\xb8A\xd1\xd9^\xaa\xf0P\xb2\xb4\xbaZ\x8f\xae}\xc2\xea\x11\xd2\x1f\x91n\xed\xf6\x1ew|o\x01\x1bZTD\x90\xc1y\xb6\x06K\x98|J \xc2\x0e\xf3<\xb1\xbfU\x19\x17\xac\xa6^_7\xd5f\xdd\xd2+\xc1/Oh\xb8\xcfOpET\x11\x07ZE_\xdd\xc3\xbe\xe9\xca\xbe\xbc\xa1l\x99\xe4\xf8\x04\xbd7\x06\x0d\xc7\x9dx\xd77\xfb=\x16\x84\xeb\x1e\xe8]O[\xe6\n\x89\xa0\xb4\x9d\xa3\xb1\xe5\xc6\xb1'[\x1e\x0c^\x14/\x8f\xc2\xdd%U\xd9q\x10\xd5\xd8\xe8r\xd3\x9d\x00%\xc5\xb5\x0d\xf9\xe3I}\xb4G\x91I?\xedM\xedk\xdfP\xfd\x93\xc6\xa2\xb1\x985'\xd07[qN2$\x12\x13[O\xb2c\xa3F\x81\x0fq\x89\x8f\x051ZmS\xe5\x81{\xd9\x02\xbd\x93\xf9T\xf8\x9c\xe5\x1eOYw+\xf8 #\xa8L\xc4)\x88\x90\x89\xe2#l\xd6\x08\x03(\xcf\xcd'bO\x04\xe6\x88Ce\x9a\xb6\xa5E\x0f\x05\xa9\x8aC\xa5\xce\x9c'\xc2\xae\x0el\x03\xf5\x951\x80\xc6 \xd7\xf1\xf67\x87\x9e\x8d\x8fV\xb8\x10\xcd\x0d\xdfB\x0e{j\xf8\xf35\xadES\x80\xb4f\x00\xa6\xf1daZ\xcb\xf4\xa5\x9d\x18\x16\xbb\xec\x98\xcb\xb2)\x87TnD\xb3\x02p{\xddt\xd3z\x86PE\xd3J\xf4\xd7P\x8eh+^\xd9\xf8&\x85\xea\xa3\xaa<\x1b\x88\xb8\xa71}V \x1f\x9a\xd62\xe9\xff\x95Lo\x08\xfb\xe6\x96\x8a\xc5\xf7\x92\x0e\xaf\x80n\xf8}\x0c\x1fJ2 \x8bPo*qw\xa8\xfar_\x95B\x89\xa9|\xfe >\xb2\xa7L\xaf\xf1\x02@\xe0\xaa\xf9@\xd4\xba\xb8\x16\xd3\x97u\xa8\xc6\xe8\x95\xa28 {\xb8v\x94\x11A\xfa\xa6\x15\x0d\xd8\x93\x96\xf7\x9c\xa4\x9aI;\xc4\xacz\xcf\x87\xa0\xd8\xe0\xeci+2\xb8\xf2\xc3\xdd\xfa\x93\x14\xb6kF\x1cmKy\n\x9d\xa9\xe2\xea\xcb'\x9f\xeaO*\x12\x89\n\xc7mV\xf8\xe9z\xf8\xe9\x9a\xd6}[\xd2\xee\xd3\xe8\xdf\xf3\xfd\xbe\x83\x16\x97\x98\x06\xc0\xb5\xdbB\x0d\xe4\xe4\xf5\x18\xdb%\xb9\x16\x8a\xad\x93\x969\xd3\xda\xf40\x8fhdK\x985\x9a\\\x9a\x888(S\x81J\x11\xe5\\\x8d\xd1\xbe\xc6gtUd\xeff\xd0\xc3\xa2\x1dK\xd1\x9aF\xa0>\xe27\x81%\xb7\xc4\xe3\x1a\xa0\x99\x82\x89\xbdo\xa9\xf6\xcd\x93=maO\xca\xf6y\xdf\x96\xcdp\xf2c\x8f\x97\x0c-\xb2\x85\xaa\xb6\x8c\xbd:>34\xaeo\xd4\x1cQ\xda\xb1\x16Fez\x9cT?\xfej\xe26\xb3\x8f\xf9\xb1\x1eO\x17\xc6\xbf\x97A\xf9\x86\xf7Z\xd6kc\xcf\x19\xa8\x17[\xd5\x11)\xc3\xee\xec\x9a\x94\xf5\xb3\xdbrC\x87\x84\\\xa6\xeb\xcao\xa0\xf4\xbd\xd9t\xe7\"6-r\x01\x1dW\x9d\xaf\xacN\x88M\x8385!>\x03\xd14U\xb4y\xa8\x9b^&\x13[\x9b\xa7\xf3H?\xc6>9i\xe0\x98\xc6\xaai\xaa!:\x11oXK\n\xde&\xb9\xa4\x08\xa4f\xffL\xfe\xc9\xab\xe1`\xb8\xea^]:\xb3\xaf\xa48s`8\xba\x83\x87\x86{=\xcc\xaf\xe4\x98\xc8\xe3\xd4\\\xb7\x93\xdf\xa2\xbf\xc7eL\xe5L\xbdU\xe7\xd1\x85\xfb\xd0b\xbcfp\xd0\x7f\x02\xfe\xafqhi\x08Ss@1v\x0c\xce\xcf\xf0\xbc\xb9 \x1d\xc6\x7f\x0e\xad,a\x01\xad\x9c\xa7C\xf8\x1dO\x8a*\x93\xab\x1c\xbd\x0b8FW|\xc9\xfc\x81\xf2\xc6\xdc\xb0\xfa\xb7\x9c\xe3\x984\xf3zp\xf7O8\xf0\xe2^\xeb\x9aV\xdc\xa3\"5\x90\x82\xef\xffVpf\x1et\x95\x16\xa1\xb9\xb9\xad\x85'\xd6\xd4\xda{\x93h\xef\xce\x95vxt\x02\xad=KS[\x98\x15\xb4\xe3/IEj<\x13[\xe2@\xb7RM\x82\xff\xdd \xef8\xe1'\xfew\xf4J\xac@j\xa3%,\xd2\xe0\xd8\x8f\xf6G$\x82\xaae\xf5\xf6v\xff\xed\xbb\x8b7/9&G\xba\xef\x02\xf8R\xf2k\x8c\xb3Z\x1d\xad\x0f\x00p\x1dw`\x88\x92a,\xcda\xae.\x95:\x1e\x03\xb4l\xc5\x8b\xdf6\xdb\x86_\xfc\x8fo\xc7\xdd`\xdbH2\x05y\xb47e#\xab\xe2\x8a=\xe7\x8c<\x17\xaf\xff\xdc\xa8s\xe1\x98s\xf1:\xa0}\x98/\xda\x9c#\xd6\x9c3\xd2\\\xbc\xe2\xc9Q\xe6\xfc1\xe6\x9c\x15\xbb\xa1E\xfe~\xcc\x1c[\xce\\4\x9d\x91\xe5|q\xe5\x82\x8d\xc4\xb1\x83\xb1\x0d]\x18Onlb0\x9a\x9c+\x96\x9c\x89n\x9c\x19In\x86e\x0d\xc7\x90\x0bO\xbb\xbc\xf1\xe3\x12\xa3\xc79\xdb\x0cA\xcc\xae;\xc6\x98w:CT\xa7@\xf6\x88q\xbe\xd8i\xfehq\x99\x9a\x93-N\xdc4\xd6BZ\x94\xb8\xa8\x18q\x19\x1b\x9c\x1c\x1d\x0e\xb1\x10\xaah\xed\x8e\x8d\x0d\xe7\x8d\x0c\xe7mf\x18W=\xe9\x849\xc1\xdf\xb0@o\xc10o3\xdd\xe0%\x01\xde\xf8\xa7\x86\xbcQ\x8c}v\x15\x0c\xee\x16\x8d\x04\x0e\xae\\\xf1p\xbf.oH7?\xca\xd7\x13\xceM4\xc9fU\xa0\x9c\n\xcf\x08\x9d\x81x\xcc\x1b\xc2\xcd\x11\xc0\xcd=\x0cs\x07o\xcb\x1a\xba\x0d\x0f\xdc\x961l\x9b\x1d\xb4-_\xc86}\xb3\xad\xd7\x903\\\x1b\x1a\xac\xed2o\xa86$P[\xee0miA\xda\x1c<<\x0b\xf2\x1a\x81\xbb\xb5\x7f\xbc\x08l\x9bN\xbb\x1b^\xfc\x03\xb3\xed\xfc\xb8\\\xafM\x0b\xb9\x153\xd1\xb9N9\xc7\xec\xdc\x91h\xdd\x10^77b73f\xf7\x98\x9d{Rr\xe2w\xc5h\x0d x\xf3bx#P\xbc\xd9q\xbc\xc7\xec\xdc\xa2$\xe1~\x17#\x7fsc\x7f\x8f\xd9\xb9\xf5\x12\x87\x02\xce\x8c\x03>f\xe7^\x88 \x9e\x8f\nF\x85\x1d\xb3s\x1f\xb3s\xdb\x82\x96\xe1\x85-q\xfd1;w\x1cz8\x9c\x97:\x0eA|\xcc\xce\xcdK\"\xa2\xf8\x98\x9d\x1b\x15\x1c\xc4\x17\x87\x10\xc6a\x8c\xf11;\xf71;\xb7Y\x8e\xd9\xb9\x8f\xd9\xb9C\x98\xe5\xcc\xa8\xe5\x87\xc0-\xa7 \x97#\xb1\xcbI\xe8\xe5x\xfc\xf21;\xf7\x1c4s^<\xf31;\xb7\x0f\xd9\x1c\x87m>f\xe7\x9e\x89u\xf6\xee\xcc\x8f\xd9\xb9M\xe9\xd9\xf1\xcf6Xy\xae>\xc8\x98\xcd\x89\x83\x06\x07\x12\x1a\xdcXh\x0b\xc6\x99 \x0d=\xfb\x02\xee\x98\x9d;\x12\x1f\x8d\x8a;f\xe7\xce\x8a\x97>f\xe7\x1eKf\x04u\x02\x86\xfa\x98\x9d[+\x990\xd5\xb3\xeds\x18Y\x1d\xeeUL\xce2tu2\xbe\xda\xdb~\x08b\xac\x8f\xd9\xb9\x976,\x1b\xeaz\x19\xee:\x12y\x9d\xbd\xe9\xc9\xf8k\xa7\xb4\xfe\x98\x9d\x9b\x97cvnH\x81pG-\x9bi\xa9\xa83C\xb9C`\xeecvn\xedk\xdfP\xcd\x0d\xf0\xce\x0c\xf1>f\xe7N\x80{\xff\xf7\xcb\xce\x0d\xe6\xe8\x1e\x01\xd3\x93\x95s\xfc\xf8\x98^H\x95cpqS\x87\xffB\xc1\xc5=\xe4\x82\xb8\x90\xe2\x88\x80\x04n\xc34\x8d|2\xad\xe1\xba\xecz\xc7\x0cc_M\xe6\x96\x96\xcd\x9b\xcf\\\x01Y\x16)\xf4\xe5Y\xc2\xacI&R\xf5c\xa3)\x89L,Q\x9c\x88\xc7 F\xd9%\xe9\xcaB$\xf9\xe7\xfa\xdb\xcf\xf9\xb6\x9a\xfe\x8d&\x97\x8a\xefI\x82;\x92`\"\x11\xb2\xdf?\x8c\xe8\x90\xe3\x0c\xf0J\xd17\xa0 {\x91PO8\xfb\xea\xe3\x96y{|X\xef\xdb\xa6\xa0]'\xb6\xf4\xbc?\x10y\xd2&\xf3\xafy\x9e\xf4\x13\xec>\xac\xac\x8b\xea .\xf8\x98\xa9\x1a\x1ef\xbb\x18\xc2\xda{(\x84.\xd2\x91\x91Z8\xf9\x17d\x04A?F\x92F\x8a[\"\n}K\xeaN\xdc\xff\xedHq]\xd6\x16\\\x91k\x81\xa6\x8c\xf1\xbc\nWN\xa6(G\x16\xf7c\xb3\xd3q\xf9\xed6\xefh\xbcub\x06\xed[z\xf3@\x13\xe8\x9at\xd7\x0b\x07\xb9\x03\xf0\xba'm\xbf\xeeh\xbf\xc6\xcc\x8c*\x81S\xa6\x90\xf6\x80/\x89\x93\xafy\x0de\xdd\xd3-\x92gT\x95pJ\x1e_WALwA\xb8\xcb\x86\x17~N\xda\xbe\xa3\xfd\x8f\xbc\xe7\xb0!\xc3w\xfd\xfd\x1aW)jD\xa2*\xc8\xea\x99X1\xaf\xc5\xa0c\xd3\xdfx\x96}\x94\xb9\xfa\xd1C\xcd,\xd8l\x17\xbf\xd2\xe6\x8e\xff~\x0f\xcd\xa1\xdf\x1f\xfa\xf1\xb3q\xae\x19R\xb8\xb3\xf8`:\x8e|\xbd\xbcr\xc9~\x9fY\"\x1f\x7f\xd2\x1f\xcc,\x9a\xb2\xddV]\xd0\xccb\x87\xf7?.\x9f\x88\x19e\x96\xa6\xe9\xa8'\xcb\xf4\xbc\xfa'\x8b\xbd\x98\xd1\x13\xefnXV\xc5\x8eL\xcc8a3\xf5e\xf0\x86T\x1dE\xe3\x0c$\x91\xf2\x93/4B\xbcX\x08uL\x8c\xbb\x93\x8f#\x0b\x89\xbe/\xc4\xf9e\xc1=}\xbc\xeb\x96\x93\xff\x0bA\x0e0Dj6\x8f\x0b\x8c\x8aR\x0b\x97\x9f\x0f\x0c99\xc1\xb0\x8c\x17\x8c\xca\x93\xde\x87\xdb\xdbZ\xc0\x0fF\xe51}z\x07G\x18\xb2\xf0\x84!\x8e\x0e\x0b!\xbe0\xc4s\x86\xc1G\xa3\x9b\xc1\x1d\x86\x80<\x07M(\x03\x8f\x18\x92;/\x8eO\x0c\x91=\x14\xc9+\x06\x98\xc1-\x067\x0d3\xc81\x86\x8c3*\xcc\x95}I\x94\x05\xbcfT\x9e\xfb\xf4\xc0\xcfw\x06'\xe7\x19\x9c\xbcg\xc8\xcc}\x86E\xfcgT\x1c\xc6\x89\x86\xb9\xbchT\x92\x9f+\x0d\x89|i\x88\xe7LC*o\x1a\x92\xb8\xd3\xe0Y\x12=\xfcXH\xe0\xc8\xc6\xf0\xa8!\x95K\x0d)|jp7r\x01\xaf:qr-\xe0[\xe3c\xdb\xc5\xb9\x86\xd9\xbck\\\x94\x8b\x8b\xcdJn>6d\x1as\x91\xbcl\x88\xe6f\x03\xba\xca\xe3\x1cm\x18\x0e\x0ep\x9e6Dn\xbcg\xf3\xb5Qi\nd\xea\xe6l\x83\x93\xb7\x0d\xa6\xc6\xf9\xb8\xdb\x10>e\xc19\xdc\x90\xc4\xe3\xc6\x9evp\xb9]\x8fb|n\xfbY\xa7\xd0$^7\x80\x8b\xdb\x0d\xe1\xfe\x9a\xbc\xa9\\\x1co\x181\xdcN\x9e7$\xea\xe6\x18\xf7\xc9\x9coT\x8aN\xaap\xf1\xbe\xc1\xd0(\xa4\xb0\xf6\xc7R\xfe7,\xbfT\xf6p\xc1!\xfc&\xc0l\\6N8\x04x\xe10C9\xcf\xa9\xe9\x1c\x8e\xb8S\x98\xca\xad\xe5\xe1\x89\x83\x9f+\x0e3Z7\x9f3\x0e\x91\xbcq\x98\xa1\x95\xa7\xcfsr\xc8\xc1\xc7#\x07\xae\x94\x93K\x0e3\x9a5\x83S\x0e\x11\xbcr\x08\xab\x12B\x19\xc6\xf4\xfe\x02\x9e9*o\xca\xbe s\xcd!\xc87\x87\xf8\x8eX\xcc\x8e\xcc\xc7?\x87T\x0e:xy\xe8`\xb6` \x17\x1d\x96\xaf\x151\xbct\x88\xecuX\xc0Ow\n\xbc\xa4\xe9\x1cu\x08\xf7\x0bD\xf4\x0d\x04\xf8\xea\x10\x1e\xd0\xaa\xc4v\x1f\xcc\xe2\xae{\xc5Ep\xb9!\x82\xc3\x0e\x0f\xd3\xd8\x8c|vX\xcci\x87x^;<\\w\xa4q\xdc\xbd\xe2L`d\n\xcf\x1d\xc2\\w\x88\xeb\x84\x18\xab\x0e \x1d\x95\x8d\xfb\x0e.\xfe;\xc4q\xe0!\xdc\xfe\x986e\xe5\xc3C\x1c'\x1e\xe2x\xf1\x90\xc6\x8d\x87p\x87\x84|\x1d7)\x1c\x16p\xe5\x1d\xc28\x7f>\xc8\x97\x87\x10g\x1e\xc0\x8d\xb9\x16\xc5\xc1\x9d\x87p\x7f\x05Ic\xa1.[\xc2\xa5G\x056f\x8f\x1bO\x85\x86\xfcR^\xbd%\x10Ej\xce\xe6\xda[\x92\x14\xf7\xde\xc9\xb7\x87\xdc\x9c{p\xf0\xee!3\xf7\x1e\xc6C\x15\x84\x7f\x0f\xd6. \x89\x83o\xc9\xe2\x9c|\x17\x0f\x1f2p\xf1\xb1\x81\x81\xf3\xf1a)'\xdf\x92\x86q\xf4!\x86\xa7\x8f\xcf\x16\x0f\x95\xd8Ib\x96\xf4\xe5\xe9\xaf\xa4\xbc\xf7\xe7\xaf\x94nq4\xe6s\xb6\xe9H\xcf\xca\xc6\xf7*\x9a\xa1\x9b\xb4N|)o\x1d8\xce\x9b_ \xab\xdd\xcd`X\x84\x0d\x1e'\"\xea\xca\xe3\xce\xbbo\x07\xea4\xb4\x13%\x8d\xad\xa3\\\x87\xc56R^\x1bL\xac\xa9n/\x98\xf762\xc1\xb0\xda1\xbe\xa1{E\x9c\x1e\xc3M\x84+\xc5\x94S8R\xf2\xc7gL\xd5h\xdd\xb7\xd6fg\xb1^\x96\x85\xd7\xaa\xd2\xb4\x04\xf5\x11\xbf\xe1.\xb9\x85\x1f\x97$\xcd\xf3\xb1\xd6\x93\x96j\xdf>\xd9\xd3\x16\xf6\xa4l\x9f\xf7m\xd9LN\xe1F:\xfc\x03\xb5\xd4\xae@\xb5o\xec}\x8d\x93\xaf\x9e\xe9\x1b\xd8\xd3\xb6+\xbb\xc91\x16k\xf9zC\xebf7g\x94\x8e\xbf\x9el\x11\xd8\xc7\xfcH\x96\x19I\xe0\xdf\xcb\xe8\x1b\x93\xb1P\xd6kc\x9f\x1e\xa9\x83\xcb\xd3@$\x0e;\xd8kR\xd6\xcfn\xcb\x0d\x1d\xf2\xef\x9a\xeey\x7fm\x11~\x88\xb1\x93\x13\x9b8\xb9p\x8f\xab\x1b\xff\xd5\xa4c\x10\xe3\x152\x98\xe2\xe9\x84\x10\x0f\xe7MS\xa5[\xc6\xa6\xa9\\v\xb1i\xaai\xd0\x14\xf6AY_5\xb3l`\xdd\xf4k\xb1J\xad\xb1\xab\"\xc7\xcbM\xf9\x05\xd2\xe3Z\x97\x04\xfb\x9b\xb5.\xbe\xb7\xdfk\xd3?}A\xd2\x8d\xc7Zi\xa5\xb5\x0fs\xdb\x97\xa6\x0c\xd5\xeb4}~\xcf\xb1\x94\xef8j\xbc\xfazX\xba\xa5U\x8f\x9a\xc6\x97\xb4\xb8\xfe\xdd\xd7\xcf\x14gr\xca\xbc\xf4\x8b\xb2=\xeaan\xaf\xbb\xb6x\xe0\x16\xa1u\xd9\x17\xd4\x93EFP$Qq\x8aC\xaaz\xc0\xd7\xb8M\xd7\x7f\xb1\xc6iu\xf9\x1b\xe7xW]\xaf\xc24\x85[\x88\xae\xae\xa2,\xdc\x05/\n\xf8 N\x87\x9b\xdas\x0f#Jp\xc7\x0d\x11\xe7\x14\xa2\xc4\xbc$Q\x0c\xed`\x1a\xc9G|\xa6\xa2\xfe\xfa\x0e\xf5&\x03\xb5o\x9a\xcf\xb0\xafH\x81\x928@\x9c\xc7\xef+\xca+\xf6\x9d\xe2%vJ\xe8$/\xa9c\xa6\x1aN\xfa\xe5P\x97w\xe3\xf5Lp\x18\x9b\x02]\x9d\"\xef!\xd6\x97\xa4\"u\xb1\xb4S\xe2\x9bj\xd4\x8b\xde\x8d\xa8\xefn\xaf\x1d\xa7V\xa2L\xedUO\xda\x1e;\xc3\x14E\xecM\x99\x89\xf8b-\x1d\xabT\xd6h\xdc\xc0k\xc6\xe6\x99\xeb\x0c\xc9\x96%&\x90\xd8F\xeb\x8dw5Z?\xb0[\xd8\xec\xe0\x01\x9c(\xd29>\xab\x8b\x96\xd3\xcd\xc4Q\x9b\x8fc_v\xdc\x96\xba\xae\xbf\x13\x0f^EIjQT\x83\xbc/\xfa\x83\xf3@\x96\xb7,\xfe0V\x94\x94#Y\x88\x1e\x91\xba\x0b\xf9\x86\xa9\xa5\x9d\xa51\x9fbA\x12 V\x9f!\xadG\xd3G,M\x1c\x11\xccz\xe0I\x16\x11\x95&\x02\x8fW\x9e\x96\x1a\x02\x97a\x05\x04^\x9c\x08\"\xb63b\x92?\xf8\xdb\x1d\x95\xf0!1\xd5\x03\x16|\xde\x97\xde!Ob\x87e)\x1d\xec\xa0\xce\x19\xd28\x04\x138\xf8S7\x84\x9268{3%QCL\x8a\x06,9\xc3\xc2\xb4\x0c\x91 \x19\xd2R1D%ap\xe4-@\xabw<\x1b\x93lay\x9a\x05\xa7\xa2\xc6\xa7\xb3\x92*\x80'\x81B\xc6\xd4 x\xd2\x84\xb9\xe9\x12\x9c\xa9\x11\x16$E@\xf7\x80\xbe\xd4\x07X\\v,\xddA\xbeD\x07\xf3S\x1c \xe9\x0cf%2\xf0&-\x88OW\x10\x95\xa8@\x9e!\xc5\xa4(\x90\x8f\x06\x93\x13\xa0\x11\xfb\xf1\xdac\xc3\xc2\x87S\x11$$!\x88L?`5cA\xca\x01t\x18/H,`\x9dt\xa1)\x05\xe6%\x13p%\x0e\xc8\x9b2`\xd9x\x88J\x13\x10\x93 @_L\xb0\xa4\x00b\x03\x87\xa5\x03\xf0o\x8cf\xa7\x00\xc0\xe3W9\x83\xffca\xff\xa77\xf1\x99\x02\xfe;w\xb2X\x90\xff\xd8\xf0\xfeQ\x81\xfd\xe3B\xfa\x07\x83\xf9'\x84\xf1\x8f\x8a\xb12\xca\xd5z;O\xd0\xfe\x11j\x82\xa11\xe24\xb1F\xa4)t\xbc\xd1q\x04\xe7\xd7\xefu\\\xb2\x9c\x9c\n\xb7b\xda\x1f\x93K%\xfd\xf3\xa8P\xfc}\xfa\xa5\x903\xf0\xbe\xf7\x9cf\xa2~\xa6`\xfb\xee0\xfb\xf1\xaa\xa0\xa7Bs\x82\xea\x0f\xc1\xf3\x11y\xaep\xfa\xce@\xfa\xf1\xfa\xcf\x0d\x9e\x1f\x0e\x9b\x1f\xaf\x03\xda\x87\xf9\x82\xe4;\xc2\xe3;\x03\xe3\xc7+\x9e\x1c\x0c\x7f\xc4\xc4b`vg\xc5\x91\xa1\xd7\xac~4\xabS}\x18\x11\xee\x9e\x1f\xb5\x1b\xe2\xccE\xd3\x19\xe8~V\x80A?z=\xb6\xa1\x0bC\xd9O\xb8\xfa\xfe \xf6\xae\xf0\xf5\x13M\xe7\x07\xae\x9faY\xc3a\xea\xc3\xd3nnhz\xb8\xc4\x0e\xb5\x13\x83\xd2;\xdb\x0c\xc1h\x01\xee0\xe4\xde\xe9\x0cQ\x9d\x02\xb3\x02\xce\xf3\xd8\xe1\x0ei\xbe\x88\xe2\xfe \xf3\x99\x9a\x93-\xa4\xfc4\x04aZ0\xf9\xa80\xf2\x19\x1b\x9c\x164\xde\x17\xb7m\xd2\xee\xd8p\xf1\xde@\xf1\xdef\x86\x99=\x93N\x98\x13\xfb\x1d\x8b\xf1\x1e\x8c\xee>\xd3\x0d^\x12\xcb\x9d\x7fj\xc8\xd3C\x07\x98\xfb\xdc`\xfc\xf6h\x9eJp\xe5\x8a\x07\xf3u3#\xb4;8)~6\x8a\xce\x19Z\xce\xdfCG\xe8\x0c<\xe3\x92\x88\xebv(pG\xacu\xf70\\\x1a_\x1d\x0c\xc8\xce\xecH\xeaC\xe4tM\x18\x1eC=c\xf4t;nz\xbe\x88\xe9\xfaf[\xafaA\x94t\x11\x15]\x93\x85\xc6G\xbf\\\x18\x19\xdd0\xf6HL\xf4E\xd1\xd0\x91\xe8\xe7\xc1\xb8\xe7r\xf2\xe0\xd0\xd6\x10\x93i\x1c\xe2\xe9\xf0Y\x84\x05\x95\xce`\x1a\x0d\xcf\x97%0\xb99=\x1e\x13fl\xec\xb2\xf0\x8c\x82\x1c\xa3X}2q\x8b~\x05\xc1\xc3\"\xd8\xdc\x11._\x88\x0d\x1ar@T\xc9\xc8\xeav\xf2\xba\xa3\x98\xdd m\xf6\x07\xea2w\x9f\xb9\xf8\xddQ\x0c\xef\x88V\xc4\xbd\x97\xbc<\xefh\xa6\xf7\x920?`6.\x0b\xdf;\xcc\xf8\x8eP+\xc8\xfa\xce\xca\xfbN\xf0\xa8\x87\xdac[\x10l\x80sD\xcda\x80;D\xa5\x04\xb4\n\x0f\xf7|<\xf0 \x13\xdcPg\x1e\x17\xdc\xdf\xa6\xa5|\xf0\x89\xb0K;\xd0\xe6\x1cz\xf8\x919wd\xce\xfd\xaa\x98s\xf8\xfb\x8bw\xc0\x13\x89t\x98\xa89\xc1\x0c\xd27\x00\xc3\x04}`\xbf\xdf\xcf\xbe\x8bw\xb3\x11\x03=\x93\x83\xe7\x94\xf3\xbf\x82,\xbc\x10\x0f\xcf\xeb~\xfb\x9c\xef\xde\xc9\xc6\x0b\xae\xc0\xa1^\x82\xfc\x9c\xbc\x10+/7//33/\xc0\xcd[\xcc\xce\xcb\xcb\xcf\x8ba\xe8-\xe0\xe8\xe5e\xe9\x89\xd1\x1a\xe0\xe9\xe5e\xeaEp\xf5\xb2\xb3\xf5\x02|\xbdy\x8c=T\x90\x97\xc5\x97\x85\xc7\x17\xc9\xe4C\x7f\x99\xc4\xee[\xcc\xef\xcb\xcd\xf0ss\xfc2\xb3\xfc\x1e\x82\xe7\x97\x99\xe9\x17\xcb\xf5\xcb\xcc\xf6\xf3\xf3\xfd\xb23\xfe\xdc\x9c?a\xb8\xe6\xb0\xfep\xf3\xd0\xa9\xcew\xf3\xfe\xb20\xff\xe6s\xffPa\x9c\x0f\xe8`\xff-\xe2\xff9\x19\x80A\xff\xc6\xcb\x02\x8cs\x7f\xf21\x01\xfd\\\xc0\xb06Y\xf9\x80~F`6N\xe0RV\xa0%\x8e\xbbW\xa8'\x93\x97\x19(\xe74\xd2\xa0\xa5\xec\xc0\x08J\x9c\x97!\x18\xc9\x11t\x92n\x12y\x82n9\x08\x15a1[0\xa5sb\x18\x83\xe1^\x88b\x0d&\xf3\x06\x1d$,/w0\x17{p)\x7f\x10'\x99d\xe0\x10F\xb0\x08C<\xc20\x93\xd0\xfb\xc6S\xd8\x84q|B\x9cQ\xb8\x98S\x18\xcd*L\xe5\x15F2\x0b\xdd\xbd\xe8\x18\xd8\xee\xe7c\x18\x8698\x86^\x95\xad\xcf\x171\x0d-i\x08\xf30+\xf7\xd0\xc5>\\\xc8?\xb4U\xb6\xf9\x88\xf9\x19\x89~N\"\xceJ\xc4y\x899\x99\x89\x99\xb9\x89\x0f\xc1NL\xe1'F2\x14\x938\x8a\xf1,E\x07O\xd1\xc5L\x8b\xe7\xa6\x85\xb9\x8aIl\xc5h\xbe\"\xda\xa0\xdc\x9c\xc5\xbc\xacE\x07o17s17wq\xf9\x18\x89\xe2/\xc61\x18\xcd\xd5\x0ec1\xaaM(\xc6c\x0co\xea2s\x19=lF\x9c\xcfhh\x98\x8b\xd1\xe8\xdd\x99c\xac\xc6x^c$\xb31\x96\xdb\x18\xc1n\x84\x14~#\xcep\x8c\xbf\xab\xca\xc3r\x84\x00\xcf1^\x1fd\xcc\xe6d;\x82\x83\xef8\xd5\xc2\xa7\xa0\xf6\xc72\xce\xe3\xec\x0b8'\xf31x>5iH&\xf6\xa3\x8f\xff\x98\xa6\x90\xe3Dl>\x0b\x12\x15\xd7\xb4N\x1e\xa4\x87 \x99\xd6\x92\xb9l\xc8\x18>d\x9a&\x8e>\xcd\xc7\x8at\xf2\"\xc1\xcd\x8cLkB2;2\xc4\x8f\xf4V\xef\x83\x88\x85z63O2\x81)\xe9\xe7JF5\xd8\x85\x07\x8do\xf4B\xced\x12k\xd2\xcd\x9b\xb4\xb1\xab3\x99\x93\xb3\xeds\x98?\x19\xeeUL\xce2\x0ee2\x8b\xd2\xdb~\x08\"\xb4}\\\xca\xa0\x01\x80\xc8.\x82\xec\x8cJ?\xa72\xc4\xaa\xcc\xda\xb0l\xdc\xcae\xec\xcaH~e\xf6\xa6'\xb3,\x9d\xd2\xa6{\x8bh\x9ee\x80i\x19lp\xc8\xb2Bd\x87\xcc\xa1a\xe2\x06\xc5\xa6fF\x903\x17\xf9\xeeK(\x9a\x960\xf9\x94\x9b\xa4\x19A\xd3L\x82\x95G,\x9b\x98\x9f\xe0\x06\x91wy \x9b!\xca\xa6\x97\xb4\x89c(E\xf1\x12v\x1c\x03\xdeK\x0fpwI^\x02\xa7\x93\xc2\xe9\x1f\xaa\xb9i\x9c\x99\x89\x9c.*gV2'F\xe7\xccI\xe8\x04'\xa53/\xa9\xd3A\xeb\xccN\xecD\xa9\x9d\xf9\xc9\x9d\x11\xf4N0G\xf7\x08\x98\xd6\xf0\x1bU\xc5[\xfa\xcb\x81\xb6L\xd4\xf8\x8c\x12r\xa47\x1c\xe9\x0d\xbf\"z\x83\xa9\xa8\x83E\x10M_\xe6d\x05)+\xc4b\xd6\xb3O\x8b.\xb7\x06\xb03\xd3\"\xc6\x1f@_\x94q\xca\xe1\xa0\n_\xd2\xe2\xfaw_?\x8be\x0c\x8f\x14\xdf\xae-\xe6(2\x19\x18\xa84\xfb\xb8\xbe\xd5\xb3\xe7K\xe0\xbeb*h\xd2\xe4\xefmU7]\x9fQUMZ@\xd5\x0d\xedzi\xba4IJsS_\x8b\xf6\x8c\xf9OK9(\x01b\xf3L\x8f4\xe4\xa6\x9b\x04\xe6\x89}\xb7h\xcc\x93>D\x99\xcc\x08\x879\xc0^\x8eh\xd8\xdc\x13*\x93\xbe\xac\xb7m\xcaa\xd6\x1b\xe6\x113mX\x80\xd0\xbc`\xf3\xe4\xa3/\xab\xf3\x1f\xf5\xdd-s\xbb\xbc\xfaw=i{s\xf7'\xfc\x0d6e2\xea=\nU\xf3ot\xaf\xb4)\xf7L\xbb\xef\x13^\x19\x1f\x86\xf8.Go\x9a\xeb\xe4\xd3f6G\x8c*\xdfve)\x8f\xf9?s\xab9\x87\xa9\xacq\x92-y\x9em\xa6o<\xe8+\xa9AH\x9e\xda\x11\x8d\x92<\x10\x90'\x92l2\xf2\xa4^\x93\x86<\x11>\xa1\x1f\xe3\xea\xea\x8aN\xd12j\x87J`O\xda\xbed\xae{;\xa1\x1d\x8fU\x0d\xefn\xc29\xe6\xf7\xe7\x93_\xcb5rr\xe0m\x88\x1f\xa6\xc9\xf4\x8c6\xc2a\xe1\xdd\x1c\xed\xb58\x17\x1ctD\xe2cqz\xe2\xbel-\x99\xae\x1d\xceU\xc3\xab\x9d\xbdR\x98w\x023\x16\x04d\x01p\x9a\xfe\xb0\xef\xb2\xc8\xb6\x9b\xb6\x1c\xb3\xe2a\x15&3u\xa9\xcd\x9e\x9a\x0c\xccZ\xe3v\xda\xfb\x1e\x0d\xdb\xbc\xd8*G\xd9\xe3\x84q\x8fY\xdf|v\x17\xb5\xb8\x937\xb8\xc8\xb8N\x0cj\xacYI\xe6n\xebj\xac\xe9h\x99\xd0\x9f\xe3\" \xe4\x16\x07\xb7\xc1\xa9\x01o\x17\x9a0C\x9a\xe5\x0c{]\xe1`c\"\x02\xdbf3p\x10\xf2o\x9d\xda\xfa;x\x91\xf53d!~\xad\xcb\xab\x9d\xa9\xedR\xdbh\x88\xf3x\xb3n_68,\xdcG=\xf3\xed%\xc4\xdaL\x88\xd10\xfe,*\x9f\x0d\x05\x9f\xe7\xea~\xeb\x8b\x0c\xab&\xc7\xf4Y\xc3\x8eB\xd89\x9d\xd8a\xb02\xcf\x13Dy-\x05\xbd\x14X\x0e\xa7\xd6\xe3\x01\xf1\xe2\xb4\xf3R\xe2$\xe3|\xc4\xc2\xb2hM\x99\xb5\x9a\x0c\xce\xfb\x92<\xdb\x96\x90\x99'v\x10>\xb5\x8bW\xca\x9aJ\xf3O\xf0\x0cA\xaeS1\x08\x9f\xe4A\x0e\xf5\x97\x9e\xeaA\xa0\x0dhPC\xec\x84\x0f\xfc\x81m\xd3\xe1B\xe1P\x86\x9e\xc3\x01\x08\x1c\x10@\xb0\x8bE\x99\xef\xf2\xa0\xe2\xec\x9d\x9cVU8\x8ead\x83\x97\"+\xe6\xf9I\x01Qv\x83#B\x1e\x06\x1a\x1c\xd3\x98T\x9f\n\x15\xe2\xdbe\x8e\xc5}j\x08y\xda2\xd7\xe3r\x0fmqy\xea>E\x84\x88\x18\x89\x91\xa3\xd2\x19\x1f1\x8b?&J\xb4W&k\x8e\xd3<\xa0\xb8\xe3e-\xf1\xd6P\x81!PKx\x0c\xe5\xf2\xdfD\xc1\xc3 \xce<}\xb4~\xeat<\xd3N!5!\xfay\xa4\x1d\xfdp\xd9i\xa4&\xc8\xc2\x8e~\x91\x0b2\xdf\x81\x82W\xa0O(\x1c\xd7\xe19\xcb\xd2q\x1dF\xcaq\x1d>\xae\xc3\xc7uX\x94/\xb1\x0e\xa7\xdd\xbb'\xddU&\x9d\xb2LDi'.\xdaY\x8b(\x19N\\\xa6\xf2&\xa7/\xa2L\xce`bN\x95b\x9bj\xb4L\x0d\x08\xb9\xf4\x1b\x87J\x0bZ8\xe3L P\x1b}\xa4\xe49\x11B\x07R\xdcIP\xec\x11\xd0x\xca1\xa3v\xeb\xc7\x81\xda\xffs\xdc\xb6/\x80k\x9a\x97\x85\xe1?\x11\xab\x94)\xaf\xc2\x7f\x0e\x00)-\x7fBD\x9e\x82\x85\xea/\xce\x93p\xc4\x11\xfd\x9aqD\xb3\xf3\x1bd\x01\x13\x8d\x92]\xdb\xfa\xc9\xcf\x07\xb4\xf9\xd2<\x06r\xf7.\x84\xa5'-\x88_(\x7fe\x98\xa19\xa6\xfb\x8b@\x85\x92M\xf4\x02\x88\xd0d\x06\xcc6\xc5\x9a\xe9\xd3\xc4\xd9\x8a\xcePp\x81\xc9=\x82\x81\x12\x8dg\x18\x0c\xf4\x07\x8f\xd1\x99g*#\x00B\x03\xbb\"\xdav\xb8\x93,\x84\x07\xdc\xa4og\xa6T0R(\xe8]\x8c'Sp\xa7Q@]`\xdc\x01\xee\xd1\xa4 \xce\xc5\xda\xef\x98eL\x91\xe0N\x8e\x90/-B\xb6\x84\x08\xceT\x08\xfd\xfc$\x08\xb9\xd2\x1f\xf8\x13\x1f\xccJy0;\xd9\x01o\xafyT\xe3Ls0;\xc1\x01\x1as\xc0\x91\xda`IR\x03\x9e\xc0\xc0l\x0d\x12\xe8qN\"\x03w\xd2\x82\x85\xe9\n\xa2\x12\x15\xc4'%X\x90\x8e`A\"\x02\xc4`dL7\x907\xd1@\xb6\x14\x03\xe1\xe4\x02\xd9\xd2\n\xb8\x12\n,I%\x80\xa6\x0d\xe8g&\x0c\x18\x93\x03\xa0s\xcd\xacfa\x92\x80\xb9\xe9\x01\x9c\xa9\x00f&\x01@\xc2\xff;W\xea8\xfa\xb1\xb5\x84\xcf\x0c\xf3?\x86\xf4\xc7^\xf0W\xe1\xba\x97\x05\xf5\x17A\xfc5qv8\xff\x0c\x81\xfc\x97\x85\xf07\xa6\x99\xb9\x1a/\x0c\xdb/;Z\x97\xb8$@\xbf7\xfa\xbc#(\x7f0\x1c\xbf\x1d\x97:>\x04\xbf\xfd\xdb\x7f`m\x9d\x15p?\xa6\xb1\xa1 \xfb\xee\xb6\x05\x03\xeb'\x84\xd47\x83\x86\xbb\xc2\xe8/\x0f\xa0??t\xfe4@\xf0\xc2p\xf9\xde@\xf9\xee\x10\xf9\xbe\xe0\xf8ho\xc5\x06\xc4\x0f\x85\xc27\x83\xe0/\x08\x7f\x1f\x11\xf8>>\xe4}0\xd8=\x123\xde\xaa\x0ey&\x14\xd4~Y8{T)\xed\x93E\xc1\xeb\xcd`\xf5K\xc2\xd4#a\xe9\x17\x05\xa47\x03\xd0\xe7\x0c=\xef\n:oF\xe26\x03\xcd\xe7 1\x9f-\xb8|\xde\xb0\xf2q\x01\xe5\x83\xa1\xe4\xe5\xe9C(\x88\xbc|\xcc\x1b>\xde\x8a\xb3n\xd7\x16\x1b\x08\xdc\x1f,>2L|D\x80\xf8\x89\xca9\x83\xc2/\n\x07o\x87\x7f\xcf\x17\xf8=_\xc8\xf7\xf9o7\x18\xe6=\x14\xe0]\x19m3\xa8\xbb\xd8Z\x98\xe1\xdc\xdd.|\xc6\x10\xeeh\xf0v3l\xfbD\x93\x1c\x01\xdb\xd1\xbd\x94\x19\xa4=&<{00{8$\xbb7\x18{d\x18v3\x00;\xda\xbeI/.\x0f\xba>BN\xccp\xeb\xe1\xda'\xa3\xc9\x144\x9e\xa2\xa7\x05W\x1f\xe4t\xa3\x8ac\x9d\xb8\"\xda\x1f\x93\xc3{\xfd\xf3`(\xf5>\xfe\x10\x1e\x0d\x9c\xee\xdc\xd9OT\xcd\x10,\x1d\x0f\x93\x1eW\xbdu~0?(:\x18\xe81@\xc3\xa1\xa3\x81\xd0\xe3t\x9d\x13\xfc\xdc\x1f\xf6<\xae\xde\x991\xcd\xb1\xf8\xe5h\xe4\xf28-\x92\xa2\x95\x8fW\x90\xb9.\xd2'\x03\xc5\x14\xafzdF6@\x13\xe7\x8d2\x8e\xc5\x177\xa1\x013\"\x8b'\x98+\x7f\x1cq\xbf}X\x10;\x9c\x9f\x9a\x1a\xe2\xe2\xa2\x86\xa3m\x03/\xed\x02\x8f'\xed\x9cj\x10l8d\x8d\x08\xee\n\x0d\xed\x8e\x02\xbeP\xf5\xf4\x98\xdf\xe8\xc8V%-\xdaw0\xcew\x86\xc6%G\xf5\x06<\x1b\xf3h\x90\xa2\xe2y;#y;\x9b\x94\x10ncN\x80n3\x18\xb77\x0cw\xa2O\xb7$\xe86\xff\xf4+\xbd\xa1#OC\xdfLy\x03m\x7f hM\xb70\x94v\x04\xbc\xc6\x19>[\xa8\x1e\x05\x90\xb6F\x96\x1f\xce4i\xe2\xc2\xd0\xd8\xce5\x9c\x7f\x86\x0f\x9f\x9c\x81\xb0\x97\x87\xc0V\x17\xd2R\xe0\x88\xdeX\x1a\xf6\xda\x08u\xbd0\xc8\xf5\xb8{\x93\xf2\xc6\xf0\xd6\x8b\x03[\xcb@\xbcR\xdc\x18\xd2\xfa2_0k#\x8cu\xce\x00\xd6\x81\xd0\xd5\x12T\xc6\x94_\x91\xcb\xa2\x1c`e\xa7\xdf\xbd:\xfbY\x1c\xf0\xfc\xd4l\xc5\xac\xb2\xbc\x0b\xdb\xab\xd8u\xdbuYo\xe8\x9d9U\xcb\xba\xa7[\xdaz\xcdL\xa5*\x02|\xf2\xd2\x1bZ\xf7\xf3\x8c@4K\x82?>\xf9\xc4\xb3B\x91\xbeo\xcb\xcb\x03\x92a\x06SM\x14o`\x7fG\xa6\x17\x7f\x9e\x17+R\xb7*^g\xc1\x93c\x7f\xb1\x9bq\xaa\xfaE\xdf\x01\x0e\x9d\x05\xb7-\xd9\xef\x99 \xe3p\x87^\xc6\xfefF\x89\xab\x84\x08$fP|Q\x84\x82\x1d\x94u\xd7S\xb2\xe1\xb1\xb2\xc9-G\x02t\xd3\xdd\xa4\xa6\xb1\x11\x88\xfc\x03\x97\xf1\x86\x0d\xadA[Z\x83\xf8@A3'\n\xab8\xee\xe3\xdb\x9f\x08T`\xbc\xcf\xf4\xfe\xb9\xb8&\xd8\x93\xb2\xed\xc4Y.\xb3UqZ\xbbu\xe6\xaa\xe9q\xe5\xa1\xab\xca\x82{j\xba\xd6\xb2\xc6[\xa62\xdd\x95=\xb7>\x07~\x1e\xdf5\x13g\x8a\xde\xd1\xe20\xfak\xf8\xfb\x9d\x1a\x04mq\xea\xfa\xf6P\xf0#\x0e\xa9\x91\\\x08\xb9\x19`~\xfe\x1d\xff\xad:.\x1e\xe7\xba\xdf\xfe\xa8\xce\x8d6=\x080t2\x80\x8d\xe1n=\x81w\xf8\xb2\xa1\xac%`\x08\xbdugO\xfc@\xba\xb3\xfa\xaa\x89\xee\x87-\xe9\xd6\xb7\xa4\xee\xed\x13n\x87\xa7w\xf0\x9cf\xfc@\xba?sY\xca}U\xbb\x84C]\xf6\x1c\x96q\xdb\xb4\x9f\xe1V\"\xda\xc4j\xdb\xdfq|\x08mY\x0d+M-\xb6\xaf\xcd\xa3\xd4\xc7nTi\\l\xb7l\xf7Q\xf4\x02\xa1Y4\xb5\x04\x06b\x02X\x97\x8e\xdb\x9f\xbbq\x0ep!\x12y\xe9}/\xef\xb9g\x14\xfdZ6\xa4'\x91m\x9f \x99\xdc\xd6\xf65\xe9 \x07@\xd6\xf7\\:\xb4\xb4?\xb4\xb5\xbakP\xd73\xfc\xc4\xa8\xdeT\xb4\xd5&:\x9c\xf5\xf0\xf3\xc7\x0f\x17\x9a\xb8)x\xab\xa2\xf5\xb6\xbf\x86}K\xaf\xca;\x01\xc9\xe6\xdc\x16N\x1d\xa5{\"\xb6\x8f\xacVQ\x99p3\xa81\xcbA\xb7.\xdd\x041\xf0\x9a\xee[Z0\x0fF\x02\x9a\xc5\xe5&G6\x97U\x05\xfbf/\x1c\x9c\x13\xb8<\xf4\\\x11\xdar\xffB1Q5arR}5iNA8\x96\xb6\x07Ru\xcd\xf4\x9e\xf4\xe7n;MY\xf0\xf1\xfdOj\xa0\x86\xbc\x10\xe3\x950c8\x0d\x13\xd2l\xa1\xac\xc5\xbbd\xe3)\xfc2\xa4\xe0\xa3{\xf3\xabpo\x00\x0c\x07\xd6\xfe%\x9e\xf99\xc63\xe2\x0b\xf4\xb8\xa6\x94\xdd\xc8'\xfbL\xef\x9f\x8d\xfe\xc2 \x90\xaek\x8a\x92\x8c;\x13,N\x05\x1f3NW\xc7PAx\x07\xdcPw@FH2l\xe8\x0d\xad\xd8;\xe0\x07\x90\xa4\xef\xd9\xfeV\xc3\x1dh\xc3y:\x9a\x0c0\x8f\xa2\xb0\x7f_\xd6\x1c\xe2\xf0]\xd5H(\x90\xfa\xe6\xd55->_\xdc\x19\xf0\xa7\x9fHO\xd9\xd6\xac%uG$\"pG\xee\xd9FG%\xcb9t\x9csvM;*'\x8a\xc3U\xfaCVWI\x93\xa5,\x9b\xf6\x91o6\xeb\x96\xea\x0bLj\x9b\xda\xe2\x1d\xe6\xa1\x91\x9a\x91\xe0\xe2\xa3\xb8\xe4$\xb9d\xa4\xb9x\x88.\x8b\xa8.\xf9\xc8.!\xba\xcbL\xc2Kn\xca\x8b\x87\xf4\x92\x9b\xf6\xe2$\xbe,\xa6\xbeX\xf2\x08o+ROV\xfa\xcbb\x02Lv\n\xcc\"\x12L~\x1aLF\"Ln*LF2L\x0c\x1d&#!\xc6M\x89YF\x8a\xb1\x84a$\x19\xb1d\xcd\xa6\xc9\xa0\xd2\x1cD\x99\xc5T\x99\xa5d\x19K\x9cM\x9e\x99M\x9fq8\xbf\x1e\x7f\xc0I\xa2 \xbb\n3\x894\xb6\xf5T\xc4\x1a1\x08\xb4\xef}\x1ad\xa6\xd3`\x84\x9a,\x94\x9a\xcc\xa4\x1a\x9bV\xb3\x98X3\x91\xd5[$\x9be4\x9b\x00\xf7\xc4I\xb5\x89 \xdb\xa0\xe8\xf9\x04\xc2\x0d\xfe\xfb\x7f\xe0m\x9fE\xbb\x89m|\x88z\xe3oi\x90~\x93D\xc0AX\x11N\x12N\x0e\x1a\xce\x12\"\x8e\x8d!_H\xc6 \xd0q|\x84\x1c?%\xc7\xf9\x06ci9ab\x8eM\xcdYD\xce\x89\xa2\xe7\xa4\x10t\"(:x/!\x03\x12\x7f.D\xd5YJ\xd6q\xaa7\xf9,+e';i'3m'/q\xc7M\xdd\xb1\xc9;6}'\x17\x81'#\x85'7\x89'\x96\xc6\x13A\xe4\x89\xa6\xf2\xc4\x91y\x10:\x0fF\xf9\x88'}\xf8)=\xd1\xa4\x9e(Z\x8f\xa5|NjOvrONzON\x82\xcf\xb2\xf7\x1d$\xf9\x84i>\xfaJ\xe1\xbeE\x9f\x9c\xcf\xda\xb7C\xea\\w|\x84\xbft6\xef\xc4m\xd8i}?\xbd\xd0\xf2\xe0\xf1&Z\x88{C-\x8e\x990-\xc3\xd99\xdf\x89\xe1\x87\xe6\x9e\xdbH\x0d\xc6\x10}%\xd9O.\x83\x90\xdd!v\x01\xd4?\xc0\x016r\xc5\xe3\xdc\xab\xa6\xecl}\xb8\x8fl\x17\xfb\xa2\x84\xae\xf7]\xcad\x84\x9f,\x06\x9e8\x07\xd7\xc5]r\x86\xa8\x05t\n \xc4d\xab\xf8%\xbf@\x12\xb2\xd4\xa0\xbd\xbb&\xddu\xca\x0d-\x13\xa4]-13}\xbd\x1a\xfalC\xbb= F\xdd\x93:\xb1\xf5\x83?>\xb0\x1a^5\x1b\xaa\xc92\xc5\xc4\xc0\xdel\xfb \xee\xa5\x99<\xa5g\x04z\x0032\xfc\xd5\x9e\xa8\x0d\x86|\xb4%\xb7\xeb\xc4K\xee\xc9\xdca\xfd\xd9\x1c\xfa\xfda\xb8M\xd1\xee\x12\x1fwP5\xdb-m\xe1 \x1b[B\xe8\xd3\x15?\xbd\xbb\xd4\xa7L\xdd\xd4\xcf6\xb4\xa7\xed\xae\xac\xcb\xae/\x0b\xed\xfe\xfd\x81\xcd\x0d\x02R\xd4\xe5\x98\xefL\x14w\xec\xd6I_\xea\x82\x10\xebe\xde\xf1\xeb\x8f\x7f\x99\xeb\xf4\x1eA\x00h\xdf\xb8o\xc5\xddh\x00\xfd\xe7X#Dq4E\x14o\x83D\xf17K\x14'V@\x94@\x0bE\xf1\xe0\x06D\x89\x90\x12:3Ue\xee\"\xe4W\xde\x05\x97\x14%\xb4\nLK\xb8%\xb3W0\xef\x18\xc3\xf4_\xbc\xc0\xe9%\xd4\xb0\xf9\xd0\x01\xbb\x0f5\xd4\xa5\xf5\xa5\x05\x1c\x80\x80rK\x81\x98\x13a\xca\xc5\x97p\xccP\xed\xb1\xa6\x9fM\x91M\x92\xd5/\x07\x88#D\xadH\xa7(:E\xd5\xe8\xae'\x19\x1d\xe9Y\xa9O'\xc0\xc3\x96\xfer\xa0]\xaf\xae\xc0F\x87c&\x022\xbab\x05t\xe4\x9c\x02\xbb\xda\xde\xc2\xe2Gq\x1f\xfbc\xbc\xd4\xe5@\x92c\xbc\xd4\x05\xe0\x91c\xbc\xd44\xc0\xc8B\xb8Hf\xb0\xc8\x02\xa8Hn\xa0H6\x98H^\x90H6\x88H\x18 \x92\x0d\x1er\x8c\x97:)\xcb \xc7x\xa9_\x85\xeb\xce\x0c\xf08\xc6K]\x06\xe4\x88 !z\x8c\x97\xaa\x95c\xbcTU\x8e\xf1R\xb5\xbf\x17@2\"\x00\x19\xf1p\x8c \x18\xe3\x18/53\xf4\"+\xf0\"'\xec\xe2\x18/\xf5\x18/u\"%\x0eZ\x11\x01\xac8\xc6K\x9d\x0f\xa7\x98\xffv\x83P\x8a\x10\x90B\x19\xed\xbe\xdc\xd1\xae'\xbb}\xca\x01\xed\xf4\xdc\xb8\x1c\x8f\xb6\xf6-\xbd)\x9bC'.wW\xf0=\xdb\x99\xf3\x1b\xde\x0e\xfe\x00/N\xa0\xec\x1f\x8bn\xbf\xe5\x9f\xf2!\xb2)'\xf4\xc71\n\x0b\xc8\xc3\xb4A\xc7i\xc6)\xb8i\xfa\xc1\xc9\x965\xfeD\xba\xfeU\xb3\xdb\x95\xbd^\xf9\xc4\xc0\xc1\x8b\x93\x89\x95e\x1a1'\xbb+;^\x93Z}\x8e\x94\xdd#e\xf7H\xd9}\x08\xca\xeep\xad%\xd1.B\xc0\xc0\xce\x15n\\A\xbbN\x98r\xe4\xde\x03\xe4\xb9\xd7\x89a*\x06m\xa0\xac\x8b\xea\xb0a\x0eX\xd3Q\x97hY\xbf4\xde\x9dq\xfb\xca\x7f\xaaW\xa0\xa4p\xd6??\x05\xa9{\xca\xc3U\xb5\x94t\xf0S\xb35\xc0fB\x97\x13\xeb\x10L{\x97*\x0b\xe0\xc9 \x9d\xfb\x8eSEu%#\x02\xc5}\xbdz\xf1\xe2\x84\xfd\xe7\xf7\xabo\xf8\xbf\xdf\xf0_\xe0\xefe\xc4\xff\x84\xae\x1bU\xfeB\xe8\xefDt\x086\x92\xccT\xaf\x17\xe3i{O\xb6\x9dvu+\x9c_\xe5;\xf3H\n\x9dXv7\x94\xa7\x06\xd4`JE{\xbf\xef\x9b\x15\x8f<\xd1\x95cB\xc4W\xcdnO\x8a\xfe\xbb\xb2?e\xc6N\x18\x05\xcb\x98\xd9\x06\x8c\xde\xf5-Y_\x96}\xb7\xe6 b\xad{\xba\x18,\x0f\xad&\xb6\x14\xb5Z\xd6\x01\x1c\x0e\xb51\xda!\"}\x98\xc7\x82\"\x7f-G$Q~4\xcb\xcc\xc5e\xd9\x0bC?vx\xc9c\x94\x89\xb3\xd1\x06h\xdd\x1dZ:\\\xb0\x0cy\x17\xf9\x1b\xeb\xc9g\xda\xf1\x1b\x0c\x11\x91P\x0f.'\xe5\x89\n\xc5\xce\x84;\x1aB\x82\x16\xbbU\xd5X7\xac\x86\x96\x92\x0dt\xe4J\x1d\x0b\x8b\xcfY\x7f\xf2\x88e<\xb6iS\xcbCh8\x88\x03\xb6\xe1E\xf7w\xab\xae\xdc\xd6z\xd2\xcb\x0f\xe5\xb6\xfey\x80[Y\xbd\xac\x872\x7f\x06\x1f\xce~x\xbb\xfe\xf9\xdd\xeb7H\xe4p\xfd\xdb\xd7g\xef\xdf\xbc\xba@\xbe\xb8x\xf3o\x17\x1fO\x7fr\xfed}\xfa\xf1\xdf\x90/\x7fz\xf3\xc3\xe9\xab\xbf\xacO\x7f>{\xfbn\xcd=W\xfb\x997g\xe7\xeb\x17\xff\xf3\x85\x1c\x062\xd8\xb9[a\x07\x86P\xf6\xc6\xe8\xf9\x8a5\x8a\xf7\x19\xec\xd87\xe2H\xb9\xef\x80\xb9\xd5C\xe0\xe5\xed\x81\xb4\xcc>\xd1\x11\xc9z!R\xa3\x1ev\xda\xe5a\xd1\xd4])\xf2\x1a\x13\xb6u+\xbb\xbe\xbd\xe7C\xaf\xaa@x\xea\xac2^\xd3\x18)\x90\x8f\xacW\xfc\x15\x02-\x9a\xee\xbe\xeb\xe9n\x05\xa7\xfb}'\x8f\xec{y\x93'\x06\xa5:*\x1d\x84\xaa\xc16\x88\x96?\x16\x80\x0b\xae\\U~\xa6\xfao\xa5\xa3\xae\xfdF\x03j\xb21zh\x89\x8c=\xdb\xeci\xcdzi\xc7\xea;\x7f\x0fd\xcbLr//I\xca\x8a\xcb%\x1b\xd6\xe4\x9a\xdeBA\x86\x803\xdc\xeb/\xbb\xb1\xdbyw\xc9\xd3ci\x8a\xcbv\xd4\x01\xbaF\x1e0\x97WW\x94\x07\xfa\x13\x82\x08k\x0d\xbf\x94\"\xa2\x8f\xbb\x9e\x8d\x7fy\xfb\x032~$\x17?\xae\xbe\x8e\xf1\xec\x185\xc3\xf1\xbb\xcc9;\xbe\xadah\xb0\x19)\xf7H\xb2\x8e\x96\xfe;\x7f++\xacN1\xe4_Z\x9f\xe85\x19c\x8f\xef\xa6\xf8\xde\x9fu\xd9\xeb\xa6\x90V@\x8a\xbf\xa1\xad\xb0\xfb\"\x03\xae\x02\xec\x88%T\xc0\x9e--\xe4\x94|i\x7f$\x1c4\x11]r\xaa\x87\x187\xac\xa5\xbc\xc6{=\x0c\x9a\x11K\xbe\xa7w\xfd\x81T\xd6\xa1\x04\xdb\xf2\xed\xd5\x06C^\xfdM\x9f\x91\xf2\xb8\xeef\x17\x0d/\x11[\x91\xbf\xf9\xad\xbb\xb7\x99\x81\xb1{\x9c}\x1a\xd3\xeb\x9a\x95x\xdd\x14\xaf\xcb\x96\x16\xfd\xe9\xe1N\\\xa7\xed\xf7\x8d\\\x14L\xf1'b\xf4\x8d\xc3x\xd3Pn\xb8\x87Q\xf2\xcb\xa1\x94}\xcc\xdcPU;\x0f\xd5).\xc4\xe4W\x8f\xe1\x93\xf8\xdf\x9ay\xa5\x9f\xbc\xdd0D\xb0\xf5\x9b\xd2\x97\xbe/\xc5\x10\xb8$\xc5\xe7[\xd2n:\xe3r\x16\xef\x9d\xd3]Y7\xc2\xd5\xd0&\x04\xb4t\xd7\xdc\x08\xc0\xbf8\xa6c\xc3\n\x1d\x91\xd2\x92\xbf\xb4?\xd2\xde\x11\xbfL\x1a:\x94\xad{o\xce\xce\x81?\xa3zO\xb7\x9b\xaa\x9f^\xffq\x05\xef\xe9\xd5K\xe0w\x8a/\x9f?\xa7\xe5\xbe[\xf18\xb0\xf4\xb0[5\xed\xf6\xf9\x9b\xb3\xf3\x0f\xec\xe3gl5\x91\xbf{\xa5nuO\x10\xa5\xcaN\x9ara\xd7Y\x8fM\x0d\xda\x0diKR\xf7\xea\xd8\xe0\xf20\\\xe6\x0e>\xc8\x18\xf0\xf4\xc3\xeb?j'\xa8+\xb8`.\x01\x9fJo\xce\xce\x99N'p\xdf\x1c\xf8\xc5\xf8hE\xf7\xa4\xd3\xcev>]\xdc\xbdj\xea\xabr\xfbI\xccT~\xf0\x838<\xf2\xf7\x9f\x94\xb6?\n\xa6\xc6'\xd5\x9d\xac6\x81\x81aJ\xb1=\xc9\x86\x16\xe5\x86\xdbsq\xcc*W\x0b)H\xfe\xc4|\xc5\xbe1\xfa\xcd\xea\xeb\x89{2\x04-<\xf4\xd7I\xb1\xfa\xb4i\x91z\x8a\xf0\xffo\xd9\x80x\xfc\xff{\xae\xc1C\x9e\xdb*}\xe050\xa5\x1e\x0f?vo\xbet}&\xc1\xc1u\xd32&\x03\x91&`\xa3&:\xefvM\x9c\x8c\x9c\xab}\xc2\xe6\x96\x88#\xd7\\qg\x99;+\x1ca\xb2#}q\x8d\x8aU+\xc1w\xcd\xe6\xfeq7=K\x97\x1b\x1e\xfe\xbe\xf9y\xa5\x92\xaa\x086\xfb\xb6\xdc\xf1\xbbb.k\xd8[45\xb5\xd0@{r\xdf\x99\xe7JWt\x98\xeeWT;\x9bp\xf7\xe1\xf7t\x88A~E\xc5\xf2\xba%\x1dT\xe5\xae\xec\x87\x9e\xd3\xf7\xab\x9a\xeeR\xc9I\xd0h\x03\x9b\x14j\x0fo\xc5\xa0\xba\x90M\xa9\x8c\x1b\xac\xc9\x19#\x08\xeb\xd2'Q\x8c\x8bFD\xbf\xa67\xa4:\x888\xcc|\xddk6\x82 \xb3i8\xacU\xa58\xd1\xc4\x88%]\x1cU\xe8\xe2\xd5}\xfa8\\\xcaN\x854\xa6]_\xee\xf8\xd9\xc9M\xc9\xd6\xb2\x9d\x0c\x16\xbd2\xe6E\x14zQ\xecX0D\x84}\x02\x86\x9e\x7fyN\xbf|g_\x1bZ7;\xec\x1c\xca{~\x85i\x1b\xfcY\xe8\xe4\xeaUS\xd6\xdav\x9dg5\x1ac\\\xd7\xcd\xae\xac\x85Ie\xaf\x92\xd4R ,\xd0\xc9\xdbw\x17o\x04\x8dFn\x04\x87P\x8d\xa4\x86\xb3Z%,\x19,\xb5~hn \x13\xd7_v%\xc30\xea\xc6\xf9\x7fy\x0f\xdbf\xdb\xf0-\xe6\xf4\xc2O\xf2q\xa4>V P\x11u[\x02\xb0H)\xd7\xb7+\xaa\x8f\xd1-\xe9\xd6|R&\xe2f\x0e6\x03\x04\x0b\x1d\x0fz\x15f\xf4\xd4-\x91\xdb\x189\xf6\xf9\xc6\x9c-@\xa3Y\xb0\x07\x9d<\xe91\xbb\xee\x92#\xd1x\x8e\x9d\xc3\x80 \xe6\xb8:h\x8a\xe2\xd0\xea\xb6dO\xee\xe7e_\xb2\x9a\xc6\x13\xbet\xb4\x17\x01\xd5\x0d\xeb\xa5X\x93%s\x00\x98\xc9\xdb\x93{e=\xae\xd8n\x13\xce\xae\x0cy\x83\xa81\x0c\x0c)x\xbe\x02\xb1:\xec\xc9\xfd\xf8s\xb3\x0b\xb8\x9dgM\x13\xcfr\x94R\x7f\xa7\xf4y\"l\xe4A\xee\xb5\xf8\xa7\x1b\xb5\xcf\xe3\x03\xd9\xecl\xb5\x8e?\xb5j\xeah/\xed\xe0\xf0k\xee\x16\xff\xa6n\xfa\xdfH\xfc\x9d\xb0\xc7l\x91+E\x16\x005\x9eMYjuC\xd6\x04}\x9c\xf2-z\xec[s\x0d\xc5\xf2j\xecb\xb6\x1e\x88\xeezB\xcb!u\xdd\xe4\x1d\x8e9{\x0e\x0e\x1c\xb6\x10\xc0\xbb\xe0\xa9\xc2\xbe+*\x06\xaf\x81\xeb=d\xb31\xdfX\xc3\xdf({\x9b:[c\xa2\xddcqZqI*R\x17\x94\x8d\x19\xfb@\x9d\xec\x995nK\xd2S\xadR\xb5S\x01z\xc7\x138\x88\xc6\x14\xd7\x84Y\xc4\xc6&\x97\xb0G\xd5\x11\xc2 \xa5\x93\x1b \xbe\x15\xb8\"e%\x7f\xd4\x97\xfb\x187\xe0\xa2\xdc\xabY?$\x9f\xea\xcb\xbd\x86\x84\xd4\x8f\xceyGpKU2\x83\xcc\xb7O\x9a0n\xaf\xa7\xa6y\x1a3\xb7\xdc\xd6\x0d\xb3\x98\xe5\x95\xde\xd4rS?\xee\x95#\xde\x97\xfb\xee\x04\xca\x15]\xa9/\xc8fz\x94=\xf13>]\x94\xfb\xd7\xb4hZ\xd27\xed'\xa6V\xd9w\xb0o\xba^R\xa3#\x0e\x99\x87\xbd\xdcq\xe9\x9e\x94\xe3\xd2\xed^\xba\xb9%,\xf5\xa0\x8b}\xb9\xdf\xa7\xda?\xf1\x9bA\xfaf\xd3\xd2n\xb8\x19V\x0b\x8b\\\x95\x06\xfb+k\xc5\x0fY\xd5\x9a`\xc0D\x95\x8b/\xed\xa6\xd8\x1f\x0d\x844u\xe0\xce\xf7\xfc\x8a\x11`\xd8y{\xcf\xf6]\xdb\x90MA\xba>\xfa\x88\xfb\xbb\xf7\xefN_\xbf:\xfdp\xe1>\xe76\x1e\xf9\xee\xa7w\xaf\xfe\xe8\xfa\xf2\xc3_\xde\xber}w:|9&\xe7\xf4\xd7\x8e\xf7\xe7\xa4\x91\xc6\x11\xc9\xa5\xfan<'a\x1f_\xdc}\xa0\xedMY\xd0\xb1\x87\xe0\xfd\xb9\xd2T\x8cN\xfd\xa0\xd4\xad\xd7K\xf8;m\x1byw\xcb\xb1\x19\xac\x1e\xb5f;%\xf0N{ \xaf\xdf\x9c\xbf\x7f\xf3\xea\xf4\x82\xc99t\x14\xeb=\xb5\xa8\xa9\xd3\x13L\x90:N\x91+\xcf\x90\x14\x86\x9f[\xf0-\xef\xcdoW\xbf\xff\x7fVw\xd0\xd4\xfc k\xe5T\x8cUi\xbd\x07\xae\x87fE\xee\xc6~\xd5N \x15\xb3\xb4\xa8\xf8\xdd\xd1-)\x87l?\xacc\x08\xc8\xfb_-B\xfe\x109\xbd\xa9\xab{\xb7R\xa7\xa8V\xa7s\xd4\x92u\x88\x00\xf7\x1d\x94;\x8e\x08\xe9\xa9\xa8\xde3\x83.\xee\xde\x0b\xd7$\xfaH\xa6\xbf[\xf3\xe3\xe7\xd4K<0G\xba\x12\xa4\x8cPKn1\x17o\x87D\x0d0\xeaB2\xf3\x86\xe6;\xfa\x98>\xe7\xd1\x07\xb4y\x8f~\x7f:y v\xfe\x83w\xc5\xcbc\x074\x81\xcc\"h\x7f\x9af\x01\xb2\x98\x06T\xca|\xf3\x00\xd9M\x04\xaa\xe0\xc3\x98 H6\x15\xa8r\xf9\xcd\x05\xb8MFpU\x1a\x0c\xc70}\xe5\x9fl\x86\x0e#\xd1\x1a\x87\xc3\xcf\xa4\xbc\xf7\xe7\xaf\x86\x11\x184T\x89!V\xfa\xbb!\x80\x91i@\xa2\x1cm3D\x0b\xc4\x9c~8\x0f?\x1c\xe1Z\xf8\x13F\xc8\x16\x88>v\xf0\x85n\x01<|\x8bWxL\x18\x17\xb0B\xb9\x8c\"\xb1\xd0 \xee\x9e\x994\x05\x0d\xeb\xc2\x9f\x9a\x84v\x81\xe8\xbe\xf1\x85x\x01,\xccK\xbc\xe8\xffknIby\xff\xfe\x90/\xe0\x0b\x00\x00V\xe8\x17\xf8B\x1b?g8\x18\xf0\xbewQ\xdco\x1f\xf0\xd00\x10\xdaQ\xe2!b\xc0\xd3\x19\xa2x\xe2\xabx:F\x94pl\x15.\xc2\xf1]\xa0A\xa2\x84\xc2\xc7@\xb0\x81\xa2x\xc3\xc8@LcE 7Y\x94@H\x19\x88k\xbd(\xc1\xd02\x10/-t\x86\xa0\x979af\xbc\x02\xa7q\xd0\xbc\x8f\x8a\x86\xc4\xc5d\x11%\xaee9\xc3\xce@0\xf4\x0c\xcc\x0f?\xe3\x90\xe6\xec\x80\x98\xe6g\x0cN\xc3\x8a7@\x0d\xb8\x82\xd4@\x84\xb2Y\x83\xd5\x80+`\x0d\x045\x89]\xc0zW\xe0\x1a\x08\xad]\xd3\x006\x10\xbd\xd6\xce\x0dd\x03\x8e`6\xde\x9a#}\x95\xc4\xc06\x80\x06\xb7\x81\xec\x8a\x04\x02\xdd\xf0\n\xef0\x05\x90\xc5\xc0m\xfe{G6\xa5\x80e\x0e\xcd\x84\xacAp \x90U)g0\x1c\xc8\x19\x10\x07\xfc\xb9\x95\x16\x05\xc6\x81\x8c\xc1q \x18 \x07\xe6\x06\xc9\x81%\x81r\xb0\x1e\xbb\xdf\xab#g<\xcf\xd2\x82\x809\x88\xac\x019\x07h\xae\xa5e\x81s\x10q\x1c\x88\xde\xa3\xf9\x96r\x07\xd0\x81\xe5At \x7f \x1dX\x16L\x07\x96\x05\xd4\xc1\xa7(\xaad\xb60;\x90=\xd4\x0e\xe4\x0c\xb7\x03Q!w g\xd8\x1d\xf0\xe6eZ\x16~\x07\x9b\xe3hn&ajf\x07\xe5q\xc8s\xe6gZ\x1c\x9c\x07\x16\x07\xe8A\x04bY\x9af\x87\xed\x01\xf7\x9e\xd0\xebkx\xb25\xc58\"3C\xf9`\xf6\xd7\x99\xb3)\xa4\xc7\xb2\xb0>\x860\x1e\xe4\x07\xcd\xdc\x94%\xbc\x0f\xe4\x0e\xf1\x03H\x98\x1fX\x1e\xea\xc7\x90\xd6#9\x9c\x96\x05\xff\x81PL\x1c\xf0er\x8a\x08\x04\x04\xae\xe4* \x01\x81\xdc2\xac\xc8 \x8b\x82\x03ABg\x84\x82\x04A\xb0\xdd\xc1`A\x90\x160\x08\xf0\x84:\x9e\x1cO9\x82\x07\xc1\xa2\x00B\x80\xa6\x17Y\x18H\x08B\xc1\x84 \x90\xef)\x94\xf1\xc9\xf3fc\x83\x0bAD\x80!@3?-\n4\x04q\xc1\x86 )\xe0\x10\xc4\x04\x1d\x02g\xaf\xa1\x83\xd6\xf5l(\x08\x11,\x0eD\x04>E\x8dO\xb3\x06%\x82\x85\x81\x89\x0cQX\x86\xa8\xcc\xa1\x8a s\xb8\"\xf0\xe6\x89\xc22Ea\xb9\xa2r\x85/\x82\x9c!\x8c {\x18#\x88\x0ee\x041\xe1\x8c >\xa4\x11D\x865\x02\x08N(\x7fTt\x98#\x88\x0bu\x04X3r\x86<\x82\xa5a\x8f\x0cYH^\xa9\x9c\x81\x90 k0$X<\x1e\x82A\x91 \"0\x12\x18\xeb\x10\x12 \xa2/\x00\xec\xbb\x8aE\xc1\x92,\x13\xbe)Im\x04L\x02X\x1a4\xc9\x10&T\xb2\x03'\x81/x\x128.\xbb\xfb/p\xe7\xdf;\xae\xb3\xbd\xdbn\xff\x15\xb6KmQ\x1e\xf6v\xde{I\xedm\x93(\x81\x8b\xe9\x08 \x9e\x00L0Hp\x05a\x82\xe0\x9cPe~0&\x87@R\xdb\x01\x99 B\x9d\xb9\x81\x99,A\xda\xa5\x9f\x15\x9c \x16\x04h\x82\xe5A\x9a \xd8\x0fY\x835\x01\x16\xb0 C\xd0&C\x9ep\x81\x1b\xdb\xa1\xce\x16\xbc \xb2\x06p\x82\xc4 N\xe0'&-\n\xe6\xa4 \x1a\xc2:\xe9\x01\x9dX\x99\x13\xd4)\n\x90)\xd5\x1e\x10\x99\xf2\xef^\x83d\xca\x9f!\xc0L/\x0e\xf3{\x1a\x8f\xbb4)?\x98\xe1_\x1a\xf4\x0f%#9\xcd0NBr<\xeeC\xfa\xcd&\x1e\xe9B\x96p\x8e\x14\xc7H\x97\x17O/Z\xc8\nF\x18\xc1h\x1f:\x98\xc0\x18\xf52\x13\x03\x18g\xff\xc62\x7f\x0d\xd6/\xda&\xb7\xbdX\xcc\xf4\xe5\xc4S}*\xcc`\xf9\xf6\x19\x19\xbe8\xbbw\x11\xb3Wqy5y\x1eV\xaf\xc5\xe8E\xdf\x086\x9c\xb2\xb2x\xe73xg\xb3wu\xbe\xae\xdeW\xb3\x98\xbb \xac]|t\xf3H\x1d\xc2\x9d\xc0M\x85\"\xe4\xf2\x86\xaa\x05L\xce\xe0\xafF\xa3!M\n\x9f\xc2\x92\x9fa\xc5\xf7\xe0\xfbM\xe0'Y\xdc\x0e\xd2\xab+Z\xf4\xe5p\xab\xf6hK\xba}[\x16\xf4\xd1\xe0\xfe\x0839\x8cw\x91M\xa3\xd9Q\xd8\x95\xbb\xb2>\xecd\xb5\nj2\xc2Evt\xb7o\x9a\n_\xe9~\xa0=w!\xff\\\xf6\xd7\x17w\xdd\x0c\xd6\xc1\x03E\xaa\xb9\xb8sD\xa8\xe9\xef\x847a\xf4\xab\xb1A\x95\xbf\xe5\x7f\xacK+xc\x1c#\"\x9e\xa6\xe0\xb8\x82\xdd\x93\xb6_w\xb4__S\xb2\xc1I\xabi`\xb4\xa6'N$\x9a\x0b\x95\xee\xc3\xa4\xdbM\x84\xd0\x06\xcfy\xdb,-\xd49i\xfb\x8e\xf6?\xf2\x16\x7fe|\xc9\xc7\xda\xd9k\xfd\xed\xcc{5y\xfaSB=\x90\x1e\x10\xea^\x92\xae,$\x8f\x85\xed\xcc\x1c=5+*\xb2\xd1x\xbd\x047\xd8\x9e\xe0#\xa2\x90\xfd\xfeaD\x876\xc2\xcci\xac;Zw\x87\x0e\n\xb2\x17~Z/\xc0e\xf2\xe3\xf6P\xc9\xa0Q\x93m \xef\x0fD\x9e>\xad\xb9\xe5\xb76\x84\xe2)f\xb8\xd5no|X\xecT\x86\xfd\xcch\xb7\x85\x16N8\xe5\x04\x0f\x8cU\xd8\xf5\xa4\x97\x06H\x1cz\xeeHq]\xd6\xd4\xdc\xc2r-&\x16H\x15\xcf\xab\xc0\xb8X\x81\x9f\xf8\xe7y_\xee\xe6\xa2J6\xa4\xa7\xcf\xd8\xef\x8d'\xf8\xf1\xbdm_UY03p\xa3\x04!\x85!\x04\x85 \xd8cU2\x1c\xc09\xec\xf4\xf0\xb5\xd7^\xab\xe2\xe7\x12\x89\xe2\xee*\x88\xe9.\x08wY\xc0\xae\x1b\x0fM\xed\xbb*|\xa8\x14\xfc\xb8x\x9ds\xc5\x81\xb1b&V\xccga\xad\xd9\xb47\x9ee\x1fe\xae\x9e\x9f\x8f\x93\xbei\xbb\xcc\x82\xcdv\x8dGP\xfb\xbdb.\x0c\x9f\xed[z\x83\x9a\xcf\x9a\xde\xf5\xeb\x07\xd3q\xb0\xe8\x99\xe5\x92\xfd>\xb3D>\xfe$\x945\xb3hzSnh]\xd0\xccb\x87\xf7?.\x9b\x88\xff\xc1\x0cQ\xd3\xd1v-#\x9a\xe4\xaa\x7f\xb2\xc8\x8b ?\x0d\xff8\x1c\x0f\xf2\x80\xe3\x8a\xe7\xcb\x9e\xd3\x97?\x17\x955\xc9E\x9bl0\x86\x0f\x91\x8d\x86*\xce\xab\x95\x805\\\x88\xa2\xbc\xb8\xeb\xb4\x90\xc2\x97\x92Q$\xb6\x80\xc2W\xf8?rk\xf2#_\xdc\xff\xf9\x05\x8a=\x12\xa7e\x9c3PU|\xaf3\xe0g\xf9D^\x01\xfc\x99>n)\xfc;\xdb\x08\x92mK\xe9\x18'\x16\x91'\xa2k\xf2c\x00\xb4>\xce\xff\xd8Q\x0e\xa1e\xda\x0b\x15O\xf7\xfb\x1fIw=\xee\xbf\xc7cv\xdaQ\xa6\xd6\xd4\xcd\x91\x83\xf55\xf3\xb5&'\xe2\x1d\x15L\x90\xe9>\x8d\xcb\xdaL<;M\x9c\x9aR\x8b\x87\x0e.\x08\x96\x8d\x1f\xa7_\x10\xf2\n6\x07\xe1Q\xd2\xf5M\xd3\xd3\xb5[9Q\x82^H\xb8FVx]\xc4\xfd}TE\x10Y\x19(q\xde'\x823Q/f\xb0\x13\xbc\x88\xc8\xcbo^\xaf\x7f\xfe\xf0\xc3\xfa\xe2/\xe7o\xd6\x1f\xdf\xfe\xf1\xed\xbb?\xbf\x9d\xf1\xcb\xf3\xf7o\xfe\xf4\xee\xe2\xcd\xbc_\xbez\xf7\xf3\xcfg\x17\xb3~\xfb\xee\xfc\xdd\x87!\xab\x80\xabL\x92\x02\xa4\xb77l\xc6\xa6\x85\x87\x0b\xde\xfc\xdcm/$4Epo\xd8\x94\x96\xa7\xaa\x1ad\xd0M\xa6\x1d\xcb\xb0\x9c\xa1\xc6\xc8(\xcew\xf3\x12\xfe\xd4\xf4\xd6=^\xa4\x04\xd1\xcf/\xe1\x9c/\x9e\xa4\xf2\x8bq\xed\xc4\xa6%a@\xc7x\xf5\xa2\xb4\xcd\xa1F6V\xd3\x12\xb7\x95\x10E\xab\xfaw_{\x9fuo\xeb\xa6%\xd2v@\x82\xfd\x80\xe0\xaef, \xdd\x0e\xa1\x15\xde,Q[\xc5iI\xe8\x0dH\xec\x11V\x02\x9b\xcaiI\x19\x17\xaa\xc4\x0fMUb_\x14\xa4\xbf,H}a\x91\x1bU\xf4'\xf8\xb6\xd5|\x14Eu!\x0f\xc674t\xc62-\xc3N\xce\xed\xefO\xcb\x0cM\x82]=*\x11\xc0\xf8\x88\x922\x0e\xe3\xed\xd3p\x07\x1cW}\xde\x1eH_F\xd9j5\xea\xac.\x85\x86\x9e\x94aZ\xfd16@\xda\xa4\xb2(\xf7D\xdc\xefh\x9bC\x05w\x08\x8a\xd0`P\x93\x8b\x12\xbc\xd0\xbb\x9e\xd6\xf8 \xf9\xb4\xfc\x8a\xfay\xd0y\x02\xa8\xef\xa71\x1eV\xf0\xae\xae\xc2\x1d.\xf0\x8f\xe2\xa8\x9a\x8a\x03\xacp\x17\x8f\xa8\x1d\xdfS\x83\x9a\xeb\xff\x8a\x83y\xecd\xef\xb0\x0e\nc\xc3\xde\x1c\xd6\xe1\x1e\xb6\xc6=2\xac\x83B\xd8\x00\xc0^p\xd4\xfbK\xe94\xdea\x93\\\\\xfb\x96\xb2}\x19L\xaa\xe5\x9f\\\xb5H\xa0]\xbd\x8c\xa7yLk\x7f+5g\xdb\xf5\x08\xdf\x1e^\x1e\xb7\x87\xf1\xbfS%Y|\xec\x9a\xaf\x17\x1c)\x8f\x97\x05\n\x85\\\x82i `\xed\xf1\xf2\x85lg\xca!\x0f\xcc\xeb4H\xdb\xb2\x8ce\xc6)\x9d*3z\x0ff\xf6 @\xe2\xe9\x9d*)\xa7'fI\x9f\x19\xaa\xa4\xbep\x98\xff\xd2a\xee\x8b\x9fu\xda\xa7J\xc2\xa9\x9f*a\x86\x03^f\xf4\xcb\x8c\xfe\x88\xe7H\xe0\xc5\xc3\x9c\xc0\xcb\x97hV\x90\xd7\x80\x97/\xa1\x1a\xce\xd6\xf6\x97X\xa2G\xb4@\x17\x9f\xce.q4\x11\xbc|\x89\xee\x0c\x11M\xf0\xf2%4sSU\xf0\xf2%t\x8a \xbb\xe0\xe5K(\x17\xa0\xcb\xe0\xe5K(\x16G\xb8\xc1K\x98\x86\x83\x97\x87o\xd7\x9c\xddY$\xdf'J\x96\xcd \xc2\x8bX9c\xfa-\xd1-Ku\xc7~\x85\x1b\x92\xa8{~U\xe6x\x84\xf1\xf7j\xaa\x1cw\" sP\x94\xe3N\xc4Y\xd2\xa7\x84*\xa9/\x1c\xe6\xbft\x98\xfb\xe2\xbf\xf4Nd\x0c\x8f\x15\xdb3\xa2G\xfci\x16\xa7%\x98tqZf\x0d\xe0y\xc3WY\xa6\xf5UE\xd0\\\x9b\xee2{`\xc4a\x10\xa7\xe5\x19\xf0\x84\xce\xeb\xb3\xd7\xeb\xef\x7f:\xfd!\x12\x9fg\x16S\xca\xe9w\x1f\xde\xbc\x0d\xc3\x0b\xa7\xc5\x14\x12\x89Q\x9c\x16S\xc8\xdb\xb3\x10TqZ\xc6\xe4\xe1\x8b\xbb%}\xeb%\x8a\x98d\x9b\xef+\xb2\x85\xb2\xde\xf0{\xb6NF]\x92\x130\xe90Y\x94\xf1\xfe\xbb\x14W\xb2\xa1\x1f\x8c%\x19\xcf3-\xb3\xc7\xf3l3\x17qqj\x97\xc5j\xa6\x9d\xa4\x8a\x12\x8d\xa9\x98\x96\xc5\xba&u\xe9\x1c\xe7]\x14\x11\x99\xf9C\xb9\x15\x98\\\xe6{\xa8{\x04\x8e6P\x0c\xec\x04\x91e\x0dD\xca\x0d\xbb\xf3\xf3t\x17\xd2\xcd\x88\xaa\xf2J[\xc6\xa1\x8b\xdfz\xdc\xf2\x0c\x91\xbb1 ,Qd\xf4\xf1\xa4\xc3\xdf\x92q\xfeu4\xb8%HX\xe3RV\xb6Q\xd7\xf0\xb3\xa9+y\xc2*\x9e\xd0:QR\xda(J\xb2\x8d\x9b5\x19gL\xc4\xfd\xe1r\x1d\x91\xf5y,\xc9\x9d\x05\xb3:\x8c\x15\xba\xf9\xfa\x9bo^\xfc\xcf\x94\x9f\xcc\xec8\x98\xd7y\xc0Ci\x16\xfb\xaf\xbf\xf9\x97\xcf/~\xcdj\xce\xf1\x1a\xce\x0f\x97UY\xfc\x91\xdeO\x0eK>\xd3\xfbNK\xe0\x97\xb6\xe6\x1f:*\x02\xec\xfei\x98\xf8\x91\xbf\x8e\x05iM\xcb\xacN\x9e\xb3a\x1b\xce\xc8\xf6m\xd9\xb4e\x9f<\x9f\x1eTG\xa5]\x8cR\x89\xd3;ub'\xda\xc1\x19\x9d\x93\x8d\x8afC\xbb=\xc1C\x9a#\xc2\xa5\xaeo\xc9N\xfcl0r\xaf\x9a\x0d5\xe4b\"1\x07\xd4\xdd3\x93\xa6\x0c\x83\x9b\xc9\x8e \xe6\x1f\xea\x9b\xf7|*sS\xd9\x9d@y\x05\xa4\xbe\xd7\xe5\xb6\xe4v]5\xdb9\xa2-\x03\xcb\xde\x83\xe4L`\xb4I\xa8\x9a\xed\x96\xb6\xf0\xa4%\xb7R\xf8\xd3\x15\xfc\xcc3\xe0\x1a\x92\xea\xa6~\xb6\xa1=mwe]v}YLv\x82\xcd\xb6\xc3\xf4}\xd8\x1c\xd5\xbbn\xeb\x8e\xa9\x13\xdax\xf8\xb7\x1cV\xff\x8b\xe2uW\xb0T\xdd\xfa\xcf\xfes2_s\x11\x8e\xef\xa2\xfc/\x7fRoQ\xfc\x0d\x14%x4\x1cl\xac(\xe1&\x8b\x12q\x1e\x1b\xd1zQ\x02\xe9\xbfE\x89\x94\x16{\xd0\xc3\xca\x98\xc8{\xf0\xf4\xea\xf1\x85\xc0mK\xf6{\xda\xc2-\xf7\\\xa4\x03\xe5\x15H\xea\x8d\\\xf3I\x1b\x08~$\x1a2\xc9_\xc9\xac\x047[8L(\xaee\x1f\xb8\\\x91\x1e\\\xb5\x8a\xd62_\xb8x\xfbF\xc3d\xb6\xea\xe0\xf8t\xb5G\xba\xeb\xacs\x9e\x8f \xd0U&\xcf!\x0d\xb3\xd9T\x874g\x07\xc44_\xe6\x03\x1f6\x10\x04\xba\xaa\x14'uz\x07\xa8\xc4)\xac\xf52#6\xde\xe3\x07\xa68Oz\x897\x9e\xde\xd1\xe2\xd0#y\xc4C\xca\x9e~\xf7\xea\xecg\x11\xd7\xe7\xa7f\x1bJ\x84Mj\x91\xdf\x9e\xf9;w\xfc\xb7\x96@\x15\xf7\xb2j\xb6);\xae\xd8\x05\x8cM\xbe\xcd\xac\xb5\xab\xac\xaf\x9a9k\xed\xe9\x98\xbe\\KQ\xaf4\xf0\xd7\xb9%\xdd\xfa\x96\xd4=\xddD\xd6\x1c\xe9\xab\x9c\x0e\xf9Y\xb7\xa4S)k\xa9\x88\xd7\xe4H*\xcfT9t\x0f\xabH\xd1\xd4\xdda'\xe3\x8a\xe1j\xf4w\x98\x02IG\xc8\xec'\xebC\xeb\xcc\x06\xea\xb0\xcc\xa1\x99\x00p\n\x1f\xdf\xff\xf4\xbc\xa5]sh\x0b\n5\xd9\xc9\xcd\xfe\xa1.\x7f9\xd0\xea\x1e\xca\x0d\xad\xfb\xf2\xaa\x94\xd7E\xbd\x0c\xf9\x8a\x1b\xad\x8e\xb6%\xa9\xca\xbfOS\x06\xab\xc23v\x17M\x05\x97\x87\xab+\xda\xaay\xb3\x12y\x89D\x1bD\xce[e\xd6H\x0f\x15%\x1d\x1ah\xad\xa9)\xf0\xb4\xc0\xf5\xa7\xa7Bo.\xb0\xbbn\x0e\xd5\x86\xcd1\xd6xDVA\xea\xa6.\x0bR\xf1\xd1\x8a\xd5\xf6\x84\xae\xb6\xab\x13\xd6m\xa2\nRC\xb3\x17\xc6\xaf\xbaG\x0e\xb6X9\xece\xf0c\xb4.\xda\xde\xf0\x84\xdc\xa4\x87\x1d\xd9wbx0\xcd\xf9\xd5\x93\\+\xb4M8\x90\x0e\xae\x9a\xaajn\xbb\x97\xe8\x9b\xf9\x0d\x9c]\x8dz\xb2\xd7\xa9\xa2\x19\x0eM\xe1\x87\x82\x1d\xb7Dh\xb8\xbb\xdf\xc0i\x0d?^\\\x9c\xc3\x0fo.d\x021\xa6\x93\x98n<55\x10\xf8\xab9H/\xee\xf7\xf4o\x7f\xfd\x1b\"\x10\xd4\xf9J\xadF\x820\x9f'\"\x90]\xb39\x14<;=OI\x8f\xb9\x14\xbf\x81\xd3q\xb5\x13I\x9e \xeb\x03q2V\x90\x82\xcd\xe5\xa6\xf9|\xd8\x0f\x07D\x97\xa4\xa3\x1b\x98$\xc7W\xc5\xe5C}|\xff\x13\xd7\x88\xe7\x86\xef\xaf\xe9N\x1b\xcb2k6Q\x0d`\xff\xbfi\xca\x0d\xdb\xb4\xa2\xc2\x84:|\xba\xb6<\xfd\xfe\x89\xfa)\x93H\xfa\xf2\xb2\xac\xca\xfe\x1ejJ7*187+\xed\x8d\xc3\xc9ij\x99]\x9e?\xceg\xcd\n\x9e|\xec\xa8\n\xbc\xc5z\x83\x0d\x1ff\x1d\xc4\xf8!5\xd9\xe2m\xbdl)\xf9\xcc\xe6\xbc\x14\xb9z\x8a\x8d\x84\xb7MO_\xcaL\xf7\x87\xba\x10#\x9di-\xadDqh[~\xae\xa8\x9f\xc79\x13\xce\xf1cH\xfb \x0e\x94\xb5\xbf<\\AK\x99\x0d\xa7'\xdcC/{U\x11O\x99\xceW\xefa~\\\xd2mY\xd7\xf8\x1e\xe3\xb6\xec\xafQ\xe3|\xbf\xa7+1n\xc9\xbe\xecVE\xb3[\xc1)\x0f|\xc1\xdc\x95\xaf\x7f\xfb\xf5\xefN\xa6\xe7\x9f\xb7\xe5\x86-l<\xb1=.O\xcea\xac\xbar\xb7\xaf([[\xd4\xb8\xad7L\xe6\xbe\xe2I\xf5\x9a\xf1{fMpC\xfb\x81O\xe3N\x9cF2;Q\x9b\x86 \x9e\xc8# q\x9c+\xe6\xfdS\xd8\x19gX\xaa\\\xa2v\x88\xf7/\x07iLu\x86nO\x8b\xf2\xaa,\xa0\xa3;R\xf7ea\xb9\xfc\x8e=\xa1\xd7\xd7\xf0\xdee\x84\x1d\x91\x9fU\xaa{\x19\x86s\xf4$,\xb7A9\xcb\x97\xcd\x0d\xea\x83\x88\xe6\xc9\x99\x93\xe2\x90\x7f:\xad\xef?i\x1b\x98\x1aH{Y\xf6-\x9b\xe1\x1e}\xa4I7\x84\x91\xaa\xa9\xb7\xa2\xff\x89\xf9z\x98\xe1\xe5\xeb\x83\xd0\xe7\xd2\xf6\xad\xf4\xfa\x94\x9bd\x0d\xa6s5\xc3\xaa\xf2\x92+)\x97\x85\x0e\xba\xc3~\xdf\xb4|i\xdd\x93\xe2\xf3\xf3C\xcd\xfea\x0b\xaax\xb7\x1d>\xa51\x9f\xa2\xb9\x82C/\xec\x9a\xb2\x17\x1d\xb3\xa8d\xdc#liM[\x1eoU\x1cq\x0fq\xccN-C*^\x89Y\xc7\x9b;\xc2\x86(\xbcx \xe7LO6\xa9\xa4\xcaD\xcf*\xf0\xea\x9f\xff\x19]\xdd\xbeo\x1a\xb8j\x1a\xf8\x16V\xab\xd5\xffB\x1e`\x0d'\xf5=\xf6\x15\xa9\xefW\xac\xd2\xef\xdbf\xf7\xe4\xaai\x9eb\x0f\xadV\xd8\x12V^\xc1\x13\xf6\xf3\x8f\\\xd5\x8b\xe6\xc9?\xb1\xdf?\x85\xff@\xcd3.\xe3\x1f\xae\xbe\xf8:\xd0\x17\xffJn\xc8\xa2\xce\x80o\xb9\x83\xc5$\xcflw\xd9=\xf9\xbeiVEE\xba\xce\xd9l\xa1\n{\\\xb4B\xfb V\xe3?\x90\xcf\x9e?g\x03.\xa4\xcb\x07\xb2\xa3\xcc_9\x15Zmi\xffZ\\\x81\x9f\xd5]O\xea\x82>y\x9a\xa6$*\x01\xd7\xd9\xfcP\xbd\xc4\xdf\x05^\xe2\xf9}\x7f\xcd6\x8b\x88P\xa1\xd2\xf7M\xf3d\xb5Z=\xc5\x07\xaex\x85O\x1c\xdf\xf2a\xcd_m\xca\x9be?<\x13]\xf8\xfa\xcd\x87W\xef\xcf\xce/\xde\xbd\x7f\x8a\x1f\x10\x8e\x83\xdfU\x8d\xa8\xc8\xd5=\xbf\x0ft\xcf\x0f\x0dz\xf4\xc3\xba\xe6\xe5\xb7\xf0O\xfb\xcb\xd5\xf7M\xf3\x1f\xab\xd5\n\x1b5L\xbb\x13\xe6\x7f\xb2gI}\xbf\xbf\\\xbd\xa5\xb7NE\xcb+\xfe\xec\xff\xf8\x16\xea\xb2r\x0c\x13G\xaf\xa1\x83\xd6\xf5\xac\xa1<\xfaS\xa9\x8b\xd0{\xf5\xb1\xde\x91\xb6\xbb&\xd5E#&\xea\x12E\x8dO\xd9\xce\x93\xf7\xbb\xb2\xdcz\x9c\xf4\xbd\xb9\xbe\x88[\xe6{\x85-\xe1@QC\xe0c\xc4\x1f{\xce6\xcf+\xfe\x05\xf3c\x1f\xb3\x0d\xcf\xb0\xde\xb1\xb5P\x06\xc14D\x89\x11aV0,1\xb5\xf0\xe1\xd0\xdd\xf9\xe03\x03\xb9\xea\xa9\xf0\xa5\xf8\xc1\xc0\xe3\xe7\x8fM\x81r\xdf\xa9\x94\x11\x1bM*G\xe8\xa3\xab\xa6Y]\x92\x967\xe3\xee\xf9\xfd\xea\xef\x8fD/\x88-\x13\xb6\x07\xe4\xd5>bO\xda\x0b\xdd\xbf~x\xf7\xd6\xfc\xec\xdbo\xbf\xfd\x16{-\xec\xd9\xf1\\B\xb8n\x0d\x9b\x9f\xd2O\x11\xfb\xafCG\xd5\xc5\xf4\xf6P\x11\xcbg\xb5\x05\xb0\x877t\xf4/N\x80\xee.\xe9f3z\x1a'\xd2m\xb1N3\xb45\xff\x8a\xb7\xff\xd3\xffa=\xf0In\xc0'\xd8\x11\xd5\x9f+5\xdb_\xa2\x9b\x04R|f\x93}\xdcx^\x95\x15\xc5\x8c\xac2\x0b\xe7\xb4\xed\x9a\xda1\xee\xe5\x19\x12\xcf\x80\xbd\xe6/\xe2[x\x81I\x1b\x1e\xe5@O\xf9\xe4\xd7q\xc6\x1d\xc0Q\xfb#\xde\x1b\x8f^\xc2#l\x12L\x9b\xb8\x12\xedxt\x82K\xe2-xKvL\xda\xff\x16\xaa\xfe\xc1\xf1(k\x81\xf1dL3\xce\xae\xe4\x0ec\xfa\xee\xc5{+;\xb8\xa5U\xf5\xecs\xdd\xdc\xd6|z^\x93\x0e\x08\x14\x87\xaeov\xe80\x9e\x0e\xb4\x13\xe1\xdf\x1a\xa3oD\xa9\xc8J\xd9\x80\xaa\xb7\xd6I\x17\x1f\\f\x05\x9f\xf8\x80Wc\xed\xba\xa962\x8a\xf0\xa8\x13?5\x93c\x14\xe49\x95\x1c\xa2\xa64^\xc506\xe1 \x9b\xf4\xaa\x0b\xacc\x10uV\xf7\xb7\xbf\xfe\xed):\x8c\x97\x8d\x87i%\xae!\xc1\x9b\xcf\x84\xbdX}\xfd\xe2\xeb\xee\x11\xfa\x92\xc7\xff;\x90p\xce=\\\xe0\xae\xa2\x1c\x8f;\xf7-\xbd)\x9bC'\xb3+\xc0\xf7M+\xf1\x15\x1d\xfc\x01^\x9c@\xd9?\x16\xaf\xe6\x96\x7fjm\xb3wtS\x12f\x8b\xcc\xae\xe4vC\xe9=\xec\"\xc4\x86\x90\x07\xaa\x9fd\x91_\xfdD\xba^\x02\xdd\x98\x12\x860\xa1\x12|\xfb-\xbc\xb0\x02_\x84\xda\xb5\xa4!(\xde\xac8^\x17\x92w!\x96\xd7V\xd9\xc6\xf6\xe6G\xf7\xfa\xf1\xbd8\xc2\x17\xc7\xf8\xe6D\xf9f\xc6\xf9>\x04\xd27\x05\xeb\x1b\x89\xf6M\xc2\xfb\xc6#~\x1d\x98_\x17\xca3\x1e\xe7\x19\xc6\xfd&!\x7f\xa3\xb1\xbfh\x83r\xe3\x7f\xf3\"\x80\x1d\x18\xe0\xdc(\xe0\xdc8\xe0\xe5c$\n\x0b\x1c\x87\x066W;glL\xcf>4\xb4\xad\xcb\x8a\x0b\xf6 \x833c\x83\xfd\xe8\xe0\x00>\xd8\x05K\xe8\xbf b\xa3w\x02\x0f\x02\x87\n!\xb0\x81\xbb\x11\xa2| TE\x00N\x10h\xa1(A\x08A\x94\x94\x00\x82XI\xf1a\x88\xc3sH\x95Y8b\xa74\xb9\xb4\xe3H\xe2\x18\xa5\xb2\xa1\x89\xc3x\xe2e\x88\xe2,\x98\xe2p\x8f\xcc\xc2\x15\xdbs^\xbbQ\xc5\x91\xc5\xf3\xb1\xc5\x96 \x05\xddu\xa3\x8b3\xe3\x8bs#\x8c\xd31\xc6\xfe\xf7\x98\x0dg\xecA\x1a\xcf\xc5\x1a[\xba\xeb\xe8Y\x17\xeavlP|\x90\xe5 \xd6q~\xc4e\x80\xd7\xcc\xb7+\xf8\x91\xe4\xbe\xe9z\xb8\xf9\xed\xea\xf7\xff\xb2\xba{)\xb6r\"\xdc\xaf\x00\xf4\x8c\xbfB\x97\x88c\x9cfY\x8eq\x9a\x918\xcdV\x8b\xd1\xd6:Z*[\x19\xdf(\xfeK|\xc8 X\xfd8\x1a\xc0\xc5]\xf7\xdd\xbdX?\xa4\xa8\xf7\xe7\xaf\xbc\xb4\x80\x9f\x9b\x0d=\x1b\xf0O\xd6\xa4\xb1'\x8cp\x14^\x9a\xed\x96\xfe\xc3\xb0\x0b\xd3|\x8a\xae\xdc\xd6\x1a\x9c7ab\xee\xecH\xc4\xa26\xf6\x85\xea\x11&\x9ec]\xd8g\xea\xd2\x05\xad\x19|\x03\x18K\xce\xf0\x0c>\x9c\xfd\xf0v\xfd\xf3\xbb\xd7o\xd6\x1f\xdf~8\x7f\xf3\xea\xec\xfb\xb37f\xba\n\xfd\xa9\xd7g\xef\xdf\xbc2\xb3*\xe8\x0f\\\xbc\xf9\xb7\x8b\x8f\xa7f.\x05[\xc4\xfa\xf4\xe3\xbfy\x1e\xfa\xe9\xcd\x0f\xa7\xaf\xfe\xb2>\xfd\xf9\xec\xed\xbb5\xdf%\xbb\x9f}sv\xbe~\xf1?_L\x9e\x18\x926\x84\x1b\xe8wW>\x94\xdb\x9a\x8d!\xf3\xcdk\xefD\\g\xf6\x1d\xb0-~G\x8bC[\xf6\xa6\xcf\xbf=\x90\x96\xf9\x03\xd8\xda\xcc\x01M\xec\xf5hH\x9e\xa2\xa9\xbbrC[\xb6\xdeAK\xb7e\xd7\xb7\xf7\xfc<\xab\xaa@\x1c&0\x1d\xb8\x02\x16^T\xee\xdf^\xf1\xc9\x00\xb4h\xba\xfb\xae\xa7\xbb\x15\x9c\xee\xf7\x9d4\x8a\xbdD\xd0\x08\xbb\xac.\xe1lH\x0e\xaf\xcb\xac`\xacZ\xca\x14\xe8N\xae|U~\xa6\xbaHy\x9e\xa0\xfd\x06\x83\xee\xd2\xbah\x0e-\xd9\nu\x9a=\xadY/\xefXk\xcf\xdf\x03\xd92\xa7\xa9\x97\x90\x81\xb2\xe2\x15\x90\x0d\xeb\x9b\x9a\xdeBAl\x7f\x8c\x1fW\x94\xdd\xf8\xfex\x07\xcbkL\xe9/\x95\xed\xa8\x15t\x8d\xbc\xe9,\xaf\xaeh\x8b\x00\xbb\x08k(\x07s\x10\xf1z\xba\x9e\xf9\xf5\x12)!f\xa6|\x91\xb6o\xed\x98i\x8e\xf19\\\x11\xf3\xfb\xddC=\xbe\xf0a\xd01/H\xae\x81F]-\xfdw\xfe^\xad\xad\x8a= _Z\x9f\xe85\x1b\xa3\\A\xa4D\x9f\xben\n\x01\xa40AG7\xb4\x15~\x1a\x9f\x16\x03\xdeZ\xb8\xc5l\xdb\xe1\xd1J\x1a\x8f\x97\xf6Gb\x13wu\xe0\xde\xe5D/1\xf4XO\xf0\x9a\xef\x05txZ\xc7\xf5aG\xeag-%\x1b\xbe\xda\xf6\xf4\xae?\x90\xca:\xeae{\xaa\xbd2\xb1\x02\\c\xf5\xad\xfe\x0b\xf3-\xf3&\x9a=\x1a\xc7\xf6\xfb\xe6\xb7\xe1\xb7\xc5L\xa6\xfd\xc6\xd8\xa71o\x0d\xb1k\xaf\x9b\xe2u\xd9\xd2\xa2?=\xdc \xa0\xca~\xdfHO\xcd\xac\xe6D\x8c\xeea\xbe\x18\xe26\x0d\xe5p\x1a\xb3\xad-\xfd\xe5P\xb6j\xa5\xea\x06\xe5\x9a\x1b\xe65p\xbc\x89\xfc\xea1|\x12\xff[\xb3M\xee\xa7\xb8n\xfb\xfd\xbf\xf8\xba\xcdZD^\xfa\xbe\x14C\xec\x92\x14\x9foI\xbb\xe9\x0cX\x95\xbf7Owe\xdd\x88\xad\x8861\xa1\xa5\xbb\xe6Fd\x92\x11\x172l\xf8zg\x80\\\xcb^\xda\x1fi\xefXy\x05B)\xe6#\xbd9;\x07\xfe\x8c\xea^}\x050\xfb\xf1\xf5\x1fW\xf0\x9e^\xbd\x04\x8e\xedy\xf9\xfc9-\xf7\xdd\x8ar\x97\xf9\xb0[5\xed\xf6\xf9\x9b\xb3\xf3\x0f\xec\xe3gl]5_\xc4+\x05\xcf:A\xb4,;\xb9\\\x89\xb5\x8bu\xe9\xc4\x04\x9b\xd6\x82\xb4%\xa9{k\xef~y\x18\x00Z\x03P\x88\xef{\x85;\xf8\xfa\x8f\xda=\xdc\n.\x1a\xa05\x9f\xdao\xce\xce\x99\xce\xe6i\xef}s\xe0\xc08d\x95`\x9b\x93\xf1@\xfe\xd3\xc5\xdd\xab\xa6\xbe*\xb7\x9f\x84a\xe1\xa7\xf5\xb5 V\xb2\x8fU?\xa9F\xfeH\xeaME\xdbO\xea\xb50m\x04V\x97)\xbd#L\xeb\xa2\xdc\xf0\x15L\\\xd0\xc9\x85\xd2\x94(\x7fk\x8e\x9d\xa8Y!r\x9f\xb0\xb2;T}9\xba}\x91\xb4U\xe54\xaf~f?\x1f)\xac\xca;e\x9fN\x1d\xa2Z \xef\xf97]\xb9\xd5=\xd3\x89\x7f\xa5$\x1b\x80\"\xd3\xc7\x1d|\xeb\xa6u\x88\xf6{\xfbB\xf1h\x9f\xff\xb2\xec\xf9A\xad\xe5\xf5\xab/\xb4\xc9'l\x00O\xf6\xc9V8\xf9z\x06\xed\xc8\xb8>\x8d\xc2\xe2w\x04\xf4\xaeo\xc9\xfa\xb2\xec\xbbu\xd77-\x1er;%Q \xad\xacc\xe6\xe0\x1ew\xb2\xf1w\xbb\xc7\xaf\x98\x81,\xfa\xef\xca\xfe\x94\xf7Q\x89O\x15\xf629\x89v\xd8\xc2\xb3n\x15'\xe3\x13G\x89\xfb\xc1l\xfb*\x97 Zw\x87\x96\x0e@p\xee#n\xe8F\x9c\"\xf5\xe43\xed\x04\x86zW\xd6\xe5\x8eT@8\xfbB\x138\x9d\xa6B q\xf5\xcd\xef\x87\x84\xc0\xb2\xde\xa2Z0\xd3\xd3_3\x9f\x01:r\xa5`\xa3\xd2$\xd5=\xad7\x127Z4\xb5\x04\xac\xc2A\xc0\xdf\x84 6\x96\xf9Z\x96\xca\xd8N\x9c\xa4\xd6\xf4\x9c\x9c\xcc\x8cZ\xa8\xfdd\xd1\xb4b\x93\xbdQ3\xae\x1b\xb7\x95b\x95\x96\x7f\xaaA\xad\x89S\xb7\xd6\xcc\xd3W\x07\xaa\xe6\x04\xdd\xf3\xf4\xb8|\x8a|\xa5\xa9\xc5\xa7\xa4RBlp\x99!`]H\xb0\x1f\xfb'\xf8\x07m\x9b\x1e1\xc3\xa7;\xedE\xbblt\xfa\x98\xbb\xeb\xf0\xce\xda\xbb\xab\xf6\xef\xa8\x83\xbb\xe9\xd8\x9d\xb4o\x17\x1d\xb9\x83v\x9b\x87\xb9;g\xe7^9\xeb>y\xd1\x1e\xd9\xde\x15\xe7\xdd\x11g\xdd\x0d\xe7\xdd \xcf\xde\x05\x7f\xa1\x1d0\xba\xfb}\xf8\x9do\xca\xae\xf7\xa1w\xbcYv\xbb\xee\x9dn\xc4.7\xbc\xc3}\xc0\xdd\xed\xd2\x9d-\xdf\xcbj\xf2\x8c]m\xa6\x1dmx7\xfb\xe5w\xb2\xb3w\xb1_p\x07\xbbh\xf7\xbah\xe7\x8a\xeeU\x97\xeeS\xd9\xceT\x1fk\xc6\x1e5\xcb\xfe4\xef\xde4b_\xea\xdd\x93\x9aN\xaap\xe4\\~\xe1\xc4\x05\xe3\x17\x7f\x82\xfc+\xee\x99\xe5k\x9ar[\xd8bXU\xcd\xad\x90`\xc0/;\xe8\x0e\xc55\xfbY\xd5\x14\xa4\x12c\x0f\xb1\xbd:\xdbL4\x11uG\xdf\xb5\x1b\xda~w\xaf\xbb\xa1\x9ac\xa8;\x85\xcf\xe0\xdd\xfb\xd7o\xde\xaf\xbf\xfb\x0b\xe2Fi_\x9e~xe\x7f\xf8\xfa\x8d\xfctp\xca\x9c\xc2p\x7f\x0c\xaf\x1d\x17\xe3Xz\x9b\xb6\x1f\x1d\xde\x86\xb5{\x05\xb2\xf9J\xad\xc1\xc1\xea\x1b8\xfd\xf0J\xf4b\xd9q\x8fd\xb0\x17\xd3\xb6\xbe\x9c\xfc5\xde\x9cw\x05\x15\xfb\x13^\x13\xf2[\xd6%/\xa7\x7f\x0e\xbff}`\xfd\\\x8e;Me\xfe,\xb7D\xa2m\xc3\xc3\xf6{\xfe\xc0\xc7_\xd2=\xa2\xd8\xc8L\xaf\xdd\x13\x0e\x02z\x94\xce\xef\xdc\xba\xfb/\xb12\x92\xf7\xdd\xb4\xfd|\x84\xfdlT}'I\xbf\x9fO\xcf\xcfE\xcc\xf7S\xf2g\x91\xf1g\xd3\xf0y{\xcdsb'\x01\x7f6\xf5^x\x1d\x864\x07\xe9~ \xdd\x9e\x1f\x0b\x99\xadA(\x08s(\xf6n:\xfdB\"}\x14\x85>\x9e.\xbf\x80(\xbf\x80\"\x8f\x18\x8c\x8cD\xf8\xbc\x14\xf8l\xe4\xf70\xed=\x1b\xe1\xddEu_BrG\xf1\x87\xfdL*\xfbH[G\xe7\x9aY\xcdB\xfa\xfa\\\xe2\xba\x93\xa4>\x93\x9e\x8e`\xa4\xd3\x0e\xd9!\xb8\x84\xcf$\xa0\x8fds\xec\x05\x7f\x15\xae{\x19\xdd\\\xd0\xcb5q6\xd1<\x03\xc5|\x19\xb9\xdc\x98f\xe6j\xbc\x90P.;z\xb2\x83Z@\x1d\xf7\xf2\xa2\x1dt\xf1 Q\xdcfL\xc6\x93\xc3\xed\xdf\xfe\x03k\xeb,*xLcC\xf4ow\xdb\x82\x94\xef\x04\xb2\xb7Igu\x11\xbc\x97S\xbb\xe7\x93\xba\xa7\xd4\xb5\x85Dn/\x85\xdbM\xde\xf6\xd1\xb6\xd1\xde\x8a\xa5j\x87H\xda&={\x011;\x82\x92\x1dO\xc6\x0e\xd2\xb0\x116\xb3U\x1d\xf2L\x88n\xbd\x8ch\x8d*\xa5}\xb2\x88Vm\xd2\xa8\x97\x10\xa8\x11\xc2\xf4\"\xaa\xb4I\x8d\xceI\x8av\xd1\xa1M\x8e\xa8I\x81\xceC~\xceF{\xceKx\x8e\xa3:\x07I\xce\x91\xf4\xe6\x18b\xb3\xc5\x00\xb6k\x8b\xa5\xa8\xfai\xcc\x91\x04\xe6\x08\xea\xf2D\xe5\x9ct\xe5EDe\x9b\x98\x9c\x8f\x92\x9c\x8f\x8c<\xff\xed\x06 \xc8!\xea\xb12\xda\x03\x84c6\x8e+\x12\"\x12\x00e\xf5\x03BDaa\x14\xeeK\x136r\xc0\xb4\x1bo\x04!\xf2\x99\xde?V'N\x1d\xfd\xe5@k=B?\xba{r\x10S\xdc{\x17%w\xc0x\xa8\xbf\xd5\x0e\xa9\xe0\xd4\x9a\x139\xe0&\xad\x9fX\xe6\x81\xe4Rp\"todi\x10\xbd\xc2\x177\x02\xdb\xf2\x86\xf21\xda\xd2\xaeS7\x16F\x8a\xe4)us\xdfr& \x9b8\x15\xb9\x17<\xd0\xcfr\x7f\x89\xf3g\xc6\xe3h\xe3\x95\x8d\xe8\x19\xfe\x8a\x9c\xb0\xba\xbe\xd9?\xab\xe8\x0dUh\x7f\x1f\xa6\xeeC\xb9;T\xa4Wt\xa4\xe8\x03p=\xb2m\xe4xu\xa6\xcb\x98\x8c\xd7\xfeN\xbdP=\xf3\x03\x1bnRS\x9cZ\xb7\x82\x0f\xb4\xde\xf0\xbb\xf9\xfeN^\xcf\x1b\xac\xba\xfen\xcd?\x8f\x1c\x88n\x9c\x9c\xa1\xefZ\xd6&W_\xa6\xc1\xff\xcb\xde\xb9\xf5\xc8m[q\xfc\xdd\x9f\xe2 /N\x01{\xdd&E\x8b\xfa\xcd\xb7\xa6F\x93\xd4\xb57\xcd\xe3\x86\xab\xe1\xce\xa8\x9e\x91&\x12\xe5\x9d-\x90\xef^\x88\x17\x89\x14\xaf\x12\xe9\x04h\x0f_\x0c\xcfJG\xd4\xe1E\xd2\xf9\xfdy\xa8\xe7\x03\xd6\x8eu\xa2\xb3\xaf\x83]\xc1h\x9dy\x19\x95\xf8/s\xad\xa2R\xe7H\x13\xb1%T\xf3%Vn\xab\xb2'\xfdb\xde2\xeeA\xfdY\xd5Y_\xdcLn\xdb\x81\xf1,\xca<$#\xdf\xb3d\x03\x1bI\x94\xadz\xb8\xeb\x02\x81l\xd4\xd1X\x8dc\xd1_8Z\xf3\x0d\xe9\x7f\xe4\x17\x9a\xb8&\xb9\xd4\xa7\xe1\x04C\xc3\xe5Nwp\xdfv\x1f\xe1^FVEh\x90]\xec\xf5\x90g\xda\x8d\x95\xb8Z\xdc\x85\x9d\xc0:\xfb\x1e\xbe!\xfd\x0f\xfd\\ab\xa4\xb2&\x15\x13\x1cA\xe5\xb4V\x15\x12\x01`O\x03\x8b?\xce]\x92\xffoz\x90d5\xa5\xbd\x07J\xd4\x01+\x03n\xaf #B\xd2\xfa \x14\xa7\x1deC\xd7\xa8\x05\xde\xeam\x82\xc7\xb59V\xd7\xf2\xd2\xc3\xdb%\x89\xfa\xee\x87\x0f\xd7\x8ex\xe3\x916{v\x18\x9f\x00w\xf5E\xf4s\x0e!\xf9lF\xcf\xa4#\x8c\x8a\xab\x8b\x8b\x8e\x0f\xd0\xf1\x85\xc6\x9d\xcdq\xaa@o}\xaf\xeb\xd3\xe0\xb5\xd0\x8d\x8d\xef\xe6\x1c\xcc\x8d/h\xe7\xf6\xcc\xc7\xf8\xee \x974\x8c\x15\xa2\x1d\xdf\xceD-\xc8\\\x18\x943\xe7\xf2:\xb7\xb4\"\x1c 1 \xc7\xbe5_\xf7\xbf\xeb\xf7\xe6\xfa\xce\xf1\xd5_3`mn\xe2m\xd3p\xd3}\xdb\xee\xcd\x0b\xf3\xa5\xe2\xda\xec\xe2iA\x9f;\xf5:\xe2\x9e\x86\xc1[\x10%\x9e\x9b\x04\xf74\xc4=\x0d\x7f\xc3=\x0d7\xecW\"w&Y\xd8S\x13\xf1\xe2g\xe7SA;F\x9fX\x7f\xa3\xc9\x04\xf7\x8a\xc0\xbd\"\x9c\xd6p\xaf\x08\xc0\xbd\"\xdc\xd7\xc9\x94\xb8(# B\x17\xe7\x99\xc9\xe2\x17Q2$0\xa2d\x08a|\x03\xddS\xd5b\x12\x19Q\xca\neD)&\x97\x11%.\x9a\x11\xa5\x98tF\x14\xdc+b\xb3\xd8F\x94\xad\x92\x1b\xa71\xdc+\x02\xf7\x8a\xb0\x0d\xe5\xc9y,s\x0c\xf7\x8a\x88K\x80D\x89\xedH\x10\x97\x03\x89\x82{E\xac\x93\x0f\x89\x82{E8\n\xee\x15\x91 I\x12%A\x98$J\xba*\xb2\xa3Mk\xa5\xc7\xf5\x86\n\x965\n\x1e\xee\x17\x06\x01\xbcjk=]8k?\xd2F>\x1fD\x95T\xf6\xf0q6\x18?\xdf\xf9\x85\x17o\x8f\xdf\xff\xe3\xfa\xcds\xfe\\\x93\xa2\x8d\x89\xed\x93\x06\xde6L\x0e\xdb)\x88b\x8c]\xd1H\x86\xbd\xbe\xde7\x84\x0d\x1d\xedU\xb2\x0b\xfe\x8a\xb3o\xf7-\x1f+\x9a`C\xa8 \xe5e-\xe5\x08\x7fN\xd5\xe7G\xea\xe0\xf3\x99v\xcbf\\\xb8Ke\x99\xe6\xc7N\x16\x85\x98n!\xdb\x833y\xe0\xcf!\x19nRWr\xfb\xfb\xba>O\xaa\xb1\xfaa\x9eZ\xe7\xe6d\xda\x16$\xe2\xc8\x9f\xc6\x8a\xff\xa4\xd6E\xc3\x97=]\x9aT \xeb\xf75;\x0c\xb7|J\x10(\xf1\xd9\xcc\x18\x9f\xd5}?\xd0\xfe\xd9_\xfe\xf0\xd5W\xbf\xd3\xbd>\xf6\xb9v`7\x07Z\xef\x0f,\xd1\xff\xf1M\x8b\xad]\x9c\xe5u\x14\x8d\xbc\xe5\x8b7\xc5E\xe5\xab\x99\x98\x94E\xc6\x02-\xff\x06\x9f\xf4\x9bv\xd9{o'\xa2)^\\\xf94~ \xc6h\xa7\x17F\x9b\xben\x9b\x1b\x81&\x90P\"\xa1DB\x89\x84\x12 %\x12J$\x94\xcb\x82\x84\x12 %\x12J$\x94H(\xd3 \x1c\x12J\xd7!H(\x91P\"\xa1T\x05 \xa5*H(\x91P\"\xa1T\x05 %\x12J$\x94e \xa5$\x0f\xd6\xc7\x99E\x01Dxi\xfay|ok{\xde7DOZtM\xd5\xda\xe3\xb7\xcf\x8et\xf2\xadh\n\x02\xdev-\xd9U\xa4\xe7\x953\xf3M\xba3J\xbe\x9c\x12E\xb2xVI\xb5\xdarS\x9b''Ie\x1e\x12\x18\x88\x92\xc5\x82NE\xe9_\x88\xfc\x95\xa4~\x05\x89_\x80\xf6e\x91\xber\x94/F\xf86\xd2\xbd\xcddO\xd0\x04\x87\xb7\xbcTo3\xd1\x13\xaf0\x96=/\xcd\xcb!y0\x9c-{>\x8a\xb7\x85\xe0\x85h]6\xa9K\xa2tk\x88\\\x16\x8d\xcb q\xcei\xa5(q+M\xdb\n\x92\xb6\x14\xcaV\x90\xb0\xf9\xe9ZQ\xb2\xe6\xa6j\x8eW\xfc$\xa2\xc6\xaf\xed\xb4\xe6\xa5i\xd9$m+E\x13\xc4\xcc2\xe7\"h\x9b\xe9\x99\x93\x9c\x05\xde\x07\x02\xc4,\xf6\xaaP\x8a\x94\xf9)Y\xa8\x06ytL\xd00\xc3\xa0\x8b\x8c\x15\xa1byD\xcc\x1a\xaa\xf6S\xbf$ c\x0e\n\x96G\xc0\"\x80\xc7K\xbe\x12\xa8\x97+\x00\xbc\x86v\xb9\xce\xff\xc5}\xef\x1b W\xda\xcd\xc7\xc9V\xe8N\x13\x88\xd6*\x9aeG\xec\xfd\x14\xab\x04\xc1\xca\xa1W\xcb(]6\xb5\x8a\x10\xab\x10\xad\n\x93*\x8f\xf7\xd2 U\x9cN\xd9d*\x8bJ%\x11\xa954*\x81D9\x91\x8e\xe3\xb2\xce\xe3\xe2\xe4)\x97:y\xaag\xfc\x96E\x9al\xb2\x94C\x95\x9c\x14)\x8b \xd9\xc4\xa8,-\xf2\x93\";\x80n\x13\xa2Rt\xa8 \x19*M\x85R\x89P\x02\x0dJ&Ai\x14\xc8\x01L\\WM\x8d\xea\xc7\xc8O2\xf5I\">\x8b\xca\x97%=Y\x94\xc7EuJ\x12\x9d\x924'\xa7\xbd\x13(N\x9c\xe0\xccS\xbe\xff\xd3A\x85f7\xa4\xdc\xf3$\xd9\xdb\x9c`\xcf\x93R\xafd:=W*=\xb6>\x8d^\xc1\x14z\xd2OF,#+u\x9e\x9d,\xcf\x91(\xcfL\x92\xe7\xfc \x0eu\x99\x92\x89\xf1r\x92\xe2\xc9\xe4v\x8b\xba\x19 \xf16$\xc3\xdb\x9c\x08\xcf\x97\x04\xcf\xe9_O\xf2;\x17\xb2+\x99\xf4.\x96\xf0.\xb0\xa2\x8b!\xb31\n2\x1bd6\xc8l\x90\xd9 \xb3Af\x83\xccf\xf9\x1b2\x1b@f\x83\xcc\x06\x99\x8d,\xc8l\x90\xd9 \xb3\x89\x1c\x87\xcc\x06\x99\x0d2\x1bQ\x90\xd9L\x07\"\xb3\xf9?d6\xae\xd569+m\x1ckk\n\xae\xabq\xc4\x1c\xb3R\x8d\xa5\xa6\x19\xc3\xa0\xb4Y0(\x8dAi\x0cJcP\x1a\x83\xd2\x18\x94\xc6\xa0\xf4\xf27\x0cJ\x03\x06\xa51(\x8dAiY0(\x8dAi\x0cJG\x8e\xc3\xa04\x06\xa51(-\n\x06\xa5\xa7\x031(\x8dAi^\xfe7\x82\xd2\xee$O\x85\x13<\xb92\xe9\xbc\xa6U\xbb\xa3/Nu\xd3\xbe\xa7?\x0f\xb4g\xc9yu\xc8x\xd2\x8d\x88\xab$\xca\xcd\xa7\x0fR\xe3\xce&\xb9\xb9\xab:\xea\x86;\xf9_>Z\xd5j\x83\x0f\xb4\xfbTW\xd4\xbc\x0fi\xec\xfd\xbbW\xf2\xb18\xbd@}\xa8\x9b\x8a>\x87YH\x0f\xbf\xbf\xfa\xe3\x9fS<\xd3\x9f\xdb\xa6\xa7+]\xf3\xef\xbem\x02\x8eI\xf2\x81\xb8\xf0\xec\x04\xf9\xff_\xd9\x0bk\xbb\x06\xbb\xdc\x8cMm\x91\x92X\xb7\xb0\xdc\xa2\x0cM\x0e \xf7\xf6\x8a\x92\xb0#\xb7\xf4\xa3\xc2\xce[\xd9{\xd8e\xf6[b\xf6\xb5\xeb\xcbc\x9f\x03\xd5\x8d\xefxev\xeb\xdd\x97\xd0\x05\x95s\x16n\xccr\xde\x9b&sf\xda8\xfc\xec\xeb&v\x1d\xed\xc4B\xfd\xc7\xa8\xca\xcaN\xf49fgG}Rg\xa6\xcf\xe5\x9c\xb5]\xe3\xf3\x8c-\xe3\x19\xdc\x02\xe5U\x0b\x8f.\xa3\xfa\xabzXa\xff\xad\xecW\x9fmj\x17N3\xe6'~v\x9f\xe6\xc7\x84\xee\xa8\xbc\xb4\xf0g\xb2\x17\x19mv\xb4;\xd5\x0d\xbb\"\xb7U}\xf5\xe6\x13mV\xf4\xbc\xf1\x90\x90\xd3\x08c]};8|[V`\xf0\x91>$\xb3\x84u\xe4\xa1nv\xf4\xe2>\xfa\xb6m\x8f\x94\xe8\xf9%\x8d\x06\xe5\xae|\xa1\x1c \x96\x03\xf7u\xb3?\xd2\xb1\xbaO\xc5\xf7\xfd\x99\xd4\xdd\x13 }\xdfV5\x0f{\xcb\x8fs\xa0\xe3\xd9\xa1n\xc2\xcd\x0b>\xd9\x03\x99\xb9%\xec\xe8'z\x1c\xdd$\x12e2F\xaa\x83\xfey\xaf\xa5\xc6\x046\xcd\\\xb2s\xfd\xb5nx\xe0\xe0%_\x129\xbe\xdb\xab\xbf\xbc:\xd0\xea\xe3\xf5E\xc5\x95\xbe%\x8cvO\x8c\xcc\x96p\"\x0f\xe3\xeb\xfe\xcf\x03\xedj\xba\x83\xa1\xe7\xb9/\xf9g\x04\xbf\x1d\xde\xed\x9d=nrSr\xd73Z\xdc\xd1z\x8bVv\x1c\xb1hY\xbbM?Gk\xcaYk8\xef;\xb2\xa3\xd3\xd4\xf5]\xbb\x1b\x8e\xf4_\x02\xbc&\xfb\xa0!\xa7\xf0-N\x9f\x97\xba\xfc\x83\x9c\xcfp\xe2\xd7S\xae\xd2/\xeb\xb5\x14^^[\x8d]\xa4\xe9\x87^Y\xf3\\\xcd\xdd\x97\x8d\xdb\x9f8\xdb\xe8bq\xaa\xc4\xb8\xbd}\x99\xf0\x0c\xf7\xb5\xdf\xe3\xef\x8e\xa4\xa8\xa3\xfd\x08\xf0\x03eb\x02\xe7\x8d\xa0\x9e\x80\xaa>BF\xc4\xff\xa4>\x97\x07m%\xb1<\xcc\x88\xab,<\xdc\xb7w\xec~\xfc\x94\x1fG\xfb\xf9|\x14\xa4\x86;\x91\x1c\xe1\x8b\xb6y*\x8d|\x01U{:\x91f\xa7\x8b`v\x03\xbf\x0d\xed\x176-\xbe\x7fI\xf7u#f\x02\xf1<\xd1\x82\xac\xd2&\x1f\x08\xe3\xe4CwW\xf0\x96?\xf4\xc9\xb1o5s\x9c{\xeb\xe6[\xd8QF+\x06\xf7\x07\xca\xc14\x99oA\xddZE\x1a\x19K\x00\x02\xfb\xfa\x13mf\x87q\xc9\x89nQUE\x9c\xd0\x89A\xc7&\xb7\x1eH\x0f\xb7\x946\\,#\xa3\xc0\xea\x82O\xa0f\xdc\xef\x9a9\x13sK\xed\xca$\x13\x9a\xebZ\xf7\xd0\x0e\xeci{\xf7tG\x18\x9d\xa3,\xaa:\xd7\xf58\xe6\xf4\xec\xc6\x7f\x13+\xcck#:\xd3QR\x1d\xe8n\n\x85O\xf6yw\xa0\x97\x9a\xe9\xab\xe1\x13\x07\xe9X\xa3\xa7\xe3\xf1 \xfd\xf35=w\xb4\x1a\xa7\xab\xe7\xa2\xceB\xd3\"o\xa3\x17\xda\x15\xee\xc0\xddt\xe4\x95v\xa4\xa3%\x8e\xed\xbe\xae\xf4\x9b\x9c\xda\xa0\xa3\xa7\xf6\x13\xdd\xcd\xe9\x1b>\xbc\xfe\xbb\x01\x83xD\xb3\xeee\x10Z\xea6\xb8:\xe1\xc9\xa4\xdc\x99F\n;t\xed\xfd\x94\x83aU\x96\x00s\x163\xa3R\x07:%\x03`S&\x80\xb9aOROp\xa6\xddh\x8d\xeeT\x05\xcc$\xe3\xa1\xf9\xd8\xc8F\xc0\xe1\xaa\xf6\x00\x9f\xa4\x13\xd3\x18k\xeeZ\xa9\xe8\xa9\x9b\xea8\xec\xb8\xe4\xe8\xa9\x9ee`,\xfd0>\xe8{>b\x18\x1f\xeb5\x13\xfd\x96\xeb\x1e\x08k\xbbq\x06\x1d\x8e; \x03k\xc7W\x00\x91g\\]gz\x1bP\xb3\xce\x8d\xc8\x1fq\xd33\xc2\xac\xae\xb7x9s\xbf\x9a1\xa7\xf2\xd3\xfb\xb6\x15\x96r\x14\xd4|\xfa\x15\x9f\xe5\xf4\x9e\xc5\xd4\x9e^\xad'\xdb\xae\xf4,\xa5\xf3\x0c\xab<7i<\xcb*<\xbd\xfa\xce\xb2\xeaN\x8f\xb63S\xd9i\xb9\x9b9t\x9deU\x9d\x99\x9a\xce\xc2\x8a\xce\x0c=gi5g1-gY%g1\x1dg\\\xc5YL\xc3\xe9Sp\xe6\xe87\x9dzM\x96\xa3\xd6\x14\x83\xcd4\xe8\xd6jf*5\xf3t\x9a\x0e]\xe6FU\xa6#2\xe2}R{\xf5\x98\xe1G\xf8F-\xe6\xac\xbdt5\xf0\xa3\xf8\xb5\x0b\xab0m\x0df\x01\x05fQ\xfd\xe5\xf2i\x9c\xa9\xbd\x94\x8e\xd6-\xe6\xa8-\x83rC\x8f\xd22\xaa\xb3\xb4EO\xe9\x1aK\xfb\xdc_\\\xf7\xbaI]\x99r\xb31e\xa5\xff\xde\xa2\xaa\xca\x15\x9a\xca\xa5\x12\xcd\xa7\xa7\xccWSn\xd7R\x9a\n\x98L\x1dePE\xe9\xd7P\x86\x14\x94No\xa5\xaa'c\xda\xc9\xa5r2C7\x99\xa0\x9aL\xd7LF\x15\x93\x0eA\xa2u9\xc711\xa5d\x9eN\xd2Y)\xed\x97\xa2\n\xc9\xc2\xfa\xc8\xa2\xea\xc8\x92\xdaH\x9f2r)7[\xaa\"\xcbh\"\x8b)\"\xcb\xea!\xd3\xd4\x90Q-d\xa2\x122E\x07i\xa9 \xed\xab\xa5*\xe2\xc2\n\xc8D\xfdc\x82\xfa\xd1\xa8rI\xe5ca\xddc9\xd5c9\xcd\xe3\xf6\xd6\x8d\xea\x1dcjG1i\xbb_\xcd\xdf\x1d\x89\xce{t4In\xdb\x81\x01\xe1\x1fQ\xcd\x1c\x8f\xe6\xad\xc9c\xed\xb5\xcaC+m\xf1\xb4\xc2\x01\xc6\xf6\xcf\x81v\x0f/\x04\xab\x18\xaf\xbbZ&P*\xbe|P\x18@\x84\xaf\x8c\xe4\xb3z\xbcy\xbcs\xb8'3` 8\xd2wsa-\x0b?\xeb\x99v\x9a\xb4\xf6\xfe\xdd+\xd5\x81\x94\x90 \xe2V\xb1\xe5%{X\xedT\x99U:\xe0U\xe3\x86\x1f;9\xdf\x9f\x84\x9aE\x06\xd7\xdd5\xf2{BzA\x9d\x10\xb9\xd5W\"\xc8\xb1\xa9\x07\x9d'\xe8h\xdd\x18o\xecZM\x14\xfc\x12S\x97\x1f\xffv\xb5pPR\xf4\xdd\xe4\x96\xb0=\xf2\x9e\xc30\x17\xa6\\D\x13JSMp\x92M\xc8\xa7\x9b\x0bk\xe4\xd8\xb7\x16\xe1\x84\x02\x94sa\xceb\x9e\x90\xcf=\x17\xd6d\xcb-/R\x92\x7f\x82\x8f\x81\xc2*\x0e\n\x16\x0b\x85\x94H\x95\xcdD!\xda\xef\x0b\xb2Q\x08\xf1QX\xc5H!\x8f\x93\x82\xe3Y\x06)\x1e4\x9fiP\x8c\x9b\x82\xc5N!T\x1d\xdf\xae\xd9y\x1cua,\x17\xa6Z\xf3\x81\xf6C\x04\xaf\x82o\x92\x87\x80\x02\xce\x87Z!\xe4I\x88\x0e\x00(\x8b]!\x92l\xa7$~\x85\x92\x08\x16\xc2)w\xb2P,\x14\xc4\xb1\x10E\xb2\xb0\x15\xcbB\x0e\x9auy\xec\xe1\xacv\x07w\xa7\xdf\xc9@\xb4\x0e[b>\xf2\xa6\xe0\xc9C\xb5\x0es\xc3\xd9\x9b\x86\xa74\xb2\x85|l\x0b\xe5\xd1-\xe4\xe1[\xc8C\xb8\xee!\xea\xacd1\xb0\x0b\xc5\xe1.\x94\x04\xbc\x90\x04y\xa1$\xe8\x85`\xba\x9e<\xe0\xeb\x1a\xe3\xce\x94=\x99\x18\xd8c\xcf\x9b\xb6'\x1b\x07C6\x12v\x18t%\xef\xd9\x0c\x8a\xc1'\xa3\x8f\xbck\x04\x92\xf8\xa4\xbc\x88l\x84\xc7\xae\xf9\xd7\x9b\xca'V\x8f<\x90\xbc0\xc6\xb1\xb23\xa1O\x11\xa0\x0c\xa5\xa128\xd3\xfad\xc3\xe5\x855\xe6H\xed\x93\x87\x9b!Fa!\x94\xe0'\x01=\x83/\xe7\xc6\n\x04\xed\xb7a\xc5\xea\xb3p4\xacpF\x0cKC\xf4\xbe\xa3x\x1a\xd6!jp\xe7Y \xa4\xfe)\x81\xab!\x0bY\x833\xebD&\xba\x86\x18\xbe\x86H\x1a\xa0X\"\xa0@\xcb\xa6\xe2lH@\xda\xe0L\x08\x94\x85\xb6!\x0do\xc3*\xc4\x0d)\x98\x1b\xbc^svZ\xdf\xb11\xec\x0d\xd9\xe8\x1bB\x15]\xfcZ\x14\x83C&\n_\x98r%\x0e*\x0c\xc7\xa10 \x87`\xfa W\x02!W\n\xa1R\xc0\x1cJBs(\x0e\xce!\x19\x9eC\n@\x87t\x88\x0e\x89 \x1d\xdc)\x85\xdcIf\xd2\xb1k,\xadP2X\x874\xb8\x0e\xae\xdb( \xd9!\x17\xb4/l9\xd2\x0d\x95D\xefP\x14\xbfCv\x7f\x88bxH@\xf1\x10\xc1\xf1>\xc0\x99B\x91\xb5\xd3\xa4\xb5\xd5\x14\xd9X\x06\xda\xaf\xa6\xabb\xad\xe8\x8d\x8c\x8a|\xe6\x15\xe76Z\x0d~\xfb\xa6\xac\xc3\x15\xc5Z\x8d\x1b\xb5\xedY\x99+\xcf[\xb7>W\x14\xf7*]Q\n\xac\xd5\x15\xc5\xbbb\xd7Q\x07s\xbbd\xb3\x9d\xc1\xdch[TB\xc4\xc2$\x11\xa5u7\xd7F3\xa4,D\x85\x15\xee\x8e\x99\x92\x98A\x8c\x0d\xf3\xfcG\xf3\xf8\x98\xf34<\x8a8%4n~\x90<\xe9\x95\xba\xc7\x0f\x8c\xb0\xf5i0f,\xa5\xec\xb8\x17\xfey\x14/FPGv;\xb7\\\xe3\xeb\xc71\x87\x87\xef(\xdd\xf1n;\xae\x06\xf8o\x00\x00\x00\xff\xffPK\x07\x08\x17\xd7\x83\xb7\xb2\xb8\x02\x00(.'\x00PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(\x92r\xe6\xddX\x13\x06\x00\x84D+\x00\x12\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x00\x00\x00\x00openapi/index.htmlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(!\x95s\xe8S\xfe\x01\x00\xabR\x1e\x00\x14\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\xa1\x13\x06\x00openapi/openapi.yamlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(\xd4`4t\xc7\x01\x00\x00\xbd\x01\x00\x00\x19\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81?\x12\x08\x00swagger/favicon-16x16.pngUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(6B\xc8\xd7\x7f\x04\x00\x00u\x04\x00\x00\x19\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81V\x14\x08\x00swagger/favicon-32x32.pngUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(\xb9\xb1\xf1mT\x02\x00\x008\x05\x00\x00\x12\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81%\x19\x08\x00swagger/index.htmlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(]\x12r 9\x03\x00\x00T \x00\x00\x1c\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\xc2\x1b\x08\x00swagger/oauth2-redirect.htmlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(-\xe3\xb5\x97=9\x05\x00\xf7\x0c\x1b\x00\x1c\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81N\x1f\x08\x00swagger/swagger-ui-bundle.jsUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(v\xf2\x8aA\x86\xba\x01\x00\xc5\x87\x08\x00'\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\xdeX\x0d\x00swagger/swagger-ui-standalone-preset.jsUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(_;\x94/\xe8Y\x00\x00\xa8X\x02\x00\x16\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\xc2\x13\x0f\x00swagger/swagger-ui.cssUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(\x17\xd7\x83\xb7\xb2\xb8\x02\x00(.'\x00\x14\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\xf7m\x0f\x00swagger/swagger.yamlUT\x05\x00\x01\x80Cm8PK\x05\x06\x00\x00\x00\x00\n\x00\n\x00\x19\x03\x00\x00\xf4&\x12\x00\x00\x00" + data := "PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00 \x00openapi/index.htmlUT\x05\x00\x01\x80Cm8\xec\xbdkw\xdb6\xb60\xfc=\xbf\x82\xe2\xf40@\x05\xcbR:\x9ds\x86\n\xa2Ql'q\xebX\x19\xdb\xe9eT\x8d\x87\x96 \x8b\x89\x04\xaa \xe4K-\xbe\xbf\xfd]\xd8\x00H\xf0\"\xc7\x9d3s\x9e\xcbz\xba\xbab\x8a\xc4ucc\xdf\xb1\xf1\xb2u8:\xb8\xf8\xf9\xc3\x91\xb7\x90\xab\xe5\xabg/\xf5\x9fg/\x17,\x9a\xbdz\xe6y/WLF\xdet\x11\x89\x94I\xeao\xe4\xfc\xbf|o\x1f\xbe\xc8X.\xd9\xab\xf3\xfb\xd5z\x91\xf0{o\xcf\xbb>\xfbp\xe0\xbd\x8d$\xbb\x8d\xee\xbdY2M_\xee\xeb2\xaatko\xcf\xe3\x8c\xcd\xd8\xcc\x9b'\xc2\x8bf\xd1Z\xc67\xcc\x9b\xb14\xbe\xe6\xde\xde^\xd1\x1b\x8fV\x8c\xfa71\xbb]'B\xfa\xde4\xe1\x92qI\xfd\xdbx&\x17t\xc6n\xe2)\xdb\x83\x1f\xc4\x8by,\xe3h\xb9\x97N\xa3%\xa3=\x1f\x9aI\xe5\xbd\xee\xd6\xf3\xae\x92\xd9\xbd\xf7\x00\x8f\x9e\xb7\x8ef\xb3\x98_\x87^\xb7o\xde\xac\"q\x1d\xf3\xfcE\xa6j\xef\xe7\xd5_\xa6S\x11\xaf\xe5\xab\xfd\xaf[\xcf\xbc\xaf\xbd3v\x98L\xbd=o\xb4f|\xf8\xe1x\xff\xfc6\xba\xbefb\xef\x9aq&\"\xc9f\xde\xf0\xc3\xb1w\xc6\xe6L0>e\xdea2\xdd\xac\x18\x97\x91\x8c\x13\xae\x1a\xd8\xfb\xef\xfc\xa7\x1a\xf0\xbc\x1f\x98H\xe3\x84\x87\x9e\xff\xa2\xd3\xedt\xf7\xc4\xb4\xf3\xc7\xae\xaf\xbf\x9d\xb1u\x12z\x0b)\xd7i\xb8\xbf\x7f\x1d\xcb\xc5\xe6\xaa3MV\xfbgl\x96L\x97\xf7\xfbB\xfd}\xe6}\xbd\xff\xac5\xdf\xf0\xa9\x1a\x16bD\xe2\x07?\xb9\xfa\xc4\xa6\xd2\xa7T\xde\xafY2\xf7\xd8\x9d\x82}\x1a\x04\xb5/\xabd\xb6Y\xb2\x81\xfe\xd31\xe5\xa8D\x82\xfd\xba\x89\x05C>\xdf,\x97>&y\x07\xf8A\x8a\xfb\x07\xc1\xe4Fp//\xc5\xd2\xb5\x88W\x91\x8f\xb3i$\xa7\x0b\xc4\xf0C\x96!\x8cC\xdfV,\xba\x9c\xb1y\xccY\x10\xe8\xbf\x9dh5\x1b\xe8G4\xd6\xbd\x91\xbc\xb9 \x918\xdc5\x9b\x81\xf9\xdb\x01x\xfc\x0b\xc7\xcc\xf2\x16YG5EX\xc7\x94\xc5\x19\x92\x8b8%\xa8\x0co\xd3r\xf1\x12?\xdcD\xc2\x93\xf4!\xeb\xdb\x97\x1eG\x02?\xc4s$\xc7b\x82M\x0d\xf5l\x81\xdeWU\x12\xaa^\xd1\x878\x14d\x19\xb6z\xc4|\x0c\x1f\xb2\xaco*1Ui\x1a-\x97(\xb1uIB\x8ag\x8eI\xd2Y\xd2V\xb7x\x97\x99\xaa\xbc\xb3\xa2\x8c\xf0\xce\x94J\xc2;3\xeaN\x83\x08\xfc\xc0; \xcch\xbb\x1d\x01\xcc;za>\x88d\xcd\x84\xbc\x87b\x0f\x8coVLDWK\x16\xb6\xba\xe4\x9a\xc9Pd8#\xbc#\xa8\x0b\x01\x7f\xc3u\xed\x99\xdf\xb2+w~\xbf\xbaJ\x96A\xa0\xffvdr.E\xcc\xaf/\xa2\xeb \xd8\xd5c\xbd,y\xb8\x89\x96\x1b\x16\xfa\xef\x01k\xfd\x0c\x93]\x95\xfd\xcbK\x96\x9ab\xb6Z\xab\xab\x87+iy\x15\xe39\xea\x052\x08\x10\xa3j\x02\x98\xfcW \xedB\xb1~Nx\xe7\xd9\xb3\x0fL\xac\xe2T\x89\x8f\x9eL\xbcM\xca\x887M\xd6\xf7D\xc9t\xf1\xfc\x9ex\x11\x9f\xed'\xc2\x9b\xc5\x8ax]m$\xf3\x94\xf0\xe2\xa9\xa6n#\xc1\xb4\xe4\xce\xef\x9f\xad7b\x9d\xa4\xcc\xbb\x8d\xe5\xc2K\x04\xfcM6\xd2\x9b3\xe6\xc5\xa9\xb7`\x82]\xdd{\xd7\"\xe2\x92\xcd:\xcf\x9e]\xbc;\xf2\xceGo.~\x1c\x9e\x1dy\xc7\xe7\xde\x87\xb3\xd1\x0f\xc7\x87G\x87\x9e?<\xf7\x8e\xcf}oxz\xe8\xa9B\xc3\x8f\x17\xefFg\xde\xe1\xf1\xf9\xc1\xc9\xf0\xf8\xfd\xb97<9\xf1~\x1c\x9e\x9d\x0dO/\x8e\x8f\xce\xbd\x1f\x8f/\xde=;;z;<;\xf4.F\xde\xc5\xbb\xe3s\xa7\xe1\xd3\x83\x93\x8f\x87\xc7\xa7o\xa1\xd6\xf1\xfb\x0f'\xc7G\x87n\xed\xd1\x1b\xef\xfd\xd1\xd9\xc1\xbb\xe1\xe9\xc5\xf0\xf5\xf1\xc9\xf1\xc5\xcf\xcfT\xc7o\x8e/N\x8f\xce\xcf;\xde\xf1\xa9w:\xf2\x8e~8:\xbd\xf0\xce\xdf\xa9F\x9c1\xbd>\xf2N\x8e\x87\xafO\x8e\xbc7\xa33ox\xfa\xb3w\xfe\xe1\xe8\xe0xxB\xbc\xc3\xe3\xb3\xa3\x83\x0b\xf2\xec\xf8\xd4\xeeZ\x95Ui\x0d?\xe4\x1eM*\x1d\xc9\xec\xc8 \xe3\xa3\xfe_\x88\x02(\x8cP\xb8\"\xc7\x9916\xdb\xb6\x14\x9b\xb6B\x9cE\xc0\x91\xfa\x8d\x89,\xe0{\xe9\xf0\x9f\xaas\x96\x85\x0fV!a\xce\x92\x9c\xe7\xb6\x8b\x16\xf4\xad\xf4\xfb\xc6\xcd\x13I\xc9Vk\xc9f\x9eL\xbck&\xbd\xb5\xf6\x8bx\xf3\x98-g^\xc2=\x9e\xf0=KW\xfd|\x94`T*q\xb9\x0b\x97\xcb\xfd\x8eN\xd3\xdf\xd3i\xaa:%\x1c\x13\x9e}\xc1\x91\xeb\xee \x88|\xb0\xbe\xe8/x\x95\xae\x1aK\xbcaN\x91i\xb3/\xce-\xd2\xec6\x9c\xbbE\x9a\x1d\xbbk\xb7\xc8\xbc\xb1\xc8[\xb7H\xb3\x17U\xbaE\x16\x8dE\xb8t\x8a\xc4\x8dE>9%>5{\xac\xddF>7\x169p\x8b,\x1b\x8b\x9c\xbaE\x9a\xfd\xd8\xbf\xbaE\x9a\x9d\xec\x7fuJ$\xcd\xb0u\x1bY77\xe2\x02\xee\xd7\xe6\xa1\xb8Ev\xf8\xa5\xdd\x8e\x9a]\xabK\xf6\xbf\xd0\xb7\xe8\x0d\x97K\x0f\n\xa5\x9e`)\x137l\xd6yv\x12O\x19O\xd9\xcc\xdb\xf0\x19\x13\x9e\\0o\xb8\x8e\xa6\x0b\xe6\x99/\xc4\x86\xb3y/:]\x0f\xa9\x02\xbe\xf9\xe4\xe3\xbew\x9fl\xbcUt\x0f|w\x93\xb2g *\xcf\xe3%\xf3\xd8\xdd\x94\xad\xa5\xa2\x87\xd3d\xb5^\xc6jWko\xa4,Z\xefx?\x9b\x06\x92+\x19\xc5\xdc\x8b\xc0\xdd\xe9%sU\xca\x8e\xce\x8b$\x84\xcc\x85\xfb\xfb\xb7\xb7\xb7\x9d\x08\x06\xd8I\xc4\xf5\xfeR\x17H\xf7O\x8e\x0f\x8eN\xcf\x8f\xf6^t\xba\xcf\x9e\x81\xd3\xeb`tXvd\x8e\xc0\x11\xf75\xb83\xbf\xf6^\x0f\xcf\x8f\xcf \xb8\xcfF\x1f/J.Hp\x0c\x1e\x1e_\x1c\x8fN\xc1\xbf7<\xfd\xf9\xd9\xf7\xc7\xa7\x87\xc4;:\x06'\xdd\xd1O\x1f\xce\x8e\xce\xa1\xa4qa\x12\xc7\xb3i\x9b<9~\x7f|1\x04'\xdd\xf0\xf4g[\xf2\xd9c=]\x1c_\x9c\x1c\x11\xeb\xed\xd4^L\xef\xc3\xf0\xec\xe2\xf8\xe0\xe3\xc9\xf0\xcc\xfb\xf0\xf1\xec\xc3\xe8\xfc\x88<+|\xa4'\xc7\x17?\xab\x86NG\xa7{\xc7\xa7o\xce\x8eO\xdf\x1e\xbd?:\xbd\xe8<{v\xce\x98\xbb\xa0\xee:Z\xc0\xce\x13\xe1\xa5k6\x8d\xe7\xf1\xd4[F\xfcz\x13]3\xef:\xb9a\x82\xc7\xfc\xda[\xe7\xee\xe8\xf4Y\xc4g\xde2^\xc5:V2u0\xc6.\xe6\xbf\xc7\xbd\xd8\x1c?\x84\x92\xff\x9d\xdd\x8b\xff\x97{\xf8\x9e`n\xaa[P\x08\xa7\xdd\x9c\xa9\x0fd.p?b>\xe2O0\x1f\xf1\xb2\xf9\xa8\xa64\xfe?[\x8f\xe6\xda\xae2\xfbO\xd9z\xd2\x9d\xb6\x1e\xd5\xd0T\xc1\xc3 \xdf\\0\xf6\x1bCS\xad\x7fmJ\x11\xb3\xeb|\x81\xdb\xed\x03\xd6Y%Wwo7\xf1\xac\x18\xdd\xbc\xd0ag\xa8\xd5Sb\xb1\xff\x93_|\x9f\x15R.s$M#e\x8eU\x83\x13\xcfo#\xb9\xdd\xfaC\xb5oo\"\x11G\\z\xf3(^\xb2\x19\xf1\x16\xc9-\xbb1\x94\x0b`\xa4\xf4\xc6\xe4j\xbeI\xa7\x10 ~\xc5\xa6\x91\x12*\xb5\xd5'\xf5\"o-\x92\xd9F\xf7~\xb5\x89\x97J\xb3\xc4Yy\xae\x1bG\xafs\xec\xb1\xad\x9e\x85\x92\x83\xdf +\xe7\xd1\xc2\xb4\xd5%l\xc7\xa6\x03\xc8\xae\\:\xe2@\xf2\xda\xd1\x10\xb4\x1e\x02\xde\xf0Z(\xabk\x8a\xd3\xaa\x8dq\x16\xb3\xed\xd6\x96v\xe2Lu\x8b\xad\x9e\xd1s\no\xb2Cd\x11+\xc4sJi\x95\xe6l\xb766\xa2dO\xd3\x02\xfb\x13\x83\x90{\xe4V\xc4\xd2\xeap\xd3\x84\xcf\xe3\xebME\xa7\xe3Y\xd5\xe0\x96o\xf78}\x9f\\\xfd\xe4\xb7Y\xa1F\xe4\xc3S\xe4\xba\xd5%.\xe95\x85\x14H\x83\xa0\xa5\xf61\x03\x0b\x7f\xde\xfa\x9d\xab\x8e\xb9&\xa7\xf7\xd1\xbab\xc8h*u\xcedIu\xb6\xf8\xa10\xf7\x9c\xc9~E\x7f\x94\x9dh6C\x8ez\xf8x\x8cBg\x9e\x88\xa3h\xbap\x0dl9\xa0w\xc6\x01(\x95\xaaS\x80<\x08l\xafJ\x8e\x05^\xd9\x99\x8bd\x85\\\x87\xf5\xa8\xaa\x95\xda\x08\xeeA\xf1\x88\xb49\xd4\xfc`\xd8\xf9P4tTA^\x05\xf1\x81zh8\x190\xf0\xfd6\x0b5\x99\xb9\xa4z\xda\xc8W\x1b\xdd\x8bf\xab\x98\xc7\xa9\xd42\xae\x8f\xc9\xb9\xbbY\xf2\xde\x18@\xdc\x92h\x06\xbc\xc4\x1f\xcad\xf5\x17\xbf\xbdF\x18\x83\x15\xb7\x03\x87Z\xb4E\xb7\x13\xa7\x1f\x18\x04\xac~\xe4\xc9\x95\x12\x96\xa1\x03\xda\xea\xd9\xcf\xafY\xcc\xafGWZ\x8e\xce\xdf\xeb\xb2L\xa4ve\xf5\xebY<\x9fC\xc8%\xed\xea\x17\xcb(\x95\xc3\xe9\x94\xa5)\x9b\xbd\xbe\xcf\xdf&\xb7,\x95\xa6Qq.#\xc9\xe8\xf7\x9d\xd3\xd1\xc5\xe5\xc5\xd9\xf0\xe0\xfb\xe3\xd3\xb7\x96\x9a;qH\x9d\x84\xbff\xd3d\xc5\xf2\xc18\x10\xd0\x83\xaa\x148\x89S\xc98\x13i\x10<\xfe\xbd\x01\xaf\x9c\xe5G`\x12\"MC\xb1@{d0E\x91]\xc3i(\xf1\xbb\x07$\xd8:\x11\xb2 2\xa6\xd2{\x06D\xb7\xb1\xda\xc1\"\xe2\xd7\xe5Z\xa7\x0c\xe1\x12\xe1\x88\xe7\x885\xae\x1b\xa5\xdfw\xce/\x86'G\x86\xa0\xf6\x9b\x8b\x99B\x84\x15\xa8\xd30I\x89\x1f\x14\xc5\\3>c|\x1a\xb3\xb4\xe8\xe3\xe3\x87\xcb\x8b\xd1\xe5\xe1\xf0\xe2(\x08\x90\xec\xc4\xe9\x85\x88\xa61\xbfnQ\xfa]\xe7ttz\x14\x04\x87\xccX\x97r\xd0\x9e\xcbh\xc9\x00\xef\x1bZ5CR\xb0\xd4\xb0!'\n\xb4%\x00\xd9-\xbd\xc3\xce [)#,C\x98\\\xd0+\x04{\xcd'\xe7\x0e\x93\xfcd\xf9A!9\xa9 \xd0\x15&\xf9\x1b\x0e\x12\xcf\xcaqw\xa8M\xe52\x9f\x16\xa5\xab \x90\x12\xf9U$\xf6I\x02\xc7_\x08\xd7e\x98D \x9c\xa2\x0122\xa4\x0f\xf1\x8cq\x19\xcb\xfb\x8aQ\xd0\"\x13p/\xa2#\x007\"Z6\x17{+\xb5\xc0O\xac=\xae\xb1\x94\xa1\xc4\xb1\xf1m\x90t\x11-\x97\xc9\xedcM\x92\x1e\xce2rP\xa6v\xb3x\xe6\x89\x0d\xf7\x96\xd1o\xf7\xf6T]\xfc\x1b\x13\xa9\x8f\xc9q\xb9\xe8ZS/\xcf\x84f%P\xe6\x03}\xc8\xc8YI\x1c;u\xb9\xa6\x1c|\x08\xcfr\x9b\xf8\x98M\xb6[\xa4\xfe\xd0\x87*\xffu8\xb5\xdc\xe1\"?1\xc8\xa3\xfe\x1d\xb3IFR\xb7\x98\xc4\x0f\x95\x02Tf.;?q\xfd\x1fJb\xea*\xf9f|0\xd1o\x05e\xe3c\x10\xd4\x05~P\xb2\xc5\x01iu\xb19n\xb5D\x8f2\xcc\xe2|\xcegv\xaf~\xe2\\\x907\xfeC\x94`\xf0\x19j\xd1\xbd\xdfJ\xb5\xf0^\xbc\xd2\x83\x98R1NM\x00K\x7f\x9a\x87\xfd\x1d\x08\x16i\x06\xab\xdf\x91ig\x96\xb3]\xf8a\xd6\xe4\"\x12\xd7L\xbao\x86\x8e\xec\x97k\x06r\x87f\x90\x06\x81\x19\xd9\x934\x03i\xa4ei5\x03WYz\x8f\x1a\xc3\xe4\xf2\xb0\xabb\xa3+E(\"\xa9\x16c\xd5.MsQ\xd6|\x13`\xab\xdd,\x97\xb0nORH\x05960]R\xa1\x16\xf6F\xbd\"1z\xc8\xc8\x12\xe7\xc1\x91\xea\x93\xd2Y\x1f\x14X\xc3\x84T \x1eJR\x00:\x8cH\x05\xd0\xa1 u@\x87<#\xa7(!\x0c\xe7\x91`\x87\x85\xa2\x83\x07\x88\xd3)\xb1\x81jp\x9c\xaa\xf8\x88C\xc4\xb5O\xda\x99^\xba\x8c\xa7&\xda\xb3(I\x84\xeb\xdb;,\xb8\x16z\xa1\x04\x12\xa3qm\xb7\xdf8\xbf\x94\x86n\xcf\x81\x15\xc2\xd0\xb87\xd9n\xfd\x14P\xb9\xfc\x1ao\xb7\x7ft\xaa\xe7r\xec7\x93\xa2\xe77\x96\xea\x9a\xa9n$bx\xc0B=\x898\xb5\x0e\xf6\xc1_;\x91~$\x0f\x8a\x96+Q;4\x1f\xb4|\x86\x98\xa1\xd3N\x81;]`\x15\xadK\xf5n\xf5km\xc6/^;\x8a\xc9o.\x1b/^\x7fTdb\x86\xa4\xde\xd7\x9c\xbeG\xad\xae\xeb\xeb$&\x1ePcND\xc5@t\x1c\xb2X\xfe\x95\xdb\x1b\x8c\xeam\x82\x8a\xfa\xbf)\x10(\xc9Ws\x0eE\xd3\x14n\"N\"\xed\x88&\x82\x1a\xf5^kX\xac\xc3\xf8\x8d\xe3\xbb\x11\x1d\xc6\x17J\xce\x17T\x12\x01\xec\xe55}\x981\xb6V\x94\x12\xa6k\xe3\x974\x938\xb4Hh\xdf\xafErw\x1f\xb6\xba\x0e]\xfe\xaa&\x1f\xb3\xc1\xeb\xb0\x8e\x0e\x03\x0dOFl\x7fy[!\xab\xa8\xa8\xaf5\x18\x7f\xa4\x1f\xd1\x1bL~\xa5\x1fQ\xc5\x85X\xedp\xbb\xfdU\xc1f\xbb=\xd0\x7fN\xf5\x9f\xc3'\xe3\x8c\x19T\xef\x8b\xb8\xe3\x14l\xc2!\xe7s\x13.9\x9f\xe7\xa8\xd5\x835{G?\xa2\xdf0\xf9\xe1\x91Y\x1a\xde=\x90!\x98\xe5s\xd0\xff\xec\"c\xa7\xbaf\x83\xfa\xab|\xfd\xc3V\x0f6\xa0\x1a\xcf\xe0\xb7\xf0\x0d\xe0\xc2[\xfap\x95\xdcUx}\xd5\xd6\xf2\xeaE\x10\xfc\x84\xfc\xab\xe4\xce\xb7\xc8\xfe\x95\xc2{\xbb \xec\xd6\xfb\xcc\x10#?#EZA\xbc\"\n\xb9:\xec\xd7M\xb4T\xe2+\x80\xfei\xbd@\xd1\xc6~.e\xb9\x0f\x9c\x91U\xb4~Z\xab\xabh\xbds\xecg\xf5vK\xd2\xc0c\xed\xa6L\xeel\xf7}\xbd]\x8daau\xcdk;\xa7\xb0e\xf5&\xd0\x8fQ;\x8d\xb0I\xbfR\xea\xb7\xe2_jIE\x07\xb6\x95etB*\xbe\xa4\x8fW\x1b\x91#\x91J\xac\x88\xa9\xfed\xb0\xdb\xfc\x11\x98D\xf4^\xa2\xb8\x08b\x97(\x82\xfa &QF\x04\x9b\x87\xefr\xa9\xf0W\x8d\xcf?\x1a\xe13\xfc!#\x7f\xa5\xd5\xf9\xc4\xf3:op\xa7\xd4\xc0#\xdc\xcfv&?6365q`\x0d\xd5S\xcf\xd5m\x0cg \x1e!\x04\xb2\xb2\xa1ee\x07K\x1c\xc2)l\xa1Hk\x0e\xde\xbe\xde\xc6\xc5\x96\xfc \xcc\xe3\xc8?\xba[\xb3\xa9d3/\xe1\xccK\x84'o\x93bZ\x9eL\xbc$\xa7\xe1\x1d\xbf\xcd\xda~\xc7;\x8cg\xe0\xa4\x8a\xa6S\x90\xf8\x954\xe4Iqo\x8e\xd7\xd5jxQZ\x08\xcd\x03?\xb7\xf3\x81\xa8\xf8\xb6\xc9\xd4RP\x8b\xbf*1\xf6\xad\x12v\xb1\xc6\x8b\xef\xc9w\xe4o\x8am\xf5H-\\\x83$\x96mq%\xa7\x92\x94r\x05\x14\xb2\xa4\xc9\xb8;\xd9n\x1f\xb2\x825\x1d$\xab\xf5F\xb2\x190&U?F\x0fJ\xa0\x89`\x1b\xa5\x04\xd2o\xdc)B\x06\xd2\x12\xc6\x841\xfa7\xf4\xa0\xa9C8\xec\x14zL\x86\x89dOB\xa7\xdcD\xf9\xb7\xddH\xf2\x98\xdd1\x08\xd4\xd6\xa9\xee\xea/5\xaa\xf1\xac\xd6\x9a\x1c\xc8\xf0!+X\xee5\x93\x94\x11\xd1\x81\x94'v6\xe5\xe2\xf0\x91\x08m\xd6\xd1\x7f\xb6[f\xfe\xfa>\x1c\xc6\x1a1$p\xd6\x97\xcc@\x882VR\xef\xd9\x98\x95\xec/t\xaf7\xa1\xbe\xfb\xc6'\xaaL\xa1\x85\xd3\xee\x84\xfa\xc5O\xfd\xf9\xc3\xe8\xfc\xfc\xf8\xf5\xc9\xcf\x97\xa0YS\xd5F\xf9\x95.\xa6\xbf\xbe\x98P_\xbf\xcc\xd0\xf7\xdb-\xfa\x9e>\xa8\x15\xad\x0f\xebTw\xa6\x1et\xfd\x93\xd1[h\xfbdd\x86\xf5\xfa\xech\xf8=4\x08O~\x86\xbe\xdbn\xd1w\xd0\xa0&\xa9\xac\x94\x0b@\x1f|\x8b6)\xa3\xcc\xd9~\x82\xed\xb2krGZK\xa0\x94\x89\xf4gu\xc3\x82 \xeewM\x16&\x9e\xbf\xd5\xeb\x9bO.dC\xf3\x0e`aKvm\xc92\xfc\xc2\xdcwF\xd7\x0c\xb5\xba\x98p:eH\xc9n\xd6\xb2\x12\xf3k\x92P{\x96\x8b\xc4\xb4\xdb\x8f_&\xfd\xb8\xdd\xce\xc5\xc7q\x0c\x1a\xe5\x11C\x11\x86=q\xc0:\xb38U\xc4\x01\xdc\x0b\xaf\x93\x0d\x9fE\"f)\x8e \x14\xc6\x1ctR\xca\x98yQhmV\xc2f\x8a=\xcd!\x08\xb0\x05Q\xef\x0d\xa0\xa9Y\x8b\xaa\xd5\xac\x024S0&\xa5\x8f=G\xb1\x88YaZv-Ji\xfc\x1b{\xd5\xed\x1f\xb0\xce\x14( \x183\x0f\xd9Z\x9f[\x90A\x00\x04\x97\x1c\xb0\x0e\xb0 \x18\x93\xb6~\xa5\xdbm\xcb\xe6\xa3\x00?\x01=P\xf2\xef<\x11S6\x84N\xd3\xedV\x93\xeb|\x14\x11\xcbm;\xb0\x99\xf5\x8a\xf4\xf5\xd8Y\x87\xb3\xdb\x91]\x11\xb0\xe8\x18\xbeQ\xac\x93Y\xa3v\xaf\xdbU\x156\xfcJ\x01\xfe\x90\xad\xd3\x83d\xc3%\xed\x12\xd6\x11\x1b~<\xa3\xe0C\x82G\xcd\x87I\xac\xc6'E4\xfd\x1c\xf3\xebC\x06!Fq\x02\x16\x84\xc6\x0fT\xc9Q\x14f\xb5c\xa5\x13{\xb0\x81;\xab\xed\xbct=xp\xf6IM\xd3\xaeWs\x9fqi3\x17\xa8\xeb\xa2*w\x7f\xd12\xd4\x88(\x19\xfeHB\xbb$\xa6u@\x91\x88v\xfb\xd1\xcb\xb8\x1f)$W\xd3D)\xe5\xe3h\x82\x0b\x8bt\x10 \xd7>\xdd#I\x8b\xd2\x08\x0e(&\x13\x9ab\x08\x94&i\x1dg_\xe9\xf3\x0d\x0d_p\xc6\xcd\n\xd2\xa4\xb6\xde\x8a\xdc\xc7TZ\x1f#xO\xe3\xbd\xbd~>>9\x8e\xcb\xe3\xfb\xc0PJ\x18\x8c\xa10\xa3gP1\x81\x8a\nxi\xbfg\xa7\x97<2\xbd.9\xd6\xad\xe1L\x89\x1c\x15\xf3i\xd3\xce\x14\x84\xd5\xcc\xa6\x99B\xe4\xb9b\x1d$q\xfc\xcd\x0d\x9b/\xe6\xd7}w\x1d\xc7\x93\xc2\xd5S\x00\x81\xabi|`H\x8e\xf9\x840\xdco\x1aG\xc5\x0f\x90\xf7\xbatzU\x14\xaf\xefdEb\xa80\x00m\xe0\x10\x9e\x13\xb7\xcc\x8cq\x87\xed\xd81\x8fb\xb0\xce\xa0\xe4\x84:\xc3(v\xec\xb0\xa2\xd8\xda\x19l\x89\xd8\x9c\xb1h\x96:]V\xbeP\xe6\x86F\xcemg\xb5R\x8e\x97\x98\xe5\xd6\xf9\x1a,+\x0b\xaf\x03A\xeb\xf0.J\xf4wm\xd1\xf2\n\xaa\xe5\xdba\xe4/\xda\xd2>\xdd\x85B\xc5\x95\xdan\xd7\xec\x8b\x07v\xddH\xb2\x0c\x13_I0>\xee_\xb3 \xb8\x06\xef|n\x9a-X\xf6}\x85\x06;M\x18(\xdf\x98\x12\xdbm-\xd4#\x97\xb2\xc0\x8bz\xa7\xe9\xa28\xedk\x0eTWeJ\xddq\xd7(H\x80\x9b\xa7\xea\x9f\x1b\xb0\xb1\xdei6\x1dY~\x9d\xd2\x87\xb5`7\x05\xde\x80y\x8f\xdd\x0c\xab\x0c)\x8c+\xefa\xed\xc3\x88\xf0D\xc6\xf3\xfb\xf3\xf5}\xd8\xea\x91TFB^\xc4+\x16\n\x12\xc1\xb0\x8eg\xe1\x8a\xb5\xdbd\x1d \xc6\xe5\xd0\xbe[\x14\xa9\x8b\x16\x8c\xa6\x1d[\x98\xa4Yy3I+\xb0\x12\xe1\xd0\xfcR\xb0\x05ejO\x98\x0d\xd7ri\xfcB!\x1d\xcb\x1bW\x0c\xd7\x8f\xf9M\xb4\x8cg^d\xc8\x87\x8c\xa6\x9f;`\xe3W\xfa\xca<\x11\xd7L*-e\x1e\xf38]x\x117%\x07>\xee/\x18e\x9d\xf2LHa\xa3\xd2\xa3 \x02\xc5\xf2\xd2\xcdz-X\x9a\x9e1]\x1b\xd8[J\x15C\xbee\x88u\x1aa\x0c\xd4\xad\xfa\x0d\xe0\xac\x9dAJ\x02\xd1\x9f\x8b\xf5\x02\xd6n\x97 \x08Z\xbd\xfe#\xbd\xf72\x94\xb8\xd4\xe8\x8a9~\x08\"\x14v0\x0d}N\xa5C\xc5nA^\xb7\x16\x00\xc7=\xbf\x8b\xb0\x98 5\x92\x16\xf3\xadL\\n\xeb\xc4%/\x07[\xf7sYd\xce+J$\x1d{d\xf9\x10\xa0_\xd8\x16\x81\x0fY\xb7s^,\x81\xa3\xb8j\x1f\xe4\xafb8';\xb4\xd6&\xbdo\"jL\xcb\xb0g\x05\xd6\x9b\xd7\xce.*,\x91\x9cDF\xf1!\x911\x12\xd1\x98D\x9dE\x94~\xe4\xda\xbd\xc9fzb\xb4\xd5#\x91\xb6\x89R\x8e\xa4k\xb5\xb0\x90v\xb7\xf6\x97se\xe8\x94\x1a\xff\xa2\\\x19\xd6uY\x18\xd8g\x0c\xe6\xa8\x19z\x83\x16\x9e\xef\x03\xedz\xd7\xa5\xc5\xa0\xf4\x0b1\xac\x94e\xb7Y\xa5I\xd6t!\x80\x8a\x12\x1e\x11\xd3\xcd\xad\x05S\xdb\xee\x94\xddB\xff\x88a\xace\xe2\x8f\xa7\x07\xef\x86\xa7o\x8f\x0e\xf1\x83\xf1\xe6\xa7L:\xc5\xb2ro\x95vJ=\xc7s\x14\x1b\xb74\xb9\x91\xfa\xc1\"\xf7\x9d\xfeM\x1e\x8c\x9d\x0b~\xa8\x16C\x7f\xb3\x9eA\xe60n\xda\x0cY\xa6-X\xb9\"\xef\x0e\xb3\xaf\xa0m\x8b\xe6a\x05z\x92\x16\x8b\x90 \x860'\xfd\xadc\xd7\x84Kh\xacBN \x86\x07n\x17\x0d\x10n\x9c\xaf\x9e\x99\x03\xef\xe2\xd1\x86c\x94\x1c\xf2\x08\x93[\x03\x96 \x18Y\x80\x94\x81\xe0\x82\xa7\x00\x08I\x96\xb3\x1f\xf2\xe3 \xa5\xc1]\xbb\xcb_vf\x97\x83\x08\x90\x99\xbe\x8b\x86\x0e\x10*\xcd\xc6\\21ek\xd9\x84\xa9Wf\xec\xd5JFqk\xce\x9b'\x83\x80\xa1\xa7,\xbf\xb30\xf9\xb4\xf5\xde\xc80\xf9\xbc\xa3k\x99|w>:\xdd\x05 \xad\xe2V*|9\x12\xa0\xed\x8f\xfdv1\x9c\xb6?\xf1\xcb\x8d\xc0\xeb\xd1\xbc\xa1\x8d#Tt\\\xeey\x9c\xe7\x90\xfc \xe2U,\xe3\x1b\xb6\xeb\xd8\x95m\x1f\xc6\x9e\xa1sLF\x8c\xa2+T%\xcb>\xf9\xccJ\x19FsJ\xc7r\x8a\xf0%\xc9\xdc\x8d\x03\xd2\x12\xbf\xd985-\x08^\xef\n$\xfaB\xfc\xd1S\xe3\x8c\xb4\x96\xfcO\x04\x1d9\xda%\x94j\xd0\xc1\xe1\xfd\xe5\xe5*Z\xc73\xea\xff\x01X\x9aC/\xac2\x0c\xa91\xed\xa4\xb4!S\x81\xa0\x98\xe8\xd9\x86\xf3\x98_\x9f3)\x99p\xde\x9b@\x16\x13\xc6Bf\x086)\xf1! \x9d_{\xc9\x1a\x96f\x9e\x08oj\xec\xa3\xa1w\xcd\xa4\x9fo\xd0B\x05\x81\x9a9>\xd2\xdc\nh\x0d\xab\x0eW&@\xa8\x82@#^\xaaGuo\xb6\xb8\xc6\xe6=\xfd\xd6\xd7Eq\x89\x1e*\xe9\x0b\x1e\xb6[\xa4\xcd-\x91`\xe7\xb9\xf9u\xbb\xb5\xa6\xc6\x81k\x95\x0d\x0b>o\x98\xc74Y\x9b\xd8[\xc9\xee\xa4\xa5\x82\x90\xe56\x97\xa6h\xab\xc5j/u\xd1\xcf\x8c\xad\x87\xcb\xf8\x86A\x99\xfc\xd7c\xf1c\xa0\xdd\xba;\xa8UaJ\x8d\x11LUeJw\xb03\xda\xa9l\xb6\xfb\x97\x85=5\xed\xcaJW\xbf76\xaa\x88\x7fj\x8eq\xfb\x7f\xe1v\xf5\x01U\x98hu\xd3\x83\xdasp?]2o\xc6\xa4\xf6\xe4\x98\xf3A\xc6&\xe9\x19>\xa1\xf7Yh\x7f\xce\x1c-\xa3\xab\xe5\xad\x98\xbfV:\xd8v\x9bKzes\xa7\x96\x8c\x0b\xcc\x1f \x1b\xeaG\x12f\x85\x07(\x02&\x8b!\xb7N\x16\x84\xdd#\"\xff\x1bD\xf8\x95\xf1x\xf0H\xc8^\xf8\xa4\xdd\xb2k\x98\xce&.p\x1f\x87\x05\xb44 \xbc\x8d\x04\x1f^%\x1b\xf9\x91\x03\xe4\xd8L)\x86\x08\x13\x88\x8dt\xe8?<\x1a\xca\xac\xa5\xa4VO\xab\x8fZ\x97a\xae\xc8\x17\xcf\x11x\x19L\x8c\x12\xd3^\x88\xe2\x88A \xcd\xd6\x8c}v\xf1\xcci\xad\xda\xdf\xefk\xb8\xaa\x03\xc4s\x97\x0b\xe0\x87\x19j51-\xe2_,\x98\xa7\x0by\xc9\x90\xcb\xc0\x86\x9b5\xb3\xea,\x03\x8b8\x9c\xd3h\xf5\xaa1\xa2\xe5}\xb5c\xc1\x8cna\x95\xb5&\xec-\x89W\xbci\x9d\xbb\x98\x08*\xb7[Xi\xf8\xc3\xf1v\xab\xd7\xca\xa8)\xeeikaq\xd9\x08*\x98\x88\xf2\xd0\xdd\xd6\xeb\xaaJ\xdf\xa2EI\x9e\xe9\x92\x06\xf7J\xbbM\x18\x964\xd2{\xa8*\x978\xac\xde\xf8\x16lL\xddnwD\x0e)\xdbHu\xd9\x1c/\xc5\x97\xcb\xbaA\x86M\xce\x8b\xea|\xf6\xf6\x9a%\xb9\xca6\xda\xa4j\x1dk\xac '\xc6\xdb-J\x99\x13\xfei\x16\xc2\x1c\xef\xaa0\xb9Fe\xc8X\xd0\xc1\n\x02Y\xf1Me\xbb\xc4\xdf\xb3\x92\xd9T\xdb\x1c\xb9q\xda)(\x8b\xedVZ\xc7\x1f\xd8&\x19jV!y\xa1Q\xc5\x85\"\x95d`\x04\x8bp\x06\"kB\xe3\x1a3l&\x94.P\xaa1\xd5OP\xbd~o\x10v\xa1z9XP\x1c\xc8\xd0\xaa\x18\xfbgT1\xf6\xdfV\xc5X\x860&G\x8c^\xa1\xb2 \xee\x93\x11\xc3\xe4\x92\xd5\x10\xe8F\x1fa\xa5\xdfj\xac\xc9-\x0d\xf4!\xd3ov\xb9*\x1c\x9aQ s\xa3\x92d\x0f\xa4\xd9\xdfF\xce\xb0?\xd7\x0dZY\x9a+y\xe6\xab\x15\xc5\x8b\x0f9\xe9,>YE\xa7nglu\xab_\xb4{\xc3\xbe/\xbb_\xf3\x86\xd2\xf5}.\xb9\xe5\x1d_/\x93\xabhY2\xbf\xbe\x8b\xf8l\xe9\x96\xb1L\xe3\xac\xa6^\xf4\xac\xde\xa1_\xd8\x02\x85\xda\\QH\xd5\xab\x9d\xad\xd8n\x0e\x1c\x87E\xfe\xb1\x99\xda\x15s\xdbiG&\xe7\xac\x14\xd0~\xc1r\x84k\xba\xac\xe26\xe6\xb3\xe4v\xa0\xff\x84\xb9\xa9P\x0cD\xd8T\\1\xe5\x81\xfa'<\xd7\xd6\xdfOL-\xc3\x10\x06~\xd0\xc0\xd3T\xf7\xb9p\xa1\xb4\xe3\xe4\xea\xee\xd8\xc4K\x80\xe2\xfc\xaa\x1b\x04-\xfb\xe5-\xacN\x1a\x04H\xb5\xdbS\xbag\xe5C\xe5\x85\xdd\x01-J\x91\xa2\xd7\x97\x0c\xdbWE#\x9f\xd8\xa0Rm\x80\x1a\xc7\xd2\xa6\xbdj\x8f\xc5\x9e\x02\xfdu\xc77\xfa\x90\xd5\xc6\x8a\xc3\xe6N\xea}P3\xf2\x10\xa5\x0c|4\xc9F\x96\xa8\xf5\x90m\xb7s\xa4\x84*\xc1\xbcH0o\xb5Y\xcax\xbdd\xc4\x9b\xc5s\xb8\xbaGzf\xda\xa9\x12}\xde'W?\x81w\xe4\x86u\xbc\xf7\xd1g\xe6\xa5\x1b\xc1\xf4\xeb8\xf5\x96I4\x83\xa0\xb1\xe5\xbd\x97\xf0)\x84\x8emR\xe6\xfd\xc3\xfa\xce\x18z\xf0\xe24YF\x92\xe91\xc2\xae\x0b=)6\xcc\xcb\xf0?|\x9ca\xd2\xc3\xc4\x0c\xf3V\x11\xbf\xf7V\x89`\xd8\xc7}\xfb\xc5o\x171P\x02w>%1G\xfe/\xd2\xc7f\\\xd5CzAP\xfe\xddlL\xc8\x8d40\xc8vO\xab\xf4\x91T@\xe5\x96\x94\xbd\xb1\x15\xfc\x19\xbb\xda\\_3\xd1\xff\x85\xef\x7f\xfd\x0b7\x10(\x01\xf3\x17\xfe\x0b\xff9\xd9\x00=f\\2\x01\n\xec\"N=H\x14\xeb\xad\x93\x98\xcb\xfc\xf0|!m\xd6V\xe4\x8aAM\xb5\\3O\x81\xc5]\x02\x9d\xc3\xed\xd6S\x12\x8e*\x16\xcbB\x07\xee\xfc\xc2\xbf\xdb\xa4\xd2\x9b'J0\x02}\x17\x9c\xe6\xd0\x14h\xcd\xe9\"\xd9,g\xd0@\xca\x18d\xc7X\xa8\xb1\xdc\xc8$Y\xa6:\xf1\x14\xf3\xd6\x82M\xe3\x94-\xef\xbd\xdbE$\xbdu\xcc\x14K\x98\xab\x16\x847MfpA\x86\x9aF>C\xdd\xff/\xfc\xc2v9\x17\xd1Jw\xa9\xc0\xb1L\x12\xb5)\xc1\x14\x1d\xa7^$\xbd%\x8bR\xe9\xfd\x7f\x7f\xda\xfb/]~\x0f*\xa8\x86:\n\x8e~\x1b\xb12q\x80c\x05\x0d\x02zG\xb0\xf52\x9a2\xb4?\xfez\xf2\xcb\xfe\xfe5\xf1\xf7}\x1c\xfa>n\xfb\xaa\xa5\x0b\x98_\x81\x0d0\x06\x18\xb3\xb3\x02\x91`\xa1\xee\x96[\xfc\xe2\xba\x81\xaf\xf7\x7f\xe1\x9e\xe7y>F&\xdb\xc0\x9b\x92P\xe3`{=\xc1\xad9Gme\xb2\x9aS[\xfb\xbe\x95D\x92\xab#\xd6\x9f\x97\xf0\xe3|_Rc\xddf\x8epJy\xd9\xe2\xedH\x9c\xc2\x158wzX\xec\xcb\xa7\xb9k\x1e\xf7\x9b\xfc.\xdfG\x9c\x1e\xc6\xe9:I\x1d_\xcee\x9c\x9eO\x17l\xb6Y\x96_\xaa]\xf6\xd90%\xf7\xbdQ\x15v\xbaB~\x97\x11_\x8b\xcf\xa6\xfb\xaa\x06i\xdf\xd7*\xb8C\xdenQ\xc34\\\xc6\x9f+5\x9a\xa4I\xd0\xeb?\xb2\xaa\x9a\xd8q\x1b\xd8\xa1\x1e\xba\x9dT\xcedox\xaeR8\x95\xc1\xc1]\x06<\xbc,\xac\x91U\xf0[\x83f1\xd5\xf2B8\x861\x17M\x9d\xe6\xdc\xf2n(P\xee+>\x82\xdcW\xb1\xaa^pj\x08\x02\x80\xa3\xd4\x0dv\xb2\xaa\xd9\xb1>'\x88\x9d\xea\xd6\x91\xa4k\x12uX\x1b\x93=[\x85\xfb\xbb\xf0i\x17\xea\x15\xbd\x05An\x9e\x11J\x964\x96\xf2\xc7&'\xb5a\xd5\x1c\x16o:N\xdfXoG @nbs\x89\x02\xae\xbd1\x01\n\xda\xe4\xf5x\xc0\xb61\xff\x9a\x83D6O\xcc\x11\x9f\xaa\x1d\xcd\x04\xb0\"o\xc3\xa7\xd1\xe6z!M\xf22\x08\xebQ,\xe26J=h\x80{W\xf7^\xe4Y\x85X)\x12V\x8c\x01\xdbk\xc2\x19\x97$\x17,\x16q\xaa\xc4\x8a\xdd\x91P\x03+\xc8\xdcF\x82\xe7\xd9k\x90IK\xc3\x8b\x8e\xaa6d\xdb\x1c\x9b\x11o\x1e\xdf\x99D6\xc9<\xe7[\xa6\xde\x15[&\xb7\xd8\xc7\xa1\xed\x08\n\"N\x18\x84{?b\x1ehN*b\xa5M\x90\xc4 %hi\xa5g\x1a\x81\x1a\x9c@\x16\xb5,5q\xe9d\x0d\xab\xb7[\xbd\x7fs,\x04\xafA\xdd\xd9d\x9a\x10;l\xcbf4\xfa*D\x8d(\x96t\x8e/'\xdaz\xc8\x9ejS\xcb\xf9\xdc\xb8\xb4\x14U\xfb\x19\x08#e\xac.\xf3K\xc5\x0f]\x0e\xfb\xd4DLc9)%\xb66\x98\xdc\xea\xf5\xfd\xab$Y\xb2\x88\xbb\xc7\x81\x8b\x1bW&p8\x9c\xe9|\xfd\xf6|\xcd\\\x9a\xf4\xee-a\xc5U\x08\xe2\xef\x8b\x8a\xfc\xab\xbd\xa4\x8f\x8a\xdb\"GJi\xc4F\xc6\xd5\x0e\x9c\xf9\xe5\xe6\xf8\xc0\x88\xd3\xe1w\x9d\x93\xd1\xdb\xac\x08@a\x99 \x0b\xfd\xad1\xa0K\x11\x94B\xdf\xfeXV\"_u\xb7[\xf5\xabf`\xdbn\x7fc\xe8\xb5\xab\xeb\xbe\xb65\x1b\x8cq\xddF\x1d3/\x00+\xc3\xf2\xbb\x1e\xfa\xf8\xa1\xd7\xedR\xdan\xcb @\xe5\xad\x95\xe3\x897KX\xca\x9fKo\x9a\xf0\x1b&\xae\x8d\xee\x91BR#\xf5G2/\x9aK&\xbc^\xb7\xab\x13\xdak&\xea}\x10\xc9Ut\xb5\xbcW\xd2\xab`:\x07\xd5\x14\xdc\xa6F\xa2\xd5d\xe1\x86\xe5\x81y\xa1\xe7\xb7\xd9\xb8;\x81\xe8\x85\xf52\x9e2\xd4\xc5\xd8\x895w^\x13\xb8\x85\x83Z\x9d\xa5/^&}\xd1nc>\x16\x13\x97\xcb\"\xd0Q\x1b-\x97 )~\x05\x86[\xfb\xda'o\x98c\x15\xf9\xd1\xd1[\x7fc}wa\xb9\xb3\xb0MiLu\x06\"G\x07\xfe\xd5=~\xd4@0;\xe9\xfa~\xe2\x1d+(\xf1d/Y+(USv\xa5\xe5\xab\x83\x9d\xd6\xdf)\xac\xa8\x9c`\xf9\xc1\xed\xb1P\xabr}\xcf\xfck\"\xbet9\x93\x93\x0e\x02\xaf\xed\x17R\xcehU\xcd\xa2\xe1d\xb8\xcaL\x98t\xe9\xc8\xba\xa1V\x0fOn\x858\x95\x1bRr\xc0\xd8\x92\xc2 \x04\x19\x9d\xcd\xb7\x9f\x19\x9c5lNC\x96\x03\xe6\xe7\xc7\x00\xb3\xfbJ\xa6\xc7\xf2\x87\xb4z\xd5\x04\"\xf5T!7zH\x9c\xbc\xd5&\x00\x9ceF]y[=\xcb\xe8\xdc\xa5\xd4t\xfc\xb0\xf1\xf6&6P\x90\xb11A/7\\=\xd9\xc0\xecW>a8|\xf1\xd4\xb6\xe4@\x87\xde\xe3pG\xf7\xf5#\xfc\x80maK\xdb\xa1\x7fP\xf2V\xf3\xd9Hm\xae\xd6\x89\xd4\x9c\x01K\xc2\x9d\x08M\xec\xd2\xca\xbf\x1a\x8bI\xbdS{\x12\xd22\xc4\x1b\x86\xbaM\xb7\x1b\xb1\x01\x0b\xb5~f\xc5\xca\x02\x19~*\xce\x18\xd81\xa9\xb1\x00\xb7e\xd85\xfc}o\xc3\xbb\xcb\xb9~6\xe6\x10\"\x11\xea\x85\xac\x1e\xd1\x1cnd\"6F\xaf\xd4\x91\xac\xb9\xc6\"\x82\xa0\xa5Pm\x19\xddc\x0e\x06\xe57\x0c\x89R\xd2]`\xd2 \\\xa3\x08R\x9cw\x8c\x84Cd\x83^idH\xbd\x0b\xff\xa6s\xf6+\xe6\xba\xa3\xf1x\xbbE18\x1eK4,\xd6\xf6@W\xdc\xe1\xce\x18\xf0\x13\xc6\xe1\x9c\xa3C\xf8\x81)jh\x85.G\x8f#\xdc\x95\x7f\x10\xce\xde\xb2\x0eh\xa9;\xb7\x03\xf8\x95\xc5\x00\xd9U\xb3$\n\xe2\xf3B>\xf8}{\xd4\x0c\xe9'\xeb\xd8\xb6\xed\xa9\xf9\xd6\x92nh\xbc\x04,\x1aK\x93 \xe8\x1d\xcb\xc2/\x10\xb6r\x8a\x00\xfcPt\xa6\x84\x86*\xd1\xc84 \xfd\xee \"\xc4\xdfJ\xe7Y\x0b\x9c\x1a8\xcf!\xd3\xd8\xd5p\xe1\x81\xe7\xb8-$1\xe5p\x16~\xe7\x9c?b\xf6t|\xce\xd6\x9c\x1cU\x85\x99\xd8'\xbaTQQ\xca\xea\xb9\x9a\x86])\x06\xef\xa4\xbe\xc7O\xfdU\x98\xdaXH\x84\x9cD\x94\xb5\xfd\xdc/\xe8\xdb\xfd\x9e\x8c\xa3\xc9@\xfd\x03\xbe\x8a\x18\x87\xea\xd9\x06\x93\xa2q<\xc1\x0e5\xc8\xdda\xc9\x98M\x06\xc0+]\xd0k\xa9I5\xd0g\xe6\x14\x1d\xf8 b\xeb\x83\xd0\xf6]\xfd\x16zvY\n\x97\xc896W\xf6m\xc2)\xc8]\xeeI8\xdb\xdb\xe4T$ \xdd\xa5\x06\xc21I\xabTY\xab\x80P@z\xc4\xc9I\xd2\xdcZ\xdd\xe4\xe0\xec\xdb\xa0\x0d%,U}HA\x80P\x93\xa1\xc4&\xfcq#\xd9\x1a\xa5-\xac\xcf\n\xd5\x1a\xb6\xb6\xce+\xe6\xa9=\x06yK\xe7\x89\xe3\xf4\x12\xba!/\xe2\xf7\xb9\x1a\xa9\xa4\xa0!x0?\xa9\x91\x81\xb3\xe5\x82!\xdc\xe4\xb7\x0b\x02\xe4|\xb2\xae;\x9b\x81\xf7\x80Y/\x1e.\x0e\x1e\x99\x80\x8a\xa5\x8d\xc50g\xc1\xa5>\xf9\xdd\xd2\xd7\xba\xf99\xee\x87K%w\x17\xf7\xbb\xb5z\xba\x00g7L\xc0\xd7\x9e\xf3\xd5\x1eA\xd6e\xa2\xe5mt\x9f\xaaB\xf6\xbd)\x9a'bC\xbe\xb1\xdd\x98(\xacy\"\xbc\xe7e\xf4z\xae\xb5\xf4\xb6\xff\x9cx\xcc\xa6\x96x\x0e\xdd?'\xdes\xdd\xc7s\xa5\xe4?\xb7\x83~\xee\x83T\\q\xc1/\x1b\x8fNS`\xe9\xcb\xd2\xe9\xe9e\x96C\x8b\xeb\x03Z\xbb\xbd\xef-\xee\xc06\xd2\xa5\x1fs\xc5\xb7\"\xa7|\xaa\xcb?\xe6\x97o\xa5\xa4\xe1\x10e\xeb\xd1ZN\x0f\xa2<\xfe\xb2[\xbf%\x9c\x92I\x10\xe8\x1d\x92\x14\xaa\xa4\x96\xdf\x7f\x1c\x9e\x9d\x1e\x9f\xbe\x0d\xbdCv\xb5\xb9\xf6\xe6,\x92\x1b\xc1\xc0S\xdb\xd1\x98|\x1b/\x97\xde\xe9\xe8\xc2\x13l\x9a\xdc0\xe1\xcdE\xb2\xd2\xe6\x8e\xd4\xbb]0\xee\xfd\xa3y\xab\xffCm\x02\xa3\x89v|\xb0v\xec\n2h%\x98\xc4A\xf0#\x83\x8ci\x960\x89\x1a%N$\x12\xf4+H\x18g\xc8\xe8 b\x98\xfc&A\xe4WR\x0bI\xf2\xc33\x98\xc8 \x88m\x1b v\x8f\xcb&\x12=\x96ch\xbbEn&\xa1w\xe1\x8f\xce\xb0\xe2\xea\xb0H\xac\xcfUJq\xaf\x8fB\xd3\xcfH\x96S\xda-i\x84RL\xa6t\x99\xa7\xb4\x9b\xea\x94v\xc5+\xdd\xda\x86N\x8d0\xb9\xfe\xe2\xb9TI6\xb8\xaf\xcd\x8fs\x8ax\x10l\x94\xe6\xc5\x07|\xbc\x99\x84kUo\xf0\xb7P`\xc4\xc8\x86\xac!=\xdf|\xd7\xbd\xad\xaa\xc8\xdc\xcdy\xb7+\x1b\xf64\x08\xcc\xd0\xe1x\xdc\xb2\xc8y\x17kYc\xf9x6\xec\xfc\xa36S\x16\xb2\x96,\x1d\xb2I%z'\x8d\xaa\x91\x97I\x0bN\xa5\xc0OM\xea-X\xf8\xac\x08\xfa\xc8=\x13AP\xcfi\xf0\xaa\x1b\x04H\x94\xdc\x12\x14U\x8f\x15\x8f'D6\xc7^\xef\xf5\xc0Wm\xaf f\x90\xeb\xcf8\xda\xe1\xfa \x0c\x89vR\x89\xb1{Xw)\xad<\xbcbi\x1a]3\xea\xbf9\x19\xfdxy0<=8:99:t\xf2kO\xcb\x90\xc8\xafY.r\xa0\xc9A\xab\x05\x99\xc1\x82\x80\x8d/'\x1a_R\xb8\xfcE\xe2\xd0\xe4\x0ck\xb5\xd4\xb7\xed\xf6\x02~}\xa5\x033\x8fX9 `\xe3\xee\x83^\xabI_\xd2\x99)\xa6\xe5kg\xd6\xb2*\xdd6\xc8?\xbc\xe1\"H\xd3\xd5\x0fz\x8e\xd6\x05\xad\xcf\xf4\xe6\xa5j\xc9\xa3\x9cZE\x1d\x10\xdbL\x89l\xe9\x1cL*\xdf^\x84\x80\xda\x14_\x1d\x1b \x18\xe1\x8a\x84)&?\x8e\xbd\x02\xd5t\xda\xec\xf47\xf7\xa3\x9a2\nU\xc7\xdd \xd6\xaf_T^\x13V\xb9Zl&\x1b\xb51\xcb\xdaO\xabY\x04\xacU\x00\xef\xda<\x8b\x129\x1b_: \x07W\xce\xa7&-\xb4~\xb7dSvCP\xf5\xaf%}XDi%kX\xad\x03xo \xa2m\xd8\x16\xa7r\xb5E\xe7\x11^G\"e\xc7\\\xb5\xdb\xebbLf\x88\xbf\xa2]\xe2\x9f&\xd2\x8b<-*\x02a\x05\xa9\x90\xebx\x10pC\xf0Wy\xa6\x078md\x92\x9b\xf0v\x0f\x13\xb8\xbfMh\xaf\x17\x0c*\xcfq\x10Q^b\xc2\xa9\xc2\xad\x08+\x90\xa7$\x1a\xa7\x93\xea~\xb2\xd4D\xb1\xca\x8chu\xc9r\xc8\xc6\\\xc1\xc5\x82\x02\xa2u\x04[%7&e\x10\xceHr\xcb\xbfg\xf7i\xd8\xa0\x0f\xeb\xf2\x9f\xd9}:\x94\xc9\xaa~\xc2\xd5\xde[n\x9aP\xc4\x17\xb2.0.\x8f\xee$\xe3\x10y\xd7\xd4\xf0\x1c\xf9\x87\xf7\x81\xc8]\xba\x1a\x9c\xe5\xf0\x9aG9\xcd\xc1\xdcw\xc7T\xd9|g$\"\xe6\x10\xb8bl\x90\x914\xa1\xe6\x98EJbzI\"\x9a\xee\xb8\xee\\U\xdfy\xe9J\xdd\x1e\xab\x1d\\Q\xa6\xfb^:\x04:\xef\xefH\x0b7\xa9!\xd0K\x02\xf9\x92\xadd{\x039\xd3u\xe6\x9f~j6\xd6\x8f\xb1\\\xe8\xe8\xc7.\xe9\x12\x86\xc9-C\xd3\xdc\xe6\xbd\x04\xfc?\x97\x8f\x05\xa5\xd9\xa3\xae\xb7\x9c\xcdl\xe0\x98\x1eOq0\x03\x86c2\x9b\xc0\x9be\x94\xca\xefyr\xcb5z\xd9\x98\xaeH&+{\xcd\xc0v\xbbk9t \x8a\xcd\xb5\x92\x0f\xcdU1@|!\xac\xed\x8f;\x9d\x89\x8f\xb3\xa6\xa0\xad\x7fa&\x93]\xcd\xa6Oo\xb7X\xa9W\xdd\x01\x03=\xb2\xf4\xbd\xd6\xcf\x93s[|\xf98WU\xde\xd5\x1a \x84\x0eV\xd3]\xe8\xb54I/4\n\xf9D\xcbm]\x12\xcdfl\xe6d\xbeH-\x95\xd5_\xc0\xb0Y\xfal\xb2Aj\xc9i\x16\x8e'\xf6Q\x17\xad\xa6\xca\xa8\xc4\x9f8\xf4iW@[\xd4(_\xd5\x87P;\x88\xda\xd8\xb6\x0e\x0e\xab \xb8l\xbbe/\xbb;n\xc3\xd2\xc9x'\xdeh#\xbdd\xee \xc5\x9e ^\xc0\\\x8fL\xeb\x83\x81\x8b\xff\xc1\xa0\xab\x1e^\xb9\x17\xe1\xb9\x19\x1b\xf7$\x04\x13\xf4\xc5K\xb6'\xf3\x18\x02k\xfd\x85f\xab{\\\x92\xae\xd2\x97\xf5\x11\xc5\xa6\x02\x8c\xc8\xbd*\xa4u\xf8m3@\x8cn\xc6,6W\xf6\xf5\xce\x1b\xc2\xde'\xb3x\x1eOu\x80l\x1e\xee\x15Bx\x05 6\x8f\x96\x9eM\xd0\x00\xe1\xc1\x11wEZ\x00*\x04\x86i\x86\x0f\xd7M7\x8d\xa0M\xab\xa7#\xcb3\xa6U\x86\xa8\x05< Qp&\xed\x84B\"\x9bi\xbay\xb5\x8a \xa3\x01\xa3\xdd\x90\xbdJ\x06\x8c&!{\xd9\x85\xa0\xa3\xf7\x91\\tV\xd1\x1d\xea\x92\xa4\xcd\x14\x05\xa3M\xee\xe9A\xb2\xc7B\x9d\xabI\x0e\xba\xa1SK?\xc6\x1cI\x92\xec1\\\xbb\xa4eZMU\x147\xa6*zd\xf3\xb2\xf2\xce\x93f/s\x93\xc4(\xb6:\xde\xb4/\xe1\xaa\x8b\xa2,\xe14\xee@\xe9\x8cS}\x98\xc3L\x87\x87\x1c\xe8XS\xfe\x02\xe1\xa69\xb2\xbemlU7\x077\x8f%[\xa5\xc7\\&\x9a\xa0\x9ae\xb2\"\xa5\xa1Vn\xb7&\xf5\x80N\x86\x06k|nEHN\xa2\x86\xf4A)\x8a\xaa\x81\xb9M=7cJ\xdf9\x7f\xf0\xb2\xc7\xfeh\xe0\x84\x84\x8b)\xd8\xb4hL9\x82,\xe1\xda\xfd \xe1\xb8 \xafR3\\\xd6.\xf4.\x97\xad\xd6\xcb*\xcem/\n,\xb1`\xdbV[bL\x92\xf2,\x1d\x08\x1d,\xe2\xe5\xec#\xec\xf3\x1d\x1bBG\xc4\x02\x93\x0f\x028rk\x93@\x91\x98&\xdb\xad\x18\xecD4{\xa2\xd7\"Z\x91\"\xa98\xd0\xcb3@\xfc~\x95h\x179\xa7\x92\"\xd9T\x8cwND/\xf5\xbf~\x0e;6K\xc8-\xcf+o\x1f\x8b\x11%\xbegY\xcd\xef\x9d)\\\xe3$\xe9C\xce\xf0\x9bdaU\\\x89\xedy!\xa4\xd3\xf1\x03\xcfk\xd6\\\x9a\xd8\xbdi\xc5ZY!\xcc\x94L\x97,j\nhrv)\xea\xe2\x8c\x98\xc3\x12\xa5\xe1\x15Z7\xdb\xa2\xdc,\x87Z\x0e\x1f\x7f\x92\x13\xfa\xc1\xbc\xbf\xb4.\x1f\xfa \xe5\x05\xdb\xbe\xbe\xdd\x06\x9b\\QE:\x17\xbd^\x17\xd1\xf5\x84\xfa\xefa\xe9\xed\xc8\x0b\xdb\xc3\xfbh]\xc7f@\xe6U\xb4\xf6l\x80\xab*\xe6\xad\x93\xe5\xfd\\Q\x08}H\x95y\xd3\x8d\x80\\\x0eW\"\xb9M\x99\xe8x\x07@h\xae\xa2+\xb6\xdc\xcbKC\x82G\xc1\xf6>\xa5\xfb,\xfd\xd3\xfe*Zw>\xa5V\xdb\xbe\x9cE2\x02\xa3\xc4\xfbhm&\xb9\x88\xd2\xf7\xd1\xba\xfcr\xc5\xc4\xb5\x9b\xdc\xc8\x15\xdfU\x85&\x1bV\xd1\x01\xb8X\xabf\x89j\xad\x9b\xd2\xf1\xb5V\xa3\xe7\x1e\x97\x9a\xd6\xad:L\xd8\x8e\x1d\x1c\xaa\xe6\x84N\xae=h\xdb\xcbgc\x130\x95\xc9o\xc4]H\xbf=B\x0c\xb7\xfd\x81OZ=\x0b\"\xd3\xa6\xberI`\xc2d%\x9a9gH\xb6\xa8\x89\xe0\x84\xa0\x92\"\xfc\xb8!\x07Q9cZ\x99\xa0\xe7\xf3\xd3TZ\x16\xc6\x01Q\x18\x07\x80V\xf3\x81\xa5\xd6\xa1\x1f\xcdf;\xd2\xf7J}\x99\x9eMk,\\X\xf6%\x15\xb5t\xc6\\\x9bJ/u\xdb\x9a\x9b\x82\x83C\xbf\x8ef\xb3\xe2\x1d@\xb1jGU@xd\x89o\xf2,\xc4-T\x9d\x92\xafkW\xa6b\xc6\x8f\x8b[\xd6\xedAG\x03+\x0b\xbf\\/\x14\x94\x0f\x1ei\xb1Hh\\\xe0\xaa\xc6\x1d\x13\xc6e\xba\xd4*\x9f\x81\xcb\xac\x9cnE\x16d\xa1\xa6\nJ\x0b\xbdw\x80\x18G\\\n\xc5V@U+w\xe7\xa6\xbb\xb6\xa1$\xb6\x88\x8bN\x84\x17\xda\xa5\x00_\x8b\x85E\x19\xfa\xf5~\x1fG4g\xd7pp\xdb9\xe3\x91\xb8\xb1\xed\xaa\xe1\xbd\xda\xaa3=\xc8\x01\xaeD\x81j\x02p\xd9\x90\x00\\\xa3x\xbe\x84 \x15\x83G\xd2S\x17&\x88\xd2\x92\xb9\x02\x8a^\xbd.\xa9\xce\x8a\x88\x02\x96I\xf5,f\x8e\xdf;g\x98\xdb\x17\xf3\xf5\xc7\xa4\x82\x1b\x86\xf2\x18\xbaC\nQ\xc8\xdc\xb8\x97\x93\x1c 7\xdc\xc0,\xa74jW\x9aI\xed@\xa4\xae\xd2*v\xe2_\x96\x9fXl\x82f\x9dT\xec\x80\\\x19LU+\xfeN\xd2\xaf\xb7d\xc9\xdfb _\xdbl:+ZX/j-\x8b;=4Ow\xd0|\xd1\xf1\xa3\xa0\xb8\xcb\x0fQ\x05q\xd5\x19\xa1g\xa3\xe5\x80\x86\x8cpiU.\xd3*\x9eR6\x89\xbd\x03w.\x92\x95\x06\x8dn&\x17\xbd\xbe\x97\xe8\x81\xb3\xbbF\x0d\xf7en\xac5\x07\xe8\x98\x0e&\x1a\xcbv{\x82\xc9,\xe1,l\xf5\xb2\xf0A?u\xb3,\xab\x8c\x8fq a\xbc\xff\xe2\x01*\xc2\x9c\x0f.\xdf\x080,{.O\x0fx,\x88\x1e\xb3\xc0\x93|\xbc\x86\xa8\xed\x1c\xf5\x18}\x92\xf4\x92\x18IK\x1f\xfeL\x04\xde\x996\xcfL\xb2\xba6F\x8en\xda\xe1D\x94BF\x12\x1a\x15\x96\xc6<\n8\xd6Q\xc0\xc5+]yIS\x14\x9b\x8d\xfb\x02\xe2\x86\xc7\xdd \xd9\xd0\xe5\xb87\xe9\xdb\x1b(\xc8\x86L\xf5\x913'n\x97\xef\x88\xdb\x8d\x83\xc0t\x06\x0e\xec\xa4\x88\xdb5g\x84\x92R\xdc.\xb7\"e\x1e\xb7[\x9a6\x08s\xbb\x18\xb3\x01\xdb\xa9\x8ePE\x8c2c\x83\xab\x117\xb8\xac\xf2\xb3\xda\xbe\x8f\x9du\xb7\xc1hl\xcc'\x8a \xd5\xef\xbbd\xcd\xfa\x8c&\xb4)\x02\x18*\xdc\xe9NHB\xb9\x82a\xa9i\xa1\x88\x1267eB\xd2\xf0<\xbe\xb0E\xe9\xfbh\xad\xf3&\xeb\xb0\x82\xe2p\x95\x8e\x84\x9f.\xa34e\xa9Q\xeb\xf9\x82\x89X\xea/\xef\xa35\xb8\xf9\xdc\xf6LF\xa1\xc6\x01\x93\x86)\xc3\x99\xb50\x8f\x01n\x1c\x86\x12\xf3\xa1C\xbf\xad\x19\xbc\xacIR`\xbfm\xde\xa0\xfd\xca\x9a,\xeb\x89;%\xe1\x95\xe8\xa7\x081\xbb\x85\xe1N?\x8b\xce\x89F\xe7\xe2\x95\xb5\x0b\x98@\xc5\xbes6\xe9 \x17\xac'A`\x9a\x04\xfdK\xd4.X\x17_\xb8`\x1d\xd7Sd\x1b\x13\xf5\x17\x90\xb7\x81\x0bs\"\xe8=\xe2\x94\xe1\x81{%i\xed\xfeU\x8e\x07\xbb\x9d^)\x841\x8d\xbb\x13\x8do\\\xdf\xea\xcc\xf1\xc0!\x90\xdc\x826,\x96\xfb\x9aIO\xbd\xd5\x0b\x9d\x87G\xf6]\xbaj\xabu\xb4Y\xa1\xa9\xff=}\x99nag\xcb\xf0\xe37\xaa\xca\xb2\xe8(\x0b5.\xc7\xb3\x1d\x07\n\n\x90\x13?\x8d\x7fc>yh>\xc2\xf8;\xb8\xa3j'+\x9d\x8b\xecV\x83d2\\I'\xf1a\xf4\xdd\xa8\x86\xf9J\xe7\xa7\x0fY\x0d\xabs \xe7\xcb\x18\x9d\xa2\xa4 \xd0K\x1a+\xe22\xa5\xb1\".|\\\x8b\x80Z\x0e\x96\xe1\x08-\xf1\x84N-\xdeK\xfc\xc0,\xde\xcbG\xf0^\xbax/\x9b\xf0\x9e\xe5\xb9\xb5\x0d\xde[\xf5\xab\x9aZ\xe3\xbb\xf3\x06\xf6f\xb4t=\xf7z\x8d\xdd\x19q5l\x9f\x92\x14\xd7\xa16n\x03&?\xee\x83\xe7\xb7w\xc8\x07\x95}Tx\xaeFHb\x9d\x9f\x9e\x99\x98n\x85\xc9:\xb7\x16\xf1|\xdc\xf6\xbd\xac\x9a\x19\xe4\xd1\xc8\x97]A&O\x8f\xb1\xc9\x10&\xa7\x15\x03\x16\xd8l\xce$&'`\x84z\xff\xaf5B\x9d3Y2B\xb9F\xa7c9\xa1'\xd2\xd9<\xe5\x8bJ.\xa3\x8a\x0d\xea1\xcb\xd39\x93\x8d\x96\xa7s&wX\x9eR&\x0b\xcb\xd39\x93\xff\"\xcbS\xca\xa4cy\xaa\xc7\x7f\xb1R\xfc\x17#\x02\x1cX\xac\xc8\x9e\x04\x99\xdc\x9amP\xff&\x95\xe0\xdf\xc1y51\xd4j\xc1\xff\x81\x1c\xf8\xdf$3\xa74\xce\xa7h\x04\xe4\x94\xa4\xff\x83\x02\xf2\xbf\x86\x11>\x12\xaf\xf6\xcf2\xc1h6{\xc4\x88\x86r#\x04xw\x8a0\xa2F\xab\xdan\xeb\xa0cV\xf3l\xdb:\xde\xc2Z\xd6\xeaf/\x98\x10$\xebm\x08\x06\x02\xf3US|D~yv\xa3\x95\xee\xb1\x11\xe6v\x1c\xd7\x04\x969\x83\xfew\x1b s[S\xb3\x11\xf2\xbfi\x83\xfc\xa2\x99\xb11\xda\xe4\xbfc$|\xd4p\xffET\x86sS5\x8b\x0d\xab\x12\x8c\x9d\x06\x86.\x91\xbb,\x0b\x0d6\x87\x9c`>fu\xd0T\xb6\xb8\x9f\xa4M{D\xd4l$c9\x16\x13\xc2\xc7b2y\x8a\x85\xe41\xbb\x90\x1d\xd5\x97l>\x8f\x80\xb4\xffEsK\x85c\xfc\x93v\xa1\xd2*\xfd\x0e\x03\xd1\xd3T\xae\xc3/\xdb\x0b\xaa\x8a\xffv{\x0b*\xbb\xd4l\x16\xedP\xac\x1dmF\xd1\x9a')\xd5J\x82\xf9\x82R\xfdo\x96'\x9f&\xb9\x9f3\xd9,\xb9?\xe9j\x8a\xba\xe4]\x11\xa2+2\xf4\x18\x1d\xff.\xab\x99\x83\xdcJ<>\xac\x88\xc7 X\xbe\x97\x98\xbcyT0.\x9d\xd3\xd0r\xb1QZ\x0c5\x91\x91\xb8f\x92\xba\xb7e\xa6\x0d\x9e\xd8\xea\xa9G\x9b\xca6\xf7\xc9\xeas\x07\xdc\xf8c\xfdF9Q\x94\xee\x10aM\xf3-\xd9\xa4\xcb\xeb\x02\x873\x9b$\x1f\xeaL\x84\x94BG\x1d\x07\x88(\xe7,\xc6\x02\xccD\xb28\x8dYx\xf9\x14\xf3Eq\x95%5\xb8?:\x10\x95\xb1\xdd\xf2\x06\xe3}\xce\xa2\xca!\x19\xda\x15#\x9e\xec\x8a)GY>\xe2\x8a)\xc6\x92\xb34\xf1E\x9f\x8c\xa8\xfad\xca\xd1\x93\xd9\xe3\x0c\xab\xa0C6G\xcc\xf7\xec>\xb5I2\x9dW\x05\xcaq*\x9d5\xc9=\xca\xf6r\x1b\xcdAZ\xad\x86%\xb4%\xad?G<\xea<&\xd2\xf8q\xb8\xc96UE\xa6\xda\xe1\xde\x12bA\xd4kYwl\xda\x04v\xc0\x0e\xfe\xd5\xfd\xc5\xc9#\xc1\xe4\xdb\xad\xb0\xab\xe3\x08`\xb5\xe8\x9e\xa4@\xa5\xa4@%\xad\x9b\x14\xee\xad\x06p\x14~t\x03L\x0d\x94\x18\x13i%\xfe\x1d\xa2\xb7 \x8c4\xec\xd4\x8fr\xcc&\xdb-\x82\xbf\xf4\xd1\xb4[\xdd\x1di\xb7\xa4\x89(T\xc4\x00\xc2\x12\xaa \xf3l\x01}\x18\x1b\xe253\x9c!\x96\xab\xea\x10\xb2dG:\x9c\xcd\xe2\x9c\x1e\xd4\xd6\xd8^\xcd\xd3\xbc\xc2j\xf1\x08\x9cC+-!7\x84\xcf\xe6\xa8\xab\x80U\x96\x8f\xc0\x00\x19\x81\x94\xf4#\x868\xc6\x041Ji\xb4\xdd\"A\x19I\xa8$\x8a\x98|)\x1f\x89 \xc6\xdbm\xab\xd7\xa24.\xdd\x8b\x1f\x04\xe6\xa5=\xde\xa6\xb4\x8b]\x99Hd\xd3\xa2\xbd6\x8b\xf6\xbaa\xd1v$\xc1yR\x02\xb5\xaf\x0c\x9e\xef^\xca\xbcDe-e\xdd\xb2\xbcJn\xcaR\x8e\x95\xeb\x0d\x98]\xf1^\xee\xdcq@\xba\xa3Gw\x9c,\xef8\xdd\xb3\xef\xd2kq_\x1c\x84/i\x12u\xb2D\x12*\x94\x96\x9b\xdf\xcd\x05\xbf\x14J\xe4a\x04.\x97\xac\xeb\x0fN\x8b\xb9\x0eA\xaa\xf4\xd3\xda!\xaa\xefsR\x1a\x041t\xda\xea\xe1\xcc\xa4*s 4f\x13{\xa8\xdf2\x103\xeb&\x06\xe2\x9c+H\xca\x11\x18%\xdd/\xaae\x00(\xcbj\xcb%\xbb\x8e\x96\xfa\xb2\x8e\n\xd3.\xc7\x81Z\xec\xb5\xe9\xac\xbcd\x0e\xd7.\xa8\xc7\xdb(\xf5\"s\xdf\x07$\xb1\xde\\/\xc0\x04\x96w\xe4M\x17Q\xcc;\xde\xc7\x94y\xcfg: \x11{\x9e_-(\x13o\xc6\xa6\xcbH0[m\x0dG\xc2\xa1M/\x96\x90\xca6\x9e\xaai\xe4\xed\xc7\xf2y\xea%\xb7\x9c \x1f\xff\xaf\x92Z\x9bi\\\xa3\xf0\xf3\x14=>_[GP\xda%\x15(\xbe\\R`\x9b\xb11\xd9\x89\x8dI\x10$\x1a\x1b\xbb8{\x14\xfd\xcbs\xbef\xf2\xfb\x8a\xb2w\xa3\x1d\x0e\xfd\xa6VjQ\x94\xe3I\xa3O\xc2\xc6R>\xcd\xd4\xd7\xe0\x9a\xe8\xc7\xe3\xde\xc4\x11\x1e?\xb3\x1b\xe9 r\x94\x82\xacfb\x1eG\xfa({\x9eHF\x0dI!\xa2\x00\x91\xe7\xa3\xac$)\xd2\x97t\xbfn|]@\xeb+';\x07sO\xd3l\xb7\x082\xa1\x15\x81\xaf?VT-\xddn5\x96\xf6\x8d\x1bK\xfb\xab\x13K\xdbj\xe9`Z\xdd\xec\x8f&\xa4\xd6I\xbe`\xb2s\xc1iX\x93\x93\xa2H\x17\x14\x04\xe66$\xcd\x02!H\xb7t+\x0f\xd8\xd1mn)H6\x10\xc9d\xd5\xd7ifXy\xe9tR\x9a\xc2*\xc6j\xc9y\xe4\xc0\x89`\n\x11\x12\x94;\xc1A\x12o\xb7\xbc\x14\xa1\x06Y8t\xdfBC\x0b\x0e\xf1\xc1Te\x10@\xe2\xac `c9!\xbf\xba\xc3\x91\x03\xd5\xb6\x9br\xab\xd6Z8\xb7\x97\xde^\x14 \xb7L\xfa\xad|Vy\xb2\x9d\xa6|\xbfA\xa0\n\x03\xb4](\x98\xe7j\x9e\xecr\xae0}m\xdb\x11dR\x8c\xf9\xb5\x97&+'cH\x01\xf9\xc1\x0fEz\xb5\xb0>P\xf0I\xab?\xb0\x18\x03\x16\x16\xc8\xa5\xd3\\@K0\x14\x0d\xbe\x9fs\xbc\xad[ \n\xfcz[M\xc9Z\xd9\xdc{Nb~\x9b\x18II\xb6y\xee\xa7\\\xd5\x82Il\xb7\xbd}Iio\x1f\x12\x80\x9aC\xb3\xdb\xad~\xe0e\xdbj\x8b\xca\\MkQn\xcf\x98\x9a\xec\x14\xfd\xd2R\xe8\\\x8f\x16\xa9\xab\xbfL\x1d\xa7\xfd\x1b\xf0=\xfcl\xe8\xa0\xc9\xbf\xd0\xa2\xf9\x1b\xee\xd8y\xcd!\xb1T\x9f\n\xf3\xc7\xbaY\xef\x8c]\x1f\xdd\xad'&\xb5\xa6}\xab\xe17\xf1\xcd90\xdfoKJ}\xbf\xad\xb3\x8f\xe5\xc5N\xe1,z^\xac-[\xb4-\x07m\xde\xa2m\x1ev\xa9\xfa\xd1\xdbokH\x85\xeao\xb5\x81\xc3H\xb2j\xdf\xaf\xf5\x8d\x06N\xab\xf5z\xda\nT\x8c\xaf\xe1\xfaF]$\x08\x8c\xc1\x08v\xcdhn!E)m\xfa\xc0q\xb9\x9f\xf7Q\x1d4L\xaa~_\xd1n\x10\x88v;\x93\xf4\xaf:w\x88\xfa\xcbm~\x8c\xbc8\xd8\xb8&>\xa5T{%\x96%\xba\xe5fY\xf9\xd2BO\xa9t\xf9\x07\xd9P\xee\xfeV\xadO[\x94n\x82\xa0\xd5\xb4\xbb\xa7A0um8\xd3\xc6\x14\xe6\x1b\x9d\xc91/\xb5\xc1APJz\x16sO\xd6_\x15C\xcd\xf4E~T\x14\x83\x17p\x10]\xa8M\xd6\x8fi\xbc\xdd\x8e\xb5<\xbd\xa6(\xa1 d/\xb2\x07\xd5\x94\xf0\xd1_\xef\xed\xf5\x95&\x92\x8c\xd7\x13Eb\xed\xf6\x89\xf5o\xd8sI\x9e\xcd'\xd6O\x1c\x13\x0dZ\xb4\xce\x13v\xe1Vq0\xbb\x18N\xa9\x8f\x16Cr\xbc\x9e\x10\xae\xfe\x11{=\xd8\xf4\xc5d\xf2\xbc\xe0s\xea\x06\xdeHLf6\xd5A\\3 \x89zO\x95\xde\xd3\xa4\xc1\xb9IB\x0d\x87\xb7 AK<\x1dRi\x86\xef@\xba\xd1\xf9S3\xf2\x95Z\x87\xf02\xc3\x19.\xd2\xc6\x13\x8ez\x7f\xc4\x84\xa3o1\xceH\xd5\xfaT\n\xcd\xd1\xe2Y\x83\x82\x089\x88\xdeGrA!\x0fF\x10\xb0\xac\xcf:\xecN\xadSJy]\x80\xd4\xb7\"],\xe24\x08\x8ag%\xc7\xd5\xcb\xea\x9b\x84\x83@\xffm.\x93\xb2\xe5<\x08\xd4\xbf\xcd\xdfe\x10()\xb1\xb8\x8e\xd1At\xb8\x99\xaf\x0c\x90FP\x18=\x00}\xa3\x944\x8e\xfe\xf4gLb\xcaQ\xaf\x87ID9\xfa\xf6\x05&j\xae\xff *\x19G\xbd.\xc4\xf5&\xc8\xbf\xfd\x9c\xfa\x98l\xa8\xe8h\x94%k\xba\x1clB\xc5\x04:\xb7\xb1\\$\x1b\xa9\xef\xfb\xdfn#\x07l\x0dp\x8e\xd1\x94\x80\x9a\x93\x06A\x8c6\x84\xe1\xc1t\xcc&t3f\x93\x10\x9e\xd6\xc87\xfb\xdc\x87,$\xeaeV\x9e\x8bY\xc7>\xdf\xe1\xd3\xc9L*f\x8e \xa7\xeb\x98\x84;\xb2QZ\"\xbc>\x9a\xcf\x15RV\x03}\x8b\x803\xea,0s\xe65(z3@\xa0\xadn\x88\x8a\xa1>\xe4\xb3\xd8 \xbf\x08b'\x89\x85Ao\xbf\x9b\x91\x08\xe1\xd2\xcd|\xf5I\xed\x84r\xa6w\x1f\xb937l\x95\x82\x0d\xc5\xfd\xc3\x0de\xae\x14xEY\xa6\xba\xbf2\x84\xf6*7\xe4:\xd9\x9fs\xab\xb2\x8b[\xda9B\x04x\xb9\x97H\x11\xc1\xdbH\xcc\xce\xd8]F\xf7\xa7\xce%fdS\xe0@\xc9\xf2\x88\x1aX\x8f\xb9R\x00\x93)\xceo\x93\xd8\xb8\xad\xd2)\xe14\xea\x14\xbd\x0fr\xe2\xb5b\xab\x04\xa3\xfcgQ\x04\xa3\x0d\xc6a\xa5\xdc\x062\x15+\xa6V\x92\x07\xc5\x0e\xe1\xe1\x0e\\\xdf\xcd\xee\xf2\x98\xe4\xd1\x0f\x8f\xf8\xe5\x99\xa6\x14\xbc:\x1b@\xe6;\xfa\xf0\xd5WZ0\x0f[]\"\x18\x9f1\xa1\xa3\x8aW\xebH@\x18\x04\xb8\xe4Z]\x87\xaa\xdc:\xae\x88\xcet\x11/g\x82q\xb8/J7@\x04Xc\x0d \x1bN\x0f\x88\x81\xc2\xa1\xf0\x06\\G\xb6\xd5\xcf6\xe2\x8b$\xd6\x9b\xe5\xdb\xc6uVe_7\xef\x87\xc5{\x125]\xbf\x05\xf6\xfb\xb4\xf9K\x9c\xb3\x9f(\x08\xd2\x81\xc3\xf2\xc1\x12`\xdcr\"\xf4\x0e\x13\xc8\xa6\xb3\x81\x1c<\xba;\xb0H\xe8A\xd8\xeb@\xd3h\xc5<\x19\xaf\x98\x17\xf3\x7f\xf8m\x8e\xc3h\xbbM\xf5\xfc\x9c\xb6\xed}H\xe0\xc1\xfd\x87\xdfN\xda\xfe?\x94x\xae\x86\xa5~;\x03W_\x94\x80\xb2T\x92\x9bL\xd4W\xde\xf6\xff\xe1\\\x93\xf4\x0f;\xaf\x7ft|\x9c\xdd*^\xbe\xbe\xb8_\xb3\x94>\xd8\x91\x86\x9f\xedb~\xce\xc8mi\xed};E\xffK\xba-~h\xd69\x8b\x0b*Z\xad\xd26\xcf\xf5\x81\x9ab\xf9\x98\xf2Zw\"\x0d\xac\x0f)lZ\xc2/I\xad\xb9\x08\xf9\xe2\xcfZ\x88|\xf1M\xcf\xf1u\xc56\xa2\x16D\xa0i\xb2\xa4\x8e\x0e\xb0\x8c\xd2\x05K\x9d7\xd1F.\x9c\x9f\x8b$\x95\xceO5\xa5\xcaW\x1d{S\xbc\x8aR\xb7~\xca\"1u_\xfc\xbaa\xe2\xdem1\x92\x8bJ\x13\xea\x95\xdb\xa2`sM\x83e\x07\x92g\xd3+\x92\xabg\xcd\xbe\xfd+H\x1bAZ]l\xcbAZ\x86\xbc\x96\xa6\"\xcdu\xd9\xa0^\xdb\xd04\x89C\x99\xe9\xebrVQ9> \xe9\xc4\xa9QnLd\xef\x15bE\xf41sm\xdc\xb1>\xc4\xbb\x8a$\xc2a\xdc)\x9d\x16YE6Q8\x8c\xf7\xa3X\xd2\xd8\x08\xd6\xfb\x7fG\xe3h\xef\xb7\xee\xde\x9f;\xed\xbdI;\xc4\xfb1I\xe9~8\xee\xee\xfdy\xf2\xf5W\xfbd\xa9\x8a\xfc\xb2\xff\xcb\xfe\x00\x0dZ\xbf\xec\xe3\xf1\xdf\x7f\x19\xfc\x92N\xbe\xc6\xe8\x97\xc1\xf8\xef\xf04\xf8j\x9fL\xe9\xd8\x7f\xf0\x89\x9f\xf9\xc4\xdf\xfa\xc4\xff\xe5\x17\x9f\xf8\x7f\xf7\x89\xff\x0f\x7fb\xd3j\x8e\xfd\x97>\xf1_\xf9\xe4\xb9\xff\\} \xbe\xa7J\n\xf5\x0fW\xffH\x7f\x82\xc9\x86\x8e\xfd\xe7E\xa5)&k:\xf6\xff\xc3'\xfe\xbeO\xfc\x81O\xfc\xbeO\xfc?\x14%6\x98\xcc\xe98\xff\xfa\x07\x7fBft\xff\xef\xe3\xb6\x9e\xd7p\xefo\x97{\x93\x87.\xf9\xd37\xd9W\xfbd\x01Sn\xf8\x86Q\xe7k\xfc\xd5>Y\xd1\x87O\xd1M\xa4\x89\xbf\"\xdd\xbe\xf3\xd3W4\x9c\\\x7f\xb9\xc8=}XH\xb9V\x1f\xd5\xdfT=\xcc\xf5\xef\xebd\xbd\xd0\xfca\x1e\xeb\x189\x1f\x8a\xfa\xf9cj\x9e\xe7\xf9[S\xc7\xbcV\xd5t77\xb01_8\x1b\xf3\xca\x91EY\x10(\x142\x88\x06\xd7\x1d\x95P\xa6,\x1fh'|l\xb1K\xe8}a\x9a#\"s\x91Jo\x99*\x01\xd1\xba\xa5\x83\xb3\x8eF\xa8H\xab!\xe3\x1f\"\x11\xad\x98d\xc2{\xbe\x11\xcb\xe7\xdej\x93B\xbe\xb5\xc8\xd3i\xfb \xb0\x8c\x82\x9ck\xc18\x86\xbb,\xb42\xef\x0f|LR\nW\x1c\xc4A\x10\xbft>\xfd\xc1\xc7\x03\x7f\xe0\x87\xfe\x1f|\x90j\xd2\xf52\x96(\xc5\xfd\xe9\xb8;\xa1\xea\x9f\xfc \xdb\xfe/\xbf\xec_+\xbc\xd2=\\QF\xa7:|;\x05\xc9\xfa\x8a^u\xa4\x88W\x08\x93\x16\x0f\x02}\xa3\x99nOuSJ\xad\xa0\xa4Yv\xc7\xa6\xe8\n\xaa\xde\x95\xf2$\x01\xf1\xb9r(\xcfU\x85N\xdd\x8d{\x13r7~1\x19 \x97\xc2\xa97.\x85\x93\x83\x1b\xb3*N\xa9N\xba\xb9J\xa5@=\x9b\xbe\xa3\xe1u\x9e\x02P\xb7\xeb\xfbn\xab\x0f\x99\x89\xceW\xf3\xb8\xa5\x91;\x8f[=\xbb\xcf\x14\xdd\xd2\xdbqw\x82;29In\x998\x88R\xb8\xd4\xa3\xc4\x03>\x13\x052\xd3\xf1\xad\x85O\x16\xcf\x11\xdfno\xb7\xdb\xab\xce\n\xb8\xdc\xfe\xdf\x15E\x19\xff\xfd/\xbf\xecO\xda\x7f1\x7f\xf7M\x84\xc2\x88\xfa\xfb\xfbJV\xc9[\xea\x92\x17\xb8\xdf\x1am\xb7\xb7Ap=\xbe\x9dl\xb7\xc8\xe9\xe7\x05.\xb3\x9dV\x17zl\xa9\x92A\x80t\xb5\xd6\xfd\xf8v\x82\x0b\xf5\xff\x88\\\x92s\xba\xd7#\x17\xb4\xdb\xbfxi]_\xfd\x0b\xa5\xff\x03^\xa1O\xf4*\xc7\xaa\xf9\xf8b\x82\x15 \x06\xab\xd2\xf9v\xfb\xe9\xe5\xb9\xfayN?\xe1L\x17\xbf\xa4\xfa\xdb\xe0\xaa\xe3\xa4\x9cC\xfe_|\x1c\xd6^\x91sh\xedH\xcd\xc2$\xc7\xbc\xc4\x1ax\xf0\xf3\xb2mR\xc9j\xd69c\xd3d\xc6>\x9e\x1d\x1f$\xabu\xc2\x19\x97\xe8\x08c\x98\x00X&\xf4$\xd6\xa5I\xa8Y~\xea\xd7\xa7\xb2~|*\xea\x1d\xfc\xba\xb2\xcb\xe7\xf0\xecb\xb4\xe7\xeeh\xcfm|\x98B\xcdwI*\x11\xae\xb0\xf2\xd2\xaf\xed\xd6\xd7\xf2\xc5\x90\xfac\x10J\xdd\xaf\xe3\xee$\x08\xfcI\xfd}\xe9W\x9e\x84\x14\xe2[ZCl\x17\xf6\xa0\\\xcbl\xd7\xfd_:\xfb\x98\x1cS\x05)r\x90'\x1c\xbcxy\\\x00\xeb\x03=\x18_@s\x1f\x82\xa0\xf5\xc1\xa0\xea\xccA\x9a3\xb5qNi\x97\x9c\xd0\x0f\x16\xd6\xa7/O\xfa\xa7\xed6\xfe\xd0\x99.\"q\x90\xcc\xd8P\xa2S\xfc\xaa\xf7\xe2?\x07gm\xea\xdf\xf9\xe1Y\x9b~\x18\x9f\xea\x81\x9e9\xcd\xaa&\xdf\xd3\x83\x1c\xa6\x17\x98\x1c\xe6?/\x14\x06\xbc\xa1v\x18\x0b\xdc\x7f\x13\x04\xe8\xbd\xf6\x13\xbf\x19\xf7&\x98\x1cvL&U\xf4f\xfcb\x82\xd5\x0b=\xa8 @W\xd4\xdf\xf7\xdb\x87\xe60J\xc7\xc7\xed\xab\xea\x9a\xbc/>\xea\xabG\xb3,k\x82\xf1\xab\x17\xdf~;(W\xf5\xfd\xf0\x91\xf5-\x93\x082\xb4\x87\x01\xf2\xd2\xa2#\x93\xe1\xf9\xc1\xf1q\xf9\xbd1\\\xfef\x82\n\x13!\x15\x19o\xe7\xbfB\xdf'\x1f\x1bP\xa9\xc0\xcf\x8f\xed\xdf\n\"\xdb.\x8a\x92\xa1%\x80;Fli%iD\xb2\x17X1\x89\x16\xa5W\x80\x9c\x06\xb8WX\xd3\x99\xd5\xf8\xf3\x04\x9b]H\x8e\xe9&\xdf\x85.r\xbd\xa6\x1b\x83\\\xb0#\x8b\xed\xf8\xda \xc2W\x94\xf1\xda&\x7f\x8d\xfb_QJ_\x07\x01\xfa\x8a\xb2t\x1a\xad\x99\xaa\xa0\xb7\x1e \xf6ks\xde\xe8+s\xd1\xce\x8fN\xd3\x8aGi\x02\xf0c>}%H\xe7\x94\xf3Gw\x13w\xc9\x8ff\x01~u\xdb\x18h\xfb.4\xf3k\x99;\xe5\xed\xfc\x8a]vR\xbcn\xeb\xeb/\x90\xf3\xb1\xc4\xbf\xe0\x15.\x0f\xe2\xd7'\xb1\xab+[\"\xe7\xa0W\x98\xdc\x8f?O\xccQu\xbb\x82A\xd0*\x15\xabUS\xcc\xbf\xcc\x8bM\x80\xac\xee\x1a?Xl\xcc\xbf\x1a\xda\xf5\x8e:\xc5\n4\x04N\xff[\xfb\x9d{&V\xb3|x\xb2\x12\xba\xe6\xb7\xa4.\xa7\xd7\x02_u=\xc5\x05\xa0\x13\xb8\x9f\x9a\"\xd6\x84-\x0c\xe3B\xb4\xf9\x8fo\x86\xfb1\xf1C\x1f\x13\xd6\xa6\x8a\x0b\xf5o\x9c\xa3:\x86c\xab6 \xafO\xd1\xc6\xb9+|\x81\xdfp/|D\xdd\xdd6\x88)k\xe7\xbf\xc2\n\xdc\x91\xfa\xaayLyO\xe5\x98\x15\xfa\xb8LVB\x7f\xec\xb7Ko\xda\xfe$_\x9eD(\xb4\x88\xdb\xb4D\x13\xb0\x8bz%q\xd7\xc1\xb0\xb2\x8b\xc9\xf9P\xd0\xcb\x88\xdet\xb4\xf4\x19\xcf\xefK\xd8i\xe2\xd3J\xab\x1d\x05\x81?\xf0\xdb\x11,\x89]\xe9 \xf0CE$\xa4\xc5\xff\xbd\x9e\xe2\xab\x12F\\\x96Q\xb6[\xd4\x92\xdb\xed\xfdXN\xb0=\xda1@1\x08>m\x14\xabf\xe1\x04\xb1\xa6:\x1cX\xcbP\xa2.\xd6\x19,\xf6\xfd6\xc78\x8c\xb7[U\xc7\x87,z\xfe\x1f|H\xcf\xeb\x16\x15\xd4\xff\x83\xdf\x16\x98\xa40\xde\x16\xa5i\xe9{J\xd5,RLd;n#Ny\x81>\xe3\xc1\x1f&\xfb\xd7\xa4\xd1q\xd0\x84y\x19\xc6\xb8\x8dRZd\x89P\xf2\xb7\xff\x1f/\xbe\xf11n\x8b2\xaa\xd7\xd5\xec\x92\x87\xbc\xa2 \x17\x9a3\xce\xf7Oc{5\x05\x1c4\x92\xb2Bb,nZ\xd3\x91\xb9\x8a\xa3\xdb'\x8c\xca\xac|QLL\x04\xad\"\x0f&\x11\xed\xf6\xa3<\xb7s?\xb2T>\xa5b\x1cM\xfa|\x9cN\x00a\xc6\xe9\x04\x84_Mw\xc1K\xb4 \xbe\x0fz\x84\"\n\xc5\xd17m\x8f(\xe8\x03X\xc2\x99\xc5\x97 h\xb1|\xcfb\xe7Vdwh\x0c\x93)\xed\xf6\xa7/\x97v\\S;\xae\x0d]\x8e\xa7\x93\xbeo\x9b\xf0u\x88\x1d\xe2\xe3\xcd\x84\xb2\xf1\xa6pM\xdd\x8fy\xde\xd1\x04\xae\xe6,()w\xc9(7\x16\x95\n)m\x98I\x063\xb1\x8d\x06A\xf1\x0c\xb8]LK1\xd3\xfbq\xf1yR\xcct]\x9d\xe9\x9cv\xfb\xf3B\xe2\x9d\xdb\x99\xce\xe8z\xda\xf0Pdk\xe93\xebG\xd8\x99\xa2\x01\xcb\xc8\x12\x19\x82\x86\xb4\xd5Bv\xc1\xf5\xdfB \xfb\x8b\x8f_uq\xfe\xde\xe0\xd8_|\xb0\x16\x98\xbd>\xcc\xdb2\x8d;\xdd\x0d\x0bbVl\xcd/@\xcc\xce\x08\x15\xfb\x00k1\xce\xbc5\x93\xdbn-\xc7qJ\x0e\x8a\xc7\xd0\xf7q;/>\xb0\x0f\xea\xf5N\xa6\xd4\x1a\x95\xc3\xaa=\x87:\x9a\x9d\x917\x07]\x83\xe0e[\xb6\x0c\xd0l\xa1\x1a\xff\xb6<\xe1R\xc1\x1f\x94\x9b=H\\H\xce\xa9Y\x01K\x1b\xb7[;\x90W 1\xfa\x1d\xdf\\\xd4\xdd\xd1O\xd8`\xe8%Q*\xe6'j\x8b\xf7?\xbd\xa2\xdd\xfe\xa7\xbd=\xac\xab\xa0K:\x1a\x7f\x9a\xe0\xc1\xc8\xde\xf5\xf1\x89\xf4ph\x9b\x19\xa0\xd2{\xa2\x94\xd3\xf0\"\x08\xaa\xaf\xf7\xf6t\\\xc1m\x10\xb4>\x83f\xdb\xbf\xd8\xdb\xeb_\xe0\x82\x14\xa8&q\xbfu\xebl\xc4\xedv\xa4M7\xfb\xf6MA\x12\xd5\x0c]6tnE\xdbQ\xc1\x84JR\xf3H\xdb9|\xa3\xb5\x0c\xc9\x01}RG\xfd\n\xa93Hz0\xf0\xfd\xd0Bm\x90\xef\x87\xd0\xf7\xff\xc7\xb6\x84\xdd\x13\xe8\x96\xde\x16\xac!\xc7\xc0 h\x1d\xa8\x9f.\x94\xf2\x01;x\xe9\x00,Du|\xcdQ\x12\xffO\xed,G\x02P\xd32\x92\xc0\xef\xe6\xc8\xa4\xe6]x\xa7@\xd9\xac\x0d\x03)\x974\xd5\x86j\x86\xfb\xc0X@\xf9B\x92J\xc5\x15rE_q \xe9\xd8\xc2\x89\xa2\xfc\xb9]97\xf1\xe4\xa7-0a5[\x11\xab\xc6\xf8\xd9H\xa4\x87\xac\x12\xf8\xb53\x925\xa70\xc5A\x82GB\xa0\xbf\xd5.\xd7^\xcf\xc4@\xbf\xf8/\x1d\x04\xdd\xfb\x13\xee\xccw\xc40k\xc5\xc6\x06Ao\xb7\xc8>\xd2\x87\x0c\xf7\x13$!\xb49R\x7f\x89\xc9H\x14wt\n\xd3/\xf9\x82yG \x89KY\x05L\x0c\xe29\xf8\xc0!\n\xf4|\xc1\x98l\x0cI|\xcf\x9c\xa8\xc5\xa2\xecA\xc2\xd3\xcd\x8a\x89\xc6:?\xed\xaa\"\xd9]s/\x7fm\xac\xf1>\xe2\xd1\xf5\x8e>\xb8;\xae\x8b\x05[\xb1G\x87t\xd1T|\xe7p\xcek\xa5?\x88\xe4&\x9e\xedh\xfc\x93[\xfc\xf2\xf2\xc3\xd9\xf1\x0f\xc3\x8b\xa3\xcb\xcb\xc6\xc2\xbf\xb9\x85\xf5I\xd7\xb7\x10\xe5o\x02\xb0\x1b\xaa\x9c\x96\xaa\xa4ic\xa1\x8d[Hi\xcd\xf7K6\xcb\xb5\xfc\xc6*wN\x8d\xcf\xec~.\xa2\x15kn\xfc\xc4m|\x932\x80Ic\xc97nI\x13\x1b\xdaX\xf0\xa3[\xf06\x96\x8b\xddm\x1e27.\xf6O\x7f\xac\x05\xc6\xea\xfd\xf5m\x0fN\x19t8\x8a\xcc1\x83o\xe1\x98\x81z\xf8\x06\x93\x0d\xe5\xe8\xcf\x7f\xc6d\xad\xfe~\xab\xb4PUt\xed\xb8_gE\x18\xea\xec\xff\xdc0T\xad\xcb\x96)\x98s\xd3\x1f\x1bw'\x13\"h\x97$\xf91\xb5\xbex\x99\xf4E\x9b\xf6\xb0\xbd\xa3~,&\x84\x8dE\xbb\xe7\\_\x9f5\x06\x15z6R\xa58(\xea\x9e\xe7\xcd\x8f!\xea\xe9\x82k\x08\x15\x07d\x07\xc5#\xb2\x91b\x0d\xe7hm\x04\x84b\xb5yd\xab*1\x9aCx+\xb9\xb6\xeb5\x17\x8c\xfd\xc6\x90\x92\xd8\xef+\xef\x14)\xcd\xd7\xfa\xc6\x89\xbe\xb1/\xdd\x08\x9b\xbc\xe0\x95k=k\n\xb3\xdbn\xfdb\x9b\x15\xf5\xee\xcag\x80\xec\xad\xf6E\x17:\xb8\xbe\xd8\xa2\xc73\xe3\xc3\xcdO1\x81\xbd\xb8\xc3\xf8M\xe7\xechxpq9\xfc\xf0\xe1\xf2\xfc\xe0rxqq\xa6:W\x1f\xccO%d\xce\"\x19\xed\xe96}\xf2\x996\x9dH\xb5'O\xfcw\x17\xefO\x8e\x96La\x8c\x1fs\xf3\x9e\x8c\xa8\x7f\xa5\x8f\xbe:\xe7\xd6\x0e.\x0f\x8f\xcf\x87\xafO\x8e.\xcf?\x1c\x1d\x1d\xfe\x1c\x04\xb5W\xdb\xed\x97\x86\\-\x9f\x0f\xbe\xfc\x01\xf2\xe7\x90#\xfa\x90\x91\xcb\x86\x138\xbc\xc3\xa7N\x10\xdeyy/V\xf7!qo\x8b\x96\xafz\x03\xb9\xd7\x0b\xbb\x98\x08\xda\xeb\x8b\x97\xf9\x8d\xd1{\xbd\xca\xcd\x96\xb5@\xf8!\xf7 \x91\x83\x97L!\x00t\xd6\xf1\xce\x19\xf3t\xb0\xc7\xfe\xfeu,\x17\x9b\xab\xce4Y\xedk\xe8\xefM\xed\x92\xa6\x0do\xae\x96\xc9\xd5\xfe*J%\x13\xfb\xebh\xfa9\xfa\xff\xb9{\xfb\xed\xb6mlq\xf4\xff\xf3\x14\x12'C\x03&\xf4\xe9\x8f$\x94`\x9d4M\xa69\xa7Mr\xeat\xe67#)\x1eZ\x82d\xd6\x14\xa8\x92\x90\x13\xd7\xe4\xac\xfb4\xf7\xc1\xee\x93\xdc\x85\x0d\x80\x04)\xcaI\xdb3\xeb\xaeu\xdb\x15\x99\x1f \xb0\x01ll\xec\xbd\xb1?\xd6\xac\xa9X\x9a,z;\x11Fi\x0f\xdaN\xbb\x9b\xe5\x9fT\x0e\xb6U\x9c\xb46q\xc2Z!W\xb0\xcfB\x8e.\x02\xde^\x1dXH&\xaa\xaeRg\xeaqa>\xa4nG\xe5L\x15\xf5\xa6\x05#&g\xacO\x12k\xd6\xc6\xc9\x88\x9bm..&-\x86\xec\xc2\x89\x04\x83R\xcaL\x1bq~\x89\x06O!j\x94\x02L\xd5B\xfb\xb9\xc1\x8d\x82\xe2\x97\xb9)\xd4\xa0\xfd\xb8\x8b\xea\x16}\xa5\xede\xab\xec\xa5U\x1c\x98e\xbb\x1d\xcf#\xed\xfe\x9e\x89\xe6 \xcf\x89 \xf0_kE[G\xaa\x8a\xcb\x12\xa8Zm\xa7#+X\xb3:\x8c\x95\xf9Su,\xd2T\x16J\xa7l^\x8d\xdf\xa1\"\x81\xec\xed\x0d\xf0\x85\x9c\xd0Iq\xe5;\x8e\x8e#\xf9\xe2w \xce\x0dD][\xb2\x94\n{\x1d\xfe\xf1\xc9\x80<\x99\xd4\xaa\x07\x9c:\xfa\x86\xff9\x84\xa3\xa2\x08\xc6\x05PY\xe3b\x03_]8\x9c$\xca\x05\xadar\x8b9\xfd\xc2\x94\x9a\x8aU\xf4,\xb5\x8e*`|\xe5\x0c\x9b\xc53\xb6JO*\x15u\xa5p\x012\x06\xb7\xe6\xee\xe5\xe1\xb9S\x87g\x12K \x8d\xee\x1f\x9e\x99\x02\xc4\xea\xec\xa0\xb2\x1d\xa38b\xa4O\xc4\xfe\xa0\xe2/\x0df\xad\x92\xc1\x1f\x1e\xbbD\xaf\x91r\xbc\xde|a\xbc\xd6I\xbc\xdb^\x86\xbf2\x15\xa1\xf2\xa7\x90\x8b\x93\xa1\xda\xf1\xcf\x06\xc3*\xb59\x1b\x0c\xd5=\xf8|>>\xa6\xa0A\xfa\x8b\xac\xfc\xc0v\xd6\x97\x14q\xc4\xc7\x0c\xc8\xa0\xd0\xe6*%8\x92 \x9a\xfa\xe4@\x94\xd3TW.\xc8\x15tQ\xff\xdc(4,\xc6\xbdV\x02\x92\xd5jF'\xa6\xc9\x88]\xd0x\x84Q<\x1e\xd3\x01\x1e\xf7]\xf7\x12\x0d\xce\x89\xe3xf\xf9?2T\xb1\x1e(\xab}\xc8\xc0S\x1d\xbf\xb8\xd8#B\x9a\x8c\xc2q<\ne\xd7k\xfd\x0e\xe7\xb4_\x1c\xc3\xea\xa8\x8c\xf6x\"\xe6\x81\x98\xd6'Q\xb9\x9d\xa4\xe3h\x94\x9a\xcaD\xb0\xb6\xa9y@\xc44-uBVSl\xeey$\xf0<@T\x88\x81\xbc?c*\x03r\xd9\x8b\n\x8d\xac\xd4e,)\xaa\xc0BP6O\xd4\x87p\xca\xe6\xb4?*#\xf5\xf3Q\x04k\x84mR\x89\"\x92`\xc9\x9d\x17;!\x9c\xa6%JI\x11@\xcc\xca'\xf4\x96\xfc\x8d>\x84\xa9Rg\xfa\xed[\xb2K\xd9\xcb\xcb\xcbw?\xbc\x81X\"a\xcc\xfd\xf6\xbb\x9c\xfcrh/\xa9E\x0bVVZ\x7f\xb3\\>\x957\xa8\xb1\xb4\xee\xaa\xb8\x03)]\xa2\x87\x9c\xfc\x8d<\xe4\x05\xbf\xb9\xae\x04\xde.\xa2&KJ\xda\xb6?\xed\x1ah]\xf7\xd6u\x9f\x80\x85`{@\x9a\xb7\x9a\x82\x87\x82C\xb7K\x16\xb1\x85\x88\x93\x17Q\x84^\xe3\xaf\xe1\xcbc\xd75\x82\x8e\x94\x8c\xe4@\xdbB\x94\xeb\xa2o\x10#1&qw\x1b$\x8c\x03\x87\xe6\xba\xf6]\x85_\x8a1\xceseK\x83\xf3\x12\x1b\xdf4\x06\x06\xff^\xae\xd2\xd1#{m\xc2\x8a8 \x7f\x0b\xc5\xcd;=\xb6EU\x96\xfa\x9d}j1\x04\x83n\x8f\xa5\x1c\x7fQ\x8c\xbf5\xfa\xb0-\x04Q\x14/\x02\xc1\xfer\xf9F\xfbN4A\xa9?\x96T\x1d\x95\xd7Y\xd6\xc7\xde@S\xee\x0f\xc1\xc1p\xf2\"X\x1b+Y\xc9Z \xbd\xbb\x18\xf8`\x0d\xea\xf9\x86\xb9\xdaCO\xd0\xc4\xe9\xa0\x9e\x8cr\xf0\xc8{\x89b\xec'p\xf9\xb3\xbc\x04U\x86\xdc\xa9\xe5\xc5\x1bISu\xe6\x03\xe31(\xe1\xbc RI\x14^\xc7\xd5\xd9\xb0\xd8\xc1rx4i\xd66\x97\xea\x91\x0e\xdd\x0e\x99)\xb4wTIj\xf6\xf9\x96\xef\x0b\x89\xc8\xae\x11\xefW\x08INt\xa0\xf6\xbb\xc2<\xeb\x12\"5\xabwv5&\xeew\xfe\x18\xe3$\x97,|S\xa1\x86\xacD\x85&r\x02\x00\xf3\x92_x\x0b\xabt\x8f\xb1\xfd\xd2\xf8\xe8|\x0bE5u\xe8\x0csj@(y\x13\x80@CXB\xa0]\xbb\xe0A\x0d\xcf\n\xacR\xc4H\x16{$\xbbA3\x01)i\xab\xa5x! u\x1cI\xf9G\xf1\x98\x97\xe4>\xa4?\xe8@\x13\x85\x80\x1a\x9a\x8d\x80Y\xa3\x10J\x1e\xaedi\xea\xdf\x04\xae\xdb\x07\x8bE\x9b\xeb\x8a\xe8'\xcf\xe9\xae\x1d/\xf6\x8e`\xd3<\xf2B\xefHn\xb1\x0b\xc9\x00\xd9\x1f\x07\xcd\xbe\xc0\x85U{\xdfu\xd1\xc2\xa3\xcc\x93{f.\xb7\x08\x8f:\x8e\x97z\x91w\xf4\xb00R\xd7\x91\xb7\xf0\x8e\x9c\xbc\xd8\xef\x8e\xf2\"\x16k\xa2)\x98\xe6h\xbe{d\xff4\xa4u\x84\x19=99f\x1f\x85\xed-\xd0\xe9\x94qNYN\xfe\xdaD^\xbeCg'\xcf\x06\xc4P\xc2\xbf\xd3\xde\xc7Yz<\xeb\xcdz\xdd\xe3'\xbd\xf5\xc6\x8a\x12Y\xb0\x84jQ\xd3rW\x9a\xdc\xfb\x0c2A\x19\xba\x12\x94/\xc3\xc9\xbd\x1f\x92\x94\xc6\xddm\xb4[\x87<%\x8b\xf2e:Y\xfb)\xd9\xc1\x92\x8b\xba\x01\n\xc0)oNVU\xd1\xc6\x80 t\x10\x1e\x81Er\xff\xc0\x90\xf0\x9c\xdc\xb1<\\\x8b!,\xbe\xd6\x91*I@R\x12\x91\x05\xd9\x91-~\xd0\xc1\x1e\xb9\n\xf6\xd8\x1a\xf8:*\xdf\xceu\xcfO\xa91v\xd5\x83\xd8\xb7\")$\x9e3\x02\xfb8\xe5\xd7\x00\xd1\x10[C\xf3\xf9\xa2\xd0\xf9I\x065;\xeeU\x8a\x9d\xf8\xba\xd9\x85i\xb6?\xf4\xd5\xc5`\xe8\x17M\xc4\xd3\xfe\xdcK\xa0\x0d\x1d\n\xc7/j\x85V\xb6\x13]\xb9\xef@\xd7S\xd6\x19\xfaI\xc9?e\xc7\xbd\xdc)\xfd\xd5\x85dD\xaa\x98\xbaU,\x8a\xca\x9eR\xa1\xc5\xe0\xdcm\x9a\x93\x88\x0c\xd6\xf9qaC\x9f\xe0\xc2\x82\x81\xc3\x99\xbfz\x91t\nq/\x81\xa8\x82\x13\xa7\xebx\xc2g\xb9\x1d\xc5\x83\xa9\x89\xb0\xb8\x99\x00\xec\xa3\x1d\xd71\xb6\xd0EF\x1a\xf4w\xe28\x98D4v\xddp\x12zN\x0b\x9c\xb2[\x0f-\xb9\x90\x9cV\xee\xf8e\xc6B\x1a\x10Nc\x92Tx\xe1\xd9\x0c\x1c\xb3g\xb3k\x878k\x07\x93\x1d\n\xb3\xac\x1dO\x1c\xc7\x8fIT\x9cU\xed\xe4\x96\x87\xa6\xa5[(\x99VHy\x8c\x1f\x86\x8a\xf1\x8a\x0b=\x85\x9c\xa3\x8a\xe3\x15\xc7\xb0\xea\xe5s\x1a\xdb\x8e\x80 Y\x82\xdb6\xa9 \x1f\x1d\xa8\xd3HX[\xd3\x15\xc0}\x91\xe7s\x8c\xc9\x8d\xb2\xed]\x18-\xc4\xa2\x9b\xb0\xe5nQ\x89\xb9bo\x9e\xfa\xbc\xe7\x12\x0d\xce0\xf9N\xbeS\xe9\x03sL\xe4\n\xc7\xf6Y\x96\xe3\x90\x1bP2\xfc\x0f\x04\xfeP\n0}\xe8\x8c0\xf9?\xf4\x7f\xba\xe6\xc4\x9a\xfcwc\x91\xff\xa2\xe8\xbf\xcb2r\xe0\x7f\xc1\xe4\x1f\xf4/v\x08i\xc6J\xea_ &\xa3j\xc1\xe8\x7fp\x96\xfdWy*%\xbeT\xfe\xbfq\x96\xfd\xa3,\xcf-\xbdbC0\x1bu\x88\x15\xa6\xef\x15\xd9\x81\x0df\xda\x07\xe1S\xf2\xfe\x01e\x108\xa3\xf2\xe9\x0f\x10\x05\xa2\x1e\x03D\xd0\xa0 \xa3Jk:\x91;\x17\\\xf9LsG\xc0\x87\x1f\xe2\x19\xd1\x83*T\x94\xce\xc1\x10q\x19\xa6\xc1uT\xe3\xb8\xbePQ\x83\x001\x80\x90a9&\xd3\x03U\x12\x0d,1\xcd\xcf\xa5\xdc\xf3x\xc7u\x87\xff\x82\x1e4Q\xf7\x1f\xb6 [\x85\x9f\xfdv\xd1\xca_\x19_\xc6\xc9{x\xcc\xd2\x9ch\n\xef\xf3\x1cW\xa0\xa9\x96#\xbc<\xb8\xb5aP\x11X\xaaP\xa4\x08#\x00\xbf2\x95Y\x96\xecM\xafj\xb0\xf2l\xae\x82\xbbTO\x83\xfe\xa7k\xec%\x8c\xb5J\x947\x14\xfb\xef\xbdb\x8b\x9c\x94\xf14\xf4\xe1T\xc2\x0e\x0bnF\xcf,\xf7\xf2\x91\xd6w\xec\xf9\x11\xb0\n_\x8cx7\\\x12\x95\x1a\x04g\x19\xab0\x88\xd6;\xf2\x0f}\xbe\xaeH)\xe1\xa5\x8b\xc9\x8bd-e\x1f\xadM<\xcc\x8e]\xa2\xc1\x90h\x82\xa0\x1b4_)\xd3$u-Y\xa1t\xd1),0:\x8e\xa7\xdfTZ\xa4\xa2)#\xd3\x9a\x89*s\xbe\xcf\xeak\x1e'f\xb4\x87\xa6/:\xff\x98\xe3\xde\x9a\x84\x8c\xf6>n\xd2N\xaf\xa4%\x01\xb3\xd5\xb3\x05}\x8d\x19q:O\x06N\xcd{\xb8x\x1f\xca\xf7\x9b\xb4\xe3\xa8\xe9J\x1b%,\x0e\x81\xa9Y\x96\xb5\xc1\x11\xdbX\xed\xe6\xc4R\x0e\xeb\x184\xfa pZ\x0b\x92\xf5H\xd4@\xed\xbd\x9e2$\x05^eK\xbb\xd1\xd7f\xa7\x85\xfdX\xcfhBTI\xc2%\xe7\x08\x8ckSi\x140\xc4\xb1\xe7\xf8\x0e\x81\xd2\xc0\x97$\xa3\xda\xcb\x96\xe3\xa1\x98r\xa2\x83p\xa3\x10\xa4n\x9ce\xfbg\xe9\xa1\xeev(7H\x87C\xe8\xea\xf2p>T\n\xbf0\xcb\xe2V\xc8[\x8bn0\xd1\xb8\x13b\xad\x7f\xf1C\xcf\xd9~v0\xb0Hj\xb8cR:\xfd\x83A\xcdd\xca\xe5&^\x86XH\xc8\xd4\xc9\x9d9\xf6\x13\x8bUX\xd8iw\xeb\x99\xe5\xaa\xea\xa9\xe9\\+\xa5XU)E\x07\x18\x9c\x18PBem\xd3p\x0e\x15b\xd7\xadU\x98\xe0Il\x0f\x7fL\x12\xec\xeb\xf0\xc9Iio\x1c\x1b\xf4N%\x1e\xca!\x82\x94\xf4\x92\xcdi\xb0\x95\xf0\xef\xe0\xa5\xe9P1\x8c(\xa5rY\xa7\xe5\x12q]\xeb\xa6\x1b\xa6\x10\x0b\xaf\xa8)\xcb\xdab\xc2|\xd9\x03\x10C \xc7~%\xd0B\xc2&|\x82\x98&,\x88k]\x15\x88\x9b\x18\xfb\xcc\xdfH@\xe0t\xd0\xb7\x8dY\x14\xbbe\x05gc\xe8\xdfb\xae\xa0\x07\xed\x0e\xe2\xdb\x02,\x0b\x86n\xd0\x9aLY\x81\x02\x1cc\xecC\xf0\xb2\x82\xbfR\xf1\x10\xcc\xdd\xbeu\xca\xb4?W\xc3r\x03\xb2\xb8\x8e \xd7\xb4\xb6\x9b\xccg\xcaX\xe2My\x11\\\xb7]G\xb9\x9c\xac\x1a\xeb\xbe\xba\x82\xa9\xbb\xbar\xb4\x89\x91\x1d\xf6[?*&\x17\x1eXH\xbedU\xe3L6\xe5\xf3\xd1V\xce\xb3\xebn\x99\xc4\xcb\x1b\xc9>\n\xec\xcb7T\x94\x93u\xf3o\x9a\xac\xf2\xc4\x004\xae\xa3x\x1c\x16Z\xd7R\xe3\x1aNc8N\xdf2\x14\xe0\xc29>\x95T!\xc0+\x86R\xec\xba\xd0\xb7`\x9a\xceIj\xd9\x84\xc9r\x1bI\xe7\x03\x8c\x96\xb8\xb7\x0e\xc9\xba\x91\x1ck\xab\xaaU\x12o^j1\x0c1\x0f\xb1\x8b\xe1\xd9\xe4\xe4\xb9\xff\xfc)\xc6v\x0c=f\x89\xa5RT\x97 \x08g\xdc\x0d\xaeS8a\xbe8\x1b\x8e\x04\x15\xbd\xb3a\xd6\xc7\x9c\xae\x19\x12\x7f>\x1bb\xcf\xc4\xc0B\xe5\x93r\xeb\xd80\xe2<\x19t\x9e\x0c\x1d+\n\xd6]m\xec\xfb#1.H\x8f\x90dGo\xfal*\xe6\x8axKA\xa9\xfd\xd9N6`N\x84\xd5\xd9\xe9\xf5\xa3,\x84R#\x81\x0e\xa7\xd8w\x03\x11.\x80%x\xb3,<\x98\xc3\xf4\x12\x9e\xd3\xbb\xd2\x14`QR$\xa3\xfa\xbd\x0eR\xf6\x9d\x14+\xfe* \xca/\x96\x82T\n\x8a\x8d[8gI \xd8\x0b\xbeT\xdc$\xd8n\xee\xab\xbb\xee\xcaTuV\xb3#\x93f\xcb\x80\x07\xce~R\xae)3pU\xfa\xe3\xbaUE!J\x1a:]If\\}\xa5\"\x1dJ\x9a_\x0e\x1c\x91\x03\xa9M\x8b\xe0\x10\xe3\x9e\xa1\xefPe8\x88\x91\xed\xf0\xc5\xc5E_9)\xec\x01\x12\xe2\xe2\xd4\x01\xc5D\x92\xfeP\xab\xe1I\x82G\x15m \x82\x80x\x95\xfc\xc5\xb5y\x0bIX\x9cDj\x1f`ud\xad\xd7pD\xeb \xeaq\x03}\x14\xd9\xd1\xfeh7NG;\xb30\xb7V\x1d\xd3\x1d\xa0\xde\x1e\xdd\xdc\xe2\x85G\xb7#+j\xff\x82\xa1-\x0c\x0fY\xd2*\xd5[\xe1\xc9\xaa\x183\x7f5\x92\xf0Dd\xe9\xed0Yxt\x99kK\xce{\x86\xa2G\x86\xecF\x0f\xd9\x86r\xb4\x80!\xbbyd\xc8n\xc8\xa6\x18\xb2\x1b\xcd\x18~f\x14i}\xec\x9e)\xb9\xd9]\xaa\xd1/\xef\xe5&(n\xd8\x86\x81\x17(\\\xb9\xae~\x94e\"\xcb\xf4\xc3\x1c\x93O\x8c\xf6\xa6m\xe7OO\xfe\xec\x1e!|\xec\x91n\xcf\x1f\x8d\xe9\xc5\xe4?\xa7\xb3\xd9l\xfe\xf1\x9f\x0fY\xfe\xaf\xce\xdc\xeb\xad\xc9\xad\xa4\\\x1f;Y\xe7 \xeeY\xa9S\xde5\xf3\xa5\x9f$\xdf\xe9\x94\xc4\xe4\x96\x11\xc7\xa6#\xaf\xac\xcf\xf6\xf77\xd7\xd5\xb4\xe1\xaa\x91@\xde3\xf4W\xc4\x14\xaa*\xad\xdd%k\x14\xd2?0z\xc9\n)\xbd\x04\xfa\xe7\x03\x82s!h_2)-\x7f\x95|hOJ9\x10\x13\xe0\x80\xe4n\xe6\xef\xa7\x06\xdeK\xe5\xc1&\x97\xe8\x19\xf6\xc5D\x1d\xa0\xa8S+\x9f\xf9\x97hp\x8as\xa4\xe7\x8e\x08-\xe3\xe9\xbbR\x88,\xc5\xb2\xc9\xbe w\xc9\xf6$9^\x91\xe4\xc0\x00\x0f\x86\xfb\x05\xab\x84g}Y\xdf\xa2\xbb\x81\x10IJB\xcaJ\"\x07\xf4\x10\x18P\xad\xae{\x9f\xc4\xdb\x94\xa4\x94uWq\xb4\xac\xf0\x85)\x89@m\x10\xef\xa2\xe5k\x15\x88R\x96V\xd1\xa4\xeaL$\xd9R#\xad\x8f\xec\x99(\xc3\x97b\xb4P\x9c\xdcj\x9f\x1cW\x0f\x0c\xef\x8d\x85\xba\x19`\x18B_.\x81Xv\xd9\x08B\xcd\x9am\xbd\xb9B\x8cO\xa6\xf6W\xb9\xdd\xdf\xa1\x00\x83\x02/\x90\x9c2 p2\x15s\x1a\xcb\x1fg\x11\x05)P\x02\x15\x1a\x12qxNB\x1a\xc8?\xdcu\xc3 \x07\xa5^\xe8\xf3,\x0b\xb1/\x9fK\x11a\x9a\x90x\x9e\xa3\xcfR\xdc:\x88\x9a\x01\xce\xb2{\"H\x82\xc9\x0d]M\xfbs\xb2\xa1\xab\xe9`N\xd6\xb5\x81\x80\xfc\xc4*\xc4\x17C\x98\x04T\xc8?rn\xac\x0dIL\x0ens\xe8\x1e\xe8\xb8\x7f\xb8\x00\x8cJ\xa36\xc3\x9e\xa7\x14\x934GaqX|\xd1'7\x98\\SN>\xd3M\xf7I\x90f\x99P\x7f6]u#\x7f\xb7\xe4\x13}\xc5\xd0gLn\xe9\x06\x12G\x94\xebc\x83}A\xde\xd1\x08bP\xed\xba\x01\x18&\x97\xae\x81r~n\xb1\xf3Dr\x9dW\xca\xa9-H\xe1\xc6u\x91\xa3\x83\xa0\xb2\xe5\x8bT\xf9\xef\xbd\xea\x06)\xbd\x9d^\xcd\xfdw\xae\xdb~\x87\xae\xc8\xae+\x07\x19\xbd\x9a^\xcd\xe1E)\ni\xdbK\xd7\xdd\xa8\x0b\x15\x98B=B\xaf\xd4\x95\xc63u\x03\xe0\xaaK\x8c\xc9\xabn\x81\x1bz\xcb)\x99\x0d-\x11\xa4dA\xd6mJ\x17\x13e\x1c\x0b\xc7O\xfa\x1b\xb2)\xafqw\x15F\x82%H\xe7D2\x9b|\xcb\x91\xcd\xa8hh\xc5\x8cT\x88\x02F\x9f\xc9+\x8b\x1c\xbf\xa9\xad\xf4\xcf\xca\x1a\xa5\x0ddZ\xa2\x8dm[O\xd2\xf2\xfc\"\x984\xd0\xe7WJFT+ZJ\x88\xbe\xf2\x1bZ\"\xc7\xbb\x864\xc2\xd8\xc9\xa5H\x16\x80\x9d\x91\xc5/\xd9G#\xd1\xa4JZ\x15_i6\x0b\x8bv:\xe9\xc2\xf1a\x1f\x1a\xbd\x00Y\x01\xc1\x1fuBl\x00\xdb`]N\x12\x0ca\x92\x14\x05\xf9by5Q\x07\xc8B\xac)w\xb2G\xb9sh$Go\x18\xd8&L\x9d\xc0!Np}\x9d\xc8?\xcbe\xc2\xd2T^%\x0c\x9e'\"\\@\x86\xa0 \x0d\x97\xf0w\xb7\x0cc\x07\xb2\x9d8R\x84\x96\x7f\x96!\xfc\xc2\xe3p-\x7f\xa3xq\xfb\xcb.\x86\xb4C\xd7\xf1\xf2^\xfe\x91\x0d\\\xef\x84\x00\xaf\x9aE\xc0\xef\x82\x14.\xe0\x10L^\x85B\xa52Z\xaa?\x91\xfa\x05\x03W\x87\x80w\x8e\xfe\x13\x85)\xe40ZB\"\xa3\x08~E\x10F\xb2\xbe\xe5J\xd6\xb5\x0c\x83(^\xc3\xc5\x9d\xfc\x852\xf2\x1b\xb6\x81\x9fk&\xbf]\x85,Z\xa6L\xc0\xe5\xba\x84\x04\xf2\xa9K Vq,X\x02\x17\x89\xfc\xf0f \x7f\x86\xf2\xe7D\xfe\x9c\xca\x9f3\xf9s.\x7fX\xb0\xd4\x7f\xe0\xa3\x1b\x03\xfa\x0d\xdc\x89\x8d\x84B\x0eU\x08G>\xf2b\xb3\x86\x84M\xdb\x9dN\xdc\xe4\x10\xe7\xf6ZVr\xcb\xee\xd7L\xc2\x12\x05\xd7\xd0\xc3\x88\xad\x19$}\x8aB\xf8\xe1\xb7\x90\x8f)\xe4*-\x13\xfc&\xeaY\xf2\xcb\x8eA\xb6&\xc6w\xfaO(\xa0\xe3\x1b\x06c\x08\xa1|\x1d\xe2\xf0@\x0e\x0e\x8fU\x1cd\x87\x18\xf9\x9180\xf8\xf1V\x98\x1e\xc4fh\xe2\x9dP\xc0\xca\xa7\xdb d\xb5\xdbp!\xd4\x80m\xf5o\xbc\xd6x\xf4\x8bC\x9cD\x96M\xe4G\xc9\xeeZ\xa2\x82|\x91\x06\x1b\xf9\xb8h:U\x07\xaap\x15) \xd2M\x10I8\xd2x\x97@\xfa\xa9t\x1b@\x01\x91\xc4|m\xb2V\xc9\xbf\xbbk\xf8\xddl\x82\x04\xea\x07\x98!\xeb\xbe\xfc\xab\x11P\xc8\xd1\x93\xb2\x8e\xc6m!gW\xfe\xbd\x81\x1f5y\"\x84\x89\x11\xa1P\xdf&\xf0\x13,\xe4\xc8\xca\xc1\xdcI\x80\xee /\x96\x94|%\xca\x7f\x02\xcc^\x84\x89Z(\x8b(\xdc\xbe\x0f\xa0\xd2%[\xc9\xae\xb2(\n\xb7\xa9\xc2\xa7\x84\x85k\xfe\xce\x0c3\xcc\xfe&X35\xa5\xe6O\x90\xfc% \x96\xa1\xca\xd4%\xa7\x15fk\x13\xa4\xb70\xe8P\xf76\x10\x82%r8\xb6qt\xbf\x8e\xcd\x95\xaeF~\x1fDV5\x89\x1eS\x11\xc3\xb0\xdf\xad\xf5`\xc8?0\xaeM\xc9\x9a\x18~x\xcf\xa6lN\xdf3e\xd5\x02D\xf1\xc7\xdf\xa8XmP\x97V\xb5\xaa\x8f\xb9e(\xf1\xa2Q9j\x84\xd0\x98&\xa8\xaa\x98\x94\x12G\xa9\x98T\xca\xc9:(\x1e\x1b\xf1\x8a\x9e,$!\x89\xb5\x01\xe4&\xbekj\x13?\xd8\xc6\x7fh\xbfJ\xfd9_\xea\x10\x0bM W\x95\xc3\xfbU\xa8\x11\xb2a\x80\xc3\x18=\x96\xd6p\x14U\xd6S\x8c\xbf\xfd7\x1dd(%m}\xe7\xab\x1e9\x91\x14\xce\xb5U\x0eC%\x1a\xfd\xd7\xe5\xbb\xb7V\xa8\xc6\x00\x83\xa3>\x98\x14\xa1\x80\xa4\x16\xe0\x8bR}\x06z\x05\xae\xf4\n\xc9aeZXy\x05\xd9G\xc0[l\xa4\x98O\x1a\x9a\xf4-\xae\x8b\x8ak\xdad\"\x8cRl\x9c<\x8b\x82\xa3p\x85\xa2\x02YqT\x99Z\x14\x90W\x80i\xa5\xe2w\xa7\xe4sf\xf4@\x9f\x19\xd8~-*\xac\x1a\xce\xf1h\xaf\xa6\x9d\xca\xa2\xda\xa0\xeeh2\xde\xa8\xab\x08\x8b'Q\x15o\x02\x88Z\x82\xc9\x1aC\xf2\xb6\xbc\xe0K\x02H\xcb\x82\x16\x96\xa8\xfe\xfd\xbf\x11i\xe2/ \x8d}\x88p\xc5P\\\x86\x1f`\x9fZ C!\x99\xc6$$\xce\x7f\x96\x01+t\xd2\xf7\x1f\x0e\xd1\"\x85G\xcc2\x12\xb9b\x9bP\xa8\xa0$\x97\x97\xf6W\x86\xfa\x98\xf3_\xeb<\x97p\xcb\xe3\xd7\x19\xc3\x86\xd3r\xbc)w\xdd#p\xf6\xa5\xce\x91\xc7\xbd#\xe7\x88|\xf2\x8e\xa8#\x92\x1ds\x8e\xc8\xd1#\xce%G\xf3\xc3\xda\x15\xcf\xb9p<\xe19c\xe5\x1b~\xe1\xe4\x85]3\xcc\xe8\x87`\x9d6p\xa4\x10\xab+b\xcb\xc9%\x1ab\x9fU{\x8ap\xad\x12\xcd\xfd\xee\x8d\x80\x8e_ 5\x95,\xf1P-\nN\x91\xf2\x86\x98~\x9a\xc3\xd9\xd8\xb4\xd1]znzIDw\x19\xf05K\xe2]\x1a\xdd_2\xf1\xc68\xa4\xd0\x87\xab+\xc9\x0b\xf9\x8d\x03\x0ef\xfd\x89\xedf\x9d@\xdc&5\xd8 &\xd3}E\xb4\xe1\x03`\xedq\xf2p\xcb\xee}I\x83\xfa\x9d\xbe\x93c<\xd7\xfd\x97=\xb3;m\xfaJ\x8bD\x8e\x06\x1e@\xf4_\x90\xe5^\xd27n \xe6\x93\xc1\xa3{V\x1cEM'zU1\xd0\x9e\xb3\xfdNqF\x1e\x94\x1d\\\x05\xb4\x9c\xa8=&\xe4\x82%\x11\x0b\xee\xd8\xdfBq\xf36^\xb2K\x91\xb0\xa01V\xc7%:1&\xcf\xdf6\xf9,\xd7\x94\x18%\xa1\xb1\x14w\x87U\xc6\xfb\nz\xd01'\x96\xf6v\xbfwZ\xd6.\x14\xe6)I\xd8\xca\xe7*\x17\xa4\xf9L\x8a\xa4\xca#\xac\x9a\xc8\xe7o&n\x8c\xa5\xf6#\"'\xaf\x9b\x0c\xa2\x0e\x01\x9e\x93_\x19}(\xc3\x0e\xf9\xbf\x10\x15\x9fA\xdd\xfdWN~b\x06\x99GE\xf6L\xfa\x9e\xe5\xf5L\xc1{\xd9\x83J5G\x19\xf7\xc9>\xfeP\x99xj\xf1&\xca\xcc{\xad\x9b \x85|\x1a\xd7\x8c\xe9\xb4\xa6li\x9fq\x05M\xdf+?\x82\xaf\xac!\xd5\xd6\xb2\x9cR+\xe5\x9fY\xf4V\x12@F\xd4 $\x94\x0c\xb3\xac\xcd\xb1\xeb\xee\x7f\xc1\xadZH\xfds\xcbu\x9f\xc3\x13mV^\xf5\xea\xd7q\xb6T\xe8\xc9J\xa1j\x01\x18w(\x90\xe7mk\xbaU\x82\xde\x06\xb3\x94\x12\x9cIy\xe9\x87\xa5m;\xa7a\x0e\x804}m\x0f\xeb\xc4\xbe\xf1\x03+\xb8\x00\x0d\xf2\\\x1b\xffDdA\xa7s\xb2\xa3\xed\x01\xd9B\xb6\x073\xe8+\x84\x1fv\xae\x1b\xb9.\x82\xb7Qa\x80L\xa32w\x8e/?\"\x8b\xc2Hg\x89\xec\x1c\x8cK\xa4\xac\xdevf{K\xd1\n\x8fv\xb4\xdd\xb7b9,\n\xbb\x89\x91\xda\xd0#\xba\x00\xa8F\x9e\xb7\x1d\x8b\x11\x8e\\7\x9an\xe7\xddd\xc7\x11\x1eA\x83\xe5W\xb9N\x0c\xb5\xab;\xa7\x85+\x94PJ\xedA0\xf3o?CLa\x8c,\x1bdY;\xc1\xae\xdb\xf4MR\xa9\x89\xd4\xab\x80\x19\x91\xb2A\x13\xb2$6\xb2\xec\xa3Jb\xa3\n\x98\xe9\xcb\xdfb\x10o,Ae\xb5\xe3FL $gc\xdb\x03m\x10~\xc8UH\x91\x0f\xe1\xe2\xb6\x81r\x96\x0cQ\x9d[\xea\x0c\x94\xdfd\xed\xf1\xc5\x00\x97^&\x83\x11\xdf\x8f#\x05\x9e\xe5S^e\xa3\xf8|\xb4P\xa6s\xb2E\x05?&\x836-f-\xcbvY\x96\xa2%\xce\xc9\x8d\x1dg{WIjm\xba\xacy\xb12\xb9\x16\xf4\x1d\xe7$\xee\x82\xe4K\x9d\xeb$\xfe\x94J\xb13\xee\xeaK\xda\xee\x93\xb8\xcb\xf8\x1d}\x90\xe5\x82d}\x07n\xa4\xdd\x82\xbfq\xca\x9bT\x15\x8a9\xdd\xc8\xb2\xcb\xe5\xf7R\xe0\xe1,\x81{\xd8\xcb\xe1b\xb5\x82\xbf\x8ai\xad\x94Q\x8f^D\x91y\x9a\xc2c\xc9\xd9\xc0\xc56a[\xc6\xab\xf5\xeag\xef\xf8\xa2ZWTT\xb1\xbf;N\xe7\x12\xd0\xeb\x90/+*S\xd6@b\xb7I\xbc`ij\n\xb7BEduV]\xa0\xb0$\xee.>-\x1b4\xaf=\x07\xde\xdd,\xc3\xe4\xeb\x1a\x81\xa2\x07\x9a\xd8m\x82\xf4\xb6a\xaf\xeb\x7f),`E\xb2\xff\x8f\xdeq\xfb?Z\xc7\xad\x0f7\xacu\xbd[\xadX\xd2\xda\xc4\xcb]\xc4Z\xab$\xde\xb4x\xbcd\xdd\x9fS\x02\xa1\x87\x84,\xa3\xf0\xa0\xfb\x1f\xadc\xf9\xd9\x7f\x06;q\x13'\xadV\xeb5K\xe24m\xbd\xb8\x8ew\xb77\xc12\xfc\x99\xdd\xb4\xc6\x90 \xab\xd7[\xc1\xbbn\x9c\xac/\xe0\xa3(\\0\x9e\xb2V\xeb\x877\x1f\xfe\xa3u\xdc\xfb\x8f;\x93\xb5\xee\xe4\xdcd\xad{\xaac(\x9e\xf4-\xd10\xb0\x85\x9c\x0f\x7f\x7f\xff\xea\xdb\xab\x17?\xfe\xf8\xe2\xefW\x97?\xbd\x7f\xff\xee\xc7\x0f\x93\xe1\xe0\xf4\xe9\xe9\xb3\x93\xf3\xd3\xa7\xfe\xa0\xff\xf4\xe4\xe9\xe9\xe0\xd9\xf0\xa4\xb2\xe5\xe9c\x89\x00\xe1\xb1\xb0\xf2\\\xfd(\xf9\xd4Z\xbeB\xb9x\x96-X\x15-\xb5\xc0\x9c\x82-in\x1e\xb1\"\xc2\xc23-#a\xdc-,\x19iT\xaeJ_\x9f\x8ch\x1b\x02p\xd1B*\x80\xb2vy\x16\x980;Q\xb2\x95\xad\x0b56\xafR`\xd8\x16\xacQ\xa1\xd6V\xf5\xab*\xc0|I\xdb \x97f1P\xf3~<\x9a\xfd\xec\xd0oV*\x97\x80\xc6\xfe2\xd3\xb6\xb8a*/\xe4*LRQD\x9f\xdaK\x14V\x8e\xe2\xb6 \xcff\x0f1[;\x08\xc2E\xe7\x17\xa5\xe2\xa4 v\xd1\x98\xb0\xec\xc8\x01{\x14\xa7\x06\x88b\x89ZAK\xd5rT\x08v\x0dQ\xd3`\x0e\xbf\x81e\xe1\xba\xc2\x1eY\xeb\xcd\xa4\xba\xda4\x90\xa2{}/\xd8\xf7Zj\x1e\xf7\xb3\xcc~2\xe6\x07p\xef(^\xadR&\x8e\xe4\xc8J&.^\xb5\xae\xe3\x1d_\xa6*\x9fK\xb5\x0e\x0f%Y\xd6\xc7\x87\xaaRx\xd4X\x95\xa0\xb6]Wq\xad\xbc\x8e+\xe8\xeb?\xf2\x92p\xe5\x9d\\}F\x12<:\xb8<\xc4\xa1\xe5\xc0\xe8\n\x16g\xe9QY\x0c\xa7\xbf\x8f\x95\x93=\nW/\xc2]\x17l\xd4y\x96!N\x9d\x9dX=sL\xde\xe50}\xa5\x11\x18\xf1\xe6dwG\x8eAq\xc7B_E\x16TK\xc5\x1a82\xd6?\xfd\xec\x06\x86\x84\xc4\x14I\x9e\x8c\x91\x04\xe3\xee\xa7$\x14\xca\xbba\x14\xb7)M`\xb5\xb3\xc2\xe7/\xc6{=\xc6~U\x92\xd0\xea'\x85l\x92Dhc\x85~\xb6DE\xfc[SI\x1f\x82,R\xa5-\xc4\x05_ \xc5\xd1\xed=\xc4\xfb\xe9K\x10Y\x0e~\x9e\xb0\x9a\xbe\x88\xf7]\xbd14\xa3\x7f\x969\x9a8\x86\xbce\x18\xbb=\x17\x07Q\x80\x82\xca\xa0\x05\xb8M\x93I\n\xe2\x80\xafg_\x02\xa4\xea\x05\xdb\xa6\xae2\xe3\x0f\x91\xe8.\x03\x11\x14\xe4\x0cJ\xabG\xcaSh\xd4\x98\xb2\xf0\xf5\xe3\x84\x88\xb4TS\xc4\xee\x8f\xbe!\xad8Q\xb4\xbf\x13\x85\xb7\xac\xa5NE\xba\x0e\x86Y\xaa\xa7^\xb7\xa8Ri;r\x00\xb3\xd2\xf0\xd7=\xa2T%H\x10\xba\xa6\xdf\xbc\xac\x9b\xbf\xd7D\x8d\xb3u \xc2;vd\xc1\xb7-\xb0h\x87\xe4\x96\x02\xb8!\xc6\xfdI\xdf\x07\x0c\xc2\x98\xb4\x1b\x97\xab\xc5\xa4\xf6G|,F\x9e\xc71\x98\xc0\xf4K\x94\xb5\x04\x1b\xdb)KOp\xd9J\x81\xa7\x067\xcb\x98\xa8p\xda\xcfU\x10R\x88v:<;s\x85\xe5\xe0\xc0l\xd1\x87\x99\xb8I\x01:D\xf8^\x08\xc16[\xd1\x12q\xcbhx\xf5D\xb7\xa2 Y3\xc9\xc9\x04\xbc\xb5 >\x87\x9b\xdd\xa6%\xc7\xd3o\xf5?;^\x80,?\xce\xc19\xf6\x9c\x96$\xb7i\xb9a\xf53\xb6'BT\xd7g\x19\xf2\xa6t\x9a\xf9\x8aE\xd6 uZ\xef\xbba\xfa\xd7\x90}2\xfe5\x95\x87`\xf4\xc9\x0e,N\x0b\x98r\xe3\x18\xed\x9b9\x01UR!\xa3\xd4\x0c\xda\xc0\xc3.a*\xea[\x13\xd7\x1e\x8cFX\xfb]\x0b\xe5w\xed\x04\xe9\"\x0c\x1dp\xbdv\xa2@\x84|\xa0o\xaeC\x1e$\xf7\x8e\xf1\xb7\xe6\xe0\xb7\xad\xe8\xb2o.;\xfaZ[\x1d\x9b\xb2?!fH\x99\xfej\x91\x0e\xcdW\x8b\xb43,k\x18\x9cG\xcc\xaaO\xdd\xeaj\x86\xc7\xba\xd1\x1b\xf6\xb9\x84\xe3\xe2\xe2b\xa0\x1e_\x07);?-\xde|c\xb5j\x9c\xc5\xa5\xf8\x8b\x1b\xa0\x12\x149\x8e'j\x8erD\xcaK\xb9-KV\xec\xe0\xda\x03\x90\x91\xcb`3Y&\xc6\x90\xe1I\xd0>&\xe2\x02\xa42\xbdp4]u\xaa\x9f\xf0,\xe3\x95b`\xa4m? |L\xfb\xd5\xafe\x97i\x1f\x8f)\x12\xea\xaa|-\xe7\x16R\xd6\x14;f1\xc1LO\xb0=x/\x14\xbb\x06\xbb\xdb\x81\xe9\xd4%/\xeb%5\x9e\xe8\xd7\x1f\xea\xaf\x1fC\x9d\x9f\xeb\x85k\x13w\xb5\x07\xd5\xefB\x97\x97V5\x95\xf9o\xdcj~\xe2\xb7<\xfe\xc4\x0b\xb6\xc0o\xc1jb\x141\xcf\xa9{P\xd6\x11c\x8dj\xdeJb>\x92?`\xd9D\x80\xe6&e\xe9{T\x84~\x01\xea\xd3\xb7\x1c\xba\xf4Tv\x06\x8d>\n|\x82\x12\xca \xa7}\xec\xf3\x8bRX\x9apjIN|\xdc)\xee\x9e\x01BY\xf7\x98p\xeaq\x12\xa6o\x83\xb7\xe0}\x838\x8d'}\xbfL\xed)Q\xae\x0f\xcf\xcd3\x8fc\xc2/J\x18!\xbfW iY\xb03\xc8M\xd2\x14>\xee+Y\xa7R\xb0\x9f7\n)\xb0d\"pj\x82\xb0X\x98T9&\x8b92;\xd1\xa43\xf0\xef\xac\x81l\x14\x8a\n=\x95p\xe5\xaeD\x1a\xf7\xc9F\xe2]\xb2\xc4\xb6\x07\xa22^\x9b\xc4\x93\xc7^\x17\xb9\x06$+\xd8X\xd0\n\x8eP),\xfb\x03\x16\xe0\xaaG\x8dxz\x17D\x05\xcbQ\xe4m\x86nK\x86G\xb3^\xb6O\x96\x8dl\x12=C\x12\xd0\x01Xy\xab\x81\xb4\xa3\xf9\xd9\x81`$\xa7\xabV\x1e\x05OQ\xbd\xad&\xb5\xa5\x80\xb3L/J)b\xc8\x1b\xbd*\xcb\xdbNq\x8fu\x1c[\xcd]\x0c%ck\xaeK4 \xe8\x90\xa4=:$\x91\xfc\xe1=:\xacI\x92\x85\x12a\x00F\xc6r\xa5\xf9\xac\x9b\xb0`\xf9\xd3\x1b.\x06\xe7\xdf\xbcB\xe28\x80\xfcZ\xba\xd3;\x93\xb27\xa4|\x14\x8eS\x88\xcc\x16\xae\x90\xac.\xc4\x94\xd2\x05\x12\x04\xb2&\xee&}?\xec\xec\x14\xa4\xea \xe8zCL\xc2\xce\xce\x93\x0f\"\x83U\xbb\xe3\x00\xf0\x1d\xe2\x80\xc8ba\x87\xcao\x89lN\xad\x04\xd9&\xf7\xa2\x8b\x14\x16T\xda\x89@-2\n/h\x7f\x14v:v\xaa\xb5v_\xa7W\x8b \xaf\x9a\x81\xce[\xe1\xb6\x82o\x85\xf1\xc3V\xee:*ml\xb8B[\x03I\x98\x9b\xd1\xab\x84?7\xf2,\xa7o\x01E\x10\xc7Y\xd6\xd7\xa7\xb9\xc5\xa2\xe5\xa3D\xd2\x15]$\xc1\xf8\"\x86,\x861\xf6\x13\x1ak\x13:\x1bG\xc2?\x0f\xdb\xb4\xdfLG\x8d\xf2\xe5\x86}\xb6\xd4\x05\x17ao\x08u\x86\xbda\xc9:\xea|~#\xcf+B\xd3\x15\x11\xe8\x8a\xe4!\xc3\xe3\x80\x0c1\x19\x9c\xc3\x12Wt+-HB0bS\xee\x05s\x9a\x1a\x15DP \xe4nF@\xbf|\x82~B\xa2L?\"%)e|Q|\xf3\xa9\xe1\x1b[\xe1Vj\xe8\xa7s\x13I\xd4\x0c\x8dd\xb0\x85R\xf1J\x1e\x98\xd9\x81r\xb8\xe5#\x00\xe1\x94\xeb\x0d\xdf\xee5\\\x82R\x96z\xd7\x00\xde7M\xd5\xbdz\xb4\x1f\x95HI*\x08\x90\xec\x8f\x9a\x90\xd2\xb9\xb8\x8d\x90\xe8\xd0!\x1e\xf71L\x12\xa7\x95>\x05\x10c\xf3\xe2\xe2\x19\x89)\xff\xf3\xf0\xec\x9c\x84\xaa\xf716WIy~\x98\x7fa\xe4\xafP\xd5sM\xc7\xef\xe3\xd6\xee8I`\x8f\xf8\xe6^0\xe30\xe5\xef=\xd2\xb29x\xb4\x97\xb5_\x9a\xda\xb9\xf2~\xdd\x84\xbc DUq\x06\xc2*\n\x08\xaeUPL\x15\x1f\x89\xb2i<';u\xb4\xb2\xa5\x8b\x8b\xe1\xc9\xf3\xc9\xa9\xbf\xb8\x18\x0eO&'\xfe\xe2b\xf0|0\x19\xfa\xb0w\xc7\xdevL\xb9a\xbe\xb6E0\xa5\xc5x0|\x06\x14e\x81\xabq\x92\x06\xc3g\x94\xa2\xc1\xf3!$q\x9d\xc6\xde@%\x0c\x8f(:\x19\xb8\x0b<\x1e\x9fg\xe7'n\x08I\xae\xa1\x86\x08WC(\x99\xcfH\x00\x17\xc39)\xeb\x0c\xb1\xeb\x96w\x81\xaexp\x06\x15\x0f\x86\x19\x82\xaau\x1b\x01\xbe\x18\xf6Oe#\xd1\xf8\xecl\xf8\xfc<\xcb\xa2\x8b\xb3\xa7'\xa7'\xb8\xa1\xe1\xd3\x86\x86S\xb88y\x1c\x82\xf2.\xad\xc1\xf3\xac\x80G\x83\x16\x18\xd0R|q~vvr\xe6\xba\xd1x0\x18\x9c\x0e\x06C\x0dR\xae\x15\xb2\xbb \xdaQY\xe6\x84l\xe9\x00\xfb;\xf3\x01\xdau\xe0\xf99\xd1\x81 vRv\xe8\xbb\x83\xfe\xf0$\x83nJ\xca}v~2\xecg\xf2\x99\xbb\xc3EILb\x8fn\xf7\x02h\x95\x96N\x16y\x14cz\xda\x7f~^\x98_\xec{l\xeb\xa3\x1b\xf5\x86\x14B\x1b$\x00V\x02\x1aX\xe3`\xee\xd1/\x7fm\xc2L\x91\xc4S\xedZy?P\x82s\xd1U\\\x01\x8d\x88\xe8^F\xf1'}kw\xc2cm\xad\xc8\xee[*r\x90\xbe\x916\x88{\xf3\xf6\xf2\xfd\xab\x97\x1f\xae~x\xf1\x7f\xae\xbe\xf9\xfb\x87W\x97\xf4\xac\xdf\xccPYi0\x1a\xd5\x88\x8dOm;{\x91\xdc\xeb\x93\xd1\x9avr`95\x96j\xc8\x87\xe2\xb2\x91\xdd\"\xab8n\xb0\xe2?\x1d\xe699\x85HS\xddU\x1c#\xdc\xc8\x07B\xd2*P#\xb9\xae\xe2\xd3\xcd=\x1a\x90\x01\xb6\xa4\xf2\xa60\xf5\x08\x13\xd1\xbd\xfd!\xf8\xac\x8a\xd0\x00I\xcev\x1b\xc7\xd1e\xf8+\xa3\xcf\x06\xcf\x87$\xea^\x05\xbb\xf5\xa6\xee\x9e\xd1\xd0OK\xddJXN\x14\xbf\xbc\xe7\xdc\xa8?\\\x98Sx\xd0\xc4\x1f\xe2|\x91U\xa7\xd5R\xe30F\x8d\x05H\x93jDe\xc0r]\xf5\xb7\x0bG\x0c,u\xddhZ}2\xa7\x10V\xb6\xd9\x1d#\"\xd5\xc2\x85\x7f\xaa\xec\xd7\x02\xec\xf1wIp\x0d^\x0d9\x88\x0c\x80\xaf\x87\x06\xa4\xfa\xd8\xda\x17A\xad&\xc6\xb4?Q\xc7K~\x81\xbe|\xb2'\xaa$\xbaPw\x15\xea\x1c?~\xe5\x81\xb9\xcd\xeb\xc3\x0f\xb0\xfd\xc4\xd3\xa01ZFk[\x9c\x83W\xcb\xca\xf5\xfa\xc5\xf2FTj(\xd8Fe\xfc\x1e\xd6\xbd2%\xe1\xb3E\xbc\xd9\x06ICt\xd0vE\x1f\x96e\xed\xaa4\xd6\xc8\xf7\xbd0\xe7\xdc\x85t\xa2>\xd0\x07\x1fLn\xe6\xfb:\xa8Rt\xb4b\xe1\xea\xa8\xc6\xc56\x0d'\x12\xf18\x1cy^,\xd9b\xb9\x0b\xb7)\x15\xd3x.\xb7s\xd8\x94\x13\xb8\xd5\x9c\xb1!\x7f\xe3DJ\x89\xc9\x98O\x06~_\x0d\x9498\xa8\x0c\x95\xde\xa4\x8bt\xd55 \xc7\xd2\x9b<\xa2\xf3\xfa\xb2\xe6\xac\xa2\xeb\xf8\xfd\x8a\x8dv\xbf\x16\xfb\x10\x12b\x18\xeb\x93\x86\xd9\x0cUh\xd7&]68a4\xe8\xb2\xb9RB\xb6\xe2\x95\x99F\xa5\xd6nPU\x14\xfbD_oc#\xdb\x7fG`\x15q\xa4\xdf\xc8+{\xa0 1\x8f\x14\xfbUA\x7f\xb94c\xbd%6T\xa0#N0\x9d\xc4\xc4\xc6\xd3\xe0\x7f\xa5\xcb\x81:wI \xc8\xb2G\x03\xddx\x19\x8b\x94D\xd6\x16@oH\x85\x9e\x16\xeb\xb2\xdd\xaf\xbcH?\x05\xdb\xc1y\xddv\x93\xd9z?X3u1\xcbV\x92k\x85x\x1a\xfe\xca\xac#\x88\xcd.\x12\xe16b\xb2\x17\x83\xf3\xceu(\xe4\xfa\xabEd\x19 \x8f\x0e\xf1\xda\xa8\xc7\x84Wn\xab\xf2Q\xbe\x07\xeb\xc9\xf0+`=\xfd#\xb0\x9e\x0c\x1f\x81\xf5\xd4\x86\xf5\x04\x13s\xe7\x0d\x88\xf0\x86_\x80\xfd\xfc\xf4+`\x7f\xf6G`??}\x04\xf6g6\xecOk\xb0\x9f[\xf7C\"\xbc3\xeb\xfe\x84\x08\xef\xf4\x91\xbe59\x08\xaa\xde\xf53\xbb\x7f\x960\xc5&\x8e\x03\xb1\xa4\xea\xf6J\x13\xad\xdd\xed\x13\x86\xfd\xcd\x81\xe4t\x95\xd6\xd9/\xbb \xaaZ\xe2\xec\xed\x1b\x8f\xef\x13\xd6`\x1a\xa5\x95\xddY\x15j\x0e<\xbd\xcd>U\xd8\x1aT \xb9d\x0f\x1aR\x96:\x0e\xc4L\xdec[\xedVt\xff!<\xa9F\x8b\xe2\xfc\x08\x08>\x9c\xb6\xeah\xf9\xbd\xee\xc30\xef\xadm?z\xbb\x0e.\xeb\xf0\xa8\xd3\xeav\xbb-\x07c\xe2\x8c5\xee@\xf2\xaf\x0b\xa7\nw\xd3\xe6k\xe9\x84\xff\xe8PVh\xb09\x91\xa8\xc5\x82a\x13CL}\xfbe\x02\x8a\x1a\xfb\x89r\xc2\xac\x9cJ\x88q?\xcb\xf8\x85\xa9 \xcb\x12\xf9 \xae\x9ce4/(m\xca\x90\xc8G-P\x99*p\x93\x0b\xd9\x8e\xb8\xb0\x8f\xaa\xf4\xe3\x8aR\xdc.\xa1\x1eht\xd9\xe7.B\x8abuB\xd2A\x89\xba \x015\xe7'\x1ds|B\xd2\x92\xd7\x08I\x80\xc9Bg\x80\xd2rU,\xc5B[\xad@\xb6\xb4?\xda\x8e\xd3\x91\xe7mAO7\xddJ\x86d7\xdd\xce\xf1CH\xe5- \xe0\xb6\xca\x90\x84\xe3@2$\xc184\x0c\x89\x8d\xc7\x8bh\xb7l\x88\x1de\xfa\xde\xa6\x95\xb4 \xa8d-\xf74\xd0\x87X\xe0{\xcb:G\xa5 \x8a\x9a\xb5\xd2_W\xc1\xa0V\x01\x98J\xec!t\xd5\x9fW\xe0D\x1fM\x91\xca9\x17\x914\xd3\x9c\x1d\xd8x\xda`\xd1\x94Pq\xe0c\xc5\xee\xa4\xafC\x0eF\x1bx\xdf\xf8I\x1f\xbd*\xab\x0e\xa3?7g>\xa4\xa5\xacw\xa6D\xdb\x8b\xcd\xb12\xdekE1_\xcb]\xa04\xe1\x1b\x89Lr\xa9\xa6-\x8e'\x88\xcb'\xb5e\xa4\x8f\xe1\xb0\xaf\x0fn\xd4k\x1d\x00\xd2\xeeCG4\x9c\x0c\xc6\xfa|\xa6\xb4*\x03R\xa5\xcc\x91\xc6}\x9ce\xe2+V\x9cu\x9e\x0e\xfdn\xc5;\x91\x86\xcb\xc2`\xb0\xb0*J\xc0\xba\xc3\x9c\x1c\x96\xab\xc8>'N\x1a\x8e\x11\xafm\xab\xaf/\x1c$~\xde/[=J\xfc\xb4_\xe0\xb1\xc3\xc4\xdb\xfd\xe2\xb5\xe3\xc4w\x0d\xd0\xfd\x1e\xbe\xbb\xf5\xaaR\x91u\xa4\x18~\xfd\x91b\x82G \x9c5\xd7\xcfQH\x08G\x8a\xb5=\xfe\xbf.\xdf\xbd\xdd\xb7\x11}\x90o}cgC\x96\x81\x08\xf6\\\xc8\x81Z\x95&\xd4\xdd\xab I\x94\x81!\x98\xdd\x976\x99\x1f\xaag\x97\x8e3\xfa\x82\x86\xd4(G\xa54\x964*\xa8\xd0`\xf8\xd4\x95bY\xe9\xffS*b\x7f\xfe7\xb4w\xa8\xad\x17\xd5\xb6\n\xd9\x01\xb5kg\xf5\xa8-\xd7\x9b\xda\xd3\x12\xb5\xe8\x12\x1b\x02\xc7!!\x15\xa3\x10\xc0\x08q\xec\xd1_!n\xaa\x15\xb5\xa2h\xf4\xa5i\xb4T)W6\x0f][\x7f\x14\x8e\x93\x82\x0b\x95\x1cy\xdc\xdc\xb9d\x1a\xce\xbd\xe1\xd9\xf9q2\x0d\xed\xac\xbeV\x93oL\x93\xc0\xcd\x0e\xda\xb4\x9fe\x07-\x90\x1cE\xe4\x8cY\xf2.\xe4B\xcb\xe8\x9e\xb88d\xd7\xf8!\xb9\x0f\xf9\x1aLr\x16\x0b\x96\xa6\xadkv\x1f\xf3\xa5!!\xaa\x1b\xf6\xb9\xe3\xfb\x92\xa1!\xe1\xd7\xb24G\x8e\xaa\xaf\xd1\xbcJsS\xc6PF \xa4\xe2\"\x963\x19\x1e2\xb6\xaa\x9b\x90\xd6m)U-\xdcK\nV\xe6\xa0Q\xf1\x92}n\xd9\xcc\x8b\xdd\xdb\x1f\xcb\xddN\xc0\xe1\xb9\x00M\xf3\x99\x07\xc2\xd5\xaa\x12;t\x0f\xd9;\x9c\x0cK\x05\x07\x9br/\x9eS$\xdc\xe1\xd9\xd9x\xfc\xec\x18%\x93\xd8\x1ftb\x8c/..\xac\xdb\xb2\xf5\xb7\xfb\xad\x9f\x0e\x9f\x9f>?\x7f:|\xfe\xd5 \x9c\xee\x81 \xca\xf6N:1\x96\xf0\x94m~\xbf7\xbf\xbfs\x10G\xdaX\xe0\xeb\xbf(\x81\xf8\xa1\x00\",x\x940\xcb\xbe\x07CI\xd9%\x12\xeb\xad\xde\x94\x1b\x9e\xc8\xa7\xdc;-+\xf9\xf6\xf1J\x9e\xedWr6\x94O\xb9\xf7,\x8f\xea\x14\xb7\xa6~\xd1\xe7ku\x89\x131\xfa\xaf\x7f1<\xeeO\xa4\xc8\x90@\xd6?\xd0\xbd\xfb\xecBY\x98&\x98 \xcb\xc8WL\x12\xff_\xff\x12\xf0\x85(\xbe\x90\xa4\xcb\x17\xf0\x85\x90_\x881\x83K\x86\x9b\xf5\xbd\xd8\xd8\x16\x15:l\xf0AiV1\x97\x0e\xd11\x15\x1d6\xe2\xda\xc6=\xd6,\x8e\xcd \xf4!%\x9d\xa4\x8c|\x1a\xce\xa1\x8di\xe8\xb1y\xa1\x89\xab\xeek\xe6\xa4\xfe\xfbW{\x8c&\x93<\x14\xb0V<\xcb\x14Y\xb3\x19\x1c\xeb\x98\x0e\x1aas\x12\xd3\x01PS\xcf\x0b\xc7R\xd2\x89\x8f\xe9\xf0\xec\x1c\x8f\xe4^\xa1\xcax\xe1\xfc8\x1e\xd9*\x9b}P\xbe\xf9\xe3\xa0x\x9d\x8e\x00pFB\xe5\xbb\xd8\x07D\x96\xf8\"(\xcfj8d\xe4U\x05\xc4\x80T\xe505\n\xcd5\x0d\xcek#\\\xafl\xd8XY\xa6\xa1\x1d\xcc\xc7\xe3g\x87j\xfe\xe6\xf7\xd4<\x1e?++o\xae\xf9d\xf8\x05\x98O\xab5\xa3&\xa0\xcd\xcdp>\x1e\x0f\xce\xb178\x7f\xfa\xf4\xe9pp~\xac\x9f\x9f\x1cl\xfc\x0b\xdd\xaa5^\xabw\xee!\x0b\x8a\xc1\xb9\x0dF\x01\xd3\xc9\x1c\xef7\xfe\xff\xd5b\xb8\xa0\xb2\xc8`\xf8L\xf2\xc4\xa7\x07;\xf1\xdb\x87\xf87u\xa2\xde\x85A\xbd\x0b\xc3\xdaL\x9c4vbp\xa8\x13\x87\xc8\x15\x98<\x18\xf8\xdbE\x8c\xb3\xea\xba\xef\x0c\xf0\xa8B\x16\xe2\xce\x80H\xc9^KU\xdaR\xfb1\xd2\x15\x18B\xc0\xa4D(E\xc5T%\xf04\xa4\xac3\x98\xbb.J\xe9\xc0\xacJI\xdd\x10\xeb\x05\x17\x17}\xdcI\xbfL2\x0e\xd1\xb8\xff\x8d\x1eJZ\xb7\xdfG \xa1\xa1w\xa1\xa2w_\xec\xa6\xf7\xbf\xd0\xcd\xdfA\x18\x07\xc3\xa7\xa4#\xd9\xd1\xaf\xa7\x8dL\x0b\xfb\xc3\xb33\x0f2\xea\x7f\x0d\xb1\xfc\xdd\xb4R2tOI\x07\xf8\xba/.\x95?B0\x7f7\xbd\xfcM\x10\xfe\x11\xa2\xf9\xbbif\xe9ZC*\x8e4\xbfg4\x0f\x92\xd2\x82\xd8~%\xf5\xfc\xdd\xc4\xf3Po\x0c^Z\x9aC@\xcf\xaf\x98\x91\x7f\x1fym\xe2\xbe\xad^\xfe`\x8f\xd4\xdeihY\xc3\xe1q\xb2k\x184\xd7\xd0\xc8K[U|\xfbe \x1aY\xe6\x03U\xecC\xb1\x88\xb7\xf7\xcd\x04X9\xc7\xf71I\x94\xad\x84:\xc0\x13\x15 \xe8\xc2J\x16\x86JCeLD\x96\xa9\xc3\x0f\x10\xbe\x13\xd8N\x12\xca1I\xaa\xfe\xa25\xb3/\xd5\x92\xdd\x86]R\x1c\xd4\xe4\xaa\x00\xd1\x97\"HDSd\x04}\xf8R\xa9\xb8\xb9\"\x15I\xf6`E\xc9A\x08\xd4\x87\xaf\xf8r\xef\xb3\xc4>E\x85a\xa8\x8ca\xa1%\x17\xe3\xa4\xa3\x86\xa9|\xe4q\xcd\xb9\x93\x90&\x1dn[$\xb8.\x1f\x0b\xd7\x15\xe3\x04\xac\xe0b\x1av\x06#\xc9\xc1KF\x1e\xb3i\xec \xad,\x8d=>/\x8e\xbf\xc3\xf1\x80\x9d\x80\xd5\xe5!\xafn\x95\xfc\xdb(\xeb\x9b\xaai\xf4;K\x99(\xfc\xcd*j`N\xb8\x17b+zCM\x8d\xb2\n\xa3\xa8\x19\x03\xf7\xd3\xf3\x1c\x88C2\x91\x83J\x94!\xa0=\xb8\xfb\xc1!4\x1e\xd6\xca\x11;\xed\x9da6X5\x15\xf5(\x1e\x0f\xcf\xce\x81\x8a\xc5\xe0\xfde;\xb3\xed9M\x1fp\x04-b\xa34\x84=i\xeaY\xe2\xba\xd5\x90\x14\xc9\x01s\x9d\xe6\xe3`p\x13\xdb\x8f\xe6\";\x01>\x8bX\xaf\xaa\xcc\xb6\xea\x1a\x8b\xea\xed\xa1S\xbbw\x07lm\xf8\xb84\xc6\x95\xf5(\x1f/u\x9evq\x01sT\x1a\"L\xac\x96|~qq\xd1'\xca\xc5\xb8\x8fIC\x18\x9a\x15x\xd9\x95g\xa5\x80\x98R\xa2.\x0f\x14\x02Z9\n\x9c0\xff'\xc4u\x80\x9b\xc4N\xc5\x8cIZ\xd8\\j\xf7\xbd\xbe\xac\xb8#\xac\xaa%\xf6\x07\xd3\xf0\xcf\xe9\xdc\xce(\xa6\x12\x15\xbc\xa6\xbd\xe9Go\xd6\xebw\x9e\xbf\xe8\xfc#\xe8\xfc\xda\xb9\x9a\xdb \xaa~\xb5M\xed\xc7\x83\xf3\x89\xd3w$\xe7'.\xcfd\xbd\xd6\xb7\x00u\xf1\xf1I\xd3\xc7\x83a6\x1c\x9e\x12Y\x8d{~\"+\xa8\xd5\x04\x13\x86\xb8qOj\xb0B2N\x92\x8bx\xc9Z\xdb\xb88\x81\x97m\x9e6\xb6\xf9,\x1b\x9e\xf6 \xb4n\x1am\x06\xa0\xb05+\x11\xf5\x1b\x0b\xc9\x93\xae\x88K_\xb9\x92\xa4\xab.7\xba&0Ha;a&\x93m\x99\xc7\xad\xf7q\x96z\xd9,\xf5\x9e\xf4\xd6\x90\xc1\x0d\xb12\xa9\xdbk\xf9\xc4\x04X(\xdc{u\x8c\x82\x91Y\x1c`6<\xc2\xcc\xa3\x0eu\xecH:\xb6\xef\xde\x93r\xcb\xb1\xce\xb1G\xf1X\xd2^\x14{\x92m(\xb8\x93\xd8rT\x87\x0dR\xc0\xb6\x08n\x02\xa5\xe9D\x8e+\x11@\xcf\xea\x01@K\xa3\x11\x8e\x06\xcfTP\xb3A\x7f\xa0\x83\x9a=\xc7$\xa0\x1c\x9d\x0d$\x81j\xf4^\x19\x89\xee\x8a&\x93\xd4\xafW*\xf7w\xc8AI\x03\xa4\xf8\xfb\x10qLblEF\xd4A\xc1q\xe9R\x04n\xf3k&\x9c\x90\xb7x\x969\xa9\xbe\xd4\xa8e\x1b\x85\x82yF\x9c\xec\xc5\x9c\xd3}\xd7\x16\x11\xf2c\xb9\xc7H\x16\x9ew\xe1\x19&\xac!\xf4\x9c\x19\x84\x135\x06''\xb8\xbb\x82A\x18\x9e\xa8A\x18\x9e\xcaA\xe0\xe8i\x1f\"\x82\xa3A\xff\x0c\x93\x05\xe5\xe8\xd9\x00\x8f\xca\xd8\xa9Ue\xb1:\x17\xdf\x91-Y\x91%\xb9)r\xb9\x91\x0de]\x15v\x9c\xac!\xef[\x00vq\x9cn&\x89\xbf\x9e$\xd3\x9by\x96\xa5\xe8\x86<\xe4\xd8G\xea\xf6!\xc7%\xaf\x02\xfb\xcf\xae\x05\xb1\x8c\xe4`\xaf\xa8\x98\xee\xe6\x90.\x8e\xc7\x1f\xa0\x91\xbf01AK\x1a#Nv\x18\xbb\xee\xb2\xab\x1d\x8bd\xc1\xf6\x02m&;\xff\xc6C\xeb\x89\xd3u|\xe7O\x0e\xf6v\x84uWq\xb2`Kl\xa2m\xb5)\xddB\x03z\xe3[\xd9\x89$5\x15\x1cEhE\xb6\x90\xa3/\xbd 6Y\xb6u\xdd-\\b\xd7\x0d\xd1\x8a8\xf2\xda\x01,\x08$4d\xa5B]\x1e\x9c\x85g\xf6\x90\xb6\x93\xa6x\xe2O\xdb\xcd\x18\x89\x1er28\x94\xd2\xe6i\x9e\xe3\xe9`\x9e?\xb6\x0c\x9e7O\xa7\xda\x9f,\x93\x9e\x12\x19\x0b\x87\x1a\xcf1\xd6F\x01\xd7\x91\x98\x1c+n\xd6~\x9beC\x1c\x0d\x87O1j\x80\xab\x12\x14\xd1\x009|>\xb4\xe2\x0d\xc6\xd6\xaa;i0|7\xae\x14\xa0\xa8\xe0\x9b y@\xf3\x89j~O0\xdd\x96\xd6\xaa! \xc8@\xb3dK\x161\xc1Z\xe14\x81\x00\xaf\xcbpQ_\x0dj\x18\xcb$\x9dq\xf7S\x10\xdd\"Fj\xc1\x0e8\xe8\xaar)\xe3\x12.\xeb\x92\xc5\xf6\xb0S\x0d\xcbt>\xe2\x94g\x99M\xe3\xee\xact\xb0\x16\xe0F2\xd0bu\xb1\xc9N\xd5\xd2\xd2\x81\xcb\xe7\x8e\x8a\x0eU<\x86\xfe\xab\xa7%]k1\x14\xe0\x87\x04\x05\x16\xec \x91b\x82b\x0355\x0d0&\x1c%x\xc2P\x82}\x81\x12\x12\x833I\x1819Q$\xecn\xe3-\x82\x0cQ\x90\x9d\x1dhPm\xd4$\xafQ\xd2\xb1\x06\xcfe}\xd1\x97\x9f\xb3t\x114\xa6\x8fo\xd91\xffK\xa6\xf0_\x92\x19\xfcW\xdf\xca\xef\xdb\x9b\xf5\xe0\xd9@G\xbe\xe5\x8fUY\xd63\x90\x1f\xf5\xecz\xfe\xd5\x87zT5\xb0L\xea\x1b\x11\xa0\xa6q\x05\x99*2\xd7\x83\xec\xf2 e\x81\x9a\xe00i\xb3W\x8e\x0e\x00U\xc0\xa5\xc2\x91\x80\x14\x88\x01a\x05\xf4\x0bw7\xc1\x16\x95\x9dR\xe1\x83\xd5|4u\xd0V\xa5M\x1c\xc7wzR\xe0Tu\xe8\x1a\xb4\x83Q\xcf\xc1y=*\xbd\xb5\xf9\x0f\xbe\x82a=W\xfc\xeai\xdf\xde\xba\xeb\x01O\x0b\xd0\xe2\xae\xf2* \xd1\x00bg\xec\xf1\xaef,\x80i\xfc\x1anQ\xf2\x88\xc00\x0f\x14\xaf\xf8\xb4\xafy\xc5\x13\xc5+\x9e\x0c%\xab\x18IL$;\x1au\x19\x07.\x8blM\xb4!\xf5\xc7\x8c\xb7si\x141\xa8\x99\xb1$\x9c\xa4\n\x88\x88\xb6\xdb\xa9\xeb\xb6\xdbiw\x07\x9e\xa4dQ>a|\xb7a\xe0:NV\xe5S\x8b=\x1c5D\x02\x90\xec\xf2\x9e\x0eIdY\x888qx\xb0a\x0e\xce\xb2\xb8\xb8\x91\x84f\x878\xee*\xad#\xdd\xeaY\xddW\x8c _\nJ\x84\xb5)M&(\x9a\xb4W\xae+\x87\xd8u\xd1\x82\xb6\xfb\xd8\xd7TP>#\x8b\x89\x1a}\xdf\xb06\xd8/\x1e\x05`_\x9ec\xf4Z\x03_\x12*\xe2\x98\x95\xea\x90}\x9e\xb1\xa1\xb7r\xefr]\x15\xce\xd7\xf4A2\xdep\xdf\xc8&\x1e\x88Q]\x1c\x0c\xf6>~\ny\xaf+X*P\xd2\xddF\x81X\xc5\xc9F\xe2\x87\"\x0f\x01\x95;\xf1\xa7\x87!\xc9\xb1?\x93\xcfB\x88R\xa5\xe7\x99Dt\xda\x9bM\xe4\xfa\xff\xf3\xc9k\x87\xf4f\x7f\x82\xeb\xe1\x893'\x0b\xf9\xee\xcf\xc3\x13\xf9\xe4O\xf2\xdd\x9f\x87\xa7\xf2\xfa\x89\xba>\x97\xd7\xae\xba~)\xaf \\\x9f\x025\xf9Og>\x12\x9a\x98H\xe9\x05\xabkH\x01\x95\xc6\xd1\x9dy\xaa\xef\x88h\x0e\x0e\xdeJL\x8c\xf5 \x84\xac\x94\xc3\x7f\x93\xb0\x95\x9f\xc8\xf2\x08{\x10=\\HT\x7f/ge\x11Gt\x7f\x83 \xba\xec3[\xe8\xe8\xfb\xa5\x8an:\x98W\xbdEtM\xaf>\x0b\xc6!n\xfb~U\x15\x87.\xe4t-\xff\xca\x0b\xda\x9f\x18\x82\x86\xeaA\x0f}\xc7\xc0\xf9]\x90\xde4Vl\\\xd0\xa4lt\xa8R)8\xa9$\xc7I\xb8\xfd\xcd5\x99(\xbb\xaa\xb6>D\xcag\x902%\xfdN\x88mC]\xa9=\xb2\xd6N|#\xc4\xd6l\xbf\xf2:\xd57\xb6wd1u\xaa\x85\xd7a\xc4.\xefS\xc16\xef\x03qS\xdfa\x8a\xc2\xd8\xec\x96\xa3G!h\xd9\xf1!\x9dU\xa8B\xa1 \xd9\xd4*\x897\x8f4\x16\xebQ(\xb7\xd1\x99\xde\x11\x81/\xe5\x8bx\xc9~\xfa\xf1\x0dbu\xcfc\x93\x94B9z\xdbUD\x92\x86DpPg\xc9_DtE|\x10\x10\xd8w\xe8\x9254\xa7\\\xf2\x8bT\x15\xbc\xde\xdcb\xca\xe7d1\xe5\xd0\x9c\xda\x1b`\x04\xfc^\xcf1\xc1T\xd4\x04?\xadaa!\x0f\xa9\xc8\xa6\xaa\xf8\xf4\xe9\xbcD\xb1g\xd8/\xae\x9fb\x12\xbb\xae)\x05\xa6\x00\x92q\xef\xcf=\xc7\x97\xdb\xab.6\xc0\x98\x88 +`\x90[\xaf\x8f\x12\xda\x1e\x10F\xe3 S\x9b1\x86\xca\xda\x89\xeb:\xfel\xe6\xa8\x80\xcce\x9fB\xe2\xccf\x0e\xc6E\xa5d\x88\x8b\xf6\xba\"\xfei\xbb5\x9d\xa8\xb6\xcc\xeaJ\xa7\xfd\xb43\xc5\x16Jb\x12\x8eb*g\xab@\x1f\x146\xe46A\xd5\xa0\x1f\x15\"\xcc\xbaWW,\xfd\x01\xd2\x01\xd0v_\xa3\xe9CN\xf8>#[\x95SI\xb2\xb7\xc2\x92=\x81xL\x07\xd62*\xf3\\\x0c\xe6\x13\xe1\xdb\xb7$\xa6Iw\x11,nX\x96\x95\x9c\xbaEAK\xec\xdd\xcbW\x16R#\x1aiYP\x8c\x02\xcf\xc3\xe14\xb0Sk\x04*CYj\xd8\x86p\xda/\xf0\xbb\x0d\xea\xef\xee\"H\xd9\xa5$\x96\"\xbcc \x1c\xa6\xb50\x1fD'\xa7\x89I\x8a'\xf14\x9d\xfb\xf2\x872\xdb\x1f>\x94,YC\x96\xe4\xa6\x1d\xd4\x08'l\xc4\xe0\xe4\x8b\xabH\xd7\x92\xe0\x88\xee\x92E\xc1}\x96\x89,\xeb\x93X\x1f\xb6\x90\xd0\\\x04\xfa\xe2\xb7\x8d\x15/\xc7*\xa5\xfdQ:\x16\xa3\x14\xf2\xb9\xa5\xf6X\xa5\xf3QL\xb9\xb6\xbf&A\x96\xa1\xc0J\xfcS\xd1(\x99\xae\x87\x10\xfe\x82\x864\x00m|\x8e!\xc9mN\xc2F\x01*1\nE\x0d\xfdC-V\x0f\xa9\xa9\xa0\xee\xc0]?Q\xca\x10\xe0/L\xb7\x9b\xf5X\x00\xb70\xd1\x80X=\x14\x10\xf9\x94\x84\xa2\x08\x0b$W]N\x02\xba@\x89\x1c\x95\x05\x8a%\xe7\xb9@5\xf1\xb0\xe0\xf2\x15\x108\xc7\x0dlR+\xccq5\xcf\xa1\xed\xe2\x83\xe0\x08\x88u%\xa1L\x02\xc1\xe0h\x9eU\x92\xef\x1c\xe4\xb6\xd8D\xbe\xb7RG\xab8\x00\xb1\x1aG\xca\x91\xbe\x02\x0b\x01\xf9*\xcf1.\x89d\x03z\xf0}\xf4\x885zp\xac\xbd\x0f9D\xc1\x8c\xa7\xa1\x8d\x1e\xa1\xc9\x10\x19\x1b\xaa\xae\x1aA\xc1x(\xd7\xf5\xc5p\x92\xf8\x0cW\x13\x01J\x80\x18d#\x0c\x7fe4\x80\xb4\xd6\xd7\xf1\x8e/\x18M\x89\x1aT\x1a\x95\xc9\xae\xe9\x83.\xea\x07\xc4\x14\xf4S\"\x8b\xf9Q\x9e\xe3Ib\xd6\x1c\x89\xb1\x9f\xe0,\xb3\xf8\xfd\xb09U\x17}\xc8\x0bi\xf4\x80\x9eR\x8f\x167\xc2\xba\xd6z<#\x9dA]\xd2\xaa\xc82gZ\xf5\x8d+\x08\xff\xe8t2\x1dD*?\xa8\x01\xd7\xc0\xec\x11\xd5\xe1$D\xc9\x94\xcd\xb1\x94,by\xe1\xcb[\xd7\x95\xbfS1\xcf\xb2\x18ncu\xfb\x08\xdc\x83s\xdc])9P\x9f[\x9cbT\xc8\x01\x1f\x02)G\x1d\x12\xa3\xf0\x03s\xddv\x8c\x18\xe5\x13\xe6[\xf9\xf1H\x88]7A\x8c\x84do]\xab\x05)\xf2\xa6\xc1lV\xd6\x9e\x0f\xb1AK[\x1b$\xa7\x85\x84t\xaa%)g\xc3\xd2T\xe5\xd7ME\xb0\xb8u\xe6$hz\xb9d*\x11\xb1\xca@\xacO\xa6\x8b\\\xd4r\xcf\x7f\xab>\x89B\xce\xde\x96\xaf\xa3\xdd\x86\x17\xb7J\xd4\xf9\xe9\xc7\xef\xcbl\xbe\xaaD\xd9zI\x02R+_U\xd1c\xf0$$\x85\x9ar:'[\xea8\xa3\xa6`\xce)\x8d\x152\x96qV\x08\xa7\x89\x89\x12\xb0o\x1b\x914}C\x06\x98<\xf2M\x08\xbb\xdd\xdeGC\x8c\x89\xc1:\xf0\xbe\xd9\x96\xc2VW\x8af\x90\x9b\xd8N2\x95\xca=\xd2uyW\x0f\xb9\xfc\xc6\xa3h;qZ3\xeeH)\xd6+\xde)vo\x05>\x83\x02m\xcb\xa0\x82hE8&\x0b\xb4\x92\xe2\xf1\x8a$\x98\xac\xac@\xda\x91Z\x1c\xed\xeaZi\xdb\xab.\\\xa1\xf6\xa6\xce{\xeb\x9db\xcd\x84\xc5\xc5|\xab\xf1!\x96\xf8\xaa'O\xa5\x10\x11\xe5\xf7\x87%`Y[\x0e\xe6 ]\xf8\x96\x8a\xc9\x12\xe9k\x10l\x82\xc5-\xf6o\xcc#\xecW\xb3\x9a\x18\xba\xf4\x1b@k\xde\xef\x8a\x02\x87\x0eo\x96\x88\xcb\xea\xf5TA\xaaE\x05QNJM\x87\xdf\x1e\xec\x07\xcdS\xb90|\xd8\xa8\x92/B\xca\x0bHI3\xa4\xfcK\x90\xde\xa0\xc4\x82\x94\xe3/C\xa8\x9d\x96H\xa2@%;\xa5\xb1\xb47a\xc9\xa7\xe8H [b\x05\x04*\x0b\xed\n>M\xb8\xae9\xf5\xb0\x18\xb5r\xd3\xd4\xfd\xbae\xf7i\xc3\x19J\xe2yF\x9ba\xceP\xda(,\x84\xd8\x18C0~\x91\xdc?\xb0i<\x87\x88t\xd6\x11\xae\x85\xe6\xdb\x82\xedy\xc8\x89\xa8\xb6\n\x0c\x90\xa0\xc2d\x13\x0c\xea\xe2\x96(\xc5-\xcfP{!\x05-\x15Od\x9a\xcc%s\xa7\xfa\x16\x8f*\xe1\x19ih\x07\xb9T\xf7\x08rv\xc4\xb8<\xba)\xc0\\\x953WK\xff\xac$\x18I\x14\x86\xb6\x9aw\xc6\xa5\x80:\xe3N%\xdb\xa1\xb5\xdf!F\xe5``\xd7\x15\x13\xe693>\xe3\x8e'|\x96eV\xca\xbe\x1b\xbd\xcc-=\x81\xd6\xff\xc9\x9aA3R7+h\xb1G\x07I~2\xe5\xf3R\xdd\x10\xf3\xf8u\xb0\x10qr\xef\xc0\xa4\x19\xd5\x83>\x89@\\\xd2T\xa1Uv\xd0\x9fbt\xac\x03\xba\x14\x81\xfe\x18\x93\x92p2\xf9\xa0\xf1\xc5]\x10\xc9\xe7wA\xb4\xf7\x0e\xec\xb3h\x8aJ\xd3\xad\xca[s\xde&K\x98\xeb\xbdR\xe9=\x17\xc1g\x9a\xa2K\xb8\xd8{/\x11\x82\xa6\xa88\x9c\xb5\xdf\xed\x92\x90\xa6\xe8\xa7\x1f\xdf\xec\xbd)\xf6\x01\x9a\xc0B\xdc\xd06j\x7f\x81NdY\xbb\x91\xb2T\xba\xd4\x06\xcc\x06_n\xb9\xdc~\xd2\xb5\xa0\xa6\xec\xa0y\x01\x89%\xdb\x02\x8c\xe3P\xa9\xe9\xb5\x96\xfe\xb9\xb2\xe7\x18\x9e`\xb2\xd3\xdc\xe4\x96rtv\x82\xc9Jr\x95\x03L\x964\xed\xfe\x8d\x05\xb7?\x04[\xb9>5\xf3s\x03\xb0,\xc9\x86\xde\x80\x8a\x7fMo\xba7AJ\xee\xe9M7eb\x944\xf3\xc4\xf7\x8aU\xb9!@\xf1EU\xe0.Jm\x8aR8\xcb\x1ej\xd2hQj]\x96\xca\xf3\xc2\x00\xf1\x8en\x91\xdc\xaa\x04s\xf0h5\xbd\x9b\xd3v\x9f\x1c\x80F\x8ayw\x8f\x01\"w\x97;\xfe\xf0\x1b\xbe\x0f%#\x12C\xbcs\xc4\xc8C\x8es\xf9\xa5`\xc9\xeb8i*_<*,\x14!\x02\x0b\x12\x18\xe4\xd2\x18\x12\x1bJ\xe4hS\xca\xf6\xad\x88\xdep\x88O'\xc2\xeb\x88\xb5\x12\xb6`\xe1\x1dK\x88\x8ad\xd7J\xd8/\xbb0\xb1l\x8aZ<\x7f\xcch\xc5\x1cG=-\x8f\xa3\x00\xcfN\xb4\xe5\xd0\xd9@[\x0e\x0d\x14\xa2\x81\x9d\xd5\xeeK\xec\x88\xb6\xb0\xda\xedg[c4P\x16V\xa9\xb6\xb0Z\xd8\xc6U\x9a\x83\xa8\x98V)\xb6\xb3H\xa6\x80\xdaq\xb7\xcc\xcc\x81 \x9b\x8a\xf9c\x12\xe2\xd3\xa7\xaa\x83\xa7\xc3C&2\xba\xe6\x04\xc5`\xd9\xf6\xd8\xc1\x99}R\xf7H\x93\xa7\xb2I\x13\xc7\xe5\xf1V\xd9E\x7f\x12\xa3D\x8e\xc9\xf3~\xff\xe9\xe0\xf9\xf3\xe1\xd9\xe9\xd3\xd3\xfe\xf3\xe7\x03\xec\x7f1\xdd\xa8i\xf1Tw\xf2L\xcf\xe2y%\xafg\x05\xbci\x99\xfa\xcb\xc4\xb5\x93;\xc9\xab`q\x83*6\x87\x9c\x9a/s\xac\x86\xf9@\xb9\x86\xc7\xd0\x9e\xe8\x8a`\x0d\x9ad\x11\xac]WtoC\xbe\x84{y\xe1\xbaIa\x1e\n\xfa=\xb8a\xfaF'\xf0o\xd4\x04u\x94\xd2\xd0\xf0\x0b\x02\x8e\xbc\x8a\xeeB\xe6m\xb0\x8a\xd6\xbd\xa3E?\xb3l:W\xc6\xf5\xe1F\xb2\x12!\x9cr\xe8\xcb\xf2%\xfb\\\xbc4\x97\xfb_6\x8f\x85J\xa0\x12\x07\xcb\xff\x86\x1e:\xe9\"\x88\x82D\x1dq\x9b\xc7\xd6 w\x8c\x9c\x0f7,a\xad0m\x05-\x1e\xf3\x8e\xfa\x00\xb2\xa3\x82\x99\xdc\x0dk\x99\x16[Q\x98\x82\xc5x\xd0J\x177l\x13t[o\xcc+u\xfe\x15\xf2\xb5|\x9f\xee\x167PC\xba\x97\xdd\xb6\xeb\xc0\xf8BO\xf49\xf8\xd2TB\x03\xc59:\xa6A\x87L\xe7\xb5\xb2\xaf>\xd7\xca\x9a\x01j(+)\xd6\x0f\xc1\xd6\xde#\x81\xad\x96(E\x1fTG\xfd\x87\x9c\xa4\xec\x97\x9d\xe4\x9a\xe4\xf5&\xd8nC\xbe\x96\x97\xab \x8a\xae\x83\xc5\xad$\xdb%2'\x80qS\x85B\xf3)\xa0\xd6\x9c\xf2\xae)m\x9e\xb0\\\xb2\x9c\x8c\xf6\xc9\xbe.v\xc4\xc6b\xc4<:\xc0\xa5f\x8d\x95\xc8\x9d\xd8!\xfa\x1bG\xaayLp\x9ev\xbf}\xf5\xfa\xc5O\xdf\x7fPv\xd1\xa9\xe6R\x1aF`\xa4\x03\xf6\xed\xd9\xb1\x99L\x14\x8c\x16\x95\xd9=\x98\xf6\xe7\xd5\xbc\x14\xac\xf2\xaeRt`\x8a\x9a`x\x15\xbc\xfb[\x12\xf3u\x91\x9chU\xea\xba\xc0(\xe9R!\x98\x82\xbf\xd8\xaf\x1c\xf0\xdb`4\xe9\x8a\xd8XW\x11a\xdd\nL\xda\xac\xcb\xeeXr_]\x17\x86\xe2\xd8\x99\xf4\xd2\x1c\xe3\xeaZ\xb8,\xb2\xdd\x1aT\x07vK\xa3{\xdaBq\"\x91?\xe4\xeb\x88i\x10\xb5\xc1\"n-b.\x82\x90\x9buTy\xdb5\x9a\x85\xaf\x05-\xfc\n\xd0\xfe\xfe\xe2\x87\xef\xf5*\xab\xc0%\xd1\xfe\x10T\xd6;\xeb\xc8W6\x91\xa2\x07M\xa4$\xcf\xaa1\n\xd4u\xc4\x12i\xber78\x83=\xdd\x12\\\x9b\xcc\xa5\xa6\xf3R*SV\x85\xc2\xd0\xe3\xe2\xb0\xd7\xd6\x90n\xb5]Z\x95\x01\xe7\xe8\xf4\x19\xc6#)g\xdf\xb0$\x04\x9b\xd0\x93\x01\xd6jj\x8e\x06'\xcf\x14\x1f1\x90\xfboY\x0cm\x89%;G4F\xa9e&L\x16\xb4?Z\x94G\xa5\x0b#L\xefh4]\xccG\xdb\xb2\xect7\xcf2T}@\xd3\xcam5_\xa7RR\xc1\xc2\xb6\xa7|[\xc9\xe6,\xcb\x8d\x82J\x92{\xb9\x9c\xed[\xe6\xbam\xe5\xf6\x94\xb0`)\x85\x08\xd7U\xe4\xc2\xdc\xd3\xf6\xc0.fd\x0fS\xcc\xdcC1x\x12DQ\xfc\xe9\xbb Z\xbd\xdb2.\xb9\xde\xf2\xe3\xca+SC\xad\xbc\xa9&\xe6\x0b\x86\x1c\xc6\x97\x0eY\xe1\xaa\xc2`\xff3\xed\xabte\xa0\xb9\x94\x8cw\x97\xf1%[fYR\xa4\xe6GK\xa2\xacK\x8a\xea\x96J\xb9\xc3\xf8\x12\xe1\xbcY\xe5\xb4\xb5m\\L\x03\xdf\x85\xeb\x9b\xbf\x05\x82%?\x04\xc9\xadC\x1e\xaa\x02Z\xb3j\xaa \xc4\x1b\xbb\x9eX\xa8\xf61<\x04\x0c\x95\x02\x19&\xd6\xd8u\xaf\xf4\xcb\xba\xa4.\xabQdc\x17E\x1a\x01\x01'\x88\x85<\x02$\xbc=\xe2\x85\xf6\x04\xa1\x06\xdb\x91\xde\xec:\n\xf8\x1aM\xfc]\xb0fx\xd2A\xd3\xd9\xa7\xce\xdc\xc3\xb3\xeb^H8\x95\xb2\xe1\xc3&\xe0\xbb \xf2Y\xf7}\x12\xa6\x1b\xd7\xd5\x17]\xf5\x9c,\xc3T\xf6\xf2oqr\xcb\x92\x1f\x94\x12\xfc\xbb\x80/#\x96\xec\x7f\xf3Ha\xb2\x13a\xe4?(\xeb\x8eb\xaeZ\xcc:i\xa8$2\x8f'j\xfbP\xa9\x96 C\xa08\x14\x8cK\x89\xb5\x1bDa\x90b\x7f\xdf\xcc\x18,\x0e\x19\xf6E\xa9\xbds\xc1J*\xd8lG\xb6\xc9\xe5\x18\x9eF\xa2\xf2p\xb6\xeb\xf7\x03\xb0\x9ej98'\xb2\xe5&!\xf4\x8b\xe6\xb2\x95\x138\x12_\xff\xfcf\xd9T\x0f\xeb^]\x85\xcb,;\xa8\x1f\x97\xaf\x1ds\"\xecy<\xc7D}\x93\x93E\x14\xf3\xea8\x1a9E\xa9;\x92\xae\x1cp\x18<$\xb0a\x9a\xc0\xfe\xf7!'\x81\x8ev\xacZv \xd8\xaf\xf9\x04\xc0\x95\xfc\x08\x9f\x86\xf3\x82\xb2O\xc3r\xd3\x03[\xf3\x18,.\xc0\xe4\x9f\x08,\xea\x1e\x01\x90\xf9J\x19\x1a 1M\xe7\xc4J\x14\x17\xabh\xc50kE\x14\xe2\xe6\xf6'\xf2\xc7G1d\xa5\xd3\x8d5\nM ~\x88\xa7 \xb4\xa6\xc5\xae\x18\xd7\xf2\x89\xb4D\x0e\xda\x85\xef\x03\xbe\x96\x0b\xa22%\xca{\xcbu\xdbBi\xe9Xw\x11\x05i\xfa6\xd80<\x02\xe3\x9fm\x900.^EL\xf2z\x85 8\xb1Kj\xd3{\x81\xb3lJ\x1c\x1es\xe6\xcc\xf1\x9e\x91\x9b\xaf\xde\xe4d\xb1Kd\x95\x97 \xf9\xdb\x14\xb5\x9a\x99\xb9\xd0\x00.\xe3\x050\x9a\xc5\xa4\xec\xa2\x08,\x81+\x159!\xdf+i\xee\xbb\x95\x92#\x91\xdc?\xd4\x8c\x86\xb5\x02!1\x8a|\xd4\x0bDk\xfa\x11\xcd\x92\x19\x9f\x1f\xcf\x10\xea\x1ec\xbf\xeb\xf9]o\x86\x9f\xf4Be\xd7\x97\xe8\x83\x19)\xeb\xc9\xfe\x8el-w\xd1\xf6\x9a\x99\xd1K\xbf\xb9\xff\x10\xac\xe5\x88!G\xe9=\xac\xb8\xdc\\99\x19\xddv\x9a,\xac \xf8\xf2Qnu?\xcfs\x12\xe9\xf9L\xfd\x07\xf6Y0\xbe\xac\xa9N\x14y\xd4\xd8\x05\xeb\x06%\xdd\xe2\xa3)\x9b[adU\xdb\xdc\x1cs\x94\xe2\x0c y\xca\x12\xf1\x0d[\xc5 \xabY\x10\x17)H)\x8ai,\xf7\xfe\xa2v\x8d\xe6x\xb4W \xc5Y\x86\x02\xb9\x00\xc3i:W\x91i\x164\x9e\xb2\xd2[p\xca\xe64 \x16\xb4\xddo__\xdacCjj N)]\xb8\xaePI\xd5\x84\x0e\x95\x11\xc0r\x0br\xf2\xed\xeb\xcb\x1aE\xd2Ati\x08\x16R\x8a\xb3\xb5\x97yuT\xd4\xa47\x8d\x8a\xb6m\x10$%@L\xe2,K\x15\xa7\x1cQx\xb0\xa8\x10\xbc\x08\x8f\x0cikS\xba\xc8\xb2p\x1a\xa0\x08\xcf'\x9a\xe6T\x1ef\x19\xd2W\xc07\xa2\x88p\x92\x92\x10c\x7f\xff\xb9rx\xc6\xe0\xcb\xb6\x8dv\xeb\x90\xa7R\xe0\x96\x0cU\x14\xaeo\xc4\x8b(\xaa!_\xd2\xb5_\xfe\xc4\x97,AfE\x80\"\xb8\xfa5\x14\xd83P\x07\xd4\xa4\x0f\x0b#\xd7s\xa2\xa5#\xb9 \x93\x94E\x0c4\xf7Gro\x9d\x025:\xa6\x8e\x99\xc5\x8e3'\xad\xa6\xa7\xe0\xa6KZ{\x1f\xed\x7f`\n\x1f\xe5\xa3\xa4{\x13\xc7\xb7i7\xd9q\xe4\\\xc3j\xe8\x14\x1d\x08\xa2\xc8\x01\x9b\xaa.\xd3\x0b\xbd\xd9\x08B\x1f\x94\xc6\xdd\xa2\x1b\xdd_v,\xb9\xbf\xd4=y\x11E(\xee\x9a~a\xc9\x10\xed\xb7\x1aDQ\xc74S\x82 \xdb/\xdd\xd5\xc0\xb8.\xa4%<\xd3\xc0\xf3\xe6#l\xcd\x8a&I($m0f%\xca\xa2\xe0Z\x1d4\xd7\x8b\x95S\xa3q\xbb\x82\xd3\xd6\xe6\x82\xb8\x14\xdel:\x13\xccG\xbc\xdc*\xa8u]0 \x828\x15v$\xf54/\xe29\xadr\xe2\xbc@c>\xd7{\xd2\xdbx\xc9F\x91\xeb:\xdb\x04\x8cp\xa3.\x8f\x97`\x14R\xddx /^ A\xf4\x07 P\x8boA\x1f\xf4\xc0\xfa\xbc \xc3~@\xd6I\xb0\xd9\x04\x89\x9f\x12\xe0\xf6xW\xb0\xcf\xe2\xa5b\xdf,\x8d\xd4Nn\x12\x8br*\xd8\xf2e\xbcd\x945N\xb7\xa2\xbf\x0eY`\xb20\xd3\xd9\x0d9g\xc9w\x1f~\xf8\x9e\xeeUS\xad$X \x96\xd8X\xb2\xa8!\xd5\"\xdel#&\x18\xbc ]7T\x14\xa7h\n\xf47Mp\xa5\x01\x0f\xc5}gq\xc3\x16\xb7\xf0q{\xd1\x95\xbd6;\xd6\xe1V\xa4\x18\x82\x9a\x9aR\xf1^\x1e[hz\x18\xf48K\xb2\x19K.\\1\xde\n)\xb7pH\xa5\x9e\xa0\xa4\xbb\n#\xc6\x81\x99\xd9vc\xae\xadY*2\xc3\x0e\xb1\xee2\x10\x01\xce\xa5\xf4\x12\xa7B3\xf0\xa8vF\xfePL\xf4\xa2\xc0n5\xcf\xaa\xe3$\xdcl\xd82\x0c\x04{\x19\xc5\xa96wP~o;d-<\xa4\x8b\x17\xdd e}\x18\x8f\x8a\x0f`e)\xb9A\x7f\x82\xed\x85\xd9H,C\xfa\x00\x10\xb1\x02\x15E\x89\x9f\xbc\xb0\xd5m\x1acp\xfe\x0c\x7fe\x0e 1 \xbbp\x9b\x82\xa2N=G\xa1\xeee1\xfaM\x98V\xa9%\xb6F\xaf\xda\x1fS\xbfl\xa9\xe8{N\xcc\xd7\x8d\x8c\x0c8p(\xef\xf1\xd2.R\xb3 \xc20\x04#\xed\\\xa3\n\xeb\xcd_\"Dh\xfa\x1e\xa0\x05YtoX\xb0$\x0c\x93\xda\xb6\x1d\x92\x88,\xc8\x8el\xcb\x16V\x87\xf9\x96\x15v\xddp\xba\x9a+\x08\x97T^\x8f\x965'\xd0%\x9e,\xfd\xe9\xb2\x94\"nh\x7ft3^\x96\x8e\xbc*\x01\xff\xd6u\xb7\x94\xae<\x878\x9eqN\xd6g\xf4\xcb\xe9\xcd\x9c\xac\xe9\xa6\x1b\xf24\\2rO\xdb\xedM7\x8a\xe3\xdbkv\x13\xf2%\xb9\x83\x07\xeb\x84\xb1\xe5=\xb9\xa6}\xf2\x99n\x94\xac\x08>\xa6\xae\xdb\xdet\xb7p\xee\xcf\xb57\xbe\x02\xf9\x13-\x9f[\xae\x7f\xda\x91v\x1an\xd2\xdd\xfd\xfc\xf8I\x0fO\xfb\xf3QQ\x94\xfe\xc8\xd6\xaf>oQ\xf9\xad2\xb2#\x9f\xb3\xcf\x82\xbc\xa3\x8b\xd1m\x9bR\xde\x15A\x18\x8d\xdey\xf4V\x99\xc3\x1a\xcb\xd6[z\x0b%\x15\x90\xaf\xcck\x98zc\xe1&\xaan\xdc\xcav\xe7UE\x92\xd6^\xaeWt\xa0G\xe1\xb6\xad\xdb\xecn\x13v\x07\xa3\xbe)\xbdj\xe8;\xd2F/\xe9F\xb1\xf6\x02c\x1d\xb5C\xd6qI_\xaa\xc3#\x0f\xdd\xbb\xee\xcb\xe9`>\x91?\x1a\x06\xbf\x8f\xc9\x87\xa2\xc4\xcbi\xdf\xbc ?\xd3w\xd0\xff\x9f\xeb}\x1c]^\xd0\x9fG\xd8\xf4\x94\xec\x17\x08W\xe8\xe7N}d\xde\xd1\x9f\x89~T\xedj\x11\xa2\xc0\x8c\xf6\x0bz;zQ\x0c\xb2\xeb\xa2\x9f\xc7\x1f\xb2l\xcf\x98\xf0\x85\xaa\xccu\xdb/`Pts\n\x95\xf0\xe8\x05}\xa1f\xe2\xca\xf3$\x8c/\xaa0^u:\xe4\x15\x15Z\xec\x7fG~\xc6D\x8fB\x87\xbeS\xc7\xf3\xf6\x00+\x97\x85b\x88_\xc1\xde\xf2\x12?\xdc\xbb.\xba\xa6\x0d\xa3:*\xc7\xfd\x9a\xbc\xa40\xb2\xaa\xadk9\xe2\x97\xdeK\x03\x89\xac\xf8\x0d}U8>_b\xf2\xbe\xb8\xfd\x80\xc9\x8f\xf4\x16\xfa7z\xe3\xba\xe8G\x1a N~$o0y\xe7\xd17\x85\x9fw\nO\xaf\xd4\x1e\xff\x96*E\xcc\x8a\xac'\x16\x15|I\xd6\xd8\x7fI>\x93\x97\xe4\x0e\xf6\xab[]\xd9[L\xde\xbb\xae\xbc\xbe%\xef1\xb9\xba\x18\xb8\xae!*\xaam\xf2\x8e\xb4\xfb\xc4\xacp\xb2S\xf8U\x04\xab1\xf7\xf2?\xc4\xc8\x82\x08C\xa7\xfa\x984)\xe3 \xa7\x0c\n\xc0\x14\xa98,\xbc\xad\x0eO\xc3hT(\xe7M8\x10N\xb9*Y\xa8\x05\xd0B\xee(\x92\x86\xfb\x0fA\x14I\x96>X\x1e\x12#\x15\xad\x0f\xa2h\xc4\xa5\x00%\x7f\xe0\x8cS^\xa8\x96$S\x9f\xec\xf8\x97\xbe\x97\xa2\x98\\\xca\xaekVs!\xf5\xc5`\xca\x1eS>\x0d\x81_\x8de\x9d9\xf9\x00\x81 \xe2|/\x12\x84\xb2\xab\x07\x0d\"\xd8\xca0s\xce\x06,\x17\x15FI\x1e\x06\xa9v\xe0\xd7-\xd2~\x86\x92,\x93L\x9f^Z\xf0R\xe1=m\xb7\xadd\xcf\x9c\xe9Gg~\xecdG\xd3\x8fG\xf3\xe3#\xec\xa1\x89?\x9b\xa2\x89\x8f&m\xd9\x18\x9e~t\x8e\x1a\nf5H\xf0\xf1l>K\x8f\xf1\xe4\xa2\x17\x12\xb5wJ\xb1\x97, \x85ao\xdc\x9eM_~\xfb\xe2\xc3\x8b\xd9\xd4|4\x9f\xcb\xa2\x92\xb4Z0\xcez\x134i\xcf\x96x\xfaq\x96^\xccz\xf4\xc9\xf8\xcfs\x80)\x85\x9fc\xf3\\?<\xa6\xb3\xf4\x18M\xfc:t\xb2\xd8\x91s\x01\xc5\xe8t\x96^\xcc1\xce\xd4eO^c\x0fOf\xe9\xf1\xacW\x85\x97(\xb1\xca\x7f\xa8\x82\xf5Q\xc2\xa5[\x9e{\xbd\xb0(\xb6\x95\xebs\x07h\xa8K\xf5\x88\\~\xe96X0\xbf\xf7Q\x7f\xe3\xcf=\xbf\x97\xe7\xc4\x91d\xb6\xa3\xc2\xb4Y\xd5\x7f\xb1\x0f\xf8@\x93\xd3\xdeG\xda#\x16\x9cHN\xc1\xd49\x9ag\xf2\xe7I\x8f\x94\x92\xa1\x9c\x8dy\x9e\x93\n\xc8\xd0\x7f\x0d\x168]YP\x95\xfd-\xda>\xdc\xb5<'\x8c\x8bP\xdc\xfb=\xf7O\x93\xe9l\x19t~\x9d?\x0c\xc8\xb3|\xd4\x0b\xf3\x06\x9c\x96\x94_\x0b\xb1S{X\xe6\xfaaWUG\x1b\xbeTo\x087l\xe4ri6\xbf\x8ai\x8e\xa3\xca)ot\xb9\x16`\x01\x96\x1b]W\x84\"b\x94\x99-\xc9:.\x0d6\xdbQ\x8f8\xae\x83\x81U8\xe0\x12\xd3\xd8'\xe2\x04\xcb\xe5\x1b\x1e\x01 1\xe7\x96\xfb\\p\x02\x81\x8d\xa6\x96.\xda\x13sZ\x0e>\xfah\xad\x18lV6\x9a\xd0\xd9|6\xbfx\"\x11\xa22\xb5f\x8a,\xa0\xa6b\x9e\x93\xa4\x0b\x0b\x90\xf6\xec\xfa2UI/T\xd1\x8d\xe9\x83\xa3\xad\x87\x96\x1d(\xedT\xa8\xc6\xde\xc2\x85\xafK\x8cL\xf2|\x14\x1f\xee\x89\x86\xbdw\x00Bm\x17\xf4\x90\x8fB)J\x14\xdfi\xc5B\x0f\x8d\xaf\xaeL\xc3\x17\x18M\xfcC\x00\xcd\xd2\xe3L=\xc0\xc7r\xa0\xc6\xb3\xde\xd5\xd5\x05\xeei\x8dD9\xbbWW\xbdu\x93\x0b0\x93S\xed\x84\x0e\xae\x8d\xec\x1eq\x88\xab\xf8l\x9f\x8a!Ga\x82C\x1c5\x92\xe0V^\xa5\xe9\x9f7Q\x05\xab\xd5\x81]\xf9\xe5C\xad\xfc\x8d\xa8}\xa0\n\xd6\xd6\x94\xb8\xf9r\xa9\xf4n\xddTd_\xa0\xec!';\x92\x83=\x9b\xc9\x9fd\xc6\xcd\xd0f\x92:\x0f$u\x9e\xc1q(>\x9e\x0dz#fU\xbaHSk\xbf\x9a\xf5f\xc7\xc54\x1d\xcfz=\x12\x88d\x17\xd9\xfb\xd2\x7f*\x8b\x0cS\nM\xfc\x91\xa4\xd4\x92:?`\\\x12\x1f\xf8\xac\xf7Q\x17\xef\x11\xc7\x1c\x8etL\x07:\xc6\x0c\xd1F`4\xbb6\x05e\x95Hv =\x9ea,I%l\x85\x08\xcf3\xf9\xbc\xb8\x84\xbf\xb2\x88\xfc\xa7V\x1d|Q#\xa7\x04\x98z\xbf\x80\xc3\x91Tp\x97D~\x1d\x89\x9d]\x12\xcd\xa0\x05\xc7\x13\x1a\x1f=G\xd2w>KdSx6\xc3\x8e\xc2\xbd\xfd\xad\xc8\xf4\xce\xef}\xdc%Q/\xacR\xf0\x8f3\x94\xcd\xf0\x13\xb9\xbb\x14\x87`\xa6\xd9\xe9\xc7\x87|6K\xe7\xd0\xb5\x87|4\x93\x1b\x83\x0d\x82Z)3\xd9\xbb\xd9\x03v0Q\x82W\xd9\x01ao\xe5[M\xf9\xfc\xde\xb4s\x15t~\x9d}~\xd1\xef\xccv\xaf_\xbf~=\x9fvf\x9f\xec\xfbc5h>\xec\\\x1b\xc9\xf3\x04\x12\x1d\xda\xc55\xd8\xdf\x94]\x9bv\x82\xce\xaf\xfd\xces\xd8\xafg\x08\xd7\xbb9\x05\x1f\x19\x9f\xcc{9\xa9a[Wa\x94\xd97\x12\x96\xaa\x089V\x11\xedo\xc3\xf6p\x7f\x04\xe9\xf2a/*\xc9\xb6\x94?\xef#p\x0fNS\x07W\xda\xab.v\xd5\xa4S\xd9\xd7\xc9\x83\xfa\xbc#\x9f\xd9\x888K\x8f\xe1\x05-\x17\x97\xc2ykM\xa9\xf5Tn\xf6\xcd;\xf3GSUY\x92[\xfbi^\xc7\x10\xc5%M\x8f\x9cy&\x7ff\xe9\xf1\x93\xde!^\xa4k\xb17\xb5Q\xccs\x83\xf1\x05\xad\x97\x03\x94Kr(\x825\xc69\xaa\xb1\xaf\x8b(\xbce%5\x98\xda\xfb[\xa6\xfak\x13\x089&\xc7\xb3^\xf6\xa4\xbe\xd2r\xb2\xf7\xa5\x0f\x9f\xf6\xba\xc7\xf5EY\"\xec|\x0f\x9d{H\xb2E_O\xd8l\xecw@\xae\xdd\x9b\x0b4\xbbF\x13\x1f\xdee \n\xad\x82\x05\xcb\x14MO\xb3p\xb3\xd5\xa7\xae\x99H\x82Pd\xa5\xcc\x90q\xf6 C\x90\xe5k\xb07\x99\xa5\xde\x0c\xe1\xe9\xecSw6\x03\x1e\xb3q\x7f\xafr\x9cSYV.\xfd[v\xff)N\x96~\x0f\xa0 W\x19\x8bR\x96}\xba #\x96-\xe3l\x15'\x99\xda\xe5\xb2\x90\xdb0\x98\x05(\x81\xc9Dr\x9f\x81)L\x06\x00e\xab\x90\x07Qt\x9f\xf1]\x14e\xa0\x90\xcc\x8cn\x19\xcf\xae{\xe4:\x8e#\x16p\xdd\xa8Hv,[\x05Q\xaa^\x96K{\xf6\xc9\xaci\xa2\x0c\xc6\xe5\x07\xfd\xcf\xc0#\xae\xe6\xde\xec:\x93Sq=[z\xb3\xeed\xb6<\xcef\xdf\xcc\xba\xb3\xa5'\xa7\x89M\xbd\xce|\"o&\xbd\x90H\xf2\x13H\x02\xd7\x9b\x8e/\xe6t\x92M\xdbtN't\x92u:\x93l\xe6\xcd\xbcI\xe6\xba\x93l\x96\xcd\xb2I6\x9d\x1c\xf7\xfe\xf5\xf1\xcf\xf3^\x8d\x92<\xe4\xd3\xd9|\x840\xe9\xfa\x92\x9a\xd8\xf8\xfasp\x17(c\x9c\xc6\x1d\x1a\xd0Y.p\x1b\x15\xa6{\x08?\xb5\xdf\xcf\xeb\xa8\xfb\xa4J(\xf1\xf4\xea\xc9\x8b\xce?*\xb4\xf4I\x03-\xed\xa2\x89_\xe8\x882\xcb\xedoo[\xca\xe7\x05:\xd8\x0b\x0eM\xfc\x8fYnv\xbd\xca\x0c\xc3\x84=\xbe\xe0\xba\xf3l\xd6\x85\xff\xd3c\x0c\xf3\x1d\xa4Y\x90\xde\xf3\x85\"\xf4hR0\xb9\xb3\xebl\x86\xb2z'\xb2'\x18g\xc1'\xb9\x064*\x05)\xcb\xd4\xba\x81\xde\x14\xb8\x95-\xd9\xf5n\xbdfI\xa6m\xd72u\x90'\x11\x19\xd0\x9a\xf1\xdd&S\x82t\xb1\xd0$\x86\xaf\x92xSb\xf4\x9a\x89,\\\xd9+P\xed=\xb5\x15P\xae\xd9\x88 X\x06\x80\xee\xf1*\xdb\x06\x8b\xdb`\xcd\xb2m\x12\xde\x05B\xfe\x8d\x05[\x08\xb6\xcc\xb6\xbb\xeb(\\\x98\x15\x952\x91\xa5\"\x10\xe1\"\x03\x87\x83L\x19\x1a\x82e\xb4^O\xb0\xb2@\x99\x90\x15\xfa\x85\xec.H \xc6\x92^\xa6\x9fBq\x93\xdd\x87,Z6L\xc7\xdcZ: \x9b\xfb\xfd\xe9\xe7\xff\x03\x1b\xfbl\xf9\xa2\xf3Z\xae$4\xf1\xaf\xca;<\xc1^\xd6\x9f^\x7f\x03\x85\xfa\x03\xf5\xba?0/\xe2w\xeaE\xe7\xa9~\xd3y\n\xaf0\x9f\xc0z\\\xca\xa7\xb3\xa5|\xc4\xb3\xb7\xc1\xdb\xec\x0d_\x85<\x14\x12Y\xd4\x82\xad\x95\x9au'\xd5'j!\xd7J\x01\xc7\xf5\x8a\xcda]\xd7\xdfMl\xb2\xf1\xa7\xc9\xf4\xeaI\xd0\xf9\xf5k\x16\x07\xe0\x1f\xe0\xa6D\xcc\xed6\xba\xcf\xaeC\xbe\xcc\x16A\x14\x01\xc6O\x80\xfc\x94\xf4\xa3\xd3\x01r\x91\xcd\x8eg\xc7t\x92\xd1\x8b\xccu\x81l(\x92B\xb3\xf1\x98N\xb2\x8b\x8b\x0bI\\\xa6\x1d\xef\xb8\xf7g7\xfb\xd8\xa6\x8a\xec\xcc\xba\x0f'y6\x9bL\xbb\x93\xf9$\x9b\xfeK\xd2\x11|\x80\x90T\x89\xc1\xb4?/\x8eN\xbf~\xeb\xd8\xdf4\xca}\xe2\x11Q\xa4\x04\xc2!\x8e& \x0eyH\xd8\x9a}\xf6\xeb\x94\xa1N\x98\xba\xce\x91\xdc\x9d\xd39\x8c\xdf\xacg\xd4B\xd3\x8f\xb3\xb9\xde\"\xb3\xd9\xac\x8b\x8f\xe1O6\xfd\xd8\x9bI~\x06\xb6No\xd6\x9b\xae\xc3\xcd\xfd.\x9d?\xf4\xc9y\x8e&\x14\x945Y]\x1a\xc0r\xbe\x9ed\xf0\x19\xe9\x8e\xfc\x1c\xcf\xe6sY\xaa\xb7\xcfl\xdb[q\xc1\xf0\xdf\x05I\x18\\G\x95\x1d\xf9\xb7!\xce\x94\xfas\x8d7\x92\x9a\x01\xb2\x00z[\xe4L\xde\x1f\x92\x0f\xb2\xafkL\x8e\"\xbd\x90\xbd\xd2,\x94\xa9\xde\xc9\xc96H\x82\x0d\x13,\xa9\xd0\xebB*\x93#\xe7\xa9]\xa2\xcet\xef\xb5\x02:-\xa4h|{\x96\xe2&\xa0\x1f\x11h\xf6Et\x0b\x93\xed=Au\xfa+\x86\x97^`\x9bI\xfdR\xbd\xe8\xeb\x81\xd7\x95\xff\xde\x1e \x98\xe4l\x96f\x1fes\xd6\x86\xd6\xb0K\xc1f\xf9\xbf\xb7Wi\xbe\xea\xffW{\x16\x9a\xb4\xeb(\x80a\x06\xbf\nq\x81\xc6\xfc\x96\xa9\x9f=\xfc\xc6\xa9\x9f\x13\x989\x90Bg\xd7\xd3\x17\x9d\x7f\xc0\xfe\xf7\xa2\xf3\x8f\xaby6[~\x9e\xe0\xe3\xd9u\x9d\x8c?BO\xf5\x11%yp\x04\xdbl\xa3@\xb0\x8e~d\x91\xa2\x7f\xdaR\xde\xec\xc9\x83\x16\xc4\xe7\x99u5\xfd\x98\xcf\x8fs|\x9cc/\x07!\xe4\xc9\x03H!\xff\x9c\xe3\xe3\x7f\xf6\x1a\xf4\x01e\x83\x16_[\x11\x0f\xff\x99\xfd\xf3IAh4T9\x01\xac\xd9\xc6\x91\xe2\x83\xf7\xe9\xbf\x94\xc6\x00\xde\x87a\x8e\x8f\xf1W\x80{`\x06\x1e\x9cJS\x07\xc1\x9c=y\xc8\xf2\x12P\xbbXN\xa4\x18\x7fh.s#\xd8\x15\xca\xc5\xbc\xaedS\xe2=\x98\x15\xd4\x9e\xed\x0b\xfbfJ\xad\xf9\xad\xed\xe6)m\x86\x844\x1d\x17\xa5,Z\xa9\x13\"\xe3\x1b\x04\xd7\xe6(\xccu\x8bC\xb1\x8a\xc1\xaf\xeb\xa2\xf2\x1b8\xc7\xfb\xce\x9c\xf1Ul\x14\x19eYf\xaa0\x81?\x7fN\xfd\nzn\xef}g{/nb\xee\x90\xe4\xdaw\x92\xdd\xf5\xbdC\xb6\xe9\xc0w\xb6\xf1'\x96\xa47,\x8a\xe4\x83M\xedIz\xe3;\xd7Az\xe3\x90\xeb@\xc8K\xb1\xb8q\xc8\x8d\xef,\x1c\"\xd8g)\xfa\x0b\xf6\xd9\xc9\xf7\xe3\xfc\x97a\xfe\xd9\xbe%\xb3\xb3M\xd8\x14\x0e\x1f\xd3d1w0>\xe8\x00\xdffMG\x96i\xb2\xe8D\xea\x98\x10[\xb6 $\xa6\xac\xbbf\xa2\xa1\xb8\x83IH\x19 \x1e\xf7\x00\x1b\x85\xae\xdb\x0e\x94\xbbKXqw ih\x9b\x16\x87+\x14B\xf2\xba\x06_\x97@\xf9\xba(?\x17\\$\xccM)\x8a\x8d\xfd\xdc\xac\x8bf\x9f<\xfc\xa4g\x17\x1d%`\xb8\x9fei\xae\x0e\x81K\x17\x15p\x8f5f\xd9*\xcc\x1d\x1e\xd9\x86\xcb\xb6\xba=!\xcc\xb6.\xa6\x8eC\xa2\xea\x83\xef\xd5\x91\xed\xff\xf3\x7f\xfd\xdf\x0e\x01\xcbs\xc6\x97/o\xc2h\x89\xfe_\xf6\xde\xb59n$;\x10\x8d{?\xce\xaf\xa8J\xf5\x14\x91D\xd6\x8bRwO\xa3\x98\xc4h$\xf6\x8cN\x9e\xe4\x85\xc7\x11\x13>\x13\xd8\x19\x18z\xc7\x0d?i\xb0\xd9<=GxIF\x9d\x84\x85ca\xeb\x08\x0e\x83\xc8[\xdd\x8f\xebw\x16\xebX\x05D\x87\xc0o\n\x81\xa5G\x1b(\xa7\x0b\xf9\xa0dVk\xf4[\x0cW\xfc\x1d\x19[<\xad\xf0\x87d\xdc\xe3\xef\xcaK\xe4\x0d\xb1\x0d.n\xf8V\xe1\x04\x1cM\xb5\x1el\x1ex\xe1F\xda\xe0\x1dl\xccXz\x1c\x8d\x1bQX\x8e\xe8p\x83\x17\x967:r\x11\x97}\xe0S\xe5\xa6 \x0do\xd1\x11\xdd-[\xaab)\xde&\xa0\x92\xe6:\xe1V]{\xf7&\xaf\x9f\xfeD\xf8\x89)|\x96\x17\x0e\xd6\x94i\xa4t \xd1S\xd6\x82\x1a\xc1\xe5:9\x82\xb0\xf0r }MT\xb3\x86+yI\xa8ro\xad\xe6&qM~\x12\xab\x12w\xebJ\x90\xa8\xb6\x0c\xf8\xaa\xbd\x01r\xe5x\xb6\xf0\xc8Y\xe7\xda\xa8\xe4\x13A}\x14\x9eCdM\x920\x0b\x87O\x1d?y\x12\xa5\x9ci\xd0\x98\xe8\xa9\x82\x96\xea<\xcbV=\x15\xb2V\x8bW\xdb\xe4\xf5\xea\xae\xdd\x84k\x8c::\xad\x06*\xb2\x99\x05\x117\x1d\xd7r\x98\xbb,y\x99\x9b3\xaf6\xba\x0e\x89\x95\x9a\x98t\xad7\x08M\xda\xc7\xb1IYn\x1f\xb0,\xf5\xe8 \x9bz\xa9\xff\x82\xfd\x1b\x16\xd7z\xcc\xea\x89\xe0\xb8\xc2\xe7j\xe7\xc9\xee\xd7\xef\xef?\xfa\xd6\xee\xe1\xa3'\x1f>z\xf2h\xff;\x94\xd2~\xb7\xd4C\xb1)\xaa\x07\x0e\\\xa5\x83\xef4 \"\x89\xa9\xe1W<9\xe2\xdc\x1d\xe0v,\xc0gND}'t\xcb\xf6\x8bu3\xa7$|\xe4c\xfdVv\xce\xcbT\x8d\xc1\x1b\x07\xc9\xae\x0e\x99U\x135(\x84\xc8>\xbc\xd2\xaf\x89\xe3\xf5:\xea\x91'\xef\x1a\xf9\x88\"O\x16AP\x07\x86\xa0X\xaa\xe5z\x1a\x7f\xac$\xd7\xf5\x05\xf2\xfc|0\xeb\xe0X \x11+\n\x08\x0c\xd5\x15X ),\x0b\x9c\xcf\x8e\xa2:\xc8Q\x02_V\n\xdc\x08|\xce\xe1dfq\x1dZW\xbbB\xbf\xc8Q\xc1\xff\xe7\x9c\xbc\xbc\xe8\xc3\x92\xdf\x9e\xd5\xf6\xf8\xf7Jk\xb0\n\xdcT\x062\xe4\x85\xb2\xac\xa4\xf5/\xec\x96E\x88\x0bYE]]\xf9zR\xc5\xe7\xb3\xd8\x9f\x81\xfb\xfc\x9b\xa8'\xcbj\x08/\xcbV\xa9\xa0\xc6\xb8\x00\xd2\xaac\xa9\xc5\x18\x90p\x88\xc0\xc1\x94\xe5\x8f\xd5\xb8\n\xef\xe2\x8e\xf8P\x13^a\xedl&\xa5\xd8z\x9c\x8b\xe4\x9a\xc9\xfdA\xbcC{\x83\xb8\xddVZ\xc4\xcc\x89\xdd\x01\xeapDG\xb6\x8a_f\xc4\xa4\x8f-\xd4\x91\xc9F)\x9d\x84\xa6\x89\xadPx\x9d\xd4\x93\xdbm\xd0\xcc\x14\xeck\x10\xb6\xdb\x83\x10\xb3\xce\"L\x8e\xfdIj\xf0\xda\xb4u]_j\x94\xb7;\xe9\xc8\xacP\x88\x95\x8e\xcdR\xddq\xac\xe3Jg\xb6Lwf\x9b\x82\xf3W\x12\x13\x86\xf9.X\xb8GsbWsOU\x84\xc1\xd1V\xcb\"\x08\x01B$\xa2\xcd>\xf1W\\`\xb5\xfb\x03\x7f\x87\xb6\xfb\xadV3\x1a\xf8\nu\x1e\xf5wh\xcf\xd6\xfd\xcd[LD\xc8\x19hJ\xdd\xb9\x0c\xe4\xd5\xc7\xd2\xbe\x9f\xbb\x92J\xa3\xc6\xdcK\x8f\x15\x94y\xd4nQQ\x820\xe8S\xa7\xd43Q\x17\x99)\x89d0\x11O\x8b\x07&\xe5\x01#\xb2QW\xf8\xb16R\x1a\x1a\xb1\x91*\xc7\xb3]\x84I\x8dK\xa7f\x13\xf4\x81\x9a\x91\x16\xb3\x0bg\x19\xea@\xe8\x9b0\x8ag^\xe0\x7f\x97\xad\xb8\x1c\xf1),\x08GI\x14\xf0\xed \xc3\xc4\x93`E\x06#\xed\xbe\xc2\xbf\xc1\x00\x0cvK0\xfc2\x18>D\xe9F\x1d\x04.\x828\x1a\x98IE\x1d~\xdeS9\xa7\x14,u\x0cA\xc6j\xc9\xf1\xb5\x94\x9equ\x8a\x10\x06\x0f7\xec\xf7\x0b\xc7\xe3=\xac\xd9\x1b(\x14\xf1^Vc\xf6\xd5\xd1\x03\xbb-=p\x00k\x88!\x9fIX\xc7\xd5\x12\xa2=\x05^\x85\xb9\x81\x89\x836\xe3t\xc2\xef\x0d\xd2|.\xb5Z\"\xec\x9c\x93\xba\x83\xd44\xf5y\xa7\xf1\x90\x10\xe2\x1a\xc9\x9c\xa1\xcb\xa7\xba\x16\xf3(\xe42\x99\xc4\x18\x97T\xdb\xa9\xd9\xc7KF\xf3\xf9\x07\xeeRT4\x19\x12j\x1fB\xedC\xe1\xa1\x81\x96\xe9\x06B`\x1aa)\xc5\xcb\x1dH\x1a*\xda\x03\xf1\x0b\xeb&\xea\x91\x80\xf6\x06\xc1\xb67\x08L\x13\x8cg\x9d\xc0mR\xea;\x81\x8b/\x12\x1a\x08\xefo\xd2jRz\xfb\nh2\x08\xb6\xf3\xe8\x11\xbc\xe4Hp\x16\x9d\x97\x19#:R\x1e\xae}\xd9\xeb\x04\xeb\x83\x02\xc1\xa3\xd8\x9c\x13,\x81x)|\xf1a1E\x16\xbc\xfb1h\xb0\xeb\xe4ZK/\x92\xea\x11&z\xe4=\x15\x8d\xba\x83\xb4\xd0I\xa5@\xec=\x8e\xe3{\xef\x83\xa5{L\xdb}\xce\xe6z\xc4\xd7\x07\xd4\xdf\xa1\xfdA\xbb\x0d\xb6\x9e\x90\xd3\xa8\xd4\xe1c\xe1\xa8\xa2\xc9\xb7\"\xd4\x97\xd8\x92\xd1\xcfi\xee|^8\x9b\xb4C1';\x88\xaf\x12\"\x89'\xb0\xdcF-\x06\x9c\x1cy \xabt\x9d\xd4\xfa6\xba\x01\x17\xe2DPz6\x92}\x03D\xa4z\xffR\xbe\xe8\xb5\xdbi\xde\xbfR\xe7\xd2\xa2o!M\xcd\xbe\xde;\xd1\xa3V\xcb\x80\xb5!\xe6\x9fq\xb9\xb3\xa8\xe8\x18l\xe4\xb4xY)_\x8a$A\xb7\xfb\x9b\xb9\xe1\xa6\x88\xd5e\x844,\xc2F\xe5\xd1Q\xf3\\\x10\xde3\xe5;\x86\x15\xfa\xb8 !\x05\x15\xb4\xfbe\xbc\x10\x9f\xf6\x88\xa7\xe3\xc5\x13x\xc9#K\x8e\xa2\xf1y6\xf2\x80\xb8\xb2\x11\x0bS\x16g\xa3(\xe0\xff\xa7q\xb4\x98g\xe3q6f\xa9\xe7\x07I6\xf6\xbd \x9afc?\xce\xc6\xfe\x8bl\x1cd\xe34\x9b\xf8,\x18'\x8c?LU=p\xaf\xc3\xb2I\x14\xf1\xea&Q<\xcb&\xb17c\xe2/\xcf|\xec\xf4\xdb\xef\xb90\x7f\xe1\x0f\x8b3>\x9d\xd3Y\x90\xf9\"k\xc0\xa6,\x1cg\x81\x9f\xf19\x97\xcd\x98\xd9\x8c\xa5^\x16z/\xb20\x12\xf5fQ\x90E\xf3T\xc0-\xe6K6\xcf@\x19*K\x18L\xf0LF'N\x16\xb3\x99\x17\x9fg\xc0\x96\xb2\x14\xb0\x90\x8e\xb3\x94\x83\x9c\xa5\xc7Y\n\x90\x01\x95fi\x9c\xa5\xb17:\xc9\x16\x82\xaa\xe5\xcaC\xc1t\xd2\xb0\x9bmX\x0f4\x0b\xcaPX\xd8p\xd2\xe1\x0f`\x86Q\x0c\xaa,\xaeW\xa5O\x11o\x8a\xe4Xj\xa9\xf9\x82\x81H\xb7a:B=\xcc:t\x9d\xe1i\xc7j\xc3\x14hl\xd2\xc6&\xe2\xb38t7Q\x06\xafj&o\x88W\xce\xc2\xd1\x06\xdd\xde\xf9\xc45\xb1\xdd\xad\x90O\xcei\x01\xf0\x82\xf1V\xe8;\xec\x1c\xc7z\x92`\xbc\x88 \xc1\xc4\x85\x1c\xd20\xf5\x1e\xe7\xec\x19\x95\x1ca\xa1\x82\x0c\xf3\xe2;\xfaw\xc1\xc1\xf3o\x86m\xe9\xb2\x97s\xf0\x89\x12\x08\xf4B|\xb2\xeaE\x04+\xe9;\x1d\xec\xe2\x86\x9e\x91\x0f\x0d\"\x88\xaf\xef\xb6\xb5\xba\xc2\xf3\xa5\xdc\xaa.\xb3Y\xb3\xdd.\xcd\xd0\xd2p\x95\xb9Y\xde9\xc0g\xf1\xaa\x95\xceq\x8ct\xfcW*\x12\x0b\x06=7.\x96\x04\xac!\xa6\x93\x99|S\x8b\xc9\x85Zg\xbb\x07\x8dM\xc39\xc8\x86a\xc3\xedl\x0e\xb3\x0e\x17LyR\xdbr\xcd\xc6\xe60s\xdaY\xc3R\xd2\x1d\x97:;\x9b\xce\xc1\x8e\xc8\x9eK|\x9b \xb2\xf1\xe5\xb7\xa8u\x98\x19\x1dX\xaa7\x87\x99m46\xa1\xc6\x95\xda\x1a7\xd5\x06\n5jQ\xab\xf6\x00$\xc3\x89\x81\x0e`\xf9\x97\xf3\xa2\xa1d\x97!\xc8\x8f\xd96HbJ\x8a1m!\x18\xaa\\ \xcd\xa8\x9c\xa97\xe5\xa9\xc89\x18\"wsX\xd8\xc0\x0e\x87 \x9f\x15\xa8\xbb3\x1c&|\x95\xb0\xbbv]\x15\xf8\xd6s\xb6\x9bz\xd3\xee\x94 \xa9\xf4\x97\xb1Y\x96\xa4q\x14N\xb3d\xe6\x05A\x96d#?e\xd9\x8fe\xe3I\x98yGGq6\xf6R/K\xfd\x19\xcb\xf8\xae\x03t\xe0\x12o6\xcfN\x8e\xc6Y\xb28\xca\x92\xc5<\xf3\xb3\xa3l\x91\xcd\xbc\xf8$\x8b\x17G\xe7Y\x9cf\xf1<;\x1a\xfb\xd9\xd18\xca\x92\xb9\x17fGqvz\x14g~\x98dc\x16d\xfel\x8a\x87\xc3#<\x04\xfb\x88\xa6\x05\x1aX\xa7\xc3a\xf2Uw\xf3\xab\xfcKy\xc1\x90\"\xdf\xe6\xd0\xe1r\x95\xcb\x051.\xefUE=\xbe\xa3@\x86+D%\x07a\xb7*\xe3i[\x91\xcd|\x1b\xb2)e5[\x88sw\xcc\x86\xd4\x82\x95\x85\xe4\xa6jJ\n\xf9\x8e\xcf\x12A\x0d\x9f\x87\xf9lJ\xc6\xb3 \xed\x96\x18B\x9e+\xec\xa8\xe7\xb7`BY\xce\x85\xca,M\xb0\x99R\x9a\xe4(%4/1\x89\x95\xa0F\xe2N\xc0\xce*g1\xea\xf0\x9c\x9d6 \xbez\xc0\xce\xe0\n'\xd6\x8eF\xcb\xa5\x8a\xcdu)\xdew\xcc\xe7I\xacb\xaai\x1fR\xf06\xd8h4\xd6ze\xd6\x93\xb7\xee\x89p\xf8\xbc\x12M\xf45\x18i\xf6*`\xc1\x87\x9a\xa3%\x19\x1d\x8a$\xe0\xf0lN&dL\x8e\xc9\x8cL\xc999#\xa7p~R\x82\xfd\xa0a\xbe\xd3\x9d\xce8\xea\x06l\x80\xfd\x89a\x88\x90\xc3\x02s\x1d\xb9UW\xf1\xeeq)\xe2\xbb\x8a\xe1\x9c\x9fEj/;}\xe9\xe6\\\x8a\xefp\xb4(\xfc\xb3 0;GK8\xec\xd4\xda\xe232o\x08\xbasB\xb5*\x9c\xd2n@\x9e\xf2\xb8\x83\x1b\xc09i\xb54FO)=\x01\xdbq\xfb\x04\x14\x7fL\xca1mB\x894\xf6g\xcf\x85\xce\x8de\xf8\x14\xd24\x1c]\xdc[J$\x91u}\x12\xe1K\xf9\xdf\xafq\xb2\xde\xe3k\x96\x85\xfcp\xcc\x05\xbb1\x12\xfb\x9e\xfa\xad\x87o\x1dA\xb8\xf2\x10B\xb2\xe4\x8e\xa3J\xb8\x11S!\xc7\xce\x0d\x9d\xbe\x19\xc0\xc0\x0b\xa7\x96\xefl\xb96\xff\x03\xfd60$\x08\x08}\xe7.\xb8\x8cY\x16GZ%8\xe4,\xfe\"\x80\xe4La\xcc\xe6\xe9\xb1\xe5\x17\xae\xc1\x14\x08[\xae\xd6|\x85\x1e\xc5r\xab\xd3c \xdd\xfe \xf8\x82\x88\x10j\xad\x17\x06\xd4\xac\x8d\"\xec\x98\xb3\xc6\xe6;|\x92\xc1\xc1z\xe0OCh\xaf\x9cM\xcb$\x0f\xe2\xbb\xa2d\x17\x93\x11\x0b\x82\x04\xd0d\xf3?\xda\xfc\x0d\xdf\xe9j%`8-\xc7]\xe2\x8e\x00H\xf9\x7f\xa24\xe8@\xc3\nQ\x17jR\xae\xc1\xa3p,X.486M\xccam\x9b\x16\x87Uh=\xca<\xce\xb1\x8b\xed\xe2\x99\xa2\x18|l\xc22a\xdd\xaa\x80\xd8\x8d\xe4%\xde\\ `\x93\x14YZ\n\xf8\xf2\xe6\x1dS\xd0\x03\xdet\xe8e\x12\xcf\xfc\xc2(^HP\xc6\x17\x1e\xac\xd0Q\xb0f\x8e\x1c\xc7_\x88,\xe3\xb5D_,T_\xa4\x81\xa2\x96\xc3$\xf5\xe2\x14-9\xff\xab\xb2\x9a\xcd\x9d\x86\xbd\xcak\x0c\x1fB\xdb\xbd\xb9f\x16\x8e\xd7v\x83/\x9c\x05\x7f}\x03\xd5\x8d\xd4\xac\xe2\xa5$\xc0$\x8a\xc7,fc\xeb\x9c\x1a\x1e\xe5\xf3\x06\xe7\xdc\x9e@\x16\xeb\xdc6=\x0b!\x12D\xe0+\xb5\xbf\\\x05z\x84\xc9\\\\t7\xfbdJ\x15\xbb\x95\xbe\xe6\x0bp\xf9N3\xd7\x08\x92\xb3`\n\xa43\xa6F@}N\x84\xea\xebgF@\x83\x12\x1a\x0du\x90a\x0e;\xb8\xb1 S\x13\x17\x91E\x87a\x03\x9c&\x8d\xdbT\xc5\x96!\x01\xad\xe7\xcf\xa5\x8a/\xfa$_\x0c\xac\xe2\x0b\x17\"\x94\xa9>dB\xe6\xd8DK$\xce=\x04\xbb9nR:m\xf7!\xce\xb3:\xc2\x10\xe3\xe1;\xc7f\xdf\xc5N\xcf%\x86\x97\xa3\xd4\xeeSJ\xd5\x9c\xb1\xf2 \xd0}\x19\xa8E\xc1\x99\xcc\xbc\x18tM\x93V+iR\xea\x89EZ]\xd7\x1d\x9b}\xacEH5\x199\xe6P`L\"\x1agYw\x18\x8a#\x1c8&\x96\xb3\\\x875\x86e\x12\xd8\x96\xbcZ\x0e\xf2\xd5\x17\x93(\xcb\x8c\x88\xc6\xbc6P\x10\x86q\xa7\xcd\x1e&\xa72\xd451\xceh\xf7`\xe88\x8d\xb3\x1fu\x87n#o\x83\x83yJQ\x035)\x0d\x9c\xbeK\xcaCX\x940\xc5\xe0\x91I\x89$9y(\xbaL\xbd\xe4\xc4:#\xe0\xb4\x98\x8d\xadSI~\x11\xb8\xfe\xe547\xa9\x99<\xa54# y\xd4\x9c\x9a\x19V\xb4('\x98?Q\x9d\x05\x85\x90)\x9d\xd7\x11\xea\xdc9vs\x94\xac22\xbdrQ\xef\x1a\xc6\x96\xce\x82/\xc0y\xca\xd4\xe2\x85~\xea\x7f\x97\xd9\x9add\xc9\x1d\xf9\xb6\xe1U)i\xb4\xfb\xb8\nhy\xba\xb1\xb3\xf4\x8b`\x8c\x97G\n\x1f%\x8e\xa5\xabF\xe5a|\xc1\x1c\x9f5\x82(\x9a7\xa2\xb0qt\x9e\x82\xb9JE\xd5\xa5\xd0\xbd(ZU\xba\x01\x17,\x19ys\xb8S\x1f\x1aN\x13\xddy\xe7\xcb\xad\x0d\x03o\x9ad\xd8\xeet\xad\xc16\xdd\xb1\xbf:t\x86\xeepxp\xf8\xc9E\xb6\xfc\xcc\xc5]\xe2-\xd2\x883$\xab{\xb0m@pEf9\x07\xc3dx\xd6\xeb\xb5\x87g\xfd\xc9\xf6\x8e\xbb\x99\xb1\x99\xe7\x07x\xa7\x0b\x0e\x91\xa6\xc2\x83\xea\x81<\x8c\xcb\x0e\xb6\xbb\xf2T\x1c.A-u\x0b\x9a\x1dl\xeb\xe9\xe2\xa8\\\xbf~\xe5\xb9\xba6\xcf\xb7rq\x9c\x1dl7Uas8L\xb4\xcbc\xfe\xe9\xa6\x9bcDd\x7f\x9a\xb6v\x9b\n\xf6\xa8\x06g\xb8pb\x9a\x98\xf9\xa5)\x18\xa1vI\xcc&\xb5\xe5\x9c\xe2JO\xbb\xd3\xb3\xe5\xa5\xdep\xe8b\x13\x0f\xdd. #\xbdx\xa9\x8c#/\x007\x87n\xb6r)\xb8\x89\x87.d\x1a\xba\xd8\xee\x12qziu\x0f\x0e\x0f\xe1,\xf0\xd0\xc5\x87\x87\x86\xdd<\xc4\xd9\xc1ps\x08g{\xc9\xa6\x8b\xe1\xd9n\x0e7q\xa6\xb2\xba\xea\"\x04^j\x8aU2\x14Ut \x9b\xf1&\xf3\x16\xf3\x92\xa2\xb9\xed\xa1\xc3\xb3\xe7\xedA\xeav\xa9:U\n\xfc\x1cj\xc6\x9fn\x9e\xffp\xbb\n\xe0\xba\xfc\xb2\xd9mT*0\xdc\xcca\xb8\xa1\xd0&\xe2\xc0V;\xaa\xba\xa9\x14M>1A}\x84\x8f\xc2'Z\xe6O\\<\xec\x1bv\xf3\x13\xdc%G\xb1\xd0\xba\x10\xa7\xd2X\x13\x91\xc9\x98\xc1$\x10\xf7\xd8\xc6'&\xd4\x02V\xce\x85\xeb#\xf0N9\xdcn\x0e\x9dO6\xddlxt\x98\xbd\x833\xe7\xa0\xe1\x1a6\x85J\x87\xa1\xf0a\x99\xbf\xe8W\xe1~\xaeX\xa9\x8bD4]\xbd\xda\x16\x97\xe2L\xbf\xe7\x8eJ\xf7\xdc1\x0b\xf9\x96-.omTj\x96q.\xe4\x95\xb3\x16\xediEH\xb3ho\x95\x81\x81#\xef\xa4\xe1\xc5\xb1w\xae\xe2\x8e'\x0d\xaf\xf1 \xe4\xff\xa4\xa1\xbc\x8du\x90\\\xb8n\xba~\x8f\xde|\xfd\xae\x92@\xc7*)\x17\x16iV)\x0d\xae\xe9s\xf4z\xb9\xa6A\xad\xd2\x80\xee@\x1b_\x14o\xc1\x8d\n\n\"\xd0\xef\xfaZI\xed\x00\xbc\xc5\xb0\xd4g\xbd\xcd\xd0\xc1K\x12\x80o\x03\xb0\x0d\x1d\x15\x9d\x1a\xa9P\xa0 c!\xbdX\x16_\x16\x05\x11\xc2\xdfEG\xac0\xfb,Q1\xe5p\xa1\xcc\xae\xc4\x17\x95\xeb\xb9x\xafS\x83n,T\xee\x99\x0c\xb8\xac\x9fz\xea\xcd<\x89v!\xae\xc8\xad\x9bS\x05n\xddl\x8d\xca\xfe\\?\xe6/\xc4\xb2\x96q\x87\xf3\xe9\xb1\xc9\xa7\xadu\xe7\xcc\xe9\xb5?\x90\xeeyD\xd2\xf0\xd4\xc4x`w\xa7~UAZ*\xb1\x8e\xa2\x00\xac5\xa8\x91\xd2\xb4\xbc\x97\xc06\xb2\x90\x85\xee\xf0\xaf\xa9&S\xa1\xb3RJ\x1f\xdb\xd2`i\x12G\xb3\x07R40\xc0\xe7\xf5\xa305RMJ\xd9\xc2\xa4\xff\x1e\xc6V]\x01S\xcf\xd8\xc7\xd8B\xa8\x148}R\xba\x1f\x01\xe9G\xdc\xddg\x8c\xa4\x9c\x0d!p=\x03\x98)\x14\x0bu\xb5\xc2\x90\n\x05PY,\xd4vK\xc2\xe7\x1b_Q\x0e\xb8l\xfbN\x1fa\xa2_I\x08'\xed\xc7~\x02\xc1\x0d\xe1.\xa7&:\xabv\xde\x02Q\xc7\x96\xa5p\xb4\xb9\x95$\x9f\xb1\xf1\xb9\xb4\xaa\x1c3N\x1b\x1f?\x7f\xf4 \x9a\xcd\xa3\x90\x85\xa917B\xac\xc1\xe6\x1c\x0cO-Wn\x81J#$\xe3\x08\x96\x0di\x96\xfe\xc4\xe8\x95\"\xd0k\x86\xfb\x16\xc2B\xcfS\xfb\xfa\xe2h\xfd7\xf0\xad\x8c\xb0\x1e\x0cq\x99B\x88\x17\xa0\xfe\x10\x83Rm\x99\xb2\x8e\x1d\xc4\xa5D\xbe\xc5\xec\x1e8\x07\x96kZ\xc3\xee\xa6s\xd0u\xf3\xad\x0b\xc3\xb6\xcaE\x99\x89\xba\xc8\xca_\x8f\x0cFP\x17\x91\xa6&Y2\xaa>\x13\xd4\xed\n\xeaS2\xf3\x16\xb6\xb5 \xa1\x96\xbb.A\x16\xc2fj\xa1n\x95|\xb5\xdcF\x0e\x18.\xca\xf1\xb17S\x8b\x99\xe9\x12\x86\x1dC\x04\xc7\x90\x8ahB\x1f?\x7fd\xe8\x84\xf3\xe5\xadw\xf9\xc8|\x19\xad\x19\x0c\xf5\xbc\x8c:\x87\x9at@Qs\xa8K\xc3\xba8\xdc\xab\xec\x88V>\xd7\xec\x87V\xab(vF5\xe5Ui\xd8 N\x8c\x95-\xa8\xd1\xd9\xb4\xf1\x10wo\xd9o\xb5%]\xad)\xc95G\xf8\xf6\xf1\x96\xf5-9\xe2r\x05\xa6\x02g\xf2\xdc\x00x\x1f\xa2\x18;\x98}\x1cn\xc3#\xf2\x8eM\xce\xa9\xc4\x88\xb1\xbak\xcb\x93\">\xfd\xcb\x94\x9c\x1fF\x94\x87K.\xc8\xf9\x88eY\xf9\xbb8\x03.n5`\x03z\x03\x86)\x0cu\x96\xc1\x0c\xd6\xb8Tq\x9d\xd84R\xd1\x80\xb84\xac\x9c\x1a\xb88\xcb\x9ai\x07\xc4\xb0\x8b\xc0\x14\x03\x9e\xef\xbe\x08\xabR@\x1f\x9bl\xa0\xbc].+\x03\\\x8b\xbet-fJ\x1d\x17b\xd7-9V\xf9\xc0J\x145\xb4\xa6\x0d\xcf\xb9\x07H\xb9\x0b\x7fs\x04\xad\xe1ql\xf6\xb9\xdae\xb3J\x9b\xefA;\xef\xc2\xdf\xb7i\xbf\xa4\xb4\xf86\x10\xf0\x82\xc9\xdc\x0b\x8d\x05\x90\x81\x9a\x9a\xb0\x19\xafm\xe9h\x9dz\xd3\xcd\xed\x1c\xc5\xc6\x9a\n\xc7l\x9dV\xc1\xcd5\x8eYPA\xdez\xf4\xa8\xfd\xe0m\x1a\x8a)\xfa*\xf8|p\xb6\\\x1bq\xc1!\x8d,d\x1a!]\x88\xf6f^8\x0d\x98l\x0f[\xa1Z\xfdVA\xe4M\x1a\xb1\x88o\x1fjw\x91\x051gY\xb3\x0c\xe9\"\x0e\xcaS\xd7\xbb\xe5}`\x1d\xdbT\x0b\x8e\xbd\x02\x19\xaf\xa8|\x88\xfdC[d\xb0U\xdf\x9a\xc4\x1e\xe8 \x9d\xcf\xbd0MD!\xfc\xc3\xb9\x94\x14\x01a\xfd\x89Q\x8c\x1e\x8eie\xfcD\x83\xd0\xde\xc58\xbaH\x807\x89uJ\xc3r!\xb5\x0b\\C)\xa7\xe7.\xc1\x9d\x9f\x01\xdaM\x9a\x94\x97w\xb9u\x0b\xfc\x90Qq\xc8+\x00/\xab\xee\xe4[<\x9eo\x9fw\xbf\x9c\x17N\xb5\xf5\x02\xe4B\x89\xd9\x16\xcf\x99,qIk\x144\x1f^0\x0e\xa2\xee\xde\n!\xa1(\x15\xf2\x0d\x1c\x1e\xe0T\x92@\x1a\x9d\x18\x85\x1ah\xb9Kai0\xca\x13_\xe8(i\xedv\xe6\xd1\xdc\xd0!\xa9\xa0\x87\xb1\x93\x1b\xebZc\x8e\x99e\xbd\x1a<\xefW S\xfdd\x1aD@K\x03\xa18K\xa9\xf8\xc0\xa100\x18m\x0e0\x93\x06\x9b\x1a^D\x19\x1d61.\xfa\xc9\xbc\x0eL\x1a\x95:%]e\xeb0\x9c\xcf\x99p\x9c-\x8dT-Em\xe0\xc2\x1a\x1d\xc7*E4\x97\xef\xa0\x8ec\x03\xcb,RWzM>\xf1\xd5\xa8\x01\xb6\x82\n}l:\xa0wM\xe6F\x85\xf6\xd6\x15\xc5%\x9d/ \x18\x18\x80\xd6C\xc5?U+\xd1\x9b\xe7\x12\xb8\xfe.\xf6\xb7cY\xb10@\xb0`@\x89\xbc\xe1\xe0{\x1c\xbfpH\x8d\x10a\xb47`\xdbZ%%\x85\xf6\x013M\x1c\xae\x1c_\xa8\xc5\xff\x0d\xf8\x12U9\xcc\xc5\xe4B\xdaA\x88\x90\xae\xd3\xd0\xd2\xb2 5}\xe6.\xc5L\x8bj\x9b\x8b\xa3S#\xc4\xab\xe0\x964\xf99\xb4\x17\xc2\x13_5\x8b\xc3\\\xb5\xc5\xeb\x0d\xe2m\xe5\xf1\x0e\x1c\xb9\xbee\x07\x9dX\xefP\x7f]\x87b\xde!\xff\x86\xce,k\x07\x1d2\x18\x11\xf1\xe50\xae\xd8'Z\xbc\x830\x88U\x0b\xc3\xa6\x9c\x9fj\x16\xc2\xfc\xf4kYT\xa9\xc9\xa2\x1aC\xb5\xaa\x99\x17Z9\xc1\x08\x17\xb4ZG\xa5\xe1!I\xf4D(5(\xcc\xa7>/T\xbc\x02\x03\xac\xe6u\x984\xfb2\x01\xd8\x0b\x88\xeb\xa1\xcf\x8a(J\x18\x19\x95(@\xc8\xfedQbl^r\"\xdc6\x96\xd3Z-ce\xd4\xd4\xc6\xc0\x18a<\xa8\x98\x9d\xad\xeb_\x90e\x82m\xaa\x0c\x05/\xb3\x8b\xbe\x0b\xba\xc9\xd9\xf1M\xc8\xe0-\x1a>Y\x90\x91\xe2i\xe9,X\xc7\xd0\xd2Y\xb0\xc2\x7fD)\xcd\xc0\xac\xb6h\xfe\xfd6\xdcP\xf1\x1a\xde\xcf[U\xa7\xf5\x14\x0f\xa4\x16.\xf0\xa8 \xdd\x00}\xe5\xc6\xa9\x9f\x1e7\xd4\x8e\xb9\xc0\x19\x17\xcf\xf8o\xe3\xd4\x13\xb1\x1b&\xd1\"\x1cw6\x06+g<\x89\x1f\xb00]9:\x9d\xe0\xc1(\n\x93(`\x9d \x9a\x1a\x13\xbc\\\x92\x91.{\x05\x8b\xf2^B\xf95-\xdb\x97Uo\xbd\x9c\xe1b\xab\xd7\xeb\xc1\xd1\xd6{\x1f\x0e\x17[\xbb\xe2e\xf7\xfd\x0f\x87\xc3\x0d\xa1q\x06\ng\xb9\xba\x993t\x0f\x84\xaa\x99Ti\xd4\xee\x98xJ[\\1B\x9f\x12\xc6\xf9\xa8\x97<=\x0d\xf3\xa8\xf8)\xce\xf7Y\x83qT\xe8 ;\xa1k\x9a$\xa5\xa1\x89\xdar=\x96\xc9\xf2\xa0\xf6\xa6\x1aK\xcc\x08\x8a\xa5.\xed\x91tIt\xd5_\xdauZ\xdb;h\xc3\xed\x92\x8a\x8eo\xf1eJ\xca*\xbd\xf4\x02\xb5\x90\x85 \xe2?\"h\x9b?\x07)\x7f\xe4\x82rk\xca\x1f\xe1\xa8\xa0\xc5Y\x10O\xdf\xe0\xe9w\xee~0@\xe5\xd6\x95\x1e1\xed:\xd0\x14(\x89\xdc\xb1\x87\xa7\xe6\x00\xaf\x00tc\xe6)\xb0\x8dcz\xb1$3\xda=x';\x10\xee\x02\x85\xb6\x8c\xd9i\xbb\x9bVv\xe0\xd8w\xdc\xae_\x18\x00LK\x8a\xe7\xe7+\x1a\x04\xb4?\x88\xb7\xab\x9e\xbca\x85\x81\xe5\xb6\xe1\x87\x8d\xb4\xf0\xf4\xcd\x97\x91\x95\xd8\x07\xe5\x81)\xa2{\xb4Z\x06sB\x97\xa6N\xe8\xd6\xa9G\xbf\xd0\xb7\xdf\xba\x13\x94\xac\x14\x89_J\xf4\nj\xb0\xf5\x8eh:h\xb7#\xe1_y8\x04\xf7\xf7N\xe4\x0epL\x9bq\x1e\xa3\xc2F\x19\xb2P#CK\\\x98!\x0e\xb3.\x86\x05\xd5\x07\xafp\xd0\xdf\x9d\x14\x87\xcaG{*\xaf2\x84sv\x99a;\x1d`\xe9-]\xf9\x8e\x1d\xc4\xdbaiAvb\x97\xf2?+\xb3m8\x84\x1e\xa1\x0ci^\xd6s,\x1ci\xdb\xc4:\x87\xc5\xc52Vq\xe7\x9e{\xa6W\xa7\xf6\xb9\xc3\xda\xb8\xdd\x87\xd9\x185\xc1S\xac\xa8;\x12nc\x9b!\x06\xa5\x19\x0e\xb3\xb8\x82\xe5\x0fjp\xe4\x0d\x87\xd1#Ee\x9a6\xf7Y\xae\xc8\x0f\xdegY\xaer\x9c\xc2I\xbf\xa8\xa5\xdd\xd7\xbca\xf7\xea\x9c\xd0\xfb\x13C\x0e\x1a\xb8\x9e\x8fM\xb3\xb8=\xe2X\xa44uz.\x0e\xeb\xd2\xfbn\xab\xd5n\x87\xdb=\xb51\x8es7\xc3\x05\x9c\xa7\x9c\xccY\xab\xc5\xf2\xfdu\xab\xd5d\x92\xc9\xb6Z\x8a\xa5\x9ezqh\xa0\x99\x17\x9f\xb0\xb1\x81\xad\x86\xca\xdc\xf0\xc2q\xfe\x127\xf2@\x9cI\xc3\x8bYc\xcc\xe61\x1by)\x1b7\x12?\x1c\xb1\x06\xdfr\xf1V{\x9d\xf7;=\xd2H\x8e\xa3E0\x06v\x7f\xc4\x1a\x8b\x84\x8d\xa1\xbeS?\x08xB\xccf\xd1\x0b6\x86\x89u\xcc\x1a\x93E\xba\x88Y\xa7\xf1\x9cy\xe3\xc6,\x8aY\xe3\x98\xc5\xccj\x80J\x97\xd5\xed\n\xe8:\x9f&\x9d(\x9ev\xeft?\xde{\xf4\xe4\xeb\x87\xf7\x1f~\xeb\xfe\x93\x07\xbb\x0f;\xb3\xf1\x1d\xb9\x84 m\x9cNV\x8e\x1ejn\xe5\x8a~\x8b#\xc7\xbc\x9b\x0d?i\xe4\x01\xec\x1aQ\x0c:\xd1\xa8\xde[\xff\xdb\xd6\x1bM\xc4\x82\x88\xcc7\x86P1\x11\x91n\xdc\x1b\xecl\x0e\xe1*\x05\x10a\x96\xd5\x84\xacH\xf1E\x98eFHS\xbe\x9c\x807\xcfS#\x15\xaaa\xba\xedL\x96],\xb1\xf0\x87\x0d\x0e\x8ehZ\\5\x90\x84\xf6@q<\xa2\xb1\xf0\xe1D\xd2\x1a\x15q\xbe\x19\xf4i\xee\xf0\\h\xdb\xe8\xab0\\\x83\xaa\xc5\xa9\xa8\x9ez\x84\x7f\x16'9\xd0NL\xe5\xc1\x83\x11\x15-\xa5\xf8\x82\xd1tY[\x9e\xd9\xbc\x06+\x84a\x05\x7f\xce\\\x94\xf0\xb2L\xf9z\xd8\xbe\xab\x1a\x1e\x89\x00\x0b\"\xf2\xa8^\x0di\xfaz\x1e`fI\xe1\xbf=1M\xdc\xd4{#\xb6{M>\xdfA\x10l\xb7\xfd,\x1b\x19\xd8\xf2\x0cql\xc3\x99\x05\xdf\xd6i\xae\x9bu\xbf\xd0\xf6\xc8H\xc5\x85#\xa5a\x96\x85\xc09x\xb9\xa2&Y\x11\x0d S;B\xda\xecAP*Ce\xc2\xe0\xd2\xc8\x88\x9c\xc4\x956>\x80A\xd9\x08\x1c;\xaf\x0c6\x06\"\xc0\xeax\xc7(F\xb54\xb0\x10Tc\xc6\x92\xc4\x9b\x8a\xa3\x81g\x01\xf38kd\xf3(NA\xbeh\xa4Q>'\xa7~z\xbc8\xea\x8c\xa2\x99\x9c\x9e\x9f&j\x9e\"b\x94l\xeb\xb0\x92\xec$7\xdf\x9e\xef\xdc\x0f\x1b\x0c\xa2\xccE\xa3\xd1\"\x8e\xd9\xd8\xda\xee\xcew\xe0\x82 \x99\x0b\x0d\x10\x04\xf6\x14p\x04\xcf\xbf\x0d\xc4Lc\xcb\xa5\xd0\x8f\xa1Sr\x92[i\x9dt\x12\x96>\x95/5\xa7h\xe7\x86\x86\x16\x86\xc9 \xc7\xd3\x94\xa5\x0fe\xda\xea\x01\xcd\x85<\x84\x84\x81#\xd2\x14\xae\xd9'\xd3\xc9\x8c\xef\x88\xf3K\xa3\xe2E\xdc\x0dY\x08\x91\x9c\xd4D\xe1\xe2\xd6\xcd\xd2\x02\x14\x12q\xaf\xc9\xcb\xe7Vz\xcd>)\x1dqyD\xb1a\xfe)g\xc9\xa2Z\x81Y\xf8\x90\xfb-\xc9\xdf\xc4\xb51\x7f\x85#N\xab\xd9_\xea\xa4AK\xbd709\xe9<\xe3\x14\x12\xd3\x80\x9c\x08b\xc9\xe7&9\xe9<\x97@Q\x8f\x9ct\xf8N OH\xc8I\xe71;c1\x8d\xc9 \xa7.\xfe\xc4\x7f\xc9IG\xc4\x12\x15_}r\"\xb7%\xf2]\xeeN\xc8IgO\xda\xd3\x8dT\xcb\xf4\xa4\x88\x84EO\x96 \x03gY]P\xd1S?\x1cG\xa7\xad\x96\xf8}c\x80?=,\xdc\x07\xeb\xa2\xc2\x89\x1b\xe8X7\x92\x13\xde\xd6I4\x10F\xf8\xab\xdc\xd7\x08i\xc1\xc0q\xab\xd5\x8c\x8d\x88\x86\x8a\x93\xe7\x15A\x05kJC\x94\xc0\xa7\x937\x14n~\xb1\xe6\xd7\x05\x0d\x8c\xc2\x17,N\x1b2\xa6R\x1a5\xe6*\xf2Q\x03\xe0B\xab1\xff\n\xf9\xa6t\xaf~c\x14A$\"Z\x19\xc8\x94\xd7\xedE\xa0#p\xd4\x8fM\x84\x0f\x91i\x98fh\xc6\xb8\xb8\x95\xbf\xfb^\xb5}}$\xdf\xfb\x00\x93\x88\x86\xc6\xbb[\"\xe4\x07:a\xe7 zC&\x01\xff\xd0\xfb\x00\x93\x11\xff\xd0\xc7d\xc1\x81\xb9\x8b\xc9\x9c.\x0c\xf4h\xf7\xf0\xd9\xf3\xa7\xfbO\x11&\x13\x9d\xcb,I]\x94.\xb4-\x94p\xe5\xc5\xd0\xb0\xab^\x97\xe4X/-\x16\xcf\xbd\x8e\xbc\xd1 j\xa8\x13\xc7<\xa0[\x11\xf5xC\xac\xc6p\xcb\xb2\x12\x83P\xc5,N\xf2\x98\xc5\xe5x\xc4iG\x01\xcb7\xe2\xe5\xe8\xc3\xda7=\xa6\xb6\x0cg\xa7\x94y\xe5\xf5A\x11\x82\xf86\xc5\xf8N]\x15\xbc\xf7v\x05I\x04E\xd5\xb5\x83\xb8H\x039\x07\xc2\xc5&\xed>_\xc9z\x03o\xdb\xcfO\x06}\xc73MW;\xb6\xf5\xdc\xc1\x9b\x1a\x15a\x90\xa1U\x1fv\xda\xcb\xa5U\x8cqz\xab\xd8M\xf9r\xfb.\xb8\x84\x9419W\xbc\xd1\xe4bG\xc3\x0f9-8\xa1\x0b\x01\xf2J~UJ\x96r\x91|_F\xe0~\xa2\xd5\x8a:^\x10D\xa3\xfc\xe1\xe30\xf1&\xac\xf2\xba\x17D\xa7\x1a\x9d\xc6\x96\xe1\x1b1\xec\xfd%d\xd4\xc3\xc47\"\xe2a\xe2A\xc5u\xba;\xab\x81Lo\x8eH(HV\x1e\xffy\x0dY:?\xfa\xcd\xbbB<\x01\xebMm\xde6\n\xa26M\xf2\xf6\xc4`DZ\x9c5\xc1%\xf8\xb4\xb6W\"\xb1\x86v\xdc\x99\xf8\xf2\xe4\xdeR\xcf\xf9S\x0f\x938\x87X`\xb7z\xe2\xf5\xc3\x80\xb9\xc0\x11\xae\xb4\xc6\xc7\xf2_\xb1\xc5\xb8\xc3\x1b\x10Ta\xbcY:(\x88*\xca\x97\x85\x0f\xfa\xb8\xa0\xf4H9\xc3\x99{\xe9\xb1r_\n \xd4\x94R\xde\x89\xd9$)\xa5\xf0B\x1c~\x99\xb8\x8ct\xdd\xaa3?Y\xd9\xb1\xeb'aR8\x15\x11$9\xb57{\xd5#L8\x0c\xd1+\x9d\xb2j \xf0u\xb5 \xf8\xcb\xa5W\xe2\xc5\xae\x9a\xb9\x8a\x1bk\xc2\x08\xb8\xe1\x10\xd5\x15\xe8\xe0\xc2{\xa9\xc6d\x05\x1e\xb1M\xd1\xab\x92\xfe\x9f\x04>C^d\xb5F?y\xe79\x9b\xd4\xaa\x95\xb5Zu\x01\x9bW#\x14\xc3\xf0\xb4Z\xe2W\xdd\x17\xf5D\xe5\xbbg)\x8bC/X\xd7\x88\x02\xc0`\xb8\xd5Bw\xc4\x19*\xaf\xc7\xe9\xb9\xa2\x86\xfbA\x10\x9d\xb2q\xa5\x02y\x08\xa3\x15\x17\xf4~G\x06f\x05P\xf2\xab\x9a-\x9ce\xc2\xe1\x8f\xf8\"E\xe3&\\qUZm\xb5\x8cf\x9aey(Q\x08\xb4\xce\xbb\x80\xf3R\xcb\xa2o\xe1x\x05\xb4\xfa\xbe\xe9\xb1\xd7Y\xe1\xc9\x99\xd74f1\x9b\xb0\x98\x85\xa3\xaav\x9dCx\xa9I_\x9f\xce\xd3x%&\xa3?\xd1\xce\x96\xd4\xd0\xf6\xc5 Z\x11\x87;g\x9c\xa9\xa2 uP]\xac\x15\xa1\x1dZ\x0c\x0e\xfe\n\x19\xf0\x0e\xc2;\xb4\x97\x9bm(\x87\xadw\xe4\xb6\xd3\xe9\xb9E\x93)\x8d\x9c\xbeK\xd2:\x9fI\xca!P?\xf7\xf9j\"\xe5a\xba\x810^\xa6B3'\xf9\xb6\x9f\x1eC\x8cX8\xe6/\x8a\x15G\x18>-\x85n\xaeHD\x9ei\xe2\x0b\xdf\xf1\\\x1a\x1b\xfcG\xac\x8e\x8a\xe9\xf2^\xb6Z\x1e\xa5~\xae}H\x02\x9a\xfb\xc2\xe2\x05H\xbf\x07}kV\x83\xf5g\x99\x9f<\xf1\x9e\x18\x01\xce\xb2@\xdb[@\xd0\\\xcf\xb5\x03Z-\xd1j\xa1\xb6\xf0/\xea\xb9v{\xcbj\xf7-\x80\xcc\xdb\xe9\xd9\xbe\xe3\xb5\xfb\xae\x85\x10i\xf7\x9b4\xc8\xb2\xea\xed\xba\x80\x9e\xef\x9b\x03>\x02 \xdc\xb1\x07.\x0553\xfe\x94\x1f\"\xb4\xb7(\xa5\x81\x1a\xce\xc46V\xe1`\xe2F;\xc4|\xc9\x17\xa8\x18\x88\x1ay+y\xa5\xf0\x92\x9b\xe6\xe5d\xc5\xb7_r\xee6\xb5\xd8\xed\xd5f\nJP\xd5&vh\xa1\x9eD\x81 \x0e\x9f\xdb\xc5\x9b\xed\xb8\xd6\xc5Rk8\xbf\x9c^\x92O\xe7\xca\xc5H\x0dC\xd7\xa7\x0eL\x93^IM\xa5\x0bi}\x84y5\x8bPV\x14\xbfi\xa5\xcfEZ}\xcfw\x11F\xf3Z\x18\x96d\x14Da-|?\xb2\xf7\xf4\x89\xbc\x85\x82G1\x05\xfd \xe0hI\x92c.\xec\x9c>X).\xb6\xc3\x17\xcbAEj^\xa1\x0cP\xb8\xc8ei]\xb3w\xcc\xd8\xbc\\q\x83\x19\xf9\x9aZ\x1e\xb0\x14\x8b\x01(\xb4\x0e\xe0\xa6\x1a\x1bi\xb5\xbd\x18W\x07;\x05o\xd2\xa0\x08\xb1\xca\xd5\x9d\xd8\xb5\x99PD\xb4\xd2r\xc4y2\xf1\x92t\xb5\xe7e>\xef%\x89?\x0d\x0dN\x1axIF~\xf2\xe6\x8a\xe3\x1b)\x16j\x11\xa9~\x9e\xf4\xa1\xac!\xbf\xb5\x15\xea!\xc7\x1e_\x1cr\x1d|.'\x19\xa9\xf0-&x\x1fo \xd5O8\nQ+\xaa\x9c\x91\xc8\xb7)K\x9f)9\xe7\xe9DWc\x922\x0c\x89\xf2\xc5I\xf4Yn\xcdD\x1a\x89;\x87\x87\xc9C\xfa\x1eQWX\xca7\x82 \xdaM\xf2\x0358\x07?K\xd5\x99Z\xc4\xa5\x8b0\xcb\x9a}\xdd\xe5\xa6R!\xf6\xd7\x9dC\x84\xf5\xfb\x85\xfdc\xd6\x08\xfc$e!\x8bk\x0e \x90Z=\xe0\x86\xd2\x08I\x9ce\x8c\xf8\x98\x044\xb2#3\xb5\x8a+\x81\xce!{\x01\x1b\xf0\xc0\xb5\xf5\x97\xce$,\xbdSG\x7f#\x89k\x95r\x03\x9bN\xe0\x9a\\+\x93\x90\xfc\xf5A\xb4\x08S\xd3\xc4\x84\x95\x9c\x8cr)\xabGi\xbb]\xceX4-,\x0e,y\xde_\xd4\x9e\xba5~=Ke\x88\x9e\x04\xb5\xd2\xde\xb2D\xf0\xad\x96\xe1\xaf=0\x14\n\x1ap\xcc\xe8\xe3\xce\xe1!\xe4;<\x84\x10\x10\xcd>\xc6%-Gh\xe4\x897c\xa5k\xea\x17JI\x9c:`[\xdaS\xaa\xfe:P\x85\xf9\x0ch\xcd\x02\xeb,\xe5\xc2\xf2P\x97\xe3\xaa\xd5\x92:^\x91]\x88\x18V\x8a+\x12\xe7\x94\xa5\x1a\xfd\x8a+\xbd\xc4\x0eUp\xfb\x9brq^o\x85e\x1dNEiI\xcd)(\xa7'f1\x12\x96`vR\xe8pSq+\xd1\xff\xb03\xc9\x13\xf8\xb3\xab+\x8e\x11\x9f*m5\xe2i\xc7G>\x1e\xc4\xdb>hey\xb9\x02\xdb$\xbf\xa7\xf1\xeaA\x15\xe3\xfd6\xe0\xaaa\xb09dv\xdfR\xc0X\xbdr\x0bl\xe6W-9\xf9\x04&y\xe8u\xd9D\xa1A\xab\x1aI4\x99\x93g\x0d\xc8H\xe9N\x17Y\xc8|\xf5\xc4\x10<\xc5N\xc2\xdc\x86c\x01\xdcD\x1e\"\x0bm\xad\xc7\xb2\xdf\x06#<\xab\xbc|\"\xcd\x1e&sy\xd0\x98\x9f0\xf2\x0c\x82\xa4\x16\x8aK\xf1-x\xe5\xac\xb1&\x17\xd1\xf2\xdd\xbd1\x1f\xe7\xd8*\xe7\xbd7\xe4$q\x91\xf7\xdd7\xe6\xe5\\L\xe5~\xef\x16\xb9\x89\x07\xc7\x0b\x9c\xd0F\x94\x0b\xcd\x05e\xcd\xdb}<\x18m\xcf\x07#\xd3\xc4\x813j\xf7\xf5\x03\xc9\x91;\x80j\xc5\xd2V\xd4+C\x0f\xa8K3\xbaP\xa3$\x9a\xe8\x0dF\xdbc\xa8Q\x0d\x963ro\x1e/\x9ea\xdd\x90\xc9\x8f\xb2s\xfcE\x8d\x98\x88\xb9\xaf\x06mm>R\xcey\xf7\xa6\x9c$,\xe5\xbdws^\x12\xab\xdc\xea\xe4\x97S|\x00Z\xb9\x93:TO\xb6\xe7\x83 \xa0zRF\xf5\xc4\x1d\xa8\x96$\xb6\xf5\xa6\x02\xac\x04\xecfe*F\xe1\xba\x03\x9dD\x1d\xe6p8\x9b}\\-7Z{\x14T.\xd9\xab\x94,\x0f\xde\n\x1b\x10,\xc0_\xcf\x02|7\x17\xdf\x8e\xfdD|W)\xf2\xe4\xda\x17\x17w\xc0!\xa54\xff8rz\xae5\xb2r\xf8tM\xf9:\x9c\xdf\x0f\x82\xc7\xeb\x97\xa1\\\x9c\xb1\x8d\x82\xc7W8|\xab%\x1bK1\xb6\x8c\xdb\xc9\x0b\xca9s\x89z&\x13\xba\x9e&JY\xbd\xf18\xa7\x952\x01B66\xf1\xcf\xd8\x98Fd\xd4\xd9\xe5\xad\xee\xce\xfc4\x055\xabB\x8c\x1d\xadJ\xb05\x97\xf9\xf8B\xdb`\xe0\x8bB[Z[\xb7@o\xff9KX\xfc\x82\xd5)\xb64\x98\xd2@7\xbe\xac9\xfc\xbe\xd8Z\xe2\xee\xb4*\xb1\xe7\xa5\xbaz\xde\xdc\x0ds\x96\x19L\xf3l\xcct\xcf\xc6\xef~\x8d\xefs\x1dTJ{\xc8\xd3\\P\x00Ybu\xc0\xc2w\xc2\xab]\xf88\x8co\xeaD\xb8r\x86\xa3\xb7\xee47\x0c\xbc\xe9\x96\xd5\xf7s\xd5\x9e/\xaf8\xfc)\xf9\x1d\xe9\xa4\xd1\xc7\xf3y\xee%\x1b\xd7\x82\xf7-8\xed]\xc3]R\x8aL8\x06\xcd\xcfC\xc5,)\x0f\x8e\x91\xca\xab\xeej\x87\x8d\x14\x93\xd0\xae\xff\x14b\x13Q\xc4e\xfb2T~\xf2P\xe8\xe4\xd5\xaa\x1b\x80\x96\x0b\xab\x96\xf8&;\x7f:g\xb1\x97Fq\x9d\x06\xd4@u\xa1\xa5\x1elx(W3e)\xe0bE\xe7$\xce\xed\x02\x9c\xd0%\xbe\x14\x8e\xa1W9\xb0F\x84[-\x84\x9a\x94FX\xd3\xea\xce7\xebQ\x96\xad\xdcz\xf1\xb4\xa3(\n\x98\xa7)]G8\xa2\x91v\xeaE\xe2V\x0bm\xf2\x8a\xe3V\xcb\xe0\xdfJ^\x03\xd5\x89ZL\xfa=\x8c1\xf1\x05g\xd3P\x0e}\xe2{`i\x1b\xad#\xcbH\xb1\x1d\x82\xea\xa7\xe6n\nmr\xe4\xc4\xb8|\x12\x11a;\xeaL\xfc eq\xa5\xebkNz\xd7C\xc2\xde\x00\x89t\xf9\x87-}\x0f\x1e\xadi\xa6:\x0c\x0esq\xabu\x03\x1a\x1c\xe6\x12V42\xc8\x85#\x8f\x0f\xec\x17\xec\xb4\xb7\xbe\xd3?\x94~\x19\xab\x0dhS\x8aaL\xd6C\xc0\xab\xd0U5\n\x80\xd6\x8c\xc7*\x12W\xa7\xaf'Y\x1fA\x18[\xbd&\xcd\x97\xe7|\x0c\xf4\x1c \x89\x8a\xe9\x98\xda5\x13\xe8\x0d-bK\xcc0\x98\xc9\xe2\n\x02\xd9H\xdc\xbe\xf2:\xa3\xbc\x06\x84\xb0u\x0b\xf0\xf3}\xa8_f\x05\xab\xfe\x07^\xe4*4|w\x8cLD\xd0\x1dDP\x07\x81\x93~4@\x04\xd9\x88\xa0\x16R\x1b\xb3\x0bv6\xf7\xc2qq\xfc\x16\xd7\x9e\xab^\x18\xce\xc1\xf0b\xb8tM<\\f\xc5K\xc5^+\x92'.\x11\x96\xa4*\xd4\xb5%+j\x83\xdb\x9d\xfc2!*\x9c\x8e\x01\xc9P-\x81\x14\x1c\xc4\x800\x93j\x0d%|\xcd\xac\xa5Dq\xa6\xd95\x9c\x03k\xb8)\xa2\xda[\x86\x88\xb51\xdc\xc4\xd8\xee*\xd7{\x03\x11eK\xca\xc4 I\x0b\x96j\xc4\xc4#\xa1\xd3wI\x08N\x1bC\xe7\xae\x0b\xd6\x07\xc4k\xb5\x90\x89 2&\xb4\x14P\x8eN\xc9\xb8\x81M{v@\xc1v\x10\xee\xdd<\x88\xae\xe7abpjS[N\xdb\x03\x8f<\x89\xa0\xb5 \x97\xce\x92\x82\xf8\n\xeb\x8f\xca\xe2\xa5t3\x08\x97\xaa\xd8\xd2\xb8A\x0b\xe3\xbd\xaf\x08\xa5\xc7\xad{Ry\xf7\xbd\xbbx\x10gYdT\x8f\xe4\x08R3\x0d\x11\x9f\\,\xe0\xc6\xddj\xf6\xea\x94\x90D\xed\x17\xcbA\xec\x84\xc6=l\xe4E\xf7\xbd)\xc2.E\xdfE\x9a\x80\x85\x1c\xa9S\xfd]\x97cGN\xe7\xf8\x06\xa8\xb7\xb6\xa4\xaaf\xaf\x87\xd7\xa9V\x16\x97\x90B\x8b\x99\xffPM\xbb!\xb5.\x96x\x89\x0d$\xb5\x97\x12D\x1c\x17\xcb\xa8j2\xcdBw;\xefu\xdeEd\x16\x8d\x99\x15\xdbh\xbe\x88\x19\xb2\xd04\x88\x8e\xbc\x00\x91Q4?\x87\xb0\x7f\x16\xfa\xc7\x1f4\xb6z[\xbd\xc6C\x16\xfaI\xe3\xd9\"9>\xf1b\xf6\xa2a|7\x88\xfc8\x1a\x9dt\xe2\x05F\xeb\x91\x15\x1aw\xe5H\xdc]\xaft\x0ffGFL4\x93#.\xd9\xc0\xc5c\xed}c}\x13\xa0\xa8\x1d\xe7\x9a\xc1\xc4\xa3\x91\xe1\xe3V+2|y\xf6\xb6\x1b\x80\x8d\xeb\x1b\xf4\xc3=\xbb\x92\xdf`\xd8\xba\xa8;!V\x00|E\xaf\xb1\xd9\xbc\xe9\x18\x0c4\xf4u\xf5#\xb9\x03\x95\xe4!\xb5\xe4\x85\xc1\xcfz%\xa3\x1e0\x08ur\x9f/\x16\x83\x9a\x83\xde\xb8\xe3\x87\xc9\x9c\x8d\xd2=\x08#\xd3j\x19\x95\x94\xfa\x1bn\xa5\xc8\x8au-\xc1r\xc1z\xb3\x000 \x181?P\xe6\x01\x93 \x8a\xe27h\xe4\xc3=\"\xa3&\xc3v\xcf2\xd8N\xcf\x8e\xad\x10\xdfB\x1b%\xc7\xc8\xfbr\xea\xf0\x99\x0f3\xbe\xf7\x15\xa1\xe6\xdc\xef\xf7\x84\x9e\xf3\xd6\x07B\xcdy\xeb\xaeP\xd7\xe7\xbcaA\xf9D&s9\xf9&\xfc\xf5\x1e&c\xa8\xe0}L\x8e\xe9\xb8\xf3(\x15+m~uAft\xdc\xf9\xda\xc7_\xff\xfaw\x0e\xf7\xee\x7fx\xff\xf9\xa3\xc3G\xfb\xbb\xcf\xef\xef?}\xbeG\xa6ta _\x96@\x98\x9c\xd3\x95\xa1\x16;\xd15\x93\x014\xa7\xc7\xe4\x059\xc2\x17\x91\x11\x92\x94,\xc4\x91\xfb\x199%'\xe4i {\xe0\x19\x99\xd2q\xab\xf5\xa9\xda\xeb\x7f\n[\xffY\xab\x05\xf7\xf7{*y\xcfa\xae\xd2\x0fT\xaeY\xc0T\x02t\x04\x11\xe8\x8d\xa8\x17\x16\xa6\xb1\xcf\xdfd\xd9\xd5\x0ep\xfe\x1b*U\x94\xfc\x92\xf2\xa6||\x1cwij\xa2\x86\xc2&\"\x87\xb4\xd9'{T[\xce\xc9>\xdds\xa6n\x96\xed9\xe8\xab_\xcd\xb1\xe8f\xd9\xb8\xd5\xdas\xc6.\xf9\x94\xf2\xbe\xedg\xd9Sc\x8c\xc9}\x8a@\xfcC a\xecu$\xe4Y\xb6\xcf\xb1p\xbf\xd52\xce\xa8o\xdc\x97J\x85|\xd1\x90\xf1\xa3\xab\x8b@\xabu\x06\xba\x81\xad\x961\xcf2\xdf8\xc3\x94\xd2\xe3,3<\xdb3\xce\xc81\xb6j&\xd6\x993\x85\xad\xff\x19\x99\x92s\x8cIb\x9c\x91]\xd2\x94\x07m\xad\x961qv]z\xce\x85}\x85`\x18\xab\xfdVK\xbd7)\xdd\x07M\xdfV\xcb8\xa4\xcd\x1e\xf9\xb4\x86\\\xf65\xd5\xeb%\xd4\xdc<\xe2(\x9a\xba\x94\xd2O\xb3,0\xf6\xc8\x94|\x8a\xc9\xc4I]\xfa)\x19\xf3}\xcd)\xbd\x10mXO\x0d\xd5\x1a&|\xc8\xad\x17\xf6\xa7\xfd\xf0E4\x82\xf8bH\xf3\xbeq+\xae\x13\x1a\xf7@\x83{\x85O\x90P(]\xce\xe3h\xe6'\xc2\xb9\x1d\xd37`$\xd6t\xcf\xc4\x19w\xa1c\xb5\n\xfd\xd7\xbcq\xe3\x99\xa8\xab\xa1\xcf\x07x\xfapw\x8fz$\xe8|\xb4\xbb\xff\x8d\xa7\x0f\xf7\xa8\x83\x1e|c\xf7\xc17\x9f~\xbc\x8f\x08z\xf0\xf4\xc9\x93\xdd\x07\xe2\xe9\xd9w\x10A\x0fw\x1f\xef\xee\xef\"\x02\x88%\xe8\x1b\xbb\xf7\x1f\"\x82\x1e?}\xf0MD\xd0G\xed\xbd\xdd\xfb\xcf\x1f|\x83?\xee>\xff:\xcf\xf6\xd17\xef?\xd8\x7f\xf4\xadG\xfb\xdf\x81\x97\x07O\x1f\xf3\xdf\xa7\xdf\xe2\xdf\x9e<\xdd\x7f\xf4!O\x7f\xfal\xff\xd1\xd3'{\x88\xa0g\xf7\xf7\xa1\xf8\xb3\xa7{\xbc\xfag\xcf\x9f>\xfb\xf0\xd1\x93\x87\xf21\xff\xfa\xb1\xa8\xfc\x19\xc0\xf8|\xf7\xd9\xd3\xe7\xfc!o|\xef\xe3\xaf\xed=x\xfe\xe8k<\xcf\xfe\xf3\xfb\x0f\xf8\xef\xc7O$\x90\x1f?)>\xbb\xb7\xf1\x89\xb0F\xc9m\x91s\x87\xf7zR\xc2U\xe6\xc3`\x06/\x94J\x13\xda\xfd\xac;%\x01\xed\x82\xc6\xf6\x88\x82\x9av\xa1\xd0\xb6P\xad\xc0\xaa\xf5N\xcc&J\x89\x0dlC\x94\x06[\xecO\xfd\xd0\x0b\x9e\xf1\xb40\xcb\xd2u\xd6\"J\xf3\x91o\x1c\xc5\xa1t8\xf6\xb9\x00\x00\xae?z\xa5\xe8\xc3R\xcb>.\x1b\x1a\x18,\xb7\x91P\xe4\x1c\x156\x1e\x00\x15\x91Y\x84=\x01h\x17\x81\x15\x01\xff\xa6\xae\xe1\xa5\x19\x02X\xaft\x0eU\xf9P\x9b\x0e\xac\x04\x9bI\xfd\xf2{\x9f\xc4+z\xfe\xa2Yl\xab'\x1a\xeb\x06\x049\xe4\xbe\xccG\x9a}\xd0\x8a\x03\xac\xfa\xf0C\x04\x94|\xf5\xd6:Be P:`\x1a\x12{\xcbJ\xb0b%z\xc9\x82uJ\xce\xb2q!\xcd\xf8\x9d\xe4\xf0\xc20J\x1b K!\xa9\x11M\x1a^#\x8c\xc2\xb6h\xa5\xb3!\xe1/\xd0(\x94\xa3\xd3V\xab\xa2Y\xadP\xa5\x86J\xear[\xf2\x9d\xef\x83C\x12.\x17\xa5\xcb\xf4UC\x1dE\x02\x0b\xb5`(\xca,\xd9\xd7\xb0\x8a\x17\xb2\x92\xeb\xb3\x8b\xb9\xba\xfaWq\xd2`\x04\x16\xe28;O \xa1T\xaa\x8b\xb1r\xc0\x04\xfaf\x03]\xab\xbch\xd3\x89\xdc5(\x16\xddX\x8bb\xe1\x92\x11\xb0;\x8e\x980\x8c\x07\xab\xa9\xce\xc6\xea\\#Q\xa9\x9f\xa5\xe6\xd5\xa1N\xde=\xa9\xaf\xa0\xa3\xb4j\xa9\xa4\x89\x94u(\x95z\x8aQ\xd9\xc9[C\x87\x80\xa4\xf5\x88\xf7io\xe0\xe7n\x9a\xda\xfd\x81o\x9aX\x82\x16b\x12\xd3\xc8\xf1]\x8dk\xb4Z\x85\x14^\xf4*v\xed\xfa\xee\xc6\xae\xa5}\x107\xc6$&\x17\xcb|:\x17m\xa9\xaf4r\nx\\\x8e \x06\xd8Ys!\x15\xf1\xe5\xf4\x1b^r\xccwm\xf9\xb5NIO\xc7q\x07i\xc9\x92C\xf7%7\x08\x0b\x1f\xb8\xa1i\n\xc3\xd1:\xb3\x12't\xf3]aP\xb6\xa1\x19\x81\xfd\x8cpf\x06\x97qNo\x95\xcc\x1e\x85/\xbc\xc0\x1f\xd7\x91\xd73\xf1\x96(\xbd\xe0\xa9\xaf\xbc\x7f\xde\xe9\xa2\x0d\x8d\xf9\x15\x1a\xa4\x1c%|&T\xa6]\xc5\x85\x1e\xba\x03B\x113)\x7f\"\xe9\xaa^~j9\xa9{\x13>\xa4T\xc9\xbb?\xe0\xf5t\x91Y\xa3\xb0\x11\xe7\xb8H*F\x12\x9e0\x90\xc0\xcb\xdb\xee\x165\x8b\x08?y\xce&V\xb9\x87\x92\x7f\x81\x0d\x96`a\xcdf\xad\x8d\x9d\x93\xbao\xd4=\xcf\x97\xe2-\xdcQv :\x001\x1b-\xe2\xa4j\x0b m\xd0\x855\xc0\x05\xf8\xbe\xb6zKL\xa4\x1flH^10\xb8\xe0s\xd5Bw\x10\x91\x05\xc8\xfc\x84\x9ds9X\xb8\x7f\xb1.\x96d\xee\x9d\x07\x917\xe6\x8f c\xa1\xa5Y\x1a\x10\x7f\xcc\xc2\xd4O\xcf\xadf?\x7f~\xc8R\xb1\xeeY\xcd\xfe\x92\x84\x18\x93U\x13 \xb5\xb2\x86\xc0,\n\xf7\xc5\xc2\x02\x03\xfa\xd19a\xe7\xd4#\"\x87\xcch\xae\x1bh\xc3\xc3\xbc\xa7\n\x04!Z\x08g\xaa`\xc8\xe0x\xae\xfe]\xb3\x86*\x95!+\xa6\x1f\x1e\\(\xa5\xc4\xe3\xcc\xa0\xc6\xd4\xc3s[\xadfQ \xbe(\x9es<\xb4Z\x15[*\x00\xa7\xd5\x92\xaeaD%\x12\xdaDB+\xfb\xad\xf4\xef/\x96\x83Dz\xe4\xa1)It\x9c\x90D\x0c0\x95\x03m\xcb_\xb3o\xf5yN\x81F^\x04\x86\x11J\xc1\x13\x11\x9ed%\x9eHR`\xa7\xd9\xd7\xde\xf2n\xd0\x9a\xae\x11&\xa0MH\x84\x97r\xa8\xfc\xe5\xf2\x8d$\xde\xd4hW\x98,\xd4\xb8\xfc:<|\xbe{\xff\xc1\xfe\xe1\xc3\xddo\xed?}\xfax\xef\xf0\xeb\x8f\x9f~\xed\xfe\xe3\xc3o<}\xfa\xcd\xc3\xc3:\xefXo(\"\x1cE?|\xb0\x8b/\x84\xf3\xc3[f7\x98\xe6QI\xb9\xd4\x04\xcfvp\x84\xb04\xf4\xd3\x8a\xd0\xd8\xda\xba\xf7&\xc9;\x9f\xe2\xf7\xb8\xb4}1:\xf6\x83\xf1\x03\xa1\n\xb9\x7f>g\xe0jnT\xbcW^\xe1\xb3\xdc#qJ\x15\xef\xc2\xe1\xd2\x13o\x06\xd9\x0b\x9foy\x0eH\x8a\xfd\x17l\xbc\x97z)\xfb0\x8ef e\xac\xf9\x96\x97\x9b\xf9g~\x08O\xf38\x9a\xe7\x00\xa4\x02\xb0%\xf1\xe9E([\x95\xaa\xee\"\xab\x90\x1b\x00v/\x08\x84{yx\x82\xb4\\mW\xbc\x00\x13\xe9-\x89G/\xdeyG\x8c\xa6\xe8\xf5\x8c\x93\xfd-:\\\x0f\x1bL\x9d\x9c\xd8\x02\xfd\x94\xb2\xe3'\x1f\xb1\x19\x1c\xac{V\xe2\xb0\x8ej\xd7\xcd\xb2h\x998q\xe7\xc3(>\xf5\xe2\xf1s6q\xcbP \xcf}o \xd4\x92\xf0:y\x93.\xf5\xa4+M\xc9\x90\x05\xe9\xe7vB\x8b\x1b\xce\xe0\xc9\xfc\xc6\xf3l\xb2\xe6\xb8[\xbb.\x19\xd3Z\xfb,r\xbcrOVs\xd0%\xd7\x1aq\xf6\xb9b\\+6\x14\xc7J/ol\x84x \x03\x99\x1d\xb7ZB\xdb-\xc6\xe0\x93\xcc\xa3\x0b\xfeu\x0e\x8a0\x9e\xba\x95\x98\x1b!\xd6L]\x13\x1a\x18)&3\x1a\x18!&S\xda\x1bL\xb7s=c\xd3\x9c\x8a\x86\xce\xa9\xe7L\x85\x9d\x88\xe1;\xe7.(\x1b\xc7\xf00k\xb5f\xf0\x90\xb4Z\x89s\xee\xcam\xe0\x0b:1Br.\xcc\xdbFFJ\xce\xc9\x0b\xddi\xdary\x93\x1e\xc2\x97\xba\x9b\xcd\xcd\xb7\xff\xf7\xa5\xcd\x06x\xe5\xf94i\xbc\xf8J\xa7\xdf\xef\xf4\xbf\xb4Yr~\xfbi\xd2\xf1\xa3\xee\x976\x1b\x0f\x94BF\xc3\x18\xe1\xc6V\xaf\x7f\xef_\xbe\xf7s[\xbd\xfeWH\xe3G\x16\x81\xef\x85\x8do^\xfd\xddq\xc8\x82/m6\x9e3p\xe09\x06?\xb618\xda\xfd\xe8\xd1~\x83\x0bda\xc2tG\x9e\xbc\xf2\x17\xa7\xfb\xdf\n\xbe\xf4&Hk\xffu\xbfT\xab/\xbc\xc2\xd6\x18\xad\xe1\xcb\x82:\xb9@\x04\x0f\xd5\x0f\x1du\xf9[s\x07\xd6P\xa2\xd3\xb2\xd6\x0e\xb5v\x19P\xcd\x95=2Q\x9a\xa77\xd5sA\xec\xb6\x82\xcd\xca\x1b$\xd5\x13\xb1\x1b.**\x86ur\xf3\xcb\xd9]\xc3\x13!\xfa\x1a^R2\xad[\x92PG\xa46\xc3\xca\xaecn\x96~c\xed\xe6\x92\xea/Y\xd6\xec\x93\x98#`\xe2O\x17\xe2{\xb3'\xaf\xca\x90\x1f6b\xd0\x0d9\x8d\xfdT~\xcb\x8d1\xcb\xec\xc8`$\xe6\xc2\x18\x9f\xb9+\x97\xff\xe5`{!Lr\xed\x86?\x04=Y>\xf1cLRX)\xe3\xb2\x14Z>\xa2\xcf\x1d\xb6\xd3\xfe ]u\xd6\x9e\xaa\xce\x87\x9a\xd5\x87\xb6S\x00\x0b\xde\xf0v~\xdb9\xdc`\x01.m\xc1\xb4\xbd\x80~\x1fT\x1a\x98\xfcz\xa0iTa\xdb\xe9k\xbb\xd0\x02\xb8\xbe\x8b\xb3L\x7f%\xd1\x8a]\xd6\xceVm\xd1-\xd7\xd6_,\xc7%\xfej\xd9\xbb\xb5e\xef\xeae\xef\xba\xd6\xbb\xec\xee U\x17\xdf\xf2t-=\xa3\xa1g\xde\xf8|\x1dRx\x97\x10\xdf \x04,e\xc2\xfbO\xbdw\xd8N\xcc\xab\x81\x1d\x8cRc/\xa3A\xc6\x05\xaf\x8e\x86lH\x1c\x0b\xae\xc3\x82uc\xd9*\x8ad\xffN=?\xfd0\x8aE\xf6\x1b\xe7\x9c\x0d\xd7\x8daI\x99\x84\x0bt\xf5$\xa4Ol\xad\x11\xb1c\x07P\xea\xeb/\xae\x9e\xf8<\x86\xdc\x0fe?\x9eE\x89\x0fyB\xdc\xe25t\x1e>}\xf0\xf1G\xbbO\xf6\x0f\x9f=\xdd{\xb4\xff\xe8\xe9\x93\xc3g\xcfw\x1f\xec>|\xf4\xe4\xebZ\xcc\x8f\xdc\x99\x93\xf0\x04\x96~\x8ej?|\xfa\xf8\xf1\xd3o\xf3j\xf3\xe9%\x1f\xfa\xa55Tb\x97\xd7\xb2~Ya\x9dy\xcc^\xf8\xd1\"\xe1\xf9\xf2\xa5\xe3\x82\xa7\xf2\x14+%!\xff\xc9\xc1\xe7\xcbv\xc8\xceR\x91\x1d\x1c\x16\x15\xaf\x057\x81\x03)\x81\xd5\x0fAb\xa8\xc7m1\x03a\x05i\xf6\x0b\xdf\x7f5\x96$B7\xeb\x85\xc7\x01 A\x01'%>\xe5Bs8\x0e\xd8\x18\xe7\x8aI+#+G\xd26\x9a}a\xfe\xe3\xdb\xcd>\x15OYf\xc4N\xe4\xaaZ\xf8\xf6\xc2\x8a\x95]\x82\x17X!\x91_\xc0\xf8\x82\xf0\xcf\x86(\xdcj\xad\xc9\xd7_\xe2\x129\x8b\x0fO\xe7,\xbc\x81\xbdV\xf9\xd1\x80\xadq\x80\xa6 \xcd\xb2\xa8n \xe0\x08*\xcf\xe6\xa8S?\x9f4\x17m0~\xa9r\x8a\xaa\xcfr\xb1\xe1e\xfb\xc7q\xb4\x98B\xbe\xb5\xd0\x93\xa8\xd8\x17A\x14\x17\xceUeL\xbf2\xb3\x00\x1b\xbe\x18\x93\x80:\xae2\xcb\x96\x17\xeas%\x8d\xf9*\xc5\xa7^\xa7B\xd0F\x82\xc9\x1c\x94\xc1\x04\x99\x92\x05\xa8&\x8e\xd9\x00\xebs]\x8a\xeb\xe5%*\xad3\x84mx\x9d\x15\x925\x16dN\x18 \xcaKM\x8a/\xbcu\xf8L\xcb\xf8d\xb5-I\xd3q0a\x00l\x13\x99\xb2\xc0\x83Q\xfd\x90\x87\x90\xbb\xcc\xc7d\xdfVH\xcb\x08\x08\x13.&\"ce-\xacg\x065\x02\xdd\x0fc%\xf4\xa9\x92R\xd4\x96\x8b/U\xb4p\x00\x97e\x91\x81\x89_\xd3g_\x80S\x0e\x81\xd2\xa9!E\x83\x11\x1f\x88\xaf,%x\xb0FFB\x1e\x18\xc4\ngv\\\x15:|\x92`+\x91r\x83\xabv\x89r\xd9\xbcI\x08\xaaQ\xefrR\xd7JIL\xf3e\x97\xf3J\xf9\xa8\x96$HJ>\xaaI\x8c\xbe[\x93\x1a\xd5\xa4\x9d\xb2\xa3\x13?\xad|\x80\x1dJ\xc1K5\xe5\xa7\x17,>/\x8b\x05r\xb5\xd0\x9c\xec\x08\x17?=\xe0Y\x18\x93H[P\\\xbe5\xe3\xa3T{\xd0\xe0s\xea\x94\xdbu_\xdb\xae+\x03]F\xa5\xe7\x97\x90\x8ap(\x9d\xd0{\xe1O\xf94\xee,\x12\x16\x83Z\xd4\xc0\xd0\\Y\x7f\xb4\xf7h\x17\xe1\x9dv?\xcb\xb4\xd4\xfd\x18.t\xe0C\xae\xd0\xe0\xc3QP\xb1\xc9\xf7\xd5\xf0\x05\xd1\xb4NTX\xb3c\\w\x1cb\xeb/\x16\x1a\xb3\xa3\xc5\x14\x111C:\xd1<\xed\x04\xd1t\x90\xbf\xc0g\xdds&-\xf4'b[\xbb4\xb2@\xd7\xa2\xf600vB\xb7\xd5\xe2\x7fE\xc4\xae\xce\xa7\x89\xd5@\xa6\xb6 \x11W\xac{i\xcdrZg\x1c\xea\x0c\xdbCg\xe8\x0e\xbb\xc3\x8b\xe1rh\x0c\xf1psh\x0e\xedag8\x1c\x1e\x0c\xdf\x19f\x109r8|\xa7\x85\xaa\xb2\xd7s6\xdd=\x9b\xafo\x06\x8d\xfd\xc4;\nX\x11\xb7\x94c\xe1\xd4\x0f\xc6#/\x1e\x83\xc7B\x91\x9c\xb0t1\xff\xb6J\x17\xd5\x82H)\xbf\xe7]2X\xc5\x01\xa8\xaa49\x0f\xa3\xf0|\x96\xe0\xdc0X\xd5-@\xdd\x93\xdf\xb5\xba\x8b\xc2\xfe4\x8cb\xf6#\x91\x1f\x82\xbea%\xfd\x19\xef\xd7Bl\x8a\xa5\xf6G\x05\xf2Gzy\xad\x85b\xe0}o\x14\xfb\xa9?J\xaap=\xcc\xbf\xac\xf6Z\xe4\xf8\x88\xc5S6\x86-_\x91\xe7\x87\x03\xbch`\x15\xee[\x8f\x9b\xa8\xe0\x86\x81\x13\x19\xee\x8fF\x8b\xd8\x1b\x9d\xe7\xdf+tT\x1e\x9c\xf5\x82\xe8\xcah+\x87U\xe2\x1b\xc2\xcf_\xa1\xbfR\xa1\x8f\x07H\x1a9\xc3\xaf\x18\xd0\x82%\xf0}\x92,\x8c\x0c\x19\x81\xa1(\xeda\x13e+\xa9 6\x11F\x04Mg\xc8\x0c1\x89\xcd\xbc\xa4\xd4\xc5\xe7c<;\x9f%\xa5\xf2\xd5o\xa2\x163.\xab\xb2\x08R\xa9\xe4]\xcfu~(S\xe3\xc6y]\x00U\x87\xf1\x1b \xd3\xb1\xdc5lk8\xc4\x9bC{\x8d\xdb\x15\x19i\xb3\xb0\xaa\xb7\x91\x8d,\xf4\x7f\xa1%\xc6x\xb5\x9a\xcd\xdbW\xb3\x89,\xf4\x7f\xa3\xd5m\xfa-:\"\x0f\x1aO\xfd\xf4xo\xee\x8d\xc0,\xb0\x86\x1e\x07\xab\xeb\xccp\xd1\xeb\xf5\xfa\xdd)Im\xe4\x0c\x87{\xc3a\xe2\xf2\xfe\x0c\x87{v\xc9\xe1+\xcf\xb7U\xce\xb7)3njK\xd0\xba\x11\xba\xe5\xaaw`dx8t\xeb\"\xd6\n!7T\x18K\xcd\xbe\xda\xf2v\x1dYJx\xf4\x89q\x96\x81K\x88\xd8f\x1639\xc3XE\xea\x1b\x81\x13(u\\\x9d\x99\xadP\xa8Bh\xf9\x06 \x04\xd7\x87j\xc5KuW\x14\xf9\xcc\x0cs\xb7A\xfa\x8aT\x9a\x1ayQ4\xe4\xd8\xf7\xc6C\x883}$~F\xe2g\x0c\xca\xfe\x927\xe6N\x91`\xb4zfW9'r\x90\x99\xe6\x0d\x9a\xc8\xddD\xd8b\x15\x8cT\xd7\xbc[0\xfcZ\xe6\xbe\x96\xf9;\xc8\xbb\xfa\xf5\xab\xef_\xbf\xfc\xcd\xab\xdf\xbc~\xf9\xfdW?y\xfd\xf2\xcf\xae_\xfe\xc9\xf5\xcb\xbf\xb8~\xf9W\xd7/\xff\xf7\xd5o\\\xbf\xfc\xdd\xeb\x97\xbf}\xfd\xf2\x07\xd7/\xff\xe0\xfa\xe5\x1f]\xfd\xd6\xd5o\xbf\xfa\xf1W\xff\x0e\x11t\xff\xea{W?~\xfd\xf27\xae~\xf2\xfa\xe5\xaf\xbf\xfa\x89\xeb\x97\x7fz\xfd\xf2\x8f\xaf_\xfe\xf9\xf5\xcb\xbf\xbc~\xf9\xd7W?q\xfd\xf2w\xae_\xfe\xd6\xf5\xcb\xdf\xbb~\xf9\xfb\xd7/\xff\xf0\xea\xdf^\xfd\xbbW\xdf{\xf5o\x11A\xa3\xab\xdf}\xf5S\xaf\xfe+\"\xe8\xc1\xd5O\xbd\xfa\xf7\xaf\xfe\x0b\"h\xfc\xeag^\xfd4\"\xe8\xe1\xab\xff\xfe\xea\xbf!\x82\xd8\xd5\xef]\xfd\xe0\xfa\xe5\xe5\xf5\xcb\xbf\xbf~\xf9\xb7W\xbf\x7f}\xf9\xe3\xd7/\xff\xe1\xfa\xf2'\xaf/\xff\xdd\xf5\xe5O]\xfd\xc1\xab_y\xf5s\xaf~ \x11\xb4{\xf5\x1f\xae\xfe\xe3\xf5\xcb\x97\xd7/\xff\xee\xfa\xe5\xdf\\\xfd\xa7\xeb\xcb\xef]\xbf\xfc?\xd7\x97?q}\xf9o\xaf/\xff\xfd\xd5\x7f~\xf5\xcb\xaf~\xf6\xd5/\"\x82\xfc\xab?\xbc\xfa\xa3\xeb\xcb\xff\xf8\xea\x07\xd7\x97\xff\xf9\xea\x8f\xaf\xfe\xe4\xd5\x1f \x82\x1e]\xfd\x97\xab\xffz}\xf9\x1f^\xfd\xde\xf5\xe5\x7f\xba\xfaoW?\xfd\xea\xf7\x11A\xc1\xeb\x9f@\x04=~\xfd\xe3\x88\xa0\xf0\xea\xcf^\xff\x87\xd7\x1c\xf2'W?\xf3\xfa\xa7^\xff$\"(\xba\xfa\xf3\xab\xbf\xb8\xbe\xfc\xe9\xab\xbf\xba\xbe\xfc\xafW\x7fy}\xf9s\xd7\x97?s}\xf9?\xae/\xff\x9f\xeb\xcb_\xfa\xa7\xef__\xfe\xaf\xeb\xcb\xef__\xfe\xca\xf5\xe5\xaf]_\xfe\xe6\xd5__\xfd\xcdk\xde\xe3\xa7W?{\xf5s\xd7\x97\xff\xed\xea\x7f\\_\xfe\x97\xab\x9f\xbf\xbe\xfc\xd9\xeb\xcb\xff~}\xf9\xf3\xd7\x97\xbfp}\xf9\x8b\xff\xf4\xeb\xd7\x97\xff\xf3\xfa\xf2\xd7\xaf/\x7f\xf9\xfa\xf2W\xaf/\x7f\xe3\xea\x17\xae~\xf15\xc7O\xfc\x9a\xf7\xf5\xf9k\xde\x8f\xe4\xf5\xf7_\xff\xca?\xff\xd2\xeb\xff\x85\x08\xda{\xfd\xeb\xaf\x7f\xf9\x9f\x7f\xf1\xf5\xffD\x04\xa5\xaf\x7f\xfb\x9f\x7f\xe5\xf5o\"\x82\xf6_\xff\xd6?\xff\xf2\xeb\xdf@\x04-\xae\xfe\xf6\xea\xe5\xf5\xe5\xef\xbe\xfe\xc1\xf5\xe5o\xff\xd3\x9f^_\xfe\xc1\xf5\xe5\x0f\xae/\xff\xe8\xfa\xf2O\xae/\xff\xec\xea\xf2\xea\xef^\xff\xc9k\x8e\x86\x8f\xaf~\xe9\xea\x97\xaf/\x7f\xe7\xf5\xef]_\xfe\xd6?\xfd\xc9\xf5\xe5\xef__\xfe\xde\xf5\xe5\x1f^_\xfe\xf1\xf5\xe5\x9f^\xfd\xca\xd5\xaf\xbe\xfe\xe3\xd7\x1c3\xe7W\x7f\x7f}\xf9\x17\xd7\x97\xff\xfb\xfa\xf2o\xaf/\xff\xea\xea\x1f\x10A\xdf\xb9\xfa\xb5\xeb\xcb?\xbf\xbe\xfc\xeb\xeb\xcb\xbf\xb9\xbe\xfc\xcb\xd7\x7f\x83\x08\xfa\xee\xeb\xff\xf3\xfa\xef^\xbfD\x04\xfd\x9b\xd7\x7f\xff\xfa\xf2\xf5\xdf\"\xd7\xfa\xdc\xf4\xf6\x85\x89\xadBioIf_\x88\xc6\xd6\x12X\x89\xba\xbe i}\x01\xba\xaa\x10U\x0dE\xbd-9}~Z\xba\x81\x90r*\"qq\xa9\x9c;\x9dC\xa8\xee\xaa5\xc2\x17\xab\x9b\xf6P\xc6\xf7.;\xe9\xc1\xca\x90D&\x84\xb0;V[\xf7\xc1:\xb1\xcfAfh\"W\nt)&y\n\x84\x08\x13\x16\x0b\x85\xffI\\\xb9\x9e]\xb7s\xb9\xe5\xda\xc9\xe9\x85\xc4\xd4\x93\xd1h\xf2AZ\xdb\xdcM\xa7\xcb\xf2\xe6Ci\xa6\x10\xfdLW7\"\x92\x00\xd9FL\x8d\xb0\x88\x8e\"\x93\xc1\xa3\xa3\xa9\xa5\xca\x8b\xe7~/w\xd8'\xc9P\x95\xc0\xf2VA\xff\x90\xef\x9f\xe3v\xba\xd3\xe3?\xe1N\xcf\x8eh\xb3'}\xca\x02 \xc0n\xcd\x0f\xa7\x0d_\xda\xe9Dq#z\xc1\xe2\xc0\x9b\xcfyr\xcc\xfbl5\x90\xb9\x1ah\xa3\x8e\x14r\x87\xb5\xf5\x95\xbfmm\xe4\x02\xbag\x85\x84\x85c+&P\x8b\x15U\xee+\xbf}\xec\xa7,\xe1[\xdf\xf5#Tl\"\x8b\xa1\xa9xrO\xdb>Ij\x07\xa3\xed)\xcd\xb2\x98\x1a Mv|\xdb\xb7\x925C\x84w|pA \xdd\xf4\x02\"vC\xd9\xf7\x86\xb7H\xa3\x99\x97\xfa\x9c\xbe\xce\xc1t1\x8d@\xa7v\xe6\x9d\x89\xf8\xd8|\xba!\xd3\xc7\x98$\xdb\xbd,\x8b\xdb\xf0\x93\xec\xf8Y\x16\xef\xf868\xf5\xd7\xaa~\xf49Qk\xc1.9\xd4\x9c\x8a&$\xd6\xf7\xfc\x89\xd9\x9d\x12\x84\x84\xc7\x84R\x93{'\xbe \x8e\xd3\x1c\xf1\x82q\xbc-\x0cjx\x93u\xc3;e\xe9\xbe\xbc\xa5~\xf3\n\x85\x90\x90\xd7\xc4L\x90\xb7\x8e\xa5\x8b=\xfeG\xdc\x11v\xf6\xbe\xf1\xf4\xdb\x87\xfb\xbb?\xba_9\xa0\x91\x17\xc3\x92\xec\xd4\xb0r\xf0\x8c\xd0\xa4\xac\x93\xb2\xb3T\xde\xd9\xaasmq\xd3\xce\x96+\xaa-\xf9\x12#/\x93v\x85&\x87\xa1B_sp\xb0\xad\x01\xf5\xe1\xa3\xc7\xfb\xbb\xcf\x0f\x9f\xef\xfe\xc8\xee\x83}k\xf5\xc3\xfd\x07\x0fv\x9f\xed/\xcb\xba5\xcc\x10\x9e\x99\xac\x10\x00I\xacxY\xba\x08.7~\xc3\xc2\x15\xe5j'\xac\x18-\xa9}\xa2\xd4\xe7\x1d$\xb4\xfc\xb9\x18\x9f\x9e\x0b\xaf9~\n\xbf\xc7\xcc\x1b\xf3\x9ft\x16 Wk\xff4\xf6\xe60/\x1f\x85j,\xdf|\x95)\xda\x16\xe2\x95]M\xb0`\xe1B$\xa2R\xb4\xe0\xf5\x1a\xa9\\\x03\xf2\x84\xb0\x9db\xe2\xd1\x8a\x06\x8br\xc1\x17\xe7\xeav^')\xa9\xe4\x8d\xbd\xd4k\x0buy\xde\xbdx\xc1\xf4e\x0f4\xad\x9f\x80\x8b\xadjA\xf8\x84j\xb2b\xe2\xe9\x84C#\xfd\x8dD\x1a9\xa8\xf9'\xa2\x98{$\xc2\xc4\xaf\xc3\xe4G\xde|\xce\xc67\xe3S\\\xec\xcb3p\xa1\x98\x00\x04\xb2\xb2M\xf1H\"\xf2\x05Tfq\x12\xb3_\xb6%\x0e\xb2,\x10\x0cqG\xaa\xa9\xc7\x86\x07\x99q9V\xc4\x88\xa6mO\xb2\xce\x055\xc2\x1d\x8f/\xc66\xfc\xb5B\x9c\x7f\x9bSel\x9d\x07\xdf\x93\x9f0\x99T\xbf-L\xf5M\xf8\x95\xe7\xedR\xbfSCZ\xf2#\x19\x91\x05\xce\x0d\xd6\xe7\xe6\x84\xa8\xce\xd7h\\q\xd2\x0bw\xc4\x99\xbb\xec\x7f\xe8\xca\xce\xf6\x84\xaee\xdd\xb76\x85&\xf2D\x16\x8ey\x12\xc8\x11m\xba \x91\x84%W\xd5\xd9\xf3\x8f\x02?\x9c\x16\xfdl*\xf4`=\xc6\x1b\xa4\x946r:\x01|\xb4\xfe\x8e{u\xc8\x89GE\\\xf7\x9e\x95\x9a}\xc1\x19u\x9eZ\xbe`N\xd7\xa3\x08_\xa4T|.\xee^\x94\xc2\x87\xb424\xf8t\x04\x87\xb0i\x89K\xe6\xee\xb1\x1d\xcf\x85(\xe5\xa1\xc1\x1fs\x8f \x8d\x84\x14\x0f\x06\xdd\xe0\x0fV5\x11\xd0\xfe \xd8\xf6\x06\x81i\xe2\xc4\xa4\x91\x13\xb8\xb9\xa2\xfe\x9a\xe1OIB\x12\x937\xa0\x04 \x12\x83\xc1@i\x08\xf8\xb8\x05^\x92>\xe2\xed\xd2\xde\x12n\xcf\xcbZ\x88\x1a\xae\xef\x8f\xe2(I$\xe3\xf8W\xc1|a\x8eT\xc1iR\xe0\x14Z\xcd\xb1 q\x88\xd5\xacM\xd6!pD\xfb\x83\xd1\xb6'\xe2\x86\x984qF9\x02\xf9\xe7\x05\x0d\xcc\xa4@\xd5\xa0\x84\xd22\x8b1R\x12\x90E\xed\xfa\x16\x1a\xbc\x0e\xc2*\xfa6\x04\x02\x00\x14X\x0e\xf9@\x00\x8ak0\x0dm~\x18G3\xc8{+5\xab\x9bP*\xf5P<\xe5\xaaBu\xb0v\xeb\xaa\xeaM\xc0]r\x8d\xe2\xa28\x1cR\x07\x98\x8cho\x10\xde\x82\xd0| 4\x12r\xa2\xf0I\xbf\xec\x03\xbf\x9e\x00\"\x92\x92\x18t\xdb\xcb$02Mr\x1b2\x18U\xc9\x80o\x17\x9c\xa4\xddwa\xe1.Q\x84\xc5\x0c\xcf\xf14K(\xb3\x0f\xf1\x8b\x97\x86\xe7\xf4\xdc2\xb5\xbc\xf9\x98h=\xcd@\xa2v@h0a\xdf\xac.y\xb5\xc3\x95=\xbe\x06ql\xa6\x11\x98\xfd\n\xac\xa6\xc7\xac1\x89\x82 :\xcdOo\x92\x9a\x1dy\xa4v\xe4\xab\x8b\xaf\x11U\xae\xdf\xe3u\x03\xa0>\x96\x07\x00\xe6k\x05\xfd$\xad\x0e@u\xbe)\xe3\x17-\xb1X\xd4\xea\xe7`\xe9\xa84\xc7&\x1b\x148~\xc3.r\x13\x0dB\x93\"G\xdb\xf0\xb9u\xdb\xb7V\x8b\xef\xfdQGj\xc8T\xb6v\x05'}\xce\xb9\xbf\x174\x12\xa9\xdc\xc9\xe9:\x14t-\xd6\xbb\xdb\x9cI\xec>\xde\xfdh\xf7I\xe5X\"\xed\x94V\xf6*=\xe7N\x10\xf5-|\xc8\xf7\xc3\xabg\x0f\xb9W\xe28\xcb\xfc\xcfu\xf8P\x1a(\xcd\xd0j\x9e\"\x92\xb0\xb44B\x90\xf7\x90\x8fK\x0c\xde`r\xdc#\x92\xa3\x90\xbf\xc8c\x060A\x15*\xbe\xe0\xf0\xa5d\xd3e\xbd\xcb\xee\x92\xd5\xfb\x05\xe1\x14A\xa9/\xf07\xa5\x8af],\x89\xba^\xb2\xb4\x9b\x1dRf\x8a\xbc\xa5\x12\x13\x85\xa6ue\x8c\"A,OV\x8f\xach\x83p\xd0s]\x1b\xab\xd0\x0d#|\x06X\x1a\xe5/\x89\xe47\xe5D1\xa7\xf4\xb4|\x07H\xc6\xa5p\xbe<7\xa8\xadr\xb0\x82hjI\x15]\xe97D\x04\xf5\x9d\xea\x03Q\x88\x9aj8*f\x02Q\x8c\xd6\x94\x10\xde^\x05[J\xcf\xb4\xd5Z\x0c\xcd\xcaA\xd1J\x8e\xc2 \xcf\xc5\xc4_\x16V\x8e\xf5\x13\x99\x88@\xc3~A\xa8\x02h>=iYf\xcfY\x12\xff&.\x01\xd2%\xc9s\x8b\xb5\xe8\xa62J}l\xa5$p\xcd\x1bKj\x17\x0f\xaa\xa4`S\xb5\x1es\xe57.g\xc8\xdc\xcb\xdah#7y\xc3\xc8S\"q^\x03AK\x1d\xcf\x15O\xa9z\xf2\xd5-\x8fox\xa4\xd9\x13\xa2\x9b\x08pXv\x1c0\xf1\xc3qc\x16\x8d\x17\x01kl \xd33\xd1\x06\xe2\xb2g\x1c\x9d6\x82\xce(\x1a3\x8a>z\xfa\xf0\xe3\xc7\xbb\x87O\x9e\xee\x1f~\xf8\xf4\xe3'\x0f\x11 \x96b[\xc9[\xa6\x17\x12Z\xebb\xb9\x1cp\x08\x9c\xde\xff\xcb\xdd\xbf.\xb9\x91$\x07\xa2\xf0\x7f\xbd\x82\xfe\x00\xb93\xe8\x8c\xae(\x10\xa8\"\xd9d\x82I\x88M\xb2\xa7\xb9jv\xf1#\xd93\xd3Bc\xca\xb2\x12\x81BN%\"1\x91\x81\xaaBWbmu\x9b]\xdd\xaf+\xcdH\x9f\xee\xd2\x1e\xcdh%\x8dV\xbb\x92VZIf\x9anIf\xc7\x8c\xc3\x1e\xbd\xc0y\x83\xf3\n\xc7\xdc\xe3\x92\x91\x89D\x91\xddj\xe9\xd8\x11\xcdX\x88\x8c\x8c\x8c\x8b\x87\x87\xbb\x87\x87\x87\xfbX\x9d7\xc5f \x8d\x1b\xc6\x0c]\xfa\x8c\xfac\x8c8\x82\xb4,\xa6\xe5'f\xb3g-\xc4a\x87\xaa_\xaeK\x0fn\xed\xbe\x8eL/\xec\xc5\x84\x9d\x1d\x92\xf9\x02c\xd2\x9b\xa6\xd6\xfeE?\x18\xd5\x01\xad\xa8\xe5\x8b\xa3)o=V\x1b\xc8\xcb|M\xdb\x13:\xe3\xd5\x17\xcf\xe8t\x0c\x8cm\x0e\x1d\xccJ\xdc\x1e%9 \xedF\x16f:\x0c\xc3\x9d\xc4n\xf5u\x94~\x04\x824\x0e\x08\x18l\xcc#\xca\xf4\xf6\xc3\xaa\x19T\xd8s{\x93 '\x9d\x8e\xf3M>\xa6*\x10\x03\xbdX\x8f\xe9\xde&\xf8\x1a<\x0d1\xdf\x9bf\x02h\x9dG\x06\x0e\xae\x96@\x81\x9dV\xdd\x88\x9fX\xd5s\xce\xa4.\x0bc\xdb\xbb\xb4\xec1\xd3\xaeb\x0d\xd3;J\xf8\xc4\xcf`\x98\x16=`\x84\x19\xc96B\xfe\xa3{\xe8Q2F\x0f\x7f\xeaCA\x19\xb1\x08#\xd6\xe5\xccf4kpZ[\xba\xcdh\xf0*\x97YW\xc1\xb4\xe6\xdcqg\xc7\x06\xdd4\x8e\x1a\x9bB\xfe\xb7\xfdDM\xce\xe6%u{\xd2c\\x\xb6dv\xc2x\x80\xa7E\x03\x0c\xf2?v]L4\xfaS,]O^\xde\xfb$\x14\xa3\xde\xb8\xb6\xc2v\xfb\x83\x9d\x1d\x1b>\x18\x16\xda@y\xd4\xcc7kG(o\x8bj\x17\xab\xc2\xdcD\x9b\xb8b\xbb\xa2\x0e\xf0q\xdb\x82\xcd\x0b\xd5\xfc\xc6\xe5\xe5Ey{9\xa1\x11\xed\xab\x80m-\x1d\xcc<\x19\x891\x00r\x92\xc4\xcd.\x9c/\xd6\x96\xe0v\xcf\xa2\xf4\xa4z\x85\x0e\xca\xf1\x91\x1c\x87\x0c\xa4Gt\xe9\xac\x8a5z\xfb\xc40\x8b<\xac\xf9mQ\x12\xc2\x8b\xcc\x1c\xac\x9f\xd7\xba\x89\x84\xba\x02k\xb3q\xfc*\xb7\xe4\xc2-\xe6G\xe4B\xf8\x91\xd3wA#\x1b\xd0PGI@G\x80\xbe C\xdc\x17J_\xd0\x0c/\xae&)\x83\x89\xa2Iw\x91-\x94Z\x0e\xe4t\x8a4\xa8\x065\x0cPe\xe9Xy\xb3\xdf\x9c\x028a\x843m9\xd4$X0'\xaa_yr\xfb\x1f\xae\x1c\xd7\x9cQ*\xe7\xca\xe8\x90\x12*\\\xf2\xcb\xaa,\xeb\xe9\xc3G\xae\xc3O\xf4\xc6\x8cN?\xd74kpMjP\x93U\x82\xa9{W\xbcv\xc5\xda};isW\x0e\xd05\xe6\xf8\xc4(\x15\xa3}bM\x9d\xaf\\Q\xf1^\xcbAa\xd7\xf4|4\x0d\xb0\xa7\xbc\xb6\xeb\xfb$^\x80\x0e\x1fu\x1d\xba\x06m,}E\xd9\xb8i\xb6\x16\xf4\xd7c\xba\xff\x02^\xd8\xec\xde\x88S\xef\xf0\x90\xe5\x0fQ\xd8\xf2\xa8>\xaem+\xdf\x99Q\x9a\x1eL\x9fD\xf3EZ\x8f\xc5J\xedmJ\xbfGEW\x8a\xe8\x94\x89\x9c\x11 \x184!\xe6\xfem\xbbG\x17 \x0cM]w(\x86\xccO\xe8,\x94\xa3\x9a\x0f\xac\xb1O\x06m\x7f\x19\xfa\x93p\x86JE\x9f\x10\xb5\x99\x1b@u\xaa\xd5y8\xd1\x96w\xc7\xf5\xf6#\xff\x02\xdd\xdf\xad\xd6tNT_V\xe1q\x17\xfd1\x9d\x86\xc7\xe8#\xe3\x80\xa7+z\x14\x1e\xa3\xfb'\x86O\xe7\xe1\xb1\xaaq\x90c\xd9Ng\xd5\xe9\xac0\x96\x9fz\xf4\x8d\xe7\xc3\xb3Hp\xdfC\xc8\x04\xad<\x9e\xb1y\x94+\xf5\xc6$\x99\"\xf3\x93\xe8\xb4+o\xc5\x11\x7f\x05\x85\xa59\x1a6z\x84\xaa\xca\xc2\x95M\xa9\x9f\xa2X\xd1\xdc\xf6,,\x93EqJ\xf3\xb2\x97\xa1\x93.\x8a#\xaa\x0eb\xcem\xe4\xe8s\xb2.\x97\xeb\x02\x80?\x0d\xd9z\x9ap\xd8Y\xe2\xba^\x16\x85\xbat?\xeb*\x94+\n\x93\xf2\x89-\x99L\xfd\x85^\x07\xd3\xf5\xda\x11\x06B\x03\x0f#\xef\x187\xc2Y\x17\xc7x\x8f\xb1\x85\x0e\xb4\xa8-YF\xb9q\xaf}\xb1\x1e\x9b\x83\xfa\xda\xb2\xac3L\xf7$\xa0\xa7\xf7\\\xc6\x17\xb6\xe6\xa2\x03y\xcb\x8a\x9brg\x87(\n>\x92e\x0c\x9a\xf5\xda?\x0b\xe3K\\\x0b9cR\xb1\xdf\x08\xa9R\xf5d\xea\xd7p\x13\xa4\x03\x1bx\xa8B\xb1\xb54\x88T\xfb\x85|\xc0\x00O\x8d{*\xb29\xb4\xef\x9f\xb9\xed\x93\x8bF9\xdc\xb2N)\xd9|\x81\xf69\xf9\x02\xb0\x05]\x8bc?\x8f\xd2\xd2E\x9bG\xd6>!\x84\xe6\x03\x0f\x99m9\x81\x9d\x8e\xcf\xbb_Y&L\x16E\x05\xb3_9X0~\xe7\xd1\x83\x96Z\xf6\"hM\xb3%\x9f\xb4\x10\xe1\xb5\x07dU\x17by\xb7\xf5\x98\xe5\xcbT\xb6\xe6\xd1\nP=1aj^\xd1\xae\xbf\xcf\xe8I\x18\x8fbGP\xa9\xa1\x8eB\xe2\x93\xe1I\xa0sh\xbe.\xe5\xf6\xee\x15\xb3\xb4=B3\x95\xb3\x94I\x9a\xbb\x92|\xe2\xb2{\xf7\xba'Cy\xe52\x8f\x91\xb5\xedVc\x19\xa8F\xa2\xd9\x94\xd8\xc4\xa7\xf2\x00\xe0\x05\x9e'\xb1\x8fn\xa0-\x82N{\x9d\xd8\xa4\x95}e\xe9\xad>\xf2?\x96k8\x05O\xd7A\xdc\xd0}\x08.\xd6\x03\xf9\xd9\xbda\xe2c`\xfe\xe6\xf3t\xed\xf4g$Q\x8f\x1c\xbc`d\xf9\xb0\x89\xb5$\xa8\x83x\xd1\xa7\x18?7\xf1\xf9\x96\x8els\xc9'_T1\xc6'@9\xc7n:,@\x8dK#\xabxB\xa9\xbfq\x10\xaa-k\xc3T\xce\x9e\xf6Ik\x9d\x0b\xc2\xb3q&\x88\xdc3\xd0\x8e\xf9\x9dv\x1d\xff\xab~\xfao\xc7O\xa4\x8e\\y\xe1\xae\xd5\xa0\xbfG\xedJ\x0d\xfa\xfb\xeb1\xbd\xfa\xe9\x8b' \x9f2\x01\xd4\xb1.\xe89\xb6\xac.\xb7RO\x83r-\xb9\xb4B\x10\xba\xcd\xd9d\x86\xce&q\x9b\x989\x1b-\xa8\x7f\x94\x8d\xadR\xcb\xae\xdde\x9a\x1a\x12v1_\xa62Y\xa4\xec`\x1a\x98P\xebt\x1e\x9d'\xf3\xe5\xbc\xcc@\xfdd\x9e\x9c\xb2\x87\xf57\xf3\x84o+Z\x7f3\x8f\xce\xdfR\xb6\xe1\xe6\xc8\x0e\xbe\xaeg-\x80u\x08^f$\x92\xcd\xf3@\xd3t\xa8\xe4A5#\xe1\xd5\x8c%O\xbe\xb2d\xd5\xbch2A\x0fCQ\xfa\xa0^[I\x0d\x02\xc3q\xa1\xce\xa6l\xc1\xbe\xb2L\x04\x9b\x949e\xbdM\xe5\x17MyjxM\xc5'l\xc1\xf8\x84\xf1\xd8\xcd\xd5z\xa4k\x9f>r\xe6Mb\xb3\xc1\xa7\x8a\x13P\xffbM\xf32\xa2\x00\n\xb4\xe8\xd7\xeen\x14\xcf\x18\xf1 \xdd\x90\xb13\xca\x89\xe2\x96k\xca\xbb\x87\x82\x1d'\xb9dB\xf3\xec0\xdd\xe2\xcb\x94S\xcf\xae\x19\x8f^T\xc9Y\xb3\x8e=)W\xd9\x1a\xc7u\xa8\x06&\xac9\xd0\xa5\xbc\xda\x14\xbe\x82\xdb|\x8f\xd0D\xe5c\xa5\x1e\xa1\x11l\xcf\xddJ#\xe3\xf3=?I\x16\x8f\xb5\x1c\x1c\xb4\xfbU?\xd6\xc0\xee#\x1529\xf5\x0d\xb6e\x1a\xe6(W\x11\x9a\xfa\xdeQ\x96\xa5,\xe2\xe5\xab\xd7U\x06\xbe\x84\x8d\xdc1,\x1c\xf3R]\x8e\xc0wfM5\xbc2\xe8d^)H\xe3+\xb3\xa4\xcc+%\xf6\x11E\x1b\xd5\x88\x83\xabt\x13*\xc1\x0dZ#\x9e\xeb1\xbd\xfe/\x85\x92\x08\x9e\x86\xa8\x1d\x9f\xd0\x89\xc9\xc5\x9a6\xb9\xcc\xac\xfa\xc6\xb4v\xed\xack\x08JQ\xf4\x075\xc9\xbf\x8b\xb4H\x19uc4\xe5yt\xeegT\xe7\x1b\xd9\xdf(\xa8\x1aD\xb0\xe6\xfa\x86:1\x92c\xd8\x86\x04\xfa\x11\xd2k\x1a\xe9h\xf5mSZW\x159n\xb8{\x83\xfcV6\xc8\x0d;H\xc3\xc4\xcfa\x8b[[\x96)\xce\x12]\x86\xb1\xdeJF\xc6\x07\x93\xe1\x0c\x91+\xd9\xba\xcb\x05Qd\x03\x05^\xfb\x97B\x01\xbd\x0c\x1aT\x10\xed\x9e\xa6\x887>\xed\xb6\xb7~\xe0`\xe5K\xd2$\xe1b\xf2\xfa\xc5u\xbfn\xc8\xc0K\xd5^\xa3\x15/Q\xff\xdb\x9aZ\xbcT\xf5I\x85\xa4\xbcD\xed\x07\x9a\xe0\xbcT\xedQ\x85*\xbdD\xed&\x88\xecK\xd5\x9eW\x08\xdbzM\\\xe2\xaf\xa8\xb0\xa5\xfc\x86\xf6Z\x92\xafi*\xd0||\xd6\x84\x94\xd0\\\xb3\n\xd5\x13M.Um\xc1u\xeaT\x15\xbcF\xcbz\x82\x9b\xb4\xac$\xe8\xf7hYE\xd0\xef\xaf\xc7\xf4\xe6\xa7\x8d\xc1\xbc2s\x9b\x14\xb4T\x07j\x01\x0fDk-\xc0\x0d}\x89\xd6\xb2U\xe1mX\xc6\x8c\xf7mQ\xb2\xd3\x0f\xec\x03\xf5\xdd\xafL\xb5\xf2vh\x1b)\x8avs\x11[\x02\x9d[\x85\xbe}\xde)\x9b\xba\xb2G\xa8$es\xc3O\xd2\xc7\xc0\xd6<\xdc\xec\xc9\xd0\xbe\xbc\xdd\x1b\xf6\x82je\xba\x7f\xbb\xfd\xa0Z\xca>\x05\x86\x1c\xf5{\xffR\xb3\xa9>\xfc\x7f\x87\x1f& \xfd$S\x9fU\x9c|e>\xeb\x96\xb2\xad=^\xa937#.\x03\x7f\xb3\xa2\xf3h\x8c\xde`\x05\x9b,c\xb6\xedv#\xecL\xdb=\xca\xd6\x04\xc3~U4&n\xcb\xcdW\xc9\xf1H\xbf\x0b\xe2\xd9\xdb\x19\x7f\xac\x1b.\x8a|\x9b\x93\xa3hCE\xec\xb41\xca\xc6\xa8N\xbe0a\xaf\xd1\xe8&[\x93\x81j\xc2H\x80\x9dN\xe4hE\xd5\xbb/\x18](\xbct\x14\xa3~2\xca\xc6a\xa4m\xa2\xd7\xae\x12`\x03\xceM;\x0c<\xb1\xb3\xa1\xca\xfb\x9b\xddo\xfa\x08QR+\xb0\xca\x8f\xf7>\xf6\xc7\x84&\xdb\x84\x84\xca\xd1\xb5\xd5$d\xff\x165 \x1b\xa2P\xbf\xc1P\xe2\xd3Y\xff\x8a\x97\xd5\x8f7\xac9?Z\xe5\xcf#Y\x14\x9e\xbes\xef\xc1\n\x1be\xe3\xa2Hh\x1a\nt\xd8\xea \xaf\xd5o\xfa\xbd\x02I\xe4[\xfa\x9a^\xd7n\xd0iJ\xaas\xbc\xa1\xd1\xcc\xaa\xdbE\x85D\xd9\xe37\xee\xde\x8b${\x9a\xcc\x19A\xf7\x0b\xf0\xe4{{\xbd\xfe\xcd\xdd\xde\x8d\xdd\xbd\xabO\xfbW\x83\xfe\xb5`o\xaf\xdb\xdf\xdb\xff\x01\x8f(\x0f\xc8\xe5\xf1\xa7\"F\xb7X\xa7S=\xcdx'O\xf8q\xcb\xf6\xb5\x15\xb6<\xa3\xabg\xf4\x95V\x92\x97z]\xa5\x02V0iy\x93H\xb2]\x99\xcc\x99\xf7\n!T\x96\xc6\xa0\xb7\xe5\x966\x0c\x0c\xdc6\xe4\xc7h#+\xf5i\x15\xb5/\x82\x88\xf1|)\x80q\xa96H\xb9%s,\xb6J\x17H\xd0I\x9fW\xee\x99\xf6\xa8\xc4\xab\xd6\x8ap]\xb0y\x94\xa4\x9b\x82\x10`\x9e\xf8>v\x8e\x08\xd4\x8d\xb3\xb9\xb7\xa6\x8b(\xcf\xcf21i4\xaa\xf5\x16\xd1g>\x03o=+$\xdc.\x1d1\xa1\x05\xe7\xa1G\xf9\xce\xb6a|\xe5\x0c\xd0\xab\xfd}\xff\xee3\x9f\xfdR\x7fo\xff\xea\xb5\xeb\x1ee\xbb\xd6\x0fYe\x00N>\x1eg;\x00\x0c\x1a\xf9A\xa6\x0ez)\x94\xbb\xa4\x04\x86T\xa5\xc9\xe2\xf4j\x03@\xfa7\xf7\xba\xfd\xeb7\xba\xbdn\xdf\xc3B\xd7\x1b\n\xed\xf5z\xfd\xa079\xba\x11\xdc\xb8\x16\xed\x07\xbd^\xaf\xa7\xfe\xdc\x88\xf6X\xd0\xdb\x7f\xad\x17\xbc\xb6\xbf\x7f\xd5[S\x13s\xba\xa1\x92*\xd4\x97\"i(\x83\x01\xad\xaf\\\xa9\x15]&\x93\xa0NC\x1c\x95\x0b\xbc'>/\n/\x99\x80\x14j\\l$\x86$\xb9\xda\xcc\xfe\x8b,\x8f>\x01=*u>\xae_\xd4e\x08\xdbTny\xc8\x86\xf9\x1d] O\x96*\x86\xaf\xba\xfe\xb8y\x8a\xfdn\xb6\x14\xfa\xb8\xb2eBj`\xdc\xcbn\xeb\xddl\xa9\xec\xba\x16\";M&\xac5]\xa6i+_\xb08\x99&*\xba\x03\xba2\x9c\xe1\x1d\x111i-\"\x11\xcd\x99d\xa2\xab\x8d\xbf\xa6\x8d\xd19uP\xe1\xa9\xba\x91\x94\x7f!\x913\x13\xfdr\x1aN+g\xe6\xaa\x9a \x9d\x85\xb9 \x7f\x8d\x16\x08\x82\xaa\xa8\xc4m\x90\xb9\x96\xa3\xe9\x98\xc0\x1f\x10^&!\xf3g\xca'\xb1\xca\xea\xa3\x19\x99>\x1e\xc6\x0b\x9bVqE\xfc\x19\x19LB\x0dmG\x02\x98\x0f/\xd6Ay46\x1f\x8e\x8chfc\xfdL\xd6\xae\xbeWv5Ni5\x81\xae\xd2fS#\xa3\x04\xb2\xbf\xf0W\xa1ZF\xa4(\xfc\xd5\xc6\xd2\x97\x9a\xb8\x9c\x86Y\xa9f\x1e\xad\xc6\x83\xd3N\xc7?\x0eO-\x1158\xa1\xd7\xf4\xf1\xc7]\xcb\xab\xb5\x16\xea\x8c\x06$[0\x1e-\x92]\xddh\xa9 A\xd4*\x15!F\x17\x9e\x87>\n\x84_\xce3\xbe\xab\x0d\x8d\xdb']\x99\xbd\x91\x9c\xb3\x89\xbfO\xb4\x11\xee\x1e\xbdF\x02\xf4\x94\n\xbb;\x01ram\xb3\x106\n\xf0\xf2\xb65+D#J\x16I\x1fUqR,y\xec\xcb+\xd6\xb2j\xa7Oj\xdb\xa1\x00\xcf\x18\xad}\x97+\x7f\xba\x02\xc8\x16\xb4*\x85-\xf4f\xd7\xa0\x1b\xa3\x99c\xe1\x85\x17\xc3z\x83\xe4\x16\xc7\xb0\xf7\xd9(\x19;BK2.\xf7\xb2\x1b*.7\x14c\xf5`\xbfY\x8fu\xaa\xed\xdd\xd1\x017\x9e\xecK4\xc1\x97~D\x86\x90\x1d2?\xa1\x11 0\x1d)\x17\\\x84V\xd5p\x95\xc0\xf8\x04\xe4\xc7\x8b5\x8c\x12w\x13\x9bJE\xe5\x8b\xc1\x0d|`\xd5\x8d\x18\xbb\xa7W\xda\x7fZ\xd1\xa2\x16 \x9em\x98'\x08m\xbfz7\x9b\xb0;\xd2\xe7d C_\xde\xbau\x8d\xec\xca\x1dAe'\x94e@W\x1f/\xee\xfa2L(\x0f\x13*\xc2\x84faB\x9d\x0d\xc7)\x06,\xf4e\x11\xf6\xc8\xae\xefs\xf8\xbduk\xef\xb5\x82\xdf\xbe}\xfb\x1a)\xac\x0b5\x19\xf2/\xf9\xbeP\xef\xfb\xaf\x15\xe2\xf6\xed\xdb\xfdk\x84\xf2P\xec\xf8\x19d\x17=*\xc2l\x87\x15=\xea\xfbY(!En\xdf\xbe\xdd#W\xae\xee\xdd\xbcz\xf3\xfak{7\xaf\xaf\xada\xf4\xb9\xfe\xb7\x8b\x7f\xae\xc2\x9f\x95y4\xff<\xc7\xef\xe3\xf9j\\wb\xad\x85\xe1\xeb\xafF>\xf9l\xff\xba\xed\xac\xef\x9d{a\xc8\x862\xd8\xef\xc8\xe2\x06)\x8d\x93\xfb\xd7\xcd\x95\xea\xf5\x18\xfe\xd0\xd1\xb51\xf1\xaf5\xdc\x80\xf2e\xc8\xfd\xfd\xfe>\xf1\xdb}B\xd4\xd9\xde\x88u\x13\xea]y\xf5=\xdez\xb5uW\xed\xab\x98h\xa1\xff!\xc8\xbb\xf2\x1e\xef.\xf2\xd6\xc5{\xbc\x85\xae\xcb\xa6iv\x16\xb4f\xc9d\xc2x\xab\x9d\xccA\xf8\x8b\xb8\x1c\xb8\xefw#\x1e\xcf2\x11\xb4x\xc6\x19\xbe\xd9\x9d\xe7\xbb\xf6-\xd6\xed\xbc\x94\xd92\x9e\xedF\xd8\xd5\x00}x\xd9o\x1a_\xad\xdf\xe3\xefq\xdd\xe3'\xb1\xc8\xd2\xf4\x08\x90(JR\xd5\xed\xbc\xec\xf7\xe1!d\xef\x9e\xab\xfe\xeb\xe8\xceN\xd3\xd9\"\x8a\x13\xb9\nZ=\xd5\x13\x11q\x15j*h\x1dE\xf1\xc9\xb1\xc8\x96|\xb2\x1bgi&Z\xdd\xbd\xbc\x95&\x9cE\x82\x9a\xef\x9c<\xd5e\x15\x86d\xf7\x9f[\xcf\x8c%\xc73\x19\xb4\xfa\xd7\x16\xe7\x98q\xe5U\x90\xad\x05\xb3\xd7\x97^9\xca\xa4\xcc\xe6\xaf\xb42\xd1zEf\x8bW\xf0*\x843`\x00@\xab\xa5J\x05\xad^Y\xcf\x02\x03\x0e\xb7&\x19\x7fE\xb6\xe2\x19\xfaM{e\xa1#l\xbd\xa2\xbf3\xcfA+:\xca\xb3t)\x99\x81{ \xd4\xd5\xff\xc7\x80z\x96L\xe4\xecR\x98b\xd0f\x05\xd2\x94Me\x0d\xa6+\x0d\x1b\xa1\xe6\xa6\xf7\xe9\x01t\x171\xfc\x94\xed\x9e\xb7n\xb7\x1c\xac\xa5\xd5\xb7\xab\xca\xdb:\xf8\x8f\xd2,>\xc1>\xd5\x81\x13\xa8)P\x9e4\x9cf\x83\x19,\xc9\xa6&\x1b\xde\xacLg\xa6Y\xbc\xcc\x9b\xfb\xb9\xf9\xca~\x95\xe3:M\xf8\xf1\xb61\x96\x05\x1a\x87Y\xe2T\xf7\xba3\x04\xb7&\xd5iZ\xcf_m\xc9?\x0f\xb0\xbb\x0d\xe5\x9b\xf3\xcf\xb1\x9bq\x9a\xc4' ?\xde\xfc\xac\xf2Zuzs\"\xfe\x1dc\xf55\xd2\xbd\xb9\x95\xa4\xc9\xd9r~\xd4@\xd30\xdf\x10\xb5\x86F\xa2(R\x88\x90\x89 \x13\xbb\"\x9a$\xcb\xe0:QL\xb23\x9ef\xd1\xa4\x98\x88\xe8\xf8\x18{\xc4x\xfct\xb5`\xc54\x13s\xfcsGM\x05$\xef;\xef\x1e29\xcb&\x98|;\xfb|\x94&\xd0!||\x1a\x89c&\x0b\x15\xb7\x1aYC1c\xd1\x84\x89\xbcP\x94\xa6P\x9b\xa7\x02\x96H1\x03\xfc\x83?oE\xfc\xb8\x98\xc9y\xfaF&\x8a\x99\x94\x8b\xfb_Y&\xa7E\x02x\xb7X\xca\x87\xd9\x84\x15h\xf0+\x12\xb9*\x92\x1c\x90\xf7Q$\xa29\xa6\xb0_' \x9f\x14it\xc4\xd2\"\x85\xdaR\x00 \x8c\x0f\xc0\x93f\xd9\xa2\x00t\x9aG\xe28\xe1o\xaa\xae\xa8\x87/\x00\x85)\xe6\xd1yaO\xb7\x0b\\\xf3\xea/\xbae)\xe6j\xc4\xf3\x84\x17\xf6\x9c\xbd0\x97\x03\x8a\xf9R\xb2I\xc1a\xe6y\xc6c\xf8k\xa1\x92-\x18/\xb2\x85Dc/m\xdf^\xe0\x16x\x96\xa5\x00\x1f\x10`\xf3\x07\x1c\xb8X\xb1\xc8r Y\x82\xe1\xcc,D6MRV\x00w\xcdTG\xac\x15\x0d^\xd5\x17L<\xca\xd2$\x86\xc7\xb40fD\x85`x\xd68)D\x06_gg9\xfcAd\xcc#>9\xca\xce\x8b<\xce\x16L\xfd\x9d\x14V\xfc,r\x16\xcdS\x96\xe7\x85r4\x04\xeff\x11\x14L\xdeW\x7f\xf2\"O3Y\xe4X\xd7\x82\xa5)\x12\x88\"\x171\xfc\xbf\x97\xe1\x0fNg.bX)xzX\xe4\x92-\n\xa4\xc6E\xbe\x9c\xcf#\xb1*dt\x84N\xa1\n\xa9p\x06\x9d\xfd\x16x\xa1r\x99\xb3\x87\xd1BQ\x8c\x029@q6\x07\x1c8\x13\xd1\xa2\xc0\xb0\xf7\xb8\x10\xb0p\xc2q\xaa\x17\x82M\x93\xf3\xc2\xd8r\x14\x82\xe5\xd9R\xc4\xaa\xc6lZ\x9cfqt\xa4\xd6\x7f\xb4Hd\x94\xc2\x88\x149@\xab\x05L?\x89Nq\xf1f\xa2H8\x13\xb2H$\x9b?\x12\xd9\x02\x13O\x10f\x90B\x8c\x83\xc4\x83{\xf8\xf3\x98M\x8b\x8cC\x9b\xcbT\x02\xf0\xe2%b\xea\x92+8\xe2\xea\x02\n\xc7\xa5\xc6\xbd(\x8e\x97\xf3e\n\x18\xa2L\x8aNY\x11\xa5\xc91\x07\xca\xf6z\x943\xc4\x07$e\x8f\x99ZHQ\xba\x98EGL&q\x11\xcd\x17i\"\x97\x13VD\":J\xe27`\xc1F9\xd4_D\xc6k0R\"\xfb\x84]\x861>V\xc8QD\xef'\xf3\xa5\x9c\x15GQ\xce\xde\x00\xd4ARy\xa4\x9b~2K\xa6\x12\x9f\x1ei$<\x02\xb49b@\x84\x8e\x92(/\x8e\x80n\xa61\xae\xcd8Z\xe8q\xc5i\xb2\xc0?\x8f\"9{\x87'2\xb7O\x98x\xbcL5\x84\x1fp\xc9\xc4\"K\x91I4d)\x17Q\xb9zc:\x81\x0f\x8f\x19\x9f0\x81\x84Y\x91\xd4'x@\x81#49\x80j*c)\xf2L\x14\xf1y\x11\xaf\x8a PL\x96b\xcc\xd8b\xc2\x14\xc0&\xc9t\xba\xcc\xd9\xdd\x0c\xaf]\xc23\xe0\x03tJo/\x8bIr\x9a@%\x93l\x9e\xf0\xc8\x99\x9f\xc9R\x14\x93\xf3b\xb2*\xd8\xe4\x98!(X\xcaN\xd5\x90\x18\x87i\x7f\xdd\xca6\x05\x83\xff\xe7\xea|\xbd`\xe7@ \xa2\xf4\xb1\xc6\xd3\xdc\xda\xe2M\x934\xc5?\x07j\x9b\x84i\x84\x9b:\xba\xd1?\x8fY\xaeS\n\xcc\xd34\xcb&w\x11w1i\xbf\x06\xde\x8e\x088\xcd\xb8|#\x9a'\xe9\n\x93O`\x05\x98\xc4\x9d\xc9\x97\x97\xb9T\x8fR0\x19\xcftz\xa5?\xfc|$\x12\x80\x0e\xa4\xbf\xa0\xe6Z\x9bVME6/\xa6\xa2\x98\x9e\x17\xd3Uq\xdc/\x8e\xf7\x8a\xe3t\xb5\x98!\x02b\xea@$\x8cK\x04\xcb\x9b\x99H\xde\xcf\xb8\x8c\xd2\x8dW\x9fg\x02\xbd\xd7\xab\x17\xb0\xa6\x8e\x81\xf21.\x91\x9b#W29j\xcc z\x03\x1e\xcc\xa0\xd2;\x93\xd3/\xaa\x94\xe2\x95_,\x92 \xcb\x8eE\xb4\x98%q\x91\xcc\xa3cVbN\xc2\x8b\x84\xef!S\x11(\x8d\x9c\x14'\xfd\xe2d\xaf8\xd9/N\xae\x16'Lp\x96>\x8c\xa4H\xce\xf5\x03\xb4\xa8 ?d@%\xc0\x85\xb2\x84K\xe4BO\x16\x80\x12\x8a!%s\x96\x17J\xd1\xab\x01\x9b2\xa0\xfcF\xa0H\x01~ ?V\xd3\x85Qf\xf0\x89\xb3;\xfc8eE\x9a\x01\x18\xe6\x918a\xe2>\x9f\xe8\xd4\xc3\xc4\xa4\xd0A\x9fN\x97\xcc\xec\xc4\xa0\x82J\x1b\xc6\x96\x9f\xe0\x1f-\xaf\x99\x12\xf9\x89I\xc9\x19\xd3a\x03\n$\xb2|9?\x88et\xca\xf2\"\x9bNA6\xd3\xfbu\xe0exBU(\x82\x94\xe1\xd4\xe9\x1f\x85\xf3\x99\x92R\x8cl\x8b \x00\x8b bo3\x9e\xce\x92\xf8\x84\x03\xa7YD<\xcbY\xbfXD \x97\x07X\xf1\"\x923\x0dj\xcd1+\x9d\xd7y%R\xe8\x0c\xfdV\x1d\xdf\xdd?e\xdc<\x99\x9f;\xf2\x8b6\xf5\xaeM\xfd\x00\xf0\x8e\x9c\x89Sv\x07(l\xf9\x94/X,\x1f\xc3\xc0\x8a\x85\xc09:e\xaa\x0dQ\xa8\x0d/p\xe1/\xc2\x9fw\x0baP\xeb\x81\x92\xf6\xd41\xcd\xddli\xd3\xf7\x96\xc2\xb2\xe8\xfb\xe7\x92\xf1<\xc9xn\xb3\xde`\x11\xc8e\x90\xa1x\xa6\xe2&\x85\xc8$P+q^\x88U\x91\xc7\x11\xb0Pf\x18s\x89\xd0y\x8a\x0c]#\x18t}\x99F\xc2\x125\x93q\xdf\xd0\x9f|\x81\x95\xe0\xf5s-\xcfa\xb3\x07j\xcas9\xb9\xc7N\x135\xab\xb9d\xf3\x19\xfe=-r\x99\xc8x\xf64IA\x14\x90\xd9B\xa10\xa4\x0c\xc1\x81\xbd\xc8 \x93*$\xb7\x9d\xf8Jn9\xfb\xea\xa4\n~\xb2\x13\xa6\x7f\xeeE\xf9\x0c\xadz\x9c\xe7\xcct\x0b2\xdeJ8\x8b\xa3\x85\xf3\xf4\xe5,\xe1\xfa\xf1a\"\x01\xc5\xe6\x89)\xed\xf4+;ajU\xe4K1\x8db\xf6D\x81s\x05C\x03\xa1e\x19\x1d\xb3\x02\xb95n\x82r-\x9b|Q\xff\xbe[\x80\xc0~\x07\xf5\xfb\x98\xbc\xc7\xe2L\xedr\xf0\xb1\x9c\x0dx\xd2\x18,\xb3BZL]\xf6\x8b\xe5^\xb1\x84b\x95easJ\xc8,y\x12\xc3r\xd4\xbf\xaf'\x93\xc4\xa4\xd1G\x1c<\xc8\xfc\x11\x13\xf7\xe7\xc5\xe9\x9dR68}S\x13\xc5\xd3\x07\x0e\xf9;}\xe8\xae\xf3S5\xbaS\xf4%y\x7f:\x05\xf9\x07\xa4\x02\xe8\xca)\x13\xf2\xce\xe4\xf4]L\x18JZ\xa6\xdf-N\x13v\xf6zv\x8e\xbfZ\xde?M\xf2\xe4(I\x01\xca(\xae\xe5\xc5Y&&\x86\xda\x9d $o\xc8\x1e\xcf\x8bsM\xb0\xce\xfb\xc5\xf9^q~w\x16q\xceR\x1b\xce\xfc\x8e\xca\xe3P{\x18j\xddBI\x8c\x05\xee\xc3O\xc8|N\x08\x85\xe4z\xdd\xe4\x1e\xa3%T\xccRF\x8a\xa2\xdf\xef\xdb\x90\xb0\xfa\x90\xb1G:\x9d~\xbfW\xcf\xee\x134\x17(3\xf6\xc8\xad\x9b\xfd5:\xda\x8e\xc2lS\xf7\xa0\xd4\x0d\xdc\xdf'4\x0b\xb9\xffZOy\xe3\xf2\x0e\x0f\xe3L\xb0\xdd/\xe7\x87\xb0\x92\xd9\xe4\xf0\xd0\x1b\x17E\xe67\xbd\xc0K\x0c\xa5\x86#\xd9\xdeJ\xff\x86j\xe6\x06\xb4\xc2\xfd\xd7\xfa\xeewm\xd1\xe9\xb43\xdfu\x04\xabA\xf1Z;l\xb6NH|o\x92\x9cz\x84z\x91G/\x9a\xefL\xbd\xb6^\x93n\xb4&\x0d\x07\x8a\xa6[\xaf\xed\xb9\xfd\x80nh\xb3\x8a|\x16\xcd_l\xee\xb1\xbd\xe2\xebz\xbc{\xaf\xa9\x01_%\xbeg\x0e>\x9fF\xc7h\x82\xe4Y\xef%^\x18f\x0d\xa3\xb7\xc7\xefk\x9fT\xfa9\xcc6\x1d\xdeRN\xc5\xa0\x8ewl\xe8\xbdS\xc6\xaaW\x0eh \xf3\xede\x9azA\xdd\xc1\xb4\xcf\x1b\x1cR\x19\x8b\x82\x91\x1c\x97.n\xd6k\xdf\xdc\xe1\xf7\x19\xa1 !C\x1eD\xc3\xcc\x97$\xf0\x0e\x8c\xe1\x81/B\xc8i\x0e\x8f\xaf<\x0b26t\xc0\x10\x88\xf5K)\xc9\xb8\xdf\xbf~\x95h\xd7Q\x08\xe7\xfd=\x8dX\xd7\x08F\xfa\xca\x99\xa4\xb9\xf2\xa4&\x99x#\x13\xbe\xa7\x80\xdfz`\\\x9b\x92A\xa2\x9dwQ\xcf\xdc\xc5\xab,\xc7\x08\x1d\x9cR\xe5\xd5h\xe3s\xaa\x80\x17\xe8\xc3l\x80\x02\xfaS\xeb\xad\xebN\x8d\xf1X\x9f\xcaP\x05\xc1'\x94\x87R\xfb\\\xa6Y(u\x90\x06c]q\xdb\xc6\x9e\x1aj\x93\x1b}c \xbd\xbd\xb6{\xeb\xc0g\xa1\xf09\xcd\x08\xd5\xdf\xeeX\xcb\x05c\xa5\xc3t\xe9\xbe\x8a\xf9\xb3}U\xf6\x15\x96\xf6\xaf_S\xe0\xdb\xdf\x07\xf0A\x86\x8boU\xa4(\x8d\"`r\xf1\xd2\xd3\x94\xa6a\xd2\x9d\xa2[\xef\xb8tn\x18\x1b;\x89e\xc8G\xf1x |F\x97\xa4(r\xf8\xa5\xa9/\xe9\x92\xa0\xcb\xfa\x17\xf5o\xff\xaa\xea^\xff\xfaub\xbcmc?\xaf\xf6\xb7\xf7\x13\xfb\x08H\xe0cx\x86\x1ez\xc6B\x93\x0e4\xaa\xceI[\xf8\x11\xe5\xa4\xd3\x11~\x8e\xbf\xb1\x89\x97\x89\xa5\x06\xc6\x1d\xc5\xedt@\xb0H(G\xe9\xce\xce\x98t:\xfe\x7fH\xfc\x98rR\x14\xf6\x1bk\xae\x14\xbf\x14\x0e\xd3\x8c&\n\xd4\xbd\x1b\x00D\xee\xef\xedC7\xd5\xa0c$\x19t \xd9{\x84.\xc2\xb8\xf4\x04\xea\x11:\x0d\xdb\xfd\xc1h\x8cV6\x9d\x8e\xefqv.\xbd\x84\xfbI\xa83}B\x86~\x16F~\xe4'\x84\x90\x86P\x80hQ\x98\x91`\x1a\xb6{\x84*\xca 0\xf3bM\xe8\xb2(R_\xd0\x05N\x96\xa0\x0b\xda@\x9d\xd0\x8f\"q5\xdc\x17fq<2\xad\x04\x82\xbe\xfe\xce\xe7>\xf7\xee\xe1\x93;o\xdcy\xfc\xe0\xf0\xc1\xd3\xfb\x8f\xef<=x\xfc$\x98\xbe\xc4\xb4_\xddW\xd3~\xcdb\xe5M\x00U\xe2{\x0f\xee\x1f>z|\xf0\xf4\xc0\x03\x90\xd5\x87\xe6`D4,\xed\"m\xa7\x0e\xa6\x8d\x96x\nQ\x04:>E\x8f\x93A\x03\xd5\xaaX\xe4u:\xa5\xc3\xa7\xfa\xbba\xe5\xa9\xec\\P\xf9D\xf5n\x98\"i\xbe\x04\"{7*\xf4\xdf\xf7L`\x0e\x8f\xda\xa4v\\\xed]\xb6\xdeo\xea\xf5^\xe5\xbf\x1aFy\x05FE\x01,\x1f\xfb}x\xe8%\xfcb=l\xa0i\xed>E?\x8f\xc0)|\xd6l\xc8\xeaX\xa1\xd6\xa7\x8a:M\x10\xe8\x001\xfefGcBe\xc8]`\xa9K\xe7%\x0f\xda\x90\xbbhR\xcaP>'4\xf3\x13B\xe5\x90\x99:\x13\x12\xf0\xaem0L(_\xaf}\xa2 \xec%`\xdb7P\xd3L\xa6\xff\x9aFHX\xb2\xb9Z\xaai\x98W\x96h\x0c\xcfU\x8e\xbf4qgrkX\xb6P\x0ei\xb1\xa5i(F\x8b1\x9d\x84\xd3Ng\xea`s2\xf5'x\xb9d2J\xc7\xed0\\\x12\x00v\xe4OhJ\x97\x8e\x97Hx\x1d.\xd7X0\x1e\x17\x05\x94\x88\xe9\x82\xd0l\xb4\x18[\x87\xc03h1!Xj\x06\xd5%\xa3\xd9\xd8\xd68\xa3\xf8\xe8V:\x1bc\x91\xf5et\xfa\xaa\x02\xd05K\xa6\x01<\xc2\xf7\x96<\x8f\xb3\x05\xec\xc9r\xb4\xb2\xae9\x18\x1d(\xb2\x93\x8f\xa2q\xa7\x93t\xa7~N#zQ\xb7\x14V,-\xf3\xa10\xb0\xd6&zO.\xa0\x92\x11\x1b\x87\xe8Fa\xfbD\xba\xab\xa8\xfbHd\xf3$g\x97,\xbb\xab\xdb\xd8\x0bu\x9c\xe6fxG\x87\x08\xf4\x0e#G\xd9\x98\xf2\xd2A\xe5K1\x03\xb5\xc25+6\x02\xa3\"y74\xc5\xc3KA\x00\xc6\xc6\x0e\x99\xdd\x88\xc0\xa0%a\xd6\x9d\x0e\xa2NGv:m9\xca\xc7\x9d\x0e\xc7\x08X\x1b\xa0\xdd\xee\x0e~\xbd&\x97\xcew\x05\xd71\x9e)\xa0\xd0)\x1av\xf6h\x14^\x00K\xda\xac\xfbB\xc9%\xeddgg\xbd\xa6*\xcf-\x95\xe1\xfc\x0d\xa2\x91\x18\x87[:F\x1d\xe7}Q\x85/\xa9\x9bW{ \xf1\x94Db\x9bt\x80w\xa9a\xdbQ\x8dS\xc7\xabC\xb9X\x0f\x92\xc6\xbe\\:>\x8e\xa3X\xaf)\xf3\x13\xb2I\xb0\xf8e\xacOS\xe8\xab\xd7\xca}\xc3\xe5S_\x8a:\x11N\xbf\xcbv6\xf6\x03\x91\xf1B\xe9\xf3P\xf8\x11\x19%ctn\xec\xf3\xad\xd3m\x05\x15M\xebn()\x0566(\xa5\\WbJ\xbfw\x13\xe4\x14\xdc\xda\xd1)2\xf1\x9b\x84N\xc2\xa8\x9bf\xea&\x1b\x9d\x85\x18\x1a\xf1\xc1\x1c\x0f\xe7$\xa3\xf30RW\xef\xca\xac\xe30\x02\xfa\x10\xb3<\xa7\xab0\xea>dy\x1e\x1d3\xbd\xb3\xa7\xa7a\xd4\xbd\x97\xe4\x0b\x00)=\n{\xf4<\xbcX\xd3\xb3\xba\x17\xb2\xf3\xfa\x8dxF\xcc\n9\x1f\xb1\xf1@;0\x864\x95\x18G\xaa\xd1C\xbf3\xbdg\xea\x82\xf4A\xa5\xd8\x99\xcf\xba\x93HFdM\xefW^D\xddE\x96K\xddw\x9f\xedx\x1e\x9d(\xb2\x17g\xe9\x8ew\xe5\x8a\xb73\xe9\xce\xb2\\\x92\xf5`\xd6\xe9\xcc\x8b\xc2\x9fU*(\x8d\xbbGc\xca\xc3\xfe`\xc3\xad\x01\x1f\x10\xa9D\xcf\xd2H\x9b\x83pj\xe6\xfc|\xb4\xb3sT\xc1\\\xbfI\x9e\x19\xb2\xe0\x8d\xb2aR\xf5!*\xc9\x9a\n\xff\x88\xd0\xa35\x9dW:\xe8@pM==c^\x18\xa6\xfe1\x19V=t\x1c\xa33\xd9\xa7I|\xe2\x9f@\x13\xeb\xe0\xb4\xd39\xed\xf2\xec\xacV\x10\xf3L\x99U\xa7\xd3\x9e\x0e\xfd$\xf4\x95\x91\xfa\x8at\x01\xf3\xf7h\x86\xbf\xfdn\xc6\xe7\n\xbe\xe1\x01\x15a\xec'.\xcciB\xfb\x84\x04\xed\xa8\x1bM&\xa8N~+\xc9%\xe3L\x14E \x05\xeba\xdd\xf9\xb2(\xa2\xae2\xe7P'S9H\xc0\xf7 |\x96\xa4,\xf0\xc20,\xa7r(B/\xe3\x82E\x93U.#\xc9\x94=\x91\x97\xf0\xd6\xc27!QI\xe5N\xc8\xb2\x12 \xcd)E\xba\x9b\x15U.\xa3V\xa2\x88\xa9\x8d\xa4B\xca\x8a0\x9b3\xa9Ck i\x8f\xac\x03_\x84\xf7\xe9&$|O\x03\xd0\xa3\x07\xb4\xdd'UQ>g2\x98Q\\\x9d\xc1\xfc2\x82\xb5\xd7s\xe9\xd2\x15?Y\xcc2\xce\x8ad\x91M\x8ad\x11MH\xf7U\xc0)\xa6L\xc2\xae$J\xb9%.\x11\xb76\x84]\x1e\x9d&\xc7j\xd3\x8d\xf7\xbf\xef\x1c\xa3\x9c[\x14\x9e\xf7bJzS\x11\xd2\x1b[Y9R\x0cd\x9c\xb0\x9f\xc5\x90\x07\x95K7\xac\xbc\x0f\xa08\x04H*\xcc\xf1\x19\xc7\xbb\x82\xe5Yz\x8aW\xde(\x07\xec@\xb1\xa2\xda\xb7\xa68\x1e0c\xa5\x8e\xe5\x82 \x91\x89\xa0\xdd\xd7\"\x0fF\xb8\xab9\x017e\x8cX\xc4.\x97\xcb\xaek\xe5\x9e\xd1Bi\xb9u\xff\xba\xa2\xe5\xfd=\x94\\Gc\xa4$4n\x90(\xfaa\xc8(\x0f\xf7\xe0'\x0e\xf7\xe1g\x19^\x85\x9fEx\x1d~\xa6\xe1\xb50dE\xb1\xd8\xd0\x83\x8289\xa7\xc7%5[\xd1Sz\x14&\xfe\x84\xd0\xf30\x03\xbar\x16\n\x1f\n\xed\x13z\x12F\xfe\xb9\xb9\x81A\x0f\xc2\x1e\xbd\x1f\x1e\x17EN\x0fC9\xbc\xefO\xe8 8&zFd\x1f\x9c\xdc>\x18\x1c\xec\xec\x804\xebO\x8b\xe2\x00\x04\xb1s\xd8\x9e\x9f\x86g\xfe*<\x1f\x1d\x8c\xe9\x01=\"\x94\x11(#\xc9\xe1\xe8`\x1c\x9e\x96\x97\x1fI~\x96h\xf8\xc6Q\xceZ\xfb\x81\x96\x06z\x03|\xbe\xa6\x9f[+\xf5|\xdd<\x1f\xa8\xe7\xbd U\x9b\x8bC\xba\xd2\xce\xf1\x93\xa9\xbf,e\n]|1\xdc\xed\x07qQ,\x87\xcb\xe0p\xbdv0\xf1B\xdf\x90 b\xbfG\xe8\x0f9\x88!\xe8\x10Bo\xc5\x02\x9b\xa2\x9c\x9d\x95\xd1\x15\xf8\x10k\x0c8\xf1m\x18\xd5\xcbF\xdc\xbf\xd9\xdb&/\xeb5\xaf\xaf\xeb;\x8e\x9e\x9f\xceXK\x99\x0c\xb5&\x19\xcb\xf9+\xb2\xa5\xac\xddZ\x82\x1d/S\xd8\xf7\xda\x10u\x00\xb8K\x04}W\\\xc6\xa8\x16/\x90\xde\xaft\xaf\xa0\xec\xe9]\xe9^\xf1Fl\xec\xdb \x00\xbc\xa2\x8b\x95 \x92\xb6\xfbt\xb3\x1c\xaaf\x0d\xf2]\xd6\xa3~\x858\xf6\xfbV\xed\xd7\x9d\"e\xb8\xb6\xa7\x95Q7\xaf\xeb\xbd\xec\x9c\xc9\x087\xb1=\xba0\xfb\xfc$\xd7\x87\xa1G)\xab\xb8\xd06\xabhM\xa7U\xc1\xc8g46Z\xca\x0buC\xed\xc1\xbd\xc0;\xf0vZ;;Kz\xc6\xa2\x93{\x91\x8c\x82\x8b5\xec@\xe8$tV\xca\xe3\xfb\xff\xbfw\x1e<\xbe\x7f\x0f(\xe44\xca\xe5\xf7\xb3U\xb0A\xc8\xdbY\xe9\xe7{C}\x0f\xd2NSXE\xef\x89\x17x\x8f<\xb2\x83\xbb\xedv\x02\xbd$\xaa\xba\x85S\xdd\x1b\x1e\xbe\x96\xe6\xf9\xbe7\x00N`o\xb4\x8f\xe2q\xd7\x8c cm}\xc1\x0cg\xb3\x9b[\xdah\xf7*M\xb4\xfb\x9b-\x18\x18\xadi\xc6\xdf\x10\x8c\xbd\xdf\x18\xb6=\xedt&]\x03\xb1Ng\x81+W\xb7\xda\xe9@\xa5\x94\xad\xd7\x031\x8aq\xcf| \xee\x0edw\x1a6\x1cuT\xb6\xb1\xdfs\xe5\xd5\xefQC\xdfU\xaeU\xbf\xc7\x8fI\xebI\xc2'\x82\xb5\x9edb\xb6\xcc\xbf\xe7\xfb\xd2$f'\xe3\x90c\xa8\x8e\x9e\xf2|\xf3\xda\x8d\x9b^\xfb\xd2V\xa5\x8a\xbb\xd1t\xaa)a\xab@L\x14\x0d\xaf\x16\x1f^\x94\x07\xa90\xdc \x9b\x1e\xcf\x92/\x9f\xa4s\x9e-\xbe\"r\xe9\xe9\xd8\x1e\x9e\xd7t\xa7\x14Z\x191\x8c$Ch\xf3\xf7%\xb4P?^\x81\xbd\x7f\xb1\xa6\xc2\xe9ZC\xe4\x95\xb5O\x86\x95ojK\xda\x1e\x8a\xd0\x9c\xa6! \x19\xd5Q\xb6\xeb\x9eA\xf0P\xc4\x14_\x82\xc4b\xbc\x068;\xb9xLHf\xd4\x96K\xe0\x8d\xe9h9\x0e\xf9h9FD\x10\xe4\x02$c^\x86\xb6Z\x84\xbd\xc1\xe2\x96me\x01R\x91\xa9 \x1f-\xc6\xaa\x0eHA5\xf8K\xac\xab\x95\xba\xeaY\xb3\xfd\xf0b]\x866+Q\xb9r\x0f\xb7\x1a\xb9A\xcf\xe0F@\x1dn\"0\xbc\xb4:l\xdf\x1c\xa0\xeek\x1e\xb5w\xdd(]\xaf_\xd5\x07&\xd7\xafi]\xc4\xf5\xd7\x1c\x0f^1\xee\xb3\xd4\xd9]l\xbch\xe4\x84\xea,\xf7J\xfc\xd2\xd2\xe3\x85/ )O\xb6\\T\xd9\x0c\xda%J\xf7\xe4|$\xc64 \xa5\xba\xcb\xccF\xd9x\xb0\xf0\x132\x84T\xb8\xf4\xa3\xa2\xb8X\xd3\xc4\x08\xacm\x0cS\xe5\xe3\xcb\xa4\xc9A\xfe\xc2\xdfr\x87\xdb\xb0\xaaN\xa7]\x0f\xda\xd1\xe9\xb4\xfd\xca\xa1\x82\n`\xb8\x99\x7f/\x92\x15\x92\x14;\xe0 /0nOp\xf1\xe5<\xe3\x81\xa0\xabh\x9e\x06\x19\x95\xec\\\x06 =Jx$VA\xb4\xa6z\xa7\x13\\\xe0n8\xa7\xe8\xef)\xa5\xc6\"2\xc0\xb8\x94\xcc\xc6\"\x0b.\xe2D\xa0\xf1R\x80*\xb1\x97\x9c\xfc\xab=}\xeeW\x11\xdft\x17\xab\x88\xea\x88E\xa2\x9bGS\xf6V\x16M\x00\xd1\xec\x1aV\x14\xbe\x02 $\xf3C\x16d>\xa3\xac\xab\xb7\xc1\x80\x9bJ4H\xa6\xab\x0dwU\xa5NpS\x80\xe0C\x83\x1a\x01'E\xb17\xa8t\xe8\xder\xbe\xf0\x19\xbdH\xf8\x84q\x19$\xebO\xd6\xb7\x97\x05\xde\xfek.\xcc\x80\x8d\x08\xff\"\xe1:\x90*\xf7\xfb\xfbW\xc9x\xdd\xb0\xfd\xfeD\xb5\xdd\xb8A\xc64\x99/\xd2$N$d\xec]}\x8dP\xf8\xb9\xa1~n\xe2\xcf\xb5^s\x9b\xb5p\xb6S&\xe3Y\x98\xfbL\xa5H\xa7\x03\xe9\xc7,\x9a\x00\x13\x7f\"\x05\x8b\xe6\x84*\xff/e\x0e~\xf0\x85J\x16\xba\x11:\xca\x84\xbc\xab\xeed\xa4L`\xa9;\xd5<(v\x94fGw\x9d\x0d\xbf\xd6\xff\xc2P_O\xb3#\x7fd]$\xbc\xbe\x9cN\x99\xf0\xfbd\xdc\xf8]\xcf\x91\xc1\xd5\xae\xc9.k\xe1W\x83#\x18n\xdfB\xf6\xca\xba_|\xf8\xd6\x9bR.\xf4\xad\x18r\xa1\"\xef\xd4\xf3U\xbf\xba\xd9\x82q\xdf\xfb\xdc\xfd\xa7\x1ee\xdd/\xde\xcb\xe6Q\xc2u\x89\xa1w\xc5\x0b\xd0\x07[^s\xc2\xe6\xe0\x9c\xf2H\xb5V\xbbU\xf5P\xc6\xee\xb1]\xce|\xe7P\x81\xd4\x85Rw3\xd2\x15,_d\xd9(\x06\x9f\x9e\x1e)W\xf2\x00\xa2\xcf\xbf\xae\xbd\xee\xeby\xd5'\xa8*j\xae\x7f\xad\xc9\xfc\xc3uN\x8ba\xbc\xd5d\x00m\xb8\xa6\x15D}\xad \xda\x7f\x0dX\xacr\xc3\xb4z\"#\xc9\xf2\xf0\xe2\x9d\xb7\x9f\xdc\x7f\xfbi\xd0\xa3\x07\x8f\xee\xbf}\xff^\xd0\xa7o\xde\xbfs\xef\xfe\xe3'\x87\x8f\xef\xdf\xbd\xff\xe0\xf3\xf7\xef\x05{\xf4\xad\x83;\xf7\x1e\xbc\xfd\xb9`\x9f\xde;x\xfb~puM\xe3Pv\x1f\xf08\x9b'\xfcXk[K\xb1XRN#\x9a\xaa\xbe\xc4*zw2\xf5s\xbb\xfau\x08YB\xe3\xee\xe1<\x9b\xb00\xa2qW_P\x02\xa16\xee\x8a\xe8\xecM\xfd<\x1a\xd3\xb8+E\x94\xa4\xee\xdb\xa7&\x03_g\xdc\xf7\x18\x9fx\x953$V*\xab\xdd\xec\xb8\xcb\xe6 }\xc6i\x86N\xe3\xd1\x93\x19\xf5p\xbe@\xb4\x8cp}\xc7\xddC\xccy\xac\xf1?\xe44\xee.E\x1ar\xf8K\xe3n.#\xb9\xccA\xb8\x0e\xb9~\xb0\xb9\x06\"\xe6\xc5Sv.)7#l\x12z\x81\xfdY\x10\x8cdWfoegL\xdc\x8dr\xe6\x93q\xc8* Qg\x05\x92b\xbc-\x9a\xd4H\xa8\x02\xfb\x12\xc9N\x95\x92\xfa\x17\xe8l\xabi\x8b \x85\xf5\x11\xaa\xeb\x92\n0,\xee\x1eNX.E\xb6b\x93!\xf7I`\xccd\x90\x810B\x86\x123\x0f\x05\xcb\x97s\xf6\x06\xd2}\x89\xb6J\x08\xe2\xca\x99\xa0:#2j\xed\x141\xc0\xd6^Z\xe0\xe0\xf10E\xaa_\xe9m\xbd\xb4\x9aI\xd4\xa3z\x18\xcf\x96\xb8\xe4\x0c)\x12\xef\x1ee\x93Uw\x91,\xd8\xd3\xcc_\xc2\x92\x92\xf5\x0d\xc7\x8b\xbbUo\xa8r.\xb9VB\xbbn\xe9\x98\xc9\xc78O>\x19\xb4-]c>\xb9X\xe0\xd2\xf3IW\xce\x18\xafz\xfe\x02\x9a\xec\xb6\xa9\x9dQb\xc8>=\x9a\xcdN\xe2\xf8\\\x90\x0d*S#\xb5/dBQ\xfbL>\xbd\xa1\xfbJ?\xaa\xd7\xc9\xf9L\x84\x12>[dy\xd8\xd3\xcb\xa4\xe4\x1c\xef<~\xab\xba\\\xe4\xb6\xe5\"\xdd\xe5\x82\x9b\xd2;ij\x16\xa0\xc6}\xbf\x8c\x0c)\x86\xef\xf1+[\xb6\x90\x8a\xdb\xb12\x00\xed\xe8K\xc1x\x87\x04\xef\xe5\xaf\xfa\xddW\xc9\x15\xe5\xf2\xcf\xec\x8d\xe4\xa8?\xae.\xb9\x81\x973\xb9\x1bg\xd9I\xc2<\xd4V\x96\x9a\xcbr\x9d\xa2!\xb0\xfb\x18\x8e\xc6\x84\xba\x19z\xa9\x8e\xf6\xc6\xc4\xd98\xb8%\x86\xee\xc3N\xe8\xd1\x96\xb7\x03\xe5\x83J\xbd\x90\xd3D\x03F\xfd1\xc5\xdaa~a\x0ebu\x8f7\xf4\xcew\x979\x13\xbbF\xa1A\xdb\xc9&\xfb\xc1\xe1OC\xb7\xde\x917O\xe6l\x17\xf8\xad\x87!=\xa6\xaa\xd4$\x9c\x1a`\x0e\xde\xcb_5\xcd\xf8\xa3/\x0d\xc6\xc4\x1f\x14\x9f\x01\x98N\x10\x1c\xb6\x0f\x93\x0d\xb0\x92u\xf9\xba(\xdc\xb2\xdeRNwox \x1c\x0f\"?\xa6%\xb3\x80a\x95\xf2\xc2!,!W\x03\xa3T,*\xec\xbdC\x81\x06\xac\xd3\xf17r\x95\xbbF\xecH\xb5\xd6\x8c\x7f\xf1\xcd\xc7\x8fDv,X\x9e7WO\x01\x9f\x00\xd95w\x1e\x98\xf3\x06\xc5\xc3\xd4\xa9\x83\x87\xbb\xac\xd3#\x1dx\x01\x17q\xc9o\xdba\x98v\x81\x85\x92#\xc1\xa2\x13%\x04\"\xa1\xce\x0c\xef\xf7\xcb\x85\xf3z6Y\x91\xae\xccT\xbeKp\xb4\xce\x0b\xa5\xcf\x0b\xe6\xaeyN\xc8\x00\xeb^\xdb\xdex\x81j\xc6\x91\xe5\xd8\xb9\xd4\xb5\xe1Q\x96\xe2\xc1\xd5\xae\xebZ\xa0%sL\xcdp\x85[ C;8\xf3u6*\x97jH\x87\x86\xedf\x8aKMI\xa47\x1f\x89=\"R\xd1a\xcc3\x06\x89\x89F\xf98\xdc\xbbv\xad\x93\xb8\x96\xf09la\xd4Q\xb9>\xa3\xd1\x8f uZ\x1a\xa8>Y\xf3\xdb\xb5\x027\x82\xc4\x15\xdd\xb6\xceOQ\xb4Kp\xe9\xc9r!H\xab@gg\xadw\x12.o\x18\xefkf\x12T\x8b\xdb\x04Gh\xbdR\xe9FW\xb4\xdcU\x14m\xae;\xf1\xb1\xda\xb5B\xeeK\xb7\xa4[Qr\x9b\xc2\xcb\x87O\x94\xf0\xa0x\xda\x00d\xadE\xc3:\x89\xbb\xea\x9eT\xf7h%\xd9[.\xc2t:\xfee\xbd\xb6\x1f*\xdf|\x1a\x9b\xd4 6NbC\xcd\xb8z3\xbc6\x1fV\x04>Wz\x88q\x8cwrw\xbf\xc7\xc9Z\xadag\xfc\xa1\x99\xf4N\xc7\x01\x19\xeecpat:\x95zkBy\xff*l\x8a\xfb\xd7HW\xefw\xb6\xc9\xe9\xd29\xfe\x00a\xfc\x06!]\xbd\xe7\x05fg\xa8\x1d>\x18\xb1\x0d\n^\xdd\x83]\xc2\xbd\xe5\"e\xe7 \xcd\xdf\x80G{\xe7\x0eK\\\x85\xacGQ\x9e?U\xd7\xba\xd0\xa4\xa7\xc9\xf7ZE-\xe0\x8ay\xd6Q?\xf7\xafUN\xec\x8fT\x98(u\xa2\xb4\xdf#\x83#g\x0b\x0f\xc0;\x1d\xc0\x8b\x9b\xa4\x8b\xf6\x08\xf7\xe7\x89\x94L\xe8\xe8cU\xf1\xd6\xa8\xc2\xba\xa96Z@\x15\xb3^\xa0\xea\x80\xeajO\x19\"]\xbbi\xc1\xb9\x0ce\xb7\xc4\x96\xca\xc1\x94r\x14k\x0f\xb0b\xc1\"\xc9|\xee_\xbdA\xc8`\xd1M\xf8\x8c\x89\x04\xa1\xbd\xdf7\x1e\xb6\xb9\xbfw\x1dm\x99\xf4\xa9\xb3\xb6\xd0\x9c\xb0\xa3\xe5q\x9a\x1d\x0f\xcb$\xaa\x86p\x87\x18l\xb49\xa3s\x84q\x8f\xd0c\xecw\xdfm\xd0?\xa2\xa9jo\x15\x8e\x8c\xe0\xa4\xb7\x1b\xd4\xd3\xb2\x95G\xbdE\xb4\xc4\x1c\xc5\x9f\xbcq\xb9 >\xd5F\x06!F\xfc\xd5\n\x1c\xe9h\x96\xfc$L\x8a\x02\xb1\x81\x0c\x90\xcb)\xed\xe2C \xe4\xed6s\x1e\xa90\x8c\xd0)R{\x86m*\xc3%\x01\x13{`\xf3\xd5(\xb2\x90ug\xc9\xf1\xec\x0b\x91d\xe2a$Nh\x14\x96\xa5\xdf\xac\xbc\xc9\xebU\x0f\xfb\xd7\x83\xfe\xf5\xfd\x1bWU7+\xf5\x84YQ\x80@\x95\x0d\xb3\x00z\x19\xa9\xc7\x88\x0c\xa3 \xa7\x0d\xe5\x9d\xb87\x9bo\x89\xfaB\xef\xde\x81\xca\xccU\x8eB\xb1\xb0\xa7\x9e`#\x90+9\xa0|\xc6\xfb\xa1\xa6\xc44\xcd\xce\x12~\xec\x94a|\xc2&a\xbbo\x9f\x14\x9e\x97Y\x00\x0c\xf8\xc4<\xe7+\x1e\x87m]\x1fglb\x97\xb7\xadD\xd5\xb0\x91o\xc0\xaa,{\xdc:\x15\x9a<\x89gl\xb2L\x9d\xb6\xad\xb0\xee\xe4\xa0\"\xf8>W^IBV\xcf)\n\x10\xb7nx\xaaxt\x16%\xf2\x9e\x88\x12n \xa0\x87\xf30\x13\xcc\xa94\xce&\x00X\x07*\xba~%T\xd9\xe7N\xc7\x9f\xa1\x15\x1c\xac\x8c}\xa4r ?\xbe\xa7\xbe'\xb5\xda\xd8Y\x0bD(\xf3-\xa9U\xed\xbc)\xf5YG\xfa\xdc\xaf\\\x04\xb4\x8d\x08\xe1\xea^\x8fl\x84hh\xe3\x08]/kq\xd0\xa5_\xf0\x12\x97\x1bZaU\xa6\x00\xa3\xfbTL$\x9c\xab\x03P\xc8\x910\xa3\x89^\x12\x846\x16\xd7\x93d\xbf\xd0\xcf\xa1}C\x08MK\xc6\xe2\x0c\xf6\\\x11oG\xb9\x83\xcb\xaf:\x0cm}\x1d\xca\xa1\x1f\xb9\xc8X\xa5\xc0(\xed .k\xd0(\xbf\xe7z.\xecf\xc8d@Q\x9f\x0cx\x19\xea\x03\xba\xaf\x17\x98\xb9*C\xcd\xcd\x9a\x9dPV\x96}`\xe3g\xac\xa5Y@=z\x80A\xba\x19\x8d\x08 \xfc\xac(\xfc\xa4\xd9F\x057\x94I\xae\xd9\xb6 E!\xdc\xc9]\x16\xc5\x86\xe6^\x16EyG\xb3(X\x85\xbe\xf9J\xccn\x08\x02\xce3\xbe\xab\xaa\xba\xa2F\xd6BY\xcd\xd3\x0e\xcfE\xa9O\xf5#\x0ck\x92\x0cYuO\x9c\x90 \xaa4&;\x1d{\xdf\xa87\xdc\xbb-\xabt\x07\x19pU&n\x80\x0e\xbb\x1d\xde\xd8\xbfq\xe3z\xef\xc6\x90\x99T\xe0\xb3\xdd]\xca\x8a\x90\xdd\xbe}\xbbo\x12{&q\xd5$n\xd82\xd7)\xdb\xd9!\x94\xad\x91V\xb0[%\xf9\xc5P=8\xdc\xb2\xab\xb2&\xe6\xf6h\x8f84\xf1\xc0U\xca\xd6\xd0\xbf\xfei\x9f\xca\xbax\\\x14\xfe\xc4\xf7 \xd3\xe4x\xd4\x02\x95l\x96G\xd9[Q\xd8\xac<\x05\xbaO\x19 \xee\xe3\x9d\x04\xdb1x\xbc\xd0u\xb7L\xbf<4\x9fG\xba\xecd\xdd\xa9\x84`8\xd4\xc4\xc0\x15\x96\x81CW\x85\xe7\x1eu\xda\x7f\x02K\xcem\xfcI\xcd\xe0\xc8\x82x\xd0\xb6\xf5 \xaf\xb0\xe8\xd3\x96\x86W\x99\xa2\xb76Qd\xe2{\xf3hu\xc4\x00\x1a\xd0\x0d\x1cW\xab\xe79\xcc\x85r\x87\x9f\x92\x01q\x9a\xae\x8d\xa0_v\xf7\xa9\x86\x95\x81I\x0bF&\x93\xf8\xa4\xa1\x81\xf2\xab/\xd7\x00\xa5\xe6R\xedf\x1a>$\xea\xd0yc\xabS\xdd\xa6\x94\xd3\x83{g59\xb4\n(\x0b\xc0\x86N\xdd\xb9\x04\x1fa:&\xbe\x07U\xb9X6pj\xd7\xdaW]1\x19\x90AY\xf5\xdd\n\xb1p\xc9\xc4\x10>\x83\xa5R\xa1\xf3\x96\x10h1,h\x83\xe0q\xbb\xfc\xcawd\xf2\x92l\x18\x03\xb7\x00\xe9\xaa\xc9\xddJ\\J\x99\xc0\x84\x0b\xb4\xca\xd7\xf2M\x8a\xa1=HP\xf5\x1daMH\x07\x0c\x90\xadF\xae\x86\xbe\x08\xdd\\\xa5\xc6\xebQ\x9c\x0e\x9b\xddP\x84\x81\x98\x162\xec\xfdF\xa5\xd2B\x83\x0f\x1b\x18\xa9\xfe\x84\x8a\xb0O\xb3\x90\xe3\xa7\x03\xb6\x1b\x9a0\x12\xea\xd2?\x0f9.\xbeA\xa9\xb3\x86\x82\xb0\x7f\xbamt\xcdC\x93\x08\xd0^8\n\xc3\xd0\xbe\xcav\xc2$\x80?\xee\xa0`B}\xb6\x1bF\x84\\TJ\xfb;;\x82\xaa\x06\x87\xaa{\xba\xf9@?\xc9\xae\x8c\x92\x14w\xcb(\xdb\xa9\"Tu\xca6\x12Y\x0d\xfe\xce\x8e\xb0\x11't#\xbb\xa1\xa0\xd9\x1a\x01\xd1\x18!1\xeeFi\x9a\xc5\xef\xf0<\x9a2\xbc\x02o \x95\x85\xfd\x81P \x8e\xb3\x05\x86\x08a\xbb\xa1p\x81\xae\x80&BQ\x05\x9ax!\xd0\x12]%5b\xe9.\xa3=\x1a]\x0e\xab\x8c\x8a\n\xac\xc4\x8ba%\xa8\xd8\x0e\xabl\x13V\x19\xe5\nVV\xc2\xc2G\x8d\xee\xb4\xdc\xf9R\xae6{\x8e\xcd\xcc\x83K\x08\x04\xee\x9aU#\xb7{\x1bA\x02_\xf1\x18\xb7\x8c\xc8'\x9e\xb14\xce8\xee5\xd9|!W-\xb5Sz\x05\x88J\xb9WC\xf6a\xb7\xca\x0e\xe3xD%\xadp\xadG\xbe\xb9\x85\xe4|\xacloT\xbf\x8a\xc2g\x15EUO\xeb\xfc\xab,VYM\xb85?\xae\xb3\xa4\x1e\x15a\x19-\xe5\x96@Cc\xb4_\xe6cX\xbb\xa5\xf9\x93J\xec\xf6\xd7\xae '*\xc7u%\xff\xf0`-\xb1\x10\xcd\x00\x1fp\xe93\xda\xef\xa9I\x90MR\"\xe5!\xc2\x1d\xc7\x88R\xd0\xa6\x02M\xe1\x1b\xec6j\xbb\x9dr\xb6BY\xdf\xc7\x19\x85\x88\x19\x86\xee^\xd0\xaa\x0b\x1b\xaa\x06j\xca\xd3f\xf9\xef\x81R\xdf\x04\x07\xc6?\x8c\x8e\x0b\xa7VB\xa8\x04Ib\xcb\x93\x06.\xd1\xe9U\x17w\xc3\xea\xa0\x06ew!\xbb\x94\\hF\xa8\xefV\x07C4\xab\xb2.+\x90Ng\xe2{\xeam+ey\xde\x92\xb3\x88\xb7\xce\xe0\xfd<\x12'\x1e\xcdp\xc3\xa0{\x0bUi\xa6:\xd4pJ\xf8q+C\x9d\x01\xec\x0d3\x98\x85 S\"\xc8$\xc3^y\x84\xcar#n\xc42\x14\x10+\x83\xde\x94 ])\xbd.\xf6\x12[O\x9f\xba\x92\x05\x80\x18\xa3\x13\x1a?(\x18\x0d\xeevo\xa8\xb82\xfa\xe6 \xc3\x06i\x95\x85=\x12\x94\xa4\x83m\xf6N\x83\xa0\xa9\x9f\xbc\xad\xf1N\xcbfz\x02U\x1f\xda\xe8\x8cE\x1a\xa5\xaf\xd9\xea\x0b\x8c\xf1\xe8r\xeb\x9b\xa3\xa67\nQ\xe7\xe8\xa3\xa8G\xdb\x89#\x82\x17\x05\xeb\x1e\x96vg\xa8\xa0i\xd7\xb3p\xa1\xe8\xe2\x0b\x9fT\x8c\xf55\xe8\x91\xfd\xe0\xd9\xc1\xc4\x07tp\x14\x97\x0e\xffKI\xc0\xbb\x19\x8f\x99\xeem\n\x9fd\xdc\x1d\xb2>\x0bl\xd8\x0d;\x9a\x88-\xfc\\c\xdd\x01\xbf\xa7 \xef\xee5H\xe5 \xa3\x83\xda\xa7\xdd]M%\xdc\x02\xb9\xcf\xa8\x82\x1cA\xb2aN\x93\xda=\xdc\xa3\x90\xf5\xda\xe7d\xa0\xbaogZ\x9fN\xea\x0b43HXX\xcd}\xa9\x81\xa5j\xa5\xf0\x9a\"\xd23\xab--\n`\xf9~\x1f\x85\xacr\xa5t:fM\xe2\xbd^\xf7\xd5\xed~\xa7\xb3\x0b\x95<\xf6\xedr\x05\xce\xd4\x9e*\xf2=\x8d\xd2\x9c\xb5\xb0\xfe\x96\xb5\x1bh\xe93K^\xd7\x9d\xb8\x00\xbb\xe4\xe5\xce\x0e\xf4\xbe\x877\xab\xa1\xa6\nR\x1c\xdb\x81j,\x97\x84\x1e\xf9\x97\xaf\x02\x80?B\\e\xa1\xe3\xc4\n\xc1\x94N\x03+\xb4\x11\xb8d-\x1e\xf9N\xe9S\x83\xa3\xba\xc0\xe5k\xbc\xf2\xe9\x91\xfa\xd4\xd2\x15\xdeUI\xe7\xfa\x1fW\x08`WXm\xbf\x95L\x9b\x8f\x9d\x16\x82-\x18\x9f\x98\x1e\xd8\xe8\xb4\xf5\x17h\xba9`\xddC\xd4\xe4\xe7\x00\x16\x9d\xc4\x98\xc5\xbe\xfbH\x86\xee\x93\xabGv\xf3\xc3\x11\xa7\xee\xf38@\x1c\x86v\xd6\xe5\x04(\xca\xa4\x96\xaaK\x00UN\x85\xec\xa9iR\xeb\x97\x13\x9a\x98\x95\xa2\xf4\x03\xc8\x06\xec\xee\x9ek\x95\x80O\x08euue\x8d\xbb\x99e\xde,E^\x944/A\x0cB_\x8c:H\xd0\x90s6\x9f<8\xb4\xc0\x11\xf9\xf5\x17M#8\x13\xd1b\x0b\xc9\xa3\xbc\x91\xf2 w\xe9\xa3\x973\xd6|k\"\x99Bo\xa1\x81\x05\x9b\xb4\x94|\xc6\xdd\xe3Z\xbds\xd53\xcek\xd6\x02H\xcb\xca]\xb1\x11\xf4\xa5kBG\x8c\xf8\xa6\xd8_%\x9e\xac\xdb\xb8\x96w\x9c\xd6\xfd\xcciP\xc9>\x19\x06\xbf.5\xaa\xc6\x19EF\x8a\xc2\xe7\x953\xe4\xac\xd31\nB%\x9ba\x9f\xb0\xa0\xc0=\xa0\x15JT\x1fIiO0K\xf2Q6nt~\xcb\xf0\x85\xaf\x8b8\xb7`\x9a$P\xb3\x18\x80\xd1*\xf7L\x8c\xda\xab\xc2 \x1bf\x84\xd4(\xf4\xca(_\x80P#\xdcV\xa3d\\\"J\xf7(\xe1\xca\x8b\x10\x85\x17\xa4B\xb2\xeb\x9bJ%a\x19\x00\x1f*M\x8c$T\xb9\x0b\x05^Tr\xda\xb5F\xbc\x978\x1f6\xb8V1\x06\xf3\xe8\x85\x1b7\xbc\x7f\x89\x8b\xba\xfa\x82\xa8\xec\xf5\xd5\xb9\xee\xe1Tds\xa0M\xe1\xdd\x8d{Q\xca\x0e\xf3E\x06\x8fF\x93\xb2q\x13\xf71\x9b\xa6,\x96C\xfd\x8bJ\x02\x9a\x84Y\xe3tgj\xde\x86\xfaw\xe3r\xa9\x1e\x95q\xc4\xe5\xd2V(\xaf/Oc\xd9\xf5@lm$;\xe3\xdf\xcfV\xf9\xd0\xa6\x82\xcb\xbc+4\xc5*\xbf\xd4\xa1\x809\x05\xb8\xacR\xe5\xbc\xeb\xe3\xd6\xac\xcc\x15\xa3\xf0\xed\xe5\xfc\x88\x89n\x92\xbf\x1d\xbd\xddt\xb1\xbc\xc5\xda![\xbb\x17\xff\xc8E\xdeMx\"]3\xa8\xd2\x125/=Z\xa14\xd9l]\xda|\x8f m1lK\x19\xb0+\xe7\x0e\xf7\xd6\xfdE\x02\x885\x1a+e\xb3\xeaU\xb9V\x89\xba\xf68\xd0\x85\x81\x05t:\xae9\x13o\xd8lH\x9a\x11\x8af\xc8V&\xb6mY1\x19\n\xe1\xf5\xa9\xbcbT\x1b\xe64w\xb5EJ\x12\xd7\x86\xacM\xaf\x8c\xf4Wy5\x8f\xceMo\xcc\xb7Z\x97\xd2\xef\xd5\xee\xddW\xf6 \xd6\xbfZ\xb3\x9b\x8dW\x9e\xceX\xcb3\x96\xbd\x9euwnc;fS\x0c\x9e_\xae\x8b\xd6c\x16\xb3\xe4\x94MT\xfe+;\xb6\xfe\xca\x9d\xfe\x9a\x81\x89\xbaQ\xe0\x0ebh\xed\x1d\x1f:\xb9A\xadT\xe5Z\xbe\xb1\xceAVH\x13\x1aQ\x14\xb1c\x9f\xeb;U\xa8\xadMB\x0bI2t\x9f\xea\x06\xc7h\x04R\x87: \xca+\xc2I\x97\xb33\xd3\x15\xb42R\x0c\xde\xc9\xf5\xa0O\xd62zX&\x03\x8c\xe5^\xf6\x84Fa\x02{\xb6\xb2\xa3\x11QY!\xa7;;\xd5n\x94R\xea&\x89\x89\x86\xfa31\x1cq\x1a\x8d\x83QD\xf98\x10\xc3\xc8\xdd\x01F\xd6\x84\xc8\xcfB\x98\x0er\xbb\xd7\xe9\x98\x13\xa3\xdbY\xa7\xd3\x8e\xbag\x91\xe0 \x11\x98T\xd868\xe5\xa8+\x1fe9\xfa\x16j\xb98\xdd\x9a\xb3y&V\xad\x94E'\xad \x93\x18\xeb\xac\xdb\xf2vL\x0b;^\xcb84\xf1%\xd9\xf1Z\xd6x\xbc\x15M&P\xf6\x9d\x9c\xb5\x948,\xba9\xab \x81OZ\x12D\x1d\x98\xa8\x9c\xb50\x18\x89G\x06i\x97Gs\x16zn\xd1\xfb\xe71c\x136\xd1Q\x12=\x9aj\x19[\x84\x8c\xa6]\x89wzi\xdaU\x8aI\xd3;\x9a\x87)\x8d3\x9eg)\xebtt\x02\x81P}\xf2\xf3&\x07\x11S_\xbb.\x05\x068MDy\x1c\x809*\xd6\xc9\x06\x05\xc1W\xc0t1\x05\x9c\xfc\x0d\xae\xa5J\xac\xc3h\xd6\xeb\xceJ\x86X\xc4\x80\xaf\xa4\xb1\xba\x1d\x12T\xdf+\xe1\xc4)\xe0\x8a)v\x08\x93\xca\xf9px\x81=\x00V\xaf\xfae\xfc\xdd\xab\x1a\x02F\xa1\xe3\x81\xa4%r\xafi\x16N\x95\x04#\xac\xe0\x92\xd9n\x84\x9c\n=\xc60\xa3Y\xd9\xf0\xac\xda\xb0E\xfb\x81\xbd\x9a\x1f\x86\xa1Q\x8f\x8c\xc6\xda\x8e]\x8c\xe4x\xc3\x8fj6\x1c5\xba\x07\xcf\x86|8*\xbbR\x14\xd98\x18e\xe3\xca\x81\xb4\xeb\xdd\xd3\xfa\x16\xf0\xad]\xa0\xf6\xcecM+vv8QqCF|\xec\xd4\x0c\x8fVj\x03\x1908\xf63je\xd5r\xd8\xf3\xbaz\xa3>j`C\xe5\xadF\x867\xf8\x1a\xc6f\x9d\x16\xf4\x07\xcd\xbe\x0ct\xd3\x06k{\xae\x96\xaev@X\x8e\xdbzW\x91\x83\x9d\x1dA\xf8H\xc0H\xc5\xb84\xa1m\x16%s\xea5\x90\xf0\x9a\xf8\xb8\xcd\xc3q\xbai>\x08c\xe6(~8l\xab(\xd8\xad^QD\xa5\xa38\xe88\x86\xf0qX\x18\xde\x98\x05f\xd5\xd8\xa3V\x92\xb7\xb2\xa5\x84\xf7\x02>\xec\xb6\x1e\x94\x1c.\xc2\xe3]\xce\x8e#\x99\x9c\xb2\x96\xea\x80\xc3\xe6^\xd9a;^\x17\xe8O\xc8@\xa4U\xc2Ne\x0f]\xb5\xa14\xaa;\xf7\xa9\xe2\xb2\xa9b,\x0c\xe2\x92)\x05\xfbd\xe7\xa3F\x86\xe5\x1600t\xed\xfef\xc7#^\xe0yxo j\xc9\xbb:\x00o\x18Q\xa5aL\xc3LS.;\x86\xb4\xd2\xe5\x06\x82\x96\x92\xc4W\xd7R\xa8T\xca9\x1cU\x1c\xa6\x86U/\xc3c?\xa5\xb1\xda]+\xba\x1c#AN\xfc\xe5\x88\x8f\xcd\xb7\xc6\xabI\x0d\xbb]\xbdX\xe3\xc6c\xe1\xda\xd4\xd6\x90!\xe3\xe1\x96\xba*\xc5j*\xfc\x17\xb7\xd3\xdbhg\xdb\xb6(\x06\xda\x8c\x18\x83/&\xa5\x1a\x944\xe0\xbc\xee\xc8\x01\x8f\xd9\xe5\x9d)\xab\xad\x1f?\xbc\xb0\x8d\xaaX\xd3l,\xad\xdc\x95+\xd1\\\xba\xa2\xb9\xa8`?\xa9+\xec\xcb\x82<\x14#6\xde(\xc0\xd5\x15\x91R\xcaFC\x96^\x18\xee\xeen\x90\xc5\xe1\x8b(i\xe0k\x07\xda\xd0\x14\xaaa\xdd\x91UN\xfe\xab\xaf<\xca\x1c\x99\xbf($!\x0d\x02{\xbb\xe4\xd9HD\xb2p\xb7O\x13{\xb5y\xb7?Hn\x87\xbdA\xb2\xbbK`d\xa3d\xac\x077J\xc6\xd5\xf1]Da%\x93faR^\xf3\xcen\xf5*`R\xa2\x11\xb7vx\xd5\x19RAuv\xfa\xb7\xaci\x90\xdc\xd9!\x0c\xf6\x13l$w\xfa\xe3\x01\xeb.\xb2\x85O\xd6*\xbcQ?\x0cC\xe7\x16\x11z\xf8\xe3H^,\xdd\xfa\x98\x90\x8b\x00`k\xa7\xc7\xb5\xb50\x9d\x86\xdb\xf1\xad\x01\x15\xef\xa4i3\xf3:\xb5\x11\xb9j\xa8\xf5r8X?VwM~6d\xf4O\xc6\xb6K\xc7\x12|\xc4\xc6\x9d\x8e\xffI1Y#2\xd4R\x9e<5u\xd4\xee\x9d+\xde\xf5\xb4\x0bC%\x03&\xa5\xd0+H}\xfe\xdaa\xe8ga2\x12cb\x0fV\xea\x93\xe0gU^\xddP\xa2^m\x15\xc1\xfc\xa0F\xb1A\xe0\xda\x98\xc2\xdb\xbd\xa1\xa8\xac\x1c\x12\x8c\xc6\x0d>\xf6\xaa\x17\xf0kw\xd6_Fy\xac\xaf\xc7\xdb\xbdPf\xcd0k&\x07\x8e\xa3C}\x87\xa8\xd1\\Wn5\xbfz\xc1\x95)\x1a\xe9\x8fj&8\x0d\x99\xe5G\x06\xc5\x92\xa2\x88\x86\xbe\x1cJ\x9f)c\xf3\x97\xae\n\x07\xe8\x1ca\xdaS\xb7L\x89O\xfab\x0d \x9a\xeej\xbd\xf0\x06Wi\xf1W\xeb\x8a\x7f\xe9\xb0\x9c\xeft\x9e\xcfTh\x94j\x08\xc0\xb6\xect\xd8\xd0\xaf\xf4\x9aC\x97\xf9f\x83\xf5\xac\xca\xc8\xa1A\x12\xc8N\x07/~i\xe9\x86\xac\xa9\xbdD\xe6\xeeR?\x11 \xfa\x8d\xa7\x84\xa2v\xc9|\xe3\xfa\xd2d\xfb\xb7\x95;\xeb\x9f\x10\xcc\xfd\xa6\xcf\xea\xcdn\xbc\xac\xf4\xb8\xfaV\x99\x83\\\xf2u\x05\xe8\xfd\xc6\xf0\x82\xdb]Z\xb8\xce\xf0*\xab6\xaa*Q\xd4\xb5p@\x8a\xca\xddv)V\xce\xb3\xea\xaaK\x8c\xda\xf5\x9e\x18M\x14~:`N\x15\xda\xb0^[\xd4g\xa1\xd2\xbe\x1dE\xf1\xc9@v\x17\nF\xf1\xd1\xee.\xcd|N\xa81\xc0_\xcbn\x9c\x89\x136\xd1\x0e!\xf37\x04c\xc3\xa6L\xd5y\x164\xbd\x0b\xd9Zy\x8ash\xd2\xa9\xda\xb8\xd14l\xcb\xee\x91\xc8\xcer\x90\xb6F\xdei\xaf\xdb\xefy\x14~ov\xbd\xb1\x89\xce\xe8\xcb\xae\x0eJl\xefA\\#\xe4\xf6n\x7f(\x82\xc4\xae\xa6\xc1\xa9\xe3\xb73\x92,\\i72\x8d\xee9\xe2&\xf7\x1cK\xa0\x96\x0b\xc1\xe2H\xb2\x80\xfb{\xaf]%k\x8cC\x84\x8eA\xa6U\xc7 \x930\xbb\xdc1\x88r\xd2\x81\xbe9\xec\xd4\x1f\xc3[\xfb\xb4R\xb48\x0fs\xe3F`\xbb\xc7\x8dV\xfe\xa9\xf9\xd90H\xfeb?\x1bqX\x96\xae\xfa\xd9X\xfes\xfcl\xc4\xea1&\xc38X\xd2\x86\xf2/\xe3gc\x9a\xf0(\xbd\x8bW\x1b\xec\xfa\xb5\xf6\x9e\xae\xaf\x8c\x8aaC\x85Xl\xac\x7f\x97\xd8h\x83\xce\xb6\n\x9a\xac\xce\xfc\xd5A\x80\x9e\x89JV\xd8^\x98*>\x96\xef\x0b%\xa3\x19\xbf\x17:B\xb6\xed\x8fZN\xe6m\xc5\xa9\x87\xbaC\xf2H\x05Kr\xbf\xc98\xda%TD\xaev\x13\xf3\xaf[\xcbR\x11rl\x03o4a%\xf1\x11z`sjbn\x1f\x99)e\xe8^W\x9c\x1d(\xb5\x80\xa2\n\xae!\x12\xa0\xbd\xbb>\xf8\xc6\x85\x05\xbcqR\xa1\xfd%;\xb4\xd9\x9e]U5_\x06\xa5xq\xe2\x97\xf7^\x01\x845\x19\xa4\xd2FQHW\x9e+\x8af\x82\xac\x86\x03\xb8XE\xde\x8a(\xd8s%\x85\x03\xa5\xff\x0f\xfc\x97\x19\x92%!\xda \xdf\xb4\xa1\xae\xd14|[~H\xf9\xba\xdcQ\xf8\xa7\x80o\xab\xea!\x9e\xc2\x1dw\x03g\xd6\xba\x96\xd2k\xd3Le8\x1a\x0f\x98\x8d\xcc\x89\xb7U\xd5N\xab<\xa9\xa7\xeeF_\xac.\x9a\x8f\xb7W\xae\xa5\xa4\xf6\xfd\xa9\xdc\xe8,\xbbv\xbf\xe3o\x89\xca^\xf6\xdd'kB\xbd\x9a\xe0\xa4]V%y\xcb\xd6\xa4mbj\x05m5\xc8\xc0Y4\xe9z\xd4\xbbw\xffQ\xaf\xd7\xdb\xf7\xc8\xba\xe2\xce\xdao\xe4x\xca*\xb0\xd3Q\xbf\xddY\x94?\xd0\xa2@\xa3 \xe3\xa6\x01\xe4h\xf3\xcb\xf1\xd0\x9f\x85/Wr\x8b\x19\xea)\xdd,k\x82\x92\xb9\x82\xb3>\xd6k\xcf\xdck\x00Z\xa6 \xc3\x10\x84\x064]\xae\x82\xcd\x95vV\xe8c9\x985z\\q\x0bJT\xe1\x9e\xba\x07j\x95\x1b*/\xb8\xd7yW\x85\xa8\x82o(\xde\xec\xb47\x0c\x08\xa9V[\xdfh8z\x08{@\\\xddbD\xc0\xb8\xf3\xb0\x9dU\x0c\xa6}\x112:\xbd\xc4\xdd\xda\xc4R\x92\xbc\xd3i;%1\x84 k\xbcuW:%c\xa4\x11\x9f$F \x84\x85\xa64\xf3\xf9P\x86fy\x04\x12\x9d\x9de\x1bN\x8eh\xd3\xc1\x18VtLh\xa6/a7\xed\xb6\x1c\x00#\xd8Jgg*\x90_\x8d\x04;4L\xddp\x92\xea\xf6I\xe0\xe7U\x91\xc9\xb1$\x04\xd2\x04\x00\xb6TW\xf3\xafaT\xf7=\xf70Z\xe1\xcc\xaa\x9e@9e\xe7\x90\xb7d\xd6\xb2nG7c\xd38\x1e\xee8\xd0\xec\x8a\x87\xbb\x8dV^\xec\xe1\x8eF\x8e5\xa2\x1e|T\x19\xbc\x80g\xbc\xd6M3\x0d\x84\x0cvI\x04&>\xab\xf0\x81(\xdc\xdcW\xd2D\x99\xb8i\xb4\xac\x17\x01\x1eY\xd1\x8e4l\xf6KO\x7fm\xc7\x7f\x9e/C\x8daP\x0dq\x8c\xa7\x94\xe6o \xdaa\x18!b\xb4{4\xb3\x88EE\x18)\xcb\xdd\xbc\xeeSM\xd8\x93Lc{\x18\xe6\xda\x8cq\x9b\xaf\x9dAj\xef\x83k\xb1\xb8\xa7\x1c\xcb\x1b\x99\x00&I\x89cF\xa6j\x94d\x06\xcd\xf2\xcd\x05\xceS \xa8\x11\xbe\x82\x8c\xe2\xd2\x0b85\"X\x90P\xf4\x9b\x01H\xb4\xa6\xf10V\xb2`c\x85\xc1\xa6\xa8\xd4Xn\x8b\x88\xb6\x13\xf6\x95\xcbm+\xf2\xe5z\x8e\x0d\xf8S\x8b\"\xcaB\x81\x03\x8aUi\x16@c\x83\x14\xd6x\x95\x82\xd8\xceN\xf5\xcb%\xaf\x7f\xebp\xefj\x0d\x03S\x07\xa2\xb7J\xee\xeeRVN\x0b\xb3z\x82R\x98\x83t\x83\xce`C\x02,\x8a3\xc3?j\x049g\xf2^M\xff\xe4\x92\xc6d\xda\x10\xb0\x12 (\xab\xb9\xc9\xa7m\x7f\xe4\xcd\xd8\xb9G\xb5\xb2J\xbb\xc7\xa7^\x94\xc7I\xe2QO\x85\xf1\x82D\x94\xb3\xebW\xa1D\x9c\xef\xa9\x9f\xdd=\xf5A\xffz\xca\xf4\xa7:)\xa23G\xaf\x8b\xd1\xccI\xad\xe9\xdb\xbb}\xd2\x1cI\xf1\x1d~\xc2\xb33\xde\xb2\xd8\xd8\xf2vX\xcd\x9e\xea\xacvxPS\xc6Qy\xc9\x8d\x92SWN:kR{~\xac\x1b%\xd5\xael\xdc(q\xe7\xed\xb0\x99\x93r\xdfu\xb7\xa0\xb6\xd7[\xfd-l\xd6w\xaavp\xee\x0b\xc6'\xcd\xfc\xba\x11\x8b\x1bc\xbc\xfb\xfe|\xa1\xc7\xca\xb3\x8fu\xa0\xa6g\x93\x04oK7\xbb\xb2o>\x17/Of\xb2Pt\x93\xbc\xd4\xb7\xbbp\xd2^E|\x16z@<@\xe2\xae\x92\x1f\x15E\x03H_\x80)$\x7f6\xb9k\xd2\x8a\x0c\xaa\xb4&\x85\xfaA\x91C\xfd\x05\x90D\x9b\xdc\xdd++BzXV\xeb<\x02\x89,#\x87\x1b\xc7%:\xa3\xbfvn,%\xf6\x1c\xd18K\xd1pn \xfd\xea\xb8\xb1\xc6\x0c\xda&\xb6\x8f\x1ae\x19\xd8u0\xa8\x053o\x00C\xe5\xcbO2\xda\xb2\x02|Vu\xa4\x91Lx\xbf\x06X]R\xbf\x1bl\xc2\xd9\x9d\x0d\x9c:\xb3-*\x1d\xbfL}so~\xc0B\x1f'\xbf:\xf3T\x86\xed\xde\x1av\x0b\x03\x87O\xb6]z\xe6\xa2U\x18\x86YQ\xa8\x08\xd1\x1b.\xb8^\xc4\xaa\x8a\x02\xbdZ\xd2\xca|\x95\x90V\xf0\xc1\x97h\x98Zz\x81\x0fc*\xc3\xabn\x90\x0d51\xf8~\x9a\xa4\xe9[Q.\xc3\xbc^\xc8\x00\xab\xacrYV\xb9\xa02\xdc\xaf\xf9\xc9q\x19\x99\xe6Mh(\xe7\xdb\xaf&d\x8di\x10\xdf\xdef\xe5!\x15\xeb\xeaW\x15\x066\x96(/\x03\x1d6X\xe8i\x9a\xb0\xb1\xd3\xbe\x1b\xa5i\xc2\x8f[\x16v\xadI\xc6Y\xebl\xc6x\xeb\xcc\xd8W\xb6\xdaa\xab\xe7\x11m\xc4S\xc5\xad\xca\x92\xfex\xf5\xe72I\xd3\x96\xfb\xbd\xe7\x10z\xc7\xe1TV\xb36\xa6e\x86\x1f\x01\xf1\x8f\xdc\xc3\xda\xcd\xe0-.=\xa9w\xbf\x82\xfd\xca\x11[\xb5\xae\x9a\xdf\xb9u\xa51\x07\xff\xea4u\x03\x14e\xd9-Z\xe8Z\xd5\xcdJmW\xdd\\#\xaf |\x94\xb4\x8d\n\x97\xf21\xf3h\xd5[\x92\xb6Eu\xf2.\xb6\xd3;_T\x01\x054\xeeS\xa1y\xb51\x8b\xba\x0beG\x15\xb1\xc1M\x94sf\xe9\x0c\x13v\xff\x1a\x00\x18B\xc2\x1d\xde\xd0\x975\xf6\xd3\xab\x13K\xdf\xad\xcb\x98\xf3Y\xf6,\xbbU*JH \xeb\xe8\xd3\xab\x8d\xa7Y\x9f[\xb2\xc8\x81h(]\xc1\xb8\x8a\xf90\x88\xdd\x94k\x1a\xe0\x04\xc0\x7f\xf9{\x15v\x17\xef\xef\xf7\x80\xa5s\x7f\xef\x1a\xa1 \xfc\xde\xe8\xbb\x91C\x9d\n9Z:\x8a\xd5\x05\x0b\xb3.\xd4\xb9x3B\x93\x1as\x81\xbc{\x18M`\xe3B\xd3\xf0b)\xd2\x80Qv.\x19\xcf\x93\x8c\x07Y\xf7\x98\xc9\xfb\xe6\x11\x1dL\xe9\xe5\xd8\xb8F\xb79\x80\xca\xcc t\xd2E\xe0t\x05\xcb\xb3\xf4\x94\x91\x01dM\x93T2\xe1G\xd4\x8b#\xfe\xd8\xb8\xa7O\xbay&\xa4\x8f'\xe2b\xc9\xe1\xb5\xd0\xefT\x08wN+\x90i\xcb\xa2\xa8\xdc\x19x\xb2\xe22:\xc7\xe5;\xcc|\x01\xfcIF\xe7\xfe+\xefp\xc0\xf9\x96\xccZ\xba\x17\xad\xcf\x086m-\xb2\x84K&Z\xdegs\xef\x15\xca\xbaK\x91\x12\x12d\xbe2\xf3\"d\xed\xa74\xda\x88\x1e_\xee\xf7\xf2\xee\"\x92\xb3\xa7\xab\x05\x0bYw\x91.\x8f\x13\x8e\xaenh\xaa\xc2&0\x1dI\xd7\x9dl\xfe\x02\xc8e0wj\x9a\x14\xe4x\x17}\xf6\xc3\\Y\xb8\xe5\x08\xb7G\x90\x8f\x80+\xaf\xdd\xdf\xee\x0d\xd3 \x1fhH\xc6\x06\x921\xf5\x16\xa6t}<\x9c\\\xb4\xb9\xe9~\x94\xa6\xd9\xd9\xfd\xf9B\xae\xd0\xb9\x167#\xb0\xfb\xca\xa4(6\xfc\xb9%\xca\x96\xcf\xbd\x9a\x9a\x98H\xb3\x0d\x81\x03u\xf1\xa4+E2\xf7\xcb\x82\xb2\xb4sI\x88)\xa3\xf9\xe00r\xa6\x13'\xb8\x05\x03\x02N\x05\xb3\xd7\x8a\xf2\xd6g\xf3n\xeb=\x05\x94\x89vc\x91\xe4-\x0c\xff\xa0'\x97rw\x96p\xaau \x8adM\xaa\xa8%\x87\xb0\x81\xde\xf0\xc40\x94A\xc9 $\xa1N\xaf$\xf5\xaa\xfd\xfal\xee\x19\x9c\"\x81S\xd0+\xb1\x11\xe7\xc4-\xe8\xe2\xdd\x9a\\\x8az8\xc2\x12\xc5L\x02>\xb7\xa6e\xba\xb0\xc6\xb2\xae`0Ax U?\x91\xb2\xf1\x94_t\xfeT\x93\x8d\xcc\x86z\xa1N\xf0\x8d\x99\xf0\xd3$\xc6X\x0f\xee\xf1V\xed`\x8a\xc9\xa7\xc9\x9ceK\xe93\xda#\xebfJ\xe6\x04\x01\x1b\"\n\xca:H\xa0D\xc5\x96O]<\xd6\xa6\x9a\xb5Y\xad\x974\x0b=\x90u\x80l\xf1qH.^\x1e<%\xe5\xde\xbb\x81\xbb1\xd9e\xfc\xb4\xfb\xf6\xc1\xbd\xfb\x87\xf7\x1e<\xb9\xf3\xfa[\xf7\x0f\xef\x1e\xbcu\xf0\xf8\xc9\xf0B\xb0I\xe0yt\xc5`\xf9A\xeaX0\xc6!\xc131\x8f\xd2\xc0\xf3\xd6\x81*\xf5\xbd\xa3\xfd\xfe\xbc,\xfa\xbd\xa3\xfd\xfd\x01d\xe8/\xbew\xb4\xbf7/?\xfb\xdeQo\xee\xd5\xcf\xd0j\xbeQ*\x0c\xab;\x85\x8dFe\x96\x81\x967\xb2\x00[ku\xaaDW\xad\xf8d\xba\xf2\x19 UD\x00\x93\xa1\x89D\x94\xe7\xc91\xf7/\xd6\xda}\xac\xa1\x89XQ\xa7\xc3\xd5\x1d\x10\xf5\x97\x10@%\xe3\xd9\x94fa\x8f&!\x1bd\xe5\x95\xf7lg\x87\\p?\x19ecG\x89\xaa\xf6\xec\xae\x9a(\xbb\x1b\xcdYz7j\xf4F\x8b\xb2E\xe5\x88\xac+\xd8\"\x8db\xe6_\x19\xed\x1e\xb6\xde\xbb\xf2^w\xecw\xc9\x95c\x97\xc7\xbb\xe2jWf\xef,\x16\xe6k@\xad\xc6K\x90\xbeZ\xb6\xaajo4\xf6\xa8\x87\x16\xf3\x1e!\xe8\xc7Y\xfa\xde\x15\xc7o\xce\xa87F\xcf0No\xbetg\xf7\x07\xa2\xdd\xf7{\xbb7\x0f\xdf\xdb}\xaf;\xde)\xde\xcbw\xae\x1c\xcf\xa9w\x88\xe1?T\xac\xaa+^\xe5bt\x9c\xa5\xd9R\x04\x19]\xf2\xe4+Kv\xc0\xb7;\xd3\xe4\xd6d\x05\xe7O\xae\xe9,\xca\xef-\x17i\x12G\x92\xe5M>*\x81,>a@\\\xbay\xf2>sB\xe3\xaci\x94\xa6O\xa2y\x93}h\xfd\xb3[a\x7fM'I.\x13\x1eK\x04J\xd3G\xa6f`\x10\xf0\xa5ig\x9a\x88\\\xde[.\x1a[bM\x98-\x9c\xd7\xf6\xf6%\xb9\xc5\xd1\x1d\xe4,\xcag\x95\x9a\xd4\xf4\xf5\x06\xcd\xaa\xd9\x96\x1c8Q|\x06\xa5\xcaT\xf9\x19\n}y\xeb\xd65\xb2+wX\xe5@\x86PY\x94\x8aV\xb9\xa6\x8bHDs\x06\x82\xebja\x8c-\x12\x96\x07#\x0fD\xd6Hz\xd4\x9b'<\x99/\xe7\x90\x8a\xceu\x8a\x9d\xc7\xe92ON\xd9C\xfb\xb2\xcc\xb2\xa5\xe6 W!\xfd\xd5\xb7eZ\xeba\x0e\xa6\xaa\xd0\x03\xc9\xe6\xb9*c\x92\nm\xec\x8b\x84\x97}S\x05+\xcf\xd1d\x92\x00\xdc\xa2\xb4\x92\xbd\x88\xa4d\x82C\xe78vH\x9f\xc0zc\x1a\xc1tW\xc6\x9b\x94m\xbd\xa0?c:\x93r\xf1\x90\xc9Y6\x81/\x8f\x19\x80i\x91\xe5\xf8\xb3\x94\xd8P\xca$S]\x88a\xc83\x14-\xbdl\x01\xdd\x84\n\xa5\x88b\xe6\x8di\x1e\xf1D&9\x0b\"\x9b\xbc\x93\xa6M8\x15\xf9\xccY\xb1z\xd9\x1dz\xa4\x81\xc16\xb0\x92\x06\x8eG.\x1a\xb6\x06\xa7*,\xf2\xa6%\xde\xbf\x7fr\xf0\xb6\x92\x0e\xfdW.\xbc\xcfx\x817\xc9\xd24\x12\x1e\xf5>\xeb\x05\xde\x82\x89\x98q\x18{\xc7\x0b\xbc\x88\xc3hoy\x81\x97\xb2\x1c\x86{\xdb\x0b\xbcc\xd4\x0c\xc2\x07\x85\x17x\x187\xff\xef~\xdb\x0b<\xfd\xdd\xdf\xfd\x0eT\x93-\xf1\xd3\xbf\xfb]x\xb1\x14\x82\xf1x\x05\xcf\xbf\xe7\x05\xde\x8a\xc1\\\xfe\xdd7\xbc\xc0\xf3c\x02\xc9oB[\x90\xf8#\xc8\x13\x98\xf7\x97P\xb9G\xbdo\xffG/\xf0\xee@\xe2\x07M\xe2\x87L\xe2\x87M\xe2GL\xe2GM\xe2\xab\x90\xb8\x0f\xa9\xff\xe4\x05\xde]H\xfcg/\xf00\xe7\xc7L\xe2\xc7M\xe2'L\xe2'\xbd\xc0{\x00\x89\x9f2\x89\x9f6\x89\x9f1\x89\x9f\xf5\x02\xef\x1e$~\xce\x0b\xbc\xb7!\xf1\xf3^\xe0\x1d@\xe2\x17L\xe2\x17M\xe2\xbf\x98\xc4/\x99\xc4\xd7L\xe2\xeb^\xe0\xbd\x03\x89_1\x89_5\x89\xff\xbfI\xfc\x9a\x17x\xefB\xe2\xd7\xbd\xc0{\xfa&\xa4~\xc3\x0b<\x9c\x8co\xff\xa6\x06\xdb\xb7\x7f\xcb$~\xdb$~\xc7$~\xd7$~\xcf$\xfe+$\x00\xa9\xbf\xfd\x7f\xc0\xe4@\xe2\xf7\xbd\xc0\xc3\x9co\x98\xc47M\xe2\x0fL\xe2\xbfy\x81\x97@\xe2\x0fM\xe2\x8fL\xe2\x8fM\xe2[\x80N\x90\xf8\x13/\xf0`\x92\xbf\xfd\xdf\xcd,\xfe\xa9I\xfc\x0f\x93\xf8\x9f&\xf1g&\xf1\x17&\xf1\xbf\xbc\xc0[B\xe2/M\xe2\xafL\xe2\x7f\x9b\xc4_\x03&A\xe2o\xbc\xc0Cz\xf4\xed\xbf\xd5Y\x1f\x18\x94\xf9\xe0\x07\xf5\xa0?0(\xf3\xc1\x0f\x9b\x1c\x832\x1f\xfc\xa8\xc9\xf9\xaaF\x94\x0f\xfe\x93\x86\xcb\x07?ir~\xca\xe4\xfc\xb4\x9e\xfb\x0f~F\x0f\xf5\x03\xc4\x86\x7f\x0f)@\x87\xc9\x97!\xf5\xf3\x1a\x9d>\xf8\x05\x0d\xbd\x0f~\xc9\xe4\xfc\xb2\xc9\xf9\x9aI|\xdd$~\xc5\x94\xf9U\x93\x03\x93\xfe9H\xc0\x9c\x1fC\xe2\xb7M\xce\xef\x98\x9c\xdf\xd7h\xf9\xc17\xf4,|\xf0M\x93\xf8\x03\x93\xf8#S\xc6\xcc\xd4\x07\xdf29\x7fbr`\x16N \xf1\xe7&\x010\x7f\x0b\x12\x00\xf3\x14\x12\x7fmr\xfeF\xe7|\xf8\x83:\xe7\xc3\x1f29?\xac\x17\xc5\x87?\xa2q\xe0\xc3\x1f59_59\xff\xc9\xe4\xfcg\x93\xf3\x93zQ|\xf8S\x1a\x07>\xfcY\x93\xf3s&\x07W\x19\x00\xe8C\x00k\x06\x10\xfa\x10\xd6\xd9cH\xc0:\x03R\xf4\xe1\xd7L\xce\xd7M\x0e\xc0\xf5 $\x00\xae\xb0p>\xfcu\x93\xf3\x1b&\xe77M\xceo\x99\x1c\x80\xf4SH\x00\xa4\x81\xb0}\xf8\xbb&\xe7\xf7L\xce\xef\xebe\xfa\xe174V~\xf8M\x93\xf8\x03\x93\xf8#S\xe6\x8fM\xce\xb7L\xce\x9f\x98\x9c\xffnr\xfe\xd4\xe4\xc0*\xf9\x02$`\x95\x9cA\xe2\xcf4%\xf8\xf0\xcf5\x96\x7f\xf8\x17&\x07\x96\xcb\x0f@\x02\x96\xcb\xfb\x90\xf8+\x93\xf3\xbfM\xce_\x9b\x9c\xbf\xd19\x7f\x0f\xe0\x04\xce\xfd\xf7\xbf\xa9!\xfd\xf7\xbf\xa5!\xfd\xf7\x7f\xac\xfb\xf3\xf7\xdf\xd2\xfd\xf9\x07\x98\xa8\xb7\x00\xcb\xff\x01\x88g\nX\xfe\x0f@4\xdf\xc6<\x98=\x0ey\xff\xf85\x0d\xc7\x7f\xfc\xba\x86\xe3?\xfe\x8a\x86\xda?\xfe\xaa\x86\xda\xff\xf9+\xba\x99g_\xd5K\xf0\x99\xa1\xcc\xcf\xa0r r\xcf~\\\xe3\xe73\x83\x18\xcf~Z\x8f\xf6\xd9\xcfh\xd0<\xfbY\x8d\xba\xcf~\xce\xd4\x03Cz\x1d\x12\xbf\xa0\x97\xc9\xb3_\xd4\xeb\xf5\xd9\x7f1M\xfc\x92\x06\xc4\xb3_6mA\x9fo@\xe2\xeb\xa6Q\xe8\xe1\xf7C\xe2W5z?\x03\x82\xfc\x10\x12\xbf\xa6Q\xf7\x19\xe0\xd0>$~\xc3\xf4\x10\xe0\xf8\x08\x12\xbf\xa5Q\xf0\xd9\xefhh<3\xa8\xf3\xec\xf7\xcc(\x80\n\xbf\x01 \xc2_\x84\x04 \xd3#,\xfd\x0d3\xc2o\x9a\x0e\xfd\x81\xf9\xec\xbfib\xf5\xec\x0f5\x8dx\x06\xf8\x05\xd4\xef\x99Y\xdb\xcf\xbe\xa5\x11\xe4\xd9\x9f\x98\xc2\x80_G\x90\xf8SM5\x9e\xfd\x0fM\xbe\x9e\xfdOS\xcf\x9fi\xbcx\xf6\xe7\xa6\xc2\xbf0p\xf9_\xa6\xe6\xbf\xd4\xa4\xe1\xd9_\xe9\xd5\xfe\x0c\xf0\x0bD\xb2g\x7f\xadW\xf2\xb3\xbf1p\xf9[=\xcd\xdf\x01j\xbc\x80\xc4\x0f\xea\x15\xf9\x9d\x1f\xd2\xc8\xf1\x9d\x1f6\x89\x1f\xd1\xc8\xf1\x9d\x1f\xd5\x9d\xff\xceW5z~\x07\x88\xc59$\x00K\x16X\xfa\xc7\xf4\xa2\xf8\xce\x8f\xeb\x9e}\xe7'\xccg?iZ\xfd)\x93\xf3\xd3\xba\xf0sh\xfe]x\xf7\xfc\x87\x0c\xcd~\x0e\xed\xbe\x0b\xe3\x7f\xfeU\x0d\xeb\xe7\xd0\xde\xbbP\xe9sh\x10K\xfd\x98\xc1\xfe\xe7?np\xfe\xf9Oh\xde\xf0\x1c\xf0\xf1\x1e`\xd4\xf3\x9f\xd5x\xf8\xfc\xe74\x1e>\x07\x84\xfc<$\x0cB>7\x08\xf9\xdc \xe4sDH\x00\xf8\xf3_\xd6\xa8\xf9\xfck\xa6/_7=0\x18\xf9\xdc`\xe4s\x83\x91\xcf\x0dF>\xffu\x8d\x88\xcf\x7fC#\xe2\xf3\xdf\xd4\x88\xf8\xfc\xb74\">7T\xed\xf9\xef\xe8%\xfe\xfcw5\">\xff=\xbd\x1e\x9e\xffW32@\xcd\xbb\xd83\xc0\xcd'\x98\xfa\x86M}\xd3\xd4`\x90\xf39 '\xfc\xfe\xa1\x19\x1a\xe0\xe6\xbb@?\x9e\x03r\xbe\x0b\xb8\xf8\xfc[\x1a)\x9f\xff\x89F\xca\xe7\x80\x9d\xa7\x900\xd8\xf9\xdc`\xe7s\x83\x9d\xcf\x11;\xb1\xd9?\xd7x\xfa\xfc/\xf4\xdc?\x07\xf4\x04\xe2\xf3\xdc\xa0\xe7s\x83\x9e\xcf\x0dz>7\xe8\xf9\xfco4~<\xff[\x8d\x95\x1f\xfdG\x8d\x95\x1f\xfd\xa0F\xc6\x8f~H#\xe3G?\xac\xc9\xdfG?\xa2\x91\xf1\xa3\x1f\xd5\x8b\xe3\xa3\xafj\x89\xe0#\x14\x160\x0b\xd0%\xc7\xd4\x8f\xd9\xd4\x8f\x9b\x1a\x0c\x82~\xf4\x93\nH\x1f\xfd\x94\x1e\xdaG\x80\x9f+,\x03\x98\xb4\x02\xd8|\x04\x08\xb4\x82n~\xf4\xf3F\xa8\xf8\xe8\x17Qt\x86\xd4/\xe9\x91\x7f\x04\x08\xb3\xc2\xd4\xd74\x0c>\xfa\xba!\xcf\x1f\xfd\x8a!\xca\x1f\xfd\xaa\xe9\xeb\xaf\x99\xde\x00\x86L\x00\x8a\xdf\xfdY\x8d\x98\xdf\xfd9\x0d\xfc\xefB\x8b\x9f\x03D\xf8. \xed1\x0c\xe3\xbb\x88~\x98\x07u\x9d`\x1e\xa0\xd2\xdb\xf8)\xe0\x12\xc7o\x91\xd9\xc1\xd4\x7f\x17\xb9\x1d\xf4\xf6\xbb\x86\xdd}\xd7\xb0\xbb\xef\xfe\xa5\xc6\xb4\xef\xfe\x95\x86\xe6?}\xcdH\xeb\xff\xf4u#\x9d\xfe\xd3\xef\x1bv\xffO\xdf0\xec\xfe\xff\xfa\x0b\x98\xb5\xa3h\x06\xb3\xf3\xff\x10\xf7\xef\xddm$Yb \xfe\x7f\x7f\n0[\xce\xceP\x06@\x80\xd4\x13`\x88C\x89T\x15\xbbIQMR\xa5\xae\x06\xd1<\x89D\x00H1\x91 e&H\x82\x04~\xc7n\xd9\xfe\xcd\xee\x9e\xb3\xeb\xb7=~\x8cg\xe7=\x9e\xb7\xed\xf1\xd8]\xeb\xdd\xcf\xa29\xc7\x7f\xefW\xd8so<22\x01P\xaa\xea\x9e\xdd*\n\x19q\xe3\xc6\xeb\xc6\x8d\x1b7^7>~\xf8G\x92\x95>~\xf8\xc7\x92\x97>~\xf8'\xb2\x1a\x1f?\xfcS\xc9D\x1f?\xfc3I\xea\x8f\x1f\xfe\xb9d\xb5\x8f\x1f\xfe\x85d\xa3\x8f\x1f\xfe\xa5l\xed\x8f\x1f\xfe\x95\xa4\xeb\xc7\x0f\xbf!9\xe9\xe3\x87\x7f-Y\xe9\xe3\x87\x7f#y\xe9\xe3\x87\x7f+\x99\xe9\xe3\x87\x7f'\xb9\xe9\xe3\x87\xdf\x94\xec\xf4\xf1\xc3\xbfW\xac\xfa\xf1\xc3oI\xd6\xfa\xf8A\xa9\x15\x1f?\xfc\xb6\xce\xeew$=>~\xf8]\xc9^\x1f?\xfc\x9e\xce\xf8\xf7\x15\xf1?~\x80~\xf8\x1e]\x7f\xa8\x18\xeb\xe3\x87?R|\xf7\xf1\x03\xf4\xc4L\xa4\xfe\xc7\xaaa?~\xf8\x93\x1c\xfa\xa79\xee\x9f\xa9\xf6\xfb\xf8\xe1\xcf%\xcf|\xfc\xf0\x17\xb2\x1d>\xfe\xe2\xef\xca\xa1\xe7\xe3/\xfe\x9e\x14\x9b\x1f\x7f\xf1s\x0d\xfb\xa0a\x7f_\xc3\xfe\x81\x86\xa1Vu\x82\xce\xdf\x92\x92\xf0\xe3/\xd4\xd4\xe4\xe3/~[\xc3~G\xc3~W\xc3~O\xc3~_\xc3\xfe@\xc3\xfeP\xc3\xfeH\xc3\xfe\x83\x86\xfd\xb1\x86\xfd\x89\x86\xfd\xa9\x86\xfd\x99\x86\xfd\xb9\x86\xfd\x85\x86\xfd\xa5\x86\xfdG\x0d\xfbO\x1a\xf6\x9f5\xec\xaf4\xec\xbfh\xd8_k\xd8\x7f\x95\x12\xef\xe3/\xfe\x9b\xe2\xb5_\xfcB\xc3\xbe\xd1\xb0\xffC\xc3\xfe\xbb\x86\xfd\x9f\x1a\xf6\x7f)\xd87\x7fW\xc1\xbe\xf9{\x1a\xf6s\x0d\xfb\xa0a\x7f_\xc3\xfe\x81\x86\xfdC\x0d\xfb\xffk\xd8\xaf\xcb\x01\xe5\xe37\xff\x93\xe2\xf1o\xfeg\x0d\xfb_4Li[\x1f\xbfQz\xf8\xc7o\xfeW\x0d\xfb\xdf4\xec\x1fi\xd8?\xd6\xb0\x7f\xa2a\xffT\xc3\xfe\x99\x86\xfds\x0d\xfb\x17\x1a\xf6/5\xec_i\xd8oh\xd8\xbf\xd6\xb0\x7f\xa3a\xffV\xc3t\xcf\xfb\xe675\xec\xdfk\xd8oi\xd8\xff\xaea\xbf\xada\xbf\xa3a\xbf+e\xd3\xc7o~Ou\xc6o~_\xc3\xfe@\xc3\xfeP\xc3\xfeH\xc3\xfe\x83\x86\xfd\xb1\x86\xfd\x89\x86\xfd\xa9\x86\xfd\x99\x86\xfd\xb9\x86\xfd\x85\x86\xfd\xa5\x86\xfdG9\x8c~\xfc\xe6?\xc9\xb1\xe2\xe37\xffY\xc3\xfeJ\xc3\xfe\x8b\x86\xfd\xb5\x86\xfdW\x0d\xfbo\x12\xf67\x7f\x17hz\xf6\x03t\xfeF\xee\x04\n\x9e\x9dY\xe8\xfew\x86\x1b(\xe6\xa2\x0b\xe8t\x1f]@\x89Z\xad\x06\xee\x9fC8\xf7'\xe8\xc6\xd5\x9edr\xc3\x83$F\x00\x10\xb4\x9f\xf0\xc8\x1fV\xfa\x89\x17\xf9\x08\x04\xda\x86A\xe2\xa1\x07\xc8;\n\xc2\x10=\x90n\xe4\xa9\xa0?\xc0e\xa7\x94g\xc2\x0b\xa4N&c\xce\xd1\x07\xe4\xbe\x8a#t\x03\xc1#~UI\x87\xfc\xfd\x84\x8b\xa4P\xde\xc58\xf8\xfc\xcd\xcf\x81\xfa|\"\xcb\x04\x0dp\x11\x8c\xd1\x0dM\x90M\x06Ip\x81^h\x87^\xe2\xf9\xc3\x91\xc8\xf2/\xb0\x04Q\x84t\xfb\xf9_\x8a\xf2\x88T\xa0Q\x06\x13/\xf1\xa2\x00\xfd(\x1a&i\x96x\"\x7fh\xa0a2\xbd\x8c\x02\x91\xd4_\xe1BXO C\xab\\x7\xde\xc50\xcd\xbc(\xa8d<\x1a\x88j\xa1F\x1d\xf5\x02/\xaa\xe4u\xfd\x05\x962\xb9\x08\xd2aE\x13\xee\xbf#9\xd2T\xa0\xe2\xeb\xe1\xd6\xdf\xfc\x1c\x87\xc1 \xf3\xe3\x00I\xf3\xf7\xa1u\xd2\x11:q|A\xe7\xaf\xff\\\x8e\x80\x7f\xf3\xeb \x13z<\x14$\xfeu\xe8\xb3\xe9D\xe0\xfc&\x96\xa4\x1fDA\x86\xd5\xff\x0dh\xa90\xbe\x84|\xfe\xc7?\xf8\x80\xba\x89\x07\x99\xfc\x8f\x7f\xf8\x0f\xf5\xda\xdd\xff\xfd\xd7 \xc8\x92\xc0\x0b\xad\xf9\x0f\x08\xcdJ\xab\x8a\x97\x81\xd5\xbc\x95+#za\xc4\x9a\xcf\x7f`\x1c$\x94\x0f>-\xbbF\x14-\x9e0J\xc3\xc9 \xe8O\x9b\x15\x81\x9b?]\xc4\xaf\xc7\xf8\x1e\x8d\xa5\x0f\xf2\xb5\x9d\x84-l\x1f'\xdb\xb7r'\x04b5\x93y3\x99\xcdn\xe7\xa4\x16\xc6\xbe\x17\xf2\x0exh\xc0\xf2WIj\x06\xfa\xb6U\xb5\x9a\x05\x08\xf5X\xa4\x16q-RKxo\xe2\xf3\xf2\x110\xb5:\xef:q;\xea\x88\x07Df\xb3(\xdf!R\xc6\xb4g\xb3\xf5\xf6\xcf\xce\xae\xce\xd2{\xf7\xcf\xdd\xff_\xcd!?\xb0\xd6\xce\xaa\xcd_\xeb\xb8\xeb\x03jYhR\xc4\"j\xe7[\xc5\xc6\x87\x18\xf8`\xefz\xecX\xed\xb3\xb3\xd4r\x03\xd7\xea@\x17\x1eX\xc4\xb8\xef\x9d\xd4\xc2\xf8\n\x9f4\xf2\x98W\xbe\xc2,v\xd9\xfcL\x86.M\xfbg^\xf5f\xa7\xfa\xd3z\xf5\xa9\xc8B\xe6 *\xfeye!\xd4\xcb\xdf\xd4\xc5c#\xc5\xe7\xee\xf4\x1eH%\x88*\x19\x01J\xb1\xac\x1du\xe64\x9a\xe7O\x8a\xb1\x04\x1f\x1aV\x0f\x8c\xc9]\x00\x80~\xc6*y\xc9\x0cD\xb4-\xdf\x1aMp3QZ\xe7n\x95\xdeh\xc0\"\xaf\xad\xe1\x11k\x8e\xf6\xd9%\x081\xd5\x99\x06\xf3\xb9\x8c5\x9e\x9fu0m!\xace\xf9\xeb\x08xx\xa0p\xf2\x81\x13\xea\x15\x00\xe2\xcc\x9f\xda\xab\\c\xfa5\xa3<\x95\xdc\x0c\x96\x8c\x98\xefY\x0e\xbd\xd4x\xf4M\x1e\x03%4d\xf5V\x98o\x80\x86\xae\xab\x0c\x1e\x04\xed\x10\xdfrXK\x1d\x9f\x14\x0b:a\xbc\xedw\xe8\x98em_\xe04\x18\x1a\x067(8\xa1c\xea+\x1a\x12\xc3\x00Fl\xdb\x935\xc6\xc6:\xc9\xfc\xe5\x86O\xec\x89g5\xaf\xb0\xc7\xac\xe5F\x86\xe8\xba\x1d3\xd5-Do\x1c\x92V\xc6bIauZ\x8dzz\xdbM]\x02\xf5\xf43\xf9\xf2Y|A\xc9:R\x9534\xa7\xbemYM\xde\xaew\\\xabb\xb5\xd2\xad\xa0\xe5\xba)\xc9\xd0\xd0\x18\x94\xa1\x9dvh\xa2ze\xe9j\xe0%Z\xa4P\xe9\xa1\x95\"\x95\x80j6\x9f\xd5[\xfe\x96\xd7r]\x9fd\xed\xd0u1\xd9\xb6\x8f\xd9\xd1\xb8\x90\xfa\x92;>\x0b\xb7\x13\x8c\xed\xc1:Q\xd5\xdc\xdc|&\x1e\x8dt2M)RD%@K$\xc2\xe6\x13}\xa5Qw\xec\x11\xb5\xee5,\x97\xab\xb8xU\xb2\xf2Pc\xaa\x00\xf7\x8e(\xc6\xf5\xd2\xfaV\xe3~d\xdb\xf5\xadL\xef\x9cZg}+7\xcco\xa4\xe2<|\x82\xfb\xa5\x85\xd2B\x9b@\xf2$O_?\xda\xe5\x1a\xe4Id\x7f\x0f\xd4\x892\xeeZ-\x8b\xa6l\xe3~\xe6n\xde\x8f\xdc\x07\xf7\x03`\xe6\xa7\x0f\x1e0\xc6Rr\xcb\x99\x97\x17\xa9i\xd1\xa7\xc4mH\xc3\"^-\x9dt\xc5\x80\xe2p\xea\xe9{ \xba\xede\x01\x8a\x98u<5%\x88\x13b\xe6\xd0ovf\xb3\x0d\xf8\xd8v\xec\x84\xb4A\xb6\xad\xea\x15\xef^\x04Y\xd5rC7l\x86s\xb9O\x9c#\xae\xc5\xf8B\xb3\"\x91\xa7\xda6\x95\xcd\xd6\xa87\x1e\xaa\xe6x\xfa\x18\x18\xd7$Y\xa3^\xc8\xc3s\xbd\xa6'\x1a\xf1\xe9\xc3\x86\x8a\xd6h<*\xc7\xdb\\\x19\xed\xd1f\x1e\xad^\x8e\xf6pU\xb4F\xbd\xfe\x148\xa0Q\xaf\xaf\x95\xe2< $\xbf\x86[y\xfa\xe8\xa9\xe8\x93O\x1fl\xa8K\xcd\x85\x14%\xda\xe3'\xcbB\xad\xea(\xbe1\xf1\x1a\xf5\x86J\xef\xc9\xe6\xdd1\xac\xea(5\xa3>y\xb2 %~\xf0\xb0\\\xc9'\xfaRT\xb1`\xc8\xe0\x06\x1b\x05#o\xc0\xab)\xcf\x1c\x8b6\x8c\x16\xd4L~\x0e]E\xa5qo\xc3\"\xae\xd72I\xb1\xb9\xb1\xbc\x00\x0f\x88\xbaz^\"\xbef\x89\x85\xaav\xe3k(e~\x84\xa4:Hb\x98\xb6[\xc4-\xd3#-bJ\xc4q\x9c\x06Yp\xc9\xb1\x94\"\x1b\xcdx\x9fH!\x1d&A\x04\xaa\xb7z\xf9)O\xe3\xe9\xaaf,%\xd1\xf5\xd2\x00\xcf\x02$\xbc\xcf\x93\x84\xf7\xaaip\x83\xe9\xcc\xef\x88\xafsy\xf4`e6\xfd\x90_\x179f\x03\xdb\xfd\xe9\xd32\xa3>Q\x8c\xba\x84\xb6c\xcf\xbf\xb0\\\xa7(\x03\x8a\"\xa5\xf1\x90\xe4\x1a\x93%\xb2-hQV:\xf6|^\xed\xf2\xec\x8a\xa3\x9a\xfdn\x92fA\x7fj\x91em\x84 \x88l\xc3\xbc\xecu-\x0b\xfa\xb5\x8c\xa7\x99\xe3\x91\xed\x9c\x8ccj5uB\xc4-\x05`G F\x9f\xe5\x9bMe4\x81\x95\xaa\xd6\xd8$z<\xd1\x95\x84\xd8\x0d\x1a\x16E\xb6[\xf0g\x8aG76\x1e5CC\xe5\xecR+\xebZ\xc4\xe4\xff\x8d\xcd\x8dE\x94j\x12\x96\xb06\xeae\xac0\xb1\xca#\xb2\xea{wp\x8bA\xc5\xc6c\xe0\x00\xf1`~^\xbd4\x0b\xfc\x8b)\x8c\x0d\x05\x81\xf5\xf8\xa1A%\x8f\xe9\xb3E\xd5F\x9d\xa6@7gs\xb3\xdc\x833h\x15s\xb0\xc8H\xd3#\xe6@S`\x9d\xc7\xc4m\x90\xe5\xe3\xb7\xeb\xd4g\x05\n?&\x9a\xc4ud\xe4F\xa3\xf1,\\\xca\xc7\xba\x17\x9b\xba\x7fH\xcd1\x89\xc0\xd0U\x14K\x1b\xf5\xc7M\xd5SV\xc7t\x1a\xf5\x8d\xadt\xdb\n\xa20\x88x\x15\x9f\x13s\xadn|m\xc9$\xef\xce\xb0\x10*\x9b\xc7\x8c\xadF}\x0f\xbcJ\\>Y..\x1f.\x17\x97\x8frq\xa9;\x8d\xc9HVU\x9d%\x82\xd9N\x91a\nR5,\x08\x92\xf0s\xc4#\xe2B\xf2\x05)w\x81\xe2\xd8+1\xed\x8a\xd8HV\xd1\xff\x8d2{a0\x88\xaa\xf8Z\x1b\x9e\xc61\xc4\x8bL}^\xe0\xddM58>\x15\xb4+\xcb\xbcM2\x9b566\x96\x8c@\x85\x81\xaa!\x93y\x88\x1c\xb7\x06z\xc1\x9e\x90?\\\x8f{\x8d\x06\xb4\x8c\x132\xbe\x8a\xcf\x81\xcbK\xec\xbd\x9d8\xc6\xb9\xc74K\xb88\x88\xd5\x0f\xc2\xb0\xea]zA(\xac.Jm/Gm\x960\xa8\xd5T\xb1Is5\xf3\x95\x18\x0fU\x83\xd0\x90\xda\x90(\x92\xb5O\xb0\xbd\xec5\xf1\xed\x1d\xd6h:;l\x83\x1e3N\x9a;\xacNhZ\xbc\xc4\x18\xa9\x0b(xCms\xf3YZl\x1b\xdbvR\x96\xaa!\x8c\xa6\x0c&\xb8\xf5\xad\xd7\"Z\xc8<\xa7\xda\xa0\x11MiJO\xe9 \xad\x8b\xffIK\x977\xb4\xed\x85U\xbd\x10\xed\xa7\x85\xc2V\xe4X\xaf\x17T\xb8\x03)\x85tL\xfby\x9b\xf4\xe8\x90\x8eh\x97^\xd1\x0bV\xa7G\xacN\xf7X\x9d\x9e\xb3:\xddguz\xcc\xea\xf4\x80\x8dX\x8f\xd5\xe9!\xab\xd3]V\xa7/Y\x9d\xde\xb0:}\x93?P\xf9\x9c\xbd\xa96\xe8=fY\xf4-\xfc\xbc\x87\x9f/\x99e\xb5\x0e\xb7\xde\xb4p9s\xc8\n\x83\xed!\xa1\x87\x8c\xb1\xe7\xb6\x0d\xb58r\xcf\xdd=\xf7\xc2\xb6\x1d\xf4\xd9\xb63d\x0f`\xd2v\xb4\xdd\xa87\x1f<&\xf4\x9c\xed1(\xe0\x1b\xd7\xa5\xcf]W\x18Z\x96\xd10}\x99\x9aS\xdf\xda\xb5m\xe7\x1e\xbb\xa7Yx\x82r\x89\xd6\xb7\xee\x15o\xc9\x10m\xd2k\xa8\xa6\xfa\x1bR^\x8b\xcfC\xf9ml\xaa\x81\xbd\xc4`\xf7\\Y)\xac\xd0|\xc8\x1e>\x9d\x97\x92lll6\x81\xd4=\x86eZ\xaa\xab\xd0\x11k\xd0\x1b\xe6\xba\x87\x92\\*\x8d2\xc9\x8c4G\xaek\xca\xd9\xc6\xc6\xc3\xe6\xa8Z5A\x0f\x1e7W\xa4\x03\xc3\x89H\xe9\x81\xac\xf0\x83\xc7M\xdeD\x968`\x87n\xa3u\xb0\xf5\xbc\xe5\xba\x07\xaa{\x16\xa2\x1f\xe8\xc8\xa8\x0d>\x00I>\xb4m\xfc\x16\x11\xab\x0db\xdb\x87.\xc8\xb1\x03r{\xc8\x0e\xdc\x86(`\x85\x9b\xa3m\xa3\x8e\xe9@s\x0f\xcbh\xf3Cv0/\x0c\xcd\x8d\xe6\xd0ue\x0d\xeb\xb9{\xf3\x81\xa8\xc9\xe6S$w\xeb\xd0u\xb7\x9e\xdbv\x89\x80k\x8c\x0d[\xa4\xa5V\x13Fr\xb4>t]\xd5n#\x16\x1aR\xee\x86\x1e\nN\xeb\xd9\xb6jB\xc5V\xbe\xb1\xfa\xbc\xb0x\xd4\x934z\xf4@5\xc2J\xbe\x1c\xb2{E\xf9\xac\xd5/\xb5\nWW|\xd8x(\x9b\xebas\x97\xa5%U~\x97\xbd\x80z\xdd0g\xc4\xb8\x93\xd2]:\xa2C\xdaG\xddAv\xd3\xfa\xd6k\xdbv\xae\x98\xe7l\xd2\x11\xdde\x99\xf3\x82\xde\xa3/\x89\x94.7\x80O\xc7\x84\xdec\xbb\xf2\x00\xb6e[\xa7#&;\xdb\x0d)\xf7\x84\xc6\xc3\xa6Y\xfdk\x1a\x90\xd6\x8a\x9a>x\xd8\x1c\xb1{\xaeuk\xb9#\xd7\x9a[\x05V\xaf?n\x8e\x8aM1\x80q\xb1\x02#6\xc9\xe3@\xaf*--Y\xbff\xb9#\xbaI\xb6\xad_\xcb\xd5\x91\x91\x8b\xe0&\xfe\x96h\n\x85\x18\xd1F\x03R\x18\xdb\xb6\xf3\xd6e#QEa\xd6\x05\x9c\x0bQ\x80\xf8\x99\x93\n\xca\x8e@\xda\xba\x0d2\x7f/\xa2\xbed\xbb\xec\x00\xc5)J\xcbR\xd7t\xddCR\xee\xd6J\x14\xc1\x94e\x0b\x88\x7f\x8f\x013m\x97\x18\xa9y\x8f\x94\x9bD\xb5\x00\xb4\xda\x012\xf0\xbd\x92\xe0\xc1IAo6{\xfah\xabg\xdb\x8d\x8d\xcdg=h\xc8\x9b\"y\xad\n\xa8\x89V\x9e\xb0`\xa4|\xcc\x04\x8ej\xd0{4\xa5\x112\xd2[\xc5pc\xe4'\x923\xce\xbd\xa5\x8cs\x8fYg\xf5\xb3\xbaE\xe8b\x11\x17\xba\x87\xee[J\x1a\xab\x8e\x86\xcbhP\xa1\xe1l\xf6\xf4\xa9\x90&_\xba\xec\x9ek\xc8h\xf9f\xacj\xac\x87O\xd6X1\xfd\x1b\x14Z\xd0\xd0\x89s\x8f\xc2\xe0x\xaf\xa4-\x91\xf9\xa7\xdbp\xbe0\x0c\xe4C\x88\x1c\xd7\x8eX\xbd Ti\xb8@\xf9\xfa\xe35\xe40\x18\xa4\x04]l\xdb\xd9e\x0dz\xcf\x05\xdaXH\xf2\xfb\xafl\xdbs\xea\xab MOX\x83\x9e\x16G\x06=\x88mi\x96bu\x17{\xcc&\x0c\x10P\xdf.\xb3*\x161\xa5}\x1d\xf0\xcf\xce\xeaE\x01\xb0!\xa0\xfd\"\xb4!\xa0\x97\x05\xe8\xe6\x93\xa6(\xe4\x11j\x17\xbb\xec%kP\xc0\xeb[n\xb7\xd8\xd5\xeaO\xf2*\x1d\xb9\x17\xee;h\x0d=\x04\x1eV\x0f\xd4\xf2AS\xc8\x83}\xdb\xc6\xa5\xf8\xe2\x10S\x85i\x89\xf3\x8e\xedK\xd9\xf6\xa4\xd9\xc0i\xcc1B\x8f\x0b\xb5{X,\xdc\x01+v\xfe\x07\x0f\x9a\xa2\xb5\xf6\xdcsY\xfa\x06\xed\x02?$\xc5\xa5\x1ec\xec\xc3\x08\xb6\xed\x9c\xb3s\xe8\x00\xdb\x82\xc7\xce\xb7\x87\xcd\xf3B\x94\xa7\x0d\x9d\xf5\x9em_\x14Y\xe6\xe9f!\xb0\xa4V4\xccB\xef\x95\x02\xeb\x05\x1aj\xcb[=E\xc6\x8d\xfb\xfb\xee\xe6\xfdcI\xca\x87\x9b\x9b\x0b*{c\xbe\xe7\xba\xf3b\xcf6\xc8\xe0\x1e\xb8#\xdbvF\xacQ\xa4U\xae\xc8\xa0\xed\x98\xfa\x16\xe0\xeei\x11x\xa4e\x86.\xc8\xd0\xdd\xbc\xbfJ/\xda\xd8|\xd8\xe4^/'\xedr\x9c25\x96c-\xb4\xd3r4\xcdH\x02'\xf4\xd2l_\x9d\x12\x96\x81\x96|\xd9QV\x841\xe6\xf8,\xcc\x0f\x13\xe7\x85&\xcf\xc6\xdb\x96\xf4YM\x13\xc5d\x04@\xd2\xfe\"\x1a\xbf\xf6F\xe3\x90\x0b\x1c\xe9)\xa1\\WU\xa84-_\n/0: \xe6\x00\xab\xa9+Al{\xcfI\xa1s\x19EYc\xcc\xb7m3e\x80\x08~\x1a2_nY;u\xea\xe7g\x95[y\xfa\x96\xd8\x08O\xe5\x10\"\xbe\x8c1\x83\xb1\x05L\x9c\x17\xc3\xf7\x05\x8a\xf2A\x06\x8bu\xd1\x11\x13\x17zQ\xdb\x1e\x05I\x8c3\x88![\xb2t\xc0\x8d\xb3\xd8\xd0\x05\x9e\xb1\xfa\xb6\xb6(\xfa}\x8b\xb4\x1b\x1d\xd3\xbe\xe88\x1e;\xa4\xc9\x17@\nP\xb3H\xbb\xde\xa1K\nh\xf6Q\x02\xa3L^6\"\xce\x86\xb5\x16:]i\xdcp}\xd7Z\xb7\xdc\xa1;\"-\x02Q\x18c\xa3\xed\x8d\xa6\xeb\x8e\xe4r\xf0\xca\x08t\xca,\xab\x95\xf3\x05\xc3\xf6rRv\x8b\xab\xd4\xcdt\x0e\x18\xeb\xe8\xb1\x08](\xc9\x80\xa6\x84\x16{,\x1b\xb8S!_\x07\xeet>\xc7#\xd3\xc6$GT\xad\xa8s\xe5\xaa\x96\xe0\x8c\xae\xe8\xea\xd78\xa0fC\x83\x15U\xf7y\xc6\xea-k\x9c\xf0\x94'\x97\x1cJ\x8de8 \xba\xa1x(\xdf\xb9\xb6m\xcb\x0b\xc3\xa3\xfeB\xe0v\xae\x01\x81\x84Z\x1c\xfbn1^\xb3}\x0b\xc1\xcd\xee\x9c\xf2\xce\x9c4\x17\xd1d0\xc1*B\xcd\xd2j\xdc\xf32\x0fr\xcc\x96N\x1f\xb3\x8em/\x11\xe9J\xc0^\xb5>g\xc44\x02\x97\x8d^\xa5Q\xf5\x93\x03(\x0e\xb3\x7f\xbbch\xae/\x9d\x14l\x9c\xe3$\xb94g\x86\xe1D\xceo\x8d\x9e\x11\x91V\xb4\xc6p\x12\xd8\xce:\xed\xa4\x83tjG\xc6\xdc\x01\xbdf^\xa7z\xf5\x05\xaf5\xfa\x05%Xj\xdab\x17\x89rA \xce$&\xa1V\xecM\xb2\xe1F\x1eG\xadL\xdd\xce\xf1.F?\x8c\xafZ\x967\x16v\xb7\xc5N\xbe\x04\xe3Mp\xcb\x0f\x03\x1ee/\x12\xde\xe3Q\x16xa\n\x89z\xbe\xcfS\\}+\xa3Cnq\x12\xdc\xc8m\xf5\x1e7O\xca\xf2Z!\xf8M\x82'\xf2\x17\x80K\xf0\x14#l\xa3\xf8\x91G%g3T\xb7\x96\xe8\xc6Y|\xc1u\xf2\xca\xc3r\xf8]\xc9E\xb5\xd4\x8f\xc7\x1c\xe6\xc6\xc2\x81\xc6>D\x1da\xce\xa0\x9c\xd0xQ\xae\xb2\x03,\xf7\x95\xcb\x9f\x87\xa8\"\xe4\x10\x91\x8bI%9\xcf\xc8\xc4\\z[9pR\xad\xa3\xe1p\xd0,M\xa9DkWR\xeeO\x92 \x9b\xe2\x02\x1fO+\xe9Pw\x85\xa1w\xc9+\x10W\xcd\x01\xa7\x16Z\xc7\xcf\xf9\xed]\xf1\xb9\xc95\x94v\xe9F\\\x95\xe6\xad;9\xeaN\xbe0\x882\x88\x88\x0f\x13\x9f\x95j\xda*=\x8f\xa8%\x01\xc1\xdck\\\xefR:\xca\x89\x936\x83\xfb\x05\xd4\x9cn\x1a\xeb%\xe6$P,\x7f\xe8x\xc2\xeb\xc7a\xc8\xb1*/\xd1\xee9b\x96\x818k~\xc5\xd3\x8c\xf7*\xe5\xb0\xb4\xe2%\x1c\xe9\x9aN\xc6\xe38\xc9x\xcfB\x0b!y;-\xcfI\xcfPu\xc7\xdcv\xac4\xbd\x14\xfe2\xf6\xf6\x91c\x95a\xcd4\xbd\x14\x1b\x98\x950\x8e\x06<\xc9\x8bP\xe9\xc7IE\xe9Z\xc2`\x895\x0e\xc6r\xce\xf4y\xa9#\xfe\xb7H\x1f\xad\xbb\xafH\x1fO\x0c\x84q\x0f\xa6\xe6M+[YKgYA\xb2\x95\xd5\x94\x94F\xfe,G\xb3:\x0c3B]&\x9b\x86\x9cY)>\xace\xe5-\xb3\xd0&\xcde\x8d\xff\x89n\xb8\x98H\xa9K\x96\x11\xa02q\x14N+R\xe8\xcawZ\x049\x91\x13\xd4\xeaGf. \xe0\nX\xf1\xd8\xd4em\x85\x1d\xffV\xb4\x95\xe8#U\xb8~\xa5eK\xdbcI;\xeat\x8c\xce\xd3\xf6`\x14\xf2\x8c!\xc8\xeb\x90\xb9\xcaJ<\x85\xb1\xb8DV~\x1a\x03p\xbdV!\xa3\xa0\x1d\x7fFF\x86\xe4yQ\x12'\x86\xe2Z\xd2\xdd\xcd\xe7\xa9\x11S)\xb4E\xbc\x96\x94G\x11\xdae\xf9\xac9m\xd4nt\xc8|1\xff\xe2\xba\xc03VG\xb1\xb0\xab\xa1\x95I\xca{\x15/\xad\xe4:\xbfx\x1bN\xd7n\xbfx P\xceEi\x08c\x8a\xcf\x84\x8d\xa0\xcc\xb63\xbd\xec\xb1D\xf5\xca\x03\xc5\xd1\x07O.\xbdJq]\x1e\x0d\xc6\xf2|\x9b\x8e%\xd6\xd9\nkl\x1eiy\x06c\xe79\xb0v\xee\xee\xcc\x8b\xebY\xc6\xda\x8c^h\xcaa\xd2\x12\x90\xe3d\xdby\x12\xf8\x0e$\x99\xcdr\xb4\xd9\xac\xdd!\xea\xbd\xa9\xcbZ\xfef\x88xU\xd0\xb6E+,]\xfd\xc2\xd1\xe6\x16\x18\xc6\x13S\xa2>[\xa2\x13.\x8eC+8@]9Z\xc3\xe7z\x9dw\x0cJ\xa90\xf3n\x96\xb6\xfb\x1db\xdbk\xef\xcaC\xe2l\xb6\xa6\x18\xb1\xa4\x11\xcff\xce\xc2\x00\xca\xd6\xea\x90W\x1d\xaf\x0f\x88\x89\x8d\xd4\xe1\xa7l\xec\x04TV\xaf\xb56\xb5\xed\xc1B\x8a\xdb\x9fTm\x07\x14\xc8\xd2\x9cB\xdfcS\xa1\xd7\x8ba\x0f\x06~\\\n\x8d\x08\xb9]\xb1+\xd5\xe3\xe3\x84\xfb^&6\xf8\x1c^\xcb\x01l\x01\xa1\xb8\xefc\x04\x98j\x1f\x84\xa9\xe9\xbbHR\xfaJA\x85\xc44\x14\x17i{0RB\xb9\xa1\xf4bA\xd7\xf1\x94`\xf6\n\x1b2B!\x96,\xb3 \x8eu[\nQ\x1b\xa4\x95\x91\x17\xf5\xbc,N\xa68\xacEqT\x85\xec*\xc6\xda\x00\xf5H\xaet,n\xba\xe9u~\\\x04\x17,\xab\x14s\xd1\x9c:\x80\x10*\xceh\x15tx\xc5\x1fq\x12\x0c\x82\xc8\x0bA\x9a[\x1d\x89@SC\xb1\xe9\xf1\xd4O\x02\\\x93]Z\x92Bx\xc1\x9b\x97\xcb\x00\xca\xe2\x95\xd1\x08\xc1\x87G\xb1\x8c\x85\x14\xf5hd@[r\xa2\xbb0\x12\xe2\xca\xd0\xc22|w6s\xba\xcc\xf2al\xa6]\xdb\xceQ4=\x96\xb6\xeb\xaf|\xc0\xc5\xf6-\x8c\xb7\xd0\xcaX\xb05\xc6\xba\xb3\x99\xf5~\xc2\x13\xa5=\x02\xb9\xfd8\xbe\x08\xb8\x02\xe0F\x82T-\xc4\xedzC\xcdi\x14S\x82\xc9\xbf\x91\x90\x18\xeb\x97%$u\x14\x98\xd4\x08- )$\n\"v\xf1\xa2\xed\x1cy\xec\xf9|\x97\xe3\xb1S\xde\xb3\x9a\xdfRI\xe4\xd7>\x1fg\xc8\xf4A\xd4\xc4<\nL\xcf\x05A\xb4\xe2xWQ\x00\xe9\x13%\xb9S\xa1\xfc\xcc\xb2h%\xb3+\xa5\x88\xd2* Uj%\x84|{5\xd2\xfb\x94\x1ay\x07\xff-H\x86\x9c\x95\x85\xe02\xfc\xc0(\xbb^\xe6!,\x88\x08\xaa:r\xb6\xa2\xd4$r\xe4\xe4\x0b\x87\x95\xa1\x97\n\xfe\xa4\x88V\xf1\xa2\x9e\xdc8\x13\xe5VS&5S*\xcaB\x05]\"*D\x90`>sj\xb58\xa3\xca'T\xf9\x84\xab\xb0}\\\x9a\xec\xd0Q O\xbce\xbc\xf0,\xd6B#A\xfbE\xcb\xb4\x9ev\x04\xc3F\xd7\xb6\xc1\xb5\x86\x8d\xfc\xad\xe7d\x9enC\xbc[0'$\xdff\xbefuzu\x87>}\xbdu\xa5\x94\xddk\xa5\xec\x9e\xb3\xab\xf6\xb5\xb9\x1f\xdc>/(\xbb\xe7\x1d\x04\x19\xe7V\xce;\xf3y\xde${\x1aUs\xdf(\xad\xa6\x17\xc1\xb8:I\xc2\xaazb\x16\x0fp\x14z\x9d8\xe3\x12\x86\xf1\xd5\xb1X6\xec\x81>QX\x9a\\\x9a\x0e\x91j@\xce\x842Ar\x8b/l\x875i\x07\x86\xdd\xceQ\xa8\x9f0sah\xfd\xbazuuU\x85\xc8\x90\xb0X\x01\xee\xe1\xc9\xe5\x89\xde\xf9\x9d\xe4*\xb3x\xee\xcbK\xb2u\x8c\x82\x0b\x8aBovN\xd8\xf2\xd0\xbc\x08\xed\x93\x8eXj\x91]\xc2\x0c\xd0\xa7n\x15\xf94\xb3\xc9!.T\xe3)h;Vg\xb9bhD\xf9\x9c\x95H\xb9\xb1t\xbb\xac \xb7s\xba\x04,\xf5\x10\xd9\xf1\x96b\xe4{-\xab\xd2\xc81\xdaBy\xeb\xa8\xc69eK\xf0\xe9\xbbe\xd0%\xa9\xb4J\x03\xbb\xf3\xae\xa0\x16\x14B\x85\x11UT\xc6\x10Q\xebn\xcae,\xc8\xbc+\xac\xc4\xe8\xfe\xb5\x83f3V\xf7\xaf\x9d-u\xcb\xa8\xb5\x03\xfd\xeb\x9c\xed\xb7w\x16\xfb\xd6;\xdd\xa9\xe6k\xe2\xdc\x84\xb1\xff~j\x1e4;-n\xc6\x9f.\xdfq\xa7a\x8e\x06c\x88\xb1\x04'/9I\xca\x08\xcb\xb1\x1aJ\xe8;\x83\xa6\x88c4%7<@\x1a\\\x85G$t1 Y\\\x01\x82!@ \xdaw% \xfbn\xc5:\x92\xd6\xc9V!(\x85s\x8d1\x98P*\xf7\n\x9ds6SM\xa8\x840}W\x13o\x022\xab\x1bD^2\xb5\x08}\xedp\xfa\x8e\xcc\xc5\x9e2W\xa9\x16\x97\xa5\x8d\x96 \x97\x1d\xf3#\x05yc0\x7fA\xe6\xc4~\xc6\xb3j\x9a%\xdc\x1bY\x9d\xcfF\\\xda3?\x8d_\xaa\xf9\xb7\x8aZ\"\x12\xd2($j&\xabf0R\xde\x16\xaa\xae\xd7{\xcbrK\xac\x06\xe8I\xfc~o;_\xa7\xd8\xc1\x07\xaf\x8d0\x82\xd6\xa1\x1c\xeb\xdcr%w\x9bo\x91:da\xf6\xe0\x84ww\xf9O7`\x06\xdaF\xd2\x15\xa5\xcfW\xad\xdb\n\xd8a\xaa\x9f\xe5\xa3^A\xf0n\xff\xadH\xea\xa6\xa1\xf6\x18=\xcchb\xa3\x18%\xddKv\xa2\xef0\x90\xe4\x11?\xab\x90\xaez\x8f\x95\xaa\xc1s6\x9b\x08\xe1T`\xb6wi\x1cY\xb9 =fu\xfa\x8aMZ\xc7[\xaf\x94\xc0\xee\xb4r\xae=(u\x98\x03\xdd/zN\xae\xff\x81\xd6\xb7\xe7,\xc1\xa2\x1e\x99\x0b.\x9e\x9b\x9b\x9c\xa1\xde\xe4\xac\x9bsWsm#\xd3\xc7\xa1x\x9a=\x8f{S\xdb\xf6\xb7\x8b\x10-~.y\x12\xc6\x1eh\x12\x18\xf5\xc8\xb1\x8e\x14SW,\xb7\xc8\xe3\xb3YL\\\x0bUb\xf5\x98h%O\x13_\xff\xcc`\xa2\xd0,\xe65\x9b9\x19\x8b\xdaI\xa7\xf4\xecs\xbe\x9a\x8a\x9bau\x1a\x97\xacl\xdfq\xe2\xb0\x15\xb5\x03\x18\x8b\x82\x0e5O\x110\xc6\x02\xdct2\xb2\x87\xd43\xddO\x9c\xa8\x9d\xe9\xfe\x01\x9c\x90[:/\xc5\x89\xe6\x0e\xd6\x86\x16*\xa3\xdaI\x1d#+\x81\xdbK5\xab\xce\xb7\xc3\xd6\xfd\xe7;D*\x0c\x8c\xe1'\x8b\xf5)\x0c]\x94\xcfD4\xb2/q\xdc\xb7\x8e\xcf\x8a\xefH\xffr\x89\xd1o_\xfe\x15\x0d\xff\x89\xf8ZR\x7f\xa7\x02\xe7*T\xbbCj\xf2$\xfe\xe7\x16\xbd\x10\xf9\x97*\xbc\x16\x89j\xc6\xf6K\xa4E\x9a\xdf\xae\xff|z\xca\xb3\xba7}F\xdcO\xf5\xad\xcfObUO\xfb\x8c\x14\xbe-\xfe\xb2^\xf8\xf9\xd1>\xa7O~\xa7\xd4>\xaf\x87~\xa7\xa4W)\x7f\x9f\x9d\xc0\xca\x0e\xf0-R\xfbd_\xfe\x0ei\xad\xea\xd9\xdf5\xa9_a5?\xb3\xd7\x7f\x87\x94\xcb\x1a\xc1]\x8cC\xc3R\x9d\x8aJ (\x13\x85r-\xef\xcf\xb2\x00\xa8\xe5\xde\x91\xda2\x95reB\x9f\xa5X.>\x16n\x81\x044\xb4\xa8\xb2rV*\xd1]s\x0c\xf1\x9f\x9c\xd3,\x1e\x0c!\xb7\xcb\xb7\xab\x85\x85\xcc\xd5\xd3\xff\xc3\xad]\xa5f\x1d\x8a\xe9\xffn\xfb\xb0\xd32\x17\xce\nK\xe8\xea\xc9\x90\xb5\xe2\x12@iM`\xf5\x0eQbL\xfa\x17\xf7\x87\xb2\xa1\xb1\xf4\xac7LU\x9cf\x96Lx\xa5\xadfY\xaeU @Q\x8d\xf1\xa5\x1b\x8f,{|\xe3uI\xdd\x14\xc7\xc5\xa2\xc2\xc6\xdeu\xd5\"\xb6\xbdV\x06\xa6\x1b1^s\xca\xda\x11h\x9bQ\xc7\xd8O>\xce\xf7\x93\xe5=\xf8\xfc)\x16\xbd\x85\xbez\xf3\xf43\xb6\xb8\xb7\x8f\x1c\xab\xb7\xb8\xc3\xadN\xec4+@\x05\xdc\xb7\xe44\x86y\xd7\x92\x1dP\xf3x\x0f.\x0c\xe0\x86\xfcg\x1d\xf5\xfe\xac\x0d\xdd\xf2\x89g\xb5P\x17\xf4\x9d\xfc\xa2Far;\x9b-\xdb\xdc\x9a\xcd,kq\xc3+\x96\xfb\xeb\xb6\xedH\xe7\xf62S\x03\xa5\xab1d6S\xe8\xea\x92\x981\xd3\xee\xb6y\x07r[`=U\x15\x13\xbb\xb0Ai\xd1\x98\x14V\xa9D\xd7\xc7\xd67\x96\x93cR^\x12]\xc2\x03\x85\xf0\xe2$\xfb\x13\x0dh\xa0\xfe\x12\xed\xb8B\xae-6'\x8d\xf0\xc6\x9d\xbc\xbb\xb1\xa4.y\xa0\xe8\x06\xf1g\x9e\x89P\xb1\x96\x9c\x89\x88I\xcbl\xbf\x1c\x97\xb5swg\x9e\x18\xc5Z+\xf2@\x1eD\xf4\x12]\x0e\x93/\x0e9N\xb4\x9d\xa7\xa7\x0eH\xe4hw\x1d\x90\xd0\x83e W\x0d\xee\xaf\xdf\xb7\xa0\xe1\xe58\xc9n\xe7Z\xfez\xacNS\x16\xb4\xbc-u\x01\xb0\xe5\xa9\xe9l\xc8\xd2\xb6\xd7\x11\x02C\x0d\xb1\xa1\\|\xcf\xfd\xb2\xb9\x8c\x85\x03cU\x18\xd7O\x94\xbb\x1dv\xd4}\xb9\xdby\xcb\x97FB\n\xe1\xc5\x94U\xc0B\x96*\xa0\xa6x\x82\xf9\xf9F\x93\x91\xdc\xdcX~\\(q\xbe \xb9X\x99[\x08k\xea\xe5>\xb1\x82\xd7T+xs\xe3\xa6\x9e\x88\xa0\xcfD\x85\xe2V\xac*\x03\xd1\x89\xe3nZ\xde\x00\xa4P!3P\x90\x98|gJ|\x12c\x19\xdd[\xc6 v\x0d\xa7\xbc&O\xf2\xe9\x03\xcc\x13Q=\x05\xb6\xc4]\xfb\x8a/\x8f\xfbN\x8a\xaf\xc2m+\xc1X\x10y:\x1f\x99J{\xd2\x01y\xf7\x03\xb3+Z'\"a<&\\\xb6\xc5\"\xe2\xfd\x00\xc6\x95\x1d\xc7L\x86\xc6\xe6a\xd5W\xe6 \xa8*\x10\x88\x11V^\xf6\xe1\xed\xa0\xd3*4]j\xdb)\xe8.Y\xe2\xf9x\"ea{\xb4\x18\xec\xa45t3\x13\xac\xaah\xc2\x08UI\xa7\x93\xd1\x08\xb8h\xd9\xf5\xeb2\x82\x93\xd6\xa4\x8f\x15\x83\nYhh\x9e\x891N\xac\xce\xa8\x84\xe4\xa4\x85\xc1h\x11\xa5\x90i!\xc4\xa8\x1dO.y\x92.\x1a\x00(\x86\x12Q7\xe1e\xc5\xb0b\xddt\x0c\x9a\x92\xa0\xef\\\xd6\x86Y6>\xe4\xd90\xee\xa5ZE A'A+\x07\xde\xc8\xbb\x89\xa3\xaa7\x0e\x06^\xc6\xaf\xbci\xd5\x8b\xa6\xd5\x11\xe2\x03\x8b\x86J\x04)\xb6\xf7m\xdb7\x8eq\x95\x8bm\x86\x89\x1b\x8e\xe6\xa1/\xdd1\xfa\x85\x0b6+\x14+\xdbv^\xa0\xd1\x05\xca\xd9\xd8\x89\xa9>\xf8cfR\xeb\x07Q\xcfY\xd8\x11W\xba\xa3\xba\x1e\xa4\x16\xd5\xb3Z\x10\xc9\xcd\x839!\xb3\x99y\x8e@\x1d*\x91G\x0d\x94Wo\xf4\xa8\xd3R>\xdbw8\xf5\xd1\xd2}@c(`\xa4W%Q\xf7\xf1\xdb\n\xd0\xd1c\x96\x01#s*,Y\x9b\xb4i\x0d\xb7FjL\x19\xc2\x98\xd2w\xbal\xd4\x1e\x1a'H\x07\xacN\xa7\xcc\xac}k\xb05U\x91\x06j \xea\xb2i{\xd0iA1\xbb\xb2\x98\xa1k5-W\x14v\xfe\xed\nK\xa3Z\x8fw'\x83\xd9\xac\xd8\xee\x85\xa6f\xa5&\xc1q\xf6\x1d\xc1\x8dr\xe4\x18u\x8e\xde\xb6O\x9c\xdc\xb7\xc4\xf0\x82/T\x0f_\xcb_i\x9d\xec\x9a\xdd\x1a]\xa8i\xed\x8a\x0dD\xad\xeaY0D\xea8\x80,l+^\xcf5\xf9\xae@b\x15\x12>v\x0co\xfb\xaaC\xeb\xd4\x174R\x05\xbf\xb3\x8f\x16C \xf1u\x0f\xf5\x97\xf6\xd0\"T_y\x14\x04\xf2\xf1\x82\x81\xe1TW\xfdU\xf1\xc5\xeb :\xb8u\xb1u\xa4\x9a\xfeB5\xfd\x1e;j_`?\x05\xedMb\xcef\xda\xa9%\xc0\x1e\xd9\xc2\xb7!t\x91\x81\xafu\xf1\x17\xaf]\xc7*\x8c\x10]\xa0sV\xa7\xa7L\x87\xb4\xce\xb7NU\x81\xceU\x81v\xd8i\xfb\xbcC_\xb3\x9e\xb3C\xe8+\xe6I\xbbV\xafk\x93$$\xadW\xc2\xda\x90\x1f\x87l\x8f\"\x8c\xbd\x92\x1b\x80\x0e\xf4s\x99\xb4P\xcc^\x8bf\x91\xfc\x08\x85W\xd3f}1\xba\xc3\xfc\x9ay(\x96j\x14}\xd9\x19P\nj!\x15,\xa7\xdaH\xc7\xd7\xad\xa6\xd1s\x88$\xa7H~\x94V\xf5m\xb9N>v\x1e \xbb-A\x10\x13\xf9\xc5\x90\xf6A\x07'\xf7\xe6\xaa\xc1\x01\xae\x11\x1c.\x93\xa1/!\xfd\xa5!7\xcc\x04\xb7_v\xe8\x1bV\xa7\xcfY\xa1\xcb\x16\x96\xaf\xd2r@\xeb\xcd\xd6s\xd5\x98o\xa01\x9d.{\xde~\xd3!J2w\x99\xba\xf9G\xbbJ.wQ\xc8\xae1\xf6r6\xeb*\xbdh6s\xb4;-xPo\xcb\xbd\xb8\xcb&\xee\x18\xde\xccQr\x1c\x1a}\xb5\xd0\x89\xcd\x80\xdb\"b\xfb\xaa\xb3\xa0\x86\xdd+\xc51qn\x81X\xcbB\xda\xf7r]\xe7mIr\x14\x12@C\xc6\x8c\xdd#\xcb\x11\xdao\xb5R\xc9n\xe6\xf3\xc5\xd2vq[\xcf\x89\xcds\xd2\x9a&\xbb\x9a&\xbde\xf1\xc8\x9c\x16s\x05\xf9Q\xc0\x92\xaam\xdek\xdf/\xa9\x8bBB\xd6\xfc\x92-\x0fm\xbf\xef\xb4\xbe4[\xf2\xcbbK~YlI\xe0\x89fqV\xab\xc2\xd7-ww>\x9f\xcfM\xb1X\xe8 (}\x0b\xa3M\x1d\x06*s\x8cQ\xe7\xa4\xf2N\xaa\xc3\x90$zQNT\xea+\xe6\xdf\xb1\xff\xef\x17\xf7\xff\x8b\x81\xa1\x1b\x94N\x00\xd0\xaf\xcd\x9b\x88\xfe]K\x9c_\xe1\xfaDK\x97r%*Nd\xbf\x10\xefy\x0bu(\xe8O\x8bi\x13\xfacvY\x1bz\xe9\xd0\xf9B\xdc\xafO\xda?\x96\xf2\xe4'0G\xfc\x89\xd0v\xbe\xa6?A\xe6`\x85\xd8\xf4'54\x99\xd9\xeeP\x88\xc6~\x82\x16\xa4\x7f\xc4\xac\xef\xaf\xe3+K\xeb\x96\xbb\xe4.2tre}\x81\x10\xc4\n]k\xddH\xd7jAr\x98\xb6\x10\xd3?\"\xe2\x8a/\xa8\xb8\xa6t\xd2\x82\xf1\x878s(\x04\xed;\xdd\x822\xd4\xfeaG\x1cu\x94'\x1e\xa5\xe6\xb2\xa6e\x7fIY6\x13CU\xd9PM\xd2\x15\xaa\x891\xf790-\x8d\x19\xd3\xfd\x18J\x9a\xb0[\xb90\xdc\xbc\x9d\xe3I:C\x97\xe1\x86.\xc3\xcd\x1e\\\xba8Hn\xe35\xe6\x84&\xdf\xc4\x84\xc8\xe9\xf4\xaaH\xed\xb0c\xdb\x17\x8e\xb5;\x11\xeb\xf4\xbc\xa2\"\xf7J\x17\x13\xc5=D\xcb\x0d\xf1\x1a\xd7\xddI\xb2;\xc3\xe3\x8ey@\xf7\x0e4BO?Ux\xbc\xb4c\x92\xb2\x88/\x88\xaa\xce\x02Xx\x00\xb2L%\xe8\x801!\x82yZ\xcb\xe2\xb7C7\xe8\xb4H\xc0\x82m\xd7\x0d\x9a\x1b\xab\x91\xd8\xd2\x90U\x15\xd6\xc1\xf3\xc4\xf0\xb0\xd0\x0d\xe8\x9e\xb32\x0f\xb3\xca\x1e>\xaa.o\xc2\xb3\xdb9\x1d9\x9c\xdeJ{0\xcd[i\x10\xa6\x99\xcd\xe7\xf4\x9c\xd0\x15'*\xcc4\x88\x1cr9\x8d\xa8\x90\xaf*\xa4\x1du\xe6h\x8f\xa6\xdc\xfcf'\xf3\xca\x1c\xe8-r\xa0\xd1\x05\xef`\xbe\xfcP\xf5J\xbe+$\xc4V\x05y\xcb\x89_\xc0 t\xff\x8e2\n\xf9\x90\xff\x84\xf2\xae\x98\xa4_\xba\xc0v\xa5yE\xd8J\xcbdI\x17\xc9\x92\x8f\x87wPE!\xad&\x8a\x99\x0c[\x11\x92.'\x89\x89 \xeei\xf9\xabR\x10\x13\xf5c\xc7\xa7uA\x13d\x0b\x7fA-\x1a\x0bM`\xd5\xea\xd4\xb8\xb4:u\xd7\xedM\x9dJ{\xfc\x1dW\xa72\xd2\xdcq\xccd>\xd5\x8aj\x00\nTK\xf6\xcb\xf400\x80\xaa\xc3\xf2\xe0\xda't\xa0\x06\xd4!\x9aE\xb8\x9d\x131\x84\xa6\xf4J\x0c\xa1}z\xa5\x87\xcd\xa8=\xe8\xb0+\x18\xda^9\x1c\xcdP\xa4\x14w\xd3\xf0\xb4TDy~\xf8\\@;\xb6\xfd\xca)\x81\xa8\xe9S\xd1\xd621\xae\x91\x82\xe8X\xd9\x91W\xf7\x95\xf2>\xa2q\xd1hU\x94y\xa6\xe7S|\xc9|\x8a\x17\xe7S|\xc9|\x8a\x97\xe6SF\x96\xc5\x99\x14_\x98Iq=\x9b\x85ZOY[\xaf\x9f/oG\x90\xa2k\x99\xb2\xfa\xba\x1fe<\x89\xbcP-{4\xf2k\x08@\xbfH\xdb\xd0\xe8;\xce\x15\x8b\xda\xd7\x1d\"\xf4\x94\xdc\xb6\x08\x8e;\x10\xebJ\xde\xe8\x93\x0ef\x99*\x0e\x0dX\xd7uIk\xaa\xe7\xcf\x02\xcb\x0d\xd0\xec\x881\xf8\x148V&\xa5p\xe9T(HW\xfa,\xe7Jv\xbd\x92G\xd4{\x8e\xe0C\"\xd9P\xd4\xe8\x08t\x94\xa3\xe5\xfbFF*\xeb\x96+\xd2\xa1z\xdc\x10\xa9@o8\x02\x05H\xbf\x04\xb1T\x90\x08\xad\xbbh\no\xa9 -+\xe3\xcb\xd1V\x8d\x0f\x9f\xc8\xc6`\xfc;\xf31\xf4\xff\x02<\xdfZ\xb93\x1b\xbd\x05qg&\xc6Z\xff\xaa\xb6\xfb$\xd5L\xc1\xf5 \xca\x19\xa8wju\x9f\xc8\xb3\xac\x8b\xde\x99k \xb9\x98\xaf\x14\xcf\x9f\xc8O\x8d(w\xe6#\x91J\xf5\x12\xaa\xd4\xa7\xea#5\xc7\xbb\xeb!\x90\n\xe9\xdf\x9d\xee\x9d\xe9Q\x9eO\x17\x0e\x8bv=xm\x92,\xb7,8I\xc2m\x07?\x0c\x7f\xd5\x91\x92\xdb[}\xa6\xe4\x16\xb7\x1a\x170\xe6s\x8d1W\x18zww\xfd\xec\xd6\xa9\xb9\xdb\xe4l\xbe>(^\x06\x83\xb1\xe1\xd2K\x02\x18x\x85\x81F\xed\x93\xbbd\xda\xdf\x8e:\xf9*\xa95\x89.\xa2\xf8*\xb2\xe6sB('M\xa3\xb6\xbb\x86\xf1V\xe3\x1c@\x10\xf5c\xe3\x00\x00x\xc5\xd2mV\xdc5\x8e\x1ca\xba\xb9\xb0w\x0c\xd8\xf2\x85\x88\xe2\xbe\x7f\xf2\xcb\x95:\xe7\x907\xc7\x07\xe5B\x17\xa9\\\x8ci\xae\xfc\xbc\\.\xdcP=\xff\xfc\xe2!\xfa\xe7\xc93De\xb7f\x19nT\x19\xf4\xb3\x12\x11\x85L\xe4\xf3\x04\xc6\xe6&nm\x82\x82\x0c\xa2\x1d\x05zVS\xd7\xce\x18\xa7Y-\xe3\xd7\x19\x9e\xab\x04\x07\xf3\x8d\xc9\x0e\xc7\xeb\x0f\xfcZh\xcc8\x9f\xc9\xbd\xc70\xc3\x11\x97+\xf8U\x12d\x1c\x01ku\x9a\xd5\x94E\xbd\xc3 \x89\x15\x04\x8b%\xf0\xc7\xc5w\x18XD\xcb\xd6\xf7YB5\x05\x18\xc4\xf7=\x7f\xc8\xb1\x90\xe8\x92\xd5H\xe3I\xe2\x0b[]\x08n+P\x87\xe5u,\xaf\x92\\\xea\xa7\x01\xder\xef\xe2\x84g-\\b \xd0\xc2Z6\xdd\xe5\x99\xb8\xc0\xd7\\\xab\x17\x8d\xf2\xe3!\x87%F\xdf\x93\x8emC\x1f\xc0{}\xe0q\"\x98\x1f:\xe0\x81\x19\xb0\x17\xf9\xc38I\xb7\xc1\xcfz\x02\xdc\xbcp\xac\xafw\x0e\x0f*\"\xb0\x12'\x95\x11O\x06\xbcr\xc1\xa7\x15/\xabX.\x1e\xe7\x18\xc2\x147\xaay=\x19\x0d\xcd\x06\xab\x15\x1biOO5\x04\xcd\x86h_\x10Q\xad\xa5t\x8d\xab\xf5\xdd\x1a\x8f&\xa3m\x0db\x02\xd0\xaew\x9a9\xacT\x99vW.2u\xf3\xf4qaj\xbe\x9aG\xd0\xa2w\xbf6I\xb9X\x1ex\x9d\xf0~p\xbd]b\x9d\xa9\xbe9\xccS\x90Q{^yP(E(\x8a\x89\xdb9\x9d\xd2\xdbI\x126\xb9k5\xa1\xf3`\x93\xcdq\xc8,0\xca\x8aF\x9f\xef:\xb1\x1a\xf0\xa4cA\xa8\xc7\xb5\xdc8\x9c\x93{X;ww\x96F\xcb\x0f*;\xb1q\x9a9wcW\xca\x17\x0e\x80g\xb0\xb0\xea\xd9)\xec'\xc5\xed~\x1d\xc4\xca\x98\x85\xea\x1a\xf0b\x1e\x85\x03\xaf\xf1\x92U\x16]\x880\x88\x96\x15\x00\xc1\xcc\xc4(d,a\xa5L\x8d=\xd6\xb8p~\xa4\\\x88\xfcXV\x9c\xbb\x97\xa1\x95Vz\xe3;\xd6\xa5\xf0\xdc\x91\x80\xe4\xa6\x03\x97$*\x97\x81X\\\xeb\x95\xd0\xb403\x02r`\xbel\xa9A\xc6\n\xa3\x86-)\x03\xfd<}\xea\xc0\xd4\xc5@\x03\xfe\xd5\xe8Usb\xbeF\xf1\xe6\xdbM-\x84j$v\xdc\xf1\xd3\x82 ],6N\xe4\x8c\x8e\xc8iFy7%\x16{M\x1bjv\x07s*\x16\xc9\x04|\x15\x9b\xca\xbd\xf4\xa6\xe5\xc7 \xb7\xe88\xe1Y6\xc5\x97\xbfR\xd0\xd2\xf3\xa9\xc0\xd7\xde(\x14\x13\x0e\xcc\x8d\xcbda\xaa\xcb\xf8|\x1eo\xdf@\xdf^ l\xbe2\x17 \x82\xdc\xf1\x18\x9c$YS\xe9\x98\xc1vP\x1b\xf14\xf5\x06\xbci\x18\x06\xc4\xa2\xe7\xcb\x10H\xe1\xfc\x19\xd7[\xf5\xbaY\xf3\x8a.\xd7\xfa\xa4\xea\xd4\xbcQ\xae\xa3\xee\xbb\xdc\xf3& \x9be\xfd\xe7\xf3ZK)\x82\x82JJ=t\x94\x93aS]\xf2\xa4\x1b\xa7\xdc\xb6\x0b\xfcb}\xb1wZ\xb1\\\xc4\xe8\xe3\xa3\xd9\x10\x0f],T*\xf2\x82T\x96\x18Gb\xe3\x9a\xdez\x03\x1ee\xcd\xac\x86\xdf9\xcct1\xdc\xe14^h\x17a\x8dt\xa3^\x07\x85M>:\xa7^l\x13\n\xfe1\xf7yp \xda}\xbe\x0fY\xb1\\\x85\xecZxK*\x7f]\x10\xf9\xc2Y\xf6\xc0%'\xb7\xc8\xf8\xbf\n\xe6X\x85d\xf46\xd5\x92'Y\xd2|\xa3\xd8\xbb\x1e\x9bA<\xcd\x08\xbdb{2\x88\xd0\x0b\xb6\xe7\x9cN\xc7\xbc\xfc\x0e\xec\x91\xc1U\xa6>\x91\x8b\xda\xb2L\xa3\x89l\xfe\xe8Yc;\xaa6\x9a\xf8\xda\x7f\xa3\x15oEhc=i\xc7\xd5\x86)\xf0b\xcd\x06)\xf6\x85\xc4\xbc\x19\xb7\xb7,\x7f\x93\xdd\x16\xb2W\xdc\x97\x11\x9a\xb0z+\xd9\xca\xd0\xea\x11ZN\xca3Mt\xa6\xa1x[\xb6\xf8\x8a\x1chx s9*\xd6\xb9\xe5\xaa\x98i\x93\xf4q\xb5\xdaR\xe7'\x13\xa8\x84\xb1\x1d\xa7\xa7\xac\x81\xc0\xf0\xd8\xc8 H\xcb[\x93\x86\x95\x9c\x04$9\xc4b\x1e\xa1\x01\xf3\xc8\x9c\xb7\x83\x0e[\xab\xebS!\xe6+-\xc6\xf1X\x9a01\x16a\x91\x12<\xa1H\x04\xdd\xda \xae\xf2`E3\xf0\xe4\xbd\xeb\x12M-\xc6N\xdb\xf2,jy\xddn\x02\x1f?\x89\xa3\xe9\x08\\\xbd^\xc2\xd3\x14\\ G\x8c$\x0b\xfc\x90\x83+\x0dz\xf8\x9d\xf4\x82\xd8\xa2V\x17\xfe\xf5\x02\xfcE\x7f0\x80_\x98\xa4\xe27\xf6/\xdeO\xe2\x0c\xa2\xe0U.ja^\xddI\x96\xc5\x91E-\xdf\x8b.\xbd\x14\x1d\xe2>\x1e\xb5|\x1e\xa1\x9dy\xcb\x0f0\x1e\x9e\x81\x83O(~\x07I<\x19\xa3\x13\x8f\xc2[T*.\xf8 \x83\x14!=\xf8\xe1~\x9c\xe0c\xad\xe0\x0e\xf17\xf3\x82\x10\xb2\xeb\xf5!\xab^\x80a\xc1%\xfc\"\x02D\xe6!\x1f\x89\x849P\xa3\x1f\xf0\xb0\x97\xf2\x0c\x9d\x83\xbc\x9c\xfd`0\x81i\x93\xd5\x8f\x11\xb9\x1f\xc7\xa2\xdc}\xb4\x9bl\x0d\x1b\xf0\xb3\x01?\x9b\xf0\xf3\x00~\x1e\xc2\xcf#\xf8\xe1^O~0\xd2PUk\x88\xbel\x04\xc5\x01\xba\x06#\xa0h\x10\x8d'\x19~\xa1\xf4\x17]\x88\x1bz]\xacU\xc8\x07\xa8\x9bY!\xe0\x8f\xbc \xc2\xcf\x18\x7f\x93\x0b\xf1y?\xe1P\xd6\x11\x8f&\xf2\x13dX=\x9cE[\xd4\x8a<\xa0B\x14c\xfb \xad\xe3q\xa6\n\x15\xabJ\xc7\x93L\x14\x04\xa0\xe3\xc0\xcf\x04 \xc6\xf27\x1eH\xc6yoQ+\x01\x9c\x04\x90\x93I\x17\x9a\x1e\x02Ro\x04\xe0Tl\x06\xa1+DS\xa2V:\xf4z\xf1\x158F^\x08\xf9\x0b\x15\x1a\x1cc\xcf\xc72\xa6c\x0f\xa3dIp\xc1\x85#\x8e\x06\xe8\x98\"{\xa6\x93.\xfe\x8aK\xa5\xe0\x82\xcc2|Z\x98Z\x99d\xc1\x0c\x88\x95\xc9\xe5Ft^g\x92\xd33hE\xf8\x0e\xf1G4R\x16\x8c\x10-\xc1\x1f\xcf\x07\x92f\x80\x05\xa4\x9c@Q/=\x08\xbb\x0cz\x1c:\xc1U7\xb1:\x84\xbe\xc3\x1e\x96^B\x01\xb1\x17\x85\xd9 \x9c\x8e\x87\x86\xb3\xc7\xfb\x86O\xb6\x88\x17\x05#/\xe3~\x1c\"\xebJ\xef(\x96\x04\x93\xfe,\xf1\xa2T\xb2\x9a\xea\x8dyo\n\x12\xd1_\xfd0\x18\xa3\x91\x11`\xfe>r>O}d\xf20\x18\xa7\xc8\xbex\x0c?\xe7c(\xae*'~\x13,\xe4\xf0\x82'\x11\xf2\xa37\xe0\xc8l\x91\xfax\xc9 \xf1z\x81\xe83\xc0r\x98\xdc\xc8K/\x04\x7fy\xb2\x83\x8edI\xf2O&\xd2\x1c\xc7\xe1t\x10+\x97L\x19\x92\xf4B#\xe5D\xf2I\x16\x8f\xcd&\xbf\n2\x1f\x92K\xa7\xa3.\xf2-4\xa7\xfc\xc8\x9c\xf0\xe8\x066\x1eV%\x93|\xa4\xda\xeb2\xe0\xc0w\x97X\xc3\x0e\xa1;\xd8p}\xfe<\x14\xfd\xaa\xcf_@[\x1czY\x12\\K\xbf\\\xd4:\xc5V\x10\xe4\x13\xd0TH-\xf0E\x97qx\xc9\x8dh\xbbA\xbf?I\xf9A0\x18fx;\x1fa)\x8e\xe9 r\x0e\xb1\xd3\",\xf3\xa2\x0c\xf1\x10\xf02\x8ccQ\x12\xd0\xd3v\xb4\xeb\xb9v}\xa1]\xc7\xe8\xfa\xc2\x9b\xa4i\xe0E\xcf\xc3\x89(\xdc!O\x06\xe9R\xb2d\x84Bd$ym$J\x86\x93!\xed\xc0\xd2t\x08\xdd\xc7\xea\x7f\x1fQ;\x84\xbe\x16\x03\xaf\xef\xf3q\x86\xc3\xae\xea\xd7a0\x10_\x04O\xb2\xd8\xf7\xc6\x01\x0ci7\\\x01\xe2\xd1\x18\x0f\x13\x0b\xaf\x94\xbfA\x94\x0bb\x04\x87\x1e\x0e\xb4\x9e\x7f\x01\xf2\x1bY\xb8;P\xe2\xa4\x1b'\xa2\x900\x92\x89H>\x0fC \x99hT\xf0\x01]\xa4o\xc8\xfd\x0b\xa4\xa5\x1a\x8eC\x0f%\xbc\x1fr\x14z*]?\xc6\x81\x15>\xa2w\xe1\x8cQ\x01\x85S\x8e\xce~\x1c'=\x84'q\x9a\xcaMK\x1c\xbf\xb9\x14\xb5h\\E\x14@m.\xe6\xa3u\nM\xd0\xcb\x9dK\xc8 C\x12\x90\x9a\xa02O\xbbBj\xf7\xe2\xab(\x8cQ\xa8\xf7\x12o0\x90\x8d\xc9#\x1f\x144te<\xb9\xe0\xd3a \xc6t\xc1\x1e}\xac\xa1~\x1b\xca\x1ar\xc9\xf2\xc3\xa0\xd7\xe3\x11:\x06C\x1c\xbc\x85\xacLx?\xf4\xb0\xf8AO\x8d\xde#\xd1\xe3\x82(\xe3\x83$\xc8\xa0\x89\x82T\x0c\xd3\x17AT\x18\xd0ETI-(\xaf E\x18\xa3\xe4\x0b\x05\x03{\xd7\xe2W\xe8\x9f\xd8\x9dz\x01\x8aYa1\x00\xfaN$~s\x14i`\x14\x9dhB\xde\xc2+o0\xf0\xc3\xf8+\\x\x1b@\x0c\x8dQ|\x95xB\x03\xc0z\x82\"0\x9a\x8c\x8a\xd2\x1b\xc4\xd70\x0e\x05[\x01\xb5\xd3 \x92B|\x1c\xa7bp\x19'\\\x12~<\xe9\xca\xc4A\xb4\xc7J\xc5H\xb8\xd7\x8b\xa3p\x8a\xce\x10\x7f\xc5\xfe\x1b:/\xc5/OR\x01\x88\xb1\x0eI|\x95\xca\x8f\xd4\x0c\xc6<\x0c\x91e\xc1\xe3\xc7\xd8\xa6B\xc3\xc0x\xe9\xd0\x13 \xd1\xa7\xe0\x93\x1azE\xe2K\xd2\xe3\xbe\xa0\x80\x88_!\x13\xd3\x8c\x17\x86\x1e\xadgd^\x17'_\x85\xb1\xc6\x8bR\xa5`\x08\xe6\x9a\xa4\\\xb4\xf7\xa5\xea\xeb\xe2\xe5Nj]\x05=l\x9f\xebQ\x18\xe1\xe6\xce\xb1\x16\x12QV\xd5\xec\xe6\xf9\xfed4\x91\x89B\x87\xcd\x82K\xaeD\x07\x0c \xd5\xae\x97rIz/\xf5\xc5\xb8\xe9eb\xe5\x86\xcb\xa6\xd6~Y,\xef&\x18M0{\x88\xdd\xc7\xad\x9f\xc8\x9fJ?\xa4VM\x87A\x1f\x92\xear\xd1U\xbb\x01\xaa\x19\xa8\xd5\xe5\x02!\x18\xcbOU\x8e\xbb\xe8N&B\x13\xc9\xe5D\x9cT\xa1\x17$\xe38\xf4\x94\xd2\xbf\x08\xad\n\xc5$\xd5\xa1\xe3$\xee\x07yZ\xd5\x84\x83\x94\x95b\nH\x8fe\xc6\xbe\x0d>T\xf5zb\xc4\xc5\xc5\x16/\x92RD\xeb\x9e=\x1c{\x05\xdee\x90\x8a\x99\x02\x8e\x97\xbc7\xe0\xb2\xc3\xf2\x90_\xaabJ} @\xfd\x14>\xd5\x18$%vf\xf4\xca\xca\xe6:\x15:&Q\x80CU\x1f\x86\xf1\xaa\xa2\x84\xf0\x19 \xc4QV\xed{\xa3 \xd4>\xc9\xa7\xda]\xf5z\xef&i\xa6AY\xc2\x85\xf2#\xbd\x82/\xd1\x83{\xcb\x91F\xbdR<\xd4GU\x04r\x18\xc0\x04e\xb0\xa1\xd4\xbc\xaad\x0fC\xe7S\xca\x97*\xbf\xf2\x9b\xbag.\x0bE\x1c!\xf0@I,4\x10\xb2M\x10An\xd07/ \xef\x0b\xf4\xc1\xe4\xe8\x02&G\xa0~ \xe4\x0b>\x1d\x83\xf2\x91\nw:\x06&\x94\x1e\x18!RCH\xa2h\xd3d 9H\xa5j>~A\xa2<\x1c)\x1dLx\xa1>Z&\x86R\x9f\xd1\xed\x12\xc6\xbe\x17ZJ\x93\xad\x8a6\x97\x9eQ`x\x94\x94\x10^M\x08\xe1U4\x13>\xd5\xc1A)\x96\x13\xd7\x1c!\xbd\xc8\xdd\xd7\x96\xa19\x97\xe5\xb9`H!\xd6\x95\xdc\x9e\x8cb?\xf3.\x91&\xb1R\xde\xc4\x15j\xacM\xce_j\xe0\x8f\x13\xa9P\x0b\x87\xe2m=\x0e\x83\xde\xd2\x17\x83\xcc\xd8\x0b\xa2\xac\xaa\"\x1a\xea\xbb\xa6\x9e\x1c\x06Ju\x92P\x93O$Hc\xa8\xf6U\x87\x1a\xbdp<\xf4L\x7f:\xe6~\x86\x17\xc1\x11\x1a\x8cP\xda\xa9\xf8P\x9e\x04\x88\x85\xf2\x17\xf8r\x82`\x8e\xfc\x9d\xf0\xbe\x18H\xc6\xdc\xcb\xfcx\"\xe7\x0f\xe0\x13\xfd;\xe1\xaa\xf1\x12\x9e\n\xf5\"\x893!XS\xdf\x13\xe2\x9d\xe7cF\x81\x97S\xa9 \x1bRE\x81\xf8\xb5\x98\x17 \x08\x864\xddx\x98\x9fn\xa04\xeb\xf5\xf8e\xa0h\x9ff0\x89\xc9\x82P\x0cGY<\xd6\xdc\x88\x9e\xbc\x11a\xca{\xc1\xab=/\x1dJ\xb3n&\xc8H\x1fa\xd0o|o\\\x04\xbc\x8b\x83(\x87\x8c\x82\x8c'\xf8\xc6Q\x0e+g\x97\x87(>\xce\x87\xc0\x04t$E2s\x1c\xc4\xfd\xd7\xdc5Uc\xa2\xe4\x07P\x87\xab\xe2\x98\xa6\xf2\xc9\x05\x1bA\x12\x84\x98T\x07\x80f;5\xa2\x82\x18\x99\x80\x18\x99D\x81\\(\xc215\x95\xd3\xban|\x8d\xae4\xe8\x06\xa1\xa8\x92<3'\\Y\xd5\xeb]V\xa7\xca#\xfa@\xf5\xba\xe4\x9f\x1aC\xf4U\x9c\xf4\x0c\xf9\"\xd5\xa3\xab$@\x19\"\xbb\xe8\xb5?\xf4\xa2\x88\x87B\xf5\xc0\x1aN\x17A\x90\xcd5\xd4\xe0zC\x8f\xfd\xd4\x82\xcc\xa6\x00\x9d\x02\xf4\x06\xfe\xc5\xf1\xc8\x8bz\xa0\xa4t\x08}e\xa8\x06B'\xc0\x8e'\xba\xa8R,\xba\xfc\x92\x87BKV\xb3-?\x0e'\xa3(U\x18\xc2\xab\x04\xab\x0c\x14zP\x8fG\xf1H\xe1\xf5\xf8X,\x1f(\xed[\x8f\x98\xe8R\x8c\xa0_\xe4\x81\xe9_$\xb4\xe6D\x88\xa8\xa5#D\x08L!\xd4\xd9\\\x10G<\x1b\x06\xfeE$\xd6\x90B5;\x0b\xd5\x12\"L!\x0b\xd3\x1a\x00\xa8\x8e\x02n9^\x823\x1f\xffF\xde\xb5\x82\x07\x91r\xc5\x97\xa0\xfb#\xdf\xa7\xa8\xe7j9\x18Mt\xdd\xa5\xd2\x9b\xc4W\n\x92\xc4W\x8adB\xeb\x94l\x90\xab\xa0\x89*u\xa2J-\xa6\xaa!\xb4\x88\xf6\xe5%\x91\x13\xd9\xe0\x86K\xe5<\x10K]<4\x96\xc8\xc6\x9e\x12\xe7\xda-\x04\x05\x8e\xffb\xa5\xab+S\x92\xaaZ:\x19\x97\x00\xd3\xd1\x88gI\x00\x1a\xed\xa5\x16\x14\x0b\x9a\xe7\x01\xb2\xd7u\x18D\x17M\xd9`\xd7\xa3\xb0\x89\x8d&\xa0J\xc3\x05\xb0\xaa,Fob8$r\xc8\x02g\xfd\xec\xf6\xec\xb6}\x96\x9e\x9dt\xee\xcf\xe4\xf7l~6_\x1f\x8c\x08\xdd\x05\x84\xad\xbfS\n\xfe;\xcf0\xf0%\x04\xfe\xac\xe7e^\xb5}V=\xbb\xaa\x9dM\xea\xf5\xe7\x8f\xabg\x93\x97/_\xbe\xec\xac\x13z\x83\x18\xd0\xc2\x02\xa3\xe3\xde['\xf4\x0dB\x9d\xed\xa6\xf8\xeb\xcf\x86\x19\xc9\xc6\xe9\xf6l\xe4\x05a\x16\xcf2\x1e\xce|/\x04\xa7\x1f\xf4f\xd7\xa3\xf1\x984g\xed\x9fy\xd5\x9b\xce\xac\xedUo\xdc\xdaY\xb5\xe3:\xdbM\x84\x81\xaf\xd9\x99\xdd#d= \xf4\xb9J\xfc\xec\xca\x15\x84\x9dA I\x13\x02\xefA`\x1b\x8aY\xafW\xe1\xb3Q\x87\xdf\x9d\xfa\xd9\xa4\xf1\xe8 \xfc>\xa9\xef\x9dM6D\xf0F}\xe3)\xfc>\xec\x9fM6\xeb\xf5zg}@\xe8[f\xa9%\xfe|\xbf\xe0\x04\xd7\xb4l[-n\x95\x02j \xbb\x81\x19\xb6\x97l\xfa\xa9C\xeb\xf3\xe6\xb2\x1dA\xdb\xbe#;\x9e\xefN\xc6 cL\xc3\xd7\x94;\xdf<\xdaVek\xea\x0c\xf3\xed\xa2\xf7\xff\xefn\x10^\xa2\xc9\x1cc_H`\x19\xbb\xb3\xba\xaaWA\xd4\x8b\xaf\xb6\xa3I\x186\x85{N\xbf*m\x8f\x16.\xb51\xe3N\xca\xb6\x91b\xf3-\xd4g6\xcb\xc9i\\\xbe\xf2\x13\xeee\xfcu\x1c\x06\xfeT\xdfZ\x99\x84aK\xde\x96\xc0c]5\x7f\x92$<\xcaN\x90\xab\xf0\xad\\\x13P\x1bz\xe9\x8e\x9a\xb2\x89S\x1a\xd5,\xab\x8e1\xd1j:\xe9\xf7\x83k4b\x1b\xb1r\xcc\x01\xcf>\x1dSl\xa7&\xcc\xea\xc5\xa31n\xbd[\xae\x13m[\xdf\xb7\xdc\xa8iY\x04\x8f\x8d\xe9\xddh\xb3FNBo\x85\xff\xcb\xd3\xc3\x83\xa5l6\x9f\x93\xfc\xb0\x98\x04\x16O?\x9d&\x934\xe3\xbd\xd3\xe9\x98\xa7\x15Q\xb4\x8a\xe5&\xaeU\xf1\xf5\xa9\xaf.\xaf\x88|z5K\xbc\xe29\x9f\x97OXT\xb8#\xb6\xc5\x16\xf7\x00\x9f\xd5m[_\xea\xca\xf7\xfc\xea\x9dm\xd3\xd3\xfc\xd2!4b\xe6\xae\xa6\xaa\x85\x93\x11\xbc\x98\x10\xe5\xd7\xed6j\xf5Zc\xc3\xa2Q-\xe1\xa3\xf8\x12\x9f\xe4\xa2k\xd9l\xb6\x96\xd5z\xb1\x8f\xa9\xcefO\xf1\\\x8a\xf2\xd7\xa2\xb8\xc7\xa1\xa2\x9a\x15jAz\xa2nR\xb0\xb5\x06\x8d\xe4U\x83<\x0e\x9e&\xa1\xa9 YV\xdb\x95\x9e\x97\x897@\xe0\x11\xcbj\xd0\n\xea\x14\xf5\x9e\xd8\xc4\xa2{,\xab\xbd\x8a{\x9c~-\x1d/qFJ\xbf\x00\xaf7\xe2=\x80\x1dzc\xfac\xa6\xf9\xfb\x8b\xedb\xd8l\x96\xd5\x0e\xe3\x1b\x04\x01?\x1dz\xe3\xe6\x17\xf4',\xab\x9d\xf2\xeb\x8c\xfe\x88e\xb5\x17\xf1\x08\xb3\xfb!\x94\xed\xe8\xf0\xb5\x97\xa4<\xa1?eY-3\xda\x17\xf7D\x17\xc5\xce\x91h8\xceY*\xf9K\x96\xde\xc9wiH\x8bse\xfd\xca\xb6sw-\xbe\x8ax\xa2\xc8a\xdbN\xcaV\x05\n\xf9\x90q\xf6\x95\xf3S\x1a\x10\x1aq\x96q\xdb~\xc5\xb73\xc5\xd7@A\xb4-oY4\xe1,\xa51g \xaf\xe1\xfb\xa5#5W\xa2\x01\x02E\x0c \xd1\xbe\x94\xc2\xd4\xc3\x80\x01\xcfd\xf9\xd3\xe7\xd3So\x00t\xa3\xa9\x11g\xa1\xf1B\xce\x02\xc8$N2l+\x9f\xb3\xdby\xab\xc8\x1d17\x9886\x0b\x9cW\x1e\xd8-\xd5\x8cr\x18\xf7\xb8x\xb4\x9a\xb3C:\xe6l\x97\xf69{I{\x9c\xdd\xd0!g\xcf\xe9\x88\xb3{t\xc0\xd9\x1b:\xe5\xe2\xa8\xe9%g\xe7\xce\xed\x9c\xb6\xf5Q\x8f\xf7\xce)\xa1\xef\x9dw\xf0\xb3\x03?/\xe0g\x9f\x10B\xbb2\xd2\xf5\x92H\xaf\x01\xeb\x18~^\xc1\xcf\x01\xe0_I\xfc\x0b\xf9=\xe2l\xadN\xf7\xf0\xf7\x9c\x03\x9f\x9f\xe0\xef)\xfe\xbe\xc3\xdf\x1d\xfc}\x81\xbf\xfb\xf8\xfb\x1a\x7f\x8f\xf1\xf7\x15\xfe\x1e`\n\x87\xf8\xbb\x8b\x90\x97x%\xeeF\x95\xcb\xc2K\x95bU\xe9\x1awV\xf5\x8eY\xbe\x9f,7\xc6\xfaq\xc2\x83A\xa4^8T\x1b\xb5\x81\xd2f\xd56\x06\xeeK\xe0\xfa*n=\xe0\xec]\xee\x06D1\x1fu\xc5\xe2j\x8c\xd1R\xb1.\x1aD\x12A\xe8\x0f\xe64\xearP\xda\x92\xd4[\x8fB\xd7R[U\xd7\xa31\xe8Wo$\x05\x9f\xe75\x94\x15R\x88b\xdbXo\xa1\xaa];\xb1}\xd9!\xf4\x9eL\xe1m\x9e\x02\xce\x82\xd5j\x9eX\xf2\x0e\xccei\xb9\xe2\xb0j\xe1\xd7X\x0dU\x85\x96\xab\x9b\xaa\x96Z\xc7|/3\xffrI\x8f\xc7\xe9!\xa1_\xf1\xc2A\xa6\xf7\xdc\xb6\xdf\xa3\xf1\xd8\xd9\xcc)\xbcW\xfd\xa9qY^\xce\x9crf\xed\x1c\x1c\x1c\xbd\xdd\xdb=?\xdd\xf9\xe2\xc4\n\xa2\n\xdf\xc6\xaa\xf3\x9a\x19@\x9a\x97\x1c8[c\xef\x9c\x9e\x1e/\xc5\x86\x00\xd2\xbc\xe6@Kkgw\xf7\xfc\xcd\xf1\xfe\xf9\xc9\xce\xcb\xbdB\x94\x13\xe7-\xda\x17Y@ \xcd\xb7\x1c\x1a\x12\xa3\xee\xee\x9c\xee`\xb0Y\xb6\x13\xe7\xb9\x8eZ@ \xcd\xe7\x1cz\x93\xf5\xf2\xe8\xf8\xf9\xfe\x92\n\x19p\xd2\xbc\x9dC\x8fS\xb8\x0b\xd51\xe0\x88\xfb\x923\xeb\xcd\xc9\xde\xf9\xeb\xe3\xa3\x97\xfb\x07{\"a\xd0 M \xf6\xdd\x06\xde\x91Fr\x9c\xef\x1c\xef\xef`\x1a\xd8\x9f\xcd\x10,9\x86\x9cs\x0d|\xf3\xeaG\xaf\x8e\xde\xbe\x82\xf4N\x8f^\x1c\x1d\x9c\xccf\xa2\xfb\xf3\x1a\x12\xe8\xe5\xd1\xf1\xf9\x0f\x7f\xfcf\xef\xf8k\x0c8-\x04\x9c\xee\x1d\xbe>\xd89\xdd\x13\x91\xdeA\xd8\xdb/\x8f\x0e\xf6\xcew\x8f^\xbc9\xdc{u\x8a\xf0}\x80\x1f\xef\x9d\xbe9~u\xbe{t\x88\xb0\xd7E\xd8\xf9\xcb\xe3\x9d/t\x84\xe3R\xe0\xfe\xe1\xeb\xa3c\x11\xf4\xca\x08:=~sr\n\xcc\xf2\xf5\xeb=\x0c|\x01\x81/\x8f\x8e_\xec\x9d??\xda\x15\x05>\xd0D8\xd9y\xb5\x7f\xba\xffS(\xdc!\xca(\x01\xfe\xd1\xde\xde\xeb\xf3\x17G\xafN\xf7^\x9d\x82\xd0\xe2\xb5\xfdW\xe7\xaf\x0fv^\x884\x07\x9aT{\x82m\x8e\xf7\xbe\xd8\xfb\xc9\xeb\xd9l\xc0\xe9)\xb7mgO\xbc\xc7\xfd\x1a\xdc\xfb\xe2\xb1\xe8\x97\xe0\x9e.\x91\xc5JX\x83\x86\x02\xfd\xe4%\xaf\x0d\xb3Qh\xdb\xce\xb93\xe5\xf4\x94\xd0s\xa7\xcb\xe9kBtxz9P\xc1\xefd\xf0\xb1\xfc\x1e\x14\xd1\x84>\x91*\xec\x9d;\xb0At\x1e\xeal_H\x8cW9\xa6bv\xe0[Q\x17\xc6.e\xadN\x9c)'\x80:\xe5\x06\x96\x8e\x02\x0cf\xdbN\x17\xa2\\s\xe1:q\xba\"J\x97\x1bXdio\xb4\xeds\xe7\x1e_\xdaO\xe9\xa1(\x82\xde\xc3Ej\xbf\xe3\x10e\xcai[\x9d\xd6\x91\"\x1b\x0f\x99t@\xe2\xd4p\xb3X\xd5\xb7-\xcf\x9f\xe4V\x99\xaex-\x13\x16\x85b\xdb\x8e\x1d\x8e\x82\x91\x939\xfd\xba(\xfcz\x8e\xd62\xe9\xad<\x9d\xd4\xe4s\xa1\x99\xf3\xda\xd8\x03\x95\x1f\x14\x07\x89\xf5b\x18\x84=G\xdf\xed\xcf\xc8-\xaf\xc5\x93\x8c'\xa0-\xb0\x88\xcf\xe7\xf4\x0b^\x9a\xeb@R\x85|\xf4.Q\xb38\x8f\x80|\xa0\xa80\xe7jf\xa6z\xbf\":Jz\x8d\x9dI\x94|^\x02\x15\xfeq\xb1\xc2B\x8d\x17r\x9dF\xea\x84[\xd0w^p\xc2\x99\xb5%\x92x\xb6\xb5.\x1d\x96\xcb\xc5\xfb(b&3p8]\xffY\xfb,9\x8b\xce\xb2J\xc7]'\xad\x88%\xb6\x9d\xb4\xeb\x9d\xb98\xb6\x97\x95\x95>N\x9a\x1c\xe9\x991\xbc\x81\xf2C\"\xae\xc9\xbcL\xe2\x91\xb4_\x11\x8b5\xc8uln\xa3\xdeh|\x01\x98\xe1\n\x1b\x19\x07\xbf\x0e)O\x06\xe4\x00\xa7\x8e\x08:\xd9r%\xce\xc1\xe7\x8e\x80+Z\xc1\xaa\x96-\x04\xf4\x83$U\x89c0\xa1\x81\xd1\xda\xf1<\x9f\xf1\xe3uiH\xba\x16D)O\xb2\xe7\x1c\x94\x1dG\x0d\xc1\xa0\xccc\xebF\x84J<\x1f\x12\x04\x18L\x90\x84u\x13B=\x8e\x97\xe4\x9c\x8c\xbe\xe3\xdb\x82\xf9\x9b\x82\xeb \x10\xb8\xa8\xb7\xda\xb61\x1d\x07\xfa\x8a\xe3\xd9?\xe6\x8e\xb5u\xbd\xfel\x0b\xc9\xf5\xcc\x0e\xb3\xd6::\xedA\xd6\x02_0\x1a\x80\xd3\"\xadkg}\xebL\x04\xaeS^\xc3W\xc3O\xe4\"\xaa#\xc9MjA\x14\x89\x1a\xc3L\xd8\x83\x1ej4\xd0\xdc\x11\x93\xdc\x9f\xf0e\xa7\xa3\x03Y\x1f^\x9c.\xccf\x9cr\xfau\xed\xe4\xcb\xa3\xb7\xe7{\x07{8NH\xef\x8b\xa3C\xd3{\xba\xf7\x93S\xba\xe4\x82\xfe\xd7\xb5\x97\xfb\x07\xa7{\xc7\xe7;/^\xec\xbd>\x9d\x13\xba\xd6 s\xfa\xa3e\xc5Xsx%\xc0\xfd\x04\x1f\xe6D?\x99\xcd\n\xfe\x1f\xcdfK\xec\x11\xc0\x84\xf2\x950\x1f\xbf\x18\x08\xcc\xfaB\xcd\x98\x96L\xbb\nL\x05\x03\xbc\xee\xb3\xa9\x99\xf3\x8f\xef\x8c\xac\xfb\xf1\n\xac\xd4\x10\x1dKK Z%\xae\"\xbe9\xde's\xfa\xc3e\xb4Y\xaa\xed\xed\x95\xb4\xbd=B\xb6\x0b$\xdbk~\x0bE\xd1\xb6\xadh2\xea\xf2\xa4L\xdeS|j\xe5\x0e\xda\xcf\xe9O\x8b\xc2\x94&\xe4\xd6\xe7m\xde\xb1m\xdfAG\xf1R\x8dd\xb7\x080\xe9{q\x03\x86\xf2l\xa5\x04\x04\xc1\xf7S\xeeX]\xec\xae'h\xe3\xf2F)\xcc\xa9E\xe5\xa1d\xfa#\x90\xa5ji\xe1k\x14\xd2ku\xb9\xb83r\xf2\x02\x13\x95\xe0d\x1cG\xa5\xe4 \xb5\xdbL\xccY\x9b \xc5\x07\xf9y\xef\xd4\x1b\xa4\xcd)\x9f\x13\xea\xe0T\x851\x96\xccfb*\x04nb\xdb\xc2^N\xa1s\xee\x84\xa1c\x8di\xa5\x9bX\xa4x7'/]\xd0w\xd6\xa6\xbc\x9dtf\xb3+4\xc5\x81&\xc4\xb9m\xaf\xdd\x08\xa3\x1fK\x99J\x88\xaf\x9d\xde;\xcf\xe7Q\x86\xbd^\x89\x96\x18\x8d\xf2HY\xd0Z\x86\xeaX;\xfd\x8c'{Q\xcf\xa2\x0b\xc3@L\x9a\xb1)9J\xe5\x95~+\x8a\xe5\x14\x0ejo\xdbBD)\xe0z@\x8d2\x90\xd9LO\x08\x8b\xd8\x08+!o;*+\xd2t\xd6N\xf8l\xb6D\xc2\x030_\n\xd1\x8b\x1dK\xf0\xd6 \xaf\xf5\x01-\x08\x03\xbc\xe5\xbeT\xa5\xa8\xf9a\x1c\x89\x11\x9e\xa0\x852]\xb0m\xc3\xcd\x84\x11/\xe9\xa3\x98\x81\x052\xdb\"\xcd2\x9a\x91m\x01\x91\xa0\x16\xbb)^\x03\xd1\xbd\xcc\xc9X1J\xc6\xa6NF'\x9cZ\x15\x8bH\xdfX\xfa\n\x98\xc2\xf4\xc4\xe7V\xcb\x88\xc82B(t\x06\x0f\x98bu\xe7B\xc1\x9de\x0b\xd7t\x82\xbes\x00%\x87\xa92c,\x83\xd6\x86y2\xb8qQ\x16\x0dl\xcff\xf8\xfdR\xf7O\xf1\x9a\xdd\x1e\x07n\xe8\x83\x02F\xf4\x13\x14G\x08\xec\xe5@4}\xd4\xe5\xed\xac3\x9b]\xc0\xa7\x90\xc6=\x84\xe8\xd8\xd7\xce\x80\xd3\xa9\x13\xd1\x11\x17O\x8d\xe9\x10<\xcc$\xe8dn\xefH\x88v\xc38\xa3y\x9b\xcff\xd0\xb1/\x9dH\x1c\xafoZd6[{\x032\x8d\x04}\xe7\x1c:\xea\xb53\\\x91c\xa4\x0b*\xfb\xcdZ}N\xa3\xd5\x82\x8e\xc6\xca\x11(\x87\xa7\x1c\xa9\x12\x86\x8b\x92P\x8f/ys\xa1\xd4\x0b\x999\xa4\x01\xad\xf4\x0b:\xa8\x9e\xa2\x8c\xb3,\n\xee\xaf\xd0\xae\xbfe\xd1\x0b\xce\xc7\x90`s\xad\xae\xa4_\x9e~\xb3\xcb\x85\x01\x8b\x94\x85\xfa\xca\x9e\xbe\xf7\xd1c\x19\x0b\xdbi\x87\x0eXO\xd8\xfa\xbc\x94\x0e5\xbe\xa1q\x1b\xd6u2\xf1\x90\x15\xa1\x01\x1b9\x03B\xfd\x9a*\x0f\x0b\xa4\x07\x0b\xc4b\xea\xd7T\x89\xd8Z\x9d\xfa\xb5~\x9c\xf8\xfcG\n$\x89S\x16\xe6\xba\xc4@\x10\x9f\xd0\x98\x19\x89\xd2\xb5R*b\xa3Cqm`\xdb\xd6\xfe\xe1\x17\x96\xee\x9aB\xbf\x08kA\x8fx\x0c>4dC'\xa4\xed\x0e\xa1_pd|\xca\xd19\x80\xef\xc4 \xa9G\x9e\x89\xe7\xe7\x0b\xfb\x0f\x80\xe8\xc9\x9ak\xc6\xb6\xf6_\xbd~sZ\xceM\xec\xef\xcb\xd2\xa8\x87\xd0b\xdb\xce\xa9\x813\xbcv\xd0\x99\xcd\xd6.\xe0K\x08\x88\xc1 \x9a\xf0\x96\xec\x8a\x83\x85\x12\x0c\x80?UA\xc5\xbb\x06*9\xe0\xe6\x13\xecx\xebg\xeb\xcf\xd6\x03\x1a\x13\"\x11\x8d\xae\xb5\x9e^\x0ef0\xea\xa1\xd4.h.\x10\xf5\xca\xb1\xb6\xd6\x1d\xcb\x1d;\x89s\xc3 \xb5f\x16q-\x82\x179H9\xc5[\x9c\xc6\xc7l\xea\xc4Z\xc0 \x9f\x14p\x82\x89/\x0c\xba\x14\x8d@\x033e\x99sA\xb1\xb08\xfem\x17+\xfc\xea\xc4\xb9\xa4\x03\xf1\x88e\x89\x101\xa1\xfd\\V\x16t\xe5\xf9|A\x1c.\xe9a\xf39M\xf2\x9e\x8c[$\xf2R\x92\xe4\xc9\x84\xfd\x04\x80\xd8]\x16\xfb\xec ^\xf6\xd8=:D\xbb\xcb\xd8e#\x96\xd4\"5\x05!-Rfj\x11E\x9c[\x8f\xa4T\xe6\x99\x13\xc1p\x16\xa9A\xd0\xd4\xffB\xdb\xe6y\x08\xa1\x11 \x93\xd6B\xed\x16\xcb\xa27\x97\"i\x89\xfc\xa6\xa0\xe1\xe9\xab\xd3\xab\x84\x14\xf5\x95cb\xe8p\xc2R\x9cuv\xbd\xe9\xafU\xabg\xd7\x9b\xdc\xca\xad\x9a\xe4\x9b\x86\xb6\xbd\xf6C\xd4\xe4n\x0b\xbb%\xc6\xae\xa2\xb2\xa8(\xef\xec_8\x96\x82\xe4\x16\xbdu<\xd2Zb\x17\xd2\xe1\x8c\x1b\x86\x19I\x9eR/H\xb2i\x9e\x8c\x88G+^7N\xf0\xd0?\xf6\x9b\xb5\xc2\x14\xaf\xb0Q\xca\x18{\xebd\x98\xb6\x97\x05\xbe\xd2\x80\x16\xb5\xb8\x12\xce\xed\xb2\xebr<7\xa6f\";B\x85\xfd\xa1\xa9\xef\x961\xf2)0\xc9\xef\xd0\x05}g\x87\xcff_q'!\xc5\x9d\xbb\xc5\xacm\xdb\xd9\x15kl\xbb\x86\x0c(N0H\x03\xa6\x15\x1esb\x9c\xd0\x16Z\x96\x14g\x93\xc6\xf6\x8e\xc3A\xbd#\xe6\xec\xe2\xf9\xd1\xee\xd7@:O\xf7\xf5\xd9\xcc\x82\xc2\x17\x81\xdb1\xf3\x9aq\xcd\x1b\x8fy\xd4\x13k\x01\x9e\xa1#\xec\x03\xef\x80XY{\xc7m\xbb\xda\x90\x16*\xa5\x1d\xae-\xc36\xdd\xb2m/\\\x01\x81dDm8\xd1\xe8\xfb\\\xec\x93G|\x1e\xdb\xf6\x0bn\xdb_s'\x16\xfa\xa6Xr\xd0\x17\"\xc7\xd0\xebw\xf96o\xc6\xa4\x95\xb2q\xa1G\x83\xba\x97\x1a\xd5N\x19c\xfel\xc63'\x85N\x9c\xae\xe8\xc4I\x96\x07a/N \xf5Y\x8a<\xe0\x8b\x8d\x84]\xcd)X\x85}q\xea\xe05G\xc3b\x13\x96\xca)W\\\xda\x10l\x99\x95h\x91I\x81\xb2\xc5\n\"\x03LX\xac$\xc310\xc8\x84\x852\xe5\x80N\xb0Q\xe9\x04\x17\x98\xfa\xec\x1d\xdf\x8es\x1el\xc6\xc6\xa4D\xa6\x80\xf2\xbf\xcf\xa6N_\xcb\x7f\xe1S\xf2\x9f.m\xa6>i\xf6\xe74\x02\x81\xfe\"\x8e\xfa\xc1\xa0\xa0N}\x85\xb3\x87\x1d\xceP\xd5\xaa\xe1%\x8d2\x1a\xb9U\xfb/\xb8\xb9\x06xA\xfa\x95\x17\x06\xb9\xa6\xb3\xa0\xe6\xbe\x17\xdd\xe6vN\xf2 %\x8cW#\x10\xf1\x8a\xab2'\x11o\xc3P\xb4\xad\xf8e\x1c_\x94V\x19\x97\xc9\x01\xdb\x16\x93d\x86\xbfh\xd9\xbe'\xa7\xcd\x19\xc1\xb4D?-%\xa7\xe7\xd8}\x81\\\xc2L\x97\xa1\xca\x8c\xda&\xf2N\x18\x96\xf0\x01\x9d\xdd\xce\xe74\x9a;\x04\xfe\x16l' Z\xdf[\xbf\xbf\xf6\xbdJ\xe5E<\x9e&\xc1`\x98\xa1\xe1\x84\x8dz\xe3q\xe5\x87\xbcWy\xebei\x1c\xd5\xbeWQ&\x0fL[ \x87\xfb\xa7\xda\x12\x82s\xb8\x7fJh%\xe5\xfc{\x95\xca0\xcb\xc6\xcd\xf5\xf5w\xbcw%\xe2K\x0b A\xbc\x8e;s\xa8s|\xef\xfe\xfa\x9aQ\xda\x05\xeb\x07\x11\xbb\x9d\x97,\x1f\xe4Grb\xe3\xba4n d\xac\xde\xca\x16MQd\xca\xa2^b\x1c\x99\xc8\xf0Zs\xa2\x161e\x13&\xc5\xbb\xce,\x80I\x90ZLa\x01\x11w\xe5\x9d$\x17\xa3\xc5\xf3@ \xb1mu\x8fZ]\x90\x8e\xa5\xe5\x01\xe4\xd3\x84\xb4<\xd0\xe60\x19/\xb7\xb6g\x0c:\x01)\x98\xfbOH$:fBSH\xbd\x9dvt\x02)1\x8c\xed\x0b\xbb\xde\x15\xcb0#\xb4\xed\xc4\xdaN[Ls\x83\x131i\xea\x15$'YO\xe1\xb3\xb1\xd1\x10\x9f\x8d\xa5\x85y\xf4\x18q\xeb\x0f\xf0\xd3\x10 <\x16\xbe'u\xf1i(\x11\x109\x9b\x0fI\xcb\xa8bM\xda\x99Y\xd1a \x02\xc8\x8c\xc8y\xbc S\x9f\xa4\xf6\x96{\x17\x87\xde\xd8Hc\x89\x80\x08l{=\xf2\xb2\xe0\x92\xa3\x19\xa2u\xb4V\xe0\xc4N@>E&\x95\xeb\xa3'\"\xdbF}\xb3P\xde\xed\xdb\xb9V\x82\x9a\x0b\xcdi\xb5\xa5\x11a\xcb\x8d\xd1\xb6\nq\xad\x8e\xb5\xc4\x92\x8a\xca\x06\xe8\x04\xd9<\xd8\x80\xda-\xaeb\x1a\x06\x13T\xb4\x80z4ej\x7f\xc1\xc9\x08\xa1!K\x9c\x08\x078\xd5\x13e\xecp\xab>\x9b\x85\xcf\x98\xbf\xcd\xb7-K\xb2b\xd3 XZ\xf3\x87 \xe5{|'sBB\xb6\x1e>\xdcx\xfah6\x0b\x9e=|\xb4\xd9x:\x9b\x85nC\x8c\xb4\x8eWBv\x1b\x80\xfehs\xa3>\x9by\xcf\x1e>\xde|\xb0\xb9\xcd\xb7\x05\x0e&\xd6\x0c\x9a\xe0G\x8b\x16NHCw\x834\xbd*\xc6p\x9d\xa0\x8a9mm5\xea\xc4}\xf4\xf0\xe1\xe6\xa3\xf9\xdc\xa0\xef\xad\x8f\xb94\x03\x07\xb4(\x91$x\xea\xe4\x0e\"n\xc8\xb6z\xfc\x04\x88\x189\xc0u\x1e\xb4\xdd\xd3B\xd39\x96\xb4\xaabQ+\xbe\x8a~\xc4\xa7\xa9Ef\xb3\xc5\x95\x85\xb8\xd6w<\xb4\xb8\x1c\xb1\xa0\xd6\xd7\x8a\xfdv\xa6\xf6G\x01\x99\xe0\xcbO+\xb9V6\xec\xe6#Q\xa6\x06t\x13\xefS-L=\x91B\x8aM\x9aA\x93\xc6\x8eZ6 t\xc2\x02\xc7\xa3>j1\xdc\xb6\xa35\x16\xc9\x97\xb5\xfcg\x93\x16\xccG\x9d\x94\x85\xed\x89\xebv\xc8\x1aK\x89^AA\xe1\xa7\x11'\xc2\x98\x11L.\xf0\x85\xeb\x90\xd8v\xd8\x9et\x18c\x91\xd6\x89f\xb3\xc9lVW\xc6\x8dP7,\xb6T\x10\xf9\xe1\xa4\xc7\xd3\xa6\x07\xcdC\xa5\xce\x08\xbe\xc6]\x8d%8\xfe\xd0\xcb\x86\xb5\x91wM\x03\xe9\x0c\xa2\xd6\x9d\xe6\x93X\xe2\xe4\xb6\xc3\xa2\xad\xfav\xecDnF\xeb\xa4\x198\x11\xcd\x96\xe5\xb8\xb4_7\xea\x8fIM\x1d\xbe\xd2\xe6|\xb0\xa9\x1e>\x10M\xf5@\xb2\xcf\xc6SBA\xb8>x\x00=lQtC\xff\x9e\xaf(\xb5\xaa\xb1\xcf2\xd7\xaa\xa8\xfc\xac\x96\x1eC\xf4YX\x16; \xbd\x05\x95\xb7\x198\x0da\xb1\xc7\xc3\xf7\x89\xd7\x1a\xa0\x1e\xd2\xb4\xedwXH\xf9\x1d4}b\xf2\xf9ZR\xb0S\xa8\x07q\xee\xe4k\xd3F\xfe\x85c\xbb\xe2\x88\x950S4(\x98;\xc2\x0dNNp\xc5^\xc7\x9d/\x13\xa7\x9a\xd2J\x82\xaa\x1e\xf0T\x90\xf5\xc9FQ\xa0\xca\xec\xc4\xd6\x8a\xd4=\x02\x9e6\x8bL\x10@\xf3k\x8b14a\x1et\x8fT\xdbR\xa1!\xab\xb7\xd2ga\x8b@\xef\xe54bI;t\xdd\x0eE[]\x9a\xeew\x10\xb1 ,\xcc~\x8a/5:\x9c\xe4\xa6\xc5\xe5\xd4W\x1b\xbbq\xac\x17^\xf4\x83\xac\x92r\x90\xfcR4s\xe2Z\x15/\xadx\x15M/keA\xc8\xad\xd1\xb3^\x9c\x9c\x1cOB~\x10\xa4Y\xb3N_\x9c\x9c\x9cd\xd3\x90\xefr?\xf4\xc4U\x17\x01\xc5\x959\x85\x14\x06<\xca\x8e\xb9\x9fI\xc0\xee\xd1a\xd1'J\x95\xfbO\xe3\x0b\x1e\xa1\xb7Aw\xbd\xccSV \xf63>\x92X/\x03]\x08\x98F\xec\x84\xe1\x8b8\x94W\x0c$l\x01\xf02NFr%\\B\xc4\xd6N\x0e;\xe4\xbd\xc0\x93\xc9\x1e\x06#\x9c\xd7\xa1N\xd7\xacS\xf3\x04)x\xe3\x1e\x97E|\xed\x05P?\xb40*#\xbf\x0e'\x83 \xd2\x0e\x95\xc6\xc9W_\x1c KH\xb4\x93\xaf\xbex\x85\x8ae\xee\x7f\xede\xc3\x13>0\x00\xc2l\x81\xf2\x16hu\xf2\xd5\x17\xa7\xea\x0e\x92\x02\xe1\x11\xb9\xe7\x93~?O\x15\x9a\xe8d\xc8\xb9J\xe6\x94_g\xa7\x89\xe7_\xbc\xd0\x8d\xa4A\xca\x1fO|Y\xca\xcf\x15_jXi46\xa4\xb0z z\xd5\xe6\x86\x10V\x8f\x1f\x124\x15\x96\xf2\x8c\xfa\xcc\x83^\x9c\xf1\xe4%\xf0(\x12(\x97E&\xbb\xa7B\xbb\xa6\x02\xc7*Z\xf4&\xb7\xa1\xb0\x13w\x0b<\xdc,\xa7#\xadf6\xa1\x8b\x88Q\xa0Y\xa7\x17A\xd4\xc3\xb3\x1b\xa4\xb0\xc7-&\x10\xbeP\x8d(\xee\xdc`d\x1a1^\x8384Q\xcb\x0f\xae\xab\xc6\x9el6K\x9eiS}\xdb\x8e\x8a\xa4\xd6\xcb\xe4\x03\xbb\xd2\xd7\x8b#\x8e\x96H\x9bx\x0d\xd4b,\xda\x96\x18\x89\x0cl\xcc\x9b\xea\xc6\x97\x11\x9a\xb5\x93N\x8e \x81\xed\x84\x02<\x0f\x98\x13}[\x8c\xd0\xa0\xb6\xa3\xa69\x0c\xdc@\xc2\xd8\x11\xf9\x12pi\xcc\xd8\xb1x\x94%\x01x>\xa7\xa9iL\x85\x9e\x07\xba4\xb4(\xe8\xdf\xa0\x0e\xa0><\x91J\xcf\x189a\x93\xd0>\x00\x1e\x10\xdaC\xc0\x03B\x87r\xfc\x1a!\xe0!\xa1\x03\x94pt\n,\xf3\x90\xd0K\x10\xc4\x9b\x84v\x01\xef1\xa1\xd7R\xc3\xbe\x82q\xf0!\xa1\x17\x18\xef\x11\xa1G\xe8xL\xe8\x1e:\x9e\x10\xe4\xacs,\xd7\x13BO\xc0\x01\xf3\x83S\x84<%\xf4\x1d\xa4\xfc\x80\xd0\x1d\x0c\xd9 \xf4\x85\xe4\xce}\x08h\x10\xfa\x1a\x8a@\xe81x\x1f\x12\xfa\x8a\xbdv\xf0*$\xd2\x86\x1e0K\xce\x08,z\xc8^\x00\xff\xd2]\xf6\x02s})\xfc\x92\x9f\x0f\x08\xbdac\xfa\x86\xf95-\x88\xe9s\xe6\xe7\x87\xde\xef\x89\xa7\xc2}\x9e\xa6\xf4-\x9b8\x16\x9a7\xb5\x08}\xcf\xde\xd5\xfa\xf4K\xf6\x9e~\xc5\xac\xff\x87\xbd7\xedn\xdbV\x1bE\xbf\x9f_!\xf1\xe6\xf0\x00\xdb\xb0\"\xd9\xcdD\x15\xd5I\x9d\xb8M36N\x9a\xb6\xaa\xb6\x17-A\x16k\nP@\xc8C$\xfe\xf7\xbb\xf0` H\xd1N\xba\xdf\xf7\x9eu\xd7]\xf7\x83-\x10\xf3\x8cg~l\x8e\x88\xd23t\x0f\x93?h\xb7\x8b~\x8c\xe3\x1f\x9d\x90\xe9%\xb0L\xa7\xbdYV\x80\x1b\x0c\x88\xc0\xe4'\xfa\x02\xbd\xaamn\xa0\x83]\xa3/\xfa\x91\xb4o\xc0\x17lH\xb2\x0f\x1fRJ\xdf{x\x0cHf\xbf\x85\x8cjO\xa9\xb5\x83\x7f\x0f\xbe72\xc1Mk\x1e\x90\xcb\xe6(\x8f\xe3\xee\x97\xd0\x80]\xc6\xd3<\xbf\xa9U\xfe\xfe\x07\xfa`\xd0\x8a\x03} \xb8\x89\xe64~q\xce?\xd0@\x1f\xc9\xf0\xe5c5H\xa2q\x96\xf5\xe3o\x8f(\xaaC\x11\x9b\x12\x8f\xdfL\xa8\"]}V\x9b\x86\x93K\x8c\x03Z\x1d\xd8G&\xbf\xd2\x9f\xb6\xdb\xeeE\xdd\xe0\xe7\x97\x1eH\xd8\xec\x1a\x035mcL~\xdfe\x0b\xbaK\x03u\xf5\x0b\xdc\xa6bc\x18\xc6\x0b\xc61\x8ecU\x92\x97m\xfc\xd9\xae\xeaq\xa1\xb2y\xc6fxS\x85\xa9\x17\x8eP=\xc9\x8c\x19\x96bxZ\x07\xb8\xbc\x9d7\xcb\xb2#\x19\x1d8\xa3\xb9\x8c\xa4\xb4?t@\xcb\x0f\xe9\xd0\xc3\xfbdJ\xd6T\x8eS\x0d\xb3\xach6Z\xf7\xc4E\xb2\xee\xcd\xd3,'s\xbav\x8bDf\x10\xd6\xbb\x83,\xe8\xba7\x13\xcb43f\x9aW#\x94m\xb7\xe8\x80R\xe8\x9d\xdd@q\xac\xc0\x0e-&A$\x1dX \xcb\xd5\xa8\xa0\"A\x8b8^\xf4\xc0\x8e \xd2\xcf\xc8\n L\x16q\x8c\x16=v\x9d\x81+\x7f\n\x94\xca\x82R\xbav\x0ebF3\xf4\x11\xb9\xd3\xba?]\xa4\x19\xefLo\xa69\x8b0NPN\x7fG\x05\xc6\xa3\xdc\xd0T\n2'3\x9c\xccu\\2C\xa1\xc0\xc4\"\x8e\xbbS\xe8\x80i\x0b\xc4\x10\xcb`\x82\x8d\xb3\x9bj\x0d\x06\x84\x83[\x89`\x8c\x7f\xc2\x10\xf5\xb6(\xc9/\xad\x90\xb8$b\xf8\xc7\x08!Ik'\x1bE\xf0\x13a\xec\x1d\xe3(\"u\xdb\x85\xe0\x94\x13\xd9\xcbx\xa6LV\xe6@\xf2\xc6e\x80$\xc6\x89\xa4\x1b[A\xa2\x88)\x9e\xf0\x92 A\xa7\xe3H\xf0h\x8fM\xf0H \x89\x93h\xcd\x17)\x9f\xe5l\xe6\x07\x00\xbc\xcc8\xfe\x80\xa2\x8f.\xadck\xebT\x99\x80L\xfag\x03;zn\xe6w\xba\xf3\xcej \xd9\xee@\xc0\x17\x192\xc2\x05\xf4im\xbb\xfe6\xba\xd7c\xcbL\xa1\xaa[\xef\xab\x16%a8\xf9\x05\xb5u\x990\"\xe1\x14\x86\xfb\xea\xb7\xed\x16\x1a\x1a\x1d$\x03\xc2{`\xac\xc9q\x8a\xb8\xe9\x8c\x11]j\x95\xaa3b\xce\xc1\xb2v\x9d\xa4jITS\xfa\xb4u\xe0\xd5h|-?\x9b\x8eGv$>~\xe1\xe3\x89\xe3\xadC\xd7x\x93\x92M\xe4.\xae.\xf4\xe5\xa8\xd3\x04\xd8\x9a$\xb2\xad\x90\xeai\xa8\x01Ls\xeb\x00\xed\xf6\x89\xb4\xb6\x7f]\x93\xe0p .\x06z@^BQ}\xd0J\"\xda*4\x17\x93\xae\xcbU\x1e\xd6 \x97\x80^i\xc0\xe3\xcd\x9cW\x07\xb43\x05\x14\xe5Lo(\xb8If\x9dL\x15,\x9fG\xce^\xf8\xef\x88\xe3\xa1\x18\xd5o3s\xdbm\x1c\xf8c\xec\xc1;a4\xce\x90`z\x1f\xe8\xeb\x853$\xddG`D^2\xf0\xd7dpt\x0cv\xae\x9b#\x1f\xb8\x91\x0fv\n\xfa\x86m\x05\xe5\xf0\xa78F_\xea\xf7\xbe\x81N\xbf\x90W\x98\xdc\x80)}+k\xaa\x81\xcc\xa1!\xe9\xbc\xb6_ \xfd\x8cL\xbf\xa1\x94\xef\xb8\xfd\xaa\xa9\x1e\x9a\x8a\x15\xd1\xf7\x11 \xc9\xb7\x0co\x9e\x850\xf1+\x07\x1f\x12wK\xe9\xb0\xd9\xba:\xe4\xaf\xb2dY\x16\xc6\x94x\xae\x0f\x86\xc3\x8eI\xad\xfa+\x99\xae\x82\x8a\x7f*\xc9\xc6^N\xc9\x97\x12\x93\x05\xfaB^\xb9'v\xa9\xe1\xfb\x8c\xae\xf5O\x816\x16\xc7|\x05\xe7\xa5Q\x87Y\xc2d\x07\x14\xa4\x9f\xed\xa1w\xbb\xc9.\xb6\x991\xbf\xa3*\x8fwzo\xdd\xd1V\xbe\xdd\x9a\xe6`'\xb5OF\x1e\xc7\xbaM\xd8!_\x12\xd8\xeef\xcf\xdeQ\xef\xaf%\xd9\xa4y\xde2\x00s\\\xf48\xf4\xa9\xe6\x1e\x06\x14\x10\x06\x180k<\xe7f\xdb\xdc \xefd\x1b;\x03\xf3}R\xd0\xc1\xf0\n\xb1\xbad\xf1%H\xbd\xa5{{\x1a\xc6\x1b\x0c3sr\xcd\xec`R\xec\xed\x11\xeeD\xf7Y\x9b\xe1\xfe\xe9v\x8b4tH2p\x8aO\xf6\xf7\x8b\xedV\x02\xa7\x05\x13\x01\x00\x82\x8f*\xab\xeb(3\xb0A\x1c\x0b\x949\xc96^] 2\x9d\xb2o\x9a\x10\x98\x04\xd12 \xa26 \xbb\xe3\x16\xcdQU\xd3+\xadw\x01\xd7W\xe1\xfa*\x91\xd8\xedky\x07\x0d\xd4qw\x80\xb2,Q\x94y\xe2\x0bIi\xc3\x04\xf8-\xd4G\xdb\x07\xaf\xc6\x0b\x12`\x86\xd6`\x84-\xd3q6\xd1\xa1\xbb\x88\xee\x83\xfea\xd8\x13\xdd\xb1\xb03\xb7\x13>\x0d\xc5\xb3\x92\x94\x00\xe996\x8e\xfe\xf7\xff\xf6\xa5'\xdb\xad\x18K\xc4\xf0\xe4\xae\x0e\xdcB]\x05\xc8F\x18-\x0f7\xdb#\x85$\xe2x\xdc\x9f\x10>\x1eLp\xa2\x10\x0f\xf4\x92.\x81\x8d\xac\xc1D\x9d}h\xe0\x1c?=\x99^\xa5\xcc*gh\xe0\xb4\xcd\x8fA\x8d\xc4bP/\xa0\xa5XJ\xca\xe1!\xee\xcd\x81\x96r\xf0\xc8\x90R<\xe1\xc3\xd0S\x9e`rNW\xbd\xd7k\xa3\x1f\xfc\xf6\xccx\xc3\xdanW\xbdO\xec\xece\xa6\x9a)\xe4\xc6<\x02@\x8a\xb8\xa4+\xc7\xf5$g!\xfda\x86n0\xb9\xa6s\xb4\"\xd1\xe75[\xb3\xd7\xd9T\n\x95\x16\x17\x11&W\xf4:\x8e\xaf-<\x7f\xb5\xdd\xd6\xb9\xc9\xf0\n\x12\x05\x14\xf2\xb38F\x8c\xde\xd8\x87\x1a\xc71\xb3\x98\xd5P\x0c\xf1\x06\xd8[\x9c\x08*@\xce\xc6\xe8/\xa1\x00\xec1\x13*F)\xc2\x89\x97\xa9eeY\x85\xa1F\x83,\x96\xe4l\x94\x86\x1d\xb9\x81Z?d\xd3\x0b$q\x99\x9c\xc7qw9B\xe0\x8c4\xa7\xde\xa8ACy(\x8a0\xf8\x1c9G\x12\xf7\x84\x993\x94\x93\xcdt\x91\xcat\xaa\x98|\x96\xaa\xd4\xbcb\xb5\xc6\xf2\xde,U)-h\xb7(qr\x19\xc7\x97\xee\x0c\x8f\xd0\x94\xfa\x0f\x7f\x9b\xad\xe9\xd4<\xc0\xb5Z\xd6\x0e\x91\xd0\xe7>\xa9%-L\xd2\n\x92\x02\x8e\xfbU\x1b\xdbp3\xe7 #\xc0\xc9\xb1p\xdc0\x8bc\x94\xc1\x8cP\xe5\x1c1(\x92\"\xacO\xe1\x9d\xec\xc3\xdb\x8e\x8bg\x87\xf5\xacI\x8c!\x8fc\xee.(4\xa0t\xc7\x94\xc5\xc8&k`\xc5\x07\x01\xd4\xfd\x16J\xa4\xa5@\nK8\xcc,y/u\xe4\xbd\xc2P\x0c\x87\xd2?p\x15\x01\xcf>t\xe6};aJ\xe5lv\xfb\xad\x9e\xf5\xe6\xcd\x87.\xaf\xee\xf8)M[\x1e:\xd1\xfa\xd0\xe5t0,\xda\x1e:\x01\x0f]\xd1\xf2\xd0\xe5_}\xe8\x8c\xcb\x0dx\xe8\xc4\x84n\x8cW\xa3$\x9a\xaf\xf3yf\xccf\x19\x18\x9e\x95d\x7f?\xaf\xde\xc0o\xa9\xc4\x8cQ\xd7a)\x07\x8dJ\xec3\x9a\xef<\xa3S\xb7\xf29\x9a~\xdb\xd3t\xe7\n\x1fX\xae\x02\x10\x95\x81Yg\x16\xf8\xe0\xb1\xa1A\x03%x\xeah\xbekCun]zx\xd64\x90#\x99\x01\xfe\x1c4\xd9\xcd\xe2\xb8\xbe\x92\xd9.1\xd3,D\x03\xd5\xc1\x9b\xb2\xdc\xa1@j\\ycK\xb5l-\xcb\xb9(<\x1a\x1c\x01W\xbfMCh\xb8\x83t\xf0\xcaDR\xe5\\e\xaa\xf7\x07\xdauZUyF\xd1}\xd2\x17\xc1?+mi$\xa6\xb0AsZQ\x8al\xbbm\x99\xb0\xedv\x8d\xb2\x10\xa7\xb0\xf1Qm\xe8-T\xe3V\xf1\xa2\xc7\x87\x95\xbc\xce\xe3G\x0d!\n\xcb\"\xd2-\xcc\xbe\x8d\x99\x11l\xb0\xc1\x81~[3>\xb3\xdb\xec\xc0\xde$\xfaJ\xb1\x8fD\x8al\xd5C\xf3\x9b\xf1\xb1sL\x8a\x06\xa6pm\xe2\xf4i\xd6\xc7#\xd8\x85\xb6\x8b~\x0f\xda\xbdWl\xb7\xdd\xdcl\x97Y\x1b\xf8nDv\x08#;\xc6\x80\x06\x81\xd5\x9f\xc1\xc4^\xef\xb0H\x19\xbau\".\x1b\x8c\xf0\xc7\xeel\xe91\xb7q\xbdo\x08\xb8M\xcck@\x98\xd9\x17\xec6A\x03\x80\xd22\xa4\xd1\x0c\x07\xa4\x15c6\x19\x82\x1bq\xead/9\x1dO\xc6l\xa2A\xfcn\x86\x14\x89\x9e\x1e\x1d=?9y\xfb\xfe$\xc2q\xacz\xfe\x13DL\x14\xe9\xe3\x91\x1a\xf7'INV\xf0=\xd0\xdf~\xe0\xc3\xa0!\xda\xed\xf28\xee\n\xd4\xe0\x84L\xe3\xb8++\x9e\x84\xc1\xd27f:\x93\xfdA9\x9c\x8eR\xc4\xc8\x80l\xeaH\xa7^\xbf\xbc\xc4 \x1b\x0f&t\xe0\xaed\xa6\x014K\xdem\xdb\xaf\x0fo\x97/\xaby\xc1\xbbc\x91\xdc\x06\xd5\xfb=\xd8Jo\xadM\x97\x06\xceV\xab\xb5K\xa9\xd0o\x1c|$\xe2\xdbo\xdd\xfa\xc6xl\x0f\xc3\xe3\xbee\xe5>4\x97\xeew\x87\xe6\xce}\xf4\x08\x9c\x14\x85-\x93U\xfbF\n\xc5A\xd6\xdb\xed\xce\xea\xc88\x1et)]\xa3\xcdY2(\xc9\x1a\xad\xd0\xa6\x04\x8f\x13-\xcb\x11\x14]\x99\x13\x12\x9dE\x8e\xebzX#\x1a\x0cJ8\x14\x9b\xb3\xe4\xa0\xc4\xb8w\xb6\xb3\x01J\xa27%\xe1\xd6$\x1c\xaa\x04\"\xc6|B\x1f\x91(=\x9b\xce\xd8\xfc|\x91\xfd}\x91/\xb9X}\x96\x85\x8az\xc5*\xcf@\xcd\xbd\xdd\x1d\xad\xd2\x1b\x91\xe9K\xe0QW\x0f\xaa$\x0c\x8f\xf9d\xbbm\xaf\xaeK3\x04\xb9\x14\xc6V\x983\xd2\x9bkT?X\x95\x7f\xa2\xdc\x08.\xef\xf8 Z\xd3\x01Y\xd1\xb47'sZ\xf4\xe6C\xf1\xc3z\xe8eJgdA\xa7\xa8\xba7@*\x8b,\xe9j\x94\xa1\x05v\x92d+\xb4\xc08\xd11\xe4\x9c.]\xc57\xb4?<\xff\xe1f\x88gt9\xbe\xd9\xdb\x9b\x10\x19\xc7\xdd\xb99\x0c\x0b2\x03\xfd\x95\xf1lB\x17\xe3Y\xe8\xa4'Y\xb7\x9f\x8f'w\xdc\xe7\x86Ui\x0cU\x83[\xe3o\xbb\xd4\xcdiyd\xb6\xae\xc1\x98R+\xef\x06\\\xeb\x83\x07v\xf7\x1e8\x88\xe1\xa1\x85\x18\x0e0Y\xd1(\xea\xb9\xf6\xc8\xdc\xcb\x80\x91\x19\x9d\xa2\xa0#CQ\x9dD\xd7\xcf\xe6\xad\xde\xed\xa2\xf5v;\x03\x8c(\xdbqa\x15\x0e\x8bt\xe5v+{W2\x03#\x1b\x18\xc7qwV\xea-or\xb4\xc0\x0f\x96\x8fk\x89\xc9XC\x95\xeeF\xfd\xb6G\xc2H*y >QYL\xe3#\x99\xccQ\x8a8&R\xcf\xa2\x17\x1br\xcb\xb9\x1a\xad\x1c@\x9a\x11\x81\x13eE*\xc5~\xe6\xf6\x89\xc0\x94\xd2\xecN\x12\xc4\x13\x0b\xd9=\xaa\x10\x7f\xf0\x16v+\xd6\x7f\x19\xb0Q;F\xee y\xf4\x1a)\n\x9as\xa3nW%\x91\xf1\xfc\x15Q*4\xae\xdd~7?9\xf8\x96\xbdW9\xd5\xfe?\xb5\xfb\xaa\x16w\xf6_\xd8\x99\xff\x8e\x1d\x18\xd6w\xdb\x1e\xac\xf2\xfc\xc3]\x88\xe6\xe8\x1bw\xa2\xdf\x85\x1a\xc7\xbak\xb7I\xc2\xab\xdd\xc6 \xdf\xf3\x82\xf6\x94R\xd9\xba\xdb\xf4B\x83\xc8\xf7\x8e4\xf8\xad\x0f\xf3\xebt\xf5-+\x0d\xc4\xa3\x07\xf6q~\xf2\xb8\xb1\x81\xc0\xfb\x0dj\x81\xe5v\xe1r\xcb\xcd\xd9\xc1\x8ek\xf6\x1c\x03\xc8N|\xd3F\x0c@\x87C\xfb\x8c\x0f\xac\xf8\xe8wn/Z\x01\x9e\x07\x0f\xcc^|l%x\x9e\x18\x01\x9e\xc7\x86\xe8\x04\xd263+\xb6\x034\xa7'\x8fn\xa7\x99\x99\x9d\xb1\xa4\xfb\x86e\xea\x15\xb6\xf4|\xe8\x97\xa4\x19\xff\x89\xa5\x17\x11&7t9\x8a\n\xa6\xa2$Jg\x1ac\xa5B\x83\x85g\x14h'\xd5\x96\xbd\xa6\x97\xe4J?\xd4\x17\xbbW\x03=\xd3\xf0e\x8a\xce\x08\x03\x87\x12\x11\xa5\xac\xd5\x96l\xc5\x85#\xc6\x80F?a\x86\xebR&\x911gtK\xd9.:\x8f\xe3\xee\xda\xd8\xd8h\xaf\xa7L\xa2s\xa6nk\xdb\x15\x1fY\x89\xf7[\xebX\xa4\xc5\x7f\xa5\x0f\xc1\xa2\xf0\xbb\x07N\xb8\x1d\xba\xb1\n\x9a!FZ\x90\xbb\xcb\xed\xb6\x8b\xce\xb7\xdb3\x07\xe7\xc4qwU\x03\xde@\x0e\xf7\x12\xf7\xac4\x19\xc2@]\x027\xca\x18\xe3k\xca{\xe7\xa0\xe4\xe5\x84q4\xbeI\x96\xe4\x06\x93\xa2\xf7\xfe\xf9\xaf\x1f_\xbc\x7f\xfe\x8cv\xfb^\xab&\xb3\x9a\x85\xb0\xb6o\x81\x8fvM\x9e\xd3\xb7\xe3\x9b :\x1fm\xcad\xbfO\x06\xb8K\xdf\x92SZ\xef\xc9\xdb\xde\"-\xd0\x00H\x13't^\x87\xc8\xa0\x97\xc6S/\xf9@\xbb\xe7q\xbcj\x15\x921\x9c\xbbK\xa2\xe8\x83\xa1\xda\xdf\x1fb\xa6\x1bV\xc4k\x88u\x194\xb3\xdf\x07\xaa\xc7\xc9v\x8b\xd05UA]p\x184Z}M\x98\xbbl\x16\xc8\xd6J\xae+\xe0\x08(\xd9<\x8es\xc4\x89\x1c\xdfL\x88$KL\xa4\x9e\xb8\x80\xd9zF\xcej\xb2L\xd7\x98\xa0\xd3\xed\xf6\x83~\x05/\x90\xdb\xb6\x98\\ \xd8;\x98,\xe3\xf8\x02\xc1^\xc4\x98\xa0\x0f\xdb\xeds\xaccn09\x8f\xe33\xa3M\x17\xc7\xd6z\x97\xfdvb\xd8W\x1an\xbd\xd6\x98k\xc5$\xb3o\xcau\x97^\x96\xe4\n\x93\x19\xd2\x03#\xe7\xdb-\xe8\xef\x9d\x80\xfb:\x1d\xa7{\x7f\xfd\x1f\n\x85\xdb\xf6\xbd\x03\xdb\xe7\xd7\x8a\xf1\";\xcb\x19\xb2q+\xc9.\x19W6A\xf0\x02yr\xcbW \x8d\xc1\xa0\xff\xb5{+#\xa9\xe7\xad\xb4\x99kA\x19U\xe1*\xe08\xce\xbaT/\x9eD)\x0d\xe8\x1c8\x8eS\x9dP\xc5\x80Q4\x92\xe2Vy\xf9\xf6\xeb\xfb\xa1\x86\x1eB\x05\x00\x90\xa0\xd4W\xf8w\x16\x9c\xd07vx\x83?z`np\x90\xac\\YLnn\xef\xfa\xde<-\xd4Kv\x03\x97\xf9\xe1\x81\xbe\xccg\x96w0\xab\xc4\x17CM\x8a\xfa\x89m8\xe6&S3gk\xcaj\xbc_\x897\x05\xe0\xc5\n\x93\x05bV\x10AY \\\x81\x8c\xb2;\xa8\xa3:\x00 O\xabp\x91}aI\xbf\xc4d\x05*g\xfa\x93\xf6\x8d\x9d\xe4.\x05z\xa2$l<\x9d\x10\xf0l\x8a\xf5\xd3\xb4DJ?-\xad\xcbO\x04\xc9\xe8L\xa3I)\xbd\x01\xf4\xc9-p:J\x9d\xc0G\x82\xb2\x9e\xee\x03M\xe9\xc6v\x93\xce\x11H\xbc\x90\x0bv\x93(KA\xe5D\xef\xbeL\xac\x8bDRS$$\xab\x13\xab\x83\x0db!\x99\xd1\xb8\xddn\x91\x0d\xd1\x14\x83D\x8c1\x0c\xa0\xbfV\xa3\x0c\xc6\xb7\xb7\x970\x1b \xd1q\xd4\x05\xeb\x10(3\x8f\xa4\xf1\xa3\xaa\xb7\x0d\xb9i#\xb8\x13i\x86\x07=6\xfa\xf1\xa6\nGu\x91\xbe\x1e`\xc2p*M\x7f\x86|\xc8)\x87\xce`0\x07}\xc1n(U\xde\x9c\xb3\xb7\x1b\x90\xa1u(\xe6\x01\x17E\xd2ze\xce\x02\xf9ih\x14\xc4\xa7]k\xb8RR\x07\x99\x0c7\x97q\x8c\xaa\x0fZ\x05\xcd<9:\xb8\xbd\xa8\xd4\x98\x9b\xaa'\xc4\xf5~h\x9b\xa0\xcc,\xa2]\x8c\xd5\xc8\xed\x1e`w\xdbpi+j\x01f]\xef\x81Km\x18\xe4`'\xdb_$\xd0\x1a\xf0\xb8]\x17\x87\xaeWv\x8e\xab\xbe\x85C\x15\xc0\x19\x85\xd1H\xb7\x07\xfcx\x05&\xd6\xda\x11\xdc#\xc8}\x80(\x16\x8c\xc7FCX\xe8]\xa3`,\xfb\xfb\xd5\xb8\xf6\xf7\x9dQ\x9a./\x89}\xa2kC\xf4&\xea \xf7\x03\xd5\x18\xe0\xb7\xd2\x14\xc9!\x1e*\xaaF\n\xc6\x91p\xbb\xaa@T\x90Nt\x8a\x80\x87qb\x84\x1b\xc0\xf8\xbb\x9d\x85!VT\xf91\x97d\x91\x16-t\xcen\xd7O\xbc\xa1`\x86\xfb\x8e\x8f65\x9a\x8f_\xb6j\xb1\x1c\x98\xa3\x1b6\x12}\xa4\xa8\x15 \xdc\x84\x9f7\xc1 \x85\xcb2\xd9\xa4\xb3V\x02\xac\xcd\xcdh\x95\xdf\xf4q\xa5o\xfeu\x0d\xa7\x02O\x18\x9b\x06}\xca\xd6cg\x1e\xd6L\x17_C\x0f\xcd\xd3\x99\xb4?_55-\xab\xa4\x0e\xa6v$\x1eN!kC\xf0f\x11\xca\x7fI\xa7\x04\xc1\xac@\x17X\xe64J\x10\xe1\xb5\xbb\xa3\x10Q\x1d\xea,8\xd4\xa0 \xc1\xedA3\x0c>\xbf\xc2<<\x17\x0e\xb5\xb1\x1a\x11q\x8c\xec\xe1\xe4\x94\x8f\xccA\xd2w\x9e\xee\x92\xd9Ix\xe4\xb4\"\x94\xd3{\x80\x1b\xa9M3\"\xc8a\xb6\xdd\x8er\x84)j\x93\x03\xe5\x89oU\xd1(1\xe1#\xaf\x18\xe1\x9b&]\x0eo\xc2\x1a\x81\xc8_\x0b\xb2y\xd0\xefW\xc8\xe6A\xff\xd0\xfc<0?\x0f\xcd\x8fM{l~\x8c&\xf3\xa0o~\x8cB\xf3\xe0\xc0\xfc\x98\xe2\x83\xef\xcc\x8f\xa9e`j\x19\x98Z\x06\xa6\x96\x81\xd5\x87\xee\xdf\x8e\xd5\x1a\xba\xe6\xb7\x82\x1e\x8f\xea\x04\xe0\x87\x06\xecpz\x87\x16\xea8|h\xa0\x8e\x83\xbe\xe5\xb9\x0d4j\xb9\x82\x98\x03\x03wX\xd5\x8f\xc7\x0f4\xb41GQV\x1c\x01y\xf1\x04\xfcI\x81\xc7J\xac\xe1\x8f\x1f\xe8\x83\xc1v\xdb\xa0\xd6_Z\xad\xfe\x8a\x14\xbb\x98\xd0\xee\x800G\xa3\xc4\xe3\xfeD\xa3\x93\x1a\x0c8\xa7+\x14\x99x\xc0'\xc3S\x9c\xcdQ7E\xac\xa1a\xa0\xa8\xae\xd0U\xee)I\nHH\x99\xc6\x11\x86_g\xddt\x97\xdbm\xf7\xbc$\x1b\xd3\xf4\xee\xfdD8\xb1\x12\x1d\xb4\xb0'iE\xd7(%}=C\xc6\xd5\xb9\xa2\xfb\x03\"w\x08wC\xf5\xbd\x04\xd3\x05\xd9\x1c\xdd\xa0\x8c\x82\x11\x145J\x93\xd0\x86\x81\xd1\xe3\x98\xef!As\x94yJ\xca\x0fO\xfa\xfdG\x83'O\x0e\x1e|\xf7\xe8\xbb\xfe\x93'\x83]\xd5\xc0\xd7\xe9u\xb6\\/;\xd62X\x07\x9e\xae\x0e\xbb\x9e26c\xb3\x08[p\xa1?\xe4\xdf\x8b!\xdf\xdb#\xf3\xbd=\x0c\xa6\xdf\xb28\x9e\xa2\x15\x99\x93l\xcc'\xc6\x82\x01t\xe2\x07\xfa\xdf\xd0*\xd4\xbc\xb7G2o\xebfeGE\xe7d\xf5\xed\xac\xe3\x07\x83\xba\x9a\xe7w_\x85\xfeSPm\x1e\xa6\x1d\xb0(n\xd45S\x92\xa1>\xe1\x18'l\x9cN(\xbf\x13\xaf1\xc2\x08\xf6\xcc<\xd0gF\x04*Dw\xcbQe\xf6\x08\xc8\x9d#\xa0\xaa#\x80\xd4\x8e>K:\xa1;\xef\xccf.D2(K2\xd0\xfby\xcc&\xe8G!r\x96r\xdc\x9b\x0b\xd1\xce\xad\xfa\x16\n\xd2\xc1cKA\xb2\xe2\x15\x03\xcb}\x7f\xe4\x88\x99\xfa\xd8\xaf\xcdT\xac,Gqn\xef\x8f\x99\xb9?\x0c\x01\xc9\xe8\x7f\xe9{\xe4\xdc\xea\x0e\xde\xd8\x15\xbb\xb4z\xceg\x16\xed\xb9\xb6\xfc\xa7+\xabF\x7f\x01\xb7\xcbwF\xff\xebq\xdf\xa8\x7f\x1d\x1eb\xa3\xf9\xf5\xd0(~=zh\xf4\xbe\x0e\x0e\x8d\xda\xd7\x81U\xfbz\xf8\xc4h}=84Z_\xdfY\xad\xaf\x07\x07F\xed\xeb;L\xde\xc05\xf6\x18\x93W\x10\xc0\xe4\xb5\xa5|=\xb3H\xd31u\xccb\x03e\x91/\xf4\x089\xdf\xb9\x98|\xa4\xefQ\xa4\xc4;\xe7\xe2/\xc2\xe4G\xfa\x0c\xd0\xac{\xf4Y\xa8\xf5h.\xe4\x08\x93O\xd4\xa3\xb6\x0e\x8a\xf8L\x85\xbd\xb0\xc9\xcf4C\xd1/'o\xdfD\xce\xaeS6\xbf\x890\xf9\x8d>\xef\xcd\xc9\x1f\xf4\xb47'?\xd1\x8b\xde\x9c\xfcJOzs\xf2;}\x8a\xac\x17\xa3\"\xc2\xe4\xa5\xfe\x14\xab\xfd*\xe6\x17\xc8\x005\xed+a\x13\xf6%;\xcf\n%u\xcd\x7fV5@\x06\x935\xc8\xc0\x98\xcequ\xa1kS\x8c\x8a\xde\xaff\x00\x843\xdaUl\xbb\xed\xaa@\x17\xbb\xf1 |r\xb0C\x04NI\xe2x\xddF\x00x\xd4\xa5g\xe8\x0f\xcf\xfbk\x87\xa6\xfe\xb0L\xbf\xd43\xfd\x1e\x95\xb8\x97\x96%\xd6\xff\x1bl\xb3\xea\xa4\xfe\x86>\x01\x1a\xe8\x89\x1f\x9f\xc6jB\xfe\xb0\x994|\xce\xba\x94~\x8a\xe3?tF\"q\x99\xfc\xd1T{pb>\xbf\x8f\xd9\x84\x9e\xa1\xcf\x01\xe6\xef\x1e\x94\x1f\x11w\x8a\xa9v\xa9\x89J\xcf\x13Ff\xcc\xd8\xa4\xcc\x04OT\x89I\x016\xdf\x82X\xaa0\xe1%\xc9\x18\x9d\xb6\xd0\xffv\xdcg\xb5;\xc52K\x82X\xa8\xd3\xf6\xb9$\xe9\xae9$Fa\xb4)C/\xcd\x0c,\x90'X\xdd\x18,\xd8\x8di\x818&+\xf4;\x91x\x84x\xaf\xe2\xb0\x8e\xd0\n1\xf2\x05\xc71\x1b\x7f\x99\x80\xb1[dC`v\x8c\xd33=\x1d\x01K\xf6\x12\xf5\xc1\x0e)\xc6\x89-\xbb\xdd\xea5\xf8B.\xd1\x80l\xf4\x93\xee+\xe8c\xe2\xb450N\xfe\xb0!\x0d;\xd3&\xec\xeb\xf9\x0f\xe7Fd\xeb\x1a\xf1\x8a\xa5\xc9\xc0f\x9e\x1d\xcb1\x92\x01\xc4\xab\xf0\xa6\x88\xe3n^\xd93\xc6\xdbm\xca\xcc\x1c\xe9g\xb648x\xdef\xdc\xfd\xc6\xd0* \xa7\xbf\x06$\xd6\x8aT\x08\xdff\x96\xf5\xe4)\x0c\xd4\xd3\x97Da\x1c\xc7\xa8\x8b\xf8v\xdb]\xb9B\x10\xfe\x1d\x02+\xa7,a\x84\xb7\xf5t\xa8 \xden\xf5\xd8\xa7\xed\x1b\xf2\x1c\xf4L\xfc\xbai\xfcUof[\xa9\x84J_\x12\x89\x9d\xd8\xd9o\x88\x13\xe9;*j\xf98\xb4\xcc\xcd*l\xb7H\x04\x0b\x0e\x8b\"\xca\x92\xac\xdb&\xe4'tn\xcd\x94T\xd0\xdb1Ru\x86\x88n\x88AC/\xe0\x97\x1b\xc17C\x9b\xe5%Y\xb5\xd5\x0c\x9b\x95p\xfa\x13R\xa3\x97\x89iE\xd6Z\xe1\xf5V\xba\xae\x19\x05\x93\xfe \xc2\xd24\xf5;\x98\xda\xd25\x94C\x94o\xb7\xe8o\x84>\x87\xcfi6\x87\x15\x08m\xb8}\xde\x05i\xcc\xf1\xae\xec\x0c\x06O\xb4\xd5ab;\xb0\xddmN\xbc,\xfb+\x8c\xc3\x9eOF\xdf\xe9\xd5\xe5\x0d1\x1c\xb7\xb5\xacH\xcaK\xc2\xf4\x19\xf5;\xc7\x04\xc7_&\xb0\xefP\xb5\x91\xe0`V\xbaD\xfa\xd8\xb1Ju\xb6S\xc41gq,\x19\xdc\x82\x1a\xbe\x9dg\xe7k/\x80\xa11k^b\"\x18\xc8%\x86\x8aA\xc4\x9bp\x8c\xda\x0c\xc9\xdf\xb3H\xb0J\xcf\xf5\xdc\xff\x8d>\x93\xe8*S\x0b\xb1V'\xf0<\xb63\xce\x04C0|\xb3?Nzs\x9a3r\xda\x9b\xd3\x94\x91\xe7\xbd9\x9d2r\xd5\x9b\xeb\x97\x90\xae\x19y\xdb\x9b\xd3\x15#oz\xf36`K0\xf4\xde\xd6E\x8a8F\x7f\x847\xb8\xf1\x9ed\xef\xe2hw\xe4\xed\x8f\x91\x1bUPVc\xf8\xe9v\xfb7\xfaD\xa2\x95\x15\x80yQ<\xf7g(\"9\xab\xa9\xc2\x18a\xb1[\xf5R\xba9)\x16\xe92\x01Y1\xb3\xe9\x92\xcf%&\xc7\xe8\x1a1\xd6\x10\xe8|e\x0fR\x80\xc2\xb8g\xa8!2dD\xcfj\xf4\xdd\x06\x7f\xd7\x10\xc2V\xe8\x17}c\xd9\xf1\xfe2V\x13{\xd5~\x0e\xec\xe6\xe9h\xca\xc9\x9fc>\xa1J\x9f\xe2\x0bvs\xdc\xa8[\xa3c\x19\x18el\x1e%\xb6\x17\x05\xe6:-\x80d\xda\xfe3\x10$\xfbs\xcc&%Y\x17\xcc\xec\x97p5\xb8\xb1\x16\xa8\xd3\xc0\xd1Y3\x0d\x0c%|]\x8c\xcaOuQ:\xb7\x80\xedt$/5\xa1Fg\x88\xe1\xa4`H\xff\x82\xbeV]\xf4)I\x19\xd9\xb1%S0\xbd\x9d\x02\xdbv\xcf\xec\xf6\x112\x99\xb2o\xecj \x00RP\xc9\x9bt\xc9\x8ad\xdd\xac\xdb\xac\x7f\x91\xac\xbe\xad\xe2u\x83\xab67<\xb5\x9d\xd6\\\xb5m@Ho\x8e\x96F\x04\x03\x93\x9fq\x1c\x07\xad\x1a\x98vg0\xdb\xed\xba\x85\x08\xf0\xd9\x0bdEc\xbe\xce\xf3I\xd4\xa5?#}}o\xb7\xd1\xa6\x84\xafM\x9a\xb02\xf8\xf6\x10\x90\xed\xb5\x87\x9ew(m\x8e\xd8%\x89\xa0c6!\x19\x1d\x0cw\xc8\xa2\xd9\x10\x0bk\xb4\xcf_\xce\xd9\xde\xde\x04\xf6\xa7\xa4\x8a\xa0\x19\xd2\x8fv\xa5\x10\xa3\x9f\xf9,\xb4\xeb:\x87\x0cH\xed\nJ\xb6\xc8\xfdZ\xed\xd9\x00\xa0\x00\xd9x\xa2\xab\xac\x8e\xa1\x06 \xc5x\xa0\x0f\xdb\xcf\xa1\x95A\xa1\xa7|\x18\xdcj\xe3\x8f\x93\xed\xf6C\xed\x9e\xfbH\x82/C+{;\xc7\xe4\xb5\xbe\x90=v\xf2b\xfce\x02G\xaa\x1d\x98\xae,\xbf\xad\xec\xda\xfcC\xa4{`\xa9oV\xe2]#\xd3\x85A\xa2s\xcf\x1d4X7p\xfd2\x8b1\x82]\xf6V_\x13k\x006k\xaf[\xc6;\x01\xf5:\xdc\xbdkT{\xcb,\xc0\xb8\xa2\x9b\x92\xccw\x14|v\xc0\x9b\xef\x07\xae*\xda\x00p\xac\xe0C\x1b\x9cC\x8c\xc6E\x08m\xcdA\x9du\xadg\xdbW\xc7Fk\x84\x93u%\"\x14Y+\x05h\x05PM\x1f\x13U\x0e\xa7hN\xd6\x06\xfa\x9a\xd1y\xc0H\x0f\xc6;\x9c\xd5\xc8)s\xc8\xbd\xa0\xb3j\x03/\xa9= H\xb1B\xe1\xc8\x1bPY\xa3H\xc7D@y\xbc\xffo\x93\xe9/\x84z\xff\xc2\x7f\xe1\xf1\xbf\xf1d\xef\xde\xfda\x8ef\xff\x10\x980\xb3i \x85#\xe0\xef\xd8s\x89\xb0\xd1\xdaTt\xe1\xf6\xae^\xe9\x14\xad\xaa\x871r&S\x97#'%\xf5\x88\xec\x0fp\xa2z\x92\x81\x83CtN\xa2{\x83\xa86s\xdc\xad \xb7o\xe3\x0e\xcf\x1f4e,\xc01/\xef\xd8\xf0\x8b\xb4xa\x17\xafm\xbb\xdb\\mD\xe0\xdb3\xdfq|l\x16+6xw\xfa\xd3<\xbf#\x8b\x9d\x9e;r\x14,\x95w\xb6\xe2\xe9|w\xe4\xc83uGz\x8dltG.\xb3\x05?\xa4\xe7w\xe4Z\xf3b*Vzno\xe9\xd1\xc1\x13\x8c^\xa7jA\xa2\xd7\xe0\x04\xb4\xdb\xbfC\x82\xe2\x10\x0fM \xd9\xd3\xcf6\xb1\x8f\xf7N\x19\xbc)X>\xef\x81R\xf6v\x8b\xaa\x0f\xda\n<)\xaa\xb6\xdbM *vV\x17$x\xfbye\x9b^g\xf8\xfd\xf5\xab\x9f\x95ZYSkN\xa7j<\xd9\xd1M\xf0TPq\x91\x1cP\x8aD\xcfh3\xdd\x1f\xf4\xfb\xdb>&\xe6\xeb\x03\xbbV\x89K\x02\xd7\xbfV\xe7\xc9\xc5\x91\xb5\xcc\x13\xd1\x93\xacX ^\xb0\x8f\xef_\x11\xa5\xcb\xec\xb4\xe3\xba\xee\xb5\xfa\xaaB\xba^\\\x92\xbf\x0b\xc1\xbf\xa1\x9c\x9eT\xe3\xa8\xadY\x05.\xc9Y.\xce\xbe\xa1\x0e=S?\xe6\xe2\x0c\x8d\xab*&\xba<\xb8\x8dIr\xb2`\xe9\x8c\xc9\"\xd9\\\xb0\x9b\xa2\xa5\xc2\xac$\x96\xef\xd5\x92\x98\x96\xa4\xc9\x84u\xd8\xe2\xb8\xe1\xd1ar\x1b\x97\xb7\xd3\xc8\x98\xf1NQ\x96e\xe9\x8d(N;\x19\xef\x88\x9eX1\x8eTo\xc9\xd4B\xcc\xb6[\x90d\"\x86\xce\"z\x82\xe7\"\x9d\x85k.\xc0\xb1_\x9e\xbf\xb7\x83\xfe\xd9\x8c\x13a\x7f\xf5\xdd\xff7\xea\xfdk\x84\x93\xf1\xbf\xff:\xf9\x8bO\xfe\x85\xac\xa3\xfe\x11\xbew\xff|Yg\xa3\xea\xcdo\x15\xf1\x14U\xf5\x0ec\x92\x9a\x94\xb1\"|\x82I\xa1_\x1d\xfdo\xa4\xff\xedE$\xda\xe3\x1a5\xc6\x84\xa3\x1c\x81\xcd\x94\x9e\xe0\xa0\x0eG%\x11=\x8d\xeb\x1eI6c\\ei^\xd0\xc8\x1a,\xd5\x0fuoZ%\x10\xd5\xb3\x8b\x85E\xaf`\xce\xc8\xa0\x19\x18\x9aV\xc9\xe3\xe9\x04\x0fu\x16>C\xc6\xd7\x9d\xf5n\x07\x82Q\xbb\xa7\xbaN\x1f ?\x0c\xd6\x17\xccj\x05\x11u\xbb\x0d7\xfdM\xe8H\xa3V\xa8I\x9d0\xcf\x91\xb1\"\x1aTki9\xbdb\x91\xcd\x95\x07\xed\x8dM\x95\n\xa3\xb2R7\xaa\xac\x1c\xa4\xab8F|\xdc\xe8I\x0b\x07\xa4\xc3K\xa0!\xc96\x90\x90\xf1\xa9\x98\xb1\x8f\xef_\x1c\x89\xe5Jp\xb0\xa0\x14l\x93\xffy\xd0\xbf\x7fN\xa2=}o\x8a\xb6\xf23\xb6S\xde#\xcaU5\x7f\xed\xe9Z:\x11\xc6\xe5\x105\xa6\xd4\x8d\xff\xe3\xfbW'\xf0\xae\xbcKe\xbatl\xf3(\xa5\x03x\x98\xd9UG\xa1h\xa4?q\xe0\xe1\xa2\x15\xb8\x0b\xd8\x07z\xb3|5\x8f=\xe4m\xab\x88Qh}\xd8\xdd\xc1\xe1D\xb4\xea\xf6Xj\xfc\xa9c\x9b\x93\x8d\x13&\xd7\xa0\x84Y\xcbMY:\xcb7\x8ez\x0d\"K\x95\x07;\xf05\x15\xf8y\xf2\x86\xd8\x15\x8e\"cf\x00\xc0\xa2\xd3y\xe5\xcc\xf26\x9f\x16\xc2m@]b\xc8\xdatt\xf4k\xc4\xad\xab\x04K\xc8\xaa\x18\x9a\xfa\x10\x19[\x06\x0e\x8d\xe9\xea~X\x8dHV#\x02~\xe4\x85\xf3!\xd2\xc9\xf8j\xad\xfeW\xd1\xd1C\xec\xcc\x85\xec4\xd6\xd9\xfa1qh \xb0\x965V\xb2\xc3\x08\xf2\x8b\xee\xed\x06xT\x95\xf6\x87\xf2{\xe6\xcdj;\x03\xf7\x19ec9i\xab\xbe\xfb\xd5\xea3\x1c\xc7\x07T#G\x96\x8b\xdc:\xd0\xe7\xd7+P \xee\x8c\xbd?\x15~3\xe9\xa4EG/\xfcM'U\x96\xa7\x1b\xed\xc9\xbd\xa8#\xe6\xcd\xd1\xff\xaf\xc2LPd\x0d\xe2\xd8\xc9\xcf\xc6\xfd \xc9\xc6\x03\xcbP\xee\xb8\x91\x1av,f\x0d'\x00(\xb5TqW>%l\x9cN4p\x9aQ\x11\xc0\xf8\x99\xcd\xd0\x00A\xf4F1*\xb5n\xc3\x8ej_c61\xb7\xbc\xddc\n\x1b\x00<\xcc@\xc7>qR\x92\xacg\xf8I\xb5\x93\xe2\x04\xc4\x1a%u\xee\xf3\x86\x9bDw;}\xbdc\xe3\xfe\x04<\xd1\xdaZ\x9e\xe6\xf9\x7fX\x91E\x12\xfa\x1a\x91\xd6\x95-\xd2V\xde\xf4nM:s\xc1\x9a\x84\x8c\xaf\xcd\x8f=\x7fm\x8c\x0b\xff\xfa\xcb\x9d\xb6\xb0\xa5\xc2\xfb\x88\xe6N\x90\x18o\xcc\x19\xaf\x1a\x97\x93ae\xef\xb0?\x14\xdfswT\xc4\xde\x1e\xf6N_\xf9XL\x884\x12kz\xe7\xf44T\xb4\x8b\xdeV\xfc\x05he\xf7\x1e1\x8c4\xb3a\x8cX*\x07\xebK\xd6\x84\xcc\x7fT\xa5\xafP\xd5*\xb4#\xfcOj\x0c:9\xe6\xc42\xb5L\xbd\xfaa\xcdv\x1fV\xdf\x1c&\x99\xbf-\xfe\x8bMK\xc4\xf1^D\xa3=\xa9\x0f\x15\xf0\xd5\xac\xb2c\xac\x9f\xdc\x9dW\x91\n\xe7\xf26\xdb}2\x83\x83\xde\xa6\x93\xde+\x84\x84\xa1A`\xb7\xe3\x16\xa5\x1eO\x86\xb7t\xdc\xda\xcb3s&\x01\xdec~\x97m\xb7\xcc\x9ey\xe4,\x0e\xeaf\x9a\xef\x8b;E\xe3\xfe\xe4{5\xeeOF\xfb\x83D\x7f\xfc\x00\x1f\x83\xa4o\xe6\xc0\xd5\n\xc2r\xee\x034\xa5+\x85\xcf\xfe\x90\x7f\xef\xd4\xa5\x86|o\x0f\x877\xa0\x1as}5\x80eq\xb8Gq\x9b*G\x16>\x9d\x9e\xfe\xd6x\xca3\x12\x05\xb9\x1a\xda\xb7\x03R\xa7b\x0cH\xf5\xd0\x0f\xecC\x1f\xde\"\xcd\xf3\x8bk_tSV\xfe\xae\xefZ\nPeQ\xc1\x19\xfb\xea\xbc\xd8\xb5\x01K\xeb\xe0\xcaH\x92\x8c\x82\xbb\xb0\n'\xf8kt\x1f<=:U\xde\xb8&\xf8\x94\x85uJ\x9a\x8d\xf9\xc4e\xa4\x91\xb5\xd4fg_ D,Y\xc9\xd1\xea\xa8\xc1\x04'Q\x84\xcb\x12\x97\x95\xb6\"\x1b\xb1$\x80y\xbau\xe2\xe8\xc8\xfc\xb4\xe6\xd0(\xf5H\xff\x83\xc7\x08\x93\xc6<\xb7\xc2\x99`!_\x1f\x1c\x14\x9dE$\xb2ny\xd2(0@\xb6J\xd5\x82\xa7KF\xa3ig\x16\xe4\xb9?\xfd\x9f\x07}\x03\x94\xf5\x16\x92\xcd\xe3X\xf5\x8a\xe0\xf8\xb5#\x01;\xd0\xa3\x85uC\xe4\xc0\xd0?\x9b\x0e\xe3\x14\x10\xbd\xab'\xd7+U:\x0b=\xc0\xd1\xf6\x8a\x9f\xe0\x14,\x17S\xb0i\xb4\xdd\xf2n\xf8\x0d\x1d\xc6x\x83$EU\x05=`\x0b\xe9\x90\xc9t\x9b\xd7rk\x8a\xd5dE\xd1Y\n&:\xa0N\xca\x89\x00\xdc\xab\xe6b\xab\xb2s\xa9WXBN\xaf\xe7\xc6q\x00L\x19@\xca\xe4\xd8\xb1oTe\x88>\xbe\x7f\xd5Ys}\xae:J\x80\x0d\x7f\xdd\x8bN\xb4\xc7\xf7\xa2\xcel\x0d\xb1\xd1\x1e\xc3ei.G\xd1\xec\xb4^\xe2\xcctY\x81\xdc\xb90\x9e\xd0\xc3ng\xfaf\x87,\xe6\xc7Ly\xba[\x99\x83\xd9\xb29J{@I\x8d\xd62\xf7^0\xa9\"Q\x02\xce\x8b\xcc\x95<\x15\xf9v\xdb\xbd\x9fX\xf3\xce\xb6\xf2\xed\xb6\x9b\xf6\xa6\x0b6\xbd\x00\x1f]\x99\xba\xd1\xe8L\x97\xb7\x83\x9a/\xf8\xa5\xce\xa5\x01\xc8\x08\x0f\xefD:R>]\x08\xe9\x1d?[y\xa0\xccb\x1bEu\x06\xc2\xc7\xc3\\Kf?c\x92\x83SR\xfdom\x10\x86qd&*\"N\xbd\x8a\x80\x8e\xe2\xa4]\xd9\xdflt0r\x01\xc0Ox\x16-k&\xd0\xf2\xc4$\x8fc4\xa5\xdd\x01Y\xdb.\xd0\"@\xf2\x8ce\xe3R?\x0dw\x0d<<\x8c~\xd8E\xdd`\xa2\x9d\x84\x95s\xdfx\xe7D\xaeW\xb3T\xb1\x93z\xb5\xff\xf1\xedoaB\xd3\xcb.\xa5\xab8F+\x1a\xc4\x91i\x1c\xa3\\\xcfB\x10i\x9f\xf6\x10\xc5\xdbY)\xe0)\x96`\x94\xa9\x02\x01\xc6\xd1\"-\x16\xfa\xfe\x12\x85\xb2?\xe0\x0b\x96D\x1a5\x8b\x80\x0f\x0f{\xf3\xb6E\xec~\x1d\xcd\x95\x84\xdd&\x91f\x1e\xb6\xda^\x04`\xbf\xa6\x86\xe0\x01\xe5f>\xaa\xca\xe6\xc2\x95\x96\x8b\x7f[O\x1cY\xfa\x1ft\xc8\xcebS7\xa2\xb5SncZ[\xa5-\x9b\x03\xe1\x9d>\xb7v6c\x05\x92d\xe3=T5\xfb[\x81c\xeeQ\xda\x1d\x0c\x83;\xa4,K\xa2\x7fw\xaa\xb8c\xc8p\x17W\x94\x99\xd1=x\xf3\xbfm\n\xe0n\xfc'\x13@\xdcc\xfaOz\xe8\xcaT\xbdD\xff\xfe\xeb\xfe\x08\xdf'\xd1\xfdo\xed\xa9\x7f\xc4\xd9N\x97\x84\xcc\xce3~\xcb\xaco\xccs\x1f%\x8f\xfb\xe6\xe5/\x92(\xf9\xee\xbbC\x12\xcd!\xfa`P\x8e[\xdb\xb3gib\x19w;\xe9B\xaa.eq\x0c\x84\x9b\xdbr\x0c\xef\x9a\x15\xdb\xc2^t\xff~\xb4\xd7\xba:\xf6\x84\xef!5\x8a\x92\xf6<\xba\x15\x80\xc1v\x17\xaa(\xae\x84\x9c\xdd\xb2PQ\xb4;\xef;u\xac\x0b&\xefX\xeco\xa9\xa3\xc4\xc4\xc1!\xe6\xe8||\xff\xaa\x0d\x0dW\xcdL\xdeC_\xf5\xaa\x18_\x90\x97\xe2\xe2kU52\xb5V\x05\x0f&\xe5%\xc2\xa4\x02]=|\x15\xc7]\x14\x99\x8d\x15e\xfat\xba\x04\xdcBH\xf6G\xd8Cg\xf5\xb5\x0d\xc16\xbf\xa4an!\xcd\x027\xe2`]\x01\xf0j\xbf\"\xab\xec\xc4\xf5\xd5\xdc\x95j\xe7\xaa\xf5\x06\xbe\x0b\xa6^p\xc5\xe4e\x9a\xd7DQ\x82\xa6MU\x14\xf4\xdb\xc9\xa0\xaf\x1f\xea\xff'\xc0\xfb\x12\x07\xe2\x1f\x1c=\xf8\xaa\x97\xc0\xffq\xff_\xff\xea\xfc\xef\xdcz\xe3|\xcf\xd2\xa9\xea\\\x0e\x1e\xf6\x06\x87\xbd\xc1\xff\xe8\xfc\xab\x03v\xb0\xf5\xd4\xcf\xd6PIo\x99\xf1\xde\xdf\xc5\xff\xe8\xfcK\xa7\xd6\xbd\x7f\x1e\xa7Sv&\xc4\x05\xe9\xbc\xe0\xd3^'\xe5`\x98\xbd\x93\xce\xe7Y\x9e\xa5\x8a\x15=[\xec\xc3\"+:\x05\xb8\x1e\x02\x8f\x1e\x9d\xac\xe8\xe4\xed~B]\xcf\xe6b\xad\xab\xd3\xa7\x9e\xe9*^\xbd8z\xfe\xe6\xe4yg\x9e\xe5\x96\xd8\xc4:R\x08\xd5\x99e\x92M\x95\x907\x1d\x8d\x1d\x04\x0d)\xc9\x98\xee\xc0\xfdK'6q\x00z\xde-doC\xd5\x88cK\xdd\x98\x0b\x8d\x06\x8aQ\xf5\x89\"3/\xcc\x82\x8f8y\xd8\x1f\xf4\x0fI\xda\x9aKo\xbb4\xb7\x99\x1e\x92\xa25\xd3\\\xa6\xe7A]\x8fH\xde\x9a\xcd\xac\xdb\xe9R\xcc\x98\xcd\xf9\x98L\xdb[\x95BO\x8e4\xd9\x06\xdf\x91\xf5m\xd9.\xb3\x99\xcb\xd6\x7fBV\xad\xd9\xc0\x03\xf1\xb5\xed\xdd\xa0O\xe6\xed\x83\x10\xf2*\x95\xb3S\xc9\xe66\xe7\x01\x99\xb5\x8fc]\xac\xf4\xc2\xdal\x87d\xd1\x9am\xc9\x96\xc2fy@\x96\xadY\xf2\xf4\xcb\x8d\xcd\xf2\x90\x9c\x7f\xc3r:bU\xe5\x15\xf6\x06\x85\n\xaf\xd4>i\xf7\xefC\x03\x7f\x17=!\xcf\xef\xcf\xc4\xb4\xb8\x0f<\xb9}\xc3\xce\x91\xbd\x85Z\xe6\xa3\x8c_\xa62K\xb9\xa2\xd1\x1e#\x9c\x0e\x86|\xd7\x9d,\x10\x18\xf6h\x14\xa7\xf2\xbc\x18Ot\xd6]\x96R%\xdaR\xf9y\x8b^g\x1c\xac\xf0\xdb\xa3 \x1d\xe8\xfc_\xd1\x1e\xdb\x8b\x86\x9d\xcb\xac\xc8T'\xdaS{\x11p\x0d\xf4!\x98\xaf\xf3\xbc\xb3dE\x91\x9e\xb3\x8e\x90\x1d}\xd8u<\x17|\x7f\xe9*\x9b\xb1\xcb\x0e\xe3\x97\x99\x14\\\xb7\x08\x85\xa1 \xd4_\xc0\xd1Mg\xb3L\xcfN\x9aw\x16,_\xcd\xd7y\xe7*\x95<\xe3\xe7E/\x02\x04\xf2\x92n\xb2\xe2\xb5Xs\x15\x1aC\x0d0{\xc28X\xff=\x16r\xca>\x02$\x14\xe6\xf3\xe9\xef\x0d\x08s\xa2n\xcbp\xc2\xd4nbI\xce\xe8\xa6\xacV\xf1\xda]p\xf0\xa4\xaf\xa4X\x15\x0e\x0c\xb3\xbb\x97*g*\x7f^\xd03\x136\x00\x9a\xa4|\xbb\xbd,}]W\xba\x01\xffu\xf1_\xaf\xf9:`\xa2d\x05,\xa6_y\xba)\xc9u\x9d\x1b\x07\xa3m\x91\xfa\xf3\\%\xe5\x1d\xb5\xb7yBp\x0e\xfe\x9c\x7f?\x83\x1e\xdf\xa0\xc7\x0f\xb0\xe5\xa1\xd8\xce\xf5\x1a\x13\xec\xe5\x06\x01q\x85(\x0d\x06\x85\xbd\x9bW\x8b\xb9#W\xde\xac6XxWs\x14\x94\xd7U_\x05\x92VA3\x80\x80\xbe\xa5\x17A\xaa\xc6\xc8\xaf\x86ok\x12X\x17D\xa2\xb7a\xf70y\xdb\xcb\x8awk\xc9\x1asl-\xf7=\xa7\x9b\xe9Z\x827\x0b\xc3\x109\xdder\xd5\xb9\x05\xe4\x84n.\xd8\x8d\xb1\x00;\xd7?\xa7\xa7\xf0\xe0\x9a\x10<.\x1a\x1e\xa86\xe2\x87\x9a4\x0c\x11z}S\xe3\x91\xb2\x80\x9f\xa1\xb7G\xae\x8c>\xbc~\xc1*}\xd2\x1e\xd0\xcdPaB\x01(\x05\xda\xf2q\x8cR\x1aE{\xf0\x81\x89\xc2\xa7\xde\xda\x15\x8e\xe3\xee\xc9.\xb3#\x8e\x91\x18\xcb Uc91\x98}\xbe#\x7f\xb7\x7f\xa0;5\xa0\x94\xe6X\xf4\xa6\x8b,\x9fI\xc6)\xf7|\xd2\xc1\xf7yuGN\x8d\xc9w\x94c\xb2\xa6\xfd\xe1\xfa\xfb\x1c\\\xb1N\xc7\xeb \x0d\xed\x04\x1eL\x86Ae\xd3\xd2x{e\xce\xc1\xb4\xeecQ\xcd@N\x1b)\x9ef'\x8c\x82\x10\x8c\"\x87QX\x01\x80{\xf7\xcc\x96O2\xa2\x03 \x03\xf3\x1b)\xacTA\xe0\xa4&\x82\x9c\x82\xe3\xfb\xe4y\xcf.}Y\x1d\xed\xbf+\x18wG\xf2\x94U~2u\xa7][`\xa8N\xcf\xc2Sz\xff\xaf\xfb{\xf7\xcf\xc9\x11\x1dO\xaa\xe5\x7fa\x96\xdf\xba\xb99r\xbcQ\xcb\x15?\xea\xad\xc4\n\x05\x16\xf9%+\xd6\xb9\xa2\x8c\x08\xbd\xa0\xef$\x9bg\xd7T\x11\xd1\xd3\x15\x02\xe5\xd0\xdd1\x12\xc2k\xaeh\x9f\x08\xab\xeb\xba1\xc5\xcd\xc0M\xe1D\x01\xc8\x97pb\x0b&\x92@\xb1\xa4\x1f\x0c\xfc\x9d\x1e8s\xad\xc3\xe6dA\x07l\x84\xe9\x83 \xbbn\xf8O\xd3\x93A\xff\x87#\xaf\xa3r\xe4Ur|C\xef\xddi\xb0#6Tq\x95iX\xbd\xc0\x9biZ0GEN\xe0\xc3:kO \xf7\x99d\xe9\xc5\x10\xe2\xedvHlY\xe57\x80\xa9\xa4\x93A\xf1N\n\x05Kph\xe7M\xa8 \xa1\xafP#,\x19\xf5\xa2\xbd7`\x8a6\xe1\x98@\x0fs\xda'\x9cV\xe9 \xdf\x8b\x92\x88\xd4\x1d\xc3\xab\x8ay?\xa5\xfd\xe1\xb4\xe2WL\x1d\xf3~M\xf9\xde\x1b}Q\x8c\xa7\x132\xc5\xc3|\x8f2T\x905\xcc\xa5w\x14\xef\xe6#\x94Jp3{{\xfa\xe6\xed\x87\xd3\x8f'\xcfO\xdf\xbe?\xfd\xe3\xed\xc7\xd3O/^\xbd:\xfd\xf1\xf9\xe91\x98u\xfcHT\x0f\xe4\x8f-E\x96\xde\xb1B\xf5Q\x1d<|D\x18v\x8e\x00%X\xd06g\x1d\x93\xd4\x1cbRPs\x15hx\xd3\x9c\xfb\x10 \xd7u\xdf\x06\x8b\x93\x9cz \xf2+p\xb9\xb9~4\xdc\x088E\x1d\xae\x85'\xbd%\x05\x04 \xd6@\xcf\xaa\xc0\xfau+X\xbf6`\xfdzR\xd9aV\xe3\xf5$P\x13\x9e\x8e4<\x9e\xe8XsI\xac\xef\x80\xfa\xd7\xb7A\xfdk\xbcq\xd0\xfe\xba\x12\xa0X\xd1\xfep\xf5\xfdz\xb8\x02\xa8\x7f\x15B\xfd\xab\x1d\xa8\xff\xeb\x17\xf4-\x00{\x0e\xbb\xd2\xd0\xb0\x8f,\xf4\xd9v\xf7\x07J\x95 \x0e\x00\x87\x8a F\xab6W\xe4t\x9a\xe6\xd3u\xae\xabZ\xa4\xfc\x9c\xcd~\xccT\x91(rj\xd7\xf37\xe3\xf3\xa4\xfe}\xa0#\xd4B\xb2tvd@h\xf2\xce\x12\xcc\x0c\xfcs$x\xb1^\xda\xaf\x12\xf7\\j\xd0\xf4\x9a\x9c:@\x9c\xe9\xdd\xe8\x8aPV\x8d\xce\xed\xf3\x0f>\xe68\x05*\xe6\x8ep\xb4\xa2\x1fzg\x19\x9f\x99k(0bfX\xecL_\x01\xae\x8e\xf7l\xde\xa2\xe5P{(tfK\xb5\xab\xe5f\xbb\xef\xea\x9cH\xb8\xac\x13sYd\x05p\xe4]\xcf\xff&\x86\x14wg\x15Kr\n\x86!\x199\xb5\xca\x13\xfb\x03rjQ\x18\xdf\x9f%[\x8a\xaf\xbc\xf1\x0b\x87\xeeM\xc5r\x95\xcaP\x08|\x04\xf0\xac\x82\x9a\xd6\x05;J\xf3\xfc,\x9d^\xb4o\x9c/\x08\x87\x99 \xcd\x15\xbck\xc3\xb9r&OX\xec\x19;[\x9f\xc3\xde \xa7\xde&>\x9f\xcf\xd9\xf4\xee*M\x96\xb0\xc6\x17\xcb\x95\x06\xbb\xb3Kf\x1c\xc0\xee\\\x86\xf5\n\x9a\xd9m.[\xd9\xab\xf4F\xac\xd57\xf4#\xcc\x18\xf6\xe6\xf5m\x8b\xe3\n\xea\x0ca\x81\xf7l\xb6\x9e2\xf9\x95^\xdb\\\xf5\xce\xb6\xef\xc8\xaa\xc8\xdcH\"\xea\x8f&\xc1\xac\x99\xd9P\xb7L\xf6K&\x8bLp\x1aY>G\xf4\xdf\xc1#\xd9\x9f\x89\xe5\xff7\xf9$}\xe7\xf0\xe6\x895\xeat\xf0\x00W\xf0e\xfa\xff\xd3\xce\xff)\xed\\\x03d\xb2\x06\xb7\xa4\xe8\xe0\xe0\x11\x0ef\xb5\xa8p\x05\xe7\xdb\xcf\\\xff\xd3\xa6\xb3E#\x91m`\x05?\x0b`|S\xdex1\"N\xa65\xb9\xb1\xac\xe8 n-(Xi0\x10\xa9\xb1\xb4\x9e\xb5\x0e\xafLxN76k\x0d\xa8\xb4\xb2O\xac\x0cP\x8dY\xa3\xd3k\xb2\x82\x8c\xbe\xde\xc2vg\x1e2\x8d/A\x85\x16\xd2\x97\xe6\xe7\xdc\x10I}\xbd7M\xf4S\x81\x95\xa8h\xcd/\xb8\xb8\xe2\xfb`\xdf9\x1a2\x07\x99}0\x16\x1b\xcf\x11\xc7\x8d\x83m\xbbV\x909Y\x00\xa07sl\xec\x9aA}\xacg[\xafR\xdeX\xa5\xc1\x93\xc7\x16\xb6\\\xd2\xe9\xb06e\xdb-Z\xeb9Y\xd1%.K$\x89\xb2\xf0!a\x1a\x18\xacw\x0d\x9e:\xc3B\x81\xd2MF\x86\x01B=\xf9\x07N\xee\x99{\xff\xcf\xc6lB8\xbd\xf4\xb2\x82F\xb1\xb7\x8b\xf6\x07\xdfs\xdc\xe8\xf1\x93\x87\x00\x0e\xeb\xf4\x0b}6\xac\xe7mv\xadd:5\xde\xe0\x8bf\x11\x03A\xd7\xe4\xeb/\xacy\x0e\xaaz0\xdb\x1fnV\xacp$M;\xce\x8c\xf2\xb1\x9c\x90\x82*\x92S\x00\xa9\xdf6\x81\xd6|\xa7{OH\x8e\xf1\xf0\xed8\x9f\xd0lh6x\xd6[-\xd2\x82\xcd\xde\x1b\x03b\xc0?\x07%~]\xe5\xd4\\6Bwj\x8a\xa7\xcd\x06\x04\x8e\xe3+4\x1d\x8b \x1c\x99\xa1\xa0\xdd\xbe\xa5\x83\xf5d\xa3\xbe\x11\xbaB\xbb\xb1P\x8e\xe8r8\x11\x96\xa0\xd8\x15\xcdn?\x06\x7f\xf2\xb8,\xcb\x90gT!'\xcf\xc7l\xd2\xdc;\xfd>\xcc\xebs\x10\xdc\"\xa7\xf0\x13\xcc\xe6\x98Oz3\xb6\xd2 \x16\x9ff\xac\x80\xfdqA\xc7\x13\xf2\x96nJ\xf2\\\xff;\xad\xed\x93\x13T\xd9\x8c\xd4=\x05\xb2\x9bQ~\xc9\xe6hG\xffEa\x7f\x82\xc6\n4~\xbag\xbby\xb6\xdb\xb3\xb1\x9at)5\xe4k\xfd\xb13\x90\x03\xa20\x1e\xea$*u\xd3\xfd\xb2\xe4q|\x8d\xcca\xfe@\xbbu\xfd,\x15\n3\x04j\xfe&\xa2\xe7\x04moO\xa9\x03\xc9`\xa2O\x9f\x9a\xa7\xe6\xe7\xa8q]\xbc\xb0H/\xa3`I\xa4n-\xc3S>\xffn^\xc0\x8f\xfb\xd8i\x9aYC\xb3o\xc4\x8c\x0d\x0dF\xb1@\xbaY\x14$X\x04\xcfx\x9f\xf4m\x03U\xfd\xe9\xe8h\xe4 \xe1\xc9\x11\x1d\xb3I\xf2\x94\xb2\x90$\x0e\xbdz\xea(3O\x89\xa2GzA\x8e\xa8\x1d\xd3\x0bc\x12F\xaf(\xa3\xfd!\xabh\xbflo\x0f\xbf@\n\x0cQ\xddB\x8e\xec0\xa4\x9a\x04?Gw\xaar\xd8\x98\x90\xca\x877\xb0\x80\xcf\xe8\x1br\xac\xef\xb6/\xb0\xab\\\xfaG\x847\x96l\xf4\xd4P5)\xa5G\xdb-z\x8d0y\x8fBR\xd7\x8f\xc1Q\xf8\x82\xc36\xf1\xf0\x0b\xed\xf6\x87\x81\xe1\x8cg\x0e\xe6\xb3\x8e\xfc6\xbaU\xf2\x11\xd9w\xe9\x1e\xbd\xff\xefq\xf2t\xff\xcf\xd3t\xff\xcb_\xeb~\xff\xa8\xbf\xaf\x7f\x9e=\x84\xff\x8f\xe1\xe3\x18>\x8e\xe1\xe3\xe0\xf8\xf8\xafu\xff\xf0\x11d;|\xf4\x0c\xfe\x1f\xef\xff\xb5\x1e\x1c\xeb\x94\x83~\xffh\x1f~\x9e\xe9\xff\x90\xed`\xf0X\xa7\x1c\xf5\xe1\xe3\xf8\xf9\xf1_\xeb\xc3~\x7f\xb0\xff\xd7\xfa\xd9#]\xe6\xf8 \xa4\x1c?;\xd2\x1f\xcf\x8e\xe1\xe3\xf8\xf8\xd9\xe4\xff\xad\x1d\xfbk\xbf\xd7\xdf\x7f\xa2\x9b\xfe\xf1\x91n\xa6o\xda|\x08\xcd\x1c\x1eC3\xdf\xf5'\xff\xbaw\xbf\xc5\x98d\x93\xff\xf9Y\xdf\x8e\x16lz\x01z\x9a.W\xb1^\xad$+\n\xc0\x00\xb9z>3\x12\xcd\x9f\x0c\x94\xe7\x93\x7f\xbe\x99\x99\xa7\xc5'\xa8\x9b\x9cy7p\x9d\xdb\xfc\xc0\xfd\xa1_\x07\xce\xae`\xa6\xfb\xa4; \xccP\xfe\x8c\x05D2\x1eGf\xbe\x8f\x16\xa9,\x98\x8a\x88\xfd\xde\x9f\xda\x88 \x19G\xd3<-\x8a7F\x9c\x19\xc2\x10\xabA\xefc!#`\xc5\xdb\x18\xb5z\xfey\x9d]ZE\x8e}\x06\x1f\x93;\xe5\xd6\xd9\xb8?\x19\xfe\x01\xd6\xbb\xa0\x9f\x8a\x0c\xa0\x9f\xe3\xc1\xa4\xde\xd5hZ\x9f\xa3\x88D3\x99\x9e\x9f\xdbp\xb1by\x0e\x13\x1c\x11c7\xfb6Q\xeb\xda\xa4\x1c@cuE\xfbF\xbb\xe9Z\x89\xf7Lc{\xba\x1dv\xad\x98\xe4i\xfe\x9e\x19D\xa7x\xafG)\xd9\x0c&b\xba.l\x7f\xf4\xba1y\xc9\x9e\xe6\xabE\xfa\x0f\xbaRk<\x02k\xc5\xc7\xebl\xabR\x8a\xab\x13]\x81u\xac\xf6M\x15=\xf8\xca\xa4\x02\x08\xf3\x13\xbd?\xfek?\x99\xa0q\xba\xffe\x82\xef\x9fWW\xf7\xaf!\xcb`<\x98\xf4\x94\xf8\xb8Z\xb9\x9aJ\xb8F\xb8\xda_0 W\xa4yv\x0eh\xee\xfeYZ0\xd88\xa9L\xcf\xb2\xe9\xbe\xde\x7f\x1d\x17\xb9\x0fv\x19:\xd3t\xe5\nN\xf3l\xb5\xbfJ\xd5\xc2\x84\xa4\xde\x8eS\x91\x0b\xb9\x9fq\xc5\xe4J\xe4p-\xb6\xc5\xed\xcf\xb3\\1Y\xd84+\xc7h\xbf\x0c R\xdf\xa43\xb1\xccx\x1a\xf6\x8c\x81\xea\xd3\xfeY:\xbd8\x97@\x07\x99gy\xbe/V\xe94S7\xe6\x03:2\xcf\x85\x98\xedC\x856\xec\xf3\x08\xae\xf6\xe7\xe92\xcbmX\xafs\x15\xdaOg\x7f\xaf\x0be#\x94dj\xbap\x1f7\xb9\xcdhi\x1a\xe6\xe3\xcaL\xc7y~\xb3Z\xec\xf3t\xc9lP\xc8\xcci\x94\xed/\x84\xcc\xbe\x08\xae\xd2\xbc%\xf1\x92I\x95M\xd3\xbc\x03\xb9\xf6\xd3\xd9\xe5\xfe\xb5\x0d\x1b\x99\xe2\xfd\xebN\xb6L\xcfY059X9\xdc\xd7\xcf(|\xea.d\xfc\xdc\x8ex\x99\xca\x0b&\xf7\x19\x9f\xb9\xe02\xf3A\xd8\x88\x1dq\xc9$\xac\xebJ\x14@\xc8\xa8b\xd4\"\x9b^p}-\xac\xd2\x8c\xab}!gLvV)\x17\x05\xdb\x1ftV\x02\xd6\xd2\xe0\xe4E\xc7\xf7 \x96\x98\xabN\xb1HWaW\x0b%V\xb6_\x10t\x0bQ(\x99]0\x0d\xa2\xaf\xcf\x17U7\xea\xd1U_\n%\xc5\x05\xdb\x9f\xa5\xc5\"\x952\xbd #\xc4|^0\xe5b\xf4 \xa6\xe9*\xfc\xfc[d\xdc}/3\xa5\x07\xba\xcc|\x81\xa0G\xfa\xf3*\x9b\xa9EG\xb1k\xb5o\x94\x06Lx\xc6\xa6\xc2\xbc\xf4\xe6\xbb\x1a!\xd0\xe9\xea\x93YEU#X\xf3l*fl\xff,\x9be\xfeCj\x18E\x7f\xa9b\x7f\xa5gu\xd9\xb9\xdcO\xf5\xc3t\xc6T6\xed\\\xee/R~\xae[\xb9\xdc\xcffL\x9c\xcbt\xb5\x80\xf8e\xaa\x16l\x99\x9a\xads \x94\xbe}\x06\xc4\xdc\x8e\xdeQ\xb0\x8fnL\xd0o\xa3\xf0\xeb\xa6s%\xe4\xcco\xa1+\x99\xc1\x0eZ\x8a\x19\xeb\\/s^$\xd7y\xc6/:\xd7\xf6\xc0\x7f\xfdip\xa8\x95\xe3n\xffD~\xc5m\xf0C\xfd\x1d\x85V\x92t\xaa\xd6\xfa\x15\xb3_r*E\xee\xbe\x82`\xb1\x10W6\xa82\xe5\xa35X\xf8\xdf\xd8?\xa7\xebzuu\xd5\xbb:\x04\x02\xe7\xe0\xc9\x93'\xf7\xa1\xb1\xa8\xba\xdd\xaf\x97y\x02Z\xa0\x04\x82y\n\xfeAu\x10\xe0\xdb\xbb\xb5\x02\xff\xb3~\xfc\xfe\xfa\x95\xee\xcb\xe3\xfb\xdcA\xd1A\x7fTz\xf6\x82\xcf\xd8\xb5\x06\x06\xa5(\x8a\xb7F\xbb\xe1[\x1e\x9d\xc1\xd7^\xf2?z0\xfa\x9fA\xd9\x15\nE>\"2\xc5\xedR. \xe6ks\xd8\xd7\x1d.\xe4T\xe74\x05R\x83\xbf\x03\xd0\xba|j>\xfe\x8b]\xef\xfb\xf7\xf2w*\xff\x036u\xf5\xa8\xbeD^\xe4\xcf\x90\xc4\xfe\xd8%\xac\x8c\xf4\x1a\x02\x93khy\xcdT\x8c@\xb8\x11\xf0\x96\xa4+\xe3\x18\x1dxD?\x8eQ$@\x8fz\xdc\x9fl\xb7\xd1[\x17\xc6:\x85\x9b\xaf\x81Ny\xe3\xc2\x18\xe3\xed\x165)\x9e\x01\xb3\\\x05z\xd6\xcdT\xe3\x95\x0e\xdc\xf9B\x7f*\xd7'N\xfe\xcdJ\x8cY\x11:OQ1Bt\xd6\xf6nbK\xf5\x8d\x08\x9d\x13\xd6s\xd1z\x88\xae\xb1Q\x977q\xc6$\x9a\xa5*\xdd\x8f\xba\xd4(\xdd\xd7\x16\xcd\x99\x1e!\x0f0\x8e\xe3H?\xb2\x90\x93\xe1\xa1\x05\x9d]+\x03\x10\xe31\xc3\xab\xfcvgs$\xabA\x05\xa3\xc6v\x80v\xdcF\xb8\xef\xd0U\xa6`$\x9d\xef|\xe5z\xb2M\xdc\x03\x1b\xd7\xc9\x8a7\xe9\x1b\xa4\xb0\x89~\xd8\x8c\xden\x07?\xa8\xd2w\x0eH/\x02\xa4u\x11\xb7\xbcji\x0cp\xe9\xdd\xd0\xe6\xc1\xb3\xfb\xc9\x10\xf8\x7f\x06c\xe4\xee\xeb3\x01y\xa8{Fa\x9a\xe1\xd1\xcf\xe0\xc6\xbe\x9f\xa0\xcf&\xa0O'.\x11\x98\xf1\xb6\xd5\xf3\x11\xb3\x1e\x98\x9e:\x8c\x1b)\x9c\x80\xd0y\x10C@\x12 '\xa2\x89~\x8f\xd8X\xd4p\xef \xf55\x1fv\xddf\x8e\xe3(Jx\x82\x14\x15u\xcc\x9e\xc8f\x0c\xdcR\xe4\xee\xde!N\x0f)\xa5H\xd8\xea\xb1\xa1'\x888\xee\x1a\xff\xd3Q\x94\xe8\x0e\x139\xaa\x0f\xe4\xcd \x10\xe2y\xcb\x009\xc6\x18\x97\xbf7\xcfi\xd4.\xeb\x14\xe9\x93\xf5{\xaf=\xb1!{\x85\xc9\xdd\xb5\x06\x82R-\xd5\x06\xa9\xb4!Fe\xee\xaa_(\xd8\xa5\xc3\xe3\xbf\xfe\xfa\xeb\xfe\xe4>\xf9\xf3\x1bT^\xe6B\x12\xc6\xe8\x9f\xdf\xa0\xc2\xa4\xda\xb35t\x98x{\xae\x1d%&\xd9\x9e\xafM\x8bI\xdc\xd2pS\x8d)\xbb5_]\x8f)m\xcf\xd7Td*n\xcdf\x175\xe8\xe5`@\xf2[\x06\xde\xa2\xf84\xbde\xecM\xcd\xa7\xf5\xdd\xf9N\xf3\xac\xb0\xdd=\xe8\x93U{\xe6\x9a\x9e\xd4\xbc=OMQj\xd6\x9e\xe7,\x17\xd3\x0b\xdb\xd8\x80,\xd87\xec\xad]u\xaa%\x0bpL\xdeb\x12\xcdV\xc4\x8c\xa8F\x8b\xe01\xa3\x0b\x16\xc7l\xbc`\x93\xed\x965E\x8f\xedq\xf0\xed\x9d3K\xf1\xe7u\xa1=nU-Z\xc6P \xf6\xf5fY\xb1\xcaS\xb8\xcb\xb6[\xd6\xe3\xf0\xeb\x8bzsr;\x05\xdd\xbb\xe8^\x0c\xce\xec\xbd\x1f9\xc1\xb9\xc8\xbc\x07\xca'\xbc3\x87\xc8D\x8b*\xdamq\x93 }B%Ug\x93\xa6U\x92\xdbE&a\xbd\x93\xf0J\xef\x9a\xb2&;\xed\x87\xe0z\xde\x94hO}-V\xb0\xc5\xcb*\xd9f\xb2\x9d\x0cN\xde\xc9f\xc8YR\xc1\xaf\x1a\xcb\xf1\xe2IT\xd5gZ\xd9\x99\x8e\"\xd2X\x03d\xb4\xbfG\xd1\xb1\x97KB\xc0\xa7\xc7Q\x12\xc4E\xf6\xb9]\xb9>\xc1>0\xef\x83I\x99\xd5SL\x87l\xda\x9c%\xc0\"\x1a\x80h\xaf\x95F\x1a\xb1^(\x8c\x84\x83\xd2\xde\xb7X}\xeb\xdd\xb0\nd\x8f\xa2\xe1LlX\xe2gW\xa5\xe7\x1e\x9a\xb0@\x84\x05\x10\xe0\xe7\x91\xf9\x19\xf4\xcd\xef\x13\x989\xae\xab\x01%\x84\x0e\xf3p\x8d\xe3{\x9f\xce\xd8\xd9\xfa\x1c\x04hA\xf6\xda|\x9f\x009\x93d4\x18\xbf\x81+\xc0\x84\x0b\xd7\xf1\xd2\xc4c\"iF2\x1aED\x8c2\x1auP\xaa:\xd1\x9e\xe8\xe9\xfd\xf7&\xb4&\xf0\x0b\x89\"\xbc\x17%:Qc\xaao@I\x02\xd6\xc0\xc8*G\x1dd\xb8r\xb3\xce\xd9\x8d11\x83#L8\x8d\xfe\xe2\x9dN\xa7\x93\xf1N\xb4\x87\xe4v\x1b}4l\xfa\x08\xefe\xa5\xda\xa3\x9c\x18{Jz6\xcb\xabE\x96\xb3\xc0w\xbf\xaa\xa6\xf6\x12\xa6\xb6\x0e|\xda\xb3V\xc1\x955\x05\x8e\x9a\xd6\xc6tG\xcf\xa3bI&\xfe\x0c\xd7!\xc7(\nXjg,\xc4\xc6t\x07l'\x014\xe5b\x06\x13\xa6AQc\xe8\x066R\x0db\xd5\x80:\x108\xcf\xc4ud\x150d:\xcb\x0cX\x1f\xb0\xcb\xae\xa1)\xd6;\x05\xf2\xf7\x07\x99N/\x98\x04o\xc6\xb5\x98\x16Y@\xe8\xe4\xc8\x93Q\xad\xe3\xc9\x88p\xdaj\x0b\xbfr\x16a\xe4\xf3\x9d\x1e]\xc5\xfc!\xe0\x04)\x8a\xf6<\x8f\xb8\x85\x8f\x1c\x08\x99\xf2V\xbb\xa1\xe0\xbb\xfd\x96\x94\x82)\x87%A6\x92Q\x88t[\xe0\x16\xb5\xfc6\x972\xed\xd62D\xa5\x02\xdfb\x07\xc3\x0c\x8ed\xa1\x9b\x04\xf06qG\xbb\x81\xe2\x7f\xe8\xc3\xaa\xc4`\x19\xe0\xb7\xa6\x05\x1b\xdb\x0f \x8d\xff\xb6c\xdd\xcc\xf4\xa0$\x85\x12+X\xd9,\xf4\xe5\xba\xb3\x0f\xccI\xb6f!\xf5\xaa\x94%x\x13\x08\xf6\xcf\x95{\x00\xbbl\xc7ce\xbd2XQU!E\xe6\xca\x81m\x02\x1dEf\xf5\xbdXx\x1c#i7\x19\xeb\xd9]6\x8a\x94\\\xb3(\x89\xe6i^\xb0(\xb1\x9e @\xe0V\xe2\xaes?\xec\xc6\x8e\x18\x06T\xdb\xf7\xf6\x82\xa1\xc0\xff\x94r\xd5z\x8d8\xb4)\xf5\xa4\xd7Yo\xde\xe3j\xc0\x9dsq5\x97\xac\xb66\xab6\xc2G\x0d\xbe\x9b\xc9\x81q\xe0\xf5\xd92\x83\xabZ?L\x92\x15\xcc|\xb8\x97\x1e\xf6\xd0.\njoU\x16\x93 \xed\xf6\x03\x13\x9d,\x94,\x16tw\xa3\xdf\xd3\xd0\x0f\x9f\xb8\xfb\n\xc2\x8e\x17\xdd\x05\xb2\x13\xaa\xc5Q\x81\x89\x88c\xe9\xe2\xed\xdc\x9f\xb8d\xfd\xfa\x81\xc1R\xd3\x87(\xda\xd3\x8f\x00&V\x95\xda\xf4\x9d\x85}\x87\xe1\x8e\x85\xed\x82\xbe\x0d=\xda\xa9c\x8b\xaaf\x102E\xa6i\xd1\xda4\x1e\xba\x93\xa6Qi\x9d\xc7\x8a\x16\x80\xf6\xb4\x8e\xc1\xa5\xcba\x1f\xee\xa0\xdf\xd5j\x1c\xd9MS\xa9J\xf5n\x11\xa1i\nK\x06*\x85\xeeq\xaf=\xd9mo\xba\xdf\x8e_9\x02\xe1\xf3\xfd\xa2\x01X@#\x95\xb2\xa3U\x1b\xa3\xd5\xf6#\xaa\xf1\xbc\x13\xf7\x1e\x05\xa3l\x8e\xe6\xc0\x88\xd3\xd6\x15Y\xb9\x913\xec\xa2\xc1\x0f\x94{\x9f\xda\x8d\x92\x87\x18\x10\xb3q\x7fR*\xcaK{\xc3\x83|a\x04\xa8\x93*o\x83\x00\xec\xdc\xe8m\x13J\x1b\xd6\x06\\\x7fcw\xdf\x94@\xd5\xd4\xecB\x8e\xbb\xfe\x1a\x0d\xdeL^=>a\xf9\xc0n\x83\xbbmZ\xae\x1an\x9f\xae.\x95\xad\xf7\x90\x0c-\x03\xd41,v\xad\xac4\xd5\xd0\xdc\xef\xb7\xaf\xba\xb3\x10W\xbd\"A\xff\xadJ\xec\x1bFo\xe52-\xd42\x8f\xc8\xab\xd6\x1c\x07\xfd~\xff~qy\x1eU\x04\xad\xd7!*\xeapP\x9d\xc5\xe1\x8dw\xd5\x02\x99\x97\xa9Z\xdc\x91\x1bxv\xafS\xb5\x80\x7f\xaf_EM\xc4\xf4\xce\x81\x04;\xe2Y\xfdf\xb7\x04\xb1\xed\xf6\xee\n\xc0G\xd6k \xb5\xdf5\x14\xe34+\x9a\x0b\xc9\xb2s\xfe\xd6\xab\xe4\xab\xd1\xdd\xd5'F\x91\xf8\x98\x91/m*:mf\xcd^\x9f<]\xad\xe2\x18~z\xec\x9aM?\x82\xd3\xcbWb\x9a\xe6\xc7\xb6\x86\x8aQ\xe2\xa5[\xef\xcc\xdf\xe66\xdap\x02J\x8c\xcb\x84\x95M3\xdc D\xed9\xa9\x1f\xdf\xbf\xe8R\xfaJO\xa6\x17\x03\x8c\xac\xa7\x01\x1fA\xd5\xd0\xdf\xf4\xe8\x98\xd1c\xb6\xdd\xb6K1\xa3h\x96]F\x18\x07e\xa3\xef\x8b\xcb\xf3\x1f\xa2=U\xb9\xf0\n\xec\xbb\xeeE\xdf\xdf\x87t\xa2\xe81\xeb\xcd3Y(x\x7f\x87\xb5\x0f\xec\xc0Wc\xad7L32\xfdC\xd5\xc8\x1e\x1a\xf7\x0d\xd3\xc0\x96l \xfe[\xdd\xff\xfe\xca\xa9\xb5l\x0c-scb9\xb5\xb1q|\x08,E.f\xecC\xc5V\x04H\x1b\x99\xe8\xdf\xdc\xa9\xad\xdd\x014 \x05\xfdX\xbb\xe76\xde\xb9\x0b\xdf\xf1!\xd4t\xbdC\xf88\xfa\xc4\xce.2\x15\xed\xb1 \x8d\xaelX\xe9\x84\xd7\xe2\x8b\x89]\xea\x80\"\xdc\x08\x1c3\xbaIy\xb6\x04a\x0e\xc6g\xc9\x8f\x0cEO]DD\xaa\xf0s>\x8b0\xf1y\x0d\x89:\x13\xfc\xf6\x12/\\\x96\xb0\x1c\x88\xdc\xdc^\xe6\x04D\xc30Q2\xe5F~\xc4u\xea\x83\x8f\x89H\xf0\x01\xdd*\xc9'F7%\xf9\xccj\x82\xbb?;J\xc1'6f\x13\xb7\x18\xf0\x01 \xfc\xbd0\xda\xe8\xd0+\xc2)DW\xfa\x05\x1c\xeb\xb5n\xa3\x0bA\xf2gV\xab\x98\xf2\xb1\x9aT\x8a\xe6\x1f\xe2\x18}f\xf4\xceS\xd1\x03q\xaap\xaaA\xc5'\xe3^\x89\x00Y\x82\xc8=\xd6\x0b\x17\xab\xfa -\x19\xfc\n\xdd\x9d\x0d\x16\xa4\xfa\xc4\xb5\xc9mv\xa4*_[\xa0\xe0\xcb\xe0\xc0\xbf1\xfa3CQ\xd8\xd9\x08\x93?\x1a\xb1Y\xb0A~j\xa4\x15v#\xfcj\xe2k\xcdE\x98\xfc\xceh\x94\x9e \xa9:\xd3\x94\xaf@\xb4\xd4\xfcZi\xa9\xcelm\xaa\x9e\x82\xfas\x87-W*c\xb3\x0e\xe3Sy\xb3R\x10\x9a\xe9\xff\xa0&\x97\x8bt\xc6f\xb3T\xa56\xb8d*\xf5\x9fFJl\x95\xae\x0b\x06B\xa5\xf0/\xe3\xe7\x9d\x95\x14\xe7\x92\x15EG\xa6\x8a\xd9\x86\n\xc6.@\x9c\x94]\x18\x89\xaf4\xcf\xf570*f\x1d\x95-\x991\x1b\xd6\xb9\x14\xf9z\xe9\x8a]\xa5 r\x14\n\xee\x90\x97`\x05\xac\x8d\xa1\xf3\x89\xa5\x17\xaf\xd3\xd5\xc8\xfe&\xaf\xd3Upw\xfd\x12@\x1a/Y\xef\x9c\xa9\x80\xe6\xdcT\x1egW\x9d\xd7\xe9\x8a\xbc\x04\x961\\<\x1ak\xf1u\xfd\x19B-\x84S\x800Y/\xcdA\xbcX1l/Y\x8b\xcfbE}\x18\x9e\x06F\xd5p&6\xfd.E\x83\xfe\xc1C\xdd$\xc3=#\x9b\xf5!=7R\x01\xae\x08&\xcc\x87=\xb1\xdc\xb1\"\x0e\x0d]'=\x1f\xf1\x06G\x0c\xc6\xa7\x8f\xf9\xe0\xd0\x90\xa5\xd3\xf3\n\xd0Z\xb2\xa5\xc8\xbe\xb0\x19\x80U\xa1\xbd\xa4J8\x03p\xadjD0/\x8d\x82\x1e\xce\xa3\xca\xbb\x96\xed\xcd\xd8\x02\x04\xde\xd9\xac\x9d]\xa2\\\xbf`\x12\xbbM\xf3\x0d)\x1a<~\x1c\"\xaa\xdc\xe5\xef\xa2V\xdf\xeeU\x1f-a\xb3\xe2\x02R\xa4(\xb4\xd2\x04\xc3\xa1 \xcfo\x00\xe3\xab\xbaD\xc2\xca\xb9\xf7\x0e\xc1\x88\xa4j8\xac\xe8\xd4v\x01\xab\xda\x056\x96\xa2.\xad!\xfdZGl\x9e,\x14\xaeA\x92\n\xb7\xa8x\xc3\xa9\x1cN\x05W\x19_\xb3\x12j*\xb39\xb2V\x13\xc0&>\x84\x8c\xb2\x1b\x18\xea7O\xec\x10\xaa\xccB\x8cP)$0\x81v\xb3\x90\x96e\xe2\xd50\xa3Y\xaf\xc8\xce\xf2\x8c\x9f\x97m\x93\x0dW\xb9)\x03n\x08l\x1f9\x15D\xd2\xac\x02g.\xc12Ww@r\xdf\x9d\xdct\x07$7\xf0\xa6\xd0\xe8\xa8+\xe6\xc7\x94C\x9fL\xa2\xa4\x82p\x9f\x98\xd3\xdcwL\xaf^aF\x9b\xbb\xc1\xb7W\x9f\xe9Zn\xab>\xd3\xed\xdfZ}s\xf4O0.\xcd\xf0\xfd\xea\x81\xde[S\xe7\xb3of\xe9\xb0\x0b\xb2Q\xe9\xf9]\x1b\x8aW\x1abN\xe7\xd3\xc8\xb5$\n\x88\xf65\xdet\xa56\xcd\x86f\xac\x0f\xdc\x91\xden\x1f\xba\xa0_\xd0!P\xec\xcc\xc6\xb0\xbfv\xb5\xa8\"\xca\xe1\xb5C\xe7\x8c\x0c\x90(\xbbM\xe1N\xea*7!C\xa7\x07j\x8ao\xb7.D\x9b\xec\xf3\xea\xf6*}i\xdf\xa8\x0d@\xdbn\xaa\xdb\x0f\xbeT5\xe2\x01\xddA\xab\x0f\xfb\xc1\x1cZ\x0bq*\xd9\xb1\x16\xd5\xb4\x906B\xc6G\x90U\xe3\x05\xf6\x15\xc3 \xf2\x8e\x90\xf4\xd7N\xa11\x9b\x80\x80G\xaa4\xca3fDM\xaa\xae\n\xe5\xc8x;\xadW\x0e\xe1\x8cLQ\x1c+\xc3F\xe2\x84\x19\xa43S\x0de\xc4\xd4\xdd`\xc1\xa5u:\xb3\xa2C\xaf\xb2B1\xced\xa1\x9f\x91*\xday\xc4-v\xe9\x0c\xaa\xe9\xd0\xad\x12\x17\xec\xb2^Vh`,=\xb7p\xa3X\xad\xd8\x0ca\xf0\xf5\x06s3\x96\x13\xc2\xc1|\"P\xc4U\x1c;\xd5\xeaa[\xaf\x9c\xa5\xbf\xdd\x8e\xb9\x94\xacx\xc7d\x01\xf9\x15\xc2\xdbm\x9d\xa9(Y\xce4\x14\xceB\x9aE\xa1\x02a\x0dc \x0de\x8aJ\x852E\xf4\xab\xc2h\xa6H\xe6\xcc\x0cBVX\x92Ta\x92\xedPc\x1e\x18j\xcc\xda\xc63\xba\xaai\xaf\x87<\x8d\\U8\xa7\x11/\x04el\xdd\xebBN-\x00\xba\xddZO\xe1\xbd\xa9\x90\xc6\x1f\xea,\xe3\xe7\x1f\x0b\x07\xa1\x82\x012v[*&\xe6\xc1u\xe8\xce\x88\xf5V\xa9\xbe\x04\xf4\x85\x90\x04\xb4\xcd\xa9\x7f\xd9>4Yv\x88\xd1H\xf0h\x8f\xe1\x8cw\xbc\x1b\x1bw l\xb7\x08\xa9\xbb\xa1g\\\x97uc$\xb2\xcf\x97\xc6\"\xda$z@\x9b\x94(c$H\xd5\x8cY\xae\x94aM+\xb1z\xc5.Y\xfe\x01,\xb1\x9a\xd5\xe7`e\x04 b\x17e\xa6T\xef\x13\x17\x03\xfbE \xe9\xec9\x18\x8b\x91\xebj\xdf\xae\xd5\xae\xcd\xc8\xb9\xaaQ~}n\xf7 \xeb2u+\x9a\xb5\xfe1\"\x8cb\xf5\xc9M\xa1\xd8\xf28O\xcf\x0b\xb0\x9e\x19\xf6X\x11Q\xebneR3\xac+a\xa4YS\"IPO\xa2HUK\xc2\x89\x1fo2\x9e\x04\x9bo\xa6j\xb4._\x82p\x03\x0e\xea\x9d\x00\x1e\xcf\xaa\xf9\xb2~\xab\xecsf\x8e<\x80 z\x8bI\xf32P\x19\xbe7\x82\xab4\xe3L\xbe\xe0sQ=\xdcC\xe9aQ\xe9\xdf\xf7\xa1\xa4\x87][\x8d\x81\x7fn\xad\xc9\xda\xab0\x0f\xc9\x83.@V\xe6\x1d\x8c\xe3\x87\x96\xae\xbc\xdbm\xc2\xe9\x07\x8e$\xb6P+\xc75\n|sW\x00-~\x03\x10\x9dK\x19\xf3\x89\xb5\xe2\xa5\x0fn\xb8tx\x08F \x82U\xf2\xce\xde\x82\\`\xee\xab\xb9vC\xcbZD\xe9\x96>\xfc\xae2r`o\xb4\x9c\xf6\x87\xf9\xf7\x17\xaeS\xb9\xb3\xb39\xa5\x17\xe3|2\x9c\x82\x03\x9ei\xddz\x02H\x98fD\x90\x14\xb8\x19\x85\xbe\xca\n2\xc5\xb8,\x14*\xc2\xabo\xa1\x02\xd6[\x17\xf0gPPo\x12\x16\xa7R\xe4y\x94\xfc\xa4\x90\"\xee\x8bt\xfb84N\n\x1a\x8bV\xb0\xe5,_K\x97\xdd\xc4\x83\x00\xbd\x89\x80D\xf8\x06)\x0bd#8\x88\x1d\xdb([\x08\xe2\xc2F\xa6z1r\xdb\xca4\x17\x05\x8b\x12\xb8\xb8\xe2\x18*g\xcd^e\xc6\xff\x92\x93\xbe1\xdc@\xf3a\x98\x81\x89\xc9\xec\xa8\x9b\xfb\x03J\xe9\xef,\xb0d\x11\xc7\x7fXsC\xdc\xa2_\xd0+\xa3\x0b\xbeT\xe4\\\x91\x1bE.\x95\xbe\xe3\xcf\xf4UE\x9cE\xda+\xfb{a\x7f\xdfV\xa8\xdc\xf3*x\neN\x14\x8d\x96b]\xb0\x99\xb8\xe2\x1d\x08\xadW\x1d%\xd6\xd3\x85\x19\xb3 \x03z\xaa\x03\x06\xdfM\xd7\xd7\xd3<\x9b^tfg\xb9 Xm'[\xc6~A\x9d6\xbc^uf2=\xd7\x15\xe9_S\xcfL\x8aUg*\x96N\x1fH\xa7\x06\x9f&\xd3\x05\xbb\x81\x8a.\xd8\x0dh\x12\xeb\xc0ze\x1c\xa1\x82\x8a\xd1\x0b\x08\xc1\xaatl\x07\xa6bu\xd3\x99\xae5f^(\xd61}\xb4\xe8\xb4\x95{]2\xbe\xee\xc0Zt\xec\xf2\x84\xf8\xf5\x07\xfd<\x80~\xaa\xde%\xb6\xeb\x8a\x99P\xce\xd2Kf&K\\2iC\xba53V\x88t\xe1\xb5\xea\x9c\x0b\xe5\xe7\x07\xd40;\xb9(\x1aQa\xeb\xd5\xa3\xf3\xb7\xbf\xfe+\x93\x05\x1b\x10Me\xb3\xb7Yo\xad\x0f\xe8Y\xceN\xe5\x9a\x7f\xca\xd4\xe2\x9d\xcc\x84\xcc\xc0s\xcc\xca\x06k\xf6>o\x94q>\xe9\xcd1\x1f\x1aZK\x88)Z\xaaI\x8d8\x1e6nh\xe8\xf0T\xdf\xf6J\x1b\x89\xd52,UG\xc1\xde5\x01\xef*g\x13\x02\xfdE?\xb8\xe1\x19#\xbb\xebB\x82\xf6I\xe3ynY\nX\xeb\x10\xc13\xec\xc3s=9\xa4>\xcf\xdd\x81\xd3\x95\xe9\x07\xbcB\xffv\xbe3\x0f\x10\xf7\xbb6\xb4\xca\xac\x905F\xa6\x1f\x88a\xff\xfb3o7\xc5\xd9Z9S\xe3\xfed\xd8>\x0d\x1b\xee\xc9_\x7f\xf3p\x01\xf4.]\x02\xcd\xb0\x02\xc6\xfe\xeb\xd3\xe4\xe6hT\x1b\x7fr\xa6\x9c\x9b{\xc7\x97\xbfVq\xfcN\xa1kP\xe4\xb9v\xf6-m\xe2\x95I\xbc\x82\xc4\xabF\xe2\x85I\xbc\x80\xc4\x0b\x97\xf8VyD\xf6\xbd\xc2\xe4y\xed\xb3\x9a\xcdW\xf6r\x0c\xbb\xe7X\xad\xf5]F.5^\xa2'\xbdO\x82\x13RL\x17l\xb6\xce+\xf3\x8aA\xda\x1b!\x97i\xee\x0e\x0fy\xa3pH\xf8{\x0d\x9b\xb5\xa2\x1b\xa2\x8a\xa7\xf9J\x19\xb7\xeb\xd9\x1c\x05\xeb\x8b7\xaf\x14\x82\xb5%,\xf4\xf3:\x18\xf2`\x13p\x07\xd0I\xbd\x0f\xf8d(kC\x03q\xc7\xc6\xd0\xf4M\xa8\x01\xd7j%^\xe9\x95 \xac\xb6\x00\xaf\xf4\x02\x04q\x17&\xee\x02\xe2\x82\xe9\xae\xcf\xb6\xd2P\xb2\x06\x88Ok=D\x92\x9e\x82\x0b\xda\xafw\xce\x10v\xfaU\x05\xde0\x0f\xe2\xba\x92~X\xc9\x10\xbf\x80\xe3fs\xf0*%\x8eO\xabM\xa7\xe7\xe7\x198%9\xae\xe0\xa6/U\xf0\xa3\xa2c\xc3i\x88\x88\xfb\xfd\x8d\x91\x8aQ\xf1\x9c\xcf\"\xf2G\x18S\xf1\xbd\xc8Oa\xbc\xe1m\x91\xc8r*L\xe8\x9d\x0f\x05\xdc\x8b*\xe9\x83\x8f\xa834\x82\x88#\x17ay\x1c\xf5\x90\xe3w\xec\x84g\xf5_)\xc1H\x8a\xfb\xdd}S!\xee\x9d\x89;\xf2q`e\xa2\xf6c\xf8(\xfe\xe3Y\xf8\xe1\xd8*>\xe2u=\xa2\xb03\xa4\xc3'>\xbc\xf3\x8a\x9b\xc8\x9d\xbeX\xb6L=dY4\xf5\xa0\xe5\xce\xd4C\x86SS\x0f\x19\xaeM-Tqp\xec\x87\xf5\xeeB~e$`S\xc1\xb6\x88\x1c[\xa7\n\x05\xd4\x86\x1f\xed\x8d3\xaf\xf9i\x0e\x04\xb6\xe8\x81;\xbfl\xcc'D\xe8\x9f\xbd\xc1\x84d\x86d\x82\xc4\xb8\xdf\xb0h\xb1'\xac\xe2\xe8\x00\xe3aF7\xb7\xd8\x96K6g\xeb\xb3\xb3\x9c\xcd\x92\x8c\xd8I\x9d%\xd9^\xe4\xe6\xb2$\xa1m\xb6d,'\x06\xeat\x17X\xa2J\xf2\x05\x84\x9e5>\x88\xc9\xb1\x0bg\x98\xaa\xe3)3\xb1>\xcb\x99\x8d\x0c\xf0\x91\xe7\x0d\xbc$=?\xa90\x14\xf8g\xb0\x01\xf3\xdf\xe0\x1e\xee\xbf\xf1\xb4\xeb~\x03t\xe5Y\x13my\x17\xe0/\x17\xec\xe6\xe3\xaa\xd3\xc0\xbd\x9e\x85X\x18\xfc~\\Y\x1c\xc6\xfd\x07Nc\x9d\xdf\xd8\x8e}\x1d\xdd\x8a\x8b=\xab\xe3e6\xf4q\x15\xf2*\xa57\x0fm\x91$\x8b*U,L\xe0\\\x9e\x81}\x08\xf3\xb3\x835\x1e\xb5a\x90\xcf\xeb\xa8$\x04\xcd\\\xd7\x98\x9e\xe6\xc3\xde_!f\xd6\xc7D\xef\x1e\xbdD\x1d\xff\xaf\xc2\xcd\x9e\xfb\x10\xbb\xce\xccJ>w\x01\x83\xb7\xe9\xd0+\x1f\x02\\M\x07\xdezLn)\x1cv\xf7\xda\x874\x1a\x07\x81\xb7.Pa~o\x03t\x0f\xca\xda\xf0\xeb \x1c`\x87o\xdb\x11E\xa8\xc5\xd08\xdc\x8f\x12\xe7\xe7\xe0\xc1\xda\xfe\xac\xa7\x0b\xa8\x1fBP\xfb\xd5\x82\xb1\xdc\xfc\xafM\xd2\x00&\xe9\xa3\"\x07\x15\x08pO\xd1\xc83\xa2s6\xad\x1e\x8c\x10\x8bnb\xdf\xb7c\xe7\xf6\xa2\x0b\x9b\xfd\xa4h\x7f\xf8I}\x7f\xcf\xbf\xe2\x9f\xd4\xde\x1e\xb6\xd7\xc1=5\xfe\xa4&\xa4o\xc4\x00>+\x1a\x00A\x1f\x0b&\x7f\xd4\x8fp\xc6\xcf=(\xf4s-K\x03\xcb \xbf\x81++\x7fcZj\xc9\xc6\xd1cBQ\xfc\x9f<\xccl\xae\xcc/\xa0\xe7\xa1\xe1p\x8b\xeez\xce\xb7\x1c\x1d$\xd2\xea\xaa\xf5\x13I\x7fU\x81\x8dqE\x06\x84\x85\xe8eg\x90H\xfa\xfb\xadY\xbc\xe8\x1a}\xb9\x9b\xa7\xe4#\xd6Kg3\x00\x81\x1d\xa7\x01)\"I\xb7\x8f\x93\xdb\x92\xc2Q\xfd\x1a\xd0\x86\x8f\xb7\xdb\xd7\xc8\x19\xfb\x7f\xa9HF\x8f\x87\xc7\xce\xbe\xe0+$\x88\xcb\xe9\x8d\x0b\xa2c\x9a\xe1\xed\x16\xcc\x0b\xfa*\x7f\x0f\xaa\xfcY\xa1\xcf\x8a\xd4z\xeem T%^\xd6 \xd4\xbf)\\\x07G\xe3x\x7f\xf0\xfd\x89\n\x08[\x18P\xe2Z}\xe4\xcc\x93\xbe\x0d\xb5\xd6\x8c\xe3\x97\xaa\xee\x1a\xc3\x19h\x15\xb2\xd2fhoA\xdcZ\xbd.\x13x\xab\xae\x08,N\xc7\xaeN\xfc\xb0\xe0\xf6\xb5\xa2G\x06\xe0\xf5\x05\x883\xef\x10P@l\xee+\xc8}\xd5\x9a;\xa0\x80\xd8\xdc\x17\x90\xfb\xa25w\x8d\x04\xe2\xb8\xec\x9e>\xe1\x95\xc5\xcc\x19\xcb\xc8\x91Bo\xcd\xf6\xd6\xcb\x1bN38Jq\xb5\xb6\x10FlM\xb5\xea5\x90\xee\xeb}~g\xbd\x81]\x87j\xea\xf1\xc6.\x16a\x14x\x19\xce\xf1\x881\xcb\xfc#\x9a\x01\n\xe36%0Yj\xb6d\x7f\xa9\xef/\x87\x97\x02M\x9d\xd3\\!\x891v\xdc\x90?\x81\xbc\x1en\x15\x83\x1dT\x9bJ\x0fN\xa5\xe7CG\xfe\xc8\x1a\xb52\x85D\xc0\x9b\xb6\xea\xa35\x8a\x85)\"n'Z\x1c\x1aS&\xe9\xf9H\xdcI\xa3\xa8U.\xac\x14\xb1\xc7\xb5\xaa\xf9\xba{\xb2B.\xb3\x1e\xe1\x9f*\x90\xda\xf3\xe8\x86\xf1\xd9\xd0\xed\x9330S\xf5b\x99\x9e\xeb\xa7\xac`\xcd\xc8\x13\x0d\"6\xe2>e3\xb50q\xd7\xc79\xbb\x0e\x82?I\xb1^\xd9\xef\xb7r\xa6{\xe6\xa3\xa6\xfa \xafZ6\x9f\x85\x0e\xcem%sS\xc3\x95\x0b\xbf\x83\xa7\xe5\x92\xb9\xef\x93\x85\xcc\xf8\x85\xfbz\xc3\xce\xd30\xf5\xad\xee h?\xcal\xf6T\xb2\xd4\x85\xdf\x9b\x1am\xf09\x9f\x05_'\xab\x94\x87\x9f rh\xbf\x8f\xa0\x87\xf5\xaf\xa0\xb4\x89\x08+\xb01\xae\x8e\xb9\xe0\xea\x13\x18\x81\xd2_y\xc6\xd9Q\x9e.W\xee\xe3g\x9fd-iA\xd0\x0dB\xc8\xd5\"5\xd3\xa3\xd2\xb3\x93\xec\x0b\x8c\xf3*\x9b\x89+\x88\xfc\x02&\x8b $\xc4\x12\x9a\xcb\xf2\xfcmU\x13\xd8o\x0b\xbe\x0b%V\xb5O).\xd83g\x17\xac\x1ee,\x83Uq\xaf\xbd\xf1\xaf*n\xa7.\xb7-J\xc28\xf5\xd2\xa5$Zj4\xea\xb5\xf8\x12\x91\xe8m\x88\xd3\xa8\xa6\xc7\x03\xeel\xf1x5\xe6\x8a\x11\xbb\xddFV\xa2:J\xf8v\xeb\x14\x89\xbaA\x86\xbe\xd1$\xfesGo\x85\xe18\xfeS\x8d\xd9d\x84\xa2hO\xe1\x9e\x92\xd9\x12\xe1D\xedE\xab\xeb(\x10\xaa\xe2\x0d$\x0bLF\x83\xd1\xe3\x9b\\\xa7\xb4)\x86q\xaf\xf0eL\x04\xb9g'\xda\xdf\x8f0\x11Tq\xc4\x89\xd28\x99\xc4\xc3h\x9e\x8b\x14D\xc3\xcd\xd9\x8e\xa6Eq\x0cQ\xd8\x99h\xa9*&\x02'\x1a\x99\xa3\xa2,C\xbfl\x7f\xaa[\x0cu\x05\xeaFU<(\x04\xa9=\xd6\x9b.R\xf9T\xa1>n\xa0\x81\xacW\xac\xcf\x8c>8\x1a`\xf2\xa7\x1a\xab \xfd\xd39M\xb3v\xa0$\xa7\x02m4\xae\x95)\xb6\x84E\xde\xa4\xf6\x88\x9d\xa5\x85\xb9!`\xdfNE\xae\x7f\xd8\xf2\x8c\xc1IY@l\xb6<\x87\x1f\x0dT\xea\xc0\x05\xbb9g\xdc\x9e\x048\xd1\x1a\xdf\xd7\xbf\xabT\xa6\xb0\x9d\xbd\x03Q\xa2d:\x85\xec\x9b\xaav]\x0d\xdeV\xebv\xdbE\xd1\xe9)\xa8\nd\xfc\xf6|\xcd\xae?\x1cX\xe95\xdb!\xd8\xbeq\xdc\xd20\xa44K\x1f\xc0\xa8\x8377\xad&y\xdf\x98\x85\xa86y\xe4\x1e\xc7\x1d\x83 \xaa\x97\x15\x0dS Q\xca\xb9\xb0\xe6\x1b\xaf\x97\x9e\x7f\x1aZ\xb3\xb4q\xd6\xdc\xe4t\xe7{\xbf\x90\xd3\x9d\xb8\xb5\xccv\xe2\xe6B.S\xb5\x13\xcd\xd3\xa5\xabs\x99\x15E\xc6\xcf\xf7\xc1\xb4\xa4\xb7\xc45h\x1a\xcd\xea\x1b\x16k\xc1\xe9\x1bVm\xbc\x9c\x87\x92\xf7\xbf0\xc4\xe8\x93\x9a\x80\xcbv;\x184$^\x92\x86\xc2#\x1e*z:V\x93a\xbb\xe4\x12\x88'-\x14\x02\xe9$Vs\xb28\xe557\xcck\xe7\xce\xcc\xe3-\x88\x81\xf6d\x9b\x06\x89\x93\x90\x19\xb9\x80\xd5,k\x88\xe0\x05\x86\xc8Y]3s\xbbe\xbd31\xbb\xb1~3\x02uI\x13]\xf5k\x05\xfd\x02J,hI\xd5\xd4+\xea:\x12\xae\x8a@\xd4%\x9ca\")T\x06S\xc5\xf44\x19I=#\xf1\xe1u(\xe0\x18R\xb6'C\x85 ;\x9d\x84}\x0f\xdc\xa5\x1f\xbc\\\xeeF\x97K$\xb1\xaf\x9d\xdag\xe5\x90Q^\xb2\xc4\x8a\x87\x986$8\xe7<1b|x#i-\xc2\xd9$)u|%\xd2TJ\xeb\xfd\xa1\x84\x9e\xcb\xf0<\xcd8\xaa\x1e\x19fm\xfa\x13E\xd7\x1c\xe1\xa1\xeadV\x98L\xcc;\xac\xa7\xcf\xf7\x8bc\x99.\xdd\xec\x0f\xf1F/\x8d\xd9w-\x87\xce\xda\x94\xfed\x1c\x05\xe4bj\xe4\xfa\x17\x92\xcd+G'\x9cv\x07\xa5\x91\xac1\xa8)4\x8e\x18m\x94\xc7\xde\xd3\x80\x07,\x03\x81\xefE(q\xac\xd7\xd7\xd9\xfe\x08\xc3u\xb5\x13/\xad\x15\xc7\xa82\x0f\x02_`|\xca\x08e\x1b\x15\xfd\x82\xa5r\xba\xa8E)\x96\xd7\xbe\xd7\xb2\xfe\xbdJ\x8b\xe2J\xc8Y\x15\x89\xa1\xd4\xb5\xd2\x8f\x9535\x02V\x1a G\xc3\x00\xb7!\xf1/-\xeb\xe6\x9c7D\x16ox+O\xfcl\xad\x947\xf7g\xc6d\xc5<\x80\xacb?|'\xdc\xbd\xd2U=o\xf5\xba\xc2\x95|c\x975\x1fR\xb51\x80\xc9(\xd0\xf7u_\\\x18\xf3%\xee\xbbe[\xf8w\xb0\xd2\xc1nKl\xdaD\xba\xf5\xd1 \xf4\xd4\xbf\x92\xe3\xd6\x0c=\xf3\xb6\xc1\xa4\x9f\xf16\xf9\xbb\x82\xa9\x0f\xd9\x92\x89\xb5\x1aUA\xa7 {\xddZd\x9a\xb3T\xbaB\xe1\x87-V-\xe7Uu;\x99\x8e2\xf0\xd4Z;\xecvs\xfb\x1bfh\xbd\x02:\xfb\xfd\xe6\xf8\x94\xbb\xb7\xd7\x85\x81\xc8(\xeb\xad$\xbb\xcc\xc4\xbap\xf7E%\xdb\xdc\x1f2s\xc3<\xae=\x14\x95\x0e\xd9,U)\x80\x0c\xf7\x00d\xdcn\xa3{]\x1f\x1aE\xd4\xa9\xee\x02\xe4[)'\xa9\xfd}@\"\xa3\xfb\xf7,\xa8\xa9\xf6\xf6\xca\x96\xbe\xec \x8bo9}\x9d\xaaEO\xa6|&\x96\xa1\x96\xdd\xe1Cgg\xf2\x00\x93\xe7\x9cF\xa7\xa7`\x18\xed\x057\xc6\xe3\x9d\x04\xec\xbdh\xef-'\xa7U\x06 Z\x19\x87k\xb20\xa9'U\xea\x91\xc3\x82M\xc1\xc0U|\xcd\xa0\xfes\x0e\x9c\xe9J\xa1\"`d\x86\x82\xa4Cn&TQ>>\xe1\x93\xed\x96\xeb\xa2\xf6YP\x954\xbb\x17\xbb0[\xdf\x01\x87z\xaa\\\xc8\x8a\x93\x9b\xf7\x06V\xd3\xb1\xa5\xed\xa2q\xd3\xaf\x8a6`\xb3U\x17%\xd7\xcf0\xc7\xb5W!\x98p?\xd6\xbfC\x8b\x96\xfa\xe5\xd6\xf5n\xb7L\x0f\x01o\xb7\x0f\xbaVS\xc5H\x15\xda\xe0\xe0\xb0\n\xfb\xa0W\xd8pU?u\x90\xc1\x03\xa7\xeeb\xe4\xe7Y(?_\xf3\xeaR\x17>?\x0ci{GA?;l|\n\x13\\\x1b\xc9\x0b\xc81\x13\x9b]KVq\xec\xc7Q9Wm\x96\x7fW\x83\xaa\xc2~\x99\xc7*\x04P\x0c\xc0\xb4\xb0\x14\x9e\xae\xac%r*5`\xe5m\x8e9\x12\x9e\xe0\xc0\xebq&\xb1\xcc\xd7QM\x14H\xf0g\x15S\xa8-\xae\x99\xfd\xb5\xe3\xd4\xec\xc6\xb4f}-.[bZ\xb3~\\5\xbf[\xb3=7\xa4F$iWz+\x06x\xbb\xd5\x11\xc8\xbdO\xd4\xd9\x8e\xb5\xafbe\x9c\x0b\xde\xda\xdc\xea,\xb3\xc6\x83i$\xcf\xbbr\xc7\xf6\x1a\xb30\xc4\x8eU\xc1\x9a\xe5+\x0fv6\xd1\xa1\x83\xc3\x01Q\xc4'V\"0\x81h\x8b'\x10 Eak\xf0\x9e\x93\xb87\x86@os\x885V\x13\x909\xe5m\xc2\xfbR\xb5\xc6\x13\x85 o\x13\xe9\xaf\xe7\xf7\xf1\xa4fi\xea\x8d;h\xc6\x1c\xc07\xf52t\x0f\xc8z\xa75\xd9\xe7\xf1d\xa8\x86\x98{m\x0dE_\x80\xa0\x10\xa8\x9azK\n\xc3\xfe\xf7j\x7f\x7f\x88\xdfs\xc4\xc7jB\x9c_\x87Y\xe4\x84=\xf4+\xa3*\xfb\x1fjo\xaf\xcal\x19\xbb\x11\xa9\xe9!\xbc\xf2\xb3\xce\xe2\x98\x83\xb3;a0T\xdf\xd3Tg\x94\xfb\xcad\xcd\xf6\xd5\x046\xc5\xd0w\x8f:\xb9\x00F\x06\xdf\xab\xd1`\xdf#\x88\xd5T\xdc\xab,\x05\x84\xb2h\x9f\x82\xe8\x00\x94\xfd\x1c\x18\xd5v;^\x18\x9f\x9bY\xd1X\x19\xe7\xb1(X \xe7\xb8\xa8\xa6UA\x18\x85\xc8P\xad\x06`\x11\x8d\xe5\xe3\x1d\xd3|Bo\xc6\xdb\x16\xcb\x9d\xea\x96g\xac\x1e_W0,KL>\xf3j0t\xa3W\xc2xW7\x1d5\xe1\x9a\x07\xd5\x16s\x9bP\x97\x15\xca\xd2\x80\x88)e\x1e\xff\xc2V\x01\x0bi\xecxB\xf5\xd9\x92\x9d\xa8t\xb9\xaa\xdb\xe7t\xe8\x82O\xden\x9f\xa5Jc\xaeW\x08\x97d\xe7\x96\x83\xba\xb2\xe2\x83\\\x17\xee\xb3\xd4Cb\xd7\x8a\xf1YMo\xdd\x1flU\xa3l\x86VC\xdb=\xd2Z\xfd/\x1d;\x0c|\xf5\xd1\xc0t\xabU\x82\x82\x8b\xac\xb2\xb7\x95\x91\xe0>\xc0\xe1\x07\xad%\x85;\x8br\x12.\x08\x18\xed\n\xb6\x1b\xc8\xb9\xba\xd1I\x1b \x7fp\x90--u\xe0\xb35z\xf1\x13\xa7~\x1e\xd0F\xe3\xf9\xceD\xfe\xaf\xb7\xa6\xfc\xce\xe9\xf8 \x19\x1c\x92\x83G\xe4\xf0`B^r\xfa!\x8e\xa3\xa3J\x04\xa7a\x83\x83\xfcb\xc1\x11\x9d\xcd\x11\xf2\xc0hv\xa0?\x19\xc7\xe8\x17^\xa9M\x86\xd9LW\xff4\xcd|`\xd7\xaaQ\x7f\x1cw\x7f\xe1\x84I\x9d\x8e\xba/\xf9v\xfb\x0b\x8f\xe3\xc7\xdf\xeb\xff\x83\xc1\x0f\xf4\x17\x8e\x89\x92\xd4P\x10zs)\x96G\x8bT\x1e\x89\x19C\x87\x07\x98pI7gl.$\x03Y\xa3\xe4\xeb\x12\x88\x91\xe0?V\x05\xa2J\x1e\xb1\x9ep\x9bhbT\x17^\x8aH\xe4\x84\xf1\"\x12y\x99\xa7\x88D [\x17MJ\x12\x14x\xceg\xdf\xd6\xc3\xa3Z\x99z'\xebi\xb7\xf4\xd3HB6\x04\xadn\xd1z\xf2\xf2\x82\xa1\xdcU\xad\xdf\x86\x1b\xfdO{n%jo\xe9;\xa4~k\xef\xef\xd4\xda\xfaz\xff\x8d\xc8\xec?\x1e\x80\x93\xb4\xbde\x04&\xf9[\x87`\xad\xb0\xfc\xa31\x94D\xca\x9a\x97X![\xa9\xc7P\x87#\n\xef\x0f\xba\x94\xfe^1\x91\x81\xe3{\x04G\xd1e\x86\x86\x9cl\xce\xc1\xc1\x13\xa0b\xd9\\>\x93\xd9\xd4\x81>\xd5\xac\"O\x18\xb5-\x07\xbc\xb7\xb8\x88\xf1=\xcedu\xeb7 \xc3@J\x981\x95f9\xd6\xb7K\xaaR\xb0\xf952T\xcb\xc4\x93\x14S\x98\x05\xe0\xa0I\xba\xa9\xbc:'\\\x92\x9a\xbah\xf0\xd4\x90\xd0e\xd00\x9b\xa3\x97\x1c\xb3\xa49s\xcd=\xe6\xa4\xa1\xb8\xec5\xf7\xbf'^4\x0b\xeak i\x16y\xceg\xb7\x16\xb0R\x8e;e\xcc\x86\xf2\xcc\xa0\xccq\x7f@\x98'\x95#X}0\xd0\xdb\xd2\x1aN\xfc\xca\x1a}\x86\x83\x83'\x80\x1f\xd8um)\x05\xc3\xf2\x10|6BL\xc6qt!\xc0\x0c+\xb0}\x00FK\xe5v\x9b\xe9\xa8\xdd\xc2#0\x96\xd2\xecJ\x1c\xa72\x8e\x91\xa0\x1as\xc5 \xfa\xc2+\xa4\x14\x1ds*\xf1\xadx\xa9^\xe9>\xc6$\xa3?\xf1\n\x10G\x99\xc7(F\x19\xec\x0d*\xacue\x8a\x04\xcd$2\xc6N]\x1a&\xcf8\xca0\x114\xc3\x890 \x17b\xf4\xcf\xc0\xaa]\xdb1j\xae\xa9\x9b\x18\xe9\xbc\x0f\x05\xc7\xc2\xa6\x1d\x1e\xc0\xd9\xb9Zd\xd3\x85!\x9c\"}d\xfbDY_\x08\xc1\x9b`\xcb\x00\x87L\xf7\x13SJ\x95\x8cc)-\xc9\xb5q\x8e\x0c\xd0U\xc2\x9a'\xf5\x8egs\x94:be\xb3\xdb\x86\xfe\xd6}\xc9\xe3\xd8^\x17#\xc4`)\xc8GN\xbfp\xea\x08\x0ep\xaa\x08\xc3Fp\xac1\x17\xe6\xf9\n{\xd2\x9c\x01@\xd9To\xaad\xfe\x92\xddl\xb7@\x1a\xb7\xa1%S\xe9Kv\x03\x96\x8em\x868v\x19\x0c\xa2 \xb2$q<\xf8\xde\x84\x1c\xaa\xe9\xd0I\x8846Y`r]B\x1b \xe0\xb2\x94;\xbd\xbdeE\x83}\xae\xec>7K`\x16\xe6\x8eu\xc0#\x84\x14\xfd5\xdc\x9b\\\xf6\x02\x08\xc4\xc9(\x9a\x9d\xc8\xf4FT\x18'Vm\x9a;7T\x06\xec\x06a$\x91\x8c\x05Q\xff7w\x7f\xc2\xdc6\xae4\n\xc3\x7f\xc5R\xa5X\xc0cDG\xf2\x96\x98\n\xa2\xcaz&3\xf1$\x93e2\x19_\x97\x8b\x91`\x1bc\x9aP@\xca\xcbX\xfa\xef_\xa1\xb1\x83\x94\x93\x9c\xe5\xb9\xf7{\xabR1\x05\x82X\x1a\x8dF\xa3\xd7\xa3\xd5\x8a\x94\x92\xde\x82!C\xde\x1b\x128\xb1\xcc_\xc5+\xab\xe7\xbe\xfdq\x1f\x06\xdd\xd7F2\x05\x07k\x99\x0bQi\x8b:\xad\x9b\xd3v0Z\x95\xa9\x9e!\xdb!\xd8\xc4\x80J\x14lbX\xa9\xff\\\x83=\x8d\xede!\xa1\xf8\x8a\xb1\xf3\xbc7\x0c\xe2\xdbM\xe5\xbf\xaa\xab\x0d\xd4\xb4\x93^\xaf\x94\x87Z\x84|\x94\xc7zU\x1d#CA\x01l\xc8\xbf\xf3\xc06\xfeH\xd1)\x0dew\x1f\xcd\xc6s\x1b\xdc6B\x17\x8c\xe0\x84^\xccS\xb3\xf6\xf8x\x0e\"y\xc8\xd8\x0e\x0d1\xc5\x81{$Y\xc8\x81n@\x0bG0\xd6\xe9\xb4\xfb\xd6\xbb\xea\xadb\xefA8Ht<\xcf\x13\x9b\x9a@&\xd2\xc03X\x04\x08\xf4\xe2O\xd9\x0bi\x84(W\x0c\x81\xba\xc6{\xd9\xfaJ\xa7\xd2\x11\x0f\xdbo\x18\x91HC\xff&f8.%\xc2\xb7'\x8a\x9a\x9fH8\xaa\xa7gp\xd2\xa2\xbe\xa8l\xa22;\x87/\x12\xab\xe1\x9a\x91\x07\xa3\xfbbGgN\x01\xd0\x1d\x85i\xce\xb2\xecB\xa2\x99\xc4\x18\x02Q\xcf\xd53a\x04B\xca`\xf2\x12\xc3d\xb5\xbd\xad\xb3?\xff\x15\x9d\xc9\xd0p\xf5\xa5\xcbk\xef\xfb\xbdv\x8bb\xcc\xae!\x14+Rs\x02\xb8\x12t\"i\x83\x07E\xf3\xadya\x8d4\xe6dU\x0d\xf8^\xae\xdc\xecR\\1\x9a\x10\xcd\x9d\xf9\x1f\xee\x8c\xb6\x90\xd7\x93\x0f\xf4\xbe\xe1B\x81\x06)\xa9\x1d\xfa\x91\xbe *G\xea\x98\x8e%\xd6\x9f\xaa\x9b\xd6\x8d\xa4\xd3\xc6~\xa0\x8e\xce^\xe7\xedm\xb9\xdc\x7f\xd4}\xad\xd3\xf7\xba\x171;\xb6\x90\xe4\x98\xd7@\x07\x01\x9a\xef\x17\xf3\xb9\x90\xea\xda~\xf3\x9d\x8c\x1am&O\x14\xc5\xcc\xcd\xed\x93S\x11P\x19\xb1\x8e\xcax\xe8\xab\xf9\xf2P3\xc5\xb3\xac\x0fFa.\x19$\xd62\xedS\xe9\x0c\xf7\xa7\x12 @\xbe\x1b\x89\x0b\xfaF\xbf\xb8-\xe8\x95\xd4L'\xbd\x96\xc0\x84\xa1p8Qr\x1a~wr\x1a\xd1J\x19a\x86\xa2\xd8+z\xae}\x11\n\xf8Q\xc0r\xba\xfd;\x97\xa8\xd0\xde\nu\x96\xd5\x88\x11A\x1aLBlD\x8c\x8a8\x9a3V\xf4\xd8g\xaf\xc8\xb2 d\xbeM!\xf8\x81!Al9\x11&\xb4\xf5jE\x8ee(;\xb8\xe4\xecJ\x8b`4\x9fn\xe5\x08\xef%\xbd}R6y_\x1f\xe9}\xf2Lw\x97\xf7\xcdq\xdf'\x07\xac)\xf2\xbe\xe1\x04\xfa\xe4\xfd\x19?i\xf2>\xf8\xc1\xaa\x82\x80x~\x08\xce\x95\x96\xb8\xd11\x04\xa7La\x1e?\xe1f\x96\x93v\x11b8\xef\xf5\x10\xa3\xef\xe5!;\xc2Y\xd6\xeb\x81\x0d\xaa\xeb\xe9/\xe9eA\x1f$\x10\xbc'\x92\x0e\xc93\xf5\xdf+\xe0\x87\xde\xc2\xff\xef$=\x96\x0e\n5\xa4\x99\xffC\x03B\xff\xf8l\x84^%gU\xf3G\xf8\xc3\xbc\x99\x17\xa7\xec\x0f\xffh\xebk\xe8\x98\x96\x0c,\xf4/\x0dI\xfdl\xa0\xa6\x7f\xa4\xb3\xcc\xff\x92D\xebc\xad\x14N=\x1b)\x9cde\xd1\xb0Y*\xc8\x0b%oQ\x15\xc8\xf0\xa0\xb8\xa9 eB\x10\xb1k\xa2v\x9ay\xce\xa3\x8axE.\xc4%<\xfe\x11\xf5\xa3\xf6\xa2{\xa3c8\xbb\xae]\xb9\x89\x85\xf0\xc4\xa50{\"U\xbf\x1a\xce\xe4\x95\x9c\xf4\x9d\xdb\\\xdf\xd9aM\\\x8d\xfbM>\xcc\xd1+\xe0\xb4\x87\xc1H>\xaf\x1d\xc9\xe75#\xf9lF\xf2\xcc\x8d\xe4\x99\x1f\xc9g\xf2\xf6\x1b#\xf9\xacG\xf2\xd6\x8ed\x85\xc9\xaf\x92\xbe\xf3\xa8\xe3\xbc^\xf4\xf2@\x82k\xfd\xa8S;\x1b\x0cQ,\xf5B:\xc1lu\xca\xaa\x86\x17\xe5\xdb\xb8\x9c\x97\x16\xd5\xd4\xa3A\xa9\xe6\x8a\xd7\xb6\x19\xdd\xd9\x07'\xe2\xe5\xf5[\xc9/\nyc\xf7\xedkIo/\x9c\xba?\xbfMu\x98yl\x0e\x90\n\xbf\\\\\x15\x128\x1c\x1d)\xf8/j\x06\x0e\x90w4 \xef\xbf\xbbI3\x97;\xc6\xf96\xa8\xd1j6\x08\xe9B\"w'\xdf\xf4\x1d\xe3}\x1b\xd4\xf8\x91\xa6W\xe4 >\x11_\x7f\xeb\xdc#\x02\x1b'\xa2`\xfa\xe6\x04\x0f\xdbVE\xa4\xa0\x1e\\I\x1dS\x02\x81J!\xd30\xda\xde\xca\x84V\x95'\x1b\xbe\x8a\xb6\xf1r\xd9+\xb2\xac\xc7#\x0b\x0c\xc4\xa9\x1c\xe8#\x18\x1c\x18e\x0e%\xb1\xe5\xb1\xba\x8a\x9b\x04\x04\x9c]-\x97\xdc\x18)i\xb3O{\x82\x17x\x82\n\xdaXk)\xd4\xe8\xf00\xad192\x83'\x1f\x80\x03\x00&2\xcbP\xd3\xa3:\xd6\x8c\xb6bj\xbc\x15Sc\xe2\xa4!\x13z\x03\xe7\x85f\x96\xd5a\x1a\x9a\xb3\xd9\xc2\x16\xf4b\x90c}\xd8\xbf\x93\xa4\xa4\xaf\xe5\xc0#5\x99\xba\xdf\x80mda\x16\xa2\x0f\x9cB\xb8\x08:\xe8b\xb4t=\x9d\x85\xa6\xa6\xbf\x9a\x86C\xfc\xd3M\x87\xc8\xae\x1a7\xbf\xfb\xc0\x17\xe8\x90\x80\x94\x16\x13\x9e?\xa9P\x81 7%\x8d.i0A%\xad\x83\xebFI\ns\x0d\x85k\xc6b\xb3\xafc'\x91\xd2*\xa6\x19)\xe35\xa0\x9c\xa0*jd\xea\xee\xb2\xb6\x11\xed\x8eH*\xdb\x08'\xc9BRF\x16\xb4!H\xd2\x02g\xd9\x02\x1b+\xe8)]\x90\x82\x0e \xa35\x95c6f\x14\x8c\xbcp\xb1\xb9i\xcd\x0fHC\xa7\xe3flLT03o\xc6\xc3G\xc5}6\xc6\xb5*\xaf1)\xee\xdf\xb7\xe5\xec~1\xc6SU>\xc5\x84\xd9rU\x01(\x7fM)\x9d.\x97\xf0'\x88\xb6ler\xb6A\xd3\xc0\xaa\x0e\xfc\xe6js\xe5\x82\x91\xd7\xa4\xa6\x87Gc\x99e\xb2G\xe9\xd4'{F\x05\x95A\xc3\xcbe\xa1\xde\xe316Q\xfa$&R5.\xb5\x11\x8dT\xad,\xb2l\xd1je\xd1\xd9\x8a\xd4\xad,0Y\xa8V\x16\xba\x95\x05\x1d\x8e\x17\x8f\\`\xbf\xc5\xe6&~]\xa1\xfap\x11\x9a\xe2\x94\xb6\xae\xf4&>\x0b\x05\x97\xd7\x15\x92P\xd5\x9b\xf8TN\xfe\xa7h\xc6\xdeN&\xf0\xe4\xb0<\xca\x0fKR\x1d\xadVp:>\x97]F\xb2\xc6\x9d\x88\xd7\x13\xf7\x94H\xa9\xecak\xac\xb3\x87z#\x8c\xfe\xc1(\x1d\xfdC\xedg\x06\xe9\x8b\x9a\x1emV\xe4\xa5\xb4Y\x15\xbd\xd6,6\xc0\xf0\x0c\xe3\xdf\xfe\xce\xf3\\?\xda K\xc3N\xef\x18\xe6\x12\x80we\xcam\xdc\xdb&\x8e\xd5\xe4\xf2<\x82\xcb\x14$~ \x0bL,&\x03c\x88\xf7\x18 \xb1\xd4=\x1a\x16~8\x96\xdezJnn\xaa\x9bF\xef\xa54I\x12u\xd0\xd8\xe5\xb2\xa7\xa6r\xa8~\x1c\x91F\xff\xc5\xbe%;?\xe0Y?\x82\xba\xec\x0eu\xdch\xf4\xb8[\x1dG\x9eJz\xaboJ\xdf']\xd1\xc9\x8eb\xe9\x8a.\xfb\x86\xe2\xc3\x07\xd6\xb011\xb4\x90%\x16\xaf$\xb1*\xbe%p!\xf7\x8cX\xe4\x93\xf9\xfb\xd5\xfc\xfd)\x16[\xfc.C\x1b\xd0\xc6\x1fe\xcd\xc4\xc3#\xdf\x87 \xd0\xce\xb7\xa6\xc9\x9b\xf8\x84\xb3;\xe3'\x97@\xfe\x9e\\.\xef):\xb0\xa8P\x85\x8d\xc0\xd7\xdf\xfb\xb5\xc6\x8bW\xa8\xa2\xf7$\xce\xb23]\x8b\xde\xea,\x14\xd5 \xaeIX5\x0b\x0b_T\xb3U^\xd1\xdb\xa2\x9a\x9e AmQEQ\x15\x8f*\xcb\x92\x82\xf8\x14\xb6\x11vO\x99IT\x05z|<\xf0\x8d\x12\xfd\xf8F{\xacT\x83\xf0'\x81E\x82\xae\xab\x81{\xd6\xa5\xee\x83\xe0\xd7\x8a|\x95Y\xf6\xb7D_%q\x00\xf9\n\xb2\x95D\x02\xf6T\x9a\x89\x92O\x92\xc0\x965\"0sow\xf1m\xe9=i%aXk\xe6?\xc7<\xd5\xd3o\xf3T\x84\x1b\x93\"N{HP\xbe\\\xa2\x98\x9f\x89\x91\xc0{\xffLd\x9e\xb29\x18\xe3[\x96\xdf\n\xfa3CB\x9d\xbd\xc7\x03\xbb\x05\x9c\x05yA\x87\xe3\xe2\x11\xb7{\xbc0{\\@\x14R~X\x1ca|+\x14\x86Z\xdd\x8e\xa0\xbd\xe1\x8a\xd3\x1e\xc4\x7f\x8dy/#\x88o\x89B\x92\xf0\x89Zh\x11x\xa2\x88\x96'J\x96\xa1{\x92\n\xb5Y\x1a\xbbS\xa2H\x86Z\x8d\xf7U\xd2O\x92\x9a\x9d\xd5\x8a\xaa\xa8\xb5~j\x7f\x0d\xa3\xe8\xa5~\x83\x87:\xc2\xc5<\x88\xd7\x18\x8a\xdca\x83\x92\xdf%\x02Y\x06TIwz\xceO\xd0G\x1b\n7VU\xb6\xb5\x9c\x1b\xa6\xa9\xc8\x1a~E\xfe\x19I/\x9c\xcf:\xf0\xf5@(XY\xcck6\xfb\xc0m\xc1\xbcf\x8b\x99\xbb\xe2\x9ak\xd2oQ3\xd3\x92\xcf\xbf\x88BBp\xa9\x8e;u?\xaa`U\x98\xf1Wz\x11\xe3Bu[\xfc#\x124\xc4\xb7w=\x18O\xd5~ \xe5\xefN_k\xc7`\xb4!\xba{\xeb\xbf7\xb0\xc58\xcbF\xdb6\xc0\x1c\x1dm\xe3\x9c\xd1\x86\x8c\x86N\x864\xda\xc6d{\xeb\x11\x9c\xd0\x10f{\xc2r}\xda\xfc,\xe9\xed\x8bz\x9a\xf7_\xd4\xd3b\xce\xfa\xe4\xfd\xbc\x98\xb2/\x85\xcc\xfb\x1b}\xf2\x9a\x9d4y\xff\x89\x94\xe2J=\xf6\xc9\xc7\xb9\xf9\xf9q\xde'\xef\xe0\x8e\xab\x7f\xc3s\x9f<\x17W\x95)\x01\x83w\xf2\x9c\x95y\xff9\xc4\x1b\xec\x93O\xbc\xca\xfbo\xde\xf7\xc9\x01\xab\x16\xb9\xcd\x84\xae~\xf4\xc9\x93\xf9\xbcN\x8a\xdeCT\x9b\xbc\xaf\xff\xbe\x16\xd3\xf3>9\x10\x7f\xbf\x95\xbc\x82=\xf0\x0b\xbb\xc9\xfb\x1f+>S\xf7\xe9\x13\xcef\xfd\x15\xf9S\xd2\xdb\x87y\xffi1=\x87\xdcS}\xb2\x9f\xf7?\x14_\xfad\xb4\x95\xf7\x9f\x95\xac\x90}2\xda\xce\xfb\xe6f9\xda\xcb\xfb \xbd\xea\x93\xd1\x03\xdd\xbf\x14e\x9f\x8c\x1e\xe6\xfd'\xa5*\xdd\xcf\xfbo\x0bu\x1d [\xc3\xbc\xff\xac\x98\xd7z$[\x0f<\xd0\xb6\xb7\x00\\\xdb\xdb\xaa\xee)S\xc0\xd9\xde\xd1\xcf\x1a\x0c\xdb\xbb\xaa\xc7Y\x9fl\xef\xe5\xfd\x9f\xc4\x85\xfa\xe6A\x04\xd9\xed\x87\x01d\xb7\xf7c\xb0\xee\x0c#\xa0\xee\xec\xe6\xfdWU\xcd\xa4z\xb5\xe7\xe1;Rs|9R\x0f\xdby\xff\xe5\x96z\xd8\xc9\xfb/\xb7\xd5\xc3n\xde\x7f\xb9\xa3\x1e\xf6\xf2\xfe\xcb]\xf5\xf0 \xef\xbf\xdcS\x0f\x0f\xf3\xfe\xcb\x07\xeaa?\xef\xbf|\xa8@5\xcc\xfb/\xf7\xd5\xc3H58TO\xd0\xb4j{K\xb5=R\x8d\xef\xec\xe4\xfd_\x17\x17\x1a\x1e#5\xaap\xa9\xb6\xb6v\xf2\xfe\x01k\x8a\xfe\x8a0\x11\xee\x84sv\x93\xcar\x00\xe5-\xfe\xff,\x0f\xe1\xf7\xd1r \x7f\x81\xef\x8b\x16:J\x9eb\xc8\x84W_zQ\x8e\x0eY\xca(\xec.<1\xab\x9ew)\x1aY\xa2d\xb7R]/\xe1\xd7M\xfei\x06\xa7>:\x82$\xed\xc1\xb8\xf2~\x7fE\xacO\xe5\xbf.\x15\x94l\xce\n#\xf7\xd1*\xcc\xf5\xd2BK\x04\xbahW\x07D\x00\x12\xf9pE\xcc\x14\xd6|\xf6M08\x18\xa8\xb6@E\xfbC\x03\xf8\xe1>V\x984\"\x14\xbe\xcd\x8a\xa6\x80\xecR'LZ\xd2^Eh\xa6\xe3\x88\xd5V\xee\xa6\xc8\xee\x87\xb0H\x1fM\xb3\xa8l\xed\x92\xdc\xb1\x8c\x1d\xab\xb2\xc2D\x8a\xf0\x98 5b?rX\x89x\xce\xacl\x8a?\xba\x00\xad\xdf8\x0b\x1b]\xaf\x0f\x81\xbe\x9e\x07\xaf\xee\xb3AP\xa6\x96\x0e\xaa~^\xdb\xe4\xe7\xa8\xc9\xcfa\x93\x9f;\x9a\x8c*t\xbcw=\xfe\xa9\xe7\x0c\xcf\x07\xc0\x91\xea\xf9r\x11\xb1\x83\xcf\x9b\xefT-\xbdlln*\xe0\xcd\xba\x98\xae\xc0\xa0\xca[9\xa83\xf2\x1701 \xbfX\xcf\xa00\xcaD\x9b\xcb\ny7F\xff\x90\x113\xa5\xdd\xc4\xf8 \xda\xd2\xa1CA\xa2\xdf\xee\xce\x06!\xb4<\x96\x89@\xb8\xc6H\xcb\xcb\xad\xbb\x184'\n\x0b\x7f\xfa\x90\xd8\x11\x7f\xc7\xe8;\x99\x06\xe7N\xf9\xbc\xe0W\x1c\xb5\x9b]\xbb0\xf5A\x10o\xf7;\xe8\xd3\x05Kt\xbf\x05\x80\xb3\x89\xc0\x19\x84\x04\xb4n\xd1&\x18`\xf83\x98\xb7\x8f\x0c\xa8\x1a\xab\xc2\xc66~gPg\xe3\xb3\xf9\xfbO\x963\xfa\xcfp\xb2\x1b\xbf\xa9\"\x19\x0d\xc1&\x11`\xf48\x82\x8b\x0e\x9a\x973*D\xcc+\xcfo,X\x1d\xc0\x8d\x81\x0d\xa3\xbf\xc9\x7f5\xb8\xb8n\xc7\x16\x06\x00 \xe23\xc6%\x01T\x02\x99e\\\xd0\n\x8b\xaeq\xfaW\x99D\xa0S\xf7;\xcb}?\xaf \x87\x99\xbf\xed +;$\xcdj\xa5\xf6\xdbe\x1a\x1ae8\xc2x|Iu\x06\x1e/\xf2\x01\xb7!-\x19\xe9\xbf\xd39`\x98\x84\x8d\xfd\xb6\\\x9c\xf2j\xe3=\xbf\x98\x97,,y\xe1\x84\xa9a\xa96\x01\x89\xbe\x84\xfbFX\x12\xd8\xfb\x06\xc5\xa1\xc8\x01\x93k\x84\xc9\x19}V\x91\x0b\xfaWEN\xe9\x93\x8a\xbcG\xb7\xadQ\xe4\\\x90\xce\x81\xe4\x07\x92\xb4\xc6\x92\xbf\x90\xa45\x9c\xfc\xb3$\xdd#\xcak\xb92\xaeX\x82\x1e\x1e\x91Z\xd0\xfb\x81\xb4\xa3\x14\x8ap\x0d\x1f\xd7\x02\xb4y63V!\x0ekqD\xf4\x1f-&\xa9\xc5\xfd\xfba\x08\x10a\xec\xe0\xc4\xe6\xa6\xad\xe7\xbe'\xbe%c\x98#\xe8\xed\x8a\xcc\x05\xbd5\xe5\xf9B\xac\xc8I\xf0\xbb7Z\x913A\x17\xc2\x8f\xedB\xc4\xde\xb8\xd6\x1a^\x11\x17\xa0\xdf\xb1W\xeeB\x18\x9f\xdc\xc4oWf\x99\x1c$\xee\xe2\x07&c\xde\xc7\xea\xa2\xa8\xcf\x99N\xb2jn\x07\xa1\xf4\x7f\xed\x87\x07\xad\xcft\xb0C\xc2m\xf6sa\x12r\x82\xa3\xd7\xa1p\x896e\x96!\xc4\xc2A\xe2\x1f\x1a\x9d\x02\xeew\x0f\x8arLx`\xc6#\x02mn\x05Z\x15s\xd3\xf3\x9f\x00d\x83\x85\xbe\x11\x08\xdf\x96\x02\x9d\x08LJ\x81\xe6\"xw)\xac\x95\x0c?Asa\x17\xbdG\xe9B\xa4\x9bv\xef!\xc6\xe3\xa9j\x804\x98LU\x83QL\x99/\xae\xad\xceUd\xd6Y>\x1c&\xe9p\xf4\x95\x8a\x94\x840\xf0\x1e\xf2V\xe4\xc2\xd5\xd2H\xda\xaa\x89\xc0\x90\xa3\x87\xe0=kEd\x1a>$\xa7Z\x99\xd4\xffh\xbc\x93\x08OR\xa8W\xe4v\x15\xf9\xa8]\x87 g4Y\xf9,[\xbf\x98L\x9e\xc6\x8b\xb9\\.\x84\xda#\x1e\xd0D\xc3\x93Yx\x9e\xb87\x10\x01\xd1\x0d\xe2\xean\xd8\xf6Z\xa9\xf5\xf6\xf61\x1eW\x13\xc4\xa8Y\x963\x81\xc9\xfa\xcd\xd0\x1a*e$B\x197P\x9c\x9br\x87\x00jD\xe7\xe2\xae\xc8\xaao\xa2\xb7i\xecz\xf2\"z\xad\x0f3\xf7\xf28n\x99}]\xb0\xbay[\xf0\xaa!\xef\xa3W\x95\xb8\"\x1f\xa2\x12\x85\x1c\x1a\x98v$\x90O\x80\xfc\x15\xd5zuq\xc1f\xbch\x98\x1b\xee\x13\xf1\xcdH\xb2\xcf\xa2*I\xc4\xfdW\xd1\xcb\xd7\xe2\xca\xbdy\x1b\xf7<+}\xa7\xef\x80\xc0\xfe\x1aC\xeaL,\xca\xd9g\xce\xca\x19y-\x8cEx\x8f\xd2c19\x16\xa1\xa3\xd6\x8a\x1c\x18K\xe7\xe7\xe6\xefKA{#\xf2\xb7\xa0\xef\x05\xc2\xe4\xa3\xa0#\xb6\xf3\xf8o1y/:\x1c\xbcT\x9d\xfb\x7f\x8b\xc0*\xe7\xa9\xa2\x19\x86/\xfe \x106\x11l\xff\x12V\x02\xb7\xbf\xaf\x19\xa4'\xbe\xe4\xa1.y\xe6K\x1e\xe8\x92W\xbedO\x97\xbc\xf5%\xbb\x8e\xa7H#GlE1\xc4\xee\xc16\x8cY\xf5\x8d\xfd}\xdb\xce_B\xb7\xbc\xff\xd0\x96<\xb1%\x0fl\xc93[\xb2gK^\xd9\x92][\xf2V|\xe7x>\x89D\xcf\x05\x03$\xe7\xba8\xf0]\x16\xb1q\xa8\xab\xf9\xc6\xbe\x08\xfcqS\xeaN)=\x10\x13t \xe8!;Rk\xfbF\xa0\xbf\x04\xf9,0\xce\x0f\x84uj%\xefD\xe0R+P\x10L\x8e>\x17\xd6\x97\xf3\xb9\x18[\xe4x\xa1\xfaY}\x16\xa1%\xe3g\xf3]\xef\xa5p1L\x0e\x04\xbeU\x88d=W\xb5\xf5\xa5\x96\xc1\x1c\x88\xf1'\x81\xf6\xf7\xa3\x8c,:R\x97\x0f@\xc6lV\x88\x8a6\x87\xech<\x13\xb7\x15\xadPo\xe8\x92\x97\x99`)\x90\x11\xdd\"\xb1\x8f\x0b\xa6\x97\xc0\x8d&\xcb\x14(\x0e\x9c\x7f\xf9\xe6\x08\x03\x1c\xff\x12\xe4w\x01\xa9\x84\xadA\xa8\xc2\xfe\xd0\x1a\xf4\x9f\xe9*\x8c\x86\x0f\xb6\x1f\xec\x8c\x1en\x8d\xee\xa3\xd1&B\xc1o\xb6\xd9\xfcc4\xc4\xff@\xd5?\xe8h\x88\x97C\x8c\xff'\x08*\xf1\x9bp\xfaG\x1d\x18\xc0:-\x8ay\x8d\xa3\xc8\x8f\x8d\xf6\xefk0\xd1\xbe.A=\x9f\x19\xf9\xb0:\xca2\xa4\xfe@\xe0}\xefS\x0dt\xf5\x8f\x80\xc1\x02\xd0\x90_\xcc\x1a\xfel\xfe\xfe)\x12\x1ba\xc6\x11\xbe\xfdS\xd0\x9f\x055u\xfd\xd8\x1b\xee\x85\xc8\x7f\xb8\xa3f\\\n\xf4\x87\xc0\xc40h\xc7\x86C\x1b\x1c\x9b\xf7&\x8d|\xe0T\xc9\x91\x8bs\x19\x06\xb5\xb1|^\x94\xb2\xd70'/\xae\xe7\\\xeb\x19?\xf0\x0b\xf6\xa8\xc1\x9d\xe5\xdeV\x04\x02Gt~ f-\x9d\xdfb\x97\xa1\xb5\x87\xbe\xd9\x0c6\xca\x865m\xad\x82\x084~\xe6\xd2\xcc\xfc\x17A\x19\xd1@\x86U0\xbd\x19\xa7&\xaf\x11\xc5n/\xd9`u\x1a\xb6\xe0\xfd\xcc\xa2.\x1f\x83x\xfeY\x01~\xd0q\xed\xd4\xa6Zp\x87\x82\x7f\nmt\xd2\x1b\xe9$PC\x90|\xf2\x13\xd4\x8e\xd2\x95e\x0e\xc9\xb7urA\xf4\xa7\x9aFC}9&\x0d\xbd5\xeb\x9f3\"\xbe\xd4L^\xb2\xd9S\xde\xd4yC*U\xaa\xd1\xd0P\xa7\x9f\x85#6\x94\xd2_R\x9eq{\xa8x\xc6\x9f\x05m\xc8/\"\x02\x0c\xbd\x8dg\x9f\x0fI8\xe3\xbc!\xd2^\x00\xb5\xe4m\xa5\xcd3~V0\x87\x10[\xd4\xa9hY\x8c\xa9:],\x8ft\xc2\x05 >\x1bh\xef\xab\xdf\x16l\xc1\xe8\xed\x97\xa2fZ \x97d\xe0\x86\x88\xa4P\xc9\x8a\xf3\n\xc9f\xf9\xad\x1a>\xafN\x0d\x08tbq;:\xd7Um\x16G\xa1B\xd0\x1di\xa2\xce\xb5\xe6\xa5Y? \xf7\x1c\x0cF\x97\xea\xe6\xcc\x98\xd8@?\xb8\xd10\x93\xf0\xbc^\x05\x08S\xf2\xf0\xb0B\xac\x05}Ft\xd2\x91\x9aiOu\xc8\xbdy\x9a\x0f\xc9\xbc\xb8)Ea\x0c\x18\xa7\x86)\xd3\xbf<6`\xbd a\x12V\x8f\xa1\xe1\xd6\x08f\x8b-\xb9\xd0\x0c5L\x02\x0f\x0c\x84\xc7\x06\xa1\xaaIc\xd6:G\xe6\xa9\x82?\xa42\xe5j\xab\x98\x8fh\x13\xac\xc2\x82\xc7WOO\x92\x06\xdb\xc0b\xedl\x82N\xe8\x8c^\x909\x9d\xe2|Fg\x1a\xec\x17\xa4~\xbc\xc82\xb4\xa0\xb5NYg\x93\xa2\xcd\xb2\x0c\xb9Z\xe9\xf8=m\xfe/\x8e\x1c\x13^\xa2\x9a\xa4-\xe21\xcb\x01\xac\xa7\x94\x91\x1bzf%\xe55m\xc8\x05\xad\xc8\x0d\xd8`jV|\x94\xabC\xc7\xdd\xe6\x9d\x9b\xef)\xbd\xb1\x83P\xb7\x08z\xaa\xe5{\x17dJj\xecL\"\xa6\xf44\xf2\x98\xdd\xd8\xceO\x0d!\xfbP\x9c\xd2\xfb;\xc3\xfd\x07YP\xb2\xdc\xdb\xd1\xf5\x86\xb9;~P\xdda\xa9\x16\xf5?\x89:\xcfO\xb1\xb3\x08\x9cjV-\x1c\x93n\x7f+W\x9br\xb8\xb2 \xe3<\xf8\xf4\x11\xee\x06D\xb7\xb7\x1c!Q\xfb\xd5Pa^.\xcf\xa8\xc2\xfa\xe0PE\xed\xddoY\x973\xda\xbd\xbfI@<\xe8\xda\xbd\xae\xe7\x04\xf8:\xa7\xd3\xdc\xe0\xdf \xb6(\x9dGM\xcdHQ\xa2\x85\"\xb91\x92\xd2\x05INP:\x0dh\xf1 \x0f\x84L\x8at\x1a\x80\x10\xf7\x14\xd1\x1e\x86}\xdc1\x16\xc6\x1d\xb3\xb2\x8f\xc3\xe6\x88\x08*\xddJ\x04\xf4B\xb3#\xfe\x95nXRA\x04\xad:\x85M\xa9\xe0d\x7fD$\xc6cc\xa0'\xf0JGo\x9eq\xfa\xc7\xe0\x1dD\x9c\xd4\xac\xc6S\x1f\xd6\x85\x9cq\x8a*v\xb5!\x07\x10!\xa0bU\x83\x07\x92\x9d\xd4\x81(4 \xfd\x95\xb1\xe0E\xea.$IC\x13\xe0a\xe5\x83\x0eJ\x83\x1a[\xcb$Vw \xb8\xe6\xa95B(\xbe\x17\xe0\x0d]\xd3\x8a\x98\xec>\xe9q@\x04\x9c%\xf4\x8c\x13\xb8\xc6\x9ahT16\xdf\x89\xc7\xc2V\xb5\xf8\xcc;\xf1\xd9W\x03\xd4\xe5\x18\x13\xb8\xb1TD@\xf8\x8d5\xc3\xeb \x0bjt\xa7\xacy\xce$\xbf4\xd5^Jq\xa1e_Y\x86\xcci\xc8\xd5\xf1\xb6\xa6\xd95K\xba\xae\xd5\xe5\xb2\xa3\xba\x00C\xe8\xaa\x98\xd7g\xa2\xd1\xdaUMz\xc2\xda=_\xbb\x0b\x17\xe0\xbc\xec\x0cH+\x06\xed\x8a\xcb%j\xa8X\x8f\xe4]\xdfdYW)\xea\x04\xc0\x9dc\xbc\xe3%\xc2\xa4Q\xec\x91%1kPX\xd8\xd5\xd0(\xfc=\xcb\xbff\x98n\x08\xcf\xf9\xcc\x0c/f\x97w4Sr\xc5\x8d\x15\x00\xaf\xe1\xaf?\x85\xceC\xae\xb1rB\x84Jm\x06\xdc\xb9 ])JLJ\x87\xc11\xd8u\xeb\x1f4\xfa9\xea\x99\x0c\xe0-\xd9\xd5\xbe\xcd]C\x83\xdc\xe0\xabNu\xdb\xce\x03b\xdd\xe2\x05\xed\xf77Y\x92\x90\xbb \xa2\xddKv\x12\x0e?@nx\x03\x7f\x06\xc7:\x02\xff;v\xa2C\x86\xa8\xc2\x1c\xa1&\x8ay\xa7\x05\xb9R\xb3\x9a\x0d\xa5\xf4\x8c\x83C\x9c.\xa1\xb7+'\xdb`\x13\x9d\xd3{\xa39\x14G9dMe+\x1c\xf6\"H\x03W\x12\x1b\xfa?\x80`\x12\x87\xf3\xe1\x8e\xceC\xd3s`L*\xec\x0f\xc1z\xdfJ\xe7\x82p\x05^*\xe4c\x7f\xf4\\\xa6\x85\x04\xfe#\xd2?\xd4\xcbi\xdc\x8d\x8e\xfa\x94\xb6\xfd\x84l\x84y\xe3Q\x83'\x06\x076\xaexs\xb6q\xcen\xea\x8d\xdb\xfef\xec\xbb3\xf8K\xf0\n\xf5\xc9F\x1fo\xf6W\xfd\xbc\xd1\x19k\xdc@_\x80\xb8\xd0\xfd\x84\x84\xfb\xfa\xf6b\xb9\x8afP\x16u\xf3\x02\xf0\xd9\x8a\x94\xe4\xc4\xa4\xfa\xd0\xc5\xb4\"a-Z\xe1\xbc\xd1b]S\x10\xbf5\x02#\xfb\x13.D\xc1\x15\xf8ap\xa1\xaa\x90\x0d\xd9\xda\x8b\x83g\x87\x02y9\xc6\x8d>\xbc$\x95\x83\xda$\x0f\x08j\x07Rm/\xceg6\x19\xb5\xcb\xa1>\xc6\x0es\xcf\xd9\x8d\xce1\xa5\xe3\x8a\x91\x06\xe7\xf6'\x04\x1c#\x10g\xbaI;\x0b0@$r\xc8\xf7%\xd2\xee \xf0=\x1d*\x86F\x7f\xac!\x10|\xca\x919B\xad\x82\xc4|#\x89\x8e\xdf\xa3\xc8\x83\x0cc\xf4\xe3 R3\x87Z\xf8Q5AM\x00\xce-R\xe1\\\xe6\xed\xb2@\xd3S\x87\xa9i\\\xfa\xef\xa0\x07\x90\xe0\x06\xdfG\x8cO\xe9\x0f\xfdX\xa3\xd7,\x97\xce\x81\x15\"\n=)\x15\xdb>\xb8\x103\x06\x8c\xbb\xaeN\x15``\xcb\x0b\xa4\xa3\xc6\x04\xe5\x81\xa4\xb5\xb3\x1bMr\x9a\x01\xd3\xd6\xa2\x8aE\x00\xe3B0\x9bEH\xea65\xe7\x01-\x9fPGo\x89\xf4=I5\x02I?\x94H\x7fK \xa4\x98\xfd\xd2\x84\xb8\x0eG\xbe\xb6\x9d@4{\x07`v,`\x96\xcbf]\xaeC\x9d\\!,\x89+\x83u\x96\x9a5\xdc\x8d\xa1v\\\x04@\x7f\xf6=@\x0f\x12\x9b\x1c\x1e\xad[\x81\xb9\xbb-\xf1\x8e\x19=\x88\x96\xfa\xaf\xb0W\xc5a\xfd\xd8b\x9f\x04Gb;GKWj\x16C\x1e4\x96\xf5\xfb\x9b\x8d\xed=\xee#\xf4\x9c\x0c5F\x16\x97|*\xd3\xc1\xbd{\xfa\xb5\x91\xfb1fC\x9bU\nM\x1a\x8d&\x86>t\xa0I\x15\xa2\x89\xbe\xd0`R\xf9\xa1TZ\xee\xd6\xb8fa\xa9\xd6\x0c[\x1dXW\x1c,z.\x18r\x9e\xa0\x1a\xd0\xfe\x1b\xcd\xcdD\xf35GQw>\x8dY\xca\xaf[0L`^p\x0f\x1bw-AWv\x9c\xc8\x94W\xf1`\xdaQN\x93\x87~\x7f\xb32\xd9h[\xe0\x0fr\x898\xf0Wk\xc1\xbf\x01;\x13\x98\x05\xbdU\xd5~g\x13\x83\x9cz!\x1c:C\xe8\x81\xdc\x93\x0e=\xa3\x18\xf0A\x83\x8b\xb8\xa2\x81z\xa5\xa1\x1e\x9bF\xfb \xfam\x01\xd0\xd7\x10\xaf\xd6@\xfc\xccK\x1c\xba\x91[v@\xd6e\xec\x80\xb5\xd6&\xa80*@\xab~\x7fS\xb5\xd6 Z\xe9@+\x1dh\xe5z\xd0\xba\xb6\xf5\xae\x96p\x10V9\xfc\xb5\xdd\xc9\x08\xe8\x0daD\xa6@\x17D\x7f\x91O\xf5{5\xba\x04\xe6\x8bp&w\xf5F\x046\xcb \xf52H\x1f5\xa8\x0b\x1a\x92\x08\xbf\x0eM\xea;\xe7\xd6\xe1\x02 R\x90\x9a\x94>\xd0\xfeT\x9f\xc4\x0b\xfdgN\x0brA\x0b:$\xfa\x84\xb6l\xc2<\xcb.\xbck\xfa\xc5\xe6&\xbe\x9d\xeb\xa3\xf7\xf1\xc5\x04\x9d\xd2\xb9\xd1\xf4\xe0\xfc\x94\xce\x1d\x83\xa0\xda\xbf\xa13$\xc8\x9c\xd4\x87\x17G\xa4\x0c\xb3\xed\xde\xe0[\xf34\xcf24\xa7\xa7F6\xbfbY6w\xe7\xf1Mx\x1e7\xaa)L\n\xca\xd1\x0d)\xc8\x85c\x80\x17\x93)\xbd\xc9\x17\x8e\xbb\xb8!\x0bzC\xe6\xf4TA\xf1\x82RZ'A\x08+\xdd\xd24\x18\xcf\xdcX<$\x135\x10@sz\x82\x84\x9d\x86\x0e\xee\xc4\xd1\xbc5\x8ay0\x8a9Y\xd0\xb93\xf9\x98\xaeT\xf3s*\xa1\xebu\xdd\x9c\xd234'\x82\\\x84]1\x87\xd0\xa7!8\xe6\x03\xcd\xf6\xdb\x19\x9c\x02.]\xe4\xf0W\x83\xe9\xb45\xc0\xd3`\x80\xa7dA\x83t;\xaa\xc5\xce\xcc\xa1\xa6\x02$\xc9\xc6+\x8c\xc9\xd4\xe3\xd4\xa9\x82\n)\xc9TS\xd3\x05\xbd`H\xafs\xc7\x1dn\x91\xde\xacv\x878\xc0 T\xd2\x85f\xf4K\xdc2\xef\xdc\x1da\x9f\x9d~N\x0d\xc6^\xd0\x9a\x9c\xd2\x9a\x0e\xc9\x8d.\xb8\xa4%p\xda\xc8%d\xba\xc8\xb2\xde\xe5`&*6>\xdd\xdc\x0c*\xe0\xdb\x0b\x83\xc4\xa7\x13tC/\xc8\x85A\xe2\x1bz\x11!\xf1\x17@\xe2\x0br\xa9ci\x91i\x88\xc7_\x1c\x1e_d\x19\xba\xa07\x01\x1e_8<\xfe\x92\xe2\xf1\x05&5\xe5\xe8\x0b\xa9\xc9\xa9[\xa0\xf9dA\xbf\xe4n\x07\xd1/dN\xbf\x90\x0bz\xa3\xf0X\xcf!\xc4\xe0\x0bL\x16\xc1H.\x0c\x06\xaf\x99\xadE\xb1K\xc0d?\x17\x85aj(\x97\xad\xa1\\\x06C\xb9$sz\xe9pe\x01\xc8|\x01\xc8|\x81\xbf\xdd\xe3\x19\xba \x82\x9c&\xbdz\xbc\xbe\x0c\xc1s\x91\xe0\xf5%\xe0\xf5i~\xa9\xf1\xfaG\xc7\n-~\x1f^/,\xdd\xf4\xb5\x14#\xa7\x08\xa6&\x96w \xe2\xb2\x8c\xfbS\xc2-<\x07\x17\xc6)\xc4\xe8\xe5\xc9\x99\xa1E\n\x8b;[U\xeb\xbb\xc0\xe6\x14\xe3\x1d\xa7\x98 \xc4\xb2\xd0=\x91)\x95\x16\xf1\xa7Z\xa3>5'\xfd\xc2\x1d\x86\xd3@\xb3\xfb \xe7'(\x188\xbeU\x93\x9eZXb\x02\xd7\x89)i\x8d=`\xb8\x18u\xf9\x9fV\xb1' t\x1f_St_\xdf\xe8&d#\xa7\x84G\xb7\x8d\xb0\xb7\x15\xb4bw\\\x03?\xc8\x94\xbavW\xc1\xcc\xe0f\xf4W\x89\xd2\x99XF\xb2$\x00\xc1db\x8ao/\x15\xef\xab[\xd2u\xec0#\xde\xb7\x0c\x07\xad\xd8\x7f\x88\xc3\xe3Z*\xdd\xa1\\#\xe6Y\x03\x17GG#J\xe5\xae\xf7Z\xd5\xa9\x97n\n\xbfv\x80_\x80\x18Ir\xdd\xf5 \x00\x1c\x95\xc4\x95\xe3\xbb\x12\xd4\x8e\x8b\xf4\xc2\xc8da$\xe1koK\xe1z\xc0\xb7\xe1r\xc4\x02\x8a\x15\x92\x8a\xdf\xe71\xc8|;!\x84V]\x8c\"\xef`\x14]\x8c\x05N\xfb\xfdMn\x15\xcd2\xcb\xf6,\xc0&h\xcd\xa4\xda\x8b\xadg\xa0*<\xb9c\xa0\x98\xd4\xc6\xdb\xf0\x8a#\xee\x98\xb3\x0bG/\xd4\xab\x0b\x16\xbc:\x8d^-\xb2\x0c8f\x8e\x893\x16\xe5Y\xd6\x9b\xda\x9d\xce\"\xe3\x0bc\x0c\xa1OD\x9b\xa5\x8d\xf8\xa3q\x8b\xe8\x14Ve\x01.\xa6\xcb%\x1bT\xf0\xb7\xef\x14k}/\xb3\xd3S\xd4\x9a\xefcN_p\xd4\x1bb\xf2^?\x8d0\xf9\xc0\xe9\xed\x8a\xfc\xc5\xbdq\xea\x07\xbe\"O\x92\xdf\xcf\xe2\xdf^\xb4\xfb\x8a[\xafnJ\xe9\x07\x9e\x9e\xe3\x0fv\xbcOF \x00zk\xa4\x87\x96D \xf4\x8c\x1bO\x94'\xdc\xb8P\xfc\xc5\xc9\x07\x8e \x0bB\xbbXSq\x0d\xa2\xd1(\x87 d>\x12\x8c\x8b<\xd6\x00D *\xc0\xc7w\xaf\xf2\xe7\xfat!\xfd>N\x9c\xdf\x1a\xfa\x9c\xa1\x86\"F!\xef\xe6\xa4 \x124\xe6\x0d\x8e\x9a1\xec7\xd3\x89\x0b!t\xe8\xaaT\xe3\xb4\xc3\x0d\xaf\xf7\xef\xb8\xf6\xd4QoK5+\xf8\xf3\x8c\x87i\xe2\x00t\xaf8z\xc6\x9d\xa7\x88\x89b\xf8\x8a\xa3\xbf|!\xa9`\x94\xc6\xa8\x17\x8f\x1bm\xf3\x86\x12hU\xa1\xd8\xf354\xfe\xc45b\xac\x14\xa3\x11i\xb1\xfdA\xb0\xb4a\x94\xe8\xe7Zp\xea\xb3\xd2\x05bD\x10\xb6C\x18\n\x8d\xb9\x97&>O\xa4N\x08l9\xaa PV\x05i\xb1\xcenf\xb2h 3\xa1M_\n\xa1\xb6}^S\x1d[\xdd{\xfe\xdb \xaf\xa3}\xea\xa2\xc7\x05\xeaU\xdb5\xa8\x90\x06\x92]\xb2\xa2|#gF30\xecAP\xac@\xc4\xd7\xd1\xb2\x9d\x9fI\xf7yk\x1e,-h@ \nEcEty\xb5\x00\x15\x02\xc0\xd6\x98\xf18\xa9-\x8c\xd1\xb2\x95\xa1\x0dPc\x9a[.\xedS\x18\xd9\xb7\x82\x84D\xae\xd2\xca\xb5\xe1\x06a\x1eB\xe1l\xf7\xfd\xefed(z\xeblpsF\xe08\xcb\x1bM\x14\xfeN\xcda\x9e\x9b\x0cDL\x92\x8fw\x99\xca<\xe5tH\xee\xe9\x18v\xe4\x93\xf9\xfb\xd5\xfc\xfd)6\xda\xfd\x9d#\xeb\x02\xe0\x94\x02[\xa3\x10a?\xc7f\xa6q\x14/g\x8bO\x87\xe3\xca\xf9$dY\xe5\xad\x8a*\x13\xabGG\xdf\x82\xd0[\x9dq\xb7\\\x87\xff\x8cL#\xa0\xe3\xa7\x9cr5\xa3\x864\x1dz\xfd\xc4\xec\xd7\x14%\xe6SC\xf2\xb7\xdfsf\"A\xd8\xb2\xb8\xd9\xc9M\x91_\x16\x84\x81\xed\x90\xc0\xed\xd6(}\xaaFF\x87\xe3\x99\xb8\x85 \xfa\xad\xeezhk\xf71O/P\xdb\xe0\x96\xcb7\xe9H\xad\x88]\x9c\x8e \x04\xa3\xfd\xe2Gb\\:\xba\xc7\xa3p>\xf8\xec\xb4 \x8d\x95\xaa}\xf2\xbc\xec'\xae\x0d\xd9\x00K\xf4\x18\xee\x85\xb8A\x9a\xd6\x90\x87\x9dg\xc5o\xdc\xe50\xbb\x8d\xa0\xa7m(\xbc\xa1\xb5\xfb\x19\x98{\x7f\xf5\x8f\x81qg\xb0_(\xa5_\xf9\xe4\x1eO\xd6\xfb+\xa7,\xff\xca\xe9Wn\xec\xa1\xc9\xd7\xc0u\xf3\x0f\x8eBD\xfd\xc4\xed\x00\xef\xf1\xc0:\xd9Y\x83\xb0I\xb2\xeez\x18@v\x98\x05\x94\xa1\xfc\xeb\xc7\x94\x9b\xb1\x04d\xb5\xc1_\x15\xb2~\xe2\x949w \x8bi-\x15\x9c\x82n\x0b\x84H}\x8b;L\xe6\xf5\xebO\xbc\xd3x\xfdSh\xd1\xfc\xd5\x16\xc1C\x87c\xc1w\xc1\xd7\xd2\xb0\x10\xcc\xbfD\x14\xacK\xcd:i\x10\xc3y\xa0\xa9\xf99\xf4\x8a\xe1H\x1d\x9d\x8d\x1eXpuN\xd3\xcfn\x8f\xd4f\xa9@\x85\xf7\x8e)\x1a\xc9f\xef\xd8l1e\x922\xa36\xfe\xc4\xc1N\xd1O\x9b\xd3\xaa\xc3\x82\x9b\x87*n\xe3\xafUS\xed\xe506\xce\x0efc\x98\x99\xd7\xab\xa0U*t\xbe\xb1\xd0\xb43jO\x98\xb6\x80\xcfvK\x03c,iM\xcd\x06\x9bR\xa1\x08\x86\xbeoN\x93M\x0c\x1c\xe9\xa3\xa7\x06g\xe7-+\xe5\xb4~j\xab\x1d\xe8\x07\xc2\x8aS&\x0d\xfcTk\xc1O\xfdN\xe3\x96y\xa3q\xabmy]NPMK:'\\q\xea\xa5\x913\xd09Y<\xbe\xc7\xdb\x06\x93\xad2\xba\xd0\x16\xae\xda>\xdb\n\xb4K\xc5\x03\xd9\xb6\xbe\xdf>\xfb\xbf\x84s\x992\xc4Im\x17\x81\xd4\xc6\x86\xdb,B\xadA\xff\\\"\xfe\x03@\xe6\x96z\x06\xd0\x05\x1du\x00y\xdc ln\x81\xcd\x89\x0c\xa0\xca\n\x0fUu\xa4\x8e\xd7RU\x1dG\x8e!\xdc\x1eU\xd8\xbd\xba\x1a\x83 8,\x0d\x8d<\xaa\x88\x05\xb4\xfe\xd5\xb1(\xf9/\x9c\xb4\xc6\x9e\xb3\x15vkD/\x8a\xc1\x17^\xcd\xf4\xd5\xed\x1e\\tZ\x08\x14&\x05h\x8a\x966\x9a\xd1\xdb\xa68\xcd\x19\x99J\xa6\xdaot\xf6Pq\x93Wd\xc6\xe6u.;\xce+\xd4\xa8s\x15\x08\x83\xbb\xff\xc3\xc7r\xb2\xff0\x97\x91\xd7?\x03\x87~\x8c\x89\xaa\xf1\xe0\x91\x9c\xec?Hj\xe8V>\x06.\x0b\xc1s\xc7L\x1by\xa3Z\x1daR!\x9f\xe6)\xfcF\xaeV\xa1 \xe0\"\x19p\x87\x1f\x87h\xb1n\xa1OG\xc2\xbb \xcb\xac%\\\x1a g\xc0IU\xc9%\xf1\xd2\x98f'L>\xd5V\xd8@\x91E\x8e:yz\xb8\xca[\xaeA\x10\x1e:`\x12u\x8b\xbe\xc7\xb5H\xc0h\x92\xa0\x04\xabk\xf1\x90\x88\x94\x8f}\xcaI\x9b\xb9}\xca\xdd\x85o\x8d\x07\x91\x1d\xebr \xe2\xe6\xd4\xcb\xd2\xe1\x16\x18xw\x1c\xd0\x18\xdb\x00\x11ERA\x9f\xbc5\xe5\xa8 \x15\x08\xb8E\xcc\xa4r\"\x02\x16U3\x985q\xb2<\x13\x13\x82\xe1\xdb\x95u\xa4\xd1NM\x05\xbd\x95\xac\xb0\xce\x07\xb9\xe0dQ\xbb\xd02\xf9\xef\xfa\xa7y\xa9\x7f\x99\xf3X\xffxu1g\x122\x0e\xfdTT\xb3\x92\x99\xe2\xd7\xc5\x8dX4Q\xcd\x03v!\xcc\xa3\xc5\x06\xfb\xeb\xc4\x88\xf6\x9e\xdep\xa7\x02UI\xc0\x00w\xcf\xa3\x17\x025`\x83k6b\xf5/m\xc4\xea\xff\xdeF|\x1e\xcd\x98\x9f \x98\xae\x9d{o8\xbe\x16\xa81\x075\x18)\xf1\x13\xe4&\xeb,\xb7,\x9d\xc5\x1e\xe4(\x90\xe2Y{\x9aVA\x00\x8c-L.\xad\xa7+\xb96O\x9a\xb6\xf5\x86\xe3\xd0\xe8,$\x12A\xdf\xa4N\xed\xda\xc6\x85\x890Q\x1b\x95\x7fa\xe3<\x90\xa9\xf1\xa4\\\x1bEb\xea\x10i:\x99R\xc1\xd1\x14\xe7S\xbd\xdc\xd3.\x94\xb0\xf6\xea\xd5\xda@\x0dd\xde\x95Or\xd1\x19\xbf\xa1X\x17\xbfa<\xef\x8c\xe0P|3\x9aGg\xdc\x80b}p\x91\xe5\x12T\xb1r\xb9\x04\x18\xe0,\xfb\xa2\xd6D\x11\xb2)&>^\xdfIK\x1d\\\x98p 'd\x0eRxR\xa8U,\xd3z\xc44\xaf\xb6e\xb9\\\xfa\xf8\xdf\xcb%\xe7\x93\x8e\x80j\x1b\x0b\x1d?C!\xc6B!I\xabILPM9_.ot\xad\x9aHr\x02\xfe7x\x82~\x04p\xebC_\x14\xdd\xa1/:\x97\xb0\xab\xc9\xae\xd2\xee\x80\x17w\x8e\xec\x8e\x97\x08\xafi\xae+0E\x13\x07\xa6\xc0\xf97f\xb2\xfeS\x92\xec=\xda\xb2\x91\xa0%&vCJb\xb1\xa4$nS\xd2)\x91\xb4\xfew\xc6 iodhUB\x1a\xb4mT\x9bD\xb8\x115\xd6\x19\"r\x1d\x9f\xd4\xf9o\xc2\xba\xf6\xd6\n\xe5< II\x06Jh\n\xfeQ\nBP\x17\x85@w\xd1\x14\xfcc\xd4\x03\xff\xc0\x1e\xf8/\x13\x8f\x0e\x82\xe0Q\"$\x1c-\x02C\x82\xa6O\xfe%\xc2\xd1j\x12\x13\xb4H GIN~\x9cph0\x7f\x0f\xb8l8\x9e\xef \x1d\xb6\xd1\xceb$a\x9c\xdfOA|k\xeb\xdf\x9aF\xbf\x83\x90\xd8\xd6Z[\xf1G\xd02\xfd|kw/&E]@t\x9d\xebl\xd7 #\x9ae\x1d\x06\xc4\xcb\xe5\x1d\xc3\xec}s\x98\xffzGjB\xdfA O\xba\x08\xe4IB \x17\xff\xdf\x83\x0c\x90m\xcbS\xbf,\"\xfe\xd9s\xaa/\x93\xeb\x88\xb9\x06\x98\xa8\xc1\x1d.\x0b \xb0\x91Y\xd6s2\x1b\x91eW\x10f\x82\xf4F\xd8\xdf4\xc62:,\x9e\x14>\x05\x901`+:\xb7t']\x061\x8a\xb1\xd817\xf7@\xf7\x16\xb3\xff\x9e[\x86\xab\x81\xbe\x82\xc5\xa2\x01\xc5'sw9\xd0/\xa1\xb0\x86+\x92\xb9@\xd4\xbaN\xaa\xc4\xd3\x11\xad\x82Y\x0f]K\x1e\xae\x7f\x07\xa6nax6\xa7\x937z\x80\xc9\xa5@C\x92\x96\xb6\n\xb4K\x88~\xc6\xb9{\xcc2\xf3\xb9=>\xd5\nh\xc7\xa6\xd8'O\xbb\xd9|,\xc8\xd3\x82\xdc+\xc8\xa7\x82\xde&\x02+\"Y#ot\xec\xf4\xc0\x03\xe7kl A\x04\xb5Wwo\x96`\xce|z\xe0\x0c\xf2Im.5Hv\xe1\x10^.\xcd\x8b\xad\xac\xc0\xdeP\x80\xf9\xdber\x94`\"'\xa8\xa6\xbdarU\xdb\xdb\xb5VF\xd4{\xc0\xb6v\x87\xf7x\x1b\x9c\x18m\xccr\xd9\xd3\x05.;J\xa1j}8\xe3\xf5KW\x05\x15K:\x02\xd7\xa6\x03NFY\xe1\xef\x9dp\xa9sb\x0f\xdfl\x96\x1d\x17H\xb1DP\xa1\x0e\xde\x10\xc4!\\\x0b\x98(\x91a\x12C\xa4!C\xaa\xa0\xa1\x81\xab\xc5\x95A$\xc7h>\x13\xeb\x13\x04\xff\xe7\xe6\x97\xf5\x97\xf4>Rl\x8c\x9d,\x82\x83\xcbX\x1cH Uj@5\x11\xad\x88&\x0d\xe1>nRk\x07|*\xdc\xc6\xe1\xc4\xa5m\x13\xd4;l\xaes]\xd1\x1fy\xa1\x1d\xe4\xfb\xf1&w\xe9\xa2+\x10\x8a !\x15\xb6\x832\xe0\xe5\x11x+\x1d\xfd)\xd6\x04\xac\x850\xb8\xa0\xff\x08|1\x0cP?\xaa\xd51\xc1|hm\xc1]\x8fqm;\xab\xc0\x007\x01\xb7P\x03\x14\xa1\x0bhC*\x07gA\xba3G\x0c\xef\x82\x7fE\x84s\xbc\x8aI\\\xb0\x18U\x9b\x88E\xebQ\xad\xf8\x89\x07\xf2\xbf\x80\xba\x0e\xf3H$\xa8\xb0\xa8\x87\xff\x1f\xc6\xed*:6m??\xb2\x04\xc1\x16\xb8\x13\xcazu\xe2u\xf1\xc7\xc5OF\xfa\xd6\x12;u\xa5\xf6\xa0\xe6|^\x97\x88\xa0\xeaj$-\xa4\x0d&\x15w\xcb\x14\xd9~\xfe\x9e0\x05\x9a\x19H\xb6\xa75\xe4/R\xcf\"z\xcb\xeb\xa7\xc5\xf4\xfc\xaa\x90\xb3\x1a2o\xa8\xe3\xda\x19\xb7\xb8\x9f\xef\x9bB6\xfa\xc0\x01k\x96\\\x92\xa6\xe0e^\xc1\x1f\xbf\x06\xf9\x10\n m\xab \x81 4_\xe5\xa8\x18\x04\x9d\xd1\x86\x14\x03\xd7\xbe\x86\x7fP\xe0:\xa4CR\x80\xde\x138B\xd58\xad\xcc\x83\xef\x16*\xd9\x8e\xa90_\x18Mi(9\xfd\x9c\x18\x0b&\xe7\xa2\x80\xf8\x89\xce\x15\x94p\xf0\x10\xe7\x10\xf1\xc9\xaa\x0c\xa2\xcd\xaa\xcfE$\x83\xf3\x14c,\xe9(\x93\xcb\xadX\xbc\xb7\xb7\x13\xf9\\\xe9\xadg\x0e\\\x16\x1e\xb8,\xd7\xbb\xce\xfa\x8e\xfam\xe4\xdch\xb5\xae\xab\x9b\x14g\x19 h\x85\xc7\x91\x07\xac\xfe$}\xe5\x9a\xd0\xc4\xf2\xd6<\x84\xee\xec\xa6(ra\x051\x81\x8b\xa0\x1f:\xb1\xb2N'V\xe6\x9cX\x99wb\xf5\x0dxM\xe4\x8a\xa5\x0e\xac\x0e\xe9\x03\xc2\xb1\x92\x19\x1d\xa9q\xe8\xd3^\xa6T\xabks\xeb)\x1b\x15\xb90\xf9~O\x84\x04d\xec\x03\xc8+\x0brb\x12+\xd9m\xea\xe2 B\x10\xd207\x86\x99\x1f\xf8>\x83\x12\xa3\xc2\xa4\xa2\xee\xa4\xb0PA\x15\x15x\x82\x84\xeb \xd4\x8eA\x90i\xf7Ip\xcc\xc0K\xf2{\x81\x14\xaf\x08\xe4\x91G&\xfd8\xca6l7\x96\x9d\x8b>\x02:{\xb4\x13\x13\xe3\xd0\xfd\x0c1*\xd6N\xce+\xf4\x84\x8d`C\x85\x1b\xb3\x08\xc94D\xdcg+=\xee\xa1!\xeaw\x0d\xbd\x11\xa7\xac9c\xb2\x9f\xdb\xb9V\xce&\xc3\xf8\x0ft}\xeb|\xf2;V\xdb\x93y\x18\xb4'\x00\xfft\x04 8\xff\x9a8?Q\x92\xc7ilIE\xdb/n\xa8\xcd\xae\x8b\x12Iw\xafH\x92M\xc5\xe9\x9c\xa3\xcdo>\x08\xf6_\x1a\xd5h\xdb\x07@\n\x1d\xcd\xf5\x02+\x16\xca-o\xc2J\x05\\\x87\xb3Mq\xc1J\x83=\x1al*\xd0\xb7\xb9u\xbc\x9b?\x1b\xc7H\xba\x16\xda\xbf\xb5-S4\x8d6\xfb\xef\x8c\xcff\xac\xea\xe7`7\xa0\xe8\xacw\xdc\x0e\xf14\x0cD\x1aF\xe0\xach\x12u\xd4`l5a\xe6\xa4P\x97\xd0x\xacq\x82\xe6RgZ\xef\xe7U:\x02\xb9\x86\x04T\xd1\x08\xe4\x9a\x0d/'M\xe0\xc4\xad\x1a\x8e\x86\xa4\x9f\xa3q\xe52\x06\xa9\x07\xe2\x1fw\x9eYc\x17\x9d\xd1[\xfdl\x99\x80\x17{\xe6\xef\xae\x8d\x11b\xe3`\x98\xe0>\xf0\xe7\xa1)5\x1f\xd9`\x19;\xa1\xf5\x8e1\xbc\xb1E\xa7V\"\x8c\xb3\xecF }\xd5\xb2\xc9[L\x9dw\x1c\xe1$\x8f(\x10\xd8 \x0e}|m\xd6\xb9\xddl\xd6\xb3\xf4\x92\x9d\x16\x18\xe2XE\xf7I\xbf\x93\x96\xcb\xde\x87\x02\x82C\xb6\xc4:~\xac\xbb\xf9k\x8e \\FGP\x0dn\x04\xe2\xf1\x96\xd5O\xe1,\x9e\x1a\x19\n\x91:a\x87V\xb3Z\xcdoK\xd3\xea\xd3\xd4\xc98\xca\x83o1M\xe7\xba\xe7\xdd\xdc+\xe3\xe0\xcb\xd2\x88\x1f0Y|\x1b\x8bq\xdc\x14\xb4\x08'\xd5\x0d\xda\xe0\x87\x87/\xaa#\xda\x10yx\\\x1d\xd1Z\xf1\x90\xb09\xf8\x89,.l\xd6p#\xe9\xd7?\xd8\xc5\x17\xb5e>7\xa8_\x8ab\xd6wA}\xf4\xae\xba\xe43&L\xd5b1\xe3\xa2o\x18\x9a\xe1\x98=\xfa\x83\x85 \"?7\xe8\x0fv\xc8\x8e\x92\x16j\xb1\x90S\xa6{`\n\x0ei\x17\xfc\xc2\xe6\xa1\xe7\x17\xc5\xa9\xcb\x95\xce\xab\xf3\xe4#\xb2n\x90'B^\xe8\xba\x92\xd5\xacqu\xeb\xc5\x97\x0b\xde\xa4\xb5gL\xed\xd7Z\x7f\xd0\x88\xd3\xd3\x92\xb5\x86T\xcd\x17M?\x7f\xc3\x90$\xb5n\x8bW\x97E\xc9\xa1kRV\xa8\"}Q\xe9\x94\xe0\xfdx\xba\x90\x11\xbc\x9f\xcb\xc1\xf1\x95,\xe6s\xeb\x08q{U\xd4\x07\x8b\xb2\xe1\xf3\x92\xe5\xbd^=\xb80?V?\xd4\xbc\x0b\xb7\x9d\xbf\xfa\xce\xc1\xad,\x11,7x\xb5!*\xc4\xd5W\xe6\x92Tcu\xe5\x1c\x9c\x15\xf5\x9b\xabJa\x12\x93\xcd\x0d*\x8d\xc6|J\xeb\xc3\xf2h\xdc\xb7Lr\x1f\xdc\x87[\xa1\x9a\xa6\x139P\xe3\x82\xdd\x0cI\xa7\xa7\xe0Ez\xe8?$\xd3#\x9c\xb7\xe29M\xb3,\xfd\xb2\xdf\xdfl\x7f\xac\n\x8fp\xfe\xa2=N\xbb\x89\xa7Y\x06\xf3.\xf1\xca\x06P\xb3\x98\xaf\x97\xf2\x9a\xa9S\xfd=\xc0\x0c\xac\x0f;a\xaak\xbdS\xffw\xad\xa9\xde=s\x10\x9b\xe61\xdf\xd2\xa1 \xa8\x07\xa2zVr\xc80%\x07\xa2\x9a\xaag:\xad\xf0\nB\xd7\xc6\xe18,\xf1\xab\xda\xca\x07\x9dc\xccL\xab\xa4\xfb\x10\x1f\xc7[X\xe6\xd5\x00\xa2\xb7?7q\x90\xc0\xc7\xa8\xae\x00\x88\x07\x10\x97\xca\x94L\xfa\xf5T\xf2y\xd3\x07/&\x84\x18-\x07\xda5\xd6\x84NB\xfd\x19\xbf\xecC\x10\xef\x8a\xc9\x9f>\x1c\xbc\xa6\xfdG\xfa\x9b\xc7\x8f\xfe\xcf?\xccS\x9fh\x0e\xffB\\2\xb0{D,4\x82\xc4y;\xe6\xeb\x80\xd7\x93vo\x9c\xdc\xf2:W/W8\xef\x18\x0d\xc7\xc4B^\xc7\xccB%eD\xba\x8d3)\xdd#\xed\x0d\xe1\xc8\xfd\x1b\xc2\x1c\xc1\x03\xd5\xbf1\xc6y\xab\xe9_\xdf\xeb\x80\\\xccPK\x06\xd4R\x92\x8f\xd6>1\xb0Ue\xa4\xa4\x85\xda4\x12\xff+\xd4\x94a\x88\xd3\xf7m\x8a:\xa5\xc3\xf14\xa0\xa8SGQ\xa7G\x84\xe1q\xd2J\x07Umw\xf5\x9d\x94\x95\x85\x94\xb5\xddJ\x8b\xba\xb2\x98\xba\xb6\xbf\xe8\xa4\xb0\x1d\xc3sT\x16\x02\xb1M\xe9\xb9y\x8aH\x1a\xbb\x9b \xda\xed8\xa5\x7f\xb1 $]\xbcq\xd9\xdd\xc4X\x06\xc4\xd8d\x90\x93\xe4\x16\xe2WZ\x9f\xd8\x1f\x1bTD\xa5\xcd\xe4\x9e\xfd\xd8\xe4,a\x99R\xb9\x02\xa2=\xb569S`kkE\xcd\x17\x8a|/R\xb2X\x1b\xf2=\xa7\x8b\xc3\xfah\xdc\xaf\x9b\x9b\x92\xa9=TO\xaa\n12\xc7y\x7f\xa6:\x93bQ\x977\xefY\xf3\xcanxS\x0bh\x11\x9a\xd3\xf9d>8>>k.J\x03\x07\x9ce\x7f3\xd3Dx*\xd4\xedSa>\x89\x93C\xf0\xe5\xb2\xaf\xfe\xceq\x96}\xb4m\xa4'\xc2\xdc\xbc\xeb\xf77\xd5\xebz1\x9fKV\xd7\xe6|x1\xe3\xa02\xf8T\xc8J\xe7\xb6\xa0u\x96\xb9Z?\x81Z\x85\x8b*y_,\x1a\xf1RL\x17\xb5)@\xad\x83\xa4\xc6f\xcess\x8e\xd4V\xbb1\xcf\xb2_\x10#5\x99\x93\x12\xdfq\xb808\\\x18\x91\xa47Z\x7f\xb808\\X'\x02\xeb\xfe\xa4\x0e\x9b\x9ae\x90\x90\xe1I\xd3H\xfee\xd10\xd4\x87b8\n/\x192\xb5\xf0\x1ad\xf7d1@ms\xc2\xa0\xca\xf6\x81'O\xd4\x88\xe3:j\xf8n(\x06\x07\x7f\xd7#j\xd7\x8ek\x04\xc7\xea\x1d\xa7\xe248\x15Yt*\xdeh*\xdbq\x00\xba\xfb\xe2\x1a>|\xd5\xba\xdd\xec\xe5:\xadw\x9b\xc5\xbfW\xa0!i\xd9\xa9+\xbaa\x99\xf9V\xe6\x14\x19\xe4\x8c\xb8\x9b\xb3O/\x1f\xa4\x8b\xb3\x9f\xc4W'\"[V<\x959\x97\xf41\x0f\xc0\xd5\xb2\x89\x0e\x0b'TQ\xf4-\x96\x00\x9b\xe3\xef\x03\xbb\x86\xe0\x86Hbl\xba\x08\x8f\xba\xaa\x03\x90#w\x07,\x05:\x00\x8f\xa3\xd4\x80\xa5C\xcf\xd8a\x19[Ab\x04g\x05,AM\xee\xd4z\x93\xb5\xc1\xfc\xbc\x82\x0f\x80\x97\xbbTm\x14\xf1v\x0e\xa3\xca]\xd4\xbd\x935\xd4\xd3\x92P\x1b\x154\xc8\x83\xab\xaeR\x81_\x0e\x0c=\xf4\xd3\xe1\xc6\xaf\xdb\xfc\xac\xc1\xa0um\xf6\x97\xa4\xb6\xbe\xd7\x06q'\xe8C\x8cI\x95e=\xa9\xc5\xc5\xa1Z\xacr6\xbf\xbd.@\xdc\xa5/UM\x8d\xb2@l=\xf9PSJ\xaf\x15\xb1\xfbP\xd3+5\xea\x0fuO\x97\xc0\xc3U\xbd\\\xaaW\xe75\xc8\xbd\xe9\xdb\xda\xdd\xba_\xa8\xaf\xde\x95\xe8EM\xde\xd7\x98\xfc\nOok\x8c\xb1\xba\xf5/\x97][T\xebz4\xca\xecDR\x83\x00\x95\x86\xf6E\xa3o\xea\xfe\xcd\x83\xef\x10F\x8c\xf6\xd5\x9e6Xh`\x85Z\xd8\x88S \x1d\xef\xd2\x83\xbb\xefk*\xbd\x9aB\xfb\x0fq\xfc[\x814\x19\xb7\x82u\x03\xba\xd0\x04\xbbK\xd6\x0f\xc7r*\xe9\xafS\xb1\xecs\xae\x0eh-\xf7Kt\n\xc4\xf6LB\xd4M\xb24\xc7\x17\x07N\xbaV\x02\xa2\xe1z\xb4\x84\xafB\x9c\xd5x\x19anX\x1f6y4\x0b9\xc65\xad\x08\xe2T\xe2\xd0\x0e`\xab\x8d\xef\x84\xb7\xba\"b6(\xe6\x8a:kiZ\xe0\x8c\xee9\x90\x1d\x9b\xdc\xd2;\x84Y\xfd\xa1y\xf0\x16P\x95}\x17i\xf9\x03%}\xa4\xe3\xaf:u\xfc\x95\xd3\xf1W\xa1\x8e_?\x8e+\xf7~U\xa5*~\xfb&T\xa4\xadV\xe4i\x0c)\x9bf-5p\xd1\xca\x0c~\x82\n\x9d\xd3 \x94\x1d\xa4$\xd3\xf0\xc6d\x95\x1d\xc9\xe5\xca\x1c\xe6U|7/\xe89CSR\xa8\x03 \x9e\xa4\xaayx\xd4u\x05/\xe8_\xae\xee_k\xea\xda[v\xa1\xe5DEKN$\xd7 \x90\xd2\x96\xbcd\xa0\xa0\xcf\\\xbf\xcf\xda\xfd\xb6o\xd3\x81\x0d\xb3\xbbMw\xdc\xb5ep\xd7\x9eFwm'A\x12:\x07%1&\x06\x05\x84\xd1\x96m\xf9H\x96\x15]\x85\x1a\x19\x8b\xc3\xfa\x08\xeb\x9b\xb3\x954\x013\x0c\x1a\x87\xa9~=\xed\x12\xde\xab\xeb\x04\xaat\x82\xd3\xc3\xf2\x88\xf6\xfb\x1a\xe5\xd7\x8a\xa7\x8cD\xc7\x89\x9e\x12 \xd0\xff\x82\x9c\x88-\x97H\xad\x0d\x88\xac\x19d\xc8\x18\xcc\x17\xf5\x19\xaa\x8d\xbd\x9b\x97\xce\x19\xfc]PyX\x1f)\xa4\x9e\x9a\xabk1Q 1\x98A:\xa1\xbd0Z\x14\xfd\xc1\xc2^=\xa68\x85\xb3jV\xd3\x1d\x0dm\xdc\xeb\x80\xf4r\xb9\xc8\xb2\x96\x9cP\x95w\xad\x80kl\x81;\xbe\xc9\xb2\xe9ay\xd4\xa3tqX\x1e\xb5\x97P\x95\xda\xb0\xbb\nT\x16\\\x8490\xa9+0]\xdc\xbd\xd0\xc0\x9e\xa2\x05]L\x16\xb1\x04\x92L\xe9t2M\xca\x0c\x94t\xa8\xdb\x85\x0ea\x1a-\xcd\x02\xb7\x04\x96SJ\x15\\[\xd2\x9eE\x96Y\xb1\xa4/\x83Y\xc4M\xf6\xfb\x9b\x8b\xff\x94\x88\xb2\x13\xd3\x90\x9bUi\x95v\xcb\xa5\x19\xb5\x86i\x07\x0e.0^U-\x00\x18\x84!\x15&\x9c2\x92\xde!\xbbdn+r\xafM\xb2\xf1m\xd5-\x88\xd2\x11\xf3\xfe,\xba|B?\xb1\xe2\xfc=k&\xe6o\xfe\x9e5\xde\xcc\x9d\xd5\xb1\xf7\xb3>g\x89\xd1}O\xcf\x9d\x0d\x86?\xf8\xc0R\xe3\x06\x12\x16\x06Z\xb3Sf\xdc\xdd\xb5\x11\x89N>U\xb9\xfb\xfa\x88\xba\xb0\x19\xa7\x0c\xb9d\x1a\xf2\xe6v*\xaaZ\x94l\x00\xca\x10u\xaa\xbb\x08u5\x03\xaeP,\x9a(\x9e\x8e\xc9\xcd\xb2\xc28`\x1b\x9a:t;\x90\xec$\x8a\xd4\x1e\xe5H\xf3\x81\x96\xac\x986\xaf*\xb8_\x95]\xcd\xd1f\x15Ng;7|\xa8\x11\xff\x1a\xb60\x16/\xa5<\xfa\xdev\xc8\x9dK\x03\xd2\xe0\xbe\xe9r\x1b\xc0\x8d.\x8a\n\x1c^&L\xe0\x11\x8b\xc4\xb4\xf1\xe1\xa1O\x10\xd2|\x1b\xc3\xde\xd1\x1b\xa2Q\xeb \xb6c\xf7D\xa3\xe8\xbaz\x9bI\x84W\x95 l\xc3z\x03B\x05\x98'\xfeW\x87\xad\x05\xc9\xc1\xa8\xbfg\x88\xbc\xb6FO.\xfd\xe9\xf7\xa3\xab\x0e\xe4+j\xb4M*\x1c\xe0.\x0b\xb3\xb9\x93\x9d,\xb0(\xc7a\x1e\x11\xd6\xf6\xb5EF\xd8o'\xd5\x99]9\x91\xbf*,\xadlR\xdc\xe8\x0d\x1e\xb3\x0eo\xb5vT\xf5\xef\xc3kwG\x86\xc8C\xc1\x8a&\xe2\x8c\x13\x8e*\x88\x98\x85\x83\xab\xde\xba\xea&ISe%o\xc1\xfd\xc1\xad\x88\xbeE\x84\xd1\xa6\x98\xad\x14\xb0\xde\x9e\x7f\xdd\x18uUX\xb9qE\xdbs\xd7\xa7`\x0dW\xcd\xcd\x91B\x08\xa1h\x11\xb3\xec\xa6\xf2\xd9\xaac\x88g\x19\x1b\x9c(N\x0da\x17\x9f*\xda\xf1 \xad\xdb\xceS\xa0\xc2:'\xa6\xd6`3\xe9c\xb5\x06\xe7M\x95VN_z\x9f\xae\xe0\xcdA\xa3\xce(l\x878\xdaw\xe4Hc\xb8\xc1\xfc\xad\xd1w\x91\xa7\"\xddD\x1d'\xcay\x99e\xe7%\x02\x13\x86\xf5;l\xa7\xb5\xd3\"\x11[\x93`\x9a\x7f\x13\xc6,\xc3\x96&\xe8hDc\x1d3\xb8\x9a\xec?\xc8\xabV\xcc`F\xa5\xcdI\x011\x95\x0c\xed\x0b]\xb9\x8cE\xa4\xa0:\x00]\x85\x82\x83\xf8\xb2\xd4y\x1b]\xa8$Ch@+\x86\xd5A\x1c\xa1eS+\x08t\xf8\x9e'&\x8b\xb1\xabpu\xa1\xdd\xf0\xe3\x0b=\x9c\xd0\xc6\x8b5=\x0cMc-\xd1l\xd3\xd92\xea8\xe2W\x90$<\xdcT\xbbz\xf4a\xd1N\xbe\xb0K\x1f\xd0\xd4:b8\x82\xc43\xee\"\xbe\x80\x84\x85\x81\x8c's[\xcbY\xf7\xcc!\xc9\xae\x9dIH\x03\xe7\x9d4p\xeeh\xe0\xdcK\xc2}\x03sWa5O\xe9\x9e}\x03\xa3\xb0K+&\xa8\xa4RM/\x80\xb5\xda\xc0\xa5\xdf\xc0eH\x03BK\xdb)\xce\xcb\xa4\x00C\\\x06_\x124\x8b]r\xcb\x1d\x0f\xe5 ]\x99\xd5 \xc8p,\x1dKiu\xd7v^\x9cp\xfb\xb1W1\xb8\xbe\x80O\xe5\xea*\x9f\xf6\xf3=\xcd\x80\xc5F\xb7\xa6\x82w\xae\x0fw\xeb\xc3;4\x15j\xe2\xe0\xaen\xce.}\xca\xa0\x1a\"+\xf1t\xc1l5\x18\x98\xd3]\xb8M8\xff~\x99K\x9b\xc5\x0e. \x1bR]f\x1bw\x99\x8d/JN\x12\xe6N!\xb7d\x81\xd7P\xcc\x89\n{\xe1\x0f\xb3\x0d\xeak\xab\x1c\xb3\xd0s\x84\xc7\xec=\xc4\xd2ms\x80v\xe5\x8cw\x9a1\x8f6*\x15m\xa3\xd4\x97\xc5\x8c\x0b\xa3\x14\xbf\x99;[; is\xb3\xec\x05\xd3\x8a\x85B1\xd2B\x91\xb7\xc2$\\\x16t8\x16\x8f\xb85t\x16\x9bt\xcb(z(?\x14G\xa4T\x7f6G-\xc3\xd5\x8a\x94\xdf2\\\xfd\x9b\x99Z\xb1\xa8\xf7\xa3)\xfe\x05U\xa4&\xa5\xa2\xacV \x1b+\x8b\x8e\xf5\xa0\xbb\xb54o\xdb/\xad2H\xf1}\x91\x85\xf1 00&w\xbc\xeb\xb4\xd0d\x91\x85f\x15\xdb\\2\xb0\xd0lz4\xfa\xd4i\nb\x93\xcc\x8e\xef\xdb6\x9byW%gd\x7fx\x94\xf7\xfb\xaaO\xbcZEW\xfa\xbd\xfc\xfb<\x9e\xb6\xbc\x0e\x19n\xdf\xe1\x89\xeb\xcc\x1bS\x8cvB\x8d\xf0K8Y\x83\xfb\x9b\xb9r\x834\xda<\xd3\xde\x88\x1c4(\x0d\xc2\xe2\xae\xe0-\xb9\x00hF\x1b\xe2\xe6\x11\xdd\x90&\x8a_\xcf\x91\x04\xc3\x12g\x01\xf1k\x0dv\x02^\xf8\xec\x9c\xbc\xab\xb1\xd7\xf2j\xf5>\x0fc\xd0\x109\xe9\xb8\x94\x02\xadQ\x88\x8e\x075k\xac\x02`\xc2\xc3_\xa8or~\xf7I\xbf\x12\x15\xeb\x93>\xbf\x98\x0b\xd9\x14U\xd3\xc79\xb7)\xc1\xa9~\x9b\xa3\xb8_K\x1e\x90H\xef\xb0\xa6\xe7,\x13\xa9\x02\xc2\xf5\x88'\xc26\xaf\xe3\x08\x98\xe1\xba>\x9b*\x18\x9e\x08\xf8\xbe=\x07\x06\xd6\xb9\xe6r\xd2\x07k\xe5H\xf7k\xcfi\xef\x1a\x1f\xb8\x03&\x02\x9b\xca\xfadF\xe5a\x82\xe9\xdb\x0e\xe3OK\xed\x19a\x94\xc7:r\xdb\x8f9\xb0\xbe\xc7\x81\xdez\xd0W\x1d'\xd6\x0f\xf8\xcfW\xff\x86\xff|p\xb2\x9c\x80\xf0\xc0\x8a\x9b\xd6\xbd\xf9>y\xf8I$aH\x0e\x0d\xcb\xc0* \xa5\xc7\x87\x8b\x91\xe1\x8f03u-.\x8b.\xfb\xecj\xe3\xcf\x02\x93fp\"\xe4\x8bbz\x16\xa8Z\x1a{\xdc]\x97A\x96\x00\x88\x92U)t\xd5.\xa1\xd5\xa0\x98\xcd\x8c\xc8\xeb\x8cUH\x12\x89A&\x04\x91\x97f\xf5:\x95\xd4A1\x9f\x98\xbf\xf9A1\xf7*\xa93\xc7k\xa3\x8a\x96\x1c\xb9@&MqJ\xb7I5\x98\x177\xa5(f\xf4\xd6\xc8\x8d\x83\x9cQ\xd2\xaa\x9e\x9c\x93\xe7`j\xacti \x13;\xa8\x97Kt\x00a\x95\x9e\xd7Tbb\xd4`+\x12d\x02\xb8\xb8s\x1cc+}SSZ\x1b\xb9k\xdc\xady\n.Jz\xb4~R\xc1(\xcd\x14\xcc\xd8\x88D\xc2\x005\xa2.I\x1e\x02\xdei\x89\xc0# \xf9\xb3\xa2\x99\x9ei\x17\xe1\x0e\xe0t\x989Ho\x1e\xfd\xb2\x9e\xbc\xac\x01m\xde\xb3\x06\x1d6g\xbc>\xc2\xf9\xcbZc\xc1\x19\xaf\x1d0m\xac\x16\xabIT/\xdb\xc3@VWx\xeb^\xbd\x07\x13\x1fK\xdd'U\xde\xef\xaf\xf0\n\x93Jg\xaa\xaa\xc9MM\x0f\x8a\xe6l0e\xbc$\x97\xf5\xfa\x14\xea_\xd2w:\xd2\xfauM\x87\xe4\xaa\xa6\xdb\xe4\xbc\xa6;\xe4\x8d\xfa\xf9\xc2H\xc2\x8e\xcd\xdf\xf7\xaa\xf0CM\xafk\xf2\x97)zR\xd3 K\xed\xb3\xe8\xd7+S\xe7\xad\xfa\xec\x9d\xe2o\xd595$\xafM\xf9\x01\x14=7\xbf^\x9a\xbf\x7fC\xe9G\xf3\xebiM\xf7\x87\xe4\x9e\xf9\xf5I}\xfe\xd5\xfc\xf8\xa9\xa6\xc3 \xa1{\xed\xb1c\xd8\xa3h\xe7a\xf6\xa6\xc6\x137\x9c\xd1}\xa4N\xc8\x7f\x8c\x86\xcb!\xce\x87=J\x7f\xaa'?\xd5\xf9O\xc1\x90\xa3:AL\x17\x87\xf4:\xcc>\xda\xca\xe0\xd8\xd7\xb1@\xac\x9d\xa5\x9f\xb8\xd9\x06\x90\xd8\xce|\xb1\x93\xf9$\x0f\xfb\xfb\xe0\xbf\xef\xeb\xfb<\xbf[&\xe6\x03\x1a\xed\xa9\xd1\xbbD\x08u@\xde*\xcc\xe8?\x05bd\xb8\xac\x06\x8d\xd6\x05\xab\xbd\xbb\xcb\xb6\xc9\xd6\xee\x10GqH\xa4\xb9\x0b\xec\xef\xe7,X\x9aP\xde\xb7\xff07\x0d\x8ev\x87d4\x8c\xfcP7\xf6\x8db`\x7f\xcf\xd6r\xfd\x84\xb5vsF\xb7\xee\x14\x0dno\xed\xe1\xd4\xd6\xf2E\x9de\xea\x9cz_g\xd9\xfd\xfb,\xcc\xa0\xf8O\xafA\xdc\x1d>\xfade\x04\x11\x02\xb83\x02l\x02#}\xc1of\xbbY\xa1)\xac\x85\x9f?\xa4\x96Qp\x06$\xc92X\"\x8d0\x7f\xaa\x13&G\xbf\xa8?dH)}Sg\xd9\xef\x8a\xb7\xca]\x19\xdaQU\x97\xcb\xfd\x87Z\xa9\xb2\xbf\xaf\xa3\xa1[zp\xaf\x9e\xdc\xd3\xf4\xe0\xa0\x98\xa3CHMs\x84s\xe4B\xcf\xa1\x8a\xde\xab\x15\x81D\x0c\xe3\xe5\xb2z\xdc\xe0,\xbbW+\xf6J\x8f;\xb8\xe1\x99\xa9\xfc\xefF\x83r\x94\xdc\x9c\xed&^\x8dg\x18d\x96\xf98A\"\xa2\xbd\x80\x7f\x8e\xe5\xd0\x86\xfa\xc0jP\x19h\xb2d\x97\xbd/\x0c\xa7\xf3\x0dmB\xc3\x8a\xce\xe8hf.w|\x0c\x17C=#=|\xa9\xaf\xcb\xc2\x06r\xf4\x02\xd6\x95tU\x13\xa4\x15Y\x86^\xd4T?\x14\xa0\xd8\x02\xc7\x96\xf3:\xcb\xde\x95H\x90\xf75\x06\x0f\x15\xa1\x16\x92\x88 \xceF\xc4\xbc\x80^B\x0d\x93\xcd\xc2h/VL\xa0\xe5\xc9\xbd\xb7\xa0\x95\xa1F\xb3\xf1Vk.T}\xec\xeb\xd9\x05W-\xbe\xe5\xd5\xa9i\xd0\xbc\xdfz\x0cQ\x85\x1e\xbbD#\xbfT\xe2\xaa2-\xbdf\x97\xac\xc4\x93*W\xfcv\x03\x97\xf5a\x1elC@\xf9[3\xb4\xd6\x981s\x87e\x02\xf0\xe0\x14\xf0u\xdeJ.$on\xe8\xfe~P\n,\xd7O\x02\xfdY\x87\x0c\x15\x0e\xd4\xe1\x0d\x05\xc8\x115\xc7\xf0\xab\xb1\xcbz\xe21\x03%\x0dWF\xe3\xd4=\xcca\xe7\xe8\x86\x91*^\x1d,\xaa\xa7\x84zH\xba\xbf\x9f\x8f\xd4\xe3r\xb9eKvsI\x87\x8f)\x92t4\xfc\x1f\x14\x9c+\x0d\xbe\x9f\x94H\x8c'\xfb\xfb\xf9\xd6\xee\xf01\x85\xbc\xa7\xbb\xf6\xf1A\xbe\xbf\xeb\xefq\x86)j\x8fS\x8di\xed\xc4@K%\x1eS\xe9\xccc{\x94\xbe\x13Y\xf6B\xa0\n\xaf\xd6~\xd7t\x01D\x92\x86&\xb3\xefX\xaf\xfc\xab@\x92\xfc\x1c\x97\x92[sB\xe5m\x80\xa8\xa3v\x85SLhV\xa1\xe1\xb3?\x05\xd4iO\xdc\xe6x\xad\xb7\x85Z\x1bL4]\xae<\x97\x0f\xe8b7\x94>\xb6\x9b\x04w\x88\xe7\x11\xd2\xe4<[\x0f\xf4irQ\"\x1d\xa6@\x1dS\x15\x1cS\xcbeUB|3\xbb>\xc7\xb5\xbd\x0f\xbc\xa9\xc7o\xea%\x1d\xed\xb9\x00?\x82\x8a\x12\xe1\xf1\x18,\xaaJ\xf5\xa8)\x8b\xd3\xb8J\xa3qU\x0b\xc9\x11V<\x97$\x97\xb5\xb3\xae\x12D\xe1\xd7\x07{\xf65\xf4\xaf\x9a\xd8\xfe\xdf\x99\xbfz\xee\xa1\xee\xe9\xb8\xb6\xf6\x13\x02\xc8F\xc5\xeb36\xfb$\xe4\xb9\x02\x81n:\xcc\xfe\xea\xaa\xa4\xae\x17D\xd2\x0f\xb5\xe3\x01-'q]\xe7V\xa5\x1d\x83mg\xd7J4\xb6rX\x9e\xadG\xd5d+\x8fU\xc9W5X\xff[ jw9MW\xdeC:\xb7\x99\xa1,\xb0\x93;\xa9\x15\x9d\x97H`L\"\x8c|Rg\xd9h\xf8\x08 \xfak\xbd\xb9;\x1c\x02ri\x13\x93wf\x89x\x9bB\x1a\xfa\xc1\x97K\xfeX\xe1IZ\x81V\x16\xdef\xe9V\x06\xa7\x10\xd78\x86\xb3\x8c\xf7\xfc=\xdb\x07\xec\x92\x1a\xf1Z\x0d\x9aX\x03+f97\x9d\xdc\x8f~\xa9\xd0I\x19\xef\x1ca;=)c\xef\xec\x8d\xf3\xff\x1c\x10\xdf\xd5Y\x060\x00d\x89\x07\x8b\x97K\xa1\xc0\xf2\x1dp\xb1`\x11\x0e,\xe2_\x02KDf{\x94>\xab'-R\xfa\xac\xd6\xa4#O\x10`\"\xe90oS\xde'5\xbe\xafX\xd6\xe1c$\xd5\x00\x011\xee\x83\xbf\xa8\xa4C\x88\x19\x95|Q\xe1\xfb\x02?R\xb5G[\xc3\xc7r2\xda\x1a\xe6;\x0f\xd5\xd3\xce\xc3a>\x1a\xc2\xa3\xfa\x93\x8f\xf6u\x85\xfd\xada\xbe\xcd\xb6\x1f\xcb\xc96\xdb\xcew\xb6\xa1T\xfd\xc9G\xfb{\xc3\xff\xb9\xa9\x91\xfc\x87z\xf2\x1dW\x80\xc0\x8f\xa4\x82\xc571A\xae\xc5\x84\xdd<\x85\xd8\x13\xef3\xfb\xaa\xc6\xb7\x9c>\xa9Mt\xa6Wp\x89\xd0\xa7\xd3pY\x0f\xbe,\xea\x9b\x03^=_\xe8=\x7fPc\x0dA\xe1\xde>geqsP\x13\xa9\xf0\x1d\x1c\xc0P\x02*\x8e\xef#U;\xbe\x86`\x8c\x1fQ1\x19\xe6bS\xde\xe7v\xa2\x16_\x7fd\xc2\xd1\x8c\xd7\xdd+\xf61\x90PM \x93\xd3$\xe0\xa7\x92\x93i\x15\xb2u\xfe\xc4\xf9\xf3[L*w\x984\xe60i\xdcA\x1a\\\xa5\x8eS\xe5\xec\xd6\xdeH\xb1f\xff\xc6\xb9\xd2\xb8#\x05\x16Ww\xda\xbd\x18\xac\x0c\x0d\xb1-P\xc0\x16\xcb\xca\x81\xc0\x0e\xc7\xe4\x04\x05:\xa6\xe6\x8d\xf5\x8d-4\x85n\xb7\x94\xd1\xfb[D5\xf8\xf0_i\xd0\x80\xee6\x81De\xcd\x90:\xa7>t\xacz\xb4\x05\x14\xbc\xef\x8f\x1c\xff\x1ao\x8f\xfb#r]\x85v\xe5\xc7\xda\x8f\xa5\xa2\xc7V\x87\x1d\xfasi\\\xa9\x9c\xfa|\x10:\xf4\xe9z`K\x01\x12:\xb8*=\xf3\xf9Tj\xeb\xe8\x17\x90\x98\xed\xbc\xed\xab\x17\x93\xa0\xd7<\x0eM\xb5\xb1\x03\x9f\x84%#\xa3\x98\x1f\xed\xe7\xdaO.z9\xcc\x1b\xd5Dh\xb3\xf3\xa2\xa6\x8c\x1c\xd7\x10%\xd29:V\xe0\x95\xfa\xbe\xa6M\"\x84zV\xd3'\xdf\x90<\x05&\xd5f\xe5\xac!\x82Z|\xbbi\xfev\xae[\xf4\xb4 ?q\xec}\xe7\xee%\xce\xcf\x1d@\xd7\xe9\xbb\xdd\xad\x17\xae\xb26\xe9\xbe\x1e\xbb3J\xe6'\xe8)\xa7C\xf2\x95\xd3O\x9c\xde\xe3F\xa2\xc5\x83\xf8\x13\xc7\xb5\x8b\x1b\xe1V\xda\xd2\xb2\x0f5\x1d\xa9\xd97V47f\xb9\xbd(\x10\xee\xeb\x93\x82\x1e\xd7\xa4\xd6\x19I\x1b\xfa\xbe&E\xe8#\xb15\xdcyH\x8a\xc8h\xae\xe8\xf4\x8a7\x1e#i\x06\xaf\xbaS\xaeZ\x83\xcc[C\xa5\xa4\xf5\xd8 \xcd\n#1\x837SZ\x04\x12\x8a\xe9\x04\x15\x91\xcc~\x1a9\x8f\x17\x89\x95\xe04\xb1n,R \xc64)\xc0y\xd2>L-m\x16\x16 \x04\xaa\x0b\xda\n_A\xe6\x94[\x83Q\xf0\xa48\xa1\xa0\x0f\xd2V\x1eP<\xa3\xf3\x04I<%\x9d\xe1\x13\xab\x10\x9f\x05\xda \x7f\xd3<\x0b>\xd6j\xa7\x13\x9fF\xfe,\x889\x82z\xba\xe4\xae\xe0\x1b\xbd\x05\x06f\xf5D\x0f\xec\x82\xce\xbb\x94%\x94\xd2\x0b]\xe1\xd4J\xaf\xc7\xa7 \xb4.1\x89\xbe\xa0\xa7\xda\x96\xe2\xc2\xbc\xf5\x8b:\xb7\x8b\xcaO\xd0\xbe\xda\xb8*\xea\x8dz\xce\xa6\xfc\x84\xb3\xd9\xe0\xffT\xff\xa7z2\x9bm\x14\x1b\x8f\xde\x9bT\xdd\xae6\x1d\x0c\x06\x8f}_\x1bg\xfc\xf4\x8c\xc9\x0d^m4gl\xa3\x91\x8cm4bc.\xc5%\x9f\xb1\x8db\xa3\x14\x85\"\xa3\x1b\xbc\x9a\xf1i\xd1\x08\xb9!\xe4\xc6\xbc,\xa6\xecL\x943&Um\xa3\xef\x1d\xf47o\x98\x82\xefj\xb7\xa7\x18\x1e\x1dnf\x0b\x93\x9a\xfe\\\xa0\x9a\x14n'\x9b3r\x1e\x9c\x91\xdbyIk\xf2=\x90&\x0b\x8e\xe6\xe4\xacFs0\xde\xc0\xb1!\xdaH\xb5\x03\xebz\xad\x08\xc4\xcd\x9c\x91+:\x8f\xedg\xd4\xfe\xd9\xdb\xc9\x82\xce\x14\xd6t\x10\xd4\xeb\xb5\xaa4g\xf1x\xd5I\x89\xaf\xba5\\Vi\xb5\\\xf6^jl\xbc\xc2\xea\xb2\xfc\xfd\xd3\xbehM{u\x07\xc6\xad\x8ek\xba(\xd1q\x1d\x98\xcf7\x94y}\xb5e\xf6\xed\x11\xadX]\xd8\xfb\x8cz\x0e\xd6\x19l\xd4\xe1\x19m&\xc3&\xa7E(\xb7\xe4\x96={\xa4.D[\x8fX\x96\xa1'5e80\xe2f\x8f\x9e\xb9w\xcf\x14\xbf\xf1\xaa\xa6\xa1}cQ\x82}\xf6\xe3\xb7\n\x85\xde\xd6Q\xe2V\xc5\x81\xdf\x862\xee\xe3z\x8c\x8fk:\xd5\xd3t\xf5\xcav\xbd,\xeb\xfd\xaax\xac\xae\xea\xd3\xd2\xdf>N\xeb0\xbf'a\xe4}\x1d\x04>H\x03\xb5DY\x06*\xe7\xbd\x82\x1a\x05y\x861\xf9RG^{\xa4 \x0c9\xa1\xd7\xe3\x9a2{\xbe5\x8a\x85\xf0\xa73\x98\x13x\xa6\x02\x08\xffp\xe7av\\Gv\xca\xc0c\xfcQ \xc5\x95@\x98\xa6\x91\xb9\xe7\x8c`\xe2]\x92\xf90:\xc1\x90HW+T\x1dh\xbeF\xb6\x82\xd7\xd0NE\xc1X<\xd6\x1a}\x81 7\x8f<\x8a\xfc\xb2\xea\x1e\x8aN}b\xd1\xc3K\xd7M \xd3Z\"\x987\x8b\xb7\xac\xc5\xc1\x90\x91\x02N>d\xac\x8e\xeb(\xa4\x97\xe7\xe6\xe3\x98H\xb6\xb7\xb8t]B\xff\xb4\xd1\xc8\xdb!j\x1a\x93\xd1\xa3p\xb9\xba\xbb\x9a\xac\xef(O\xa7\x93v\x86\xf1*I?\x81\x1a\xfaK\xa1\x10\xdc\xeb*\xa28M\xc3\x9d\x07$\x84o\x02\xb1.\xd7\x8d\x84y\x0d\x13\x06!\x98\xb15\xa8\xf1\xeb\xa7\xf0:\xa6H\xc7~#E!\xc9vM\xc8\x1b\xb71\xe6e(\x0cH\xa2\xf3\xdb\x0e\x1e\xa35\x01\x98\xf0\xa4 I\xd2I\xd0\x18\xa8#M\x03\x9f\x04\xda\xdf'\xb3\xd4\x9c$\x1d\xcb\xccP\xb4\x99\xb8\xbd(\x11\x8eg\xf4\xb1\xb6\xe2\xee\xbb\xc4\x10\xf6\xf2\x19\xdeX\xc1{\xb6\xfb\xba\x1a0D\xad\x1c\x03?v\xed\x05\x19\xa5\xbb\xc7\xa5\xd6x\x0f \x19\xfe\x7f@mC\xd6 ;\xf5\xbd[\xd0y\x89*l\x87\x1f\xab\xd3\xa8 \xf2Q\x97\x10ub\xeaF\x85]\x15\xd7i\xd7\xe80\x87\x96\xdb\xadx\x8c\x8f\x1b\x92\xf7G\xd8\x8f\xc6\x8bI\x1d!\x08$\xa7\xc3\xa0f \xa9\xf24\xc3\x97\xa9\xbaV\x02\x85\x8ek\xfa\"\xb0\xeaP\xe4!p:1\x91Gi\x15\xd2\x06T\xad!\x0e\xa0\x1e\x8e\x08Q.h\x95'\x85\x96\xe2\xb9\xac\xdfF\x9e\xb3\xbd\xd5:\x9b.*\xfa\xbb\xcd\x0b8\xab\xb4\xfa\xed\xac\x82\x18\xb2\x10i\x02,\\\xb9\xa8 HR\x9fW\x1b5\xd6\x97\xcd\xdbZ\x95\xe4\xf5 \xaeBX5\x0b\x0b_T\xb3\x95VS\x9bk\xf3\x94\xa2R\xfd\xab\x93\x18\x95YV:\xd3T\xce\xae\x96\xcb+^\xcd\xc4\x95\xf6'\xb7\xad\xa9J\xe1o=\xde)\xc4\xe3\xa3\xd3\x81,\xaaS\xf6L,\xaa\x06\xdf\x96t:(\xaa\xe9\x99\x90\xc0\x04\xea\x9b\xa6-zsrR\xb3\x86\xcc\xe9T\xfb\x91B\x95\xa9\xfd\xa5\xdf\x82\xa8\xca[\xe5\x93\xb9{\xf4\xac\x95N\x01\xe1\x183\xb8\xaf\xd2!\x99\xd1\xfb#r\xa6\xfe\xbb\xa0CrJ\x87\xe4\x86\xd6\xe4RWn\x9c_\x86=\x8f\xbf\x8cot\xda\xe8\xa1\x0e_\xb1\xdd\xa3\xf4\xc6\xf5\xb6\\\xa2\x19=\xd9\\`\xa2j\xcdu\xadiG\xad3z\xb29\xc5D]\x94}y\x96\xa1\x93M\xf3\x1b\xcc.\x8d\xdd\xb5w\xf7\xf9Bo\xc2\x00\xdec|Io\xc8\x0d\xfd2\x0e\xdcGn\xc0wDO\x13\x04\x1c\x97\x94\xd22\xcb67/\xa8\x8e\xb81\xa3'\x98\xa8\xd2\xb9*=\xa5:|\xc9\x99*\x0d;R\xa8\xfc\xde\x9e\x1bZ0uI\xd1\x0d\xbd\xc4\x81\xcf\xc3\xea\x86~Y\x95\xf4\xbe\xe2if\xcb%\xfc=3\xc1\xea4\xd6\xcd\x00\xcd\xce\x8c\xd7\x81^\x85U\xa9@h*\x0c\xa1\xc20\xaa0>\xad\xe8m1m\xf8\xa5\x0d\x04\xfe\x9c5\xea\xcei\x121\xc2\xda\xb3\x99z\x97\xd7\xc4a\xf0;\x85Ty\xb9\"\xbf7\xb47\"\xafk*\x14\xef\xa6\xb0\xe3\xac\x0c\xddT=\x0d\x7f\x9d\x8ar\xb7\xb7\x87\xeaP(\xd1\xeb\x9a0\xac\xdax]\x07\xdbz\x15\x1f1\xafk<\x0e\xbb\x81\x882\x10\x89\xdc\x1d\xe1\xafk\xc3\xad]\xab\x96|\x900~\x82F{\xd95\x84Q~\x1d\xba\xf3\xf4\xfb\x98\x8c\xb6\x1ef\xd7\xfa\xb3+\xf5Y\xc4u\x9a\x86\xaf\xf4\xfbsz\x05Q,L\xe9y\xf7m\xe9|r\x0e\xdf\xe1\xfc<\xa2*xe\x0d\xecG\xc3m\xe8\xd3(+\xa75z]\xab\xf9G\xd2\x8a\xc8Fjo]%2W\xe5\x01\x9b\xae\xc0\x14\xc96\xb7v\xf2\xe4\xa3\xd1pk7\xa9\xf3\xb0\xab\xce\xb7\xda\xde\xc9\xbfQ\xe1a\xbe\xa8QM\x16\xf4uMJL\xea\x1a-\xf0\xaa\xbd\xcc\xff\x1d\\\xe1'\xe8\x9c\x9eV\xe4\n(8\xb9\xa6\xe7\x83\x00\x97II\xcf\x0716\x93\xab\x1e\xa5\xd7\x99\xc2\x93\xeb\x98\x0c{\xffg\xedSg\xed\xfcz\xa8\xd7,\x97\xbd\nB\xc5Pm\x81\xa5J\xb6!R\xad%6\xc0\xa1ks\x9f \x1e14\x14:$\xe6}c\x9e_\xab\x03\xa5\x998s\xfd\x1aU8\xef\xf5\xb4\x03u!\x99\x1d\xd5[QsM\xfe{=\x85\xdfk+h\x87\xfb\x15Jf5\x98\x99\x07\xb3\xef\xc95v9\xa3\xca,;\xab\xd0\xb5\x1a\xfa\x15-\x07@>\x88\x973\x9d\xd3r\xc0\xaa\x99z}N\xaf\\J\x82\xf0D\xbc\x9e\xa0\xeb\xe4\x14\xa4W\xe4::\x03\xb5\xc1\xe8\x05\xaf\xd09\xb9\xd6\x16\xa7\x96\x10\xe3\x1c\x9dStE\x931/\x973\x7f4^}\xcf\xd1\x88\xce\xe9yr:\x92\x05\xbd\x0e3l\x98>I\xed\xc7c\xa7\xbc\xc0\xa4\xa4n\xde0\xe9I\x9d\x07\xd5X5S\x95z\xe7\x03v\xdd\xb0j\x96e\xf5\xe32\xcb\xd0\x82\x96\xa4\xa45\xa9\xe9B\xf5wR\xa1kRc2\xd7O%&\x8b,\x9bg\x19R7\xd3\xf3\xe0\x88^.\xcf\x83\x03Z\x9d|\x802\xbeX\x1f\xc3\xf0B\xc0\xa3z\xe5\x8ekp\xfa\xb3\x1f\x04\xc76\x94\xeb\xfaj\xd1\xd0\x15\xbd2QK\x00\xf5\x11\x06?\x0bX%\xa4{$\xb6}L\xce\x8d/\xdd\x93\xb2\x84\xda5\xc2\xa4~\\N\xd0\xf9\xa0\x98\xcdt\x03W\xaa\x9a\x06\x01\xd2# \xaeC\x9c\xa3+\xd5\xfc\x8b\x8ew$j\x03\xc2)_\xd1\xc3#8f\xcf\xe9\xf5X\xad\x9e\xdf$c\xacN\xbd\xf3\xe0\x1c\xbf\xd2\xb1\x9c\x9c\xd5\xf99)\xd9I\x93\x9f\x0f\xea\xa9\x14e\xf9\x9a\x9d4\xa4\x11sW\xf0A\xccW:\x98W\xa7\x9c\x0b@\xa6\xf6\xbf \xa4A\xae\xe9p|\xfd\xe8\xca\xfae]onb\x85\xf2\x87\xd7G\xd8FH \xba\xa2\xe7\x03\xd5\xbd\x02E\xf4\xee\x83\x98\xd3\xf3A#\xe6+u\\\xf6.*rZ\xd1\x0b\x1f\x8e\xc0\x9e\x12$=\xe0\xae}\x92Qw\xb8\xbdi\x1dn\xdb{\xd9\x9b,\xe35\xba&)9\x86\xe3\xed\x0d\xbe\xbd2X\x0c,\xdf\x0b\xd5B\x1c\x8e\xe9\x85n\xfb\x98\x86\xe7\xa3U\xe2\xbd\x8e\xdd^\xaf\xe8q\xa2\x11\xbf\xa2\xc7\xab\x0ex\xbe\x98\xbc@W8\x7f\xe1&x\xb5\xfa_#\xff\xd6\xc6\xfb\xb5\xd0\xbah\xae\x99\x9e\x00\xd8j\xf6\x7f\xd7\xd8\x99{3\xf2\xb4\xa6\x8d\xb7\x1e\x85\xb5\x08\x80\xdf\xc4}\x92\xe8\x97\xe9\xcch\xba\x80Hv\x1aMf\x192v\xe6\x89\x01Q3QW\xa3\xaf\xf5\xe4S\xbd\xb9\x99#kg\xccp\x0e\x8f]\xc2\xd52\xcb\xae\xca04&\x91V\x85~`\x01\xa8M\xdc\x19}^;;w'9p\xf6\xc7\xcb\xe5\xef6\xac\xb8\xbf\xef\x9f\xa5\x92C\x87\x80,F@\x08\xd9\xbe\xbb\x97AX\x946C\x00\xd2\xba\xdd\xd1V\xc6\xf0r\xf9w\xbd\\\xa2\xbf\xc1\xc7\xe3\xab@\xfb\x0f\xa2\xa0(fX`\xa9\x00cQ\xd4\xa0\xbd\xd4n\x84\xaa\xa2B\x9a}\xc5\xfb?\xad\xed\xe0\xf6\x1fj\xc2\xb8\xf2\x0f\x8eMnM2\x15\xe8\x0fA\xc4\xe0\xd8\x80\x0cD<8-\x88\xf2nY\xb7g\xbd:i\xfe\x0c\x7f`\xea\xec\x1a\xda\x03\xb6K\xe4\x9ee\xf21\xad&_mF\xd3\x1c\xb5\xe3\xfb{\\j\xa8\xcb\xd6\x8b'.\xd2\x89\x0eA8\xee\xf80\x1a0\xa4\xfe\x90\xdd\xab\xf1\x98V\xa4+\x1b\x07`\x8c\x9d\x8eK\x15>NB\xe5\x87J\x0d\xd1\x02F\x96!\x91\xe65\x17>\xf5+6\xf1\xe0\xc3\xf9\xf6d(\xbf\xb7\x07\x87\x9b\xfb\n\x10\xd7\x88\xa5\xe0\xd9\xe7|e\xa9\xe4=N\x03k@\xa0\x03\xe2\x85\x8a\x9c$2W\xd3.\x08U9\x98\xb0v\xa6\xf4\x0b\x81\x1a2\xf7\x1b\x8fH\x0e\xb7\x7f\"\xe8?\xb9V\x944D\x12F\x84*\x8c\x130\x91\x96\xad\x92\x0f\x86#:u\xe5\x16\xa66\xa0\x10\xa5T\x0c\xee\xdd\xd3o\xb5nS\x9b\xa6\xb4\xf2\xff\x9b\xf9\xb4\xac\x8bN\x85:9\x8c\xb0\xbb7\x1c\xc3\x0e4!I\x14\x8c\xbb\xdaQ\xc3\xd3\x1b2\x08ldJ&\xe6\xaf\x16\x0c\x16\x8az\x18\x19\xb9\xec:\xf84A\xeb\xb2\xcf\xca\xb2\x0b\x05II\x80\x99\x17f\xe4\x92\x9e\xf2(\xf5\x12l\xe1(6\xe4K\xfe\x85I\xda\x90k\xfd9\x98\xf36\xf4e\xe1\x17\xa37\x840+6N\xac\x02\xd8\x90\xbcr\x15\xf4J\xb98\xf4NG\xa7w\xd4^\xcer\x05h\x85\xf3A\xf8\xcb\xff0b\xf9\xb3\x02V\xf5\xbe\x8e\xc2{\xac\xe6\xbd\xa8\xf1\xad{4Z#u\x0e\x1eO\x1b!\xc7\x0dm\x10\x04\x82\x95\xac^\x94\x0d$\xaa\x02\xeb\x9c\xc8;|\x186\x97iGQsO#\xbe\xedQ\xd8\x0e^arg\x1b\xfe\xbb\xad\xe4;\xbcZ!\x81\xc9\x08\xb0\xc4\xceAs\x96\xc2V\x1c;w\x10WD\xf4\x96\xa5B\xa7\xf0-Ni\x02\x95\x0e\xb4qd\xf8\xb8D\x0cOF\xf9\xd0\x9f\xa7\xfa#P\x84\xba-C)-\xdd7\xa3\xd1\xd8\xc4$\x98\xfb\xb2\x1dK\x89\xb6`\x12\x8c\xfe& \xa6\xa2\xcdi\xb91\xcc\x1bz\x10 \x8f\xf78\xf0v6\x0d}~w\x0dU\xe5\xed\xddUv\xf2\x86\xbe\x0b\xaa\xa8qh\x9a\xc60\xa4]v\xca\x94\x84i\x1f\xee\x11A\xfa}\xef\xd8jP\xd9\xa5xp\xc41\xe54\xc8\x81\xa6\xbe\x92$\xd8\x0e\xbe\xc1\"\xffM I\x04\x0e\xc2\xcb~\xb3\xc5\xe7?\xd6\"\x1c\xb8\x9a=\x91q\x00\x1egT\xe3\x0cPe+\x0b\xc7\x966kO\x93\x85\xfb\xa8?\x1d'\xd7D\x0c\xc2\xe8\x04\xa4\xe6\xda\xec|\xae\xc9 \x94U\x98\xb4\x13h\xd9\xcf\x14N \xac\x98)\x12\x1c\xdd\x8e\x17\x83.=7cL,A\x88Z\xd0\xab\n\xadeuBU\x13\xb9.hC\x04=Wl\x1e&\xc2\x18[\xbf\x87\xb3G\x8dP\xea\xd3\x06(\x18\xad\xc6\xd5\x18\x077Ez\x7f;\xbc8.G\xc3\xad\x9d(\xc4 \x10\xc6Wv\xa5*\xc3\x1a:\x92\x98\xe0\x91\x0bQ\xfb\xab\xcbN\xa69\xfec\xb7n\xdd\xb8\xc0\xed2\xb4\x83/i\xd0S1\xb0\xf1\x88\xc8e\x05\x981\xd1\xb7l\x1bd\x80g\x19\xbchGb\x1f\xeda\xf2\xda\xa4\xa5]\xcb\xbev\xa4\xdb[\xc7\xb8\x1a\xfdL\x8e\x0c\\\xea\xe8\x94\xc0\xa4\xb1J\x98\x80\x89 \xc1Pudvq\x1c\xa0evM\xf97x^\xd2Bh\xdb\xd9\xc4.\xf9q\x84 y\xb8\x96\xf6\\\xb3\x84\xe7\x9b[\xf6\xed\x8fmY\x97\x92\xcet\x9a\x0e5\x19\xc1\xc3$\xf0p\xf7g\x1e\x0fZ3\x18\xaa\x03Y\xb6\xf8\xfb\xd64Z\xa9\xdf \xa7\xc2D\xf1\xd0\x8a\xf9\xa4 P\x90\xc3-\xa1Lo I\x01\xe5\xce\x00\x1d\xf3\x13P\xd1\xebk\xc7PGQ{.QI8\x9e\x0c\xf3\xe1\xb23\xaa\xc8\xe0xZ\x94\xd3EY4Lg\xb3\x9d=\xe5M=YS\x0e\x8d\xe5\xe1\xcd\x1dN6\x0f$`\x0b\xed\x8f,\xeb\x05\x17\xc3\xdb\x90&9\xb3H'\x10\xb1t\xb1t\x88\x0dy\xa1\xf5\xd2\xd0\x06\xdb\x8bq9\xb6\x06\xf2e\x14\xf36\xb8\xbdN\xf1mMK\xb3TV\xd8\xb2\xa0\xd3(\x0d\x9amo\xa1E.\x8b\x81\x81\xbdv\xdeW\xb7\x93\xc5@|\xa9\x99\xbc\xd4S\xcf8\xc6\xb7#P\xb3\xe8\x80th\xd1\x8a\xf0\x02\xf6\xd6%Y`\xb5NI$\x81\n\xa6\x93f\xd8\xf4\x97\xad\x05-\x03;\xef,[t5\x90\x16B\x03\xdc\x81I\xa1hj\xda\x0f\xdf\xa5\x85\xd4\xc9Z\x16t\xa1].\xf4J\xd4t4\xf4s,5\x1b\xe4\xe3\xfe+\xfag\x01\xeb\xe1]ck\xfbHK/\xe1\xaaiial\x12*\xd6\xe0ov[\x07\x06\x18\xe1]\xae\xa4\x81}\xda\xad[zgW\xa9\x1a\xd4\x1f\x05\xf1)KZ\xaf\xcc\xbe\x15\xf1V]sf\xb8\x10K\xf6b\xae\xfd\xf7\xe2-\x8b}S\xf6V%\xa9T,\"G\x82p\xef[\x10b\x08n\xdd\xb2\xd6\x13?Gp9puv(\xc9(\xc8;33\xa2\xab\xe9J\xdc0]V\xaej\xcf@K\xbd:Z\n?x\xf0m\xba\xfb\x0dr\xfb\xef\xdc7\xec-\x11n\x7f\x13\xc4hoH\xe0\xe6\x87s\x88\x04g\xc1}\xa9\x99\x1e\x81\xedm\n\xeeF\xc9]\x8a\xf9Y\xb9eub\x83;\xb2\xbb\x01\xd5\xbd\xd2\x02\x01rn,M\x9cl\xee\x8d\x114\x12\x89o!\x00\x91\x1a1#\xf0x\xcenh\xa5\x1f]\x96=\x88Q\x04g\x1f\xd1\xf2\xb2\xf8\xb2\xae\x91\x80\xd9$ \x1eC\xc2\xe8\x7fAN\x03\xca\xe2@\xee8GU\x8a\x0dU\xb4`Uk1\xaav\xe0\xf7*\xb5\x1e\xc6\xa4;6Lw\xf2\xd4VL\x9cV\xf2T\xd3\x9aK\x9eZ\xb5l\xf2c\x96(\xc9\xd6\xd0\x8a\xd0_\xdd\x91<\xb5I\x93\xa7V\x9d\xc9S\x9b\xee\xe4\xa9)#\x1e'Om\xd6&Om\xc2\xe4\xa9A\nJ\x17\xe6\x8fTfG3\xfd\x97T\xb0\xa9!\xd7P\x185\xee\x83CdE\xe95\xf6\xd5tK_ Y\x97r\x95a\xc0s\xf0\xa2\n\x92\x1e\xb7\x12\xfa3\\\xd3]k\xca\x19\xc7O\xdd\xa8\x98%\x99\x7f\x956.\x90:\xf0\x04\xe1.\xd0m\xcd\xf2\x9a>$bI\x1f\x84\xc2]\xe9\x8a\xa3\xd0\xf8\xc2\xb6\x88\x98\xda\x1b\xa3-R\x91\x86<\\\x8adG\x08\x85\xd2\x8d{J0\x89\xdb\x04\x95\xd3\xa4\xb9mhN5\x06\xdfN\xe1\xdb\xa0\xd9\xe9]\x8d-\x92\xc6\xf6]ca\x13\x8b5MXK\x02\x05\xe3Tr\xca\x82\x14L.O\xa8\x97\x8cB\xef\\\x01l4\x8c\xe5*\x85*\xdc\x8f\xcbJ\xa8\x98\x84\xed\x9eC\xe1N\\x\x02\x85{D\x06\xdc\x94}7S\xef\xb6\xb6\xd6\x88eF\xdbCsmc\x13\x96\xdbY\x84r\x1a\xd4(\x18\xd5\x9d bV8&\xdbIjy\xe86\xf3W\x8bjk\xd0? \x8cH\xd2\xa8f\x13\x9e4\x0cp\xf6\xc4i\xfb\xc2o\xf7\x8c\xc2\xeb\x9b\x9f?K?\x87\x19\xed8\xde\xc5\xa1\xfb\xc4?\xe6\x87G\x86\x8ew\xb6\x1e\xca~o\xa3kq\x9eF\xe06\xe4\xf9\x99m\x18\x86\xcc/\xe6\x1a\x8c\xd0h\xce\x06q\xc1*\x84\xdd+7|\xc7\x80\x983?vR\xd2\xe1\x11\x83\xae-\x9f\xe2}3C\xee\xc1\x0e(\xf8z\xadOB\xf4\xd6{1\xe8\xf1\xa4.\xf8Q'\xe6\x1e\xe5\x06\xa7~\xf8om\xd4_\xc3E\xb5\xdd\x1a\xa2\xe2\xd0}\xc13\"\x81\xd1\xbe+\x0c\xf4\xad\x8e!i;\x1b\xb8\xea\xb1K\x81\xe7i\xd6\x95\x87\xbe\x10\x81\x1d\xc1\xdb\x84ah\xb7\xe1|\xd2\xba\x9c\" \x8f\x7f\x95e\xd5c\xedqG\x03\x1cx\xf7\xcd\xa6IgX\x9bq\xf5\xa8Y\xe7:\xd1`\x82\xe4\xe3f\xb9\x1c\x82\xd7\x8as\x83h\xd5j\xbe\xdb\xbd\xa2\xf9~\xf7\n?\xb7_\xcd\xdc\x9a\xc7m#$?\xf6\x10\xe6M\xe8\x9f\xd3\x82\xb1\x01#j\x1e\xd3\xea?\xe1\x91\xd2<\xee\xfa`\x1d\xb86G\x98\xa8\x99t\xb6vG\x90\xa1&\xb4\x08x\x9d,w\x02\xbe1XmU6\x18b\x07|C>\xf6 \xa0\xbdV\x91o\xc3Dpm9P\xd3\x19\x1f\xd4\xc6\xf1x\xcc\xe9\xe7\x1aq\"H\x8d\xc7\x0cT\xcd\xf8\xb6\x01m\xd3\x9f\x0c\xb2euh\xba\xb0\x8e\xea8\xb2\xe9_Z\x8eKCctT\xd2*\xf0'.\x13\x7f\xe22\x916\xb2k\xeb\xa6m\x15_j<\xa7\x02ii\x04\xc6\xb7\xf17I\x82\xb6\x03\xc35\x1e0y\xcat\xe2\x8fgq\xab\xab\x95j\xc0\xc8\x0f\"\xcb\xbc\x12\x8f\xd39\x8ct\xf4\x9c\xc4\xe6fj2\xce\x8d\xf5\xc8\xa6\x90\x85\xe6\x8b@\x15\x99\x922\x90nU\xd4d\x88\xaf\xe8B$w\x88\xc6\xcev\xd2x2\x997)\x19\xad\x08jh\xc9!\x9b(n\xc71f+'A\x92\xde\x14XjNWj\xd9\xb4\x8b\xd8+1\x99r\x08\xbcH\xfeY#\xc5k\x12\xee\x91\xe6yi\xb4[\xfa\xd6d\xe5vF\x1a\x17\x0c~\xec\xd8\x1cx\x15Y_&\x99\xba] o\xbb\\\x81A\xcfK\x83\xf1\x953]a-]\xbe;\xaf}H\x88,\x03\xab)y\xf3\xc1G\xf9t\xbf\xa3]\xf0\xb7\xe9\xc0tD\xa0\x87P\xc6f^\xf8/>&6F\xea\x9ai\xcfb\xa32\xa8\xb2\xac\x07[\xd1)P\x88P\xbc\xc5\xf6\xff\x8f\xbb\xbf[o\x1bG\x16F\xe1\xc3\xefy\xd6-|'\x14w\xb7B\x84\x90L\xca?q(\xc3Z\xee\xc4\x99\xf6\x9a$\xce\xce\xcf\xcc\x9a%k\xfc\xc2\x12d\xb1C\x01j\x12\xf2\xcfXZg\xef}\xecky\xafl?(\x80$HQ\xb63=\xebd\xf7\xd3\xb1H\x10\xbf\x85B\xa1\xaaP\xa82\x074\xea\x8fvx\xf8J\xfb?\x1c\xecF\x01\xea\xa7\x96\xdb:aq\x12)\xa61\x9c\xee\x0d\xbf\xf0\x11IKg.\xfa~\xd4Fp3M\x1e\xfe\x83y\x12\xf5\xbf4y\xe0f\xe8a&s\x15\x08B\xf8\xeb32\xad\xbd\x00\xbf\x86C\xd5\xf2\x02@\xc4j\x97\xbd\xf4\xfe{\x19\x9bu\xf6Y\x08I\xd2\x12t\xbfT\x05o\xa6 \x03\xb3\x8c\xa1_\xd7\xde\xc3z\x06\xef\xb0\x92\xb0Z\xb9\x0e,\xed\x0e\x04c\xeb,D\xcce'W\xbd9n\x91Y\xab\xc6\xadi\xfc\xc9\x12\xa8r\x0b\x03\xde\x14\x1f\xa9\x0f\x01\x86 \x07%qup[L\xe9D.\x9f\x89\xbe\xb0]`k\x83\xcc\xb7\x89GQ_\xf3/\x1eC\xeb\xf5\x87\xc4\x93\x98b\x86Ey\xffwKgjq\xe9\xe3\xa9'W+O\x92\x96\xd7\xf2$a\x83\xfa\x0c\xd5oH\xe4W\x90\x81\xe6i+\x1d= \xd2\x02iKvg4;\x912\x8d\xaf\x96\x92y\xee\x84J\xda\x81\xce\xa4BH\x17!\x84[\xb2t\xec\xd3\xcf\xf7\"\xa8\xb5\x8f\xaa\xc1mxqMW\xad\x14X=\x01\x96\x83\x07\xb34\xa2V\xb06\xfe?\xd0\xda\xc4\x16\xa9\x83\xb9I\xbc50N\x1e\x83qR\xc2X&\x95`\xbf6\xc8\xcb\xa3g(U\xa2\xc8_k+}\xf7\x88\xa6\xd7\x00\xcd\xccX\xd3[\x16&\xc5\xa7\xe1\xeeh`\xbf\x00\x94\x0d\x08\x1er\x99/\x92\x0c\x7fg:\xf2BA\x8a]\xd7Oq!i0\\\x15 d]:\xb0\x0d\x1f\x7f\xafp\x06\xbd\xe7u\xb4gw\xb4g:\xaah\xfb/\x89'\xeb\xf6\xc1\xbd (#~\xe4\x90\xd1\xc7\xcd\xeboI\xa9?36@\x15k\x08\xcdjl\x90\x86\x92\x1a\xa25\xae\xd4\xb1\xd4\xb1\x157\xe7\xb5\xa1\x12pKjC\xaa\xff!\xc9\xef\x80\xc3O%\xc83\x90P\xaeM\xb3\xd7x.\xebV\x1be|\n\xdd\xa4$\x7f\x12\x1e0C\x85ko\xe3W\x1b\x9b\xadc\xbd\xc6\xd7\xd5j\xec\x18\x17\x1e\xe4\xde5\xb9wU\xa3\xf7\xcfh\x14<\xe6\xea\x86\xc0\x92\xb34\xe2,[\xfdm\xc3f379\xabF\xbf\x89\xa7\xde%\xf3\x8c\xa5\x11\x878>\xb8\x0c\xf3\xc3+a~\x8cS/Nt\xec\x80\xf2\xd6\x8a\xe2\xef\xacw\x9d \xdcu\xa5\xf7\xfab\x92HO\x92\xc4\xd3\x8d\x0eU#\xc4\xf5\xff\xe3\xcb\xf9\xc7\xaeV8\xc5\xd3{\xcfu}\x89\xfc\x17\xa3!(\x07L\x1fF/T\xbf\x82\xbe<\xe2\xf9\x1d\x15\xe9\xfb\xc5\xee:\x94\x10c?\xd5\xa7 \xa9\xda\xa8\xe6\xdaS\x84H\xe79\xe7\xfa\x86{)\x18S\xb4D\x0dm_+\xac\xbde^\x8a\xf0%\x83\xb3\x89\xf5\xda\n+Z\x8d\x03\xc4\xaaQ;\x8b8@\x1a6\x10\x06R\x07\xf0i\xb7OT\xeeV\x8b\x97\xc1u$n\x85jZ>\x12\x96\xe0\xf7\x1b1\xd6q\xfd\xd2\xf6\x9e\xed3\xef\xaf\xc2{}\x88\x99\xe5\xc0 /\xb4\xe9J/.\\\xe9\xe1\x0f\xf6\n\x01\xaf\xea\xaf\xb57v\x1b\xe7\xcb\xe3\xb3\x9f\x8a\x1b\x06?e\xfd\x9f\x8a\x18\x9d\x0d{\xbf\xa2%\xef\x13m\xa0\xfdg\x88\xd4\x89\x10\xd6\x8dz\x08\xcf\x13O!\xf2[\xd2\xc4w\x98\xe1\xf5~\xc0% H\x00\xbf&\xf8/ \xfe[B\x1eNo\x14E\x8a\x86\xbfq|\xc2\xf1\x1b\x8e\xbf\xe0s\xfc\x96W\xcc\xce\x84bM>p\xb4\xc6\x9f\xf0g\xfcg\x893\x89\xe7 ~0\xbcQ\xd4\n\xd7\xa3u\xff/ \xf1~M\xc8\xc34\xe6\x13\x90G~\xb9\xffUd\xf2\xccD\x04\x8c\xber|\xb5\xe4\x93\x046\xbe(\xc07,\xcd\x14iu\xc3\x83n\xb8\xdb\x0d]\xac\xa9\x19K?\xd1\xf1wz\xcd>\xd29\x8b\\\xcdqL\xc4\xdc]\xa3\xee\x96\xba\xebFr\xee\x92O\xd84\xe6lR\xeea\x97\x97\x9fOO\xde|\xbd|{\xfa\x97\xaf\xe7\xe7\xef\xbf\\\xfe\xe9\xfd\xf9/'\xef/\x7f=?\xff\xf3\xe5e\xf5\"\x87$\x8f\xe7\xee\x83ye\x9c\xbd\x8d3\xc5\xfaL`\x1b\xcf\x96\x8b\x85He\xa6e1S_\xd0/\xafk\xc8n\xcc\x7fcc\xe91\xd4\xbfM*tI\x87\xc8\x15\xfc\x8d\x98\xcfc 5(z\x0bW\x0d\x8c\x13\xb0\x83=b\x0ct\xf3\xfb!\x96\xa1ny+j\xbd\xc6\xdf\x9f\xac;\x0f\xa7\xcb1\xab\x14\xb5\x9f=\xe1=\xac\xf1\xaf ~\x107,M\xe3 \xfbU\x88\xef_J\x8b\xce<\xd96\xd3a2w\x9d\xa5uQ\xa9I\x1f\xcf\xd8d\x99\x98\xf0\xdc:\xcd\x8c\xa2\x8c\xf4\xf1\x99M\xa3\xadQ@\xd4\xc4\xdb3\xfe\xcb=\x0c$\xb2\x07Z\x15\xe7}K\xfe\x96`i\xaem~\x12\xa9\xa4 \xf9]\xa5\xa8!\xbc=\xff\x00\xd2Nm\xddh\xd0\xb1\xba\xf7\x94\xb0\xc2\xe8\xe6_Yio\xba\xa9\x8b\xe8\x17q\xa9\xb5\x8d\xc1\x16\x1bM\xc3\xc0\xd45\x15\x87\x87\xa8.\xf9\xf7\x0e\x0e\xf19h\xfa\xbb\xdf\xd9\xbd\xb9\xbeQ\xa8\xf2*s.\x1b\xe7\\v\xa7\xc92\x9b}\xb9\xe7\xe3M\xc6~\xebM\xad\xf0\xb0\xf4D\xd3\xe4\xd0U{\xc3\xa9\xec%\xd6.\x02Nm\xcd\xf6Q\xc6W\xabs\x12\xcf\xe2\x02\x7f*\xf8,\x89[\x81b\x04\xb1\xdcd\xff\xfe\xd9\nCS\xa1\xe1\x05\x8b\xa3\xd8\x13\xd9\x84&-\x90-k\x95\xef\x95u\xb7Z\xacI\x9ej\xb7\xbd\x9ad\x90\xf7\xc1t\xa4\x15V\xf8\xc7\xc6J\xcc>Za-\x95\x88\x14\x98\xfe\x1b;\x90+\xa0\x1b\x13Mp2\xc5%X\x1f+k\xa2\x8a\x0b\x068\x9a\xc5\xc7\x7f\x80\xb7\xafvGO\xd4\x97\xe5\x95L\x19;\xe3R4\x0b\x99ZAh \xcc\x9b\xa7\xaf\\\xa6\xabU\xb1\xc2\x1a\xd7`\xfd\xca\xdeae\xf2us\xad\x10\xa7\xd0U\xb3\x1b\x93b7^\xe3:Z\xb9\xcb\x8c9\x8a\xc1\x1cK\xb7\x0f\xc7rj\xbb#\xdc\xeb\xf5\x0e\xd0\x13\xd9\xffm\xe7\xe5K\xe7\xdf\x93x\x0cn\x15\xb5\xeb\xc6\x9b\xa0\x1b\xbe\xee\x86\xff\xe6\xbctr\x02\x99*\xb9d\xb2\x84z\xba\xf3\x98w\x7f\xcb\xfe\xcdy\xa9r\xbc\x11\x8b\xfb4\xbe\x9eI\xc7\x1b#\xe7\x1d\x1d\xb3+!\xbec\xe7\x8c\x8f\xbb\x0e\xe5\x13'\x96\x99C\xa7\xd38\x89\xd5\x8cwM\xb1\xaf\xb38s2\xb1L\xc7\xcc\x19\x8b s\xe2\xcc1\xbd\x988\x8aKH\xc1\x83\xe3\x87\xb3\xafy\xb23\x15KU\x1d\xb8vTU\xbc?{s\xfa\xf1\xcb\xa93\x8d\x13\x96{|T\xa2\xb93\x89S`\xc5\xef\x1d1u\xa4\xd5\x90\x9ad\xd5\x81\x9d\x9b<\xc80\xa6\x18\x0c\xe2\x9a\x18\x13\xed\x88\xc0\xbe\xf2W\xc4\xec\xfa\xc0\xb2\x8c^\x83\xc1\x1fgI.\x84\xeb\xedS\xff,I#\xf3\x99\xa0\x9c\xed`\xc4BC.n=\xd4O\xbcV\xa0xM\xe3\xf2\xa5\xf4q\x08\xe8\x921\xf9U\x1f'yK\x1c \xcc\xd6k\xbc o\xa9T;\x80*^\xad\xaf!\xd8Y\x99\xb7\xb3X\xe3\xaat\x9a\xf7o`5\x93b\xd5\x9d\xc8K\x08\xc3\xb5\xd6\xd1\x1a\x8b\xda\n\x1d\x13+\x0fHg8\xb6;1N\x18M\xf3\xefc\xb4\xc6t\xb3\x8b\xadp\x0dF\xa0\xc5@\xa6\"\x1d\xb3w)\x9d\xb3\xcf\x15\n\xad\x18\xa1\xc2\xb3\xeb\x94\xe8\xa9\xea.X\xaa\x04\"\xe0<'y\xa2\x1a5\x9e\xe5oe\x1f\xf1\xd0\xef\xcc\xc9\x96)s\xe4\x8cJ\xe7^,\xc1\xd5\xa9C\x9d\x85H\xee\xa7q\x92\xa8\x15\xa2]\x9c\x9a\xaa\xb3\xae3\x93r\x91E;;\xd3\xab\xee\x9c\xedh\x86>\xcf\x9f\xb9\x087\x8c\xe4\xfa\xc7\xba\xdb\x04\xa0\xff\xa1\xde\xae\x9bl\x0e\xa6\x8dw\xb4\xa6j\x15\xa0'\xd7\xcbT/\x96\xb5\xedCx\xf2\xdc\xc5f2v\xeeuX\xc1\x1b\xd2\n\xf1\x95\xa6\x0dw\xa4\x13\xe2[\xb2\x8f\xbf\x93\xa0\xdf\xb0\n\x9c:e8&\xdf\xd5\xba\xb0\xb1\x1f?c\x910\xf4\x10\x1c\xb3\xd5*\xec\xed\x1f\xb1Am\xda\xaa\x85\x1cI\xbf\xb3\x0c& \x8be|\xa3\x08\xaat\xae\x98\xbce\x8c;\x01\x10\xf2\xb0\xb7\x8f\x1dU,\xe6\xd7\xceT\x95T\\S\x96\xfb\xdc\x953\xcaU\x1eg\xba\xc8\x145\xe7B:Kn\x10\x81M\\\x14\xdd\x92\xe0\x88\x0d\xc0\xeb\xca4\x11\"\xf5B\xb6\xbb\xc3P\xb4\xafe\xdfs\x1d\xe9\xacBZ\xf1)9\xef\xaa\nz}\xfd\x1bv\x05\x9f\xeb,\xcd\x14\xf6\nm#\xaf\xdf \xf3o\x81G\xbc\xd2\x84vp\xda]\x88L\x9a\x16\xa1\x02\x14y\xd6L\xa1:\x0dn(\x80s\xdblU\xaeNU\xaf\x08\xc37\xab\x95\xaa3\xc0\x0d\x85\xebd\x94\xa3\x87;2\xab\xb0b\xcc\xab\x0f\x04\xc25\xd6\xa9\xeb\xdc\xbbC\x80X\x96>\xf4\xd2\xab\x1e\x94j\xbd\x12\xd3\xaeV$\xb2\x82\xe8\x1b5S'<>>\x0e\xb1 l\x98\x82\xc2\xa9\xe5\x95\x97\x07\xdb\xed\xe0\xe87\x1d\x8c\xac\x8c\xe7:LGDb6\xe4#\"0'\xa9\xd5\xfa\x17KX+]\x0e1\xc2\x86\xc1(\x97\x03,\xd3.\xaf\xf4\x909\x0cF\xa5\x98\xa2\x03\xb1\xe6cX\x88\x85v\x8b\xc7M\x80\xd6a0\"\xbc_\x86\xd7OI\x80E9\xd8\xf4H\xf4s\x95S\xef\xa5\x97\xfa!\xea\x84\x98\x126\x8cG8#\xb1\x1f\xe2\x84\xb0aVm\x90\xb6\xdb\xc1\xf1o\x1e\xc5\x1c\xa1\"1\xd1\x89 \xa6h\xe0\xc1\xc0\x15\xbb\x9b\x8d \xc0Q\x86\"\x9dF\xb1\xaa\x1a\xd2\xe2\xf2F\x91\x05\xc7\xa2\x1a^\x87\xa3]]\x11\x8f\xda\x91\xcd!-~\xab\xcem&Ry\xc6'\xec\xae#\xcbg\xcbA\x08\x84\xfad\xddx\xd2\x91\xddx\x02\x14\xe9\x84\x0cG\xf8\x8d\xfasFB\xfcI\x93\xa6\xcfd\x17\x7f\x04Op\x10m\x9a\xb4\xc2\xd2\xdc\xf7\xadg\xb9\xd9\x95\xe4\x8b\xf7\xa6\xb8k +A\x80\xcb\x83T\xf4Ue*\xa1 \xb5?&8\x90$,w\x92\xa72a\xab\xdf\x1b\x17\xee\xf1\xa5w\xa2\x18\n\xdd\xa8}2j\x04\x9f\x0f\x10\x00\xd4c\x08\xb7\xde\xa3\x92\x16|\xf1N\x10z\xaf\xd6^\xea\xfd\xa3\x12\x08\xae\xd2\xf9v[x\xef\xb0\xd5\xb7\x0e\xb3\x1b\xf9\x87^\x98\x1a\"\xed\xb6n,\xf6\x10R\x90\nL\x84\xc3\xcf\xfd\xdc\xd7\xcf[\x8f#\xfc \xda\xce[\xf8\xd4n{-\xefSmT\xc7\x1c\xadV\xac\xddnQ\x0f\xa1~~Z\xf6\xa9\x00^\xe5\xe2\xc0C\x99\x9e\xcf\xd4\xa7\xee\xc2\x18\xfd\x80\x95\x84\xb1 \xc86\xda9\"\x1c\xf5\xf9\x06=l:OJ\x06V3I\xf4\x89h\x18\xb6\xdb_\xbd\x13\x84\xdfz\xf9\x8d\\\xf5\xda\xd7c\xb4.&|\x02\xef\x99\xe3\xc2\xad\xc1\x0d\xdc&\xb1A\xbd\xd4\xa0^Z\xa0\xe6\x08\x8f\x15\xe54\xb8:.d\xf4\x02#S\xc0HkB\xbe\xa9Y\xaf\x19i\xe6\x97\xa4:\xa1\xb6\x85(\xee*\xf5\xf6\x83\xda\x1d8\xcb\xa3\x7f\xf5NW\xc8\xf6\xfa\xb5c\xf9}\xb6\xab\xf7\xef_Hf\xef\xf9g\x93\x84\x15&W\xfb\xf6f|6\x9f\xb3\x89\x12u\x8a\xcf\xa1\xfd\xf9\xbd\xb8->\xec\xd9\x1f>*\xc65)\xbe\xed\xda\xdf>\xa5B\xc9O\xf9-}\xeb\xcb\xb7\x8c\xa5\xbf$b\xfc\x1d\x8c\x9cM\xd9^E\xa6\x06\x0e\xec\xcdF,b\x06!\xc0m\x94\xaa\xf0\x14\xb9O\xf5\xd3;6^\xaa\x02\xf6f\xf3~\xb5\xfa\xb8Zy\xc5\xca\xaa\xca\xd4\xa5\xae\xec\x93\x8d\x9f\x0d|\xce\xe7z\xb9wp,k[\xbam\x16\x02\xa4\xb3\xcbqvW=L2\xa8\xf1\xb9@\x0d\x83\x11\xc6\x92FS\x80\xdd\x9a\xef+I>\xaf55\xfd\xdc\xffLdUq_j\x8e>\x13\xbe\xae\xb4\xbe\xa0\xcb\xac\x19J5E\x03\xf0\xed\x9fh\xcc%\xf9\xa5\xf2e\xc9\xff\x1a\xcbY1{U\xa9j\x03\xcd\xabc1\x08l\x10\xbc:\"Fv\xad\x111{D\xf2\xb1\x11\xe52\x7f\x03\xce`\x8eiN\xa86\xf8\xab&\xfe\x9b\x16\x96)4\x97\x92iw\xc2\x12z\xdfO\x88\xcb\x97\xf3+\x96Z\xe4G\xf1\x18\xc9 \xf3\x93(\xc3t\xf3;\xcd\x0d*\x07\xc5S\xa4\x88\x81&J\x94\xa8g\x9c\x90\xac4%|\x88'\xd1\x99\xef\xe3\x1c\xd1#\x8e+D3b\xb8 EQ\x82k\x06\xef\x94$>\xc5\xc5\xbe\x14u\xc25N\x8e\xb3\x81gm\xb8$\xc1\x97\xde\x1b\xcc\x8a[\xb5\x9a`B8b\xef\x0dR\xfb\xc5 \xf6P\xf4A-\x16E\xfc\x92N\x86\x90b\x17\xac:(\xecp\x0c\xe1\x8d\x95\xa5\xf8\xcb\xca\xe4\xcc\xc42\x99\xfc-fI%\x9c\xf9\x16\x96Wm\x89FI\n\xfbQ\xceJ\xe8=\xa9\xdc\x9d\xcc\x13/\x9f\n\xd2\xd0n\xf3\xca\xa6\xdd\x10\xfb\xb7\xbe\xe1\xacV\xd4\xab.\xd1\xdb\x94.\x1aI\x90^\x8b\x9f\xf3\x8e\xd5F\xd4\xb4\x16\xbbt\xb1H\xee!\x1a:.\x94{5l^?\xa1\xf42\xec\xae\xd7\xeb\x1d\xa2\x92\xbf\x11j\xcd\x16o\xb1z\x8b\xbb)\xcb\x98\xfc+Mya',p\xa9b\xb3\xfa[\x14dF\x83\x07\xda%\xe0Nh\x8b\x904_6J\xc6\xd1\x9a?WAD\xc9R\x9fR\xb1\x80\xb0Y\xce\x0dM\xe2 \x95\"\xcd\x8c\x12+\xb9\xcfE\xa9B\x90r\xae\xeeA\xd5\xf5\xbf\x16\xa9Xt\xd4\xca\xc8\xfe\x97\xb3\xd0's]\xe7[\xc6\xca\xfa\xba\xe3\x19\x1b\x7f/^=\xe4H\xe1\xa8\x89U\x15\xcc\xbb\xcegF'\xce\\\xa4\xcc\xa1\x12\xc4\xebB\xba^f\xac\x03\x85;e+n\xae\xfa\xcf\xba\xfad\xfb\x8c\xdf\xd04\xa6\\:\x7f\x89E\x02\xd3\xef\xe2\xcc\x8e\x96f\x05\xda_\xeb\xfbD\xbf/\xe3\x94M\x083X\xf9@\xd3\x94\xdeG\x0c_ \xa1\x16\xa3*\x1a1\xac\x17~\xc4\xb0\xa6'\xb0J\xd3\x98_\xab\x87\xfb\xf9\x15d\xa5\\\x95\x83\xf2\xe7\xd3H\xe2\xc2\xd0\x0f[V\xf8\x11\xc31\xd7'B\x90\x89\x8b +\xaa\x85\x14\xc1Y\xf9\x0bE$\xcef\x14~\xd9\x1d\x1d\xcbH\xe2*\x18\xa3\x18o`E$\xd6\xc5\xe2\xea\x169 \xc7\xfc)\\,\x91\xc95\x07I\xe6\xf8\xe8\xd3\xc9\x97/\x97_\x7f=\xfb\xd2x\x88\xd4\xa0\x06\xb6O\xaess\xd6\xfe\xce\xcbV\xa18\x99\xcbY\xd6\xbdb;\x8b%\xbf\x07\x9d\xebM\xd8\xdd\xeb\x86\n\xa1\xfe}N\xe5,\xa6\x99\xf3r\xa7UT\x13\xa3\x07\xd9n\x97FQ\x98\xb5\xdb\xe5q\x13\xcc %\x1b$?m\xb7\xd3>\xed^'\xe2\x8a&Z\x98\xa2]\xad\x00\xcb\xdf2\x96L\xb5\xcb\x19\x9c\x90^\xb8\xf7j\xefp\xf7`\xef\x15\x1e\x93\x9d\xbf\xdf\xf1Ng\x07/\xc9\xce\xf0\xef\x17w\xbd\xa0sq\xf7\xeat\xb4\x83\x17dgxq\xd7;\xbdX\xee\x06A\xefb\xf9\xee]p\xaa\xfe\x1e\x84\xa3\x9dk<%p\x18:M\xc4m\xe4\x9e\xe7O\x0e\x98a8\x9c\xb1I\xe6\xdc\xc6\x13\x08\x0c$\xd95K3\x13\x15h\xcc\xb2\xcc\xc5.\x17\xb2sE\xb3x\xecF\xeeY\x92\xb0k\x9a\x98\xb2\xc7\xc4 \xee\x0e\x03\xc7SK\x90:\x90I\xeb\xab\xc1\xc8\x0e\xb9\xd8\x8d9\xac\xda\x8e14\x81U\x91\xc4\x13]\x81\xbb\xc6\xc6=.h<\xf0\x8c|\x01D\xeeNS1\x7f3\xa3\xe9\x1b0$\xc9\x17\xcc\xbcT5(:\x01\xfeT5\xb1\x98\x0e\xd9\xc8\xb2\xca\xba\xd6\xdc\x81\xed \xcfx\xbfM\xc9p\xd4\xe7\x9dN\x1f\xa5J*\x97\x9e\x12\xce\x0b\xcao\xd9!\xde\xd7$\xc8E\x12K\xcf\xfdw\x17\xe1\x94\xb8n\x89\xcd\xba\xde\xe3P\xc7\x1b\x1d\x06#\xdf\xfdw\x173\xc2\x87\xe1\x08\xe1\xd4\xbf\xd6\xfeZR\x06a\x94\xbc\x05v\xbb.By}]\x17a\x89\xba\xbf\x89\x98\xc3K\xd9\xfeME\x9c\xc4\x1cz\x8e\x05 p\\\xca\xef\xe2(\xee#\x1dt\xd9\x00\xebDz\xc2\xf7\x11:&\xfb\xfb\xbd\xd7\x07\xed\xb6<\"\xfb\x07\xbb\xe1\xebv[\x1c\xc5\x83\xfd\x83\xdd\x9e\x0e\x88\xb4\x1f\xf6\xda\x1eo(\x89\x06\xa9V\x81x^\x18\xf4v\xdb\x12\x1d\x1d\x85\x01\xf2\xf5\x1bG\xfe\xc1\xfe\xfe\xee\x01\x8a\xbc4\xd7\x94`\xd1\xe9\xa0\xa8xm\x00\xe6\x95\xa5\xecPs\xe3mnr%L\xd9\xb1ja\xbf\xdd\xf6\xa4Of\x9e\xc7:D7y||\x1c\x06m\xd5\x8d\x15\x0c\x0eaF`@+\xe8\x1aC\x18\n0\xb4F9Hm\x88\xdeU\x8e\xca\x98\xdf\xeb\xf9\xaf\xf6_z\xec\xa8w\x80:\x9e\x17\xb4\x88\x1a\xea\xbeU\xe2\xd6\xab\xd8\xf6\x05`\xd2\xc4\x08\x1fL<\xb6\xf3*\x08P\xc4\x8e\x8fC\xcc|\xa2\x12$\xea\xb3\xe3\xbd\xfd\xfd~\xea\x93\xdd\x03\xc4 qw\xbf\x80\xc7\xc4K\xfd\xdd\x83\x97l\xc7c\xfe\xee\xa1mg\xfa\xbd\x00C~y\x0fS\x9c\xe11^\xe2\x05\x9e\xe2\x99\x9a\xf9\xeb\x12\x87\xefI\x80oH\xd8;\xc4w\xe4U\x0f:\xe5\xe5\xe6\x95\xc00\x9dO=\xb7\xe3\"t\x14@\\\x9e@\xe1l\xd0O\x8fx\xdf\xf7ST\x99\xf2\x14\x1d\xab\x9a\xda\xed\xb9g\xads\x84gz6ky\xb5OaA\xf8q0\xe0~\x18\x05}qtm\xa2\x19\xc4\xe4\x1eS\x12\xe2\x8c\xec\x1e\xf4\xc51\xb9\x86:\xab\xcb\x1fa\xcf\x1b\x13o\xda\x80v\x9d\xbd\xc3\xa30\x18L;\xbd^4\xed\x1c\xec\x1f\xf5\x0e\x06\xea7\x9av^\xbf\xd2/\xaf_E\n\x0b\xc8\xee\xc1j5>\x9ex^\xd2\xb9G;\x14!h)\xa7p.\xc2\xf7>\x19\xbf\xa4\xb8\xe5\x8d\x8f\xbc%\xc9\x8e\xc8\xdd \x8c\xb2cr\xe7\xf7\x0e\x06\xbd\x83(\xeb\xdc!\xd4\xcf`\x9a\xe8\xf1\xc4Kv\xbc\x05\xd9=\xe8,7\xab\xa2/\xc9\xa2\x7fGn\xbd\xfbN\x8c%\x99\x999\xf0C\x1c\x10\x12#<\xf1\xeew$:N:7\xf5\x927\n+\xd4G|\xff3\x91x\x06K~\xcc\xbc{\xdf\xc7\x01\xbe)\xac\x00\xae\xbc\x99\x85\n\xe7\x8f\xa3\xc25\xbe\xc7W\xf8;>\xcf\xbdG_\x13\x8f\x11E+P\x8e\x1d\x120\x83\x03\xa1x\xd5\xc3\x94\x04}zt\xdd\xf7}\x8a\x14\xe0\x87t\x84\x8e`\xc6\xcf\xf5\x14\xcf\xbc\xa9\x99\xd7\x94\x08r\x9eW#\x8a\x0c\n\x95\xfai1\xcf\x19I\x1a+\x85\xabG\xd3\xa3\x0c.\x93Nu\x8dYG\xeay\xe2h\xc7\xbb'\xa9\x1fnB\x98\xfbD\xe5C/\xef\xb1$Y\xa5\xeax\xea\x15]\x96\xed\xb6\xef\xf3\xe3\xa4^|Jr\x83\xc41\xe1x\xa9\x90\x0f\xe6}A\x96G$\x1e\x84\xd1\xf2\x98\xc4f\xde\x97\x9d\x18\xa1\xfe\x12\xe6\xfd;\x19w\x16\xf8JM\xfb\x02\x17\xa0\xb8\xf3\x16\xfe\xf7\x9f\xafp\xa0D\x8b1\x99x\xdfw\xaeP\xdf\xfa<\xd6\x9fbr\xebq|\x8fSB\x04\x02`\xfb~\xba\xf6}\x8e}\xbfPI\x9e\x97D(#\x0f\xa5\xdd\x98\xe2*\\\xbc\x1cg\xbd\xe8a\xc2\xd4v\x19\xdd`\xc6\xe1\xe1j\x8dM\xd2\xf7<\xe9\x1cKq\xf2\xe5\xcd\xd9Y\x93\x9d\xcf}\x9d\x9a\x9a\xf4eW\xb2Lz\x0c\x0d\\\xc52\xb8\xbeB\xac\x88\x81E\xab\x14\xdfx\x0cU\xff@\x85\xe3\xa2\xc2\xefJ6\x03T\xdeC])\xde\x8b[\x96\xbe\xa1\x19\xf3\x90i`m\xf9\xd0\x17\x0d*\x8al\xadm\xae%\\\x0ce\x08\x81\xb3\xd3\x9c\xcf\x13h\xed\xa152Y\x94\x1c\xc3\xbd\xden\x80 f\xb2\xb7\x8fjG\xf6\xe8\xa1A\xde(\xbb\xcd\xba\xb7\xecJ\xb1\xff\x9f\xccQ\x18\xb45a\x8b\x94\x8d\xebG\xa6\x98u\x17T\xce2\x02\x178s#k(P\xf8\xa5\x19\x8ePn\xcf\xa3\x0fA\x157\xcbR\xa9\xc0\xe6&\x82N\xd8\xc4\xc5\x0f\x8c/\xe7,U\xb2]\xd4\n\xf05\x93\xd1&\x14X7Y\xaf\x1f\xa9,~~E\xb1\xaahc\xa4$\xd4\xa7\xe0\xcf\xe4\xaf\x1f\xe2L3_\x0dX\xb1y!|\x8d\xe3Lw\xbd)\xfb#w\x9bU\xc1\x8f\xcb$y\xc4\x04\xae\xc8s\x9e~\xcb\x8f\x9a\xb7ggO\xca\xb3\n\xbacp\x9e\xd1]\xd04cJ\xb4\xdd\xdd\x05/+\xdc\xa4\x17\xf6\xc7\xf0m\xef)\xb3\x90\x82\\\xa7\x15\x9e\xc2\xccei\xa3>\xa3\xd9\xf9-\xcfg\xd5\xdc4\xc0\x12\xad\x9bp\x16\xc4b%T\x10\xb9Z\xb9m\x17s\xc2W+\x97\xb8F\x94xX\xf7\xad\xbb\xf9\xc5\x913\xd3\xb70\x8b\x98\x12\xa6/\xd48\xad\xdc\xb9\xf0w\xae\xfb\xac`ae~\x97.d\xbb\xfd\xb8\xdd\xde\xd0\"\xc5\xdd9\xbd\xfb3\xbbW\x84\xb5`\x1am\xf7\xb4\x99`\xf0o\xceKs'0\xce\xfe?h\xbbG\x1a\x0e/\xbf\x80f\xb0\xdd\xd6\xbf\xdd\xa9H\xb1 \xe9\xa0|\xf5\xf4\x9d\x85\xdcK\x87\x8b\xa2\x83 \x0cvq\xdc\x98k\x01f\xa8&\xd3\x01\xa6\x8d\x99\xa6)\xbd\xb6\xeaz\x85\xb3\xc6lz\xc6.\xe7b\xc2L\xceC\x9c4\xb7\nG},\xd5\xd9\xc2=<\xde\x96\xed&\x9e\xe4\xd9\x82\xd7x\xd9\x98\xcd\\\x976\x95\x05x\xd1\x98\x8bf\xf7|lu.\x0c\xf1t[u\xe6v@5\xf7\xa4\x196\"\xbd\xa5\xe9\xe42eS\x93\xb3\x87g\xcd\xe01w\x13L\xb6]<\x7f4\xdbe\x12gfL\xbd\x00_7\xe6\x9d\xb3\xb90\xd5\xed\xe3\xfb\xc6, \xfd\xc7\xbd\xc9r\x80o\x1a\xb3\\%b\xfc\xdd\xb4\x14\xe2\xab\xe6a.\xf9\x84\xc2\x85D\x83,\xe1+|\xd7\x98\xb3\xf0\x82d\xf2\x1d\xe2\xdb\xe6q\x8e\xc5\"\x87\xc5\xeb~U\x89\xf2\x94c\x9d\xdc\x86\xa6p\xac\xd3\xaf\xde\x87sD\xe1\xde\xc8\xf8\xd62\xe9\x0b}\x888\xd5?T\xff$\xfa'\xd3?\xb3r\xcb\xcd\xf7\xc9\xb2\xaev{\xc3\x99\xcfR\x17\x9b\xe8\x9f{\xfds\xad\x7f\xc6\x9bu\x95d\x0fr\xc4VBM}`>(\x80\x10B\xa6k\xd9=Q(\xfcA\xb1\xba\x0b,\xbbo\n<\x85\xa4\xa9N2\xa1\xc22%p\x90e\x99\xf6\xc9\xac%2\xc6\xb2k\xae\x08\x13\x81e\xf7\x9dF\xe0\xcflJ&\xea\xd5\xacuB\xb1\xec\xbe\xa7\xff\xb8'\xf7Xv?\xb0\xb9 \xd7Xv\x8d\xd9z\xac\x1e\xcd\"& \x96\xdd/\xb0\xf6\xa1#\x99z5HLfX\xaa\xad\xb0\xe8x\xc3\xf6\xad\x06\xbbZ\x99a.\xd6P\xa06\xb6\xf3<\xb12\xba\x86\xbaL-\xcb\xb5]\xa0\x18\xfa\xf6\x02c] \x87\xcb\x8f\xc9B6R\x10B\x84\xae\xcb\x82\xeb\xf6v'&o\x0e\xf4\xed9\xa9\xce 3\xb2=\xd7\xbd\xce\x05\xd3\xb5=\xd7\xb5\xce\xb5q\x05\xa1\x9e/6\xf9\xf2\x89\xde\x9e3\xd19-,\xd8\x9e73ys\x14\xd9\x9es\xa6s\xfe\x85&\xf1\xe4\xd4r:\xd50=\x1b\x92mc\x10\x1b\xb6Z1\x05K\xfd3\xd5?\x89\xfe\xc9\xf4\xcfL\xff\xccW\xab\xc7\xa7\xdc\xab\xcc\xf9\xfdjUy\xbf\xae\xbd\x8fk\xef\xcb\xda\xfb\xa4\xf6~U{\xbf\xab\xbd\xdf\xd6\xdeo\xe0$Z\xbd\x9eO\xc9\xf7'\x05\xe9\xab{\xc9\xde\x03G\xd8pN=\x06\x15\x0d\x91\xc3@\xb1\x8fr\x18\x8er^m\xf7\xa5\xc7\xfd\x14\xed\xecuRhN\xfcr/\x190\xb1\x9b\xd5\xc0Q\x07TEI\xaa\xaa\xcaH:\x0cG8\x81\xb3\xe1\xd8\xab\xf7\xb0lB\xfa\\5\xc1\xd7^\x80)\xce\x10\xc2K\xa26\xf5\xec8\x18\xd0\xce^D\xcd\x95\xe4\xa0\xcf\x8f\x16}\xee\x93=$\x89\x18Vt\xd1\x1c\x8d\x8e\x8e\xc2\xc3U=\xd9\x0f\xe1Co\xf3CO}8\xd8L\xdfE#\x9c\x0c\x97\xbe?\"\xf2\xf88\xde\xabT\x82\xfa\xe1\xa3\xb5\x84\xc1\x96\xa1\xed5\x8e\xec\xf8\xb8\xf7h\x9f\x0bn\x1c\xd6\xf14\x15\xf3\xe6\x99\xb5\x0e\xb2\xcas\x0cA\xf8\xcf\x8a\xbd\x1c\x8e0%\x01\xce\x08\xef\x88>=\xca\xfa\xd4'\xe1\xc1\xee\xe1.\x8a5\xd3\xbf\xf4\x18\xa6\x98\xfa\x90x\x9c\x0d\xb2\xc8<#=\\1\xf0$aC\xde G\xd8\x14I\x87\xf2\xf8\xb87\xf2\xd3\xa1<:\xdak\x1f\xec\x8e|\x97\x10\x17\xa1HAY\x00|\xe8\x84\x91\x92G\xd8P\xfa\x0b-\x8d/|2\xc51\x99\xb4U\xe9\xceR\x15\x9f\x1c\x1f\x93\xce\x12/}\x92\xf5\x97\xc7A?&\xbd\xfd\x83\x97\xb1\xafKa(\xb1\xec\x90C\xad1\xa0$\xb6\xca\xc6E\xd9\x14\xcaR(K\x1b\xca\x9a\x00\x921\x8aI\xd8\x19\xf7K\xa76\x84$\x85\x12s\xf0\x91~\x8c\xc2\x9d\xe0\xa57\x81\xbe#E\x1b\xc0``!n\xbd\x1eN\x11\x8e;d\x9c\xfb\x9b4\x99^\xd2\x97V\x9e\xb8\xa3\xaf\n\xde\xa6\xf1\xc6-V\xdbU*\xc5\x19N\xf0\x98\x1c\xbe\x8c;\xa2\xa3\xc0\xa7\x865V\xa3Z\x90\xa5\x02\xe8\x94@\x8471\xb0j\xef\xf4\xf6P\xc7~\x7f\xf5\nE\x01\xc8|A\x14C,\xf8t\x10F\x10\x0f^\x1e\x05ZY+\xdb\xedpG\x1e\x05\x10\xdeE\x01Q\xeaA\xd1\xab\xcc\x93\x08\xc7\xd9G\xfa\xd1\x93h\xb5\x92\x84\x90p'\x18x\x19\xc9\x13U\x19L\xc9\x12E\x1e\xb5l'\xa1\xfe\xe2\x98\x84\x83\xe9N\x12Mm\xd8\x85\x9d\x05B/\x93c\xd2SE|\x1f';\xaa\x08d_\xaa^\x99\xae\x98\xf2^F<\xf92\xe9\x84\xc8\xaeD\xa8\x02d\x81\"/#\xd2\xfe\xb0h\xc8H\x02\x84\xfa\xe2\x98\x1c\xf6\xd9\x90\xfb\x13\xbd\xcfdx\xe2\x93\x19\xcev\x146aa\xe1\x1e=:\x12\xab\x0c\x8f}\"\xfa\xe3\xe3\xc0.Du!\xaa\x0b\x8d\xa1\x10|\xee\xccF+\x12\xf6\x0e_\xce\x9fR!U\xc2\x05YG%\"\x9d\xb04\n\x83\x00\xd3$\x11\xb7\xa7\xf3\x85\xbc\x8fZ\x01\x1eS\xfe\x89\xa6\x19\x8b\xdc\xeeo\x99\xe0.\x86\xf3\x86\xc6\xb3\x0bv\xeb|J\xc5<\xce\x98u\x9f\xc5r\xb4\xc7\xba\x13*i_\xb1\xb1\xbf,\xa7S\x96z\x02b\x92\x11Q\xa8\xf8<\x84\xf0\x06\xff*\x06:\xa6\x96L\xe3\xb9\x97\x1f\n\x0f\xb8\xb9a\x81\"\xee\x81\xc3\x15\xe8\x98'\x90J\xd0\xfe\x8d\xd6\xb53\xb7p\x1fuu\xcbO\x9d\x86T\xa0tc\x8c\x07\xc3\xdd\x1e\xeao\x80\xac\xb7\x1ddC\xb7{O\xe7\x89\x8b\xdd\xee\xbd\xfe\x01\x10\x8e~\x1c\x86\x85\x17\x95M\x18B\x94\x95\x98\xc4\x15\x18\xf2M\x87\xc7\xf1 5 \x8aQ\x14\xffA\xf8\xe4 \xe9\xed\x856H\xd2g\x17\xeb!\xc5+y\xbd\x83\x10U\xb4\xb9\x05$\x8azl\xf3(\xb3;\xbf\xcb\x0b\xb8>\xf3]'\xce\x9c\xe2\xf4s\x02Z\xcc1\xe5\\\xc0N\xbd\xcc\xd8\xa4\xeb\xa2uy<\xd5\xd5\x9e\xe5\xbd\x03T\x9auv\xbf\x8cglN \xf7v_\xd9\xc9\xefN\xce\xde\x7f9ywz\xf9\xe5\xcd\xaf\xa7\x1fN\x08\xf7\x0e\x0f\xed\xef\n\xef\xcao\xe1\xee\x9e\xfd\xf1\xcd\xf9\xe7S\xfb\xe3\xae\xfd\xf1\xed\xe9\xbb\x93o\xef\xbf^Vk\xdf\x7f\xd5\x94\xe7\xdd\xb7\xf7\xef\xad\x1e\xbc\xb6\xf3\x80\xcb\xc3\x14~j\xa9'Ib>\x9c\x80\xbb\x9b\xfc[F\xa7\xec\xbd.\x95?6|\xd5\xa5\xad7+\xcfd9_\x10\x01?\xb5\x92o\xf5\x97\xfc\xd1\xfa\xfa\xb7\x93\x0f\xefO\xef\xc6l\xa1\xe6M\x8d\xb4\x02\xfe\x0fg\x1f\xcf>\x9c\xbc\xdf\x06\xe6\xe7\x00i\x0b|\xb21\xe5$\xf6\\\xf5\xeb\xda\x1f\xf4\xb1i\xec\xb9\xf0P\xf9\x04\xc1]\xf5G\xf3X\xf9L'\x937\x82g2]\x8e\xa5HU\xaej\x8a\xfb\xdc\xc5\xb3\xf7J/\x02\x05\x8b\x18V\xc5\xae\xda-\xf4\x0833\x94d\xf3<\xa4z\xa2\x80\xc7`(\x19\x04\x9d\x8b\xbb\xe0\xf0\xe2.\xf8\xe5\xe2.xsq\x17\x9cv.\xee\xc2w\x17w\xaf\xdeu.\xee\x0e\xf7.\xee\x0e\x0f:\x17w\xaf\xdf],\xdf\xbd{\x07\xa6\x94\xef\xde\x8dV\xc3\x8b\xe5\xdbCUx\xf9\xf6\x97w\xefF\xde\xa0\xa5R\xde\xe8\x14\x95\x03\xad\xbcA4\xfc{5\xdb\xea\xef\xa8\x96M[p^\xdc\x1d\xee_,{A\xef\x10\xfe\xbe6v\x9c\xf8bx1\xbax\xb8X\x8fv\xf0\x94\xec\xfc\xdd\x1bD\xadU\xab\xb5j\x0di\xe7\x1f\x17\x9d\x91\xdfB?\xed\xc4x\x92\x7f\x1a\xfe\xbd,\x81\xbcA\xf4\xf30\xe8\xbc\xa6\x9d\xe9\xe8\xa1\xb7^\xe9\xe7\x7f\\t\xfe\xaf\xfe\xc5\xce\xc5 \xfa\xf76\xb9\xf0/~\xc2\x97\x17\xdd\xd6\x7f_\xbc|q\xe1] Uz\x84^\xfe\xb4\x13\x97\xd4ef\xeb\xd9\x9e\x10\xcc\x15s'\xe8\xd38a`\xd2/\x8bG\x1d\xb2\xcf\x04p\xd1\xdb\xa14\x0f\xabU\xa6\xd3\x057&\xf0D\x96\xcfv\xc1\x84]\xd3\xf1=\x91\xe6a\xb5j\x19\x0f\xe8\x8a\xf1!\x12~\xca\xc4$\xce$\xe3,U\xf9\xcd\xa3]Y<_$\xf18\x96\xda\xb2\xde\xea\x18P\xe88a\x933\x93\xc3\xf8^\xbf_\xb0\x0ft\xd1\x98\xf3\xab\xfe\x96\xf7\x12\xd4}\x85\xd6F\xfbh\x87{\xf0\x82\x17q]b\xce\xec\xe7/\x92\xa6\xd2N8\xe3\x13\xc6\x8b\x94\xdc\xe3hF\x86\xa3\xca\x95h\xcb\x98FM\xa6\xf0$\xd6Z?V\x80\x1e3=;\x98\x15\xbd\xc0\x0c\xda\xb0R:\xac\xec\x86mi\xfb5\x9fc\xc5$\xe9\xf66.\x0d\xb3r\xb6\xdam\xebES;\x80\xb8.\x89\xccE\xe1\x07\xb5_G\xf5]\xec&w\xa2R\x04\xc1\xcf\x9d\xd5\xb4\xdb\xaa\x1b\xeed\xa9\xe6\x03\xee\x858b\xea\xfc\xacj1\x07\xbc\xf1\x8d\xdaE\xb5G\xec\xdc\x81\x0f\x94\xa9\xe6q\xe8X1 \x99\x0371\x92{Gp\xe6\xe4\xb7~\xdc\xe2\xca\x95\x97\xaa\xadB\xed\x04#\x1f]t\xf3\xa7\x9fv\xba\xec\x8e\x8d=>\x0cF\x08\x99\x06\xe2$\xe9LE:W\xbc\xa1\xa9H\x1f53g\xa3\x7f\x82\x00;p\xc6\xa5\x07\x1aZ\xb5fc;\xad\xa7\xd3B}?\x1e\xea_r\xddgz\x95\x98\x1a\x0dP\xf2Vr\xd4\x00.\"\xf7\xee\xa3\xba\x08&yl\xfc\xfd}\xcc\xd9/)\xa3\xdf3\x12\x1f\xf5\xa0\xf2\xb8\xdd\xee\xe9\x9f\xdft\x1b\xe5m\xa0\xc7\x9bX\xe3\xaf'\x7f\xda6s\xfd\xde&\xfc\xbf\x9e\xfc\xe9\x11\xf0\xcb[Q@-\x83\x9b\x02\xd0q\x01\x97\x01\xf0T[P\xa6h\xb5\xaa\x83Z\xd2kg\x06\x0e\xd5\x1c\x0f|\xef\x16\xd5\xa0\xbc\xd3\x95\x96]\x84s\xbf\xb5]I\xaf\xd5ZM\xcd\x0c\xbe\x903\x96\x82\xcd\x01u\x16)\xbb\x89\xc52K\xee\x9d \x1b'4e\x13'[N\xa7\xf1\x9d3\x15\xa9\xe3\xbe\xf0S\xff\x85k\xb5\xfe\x02\xe1\x89\xee\xa5\xd8\xd2\xcbE\xcaTq/cc\xc1'Ow3\xef\xdf0\x1d\x11\xb1\xb6\x8cQ\xdex\x85\xe3\xa8B{\xa7\x9d\x0d\xc9#n\xc2\xbc\x99\x95n\xacM%\x84O\x03\x97\xc2\xfa\x1aDf_\x83\x10> \x91\xdaA=J\xb2\x8au9B\x8a{8\x82\xbb5G$\x0c\xc3\xbd0\x0c\xcd\xe8\xd8\xdd\x82\x8d\x15\x9eh\x0d\xa6\x12Q\x1cU\x96\x8e%K]\x13\x11\xc7\x98\xbef\xf9\x1aQ\xe3\xccd\xca\xe8\xdc1Ne3\x87\x0b\xdeY\xa41\xd7\x88]T\x91\xa9:\xba:\x1a\xb0O\xec\xcb_gf\xfc\xb6.\x0f\x8f\xb5\x1dv7\xb7\xad\xf4x>\x0dFH\x9b\xb3\xf4\x9a9s\xbaX\xc4\xfc:\xeb\x03\xc8\x8d\xb1\xc3$7\x0516Bq\xe6\xd8\x8b\xcdE\xa0\x14\x1e\x13/\xb6\xedt<^X\x8e\xf7\xb3\xa3q?S`\xa4$\x1ef\xa3\x1c\xc5$\xa6h\xb5\xf2\xe4\x90\x8e\x08\x1fR\xd0\x1d\x8fH\xcb\x8e\xc3\xf0\xc9\xd6\xa6\xc1\xd9\x0b\x0cj\x8c\x97jB+vMj>\xa6`\xad\x1d\xe0%\xf1r\xab\xa7\x92\xb9\x84\xc9\xd6-\x8b\xb2o\xe3\xa3e\x7f\xac\xfaV\xabl8\x1e\xe5\xd3\xc2Y\x06\"\xad\xfa\x9094e\xb5\x8b\x811\xcf\xe2 s\xd4\xa8\xdd\x06k3\xd1n\x17\xf6U\x1a@``5\xcb\xdb\x80_\xb2\x91\xa5\xf9b\xef\xf6\xca\xb4\x12g\xb3\x1a,\xcc\xdd'O\x14\x84[\xc21\xc5\xc3\x1aaW\xd2\xeb\xe8\x9e\xce\x93\xaeH\xafq/\x08z\x11\xa0\x82\x0bQ\x837`\x1c\xdb0\x8e7`\xa8q/\x1e\x8eGy\\_\x83\x8eq\xf1\xce\x0c\xf7ap@\xe1\xe9j\xd5*0Bh\x9bm\xd8\xf6\xe9j\xb5\xb1\xff\xc2\xa1h\xb9?W\xf6;6\xc9\x11X\xcd\x85\x8b\x10\x96C1\"1\x9e\xb0\x84I\xe6\xf0\xa1\x18\x95F^\x05\x8e}.Yt`\x8e\xe1\xda\x93\xa6\x0f\xd6j/\x1bEhP\xbe\xf8~\x04\x02\x83\x1cxv\"\xd6l\xf6\xa3\xd5(\x1e\xa0,\x81\"\x18\x0bu\xd4\x80\x1d\xed\xa0$V;\x80\xa6#@\xf1\xd4'\x1fb\x8f\x97\xacPYG9\xa2\x8f\xf5#\x8c\xdc;\xcbc\xdd\x81\x18%\xc2\xdc\xc5\xe8+l\xe9\xa3\xc62\xbeo\x97Rt\xb5\xdd\xde\xdd\x87\xd0\xce\x13\xf1\xf0t\x11\x13\xd2\"4\xdem\xc2]\xe3\xe5F\xfdh?\xcas\xb5@\xf5\xa5z\xd5\x195AOv\x1f\xa7\xbeo\x00\x93\xb3\x84}\x10VD\x1f\xd9\xc9\xbe\xdf\\U\xb5\x8b\xf9\x99\x91\xbe\x9c\xad\xba\x96\xaa\xe9*\xab9\xe2\x86'\x98\xb0i<\x8e\x157\x13\xc3\x07}\x1d\x17a\xeb\x92\xda{\xeb\x08\xda\x9a\xaf\xdc9\xa4\xb7\xb7\xdf\xda\x86u\\\xf1O{\x07-B\xe4j%[\x8d(\xc5\xfd\x10=\xf2\xb1\xa7V\x14\xf7\xc9.\xc4\xf2y\xa4\x99\xd6\xbd'\x91\xcd\xd3~\xd0l\xab\x0e\x12Qn6J\xf6\x93p/\xb1LK\xbb)[0*=%Wb\xd9 \xedz\xdez\xe5\x8dG\x88\x95\xac\x83\x12\xc6\x84u)\x1f\xcfD\x9a\x1f\xaf\xb5B}\x90\x9e\xb3\xb5\xfa\xab\x0e\xe3 \x8fj\xbf\xcf\x9fG\x84\"\x080\xf4$R\xa7\xed\xf6\xde\xbe\x0e\x9b{\xef=\x9a\xdf\x0f\x11\xea#`\x11Z\x01\xae,h\xb5\xa6Z\x01\xee\x84\xa8\x86\x08D\"s\xac\xc7\xc1/\xd5\x93]\xca\x83\xe1\xc1\x81\xb5\xa2n\xdf`\xb9\xee\xe2V\x88[AqH\x98\x03\x17YM?Y9\xcei'D\xbe\xb1\xfb Qy\x00\x1a\x08\x08\xcd\x15\x9d\xd8\x18\xab\xd8,\xead\xec\xf7%\xe3c\xe60.\xd3{\xb7\xecke\xc4\xd2\xacM\x83\xbf\xad\x0cfH\xd2k\xb8\xa3\xafg\x87\xc4\x98u\xbf\xc7|B\xdc\xbcR\x17\xe7C\"\x14Wv\xf9w^\xfdn\x1ai\x85\x98*|\x88\xa7\xde\xee\xae\x0eG\xff\x04Q.=V\x97\x9eq\x8c\x1f\xfc&\xa9\x88\x1a\xaeS\xab\xef\\\x84\x0f\xcc\xb5\xa2\xa7h\x03\x1ax1\xf8\x94x:g\xb4\xabO\xf5<\xaa\np\xe2\xb6Z\xee\xb3\xca\xa9\xac.\xb6\x89;\x8e\xd1\xc3\x8fPWC\\\x0fz\x9a\xaa\x96\x19\n\xcb\xeb\x81\x97n\xf0\xc16&=\xdd\x94\xd9\xb2\x96\xbc`v\x19\x9f\xe4\xfc\xba\xe1coc9\x8b\xb9C\x95\xa8tEe\xf2\xd3\xc8mAD\x07\xf3\xcdm\xb9\x90VM\xdcd6U.\x90.\x97\xbc\x90$\xad\xc9p_\xf8\xdc\x7f\xe1\xbe@\xb8\x15T<\x83\x15\xf4\x02(\xc4\xa1\xa2\x10\xfc\xf9\x14\xa2q\x97i\xa4\x12\xdc\xd1\x9fmJ\xd1\xd8Pe\xaa+\xe8\x91\x07\x7fk\xdd{\x8a\xe9k\xddx\x1c\xf5\xd1\xd3\x95\x14\xd7\xd6\x8b$\xcd\xb9\x17h[\xed \x17\x13\xa6Mc\xf2\x89\xa5\xd2I\x18\xcd$ho,\xe1\xb3$\xd2\x8f\xe1\xa3\x0d\xf0o^\xe1[\xa54i\xc8\xaf\x0eO\xf0\x0c\xdf\x91\x10\x9f*\xa2}Ij\x048W)\xea]S?{\xaeX0\xeebf\xc4\xf8<\x16\x84\xe9\x95y\x83\xdd\xc3<\x9b}\x03\xde(\xc9\xc8\x98\xec\xe9-N\x91\x0b\x8eE\xbbm\xef\xcf\xde\xa9\xde\xbe\xed\xddopG\xc2\xa8\xc2\x1f*\xae\xe6\x8e\x04Quok\xb7\xbd;\xa2\xf8\x17\xac\xf8\x9e;\x10w\xfa\xef\xc0 X\xa1]\x1f\x95\x0d\x0dt;cB\xffh[\xd1\xd8\x80m\x0c\x97\xdeNW\xabXk\xb7\xee\xda\xed=\x1d\xc5\xce\x9b\x90P\x0f\xb9\x07+JF\xd2\x0f\xf1\xcc\xc23[5\xa9;?P\xd5)\xeek\x86\xeck355\"(\x08\x12\xc3\x94\x8dK\xa6lI\x1e\xd6x\xa1\xfe\x988\xdff6f\xfag\xae\xa6\xfb\xe6Gy\xb6%\xc2\xd9S\x0cRPF\xe4\x7f\x82\xdfQ\x04=\xce\xd9(jo\x97\x07\x8ai\xc8\xda\xed}E\x1a\xb2\xd5\xaau\xef\xa5H\xbb\x12\xff\x06\xfe\xb4z\x86\xdd2\xbcL\xc1\xe3\x80\xe5\x90\xb9\x8f\xfeD?\xaf\xbd\x0c\xf5Qc\xb6\x0d\x19i\xff\x90\x10\x92\xa1\xfb\xe6Z\xab\xdb\xaa\xd9\x99\xa8s;\x8b%\xcb\x16tl-_[(t\xe8T\x9aK?\xdf\xd9}\x07\xc2\xc38\x19[\xd0\x146\x86b\xef\x85\xeb\x14\xb9l\xec\"f\x0f\x14\x99\xc9\x06\xde\xf3\x01\xa7\xf8\xc3V\x80\xa2\xf9\xc0\xcb\xc1\x18\x18~)\xe6c1_\x80F\x82\xddm\x81\x83\xea\x177W\xbc4(\xfa\x8eH\x9d\xa9H\x12q\xab}QQP\x0dJz\xb5L@\xf5\xc1\xe6\x0by\x0f\xda\x03\xa0\xf0\xc5\x12\x01\xcf\x19\x10\x7f\xc2\xc2\xf0\x06\xd9\xc0\xd3D~O\x117P&\xcd\x07\xe5tG3R\xca#\xf3\xd5\xaa\x02\x85\x19x\xdc\xaa\x80\xc1\x12Y\x9eZF\xa8F<\xb5\x94\x92=\"\xa5T\xe6\xf3 !%g\x88\xe6\xed\xf6\xe6\xc4\xdd\x14\x82K\x05\x99r\xc1%_0\xe5\xfe\xb3D\xf8f\xad\xe8)\x9e\xa0\x1aI\xb5\xe4\xdb\x9c\xa4\xe6;\xa4\xc2\x86\x89YA\xb3\x92\xbe\xce\xcd\xc5k8L\xf6\x16O\x81 \xf2z\x17\x84d\xedk(_\x17aO\x91\xbaE\xc9\xdc\x08\x12\xf6\xf61H\xb0)yX\xaf\x7f\x84<\xa7\x087v\xa4J\xcf\xd4\x04-4\x816\x13-\x11~z\x04\xa0\"\xda`j@m\xa3\xe6`R\xce\xc1,\x9f\x83lP\xccB\xd4$H\xa6j\xe5O\x0d\xc1\xd4\x0b\xc5\x19\x8b\xf9\x9c\x16>\xb4\x81Y\x1e\x8b$a\x9a\x95QH\x133\xc5\xc7/\xf5>\x16\x13%hbX\xe2\x8bgi\x08\xc0\xd2\x8bn\xd3\x10H\xa49DK\xb4\x0fs\xd1~l\xb0 )VSY\xaa\x19\xf0\x15\x8e\x8c\xe6\xaa\x07\xcd\x12\xc0\xde\xb6X\xad\xb4<\xfa\xf4\xbcYm\xd5\xfa\xb5\xb4Vw6P\x0b%\xc5s<\xc6 ^\xa2(\xce\xfd6\xa9t\xbd\xf5\x9bO\x85o\xa6\xc4\xae\x1b\x8c$\x9e\xc6\x86\x817}^\xb7Q4%\xadp\xfd\x03\xb2fm\xce]\xa4\xd6\xec\x04\x0d.I+\x88\xbc\xac1d\xa9\xc5 \x85\xe0\x19\x17/\xd5\x9f\x05\x91xJ\xd4\xfa\xd5\x0cZ\xd8\xdb\xd3GAO\xaf\xd6VX\xacQ\x10\xc3\xa9\xbdD\x15w-R\xaf\xd0\x91\x8ciBS\x0b\xb1]\x17V\x19\x05m\xd4\xde\xee\xd66\xeb\x9c\x03(\xba(R$%\x19$\x04J\xd2\xc1n\xd4\xd3{\x8f\xd6\xd2i2:\x9e\x899\xd0\xd19l4\x8aj\xc6\xd3\xb88\x9d\xd2\x9e\xa3\xbd\x98\xec\x1d\x1e\x11/#\x14\xb5\xdb\x19\x18\xadd\x9d\xbd\xc3\xa8\x13\xa2cR\xb0O`p=(Hv\xb1\xaf\xd9\xb4\xfb6\x9e\xc8\x99nZ\xef\xcbz\xd0}'\x96\x96\xa9`\xc2\xb2L\xfb\xb4\x17j'\x8b\x96\x83z\xc7yC\xadv\xef#oA\xa4\x1f\x83\xa1u+\x00G\xc9\xd7\x1eE\xa0?y\x1a\x86F\x7f\x02%@\xb6\xd4\x00\xfd\x91\xb2\xad\xb9G\x8d\xb2\x8dj\xb3\x92|.\x1f\nuvUS\x8d\x9f\xc2\xa7\xbe\xd7ZV\xf7\xec\xa3\x05j\xb7A\xc1M7\x14\xdcO\xf7\x14\xd4\xec\xcb\xaa&\xf3x\xd1n\xc3\xb2-\x93\x10VCAS\xdf/P\xa2\xd6\x87\x87]\xc0\xb4m\x9a\xe0\xf1 \xf4\xa7\xd1\x14A\xa4\xe1\xa4\xdd\x1eW\xb4\xc6*\x8b\x89y\x08`\x12\x03\x05\xf6\x817\xd1\xb4\xf5\xf1*Q4\x81\x9c\xe1\xd6\x9cS\xf0\xe7\xa1Ps:\xa85\xec\xb8(\xdaZl\xfb\xa7\xbcmE \x02@/ \x0e\x15\xad\xbe=\xfb}\xf4\x8c\xa9x\x03\xf2\x88%\xbb@(GC+\x02M\xba\xb6\xf2\x1a\x80\xa2\xaf\xff \xf5\xc7#\x94\xa7\xba\xad\xa5D\xd4\x95\x19O\xb7\x05dk\xf75\x04\xf1WX\xf3\x06\xb6\x14{\x8c\x01\xc2\x8f\xf4\xbbJ\xd6\xca\xe0\x81\xa9-\xe3U\xbaiwR3\xeds\x8f\xa3\x81iY@\x83\x1f<\xa6\xf7\xa9\x10v\xe9\xea\xc8\xd4\xac\xe7\xcf\x84\x10K\x98n\xb7\xdf{\x0c\x0d\x1e\xd9\x80r\xc3\x8fr\x0b\xcab~\x9d0\xe7\xf7\xa5PY\x0d\x90\xc1\xfb\xf0\x96>\xa3\xfe\x0flp\xcd\xb5?\x81*\xf9\xfe\x06(\xb3\xa7@\xff$k\xfeO\xa2\x0c'\xe9\x06\xca<\xd9\x96\xe6'\xc1\xa80\xcb\xb9\xc4\xcd\xa5\x11\xa0jS\xad\x00Xh\xb8\xe1X`\xdaF\x91\xf9s\xc4nT\xa0F!QdG\xbd\xfd\x83v\xfb\xfb0\x1b\xa1\x92&\x9c\x0f\xb3Q\xa5\x17E~\x8f\x92\xb0\x07\xe7\x08 \xc9\xd0\xa0\x17\x85\xe1+\xa0\x8f{\xd1\xe1><\x1cF\x01:\x0e\xf4F \x08\xc51 \xfa\xe28\xe8\x8bN\x07y\x94\\=\xab\xa3\xc7$\x18\xc4\xc4\x8b\x8f\x8e\xf6\x90O\xa3\xaa\xc1\xc9\x8c\xdd\xd1 \x1b\xc7s\x9aT-N\x8a\xfe\xdfzq\x15\x8ayp\x01\xc0\xbf\xef\\\xdcr\x87ec\xba`\xc5\x81\x90\x8b\xfa\xd5I\xcd\x97Xf\x96\x98\xc2\xb0\x86%V-\xf4\xaf]b\x13\xb1\xbczr\x89U\x9a\xff\x11\x1e\xb2\xb9v\x9b\x91,\x1d\xf6\xda\xa7W\n\x1d\xf7\x14\xbb\xf7\x94\xee\xaa\xbe\xba\x1a\xb3?\xa1UNA\xab\x9cj\xadr\x8a\xfa\xe8\xe9J\x9e\xadUNb\x9a\xfd\x88Ry\xe3\xe8\xa5\xa2M\xb6\xc4\xcd\x9a\xe5|q\x14\xf3b\xc9\x0b6nb\xda/\xf5\xff\x05\xb1\xb1\x05W>\xb25\x0d\xb0Y\xa2\xc1\x13\x8aN-\x95\x13M\xcc@\xb3e4Z\xf1\xd4\xbb\xf7\x96OM\xdaju\xe3-\xd1j\x05|\xe1r\xb5\xda=\xd4\xbf{=\xf3\xbe\xab\x7f\xb5\xa0\xb0\\\xad\x0e\xf2\x0f\xaf\xcd\xafI\xdf}e\xbe\x9b\xf7\xd7\x07\xea\xb7r\x8a\xe9\x1d\x98\xca\x80\xab_*\xc1\xf3\xfe)\xb4R<\xcfj\xc5\xdbm\x85\x10?@\xc0\x05\x89\xed\xbd\x15\x0e_\x15\x8a-5]\x06\xfd\xe5\x12\x1e\x7f\xb0\x0b\x9a\xbd\xcb)\xa4\x06\x9b\xa9\xe7\xd1Z:!\xb2\x0bk\xde\xf31\xeaa\x9a\\Z*\xdd\xb9z\xcbM\xfe@ O\xecr \x8f\x97\xeclN\xb8\x14.U\x18c\"\xd1\x03\xd5\x1c\xdf\x13lz\x1e\xbecmu56\x95\x91\xacb\xb8\x93Te\x80\xb1\xe1\x83\xd7\xb4\xdd\x06\x8a\xaa\x10\xb6\x15j\x8a\xaasv2\xd44M\x08_\x03Fzq\xf5L\xb2\xb9\xb7Mv.\x8e\xdd^\xab\x95\xa3\x05Xb\x01\xc6,JT\x99\x02{\xaa\xc8 \x9c1p\x85\x94\x97p\xbcm\\\xaf\x99\xd0\xf3\xe6\xc4o\xe0\"\x145e(\xde\xf4j\xceu\xde%\xd5\xd1\x11\x17@3;\xa37\xcc\xa1\xfc>?\x84\x03\xfd\x8d6f{\x8eR\xab\xd0mha\xe0\x0ez'\x93\x1f>/[\x0fU,\x85\xc9\xae\xc5\xc1\xa2\x88\xd6q&\x03\x19eN\xd3\xba5\xf0\xb7\x82-\xd0\x03\xe9\x84x/W\xe7[\xe3\xddX\xc6\xedv\xee\xc1\xbb\x02\xff\x18W\x17(\xd8\xb6r\xc1;\xe0 \xdc2J\xd6\x06\xf01\x97,]\xa4\x0c\x0e\xa13\x10\x0e\xf2\xab5\xc5\x15\xac\xba\x19\xe3\xe3\xdc\xdb`\xef\xe0)\xd8! \xd2\xdb@W~)L\xdc:\xf9\x12\xdc\x94\xf3D\n2\x9eA\x9a\xf2\xcc\xbc\x02\xe4\x92\x86\xfed\xaew\x11\xb9Z=\xac\xb5%-\xcb\xed\xeaK\x1f\xf9\xed\xb66kf\xd5\x01\xe4\xbdA\xc6\xday\xfbg\x8f\x19\xad(>\xd8\xef\xbd\x82{\x9bv\xde\x00\xb2\x90\xdcM\xba\xe2\x90\x8d\xcf\x1b\xcen\xcd=Cm\x8e\xa1\xe1\xa8*\x0b\\m\x07\xcd7A\xcb\xadU\x89\xb8\xadC&!\xe6\x16\xa4\xf5\x0e\xd1/\x93\x8ex\xd1\xeb>\xfa\xc5r\x9e\xca\xcb\xf9/\xa1\xf7\xd7\x0dQ\x8c\xfc\x04\xdeW\xe1\x8aC\x9e\xad\xf4b$s\xfdOl\x88\xae\xa2\xee\xb1\x1d[4U,\x96\xf4\xe2ajGg\xf9\xdd\xd2x\x11=e\xe0\x0d\xc6\xban\x05\xd2\x000\xae5\xb7\xd6|\x18\x8c\xfa\xa5\x8f\x03\xe1\x95\x1a\x95B\xdfV\xe0\x8b\xf1\x9c\xaaq ;WKi<\xad\xceE\xca\xaa~\x0er'\x00\x7f\xad\xbb\x0b\xf8}\xcb}\xff\xba\xf8\xfa\x04\x88\x14l\xd3.\xbb\x93\x8cO\xbc\x07}\xdf2\xa2k\xcc\x11\xeak\xb8o\xf9\xban\xf2FPU\x1d\x9a&~\xdf\xd2\x84D\xcf\xf4-\x0d\x97\xec\xed\x80_\x96\xbf!\xb8\xb6 \x97`\xcd\xa5\xd8+p}Ad\xed>(\xb7\xee\x83\xa6\xfay,\x92\xe5\x9c\x13\xb1\x16\xd6-\x9fk&\xbf\xf0x\xb1`\x923\x9e\xd9\x1b\xf6{\xd9\x9b\xc2v\xe3\xb9\xfd\x19\x8e\xfe\xd5\xfd\x99\xd3E\xd1\x9f\xc2\xb6\xe7\xb9\xddyX\xff\xab\xbb\xa3*\xdf\x98-#WV:SFxf\xe5I\xd8M\xd5\x89\x9e\xe9p\xa8\x95\xb9\xee\x7f\xbb\xda\xf3\xc3\x9e\xb9\xec\xe7Bc:\xcd\xfdh?\x7f{\xff\x1e\x9e\xd1\xba \x14\x15H\xac\xf1\"e`u\xde\xec5\xa9\x08\xb2\x91\xb2E\xca2\xc6e\xf40\xa6\\\xf0xL\x93\xcd:\xdd\xffv\xd78\x11\xb7,\x1dS\xdb\x0fS\xf1\x1d\xfa\xbc\xc6\xcb\xc5bk\x16\xe8\xfe\x1a\x8f\xe9\x9c%\xdb\xb2@-kl\xdc\x1d\x7f\x91\xf7 \x8b\xdc\xa2]\xf7_<\xabWB\xfc\xd3\xb3\x1an\x99\xd5b\x16!\xb2\x82\x99\xb9\xaf\xf6\xf3\xe7o\xa7z\x16W\xab\xfd<\xb3\x8e\xbf`r\xbc\xab\xbc\x9c\xbc\xffr\xfa\xc8\xac\x97Nl\x9fl\xf0q\x9c(n\xa3\xfe\xa2\xa3D<3\xb2\x80\x8d@\x0d\x08b9\x04\xa9\x05\x9bhD\x96Jv\xe8xd \xd0\x888\xd5\xec\xbav\x0d\xbd\x7f\x05\x12\xe5\xde\x86\x0e\xb68\xdc\xb2\xbc\xc3\xec\x97\x8c-m\xce\xf1j]EH\xd1\x84\x901\x97\x7f\x10\x1f\xc1q\xae\xe5\\5\xd0W\xf5\x14\x0b\x95V\xce+\xdc\x8ek\xae\x18\x0e\xc5\x08\xb5\xdb\xae\xef\xea\x9b\x8b\x90\xe4\xfbb\x84\xb0\x1b(\x1c\xd0\xd1\"\x84\x1f\xc25\xe3\x82\xa8\xa9:\xae\\s\x07W\x170G\xa5\xbe\xdf\x17Gi_\xf8>\xe8d/\xed\x864\x8f\x1c\xb8:\xa6\xbc\x1b\xc2C\xd9\xb1\x8c\xb4\x82\x82+i\xb7uY\xb9Ve\xeeL_\x9e\xd7D\xcb\x03S\xa8zlC\xb5\xc1s5\x1b\xab\xd5\xc1\xfe\x11\x04\xf3=\"\xaf\x82\xd5\xea\xf5\xab\xfc-\x0cz\xe8\xc9\x0e\x81\x88\xf5D\x0fb\xaf\xde\xf6\x93\xd5\xea\x9aH\x05$\xcfh\xca\x8dt\x99\xe2,\xa5E\x9f\xd7v\xcbke\xabU\xde\xa4\"D\x91\xc1\x82\x9d\xbf{\xd10\xe8\xec\x8f\x06\xe0(\x04\xf9?\xed\xe4\xaa\x08\xc3\x1f\"\xb4\x95 Y\x98\x88\x05 \xc1\xbbo\xe1\xda\xb5EHZ:}\xbdt\x11\x04\xcdL\x8b\x90@;\x97;\xd7\xd8u\x11\xc2\x05\x8a\xa6\xc3\xa0\x8a\xa2n\xc75\x94S\x90N\x88\xb0$PE!i\xab\xfc\x06{\xd3A\x10\x19<\x1eh|M\x87\xe1h ^\x96.JL\xb9\x1e\xc2=\x14i<\xdb\xc8\x83\xc3\x03\x14U\x12\x0eQT\x1fL\xe4\xa2\x81\xaaN\x87\xf5\x8c\\\xd4\x9d\x8a\xf4\x94\x8eg^%\xf0L\xdc]\xf2l\x16O\xa5WT\xc7p\x18@\x1c\x19\x9c\x82\x8dR\x88\xe3\xe6\xb2\xa9O\xd8K\x8e\xf9Kr\x10\xa8\xec\xe2eZ\xebW\x18\xa0g\x12\xfa\x8f\x10\xe8\xe7yt\xbe\xddf?\x87\x84\x04\xedv+\xed\xc6\xd9GvMe|\xc3\xfe\x8b\xa5\xa2\xbe\x0b\\\xc5\x9c\xa6\xf7\x8dD\xfa\x98\x04\x037\xb8\x02ez\xee{Q\xc1\xbc\xb3\x91V\xcc\xe5\x1a\x8b\xb1\xa4\x8d\x91\xc2Lu\x95\x92\x87P[-\xc9\xaa\xccX[4VW\x16\x01\x18Z\xc6\x19\x8f\xb4~Wi+<@])\xbe\xa9\x8dMG\xc3S\xbdy\"K\xd9\xbb\xfa\x9eeZwq\xa6\xdeO\x92\x98f,+\x00<\xeca\xf7*\xe6\xee\xc8@hx\x88]1\x96\xee\xa8\x18\xe40\x0c\xb0\xaa\xc4\x1dU\x063\x0c\x0f\xb0;cw\xee\x0fp\xed\xe5^\x88c\xd8\xbf>\xb3\xeb\xd3\xbb\x85\xe7\xfe\xdd\x1bD\xc3\x8e?\x1ax\x83(X\x0d\xc3\xce\xeb\x91\xa2\x18\x97\xa3\x97\xc8\x1bD\x17\x17\xdd\xfcMe\x18\xb2\xd3\x11d6\xde\x87\x06\xab\"\x83\xdf\xf8\xb9|3\xd5x\x83\xa8J\x97\xca\x16t\xe6\x8b\x8b\xae7\x88b>]\x9d\xa9\x7f\x1f\xdf\xa1\x95N\xe2\x94\xaf>\xd2\x8f\xab\x8f'\x1f\x11\xfa\xc98\xa0\xa6d\xe7\xefV\x8bl\xa7\xff\x8c]z\x9a\x08\xfa\xbc}\xda\xe2\xb6\xb5\xdf\xff\x96\xd7\x8a\xf3\x18\x8a9\xe1e\xc3R\xad8z\x9a\xa6bQ\xe8\xef\x88\xa6\x83\xa0\xe3\xaf\x93\xcfZP\xc6a0\xd2~\x9f\xc1!\xb9\xebw,\x85\x82\xa2\x96\xc7ji+\x89\xb8$\xa2Xe\x99j\xca Z\xb8\x81&\x18\xddO\xe7_\xce\xbe\x9e\xfd\xe5\xf4\xf2\xec\xe3\xbb\xb3\x8fg_\xff\x16\x99\x0f\x1fO\xfftR\xfd\xe0v9\xe5\xba\x8a\x8f\xf4c$+\xb4\x12b\xbc\xc9'\xc9\xa5\xa8\x92\xcbw\n\xfa\x16\xc1\x94$\xc0) \xb1h.-\x15\xc1Lq\x9a\x13L\xfeR\xa2\x88\xbf\xb4\xaa\x92\xffc$\xd3c?\x87-\x12\xacV\x0d$\xb3B3\xed%h\xb4_j\x1b\xd7\xde\x9e\x19B\xd5\xf84\x16/\x9b\x07a\x030\xeb\xf0m\x05W]~\xfcx\xf2\xd1|,xh\xeb#\xfd\xe8\x16&\x1f\xdbf\x188\xcd\xa7{\xa1\xf0ek/\xce>\xbe\xdb\xde\x8b3>\xdd\xe8\xc5\x06:=\xaf\x17\x9dG\xbb\xd1y\xb4\x1f\x9djG\x9a\xe6-\xcf\x19t\x832\x028\xa9n\x1e\x98\xe67\xd7\x07\xbcX\x99.s\xb1\xdbe.\x8a\xf8\xbf@89\x00z\\!\xc4\x05\x9d\xb4\xfe\xa0\x8e\xb7\xed\xe5'w\x93\x96?Y\xc5\xa0\xf6\xa6\xa8\xf6W9Z\x0d\x9d\x8b\x0b9\xf2Q\xe5cd7Wy\xd1[\x83Ny\x89\xf4\xde\x005\xbc\xf4\xfek\xe5)\x8a\x8c\xea\xcdT\xca\xa3\x01B\x83\x9f\xdcgI\xf92\x9e\xb3L\xd2\xf9\xe2\x9f#\xd9\xf9},\xa1\x1d\xe5\x81\xed\x92N\x89\xf3\x94g\x10m\xdb\x9c-0\x97t\xfb\xa5\x18\xe7\xc9\xb2~\x04\x84\xb8\xac\xbcp\x04\xb5\x19t\xe1-\x95\xac0o`*M\xbb\xa2\xe2\xc4\x97\xc3p\x84S\xf5\xdb\x1buBL\xd5\xd3\xee\x08\xb7\xe4poTh\xd0\xd9\xad\xa3\xaa\xf0\xd4\x9f\xee\xb7\xafo<\xe8\xaa\xbeL\x91\xa9\x12{#\x9c\xa8\xdf\xfd\x11\x1e\xab\xdf\x83\x11\x96\xc3W#-\x85-\x88z6\x1bF\x80wQ\x7f\x91\x9f\xa7\xef\xf6\xd1\xc2'n\xe0\xf6\x17\xc4_\xe4\x92\x8e\x1c\xbe\x1e\xb5\xdb\xde\x94\x1c\xb0\xbd\x97\xdeA\xf0R\xf52\x18\xf9\x8e\xef\xc9a\x18\x8eV\xab@\xb3\xfdj\xb4y\xde\xce\x14b\xb8l\xe9\xab\x01\xeb\x02!\x87\x81\xd2\x0c\xec\xb3\xc6\xff\x84\xa6C\x9b\x92\x18m\x07%\xb1\x15\xdcG\xf4\xb9\x16\x98[\x9e' -8\x0f\x96\x9f\x9a\x80u\xf6\xc1\x9e\x16\xa1\xe5QP\xd6\x9f\xfa\xe4\xa0\xf0\xce\xf1\xf3!!\xc1S\x0b\\\xd8\x1c\xd8\xf0\"\xbd\xe0d\xa4\xf90L\x89\xc8;\x98\x91\x18'\xe0\x7f\xcfD\xc1\x94$\xe8\xcb#\xda\x97\xbe\x8f\xe4\xcf{ _)\xa9vl\xae\xea\xe5!\x83\x10.S\x0e+ \xbd\xfd\xfdv\x82\x10NHrtt\xb0\xca\x8aa\x8a|\x98\xb2\x8cR\x03\xd6\xee\x9c\xd0\x9f\xf7^\x1e\xa0\xc1\x8f\xb7\x12\x81\x0fb^)\x19\xd4K\xf6 \x01EaO\x07q)\xbf\xec\xe9\xac\xe9 \x05\xb7\xbf\xe6\xc7\x1b\xa3H/\x941\x8a\xc6O\xe8\xad\xd3v;-\x1d\xf9\xb3-L\x94\xad\x81\x80\xb3@}i\xab\x9c\x85\x06\xe0\xef\x16\xc0O}\x92\x0dE\x1e\xf0\x05\x17\xaf\xbd\xca\xebA\xf9v\xb0\xdb\x16#\xb5\x1d{\xc2\x84\x11\x92\xa3\x0d\x90\xef\xa2\xc1?[s\xa4\xbdH\x94\xc5\x83J\xfe=\xeb\xcd\x04'2\xa5\xf7F\xfa2\x17\xb7F\xd5\xab\xe4\xde\xab\xe4.\x8b\xe1\xf4\x99\x04&\xe7D\x9er\xb9\x1eo\xe7\x97\x9fC0\x85}\x1eT\x9eO=\x93b\x04\xfd\xdaF\xacd\xa01a9\x1a`N\xc6\xb9\x1a_\x1e\xf1\xbe\xf4Ih\\Z\x8c\x87R{;\xc3\x1b\xde\x1a\x81\x03\x00^?\xad\xd9nS'\xe6\x0exd\x14&\x83\xdaT\xc1\xb6\xb9\xa6\x86S\xe4)\xab\xe8eA\xa7\x94\x14\xcb\x98ZU'z%QT^8{\xf6\x91\xd8\x8f\x9d\xd05M\xe8\x8fL\xd7\x82\xc6i\xf6\xaf\x99/\x1d\xdf\x88\x99H/\xa5s\xef\xdc\x8aW\x0b\x80\xbc\xf4\x03[\x9b\xc0LM`\xd3\xdc\x89\xcd\xb9\x8b\xa7\x9e\x82~\xcd9jZ\x98\x0c\x959\xe9P\x8e\xc80\x86 w\xf03\x1a=9)\x9b\x03\x1d\x8e\xac\x81\xea\xd0Uz\xa0\xb15PZ\x1b(\xdd\x18hJTw\xca93\xbd\xc61tR\xe8N\n\xe8d\x11\xaf\xec\x8fbCuy?\x07'2&7Ot\x7f\x14!\xf25\xab\x16\x18\xb7\x16\x18\xc7\x12\x15\xf1\x15\xf9P\x8e\xac\xcd\xfc\x87\xd7\xca\xbf\xfe\xf8\xf8\xb7l\xa7\x0c\x00\xf7$\xdb\x93\xf7iK\x9f\xd1\xc3\x13\x9b\xa4\x8e\xf2S?\xde\xdd\xa8\xfe_oD\xf0[\xb6\x93\xb2kv\xf7q\xaf\xc1\xba\xb4p\xddcR\xe7\x90\x1a_s\x91\xb274\xcb\x93c\x17a\xf9LT,\xe4\x99\xdeA\x80JI\xa6)\xbc\xe2m\xcc'\xe2\x16\xa0\xab\x1f\xbb,[\xa4\xf1\x9c\"K\xeey\x8e\xb4\xf2[\xb6\x93w\xec\x9f\xc7k\xd5o\x03B\x0fb0!\x17s\x92\xc7\x97\x92\xf8!\xa5\xfc\x9aE\xad`\x9ds\xeb\xee\xa7T\\\xa7t\xee\x82\x01\xa4\x1aT\xbb\xad\x8d!\xaf\xc4\xe4\xbe0\x19sO\xef\xd4te\xb1\xe0_$\x95:j{\x91m\x18\x8cLQ\xcf=ISq\x9b\x07\x82*KU3\xb3\"\x1d\xca\xadV\xee\x0f\x96\xb0f\xa5X;OHO\x16HD\x01\x12n\x83D\x9f \xaa\xb5\x9a\x03\x056p\xddC\x88,`\x03e\xb5j\x04J\x91-\x07\xcaj\xb5\x15&\x95\xbc\xb5\x11\xb6\xdbM0y\xac\xc4\xa6\xe2\xe6\x1d\x8d\x136q\xa4(\xb47\x05\x8a\x15\xd2Zcu\x0b\x9a\xd2y\xb6\xed\\\xd1Xqs:gF7\xdeX \xc0\n\xa0\x8b\xdd_\x121\xfe^\xc1\x9c\xedE\xd4X\x06j\x14\xf9\xf8\xbd\x18\xf3\xfcR\xc00\x18\xf9!\x96\xc3p\x04&\xde\xb5l\xae\x19\x94\xeb\xdb\x05 ;z.\x19\xcb\xab\xfbc\x84\xac\xa0Xe\xf4\xb7:\xf1\xd1\x96\xbc\xc56Z\x06\xb4+'\xf0\x8d\xbeZ4\x8d\xc1\x90x\xb2L\x98\xf3\xc2\xd0\x97\x17.2\xc6\xc9iw,&\x8c\xb8\x1f\xce\xdf~{\x7fz\xf9\xf1\xfc\xeb\xe5\xbb\xf3o\x1f\xdf\xba8\xb5\xacAd=\xe2g\xf9\xc9\xde\xf3\x9f\x91\xab \xd3;\xde\xcf\x03\xe4\xfd\xec\x0d\x7f\x9bd#\x84v\xae1\x7f\xcc\xc5~\x11\xae\x02\x87\x96qxa&\xcf,\xe5\x86\xc4\xd5\xd8\xcbe\x1cR\xc2\xbb\xfa\x94\x06\xe5\xe1\xf4\x85Q\xd1gn\x14\x13\xd7\xf5cmu\xaau\xef\x13\x95\xa8\x15\xfd^\x8c\xec/\xbf\xa9/\x10\x9fP\x07\xe4\x8b\xa7\xf7^\\\\\x7f\x94\x03\x8f\x17\x07B1\xc2\x0cE\xf1\x1a.\x06Z\x1d\x06\xaf!>71X\x1d0&p\xfd\xca@v~~\xe8\xe1\xdez\xe7\x1a\xbb?\xbbO\x1bGo\x847T\xfb|\xd7\x93wr5\x93s\xf5/Y\xcd'\xab\xbby\xb2\xfa-[\xcdc\xbe\x9a\xd3\xc5j\x9ce\xabL\xfdI\x98z\xba\xb9F?\xed\xc4\x9b\x01\x11w7\x02\"2>\x16\x93\x98_G\xeeRN\x0f\xdd2@\xe2&&o\xc6-\xd4\x11\x0fW++\xe4\xa1N\x02\xeb\x97\xdc\x8cc\x99&j\xe1m\xd4\xaa\xa8ls\x8d\xa8X:\x10Q1\x9ez\x0d-T\xf2\x94k\x0c,m\xf3Q\xa1\xfe\x06AT\xb9\x9d8\x83\xcbV\x92\xddI\xf7\x8f\xc4Z\xdc2Y\xbf-\xd8\xf5\xea\xb7\xc5\xf5\xea:\x9e\xae\x16\xfczu5_\xac\xe2\xb1h\x9e\x94\xbd\xedQ*\x1b\xc8\xc9&$\x9e\x01\xea\xade\x07\xfa\x17\x88\xa8\xcc\x13\xff\x00@r6\xbew\xa0\x8f\x8d\xbc\xdd\xc0\x04\xd0\xdbo\x88\xcf\x19\x060\xd6\xcf\x8cN\x9a\xba\x1bw\xe3\xec]\x9c\xb0/\xf7\x99d\xf3OT\xce\x8a!\xa6[\x8a\xf0\xc6 \x9d\xc55\x13\n\xec\x11\x85\x88\x9c\xcd5k\x9eB\xa2\x07\xee\x89\xee2\x8d=\x89\xdd\x0f411i\xbe}>\x8b\x9c\x9f3\x17\xeb\xdch\x0d\\\"\xc4MV\xd5y\xb4B\xb4R\xf4\xc0\x06\xdc\x13\x1e\xc3/\x00\xfb\x1c\xb1`<\xe6\xd7\xce4N\x98\xe3\xfe\x9c\xb9/0E(\x92^\nA?\x0b\x86\xe6\x19\x85\xd6:Jh\x8dV?\x1f_\xcb\xd8\xaf\xdc{\x9dO\xd2\xab\xd7:\xca\xa1\x9a\xb5l\xdb\xac\xf5\x82\x00\xcf\x18\x9d\xb04\x03se,\xe39\x13K\x19\xed\xb3]\xac\xb6\xd7\x94\x8de\x16\xed\xe3\xdbX\xce\xde\xa4\x0c\xdc7\xd0$\x8bZ\xe1c\xb3\x9du\xe3\xecW)\x17\xdb\xe7X/0\x13\x1f\xd2d+\x8c\xf8\xbbW\xa9\xb8\xcdX\xdan\xb7\xb8\xde|\xc6BI \xe5KQ2\x11\xda\x97sw\x96\xb2)*\xbe\xa3\x02v\x0e\x84\xff\xc1\xc9\x13h5\xc6K\xf4 \x8bj%\xc2^B\x92\xd5j8B\x9aA\x92\xba\x85\xda\x1c=Z'\xc7T\x0f4#\x9e;\x93r\x91\x81\xc9\x1d+z9\x88#\x81\xba\xd7Lz\x0f3\x91I\xc5\x81E\xac\x9b?b5Sp\xeb-\x95xA\xe5L=S9\xc3t \xcf\xea\x07\xe7UEe\xad\xc5\x84\xca\xaey\x82+m\xf5\x19\x94\xddZ\xca\x1a\xf5\xcb{H\x05\x15\xcf\xf2\xd31\xb1\x94\xed\xb6\xfd\xe6\xc9\xae\xc1\x16\x84\xb3\xae\xe0\x9ek^]k\xe5\xa0\x87\xacK\xafD*=\xe0-u>}\xe8\x88\xa9~\x1f3\xcfMY\xb6\x10\xff\xec\xfc\xe8\xad\x05\x8e\x15\xab\x9f\xfaK2\xedf\xf15\xa7 ffI\xd6\xb2\x90)n \xbd&\xd8\x9abe\xecO\xe0\xf8\xc1^\xd9\xa9\xcdh\xdak\x9au\xd9<\x96^\xbdj\xb4\xad\x1b\xed\xf6\x96\x0f%[\x8a\xeb\xbdAh\x9djZ\xe8\x19\x04V\xf2 ~\xd0H\x19\xe5i\xfa\xb5`\xb7\x13\xacp!\xcaV+\xad\x04\xc4\n\xc8\x91;\x16i\xe6\xe2\xb1\xc5y\xf3:\xe7=pc>N\x96\x13\xe6FnF\xe7\xac#\xd2\xf8:\xe6.\xd6\x10\x8e\x96\xeb\x0d\x06\x14x^=\xae\xcf\x86w&j\x8b\xbc\x1c\x0b\xce\xd9X\x8f\xab\xb6\x99\x8e\x13F\xd3\x1c\xa6\x15p\x03\xf4\x8a\xc5\xbbZ\xe5@6\xac\xb2\x04\xe2 [\x95\xc2\x88\x89\xc2\xa0\xbb\x99Vm\xa6\xdd\xff\xfc\xf0^\xc9z\x9f5\x08A*\x9ft\x95\xa0\xeb\xd5\x00e\xc3\xb2\x15X\xf2\xb9Y\x88\x006\xd1\xe5\xecN~\x8d\xc7\xdf\x1b\xa7\xbd\xd2\xa3BlP[\xa9\xc2.E0&];5Gv\xcb`\\\xdf\xf3\xa9MAY\xba\xf6\x81\xb4Z\x1b\xf3\x85\xb0\xde\x93\xca\xb5\xd4n\xbb\xf5\xad\xdd\xd48\xd9\xd8\xf3=(\xbc\xb3Hh\xcc\xfb\xe0\x13(c\x92\xdcu\x96\x19K;\xf9\x89\x14\xda\xb2x\xbcI.tm\xac!<\xe9\n\x9e\x7f|\xc6\x8aY#\x9c4\x13\x93\x89Z|f>\x0d\xfb\xc5 \x8e\xf20\xcc\x05\xa9\xcb\x1c\xc8&rLWp\xe0I\x15+\xcf\xc63\xca\xaf\x99\xdd\x07\xa3\xdc\x9dX\x8c\xab\xd6\xf3:\x8b\xee\xfb\xf3\x93\xb7g\x1f\xff\x14\x99\xd7\xb7\xe7\x1fOa\x89\xf1\xff\xfc\xf53\x9c\xdc\xb0,\xf3\xd0z\x8d\xb72\x1d\xf6\xa3AU\xa5-\x9b%\xeb\x999\xc9\xb5By\xa0\x87<\xce\x804\x07j\xedv\x0b\xbc\xb8\x8bT~\x19\xa7\xf1Bf9'\xd3\xd2\x91\x9f\x04\x9f\xeb\x9c\xa5\xe1r\x91TY\xe1\xa4\x15\xaeq\xa5n\xcfu\xb1\xfb\xd2\xd5G\xcdy\x11\x8e\xe5z\xed\xa1\x01\xeb\x9a\\of\x94s\x96\x0c\x0cF\x95\xc4\x9eI\xc4p\xcd\xc3\xfe\xb2k\x7f\xc1|\xd8+>\x9b\xc3\xe3Hjf\xceX#c\x8e\xd6k\xb52\xa61\xa7Ir\xff\xa0@\x02\xb4|\xad\xfe\xf3\xac]\x8b\xd8\xbb\xd6\xa0\xbc\x13\x04RR\xc4\"\x95\x8c6\xf6\x9fF\x01\xbdf\xff`\xc9\xd7\x85\xa2\x12|\xf4\x82UG\xf2E\x8a\x94^\x97w\x1f\x1a\xd4\x93\xfaD\xb1\x9a_MME\xbf\xc9\xdb\xed\xc2\xa7\xa19\x92\xe35\xb76\xeb&S #\xe4s\xcf\xe5\xe2-[\xa4L[\x9a\xb8\xa5m\xaaQ(\x14\x97\xc3\x9c\xea\x96\xd2J\xf3\n@-P\xad\xa3~T/Q_eL\xe9\x98U2\x0e\x94l \x12\xd6\x85O\x9eDQ\x9epKS\x05D\x9cZ>\xe0\x0c\xcb\xae\xe7\xa1d\x7f7\x0cU\x1a\x19\x84\n\x0bPB$.\xf4&\xe1\xde\x9eu\x89OSu\x8f{{\x87\xa8\xee\xd9\x10\x94#\xaa-[?\x12#T\xe1\xd9\x19\xea\xa7\xb6~\x0e\xad\x95\xcc4ci,3c\x07S&x1NQ\x85\x9d\xbe\xd4Z$\x91\xce7T\x86\x1cn\xce\xa8\x1a7GY\x0c\xa6\xd0(5\xe9~\xf4\x18*\xea\x9do1\x97\x87@\xc9\n\x01\x98u\xaf\xee%;\x9fN3\x06\x8c\xa8z{\xaf\xa5w\xf8\xa8\x1d!\x97\xa9\xa5U\xb3\xfeT\xf5\x85n\x99I\xdb.\x94\xeb\x85\xcc~a\xb7\x8d\xed\x17\xdf\xee\x07\x84B\xad\\u\xd7>7J\xda\\\x0e\xabpKo\x82\x19k\xb9Y\x90\xa0/\x8e8\xb8\x0d\x94C1\x02\x7f\x81\x96]\xa6v\x06\xb1ayrb\x90O\xc7\xbe\xb8b\x0eut\x17\xdc\xfa\xa4l\xb9\xa8\x90\xf7\x92).\xd3\xdc\xb1\xafm p\xe5\xdeLh\xb9a\xc8Q\xb1\xfb\x08}\x81\xba\x90\xad \xc6\xb9\xea?I\x87bT\xdc\x05`Z\xf5\xca\x9f\xba\x9e\xba\xbd\xdf\x0fa\x10D\xee\x1b\x13 \xca\xc5a\x10F\xee\x17 \xf51\xbfv>\x19;\xccL}\xe9E\xee'\xcd\xb2\x82\xe2\xb3\xa7J\x9e\xffY=\x84\x91\xfb\x06\x16\xd5D\xbd\xf5\"\xf7\x04\xf4\xbe\xfau7r?\n\xde1fV\x12| 9g\\\xe1\xbf1\xb9\xea\x05{*\x8f\xf3\xc6Df\xc0\xbd`?r?\xb3\x8cI;\xed r?\xd1T\xc64\xb1S_E\xee\x87e\"\xe3\xce\x178\"RI\x87\x91{\x92\x00\xeb\xe5|fj\x9c\xd0\x91\xdeA\xe4\x9e}p\xbee\xeamWu\x1e\xca-\x12\xe6\xbc\x99\x89x\xcc2\x95\x1cF\xee\x07q\xc3&\xce'\x96\xce)g\\&\xf7*\xbd\x17\xb9\xef\xc4\x92C\xd1\xdd\xc8\xfd\xc2\x98s.g,U\xef\xd0{\xe9|\x10\x13\x08\x07\xa7\x92\xf6#\xf7[\xc6\x14\xfc\xee\xa0\xf8\xab\xc8\xfd\xca\x14_NS\xd5)mG\xa8>\x1cFn\xd1\x92\xf5aO\xf5\xef\x17:q\xcc\xd1\xa5J #\xf7\x1b\xa7\xc6ZM5\xb3\x07SB\xef\xe7\xba\xec\xef\xcb8\xd5\xc9\xbb\xaa\xb3\xe9U<\x990\xae\xdeM\x07\xcd\x00\xf6T\xef>\x80>\xddQ\xc9':N\xbf\xfap\xa03\x9e\x14\xc1\x8fT\xe2+\x98\xf7\xbb{GM!\xe326F\x8fv\x8b\x87j\xbe\xa0\xa7N~(\x8b\xf7\x82\xd7\x80Z\xd3$\x86!\x85A\xe4\xfeIpUg\x18F\xae^\xe7v-!`\x18\x1b\x0b>\x017\xea\x8e\xbe%\xa6\xbe\xec\xc2@\x13A'\xceW!\x9c\xf7\x14\xfc\xc7\xec\x85{\x91\xfb\xed\xf3\x99N\x13\n+\xf7B\x05z\x9e-\x17z\xe2\x9d\x0f\x8a\x8d\x02\xad\xb6\xfax\x10\xb9\x9f\x15#\x0e\x03\xffBe\x9cMc3\xce\xf0U\xe4\x9e\xc2\xf1\x00\xad5~\x18\xb9g/\xe6\x0eu$\xa3\x0b\xa1\x86\xd2Sh\x12gz\xb6\x98=K\xbd\x9ej\xde\x88v\x10>\xea\x94\xcbX\xde\xabO\xbb\x91\xfb^\x8c\xbfC\xa5\xbd\xbd(\xbf\x04\xf7\x96)\x9e\x9f\xf11d\x82\xee\x83E;\x9b8o\xca\xb8\xe0xO!\xf07}\xd8`C\xadwX\x83\x9a\xfd\xedu\xe4*\xd8|\xa0\xfc>\xefd\xe6\xe2\xbd\xdd\xb0\x9c/}\x8a\xe4\xbc\x8bY2\xc9*\xd0\xdd\xd7\x18wC\xe3\x04F\xf2N\xa4\xce{vM\x13\xe73\xa3\x99\xe0\x99\x8b\xf7\x15\x9e\x82\xf6\x89\xd3\xc4\xf9\xc2\xd2\x1b\x96jJ\xaa\xbe\x85\x1a\x9d\xce\xe6\x0b-B\xa9>\xed+\xa4U\x98\xfd'*\xd9-\xbdW)\xb0\xa0\xd2\x9bx\xcc\x1c\xab=\xf5e/rM\xbe\x12\xaf\xf6\x15\xfe\x82M\xee_t\x10(=\x99\xf9\x8c\xab\x0c\x07\x91\xfb\x17\x9a\xc6\x94+\xec\xce\x84\xf3\x91]\x0b\xa9\xb8i\xe8\xf2+\xd5\xe5l9\x9d\xc6\xe3X-\x1d\xc3\x80\xa9O\x87j\x8a\xc4\xc2y\xcb\xa4\x8e\xab\x82\xf7\x15\x16\xffB\xf9D\x07\xef~\x1f\xcfc\xe9\x9c\xde\x8d\x19\x9b\xc0g\x85\xd5\xaa\xfdS\x089\xa1\x93\xd4\xb8\x99\xbc\x15\xe9\xf7\xadk\xe6\x91\x0d\xfeu\xa0\xef\xa8\x84p\xfd\xa1\xa0\xd5\xc5\xe6`\xbck\xa4\xf5\xd8\x94\x14\x82\xfd\x0f\xa9\xda$\xe8\xc8\xe2l2o\xdb\xb5&\x10\x83D~s\x01\xce\x87s\xd3{8\xa6\xce_Hn\xf3\x8fp\xfe\xd4\xb2\xad\xff7\xb8\xc2\x17\xf9\xce\xa1\xc3\x9f\xe5\xf9\xfc\x17.\xdcp*\x96g\xd79\xcd#\x97\xe4\x15\xbf(\xc3~\xae\xe3\xdc.\xa4\xc6\xde\xe6\x19H\x06W\xcb\xf3\\\xd5CSPz^o\xc4\xd6\xa8\x97\xbdf\x1b\xe5\x9ey\x1c\xb7k&\xea\xc0\xbaLT\x00\x9d\xe6z\xd2q\x9c\x8e\x97 U\xec\xb6\xd1\x91\xfe\x94\xb2)\xd8#\xeb\xd7T\x08\xf9\xd3g\xa6}\xa2\xad\xedY+M6+\xa6\xc69\x80\xac\xda$\x16\x80~\x80\xa3R6\x89$\x9e0\xfd\xe4N\xe3D\x9b\x13\x0feY\xcf\xa0\xe1\xf6\x93\xc4\xad\x00E\x12.\x15\x95L\x0b\xc5\xd4>9\xa4r\xd6t\x074\xf3,h[2E\xc9\x02n\xb3\xa2d]\xd3S\xd5l\xa5-0dlj\xccn\x8a\xab\xa6\x1b\x1a\x84;\x0f\xcb\xb1}\xad\x064\x98y\xabC\x9e\xb7;\"r\xc8\xbb\x06p\xc6|\x12\xb35\xc2\x0f\xebZ\x87\xa4\xf8\x8f/\xe7\x1f\xc9f\x1f+\xb9\xd8]\x9cm\x88\x88pG\xcc:\xcb\xb9,\xe2\x12b \xf1i\x9b\xee\xb1\xdb\xb5n]Z\x9b\xd5\xe9NU\x8bg\xcdQoH\\\xde\x97\xa8,\x0f}a\x88AXQ\xb8\x19\xbb\xf8\x95f3\x8f\x17Gl\x1a\xfc\x8a\xc9\x07\x0f\xe0\x86&\xa5\x9e\xb9\xaf\xa6kU\\\xad\xca\xe7,\x04\xc4\x05\x83\x9bk]\xe7\x82\xab_\xa0M\x10\x1c\xa9\xfb\x023,P\x9f\xaan\x82w\x95j\xe7/\xe9d\xd2\x80\x06\xff/y\x7f\xc2\x9d\xb8\xb14\x8e\xc3_\x05k&\x1e\xc9\x08\xb0'yr\x13lY\xc3\xd8\x9a\x19\x9e`\xf0\x05<\x93\xb9\x92\xec\x08\xd4\x802B\"\x92\xf0\x12\x17\xf9\xec\xef\xa9\xea\xd6\xc6b;\xb9\xef\xef\xfc\xb7sl$\xb5Z\xbdVW\xd7\xd6U\xc5\x861\xe4F\xc8\xa9B\x0e\x00\xd8\x05-Q\x83:G\x01\x84q\x8amO\xec4vP\x8e\x15\xca\x8f\x00\x81\x1a\xac\xb5E\x8c\xd7\xff\xfdGS\x8c\x83\x93\xb5)P\x13dv\xcb\xdd\x992\xde\xf1\xe2\xf0\xb2g;r\xbcm\x06J\xca\xcal\x8c\x9f\xc3\xef\x19\n\x8e\xf8\xeb\xfcL\"y6\xdb\xce\xfb\x86)\xbb\x1b\nQ\x06S\xcd@\x8dl\xe58\x97\xa8\x84E\xb6\x9c;%\xc9\xbf\xe2\x0eS\xf9\xe9\xc1m\x9bu^\x01\xb9\x9f\xa0\x10WH\xfd`\xe6\xf26\x10\xa6\xf2\x8a\x1aw\x0d\x91\x19\xf6\xe7\x1fe,d\xb8J\xea\xce\x9a~M\xbc*\xef9\x9b\xbbC\xb6\xe0%\xae\xef(\xd0\x158\xc8\x8a\xb2kK\xa0\xf7<\x8eV\xa2\x8a\xbc+5\x115l\x08E2\xac\xbc\xd1\x82\x1c7\xed\x89\xa9RDQ1\x99\x9fmC\xed[\xadDY\x9d(nM\\\x01\x84\x07\xde\x8b\xd6\xaf7\x83\xd6\x07\xe3\xa6\xdd\x1d\x1a\x1f\x8d>7\xa1\xc3\xc2ey;U\xc1\x0b\xa8%\xfc*Z\x13-\x83\x8d^\x11@\x91\xcb\xab\xc3\x0c?l=z\x19\xab~A\xe08\x16\":\x19\x81\xd1\xa9V\xedL6\xe5\xcb\x9e\x92\xb9Y\x89\xb5H\x0e v\x97\xcaq\xbc\xbf\xbf\xf54$R\xa6:\xbf\xc8\x0bu\xa243%^\xbc\xbf\xbf\xc8M?\x99\xf28\x91\x99\xb2\xcai\x93\xa5\x90#\xe8\x98\xde\\\x90@6}\xb7 E\x85\xfc\xb8\xf0\x97S/h\x86*\x8f\xa9\xd8d\xabB\xa6 \x91\xa4\x1aS\xc7\xb2\xb2\x1a\xf3\x13-/\xa4\xba\x8e\xbe\xdfn\xf5T\xf4F\xa9z[\xce\x7f\xca\xec)\x1f\x10LQ\x8a~\xc8\x91\x94\xa6\xc8\xa1\x0bYQ\x8e7)g\xf3\xd0\xd6)\x06\xc5\xa1\xadn\x81\xff\xb7\xb6.\x07\x1a3\x8fl\x15'\xea\xad\xad4\xe5@X8P\xca\x91\xad(M\x99\xa2\x99\x07\xbc\x14\x91z\\B\x12\x11\x80\x1c\x8aC\xa3a\xe6\xc8\xf2\x91\x8e\xd0&\xaa\x08o\x17\xa8\xe1\x02{\x1a7C5\xd34x\xeb\xa7\xb0w\xfb\xb6\x12d\xec\xcfG\x9c\x8c=\xfaA\x1c\xe8+\xd1\xb3\xb1\xc0\x85\x1e\x1ff'\x0fiQ!\x93\xf1\xf5!\xd8\xdf'\xf1\x1d\xb2E\xc8\x1b\"\xaa\x96\x99\xa2;\xc2\x1bfV\x9a\xd2\\\xc73\x1b\x0bt\x9c\x1e\xef\x08\xf9\xa9\xceD\x1d+\xeaBc\xe6\xd8>\xde\xa8cQ\xa8c\xa1.E\x1d\x8e\xe6\xa4\x07]\xe2<\x99(W'\x87J\x7f\x1d\xdf;\x85\xb3\x9b\x8c6mE\xf55\xa7\xb0\xc7d\xbb\x9a\xcc\xb4 \xddb|[\xd1\xc5B.D{&\x1aHizrHU\xac\x1f\x83(\x10\xaeL\xf5\xab\xd2+\x89\xb2\xa5\x83\x9c\x96\xc7)\xf82A\\FE\\\x15!\xea%\x94\x8f\x83\xa3\xac\x95\x93\xb6+\xc7\x19H\xb7\xb2:\x87)\xd1\xdb\xf5}\x96Z%^\xa9\xc9\xd6\xb6\x05\x1b\x0e\x90\nU\xe2D\x13&\xf9\x87\xa0\xb9\xc6a \x18J\x1dKg\x87|\x84\xbfh\x9d5i\xc3\x9el\x81\xcf\x89\x80O!\xfc\"\xd0\x99(z\xbcQf <'\xca\x13\xc8_\"\xcd\x13\xc9`b\xe2n\xf4\xdaQs=1\xd1\x8f\x9a\x19\x9aI2\xab\xaa'\xcfS \xb0\x0f\x90\\s\xd3'\x0f\x9ff\xda\x84\xd4Fk\x1d\x99aG&*S\x03\xd5\xcd;\xe2PRRHB\xf8_m\xac\xf0\xf8\x99\xf1T\xdd\x021\x16\xa8\x13\xb1.f\xda2'\xfa]u\xa1\xa8\xf3L\xb4\x10\xa7\x1c\xa7:-Qh3\x82*E}\xd0\x88S/\xa5\xddj\xd3=\x8d\xca,Qz#-]\xf2\x81\x9b\xcd\xdb\xb1_\xd5fH\xe7\xf0P\xc4a\xc0\x8f\x12\xdfo\xec\xba\xa9\x0c%\xc2]\xf7$\x8f]\x96\xca\xe3\x11 G6?\xbf\xbep\"\x16$<\xceN\x88\xf3\x8ftWF\x84\xadV\xf2\x98\xa4\x05\x98\xf9^l\xca\xf3\x93\xfb\xba\xcb\x16\xc9\x0c\xc0?\xb9/5(\xdd\xa7\x8f\xd7\xccqo\xc5\xe1\xc2,\x1a\x05nn\xf1\x82T%\x81z\xa4`5\xf7\xcaJx\x11~\xc4\xb1nNT\xde\xb6&S\xbf\xb1\x87&w\xa9\xf0!\n\xe7\xfd0L\x9a\xb1JMh\xceU\xe4\xb3\x9bSu\xe6\xc4\xb3\xe6\x838\xb99\x13\xecd*\x96h\xce2 \x85\xca\xc4\xa86Gj\x8a6\x9a\xb7j\xb1\x17M\x7f\xa5\xa8\x8e\x9c\x16B\xda*>a\x086\xd5\xa3\x14\xb0v\xe1&\xde[\xd3>\xa6\x13\xeb\x1c\xd7HO!\x1b\xfc?T\x83\x02\xd2Q\xb7\xed\xf8\xde\xf1v\xb2\x8c\x0cdp\x18H~\x817J\x91\x9cd'<\x91B\x83\x1cSf\x1c,\xca\x8c7yf|:\xe1\x89\x85\xcc\xe9\xc8\xd1\x07\xe9C\xfeQ\x9aR\xf8\"\x1db\xfa\"}\xc8\xbfHS\xf4\xa3fM|Q\x1c\xfeT\n\x93CU\xf6e1\xb5V\xce\xc4\xcb!\xa0\xa0\x02\xe8\xae\xe0\xa8\x08\x1fk\"\xf98\x85\xc7\"H\xd5}'N\xdai\xe4\x92F\x11\xa5)j\xa4%/\xce\x9cQ\xba{\x9a\x16\xe9Q-h\xaeW\x94\"\xc6-\xa9\x9c\xf8\xdeA\xbf\xa7\xf0\xaa\xf3y\xe5\xab\x96O\x1b9\x8f\xe6\xf0C?\x9a\xd7,f\xe2\xfaP\xcc\x983JU\xa9!)\xa5o2\xac\x9bIK\xf9'\xa9;\xad\x00!U\xe14\x1d/\x9dt\x91\x98\x87\x84\xb8\xc5\xfe\x08`\xa6T\\\xc6&C\xecbkQ\xdde\xfc\xe8A@zR\xcc\xa4\xa6t\x83\x9a\x83\x13Y\x1c\xe6M+\x17N\xd1\xc5\x8b/\xb1 \xdc\xf9\xc3\x0b\x15\x98/\xdd\x9c\x8f\x84\x98\xfa\x87\x7f\xf1\xcd\xf9\x07\xe1\xa5\xe7Hx\xe9\xf9\xf1\x88\xbb\x81\xc0\xeb\x18\xafo\x95\xfa\xef\x8b$R\x97\xb8\xa3\x7f\xaf\xd4#6^F1S\x17\xf8\xf2{\xa5>\xf6\xc3\x80\xa9\x13\xdc\xe7\x7f\xfa\x97R\x1c\x0c\xd5\xc5O\xde*u/\xee\xb3\x89:\xa3j\x7f*\xd0\x02\xf3\x94rC\xda?G\xf31\x85\x91\xe0\x90\xd1G\xca,\xa8F\\\xe2\x18\x93\x97\x10\xcd\x11\xb3\x19*\xeaD{\\\xa9s\xed\xe8x~\xac\xcc\xb5C\x15y\x9cG\x8f\xceI&\x0f\\\x1f\xe0\x85As\xefpU\xf2\xa6D\xd4\xa27\x91]\x12\xe6)\x9e\x90\x8e\xc6\x89\x13%\xf1\x17/\x99\xc9\x04\x18\xdeD\x9e\x98\xf8\xc6\x06`\xf5\xd7\x13\xef\x9e\xb9|\xd3\xc8\x9f8\x91+\xc7\x08}U\x91[IO{6^5$Ex5i\xe0JJ\x81'\xaa/\x08z\xf8\xd6\xb0T\xa5\xfb\xda\xdc\x8bB\xa9\x89\xdf\xab\xbclj\xb5W\xbfe\xd1(\x8c\xd9\xe9\xd1\xfe~\xc9\x18C\xea\x13\x14{\xc1\x94\\\x9bH\xeaRQ\xe7\xd5\xea*?';\xd5\x16\xf2\x18\x89`3\xb0yx\x8c\xdd\xa5\xc9{G\x9a\xa6M\xf5Y}\x1c\xfa\xe12\xaaG\xccmf\x0f\xd3\x88\xb1@\xa9J\x1f\"gJ\x8aK\"\x19\x96 \xe9\xb8\xa8\xc9Y\xd6 \x8c\xe6\x8e\xaf\xa8\xbc<\xee\xcfz\xa3\xd7\xd8\xaf\x89\x938>\x1f\xbf\x87\xa2\x93\xc2\xac\x0e\x92Q\xe5\x15U&\\\xf3&U\xa9?$\xa1!\x0b\x0d$S\x85\xa4\xeb\xe18KI \xd7\x07\x85\x8fHe^\xad\xaa\x1b-\x99\xaab\xca\xc8\x85g\x92\xa3\x06\xa9\xf1\xdd\xdb\x1f\"6\x91TIR\xb2\xd0:~\xae$\x98[\x99l\x01dEe9]=-\xb2e\\\x86\x15\x03\xe4\xf7k\x87LX\xa6\xe8\x0b(\xb2W\x96\xef88\x89\x8a\xf6\x86\x8fL\x93\x0f\xd5\x08\x07\x9fj\xc8\xadB\xb2\xaa\x1f\xca\x0cm\x9c\xe1\xbb@\x98\x80Rd\x19q\x9fb\x1a\xcb*\"\x9a\x0c\xffH\xca\xf1\x92\xcbC\x00\xc4\x8d\xf0\xd7#I\xaa\xabeq\xcc^I\xca\xb1\x9b*\x98\x8e(\x84\x8d\xf4J\xaa\xba\xe6\x91\xad&\x9aKG\xd6\x97\xda\xb2\x80\xca\xb0\x94\x99\xfa\xa0\xde\xaa#\xf5^\xbd\xcb\x1a\x99(\xea7M\x9eiw\xd9RQ\x1f\xb48\x7f\x98\xed\xef\xcf\xd2\x8a\xde\xea\xb3\xe6\xc3\xfe\xfeC\xfe\xfc\xc0\xf5LM\x1e\x11\xe8V\x13O\x9a\xa6}\xd3s\xfee\xa9/\x11\xdd6%IM\x94\xa6\xb3=]\x0d\xeacg\xe17\xd9\xd0\xc6\xb2\xa1N(\xfc\x91\x81x-\x10x\x8d\xcf\xddM\xd9\xfb\xea\x18Ao'Z\xbb\xadN8V\x0b\xd6\xb0\xda\xcdq\xb0\x8e\xd5n2\xc01\xb4\xa9lhs\xd9P{j\xa2N\xd4[5P\xf0/\x92\x17\xb2\xa1\xf0\xc7u\xf1\x81A\x86Z;\xc7\xe4\xa31\xe4\x03\xa2\x06\xf5\x99\x13\xb8>\x8b\xe2\xfd\xfd\xfc\xde\xfc\x96\x07c*&\xcaKj\xc1\xa6\xb7\xb2\x82O\xc5\xd2X2\x95iS\xda\x82\x0b\x93\xa515\x92\x19o8\xdb\xe1\xec\xb6\xd4\x97\n\x83B\xcdO ]\xf5Q\xc8\x19\xa5q\x181I]D,I\x1e\xa8\xf2\x98;\xecF\xa2g\x0d\xb6\xc3\xe24,p\x1c3@g\xdaXf\x02\xd0\xd9&\xa0{Z\xa9o\xf30a\xff\x00\xd0\xbdM@\xf7\x94\x15\xc1\x88\x86\xc4bX\x84p!\xb1\xf2\xb8\xd9\xeb\x0eP\xf0\x145\xaf\x05`/m\xf5S\xf5\x89!\x7f\x16\x08\x9f\xa8\x96\x95\x00\xfaq\xf5T#\xd8f#\xf8\xa1\x11!\xa2\x1ci\xb7\xea\xbd\x16d~h\x01\x84{\xdd\xed\x9a\x07\xda\xb6\xc2\xdc\x8d(b\xe7\x82q\x00\xee*\x81\x9e\xc8\x81\xd2d\xc2S\xa8\xf2\xff\x04\x98\xc2\xbe\xfc\x7f\x1c\xa2\xfe \x0ceD\xc5\xad\xfc\"\xc7\xb6[q\xf6\xee\xecY\xf1\x91\x9cdLUb\x06\xf6\xfe\xbeKWU\xc29\x93\xb2\x19\xc54\xe2q\x05\xf9\xbe\xceq 5\x05\x8f\x8a\xb1\x17\x9a\x9e\x9d\x12AE\x89n\xa8\xd4'^\xe0\xca\x1b\x84\xa2hq\xa9\\\n\xf9@\xfe\xfab\xe2\xc1wlzdgYY\x84 \xf7\xb1S\x89\x97#\x0e\xed\x15'\xa13-\x8e&;\x14JB\xf6\nT\x93yd\x03H\x92\x921\x0e\xf1\x96\x979=\x96\x9ftH\xa95\x8ag\x19\xd3\x86\x8c\xdd\x05\xa0\x8b\xf6(\xf6j\xb7\xb9wD\x92\xc2\xb8i\xda*\xbbO\"'n>\xaeT\x97\xf1\x83M\xc8\xdd\xd2\xa0\x16\x12V\x8a\x8ae\xa4\xdb\xbdK\xfcm=\"\xa2\x9d!G\xcd\xc7\xd4\xd7J\xb9Z\xc91{\x8a\xd9LI~\xa2\xf4=\xd5WT\xac\xb7@\xd4{j6\xbb\x9a_u8\x17B\xe7k\x16\xd4'~L\x8c\xfb,\xa4g\xea\x16\x17\x91FB~L\xe9\xbc\x97&O\xb35g\xb5\x12\xc1/XI.p,\xbaE\xcd\x8f\xb8$\xec\xf4\x90NOf'\xa5\xf2\xd7#'\xce\xc4\x88\x89\x1c*\xc7K\x99\x91\x97(g\xe1\xd5\x0b\xf2\xae\xed\xe2\x03\xee\xffVzU\x92\x8c\xad\xd4HQ\x8b\xc5\x8c\xc3\xf9\"\x0c\xc8'\xfd\xd3\xa5\xe4\x197\n\xd9%\xbe\x88\x14\x15\x9bM\x08[f\xdb\xfcqq\xee#G\xf5\x82{\xc19\xc9 !\x95\x97\xaf\x0d\xdbq\x88\x03\x17V\xabj\xe1\x8d\xc3\x05\x91fh\xf39\x92\x0b\xe2&1\x90\x0f\x85v\x07*+qn$\xd3\xd9\xd1\x02G{\\\x1d\x93r/!\x07\x10\x88)\x1c\x0e9\x81\xea\xd4\xb9O\x0f\xc7\xe7\xfb\x85S_.\\'a\xae\xc6T'\x9d\xdbP\xcd\x85Dq\x1abL-U\xa5\xed\x1d\xaeJ\xb8#'\xf3<\xf5\x91\x97\x83\xacB\xda\xe1\xe6\xa3\xe8q\xd3\xdb\x18\x04!\x9d\xdf|\x91)\x9fU\x04\xb0b\x06|^\xe1\x9e\x88`L^-\xd7\x96)\x9d\xfb,=oU\xc8\x96\xf2h\xeb\x85\x88>\xe3\xd2\xd2r&\xd4W\x97\x9a\xec\xf3\xcc\xb4\xca\xd4\xa8~s\x13/\x90* uz,#V\x1f\xb0D\xf6\x15EQ'\xda\xa1\xeaj\xc8\xe0m\x93\xc7\xa7\xd2\xe5\x12\xb2.\xc0pCR\x00\xd6_\x17\x16JC\x08\x9c\x9f\xfc~\xfdu\xf9\xfb\x8c\xf0\xde\xdf\xdf#\xc9<\xf9\xe6\xd6\x8f\x9a\x87\x88\xd8'')\xefz \xd47\x12\xf3(\xdf\xf7\xb5y\\c\xf7\xce|\xe13\xac\xfc\xe4PyB\xa6@\x87(\x101\xa6\xe6TIX\xa1\xc0\x00\xb8o\xcc\x14u,{\xd9\x1a\x99\xa9\\\xe0\xb7V{\x95\x9e\x05\xda\x9b\xd9\xb940X{\xb3\x12\x07\x03\xd7\xbe\xd7\x9fh^\xeb6\xf4\xc8 s*\x88\xaed\x02ZIi\xae\x0f\x8e6{J|\x92u\x95f\xc6\xf1+$\xfc\xad\x84\x93b\x879\x1b=\xa7\xb5{\\\xee\xfc\\Y\xad\x0e5M\xdb\\Ff\xbc\x86\x91l1\xa1\xfb\xfb/\xca\xbc\x0bA\xdd\xcaq\xc1\x95\xf6\xaa|V'Q\x02\x8eQ7h1\x92\xb2o'\x14\x12E\x0d\xb8.?='\x9a\xdaq\xb0\xd5q\x986Q\xdb\x82G\xd7\x91\xae\x9d!\xf4\x8c\x8c\x1a\xa5\x84\xcc\xe6\xe7\xc2\x9d\xa6\xad\xa8\xb7[\xd0\x7fj\xfcp,\x87Z\x8e\xb4\xc2m\xc6\xabE\xbb\xa7\x9d|z\"\x8b*\xd6\x8do\xb8=F}\x84\xe4\x17\x13\x03\xbb!_0\xed-<\x85\xd0\xeb\xad\xed\xd7[\x06jM\xb4\xb6F\x878A%\x9cL*\xc9\x8cUX\xe0\"\xec\xa5\xdfW\xc4\xf7\x12\xee\x94{\x87\xca\xf1ze\xdb\xb7\xb7\x8diI\x1d\xf3\xec\xf0\x071\x92\xa3\xba\x98ra\xbc\xa6\x1e*My7\xed\xb4!>\xcd\xa4\x90\x05\xe9i\xca\xd3\xecI[$\xa7i\x0b\xd33\x1bE:\xf6\xf9\xea\x06\x88W\xf9\xaa}aub\xc5j\x93\xc2\xf6\xce\xb2]Y}\x14U7\xb3F\xd4\x8eV\xf8\xdd\x8b\x9b\x94\x8d\xc0\xcb\x9a\xb4F \x15%\xc4\x82\xedp\x89\x1f\xa1q\xa1\xf0I\xd1-\xbb\xf0\xa2\x10 \xf55\\\x10\x84S\x8c)\x01\xbc\xffl\xe5\xff\xf3\x0f\xb3\x95~\x9f\x1e\xfa\xe4\xcc1\x1d\xdc\xa0;\xed\x91\x86\x92\xe4K\x94JwZ\xccm\x18I\xfc+,L\x9cL\xa9)\xd2\x8f\xe5\xbd\xa4\x9e\x1f\x05\xc9\xef\x05D\x9fho\xf9\x10 \x1a*\x17\xa8fEp#\x00AVQ\xf5\xd9\x93\x86\xb8\xa7L\x81\x972\xf4\xf9\xf9\x08\x0e\xae\x19\xab\xa1\xed\x1d\x16\x16\x1d\xf7\xe7^^oZ1\x03QMZ\xda\x9c-\xcbU3M\xdb^\x15\xe3\x88\xd0R\xc4\xea)\xe3\xb6h \xf7$\x8f\xd9\xcd\xc5f\xb5\xe8)\xfem\xa6\xfc\xf3\x96Xy%N3\x00\x90\x03\xeau\x90\xad\x1a\xa6\xa6\xc2y\xb2\x1a\x17%\xe0@\xdc\xcb\xc1\xae\x86\x10^\x1e\xc9\x01?\xcb\xb2\x19\x8ee\xa7B\xb7\xa8\x93\x0d\x85N6\x9e\x91?\xf83R\xcdzE-\xaeST\xc9\x16\xc3\xb1\x14\xf4\xb6Y_E\xe8\x92Xy\xc4\x99\xe6\x93\x1bg\xf0\x1a\x17\xe05&\xb1%O\xa5\xbbbj}\x83\xa1\xc1\xb1\x88\xc5\xec\x8b\xab.\xae\xd5\xa3\xe6\x91\xf0`-RN\x8f\xf4\xa4\x19\xe2\"\x1a\x0b\xd7n\xfe\x8a\xe2\x12\xa4o\x83f(\x07\xcaq\\\x9f;q\xc2\"j\x04\xbf\xd5\xfc\xdc7\xc4b\xabe1r\x8bb\xd1\xea\x8f\xb8X\x8b\x11Go\xe9@\xf0KB\x90)\xc7\xc5\x05/l\xc9E\x12\x1d\x0con\x14\xbeZ\xad\xe4\x18)\xef\xa3\xe3\xc9\xe9\xe1\xb1\x82$x$\x8f\xd3A\xdbDq\xdeDv\x08^S3dN\xdf\x93:\xa2ZM'\xc6\xf4md\xf7\xe5P+$\xe4\xdc\xd7Bl\xa3\x97\x8e8,\xfc]L\x8e\xfa)\x06\x07\x99I \x17\xbe\xa1&\x0d\xb9\xeb\xb3\x98X\xb4-|\xca\xfa\x07d\xa7WN2\xf9\xc76\xceI\x1at\xc0\xa7\xc0}T\xe7\x86\x80|\xe8Mg \x11\xad>\xab8IE\xaa\x8a\x9c\xc7i\x1f\xae\x82\xb4[$\x93\xd8\xd2lO\x0eSL\x92v\x8d$\x8f/hn\xf9\xdbo\xec\x81\x82\xc7\xfc\x83\xee\xe7\xdd&\x81\x88\x1c\xe2\xd2\xe0gJ\x84\xca9\x95\x0dqI\x19Y\x15\x93\xe1\x9a\xaf\xa6==\xc7\xc59\x11\xd3\xe5$k\xb3\x95\xb6S[\xaa|\x9e6\xdb\xce\xbb\x1d\n\x1f1r\x96-](i\xb6\xac\xa8\xf4\xc5\xda\x97i\x83.<:O\xce\x05\xb2\x89\x13MY\"\xa5e\xe4p\xa7\x85i\x836F\x97\xc9\x9bm\xcc\x9e\xe3\x7f8\xd4\x9b\x90F\x140\x87\x11m\xef\xb0\xa8j\x1eS\xc36\x83^\xe5(\x91\x1a\xcf\xfd\x99\xd0}Lg\xab5'\xbb\x1d\xa4\x81\xfe4G\x18`\x99\xb6\x1ai\xa6\x9d[\xb8\x84\x84\xba\xd3\xb8+\x84\x8b\xf6J\xd8\x95\x0e\x13\x08\x11'\x1d Y\xefo\x92\x05\x88N\xb8\x85L\xac\x1d\x1e\xc7'^\xca\xef\xc6\xd5*\xaew\xcf\x8c\xed<\xe8\xa3_p\x8aU8lz.\xc4\x06a$;\x85\x93=\xc8 \xca\x99j\xdd\xc7\x8ft\x1f \xfd\x897]F\xd8S=\x8d#\xc0\x85\x97\xf9\xe1U5T\x1f\xb9\x85\xa2d\x9e \xfe\xd2\x96h7\xe4\xec\x8aC\x12v\xdfV\x94f\x94\x05\x04\x08m\xa5);fhk\xc5\xaf\xca\xdf \x07\xb1\"\x8b\x15\x1e\xfdJQ\xd7NM*J>\x1aIq4\x98\x9c\x98\xb1\xad\xc6\xaa\xa7&\x05?:\xe3\x92\x049\xe1\x1b\x03\xff|\\\xfc\\\x18\xf4\x8c\xcd\xd8>\xc6\xa2\x96\xb6\xba\xa4\xa2V+\x8f+\xd0W+\x99\xa9\x92\xa4\x9a\xb6\x9a:\x04\xf6\xb4CB+\x82sX\x8b\x03\xc9a\xa0\xb9\x91\x8a\xcd\xc0y\xe0\x01 D\x1bR\x01Y \xb4\xf5?hZ\x16=]\xdf1\x0d\x883\x1c\xf3\x08\x7f\xbe\xb7\x95&>\x9b\xf8lk\x8e\xf96\x8d\xf1^\xf1r\xea\xd3+\xf3\x81'\x89^;j\xb2\xd3\x84\x04*Y.\xa7\x08\xbd\x8e\x9a\x9f7\x12\xa0\xeb\xa8\xa9$\xf9e\xa0\xebk\x87\xc7\xfeI\x16\n\xde\xe7\xa0\xeb \xa6\xc8@w\xfc,\xe8\xc6;AwL\xa0;~\x11\xe8\xc6\xcf\x82nL\xa0;\xde\x02\xba\xf1N\xd0\x8d\x8b\xa0\xbb\xe5\xf8N\"\xce~\xa6f\xc5\xd8\xfd\xa7\x01\x9c\x8fYR\x1c3\x84J\xdfV}\xd5)\x01\xf8\x12\x89\xeb\xc5\x1a\x94sy\x9e\xc7\xa1\x9d\x97\xb5(\x96E_N\xb4\x85\xe9sh\x9f\xd8\xea\x84\xcaU\x97\xe6\xc4\xd60aU\x8c*\x9b\xd9\xae.\x8f\xd7\xfa\xac\xd2\xa8,W\xce\xaeE\x02\xc0\xe5\x93\xce\x93k\xc5\xdf\xbaV\xfc\xa7\xd6\xca\xb8\xb4V\xc6O\xaf\x951\xae\x951\xae\x951\xad\x15|6\xc7\xb4V\xc6\x85\xb5\xe2\x94,\xec\x0b\xe7\xcfs\x13$\xbd\xcc\x14\xe4\xa2\x93\xc2\x96Bd;Y\xc0\xa5g\xb7\x95L\x02E\x9en2\xdb\xa00\x9d\x0c\x8f\xbc\xc5\x90\xb1\x9eydskW\xcf<\xb4\xc9\x8e\xfd1(\xc3]\x94\x1a\x9d\x87\xea\x91\xf0\xc1\xb5\xca\xbd3\xe5\x07\xe4IN\xf1\x1cG\x91\xf58\xca\xe4g\x8f\\\xec}\xa8\xc6\x8c\x05\x14\xd8\xf3\x0bs\xbe]8\x0b5 \x17\x14]4\x9c\x8f\xbc\x805\xf7\x8ex\xd8\xd1>\x9b\x0c\xbc\x91\xef\x05\xd3\xb8\xb9w\xb4*2jS\x96\x9c\xf3\xed\x94\xc2/4#\xf5\xce\xf1\xbf\x0d\xb8Fy\x8d\xe5Hu\x07\x19\xdc\x85\x9c\xdaG\xdaE\x8bdEQ\xf9\xf1\x86$\xd3\xe8\x1cg\xb9\xc9Z\x9aN7\xa4\xaa\x06.r\xa5\xb4\xcc\x85[X_o\xef\xfe~R\x96\xc6\xcbNY\xf2^\x16\xbb{\xb2\xa3\x92\xef_\x87Twu1\x12\xfb\xfb2\x9d\xcd\xecM\xf6\xf7\xd7\x164OVx@t\xf1\x94I9\xb9\x9cBN6u\x15\"'\x05\x9eV\x14\xfe\x80\x89\xc1\xc3\xd6:09\xaf\x03\x9f^V\x07\xe6\xcc\xea\xc0\x07\xf2\x85\xc8\xb6\xd5A\xc9Y\x1d\xf4\xf4\xa2:(gZ\x07/D\xf5\xf8|\x13\xf5\xc7XP\x9f9\xb8\xd2K\xd3\xfa\xd4\xc6\xb2\xbf/\xbe\x8bY\xc2\x1d\x0f\xa8a= \x17\xda\xde\x91\x1afR\xbf\x02`x \x9b\xc7D\x02/\x04J\xd0$J\x93T&\x8b\xd7*\xd1e\x8a\x82\xc3\xe2r\xff,\x8e\xdf\xe6\x1fn6f3O\xa9\xf0\xb5\xb7\xbc\x9a\xb5\xc4\xad\x15\n\x94\xe5\xb1\xe7j-f\xdcQu\x9ee\xbd\xfe\xfcM\xa1\x11\x8b,1CW1 \xcc\x8bo\x04\xa5YLC\x9a\xa9\xd8\x80\xfcMC\xaa\xc6*\xe3\xd8]\xf5h{\xa4\xe3\x02 \x8b\x82\xcb\xdd\xb5mdx\xf4\xb5-\xc9\x1b\xf5\xaeg\xd8Z=_\x8ei\x95c^%O\xa4j\xf8\xb2\x1b\x97\x8b\xa6\xc4\x86T\x1do\x16G+o\xbd8J\xe4\xc5\xd1\n[/\x0e\x13\xb7\x16\xc7\xd7\xc7Zq<\x91\x8a\xe3\x8bi\xad8J\\/.]K\xf5 L\xd6 $\x08\x13\x0e\x10A\x98d\xf3/\xd6M\xad\xa6&\xcf\xee\x19\xb7\xb9\xfb\x9b\xa24)\x0f\xa8\x1977\x10\xc1c\xea%R\x12\xfbA%\x0fl\"\x1d\xfd\xfa\xab\xd4\x94\n\x9e\xc6\x1c_R\x8f\x0e\xbfoJ\x86\x13\xf9\x0f\x95\x99\x17$\xb1\xa4Jo)\xdf`I\x81'&K_R\xa5\xef))u\xc7\xc5cM\xfc@ig>\xb9\x0c\x12.\x8e\xa4\xff\xe1\xdf\x96\xfc\x1eI\xff\xa2\xc4sv\xcb|\x1c\x1d\x91\xbeR\xa3\xfa`\xd8\x1a^\x0dn\xcez\xe7\xc6\xa0|\x1a\xa3\xc8.\x12\xc5\xc2\x05\xb2o\x1e\xa5\xc0\x99S0\xad;g:e\xd1[!\x1a\x94T\xe9\x96{?\x92\x9a\xd2\x8f\xf5\xb7\xf5#I\x95\n\xbb\x8aD\xae\xb7nY\x94T\x06\xfc\xcb\xca\xdb\xfaa\xa5\xa0\n\xad$a\xa5\xb7`Ak\xe1U\xbe\xaf\x1fV\x9c\x80\xc2-z\"^\xc6\xdc\xf1\xb0\x10\xd2d\xd6\x7f\xc7q\x1aa\xc2\xe3FC\x9aR\xbd\xb1\x96\xc6\xf3\x87N\\\xcb\n\xc4\\\xc5\x04Qd\xe8\xc4 \xbd\xa3;L\\\xa9H\xecRl\x8d\xa6p \xd4hL\xbdd\xb6\x1c\xe1\xc6\xd8\xb8`\xd1\xdcq\x19\x15\xf6\xcdKt\x9a\xee0\xd2\xb0\xff\xbc\xf71\xb62aT\xf0<\x1c\xcf\x1c,S\x84a\xf6&\x0f\xf46\xf5\xc0(5MS\x1a9#\xe6\xe3\x1b\xf5Q\"\x91?\x16aJ,~{x\xf4?\x92\xbd\xb2\xed\x95*El\x11\xc6^\x12FT\xc02\xf2_\xd4\xbc\xfa\xd4K$UBT+5%|\xc0\xb6,\xa7\xf1\x93\x85\xcc\xcb\x854\xbc8^2\x1a\x1a\xee\xfeMjJ\x17\xde7V\xe9;\xfeb\x16\x87A\xe5d\xee}c\xf5H<\xbe\x9b\xce\x1d\x0f\xd9\xee\xf9\xa9\xa4JH\xd4\xe1\x82hJ\xef\x07\xe7\xb5\xefkg\xbe\xb3\xa4\xf5\xe1\xa6~\xc7\x10\x977\x1f\xa5\x11CTWs~\xbf\xadQ\xcc\xa0XjJ\xd7\x87\xf5\x1f \xb4\x90\x00\xac\xcdYm\xee<\x8c\xb0\xac\xeb\xa3\xfa!\xbd\x08BWD*\xad\xcd\xde\xe2\x8b\xb7\xf5\xef\xeb\x87\xe9\x8b\x889\xee\xc4\xf3\x99(\xeb-\xbd\x11\xdd\xaa\x8d\xc3\xf9\x9c \x95\n\xfbI\xbcI\xc5\xf4\xbc\xac\x1f\xa8\x12L\xe7&T5\xa4\xf4\xf8\xcb\xa3\xfaQ\xfd\x872\x9c\xd1\xd0\\\xffP?\xac\xff\xc8\xc3\xb8$a\xe8\xc7i\xe6\xef%Uzp\xe6>\x7f\xfeI\xa9'\xd3?\xb1Pl\xd34\xf2\x92\x07DB3\xe7\x7f\x8e\xde\xd6\xce\xbe~?\xf7~\xfd\xe5\xed\xd7\xff\x1cF\xbf\xdf~\xfc\xf6\xf9\xfd\x9f\xff\xbb\x88\x7f\ng\xe7\xfd\x7f\xfd\xf9q>\xfa0;\xfb\xfc\x10\xb4>\xfa\xf7\xed_F\x9d\xdb\xf7\xcb\xf3\x9f\x7fv\x06o\xbdo\xff\x19\xdf\x0e\xc2\xc3\x9f\x97\x9f{\xbf\x8cG\xff\xf3!^\xcco?4.\x7f\xf9\xe2~\xfd|\xf4oM\xc3\xea&Q8\xdfDw\xef8\x8a[\xbd\xd9\x08-q\xfb\x12\x07\x98j\xb4\x99#=\xaf\xb2\xd5\x97\x04\x17V \xc5\x98:sO\x1dE\xdb\xd2\x1e\xb2\x9c\xa9'\xad\xad\x81s\xbc\x84E8\xe3\x05\x1f\xa2\x19\x03\x9f\x86\x85\xce\xce\x1e#{\xa6iZ\xd5\xcbvhG;K\x965\x92\xf5\xe6\xfb\xd6\xe0\x13\xe0O\xefr8\xa0\x9b\x9bV\xa7\xdd\x1a\x18\xe9C\xff\xe3Yv\xf7\x99\xdf\x9d]\x9c\x8b\xb7g\xbd\x8b\xcb\x8e1l\xf7\xbat\xdb\x1a\xde\x9c\xb7\xfb\xfcU\xa7\xdd5\xba=~\xdf7.Z\xc33^\xcf\xcd\xa0w\xd5?3\xf8\xfdg\xa3?hw?\xf4\nO\xbd.\x9c\xf5:\xbd\xfe\xd0\xe8_\xe0\xdd\xd5Ew\x00X\xf8\xcd\x97^\xff\xfc}\xdfh\xfd2\x80\xf3\xf7W\x83\x9b\x811\xc0\xec7x\xdf:?\xef\x1b\x83\x01\x9c\x1b\x1fZW\x9d\xe1\xe0\xe6\xb25\xfc\x04\xe7\xc6\xe0\x97a\xef2\xcd \xe7\xed\xfe`\xd8:\xfb\x05\xce\xdb\x83\xcbN\xeb+\x18W\xeds\xf8x~\x91f\xf8x~q\xd3iu?\xc2\xc7n\xef\xc2\xb8\xf9\xc5\xf8\xdaow?\xde\x9c\xf5\xba\xc3~\xaf\xb3\x96z\x89\xdf^~\xbci}4\xba\xc3\x1b\xea\xc6\xc7~\xef\xear\x00\x9f\xda\x83a\xfa\x0d\xde\x7fhw\x8c\xecf\xd0\xfe\x0f\x7f\xe07\xbd\x0b\xfc\x19\x0c\xbb-q3\xfczi@\xfb\xc3\x00\xda\xdd\xc1\xb0\xd5=3\xe0\x7f{\xef\x81Z\x85?W\xad\x8f\x06t\xce\xb2\x1e\xe3m\xa7\x83\x97\xf6\xb9\xd1\x1d\xb6?\xb4\xcfZ8!\x98ra\xb4\x06W}\xe3\xc2\xe8\x0e\xe9\xb1\xd75\x86\xad\xfeW\xbc\xa7\xea\xf0zua\xf4\xdbgx{\xd9\xba4\xfax34:\xc6\xe5\xa7^\x972\x0c\xdb\x98\xd1\x18\x0c\xce:\xbd\x01\xbf\xeb]\x1a]\xc0\xf9\x1d@\xa7\xf7\x91\x97\x84TN\xa7\xd7\x1f\xc0E\xeb\xec\x13u\xe1\xa2\xd5\xee\x9c}2\xce~\x81\x8bV\xf7\xbc5\xec\xf5\xbf\xf2Y\xe9\xf6nZ\xc3\x9b\xf7\xfd\xf6\xf9G\x03z\x9d\xf3\xcb/\xe7\xd0\xbb\x1c\x1a\xfd>^\xda\xdds\xe8\xf5\xdf\xb7\x877\x83\xde\xd9/\xc6\x10\x01\xaa7\xa0\x12\xa9\x814jT\xcee\xfb\xd2\xe0\x14\x16\\\xe2\\\\\x0e\x8e\xe0r\xf0\x16.\x07\xdf\xc3\xe5\xe0\x07\xc0r\xfb\xad\xeey\xef\x02\xfa\xc6e\xe7+\x0c\x8c\xb3^\xf7|\x00\x03\xa3\xd3\xee^\xfdz\xd3\xee\xb6\x87\x90N\xbd\xb8RE)d]\xb4\xba\xad\x8fF\x1f\x06\x9f\x8cN\x87\xff\xd22\x19|\xea|\xee\xc0\x00\x17\xc5\xd5\xf0\x135\x14\x08^\x11\x9c\xae.\x07\xc3V\x7fxc|6\xba\xc3A\xf6\x98\xcdf\x9a\x80\xb3\x9a\xde\xa7\x8d\xb8\x1a\x18}\xf8\xd2\xee\x9e\xf7\xbe\xb4\xcf\xe1W,\xbd\xd7o\x0f\xbf\xc2\xaf\xe7\x04\x85\x1f\xda\x1fq\x85\x0d\xf8\xf3U\xbf\x8f\x90'\xa0\x9c\xd2\xce[\xc3V\x9e\xe3c\xdf0\x86F?K\xa5\xc4\x0b\xa3{us\xd97>\xb4\x7f\xa5\xe7\xfeU\x17\xe78{?0Z\xc3\xec\x86\xcf\x18\x7f\xe2cR\xac-M\xc3\xb6\x16\x1e7\xbe\xa1A\xc5\x84\xcf\xc3n\x1f~\xbd\xe8\x9d\xb7?\xb4\x8d\xfe@\xb1\xac\x91\xa4\x06\xda#\x0bn\xbd(\x0c\xe6,H\x9a\x8f\x82\x07kr\x8fY\xb2dY\xaf\xa5j\xa2\xa8\x8e\xef9qS\xa2 DN\x80\xa4\xd5\xad\x13\x91;\xd7\xa6\x99}\xd4\xb0^\xeb\x96l\xc9\xa6\x15[\x03\xbb\xaa[\x8a\xa54\xd4i\xc4\x98\xfb\xd0\xdc;T\xbd \xf6\\\xd6|\xdc\xf6\xa9|m\xbd.|\xab\xf0o\xfd0\xfc6b3/\xe0\xc7j\x1b\"S\xc3V\x03\xf2\x1a\xd5lX\xa3\xc3{\xd3r[\xb5\x0fNmbW\xad\x11\xc8z\xd3\x1aYn\xd5\xaa\xeb\x96{\x00\xd6{\xabn\xb9UE\xd6\x9b\xa6\xc1\xec\x9a\x8e\x0fzC\xc5\xdd\n7\x8ef\xa3V\xd3\xa1\xa6\x81U\xb5\xaa:XU\x0d\xf64\x1d\xfe\x02\xeb\xc0:\xd0\xc1:\xd0\xc0jh:|\xa7\xe9pr\xa2\xe9pz\x8awx\xa3\xe9\xa0i:\xec\xef\xeb\xb0\xaf\x81u\xad\xe9`\x81\x05\xf8\xab\x81\xa5C\xb3\xa1.\x10\xf7/\x89\x0ci6\xb0\xe9:`\xcftP\xe1\xb8\xb1Z\xa9\xc5\xb1\xb3dl\xbal^+v\xd5R\xc0\xbc\x96\x15[\xc1\xbb\xdf\xcc\xeb\xdf\xec\xeaoO\x0e%\x1f\x1a\xb8\xfe\x0d,\xe55\xfc\xf6z\xa3\xf0G\xf3zeW\xad\xd5\xb6R\xf2\xb1h\x9a5M\xaf\xda:\x98{V\xc3\x86W\xaft\xf8\xee;\x1d\xack\xebZ\x07U\xd5\xd7zdZ\xa6e\xdb\x0d\xf5I\x18\x92-\xebQ!(*M\xe7&L\xadVj\xc3z\x8d\x83pW\x05\xf3\x95~\xb0\xf7\xee\xb5\xad4l\x95\x1b\"4\x1b\x96\x85\xb3\xe8\x8c\xc6\xcc\x98\x04QrkY\x92\x0d=\xdd<\xac\xfd\xcb~\xff\xb4R\x1a\xabcV\xf7\x9d`\xbat\xa6,\xae\x8f\x9cx\xa6=\xc636r\x82i\xde\x97\xc6\xf5\xab=+>\xb0\x1a\xf5\x83F\xdap\x1e\xfc\x85\xaf\x06\xa4\xafK\x9do\xc8\xd7`^K\x8f\x96\xf5\xdaV^\xe1Wk\xb0\x9c\xe9\x19j\x9c\xeb,\xae\x05k\x94\xbe\xb4\xe2\xaab\xddUe]\xc3a\x89\x0f,qQ\x14\x1d/\x8f\xebk$m[F\x03\x95\xa0`\xc4\x8b\xa2r\xa8\x94\xb4\x8c\x8d\xaflU\x9a\x84Q-\x8cj1\xf3\xd98\x91\x9a\xa5\xe6\xc9zs\x12F\xc0\xdf)y#\xad\xb8\xea\x05V\x9c\x97\x98\xc2\xa7\xb4\xd1}.Y\xa8\xf9lR.\xfc\x1aL+>\x86}\x1b\xcc\x93S\xdb\x92\xd3\x92\xab\xba\xa642\x88}\x1a\xe0\xb0\x8cb!\x96\xfc2\xf8{\xb6\xd5\\\xb7Q\x9a+Yo\xe2L\x9f\xd8\xca\xc9I\x0d'E\x91\xad\xbb\xaa\x8eC\x8bs\x15\xe9V\x00V\xa4p\xbcv\xa0\x17\xd3\xac\xb7\xeb\xb3\xb7\xb14\x83\xe2\xfcm\xab\xcb\x94\xde\xd8T\xa3b\xbd}I\x95\xdf\xef\xac\xb2T\x13VcY6~jY\x96\x92U\x84\xcf\xbc\\@|\x93\xe2*\x81\xa1@\xd6\xf7\xac\xb7\n}\xaa\x1c\xbc\xa8{\xf6\xd3\xb8\xc3\xb2^\xeb\xcfm@A=\xbd\xcd(\xef'\x01J\xd6\x9b\x8e\xeb\x82\xb3\x88\xc2E\x18\x83\xb3H\xf0\xdfK\x96.\xc3\x9b\x1a7\x95\xc2\xbb)K\xc0\x89\x17\xcc\xf7\xc1Y&\xe1\xfc!\xfe\x83<\xbe-\x17\xe0\xdc}\x83\x91\x133\\\xbcx3\x83\xd1\x18F\xc2x\x08FS\x18\xfd\xe9-\xde\xc2\xd8\xf1a\xec$0\x9e\xb8^\xfc\x0d\xc6\xb3i\xb4\x80\xf1\xec\x1bWv\xc2x6\x0f]\x18\xcf\xc2\xbb\x00\xc6\xb3(\x0c\x13\x18\x7f\x8b\x97s\xa0\xc040\x9e/`\x1c\xfa\xcby\x00\x88``\xbc\x80q\x14\x06\xf4\x938#\x18\x93\x11\n\x8c\x97\x91\x0f\xe3e\x02\xae\x930p\xc7\xe0\xba\xe0\xba\x11\x8b\xc7K\x06.\x1b\x85a\x12'\x91\xb3\x00w\x02\xae7\xe1?\xdf\x83\xebM\xc1\xf5\"\xfc\x1f\x87~\x18\xc5xG\xfdq=|\x98\xb3x\n\xee\x12\xd84b\x0b\xa0\xf3i\xc0\x82[`\xc9\x0cy}`\xf7\x0b'p\x81\xc7y\xc5K\x04\x13\x97K\x00\x81ww2\x85 }<\xf1|\x06\x13/pa2O`\x12\xfa.\xa4\x19#\xc6`\x12\x8f\xbf\xc1$Y\xc0d\x19\xb3\x08\xa68\xb8S/\x81\xe9\xc2\x89\x12\xe6\x02\x951\x8d\xc2\xe5\x02'\x8en\\\xe6\xf3\x1b\x1c@\xba\x89a\x1a-G\xb5y:\xb6\xd3?\xbd\x05\xcc\x1c?\x81\x19s\\\x98Ma\xe6\xc5I\x18=\xc0,\x8c\x13\xfa\xa1\xce\xce\x92p\x01\xde8\x0cn\xc1s\xc1\x9b\x88\xcf\xbd\x89\x8b\xb3\xe2M\x96\x0b\xe0\x98\x1e\xc8Y\xa0\xef\x83\xb7\x80\xdf\xc3Q\x0c\xbf\x87^\x00\xdf<\xdf\xa7\x1f|\xe3\xb38\x06\xdf\x0b\xbe\x81\x1f\x80\x1f\x8eq>\xfcpJ\xf5\xf8\xe14\n\x13\x9e\x12~\x03\x7f1\x06\x7f\x11\xe1\xbf\x17$\xe2\xe2\x8a\xeb\x1fx\x9d\x83\x1f\x83\x1f\x87\x13\xf0\x1f\x82{\x98;\xdf\x18\xcc\x9d\x00\xe6c\x98\xbb\x8e;\x87\xac\xab\xf3o8\x8f\xf3o\xec\xed$\x86\xf9\xb7\x897 \xf1\x82\xf7^\x1c\xd25\x08]\x98\x7f\x8b\xef\x9c\x05\xcc\xe7\xb70\x0f#\x06s\x1c\x87y\xb8\x0c\x12\x98\x93\xf4\x06\xe6I\x04\xf3e\x92\xc0\xfc\x16\x02'\x08!\x18C\xc0\x928q\x12\x08\xbc1\x83\xc0\x87 \x9c-\x17\x10\x84\x897y\xa8\xc5,p!X\xcc!\x88\xb1W\xcb\x05\x84\xf8\xc7\x02\x10S\xb7p\xe2\xf8\x8e. \x83\x85\x93\xcc\xc6\xb3o\xb0\xf0\x82),h\xe4\x16\xf8\xf1\"\\\xb8\xb0\x88\x80\xfa>v\x16\xfc\x06am\x11\xc3b\x19\xcf\\X\xdc\xc2\x1f\xcb0q\xf8\xefx\xc6\xc6\xdf\xc4m\xe2C\xe4\xcc!r\"\x88\xc6\x0b\x88\x08\xde!b\xf3\xf8!\x18C\xc4Wh\xc4\xa8\xf9\x11\xbb\x85h\x0e\xd1\x1c\xc7+Z\xcc!\xa2L\xf1x\x01\xf18b,\x80\x98\x16H\xcc\\\xc0\xae\xcd\x1d\xcf\x87\x98\xfd\x011\xf7\x99\x0f1Bi<\x83x\xc6|\x9f\xb7\"\x9e-'\xf8\x93\x10\xbc\xc4>c\x0b\x88\xc5\xdc\xc7\x086|\x91\xc6\xf8\x15\x8ecLQz ^B\xbctC\xc0\xd5\x1e/\xe3\x05\x0e$NO\x18\x00\xb5)q\xf0\xdf\xf3!q\"H\x18\x83\xc4\x9b\xf3\x9fp\x99\x00\xc2l\x12.\xc73H\"\xa0\x02\xa3p\x990H\xa8\xc6$y\x80%\x9f\xd8%u\x7f\x19\x88\xc5\xba\x0c\xbc?\xf0'\x89a\x19\xe0\x90-\x83xF\x17\\-\xfc\xc4V\x0d\xd7\x11,\x17T!.H\\tx\xc55\x87W\\rx\x8da\xb9\xe4n\xb4a\xb9\xe4.\xb4\xe1\x16nqlo=\xb8\xf5\xe6p\xebE\xf1\x0cn\xe7\xd4\xf1;\xc7\xc3\x9fd<\x83\xbb1\xdc!r\xbd\x9b\xb1\x88y1\xdc\xcd,\x16,Rd]{\x0d\xa6\xc2\x91\xfd&\xf3 d\x8d\xcfm\x0d\xde\x04\x92\x19\x0b\x80\xf91\x03\xe6{\x13\x98x\x88\xac\xb0\x8d>\x03/\x80\xb1\x83obg\x0c\xe9v#\x08!pCp\xc3\x00\x87;\xf1\xfc\xe7\xda3Zz~\xe2=\xbbUYuh\x02\xd9\x08\xc0\xd8\x85\xb1\x08\x1f\x03\xec\xd6A\x0c\xcc\xc6\xc0\xee=\xc2\xbe8\xf1S\x96\x84\x8b$\x86\x19nH\x8b;\x17\"\xe6\xb8a\xe0?\x00W'\x01\xc5A\x86\x84\xc5 \x81R\x0c\xb4/,\xe7N\xfc\x0dA\x01\xf7;\xdcha\x84\xb8Z\xb4\x1071\x9fE\xb4\x05!\x0c\xb9l\xec;\x11\x036\x9e\x85\xc0\x02\xdcxa\xc6\xfc\x05\xf8,!\xa4\xe7#\xaeC(\x9d;\x0b\xc2\xfc\xb4\x9c'\xd4\x18\xfaq\xa2\xc8y\x00n7\x08\xc9\xc3\x82\xff`\xedK\xdf\x9b{\x04\xb5\xd4\x0cL\x8ag\xe1\"yz03\xea\xc0w\xe2\x98\xd3\xd3+u\x14\x86>s\x9e\x1d\xdf$Z2\x988~\xcc\x9e\x9b0\xf2jRs3\x9b\xa6\"\xd9j\xbd\xdf\xb7\\k\xb4\x957\xc8\xb8\xabBvW?9\x85S\x0b\x88\xdfD&\x12yN\xed/891Oj\xc8~\xed[\xae\xad\x9f\x9e\x82\xe5\xea\xd8Vd1\xcd\xd3}\x1byKs\x1f\xec\x8c\x03\xcdI\xe2\xa7\x9awm\xb9\xdb\x9a\xb6Z\xad1\xa8\x9c\x7fOyT\xabn\xd5\xc1|\\\x99\x96}lYv#e\xbaK#j\xc5\xc4Z\x1f\xd5~\xb6\x91\xdd>\xa4\xa7\xbaj\x13\x9b\x8d#R\x1e\xc5\xfc0W\xa4\x99\x92`\x9b\xa4unh\x9d\xfb(\xb3\x0bj\xea#X\x95\n\xc4c\xa1\x10)\xd3,H\xaa$\xa0\x98T`\x04\x11\xd2\xe6L\x92z!\x12\x9a\x83\xc2\x90H\xaa\xc4\xfb,\xd9j\xa8\xe5\x84\xa6yd\xd7\xf9\xb8\xab\x9evx\xec\xe5\x16A^\xb5\xaa\x84fdz\xb6\xad\xad\xf3\x95<\xb9\xc4n\xd2>\xb2\x91q%_F^<\xdf\x10\xc0Sj!\xefX[O\xe1N\x0dei\xec{\xdf\x98\xa4>n\xf2\xa5V\xc3j\xe0\x14][\x91\x15X\x96\x0d\xc4T\xe3\x83\x0eV\x80\x14\xbc\x89\x0f\xb6\xa2(\x07`5\xac\x83\"\x1bq`5\xe0uQ\xa6\xb3R\x8b\x8bn\x83Id\x01\xeen\x14\xb6\x1a\xb9DYo\xde\xdc8I\x12y\xa3e\xc2nn8#*\xa75 \xd4!S\xa3#\xcf\xb7\x13\x7f7\xa8\xe4R9p\xd3\xf2\xbdi\xe0\xc4\xe2&\x9c\xc0M+ \xe7\xde\x18n\xde#\xa9zs\x16\xce\x17>\xbb\x87\x9b\x8f,`\x11\xa6\xb7\xe7\xce\xd4\x0b\x9c\xe8\x01n\xba\xa1\xc0\x8e7\x83\xc4I\xbc\xf1\x8d\x13\xc7,J\xe0f8Clu\xc3q\x9a\x13\xcf\x81\xdbq\x80\x17\xf8^\xc0\x88'HQ3\xee c\xdcI\x89C\xc9\xf1\xb4\xd0\x9a\xf3\xada\x89\xa8\x92o,80\xfc\x0c\x0eL\xfc\x10 \xe10\x82i\x98\x84\xe0a\xf9\x88H\x83)p\x95\x12\x8br\xf4M\x04\x857\x0d\x90@\xf1\xfe\xc4\xc6\xc4\xd4f1\xca\xc0cGRC]6\xc1\xad>\x0c\x10\xb3\xf3OnC\x0f\x7f|'A\xb4L;\x9a\x82k4\xe3\x9b\x1a\xa6S\xfb\xf3\xc6\xb6\xee\x0eR9\x81\xd2\xf0\n\xb22.\xfcB\xdcS;\x05\xd9\xacU\xf7\xa1i+\xd6\x11\x98z\xf3/\x1b\xccZ\xf5\xa0\xf1\xdd>\\\xefi'\xa76b\xa7TNGR\xb9\xc3{\x84<\xcb\xe5\xa2\xba\xba.n\x0f\xc0\xaa\xa7\xa9\x88>\x16f\xb5fs9\xdd\x13\xd2<\x96\xe7R\xcc\xc9\xd2\xb7\x0f\x1a\x1e\x9dj,\xaf\x08/\xc0\xb9|\xcf&a\xc4di\\@\x1e\x8fsg\x1c\x85%l\x86\xd0\xf7\xca\x8a\x0fp\x14\xec\xea\xf6e\x02\x1c\\\x15\xe5\xa0\xe1\xcd\xb7\xefC\xa9\xa9\x86\x94!g!8(\xd4\x85\xd5x\xc1\xd8_\xba\x8c\x18y\xbdyR\xaf\xea\xa7 K\xf0\x86\xf3\xd9z]\xa9\xea\xd6\xdb\xcd\x8dH\x98J\xdc\xb2\xf5\xf2\x14Z\x1a\xdcv\x12\x84\xcb\nN\xc3\x08\xa0s\xf16\x8a\xc2\x08\xd9\x1b6\x01o\x12\xf0K\xce\xe2P\x8b\x80\xe0{\x119\xd3\xb9\x03\xe4\xfd\x02\x96\xb1\x17L\x95\x0d\x84\x9ev9\xc5\xb7\xb8\xa7\xa4Lz\xb6T?\xb4;\x06\xaeRRL\xd1\xcdyk\xc8oH\xfc\x9d\xde\x0c\x86\xad\x8bKzB\x80\xbc\xb9\x01\xa3\xf7\x01\xbaW\x9d\x0e\x0c\x0c\xe3\x97\x9b\xb3\xab>\xbf1\xba\xe7\xfcf`\x0c!N\\/\xc0_\xa48\xe2\xc4eQ\x84\xcd\\)\xaa8E\xb8\x815\xebb#x\x16\xbd\"\x12\xd52\x1cjn\xcaG\x94]\x08rm\xc66\xbel\xd2\xa7\x8d\x0d\xb9`\x01\xb3\xda\xea&\xd0\xe4B\x985`$\xc9\xcb\x11I^8\xf6>\xb0\x8e^\x8e\xa6\xe9\x1d\x90F|\x82\xbc \xdfEb\x04\n\x1eM\x8c\xe8DOp\xc0\xe4.\x1f\x02v\x87(\x1d\xac\x11\x9d\xa9\xb4\xe2\xaa%+\xa6uW\xb7,\xbb\xda\xf0\xd6\xba\x95\xae\x83\xb2\xf4\x18\xf36V\xeb\xa8=\x05WNp\xbb!\xa1F\x81\x00\xbd\xa0\xd8\x86\x8c\xfe\x0e\xd8\x1d$\xd1\x03\x90\x8a\x18\xa8A \xc2\xd6B\xb0\xf4\xfd\x14K\x0b\xacL`\x9c\xd2\x87\xbc\xd2\x02\x19XF\x88B\xfc(+\x8du\x9d\xc3\xf3\n\x87\x02\x8a*aQ\x93\x90#\x98{\x9a\xad\xe9\x88Kk\xbaP?\xec\xef\xa7:\x04S?h\xfcu\xfd\x9d\xbd.q\xe7\xe4\x98\xac\xa8\xf5&\x8d\xdd\xb3\xca\xe6\xc6+\x84\x8dG\xa5^m\xa8\x81\x96O\xfd\xab\x82J`]\xeeY\x96\x89\x8f\xc3\xc9\x84 b\xa9D\xab\xa4\xd4\xc6\xef\xce\xad#\"v\xe7$G\xb2EZ\xfa\xa6(@D`}c+\x07o\x1a\xdb\x85\x90\xd2zf\xc9V\x0e\xa4m\xfa\x0b\x82\xdc\x05mka\xd0\x0cV+{\x0d\xa4\x90m\xe1 0z\x10\xe0\xc1a\xbe\xb0O\x8f\x96\xd3)\x8b\xc4\xd1c\x04;\xe6\x8cg\x02qR?\xb3eA`\x92\xc1\xd7\x84\xb0\xe9\x1adz1x1\xee\xe2\xc4\x12\x85\x0b\xc0\x85\x17/pq!\xac\x06!\x04a\xc2A3\x9c@8\x99@\x18@\x18Ax\x17d{\xfdr\xc1\xa2l?G\x964\x99y\xb1\x00q\x02W\x82xN\x91d\x1e\x8a`\x19\x90\x10\x8aXP\xe4\xaf\x03\xb1\x8e\xee\xbc\xc0\x0d\xef\xe0\xceKf\xc4C?x\xccw \xd6\x05j\x983\"t\x0b\xc8\xe1\x1d\x02\x8e\xcb\x89\xb1\x0d\x08\xa1#\xc3;\xb7\xd9\x02\xc4\x90\x91\x8e \xf3\x1f\xa5\xf9\xd2O<\xdc]jib\xa1\xc2W\xaf^\xa5\xba\xc3W\xaf^5r\xa1/\xcf\xb9R\xa5\x91\x1f\x8e\xbf\xd5\"6e\xf7%\xf6\xab\xf1\xf8\xfd*##\xf1!\xfb\x98\xe7\xcd@%\x87\xce\x0d\xa0\xf9;=\xcah\x08\x89\xd3\x82\xb5\xc2\x12(\xb4\xeb\xb7u\x10\xfe\xcdV\x0e~\xcby6\x97\x11\xbf[\xe2\xa9\xae\x7f\x83\xdf^g\xcd/2#t\xae9i\x16\x1b\x99W\xbbZ\xa9\x85\xc1\x15\xed+\xad\xbd7o\xd2\x11z\xf3\xa6\xb8\xe6\xd2\xaa\xc47\xa5%(I\xe97\x92$\xed\xfe\xe6\x89\x95\xf8wF5c\xda\x1eS\n\n G\x01\x83\x9c m\xca\xfa^SQ\n\xdb\xfb.LeJ \x9b/|'\xc9F\xc3V7\xf3j\xbb>\x7f1\x0f\xb6X\xec\xe6\xc2\x10@\x9e\xdfx\xd7\xb8\xa4\x17p?\x8e`w\x1c\xc1\xed o\xc2\xb9\x11\xe4v\x8a, \xc7u\xc4\x98\xcc\x9c\xe8\xa7\x9b\x84\xaeG?\x8a\x9b\xef\xdf\xe2\x8d@\x85\xf3\x85\x8f\x08q\xcc\x16I\xce\xc6\xc4 \x89\x9a\xf8\xdd\xfdB08^\xe0\x89\xb77c\xa7\xc8\xef\x8c\xc3\x1b\x87\x04}\xe3\xf0F \xb2qxC\xc8\x86\x04G$\xed\xc9\x98\xa2\x0c\xd7\n\xde\xc8}\x08\x9c\xb97\xe6e\x16\x19\xa5\x85\xef\x8ds1\xd7\x06\xe34\x89{AB]\xf6\x82\xe4\xc7\x1fn\x12X\x8a\xf7\xcb4\xc32\xcd\xb1L\xb3\x10#6_\xd2\xe1\xd1\x0d4\xce\xeei\xb4\x10\x91/\x92\x08\xd2-\x1e\x16\x91w\xeb$HB\x87<\xba),\x96#\xdf\x1b\x179:\xbeV\"&\x860\xe2\xf1J\xe3\x17\xf1zE6U\x91s\x97\xa1\xfa|\xac\xfb\x92l^\xcb\x8aeU\xec\xc7C\xf5\xe8\xc7\x95R\x92\xb1\x1cI\x8du\xf4\x9d\x8f\xccj\x03\xe1\x95H\xca\xec\xc4W\xb2\xe6\x93(u\xa4\xd889\x91\x91\xe0==mL\xcb\xce\xfb\xb3\xd8=\xb2\xde\x94\xaa\x89Y\x0d\xec\xaa\xa4H%\xff*\x99\x97\x7fQ\xaeP\x03'\xdc\xdbpDn\x19W\x85\x13o\xd4\x86\x82\x0f\xef\xe3\xe0$!\x87\xddL+5)f\xfed\xadE\xe5\xe60\xd1\x94\xe3m\x1d\xca\xbe\x96p\x0b\x8f-k`K\x8apnHB\xc5\xca\xe8!a\x15\\\x04\x15\x97\x8d\xbd\xb9\xe3W8B\xab\x08\x84V!TU\xf1\x82\xa4\x82\xe8\xa4\"\x0c]c\xfa\x8e\x16z\x85OE\x05\xd1NeI\x99\x96\xfc\x05\xd6\x83\xcbMR=\x8do&\x15D\x8a\x95\x8c]\xab\xf0E/\xa9\x0e\x1d\x1e\xaa\xd0\xdcV\x9cx\xcc\xc8\xb6\xbf\xe2\xc4\x0f\xc1\xb8BX\xb92z\xa8\xb8,{3\x89\xc2ye\xca\x92\xca\xd4\x0fG\x8e_!=*\x16\x1cV~\x0f\xbd\xa0\xe2\xb3\xa4\x82\xb8 \x9cT\x820A$W \x83\n\x85\xdb\x1b=T\x16\"B|\xc4\xe6\xe1-\xabpQm%fIe\x19\xcc\x9d\xc0\x992:\xe5\xb0d\x15$C+\xa4\xeb\xe1\xbf\x92\x1ak\x923\"MXRq\xe2\xca\xc8\x89Y\x85\xb6\xad\nn[\x15\xda\xb6*\xa4_c.\xf9\x92J*\xe9\x16S\x11\xbbG\x05w\x8f\xa9\x93\xb0\x8a\x1bV\xc8P\x97\xdd\xb2 \xa9\xa4\x9b\x85\xf0\xd3T\x11tz\x85<\xcd\x93\xdb\x0c\\K\xcexV\xc1\xed\xa2\xe2M*\xc8\xe6\xd2\x17^\x90\xbb6\xf2\xe2\n\xd2\x9a\x95\x0c\xe3\x93\xe51\x1f\x03\x81<*\xe12\xa9\x84\xb7,\x8a<\x97\xe1p8\xf3\xb8\"0\x7f%\xc3\xfc\x15\x8e\xf9+\xa9*\xa6\xc2\xdd\xe1\x12\x98\xc5\xcc\xf1\x99[\xe1\xd8\xbd\x12'\xce\xf8\x9b\xe3\xfb\xe1\xb8\xc2qz\x85\xe3q\x8a\xa9Y\xe1\xe6\xcfI\xf4P\x11\xa7\xc9\x96A:@\xcb v&\xacB(\xba\"Pt%\xc5\xce\x15\xc2\xca\x15\xda\x82\x0b\xc7E\xfd\xfc\x80\xac0G\x96\xaa\xac\x9eD\xde\\\xce\xdd\xa26*\x08\xf5 )U\x89\xec\x05W\xfc\xe4\xae/{\x8a\xba\xd4\xc4\xea\xf4\xe5\xb0*U\xa4\xaaG\xbf\x0e\xfd\xc6\x8a\xa2.0_)M\x9dh\xe5\xcc\xb1\xa2\xbaZ$7NH\xd4vrz\xacU\xad\x1a\xc7\xb76\xa4\x0bO98m\xa4N&\xde*\xea\x0c? [9\xb2\x90+d\xb3\x94b\xbe\xb9\xd6x\xa7[#\xb3U\xfbO*\xd3\xb4FY\x86\xa9\x96\xe0\xd2><=\xe5\x16U''G\xa7\xa7\x8a\x9e\xbd7\xe7\xaak+\xea\x03f\x93\xf5=\xca\xa9P&a\x81U\xcf>:\xc8?Z\xa8S[Qo\xb5\x06\xd2\xfc\x07\xb2\xdeT\xad\xf8@9\xb0\xec,\xcb\x08\x0b4\xafUY99EF\xbe\xdc\xe1\xc3\xd3S\xa0B\xe1\xe4\xe4\xedi\xdem\xd3Ug\xea\xad\xad\xa8\xf7\xf8\xb9%S\xce*\x96\xcf\xef\x94j\xa1\xef\xe6\xc8V\xd4;\xde\xf0f\xa1L\x85\xb7\x1c\x7f\xc9vH\xa7:\x94\x03\xd1!\xbd\xd8\xfb{\xf5\x81\xea\xfb\xa6=\xa6\x94\xe7rM\x10qr*+\xbaZo\x92\x05\xe0J\xedi\xc4\xdds\x81\xe9\x1b.1\xad\x83e\x99W\xcb{\x9bo\xe8\xc2(\xef\xa7\x95\xf2&\xab\xc9\xd0\x04\x9f_\xe7,\xbe\x90^IY\x86\x1b\xad\xf1\x8ep\xb4\x04\x9b\xc2\x00Y\xdf\x93\xb2\x8e\x97e\x16\xf1\xcc\x89\x16[\xa5\x15\xa9ndC<\x11\xc8\\<\xf7\xda\xb2l\x85\x06.\x1f\x90\x1b{\xdd|l\x9b\xcc\"-\xe1\xdd\xb6\"\x8c\x17\x15!\x16UO\xd9d\xb6p\x83q\xc6 \x8b\xc8>\xaf\xc8W\x94\xfb`\x8d\x08\x13Xq\x95\xa3\x11\xe4)\x04\xa8#\x0bu\\\x00\x95\x87\x8d6 N\xee\xdbZ\xaf\xf22\xa9$+>\xc0\xa2\xd2\x15\xb1^\xec\\\xbd\xfb\xfb\x05\x17\xdb\xa8\x15\x0b[/j\xa3\x04\xd1\xa4*oN\xfe\xe5\x98\x96\xe3\x0b\x9b!\xc4\x98\xdc4r}\xee\xfe\xc68\xd1\x0e\x97u\xe7\xeftC\xd6\x9b^\x0cN\xacl\xf9\xfa\xa5\xe3)\x06\x83\xdbb\x12\xe2:\"\xc4\xf56E\\\xa6\xa6\x1e7\x1f\x15\xcb\xb6\x81\xac5\x95\xc2H\xdf\xa9\x13\x15\x9b\x99\x15\x9d\xcb\xd1\x96k\x9a\x1cYo\n\x19\xe8\x8d} \x84\xa1\x80\xe4=>\x1e\x1e\x91D\xba)D\xa1\xb2\xde\xbc\xa9\"Qx\x00$(\xcd\x9f\xc9\xbe\xa1\x94\xa2\xe8\x9c\x82\xafUIp\xba\xfeb\xe9\x83\xbf\x04\xd3\x9d\xf8\xf3\xa5M\xfa\xe5\xed\xda)\xb3\xa6\xd9)9O\xd4\xfc_`\xe9\x96No\xd6UTe\x15\xb8n\xd5uh6aM\xd0\xfa\xa4\x14\x83pM\xae+V\x1f#'\x98\x16\xb53V\xdd\xaagDw\xa6j~F\xe2\x94\x96Z\xd2G\xf3C\xaan\x8d\xa8\x0d\x96\x94\x04v\x08E\xa6\xac\xda\x19\xfc\n\x91\xc9Ski\xab\x9c\xe9e\xed* \xf51#\x93\x9a\x9b@\x9d3\xcdB\x89\x94\xaf\xf5\xc2Vz\xc8\xf7\"l\xb1y\xfch?\xd9\xe8\xad\xea\x04\xab\xdeX\xad\xf8\x01\xd0\x1a\xbb_D,\xe6gv7\x1b\x94\xca\x1f\x84\xf0\x94\x93_J\xb6\xf6\x05ia\xc5\xb8Dd}\x8f\x1b\\C\xa9\x89Vq\xdd\xccv\x8djq\x88\xf2\xf5*q\xb2\xab\xc6\x8f\xaa\x16\x9bWZ\xbbMZ\xbb|\xc7\xd6N\xc1\x94\x1fm\xa0\xb1Br\x10\x9b`*\x90\xdf\x96\x96\xf1Ca\x11o5\x8e\xe1\x86\xb4\xc86\x84Q\xcd\x0bn\xc31\x9f\xfa\xf5\xc1\n\xd8\xdd\x1af6\xb1\x1d\xcaK\x10\xd3\xf6\x8a\xa7\\\x01_\x9b\xb3d\x16\xba[\xba\x9f\xd2U\xb9\x02z\x8d&K'?\xd3\xd1\x04r\xe3z\x0b\xb2\x155m\x18\x15\xbb\xca\x93\xd3\x93\xc1\x90\xef\xc5I\xb9}\xd6HNI*\xda\x08\x91PK\xd1='\xa6p\xb9\xa5\xea\xdc\x93\xef\x89\xf2\xfa!\xa3\xbcT>\x97\xc5\x17)8\xc9z\x93\n\x02\xf3\xf1\xd8\x06\xed\x14^\x17't\xacN\xd5\xb9z\xa7.E\xca\xce\xf5\x90c\xeb\xedbG1\x02w\xca\xa6\x12\xe5\xdb\x9a-\x90\x8a\x8bi\x11\xb1E\x14\x8eY\x1c\x87\xd1\xa6\xa2\xbc~\xd0x\xb1\x02|\xab\xce\xda\x8a\x0f^\x95t\xd6\x1b\xba\xea\xc0\x8d\xd8\xd4\x0b\x83Lk]\xd2L\x8bw\\A}\xe7D\xc1KU\xd4+~4t\xa0\x19U \xa4jO\x1d\x12]\x8d\x94\xbey\xd0\xb0\x15\xb0\x1aV\x83\x93\xb2\xb8\xbb\xe1\xa5d\x0bCz\xde5\x90\x1b\xd8\x8a\xfa\xbb\x16\xc9D\xdfKo\x1a\x9c7A\xea\x1b\xe9u\xce\xa3\x14Y\x14sh+\xc8\xa7\xb44!\xd3\x8dc6\x1f\xf9\x0f@l,LHd\xcaW \xccCw\xe93 \xa4\x0f\xe9\xe0\xa6\x82B\x04V\xa5\xc0\xda\x9c\xad\xb16X\xfd\x11\xd5]\xa4\xf0\x1f\xd4\xdfm\xe5\xf8\xef\xa2\xf9\xcc\xe8\xa6\x8c(\xc4\xc1\x04+\xb6\xeeN\x15\xdd&Tjf\xeb\x80/\xea\xa6\xe092\x16J\xcd9(\xb1\xd6\x8bx\xa5\xa5\x9e\xed\xa6\x973\xb0\xe2^\x0cK\x8d\xb9\xde\xb1\xf5\xb5le\x03\x12T)\xebP-s\x0b\xba\xb6\xe69\xb3U\x9a\xb9\xdfs,\xb4\xc9s\xec\xd2\xb5\x8b\xb5\xf7\xa0<\xb5{\x95Y\xac\xa6j72`mk\x8d\xa6y\xbd\"`\xacfm\xb9\xfc\x07\x10\xd7'`\x7f\xe4jaYo\"\xd4\xaf\x9a\x82_Q\xf8\x9c\xe8\xd6*\xff\xeeRm\xdb\x8a\xda]\xab\x8a\x96\x8bu@\x8b\xe5\xa0^\\\x14\xbb\xea\x1f\xf0\xfa;\x7f\xb7\xfe.\xd6\x9f\x8b..\xe4$\x97\x11\xae\xa9\x9c\xca\xc4\xd0\xf5#\x1day\xb4\x1e\x95\x0d\x92>\xd9\x89E%~6aS\xb2J\xec\x1d6|\xbd\xc99\x1f\xb4z]\xe8oD\xe3\xf6\x02\xd2\xe5\xba\xb91\xf9\xd7\xd6#X\xab\xd7\x0d5'e\n\xa8S\xa8I3\x9a2\x05\xc2Z\xbalw\x83\xe7*;\xc6\x94\x95\xb2Z\xbd\x00\x0f\x14U\x9e\x85\x11\xdf\xa2jL\xb9`\xe4\x81q\xf8_\xbf\x83w\xd6ke\x9d\x8b\xc7i\x11\xf0\x82y\x1f\xa5\x12\xdfo\xf6\x9f_\xfe\x17r_\xbdT\xb6\xf1\xdfd\x9b\xf3:\x95,\xac\xd5$=\x96k\xea\xbc\xa4\xa6\x8e\xdaUV\xf6JI\xf5\x82\x1b\x92z7L\x02\x96l\xe8\x02\xc7\xf1\x96$\x8e'\x9eV,N\xc3g\xad;\xcbJ\xc1\xb2%b\xb0\xd3\x12\x91MX\xc47\xd9\x89\xe3\xfb\xc9,\n\x97\xd3\x19W\xa3-\x831LCYo&\xa1\xa2\x97\xcc\xc2R\xd3\xa0\xb9\xb3\x80\x853\xfe\xe6L\x19\x10\x97\x93\xa9\xab\xb8 \xfc\xa6\x19\"\xdc:\x11\xd7|\x08\x83w\xd1Z\xd2T>$\x8c+\x1e\xd9\xbd\xac7\x7f\xfc\x01\x8e\xde\xfe\xa4\x88\xcd\x9ed\xe6\xb2\xde\xfc\xfe-\xfc\xf8\x83\x02\xd12`\xc0\x81\x0d\x96\xba\x17\xe0\xab\x9f\xe0\xe8G\xe0\xefu\xd2\xd8-\x92\x08\x9c\x05\x1d\xa6\x18;\x0b\x18\xfba\x9cU\x00\xe3p\xf1\x90\xea\x1c\xbd\xb93\x05\x9f\x05\xfcXM\xc0\xee`\xe1\x04\xde\x98\x9b\xaa\xcbz\xd3\x0f\x14\x1d\"\xe6\xf8\x10\xb1qx\xcb\xa2-\xca\x9b\x1b\xf0\xc2\xc4\x81\xc0\xf3a\xcd|\xa8`\xeas`5\xbe\xbb&C\x1f\xb0\xaa\xa6V\xb5u\xa8\x99Z\x8d[rk`\xeb\xb0\x8f\xf4=\xec\xd3\x01bE\x07\xdc\x1d\xe9h\xb1\xa2\xc3 \xee\x9fx\x0f5E\x87\xa6F&\xd9\xc8J\xae\x99U\x9aNmb\xb9v\xf5I[$\xc1R+\xba\xe2\xe9\x0do\xbbu\xd9o\xe53~\xb9U\xd9\x86E\xd9n\xfb\xbaih\x16w@\xfbI\x85R\x11\xf1\xcc\x92d\xa1=J\x11\xfbc\xc9\xe2\xa4\x86\x94^\xc9\x88]\xd6\x9b\x97\xbd\xc1\x10>\x1aC\xb8\xbc\x1a\xc2\xb9\xd11\x86\x069.\xe8u\x07pI~.\x86\xfd\xd6\x99\x01g\xbdn\xd78\x1b*\xc8\xbf5\xc9A\x8b\xdeD\x9a\x0e\xac\x86b\x0d\xaaV\xfci8\xbc\xb4\x1a\xe6a\xed\xe7\xba]m\xccs\xb4\x9c\x19\x1e\xfc\xa3\xeaF\x0dNR\x88\xcd\xbf\xd1\xb4\xee\xaa\xc4\x95\xa6\xce\xb2j\xdc\xc9V\xa9_\xbc-Gu\xf3\xf0\xc8\xaeXn\x95\xe8\xea\x8d\x06\x15\xc9\xef\xd2\x17\n\xff\xc4[\xb7\xb4_\xa9\xd2\x8c9.\x8b6\x8c\x0f\xaeM\xeb\xaefW\x9b\xb2\xae\xd5\x95\xc6|\x93@&\x82#\xa1\xb0\xea\xd9\xf4\xa8\x91\xf6(9\x8b\x85\xefq^\xb1Q4y \n\x96(j9W\x8cleP\xc7+\xc0\xee|\xf7s\x1f\xb3\xdd\xcf}UJ\xd8}\xb2\x990Kx\n^E\xd28\x8e1e\x1c\xc7+5\\o\x1eU\xbcw\xb8\xa5\x9a\xbd\xc3UNMx\xb9\xa9\\A\xebw\xcdM\x80\xadFC\x95\xb2@F\x99\xae\x10\xa4\xaa,Y8\xb7\xa4\xc5\xb6\xee\xea5\xbbjYU\xa5*U\x93\xaa\x84\xd4A\x95\xa7*\xa4;\x91V\x99\xc3\x99\x8a\x17T\"\xc5\x9b\xc8\x91\xe9\xd8\xcac\xa2%\x00\x8f|\xc0c-4\x1d[\xf7dGi:\xc7\x89\xe9\xe4\xcd\xb1\x1a\x8d\xa9*\xd5$\xc5\xd6\xd6 JI\xa6\x80\\AB\xf2\x84\xa6e\xc5\x07R5\xaeJ\xa6PU\x1e\xe8|IG\xbae\x05`Y\x91\xf2\xf8v\x95\xbd\x94T\xc9\x93v\xd0(\xd8\xc2\xd5\x8a\x82\xfb\xef\xa2\x0e(0k\x19\xce\xd4D\xd9e;\xb3\xcd:\x91\xf3>B\x17\x08\xc2\xa4A\xe0\xd9\xccf\x0fw\x89us\x96\xd4~\xef\xe5\xd6\xf6\xe4y(\xb7\xe2\xf3\x02\xc7\xcf\xad\xf86\x8d\xf0s\xe3\xd7\xe2\xf9Oa\xdf\x17\x147En\"\xc2y\xb4\xc0A.\x97\x9b\x87\x90y\xdf\x82\x05\xf4\x13g\xfb\xe6\x16\xe3\x90(\xbc\xf5\\\x16\xe7V\"\xe30rw\x99\x84d\x06\xff\xde8\x99,\xca\x86\x82\xf1C0\x9eEa\xe0\xfd\xc9\xdc\x92\xc1 \xfe\xc6\x90\x84@\x0e\xd9Y\x0b\x93\xbcz\xab\xb9\x8a\xb2.\xa1yZ\xb6\x8b\x93U\"\xf5\x93\xc8[\xf8\xac\xf6\xc72L\x98\xbb\xc5\xd4D\x92$\xb3b%\xa9\x90\x848\xa3\xa6\x04\x92\xa4\xe8\x99VOB\xeaA9x\xd2\x80\xf0E\xcd*K\"\x82 L\x04\xcf\xb7E\x86\xadn\x8c\xe2\xbbmfu[\xc4\xd6\xe9\xd1%\x81.\xf8\xda'\x89\x85P\xa7)z\xba\xd6\xb7\xaem\xb1\x92\xb3\xb5\x9b-9Zh\xb4\xc8p1\x91\x14<]6\xa4\x07\xc9\xd6\xd0z3\x9f\x12\x18\x08!g\\h?)\xd3\xad;+V\xeb\xfb\xba\x0d\xcf<\xe6\xf7\x07\xa7J\xfaW8UX\\\x9dAa\xe5m*\x83IQR$}\xf5}\xe0\xf2\x8b\x97\xdaR\xfaK'?n\xd1\xb8~\xb5W\xafB\xad\x86\x83c\xca\xda\x81b\x99\x99\xfc\xcd\xb6\x8e,\x1b\xea\x07\x08\xdf\xbb\x8fI\xac\x1d\x8a\x00\xcb\xfaS\x16\xe7&\xacX\xd9v\xa4\xc7:\x82-u\xbd\xb5\xec\x92\x8dz\xe9 \x80 \xbdq\xc9\xf3\xdb\x83\xf2\x11&B\x1d\\\x95e\xd5\xad\xf7\xc0I\xf3\xf2\xe9\x00k\xa4@\xae,+\xbdhx;m\xd9\xdd0=\xa5\x1c3.,MM\xd3\x05/\x87#]0\x8a\x14\x87s\x91_ \xc2\x04\xe8T\xc5\x829I&H$#s\xe4dR\xeb\xf1\xcd\xf3ak\xe6\xb8\x08L\xf2\xa3\xad(\x85\x897\x1b\x88\x85\xbe\xbb\xde\x87W$5m\xe8pb\x9eh\xb6\x0e\xa7\xe6)^L\xed/R\xbcmb:dn\xb0\x86\xfa\xc6\x11\x1a{\x8b\xe3!Yy\\\xa9\xc76X\xf5*4\xab\xcf\x1c\x86\xd8n\xb9&\xdd\xdc\xdc\x90\xddKx\xb5X\xb0\xe8\xcc\x89\x99\xac \x87\xe9\xabm\xce\xe8=\x16\xcb\x05LeJs'\xfa\xb6\\\xd4\x84\xad%\xd9\x19k\x8f+\xf5\x11\xd9]\xf7\x12\xc9\xb7Y\xe8\xbb,\x8a\x9b\"rA\xd6\xaa@\x8d2\x9f\xe9AV\xa4\xa6iQ\x1eN\" \xbf\xb1`\x908\xe3o\x9ai\x1f\x07\xf5q\xe82\x8d_2\xea0T\xd7\xe3Qo b\xe0\xed\xef\xef!\xa9\x9b:\xe9\xce\xc3\x8e\x86j\x9c\xc5\xaa8\xae\x1d\x91\xab~*?\x0d\xad\x19j\x89\x1c\xa9\xb1\xa2\x1c+\xd5j\x9c\x9a\xc89flkL\x0dW\x8a\xa2\x06\xf5i\xe4\xcc\xe7NT\xda\xe9\xf9\xc8 #B\xbd\xf0\xfed\xcf\x0d\xc7\x96\xa1\xd8\xdf/\x0e\x82\xf2\xb8\xb5*3\xb2E\\\xc7C\xd5+\x05S(}|\x9c\x87qq\xe48\xb7\x1c\xe4!\x16\xe2\xcc\x1d\xfa\x9e\x1c\x9eji\xb0\x16%\x0f\xb90\xd6b\xd3'/\xff\xe9\xbe\x95\x0d\xef\x18`\\\x17\x84\xf8\xfe\xfe\xe6\xeb\xf4]\x1a\xa9\xc43C[]\x94&\xd8\\\xda\xeaD\xdb\xfcT\x1f7\xb3\xcfU\x97\xe6b\xa9\xa83m\x92M\x90Ka\xd4g\xa7\xb5#\xe5\xb1Z\x0dE(\xcfI=^\x8exi\xf2\xa1:S\xd4)\x85fg\xf5!V)G*\xab\xa7\xf3\"/\xf2)T\xd4\\\x9a(U#u\xa1\xa8\x0f\xa5\xb2f\xd54n\xab\xa2\xde\"T\xce\xf7\xf7o)\xac\x84\x08\xa1u\xab:\xb29\xb7\x15E\xe5\xc9\xf2TQ\x1f\xb6\xe5y\xc0<[:\x1c\x8b\x00 \"o\xac\x9a\xbezd\x8b(\x96\xf2\xad\xa2\xe4\x03\xa2\xdd\xaex\xc8\xea\xc2\xe8;r>\xdc\xa9\x1f\xedx\x95\x82B\xac\xac\xfe\xce\x9e\xc4\x81\xb8\xb0-\x9d\xec\xd5j\xe9\xdeP\xab\x9d6\xd4E\x14\xfa\xe1\xb4\xd98\xb1\xf4\xcc\xf3\x9d~\xdaP\xddpL\x1cYag\xde;\xef\x9d\x0d\xbf^\x1a\xa4a>\x95\xde\x98\x96m\x83d^K\xf6\x81\x04o\xcc\xeb7\xf6\xc1\x1b\xa5\xca7<\xda\xbe\xb02\xc5\xbc\x96\xdel\xc9\x08k-Q\x0e,R\xfd\xeb\xa7e[\xe71\x85_k\x9c\xecY\xe6\xd9yk\xd8\xca\xb76\xdb\xc6\xac\x89S\xdc\xf6\x9d\xf9\xe2\xb8\xa1J\xfb\x12\xc5\xf0T\xb7\x87\x88\xd9\xdd?Ur\\\xb7MGB\\I]\xdfu\n\x9e\x8d\x1fW\xc7\x81YD~IA\xda\xd2\x90\xaf\x0b+HIW:\x92A\xb6e\x9f\xbeVv\x9dy]k\x98\x99\xd8+5\xa8\xd3\xa2\xd4\x1a\xc52\x81\x17\xd4\xf0\x84\x7f\xfeGI\x9c\xc6vk\x94[*a\x92\x8d\xc5L_\xe7P\x1a\xacV\xc7\xd1\xee\xded\n\xa4\xdd\xadL#%\xaf\x8eC\x93m\xca\x9d\x1a\xf2\xc9\xcdMZ9\x998\xecj\x94\x15\x1f\xa4\x14\xf6\x01\x0e\xd8\x89\xd5\xb8\xb99\xcd\xf4d\xf9L\xdf\xdcl5\xd1\xaf0\x9c\xf6-r\xaa\x0d\xa4\x11m\xc2y\x99\x93\xe4P\x81\xbc$\x8d\xa8\x1a*\xab-\x87.\xee\xe7\xfeN\xddKZ\xc2\xe3\x96\xeff\xc9\x96\x0f\xf9\x07[\xd6_2{y\xee\xf8v\xba#\xebs\xfb\x17?j\xe0\xdd\xb2'\x9c\x85l\xa8\x92\xfe_\xea\xeb\x02y\xa0\x98\xf9\x13.2S\xb8\xd4\xe6].\xc7{\x87,\xd4\xbbL\xf0G\x18\x1a\xdee\xb1y\xdfq\x99\xe3;!\xa4{\x97\xcb\xef\xde\xa5\"\xbdw\x99q\xc6\xbb$z\x80w\\`\xf9.\x952\xbe\xe3\xc2\xb8w\xf1C\x90\xcc\x18v\n\xde\x89#\"\xf0\x8ek\xd0B\xaeiJU\xb4\xb9;\x08\xf9\xf9\x13\xff\xf0N\xda\x9a\x95d0\x99eu\xd1\xf5\xadY;\xb5\xd3\xb3\xe7{d<\xa9\x93\xa0I/\xf8\xb6\x15\xe7\xd1\xff\xba\xfeN?\xb0\x1a\xef\xec'\\+\xe4\xc0\xf6\xb4\nh\xfd\xbb\x05\x8b\xfc\x1d\x8e\x16p;\xd5\xac\xbbj\x8aQ\xb4\xf12\xd94<\xda\xe2ba\xbb\xdfU{\xcb\xa9t\x02\xf9?\xe0\x8f?\xe0\x8f{\xf8\xe3\x8e\\w\x9a\xd7N\xed\xcfV\xed?\x87\xb5\x9f\xad\xf8Q\xb6\xcc\x935\x89\x82\x9d)\xb27|-\xf1\xaa\xdc\x10\x16\xd9O8\x83y\xb6a[!\xe6\xff\xca\x06\xed\x06\xb3\x97\x83\xe0\x7f\xdd\x84]\xc0\xf9r\xc0\xfd\xaf\x9b\xb0\x13\xa4\xff\x06\xbc\xff\xb7\x8d\xd8\xb1\x12^\xbaF^\\}\xeaY\xaeQB\xaeVc}\xc9e\xb2\xe3\xd7@z#\xb5~\xbcR\xf6\xc1\xaaU\x0f\xfe:9\xdd\xd3\xafm$\xcc\xfc\x04\xa6 \xf8\x0c\xa6\x0c\xd8\x1f\x100\xf2\x87\x1c\x84 8\x81\x0b\xfcT5\xdc+\xd6HQ\xca\xe8;\x8f/\xd00\xf7\x0f^\xbf\xfb\xce\xb6\x1e\xadkR*\x92\xb7\x9b,\x95\xd2n\xec<\xe5\x15\xf1s\x8fJ9\xa5)\xeb\xcdfS9x\x93\nF\xac\xbb\xd7v\x95\xe44\x98\xdc\xf0\xf2\x12\xddjCm\xc8\xfa\xdew\x9abb\x82\xb9'\xbdz\xfd\xdd\xfe\x1bY9\xa8\xaaV\xadn5\x9a\xc7'\xda\xa9\xfe\xce\xb4,\xcb\xbe\xbe\xf9\xed\x11V\x7f\xd9\x0d[\x9dx>\x9b9\x81\xeb\xb3\xb2&g\xcf<\xd1l\xc5\x1a\x1c\x9c\x825\xba)x\x98\x8c\x1f\xe6\xa3\xd0\x97V\xea\xed\x86\xfe\xe36\xd36\xf037\x85\xa7\xc7\xb7\xeaj\xfd\xf4\xf7j\x9b\xdb\xecx9\xaa F9\xac\xfd|S\x92\xb7d\x8cB\xbc\x1cm\xfanr\x82\x875_K\x1b\xce\x1e\xc8\xb9\xee\x19r\xe6\xf8\xc9\xcd8\x9c/<\x9fE\x90\xdb\x96\x04.p\xcf\xb3N\x9c\xb1\xb2\xbeO~=\x8a\xd6%\xdc\xb0\xc4\x0f\xb1S\xeb\x0c.\xf7|\x9b\x81\xb4\x80er\x84[\xd4\xc4\xcd\x17\xc9\x03\xb0\xc0\xcd\\\xe5\x06.\x028\xbfp\xbfR\xe9\xf9\x06\x01\x97,p9\x8b*\x1c\xfbz\xc9.C\x95\xc2B\xc9u|t~\x7f\xab\xe9\x8ap\xe8'\xae7a0feC\x968a\x8e\xcbMZ\x04\x1b\xec\xc51K\xc0\xf7\xe2d\xcd\xdfI\x88\xcb.bA\"V\xdd\x13^N\xd2\x95HW^k\xba,\x05\x0f\x9f:\xb6\xe2~H\x1c/\xe1F(\xe4\x84\x18\x97\xe4\xad\x93\xfa\\F<\x9f\x99\x9ex[\x1c\xfb\xd2\xbcs\xd5g\x12q\xf7n\xde\x96\x88\x01\x99_BS\xd8\x98\xdc\xd8&\xa7\x98n\xec\x03\x04V^P\xb0\xf4}*\xc2\xde\x15\xd6#5l^?\x11\xc2]\xfam\xe8.\x9f\xb4mX\xcc\xca\xc6\xd5\xe4\x11v\x9bs\xac\xac\xe6M\xaev\xc3Q\xd6\x0bj\xcc}rmsBe\xe9\xa7\xaf\xe1\xfa\xc4\xc2\xddo1[\xd0\x86\xad\x80F~\xec\xb6\xf8\x11~\xbe\xba\xdc\xb5S\x1e\xb2\xc6zM\x1b\xd3\x1d7\x9f\xd1\x1e\x15\xa5\xe1\xa9\x02\xaf\x97\xec1\xac\x1c\x0e\xad\xb8\x8a\xd0A\xc6\x13\xd6\x1d\xf9\x1a|\x91\xb1\x84\xd5x\xc6\xc1\x17of\xee\x06x\xab\xe1e\xed\x14k\xdd\xa83=\xa2\x91\x14\x04\xac\x8f\x14\xc9\x06\x89\xccG\xa42\xed\xea\n\xf8U\x117Ju\x05bN\x1fm%\x1b\x0bR\xfe\xd4\xab\xba\x0d\xb5S\xeb\xae\xaal\x80\xd36\xd3\xfe\xc5l\xb1z\xe2,\xcf:\x8c\x05\xe1\x9d\x1b\x8e\xb7\x98\xf3\x9c\x9c\x9c\xbc\x91\xcd\xeb7vUy#\xe7^\x81\x11\xd8\xeb\x07\xc5\x04\xe5@\xb7\x8e\x8e_\xe0\x10l\xab\x873\xac\x86jy\x03\x99-\xd6\xf1\xeb\x1c\xb4\x04m\xb3K\xc7sr\xf2F\x07\xf3\xcd\xb1\xfd\x9a\xab=\xa4\x19\xc3\xfd\x7fG\x87d\xbd)\xc9\xe6\xb5dW\xe9\x04\xc2s}\x029k\x92\xf2l\xf6\xb7\xc7JIw\xf57\x07!\xd58U\xa5|\x1c\x94\x7f8$\x92\x0e\xa6\xc4\x87d\xcd\xb5\x1d\xb9\x86\x8b\xbd`\xfa\x94!\xd7\xb3\x9e\x197\x88F\x89\xcbx\x9f\xb0\x0d[/r\xc3\x7f\xe3\x8b\x9c\xc8%\xab\xd5vgo\x8b\xd9\xa2\xce?UYQ\xf94\"\xa8\xaf\xa5\xba\xed\xa2\x1e*!\x03\x83\xc6\x89\xa57\xea \x8b\x139!K\x07\xa5Dol5\xe9\xa8o\x98s\xc8\x89\xca\x17V\x83\xa3I:\x17\xf5J\x1c\x8b\xe2\xa7\x08s\xe1\xad\x18\x855{z\x90\x85U\xfa+\x85\n\xd0\xad\xc0\x8al\xc0\xe2\xf6\xc4\xd9\xd0\xd7`\xe9\xa7 \\r\xef\xf0\xc7\xad\xf0\x07\xfd\x14^+\x8d\xa9\xa7\xacV\x8aR\x1e\x12g\x92\xb0h\xd7\x88<\xdb\xf5m\xd6\x1bi\xef\x95\x95\xf2bU\xfa\xe2!\x99\x85\x81\xb6\xc5)\xf9\x13{\xdb*E\\\xb5\x12X\x94vF\xbd9\x81h\x02\x93\x88\x04\x1f\x92$\xc1\x9b7o2\x15\x1d\x8es6\x11\xf5B\x8c\xa2Tn\xfeV\xd9\xaa\x80\xdeq\xb0,;\xed\xf8HD\xc0\xe3\xa3r\xa0<\xca\xfa\xde\xa3\"\x04\n6<\xf9\xa8TW\xfco\xd7\xc6\x95\x1d?[\xb0q\xa9\x9bM\xc5\xbcn\xca\nn\"\xb2\xae\xad\xb6\xf8\x19.\x84\xc3\xad\x85\x8b\xf5q\xda3\xe3\xc8\xb1e]3\x9b+\xfb\xb5\xf2\x94\x8fI\xa4\x81\xb6\x1e\x14S\x9f5 \xc5~F\xcb\x91\x0d\xd1\x08F\x91\xa2o\x99\x8f'p\xe6j\x8b9\xdfF\x81\xe5\xc9\\w{\\2~\xd8\xc2\xda\xf2\xf9\xb3b\xc5e\x132^\xe5v\x98D\x0f\x96\x1c\x9fO7\x87w\x97/Gz\x91\xfan\\?\x89\xa1\xbal\x1cn\x1a\xf7Z\xf1\x01\x19\xa5r\xe6\x1c\xb7\xfa]\x0e\xc5M)\xb7v]s\x08a?e\x1c\xbai8\xe8\xc4\xa9\x89=y\x05\x03\xee\xabQ0C\xeb\x1eq'\xc8\xb3\x17\xcfdsg\x87\x14u\xa4\xc4\x8eD\xe1\xea /\x93D\xe9\xbd\xf1\xb1\xdd\x05jk\xc9>\x82\x96 \xc7\xa1\x13/`7\x02\xcaS7\xdde\xff\xe2$\x075\xba\xe7d\xc3\xcd\x82x\x19eN\xc7\x8b\xee\xc5\xb9('=h\xc4\xee\xf8\x8a-\xd8s/\"Fg_\x8b'\x8b\x84\x88F\x08f\x04\xb2-IK)N`\xc4\x10\xf7\xe6\x87y'\xe9B\xe4\x9e\xc7\xa3\xf0n\x9b\xec\xb4\xe0`<\xc3\xd5[\x98\xe1\xa2\xaf\xf9'\x99\xa2W\xe9\xa9wA\x15$\xcet\x9b\xdbk\x04\xab\xd5\xeax\x0bS\x80o\xf2\x93?\xbbYb\xccW\x12Kl\xe8|\xbf\x8b\xfe\xb6\xa2w\xea\xcd\xed\xc7C\xf5\xfb\xadAv7\x99\xb2b]\xbb5b\xffM\xa1\\\xc7\xf5\x8a+\xb9^!fK\xe7A\xd1\xcbJ\xaf\xff\xa6\x16\xae\xc5\xb2\xb6\xa9\xb1\xfe\x8bbw\xa9\xa6\xfeq\x91\xc4d4l\x85\xfb\xadh\x10 i\x8a\x00/\xb6]\x15\x1e\x0b\xcdk3U_)U\xab\x91W\xb7UiE'\x1fvi\xc6\n\x9a\xa8\x86\xf9\xee\xb5]-\x93\x99MS\xdf\xb3\xc1\x1a)\x0d\x95s\xf7\xeb\x0cQ\xd3V\x9a;?Y'M9~\xa9\x11~\xf168$k\xe4\xb2\x89\x10\x9a\xd5w\xcb\xcc\xf2s\x1e\xd6]\xf5uc\xd7\xc2{R\x90&VV\xe6\x0b\xadL\xb9\xb5\x88\xeez\xefM\x83\xe5\x1c\xde{\xe4\x87\x16\xce\x08Y\x9eq\xca\x93[]\x9d{\x11\x18Do\xe2\x13m\xe6<\xd7\x07\xc45\x83\xc4I\xe0\x83w\x8f\x85| j\xea\x13\x12I\xed aS\x16A\xbb\x07\x17\x88\xf0\xcf\x9d\xc4\x81\x0b\x8ex/8\xd6\xecz>/\xa7\x8bt\x9a7\x06nM\n\x97Q8\x86>\x11\x15}\xc4\x04\x0b\x18p\xe2q\xc0m\xcd\x86\x17\x03\x18\xd0,\x01\x8f\n\xf51\n\x97\x0bq\x0fCo\xce\x00\xc9\x8e3\xbe\xe7\x8c\x1a\xa5 8\xf9y\xc6|\x02\xd7\xc6\x90\xf0\x16\xdf\xce\xb5\"\x122\xff\xf8\xb7\xd7\xbe\xfbr\x1f\xdb\xfa\xdfEG\x7fw}\x14\xebz\x89M\xd1\xdf/\xf4\xc5\xe8\xe8\xbf\xaae7:\xfao\x8a}\xde6\xe9EE\xa6\xcck\xbe#n\x1eC{&\x98\xcf\xeez\xca\x01\x0e\xa2\x91\xb6\xb1t_(\xa9\x89\xc7\x8e\xef\xec\xb4\x17\xe5\xc71s\xb5\xdbI\x0d\xb4S(\x1f\xe4\xdeP\xa8\x11)\x14\x16\xe3\xa9\xec\xd0l\x0d\xc29K\x95X\xe4\xf4_\xf0\x93\xbe\xf3\xe7\x03\xcc\xa9\xc4\xfcp\xb5`V\x84\x0f\xe6'NXg\x84\x8d\xe3Sl\xd7\x02}S\x08\xaa\x92j\xa1\x84\xdf\x12\xbf\xa0\x84Z\xe3G\x9f\x15\x83\xbc4t\xc66\x81\xc73\x02\x8e\xa2|\xa3\x8c]\x05\xcej\x07 t\x90\xd1\x1b\x90\x0d\xed\xfb\x87\x84\xc1{q\xa4\xfe\x9c[\xe6r\xacy6s\"h\x05\x0f\xf8\xdfg\x13\xbc|v|\xb8\n\xbc\x04\xbaa2K\xfd\xa9m\x89|\x94\x1f\x81~\xda\xed\x081H\xd9)g\xb1\xd15\xde\x98\xd7\x96k\xc5\x96E\xc7\xb0w\x1b\x94\x12 \x96mI\x9f\xcc\x9a\x91~\xcfB\xf8\x1f\xfe\x93\x82\xc8m\xea=Yo\xd6j \x04\xb6[\xf4|\x05\xc3\x93\xbc\xc4w\xcf\xb8U\xa9\xaeMh\xe3\x1dn\xd1\xaf\xedjc[\x00\xb0\xcc\xb9\xd1V\xd1rf\xd4\xf5\xd6z\xcb\xe3\xaf\xe7P\xb7\xd6\xd4\xc2NO\xdb\xf2\xe7\x8fp\xd6\xbb\xea\x0e\xe1C\xbb?\x18\xc2\x87^\xff\xa25\x84Nk0\x84\xceYk`@\xc7\xe8\xc2E\xebW\xb8h\x9f\xc3E\xbb\x0b\x17\xbds\xe8\xf6\xbe@\xbfw\xd5=\x87\xc1\xd5\x05\\a>\xa5\x187\xb0\xcc3\xb5\xce\x86\xed^\x17Z\xe7\xe7\xd0\xfa04\xfa\xd0\xea|\xec\xf5\xdb\xc3O\x17\xd0\xeat\xa0\xd5\xa1\xb4n\xab\xf3\xf5?\x06\xb4\xba_\xa1uy\xd9\xf9\n\xad\x01\xb4\x06g\xd0\xba\x1a~\xea\xf5\xdb\xffi\xf1B\xae\x86\xbd\x9bv\xf7\xaco\\\x18\xdd!\xbco\x9d\xfdru \xef\xcf\xdf\x0b~\xec\xbd\xd1\xff\xc5\xe8\x18_1\xa1\xfd\xb1\x8dY\xda\xddV\xff+\xbco\x0f\xe1}\xa7\xf7\x1e\xde\xf7z\x1d\xfa1Z]x\xdf7Z\xbf\xc0\xfb~\xef\xcb\xc0\x80\xf7\xc3\xbea\xc0\xfb\xab\xce/\xf0\xfe+\x9ca\xdb\xceZ\x83\xb3\xd6\xb9q\xae\x03\x8d\xc5\xd9\xa7V\xbb\x8b\xbf}\xde-\xa3\x0f\x03c\xa8\xe8p\xf6\xc98\xfb\x85\xfc\xc6\xb4\xbb\xf4\xdc\xe9a\xf6\xce\xd5`h\xf4\x8ds8\xeb\xb5:\xc6\x80\x1c\xc6t:\xad!]\xaf.\xba\x03\x1d\xcez\x17\xd4\x13\xbc\xb6\x87\xb2\xde\x1c\x1a\xe7\n%_^\x0d3\x073x\x1d\xb4\x07C\x9e\xb3;\x18\xf6[m~;l\xb5\xbb\x03\xfc\xac\xf5\xbec\xd0\x87\xdda\xbb{E_~6\xfaC8\xeb\x1bTa\xbf7\x18\xc0\xd9U\xbfot\xb1\x1a\x8a\xc4\x07\x14}\x0f\xf2\x18|ps50\xfaX\xccU\x7f\xd0\xeb\xc3\xd9\xd7\xb3\x8e\x01\xe7\xadaK\xd6\x9b\xef[\x03c\xa0+:>\x1bXe\xfb\xc2\xa0\xa7\xafp\xfe\xfe\xec\x0c\xce\x8dV\xa7\xd3;\xc3r\xcf\x0d|\x83\xf3\xf6\x00\xfb\x8b\xd7\xb3V\xff\x1c\xaf\xbf\xe0\xcf\xb0\xdd=\x1bf7\xfd\xde\x17\xba\xef\xb7\xdf_\x0d\xb1\xa6\x1e\x9c\xf7\xae\xe8\xbb~\xef\x12\xce\xaf..\xbe\xe2\xef\xa5\xac7?\xb4i\xf8\xce\xaf.;m\xea\x82\xd1\x19`'\xdb\x1f\x14\x1d\x8c.\xd5fti^\xcf\x89c7\xba\x1f\xdb]L\xbb\xba\x00\xa3\xdf\xef|\xee\xe0\xa5\xd7\x1f\x8018k]\"\xcc\x18\xbf\x9e\x19\x97C0~5\xced\xbdy5\xc4\n\x8c_\xdb\x83\xe1\x00/\xf8\xe2\xb2\x83\x00e\xfc:4\xba\xe7\xc69|0\x86g\x9f\xe0C\xdb\xe8\x9c\x0f\x00[\x84?\x9d\x0f\xad\xb3a\xaf\x9f.\xd0\xf6\xaf\x98\xb1\xd3k\xe1b\xedtz_\xda\xdd\x8f\xb8le\xbdY1Zg\x9f*\xfd\xde\x17E\xc7\x943\x03\x7f\x8d\xf6\xc7.|\xe8\x1b\xc6\xd0\xf8uX\x00\x94\x0f\xfd\xde\x05|\xb8\xeat\xe0\xc3U\x97\xaf\xd0\x8fF\xef\xc2\x18\xf6\xbf\xcaz\x13\xe1\xd4\xa0TE\x87\x8f\x9d\xde\xfbV\x07>\xf6\x86=\xf8\xd8ou\x87\xf0\xb1\xdf\xbb\xba\x84O\xad\xeey\xc7\xe8\xc3\xa7\xd6\xe0\x13|j}\xc6\x96|\xeau\xce;\xbd\xb3_\xe0S\xef\xaa\x0f\xeds\xa3;l\x0f\xb1\xc4\x9bvw@\xf0\xd8\xeb(:\xb4?@\xfbc\xb7\xd77\xa0}q\xd9\xeb\x0f\xa1\xdd=7~\x85v\x97z\xdd\xee\"\x80\xb4\xbb\xdd\xde\xf9{hw{W\xf8\x9e\xbeF\xa8ow\x87\xc6Gz\x8f\xd0\x82\xab\x83\xee>\xb7:x\xd3\x83v\xf7s\xef\x17|?\xe8u8\xd6@\xb0\xc29\xfd\xdf^\xbb\x0b\xbf\x18_\x07:\xfc\xd2\xeet\xa0\xd3\xea~\xbcj}4\x04\xbe3Z\x9f\x11\xdf}\xc0\xdb\xcfF\x07\x08 \xa1\xd3\xee\x1a\xdd\x1e]\x06\xfcw\xd8\xc7\x9evz\xads@x\xef\x00u\xb8\xd3\xeb~\xc4U\x82H\x06\xc7Z\x81N\xafw \x17\xad\xe1\xd9'Yo\xd2\xb2\xbe0\xce\xdbW\x17i.\xec\x0c\xcfya\xf4?\x1a\x88b\xcf;\x06\xa6^\xb4\xbb\xb8\xfa/z\xe7\xf4\xd3\xfe\xd06\x06\xfc\xe6+\\\xf4\xba\xc3Opq\xd5\x19\xb6e\xbdYh\x10!\x1f\xb8\xecu\xbe~\xecu\x15\xe8R\xdf[\x1d\xbc\xb9\xea\xe3\x15\x11\x17t\x8d_\x87\xd0\xedA\xb7\xd7\xcd\xf1S\xf7\xaa\xd3i\x7f\x80\xee\xd5\x85\xd1o\x9fA\xef\xc3\x07\x1d\x7f\x06\xc6p\xa0C\xaf\x0b\xbdK\xa3+\xebMD\x04\x83\xde\x15B\xd6\xbf\xaf\x8c\xfeW \xc4\x89\x08\xafw9l_\xb4\xff\x93z\xc9B\xf4\xd8\xe9|\xc5\x17\xfds\xa3\x0f\xbd+\x04=\xa3\x0fb\x99\xf5>\x1b}\xb8l\xf5\x87\xedV\x87_i\x9e.\x8d\xfe\x19\xa2\xb8\xcb\xf6\xe7\xde\x10.;\xadn\xb9Sp\xd97\xce\x8cs\xeal\xdf8k\x0f\xda<\xed\x12\xf1\xcbe\xdf\xf8\x0c\x97\xfd\xf6\x05\xa2\xfb\xcb>}\xd6o\x7fnw\x8c\x8f\xc6\x00.\xfb\xbd3\x9a\x85\xab>6\xe0\xf2\xea}\xa7}\x06\x97W8\xee\xff\xbej\x9f\xfd\x02\xfdV{@+\x18\xfaF\xeb|\xa0\xe3\xa5\x03}\xe3\xac\xd7\xfd\xd0\xfex\xd57\xa0o|0\xfaF\xf7\xcc\x18@\xdf\xe8\x18\xb8#\xf4\x8dn\xeb\x02/\x97F\x0b\xbb(\x16W\xdf\xb8\xec\xb4\xce(\x9d\xd0 \xb6\xb3o\xfc\xfb\xaaM\xa5\x0c\xda\x1f\xbbT\xf4`\xd8\xe3 \xc3~\xfbl\x08}cx\xd5\xefR\xcd\x08\xc1\xd0o\x7f\xfc4\x84~\xaf\xd3\xc1}\x0ew\xdc!\xa2\x9c~\xef\x0b\xadP\xdc\xb5?^\xb5\xcf\xcfz\x1d\x18`\xa5\xb4\x7f\xf5\xaf:\x06\x0cZ\x9f\x8d\xc2v48\xfbd\\\xb4`\x80}9\x87\x81\x81K\x1b\x06F\xbf\xdd\xea \x8a\xfb\x8fh\xf5\xc0\x18\x0c\xf8\xe4\xa5\xdb\xc0\xc0\xc0N\xa5\x0f\x9fp\x98\x07\x9fz_`\xf0\xe9jx\xde\xfb\xd2\x85A\xfb\xe2\x12\xeb\xbbhu:8\xe2\x83n\xebr\xf0\xa97\x84A\xef\xc2\x80A\x8fFg\xf0\xef\x0e\x0c\x86\xad>\x96\xd5\xee~\xc4\xa2\x86\xad!a\xf2\x01\xdd^\xe1\xa5\xdf\xbe4\xcea\xf0u04.\xa8~ T5\xd0\xc5\xf5\x12\x07th\x10\xb6\xee\xf5q\x92ST\xc6w\x86\x16\xa2x\x81\xe4\x06\xed\xff\xd0\x8bOF\x17p\x9b\xc2$\xdc\xdf0\xad\xdd\xfd\xba\xb9\x00\x87\xbdK\x1d\x86\xfd\x16v~\xc0 \x16\xda\xea\x86\xfd\xf6G\xc45\xc3\xfeU\x97\xb6\x85\xe1\xc0\xf8\xf7U\xab\x03\xc3\xaf\x97\xd8\xb4\xab\xee{\xa4\x83\x8cs\xb8\xea\xf2-|H\xf7|\x93\xc3;\x9c\xfa\xabn\xfb\xdfW\x06\\u Q\\u9|_u\x11\x100\xd3e\xba\xa3b[t\xb8\x1a N\xba\x1a\xd0\x7f\x1f\xae\x06\x08\xf0\x9f[\x9d+\xac\xf13\x11\x1f\x82\xaa\xa1\x15\x8d?\x9c\x18\xf9\x8a\xa3\x0b\x9f\xdb\xc6\x17\xf8\xd2j\x0f?\xf4\xfa\xf0\xa5\xd5\xef\xb6\xbb\x1f\x07\xf0\x05\xc7\xe2\xcb'\xa3o\xc0\x97O\x88d\xbf\xb4\x87\x88\x97*\x08_W\x97\xd0FL\xff\xa5\xd7\xff\x05\xbe\xf4\xdb\xc5\xd6|5Z\xfd\xb2\x01\x9e\xd0\xb6\xf4\xaf\x0c\xf8\xd0\xea\x0c\x0cB\x1f<\xcb\x8eP\xa9[\x98\x84M\xcd\xc9\x81\xd5\xd0\xbe\xbb\xfe\xcb.\x1c>\xdb+\x9a\xae\xc2\xa9\x92\xb9\x12\xe1\x84e\xf7\x1c\xde\x1b\xc3/\x86\xd1\x85v\x17:\xed_\x0c\xe8\xf6\x86\xd0C\xdc\x0f\xe7\xed\xcf\xd07>\x1a\xbf^B\x9f^\x0dp\xa6\x06\x15\xba\xff\xb5'\xfaT\x16\xfa\x1f\x93w\x91\xdf\xd4\xfa\x163\xd5\x0dN\xe2\xce\x9bljTv\x04\x1b\xd9\xc6\xe4\xe1O\x1e\xce\xc6\x92\xcdk\xc5\xaeZ\x8aR\xb5\x14\xf8\xef\xc5\x02y\x8d\x96\xb5\xab\x9ag\x84\xf2\xf8!X\xca\xebmQ@W\x9b\xaa\x11R1\x87c\xcfI\xbc[/y\xd8\x12\x8e\xb0\xach&\x9b\x85\xc0c\xc1x\xddI\xa9\xcb(\xce\xa0\xeb\xb9\x03\xc6\x8f\x95\xf2\xb3\x92\x08u\x0f\x0b\xa6\xe8k\x07L\x83\xd8\x0b\x83\xb2WS.a\xc8|\x9b\xb2\x04\xa6K'r\xd7\xf4\xd4\xc1\xc4\xbb\x07\xaa\xcb\x0b\xc2e\xaaWu|\xae\xc1\xfe\xf3\x01|6\xe1\xc1\\\xe7\xcb\x84\xccbD\xfc\xbf\x80\xe1O\x96\x98\xc5\xff\xe3\xc6\x17\x8e_\x10M\x84q\x82\xb5,\"6f.uv\x111\x9e\x92\x0b+\xe8\x9cifD+\x9c\xf3\x90\x9e\x86D\x18\xdc\x89\x9b\x90eD\xdet\x96@\xecL\x18\x97g\x0cH\xa8\xc1\x92\xf5S\xb2\xcb\x11\xf7\xb7\xb8\x1eQ\x16\xcb\xd2I\xdc\x81\x83I2\x0f\xae\xd6Z\x06\xe1\x1d\x0f%K\x85\x93\x0c\x04\xa7\x90{\xa8O\xc5!\xbe\x8f\x93rs\xc3\xa9\xc4\xab\x8b\xee\xcd\x0d\x88@\xdf)%ys\x03<\xe2\xb7\xb2iUO\x0e\xd0\xb8\xed\x83i\xb9\xec\x86\x82\xfbqwJ\xfc\xcc\x81,|b\xe1\xe3B\xbc\xe6\x01F\xaap\x18\x9a\x87\xb5\x7fa\"-\xde\xb5\x80\xe3\x81\xe7\x037\xef}|\xab\xae\xe0\x1b\x89_\xb38P\xf4\x8d\xea$\xd1\xd2g\xcd\xc6;\xfa\xa2\xfd\x1e7\x93e\x823|\xcebo\x1a\x90=@\x8b[W\xb7\x83x\xc1\xc6\x14\x00R\xe1\xc0{\x93\xcd\x15w\x13\xc6\\\x08B1-\xc4\x86\x9d\x85\x8b\x07\x04\x88\x0b\x1e\x07M\x81p\xf4\xfb\x18\xae\xda\xad\xdc\x15\xe5\x85\xe3\x05t\xac\xfaf\xec\x87\xf12b[\xec\x1c\xb8\xe0xP\xe5V\x0e\xee-\xa9\xf8E\xd0OYo~v\xfc%\xae\x02a\xd2\x81+\xca\xf1\x02\\ZKrbk\x08+pE\xe7\xf1\x8d/\x8b\xcem]O\x98\x0c\xb8Q\xb8@\xce\xc7\x8b\xe2\x04:N\x9c(\xe0.\xe7\x8b\xa2)\xc3\x1fK\x92\xd3q\xeb\x05/paB\x99\xa7,\xf9\xect\xbc\x18\x17\x8c\xeb\x8dY\x0c^l\x90\xed\xfb\xef\xa1\x17\x88\x93\x1b\xec\xde\x1b\x87\xd3\xc8Y\xcc\xbc\xb1\xe3\x9f\x85\xf3\x85\x13\xb1\xd4\x04!o\xa4\xa2\xc3\xdc\x0bJ\xcf\x01\x17\xd1\x9fa1\xb8\x8e|g\x11\x03E\x9d\xa3iYs\xd5+\xac\x10&\xe4\x86XX \x88s\xe3\x85\xa1\x8a\xb937\xe6\xe2\xfd\xc2\xf7h\xb5DI\xfc\xc5Kf\xe4R\xd1e\xb2\xde,~\x82\x19\x97\x13\\\xa8\xf1\x9d\xb3\x80$<\xc7\xa1\x14\x92\xb6$Lo\"'\x88\xc9>a\x19\xb8,bq\xe2\xcd\x9d\x84\x9d\xe1L\x88\x85\xf4\xdeK\xa8+w^2\xc3~\xd2\x0e\xc1\xdc\x8e7a\x897gpE\xb9d\xbdy\xc1\x83\x8d^\x86\x84\x86b\x1d\xb2;\x05\xf8x+;\xa2E\xd2^$\xd4\x08\x7f\xdf\n\x80\xbe.owj\xa0~d[\xe1\x8f \xde\xb7\x7f||\xc1\xe5\xba8\xf7b\xb19\xfe\xc8\x96\"Nn\x8e\xe1\x9c\x80\xca|<\x10\x8b\xf8\xb6\x11\x15:C)\xf8\x8a\xcb \x0dq\x85\xedih\x01:\xd7\x08\xa7\x92\xe8-\xf7S\x92\xf8\xe3\x191\x1f\xfd\xdb\xdd\xae\xbaI\x16\x16]\x94$\x88\xdb\xb2\x84\x93\xfa9\xc3\x84{ U\xf2\xbbM\xdbe\xde\x862\x92y1\x95$\xf3\x96\xb4\x8b\x15\x99'\x80@\x96\xe5p,$\x95\xed\xd6\xb0\xef\xf3\x84\x81W\x02\x93j\xf9\xedH\xe6e-\xd2\xed\x80W\x0f\xc4F\x1a\xdb5\xa77\xba]W\xffV\xb4\xfc,\xbap\xdd}-\xf6\xf3\xdaPK\x8e\xdezwv\xfbB71\xe2|\xfe\xccr\x93\xcd\x16\x1bOuwe\x87)\xf0\x15\x9a\xb9\x12\xa8B\x86\x18\xc6\xe4GW\xd6A\x0d\xf9\n=P_\x1d\xbd5\xd8\xa2#\xea\x7f\xafn\xa9.\xa4\xf9\x8c\xe9\x9c^ \x08N\x81\x01}\xf1\x14.\xec\xe9zJ\x1c\xa3\xb28]\x88\xebQ\xb0\x1d&'n#$`\x05dV\xd3\xad\x11OG\x0cg\xde\x12\xa5\x84\x93&W\xac\x90H\x86;\xef\x9c\xa7K\xe8\x17\xe1\xf5M\xc5\xa9\x82Q:\xc0\x8d;\xa3]\xf4\x191\xf3L\xdfw\xfe\xc0\xc7\n\x83U\xbf$q\"\x87HL\xa4jNt\xa6\xc4d4 \x02\xd9X\x0d\xd2[G\xf9\xfb\xab\xd4\x02K\xaf\x02U@\xd5\xb1\xa5\x8a\xa3+\xeeE\x9f<\xc6;\x14\xb4\x90<\xc3\xb7=\xe9\xa0\x8d\xb7\xb6\x9bj\x94o#\xb9\xa6T\xfdu]\xb6kP\xbd\x0c\xf5\xf0@{\xd7\x9e\xady\xee\xba\xf53.\xcb\x81\xbcW<]\x8a+\xd7\xd5\xbf\xc3y\x94\xea\xe5\xba\xea\xef\xf0w\xe9\xbaj\xa1\xbe\xb2]w\x1aR\x90\x83\x11\xdea\x0d\x17\xf5N2\xf4\xf0 \xee\xec\xce\x93\xcc\nB\x19\x9a\x82\xa4\x80\xee\x9f(f\x90\xa1\xfb\x98\xa81\xde\x7f\x84I\xa1~\x1fc\x12\xd1\x0c=\x9ab\x12S\x8e\x9c\xab\xaf\xb9\xa3\xc4\x97\xd4\xd3\xab\x93\xach\xb4H\xfc\xc4u\x13OI\xa1\xa2\x90\xa7Li\xf9e\x99\xef\x91\xecLo\x05\x8a \xc3e\x89\n\xd7\x15(!\x0c/\xe2\x80\x854 X\xe8\xc3\xd3\n9\x86\x048\x13\xb5*Ub\x97\xa15F\xf2\x18\xefiPIw\xea\x01\xeb\xfb\x8e\x95j\xfa2\xcbD\x864]A\x0cO\x9c\x11\xcfG\xa9\x90\xa3(57i;\xf5\xc5\xdd={\x8d \xa6\xb6\xeb`\xe3`\xf3\x0dd\xce\x1a\xe8\xbag\x18\x84\xcf?\xa5\xc7\xf7\xee\x01\xf3I\x8a4\x1b\x1d\x01\xef\xf1\x8f\x8f\xd5\xdb\x97\\\xb1\x9e\xd1\xd1\xe8\xf9\xe8\x9c\xcbQ\xc2\xbf\xb2\xd1\xa9H22:/\xe4hS\xc4\xebQ\xbe\x89\x92\x84e #\xc0\x80\xf2\xd19\xa8\xf5\xa3\xa3\xd1\x89w\xdf\xfb\x11\xaaV\xca\xa4NE/\xf0\xe8d:{2z\x9f\xf0K\x96\x8d\xde\xa9T\x9e^D \x83\x9c\xff\x99\xf0\x98\xa59\x1b\xbd}}\xd6\xe1rF\x12&9)HDb\x92\x90\x15\xd9\x925Y\x92\x1brI6\xe4\x82\\\x93+rNN\xc9\x07\xf2\x9e|%/\xc9\x1brF~%_\xc8\xeb\x01\xe2\xa2\xc4\x83\xd7\xdeO\x05O\x96,\xab\xa5\xfe-\xdf\xb2\x84\xa7\x0cN\x1d\xbd\x86\xdb\xa47,#\xaf\xbd\\\x8a\xed\xef\"[\xbe\x02\x1d\x12\x12\x98\xfa\xa4D -\xad|h\x17\xad\xbe3\xb3<\x80\xf8\xe8SX\x08\xef\xe6\xaf=s\xce\x85:\x00(G\xcd\xc4\xb8\x9a \xaf\x90<\xc9\xbf\x0fz\xc7\xe4\xb5.Fow\xf6\xd1\xbb\x8a\xb2\x94\"\x01\xe2#i\xc2A(\x89.\x17 s]\xf3\x00y\xdbo\x88\xe1\x1d\xae\xea\x8a\xf2\xaeNT/0E\xd6)e\x0b\xc7\xf1Y\xc5D\x11\xae;\x02\x07\xd2\xbb+\xc5\x94\xea\xc7\xf4\x95C\xdc\x8cd\xad\xd0\xb8\x0c\x13}e~f\xc5\xdd\xd4\x8a\xbb\x9cfA\x1a\x12AY\xc0A\xe1\x02\xb7=\x8f\xe7\xf0\x8b\x04\xc62\xe0!\x15\x1e\xb8\xf3#\x94w\x9d%}\xca\xe4\xf7/\xe8S&\xbb\x8b\x06\x1ab\xc646\xb8N\x98A \xbd,h\xa5\x0e\xd6\xabk:\x97-ESN&\xb8Uo\xa0D6\xa5[\xea\xe8\xc4\xcd\xea\xa6;\xdd/O\x9f%\x92\x8cj\x93}\xceb\xe9\x0f\x898;\x02\xa1\x0d\xf7|\xb3V\xbf\xbe\x0c7\x9e\xeelS\x10\x91b\xb0\x9d\x96Y\xe6\x9fniV\xb5Tc\x91\xcd>@\xee\xc6\xe3\x0e\xb0\xc2~\xf1\xaa\xaf\xfd\xe5C2\x92\x12N\x03 M\x8cR\xda\x86'n\x8c\xa8\x9d\x03\xc0PS\xcb\xc6\xacT:\xff\x02IM\xec3\xca\xb0\x8f\xa4R\xc4 A-\xac&\xf9\x94U\xf7q\x1dJ\x9dN\xe7\xe2ij\xb1BXz\x9a\xd34\x10\xe1<\x87\xcb\x7f\xaar\xae\xcb\xb5\xfe\x9fWa\xaa\xf5*=e\x12q\xdc\x07 L\xce\xa0\x14\xdc\x83\xc1\xa2\xfd\xeaw`\xb0P#\xf2\xeb\xd6Z\x03kNMe\xb8hq\x8e\xfa3\x86n\xf2\xe5j\xc0t\x97\xd1i\x05\x99T\xeb8\xceg\xa0{\xce\x98\xa6\xae\x8b\xb2I\x9b!)]\xbb\x8a\xba\xae\xf9\x10\x92G\xd9\xc4{\x88\x8f\x11\xfcXj\xa6d}/\x11\x17h6\x81\xc7\xe8D\xd0)\xc9a\xc9\xd3\xb4^\xec\x05\x15G\xb9\xb6\x1c\xc4\xeb({.\x91\xc0\x1e8.\xa3\x06P\xbc\x9cm#\xd8,\xc4e)(\xd5\xe6\xa6\xe2\xd9\xd4\x1a,\xbb\xdd\x84k\xc2\"o+r\xd8\xfe\xa0AN\x8a\x90DZ\x90\xa8n+ \x86\xa44A\x92\x19q '\x02\x93\x08\xe3]N\xc5dV\xc9F|G\x06\xfbE\x8f\xf5-aG\xe1\xe4\xb8\x83\x15VX\xff~\xa4\xb0%\x9bk\xcar~}\xc9\xc5\xae\x91\xcb\xb3A\x81\xd9\xd2*\xd0\xc3\x1c{\xa0\x88-\xd0%\x05\x8a\x10A\x8b\x03u\xbbnS\xeeG\xce\xfbK\x96]e\\\x8da\xc4\xaey\x0e\x0fu\xb9\x91\xad\xda\x1f9\x13\xa9\x0ft\x9c\xb3\x84\xca;\x86\x10\x98\x8c!e\xad\xd1\xaaF_\xafl\xb6wB~\xac\xca\xb6\x96\xbe)\xae/f;g\xc9\xa1!\x95e{H\xf6\x83\x95\xa9\x1b\xa3\xb9\xe2r=\xaaT\xb8\xd1\xd9\x9a\xe7\xa3Mt3\x8a\xa3\"g\xa3m&\xce\x13\xb6\xc9GWk\x96\x8er\x96\xf1(\xe1\xb9\x02\x88\\\xb3\x11`\xa1\xf7\xe9S\xea\x18\xb1\xb2\x1aT\"\xa2\xe5^\x0d\xd2\xe6\xaa\xd4wo%\xb2\x97Q\xbcn\xafs\xbd2\xef\x02\xaa\xdd\x1a\xaa\x15 \xa3D\xbc\x80\xe3\xf3#\xd5\x93Q\x91\xee\x99?\x86\xe7\x12\x94\xcf\x0c\xa2\xcc\xcb\xd6 jB\x1c-\x97}c\xba&Yu&XoZq\xad\xae\x95\xc6\xf3=\x83\xfb6\x04P\xeaZc\xa1\xe8U\x0e\xea%\x08'\xfbz\xbb\x92=\xfa\xfb\x8d\xedIl\x94\x8bf\xabVka\x95\x96\xb2\x1f\xdc+\x9e.\xabU\xf3*u\xf0<\x9b\xd0Yk\x10\xfa\x9a\x0f\x94\x91)X\x05\x07\x87\xa0\xc3\xb9\xfc\x7ff\x0c\xdf\xdb\xfd\x8cm\xc4%\x1bX\x00{\xbat4\x1bS\xe9\xba\x03\xcdH2\xdb\xdbH\xd1\x16\x0bkE\xa5Y\x8f\xe1\x10J,\xcb\x9e\xcay\xa6\x18V%\x9f5s\x06YX1\xb8\xb9\xa8\xb7\xc3\x9a\xf2,b\x81\x08\x89 \x1a\x8azK-w]\xc7\x19S\x9a\xe3\x1e\x1b\xcfqe\xee.\xe8t^T\xb7\xed\xcc\x8b\xc9\x04[98(BmK\x18\xd5\x921\xa3|W\xcb4\xfb\x86\xdf\xd3\xb4k!\xb4%\x06\x11Yo^\x02\xc5,R\x14d!\xde+[\xb4\xac1x\xff,\xe7ME\xf3 Ok\n\x98\x7f>}\xffn\x9fxifm_\xc7\xbeq \xb0\x8a-\xa9\xdew\xf8\xf8o\x10p\xfe\xfb\xb9\xb8.\xd7B9\xdd\xe5Mt\x91rY,\x19\x9d\x92\x96\x1e\xa1\x84=\x0d\x07]\xb6\x01\x05+\xd1\xbc\x12\xd9k\x90e\x9a\xd5\xf2\x15\x9a\x1a{\x83\xad\xcaj\x08\x06\x0e\xd3\xa6Znt\xb5n\xde\xe3\x13%\xbb\x1dI\xc2a\x97\xc0[%Bd(=\x06;z\xab@pr\x8f\x87\xf3\xf4\xd9\xccu\x91x\nv\x0d\xca1\x11\xcf\xd4c\x06\x8fc\xca\xf0\x1c\xdb\xfa\xe4\xe4\x9bj4\x9d\x15 \xf5\x8aglqr\x8f\xfb\xe2\xa9\xfaE|2\xc3\xfe\xa5\xe0\xcb\xd1t\x10@\xfa|\xed\x90JSl\xd5\x170c\xa1\x16\xf2e\xe2\xcaY\x16\xda;\xc10g\xc7`o\xafz]\xc9\xb0Q\xac9\xa1\xf3\x06\x9d\xe8\xce\x99\xa2\\\xedQ\xa7!\xa5l\xd1I\x9b\xccB\x9a\xa1~\"\x91\xd8o\xcf\x9b\xa1y)\x99\x12f\x88k\xaf\xe3u\xdf\x1ac\xb7\x06\x9e\xba\xe7\xb8\xb5\xa8\xaa\xe4\nm\x00W\x07\xd1\x86dtfH%=\xb1{\x17\xed\xdeg\xe1\x9cMhz/\xdd\x0d\xb7\xa2\xf1-\xff\x87\x9a\xa5\xe1Q,\x85\xdcC\xbb{\xd8\x0c\xa6\xbd\xea\x85\xd7\xda\x88\xa0\xd6\xe6\xa0\xf4\x11R\xd0)\x89\xe8\x94\xc4t:\x8f\x9er\xd7\x8d\x9f\x8a9F9\x85;\x87\x9f\xa2\x82\xa6A\x1c\xe2E4\xa1'~\xfe\xacX\xc4\xf0@i\xa1\xf0}\xa2\xb2Mf\xe1\xbd4\x88\xd5\xdc\xa8\\D\xe5\xa8)\xe7\xe0@r\xbe\xe1I\x94qy\xb3W\xf7]\n\x05\x86cx\xae@\x84pY\x0e#\xbe\x14\xc0<\x9a\xd3[O\x9a\"\xeb\x9a\xb7\x0c\xafxL$\x9d\x01\xb33\xa6\xbaN\x8e\xb9T\xe3RL\x90\x05Y\xd8\x99V\x19\xce\x9b\x93\x8c2\x19eE\xee\x89\xec\xe2\xf8\xbf7Q&yz\xfcAd\x92e\xa7\xba\xb1\xe3/\xb9'\xaf\xa5\xa5\xdc\xa6\x0b\x14\xe5\xf4\x16\x1c3\xa2\xc4w\"\xc9\x1cb_$\x04\x99bi\xcc}\x87\xa51sH\x04\xcf\x11<+\x15\xd1w \x88\xdcy\xc2}\xe7}\xfa4S\x9d>ow\xda\x99\xc4\x93hb\xe7\xfb\xea\xfa&T\x99NM\xa3vD\xf8\xe6\x87c\xf2\xa1\xea\x89Yq\xa5\xf9Q\x8b\xacT\xab\xabT\xcb\xaa\x8a$\xa3S0\x9f\x18\xe5?{\x9a\x82\x01\\\x1a\xeb\x1ab\x8a\xe5\xd7\x9e\x8c+\x9e\xf2|\x8d0\x91^&\x84\xdcu{\xf0\"QTq`\x96\x1d\xb6\xe4\xf2gs\xb6\xce\xe1\xe9\x88-:E_\x15\x7f\xfcqc7\xa7=\xc9\xb2\x0da^\xb3\x14\xf6;%Z\x99q\xaf/\x8d\n;F\xc2zW\xbb\x0d\x15\x92\xd2\xe06\x15K\xe6gD\xb5\x9c\x7fd\x9b\x88\xa7<\xbd\xf0%\xc9e\xe6\xb3]8\xaf\xdcX\xacO`\xeam\xc5\x16\x81\xbd\x9f{\xb9\xb4\xd6'\xbbe-HNu\xba\xd9\xf6\x9eb\xed\xf1\xc2=\xd5\x94\xc6\x89\x85\xa0\xcd\xd7 \x0f}$\xba\xbd\xeb\xe4\xa0\x02\x93\x19\xa5\xcd6]\x17 \x8brSLR\xbd[\xa0\x87$\xbaC\xe2^;\x01F\xa8k\xd3\x1b\xe33\xbc\xc3;\xbeB\xd31\xed\xe6\x05N\xee\xdcs:\xc3\xc0z#\xa3\xd5Q\xe7\x9e\x13jG\xc8\xa23\xa0y/\x1f-v\xda\xb2\xdd\x19T\xb1oP\xc5]\x83:\x9a\xd5\xc3\xdaa\xd2\x9a\xa0\x99\xeb\xb6*\xd3\xdd\xf9\x9e\x1a\x1b\x80\x1a\x98\n3\xbc\xba\xeb\xad\xd6\xe9\xec\x10\x10\xa3}@\x8c\xee\x06b\xb4\xeb\xf7%\xda\x07\xc1\xe8\x9f\x1c\xef\xae\x8b\xee3\x8d\xee1I\xba\xe8NV\xed\x94\x19\x9e\xafz\x0b n\x0fx\x15\xfa(>\xb8\x00V!\x8d\x87\xa0\x1e\xef\x1bi\xfc\x8d#M&\xcd\xb1\x9e\xa8\xb1VN!Y\x8f\xca\x0c\xf8\xb2\xee#\xba$\xa3\x8a\xc4L \xaf n\xfa\x94\xd7\xfe\xc5\x82\xb2 \x0dINSJ\xf9\xd1l\xae\xd1\x83R\x81\xa5\x19\xb4P\xf2\xb54#\xcc5F\xe85\xd7\xc1\n\xbbbr\xd2(Z\x10I\x8b=c\xf9F\xf3r\x10\x12I\x83[}F\x1fL~\n\xb4\x8a\x9d\xed\xc2\xb9l\x93\xc6\x8cJM\x1a;.\x82Y\x13\xd9 \xaf\x8c\xf4\xf3\xac\xb1`\\\x17e\x9en\xa6\x81ILO\xa8\xfd\x82\xbb>\x86\xbc\xe7\\h\xce\x12\xda\x1e\xd7uV\x87O5\xc1o\xd3V5\xe7MK\xf7 \x98\xfanp\xd5.K.3\xdc\xd9\xb4\xcc\x1a;+\xb5h\xb0pf\x8e\xefL\x1d\"i\xdf\xd9\x10\x00\xe4\xc1\xd9l\xac\x90\xc7nf\x18\xff\xf4\xa6c\xba\x0c\xd2p\xce(\x9b\xf0I]6\xe0\xa1\xc7\x97w\x0dd\xd8\xa3\xf4\x00\x12\xeb=9`\x96\xffx\xa7\x80\xc7\x88(\xe4\xb6\x90\xbel\xa1C\x83Sf\x15\x97\xacO\xa5\xb6Q\x02j\xb28!j\xc7\xad\xfc\x00\xea\x14\xb4\xda\x92\x8a`OG\xcc\xa3\xc9\xa4\xdaQ\x8f)\x0f\xa2\x90$t:O\x9e\x16\xf3\xc4BkE\xf3 \x01\xaf\x98\x15\xa5qY\xc2\x1a\x8b\xf5\xb7-\xcd\xdaD\x86\xaci\xabsA\x1c\x92%\xddZ$]\xeb\x07rc\xa0\xa2)[\xe6i\x80\x18\xda\x86nh;%X\x85\xd8,\xd0\x1b\xfd[\x96K\x1f\xa1\x9b\x0e\xb0m\xa6%\xe9\x95\xa775y\xd3\xb3\xb0\xb6\xb3p\xa3ga\xdb$\\mQ\xcdH\x7f=iu\x9b\xb1K.\x8a\\i\x00\xd4z\x84*A\xaf\x8b\x04z\x9b5\x8d\xd7,\xfe\xca\x96\xaa\xf9\x1cH\x03\xec`\xf1\x94o\xf8\x1f6\xb9\xe1D\xdah\xfa\xd0>ne\xa4\xa4S0N>\xed\xf5\xad\xef\x98\xf2\xbe\x90#\xb1\x1a\x89l\xc9\xb2\xd1\x95\xc8\x96#]-\x17\xa9S#\x9d^8\xacb\x16i\xbf\xea\xea\x1b\x83\xbd\xda\xdew\xb5\xce\xd4\xba\xcb&\x93yk\xb8(\xc3DR\xbb+\xdf\x86\x8d\xa9tQ\xc1\xd3\x1f\xc8\x14\xec/x4\x0b\xbdx\xcd\x93%\x8c$\xa5Yc\x14M*\xd0\x99%\xcdO\xe6\x0d\x0e\xc0\x87f\xceRH\xb8\xc3\xd0\x97D\x91[_\x10h\xd0\xe7;5,\xbe\x93\x15[%}TawL\xb1V\x1bz\xe8V\x81n\x8a\xef\xa8\xc0\xe6<\xe4\xce\xb3\x07rs\xf9\x8c\xb2\xb9<:\xaa\x98\xd2\x10\xe8C\xf0b\x85!7LQ\xf3\xb4\xf2!lc\xf5\"\xf34\xb8\x0ch\xb5lc\xb6K\xdbY\x834\xf4\x91\xadZ\xf1\x01\x9a\x0e\xad\x13\x85m&\x17\x1e\x9e$E>w\xdd\xbdSp3\xf8~}\xb5\xefQ\xa25\xd2\xf4\x92e\x92-\xf5g\xd6~o\x9c\x00\xd2\x1b\xbf9e\xadW\x9dAZU\x98U\x8f\x8d\x92U\x19\x93\xdb\xfaURV=\xeel\xff\x9a\x9b\xe8p\x18n\xef\x06\xfa?\n\x96\xdd\xb4\x03g\xe8\xa5\xf0\xab\xfa\xf0!\xcar\x96\x81\xea\xa7f-g\x95\xcbR\xb7\x19\xa8\xe7 \x1b\x84\nQc<\x8d\xe3c-\xd7\xdb\xc1\x83\xd3\x84\x0f\xa6\x8a\xc1\xd4a\x97^\xed&\xd6\xe8\x80%\x03\xc5d\x82\xd3\xa0\xf1!(\xc2\xd0\xf4ZO\xd0\xbcqh\x10\x08\x89\xa9\xcb\x8bAko\xd5d\xbc\xad\xaboA\x11\x92\x98\xc2)\xeb\xa4s\xa6b\x1e\xd3\xc8+rfM/\x8b\xd6\xc4\xd6^h(\xd2Z\xfd\xad\xee\x9e\x1f\x99~\xee\xb0\x1f\xe8OaE\xa8Wt:_=\x8dm\x8fV\xb6G[\x1a\x07\xabp\xae\xb3\xd3-\xf8\xde\xac\xe9\xa0\x11\x02E\x98,i\x0b%kQ\x07\xad\xb1\x95s\xb5\xe6>\xa5\x94\xd6\xb4?R\xe4-gi\xac\xcf\x87\xc0\xa4WI\x9e U\xf8s\x8d\x1d7t:\xbfy\x1auf\xe4F\xf5Z\x04\x1f\xa9\xfd\x10\xdc\x84a\xf3\xb8\xc9\x0eb\x80UQ6.\xe9t~\xf9\xd4\xf6b~i\x07\xbd\xa1\xcb\xe02$\x17\xb4\xbfF\x83MH\xae\xe9\x85\xa7\xcf\x8f\x00\xf8\x0e\xf4EUvE/:=\"\xe7-\x11\xeb\n\x93S\xba\x998\xc7\xce\xe4#\xf9`\x10\xe8\x94It\x0e\x80j\x82f/d\\\x17%4\xd1\x07s\xd0\x07L\xb4lD)\x15\xc1\xc7\x10\x02\x8c|\x0c\xbb\xa7\x930\xa9\xab\x1e\xf7\xab\xfe\xf0\xf1\xfd\x9f^\xff\xf4\xfaL\x81\x9d\xafP\x1a|\x0c\xad\x9f\xd75\x89\xbcs!\xf2\xa6\xb7Wk[b\"w\x18\x931\x0fN\xc3z\xce\xde\xd3\xe9\xfc\xfd\xd3s\x0b\xa0\xf7\x16@_\xc9Kz\x1e\xbc\x0f\xc9\x1b3\xf6\xeap\xe0K\xf2\x11\x933z\x15\xbc\x0c\xe7\xd5\x88\xd0W\x9a\x05oB\xbcP\x7fM\x89\xea\x96\x05\xb4!\x1f\xc9\x19\xf6\xbf\x82\x07\xb5~\xd9\xa9n\xd0\xf1t\xa7\xb7#\xab\x8ar\x0d\x9a\xbc\x06\x8d>\x96E %\x87\xf1\x1ax\xeev\xbb\xceL\x1c@\xd2;p\xa2\x87\x9fjn\x1a\x0b%\xc1;\x88}\xf3kg\xbe\xc8\x97f/\x9b\xe4d\x984\x01l?\xceUs\x1d\x1a\xe5\xba\xe8W\xfak\xa3I\xd5\x03\xac\xc7\xed\xba\xe8\x0b\xfdb\x06\x9eC:\xf4\xe6s[+\xc0\xe4\x95\x12?_\xec\x0bV!=\x9e\xbfc\x17\x91dK\x84\xf1\xed\xe7\xbe\xae\xd5\xe4cM\xe2\xf8\xb95\x867\xf4sP\x84@u\xde\xd1\xc1C\xad\xe8\x0d\x9e\x0fa\xc2n\xb7\xafNU\xd9s\x8a\xf6\xd5\xa7\x1a\xc4\xd8\x1c\x07Uc\xf9\xb5:A\x88\x9ec\xd7\x1d\x7fi\xbe\xeb\xea~&oioT\xc1\xbb\x90\xfcD\xd3\xe0]}\xf64l8\xa7\xa1\xb7\x00)\x8d\x8ecJ\xd1\xcf\xf4E\xf0<\xc4\xf8g/\x8fE\xc6&\xf4'\xf2\xb3>\xaf\xa3\xc6\xa3\xf0\xe0\x9c\xa7\x0ce\xc1;\xe3\x9c\x0cM\xffFo3\xb6\xf2\x9f\x13(\xe4\xffD\xaa\x12\xbe\xca\xb9\x9b\xabJ\xe9o\xe4\x95\x16:\x7fk\xa8(\xaf\xb4\xa6;\xbc\x86\xa5\xee\xc5\x11\xd3\xbf{\xf8w\xdf\xffL\xeb\xdb\xbd\xe9n\x11Q\xabb\xef\xf3)\x0e\xcc\xe1\xe76\xe5eahO\x19\x0c)\xef-\x84\xba\xab\xe6\xd6<\xb1\xd0\x8c\x03\xe1\xaa\x05c\x81\xbf5\xa7\xfb\xfd\xea\x9c?1\xcc\xb4\xb1\xa6H\xb36_\x92V\xb7}F,g\xf6\xdb|\xda\xb6\xb9\xab\x01\xbb\xe7\x8c\xca\xed\x8ed\xeaO\xda\x95\xff\xf6I7]A2\xdf\xb7\x1bQ\xd0\xce \x19T\x8b\x85x\xce\xec\xa0\x15{0\x8f\xdd\xa3I&\x0e\xd2h\xc3s\xc0<},GU\xc5\xd3\x8b\xeax\x0e[\x9a\x939\xa3\x17E\xa6\xc4\xf8\x91\xa9N\xe9\x90\x10\xb2\xe2\xd3\x7f8\x93\xaa\x91\x89\xf3\xe9?\xea\xc3\xf5\xba^S\xd5\x1f\xb6*(\xc1\x9a%\x1az\xa7\xb6NT\xf6\x90\xc8\xae\xfb\x98\xa2\x15M\x83(\xc4\xc14$ ]\x05\xb3p\x9e\x05q[nS4X\xd5dl\x1c\xbdZVd\xab\xea\x11\xb6\x9e\xb5\xae\xc7\xde@\x84\xb6\x98\xf0`\x1b\xd2\xb5]iys\x1f\xa7'\x96\xb7E\xfc\x8c\xc8\x8eZ\xc0\x89\xac\x85|\xad\xce\x92:\xc6\x05-\xcc\x01K\xed\x00-{\xce\xf5f\xae\xbf_g\xd9g\xb4\xf8\x9c\xb1\x15u\xf8\xd2\x98+>\x9b\x01\x0d\xa1\xa2\xce\xb04\x11\xb8\x0e\xe4i\x8fxo6h\xea\x8ce\x9bW\x19\xfbG\xc1\xd2\x987\xb6\xf7\xe0\xe3\x1b\x98\xab:\xb1>\xfd\xd98\\\xd8Q\x85\xd2\xd6\x190\xfd\xb1\x1d\x0dd0\x8b\x1d\x16\x04W\xb4\x07\x0d>\x9fS\xef\xf1C\xf3\xfcuFg\xde\x89\xe9\x08\xcb6zt&\xa7=\xeb\xfa\xfb\x9aK\x96\xf0\\\x9a\x03\x1a}e\xae\xde\xef\xa1\xd9\x91~>\x9f\x98\xdf{\xa88\xde\x83NA\x1eb<\xb9\xc6\xe4\xf2\x1e\xdd\xaa?k\xb2\xd1\xc7\xc9\xe0Zm4c\xf7\xef]\xe2\xe3\x19\xbb\x0fQ @\x02\xbe\"\x1b\xbcS\x8c\x8cF\xbbzb*+\xf6!\xfc\xdc\xeb\xd9U\x89\xc0CNX\xfd\xc81\x83\x1a'\xde#\x96\xa8\x94}\xa7\xa8\x0e\xd1&d(_\x7fi\xb5\xbf\xd8\x0e#\xdc\x12\xd6o\xdb\xaab\xbf\xdf\x1d\xd5\xb2\x0bIba\xe2\xb7 du\xd4\xbd\xb4\xa6\xa3\x92\xb6e\xdd\xdd\x1e u\xfd\xcc\xb4n\xfa-!\x07\xc8\x0c\xcf\xa5W\xa4\xf9\x9a\xaf$\xf4\x04\x13\xe6\xc1-\xf9:\xde\xa4>XY\xd9nZ\xa2\x1b\xc9\x9a\xa7\xc3\x0f\xda\xf8\xb5mJ\x89i\xd8\x1c\x19\xb7\xbb\xdaM/\x05\x1e\x88\x10\xa89U\xc4\xda\x86\x8e\xd3hZ\x05\xe3\x19j\xa72\xd5Ta\xc6*^\xca\x0698\xe9f\ndH\xd3\xf6X\x9b\xf8\xaf-<{\xb6C\x9acd\x8d\xb89\xe6\x18\xbd\x1dhf\x07\x9aR\xa9\xcf\xcf\x0f\x17\x0c\xd2\x107\xf9\x7f#\xbd7\xba\xf4\x0e\xf9\xe40\xacI\xb1\xbf\x0b\x10\xc2z\xb8\x17A>\xd4\x115m\x07\xfb\xa2u\xf6b@\xf3/\x82(\xdc\xdfV\x10\x87\x8b\xe1d\xda\xedq\x10\x87\xfe\x9e\xac\xc3\xc9U\xc4\xee\xfe'+\x12\x0d\xe1CW\x89Q+\x81\xaf\xd0\x18\xb1z\x93\xd4\xa2A\xcb\xf9\xe5.\xb4T\x88\xdcC`\x85\x9b:\xe8\x9f\xecU\x1f\xb0\x10\xf7\xd6\xa0\xb5\x04\x1f\xd6y\xe6b\xa8\xb6@v\xa1\x0di\xe0n5\x98\\E\x99\x0fD\x88\xfd=E\xd5\xc7F\x9c\xbb\xee\xe0\x14\x9c\x7f\xedm8j*\xad7\xdd*\x97\x8a(I\x80\x98\x1b^\xa5M\xfdW\xd5O\x8d\xaa\x86\xe1\xde:\xf8E\xda\n\x0dV\x05\xfaT\x80\xaf o\xa5Y\xdd\xa5\xef\x9b\x9c\xf3(\xfeZl{-\xa8\xfe\x1d\x80t\x14\xc7l+\x7f\xe6\x17\\~l\xafi\x00!\x91\xf3\xa5\xb8\x95\x14\x19`\xaa\x89A\x18\x03@_\x88%\x03\xe6\xba\x833qH>{\xf0\xd8u\xe5\xd3\x87?\xe2y\xcd0\xaa91\x81\xc2t7\xd1~\x94\xdft\xe0\xd4\x01v3\x96q\xa7\x8e\x97\xefO\xa9\xf3\xf2\xfd\xa9\xd3N\x86\xcb\x89\xa9\x03?\x9dOg/?\xbe\xa5\x8e\xfa\xdb\xf9\xf0\xf2\xe7\xd7g\x9f\x7f~}z\xf6\xfc\xdd\x8b\x97\xd4i\xbdv\xb2\xfe\xf4\xfe\xfd\xe9\x19u\xe0\xa7\xf3\xe9\xc3\xc7\x97\xa7/\xa1\x02\xfb\xd4\xc9\x90\xb0k\x10\xa4\x06\x04\xb0\x11\xab@E4\x1d@\xfdQ\xa9O\x1a\xb3\x10\xee\xd5\xacH\xefn \xb5\xc5\x86\xf5\xf1_\x8d\xe2\x08C,\xa9;\x1aV\xd0\xc2\xad\x86\xf5\x9c\xd5\x87\x84\xbf\xad#/\x1b\xc7\xc8\x86\xc7\xdfh\xa0\x8d\xa6{z\xd6\x9a\xa5o\x85\xc7O \xb0\xfeK\xda\x07\x14\xf8\xd6v\x15\xb26[\xad\xe7`\xaa\x04\xcc=p\xef\xd4\xa3\xc4\x99\xd3*\x08\xea`h\xd4\xc1\xee\xf4\xec\x07\xf3\xb95\xd60\xb3\xc6A\xcb\xa3\xbdU\xbco\x8e\x15\xd1\xe5+\xf4\xe4dLe\x9b:\xe8\x13U\xbeC\xa9\xdcW\x18\xd6\x00\x9c\xac\xf9\xeff\xb6\x16\"~\x0bt\x0e\xe2\x18\xd4\xff\xf7\x7fm\xfd\x80K\x10\x86\xd1\x05\xaa<\xfa\x97W)\xab\xd8\xbe\xfbp\xe8\xc0\x1a\xce6Zo\xee\x89\x01\xc6=\x05\xf2k\xb7\xde\x8e\x98_\xc9,Y\xd3a\x17\xaa\xaeB\x85j/_#@\xc5\xda\x01\xc4\x1c\\\xb5;\xaaZ\xeay\xbd\xbc\xa6\xd3N{\x0d\xee\x01\xbe\xc4=&\x08\x8d\xc3\xfe'n\xd6\x95\xd3\xc6W\x934\xef\xc9\xb2\xb6\x0d\xf5\xa3\xbb\xd4\x12h\xe7=\xa7\xe7\x03\xbdc\xec\xeb\x1bhg\x1f\x873\xbd\x08\xda#\x0e\xf7W\x19\x8b4/6\xac_kC\x04\xaa\x9bE\xed\xeeV\x0d\xb4\x05\xa0^#\x8a$t\x8f\x11\xb7Zh\xcd\xd8\xbc\x06\x85\xd5\xac\xec4wg\xb6\xd7d\x0d\xe4\x01C2k\x8f\xa4\n\xe6)\xb1\xbe)\x16IOu\x17\xdf\xc6Q\xceF\x83\x8b\xc3o\xe3w\xb3\xd9\x0fF\xb3\x9d\xf7K\x03\xb3=PT\x13\xb0~9E5\x0e\x14S\x8bjn.\xb6\xf2\xb5\xbe\xea\xb0\xeb-\x8b%[\x8et\\\x86Qdn\xd2\x10\xea\x11|\xb5G+Q\xa4\xcb\x913\xd1\xa3\x9dk'\x0d\xd9>\xc7\xaaC\xd6;:P2\xdc\xef\x05\x0e\x1b\x90K;B\x91\xae7\xbe\xf6\xee\xc8\x884\x8a\x82Tzjom\xb7a58I-\x94l\xcf\xd3m5Q\xb9\xcc\xf4<9G\x8e\xcf\xda\x88q\xc0*R[\x1d\xe6\xe0\xa8\x0d@w&\xdfS\x855\x8f\x99\n:\xf0/\xd2\x8c\xc5\xe2\"\x05\x874[fdoKn\xc3p^\xfb\xc7|\x03 \xb5et\x18\x87!\xa8z5\xfb\x10\xa9\x9ae\x1b5\xe90\xfbv\xceS!\xd7p\x97\xcaw5l`\x9e\xee]\x1c\xffo\xa0\xf7\xdd\x83S\xb0\xd5}\xfc\x16\xe0\xa6f\x8c\xa9\xc1\xd2A4\xed\x0b\xd7\xdf\x82\xa3&\xd4\xb29zR[;\xab\xd8\xc7\x1a{+\x87\xa1^\xbe}\xd7\xa2V.SN}\xbb(\x19\xa9\xa5\xd8\xc1;\xbd\xe4[\xc8FF[\x91\xe7\xfc\x98\"5\xd5n_\xdd\x00a\xb5!\xdd\xe2\x9bs\xcf\x81\xc8X\x9d\x1aZ\xc6\xf4\x19\xae.X\x1af\x92\x99e\x92\xd97\xc1\xbb\xc9\xf4k\xe5\xb2\x07\xfe;\x88\xc9\xdd\xb5\xec\xa3--e\xee\x00\x12\xb4D\xfc~5\xa0\x93\x1d(\xae%\xf8\xbb\xe5\x85\xbb\x07R\x89\x0fM\x86\x92R\xe7\xafi\xc5\xd2\xb5\xb85R\xe0\x07\xb4\xcc\xbe\x19-3k\xf34\x0bY\x0b\xe2\xcd.\x0dc\xea^%\xfb[0V\xe3\x13\xd4\xf3:\x95\x9a\xea\x91\xd9TGU\xc9\xdfE\xef\x90%\x82j\xf1-\xb9\x1c\xd9\x8b\xdaG\x9b\"\x97\xa3s62\xf7\xa2\xdf5\xbc;\xe8T3\xe2\x0c\xcd\x0e\xd2\xa91\xe5\xf8\xbb\xe8\xca\xdd\x13\xfb\x7f\xf0\xfc0\x9e\x1f\xc6\xf1\x7f\x9a\xf4~3\x8e\xf7-8\xffr\xe4\x86]\xcd\x7f1R\xeb\x9d\xd2\xff\x83\xcd\xff\x7f\xc6\xe6\xfa\xc4\"\xa7\x8e\xc5\xe0\xeaB^\x94\x0eX ^\xef\xf0\"\xb5g\x863\" \xc3~\x8aa/\xd9^\x12\xcb\xf1\x0e\xe1\xee\xdd\xb2\xc3W\xd8\xca\xec\xa6\xba\xe7Nu)\x06\xfbP}\xf9\xddtw\xe0b\xdc\x1f\xf5\x15\xbfO\xf4\x0d\xbf''\xcd{r\xd3E\xb7\x94\xe9?\xf7V\x90\"\xd0\x8cd\x187\xeesn\xe7\x83\xb8\x95\x19\xe9_\x92{\xe8\xf2\xdf\xfeU\xda\x0b\xbd\x8c(\xf3\xfb\xf0\xed\xdd\xc0\xdb\x1c\xdc\xc3\xe6h\xc6)B\xfd\xa9x<\xb6~.\x9d\xab\xb6owdFn/\xd8\xd0\xdd\x85\x8fw;\x1c\xcc\xc2\xdd\xa1\xbb\x93\x0d`\xef?0\x905w'?\xc4\xb5\x9fT\xbb\xc5\xb9\xf4V4]\x14=`\xf2\x15\x12`|\xa19\x92d<\xc5D\x80?\x0e\xae'~T\x98\xcc\xf5\xe4\xef\xf8\nATK\x9e\x8e\xb2\xb2tr\xf3\xd8\xbb\xe8\xd8y\x1e\xc7,\xcfE\xd6\xba\xe2\x94-\xabK\x8e\x1d0=@a%\xc0\xc2\x9cz\x90\x86{S;p{\xf4\xa3\xd6\xe5\xd1'S}y\xf4\xc9}}y\xf4\xec\x11&1\x8d\xbc\x0b&IB#\x8f\xa5+\x91\xc5\x8c\xac\xa8\xd9\xfd\xd4?\x18nh\x90\xc8\xd1\xaf\x0e\x9e\xa3\xe1\x0b\x95IF\n\xebK=\x1e\x17\xae;\x1e\x17^\x91\xe6\xd1\x8a\x91\xb8N\xa9\xefN'\xdb:5\x15gQv\xc1\xe4/L\xce\x07PM\x0d\xbfw\xe3\xac,K\x812\xe2\xa4\xd1\x869\xb8,y\xf5B$& \xca\xb0\x97\x8b\"S\xa2\x9b\xd1\x16M\x0d\xf5\x95\xdd\x0b\xe9C\xe4[6\xa64]\xa0h1\xde\xba\xae\x82\xb3\xeb\xa2\x98\x8e\xa7\xd8_\xb2\x84I\x06\xeb\x89\xc4\x0b=\x05>7\x00\xc7~\x95\x94\xc3>\xf7\x0e#\x1b\x9d\xb1\xb6\xff\x11\xc7:L8\xa4\xbf\x0e\x06F+\xe1\xce\xf2X\x1bH\xcd\x18\xca\xb20\x1e\x00\x87P\xff\x81\x99\xf9)\x84\x00\xee/\xf0\x81E\xbc`\xf6F\x92\xbb.\xca\xae\xbcM\x8d\x9d\xec\xe9\xc9B\xa04`!V\x13\xc1\xd5\x83\xaf^]7\xd5\x0eae\xc9\xe1\x95\xeb\xd7\x03\xb4h<\xdb{\x99\xb7\x85\xdd\xe1k\xcb\xed%\xde\xd8\xf8\x12\xfcH\x8ef\xdd\xeb\xbc\x9b\x0d\xde~#aTK\xb9\x02Z\xe3F\xffo\xb9\xb3\xbc\n\x13\xbc\xff\xd2\xf2\xc6\x0d\xe3D\xc0*}4\xd3\xabt\xaa\x17\xe9c\xb5Fa%'z%\xaf\xd4\n~\x80\xc9V\xfd>\xc4dM\x0b\xefw\x16}}\x1bm\x95\xd8\x93\xeb\xfa\xb4\x07\xdd\x9a\xdc\xd0%\xac\xefK\xba\xf4\xd6QN6t\xe9\xe5L\xce\xbbw\xe5\x99\xeem4\x14\x97p\x13\x0b\x91;\xc2\x87`}S\xe5\xc2\xfa\x1c\xda\x10\xaa\x8d.\xeb\\:.\x00t\xec\x82\xc2\xd5\xd1\x91d\x0e\x9eo\x83\x8b\x90\x8e\xa7dOob\xc4\xc8\xc5\xa1\x8e$*\x03^\xb0\xe0\"\xf4\xf7\xf6Cg\xda\xed\x1as\x9f3\xe9\xa7D1\x18N\xd6Q\xee\x0bbh\xdf\xd0u\xb8\x8a\x01,8Rr\x02b\xe4v\x87w\xaa\xa4d\xd9+\x91\x0d\xe5\xaf\x92,\x12\xabi\x19G\x10\xb5\x1be\x94#\x891\x88A\x8a\xad\xf6Y\xc2\xeb4\x16\x9bm$\xc1T\x95\xb1\x98\xf1K\x96\x91\x11X\xbeF\x19\xfbG\xc1\xb3\x06\x83\x18e\xbbC\"\x86\xa1\x06'?bo\x05\xac\xe0\x91f\x053\xcb\n\x0c\x96=2h\xf6\xe0\xfe\xf0e\xfd\xd5\x82\xac/\x93\xa7\xcc\x93@\xb1\xc9\x0de\xdeE\"\xce\xa3\x84\\R\xa6\xe46\xd8-\xcb\xe8\xcd\"\xf5/\x17i\xb0\x0c\x15\xf1Z*\xd8\xf9H\xbf\xde\xeepM\x1f\xc1\xf1U_m\x08\x0bnKe\x90\x84dEY\x93-,\xd0\x9a*\n\x9f`\xec\xbak\xcd\x05\xfdLe\x1c\xc7\xe8f\x91\xf8\xcb \xba\\8\x9e\xe3;\xff\xee\xe0IB\xc0\x07.fK\xec\xba\x95_\xf9J;\xc3\xe8U\xbc\xad\x88\xe0\n\xc7\"\x95<-\xd8\xe2Lr\xea<\xb7v\x03\x87R>\x80\xdf\x95]a\x87p\xdb\x08\xca\xfd\x01\xbaJR\xcb\x9b\x9b \xfbk\xaa\x17\xc7\xd2\xf15\xb7W\x89\xef\x8a$q\xfc\xae\xd9\x07\xf5<\xecj>\xaa\x98b\x83\x8b\xee\x90=\x16\xaax\xaf\xc0x\x91\xf9\xf9B\xe9p\xbe\xf3\xde\x1aKQ\xaa\xb5\xba!|\x1cI\xc0=\xc6\x16\x0d0\xf8\xe973\x97\xc7Fp6\xf0}\xf0P\x8b\x18\x8f\xad\x88a\x158-b(\xbd.\x81i\x00;\x81\"\xd4[\xf5\xfb\x00\x93\xb5*\xfd\x00\x93%]{\xaf\xa5v\xc7\xa9\xd87\xb9\xa1k\xef\xa7\xbf\xfe\xf2\xcb\xdf>\x9f>\x7f\xf5\xfc\xe3\xeb\xcf\xaf\xcf^~|~\xf6\xfe\xe3)\xb9\xa4 r\xb8)\xe1`\xb2\x19\xb0\xaa+.\xb3\xcf|D\x94\x92\xb4&\x17\xe4\x1a\xdf*\xfdM\x92D\xef\xb5_\x91srJ>te5F)]\xbb\xee\x99]\xaag\xb0\xd8o\\\x17\xced\xbe\xb4\xc9/\x03\x16\xce\xcd\xe6\x8e\xd9\xd7\xd1b\xac\x0f\x8f\xb0T\xed\x0bKe\xc6\xd5[WEoq=}]-hs\xdf\x90O\xad\xc2\xf7TN\x9c\x91\x85\xa6C\xbe\xd2\xf1\x8c\xbc\xa4MI\xe3\x0d}\x19\\\x86e\xf92p\xfe\xf3?+(\x86e\xb9v\xdd\x97\xc1:$gT\x8d\xedMY~@kL~U\xab%\x8bn\xb4\xef\xeaK\xcf\xf4\xbc,\xdf@\x9c<\xd7EWT\xa0_5=\x03\x91\x02c\xb2\x1cS\xcb \xaa\x86]\xf7\nvK\\\x17\xad\xcaR\xa0+L)]\x96%\xca\x179\xba\"K\xec\x0f\xe8\"W\xc1e\xe8\xba\x11\xba\"\x97d\x831)\xd0\x15yO\xc6S\x107W\xae\x8b\xb6\xc1\xfb\x90n0\xc6\xc4\x02\x18\xe6\xea\x8d\xeb\xda\xf71\xa5o\xe0`\x97\xeb\xa2\xaft<%g\x03\xe8\xf2\xc6l\xc0hs\xa6\xaay|\xad@t\x19RJ\xcf\xca2B/\xc9%9\xc3d\x1b\xc8\x90\x9e\x915\xe6+tNou\x1b\xfe\x07d[\xc3DM\xb9\x7f\xb18S\x89Z\x8b!\x06f*\xc5N<\xde\x91k\xb02\x9c*\x1c:\xc7\xe8\xa6,\xbf\x96\xe5X\xbf\xbfTK7F/\xc9)9\x0fN\xed\xbd\xe4)\xba\xd5\x06\x0e_\x12\x00\xab\x92\x0e\xb5E\xc1W\xc5w\xe4\xbcR\x12\xce\x0f\xaa\xbeM\x92v@)3\x94\xf4G\xbd\xd2\x1fO\xb1u`\xd1\xd6\xfb\x87w\x99f\nP\xcb\xccu\xc0\x81\x0e<\x9b\xa9\xf1\x15x\x9c\xa2\x9cd \xf4\x16\xf0\x1b\x9bK\x07\xf4\xa9\xee\xea\x96\x83g\xd1\x1cC\x16*\x83h2\x81\x8b\x07\xff[\xa0\x98d\xb8,\xab2\xd5\xb0\xe3\x03\xc3>\x01\xb3\x07\xf0\xc3\x0dO\x0f\xabxJ\xa7\xe3H\xa5\x90'\xd3\xe9\xe3\xd9\x93''\x0f\x1f<~0}\xf2d\x86\xfd\xe9AvG8=\xfe\xf7\xf2\xd3\xa7\x1a\xf3?}\xf2\x8e[\x96\xc0\x9aC\x17\x81R\xa1\xaa\x0b\x7f3\x08\x95\x9f\x8di\xe4\xba\x03\xb2\xc8H.\x94\x08\xed\x8f\xc7\x12\xef dJ*\xb2M\x94tcv\x9b\xda*\x0bp\xf3V=\xcf\xc1m\xf7\xa4\x1d)\xa8\xf0 \x00\xc2\xed\x8eDTx\xef\x9e\x9f\xbd\xfe\xed%u\xde9$\xa6\xc2\xfb\xf0\xfe\xcd\xdf^\xbd~\xf3\x86:\x1f\x9c\xc3Be\x9faTF\xe4\x07\x0f5{x\xd4R@g\x869\x9c(\xee\x10\xb7\x88\xfa\x96\x8eg\xf3 \x84\x13\xe7\n\x18\x8at8F\x17\xd4\xecPn!~t\xca\xe6\xaa\xf5\xae\xdb\n\xba\xa4\x11\xda\x92kr\xa1M z\xcb\xe8\xf2;\xba\x80a\xaa\xf6\x99\xc7b\xa4\x96\xc9A\xfc\xdc+\xac\x11\xedU\x02\xb2N\x8d\xf3\xb5y\xc5:\x19\x1bO\xb5\xe9~\x95\xc5\xde|\x80w\xda\x93k\xd6\xcb\x9a\xf5\xf2\x92\xcc\xe6>\xe9\xe7&\xe9@~\x92\xda\x12\xf7\x87J\x10>X\x86\xf0CJT\x15\x98\x8aT\x9a\xff\xc1\x1d4\xb3\xecf\x0fk\x1bC\xbee1\x08\xf6w\xc8\xc4\x8a80\xdcd\x9d=\xdbA^\x96ZXA\x19MQ\x8e\x03\x11\xe2\x85\xf49\xca\xf6\xcep%g\x99\x85o\x98\xe6\xcc\xc8Y\x0f\x8d\x16\xae\x98\xe8\xca0Q\xa5\x86?\xbc\xaf\xd4\xf0\xdcKD\x0c\xf7\xbb\x93%\xcd\xbd\x9c\xc9\xd7\x9b\x0d[\xf2H*5<\xf7\xe2\x84EY\x9dtI\xc1\x86\x1c\xb3<'\x1b\x9a{ou`\x8c\x17\xeb(MYB.h\xee\xfd\xcc\xf3\xadb\x85\xe4\x9aN\xc9\x95\x92+\xcf\xbbJ\xf5\x95\xd7\xb6\xdeW\xb7\x8eKz\xa5\x14i\xc3!\xd43\x91\xe0[w:\x84\xfd\x8d\xb9<\xd76\xe2\xb6\xfa~\x8e\x18\xc8\xb6X\xe9\xc6\xcd\x0fp\xf6\\\x9a\xbe#6q\x1c\xb2\xd6\x0c!\x16\xc9\xc49>v&ko-r\x85\xcdK\xd7\xbd)K\xd4>xRG\xe9\nB\x92\xd1\xd9\xbc\xeb\x8c\xf2,\x9bcs1Z\xf5)\xc8\x94\x0ecg\xfc*\x98L\xae\xc3\xa6\xd41$\xf4\xb3\x05\xf3_\xd5\x0dc\x83\xab\xe6\x820\xa5 \xa4\xe8\x1a\x93\xeb\x1di\x079j@p\x07[!j\xc6\x1cJ#t\x89\x17i{\x7f\x00\xc8\xd9\x19\x8f\xbf\xa2S\xd8H\xf3/\\\xf7\xc2K\xc5U'#\xa4\xd9<\x1b\xd7\x1do\x17HP\xa4/E\xda`O\xe1\xfd \xe1\xf0;\xf3Dj\x83\xa6| )\x8d\x91h\xc2\x9c\x082\xc3\xd8\x1f\xe7^\xb4\\\xbe\xbcd\xa9|\xc3s\xc9R\x96\x95\xe5\x80%\xa0Q\xb2,s\x8foT\x13\xa7 \xbb\xe4J\x82\x7f\x8fU1\x9e0\xdf\xa1\x94\xd6S\xb9H\xa9#\xd2\x8cE\xcb\x1bp\xf2\x88\xd7Qz\x01\x0el+\xe4h\xd9\xc7\xc1-\x11-i\xc9L\x8d\\\xd8\xebW\xd4\x9c\xbc\xc4\xcb\xd8F\\2#lA\xe4\x1a\x8d\x94-q\x90\xf1\x0c\xb7U\x91\x9cI\x7fI`u\xfa7\x87t\xd2\x07M\xa2t\x8c\xf8v-RV\xf2\xadX\x96|\x1b-\xb1wO\xa1\x14\xbbb\xe7_\xb9<\xe6:Z\xf4\xa1\xed\xf9\x9e\xb4\x93F\x97\xfcB\x9b\x9c\x94\x12\x98=\xbf\x00A\xa7,\x1d\xe7N*\xfa\xd8\xf8\x04\xce\x0e\x1a\xfd\x81?q\xb8^^6\xa9'\xa5\x94U\x81\xd0\xcc\x89\x19\xe1\xadP\xb5_\x8a\xa6$\xb3;PX\x89\xc0\x99\xdd\x01\xfb\xc6\xdd\xda\xda\x16{\xcb\x94|\xe2\x8fgfO\x0e|~;\x1e\xb66\x8f\xdd\xb7c\x83\xee0\x19z\xf8#&\x19zt_\xfd\xfdq\n\x7f\x1f\xa8\xbfO\x1e\xc2\xdfG\xb8\xb2\xb8>\xf8^\xa1\xb02\x81O5d\x1f\x9d\xe0yZ\x96\x1cu\xf5\xc8\xe6\xc6\xa7 \xb7\xda3\xd2\x1fO\xbb\xdbR\x95l\xbd\xcf\xd0\x8a\xf0\x1c\xa0D\xb3\xb2T\x94\xa0\"WN#\x97\x83\x9b\xfe\xc8=\xcf\xde+\xd08\\\x17eT?\xe2\x86\x83Tv@\x93nm\x16\xa5\xae;\xd6\x1b\x05\xe0\"\xe3\xbaN\x0eou;\xe6\xab55\xdc\xbd\x01w_\xbb\x88X\x97\xb6\xba\xad\x01Z-\\\xf78\x8d`k&\x16Kf\x02\xafs$\x86\xb6,\x86\xed\xebf\xf2\xee\xff\xd8\xdexh\xf8\x1d\xf6\xf7\xd4*\x07\x1bg\xc25\xe1\x998\xa1\xf3\xad&\xfdG\x0f\xb0 \xa8\xa3\xd1\xc6:\xe9>\xc1\xfaVe&IA\xb9W\xf9\x98Y\xc7\xdb\xda\xce\x8c\xe7\xc2\xf8\x1b\x12\xa7\xefW\xaah\x9e\xb6d\xeb\xd0F\xbd\xe2Do\x87\xf8\x95\xc1\x8a\x80\x9d\xd1W\x88\x88[v\x19\xa3VS\xe3y\n\xa1\x88ua\xc2\xa9\xd4\xe6I\xcb]\xf93j\xcfO/\xb4\xa1\xd6\xb8\x95\x12%\xa7+4\xf7\x11\xa3Jh\xe4\x98\x98\xb2\x93:\xba\x96)\xc2L\xee\xd9\xee\xf0\xbe\xd3I\xedT5\xec\xf5W%U\xc5\x04\xc9Iauq\xd8\xaf!\x11l\x89\x93\x98V\xc1,M\xe9\xe8\xe9\xb4,\xa3g4^\xc0f\x9c\x1e\x88\x8f\x04-\x9a\xc19\"\x8c\x9f>|x\xf2\xe4QY\x8ag\x0f\x1f\xdd\x9f=)\xcbh2\xa3`VDy'\xf3d\xa6\xb2?\xba\x7f2-\xcb\xfc\xd9\xc3\xc7\xf7\x1f\xdc_\xb0Ea\x83+E\xd8\x17\xbez\xd7\xfe\xab\x11\x89&'\xd8\xcf\x8f\xa0\xc4\x04\x89#h\xe9\xe9\xd3\xd9\x14O\x1e=|x\xff\xd1\xae\xb9\xe1r\x1bC+\xbeP\xea\x0b\xd1U\xaa\x97\xe97\xba1\xdc\xee\xbc!\xef\x8d:\xb6\xe9>\x7f\x15\"(w\xdd\xb19Rq;\xf3Ov:\x16\xed\x8a\x8a\x16\x9f\xd7\xc2\x1b\xb7{,6\xd6\xddX*\x0eS;b\xed\xfc\x03&\xf2\x87\xcd\xcdF\xc7\xd1\x8e\xe9-\xd68\xb0\x9fi\x0dG\x7f8xp\x8ch\xaaPm\xd1\xc7!\xbb\xb6(\x182\x16\xc2\xba\xce8\x0e\xf6\xab=\xc1\x9dy\xbc\xd3\xf6\xf8\xc8\x18\x0dN~\xd4F\x83'\xfb\xf9om\xc6Qh\nW\xc2\xae\xc0T\xbc\"1\x9d\xce\xe3\xa7v\xa1\xcdc\x1b 4\xa1Y\x10\x87sUA\x02&VF\x12\x12!\xa9T\xdfC\xaa\xd5lfzgN\xa1<6&\x8d\x93\x8e\xc4\xf1\x91\xad\x12\xc5?\x88#\xae\xd2\xbf\xc0>K\xd3 TM\xaf\xb7B\xb9\x12W \x88\x05\x95\xa1}!\xab\xe8\xa2\xea\xab\x7f\xc8U\xf0\x81\xe9\xd2\xc9\x13l\x0b9z\xb8\xda\xc5H3SG\xe3\xd8 v\xbe\x8b6,ow\xcfj\xef\x88\x81j\xba\x1f\x1e\xc6C\xe3\x81\xb5\x8f\xce\x14<\xee\xa0/\xc48]\x17@P\xa4\"(\x1cE\xd6NB\x12*PNb\xb0\xa70\xd7\xcd\xc6\xd4\xc4[\x9e\xc7\xcf\x120`\xa0\x82FA\xa2t\x951-l8\xc8\xa9>\xf4TeL\x8c\xa9\x85\x95%\xf8\xcaF\xd8u\xa3 )\xa5\xd5\xc5\xcc\xea[YN\xed\xe2b\xae{4k\xd3 \x9e\xc6I\xb1d\xb9\x9f#\xb8\xbe]\xef0\xa9\xb7\x9e\xbb\xfc\xbe\xdd\x9c\xe8\x9a\x88\xc3\x1b;\xf5\x8eKZK\x86\xa3\xec\xe9t\xc1Q6\x91d\x8a\x87M|\xf8v\xef\x9c\x1a\xa7\x85o\"f\xb0\xd1=\xb0\xc9\x0d\x13\xfb\xa8\xed\xabw\xdf\xa8\xf0\xb3\x07\x8a\x1d\xec\x11\xb8\x0e\xd8r.!\xf0qk\x1b\xb8\x11\xe4\xb0a\nM\xc9\xad\xd2\xfa|}pk\x87I\x8e\x18\x89\xc9x\x06\x9b\xabE\x10\x874:x\xa6\xe7N\xffaC\x93\xd2\x83N\xc4\x87Of\xd9\xc7\x11C\xf8v\xd7\x1fGK\x15\x00+\xee\xe0~\x88\xd9\x99\x1e\xd3\xe6V\xf8\xb7\x1c\xd9z\xd2:\xb1\xf5\xb8-k.\x86\x9c\xa08\xcb;\xae\x92B\xa1\\EBIJsMDm\xf8d\xb8W\xbbx\x16\xcd\xb1>K\x97\xd1\x14\xf6:\x89\x0c\xb2\xf0\x9b\xdc>\x1b\x14j\xde\xb3\x96\x7fe7\xff$\xed\xb1\n\xdaP\xady\x0b\xbee\x89\x9c\xcf\x9f\x01\xb2\x9f?;<\xbd\xdd-\x1a\x93h\xa5\xb6\xf1\x0c.\xe6\x00]\x01\xb1\xbb\x18\xf9\x80\xbaR7\x81U\x07\xb0f\x80\x19\x81\xdbHh\xd64\xa6\x82\xd3BcC\xa6K%3\"\x1a\x80\xc8\x94n)0\x91\x0bf\xeb\x14\xd8\xcf\xbc\xaaA*H\xb6\xdb!l$\xaf\xef\xf7]\xab=\xd7\\\xd7nN\xec\xf5\xfe\xcd\x99\x12\xe5\x9b'x\xa2|\x14\x8d\x9a\xbc\xe6\x1b\xb0\xc2(0?\xce4\x0e\xffh\x90\xf8\x91\xa1/\x8a\xbc\x14\xad=\xd7X\xbd\xb7\x9d\xa5\x12*\xb4\xc9\xba\x8e\xa3\x05\x97\xafs\xdd\xcc\x96\xa6\xfa\xfa\xf6\xad\xeb6\xf6S\x14cY\xc3\x88\xd7A\x14\x8e)M\xc038Gk\x12\x91\xa4\xa1\x05\xaa\xcf4\xd9A\xc68,K\x95#&+Lx\xb0\xaa\xc3\x8f/U\x8b\x02C\xae\xa5\xaaN\x04\xcb\xb0\xaaqI\xe0\xb5Y\xe92\x84,=\xd5\xbb\xe5\x11\xfe\xe2\xf4\xf4c\x91\xb07<\x97\xfe\x94\xbc8==\x957 \xfb\x99\xc5I\x94\x815T\xa7\xfe\xa6Fo3%\x9c\xa5\xf2#\x8b\xa5I\xf8\xf9\xfd\xdb\xf6\x9b\x86]\xfd\x0e\x97@\xc0\xeb\x8c\xfc\x1c\xc9\xe8,\x8b\xd2|\xc5\xb2\xd7\x92mL\xaeW\xbc\xea\xc4\x9f\xce\xde\xbey\x9e$/D\xa2d\x1b\xdd\x05\x95\xd6Kx%\xb2\x8d\xd9N2)\xa7L\xe5\xa8\xd3\xde\xb2%\x8fL\xb5o\xf9\x86)$\x835\xe1O\x89\x12G\xe0\xc2\xeb\xb7\xd1V\xbd\x8a%3]\xfc\x10q5\xbe\x7f\x14,\xb7\x83\xfa\x90\x14\x17<\xad\x1el\x1d\xa7\xbf\xfd\xa2\xef\xc30\xd9N\x7f\xfb\xe5]\xb19gY\xfd\xfe!\x92\xebSv\xd1H\x10<\x95\xf5k\x0bV\xa7\xbf\xfd\xa2a#2\x0b\x18}h\xe0\xa7b\xb5\xaakUSt\xbaf\xccVs\xc6\xae\xe5Y\x16\xc5__T\x93T%\xd9wQ\xc4\xa6\x97\xdf\xa6z\xd4B\xd7\x8f\xd6\x89\xd0l\xcf\xcf\xcc\xda\xb9\x0f\xfbj`*'1\xcd\x9b\xaa1\xc0\xa7\xa9\x19\xd7\x18W\xe8\xe0\xd8\xc48Tu/\xd2\x8dZ:r\xa7\x1eb<\x7f\xd2\x86vL\xbe\xf2t \x8e\xe1\x03J25\x875\xe1V$s.*\xa3\xccSe\xe0RI\xad\xefN\xacd&\xcb2}V]\xec\xb3@\xb6\x90\xf1\x91&\xc3\x1a4\xf6\xb5\x8f\x13\xa5\x99\xd5\xb1\xd3Ja\xf6k\x97\xac\xea\xab\x0c\xd2\xb0\xce`\x12\x83\x94\xa8\xf4\xfa\xc3\xaev\xe7\xc2Dx\x95\x9f\"U\xcf\n\x84\xbc\xf2\xad\xe2\x0d\xd7+\xde\xf2\xaf\xda+Q\xe3\x96\xdc\x05V\x8e\x149E\x9a\xc7b\xab\xf4/UU\xd1\xbd\xe4\xc4\xdc\"Q\xc0\x15\x15\xc2[\xa1\x82\xe4\xfb|\xf5\xb9\xbes\xa1u\x14\xa6\xc9 T%\x01\xd3\xf7\x13\x7f\x03B\xea\xcd\x1dM\xb4\x1f\x9b\x8d\x9d\x13\xbd\xb1c\xbd+\x8d{\xe5\x83\x1f\x8d{\xe5T\xbbW\xfe\xf8\x10\x93\xa5\x91)o\xd4\xfb#L.\xb5\xc9uc\xf6\xaf.T\xf2cL\xae\x8d\x1a{eL^\xe7\xaa\xba'\x98\x9c*\x10\xcd0\xf9\xa0\x04\xb5\x19&\xef\xd5\xef \xb0_\xf2U};\xc1\xe4\xa5J{\x88\xc9\x1b\xf5~\x1f\x933m\xce%\xbf\xaa\xf4G\x98|1K\xe7\xb5>\xd0G>\xeaY\xf8\xac\xb2?\xc0\xe4\x15\xfd\xd8\xd8?#/\xa8cL\x9c\x0eyG\xbf\xc0i\xd1\xe7\xf4\x0b\xb4\xf8\xb3~7\x8b\xed\x05&o\xe9\x8a\xfcDc\xaf\xe2\xa1\xe47\x1a\xd7\xc7\xb9\xfe\xa0q\xb5W\xf5;M\x90\xb3b2^;\x98\xfc@\xcf\xbc\x15\xf9\x07\xfd\x81\xfcB\x1b{#\xd7\xe8\x0fL\xfeJ\xc7c\xf4\x9b\xeb\xfefOt]\xb2T\xban\x0c\xce\x15\x8a\xc9@\x02&\x7f\xa2\xaf\xd1\x8b\xd6\xca\x83\x9b:\xae\xd0[%h\x1a\xee\xfd\x16\xeb\x80\xa9\x8f\x1eQJ?W\xaa\x14\xb8\x90\xfe\xd2\xf4\xcf\xadv:\xcc\xe0?\xc2\x11 .R\xddZ\xa5\x83\xf1\x15\x8a\\w\xfc\xb6!\x03\xafx\x1a%\xc9M\xab\xf2\xcf\xcf\xe8\xc3\xd9\xa05\xf2-\xae\xe3\xfbkR\xf1\xd6\xda\xc7\xd5\xac\xb4#\xaf\xb0\x964\xde!4J\x80\xb6V\xf6\xb6$~\xbb\xc3\xc1\xab\x90J2V\x84d\xcd\xd2N5\xb8!\xa9I\xbc\xc3\x98\xfc\x99\xfe\xa9,\xc7\xa7\xed0ko=s\x84Z\xf3\xf6n\xdb\x18\x93\xbf\xb5\xf7\xb1\x94\xceo)\x1a\x1a_\"\x86\x876\x93\x10\xd0\xc45K1v]\xb9#\x7f\x19\xda\x10\x1fK/\x15\x92\xaf8[*-\xd0>\xd3\xf1\xd4\xb0 \xe9e,\x82R\xf9\xfck[i\xa9n\x86\x94f\xbf_\xd0\x19\x05Se$\x19\xc9\xe9tne\xffg\xf9\xbcR\xd5IL\x12\x9a\x06\xb9\x12\xfdWT,\x12O|\xf5\x13o\x15\xf1\x84lib'\x89\xac\xe1Ya\x07Y\xd2\xc4\xb8&\x81P\xbdZ Q\x96\xe8\x84R\xe8\x9dA \xd7\x95\x0cX\x0ci$\xd2\x19&\xe3)\xa5t\xb5((\xf7\xd1\xd2u\x97\x1eK!\xfc+)\xe8\nqL\x96\xae\x8b\x96\x1e\xbb\xe6\x12)r3\x9eb\xf5\x89\xd2\xc4\xee\xa0,\xd6\xe8'dW\xebQ\xbc\x8ex:\x8ao\xe2\x849\x18\xfb(\xa2\x7fC\x05\xc6\x8bH\x8b\xd4\x05\xd9\x925\xf6\xb7*\xcd_#\xde\x90\xd8\x96\xae;\x8e\xa1\x03\xba\xad5\xec\x9a5\x00\x0cw\x054\xe6`F2\xd7\x1d\xb7\xc6\xf8?`\x88;\xd04\xffkP+N \x9f\xffu\x81PJ[+\x1b9\xf0\xe3`\\\x1d\x8d\x92$Um\xe7\"\xa5\x19I=\x9er\xa9\xb32\xab\x1ew\x88\x01J1\xf6Szk*\xf0%\xd1\xc5\xfdlG\x10\xa7q\xe0\x88\xd4\x99\xb0\x10/8J\xb1\xef\x14\xe9:J\x97 [V\x03p(\xdc1\xf5\x069\x7f\xb5\xdfF\xa6\xb6Q\x9dI)\xea\xe4\x7ft\x0c\x1b\xef5|\xe3\x9e\x10\xa0tM\x83\x81`\xeaa\xb0}\x862\xfak\x0b]\x7fY\xfc\xa1\xa3\x0f\xd7\xdd\xfaX\xb7\x98\x12\x86\xfd\xffBC]&\x8c\xa4\xb0\n\x9bx\xf5KYBC\x8b\x13\x7fF2\x0f\xb6\xc3\xac\x8f\x8f \x15\x02\x8a7\x1b\xf4Y\x9d\x81\x8a\xde\x98\xd6\xb1u\x89\xdb\x11\xc9\xbee\xe0\xf5h\xaaZ\xfe\xa4;\xee\x98\x91T\xe9\xeb*\x9d\x180i\x1b\x7f\xc6:\xf8\xd3pD\xa9>pE\x1c\xd57\xae\x80\xb0#\xe9P! >Ae\x89\xf4\x03\x84\x16p]$i\x8am\x93\xd4\x84\xf7\x94\x8c\x9e\x90\xbf@Q\xb5\xd0v\x84\x0fU\xa8 \x93\xaa\xcbV\xde\xac\x13\x88\x809\xb1`O\xec\xd5\x0bt\x14k\xed\xf2\\a\x14\x90\x92\xe5\x88\xcb\x9c%+\x07\x9b\xa8U\x7fC\x19\x9e\xf3E\x9b\x9cirwk\x853\xdd\x88U\x933\x868S\x88\xa0\xe8K\xc6Pj_\x9a\xa7\xb2\x15\xf9I\x89\xb6\xaf)\xca\xd0\x1f\xfa\xcc\x0e}\xd6+X5l*\xd8\xcd\xff\xe4\xba\xe8m\xdb/A\xcb\xceo\xc9\x0bL6\xe0\xe5\xdap\xe87\xbe\x95\xef\xcc\x9b\xea>C\xba\xdfR\xdfDg:n\xde\x1a\x84)e\xe6\xb2:\xed]\x85\xda\xde\x10\xcf\x9b\x12\xfb\x0b+\xbd\x12K\xa6\xd4\xb3\xc6]\xf5T\xd12?\x08I\x85\x82\xea\x0b@\xc0\xb7\xc2\xa3 }\x82\x9b\xf1\x08\xe8\x1a5\xf8=\xb9U\xbc\xabcd\xd2\xd6\xcd\x9f\x8d\xd0\x9f\xd2\x1f\xd0\x07\x03\x93\xda;>\xf5\xc4W:\x14<\xa4,\x19I\x81\xd1\x0cmjJ\xd7U\x04Q\xf3\x19\xaa\xd6\x97~\xb4\xca@fV\xa8\xc2\xc4\xac\xa6\xd9\xda\xf5%\xc5d:\xa6\x99\x9ef\xd7\xfd\x8b\xeeT\xa6&\x9a\xa4\xd5N<\x01\x88\x0fy-\x83_\"H\x10\xa655\x11\xad\xf3\xadV\xe1I\xd9\xd5(%j\x9e\x19n\x9fte\xedc\xa8\x16e;\x87Q-\xf2J\xbc#g\xde\x8a\xfe0D\x9f\xd4\xcaz[\x96\xeaG,\xec\xc9T\xff\x1f\x8a_\x91h\xd0qe\x05;o\xab\x86\xb8\xa6FC\xb6h\xd5\xda\x88_\xb3\xb4\xa7\x11\xea9U}l:\x04\xbeE\x9dl\xb9]\x8b\x86\x01jp\xe9\x97\xd6\xae>\x19\x98\xdc\xdf]\xb7@\xb7\xfa\x04\xab\xd2`\x9a\x11\x08\xaa\xd3%\xe3\xe9\x8e\xdc\x82\xe8<4E/\xd1[\xf2\xbb\xf1J\x8a\x1b\x1et\xb0\xd81iU\x7f\x95E\xdbF\xc5\x7f\xda\x91[C\x9d\xfc\xb7;L\x96\xe8-yay\xec\x8d\x12\xf0\x05M\xd4OQ\x9d}y\x01\xeb\xa5S\x87\x9e\xc2\xfe\xd9<\xfaC'\xa6\xbb\x99l\x0d\xb1\n\xa3\x88\xac}B\x0e\xb6\x15\x95\xa5n\x0e0i\x18\x18\x91\xbe\x18\x050\xe4\xad/\xed \xae\x83\xf5\xfeyGn\xa3$\x19\x18\x80^.j\x1cjUW\x9e,J\x85\xb5B\xa0\xe8\xf0s\x8d6\x1b$+\xb7\x17\"\x94\x00\x95\xd3))\xe8l~\x8eX{w\xfe\x12\"d\xe5\x93\x89\x12\xf2fs\xa1W\xae\xb1t\x92b2!\x99u\xa5d\xb8+\xce3|\x1b\x97%\xc4\xa6\"\"\x88B\xca\xc8\xd1QQ\x96)8=`\xc2AB\xa8\x92v59\x12Z8\xd0\xc164\xfbm8\xe7\x90,\xea\x84\xbf\xd9\x07\x10\x00\x02\x1f\x00\x02o\x01\xa1?n\xde\x1dU\x0d^\x90k\x1a}\xe5\xb6\xaf)\xe2\xfd\xbe\x1e:\xc7=\x9b\x1e\xf2\xbc\xadT\x05\x1dl\x06L\xf2D\x06<$\xd9A\x1b\xef\xb0\xd9j\xd6\xda\xb4\x98i\xa3\xd5\x8f\xe6H\xc9a\x0fU\x0b\xdeT\xbb\xc8so5\xcf]W*);(B\xd7\xcd\x90$E\xdf\xe01|\xc4\x1b\xf6\xa8z\x01\x0b\xf6E?!\xcd;.\x1bj\xe1p(\xa2,\xd3\x8e.([d\x13g\xe4\xf8\x8e\x83'\x0eO/\x8d\x0f\xeb\xb7\xd9\xc6\x0d\xa4f\x0fL\xbc\x91\x86\x15<\xef\x99~\x0enr\xb5n\x88\xe5\xda>\xa5d\xf9\xb2\xcc\x03\x11\x82{\xda\xa1s@?6;\xa2]\x89\xf9\x90\xf1\xb0\x85\xb76\x98h\xe5\xf9\xc6\x02\x11\x96%\xeb\x1e\xe9\xe4\x81\xca\xdf\x0ds\xd6\xde\xe2\xd9\x8b\x9c\x84\xb7\xce!\xf3\x85D)\xca\xc0\x93>\x03Oz\x89\xaa\x18\x83\x86Y \x90\xddUvs\x9a\xbd\x02\x8eP+GT\xa7\xde\xc9\xc1`5m \x10\xae\x88\x92\xea\x89nbJr\xaaw.{\x88gD\xc5\xb1\x98LvJ\x8cWi\xcd\\\x1cLn\xf3\xdc\x1d\xf0X\x1c\xab\xc5\xc3\xdb\xb6\x96\xac=\x94\xdb\xdd\\\x0c\xf6\xe5\xe0\xf82\x18\xc5nG\x98\xa2\xa7\xbd-\xae\xec\xb0\x9381\x96\x060\x18NM\xd86\x08\xc7\xb56&\xc0e\xc3\xc4wc\xbc\xc4/\xe9\xca{[HXa\xef\xcfs\x96]\xb2\xac,W\xde\xef\xec\xfc/\\v\xbf\x90\x8d\x16x\xc0\xeevAW\xd6g\x91\\7\x8dmk\xb4\xc1\xe4\x8an\xd1\x8a8\xff(X\xc1\xde\xf28\x132\xca\xbf:\x98\x9c\xd3+\xd7\xbd2\xca\xebyY\xa2\xc1\xbb\xcc\x14\xf9\xbcv]\xc4\xe8\xc6\x08\xa5\x18\xae\xfb\x013\xc2\x9c\xcf\xf1-\xb8\x80\xa4\x84S\xae\x8fl(\xe0\xcb\xa6#\xa2\x9eV\xbe\xc8\x11\xf6\x85\xb5v\xb3\xdd\xae~\x86\x1a\xb5edG\xae\x17y\xb3#\x9b\xdas:\xc5;\xff\xd2u\xc77\x0bT(f\x18\xd5\xa7\xc7\xcc\x85\xe0\xecZ\xbe\x13K\x86\x1csY\xc7%J\xb1'4\xccPDnc{\x03\xcf\xcf\x91\x8c\xb4\xc4\xd6j,\xd2\xc74\x0b:.vX\xbbh\x1b~\xb5@1\xad^*\xce\x9d\xd0X\x0b\x9b\xadZ\x12\xab5+\x1e\xe7\xb7>-\xf5\xa7\x15|j\x18\xaf\xcf\x87\\knW\xa9\xcf\x08 \xaa\x0d\xd7(\\\x17 }\xd9\x9f\xc4\x84\x97%\xe2T\x92\x1caE\xdc\x0eG\xe3\xba\xcbm\x03\xcc\x8b\"a\xf3\xccu3\xcb\x8c\xd1\x8cR\xda\xf5\xbb_\x98\xcfJ0\xaf\x1eA\xad;\xb0.\xf4Z\xc8\xb5\xb74\x9c\x88\xb5\xe8\x1b\xd1\xc2u\x0b\xcf\x86\x85!1\x8d\\7\xf2.\x7f\x9c\xc7\x0bNQJc\x1b\x8e\xd4s\xb0\xa2\x8e\x934\x98\x85~\xee\xbah\x8cR\x9a\x9b+\x9a\x8e_./\xd8\xa7O\xc7\xe8\xd3\xa7\xe5\x04\x1fc\\\x96*\xdf3\xfa\xf8\x01\x863\xa9U\xc6\x17\xebLlZY\x15c\xa1*wsN\xb8\xebN\xf8\xb7\n\x06\x8f\xdb\x07V\xee\x1b\xd1\xe0\xa1\xd9\xcfz\xf0\x04\xcf\xeb\xd3\xe5\xb5\xf9\xddH\xa9Z8=eR&l\xb9_$\x13\xde\xaa+\xa5F\xb5\x80\x16\xd3|@J\xe5\x83RjDg\xf3bHJ\xe5 \xa5\x16\x03Rjt\xa7\x94Z\x94\xa5^\x98\"\xe0!\xbdUc+r\xdfY\x15\xc9\x8a'`\x06\xb2\x1e\xdb\xe4\xe8(\xaa\x05\xd8o\xa9D\x8fQ\xd5a\xec~\x9dJ\x8c\x0c\x1c\xf5d\xe0\xd8\xa2r\x84\xe2o\x93+\x0fO\xb0\xf1\x12{`|\xfa\xcc\xa9\xeb\xd9Lo\x1b=\x9c\x99\xf3@\x0f\xcd\xbe\xd1tx\xde\xab\xe8\x02\x19\xd3j\x9b\xd5\x03\xc7\xc2u\xdb\xd3(\xfa\xfb\x10\xc6\xf3\xb2m\xa4\xc0\xb7\xbb]o\xf3\x00c\xa5W\xeaR\x03xevD\x8b\xca\x82\xe5\x80\x1f\xdf\xd0\x19\x99y\xcf\\\x90\xd5\x1e(\xf5\xb1\xb3X!\x07\xc2=\xf4\xa82d\xaaO>#\xdfY\xda\x987uam\xa0\x184\x06\x88\xb2\x1c\x00XY&H4\xad\x01&\xddi\x0d}`\xc3\xe7\x0e\xec\xc8\xbcL\x1fxX\"I\x9ch\xb9\x1c\x8a\xf6;\xda*\xdc4y\x96pjx \xd3\xba\x91I\x8a?\x9f\x0efZ62%\"\x1an\xee\xa6\xd9\x1c\xcf\xb7\"\x1fn\xf1\xb2\x91/gQ\x16\xaf\x07\xb3m\xd4b\xb2\xc9\xa3\xbe\xbd6eW(\x838\xa7\x06\x90\x187f\x8e\x13\xd1\xf01\xcb\x919\xee\x11\xa1T\xdf\x9a\xc8\x9a\xc2\x9e\x80]\x89*w\xd1\xcc\x0d\x08p0{ToP10\xdc.82\x91\xa5\xb0\x0f;Rz\xabH6\x95\xa0l!}\x1d\xe1\xa5E\x85\x18\x02C\x8fA\xc4\x9c\x14x\x17!\x94\xd2\xd4Xa\x18\x91e\x19\x84\x18\xdb\xfb]\x15bV=\xe1\x0d\xc6J\xec\xd1\xc1\xdb$:g\x89?%9K[\x92'_\xa1\x99\xcb\x83ih\xd41\x1e\xcc\xaac\xda\xeayGdv\x03FM\xb1U?\xd5\xe5\xdc\xc2H\xe9\x85\xe2\xacP\xd6/\x94\xdee\xc4\xf2\x02\x9d\xe0\xdd\x90EJ;V*I\"\xe8\x9c\xd5\xd8+\xb4c\"\xe6\x8dy\x11}k}\xd1O\x1206k&WPnh\x9a\xbf\xb0T\xb79\xe2\xf9(J\xe0\xd8\xd7\x88]\xb3\xb8\x90<\xbd\xf0\x1c\x13\xa6$\x9fccr\xcf\xe8\x0c\xcc\xf0\x9c\x9e\xb8\"\x98\x86\x8b\xd4hB\xbey\x83f\xca\x12)Vn>a\xd75&\x88\x14\x93)\xf65\xd2a\xd7\x1d#%\xaf\xea/D(\xc6\xaf\x0f\x17\xd7\xc1\xc2\xec\x15`tJ\xb8\x02\x15\x0dt\xb3\xc4X'BL\xd4kuh\xd7\x1c\xc8\xe5T4\xaeY\x1b=\xb0'hs\x0f\xa6\x7f2\xb1~\x1e\xaa\xd1\xca\x1dCg~\xe8\xd7\xb9R\n\x19\x04\x0d\xa6\xe1\xbc\x8aT\x0b\xd9\x1e\xfb\x82\xe6\x9e\xd8\xe6\xdeVl\x11&\xb9\xa7\xf0C\xbf\xd4Y\xed\xed\x0c\xa0\xf7s\xaa3\x11\x18\xb6\xd9\x18\x9d\xba.\x0f\xec\xdb\xd1,\xc4e\xf9\x08\\\xbf\xa6\xa1\xeb\x9e\x98'\x8cos:\xad\xaa\xdd\xf1\x15\xbaOm&4\xe6e\xa9\xfa\xf9\x8c\xc3\xbbz|\xca\x83\xfbPJ\x0f\x05\x86\xa1!\xa2\xca>\xaa\xca\x9a\xefO\x15\x86\xd7\xb9\xd5\x1b\xa9`\xa8J\xf0f\xd6\x93V\xd6\x93\x90\x188(9E`[(8\x81\xfa\xef\x80\xd0NPi\xfd\xfb\xf3&U\xa1\xc1#\xc2B\x92\xd2\xe9\xce\xb0\x81\xdb\x8cr\n\x8e\x01\x0f\x01\x07\x0cF\x8bz\xa1V\x93:\x0d\x17*\xb9\xeb\xc6\xb3C\x81 E\x88w\xbb]+\xc4\xc2\xbc\xfd\xa6\x95\xd6\x0c=0\xc7\xbd\xd0\xc3\xc7\xdd\x98\x17F\xbd\xa4-\xde\xc8\xe1d#\xddjs;lZ\x99\xdb\xeb5a\xa7\x1b\xfd\xa6\x18\x0b]\x9a\x0b=E\xb4\xa47\xa6\x84f\x13\xf4rG\x12\x8a\xc0\xdfV!\x0f\x8dI\x106\x88\xff\n\xe1[\x94\xc3>\x80\xf0~*x\xb2d\x19\xd6w\xa2!Gr\x990G\x01\xdb$,\x8d\xa3)\x98\x8cH\xeeel\x85\x9c\x8c\xad\xe0ek\xae\xe1R\xfdF\xc2\x93\x19\xdflXF\x04\x9c\xc2\xff]d\xcbW<\x91&\x81\xa9Opt\x87]Y\xe7\x8d\x8e\xe4Ia\xcbS\x0c]\xe7K\x8f?}\xca'\xc7d\x85\x1a#\xd9\xb6\xf5\xa3\xc4\xc69:\x9a\x11Noa(>\xeb\xdc2\xd6\x18\x8f/;\xdf2\xb6\xf2\xd3\xdd\x1c\xa6\x01\xf1\x06+X7\x02\x89ia\xcb`\x86\xf9\x19`\xb8\xe6\xc0Lk\x80\xe6S\x81r\xef\\\xc1])|\xc1I\xb8\xeb0\x9e\xe5w\xb4\x06\x1a\xfe|_\x9b\xcd\x8b'a\xbdu\xa3\x130%\x9b\x8b\x8c\xf9\xc9\x8e\x04\x0fH\x14\xb6C\x12\x04'\x04\x19\x178*=\xc5\xf2\x10\x06\xf4{\xff\x0ea\x02&\xb3N\xdfo\x10\xfb\xf6\xce\x1f\xe8\xb6\xf9\x94@\\r\x911R \xe1\xbdV\x1d\x01\x94\xb7\xbd\x1a\x06\xe0\xe5w\x00\xf0\xee\xe9J\x94\xba\xb5B\x83-m\xb4\x8c`e\xb1*.\x04l4O1\xb9\xb3\xf9\xcbf4\x96^'\xd2j\xfe\xd2\xe1\xf9\x83\x18\x8a\xb0\xee\x10\xb6z}pB\x820\xf4\x07\xa6\x13\x0c\x04f\x16\xe1\xeeF\xd4\x82yUQkU\x18\xb5]\xaf?\xec\xadD\xf62j9\x191\xab\xa4\xf6a\xe7\xdcs&\xd5\xdaG\x9a\xe2\x80\xab\xaf\x0e\xc8\x8f'\xce=g\x07\xfb\x90p- \xca L\xbfV\x03\xa5bm(\xa3\x999X7%\x12f\x9bd\xfb\xee\x99\xbc\xdd0\x19\xf9I\xc0\x14\x91\nI\x1e+\xc4f\x1e\xfc*D\xad\xb0\xf5\xc0\xf9\xf1\xfe\xb0\xc0\x0bt\x19\xc9\x88(\x89\x04\x14\x0fASO\x07\x9d&\x10\xbc{ \xa7\x14\x14\xa5\xda\xe4s\xe7\xe3\x87\x17\x0e\xa5\x94\xbb\xaep]\x842*!2\x85!y\x95\xf5\xe9\x80rU\x85\xd9(Tw\xfd\xba$\x9c\x13q\xde\x89Q^\xc4k\x13\xf7\xda\xe9+Z\x0c\xdf6\xa36\x18WY\xd5/\xc2\x97~Nt\xfc\x1a\x9f\x01\xac{Nc\xb5\xe5\xca@\xc5g\xbb9\\\x0f\x10\x7fUx\xed\xd9h\x05\xcc>i\xf7\x84\xf8+5\xb9\x88\x84H\x82\x94\xc1\x0f&\x07;\xa3\x0f\x82\xcbj\xde\xf7e\xd6\xa3\xf5\x1d\x901\x9d\x1d\xde\x85x\xfe)=>\xfe\xf7\x91\xbeg\xe5m\xb4\xdd\xf2\xf4\xe2\xaf\x1f\xdf\xd0\xf3\xf3'\x8f\x1eOY|r\x12?\x88\xef\xaf\xa6\xd1\x93\xe5c\xefJd_Y\xe6}\x81kJ\xff#\xc4\x98\xdc\xaa\xde\xf9N\xb0\x8e\xf2uX\x7fwv\xf5\xc9'\xc4\x88\xe8\xdf\xd8\xb3?>\xbdfDS}~\x83\x1d\nT\xd0Zy\x97\xc6SN\xa1\x19\xc4\xd758d\xae\xae\xe5+\xa4\xb0\xccn\x1ed\x81z\x0b\xc1\x8ch\xa2W\x98$\x92j; H/\xf6`H\x94\xe7\xfc\"E\xe6\x82.\x9d\xc1\xce\x1c\xb6%0\x06\xb1\x07\xa5&\xb8\x11\xc6\xf5\xd5\x1f\xbck\xa1m\xfb\x83\xcdy\xc3\xf3\xabZ\x18\xe3\x19\xf8.pm\x8b\xb5\xab\x83\xb0\x8eC\x18\x87\xddo\"\x07\xe8\x8a\x02s \xc3\xae=[\xd4\x96\xcc\xe6v\x7f_\xa2\xe0$\xd2%r:\x99\xa4\xf3,\xc8C\x1ap\x12\x85\x84y\x071\xd2`\x9a$\xba\xcf~\x10j\x12\xa4\xe5L\x815\xaa\xee\x06\x02\xe9\xff\xdb\xf1\xbd\xf1\xbf\x8d\xee\x8dN%\x8f\xbf\xde\xacx\x92\x8c\x8e\x8eF\xffs+r\x0e\x02\xc7(\x87\x0f\xffs\xb4\x15 |V\x99/\xbd\xd1\xcc\x9by\xb3Q9ZK\xb9\xcd\xfd\xe3\xe3\x0b.\xd7\xc5\xb9\x17\x8b\xcd\xf1\x15O\x96K\xc6\xb2\xe3\xbc\xaaS\x15zach\x8f\xde'\xecb\xf4\x17\x91\xe5E\x9a\x7f\xbd1\x95\xf8\xc7\xc7WKo\xc9\xff\x88x\x1ay)\x93\xc7\xff6\xba\xa7\xca\xbd}}6z\xc3c\x96\xe6\xec\xdfF\xf7\x8e\xffm\x1f\"\xb3\xb2D\xac\x9aw\xac\x14e$m\xc4\x01\xe3o\x9diK$\xa7\xe3\x19\x89\x14\x91l\x07\xf0j\x9b\xd3\x95L\xea\xac\xf9r\xc9R\x87\xc4\xd4\xb9\xe49?\xe7 \x977&\xd4\xc8\xbc\xde!\xf4t\x88\x8d?An\xd7E u\x9a)P^'\xf4jQ\xa8t\xc1\xe4\x0b\xb1\xd9\x16\x92-\xe1 DY.Q}\xb2\xac\xa0\x81\xe3\x10\xe7HWp\xa4\x1e7\xe2\x0f\xfd\x9b\x1f9!\xd9\xf6\xd0\xdd\\Uabv\xaf\xaaS\xe7G\xb3\xf9\xea\x19\x9d\xceWGG\xda\xc4\xb15\xe1\xe5\xec\x84\xd3\"X\x85\x13GO\x9d\xd3\xd0\x01\x1cgL\xbb\x99]w\x89:R\xe0\x0b\xfa\x86\xbe\xa6\x1f\xe8G\xfa\x8e\xe6Mq\xb4\x96N\xf4\xb5\x84\x89\x88$x\xf1N\x9b\xb2 \xbeM\xe9\xad\x14[_z\xdb\xe8\x82\xfd\xed\xfdj\x953I\x12\xb6\x92&\xe9\xbftR\xc3\xfer\xa1m\x19\xad\xcfc8\x83\xb7\xaa\xa2]ml\xdc\xb7\xd7H\xb1\xeeF\xdd*\xa7\x14[\xd7E\x90\x07\xf5D\xc3FT\x97\x96ap\xb8\x12\xf8\xa5\xed\xdeC\xa5\x10\x0e\xa6%\xef\xd9\xe9eT\xd4\xb3\xc3\xd4\xec\xb0\xa3#|\x0e\xd7_4\x8a\x9c\x9b\x0db\x06\xb4\x8b-\xab}}\xd5\xe2S\xca\xbc\x84o\xb8\xb9\xc9r1\xf5!\xf9Y\x95\xcc\xd2\xe5\xe2\xc4\x9f\xcd\x99\xb7\x11K6V\xf2\xde\x10\x1f`^*\x96LO\xb35E\xc8J\x84Kk4q\xa2\xf3\\$\x85d\x0e\xd1\x90\xa6\xcc\x130\\x\x9b8\xdbk\xf5\x05\x16|\xfd ^\xed7\x05\xa8\xea\x8b\x14[\x9b~.\xa4\x14\x1b\xeaD\x85\x14\xea\xfd\x8a/\xe5\xba~\xddD\xd9\x05O\xdf\xa8&\xa7\xd5\xebGh\xa7~?\x13[:m\x1aDf\xad\xce\xaf\xf85[6z~.\xae\x07\xbb\xad\xd2\x07\xfa\x1c\xe7J\xa5\xdd\xfe\xef\xea\xeb\xc9\xff\x06@W]2=\x9e~_gw\x1ao\xa8\xdci\xf7\xb3\x1a-\xaf\x01-\xe1\xe2\x94\xe6\xc2V\x9c\x00\xe8\x99j\x1d\xe3\xb2d\x1e\xcf_\xb0$\x81\xfb/5\x06\xeb\x10\x90q\x02\x8e\xb4Ma\xce$\x1e\xa6jU`M\xc0\xd8\x94]\xcbS~\x9e\xf0\xf4B\xb5\xa5\xd2@\x0c\x86\x8a\x0c>\xa7\xde\x9a\x190\xe9\x07\x0b \x0d\x08\xa6\x7fmb=9\x8d\xc1T\x89U\x86\x9f4<{ytz\x1b\xac\xbdL*\xb5\x03\xea^\x1eH&J\x1cY.yzA\xd5\x14fK\x96U\x0f\xa7\xdb(V\x1f\xd4\xa4\xadD*O\xf9\x1f\x8c:3\xb6Q\xa3\xa8\xf1(\x97\x91\xe4\xb1J\x8b\xf3\x1cf\xa9\xd9\x96M#\x06\x9e\xda\xf1\xf3\x9dz\xe4i\xce2\xf9\x13[\x89\x8c!\x03Q\x85\x03\x88aRc\xe7\xb8\nqZWZ\xf3 'c \x9cW\xb9#\x1f\xaa>\xd6t\xa81\x86\xaa\x16\x1d\x7f\x8bT\xb9\xab\x89m\x96\xd6k\xe1O\xf0\x89\x00\xb3\xd7\x04Y\xcd\xe9g;\x92&\xbd\xbf\xaa5\x89\xf1tn24 e\x85\x9aM\xf84c\x83\xd9J-^\x1bW\x03\x80U\x9b\xde*\xea\xff\x95\xddh\xef0\xd9\x8d\x99\xf7\x95\xdd\xc0=\xf2\xc1Wv\x13R ?pSX\x0d\x16\x02t\xa8\x96\x12\xd2&\x1bI\x15\x1bI\x8f\x8e\x94 .\x824\x84r \xa8\xa8\x07\xd7\x85\xb4\x06\xac@)o\xbc\xe3[I\xc73c\xd8\x94w\xcdK=\xa3y^\xa5*\x18\x00\xcd8\x9a\xd5\x10\xfez'\xdf\xbb\xee\xf2\xbd\xf7w\x16\xb9\xea\x16yY\xcfcW\xb2\x02\x17r\xda\x9c?\x92\xf53\xa5\x98\x08\xda\x1d\xe6\xfc\x00>\x1a/{#\xba(\xdePQ\n_6\xa8F\x936T\x1f\x0c\xa9\xa8IB\xf5\x05\xe8C\x83\x0cT\x1f4Q\xb0\x8b\xd6\x97\xd5\xfa\xdd\x91\\\xf7b\x8d\xa0\x1f\xb8\xdd\xa4Jm&`b\xc8\n4\xbb\x06!\xaaz\xaf>\xea\xb6\x1b_!\x01\x13M\x7fT\xd6\xdf\x15\xe5\x84\x1c\x9d4\x9b Jts\xd5\x89x\xd7\x87\xae\x00\xa0&\xf4\xb6RF\xbaY\x88\x1a\xa8MT@\xd7\xcc\xadJ\xd2\xafZz\xb4i\xea\x85\xe8\xbb|l\x12\xbc\x11 \xfeU\x1a\xbc5&\xd1\xa6w\xa7\xf2M\xb3\xee=\x93\xd6\xfe\x0ci;\x12S\x88\x11X\xd0S\x85m[z\x9b\xc2\xd5CjN\xfdz\xc4ig\xc4;b\x89f#S\xd6\xf8ln<\xf7o\xfbs\x93}\xd3\xdcd\xfd\xb91\xd9\xce\xc4\xb6\x9b\xc9&\xd9,\x1a\xa9\xba\xb9\x1a\xa9xgw\x11\xf5x\x199\x17\xd7\xfe-\xccP\xec]\xf1\xb49?\x91\x17\xc3\xb1|(y\xa4?g\x1az\x9a\xb4\xfb\x80\xe9\xfa\x83\x14\xdb\xa3\xa2z\xdaz\x06\x10\x9d\x8e\x92NK\xa6\x08\xcc\xb2\x80-\xb3\xb0\xa3\xcaA\xa4\xa3\xe8Wj\xb8\xeb\"+\xb4\x07I\xb8\xf8\x82\xb0\x7f\xd6R\xa9_\xa8\\e \xca\xf6W\x84\x89\x1c\xb08\xe6q&\x92\xc4!\x17\xc3\x9f\xaf\xd6\x8c%\x0e\xb9\x19\xfe\x9a\xb1\x9c\xff\xc1\x1c\xf2z\xf8\xb3\xc8\x14r\x80O\xab\xb1\xbf\xa8\x9c\x03v\xcf\x98<\xc7\xe4\x0c\x81\x93r\x13\x08\xaf\xb5\xb5\x81\xe3\xdb\xf7\x0d\x13\xcd\xf0,\xc3\x05\x96/\xf5\x0c\x81T5\xff\x8a\x9a\xba\xd3\x07\xb0#h\xf9\xf1\x10\x0c\x06s4\xc10\x98\xa1\x05\x89\xc1\x1c\xfb\x801\x94\x19\xe0\xf1E\xc3\xa3!\xd0}D\xf8\xf6\x03\xc2\xe4}\xd3\x10\xf4\xce\xe0\xffG\x84\xe7\x16.s,\xf4Fx\x9d\xedM\x9b\x0c4 (\x15\x04\xa5]'2\xacdT\x83\xad\xc6=N\xc9y\xd6]0\xc5\x84/\xaeQ\x8a\xfd\x17\x08\xef\x1af\x9f[\xb0eq\x96\xfb\x82D\xcb\xa5\xff\x86\xe8\xe1\xb5\xdc\xd2\x0e\xf7\xa2\xd5\x05\xd7EW\xd0)L\x04\xec4\xc5\x0cI2\x83\x83\x9d)\x97\xfe\x0b\x921\xd8+\xf5_\x93mT\xe4\xcc\xff@rEz>\x92\xaf\xa2\xca1\"\xf1ro\xe0t\x94\xfb\x05c[a\\u\xa2\xc9\xf7\xe0A\x83m\xd3b\xc2\xba`\x7f\x11Ga:\xc3\xc1\xfe8\x8a\xc7\xfbs\x94R\x9c\xec\xa7\x89\xbf\x1f\xb2\xa51A\xd1[\x1c-p\x92\xee\xf3\x16R{\x1e|\x07\xea\xb4\x0e\x8cI\x9c\x18\xf38\xc1FH&q2\xe7k/\x1bX\xab\x15\xefR\xd5\x8b\x8c\xcfM\xea%\xd6\xd6\xde,\x8cF}Z\xd1\x9d\xf5PH5\xb9J`\xb26g\xe2T]7\xad\x9ejr_\x04\x95e\x1b)\xb3\xd5\xed>\xc3\xc5\xc30]\x10\x19\xc2\x7f!\x04\xf5\xa9I\xd5\x03)\x1cq\xf1\xfc\xf2\x0eh\xd6\xc9 7\x91\xb9\xb7`!\x1aMb\x12H Qr\xc9\xc4\xffj\xf7\x9cz\xbb\xe7X\xeca\xbf\xe7\xc0\xd03\x9b\x8dl\xd3\xd3zF\x1aM\xcbzF!\xf2\xc2g\xfa\x97\xf8_-\xf6\x85\xdf6\x89x|B\xe7(~\xe19\xb5Z\xfc\xbc90S/\x84\x91\x87,7~\xe15YZ\x8b\xa5!\x18y!Ok\xb1\xb4\xf6\xc0\x8c\xbc\x10\xfa2_\x9b\xa5uX\x1a\x82\xbe\xcc\xd7ai]QV\xa5uYZ\xafV\xe3\x8d\xb0\xc2G\xe2\xf4\x964\xc2\xfdVn\xa0\x91\xd6\x970\xaa/\xa1__\x8a\xa13\xf6\x1e\x10[F\x8e\xd90\x04\x13g\xd2\x9fL\x00D\x84\x86\x7f.\xf1\xed,\xa4,\x15\xe1qp\x00 \xfas\x89\\\xe08\x93 \xcf\xf3\xe7\x12\xcdQ\x12\x12\xec\x82\x83\xc9d\x12t\x00D_\x97\x89\xa8\x86g\x19\xe3p\xca^\xbb\x93n\xe0\x038\x0e\xd3?y+\x13\xdc\xf1;\x00\x8e#\xe4_\xb3\n\x1d\xfeL\xfc\x19\x0eP4\x8fI\xc0\xf3\x8c\xfd\x80\xa5\xb3\x12\x8e\xc3Z\x15o7a\x1ca\xea\x82>j\x8dq\x0b\xc0q\x12\xdf\x12\x17\xa0n\x0b\xb5\x10\x80\xe3e\x12\xdd\xdf\xc6q\xe0\x82\x00\x8f\xfb\xfd\x03\x00}\x14`**\xeaN\x0e1r\x00w\x1dN\x13\xccV\xc8\x1cx\x87\xa7\xc5~\x1c!\x86q\xd0\xea\x1d61\x80~\x9c\xa0\x88\x01s0\xe9:\xfc\x95L\xa2\xf8\x16'\xa2\xb6^\xe7\xb0\x8b\x03\x91\x9e\x86\xd15\xcb9\xe93T\xfd$\x9c\xa71qA\xe07;m\x96p\x8fHN\xbb\x00%\xd79f\xfd\xb1HQy\xfac\x952\x8d\xa3\x00\x93\x84!3\xee\xf7{\x8eJN\xd0\xbd\x0b\xd0!\xfb\xa3R0\xe6e{\x1d\x86\x8aL*e\xba\x9e\xa1\xeb\xd0\x05\xe3`|\xd0\x935\xcd\xd1\x94\xed\xc2\\\xd0\x1f\xe7p\xc4Qx\x83e\x8d\xddno\xdc\x92\x10\xc7 \xdb\xa71$\xfb\xbej%N\xfcY\x18\xb8\xe0\xf0\xb0\xdd\xf2}\x91\x96\xe0@T\xa82\xa5\xbcW]\x80\x0f\x0f{\x07H\xa6a$\x9b\xe8O\xc6~_6\x912\xfa\x0b\xcat\xfa\xed@A\xc4\x93\x05\xd6\xadIg\xd2\x99\x14\x92q)\x99.\x93?\x97q\x98r\xf2\xfa8h\x8ad\xc58\x87\x1d\xc7 \xda\x00\x06\x18/\x16!\xe1\xbd\xd6\xec\x1c\xca\x94\xf4\xfa^\xf5\xccX\xf4U8\x17-\xf7\x0e\xd9\x1f\x99\x80\xf5\x848\x98*\x96h\xe2C\xce\xa9\x930\xc1\xe3$d\xfc=n\xb1\xff\x00\x9cD\x8c\x9b\xd4\x98\x9aL\xd0\xc4\x01p\x12'8\xa5\x92\x12\xadV\x7f\xccs.\xfdY\x1a\"\x96K\xf0\xfd\x14\x85$\x1d\xc7I\xcc\x18\x8a\xfd\x01p:\x8bS\xaa*\xeb\x8ba\xcb\xd8\x85\x15\n\x0e\x18\xe55\xe6 \x10\xea\xb6X\x12G\xa4\xef\xb0?\xecM2M\x9f\xf7\x14\x7f\xbd\xc7Q\x14\xdf\xba\x00\x05\x93 \xebw\x81\xa9*1\x8b \xbe\x0f\xf0\xad\x1c\xe2<\x85*\x1a\xf6\x0e\xc7\x1d\x00C\x12\x84\x88p\x16\xf0\x83\xae\xdf\xf5E\xd24vA\x87\xf1X\x0b\xc0\xf0&N\xee9 x\x15\x92-'\x0e\xee\xf5}\x00#t\x83I\x80\x13\x17\xe0\x1e\xeeMP\x9e2\x8e\x96\xe9\x8c\x97s&]\x96|K$\n\x07\xfe\x84sd\x84\xe71\xf1g\xe1d\xc2\xd8\x8d\xd1\x98\xc9\x90(\x9c\xce\xe4\xf8GA\xd0\xc7=\x99\xa4F\xb7DN\xa4\xf11\x88\xe58\xe5I\x19\x1d\x15m&h\x82\x82\x96\xfa\xcaI\x1a\xb4\xd9\x9f,\x89\x03u\xe8`|\xe8\xe4i\xe5l\x8an\xe3\x9e\xdf\x94Ij\xa0L&\xc8a\x03E$f#\xa5\xe5\x8c[(KV\x8c\xda?\xf0\xf1$K\xcdG\xcaA\xff\xb0\x98\x88\x8b\x89\x14\xe3H\xd40v\xfcN\x80ez\x86\xe5d2\xc1\x1c\xfc9\x1b\x0d\x13\xf9(Ai\xb7\xfc\xa0\xcdi@\xd8+cfF\xd7L\x9eL\x9c {Kb\x86\x0e\xe3/\xd6=s\x1c\x84\xcb\xb9>q\xf4z~\xc00\x12_r\x91\xc8\xbaM\xa4)\x013F\xdd.#\x9dH],\x93E\x84]p\xd8>p\x82\xb1J\xcd)\xd5\xf6\xc7\xed\x83f\x96\x9eK\x95\x83q\xaf\x8fq\xf6a\xc1\xd6\xef\xd98\x98\xa0\xc3\x0c\x16M\x88t\xfaA\x93\xc96\xf1A\x88\x11\xc1\xe0\x07\xcdn\xbf\x0b\xe0<\x0cH\xcec\xcd\xc3\xe6\xe1\x01\xc36$\x94\xad\x98\xe6|\x06\x9c\xb0.\x9a\x87)\xbdO\xe2TN\x82\x98A\x18\xfb>JC\"R\xc6]\x00 \xbaAWq&'\x02\x8c\x02\x9ex/g\x0b\x07\xc08\n\"\xe4\xb3\xcf\xc1\xa4\xcb\xe8\xceE\xb6\x18\xa7\x8e#_\x83\x04\x8d]\xd0\x1b\xf7q\xab\x0d`.\xbcQ\x97g\xe1\xef\x1c\x8d\xc9\xa4#\x93\x04\xa9\x03t\xe0\x04=\x00\x17(\xc2\x9a\x10\xc1\x18\xf7Y_\xf1d\xc9\xe2\xfd\xc9\xf8\xb0/\x924\x82\xa1 \xc6\x8c\xc8,Y#W0>p\x98\x98]\xa0\x05\xbaG\xb7\xb3p\xc1\x91\x9e\x04]\x00\x17\x18\xf9\xb3\xc5r2\xe1(\xa3\xf1!KJ\x96L\x88\xf4\xbb\xed \x80j\xb4\xf8\x8e?\x06p\x11-\xe7.\x08\x02\xe4\x04\x01\x80\x8b\xf86P\x02x\xec`\xce\x89\x8aC\xfa\x92d \x1ec\xdfG*\xb9\xd7>di\x0c{\x86z\x12\xa7\xf7r!\xc1\x1d%\xf1=\x92\xe3\xa3\xd3\xec\x1d\xb2\xbeJQ\x10DX\xe6\xeb\x8f;\xddf\x9b%\xca1\x8b\xfa\xceA\x8b\xbd\x93@\xd55\xe9\xa0N\xcf\x01P\x1b\xc2\xb8?\xee\x1e\xf0\x94t\xc6\xcfe&\x93I\x97\x11+\x0d1!\xc8\x05\xc8\xe9\xb6Z\x01{\x8fn\x98\x14\xf4\x1d\xf6\x07\xc0\xc2x\xc7c\x005\xae\xee\xa1.\x97t\xfa\xe8w\xfa\x0e\x93>\xfa\xd8WID\x8eo\xc4x\xb2<\x06&\x07\x13\x005\xe1\xd0\xe9\xf5[L\xb0S&\x18\x83\xd6\xb8\xc3\x844\xc5Lr:Rr\xb2\xfd\x03eT\x0d\xfa\xe3I\xd0\x07\x90\xc6sDc>)\xb4;\x07\x00\xea\x83\xc9\xc1N\xe0\x00\xa8fc\x8c\xfb-\x86\xfe\xed\x0c#\xcaFJ\x80\xc7m\xf6\xaa\xa6I\xf9\x9c\xce\xe3k\xb9\x96d\xc2?\x97R\x8ezQ<\x89\xb8dZ\xf3\x05\xf0\x9d\xb7\xff\xfbwC\xd4\x98\xbcl\xbcq\x1a\x87\xa3\x87\xde\xfa\xfb}x[N\xed\xb3\xd4\xebrj\x9b\xa5\xbe/\xa7vX\xeako\xff\xf7d:\xbe4/\xd3g\xe6e\xf0\xd0\x84\xed\xb5u\x99>\x83O\xbc_Z\xdf\xef\x87\xf0\x0fQ\x1a}sq\xfe>l\xd4G\x83!\x83\xe5\xd9\xd0\x96O\xf5\xbc\xf2O\xde\xfe\xef\xb34\xca\xeav`{]\xcc\xa7\xd7\x9a}\x19X\xffz\xfc\x93\xa8\xfdB\xd4\x8e\xfe\xf1\xeaw@-\xdf6^\xc9\xed;\x10a\x9a\xaaU(s\xb3\xad\x0c\xb5J\xbb\xfe\x8ab\x05\x05\x0d\xf7\xe4\xaa\xdf\xeaP\x1b\xa8\xf1\x90\x8e\x06\xe0;Pg\x0f.\xe6\x971\xb8jExY\xb8S\xca\x95\x07&Y\xb8I\xda)\xa1&\x00u:l\x8e\xeat\xd8\x1a\xc1f\xcf\x92\x0b\xaf\xe2\xf76\xfb\xde\x11\xdf\xf9\xc0+~\xee\xb2\xcf=\xfey\xad7yk)\x05\xb0f\x01g\x16\xcb\x1e\xb0\xb2}^v\xbf\xd5\xedZ6\x8d\xdf\x84w80[\x99\xa2\xed\x7f\x14`\x88\xa2\xc5\x0c\xb9d\xbd\xd6\x00\xbf~\x8aV\xcd\xedM\xb74\xd0*\x9a\xe6\x90\xb57i\xf5\xdeR\xaa\xc9\xed\xb4\xea\xe4X}+\xad\xfe\x11\x80%\xad\x92\xf5Zh#^\xdb\xf8\x0e\xfb\xa689\x8d\xb7\x91\x8c\xdf\x9bm:U\x8d\xc7\xbc]\xa7\xa2\xdd\x987\xe9Xki@\xf4\x87\xdeT\xb8\xad\xa9p{S\xe1\xd6\xa6B\xd9\x94\xc4N#?\xff\xd8\x19I \x90\xf7I\x07\"\xbb\x91\x00\x92\xe9\xd8\x04\xf5\x9bBg!\x05I1Q\xc0\xb0\xdft\x9c\xd2\x87v\xf6\xc1\xaa\x03\x0b\xc0H\x117\xe5\x8d\xedE\x05\xd9\xd1\x81\x14\xa6[\xbb<\xdaN\x85h+\x15\"Ep\xde\xb7\xbew\xa1\xe3\xea\x0b\\\x97\xd5\xb8\xfaU\xb8\xfa\xdbp\xf57p](\\\x97\x02\xd7\xc5\x06\xae\xcb\xad\xb8.\xb6\xe3\xba\xd8\x8a\xeb\xe2\xb1\x1e\xf7y\x8f\xafu\x10\xba\x85\xd3\xfc\x8a\x00T\xb9b\x97\xbb\x03\x0b\xd8\xe8\xe4\xb1\x078T\xfc-\xf6\xb0\xcd\x00\xe1/y\x18'\x93\xdf\xbd\xb0 \xca\xa29\xa9\x94\xd43\xc3:\xb2\xf6[\x9c\xe3=\xcfCY\xb0\xec\xfcv\x05G`\xf00[b\xd7\x81)\xa2\xcb,\x8e\x07\xdf.\x11\x9c\xa6n*\xd1\x94\xb9\xd7\xee\x13\xd9\xd7\xd2\xbc,l \xe8{\xe9\x0b\xbb;\x88\xf6\xcdV#l \xcb\x8d\xf69T\xca\x04>\x94&\xf0\xc4\xa5\x9e\x994bk?\xaa\x9b\xc9\xf3x\xd0s\x1dK7\xddNX\x86\xb8AX\x86\x96\xfc\xa0n\xc4S\xcf$\x8d\x84}\xe9(=/}\xe6\xf5\xd4%\xcb2\xa2T\x87\xdc\x7f\x12\xd1\xed\xd9\xd7k\xf3\x8a;\xb0`\xf8\x1eWy\xba;\xe0\xe6\x9f\xe2<\xb3V\xc3\xc3&\xf7n\xc7\xaf\xb3\xe3a[\xbct\xf8KW\xbc\xf4\xc4\x0c\xccr\xd6Y\x8e:\xfb\xe2\xe2u\xbe:8\xcdO\x7f\xf2\xb31\xb3\xd9\xcb\xa6\xf1&we./\x80\x02\x07\xd4\xa9Ku\xcb\x88\x1c\xbaSsC+m\xe9\x06\x08E\xb5\xf4\xb1\xc9 c\xe5\xeb\x1fL\xca\xfe!V\xc14\xa1\x98]i\xa9?\x16\xed\x12D\x1e\xb6L!<\xf6\x89\xe6\x90\xa6V\xdbH\xa3\x15iD\xb1\xb1j\xf1\xa8\"|<\xabM\xbf\x82\x9b=\xeb\xa5\xed\xd9\x12Cl\xe7\xdd\x0b\xb1\x9du\xafu\xa4\x8f\xe0\xa6\x86\xc5yA\xff\xfe\xd7\xf1\xa8H\xcb\x82\xc0%/\xbc\xe6@!\xe82\xa9\x89\xb8\xd8\x14 \xfcP a\xb2\xef\xdbp\xd7\x9e\xf3ps\x82\xd9e{\x8f\x93D\x07\xe4\xf1\x9c\x1cBY5\x87S'fK#\xe6\xc9?\xca\x12\x82G\xd9\x10\xa9\x9f2\x1e=e<\xfam4\xda\xa8\x8a\xc9c\x8b?pa,\x1e\x99$\xb6\x8a,\xd2\xd3\xb0zSd\x91T\x05\xa1|\x0c/u\xa5\xf1*\x0f\xb7\xa7\xc8\x1d3\x188Ic\x01\x84|fP\xf0G\xcah\xbc\xfe[$|\x92\x1bO\xca\xdc\x985\x0dA\x9d\xfc\x0f\xb1\xe4\x89\xa0?\x94\xc4\x87\x92\xf29\x0c\x19e\xb0F\x19\x9cSf\x1b\x0f\x1eh\xbd\xf5U\xed\x9c$\xd4[6\\}\xceI\x9bR~\x93\xe6\x0c\xa8\nzJ\x10+\xbf0\x80+?\x88\xa9H;\xda~#\xf7e\xff\xa3\x80d\x8c\xb4W\x82d\xb5\xcaO\x95E\x8a\xa5\x03w\xf2-\xc0\xcd\xb6\xa0\x9c\xcb\x94\xca\xcf\x99\x94\xd9\x8d^\xe7\xff\xdf\x05\xe9\xafR\xeeL\xf8`\xd7\xd9-\xe7\xd0\xcf\x15\x8bF\x03\x9bR\xc4\x94W\x93\xd9\xe5p\x15{\xb5\xe4\x9dW\xbf\xc2\xac\xf9\x1e\xcf\x9dLK\x7fB\x1e\x19P\xdd8*\xb6\\\xd1fl\xad\xd7&\x93\xfe2\x1a\xe3P\xbf#\xf2\xaa\xb4\x10\xc8V\xaa\x18fKT\xf6]+\xf2\xbd\xa9<\xc0\x02\x9a \x92\n\xb3Z\xa0\x9fcSi\x99\xf8\x92\xed(d\xdaW\xd37\x1f\xd6\x90\xc0\x87|Q\xf6\xcat`\x13\x92\xbcG\x1a\xda\xea\x1c\x0b\x9f\x0f\xac\xa6/\xdeg\xf3{\xed\xac\xfe\xcf\xbf\x0b\x82\xb6HT0\xe4I[\x80x\xeb}6\xff\xd4\x80\xf8Y \xa2\x12\x08\x99\x06\xc7\x91\x1a\x9c+q\xdbF\x0bWiRk\xd3\x17\x86\x80\x97\x0e\xf1\x88\xed\x1a2\xb3\xa3\xe7\x9e\xed\xb4\x0f[\xfd\x01\xd9o\xb6\xec\xc3\x96\xcb\xfbe\x11\xdf\x9a&\xa9\xdbN\xb7k\xed7\xd9\x0fl\xd9\x1d\xee\x87!\xf1\xc8\xd0\x19\xc1\x98{\xd4\x84\xa1G\x86\xad\xcc\xa1\x99\xaem\xb0[\xcdV\xefYR\xb7\x0f\x9a\xdd\xd6\xb3\xb8n;\x07\xad\xd6\xb30\xd73\xb4\xf5^\xffU\xbf\x1f\xfb\xb3p\xa2\xfd\xb3F[\xbdf\xf2\"\x19\x08\xe0\xac}3\xe1\xbf\xae\xfc\xdd\x97\xe9\x05mF\xde\xca\x8f\x7f\xb7c\x1f\xe1\xadzu\xb7\xfe\xe4}6\x7f\xd4\xba\xf5\x97|5Pr\x0b\x03\xbes\x1c\x07\xc8\x1b\xd4r>4\x89\x07\xbe\x9bL&z\xb2\xb0\xed\xd8k*3\x0eF\xad\x17v\xf3\xe0\x10\x86^<\xa0.\x91`\xef%\xab\xd5\xaf\xa8\xe1\x08\xbek\xf3\xff\x00\x93\x131 X\xda\xd3\xd0o\xd2\x80\xd5\xaa\xc6\x03\x83C\\\xe6r\x1f89\xc4~\xc5\x81\xec\x8f\xe1\xd8MKQ[\xeb\x94\x04\xa7\x8b\x98\xa4\x98\x89\x1b5\x8cx\xa3\xd5v\xe4\x15\xbc\xb9\x86c\xe4_O\xb9B\xe7x\xa3d5\"\xff6\xed\xc3\xf6\xc6\xe8\xc8X\xe4i\x00r\xea\xff\x9d\xe6\x8b}\x98\xe0 L\xb0Owi_g\xf9\xbf\n\x01\xbf\xc7#\xa9o\xab\xc6E>\x06NH&\xb1\x02\x05|\xa7\x8e\xa8\xff\x81\xa6X\xc5Y3k\xc8\xdd\xf51\xf07 d\xa4\x8c\xe2i\xcc\xd6ww\x8fq\xad*y+n\xd4\xcf\xd1\x9d\x10\xba\xbbd\x9e.)\xc5\x89\x0bZ\x8b;\xb6ta\x8d|@\x04G\xee\xc3fw\xb5z\xedV\xbb\x0f\xe4\xc5{\xd0q\xfeU\xec\xbal\x05\xc4\x06\xe7\xab(\xf6\xaf7k\xa9b\xac\xbc\xd5|Mi7!\xb5K\x859sa\xec\xfd&\xb4'\xd8\xd3n\xbbeZ:\xe1\xcf\xaeV\x03o/\xce\xcf\xa4C$\x10\x12\x99\xae\xf9\xcb\xc79Y\xaa\xeaQ\xb7\xb4\x07\x99\x8f%\xee^\xf5\x13\x8e\xb0OE\x88\x15\xb2\x8c\xa2u\xd5\x8d;\xd9\xecj%\x1ft\x95\x1d\xbf\xb6|Jh\xfcs\x88oO'\xef0\x0ep\xb0Z\x99\xbbf-\x1cOb\xcf\xa9\x08\x03\xb3Z\xed\xed)\x1b!\xeeEZ\xf3\xe5B\xa4\xc3\xbf\x0d\x8fz&\x95j\n\x0bJ\xd3\x93S\xee\xfbQ\\j\xe4W0\x7fF\xd1\x12\x9b@,\x88\x1b4^48'\x00\x8b\x9f\xa1\xc7;\x95\xe2\x8e$\xf4b\xa1\x001sl\xd0\xa0\xf9\xf3s*\x89p\x11/ z$c\x9d\x7f\x12\xce0\xe4\xbd\xfe\xe4\x85V\xb8N\x0b\x1fa\xaa\xd7u\xc6@\xa2\xdaK\xd6,wT\x12=\x9aWoY\xb8z\x88_\xe8\xc5\xb3\x96\x85\xa3\x0c\xdf\x0bk\xb5=td\x86\xab\x15\xb2j5\xcc\xbd\xaffp>\x82b\xa3\x88\xc2~\xab\x91lb\xbd\xdf\xb2\xa0\x99\xaeVQ\xa9j\xee\\\xeb14\x1a\x050\xf7[\x8dx\x031^7\x03{\xb5\x92-\xeca\x11\xef\xb1\xc4\xa9\xa6o\xad\xe5Me\xec\x11\xb3\xd9e\xcc\x81\xf9m\xe3\x04[0\xe4\x89\xfa=c\x84s\x8fOBS5\x1c\xc1\xc4s\x8e\x92\xe78\xbfl\x9e\xd4\xeb\x16\x11W\xd9)\xbf\x00\xcc#\xe6*\x89!\xac\x03\xd4 \xbd\x96/\xafa\xc4\xa3\x0bC\x92\xeb\xceR\\\x10\x8d\x98\x04\xe9\x97\x90\xceL\xb0\x0f,6g,\xc7\xe2\xc4\xcft`^\x8d\xe5\xe2\xbc\x86H\xabao\xd3\xc9\x9be\xd5ja\xfa\x86;\xb1P\xf7\x00\xfdb\xf4\xe7\xfc\xf2\xf4p\x04\x89\xd7<\"\x9b7\xa8I\xbdn\xd1!i4G\xda\x0dj2:\x12!\x91E\xa6\xa2q`\xe2Q;\x9d\x85\x93\xdc\xc3G\xee\xc9:\x19`\xd7\\2xj\xb5%6\x13\xabV\xd3\x15\xd0I\x95Chj=\xb0\xacC:\xb2\x06&\x1e\xd2\xd1j\xc5\x7f\xbc\x87\xb5\x05}\xcc\x9f!\xffl\xb9<\x9d=\xaf-\xf6M\x9e\x04zJ\xa3\xfe=O\xd1\xaesW\xcfN\x19~\x9f?\x9e\x0d\x08\xbe5\xf9H\xb2?\x7f<\xb3\xf8\x84\x84o\xd9\x17\xc5i\x01\xf6\x1e0Y\xce]\xf0\x9a,\xe7\x80__\xfd\x14\x92i\x84\xb9Lv\x01\xff\x11\xe9\x9c@.\xe0\x0b\x1a\xa0\xb6p.8Q\x8e\x05\x02\xbcH\xb0\x8f\xd8r\x12\x9cd\xcf\x00\xe2;4\xe7\xb6\xea\xaf\xc5\x03\x80\xacW\xf85X\xf0N>\x01\x98`\x7f\x99\xa4\xdc\xfa\xff\xa3z\xe4;#t\xff~\xe2\x02\xde\xb8\x11O\x0c\x00o\xf1x\x16\xc7\xd7\xae\xf4D\xac\xf5\xd7\x0c\xeb\xe7\x0c\x01\x1e\xe2Q\x91\xb5\xf7<\x8f\x0e\xc8\x90\x8e\\m\x88\xcf\xb1Y\xe9\xce\x1d\x0f\xe8j\xb5\xd7t7\xcf\xf4\x07`\x82\xa2\x14\x03\xc6Y.\xe6\x84\x9cbx\x8fu\xcf\xb7Y\xf5\xfc\x1cM\x1al\xc2\x10\"\x98\x1e\x95\xce\x00\x1e\xa4,\x8c\xa0\x0f\x97p\x01'0\x803\xcf\xa4\x9e6\x12\x84S\x05\xcb\xacHzXCb\xb1\x81a\xd3\x19\x9e3\x81+\x1el|G1\xe1q\xd9\xde\xc6\xf1\xf5\x91\xba\x04n\xb2\x91\xcfsX\xdaAe2\x10\x8fnb\xcf1Y\xf28+\xaa@XU T\x05B\xb5`\xb4j5S\x06\xa2\xe3\xaa\x1a\xf3\x87\x0bV\xc8H1e\xdba\x03\xb0\x8a\x81\x11\xa6F\xce*\xb6\xf1\x11\x134\xc7\x06\x8d\x0d \xeb\x01?XP\xe1 \x93\x14\x00\x026\x98A\x86\xaa C\n2d\xb3e\xe6'\xceu\x05\x84\xd2\xaab\xa9*\x96\xda\xd9\xea\xf4I\x94\xf2\x06\x1eC,\xabOG-K\xf4\xf4\x14 \xad\x8c\xf9\xc1\x92=3\xf2|\xcc\xba\x19c\xb83K(\x04\xe1C\x91\x0d\xb2\x10\xea\x16\xf4\xbd\x875\\z\x0e4\x17%?\xd0\xba\xb0\xc7U\xc2>s\x8e`\xd2\x01\xad\x03[\x04\x9a%0\xf60\x9bu*\x9c\x15\xc4\xcaq\x86\x10T\x99\x97F\x0c |(\x05\xcae\x93\x96?LF\xfc\xa9^_\xbeh\xe2\xb6f\x9f!\xaf\xb3\x8b\x9eX$\xf1\x18\x8d\xa3{\xc3\x8f E!I\x0d?L|\xb6\xadf\x9d\x81I\x80\x89\x7fo jp\x9b\x15\xd7\x00\xf5X\x93\xdf\xd6\x11k\xc7\x8b\xcd(\xbb7\xce\x12\xd6\xc5H\xdfk\xcb\xdd\x98>b\xe1\xd1!\x11\x0e\xec\xcd\x88 g\xf8\xefO\xef\xdf\xd9|v7\xf9\xa3\x90\x1c\xe1\xe4\xde\x8c,K\xef\xd3\xd2\xd8\xf4fp\xe2\xc9`\x1d),zp\x0f0\x9c\xc8\xa2b\x11%]nq?\x94\xc9\x1cE\xe1W\xfcI\xff\x90-\xe9\xe4\xbb,<\x0b\x03\xfc6N\xa9\xf2\xd1\xaf\xca\xbe\xd5\xd2MZ\xc8&K\xe2\xbb\x05\"\xc1G\xa5\xca\xd4\x0b\xbf.~2i9s\x16E\x9e\xab\xd8\x02\xd6\xed\xe9\x9b0I\xa9\xc7[\xdbLW\xa8\xc6 \xdf\x1e\xa4/\xa3\xc5\x0c\x8d1?\xce\x8b\xeeE\xa9-\x1f\xb5\xa2l6\xe3S\xd7\xd6\xf2\xdbr\xc8JH\xfcrI\xd9\xdf\x99(\x92\xbf\xab\x0c\xdc3\x86 \xfc\x18%\xa9\xccVJ\x95\x99\x17\x88\xceN\xc9y\x18\x04\x11\xe6\xbbX\x91{#Yf_\x12\x9a,S\xb6\xedZ`_d-$i=z\x12\xdf\x92(F\xc1\xab%\xa51\xf1\xb2.,\xa6[Y\xa8 \xc6\xd1\x9fd\\!\x96\xb7\x90$\xb3\xc5$\xba\xff(;\xe6\x94\x08\x81$\xf1\xab\xfc\xa4\xe8>\x8bo_gl]`\xcf\xc2\x17\xd6\x01\x85\x04\x0d\x1d\xb1\xf6`-\xe0\x94\x8a\xea/\xd08G\xab\xfa\xbb\xac\x80\xcd\x0d\x17\xf1t\x1aaQ \x7f\xe7\x11\xf3y\x9e\xab4\x96`\x0b\xd6=\xc378\xd2a\xfdwU\x06\x93V\x17T\x03\x84\xad\x9a\xae\xc3\xc5O\xcb\x98*J\x15\xd3t\x14\xb9\x0e\x9ak\xaaS\x0d1-U\xd13d\xad\xbd'\xf8\xfd\xe4\xe2~!\xd4\xd3\x92\x7f+\xbed\x9cv\xcf\xba]@z\x1a\xdc\xe9\xa8}(}\xe3\x1cXL*\x8cxAl\x01\xd9\x9b\x10G\x81\xc4\xac\xfac\xc6\xbb)wy\xf2G8%q\x82\xcf\xc39\xfe\x80\x124\xc7\x14\xabA\xf2h\x16Y\x0d\x8a\xa2\xf8\x16\x07\xe7\xc1q\xe60\xc4\xa3U\xa9\xab\x15\x9b\xecr\xa0\xe5r\xf4\x13\x0f\xb5\xfc3JB\xd6R\xaaC^\x9dC\xf1\x10\xba;\x11\x1e%q\x90\x8b\x08\xaf\xbc\x064\x03\x8fn\xc9k\x0d2%G\x00\x9b\x8e\xe5n\xd8J\x04\x83@\xcd\xc2\xd9\xc6r\x9bD\xdd\xb8\xf2\x85\xb8\xdf\xcb\xccN\x88\xbf\x1fUZ\x9e*\xed\xd9C\x16t\x10\xab`\xbc\x10l \xe9C\x87*\x1c\xd0\xc8\xdb\xe3\x8b\x04\xba.\xaf\xa0q\xadV\\\x12\x95D\xbe\xf0\xeb3\xc6\x062\x04L\xc6xI\x8d\x04\xfb8\xbc\xc1\x81\xc1=\xe5\x18\xe0\x87:\xae\xff\x00\xd8\x8a\x9e\xc1k\xfcP\xcf\xc0\x86\x0f\xeb5\xdc2AUl\xfb\xf6\xf6p!{a.\xdcvcN\xb7V\xdd\xe3;tE-\xae\xf4;\xa2\xabU\x01GP\x98Q%\x0ea\xcaP\x94\xda>\xb6\xce#1i\xe0\xbb\x90\x1f\xfe\x18Xj\xeb\x8c\xcf){\x15\x8a\x14\xc31\xc6\xf7\x86\xf2\xc5&Cjx\x94\xad\xd9\xb7x\xdf\x94\x9eIW+\xe5\xdcI7\xfeS\xbb\xdc\xb5\xec\xa4M{\xc5\xd5\x8ac7\xd8(\xb4\x99u\x80\xdd\x82bb\xedV\xc5\x92\xd5k\x92\xda\xd9L\x81\xb0a\x0fI\xcb\xacR$c:\x8b\x97Q`d{uVX2\x0bK\xd1\x99\x85V2\x0b[-\xac]s+k\x82/IL\xa6\xb2\x96I\x9c\x18\xc5\xf6?\xe2\x93\xd87\xc4\xc9\xaa\xab\xa0\x19c\xc9\xb6PA\x14'\x9aG*\xb8I~gm\x159\xb08\x11\x96X0\xdf_\x16\xfd\xa6\xe9\xa3z\xcf9z\xe2z\xa7\xbcT\x83\xc5\xa5\x1a@\x93%\x06nV\x98\xa7\x89=\xaa\x9b5\xa2v\xecU\xc2`Kl-CI\x03\x11\xf6\xe6\x91\xb9\xa4*\x0c\xd8&\x87e\x06\xa2\x0e\xc4V\xc5\xc6\xba\xa0\n\xcb\xe5(\xe6r\xd4)\x00P9OWA\xa1\x04\xe6\xa0\xb9\xef\xb8B\xff\xf6\x8e\x03\xc6\x06\xfd@ZD\xfa8\x8c\xb4\xe45\xc4k\xd3\x827\\\x0f\xd9\xb6\xe0\x18{7\x18\xdeao\x8cU|Ex\xcb\xdf\xfc4\x85\xd7\xe2\x89;\x95\xfa1\x8a\xc7(\xe2\xear\xf8\x9e\xa7_\xe3\xfb \x9b\xdcR\xf8\x9a\xbf\xf3m\xcb\x87$\xbe \x03\x9c\xc0?pi\xeb\xb59\xc8+t\x9e\x1b\xea?\xae\xf9d;\x99\\\xf9\x97d\xba\x8f[lN\xf1jeN\xb1\xaeQ\x98\xa3k|\x81\xe7\x8b\x08Q,\x92-s\x08.\x89\xc1\xff\xfb\x7fs\x1c\x84\xc8\x00\x10\xb01\x8311\x10 \x0cs\x8e\xee\x84j\xdee\x9f,\xe3A\xe57\xd8\xfb\x91z[\x8b\x070\x82\xffx\x8dlJ\x1a\x80E\x12\x12\n\x0d\xb6\xed\xac\x8c \xa8v\xd4\x9ae\xdf\x10\x8f\xd6\x16\xbc-)\x1b g\xecO\xd8\xbb\xc3\xb9\x1e\xe9\x02Wi\x15\x95\xfb\xb9\xaa\x0d\x9cUj\xb7\xf8U8b\xe4z\xa2+\x0c_bx\x8c\xe1)\x86\x1f\xb0\xf7 \xdbAxc^\xb1\xee\xb9\xda\xb1{\xa4\xffx\xd7h9\x8b;N qdh$88\xba$\x19\xd1\x9f\xcc\xc7\xb6\xa4\x1fK\xaafE\x02jj\xf1lr\x87oTzY\xcb\x0c\x8c\xed\x94\"\x8a\xbd\x07aC$W5\x90\xa8E\x83\x86\x10'I\x90Z<\x02}\xc9\xdd\x9a\\\xcc\x9d\x84\xc11\xa2\xfe\xacJ\xb9+\x96\xc4\x98~b\xed\x99\xb2=\xbc\xb6\xe0^s]\xa8-\xe1>v\xb6\x04C\x16\xe0\xcapia)&\xca\x07\xcc5\x93\xb0\x9c\x0efM\xa1\xb3\x84\xe0S<\xc7\xdc\x9e\xc1\xb8\xc5\x84\x1a\xb7lz\xb1m\x1bX\x9b\x85\xb8\x1d\xa9*g\x00Xn>\x0b\xa3\x07\x8c\xaa\xe2\x0b\xb0\x05\x98@\x18\xcdl\xfb\x9c.\xe7s\x94\xdcg\x00S\xe4_\x1b4A>\xael%\x91\xea\xd8M\xf0xL?\xc6\"O`&&\xd1\x9f\x85C\\>\x88[\xb6c;\x8d\xc4\xb7;\x0e\xb08\xee\x1bU\x8c\x13Q\xfe\xc9\xda\x8f\xe3\xf9<\xa4\xbc\xda\xe6\xc1\xf8\xb0\x7f\xd0\x06\x96\xe5\x866\x0f\x15\x92`\xc2w\xa4\xa6\xd8\xfa$\xf1\"\xb5}\xf9\xc1ZC\xba6C;\xdb)X\xf0\x1d\xf6\xdec\xf3%\x1bk/w\x1ck\xce\xbf\x94@\xa2\xd9\xe1\xbd\x91\xc4\x9c\x07\x9d\x00O\xad#!\x99\x9a\xcec9\xdb=\x91\x97}_k#\xf4\x7f\xa8v\xd6igL\xb6TN\xe9\x9b\x04\xbf\x99\x02\xf8\xe0G(M\xdf\xa19v\xb1\x9d=C\xe9\xe7\x98[%e\xa7\xfa\xddf\x0b(\xef\xf9\xe2\xe5&\xc4\xb7\xaf\xe2;\x178\x86ct\x9b-\xf6\x17\xac+\xd8\x0d\xd1\x19\x80\x0f\x81\x0b\xce[\x07]\xbb\xd7o\x19\xcd\xce\x81}xx\xe8;F\xd3\xb1\xfb\xbdN\xa3o\xf7\xdb\x07F\xf3\xd0\xee\xf5\x9a\x0d\xf6\xc32\xf1\xb7\x1b\xc7o\xb0L\x07]\xc3\x11_\x9a\x8d\xbe}p\xd8S/2[\xe3\xb0g\xf7\xda]\xdf\xe1\xb9\xfb]\xa3o\xf7\x9d\x9e\xfcj\x14\xf3:>\xcb\xd3\xe9\x18\x8e!\xdb\xea\xdb\x07\x07=\xa3\xd8\xb0\xa8\xf0+XW\x0d\xa1M\x9c:=\xc7\xee5\xbb\n\xa7\xae\x86S\xbf\xa5\xe3\xd4oU\xe3\xd4o\x1e\xe88\xf5[\x02'\xa7S\x85S\xbf\x80S\x7f\x0bN\x87\x05\x9c\xfa\xad\x1bQ\xe1\x938\xf1\xfe9\xe8\x1b\xadv\xcfn\xb7\x0f}\xd9\xbc\xac\xba\xc9\xaa\xeev\x0d\x0d\x8e\x0e\x03@`\xde\xef6\xb2\x96\x0f\x9c\x96\x06\xed\x81\xd3\x9aq\x94Z\x1d\x81\x7f\xaf#\xf1\xef\xe9\xf8\x0b\x0e8p\x18\x994\xccU\x97w\x9a:\x9ft\x9a3Q\xe3\x938\xc9\xfe)\xe0\xd4\xeb\x16\xc8\xa5pjU\xe2\xd4o\x1e\x14pj\xe98u\xfb\x12\xa7\xbe\xec\xd3\x83V+\xc7\x89\xbdT\xe1\xd4o\x1fh8\xc9\\\x12\xa7n\xffi\x9c\x9a\x87m\xbb\xdb\xe9\x19\xcd^\xd7>p\xda\xfe\x81\xdd;4\x0e\xec^\x8f\xfd\xd37Z\x8e\xdd\xec\xb4\x0c\xc7h\x1d\xd8\xfd\x16g\xbb\x03\xfb\xc0i\x1a\xfc\xdf\x06\xfb\xdck\xa9\x97\x03\xbb\xdfm\x1b\x8e\xed\xb4\x9c\xa8\xd1\xeb\xdb\xedf\x93\xff\xb4Z\xacT\xaf/\x8a\x8aGU1/\xd5k\xdf8\xbe\xcc!\x1bm5\xe53o\xd7p\"VQ\xa7e\x88\x9f'\xd1\xea4;v\xf7\xf0\xc0h\xf7{\xf6\xc1A\xd7?\xb0\x0f\x04B\xec\x81C-\x00m\x1aY\xfb\x0d\x99\xa7{\xa8\x80\x93/\x07v\xbf\xd3n8\xb6\xd3k\xe9h\xb5z9V\x19N-\xa7S\x81\x93jR<\xb2\xfa$F\xad\xc3\xa6!(\xf4$F\xac\x83z\x87\x1d\xa3\xdd\xec\xdb\x9d^\x87wTVu7\xaf\x9a\xf5\x80lY `\xf0.U8K|\x05\"\x92\x9e\xb2\x7f\xb6b\xdfj \xec\x05\x91d/\xe5\xdd\xd8R\xdd\xe84\xa3B\xaf?\x89\x93\xec\x1d\xe3\xf0\xc0n\xf7Z\xbe\"\xa4\xe4\xba\"\x03p\x9cJ\x9d\xd8/vb$\xdb5\x04\x14\x02X#\x83\xb3\xd7\x96\xcfY\x87\xb6\x9c-(\xf5\x14J\xadV$\xea\xe4U\xb79JlWk\x1e\xb3\xe5\xc0\xf1\x8e\xcb\x01DB\xe1n\xd85Z)\xdf\xcaD!\xc1(1B2\xe1\xdbV> \xcb\xedLW-\xbb\xe5T\x99'\xf81\xa1\x98P\xd7\xf8\xe1\x07\xfe.c\xd8\xb8FHX}\x8dq\x14\xfb\xd7\xfc\x8b\x88\xfe\xc2M\xa2\\\xa3\xd1\xea\xf2\n\xc4\xe2\x9e\xce\xd4\x92`\x12F\x91\x9b\xed\x96\xf4\x05\xc6\xff\x19x-\xb6:\xab\x8c\xc3.m0\xd7\x96\x05\xcf\xb3\xfd\xd2)\xeb\xb4\xd3\x1d;m\x12\x13\xda\x98\x08\x93_c\x86\xa3\x1b~\xd4#\x0c\x8au\xfc\xd9*\x8b\xbfS|G\x1b(\n\xa7\xc45|L(N\x8e\xb2z\xb8\xa9\xa6!\x11S\xf8\xbaF\xdbY\xdc\xb11\xc9\x7f\xf4\xbd\x96\xc02\xeb\x90\xff\x15\xb0X\xd6S\x94>\xd9\xba+\xac\xb0\xac\xc1\xd5Q\x15\xc4F\xf1\x9b6\x82[\xb7n\x9b\x9b\xa0\xf0\x06\xc0\x07\xeeS\\\xd8\xd6\xbe\xe4$\x02\x82D`\xbd\xb9\xf6<\xe7\x1e\xdb\x19\x1d\xf4\xcd\x820h\x06g1\xb7>7\xaa\xb7rg\xdb\x8bZj\x9b\xf1a\x99`m\xab\xf1\x06{\xaa\x96c6x\xee(\x8f\x83\x7f\x8f\xcd\x07F\xdf\xaf\xd8{\x83\xedL \xf4\x99\xbf\x1e\xc7$]\xceq\x02_a\x8f\x98-\x0b~/l\xe3:\x16\xfc\"\x9e\xba\xfa-f]G\xa1\x9b\x00\xdc\xa2\x90\xe2\xc4\x12\xdd!\xb5\x1c\xf2\xc7,\xebn\x8f6\xcbO1\xc1 \xa2\xb1\xaa\xa1p\xe6/\xb5\x8eD\x9cTg1mE-\xc3\x0e\xe4H~\x8f-{\xbc$A\x84M\x0c\x1fd\xe0{\xf7A\xdcx\xb9\x0d\xe9\xec8\xc1\x01\xe6\xb7\x01Rw\xaf\xb9^\xaf\xad\x91\n0+\xe1\xc9\x14\xba&\xf5\x88\x9d\xb2N\xb0,;\xbdE\xd3)N\x06\xc3\x16|\x8bMj\x8d\xdca\x0b\xd2,\xbe\x7fF\x9a\xb7:i\x8a\xfa\xe0\xa1\xd8\xad\xb2\x9eBT\xc6\x906\xe6q\x80G\xaeq\x1c\x93\x1b\x9cp\xdd\xfd\xfb\x05&/?\x9c\x1a-\xdb1h\x9c\xbd\xb6m\xb6\xa1\xad\x8e;\xae\xdf\x83\x97\xe4\xfc\xc2F\x14\xaf\xf3\xfd\xf8\xcab\xc4\x10Wv\xf6\x1c~\xad\xf0=\x89\xee\xd93\xbf\xa3\x06\x1e\xd6\x00\"\xe2\xcf\xe2$u\xf7\x9c\xb5>B\xa5o\x91L\xfbK\xf8 \x85\x99\xd4j\x89\x1d/0A\x8bP\x86\xd1\xe7*\xa6\x9f9\xfb\xf4,\xf8+{\xe8u-\xf8#OiZ\xf0'\xec\xfd\x88\x85\x81\x02\xfce\x9b\xb9\x92\xf5\x90\x1fK\x8dQ\xcao\xcaxE\xd5m\xc0\xb1\xcd`\xe3\xfe5E\xc0\xef\xd8\xc3\x0c\xf9(\x0e0\x0c\xbdl\x9d\x19\xd7j1D|\xaci\xad\x9e\x87s,\xfc\xb7\xaa\xe3v;$\xf2\xc4\x9dk?\\\xfe\xc8\x04,N\xd4I;C\x9cBd\x89Cx?\x8e\xafC,3\xf2\xebaY>\xc2G\x86\xca]:\x9d/R\xe53\xc1w\x0b\xecS\x1c\x18\x8b\x8c@Q\xec\xcb\xbd=\xe3\x9a\x900B\xac\xc3\x89\xb9\x97yW+Vr\x1e\xa6\xdc\x12E\xb0#\xa24 \xc7K\x8a\x8d8Q\x1b|n\"\x917\x00\xea\xbc\xce\xa3m\xc8\xcbV\xf4e\x88t}\x83\x12#\x86\xa1G${B\xe4e<\n\xf8\xd6\x81\xaf\x98\x06\xc8\xe3\x96\xc3sD\x93\xf0\x0e\xc8\x19\x1cy\xe0\x08\xb0\xb5B\xc6\xca\xa0\x8e\xea\xa0\x9a\x9d\xc3\";\xc7\x8c\x9d\xe3jvN`l\xed\xc4\xc1\xdc\xabj\x08\xa9\xec\xc1b\xa7m\"+\xa9C%i&q2\xcfr\xf3\x11\xcbr\x89\xaa\xf8\x15\xe3\x13\xcc\xe3\x07\xe3 \xcbU\x94{\x895 \x83\xac\xa0\x8b9\x97$R\xd0\xfc\xab\xe5l\x8a\x9a\x8b\x19\x96\x9dZl\x80\x8d\x95\x98D\xf7\x06\xdb\x9f\x87>\x1aG\xdc\x1a\x9dK\xc8T\x8c\x1b\x01\xd7\"\\\xfc=\xb0V\x8f\x01U\xa8}g\x98r\xf9\x99\x99\xb0\x90\xd5\xaa\x0c\xd3j\xb5\xe1\xc9/)O\x1b9$\x9aL\xae\x00\x831\xbf\xa8,\x15\xd2Y\xca \x8f\x1b\xd7\x88\xd9\x03Q\x1e\xb2m\xe7\xd1*\xdae5s6bC\x95\xf2qZ\xe6\xb2\x92\x0c)\xb2\x99\x14\xf8e\xa3\x1fa\x06\n\\>\xdc\xb2\xb9\x00\x86^\xf5`\x81\xc8+\x0c\xaaPN\x06j\xf2\x080[\xa5~\xfex\x9a\xe91L\x94\x8d,>SX\xc3p$\xa6\x85\xbfB\x01\x81\"\x97V\x92\x04:\x01\x94\xa0\xfc\x9b\xe3\xec\xdb\xc1\x12\x0dW\xf6\xcc\xae\x95=!\x93\xf3\xc9i\xa9-\xee\xf6\x7f\xff\xeer?\x0f\x87w\xb9/\x9cS\xa4\x97\xfb\xc3\xdf/\xf7G\xf5\xef\xf7\xe5\xaeg\xb5*Lp\x8b\xe2*`\xf3\x82\x93\xf2\xb3\xb9\xe7yd\x90x\x94\xed\xaa\x07l\xea\x04u\xec\x82\xa1\x9cGm\xdb\xe0\x8b\x19c\xc4\xd3\x0bE\xc0sO~,|\xa2|\xdb\xc1\x9d\x0e\x0f\x00\xb7u\x9c/\xe8=p\xc1\x0bOV\xca\xbb6\xd1\xee\xa8\xd1|\xbb\xcc\xef..\xa8 \xd8>\x19\xf9\x14')\x80\xd8\xce\xd6\xf4\xecY-\xf9\xad\xa3\x1c\x9eZ\x8d\xaa\xe8\xc4r\xff\xc4* \xc5-4^\x9e/\xdeEq\xfe\xa8\x95N\xb2\xd2\x89t\xa8\x06\xc3j\x83<\xb6\xd2\xd6\x1c\x19d\xde\x96\x1d5>\xf6\x7fw.m\xe7YS\xf5\x0b\xb5\x06 \xc0~8G\x91\xc1\xe7\x94\xd4\xe0d\xa3\xca\xae\xce\x06\xd6\xb09\x92\x9a\x04\x17\xa8\x9d\x13\xbf\xc4V\xa7\xeb\xb5\x89\xed|7em\xf4c\x98\x81\x1eZ\xba{k\xb9\x85\xd2z\x99c\xce\xd2\x06\xa6X\xde\x14\xb7T\x03`\x1a\x80w<\x8c\xeby\x05\xecE\xb0\x81L\x16u\x88\x97\xf2\x0en\x00\x0c\x0b\xb8\xc0\x18\x01\xcb}\xba]U\xe69k\x97\x11\xa5\xd0B\xb1\x06\x85\xcd\x16\xd0_\x18\x92\xbf\n\xb0k\x04\x8932\xc5\x16\xd4\xbc_\x07j\x1dX\xd4\x0e\x0cG\xca\xe8\x96\x1b\xd3\x0dG0\xf4\x86\xa3\\\x11Ti\x15\x8d\xb3{*\x03j\x87\xc4\x8f\x96\x01NM\xb1\xb6\xb4\x06\"0,[\xcb\x86\xd9\x13QO\xdc\xa7\"\xbfp\xa2W\xa9m\xd9h\x16mU\xd6\xd7\xc8S\x88Haul\xbd\x14\xcbD\x95\x1e2rV\\vo-\x87\xad\xc7\xa0b\xbb8\x9b \xb3\x88k\xb5Q\x82M2\xa4\xa3\xa2\x9eu^Xj\xe7v\xad\x03\x9dv4\xb9\x97\xa3\x8a_X=\xca\xd0\x16\xbbZ\x0f\x00H\xf5\xcd\xa1\x88\xe3\x9b#\x80\xd7k]m\xcd\xef3g\xc6\xefB\x81\x83\x95\xc3\x02%}\xedY\x82'y\x9f\xe6\x97\xb6\xed\x19\x9dG\xc0\x92;>\xf3?\\\x1d\xc9i\xcc:\x0d\xafM\xcbr+\xbf\xe9AX\xab.\x1cgd\x10q:R\x8a\x12\xaa.\x8a\xef\x03\xcb\"\x1e\x00uuS/\x94\xb30\xef\x04~\xfa\xe1\xc7\xd1j\x05D\xd4T`\xd5\xe9\x11\x8eRlTz\xb2\xdd7\x07\xee\xefC\xd4\xf8:b\xff8\x8d\xc3\xba\xdd\x18=sW\x97\xfb\x97\xfb\x96\xa6)3)k5\xaf\xa9\x04\x14\xc8b\x88T\x00uD\xb4T\x11b\xb5\xf2\x9aaE\x12\xdbNZ\\\xd1=c\xb4s)\xe3\x18\x0e\x03\xf1\xf8]\xfa:\xd8\x07\xf5\xec\xe0\x81+]\xd9\x8c\x8b\xb3\xfbw\x8e\xe6\xd4^\x0c\xd9\x87e\x12\xb9`\x1f\xacG\x16\xa4[\x15\x1a;\xc3\x87-\xc8kLLl/\x93\xc8\x82\x01N\xfd$\x14V\xe0\xd8\xd6\xde\xd8\xcc\xbb\xce\xf4\xeaS\xea\x01\xe9_r\xff\xe5\x92\xce0\xa1\xa1\xe0\xb7}\xc1\x87\xf7\xb4Bw\xfa\xa0\xdcr\x058\xd2\xbcx\xc5\x0b\x9a\x82\xf5\x10\x8fV+\xdd\xe5\xffM\xd5\xe8\xcd\xefa\x86\x11\xc5I\x15\xf6{\x9cj\x03\\\xe8\xe4\xbb\x06\xb0j\xb5\xbd*\xe5\x8f\x11\x92\x07p\xd7PW%\x1b \x9e\x00w\xcf\x81,-\x0ep#\x157\xbb\xf4\xb4O\xc5$y\x06\xfc\x0e\xcd\xb1J\x92\x17\xbd\xb3,\xe2zO\xf0\x96\xaf\xfb\xf2\x1b>\xeas\x14Oc\xf5\xacn\x84\xab\xf7\x94_\xce\xc9\xb2R4\xfd1\x89\x97\x8b\xee+\xa8\xa6\x89e\xebE\xa3\xb9\xe6[\xc7`\xe9o;\xf2\xa1C2\xe2w_!][\xf0a-\xa3\xd2R\x8f\x98\xedC\xeb\x88\x98\xad\xc3\xb6\x05\xd9OG\xfct\xc5OO\xfc\x1c\x88\x9f\xbe\xf89d?m\xaeb6\xdbNS\xfc\xb4\xc4O[\xfct\xc4OW\xfc\xf4\xc4\xcf\x81\xf8\xe9\x8b\x1fQKS\xd4\xd2\x14\xb54[\x9a(\xbb\xab\x9e\"\x81\x1f\x85\xd7l\xc3C=Z\n\x1f%$\xfd\x98\xda\x11\"\xd3%\x9ab\x1e\xa5_\x92\x80\xf0\xe0\xe2\x85\x8f\x15\xc3\xe1\x8a\x87\x93\xbdJ\x01\x04~\xbd\x0e\\\xe0/\x16\xec\xf9;\xf6\x98\xceP\xc2\xde\xc46,\xbc\xc1\x0d\x1f\xb8\xf9\x9b\x0f\xa0\x0c67F\xe9\x0c\xc0\x9bp\x1e\xb9\xe0&\x9c\xcb\x91$!g\xb2od\xc11\xb5g\xe1t\xc6\x9d/\xf2\xed\x81\x1e\x0c\xff\x96V\x9ax\x17\xf4\x17\x10\xc1\x14\xcaK\xf9G\x89\xcd5t\x9e\x19{\xf2\x11\x86\x1e\x86\xbe\xc7\x0dU\x97\x9e\x03\x17\xfay\xda\xd2\xe3g\xa1'\x88b\xcb\x9ebz\x11\xce\xb1i\xa9\xec\x91\x17\xcbCs\x04S\x0b\xfa\xab\x95\x89\xbc\x94\x7f\xb3\xd6\xfa\x0d\x131\xbdUVE\xbd\xb0a\xe2F\x16\xef\xc6\x10\xdeo`\x9a\xdf\x01\x80\xf4\xb9\xe7\xacV\xf4E80\xfdZ\xcd\xf4#\x8c\x12V<^R\xd3W\xd0Xp\xe9\xe1GA\xb2\\\xf6\xea{\xa9h\x9c\x95^@jY0Z[\xda\xee\xe6\x9a\xd3\xd4\xc9\x13\xde\xcb\x04\x9d'\xec\x90\xa48\xa1\xaf\xf0$N\xb0 \xae\xd0\x0d\x12\xf2\x16\xc0L\x87\xff\x00\xa4\x8e\xfc^^\xc5\x01\xee\x83R\xf4\xef\x9b\xc3\x078\xbaL\x9fY\xc0\x1c\xb8\x97\x97\xf6j\xf8\xfb\xe5%\xb8L.\xc9\xc8z\x06\xcc\x81w\x99>s\xad\xfd\x10Fq|=\xc6\xb3\x90\x04|\xa4g\xbe\x8bv\x85f\xc1\xd0Xr\x01\x0f\xe0\x83\x82\xa8\n\x12>\x1d_\xde>{\xbaq>\x82^\xf3;y\x19\x95\xfe\xc86t\x85p\xfa\x9ake\xcenV\xe5\xceX\xac\x88d\x96\xd5J>(\xb7\xee\xce\xe6\xb1\xd4\xff\x9b\xe3y\x1c~\xc5|\xbb\xcf\x0f\xfa\x0d\x1f\x11\xa1\x0c\x19c\xa1\x0f\xc1\x81Acc\x8e\xe9,\x0eR\xb6_\xf9\x8a\x93\xd8\xc8\xd8*?\xc8\xfaCV\x16\xfc\x01\xea\x14\x86\x9el>[z\x0d\x93\x91\xf7\x9a\xee\xee\xb4\x80XPF\xd2\xd7\xc6\x80\x92\xb0\xb30e\xf5y\xdek.\xa7\xe4k\x98\xdfN\x907\xec\x87\xc9h\xbd\xb6\xd6\xa6\x162\xa6\x8a\xa8SL\xb7\x91t+vSL\xff\x16n%?\x07\x7f\x13\xb3]\xfbvK\xb7&\xc6\x143NN\xa11\x8d\xa9\x01\xear\x0d\xae\xf8\xad\x0e\x8c\x90\xa4\x14\xa3\x00\x88\xd9\xec\x13\xf5\xc0\x0c\xa53\x7f\x86\xc8\x14\x03xA=\x82o\xf5\xd5y\xc6\xd38\x93]\xfc\xb6\x88\xb8\x9f;\x0f\xa9.\"\xb1\xfd\x07K\xc2 \xffb~\xe2\xfeB\x97I\x82 =\x0d,y\xa9Wfa\x0d\x19\xbfb\x9b\xbb|y=\x0f\x19\xdc\"\xc38$\x81i\x15\xcd\x8c6|L\xe46F\x10dM\x80\xad\xfd\x81\x07\x15\xba\xb0\x8d=\x06Jg\xc53~\x17\x80\xa2\xe3\x88&\xf4c2 \xa7\xcb\xdc\x91\x04\xd4`\xe1^\x11\xdf\xc4\xc9iPu\xe6\x8eEx(Q\xa9\xee\xf3m9f\"j\\e\x92\xa0\x93\xccFAp\x16\xa6\x14\x13\x9cp\xe2Z\xdb/\x90R;\xc1\xf3\xf8\x06\x17\xf3\xaf\x8b\x0d3J\xeb\xfdGq\xad&\x89\x82\x82\x80\xf7LV\xbe\xc0'Y\xef\xc3\xbd\xa6U\xac\x93\xad\"\xe3\x14o\xa9V\x00\xb5K\xcd\xa5j\xa5\x96\xbfd!Qa(\xc0\x1a\x13\x96l\xb8V\xc3{\x9e\xa0`\xc6\",\xdf@\x023\x0bS\x1a'\xf7\xaanq\x0fI\xdcR\x01\xb0j\x03\xaa\xf4@\xdf\x01k\xe8\x8c\x84\xb3\xb4\xac\xc7MlY\xaeY\xaaz\xb1Lg\xff@\xbd9YL\xee-K\x93GR0`\xcb\x1c\xfe,z\x14\xfe\xcc\xb6<\xe3xI|<\x82\x85\x91\"1U7u\xf8\xf6\x98K\xfe+\xb6\xaceK\xd7\x97t\xab\x0d\x11\x15\xb7\xe9\x17|\xe4\x9e\xa3\x85tO\x90\xe0\x9b\x0b\x9c\xcc=\x00r#\xa3\xbc\xdfPP\x1c\n\xaa\x12;\xe5\xf6\x1e\xac\xaa+*/h\xea\\\xc4\xb7X\xd5%\xc57i\xe1Rh\x89m\x02\xb6\x8c\xa1\xa3\xacx\x85\xeb\x1b\xb6Bl4yl\x17\xb5G\xe0\xae\x8f\x88\xbd$s\x94\\\x9br\x97\xaa\x9aN\xb8i\xd6Q~\x8d\xd3\x81\x89\x87\x8f\xc8\xf3Dw\xde&\x16\x9d^2$\xa3\xbc\xf5\x19J\xcdXZRft\x88\x15\x1db\xab\xfb~\x95WT\xccn\x0e//\xd3\xcb\xcbO\xa3g\x03\xeb\x85\xfe\xf2|\xff\xf2\xb2\xf5b\xf5d!s\xe0\xee\xbfX]^\x92\x87\x16\\[\x96%\xd4\x1b\x1f\xb7\x0d\xf6\x8a\xa1#\xf5\x1c\x1e\x96~O\xa4wgo8*$|\\\x16L\xd3\xa0\x88g\xa9h\xd7\x14'\x17J\x1c_\xc4\x8b\xb7\xa2\x98G\xed\x14\xdd`\xf9\xc6\x15\x97n\xcb\x93g\x05\xa5/\xb0\xa2<\xcb\xb6\x91h\xf3#\x85o\xc8\x1e\xb0q\x1e'\xe14$(z\x9b#\x94\xe1\xb1.\xe0\xfa\x9a\xcc\x10\xf1\xb1\xe2\xa92\x8fI\xd7;\x9b\xd5y\x8fT\xa2\x92\xc5*\xe8\x91\x8c\xd6c\xa0\xa8d\xaf\xdc5\xb9\x88V\xce\xb5\xb2\xe5P\xb5\xf1!\xc3\xe9#\x9e\xbe\xbe[\x98\x1fh~\xd6\xae\xf1\xd9\xfe\x14R\x0b\x82\xe9<\x04V\xa6\xab\x14\xf6\x8c\x17\xf8Nn\xc4\xde\npJ\xb3\xb74\xe8\x90\xd6PZS\xe0\xf7\xef\xbe\x1b\xb0\xd1\xc1\x96\xe9`\x0er\x97\x9f\xe4E\xa3Y\xf2\xd2I,\x17\x97\x16T9\xc3x\xc5\x9d@!\x8c\x8f\xb0L-\xb0\xb3\x05\xb1\x875\x07\x8f\xdf\x99\x97A\xdd:\xda\x9f\x16\xacws\xf2\x88\x05\xb6=I\xe2\xf9\xf1\x0c%\xc7q\x80\xf3\xe8\xb8\x146\x1d>Sh\x15\xa2\xf9\x82\xd5\x06j@\x85\x03z\x08\x037\x19$\\\x8b\xca\xcd1\xddL')\x13 \xd7\xbbb\xe1~\xda\xa5\xd2 n8Z\xe7w\xb6\xd5qI\\$\xc4$b;[\xf2V\x0dV]\x92V9\xae\x18\x8e\x8eJ\xaeI\x9f\x9e\xd9\xf2\xa3\x1a\xfe\xa4\xae\x0e\x08\xf6,\x01`\xc6bLZ\xd9\xf2\x9e\x96&qJ\x91?S\xd9Or\xc5mZ1\x89U\xcc\x0b:\x0fe,$\x8ea\xf2N\x186.\xf7//\x7f\xff\xfeY}`\x9b\xd6jx9zX\x8fX\xa7\\^~_\x03l)\"\xb9\xa2\x0c}\x91U\xb8'V\x93H\xc2P\xccZOJxbA0\x0f\xa7\xc0\xe2\x87\xab\x10\xb1\x7fR/\x11\x91\xbb\xb1\x05#\xcf9J\x8f\xac\x07u^\xaaqT\x04S\xb1\xaa\xb6X\xb6\xc4\x8ePJO\xd9;\xa7\xb5\xef\xd1a:l\x8eV\xabt\xd8\xe2\xffvG#\xb8\xf4\xd2a\x9b\xbf\xf5Fp\xe1\xa5\xc3\xce\xe8\xc8\xaf\xd5\x90\xa8=\x07\xcd\xf5sW\x13\xdc\n7U\xae\xda]\xdf.\xbc\x8b\xaf\xeen\xba\x9dju\xcf;j.-\x0b\xca\x8a-\xf8\xa0\x1c\x13\xb8\x8b\xb5\xb5\xb6tz\xac\xab\xe8\xa0\xed\x18&\x8c~\x81\xe7\x1c\x05\xcfC%\x08\x02%\x08f^8\x0cFG\xb3Zm\"=Z\x17:vfY\x10\x0d\x83Q\xf6\x99\xbdd\xf2t\"\x8d\xf9\xb3\xc5\xdc;*\x85\xfd\x9e\x12\xf2\x0f\xeb\\\xc8C\xe2\xed\x9b\xc3\xcb\xdb\xc6\xa8n]\xa6\xcf\xbc\xcb\xf4\x999p\x1f\xcc\xe1\xef\xebQ}`\xadW\xc0\x1c\xfe\x0e\xd8#\xb0\xf6\xa7\xe1\x1c&\xde\xc3\xfaH\xde\x14\xe3Wy$\xc6\xd6\x91\x15NL:l\x8f\xacdH\x87\xcd\xd1\xc8c/\xf9a\xe5\xb05R\xf3\x86\x1c\xe44\xb9\x7f\x88=\xcd\xc1&\xcf#\x8f\x8b\xb1\xf5\xb0V\x15\xc5\n9a\x17\x7f\xf6\xc8\xaaU\xec\x04Xm\x89W\xbe\xbf\xc0\xbeAl\xa7\x0b\xec\xf3\xd8=\xca\x85bQ\x12\xaa\xaf\xe5SC]2h\x9f2Sn\xbebI\xeb\xfbs\xeb\x88\xbeh4\xd5NJ\xaf}\xb3\xac\xb6\x8a\xa1j\x1f\x13H?\x8fg!\xb9\x16E\xa6\x98\x9eh\x89f)\xe3\x9b0\x127z\xca\x99\xd5\x87\\\x99\xa6\x8b\xabR\xad:MY\x7f\xe5\x84\xe44\xf9\x9cD\x96.\x07\x8b\x9f\xf8\x19y\xae\xe5y\x15\xc5\xe3\xec\xe5\xf3\xc73\xfdY\xde\xa1\x13]\xf3\xf9\xe3\x99\xd2*21\xc4\xca\x99\xc3\x92Eq\xb99\xe1G\xa4e\x8d\xe0\x03\xc3\xc3\x05\xd2\xe0\x8f\xaf\x98\xae\xd2\x98\x80u\xb6Z\xdc\xde\xac\xb9\xa1\x0c\xab \\\x89&{\xdb\x89\x02\xe4M6[\x00 \xf6\x9f\xe7\xe55\xb5\x9c\x0c\x05\x93\xe5\x86b|\x8fSL\xb2S\xec/\x93\x90\xdesw\x8c\x98\xfbD\x14\xfb\xb0T$\x14$:f\x9f\xcbf\xee\xf2\xd4+\xf4\xa8\xcd&\xd7\x89I\x86\xc9\x88-?\xf00\x19\xadVC\xeeI>\xb4\nj\xd6\x1d\xa4`hA\xbebU\x81\x19O\x03wJ\xeb L\xfdx\x81S\x17\xad\xad\xa3\xa2U\xdd;66\x95\x0b=\x85\x96!\xd00\x12<\xc1 &>\x0e\\\xe1\xce\xd76>]\x87\xfcD\x17\xf0\x95\xf3\xf6\x03r\xcd}!\xbf\xb4y\xb2U,\x88\x85?\x0c\xa5x\x88\x17X\x04v\xcd7\xaf\xdc\x11\xa1\x88\x98\x89<\xac\xe8e\x1d\xb1%FH?\x8a\x17%4S\xcf\x81Q\x81\xfe\xc8:J\x9fGJ\x90\xa7\xf5\xba\xa5\xf2\xfa^4L\xd9|\x86\x86>\x9b\xc9\x1c8)\x94\\f\x18\x12j\x1d-\x9eOT%\x0b5\x1b\x04\xded\xb8\x18\xc1\x99\xb7\x1c\x06#8\xe7\xe3d\xce\xf8i\xe7\x1e\x9bI\xeb\x0d\xee\n\xc6\x87\xdcw\x16N\xdc_\xf2\xcbb\xc3\x04R\xe8\xc3`d\xf1(f?\xe3d\xec\x06\x90\x95\xc9\xcf\xf8\xdd\xa5\x9d\x19E\xa6\x8c}\xf8w\xe1r\x93}\x94\xe7\xfbke\xc8\x05C\xb6\xe4:*Q\\\xccXsk]%\x91\xa8\xf0\xf4Z\xd6\x05 \x83U\x1cx{\x85\xd7mZ\xd0W\xd8&%\xb5\xa7*\x02\xb2\x13\xc3\xadE'\xa5\xa2\x02&]a\n\xdf<\xc5h\xb1\xb6\x12\x8e\xb9\x1d\x1cWLk\xeb\xf003ro$Z\xe0\xf6q\x05\x8f\x89j6\xcc\x9d\xa8y7T/\xb2Q\xc2\xaa\x9c\xb38%\x98\x18\xe7\xb4\xd8X\xee\xeb\x84*\xa9\x04\x18\x0ey\x01\xedL\x90\x15T\xf1h\x04,Gj\xfa\xd3\xba\"\x1c\x96mk\xa4\xe4\xa0!\x8d\xb0\x17\x8a\xdf\xd5j)\xb1\x92$\xb4j\xb5_\xf2+\xb7\xc5Oy\x8f\xe9k\x84\xb0\xbc\xee\xc8\x19\x85\xb5r\xbf\xc0\xabU\xe5.\x9e\xdb^\xb2\xefy ~\xf6\xa6\xed\xe7\x9dR\xd0\xe9\x84ZG4\xdf\x88R%q\xd8\xe6\x95\xb2\xcdkB\x87 \x9f%\xf2\x16\xd8\x14\"\xebW\xab2\x80\xc8=X\x9b\xa1d\x16a\\\xe6\x85\xf2A\xcaWi\x0c\xe4\xed\xed\x85\xd9\x8b<\xd4 \xcb\xb9\x17\xf2\x1f.U$\x9fp\xbb#\x96.\x9e\x14\xa1\x94/~^Q\xfe*\xf9V\x1c\xe3{\xa1z\x82\x19\xd3%\x04E'\xb1\x9f\xf2\x1a\xf3W\x91\x81\xcdW4A!\xdf\xad\xd1\x0c\x13i\x0fu\xc1H\x9fuB\xe1\xd3\x1b\x81\xab\x86\xb7\x1a\xc3\x1f\x92p\x1e\x16\xef+WF\xa4\x10\x1be\xd9qy\xc8hl\xc7\x8c\x89\x95E\xb0\x88:O\xeeY\x8a\x99_w\xf3\xe8@\xeb\xfb\xfc\x12\xe2\xa0\xbcU\xd4?\xaa]\xa3\xabW]y\xbbQ\\\x9d\xdc\xf3\xc3&\x90\xd1\xa8T\xc5b5\x97?\xca\xb3kY\x94\xa5lN\xf0Z\x0e-9\x9f\xcb\xf9w\xb9\x8c\xd1\xae\xf8h\xc5\xb2\x8f\xa6\x9e\xd7\x1bnf\x19\xa9\x15y\xb9\xb9\xac,[M\xe9\xe5\xc8rni1-2+|\xbd\xfb\x1f\x8d\x9e\"\xb3\xf2\xc2\xfcz\x894\xfe\xcf&\x8d\x93\x90\xadW\xe7!A4N\xd8\xaa\xc0\xda\\y\x97\xd6\xeb\xc5\xf0Y\xe2\x90Y-\xba\xf9D\xe3\x95/\x05\xd0|\xf2 \xf9\xae&\xf5\x88\xbe\x97 !\xd2\xf8\x9cW\xb4\x0f\xea \x13\xc9l]\xceg{\xabV\xdb\x93]9(,\xcd\xc5WWu\xb3/\x87\x11\xd9}\x9f\x9dZ\xf0\x81\x17v#\x88\x18@\xeep\xe7\xb2(\xdb:=p\xb8\xa5\xb0\x86|&\xce\x02<\x8d\xd6V5\x8a\x10eC9?\x13\xd4\xb6j\xa4\xb0UK-\xe8gf\x13\x19\x0fTE \x91\x07Sf\xb6MbD\xf9\x84)\xd4v\xbd\x85\x18\x8e\x0ed{R\x0e\x17W1=rp\x18\x8bl\x03l\xc6\x96\x1bg\x02\x0d\x05\x81)\xde\xac\xf5\xdaL,(\x96w\x93$\x9e\x9b\xa1\xb0cLM\xcb\x92\x9a\x05]d\xa5\x05I\xa1q\xe9\x86\\\x13\xeb\xc2\x0d\xe9u\x93\xc7\xde\xc9\x9b3\xafK4?b\xdd\xfd:\xa7\xfc\xbdw\xbfy\x7f1S\x9a\xbf._\xaa\x84\x89\x96FEZ&\xfb\x9e;\xb5Z\xf2\xdc\x19\xc8\x93\xff\xe2\xb5G\x99\xd9%\xcf\x9dA\xd3e\xd9\x1aM\x974\xd8\xe6O\xdf\xbby\xf7\x9b~q\x84\xf8\x12s\x05d\xfb\x18\xee\x8b\x04es\x05\xb1\xc7\xf7L\xe4\xc6\x16\x8ca\xa2d+W\x84J\xd0\x90\xd2\x18A\xb4\xden\xc9Y\xa1\xc3\xd4t[\x7fA\x8dYP\x9c\xe9\xda\xcc\xfc\xa0\xf0k\xc1ITQ\x80\xacVx(n\x88\xe5i`\xc4\xbb\xf53\xf5\xb8v\xd9\x95\xbe\x1b\x95\x0f\x03(}-\xf0X\xf6\xc2U\x82\xca\xc1/\xfa\xe7\xdf\x9d5\x94\x8e\x04\x1e\xabB^\xea\xdfZ\xc7\x1a\xbezB/+\xbbO\xdd\x02\xd2\xd4\xa3Bd\xb2U\xbcG\xf9\xcfj\x05\xf8\x16V.\x93\xc5\xf1\x00\xffa\x9b\x0e\xde\xe9r\xfd\xe3EvH\x94\x9eCl\x12\xbc\xbd\xbd({\x91\x1b\xc1H\xe99\x97\x1e\x00G{~\xad\xc6\xca\xb1\x7f\xa5\xa3\x96Z\xcd\\\x16\x06H\xf6\xc5\x1a:#\xc8j\x90\xef\xc3\xe5H+7\\\x8e\xb2\xa5\x03\x87B*y\x19G\xbea{\"\x9f\xcbD\x86\xbeR\xd2\xe4\xca\xc6\xc2\x8e0K\x1eh\xf5\x94\xb5\x91n!gQY\x17\xa9'\xb9j\x965(\x0d\xdeR\xd6[v\xc7\xe3-\xddH\xb8\xf2\x91\x19\xd8\xa3'\x93\\If\xb5\xbe\x15\x1f\xd5\xf9s\xe8\xa9\xf0\x9f\xb1\xf7\x99\xca\xf52\x19\xe9!@c\xb5\xa9\x8cEYK[\x82\x87\x83P2\x92\xa6z\x8b\x943!\xb9\xf0\x0d%=\x94\xeb\x90<\xe0h\x1e\xb1tK\xdbZ\xd4RY\xba\x10\x9ct\xb5J\xddB\xd5\x8co\x94'#\xd9W\x99\xbe\xb3\xd0U*u\xb0\xb7W\xec\xab,\\\xaf\x9e\xab\xa8\xb5\xdfM5\x1f\xed\xa8\x90\xff?rd\xf3=7o?\xb0\xe0\x17\xea=\xac\xe1\x9fOJ\n\x0e\xf6\x9cq'\x91fzei!\xee\x0e\xc6\xf2\xe2\xa0\xe8\x06\x11\xa8\xc3\x8b\xd5\xd3\xe6\x88+\x98\x15\xc08SF\xf3\x9d\x97\xde\x15Y\xe2\xe7$\xd2\xaenK\xdf\xab\x96\x89\xd5\x014?#(Ud\x95Nj\nG\xe4w\x8d\xdb\xdb\xdb\x06c\xfb\xc62\x890\xf1\xe3\x80\x07\x99\xe6\xb6\xb6\x19f\x15\xe1\xb5\xf5\x8f\xa6F\x83\xe2t\xbd\xe9\xbe\xf1a\xad\x16\xf1\xb9#\xb8\xcd[l2\xfc\x94P\xb9\xcd\xd0\x0d6\x84\x12Q\xf8]\xd1\xe3\xbb\x16N\xac\xb7\xfbx\x13+c~\x817\xf6\xe8\x90\x8c\xb8 \x0c=)\x08 \xca\xc7T8\x90\xcegB\x98zq6\x06#\xaf0X\x95\xb3\x1e\xb4\xc5_\x0d\x81\xd1S~\xa1Bj&\x90@\xe1\xf4\xe91OM*\xe3j\xbb\xf3$\x83{.\"O\xf8\xb49%~\x9c$\xd8\xa7ls\xb1$\xb9\x16\x99w|\xe6<\x8cQ\x19 \xd76\xba\x0b\xbc\xb5\xd6\xcf0\xa9\x16\x01SL_\xeb\xccWe\x96Y\xc9\xd6\x03\xf3\x8b\x94\x9b\xe5/\xa3\xd5j\xfb7o\x82\xb9?\x89\xaa\x8f<`6\xa9\xf2ehP\x9b\xfbl\xde\xc8!\xef[R;\x0f\xf9$]\x01\xdb \xe6\xc3.gR\"6:{\xdc\xa3c\xe6\xbb\x97\x1b2\xc9\x17\xcd\x9a\x89h\xa6L*\xabtl\xcc\xe4\xd0\x16\xec,7o\x9d\x0fu9\x9aT\x00\xb3\xb7;\x1c>\xf3\x9a\xc5\x9aE\xa9\xabd|U\xbe\x05&\x85\x85B\"\x1fj\xb5l\xc9\xa0\x92 \x93,\xd9\x92\xb8*\x82l\\\x9d\x9e\x9f\x99$j\xfaO\xd5,*KV\xad\xf1\xb5\xfdV\xc2\xf6[\xd8\xc2\xf6\x0c\xa5\xefoIv\xefO\\\xcb\x19&#\x8f\x9ax\x98\x8c`\x02\xb1f\x1c\xbe6\xf3\x06a\x95\xc7G\x86\xe3\x9f\xf2\xee8Ll5\x08X\xa7\xb8\x9b@\x97`\xce4\xe9Y-\xf2j+\xb6\xd3\x19\x8a\xe2\xdb\x13>Cd\xc5\xadu\xa9\x11\x97\xbbL\x94bV\xba\xe5\xc62\x86>w\n]=\xbe\n\xf9\xaa)\x97^\x87\x8b\x8f\xf2h\xcd\xdd\xecs\xc8\xbe\xbf\x8b\x89\xea\xa9\x8a,J%X\xd9\x9f\xac\xf8\x17u:\xe7\xeem\x96^g\xfa;\xc5M\xfa\xc2D\xe8\x05\x1eJ\xd4\xd4z\xdbs\x98\x8c.\x978J\x9e\xc7z8<\xa9\x00\x8cY\xbf#\xef{j\x0b\x9f\x16f\xa8\x190\x10i\xe1g\x1d\xe9\xd5mhC*\xa67T\xab\xa1Z\xcdD\xc3G\x0b\x8e\xd4Y\xbfUX\xfc\xa6C\x99<\xf2\xca\xcc\x81\xd6\xf9&\x02R\x8d\x1b4\x0d\x95\"\x9a\xb9#\xc3\xe5\xb8S5V3\xc4\xb75\xa7$\xc8\xcfO.~8\x99!:\xda.;\xc4f\x94\xad\xdeO\x83;\xcf\x81\xc9\xe3\x11\x80k53\xf4(Dl\xedU8\xbf\xdb\x12\xb3V(\xe2\xc2!\x1eAa\x93\xc9\x0f\x1d\x8e\xf8\xedHi\x90~\x84\x86d4`\xffx\xbbkN\x86ddAj\xb9\xbc\x18\xe5*PO\xed\x9bx,C\x86cZ6\x96.\xae,\xe2\xec\x10s\x18k^\xa6\x12\x9cb\xfas\x98\xb2Y\xdc\x14\x1e\xe5\xdfr\xa3\x19H`(c\xcaW\x0cn\xb5/\xdff\xcb\xa2H\x8c3\xc2=v\x11Z\x94\xd9~\x0b\xba\x88\xe7p\xb3\x9d\xd1\xd3\xb7\x9dw\x00c\x86R!8v\x85\xe4178{8\x1b\x0fli\xa2\xdc \xec\n\xe8\x0e[\x8d\x02\x05\xfe\xc2~C\xf5\xa1\xdaql-8\xadl\xb8\xb0Q\xf9\x95\x96\x0e\xcd\xb3uli\xfb\xa1o*\x92j\x9b!M\x1f\x91\x1f\xc8\x167\x06\xda\x94\x97\xeb!xa\xf9\xca\xa5\xd9\xcfbQ \x93\xe0\x9e\x88\xb1 \x7f|j)\xa2\x0c.\x85v'\xb7\xb6\xccv\x87*\x92kh\x97\x02N\xafV\x1bIC:*\xd9g&\xba}\xa6Ro\xf8\xdc\xbdg\x8e\x18z\x121\x94#\xd6\x84\xa1\xa5\x11\x85\x9f\x19\xab\xe8\x8b\xa3\x81\x9c\xdf\xe4&\xaf\xf8qs\xa7\xb7\xa1:\xb1\xdcR\x05\xd5\xbd\xa6\xd7\x01\xb2sI&{1\xe5*\xff#\xa1[G\x8a\xac\xb9k\xc4l/\xaf\x08\xae\x0b\xb2\xb4\xc2\xcd\xb7X<\x14<\xfe\xa8\xa3\xf4\x9d\x85*\xb1\xe4\xb1;]\xb3\xfd\x03\xe4\x81+\xfe\x0f\xeb\nr\x85\xe8O\x9aB\x14\xc8\xb0\xfa<\xfc\x00w6S\xab \x1f\x828\xa5\xaf\xe2\xe0\xfeX\xf0\x10W\x89\xfeB\xe1\x7f(\xfc7\x85\xbfQ\x88 \xa4\x04\x12\x02\x13\x02c\x02\x11\x81)\x81\x11\x81>\x81K\x02\x17\x04N\x08\x0c\x08\x9c\x11o\xaf \xe7\xe4\xe9\xc5=\x9f|\x8er\xfdV\xd1\xbe4\xbb\xfa\xc0\xdf2\xbb\xdbO\x0b\xec\xab\xcd@\x85 \xaa\x07\xb2\x9c@;`\xce\x06l\x82Qp\xef\xed9\xfa\xe4\x9fY\xa7\xe6\xfd'\x13r\xdb\xd4\x82%C\xe1&\xc4\xa6\x16Q\x1c0yU6{\xb4\xc2f\xaf`\nH7L\x01\x95\x19\xb3G\xb3\xc7\x9d\xcaet8\x0d<\xaa\xbf) \xe9\x8c\xe1%\xad\xa9\xd5\xee\xea\x18E\xd1\x18\xf9\xd7^\xacR\xbe\xe0\xf1,\x8e\xafy\x1b\xd9[\xbe0\xf3\xd8z\xc8R\xa2\x80I;\xad)\xf6\xaa\x91\xa7V\x0b\xb7^\x1a\xe9:\xd6j\x05\x9e\x93\xd8\x90U\xbd\x00e\x98\x94\xd8\x92\x86\xf7\x1e[1\xca\xe7*\xeb\xa9\xe2\xcd\xdfs\xcaC:e\x87\xc5\xd2\xc8\xdb\x9bS\x93{y\x94\xef\xdc\x05@n\x0d\xce\xebU\xe2.\x0ct+(\x0d\xcdA\xcet\xfb\xa0^\xf8\xa4\xfb\xae%v\x18\x14l\xd9\\\xfd\x05>\x82\x9c\xbc\xcc\xf3\x8f`\x9b\xa9\xdb\x1eA:kO#\xc2\x8e\xeaV\xba\xa3\xbaus\xb9XX-z{N\xd9\x8d\xc6\x93%\x9a\xc5\x12\xdf*\xa4\x8b\xd71Y\xeaFY1\xb2\xe5\x8eP\xbc('\xd4\xa5\xc3n?\x8e\"\xb4(:\x8f\xd9i\xe1\xab \xe2\xc7\xd7\x9c\x05\x89\xa8\xcbo\xa1\xfe\xf8\x95\xea\xd7\x8d*\x84\xa8^\xa4 N\xad]\x17\xa4\x8f{2\xd2\xbc2n\xe0q\x93y_*\xc24,\xb9s\x1c\xc9\xf3\x97\xcaL\x99\x1fHq\x05h\x97\x8c\xb5\xda\xde\x8c\xd4j&\x9b\xa3\x1cX4\xa6,g6\xc2\xd4\xc8e\xaam|N\xb1Q\x02O\xb9\xa0\xfa\xc1*\xdc\xb6-\xf4E9E-\xd1\xb8\x96\xa1V\xa3v\xb6\xc5P\x8b\x18\x1e\xf3\x7f\x1e\x12SyJ+\xf4\x8e-\xa7oQ\xe64\xb8\xb3\x8e\n\xa1\x06K\x8et\xb3(T\xc4\x82\xc3\x076\xdb\xbb\xd9\x02\x00\xf2h\x07\xae\xd2W\x03\x98\xc6\xcb\xc4\xc7.\x10ac\x8a\xcb\x01\x97\xae\xd9\x82CTG\xb41\xfd\x8fpK~\x1f\xe71f\x81\x15[\x8a\xa2\x82~8\xd2\xce\xbf\x84S\x04\xe5T\x99_\xf7T\"\xb2b\xb3N\xad\x07\xea\x15\xd5_\xd4\x82\xc9P\x1c\x96\xd6\xc1\x1fL\xb2\x87d\xc4$\x93eA\x1eEkc\xb3\xa7)i7\xeb\xda\xdb\xac\x8c-0\xf3\x80Z\xeb\xa7\x86l\xf1\x1eSu\x0e\xf5\xf5\xf1 \x82\xad\x8c\xb3\x86\x98\xe4\x92\x93\x10\xce\xa5@\xae\x8c,\xf0\xdf6\x8b\xd7\x19\x93\xfd\xd2n\xd6-\x94\xd8\xb4\xa0\x1d\x04\xd4\xa4\x96K\xff\x11\xdeI\xd4\xbe\xea \xd6\xd9kV\x9d\xb7T\n\xc6l\xef\xc6\xe6\xd9\xed;\xfaB$\xaf\xd5\xca\xccbg\xb1w*\xe2qQo\xcf)\xc6\xfc2\x89\x87\xad\xd5*b\xc3h\xb5\xfa\x8d\x8f&\xe1\\`mm\x0f\xf0\xc3:\xedG\xad\xd3\x08\xef\xb6-\x80\x0f\xf9\xbeB\xeb\xc9\x7f\x84\xd0\xbe\\\x87=J\xe8\x1di\x9c\xd5\xf5\xf4Z\xe6\xa4\xc4\xaa[*\x1a\xd2\xd16>\xde\x15\xfb\x1d6h|\xff\xb0\xc3\xee\xacZ3\xf3\x17\n\xfe\x8d\x1d\xe1\xce\xda\x9cr\xc1|\xad\xf5\xcdE\x8b\xbb\xd0\xeab\x7f\xd0\x0d\xa2jk\x9eo*YXe|SI}\xc6\xf9\xa6\x82\x9a\xb8\xf9\xa6r\xda\xe8\xd1\xb4dS\xa2\xc2\x06\xff\x87\xaeV\xe6\x7f\xe8na\x83e$^\x1fE\xbe\xd9t\x9c\x7f\x19\x0d\x03@`\x1d\x89h\xc6A\x10\x92\xa9k8,-\x0br\\\n\xf6\xfb7j\xd8\x1a\xa2\x97\xce\xf0\x1c\xdbI8\x9d\xd1\x0f\x88\xe0\xc8\xe6\x8d\xac\x1f\xcf\x9e.\x90\x1f\x92\xa9-/a\xbf\x8d\x93\xf0kL(\x8a\xca\xe5n\xa4M\xab\x1f\xcf\x17\xc8\xa7\\\x9f\xce\xabP\"\xe7\x0fl\x829\x0e\xc2\xe5\x1c\xc0=\xc72\x7fa\x14\xfdeG\x8anF7\xd6\xe8\xa0\xc2Ag\xd4\xdb17_'\x0c\x1c\x97\x94\xb1\xfc\x19'|\xde\xb4\xea`qg\x80\xfaF\x86\x9c\x0c,\x07\xbf=\x00\xef\x15\xaf\xd8\x88\xd2$\xad8h\x90\x94\x10\x96\n\xc3\x93p\xe4a;\x0c\xb8a\xae\xf9\x1b\xa3\xc6o;RC\xc7EFjf\xc957B)mpo!*`\xf6<$\x0d\x15\x94[q\xd3\xcd\xcc\xa8\x1b\xcd\xc5\x9d\xa5\x82h\xf3\xc2\xc6\x8b'+\x08IHC\x14\xe9\xc5\x00\x04\xd9OF\xff\xff\xb5\xf0=16\xb6\xb0\xc1\xda\x82e\xe6\xfd7\xeb\xae\x7f\xef\xd8]\xfa\x90-3\xea\xc6\x17k+\x8cK\x12\xe0$\n \x0e\x06\xaap\x9c\xf2\xdb>\xae\xa1\xa2\xd6JJ3Z\x93\x98\x9a\x82^\xf1\xa4\xc1\x84\x9c\xe5\xa2 \xc5\x89\"\x9c^\x1c\x8d\xd38Z\xca\x98\xee\xec\xbfqLi6Y\x94G\x10f\xfd\x88w\xec\xc7\x1d\x05\xfa\xb7\x8b\xff\xdd\x91Q\xc2@N O\xa2\xcc'\x06n\x823f\xbck\xde\x10\xcb$<\xce\xc1\x8e8o\xe3\x9f\x0c\xcd\xed\x19v\xe7\xa0\x8d\xfe\xb5\xe0]6\xd4b\x06n\xbc#\xb8\x99,\x98D\xf8\xeeH\x1b\x1eY'\x14D]\xc5p\xfa\x1b5X\x9b\xfc\x950\xe0\x93\x1d\x817x\x9b\x0d\x119\x99KD?\x8e\x96sR\xe6\xabGsY\xac\xb3o\x89\xf7\xd0tA\xd3\xeew\x0f\x9a\x1d<\x07\xb0\xc5\xde\xd8K\x9b\xbd\xb5\xd9[\xeb\x00\xcf\xc1\x1a^\x93*\x13\xb6[l\"\x06;\xda\x11\xf6ILhc\x82\xe6at\x9fs7O\xbc\x95\xd3b!1\x0d\xbf\xe2<\x89M'\xd9\xf4Y\xea\x8f\x7f\xbe\xe2'\xf8\x92\xde/\xe2i\x82\x16\xb3\xfb\xcc\xfb\x9d\xcd\xaa~\xc3axB\xf6l+\xfc\x85\xc3\xb0f=3\xc4\xa3o\xae\x82\xe1\xf1VVa\xad\xe1{>8fM3e]\x94\xee\xd8E\x953D\xc5\x08x2\x9fe\xc1kb6\x1f\xa7\x04/\x9d\xda\x8b$\x9c\xa3\xe4\xde\x9e\xa3\x90\xac-x\x81M\xf0\xb6 ,\x0b\xbe\x168\xb4\xcc\x88\xe1\x10\xfd5\x1c\xc6\x11\xe23\xfe\xd3XT\xe5\x14x\xb4$T-\x06\xd5\x1f\xc43\x05X>\x03\xcb\xff\xff\x1dXm V\x9b\x81\xc5@j\x9bK\x06\xd2rG\x90\x9e\xea\xe5\xc7zwG\xb1\xad\xcf\xe4\x0c\xd6\x8f\xd9'\x111 0Q\xf4I\xf4s\xd7\\0\xe8\x17;B\xff\xf8B\xad\xdd\x87F\xd7\x81F\xb7\xc7\xd6jm\xb1V\x9b\xa3d\x1a\x12\xd7h\xe2\xb9\xe1\x88\x7fuJW\x14\xecZ\x9b\xc2\x84\xc4\xc9\\\xae\xdd\x19z\x0d\x9a \x92N\xe2d\xee\x1a\xcb\xc5\x02'>JqY\xda8\xf6a\xeb\x10\xcf7%N\xcb\xd9\xb6h\xfb\xff[\xfc,\xc1\n\x9f\xb3]B\xc6\n\xf0\x82x\xc4lv{\x16\xbc\xca\xc3\xb3IGu\xfc\x00\xe1\x8eZ\xca\xfc\x17\xbe$\xde\x15\xb1?$\xf1M\x18\xe0\x04\x1e\xf3\xd7\xe3\x98\xa4\xcb9N\xe0iq\xceR\xcf\x065\x95\n@\xde\x99\xc1\xb5\x1aV.zga\n\xb3\x100\xd2'\xbd\x16\xcd\x8f\"\x8a\xbd\x87(\xe6\"\xd7\xdds\xa0\xb4H\x0e>-\xb0\xef\xb2\xfa\xd6\x90\x16\xc3tp&\xe6G\x9bAj\xf1\xc3TH\xb9c=q\xc1\x94GBx\x93\xc4s\xae\xd4\xaev\x8d\x93\x9d\xb4\xf2\xf3\xe2E\x82o>\xa9\x8b\x0e\xe2S!}\xf0(|PesEQ\xa8U\xe7f\x0d\xad\x15.\xdaI$\x1b\x88\x9fh\x9c\xe0\x8d\xb3\x93pbbK\xb3\xf8&\xf8\xd6\xb8\x89\xe4\xd7\xdc\xe2[\xdco\x10'\x13\x0cY;&g1\n\xb8\xff\x8f\xcdD\x13[\x10\xaf\x8b d\xce\x00O\xc2\xe0<^\x12\xbaq\xb0\xcaP7\xad\xed\xa5>/\x82\xd2\xc9\xaf\xbc\xb2\xc4K\xf3\xfe\xb5u\x9a\x0d\xb4Z\xa5\x91\xaf\xc8$i\\ z5>%\xa8X\x05:\x1c\x9bL\x83nQHqb \xae\x14L\xaf~\xcc\xb2\xce\\\xd9\x97\x1dm\xd6#\xad\xa5cUS\xc1pS^\xe0\x88\xedH\xdcngc\xdbp\\y\xa8\xcaQ\x80\xd4\xcb\xcf\xfa\x95CP(KxM~\x19\xc3h\xaa\xbb\x16\xb1M\x93{\xe9\xd4n\xd8\x84m\x08;#\x0b\x0e;\xf0Ol\x92\xd5\x8aZ#Q\xa0\xa5\n$^l\xa7\x98P331\xa0\"<\xc8C\x81y\x13\x98\xb1usm\xc1a\x1bvdM\xed\xec\x86H\xa9\xa6]z%\xdch\x15'I\x9c\xb8a\xb1\x8d\x8elc\xd8\x1a\xc9\x0b\x0b\xc5\xde\x14\xaeh\xf5\xfe\xcc\x8c\xbf9\xbb\xf0J-m\x04h\xc9G\xda)v5\xc1\xd5\xa5\xd9DcS\x18{\x89\xe2B\x18zI\x81m\x0b\x07n\x02c\xe5\x99\xd7\xcc\xc4C\x0cS6\x9c\xc5\x19[6\xba\xcdP\x0c\xdb\xad\x17q/\xc8HG\x1d\x82\xac\xa8RH\xd3\xb5\x19\xda\x99\xb7f\x0b~\xd8\xb6{\x98\xb0\xe9~\xb2\xe3t\x0f P\n!\x7f\x99\xa4l>\x93\x874r\xe3,&\xbfF\x84'\xd45\x1ar\xde\xa9\xd0\\\x95&\xa8\xa6L\x94[8\xad\\\xb6\xcd\x0b /\xa1\xeb\x8e\xe2%ei\xaa\xce\xb5\x84\xd0\x1ds\xdf\xfe\x19\xa0\x1b\xfa%\xb5Q\xecf\xaddp\xe4I\xda~Y\xcc\xae22\xc1\xe6\xe7p\x8e\xa6\xd85\x96Id\xfe\x10 \x8a\\\x9e\xb0\x9f\xdeL\xebw\xf3\xe8h\x8cR\xdc\xeb\xc0\x0fo\xdf\xb5~\xbb\x7f\xd5\x19\x7f\xb9[\xfa_\x9d\x10\xbd\xfd\xe8\xf8'\xf1\xcdY;h\x07\xf7\xdd\xf6\xf9}\xf7\xc6\x9f\xfb7\xe7W/o\xcf\x8f\x0f\xbf\x06s?<}\xfb[\xe4\x93w\x8bq\xabsxz\xf5zy\xfe\xe9t\x8aO\x9c\xf0\xfc\xf8t\x8a/\xc4o\xd0\x8a\xae\x83\x1f\xa7\x87\xa7W\x9f\xef\xce\xc3\xd3)\xfa\xf1\xe7\xc5o\xad\x99\xf3\xe1\xd3i\xf3\xfc\xe2\x94\xd5\xb1\xf8\xed\x97\xe0x\xdcfy^N\xcf\x8f_\xb2\xf4\xe9\xbb\x8b\xd7\xf7\xa7\xe1\xabh<\x7f\x13\x8e\x7f\xfcL\x7f\x9d\xbf\xb9B\xad\xe0~\xdc\xfey\xf9\xdb\x89\x13\x8e\xe7?\xb7OO6\xf2w\xc6_n{~\xfb\xd5\xec\xd7\xd6\xe7\xc3S\xf2\xea\xfe\xb7_\xdeE>\xf9-:\xbd\xea\xf4\xfd\x1f\xdf8\xe8\xf8\xd5\x1c}\xb9K?|:\xbd:?y}{~\xf1\xf2\xee4|u\xfd\xe1\xd3\xbf\xdf\xbd;\xf9\xdc=\xbb\xf2\xa7\xe7W\xe7_\xcf\xae>\xa6g\x17\xd7\xb7gW\x9f\xa7\xef/^.\xdf}9\xa7\xef.^N\xdf]\xbc\xa4\xe7\x17\xe7w\xa7'\x9fo\xcf.^w\xce?\xbd\xbc==v\xdagW\xd7\xf4\xdd}\xa7sv\xf1\xda9\xbbx\xdd:\xbb\xf2\xe9\xf9\xc5\xf5\xf2\xdd\xb1s\xff\xeeS\xa73>\xf9\xe9\xfe\xec\xea5}wr\xba<\xffr~\x7f\xc6`>\xee4\xcf.\xce\x97\xe7\xe1\xcb\xd6\xd9\xd5\x94\xb2\xf7\xd3\x93\xd3\xe5\xfbO/\xbbgW\xd7\xd3\xf7\xc7/\xef\xde\x7f\xea|==y\xdd<\xbb\x9aN\xcf\xaf|\x96\xf7\xfe\xdd'\xfe\xb7\xf5\xeeS\xa7uzr\xea\xf0\xbc\x0c\xc6O/o\xc7'\x1cf*a\xbe\x7f\xf7\xc9\x91\xf9\x1d\x99\xff%\x95y\xe9\xf9\xd5O\xcb\xf7\xfc;\xff\xd6<\xbb8m*\x9c\xcf\x7f\xbc\xa5\xe7_OY{_\xcf\xc3\xce\xfd\xaf\xf7\xce\xfd\xbb\xb0swv\xf1\xfa\xf6\xec\xea\x94\xbe\xbb\xf8iy\x1e:w\xe7a\xa7{v1\xbd;\xbb\xfa\x95\xbe?\xeet\xc7'\xbfv\xd8\xf3\xbb\xab\xe9\xf2\xdd\xfc\xbcy~\xec4\xcf\x8f_\xde\x9d\x7f}\xcd\xe9w~1\xbd;=yu\xf2\xee\x82\xe1\xf8\xeb\xf4\xfc\xe2\xe5\xfd\xd9\xd5\xf94\x7f\x9f~=\xbb\xfaiZ\xea\x8b\xde\xc5\xc5\xe9\xfd\xf91\xa3\xc5y\x87\xc13>v8\\\xa7'\xe7\xf7gW\xff\xbeb\xb0KZ\xd0wW\x9f\x97\xef\x18\x9d\x8e\x19l\x12\x9fc\x86\xef\xe7\xec\xaf\xccs+\xbe\xff\x9c\n\x9a8\xdd\xf3\xe3N\xf3\xd7\xaf\xa7MQ\xdf\xaf\xcd3\x91?\xa3\xef\xe9\x89\xbf|\x7f\xfc\xb2\xcd\xfb\xe3\x82\xf7\xd5\xdd\xbb{\x06\x87\xd6G\x9f\x18N?\xd1\xf3O\x1d\xe7\xf4\xe4\xa7\xe5\xfbc\xe7\x9e\xc1\xf0.d\xfc\xf1\xd3\xf2\xdd\x97[\xe7\x9c\xd3\xf2'F\xd7&\xcb\xfb\xfeS\xe7\xfe\xec\xe25\xa7\xe3\xf9\xc5\xb4\xc0;\xa7\x9c\x86\xfc\xaf\xa2#\x95t\xdc\xca\xa3\x82\xd6\x8cO\x15\xcd?\xdf\x8a\xbf\xaf\xbf\x9e\x7fz\xc9\xfb\xe4\xfd\xc9k\xd6\xcf\xad\xf7\xc7\x9d\xd6\xd9\x05\xeb\xb7\xdfN\xce\xaf|\x87\xf7\xc3\xd7\xeb\xe6\xd9\xd5\xeb\xe9\xf9\xd5O-\xd6\x1f\xe7_\xafy?\x9d_\x9d\xde\xf2\xdf\xafSF\xf7\xdei\xd8\xaf\x7f\x10\xf2\xa0~<\xf5\xbc\x1f\x94\xc6;^ ?\xa4\xf7l\xd9\xdf\x95I7a\x1a\x8e\xc3\x88\xa7\xce\xc2 \xc0d\x07)z#U\x95\x0d\x14\x85S\xe2\x1a\xf30\x08\"\xac$*\xfb\x995\xddY|\x83\x13\xe3\x05\x17\xafR\xbeBc\xd6\xaaNg/\xfc\x83[\x12\xc5:|\xfc9oG\xdfx\xffw\x8a\xf9\xef\x14\xf3\xdf)\xe6\xbfS\xcc\x7f\xa7\x98\xffN1\xff\xe8\x14cY\x10\xab?\xd6\x1a~\xac\xda\x13\xed\xed\x99\xd8\x9ec\x8a\xfe\x83\xb9\xb1>\x8a\xa8|\xf2i\x12\xc9\xc7t\x16NX\xb2\xb5\x86\xef\xfey\x15\x17A7\xe1\xb4x\xfb\x12\xf2 \x87\xd2\xf0\xf0C\x82o0\xa18X\xad\xf8e\x04{\xbc\xa44&\xab\xd5G\xc2\xcd\x10M\xc2\x15Q\x98\xd0\x13Q\xc0\xb4`\xee\xfb\x92\xca\xcd(\x8d\xf9\x06z\x07M\xd9c[\xecMcA\xa5*|\x1da\x86\x9eyLDh\x8c*\x93\xc0r^\x80\x00|\xf0#\x94r\xff\xa7.V\xfbf\x95\x02g \x9e\xb8\xd4\x9ec\xb2\xcc\x82\x99j!Is\xd4`L\x8e\xa3\xd0\xbfvqFN\x11\xbb\x0e\xc3bqe\xeb\xafm\xcf\xa5j\xa1\xb4\x83>\xe3\x07\xb3\xef\x88e\x06l\xcb\x1c\xec\xbee\xde\x81*\xa3\x91\x98 \x12;] b\xbea\xcc\xf9fG\xe6\xdc\xbe\xc6\xc8\xf6~\xad\xc5\x9d\xd1\x97;,u\x12'\xf6n\xdb-\xacJ\xaf\x15\xf6 \x8f\xb0Oq\x93i\xf7D[\xe2\xd80AA\xb8L]\xa3#\x01z\xca\x1c\xa2\xd9\x92\x19\xeb\x06#\xce\x90\xc9\xbeQf\xba\xa8\xef{U\x8d\xeb*\x8b\x98\xffRG\xa7\xce\x13\xe7\xe4\x19\xb3\xf2\xea\x94\xfd\xc37\x94`\x9b\xf6\x04\xa5<\xaa\xec\xeeV'~\x1c`nq\xf2)\xfc\x8aw/\x96\xdb\xa8\xbc\x8a\xa3\x80\x8d\xa50\xf1n\xb1\xf9\x95\x0d\xa3\xaf;\x0e#~\xa0,O\x13\xb8\x9c\xe3\xbdDgI\xbc\x9c\xce\xf4>\xffn\x1c\xf8~\xd0\xd6\xd7/\x7f\xa9\xaceY\x10\xf11\xef#~\x8cb~f\xf0~\xfe\x16x%o\xf1\x95J\x993\x1c[\x1d{o;C\xaf\xb6\x89\xfb\xe7+\xde\x89\xd9\xb8A\x86\x9db?&\x01J\xeeY/\xa6\x9c:40_1\xc2\xbc\xda\x910r \xa6\xcfm\x13\xd4\xd8\x19\xc7w\x0c\x0f>\xf23C\x0612*m\x815A\xd1t\x16w\xda?\xca\x82\x8e&\xee$Lr#a\xe3\x85Q\x83\xe2\x03\x0f\xa0\xc9\xde\xd5\x88\xd4\x80k\xc8\xd9X)\xe64a\x93\x03B\xe3\x85\xc12o\xe6I\xf0\x02#Nv\xf9\xb8\x99EJ\x08\x0e\xaf4\xff[o\x079\x03qC\xc3\xc6\xb8\x19%\x8d)\x93Mlm&\xf2\x19\x06\x8d\xa5\x913\xccR\xd8\xfc/\xae\x0d\x1b\xce\xbf*\x93[\xad\xc5]\xf6\x01@\xb0\x99\xc0\x80\x15\xefV\x11\xe6Mj\xfe\x0dPYK\x1a\x88\x1b\x90l\x85Y\xff\xf0\x04\xa8u\x83&\xdbz_\x8e\x11\xad\xb6\x8a\x1ad/ k\xfdJ\xc4\x19\x03\x10et\xbe[\xfde;\x9e\xff\x8e\x94\xff\x8e\x94\xff\x8e\x94\xea\x91\xf2\x94\x81\xbb\xf0<\xc7h\x99\xeed\xdd\xff\xbf?\xbf\x05#\xae\xd1H\x13\xcb\xfc\x9e\xcd\xbb\xdf\xef8\xef\x16N\x9a6\xef19\xd9\xa2\xc7\xcf\xea\xff\xc2\xea\xff\xb2c\xfd\xe5\x055\x8d\x17\xbc\x9f\xaa\x8c\xfa\x0c\xe3v\x16R\xdc\xe0\xae]Y\xc7\xdf&hQ^\xc74\xdb\xfa\x1a\xbbh\xa5\xcd\x92k\x9a\xc7\x19\xc5N\xdan\xf52S\\]nj\xb4\xfeo\x00\xbb\xbb1y\xb62\xcf\x0c\xc9\xc3\xa4\xaa\xact\xc5\xce\x83\xdc]\x87$\x18\x00\x81\x83\xf0[\x1bR\x14\x85\xbe\xb8\x90\xc4--?hQ.\x8eq\x14\x01\xcb\x82K\xb5\xea\xfb\x93q\xc7\x9f;r\xc7V\x9b\xd4\xef\x0e'\xe3\xce\xb8j~\x12\xd3II'\xb2u\xd2\x93\xb2F\xddV\xde\x10U\xaa\xe5L\xc8T\xcc\xb4\xff\xdb\xa0\xdbM\xbaI\x05\xfb \xa6(\x8c\xd2/\xe2\xc2\x94\x05\x17\xb9\xbe\xe2-\xeb\xa9\xb7;\xf6T\xd5\xd6\xb9|EBn\\\x13\xb9E\xce-uk\xe5\xa3\x8d\xcdS\xe6\xbfx\xe6\xa2]\x95\xd9<\x9e\xae8\x9dv\xcb\xc3\xab\xe6\x16/\x07\xfe\x0f@\xf6(\x189\xb8\x07\x15z\x90\xffR\xfd/C\xf6W\xa8\xbe\xdb\xc8\xday\x9e~T\x12\xff\x93\x0dU.\x08&\x89\xba\xce\xf63\x1b\xe8?\xef8\xd0K\xf7\x05+\xaf6\xef2\x0dI\x98\x08\xe6a\xc9?\x89\xdb\x82\x0c\xae@\xcc\x14h\x1ca\xf3W\x06\xd9\xff\x87\xbdw_o\xe3F\x12G\xff\xdf\xa7\xa0\x90\x0c\xdd0\xc16\xe9[\x92\xa6\xdb:\xbee\xe2\x89\x1d{,eb\x0d\xc3\xf5\xd7\"A\x11q\xb3\xc1A\x83\x96\x14\x91\xefr\x9e\xe5<\xd9\xf9P\xb84\xd0\xdd\x94\xe8\x99\xcc\xfef\xbf\x9f7;\x16\x1b\xd7B\xa1PU\x00\xaa\n'{Bf\x98\xa2\x0da\x95tJ\xba\xcaDf\x9cwk'q\x81\xe0\xf5\xcf\xf8\xbc\xb2\xc6\x851 \xb9\xb6\xd9K\xa8\x94\xc7J\xbf\xbd\xba\x91\xe8,Q\xffj\xe5\xb7\xd1\xa5\xab\x84\xe6\x8f=\x8a4\x7f\x84'\x84>9\x87L\xa0\xb9\xe5j\xae\xc0\x7f\x0d\xa4\xcf)\xbb{\x1c>|_\xcd\xe1\xff\x1a,\xf0\xcb\xac\xff_5\xeb\xfb+\xb7\xde\x89\xf3\\\xec\xfc\xff\x7f\x82E\xed[\x87\xce\x9e\xba\x91\\\x0f\x84\xfd\x7fL\x16\x8e)\xffY\xb1\xbe?\xef\xc9\xfa\xdc\x05Gg\xa0h\xdcL\xf5.\x19\xe9\xd6\xce\xe7VS\xfb\xbce\xa5 \xfeU\x81\xf8\xd7=Al=jn\xd5M\xf6Qk|\x0e\xf0ohy\xbf\xb3\xed\x9a#\xe9\x9et\xd9\xea\xc1\x8b\xc9\x19\xe0U\x9b\xb7D\xef\x15f\xdf\xef\x89\xd9\xdd\xaa\xd0\x0e$\x98d\xbb{x\xd0d\x8a\x83\xf8[\x83\xc76\xc3T\xcd(\xdb\x0e\x17\x83\xdb7\xd7_\xedf\xec\x81i\xda\x19\x9c\xba\xedK7\x99\xf3\xe9\xba\xacv9\x17\xfdr\x91\xcd\xf8\xb9&\xd1\x01\xf4\xd8\xdc\xff\xeeu1\xf8\x7f\x11.\xfep\xea\xfd\x9c\x1a:b\x98\x0d\xc4\xe2V\x1c\x1c\x86\x8clb\xcb\x15l\xef\x9a\xcez\xc8\xd5\xac\xa1\xa5\x8e\x1a\xef0pW?\xbfD\xf1\xf0\x01\xb9\xa67\xecu\xb7\xb5?P\x82\xaaf?\x13\xe668B|@(\x97K\xc7\xfb\x7fT\xcb\xff\xc7=\x97\xff\xee;\xbc\xfaNp\xf7\xae\xaa3\xbee\xe9\xe8z\xb6\xfa\xaf\xb4\xbb\xbf\xe8n\xec\x860\xf9\xe4\x90\xf3\x17\x85\x9c\xbf\xfc\x0f\"g\xf2\xef\xc1\xcd\xe4\x8fB\xcdi\x8b\xb5Xt*\x0c\x82b\x1d)~\xb3\xf1\xdb\xb7\xcf\xbeHR\xa4C\"Rg\xb1\xe6\x9e\n~$\xe0\xb9`[\x90wX\xd1\x91U\xb9q1\xc1\xa6\xfd\xcat-|)\x08B\x1cF\x92p\xdc\xedFt\xcc'\xf0^\x87\x0b\xceI\xb7\xb8\xddfn;\x8a\xa4H\xff\xaef\xf9\xefEz\xb5\xc58~\"\x04?O\x11\xfcAD\x8a\xf8\xb9\xe0\xab\x19?/\x8ehN\xa7\x92\x8b\x14\xd5S\x82b\xbf\x88l\xb5\xa2^)\x93\x00\x85l\x8d#\x9a\x89\xe9\"E\xe1\xb7W\x84\xce\xf4\xebZ(\xf8\x84\x02o\xf3lJ\x17<\x9f\xa9N\xbc\x0f\xc8\xfc\xb3\xe0\xeb\xd53\xed\xef\xa0\xf2\xc3\xef\xaa\xc8s\x06\x8e\xe5\xa6\x80\xf9\xaa\xb2\x7f\xd0z\x83\xc96_\x90\xfd\x06\x0c\x0d\xbc\x1ej ^\xa1\x97\x92.m\xbe\xfa\x8d\x88O\x16tL\xe3\xe7o~\xf9\xe9\xc3\x93w\xef\xde\xfc\x92\xde\x1fLRT}#\xa2\xf2_\xfct\xfc\xe2]:\xbc7I\x11\xfc4\xa9G\xcf\x9e\xbc}\x91\xde\xfdF%\xc3o\x9d\xfe\xf6\xc9\x9f_|PM\xa4\xf7\xeeOR\xe4>\xbd\xdc\x9f\xdf\xa6\xf7\xee\xd9\xbc\x9f\xdf\xea\x9c\xe3'O\xd3\xef&):~\xf2T'\xfc\xfc\xd6\x00u\xef\xdbI\x8a\xec\x97\xce;z\xfb\xe4\xd9\x8b\xf4\xde\xddI\x8a\xe0'\xdaFTl6\x11\x15@>\xe0\xf0z!\xd21\x15\x06NB\x85kP\xfd\xae\xc6\xa8\xbe\x0c \xee\xa7\xca\x9d\x90s\x91\xa2\xaf\xbe\x1d\xa8\xff\x10\xf9\xa8>\xbey\xa6\xfeC\xe4\x8d\xfaxH\x1f\xce\x1e\xce\x10y\xa1>\x9e\xbdP\xff!\xf2A}\xd0\x81\xfa\x0f\x91#\xf51\x7f\xa0\xfeC\xe4\x18rf\x14\"d\xfe\xa6>\x06\x83o\x07\xa7STY\xc8>\x11\x1e'p\xe1\xd8i\xac\xe4\xc8J\xcf` \xb6\xb1\xcfD\xbb\x1f\xff\x13\x11I|Hm\x9c^\x19\xd4\xc4I\x95\x81\xb7\xe4\xe5\x8e6NEt*\xa2\xab-\xa1\x98\\\xf9\xf5\x93\x10\x90k\xa2\xcdv\xa8~\xbd.\x96\xfc\x15?\xa7\xe2YV\xd2\x08\xc7\xac\x98\xe6\xeb\x19-U\xf7\x18o\xf1\xb6\x1a\xf9[\x11U,\x8a\xc2\x1b\x08\xe9`$\x1f5\xb8\x94\xec\xf50\x1d\xcb\x89\xc7\x97\xa4\xf7\"\x90\x81\xe9)\xe79\xcd\x8az\xb4\xd6\xeavC\x07\xf3\xaf\xde\xa1\xa2\x874\xa1\xe6\x9dh\xf7\xba\xe151\x93\x15\x08\xde\x1b\xe2\x08\xeb\xd8l\xd57L\xd3;\x91~\xa2\xf6\xd8\x1d$Y\x00\x8b\x0d\x13 \xe7\x0d\xe0\x86\xad\xb5D\x02/\xcf\xb02;\xcd\xe9\x8cpp\xcf\xa6\x05a*\xd5p\xb3\xef\x95FDgf\xe0W\xb5\xd0U\x898|!\x92#A\x8c\xaa\x8a\xeeV\xaaj/\xe2\x9b\x0d;\xfcM$\x1f\x056\x05\xde\xe9\xb3\x12\xf4\x0d\"F\xe1\x15\x87\xa8\xe0\xb2\x9f\xe59?\xa73\x94 \xa3\x00#b\xd5m4\xcf\xe9\x05\"\xea\xdf\xe7.\x08\x14\xd2A\xa0\x10\xb1;\xf1\x04\x0d\x15\xc71\xdaoA\xdc5?\xb2\xf6\x06\x88\xe8\xe3\x16IPW;=\xa0\xe4\xeaZ\xb8\xdf\x08\xbcU\x85-\x86T\xf9\xda\xf8\x8f\x85\x1d\x08Z\x17%\x95h\xbbUb\xf3\xa7\xfd\xe6\xa3\x041\xa0\xda\xb6\xf8\x85\xa3\x1e\xc5<\xcb\x04M\xa9F\xc4)\xbf8\xd278\xa8\xba\xc1q\x08\xd4s\xd6\xed\xcaC$\xe9\x85D b\xc5\x82\n&\x1b\x184\xb8A\xf7\xee\xae.\x10\xb1[\x084\xe8\x0c\x87\x90\xb0\x13ch8\x18\xfc \x11V\xac\xd6\xb2\x89\x82\xaa?\x8bL\xa5(\xfb3\xe3\n8\x08\x06\xaaC\xbb/1\xe5\xfd\xbe4\x16_\x05X\x84c\x81\xa8\xa1\x8d\\\x99\xed\xd5\x80hS\xfc\xfa`l\x94Eg\x9d\x7f\xf7\x81* \xf9*\x19@/\xafE\xda\xdeF\xee\xa2P9\x88?Q1\xcf\xf9y\x82\x8c1\xfa\x1e\xfd\xd0\x0b\xf9\xc6U\xa3y\xceV%+M\xff\x044\xf5#\xb8\xc5E\xfa\x16\x17m\xc9\xf3\xeb\x86M}\xf6y\xa5Z\x7f\x02\xa7\x834\xd6\xe4rL/\xe4\xa1%\x9d\x04\xa9\xf1 \xa2\xf7\x05\xd4>\xefz\xa0i\xe6\x10A8&\x94\x9c\x8b-y\x0d\x8f\x98\x91\xefo\xe8\xdb\x05\x9cu\x9d\x8d\xfc<\xec=\xec|\x07\x88{\xd0\x19~\xdb\xf9NC\xf6\xd7?\x00\xb2\xd2\x9cZ\xde\x08\xd3\x94\x89)\xbc\x0f<\xbdP\x9b)D\xa6\x97\xfa\xafH\xd0\xb7\xd7N\x9d\x19\xc9\xc50Aw\x87\x88\\\x9a\xbf\x17w\x134|\x18?|\x80\xc8\xa5\xfb\xa9\xc6U\x1d\xec\xbc\x17m\x92X\xb3\xfbZ\xe49\xc7\xb0AW\xd4\xe7\x1e5\xc1\x90\xb9\n/=\x190b\xf3\x88\xc6\xa09\xe2\x9bx\xc0\x8c}\nx.\xbaQ\x17\xdd\x8d\xd0\x13a\xc2\xd1\xa1\x9fxg\x96\xc9\x0c\xb9wb\x0f[\x8f\xd62\xf8\xda\xdamC\x9e\x0e\xc84-\x9a\x87Tl\x1e\xc1Q\xa0}g-\xd2K\xbb-%\x9e\xf0M|6\\\x9b\x9a\x84\x9b\x92 %\xbe|NJ\x02\xd29\xc9\xfb\xc3J\x08\x14N\x08d[\xff\xf9\xae\xa99\xe6;\xdc\x05\xddS\x07\x1d `\xf7\xdc|\xad\xe7f7I\xabM\xa5\x0e'H\xb2X\xf2\x9fW+{NIPg\xd3\xf9\xff\xfe_t\xcdz\xf0*\x17\x06d\x8c\xc9tg\x85_\x0c\xa5`\x1d\xf5T\xcd\xd0\xda\xce\x10Y\x05\xe2m\x1e\xce\xd5M\xd3\xb4\x0e&h\xf5\xd9\xd3\x12)b\xc0\xfe\xdc\xac\x81d\xec\xfc\xcc\x83\xf9\xd9W\xfb\x99\xea\xf3\xcf\x1fEzed\xa8U\xde\x07M\x95wK\xfe\"v>\xc0]\xa3n\"n\xe4\x92f\x89\x0b\x9e\xd3\x04Y\x85\x85\xcd\x92\xa2\x87>\xa8M\xf2\x07\xd4\x13D\xa1.H\xa8\xab@\x02\xb0\x10hLf\xbe\xf6BH\x00\x84\xea\x04\xf6\xf4\x1e\x14\xc8\x84i\xf8Ql\x89\xc0[\xf2\xf7\xfai\xbc]\xc5>\x7f\xac\x0e&\x0dw|\xb6\xc8\x8a3\n\x0c\xc1\x9d\x17+5X\x81\xfd\x1c\x9e\xaf=\xa5\xb3\xa7\x97\xa0\x0dW\xea\xde\xd4\xff\xca\xa1@H\x8dfG\xf5fE\x0b2\x0f\x94g\x88`\x8a\xa3\x01&\xb3t>\x1eL\xc8\"\x9d\x8f\x87\x13\xb2l+\xb5\xc2\xe4,]\xaaR\x97\xe9R\x95\xfa\x14\x94zG\xe78\xd2\x0c\xf4tW\xc6\xc5\xae\x8c\xf3\xb6\x0e\x0f\x86\x98|L\xcfU\x8fo\xd2s\xd5\xe3\x8b\x1d\x84\xd5R\x19!Lx*T\xe5,\x15\xaar\x19\x14{]\xdb\xbf8B,\xba]\x1eK\xc1\x96\x11\xae\xb1}{\xa1Q\xa4\xe3 \x11\xa9\x0c\xefC\x08O\x07\x84\xa5t\xc4\x1f1{\xbd\xc1{=\x0db\x96\xb21\x9f\x8c\xb4$\xc8\x8c$(\xd3\x97\"\xca\x88\xc0\xa32\xbc\x8a1\x0f\xf4\xa7\x83n\xb7\xd0\x81qK\xbc\xa5yI;\xd9\xf571\x02\xbb\x1a\x99{(\xb3\xd8\xc2\x1d.<.>\x96\x84O0\xc9o\xdcB\x85o\\\xea\x07-\x0f\x06\x98d\x91\xc4\xa4\xe8vi\xa47R\x94d\xeeF\xf8J\x13\xf41\x15\xcb\x84\x93\x92\xca\xa3\xea;'\xfa\xfa\xc5*\x0beRn\xb7\xd1\x82\x14D`\xf2!}\x11Wu\xc9\x11|z\xb5\xc9q\xfa\"\xae\xd5'\xbf\xed7\x9d\xc7\xb1\xa0\xb3\xf5\x94F\xcf\x04\x19O\x00\xe6\xe3 &O\xf6\xab\xfd\xdb\xae+\xa7\x8ec\x1fX\xefW\xdf\xcc\xa35\xb4\xfe\x1bYO0yv#\x86\xa9\x87_\xda\xedF\x14^ ?\x8a\x10\"\xea\xc7%\x90?\xedvOc\xb3\x0d\xf1~j\xd5*\x82\xfe\\\"9\"\x97\x13L^\xde\xd83\xbeZDO\x1e\x0f\x0e\x9f$\x03\xe8G\xcf\xe4%Y\x90'\x13L\xde\xdeX_3\xb4\xf0\xfdS\x03l\xc4#Z\x0d\x02\x13\xd9\xed>\xb3\x1dp\xf2\x8c\x1cM\xf0\xe8\xa0\x8d3\xba\xb4\x02_\xc9j\xc4\x07\xeewl\xe2\x0d\x96Q\x11\xcbL\x9cQ\x89\x15\x15\xe2\xed\xc8\x07\xf7\xc5|\x0e\xb6#-S9\xe3S\xb8a\x8c\xb3\xd9\xec\xc5'Z\xc8W\xac\x94\xb4\xa0\"BK\xbe.\xe9z\x85H\x01\xa8\xbf\xa6\xa4\xe4\xeb\xe9\x82\xaa\x0d\x9d.\xeau\xe3j \xba\xe4\x9f\xe8\xce.\xbc\xf6[Kz]\xe0\xad\xc2\xdb\x04o\xa3g\xe4\x93\xd7\x19\xe0\xed\xa6a\xb3y\xe4!\x92>N\x07\x16\xd7\x15N\xcf\xa842\xae|z\xf9\xcc*-\xcd\x13\x02L\x84\xe2\x01V9:,\xc6t\x02\xba\x8f\xe2h\xa2\xdb\x15\xaa\xa5\xa7j\xa7\xcb\x8a\xb3g9\xa3\x85|\xa7\x00\x82\x0ey\xba#;\xc2\xf6\x86\x94\x850]W4\xf3\x8a\xeas\xd8c\xbe\"e*b>\x9f\x97T\x1e\xf3\xd5\xa34\x1by\x9f\x8f\xd3LA\xe8\xbe{\xfcQ\x9a\xf5\xd8f\x13\x95\x87\xcd\xb6\xa2+\xc9W\x89W|\x8b\x93=J\xf5Y\x8f\xf7\xbeU\x9b%\x983\xaa&mF.\xf4\x0e\xe2\xdd^\xcc\xe6*\x8c\xc0\x94\x19u\xc5\xbd\xc3\x99\x9c\xd9\x18MY\xb9\xe2\xab\xf5\ny\xba\x88\xce\xd1\xa6{3ZNi1\xcb\n\x89\x12YiE3S\x08b\x80\xf0\xbc\xac2Q\xa8\x19\xe5\xfegNg\xa7\x97(\x99\x9a\xb4\x99UCTb c\xcd\xc8\x19\x91dFr2%e%\x0c\xfc\xdd_2S\xe2\xe0{?eA\xf8\x8a\x16\xc9\x99\xcaP\x9aIrI<\xf1\xf1\xa1&>\x8eH\xed\xaa<\xf9\xa8J<\xaf%\xbeQ\x89`\xd4\x93\xbcm\x08\x9cc\xe8\xd1VI^\x92i\xceK\xea\xbe\x9f\x91y\x9eI\xb5\x08]\x8d\xdf\xc8\xd4Z\xe0$\x9f\xf4\xcd\xec;:ON\xe1v\xc6X %\x17D!\x06^cH\xde\xc1o\xb5\x96\x93\xbf\x88\xe87\xf2D\xed\x0f\xb7\x84*\xd5@\xf2\xe6\xb1\x18l\x993!\xf8\xb9;\x00\x15\xf0\xd0$lY\x9fU\xbb\xb3`O\xd1\xd0\x0f\x17lF\xc1\xb4\n4C6\x03\x95\xb0\xb9\xb1\x06\xb5p\x95\x9d\xd1\x1f\xe9\xe5\xb1\xc8>QQ\xd2#\xf6\xbbV\x12W\x95\xcd\x13\x99\x87\xca\xe9\xcci\x93\x0bo\xd3\x0fh\xae@\\\xeeE\xe3\x1d\xb9\xd9D4\xa5\x9cP\xae\xb6\xadH\xd0l*?\xd8\xc9\xfd\xa0\xd0\xf7\x01\xf5\xa8^7\x144\x964\x9f(\xcd\xf3\xef\"\xa2d\x89\xc9ez\xa6\x0d(>\xa5gu\x03\nr\x9a\x9e\x85\xc7\x0e\x17\xe9Y\\#=r\xae\xd3j\xc4C>\xead\x18\x17ycz\xb1\x85\xc8\x8b\xf4,\x0e\x08\x86|\x80\xf2\x9e\xd6r\xd6\xd0Z\xceZ\xb4\x96\xb3\xb8Ng\xe4\x89j\xdbR\x1ay\x96\x9e\xc5\x96\xd6\xc8\xcb\xf4,\xf6\xa8\x8d\xbcM\xcfbGo\xe4\x9d\xf9R\x14G~\xbaQp\xe3\xabg\x95Dx\xd6\xa6L\xb8\xc4 &\xaf\xf6h\xef\xa7\x08\x93l\xb3\xb9\xecv\xe7\x9bMty\xf8B \xfb\xe4M\x84\x8dJ\x91\x919yA\xdeL0y}ck\xd4=.A\xcd\xb3\x12\x9e\x91Wr\xd1\xaa\x85\x81\xf2t\xf8\x9b\x91K\xfdaB\xfbC\xb5\x9f;\x154\xfb8\xb2\x8dT\xd6a\xed\xcdD\xb47\xc4\x7f\xb2\xad4\xeb\x1b{\xb2\x1d0\xd0\xfe\xfa\xd1\xa0\xdb\x05\xdb\xae\xc3A\x02\x9f!H\xeb\x1dM*\xb8v5\x9a\xa6i\xd5\x86j\xb6\xb7~\xec%x\xedG\xb4\xb7\xbe\x0ezm1\x97\xc0\xd4\x00\xc3\xbe \xbf\x915y1\xc1\xe4\xf9>\x93bO\xfb>\xd2\xcbg|FG\xfd\xe1A\x9a^\x08\xa7\xf6J|\x08\xc1,\x1bA<\x9b70\xaf#\x89q\"\x15\xa6\x84\xb6CT\xca\xa3\xfe\x04\xc3\xbf\xcdf\x8e7\x9b\xcbC\x93v\xfc\xe4\xe9f3?\x8cdZ}\x9a\xdfP\x1bw\xbbv\xdc\x8f\x07\xdd\xee)l\x99.\x952\xdd\xd2y\x0b\x8c\x1f\xa3\xdf\xc6\xa7\x13r0\xc08y\x11\xe1\xa4m\x1c\x96\x98\x7f#\x1f\xc9)\xb9$\xaf\xc9\x1bE\xd4\x13L\xbe\xdf\x07{G\x115\xfa\xaa\xb9\xe8Qm\x1dM0\xf9\xfd\xc6\xda\x8e\x18\xce\xad\n}>\xc1\xe4\xe7\xcf\xaa7t\xf5\x9e\xde\xc0\xa0\xd9<*\xedy\xabU\xed\x8a\x9b\x0e`\x7f\x17\xed\xa7\xaf \xd3\xd0\x96\x14\xd1\xa51\xdf\xa4\xa9b\x127\x1d\xb4\xdc\xd4\x1e\xdd}\xfb\xf6W{|{pM\xa1?\xdb\x93;\xcd\x9e\n2\xf7T\x96\x9dP\xbd\x13\xe4J\xd0y\xf2\x84p--\x92\x9f\xdc\xcd\xd8+\xa2O\x85\xb4\xdf\x8f\xbdl\xb2V\x80\xe6\xb8\xcc\x99\x02Z\xb1\x9ddZ\xfd\xb9l\xe85\x9fv\\\xd6!\xc2\xf1\xee\xf3\xd1\x9fv\xe0\xadt\xc6\xd4\xdc\xd7\xb1\xe0\xfdy_\xc6\xefn\xf9\xd5\x0d-\xdb\xfb\x8ak.*@\x98!r*\xa2+6K\x96D\xa1\xf2\x19\x81\xd5\x90| \xf6\xd8+\xf9\x9e\xf0\xe2Gz\xf9\\)c\xcf\x1d\xa6\x7f'\xbcx\x9a\xafE\xf23\x114\x9b\xbd)\xf2\xcb\xe4\xe0r\xb39\x98\xfb\xc8\xcc\xd6\x92?\xe3\xcbUN%M\x10\x9f\xcf\x91\x99\x96)_\x9er}5\xf6\x16cL\x0ef\xdd\xee\xc1\x87\xdd\x04\xf2\xfdM\xc3]\xf9\xb6\xe1\x95\x81V`\x1a\xb6%+Ln\xe8\xe8y\xd0Qp-\xeb\xfa\xfa\xa4\xcd\xd3\x17xWG\x06\x8933\xbb[2\xc3\xe4)&\xefv\xce\xc5\xcf\x82\\\xd5M\xab\x92\x16k+m\x89\x958\x93,C=7\x01l\x14WD\x04\x86Y~\xb9\x9b*\xde{\x97\xceZ\x0f\x82aXU=\xd8=\x9c6\xce\xc1?\x92\xa6z\x9bL \\\xf1$\x03Ovn1\xc6\xdb\x91\xe4U8j\xbe*\xd3\xab\xda\x89\xaa~\xe9\xcc\x1d\xa2\xd6>s\xbf\x88\xa7\xab\xdb\x8b\x1for\x0e\x86\x1e\x8elvM\x9b\xd7-y\x87\xb2\xaa\x96\xa3\xe5\x83\xa13\xafU\xc5\x9cj\xaf2\xd8L'6fp\xf8``\xa7\xec`\xd8\x86\x1a\x03J\x8b\xf2\x9f\x0c\x07\xc4\xa3\xe9\xc4\xf8Ft\xe28F>\xb78\xa8\xee\x14B\xcd_\x83\xa4\x8f\xbf\xaf\xb6\x86\"M\x7f\x9a\x19\xc2% \x08\x81\x82\x13\xc1 \xe7\x84\xf1\xf4\x88F\x92\xe3\xa8\xe0\x9bMT\xf0\xfd\x9c\x81\xba\xdd\xc0\x9b\xae=\x08\x9a~8\xbd\xf2\xfavq\"\x9a.z\xd7G\xa1\xa8\xb9\x9e\xdf\xad\x02N4\\\x06w?\x94\xd8\xf40\xd7V\x87&3\xf01\x1c\xac.\xe0\xefC\xd7\xd3\x8e\x80n\xce\xa9]\xf1=\x0b\x94\xe7t\xed\xfb\xa6\xd9\x10\x97w\x1f\xde\xbb{\xef[\x93\xd8\xea\xe9T\xf7\x8ar\xef3\xeetz\xdc\xf5\xec\x89\x1f\x97X#\x0b\xcc#uTb\xa2A\nR*\x0f@/\xd94fL\x9a\xack\xbav\x1f\xec\x9f3\xb9`E\xe5E\xb8\xdb\x8d\xd3C\x82\x9f\x14\xf8c\x1a\xe4Cd<\xcf+\xd3\xb9\x0f6m\x1c\xab\x9e\xeb$\xe4\xdex\xee\xb4\xbd\xf3R\x05&\xf1\xe6\xce\x95\xb3\xde\xad\xde\x8b/\xd7\x10\xc1N\xe7\xd7k\xe0\xd6B\xa5\x82~\x07%\\\xdb\xebN2i\x7fK?o{\xda\xe6\x86 /;\xe8\xb6\xd3\xd1Q\x11+l\xfa\xa4\xd6\xa4+\x08\x9a\xba\x8b\xb0\x1a8\x02\xee^\xa1\xa6\xc2\x805\x8du\xbd\x9ai\xba\xe7\xcd\x92\xe4\xab\xa4\xf3\xc0\x1b\xb6\x17t\x1b~*vv\x12\xf5\x1f\x0c\xfe\x84G!\xd5zQ\x8c\x83\xe0|\xf5\xd0w^\x0d\x13\xb9\x0b(\xbd\x9eg\xc32\xc6\xf7\x1e\xd0\xa5\xfbS\x9f\xa2*\xa1\xfct\xe6{\xe3:z\x0e\\q\xb7\x0eg;)\xcb\x08\xba\xbd\x10h\x08\x17\x90v\xd7\xc3\xa2})\xc9K\xf2\x82_\xd8\xa4\xdf\xfb\xfa\xba\xbb3\xacF\xd1\xc2\xf4\x1d^v\xb0\xc6=9\xf9]\xbc\x93i(n}\xdf0\x0e]\xf3>\xe9\xdc{H:\xaa\x85A<\xbc\x8b\x89+7\x1c\xec.8\xf8\x16{\xf0.\xb3\x8b*\x18]\xc0\n\xdcm\xbb\xcf=Z\xe6D\xab\x00\xb5U^ww\xed\xec^e\xedl\xddgg\xf1}\xaf\x95\xa6wt\x15\xf6\xc3\x96\xe9\x8e\x83;\xf9\xf4\x96\x14kzk\x12\xf8\x817\x9a\xa9\x9b\xd8\x0f\x1e`\x9f\"]\xdb\xe6\xe1\x95\x9b\xdb\ngvx\x17\xb7\x10\xb8\xfa\x03{\x96\xaa\xbd]\xf8h\xc6\xc4\x82\xfa\xbe\xa7\xf1\x17\x9d\xe5\x8b\xce\xf2Eg\xf9\xa2\xb3|\xd1Y\xbe\xe8,_t\x96/:\x8bk\xfb?Qg\xd9?\x8cIk\x10\xac?,\x06\xd1\xff\\\x8d?~H\x98dp\xba\xc58\x8e\x04\xdfl\"\xf1\xd9\xa7[\xc1\x031^\x08V\x10\x0d\x1e\x8f\xf6\xb8]\xb8Z\x1e\xea\xf5\xd2\xc8\x1a\xba\x05`\xb9\x88\xd7D\xb5P:\xc3\xf8\xaevF\xb4\xa5=n\x14rx\x9d\xffy\xfaN\xc0\xa4w\x06\x7f\xbaY\x0fh\xd5\x91:\xbe\x00\x0d\xd5$\xbf\xd8\xb6N\xfa\x0du\xfd\xcb$\xfc\xcfO\xc2\xffL\xe03LJ\xeeb r\xb5D\xf9\x9eK\xb4\x9d&vR\xc4\x0e\xa5\xd3 \x0c\x9c\xc1\x9b\xd1\x1c\xff\xf0\xd6\xb1\xfflc\xce=,9\xc49\xa7\x96\x83\x03 OEu\xbb\xfao,\xb3\xd3\xf2\x1d\xcfi\x9a\xa6t\x0bn\x00S\x9e\xe6^\xb1R\"LV.\xe1mV\xd0\x1cy]\xcf\xb9o\xf1\xa9\x11k\xa3\xb3\x8c\xd8<2)gTzA\xa8\x8e.\x97\xa7\x94\x11\xc5\xf6A\xd9n\xb7\xfe\xe4k\xb7\x8b8\x0c\xd7\x0bxT+\xe2y\\\xe5\xbc\xa8n])Y\xf0h\xc1!\x1e\x94\xae\x82\xc9\xd5\x96\\\xd9z\x89\x1af\xad-\x02\xf1\x9d\x12\xb5\x10*t\\\xeeD\x87\xa5\x85\x1aJ\xaa\x97V\xa3\xa97\xdc\x7f}\xa8\xddn\x04\xf8\xebvUS\xe4\xb2u\x00\x9a\x9c\x1c\xf4\x9f\xb8g\x82ID\x8a\x90\xe2?\xcd0R\x9b\x0d*\xd6\xcbS*\xbc4,z)\x1d\x817\x86\xaa\xd3\x00\x0f\x83\x93\x87\xc8.cV\xc2\xdf\x88b\x88\xc2\xa7C`\xd1z\xe8+p\xadP\x00\xa9\xa5\x8b\x15\xfbR\xff\xeb\xa5\xa8\x830\x11\xbd\xb4\xc0\xba3h\x02\x88\xddV\xab\x15\x94\xce\x8eE\x00\x9f>\xe5\xe4\x82\xfb\xfe\xa8. \x97Z@\xe9@\x8f\xbbh\xf2(\x1cQ?N`\xaf7\xc1`\xe3\x0fXk\x81\xd0\xef\x98\x9c\xf3tP\xb1\xfc\x8f\xdcY#iS\xcf\xbe\x92'}\xd4;\xe7\xbd^5\x1fo\xaa\xf9H\x07\xb61 \xb1\x80\x86\xa6f\x9e{=%\xc3eU\xffE\xd5M\xf4\xc2\x8a\xf2\xeb\xe3&\xde\xc8\x9e\x83\x88d\xb6\x9aP\x13P\xec\x178Q\x89 \x08\x9c(&i1\x16\x13\x8f\x9d\xed\n\x9c\xe8\x06\xf4\xc1\x97\xd2\xb4\xdbEgT>\x91R\xb0\xd3\xb5\xa4\x88\x05,\xf1\xc8/\xfbA\xa3\x08\xc9\xec\x14\xa5\x10l\xce\xab\x18!\xc1s\x8a\xbc~\x8e[\xeb\x8a5m\xab\xac\x0d\xc0m\x98.\xbc\x95\xe2\xf2\xea\x94\xa7\x07\x11Z\x17\x9a\xf1\xce\xaaup\xce\x8a\x19?\xdfl\x0e\xf4\x8f\xd8:=4SL\xc0Y\xcb\xa3\xb6\xd3LN\x17\x91\x14\x18\x1a\x1f\x02-\xff\xd6j<]\xd1\x99\x1foN\x11w}b\x89H\x0bz\xde\xd1\xeb\xb1\x00_\xad\x11\x7fT\x80\x83\x96\x18s?\xfe\x1c\xb7\xf1\xe7\"\x88Z\x90\xe5\xb9\x99,J\xc6j\xbe&6\xea\x9e\xc0\xe6uh\xac\x94\xa4\x9f\xf8\x8c\x96\x10\xe9.^d\xc5,\xa7\xc6\x94\xa9\x01w\x91\xdaG\xcd\xddk\xb6#\xf0\xd5`\xe5qv\xfa\xbd\xe0K\x17\xf6\xd1\x99\x0eb\xab\xfe\xd8\xaa\xf6D\xc2\xfaV\x1f\x0c K\x0f\x86\xa3{w\xf5\x13?\xdaT\xb3\xdb\x1d\xde\xf3\xbf\x95\xa2\x9b\x1e\x0c\xa0\xa8\x83\x13Lj\xd4\xc2&\xf7\xbeI\x83\xc2\xf7\xbe\xf5\xbf\x0f#\x91\"!sE\x19\xc5!H\xef\x9f\xe8\x85<\xceN#\x81\x13\xf8~+\xe8'\xfdMl?\x03\x9c\xdc\xfb.l\xf6\xfe\xe0\x86f\xabf\x92Z7A\xb3\x0f\xea\xcd@\xe1WY \x85\xc3\xb2\x0f\xd3\x00-\xb6\xf0\xf7L4K\x13\xae\xe5P\xcd\x0e\x94)\x95\x18\x0c\xbc5\xea#A(\xdenC<\xb6\xcc\xb6\x9d\xc3\xd1\x8c_\xed\x9a\xe7\x02\x83\xfd\xe51W\xbf4\xf5\x8d\xf4\x84\x8f'q\x99\xb3)5,%\xd6[>El\xd5\x0b\xf0V\xd9=\xe2\x95/Z\xe1x2\x98\xe2\xb4A~\xbe`9\x8d\xb4\\\x8e\x8a\xd4o[?\xcf]\xa4\x94D2\x15\xb8bt\x96\xb5jc.x\xbb\xdf\xe4\x84o\xa0OyQJ\xb1\x86\xc8\xae\x92\xc8\xf8\xc3\x07\xc8\xfb\xf0!\xd5\x03\xe3\xa9\xa8J\xbb\xd0'>\x905\xffY6\x8f\x0e\"\xfah\xb0\xd9\xd0\xc7\xf0\x82\xbf\x9a\xbe\xe3\xec\xb4|\xc6\xd7\x85\x8c\xb0s\xae\xaf\x1eJ\x1fE\x03R\xc4\xdc\x04\x94U\xbaOQ[7\xe0\x9c\xc1=\x12K\xdbEEK\x7f\xa4Hio8*\x1eI\x88\xb2\xab\xc0;\xe6\x91WP\xcd\xa43\xa7\xad\xe4\x87\x12o\x8f\xe8H\xb4\xd7\x11U\x1dQ\x85\xd9\xd5 \x9aU\xb1\x03D:\x92\xfd\xfe\xa8\xadMY\xb5)GZ\x0fi\x19\x8f\xaa\xdeyLon\xa1\x06\x95]A\xadzF+\xe2\x8c\x1a\x04\xa2v\xcf\xce\xc0\x80L\xf7g\x96\xf7\xde\xdd\x8d\xe8\x0e\xb4\xd0\xaa\x1f\xda\xd2\x8fk\xa2-\xa0\x87i)\xd42\xb1\x9d'\xb5\xed\xddY\xb7!\xc5\xae\xd3wV5}\xe7\xban\xeb\xa4aq\xa8jX\xf14FF\xfb\xa2\x13S\xcbj\xed>\xa4\x15.\xd5\\\x11\x7fI)1Z\xa9\xd5<-\x9c\x1f\xd2qvZ\xf9\x02\x95i\xa1\x9dJH\x0e\xbf\xc4\x94jKD{*\x00\x91.\xc2\xb5\xb8\xf6R\x82\xc6Va\x06\xd4w\xb9#;\xbe\x97\xb32\xf5~o6J\x12\x03\xdc\xaa\xbc\xcb\xb5_*\xdf-\xca\xb9_\xd3\xfaU\xb4\xd1\xd2\xbc\xd7{4\x18a\xbf4\xf8Z+-\x17\x87\xddy\x19v~\xcfx\xe4\xbfV\xe2\x9c\xd7A\xfc\xaf\x81\xf5_ip\x06d\xa6\x84\xf9)\xefv\xa3Y\x9a\xc5Y\xb5\xbb\x92\xdc\xe80u2\xb0B`\xcaq\\\xf2%\xad\xfbr\x1b \xda\x95.\xab\xeci\xbe\x05'\x1e\x9eS}\xb8\x85,\xc2\xddb\x1d\x10\x12\x9c\x01h\x9el\xc9nND:M\xd3tN\xb2\xf4Jf\xa7\xef\xe8<\xf1K\xd3\x8aR\x8bI*\xb7\x84\xcd\x12j0=\x9eO\x88A\xae\xda.\x1a4\xabT\x17\xeaBh\xab\xe1DmO\xca\xcdf\x86\xb7\x16\xf5\xebn7\xca\x1c\x159\xeaI\xd7 \xec\xa3\xcc\x91q\x95\xc51\x99\xf7zd\x07\x12$\xc9L\xd0c\xbb\x11\\U\x13\xb8H\xafX\x00\xa4\x9c\x10\x18D5\x18\xe9\x81\xad0\"\xb7\xa3\xbc\xdb\x8d\x16\xfebIsLV\x90\xd8\x04|\x85\x89\xec\xf5\xae\x9b\xa4\x85\xdbn\x08\x08M\xc4[\xf4\x8e\x80a(\x1e [ \xc3\x16\x0f\x86##Z\x8cb`\x1a\xb7z\x8c\x82ZQ|\xa1\xf4\x05Se\xa05\xd9p\xdb0\xcbd\x06\xdb>\x84\xb1\xf6L\x92J\x8f\xf5\xdb4\xba\x88\xdbH\x1e\x0c\x15\xc0B\xa3a\x17k\xf2\xd8R\x91F\xd2\xdb\xeeW\xbe\x92\x8a\x8e#\xd9\xce\xa5d<\xe3\xcbwt\xaet\xbf\xc8x\xc1\x11\xd9\xca\xae\xa4S#\x88\xac\xeb\x10\xed\\K\xee\xe6Y\xa4\xa1\xd9\xe8s\"\x8b\xc5+c+M\x04\xe1\xe9\xd5\x96\xb0\xfaQ\xa9\xe2[Z\x91p\x81&\x94>Q\xa4l,\xd4\xfe\xa3\xd2\x01\x1f\xa7\x03\xa5\xf3\xab\xd5D\xc7E\xe5\xe8\xc2\xb7\x91$cd1\x86\x08r\x18C\x04\xb5aK%\x03\xb6\x10A\x80)\xf8\xdb\xc0\x14\"\xc8b\n\x11\x14`\xca\xfb\xae5\xbc\x13ShRqO\xc5\x05\x03\x17\x02\x13\x94\xe5\x05\x1cfq\xdf\x99\xe2\x82\xc3\x16\xcf8\xe8\x00\x99x*\xba\xe7e\xe2e\x99$\xf0Z\x08Y\x92\xa2\xefT\x12\xd1\xed\n\x08\xb4\xee\xd13\x9c\x15\x12+),\x8f\x8e\xd4r\x13\xdb\x88\xc5\xcf\xf8r\xc5\x0b\xb5 G\xbf\xd5=\x10<'\x93\xea`\x04\x19\x0e\xa6\xe8\xff7\x0e\xc4}|\xb9\xa2ejh\xe2\xc9\x8d\xdb`\xcbs\xed\x1e\xb60{X}\xd4 \xdd\x8eU\x8f\xbaU\xd9&\xc2\xfa\xed[\xde\xee\x88\x9f)Y,3I\xe3%\x9fQ83\xb35\xd1\x81\xdd\xf9\xf3\xcd\xe6`x\x90\xa6\xdc4f#\xa0h\x8f\xf0\x04}\xa4\x97\xe0\xd0\x94\xa6\xa9\x80;\x86\xedh\x98\xa6)\x0bx4\x90LJ1\xe8\xec\x12b\xbaD\x99R\xd7\x0d\x00\xa9\x88\xa7|u \xc8<\xe6:\xdf\x80K\xae\xd4\xa6\xcc`\x1b\x9c\x880)\xdcy\xfd\xbfeOC \xc2\xc1s*\xd8':\x03`\x14\x9f\xd53\x1d\xaev\xcb\x93\x9b\xd0C,1\xdd\xd0k>km\xa0q\xb0\x1c\xa2\xebp\x98\x0cT\x0b\xf5\xa6\x9bAsjq]\x86\xd8l\xca\xcc\x14\x15DMo\xd2\x84%\xa2x\xabf]\xcd\x17\x07\x1a\xd0\x93\xcb\xd27<\xf2v\xa4\xfd!\xc9\xe0~c\x94\x99k\x8e\x1a\xdb<|\x9d\xc9E\xbcdET\xe7\xa7\x0c'.b\x11\xa4l6\x03\xc2kt\x91m\x1d##\xdeF\xf2Z\x89a\x88\xa3\x16\x8a2\n;#4 \x9c\xff\x0cVMCV\xed\xc3[}\x02\xbcp\x81*\xf4pa\x99\x10\xb5\xd1\xd6\x92\x8d\xa5\"\xc4\xa2\xdb\xf5\xe8\x02)\xf7v\xcb\xa9\xc7\x1a-\x93 z&\xd5:\xad)\xef)\xc3\xa4\xc9\x9f\x7f\xe3\xa4\xd04]\xe3\x85\x8e]=\xf3\x8em\x9f\xfd/>\xb6}Rg\xee\xfe\x9c$\x07C\xd2\")}\x87*\xed\xe5\xe6\xbb\x85U)[\xf2$\x14\x04\xea\xdb]\xca\"\xb5=A@\x84/o\x94\x0d\xde\xe5x\xeb8\xb4l\xf8\xb7s\xca\x7fe\xb9\x86\x91c\xff\x13W\xe7\xd4S^\xae\xd1]\xd69\"\xcf@u\x11M\xd5E\xbb\xae\xca\xec\x14\x82\xb3(\x15\xe3\xbaU\xf4\xd6[Eo\xff\x17\xaf\xa2\x97{\xa9H\x1f>\xc8\xec\xb4\xaf\x11C^\xd6\x96\xc6\xcb\xda\xd2\x00\x9b\x04\x1d\x82\xe7\x8fZ\x1d\xff\x9eeq\xdd\xa1\xe8\xd4\xce\xf9s6{]?V\x82\xa52]\xd0\xe9\xc7\xefM\x14\x0f\x12\xd6\xf8y5\x0bT\x80]U\xdc\xf7\x8d\xcb\xb1t\xf2\xc0\xc6x\x1d\xc9n\xb7\xe8v\xddv\xd0E\x14\xd9\xbd\x893\xfb\xb7\x1bN\x97\xaa\xc5\xce\xbc\xb3&8_j\xec\xd8I\x9eF\xf6\xd8\xa9\x88\xd9\x0c\xc3!\x93\xd9\x83\x07\xc7K\xc1\x91\x92\xb7-K\x0b\xd8\x9e\x83\x1e0\xd3\x1f\xef\xe8\x9c,\xfe3\xf8Lq\xf3\x86\xcd\xfb\xe9\xef\xaf\xec~\x8d\xa9\x02\x06!\xde\xb6\xcb\xfb\xe9\xd7\xb2\xa8\xd0?\xd5\xce\xefZ\x86\x963D\xde\x02C[\xd4\x18\x1a'\x11Uh\xa1\xe3\xd5$]\x13:.')#\x14\xe3p\xb3E\xf1\x95\xd4\x9b-Jf\xdd\xeeL\xe9\x9a\x15'\x84h\x9b\xcd\xd0\xe6\xebC}[\x99\xa0y\x96\x97\xd4\x06\xb2\xaa\xde\x12b\xed\x05\xaa\x18XSb\x07\x9a\xcc7\x9bh}\x88\x06\x08\x04/\xdeb\x08\xe5\xb9\x93\xef\xfe\xe4\xf1\xdd\x9f\xfe\x17\xf3\xddw\xfb\xf3]D\x1a\xf4\xd5\xe4\xcd\x15\xf6\xddn\xd6y\xae\xdb\x13<\xed3nO\xc0<\x97\x8f]n\x18`\xd6k\xdc\xc8t\x04\x11\x97\xd5\xe6\xf4\xd9jf\xed\x90Q\xd9]7\xc1\xdd\xe5_Xs\x15}\xe0a\xc9\xf3Kz\xe8co\xa7K\x0ed\x9c\x1b\xc7\x92S\x9e\xcf|'\x9ax''\xbf\xd1\x8a\xdc7y\x0fsZ\x9e\x91\xf6\x10\x17\xf8):;\xf3\x9a\xff\x0d/\xf2\xcb>p\x18\xbf\x95yN/\x1a\xcfP\xef\xf0\xce\x0d\x1bT\x0b\xa8_\xae\xa7SZ\x967\x8c\xacQMPm\x0d\xf4\xb9\xf5X1\xe7\x9f[\x87\n\xc1\xc5\xcd\x95:\x9ee\xbeZ`\x8di\x04\xa6\xe2\x9c\x9b[g\xaa\xdby\xdc\x99\xb1O\xa4\xfaZ \xda\xb2N\x95bz\xd1$\xeb\x91\x83\"hng3^\x85\xd0\xab\xe3\x0b\xe7\xf9\xc2y\xbep\x9e\xd6j_8\xcf\xbf\x87\xf3\xdc\xe8\xca4\xa3O\x15\x0b\x88k\x0f\xb5\xd5\x1d\x9a>\x99Kx\xa8f\xd5\xd7_\"i]\x9b$/\xb2\xfc\x0d\xc4\xa1&2\x06\xc7c\xd0\xddb\xb5\xcc\xa1E\xbcW\x93\xf00\xe7\x94\x15g\xf1\xba`\xb2\x87\xe0\xe5\xcb=\x13\xd1^=\xfc\x12\xc5\x83\x07D\xee\x1ez\x03\xd0\x06\xce\xf4\x88\xe9\x85\xb4\x1e]7\xd4hC\xc7~\x9d\x08Z\xaexQ\xd226\xebJg|ne\xbb\xba\xfe\xb9\xdaj\x8d\xfds5a\xa5\xedYuOB4\xf5\xee\xdf\xb65}*\x80\xd7\"y\x1a\x1d\xd1\xe8k\x8e\xa3\xe7j[\xf0\xfc\x9f\xd8\x168)\xe9\x075\xd9!b\xef\xea\xa7*\xdbdG\xc0\x85+\xc1=TRy\xe0\x85\x11\xf0\xbd2\xef\xd5\xc5\x8d\x95*\x05\x17\xcb,\xbfN\x14\xcf\xb2rAg\xd7\xc9\xcb\x9a\xc8\xab \xf0\xb9\x97a\xfd\x8eg&yV\xca\xa6\x9c0n\x82^\x8c\x01\x9d\xbe\xfd\xe3%\xdf\x8ep\n{r\xe6\xcf\xe2\xc1\xfb)o_\xe8\xe3\x0b}\xfc\xbaK\xc4\xfe\x1bD\xe5?/O\xee\xee\xe4\x93G\x14\x1e\xb7\xfd^\xf1\xc8\xef\xf7\xe4\x91wn\xdfV\x7fnw\x9ef%\x9dux\xd1Y V.\xfb\xb3L|\x8c\xa7e \x99w\xf4\x04+\x8e>\x86S\xa4\xdb\xe9\xad<+\xce\xd6\xd9\x19\xed\xdf\x9a\x00\x9eW\xa25\xcfb\xfd\xcem;\xe9~\xd0\x91\xc6\x94C_\x9d\x86\x9bw\xa7?\x88\xe1\x15c\xf0\\\xb7\x1e\xc8\x9d\xda\x9e#\xa7s\x1b\x1b\x06:\xe9\x97\xf0\xe8\xad\x02\xcd&s1\xeb\x1b\xb4\xd5\xd6\x17d\x81\x19a[\xc6\xb9\xc8V\xb5\xf4z\x18(\xb7\x80\xfaK\xfe{\x1f\x14gX\xdf\xf7M\xf9>oI\x0cSLA\xf3\x1a\xf4\xe2r\xb5\xa0E\x19,\x06h\xbb=\xa3lMo\xa6\x99\xd5\xfa\xff,\xe9\x8cej\xb6\xab(5\xd7N\xf0\x8dS\\\x9b4\x0f\x88\xad\xd7\xef\x9d\xdb\x9dg|F5\x9f-\xcd|\xdf\xd0\xb2[\xb0U\x84\x03\xc7[c?\xa0OKH\x18\xd3m,\xf9GZ\xc4S\xbe\\\xd2B\x12/i%x\xce\xcf\xfc\x94\x19\x9f\xca\xcb\x15\xf5\x93\xa6\xb3Lf\x15\x9a\x80\x90\x17e\x1e\xdd\x1b\x90\xce\xdd\xc1\x9fH\xc7E2\n\xfb[\xa9\xf5\xbb\x86H\xf1\xb66W\xe4'/\x15\xe8\xdf\x045\x8alI\x81bo,\xe9\x00\x87\x0b\x1a\x1fN\x99\x05#\xd1N\xa6\xc1@xQ\xca,\xc4@ n\xee\xb5\xd1}u?\xfb\xf6\xf4\xf4^K\xbf\xa7\x9c\xe74+j\xe5\xe7L\xd0S\xc1\xcc\xc2\x0ckh\x11\xc0\x03@2)E_\x0d9\x80\x04\x1ce\x03x\x17YP\xedt\xcdr\xc9\n?\x89\x15%\x15\x9e\x80\xb1\x03\xc8\x06\xf3\xd3,3\x94\xd1\xed\xf4:\x19\xf1~'\x9fX\xc9\x02\xb1\xe4\x06NgwO3'}\x80\xa8gt\xca\x05Lc\xd2Y\x173*\xd4\xeao\xa1\xee\xda\xd4\x98\x01\xd5 \xab8`XK\xd5\xc9jh\xa2\x85d\xe1\x14\xafE\xee\x7f~\xca\x04\xcbNs\xdaB\x9c\xf7\x07\xa4\xf3\x9d\"\xce\x87\xed\xc4\x99I\xb1\xceicR\xf4\x93,^\xeaGz\xa9\x98`\x1b\xf9?\x18\x90\xce}\xd5\xc57\xed]\x08zF/\x82\xc9Z\xae\xb8P\x04X\x9f-\xfa\xdd\xa0\xa5\xbe+\x1e\xd0\x00\xaf\xf4\x92\xb6c\x1a3%\xb6 \x99\xe5l\x1a\x947\x87t:\xa7\xa5W\x8dt\x07\xa19\xeeZ\xd0|\xd5RxFs\xda\xa4>Ag~Y\xad\xe98\xcd\xf3\x8b\xd4\xf5\xb3\xbeH\xdd/R\xf7\x8b\xd4\xfd\"u\xbfH\xdd/R\xf7\xdf\"u1&\xc74Bo\x95\x8cE\x18c\xf2\x0f\x08\xd3\xa56\xcb\xbf\xab\xcd\xf2\xef{n\x96=\xd6\xa0E\x89\x1fp\xd5dv\x06\xf1=/\xb2\xaa/)a\x93\x0f\xa9\xed1\xd4\\\xf3\xc3\n\x9d\x8f;\xfa\x01 [\xa6y\x9b\xd7\x0c\x8cj/\xc9,\x7f6\x05Y\xb1\xa0\x82\xd9B\xc1i\x96w\xa1xs4\xe4*1\x10\xc6Ur\xfb\xfd\xa0\xbb\xc9\xaa\x82\x97\x06q\xe5\xea\xb7_\xbe\x96\x02\x97\x91w\x1f< \x9d\xea\x9fA<\xc45^\xe0\xf4\xab/\x13\xf5\x9f>Q\xfb\x07\x04\xdd;hf\xad\xce\x11\xfb\x9d\xee_C\x8dX?z\xb3\xc5\x98\xfc\xe0\xf8\xc3\xcf\x8a?\xfc\xbc'\x7f\xb0\xa1W\x11A\xbbI\xa5\x8a\x08\xb9_i`W\x98\xfc\x0dL\xa3~\xe1\xb1\"Eg\xe6\x15\xa1\x95\xa0\x08\xe3\xe8\xa9\x82\xf3\xe9\x9ep\xb6\x92N\x0b\xe1X\xc5\xae\x7f\xe1\xa9v\xfeU\xa6\xfa\x0e\x94\xfe\xda>\xe7\xdf\xdf\xd1\xfet4\xd5\x06\xe4\x9fOL\xae\xe2\xe7Q\x14TS;\x98C5G\xb0\x97A L\xd7\x16\xe3\xd1\x7f\xdd\xb9}\xf0_\x9d\xdb\x9d\x15\x15s:\x95}\xfd\x00\xf0i&:\x9f\x86\xf1\x83x\xa0\xf2\x9e\xf1\xd5%\xb0\xa2\xce\xdd\xc1\xddA\xe7\x87\xcbu\xf1\x1b\xed\xfce]\x90\xce\xeb\xe7O9\x97\xa5\x14\xd9\xaa\x93\x15\xb3\xce3^h\xbfh.JU\xf5\x15\x9b\xd2Bm-Am\xea\xbc~y\xfc_\x9d\xdbw\xfe\xcbY\xa8\x9e\xf8\xf1\x99\xce\xa8T\x04\xb5\x96tv\xa4dtD\xbdHN\x7f\xe6\xb5G\xea;\xac\xe8H\x177h\\LF\x8dXf6\x8e\xd7\xea\x02\xe9\xf7\x1a/s:.&\xa9h \xbc\xf7W/D\x97\x0b\"\xd0bA\x89\xab\xfbdg\xc8\x98R\"!\x8c\xd3{\x9ez\xb1\xa2\x9c\xc7\xa8i\xa0\xdb\x8d\xcc/\xcf v\x99\xc9\xe9\x82\x96\x9bM3K\xef\x04_\xeb\x02GF\x8bn+\xb8\xe4\xbf\xefS\xaa\xac\x15\xf2l\xbd\x7f\xe4U\x18\x9a\xf7\x1c\xcb\x85\xe0\xe7\x9d\x82\x9ew^\x08\xc1E\x84~\xe2\x1d\xaa\x1b\xec\x00\xc0J\xad]R\xb9\xe0\xb3N\xb9^)-\x8d\xce*\xd4\xbc\xe7\xdaX\x1b\\>]\x1f\x7f\x01\x0cS\xf3*\xf8\xa1\xfd\x11Ax<\x17\x9a\x07b\x13UA\x80t\x19p=\x0e\xc8\xe1\xefa|>\x1d\x90\xae\x1a\xab\x0e\x16a\xa0h\x8b\xddPQ\x9d\x19\xfa\x16c\x98B\xcaR\xb4*\x11\x91\xf0\xf7\xc3\x07!sD\n\x96^\xc9\xc5zy\xda\x12\xe4\x10JAf\x1f\xf5\xe8\x96\x88\x8c\xb5\xc5B\xd4\x8de,\xd7\xa5\xd4Nl\xbdT\xf2\x142\x00\xc2~_\xa7R\xb4%\x829\x7f\xe2U\xd9\xef\x1b\x17\x87i\xce\xa6\x1fM\xa5~\xdf~!\xa2\x83]\xb4\xf7\xda7\xaff\xeb~\xf5\xfaVM\xec(\xec\n@\xf9-\xe1,\xbd2\xbe{\x97\xe6\xa537 \x8c\xf9\x01OilHD/\x0cx\xb3W\xa4\x82\xc5\xae\xc9H\xe2QQ=t/\xf0\xe14\xa7\x998fK\xca\xd72\xe2l,'8)\xe2l6\x8b\x847\xd9\x99\xe9\x07\n\xa4%\x95\xb6F5\x9f\x1e\x07d\xe5\x93\x9c}\x02Bj\x00di\xae\x06\x15\xde\x02\x7f\xa0RB|l\x97u\xbc\x10\xb4\\\xf0|\xa6i\xa3d\x81\xbd=X\xac\x9b.\x14\x0b\xa8\\JE\x99^m\xb7$g\xe9\x15+_\xc0\xa3}W\xb5\x80\x9c\xdb\xed\xa8d\x1e\xc5\x9e\xb2\xa2\x1e\x13\xca\xb91\x07-\x8f\xe9\xa4\xdb\x8d\xeaI\xe9x\x82I=Q\x07i\x91&\xc3\"\xa3\xf1\xea?%\x92\x1c\x0c\xf1\x96\x04\x00\xad\x8b6\x90\\\x0c\xaaQ\x03\x82F\xef\x8d\x18\xb5\xc2\xce\xd2At 7\x1b\xa1\x86\x867\x9b\xa8p\xb0\xe9\xe9\xa9\x83'\x14x\x00\"n\x87\xf2I\x9e\xb7FL\x02\x19\xe1\x83\xa5c\xdb\xe8J\xe0\x80\x93\xb3\xd8\xccP|Fe\xbbo\x98ek\xbe\x13@\xd8jL?Qq\xd9\x1a\x8dW\x07\x83sh\x91\x93\xea\xe1F\xfbxd3H\xad?D\x923\xed\xbe>e\x0d/7\x08\xe1f8}\x99\x8e'\xde\xda\\\xb3H\x07=\xa9\"\x18\xd4b\x17\xc6\xcf\xd6\xa5\xe4K@\xb6\x8b\xe4E\xcf;^rd\x1e*o\x8aD\xc8E^Q_0\xb2\x82\xc9\xa0\x15r0T\xff\xaf :\x88l\xb9b\xdai\x9f\x08\xc2\x8d\xaf\xfd\x88\xcd#G\xfa \xc2!j\x9dK\xe2\xddn\xc4SE\x11H\xf2\x15\x02\"b\xe9\x18M\xfd'#\x11A\xee\xc5q\x97\xa2\xd7\xf51_!\x82.\x11A\xeb\x15\x84\xfd8/\xd0\x04b\x90\x02\xbar:\x97\xe8@5\xda\x90\x82O:\xfah\xa7\x93]\xb0\xb2S.\xf8:\x9fuN\xa9J\xfd\xc4f \x01=@~a3\xb9\xf0\xe1\xb0 \x1a\x8cW\xaa\x1f\x82.\x10\xd1]\x12\x04:\x16\x9al\x0f\xfc5\x17\xa0&-\xc6\x83 \xc9\xd2b<\x9c\x902-\xc6w'$O\x8b\xf1\xbd \x99\xa6\xc5\xf8\xfe\x84\xac\xd3b\xfc`2j\xe2o\xd4\xc4\x1fL\xed\xaa\xe2\xdb#\n\xe6\x0c\x8bq>I\xb57\xd3\xb8\x9c<\x1a\xc2s\xd3.\x03\x952\x13j\xb6U\xe6c:f\x93>\x1dg\x93~\xbd\x18-\x14:\x94\xce\xb3\x8ag\xac\\)\xadAS\xc3\x9aEJ\xd2h,\xf4Q/\xc7\x98\xc8G\x83\xc3\x9b\xcaM1N\xe4\xe3A\xb7{S\xc15\xc6Dt\xbb!\xe72\xb2\x8a\x18Y\xb2\x8d(\xc91\xf6\x86\xac\x98\xeaf\xc3\xf1\xce\xf6Q/\xef\xa1>\x14W\xb2\xd1U\xc4\xd0XA\x18LTE\xdas\xe6i\x19\xabL\x94\xf4%\xac\x85\xe1\x00o6\x83\xed\xd4gc\xfeBn\xfat\xa5\xcd\xc5~]\x00p\xe9\x84R\x9a\xd2-\xc6\xe3\xc1\xc4\xad\xcd\xcd&\x92\x10*\xb4T\xd0\x91\x96\x86\x8d\xccP\xab\x94L\xaf\x95P\xa4haC\x11\xc5P\x12\xa2r\xd5Zh\x11)\xc4\x85 kki$,\xafV\x05\x89\xb0\xbc\xda\xf8\xe2\x86\x80\x97\xab\x9cMi\xd4\x92c\xdd\xb1\x04&\xc3v\x98j\x02\xa4\x0d\xdf\x8d\x10\xe0\xfe\xae\xcb\xb5\x12\xe1-nC\xabb\xcea\xc7\xbc\x98\xb6D.\xd9\x89\n\x12\xfa\xfay\x88\xe1\x98\x14\x10\xb8D\xc4.E;\xb0\xcd@\xff\xf8\x85\x9e\xfe\xc8d\xd2\xb61\xb1\\\xbd\xdbE\xbf\xc0f\xe3\xc9jE3\x91\x15S\x08\xc2\xeb\x98\xbe\xfda7\x15\xb0\x93\"F\xf3/\x8f\xf9z\xbahm_\x0b\x9an7B\xbc\x90\xaa\x94f\x1e\xacp\xe1s\xd12\xbb\x80\xfao9+dYe\xc5E\xf6\x89\x9de\x92\x8bn\xb7\x9e\x12\x87\x95\x1e\x0f6\x1bS\xe4\xb9\x01\x14r\xbb]\x0bw\x87\xc1\xbd\xc7\xd4\x13~AI\xec\xc6\xf2\x92\xbe\xd5\x87P\xad\xe3\xf1`\xf2\x80)_\x07\xe0\x10V>[\x08\xbe\xa475qG\x17\xbb\xc3bIK\x19\xb56\xbe.\xa9xr\x06q\x83+\xd9\xbe`\xbe5\x98Y\xec\xa4H!\xe8\xcc<\xe7\\D2v\xc2\x0e\"\xa6(\xed\xe6)_\x173V\x9c=\xcb\x19-\xe4;:\x85\xf8\x91q(\x9ft#S\xca\xf2H\xe8G\xde\x95j\\\x93\xa5A!}\x9egKY\xc1\x97Z\x08\xe0\xab\xca4\x0d\xd8\\\xf3\x1e\xb7\xacv\x054vg\x10\xef\xdfe,W\n\xe2\xdf\xb9b\x00,V\xfb\xa7\x08]\xa0\xd6\x90\xfc\xd5z\x84\x9d&\xac\xc38[\xadh13\xfb\xc7z\xcbxG\xbf'\xed\xfd^\xfe\xeb\xfd\x9e\x98~\x0f\xfc\xdd\xc6z\xb5\x12\xb4,\x8f\xa0\xd0{\xb5o \xa7\xa4\xd7\xd8\x9a\xbc\x7f\x0dgR\xda\xd4\xefQ\x88\xf8\xc3`\x9cO`\xef\x97\x1e\x0c\x08\x85Q\xbc\xd7\x93S\xef\xa2oru\xbbv\xca \xe9]&\x19oT\xb8\xe37G\xfc\x1eu\x07K%f\x95\x04\xf4\x8a\xddni\xc4\x87\x1c\xe3\xa0!\xa5 \xa5s\x16E4.\xe8\x19\xbcv\xa7Q\xf4d\xf6\xdb\xba\x94\x8a\xe6{\x96\x8cTY|;\xe8\xad\xdf\x00\n\xdf\x89\xc2\x0e\xfbu\x800\xc6I\x1b\xf6\x86\xd7L\xd8I0a\x9a\x9e\x9b3v\xd2>c\xbax0e'\xf5);1K\xa6\xd1\x8b\x994\xd3\xb4YI&\xad1k:\xfbN\xd0\xa4\x8fn\xdbK8q&\xf5v[C\xc1\x10\xc2\xb9;9\xe6+5u\xc5\xed\xb0\x9d~\xb3C\x7fR\\\xa1Zg\xb5i9\xa9\xa6\xa5N/\x8f\xd3\xebI\x00\x94\xd4\x1a\x89\xdd@4\xf5q\xd9.v\x0f)\xec\x04pqS\x15L\xda\xf6\xd9W\xda\x9a[z\x00n\x89\xf0\xd9<\xf5\xd8\xfcH\xc6\xac|'\xf3\xc3\"V\x1b\x8aT\xee^6\xd4[6=Y\xe7\x052X$\x89i\xce\xaf\x03]\x1d9D\xfd\\\xb2\xe2\xec)\xd8\x83\x1f\x16\xb16\x0cw\x1c^\x15\xd0y}\x91\x14\xb1\xe4\xab \xeb\x98\xafzb\xf4g\x1e\xc9\x1aw&\x85\x8b\xda&\xf9*\x11\xc4\xdc\x1bI\x1f\x95\xdb\x10\x92\x13\x80\xe4\x1d\xac)\x8b\x0d\xae\x8d\x9a\xd3pT\xfdhO\xf4\xe0\xbe\xf4\xd97\xcc\x9f\x9f\xf2f--\xde\xbeK\xaa\xbe\xeaU\xfc&\x93\n\xb4\xcf\x9a\xa8\xbb\xb7o\x98\xaa\x000Ue\x07\xa4\x89\xeb8,\x1etW\x9b\x13\x90\\J\xd7\xacM\x15\xb9\xca\xf5\x90\xc2UE,\xe9\xd6\x96S_O\xdfS\xb8q4$]o\xf3\x84\xc0\x8c\xcbp\x0dU\xf3__\x14\x99\xe9?\x0b\x1d\xff\xb1B\x94\xda\x80\xcb\x18v9\xb4\x84\xe7\xc5\xf4\xcf\xf1\x00\x8e\x16\xc6|\x92\xfai\xf1*;\xa3'\x98\xac\xc6\xf9$\x9d\xf7\x16\xb7\xa1H\x7f\x86 \x9cTL1Y\xe8\x1dz\\J\xbez+\xf8*;\xcb\xf4\xf6\x14\x02\xaf\x84\xaf7x\x83\x8f\xf0UfZ\xa0\xe3\xf5\xa4\x95B\xec\xcd\x81\x9a\x03h\xc8\x1d\x89\xc6\xfc\xbc\xa0\xc2n\x8e\x08Z\xf2u \xd5\x10Y\xfa\xcf#A\x84\xe8\xaby\xaa\xc0'\x997\xdc\xeb\xc6:KU\x16Y\xa4\x10\xbf\xa7\x0f\x01Q\xeeD\xe6\x0c\xa9\x9c`\x92\x1dZx\xda\xa1\x81&-4It}\xe1\x00t7P\xb5\xed\xdeQv\xbdB\xe4\xac\x0d\xbb\x0dL\x9a\xc5X\xa1\xb1e\x96\xb6!t\xe3lb\xba\x81\x03\xc7\xf0*\xea\xd2\xec\x1bZ\xaax\xdb\xe6F\x1dr0p\xf7V\x97,\xbdB\x00P_1C\x14\xdc\xefTD\\C\x99\xc7sw\x02W-\xfd\xc6\x10\x1b \xd7\xe5E{\xa3\xd5\xda\xd4\x94\xd17{r\xf8\xd0*r\xbf\xde\xd4\xae\x0d\xacR(\x1e\xd7\xf8\xd9\xe10\xe9\x0fG\xd5\xf5\x8fcm\xbd\xb4h\xaa\xb2\xbb\x17\xdau\xe3{\xffG#\xec\xfd\xfe\x08{\xef#\xec}\x13a\xef\xafE\x98\x92\xd7\x8f\xeb\xc2\xaa\x1de\xa0\x14\x848\xd3\x1b\xbe\xebP\xb6%h&\xb2\xb3>\xdc\x89\x86t\x08\x9cy\xdc<\x11\x9f\x86'\xe60,DP\xa5\xf6\xbaSs\x05o\xf0\x11f{\x87\xea!6\xd0\x04\x93z\xef\xc1M\x81\x7fs\x00th\xfa?\xa9\xdd\x1e(\x12\x0b>v\xde.\x84\xf4\x8b&xK>\xd2\xcbS\x9e\x89Y\xd2<\xe2\xf5O\xe1\xaf\xe3j6\xbat\xf8\xd2\x02<\x1fS\xc4\xac|nC-A\x1bt\xd6\xed\xb6\xa5Fx\xb3)\xaa\xb0L&\x15w\xbb\xd1\x8f<\x92\x04i\x8b \x847\x9b\x1fy\x8d\xe8\xb5\xd5U3\xeb\xa4\xca\xb2\xaf9\x11\x9e\xb6?\xc7p\xd8\x9e\x9c\xd4\x06\x1b\xe6\x8e\xd8<\xe2\xfaF\xeb\xe5\xf7\xef\x9e\xbc~\x81 H\xb3\xcc\xce \x10>O\xb9U\xa9v\xd4w\xaf\xcc\x8dx\xac\xcd\xd4\xdfq.GP\xb3\xfanv\xfa#\x8fD\xca \x82\xe7\xa7\xc9\xd8tBg\xfa=\xc5\x89A\x85\xb0q\xb9\xae+!\xe9\x85\xcc\x04\xcd\xae+\xa3\xcd\xf7\xdaJ\x98K\xba\xad\xbe\n\x1a\x90,\x1d\x8c\xcas&\xa7\x8b\xa8\x88\xcf\x17l\xba\xc0W\xd3\xac\xa4\x9d{\xdf$,-\xe2%\x95\xd9\x8f\xf4\xf2\xb0O\xeb\x1b\xba,\x97^F\xb5\x14\x93\xfe\xbd\xc1H\xbfa\xa0\x1b\xfa6\xc9\xbc\x86j\x1b\xf5\xaa\xa1\x06OMj\xed|\x17\x00\xb4\x0b\x9e\x068a+\xf7\x07\x014\xfd\x9d\xe04O\x10\x1a\x03\xbb\x0bM\x95\x0b6\xdf1\x80f\x1bA\xfd{I\xd6<] J\xdcO\xb2\xf4\x86F\x1e\xbaF\xdc \x82\xfc\x07U\x13\xf5\x02f\xed&\x86$\xae;N\x1c\x1c\xa4)\xdbl\xae;\xc0RE\xb2\xcd\xc6?5\xee\xa7\x19 \xc5\x003\\\xbf\xe2;U$\xfd\x1d'\xcfj\xf9@\x1cv\xcd\xa1\x9a[\x9c\xea-\x0eS\x92w\xbb\xe2\xf1`\xb3\xe1\x8f\xeb\x98i\xe2\xb2\xdb\x15\x8f\x06\xb6\x05ox\xe7\x0bJsO*\x99\x05\xe3\x8f\xc6v'\x1a\x80\xbd\xdf\x01\x18\xebv\x8bG\x83\xcd\x86y\x80\xb5\x1f\"v\xbb\xc5\xe3\xbd\xc02E\x06\xdb\x88\x91\x0c+N\xddP<\xb7 O\xa1\xe6\xb52\xc3)\xe6\xde\xbb;m\xe5g4\x97\xd9{R\xa4\xfd\xe1m\xf3u\x12<\xa4\xa6(Av\xbb\xeew\x01\x17\x86P\x1a\xa0x\x0e\x0d\xdcy\x08\xc1q\xab\x94\x93;\x0f11\x0d\xbe\xd6/\xf3\xc1f\xd7K\x88\xe4\xedt8 \x85\xfa\x17\x13y\xa0\xba)\x0e D\xbf~\x86\xc9o\x0f6\x87vq\x8e\xfb\x05\xe9\xcbI2\x96\xa4\x98l\xf5\xf3\x86B\xed\xeaX*\xc6\xc3\x89\x9a!\xff\xca\x1c\xc8R\xa5\xcdXlo\xbf\xd4\x06\xe5\x1fk*.\xad\xed[d\xb8\xb5\x93Yv2\xa05\xffZ\xc0{/\xc6\xda\x95\xf0\x94\x8ex\xb7\xcb\x15\xaeF\xd0\x17\xf76\x07\xaej\xc1bg\xe6\xe5u\xa0\xa9\xf1\x84G\x1c\xd6\x87\xe8vYl\x0dOO\xb4=`t'\xd2\x04\xb9\xc9\xd6\x92\xe3;\xee\x8d n\x08\xd5, \xd5-\xabX\x03\x9bG\xd9\xe3A\xb7\x1b\xf1j\x0d\xaao\xa1\x08\xd7K{\x94\xc1*\xab`\xda\xb2yT\xf8p\xbc\xbf\x16\x8e\xd2\xc1\xa1W\x80\x05\x03\xbe\x14\x14e\x00\x05\x1c\xcc\x0e\xcc\xfa\xf1\x13\x1f\x95z\xadTp(Y\\Y\xff\xd9\x152\xdcF\x85ye\x90p\xc2\x1c6\x0e\x94\xc6\xea\xd6\xd7\xba\xa4O\xb9\\\xfc\xa2\x88\xe8\xc9\x05-\x0f\x9b\xec\xa6\xdbmY\xea\x87\x11;\x0c\x18\x1f\xbb]_\xb5G+JgI\xb0\x91\xe0\xed\x85H\x06\x0f26{ \xbbv\xf0D\xfc0\xe4\xb2;\xdaM\xfcR;A4\xbdG\xfb\x0c\x87\xec\xd5\xaf=\x86\x882% >\x83\xf5\x13\x96\x82\xe9Z\x95D\xb2\x94\xf7d\xcca\xbbb\x8e\xa2\xd2\xfaE`\x19\xd4\x82\x93\xc4<\xf8t-\xe8c\xb74\xbcg\xb4\xef+E\x00UvZF\x02?v\xbf\x0b|\xc86\x9b,)7\x9b\x1co6\xd72\xe7\x08\x08\xad\xdb=(\xe2\xa9\x14\xf9\x8f\xf4R\xbf\x0b\xd18\x8ci\xe5\xda\x8e\x7f\x9a\x8d\x1a/\xa0\x83\xf0xC\x12\x04\xa9\x88\x148i\xd6\x80\x9d \x14\x00S\xc6\xa0^\x95\x87\xc0\xcc\x02N \x02 \xc1\xe6\xd1\x8c\xc5\xc1\x15\xfdf\xe3\xa5\xb8\x8b\xee\xb6\x8b\xe4\xab-\x11\xe9\xc0\x06\xbf\x85\x83\xaezc\x87Q\x1d&\xff\xa4bZ\xdb\xe7\x86g7\xeb\x1d\xb9\xb4\x98!\xb2\xc28i\x83\xb3\xdb\x8d\x0cjL\x02\x18\xe74\xc10N$z\x93\xd4\x02\x87\xc9\xdf \x89\xc9_\xaf4(\xa6\xcf\xd7G~\xafp\xc3\x13Vs\x05\x9e\xef\xea\xd8\x95x\xbd\xabkW\xe2g\xdd\xb9o\x02\xab\x97\\\xb0\xb0\x05 \x99B\xa1\xd7jU\xa9\x0c=\x03\x80\x81\x1e\xebS\xb9\xc3\xda\xf7x0I\x02\xa7fQ\xa8\x91Y\x92\x87X\xce\x85>E\xb1G+D\x7f\x9f\xd8\xb3)\"\xd2\xa8\xa0\xe7\x9d\xe7\x99\xa4\x18\xde\x10dK\xaa\x96\xbd~\xef\x9du\xbb`\xc3\xfcR\x01\xf3)\xcb#\x86\xb7U\xa7\xeb\x88\x99N\xad\xd0\x9a\xa6e\xc40Y\xa7W\xd0[25\xbdB_\xe6\xebdKV\xe9\xda\x9c\xf4\x18\xf0\xc8\xdc\xa4\x9c\x98\x94\x13%g\xdb\xb4\x9e/\xba\xcb\x7f\x9a\xee\xc2\xac\xee\xb2\"s\xf7\xfcq\x16\xa9/R\xa4km\xaa\xd5Ne\x8bt\xd6\x17\xa3\x85\x01\xe9\"]\xddY\x10\x1e_\xa6\xf3;\x0b\"\xd2\xd9gm\xc6H\xb8\x05\"Y\xea FR\xa6\x9e\xc8\xd4x\xc8\x80<\xc4\xa3A\xb7\xcba\x8d\xdd\xb0\x1f\xdbl\x84\x02\x14\xb6q\xd6\xa0X}\x18\x16\xaa\xbb>\x81\xe9\xebvA9\xd7\x06P\xee\x8d\xc9\xecq\xa9\x84\xac\xea\x90\xf9\x1d\xb6\xef\xb36\x9b\xc2v\xc7<\x12\xadvU\n\xc1\x8a0\x1a\x97%\x9e\xf9q\x84\xaf\xfc\x8d\xf19[\xd1\x17Y\xc9\x8a\xb3n7\xaa/l\xc2\xd2\x92J\x97\xe0;\x1f\xd0\x98\x95/\x0b&Y\x96\xb3\xdf\xe9\xec\xb0^5\xe1\xf1\x85\xa2\x9f\xcbC\x87e\x1e_\xe0G\xf1`\xd8\xedzI\x97\x90\xd4\xac\x1ee\xd1\xbd\xc1m\x1e_\x10\xf8s\x89 \x8f/n\xa7\xf1\xb7\x8a\x1a\xd4_\x9c4\xd8\x10&\xc3\x81\xd2E\xb6\xe4\x13\xdbm\xc6\xef\x1b[K\xd8\x8b]m1A\xdau\xbd2\x19W\xaa*\xad\x8e\xf3\xc2\xbd\x14\x05\x8b&P\xa8\n>\xa3p\x1e\xd70\x9e.*\x17\"Vv\xca\x15\x9d\xb29\xa3\xb3\x8e\xe4\x1d\xe60\xd7y\xab\xfd\xd0\xdc\xfd\x1e\xc2\xe13\x115\x9f\x0bZ\xbb\x94\xa1\xcc\x18_\xda)M\xaf\xac\xe9}2\xf6\xafG\x823j8U\x85\x83Y\xe4T2\xad\x91\xa0 i\xde6jo\x98\xe6\x95\xa6y\xf5\x01\x12}\xe7\x91dH\xef\x99\xe4\xc0p+\x19\x98\xd4\x93zjx\x84\x031\xf0\xc3#\x1bH\xaa\x8859\x18\x90\xfa\xf6G\x15\xa9k\xb5\xaa\x9c\xb7\xa7\x18n\x89\xc4\x01\xba\xc6b\x92\xca\xb1\x98h\xef\x8ep\xbd\xe9{\xcf0\xc3\xa8\xf1a\x8e3\x01l${\xc5\xb5m\x07a$\xf3\x0do\x9d\xb2\xd2\xb8k\x83}:\xde\x92\xf2\x86\xe2\xd5%\xa7\xa9\xa1\x87\x02\xb7\xee\xee!~p;\x8cu\xe4R\xc6\x0br\xe0\xbcl\xa0\x1cXt\x05\x00HKW\xac\xfc)\xb0\xd5H#\x16X\xc6\x10\xff#\xed\x0f \x0f\xb2\x1f\x0d\xc2\x02\x8cp\xd3\xf0.\x13\x90\xb4\xb5[\xb7\xb7u\xac\xb1\x12b\xc9\xc0\xb3?\x06[\xef)\xd3)\xc1\xe9zZ;m\xdfl\xec\xea6+\xc8\x127\xdc\x9f\xa4\x7f\xe5Q`\x80Ih`\xe3\xd8R\x05\xd7\xdb1m\xc0\x9a3\x8d\xb4T\xbb\xae\xd9F\x05E\xb8\xdeS\xbc2;e\xfaM\x9f\x81o\x84m\x14\xec\xb0\xaa{7(\xdb\xa3\xe8i\xbe\x16\x88\x94\x8d\xfe\x8d%ZE\xe8UV} T90\xf3n\x0d\xe4\x8a\x1a\xdb\xd07\xaa%j#\xaa\xd4y\x12\xe4\xc6\xd2J\xb1y\xc2\xca\x9f\xb2\x9f\xea\xcd\xe8\x1a\xf8024\xd4j\xb1\x95\x1e\x0c\xeb\x00\x1a\xeb\xbd<\x96\\m\x81\xae\xafm\xa8\xadn\xd5\xa3\x1b\xd0\x91\x05\xd4\x80!\x11\xf7\xbcT0\x8c\xd2\xc9`\x00\xd4D\x01\xb9\xb2\xe1P\x11\x04\x0cB\xf65\xda\xba\xad\xaa\xeeL;j\x83\xd1V\xcfK\x80~\xf6\xe8\"l\xbd>}\x9e-l\xcb\x9c\x9e4\xd6\xc8\xe5Mk\xe4\xa4m\x8d\x9c\x84k\xe4\xb2\xb9FNnX#'\x8d\n\xff\xfc\x1a9\xd9\x7f\x8d\x9c\xec\\#'\xbb\xd7\xc8IC|TY\x8a\x06\xdd\x1a\x996\xd7\xc8I\xdb\x1a\xd1\xc6v\xd5\x12\x99j{\xbc\x9d+D\x97oY \x9e!as}\x80\xad\x9c\"\xb9)\xdc\xa5\xb7\xac\x90\xa0\xfa\xa0^\xbd2\xc4\xf3d\xcea\xf3\xb8\x1e\xa4\x94=\x9d\x9f\xb3H\x1a{\xfc\x1e\xfc6\xf18\x1c\xb9\xbb\x14=&\x9d\xd4\xb6\xfeds\xfdm\x1bD\x94\x84\x94\xef\xdb\xd6\xe9\x91\xeb6\x8e\xf9\xaaj\xd8&j\xce\xb0ke\x9f\xdc\xb8\xb2\x03\x83f\xdd\x9b^\xc9j\x17\xd3\xf3\xbe\x0d\x7f\xbb\xb9\x8f\xb0\xf9\x06\xd5y\x16\xd3^\"\xcd\xa6\x8b\xf4\xea\" \xe4w:84\x1epA\xfac=\x93\xc1~\xc5\xa5T*\xd4!\xb8\xc5Yoj\xdb\x80\xda\xd5\xb6\xb4\x0b\xb6\xc6~\xb3\xd6\xdaq\xd1\xd4\xc0\xbc\x86\xb7\xc4\x10\x15xAW\xe4g\xf78V\x1f\xbe\xd6\x93\xe1\x92\x8d\xe9$**g\xa6<+\x8dR\xae\x16\xe6\x0e\x0b\xe4z\xd1Wu\xbb\xe1v&b\xcf\x1d\x8d\xc5D\xbb5\x0d\xbc\xdd\x0b\xf9\xc6Vj\xc1\xa06\xde\x8e>\x05\xfe\\\xed\xefA:\xa7p\xdd\xe5gj[>\x98f8\xde\x1cW^\xe6\xbe\x0ev\xa3\xbcq\x84\x7f#\xf9\xde,\xfcv\xa8\x10u\x91x}1#(w\xaf\xc3\x1dL\xb8\xb6:\xaf/\xb5s\xcd\xd6\xd1S\xf0\x82\xee\x85\x1d[\xd0\x12\x04Y\xe9\x1f\xda=\x98\x0c\xc0\xf9x\xe0%kw[\x97~#${A\x81\xe0\xa6\xf6S\xe8\xe1g\xf6\x08>9\xd7\xa8q\x07\xd0-\x04w\xccW\xfd\xe6Rl\x0c\xab\xa5&\x9c\x0e\xb7,\xcd\x9b\x96v;\x10\xed\xab|G\xb7u\x94\xcch)\x05\xbf\xbciyj\x0e\xe19U\x92\xbf4&\xa9%\xed\xa4\xad\x9cV\xb3\x9ae=\xf5K\xef\x19\xdf\x96\xf0\xc0\x1c-\xa30`B\xab\x0e\xdf\xaa\xb3\xb4\x96\x04\xcdp\xa7\xcaXe8\x86=\xac#\xad\x06^\xd3Q\xd5\xf1\x1f\x1b\x8f\xa6=\x19\xa5[\"m\xc0\"o|\xf4B\xd2bVb\xed\xe7\x10\xbe\xc5y\xcd\x83\xca\x9f\xaa'\x8f\xab>\xcc\xb9\xb5\x8bStmv\xc5\n6\x9b\x819])J}\xd2\xf0B3#\xaf\xae&nx\xd73\xe6+\x05D\xb9\xd9\\YY\xe6\xf5a[m\xf6ns\xa2\x01\xa1x\xbbs\xa8;^\x82V\xb0\x19\xad \xdaU\xfb\x17\x96\xe7?\x17\xcb\xd6\xc7\xa7\xa1\xbe\xe1[\xf5\x06\xfe\xd5\x07\xde\xad\xba\xf2}a)Bt\xbb\x86\xf16\x87V\xa9L\x18\x13V\x0bN\xc5\xe2\xefEv\xa6\xefo\x15O\xa9\xe7\x7f`\x90\xde\xacx\xc4\xfc\xc7@+\xab\xd5\xbe\x9b\x80\x0e\xea\x15\xf0\x961\xc0\xe5(vK\xa4\x12yr\xd7\xfb\xc1\xbf\xf9\xf1\x0f\xea\xbd~O\xe3g:\xd8\x91\xd0\xf0\xb6\x072(<-\xec4\x13\xe5a\xbd\x1d\xfd\xaa\xe9\x95\x8e\xe9y\xe5\"\x00\xa3l-9\"\xea[\x0f\xe8)]d\x9f\x18\x17\x895\xffEdY\xbe1\xc5!\xdaX\x82\xfa\xcb\xb2\xaf\xea-\x98\xdaFU\xa1\xd0\xd0vK\xaaI\xc4I\x1d\x86cF\xbcu\xa9\x1fH\xc6\xd1\xd5V\xfb\x1f\xb9z\xd6R\xff k\x8f\xa2\xa0\x03\xc0\xaa\x05\x92\x8e'#m\xc3\xa5$\xa6\xa0\xf3\xa8\x8053\xa21\xbd`\xf2\x9dJ\xa8\xce\xc5\xb5)\xa8\x1f\x9cF\xe0\x11{\x94\xd9\x97iY\xaf\x87m\xd92\x15\xe3l\xcc&\x13\x92\xa7\x032\x0dj\x95N*\xa8i\xcc\x1fMm\x03\xb9}\xbfy\x9dN\xc7\xf9\x84\xac\xd2r\xbc\x9e\x909\xac\xf8\xa5\x1aD\xcb\xf0\xdb1\xb2\xc2\xe4j!\xe5\xeaoT\x9c&\xeb\xad\x8d\xea\xa2\x03\x10\x8djh\xd0\xa1(\xe6x\xbb%\xcf\x9a8\xab!\xc8\xd4f\xb3\xd4\x9e_\xea\xb3\xdd\x97\xb3\xf4L\xf6L\x9aZ\xb4\xa9\x80?:aF\xcb\xa9`\xc0\x96R\xe1\x7fm6J\xf8d+\xf6#\xbdDij*Y\xfdD\xa7\xa7W\x85Z2\x02b7\x13V$\"f\xc5\x16\x13\xa4F\xd8\xac\xa4R\xd3\xabr\xba\xa0PI\xff \xa74\x13T|\xcf\xc52\x93\x89\x88\xfdO\xd5\x14_\xd1\xe2\xe5\xec\x19/\n:\x95\xcd6uvz5\xd5\x05~\x16y\"\xe2\xa0\xce\xcf\"\x87v\xb2\xb5\\\xdc\xf5\x1b\x10J\xcb;/mK\xf0\x91\x9aD\xbc%/Y\xab\x01a\xb9\xa2\xd3\x8a5\x95J\xce\xd5\x92\x14\xe2\xd7\x82\xc9\xcb#\x18 p{{L\x03 \x01\xd1I\xb5/XE\x811\xbb\xdd\xf1\xd1\xf3\xce3\x06W\xdbr\\L\xb4k\xc1\xdb \x08\x92\xe35\xd4r\xeb\x0fS\xc5\xc4\xa9H\xaf\xb6.\xc8_\xc0\xb0K\xdad\xf1~%\xe2\x17\x87(\xd1M\xf5\xdd\x96wQ\xaf\xbc\x84\xc3zBo\x98\x0c\xc3V\xd5\x1a\xfe\xbcF+\x99hS\xfa\xc3\x16H\xe9,m\xd1\xe7\x0e\xeau\xb7\x84n#L\xde\xedBe#\x16I\x15;\xa8\xe8v\xa3\x02\xd6\xfd%\x8d\xae\xdc\xe9\x80\x11\xecia\xa4\xba\xa0\xf3g\x06\xa5\xaa\xec[s\xffpzYWt\x80\xac\xc0\x92\x00\xc8\x08_\xa1\xaf\xb4i\xc9t\x91\x89'2\x1a\xc0c\xef)\xfa\n\xf5\x143Mgt\xcag\xf4\xe7w/\xab\xc8\xa3\x14\x8f\xa4\xb8\xbc\x92\xe9{\x1a\x9fQiZR\x9a\xc2\x14\xd4X\x8a\xaf,%HE\x8b[s@\xf2)\xcb\x19(\x056\x0c\xceJ\xd0\x95\xe0SZ\x96.I\xb5d#\xbb-\xa98Sb\xaf\x84!\x1dQi\xbc\x93%=4\x17\xdc9\x9f\x02\xe3\x8a\x17JX\"4j\xdc\xa2J\xbb\xdaT\xc3?\x8b\xdc\xea\xab\x0c(\x93\xe7\x9f(\x8e8\x88\xd5\x16\xda\xb5\x00\x07\x08\xf4\xafo)\xac\xfcl\xc5\x9a\x97\xaf\xf6\x92\xa7\xb3\\\x97\xb2sJ;\xd0X\xe7\xcd\x8a\x16O\xde\xbe\xec\xdc\x8b\x07\xf1\xa0\x03\xb1J@\xf7E8\xa4\xae\n5\xf5\xce\x0f\xfc\xf9\x8f\x0b\xfed-\xd5\xff\x16\x8a1\xb0b\xceup\x04\x9f]\xec\xe6\x14\x15\x97\x81w\x01k\xdc\x18\x0cs\xdfU&*\x15\x05H\x82lK\xfdj\x0c%\xc2\xdd\xee\xce\nG\xa6\xc2s\xbf\xbc\xbd\x18G\xbf^\xdc\x9b\x1e\xf4\xfb\x9dw\xf49\x9f\xf6_\x16j\x92\x92\xce#\xd4k\xef\xa8\x87\x1ew\xfa\xfd_/\xeeQ4j\x02\xbfCr\xa9\xd9yG\xcf^\\\xac\"\x14\xfd\xf7\xe6\xd7_\x0b\xfc\xd5\xaf\xbf\x96\x87\xa8'{\xe8\xd7_\xcb\xdb\xbf\xfeZ \x82\x18\xc2\x84\x87\x85\xa3_\x7f-6\xff\x0d\xa5o\xbb\xd2\x90\xf85\x8e\x0e\x93\x18\xda\xba}\x88U\xd2W\x9b\xaf\xb1nE\xaf2\x884\xe3\xec\x82:\x8a\xeeVy6\xa5\x11'\xe8\xeb\xe1\xaf\xc5\xaf\x05\xea\x15=\xf4k\xf1\xf5}\x84\x8d\xb9\x0f\x02\x03\xac\xcd\x86\xc6j\xc3\xf1\x0b\x93\x8b\x08AI|\x88P\x12\xa6\xaa\xb4_\x0b\x94\xe8\x02F\xabE\xa8G{\xac\x87\xbe\xeahpu/[5\x0f\x8aVh!\x99^9`\xccX\xe3\xc1\xac\xac3\x0d\xcb\xd7\x94\x14tf\x934\xfeZ\xd0y\xb7kw`\xf0Y#c\xe0\xfe\x7f\xabsJ\xcb\x7f\x1bL\xab\xc9\xb5\x1b\xfb\xb4\x85>\xbe\xa7\xf3\x88b\xcb\xa4\xabv\xa0N\xd4\n\nh-5\xab\x8c\xa6)\xc6\xc1\xd0];\xeb>|\xd3\x0d\xcdNm\xf3\xc4\x84\x8d\xf2\xbb7B\xc1\x16Q\x14\xd0^\xa6j\xa4\xdb=p\xc1\x00\x8d\x9c\xd6\xea\x9b\xd2\xde\nr\x85.\xfaS&\xa6\xeb<\x13}A\xe7(9\x18l\xab\x865\x98\x05\xb6\x96HR\xebXFA\xb3\\X%Vz,\xe1\x96\xd9\x15UX\xde\x00W\xe5\"\xcb\xf9\xf9\xf3\x1a\xc6\xaa]\x82\x8f\xa0\xc3&f\x92Zs\xc0\xc8\x9f\xe4\xf9\x9bymeZ\x0b*\xd6\xb4\x8c\xd1rOMG-\xb2\x9e\x91\x05\x98H\xa5Q\x81\xa9\x80W&2[\xc1\x05g\xa5|S\xd07s0\xca\x8b3\xd5\xbb[\x83#m\x1f\xb7\xb7\x12M1\xb9\x82\x16\x8c\xd10\xd1\xdbs%\x9b\x92\xf1\x84H&s\x9a\xd0\x18\xfen6\xd1ZF\x12\x1f\xbe\xa7\xf1iV\x82mN$\xad\xb91\xde\xda\xb8\x80\x07i\x9a\xc5+\x17\x81\xb2\xdbE\x1c\xfa\xaedW\x98\x1d\xf9\x9fm\xa0_m\x89_\x04[\xac@GL\xd2e{\x1f&'2\xbfv\xb6\x0c\xb9\xb8\xda\x04\x95\xe9\x80\xe4)\xd5\x98\xad\xa9\x94\xbe\x9eq\x10\xc1\xd9\x8c\xe6\x15\"^d\xa5%\x13G\xb4\xccP,%`\x16\xa7\xb37\x1b\x83\xeb\xca\xed&\xad\xb4\x9b\xb4i\x9a\x8f\xcb Y\xa7S\x00\x9c\xac\xd2\xa9\xd6\xbc3\xb0\xb1\x04\xed\xff MWf\x1b\xe0\xcdJ-\xc1\x96\x98\xf2\xa2\xe49\x8d\xcf3QD\xb7^\x16J\x80g\x92\x9d\xe6\xb4\xa3\n\x94\x1dVt\x00\xed\x9dLv\xd0\xad\x9e\xec\xddB\x89\xfa\xa1[\xec\xddB\x10\x1a\x1c\xdd\xea\xadl\xc2-\x8f\x1al7\x064\xf3\x1d\x14\xf0\xc8\xc8\xce\xf7\x1cz\xf5i\xd0\xffPz\x1e \xea\xf9\xb9\xe3\xf9\xe4\xb0\xf6\x9dV*\x9e\x9eW\xb3\xc0\xc6\xb5rA\xa3\xe3\xf9d\xb2%\xb2\x87\xeeTiwPo\x8e\x93z\xeb\xb5Z#olu\x827\x7fa\x046m7p\x90OL+\x06\x18\xf8\x8dp\x80AA\xff\xb1f\x82\xce\xa0#\xfb\x91z\xbf\x81\x1c\x95\xaa4\xcddT\x95\xc7\x98|\x06cZa\x92a\xb2\xd6\xdc\xc1Q\xba\xde\xc6\xaf=\xb6\x98i\xde\xd4\xed\xaee\xb4\xae\x94\xdd,\xe4\xd3sV\xcc\x9eS\xc1>\xd5\xb65ZIT\xe2(u\xbat\xa0c\xb6\xa5\x9a%\xa0w\xa3\x81Ea\xd1&\xac\xc6b\xe2qF\xae\xd9J\xb7k~\x00h\xad\xa17+\x1f:\xc3b\xa8\x0b>\xa9S\xf0\xe3\xfep\x8b1D\xc9@_\xdd\xa9\x00\xbcc\x00\xbc\x83zb\x92\x8e\xf9\x18]\xf4gL)\x91KVd\x92\x9b\x97y\xd0d\xb3\x11\x13\x872\xd9\xd4Q\xde\x02\xe2CE\xdd\x0e\xd8:\xda\x85lh$\x1f\x15\x96\x8dH\xcbFDZ\x8c\xa5\xb1\x03\xb4\xc2Zs+\xb1\xc55\x15\xcd\x13o-3\xd5\x10\xa6\xb4.\xff\\L\x7f\x9bE\x9a\xde\x8b\n\x1e\n\xbe~:\xd6;+\xe1o$b\xae:\xc6Vt\x17q a@\x07JLf\xee\x93\xf6\x86\x96G_\x01\"\x93+\xa8\x97\x98\xfa\xed\"\xa3He\xcb\xba\xf3\x88\xbf\\ \x9a\xcd\x00\x92\x12G\x8c\x8c\xe9\x84dJ\xaa\xba\x13LoJ\x94\xb2Sl\xc1$wKX:\x18\xb1\n\xef\xcc\xe2=KE\xc4@\xa3jJG\x8b\xb1,\x86!\xf8\xea\x92\xda\xd0\xff\xb4\xf3`1\xd8\x9d\x83u\x8c\xd9\x7f\x98\xe8\xcbV\xcb,\xe6z\xab\xf1JF^Q{\x1dv!\xa9(\xb2\xfc9\x9f\x1a\x96\xa4\xb3\xf5R\xf3suyc\xb5\xf0\x12X\xd8k\x06\x8fw\xcd\x8e\xa4XO\xe5ZP\xbf\x83\xe0\x10\x01\xbb\xe3;\x7fo\x08`\xbdd-`\x9d\xd3\xd3\x05\xe7\x1fu\x89'A \x12\x8c\x18\xe0T\xcb\xca\xd6\x80\x90\x0c\xafn8\x05\xd1\x88\x811(\xddJ}e.\xfc\x9c\xc1\xcb*+ft\xe6\x12\xd8,\x951\x9bm6\xb4\x87\xee\xa0\xde\x8aF\x12\x8e\x08\xb1w\x08i\x0e\x15\n\xb8\xad3k}\x95g\x97J?Sk\\\xd7\xd0\x85r\xfa\x89\xe6\xa9\xd4\x7f7\x9ba\xf3\xe8R66\xcb\xe6\xf0FC>\x12J\xd7\xc9]\\\xa5z\xf5w\x10\x1e\xf4\x98^\xc8\xa7t\xce\x05\xfd!\x9bA\\\xfcZ9\"\xc6\x83\x89\x1e v\x88\x85\x0b\xd26\x02 )\x02\x9d \xbe\xd6\xc1\xba-\x0e\xdce\xaf\xc3\xdf\xa0\xf5\xdc\x03\xd0\xddv\xb3c\xe7aPg\x82\xaa\xbdFi\x0d\xab\x91\x0e\xfa\xc3\x14u\xf7\xbd\x15 a\x8bS\x9e\xe7\xd9\xaa\x0c 0\x03:\xb8v@\xc3\xc6\xae\xef\xc6\xc1\x0c\xb7\xfei\xbayy\x8e\xe2h\xfc\x94\xc6\xc5\xc4o\x8d ]\x07\xb9\xb8\xea{W\xb4\x10\xeeQu\xde\xd6g&)2\xd7I{W\xd4}~v5\x8b\xfb\xcf\xaeX\xe1\xdaV\x05&\xf9z\xf7\x01rE|!\xab\xaa*\xf8\xe7\xa2\xfa\x98\x91+\xae\xc0R8z<\xce\xce\xe0\x1c\xe4\x8d\xbb\xc1\x88\xdc\xc6\xa0\xc3\xfd\xad\x00'T\xed\x15_g\xe2\xe3\x8c\x9f\x17\xc0\"#\xd1z\xeceoH\x86\xa4\xc0\x98\x08\xc5*dv\xf6gE|%\x9at\xbb\xf5\x14\xb3\xcc\x1f\x0f\x0e\x1b=j\x10uA\xdd\xa5\xb4\xad\xd7[!Lu\x97\xech\xc2\xd5f\xb6\xbe\xf9\xa3@\xe4\xdb\x96\xc1\xed\xd8i\x9b\x83-\x19 \xac\xd8\x85\xc8\xa6\xf2\x07\n\xcc\xa7\x8c\xa8\x1a=\x1eq\xc7\xb7\xc0\x89\xdf\xc3\x8eZn{\xb1\xb1\x80\x87\xf1\x8a\x87\x99\xe3\xad\xba\xcc\x0cT9\xb7\xf7\x1fb\"kJ\x82}}\xc8\x9c\xcf\xbdb\x112\x97N\x88HB\xbd\xa9\x9f\xd1\x95\\(6\xe9\xd4}nd\n\x8b\xb8M%Eo\x881i=\xb1l\x92\xc5\xce#\xcfH\xa4p\x12\x85\x1b\xe2\x9fx\xd1\xa7\x17\xac\x94\xac8\xeb\xc8\xecLmta\xd3\xcb\xcaN6\x9bi\x0f'\xb9\xa0\x1d\xc0\x86\xcae@\x7fz\x1b\x0c\x9cIm\xe5w\xdf\xb7*]p\xad\x13V\x0e\xb52;CdM\xb4\xab\xde\xca\xe0vH\x90\x12HkM\xdf\xab\xe6\x11J\xa8\xae\xb6\xf0\xa0u\x83\xceV\xc4\xb4\xde\x1b:+\xf03*+\x1eggoE\xd6AQL\xcc\xceo\x85\xf5\xe3\x1a\xb0m\xff\x9f\x82\xc60\xa4\x1aH\xa3\xd2gh%\x99+]\xdc\xccwih\xac\xd6V\x83s\x11\x1d\x84\n8\x83\x7fYm\xdc\x98uk\xe3\x89w=?\x9e\x90,\x1d\x902(?\xca\x1e\xd9:\xa3\xccNx\x9e\x96\xe3\x0c\xde\xf2\xb07\xeb9\x91\x84\xe3\xd1\xd4\xcc\xb0 L#u\xea\xd6\x06\xf3\xd6F(}vl\x01a\xe7<\x00\xeb\x13\xb5\x02`\x07X<\xb2\xfa\xe1\xa8\xb0\xc0\xb0T\x8c\x8b\xc9H\x8e5\xbdN\xf6?\x07`\x98\\U#M\xc6\x93m\xe0\xc9N\x15\x97u{\xf0t@Xp%\xac\x18\xe7#f\xc1\x11\x9e\xf5B\x96\xb2\xb1P<\x08B#\xfe\x11\x16\x0c+@\xc1h\xde\xed\xceM\xd9\xcd&\x9a\xa7c\x84&\xd5\xd9\xe2,\x1d\x90E:\x1f\xcd\x1e-l\x833\xdb\xe02]\x8cg\x13r\x96\xca\xf1\xd2{v\xe5\xac\xdb\x8d\xce\x8c}\xc0\x92\x84\xb8 \xaahz\x86\xc9\x19\x08]\x9115wJ\xe9?k\x18?\xec\x8d\xf2\x15&W\xabL.\xc0\x88'#\xc6;>y\xaf\xef\xdbXN\xa31R\xf9%\"\x19YO0\xa9\xac0\x88J\x7f\x9b\x89lI%\x15e\x02\xda\xb1\xf9P\xc4\x01\xf9GT|\xd2\x99\xa5\xfeE \xb4\x8e\xdaG%\x07\x07fWk\xb9uDc\xe8\x0b\x13\x1a\xee\xb7\xba\xdd,\xaa%\x81 \xae4;\xd8\xe7,E\xb3Lf}#G\xfbl\x86\xc8\xf7\xfb\xdcS\x13p%$zc\xea{\x85Xs\x90\x05+%\x17\x97v\xaf\xa2Ug\xb5\xc2_\xce.\xd2\xbeu\xf1`3\xfa4\x13oV\xb4\xf0\xf6s\xdaF\xebM\x9b5o\xb5\xaa(DP$EZk{\x14\xf5\x87:\x8e\x12\xc5\xdd\xeeATq\x04\xe6\xc3aM\xc1\xfc\xb4\xe6\xbb\xbb\xce\xdfU3\x1a\xf0\xab0\x82\x7fOB\xbf\xb1\xcf\xb6\xf7t\xaf\xe96@\x97\xa9\xfc$\xcfm\xd5\xd2\xd5m]\xf2'iC\\\xb5\xbd\x80\xf7\xc3\xf1\xebW5O#\x1ff\xff\xad>\xaf\xe8a\xcb\xe8\x9c#R\x15=\xb1Y\xaa\xad\xa2\xf7\xd0@2\xa8\x9b\x1b\x06;\xa9:?\xb7\xe6\x85\x95\x01\xe5u\xef\x12\xf8Dl\x91\xa4\xbb\xad3\xcdp\x0b\xb6\xb3W\xa3\xab\\\xdb\xab3Ez<8\xf4\xbd9qR\xbd\xda'1~\x94^\x0b\xdd\x8d\x9am\xa88Y\x9a\xc9f\xb3&\xa1yQ\x0c\x9a\xfa\x8c!\xb3\xb6Zu \x02\x91\x11@R\xf9\xddE\xf5r\xfb/P\xfd\xf1\xf4\xf2\xda\xcch@\x86\xfd\xeb0W\x97R!4\xd5v\xa2\x05\x93\x05\x05k\xf6\x8a\xbbT\xe2\xb1\xd6\xa8\xbfj\xfdU\xf7\xa9r?s\xfc\xa9\xdf``\x8f\x8d\xdb\xde\xcdL\xcd\xcc\xaa\xfa\x13L\xcc\x0e9\xf07\xcd=\xc9\xb9\x8c\x86\x83\x01\xae \x03\x1fh_\x0e\xc0=\xcc\xcf78v\x944\x13\xd3\xc5/\\|lq\xb8\x03\x03T\x8a\xa5\xb8\xbc\xa2i\x11\xdd\x1b\xde\xb7\xd6\xff\x12C\xca\xf0\xfew\xd8\xbew\xa0\xc3\xcd\xd5S-\x85*\x19\xa1\x80j\x93\x0c`\xcaS?\x15\xf6\x97\x01)\x82\x0c\xda\x1ec\xa1\xba:\xa6f7a\x82\x97\xe9;\x7f\xda8\xf5\x06\xcd\x8d\x14J\x83S\x9d\x83'\xcc\xa8\xa8\xbc\x14<\xd4\xc43^\xd0:s\xc9f;\x1e\xee\x0dj\x02\x08D\x9a\xbb\xa1\x9b\xa5OPYR\x01vJN\xe1\n\x81\xd2M44E(\xd3v\xe8\xd1lB\x7f\xc0\x9b\xed\xe1\x86\xf6/GM\xb1\xe3\xfb\xc9f\xe7\x99\xa2a\xac=q\xc3\xfb\xca\xe8\xda\x9ag\x8a\x1fe\x92\xdb\xba-\x07D\xe3\xbb-\xa3U0Ex\xa2f\xa9\xce\x0cr\x9e\x85{\xcffmUD\x0fS-\x0d\xb7\x10\x9e\x06o\xbe\xbe\xcaNiN\x8a\xb4\xda\x9c\x1d\x96<\x91p\xa8\xff\\\xf0\xd5\x8c\x9f\x17$\xab\xb2\xc5a\xc6\x13ai|h\x9cE\xa4wq\xd1\xf0\xac,\xb4_\xa6+7\x1eL\xb4\xd9Q\xd3\x012\xdb\xe5\xffH\xae\xf4\xd0\xcc\x16\xd4z@~\xcd\xc8/\x8c\xfc\x83\xa9%\xf8\xe0\x1bL~`\xe99\x8d\xbef\x9bM\xf4\xf5\x9e>\xdcY\xe7J\xfd\xe9t$\xbd\x90}\xc3\x82\xc0k\xbb\xe0\x05\x1d\xe9\xbc)\xcf\xb9H:\x88\xa0\xd1\xaf\x85N\xea&\xc6(\xde\xd6\xaf\x95R \xdb\xaa0\xbc\x83r}Q\xf8\xc7y\x8f\xff\xc7\xc1\x85\xf1\x8e\xc7\x89\xe4\x82.\x81\xff\xf03\x91\xad\x16\x97q\xce\x8a\x8fe\x0cMm?\xb3\x92\x81\xfds\xab\xc1(\xb6\x18\x93\xbf\xb1\xf4\x88F\xbfp\x1c\xfd\xa2\x88\xe0\x97\xbd\x88@\x0dq\xce\x0b\xd9\x9fgK\x96_V\xc3\x87\xc4s\xfd\x8c\x87K\xccYA\xfb\x8b \x11\xbc\xfd-\x12\xbbI\x9e\x95\xb2\x0f\xde\xba\x15bu\xcc\x92\xbe\x0e\xb4\x96t\x065\xf4\xaa?\x88\xa0\xda\x8f\xc5\xd06PMHc\x86L\xcb\x92\xafl\xb3\xa6\xbd\xc5\xdd\x1bk\x9b\x92S>\xa3\xb6l\xa3\xfd\xd3l\xfaQ\xc9\x99b\xd6o!\xb7V\xbcu::~S_d3\xb6.\x93\xce\xdd\xd5E\x90\x91t\x86\xab\x8bN\xc9s6\xeb\x88\xb3\xd3,\xba\xf7-\xe9<\x18\x90\xce\x83\x87\xa43\x88\x87\xd8\x946\x81\xa8\x92\xce@\xb5\xed\x1a\x81NK\xf6;\xf5\xbbl\x99,\x9dq\xce\xc5\xac\x0f\xf7\x10I\x07\xfe\xf4U\x8a?\xfe\x95p\xc3\xdf1\x9e\xf3\x05\x93\xb4_\xae\xb2)MnF\x8d\x87G\xa8X\x1f\x8d?\x16\xebi\xde\xbfH:\xd9Zr\x93\x1cPY\xc1\xc52\xcb\xdbQ;X]|.f-\x80\xd5\xa4\xb7\x0dE\x8a\xac(\xf5\xd1\xd1\xe8\xd7\x90=\xf8\x83\xf2'\xc9\xb5\xadV\xc1)\x98\xce\x90*!\x9bK\x9f\xd5\xa8\xd6\xe0F!\xe0hfI\x84+\x03\xc2\x16\xfdc\xcd\xa5\x03X\x13}\xb5\x8ej\xcbkH\x97M\n\x1a>pH7\xe3\xf8\xea\x9bo\xbe \xb1\nO\x90v\xee;\x14~5\x9b\x05\x94\xc2\x96g\x15\x08\x17}\xfd6ig8\x18\xfc\xc9\xb5s\xa1(\x13\xba4\xe3\xeb\x9f\xf2\x0b\xbf\x8du\x0eH\xe1\xb9m\xc9\xc0h:\xbf\xeb`\xdfk\x90:k\x9d\x13\xaf\xc1\x9d\xec\xa6\x8d[\x84\xa8\x86'\xa2l;6&\x91\x9e\x00\xbb\x14\x1acv\xc1\x12|\x02\xf6W]@\xbf~\xc6GJW\xfd,\xaf\x91\xb6=\xbeT\x18\xd4\xbf\xc2|\xb5\x0c\x1d\xc1\xd5\x075\x8c\x1f\xd4\x10X!\xcce\x05\x83\x95\x8e(\x9b\x8b\xe0\xab\xf9|\x1ev\xae;\xa9\x08d:\x9dz\xb2\xb7\x90\x0b\xcd\xf9\xa3\xbb\x05\xbenu5%\xac\x07\xd0\x82x\x1f\xb3\x1a\x99$\x9d\x87\xab\x8b\xce\xf0\xde5,\xb5N\xb5\xb6\xd9@\xa5\xc8rvV$\x1dEt\xa6\xa1\x80\x83\x9e\xf20_u\xc5\xcc\xb6\x05{\x8e9\x17K\xb3\xfdP\xd0\xbe\x8f\xfa\x0f\x06\x7f\xb2\xfb\x96\xda\xee\xe7\xbe\xa9X\xa9\xf9\xf1=\xba\xec\x0c\xe2\x87F\xd3\xf3U\x9d)-$\x15\x06\xbe\x8b\xbe~\xef\x1cvP\xf0\xbf\x07\xe6/l\x9b\xee\x0e\xee\x93N\xf5\x0f\xec\x9bZ&\xe1\x0b\xcanB\x99\xa2L\xe1(\xf3GE\x99?\xeeI\x99\xadh\xb2\x8a\xf9`\xa0u\xaa\x9a~\x04i\xde\xf9\xc0 \xfe\xd6*\xfd\xfe\x1e\xbeSp%\x14\xfdI\xfd\x1f\xeaM\xe1\x83;|\xfcE\xe1\xe3/{\xe2c\x07\xd9\x19\xf2\xd2\x00\xda#\x83A@S}\xbb\xf5m\xa5)\x9d\xe8\xca\x04[a\xbd\xa1\xf0\xce\x02:\xb5bB\xf7wc9P\x9d\xcd\xf6d>\x9f\x9b\xec\x9b\x96\xd4\xff\xee\xb1\xa9\xb9fn\xae\xff\xae\xe6\xfa\xef\x7f\xc8\\;\x1eaQr\xd7\xb1\x16\x8b\x15\x93\xb2'\x82?\xa7A5\xaa\xec?Z[\xe0+\x13g\x1aB\xechU\xc1D \xde\xa5\x03\xc8Lk\x7f\x82\xc8n\xb7a\x06\x90\xb5\xc7\x93\x16&\xbdhF\x94\xe6\xd9\x8eP\xd3\xccd\xb4\x84\x8d&e\x96\xb6\x19\x0b\xda7\xc9\xba\xdd\xf0\xed\xc1g|\xb9\xcc\x8a\xd9\x91~%\x98\xcen\xca\x8f\xd0\x94\xaf.\x11&y\xb6\xd3\xce\xa82\xf9a\xa5\xab\xd8b\\R\x82;\xb2~?\xde\x0c\xadi\x0fD\x8a\x91\x83\xe8\x94\xcf.\x0d*\x8e\xe9\x85|\xa7\xb4\xdf\xc3(\x92\xe9\xb5%\"\x8c\xe3%\xffD\x8f\xb9\xe9D\xe5\x80\xd1\x8f\xe9;\xc28q-\xe8\xcaP\xb1\xdb5\x01I\xcf\xa8\xd4\xd6f\xda[\xbeH[\xd2#L|@\xbcfT\xff\xba\xa3\x9f\xf8\x8c>\xd3\x07z\x10\x1b\xb5\xa8LC\xa1d \xcf`g\xb3\x99\xae'\xb5\xd5\xcb\x8c\xea\xda>\x06\xd9\xd3-\xe9\xe4;U:ztg\xc6>=FU\x80\x80y\x16\xb5\xc5\xbb<\xa4\xde\xdb/\xce\x1d\xebN\xf7\xce\x19A\xddl\xb9\x1a!/\x15A\xea?\xd6\\\x06\xc9\x8f 9\x0f\x13\x1fC\xe2\x99JL\x90\x07\xc7\xcc\x87\xa3\xb6\xca(6q\xe5\x86\xa4?\xf4\x82\x1b,2\xdfo\xf5\xd6\xa3r\x95\x15\x16=:2\xe6\xe3[=\x18`\x0f=\xba\xa3r\xfd\x91/\xbd\x1e\xc3\xba\x92\x7f\xa4Eg\xa5\n\xaeu\xa4\xe4\xc7\xb7z\xb4\xad\x0d\x83g\xc3{\x0c\xf7Pz\xa07o\xeb\xba\x93\xb3\xc7h\xa4\x13\xd6\xf9c\x04\x03\x99 L\xf8f\x13\x89\x14\x86\xd5\x99 \xec\xe4\x8a\xd8\xea\x95\xb0\xce\xfa\xfdV4?\xcf\xa4\x9d\x9c[\xe8VO\xd1\xfd\xcb\xa37\x96\xf4{\xb7\xd0-;[FJ\xe0\xa4\x8a\x15\x98\x16\xff\xec\x04\xf9\x914(&<\xb5!A\x08\xdbk\xf2\xae>k\xf2\xf8\xe9o\xf5\xa9\xcb\xd4\xd4\x95\xe9`T>\xe2UT\xa1<\x15\xe3r2\xca\xd4\xdc\xb1\xfd\xe6\x0e\x8a\xf9\x80\x98\xe8\xab\x97\x9d\x00m\x8f\x11\xac\xc5\\\xa1\xd4\x00\x98t\xa06\xcc|\x0e3_>\xe20\xf3\xac\x07SI\x90\xda\xd7\xd6f\x7f\xcb\xc2\xd9\xdf\"L\xb2\xcd&bP\xe5\xaa\xb3\xf5f\x9f\x05\xb3\x8f\x8a\xf5\xf2\x94\n=oz\xca\xa9\x9d\\\x93\x85\x93J\x19H\x8b\xc3;\xff\x1d-\xa4\\m\xd4?%\xfe\xff\xd9{\xd3\xec\xb6\x8d\xadQ\xf4\xff\x1d\x05\x84$4pT\x84\xc1N\x0dth=Y\xb2c%jlK\xb6c+z^E\xb0HB\x02\x01\x1a(J\xa2)\xaeu\x07\xf1\xd6z3\xb8\x13y3\xb9#y\xabZ\x14:\nT\x9c\x1c\x7f\xdfu\xce\xb1H\x02\xd5\xee\xda\xb5k\xd7n\x9d?\x9f\xfe\xf9\xf4\xe2\xff\xfe3\xbe\\\xff\xf9\xa9\x08\xee\x9e\xe0N\x16O\xd6\x9f\xfc\x1bj\xa3\x08\x0d\xa8\x0b{\xc0s)\x10j$\x08\x13%z\x948\xc1g\xfazq+N\x82\x9b\xb4x1F\xf6\xc2\xd0G0\xd0\xb9\x9bpfr\xe2\xadIX)\xb2\xcc3\x08n \xe8Ap\x07\xbb\xb7\xc8\x98\x11\xf8\xcd`5\x81\x81\x95\x9c<\xda3M\xfa\xd1F9=\xa24\xb6X)\x0f\xb8\x94-\xff\x1d4\xc1\xe9wm\xdf\xa1X\x83\xfa0\x18\x96\x1d1\xefC\x82\x19\xcb)\xe7\x1d\xa6 \x0d\x16\x8b\x12U\xd0\x8b\xef\x0f\x10e\xd3-\xda\x08\x0cR\x8btfq\xae\x16\xa9|T\xbf\n\x1f<\xaa\xf3\x07\xe5)\x04s\xb28\x0e\xe2C!?\x00\x1b\x8f|\xc6\x87\xc7\x83\x84\x14\xc0?\xd1\xc2}\x86i\xb2I\xf5\xdc\xd4\xb4g\xec\x8d\xd1\xf9l\x82d\xaa\x01lDf.\x94\xc7\xb5\x80N\xb00\x9d|^!f\x1b\x92\xd5#\x0b\xe5q~z/\xc4\xf4\x0c\xdc\x8d\x00\x0do\x8cE|\x96\xa7wc\xff\xa9g\xee\xeawc_w\xc8>\xbe&'\x0e\x9f;\x8d\x13-\xa7u\x06U;utG\x8fl:\xc1\xec\xb4\x920'l\xee\xb5Z\x92^\xe6=y\xf0.\xf2s\xb3>\x87`\xce\x1bu0\x10MR\x18\xe4\x92\xe3C\xc0\xb3B\xf1\x0eR\xc5\x93\x11\x9f?8\xe2T\xe6*E\x0fGvE$\xd3\xfdZ\xd3\x18Q\xf5\xaci\xac\xd9\xe6E\xe32\xc9\xb2F\xdf\xbdE\x03\xd3\x10a\x02\xe3\xd2W\x02<\xb1\x88a\xcbC`A\xf1\xbb+\xdb\x90Od\xb2v\xda\xda\x8b\xc1\x80\xd2EUy\xac\x9a\xf7\x8b\xd89\xc1\x92\xc09t\x86@\xfa\x16(\xd5\xcb\x03\xe8\x84\xe6<\xbe\xf5\xb0;2B\xcb\x87=\xe4\x9bs\x17\xc6H\xb3\x9d\x88@\x04\xf0\xa7\xdd\xc6\x0e}\xdcp\x04~[8\x9a\xf1\xd8\xe8\x17\x0d\xd0\x02\xa0}I\xf8\x19\x08.\xda,\x0c\xfe\x0b\x15-\x0cl^\xb2\x16\x9a\xa2\x85@B\"\xb4b\xb2\xf6&\xb8h\x816/\xd6\x12\xc5\xbc\xe4u\x02MO-\xda\x16E#c\xada\x82\x8b\xe6\xe5\x82of\x13\\ \x80/\x95\x9a\x0bJhs\xd8\x1c\xe5p\x96\xf9r\xb0\xad\xa7\x1f\x854\x81\x89eY\xba\xe9Dj\\<\x9a\xd59W\xf9=\xa7I:}\xad\xf9\xac\xba&6\x8a&6\x83\xa6\x17\\\x0fdh\xc8\xdc+\xa8\xab\x1c|Z\xcf\x03h\xaa\xeb\xfcf\x04\x8c\xb3s\xf4\xcf=\x1f\x06\xd7:\x88\x90\xef\xe8A\x18N\x08JhA\x18\xa1\x01\x8a\"\x14\xe9\x8c\x1fO\xd76\x97\xed\xd0(\xbd7 \xf6]A\xb0\x07\xc1>\x04\x87\x10\xbc\x86\xe0-\x04'\xf2ZzE\x18\x83\xab\x8a\x8c\x81b\x17\xbe\xcd\xef\xfa\xe5\xee\x8bR\xd0\xa3\xd9\xd4$]\xcb\x98I'R\x98\x87$\xa0\xb6\xb5\xdd\x14\xfd\xa5\x9c\x9f\x85\xc8!\xb1d\xfdn\x07\x98\x15`\x08\"I\xe5 \x02\xf3\x7f3\xac\x0d\x80-*\x89{\x0d\x03\xe4g]\xad\xcc\xear\x89\x11O\x14\x94\x92\x85\x98\xe0\x88\xae<\xd9F\xc6\x1eY\xfa\xbd\x8aK\xff\x10\x08\x1aBVY\"5\xfaZ\xa7\xd1\xe1\x840\x82\x8a\x90\xea\x8dF\xca>[\xb6Q\x18\\!\xb5zr\xc5\xbf\xbbqU\x97T\x15\xaeP\xd5\xca\x89\xcf\xe0\xf3\xd0\xcfE\x96\xaa\x88]\x18\xdda\x81W&8\x96Da\x9f`\xc6~E\xccx\xb4S\xd2\x01\x15By\xa1i\x1c\x92\xfe\x0e+\xf6W\xab\x15J\xef\x1b\x89\x88\x99z\xa9(\xce/\x8a\xa8\xb1d\xd3\x96\x12\x83\x12G\xf7eN\xdb*\xf2\xc9\xe6\x85#v\xa1l\x9c\xd0*\xadamPW\x9bm\xf1W\xd6L|k\x94\xda\\\xe2\x07\xc4\xafA\xe8N\xe3\xfa\xad\x87G\x9eT\xea\x14v[\xda\xe2\xe2\x81\xa6\x96\xfb\xa9\xb3/V\x9f\x07\xd7\xab\xc3(\no\xb3\x03\xa9\xe3pR\xe2\xe5\xae\xd6\x8dy\x08P\x96\xd25i\x84\xaek\x12Q@H\xb7\xe5\xc4\x8a\xfdj\xd8\xbb\xa4\xda\xc8\xeb\xf7Q _T\x99\x8c\x1c\x10\xd7/%C\xca\xc6aH\xbb\x83'\x8a\x1d\xb55\x1600i\xe3\xe1\x89-\x9f\xda\x92\xc9e\x02f$\xf2\xe2\x1f{\xe8\xc7\x1e\xfa\xb1\x87\x1e\xb7\x87\xfe&V\xae\xac\x99\xd6j\xcddX\x86\xa2\xd3\xfeQUL\xf0R\xf2\x07\xaf\xc9y\xfd\xba\xe2y]\x99C\x13\x0e\x95\x08m\xd9\x9b\x83G1y\x05MT\xe7\xc7r\x9aC\x13|]\"\xe2{\xa4\x92\x8c\xdb\xdf\xf3\x9c \xfd;\xc7&W\x90\xd5\xbe\xbf7\xe8gj\xff{\x03C\x17\xbf\x13\x89\xf4\xd9l\xdc\x0b}\xb1%\xd8/\x031\x87-\xdc\xd5?\x7f\xfey\x1c\xf6\xee\xea\x11\x82.\xd6\xf4u\xb4\xaek\x86\xbe\xfe3\\\xd7M\xe9\xe5\xf03\\_'\x10B\xa6 h\xbf\x89\x18\xf7\x15\xf7\x91\xf0\x06\xc6{\xf6\x95w\xb5f\xab\x89\xf7\xa5\x13*b)\x9c\xba\xdd.\xba\xbf\xcf\xbd\xc5\xf2-\x16\xcd\x08_\x99\x8cI}T@\x03D\x06\xb5\xb5\xae\xb4\xb7OZ\x11\xfa\xdd\xb0k\xef\x84I\xb2\xb5p}\xdd\xf4\x06\xc6\x1aom\x04\xe3\xd3\xdb@d\x94\xe2\xdef \xb8\x08/\xcd\xfb\xfb52\xc3\x0b\xf2\xe3\x12`\xf6i&\x1d\x88i'\xb0y\x0f\xd3\x99\xd7hlq\xea\x80s\x7f\xdfx\x8a\xba\xdd\xc6S\xec\xa05\x9aah\xad\x8b\x93\x8a\x1f\xa1\x08-\xbfdX\xa4\xe9]t\x81/\xbb\x81\xc3\x8be\xf3a\x01\x0c\xe6K\x13W\x81\xdb\xc8\xc3\xe2;#&B\x10\xf8+\xec~\x81\x86>\x81\x84nxw^\x10\xeb&x\xa3 \x87\x1a\xc5K\x8a\x90\xd1E\xa8\xce9\xbc\xdc\xf9\x03\xd2E\xe7#\xf8\x03\x02\x9a\xad\x0c \x80/-7\x0c\\\x88\x8d(5\xa4\xdf`:\x8bU\x91&\x05]\xfc\n/\xd9_z4\xb3|\x83\xf4\x0f\xf9-\x9dl\x18|\xba\xfc\xf3\xfe\xde\x06\x91\x80TW~\xa39\x0f\xb9?\xce\x8e|\xca\xf2<\x9c\x0e\x8c\xc0\xfc\xb7]\xab%\xcf\xa9\xda!`dH\x9e\xe7C\x84\x154?\xe0\xd4<\x8cX\xa3d\x9b\x86\xf7\xf7k\xe1\xc5\x1bx\xc9\xe6\xe0u\xc9\x06\x00 \x1f\xa4!5\xdd6\xc5\x0d\x10w\x7f\x87\x86\x07B\xa140\x08u5I#\xdd5\x1b@\xd2k\x91g\xfa\x02@\xc2D%\xaf\xc8\xa7\xe2\xb2na\x14\x18\xfaE\xc2\x13_j\x87X\x8b\x11\x1a\xc7\x1a\x1eA\xacA-Bu\xd6\x97\x17\x0c\xb5p\xa0A\x8d\x11,\xb9\xf8\x84>\xe0\xc8\x1b\x0e\xa9\x01\xfe\xed\xc8\xf3)\x19 \xbb\xd6s5\x83\x11\x83z\xec\xf5\x91\xa9\x8d\xc3>\xb2\xb4\xd7>\x821\xd2\xc8\xbdB\x8b\xa7\x91B\x0fc\x0dFHc\xfd\xa1\xbe\x16\x06\xfeL\x0b\x03\x17iJ+\x96\xb8$R\xba@\xf0\xe5\xfe~\xed\x15\xdb\x01\xdc\xdc \xa9Y\xe3c\x95 \xd4\x9dN\x94\x1c\x1c\x9f\xf5u\xbc\xae\x7f\xa6\x9c\xe0\xab\xd0gG@TX\x06\xe2p,\x8a$\x18\x12\xa6\xbd\xfb/\xa2\xcb\xfb{\xb1\x17#\x90\xe0\x80g\xf2\x16\xbd\x1b\xa4\xe9\xeb\x98g!\xbe\x88.\x17Kx\xd9,\xf7\xaa\xf2\xb66\xc8$y\xe5\x9bE0\xe6d\xd7\xa1Z\xed9\xb2\xfa4[q2\x16f9b\x82P\xc1\x1b+B\xe4x9e\x94\xbbo\x98@\xad\x9e\xd4\xed\x9b\"u\xd4Ep\xb9\x00\xb1:\x04\x9e\x92\xe8\" [\x93/\xc7Ep \x90\xb9+\xc9\x13@\xa6c\xa8\xbf\x80J\xc8\xec\xc2A\xb1{=\x19S\x9a\xe8Q\xeb32\xeb8\xee\x96^\x04k5\xf6I\xa8\x02\xf0\xe3n\x1c\xef&\x0f\xf8\x9a\x90\xaf\xb70\xea\x7f\x8e\xd0@7\x9d\x82\xb6\x91s\x0f\xfb\xc9LN\xe2\xee\xeb\x18\x1c\xf1\xf9d\x83\xdf\xf7\xbd\x1b\xdd4\x8d!\x99\xe4\xf0q\x93,@\xdd\x14\x81TR\xb8\xa4\xfd\xe9\x855Q\xda$v t\xfe\x8e\x9e\xaa\x81\x95s%T\x85Z\xc5F\x82W\xa3V\xf8\xf19\xba\x93{\xf0X\xe2\xd5\x8c\x80|\xf6\x97A\xce\x8f\xbd\n \x93%\x1f\x982?\x0b\xc8E\xc8\x0b\x86<\xeb\x87 \x0e\xe4\xc8o\xc8\xc8oV\x1b\xf9O\xad\xc6v\x07nT\x1c\xfdC\xa5M\xd3\x04/\xe5xzd<\xbd\xc7\x8f\xa7\xe6\xa8\x19\xa7jN:fD\n\xc3\xd4\xd46\xcb\x06\xfd\xe8&\xc9\xcc\xbe\xca\x99\xdd\x91\x99\xddU\x9cYIp\x08\x81 5m]+6\xeb\x93\xa9\xdfr\xae}\xdf\xb2\xc9*fQ\xfa\x9f%\xac\xa1\xbe\xfe\x9bamw\x98+o\x96S1\xd7%\x87\xa7\x94n,+\xfcg\x86\xf5\xd3\xf4u\x9c\xcaC\xb2\x9e\xa4Y\xcb'Ib\xa3yh0i.t\x1d/\xe1\xceh\x1d\x9a\x94\xe7\x1c\x19\xc2B\x83\xbas\xe8\xa6 \xdeQ|\xf8\x1a\x9b\xc6-\xc1\x87\xdb\n\xf8@W\x90[\x1aHl\xba&\xb5\xaf+\xd4\xfe\xd6K\xff\xddc\x93\xc8p\xe4\x93-\xf9 :\xa9\xf9\x90TtJ\xec[\x97`\xd3\xb7\xc2\xb9\xfc \xfe\x12\xce\xedS\xd5\x06\xf4\x02|\x88\xd1\x98`\xdd\xcf\xb1\xb0\x869%xsZ\x11o\xc4j\xd2T_\x19\x1fa\xf9\xd4\xa4\xd9y\x8a\x0f!\x9e2eW\xd7\x1d]@\xb4\x81\xc6\x9aM-\x96>\xc4\xdf\x9dS-\xb7\xd3\x12^X\x07\xa1+%Dt\x0c\xd3\x02\xe7\xca\x9fc0\x17\xb9a\x946\xf8\xa3|\x00`\xeaEF\x9d\xc5h{<>\xb80|\xba\xbf\xa7OM\xd3\xa1\xf2O\x80\xd5\xa5\xe2I\xd4\x91i\\L\xe3K\x80\xcd\x8c\xd5\xd3\x97%\x10\xbd\xf9K6\x8c\xd2\x87\xdfY\xb3W\xb5A\xc4\xe1p\xe8\xa3\x9c\xcb{b\xe1\xa84\x9e\xe8A\x92\xf06\xd9`\xc1\xcb\x160e\xc3\x08\x02\xe1%\x1b\x83\xa8K7\x10\x02a\xb7\xa8\x0f\x00\xd9cj\xb1|\x87A\xdcej\xfc\xb3ko\xf2f\x1ab\x14\x03\xbf\x0b\xad1\xbc;`zD\xd4\x7f\x11L\xc7\x94\xae3Eg\x90\xb1^$\x90\xa6\x12.\xb7\xb0\xc3Z\xcd\xdf\x0dx\xe4\\\x1b\xf8\xa6\x13\x80iwm\xcd\xaf\xd5DC\xcf|0\xe9\xfa\xbb\xe1\xae\xfe\xbf\xff\xe7\xff\xd2\xf4ui\x1fU\xf7\xcdu]\x1b\x87\x11\xd2\x1d\xfd\x95\xd7'\x1fz\x99\x1d\x9eb\x06\x98}\xb5\x1fs[E\x1a=V\xa7^\x98#d\xe8d\xde\xd4\xae\x85F\x01\x06\xba\xa6\x83\x06\x0dF\xc1\xba\x97e\xce\xbc`(\x8f6G<\xd5M\xa0;\xe4\x8f\xa6\x037g\xaa)\xf5V\xf1.\xca\xc6\xebFf\xd9$<\xebe\x04\x87\xe4+\x98_\xa3\x99S\xb0\xab\xbe\xc62 \x83\xae\xe9\xf4*:\xcdm\xd5Wq\x12\xf4EA\x1f\x81\xa24(\xfe\x84\xed<\x93\xc5\x1a\xa1\xd8p>\x9b\xa0\xeeKT\x18\x19\xe0U\"\x8axAh\xeb\x8b\x8a\xb45\xc3\xdbW\x13'H\xb9X\x91\xfa\x1d\xcd^G(N\xcfN\x7fAn\xcf:\xb5w\xbcF3\x82@\xd6$\xa2\x9e\x15\xbcG\x83\xa0\xadh\xed\xdb:\n'\x8c\\\x12\xad6\xcd\xc5y\xf1\x11\x8c1MM\x9e\x01\x04\x88\xbb\xcc@\x1f\xf8i\x8e\x8b\xf0i\\\x17\xdb\xa7\x9c\xda\xb5\x17\xf4\xc1\xa4\xbb\x16\xc8\xfd\x14\xbf&\x93KV\xb3\xfe\xa5\xc9\xaa\x02\x9d\xad\x17\x93p\xe8`\x9e\xf1\x92Q\xc1\xc70\xbe\xafJR,\xb5\xf6\x02,u&_Tg\x08\xf2Z6~4S\x86 \x06\x91r,\xef^\\:\x01\x08\xbb8!!\x00vqz\x9c \xee\x96\x10-\x06\xc8\":\xb5\x1bY\x03\xcf\xc7(*\x12F\xaf\x19\xa8\xa01\xc2\xadI+0\xd1>*j\\)y+\x9e\x99\x0b\xd3t\"\xe0\xa7\xc4R\x9c\xd1`\xba0\x06\xe7\x97\x04\x08\xb5Z\xa3\xdb\xed\n\x99m\xd9\x91\xd6\xe7$>\xcc\x1f#\x90\xbf\xca_3\xe8\xde*\xe0=p/\xec\xcf8;\x0f\x91\xa1\x06\x99\xc5I\x8c\x94\xdc\x18> 1=\xe3\xd2\x18'\xe7\x04\x80\xae\xa5\x83A\x86\x9fs|P*\xb2s`\xad\xc6\x91\x80\x9c\xc0\x94\x96\x044x}\x1eesWd\x1f\xcc\x19\xb6:(\x85\xb6 !S\x8e\\\x14v\xdd_\xdc\xdfs>D\xcd\xab \xf9@]|\x93\xec\x8a*\x87$[ ul\x16aL\xe6\xcc,\xc4\x15\xe5\xc0D\xf9\xd3r\xc1\x8f\xcb\xdc\x05|\x15\x92\x14|\xfb\xf33u$\xa6\x94\xf3ilK\x1f\x9d\xe2\xe5c\x0e\xd0\x8a\x07\x94\xd7\xbf\xa3\xa7\x13\xe7l\xc8\xed\"\x9e\xf6\x18.\x94\xed\xa3a\x04x\x9c$\x07\xd3\xbb\x80r\xd2\x80\x14+\x9e\x9a\xce\x02Dl7\xdd\xdfG\x8a\xecr=J\x89(W<>\xa2\x7f\xee\xf8x\x04t\xf9\xaa\xd2s\\\x01\xf3NVD\x81K\xd4L\xe5\x12\x83q\x94H\x1c\x03\xd6\x01\x0d\x03\xae\x17\xc9XG\x82\xba\x95\xf3\x12\xb9E\x0e|\xae\x93\xb2\xb8.\x19\x08.\x18H\x04q\x04\xd3a\x16J\x14V\x91I\xe0\x8b\x14\x1a].Vg{\xc3\xef\x15\x15\xc4\xaa{\x03cM\xea\xc5rkM\xb3\xd8\xb3%e\xd0\xa5nw\x93(\xbc\xf1\xfa\xf4\xaa\xb6#M\xf5\xc8B\x13lbxE\xf6l\xea|'\xac\x0d\x8b\xf3\x90\\\xdeK\xbb-G1\xa1B@i\x15\x02\x12\x82\xffl\xf9\xb7\x8a\x10\\\xf0\xa4\x85\xe8\xf8\xa0\xb4+\xb7\xcd\xe4\xc2w\x812HI\xee\xff\n\xa4\x9d\xb9<~\x9d\x08\xa8\xe7\xa8\x83\x08'\xee\x18i\xef\xd8\xa30\xbc\x8e5\xdf\xbbF\xda\x8c\xfb\x99Nc/\x18j\xa9V\xb5\xdb(\x0c\x86\x0e-\xd2\x0f\x83'X\x1b\xc1\x1b\xa4\xc1`\xa6\xf5e\x14!\x91j\x0c\xf5\xb5A\x14\x8e5\x1f\xb3\xc0\xf9\"(\x95S\xd2v\xe9\xba\xa4\xda\xa4-1\xd1kYC\xbfU\x91\x12P\x87n\xd8\x95C\x07\x01\x8d\x1c\xaf\x03!\xf0 \\\x88\xa2\xa2tR\xc6\x80 %\xf8Gi\xc1\x7f\"\x8d!m0\x11S\xc1\xd5 \xa0f\x84\x82\x13r\xd6\x1a\x8bGH\x83\xff\x88\x01\xc3+\x07.V\xa6\x82\xde\xb7g^\xd2\x81\xf4R\xcd\x97L\xee\xb9W\xb8Z,\x90^\x1c\x02\xd1\x96s@\xeeIU\xe5\xa7C\x84\x8fE\x0c\xc4\xbcP@\x92\xd6\xf9\x82\xc7z\x11x0\xff\x99\xda\x7f.\xe4Z`\xaa0\x16\x91\x16\xbb2\xd0\x1d+H\xee\xd0 XT\xb9.\xd2\x90\x8c\xc7a\x1f\xf9\xf9\xcbb\x8e!\x08\x98< F\x11c\xb3\xe8\xe0\xde\xa2\x01\x0d~\xc2\x87@~z\x84\xb2\xb3\xfbv\xea\xc2\xfe9\xe9\xed\xfe\xde\xc8>\xa2\xc1R^a#\x00\xfaU\x1c\x06: h\x9a\x02\x99\x11\x81\xd0\x04\x1e\x8f\x1e\xa1\xd6\xfdvwU\x95\xf7\x19\x85\xb7\x92\xb1\x0f\x92;*\xbe\xbf\xc7\x0c\x00\xa3\xf06a\xeb\xc3nB\xf1k\xb5\xa8l\xdb\xcc\x82\xe2=sW\xf2|X\xf2\x9c\x8a\xf5R\xb7\x8d\xb50}AY\x0b\x04\xc7C'\x96@\x8b\xaf\\Q\x18\xc8^Io\xd0/~\xfe\x15\x82yzw\xb1\xce\xd2\xcf\x80\x8c\xfc\x99\x1d\x8a\x14\x0f\x16(l\xa0/\xf4\x8b\xe7\xf1\xfd\xbdq^Q\xbf\x98\x18\xfd;\x8a\x83\xc13\xad\xef\xdd\x00\xf1}\x12eS\xb7&\xaaF-\x17x\x98\xc7,\xe6\x8d\x94T\x97E\x13\xa7\x87\xff\xf8@\x1e4\x9c\xec\xa3\xe7~\xe8^gC\x07\x97\xb8\xb8\xb5Ku\xad\xb1\xdf\x9d\x87p\x8aGMG?\xdd#\x9f:\x80\x13\xefw4s\xf4\xbd\xd7\x87\xda\xefh\xa6\x83\x11\xc6\x13G\x7fu~\xfeZ\x07\xe1\x04\x05\x87\xfd\xfd0\x08\x90\x8b\x1d\xfdt\x82\x02\xed\xf0@\xe3\x0f\xf4\x05\xf0\xbfW^\x18\xa4\x18\xd8\x81\x1f\xde\x96\x1e\x908*3\x8e\xc1#\xd5\xf6\x0e\xe8\x1a\x05\x9a\xf6\xd2\x0fo\x0bsP\xe2\xbe(\xef\x8d'\xbe\xe7zXg\x84H'@\x0f#n+\xb4\x1f\xf6\x11}\x91O\x8f\xb3\xc4R'\xc6\x84[\x93\x03\xdaS[\xd4\xde\xbd=\xa2\x16\x96\x81\x95\xea\xe9]\xe43\xc3g\xa0O`\x1c\xdf\x86Q_\x8c\xc8\xf5=\x14\xe0\xfd\x08\xf5Q\x80=\xe8\xc7\x7f\xdfP\xcfiF\x9dd\x884\xc3N2\xb4\xc0\x8a\xd0 B\xf1\xe8]T`\xe2\xb3B?oY3JOI\xc3+\x19vd\x1b>s\xc3 \x8a\x9dB\x1b\x18}\xea\xf3r\xfc\x1c\xa7\x06\xb5\x81\x15\xd3:\xf7\xf7\xf3E\xd6\xb6\xb6\x9c\x9d\xd1}O\x97\x16\x9a\xb9\x97\x84\x0e\xf0\xae\x10\xb9\xc0\xd4\x0b,\n\x11\x04s\x96$Y\xb1H\x11\x83\xa11ju\x9d\xc53)\xa5\xe7\xee\xf7\xb2\xa5U\x9e\x84\xdfo\xc9\x05\xce\xc33z\xf5A\xfc\xbe\x8b\xaa\xdb\xbf\xce\x020\xf7\xfa\x0e\"\x0d\x91\xa2\x87}\xc0D\x0f^?\x0f\xefUO\xfa\x17%\xcf\x8f\x030\xc7\xa1\xda\xe9\x82\\n\xbd~\x1e\x97\x94\xb8\xc9\x19\xf7!\xb2j\xb9\xe2\xef\xbd2\xbaE\x8d\xd3RY\xad\x04\xe8\xea}\x84\xa1\xe7\xc7\x05\x8a\xcb\x94\xa8\xf9qT\xf2\x8c\xf7\xc2$\x0bH#\xbc\xc4\x03\x94R\xd3A\xec_0Z}y\x7f\xcf\x896\xb37#\xd8EN\xa7<\xf1\xa94\x1a\x1d\x18\xb8+\xda\xb0<\nF\xd3rG0\xda\xc3\x86mZ8|7\x99\xa0h\x1f\xc6\xc80\xd71\xf7\xdbi\x90\xbd5\x81\x11\x1c#\x8c\"\x8d]\xed\x1e\x9a\x82\xec\x85J\xdb\xe9\xe8\x1dd\x91\xa3t\xf7\xa2p\xf0t\x97\xeb\x0c\x81\x0b\xd7\"\x99\x069\x8a3\xe4\x9e\x83\xb7\xc2\xb0\xc8\x10\xf8>\xe1@\xd5{\x08F\xc2\xe8DyM63\xfd\xc9\xde\x97\x19n*\xa3\xe7\x0d-\x1f\xfdsZH\x1b\xd0\xe6\x96\x8f\xf8\x89\xa6?\x01\x05\x83\x00Ot\xed\x89i^:\xe4\xbeB\x18\x92G\xe2\x03g[\xc8\xf9\xb0| \xb97P\x07\xf3\xca\x19\xdf\x00w\x03dc\xb5\\\xd6\xeb;\xe6\x14\x98{hRL!\x0cJ\xbc\xab\x9e \xfcYu\xc7\x0c\x9f\x0bR1\xa0&f\x18\xd0d\x18\xbc\x99\x0b|I\x85\xa7\xcc\x0b\x8a\xfe\xc7\xc4|\xa5\xc99\xc9\xdb\xa9\x0f&>\x18\xf8\xa0\xef\x83\x91\x0f\xc6>\x18\xfa`\xe6\x83\x9bt\x92fqB \x16\xdd\x18D\x8c\x1dc>y;\x89\xd2\x90\xa6\xe1\x9c/\x14\xdb\xb8\xa8V3\xa2.\x0d\x96I/\x1c0\xbaF<\x043f\x8fx\xd4\xcb\x88J\x13xLIx+4\xf6\x01{\x12\x8a\x9f\xe8V\x9b!#\x00=_\x04_t\xa3\xd0gw\xd6\xaf\x9e\xa1\x166\xc1K\xcf\x9a\xd2\x00\x9c\xa7\xc1+/\xc6a43\xce\xb1\xc8hx\xd8W\x1b\x10\xadM\x90K\xdb:\xf1\xe8T\xd3\xed\xf1;S0\xa5E^\xf2\xeeH\x1d\xb5)p\x8e\xcdTE2EB\xaf\xcfh\x82Qq\xe3f\xe9FiK\xef<\x10\xd5j\xcaS\x16\xbf\x99Z\x01\x1a\xb2Sf\xa7hf\xa0\xc6\x8f\xde\xe7\xc8\n\xcd\xa4,\xd0yz\x08\x8c\xc6\x87\xfd;=}\x8d\x089X\x8eat}\x1a\x1c\xa3`j +@\xb7T[\xc7\xdcE\xe4\x0de\x10\x85\xe3\xdf\xce\xba*z2\x99\x08\x19820\x9d>\xcb[\xce\xbfO#\x1f`1w\x1a\x07V0\x15l\x1a\xa9\x91uq\xc1\xc3\xfb{\x1b\xa8\x85!F\x06\xff=\xf0!u\x8f\x8e/\x8aZ\xbb$,a \xd4\x03\x01[?\x84}C\xa4{=$\x80\xa6B\x1a5\xa8[\x18\x94f\x95\xa6\x9df\xb1\x8a/J\x0e\xaaI\x8d\xd40\xcdto|-s]1tJ\xc2\xc2&\xf8\x97}\xc6\xe6\x92F\xa1\xa4\x08c\xe6Rh\xc3\x8b\x8a\x9fFfD8T\x97\\\x12$U\x12'\xf2\xaaR\xbepyjU\x04\xf0N\xbe\x85\xf2\xd4\xaa\x81L\xad\x1adS\xabr\xac\xec\xce \x14\x9cy\n\xaaN \xb4\x17\x80\xa0\xa53\x9fF\xbe#7,\x97\x9f\xd1\xef\xef\"\x1f$\xa9\x97\xb3o\x17\x0b\x15\xc6\xbb\x17m\xf5'\x85\x94a^:\x17-\xd0\xbc\xcc\xa4z\xc5\xdd@I\xd0\xda\x92y\\\x85\xad0\xe0\xd3\xeb\xb6\xd2\xa9[/\x9a\xc0@*~v1\x90\x82\xbcn\x86B\x02d\xca\xb4\xad\xa95\xcc\"c\x9a\xe7\xe7\x01\xf2q\xf7\x18\xe2\x915\x86w\x86M\xf8\xf5\x80\xff\xf6\x02\x05w\xe5\x9e\x131\xf4\xf1z\xc7\x04Q\xf7\xe2\x12\x84],\xc3\xe7\xd3\xb5\xf6\xbaI\xbd$\xcb\xfd\x1e6Bs\xc7\xab\xd5\"\x16\x81\xde\xa3a\x0d\xeb\x0dfS\x8dy\xf0\x08\xd8\xed\x87.\xbd_X_\xa6(\x9a\x9d\xf1|T\xc6\x93\x0b\xb2<\xf5(\xf4QW\x8fP?t\xeb\n\xef\xac_>1w\xa0l\x1b\x9a\x0b6\x04z\xd4X\xb0O\x85pF\x94:\x81\xe8\x07\xc5\xfa\x85a\x82\x9e\xdf\x9d\xf3\xa8\xe2\xc7I0\xf0\xd81\xae\xe2\xee|\x01\xae\xe2\x0b\x95\xbb\x16z\x93X\xbf\xec\xcee\xd4N\xc7\xf5\x01\xbd\xc3\x88Q;\xf9\xeb\xca\xb8|Z\x98{I\xfce\x9d\x99\x0bp\xe7w\xcf\x90q\x1a\x98\xc6\xd4\xbf\xbf7\xa6~5\xa9\xa2\x9a\xce\x85I\xd8\xf8\x93^\x88q8v4\x9b't\xfd3\x1f\xfd\xe4QuM\x16\x9dco\xe2\xbdb>f\xa6 n\xa9D\x14\x1a\x132\xf2I\xc5\x91\x17\x04\x14\xe1\xc2\xc8\xa2\x80Q\x0f\x05\xd4\x12CU\x04\x8e\xed\xc9\x9d\xb65\xb9#\x9f\xf4\x85\xcc\xe9\xc7\xe4\x05\xf5$\xb5\x1f\xcd\xc4\xc6\xf5?4\xf3\xa7L\x90\x97w\xfb.\x80\xe3\x7f\x83\x99<(\x91-pe\x7fD\x0d\x829\x07\xe1m@x\x0e\x96\xa6\x9f\xa0\xcf\xb5\x9f\xc4A$\x184\xa8\x88A2\xa4\x95\x905\xf3D}\x8e\xf6\xe4\xfe \x17T\x97\x83J\xd3\xc2 t=<\xa3 \xe7\x8f\x92H\x98R\xd4MA\xca\xa3 \xb8H\x86\xe9\x142o\xc7\x871\xae\xbb#\xcf\xefgbj\xc9\xae\xe5\x1a\xa4\x12Z\xfe\x97\x1c\xbci\x82F\xc7\x04\xa7R\x05\xd2'\x0b\xd6\xaf\xb8`\x05\x19\x0b%<\n\xdf\x99\xa6 ^\xc8\xbeF\xa4\xafQ\xc5\xbe\xe4\x04\x06>b\xd0 _\xea\xb7\x11\x9c8\x9a\xcc\xa4\xf8\xf4)\xe9\x0ei1\x9a@\xca}ia@\xc3\x00\x13x\xc7\x8e\xe6\xf5\x11df\x00\xe4\x92\x1e;O\x9f\xc6\x18\xba\xd7b\xb0\x96\x1b\x8e\x9f\xc2\xa7\xad\xc6f\xab\xb9m7\x9f66\xdb\xdb[[[\x7ff\xf7t=\xe7N\xf6\xbd\x0e\x8f/\xf0\xe7o\xaf\xecfn\"b\xf7S[\xb6T\x1f\xc8b\x02\x07k\x14\xa1\xc1\xfd\xbd\x91\xfa-\xfd\x96\xc8\x05\x83\x1f\xa9^0\x08\xad>o\xef\xc8\x0b\xae+j\xbbW\xd1\xaa\xb0\xfe\x98\xda\x95\xdck\x83.\xa6\xfd\xd2@<);\x860Q.Sg\xee4\x99\x03\xb0\x1b\xc8\xb1\xbe\xf4|\x1a\xda\x93\xfa\x14\xa9\x13\xa0\xbeE\xbe\xe7\xa2 .0\x03\xba\xe6\xbaN\xfd\x88\x95p\x8a\xd2\xfe\xcb\xa8L\xb2!\x16\x9d)\xf9I\xd3\x84p\x97J\xea\xbdD\x08\x0ftq\xad&\xbf\x92*K\xfag\xea\x86\xa5}+\x0d\x91\xbe\x95\x9f\xb2\xebiq\xd7h\x0c\xbd%\x9d'\x05Y\xb6\x14\xfdE\x9dT\xd0\x81\xee\xe8\x85!\x07\x92Q\xe9\xa4 \x0e\x1d}=\xd3\x9b:B\xfa@\x8eq\xd2\x0d,\x8c\xa2q|:8C\xd1\x8d\xe7.Y\x96e\xe0H\xb7\xb1\x00\xfa9y\xa0\x85\x03\x8d?\xd2e\x97\x83n`\xdd\xa0(.\xcc3\x98\n\x8fa\xe8@\x16\xa5>\x8d\xac\x85o\xa8\xe0W\xe5\xe9p\xe2\xd5 \xe6\x17H?\xef\xe4\xdaH\xdb400\xc1Z\x819\xb8>\x11\xa3\x17\xfbC;\x9d\xa0`\xef\xf5\xa1F\xf6\x977\xf0\\\xc6\xb8\xe4\x17\xf2\xd6\x07s\xb1Y\x1cx\x7f\xbff\x83\xac\x84\x92B;N[\xca\x16\x90\x9dE\xd2{\x91\x82Kh\x19\x0c\xb9gx\xa6\x1d\x82 \xe4kz5\xcd\xfc,OKP\xe2\x05\x7f>e\x8e\xf0\xf4/\x93[O\xc4\xfa?\xa0#Q\x08\x9fb_\xa5\xcb\xfb\xa0\xee\x14\\\x08\x99Gu\xb6\xdd\x9cGv\xb4x\x84K\xd4\x19=\x9d\xbd\xf1\xd0\x18\x93\xd3y\\\xf1t\x1e\xc3\xbbz6\x0e9y\x96\x89D\xae\xda\x1e\xd0\x07\xfc}\xc3\xb6\x7fIs\xc2\x825R.7\x7f[\x0f\x0f0\xcb~8\x0c\xad1\xbc{E{\x7f\x80O\x16\x85?\x90n\xab\x94\x1dN1F4\x8c\xf2\xb9d\x8c\x86\x04\xf4\xc3\x8a\xa0/d %\xd8J\xde\x12F\xec\x8a\xdf\xf2f\xa4\xb7Y\xc5\xde\xcaX\xd8<#\x94+@\xfa\xdc\xfb^t\xb39\xc6\x80r\x01\xb8\x8b.\xf4\xbb:Y\x18\xfd\x92\x9a!\xe3\xfb\xfb5v\xce)\xc3\x93\x99\xbf\x04s\x83\x92\x93\x0f\xa9\x87#u0\x82>>GwxW~st\xda\x01\x80\xb9\xa8(g>\x98\xc7\x91\xeb\xb0\xca\xd0\xc7N\xb8(u<='\x85\xf1\xccG\xce\x8cP\xc0\xed\xac\x95Ta^@n\x17\xd7\xd4\xc0N\xa3\xfc3u\xff\xd6\xc6\xd3\x18k=$-\xef\xb9\xe1=SV\xbd\xc5\x062\xf9\xec\x8e\xfb\x1f\xd4\x90\xf0\xb1\x11I\x9c\xf6\x85\x9d\xba_\x9e>;\x1fXm\xd7\xb3\\?\x0c\xe4\xa2\xc4\xd9\x0c9\xc6\xaf\x1e\x98\x13\x908\x08\x08k\x92F\x12\x93\xa4A\xc8-\xf3\x85^\xe4\x1d\xccQ\x92_\xb2\xd08\x97\xd5\xabn0\x8f\x84\xb5<\xff\"\xe5\xbe\xd8d\x11\xe0DL\xd5\xcc\x0e:\xf4\xbb\x81\xd1\xe8l\x99\xe0\xb5\x14\xa8X\x10\xe3(.\xb2\x15Qy\xbbp\x82\x98\xbc\xa8\x8e\xa9\xfd\xc2:3JX,L\xd38!\xd4\xfe\xa4\"\xb5\xe7\x87\xe76zHN\x95=\x99Sq\x18\xc5\xc3|\x98\xe4\x9fZ\xad\x16{\x95\x0e\xdc,\xc29*5\"4A\x90\x8a\xd9\xf8\xd7l\x81I\x18{LF\xb6\xa1\x88\xd6\x94 \x91\x9b\xea#\x11\xc1\xf8=\x8a\xfa0\x80@\x8ba\x10\xd7c\x14y\x83\x1drM\xbfE\xbdz\x0c\x07\xe8\xcfD\xeaw;\xf20\x13\x9d\xd0C\x95\xe6\x92\x19\x84\xd1\xd8\xd1\xa6\x93 \x8a\\\x18+o\xf32\x9a\xe2\x90\xecK\xe2[\xf2+}\xc4jl\xf0\xd1\xabB^\x16\xdf\x9a<\xadYC\x84\xcb\xf3\xde\x88\x15\x10r\"k\x12\xc6+\x15\x9f\xaeR\x9a_\x9bW\xa8AS?\xafP\xbe\x8f|\x84\xd1\n\x15z0\xf6\xdc\x15\xca\xfb^p\xbdB\xf1\x11\x82\xfdU\x8a\x87a\xb5\xd6%W\xf5c#\xfe\xf9c#\xfe\xd8\x88\x0f\x16\xff\xfb6\xe2\xa3\xb3\"\xfd\x1d\xd5\xb86\x86\x1a\x9a\x0d\xd1CwR\xb54\xc1\xb7U\x8aOW)-t\xa0\xd5kP|[\xa1<\xc3\xb7\x15*P|[\xa1<\xc1\xb7\x15\x8a\x13|\xabV<\x136:I\x1b\xfa\xd6Oq\xf8\xa9\xfc\x12\x1az\xd6\xd8\xfd`X\x0d\x10X\xb1\xd7G=\x18eov\xa6C\xcd\x0cH)\xbb\xb3\xac\x98\xaeS\xaf\xbf\x13\x1f\x1c\xf9\xe0\xd8\x07\x07>x\xe9\x83\xaf>x\xe7\x83\xe7>\xf8\xd9\x07\x1f|\xf0\xc5\x07\xaf|\xf0\xde\x07\x1f}\xf0\xab\x0f\xde\xf8\xe0\x0f\x1f\xfc\xee\x83\xdf|\xf0\xc9\x07\xc8\x05\xd8%\xac\xe8\xd47\x8e\x08\x1fyT\x91\x8fL\xbb\x97\xa4\\H\xe8FL\xb2r(\xc7\x84mm7\xb7\xb9\xeat\xb1D\xe1\xfd\xed\x9a-\xdd\xe3I\xec\x06\xdd\xd1\xd3\xaa4\x1a\xcd*\xa0P\xf1=\xe3\x98@\xe5\xb8\"T|/\xc6uv\x83\xa7mi^@V/Q\xd1\x15\xe8\xd0\xf8\xa9\x96\xbcA\xbe\xefMb/\xce\x83 \x07\xae\x7f\xac\xbf\x128\xb2\xb4\xb8}4\xc1\xa3]]=>\x1b\x9d\xc9\x9d\xeeP\xc3~\x10\xb9\xdd\xb9\xed\xdc\"\xe3\x80\x80\xf2\xa0\"(S\xfa\xd3\xcd\x9d?\x13e\xa9\xc2\x1d\x08z\x9eA\x87-\x8e\x0cILHi/\xc1\x9f\x0b];\x0f\x02*\x9e\xa6O \xe6\xefb,\x0f%\x1d\xe3T\x82P\x88 3~\xa2Q@\xc4\x00\x1fJ>\xc6\xab\x93:2\x0d\\\x83\xac\xdaK\xb2j/+\xafZ\xc9\xbe\\\x06\xaf\x9a3\"\xd8(vvA6\xcdEf9\xfe\xceN*\xc2\xd9G7\xc8o<\x1e\xd0\xcc\xe2\xef\\\x05w\x93\x80\xfb+\x01\xf7\xd7\xca\xe0.G\xd9\xc7\"\x90\x8a\x01\x0b\x102:\x08{\xc8_\"\xa9\x88B\x1f9\xfa\x18\x05S\x0f\xa3\xb1\xaeD\xc99\xf4\x0d\xbdN \x84\xbe\xce)\x85\x8c\xa0\"\"\x0c,L*\xc7xGf\xfe\xae\xe2\xcc\x8b\xf2\xb2ff\\r\x964\x9aVgr\xa7%6\x184\xbfP\x91\xbe\xffj\x1aco0\xabK\xbb\x8fx\x02]T\xef!|\x8b8)\x1d\x14e\x8d-\xbf\x94\xb17I\x99?\x83\x1cb>\xc8\xe3\xfemyb\xc1\x0f\xc8\xfeM\x90-\xddy\x0c\xffw\x1f\xa0\x0d\xce\x92-\xba\x92\xbbm\xba\xb0\x88\xa9\xc26e \x9cS\xa3lF4\xee$\xa63\x7f \xfc\xacQ\xab\xe9\x99X\xcb\xeb[\xff\x8a\xf2i\xc9t\xee$V\xf1\xbaD8o/\x18\xc6\x0fg \x8e\xdc\x0b>\xec\xcb\xd2\xe69h /\xceg\x88(\xc7\\V>\x89rQ\xaby\xd1\x92\x91\xa7Z\xac\x90\xb8X\xaci\xe5L\xc4\x7f\xad\x82+N\x13\xcf\x956{\xcf e}^\x91\xb2\x96K\xa2\x96\x08T2\xbbcE\xb6\xf3AU\xe3\xdf\xdaw\xe9\xee\xa4\x0d\xef\xf2OG\x87S\x1cR\x86\x16\xbaB\xad\xfb3\x01\xec\xcf\x15\x01\x9b\xe1\xdd\xcbX\xeb\x9b\xb2\xac\x84\x85l\xa5\xcat\xeb\xeb\xcd\x7f\x95d\x07Le\x10l\x97\x95R\xc5kdgs:\x9aa~\xc9#H\xe3\x10@\xe7\xc6\x8b=\x8c\xfa\xfcW\x8a\xdc\n\x1a\xbb\x8e\xf3tk]\xd7\xd6\xbc\xf1$\x8c0\xcc\xe4m\xe7\xd7\x07%\x85\xe1\x07\x96G\xb1\xec\x16,\xd3\x18&v\x02\x05)\x12%\xb3\x9d3\x16`$\x9a\x86\"p\xbf;\xfd\xa6\x128 \x10\xb1\xb0\xa9w\x1f\x0b\x86\x9d\x04\xc9\xa6\xb6m\xcc\xa8\x86\xc6\xc6\x1ea\xb9\xd3\x08\xafn\xb3\x7f\x85\"\xb8\x82\"\xa6i\x82 \xed9vM\xe3=\xe9\xf9}\xc5\x9e\x93[\x82\xc8\xe1W\x92\xda7\xe3\xe1\"\xb4M\xe94\xec\xd2\x03\xa3\x9c\xa9/\xba\xc7\x84SL\xdbI\x15\xcd&\x10\xf9.\x87X\xcd\xfdCb\x7f\x19\xaf\xff\x17\xf6\xd2@r=\x1f\xc9\xba\x7f|\xcc\xbak\xcdN^\xfdXx\xb9\x94\xc0\xed\x14(\xe7:i\x8c\xfd;\xbbX\x01\xee\x1d\x02v\x13\xf4\x97\xb0\x11\x8f4\xcc\x8f\xa9} ?\xe4TN\xc1\x87\xe9wdAG\x9e\xdf\xff\xa6v\xf6\xa9 \xdc\xac\xfd\x08\x05\xcb\x83\xfb\xcd#4H\\\xee\xb0\x027Z\xbf\x8b\x17i\x1b\xe0\xd4,@\x18\xbc\x0c\xddi\\\xf4\n\xc3\x1e\xf50ul\xc0\x84N<\x11\x06a\x08\x8a\x8f\xf2\x91\xc4\xdb_ \xde\xfeZ\x11o\x8b\xf6f\xa2\x07\x8f\x90\x0f\xc9\xfd\xb2\x1c\x9d\x96\xcaSVk\x88P\xddqr\x92\xbd!\xd3xSq\x1a\x85b\x94\x94k\x89$v\x03\x1f\xdd9Z\x83Q!~U\xaa\xdfU\xbeF\x81\x7f\xba\xc3G\xe8o\x85T\xc1\x04C\x95\xc1\xfb\x83@\xf4\x8f\x8a\x10\xe5\x04Z\xb0P\x9c\xb4\xf0\x90\xa4\xf4Q%\xae\xaa\x10-R\x84\xacE\xfe\xd0oR\xec\x95>\x8e\x1e\x92\x86\x15I\xde\xa8\xa5E\x9d\x8a\xdb\x1c-\x08\xa5\x1f\x13\x1d^\x9d\x06lH\x99V\x08~13\x04\x81\xa2\xe21\x15\xb9s\x94\xe6E\xe8P4\xdbjvb\x0d1\x03\x8e?\x85L\x90|\xb1\x14F1\x19\xf6\x9f\x01\xe7\nk\xce\x80\xd0\x00)\xbc\x0b\xef\xea\xf1\x08\xf6 \x16xA\x8c\xb0f\xd3|\xba\xe4_4\xecA\xc3\x06\x1a\xff\xbf\xd5\xee\x98\x80\xbf\xb6\xd9\xcbFs\x0bh\xc9\x1f2(s\xe7\xcf\x0ck\xfcca\xff\xbb-l)\x85\xf0\x02r\x8f!\xfc5Y\x06\xdd\xd1\x9b\xe4\xa3T\xce\x96\x14\xb7uGo3\x1b(\xcd\xd6\xec*U(\x04Y|d\xddI\xf8\x86\xd5\x02(f\xc7\x90\x08H\xd4\xe6+TN*\xfe\xe4\xba\xae\xee\xe8K\xe6\x90\xe4\x1e[K\x9a\xa8\xd5t\x15\x0f\x1cf\x8b\xaa2C\xec\xb5\xd5\x87\xd1\xf5\xba.\x85\xc0c\xf7\xa1\xb1e\x9a!\x9bK\xd8X8\xfaO\x03\xfa\x1f\xbd\xfb\xcc\xdc\xd5\x8cgG\x18O\xea7(\xea\xa5\xedf\x7f'T\xff\xf7\x8aT_\x11\xbe\x89\xadQ\xd1\x10O2\xfb\xec'\x9fH\x9a,\xc8\xdd\xb6\xd4\xfam\xc9\xd1\xea\xa43\x8e\xff\x17\x19m\xe9\xfe\xe4v\xdd\xbb:\x15t\x12,eZ\xder\\\x955\x1a[\x156t\xce\xec'\x89\xf6\xa6\xff\xb4M\xff\xab\xd0U\x939\xfd\xeb\x8e\xde\xe2\x04\xfd\xa1\x1e\x1f\xd2v\x98\xe0Fr\xab\xbf\x11\xf4\xfc\xad\"z&\x0c%\xec\xc5\xa1?\xc5\xa8\xf0\xc0\xfaZ\xa7q\x9a\xe8\x93\x0c\x02\x90\xb5\x86\xe4\x7f\xa9\xe5on\xb4\x9a\xad-~@\xdc\x11\x94\xa2\x18 \x0f\x8b\xbb\xe4\x15\xa7\xe1\\\\@-E\xb3\xf4\xbb\xd5b\xc4\xb9PD\x9f:\x80(\xab(\xcf\xc3v\xfa:\xce\x8bPqJ\xae\x8cz`A\xdfO\x9fS\x9av\xe3\xc5^\xcf\xf3\xa98[\xe9\x9c\x1eP\xc9\x85\xf2\x074\xbf\x054+\x18_\xa9\x0d\xd0\xef>\xda\xd1\x1d]!*\xf4+A\xf8\x8fF\xbdc\xffbj\xb1\x0b}\xf4\xd1\xb0Mf\xa8\xd5\x93\x1b\xe6\x13\xd90\x9f\xaan\x98\x8c\xac\xa7T\x08\xc4\xae_w\xb2\x17\xe4\xde\xdf\x1b\xc8]\xb1\x97N\n\xe6\xaa\x82\x83\x1c\xc3\x05\xc8\xc3i\xeem\x18\xf5\xeb\xbd\x08\xc1kG\xa3\x1fu\xe8\xfb*N \xc2\xfaL#\xe7a\x9e\xed\xa2/\x17E\xf3\xfb\x0e\x86TM\xb8\xb2zL\x13\x95u 8r[*\x92\x91V\x9a\xc8r\xa1\xef3A\x0c\xce\x08`\x82\x82t\xad\x81\x15#|\x86!F\xc6<\xc9y\x10X1y$\x11|a.\x00\x7f\xd6\x9d\xab\xa9\x11@\xf0\xf7\x88gh\xf8\x03\xe9,D\xfd\x19\x05\x7fE=\x17G^\x1f\xbd\ncL\xb5I<\xef}z\xc8er\x9d\x97\xc8\xda\x0f\x83x:FQu\xdf\xba\x91[\xe2\xb9\xee&\x89K\x91\xc8Z*\xe1\x03\x81\x18\xb3\x13\xe5\x15O3\xa1x\n\x12-\x97\xf0\x03\x13i\xb1\xf8o\x02|Q&\xafS\x1a\xbb\xc2)~\x02\xf1\xa8X}\xc5\xd5R\\I\xc5p8\xda\xd5{>t\xafuG\xa7\x97.\x1d0%\x17e9\x14\x1d\x17\xdc\xd5\xa7\x13\xdda\x8a.\xc0\xfd:\x19\x03\xf4\x96\xb2az\xbd\xd9!`\x19\xedv\xb0$\x81\xd4\xb4.\xc9\x1b\xce\x1f(\x01J\xffN-\x01\xebLq\xb8\x97\x89<\xe2\xccO\x91\xccVA\xe9\x1d\xe19\xc1\x8c\xb8\x8e\xbd1:\xec\xdf\xd1\xd3L\xa9\xf7prX\xb6\x94\"7l\x19\xb5y(\xdds\xea\xa0\x13#\xcb\xaaA\xc4\xc9s\xeb\xe1\x11\xcd\xf5\x93C\xfccX\xdc\xfc\x11\x7f\xae\xef3\x98i\x04\xd4\xba \x02\xd3!\xecN0M\xe7\xe6L\xe7G1\xf8\\\xa3\x8b\x80'\xba-\xcdW\xab \x0f \x04\x9ee$J\xf7\xba\x10\x19r\xd2\xba\x1eC\xac\xc4\xaa\xc1G\xe8B\xbep\xbb\x17:\xa1v:\xd0i\x98L\x1d\xe8n\x18^{H\x07\xfa\x88\x85(\xbc\x04\x9f\xff3\xd4\x8e2\xbf\x94\xd2\xc4\xb9-\x85\xbb\xf3E\xb2\xbe\x05 \x969:\x80\x08\x84;A\x97\xa5\xf6\xf1\x02\x10v\x11\x08.\xa2\xcb\xfb{\x83|t/.M\xfa\x9b\x85\xfb\x0c\xa96\x15?*\xa72\xa1m\x19\x9a\x9b\xcf\x81\x9b\xce\xb1\\\xab%\xa1\xads{\x8c\xc5\xc3V\x81`D&\x80\xdd\x88o\xcag\xf6\xee\x0b\xd7\xb9\xb8$\xac\x04\xa1$|[\x03\x9f\xfdT\xce\xdf\xaa\x9b\x0bV\xce\x8cp\xcd\x99\x00\x04\xe8QC>\xe5\xa4\x9d\xf0\x02\xb1\xe8\xe1 \xce\xc7\xcd9w\xc1\\X\x16\xc7\xa9\xa4g~ilq\x89og\xee\x921\x9d\x05<\xceU\xe6\x8dA&\xb9\xd2\x99\xbb(6 \x88\x97&<\xcd\xae_\x92S/\x0fw\x857\x0b\n\x180\x91w*I3e\x83$\xe5\x00\xd4e\xce)\x1eU\x83\x0c\xf0\xca\x05{.\xd8w\xc1\xa1\x0b^\xbb\xe0\xad\x0bN\\p\xe4\x82c\x17\x1c\xb8\xe0\xa5\x0b\xbe\xba\xe0\x9d\x0b\x9e\xbb\xe0g\x17|p\xc1\x17\x17\xbcr\xc1{\x17|\xa4V*\xff \x8aRq+\xb3@\\)\xabk4\x9e\xe0\x195\xe5s\xc3>\xa2v|\xdc\xd8/N\x19\xfb\xf9\x89\xb1_\xa9\x16\x9e\xab\xc5U\xb3\xbe$\xec\xd6ZT\xab\xf92\xa51\xbb[$)\x8c!\xe0\x81\xc8\xe9\xf5k\xad 0U\xce\xb0\x8f]\x8c\x82\xf4\xe5g%\x03\xbft~\x9b\xb08{&A\xb0\x84\xc7\x07\xb9\xac2\xa5\xa9\x03L\xe3\xca\xbd\xbf7\xae*\x8am\n\x8cD\x1fa7\xf7\x8f\x99\x13\xfd4h\x92\xff1\x19La\x10\xd9\x8c\xf0\xa5\\\xec\x9fQ\xceI\x95(\x9c\xe2p'\xf5\xac\xc0\x87\"g\xe2\xfc\x03\x8e\x7f\x11\x8e\xd5\x04d\x11\x8a'a\x10\xa3Xh1\x84\x13\xc0\xe3*W\xd5H\xfe\xa51PZ\xb7\xfb\xe4\xcf \xef\xfd\x98\x89\xbb+}\x84\xf4\xff\xfd?\xff\x1f\x06\xa3\xe2x\x0f\x02\x99\xe4\n\x97D\x8b(s2X\x90\xae\x95eK\xd9\x03,\xfe\x0c\x9ep\x7f\xd6_\xa5,x\x8f\x10\x95\xbd\x8aDeE\x89\xf3\x1bz\x80\x9d\x05\xf4F!)\x99\xa1\xbb\x90\x85\x0c4Mc\x9ft\xbf_\xb1\xfb\xc2\xad\x95r\xd9\xe5P\xe3\x1d\xd4c\xaf\x8f\x1c\x0d\x87\x93\xb2\xe0s\x8fh\x85L\xec\x8f\xff\x0c\xa3\xff\xf0\xb1l1\xa6N\xde\xb7%\xdf\x8c\xee\xef\x99\xa33\x17i\x04E \xcb\xcb\x04\x12o\xb8xI\xd7\xde\xf2-\xa2\xb1\xb0\xecqq\xc2\x9f\xb4\xf8\x02\xad \xbe\x902\x0bE\x8e\xb1\\|Q,\xb8\xf8\xfd\xdb\x0b.VO\xa3[\xc8is\xf8\x9d=\x92\xcb\xfe\x86\xd2\x0ey\x19gC\x028\xcd\xa1S\xbe\x8e\xa3\x13\xf3\xd4\xe0\xf2\x90\x8a\\vA\x92+\x85\xb9\xc6\x05\xfc\xd3\x1f.\x98\xf3\x0e\x0b\x99o\xf5n\x10e\xef\x06tF\xe9g\x8f\xba,\x14d\x96-e\xf1\x17\xa5\xf8\xf7\xdb\xb7\xc7\xbf\xbc\xfe\x06gV\x90\x171\xfev,\x11X\x91\xe2\xfc\xe3\xe9x\x0c#\xc6\xfb\xabh\x04\xc5] \xee&\x1a\x1a\xca\xff\x8b\xab\xa1\x9b\xdc\xfe}r\xfb\xf7U \xd9\xc0\xf31\x8a\no\xdb\xf2\x1e\x87\x94\x9c\xbe\xd3.\x15\x19p:W\xab\x91_\xae\xfc\xb5\x16.\xb7\xf9-$\x7f\x1f\x15M\x0f\x05 W\xf60\x0d\x0e\xa0l\x803\x05\xf46\xe4D\\\x8a\xdfG\x0e\x04\xec\xea\xe3\xc4\x0bz\xc7_\x9b\xe6\xb7\xc4\xaf%\x92\xfb\xdf]0\x170w\n\xd6a\xb1z\x10\xddO\xf4\xcc\x1f\xb5\x8cCr\xe6\x1eV\xa70$k\xe5U\x9enE\xda\x7f\xc98ti\xf4\\\xca\xa0g\xafr\xd2\xcd?\x95\x17#\xc9\xd2\x01\x9e$7\xaaT\"\x8d\xe2\xf2\x85I@\xfeO\x9a\xf2#\x0c\xea+D6[f\x87_\x85\x8a(\xe6\xa440\xd3T:B\xbc%\xb8\xfb\xb6\"\xee\x96\x82L\xdb;9\xd0D>\x97\xe2\x9beQ2\x96\x87\x01\xfag^ \xf2\x9f\x1d\x84i\x82W\x9e \xa2\x04\x82'\x04\x82'\x95!X\x96\x0e\xc7xx\xe8\xcb\xe6nj\xa7o\xab\xb5\xf0\xe0\xd4\x9fh\xe6\x934\xb4\xc2\xc0\x9f\xf1*l\xf8 \xf7|5(\x82\x1f\xd0\xc8\xe3T\xf8\xbd\x1e\xed2u\\\x19\xef\x1aM\xd9\xd9\x8cVN\xdd\x1dL\xc5\xf9[\x94\xab\xfb$\x9fc\x9b\xa7\xd8F<\xf7\xb9\xd4\xb1\xd5j\xbaf\xe8\xc9\xf3\xaa\x03\xc0S\x99\x99\x9d&A-l\xd9\xd4\xf4%w-o*dYG\x84\x14\x1cU$\x05\x89\xe7VrP*\x8fL\xd3\x04P\xb6|LZ>\xae\xd8r*\x98G6XnE\xb1(\xbb\xd0\x08\x8b\xa3\x03\x96]\x9c\xa7o0A9\xac\"f\xb0\xf0<\xec\x175\x80\xa6\x89\xec$v\xd4[qr#v\xd4\xeb\xf1beY\xcaD\x92\xbb\xaf\x84\xdc}\xadH\xee2\xda\xbd\\\xbe\xbe\xd2\xf7%\xa7E\xab$H\x9a \x06Kv\xd67\x17@\xba\x1c\x8e\xa7\x02\x8d\xfeNId\xae\xb3th!)a\x8c\xd4\x10Ba\xa5\x10B\x0fY\xd1MJ\x04\x81\xa4s\x07\x0bi_\x00D\xb7N\x04\x94\x80?a\xf1\xd6\x9dNK6en\xa2\xab\xa3i\xff\xbb\xa5\xafbr\xc9Q\xc7DS\xa5'\xde\x12\xd1\xd4H\x1cn\x9a\xd8\xd0T/\x95;\xbe\x14&K\x02<\xcb\xa9\xe2$\xc3K\x9e\x8aOU\xfb\xdau\xfd\xb3\xbe\x1e\x80\xdc*q\xc5\xc0\x03\xe2\xab\xd1\x94\x0bc\xdf\x11\xfa\xf1\xae\"\xfd\xf8\xc7\x84\xa3\xff5\x84\xb1\xe3R\xf4\xae\xe8\x13\xc3\xecI\x0f1\x1a\x17\x18N2[\xe4\x80#,\xf5>\xaf\xd5T\x9f\x99L\"\xfc\x94\xa3L\xfa\x9d\xfd\xb79\xcb\xb0q)6\xca\x05\x96\xc8\x8f\xa4v+\xd9\x0c\xfb\x8f\xb2\x17N\xd5^\xd1\\8\xc5\xbe\xd0\xad|\x81\x13W\xa0\x14\xfc\xb3f\xc5\xf9\xaa\x85v\xc6\xa4\xb6bf\xac\xd4\xa2\xe3\xbd\xbf\x97\x92\xf0r\xa3\xe3\xf21\xadL\xcc\x87\xdf\xfeH_]\xa7]\xa2\x9df\x10:\x81@\xeac\x0f \xd5X\x7fK\x06\xa0\xd8<\x9f\xb7\x9eX\x0b\x17\xdb6,5,\xc5y\xe51\x90V\xf0\x84\xff\xad\xe4)\xf6\x15r}\x7f\xcc\x8c\x14t \xf5\x98\xf9.QVYm\xae~\xbc\xcf\xbe\xfb\xe3\x9d\x8a\xcb\xcf\x188\xac\x81\x17\xf4\x0b\xcf\xe37\xd8\xa0\xc2\x1fITr\x84\xe4\xa6\xe4^;\x9c&\xab\x9a\xba\x16p\x97\x80\xf2[\xe7\x05\x04s2\x00>\x0e\x90d6\xa7_\xf8\xf5\x9c'C\xff\xab\xc4\xe0\xfa\xbf\xc0\xbe\x90\"\xd0e\xf6t(q\xb8\x95_\xad\x11\x8c\xd9nP\xf93E9\xb7\xc2J\xaa\xdb\x82\x9b\xc1\xfe\xf5}\x11\x14j*\x96\xee\x08%\xac\x16\x86\xbd\xba\x08\xa8\x05\x12C$\xb2\xc7\xc8\xe7\xe3\xd1\x9f\xb5\xb2\x02p\xd2h\xeeJ\xdc\xce`\xea*\x88yJ\xb5\x84w\x81i| \xa7\xd4\x87\x15N\xa9\x01tQ\xbd$2\x0e\x19\x1b\xf4\x02G(\xd6\xe9\xc3\x82\x00>\xa9\x83\xec\xdb4HV\xe3\x85<{\xbf\x90Y}\xa98\xabo-z\xdf(='?\x7f\xff\xf4 -2W\xb5[QJPN\xe5\xe6)e\x17\xa4v\x85\x1fPo\x14\x86\xd7 \xee\xae\x19kA\xad\xb6\x16\x96\xf2\xa4Kb\xae\xf8\xa5\xfb\xe8\xb4\xec\xba\x17\x14?\x7fQ\xf2\xfcX\x180x\xfd\x85I\x032\xe8E:\xb8\xe2\x90\xfb\x07\x12\x0c\x84<\xc1e\xd5\xb8L\x92V\xe3\xb0\xa1\x9aU\x9fF\xc88\x0c\x8ei\x84\xf9\xd70@~\xad\xb6V\xd0TZ3\x87T5\xdc\xa2\xd0?\xf8EVm\xf8\xb0/kXAm\x18\x16\xa9\x0d\xff+\xaa\xfa\x8a\x82\xa7\x10\n+\xae\x9e\x0eJ\xae\xa1Es\xeeq\x8cZ{\xec\x12\x16\x0c\xe0v\xfaP\x89\xeb\x07K\xf4\x96L\xe2\x11\x12\xa4\xb3\xef\x96V1\xb96o4\xef\xbaT\xfdL>WL\x9c\x00i\x95\x1b&\xac\x08\xa9\xf3\xef\nRy\x1d\xc0\x0e\x93Y\x1b\x98\xf22\xe6\xdc\x851\xd2i\"E\xddAT\xbe\xb4C#\x9d\xed\xd0\x17\x18\x0eu\x87~\x13\x99\xb1\x1c\xd4\xcdBnoZ\xe2\x89\x94tm\x9aj\xab\x12u\x8bZ\xdb\xe72\x03\x07/D%\xce\xde=\xb6\xebE\xc9\x8ag\x15\x1b(\xbfYg\x01\x98{}\x07\x13\x9c\x98\x12\x08\xfb^\x80\xfa\x8e2\x03*\x92\"\xa0\\\xb0%\xe1\xfa\x9flCgR\x12\xc2\x8b\xac\x8eYW\xd3*\xe2\xbba\xa0\xfa\x8dSk9\xb0\xf7]\xe1d\x16#\x973\x19)\xae\"\xec6\xf9\x0e\xbfA\xfe\xee\x8b\xc09\xad\x1c\x8c#\xfb\xfe\xae\x84\x15H\xc1\xaf\x91g\xcd\xc3\xa5\x1cDfj\x9c\x9f0\x0b\x0e\x8e}?9t\xa9+\xd0\x08\x8f\xfd\x0f\x11\x9c8W\xd3\x85Y\xc4},\x19q\xe1\xf3\xdc\xa1\x1d \x99\xd6*X\xb7\xff\xbd\xe0N\xc9:\x7f.3\x8b \xf0_\xac:\xdb\xc3\xbfC\x02?\x90d\xeb-\x1a\x18d\x9e\".U\xaa3a%\x13\x06{\"l\x15V\xe6BM^q8y\x1d\x85\x138\x84\x0c*\xab\n\xdf]1\xd5\x03\xaf\x7f\x1cN\xd3\x196(\xf0b7\n}\xff0\xc0\xe1{\x0f\xdd\x1e\x0e\xe8X\x98\x85NI;\xef&\xfd\xd4TVj\xa8\xb8T\xae1eK1\xed(\x97\xccEh`\xb9\xd3(b\xd1\xbf2Or\x8d\x9f \xd4G\xfd\xec\x10\x1e&S\x94BQRE(\xd4\xad\x87G\xe1\x14\xef?\x90\x1c$\xc8\x1a\x01\x89E\x074\xa1\xa2\x83ybE\xbd\x0f1\xa4A\xeb\xeb^_\xa7G\xcd\x02\x14\x1d09a\xd8\xeb\x87\x0f\xbf\xe4(\xcd\x0b\xbfB\x96gL\x19\n\xcfU+\"`1\xc7E\xcc]7\xd1@\xc8\xec\x07y\xaa\xe8\xb9`\xce\xfc\x1a1%\xe5\x04\xc2\x94\xa4\xe3\xbc\xb2\x9b`$\xed\xef\x99]\xab\xf1\xd3p\x89\xa0(\x1f\x9a2\x89\xbc\x82\x95\xf0\xba\xa9\x10,\x0b. 1\x01\xb9v\xcaS\xf9\xe1\xde\xdeN\x95X\x94I\xf3 uv\x83d\x8b\xa6l\x04\xe4\xd3\xd5\x0f\xf7\xd7\xff\x08\xe1y4\xad(\xd9\xe3\xff\xd9m\xc9\xf8\xd9\x92\xed\x97`7Jc\xb7\xb0\xafPM\xeeR\xb2\x8c4\xa6+b\x8c\xfc\x06\xf4\xc5\xc5\x9e\xbc\xd6\x174\xf7\xde-+\xac\x17\xec8Y>Q\xe3\xd1\x84\x82\xc9\xcf\x02F\x81l-\x9e\x95\xd3\x85\xbek4l\xfb\x17\xad\xae\xb5\xb6&w\xa6N\xc6W\xba\xcfV\xc5\xc1\xb7\xdf\xcbQ_\xa2\x10\xa6\x01\x7f\xd9\x06\x8c\xba\xd8\x8a\xc2\x10\x03\xd8\xc5J\xb4\xa8\x98\xee\x92\xae\x8a#b\x07\xb3\x81e\x1e\x96!\x0fv\x0b)k\"\x10\x86<\xc6\xad\xd2&}\x90\x04\xf6\x8d\x17 \xda\xe5\xc9\xc2\x03x\xe3\xb1\x13[_8\xf3\x85 \xb2\x8a\xdee\xd6\x84\x87\xfc^\x1a\xb0K)V\x89\x0f*\xa0<\x8f\xf0\xf8>\xf9\xf6\xc4\xa7\x90\xc3\xf1\x06\x06kA\xd0\n\xa9Y\x1b\xa3`zN\x8dd\x85Z\\\x89\x9cN\xed\xfa|8\x89\x91a:\xe2\xb9a\xca\xf0\x9f\xa4\xb2\xecp/\xe8\x9fQ\xfab \xb0f\x9b F\xf8\xdc\x1b\xa3p\xaa\x1a\xaa\x11f\xeb\xf3\x94\xd24V\x98\x8c%\xf5\xc0\xe0W\x7f+\x867\xfcQ\x96\x06\xa2\\+]\xb4*?V\x81\xc8\x91\xd9\x95\xe1\xe9\x95\x07\xe6l\x00/9\xef\x9b\x1d\xae\x92\x9e^%\x11I2U\xaea\x9f\xdf\x8e\x10\xf2\x15\xde\x92\\~\xf2\xe7\xfc[y\x8dE%G\xa1\xe4r\xc8\xf6,v \x80eQ\x88\xa1\x0e\xe6\x18FC\x84\x1d\xfds\xcf\x87\xc1\xb5\x0e\"\xe4;z\x10R\x9b\xe9H\x0b\xc2\x08\x0dP\x14\xa1H\x07#B\xa8i\xc2\x93\xd8y\xfat\xe8\xe1\xd1\xb4G\x0e\xad\xa7oQ?t\xfd\xd9\xd3\x88|\xea\x0b\xa0\x1f\x84.ES:1\xedux\x8b\"\xd4\xd7z3\xed-:\x08]\xfd\x1b(\xfa\x8f\xd2;H\x18\x86\x92Q\xefn9\xf5v\xd9\x02\x1e\x94\x08\xb0\x8f\xa7<\xea\\\xa3#\xa2i'y\x02t\x99'\xc0hN\xee\x80\xa6\xaf\xd3\xbc\xbf\xa6\x16\x85\xd4\xe0\xb4\xb1e\xf7\xd1\xd0\xd4\x81\x92\xd1 I3\xa0\xd9V\x93\xa55\xd0\x17\x05\x8b\xb3b\xcf\x86]\xc7&\xed\xbdRw\xe6\x02\x1c\x17\x83\x8a\xf4 \x82\xaeb\x9e\xd7\xb0\x1d\x9cK\xfd\x9b\x04\xf8\xdc\xd5u'\xa2z\x06:\xccR[\x97\xf8f\x98\n\x0d\x18\xf2i\xc1\xfb\xfb\xf9\x02\xdcx\xe8\xf6yx\xe7\xe8\xb6fk\xdb\xcd\x0d\xab\xd9\xda\xd8\xde\xd6:\x9b-k\xb3\xbd\xbd\xdd\xd6\xc1\x0d\x8ab:\xa5\x86\xd5\xd0\x01)9\xb9\xd3\xc1\x8c\x7f\xb2\x939\x00\xdck=(\xd0\xe5\x91\xee\x0bA\xb8m\xb7\xad\xedf\xb3\xd1\x06\xf5\xad\xcdm\xab\xd1\xdej\x92\x13=\xd7\x00\x8b';\xef;T\x01%\xfe\x1bk\xf5\x8d\xcd\x96\xb5\xb1\xb9\xb1\xd1\x06\x8df\xb3amt\xec\xa6Vo\xb6\x1aV\xb3\xdd\xe9\x00\xfem\xcbni\x9d\x8e\xb5\xd1\xd8\xe8\x00\xb5~\x9dB\x03'\x11\xf6\x9as\x94^\xae.^,\x8a5e\xd9\xd1\xa1Iad\x01\xbe-\xf2\xb2\x83#9\x9b\xc57\x90r\x05\xf2\xe0\xfe\x99\xd0\x97\x9f+\xd2\x97\xcc\xfd\xad\xec\xf6$$A\x94\xc6\xf1\xe5K\xbc\xcbe\x10\xc2u\xac\x86\xd9K\"\xec\xad+\x9e\xe3<\x88a\xbe\xe8\x99\xf7\x15\xad\x17\xb8\x98\x17\x14\xfd@_\xbdE\xc3\xa9\x0f#^'\x9dX8]\x87\xbc{E_\xf1\xc2\xe2\xc0[\xc7E~\xe9\xeb\x99cP\x12\xd7\xe4\xc8\x8b\x90\x0f\xb1w\xc3\xce\x85\x82h\xe4\xe4\xb1\xe0\xba\xd9\xb4\xc7a\x88G\xcc\xef'=8\xf9&\x05\xa5\xca\xc5\xf5u#\xf5>\x9c`oL\xc8\xc0\x04\xd1\xb4\xdfdll\x0f\xd3\xd6R\xaf\xb55o< #\x0c\x03\xac;\xban\xae\x8b\x93\x15\xc3I}\xe4\x0dG>\x81\x99\xe0\x182\xe7\xb1\x99\xcc\x9d\xaci\x1d\xf6\xaf\xa61\x96\xcc-y\xf9\xafTv\xf5\xe24\xb3 \x9c\xca;mv:@K\xfe\xd8In\xf5\x85i\x82H\xa2\xfe\x17\x82\xfa_*\xa2~\xc2\x9b,[\xdb\xc2\xeb \xe72T\x9d\x9f\x0e\xf4,{\"\xafx\xec6\xa7\xee\xb3\xffH\xdf\x15o\x10\xe2\xc2\x96\xf0,`\xcd6\x8d\x0f\x04\xb6\x1f*\xc26\x7f\xd3Q\x98\x96\xfc+\xca\xb2\x84r\x19\xdf\x93\xae\xdeW\xec\xaa\xd0\xc5\xae8q\xb2\xbc\xf3&\xac#\xfb\xc5\xd9\xd6T2\x10y\xf3JS\xc8\x7f\xaa\xbb\x07\x16\x8b6A-\x99\x1f\xba\xf1\xa5I\xb770\xb0Z\x99\xf6n\x11\x96\xeb\x83\x87G\x86\xfe\x8bn\x8a@\x11\x13\x18\xc5\xe80\xc0\x05\x15@\xc3\x16\xce\x02\xecT\x95\x98\xb8\x8e\xd3x\xb4\xae\x9b\xda\xbf\xc8a\xfb\xb4a\xdb\xf4\xc0Ml 2\x8dr\x94#\x9c\xf8t\xccp\xee\x15A\x84W\x15\x11\xa1\x88c/b\x95\x95\x97\x14\xef<\x89w\x1fIw\x1f+v\xa7&0NG\xb5+xC#\x11\xd2~\xbc`2\xc5\x16\xc48\x8aSJO\x06\x16\xd5\xaf)F0rGuZ\x81\xeag\x8c_\xc9\xf8~\xad8\xbeb:1\xb939B\x96\x12\xe4$P\xb0p\xa0\xc9L\x89>&\xdf\x18`\x93R\xe9\xa4:\xa9\xbc\xdeJDbY\x8b\x96*\x8cb\\\x1cnT\x8dd#b\x18?\x98 \x87\xaat&0\x92>I\x99\x0bsV@\xf8\x03^\x0f\xc1\xab\x842m\x958S\xad\xe4\xa1\\X\xb8\xb9J\xe1j-\x17\xf1\xb3\xc6{\x03\x97\x89\xd1\xccgVg\xf7\x83\xf3\xc64\xac\x06(/U=\x04u\xe5\xe8\xd3\xa2+\xc2gq\xfan\x82\x98\x90\x92J\x9e\x139\x15\xab\xaa\xb2M\xabOS\xea\xd6\x86m\xb3?\x89Z\xf5n\xec\x071S\xea;O\x9f\xde\xde\xdeZ\xb7-+\x8c\x86O\x9b\xb6m?\xa5\xfd\xcc\x84L`\x89\x9e\xf4x{c\xcbj\x82\xad\xf6\xb6\xd5>\xda\xd8\xd8\xb4Z\xa0\xd3\xdev\xb7Z\xd6v\xbd\xd1\xda\xb0:`c\xc3\xda\xac\xb7\x1a\x9bV\xbb\xdeiX\x9b\xf5v\xabcm\xec\xb777\xadF\xbd\xd9\x01\xcdN\xd3\xea\x90/\x8dF\xcb\xda\xa6\x7f\xdbn\xbd\xd1\xda\xb2:\x80\xfcm\xf1\xef\xad\x8d\xa6\xb5\x01l\xd0\xb1\x1b\xfb\xcd\xc6\xb6\xd5\x04\x9b-\xdbj\x80v\xa3E\xbe\xb7I\xbf\x9b\xd6\x06\xd8\xd8\xd8\xb0:~\xcbnX\xdb\x80\xfcm\xbb\xed\x96\xb5\x01\xe8\x9f\xcd\x0d\xd2C\x9b\xfc\xb1\xdbV\xb3\xdehZ\xed\xfd\xed\xad\x06\xd8nnY-\xd0\xb0\x1b\x0dk\x0blm\xb7\x802\xab\xaf\xdaq\xa7\xd9\xb6:\xa0\xd3l\xba\xf5\xad-k\x1blmY\x9b\xf5f\xab\xc5\xbe\xb4\x9a\xa4\x96\xcd\xde\xd5\xe9#\xfa\xad\xd9\xa2#\xa6\xef[\xae| \x9a\xad\x16\xfb\xc2+\xeeo\x909\x83\xe6\xd6\xb6\xd5\x06\xec{\xbb\xd5\"\x80\x14\xdd~\xd5y\xc0\x0cv\xd0\x14\x1d+nH\xb8g\xe3\x0d9S\xdeT`\xde\xbb\x86i\x82\xd6\xd6\x8a}\xc3;\xc3\x06\x85\xbd\x97w\xd2h\xa9\x9dHUdz\xa8\x17\x85\x8d^R\xd9\x15\xab\x12u\x05\xec\x87\x08\x93\xf7\xcfg\x87}\x03[c\x84\xa1\xb9\x13\x11\x90\xe6\xfc\xf5\"s\xb1\xa0\xc1])\xff[h\xe7\xca\xec\x9bY\xa0\xd1\x1d\x11\xcc\xee\xdf\xad]\xbe@o\xd9\xf0\x0cl:*l(\x86`5\nZ\xe2\x92\xc1{\x13Q\xd3\xe4b\x91:\xcc\x8a]F\x9b\xad\x82s+F\xa0UG\x9d\xb6\x8dO\xebC\xb3]\xa3E*\x12j\x0e\xbfSN\x82\x08\xe7{\x00\xb8\xb4\x8f\xe2\xb6i\xcbY\xd5h\x1av\x05+F\xb7\xb9\xaa\xe0\xa4\x15\xf8\x87\x81LBP\x02\xe5\x9a\x1c\x98s\xac\x0c\xd8\x08X\xbe\x92\xd5\xf5\x9d\x05\xe8\x99Vu\x8aM\x97q%\x91b>\x16\xc3\xa0\x1c\x87A\xec\x86\x11r\xb0E?\xd5x\x81\x81\x15\x87\x11.\x89\x80\xc8\xcb\xd7\x11\xafW\xe4\xb24\x01\xdc\xf3\x85\x81I\xe7\xda\xcd\x04/\xf3\x8ewnV\xb3I\x11k\x01\xf4\xff\xef\xff-\x08\xfa\x14O\x00s\xef\xcb\xf9\x16L\x80\x1a\xf77\xe9\x11\x84\x01'\x95\xecM\x8az\x82\x89\x0f]4\n\xfd>\x8a\x1c\xfd\x8c-\xb1e\xe9\xcc\x03\x92\xea\xb7\xf4l\xe8_Z\x88R\xe8ro\xc2+\x0f\xccW\xf4\xb0\xf0'`\xce\\B \x04u\x01B\x87\xaf\xb6\xbe\xc89\x0f\x05 Z\xea\x04:%uk\xe3\xdd\xb88\x90\xfa\x01\x02sv\x8d\xf3\x97\x99-\xe6\xeaM&\x02\xd1\x02\xe9\xcc\x9aB\x152\x0b\x953Q|g\x19\xb8\xef\xef%\xd8\xd9\xd0\x08\xd4^DQ\x18\x19\xfai\x80\xb4p\xa0\xd1\x85\xd2\x9e\x90RO\xb40b\xdf\xdeE\xfe\x13\xed\x16\xc6Z\x10b\x8d<\xf0\x06\x1e\xeak^\xa0=\xa1\x96\\O,\xdd\\H\xf0\xfd\x07\x87 \xd6\xcd\xb7`0K\xd6\x8e\xfe,N#\xd2\x9ft\xf5\xa6e[v=r\xad\xb6\xad\x83\xd1\xa4\xab76{\xdb[\x9b-}G\xee\x9d\xf1$Y\xf3\xd4\xe6\n#\x83=\x9d/(\n@\x8c#\xaf7\xc5(\x06Q\xd7\xde\x89\xfe-\xb8\xa0\x9dh}\x9d\xb5\x10v\x83\x8b\xe8r\x07_\x84\xd4C\xfd\xb2\x1b\xb2K\x8fT\xce/\x0cd\x82\xa0;_\xec\x88\xe6#2Ql\xce\x83\x8b\xc8\x8a\x10\xe5\xc9\x8c\xa7u\xc32\x9f\x0eA\x193\x9a\n\x83\xbd0\xcd\xcb.\xbe\x88.E'\xc1B\xcem8a+E\xb8%o`$\x8e\x86\xb5\x9aA\xe6e\x02\xf9( 7\xd3n\x80\x0cvZ\xe8&\xcb5A\xde\x98x\x14\x85\xb7Z\xb2\x9cOt\xc4\x10W\xd7\x04]\xd1<\xb6~\x93(\xbc\xf1\xfa\xa8\xaf\xc1\xa0\xaf\xfd\x9b6\xf5L\xc3p(\xde\x0f\xc2i\xd0\xd7\x08\xc9\x1a!m\x02\x87\xe8 s\x06\x82\xc0\xdf\xd1c\x1cy\xc1P\xefv \xd5 \x07\x1a\xda\x85]\xe4\xe8!\xa5Q\xca\xe3Z\xcd\xf0\xbb\xc8\x14\x1c\x93\x88\xa9m\x1a\xd9}5\x98p\n\xe0'\x18\x13Il\x86\x12\xa9\x14*(\x1c\xdf\x0b\x1e\xcd\x17\x00\x9b`<1h\x98\x81\x0b\x9d\x93(\xc24_\x9a 0\x13\xb8\xcf&b\x87d@\x9e\x82\xef56L\x1e\x05\xfd\xc6\xb7\x06Q8\xfe\xed\xcc@\xe6\xce)6J}\xb8I\x9dd\xde\xa3Y\x9f1\x91\xe5\x04%\xa2\xc1\x1d\x03\x13\x90V\x17&\xb0\xcd\xc5Z\x8e\x90+\xc3\xda\xf1\x06*\x0d\x1c\"\xbc'\xf0\xde\xd0 \xe4\xea\xd3\xc8\xd7\xcd\x1d\\\xab\x0d'\x06\x06s\x1anka\x98\x8bK\x9a\xa6\xe0\x7f<}\xfa\x93\xc6\x82<\x1d\xc3\xc9\xc4\x0b\x86\xef\xde\x1eui\xe3\xe4f\x12\xf4\xa1\x1f\x06\xc8\xba\xa2w\xb8\x7f?e\x81\xaf\x9e\xfd\x9b\x8a\xc34\xcaD\xd3\xaf\xfd\xae\x8e\xa3)\xd2\xd5Gu\xaeW\xed\xea\x1d\xabi\xd9\xfa3kt=\xf2\xd1\x1e\x0f\x15\xa1Z\x18\xb4\xed_\xcc\x1d\xa1P\xb0\xb5\xb6=\xb9\xdbY<\xfd\xd7Z\xec\xfe\xeb\xe9\xffP\x8d\xd2A\xecF\x08\x05\x14]\x8d1\xbc\xab\xb3\xb66;\x11\x1a\x9b\xf3t\x07\xd4\xb0J4J\x9a\xe4\xed\xca\x86\x95\xb1Z\xc3\xf6\x85\xd7\xef\xea\xb1[\x1f\xfd\xferv\x18\xea\x972\x84\xad\xceZ\x05\xba\xach\xf5\xdd\xeb\xb3\xd7\xde<\xd5\xb8\xbd\x93}\xafd\x84\x9d+\xea\x0e\xc5\xfev]kL\xeeL\xa5b\xec\xd6\xd1\xfe\xde\xe4\xd7\x13\xed\x99\x96\xfc(i\xc8\x0b<\xecA\xffQ\x90\xca\xcc\xc0V\xc0by7\xc1\xb4\xe7gg'E\xb9\xd26/[\xe3{\x9eofN\x05\xf3u\x82\x10\x1b\xac\xe7pP'\xb4\xcbd\xc9w\xe7r\xe6R\x86\xcd\x15?\xf6\x8e\x82iB\xa6\xcdd\xd9\x02y\x9e<\xd9I+\xaa\x92\x8c\xe4\xdc\x8e\x94\xfe\xcfj*PI\xe1eG\xe0%\x03\x8d\x8a\x97l\x0d\x01\x1b\xbe\x8a\x9e\xc3?~?\x0b\"\xbe\x0d\xda\xf6/;\x8c\xc9\xf9i@\xff\xdb\xc9\xa9\xa0~jn\xb4\x9a\xad\xado\xb1\x03S]\xaf\xb6\x037\xc4L\xaf\xce^^\x8f\x7fWg\xcaZU\xa7\xb8\xe7\xe3#\xae\x0d\xa4\xf64u\xdaW\xb2IS\x8b\xcb\xf71-\"\xf6wJ\x89)\x0c\x05Uv\x80\xf5\xc9S\xbc\xcf\x95\xa3\x81\x13\x85\xce\xe4nGt@\xbe+d\x8d\x02\x84[\xb1\xab\xcf\xbd1\x1c\"g\x1a\xf9\xc6\x13\x02\x0c\x87\xfe~\x1a\xdf\x0c\xd7\xef\xc6\xfeN\x0f\xc6h\xa3\x0d^\xbf:i~\x9a=o\xf7>\xdcM\xdd\xaf\xb6\x07_\xbd\xb5\xdd\x83\xf0\xe6\xa8\xd5o\xf5g\x9d\xd6\xf1\xacs\xe3\x8e\xdd\x9b\xe3\xab\xbd\xdb\xe3\xfd\xed\xaf\xfd\xb1\xeb\x1d\xbe\xfa\xe4\xbb\xc1\xc9\xa4\xd7lo\x1f^\xbd\x98\x1e\x9f\x1d\x0e\xd1\x81\xed\x1d\xef\x1f\x0e\xd19\xfb\xec7\xfd\xeb\xfe\xaf\xc3\xed\xc3\xabww\xc7\xde\xe1\x10\xfe\xfa~\xf2\xa99\xb2_\x9f\x1d6\x8e\xcf\x0fI\x1b\x93O\x7f\xf4\xf7{-Rfox\xbc\xbfG\x9e\x0fO\xce_\xcc\x0e\xbd\xe7~o\xfc\xd2\xeb\xfd\xfa\x0e\x7f\x1c\xbf\xbc\x82\xcd\xfe\xac\xd7z?\xfdt`{\xbd\xf1\xfb\xd6\xe1A\xae|\xbb\xf7\xe1v\xc3m=\x1f}l\xbe\xdb>\x0c\x9e\xcf>\xfdq\xe2\xbb\xc1'\xff\xf0\xaa\xbd\xe5\xfe\xfa\xd2\x86\xfb\xcf\xc7\xf0\xc3]\xfc\xfa\xec\xf0\xea\xf8\xe0\xc5\xed\xf1\xf9\xde\xdd\xa1\xf7\xfc\xfa\xf5\xd9o''\x07\xef:GW\xee\xf0\xf8\xea\xf8\xeb\xd1\xd5\xdb\xf8\xe8\xfc\xfa\xf6\xe8\xea\xdd\xf0\xf4|oz\xf2\xe1\x18\x9f\x9c\xef\x0dO\xce\xf7\xf0\xf1\xf9\xf1\xdd\xe1\xc1\xbb\xdb\xa3\xf3\x17\xed\xe3\xb3\xbd\xdb\xc3}\xbbutu\x8dOf\xed\xf6\xd1\xf9\x0b\xfb\xe8\xfcE\xf3\xe8\xca\xc5\xc7\xe7\xd7\xd3\x93}{vr\xd6n\xf7\x0e\xde\xcc\x8e\xae^\xe0\x93\x83\xc3\xe9\xf1\x87\xe3\xd9\x11\x19\xf3~\xbbqt~<=\xf6\xf6\x9aGWCL~\x1f\x1e\x1cNO\xcf\xf6:GW\xd7\xc3\xd3\xfd\xbd\xbb\xd3\xb3\xf6\xd7\xc3\x83\x17\x8d\xa3\xab\xe1\xf0\xf8\xca%eg'g\xf4_\xf3\xe4\xac\xdd<<8\xb4iY2\xc6\xb3\xbd\xdb\xde\x01\x1d3\xe6c\x9e\x9d\x9c\xd9\xbc\xbc\xcd\xcb\xefa^\x16\x1f_\xbd\x99\x9e\xd2\xf7\xf4]\xe3\xe8\xfc\xb0!\xe6|\xfc\xeb->\xfezH\xfa\xfbz\xec\xb5g\x1fg\xf6\xec\xc4k\xdf\x1d\x9d\xbf\xb8=\xba:\xc4'\xe7o\xa6\xc7\x9e}w\xec\xb5;G\xe7\xc3\xbb\xa3\xab\x8f\xf8t\xbf\xdd\xe9\x1d|l\x93\xef'W\xc3\xe9\xc9\xf8\xb8q\xbco7\x8e\xf7\xf7\xee\x8e\xbf\xbe\xa0\xf0;>\x1f\xde\x1d\x1e\xdf\x9b\x1d]\x1d\x0f\x93\xdf\xc3\xafGWo\x86\x99\xb5\xd88??\x9c\x1d\xef\x13X\x1c\xb7\xc9xz\xfb6\x1d\xd7\xe1\xc1\xf1\xec\xe8\xea\xb7+2v\x0e\x0b|r\xf5nzB\xe0\xb4O\xc6\xc6\xe7\xb3O\xe6\xfbN\xfe\xe3en\xd9\xfb\xf71\x83\x89\xdd9\xdeo7>~=l\xb0\xf6>6\x8eXy \xdf\xc3\x03wz\xba\xbf\xd7\xa2\xebqN\xd7\xea\xeedF\xc6\xa1\xac\xd1\x19\x99\xd3\x1b||\xd6\xb6\x0f\x0f\xdeLO\xf7\xed\x19\x19\xc3\x89G\xf0\xe3\xcd\xf4\xe4\xc3\xad}La\xf9\x86\xc0\xb5A\xca\x9e\x9e\xb5gG\xe7/(\x1c\x8f\xcf\x87)\xdc9\xa40\xa4\xff\x04\x1c1\x87c)\x8e2X\x13<\x150\x7fw\xcb\xfe\xbd\xf8z|\xb6G\xd7\xe4\xf4\xe0\x05Y\xe7\xe6\xe9~\xbbytN\xd6\xed\xd3\xc1\xf1\x95k\xd3u\xf8z\xdd8\xbaz1<\xbez\xd3$\xebq\xfc\xf5\x9a\xae\xd3\xf1\xd5\xe1-\xfd\xfc:$p\xdf8\xf4\xb6\xd6_3z\xb0\xbe?\xecv\x9f\x98;\xe1\x04\xba\x1e\x9e9\xb6\xd5\xd9Q\xa29p\x87\x9cBJ\x981\xbe\xe0\xb6\x17\x92*\x8e\x1a\xccR\x8as\xfen\xf45|7q8\x91\x04\xa3f\xf2\x96\x93O\xf1J\xfc\xa6\xef\xc5\xd3\xb92(\xfaU\xed*}\\\xc8\x9b\x1e\xeb2u\\\xd0\x96S\xc7\x85\x7fr\xfc\xfb\xfe\\P\xe7\xad\x89\xe4\xe4\xc8\xd7\xe2)\xb2P\xa0\xd4\xb2dG:u%\x81\xa7R\x8f\xd2\xf1\xa7\xea\xe1\xb4\xb0JY\xd1\nEr\xbd9,\x04\xd7'\xa3\xbeMcpQf\xb1\xfcm\xf9\x9b\x04H_\x0f_\x8c\x0f$\x8c\xac\x0e\x1a\x0b \xd1\xef\xcb\xa0D\xfd\x04\xff\xcf\x01\x926 \xfd\xd90\x0c\xe6\xd4\xf0\xf6\xa7F\x7f\xab\xd1\xdcT\n]\xf9\xefN\xce\xcf\x7f\x80r9(\x19\x942\xb0\xec\xb7\x1b\x83\x86\xabr]/\xa7\x1f\xef\x82\xb9\xca@*\xcc\xdb\x7f\xe9\xadk\x97A\xd1.\x02\xa0m\xe6\xa0\x92\x86\xdd\xed\xc8\xc3\xaa8\xa7\xff\xe1\x8f\xd1\xa7_W#z\xdf1\xb4\xbe\x19\xe2\xa5\xcf\x11)\x99\xe9\x1f\xc6{\xa9\xcb1;4\x00\xdd\xf1\x80!+`p\x07\x0c\xb4\xea \xd3\x1b\xcc\xc2\xfe\x17q\x03\xa37\x90\xe4\xfe\xf5\x13l\xc3\xb6\xbb\xb1\xa3\xf8])nWy\x91\x9c\xb8\xb54\xec\xc9\x9d\x96\xfcQ.#8r\x06^\x94\x08\xb9\xf8\xf1;z~\xfc\xde\xfd\x04pd\xf90\xc6\xe4a~\\\\\x10a\xab\xf7\x109\x04\x1cN\x98\xd3\xb7\xf22B\x13\x04\xc9\xcd\x8f\x7f\xcb]l\x1at\x80\xf6/\x15\x877\xcf]\x80\x08\xbb\x01\xa3\xfa0\x82}\x0f\x05\xd8\xd0p\xc8\x9dL\x81\xea\xc2\xa5\xd9\xbf\xa4\x7f7ilH\x0e\xdd\xcc/*\x936\xd5!I\x98\x04\xad\xe9 \xf0(\n\xa7\xc3\xd1\xce\xd2\x97\\6\xd3\xeb\xbbn\xbfU\x02\x9a\xa6\x94\xf9\x0c^\x9e\xbd\xedOU\xd0\xb01\xa5(\xc3\xcd\xe1\x97W\xb0T6\xf3\xd3\xf6\xa0\xd7\xeee\xf6\xbc\x10Iov~)!\x1a*2\x88\xf8\xc5\x14\x05z\xd7\xbd\xab\xbd\xabLw\x14\x0bJ&\xd3\x10\x93a5S\xebL\x87\x9eb\xa4]\xf7p\xf2\x9b\x90`q\xb2\xb6|\xbdR&\xda\x8d\x94\x00\x887\xe7\x14\xc8TV\xb8\x8b\x08\x99\xac\"~II_\xe48\xf3\xfd2\xcd\xc0_\xea\xb6\xb8+>\x90\xcdRqWS\xca\xf7<4\xfe\xe3x/u\xf0\xd0\xd1\xa5ph\xfa\xfe\xc3\xd1T,\xaa\x08R\xed\xc4h\x02#\x88\xe5\x06\xe7\x81\xa8\xe4\x1eb[\xaaM\x86\xc8\npk\xf4\xb4\xca#\xdb\x8d\xf6L\xc3Qv+g\xef}\xa2\xacEO\xce\x9b/W\x13\x90\x7fT\xfc\xb5r\xc1\xe2\xaf\xf3Dt\x99\xc6-;\xb5\x10\x03H\xfe\xb7l\xc0\x7fqH\x8f\xa9S2\xa3\xd4\xb8\x97I\x85\x9b\x89~\xf3\xd5\x8b\xab\xbdqj\xb3\xd2\xd1\xa4\x84\xf9\xde\xfb\xd3\x17{sU*JwIFxK\x89C^n\xfb\xb0\xec\xbb-E\xb6W\xeem8\xe8\xa5D\xf5\xb4\xef\xd4\x11\x81\xc2\xfd/\xbe\xf6L\x9b\xfas\xdf\x8b\x853\x06\xed=\x11\xd3\xf2\xc5M\xbeh\xf5N\x8ad(\xcdh\xcf4?Q~v8\x9bT\xbc\x87\xf3:\xa6F\xa3\xb1\xd9\x80\xd5\xf4z\x1ds'#jV\x1cZ\xb8?\x8b\x10\x19\xd3 \x89c\xa4E\xfe\x97\xcc\xa5\xc3\\\xe7\xb5\x8e\xdc\x92\xeaI`o\xda\xdbv/\xb3\x99I\xd1\xb1\x17p\xae\x8dF~K\xad\x15\x1a\xa7\xe4\xf3\xd4_\xbe\x1cZV\x84\xa0\x8b\xeb\x18\xf6\xe2\xcf\x9f1\xec\xd5yp=\xd4\x174\xbdE\xff\xdbY\x86\x92+\xb4\xea\x0cBw\x1a\xcf\x05l\xe0\x14\x87K\xdaq\xc2\xc0\x9fq\x8d\xb1\xaa\x1ac0\x15\xea0\x8e\xb0\xf2[\x02\x9d\x86m/\xc5\x15\x8b\x8c-\x9e\xba.\x8ac1\xdf\xdc\xe5\xbd\xb0R\x84\x98\xb6-\xd1\xdd\xc0\x8em?T\xcb\x0b\x06\xa1\xa8\xb1\xb5\xe9\"\xd4{\xa8\x06\x8a\xa20\x12UrwaY%\x07\xf0 \x0c\x90\x9f\xa2#\x1c\xbd+W\xd6\x9ei}\xef\x06T(6\x89\x90\xdct\x94\xa3\x93{v\xc5\xce2m\xd9ed&\x11\xf5\xc1\xe8\xd7\xbd\xd4Q\xc9\xfaI\x91\x99\xd3Oo\xee\xce47\xec\xa3\x0bjs\xfa\xaf\xee\x13\x1f\x06\xc3)\x1c\xa2\xfa\x93K \nL\xa2\xc2\xf7s\x16\x02\x8aEo\xb4\xb5\xbamQ\xe5\x98\xd5Dc\x8d\xd1Be\xe7\xd3\x9b\x92\xca\xcfN\"\xb4s\x1bF}y\xd0ru\x19}F\xa3\xe1\xa6\x9e\x10\xe6W\xf6\x82\x98f8\x96\x97\x1b{\xd0\x83\xf0\xc1\x01j\xeb\x1a,\x1dd\xd1K6\xd0\xa27d\xb0E\xcf\xf9\x80\x8b^\x89A\x17v\xa4\x8c\x90jS0\xea/\x1diY\xa1d\xc4e%\xc4\xc8\xcb\xde+3(+\xa2\xceD\x94\x91\xb8\x85\xfa\xcd\x1e\xdc)\xbb\xdd\xcb|\xa9\xb9\xab}\xf2\xe6\xa1\xdd\xc1'\xc9{\xcc\x8aR\xd3uX\xca\xbc\xc1\x0e\xff\x15\xa2\x08\x1d5\x8f\xed:\x1a\x02\x8c-l\x1bC\xe6F\x00*\xbc\x11\xb3y\x05\xf3\x8c\xe1\x16\xd6\x19|\n\x91\xa8\xc8F\xe6j\xfc\xe1\xdd\xae\x8b\xa9\xb5u\x1ff4\xaa\x96Bv\xcbc\xb6\xf4T\xa3\xf6.G\xda\xcd\xdd\nx-\xba\xf4\xfb\xfc5\x1f\xfe\xecD\xf2\x94\x9f\x9b\xeb\xc4\xe2#a\xe2n\x0eI&\xf5$I,\xb5,pr\x15\x93ckK/\xb5\xdd\xba\x97\xc6W\xc41\xad\xf8\xbdI\xe2^D\xba)\xae\x92\xdc`A\xdb\xe1QnG\xf299\xd7'\xfa\xf9\xeaM\xcd\xebX\xf6\x86_C\xef\xe9M\xedA\xfe\x80\xa2\xdb\xe91E2\xf80\xd1\xe9x\x1b\x81@I\\\x9d\xe4^\xbd\xd7R&S6\xef\xea\xbd\xea\x9aaQ\xe3VA\xd2d\x95\xc4\xcd\x9c\xdcgBb\xec\xdb>I1\xbb\x18z\xa3\xde\xd6}N=\x8cq\xcaut\xe8\xdcWeA\xfd\n\xa20$K\xedt\xe0v\x8e\xda\x8b\xe9\x83/\x1d\x0e#\xe1\xb0[B8hzM\x96E/\xf5~\xceK\xae\xfc\xca\x0b\xe9\x81\xef-\x0c\xc5F\x19R\xc5\xdf\x89\xe0e\xf2\xd9\xad\x95y\x11\n\n$\x18\x1c\xcd\xe0\xda\x93\x93\x93P\xeew\x12\xce\xbb\xf4\x0b\x99|\xe2\xa4\x95y\x0b\x0b\nL\xedR\x1ec\xc8.\xf9r7\xd1\xa3\xff\x9b{\x8e\xd4\xf4\x1c\xfd\xd7\x14\x9d\xfe\xdb\xaf\x04@\x90\xea;\x0e\x0f\"'\x86\xef-\x89/\x11P~\x16:\x18\xaa\x95\xd1.\xe6\xe2\x99\x16\xd6\xbf\xb5rnUzXr!J\x18\xee\x1bX\xac\x87\xad\xad\xdb?D\xef[\xbf\x13\x87=\x99\x9b\x89\x08\xe0\xf0\xe6\x83x\xff\xab`\x1dQ\xf2ya\x9c\xabw\xfe\xfd\xd3O#\x11\xe7RM%\x97\x1f\xfc\xfc\xe1^\xfd*\x81,c\xa9\xfcYh\x99n\x109\x89\xb5H:\x1e\x12\xae\xfe\xc9\x94\x1ev\x1e\xb8\xa0\xa0\xec\x02\x88\xd8&wy\xdd\xd8}`7f\xadk\x08|\xfd\x99'\x1b\xcc$\xa1\x9dw\xb0w\xb2w\x90\x05\x05\xe9u\x02;\xc1B\x81\xa9\x81\xe0\xa4\xb0\xdd\xcd\x0b\x81\xa4\x1b\xed\xc4\xd7\x13\x1e$\xc3\x9aa\x9436\xfa\x98\x9fU}n\xc9\x0b9\xec\xe0\x92_\xc5}M;u\xa7\x86\x8f\xe2\xfe\x82\x84S<\x14\x0f\xf7\x1a\xc6\xc7'\xc1w\xf9& \xb2\xe3\xdc\xa32\x04\xc9\x1b\x8d\x9e\xb1B\xe0\x96\xd7\xd1\x1c\xa6\x0b\x1a\x0b\xd3t\xd3\xd7\x93!\xf3\xa4\x138(\xacp\xe4\x0f\x8f \xf2+\x15\xcf\x0b\xe3ld\x14\x9bY\x85o}\xba\x1e\x1d\x1d\xc5\xf3U\x9e\xedG\xf11\xd3\xcc\x99K:\x1a\xfc\x8a\x96W\xa9\x80v,c\xc2\xefg2e\"\xa8\xeaY\xe1\xf0X\xb8\xa8P?u7\xe6=\xce\xe9zNS\xc9\xd6\xe2\xbf<\x0b\xb1\xc4=fedP\xb1$\x10\xcaY\x94D\xe9\xb1\xf1&\xfd\xdaSb\x0d\xfa\xca-!\xce\x16\xb6B\xde\x0bS \x82/\xd9L\x81X\xd7\xb4tM\x91#_\xe2\xaa.#\xe1\xe6\xe8W\xb5x1\xda\x0b4\x16\x005\x0cczK\xcfl1\xd4\x12\xfc\xbfv\xed\xdf\xf2\xdaMG\xfc\x93\x0d\x0c[\xa9\x0bf\x18+8t\xee\xf5\xa6\xe2\xd9\x98l.\xcf\x05-\xfeJ\xc7\x82\n\\[~\xd56\x1fb\x97lY\xd4\xbe]\xed\xea\xa5\xec\xf3a%\x13\xacd\x82\x95L\xb0\x92 V2\xa5\xd0\x7flES$,\xd3\x80(\xbe\xb4\xa9\xa0X\xfc^\xf9\xa5NAm<5\xa3U\xbb\x90\xf3.&M\x8cl\x93\xe9\xe0\xda\xf4\x82\xaa\xbfA\xb1\xc3\xe3\xc3c#^\x8c\xba\xbd\x0f\xc3\xd1\x02m5\xdd`Y[-,\x1d\xcb\x82\xfe5\x05F\xcd\xd5\xf2c[\x81A7Vo\x05\xfaO\xae\xad\x15\x18\xb0C=\xac\xc0h4\x0b\xb0\x02S\x8d\x85\xd2,}\xbd\xd0\n\xf4\x0b\xaf\xc4\n\xf4\x9f5\x8f\x15\xe8W\x95\x96\x9a\xffun+0l*\xd9Z\xfc\x97o\x05F\xf7\xca[\x81~\x9du\xb2\x02\xe3]~\x98\x15\x98j\xa9\xba\x15\x98l`\xd8J]\x98\xc3\nL\xb5X\xc5\n\xf4\xab>\x9a\x15\x98}>X\x81`\x05\x82\x15\x08V X\x81)\xf4_l\xde\x85\xe8\xbcT\xb19\xad@\xbf\xf6\"\xad\xc0\xa0\xc9\x99V`X\xb0\xd0\nL\xc6\xfa\xc2\xf5@\xc6G:\xa0\xfd\xe4\xd6]\xd2\xa8l\xe9V\x13\xbb\xdc\x11\xe3\xfc\xef/\x0b4#u\x83e\x8d\xbd\xb0t 3r\xbe\x96\x7f\xe5\xb2a\xa6\xdcc\x9b\x9bA7Von\xfaO\xae\xad\xb9\x190B=\xcc\xcdh4\x0b07S\x8d\x85b3}\xbd\xd0\xdc\xf4\x0b\xaf\xc4\xdc\xf4\x9f5\x8f\xb9\xe9W\x95&\xa1\xffuns3l*\xd9Z\xfc\x97onF\xf7\xca\x9b\x9b~\x9du27\xe3]~\x98\xb9\x99j\xa9\xba\xb9\x99l`\xd8J]\x98\xc3\xdcL\xb5X\xc5\xdc\xf4\xab>\x9a\xb9\x99}>\x98\x9b`n\x82\xb9 \xe6&\x98\x9b)\xf4_lG\x86\xe8\xbcT\xb19\xcdM\xbf\xf6\"\xcd\xcd\xa0\xc9\x99\xe6fX\xb0\x82\xb9\x19\xae\x0b?s\xbf\x7fL\xec\xc2\xa3[Kl\xbd\xfc\xe7\xdd\xd9?^\xf9\xb4\xd5p[\xb0\xdb\xe1\xd5\xe0\xaf\xaf\x89\xed\x97US\x89\x9c\xd8\xbbW\xe4\xee\xef\xc4F\x98z1Q\xdeb\xac\xe4n\xe9\xe1VB\xf4\x03\xfd\x93$\xf7\x1fS\xad&\xb6\x81ye]\xfc\x98eE\xa4\xac\x95\xb4Q\xe1\xab\xd1\x00\xa4fL\x86\xf4\xd3P[\x1fd\xf5\x9d3[\x8e-\xc0lnr\xc1M\xb6\x9a\xe1\x1f\x96\xb6\x15\x1c|\xe1O\xea\xc0\xc5\x93\xbc\xe2A\xbb\xe9My\xb6\xfeGz\xa9\xd8\xf4\xcaf\xa2\x87\xe9\x96\xfeW\x89\x96\x88eQ\x87S\x9e\xae\x8b\xfe\xff\xff\xf7\xffC\xffc\xfa\xa3\xe5\xab\x94\xd8ie7\x01P\x83\xd2\x8aE\x14\xb0\x0e\x90\xbf\x8fF\x03\xd8\x15\xdb\x88\xe4\xf7\xa4q\x10\xbb\x10\xe5\xf4g\xcd\xdb)\xcf$f\x16\xbc\xeaer{\x07\xad\xdd\xbd\xe3\xd6\xee\xfeI+a\xe8e&\xe6W\xf2\xf1\x87\xe9\x1e\x1e\xe6==\xb1\xd9\x8b\xda\x0b.\xb5\xe3Kl\xff\x08\xe7\x1e\x05\xff\xed\xe66f\xd1\x9c\x178i\xa1\x14\x91|\x86#&\xa8\x10\xee\x88\xe2#Z?\xc1_a\xf3\x00\xe5nE\xbb?%K\x99L\x88\xf8b\xd2B\x16\xa5\xf1^My\x8d\x02\x86\x9cU.\xd1~\xa6R\xb0\x88\xb3pz3\xebC\x02\xde\xd4\xd6Ab\xd9\xa6\xa9\x8f\xc1\x0dW\xabx\\\xdao\x8ar\xb1\x9d$r\xae\xf2\xec\xc5l\xa9i\x8dN\x11\xa2\xe1\x9a\x86\xef\xfd\xfe\xd5$q\xe6\x84\x1ef\xc2\xe1\x88\xf9\xe4\xd3M\xb4\xeb\x88\xdaBg\xa6\xa7i\xff\xb7h\x17\x9f\x9d`;\xc6$\xeb\x95\xf4\x9bM\xdd\x1c?e\xd4&\x87\x18.\xa3 \x7f0\xfc\xf5gB\xd9\xa9\x01%\xf4D\xef\xed\xab\xc1\xdfe\x1dyZW\xe4\xaf\x10\xfa\xb9Em\x93\xdc?\xeb(^\xd8\xea\x84\xdc\xa0\xca\xc7-\xcf\xc3\x9d\xc4 \x02\xc9\xd5\xb7\xfb\xd3V\xdf\x1e\x86.cF\xfaW_\x123\xa7\x06\x91\x18\xd6\x8f\x9b\xb3\xf1\xe7\xd2:\xfc0\xda,kx5|\xf9*\xd1\xb8j*\xdex\x7f\xf8\x85\x8e\xbf\xc6]\xbf\x9d\x83\xa9\xbb\xb7\x1dFg\x90\xbc~7\xf9\x98X\xd5\xa2\x1b\x8a7\xfd\xc6\x1a\x0b\xb7\xda\xd2\xeb\xc8\x98\xces>N\xd5\xfd)\xf5\x16\x99\xf2\xd3|\xaf\xf1\xae\xf9\xeb\xa8\xd3\x93\x9a.\xdc\x0e\xf6J\x8d\xf67\xee\xc4\xf67Nz\xaaRUR\x9b\xfd\x1e\xef\xc8\x7f\xd3h\x1cn@i\xdc~\xfet\xfb)Nc\xd5lb\xf6\xfa\xef\xfe\xb8\x19N\xd9\xb4.E\xc2\xf8;Wp \xc5at\x10I\xef\xea\xafW?\x12s\xac\x1e\x17\xef\x805:\xfb9\x0e6\x95Ro@g\xf7\xb8\x15\xfc\xb7\xd3>\x9e\xf6\x06\x1c\x85\x08\xf0\xd5\xa7\x1fF\"f\xa2\xdbL\x00\xcd\xbe\xf8z\xfe#\xdcR\xaa\x88|G\xa1P\xec\xff\x85\x7f\xde'\xf6u\xd4\xcd\xc4\x1b\xbe\x19]\xf1\xebT\xbb3\xfc\xda\xc9\xa7\x85\xf2\xc9\x1c\xff\xf5\xd7?\x89m\x12T\xdb\x89-\x9a>\xe1?\xfa\xd7\x0b\x9d\xac\xa3P\x8e|\x16\xff\xbc\xf9#\xb1K\x83zZr\xaf\xde\xcb{\xf2*\xb5\xcbVB6\xa76U\xf3]\x9a x\xb7\x93\xde\xd4`Z\xcfB)\xf4\xfd\xcd\x87aJ\xc4\xa9\x8e$\x16\xc0\xfd\xed||y\xf7+'j\x91\xab\xa0\x0e:-\xfd\x7f\x1d\n\xc9\xbfs\x92\x8eg\xe4;\xfcc5:\xb3\xa2*Q\x87\xa5Fz\xfb\xf7'g\x80\xfe\x17\x8a~$\x90\xf0T\x0e\x0d_p])\x11.TtHL\xda\x85\xf8\xf3m22\x97\xf2g\x17\xa8\xcf\xe3p\x17\x8f\xbew\xf5\xa9g%&A6\x9cx\xc9\xc4\xd7ww\xef\x7fe\xdd\xb2\xbe\xd1\x9a4ag\xf0\x89\xeeU@\xff}\xe7\x1e\x1d;\xf7h\x7f\x9a\x13u\x0e\xcb{\x8aE\x93\x1c\x7f\xa8\xaf\xfa\xc6\xe8\xc3\xe7\xc4\xeb\xa9\x87\x9bx?\xc5_W\x1f\xae\xfd\xd3\xbfN\xc8\x94\xae\x06|\x9f~K\xb5O;\xe3(W\x9b\n&\xd8:U\xaeh\x9b\xe9P\xe5\x1f\xfa\xc4\x8b\xde\xd6\xa3\x94R\xfcJ\\\x13\xdb8\x8er\xe2Q\xa8\xa9\x07\x17e7t\xcc\xf8\xd5\xf3\x05\x96?\xdb\x91Q\x14\xe3\xd1\xa4A\xa6\xe9\xda\x1e\x90\xbc#\xcf\x0e{=\xf3\xa0\x97-\xed0\x9e{B\xda\xfeq\xbf\xb7\x9bS\xdc\xcb+}\xd2;\xda9\xcei\xdc?\x8a3\xa7\x86\xb9g\xe0N^\xfbX\x18\xc3\xbc]\x0bvN\xcc\xfd\xbdly\xbd\xcfN^\x85\xdd#|\x84\xb3\x15z\x98Sc\xca\xaa\xecLa\x15\xd1\xc8\xe1\xb5N\xaf\xd7;\xcc\x16\x1f\x12\x9cc\x06\xff\xcb\xe8\x1c\x1e\x91\xfd\x9c\xe2\x8c\xe5\xb6^xzY(\xee{\x1c\x8b^\xc2\x16\xd1\xcd&\xc4\xbd\xf9\x87\xe3\xfe\x11\xc5+\xf3b\xa4\x12d^\x8d\x9d\x8b\xaf(\xfa\xfa+kID\x15\xfao\xcf'\xbd\xab\xbcF\xa7\x98\x90U\x9f\x90\x1cp\xe8)\xd3\x15\x13R\\\x0d\xaf\xa5;\x94\xb0\xc1\x9c\xcfoo\xfb\xe9m`\x11\xb595 \xd2;\xb8$\xb7\xd9\xd1\xefgx10p\xf3(\x96\xec^(\xf9\x89\xf7R|\xbfM\x18N\xaa\x17 \xd1\xef\xbe\xfe\xe7\x9f\x9bt\x8c, \x9e3t\xed\xec\xb6\x0f\x9c{\x94\x88\x8c\x05r|\xfe\x93\x06c-l9\xd8\xb8}\xf6\xdd\xe3\x82\xf6'\xe1\x0d\xffwp\x92\xfa3\xa5\x99\xb7zD\xdc\x11\x12;;0Q\xb7\xb8N\x15{1`\x8a\xbc\xbd\x84\xd3\xf4L\xfat3\xae\xdfD\xa1\x1cAa\xca\x7f\x99\xf2yvH\xfa\x9c\x95\xe9uR\x86H\xc6.\x1a\xd2\xd1\xf8\xed\x10\x18a\x1a#L\xb3'5\xdd\xa6\xcfeG\xfe\xcb\x94\xaf8\x97\xa9:3\xe62)\x0e\" \xf4\xe6\xe2\xcdMb\xb7/\xcd#-\xdd|B*|q\xdd\x7f>\xe7\xbb\x0f\x8b\xf6\x86W\xfe\xf4\x92r,z\xda\xed\xb97\xba\x9aT\x7fZ\xfc$\xe6\xbdc\xe7\xfe\xb7\xca\x8fNR*D\xe7\xa6x\xf7nr\x91\xa0\x94\"HK\xf74a\x86\x9b\xd7}\xf3UBw\x1cG\xc9\x1b\xca\xa9\x92H1\xd0\xefJ:\xa1!\x7fWS\xdd6\xc2\xad\xf0[\xb4\x95dx%)i\xd4\xff\xe2\x9b\xa2\xe4g\x80\xf8\\\x19\xf4\xea \xc7\xb77\x85F\xa1\x8b\xc0\xbc\xfd\xf3\x8b'\x12.\x02\xd5\xa5\xc4\xe6\x80\xaf\xf9\xfd\xdb\xbf\xd22%\xeb\xcdJ\x9a5\xd3\x9dP\x9d\x9dP\xf5\x0e\x7f~\xf9\xe3G\xe2Ta\xfd\xb0\xc4\xe3'\x7f\xbe\xffi\xcd\x08\x1e\xc5M\x175U\x89m\xb8;\xd1\x1e\xdc\x9d\xdf\xfd?\xb1\xf8\xd1\xe7x\x94\xa0\x015\x9a-*\xc8\x88\x076J\\9$\x8c\x97P\xec'\xae\xe6\xb4\x901s\xb3\xfe\xc8(c,oo\xaa0\xa7\x8b\xb9h\xa7\xbd{\x90\xdd\xd2rZ\x91\xf4\xb4\xa2v;d\x83h\xa3\xf5\xd4\xde\xf3\xbah\xb0\xe7#\xbb\x0f\xb6\x89\xa66'\x02\xed\xa0]9\x8b\xce}r\xff\xfe\xfd\x83\xdfZ\xfa\xd6\x0e\xcaq\xce\xed\x1eL=\x1ej'T\x18\xf7\xaf\xcf\xfeN\xe8\x0b\xdd\x93\x84\xf8\xbb4\xaf\xe88\x07:g\xbcXS\xed\xbf\xe4\xb0\x03.\xdd\x0b\xf6\xdc,>w\xb7Pe\x87p%\x06\xc3'\xdf\xde}\xa4\xf3\xf5\xd77@W\xd9\xdf\xd4\xccD\n\xea\xdb\xf9\x0dK((=\x11-=\xbe\x84*\xb7?\xdc\xdd\xd1\x9cPWLr\x841\x8f\x9d\xdc\x13E\x82\xf1\xeb#\xca\xf3O\xe7\x89\xf1e\x10\xd1V\xf3\x91K\x9a \x9f*\x99\x1e\xf6\xea\x05\xd2tgg<\x8c\xac\xeb\xa0M.\xa8q;\x89\xae\xa7\x7f\xa7\xca\xa5\xd6\xc6\xe4\xec\xdb\x1a-\x03:\xd8q\xc9\xe8\xb7_\xc1\x94\x84M\xf6\xe9=1CT\xb9\x9bP 9\xf82\xe9\xa4O?\xda?`\xc7\x7f\xc6\x94\xb2)\x86\nq\x01\xf9f\xdf|% \xdc\xa4\xdaI\xbc\xf5\xdc\xfc<\x8a,\xec\xe2|\xac\x87\x88\x80\xe9\x8a.\xf1\x96$\x868\xcdw\xa2I\xecF\x82$\x81\xe1\x13z\xf8 X\xab\x15\x1c\xf1\xa4\x9dP)l\xfe[\xb0\xc7\xf4\xfe~xl\xf2aLZ\x1d\xe6\xb8\xb1\xaaq\x89O\xe7\xc5\xbd\x83\xd3X%\xf5\xa0bV \xf5\xf9\xed\xe7\x0b\xd7\x19'd\x8fj'\x81\x84\xff\xfe\xfa\x1a\xbf)\xb3t7:\x07\"\xae\xb5\xf3W\xf2&\xb5\xfc\xe2\xe8\x93u\xb4\xa5\xd1[\xd8\x9e\xea\xf2\x8811\x94\xd3\x8bmA\xb1E1'\xe6\xef\x05\xb7Tk.\xb1M\xe2\xca[\xcc\x11tD\x7f\x92\x1b\x87\x103\xee\x83\x14\xd8Q\xbb9[\xca~\x8b\xa15\x9f\xf9~K&\x01H\xd2ma\xf3\xbb\xc7E\x0csf\xae\xa6g\x05\xfd\xcf_\xf9\xa6i\xd8\xf8\xb4n$2\xf7\xa6\x1ac{{Q\xc2\xcf\x97\xfb/ \xa4\xa2{\x90\xc0T\xc3\x0f\x7f}\xeb\xff\x8a\xb2 \xb3\x93\x91VNY\xa7\xb6\xd2n\xbf\x85\xd0\xca\xc2\x13\xe6\x89\xcc[\xa7\xb8\xbeU\xfc\xee\xf9\xdd\x89\xc9\xe1\xa9/D\x94\xbd#\xe87v\x9e\x00d\xaa\x95\xf80\xbf\x9b\xdf\xed\xb7\xe3\xc41|\xbe\x9b ?\xb7v'<\xe6\"<\xdd!6\xec\xe4\xb8\xd1\xffD\xc9<\xca\x12\xe3=:\xd0\xe3\xf5\xfbUN\x04\x84NebY\xfdQbY\x85n'\x01?\xde\x8f\xde\x8d{\xbf\x92\xae\xf3i-G\x9e^\xfa\xf3\xf2\xf5\xbb\x84\x1eR\xed$\x84\x8b\xf3\xd1\xbb\x1c\xff\xca\xb2\xc1\xbe\xe2\x82|\xe6\x0eSt\x13+\x19\x83\x93A\xd1A\xd2\xc3\xfbl'\xe5\xe0\xcc\xc6\x04J\xc8\xb6x\x86H*y-)\xca2\n/\xeeiM\xe8\xdbi\x04\x0c}\x91\xc6\xdbOo\xad\xe4A\x88\x8a\\\xc9\xdc\x82\xdb+n\xe6\xb8\xba\xa2\xfc\xb5P\xee\x1e\x87\xc16\x9d\xfc\x96n\x059X\x0c\xcb\xc4\xd7:{\xa1\x05C\xaf\x06\xf4\xd5\xa7d:\x80l+\xd6\xc7\xe7\xdb\xaa\xdei\x03\xa1\xe7\x16\xb5o\xd1\xd0%\xfd\x17\xcd\xa1\x10\x0e\x7f\xb6\xbd-\xa9\xc9\xdb\x03\xc6\x06\x16\xc1\x0e\xe5m\x83\x8d\xb6\x0d\xce\xff/=!/\"\xbf\xe1\xb3\xbd\x9d\x9d\xd6\xfe\xceN\xebhg\xe7\xff\xd1\xf3\x14\xbf\xd4D.\xb1^4\xd5\xc3\xf8\x90\x10\xd1\x1e\xc4\xeej\xea#\x7f\xfat\xed-j0\xbb\x89\xc6\xc4\xe5\x94\xd9/\x9a\x9dv\xa7\x89\xc6\x94\xdc\x9d\xb3\xfb\x17M\x9d\xd7\xbe\xa3?\x9aH^q\xee\x9b\xe8~d\xd9\\\xcf\xc9\xb3\xed\xed\xbb\xbb\xbb\xf6\xdd^\x9b\xb9\x83\xed\xdd\x9d\x9d\x9dm>\x1e4\xd1D\x17=}.\xb9\x04\x99/\x9a\xefO\x0e\x8f\xdb\xbb\xad\xe3\xfd\x93\xf6\xfe\xbb\xc3\xc3\xa3\xf6^\xeb`\xff\xc48\xdek\x9flu\xf6\x0e\xdb\x07\xad\xc3\xc3\xf6\xd1\xd6^\xe7\xa8\xbd\xbfu\xd0i\x1fm\xed\xef\x1d\xb4\x0f/\xf6\x8f\x8e\xda\x9d\xad]\xa9{v\xdb\x07\xf2K\xa7\xb3\xd7>Q\x9f\xfb\xc6Vg\xef\xb8}\xd0\x92\x9f{\xfe\xf7\xbd\xc3\xdd\xf6ak\xa7u\xb0\xd3\xb9\xd8\xed\x9c\xb4w[G{;\xedNk\xbf\xb3'\xbf\xef\xcb\xe7\x1e\xb5\x0f[\x87\x87\x87\xed\x03ko\xa7\xd3>i\xc9\xcf}c\x7f\xaf}\xd8R\x1fG\x87\xf2 \xfb\xf2cg\xbf\xbd\xbb\xd5\xd9m\xef_\x9c\x1cwZ'\xbb\xc7\xed\xbdVg\xa7\xd3i\x1f\xb7\x8eO\xf6Z\xb1Q\xfdD\xef\x0fv\xf7\xdb\x07\xad\x83\xdd]c\xeb\xf8\xb8}\xd2:>n\x1fm\xed\xee\xed\xe9/{\xbb\xb2\xd6\x8e\xbe\xb7\xa5.\xa9o\xbb{\xaa\xc7\xea\xfe\x9e\x11\xdel\xed\xee\xed\xe9/~\xc5\x8bC9\xe6\xd6\xee\xf1I{\xbf\xa5\xbf\xef\xef\xedIB\x06\x8f\xfd\xd9<}\xbe-)~\xfa\\N\xc3\xe9sj;\x9e@b\xe2H\xde\"\xf7\xa2\x89\xd4\xa9p/\x9aM\xe4X\xd8 Cf\x99\xc4}\xd1\xbcQ\xcc\xd0n\xb7\xe3\xdc\xa4%\n\xd2b$\xe4\x17\xd9bs\xfb\xf4\xf9\xb6I\xc7i\x0e\xd7\xe79 }\x88\x03\xd2\x07\xf1\xf4\xb0\xbb\xe5\xebg\xe2\"\xcf6I\x9f\xda\xc4l\x9e>\xf7\xacXU?\xdbH\xa7\x075}\x0e\xb7\xf1\x98\x0eTbc\xf3\xf4\xb9E\x91\x92+\xca\xda\x97\xaf\xa3\xc0\x83\xed?=\xe2N\xe2\x9d\xd6)=H\xe7\xf1\xc8Z\xb8G\xac\x80\x02x\x10\xb4,\xdf>\xd9P\xbc\xaa\x0e\xff#?/d\xcb$\x8e\x18v\xe4[\xe4`\x1b *d\xbd\xcc\xf3t$\x1c\xe9\xf0w\xf3T\xdd\x7f\xbe-\xab\xa4_?\x9d\x980\xb4>\xbc\x7f{Q\xf8\xc6\xed\xee\xa3\xdd}\xfd\xb6\x95~\xd7\x9a\x08\xbb\x14oi\xa0\xf4\xa2)\\\x8f\xc8\x97OgA e\x1c\xf1\x17\xcd\xceQ{\x0f\x1d\xb7\xf7Pg\x17u\xf6\xda\x87\xe8\xb0}\xa4~\x1f\xb4\xf7\xd0I\xfbH]?l\xef\xa3\xceq\xfbH]P\x0c\xa5[ xj[\x914\x7f\xfatZW\xded\xe9\x03\x12)\xb3\xb7/%&\xa2&\xb1\x85\xfc\xea\x06O\x0e\x08\xbcm\xd1BB\xaaG\\\xd9}\xc6kH\xc6hp!\x11]\xcf\xb6\xa9=\xd0DT\xb7\xaaR\xec\xe2\xd5\xfb\xf7\x17\xcc6\x88-\\,\x88y\xcd\x98\xf5\x8e\xda\xb7u$\xe0\xd4\xb1\"\x97\x08\xcf\xb59\x1a\xd1\x81~0\xb2\xd4u?\xd5\x0b\xc9\x9a\xd2lh\xc4\xab#\x871\x8b\xb7+S<\xd5\x83+S\xf6\xe1\x95\xcbF\xf2)u$\xfb\xd4\x01\x9fc\x0b\xdb\x06qC\xfa\x8b!QTE\xd4\x94\"A\xfe4b\xb5\x1b\xea\x9e\x18b\x81\xa8:\xda\xeb\x96\x98\xe8\x8e\x8a\xa1*9\xa0\xe3`\xaad\xb9\xca\x13#\xfb\xc6\xbfQ1|E-A\xdc\x1a\xceDj\x84\x08[\x16\xbb\xe3h\xc2<$\x18\xfa!\x15u \x86\x0d\xcd\xdd\x9a\xba.\xf9\xe1\x11\xae&\x00\xbbxD\x04q+\x0b\x9a\x0f\xdeH=\xbe\x86d\xbd$\x8eK\x0c\xc9\xa0\xcf\x90c\x11\xcc \xf28Q<\x89%\x9dm\xe5\xbbA\xd4F\xf7\xdb\x92\xaa#l\xe3Au\xe5&\xc9\xf7y\xe2\x90\x1aR0\x18ZB\x10\xa8'\xf8R@\xbd\xd0\x8dO\xfe\xdd\x7f\xff\xf0\x98\xf8=\x90\x1e\xfa\x17\xc2\x1ca\xe4\x1f\xc2mQA\\l\xa1\xbb!\xb1cBE\x96\xe8\x052G7\xf9\xd2u\x99\xcb\x11\xed'\x8a\xf51\xb5\x88)_\x8a\x9e\xdf\x0f\x03s\"\x889\x9fP\xa9\xe9\x8cU\x96\x01\xb2R\x0di\xb1\xa2\xf7\xff\x02[\xc6\xcb{*$\x15/\x18\xb5\xb9T\xa17C\xec\x92:2X\xc1h\xe7!\xdc\x1f\x8c\xda\xb2\xa9Z\xd3+9\xc8\xaad\x925\xaf\xa5~\xaf#y\xa2\xc1U%\xcb\x8d\xc3\xc4\xb5K\x8d:\xea\xddplH\xfb\xa0\xa4\x82\x1c|\xba\xbe\xf0\xb1\xe0\x10\xdb\xa6E\\\x8d\xb8\xe3\xaa\x99;L GUT\xa8\xbb!\xf5*\x97\xad\xd8lDmmBa\xdbD\x18\xa9\xbdF\x137*\xeb\xd0\xcfL`K\x1bk?\xb9\xba\xac!\x1d\xc3\xb1\x85\xe4\x8b\xe4\x9b&\x9cK\xb8C\xb4\xe8\xbb\xba\x9c\x8btu|yS\xefl\x8f\x89!\xf2\x1cCZ\xaf\x03m\xd2>D\xdd*\xd6>\x9f\xa8?\xeaI\xf5\xe4\xbd\xec(\xa3\x978xaU\xb4\x8e\n\x1e\x7f\x81\xe7`\xc4w\xcc\xb8\xc5=\x8b\\z\xfaB\x1dy23\xc6\x90\x9a\x96\x7f\x07\x99\xe1-\xe5\xac\xc1.Ac\xac\x16\xaa3dR.\\\xda\xf3\x04iP\x15L\xa5c\xc2Q\x9fUF\xd7\xef\x99\xe9Y\xe43\xbb\x0c\x1bT\x9e\xd9\x1aR|\xcaHC\xba\x1b\xeaWH\xea\x01\x93\xd2A\x87\x8b\"j\x9bU\xe9\xfb\x89\xdca\xd7\xe4/y\x1d-\xc0hp\x91,\xb0\x11\xf1\x8d\xe0 \xd0\xe7\xeaR\xa8\xef\xb2\x11\xb2\xd9\x1d\xf2lA-\x84\xa3\xf4\xa0\x86\xa0#e(\xca\xe2}Ox.A\x9f\x87D\xb9,)q\x11\xa1bH\xdc EF=\x04\x9b\xa6K8G\xcc\x95\x0d\x11!\x1f&\xdf\x1c\xde\xe83\x17\xdd\x0d\xa9\xa1\xc0\xc4\x04\xdda[\xc8i\xecS\xdb\xd4\xb6)\xe7\xcc\xa0*\xdb\xc3\xefY\xd59\xfd\xe2\xeb\x8e\xda*\xcc (\xcb\x8d!\x91/\x8d\x19\x00\x0d\xf5v\x0c\xf1\x98 \x9b 4\x91d7\x0c\xcf\xad\xfeZ$IXc+5\x7f\xa0\xe1\xebR\x9e\xc2\x8d\xb9\x8dX\xc3`\x9e-\xa4\xc2!f]\x85\xbb\xe6X\x84\x95\x0c f\\\x98\x1b\xd8\xfe\xf7\xbf\xeew\x8f~\x17R\x94K+\xc3t\xf1\x9d\xfd 2\x06Z\xbb\xb6\x94\xe4\x08\xeb\xf1\x06\x04u\x89\xc1\xa4\x10WV\x1a\x8eR\x8a\x02\x90\xf2 r\xbec\xf6\x80\xb8\x1bNTK\x11a\x19\x04\xad\xablMQU\xbf\xe5\x82i\xf6\xd3\xe9c\xf5\xa5\x9a\xcfx\x0b\xa1\xdb\x07r\xaf@v\xad\xc5\x9aM\xee\xb5\xcd=gX\xd5s\xea\xbb\x1c@\x0d,\x11F\xf5\x1c\xa4V7V_\xd1{3\xb1\xc5\x90\x08jh\xa2\x9dO\xf4\xdfZ\xf3\x16\x0f\xc6\x1c\xd0\xae7A~\x0e\xa7\x7f\xa1\xba\x16M\xd1\x91\x03!}B6\xe2\xd9\xb3\x1e'h*\xc7!jsApe\xd2\xab\xbd\x05\xae]6\xa6\xbc\xa69\x14\xa9\x11&\x96\xb3\x04{Q\x8c\xa8-\xc2\xed\x14t\x04Y\x17V[\xc4T\x96\x0b\xef\xa9-6E\x82\xaa\x05\xbb\n\x1f\xfa\xf1\xf5\x80\x96\xd1\x8a\xf1\xca\xf4S\xc9\x17Wv\x9f\xd5\x90|\xe1\xd82{\x1f\x04\x91\x89\x11\x16\xc6PRPgFQ\x93\xab\xf43\xbd\x91Zub\xbe\xbcWY\xf6\xd6U\x90\x01T\xdb\x84\x84)#\x0d M\xfc\xfb(L\x86\xf2\xe3\xe9\x95i\xaas\xdb\xcc:\x121\x18\x1a\x12\xf8\x96$7\xe6\x90\\\x18g\xda)\x8c\x1af\xa4U\xa5j0o\xf4\xa7\xde/\xa4\x8e\xe4\xcd\x8c1\xca,\xd3\xba\xc8\x9a\x84\xec)\xcb\xe8\xdd8\xaaRR\xad\x99\xdc\xf8\xfc\xc8Xnd\x9f\xb9s\xee\xda\xa36\xae \x93'7E\xab\xebW>\xca\x19\x9d\xd3@\xfa\xc2\x89\x1b\xdf\x05\xe8\xc6s\x88\xdb\xb7e\x16\xc2\xd9|\x83\x14B@\xef\x04\x95\x03\xa7\xc7L\x15\xc1l\xd2\x08\x99~~\xd2G\xc6\xfe\xc6\xf1\xb9\x17\xf3s,\x99\xd5\x95i\x1aq\xf9f\xd0Yo\x8f\x18\x1ce\x10c\xb3\xa9t\xadJ\xd6/\xb6\xc3\x98\xf5mH\x05\xb1hM\x97\x8a\xfb<\x8b\xe4\x00\xa5T\xb8\x0bF\xeb\x87BT\x94I0\xe4\xd9sm\xf5\xae\x84\xec\x99'\x86\xcc\xa5b\xf2\x9e\x08,K\xd6\x90\x92\xf9\x03\xcd\xdf\xedsD\xc4\x90i\x98\xd1':\xa4\xd7\x98R_\xb3\xb2\x83]A%\xd8\xf63A+O\x83^\x00pCl\xf3\x0dc\xb7gz\x11M\x0dg!w\x9c\xb3&\xa11 B ie\xc6\xf8ub\x1e\xd8\x00\x0e\xfa\xcb\x078\xb1M4d\xec\xb6\xf2,\xa89V\xdb+_\xb8\xa4\xa6\xd293\xc6Y\xd4\x0f_\x01\xa98\x1b\xf1\xedk92d\x13D\xa5\x8a\xc7\xe496G\xd4\xde6t\xf3\x95'\xe13\xbb%v\x1f\x1b\x82\xb9\x93\xba\xdb\x8eE\xa4\xcfl5,b\x84\xf1\x93}}\xe7X\xe3\x01\xf6\xe5\xe7\xfbW\x84\xf0s\xcck\xbfT1\xd2\xa1X%\x9d\x07\xbb4\x07+\xe4\xb0\xde\xe9\x84\xba\xc8`\xae\xab\xfc\xe4\xca?2_\x98\\QS\x1f\xf2Rc\x9a\x06\xd90W\x97IP\xa7\x00\x9f\xa4\xad:\x12\xae2\xf1^\x11\xa2\xc4@\x1d_\xfdpl\xb1\x8d\xc0\xe2\x8c\xa9\xfd\x93\xf8\xdb\xd1\xfa?\xab\xdbM\xafu3\xb5%kb|9\xd8\xe9?\xeaN\x92\xd6\x92\xa6>y\xe7\xa4\xa7[sz\xba)z\xced\xda\x90\xa2\xd59\xf4\xcc\xb2\xfc\x05\xcdu\xa4glt\xa1\x88T^\xa9h\x95\xae\x94\x98:\xac\xe9\x1bK\xd4\x1eD\xda\xa62=\xeb\xbb:\xdc\x1f\xd9T:\x06\x94\x93\xc4\\\x14-\xeb\xeb\x00 \xc7\x16\xd2S\x93,{P\x95\xde\xaf \xd8\xf6-\xd8\x072\xd8H\xb6G\x1az\"B\xcf \x15\x9cX}\xbd\x9b\xec(r\xa9\xcb[\x9eM\x85na\x84\x1d\x1e\xe8\xba\xa8n\xe5\x19\xd2\x8e\xcb\xbaG(\xc2\x01&x\xdf\xb0\xa8J6LD\x1d\x92i\xc8\xeaUHxg\xe7\xa30\x10X\xdeSBF\xbf\x0d\x19\xc2V\xa6\xeb9\xb6o7\xc5(P\x0e\xc1\xd0(\x90t\xbc\xdf\xeea\xfb\xd6\xb7\xac*\xd3.H\xeavj\xb9\xd9[lt \n\xfayd\xfaF\x1c8T\xa6\x9fn\xfcc\xbf\x86\xc4\x0b\x86\x96\xa0\\\x8cfq\x90P\x99n\xb1\x99\xf9F\xc5\x90y\xe2c\xbf\xcfI\x1d\xbdK\xd3\x86\xbad\x8e\xac;Y\x97\xca\x9e\x17l4\x92\x08kR\xd3\x83\xa4\x13\xe3Kj\xea\xe0\x8e\xce~\x99\x8f\x07\xa3T,\xc5\xfc\xfe\x81\x0c5\xa4c\xfe@s\xde\xec\xe0\xb4 l\x18\xae\x17D\xf4 6\x86Q\x92\xe1\x03\xa8\xbc \x04\xaeH\xdb(\x1fn^\xba27L\x95\xad1e\xe3\xa3L\xd0v\x1c]V\xe2t\xfe\xec\xcc\xf0I\xdf\xfc-]\xeb\x9b\x7f5m\xa8!e\x83]m\xa3\x93b\x1eH\xdb\xe0\x0c \xca\xecM\xb1\x81\xf4\xde\x00\xc1\xb6|f\x8c\x02\xf3ZA\xe1+ \xf5\"\xe5\xbc\x9e\xc7=\xe4\x8c2\n6\x19\x867R\xab\x99L\x05\x01\xfc\xdb\xda\x915\xbf\x8a\n\x1f\xf9\xd1\x13\\`\x95NQ_eU0\xda\x90\xd0\x81\xb2R\xef}H\xd8\xb9#\xcb\xe1#o,\xcc\x87\xb5t\xfc\xa7\x87\x18\x92\x92\xcb\xdf\x88\x8c\x89-\xd2\xf4\xacL\xc73\xcbz9\xa6&\xa9\xa7\xbf?6\xbaDx\x99\xf8\x17+\x93\xab\xc6\xb4\xca\x10* R\x94\x06\x12^\x19b>\xc7\xcas\xcbbw5\x0d,\x85c\x0b\x03\x9e}B\x96\x14\x90\x0f\x9fUG\xa1\x17\x0d.\x93L3\xd0\x11\xe5\xfe\x03\xb4\xc6k6\xde\x14\xb0\x98\xcc\xa2 @\xe3\x80\x8d\xe7\xc5\x8a\xd7.s\x18\xc7\xb5\xdc,.\x1c[\x92|\xe1\xd5P\x02\xea\xd0\x0d\x17Xx\xd5\xb9/xJ\x8d \x18\xd9*\xc1\x85L.aP\xf4\xea\xb22\x01/\x89Z\xc8ZG\x0e\x0c\x86\x96`@3\xb8\x18\xf7\xeb\x06\x94\x9d\x97z\xf5%^\x04\x905\xa5|\xf2!j\xf7\x99;R\xcf\xf5\xd9\xd0 y\xb0\x15\x94:3\xcd\xea\xaa\xf83\xb6\xac\xc9'\xc2=\xab\x8ed\x8d\x8d.\xe9}\x94\xd75O\x86\xaf\xf9x\x9eM\x9e\xbe2QK\x10\xa3\xc6\x15\x92l\xac~\xc5\"\xffs\xbf\xc1\xb2\xdd\x9a\x92+A-3\xe7\x95ev\xe2\xad\x95\xc5\xdc\xb9\xde\xd93\xdb\xf6\xb0U\xeb\x9d\xd8\xd3C\xccl\xbf\x8eU\x81\x87\xef\xbf~e\xf7-\xf5\xad\x86D\x0c\xc7V\xb8\x91=\x0dK\xcdG\xc1\x0b\xc6G\x8c\xc3>\xf6\x0f\xdb\xc7\xbe\xee\xb4\x0bAa\xb4\x18:\xa4\x96\xd6,\xda\xa8k\xf9\x1aFbF\xee\xf5\xb8\x83\x0d\x82\xb0m6n\xc9\xa42Q\x95\xdb\x91\xda\x83M!n6\xc5\x8c\xfb\x14\x98\xf3\x08\xa4\x1b:\xb0\xa9=\xb8\xb2\xfb\xac\x8e\xe4\x8b\x0f/\x06\xbd\xd5E\xa5\xc0\x83|\x9e(\xa2\xfa\x00\n\xd6\x9b\x80\xc9d\x9e\x14\x0d\x83|Q\x9b\x07\x8e\xaf\xaat\x0c\xc3\xb3\xf5\xde\xbc6o\x98)\x83:\xba\x1e\x03\xe4a\x18zn\xc7\xe2'b\xd6\x9a\xb2\x89\xf1\xc5bz)\x82\xfay\xfes\x121\x9c\xbe/vO\xaf@\xdf\x10v\xcd\x1bo\x82o\xbd\xa0\xc0\x14\x0en<\x9c\x83o\x04\xbe\x8dz\xb0\xc19@I\x8d\xa5\x85p\x9f\xb9iQ\xd1\x98\x97\xd0\xd9go\x04\x81#\x03?\xbc2\x8d\xb4\xb1\xbdi\x1dL\xab[\xf8o(\x17\xcc\xa5\x06\xb6j\n\x1c\x92\x03L`\x87ax+M\xde\xa1:\xd6\xaa21}\xb9Po#@#\xfe\x04\x06\xd3\xc3~\x88Q\x1aP\xae\x9e\x99\xd4\x99\x04j\xff$\x9b>\xabL\xa8Z\xab\x9a\xd9\x1a\xc6_\xcc(\x8c\xa1\x0e\xd1>$\xc4Xg\x9dRA\x95,0\xbf\xac\xde\x104o\x98!y\x83}\x81\xa7R\xb72U\xa3\xa7\xd4\x90\x96\xd1\xe0\xcaS0\x06z\xe6\x82:9\x96C\x0d)\x9b3\xca\x90\xc4\x91i4\x9b\xc6\xf3\xc1\xc9\xf0\x1d\xd9\x10\xb3\xb4p\xbc9t\xcf\x98\xa4\xf3\xcb\x873\xc7\xb1(1\xaf-\\G6\x8e\x8d.\xe6\xd1w\\2\xa6\xcc\xe3\xd6\x04a]\x00y\xce\xc0\xc5&A\x8e,\xd9\x9b(w\xbe\x8dGsD\x97t\xb4\xaa\xa6\xf4\x8c\x8d.\x81D\x83\x18]\x9c\x8c\x95I\xa7w\xf6\xfaJ\xdc\xba\x06\x89\x93\x03L\x100\xd8\xac\xc7\xdf\xb5l\x1c\x94QG\xb9HdZ\x9d\x13\xbf\xe8\xb90/\x98\xcd\x89\xcd=~#\x9b\xa9!Y\xf3\x07\x9a\xe4\xcf\xe0\x96\xa6\xa56\x00\xee\xa8e!N\xdc1i`)\x16\x84\xeb\xa9m:o\x89k\x13+\xdc\x8b\xda&\xf7\"\x98\x10\x9d\xd4I92\x86\x98\xdaj\x9fN\xd5\n\xb3\xad \xea\x91\x06\x17\xcc%&\xc2BO*\xe6\xc2w\x02\xa4*6\xa6\xf4\xf9\xd3\xf5\x85\xda\xf3\x93{\x8e\xc3\\\xd9\x99;*\x86HJ{#\xd8W\xc0?>\xc8u\x0c}\xf2[p\x8a>\xb2\xd9\x9d\x1e\xd8\xd5\xf9E|cP\xe4\x12\xc7\xc2\x06\x19\x11[4\xfek(\x84\xc3\x9fmo\x0f\xa8\x18z\xbd\xb6\xc1F\xdb\x86\x8a\x88o\xd3\x9e\xb15`\xdb=\x8b\xf5\xb6w\x8d\xe3\xe3\x1d\xbc\xbbKN\xfa'\x86qt\xd0?\xdc\xed\x1d\xec\x1e\x19\xf8d\x1f\xe3\xa3\x03\x83t:;\x87;;\x9dm\xc7e\x82\xc9\xaa\xdb\x06s\xc9\xb6\xde}c{\xdc\xd9\x96\x9d\x9d\xb4\xd5\xed\x7f\xbd;\xd8\xff-\x97}\xb7\xbd\xa9\x8c,\xf0`\xfb\x86\xb8\xe3R\x9b\x91j\xe6\x13x\xd0,\xc1\xbe\xee\xeb\x7f\xfe\xb9\xf1\xd9\xb7\x13\xb2/\x15\xb2^\xce\x13}n\x1b~q\xdd\x7f>7O\xfd\x12!\xd3\x8e\x07\xf1\xb2W\xfc\xec%\x1aZ\x1f\xde\xbf\xbdh\x06L\xf3\xa2\xd9iw\x9ahL\xc9\xdd9\xbb\x7f\xd1\xdcA;hw\x1f\xed\xee7\x91\xfc\xd5D\xf7#\xcb\xe6/\x9arf\x9emo\xdf\xdd\xdd\xb5\xef\xf6\xda\xcc\x1dl\xef\xee\xec\xecl\xf3\xf1\xa0\x89&\xaa v)\xde\x1aR\xd3$\xf6\x8b\xa6p=\xd2<}\xee0k2`6R\x9b\xbe\xf2\x17\xcd\xceQ{\x0f\x1d\xb7\xf7Pg\x17u\xf6\xda\x87\xe8\xb0}\xa4~\x1f\xb4\xf7\xd0I\xfbH]?l\xef\xa3\xceq\xfbH]h\x9e>\xdf\xf6[9}.\x1f\x17M\x92g\xc5\x067\xb8\x1a;\x17_Q\xff\xed\xf9\xa4w\xd5,\x94=\xaf\x89x\x87\x05\xe1\xe2\xdcb\xc6\xed\xec\xf9\x9b=iOL\xe6$\x07\x98\xc8\xb4P\xe7t \xd4\x937*\x0b\xed\xd7D\xb7x>y\xa3\xe4F=I\x97\x18b(\xa8\x15\xc5\x1e\xee>}M\xc4\x07f\x92\x9a:\xa2c\xa3\xcbE`63\xc9|>\xc1\xd7D\xdcLl\xa3\x9e\x87%G\x83\x0b\xa9\xa6(\xc5\xf5\xc5y\x88\xa5\xdf\xffh\xc9 \xa9\xe9\xcb\x9a\x1dgHB_\xd4\x85\xd6\xe7\x16's\xbd\xaf\xf1\xc6\xeb-\xf9\xf2F\x9au\xaeJ:J\x10\x89\x1f& o\xa8^g\xbddR:\x8c\x97\xa7\xa5*|*?\x1fJ\xcd`t\x88\xfb_8\"\xf7\xc4\xf0t\xba-\x12.\xb696D\xb0\xb6\xdc?`S\xde\x1c`\x8e<\x8e\x07\xd5m\xaa\xd7D|\xbe\xe7/\xc7\xa4\x96\x9b\x93\xc7F\xa7\x8f\x8a\x91\xba\xe5^o\x89//V&\xd7\xb9\xcb\xb0i`.>\xdf/\x99\\\x8f\xc4\x83\xb1\x01\xa2^\xf0=\xcez\x95I\xa6\xe6`\xc9\xc4z4\xde\n\xb9\n#q/\xd9j\xfa\xaa\xe6\xc82T\xdfL:\x8e\xb7}\xfb\xe7\x17O\xa0\xbey\xdd7_5O\x9fc$\xb0; \xe2E\xb3\xdb\xb3\xb0}\xdbD.\xb1^4m\xc6\x1cb\x13\x17\xd9\xcc%}\xe2\xba\xc4m\xa2\xa1K\xfa\xda\xd6JY\xc1\x9f\x88\xc9\x0ck\xb2\xed\xca\xbf\xcd\xd3Kfx\xd2bV\xb4@\xd7\xecN\xed\xcd\xd9\x9b\xa0O\xe4\x92\x19\xcf\xb7\xf1\xe9\xf3m\x93\x8e\x93\x9f\xc9n\xde~\xbep\x9d1\x1ap\xf3\xf3\xe8\x8ff\xfa.u\xdf\xbe\xfc6A\x837t\xfc\xc6i&,\xc9&\xe2b\"'XqR\x9f\xb9\xa3g\xea\x9b\x94r\xff\xb5\xeb\xdc\xb7\xd0\xd6\xbes\xff\x1br\x99\x90W:\xc7;&\x19\xfc\xf6\xbb*\xa3N\x9d|\x16VD;\xed]\x8e\x08\xe6$e\x81\x9e\xec\x1e\xb6w\xf7\x0eON\xd0\xc1\xd1^\xfbh\xff\xe4d?m\xb1\xca\x92\xce\xbd6>\xe5_\x7f\xda;\x07M_#\xa9\xef\xa7\xcf\x07(|\x9c\xdfe\xd5\xd1\x93\x9d\xfd\xf6\xc9\xeeng\xbf\xb5u|t\xd2\xee\xec\x1f\xef\xfe&\x0dV,\x86\xc8|\xd1l\xa0\xf0\x7f#\xb4ux\xb4\xd7><:<\xdcouvw;\xed\xc3\x83\x9d]\xb4\xb5\xbb\xd7i\xef\xee\x1f\x1c\xb4\xfco\xc7;{\xe8\xe0\xa0}\xd89@\x07\x87\xed\xce\xf1\xcea+(sp\xd8>>\xda\xe9\x84\xbfw\xda\x87\xc7'\xfb\xf1\xd6v\xd0\xd1I\xfb\xf8p\xef\xa8ut\xdc>\xdc9>\xdcE\x9d\xa3\x83\xf6\xc9\xfe\xeeQ\xabs\xb4\xdf><>8\xdeC\x16\xd2\xdfOv\xc3\x8b\xd1\x95x\xdf\xc2\xbb\x06:9l\xef\x1c\x9d\xb4\xb6\xd4\xdf\xa3\xdd\x8ejw\xf7`\xafsr\xd8\xda\x8a\x9a\xf6\x9fvxr\x98\xdb\xd0\x9e\xee\xf3Ak\x07\xc9)<\xee\xb4v\x0f\xda;{\xbb\x9d\x83pp\xb1j\xfe0\xad\x90n\xfe\x85\x80\xb6\xfb'\x87\xad\x88\xb8\x06\xda\xea\xec\x1e\xb5;\xc7\x07-\xfd\xf7p?\xde\x05Y\xf0`\xf7\xe8$\xa8\xa1\xaf\x1c\x1f\xedE\x17v\xda{\xfb\x07\x9d\xd6\x0e\xda\xea\xec\xc8\xfe\x1e'\xc7\xb0\xb3\xdf\xde9\xec\x1cF\x15\x83\x99E?\xc3rM\xd4\xa7\x96\xf5\xa2\xe9\x9b4\x17\xccb\xae\xf2Q`1<}\xbe=\x08\x9c\x14\x95^\x18\xf9\xbe\xc0\x0b\x02/\xc8&\xbd \xd35\xd3wA\xbf\xb1s\xd4\x1b~\xf8\xeb[\x1fa\x87n\x19\xcc\x16\x12\xd5\xa6K\x92\x8b3\xe7\xf5\x07d\x1a\xb77\xd74\xab\xc3.\xd8\x9b\xaf/\xd1\xedG\xeb\xedY\xe6\xe6\xf0\xed\xab\xc9\x15C\xc3\xdb\xa1E\xce\xd4C\xa8\xddg\xcd\xd3\xe7\xc3N\x1c\xafx\xdf'_L\xa4\xbe]}\xeaY\xc8\x1c\x99\x17\xdf>\xa2\xde\x85\xf8\xf3m\xf3\xf4f2r\x86\xcc\x9e\xa0-}\xb0\xdek,\xc8\x1d\x9e \x93\x19\xfc\xf9\xff\xb1\xb5\x85\xb6\xb6N\x91B%\xa7\xff\x15\xfc\xee\xb4w\xda;\xc1\x8f\xc8\xf1<\xec\x9c>wN/\xd9\x9dm1l\xa2\x8f\x0e\xb1\xcf\xae\xaf\xc2\xf5=J\xd1?{\x8e\x91\xe9\x97x\xd1\xe4wx0 n\xfb;gv3\x831bc0F\x1f>O\xd0P|}w\xf7\xbe\x19>B\x83\x04'C\xb4\xf3\x9f\xaf\xd8D\x8e\xd8\xf8H\x07\xb4\x8f\x8c\x8f\xff\xfcy\x7f\x83\xcc\xd1\xcf\x1f\xeeU3\x7f\xc6fT\xd2xR\xa3B\x05`\xb6L\xc2\x0d\x97:rPR\xa6\x9c\x9e\xa1O/o>#j\x0b\xe2\xf6\xb1A\x94Q\xc4\xe3\x91\x92V\x10g\x88\xe1W.\xfb\xdf\xc8A:Q\x1f\x03g\xfd\x9f\x1eq'~G8Q\xb5\xb7R\xf7\x16\xcfVS\xb8I\xf3\x90B\x86\xd1=\xc3\xfd\xc9\xbe8h\xf8\xf3\xec\xd5{\x1a\x00\xc1\x7fE\xdd;\x95\xf3\xa5\xbej^\x99>\xdcL\xb8\xf7\xa5\xc3\x8ca\xce\xd8\xa7\x15\xcc\x10\x82\x8em\xafgM#\x84,\xf7\x97\xf7\xf3\x9f[M\x12\xd4;\x1f\x9d\xbd\xe9\xcf\xa6\xccn\xec\xa6\xf3\xe1\xdb\xfd=\xba\xfdv\xff\xfd\xf2\x9fR\x84\x99\xd2wE\xa5\xf8\x15\xbd\xa6\xd5\x8c\\\x90D]e\xfd\xd8 \x82\xd4$\xb6\x90_\xdd\xe8\x9d\xdd\x1e\xee\xaa\x01\x9c>\x1f\x1e\xc4\x87\xfc\xe3\xacw\x83\xd1\xf0\xec\xd5\xb7\x0fF\xf3T\x85\x91\xc2JQ\xea\xe8\xf3\xed\xe1\xc1\xe9s\x81{\x16\x89S\xe0\xcd\xcb\xefg#\xd4\xf3\xbe~{\xe75O\x9f\x8b\x1e3'\xa7\xcf\x85\x1b\x94Q!9\xcf\xd6\xa7u\x9a\xb2\x84\x19\xaf~\xfe\xfe\xab\xf1\x8f\x92E\xafn>\x99\x1e\xea\xf5'\xcc\xfc\x81\x8c\xe1\xdd\x9b\xcf\xb7MtKm\xf3E\xb3O\x89e6\x83\x88Q4\xb4\xc0\xc8\x8a\x8d\x85\x8c\xfez\x7f\x86\x86\x86q\xe5H\x03@K\xa2\x181\xb6\x85\x99\xeaB\xef\xb6\xf7\xfd\xec;\xea\x8d\xaf~\xbc\xc1M\x9f@\xea#\xd5v\xbfw\xf5\xd7\xab\x1f\xb2\xaf\xaf>\xfd0\xfa\xa8\xdf\x7f\xf7\xc7\xcd\x10Y\xa3\xb3\x9fc\x1e>kz\xad\xfe_\xf8\xe7\xfd\xf7\xa0\xda\xb0/\xbe\x9e\xffh\x9er\xe1R{\x10\x8aL\xf9`\xf4\xbc\x828\xa2n\xef\xc3p\xd4\xcc{y\xd4X\xb7\x85+?\xf4\xb4l\xab\xe9\x8b\xbd\\\xa7\xcf\x87{\xb1\x87X\xdf\xb9\xe5\n\xd47\xbe\xbe\xfeI\x9a\xa7\x9f\xd41\x89\x9c\xc8\xb9\xdf\xf3\xcb\xf7\x9d\xe1\xebx\xf5\xfe\xfd\x05\xb3\x0db\x0b\x17\x0bb^3f\xbd\xa3\xf6m\xb1\xaa-\xa8\xb5^\x9aw\xfa@\xb4Kd\xda\xed09pD\x07\xba)d\xa9\xeb=\"\xee\x08\xb1\x91\xac\xa9\xb6\x0c\x8aWW\x8b;y\x1b4\xf7\x9co9h\xee\x15S\x1a4\xf7\x124\xf7\x00\x8fF\x91\xad\xd4\x1f\x8d\xbaFLFt\xa5\x8c\xe8*a\x02\xda\xbc\xae\xda\xbc\x02\x0b\x94\xd0\xea34|J\x7f]\x99R\x83\xbdr\xd9H\xea\xa8b5?\xa3\xea\x9a\xe9\xfa\xe2\xd1h\x85?\xb5\x8c\x7f\xe6\xb5\x9bX\x16\xa07k0\x83m\xe1\xe3\x93\xd8P\xf7\xd4\xd2\x1d\xca\x158\x08\x16\xfeD\xbb\x13(\x90 \xcb\xe5C\x82\x82\x08\x8a\x83\xc5\xf0)\x07P\x14O+6\xa6f\xd9\x10J\xbcN\x8a%>\x8b\x7f\xde\xfc\x81\xd4\xfb\xfeax\xf5\x05\x19\x9f\xf0\x1f\xfdk\xd4\xeb_\xde\x93W\xcdS\xe4\x92\x1f\x1eu\x89\x89\x82w\xe1i\x87`*VF\xc1L\xff\xdb\x12\xbf\x07\xdf=j\x8b\xc3\xfd\xf0\xce \xba\x83 \xd2\xf3\xa4\xb5\x1b\xa0\xd8\x15S\x1aP\xec\xd2Ql\x06\xbdPS\x01\x98n\xdfe\xa3\xae\x94\xec\xdb\xbf\xe2\xf2\xfd\xbf\x01\xdbn\x06\xb6\x9d\x831J\xa0\xdcb\xc4+\x81\x1b\xffF\xc5\xf0\x15\xb5\x04q\x0b!n\xa6l4\xdcu\xc0\xb4\xe9\xee+\x10\x9b\xba\x88\xb0e\xb1;\x8e&\xccCB/0\x9c\xc46\xc0\x96\x8550\x95(\x8ap\x85]#DY\x11\x98.(\xb5g\x01\x10tD\xed\xaeE\x7fx\xd4\xa4bR\x16\x83&*=u\x18\xf9\x00|\xe7\x9c\xde\xa8\xa6\"\xcb\x85\xda\x1cQ;8\xf3E?\x08q\xa28M\xaf\x910\xd8h\x84\xdb\xe8\xe5\xfdo\x8d\xce\x8e\x87\x05\x1b\xb5:;;\xb6>\xb1dJBa\x08\x1a\x172\xa5JFH\xedVv:\xc3\n5\x9e\xca\xe5S\x1d\x0f\xa8\xad\xc4M\xfb\x96\x94~\x93\x92\xb5\x9e:\xfd+V\xce\xb5\xc8z\x13A\x96e\x8f9\xa7\xb7d\x82(\xd7\xdbBy\xc1\xf9\x88\xea\x88\x17t\x8d\x07$\xb0\xae\xda6\xb9\x17]YX0\xd4#\x03j7\x94H\x96os\xb8\xf1\x89\x83\x07\x04\x8d\x18\x17\x88\xf4\xfb\xd4\xa0\xc4\x16\xd6\xa4\x8d>\xda\xd6\x041\x9bH\xa1\xc0\xfa}u\xae\x84\x8bn\xc9\xa4\xc1\x87\xcc\xb3L\xd4#H/\x06^\xcd\xdb\x1eq\x90\xee\xcd\x1c\xac\xa7+n\x02\xf7-\xd7\x1f\xe0\x9c\xfa\x0c\xa1X\xd0\xf6F\xc4\xa5F\xc0$\xca\xc9e`[\xf2\x87\xc7\x89\x89\xee\x86\xc4F>\xc3z6\x1ecjI\xc5\xdfn\\ig\x18\xe1<\xe2\x9c \x15!%\x0bE\xa7\xdf\xd8\xde\xa8\xa7Ooq\xd5\x11k\\\x0b\xbe\x84\x80\x94\xa5\xf5]%\xfa\xda\x8d\xab>\xb2H_ 2r\xc4\x04Q\x7f\xc3'\xdfO \x1b\x08\xc4\xacnK\xb2`o\x82\x086\x86\x08;\xce#p\x9e\xc1<[t\xd5\x88\xe7\xe0\xbfX\xed\xa7\xc7\x85=\xc6,\x82\xed\x85\xf0Gl\xa0\x92K\x94pbH\x1a\xd6H~\xa1\xb6I\x8dp\xab\xb0\x18W\xc8\x82\xbe\x8e\xa3\xb6ay&i`\xa4\x1a\x0b\x00r\x9a\xd9\xa8 #\x8eB\xd1\xa6\x16\xdeD\x14\x97L\xf7\xe5\x8a\xb7\x1b\xa9\x0e\xa9-\xc5\\\xc2}\x87\x92\x92\x93\x91`\x95\xb2Sm?F9\xa2\x03[\xed:\x16\x88\xd2\x86\x1eN)\xd6\x0bh\xb6x\xb7~\x8c\xa7\\2&./\x8f\xc435\xeb\xcd\x89\xfe \xd3\\H#1\x85]2ET\x99\x84\x1bDo\n\xca\\S\x1dm-'\xdd9\xbd\xa1\xb6A\x9e!\xbd\xb5\xdb\x167o\xd1N{\x7fo6K\x80\xc7\xfea>;\xf0\xd8\xaf\x98\xd2\xe0\xb1_\xb6\xc7\xbe\xaf\\\x83\xbeS\x162M\x9eo\x847>=\xe9Y\x95Q\xf8\x99\xf5\xb4\x7f\xf0F\xca\xd9\\\xe8b\x8f\nE\x9d_\x07\xdfz\xd8o\xe5T\xbf\x0c\xf7d}\x86\x1c\x8b`\xael]\xa5\xaf\xb1\xa4\xaa\x047c\"U\xf8\xfd\xb6$\xef\x08\xdbx0ei,\xe8\xdc\xd9o&\xe8\xdc\x15S\x1at\xee\xb2u\xae\xed\x8d@\xddn\x90\xba\x8d\xcdw \xedZ\xaci\xa5&\xfa\xf9w\xff\xfd\xc3c\xe2\xf7 =S\xffBj\xefw?\x88iQA\\liWJ\x94\xb5)K\xf4\x82\xa4N\xdd\xe4K)\xba\xb84\xd2\xe3\xc5\xfa\x98Z\xc4\xf4mu\xd5\x0f\x03s\"\x88Y\xbb\xac\xcd\x8a \x9b\x90\xab\xf9$\xdc\xe2\xe0\xf9Y\x9e\xc2\x02\x14\xbabJ\x03\n]6\n\x0dsb\xb6\x7fA2\xe6F\xe1\xd1\xdc\x99/\x81Fg#\xd3b\x07\xd0Zz\x7fb\xae\x1f\xf5\xb5*\xd6{:\x89\x90\x90\xbfU\x0e\xa5A\xfe\xd6\xd2\xd2\x17 \x7fk&\xf7-\xd7F\x80\xfc-\xc8\xdfz\x02L\x08\xf9[\x90\xbf\x05\xf9[\xb3X/\xa0\xd9\x12\x1c|\x90\xbfU\x92\x13!\x7f\xab ^<\xf0\xe2\xcdIi\xf0\xe2\xad\xc2\x8b\x07q\xe4\xe7\x1b\xe3\xb7[T\x0cy\xa6\xa3n\x1d\xfdt\x8b\xcf\xd0\x82 .\x04qWj\x1b\x03\xfc[\x9e\xb6\x00\xf8\xb7bJ\x03\xfc[ \xfc\x83\x00\xee&\x02\xc1\x85\x06o/\xb0e\xbc\xbc\xa7B\xa2\xa8\x0bFm\xfe\xcae\xa3\x9b!v\xc9\x8c\x0d\xa0\x8b\xeaEc\\\x07\x00Y4\x14\xbd'\xe4\xf4\x02\x80\x1d\x01;\xae/v\\~\xf6\xc2\xf28\x95\xcb\xf7\xafK\xed.\x1e1\xcf.\x1d\xd4KU{\xea\xbc\xf7\x08L\x01\x06\xc5l\xd4\x01\x06\xc5\x8a)\x0d\x06\xc5\x8a\x0d\x8amrOE\x97\xdfa\xa7\xabE\xa6\x96\x97]j\x83\xa9\xb1\x89\xa6F\x11?\x14\x9a\x1ce\x8d\x90?\x18\xb5%\xc0.i{\xa4\x8bGc]\x17\x93#5\x82\xd0\xd2H^\x07\x03\x03\x0c\x8c\xf550\x00K\xceV+\x80%WLi\xc0\x92\xab\xc6\x92\xdf\x19\xb55v \xf7\xd8\x00\x10\xb9\xb1 2\x8f\x11J \xc6b\xf4(\xc1\x92B:\xb3\x17!\x05\xc5\xa2A\xad\x03Z\x8c\xf5<\\\x8e\xa4\x7f\x03:\x04t\x08\xe8\x10\xd0!\xa0\xc3\x85Q\x1a\xd0\xe1\xaa\xd1\xa1\xa3U\x19 \xc2MD\x84\xc1\xe4\x97@~\xc5(\xf0\xc6a\xe2\xda\xa5F\xf1\x06I\xb1R\xd10\xd6\x01\x03F\x1dW\x100\xfc\x894\xfa\xe2\x08\xa3\xc1\xa7\xeb\x0b\xffp\x9f!\xb6M\x8b\xb8z\x99T|\x17%\xee0\x81\x1cUQ\x9d@\xd9\xc0\xa8\x87\xb9l\xc5f\xa3`\xed\x13\xb6M\x84\xd1\x0f\x8f\x89\xe4\x0d\xd8\xee\x08\xe0\xe6\x1a\xc3\xcd\xe5g;,\x80%\xe5\xdb\xd8\xc5\x9c\x13\xd1U\xaf^Y\xdeL\xd7{\xeal\xb6\xa4\xf9_\xa6\xb4P\x02q\x9e\xb9\xc9T\xdc\xd0\xc9\x01[\xf0aH\x11l\xc1\x15S\x1al\xc1\x95\xdb\x82\x12\x9a\x82-\xb8\xa1\xb6\xa0?\xf9Y\x15R\xf8\x99\xb5\x05?3\x81\xadk\xc6\xacw\xe1\xf1\x9fEFa^\xf1h`\xeb`\x1d\xe6\x8c\x00VD\x82\x9d\xb7\x99v\x1e@\xc9\xd9\x8a\x06\xa0\xe4\x8a)\x0dPr\xd5PR\xed\xd9\xa4O\x95\x8f\x1d\xe8\x0d\xc0r\x03\x81e>+\x94\x80\x96%`f\x89|\xe5D\xb9h`k\x03,\xe3\x19\xca\xb1\x0b\x80\x12\x01%\x02J\x04\x94\x08(qa\x94\x06\x94\xf88(\x91k\x85\x06\xe8ps\xd1a\xc0\x02%\x90` TX\xc1\xf1\xb8\xdeN\xc7\x94\xc31y-\x17!\x82\xe2\x9d\xfdB\x82\xe2]1\xa5A\xf1.[\xf1j)\x0b\x9e\x98\xcd\xd2\xb5\x99Y/\xa1R\x8b\xd5\xebK.\xe8\x08\x0brs\x87\x9d\x97\xf7\xd8\x10gj!\xfa\x95]\xa8i\x0bj\xad\x97\xd2\x9d>\x10\x08\xf8\x81+g3]9k\x91\xd8\xc9\x89m\x12\xb7,G\xea\xd2O\x9d\xa5\x964\xd7\xcb\x94\x0c\x82\xdd\x12\xbbK\xed\xb2\x13\x11\x94\xdf\xd0\xa9\x00\x0f\xea\xc3\xd0\x1e\x18r+\xa64\x18r\xcb6\xe4b[B\xf9Xt;\xb6\xa2\x1f\xb6 \xdb,\x03\xaf47d\x95L\xe1gi\xc3\xef\xa3'\xe6\xb1\xfcT\xb5h\xe4kl\xfa\xc9\x91\x80\xed\x07\xb6\x1f\xd8~`\xfb\xad\x90\xa5\x964\xd7\xcb\x94\x0c\xda\x96c^\xe9\xcd\xa2\xc3\n\x1b:\x19`\xfd=\x0c\n\x82\xf5\xb7bJ\x83\xf5\xf7$\xac?%1\xc1\xfc\x03\xf3/\xc6\x0eY5S\xf8\x99\xb5\xff\xce\x0ci\xbe\xbc\xc6\xde`F\xbau\xb2`4\xbcu\xb0\xf1\x12}WV]\xfcJ\xb8\x95\x0bV\x17\xd1@]\xadj\xc0=\x1d\\\x1c;S\xfa\x96L\xca\xa2\xb2d\xad\xa7\x0e\xcd*V\xce5\xbdz\x13A\x96ex9\xa7\xb7d\x82(\x0fO\xcc\x8f\x1ff}\x8d\x07$@sm\x9b\xdc\x8b\xae,\xac\x0e\xbd\x1eP\xbb\xa18\x89\xda\x03\xe5c\x90\xb7\xd5\xe9\xfch\xc4\xb8@\xa4\xdf\xa7\x06%\xb6\xb0&m\xf4\xd1\xb6&\x88\xd9\x04\xb1~p\\:s\xd5\xa9\xe8\xfe\xa1\xed\xfa\x8c\xfeR\x87\xa3/\x96\xefto\xe6`=]q\x13\xb8o\xb9\x86\xbfs\x1a\x9d\x9f\x8f\x91\xed\x8d\x88K\x8d\x80I\xd4\xfeU\x06\xb6%\x7fx\xab<\n?\x8b\xfd~\xd7\xc4\xbdT;o\x96\xf5\xffE\x15\xa2\x91\xad\x9b\x1f0\x1cC\xc6\x1f\x18\xdc\xc9\xf7\x0bJ\xc3Bo7\xba\xb6\x0e\xc2J\xdb\xac\xd6}kU\xe7\xf4\x92p\x95t\xa2F\xaa\x01|\xe8\x82\x0b\xa7~\xe0\x11^\n\xcc/`~\xc0\x81[\xce{\x01\x0e\xdc\xa5\xf1\x1d8pgr\xdf\xb2}g\xe0\xc0\x05\x07\xee\xa33!8p\xc1\x81\x0b\x0e\xdcY\xac\x17\xd0\x0c\x1c\xb8\x8f\xc7\x89\xe0\xc0m\x82\x03\x17\x1c\xb8sR\x1a\x1c\xb8\x8f\xe0\xc0\xed:\xc4\x0d\x8e\xae\xe1\xe0\xca\xddHWn\x9c\x07\xb2\n\xa5\xf03\xc7\xa9kY\xaf]\xe69329\xa3R\xd1h\xd6\xc2}\x1bv\\\xfbl\x83\x9f\x91\xa3\xd6\xb2\xd0@]\xcau\xce\x82\xe6\x9d\xfdB\x82\xe6]1\xa5A\xf3\xaeH\xf3ZV\xd7\x97\x0d\xa0l7H\xd9\xc6\xa6\xbd\x84N-\xa9_\xcb\xac\x97H\x97]S]\x9bX5\x91\xbc\x98\xd5\xbbEk'@\xfb\xce~CA\xfb\xae\x98\xd2\xa0}W\xad}!yi\x93\x95\xf0\x02\x13\x98\x02]\xf4\x8d\x8a\xa1\xd2G\xe5\xd4q\xac\xf8\x9aj\xe4h\x04I\xa5\x1c^\xcf\xb1\x87\xd1\x1d\x15C$\x86\x84\xbaqM\x0d\x8az\xce\xb7\x18\x14\xf5\x8a)\x0d\x8az\xe5\x8aZ\x8a\x0c-\xafAYo\xa6\xb2\x8es@ %]\xac\xb0\x95j:\x9f\\]\x16\xea\xe9X\xa9\xf5R\xcfQ\xc7\x95V\x0e\x7f\x86\xca8J\x1f\xd6j\xd8\xcfJ\xa0c\x82\xae.\xab&\x13?\xf5\xed\xe2\xca\xef\x14\x07\x9b\xc4=~\x96\xd7k<\xf0$\x17\xa2\x1e\xa1\xf6@e?SbB\x9a\xc3\xb2\xd5\x0b\xa0\xc8\x15S\x1aP\xe4jP\xa4\xd2u\xdd\xde\xa4K\xcd\xed_\xd4\xfco\x00\x90\x1b\x04 \xb3\x93_\x02/\x96\xc0\x8e\xc5\xf1\x96\xf5\x0c\xb3\xc4\xa3+\xa9\xa0J\x8f\x89!\xf2\x1c\x83\x8d\xd4B$\xdb\x84\xfd\xa9`y\xd3\xe20\x1f,o\x9aga ,oZ\x14\xff\xc1\xf2&X\xde\xf4\xe8L\x08\xcb\x9b`y\x13,o\x9a\xc5z\x01\xcd\x16\xef&\x84\xe5Me9\x11\x9675\xc1\xef\x07~\xbf9)\x0d~\xbf\x15\xfa\xfd \xb7\xeb\xf9\xa6y\xfb\x16\x91\xd0\xa5\x92\x98\xce'\xea\x8fr\x85\xcd\x8a\x14\xe7\x95\x8f\x06\xb4\x16\xde\xbf\x9c!hW`\xf6F\x94\xd4\x15$p\xd11\xb1\x11\x15<\x9e\xd0\x05\xa1d\x08%?\xa2E\x0d\xa0qy\xca\x05@\xe3\x8a)\x0d\xa0qE\xa0Q\xaa\xafno\xa2\xb3\xcet\xbe\x19\x04\x8e7\x11J\x162B PY\x0c0\xdf1\xe3V\xaa\x9eKO_(\x8e'\xe7\x94\x8e\x86\xb8\x0e\xe02;\x00\x05-3\x97C`i\xf9w\x90\x19\xdeR~M\xec\x124\xc6\x165\x91`\xc8\xa4\x12\x93\xf4\xcb?\xf0\x16\xf4\xfa\xec7\x1d\xf4\xfa\x8a)\x0dz}5z=\x90'\xddP\x9e\x806\xdf m\x9e7\xfd%\xf4v\xb1\x0e\x7f\xcfL\xcf\"\x9f\xd9e\xa8\x86.\x18\x9d\xa1\xc9\xa7\xd6Y/}>m\x18J\xabO\xb9\x19\xeavC\xfd\n\xd5\xf9\x80\xa9\xfc\x1d\x15-\x8a4\xba :|\xce\xf7\x1bt\xf8\x8a)\x0d:|5:|\xa4\xe4JW\xb0n$&\xbaJ\x98\x80.\xdf ]^\xc4\x06%\xf4x\xb1N\xffD\xee\xb0k\xf2\x97\\\x14\xaa\xf1x\xb1\xf5\xd2\xdc\xb1\x9e+e\x1d\xfd\x8e\x82:6\n\x8ez\x0e2\x84\\]\n\xf5]6B6\xbbC\x9e-\xa8\x850\xe2\x0e1h\x9f\x12\xb3!\xe8\x88\x04I\x1e}Ox.A\x9f\x87\xc4_\xbf\xe5\"B\xc5\x90\xb8\xc8q\xd9\x98\x9aD=\x04\x9b\xa6K8G\xcc\x95\x0d\x11\x95\x8e$\x81\x1ao\xf4\x99\x8b\xee\x86\xd4P\xbb\x04L\xd0\x1d\xb6U\x96I\x9f\xda\xa6j\x1fs\xce\x0c\x8a\xa5\xd0\xf4{V\xb7@\x13\xbb\xb3\x89[6\xd6\xa4\n?\xafu\xb8Iur\xbe8\x90sz\xe63\x9a\x82\x9c\x94'W\x16\xaa\xec6\x9fa\x03\xb6\x8f\xd8\xeaA\xe9Gk\xb1\x02B\xbeq]j\xf2\xb2\xcc\x16\x94_\"\xc7\x9c\xb9.\x9eHi\xf0 \xd6\xe1s\xd6~\x84P\xa5\xa3<\xa1\xe8\xea\x92\x07)\x9a*_\xce\xe7J\xcd\x8b\x01sRf?r\xa2$\xb1\xcd.q\x981,\xcb2a\x85%\xf2\xcc\x9c\x93\xbd\xf8\xa0\xf6\x92\x19\xe5\x8b\xe3\x10\x17)e\xab\x13\xc6Urx\x8aA\x1a\xef\xd8\x1dqQ\x98Qnx\xaeKl\x81\xd4$\x94\xe0\x1e\x08\x8f?\x0c\x96\x83 \xbebJ\x83 \xbe\x1a\x13\xdc\x87E]\xc2\xc5\xf6/\x05;!*\xbeI\xb6w\xee\xfcg\x15I\xe1g\xd6\xe8\xfe\xe2/,.\xb1\xb2:]4\x1a\xd3:\x18\xdf\xa9\xde\xfb\x06\xb8\xb6\xba\xb91$\xa6g\x113\xd8\x9cGY+C<&\xc8f\x02M\xa4}l\x18\x9e;\xc53\xbe\x16\xb6\x06\xac\xb6.\x87!a\xb5\xf5\xd2\x16\x1b\xc2j\xeb\x99\xdc\xb7l[\x17V[\xc3j\xebGgBXm\x0d\xab\xada\xb5\xf5,\xd6\x0bh\xb6x'\"\xac\xb6.\xcb\x89\xb0\xda\xba \x9eA\xf0\x0c\xceIi\xf0\x0c\xae\xc63\x18l\x0e\x07Gjl\x9eW03\xf7Y\x05R\xf89\xcb#xM\xdcKb\xb3Q\x05\xcf`T%\x1a\xdf\xfay\x08\xc3Q(Oa\xfe\xbd0m\xa7\xbc\x03\xb1\xd1\x9b }\xcc\xe7\xdaz\x12M\x9f,\xa5\x10\xa3\x7f\xa4\xe9S\x03\x89\x0b\xccpyE-A\\e:\x84\xbbt\x0e\xf0\xc0\x0b\xb8`\x84\x851\x0c\x92\xb5\x0c=\xf9\xa5\x0c\x80\x05L\x158}\xcby<\xc0\xe9\xbb4\xbe\x03\xa7\xefL\xee[\xb6\xbf\x0d\x9c\xbe\xe0\xf4}t&\x04\xa7/8}\xc1\xe9;\x8b\xf5\x02\x9a\x81\xd3\xf7\xf18\x11\x9c\xbeMp\xfa\x82\xd3wNJ\x83\xd3\xf7Q\x9c\xbe]\x87\xb8]\xdf\xd9\xc2\xc1\xfd\xbb\xa1\xee\xdf8\x17d\x95J\xe1g\xd6\x11|f(\x08\xf4\x8e\x19\xb7\xc4\x9c\xbd\xbdB^\xf1h\x84\xeb\xe0\x00\xce\x19A,M\x14a\xb5B\x92\x98\xf1M\x14\x0cl\xff\xfb_\xf7\xbbG\xbf\x0b\x89\x06\xee\xa8\x18\x9a.\xbe\xb3\xab:waI\xe4\xc6,\x89\x04\xb0\xb7<\x0d\x00`o\xc5\x94\x06\xb0\xb7\x04\xb0'\xb5\x8c\xe7D\xe70k\xad\xd4\xd5\xcaG\xef\xb6\x00\x0b\x80\xea\x8e\xf5*1A xW\x01\xea\x05;B\x96G{Q\x8d5\x06|\xe1 \x12K\x83|\xc2\x07\xd0\xcf%\x06sM\xae\x90^\xb4\x05\x87\x11n\x95 \xc0\x0f\x80\xdf\x82\x81\xdf\xf2sB\x96\xc7>f\xf4N\x95\xe2\xa0\xf05\x026\x00\xfc_\x1d\x15\x00\xfe_1\xa5\x01\xff\xaf\x1c\xff\x07\"\x12L\x80\xcd6\x01\xb2|P\x88\xf9+[\x01\xef\x98= nu[ ]/\x1a\xf5\xdaY\x04\xa9\xa1\x94\xb6\x0b,U\x0fl\x02\xb0 \xca \x8f\xea`\x10l\x02`\x03\xb0 J\xc1\x04\xb0 VLi\xb0 Vn\x13h\xc0\x01\xa6\x01\x98\x06\xc5\xecPh\x0f<\xd0B\x98\xbdJpv\xe5\x88\x0ckn+\xc4V\x0e\xa6\x0c\x06\x9d-\xc2\xd3vC_m\xc4\xad2w\xc0\x86\x00\x1b\xa2\xba\x94\xa9\x0e\x1e\x97oC,\x80O\xc0X\xa84\xdf\xcb|ea\xd9o\xc9I\x00\x8b\xeda\xe8\x0d,\xb6\x15S\x1a,\xb6\xc7\xb6\xd8t\xce6\xd8m`\xb7\x150EV\xe5\x14~V\xb2\xde>0\xf1\xc5\x96\xdd\xa0\xf6\xe0\xa3mM\xe65\xe4\xb2\xedD$Zs\x9b.3\xb4y\xe3A\x88\xdc\x1b\x96g\xea\x93\x17o\x89\xcd\x1b\\`W\nP/h\x1f\xcc=0\xf7\x16\x8c<\x97o\xee-\x8f}\xc0\n\\\x18\x1b\x80\x012\x1b\x86\x80\x01\xb2bJ\x83\x01\xf2\xe8\x06\x88\xcdD7\x84\x1f]f[\x13\xb0F\xc0\x1a)\xcb!\x85\x86He\xd3\xe4\x1as\xf1\x99\x8eHy#$\xaa\x11\xd1`\xed\xcc\x8dp\x10 \xc3\"eP\xb0\xbe:\xbe\xd5\xb76\x94y\xa1'E\x9fK\xd7#\x13f\x9b\xea;\x17x\xe4\x80!\x01\x86\xc4\x82\x11\xe4:\x1b\x12\xe1{Q\x96\x85\xa2\x17\xe9\x893B\xc5\xca\xb9[\xc0\x99X\x90-9\xe2\xf0\xe6\x82w\x81\x9b\x97\xe5\xc0h\x99\x8dV\xc0hY1\xa5\xc1hY\xb9\xd1\xe2`.\xa4|\x02\xd3d\xb3M\x93,\x1f\x14\x9a\x1bs\x1b \x15s\xdaR\xd5\xa21\xaf\xad)\x92\x93\xc7\xa6l\x8d\xc0\x1a\xe9M\x10\xd6\x07\xfc\xb7\"\x9b\xa35\xdf\x06\xf7`z\x80\xe9\xf1\xe8\xa6\xc7\x02\xf8\x04l\x8c'kc,S<@z\\\xc9I\x00C\xefa\xd8\x0f\x0c\xbd\x15S\x1a\x0c\xbdG3\xf4 /\x0e\xcc\xbd\xe9\xdc\x90U2\x85\x9f%\x8d\xbe\xf9S\xe1\xa6\xb7\x10\xd1cmM\xc1\xe2\xf4\xb7\x87E\xa9\x1a\xe9\x8c8\x04\x19q`MV\x13K\xd5\xc1\xe6\xf2\xad\xc9\xe5\xb1\x0f\x18\x99O\xd6\xc8\x04\xfb\xe6a`\x07\xec\x9b\x15S\x1a\xec\x9b\xc7\xb3o \xed\x0e\x8c\x9d9X\xa3\xd0\xce\xa9`\xf9hD/\xf5T\xe9\xf3=2U\xa2\xe1\xaf\x91m\x93\x1eE\xc2\x98\xf1\xc2\x9b\xfeQ\x1fwCj\x0c\xd5\xa9_6\x13\xd1)\x1fhB\x04\xd8%`\x97\x00H\\\xb9\x92\x00\x90\xb8bJ\x03H\\\x1dH\x8c\xf4\x0f\x9c\xf6\xb1\xd1\x90p:#\x94\x00}\x15\x00 1\xcfI\x9f\xb9\xa4\xec\xa2\x8b\xbcZk\x0c\x03\x13\x03\xc9A\x82\xe9\xf5\xdcIW\xb6\xac \x0b.\x00\x0f\x96\x14\x1f\xd5\xf1 \xf8\xa9\x9f\"#T\xac\x0c~\xea\x14`\x01\x13\x04L\x90j\x94\x06\x13d\xd5&\x081\xbb\x1a\xdfta\xd5\xc5\xc6\x9b!\xd3\x98\xa1\xd0\xf0\xa8l\x8aP{P\xd1\x15\x1d\xd5\x88\x86\xbbv&H8\x88\x1c\xf3\x83\xda\x03\xed\x87\x06\xdb\x02l\x0b\x00z+\x17\xfb\x00\xf4VLi\x00z\xab\x06z\xd4\x1e\x80\xab\x190^\x1e\x1f\x94\x80t\xc5\xf0\xee\x1d3n?\x91;\xec\x9a\x9f\x88A\xe8\x98\xb8\x85\xd8.\xaf\xf8z\x01\xbb\x9c\x11L[A\x8bz\x13D\xcd\xba\xe1:9\xc0.5\xcb\";\xbfx\xbd\xb1]\xc5\xca\xb9\xeeB\x8f\xda\xe2p\x1f|\x85\xeb\xa7U\x00B\xae\x98\xd2\x00!\x97\x0f!\x95\xdcv\x95\xa2\xeb\xba\xbe\xa6\xdb\xfe\xe5Ks@\x90\x9b\x82 g\xb1A \xd08\x1b@\x12\xf3|ru9\x138\x06\xc5\xa2!\xad\x0b`\xf4{\x0e@\x11\x80b\xa5\xca\x00\x14\x01(\x02P\x9c\x9f\xd2\x00\x14W\x03\x14\x89\xd9\xedM\xba\xd4\x04\x80\xb8\x91\x001o\xfaK\x80\xc12\xc0p\xf6&}\x89r\xd1`\xd6\x07\x1a\xe6l\xc3'\x98\xc0V\xb0\xed\x82C\xdc\x9c\xb3c\x1d\x89\xd7\x06tLl\x14\xcf1+\x0b\x1e\x17\x94[\xb8\x00\x98\x08[k\x95D_\xcb\xc4\xeap\x06O\xa5\xa9\x00 \xfc0% @x\xc5\x94\x06 \xbc2 \xec\xab(\x80\xbf\x9b\x04\x7f\xfdI/\x01t\x8bA\xef{fz\x169\xc7\x16\xb6\x8d\xe2\xc5Z\xa9\x92\xd10\xd6\x01\xf8&;\x1f\x83\xbe\xa8\xefY\x16\xea\xe9\x1b\x88\xf5\x91\x18\x124R\xa5s\x11.(\xdb\xd9\xaf$(\xdb\x15S\x1a\x94\xed\xf2\x95\xad\x96 ]_R\x80\xba\xdd\x10u\x9b\x9e\xf6\x12J\xb6\x8c\xc2\xd5\x8e\x98\xb3\x11\xf3lQB\xeb&\x8b\xaf\xa3\xeaM\x8c \xae\x7f}\x9f\x13h\xe0E\xbe\xa5\xa0\x81WLi\xd0\xc0+\xd3\xc0\xbe\x01\x84\x95(\x01=\xbcYz85\xf9%4p\xb16\xfe@\xee\xd5\xc6\xd43\x92\x81\xe2\xc5\xd6K\xfb\xc6z\x9e\x08\xf8\xd8\xe4^\xe8\x8c\xa0\xabKP\xb3s\xbe\x84\xa0fWLiP\xb3\xcbW\xb3R2t\x83\xdc8P\xaf\x9b\xa1^\x93\x93^B\x95\x16\xab\xd5w\xaau\x15\xe4/^z\x9f,\xb8^\xaa5\xd1w\xa5\\\xf5w\xe4\xc6\x12n=\x079\xeaj\x1b\xb4\xec\x9c\xef\"h\xd9\x15S\x1a\xb4\xec\xf2\xb5\xac\x16\n\xa0_7D\xbf\x06\xd3]B\x9b\x16k\xd6\x9b\x89-\x86DPCk\x9f\xf3\x89\xfe;\xc3~-\xa8\xb5^:w\xfa@\x12\xd6-\x0f\x8a\x05:\xb87A6\x16tL\x82\x0b\xb0\xfa\x05V\xbf\xc0\xea\x17\x00\x8e\xd3\xa1\x0c\x00\xc7\xca\x94\x06\xe0\xb8|\xe0\x18\xaa\xb6\xae\xbe\xd1\xedM\x02\xc3\x1d\x16\xc3l\x1c\xae,\xc9\x0d%\xa0f%\xd8\xc9\xe7\xc3\x9d\xbc6\xc0\x93?\x04y6.\x89\xe3\x12\x03\x0bb>C\x1e'h*\xaaE\xd4\xe6\x82`\xc0\xaa\x80U\x01\xab\x02V\x9d\x8a\x9e\x00\xabV\xa64`\xd5\xd5cU\x0e`\x15\xc0\xealv(\x81P\x8b\xd1\xeaK\x87\x19\xc3k\x97\x8d\xa9\xe4\x8c\xe2\x08d\xa6l4\xc8u\xc0\xa5\xe9\xee+0\x9a\xba\x18\x06$\xc5\x90 \xc3s]b\x0b4\xa2\xb6\xa0\xf6\x00\x11Y\x169Q\xe11\xb6<\x02\xd1\xcay_jP\xe4+\xa64(\xf2%(r)\x1dB\xb9\xadDD7\x12\x11\xa0\xb0\xeb\xaa\xb0gL{ e\\\xac\x98\xdfS[\x94\xc8\n\x8a\x17[/u\x1c\xeby^F\x90T\xc0z\xab\x15N\x04b\xfdP\x0b;\xa1\x8f\x064\xef\xbco'h\xde\x15S\x1a4\xef\xb25/d m\x90\xbe]X\x8e\xd0%\xe5\xc2\xbd\xb2\xfb\xacP\xc9\xc6J\xad\x97\x8e\x8d:\xaeTl\xf83\xa1e\x1d\xc6\xac\x7f\xff\xeb~\xf7\xe8w\x8eFX\x18C\xa9e\x07\xd8\x1b\x10DM\x8e\xb0m\xa2;\"\xdf\x12P\xb8s\xbf\x9e\xa0pWLiP\xb8KP\xb8RRlQ\xdb \xb6\xa0c\xc2CqlJ\xb9\xd2\xa5v\x9f\x81\xfe\xad\xab\xfe-3\xf7%Tp\xb1:~y/\x88kc\xeb*x\xcek\xa9\x86fx\xa5\xa7\xd5Y/U=m\x18\xdaK\x9d\x7f3T\xe3\xc4\xbf\x8f\xc2 \xd2\n\x1c4\xf6\xdc/4h\xec\x15S\x1a4\xf6\n5v 0\xba\xe1\xbd\xae\x16\x18\xa0\xc07M\x81\x17\xb0B \x1d^\xac\xcf\x95\x9a\xba2\x8b\x15xTh\xbd4v\xd8o\xa5\xa2\x83_H\xe0[\x12\x19\xd6\x88\x9a\xca\x82\x8e\x1b\xdcS\x8c\xec`\xdf\xe6\xda\x9d6-\xe9P!\x85\xd1/\x9e\x9aEHa\x84\x14F\x00\x97\x00.\xe7\xa34\x80\xcb\x15\x82K\xa5\xd6\xb6\xa8\xc9\xb7\x7f\xf9\xb2\x1c\x12\x177\x0eV\xe62A \x10Y\x0c(\x03\x07\x08\xfdI\xcck\xc6\xacbd\x99S:\x1a\xde:@\xcc\xec\x00\x14\xd6\xcc\\\x0e\xe1\xa5\x9f\xb2hMBO\x90,\xa3\x90h>\xac\x04m=\xfb\x1d\x06m\xbdbJ\x83\xb6^\xa1\xb6\x8e\x0b\x8a\xae\x16\x14\xa0\xac7LY\xe7\xf1@ \xfd\\\xac\xab\xa5fz\xc7\x8c[i\"^\x06\xbe\x8dB}=\xa5\xc6z\xe9\xec\xfcA(\xbd\x9d\xb9\x9c\xd8\xff,r\x00\xa1>s\xb5\xce\x86\xf8\xcd\xbc\xef2(\xed\x15S\x1a\x94\xf6\n\x95\xb6\xe5K\x92n\xe44\x06\xa5\xbdaJ;\x8f\x07J(\xea\xd9J;\xcc2\xe0%\x16 \xe4WX?\x95\x9d\x19C\xde\xa2\x04\x1d\xd1 K\xc2~\xa5\x0f|wAI\xaf\x98\xd2\xa0\xa4W\xa8\xa4aI\xc2f*\xe6\x85\xadN\xf8\xc2\x89{\xc1\xd4\x03\\,\x88y\xe39\xc4\xed[\x1e5\xaf\x19\xa7J\xe5_\x12\x8b\x0c\xe4\xbdB%]\xad\xa1\xf5R\xde\x95\xc6\x96\xd8\x80\n[\x16b}\x84\x91\xc7\x89\x1b\xac\x80P\x87\\\xba\xd8\x1e\x10t\xf1\x0e9A\x13H\x0c\xb1@\xd8%\x88\x87\xed#.\xf0-1\xf3\xd5\xff\x1a\xe7k\x98\x9a\\\xcc\xedb\xd3t \xe7e372\x15S,P\xb3\x1c\x0e\xd5IH\xaexjz\x07@\xe5\x8a)\x0d\xa0r \xa02R3!\xae\xc0\x86\xc1<[t\xcd@\x9du\x0d\xab\x1bj\xa8\xed_\x19\xf1\x0bi\x17\xb5\xc5\x9e\x0bb\x8f\x12\xb0\xf4\xc1\x10\xf5\x8b\xed?\x99\xda\x83\x87\xa2\xd4d[\xb5\x03\xaa\x89\xe1)\xacZ\xb1\x12@Q\x80\xa2s\xc9(\x80\xa2\xcbPC\x00EWLi\x80\xa2\xab\x85\xa2^L\xf7\x94\x80\x1b\x80F7\x0e\x8dV\xe4\x90\x12 \xb4\x18\x90\x9eY\xd6\x19\xe7D\x14G-c\xa5\xd6\x0bDF\x1d\xcf\xb82]2\xa0\\\x10 Zb>J\xacJC\x88r\xdew\x17T\xf8\x8a)\x0d*|E*\xdc\xb2\xbaZ8\x80^\xde$\xbd\x1c\x9b\xf6\x12\nv\xa6\xb2\xbd\xb2\x05qG\xc4\xa4\xd8\x9d\x9ci\x9d?S\xf5\xe6\xd7Y;E\x9c;\x8c\x8cZ\x8e\xe9b\x1a\xab\x80|\x804E5\x17\xf8l~x\xc4\x9d<\xdci\xb3\x00\xef\x8c\x83\x07\xd4V\xe4h\xdf\x92IY\xd7L\xb2\xd6S\xf7\xacT\xac\x9c\xbbP\xbb7\x11dY\xcb\xb4\x9d\xd3[2A\x94#\xac\xb7\xa3\xf7s\xd5\x88\xe46t\x8d\x07$@rmup\xb9,,\x18\xea\x91\x01\xb5\x1b\x8a\x93\xa8=P\xbb\x12\xc8\xdb\xc8\xc1\x03\x82F\x8c\x0bD\xfa}jP\xb5\x96\xac\x8d>\xda\xd6\x041\x9b \xd6G\xac\xdfW;\xf2\xba\xe8\x96L\x1a|\xc8<\xcbD=\x828\x11\x81\x92\xcd\xca\x8f\xd0\xa3\xb4h\xbe\xd3\xbd\x99\x83\xf5t\xc5M\xe0\xbe\xe5n\x13\xe0\x9c\xfa\x0c\xa1X\xd0\xf6F\xc4\xa5F\xc0$*i\xc2\xc0\xb6\xe4\x0f\x8f\x13\x13\xdd\x0d\x89\x8d|\x86\xf5l<\xc6\xd4\x92\xf2\xaa\xdd\xb8R\x0dX\x84\xf3\x88\xf3du\x1by\\r\xe8-)bC\xa4\xd9\xb0\xf1hlh\xd1\x11\x9d\x87\x0bU=`\xc2\x873\xa1\"\xa4d\xa1h\xdfp\xdb\x1b\xf5\x88+y\xc5%\xdc\xb3\x04\xd7\x82/! ei}W\x89\xbev\xe3\xaa\x8f,\xd2\x17\x88\x8c\x1c1AT\xa0;jY\xc8\xb7Id\x03\x81\x98\xd5mI\x16\xecM\x10\xc1\xc6\x10a\xc7y\x04\xce\xd3^\x165\xe29\xf8/V\xfb\xe9qa\x8f1\x8b`{!\xfc\x11\x1b\xa8\xe4\x12%\x9c\x18\x920\x1f\xc9/\xd46\xa9\x81\x05\xd1\x12+\xc6\x15\xb2\xa0\xaf\xe3\xa8mX\x9eI\x1a\x18\xa9\xc6$c\xe51\x1b\x15d\xc4Q(\xda\xf4Z\xae\x90\xe2\x92\xe9\xbe\\\xf1v#\xd5!&E\x9b4V\xb5\xf1\xaa\xe4d$X\xa5\xecl#-#\xe9\xc0fnL\x946\xf4pJ\xb1^@\xb3\xc5\x07\xeab<\xe5\x12i\x11\x929\xb8\xd1\xafYoN\xf4\x07\x99\xe6B\x1a\x89)\xec\x92)\xa2\xca$\xdc \xb6)\x15\"sM\xe2\xfa\x93\xee\x9c\xdeP\xdb \xcf\x90\xc1\xf8\x88\xf1-n\xde\xa2\x9d\xf6\xfe\xdel\x96\x80\x00\xdf\xc3<\x08\xe0\x1d\\1\xa5\xc1;\xb8:\xef`\xdc]\xd1\x0d\xdc\x15\xe0,\xdc0g\xe1\x14.\xc8*\x95\xc2\xcf\xac\xef\xf0\xb3\x84>Q:\x93\x9f\xa3?s\x8f\x80\xa2j\xd1\x88\xd7\xc1\x83X0\x92\x84\x131\x02\x99x\x14\x00\xcf\x11\xb1\x989\x89\xf9\x16\xadI\xb0\x1a\xa1\x11(g\x890Lb\xb3\x91\x84W\x1aC\xd8L\xc0y\x85sK\x00P\xf6+\xa64(\xfb\xd5)\xfb\xe8r\x90@\x0c\xbb\nl\xa0\xb6\x9f\xc6\x06%T|\xb1\xbaWY+\xef=KP\xc7\xa2\xc4-\x0e\x11\xa6\xcb\xae\x97bOw?\xa3\xcd}\xedM~xt\x8c-u\xc4pXZ\xfb\xc9}{_Eb\\b\xc8\"\xea\x8c\xc9\xc7\n\x16\x06e\x16\xef8R\x08\xa5\xac\xafH\x15~z\xee!\xc8\xc5^\x03\x89\x0e\xe8m\xc5\x94\x06\xf4\xb6\"\xf4&\xd5M7\xd2 \x80\xd96 \xb3e&\xbf\x04:+\x81\xd4>O\x1c2\x1b\xa3\xe9Rk\x88\xceT\xc7\x13\xb8,\x9d2\xad^\xe7\x16\xba\x1b\x121$.\xa2}DE\xb0G\x04F6V\x87l\xe9\x92\xccE\xd8F\x96\xd3\xe0C\xecN\xf1\xaf\x00D\x03\x88\x06\x10\xad\x1cp\x00\x88\xb6*J\x03D[%D\x93O\x07p\xb6q\xe0LO{ (V\x0c\xcb.\x98m\xab\xb7-'\xed\xbc\x10\xa9\x15W\\/\xf0V8\x96\x04\x9e\xcb\xcb\xb5GFP]g\xf2e\xb6\xf2\xd2\xfbp\xf7&\x88\x9aUQ\xdcS\xdfIA\x8e\xac\xc2!l~\xf1\xd4\xb4\xd6l\xd7\x84\x8a\x95\x1f!\xb1\x15\xd0\xe6\xf24\x12\xa0\xcd\x15S\x1a\xd0\xe6j\xd0f\xa8\xe5rsw\xb6\x7f\xf9\xb2\x1d\xf6c\xd8$,Z\x9e)J\xa0\xd3b\xa4\xfa\x92\x0b:\xc2\x82dr\x9b\x88y\xa62\x98\xce'_\xb1EM,\x98{\xa9|K\x85\xe7\xfbWo-\"\xd7:`\xda\xea\x03\xcc\x04\x94\xa3\xc40\x8c\xb8C\x0c\xda\xa7\x86\xce\xfdB\xe1np>\xe4\x0d\xee\x8e\x83&\x1b\x9f\x87\x94\xab\xc5W\xb8G,b\"l#\xe2w\xa9\x85z\xc4\xc0\x1e'\xea)wX\xad\x881\xb0ex\x16\x16$\xf1l\x03\xdb\x0d\x8b`\x13\xb9\xcc\xd3\x19\xeaJLs\xd4w\xd9H\xe7\xb0\xb9\x1e\x89uG\xd7\xab\n\xb3\x17\xe4,]\x00\xa0\x0e Xuk\xb2L\xc5\xa7\x0e\x93\x97\x84_\x97i\xed\x80\xcb\xba\xe4$\x80\x11\xf10(\x01F\xc4\x8a)\x0dF\xc4j\x8c\x88\x00\x02\xe4g\x04v\xb5\xf6\xee\xf6&\xddH\x9d\xf9r\x14\x8c\x8a\x8d1*\xe6g\x92\x12\x86E\xb1\x91\x11\xdb\x08w\xf6!U\xd9\xc2\xd1\xe0\xd7\xc1D\xc8\xf4?\xefp\xaah\x9d\x88JJ\xe8\xc7\xdd\xdbN\x08\x94a\xf9\xc7\xbc/8\xa8\xfa\x15S\x1aT\xfdjT=\x9cS\xb5q\x8a{aGT\xe5\xad_\xd4^\xab\x92\n9[m]Usf$\x197\x9d\xc1h2\xd30\xf2\x86\xf5\x99\xeb\xef\xf0\xe0\xef\x89\xdb\x8a\xda$\x80\xe3\xf2a\xa8\x07\xac\x99\x15S\x1a\xac\x99\xd5X3E\xae(\xb0q6\xc8\xc6)f\x84\xacj)\xfc,g\xf9\xf0\xf3\xc9e\x00U+\xdb?\xc9\xca\x11\x01\xd6\xd5\nJ\x8c'\xb3-v\xcc\xd8I\x1eX\xe10\xcaUue\x13%\xf2\x19\xfc\xc6*\xaf\xb0z\xea\xb9\xb9\x0b\xb4\x8b\x92\xd3]\xb3|]\x80\x92OR\xb9\x00\x94\\1\xa5\x01J>\"\x94\x84\xa3\xcd\x00X\x96g\x8b\x12\xd0r.\x98Y!\x81\xb6d\x0b\xb5\x00\x9cE\x89\xb2\x01\xeaL`M\xff0\xba\xd9\xa9\xb3\xcc&\x8d\xd0\x01Z\x15\x80>\x1d\x17<8\x7fKK\x93|\xb0\xb8\\;\x00\x9c\xbf\xa5&\x01\x10\xfb\xc3\xb46 \xf6\x15S\x1a\x10\xfbc\"vHS\x05\xc0^\x92+J`\xf4\xb2x\xfd\x8bm>\xc41<\xbdzD\x91\xf5B\xeaSG\x94\x0b\xd3\xe3\x07G\x83\x7f\x18\xfc\xc3O\x13m.\xdf\xe8[&[\x81\xb9\xf1`\x06\x00sc6\xe6\x00sc\xc5\x94\x06sc\xe5\xe6\x86g\xa7\xa0e\xa8{!^\x00\xe6\xc7\xbc\\Rh|\x941G\xd4!C\x91\x8b\xbc\xac\x19RT-\xa2\xc8:\x98\x1f\x05#\xc9\xe4\xe7\xfb\xa6\x04 \x13\xf3\x0b\xcd\x0c\xb02\xc0\xca\x98K\xec\x00\xc8\\\x86f\x01\x90\xb9bJ\x03\xc8\\\x0d\xc8Tk\xba\xe3)\xac\xb3a\x03\x80\xcb\x8d\x01\x97spG Y\x0c*\xbf\xd8\x0ec\xd6\xb7!\x15\xc4\xa2\xbcx\xa5g\xa6\xecz\xc1\xc7t\xf7\x93\xaej$\xaf!\xd6GwA\x01b\"Y\x01Q\x93#\xc1\x90\xa7\xaa\xc3\x9e\x0b\xf3\xbe\xd1\xa0\xd4WLiP\xea\xabQ\xeaZ0tC\xb9\x01:{\x83tvv\xf2K\xa8\xe1b\x95\xac\xf2\x1d\xcf<1d.\x15\x93\xf7D`\xa9\x93\x0b5\xf3\xb4*\xeb\xa5\xa0\xa7\x8cB\xe9\xe9\xfc{H\xfbL\xa4\xfa\x1e|\xba\xbe@*N\x87FD\x0c\x99\xde\x87\xa1O\x841\xa4\xf6\xa01\xa5\xbev\x089\xd8\x15\xd4\xf0,\xec\xeat\xd1\x1aF\x9d+\x87\x07\xc1\xef\x03~\x9fU+\x10\x80\x88+\xa64@\xc4\xc5AD\xc6G\x8cS\xbe-\xd8-\xb1\xfb\xd8\x10\xcc\x9d\x840A\xc9T\xb5\xae\xc4f\xa3\xff\xde\xc6\x81\"\xea\x8e|M\x04\xa0\xb1f\xa0\xf1\xa1\xecP\x02:\x16\xc3\xc8s\xd2g.\xb9!\xb6\xf9\x86\xb1\xdb3?\x0eT\x84\"\xa7\xd4X/\x10\x99?\x08\x85!so\xcd\x82\x90\x8d\x01\x11*oQm\x90\xef\xd7q\xc9\x80rA\xdc\xd8n_=\xd58\xe2\xc46\xd1\x90\xb1[\xc0\x90\x80!\x01C\xae^\x9f\x00\x86\\1\xa5\x01C>\x0e\x86\xd4\n\xa7+\x15NW*\x1c@\x90\x1b\x8c \xb3\xccP\x023\x16\xe3G\xe51\xe3\xaf\\6\xbap\xc9\xcc,\xb3\x9c\xd2\xeb\x85\x1b\xb3\x03\x88\xfc\x8e\xf1\xcb\xb3\xf0b\xe8rD\xd8\xb2\x1ajz\xa8\xed\xa7\x9f\x19\xb2 b\xa2\xde$\x9e\x85\x86\xcd\x11\xb5\xb7\x0d\xdd|\xed`\xa3\x11R\xb3\x14p\xf4\x8b\x03t\x04\xe8\xb8rE\x02\xd0q\xc5\x94\x06\xe8\xb8R\xe8\xd8\xed\xbbl\xd4\xf5%\xec\xf6/\xff\x0b\xe4\x98m p\x9c\xca\n%\xa0b1l\xfc\x1c{h\x89\xe3|\xf2\x8a\xaf\x17p\xcc\x19A\xfcH\x9f\"\xb8(\x86X\xa4\xce\xfc\x89\xdaB#fz\x16\xf9\xf7\xbf\xeew\x8f~\xe7\x0d8\xf6\xe7\xe1/<(\xf8\x15S\x1a\x14\xfc\x8a\x14<\x9c\xfb\xb3y\x9a|a\x07\xff|\xbe\x7fE\x08?\xc7\x9c\xcc\xde\x810Sv\xcd\x94u\xaa\xfbSr\xc0\xb1e\xa1\x1e\xe6\xc4\xdf=P\x91\x9f#lK\x95M\xa8\x8b\x0c\xe6ja\xa4N\xc7v\x18\xb3@+\xcf\xfd\xf2\x82V^1\xa5A+/N+\x87\xb9\xc1\xe2\xbeO\x08\x0f\x85\xb3\x94\x1e\xb0=Y-\x95r\x99)/\xa1\x87\x8bu\xb2RO\xd7\x8cYW\xe6\xec\xb8KPn\xbdtq\xbc\xeb\x99\xf5\xfbR\xa7^]&\x17\xec\xab\xc5\xfcR\x1fS\xdb\xf1D\xed\"%\x90`\x03Q\x925\x10\xeb\x00\xd7VLi\x80k\xcb\x87kJ\x9cv\xd5R.j\x06Y\x15\x80\xdc6\x04\xb9M\x99\xfd\x12\xc0\xad\x18\xc4\xbd\"DE\x07\x8aC \xb1R\xeb\x05\xe0\xa2\x8e+\xf8\x16\xfe\x0cC\x1aI\x87\x8a\x84u\xf1\xc5\xf5}B2\x9e\x95F\x9eg\x05] d2\xc2\x91\xcd\x04\xa2\xb6ay&Q\xad\x85~\x9c\x96l\xd8\x18\xa2!\xe6\x88\n\x8e\xd8\x9d\xdd\xd0\x91\x16b\x9b\xea\xd5\x00\xef\xcc\x9c\xb2\x00\xd4\xfd\x8a)\x0d\xea~\xf9\xea\xbeOHW\x8b\x1e\xd0\xf1\x1b\xa2\xe3\xe3S^B\x99\x97\xf0\xce\xdc8L\\\xbb\xd4 \xb3\x1d4\xb1\xa2\xeb\xa5\xe2S\xbd\x8fRb\xc3k\x91\xb2\xb7,\xc4\x1d&\x90#/s\xd4\x9b \x82\x8da|\xad\x94\xa2\xff\x9cK\xeca\x0bnp\xc0\x00\"\x03D\xf6\x08\x94\x06D\xb6|D&5GWi\x0e\xbd\xeb\x1d\x04\xce6\x07\x9a\xe5\xce} \\V\x8c\xd1\xce\x0c\x83y\xb6(\xf6\xbdD\x85\xd6\x0b\x97\x85\xfdV\x88,\xf8\x95\xc0bbH\x10\xb9\xa7\\-^\xc7~\x89,\xea\x8a\x0f\xed\xf5\xed\x8f\xd7?\x11a\xb7\xff\xbc\xfd\xa34\xbf\x98\xa3\x9f?\xdc+%\xeen\xa8m\x90g\xc8PiK[\xdc\xbcE;\xed\xfd=_\xce%'k%`o\x01\xa8\xce\xc1\x03\x7f\xf9V\xfb\x96L\xca\xc2\xbbd\xad\xa7\x8e\xf3*VF\xc1\xc4\xfc\xdb\x12\xbf\x07\xdf{\x13A\xc2\xeb\x83\xe8:Z\x00\x98tNo\xc9\x04Q\x8e0\x1ac\xcb\x0bL\x0eb\"j\xa3k< \x014l\xdb\xe4^tea\xc1P\x8f\x0c\xa8\xef\x05\x0c\xb6o\x90\xb7\x91\x83\x07\x04\x8d\x18\x17\x88\xf4\xfb\xd4\xa0\xc4\x16\xd6\xa4\x8d>\xda\xd6\x041\x9b \xd6G\xac\xdf\xe7D \xe6\xa2[2i\xf0!\xf3,\x13\xf5\x08\xe2D\xb4\xb3\xdc\x9c\xc6\xb7\x8b\xe6;\xdd\x9b9XOW\xdc\x04\xee\xf3\xa8-\x0e\xf7\x97\xc7\x7f>C(\x16\xb4\xbd\x11q\xa9\x110\x89\xca\xe17\xb0-\xf9\xc3\xe3\xc4DwCb#\x9fa=\x1b\x8f1\xb5\xa4\xbcj7\xaeT\x03\x16\xe1<\xe2\xb2H_ 2r\xc4\x04Q\x81\xee\xa8e!\xdf\xc8\x91\x0d\x04bV\xb7%Y0\xf0\xe5`\xc7y\x04\xceS\xd0\xa5\xabF<\x07\xff\xc5j?=.\xec1f\x11l/\x84?b\x03\x95\\\xa2\x84\x13C\xd2d@\xf2\x0b\xb5Mj`A\xb4\xc4\x8aq\x85,\xe8\xeb8?\xb8\xd6\xc0H5&\x19+\x8f\xd9\xa8 #\x8eB\xd1\xa6\xb2\xb4\"\x8aK\xa6\xfbr\xc5\xdb\x8dT\x87\x98\x14m\xd2\xfa\xd5\xd6\xb0\x92\x93\x91`\x95\xb2SE\xfa(Gt`37&J\x1bz8\xa5X/\xa0\xd9\xe2\x1d|1\x9er\x89\xb4.\xc9\x1c\xdc\xe8\xd7\xac7'\xfa\x83Ls!\x8d\xc4\x14v\xc9\x14Qe\x12n\x10\x1d\xfde\xaeI\\\x7f\xd2\xcb\x1b\x17i\x96\x00w\xe3\xc3\xbc\x11\xe0n\\1\xa5\xc1\xdd\xb88w\xa3\x96\x16j\x83\xc5\xd0\xdd\x14\xfaB\xc0\xbfX/\xffb\xf1dgUD\xe1\xe7T\x87b\x19\x7f\xe2\x9a\xba\x13\x13\xde\xc4\xc8\x99\xe8\xff6\x89\xc0\xd4\xe2ja\x9c\x89\x98\x1d\xec\x86Y9\x94\xfb\xd4\x13\xf1+\x9e\x99\x07'\xe5\xcd\xc2\x838\xb5\xd5j|+U\xc1\xfc=\x11\xfa\xcc-\x01\xf0\x01\xcd=L\xf6\x03\x9a[1\xa5\x01\xcd\xad\x06\xcdm\xff\x823\xf36\x10\xd7\xc5\xa7\xbd\x04\xaa+Fx\xef\xd5\x8e;\xa5\x02\xc7\xe9\xa2\xeb\x85\xf7R\xbdW\xb0/ymz(YoK\x14F\x94a\xdf\x83y_WP\xc5+\xa64\xa8\xe2\xe5\xaab-\x19\xba\xe0_\xd9 =\x9c\x99\xf3\x12\x8aw\x86\x9b\xc5\x13\xc3\x12\x1b\x07\xc6\x8b\xad\x97\xf2\x8d\xf5<\xbeQ\xa0\xb4\x82)\xd1\n\x176\xfb{\xf8[\x08\xeau\xc5\x94\x06\xf5\xba\\\xf5\n{\xfcm\x8cV]\xd8\xd6~\xaf]<\xcb\x92\x0d\x8a\xac\x97\x12\xf5{\x9d\xd87(Xl\xfe\x1f\xff\x9c\xd7\x9f\xaa\xe8\x7fZh \x0b\xab\xf5g\xca\x94\xd5? \xeaMb?\xab\x9f\xbc\xf0t\x92\x94\xfd\x11\x94\x0dX\xf8\xc5k\x1cr\xc8yA\x16\x9b\x9d\xe6\xb3P5\x8a?\xc1\xac\x9f\xf5\xa1\xf8\x88\x0f\xbaR\xe3v=\xb7t\x16`\xbcN\x8di\xef\x9c~t\xa4\xa4\xc3V\x0b\xc5\x87\xdc\xd2 t\x9c\x88\x96\xce\xf1\xd4\x816\x95\x87\xa78\x92\xa3\x11\xf6\x0f\xab\x19\xd01\xb1em\x05kJ\x04\xe2\x162\xa9\xb0\xba\xa2\\j1\xac\xaeX\x1a\xdf\xc1\xea\x8a\x99\xdc\xb7\xec\xc4vX]\x01\xab+\x1e\x9d au\x05\xac\xae\x80\xd5\x15\xb3X/\xa0\xd9\xe2\x93\xee`uEYN\x84\xd5\x15M\x88R@\x94bNJC\x94b)Q\x8a\x9f\xa1\xefZ{\x16 LQ\xdf0Ev\xae\xb3\n\xa2\xf0sJ\x9c\x82\x90\xb2\xe1\x8a\xa8d\xd4\xfb\xb5\x89Z\x84\x9dW\xc1\x8b\xc4\xa5\x9c\x9ds\xff\xa3\xee$#\x1a\xd2b\xf0]\xca\x95\xa3\x16O}\xf1\xc5\x9c\x9e\xf5\xe4\xfc\xc1\xe2\x8b2~\xf9\"\xec\xb6\x16q/p\x1f\x97\xf3\x9d\x80\xfbxi\xde\x13p\x1f\xcf\xe4\xbee{\xee\xc0}\x0c\xee\xe3GgBp\x1f\x83\xfb\x18\xdc\xc7\xb3X/\xa0\xd9\xe2\xcd\x06p\x1f\x97\xe5Dp\x1f7\xc1}\x0c\xee\xe39)\x0d\xee\xe3\x95\xb8\x8f\xb7}\xbf\xce\xf6/\xff\x0b\xac\xea~\xbe9\x0e\xe5\xbc\xd9\xcf*\x91\xc2\xcfi.f\xb7\xb4\x8b\xd9]g\x17\xb3\x9bu1\xbb)\x17\xf3\xccl\xf9\xd0\xc9\\=5~=\x9c\xcc\x95\x13\xe6\xc1\xc9\x0cN\xe6\x92,\x03N\xe6\xc5\xfaW\xc0\xc9<\x8f{\x0f\x9c\xcc\x8b\xe2?p2\x83\x93\xf9\xd1\x99\x10\x9c\xcc\xe0d\x06'\xf3,\xd6\x0bh\xb6x\xb3\x01\x9c\xcce9\x11\x9c\xccMp2\x83\x93yNJ\x83\x93y\x95Nf7p3\xba\xe0d~\xbeqN\xe6\xc4\xecg\x95H\xe1g\xd6\xc9|fY\xe7\xd8\xc2\xb6Af\xec^\x16/\x17\x8de\x1d\x1c\xcc\xf1\xae\xeb\xfd\xe2\xa3\x0b\xe1&fR\x8f\xf7\xf4E \x17\xb1e!\x83Q\x9b+\xa0\x88\x91\xb4v\xa3=Dk\xe7^\x86\x0d\xe4\x17\xea^\x8e6\x90\xa7S\xf6\x8e\xef\x05\xfc\xf7\xf0M\xe4\xc1'\xfdD\x18\xa6be\xf0I\xcf\xb2\x8b\x17\xcbw\xe0\x93\x9e\xc9}\xcbv\x07\x82O\x1a|\xd2\x8f\xce\x84\xe0\x93\x06\x9f4\xf8\xa4g\xb1^@\xb3\xc5\xdb\x1a\xe0\x93.\xcb\x89\xe0\x93n\x82O\x1a|\xd2sR\x1a|\xd2\x0b\xf7I\xf7\xb0}\x1b:%\x03\x17\x06\x9ccUwg\xf4\xcci\xcf\xaa\x8d\xc2\xcf\xac\x17\xdaw\xc7\x16z\xa0\xc32Q\xe7\xd7\xc1\xfb\x1ct[y\x9e\xfd\x1fS\xbd\xce\x81\x9f\xd9`\xd4\x06\xcf3x\x9e+\x8b\x80\x9ay\x9e\x97\xc7w&\xb1\xd9\xa8,\xd7\xa9\xc2\xb5\xe6\x1a5\xc2\x80g\x94\xf4\xd1W\x96\xc16`-\xccF\x14`-\xac\x98\xd2`-\xac\xdaZ\xd8\xeeM\xba\xbe`\x05\xb3a\x03\xcd\x86\xd8\xfc\x17Z\x0b\xe5\xec\x07N.\x95F/\xb6 \xc2R\xd1H\xd6\xc3\x86\x08:\xee[\x11\xfe\xcf\xd0\x8e\xd0\xa6B\x0fs\xa2\xf5v\xe0B\xd6\x87d\xe0@\x99\x0716B\xc5\x90\xb8\xa8G\x1a\xda\x00 \xaa!*8\xb1\xfaH\xb56\"\x02Kb\xfa\xb7<\x9b\xfaQ\xba\x11v\x14\x9eL\xd6\xadl\x99\x00D\\'\x88\x08`oyz\x00\xc0\xde\x8a)\x0d`o\xd9`\x8f\x13\xc0v\x1b\x84\xed\xa2\xe9.\x01\xdf\x8a\xa1\x9c\x026\xfc\xbd\x0f>\n\xf1\\\xba\xe8z\x81\xbaT\xef\x15\xb2K^K\xb8\x89\x0dK%:\x85\xa8LA>K\x8a\xfc\x01\xe5\x82\xb8\xc4\x8c\xf9m|\xfc7\xe50\xe6\xe5\x83\xb2\x05\xa0/\xc8\x18-\x97.\x05\x19\xa3KK\x98\x82\x8c\xd1\x99\xdc\xb7\xecd=\xc8\x18\x85\x8c\xd1GgB\xc8\x18\x85\x8cQ\xc8\x18\x9d\xc5z\x01\xcd\x16\xef\x88\x83\x8c\xd1\xb2\x9c\x08\x19\xa3Mp\x0b\x82[pNJ\x83[p\xb9nA\xe5\x9a\xe0\xdd\xc0\x85\x01\xbe\xc1\x0d\xf0\x0df\xe6<\xab0\n?\xa78\x08\xcb\xfb\x07\xd7\xda=8\xb7wP%\x93\xea\xe8o\xc6+X\xd9)\xf8\xd4sH\xe7\x08\xd4\x9a\x90?:o&\xa0\xbc\x1e\xf7B\x970\x0e\x00 >La\x00\x12\\1\xa5\x01 \xae\x14 n\xffR\x17`\x01\xd1\x06\"\xc2h\xeeK\xa0\xc1bdx\x8e\xed[\x05O\x8a\xb7\xb2\x8a\x17[/L\x18\xeb\xb9\x02\x84\xfa{\x02\x08:!<\x93\x18\xf0^\x91\x1e\x8d\x98\xe9YSN\xde\x05\xfd;\xfb\xf5\x04\xfd\xbbbJ\x83\xfe]\xae\xfeUR\x02\x8e\xbc\xdf\x04u\x1bLu \x8dZ\xac]?3\x81\xad\x1b\xcfq\xacI\xa1zM\x94[/\xfd\x1a\xef\xbaR\xb0\xb1\x0b -\xabCk\\\xdf\x88o\x17Y\xd9\xb7\x02 W!g\xaf\xc03R\xb12$\\\xcd\n\xfa.\x96\xef \xe1j&\xf7-;\xd7\x05\x12\xae \xe1\xea\xd1\x99\x10\x12\xae \xe1\n\x12\xaef\xb1^@\xb3\xc5\x07\xd4 \xe1\xaa,'B\xc2U\x13\xdc|\xe0\xe6\x9b\x93\xd2\xe0\xe6[\xae\x9bO;(\xc0\xcd\xb7\x01n\xbe`\xaa\xb3\xea\xa1\xf03\xeb\xe6\xd3\xde\xae\x8f\xfdB\x1f_T(\xea\xf2:8\xf8\xc2~+\xef^\xf0+\xe1\xda\x8b9\xf5\xe2\xbb\xf1Uv\xecA\xd2\x14$M\xc1\xf6i\x8f$\xf9\x01\xc9\xad\x98\xd2\x80\xe4V\x81\xe4 Oj\xe3\x10\xdd\x02\xd3\xa3b\xc1\xccoT\x0c\x99'>\xeaxK\xc9hn\xaa\xd2z!\xbf\xa9\xe3H\xc7y\x13w!\xe8;\xcb\xcb\x07A\xdf\x05\xc0G\x08\xfa\xce\x13n\x83\xa0\xef\xa2\xf8\x0f\x82\xbe\x10\xf4}t&\x84\xa0/\x04}!\xe8;\x8b\xf5\x02\x9a-\xde!\x08A\xdf\xb2\x9c\x08A\xdf&\xb8\n\xc1U8'\xa5\xc1U\xb8\nWa\xf7N\xfb1\xba\x81\x95\xc4\xc1c\xb8\x19\x1e\xc3\xcc\xccg\x95G\xe1\xe7\xf4\x90py\xaf\xe1\x94\x1a\xd1\xd8\xd6\xc1e\x98?\x08\x88\x1cC\xe4\x18\"\xc7\x00\x07\x01\x0e.\x86\xd2\x00\x07\x1f\x01\x0eB y\xd3a\xe1\x02\xe3\xca\x17l4\xf2l*&\xd7\x8cY\x85\xb00Ur\xbd\xe0`\xb2\xf3\n\x06&.%\xf7c\x0b\xee G\xde*\x08\x13\x83R\x9e\xfd\xb6\x82R^1\xa5A)/\\)\x9bTZ\x0d=O\xc9\x92@4\x87b\xa2+\xc5\x04h\xe3zj\xe3RS_B\xf5\x16\xab\xe1Kb\x91\x81\xfa\xaa\xb2\x99>\x91;\xec\x9a\xc5;aM\xab\xb2^\x8ay\xca(\xfc-S\xf3\xee\xe5\xa4u\xb9\xfe\x1dl\x18\xaeGL\xd4\x9b \xac\x82\xc2\x8d1\xb6\xa8\x89\x85\xb4\xbek\xe7\xc8Q\xc4an\xb7\xe2)\xfc\x99\x8a\xe0\xe0)p\xf0\xa4h\x85\xf4\x0cr?\x1c\xe8\xdf\xcd\x1e\xd4\x0f\xfe\x9eU\xa8\x1e\x80\x96+\xa64@\xcb\xd5@\xcbP\xb2pi\xea\xa7d\xd0\x7fo\xfb\xfa\x0e \xe7\x06A\xce\xb2,Q\x02~\x96\x85\xa2\xd5P\xe8\xda\x03\xd0)\xd8\xb3\"\xec4\xc3\x8a\x8f\x049\x01[\x02\xb6\\r\xb6ahUU\xe5\x8fLE\xe0\x8f\xa9\xfc\x91\xa1U\x82?\xc2\xbb\xf3\xf2\x07\xd8\x1e\x0f\xc3 `{\xac\x98\xd2`{<%\xdbc\xfbWF>A@\x1a\xec\x91rlR\xc2.)e\xa30\xf7k\xd0z)+%Y>\"\xc2\x1a\xd9)\x89!\xc4-\x95\xf8\x8d\x84\xad2\x8e.\xab\xec\xc6p\xb2\x1e\xc9>Y\x1e,\x05\xb3e\x05\xb0t\xc9f\x0b\xc0\xd2\x87\xa9\"\x80\xa5+\xa64\xc0\xd2'\x01K#-\x07(\x14Ph\x1eW\x94\x00\x9a%A\xe77*\x86\xa6\x8b\xef\xce|\x94Q\nyf*\xad)\xfcL\x8f#\x89ASwC z\xe7_\x0fa\x01@Q\x80\xa2\x00E\x01\x8a\x02\x14]\x1c\xa5\x01\x8a> (\x1a\xe8\xbaP\x82\x03 \x05@:\x957J@\xd1\x19\xb04\xd6\x8d\x12\x07\xe8\xe6\x15_3(\x9a\x1dA\xde\x81\xba\xfa\xec\xc4`\x9b\xa0\xf8d\xc1\x91\xba\x0f|\xb1A\xb3\xaf\x98\xd2\xa0\xd9W\xa3\xd9\xe1h\xdd\x8dS\xd8\x0b;b7\x0c\xbf]\xb0\xd1\x88r\xc9\x02\x85\x8a8\xb7\xfczi\xe2\xbc!(U\x9cs#\xd4\xcb\xd80\xbc\x91ga)\x8f\x8c\xe8v_\x1a\xea\xa8\xbe\xebu gn\x05\x1e!\xc8\x99{\xd2\xfa\x05p\xe3\x8a)\x0d\xb8q5\xb81\x8a3\xe5% T\xca\"-\xd8\x85\x15\xe5\x00O\xcb\xb0G lZ\x12\xa7\xdeX\x98\x0fIIp\x1a\x16^SD\x1a\xf4? C\xfd\xab!\xf6\xe4\xf27\"cb\x8b4\x00\x05\xe0 \xc0\xb3\xaa0yT\xe0Y\xc0\x9aO\xe7\x00E.\xb0+\xa4|\x1b\x12\xa9\xc6\xca\xb2`\xaa\xdaSg\xa1\x8a\x95\x1f\xe5\xfc\xb0\x14I\x13|\xca\x1c)L\xb1\x85\x82B\xc8/\x14\xb2\xab\xda\xc0_\x0b\xd3\x12l\xbb\x10\xd6\xd1\xc7\x00Ud\x9cD%`\x9b\x15\xb1\x8d\x7fb\xd3\x13`\x1a8\xb0\xb5\x1c\xdb\xc0\x81\xadK\xe3;8\xb0u&\xf7-[h\xc1\x81\xadp`\xeb\xa33!\x1c\xd8\n\x07\xb6\x16\xf1\x07\x1c\xd8\xba\\\xff\x07\x1c\xd8Z\x96\x13\xe1\xc0\xd6&\xc4\xda \xd66'\xa5!\xd6\xf6$bm\xbe\xa3!|\x10\xc4\xd76>\xbe\x16\xb2DV\xdd\x14~fcjg\x96\xf5rLMb\x1b\xa40\x9c\x96(\x17\x0dp\x1d\"i\xf1\xae\xab Z\xecB\xb4\xb2\xc0\xb2\x10\xf1/V\x0e\x98=\x9d\xa8\x04x \xcb\x99\xc8\xe0%\\\x9a\x91\x0c^\xc2\x99\xdc\xb7l\x07\x0dx \xc1K\xf8\xe8L\x08^B\xf0\x12\x82\x97p\x16\xeb\x054\x03/\xe1\xe3q\"x \x9b\xe0%\x04/\xe1\x9c\x94\x06/\xe1\xc2\xbd\x84\x81#\"t\x07\x05\x17\xc0\x07XO\x1f`\xc1\x84gUE\xe1g\xd6\xc3W\xca\xbd\xb7\xae\xbe\xbd\xa4c/\xe3\xd5\x0b\xc8\x88zX\xda\xba\xcc\x8e\xae\x0c1\x1fVv\xf4=\xf5\xcc\xf8`t]9\xba\xb2p/Q)5o5\xcb\x88\xafX\xf9\x11\\\x87\x89\xc9H\xe4\xa4\xaa\x0b\xbe\x85#\xc9N\xb8\xd2\x9a\xa1\xcf\x1a\x90\xe5\x92u\x10 \xcb\x15S\x1a\x90\xe5\xea\x90\xe5\xf6\xaf\x84\xe4\x81\xf3\xb86\x0dif\x19\xa0\x04\xda,F\x9eg\x96\xc5\xee\xf0,\xe8\x19+\x15\x0de\x1d\xb0g\xd4\xf1 \xaa\xac\x7f\xfa>\"\x8e\xfa\x84\xa0\x81\x8bm)\x83\x04S\x8a[\xff$\xa87\x89\xfd|\xac\x15\x9a\x0b\x00\x9c\xfe\x00\xcaBM\xbfx\xbdA\xe6\x83\xf0\x9fO\xa1 n\x12;\xf2B\xfe\xf48q5\xd3P{\x80\xb0\x8dp\xc8t\xba\x04uQ\xdf\xb3\xcdr\xab\x92\x82\x9e-\xde\x0e\xf1\xd9\xbc\x1a[\x10`\x8b\x19lA\x8a\xd8\xa2G$O\x04\xf2&\xcd\x1b\xd8fbH\\U\xf4\xdf\xff\xda;\xf9\x9d\x97f\x14\xb0\x1b\x1e\x86(\xc0nX1\xa5\xc1nX\xb8\xdd\xd0'DI\x96\x106\x86\xc2e\xfb\x97\xaf\xb2\xfe;\xf8F\xc0x\xa8\xa9\xf1P\x95\x0bJX\x0d%-\x88\xe2\xbd^\xe2\xc5\xa2\x11\xad\x95\x0d\xc1SF\x04\x0f\xad\x08lY\x91\xad\xc0\xf5^\xd75\xddQ\x10`\xe3Ba\xe3\xbc\xa0\x0e2\x9d\x9f\xc8\xdcW\xac\xfc\x08\xe1\n\xc8t\x9e'\xc7\x142\x9d\x17\xc5\x7f\x90\xe9\x0c\x99\xce\x8f\xce\x84\x90\xe9\x0c\x99\xce\x90\xe9<\x8b\xf5\x02\x9a-\xdel\x80L\xe7\xb2\x9c\x08\x99\xceM\xf0+\x83_yNJ\x83_y\x85~e\x0e\xee\xe4\xcdu'\xf3\x85z\x91_\xb3q\x89\xc3\x8dc\xa5\xa2a\xac\x83\x0f9\xeax\xdeQ\xc6\xd8\xb2\xf4q\xc6\xcaO\x17\x00\xc7\x01\x1b\x17\x9ed\xbc\xc6Nd}(gW\n\xaf\xf200\xac\xf2\x1c\x9c\xc9\xd3\xc0c\x8cJab\xf2\xdd\x90\x1a\xc38\x7f\xc5\xb7\x01o\x05\xee\x17\xdfm\xf2\xef\x1f\x1e\x13\xbf\x8f\x99\xa0\xf6@\x7fo5\xf4_\x81-k\x12^E\xcc\xf5\xcb\x9a\xc4a\x9c\n\xfd\xa3\x84\x95\x01\x90\xf2a\n\x07 \xe5\x8a)\x0d\x90r\xe1\x90r\xc0\xc6\xa9\x03\x9a\xb7\x7f\xc5D\x17\xa0\xc9\x9a\xa2\xc9\xd9\xf3^\x02<\x16\x03\xc9k\x979\x8cc\xab\x18H\xc6J\xad\x17\x90\x8c:\xae\x81d\xf03\x89%\xc3\xab\xe1\x9a\xba\x01\x1d\x13\x1bq\x81\x85W='\xe1 E\x94\xfd\x91u\xf5HJ\x83\xc7d\xb5\xb5\x80\x80EO\xd7\xb5c\xa1\x94K\xad\xa3\x9e\xa5\x83&hzG\xc8\xdb\xbf?9\x83\xa0#\xe6\xdf\xce\xc7\x97w\xcdS\x0d\xe3\xae?}\xbc\xfexs\xf6\xae{\xf3\xf9\xec\xf3\x97\x9b\xee\x97\x0f7\xd7//\xae^]\xbd\xbc\xd4\x05\xe6\xef\xe9K\xdb\x1b\x05\xdf\x9f\xad\xa6\x97\x0bj\xfe\xf2\xe5\xf5\xc7\x9b\xab\xcf\xdd\xeb\x97\x9f\xae>.\xe5 _?~\xbe\xfa\xf0z\x89\x0f\xb8>\xbb\xb9Y\x0eq>\xbd\xfc\xe3\xe5\xc5\xe7\xe5\xb4\xfd\xea\xec\xea]\xa6\xe5\x87\x99IIy\x90X\xc3\xe9_\xf2\x8d\xf0P\x94\xfax\xcd\xb3N\x1b\xcf-zZ\xc0{\xcfP\xc1\xcd\xc4\xa3\x82\xb0\xa1z\x88\xc3\xf5\x118J@o[4\xff9I&\xcc>*y?|\x1a\x0e\x07\x12\x8c\xcf\xf4\xdc \xb3\xc3\xb7\xe0\x1a\x0eq)3\x0b\x1e\x9e\xe0\xcf\xec\xb3\x13\xb7\xcb=Z\x1b\x9a\xb3\x9f\xac\x197\xfbH}\xbd\xe0Y\xea\x98\xb5\xf0\xa2\x8a\xde\x0d1o8\x98sR\xf4\xc0\x80\x9f\xb3\x8f\x0c\xeeT\x7fh\x8f\x10\x1b\xb9\xe4\xbb2\x07\n\x9e\xad\xf9=\xfbd}\xbd\xfas\xfb\x98Z\xd1\x03\xb7\x15\x0b\x17Y\xe8\x0b\xd1\xd4cVa\xcd\x91*\xbc\x16Zy^\x89\xa3F\x98<\x9eM] V\x89\xf4\x99\x9b+o\x96>O\xfe\xcb\xcfJ\xcfUX\xa1\xd6\xf3\x15\x8e2%\xb0\xd5\xd5`\xd6\x08G}\x97\x8d\x1eg\xe2 \xb9\xb2\\f\x11$W.\x8d\xef \xb9r&\xf7-;\xaf\x0d\x92+!\xb9\xf2\xd1\x99\x10\x92+!\xb9\x12\x92+g\xb1^@\xb3e\x84\xd3!\xb9\xb2\x1c'Bre\x13\"\xe1\x10 \x9f\x93\xd2\x10 _n$L\xf7\x00\x9a\\1\xa5\x01M\xae\x06Mn\xff\x8a\x89\x1bH\xad\xdc$l\x99\x9e\xfa\x12\xe8\xb2\x18i^\xea\x00hqreT(\x1a\xc2: \xcd\xb0\xdf\ni\x06\xbf\x12\x99\x95fpQ\xa5Zpj\x0f\xac\xb8\x92\x06\x98 0s\x83af\x01\xab?\xa1\x14b\xc8\x9b(\xc5\x9c\x907\xb1\xb4\xb0!\xe4M\xcc\xe4\xbee\x8bF\xc8\x9b\x80\xbc\x89GgB\xc8\x9b\x80\xbc \xc8\x9b\x98\xc5z\x01\xcd\x96`\xdf@\xdeDIN\x84\xbc\x89&x\xba\xc1\xd3='\xa5\xc1\xd3\xfd\x18\x9e\xee\xed\xc0Y\x07.\xef\x8duy\xc7x \xabP\n?\xa7\xfa\xbe\xcb\xb8\xbe\xd7\xd4\xf3\x9dp|\x87~o\xdf\xcb\x1d\xac}\xa2v\x9f\xb9#\x8d\x0bu\xae\x85\x13&Z\xb4\x82Rg\xa6\xb9\xc6'\xa6\x81\xdf{\xbd\xed\xeae\xf8\xbd\x97i\x87<`\x0df\xady\xedAL\xb0\xd4\x15\x9c`\x82<\x0c\x99\x80 \xb2bJ\x83 \xf2\xa8&\xc8\xf6\xafP\x1cA\x06\x0e\x98#)~(a\x8e\x14\x9b&\x9f\xb1eM>)O\\\xa1y\x92(\x17\x8dn\x1dL\x94x\xd7\x95\x99\x12\xbb\x10\x9a*\xca\xb5-\xaf\xa7\xb6B\x193Q\xc3Mt\xc1J\x01+\x05p\xe9BU\x14\xe0\xd2\x15S\x1ap\xe9\xa3\xe0R\xa5$\x01\x88n.\x10\xf5\x19\xa0\x04\xda,F\x9e_\x99\x98q\xf0\xaf_\"\x1a\xc2:\xa0M\xddi\x853\xd5\xd7\x10a\x8e\xd5/\x85.\xf5\x96\xba\x90\xfc\x0d\xf0rV\xe5\x8d\x80\x97\x90\xfc]#\xe6\x84\xe4\xef\xa5\xe5>B\xf2\xf7L\xee[\xb6h\x84\xe4oH\xfe~t&\x84\xe4oH\xfe\x86\xe4\xefY\xac\x17\xd0l \xf6\x0d$\x7f\x97\xe4DH\xfen\x82\x87\x1b<\xdcsR\x1a<\xdc\x8f\xe2\xe1V\x8e:\xf0po\xae\x87\xdbg\x80\xac*)\xfc\xcc\xf7p\xcftp\xaf\xa3\x7f;ro'\xbc\xdbfN\x867\xb3\x13I\xde\xea\xe8\x12H\xf1\x0e\xcb\x83w{\xe5\xd6\xf32\xbc\xdb\xcb\xb46\xe68\x0e\xa9\xd6<\xf6\xa0\xc9\xcf\x1e\xa6\xf4\xe0\xb3\x94\xc0\xacx\x18\xe0\x00\xb3b\xc5\x94\x06\xb3\xe2\xf1\xcc\x8a\xed_J\x02A&\xf7\xa6\x9b\x17\x11#\x940-\x8a\xcd\x8c3\xdb\xf6\xb0u\xed\xb21\x95LQ\x9cS\x93-\x1c\x0dp\x1d\xcc\x8fL\xff\x95)\x92\xbe\x8a\x0c\xcfu\x89-\xd0\x88\xda\x82\xda\x03\x84U\x01\xa9\xd7\x83\x12*\xb2\x91o\x85\x80\xd6\x9e\xfd\x1e\x83\xd6^1\xa5Ak/\\kK\xe1\x10Jk-!\xba\x91\x84\x00\x15]O\x15=k\xd6K\xe8\xe0b}|e\xf7-\xf5\xadP\x11\xc7J\xad\x97\x06\x8e:\xaeTo\xf8\xd3\x0f\xe0i\xab:\xad\x7fiX\n\xf4\xee\x83^N\xd0\xbb+\xa64\xe8\xdd\xe5\xea\xddP2\x80\xbe\xdd\x00}\x1b\x9b\xed\x12\xba\xb5X\xcf^\xa8\xf6\xdfS[\xa8pP\xb1\xdd\x9b-\xbc^Z7\xd3\x7f}\xa6\x95\xfa\x9e\xd0\xbc:\xcbJ\xa5\x8b\xf6C\xf5\xeb\x84\xf12\xd0\xbc\xf3\xbe\xa6\xa0yWLi\xd0\xbc\xcb\xd5\xbcJ(\x80\x99\xbb j7\x98\xea\x12z\xb6X\xe7\x96\xd0\xb4\xeb\xa9_s\xb4jxz\x0f\xe2\x0e1h\x9f\x1a\x91\x1e\xd5\xeb8G\xcc\xf4,\xd2\xf2\xd7sR\xc1\x11\xf7z\xdc\xc1\x06A\xd8\xfe\xdf\xec\xbd\xfd\x96\x1b7\x92'\xfa\xbf\x9f\x02\xcb{\xeeH\xea\xa6X\x96\xdc\x9e\xdd\xa9\xb6|V*I\xee\xea\x96\xad\x1a}\xb4\xa7\xa7\xd3\x87\x023A\x12]\x99@*\x81\xac*Z\xabs\xeek\xdc\xd7\xbbOr\x0f\"\x80\xfc \x93\x9f\xf5\xc1*)\xf6\xcc\xbaKL$2\x10\x08\x04\"~\x11\x08$\xdf\x9c\x8a\xd9\xd6i.\xb7\xe7\xc0[\x18\xca\xa6\xa9\x07\xa1\xfd\x17\x9d?P\xcdo3\x85\x00\xc5\x80Y\x0d\"3\xc3\x0c\x82JR\xc6\xba\xd8 \x8b\xe0:3H\xb68\xafx\x07\x0e)^j\xfeN\xc5\xac5u\xee\xdf!\xdd\xa7\x9a1\x9f\x80\x1e\xe6z\x83\xd9\xa3\x1c\x90\xcb\xed\xc5d[\xdf0\xa7\xc9\xb6\xber\xdb\x1am,\xb2\xae\xbf\n\xebz\xc9do`S\xaf\xb6\xaf\xdf\xa6\xdcL\xa5\x9al`g\xcf7\xad\x07p\x17\xec\xed9\xea\xbb\xec\xee\xd6\xa6\x0c\x95S\x8c\x7f\xc9[\\\x04e\xed\xb88i\xbb\xbdaN\xd3v{\xe5\xdbm\xd0\x05\xb4\xe1~\x15\x1b\xee\xd2\xe9\xde`\x9b]\xb3\xe5\xca\x89\x92jr\xac\xc6z\xcd\x86\xdbjx\xc7\xb6\xdb&\xed\xb0\xd96\x7fi\\\xd8\x01?\xc29.\x80\xb8\xd2\x94\x9d\xf1T&\xdc\xea\xc2\xdc],\x8b\x8a7mv\xf6\x8a\x8a7][\xed\x12*\xde\xb4V\xfa\xae\xfb\xe4\x1f\x15o\xa2\xe2M{\x17B*\xdeD\xc5\x9b\xa8x\xd3:\xd1\x0b<\xbb\xfa`\x18\x15o\xdaT\x12\xa9xS\x8f ?\x82\xfcv\xe44A~\xd7\x0f\xf9y\xb8b(\xd5X\x13\xf2\xf7\xc3W\x82\xfc\xcd\xcd\xfa\xe2\xa6\xb1\xf2\xbf+\x01\xc0M\xf1\xbf;\x0c\xff-\xa0\x7f\xadx\xdb<\x00\x88\x99m\xb1V&\xd4H\xd9\x16\x04\xbc\x9a\xbaM\xd7g\x0f\xba\xb1\x0d\xfd\xd86\xb5\x04\x9b\xef\xcc\xcd \x15\xdbi\xba25\x9b\x82\xc7\x1b\xfeY%\xcb\xcdI\x1cY\x82\xd7\xbd]\x90%x\xc3\x9c&K\xf0\x86-\xc1\x83OM\xcdC\xb5v\xbeJ\xc3pA\x086\xb0\x0dW\xdb\x89\xcfE*&\xdc\xea\xc2\xff\xb1\xb6\xd6N\xf7\x0bw\xcbr\xec\x1c\x03\x98\x90]O\xea3\x13\x80E\xd7\xbf7\xae\xbdJ\xc2{\xc1\x16\xd8\xfa\x8c\xc4m7)\xab\x11\x82\xf4mjT\xb6\xdf\"\xb3r\xc5\xf5\xfcMF\xcd\xdd\xd1?'[\xb5\x9d\xb9\xd91\x0c\xba\xa6\x8a2\x1d\xae@D)\xd3a\x97\x183e:\\\x95\xfcQ\xa6\x03e:\xec]\x08)\xd3\x812\x1d(\xd3a\x9d\xe8\x05\x9e]\xbd\x1bB\x99\x0e\x9bJ\"e:\xf4\x08\xdf&|{GN\x13\xbe}\xf5\xf8\xb6\xe5\xa7Md\xb3\x01\xa5\x1d|j\xe3\x1f\x04o\xff\xf0\x85\xc2\xdb[\xc9\xc0\xe2\x86\xb2\xf2\xbf\x8b\xe8\xf6\x1b\x91l\x08k\xcf\xb5\xacGu\x17\xf0\xec6\xf1\x00d\xb7~\xaa\x10\xecB\xcc\xe1\xd7\x88^\x13fM\x98\xf5\xd6*\x820\xeb\xd5\x95\xa6\x8axX\x9d2\xdcJ\xfe\x16\xdf\xfc\xa2\xa5hq\xb8-I\xaa\x1e5%\xa9\xd2c\x82\x8d\x0b\x9dm OW2\xa7\x89\xb1;\xce\xe9\xe2\x9b_\xf4\x9c.\x0ew\xab9\xb5\xfa\xa6f\x94\"K\x9b\xc1\xaa\x14Y\xba6\xb9\xa3\xc8\xd2Z\xe9\xbbnP\x9f\"K\x14Y\xda\xbb\x10Rd\x89\"K\x14YZ'z\x81gW\x0f\x16PdiSI\xa4\xc8R\x8f\"K\x14Y\xda\x91\xd3\x14Y\xba\xa9\xc8\x92.\x16\x83\n\x07-\x08\x9c\xc2L_U\x98i\x13\x81X\xdcjV\xfew1\xe6T\x1d!x\xafF\x1av\xba\xad\x8fVt\xbfY\xb3\xe0.\xc4\xa4V\x0f\xa6}\xd8\xa2\xabI\xeb\xd4E\x19\x1a,9\x7f\xf1\x0d\x9d\xbf\xa0X\xd6\xa5lZ\x8aem\xe6\x1a\x11JN(\xf9f\x9e\xfa\xd5\xca\x1d\xa1\xe4k\xa5\xef\xba\x01JB\xc9 %\xdf\xbb\x10\x12JN(9\xa1\xe4\xebD/\xf0\xec\xea\xdd\x10B\xc97\x95DB\xc9{\x84\x92\x13J\xbe#\xa7 %\xdf+J^\x01nCB\xcb -_/\x18\x8b[\xcf\xca\xff.\xa2\xe6o\x91\x86\n\x12\xfe{uA\xcb\xea\xf2\x95+^\xab\x99p\x17\xf0\xf2\x15#i\x83\xe5\xf5\x83\x16D^\xdfh\x83U\x07\x9d9:W\x9b\xe8\x1b\xc2\xc6 \x1b\xdfZ\xeb\x106\xbe\xa9CD\xd88a\xe3\x9b\xf9\xe7W+w\x84\x8d\xaf\x95\xbe\xeb\x86% \x1b'l|\xefBH\xd88a\xe3\x84\x8d\xaf\x13\xbd\xc0\xb3\xabwC\x08\x1b\xdfT\x12 \x1b\xef\x116N\xd8\xf8\x8e\x9c&l|\xaf\xd8x\xe3\xeeh\x02\xc4\xbfz@\xbc)\x0d\x8b\x9b\xcc\xca\xff.\xa2\xe0\x8b \xeff \xe3\x8d\xe6\xf5H\xef\x02\xea\xdd1\x82%hw\x05v\xd7\xc5#\x96\xe1\xdcu\x93or.\x8b=\xc1\xddW`P\x12\xae\xbd\xce-\xbf\x94\x15z\x9d\xb8\xf6u\xfa\x19\xbb\x95\xa0\x99+?Cb\xb1L,\xb6-\\\xb3\x8dX\x90\xafq9\xc3\x83|\x8d\x1b\xe64\xf9\x1a\xb7\xc4\xd78\xf8\xd4\xd6KT\"\x95\x9c\x8f\xd5\xe2\xb1\x81\x07\xb2\xda\x1b\xf9\x8b4V\x172\xe6\xe9\xdakd\xe7\x9b\xd6C\xbe\x0b^\xc8\x1c\xf5\xe0\x81\xb4\x7fk\xdd';\xad\x1e\xcd\xbb S\xe1\x96\xd8\x9e\x1c\x8e\xeb38qX\x9b\x1a\x9a\xd8\xfa\xcb60\xb7|\xb93\x1cx\xcd\xd1@\x9c\x86\xca|\xe5\x96\x9dOe<\xf52Z\x1b\xae\x1d\x12M\x86\xec\xb5obd\xc8\xde0\xa7\xc9\x90\xbdvC\xb6\xd6\"p[\xe9\xc1'T5d\xa9~%\x96\xea\xf2\xf9\xdf\xc0\xfc\\m\x8a\xfa\xech\xb0\x8d6\xca\x08\x0f-\xeb\x11\xdd\x05C\xb4M<\xd8\xa1\xb59\xd8\xb2A=\xefY^=\xee\xb6:i/^\xbfLi/\xbeaN\xd3^|\xed{1\xe8\x05\nP\x7f%;o\x98\xed\x0d\xf6\xd6\xcd\xf6Y\xad\xd3\x8dvYhw7\xf7XG:\xee\xb0Z\xa7\xad\xbd5w?\xa0\x1fL[\xean\xeb\x8f\xb6\xd4\x1b\xe64m\xa9\xd7\xbf\xa5j\x9d\xd2\x86\xfa\x95l\xa80\xd7\x1bl\xa1\xab\xb7\xd3\x0dO1\xdf\xddS\xcb\xf3\xa7\x94\xd7\x1fN\x86\xc3\x05\x19\xb7\xf1\x14\xf6Z\x8c\x9b\x18\xcbm\xb9\xfd\xb9\xe4\xdbs\n\x14\x07\xb0i\x84\x04[\xdf\xf6\x18\x07\x08\xf5\xae\xd1\x07\x1c\"\x13\xcaMB;M\xa6)\x0d \x08RMB!\xd7J\x12\xd6\x06 \xaed\xda\xe8\xf0\xeef\xa1*:\xbc{mrG\x87w\xd7J\xdfu\x9f\x9b\xa4\xc3\xbbtxw\xefBH\x87w\xe9\xf0.\x1d\xde]'z\x81gW\x9f\xe3D\x87w7\x95D:\xbc\xdb#\xa0\x96\x80\xda\x1d9M@\xed\xb5\x03\xb5t@\xf7k\x83k\xaf\xf4\x10\xeefgo\xef\xec\x91\xdb\xb9\x93\xb6[\x1c\xb0]8\xfd\xb65`{\xdb\x13\xdd\xe9d\xe5:W\xfaR\x96#\x9d\xac\xbc\xbd;\x06\x19\x827\xcci2\x04o\xd0\x10\xa4\xd3\x93_\xbdex\x1d'$+\xe3i\xd3+>\xbb_\xb8\xa3\x06\xe4\xc2\x85\x9e]O*\xb3\xd2\x9f]\x15K\xadJ\xb2&\xc9\x9a\xdc\\\x81\xec\xcf\x9a\xbc\x13 )\x94\xd9\xb0YX\x8f2\x1b\xae-\xb0G\x99\x0dk\xa5\xef\xba\x83\xca\x94\xd9@\x99\x0d{\x17B\xcal\xa0\xcc\x06\xcalX'z\x81gW\xef\x86Pf\xc3\xa6\x92H\x99\x0d=\x02\xb4 \xd0\xde\x91\xd3\x04h\xef\x13\xd0>\xa0\x8b: \xdc^&\x0e\x8b\xdb\xcc\xca\xff.\x02\xdd5\xa0\xbbIArhV\x0f\xed.\x80\xda\x0d\xca\x9b\x05\xc8\x9dY\xb81\x80\xdd\xa8\x1a}\xb7\xeb\x8e\x13p\xbd\xce\xef\xbe\x94\x99y\x9d\xc0\xf5u:\x12T\x8e\xfeZ\xc5\xe2:\xcb\xd1\x933q9\xc3\x82\x9c\x89\x1b\xe649\x13\xb7\xc5\x99X\xa8:M\xde\x05y\x17\xab\xe5c\x03\x17c\xb5\xbb\xf1^\x8d4`i\x1b\xfa\x1d\x9d\xed\xeb\xd1\xdf\x05\x07\xa4k\x08\xe0\x89t<\xa8\\\x922<\xdb\xc0'\xb9\xe3w!\x91Or\xad\xc6'\xf9$$\x16\xe4\x93\xdc)s\x84|\x92\x1b\xe64\xf9$\xb7\xd6'9\xa8,\xa1a\xdd\x8c\x1c\x15rTv\x10\x9a\x0d<\x96\xd5\xdeK\x95\x06\xdfa\xbaox<\xa0\xfb\xcd\x9aMw\xc1\xa3Y=\x98\xf6\x81\x81\xae&\x1d^Nc6\x99\x1ec\xc2\x17\x1d\x1e \x7fg[\xcdt\xbd\xfe\x0e\x1d\x1e\xa0\xc3\x03W \xa2tx`\x97\xb4m:\xe2|\xd3\xbb\xb5\xed\xceQ\x0f;o\xfb\xb7\xd6\xe6\x9bJ\x03\xc1\xbf\x0c\x9a\x84\xe5a\xd8\xb8\xd0\x19\xdcK\xdb\x85\xbf4\x07\xfd\xd3\xe9\xc7\x9f~gB\x9f\xfe\xf7\xdf\xfe\xba\xb14%\xd9\xef\x1f\x8bcP\x82\x9b\x06{\xd0\x02\xb8\xfeL\xb2\xd0\xe6\xeaq\x1fd\xf1p\x1b\xf8\xa7\xf1\xca\x17\x8d\xe34\xc6\x89\xa97\xc0\xb9\x1a\xb9\xe1\xcc\xe4\"\x96c\x19{A\xfd&v\x9b\xa42\xa5 \"\xdb\x94X\xf6J\xf03L\x05\x93\xc6g?\x9c\xcb4\xfdf,\xc2\x15\xdc\xe32M7\x12~\xc2\x8b\xaey_#\x83\xf5\x869M\x06\xeb\xb5\x1b\xac^\x9f\x05\x85B6\xeb\xd7a\xb3.L\xfb\x06\xa6\xeaj\xb3\xf5=~!9\n\xdb\xdd[\xb7+\xad.\x0b\xb0\xe4\x95zhw\xc1\x8c]2\n,\x0e\xd0\xf9\xac\x8d)U\xe6\x01l\xe3\x98 \x07\xd9\x8fF\x14g\xe2\x1b\xee\x8c\x0c[\x94\xc6)\xb2SQ(\x91Bn[\x95;\x1e\xac\n\x08(I\xc3\xe2)\x97\n\xb2\xd6\xa0\x17\xc8p\x1b\x89o\x8c\x85\xf45\x9ff\x076\xe3T\xb8\xb5;\xf7\xe27Kh~sr\xc4\x94\xb6\xcc\x94y\xae\x0bH\x96\x93v\xcaR1\xe1\xf1\xcc\x8f\xa8\xf8\xe6\x9d\xeb\xa8\xc8cg\x1b%\"/D\xcc]S\xa5\xcfq`\xc7\xcf\x8e\xd8\x94\x1b\x08\x99\xeas\xc5\n\x91\xa7<\x16\x99P\xf6\x9b\xfbN\x1d\x98\xc3\x83\x83\x89\xb4\xd3r4\x88u\x16\xc4W\x8e\xe2\x87\x13}0J\xf5\xe8\xe0q\xfc\xbf\xfe\xd7\xb7\xfc\xf1c\xf1\x1f\xe3\xff\x88\xe3\xff\xf9\xfd\xf8\xdf\x1f\x8f\xbe\x7f\xfc?c\xfe\x1f\x7f\xe2\xfc\x7f~\x1f\x8bG\x8f\xbe\xfd\xf7o\xbf}t\x90\x17\xdaj\xf7\xeaA\xac\x0bq\x10\xa7R({p\xf6\xe8\x00,\xb5\x01<\xfe\xbf^}\xff\xa7\x07_Z\xd8\xd6\xf58\xc4\xc9\xdd\xd4|o\xbc2\xb7l\xbe\xb0 \xee\x96/w&U_wN\xf5\xfc\xda\xac\x81gX\xa2,+\x8d\xc5,he\x99T0\x05\xc2X\xa7*`!\xfb0\xb3\xef\xc2\x89V\xc1\xce\xa72\x9e\xa2\xc2\x98\xd78\xd2\xfd\xe1\x94\x03y\x10\xd7me\x90\x07q\xc3\x9c&\x0f\xe2\xda=\x08\xff\xefdX\xe9\x95!\xe8\x95\x83O\x8dM\x85\x82\xd0_\x89c\xb1\xa94l\xe0ct\xf9\x1b\x96O\x0e\xde\x8a\xe2L\xc6]\xaeE\xebi=\x0e\xefE$\xf1\xe9\xdb\x93E\xc6z/\x02|\x87\xf5N\xc3\xa3&\x7f\xca\x7f\xcd\xde',\xc9\x92\xa3__o\xe454 \x04\x07\xc1\xff\xe3\x87\x83\xe9\xa3\xcd\xdc\xac\x9f\x84}\xc5\xad0\xf6Y\xaa\xe3\xd3\x95\xee\xd5|\xd3\x05\x86\xdcj\xb7j\x8ez\xe0V\xfb7\x7fL\xc3G\x07\xe0w6r\x0f($\xbf\xab\xb2\"\xfb\xe4\x869M\xf6\xc9\x95\xdb'#n\xc4\x81\x15\xce\xeb\xc9$8\xfc\xb83\x81j0\x07\xa8(\xc8\x1c\xf92\xcd\x91\x0d'\x7f\x03\x8bc\xed6\x0c{\xd0\xb3\xd9_\x10gY\xb3\x11\xcf5\xbes[q\x9b\xfe\xb0\x19\xb7~\xadPM\xe0u\xa3\xd8)\xda|_\xdc\xe1\x88\xed\x006\xc2\xd6n\x01\xb6\xd6\xb1\xbe \xda\xba\xa2\x8d\x85L\xc7\x1b\xe64\x99\x8e7m:~\",\xebk6\x1e?]\x16\xbcjYT\xbf\xe8D\x1c\xab\xb1^g9\xd6\xed\xea\xc1\xdc\x11\xa3\xb1\"=\xd8\x8b\xe1\x87\xceC\x15J'xw\x17\xc17\xbb\xaeO\xda\x83o\x98\xd3\xb4\x07\xdf\xd8\x1e\xec\xd4\xc3\xd0\xa9\x07\xda}\xbf\xae\xdd\xb71\xf1\x1b\xec\xb5k\xf7\xdd\xb73\x15K5Y\xb7\xedV\xcd\xee\xdc\xae\x1b(\x0f\x9b\xae\xffw\xb5\xe7\xc2>k\xf0G\xdajw]\x8c\xb4\xd5\xde0\xa7i\xab\xbd\xb1\xad\xd6+\x07\xdah\xbf\xae\x8d\xb6\x9a\xf6\x0d\xb6\xd6\xb5\xdb,\xc6\xe9\xab\x0b\x04\xde\x8a\xb5!\x92\xae7\xee\xdc\xe6\xdb1\x88v\xe6B\xf3Q\xb5%\xfb\xe4\x85\xaa\xb8\xd7C(,\xbae\xbc\xe4\x8aN\x15^Ad\x84\xea\xd3o\x16\xeb\xa0\xfa\xf4\xd7V\x9e\x99\xea\xd3\xaf\x95\xbe\xeb.\x0dN\xf5\xe9\xa9>\xfd\xde\x85\x90\xea\xd3S}z\xaaO\xbfN\xf4\x02\xcf\xae>I\x86\xea\xd3o*\x89T\x9f\xbeG\xe8 \xa1\x83;r\x9a\xd0\xc1\x1bC\x07\xebr\xe4\xc2R:\xf5\xd7 \x15v\xcb\xc0\xe2\x86\xb2\xf2\xbf\x9d\xb8a\x13\x1f\xdb4\xb9\xba\xfb\x9dz\xa4w\x04;\xec\x1cF@\x0f\xbb\x1eV\xf8a\x0b8d\xdc2N\xa9\xd7\x94z\xbd\xad/~\xad\xae\xf8\xae\xd6&\x01\xde_\x90\x84\x11\xe0}mx\x0f\x01\xdek\xa5\xef\xba\xb1F\x02\xbc \xf0\xde\xbb\x10\x12\xe0M\x807\x01\xde\xebD/\xf0\xec\xea]\x13\x02\xbc7\x95D\x02\xbc{\x04x\x13\xe0\xbd#\xa7 \xf0\xde\x13\xe0M\x87@ \xf2\xbe\xd2\xb3\xa0oeV\xa6\xebJ%\xd7\x8d\xea\xd1\xdc\x05X\xbb\xa2\x1b\xab\x9d\xf9\x7f1\xe3\xff0L\\\x88\xb8\xb4n#\xe7\xcc\x16\\\x19\x0e\xc3\x07kQ\x18+3\x0e\x0f'\xdc\x19\x7f\xce3\x99\xc3\xb2W\x01\x84o\xb0.*{\xa6\x13'IS\x91\xf1C6\xaf\x0c\xfe\x15\x9f\xeb\xf1\x88%\xf2\xef\xaf_<\xed\xfd\x08\x97\xa8\xc5H\xfc\xbf\x8c\xaeM\x9d\xe9\xf7\x9b\x8ahue\x08\xce\xf8\x95\x01\x91\xeeC\xa7\xef\xde\x9c\xbei\xdb\xa1\xec/\xe9\x99-\xba\xadQ{\xb1\xa9\xf5\x19\xb40,\xe8\x94\x8fD\xfa\xa4'.r\xae\x12\x96\x17n>\xad\x14\xa6\xf7\xa3\xbd\xe8Tx\xc9\xaf\xff5\xfd\xef\x9f\xbe\x08\xadv\xebln=\xfa\x97\x88\x97me\xf5\xcb\xc9\xd9\x7f\xfd\xd7\x7f\xcf\xc2\xcbo\xb3cs\xd2\xfb\x91\xdd\x0f\xcb\x05\xb5\xdb\xc0^\x0c\xbcB\x1b\xbc\xbb\x08\xcf\x1e\\\x0d\xf4\xf0\xee\"\xe0\x0e\xc6r\x95\xf0\"\x81]\x1b\x01/\xb7\x9eG\x85\xe6I\xcc\x0d\xac\xe8\xc6b7{\xf6\xd9\xec\xc5p4\xb3N\xbc7[+\xa1\xfd\xed\x93\x95\xab\xc7\xab\xae\x17\xb2\x0f\x9c\x0c\x82S\xf0\xf3\xa6`\\\xb9[G\x0e\xdd\xa6\xfa\x90\x1c\xba\x1b\xe6\xf4\xd7\xe9\xd0\xe5\xdatyt\x93\xd9\xaf\xaf^\xcb\x86G\x07\xed~t\xff\xdd\xce\xa7\xb3\x17\xf5\xf16os\x92\xe3\xf6e:n\x9dS\xbd\xce\x17\x9b\xdb\x0dN_|\xfcG\xfa\x8a\x89\xa3\xe3\x8b\xd9\xbfz?\xb2\xe0A\x18\x9e\xe5\xa90\xac\xda\x15\x1a\xef\xc4\xbc\xf8\xe9\xe9S\x16\x0b}\xf41\xf5N\x9c\xe5#SMf\x99\x86\xd6\x85\xe0\xb1\x85\x87\xc3\xa1\xe5\xa3\x87\xa9t\xd2\x8f#w;\x94\xfb\xe7\x8f?\xa4rI{6\xff\xfeC#RX\xf5\x8dNz\xe0^\xd6-\x1f\x06\x11\x0bm\xc3t\xc3\x8f\x894ngt&\x11OM\xf85\xd6\xca\x16:mQ\xf0\xf0Q\xaf5a?\x9e\xf0Y\xaay\xf2\xc3A*\x7f\xfc\xe1\xa0L[|\x99\xa74\xe7J\xa4\x0b\xf4\xc3\xaf\x9d\xa3\x80'\x0bCy\xd4k\xf8'\xa9HF\xb3\xb9\x91\xfe\xd8e\x87L\xa7\xc7\xd3\x17/\xd9\xe8\xe3\xdb\xa7g\xef\x16m<-\xc6\xc7\xef\xd9h\xf4\xb7\x97\x93\x7f\xf4~<\xd2\xcaB\xc8u\x96W\x9a\xa2\xdd\x9d\xf8\xab\xe6\x7f\xff\xddy\xa4\xb37o\xbb\x1c\xc6\xa5Zu\xf2\xd3\xab\xd9\xeb\x98\x8d\xa7\xef\xe5\xd9\xdf\x17\x17\xce/\xf2?\xc5\x0b6=\x7f)\xce\xff\xb1\xf0T\x8c\xff\xf2_\xaf\x14;\x95\xbf\xffU\xebJ\xc7\xce\xb7:\x9d\x1eO\xfe\xeb\xefL\xfc\xe7\xf9\xd3\xff.\xdd`\xf2Y\xa0'\xbc\xe0\xff\x97\xbd@\xe7\x8e\xa7)[|x\xa4\xd3\x94\xe7F\xcc=\xee\x1a\x94_\xef~\x95;\xe51\x1e\x1f\xcf\xfe\xc6F/\xd3\xa3\x8f\xa27'\x15\x89\x8e\x1f:.\xf5~\xfc!\xd6\x89h=\x8d\xfdG\x8bJI4g\xca\xeaS\xa1X^\xaa\xd8\x96\xc0\xed\xde\x8f\x9f\xba\xf6\x02\x91\xa627\xb2aC\xd7\xebO\x8f\xfe\xc5\xfcW\xe4(\x15\xb0\xd6Z$L\xf5\x99(\xc0_\x9f\x93\x13\xef\x03\xcf\x18\x92\x81vv\xefG\xe7`\xfb\xcf\x1c\xb2[;\x96@L\xb2\xe1\xa0\x9c\xcd\xfc\x05\x0e+\x13\xc6\xf0\x890W4\xb4\x7fn;4^\x14|\xb6\xcb\xe0.C\xe5m\x9a\x00\xa7S\x87e\x916&`\x91\xfa\xd0\xfa\xdf>\x96\xda\xfe\x19\xff\x85\x7fw\x8d\xa4c\xc4\xfd\x96g\x8a\xdb\xd3\x95\x0d\x01r\x1e.I\x7f\x83.\xd86\xd7\x8c\xe7\xf3\x8e\xef\xfdv\x1b\xf8\x95\x89L_\x92]\xfb$\xdf\xcaL\xe8\xb2\xbaL\xed\xee\x0eD\\X\xa1\x9c\xdf2\xd49@n\xa4\x04I \xee:\x04R\x82\xdb\xf1Ki5\x8c\x0bie\xcc\xd3!\xad\xc4\xad\xa8\xa4\x95\xf8\xa5\xad\xc4-\xdf\xfb|\x1b\xf8\xccK;\x85\x1a\x94W\xb4Xo\xd320r\xa2D\x01\xa3#]\xb4\xafI\xc8\xcbQ*\xe3\xe1\xa9\xf8\x12\x1doR\xb4wV\xf1e\xa1\xf8\xee\x17(\x96F\xaaI*\xbe\xc0\x81\xb9I\xdbBV\xdf\x1e\xff\xf4\xcb\xf0\xe7\xd7\xcf_\x0c\xdf\xff\xf2\xf6\xe4\xc5\xd1\xf1\xcb\xe3\x17\xcf\xbf\x00\xd1-S+\xbf\xc0\xd9\x1dI\x0b\xdb\xe5\x1784qa\x0b>\x1cIk\x86x#\xf9J)\xc6\xa3&\xbd\x1f\xbf\xbd\x0d\xd2&R\x91\x99-\x16\xdd\x17\xb7A\xdc=\xdbq\xdd\xc2`{suv}o\x9f\x82`\xc4\xc7R\xa8x\x9b\x8d\xe7*\xd7\xc0\x96\xef\xdd\n\\h,\xbeD\xeb\x83g\xbaT\xf6\x8a\x06vs\xda\xe02T\xde&\xf6'B\xe9\xec\x92\x8bp\x9f\x8bbA|v\x19\xc0\x96\xda\xe0Nk\x91 7COA\x0f\xe91\xebZ\xbb\x1b\x1c\xdb\xc1EdZ\xebg\xd7\xf388\xd8p\x1a'\x95\x06\xab{4\xceeB\x0b\xc8\x8e\xdd\xe8\xd0\xd6\x15L\x17\x15W\xbb\x0d'\xb5\xa8\xb8\xda.e\xad\xa8\xb8\xdaU\xc9\x1f\x15W\xa3\xe2j{\x17B*\xaeF\xc5\xd5\xa8\xb8\xda\xcd\x8a\x1eUQ[)r\xb7\xaa\x8a\xdau\x16i\x00\n\x87\xa3\x8d\x1d\x80\xd0\xfe\xf6M\x7f{\xdf;X\xf7u|\xbb\xb1\xe3=\xc7}\xe2p~o[(mS\x13\"\xfe\xf6\x8f7\xf9$\x10\x92\xfc#\x7f\xfd\xe2<\x800\xaf\xdf<\x7f\xf1f\xf8\xec\x1f\xeb\xb2?\xb6!\xf1\x85*\xb3\xf0\xf7\xe15\x93w\xd9~\x9f\xbe=\xba\xd2\xfe\x9e\xbfX\xe8\xf0\x12+\xbcL\x7f\xfc\xe6\x87T\xfe\xd8\xc5\x86C\xd6\xf5+s\xea]\x8e\xa50\xcc\x19\xb6\xeaT\xe9s\xc5\x8c.l\xbd\xd0\xd9k\xf7?\xcff\xc1\xe6\x00\xab\xe5\xe9\xdb#\xd4\x0c\xd2\xb0\x98C\xed\x80T\xce}\xfd\xe9\xdb\xa3\xc6W\xdd\x1b\xb8\xc4\x0d\xe3m]\xd2\xf1\xaecL\xe3e\xf7\xcf\xea\xedyU\xe4_?\x80\xe1\xafR9T\xb8\xf1rE\x01\xa8\xce\xc7\x0ds\xfa\xeb\xac\xf3q\xad\x85\x1b\x1b\x95\x1f\xecE\x05\x84R}\x8f/\xb6\xbe\x07\xcc\xf2\xe2\xa6\xb0\xf2\xbf\x8ba\x9dg\xa1\x1c\xd9\xbb\x8b\x95a\x9dV\xbb\x9a\xe6\xbb\x10\xd6i\x92\x0ea\x9d\xc6\x0fu9\xb6v\xc9\xad\xaf\xb6\xbe\xe2\x06N\x08U\x8a\xdbW\xfca\xb3Jq\xfbrN!\xe3~C\x99pmo\xbb\x15\x85\x80!\xc4)\xc4\xa8\xce\xb9\xb4\xc6}\xfb\x1b\x00\x83/<\xa0\x17\xeb,\x93\xd6\"\xa2\xc7\xd9(\xd5\xf1\xe9`)AnF\x16\xe8q?^\x82\x1c\xce\x8e\xa6\">}w\x11\n9kU\xf9$\x007/'\xe7i'=Ow\"\x08\x91M\xf3\x8d\xcc2\x91HnE\xfd\xe1\xed!\x04xL\xe0\xc1\x06\x1e\x07\x81\x077\xcc\xe9\xaf\x13<\xb8\xc1\"\xa1\x84\x1f\x10~ ;\x01\xe4/\xb14\xe8\xe3+*\x0d\xfa\xdd\xfeK\x83~\xb7\xba4\xe8c*\x0dJ\xa5A\xaf\xe8D\xd6\xcd\xe6\xc3\xaf\x19\xe8ud\xf2oY?`C7\xb8I\xe1\xad\xca\xec_\x9f\xd3\x7f\xd7`_$\xba\xce\xe3\xaf2\xf8\xd1\x9f\x9a\xb1)7\xd3\xad3\xf8o\xfd\xad\xf0\xdcL7\x05\xe1\\\xdb\xb9\xc9\xf8\xc2n\x84\x07\"w\x05[\x1c{\xaa<\xc7\x0b\x10\x17f5\x83T\xee>\x13\xca\xad\xc8\x84q'PSq\xe1\xf5\xc1\x06\x18,E\xeb/g\xa2\x93\xc3}\xc3\x9c\xfe:\x1d\xee\x1b\x8c\xd6\x1f|r\xca\x85nS\xfc\xe1kp\xba\xab\xc9\xde\xc0X[\xb7\x18D\x9a\x8e\xb3\x92\xfd+\xf9\x97\xfa\xdbY\xaf\xa3\xfd7\x8c1\xf6\x83\x89\x0b\x99[\xfcG\xac\x95\xb1l8\x04_ch,\xb7\x82=a\x9fz\x99Pe\xef\xf0S\x8f\xc7V\x9e\x89c+\xb2\xe3\xe4\xa2w\xf8\xf0\xd1\xe7~\xcf\xe4\"v\xcf\x9c\x89\xe8\xfeW\xe7B\xf1\\\xf6\x0e{\xdf\x0d\xbe\x1d|\xdb\xeb\xf7\xa0:\xda\xe1\xa7\x1eX!\xbd\xc3\xde\xdbY\x96O\xb5\x9a\xb1\x87l\xf2\xe6\xe4\x88\xfd\xc4\xad8\xe73\x96\xe8\xd8\xf4\xfa\xbdD I\xce\xc6=\xec=eo^\xbc}\xc7\xa4\xb2\xa2\x18\xf3\x18\xe3\x0bH\x99\xdbl\xa50}\x96\x8a \x8fg\xad\x0b\xd3z\xfd\x9e\x17\xf9\xdea\xef\x11\x10\xf2\xb9\xdfs\x06\x9aq\xa4\x1c\x18O\xc3\x81\xc8u<5\xd5\x1c\xc4eQ\x08e\x87\xf0\xb3k\xe9\x96\xf0\xe1\xa7\x9e)\xb3\x8c\x17\xb3\xdea\xef\x08[\xbcp\x0dX^\xe83\x99\x08\xe6_c\xf0\x1a\xd3\xe3*\xfc\x920\x99\x08e\xdd\x9fE\xaf_\x9b\xcd\xc7\xc9\\W\xbd~/(?\xa0\xf0\xf1\xb7\xdf\x02W\xe7\x98\xd1\xb5A\xf5\xfa\xbd\x18=o\xf7\xc6\x1f\x0e\xfe\x00\x04C\xb6\x01\xb0}\x96;\xae\xe3-y\xbd~pj$~ga\xc0\xbe\xb9\xf7`\xfa\xbd\xb1.2n{\x87=8:\xd2\xfb\x0c\xff\xcf\xcd\x12\xe8\xfd\x0e\x1aW\xa9\xf5K\x91\n}-\x92\xf8\xd9\xf5\x99\x88\xc6\x03',\x13\xe0w\x93\xf8\xef\x1e\xbb\xa6\xfe\x8e\x83\xcen\x12a\xb9LM\xe3\x19\xd6\x11\xeb\xf7\xe04\xc1z\n\xab:\x8e]\xbdc\x85\xc4U\x1cv\xde\xb0g029\xaf|\x88\xde\xe1??\xf5\x14\xcf`xM\x89\x92\x8e\xe7`v\x82\x04\xa1\x05\xde;\x04D\xaa\xbf\xc8\xda@\xce\xe7\xdf\xfa=\xcb'\xae\xdf\xde\x7f\xc2\xdb\xbf\xb9\x0f.]\x17\xf8\xcf\xce\x05\x01\xe2{\xac\xc6\xdaT\xcb\xa1(\x95\x92j\x82\xcb\x01\x1e-\xc8\xfe\x8b\xe6\xa3\xbdH~=\xa4\xdd&\xbb1\x0d\x1d\x93\xda&\xbfn\x8b\x07\xf4J%?\xc2!\xd1\xb1(\x84\x8a\xe1\xfc\x01\xa4\x15\xe7\xbc\xb02.S^0+3Q\x0c\x9c\xe4\x18\xcb\x0b;t\xff^)> \xb7\xe2!\xb4\x9a\xff|\xddA\xe5\xb3\xb8\xbf\xb9e\xe7S\x19O\xab_\n6\x96\x85\xb1L\x9c \xf7\xfd\xf8\xd4\x0c\"ug\x19W3 \xd68\xf7\xb41\xc7\xf7\x1c\xbbDro\x10\xa9wn\x1ea\xca\xddo\xec~\xeb\xb3O\x1e=p_\xf6\x00\x04\xe3&R\xb6j\x8f\xbc8\x9fj#\xf0\xef \x1d\x0b\\\xacVzC\x8c\x16y4\xbc\xb4\x90/\xeb\x8ea\xb3\x910\xb5,\xa2\x1c\xf9\xa3c\x81\xad\xc0\x9dH\x81\xa9q\xc6\xd3\x01s\xdc \xffrC\xbb\xbf\xec\x13\xfdH-\xfd\xfa\x1f+Y\xfb\x8d\xfd:\x15\xaa1\x11 \xb6}\\\xf8\xd5\xf1\xa4\x15]=a)7+?\x81\x07\xd8\xb4\x12a00\xadn5p6\x91gB5\xcc\x118\x11\xac\xe3\xb8,X.\n\x9f\x1b\x11\xa9H\xfd\xf2\xfa\xdd\x8b\xff\x01\x83_JI\xe6\xcc5y&\x8a\x89`FN\x94\x1c\xcb\x98+\x9b\xce\xd8\xb8\xd0\x99\x1bb\xa4\xcey\x9a>\x8c\xab%\xd3\xd0\x13#1\xe1\x8aq;`\xbf\xce\xb5\xd1c\xdf\x04g\xc9}f$\"\xf5\xe3\x8fKI\x19\xb0\xb7e\x9e;)\\\xc1\xb6G\xdf\xf6#U\xf1\xe8 \xfb\xbe~\xabZ\xe7l\xa2\x85az\xfb\xd3\xb7\xbf9\x15\x82s\x0d\x878\xa5\x9a\xe0\xa4;\xf3\xa7R \xfe$\xe1\x82\xb2\xe8~\x117g\xffN\x1fO\xa1\x863\xa9\x86\x9dO\x05(Y\xb7^#\x15v\x1e\xb7\x90\x9d~E\xa1\x9e \xbbT\xb7\xf9;r6\xd9\x0c\x82\xab\xb4\xbc\x9b\xb0' \xb3\xfco\xad\x0d\xbd\xb5[D\xca\x0fq\xc0\xee\xbf[\xf9\x1a\x8e\x08\xc0g\xdc'\x1e\xf4\xd0\xdeo\xb2\xaf\xd6\xe9\xc01c\x8b2\xf6u\x06\xda\xda\xd6y\x85l\xa2\x9d1(\x95Sn\xdc\x7f \xec*\xa3\x19\xb4\xbb\xf0\x16&\xcbtR\xa6n\x7f G\xe3\x06\x1d\x8d\x95\xae\xc0\x84gY\xed \x8f\xb3l\x18k\x15\x0be\x0bnE2\xcc\xb5N\x87\xa9T\xa7\xdd\xee\xc1\xd1\xcb\x9f\x7f>j\xb4?\xd1:}\xe5Z\x87\x9c4\x96\xc9\x89\xd7\xcc\xd0Ke\xdb\xb97\x9d~\x8dT\xf3}\xe6\xbeg\x06\x8b\xce\xf4\xb2\xef\xec\xcb\xbf\xa8\x865,D\xec\xec\xb2\xf5\xaf\x8cx\xcaU,\x8a\xa1\xd5\xabx\xbc\x9b\xccT\x9dCg2Y)!\xa5\xf7\xf6\xfb\xbd8\xdd\xea\x85\x05U\xf1\xcc\x7f\xf6\x9d\xee\x9a\x9dF\"#V\x9b\x07\x19\xa8D \xfc\x1a\xa9@=L?\xec\xba\xd5\x1bMN\xb1T~,e\"\xed\x0c\x1a:\x1bN\x1a\xec\xd3\x1f\xe0\x07\x13\x8b\xa7\xa9>w\xaa\xbe\xd5\xab\xd5^\x16\x05\x96\x98\x08\xfds\xa5\x95\x8cy\xca\xc6e\x9a\xb2\x82\xab\x89\x88\xd4\x8a\xaf\xb2\\\x1b\xe9\x86\x1f\xa9\xa7s\x9f\xf0UX\x1cA@\n\xe3,\xe3\x172+3\xa8\xa6\xa2\x04\x8bSh\xd9\xf7c\xf4\xfft/\x82\x93\xb2\xe2\xcd\xd6\x97@\x83\xd6\x1b\xc9\xcfA\x18\xdf\xa0,:\xa6Y\xf0nx\x8a>Z{\xedU}\xa1\xfdS\x0f5R\xb0\xfe\x08\x07\xdaM=/\xc2\x9b\xef\xdf\xbc:(\x84\xd1e\x11\x0b\xa6x\xe6\x8b_ B\x90\xcej\x83\xdd\xbbp\xb3\xbcr\\\x8c($O\xe5\xef0+\x85\xb6:\xd6)\x1b\x95\xe3\xb1(\x98\x1f\x9f_\x00\xf8utU\xfd\xcc\xbb]?\x15\xdc\xd8H9\xe1\x89z\x07Q\xcfY\xc2\x05\x8f\xad(\xd0\xf9\x01+\xc0\x88I&\xeaB\x1b\xef\xdf\xbc\xbagX\xce\xed\x14\xbb+D^\x08#\x94\xf5\xdea\x99\xa63\xf6\xb1\xe4)\xc2\x9f0\xa2P\xa3\xc3\xd1~\x9f\x1b&U\xa4>\xb8.\x0e&ZOR1\x00\xeaG\xe5x\x10\xbc\xea\x0f\x0f\x90\x02x\xbd\xaen\x05Y\xdc\x8d\xf5\xa8\x8b,R\xf7\xc5`2\xe8\xbb\xc1\xc0\xf1\xe8\xa87\x88zn\xb5+m\x19\x8fc\x91[\x91<\x00\xcf\xe6X\xb1\xdc\x8dO\xc6\xa2\xcf\xac\xe0\x99S %w\x14\xe7NIg\xb9L\xc1\xe5\xd3h[I\xc5\x8b\x19\xae\x90Y\x0e\x13\x80eIf\x91\x97l&\xa1\xa2DiD@E@\xac/\x80[O\xd5l\xc0\xfe\xa2\xcf\x9d/\xd0\x07\xd3\xf5\xfd\x9bW\xc6\x9bZ%\xfa\x1e\x91\x02\xa9\x17\xec\xc3\xd4\xda\xfcC\x1f\xff\xd7|\x00\xb7^i<4&\xfa\xa8\x19\x9c\xbf\x06\x82\x03\x14;w\xb1\xcc\x19\x07\xda\"eDq\x86n\xb7\xf3\x9br\x83\xdc\x86/:\xbd\x86\xe2\x80\xea\x16t\x93a\xdc\xb0\xb1v\x8a\xd0\x1c:\xe6\xfc\x81\x1d\x8f\xebO:\x06z8/\xa9\xa8\x02k\xcf\x982\x13\xc9\xc0\xbd\xf0T\xb1\xbf\xbc{w\xc2~z\xf1\x8ei\x15\xc4\x03\xe5b&E\xea\x14\xd8?\xe7\xa7\xf8\xdd,\x17\xbf\xfd\xf3\xb7H1_\xc3G\xaa\xc0i\\\xa60v\xefS1\xaePw\xe0\xf7\xea|1,\xdb\x01z\x1c\xd5a\xccc'\xb1Z\x9f\x96yU\xdac\xc4\x9d\xc6G\xd2\xdc\x07\xdf\xbfy\x05\xbdO\xf9\x19\xb0?k\xcc{\x82\x13\xcf\x031\xee\xef3-\x13\xc6\xd5\xcc\xbd\x8b]\x83X\x16b\xac\x0b\xd1\x0f-]\x07\xdc\xca\x91L\xdd\x0e\xa0\x84HB\x91#X\x1a\xc5\x99[\xa0\xcc\x91\x11O\xdd\xe6\x01OA\xa2\x06\xec\xfe{#Bt\xce\x0d\xc4M\x9a\x13z\x9c5\xae\xf8\x04\x08\x1f\x15\x82\x9f:\xe9\xf6=8\xd71R\xbfh+\x0e\x11?\x18\x97*F\xd1p4x\xe9\xf7.@:k\x14\xc2\xf1r\xaa\xa1\xbc\x17O\xbd\xe6\x18\x95cV\x08\xa7\x0f\x04\xee\x81O\x8e\xa2\x17\x17\x90\x18\xcc\x1e\x1d\xb2\x13\xf7A'u\xfe\xdb\xbc\x1a\xbeT\xec\xe8\x8f\x7f\x84\xf6\x8c1\xf6Rk6\xd6\x9a=a\x83\xc1\xe0\xcf\xf8\x9b\xeb\x94\xab\x99\xff\x17W\xb3\x81\xeb\xeee\xa1\xb3\xfbc\xad\x1f\xf8\xdf\x07\x83\x01\xfe!\xc7\xec\xbek\xf4\x1e>\xf5N\xdf\xff7\xd7\xea\x01\xfb\x84\x8f\x1b-?7\xa9|\xbc\x86\xca\xbf\xf23\xbe \x99\xec \xec\x0b\xae\x83\x95\xe4Is\xff\xa5\xd6\x03\x08\xe76\xa9\xc3n]\x0b\xa4\xa2\xd1\xea\xcf\x0d\xb2Y\xa0\xfb\xbb5t\x9f\xcc\xecT\xab\x8ar\xec\xfe\xa5\xd6\xf7\x07\x03\xa7c\x1a\xbc\xd4\xfa\xd3`0\xf8\xec\x9fp5\xeb\xbb\xfd\xc3=\xceQ\xe3\xfe\xcc\x0b3\xe5\xa9\x1bN\xe3\xf3\x15\xfd\xf3\x9d\x85\x9e\xe4x\xae\x9f\xf7*\xab{\x82\xef\xc0tB\xab\xff\xf1\x84)\x99\xd6\x93\xd6\xe8\x1ef\xc7Y60\xa2\xb0>\xc2N\xcbF3\x96\xcf\xafT@\xc2FU)\x1a\xa7\x90#u\xafC\xe7\x1e8\xe3k\x00\x0f\xdc\x16r\x8f\xf1\x86zp\xaa\xc3\xf1\xd2\xfd\x80\xfc\x8cT\xb5\x9cu\xf5CY\xb0s\x83+\xf3\xdb?\x7f{px\x999iw\xd7\x9a\x16\x18\x0f\xf6\xf1h\xf0\xf8\xd1c\x13\xf5<\xd7{;\x81{\x0b\x98\x93L\x00v\x1a\x8e\x0b\x9d\x0d\xe3q\x96\x1d|\x02\x04\xd0?\xfc\xdc\x0d\xf9\xcd\x01=\xc7\xc9+\xa9`G\x0e`P\x85\xfd9\xf6\x02\xbe!\x93*\x1c\xb7\x806x \xde\x04\xf0\x03\x96\xa7k\x8a!-\xc0 \x11\xf3X\x00\x05\x97R\xe2^\xda\x172\xd8\xc5\xe6\xcd\xc05\xc2\\\x08s!\xcc\x850\x17\xc2\\\x08s!\xcc\x850\x17\xc2\\6!\x930\x17\xc2\\\x08s!\xcc\x850\x17\xc2\\6\x9c\x93\xcbb.\xdd'7\x9a\xd0I8\xbb\xe1\\\xb2\xd6\xd1\x0d[\x94+Nnt\xa1\x02\xeb\xcer\xb40\x9e\xb1L\xad(<\xf0\xd0\x9d\xb2u\xe2\x9e\xfc*\xed\xf4%\xb4E\x8b\xdf\xb0\x99.\xab3\xce\xb5)\x08\xdd\xe0\xea-\xb0\xe2\x0b\xb8\xc6\xf5\xf8\xe71\x99\xb9\xde\xf7\x05\xc2T\xc3\xb7\x047\x10\xdc@p\x03\xc1\x0d\x047\x10\xdc@p\x03\xc1\x0d\x047\x10\xdc@p\x03\xc1\x0d\x047\x10\xdcp\xcb\xe1\x86~\xe3\"\xc8E\xaf\xb9q\xdfe8fcA-5\xaf\xc1\xc4\xb5T{\xd4\xab\xdd\xdep{\xf5&\xe6W8{R\xddx\xed\x8f,V\x97_\xb3\x9c\x1b<\x91\xe3\xaf\xc8\x06\xf8`\x80\xcf#\x85@\x83]y)\xb6\xb3\x07\xf1\xd6\xd5\x0d\x90\x92\x9a\xa4\xea\xc2\xcfew\xd46\x8c\xe9q\x8b\xb8\xc6\x85\xa1\x91:\xe7pj\xbb\xcf\xa45\xc1\xd31u\xcd>4\x8a\xcf\xa5\x11\x0dd\x88\x927\x08M!4\x85\xd0\x14BS\x08M!4\x85\xd0\x14BS\x08M!4\x85\xd0\x14BS\x08M\xa9\xc9!4\xe5\x12s\xb2+\x9a\xb2:y#\x93jX\xd5\xf9X\xb0\x87\xde\xa2|UgX\x9c\x90K\x15J\x88x\xe93\"\xf7\xfb\xfc\x08\x8c\xe0\x8c;\xde<\x88\xd4\xa3oKnu\xd6\x7f\xf4\xed\xb7J[p\xf7w-\xec\xd9\xaf\x08\x86D\x13x|%\xbdU\xa8\xd1\xe0T,\x8e\xdf\xe3;\xdc+\x16<\xdf\x83\xf7\xee!|\xe2\x81\x8c\n\x0c\x02{\x7f\xe2\x1c[ \xcb\xb1g5\xd43`\xafCq;=v\xe6\xb8\xf3\xe7t\xc1N\x9dwY{\xbcF\xd8\xdd\xd9\xb7X#\xa9\x93\x01\xf8\xf1\x05\x1ex\x9a\x80\x0d\xaa\xccD!\xe3@'\xac>_\xfc\x05-\xf4\xa9P\xcc3\xadT\x95\xb71\x88\xd41\x1eu\x12\xc6\xd4\xa3GW\xa0t\xd2\xe4^Z\xc1\x8afA\xcb\xabbE]\xdb\xa7\x8b\x19\xa9\xcc\xe4\"/\xe0\xd7\x80\xf8-C\xd9\xd0\xe7k\xca\x8aG#\xdd\xae\x9d\xa3%~\x16\xab\x8c\xffRf\x90r\xb7\xafD\xbb\xd6(\xd7\xaf1B\xc9 %'\x94\x9cPrB\xc9 %'\x94\x9cPrB\xc97!\x93PrB\xc9 %'\x94\x9cPrB\xc97\x9c\x93\xcb\xa2\xe4\x9b\xe3\x1c\x15\x10}\xf0ie\xdd\xa8\x13\xadSg\xc6\xb7\xaaC5\x8d\x10(\xf2\x14\xa97\xfeqT\x15\x17\x8fzx\xd7j\x90_iE\xc1S\x84\xaalUb\xca\xccW\xfc\x1eD\xea\x85\xf3\x02\x8c\xd3\xc3\xcdvc\x0e\x96;Z\xdb@A\xcc\x8d\xb0\"Y,1\x15\x88\xde\x17\xbcR\xa3\xfc\x1d\xf0=\x81)\x04\xa6\x10\x98B`\n\x81)\x04\xa6\x10\x98B`\n\x81)\x9b\x90I`\n\x81)\x04\xa6\x10\x98B`\n\x81)\x1b\xce\xc9e\xc1\x94\xee\x94\xc3=\x97\x8a\x9a\xcfM\xe9\xa8\xe3\xb4O\xd4\x83\x9c\x7fr\xfe\xc9\xf9'\xe7\x9f\x9c\x7fr\xfe\xc9\xf9'\xe7\x9f\x9c\x7fr\xfe\xc9\xf9'\xe7\x9f\x9c\x7fr\xfe\xef\x84\xf3O\xd5\x9b\xa8z\xd3z\xac\x82R)\x08M!4\x85\xd0\x14BS\x08M!4\x85\xd0\x14BS\x08M!4\x85\xd0\x14BS\x1a\xeb\x7fG\xcf\x9d\xd0\x94/\x07MY\x93JA\xe5\x8b\xa8|\x11\x95/Z\x1c?\x95/\xda\x9a\xc5T\xbe\xa8N\x0f[s\xa4\xef\xaa\x8a\x18\x9dh\x9d\xee3\xd7l}+K (\x81\xa0\x04\x82\x12\x08J (\x81\xa0\x04\x82\x12\x08J (\x81\xa0\xf87\x81\xa0\x04\x82\x12\x08J \xe8\x16s\xb2+\x08Z'I\xed\xeayS\x9e\x13\xb9\xf8\xe4\xe2\x93\x8bO.>\xb9\xf8\xe4\xe2\x93\x8bO.\xfe&d\x92\x8bO.>\xb9\xf8\xe4\xe2\x93\x8bO.\xfe\x86s\xb2\xab\x8b\x7f\xfbK\xc6\xd49\x01\x07\xe2B\xda\xa19\xe7\xf9\xd0Ly!\x86<\x83\xfc\x0d\xa9z\xcb\xca\xca\x1c\xf14~q!\xed\x89\xd6\xe9\x91\x96\xca\xb8-\xff\xad{yo\xc5f\xac>\x15\xca\x0cuiw\xc7\x0e\x12\xa1t\xd6 K K:\x1e-\xd8\x9c\x8e\x1d\xd5Y@\xce\x80,\xaf\xd4\x18\xf4\x1f\xb2e\xdcbs\x16)\xf4\x0c\xaa\xf7\x97\xd7\xef^\x1c\x82\xeb\x8d?z\xbd'\xc1r=V\xd6\xaf\x9d\xca\x18o- \xdcO\"e\xe4Dq[\x16\xc2\xb0 Pn\x03\x9b\xe8\x89\x06y\x1e\xf4\xe8\x9c\x1c\xe1G\x84\x1f\x11~D\xf8\x11\xe1G\x84\x1f\x11~D\xf8\x11\xe1G\x81~\xc2\x8f\x08?\"\xfc\x88\xf0\xa3\x069\x84\x1f]bN\xee\n~T\x9f\x91A\x08H*\x8f\x02m\x7fP\xa5BF.\x85I\xfdKK\x85\x98\x94\xb8\xe0\xf1Z0\xea\xafZ\xaa\x13\xad\xd3\xfdbP\xc8;]\xda\xe1R\xbc\xa8O@\x15\x01U\x04T\x11PE@\x15\x01U\x04T\x11PE@\x15\x01U\x04T\x11P\xc5\x08\xa8\"\xa0\x8a\x80*\x02\xaa\x08\xa8\xba\xb6D' \xd2,\x05\x92N\xb4NO\xb0\xc9\x9e\x00\xa4\x9a\xc0\xd5\xed,\xf9\xfe\xe4\xfb\x93\xefO\xbe?\xf9\xfe\xe4\xfb\x93\xefO\xbe?\xf9\xfe\xe4\xfb\xe3\xdf\xe4\xfb\x93\xefO\xbe?\xf9\xfe[\xcc\xc9e|\x7f\n\xce\x93\x83N\x0e:9\xe8\xe4\xa0\x93\x83N\x0e:9\xe8\xe4\xa0\xaf#\x93\x1ctr\xd0\xc9A'\x07\x9d\x1ctr\xd07\x9c\x93\xcb8\xe8w'8_\xc8X4\x83\xf3\xf5\x05%osmO\xdc\xe3\xc6y\x85\xc9\x9b\x93#\x86\xf7WO\xb9J\xd2\xe0\xf9\xe0\xa5,8\xab&\xd7\x96A\xbfl\"\xcf\x84[\xce\xe0\x10t\x9co`\x1fKm\xdb\x0f\x06\x0b\x17\x9cTt\xec+?\xc0\x0dh\x08\x03\xea\x9a\x90PU\xf6-\xaa\x06\xaf\xea\x9e\x8b\xd8 \xec\x03\xf6\xe8\xdb\xc1\xe3o\xbf+\xb9\xd5Y\x87\x95\n\x13V\x0d0\xdc\xa5\xd5\xba\xd5\x1cX\x1e\x06\xe2\x14P\x19\xdb\xb2\xc0k\x808\xab\xde\xf5\xb7m\x0d\xa8J-\xe1C\x84\x0f\x11>D\xf8\x10\xe1C\x1d\xf6\x0d\xe1C\x84\x0f\x11>D\xf8\x10\xe1C\x8c\xf0!\xc2\x87\x08\x1f\"|h\xd79\xb9+\xf8P]e\xc4\x99\xddCn\x8c\xb0C\xace\xb1{\x99\x91\xbaS\x80p\xae\xa8\xd7KAYp\xf3\xf1\x10\xfe\x99\xca\x8f\xa5L\xa4\x9du\x02[\xbb\xde\xff3\x0fL\xbds\x1f<\xd1:}U}nO\x08Uk\xbcv'l\xe4\xab)nB\xf7@\x11\xc2F\x08\x1b!l\x84\xb0\x11\xc2F\x08\x1b!l\x84\xb0\xb5\xa0\x1eF\x08\x1b!l\x84\xb0\x11\xc2F\x08\x1b!l\x84\xb0m\x84\xb0]\x01le\xb0\x84\xee\xb2\")\x005\xed\xb7\xcc\xee<\x9d\xab[\x7f5p\x12aA\x84\x05\x11\x16DX\x10aA\x84\x05\x11\x16d \x0b\",h=\x99\x84\x05\x11\x16DX\x10aA\x84\x05\x11\x16\xb4\xe1\x9c|\x91X\x10b*]\xd9J\x1d\xf0\x0fe\x19\xdd-X\x88p!\xc2\x85\x08\x17\"\\\x88p!\xc2\x85\x08\x17\"\\\x88p\xa1\xb5d\x12.D\xb8\x10\xe1B\x84\x0b\x11.D\xb8\xd0\x86srY\\hs\xb0\xa6N\xd9\x11\xc6\xca\x8c[q\xd0\xb8*\x1b\x01\x85\xf6\x8d\xd9W\x7f\xe4\xec\x85\xff\xf2\xdbs\x9e\xbfp\xdf}\n\x9f=V\xfb\xc2\x84\x00}Y}\xf96a!\x84\x85\x10\x16BX\x08a!\x84\x85t\xec\xe5\x84\x85\x10\x16BX\x08a!\x84\x850\xc2B\x08\x0b!,\x84\xb0\x90]\xe7\xe4\xb2X\xc8M\xe5\xc8\xd4\xc5\x83\x8cP \xf8\xdd\xbbV\x0c\xaa\xbbB$B\xaaKt\xb6U\xee\xceFp\x90.\xed>\xf0\xa0\xd7\xa5\xdd/ $\x15\xe1A\x84\x07\x11\x1eDx\x10\xe1A\x84\x07Y\xc2\x83\x08\x0f\"<\x88\xf0 \xc2\x83\x08\x0f\"<\x88\xf0 \xc2\x83\x08\x0f\xba\x19w\xbb\xb4\xb4\xf7\xdc\xcfu+p\xa4\xd5\xc3\xfa\x07\x98\x1d\xe7<-\xfchX\"\xdd\xa8F\xa5\x85\xbdP\x16x.\xcd0\xf1\xd1\xc3\x04\xa2`\"\xd7\xf1\xd4\xe9\x90\xd4\xbb\xf0\xf0\xae\xa3\xc6o\x86^\nrQH\x9d\x0c\x9cf_\xfa\x11\xc0\x16\x1a\x1f\x8a\x14\xb7\x8c3#\xd5\xc4\xf5.\xdd\xae\xab\x12\xdc\xa0\x97\xd1\xc6'\\*\xa6U\x8c\xfbw\xa0\xc6\xe9\xcc\xb1LS\xb7\xc5\x1d;qI\xbc\x1f\xe76z\xf4\xa8*\xb9Gu:\x11N\xa5\xe2;,\xe12\x9d\x81KU\x7fwh5\xcc\x91\x9f\xdd\xd6\x03P\xe3\xce5n\x10Q\x88s^$\xe8\xaa\xd7\x8d\x9d\xbb>p\xdb\xba\xe3\x98\x81{\x08\x9d\x9dq&9Ku|\xca\x12\xaf\xe9\xdc\xcc\x8df\xc0\x04cy\x96;\xb9Z)\x9d\xee\xed!\xe8\x87!6\xacI}\xa5\xe3SX\xfb\xef\xfc\x8e\xc3+\xa7 \xbe o\xf5\xd9\xb3\x99k\x18T-\xfb?\xfe\x87w2\x13\xf5\xd7+\xb9\x17\xaa\xcc\x9cRy6\x0bo\xf4\xfa\xbdg3\xdf\xfa\x17\xed^\x85_~*t\x99\xf7~k\xa0\xa5\xedw\xda2\xde\xa6\xb5y\x89`\xd3\xcf\xab\xc9\xc6\xc9\x8b\x9d\xbd\"$x\xda#\x01\xf6b\x83\x8f\xc6r\xe7\xe2\xc9\xac\xf5>No\xf7a\xcef\x81u\xa5\xb3z\xaf\xf5\xa4\xc0y\xcd\xd6A\xcds\x01\x13\x9dj\x0dH\x85\xd5Hc\x99\xc3W\xc2h\xd7B\xa2\x15\xf7\xa5A\xec\xc1j?N\xd7\x9dA\xd1u^\xb1(\xea!\x02\xb6\x00\xeeop\xc8#\x15\x1e\x0eX\xd5%\x1aq\x80O)\x0d\x0e\xbf\xb3\xd3\xcf\xa7B-\xf0\x14\xe5$R\x1f\xda2\xf1\x01xV\xcb\xe4*u\x98p+\x1eZ\x94\x86\xf6\x18\xdf\x85\xf7\xabA\x8e\xc2\xf0`\xa6\xdc\x0f\x801\xb5\xc7T\x8d\xd7-\x9f\xaa\x8b\xad\x07\xc5>\xd4b\xfda\x10)\x1060'k\x06\xdb&\x855\x8e\xe4>P\x011\"\xe9\x02<\xa0\xb7#\xad\xbc\x0d\x05k\x0d\xef\xbb\xac\xa1\xa4\x8f\xed/\x96\xb9V,\x91\xe3\xb1p\x9fqf5\xbel\x06\x91\x9a\x9b;pa\xdaC7,\x0e\xf8p\x80G\xfb,\x11\xb9P`\xfd\x05\xf4\xaf\xb5\xac\x06\x18.\x90\xea\x12(\xffWr\n\xbaV\x04\xc0\xaf\xb0\xa1\xc3\xa1\xf7\xf0i=f\xf8\x10T\x11\xa0\xab#!T\xd8\x10\xfd\x8e{\xc4Us\x13\xcb\xca\xd4JgG\xc7\xc8\x04\xa53\xe3>\x07+`\x08\xebf\xd3\xd5\x15(\xac_\x0ddV\xdf\x03\xcc\xb0\xd2\x82\xee;\xaa\xcc\x86\xb0\x97\x9ba\xcee2\xd4g\xa2#\xac\xb4\xca\xbc\xe9\xea!|X\x95\xd9\xc8\xa3\x85\xc0)l\xd7\xa6\xc7;,\x91\x8a\xb5\x9b%\xb7\xec\x81\x88\xcf\xfd\x1e\xee\xc2\xbe\xf7\xed\xa8j\xbd\xbaHN\x17!\xce\xe1\x82 k\x10\xe2\xdc\xdf\xb4\x10<\x99\xb5\x8d\x80dH\xebf\xbbu\xb3\xc0;\xd8';\x17L\xd3J\xaa\xb8\xbf0\xfa\x9f\x82\xc1\xc9\x15C&c?\xc6jG\x91\x1bs\xdd\x91A\xac\x05\x02\n\x85\x88e.aP\xe7S\x1d)\xc3\xad4\xe3\x19\x8bE\x011\xc1\x86\xe6eG\x95\xd2\xf7fk\x00\x8a\xebF\x8c\x17\xbaDL\xa9\xdenA\xc1#\x0f9^\x1d\x8d3\xe2\xe8u\xea\x1ev\x8d\x9a9O\x83\xcb4)\x05\"Q=\xf0Y'~\x06\x9bV\xdcI\xf5k5\xf7uC\x8cQ\x00\xf8\x83\x8e\xd2Z{Q\x89\x0b;<\x15\xb3\x95\xcb\xcb\x87\x0b\xaa%\xef\xdf \xeb\xca\xfd\xe9c=\xdcxk\xe5\x84O\xc4\x1b\xf1\xb1\x14\xc6\x0e\xf0\xb9\xbf\xd6\x19W\xa2\xb8\xb0\x8el\xc12m,\x13\x10\x88\x01F\x03[\x9c\xb2\xd8n\xbd\xa3~q\xf4\xc0\x1f\xf5J\x0fQ\xb0F\xf0g\xdc\".\x86\xec\x06x-R\xe7\xdc0#l\x9fIkBd\xce\xb0R!\xa7\x13\x0c\xe2\x9cK#:\x04\x12;\xf5\x97[\xcb\x10\xfd\xaap\x18\xa9\xe6\xee\xbf\xf6\xa0I\xc3cp:\xb0\xc0\xe7\xb0k\x17Hb\x05\xaf8\x0d\x05\xe6C\x93~@UB\x8b\xb7:\xabi\xa8\xa1W\xe6,W\x01\xd1\x88g\xbc\xa8x\xd2\x04\xd3\x18c\xad\x01\xc0\xe4x@\xed3e:\xac\xa2\xd0.\xcdt\xd8<\x16\xf7\xf9\xf3Z\xac\xaaZ\xe4n=-X\xd3~9r/\xb5\x08\xc6\xa0\xd85\xe7uP\xad]\x10\xcf\x89T~Y\x82\xb7\xb2re\x0e\xd8k\xe7\x81k\x05\xee\x93\x1e\x8f\x8d\xb0\xce\xad:\x15\xb3H\xd5\xe9 F\xd8\xc1\xce8\xd5\"[\xfa]\x0c\xc0\x8f/\xf0\xc0\xd3\x04lPe&\n\x19\x07:\x83{\xe8(\xc4p\xaas\x0d<\xd3JUi\x87A\xa4\x8e\xa1\x87T\x18S\x8f\x1e}\xab\xd28.\x9d\x8aU\xac\xf0\x89\x1a\x91\xbaBVt\xa0\x8b\x0df\xa42\x93\x8b\xbc\x80_\xdbv\xea\xa2RD\x15\xd5\x94\x15\xbfw\x94)\n\xc1\x00`\xebT\x8c\xad\x0fNK\x8b\x06[\x88\xc3@\xb2\x00\x8a\x1cv\xe681\x9a1\xc1\xdd\xd6\x97\xe770\xfe\x86\x02_\xe0B\xe3\x99\xe3\x05H\x82f\xb6(\x05s\x7fH\x95\xc8\x98[Q%\xb5\x84\xb1\xbb\x86^\xa4\xa5\x8a\xd32\x11\x91\xe2,\x0ev~\x17OAY4\xb6\x19\xb7\x1376f\xa9\xd8\xfbc\xe7\xcb\xcd\x91\x04\xa8\x96\xd3\x94\xa89A,k9v\xa2:`(\x91r\xa2t\xd1\x90\xdcH\xe1\x88v`q@\x16\x97p\xb4\x10g\xa20\x8b\x1e\xbb\xff}\x9e\x93\xb2\xb1\xcb\x16b\x89P\xb9\x9e\x823Z$\xa2\xc0\xdc\x08\xa9bq\xc8bm2m\x1e\x9a\xe4\x94};\xf8\xd3w\x97\x19\xcfea\xeea.\x8aae\x9c\xaf\x04\xbcOD\x11P\xa1\x0e\xe0\x1b\x83\x95x\x87\xe4r\x04<\xf4AH8!\xe1\x84\x843B\xc2 '$\x9c\x90pB\xc2\xef\x00\xa2GH8!\xe1\x84\x84o\xbfn\x08 \xdf\x18 \xf7\x079l<\x0d/)\xdc,\x08\x1e\xdfN \x10&\xea\xd7 \x9c*\xc3\x98B\x80f\xa5:\x15 \xcb\xb5N\x11\xa7*\xb32\x85\xa2\x1a[0 \xbc\xe2y\x00\x07\xb2\xe1\xf4;gF\xf1\xdcLu\xa54y\xec\xbf\xa0\x0b\xcf\x07[p\xe7\xa8E\xaa:J>?\xc0\xady\x11\xa9\x9a\x19\xac\x1eQx)\xf8i\x8d\xb13^#\xd6\xc0\xa42O\xb8\x15\xfe\x8a\x9a\xf9\x11\xff\xa2\xc3\x8e\x81\x91\x99\x91\xb6S\x88{\xb85\x00\x0e\xf3\xb1\x1ak\xf0\x8d[\xbf\xbe\x01QF\x081RV\xc4S\xa8\xb2\x90\xceP_\xe6)\x8f\xd1\xb7\x7f\xeed\xa3\xea\x03\xfe\xe5\xdf\x1d\x17:\x03\xe2\x1d\xd5\x0fke\x16\xa9L'e*\xfa\xec\\\xb0\xb8p\xfe\x063\xc2Y\xb3V\xf8\xda\n\xe8\xe9hv*D\xcetY0>2\x16\x8a58\xf7:v\xfa\xd3}.R\x85\xe0 \xec`\xf7\xe7>\xd2\x06rZ\xaf;\xbd\x0ff\x15\x14\x908\x13\x853 \xc3\x01\xf2s\xee\x03\x07\x89\x16x\xe4=\x91\x85\x88-l|)P\xa8\xfd\xdaH\xf5D\xc6\x0f|Q\x0d\x9e\x1a\xcd\xa6\"\xcdM\xa4J\xc3\x8cL\x84\xb1\"g\x9c\x15b\xccc'C\x8d\x1a\x02Lf\x88\x19\xcc\xe2\x14A\xd7J:\x86(\x1d]\xb2\\\x07V\xfe\x0e\xd21\x1f:\xf1\xbf\xd6\xde\xee\xdb\xd0\xe9 \xf4\xc9\x12\xe7-dU\xdc\xc4\x8d\xf5\xdc\xfd\x8f\x82\xfd\x11HhF\xbf\x9c+\xeaT\xac?\xa4\xd4\x01\xb8\xb8\xa7+\x00\x17\xf6\xe8\xf0\x11\xcbx\x9e\x8b\xc4\xf3\xec\xf8y\x9fq\x96J\x03\xab\x0c\xc4\xd9\xa3\xa0N\x11c\xb5\x01\xde\xb1\xaa\xdeM\x85\xc18\nPT\xd7g\xf0!\xc1\xc6\x04\x03\x84\x00\xb5 `\xf5\xb4\xe4@\x8f\xf1\xfdV\x8c\xcf\x99V(\xf9\x01\xd2\xe1\xb1\x13`\x8c\xd6`%\x93:\xd6\xb0@\x1b]\x0du\xa3^\xef\xee\x16\xd3\xca\x03|\xc1\x16\x9a?\xc3\x17\xcc\xa7\xa5\xc7\xf8\xda/\xee\xcd\x94\xaa\x86\xb6\xdb,mfrP\x06\x03e0P\x06\x03e0P\x06\x03e00\xca`\xf8b\"\xb1\x94\xc1@\x19\x0c\x94\xc1\xb0\xfd\xba\xa1\x0c\x86\x85\x0c\x06\xf2\x85WPho\x8f/\xec\x96\x14:\xc4\xbd\x95\xfe\xf0\xaf\xd2N\x7f\xf26\xff|D\xc1\x1b\x14\xe0\xb24\x9c\xe4\xe5>r\xd5\xd9\xde\xdc\xe4\xae\xc1\xef6\x97\xd0\xd5\x86\xcd(FA1\x8a-\x18@1\n\x8aQP\x8c\x82b\x14W\x19\xa3\xf0\xea\x7f\xbdz\xdfL\xb1\x13\x12LH0!\xc1\x84\x04\x13\x12LH0!\xc1\xe2\x8bA\xb4\x08 &$\x98\x90\xe0\xed\xd7\x0d!\xc1\x8bHp\xa7'\xd6\x00\x14a\xdbp\xee\xa8(\xc2\xee\xd1\xf6\xcc\xd0\x0d\xe2p\x01\x8d3\x9b\x8d\xd1\xb1\x04\xfc\x05\xc8%\xb4y5\x85v\xcfh3\x02\x85\xa3\xd9P&\x07\x9fd\xf2\xb9\xd7\x054\x83(<\x9b\x1d?\xaf\xf0e/\x8a\xa3\x99w\x81\xfcy\x03\xe7n\x1d?_\xc0\x96\xab\xf7\xf7\x06)\x93[Mn5\xb9\xd5\xe4V\x93[Mn5\xb9\xd5\x1bY&_\x9d{@n5\xb9\xd5\xe4Vo\xbfn\xc8\xad\x9ew\xabk\xde\xe0P\xd0\x82\xa9\xca\x81\x00\xad\xd5\x05\x82P\xd2\xc1yM\xe4'\xaf\xa0\xd0^\xb1\x9f\xdc]\x97\x03nW\x9b\x17F\x9c\x1e\x9f\xb9\xe1\xcd\xf9\xde\xd5]\xc2\xb6\xc3\x01s\x94\xd8\xdeRW\xbd>\x1a\x05Y\x1ae\x1e;\x8d1Am\xb1\xf2\xc2\xb3\xfd\x1e\x90\xa2\x02\xaf\xe4\xbd\x93\xf7N\xde;y\xef\x1b9\xba\xe4\xbd\x93\xf7N^\x08y\xef\xe4\xbd\x93\xf7\xbe\xf3\xba!\xef}!(^3\xe7\xfdr\xcf\x89j\xban\xb5\xee\xa9\xa6+\xd5t\xfd\xb2\xb1#*\xa7J\xe5T\xa9\x9c*\x95S\xa5r\xaaW\\N\x15O\xe7\x8ef\xc3\xf61\xdd\x15\xe9j\xae\x9d\x07\xb6\xf0db\x9d\xb8\x16\x12\x16\xd1\xf6sVD\xe3Ptg\xee\xdabg\xfb\x82\xc7\xe94\xf3fc\xa1\xd3\xcct\x9a\x99N3\xd3if:\xcd\xbc\xd7\xd3\xcc\xe4\x92\xee\xdb%\x95{\xceSHu|\xea\xd4\xd00\xc0o\xdd9\x0b\xaf|\xb3\x10M\xa9\xd3\x17B\x07Ul\xc9c\x92N\xe2\xcfx*a\xdf\xad\xb7a\xb7\\*\x01\x1e\xebb\xc1\x98[\xf8\xd2\xbeL\xb9n\xce\xac\x91\xa5ZB\x82&{\xe76\xbc9\xde\x94F\x14\x06\\i\x08\xae!\x92;\x86\xed\x17-\xfb\x80\xb5\x8a\xb3*\x08N\x8b\xf5&\x17\xeb\xb6\xcb\x08\xed\x82\xa1\xd5\xc3FRC\x15\xe7XXN?C\xf3w\xfay\xd5\xf8\x08d ,\xaa\x06\xb6\x0f;\x87\xf6\x01\xf1Q+\x0fba\xed,\xe9v_+\x88\xe2<\xdb\xc5y\x8e\xe6\":3\x04\x08\xe6&\x9d\xf4\xc0-\xd6\x03^Y\x0f\x85\xb1\x07\x9f\xf4\xb9\x12E7\xfe\xf1\x06\xdb\xbd0\xb6\x86=\x14\x13\xc6\xca\xccY\xea\xde\x8f\x0b\xf9O\xe0\x8f(}\xceJee\nff\x95\xa5\x82\xc1j\xf4<\xc7\xa5\x135\x90Y\xcc\x8a*\x98\xcf\xe8\xf1\xa9\xac\xf0\x15\x9e$\x850\x86\xe9\xc2\xf5$lHb2\x91\xaaCov*f\x95}=\x96\x18\xa4c\x8d\xa3\xa3a[\x9a\xd7A\xf5\xc8H\xed\xdc\x0d\xb5\xf3\xc2K]\x82\x89\x14A\xe8\xd0\xf5\xc6\x0c\x83`\x8c$\xce\x85\xaf\xd2\xa2\xbd E\n\xe4\xb3v40)g$\xec9\xa4\x04x\x94\xa6JF\x14\xee\xff\xe7:\x9e\x92*\xbbIU\xd6\xed\x7f\x80\x8eZ@\x9b\x9ez\x15\x012 M;\xb1\x1a,U\xafjD%;\xb5>\xd8\xc5\x9bi\xa2\xe8\x90\x86)\xa1\xab\xc5\xc4Fv\xfc\xdc\x84x\x02\xe0 \x9e\x10\xfc|\xa0Gj\xb5\x1e\xd2\x17\x17y\ns\xbd\x84\xb456~\x97\x03\xd6\x18\x85P>\x85fa\x18\xef\xf3\xdcY\xf8n9`\x84 \xa2Is\xe4G\xea\x95>\x17\x05\xabbPa\x19!p\xb9vp\x1b\xb8\x8d\x97\xf0\x1aC\xba\xfa\xaa\xab@\xde\xf8}\xcdQ\xe2\xcc\xd2$`\x14\xb5\x81\xa3\xb4\x05#G\xc7qYt\xd8\xb3!\xb7\x83R\xde)\xe5\xddP\xca;\xa5\xbcS\xca{gp\x88R\xde)\xe5\x9dR\xdeo\xa3oE)\xef\x94\xf2N)\xef\xdb\xaf\x1bJy_\x91\xf2\xee\x0f\x10\x9fO\xb5\x99[\xadnk\xf4>S\x8f\xb2\xdf\xb7R\x01\x94\xfdN\xd9\xef_6\xd4G\xd9\xef\x94\xfdN\xd9\xef\x94\xfdN\xd9\xefW\x9c\xfd>\x87\x86\x0fsQ\x0c+\x8b}\x01\x17o\x83\xda'\xa2\x08`\xd1\xb6py\xa4F3\xb4\x13\xd7\x00\xe7\xe1\x1b\xfb\x02\xd0;\xa2\x05\xbb\xed\x93\x84\xa5\x13\x96NX:a\xe9\x84\xa5\x13\x96NX\xfa\xd7\x86 \x12\x96NX:a\xe9\xdb\xaf\x1b\xc2\xd27)\x1f\x035^=C2n\xe3ixM\xe1vAx\xfavj\x80\xf0t\xc2\xd3\xbfl<=@/m\xbe\xbf\x94\xa9\x15\x05z\xba\xcbuKuj\x17:\xd9\x01\x80\xab\xb7&\xc2\xf7 \xdf'|\x9f\xf0}\xc2\xf77\x1a\xcf:|\xdf\xd9\x88e^a\xfb<\xc6\xe9@\xd3\x11\xed\xe75'\xbb\xdc\xb0\x18\xf7\xc6f\xd3\xce\x8e\xb9\xba\x07\x00\x89\xf3\x14\x92\x82\x9f\xab\x05\xe0\xfe)~\xee\x15\xbcK\x877o\xbd\x97Ef\xd8\xde\xcd\xb0p\x82i\xb7cG\x97S\x07\xc1\xe9\xdc@#`m\x0e'\x8a^1\xf8\x92KA\xa0k\x8b\xb0\x06\xe6W\xe8\x86\x06|\xbf\x17\xf5\x00\xc8\xe9\xee\xa2q\xfc|\xe5\xd4W\xded{\x1c\xc7\xcfY;\x9e'\x93V\x18\x02x\x15\"0\x96\x85\xb1L*i%O\xe5\xef\xc1\nr69\x8c\x06\\\xf5\x10\xdc\xa8jS\xe9\xf8\xb4\x1f)\xe1A}\x7f\xccq\x84Lq?\xfc\xb1\x0ey\x10b\xbf\xe9\x9e\xd8E\xb27\xfcB\xe4.@q@\xb9\xac\x03E}v*r\x1b,B,\xaa\x11\xd6\x11\xf4\x8c!\xdda!b!\xcfD1\xf4kk\xfdR\xc0c\xe9\xec\x8d\x7f\x91\x85\x13\xaea\xad6\x0f\xbc\x9e\x07O\x15?\x83\xc0\x8f?\x89\x8f\x05\xe4\x04kW\xb1\xa9\x17(\x0bqeo\xff\xe2\xba\x86D\x0d\xf4\x87\xdc\xbc\xa0\x9b\x19\xa9x\xca\xd5\xc4\xc7\x9e\xab:b\x99\x99t\xc5\xb5N \x9c\xff\xcak\xb4*F\x8f1N%\xc1\xa7\xc2\x90?\x0b\xd8\x18^\xfd\xcb.\xfc&\xe6\xf9 \x0e,$)\xe0\x0e\x84\x19\x11\x0dk\x95a\x0e@\xd8\x8f\xdcB\x00\x0f\xc3\xc3\xbb0\xa2~\xb50\xfa\x91\xf2+\xacJ\x17h\x03\xfeh\x00{\xe8\x95=\xad\x95\x1a\x0f\xf4z5\x1d),\xa9\xd6\xad\xa7\x01U\x16!8\xe0\x93\x0d\xaa\x95\x0d\xe85\xaa\x8a\x04\xb5\x18N\xd3\x87@\xe6\x07h\xe6\xd1P\xe3f\x8f\x95j\xe4a\xbdZ\xc3\x91=w\xc7\xed\xb9\xda]m\xd8Q[:\x8bWd\x1cb\x92\xc0\xd5\xd9\x88sI\x07\xab\xed\xc3W\xd0\x98\xacD\xb2\x12\xd7\x92CV\"Y\x89d%\x92\x95HV\"Y\x89d%\xee\xd9J\xc4\x83\x03\xdb\xd8\x8a\xf7\xcc\xbc\xb5\x88\x9b6\xa6\xaf\\\xd6r\xdc\xeb\xc1\x012\x1f\xc9|$\xf3q;\xa1'\xf3\x91\xccG2\x1f\xc9|$\xf3\xf1\x8e\x98\x8f\xfd\x85\x84\xc2]{\xbaZCTi;\xac6\xe9\xa1V\xe9l\x1b\xabt\xde&\xed<6%.\xe2\xb4\xf4\xb7U\xe0\xf1\xc3\xb0yV\x1f\xde\xc6V\xfdE\xdb\xf7\xe1=g\xf3\x90\xd9Jf+\x99\xadd\xb6\x92\xd9Jf+\x99\xadd\xb6\x92\xd9z\x85f\xeb\xe5\x8c\xcd\x9c\x1b\xeb\xd6\xc4F&\xe5\x9c)\xe9\x96\x87\xaa,\x08\xd0\xef\xcdU6\x123\xdd<\xa5\xbd\xda\x82<\xe1\xc6\xfa\x8a d+\x92\xadH\xb6\"\xd9\x8ad+\x92\xadH\xb6\"\xd9\x8ad+B?MCj7c\xb1sK\xbb*\x0br\x8b\x809Hy\xb0\"G\xb3\xa0\xac\xfa\xb5\xad\xd8_RO\xaf\xd3d\xa4\xd08\xd9\x8dd7\x92\xddHv#\xd9\x8dd7\x92\xddHv\xe3\xcd\xd8\x8d\xb7%`^Y\xa0;F\xca\xd3K\xc1\x9a\x91\x9a\x8f\x9e\xb3-\x83\xe7\xc1\x8e\xa5\xb09\x99\xb4d\xd2\x92IK&-\x99\xb4d\xd2\x92IK&\xed\x8d\x9b\xb4;\x1a\xa2\xb8J\xf8(\x15\x1b\x17&3\xac~\xc9\xaf#_,\xb7\xc0\x0bF\xaa\xdadl\x06\x05\x14;\x0d\xc8\xf7U\x1fT\xa3\xec\xd6o\x9e\xa4\x80\xee\xb8\x02\xba\x94v\x10\xc9\x10\xefr\x00#{\x0b\x0d1\x9f\xbc\xddvF\xf1v\x88u96\xef}O\xcf\xa0=\xe5\xd9\x90s\xb9\x92\x1cr.\xc9\xb9\xbc\xf9\xfd\x91\x9cKr.\xc9\xb9\xdczG%\xdb\xee*l\xbb\xdb\xee\\J5\xd9\xda\xb7t\"\x1a{\xbfp\x85Y(\xd5\x84\xbc\xc7[\xbf;\x92\x86\xb9\xe3\x1af\xcb\xe5\xef\xfe9\x9c3[\x0e>\xc1\xaf2Y\x1f\xd0\x0c\x9b\xf4h\xc6d\xb2\xb0\xfe\x9d9\x80\x96M0l\xf6\xb5\xf8\xe7F\xd8\xc58\x92\xfb=\xcb\xbd\x17\xba\x1d%\x7f\xd1=\xdfi-\x88d8\x9a\x0der\xa5k@$\xcff\xc7\xcf\xf7%\xfb\x8e\xc6\xf5\xad\x08\xf2 \xc8\x83 \x8f/\xd3\xa8#\xc8\x83 \x8f;\x0dy\x90]Fv\xd9\xb0R\xd6K\xad1\xbcD\xcd/\x9c\\\x14\x1dE1sn\xac\xbf'\xd6\xef\x87]\xe6\xda^\xcf\xfa,\xdfzh)\xecy)\\6\x03y\x9f%\x19p\xaf\x19\x8ex\xcaU,V\xac#6.\xd3\x94\xf9v\xc1\xd6\xc5\xb7\x17\x96\xcb\xcf\xf0\xf33\xdf\xe7\x9e\x16\x0c\x19\x81\x9b\x18\x81\xa4>nP}\xec\xb00\xfd.W\xcb\xdc\xb2\xe5\xe9\xf7\xb7m\x16(\xeejO\xb1kZ\xa5\xb4Ji\x95n\xbbJ\xe1\x9e\xec`\n\xaf2B\xe1\xc2lp\x83\x00\xf2k/\xc7_\xc4\x05\x1c\xc7\xd9/\x1a\xe8\x87\xb0\x94Q\x95\xa1N\xb2x+e\x11\x8cS\xd3)\x85'\xf0\xc8\xdf\xb6\x8cN~\x993|a\xd0\xe9\xed\x949\xbe\xb3/\x81\xac\x07\xb3\xba\xddX\x17\xb1\xf0a\xea!OS}\xeevKD\x89\xc4&\x13\xd9r\xa3H\xb0o\xa3`\x9b\x99\xb2Sae<\xc4\x07\xc3\xd1,\xe8\xdc\x0d\x032U\x0fA\xf4G3\xe66\xf53\x11~\xe8\x88\xd1\xbc\x0d/\xe1zx6\xc3\xff\xdd\x9f\x92n\xf3a}\xfbR%\xa2HgRM\x86[\xe8\xf7y\xf3\xe8}\xd5\x0b{\x85\xfbW\x1d\xdc\xa9\x9e4\x98y\xcf0\x19\xa0{\xd9`}\xa4\x90\xd5\x80-\xb6\xe6\x83\xfd\xfc\xfe\xed;6\xe5g\x02\xe3\x00U\xafi\x08\xa5@\xfb\xe1\x12co\x9e`\x987\xc0j\x02\xa1\xf5\xe7\x10\xfa\x01\xf4\x18\xd0\xd9Xg\xa3`\xde\xe9q\xa4&<\xcb\x98\x99\xf2B\xb0?\xb2\x06\xechK\xc3\xfe\xc8\xcex*\x13nu\x11p\xe8\xddb-V\xda\xd4\xb5*\x8d\x8fq4\x10\xce9A5}\x0c\x00\xc5\xc0\xde\x8e\xa7\x8e\xc7\x91\xaa\xc2+\x1e\xcd.U3\xc2\x82\xcb\xf3R\x11\xa9\xaaZ7\x86\xa3\xe6\xe6\xaf\nLE\x8a[h\x9fk\xa9\xacsB\xea\xa15\x02;]\xb8yk\xb5\xb9\xcf\"\xa4\xac&\xecL\x16\xb6\xf4\x08^\x99\xb3\xf3\xa9(\x04S\xe2\xdcO\xa6k:7\x8b\xba\x90\x13\xa9x\xea[8\xbb\xbd\xa6\xd8\x94\xe3\xb1\xbc\x18\xb0\xa7\xb6\x0ej\xe9\xf1\xa2\x8a\x08\x90v\xa4*H\x1b\x01\xee8.\xb32\xc5\xaf\x01\xd6\x0e\xa2\x94\x1a\xed\xe3Re\x9e\x00:\xee^\xd3\x8a},E!E\xc1\x8cLD\x1f\xd0\xee\x19\x04\x16\x00\xdba\xdc\xb0q!D\n\x7f\xb5T\x12\xa1\xdc7\xba!\xddR\x94{~\xef3\xd7\xb3\xf9E\xea\xb9\xc8\x0b\x11;\xc1=d\xa5\x11l\xe9\xee\xc7\xa42V\xf0\xb5\xfb\xa5\xb9m\x1b\xe6%\x84\x8dvR\xdaIi'\xbd\xeb;)m\xa5_\xd7V\x9aIe\xab\x8dT\xe4:\x9e\x0e\xf3B\x9fI#\xb5\xea\xc6I^\xb8F'U\x9b\n0A\xd4\xb6(\x84\xb2\xcc\xf5\xea\x84\x13:du\x87\xa8\x1c\x16\xd1\x94\xb9>\xf7\xb5\x17v\x8d\x7f\xf5\x94\xce\xeb\x95\xf9\x1e\x82F\x9bgL.\x8a\xa5\xccY\xd4V0ss\x96\xb8.\x0e&ZOR1\x00\xeaG\xe5x\x10v\xf4\x0f\x0f\x90\x02x\xddLC2\x9a#\xdbmKZ\xc9\x98\xa7NZ\xb3H\xdd\x17\x83\xc9\xa0\xef\x06\x03;x\xd4\x1bD='\xddJ[\xb7\x0d\x8a\xdc\x8a\xe4\x01\x84\x94\x8e\x15\xcb\xdd\xf8d,\xfa\xcc\n\x9e\x19V\x9a\x92;\x8a\x9d\x81\xae\xb3\\\xa6\xee#>'\xd3\xed\xd6n\xf3KS \xddg\xc6\xb9\xad1\xf2\x92\xcd$\x1a2F\x84|=\x10\xeb\x0b\xe0\xd6S5\x1b\xb0\xbf\xe8sq&\n4\x90\xde\xbfy\x15\xaaA\xb8W`\xa1\x81\xd4\x0b\xf6ajm\xfe\xa1\x8f\xffk>\xf4\x99.\x98\xd2\x0c\x9f\xf6\x99\x9b\"\xb7\x1dk\x10\x1c\xa0\xd8\x19Qe\xce8\xd0\x16)#\x8a3Q \x89\x19\xcf\x0dr\x1b\xbe\xe8\x0c\x1f\x14\x07\x0c\xc5I\x0b\x8b\xd9m\xea:M\xf5\xb99t\xcc\xf9\x03;\x1e\xd7\x9ft\x0c\x04\x15\x93\x88\xa4\xa2\nL\x08c\xca\x0c\x92O\xff\xc0\x9e*\xf6\x97w\xefN\xd8O/\xde9\x1b\xc2\x8b\x07\xca\xc5\x0c\xa2u\x9c\xfds~\x8a\xdf\xcdr\xf1\xdb?\x7f\x8b\x14\x0b\x99\xab*p\x1a\x97)\x8c=/tR\xc6`j\xc3z\xc7\xef\xe5y*c\xee\xc9/\x04\xf3\xa0\xb4\x1ba\xcccH\x86\xd3\xce**\x84)Sk\xd8\x88\x1bH\x95CV3G\x1d\xf4\x0eV\xbc\x9d\x8a\xac1\xef N<\x0f\xc4\xb8\xbf\xcf\xb4t\x16\xd2\xcc\xbd\x8b]\x83X\x16p\xda\xbe\x1fZ\xba\x0e\xb8\x95#\x99J;\x83\xdcb\xe0\xf9H0X\x1a\xc5\x99[\xa0\xcc\x91\x81\xc9\x8e\x98\xf4\xeb$j\xc0\xee\xbf7\x82\x9d\x89\xc2\xe9W7\x107iN\xe8q\xd6\xb8\xe2\x13 |T\x08\x8e\xc7\xbe\xb0\x87\xc1\x03\x08\x91j+\x0e\xd1\x81\x19\x97*F\xd1p4x\xe9\xf7\xbb\x873\xdb\xce\xb8L\xa1$\x89\x97S=\x1e\xcbX\xf2\xd4k\x8eQ9f\x85p\xfa@`\x9a\xa1\xb4\xa1\x93\xca\xfe\xaf\x05j$&R)G\xce\xb9\xb4\xd3H\xb9'\x03\x9cg\x9eK3\x88u\x06\xeb\xed-\x88\x92a\xdaNQ4\xd5\xbc\x9c\xb3\xfb>qTd\xb9\x9dy\xd9{\xc029\x99ZH\x0f\x85\xafC\xc0\xb8\n\xf4z\x9b6\xe4f\x1a\x91qee\x8cn\xce\x86&\xd5\xbc\x1e\xfe\xd9\x89\xecH0\x8e\xdeSC\xb5\xb2y\xcd\xea\x95\x19\x1fi\xe7\xeb \x15~\xe6\xba\xf6\xe0\x0fO\xd5\xecCP\xba\x10\xbb\xe6\xc5H\xda\xc2 \xce\x8a\xaf\x84\x05\xcbS\xed\xd9\xccx\xa4\xdc\xea\x82\x15\x8e\xdf\x18\xad\xdc\x14\xaa=\xc0M\xc5I\x98\xe5T\x8e\xe0\xdb~q\x1bf\xca<\xd7\x05\xe8\xb1\x9c\xc7\xa7\x07\xa5r\xff\xe3\xb4\x17\xaeO\x13D\x06\xb5\xad\xf3\x96,Jz\x909\xc3\xd0\xd7\x94(\x80l\"\x943\xd2\x80\x02g+Ti\xff\xaeO\xe0\x93\xa3\xe8\xc5\x05w3\xca\x1e\x1d\xb2\x13\xf7A'u\xfe\xdb\xbc\x1a\xbeT\xec\xe8\x8f\x7f\x84\xf6\x8c1\xf6Rk6\xd6\x9a=a\x83\xc1\xe0\xcf\xf8\x9b\xeb\x94\xab\x99\xff\x17W\xb3\x81\xeb\xeee\xa1\xb3\xfbc\xad\x1f\xf8\xdf\x07\x83\x01\xfe!\xc7\xec\xbek\xf4\x1e>\xf5N\xdf\xff7\xd7\xea\x01\xfb\x84\x8f\x1b-?7\xa9|\xbc\x86\xca\xbf\xf23\xbe \x99\xec \xec\x0b\xae\x83\x95\xe4Is\xff\xa5\xd6\x838\xe5\xc64\xa9\xc3n]\x0b\xa4\xa2\xd1\xea\xcf\x0d\xb2Y\xa0\xfb\xbb5t\x9f\xcc\xecT\xab\x8ar\xec\xfe\xa5\xd6\xf7\x07\x03\xa7c\x1a\xbc\xd4\xfa\xd3`0\xf8\xec\x9fp5\xeb\xbb\xfd\xc3=\xceQ\xe3\xfe\xcc\x0b3\xe5\xa9\x1bN\xe3\xf3\x15\xfd\xf3\x9d\x85\x9e\xe4x\xae\x9f\xf7*\xab{\x82\xef\xc0tB\xab\xff\xf1\x84)\x99\xd6\x93\xd6\xe8\x1ef\xc7Y60\xa2\xb0>\xc2N\x0b \xec\xf3+\xf5\\\xa6i3{\xbe4\"R\xf7:t\xee\x813\xbe\x06\xf0\xc0m!\xf7\xdc\x0e_\xa9\x07\xa7:Bb:\xf23R\xd5\xf2T\xe9,X$\x0b\x16\\\xb5%\xf9\x9316\x18\x86\xf7\x0e\xeeE\xca\xeb\x86\xf0 \xb4s\x84\x9f\xc3\xa87\xd6z0\xe2\x05Pwq0\x1b\xfc\x1e\xf5p\xfa\xf0\xbf\x1d\xc9\x1f\xbc\x11Wi\xf5&\x0b\x06A\x84\x0f\x83\x80:f;\xa9\xad-\xa1\xb1L\x85_\xaeA\xa4ODa\xb4\xaae\xc6\x9b\xecp\xa6g\x08\x1cz\xc2\x1e\xfdy\xee\xa9\x9b\x87\xf0\xf0qk\xfd3Vw\x15\xf5\x80\xea\xa8w\xc8\xa2^\x97\xdc\xb4 \x1b )Q\xaf_w\x00d\xfc\xc23\xe8\xe4\x07\xfc\xfa\x8f\x8d\xe7\x8e\x90\xf9\xc7\x0dr\x8e\xc7~\x93os\x1ay&\x0d;\x17i\xfa\xf0T\xe9sL\x04\x9br@=1\x95\x0bE\xa1=\x91}\xdc\x05\xe7f\x17\x17J\xe33n\xfa\xd4\x84q\x9c\xbcH}\x001 \xb37\xd5i\xd2J\x1a\x03!s.\x86\x9f\xf5p6\xcbOz\xa4\xa0\x9bj~\xd9}'\xeba(\x0bvnpe~\xfb\xe7o\x0f\x0e/3'\xed\xeeZ\xd3\x02\xe3\xc1>\x1e\x0d\x1e?zl\xa2\x9e\xe7zo\xc3t\x80\x16\x8e\xb3y\x96\x0b\x08<\xe4\xfe;7D\x8fk\x80\xa2\xc2\xa7\x16\xd1\x9a\x9f\xa5\xb2\xb7%\xf3\xa5\xfd)\xfc\xbdJT\x04l\xb8\x1aH;\xdf\xd3\x11\xb0\xfa#\x8e\x15\x9bF\x01\xea\xb6\x15\x86\x0d\xff\xf0\x9f\x84\xa3H\xce\x11\x90\xfe\xec\x973\xad\x8c4\xc3M\x10\xa7\xf6\x97\x96\xbd\xb9\x08'\x8d\x0b\x08>\x08\x7f\x9e\x10\x9ec\x08\x01^\xad\x00\x89\x0d\xce\x82\xce\xbf\x01\x03\xf1_l\xfc\xea\x1cxv?\xe1\xb3>;\x17\xe2\xf4\x81?\xe6\x96\x94`^\x0e\xf1\x88\xd4P*$~5\xbc\xd6\x1d\x1eZ\xde\x19\x8c\xb4>\xa9\xe5\x7ft~=?\x15&r.!\xbc,\xfc\xc6\x02g\xe0\xe6\x08\x1c\xf3\xd8vAR\xcb\xa9\xc07j\x0c\xce\xff\xce\xb22\xb52O\x1dS\xacf\xe2B\xc4\xa5\xad\xe3\x15B\xc1I5\xc1\xdd\x84\xe1\xb91\xb7\xfcF3\xb6||x\x18Q:\x8aF%\xb6(\xb43\xf8\x83\xd8\xb4I\\\xd6\xb2\xb56\x9a\x8dX\xb3QX)RY\xe7\xf3\x82,\x0f\xd8\xb1\xf2\x1e\xe0\xb9.\x12\xd3\xaf\xbaB5l\x1c\xa3\x9d.vK\x0dT\xb8?\xd9\xb8\xd8\x95\xc1\xddA\x9f\xb3\xact2\xb9n%\xba\xae\xdd<\xac\x9d\x18\xdf\xb0\xad\x00\xaaq\xb5\x87\xc5\x1ak6\x84\xe8\xc0\xdb\x8f\x14OS\x1dcT\x05\xa2H\xa7\x8dc\x930\x0f\xb9\xd6\xe9\xb0>6\xb9\x9e\xb0\xb9\x17v%\x10\xc4x\x84xIE\xa0\xeb\xbbq\x86\xd3\x9fZ=\x13\xa9c\xa1\xafP\xb1\x01\x89\x0b\xaf\\\x1d\x91V\xb3\xaa\xf7\xea\xf8i3\xa8\x19\xeb,+\x95\xb4\xb3\xa1\x1b\xcczZ\xdb\xed\xaf\x94PT\xd7\xbe{\xe0-@\xe4\xfd\xde\xb9\x90\x93\xa9\x85\xd3ts\x8c\xaa\x8e\xf0^\x02j^z\xf8\xb7\xfar\xc7\xa3\x05\x90\xe2WOc8\x11\\\x19V\x08X\xf8_}\xde>v\xcb\xb81r\xa2p\xf0\xd2\xfa\xba\x03\xfe\x994\x08\x1b\xc1\x04ZQdR\x89%\\F+\",s\x7f2\x1a\xf9\xeb'\xc03\xb79\xefm\xea7\xe10\x9b?\xe4\xac+5S\xbd\xe5\xacL\x941\x18)vk\xaa\x81\x02D\x02\xba7\x90\x02\x10\xf5\x18b\xb8\xfe\x8c\x02H\x88k\x03\xbe\x83\xe7%|\xc6Qp\xc8\x16v\xdf?Dj\x99\xca\x1d,\xae\xac?\x843\xdb\xf7\x0c\xc39\x03vx\xe3\xab\x1au\xabG\x88f\xe3f\xb0\xd1\xc6\x19\xe2\xfe\x9bv\x8a\xe1r\xbf\xa9\xbb \x0f\xedD0\n+\xbeV1\xa3\x85 \x15\x9a\x85\x1b\xc5\xa6\x18\x86\xa6\xbcAJ\x11\xa9\x8d\xd4\x84\xa5\x88\x14E\xa4(\"E\x11)\x8aHQD\x8a\"R\x14\x91\xa2\x88\x14E\xa4\xf0o\x8aHQD\x8a\"R\x14\x91\xdabN\xae5\"\x95k\x9d>\xaca\xc9*8\x05\xb8\xc2P\xaa\xb1\xeeu\x05\xa8\x9e\xbb\xc7\xc7j\xac[1*\xd7\xd9=\xc32n\xe3\xa9c\xfc\x84\x97NY'\x88${\x84g1RUu\xb6\xaf@U{\xb0\xab\xdb\x02\x826\\\n\xf6\xb9\x11\xc0-3\xbb\xa3\x07\xc0\xb5\x0d\x0f\xe6\xac\xc4\x1d\x1b\x89\xec\x04\xd3l\x05\xd3l\xeeH4\x99\xbc\xd3B\x13\x17V\x14\x8a7\xe2\x0eC\x10\x80\xee\xc0\xf0\x0b\xdf\xfa84\xfe \xdaV\xab0\xf4VG\x1ap\x11v\xac\xba%]\xedm\x0dr\xcbw\x9f\xca\xcdVK\x0d\xb7\xca\x84\xb5\xeb\xfab _\xce\x80 n\xfe\xa5\x19\xe6\xa2\xc8\x85-yS@FZ\xa7\x82\xab\x05\x07\xb2\xd9\x1c\x8f\x91\x8dS>q;\x88\x99\xeasg>J,\x81Y\xb7\x02\x84G=\xac\x7f\x80\x99r^\xfd\xc2\x8f\xa6\x89\xf3\xda\xa9\x90E\xa8j*>z\xfc\xaa:\xaap>\x95\xa9\xc7\x96\xbc\xfe\xad<8\x7fd\x0c\x83\x96\x03gr,\xfd\x08\x80^\x8d\x0fAT\xb4\xaa\x01Z\x15\xde\x04\xcbq\x19m|\xc2\xa5\xaaKg\x06j\xdcf>\x96i\xeal\xafc'.\xa18\xb0\xb3@\xd1\xd5\xafCp\xb0\xcfO\x84\xdb\xeb\xf1\x1d\x96p\x99\xce\xdaqV1\xb4\xa8\xb9\xfd\xec\xb6\x1e\x80}\x01\xe7\xc3j\"\xaa\xe8V\xd1\x08\xaf\x02\x8e\x14\xca\xfcJ\xe3\x0fia\xadT8\xd2V\x1dx\xd3P_\xb5y\xc3\xc5j\xe9\x84\x03Cp\xb6k\x88\x0dkR_\xe9\xf8\x14\xf4\xc5;o\n\xf1\xca\x9b\x87o\xc2[}\x86'P\xab\x13x\xff\xc7\xff\xe0\xaf \x9b\x97{\xa1\xca\xcc)\xa2g\xb3\xe7u\x19\xbeg3\xdf\xfa\x17\xed^\x85_~*t\x99\xf7~k\xec\x0f\xedw\xda2\xde\xa6\xb5\x19\xce\xb3\x0d\x00\xa2&\x1b'/v\x86\xb4\x90\x00\x01\x8d\x0482\x0d>b8#\x1c\xb8\xb3\xad\xaa\xd3\xcb\x92:\x02\xef\xf0\xff\x18\xe2m8N8\x93\xdb*\xc3Y\x0d\x11@/\xc0e\x02R\x14\xa9\xaa\xc23\xab\xbaD\xef\x02\x80S\xa5\x01\x89r\x0e$\x14\x94\x9e\xe7)\xcaI\xa4>\xb4e\xe2\x03\xf0\xac\x96\xc9U\xeapy\xb9\xecw\xe1\xfdj\x90\xa30\xbcP\xca:\\\x96\xd7\x1cS]\xb4:Ru\x17[\x0f\x8a}\xa8\xc5\xfa\xc3\xc0\x1f\x8b\n\x87~=\x83m\x93\xc2\x1a\xe0t\x1f\xa8\x10\xc2\xee\xd3\xa4\xd0\xdb\x91V\xde\xb8\xc7\x9a\xc6\xb6(\xe3\x06\xc6\xf9\xb1\xfdE(\x0b\x9c\xc8\xf1X\xc0\xb9\xb08\xbcl\x06\x91\x9a\x9b;\xde\xbc\xcd\x1e\x7f3,\x0e\x81\x8b\x80\xdb\xf7Y\"r\x81\x87_\x03,\xddZVT\xf5{\xe3Rr\xb5\"\xc0\x82\xcf\xb2\x99(\xe7?]U\x83\x06U\x04\xb0?\x14n\xf6\x1b\xa2\xdfq\x8f\xb8j\x05R1-\xc8'\x84a.\x8c\xfb\x1c\x86aw:\xd6]\xbfZe\x9e5\xb3zj-\xe8\xbe\xa3\xca\xcc\xa7\x13\x0ds.\x93\xa1\xee\xbc\xd1c\x95y\xd3\xd5C\xf8p\x9d}\x85\x9c\xf29X-z\xbc'\x1d\xa9X\xbbY\x82\n\xd8\x8e\x88\xcf\xfd\x1e\xee\xc2\x9b\xe4\x86-P\xd5zu\x91\x9c.B\xaaJ\xdb\x0dBT\xa4xZ\x08\x9e\xcc\xdaF@2\xa4u\xb3\xdd\xbaY\xe0\x1d\xec\x93\x9d\x0b\xa6i%U\xdc_\x18\xfdO\xc1\xe0\xe4\x8a!\x93\xb1\x1f_\xc8\x1d\x0e\xcdW\x1d\x19\x04\x01Cv\x88\xcc%\x0c\xea|\xaa#e\xb8\x95fJE\x97\x0eYX\xd2\x9buJK\xfaF\x97\xf4N\xebla\xda\xbb\xd7\xd9+\xdf,\xf8\xba\xed\xc2\xbb\xf5\x06 \xa6\x15\xc8\xed\"\xce\xec\x16\xd6B?\xfbZh\xdd\xe3^3\x91\xed\xbd\x8a\xc4\xfa\xf6\x8a\xf5\xe6G\xea\xe6\x8ec,\xad \xed\xa4\xb7\x8a\x90\x98\xdbr\x9enu;\xcc\xe4\xdf\xe6P\\h\xdd:\x16WWOCG\xd3y\xb6\x95p\xb7\xce\x0c\xe0\xb5_\x91\n\xc7\x12\xfd\xd9=v\xd2\x9e\xa6p\xbdZ\xa2\x85Q\xff\xdf\xff\xf3\xffZ\xc6c\x8b\xe1\x0b8\xa9\x16\xbe\x12)i\x8dH\xc7}6*-+8@\xc7\x98\x0b\xd9\x81\x9d\xb4!\x1e0\xe5\xb1Y\xa4\xc2\xb5d\xcd!\x0ez\xb4?\xdd\x9e\x85l\xca\\\x14\xe3\xb4\x94\xc9\xc2\x85\xdd\x89H\xc5\x84\x034\x91\x0esm\xd0\xb3?\xf8\xe4\x7f\xd7\xd5U|\xabk\x86\xf24\xc5\xc8^iDq\xcf\xe0\xe5?\x05W\x13\xc1\x8e^\xb1\xaa_\x94\x1e^\x08V\x93\x84\x87\xe5\x92E\xa5\xf0\xde\x88\xe2H\x83\\C\x9e\xe3\xdb\xea\x95\x93\xd0\xdf\xf3@\xfd\xbe\x94\x050M\xa7C7\xec\x8a}\xc3K''T\xe5.\x97_\x84\x08'\xef\xfc\xf764\x19\xfb[]\xdb\xd0\xa7\xfa\xe1\x9b\xa9v\xaazJUO\xbf\x8c\xaa\xa7\x8eG\xa0P\x9dRY@\xe3\xbfv<\xdf=8\xe3\xa9Pv\x88[\x16\xb1\xa8\xeb\xd6)2\xf9\xb66\xf9\xe6\xe7\x9a\xce+\xd2yE:\xafH\xe7\x15\xe9\xbc\"\x9dW\xa4\xf3\x8at^\x91\xce+\xd2yE:\xafH\xe7\x15\xe9\xbc\"\x9dW\xbc\xaa\xf3\x8a\xdd9*\x0b\xb0\xff\x8e\xd9*\xebsSV\xc4$J\x15`(5\xd9&,\xb1u\xf8\xe0}\xe3C\x14AX\x0f\xd5S\x04\x81\"\x08\x14A\xa0\x08\x02E\x10v\x81\xc7)\x82\xb0\x96E\x14A\xa0\x08\x02E\x10(\x82@\x11\x04\x8a P\x04\x81\"\x08\x14A\xa0\x08BE?E\x10(\x82@\x11\x04\x8a 4\xc8\xa1\x08\xc2%\xe6\xe4K\x8c \xa4\xe9\x90\x1b#,\xb8\xcb+O+\x14b\"\x8d\x15\x85H\x9ag\x11\xf0\xe5\xc5\xb3\x08O\xd3\xf4)\xf6\xbb\xa70A=*\xbb\x13t\xb0\x02@r=/T\xcc\x82\xd1b\xb5,\x958\xdf\x08\xee6\x12\xde\xe0\x16\x0b\x93\xd6\xb0*\x95\xb3\xacJ\x01\x81's.\x8d\xe8\xb0\xf4\xb1\xd3\xc6\xa5\xb8\xba\xa5\x8c\xa4b\x937'G\xf5=\xb9^s4\xae\x17\x88T\xac\x0b|\x0e\x8a\xab@\x12+\x1d\xe3\xf4\"8DM\xfaA\xb5\x84\x16ouV\xd3P\xdb\x1f\xcc\xa9J\x01&\xf93^T\x82\xfb\x08\xee#\xb8\x8f\xe0\xbe\x0d\xe7\xe4\xb2p\xdf\x92;\x1a*Hhp*f\x0b\x06\x91\x07s\xb8_YX\xe6\x1aA\x8b&*0\xa8\x90\x1f0x'\xce\xb3\xab\xee<[\x8d\xeb\x0c\xd8k\xa7v\x9cg\xa3\xc7\xce\x1eu\x0e\x8d.\xd8\xa9s\xafj\x97\xcf\x08;\x08\x89u\xd0s+\xb3n\xccS\xb3\xd9U\x12\xbe\x8ep\xbf\x8b\x01\xf8\xf1\x05\x1ex\x9a0\xdf\xab\xccD!\xe3@g\xb8\x89\xd0Q\x88&\xeaT(\xe6\x99V\xaa\xca\xdc\x1eD\xea\x18zH\x851\xf5\xe8\xd1\x16.\x8d\xe3\xd2\xa9X\xc5\n\xef\xfcF\xea\nYQ]\xac\xd0\xc9\x8cTfr\x91\x17\xf0+k]\x89\xb6\x08\xa9\xa1\xd3\xd3\x94\x15T\xc6\xee)\x08\xc1\x00TA*\xc6\xd6\x1b\xfc\xd2\xe2\xaa\x0d{\x1b8`(r\xd8\x99\xe3\xc4h\xc6\x04\x8f\xa7\x8c\xe7\xf9\x0d\x8c\xbf\x01\xff-p\xa1\xf1\x8c\xd5'\xbamQ\n\xe6\xfe\x08 \x84\x15P\x10\xc6\x0e\x99u(\xd2R\xc5i\x99\x88Hq\x16\x87+\xe5\xbax\nPS\xc3o\x83\x1b\x11**\x1do\xdf\x1f\x9bA\xa4\xe6H\x82\xad\xbc\x10\xc6\xe3n \x96\xb5\x1c;Q\x1d0\x94H9Q\xbahHn\xa4pD;\xb08\\b\xbb\x84\xa3\x85p\x0e\xee\xa2\xd3\xe5\x7f\x9f\xe7\xa4l`\xb4\x85X\"T\xae\xa7p\xefa\x91\x88\x02\xfdM\xa9bq\xc8bm2m\x1e\x9a\xe4\x94};\xf8\xd3w\x97\x19\xcf\x8e\x99\xb9\xf5\xcf\xc3\xfa\x94\xf8\xeap\x89\xed\xb8j0\x13\xa9Nf\x8d(J:\x0b5\xc4#\xd5D\x96\xabC\xcd\xc8 \xa5\xadX\x0c\xad\xbcs\xbd\xd7\xf9\x9e\xcf\x1b\x84\xed)\xba\x82w\x9f\xcfq\xc8.\xc4/\x08g&\x9c\x99pf\xc2\x99 g&\x9c\x99pf\xc2\x99 g^O&\xe1\xcc\x843\x13\xceL83\xe1\xcc\x843o8'\x97\xc5\x99\xb7\x06J\xe08nV\xa6V\xe6\xa9\x14\xc5Zx\xc4\xc3!um9V\xbf\x8c\xe6\xa3\xd7\x12\x005\x17\"vMD\xae\xe3iG\x9e\xa9\xfb\xf8\xcf\xf5\xb7\xf7\x84\x80\xe0\x90\x86\x8drym~\xac~\x1b\xc66D\xccp\xa5-Z_\xb4\xbd\xacLgH\x9b\\8\xec\x0bo\xf4\x03\xd6\xfd\xea\xa4>\xf2\xdc<\x02\x0dPG\x17\xe5\x15\x8c3o\xaf:m\xfb3\x8c\xfe\xe1\x8bj\xf4\x0f\xeb\x19ao\xa00,\xeay7N\xe6\x14\xf3X\x14&,\x17/\x0e\xe7\xba\xb0Sv.\"e\x0b\xc1\xad\xd3\xd5\xafN|\x9dPn\x9c\x0b&\xd5\xc4\x97\xea\xc4\xbb\xfb|w\x03\xf6\xe2L(\x7fa$87\xee\xff\xdcL&\xce\x91\xaa\xf1g\xbf\xbd\xbd\x93\x99xx.\x9c\xcb \x92\x87\xfcL\x14|\"\x1e\"\x15\x0fG<\x06\xbfi\x1c\xfc\x0ceeQ\xd7\xe6\x04{\xd6\x7f\xf7\xe1\xa3\x01\xbb\x0f\xde\xddh\x06\xf5$\xc1\xc1\x99r\x0b\x16\xb0\xdb\x1e\x9bc\xe6m\xef\x92\xe5\x85\xd4E\xa4\xe0\xb1a\x858\xe7Eb\x1e\x04\xff\x1f^U\xfa\xbc_\x0d\xc8\xb9V@\xfd\xafOO\xe0\xfeK\xa9\x8c\x15\x1c7h\x93k\xeb<3\xe9<`l7\xd2\xa5Jx1\x1b\xb0\x97\xba`\x89t^\x02D,\x00\x99p{!\x9c\xcf\xaf\x8c\xf5\xd2\x96\xceE\x95\x96\xc5\x18\xa8@\xcfq@\xc8\x1d!w\x84\xdc\x11rG\xc8\x1d!w\x84\xdc\x11rG\xc8\x1d!w\x81~B\xee\x08\xb9#\xe4\x8e\x90\xbb\x069\x84\xdc]bN.\x8b\xdc-\xabo\xa8t\xb6}\xf2T\x85\xf8\xec\x92;\xd5\xaa\xd0\xb7\x14\x0c\xec\xacH\xd7\xaf\xaa\xf6\xc91\x93\xf6^\xa3J\x1f6\x9a\xab\xd2\xb7\x04\x13t\xce\xc7\xbe\xd0\xc0\xb9\x02\x85s\xf6\xe9\xad\xaa!\xb8\xb4\x82\xe0v\x95\x14#\xd5.\xa5\xd8gi\xee\xb1;\xa7\xbcY\xaeu\n\xfeX\xdc t\xbe\x01AM\x045\x11\xd4DP\x13AM\x045\x11\xd4DP\x13AM\x045\x05\xfa j\"\xa8\x89\xa0&\x82\x9a\x1a\xe4\x10\xd4t\x899\xf9b\xa0\xa6X+\x05p@gi\xc3\x83O\xfeV\xe6\xcf+\x81\xa8\xae\xa2\x86\xac\xea\x19\xac\xf6&\xea\x81g\xf7\xf0^\xde\x91\xf3\xa6\x17 \xa8\xa3\xf0nG\x11\xc4\xbd\xa1R\xfe\xf3k\x1b\xde\x82R\x87\x84\x03\x11\x0eD8\x10\xe1@\x84\x03\x11\x0eD8\x10\xe1@\x84\x03mB&\xe1@\x84\x03\x11\x0eD8\x10\xe1@\x84\x03m8'\xd7\x83\x03y\xd0e\xc7\x8bT\xbbJ|\xed\x80\x0c ce\xc6\xad\xe8\xae\xe24\xc4\xf2L\xc3\xd1l\x08V\x19\\\x00[!\x1f+\xcf/\xd6\x85\x9dxm)\xe2\x1d\x9a\xbe\xff\n3\nO\xabO8\x8d\x83\x07\xbaR>\x12\xce1pN\x88\xa7\xb4\xcfF\"\xe6AW\x9es\xa8\xab\x16\xf34.SH\xc2i|\x13\xb5`x\xa6\x13\\;\x81G\xbe6\xbc_\xa5PB\x1d\x8e\xfb\x8d\x9b\xa9W5\x93\x16\xcf\xfd\xd5\x10\x16v\xb8/\xa4\xaa\x1ei\xfbS\xf8{\x05\x18Y\xd8]\xc2p\x82\xce\xcbtR\xa6@\xc0\xea\x8fdR\xc9\xac\xcc\x86\x854\xa7\xc31\x8fm\x17\xd62o\xe4v\xbc\xc4\xaa\x0bM\xe3\xd2:\xdf\xe7\xf5\xdb\x9f_7k\xb3\xa1\xca\xd6c\x96\xe6\x88p9w\xb4\x88\xd4\\>\x1c\x14\xe7\xf2[\xdf!\xfb\xfe\xffF\\\xc0\x7f\x90\xb9\x0f2\xff\xc1s]\x9c\x1a\xa8\xcb\x05\xf9h\xa2x8\xe2)W1nk>\xb7.`\xac\xe0\x8bIu\xcf0q\x91kS\xe2E\x02g\xbc\x90\xba4x\xfc0Rg:\xe5`\xebJa\xfa^3\x9d \xf0*\x03mn\x80\xf7\na\xa4\xb1\\\xd9{\xd0Ixk\x86\xfe@8\x08\xe9\xa5\x11\xd5Nc\x82BI\xb0\xc6\xc0q\xb2\xe8\xdc\"\x81l\x04\xb2\x11\xc8F \x1b\x81l\x04\xb2\x11\xc8F \x1b\x81l\x81~\x02\xd9\x08d#\x90\x8d@\xb6\x069\x04\xb2]bN.\x0b\xb2m\x8bZ\xad\xca\x1d\xeb\xc4\xb2\x9a\x89b\x90\xa2\xd4\xc4\x0b\xeal\xac\x00&\xf8_t\xd1\xafs\xc4\xfa\x98<\x14)[\xc8<\x15\x8b9[]\x97\xff=\xcd\xf6z\xb6p>gjK\x90\x80\xb2\xb1\x08(\xb2\x04\x14\x11PD@\x11\x01E\x04\x14\x11PD@\x11\x01E\x04\x14\x11P\x84\x7f\x13PD@\x11\x01E\x04\x14m1'\x97\x05\x8a\x96\x15\xb8\xf2p\xcd\x95fc}19^\x9dh\x999\xf8\xb4\xc0\xb6\xd5\xe5\xb8\xc0w\x9c6\x0f/63\xc0\xb44h?\xc1U\x80\xcd\x13\x98\xfe#\xab2\xc3j\xc0\xcc<\x9b=\x0fo\xec\x0b6\xebF\x17\x0b\xb81\xf1\x12H\xca\xa2\x94v\x016\x8bR\xd7\x0d\xebt\xa0\x9e\xeb>\xffU\x80y\xfd^\xe3\xbaOL[#\x16\xcd\xe1\x9d\xf34w-D\x7fA\xa8\xfb\xb8\xdb\xa1\xcb\xd8{\xcfVW\xf7\x0f4\xd6\x7f\xa4\x1a\x9a\xc5[3\xa1b\x9f7\xab\x8cu\xafd<\x9eJ\xe5\xd1\xaf\xd2\x88\x82\x8d\x0b)T\x92\"b\xe2s\xfe\xe8P\xf1n\xd3\x8a\x8c\xa3\x05\xb0\x8eS\x84\xf7\x13\xdeOx?\xe1\xfd\x84\xf7\x13\xdeOx?\xe1\xfd\x84\xf7oB&\xe1\xfd\x84\xf7\x13\xdeOx?\xe1\xfd\x84\xf7o8'7\x8c\xf7oY\xd2\xf0\n\xd1\xf4m+\x16\x060\xbd\x05\xa1\x1bY\xe3g+k\x18j%\"U}nS`\xfdvT\x0c$t\xfd\x0e#g\x84\xae\xafe\xd1-G\xd7 \xfb$\xec\x93\xb0O\xc2> \xfb$\xec\xb3\xc3v'\xec\xd3\x12\xf6I\xd8'a\x9f\x84}\x12\xf6I\xd8'a\x9f\x84}\xee:'\xd7\x83}~\x89Y\xc9\xa5\x9aCR+0o\xe7$\xe5\xbaK5\xb9\xba<\xe5\xf7MB)S\x99\xb0\xd4\xcb\x00\x85\x84\xa5\xaee\xd1-\xc7RC\xc2m\xa5l(Wy\xf3\x8953e\xa7\xc2\xcax\x98\xea\xf8\xf4\x12,s\xdc/\xd2\x99T\x93a\xb8\xe1l\x15\x8e\xe0//\x9bg\xda\xfb\xaa\x17\xf6J\xc7\xa7\xec\xf8\xb9\x1bu\xd8J\xfc\x13\xc7\xb73\x01W\xcc\xdf3L\x86\x821\xd2\xb0j4\x91rO\xcb|\xc0\x9e\xd6?\xe2\xa5\xf4?\xbf\x7f\xfb\x0e!,\xae\x9a\xbd\xba\x87\xa0\x0f\xa0\xfdp\x89\x08,,\x05\xd7\x18\"y\x81\xd0\xfas\x182\x04[\x0b\x96E\xac\xb3Q\x98t=\x8e\xd4\x84g\x193S^\x08\xf6G6\xd2xS\x99\x13\xfb\xd2\xb0?\xd6%o\x98W\xec\xa8\xacT2\xb42[\x0d\xd2$\xdc\x8a\x87\xd0\xaa\xae\xdc[\x01Q\xa5\xaa>\xd5bL\x99\x1b\xf4?x\x0c\xec\xedx\xeax\x0c\x11\xcf\x12\xecN#\x10\xbfU\x00\x8az\xd8\x04!$\xb7\x1a\xbc\xc9\xb5\x9e\x87\xc18\x0b\x1c\x0co\x06\xe3\xa0=\x7f\x80\xec9\xb9\x8e\x14\xe2\xc9\xce\x9a@\x84\xbd\x1e\x9a\xb3\x81\x8d\xe5\x85\x15I\xa7\x02\x0b]\x82\x90I\xc3\xe2B\xa0\x91r&\x0b[\xf2\xd4\x8f\x99\x9dOE!\x98\x12\xe7~2]\xd3\xb9Y\xd4\x85\x9cH\xe7\xe3`\x0b\xb7\x9ak\x8aM9\x1e\xcb\x8b\x01{\x8a\x94\xba9q\x84\xce\xf3\xd6\x7f_;\xa7Ia)$4\xd4y\x1c\x97Y\x99z\xd0\xce\xea\x02\x18\xcfS\xa3\xd9H8z\xcb<\xc1\x1b\xec\x14 \xb5\xceh\x94\xa2`F&\xa2\x0f1\x85\x19 \xdf`L\x02f]\x08\x91\xc2_\x8dUT\xe6\x14\x93ZM\xa1\xa5\x98\x14\xc5\xa4(&E1)\x8aIQL\x8abR\x14\x93\xa2\x98\x14\xc5\xa4\xf0o\x8aIQL\x8abR\x14\x93\xdabN\xae'&uu\xf9\xf8{\x8dH\xb5\xcaNH\xad.\x17\x89\x02\x03\xaa2\xe9\x9a\xa0\xf3\xb2\xc8\xd3B\xe0\xe9\x9d#\xa8\x06\xba)\xe0D\x01\xa7\xcb\x80\xee\x14pZ\xcb\xa2[\x1fpj\xad:\\\xd1\x97^vm\xa8|\xf7%:\xcf\xbb\x85W\x02\xcc>\x12\xf1\xf4\xbb\xc7\x0f\x85\x8a\xb5\xdfZ\xe1ieQU\x91\xf8\xcd\x16\xfd\xfcw\x17^\xd9\xec\xbb\xd5k\x18\x8b\x99\xf2Bl\xf01l\xe7\xc5\xbaI?\x00\x0b\xf8\xb0\x10\xb1\x90g\xdd\x01\x81Z\xacj\x13\xc4S\xab\x95\x87+\xfc\x05\x8fS'\xf2\xa3YC\x80\x06\xec\xd82i\"g\xed\xa00k\xd5\xba\xbd\x00\xe0\x17\x00\xdat,\xc1\x8d\xc6\x0e\xddp5\x84\x1dr}\x8e@D\xfbL\x19\xf0\xc0\xdf\x00\xb9\x89p|\x9d\xda\xa1\xa9\x13p1\xba\x8f6\xae\xe9\xb4\x9a5&X\\\xc4\"\xb7>.g\x1b@N\xa4\xc2e\x9bs&\xa3\x17 O\xbfa\x99.\x9cn\x91\x16\xf07gH\xc4\xa9t\x1f\xaa\xac\x01\xaa\xa0u\xa9\xf9\xa5\nZ\x9bq\x8a\"v\x14\xb1\xa3\x88\x1dE\xec(bG\x11;\x8a\xd8Q\xc4\x8e\"v\x9b\x90I\x11;\x8a\xd8Q\xc4\x8e\"v\x14\xb1\xa3\x88\xdd\x86sr\xdb#v;\xc4\xd9J\x95k\x9d\x0e\xcf\xa7\xd2\x8aT\x1a@\x01\x96\x1f\xe8b\xae\x89[\xbbU{g0i\x9d2\x89\x966v\xb7xl\xeb=\xfc\xfek\xf5\x95=\x85\xcc`\xacr\xa3\xe8\xd8\xa2\xb9\xea\x0f+P\x8a4\x01.\x04\xb8\x10\xe0B\x80\x0b\x01.\x04\xb8\x10\xe0B\x80\x0b\x01.\x81~\x02\\\x08p!\xc0\x85\x00\x97\x069\x04\xb8\\bN.\x0b\xb8t\xa1!\xdad\xdaHs\x00\xa9\x1cc\x1e[]\xcc*8\x04R:\xe0:N\xa5\xb3\xcf\x07\xbc\xb4S]H;\x1bf\xc2\xf2\x84[\xde\x89\x8f\xc0\xc9\xff\xa7\xa1\xed\xcf\xbei#md\xf2\xe6\xe4\xc8\x9f\xbeF\xc5\x03\xbab,l<\x95j\x12\xa9%\x1d`rr\xce\x0b+c\xb7\xa81\xe3d\x11]\xe9~}_ K7\xd3\xd6\xbc\x93d\xb2\xb3F@(\\p\xc4\x15\xca\xb7\xb3\x95\xc7\xe8!\xc2K\xe0\xd4T\xb6\xabG\xbaB:ag\x9aX'\xab\x835kX\xd6\xe2>\xf6\x13\x1c`p\x9e\x82\xf9\x1d\xa9\x98\xe7\x1c\\\x1f\xf7\x9ev>h\xc8\x10\xf2r\xe5'\x8c\xbd\x01\xa3^\xe9s\xb7\xa8\xf0\xf4>l<\xce\xb7}\xeaF\x11\xa9\\\x14\x994\x06V\xf8\xa8\x04\x17$O\xb9R\xe8\xe2\xb9\xa1_X\xa1\x12\xfc'nV\xb6,:\xedn\x90\xf6\xeeqV\xa9qA6q\xcb\xf0?b\x02mY\x08_KC,\x95\xccZ\xa01\x01\x89\xd0\xb0-\xd1\xb0\xcd\xfd\xb5\xcf\x9f\xd7\x03\xc8\x8d\xe3\x19W\x05\x1ao\xa3&G\x00\n\x0c\x8dP\xc9p\xaa\xf5i\xa7\x92|\x06\x8d\xde\n\x95\xfcE\xeb\xd3\xa7>\xdfw\x8d\x8e\x8c\xd4DX\xc8\x8d\x05\xc7\xd3\xbfT\x88\x894V\x14\xc1;\x87t\xe21\xa4c\n\xb7\x87j}\xba\xa8$;\xbf\xbf/\x1d\x19k\x93\x9ds\x93\xad8=\xd1\xbd\xac;G\xb1\xdb\xaanwEK\x9a\x96tf\x86\xe3BgC\xa8C\xa3\x8b\x83O\xfe\x8f\xee\xc3U D\xe6e\xa1\xb3#l\xb6n1W\x06\x0f\xe3i\x1a\xa9f\xfa\xac\xaf\xbd\x83n`\xe3<\x16l\xf1\x07\x9e\x8c%\x86O\x93\x84}\xadg\xe4\xde\x06RU\xcd\xd1\x8a]\xbb9\xa07\xe2c)\x8c\xddne\xb7&\x85\xd6\xf5-Z\xd7q%\xa67\xb7\xb2\x81\x12\xd3\xb9\x84O\xe0\xd1\xcau\xeb\xbd\xcd\xfa\x1ce\xf3\x1b,\xd3I\x99\x8a{&R\xf5x\x17\x97\xe9\xbb\xc6+\xf8\xc9}\xad\xd3\x9a\x17\xedO\xe5mFX@\xa9\xc2\x80\x02v\x82\x83u\x04l\xa0\x0c\x86\xa1\x98\xd7p,.u,\xec\xab8\xc3\xd0\xe9\xa5\x1dy\x0e\xbe\x14m\xcbf,\x84\xf7\x89\xe2)/&U\x98\xab\xaa\x9f\x06\xf8\x18S\xe2\xdco2\x18Pu\xafI\xc3\x92\x82\x9f+\xe6\xf69x\xe7g3\x81\xef\x08\xf8\xe4=\x03&\xa4\xf3\xe4\xf0T\x17\x84\x84\"e\x0b\xae\xccX\x14E\xed\x7f\xc5:\xcbJ%\xed\x8ca\xca\x03\x8c\xa15\xf1\x13n\x86\xb1V\xa6\\S\xa8oI\x15\xc4\x16\x0f~\xe2\xe6\x08\xbbj\xb1b\xc2\x0d\x8b\xb5\xb1x\xfc(\x94\xaf\xe3u\xad\xbaA\xa4 \x0c\xee\xfeOy\x07\x12 &\x93\xf3\x8c%N\xbe\x0b\xa1b\xc12\x11O\xb9\x92\xc6\x87\xaf\x848d\x10\xa7:<8\x98H;-G\x00\xcd\x1ci\x93\xfd\xcaM\x86\x9a\xe6aP5\xd2\x98R\x98\x83G\x8f\xaa\x1dfag\xc3u\xdf<\x9a\xd5\xda\xca\x1cs*c\x1e^8\xf0\xca\xc9i$\x94$\xda\xbfnp\xffZ\x99Hd/\xc6B\x98j\x87\x19q#6\xb9g\xafJ\x1f\xe2i\n\x01\xeaP\x1c\x13\xcfTz\x8c^\x16,\xd6\x05\xce[\x82\xc7\"u\xda\xb5\xab\\\xbc\x14\xc2<\xe3F\xec\xf5\x0e\xbd\xf6\xe0\x17\xcc<\x92\xd8\xdb(\xb1\xa8\xa9}:X\xc01V\n/\x98\x04Z\xa7\xc7\xcf\xdb5#\xa0\x9e\x04\x14\x05Uyi\x97\xb8('\xee\xc5d_\x12\x8ad\xafdf+\xb7\x8d\xe4\xf5F\xe4\xf5\x06=\xffe\xcb`,\xc4\x10\x95o\xa7\xec\xbf\x14\xe2\x1d\xaa\xe6\xa2S\x85\xbb5\xd1\xcc\x04E\xc3\xac\xad\xcb#\xd5\xa5\xcc\xd9\xb1e\x89\x16\x98f#U\x9c\x96 \x86`+u\xde\x0f\xa1*n\x98\xb4\x86\xe9s\x15)\xf4L\x84J\xa0\xd8\xef\xc2Z\xab\xe8\xdd\xd7Jk\xf3s71[n\xf1o\xb3\x8e\xe7m\xb0\xc0\x9aV\xa5\x0c\xf0\xed\xea\xc8\x07g1z\n\xc0~7\x83\x90\xda{\xfc\x9c\xe5\\\x16\xc1\x92\xccxq\xda\xf0\x04\x9d5)R9\x91\xe1\x10|i\x04Z\x98\xf6\x02\x04\x82\x1b#\xa0\xba\xc6[/\x84\x83H\x1d[\xc3\xf2B\xe2\x19\xfbL\xa4:\x81\xc4\xadD\x14\xf2\xccY\xd8\xd3B\x97\x93)\xe4\x9d\x81=\xeb+<\x87T\x01O\xd6\xc0\xa7\x13x\"!\xf7\x0e\"4\xbeGn \xc0\xa2\xc7 @@\x87\xa1\x12\xc77\xab\xe4\xb6\xd1F&\xd7v\x08b\x81\xd5\x9e\x96\xd9\x93\xa0\x1f\xde\xe6\xda\x9e\x80\x08\x15\x8d\xebF\\\x17(Y\xc6\xb9\x98\x82\xc7\xd3f\xb4\x00%vU\x14\xb5\xeav_*d\x8bE\xde\xef\xd5\x1c\xeb\x98\xaf\xcfu\xf4\xb4\xc6\x16\xab\xf1\xcd\x03\x8b\x93\"\x8f\x97!\x8b\xa0v\xa1V|\xaem\xa4p\xe5\x06g\xad\x91\x07\x88\x0b\x1e'\x8e\xd6\xd8\x8d\xad\xb1\x0d\x0c\x89\xab+\xda\x16\x03\xd6\x08\x99\x11\xd5\xc2\xf5XI\xb7\x11\xf1\xd4?l\xadSH\x89\xb9\x90\x06\xe1\x8a\xf0\xfa\xfc\xa6\xf5V\xaaX\x1c2\xfc\xe4C\x93\x9c\xb2o\x07\x7f\xfana\xe1>\xad\xdf\xdf\xcb\x92m\x0e\xff\xaa%\x82NM\xd0\xa9 :5A\xa7&\xe8\xd4\x04\x9d\x9a\xa0S\x13tj\x82NM\xb4\xd8N\xa7&\xe8\xd4\x04\x9d\x9a\x80\xff\xe7Mv:5A\xa7&v;5Q\xc3E\xc1\xa1\x05\x93\xb9\xdbU\x07\xd8a\xe2\x13G\x16\xbd\xec\xfa\xd9\\NM\xf5\xb3\xd7\x03M\x0f|\xb5\x8f\xac\xc4\x85\x1d\x9e\x8a\xd9&\xb6Z\x18Hx'\xa4\x1b\xb8?\xbd\xa1\xcd\x8d/\x13}\xc2'\x01\x0c\x1b\xe0\xf3\x10gpo\xb8\x1e\x1c\xd9\x82e\xdaX&\xc0\n\x06\x13\xb9\x17*\x94n\x82\xd5\xd5$\xc1+@\x0f\xfc\xa1\xcal\x846bpA\x1a\x96\xf7\xb8E\x1cp~\x08\xafE\xea\x9c\xc3\xcd\x8b}\x80\xb6\xbd[d\xe0\"K\xc7\xed\x04-\xe8si\xc4\xf2\x8c\x8c\x00\x9bl\x93\x93Q\x819\x8d\xac\x0c0\xdc\xbb\x91\x1a\x02\x01 \xf2!\xc8\x87 \x1f\x82|\x08\xf2!\xc8\x87 \x1f\x82|6!\x93 \x1f\x82|\x08\xf2!\xc8\x87 \x1f\x82|6\x9c\x93\x1d!\x9f5)$5\\38\x15\xb3\x05\x83\xc8\x03+\xdc\xaf,\xcc\xef\x00\x1b\xd9\xe3\x16\xde\x93\xafP\x180x'2$r\x86c\xdd\xcb1\x96\x01{\x1d\xca$\xe8\xb1\xb3G\x9dC\xa3\x0bv\xea\xdc\xab\xda\xe53\x02\x12\xafw\xcbtY\xcc\xac\xe9w1\x00?\xbe\xc0\x03O\x13\xb0A\x95\x99(d\x1c\xe8\x04\xf1\x8b\xb1n\x05\x9a\xa8S\xa1\x98gZ\xa9*s\x1b\xf2!\xddo\xa90\xa6\x1e=\xda\xc2\xa5q\\:\x15\xabX\xe1\x9d\xdfH]!+\xeaD\xd2.f\xa42\x93\x8b\xbc\x80_\x03\x8a\xb4\x0c\xdeB\xa7\xa7)+\x1esr\xdbV\x8e\xa6\xe8\xf1\x98\xa5bl\xbd\xc1/-\xae\xda\xb0\xb7\x81\x03\x86\"\x87\x9d9N\x84d?\x9e\xe770\xfe\x06\x14\xb7\xc0\x85\xc63\xc7\x0b\x90\x04\xcdlQ\n\xc6\x9a\xb7\xd2\x05\xa0 \x8c\xdd5\xf4\"\xed\x13\xa2#\xc5\x19\xdeM\x17\xc0\x919\x9e\x02\xd4\xd4\xf0\xdb\x9c\xaeiC\xac\xef\x8f\xcd Rs$\xc1V^\x08\xe3q7\x10\xcbZ\x8e\x9d\xa8\xfa\xbb\xcc\x98\x9c(]4$7R8\xa2\x1dX<\xd2:\x15\\-\xe3h!\x9c\x83\xbb\xe8t\xf9\xdf\xe79)\x1bxi!\x96\x08\x95\xebI`\xd6\xb9.\x12Q\xacB*/1\x9e\x1d\x12\xe5\x0e>\xad\xbc\xb6\xd4\xa3\xacu\xc6\x9c\xff\xb7\x07\x1dk\xc8\xc2\xf7\xb2\x98\xcb\xea{\xd8sF\xdc\xfa\x86\x96PPBA \x05%\x14\x94PPBA \x05%\x14\x94PPBA\xf1oBA \x05%\x14\x94P\xd0-\xe6dW\x14tUz\xd4\x0e\xd9QT\xb2\x86R\xa0\xc8\xf9'\xe7\x9f\x9c\x7fr\xfe\xc9\xf9'\xe7\x9f\x9c\x7fr\xfe\x17\xe9'\xe7\x9f\x9c\x7fr\xfe\xc9\xf9o\x90C\xce\xff%\xe6dW\xe7\x7fu\nT}%s\xdb^\xe1s\xf7W\xd8\xc6\xf5\x14V\xfb\x12\xdac\xacY\x7f\xa5\xa5\xfc\xba\xd2\n\xb00\xf5pe\x19\x9e\x9f\xa1\xcd\xfab<\xd8Wu\xd0o1\xb5\xa0\xdd\xd1\x9e3\x0c\x08} \xf4\x81\xd0\x07B\x1f\x08} \xf4\x81\xd0\x07B\x1f\x08} \xf4\x81\xd0\x07B\x1f\x08} \xf4\xe1n\xa0\x0f\x9d\xb9\x07m\x1f{\x9b\x14\x8497\x9f2\x11\x08\x0b ,\x80\xb0\x00\xc2\x02\x08\x0b ,\x80\xb0\x00\xc2\x02\x08\x0bX\xa0\x9f\xb0\x00\xc2\x02\x08\x0b ,\xa0A\x0ea\x01\x97\x98\x93\x9d\xb1\x80\x15wfu\x85\xfd\xd7_\xec\xfd\xb1\x14\x05\xdc\xec\x96\xa6l\xd5\x05\xddOK;\xfd\n.\xe6\xce\xf8\xc50\x13\x99\x1eVn\xb3Yiy\xd6\x17m\xd9\x8b\xa1\x91\x93!\xd6=\xd9\xe2\x95\xdf\xc50\xd6\xc6\x0esQ\x0c\xc1\x8e\xdd\xec]\xf7\xad3Q\xc8\xf1\x0c_\x17\xc9\xe3\xef\xbf\x7f\xf4\x1f;\xbemD\x9c?\xfe\xfe\xdfO\x1fm\xf4>]\xe0L\x18\x14aP\x84A\x11\x06E\x18\x14aP\x84A\x11\x06E\x18\x14aP\x84A\x11\x06E\x18\x14aP\x84A\x01\x06\xf5{\x05BM\n\xbe\xec\xc8\xc9\x1b\x7f\xc6$\x95\x06|\x9b\x0fOK;\xd5\x85\xfc\x1d\xbd\xb5>\x83w\xd1\x12w,\xc3\x7f\n\xa7\xb6\xea\x7f\x16\x8bh\xd5O\xf8\xc9=!U\xf5\x80\xedN~>o2a}sK\xb0\x00\xc1\x02\x04\x0b\x10,@\xb0\x00\xc1\x02\x04\x0b\x10,@\xb0\x00\xc1\x02\xf87\xc1\x02\x04\x0b\x10,@\xb0\xc0\x16s\xb2#,\xd0\xef\x89\x8b\\\x16\xf3.\xeb\xa2A\x94p+\x1eZ\x99\x89\x0e\xeb\x05\xdcv6\x91g\xc2\xb0\\\x14\xd9\xff\xcf\xde\xdf\x7f\xb7q#\xf9\xc2\xf8\xbf\x82\xab\xfb=\xd7\xce\x0eM\xc5\xc9d\xf6\xae\xf7\x9b=W\xb6\x94\x8cvlK\x8f%'g\xcf0\x97\x06\xbbA\x12\xab&\xc0i\xa0\xf52y\xfc\xbf?\x07U@7\xfa\x85d7e[\x8e]?\xe4Df\xe3\x1d\x85B\xd5\xa7^ \x8d\x81\x0b\xdfj&nERX\x81j\x9fg`\x9e\xa1\xe1\x01\xaa\xbag\xae\xf5\xf1A\xab\xf5\x9aZm@\xbb(\x81\x07T\xd9K\xb8\xc1-u\x845\x948\xc3\xf07\xad\xb9\x8a\xdf[ \xde\x0f\xf4\xa6\xf5\x83\xbdi\x8d\xd0\xd0\x10'\x95\xa3:\xdd\x90\xb3J/\x10\xcb\x12*E\xa8\x14\xa1R\x84J\x11*E\xa8\x14\xa1R\x84J\x11*E\xa8\x14\xfeM\xa8\x14\xa1R\x84J\x11*5`O\xf6D\xa5v\xa4n\xf5\xb8\xce\xf0\xa7]\x83\x9e\x1c\xbdT\xeb\xe1\xa2\x0f\xd2\xd6\xca,\xa66\xe8\xcfMa\xea\xcc\xab?#\x16\x17\x1b\xe1\x0b\xbc\x00\x8e\x00\x0d \x98\x03\\\xcd\x83[+n\x93\xa5\xa3\x85\x85\xbc\x16\xca\xd5\xf6\x02\xdb\x87\x182=\x04N\x0f\x81\xd3C\xe0\xf4\x108=\x04~\xbf\x87\xc0\x9bn\x93\x87\xfe^9\xfc\xdd\xff\xd1\xfd\x1e\xf8\xcf\xf8\x11\xc1\xed*uw\xe5X _\xea\xde\x95\x95eCl\xf0\xa0\x0c\x0d\xfeQ\x1d)\xc3\xfd\xde\x05p\x87\xfb\xba\xeb\x1b9`\x12\xd4MP7A\xdd\x04u\x13\xd4MP7A\xdd\x04u\x13\xd4MP7A\xdd\x04u\xfb\xef\x04u\x7fvP\xf7\x9e\x0e\x98\xc1A\xaf\x8d\x0f0qk\x85J\xdd\xd6\x80\xae\x8c\xc7d\xa6\xed\x12\x05\"|\xcaL\x94\xb7}\xf0\x97t;\x1a\x1c&\x03\\ b\x9dT *\x18ip\x9aP\x12P\x14\xfcw\xdbc\xd3\x03\xd7\xdb<5\xeb\x81\xa1\xe4\xa1\xf9\xa5xh\x06\xe8i\x88\xa3f\x1d\x04#?\xcd^\x18\x99%\xf0\x8a\xc0+\x02\xaf\x08\xbc\"\xf0\x8a\xc0+\x02\xaf\x08\xbc\"\xf0\x8a\xc0+\xfc\x9b\xc0+\x02\xaf\x08\xbc\"\xf0j\xc0\x9e\xec ^\xf5\xf2\xd3\x14{?\x94On\x8a\xe4\xa6Hn\x8a\xe4\xa6Hn\x8a\xfd\xe6\xb3\xb7\x9bb\x1e\xdc\x14\xf3mn\x8ay\xc3Mqg\xf6\xc78\x05C\xb7\xa3bN\x8e\x8a\xe4\xa8HX/a\xbd\x84\xf5\x12\xd6KX/a\xbd\x96\xb0^\xc2z \xeb%\xac\x97\xb0^\xc2z \xeb\xfd\x8c\xb0\xde\xaf\xd4Q\xb1\xf9d\x059*~!\x8e\x8a\xf9\xbe\x8e\x8a99*\x0e\xc1\xc8,\x81W\x04^\x11xE\xe0\x15\x81W\x04^\x11xE\xe0\x15\x81W\x04^\xe1\xdf\x04^\x11xE\xe0\x15\x81W\x03\xf6dO\xf0\xaa\x97\xa3bN\x8e\x8a\x83\xbd\xd3\xc8Q\xb1\xa7\xa3\x1e9*\x92\xa3\xe2\xc0%\xfeZ\x1d\x15g\\]\x95~\x8a3\x9eq\x95\x08s\xf8\xbb7\x08t{(\x1ee\xd9s_\x12 \xff\x00\x11\xfa\xea \x1fe\x19K\xb4\x93P\xdc\xa6s\xe6\xd8D&\x18O`\xaf\xdb\x1e\x8aQ\x93\x0f\xe5\x9f\x18&\xbf?\xfa\x9a\n\xa5W\x9d\xc0._\xb9iw\xdef\x8d\x89\xbd\xd02\xb2f0\xab\xaf\x84\xf2b!\x83\xf6\xc3\xe9q\xe2\x8a\xd3\xe9\xa1e \x9d\xd7g\x97'\xcf\x00\xbc\xc4\x1f\xbd\xe4(A\xf7?U\xd6K\x1f%\x9cQ\x13AP\"\x9f(#\x17\x8a\xdb\"\x17\x86\x05\"\x03\xd7R\xbd\xd0 \x11t\xbc\x19\x16\x16.\xb0\xd6\xf2\xdf\x9e\x0e\x10\x9d\x94\xca\xecc\xd0\xb1\xa0\xb1\xc4<\xc3\x92A\xe7!\x0d:\xd1I\x1db\xce\x89y\xc6\x9b\xf3\x17A\x05$k\xce^\xd6\x9c\xfex\xe3\xfb\xf7\xbb\xe4q\xcf\xea[W\x9b\xff=ln\xf8\xa7\xd5>mzy\xcc\xe7:\x1f\x934?X\x84#i\xbe\xa74K\xd2\xb0H\xbf\xbb\xe0W\"\xb9wKt~\x93\x86Hs\x81T\xc8-\x87\x04\xb9\x96 \x87\x87\xa99\n\xf85\x8c!\xc1\xb3\xe2~\xd9>\x8c\xfe,\xb2\x1c\xc8 \x0ei\xc4V\x86h\xc41\x0c2\xb0D\xe4z\xaeZ\xfdH\xe3kA\x01\xbd\xf4uY\xcd\xf7\xdfom\xf8\x16\x98|\xb4\xbd\x1dwG5\x99h\x83\xb8k\xabHl\xd3C\x8dcc\x13U\xbb\xab\x0b\xbf\x14~\xb3d\x82\xa2\xfa8\x1epD\xf7M\x8a\x0c\xc3\x8fw\x0f\xc5\x02\x1c\xb9\xe3\x1f\xae)\xb79\xbb\x89\x1e\xae\xf5F\x0f\x91\x98\xf0\xb8\x82\x9d\xdc\x97j\xf6@\x01\xd1\xfe}\x8b\x9b\x94J\xb3\xcex'\xd8\xdd8lX\xb0\x04\x08\xfci+\x16\x0ba\xdc5\x19 2\xe5\x10&\xca\xd7B\xa5\x17y)\x82\xfax\x11\xec\xeat\xa36\\\x02\xef\xee\x98\xc7r@\xcd\x89\x1b\x14\xaa\xc7b\xf1\x8c\xbd\x80\x16\xd8\x91#N\xd7\xbd\xb9[\xcdt\x0f\xa7w,W\x81F\xaeA\xff[p\xc76K}\xa3\x18\x04\xcc\x04\x9fY\xe8\xf2\xe8\xf2\xec\xd57\xde\xa9=\xe1\n\xe0/X2\xf0O\xc2\x06\xfd\xf2l\xd3\xfc\xdb\x14]\xdeS\xbb z\xa2x\x8bb\xeb\x8d\x95\x17[\xe9d\x19\xddzR!\xf3\x0b\x911\xc16\x13]~\xd0.\xd9i\xbe\x04;M]F\x19\xa2\xdc7\xe4'\xb2\xd6\xf4\x13s>\x8d\xacMV\x12\xb2\x92\x90\x95\x84\xac$d%\xf9@V\x92\x06\xa2p\xf8;\xfc\xd0\xed\xf84\x00Y\x00\x83I\xa5\x11\xd4\x10\x85\x0d\x80\xc2\xe7\x82'\xec.I\xb0\x01\xc1\x06\x04\x1b\x10l@\xb0\xc1\x1f\x136\xd8\xa21\xee\xad0\x92\xbe8\xf0~\xfb4\xfa\"r\xc4\xeeKs\x8b1\xd6\xfd\x1e[I\xf6\xb7\x0b\x0f\x10\xc5`\x06\xb06-\xc9\xeb\x1c>\xd5$\xaej\xbe\xee\xa8\xdfBSl\xa5\xd3\"\xebx\xaa\xff9WW\xd8\xc6CIW\xd5\xe4\xb6\x973B\xa5S\xa1\x9c\xf2\x90\xeeO\\\x1b\x84''\xe6\xb4\x9a\x8e\xd4\x80&\xe7\x15*=\xc1\xf2h\x8c\xae\x93\ng\xf1`\x99\xb1\xdc\x16\x86=\xbeY\n0{\x07\x83\xb64\x13\xe5\n\xbaR\xdf\x04\xee\x03\x0ca\xbaa\xb2\x9bG\xe4\xe9\xa0\x8e:\x96t\x10\xd8R\x8d\x146p;l\xa9\xa7\xf5\xb9\xc4F<\x99U}\x12\x8b\xfb\x84,\xae/#1\xc5z\x9d\xddu2\x92K\xa7q_\xc0\xf7\x1a7AM\x1c+\xb28\x80\xa5\xcdK\xa2&\x1e\x8a\x99T\x13\xdcoc6\xb3\x87/\xca\xdf\xad\x12\x11\xfd\xc6\xca \xb0\x86m\x0e\xf7\x9f\xf9\xf0&\x8f\xad\xc8\xc6\xf6\xed!c\xc8}\x8c!\xa1{\xe0\x12\xd1a\x1d\"\xd2\xc6l\"\x12h\x89\xd9\x7f:fO\xf6\x0f\xb2\x7f\x0c\xc0\xff\xc9\xfeA\xf6\x8f\x81KL\xf6\x8fRV\xdej\xf6\xc0{\xf0l^\x13\x98#Q9\x0e\x0ci\x8b\xcb\xa1\xf6C\xc9\xca-\x89\xf6\xeb\x96\x89\xbb\xb5\xe1\xb0ICd\xa4\x92,\xc8\x19\xfb3\x12\x90\xf6\x04\xfc>L\x10\xc8`\xbe3u\x87C\x17v\xeae\x99\x1d*\xfb\xafX\xfa\x0co\x86\xfb\xeb\xef\xb5\xf6\x1e\x8aA\x912\xdf\x8bq\x912O\xca\xfc\x86\x93;\xe4\xd6\xda\xc8MH\xcd\xef\xc5m>\xcd-Fj>\xa9\xf9\xa4\xe6\x93\x9aOj\xfe\x07U\xf3\x1b\xe2\xf6'\xd0\xfa?\x0b \x9b \x80\x01\x10\xc0\xde\x92Ug\x03\x04\x0e|Nb\xd5g\x0d\x0e\x18qh\x85JE\xbe\x92\xcaV9\x1a2\x9d\\\x99\xc3\x8c[a\xba\xf1\x81\x9f\x85} _\x9f\xbb\xa2\xe5\x8b\xd9\x16\xd2\x85\xbb\xdf\x19\xb4\xd1\xe6Q\xf5\x8a\x0f\xc5\x9c`pS\x99\xee.\xb9\xe4f\xd9\x83\n`\xf3\xed\xd4\x08;]\n\x9e\xd6\x9e\xcc\xdeD}\x0d}p\xa3\xe3\xf3\xfbQ\xdfQD\xba\xdb9\xcf\xad\x11\xf6\xaf8\x98\xf8\x0b,\xfc\xe9\xb1k\x16\x96a\xf7H\xfb\xce\xc8\xbfl\x02\x05}g\xe8\x03 \xfd@,\xe4N\xcd\xbd9\xa4\xcd\xb2\xda\xe8\x80\xaf\xd7\xbdJv\xdc\x17\xca\x08e\n\xc3\x12\xbeF\xbe\x8d\xc70\xfc\x9c\x17\x99\xf7s^\xe7\xda\x91\x1ef\x16\x0f\xf3\x80\xd2\xf0\x8fd\xc9\xa5\x1aM\x14\xcap\xe8$\x9dE\x9f\x188\xf3\xa1\x8b(\xf4\x13\xb2\xf2c\x0f\xe1y\x91\xea\xa9\x9bGf\xa2\x8c\x05\x891\xe7\xca`j\xf2\x15O\x96R \x00d\xa0\xd9:\xe9VLk)\xe4b\xd9qev\xd1\x14\xbc`\xb7\xadd\xf4\xce\xdd\x08r\xbeO\xe9\xd8\x1c\x97k\x91\xe8\xd5J\xdai\xbf.\xaaf\\y\xdcx$&\x08\xfep\x04\xca-\xef\xd9\x18^N2\xe5V\xe7\xa6g\x9d\xd6\x00\xe698\x8d\x03\xed1]\xd8ua\xab\xdf\xd6\xb9\xb8\xc6\xf1\xb9\xce@\xa1\x1f\xdc#\xdc\xf3\xfe<\xf5\xaf\xc2\xd7\xeb\xfe\x85a\x1f\xbcb\xd0\xbf\x96\xb8\x96\xa9P\x89\xe8Y\xa3Z\xb9\x8a=\x00'{\x8f\x94\xa9\x8d\xc8\xa7!\x0d\xd4\xce\xd6\xda\xbc\x08I\xad\x86\x89\x96\xec\x02e\xfe\xcb\xf2\x82\xf64\x83Ge\x1c\xc8\xa6\xc7\x99\xb9\xed#%m^\xb2\xfa\x88/o\x0d\xaa\xb3\xe1 \x06`_(\xf2\"\xeb\xfa?\xfe\xf6\xff+\xb0\xa3?=\x1d\x079\x1b^i\xcb2fo\x0d[\x8a\\\x80:\x07\xa45f\xecW\xf1(\x17\xec\xbf\x0bc\x19_\xe4B\x80&\xe7\x1f\xb0\x82\xc0\x1cx\x97bA\"lz\xa1\xe4?\n\x91\xdd1G V\xce\xcbxJo\xafB_\x84\\\xf2L\xfeS\xa4\x13\x05>\xc4\x89\xce\xd8\xac\x98\xcfE\x1e\x0cY>\xc5!\xf6\x0e\xc9M\x03\xa51nY&\xb8\xb1\x13\xa5\x95`\x93\x83\xc3\xc9\x01K\x96<\xe7\x89\x15\xf9\x18\xdc\x9d\xdd%\xc2\x8cX\xacD\x15q\xf0\xf6\xcd\xcbG\x86\xad\xb9]bs\xa5\x1d\x02\xdf\xd2\x9a\x17\x19dp\xe2\x99\x1bsZO\xf9\xe8\xc6\xfe\x98\x1b&\xd5D\xbdsM\x1c.\xb4^db\x0c\xa3\x9f\x15\xf3\xf1q\x81~\xa0\xef\xbe\xc1\x11@\xf5*\xac\x07\x0eS\xc2\x95V2\xe1\x99\xa3\xd5\x90Du\xe4&\x03\x88\xef\xe4`<9p\xb4\x0d\x8e$I\"\xd6V\xa4\xdf\x80\x01\xefT\xb1\xb5\x9b\x9fL\xc4\x88Y\xc1W\xa6L\x14\x89\x86\x93\xb5\xcc\\'\xe1m/\xa9x~\x87\xce(wka\xca\x00\x8d\xbb\x89\xa7l&!\x00\xc1I9\x95\xc5\xd0\x8a[X\xad#u7f\x7f\xd57\xe2Z\xe4#8Wo\xdf\xbc\x0c\\\xb0\xc0\xfc\xb2\x13\x05T/\xd8\xbb\xa5\xb5\xebw#\xfc\xbfy\x07\xe6\x1b\xa5\x19~\xad\xd2\xc0j \x1cLm),+\xd6\xde\x849QF\xe4\xd7\"\x8f\x1f(s\xab\x0d=:q\xc1\xdb5A\\\x93\xe8\xb6\xc2\x1d\xcb\xcd2}c\x9e\xb9\xc5\xf9\x17v:\xaf\xbat\x0b\xe8\x1f\xabH\xcbQ\x01\xaf3\xa6X\x89t\xec*\x1c)\xf6\xd7\xcb\xcbs\xf6\xf3\xc9e\xf0\xc2y\xfb\xe6%\xd2\xc5\x1d\xf8\xc8s\xf6\xf7\xe6\x16_\xde\xad\xc5o\x7f\xffm\xa2X\x883Ta\xa5\xf1\x98\xc2\xdc\xd7\xb9N\x8bD0\xae\x90w`\x7f\x150\x8fQ\x1e\xdc\x0d\x1f\xc3.\x13\x9e8\x8a\xd5\xfa\xaaX\x97\x91 3nD\xea\x87\xe6:|\xfb\xe6%\xb4\xbe\xe4\xd7\xb0\xfc\xabh\xdfS\xdcx\x1e\x06\xe3\xfe\xbe\xd62e\\\xdd\xb9\xba\xd84\x90e.\xe6:\x17\xa3P\xd25\xc0\xad\x9c\xc9L\xda;\xa6\x84HCP\x13\x1c\x8d\xfc\xda\x1dP\xe6\x86\x11r\x90:\x02s\x145f\x8f\xdf\x1a\xc1\xbc\xa5\xc6M\xc4m\x9a#z\xdc5\xae\xf8\x02\x06>\xcb\x05\xbfr\xd4\xed[\x18\x7f\x03\x81 \xda\x8ag\xcc\xba\x13>/T\x82\xa4\xe1\xc6\xe0\xa9?)\xf2\x1c\xa2\xe6\xe2 P\xef-\x05Ae<\xf3\x9ccV\xccY.\x1c?\x10#0\x8a`\xd8\x96k\x04\x02\xd5\xe0V( \nB\xf6\x94\x1b\x0ef\x1ev_\xc6\xb8\xcf|-\xcd8\xd1+\x8c\xac\x01R2\x18<\x8a\xd1k\x0d:g\x8f\xfdu\x83\x81]H{\xdf\xb0\x15\xc8\xb431Q\x18&\xe74\x882\xbc\x02\xc34\xccZ$r.\x13f\xc4\xcaid\x89wd\xe8\xe7\x92\xdf\xe4\xc3\xaf\x1c\xc9\xceD0\x14F\xac\x9559k0\x12\xcd\xf4\xb5\x08\xa3\xf0;\xd7\x15\xc3\xf1\xeeH\xdd\xbd\xab\xaew\xae\x18\xcfg\xd2\xe6\x8ep\xb6\xf4\x12\x0e,\xcf\xb4_f\xc6'\xca\x9d\xaeFV\xe4\xcd\x97By\x07\xb8\xad8\x0f\xbb\x9c\xc9\x19\xf4]\xbeDc\x8a\xf5Z\xe7\xc0\xc7\xd6<\xb9:,\x94\xfb\x9f\xe3^x>M \x19\xe4\xb6z\xce\n\x8b\x94\x1eh\xce\xc0{\x89i*\x91\x00\xd9B(\x91s\x0b#p\xb2BiXsm\xc2:\xb9\x11\x9d\xdcr\xb7\xa3\xec\xe93v\xee:tT\xe7\xfb\xe6\xb1\x1f\xc6\x8b?\xfd \xbd/\x18c?i\xcd\xe6Z\xb3\x1f\xd9x<\xfew\xfc\xcd5\xca\xd5\x9d\xff\x17Wwc\xd7\xdcO\xb9^=\x9ek\xfd\x8d\xff}<\x1e\xe3\x1fr\xce\x1e\xbbBo\xa1\xabK\xfd\xf8\x7f\xb9R\xdf\xb0\xdf\xf1sT\xf2}<\xca\xefv\x8c\xf2?\xf95\xef3L\xf6#\xdc\x0b\xae\x81\xad\xc3\x93\xe6\xf1OZ\x8f\x93\x8c\x1b\x13\x8f\x0e\x9bu%p\x14Q\xa9\x7f\x8f\x86\xcd\xc2\xb8\xbf\xdf1\xee\xf3;\xbb\xd4\xaa\x1c96\xff\x93\xd6\x8f\xc7c\xc7c\xfc\x92\xe2\xa8\x1f\x7fS_c\x98@{\xfc\xee\xf3)\x0e\xff\xf8\xe4\xe2\xc5\x9b\xd3\xf3\xcb\xb37\xdf<\x0b3\xa8\x16?\xaa\xef[\x88\x06\xfe\xe7\x1d\x03\xffY\x871\xc3\xa0\x9f\xfd\xc8\xfe\xd7z6\xfeI\xeb\xdf\xc7\xe3\xf1{\xff\x85\xab\xbb\x91\xbb?\xdc\xe75r\xdcW<7K\x9e\xb9\xe9D\xdd\x97\xe3o6\x16Z\x92\xf3F;o\xd5\xaaj \xfa\x81\xed\x84R\xff\xe3G\xa6dVmZ\xd4<\xec\xce%$5H\xae\xca\xf3\x11nZ'\xd5\xaf\x9b'\x15]h\xef\xcah\xd7\xc2\x88\x89z\xd4\xc1s\x0f\x9d\xf05\x86\x0f\xee\ny\x14\x12Y\x07\xc6]Z\xbbq=CT\xbd\x0f\xff\xf4\x12IK\x82+\xaf$\xc6\xe7V \xb7\x06\xc1\xf0\xd1\xe1\xa3\x89\xf2\xbc!t\x81r\x8e\xf0{89\x98k=\x9e\xf1\x1cFw{x7\xfe\xe7\xe4\x00\xe7\x83\xe2\x01\x8a.\xd0\xf8\xe4\x00\xbe\x02\x11L\xd4\x7f^\x9c\xbd\x9e\xa8\x1f\x7f\xfc\xf1G\\-\xf7\xefJ\xd4\xc4\x1b@;Rc\xc8_Q\x92(L\x99)vQd<\x9f\xa8v\x15\x8ba\xa0%\x97\x1c1\xb1\x9a\x894\xad\xf8\xe5\xc8\xb3[5Q\x11S\xc3\x98\xbfw\xff\xc7\x0d\xf9\x9d\x17\xe2jJ[X\x82q \xe1g\x81@\xddb;\xaa\xad$\xa1\xb9\xcc\x84?\xae\x81\xa4\xcfEn\xb4\xaah\xc6\x8b\xec\xe0\xcf<\x85\x15\xfa\x91=\xfd\xf7\xc6W@y\xfc\xc7\xefj\xe7\x9f\xb1\xaa\xa9\xc9\x01\x8czr\xf0\x8cM\x0e\xba\xe8\xa6>\xb01\x0eer0\xaa\x1a\x80a\xbc\xe6+h\xe4\xff\x8f\xbd\xffG\xf4\xdd\x0d\xa4\xf99\x1a\xce\xe9\xdc_\xf2\xf5\x95\xc65\x93\x86\xdd\x88,{r\xa5\xf4\x0d\x86_.\xb9\xd3\xa9}\x00%\x92B}#Gx\x0b6v7\xf8\x9a\x97\xdd\xb8\xed\x03O\x11\xd8\xbc\x89z\x07d\x12vo\xa9\xb3\xb4\x16\xaa D\xe6T\x0c\xbf\xeb\xcc\xeb\x01~\xd3'\n\x9a)\xf7\x97=v\xb4\x1e\xa6\xd2\x92s\x83*\xf3\xdb\xdf\x7f\xfb\xe6\xd9}\xf6\xa4\xde\\m[`>\xd8\xc6\xd3\xf1wO\xbf3\x93\x03\xbf\xea\x07U\xc8a\x08\xee\xbb\x10\xf9\xb5L\xc4\xa0\xf0\xbe\xdf\x11\x1a\xec\x8eD\xfeY ,\xf0\xfc\x0e\x9d\xf8\xcb\x88d\xc4+\xdc\xea\xe0#\n\xd8Hg\xa0_\xad\x01\n\xf5\xdb\x05^|T\x9c\xb2\xa7\xbbZ\xdf\x19\x91\xff\x19\xf9\x9f}\x0d\xc7\x86\xfc\xcfz\xf4H\xfeg\xfd\xec\n\xf7\xf3?\xa3P?\n\xf5\xdbR\x91B\xfd(\xca\xe7\x8b\xbaz\xf7\xb0\xfa\xeeg^\xfe\x82\xa2|(\xd4\x8f\x98\x001\x81\xaf\x9c \xec\xeb G\xa1~\x11\xedS\xa8\xdf\xae\x92\x04\xb5l:\x0f}\x8f\x02A-\x04\xb5\x0c\xec\x91\xa0\x96~w\xeb\xfd\xa0\x16\xf2\xad\xfe,8\x02\xf9V\x93o\xf5\xa7\xf4\xad\xa6P\xbf]\xa5\xff\xf8aBk\n\xf5\xfb\x0c7f_\xa5\x95B\xfd\xbe:R\xd9\x9bV\xf6\xb8\xeb(\xd4\x8f\xc4Q\x12GI\x1c}\x18q\xb4+\xd4\xaf\xe6R70\xd8\xaf\xee\xcfG\xe1~\xbd\x0e\xac\xa5p?\n\xf7\xa3p?\n\xf7\xa3p?\n\xf7\xa3p?\n\xf7\xa3p?\n\xf7\xc3\xbf)\xdc\x8f\xc2\xfd(\xdc\x8f\xc2\xfd\x06\xec\xc9}\xc3\xfd\xba_\x18\\\x86\x00\xbb}\xde\x08\xec\xc0X\x7f\xdb3\xaeP\xe9TL\xc1\x8a\xbf!\xa2\xf0\xb5N\xc5\xa9\x9a\xeb\xda\xf3\xa6^\xb2e\xae6\xf8\x00t\xc6\x12\x86\xaa\x0f\x15F\xe89\xf6\xb46\xc7\xedU\x82\x1c8\x8d=\xb8\xb6\xd7\xf8\xae\x9f\xebU;\x9co[\xd9\xde\x0e]\x15\x06\xe4\xa7\xd9\xed\x0e\x95Ic\x85\x02X\xaf\xf3\xbb\x12\xf6F\xe7\x1d\xa3s2}k)\"\xc8g\xc9\x95\x12Y?\xa0p\xa5\x95\xbc\xea\x02\xfe\xdf\x8f\x0e@G\xd9\xbd\xda\xf6\xb6\xe5\xebY\xb5\x91\xaf\x93\xcd\xc0\xa5?\x8d\x91\x83Y\xff=\xc63\xdb\xd1#_\xaf\xa7\x1b?n[\xb7\x85\xec0\x11T\x9fg\x85\xcc\xd2)\x1e\xe8\xae\xda\xbac\xec\xcd\xda\xa9X\xdf\x03C\x03\x8e\xd4\xb1\xa9\x01f^\xe9\xb4\xc8\x04\x00Q[\xe7\xda\xaa\x11J\xbe\x1f9>\xb3\xadB\xb2\x14\xc9\x95+\x13c\xfb\xaf\xb0\x15\x19]\xfa\xee\x1a\xf8\x05[\x05n\x83\xe6E\xc7\xf5\xa6&\xbd\xda\xbcRU\xa3\x1b^\x9cnk\x93Q7\xad!\xb8\x7fDL\xaf\x04z\x83\x1a\xd8\xd1\\W\xf1\x12\x17\xfeG!\x8c\xdd\x00\x0b\x97L\x99\x10\xe1^\xd4l \x11&D\x98\x10aB\x84 \x11&D\x98\x10aB\x84 \x11&D\x18\xff&D\x98\x10aB\x84 \x11\x1e\xb0'\xf7E\x84\xf7\x02j\xcd\x9dJ\x9c\xe0\xb4\x01\xa6\xbd\xc0\xcf%J\x0b\xc8\xac\xaf\xd3 \xce\xfa\n\x0f\x85\xcdF\xd3\xf1\x05gZg\x82\xabn\x98\xc4\x8fv\xa0\xf7\\X\x14BI\x08%!\x94\x84P\x12BI\x08%!\x94\x84P\x12BI\x08%i\x8d\x9fP\x12BI\x08%!\x94$\x1a\x0e\xa1$\xf7\xd8\x93\x07AI\xaap\xef\x13\x03 \xac\xa0\xe5Z\x06\xab9\xcfL\xbf\x14V!\xcdw\xd7\x02`\xe7\xad5\xf0c\x82eP\xc5J\xe42 \xe3\x04\xf2s\n\xd9L\xa0\x80|\xb3\x14\x8a\xf9E+T)n\x8f'\xea\x14Z\xc8\x841\xd5\xecQ\x16.\xe0\x99\xbb+\xb1m)\xbc\xf2;Q\x1fp)\xaaw\xfa\xba\x16#\x93+\xd9^\x0b\xf8\xb5\x84\x0e7`[\xa8\xf4\xc4\xb4\xe2\x81&wm\xadQ\x14=\x9d\xb3L\xcc\xad\x17\xf8\xa5\x7f@<\xdcm\xa0\x80!\xc9acn%fwL\xf0d\xc9\xf8z\xfd \xe6\x1f\xe1p\xadU\x88\xbe\xb9\xb5\x00J\xd0\xcc\xe6\x85`\xee\x8f\x90 \xbf\x04\n\xc2\xdc]AO\xd2>o\xfcDq\x06\xad\x95\xe0HcM\x01jj<\xb6\x11\x01\xacR\xb1\xb7\xa7f\x82\x9dXk\xf0\x12\xacA\xf3\x0c\x9e\x0bX\xc8k\xa1\x186\xda\xe90\xd8\xd5 \xb9\x0c\x92\xcb \xe1\xb8\x84\xe3\x12\x8eK8.\xe1\xb8\x84\xe3\x12\x8eK8.\xe1\xb8\x84\xe3\x12\x8eK8n\xf9\x9dp\xdc\xcf\x0e\xc7%\x97Ar\x19\xfc$.\x83]\xa0\x119\x0d\x92\xd3 \x81M\x046\x11\xd8D`\x13\x81M\x046\x11\xd8D`\x13\x81M\xbe \x81M\x046\x11\xd8D`\xd3\x17\x046}\xe2\xf7$;\xdd\x85\xc8\x1d\x91\xdc\x11\xc9\x1d\x91\xdc\x11\xc9\x1d\xb15\x9f]\xee\x88\xa9t\xe45+\xdc\x8cJ_\xc4D\xafV\x85\x92\xf6n\xba\xd6\x1a\xe0\xc5\x96\x0f\xe2\x8bP\xe4\\\xeb\xac\xfe\x06o\xf8\xc2\\e\x96h\xa9L\xdb\xe5\xb0V\xff\xa1\x1c\x0d\xc3\xec\xec^\xf0k*\x94\xeex(\xf4\xfd\xe8\x80\xaf\x1cMw|j\xa9\xed\xc7\"y\xa1ed\xe0`V_ \xe5EC\x06]\x84\x13\xe3D\x16\xf7S\"W\x14_\xa8\xcf\xbe\xde]4\xa5\x98?\xe0\xcf\xd2GWT\x9ah.\x12!\xafE\xda\x8fOT\x9d\xeeGU_\x1d\x1a\xe6\x89\xdf\x87\xf5\x01\xf1w\xd0Q/6\x16\x84\xad.\xda\xae\x98\x1a\xf1\xb4O\xc7\xd3\xba\xc5\xac/\x08%\xda\xc1\x84ua\x8d\xe5\xe0\xe24\xddf\xe0/)\xf6\xac\xaa\xd04\x16\x04H\x18\xb4\xb8\xd6\x12l\xe1\xc6\xed6\x1f\x8a+\xb7m\x05\xbd\x0b\x0e$\xe4\xaf\x90\x8d6\x87\xbf\x8d\xa6\"\xfb|D\xa2\xecq\xa1\x9e\x04\xb9S}\x13(n\xa2\x1a7?\x93\xc0\x1f\x95\x91\xd7\x02=\xfexr5\xc2\x10A\xc3\x0c\xcc\x85\x19\x0e\x9eP\xc9R$W\x9b\x8d\xc3[\x06\xb9\x1f\xcb\xef\x98,\xc9\xb3\xbd\x8e\x0c\xf1\xfe\x0f\xcb\xfbM\xc6\xcdR\xec\xe0\xf7\x17X\xa8d\xf2P\x89\x89k<\x9a\xf3\x9e\xf2\xb6o\xe5\xa1\xd8z4\xd3\xfdH\xafZ\xbd\xb5\xc8\xa5\xeeP\x88;<\xbfG\x07s\x880\xafI\xdb\x1b\x99y}\xadN\xdc\x02\xc7\\0\xe6n\xd1\x1e\x8c'\xca\xe7c\x90\x06x\xb4L\xc0\xdb\xdd.\xbd\x0b\xb3\xb1:\x87|\x18\xe3\x89\x82\xf8\x7fi ,9DJg \xe8Q\x8c\xaf\xdd\x8cs \x7f\xaf\x82\xcf\xb8\xb1\x18j\x0c\xf7\x8a\xe7\xb3\x95\x917\x04\xb0\xf3\\\x94X\xae\xf2\xa1a\xdc\x8fr\xc9\x0d\xd3 D\x1fw\xf9M\xf9\x9d\xa9\xbb\xef\xf8\xdf6i9\xc3S\x92 \xba\x12\xbb\xb5[JI\xf2@)I\xea\xb7\xaag\x0c\xfb]\xa5\x817\xd1\xfd\xd9\x8b\x89}\xdd\xf7g\xe5\x03`,\xcf!\xf5R\x19\xf7\xd6\xe0I\xf5\xef\xb5\xd1\x85\xa4\x1b,\x14\xf2\xf9\x9a\xabAF\x1cl<<(d\xf3m\x12M\x00CR\xee5|\x1f\xd5\xf2\x00\x83\xa7\x90@\n \xa4\x90@\n \xa4\x90\xc0m\xf3\xd9\xae\xed\x89k\x99\n\x95\x88R\xd3\x0b?\x1ct\xe9rGYv\xe2\xbfW\x16\x94,c\xa1R[o\x8bj<\x94\xca\x16\xcf\xe8C\x8b;Mz\xa0\xcck\x94y\x8d2\xafQ\xe65\xca\xbcF\x99\xd7(\xf3\x1ae^\xa3\xcck\x94y\x8d2\xafQ\xe65\xca\xbcF\x99\xd7\xee\x99y\xad)\x88\x04\xb5\xd6\xe3\nuE\xdc\x90m\xeb\x0b\xb0mE\xe0I/\xb3\x96\xf7m\x8eQ\x9a7\xe7/\xc2\xbd@\x16-\x82x\x08\xe2!\x88\x87 \x1e\x82x\x08\xe2!\x88\x87 \x1e\x82x\x18A<\x04\xf1\x10\xc4C\x10\x0fA<\x9f\x01\xc4\xb3\xc3\x1f\x92\xfc\xdd\xc8\xdf\x8d\xfc\xdd\xc8\xdf\x8d\xfc\xdd>\x82\xbf\xdb\xe1\xef\xe1\xaf\xe9\x92\x9bewz\xcb\x96\xf3[ \xc2\x97\xb0E\xf9\x8bk\xa5\xed\x0f\xf7\x19:\xc3\x11\"J\x88(!\xa2\x84\x88\x12\"J\x88(!\xa2\x84\x88\xee\x1e&!\xa2\x84\x88\x12\"J\x88(!\xa2\x84\x88\xf6\xdc\x93}\x11\xd1N\xbf\xa8}\x9c\xa2b\x8f(\n\xf1\xdf=BK\xea?\xa9\xff\xa4\xfe\x93\xfaO\xea?\xa9\xff\xa4\xfe\x93\xfaO\xea?\xa9\xff\xf87\xa9\xff\xa4\xfe\x93\xfaO\xea\xff\x80=\xd9W\xfd\xdf\xee\x10U\xb3\xd8\xb7\xe4\xa1\xda\xd7Z\x90\x1b\xfc\xe0\xcfQ\x8e\xb1[N\xbf\x8f\x92\xd8\xec\x93\x18\xae\xed\xb9\xb4\xdd\x15a.\xc4\"\xe7\xca\x96\xae\x08\xa0 p\xf0E\x80\x0f\"\x7f\x1f\xfe\x12\xdd\xfe\x08G\xa1F\x19\x048\x17\x82a\x954l\xbdo\xc1\xb1\xdf\xea\x9f\x1d)V\xcb\xc6\x1e\xca7\xa1\x9c\x7f\xbb\xb7\xf2\x13\xbavU\xff\x0csud\x1cM4\x9a\xe4\xf6>}\xc1\xdd(\x87/\x18\xa0\xa6\xe8\x9d)\xb8\x8d\x8c\xf0\xfd\xc3aU\xd1\x08\xb1\x84\xcc\x9d\xa8\x99\xa2\x80\xef\x07\xda\xb7S\xb1\xad\xd3\x99p=\x86eh\xf6\xcc\x15\xea-\xae\xe8#\x13\x0d\xa1\xd7Z{o9'<\xe9\xb9SDe\x02\xbcm.3+r\xb7\xeaBT\xfd\xed^lK\x98\x12aJ\x84)\x11\xa6D\x98\xd2W\x87)\xc5/\xdf\xfc\xecn+\xf0!\xb5\xe0\xcf\xea\xd7\xfeo\xbf\\@\x8aq\xab\x99\xa3\xbe\xdc\x1d\x13\xb8\xd8p\xa2\x8e\x85\x06>\xb2\xc92T\xca0CLC\x95\x14E\xb6!\xb2\x0d\xd1=N\xf78\xdd\xe3t\x8f\xd3=N\xb6!\xb2\x0d\x91m\xa85~\xb2\x0d\x91m\x88lCd\x1b\x8a\x86C\xb6\xa1{\xec\xc9\xc7\xb1\x0d\x05`\xff\xa3\xe1\xf8\xfb\x19\x89\xe2x\xdb`\x06\xf8D\xa8\xff\xbe\x03\xde\xd7\x8ae\xfa\x1a\xafL-\x85\xa5\x0d6*\x03\xbcv\xe3\x9b\xafU\xf5\x07\xb7W\xdd\x03J!\xfb\x13\xd9\x9f\x08\xb7\"\xdc\x8ap+\xc2\xad,\xe1V\x1f\x0f\xb7\xfa\xd0\xf6\xa7\xe6H+a\xa0:\x01\xee\x9f\x8f\xccN\x1f\x95\xe1\x99\xba\xb9\x8a\x13\xcb\x04k\x16e\xea~\xc8L\xdd~\xf7\xf72<\xd2\xc3\xb3=\xc5e\x92\xe0H\x82# \x8e$8\x92\xe0\xbe> \x8e,\x8fdy$\xcb#Y\x1e\xc9\xf2H\x96G\xb2<\x92\xe5\xf1\xf3\xb6<\x8a\xbd\xedm\x9d y)\xe17%\xfc\xa6\x84\xdf\x94\xf0\x9b\x12~\xb7\xe6\xb3\xdd?a\xa1\xafK\xd7\x04\xe0\xd7\xe6\xf0w\xfc\xff\xd4\xb5\xd4\xed\x9ap\x0e\x05\xca,\xdf<\xcbX\xc5\xeb\x035,\xf45[\xe9\xb4\xc8D\xdb9\xe1g}\x8dm<\x94o\xc2\xb5\xb6R-\xa68\xd3v\x8f\xb5\xcf\x8d\x07@\xcby\xe6\"\xe3>\x8e\x18\xcb\xef6,\x84vE.u\xba\x1b\xa4\xad\x15\xaf\x0d#\x13ja\xcb m,\xc7\xb0\x1c\x1aLr\xbd\xd6\x86g\xd3Z\x13\xf7@\x96\xcb\x06\xb1X\x07x\xbdcnm\x80\xe2\xdc7\xf9\x0bT<\xafO\xd2KF\xb5\x99y\x8f\x17\x0fQ;\x02\x13\xb9\xe2*\x11\x80%A[\x01\x0di\xf6\xb5a=ztWk\x19\xa1\x1eq\xbb\x16\xa9\xb4\"\x9d\x0e\xdc\xcf\x97\xb5]+\x9bi\xed\x1f\xae\xd5Z\x1bi7\x92h\xfd{\x0f\x1a\xf5\x15v\x13\xe9J\xaa\xa9/\xbc?\xbd\xa4B\xe9U'\x9d\xf0\x95c\xf7}\x08\xe4\x85\x96\x91M\x8fY}%\x94W\x91\x18\xb4\x1fn\x12'\xbas\xc5\xb0e`\xa3\xaf\xcf.O\x9e\x01\x90\x8f?z-J\x02\x0ev\xaa\xac\x97\xc4Kh\xaf&\x8e\xa3v:QF.\x14\xb7E\x0e\x1eX\xc8p\xc10\xa9\x17\x1a\xa4\xe3\x0e:{%\x95\\\x15\xab\xb0\xd8\x9e`+\x1a\xd2L\x80\x9bR\xfb\xc4\xae\xf8\xed\xb4\xdc\xd3\x9e\xf4\xf4\x8a\xdfBo\x9eA\xb8\xce\x8e\xdc\x04\x9c\x82\xe1v\xbf\xdau\xe6V\xa9\x1c\xc7\x98\x9d*i%\xcfPNy\xc6\xbe\x9b(\xb6\xd2\xca.\x91\xc0\x1d\x05TDN\xb4p?Z\xa8\xce\xf9\x1eT!\xd5T\xe2^\x95\xd4\x01\xf7\xe8n\xe2p\x13\x86\xa2\x95\xb6\x1a4\x1a\xe89\xb75`\x02G\xe6\xe5V\xb0\xe5xdz\xcde\xca\xb8\xad\x86k\x8a\xd9J\x1a\xe3\xc4\"dU\x96g\xd9\xddFF\x15\x7f\xed\xc1\xa6\xa0\xf8n&\xf5\x8fB\xe7E\x07Q\xed\xc4\xdb\xfd\xa6\xacE\x9e8\xfd}\x81\xf85\xc8\x9e\xc6\xf2+\x01f\x94\xf2V\x17~\xaf\xbc\x10\x0c\x82\xdcD\xb1D+#S\xf0\xb1\x03\xd8\x1e\xf6\xca.sa\xdc\xd1\xbb\xc7\xa8j\x1b\xf3_\xc2\xc0\x18\x9a\x17\x91\x06\x97\x821;\xf6\x1a\x87?\xc4\xdf\x8e\x7f@K\x84\xb0z\xfa\x01\x06\x83\xb4\xa0\xe7\xec\x17\xe1\x17\x038\xca%\xac\x15\xfe\x13\xe9\xab9:X\"7\n'\xa97\x06\xf9\xf4\xf0\xfb\xc6\x1d\xfa\x01F\xbam\xd9\xb8\x8a\x0e`\x8f5\xfc\xcb\xbf6\xc6woJ\xdbgp9h\x8b\xd8\xf5\xa6Anr\xb6@\xc9z\x88\xa3\x85\x97\xe7\xc9\xc9\xa2\xd7uf\xc9\xc9\x82\x9c,\xc8\xc9\x82\x9c,\xc8\xc9\x82\x9c,\xc8\xc9\x82\x9c,\xc8\xc9\x82\x9c,\xf0or\xb2 '\x0br\xb2 '\x8b\x01{\xf2q\x9c,\"\x13^K\x1a\x8a\xbe\x95x\x1c\xaeY\x84\xc8Y\xcd02e\xae\xf3Qp\x13\xf0\xd6\xfd\x89\xb7\xf5\xc0`'\x08\xf0\xc1?\x9d\xa40 \x96\x89\xc9\xc1\xc7\x8a\xa9\xae\xd9,=h\x82\xd1\xc2-Ce\xf8Z\xb7U\x96\xbf\x96\x1a\xc4B^\x0b\xc5\x8c\xe5\xb6\xe8\x88\xa5.\x9by(sem\x96v/\xd4\xa2\xb4\x80\xc9\xed@[\xf0,\xa8\x0dw{\xd3\x96\x00\x11\x02D\x08\x10!@\x84\x00\x11\x02D\x08\x10!@\x84\x00\x11\x02D\xf0o\x02D\x08\x10!@\x84\x00\x91\x01{\xb2' 2:@\xed\xbdK\x18\x12\xaaX\x1d<\xfb\xfb\xc1\xf9\x9b\xb3\xf3\xb3\x8b\xa3\x97\xd3\x8b\xcb\xa3\xcb\xb7\x17\xd3\xb7\xaf/\xceO^\x9c\xfetzr|0j}=>9?\xbb8\xbd\x9c\x9e\x9f\xbc9=\xeb*\xf0\xcb\xd9\xe5\xe9\xeb\x9f7\x7f??\xba\xb8\xe8l\xf9\xcd\xc9\x7f\x9e\xbc\xb8\xec\xfc\xf4\xd3\xd1\xe9\xcb\x93\xe3\x83\xdf\"\xdf\x8b\x1d\xc3\xeev\xaa\xbd\x80\xc5`\x02\x82>\xb8\xf5\x8c\xc2K{\xf0M\x80\x9c\x129\x05\xc2\xa6=a[z{\xb6\xedc\xcd\xb7+0oh|m\xd0\xb9\xca\x16f\xdc\xd9E}\xa5\xdb\xbd\xd4\xbfGn\x80\x95O\x1aN7-\xf2\xe0\xe3\x16P(\xe5\xbd\xe9:;\xae\xed`\xbb\xdf\xda\xe7~\xddzdlk\xafH\x17\xed\xee\xf0\xf7-\xfd\xd4\xf6\x0by\xc2\x92\x9b\x89\xc2\x0c3\xdd\x9d\x05Zkw\x17\xbe\xec\xd1\xe1L\x08\xc5r\xf1\xdf\xe0\xfe\xd3\xdd/\x12r\xbbW\xfc}\x8f>\xe7\xdci\xad\xa0\xf5\xcc\xa5\xe2\xd9\x14\x1d\x0bQ\xf7\xdd\x0dR\xdd\x89\x0e\xd6\xf0~t\xc0g\xc6]j\x9d\xdfT\x87\x9b%\xfc\xb6\x06\xedI\xa9\x1aw\x18W\xa0Il\xc4\xfd\x9c\xa0\x03t\x08\xc1p\xfa\xa9\xfb\xd5\xca\xeb\xe8ad\xca\xdd\xf3%\xe4\xee \x0cf\x08H[26\x02i{\xb1\x1cK -\x81\xb4\x04\xd2\x12HK -\x81\xb4\x04\xd2\x12HK -\x81\xb4\xf87\x81\xb4\x04\xd2\x12HK \xed\x80=\xf9\xca@ZJ\x8cA\x891(1\x06%\xc6\xa0\xc4\x18\xfd\xe6\xf3\xe1\x8cZ\x87\xbf\x97\x96\x98\xeel\x19\xc1\xa2\x10\xec[\xde\x9a\x15R%I\x85\xf4\xeb6\x1f\x91\x97\xd0\xcd\xe9\xf1(\x94:J\xd3|\xa3\xd9\xeb\x81\xad^\xbb\x0b\x92q\xeb\x8b6nm\xb6\x97\xeca.!kI?\x1a\xb6d-!k YK\xc8ZB\xd6\x12\xb2\x96\x90\xb5\x84\xac%d-!k \xfeM\xd6\x12\xb2\x96\x90\xb5\x84\xac%\x03\xf6\xe4\xab\xb5\x96|\xd4\x04\xe7\x03G\xfa!PI\xc8\x87\xd1 C\xc6\x894\x02\x14 <\x054\xbdz\xe2\x90kmE\x1bn\x8cZx(\xc8\xb1\x9c\xde\xf6b\x7f\xe4|%\xdd\x80Z\xd4\xec\x10P\x0d\xaa\x11\xa4F\x90\x1aAj\x04\xa9\x11\xa4F\x90\x1aAj\x04\xa9\x11\xa4F\x90Z{\xfc\x04\xa9\x11\xa4F\x90\x1aAj\xd1p\x08R\xbb\xc7\x9e|e\x90\xda\xfd\xa1\xabkmEw\x8a\x88_\xdc\x97\x12\xb4\x82r\x08X-\xe4\xb5P[\xf2B@\xc5\x87\xc2\xaa\xca\xf9\xd8\xbd\xd0\x88\xe1Ns\xf8rd\x174\xa2\xfd4\x9b\xb3>v'1q2\xdf3v\x9e\x0b'\xc1z\xbd\xf8\x1dVq\xca\xa32V\xf0\xd4C\x12\xa5\xab\x1a8\x9e\xaa\xb0)\x13\x05\x12D\x8aw\x92\x9c\xb3w\x99P\x8f}\x1b\xdf\xb0\x1f\x7fdO\xdf\xf9{\x8c[\xaf\x0e\x03\xbf\xb8\x11\xa03<\x1d\xb3S\xe5\xf4\xc2\x89B\xad#\xe1F\x98\x91W\x92\xa0\xcf\xa6;\xf1/g\x97'\xd3\xb3\xf3\xcb\xd3\xb3\xd7q&\xed(9B\xb9V!\x85\xf9\x86*\x07\xa3\xda\x97\xff:\xb9h\xfcr\xf4\xfc\xe2\xf2\xe8\xf4u\xe3\xd7\xd7g\xad\x1f\xa6\xbf\x9e^\xfeu\xfa\xcb\xc9\xe5Y= \xf9\xa6\x8e\xcb\xad\xb9\x07\x9dT{\xfb\x87\x99v\x93q\xb9cz\x864\xd1\x99s\xdd\x11\xb6'\x1a\x13\xb0S8\xf9]\x08*\xf0\xec'\x9b\xc8\xe3\xd9\xa6\x0f\x11X\xab\xf4\x13\xbd\x8e;\x1d\xb7Z\xfc\xaf\x93\x8bg\xcd\x1f\xa2\x16\xee<\x9b\xdaX\xdf/\xed\xb3\xae\x1fk\xde\x99\x08Xoo\xec\xf5\xd9\xb3\xc6\xbfk\x93\xd9U\xb9\xda\xbdf3\xd5\x97z\x83 h]\x0b[o\xdaQ3\x1e\xe7\x0e\x1e\xd4R\xb0\x7f\x85\x92\"\x8d\xf6\xbe\xea\xa3P\x12\xb08h\xdem8\xfca\xd6\x99\xb4\xdb\xfc\xc1\xdfW\xa9C6\x95h\x8d\xc3\xf5\x1f\xf5\x8c\x13R\x1b\xd0\xf9\x89:bP!\xd1\xcaHc\x9b \xd7O\x8fGH\xb6\x8e\x13\x8fJ\xc1\xbd\xb9J\xf5\x11\xe0}\x16\x92\x91\xb8\xf2\xc8T\x91\xee\x11\x1f\xa1\xfc1\x7f\xec\xfc1 \x88\x0c1\xdc\xa0\xc8C\x86\x9b^W\xa0%\xc3\x0d\x19n\xc8pC\x86\x1b2\xdc\x90\xe1\x86\x0c7d\xb8!\xc3\x0d\x19n\xf0o2\xdc\x90\xe1\x86\x0c7d\xb8\x19\xb0'_\x99\xe1\x862\xc7P\xe6\x18\xca\x1cC\x99c(sL\xbf\xf9| C\xf7\xe1\xef`$\xe8N\x19\x036\x86\xd8\xde\x9dv\xa4\x89\xd1\x95\xe5\xfb\xf4x\x846\x87\xee<1\xae\xb9\x87\xb4\x82\xef.E\xc6n2v\xf7A\xfa\xc9\xd8M\xc6n2v\xff\x81\x8c\xdd\x9b\xcd\xa1C\xad\xa1d\x0c\xed\xc7\"-\x19C\xc9\x18J\xc6P2\x86\x921\x94\x8c\xa1d\x0c%c(\x19C\xc9\x18\x8a\x7f\x931\x94\x8c\xa1d\x0c%c\xe8\x80=\xf9j\x8d\xa1\x88/w\xf9\xea\xd7\x13B\xc1\x0f!Kv@-\xd6\x1f;\x15\xd4J*[\xda\x19\xb8R\x05\xcf\xa6\xc0\xc7M\xc0W[6\x85#(u^\x16\n\x02:sm\x01\xa5B\x01V5\x83\x8c\xadmNh\xb6\xf4P\xa6\x85\xcey\x0f\x13\xbd[M\x044\xaa\xf7\xe2l@\xb8\x9ak\xd4\x0b\xed\x9a(\x84\xbbZ[E\xd0\xd7=\xa1\xaf\xfe\xca\xd9\xfb\xf7\x15\xf3\xea{\x00\xa5\x9agepN\xeb\xe0\x9d\x86\xaf\xdeb\xd9M`e\x1b\x9bN]\xd9\xccC\x1d\xb7\xda,\x87\x1d\xb3jr\x1b\x8eWk\xf6\x1b\x8eU\xb9\x08\xbd\xce\x93G\x8f\xab\x0dxs\xfe\"\x08\x9et\x90>\xc3\x83\x04\xd2B\xf7\xf5u\x0e\x9fjG\x08=\x1c\xc01f^RR%p\xb4\x8f\xd0\x0b\xe8\xf2\x95T\x16[{\xa8\x93TM\xb3!\xfa\xe0\x1c\xebQ|a:A\xecY\xe9\xb4\xc8z\xc4\xf0\xb9\x05\x99nx\xe9$\n\x91\xf3\xe8M\xa2%\x88\x9c\xae\x96\xdb\xe4\xf2@Nsn\xc5\x14\x91\xbfm\x0d\xad\xf8\xad\\\x15\xabpQb\x05'\xd0VG\xdb\xb5To{\xc5o\xfb\xb4\xb9\xb5\x89\xaet\x8eQ\x13Rmhb\xa1y6\x9di\x95\x8aN\x97\x83\xd0\x80+\xe6\x16h-\xf2\xc4q,\xac\xc1\xb8\xd5+\xe3\x9a\x99e:\xb92\xd3\xb5\xc8\xa7w\x82w\x1c\xebm\x01\x8a%{\xc1V\\'\x0cZ\xd9\x18H\x88\x84;\x84\xfb\xf9\x83C\"\xc4\xe7\xc6\xf9\xf0\xb4\x0f\xe0}\xc1!\x88W\xf8s\xc9\x1e\xd06\x8b\xbca\xe4\x1d\x06\xa45\xcc\x143\xb3\xe6`\xcbH'\xeaJ\xdc\xb5\xb9\xe2g\xc0\x0b7\xb0\xc2\x1a'\x0cA\xd1\xe5\x94w\xb3\xc00\xf9\xce\xcd\xec\x0co\xde\xbc\xc9\x03N$\x9d\xc6\xcf\xf54v\xa3\x11%\x994\xf7\xb7<<1\x1d\xe2\x19swe\x15\xb9^\x1d\xc3\xb9\xce\xf7\xf0\x96,i\xac\xc2\x1f6y`\xc7Cq\xff\x0e`H9\x02\x0f\x8a\x86\xb1\xdfg4\xdb1\x08\x93q\xb3\x94j\xb1\x07\x07kK6\xa11\xbf\xbc-&u\xe1\xbf\x7f\x06\xcc\xaa\x07\xdd\x1a\xb9P\"\x9dz\xd9\xe0F\xaaT\xdfl\xa5\xd4\xd2\xadq%\xd5\xd4\xd7v\"E\x8f\xaaH\xe4\xa3\x83T\xdf(+Wb\xfa\xdf\\f\xd3\xd4#v\x9d'\x07\x16{:\x07o\x04\xad\xa6\xa9.f\x99\x80n{\xf5\xd4\xaa\x8e\x1d\xf7\xa8\xdb\xe2\xa0\xa5T\xef\xb1\xd4\x16i\x94\x06\xe0\x19\x9e\xb4\x06\x9d\xa0\xa2\x18\xc4\xa9\x0f%!\x11K\xfet,y\x08\x83q\x14*\xd5b*\xd5\\w\xf3\x99\x0b,q\xea\nD\x0fn\xc2\x8f\xe0B\x0drR\x96\xa1\xa5\x9d[\x9d\x9b6\xab\x89\xdax(F\xe3\x86\xba\xff\x1ey8\xba\xfb\xec[\x9e\xdb\xe9r\x83\xebb\x8b%U\x87\xeb\xaf\xe8\xbc\xcc\xc3\xf3\x94\xe5\n\xb2\x1bn\xd0T\x84\xfeQ\xa9\xfbY\xb0\xb37\xf0\xa1P\x8e\x1f\x89\x14\xb5\xb6T\xdcN}hM\x9f\xbe\xeb\xeb|\xea\xaa\x87\xc71\x0d\x93*\xc9\xc1'\xc3\x9dA\x9e,\x99cBp\xac\xebC\xe3^g\x03{!GU\x0b,=+~\x87\xce8\xc8p\xc1\xb7Q$z\xb5\x92\x16=\xa0\xac\xf7`\x93\x8a%Z\xfd\xb7\xf78@\x0b\x1d\xc0\xb5\xef.\xa0\xe6s\xe0\xf3\xbf\x02\xaf~\xc7\x82\xe8jE\xbe*\xafj\x98z\xb8\x9b\xdf\xbd\x92\xc6\x84j\xcf\xa5=r\xdb\xfb\x0e\\Hp\xb1\xa6\x85\xb2r{\xb2\x1b\xb7\xc6O\x80\xed6\x97\xe9R\xae\x84\xb1|\xb5f\xd0\x8a_\xb0\xfa\xbaH\xc3\xb0'\x96b\\M\xe64\x06a\x0c\x0b\xdc\x1cFc\xf5jf\xacV5\x159\x84B\xb4\x9c\\\x97\x02\\mp\xe9\x827\x0bt\xb7\xe4\x86\xcd\x84P\xacj\x90=\xbe\x92\x99\x1b\x80.\xd0\xfb\xb5,l\x84\xfd&D\xa4\x18\x01.\x82Is_q\x97\xc0\xa3\xc5\x893\xd7:\xf16\xd6\x1c]\xa6\xd5\x9d\xf7\xfbI\xb4\x9a\xcbE\x91\x8b\x94\xad\xa4\x99\x89\xa5\xe4\xd7ND\x83\xab\xd6mB\xb8\xa4!h\xa6+\xa2`'Y\x1e1_\x97]\x89\xb5\xad\\\xb7\n\xa5\x84\xe3\n\xe0\xc6\xe7v\x98\xe5\x82\xa7f\x8c\xaeShD|wQ\xac\x1ewQ\xc37\xef\x18\xcfn\xf8\x9dq\xf3\xe3\x99\xa9\xd3\xcc\x0b\xec\xf0]\x17N\xfaKX\xa4\x88\x8f\xc5>\xbf\xe1\xf3\xa3\x06c\x04{\xa2V\xd2\xea\xdcG\xea\xc9|\xa2J\xba\x80\xa7_\xa5\xbdC\xba\xf0<\x01*\xfa\x1bv\x07\x97m%\xb1\xda\xce\xc2(\x03\xd5\xbe\x19\xa8\xda\"\xd6\xa2\xeek\xadkfj\xa9\xd8\xc2I>\xa5\x80\xe4\xa5\x07\xc3n\x96\"\xf7~\xa2\x89\xce\xf1;\x98\xb4s\x1cbi}v\xa7\x1b\xe4\xb4x\xfc`t\x0e%.\xf4\xaa\x1aC\xe5\x99\xc2\x9c\xe0'\xc0Y\xeb9\xcf\xcb5\x89}\x0d\x18\xab\x05\x97\xe2\xe6x\x7f\x83\xf7m\xe1/\xbe\xbb\x87\x88\x805\xb9!\xb2\x12\x90$\xf8\xe9$\xc1\x0d\xae\x02\x14\x94LA\xc9\x14\x94LA\xc9\x14\x94\xbcwP\xf2vE\xfa\xf0\xf7D+3\xf5Jcw@r,K\xc6 ^S\xe8C\xc3C\x02!\x12^ \xdd\xa2^?\x94v}\xcd\xb3i\xbc\x04\xbbk\x90FM\x1a5i\xd4\xa4Q\x7f\x1c\x8d\xbab M\xce\xb4I\xb9\xf6*\x98H]\xefu~\xbbM'\xdaS%\"\x8d\xe8s\xd2\x88\xe2\xdb\xbaC\xf2\xab>\x86]\x0e\xff,M\x96\x0dj\xfaH>\xca\xc6B\xd4`)t\xa4\"\x13\x0b`*\xe6\xf0w\xff\x0f\x9d\xc3`\xbb\x85\x8e\xe3P\xe6\xb8\xaaY9A\x804^\xfd\x1e\xbd\x07R\xb6\x1df\xde\xf6y\xe8j\xfa\xa1\xa4\x91j\x16\xd3Z\xff\xfb\xd1`\xd5Z\xef\xb2~\x13:\xe5\x9b&}\xb5\xaa\x04\"\x9b\x89d\xf9\xfdwO\x84r\x871-i\xae\x0cz\xf1\xd5B\x9c$r\xcc\xfe\xfd\xb6\xaa\xf4\xeb\xb7\xac\x06\xfd\x9a%\xcfE\x8f\xce\xb0\x9cg\xf1\xf1\xf8!\xf6\x13?\xe6\"\x11\xf2Z\xa4]\x17FETM\xcb\xa6\x93\x9b\xbc\xb4\xa3\xaf\x842l)2\x08\xbc\xe2\x8a\xf1\x04n=\x7fQO\x94\xbeQ\x18\x94\xe5\xf4\xedr\x01}\x84,\xc4B\xebD\x02x\x16\xc4'v\xad\xd1\x07R\xdf\xa0r\xa6\x95\x98\xa8\xfa\x1a\xccx\xc6U\xd2#%\xcf\x06\xd7\xc1\xf7\xa3\x03\xber\xe3\xecb\x08\xcd\x85x\xa1e\x9c\xe9\x02\xe6\xec\x03\x9c\x18\xb4\x1f\xd4D7'\xb7\x04\xd02\xe8H\xaf\xcf.O\x9eA\x18>\xfeX%\xe3\xe1\x8a\x9d\xaa 3\x97\x81\xb9\xb5`\x1a\xbc\xaa&\xca1:n\x0b\xdc/\xe4jnA\x17z\xa1!\xb6e\xfb\xe6\xc5\xb7%\xc8D<\x03LD\xb3h\x83\xc5m\x022\x8a\x93=\xa4\x8dbm'\xca/u3\xaa\xc7\x13P)u\xaft.\x98)\xa4-\xf5\xe7$\x03\xf0\xa5\xe4\x06\x1d\x8fFt1\x8dj\xa5\xb3\xacA\xb5\xe6Q\x85\xcb7\x0e#=-\xf1\x07\x01\xf67\xf8\x9fu]e;\xbd\xd1B\xa4I\xe7\x15K\xcei\xbdn\xda\xcd\xd2^[\x9f\xa1D+\x94h\x85\x12\xadP\xa2\x15J\xb4B\x89V(\xd1\n%Z\xa1D+\x94h\x85\x12\xadP\xa2\x15/\xb2S\xa2\x15J\xb4\xf2Q\x12\xad\xd4\xe1\xda\x1dhn\x0d\xe3i\x81\xe8\x95\xf9 \x8eq\x1al3\xa0\xe7&\xc8\xb3\x8b<\xbb\xc8\xb3\x8b<\xbb\xfa\xcdg/\x1b\xab\xce\xdb&\xd6\xc3\\D\xf6\x80\x83.\x83\xeb\x9b\xb8Dii\xad\xd5\xab\x9c\xbc6\xdaVk\xad<\x94Q5\x1e\xf4\x870\xab\xc6\xed\xed.\xfd\xf0\x86U\x93'\xfd\xfb\xee\xac\x16\xfa\xaf\\\x84\xe25`\x1e\xcb\xc6\xad\x8fM\xed\xb5a\xa4\xc6\xee3\x8c\xa8\xda\x8ea\xa4\xc2\xd8\xc0\x91:\xc7\"\x94\xcd\xe5}v>\xc9\x05R\xd1\x00\x0f\xbf\x06\xcf\xae\xb7\xc0jr\x96\xff\xadr)\xabM\xcfj}\xc5\xd6\x19\xc4q\x83\xe9\xc3\x89\xa4\xd0\xd6\xce\x88\xdb\xcd\xeel\x8dV\x9aY\xf6n\xd1\xedo\xde\\\xea\xaa\xda\x18]\x0f\xa5\x95<\x9b\xb6\x0d\xca\x1b\xb6\xb7Q\xa1\xd6\xad\xff\xc6\xc27\xb8\x12\xea\xf4fyn\xc1\xdc\x1e\xec\xf8\x8eJv\xf7Z\x95-\xddaV\xe1\xd6\x8b\x88\xe7I\xe4-\x87\xf6Y\xd85T\xd6\xe3\x81t\xa1\x7f1\xc7;Q6\xbf\x8bl\xde\xb5I \x89\xa1\xe6\x99\x8bL\\se\xd9JX\x9er\xcb;\xac\xbc\x9ex\xf1\x16j\xd2\x86\xff\xb8k@u\xfd5\x93\xc6\xa2\x15x\xcds+\x13\xa7@WL\xe4Q\xcc\xed\xd5\x02\xdc\x15\xccD\xcds\xbd\xaa\xd7\xf0\xa7\xbfZ4\x10\x9bjMV\xe7\xb2\xee\x80p\xef\x03Yc\xed\xae\xb5\xbb\xddu\xe8\x10\xd3!\xfet\x87x\xe3j\xf6\xe8u\xb3\xd3 g\xed!\xd6\xbdO\x9c,\x1e,\x10\xec\x9e\xde'\x13\x15\xbb\x9fl\x1fx\xdf17\x86k\x02\x0b+\xc7\xfd\xc1\x87M\xee-\x7ft\xf7\x96\x9a6\xb1\xd3\xaf\xc5\xfb.\xd7\x15\x19\xca\xfa\xd8\xefb\xb5\xe4\xd0B\x0e-\xe4\xd0B\x0e-\xe4\xd0B\x0e-\xe4\xd0B\x0e-\xe4\xd0B\x0e-\xf879\xb4\x90C\x0b9\xb4\x90C\xcb\x80=\xf9\xfa\x1cZL\x9eL\xebq\x8am \xb3U\xa46\xc6\n\xbf\x8c\xc6X\x82\x8f\x82\xcds\xbd\xda\xc3:\xde1\xd6\xd4\xd8]cm\x17\x194V\xab?\xccH\xc9M\x88\xdc\x84\xc8M\x88\xdc\x84\xc8M\xe8\xd3\xb8 \x15j\x86y\x1e\xa7\x11\x86~\xb05?\xc3\xdbPeS\xa2\x86\xb2\xcd\x0d)\x1b&\xaau;o\xc9\xd9\xd0\xd5\xddC\xf9\x19U\xab\xf5\x01\x9c\x8c\xea[\xd1\xcbg\xa6U\xe5~nC\xbd\xfb\xfd \xf9\x18\xee\xed\n\xf0\xe1\xcd\xfar\x83A\xbf\xa2\xe0Ob\xcd\x97]\x86\xfcj\x0c\x1f\xd3\x8a\xef\x13S\xf8\"\x19\xa2\x9bi\x91!^\xed\xd3^0'U\xd4\x07\xd1\xbb\xf3-\x9dn\xe9\xa0\x85Pvp\x81\x86\xd9^E+\xb6\xdbh\x9fn\xf5\xbc\xe9\xe2`\xdb\x9e^\\\x1e]\xbe\xbd\x98\xbe}}q~\xf2\xe2\xf4\xa7\xd3\x93\xe3\x83Q\xe3\x8b\xfb\xd7\x86\x9fO_\xff\xdc\xf8\xdd\x17\xfe-r\xd3\xdb\xd8\x11\xb8?^ \xd5\x03\xa9\xf0n\xb7\xed\x87\xee@\x8f\x81o\x8f\xa5J\xb213\"\x9b?\xa9\\_\xbf\xf1.\xb3\x01}\xea\xfb\xb2^\xb3F\x05\x8d\x00\xb4\xe8\x7f\x94\xc6\x14\xa8I\xd5_W\xad\x90\xaf\xb6\xc7nss\xa3\x7f5l\x1e\xd5\xefV\xe4+S\xa6\x0e\x8a|\xd3w\xb9\xbc\xae\xb4\x92W\xddO\xdb\xd6G\xe1\x0bF\xa9\xc4\x96\xc5\x8a\xab'\xb9\xe0)\xa8@\xc00;F\xf0~t\x80h\x8b\xed\xf4\xab\xad\xf7\x12J\xc6\xae\xcfA;g\xe5\xc7\xf21<\xf6X\xdc\x8e\xd9\xdbs'i\xeb\x9c\xfdM\xdc9\xdd\x14\xb7\xf4F\xcc\x8c\xb4=\xbc\xb8}\xc1\xce.\xc3\xb7L\xaa+<\x81\")ri\xef\xa6pK%}2\xbe5jt\xf6#V\\\x02\xf2\xc2Bq\xe6\x8b\x8f\xbb\xbd?7R%\x14\x0c\xe7\x00U\xc4\xb2\x17\xff\xd5gA\xab\x02>\xf6\x8e9h6\x11\xe66r\x92]\xf9q\x04$\xb1l\xbc\x11\x0e\nv\x93\x11.\x8a\xc8\xd5\x1d\xa6^uq\x8f\xa0\x84z#\xdbF\xb9\x92\xaa\nS\xa83S\xab\x83\x1f\xbfh\x8c\x11^\x9c6\xa6\xf3\xf4V\xdfj\x877\xfa\xb9\xb2\x85\xee>\xaeU\xb5\xa9\xd3\x05;\xae\x82f\x89\xce\xbc\x86Q\xefX\x08\x81\x95\x12\x94\xc0X\x12\xb8\xe4\x07\xf0\x12\xd7\xd4n\x12u\xa5\xc2M\xd5\x18\x07 \xa5\x0b\xe4\x97\x15\x87\x1c1\x10\\\xe6\x801\xfa\x10\x8d\x15\xbf\x9d\xf6\xeb.\x94\xac\xad\xc3\x8a\xdf\xcaU\xb1j\xf5\xdf|\xbd>\xe1\x8a\x89k\x91\xfb\x81m\x1a \xc2G\x03\x06\x14U\xe8\x1cW\xcaev\x87\x8f\xd8s#Z\x08{4\xee\xf6\x90\xe0h\xaf\xddY\xb8\xd7\x89\xa9Z\x08\x9b\x05\xeaI\xf9\x8e~k\xe9\xb8\xf10Z\xea\x07\xb1\x92j\xea.\xdb(\xfa\xae\xc7\xea\xb4+\xb5\xc4\x9aG\x06.q\x96\x8a$\xe3\xf8z\xbb\x82e\xf3\xbf\x86\x8a[_@\x8f.\xb2\xb2\xe1\x11\xb3z\x81RZ\xf9\x10-^\xe7U\x92N\xc0<\x7f\x89\x86\x02\x0f\xe1\xfa\xeb\xde\xab\x82\xd2)k\xb8\x18\xb88\xc0:\xa42cv\x91q\xb3t'+\x80\xa9\xd2)Dn*\xb8\xd5^\xf3\xabU\x1f!\"\x8b\xe1Ry.\x12\xcb\x12\x9e%EV\xaa_\xf3\xc2\xdd\x86\x13U\xa88*\xd1\xcdA\x17\x96I\x0b\xb6-\xb5`\xfaZ\xe4\xb1\xec\xc1~]\n\x85C\x03\xe47\x96\x99&\xaa\xce\xa1G\x0d\x1a\x94\x90\x934\x95\xe5\xb3\xbd<\x0e(\xbaYj#*\xf3\xecD\xc5\xcb$\xeb\x18r\xb4\xba8\x94j\x18\xa9,5xT)\x00z\x9d\xa8\xda\xfa\x8c\xd9/\xf1k\xc1\xde\xcd ,\x91\xd3X\x82T\x16\x04k\x18\xc6D\xad\x8a\xcc\xcau&\xb1\x83z\x9b\xed@\xaa\xc8\xa4X\x0b\xf8\x8aW\x85^\xa7\xfdbc\x99:\x8c\xc1\xbd#\x98\xba\xac\xd5\x14\xb7\xd4\xcbhm\xc9\xeaKV_\xb2\xfa\x92\xd5\x97\xac\xbed\xf5%\xab/Y}\xc9\xeaKV_\xfc\x9b\xac\xbed\xf5%\xab/Y}\x07\xec\xc9\x9eV_\x8a[\xa2\xb8%\x8a[\xa2\xb8%\x8a[\xa2\xb8\xa5\xdeqK\x87\xbf\xd7S\x0b\xbe?\xe8\x17\xc8T\xc61\xc5I\xd2\xbaC\x98\xaa\"\x13\xb5\xe62\xdf\x92j\xb2l\xfe\xc1#\x98v\x17\xa5@%\x82\xac \xb2&\xc8\x9a k\x82\xac \xb2&\xc8\xba\x07\x16L\x905A\xd6\x04Y\x13d\xed\xb5q\x82\xac\xf7\x82G \xb2\xfeb k\nT\xa2@\xa5\x86\xf5\x81\x02\x95(PiK\xf3\x14\xa8D\x81J\x14\xa8\x14\x99-(P\x89\x02\x95(P\x89\x02\x95>\xf7@\xa5\xbe\xf1*e\xb8\xca\xc0X\x15\nU\xa1P\x15\xb2\xfb\x91\xdd\x8f\xec~d\xf7#\xbb\x1f\xd9\xfd\xc8\xeeGv\xbf\xf6\xf8\xc9\xeeGv?\xb2\xfb\x91\xdd/\x1a\x0e\xd9\xfd\xee\xb1'{\xda\xfd\xfe\xc0\xa1*uw\xe9\xd6\xd8\xea\x9fkc\xab\xc0\x9e\x0f;\xb6an\xe1Ki\xac\xce\x9d\x8a:\x95j\xae\x0f\x7fGKB\xb7\xdf\xf7_\xcb\xc2\xa7j\xaeK\x9fo7\x9b\xaa\x9d\xa6\xe376\xd8\xf6\xf2\xae7\xf6P\x1e\xden\xdc\xed\x8e\xdc\xaf\xb5\xcdjN\xcf\x87P4g\xb8\xa3/\xc1S\xd1\xc3\x95\xdc\xebXP\xd0\xa7\x94\x99q#\x136\xcbtr\x05\x03\xd8\xd9\x17\x14\xdd\xaa\\\x84H\x93\xd1\x01_\xaf{\x95l)\x0c/\x82\x9b9K\xf8\xda\x16yi~ ?\xe7E&\xd0r\xba\xce\xb5\xdb8\xe4qa\x1e\x08]\xb8\x7f$K.\xd5\xc8\xdd\xd1IV 't\x0c\xb2\xfc\xc4Rn\xb9\xbbJ\x8a\x04\xfb \xf2\x01\xf6\x10\x14\x9dJ\xe9~d&\xcaX\x80\x87s\xae\x0c2\xc9\x15O\x96Ra\x9e$hv*\xd3NX\xad\xb7\xcd\xee\xfd\xe8`\x80\x1d\xe0\xfd\x08n\x9f)\xcc+\xf4\xedwx\x9d\x8b\xeb!\x1b\xbc\xe4f\xb9[yD\x9ej\xa7F\xd8i_\xf2kf<\xea\xc6&q\xf2=G\xf1\xbeJ\x8et\xcesk\x84\xfd+\x0e\x06\xb8>\xac \x98<\xec\xb4_\x83Us\xae<\x12\x00\xae\x9d\xa3\x13\x00F\xb9\xe5=\x1bCU\xdc\x07\xc0\xf4\xac\xd3\x1a\x00\xb8\x96x\x1ad\xba\xb0\xeb\xc2V\xbfU{\xeb:\x83\xb0\xc4\xc1=\xd6\xa2:zW\xe1\xebu\xff\xc2\xb0\x0f\x1e\x8f\xea_K8u@%\xa2g\x8dj\xe5*6\x01\x04\xff\x1e\xe9P\x1b\xb15\x86\xa6MYu\x9e\x84\x84Uc\xde%\xdb\x009\x9c]\n\x95\x8a|%\x95\xf54\x83\x07#`2F\xc4\x07\x7f \x9cNQ@d\x0d k\x00Y\x03\xc8\x1a@\xd6\x00\xb2\x06\x905\xa0\x07\xccN\xd6\x00\xb2\x06\x905\x80\xac\x01\x08g\x905`?\xe4\x99\xac\x01_\x8c5\x80\xa2\x80(\n\xa8a\xd8\xa1( \x8a\x02\xda\xd2 \xab \xac\x82\xb0\n\xc2*\x08\xab \xac\x82\xb0\x8a\x1e \x00a\x15\x84U\x10VAX\x05a\x15\xf7\xd1\x8b \xab\xf8b\xb0\nJ\xf3Ii>\xa1CJ\xf3Ii>)\xcd'\xa5\xf9<\xa04\x9f\x94\xe6\x93\xd2|R\x9aOJ\xf3\xf9\x85\xa5\xf9l\x92Nd<\xac\x80G\x9f\x15\x02\x8d\x8ci3'\xc2\x9a/|H~\x9bQW\xdf\xea.\xd7\xd5\xcf\x9e\x16b\x03\xe2v\x06\x0co4\xd6mi\x1b\x91\xda\x10Z\x1f\xea\x84S\xe6\xfe\xf40;7\x06y\xf19_\x887\xe2\x1f\x850v\x8c\xdf'\xaa\xcaP\xe2Zp\xc3\x16l\xa5\x8de\x020p\x00\xc8Q\x80\xaf\xbf\xcb\xd9\x1eP\x11d\x8b0$\xdc+\x196\xadJ\xab\x10\xceL\x84\xbb\xcfk\x83K\x1c\x1dM\xa1\xdaD9\x8ed\x84\x1d1iM0\x8a\x18\xe6\x8e\x08*d \x1c\xddH\x13r\x00\x84\xee\xc1\xfa\\Y|\xfb\xba\x9dG&\xe7\xca\xf9\x9c|\xcf\xc9\x9eK\xf6\\\xb2\xe7\x92=\x97\xec\xb9\x96\xec\xb9d\xcf%{n\x9fa\x92=\x97\xec\xb9d\xcf%{.\xd9s\xc9\x9e\xdbsO\xf6\xb4\xe7\xeeH\xe0\xea\x0d\xae-\x9b\x0e\xdaU\x85r\xc2\"\x08\xa1\x08\x87\xb8\xa9F0\x11\xb8\x97\xe3\xda6\xfd\xcb!\x87+T\xaa%q\x9d\xf3\xccl\xc9\xe2\xfa\xfe\xfd\xa8\x1cZ\x05\x14\x8d\xaf\xc4]k\x88\x1e\xd2\xe1\xfe\xd0\xe7\xc2\x16\xb9B\x1flDL<\xc8P\xe2? \x8b/\x9c\xd2 \xc3r\xc3\xde\x8e\xee\x8c\xd9\x99\xe3\x88N\xe9\xd2s'*;]K\xe7\xec\xcai~\x956j\x84\xdd\x7f\xc2M\x89t\xc3\x02`\xe7m\xf7u\x1c\x13,\x83*V\"\x97I\x18'\x9c\x0c\x8f\x14\xa2\xf4\xbc\x14\x8a\xf9E+T\xa9 \x8c'\xea\x14Z\xc8\x841\xd5\xecQL/\x8c[\xa5+\xb1m)\xbc^>Q\x1fp)\x8a\x90\xc2\xb7s12\xb9\x92\xed\xb5\x80_\x03\xc8\xb7 XC},\xa6\x15\x0f@\xba\x1bu\x8dR\xf2\xe9\x9cebn\xbd.\"-2\x94p\xed\x06Kw!|cn%fwL\xf0d\xc9\xf8z\xfd \xe6\x1f\x81\x80\xadU\x88\xbe\xb9\xb5\x00J\xd0\xcc\xe6\x85`\xee\x0f\xa9R\xa79\x8b\x12\xc3\x08sw\x05=IK\x95dE*&\x8a\xb3$2\n\xb4\xd6\x14P\xb0H\xa5t\xbc\xa1\x0e\xee\xbe=5\xe3\x89j\x0c \xa4\x8c\\\x18\x0f \x02YVt\xecHu\xcc\x90\"\xe5B\xe9<\xa2\xdc\x89\xc2\x19\xed\xb1\xc4\xc1\x85e\xc3\x8a\xe6\xc2\xe9\xdem}\xd0\xff\xde\\I\x19!\xb5\xb9\xd8@T\xae%\x81i|u\x9e\x8a\x1cUa\xa9\x12\xf1\x8ca\xcc\xcf\x13\x93^\xb1o\xc7\x7f\xfe\xfe>\xf3\x19\x96\xe4\xba\xe2\xdd\x87\xbf\x97\x7fC\xf0\xcb\xfb\x83\xadaFe\x94Qd\x1fQs\x0d\x9b\x8e\xac\xbf\xfa\xe0\xe3f\xb6D\x19=x\x90\xd1\xee\xa2\x14KD\xd83a\xcf\x84=\x13\xf6L\xd83a\xcf\x84=\xf7\x00u {&\xec\x99\xb0g\xc2\x9e\xbd^M\xd8\xf3^8'a\xcf_\x0c\xf6L\xb1D\x14K\x04\x1dR,\x11\xc5\x12Q,\x11\xc5\x12Q,\x11\xc5\x12Q,\x11\xc5\x12Q,\xd1\x97\x16K\xb41\xbcdpt \x05\x97Pp \x19\xf8\xc8\xc0G\x06>2\xf0\x91\x81\x8f\x0c|d\xe0#\x03_k\xfcd\xe0#\x03\x1f\x19\xf8\xc8\xc0\x17\x0d\x87\x0c|\xf7\xd8\x93=\x0d|;\x82K\xea\x1e\xc6-\x81\xa8\xfe\xb9\x86\xed\xb5\x9c\x89k!(\xa5\x03\xb8\xd3\xefj\xfe\xd26/\xb6F\x97|0o\xe9\xc3\x08;:\xd8\xea9}\x1c\x81L\xc1\x89:`6\x1b}\xa8\xb7\xf8NG\xed=\x94\x1bu5\xf7i\xad\x7f\xbb\x17\x92\xd1\x89xn/;\xc4-\xbbU%@\xa43\x91,\xbf\xff\xeeI\xf0\xb7nxh\x97\xd5\x82\xc8\x1f\xed~\xaf~[U\xfa\xf5[7\x06\xf65\xb0\xd6\xcc\xaa\xf1\xf8A\x8d\xc1\x8f\xb9H\x84\xbcF\xc4\xb9Y\xbf\"\xaa\x8a\xe1\xf9\xd1j\xe5\x95#o\x19^\xba;jv\x07ZF\x02\xb1\x1d>^c\xe2x+\xca\x17ZE\x0b\xe8\x95=P\xebu\"y\x89\x81\xc2tc0R\xcf]\xcd\x89\xaa\xaf\xc1\x8cg\\%\xa2\x0fq(\xbd\xeaD\xdb\x103\xedb\x08\xcd\x85x\xa1\xa5\x8a\xd0n\x98s\x85\xd8*\xbd\n\xe1-nNn \xa0e\x90(^\x9f]\x9e<\x03D\xc9C\xb4x\x9dKP\xc8NU0\xe5\x95:f\xed^@1i\xa2Jk\xad\xdb/\xe4jnA\x17z\xa1\x81Mo\xdf\xbc\x18lu\xb5\xafy\x06\xb1\\\x9aE\x1b,n\x13\xb1\xf6\x01b\xd2Fj\xe3D\xf9\xa5n^P\x9e\x80\xfc\xf8\x0d[\xe9\\0SH[\xc6\xfd$\x19\x04\x8d\x95\xdc\x00\x87I\xd9\xa1\xfe\xf0\xd9\xa1\xa2\xdbf'\x92?Q\x0d(?\xbe\xfa\x08\xd5\xefs\x17ZB\xf5 \xd5'T\x9fP}B\xf5 \xd5'T\x9fP}B\xf5 \xd5\xc7\xbf \xd5'T\x9fP}B\xf5\x07\xec\xc9\xd7\x82\xeaS\xce(\xca\x19E9\xa3(g\x14\xe5\x8c\xea7\x9f\x8fb\x05=\xfc\xbdni\xebN(\x15\xd9!z\x1bC+S\x12[s\xd9a\x1b\xad\x1a\xfd\x8c,\xa2C*\xf5.;\xc4\x00I\x86O2|\x92\xe1\xf3A\x0c\x9f\xf5a\x02\x8f\xed\x1e\xeb\xb6\x88\x98h\xe4\x95\xf1lL\xd63\xb2\x9e\x91\xf5\x8c\xacgd=#\xeb\x99%\xeb\x19Y\xcf\xc8z\xd6g\x98d=#\xeb\x19Y\xcf\xc8zF\xd63\xb2\x9e\xf5\xdc\x93\xaf\xcfzVG\x0cw\x00\x8a\x8d\xf4j\x01\xa1\xfd\xb0c\xfb4Hu\x95\xeb\xaf\x91~\xa7\x05_\xbf\x0d\x05;p\xec\xb2\x91\x1e@\xf6Du#\xd9\x1d\xed?\x14\xa4\x8d\xd3\xd9]\xeekC\xa6\x85\xb2\xb9\xbcO\xbc\x13\xe6\x0b\xd3j\xffLr\x8d\x16\xc2,\xfc\xbfB\xc6\xb8(\xf1\x1a\xb3Z_\xb1u\xc6\x13\x11r\xb0\xad3\x01M\xdc#\xedU\xa3\x950\x8cB\xc9\xdb*-\\5\x86\xaa8\xe69\xc4\xf4j\xd36\xca\xbda\xf7\x1a\x15j\xfc\xc7C\xf4\xbeH\x86\x1amZd\x88Qx\x03\x00\xe3\xb69\x88\xde\x9do\xe9tK\x07-\xad\xb4\xe3|\x9f(\x9b\xd7R8V+\x86\x04\x84bQ.2q\xcd\x95u\xb2+O\xb9\xe5\xed\\\x98\x814\xd1\xc0X\xdb\xff\xc8(\xe2\x0b\xf5\x1c\x1d3VC\xb2\xae,\x03\xc1\x8f\x19\xa9\x16Yt\x16\x1f\xc5\x8c\xcf\xfd\xdfL\x94\xdb\xf7\xb2d\xc5\xfd\xdc\x15\x8f \x03\x9f\x80uS\xa4,\x93\xc6~@\xc8\xbcc\x02\x13E\xe0y/\xb6d <'\xf0\x9c\xc0s\x02\xcf <'\xf0\x9c\xc0s\x02\xcf <'\xf0\x1c\xff&\xf0\x9c\xc0s\x02\xcf <\x1f\xb0'\x04\x9e\x7fI\xe0y\x17>\x0e\xa0\xc1\xe6\xb4W\x1dP\x8c\xe9\x80\xca\xa3\xf6\x10_\x8a\xc0\xd6\x8d)\xb0\xba\xda~X\x98\xdc-\xcd\x87K\x855\x04\xd3&,\xdd\x12\x96NX:a\xe9\x11\x96Ny\xb7\xfe@y\xb7:\x0c\x1f[/\xba\x9d\xb6\x90V\x1a\xae\xce\xab\x98\xac\"\xbd.\x18KV\x11\xb2\x8a\x90U\x84\xac\"d\x15!\xab\x08YE\xc8*BV\x11\xb2\x8a\xe0\xdfd\x15!\xab\x08YE\xc8*2`O\xbe>\xab\x08%\xe4\xa2\x84\\\x94\x90\x8b\x12rQB\xae\xfd\x13r\xd9\xdb\xd2Hk\xe4\n\x9eiv\xad\xac\xb5i\x18_/\xfcW\x16\x8a\x19&nER\xf8\xd7\xe9m\xce\x95\xc1\xa7\xcfQ\xb63V\xae\xf0\xad\xeb\x05w\xbb\xe6\x8eN\xcb\xea\x1a\x1a}(\x03\xeb\x82\x9b\xa9Ts\xdd\xee,| \xfc\xc2\xfd\xed\xce\x1ed)\x9a\xe9\xc2\xfaiU\xdb\xe9\xd7\x05\x0cJ\xbb\xac\x1a\xae\xf5\x1b\xae\xacH\xfb\x9c\xf2&\xd1\xfd\xcc\xcd\xafP9\x0c.\xbcV_(iA\x8b\xbe\xd1\xf9\x15\xbb\xf1\xc0\x17\"?\xf6\x16Tw\x91\xbb\xd6\x01\x03q\x83p\x13\xd8s\x08oM5\x80\xea\xddp\xb7*<\xb1\x88\x96&Z!\n\x88\xef\xd0\xe3\x91h\xaf\xb5\xe70\xd2\xc4\xfc&\xe0\x14\x03V5\xe5\xb6\xc7\x05\xda\x9c\xca1\xb7\x1c.Hu\xc7\\\x0b\xd59\x9d\xe7\x90C\n\x057\x80\x03U\x9a\x89<\xd0\xbdV\xc0\x87^\xbd\xbd\xb8\x04\x0c*\x13ja\x97l\x9d\x8b\xb9\xbcE\xba\x80s\xed\xd6\xdd\x08'^Y\x81=`\xc3\xf8\xe6\xb9({(\x9bE\x88*\xd3\x8b\xdd\x86\x81\x97zQW/2\xbd\xa8\xd1\xea\xee9\x80\xad\xfcZ({OKF\xa7\x8d\x84[\x9b\xcbYa\xefc\x87\xefe\xfd\xeb\x8f\xe9\x81I;\x15\xb7\xdd\xcc\xbf\xb1\xbe'na\x8e\xc2$P\x8e\xf2\xf6\xd2+q\xf7\x04\xaf\xf95\x97\xf9\xa8\x95\x88\x8d+\x06\xcb\xea\x89\xbf\xa3]<\x9e\xc6 \x05\x01\xaff\xa9\xb8\x16\x99\x9b=\x88\"\xdcZ\x90\x1a*\xfd2\xde[\xab'e\xf4\xd2s'\xb8>\xcftr5b\xe1\xb7\x13\x956~y\xb1\x14\xc9\xd5\xe5-hO\xe1\xb7c\x91\xc9k\x91_\xde\x8e'\xea%\xb7\"\x1f\xc5\xcc\xdc\xb0\x15\xbfs\xb7\x17\xba\xd7\xa4^\xe2\xb3Ka\x04\xce\xcft\x18\xb8az&\x823\x99\xc9d\x02\xa2!\xce\x1c\xb7\xda\x9bJnD\xee\xb41i\xdd\xda\xa5\x05\xda\xa0\x90d'j\x03\xcdv\xaci\xb8Lb#\xa6\x8d\x8c\xcd\x0dC\xe6\x85\xc8\xafe\"\xc6e52Z\xf69\x8d\x96\x8c\x96d\xb4$\xa3%\x19-\xc9hIFK2Z\x92\xd1\x92\x8c\x96d\xb4\xc4\xbf\xc9hIFK2Z\x92\xd1r\xc0\x9e\xdc\xd7h\x99\xa3\x97\xf4s\x9d\x02F\x14)\xde\x11\xa8r\xf8\xdf\x06\xbd\xd5+-\xfc\xff\x97\x8b\xf9\xc1\xb3\x83\xffy\xe8\xe4[\xad\x84\xb2\xe6\x10\xbf\x1a\x8f\x8c\x8f\xed\xed\xd8#\xe3\x15D\x80\xbd\x1d\x94]W\x16\xcb\xf7\x15\xca\xee\x81\x85\x8d8\xbb\xbd\xed\x0eo\xfaY\xd8\xcb[\x83\xf8\xc8\\\xd8d\xe9\x0e\xfc\xad\x01\xdb\x11\x02IM\xf8<\xaa\xf1\xf1\x10\xf4aK\x15\x0d)\xe00\x84\xa6\x10\x9aBh\n\xa1)\x84\xa6\x10\x9a\xd2!\x0d\x10\x9aBh\n\xa1)\x84\xa6\x10\x9a\xc2\x08M!4\x85\xd0\x14BS\xf6\xdd\x93\xfb\xa2)\xdd.\xe0\xde9\xa8\x95\xc4\x00}<\xbc\x93E&\x0d*~\x91\x1f \x94\xf0\xe2\xce.\x07Fq\xbb\xce@'\xdf\xe0\xfe\xbdI\xaf.\xdd\xc2\xc9/\x9c\xfc\xc2w\xf9E\x93_8\xf9\x85\x0f\\\xe2/\xd7/\xbc\x9a\x0f\xf42\x9d\xb59%{\xc2\xce\xde\x1c\x9f\xbc\x99>\xff\xaf\xe9\xdb\xd7\x17\xe7'/N\x7f:=9~\xd6\xf9k\xa9\xe1\xfa\xe48xI\x1b\x9d\xdbj&\xec\xcc\xfd\xefy)\xa1\xc2\xb9:\xbax\x81S\x97\x86%\xdc\xb8\x93\x14w|t\xf1\xe2Y\xed_U\x0e\x9e\xfa:\xd5\xab9\x85\xe2Y\xfd\x9fe\xc5\xe6\n\x0f_\xc6\xf2\xe4 U\xac\x0e\x9e\xfd\xfd\xa0kE\x0eF\x07\xf1\xb8\xe3\x7f\xba\xe1\x1c\xfc\x16\x81\xe2\xdd\x0d\xd4\xbc\xf7+\xbb\xc2\xa8\xc3?\xffy\xaey\x9apc/o\xd9,\xfc\x1d_\xc7m\xf3AT\xe5\xe3\x99\x0f\xecv\xfc\xfbv\xc0\x9b\xd6\x03\xf2p\x85\xbc;N#\x98e:\xb9\xf2I\xb7 }\xcf\xed\x92\x9b\xe5n\xc4\xdd\xd5\x8d\xc5\x19Wk\x1c\x8c\x07f\xcd\xbb\xd3Q\x85\x9e\x9d\x8c\x0b\x85\x82\xc7){\xe1\xe4\x9b\xbe\xb6\x87\x0e\x9f\xfb\xd2\xaf\xd55\x80N\xb7\x1b\x1c\xde[\xf5\x1c\xa3vR\x82\x19\x05\xb5\xdbU\xcf\xf9\xcd\xb4\x97\x97\xb9[ ]\xd8uQ\xb2\xf4\xc8\xba\xf6\xc8\xb0L/\x16\"g\x8fs~\xe3\xf5\x8do\xc6\xec\x15\xf8\x0dO\x94\xd2\xeaI\xea\x84\xca\x95T\xd2X\x99\x04\xef\xf6{\x98MVf1m:qo\\\xc7M\xbe\xf4\x7fH\xbf\xf7\xcd\xc0e\x1bP\xac\xfc\xd6\xa3\xace\xe5\xc8\xd8M\xce\xd7k\x91\xbb[\xd2\xe7!sB\x99\xd3\xaaPJ\xe1\xb9\x98(l\xdc0\xa9\x8c\x15<\x05\x91\x88\xdf 1uz\xb6_@\x05\xb4b\x86n\x85\xaa\xb9}7z\x06\xab\x89\xa3\xa9r\xcd\xdc\xd5\x8f\xa6\xa7+qwX9\xd9{\xbb\x8a\xbb:w\x8c\xeb\xc3;\xa4\x1b\xbd\x12\x13UsAo\xad\xf7\xf3\x17\xa7\xafP\xc9{\xa9\x17\xd1\x83\xe7\xc6\xe6Eb\x8b\\\x84\x01\x80\xae\xe9$\x9dT\xdc\x8a\x94\xd9[\xe6\xea\x96\x1ab\xa6\x17\x1ds\xe8{\n\x1dY\xa4\xe5\x01d\xdd\xe7/D=m?\xf8G\x9d\x81\x07;\x9a\xee\x19\xdc\xd4\xcd\xe4\x8ej\x91D\xde\xbc\x1f\xcc\n\xf1e\xd67\x80\xa9O7!N\xc9\x89\xe3\xcdN\xec\xed\xee\x93j\xc9\x8aKV\\\xb2\xe2\x92\x15\x97\xac\xb8d\xc5%+.Yq\xc9\x8aKV\\\xfc\x9b\xac\xb8d\xc5%+.Yq\x07\xec\xc9\x9eV\xdc\xd1\x81\x95+a,_\xadw\xeb\xa1\x97\xb2R\xd3\xd6\xb9\xb8\x96\xba0\x08\x94\x8e\xd9ON`\x06\xb4\xd4\xb0\xff`OGL\xdaG\xb8n7\xf0+\xecg*\x9dv2G%\xb0\xec\xb8\xfe\x14\x03\xbb\xd6\xb6\x12'\xb0\xf5\x97\xdc\xd8\x17z\xb5\x926\xee\x88\xfd\xf8#{:\x9a(\xe8\xc9\x89\x13F\x1ah\x95\xb2SPv\x8a\x8f\x95\x9d\xa2\xc4\xe7<\xfe\xe8\x1d\x1a\x02\xee\x87Ws\"\x8c\x91\xcd\x0cGc\xe64\xb1\x11\x10\x7f\xd9Q0\x7f2\xbb\xd4Flj\xc6\xf7\xe5\xb9\x88\xf1W\xb4vW|\xa8\x01)[@\xe5PV\x84\xe4\x17c\xf6\xab\xd3C\xb9a/\xf5\xc2\xd4o\"\xec\x7f\xe4\x95\xb3h;\xc2\x13\x14\xa3r4p\xf3\xd7\x87\x14\x0fg\xb3\xa9\xf1\xbb\xf1\xd3\xa7#\xf7\xc7\x9f\xc7?\xc0\xff\x7f\xe8\xa0\xc7\xcb\xdb\xd2F\xb1\x03\xfc,_\xc9\xb0\xb7\x98\x12\xc7\xadC\xf9b\x86\xd3\xb9'\xca\xf2\x85\x89\xb0^\x94N\x82H\x03yn\x0c\xb2\xf0T\xc0s0]\xdaXd\xe2\x1a\x98\x16$\xb6\xa7QZ\x90\x9d#\xb4\x04\x81\x12\x04J\x10(A\xa0\x04\x81\x12\x04J\x10(A\xa0\x04\x81\x12\x04\x8a\x7f\x13\x04J\x10(A\xa0\x04\x81\x0e\xd8\x93=!\xd0{\xa7\x05\xd9\xa1\xe3\xdeN\xc1\xbfl\xb8\xac\x15j\x96\xd8\x03\xbfi9\x1a\xad\xea\x9a|\xd9r\xf00~\xfe\xe6\xec\xe8\xf8\xc5\xd1\xc5\xe5\xf4\xd5\xd9\xf1I\xc3\xcf\xb8\xf1\xf1\xf9\xcb\xb3\x17\x7fk\xff|\xf1_\xaf_\xb4\x7f=\x82\x9fk\xce\xc8[\xfb\xda\x80\xb0\xbc\xd2\xa9\x88|\xc0A\x9b,\xfd\x90\xdd\xe4JG\xd8\xcb\xdb\x16\xc8\x12?\x19 \x84\xf3\x84m\x1e\xc33\xf6O\x91k\x0fo\x02A\xba\xd6\xc1\x93[\xaaEWeX\x8fg\x9d\xbfFH\x95\x8d<\xa7\x01;p\xcdV\xde\x91I\x06\xf1-7\\Z\xa7F\xe6\x1e\xfb\xbe\xf5\x8aO\x02\xa8\xb6E?~\xee\xe1\xee\xae\xc1\xb8\xe5n\x8d\xc5\xfdx\x9f\xa1p\x16\xd0\xd3\xd2E\xb1B\xb8\xdce\xd79\x94\xa3\xce\xb1\x1c\xed5\x18\x0cc0\x13%W`\x1e\xb0\"\xbb\xdb \xc9\xc11\xad\x109\xfc\xa7\x8d\x009\xd6\x81\xc7\xf9j\x13\xd5H\xd9{\xbf\x9c<\x87\xbf/\xb9Y\xbe?\xd8\x98\x9a\xa7L\xca\x83+r\xe7\x1d\xc2;\x93\xf2|<\x7f\xfa=\xd2\xf1P\"\x9e\xdd#\xb4\x84_\x12~I\xf8%\xe1\x97\x84_\x12~I\xf8%\xe1\x97\x84_\x12~\x89\x7f\x13~I\xf8%\xe1\x97\x84_\x0e\xd8\x93\xfb\xe2\x97\xdd\x89x l\xbd)\xac\xb8\x1f\xcb\xe4%\xb7\x80I\xb0\xf0\xd0\xea\x88 \x05\xaeQ\x0cvg)n=\x15\xee\xff\xfajg>\x82\x08S)\xd6\x8b\x9c\xa7\xa2\x04V\x00o\x15\xe9t\x9dqu\xf8\xbb\x9bH7\xc2r\x84\xe5\xce3\xae\xbc3\x9f\x1bqpMu\xe20\x16`\xbe\x03\xe6\x1at,VZ\x03\xac\xae\x0d\xc4DM~<8\xc6nE\x15\x06d,h\xec*\xba\xc5\xfa}\x8d3\x180n\xfdap_`\x15n\xb8 \xcb\xd3%\xce\xc2\xab\x8f\xd1b\xf4r\x84cP\xeb0\xde\x967\xe7/\xc2\xfdC\xaep\x04%\x11\x94DP\x12AI\x04%\x11\x94DP\x12AI\x04%1\x82\x92\x08J\"(\x89\xa0$\x82\x92>\x7f( \xfe\xd7\x14V\x80\x94<(\x10kn\x01z\x01\xb0!`K\xee\xa8\x7f\x10\x18 \x80\x86\xed \x92\x97d\x01D\xeaD\x8f^`\x81\x1az\x84[\x0b\xbf\xd7@\xa36P\x14\xd5~(\xa0(\xcc\xac\xde\x11,\xb8\xdc>\x95\xed\xed\xe2v\xef\xc2!.\x84\x8dv= @\xbe'\x0f\"\xc0\xa7p\xc6@.\x9f\xdd\xc5\xc5\xd2\x89\xf2\x8aL)\x8b\xea\xb9\xbd\xf1in\x1d \xa1\x04\x0423\xcf\xd8\xe4@\xab'\xbe\xee\xe4\x00\xbc\xe7\xb8J\x8dO\xb7\xe7\xe1\x04\xc7wX\x15<\xeco\xcc\xe8*\n\xab!+\x04\xcc\xe7\x00\xe6\x99\x01\xd5<\x9d8\xbd.\x15\x16\x12\x0f.\x05(#\xbc\x1a\\\x18\xb4\xd3\xaf1\xd6\x96q\xb6\x90\xd7BU\x0b\x00\xaa\xf1D\x85\xce\xc2{\xf4pQ\xd8rq\x1c\xdf\x9a \xa1@7\xf77c\xe8fT\xa6\x83vj\x8d\xd7\xa2\xab\\\xca\xe5h\xa4a\xba\xb0O\xf4\xfcI\xca\xad\xc0\x04\xc6\xf1<1n?g\x7f\x0d\xf8\xa0\xe3\x8dN\xf7\xad\"c\xcb\xb6\xa0;q+\xed8$\x07\xd8\xaa\x19\xb9\x0e\x9f@\xa9&y\x1c;F\x9b8\x91\xfe\x19\x0e\x00\x15k?&\x83\xfa4\xcc<-K\x8e;J\xb2L/d2Q\xe5B\xe5b\xa5\xaf\xe3\x88\xe7\x8b\xe3\xbf\x8d\xfd}\xe1\xb4Z\xb8t\xbd\"\n*\xe2\xa8D\x04JR\xb4\xcb\\\xdf\xa0\x07\xed\xdeh\xab\x931\xba\xd0\xd50\xee\x95\xd7\x0f\xd7\"w-\x01\xfeq\xe6\xa5\xa6\xd4 \x870W?P\xc83\xbd%\xc3bH\x10\x0b*A\x14[_\xaa\xb4%M\xab\xb9\xf6H\x82\x0f-O\x99VO\x92%\x97j\xa2L\x91,\x11\xd6_H\xeb\x9dO\x91\xa0@\x87\xe5V\xe7\x86%\x00\x9d\xf1\xc2\xea\x15\xb72\x01\xe4(4o\xb5\x1be8\xbdS\xf4\xe2\x9c\x1a\xcbm\x8fT\xbc\x960N\xc28 \xe3$\x8c\x930N\xc28 \xe3$\x8c\x930N\xc28\xf1o\xc28 \xe3$\x8c\x930\xce\x01{\xb2?\xc6\xd9\xe9\xeb\x14\xe1yC|\x9db\x10\x91|\x9d\xc8\xd7\x89p\x00\xc2\x01\x08\x07 \x1c\x80p\x00\xc2\x01\x08\x07 \x1c\xa0=~\xc2\x01\x08\x07 \x1c\x80p\x80h8\x84\x03\xdccO\xf6\xc7\x01PE\x1f\xe0R\xb4\xd2i\x91\x89\xa9\x97GM\xa7W\xd1+(\xf3\x8b/Rs,\n\xcf\xddc3A\xac5\xe8\xc9\x006\xf4q\xdb\xcbf\xd3\x13\xceuo\xa4z\xaf\x0f\xe5\x90\xd4\xb1>v/\x84`\x93\x07Rp\x83h8\x9a\xf9\x15\x05\x01\x17\xfb\xde*\xe2\x16\xcd\x07\x7f\x137ue\n\xc3\x1a\xdeHq\xdb-\xd1\xb5\xb6\xe6\xf1C\xd6a\x83QQ\xc0\x97\"k\xcd\xa3\xf4\xdf\xbd\xb3\xadn\x1a\x8b\nJf\x93\x94P%\xf2\xaeEB\xe6\xed.\xcd\xc6 \xbf:\xe9\x0c\xc1\xbe\xea5k\x99\xb5\xb6M\x90\x801\x02\xc6\x08\x18#`\x8c\x801\x02\xc6\x08\x18\xb3\x04\x8c\x110\xb6{\x98\x04\x8c\x110F\xc0\x18\x01c\x04\x8c\x110\xd6sO\xee\x0b\x8cu\x07\x01z8Bu\xc5\x02F\xdf\x10\xa6@\xe2/\xa3\xffx%}a\xd1\x89jC/\x11\x1a\xc6^\n~-\xe1\xb9Ai\xbc\xa8\xe76k\xa2 \xabv\xc9vz\"k\x10u\x08#\xa9\x85\x1d\xceyf>`\xdca\x15\x1c\x13\xa6\x86\xf11\x87\xbf\xc3\xa9\xc3\x90\xa1\xee|Vo}\xd5\x17\xa1\xe6\x85\xabX\x0fN,\xd7\x0b\x1aEz\x06\x02\x06\x85a\xa2\xe0\x08\xd8\xbc0N\x8e\xba\x12\xb9\x12Y \xdb(\xa7a\xd6 .i\x18\x84\x06A\x00\x1c4\x83\x8f=:\xc5\xd0\xea\xdc\x9d\x05[qn\x1f\xeeT\xaf9Q\x1b\x86\xfd\xe6\xfc\x05\xc66\xa1\xa0\x18\xe4\xf1L,xr\xe7'\x95;6-\x0d\xcb\xd7\x89\xa3\x98*\x14\x8c)}\x83\x93;}\xfe\x02\x0e\xb6\xb4\x86\xb9\x83\x9e\x8bu\xc6\x13\x90\xe8'\xea1\xa8\x03\xcf\x0e\x0f\x17\xd2.\x8b\x19\x9c\x00\xbf/r\x96\x1aN@E7\xe2w\x9d0b\xf7\xfc\x87\xc0\x89\xdd-\xb4\x12\xf6\x13xH\xe0!\x81\x87\x04\x1e\x12xH\xe0!\x81\x87\x04\x1e\x12x\xb8s\x98\x04\x1e\x12xH\xe0!\x81\x87\x04\x1e\x12x\xd8sO>\x0ex\x18!`-i\xa8\x850U\xe9\xab\x00h*\x13\xea\xb8\xb5w+\x96\x87\x17\xfd\x80\xe3\xc8\xf2\x9dL\xdfF\xa1R\x91\xfbU\x07\xe0\xab \x9d\x81\x8a\xaas\x91\xee\x99\x90\xac\x95!\xa8\x1b)\x04\x88 \xbc\xbaWA\x0e\xe8=\xd8X\xef#uG\x8a>)\xfa\xa4\xe8\x93\xa2O\x8a>)\xfa\xa4\xe8\x93\xa2O\x8a>)\xfa\xa4\xe8\x93\xa2O\x8a>)\xfa\x9f\x91\xa2?:X\xe4\xebd\xbc\xe0V\xdc\xf0\xbbq^(+Wb|\xd20\x93\x935\x9d\x94lR\xb2I\xc9&%\x9b\x94lR\xb2I\xc9&%\x9b\x94lR\xb2I\xc9&%\x9b\x94lR\xb2w)\xd9`<6w\xab\xf5R\xab\xbb\xb1X\xebdi\xc6>\xced|\xe2\xfeyZ\x7f/f\x832[*\xa0\x1d:wS\xd8\xa9\xcab\x08\x0fj\xb1,\x17s\x91\x0b\x95\x08\\Q\xa7Z\xf0\xdc\xca\xc4\x9dQ\xe6T\xff\x1cd7cyn\xa7\xf7x6\xa8j \x98\xf3\xe1\xef\xda\x0b;\xd0\x9d\x7f\xe7I\x80\xc6$\x93+\x83o\x00\xd5\xeb\x07\xb1\xa7\xb0\x85\x13\xf6\x81\x80\xdd\xb2!\x9d9\xd1\x18\xe4`V(+3\x94\xbd\\\xfd \x82\x19\x00$\xf8=\xdb\xbdp\xa1dm\xdcN1\x12\xf6F\x08\xe5;.\x87\xaa\x98\xceS7\x0d\x9d;\xadE(\xb8;\xc4\x92_K'O\x83\xee\xb1\x12v\xc4\xcavQ\x87\x9e\xa8\x99`\x8b\\p\x1b\xe4q \xff%0\xb12\xf4\x01\x1f\x7f\x87YLT\xa0\xbb\xd2\x83Bi\xf5\xe4\x9f\"\xd70\xc3\xf0N\x1a\x8c\xaf\x87\x97Cs\xde\xb5\xfa\xac\xf1\xf0\x18\xfe\xa8\x8a\xd5\xcc)\xd00U\xafJ\xdc\xe8<5\xa3\x89Z\xea\x1b\xa7$\xdd\xc1`\x0d\xf0\x8dj\x8f\x1f\xb9\xe5\x12\xe9\xa31^!\xb8\xe5\xee7\xf6\xb8\xd6\xed\x8fO\xbf\xc1\xf0\xa1\xb9t*\x187\xf1S`\xb8\x167Km\xfc\xa3\xf8\x81:Z\xabX\x1e\xa9\x88\x8c\xdak4\xbd7\x91oj\xae\xa1\x13\xc0\x07\xa4\xa3\x86C\x0c\xac\x8e\xbb\xb9\xad\xc8\xafy\x86@K\xf8\x97\x9b\xda\xe3M]\x8c&jc\xef\x7f*i\xed7\xf6kxD\x0c7\x02\xc8vT\xba\xd9\x18\xe1\x94\x8d-M\xfd\x88\xf7\xda\x96.Pb\xd1J\x84\xc9\xc0\xb6\xba\xd3\x10^R\x8b8\x11\xe0&IR\xe4l-r\xdcD\x902^\x9f]\x9e\xfc\x0f\x98\xfc\xc6\x91\xac\xf8\x1dK\xe5\xb5\xc8\x17\x82\x19\xb9PN\xe1\xe4\xa0P\x87\x07\xc4&\xea\x86g\xd9\x93\xa4<2\x11\x9f\x98\x89\x85S\xf7\xec\x98\xfd\xda(\xa3\xe7\xbe\x08\xee\x92\xeb\xc6)\xbb\xff\xf1\x1f\x1b\x872f\x17NO3[\x06\xfb#{\xfa\xedh\xa2\xca5\xfa\x91\xfdP\xd5*\xcf9[h\xa7\x91\xcf\xe7\x99T\xc0\x1a\xed\x8fO\xff\x8c:\x7f\xa2\xdd!\x9a9\xc1T+\xf7y\xa2\xe0\xfb\xf7\xdf\xe2w\x8f\xc9\x18\\C\xe3*;\x0ez\x17\"\xd0\xe45\xee\xc7\x98=\xb6?~\xfft\xc4\xbe\xffn\xc4\x84M\x9c\"\xf1/\xb0\xd0\xae\xadp\xa4 \xec\x10\x89\xb4\\1\xb7\x83\x8f\x9f~;bO\x7f\xf8-\xaa\xf3tw\x9d\x1fF\xec\xbbo\xe3:\xdf\xed\xac\xf3\xdd\xb7#\xf6]\xad\x9f\xefw\xd7\xf9a\xc4\xbe\xaf\xf5\xf3\xe7\x9du\xdc\xf2}_\xf5\xf3/\xffb\x7f\xfc\xfe/\xff\xf2/\xbb\xeb\xfd0b\x7f\xfe\xf67\xc7Bp\xaf\x13\xed\xae\x1a\xb5\xc0M\x17i\xc4@fZg\x02\x1e\x93\xac3\x8b\xee\x8ax9\xfb:^\x96\x92*\x95 \xb7\xc2\x94O\x16\xba\xf3:Q\xe1\xe6q\x07\x19\x9f\xd1sD}\xe7\x9f\x9c\xeb\"\xc6\x01\x8f\xe2\x959\xd466\x13\xee\x04\\\xac\xae'\xf3j\xb7\xc5D\xf9)\x8e\xd9\xe3\xcb\xad\xd5pF\xa0\xc8\xe0=\xf1M\x07xS\xf1tX1c\xf3\"\xb1]\x08L\xca-g\x0b\xed\xa4M\xa9\x1cs\xe3\xbe\x83p\xab\xf8\xa7+o\x0fQ\x10\xf3\xc1\xc6(\xf6l\x90\xd1\xe2\x97\x05` !\x1er\xb7\xcc6\xf4Z\xde*+\xc28`\x00\xc6-E\xffQ`;\xfb\x9bQH\xf2$\xc9\x93$O\x92\x17\xb6\xc8\x15\xd8\xe1\x19v\xeeso(qk\xa7\xae0\x88\x17\x0b\xa9&\n\x86\x8a\xc9}|f\x9a5_\x08\xb6\xd2N\xb6\x02\xd36\xd8\xbd\xc7\xec,\xb0k=w\xac\xc7\xdd\x00:gW\xe2n\xa2*\xb7\x92\xf0\x806\x16\xd8:\x91\xa2[\x9a\xf0M\xc3lT\xb1\x12\xb9LBw\xb0g\xee&\x08\xaf\xd8\xc3\x13\xeb~\xee\x85*-\xf3N\xba\x82\x162aL5 \xbc\xe6\x0b\xe3&{%\xb6\xcd(\x96\xb4\xc2\x8c2\xb9\x92{M\x08*\x962\xa1\xb6<\xf3\xe2\x90\xeb6\xb8W\xa0\xb8\x17\xef\x9b\xc54-E\x86\x1b\x82\xc2m&\xe6\xfe5\xf5\xf2M\xfa`\xcb\x02\x87\x0b\xdc~l\xccMgv\xc7\x04O\x96\x8c\xaf\xd7x\xd4\x1d\x13\x99\xc2 z0\x9e\xa8tu\xe73\x9b\x17\x82\xb9?\x02\xb7)\x9dy\xc2x]AO\x12\xfe\xf1sw\x96\xa0\xb5\xd2\x81\xa9\xb1\x0e\xa0\xc7D\xbe\x15\x8ey\xae\xf9B*/Q+\xf6\xf6\xd4I\xcd\x8d!\x81\x08\x91\x0b\xe3\x85^\xa0\x87\x8a\x80\x1c\x8d@F%'\xb3,\x14\xe4Q\n$3Q8#X\x96\xdc]\x815=l\xd3\x92\xf8\x92\xcd\xe5\x90\xd5N\xf2\\l\xd8M\xd7\x92P`G\x01\xc9\x1f\x1d;\xfaf\xf7 \xd6\x91\x0b\xbd\n\xcc$2\x8b\xa2\xa5\xdc\xe8\x95\x98\x96!\x7f53\x17c,bC\xf1\xdaz{\xd7\xfb\x88\x95\xc7%e \xce\xd2\x16\xe4\xe4\x8f7\xe7/B\xe0_\xb0\xdb\x184X\x86\xd36QU\x1fcvr\xfb\xec\xa0\x07\x8f\xec\xab\x0f\x07>\xd6\x87S\x96\xc9\xea\x03\xef\xf3G\xb1d\x83l\xcd\x8dA\xd7\xa7h\xe2c\xfc\xee\x19\xe4\x0e\xee\xe8\xe6\xd6\xdef\x8c\x0e\x0c\xacnc\xb5\xca9\xf5\xdf\xab\xa1\xbb\x04\xfd\xban\xa7\x1bWtD[9`+w\xedU\xe3R;M\xdd\xb5\xe6\x98\x9d\x13!\xfa\xef[\xfb\xba\xef{\xe1n\x1f\xdf\xebb\xe5\x865\x80\x82T\xb1\x9a\"\x8f\xff\x00\xdd\xbb\xbe\xcfy\xceW\x03\x06\x00(X\x0f\n\xb4\x14`J\x01\xa6\x14`J\x01\xa6\x14`J\x01\xa6\x14`J\x01\xa6\x14`J\x01\xa6\xf87\x05\x98R\x80)\x05\x98R\x80\xe9\x80=\xd9;\xc0t\xa7\xfe;@\xf3\xd5:\xdb]\xca\x92\xdeKz/\xe9\xbd\xa4\xf7\x92\xdeKz/\xe9\xbd\xa4\xf7\x92\xdeKz/\xfeMz/\xe9\xbd\xa4\xf7\x92\xde;`O\xf6\xd5{+\xdf\xa2\xe3\xf2\xc9\xe9gl\x0dB^y\xdayfE\xae\xb8\x95\xd7\xc0Uo\x0f\x9d\x86\x8brg\xbe\xc3\x03\xcfi\xceN\x98\x1f\xa6=O\xb1\xc8P\x8f\x8b\x81&\xf2\xa6y|\xa0\xeb\x84%\x05\x9e\x14xR\xe0I\x81'\x05\x9e\x14xR\xe0I\x81'\x05\x9e\x14x\xfc\x9b\x14xR\xe0I\x81'\x05~\xc0\x9e\xec\xaf\xc0WQ\xfe\xe8\xd0\x1f\xcb%Q\x96\x81\xe0\xa0o\x81-\xc5\x89\x1d\xf0,\xf9\x04%\x07\xa3]\x8e\xe5\x14\xf9\xbfg\xe4\x7f/\xf8\xe2Wi\x97?\xc9\xcc\x8a\x9c\x80\x0c\x022\x08\xc8 \x83\x80\x0c\x022\x08\xc8 \x83\x80\x0c\x022|A\x022\x08\xc8 \x83\x80\x0c\x022\x08\xc8\xf8\x0c\x81\x8c\x8b\xb5\xb6\xe7\xb9L\x06x}\x98\xb5\xb6\xd3\xb5\xab\xd35\xfb0\xd7\x0b\xe4#\x9e/\x1e\x8b\xc4Q\xf77\xec\xe9\xb7\xe3\xef\xbe\xfd\xbe\xe0V\xaf:D\xda\xee!\xd5\xc8\xa8\x9ea\x11\x13\x14\x179&A\xe5\xac\xac\xeb\xf7qK\xae5\xec\xeb\x86\xafOnyb\x8f \xa7\xc5\xa9\xea\xbf\x0c\x90;c{\xde\x8f]k_\xef\xfc\xac\xb0C{\x97j\xef\xce/\x1d-\xbd\x0cY\x94\xfaw\\&^\xda\x1f\xc4\xa2D&\xd5\x0e`Z.\xda\x85\x8f\xb8\x0b\x1f\xdbo\x0e\xf6qh\xd6 `\xe5S\xccY\xb4\xbb\xf4W\xb4W\xe5BG\x1bP\xae\xb7\xe3\x98%\xa7\xd6\x85\xed\xb1\xd0C2\xfb\x8c\"\xa6\xbei\xc9\x07\x8c\xd11\xf4\x8f7H\xa9\xfa\x8dQB\x9a#y-\xcc\xf8(q\xff\xff\x99\x17\x0ba\xceE~\xec\xaa\xf7'\xd9\x94[\xbe?\xbb\xe97\xbb\xea\xac\xca4\x08n\xfeM\xa5\xd3c\xd0\xcb\x18\x0c\xdf-\x834\xd3\xb5\xc8\xd7\xc2\x16\xbd\x12\xb4\xc7\xc5\x81t\xd9<\xe3\x0b'\x05\x9a\xa5\xbeq\x02\x97\xb4\x8f\xdc\xcfU)@\xca\xd5\x93\xea\x87\x85\xeb{\xa2^\xb7\x7f4,\x95nV\xb3\x02r\xbc\x0b\x99\xe3 3L\xfc\xc3\xdb\x01D\x1e\x9eSZ\xca\xccc\xf4P\x97Uo/q\xd8!WV\xeat\xecT\xb7\x8d\x9d\xf84\x82eG\xf0vI\x99B\x11\xdf\x81R)j\xe0\x9b\xc6\xc6\x17\\*\xa6\xe1\xa1*'[\xf9\xd18\xa5h.\xb3\xcc\xe9\xb0\xa7\xe1\xb5%'`9n\x89\x90iIT\xa8/-\x84\xd3\x99\xb0\x0eK\xb9\xccP\xf2\xaa\xfa\x9dZ|\xf3\xd5\xefn\xed\x03\xe8i!C\xb6\x1fD.nx\x9e\"\x16_\x15vB;\xbcn\x84\x0f\xeb8\x11O\x8a\x94]K\xce\xe0\xdd\x8b\xea\xb9\x9c\x1c\x1e\xa0\x90+a,_\xadw*\x18\xae\xf6\x14$\xc6\xca\x9f\xd9\x0f\xf5\xa5N\xae\x90\xcf{\x95\x92\x97\xa8(\xf4 \xb5F\xec\xf9\x9d+X>\x1e\xf5\xff\xfa\x1f.\xf1E\xa3&\xdd\x0bU\xac\x0e\x9e\xfd\xfd\xe0\xf9]\xa8q0:x~\xe7K\xbf\xd6\xae*\xfc\xf2s\xae\x8b\xf5\xc1o\x8e\x98\x01\xa39xV\xafS\xa7\xf1\xfaXc\xb1\xd9F@n5\xec\xf2\x95\x88\x89\x12\x12\xa0\xf4\x99\x00@(Z\xc7\xf6\xbbJ\xf0\xa0\x10lo7\xff\x89/\\\xa5W\x952\xed\x87\x027O\xed\xca\xb9\x11\xb0\xd1\x99\xd6`\x8a\xb0\x1a\xc7X\xac\x0f\x06=*v\x1c=*\xe63\x8f\xfay\xe2\xfb=@\xba\x99V\x0b\x91WS,\xdf\xb3*\x11\xf7\xeaI\xa11+\x9b\xc4+\x0f\x0cP\xf8\x12\x1a\x00q7\xe1\xe1\xa7xM\x91N&\xea]\x9d&\xde\xc1\x9aU4\xb9\x8d\x1dn~\x0d\xeb2\xd4/'9\x0b\xd3\x0b\x8f\xdd\xcc\xc0\x88T\x9fS9_w|\xca&\x06O\x8a\xbd\xab\xc8\xfa\xddx\xa2\xfe\x9f\xf0 J\xb4\xc06\x1eae(r\x1d\x94\x12\x82H\xbb,\x1a!\xbf\x9f\x07I\xe2'hJ[\xd1?\xea=\x16k\xadX*\xe7\xf0\xde\x1e\x98\xa0\xb1\xb2\x89_r\xc3i\x02FY\x9f\xbaaI0\x00\x07\xfb\xe7\x88\xa5b\x1d^\x9e\xf0\xe6\xbd\xda\xb1\xf2o\x83Hu\x0f3\xfeW\"\xcfE\xef\x1d\xb9\xf5b\xb5w]|\xd7z\xce\xf0#\xb0\"0\x9f\xce\x84(1\"\x7f\xe3\xbe\xe0*\xbe\xc4VEf\xe5\x1a2\x11K\xcfJ0\xbf\xf4\xf0\xb7\xe6\xc2\x08\xdbO)\x96\xfd\x81Q\xb0\xe4\x82\xae\x1fU\xac\xf0\xe9&3]s\x99N\xf5u\xf7c\x91\x9b\xc5\x9b\xae\x16B\xc7\x15.\x84+\xe5_P\xaa\x8d\xc7#\x92\x13\x95h\xb7K\xee\xd8\xc3 \xde\x8f\x0e\xf0\x16\xf6\xad\x0f\x1bU\xadj{8]\x03\xc1'\xb2\x84b\xd1@\xd4D\xf1,\x17<\xbd\xab\x0b\x01\xe9\x94\xce\xcd\xb0s\xd3Z;\xb8';\x0fL,%\x95\xab\xdf\x9a\xfd\xcfA\xe0\xe4\x8a\xe1\"c;\xc6j7\"7\xe7\xaa!\x83\xc6\x14\xf0\x18\xc8E\"\xd7\x12&u\xb3\xd4\x13e\xb8\x95f~\xc7\x12\x91\x83\xd3O\xc4y\xd9\x8b\x92\xe9{\xb15X\x82\xabB\x8c\xe7\xba@\xa3Q\xf4\x82\x9fc\xf0\xb8\x86\xe1YC\xd8\x117^\xc7\xee\xe1\xd6\xa8\x16\x07\xd5\x19\xb6\xe0\x8b\"\xc8\xa1+n\x93e\xa8\xa4\xf0\xb28h\xe1\xd5\xd1\xd3=M\xa4:B\xa9\xe7\xde\x81 \x80\x8d;\x85HB\xa9\xf7E\xa9\x9bT\xfaE?\xb4\xd3G;'\xad\x9c\xb4r\xd2\xcaI+'\xad\x9c\xb4\xf2\xdd\x93\"\xad\x9c\xb4\xf2}\xb4\x0b\xd2\xcaI+'\xad|\xf8\xb9!\xad\xbc\xb7V\xee\x04]R\xc0\x87\x9dwR\xc0\x1fF\x01G\x1dv'\xbb#\x9d\x99tf\xd2\x99Ig&\x9d\x99tf\xd2\x99\xbf6\xd9\x9ftf\xd2\x99Ig\x1e~nHg\xee\xd0\x997j!\xcf\xefN\x8f\xfb\xdb\x00\x17\xa4\xb8\x90\xe2B\x8a\x0b).\xa4\xb8\x90\xe2B\x8a\x0b `\xa4\xb8\xf4\x10oHq\xa1s\xd3\xe3\xdc\x90\xe2\xd2T\\\xaa\xb5\xc1\xa9\xa0\x04SZ{`\xace\xde\x19\xb0\x03\xb2\xd3\xe3\x1df\x17\xf2x$%\x88\x94 R\x82H \"%\xa8\xc7\xa4H \"%h\x1fa\x8e\x94 R\x82H \x1a~nH \xda\xe2\xf1\xf8v\x9d\xb8\xddZ\xe0N\x05\xf7G\xd7\xe1\x01y>\x0e:\xf7\xe4\xf9\xf8@\x9e\x8f \xdd\xefd{\x0bWl\n\xa4\xdd?[\x91T\x90Y+\x0b\xf5\xd4\\\xef\xee \xd3c\xdd\x08\xb9Xv1\xd3\x11\x9a<\xa7\xb9Ht\x9e\xde\x83\x91\x0f\x9c\x8b\x97\"7\x0e\xac\xc5\xe3\xb1\xfc\xafP<\x9c3\xdf\x08\xc3FP\x99\x91\xc6\xeb\x9b3\xe1H\xa6\xaei:v0QP\x08n\xbe1\xfbI\xe7L*c\xb9J\x04&\xc6\xbd\xd6Y\xb1rrv&\xaduM\xacu&\x93\xbb\x11\xb6\xed\xb9*\x10\xa7/Y\xa5\xd2\xf6\x12\x0ed\xdeE` \xe8WR]\x89\x94\xad\xb5\xceP\xd8,VE\x06)\xd2\x06,@\xa8\xe2\xd7\x00\x92\xd6\xc3\x0b\x01\x9c\x19\xc5\xd7f\xa9\xcb\x07 x\xe2{pZ3\xac\x83\xcd\xb9\xe3\xb6\x13U\xa6\xdboNp\xf0ZLT\xb5\x18\xac\x9aQ\xa8\x148o4w\xc6+\xb5\x13\x16\xa9X;\xc1m\x1c\xb2k\xd6g\xfcZ[\x8f\x88!\xbc2\xd3v \xe0\x85;\x03p\xeb\x9d\xaa\xb9\x86\xab\xa2\xf6\xeb\x1b e\xd4\x03&\xca\x8ad /Qdw\x8e\xfd\xe4b\x9d\xf1\x04/\xe8cG\x1be\x1b\xf0/_w\x9e\xeb\x15\x0c\xde\x8d\xfaIu\xbc'j\xa5\xd3\"\x13#\xa7\xdf&\xb9\xe3 \xcc\x885w\xdb\x8f\xaf\x050\xe4]\x9a] \xb1f\xba\xc8\x19\x9f\x19\x0b\x0fZ\xb8;2\xc9\x04\x079d\xa2\xdc}\x0e\xfc\xf7q\xa3\x93\xba4V\xab\xeeD\x05`x\xf0\xc8\xc6\xb5\xc8\xef&\xaaL\xb2\x7f\xc3\xbd\xf6\x9fj\x81\xcf\x02\xa42\x17\x89\xbb\xb4s\x91\xc1\x08\xb5?\x1b\x99^\xc8\xe4\x1b\xff\xf0\x08\xcf\x8cfK\x91\xad\xcdD\x15\x86\x19\x99\nc\xc5\x9aq\x96\x8b9O\x1c\x0dE\xef,8Y\x08.\xfe\xbb$C\xcd\xa9\xa4\x8e)RG\x17-W\xe8\xc8/@\x1dM\xfc\xc3\xffZ\xdd_\x17\xa1\xd1sh\x93\xa5\xc2\x8a|U\x82\x1fn\xae7\xee\x7f\n\x92\xe2\xc3\x10b\x08\xcb].\x8e\xc5\xfe\xec\x85\x87\xb6\xd4\xe4\xben\x91\x9a\xd8\xd3gO\xd9\x8a\xaf\xd7\x00\xbc\xba5;=\x1e1\xce2i\xe0\x94\x019{U\xc61b|\x91\x81w\x9c\xaa\xcb\xa50\x08\x86\xc0\x88\xaa7,<\xae\x17m0\x08\x05\xf0^\x06\x9c\x9e\x1a\x1d\xe89\xd6\xaf\x01u\x9a\x85;!\xc8e=n\xa0\xcf2\xad1\xd6\x89r\x8b\x89\x90ty\x08\xa5a\xa9H\xc0G\x10(\x1e~\x04\x7fl\xa9\xd5\x88I\x95\xe4\xb0\xba\x8ejgw\xec)\xfa\xfd\x8b\xeb\xc0\xfb\x80h\xf5\x8d\xea\xd6%\xeb\x03k5[\x01 1>\xb7\"g\x85r?\xbb\xf5Xr\xf0\xdc\x07\xde\x08}\x0b\x95\x0eS\xe4\xeb\x03:Q)\xb8\xe9\xe6b.r\x10!\xcba\xf1@\xee\xe5\x1a\xdd\x00\x7f #S)\xc0\xd9\xa9\x00m6\xc0\xcd\xa5\x0c;\x97\xb9\xb1L*i%\xcf\xe4?E\x8a\xac\x98+?\x1b\x10.\x03\x97/\xc3\x0dtr5\x9a(\xe1\xb9\x9b\x0f\x7f\x98\xe1\xa2\xb8\x1f\xfeT\xf1~\xc2\x97\xfa\xb2\x9b\xae!\xa3\x86\\\x8a0Aq\x84\x91\xcb\xea\xc6\x1c\xb1+\xb1\xb6\x01e\xc2\xf8\x89p\x8e\xa0e4@Ls\x91\x08y-\xf2\xa9?[\xbb\x8f\x02\xfan\xb37\xbe\";\xf2\x872\x9cU\xffO\xf43\x0e\x17\x1bv\x83\xaa\n\x1a>|L\x90\x88M-15\xf90 j\x96\xa3o<\xd7N.D!\x14\xf6\xc5\x1ds@\x89\x96\\-\xbc\xa5\xa4\x0c\x0dY\x99E\xd7\x05\x7f\x0e\xc6\xa7\x97\x9e\xa3\x95\x16%\x14\xf6\x94\xb4\xae\x0f4P\xb1\xa0\xcd\xcd\x90\x8b\xdc\x1e\"\xcb\xf7\xeb9\x9e\xa8S4\xa9a\x1c\x17\xda\xef\xfc~\x00r\x87\x16\xab\x10*\xe2\x0e\xc2\x98\x9d\x96`\x04\xcchT\x1e\x8c\xd1D\xf9\x13V\x1a\xb7l\x0d\x9eBX\x04\xdb\x1f\xb3\xa3\x8a\xa9\xf10^\xcf\xa6'\n\xa3d\xba\xf94` \"@Y\xde4V\x9el\xc0Z\x90U\xa4\xc8\xc5p\x9b\xde\x85a\xbe\x83b^\x7f7n\xf7X\xa1f^\x11\xad8\xdc\xee\xab\xf2%\xc8\xc0\x81\xb3\x0e\xf4\xa8\xa6[\x93nM\xba5\x87\x11=\xdd\x9atk\xd2\xad\xf9E\xdd\x9a\xaf\xb5}\x1b\xb8\xa5\xe3\xe5t\x81\xd2\x05J\x17(]\xa0t\x81\xd2\x05J\x17h\x8f\x0b\x94.L\xba0\xe9\xc2\xa4\x0b\x93.L\xba0\xe9\xc2\xec\xbc0\xcf\xb9\xb1\x8e\x87\x11BK\xf7%\xdd\x97t_\xd2}I\xf7%\xdd\x97\xbb\xefK\xc2f\xe9\xea\xa4\xab\x93\xaeN\xba:\xe9\xea\xa4\xabs\xd0\xd5IW%]\x95tU\xd2UIW%]\x95tU6\xaeJT*\xf9,\x13\x14\xe3\xf3\x11\xd8\xc6\xee\xa5\x17\xe9s\x08n#I\x85$\x15\x92THR\xb97\xcb!I\x85$\x95/WR\x91jA\x82\xcaG\xe0\x1a\x1bSm\xe0\xc9\x0d\x07\xb7\xff\xb27XE\xd72m\xe8Q\xa4\x03\x9d\x036o\xc4\xc6\x1e\xfa7\xee\xaa\xed.E\x02\x15 T$P}\x99\xac\x91\x04*\x12\xa8\xfe\xb8\x02U\xfb\x06|\x05\xcb\xf6\x9cg\\%\x03 \x07b\x16}\x98\xc5\x96\x15G\xc9\xe3\x08\xba\xa7e\xff\x04\xcb\xfeZ\xdc\x82)p\xc8\xe3\xbf\xaej\xdf'p\xbb\xfa<\xe79\xef\xb3/s\x9d'b\x8a\x9cf\n\xefE\x8a4p\x7f\xd1g\xbf+\x19\xb7k\x14%s\xdd=\x12\x12]It%\xd1\xf5\xcbd\x8b$\xba\x92\xe8\xfaG\x15]7\xa4@\xc5\x0b\xb6\xff\x85\xbe~\x80\x0b\xb9\xebJ\xbe\xb8s\xab`e\xd2\xefV.T*\xf2\xecN\xaa\xc5t\x80H\xd2\xa4\xd4\xb7e+\x0c\xc85\xbe\xb5\xcb/\n\xdf|w\xdd<2\xee\x1e\xc7S\xe4\x0eN\x18\xf3D\xf9Y8\xa2 ?\xe2\x96\xbfz{q\x89\x89\xb5\x81\xc1\x97\xad\x96w$\x94\x9fnL\xacZ\x1f0\xac\x12\xe6X\xf5\x03\xad\xba\x83&\x90-\xc0\xb1K\xf4j\x16X\xac\x9eO\xd4\x82\xafV\xcc,\x1dw\xfb\x13\x8b\xe8\xc9\x16\x86\xfd\xc9]O2\x85\xd7\xf4\xfd\xa6\xeew\x89\x86<\xb0e\xf6\xce\x88tk\x0bS\xac\x0d>\xc0\xef_\xa9\xe9\xf8\x8a/\xf0\x97\xf7\xa6gS\x85\x8a\xafN\xf8z?Q#\xd4\xf4rFc\xffJ\x89\x03\x9e\xc4\xb1\xf0`\xbe\xc4\xa7\x06\xaa\xa9E7v\x17C\xac\xd1\xb6\xeb\x16y\x85Z\xb0k\x99\xc3\x8b<\x9e\xeda\xcei%n\xaaT\xe5\xcd]\xd4\xb9\\H\xc53_\xc2\xf1\x9aj\xc4\xa6\x98\xcf\xe5\xed\x98\x1d\xd9JZ\xd1\xf3\xd6\xda\x96\xbcj\xa2J^\x85\x9c+I\x8aU\x91ao\xc0D\x81\x942\xa3\xbd\xc0Q\xacS`{\x1c\x1e\x03\xf2o\xe6\xe4\xf0\xa0\xfe\x08\xd8\xd8\x1d\xdc\x18\x98A\x96\x1b6\xcf\x85\xc8\xe0\xaf\xe8\x14\x15\xebN\xf6U[\xa5b\x8dig\x8b\xf5\x10\xed\xa4\x9c(0\x85\xdd\xe5\x89\x8b\x10\x17!.\xf2\x07\xe6\";%\x89bm\xee\xcfH\xfa\x887\xc4a\x88\xc3\x10\x87\xf9\x129L\xccbVR\xd9\xf1\xf5\xd3\x99\xb0\xfc\xe9\xf88z%\xe6<\xd7k\x9d\xbb\xbfz0\x05c\xf9\x95\xdb\xf1\x9d$\xe0\x0b\xb2\xf8]\x87u\xd9S\x80\xdb\xdc\xa0D\n\xff\x9b\xd6\x0f\x17$\xb5\xd47lU$\xcb\xba\xeaP;\x8f}m\x0b\xd5\xca\xed\xde\x99h\x95\x03\x1b\x86\x7f\xf89\x03\x08\xe5X\xaf\xf4\xa8\xdfB(a\xa4\xc1W\xcf\xa6\xff\x1f{\xff\xbe\xddF\x8e$\x0e\xc2\xaf\x82\xd1\xf7m[\xee\xa6\xe9\xb6\xbbk\xf6\x8cz\xe4o\xa5\xb35ZVeI\x8d\xad\xb5\xb4\xbc\x97G\xb5\xeb\x993\x12\x84$\x08\xbf\xac \xfc0\xd8\xbb\x11r6\xb7b2ZCT\x1e\xbc\xb9\x83\x01\xd8\x1a\xf6\xc9gn\xf8\xb4&\x9f\x7f\xf60\x86XP\xe9\x81-\xae\xf2\x90\x90\x0f\xae\xe1\xb0\x8c\x1b#g\n\x17/\xad\x8f8\xfbo\xa5\xe7\xb2&\xc2\x8at!\x95h\xc12>\xdd\x17\x8e\xb9\x8f\x89!~\xfd\x06x\xe4\x96\xf7\xbd\n}\x1f\x0c\xaf\x85\xb7t\xcef\xf2^\x91\n4\x06+\xc5aM\xbeP0\xbb\x80\xf7\x06P \x848\x053\xc4\x07\x12\x81B\\\x9bH\xf1\x1c\x970\x8d\x83\xe0\x80\xadI\xdf?F\xaa\x8d\xe5\x0e\xd7O\xd6\x1fC\xb4\xee\x81a\xb8g\x80\x0e\x87(\xa9f\xf9\xaa+#\x82A\x86\xc2\xa0\x97\xe0\x0c\xa6k\xdfA\xd1\xe2\xf3B\xddmx\xe9\xe9[\x1c\"\xc7k\xe3\xfb\x89N\xa9b\x8e\xff\x1b\x06\xc1\"G/E(\xf1\xf61\xa8\x0c>`\xd7\xae\x9cAp\xea\xd8\xc1p\x9a#\xb7\xbf?\xa6\x8f:U\x7f\x17\xb3I\xd3)m\xac\x0cAcx\xae,\xa0\x82\x15/\xeb\x97\xda\x82\xf5\xde\xfa~Y\xcb\xaa\n\xe5\xc1\xff\xed\x00\x0ex\xf3\x0f\xa9=\xae\xf5eg\xa7G>\x80\xdd\x85\xcb\xdd\x03}5 \x86\x1b\\a\xb5\xc56\x07V\xeb\xb7\xb7K\xa0\x93jM\xaa5\xa9\xd6\xa4Z\x93j}W I\xb5\xee\x94h\xa4Z\x93j\xdd[\x0b\xee%8?\xadj\xdd\xa2>V\x15\xb9\x8dZ#C\xa5\xd1\xeb\xe4\xbdt\xc5\x1ay\xd3\xa9j>U9\xf2\x1c\xf7* \x86J\xac\xe7DMu7\x02a\xfeQ+\xaa\x9c\xf2\x14\xeb\xaax\xd9\x92\xf1\xcdx6\x13=C\xc9\x1bw\xad\x16\xdd\xda\xb4\xf63\x00\xfas\xc2\xd6\x0d\xd8\x89\xffI\xfe.&\xa7U!\xd8f\x04\x81N\xd1\x17\xb8\xc4_\xfd2j\x0f\xda:\xbbd\x9b\x15\xf7Y\xd66q\x0c\xe0\xfc\xbd\xcd\xad\xd0\xbabp\x15Q\xdb\xc2\xee\x12\xb7K\x11\xfb\xa3R\x9c\x1b\xcc\xd2\x8dT\xb0\x95\xbdU\xc8\x1c\xee\x1f\x9545\x9f\x0d=\xd1\xc2\xa8\xff\xf7\xff\xfe\x7f,\xe3\xb1\xcdx\x92\xac\xd0\x06\n\xb3DJZ#\x92\xe9\x80\x8d3\xcbR\x0ez\xf2\x82+>k\xd2\xb5\xf3\xfc\\\x903\x0bn\xe396s\n2f\x11\x97\x97XO\x0ei\xc150\xd4\xfcp\xf7\xb7\xa6\x01\xb4\x91\xfc\x16\x19Bo\xb4\x1d\xdfZ\x91*\x9e\x84c(^90\xb6pIL\xb8\xe5\xbb/\xba\xdfr\x0b\xa1.'\xacZ\x92\x83\xd57\x9c\x01\xd8\x0e/\xd28\x13r)\x1c\xb1\x96\xc6\x1ek\x9d\x08\xae\xd6NT\xb99\xa6\xb2L\x13>sG\xc68;MN\x99\xc4\xec\xf5\xa2\x95N\x99\xd2\xeaQ\xf1\x03\xec\\\xa4\xde\xae\xffh\xca\xda\x84\x9d\x0b\x99\x86\x82\x04\xf1\x1b\x1e\xa6\xc2Uu3\x97\x89\xc0\xb3\x00}\x1d4\xbe2\xc1\xa7\xad\xa0iQ\x04\xcb\x1c \xad&O\xba\xd1P\x1a\xe1\x90`,_,;\xedo\xc8\xf6\x82\xfc\x92\x116,@}\xad\xe3+8@\x17N\xb5\x03\xc2qM\x1c1\xc2\x9c\xd0k\xc00o-\xcf\x02\xfa\xbf\xfc\x0f\x17>\x81\xa9F\xf7Be\x8b\xbd\x83_\xf6\x9e\xafB\x8f\xbd\xc1\xde\xf3\x95o\xfdVCZ\xbd\xfb\xe5U\xaa\xb3\xe5\xde\xaf\x8e\x98\xa1\xccc\xef\xa0\xda\xa7J\xe3UX\xcbFc\x00\xd9\x86\xe2\x06L\xa6\x81\xcd\x8b\xb9\x8a\x94\x90\xc0\xd0\xc7\x02jJJxD\xa59$\xfd\xd8J\xc1X\x9b,\x0b\xb8\xc3\x9c\xb2\x926iC\xa1NU\x98\xdd\x08\xd8\xe8DkpDX\x8d0f\xcb\xbd\x9ds\xb0\x82\xfe\x89\xeb\x84\xbc@$\xdd\x04\x1e\xb9*\x96h\xe7\x1c\xcf\x9e/L\x01\x1fN(\xceb\xf9\x90X\xd3\xb4\xc8\x8ceJ[\x87'%\x13\xac\x05\xab\xe3\x14\xe9$R\x97U\x9a\xb8\x04\x9c\x154\xb9\x89\x1d\xb6W\xba]\x84\xfe\xf9\"\xc7ay\xa1\nm\x0cW\xb0U\xd7T\xd4\x9bE\xaa\x18b\xebE\xb1\xcb\x82\xac/\x87\xde-\x1e\x12\x0f=\x82m\x19B\xef\xb0OV0A^\x02\xd6\x9c\xd1\x06\xa3\x1di5\x91a\x17936\xcdb\xcb\xf2\xcc\xbf\xdf\xaa3BE\xcfDN\xa7\x02\xe2\x02q\xe8l\x86\x91\xaa\xed\x1d\xf7\xd5x\xa5\xa5\x1b\x16\x87\x92,\x0d@\xf0d\xc0&b)0\x01\x0f\xa8CD\xaar\xac\xbc;\x87\n\xf6\xfa\x14\xec\x05F\x80\xba`\xa8\x16\x05\x93\xcfO]U\x14!\xa5\x15j\xae\xbc@\xf4\x12\xf7\x88\xab\x8a\xb9\x8e\xceg\xaf\xfe\xa2\xc7\x15\xecB0\xf6wJ--\xba\xe6\xeavY\x9f-\xb8\xa0\x9bGe\x0b\xef\xb4\x1e-\xb9\x9c\x8ct\xe3\x9d@\x9b\xd4\x9b\xa6\x11\xc2\xc4\x85\x8f\x1f1\xe5=\xfd\x15x\xc0\xfd\x0c\xa5~\xda\xed\x92;\xf6\x00\xc4\x87\xc1\x1eJ\xe1>\x11\x885\xa8*]\xd7\xc1i\x02$/\x92+\x01\xa2\"\xc5\x93T\xf0\xc9\xaa\xaa\x04LFtn\xb6;7k\xb8\x039\xd9x`\xcaZR\x8e\xfd\xb5\xd5\xbf\n\n'W\x0c\x91\x8c\xe3\xf8\x1aLH\xdc\xcd\x072l\x85\\\x12}\x90r)aQ7s\x1d)\xc3\xad4\xd3\x15\x8bEj\x9d\x12Y\xe2\xbc\xec(g\xfa^m5\xd9r\xa9\xd32{f<\xd5\x19\x96t\x16\xe2\x16\x18<\xe2\x90\xb3\x99\xbc\x0ej\x82\x837\xc1:\xcfz\x8a\xef&\x8b\x07\xd6z2\xd9\xc2\xc4 \x96\x99\x199\x82hr$lI\xb0[\x9az}<\x17a\xb1\xce\x9aq\xff\xe4\xb3\x06f\xb7\x95eX\xc7\xd3\xd0\xff\xf0\xb3\xb4\xf3\x17\xeb\x10\xdd\xbf\xa5\xf6\\g\xdd\x01\xb5\x05a\xc8RW\x88\xc8\xdc\x81\x89\xdd\x03\xafV\x7f\x9c\xbd\xf6\xd3\x07:\xd8\x02gk\x90\xf7\xc1Y\x89~{B\xb8{f\xc5\xe6v\xe4\xaf\xeb\xf2\xd7}\x00E\xd8,\xb4\x19\xfa\x10r\xe1\x84\x16\x89\x98\xf5d\x1c\x13l\xab\xb7\xb8ta\xadK@\xf9X\xc4\xf3\xbf<}$T\xac'N\x0e\xfa\xaf\x1e\xf9y7\x90\xb1ymR\xffy\xd7\xba\xf4\x9b7\xef\x86\xc1\x8b9O\xfbD\xd4\xb1\x9dWU\xca\xf0\x83>\x8a\x1f}\xc8\xae\xd1\x9a*\xf6\xa0n\x81\x8f\xb5\x9ax[\x0d\xfd@s\xa7\xc6\x8cW\xa0\xee\xf8K1\xd8 \x06\x90\xf5\x8d\xbf\xf1A\xab\x12\x02\xf1\xda\x04 !G\x1dK\x08-\xe3\x80n\xb9\x1as\xb3\xf4\x0d\xaa\x8dZ (\xb8*\xe1\xa0\x93l\xfa\x9f\xe7 \x91\x1a\x91\xda\x06R\x1b\xe3\xd5p}\x88\xe3\xbb0.6l^9\xaa\xedz_\xf3D(H&(m\xb0\xb8\x8d\xc5\xd2[\x0d\x12Tz\xa7\xff\x1b\xc6#\xe5Q\xedlw>\xf1N\x1c\xf0\xaf\x03\x01y\xf8\x9d\x00K\x053\x99\xb4N;\x00\x9d?N\x9ce\x91G\xd1kA^\x93-E:M29\x19\x1e&\xc9\xa11\xc2n!\xef9\xb4\xef\xa1zlO\x16n\xe45\x7f1\xc0\x87\xbeb5\x911\xb7\xb0t\x01\xe2\x17\\r\xf9j\x18\x0c\x80n._\xc8\x88\x04\xa3S\xb7\xe7\xc92R\x80\xba\x0d\xfe\xe3\xf3|\xb0|\xda\xb70\xd2\xde\xa0\xe9\xdb\xeb\xd3s?`\xc3\xc7#\x0d:F\xeaN\x186\xab\xb8\x9d\xdb\xa7\xfaP2Xk\xad\x82]i!OU\xc2\x19]C\x80[\x9c\xbf\x86\xc7iO\xae]]\x01\xac\x92\xc0\x89\xb2\"]\x88\x89\xe4\xe9\xca\xdf\xa7\xbd\x0dA\xf8\x1e\x9f\x82$\xaey\x02\xfc\xba\xf1\xe3VJ\xfa`Cj\x07\xe0f\xc9g\x9e\x99t\x03\xac\xc4\xad\x1d]\x89\xd5\xc6\x99}\"v\xee\xa1\xf2}\x82\xdcq\xffD}\xd5_vd5;\xe53q&~\xcb\x84\xb1C\xfc\x1e\xa9\x10X\x10\xcc\x8d\xc0\x96|&\xd8B\x1b\xcb\xc4t*c ~\x01pqh\xcb\x1b\x13\xe1\xda\xddS\xe8\x0e\x83,F\xf7\x8f\xc21\x95\n\x93%\xd60~\xcde\x02\\EN+\xc0\xc1\x8e\x8f\xa0[\xa4n8\x94}\x0f\x98\xb4\xa5\x8b\xde\xb2\\\xd1\x85\x14\xd0\x1biDc\x82\xfdLT\x92\x7f\x00#b1\x16\x13'\x8d\xa5b\xb3\xb3\xd3\xa3\"\x1fh!\x8c\x01\x8d;\x0fpE*\xd6)~\x9f`\xd6%\x80\x18Z\x82C\x0d\xbc\xdde\xf8\x9d\x80\xc8[\x9c\xeb\xe2q\x15\xf6\xafH\xb1\xf0_*\x96x\xcf\xd5s\x9e\xe68y\xc6\x9e\xfc\xad\xd4\xa6\xb2\x00\xd8\x9cg\xec\xa9k\xf0a\xaf\xfd\xc8\xb9c\xfa&O\xf8\xed\x7f\xd4\x16\"\xd1\x93\xd5\xa8\x90%\xa3\"m\xb8\xbb7\xa6\xa0\xe1.o$\x94\xc2\xa9\xd0\x15\x90Z\xe3=\xd0c\xe0/Nc\xafO\x0b\x0e\\\xe6\xc8n\xecF\xc8[\x15\x01'\xc7\xdf\xc0\xea\x1f\x1d\xe7\xab\x7fT\xe0\x90a\x86\x0eH?\x8c\n\xbf\xad]^\x88\xb8c7:\x85\x0c\xbfH\xd9Tp\xeb\x04\xc3\xebS\x7f\xe1\x027l\xce\xaf\xa5\x9a\xf9;\x0f\x92$\xf7\xd2\xb2\xb7Cv|-\x94\xb7\x0c\xad\x8f\x98J\x1f\xcd\x0d\x89\xa1\x0e\x05\x1c\xcf\xf7\x85\\\x88G!A\xf1\x11\xbf\x16)\x9f\x89G\x08\xc5\xa31\xc7{\x1bCf\x9b\xb3E\xd3\xe2\x92\x83H\x15\xf3>z2d\xfb\x17\x8e\xda}`\xca\xf5\xbb\x99s\x0bA\xee\xcc\x88\xca\x9a\xb9acn\xc0i\x8cB\"\x95pK&z\x9a}\x14\xf8!\xfbQ\xdf\x88k\x91BW\xa5o\x06\xf9\x82\x94F\x8b\xf7\xe2\xe7\xc3S0t\xa52Vp\xbc+\xce,\xb5\x8d\xd42\x951\\\x03\x89\xfah\xa6&<]\x0d\xd9K\x9d\x96\x02Gn?A\x89Fu!\x84\x1f\xa6\x99S\xa6\x06\xa8\xe8d\xc9$\\\xadW\xcfW\xa9\x1f\x16'\x1d\xfb\x1f\x93\x9a\"q\x9fe}\xab\xa4\xdfN\xe3\x89TU\xe5\x19\xb0d\xe9\x89\x1a/\xf0\xd3:\x19\xb8S\x18\x97\x00\xad7h\xdf\x83\xf2\xf2N\xb5N\xde\x1b\x91\x9ej#Q\xc9\xed\x97\x1a\xd7\xc3f\x83\x9fq\xe5\x94=\x9f\xc1\xa8X<\xe7R=0L\xdc.\xb5\xc9Rw\xa0\xd85O\xa5\xce\x0c\xe2:R\xd7\xda\xa9\x8f\x89t\xb8\xc1\x90\x16\xa6nq#\xf2\x02\xec\xb1`\x0fRa\xa4\xb1\\\xd9\x070H\xe8\xb5\x1aV\xdc\xec]\xf7|\x94\x16\x8e\xe9\x02m[y\xc7\x14\x8a\xea\xd6}\xec\xcb)\x88x\xee\x0b\xf1\xb4I?\xcc\x8av\x1aE\xa1W=_\xbd\x08\xb1\xdb\xfe$U\x8c9*\xd9?w.\xb5\xea\x11\xf0\xef\x17\x9e'\xbb\x8c\xec\xb2\xbb\xa0h\xdd\xf7Q\xd7\xecs\xd7$[\xab{\xb0:\xf7\xac\x96\x0eg\xa4\n\x8aD\xa9\x9e\xa7T\x04\xc9\x8eO\xa2,x<\x97\n\xc3\xf2n\xc0\x94MS)\xd4$Y\xb9#\xbf\x08\xd0\x95N\xdd\xda\xa9\xdd\xed\xd8\xf5\x8aM\xf68\xa2\x94\x93S\x86\x9frr\xbe}\xeep?srB\xd4\x9e\xbc\x07\xdb\xef/\"\x8e\xe4d\x17\xa6\xb6R4s\x1f\xd8\xcb\xad\xdd`wM\x0b\xfb\x0c\xae\xc1\xcd\xc8x\xaf\x96Z'?\xcf\xa5\x15\x894[8q}\xfdA\x9f\xb5\xb7;_[a\xab\x85\x85\xbb\xc1\xa1\xfc\xba\xae\x98\xfb\x87O\x91_\xd7k\xf7.\x02\xee\xef3z\xeeWJB\x17^\x0b\xf6\xb5\xed\xdb\xc9k|~K\x8e\xf5\xddH\x90-\xf6\xa0\xaf\x97\xbe\x87\x91\xd2\xcf\xa4 ?\x02\xf9\x11\xee\x82\xa2\xfb\xedG\xe8\x7f\xf0\x0cy \xbf7\xd2\xa5\xd3\xdd\x89\xa2\xfb}\xba\xc9\xfc\xdf}[\xc9\xfc\xef\x87\xa9\xedD\xc8\xae90$G\xbeb\x1a!9\xd2\x89\xa2{.G\xbaOyC\x96b\xbf\xeb|\xdb7\xf8s%\x1ev-\xed}\x19\x91\xa4\x05\xf7\xd8\xb9o\xeah\x12\xf7\xeaD\xd1=\xe7^A\x99\xcb\x14\xe9\xc1[o,=\xd5M\x85NT\xe8D\x85N\x1b\xb4@\x88\xf26\x1a|\xfdU\xa4\x8a\x9f\xa2\xf9\xd9\xb1\xd6\xf9\xdf\x1b\x91V\x82Q\xf9\xa7PBj\xf2b\x8c\xfe\x10\xc5 \xdc\x1b7r2e\x94W\x8d\xdeYi\xeb\xa7\x8eQ\x95*1ob\xde\xc4\xbc?\x1a\xf3&\x0b\x8f,\xbc;\xa0hCnS\x0f\xe9[xP\xd4\x8c\x040 `\x12\xc0$\x80I\x00\x93t!\x01\xdc\x1bEu\x01\x0c0b\xf9\xe2\xaat\x1b\xaf\xd2\x8b\xc3\xcc\xceu*\xed\xea\x8d\xb0\xbc\xf6\x04X\x0b\x0e\xf9d!\x1b\x19I\xe0nGX\x88.\x16K\xbb\xf2\xd5\xce\x0c:A~%Gf\xca\x02p\x81\xa36`\xba\x19\xc2\xfc\xd5\x1b\xe3P\x82?M\x0b\xce\x1c\xde\xac\x02\xa9\xe2\x9b\xc6\x91\x8a\xf9\x92\x8f}\x8d%\xbc\xa5\x91o\x9d\xc7\x0b\xee\xdd\x90\x9d\xc1\x13\x97J\xdf8\xdc\xe3\x11\x87G\xb6\xb4\x12\xec\xd0\xad\"RK\x91.\xa41\xc0\x14\xa0^\xdb\xb0e\xc2\x95\xca\xaf\xfc\x16\xb7\xfeU-_\x07\x8f%\xd8\xd5\x0c\xaa\xc6=\xe9[z\x0d\xb0\x8e\x02\xa3\x1aM\xc5\x9d\xaa\xb9\xbe\x8b3\xd1H\\G\x1e\x83/E\xf5=\xad\xa9\x10\xa1\xaax\xce\xd3YQ\xdb\x1fP\x8e9\xc1J\xdc\xe4\x8f\x8b_\xf8n\xd2\xb0I\xcaoT\xf1|\xfd\x1b3\x83y\x04L\xf9\xc0\xc9j\xa7\xe9\x84\x08\x05T[EN\x1fVf*\xd2t\xc33\xce\x83\xfa\xc6\xcf\xb8\x19\xc5Z\x99\xacC i\xd1\xf0*8x\xc5\xcd\x11\x0eUA\xc5\x8c;1k,V\x0d\x05\xd1\xcc\x0b9\\z\xb1-\\\xcd\xe0D\x9a;\xa7|\x81\x0f\xc4\xa6B\xc5\x82-D<\xe7J\x9a\x05\xec\xfb\xb9\x10\x07ln\xed\xd2\x1c<~<\x93v\x9e\x8d\x87\xb1^<>\xd2f\xf137\x8b\xc7@D\x8f\xfc y,\x8d\xc9\x84y\xfc\xe4I\x03\xf5\x9dn,L\x0fu\xcf\xe5\x03\x97\x97\xa9w\x9eH(\xc6x\x0eOn\x9d\x0b5\xf9Q\xeb+\xff\x8c\xee\x16\xb6\x896\x8b\x1bn\x16\x1bl\x88\xb55u\xcf[Yo~#)\x06\xcb\xb24\x7f\xa68R\xb0\xcb\xd5\xa1\xf0\x1aSPD\xfa\xe2\xa0\x99\x19\xf7G\x02\x0f]G\x0b\x125\x9fA\xd44S\xd4\xe6]\xdc\x8e\xa4\xd6\xd1\xb5#U\x99\x97\xa9gC\xdb\xe4I\x00\x12\xfb\x98\xf6\xe5\x88@\x1bJ\xaa \xe0\x95\xbd[!\xa3<\xc0\x0ex\xb8\x97wt\x90\x96AZ\xc6\xf7\xabe\xb4\xb0\x8b\xeaI\x0dn\x92\x9c?8\xe4\xe4*\x07tx\xec\xd5\x13\xc7\x13\x90\x92jL\xe1v*J\xaf\x1e\xbd\x14\xe2\xc2\xc1t\x97#\xe56\xf2\xe4E\x9f\xbdZ_d\x98\x9f\x95so\xf0\x11\xb9\\\x18\xf2\xd2\xcb\x8cxY\x80\x9b\x91\x9d\xbc\x80\xea\xc3\xb0U\x0b\x9e^\x99B\xf5r\xdb%\x129\x93\xa1\x04=3\x02\xb7\xd0\xde\x02M\xfbR=\xc5\xce\x03j\"ub\x0d\xc3\xcb\xaf\xa4\n\xd7\x899\xda\x17\xa9\xbcv$\xfa\x11\x86\x0f\xc1\x8a\xd5V\x1c`t}\x9a\xa9\x18I\xc3\xc1\xe0\xa9\xbfx\x8e\xbf\xf4T\x12\xee\x93\x86\xe7\x99x\xe29\xc78\x9b\xb2T8~ \xfcm_6\x0c\x92\x07\xa7\x0b\x82\x1a\x8b\x99T\xca\x81\xe3\xac\xedH\xb9/C\xdcg\xbe\x94\xc6YThm\x01)\x19|b\xc9\x91\xa6\xaa\xd39\xdb\x0f\xb7\xef\x82\xcb\x0ei\xef![\x80'l,\"\x05\xb3\x83M\x9f\xdb\xe2>\xe0\xea\xfdk\xcc\x88\x05WV\xc6&\xdc\xf3\x96m\x16n\xfe\xe1\xab*\x1f~\xe3Hv,\n\x17a\xceZY\x9d\xb3zf\xc6\xc7\xfa\xba\xa2\x18:\x1c4\x08\xad\xcbC\xb5\xba,\xdd\xd1\xa5\x18O\xc7\xd2\xa6\x8ep6\xcc\x12\x0e,O\xb4G3\xe3\x91r\xa7\x0bN8\xce1\xde(\x14r\x19\xe0\xb6\xe24\xecr\"\xc70\xb7?\xdc\xc5k\xddV\xb3%\x8f\xaf\x1eg\xca\xfd\xcfq/<\x9f\xc5\xc5\xc1\xc0m\xf5\x94ex\xcdhNs\x86\xa1\x0fT\"\x01\xb2\x99P\x02\xefKA\xfb6w4\xb91\x01O\x0e\xa2\xe3[\xeev\x94=9`\xa7nBGu~n\x9e/_*v\xf4\xa7?A{\xc6\x18{\xa95\x9bj\xcd\x9e\xb1\xe1p\xe8\xdf\xb9r\x83r\xb5\xf2\x7fq\xb5\x1a\xba\xe1^\xa6z\xb1?\xd5\xfa\xa1\xff}8\x1c\xe2?\xe4\x94\xed\xbbF\xefa\xaa\x0b\xbd\xff\x07\xd7\xeaa\xf1\xb2V\xde\xf2C\x19\xca\xa7\x1dP\xfe\x9d_\xf3>`\xb2g \x17\xdc\x00\x1b\xc1\x93f\xff\xa5\xd6\xc38\xe1\xc6\x94\xa1\xc3a]\x0b\x84\xa2\xd4\xeao%\xb0Y\x80\xfb/\x1dp\x9f\xae\xec\\\xab\x1cr\x1c\xfe\xa5\xd6\xfb\xc3\xa1\xe31\x1e\xa5\x08\xf5\xfe\xc3*\x8ea\x01\xeb\xf0\xbb\xcf'\x08\xfe\x8b\xe3\xf3\xa3\xb3\x93\xd3\x8bwg\x0f\x0f\xc2\n\n\xe4\x97\xfa\xfb\x11J\x80\xff\xb5\x03\xf0W:\xc0\x0c@\x1f/\x91\xe3\xbe\xe1\xa9\x99\xf3\xc4-\xa74}\x0e\x7f}\xb00\x92\x9c\xd6\xc6y\xaf\x16\xc5H0\x0fl'\xb4\xfa\xb7gL\xc9\xa4\xf4X[1<\xec\x0e\xd8\x1cnE\xe1|\xe4v\xc9x\xc5\x96\xf5\x93z#\x93\xc4}\xf0\xb7#9\x86\x1c\xa9\x07\x0d<\xf7\xb1S\xbe\x86\xf0\xc1\x89\x90\x07\xe1\x1a\xf4\xc0\xb8\x01\x97\x16\xf2\xb5\xdc\xec\x91\xca\x8f\xa7JVA#Y\xd3\xe0r\x91\xc4\xf8\xd4\xfa\x0b\x95@1|\xf0\xf8A\xa4\x84\x8fO+\xe7\x9f\xb1b\xa8h\x0f\xa0\x8e\xf6\x0eX\xb4\xd7D7U\xc0\x86\x08J\xb47(\x06\x000\xde\xf2\x05\x0c\xf2\x9f8\xfb\x7f\x95\xbe;@\xea\x9fK\xe0\x9cL\xbd\x90\xafb\x1aq&\x0d\xbb\x11I\xf2\xe8J\xe9\x1b\xf4\xd5\xcf\xc1\xfa\xf7\xdev$\x85\xeaF\x0eP\n\xd6v\x17\x0fJi\x1a\xb7}\xe06\x86\xcd\x8b\xd4%\x90I\xd8=\xbc\x11\xdb\x16~} \xb2\xda\xcd\x99\xee\xb3\xdf\xf4H\xc10\xf9\xfe\xb2}G\xeba)kzn0e~\xfd\xe5\xd7\x87\x07w\xd9\x93\xeap\x95m\x81\xf5\xe0\x18O\x86O\x9f<5\xd1\x9e\xc7z[\xc0\xaff\xf4\xf6\xf1W\xfb.u\x87u\x97]\xbd\x85\xd3\xeb\xeeo\xb4Z\xb2\xb8\xc9\xe2&\x8b\x9b,n\xb2\xb8\xc9\xe2&\x8b\x9b,n\xb2\xb8\xc9\xe2\xc6\x7f\x93\xc5M\x167Y\xdcdqo\xb1';Z\xdcE.J0hAe\x86}\xb8\x95\x06S\xd8\x82\xa9\xfba\xb0\xb7\xe43\x9f\xa1\xb8\xd7\x90\xb8\x19\xbe\xd5\xe2\xdd\xf9\xcf\x9e\x0f\x04\xcb\xbd;}S\x89[;\xba\x12\xab>\xbaZXH\xe8\x13\xfc\x04\xee\x9f^\xd1\xe6\xc6_\xc0t\xcag!\xd3f\x88\xdf#\x855m\xae\x87\x1b\xc1\x81-\xd8B\x1b\xcb\x04h\xc1\xa0\"\xef\x85\xbb\x95\xfad\x03\x14 A\x17\x80\x07\xfe\x81oi:>\x13L\x90\x92\xe6=\xad\x00\x07\x98\x1fA\xb7H\xddp(\x92\x1c@fG^6\x99)\xc4\xf6\x045\xe8\x1biD{\xea_\xdd\xd1\xb1\x853\xa5\x92\xfe\x07\x8a\xbbT\xb18`\xe8Tyd&W\xec\xcf\xc3\xbf\xfee\xa3\x9f\xe5\x0d\xe48\x90\xb7\x85\xbc-\xe4m!o\x0by[\xc8\xdbB\xde\x16\xf2\xb6\x90\xb7\x85\xbc-\xe4m!o\x0by[\xc8\xdb\xf2M{[Z\x8c\xf2f\xab\xb8\x8fi^\xed\xd9;\xdd\xe1^\x96\xeaR\x81I\x8f\xfe\x9f\xba\xa4\xb3D2\xbf\xe74\xf3*\xe5}JH\xfc\xf5\x08\xbf\xe7\xee\xc1\xcd\xcd-yd\xc8#C\x1e\x19\xf2\xc8\x90G\x86<2\xe4\x91!\x8f\x0cyd\xc8#\x83\xff&\x8f\x0cyd\xc8#C\x1e\x99-\xf6dG\x8f\xcc`O\xdc.e\xfb\xcd\xd2\xd3\xf5;\xb0\xd7\xb5\x17\xb0\x8f\xd9L^\x0b\xc3\x8a\xdb\xee@9\x15\xb7\"\xce\xac@\xb3\xcf30\xcf\xd0\xf0\x00\x15\xd3\xc3m\xce\x1dF\xf8\xe1v&\xf6\xcc\xf5\x11-\x0f\n\xc2\xb7\xa6\x0bj\x06d\xc9\x93%O\x96U1\xa2w\xcdxqZ\x9e\xca\x19\x11\x0e\x03\x85c#N\x05\xb7\xce\xfe\xca\xa7q\x8d\x1e\xb8F\x0f\xbc\x95\x99\xcf\xf0\x8c\xfd\xbb\x13\x00\x999`O\x98k\xe1\x00\xf8\xf3\xff\xfa\xf72Vy\"\xb9\x11}\\~E\x0eY\xfen\x1a\xf6\xad\xf2#\xbf\xb5\xe1[ \xc8\xd2\xf66\xb0\xcfb1\xa5\x0d\xe2n\xac,\xb6uK\x8e\xe3`\x91\x82\xd1\x02\x83\xca<*\xfcf\xc9\x98Y}%T+\xa5\xbf\x11\x96O\xb8\xe5}\x08\xbd\x04j\x03:\x00\x8c\x91\x9b\xbf\x0f\x1a\xe94\xd1i\xfa\xbaOS\x00\xb8D\xf7u\x8a\x0c\xe0\x97w\xcf\xc1\xee'c\xb1\x96\xca\x0d\xe56\xa7\x9b\xe8]\xab\xfa\x0c\xf0\x1bn\xeb~\xe1\xf7v_\x8a\xd5\x07\xed*\xec\xdf\x9fq\x93&\xd2,\x13\xde\xa8\x97\xd4\x0e\x1b6dRMd\xcc\xad\xb7\x99L6\x9b \xe3t-O\xc0\x0e\x9f9\x08\x91\xf2\xbd0*\x18'N\xf9@\x97\x9b;\x9f\xdd\x93\xb6<-X\xd2\x91\xdc1/\xbf;P \x1d\xb8]b\xfbbv\xc0\x8e`\x04v\xe8\x88\xd3MoV\x8b\xb1\xee\x11j\xc1vA\xbd\xc0\x01\xfdo!\x08`\xe6\xce\x02\x818j\xf0\xd4\xc2\x94\x87\x17\xef\xde<\xf4\xa1\x94\xd8\xd9\x85~K\x0cX\xc58\xa0G\x0f\xfa=[\x9eQ\\\xa3\xe8\xc0\xac{\x10t\xa4x/\xfe\x7f\x9a?\xec\xb0\x991\x1b\xa1&#\xa1\x9c\x827\xe9q\xae\xb7c\xef\x8e\x11\xaf\x0d=\xd6:\x11\\5\xa0\xe1\\\xa8\xc91\xb6\xc7\xd8\x85;G,\xe7\xa3\x9c\x95\x81e\xc6r\x9b\x19\xb6\x7f3\x17\xe0W\xe6\xbe\xa54\x91r\x0d]\xab\x87\xc1\x15\x0b.\x93Q\xcbb\xdb!:\xdd\xf8\x0cF`W\x0e\xf1\xf9c\x18-\xfb\x81ot&\xc9s\x9ep\x15\x8b-\x82\x96c\xdf\xe3S\xec\x0e_8%\xbe\xe1\xd3\x1a&\x8ep+\xbc\xed\xe4\xcf\x8d\x97A\x15\xd6\xea\x0cw\xae\x18\x8e\x0c\xc7\xe0\xed\xbb\x8b\xe3\x03\x08\xe3\xe1\x8f\xde\x87\"\xc1\x06;Q\xd6\xdb\xe1\xb9c\xbfb\x8c\xa3B\x1f)#g\x8a\xdb,\x15\x8e\x19\xff\x96\xc9\x14\xbdd3=\xd3`\x1b7\x98\x95\x01q\xe1\xac\xe7\x7f\xeb)\x06\xf3 N'\x95\xd9\xc5|\xb4\xf4\xfe\xad\xb8W\xe6c\xc3\xd9\xeaeC\x16\xdd\x9c\x01\x19\x9c\xa1\x9b\xcf\xb1\xef\xb1\xf5\x19\xeen\xf8\x9d\x1c\xd5\xe6-\xac\xa1\xb5\xcf\xf6\xf9.}l\x7f?\x85\x11\xa0Am\xb3wA\xc3\xee\x83\xfc\xe6Y*l\xa3y=y\x1f6\xeb\xbb\x18h\x1et\x87\xfe\x0bZ\x90iH\xa6!\x99\x86d\x1a\x92i\xf8\x8d\x9b\x86\xcd\xd2\xa9Ql\xf4\x11\xb6\x95\x8e\xfd\xb5%\xe8fv\x97S}\x98\n 0\x12`$\xc0H\x80\x91\x00\xfb\xa6\x04X}\xb0 \x12\x8a\xb4E\x07\x17\xee\x14\x93\n\x99_\x88\xe7\x07\x1fO*f\xd2X\x91\x82\x83\xe4J\x90\xbf\xe7\x9b\xf0\xf74k\x15\xbd\xd5\x18\xb3\xbd\x1e\xb3\xfb\xdb\xca\x9b\xdb\x91\x0b\xfec\xbb\xe0\x9b)\xa6\xf6\x92\xf2f\x97\x0c\x9c!'\xbfo\x1f\xc3\xd8\xc5\x9c\x9b\x89\xe4<[.\x93\xd5\xbbi\x7f2Ys\xecm\xbd\xc1\xdf\x81k\xb0\x8e\xd6>\xe7<\xf4\xe9\xed\x1c\x0c\x1d~\x96v\xae3\xfbn:5\xc2\xd2F~\x92\x8dl\xc4\xf16\xbbZ\x19\xa0\xf7\x16_8\xf9\x83C\xf4\xdfX\x03\xed?\x05k\xfe\xa66\xbc\xd0\x12\x10aa7\xfd_^\xcd\x85\x88\xdb\xc7W\xc06\xe8\xa4\xa4\x9a}J\xd5,L\xdfv\xbc\xfa\x9c\xe9R\xb7\xb2:\xd6\xf7$\xef\xc8\xaf\xe9X\xd3\xb1\xa6c\xbd\xe5\xb1\xdeYn\xb7\x8d\xd1\xe7\xc0\x97\xac\x92\xbb\x1c\xcbm\xcc\x8eOc\x08\x95\x96g\xc4\xd0\n5\x11\xe9B*[\xbc\x05+\xec\xf3D\xc7W\xcfW?\n9\x9bo\xc1\xcd\xc6\xae\xdbH\xf6@\xd0\x9c\x9by\xf7\xa1\x80\xa3\x9c:\x83\xcd\x8e\xe6\x82O*\x97q\xb6\x8c\\'\xefV\xb7\xf4\x87A_(J\xa4x\xcaSk\x84\xfd\x11\x81)\x7f\x01\x94\x9d\xbc\x00\xb7\xa4\xfbg7\xa4}W\xe4K\xb2\xa1\xa1\x9f\x0c=T0\x0f\xb8\x9c:\x19Q\x1d\xa4\xd6C\xef$\xc7r\xd9\xabe\x83 q\x84f2\xc3b\xbeD\x86\x8el9\xfc\x9cf\x89\xf7B/S\x1d\x0bc\xb0$*\xac\x03\xadh\xf7G<\xe7R\x0d\"%U\x9cdX8\x95$\xa5O\x0c\xbc&\xe8\xc0\x83yB9!\xce\x10\xea\xa2\x8b\x1a\xfd\x07\xee\x10Xn\x05\xb3)W\x06k\xaa\x16<\x9eK\xe5\xf3\xe5\xdc\xb0U\xd2-\x0e\xed\x1c\xce\xc1F\xa4\xe4\xd8\x83\xea\xa5M-K5N\x03(V\x1b\xd1\xb1y\x91\xe3\"\xd6\x8b\x85\xb4\xa3~S\x14\xc3\xb8\xf6\xb8\xf1HL\x90[\xe2\x08\x94[\xdes0\xac\xd8\x97\x13nujz\xf6Y\x03`\x9a\x82K\x1fh\x8f\xe9\xcc.3[\xfc\xb6L\xc55\xc2\xe7&\x039\xbf\xf5\x8c\xc0\xbe\xfdy\xea\xdf\x85/\x97\xfd\x1b\xc3>x\xc9\xde\xbf\x97\xb8\x96\x13\xa1b\xd1\xb3G\x81\xb9\x82=\x00'\xfb\x80\x94\xa9\x8dHG\xfe\x96\xa8\xee\xd1\xd6y\x11\x92ZE\xc5\xcb\xd9\x05$_\xb2\x8b\\\xf2y\x9a\xc1\xa32\x0cd\xd3\xe3\xcc\xdcn\x11\xaak@Y\x15\xe2\x8b[\x83\xb1\x88P;\n\xec\x0buad]\xff\x8d\x80\x0eQ,\xff\xe9\xc90(\xe0p\xbdL\x920{k\xd8\\\xa4\x02.$\x01\xd2\x1a2\xf6\xb3x\x90\n\xf6?\x99\xb1\x8c\xcfR!\x1c7\xf57\xa4`\xd8\x14\nj\x87\x91\x82\xb8\xcbBp\xe5\xe1\xc0\xc9\x0e\x97\xcb\x1f\xb9\x99\xb3\x89\x16x \x07\xf2d\x88\xcc8-\xeb\xd6\x0c+\x07\xfa\x85\xe3\xcc\x95jd\xa7`9\x8e\xec\x18/\xf7\xb74\xf8A&\x15\xae_&\xa3n\xec7\xb4\xdc\xd6x\xcaP>\x88\xd1\xb5\xb6b\xd4\x7fjh\xde\x87@\xe0\xeb:%\x08\x95-\xf6\x0e~\xd9;?y\xf5\xf6\xf8\xc5\xe8\xcd\xf9\xab\xd1\xc5?O\x8fG\xef\xdf\xfe\xe3\xed\xbb\x9f\xdf\xee\x0d\xd6\xbe\x9c\x9e\x1d\xff\xf4\xee\xe2\xb8\xf9\xcb\xd1\xbb7oN.\x1a\xbf\xbd;}w~\xf8z\xef\xd7\xdc\xf9\xed\xd4\xca\xd6Y\xeb\xa1\xc4\x99\x12\x937fv\xe1K\xa3y~\xbb\x87\x81O\xe5;\x10*\x82\x1e\xafOx\xc4ZVq\xc0~\xd2V\x98\x96&\x08\xf2\x01;\x05.\xc0\x13\xb3\xad\x04Nu\xa6&\x9d\xa2\xec/OsU\x8dD\xafSG\x8c\xe5\x8b\xcd\x8a_Es\xc9%\xd7\x16\\\xba\xdcK\xaa\x89\xb8\xed\\5\xeeR\xee!\xe81\xc7\x1a_u\xb4V\x0d\xfc:9\xac\xad\x18\xf8\x1b\x97\x16\x12\xefy\xc2\x7f2\xf7 ev!\x9c\x9d\xce\x1a\xa9\x82\xbea)\x8e \x8c{l/1\x01b\x02\x9d#\x13\x13\xe8\xda\xa5{\xc9\x04`\xdb\x9c\xfa \xd5l\x04Il\xfd\xc8\xb3@\xc1\x16\x9d\xb6\xde\xa0\xf5\xd4\xae\xa0\xf18|\x1c{}\xa7\xd0\xd6\x82\x06\x84\nr\x0ec8\xe9\xf6F\xbb\xb6\xd3D\xc6n\xbd\x80$DC\xe2\x0e\xe6\x08s`F\xdcZ\x1e_m\xa1N\x95\xc6\x1c\xf5\xf4\x9d D\xbdOW\xdfv\xe4j!W\xcb\xf7\xc0\xea\xc9\xd5\xd2cFr\xb5\xf4\x93\xadws\xb5 \x15v\x9f\x9am\x18\x03)\x7f[s\x84\"\x08[\x1a|K\x7fJ@\xe5h\x9a\xf0Y\x13\x8c\xc1\xe4y\xfe\xfa\xdd\xd1?F'/F/_\x1f\xbe*\x99\x1e\xd5\xdf\x0f\x9f\x9f\x1f\xbf\xbdX\xfb97t\xaa?\xbf=\xa9Y8m\x93T\x17?y\x99\xf0Y)E\x1b\x03\xd6\xcf\x93X_\x9d\xbc@Z\x0e\x98q\xd6\xcfT\xa7\xbb\xeb\xbd[\xebowTz\x8f\xe0h\x9d\xcb\x19\xdam\x8e,\x83\xbc\x06}\xb8\xec\x84\xe3\x0c[\x0f\xf7\x1a\x92]\xf1S\xd5\xab\x97\xeb\x8a\xe0+\x0c\x9a\xc5\x0d7^\x85\xf6\xd7\xeb\xf3\xe0\xfe+\xd8\xaf\x9f\xa2\xc0\xa1\x11=\xce\x7f\xd1\x7fw\x02\xddf\xb3\x96\xd9\xb8\x16\xb9o\xf3CN\x9e\xfe\xf0\xc3\x93\xff\xe85\xa8\x11\xf1\xf2\xe9\x0f\xff~\xf5\xa4G\xeb\xf2 \xce\xc6\x89\x8c\xff!V\x15&{%V\xe5\xc8\xbb\xd3\xf52#0s\xa3\xc4q\x7f*\x10\x87^\x8b-M\x95\\D,S\xa9Si7'3\x04\x85\xf5C\xa9g7\x0eic>\xdf\xc6\xecj\xb4\xe2\x9e\xba\xc3\xad\xd5h\x1bi<^\xfd\xce\x95\x95J\x8c\xe8\x0c\x7f]\xa4\xb23\xad\xec \xeb\xd6\x84\xcekGaG\xe0R8\x04\x8fB\x97\xbfbM\xd00n\xadX,\xc1Wa5[H\x93\x08>\x81\xf2\xb8\xd9\xdc\xfa\x92\x9d!Rv\xd5(\xea\xa6\x98m\x0e\x00\xa9\xa3\xa4\x8e\x92:z\xaf\xd5\xd1\xb59\xda\x92\xe0\xfa\xa4\x19\xd6\xfb\xb6V\x06\xb4\xe6\xdf\xbdv\x9b\x8f\x83P\xf6\xdd\x96\xac\xa3\xa7\x07\xb9\xef\x8a\xc8%L.\xe1\xef\xe1\xd8\x90K\xb8\xc7\x8c\xe4\x12\xee'\xea\xef\xe6\x12\xa6\xec;\xca\xbe\xdb\xd0\x91\xb2\xef(\xf1\xe6\x9b\x12\xbd;\x18b\xbbY|\xdfP\xe2\x0de\xdf\x11\x13 &\xf0\x9d3\x81]\x9d\xd3\x94}W\xa2}\xca\xbe\xebjI\xae\x96\xb6\xf3\xd0\xf7(\x90\xab\x85\\-[\xceH\xae\x96~\xb2\xf5n\xae\x16\nw\xde\x0b\x8e@\xe1N\nw~\xcep'e\xdfu\xb5\xfe\xfa3w\x96\x94}w\x0f7fW\xa3\x95\xb2\xef\xbe;R\xd9\x99Vv\x90u\x94}G\xea(\xa9\xa3\xa4\x8e~\x19u\xb4)\xfb\xae!\x05\xaeg\xee]\xa9\xe7\xae\x99w9\xc7?\xdf\xe62O$\xf9mx\xd3'\x15\xc9\xdb\x88`\xf7u\x94\xa5=\xdew8d\xef\xcf^?N\x85\xd1Y\x1a\xfb\xd7#`\xd73%\x7f\xcbD\xb2b\x8e\x14\xac\x9cJ/d\xad\x0fXa2B*y\"\x7f\x17\x93H\xc1\xdd\x9e\xb1N\xd88\x9bNE\x1a\"Y\xfe\xfd\x07\x9c\x1d^~ \xa4\xc6\xb8e\x89\xe0\xc6FJ+\xc1\xa2\xbd\xc7\xd1\x1e\x8b\xe7<\xe5\xb1\x15\xe9\x10\xae!uR\x84\x191[\x08\x95\x93\xf7\xfb\xb3\xd7\x0f\x0c[r;\xc7\xe1\xf2@D\xa4\xdc\xe7i\x96$+\xf6[\xc6\x13\x07\xf3\xa4\xfa\x1e\x86\x83}\x9f\x1b&U\xa4.\xdd\x10\x8fgZ\xcf\x121\x04\xe8\xc7\xd9t\xf8\"K\xc1\xf1z\xf9\x10!\x80\xee\xc5\x93\"p\x9ab\xae\xb4\x921O\x1c\xb1\x86\x17f\x06n1\xe0\xf2\x8d\xf6\x86\xd1\x9e#n\xc8$\x89c\xb1\xb4b\xf2\x10\"x'\x8a-\xdd\xfad,\x06\xcc\n\xbe0\xf9+\x1a\x189Y\xca\xc4Mb5\xfa\x94\xa5\xe2\xe9\n\xb3QVK\xe1SI\xec\\\xac\xe0%\x1a\x11[&\xad\x93\xc6N\xcd)B\x86V\xdc\x02\xb6\x0e\xd5j\xc8~\xd47\xe2Z\xa4\x038X\xef\xcf^\x076\x98\xe1\xe3;\x912\xf1\\,\x04\xbb\x9c[\xbb\xbc\x1c\xe0\xff\xcd%\xc4o\x94f\xf8\xb5x#G\x03\xe1\xe0\xbb\x1f\xc2\xb2l\xe9c\x98\x912\"\xbd\x16)\x82\x08\xd7[\x02\xb6aF\xa7/\xf8\xc0&\xe8k\x12\xf3V\xb8\xe3\xb9I\xa2o\xcc\x81C\xce\x1f\xd9\xc9\xb4\x98\xd2!\xd0?\xc91\xc9\xa1\x02fgL\xb6\x10\x93\xa1\xebp\xa8\xd8\x8f\x17\x17\xa7\xec\xd5\xf1EH\xc3y\x7f\xf6\x1a\xe9b\x05w\xd7r\xf6K}\x8b/VK\xf1\xeb/\xbfF\x8a\x85[KU\xc04\x1eiX\xfb2\xd5\x93,\x16\x8c+&\xd2T\xa78_\xe1\x997\x90\x17\xc4\x1d\xf8x\x89k\xcccG\xb1Z_e\xcb\xfc&U\xc7\x9a&\x1e47\xe1\xfb\xb3\xd70\xfa\x9c_\x03\xfa\x17\xa5}\x9f\xe0\xc6\xf3\x00\x8c\xfb\xf7\xb5\x96\x13\xc6\xd5\xca\xf5\xc5\xa1\x81,S1\xd5\xa9\x18\x84\x96n\x00n\xe5X&\xd2\xae\x98\x12bb\xc2\x1d\xb3\xeeh\xa4\xd7\xee\x802\x07Fx\xa0\xc5\x11\x98\xa3\xa8!\xdb\x7fo\x04\xf3\xa1\x1a\xb7\x10\xb7i\x8e\xe8q\xd7\xb8\xe23\x00|\x9c\n~\xe5\xa8\xdb\x8f0|\x08\x17\x06k+\x0e\x98u'|\x9a\xa9\x18I\xc3\xc1\xe0\xa9?\xce\xd2\x14n\xaa-_)\xeb\xd3\xa5\xe0\x1a[\x9ex\xce1\xce\xa6,\x15\x8e\x1f\x88\x01DE\xa4\x0d\x83d\x0e\x85 \x16r\x82\x1a\x8b\x99T\xca\x81\x83\xcf2\xb9/C\xdcg\xbe\x94f\x18\xeb\x05\xde\xf3\x0b\xa4d\xf0*ZG\x9a\xaaN\xe7l\xdf\xcb\x1b\xa7\xdb\xae<\xed=d\x0bPj\xc7\"R0;\x98\x10\xf9\xb5\xc7x\xaf\xb0Y\x8aXNe\xcc\x8cX8\x93,\xf6\x99\x0c\x8e\xa4\xba%z\x9d\x0f\xbfq$;\x16!RXb\xad\xac\xceYC\x94h\xac\xafE\x80\xc2\xef\\\xd3\x1d\xf9\x97\x87juY\xc8w\xae\x18O\xc7\xd2\xa6\x8ep6\xcc\x12\x0e,O\xb4G3\xe3\x91r\xa7\xab\xf6dT\xbbP\xc8e\x80\xdb\x8a\xd3\xb0\xcb\x89\x1c\xc3\xdc\xf9{;&[.u\n|l\xc9\xe3\xab\xc7\x99r\xffs\xdc\x0b\xcf\xa7 $\x83\xdcVOYf\x91\xd2\x03\xcd\x19w\xa4\xf8d\"\x91\x00\xd9L(\x91r\x0b\x108e!\x8f\xac\xb91\x01O\x0e\xa2\xe3[\xeev\x94=9`\xa7nBGu~n^N\xc48\xfa\xd3\x9f0\xfd\x821\xf6Rk6\xd5\x9a=c\xc3\xe1\xf0o\xf8\x9b\x1b\x94\xab\x95\xff\x8b\xab\xd5\xd0\x0d\xf72\xd5\x8b\xfd\xa9\xd6\x0f\xfd\xef\xc3\xe1\x10\xff!\xa7l\xdf5z\x0fS]\xe8\xfd?\xb8V\x0f\xd9\xbf\xf0s\xa9\xe5\x872\x94O;\xa0\xfc;\xbf\xe6}\xc0d\xcf@.\xb8\x016\x82'\xcd\xfeK\xad\x87q\xc2\x8d)C\x87\xc3\xba\x16\x08E\xa9\xd5\xdfJ`\xb3\x00\xf7_:\xe0>]\xd9\xb9V9\xe48\xfcK\xad\xf7\x87C\xc7cx\xc6\xfe\xb0\x1c\x0f_j\xfd\xaf\xe1p\xf8\xc1\x7f\xe1j5p\xf2\xc3}^\"\xc7}\xc3S3\xe7\x89[Ni\xfa\x1c\xfe\xfa`a$9\xad\x8d\xf3^-\x8a\x91`\x1e\xd8Nh\xf5o\xcf\x98\x92I\xb1i\xa5\xe1aw.\xe0\x8a\xf4\xf8*?\x1fA\xd2:\xb5~Y?\xa9\x98C\x0b\xbe\x16g\x7f9\x86\x1c\xa9\x07\x0d<\xf7\xb1S\xbe\x86\xf0\xc1\x89\x90\x07\xe1\x95\xaf\xc0\xb8\xf3p7\xe23\xdc\xd1m\x98V\xc9*h$k\x1a\\.\x92\x18\x9fZ\x81\xdc\x1a\x14\xc3\x07\x8f\x1fD\xca\xf3\x860\x05\xea9\xc2\xefa\xb47\xd5z8\xe6)@w\xfbx5\xfc=\xda\xc3\xf5\xa0z\x80\xaa\x0b\x0c\x1e\xed\xc1W \x82H\xfd\xfd\xfc\xdd\xdbH={\xf6\xec\x19b\xcb\xfd]\xa8\x9a(\x01\xb4#5\x86\xfc\x155\x89\xcc\xe4\xaf\xff\xcc\xb2\x84\xa7\x91Z\xef\xe2>OD\xc1%\x07L,\xc6b2)\xf8\xe5\xc0\xb3[\x15\xa9\x12S\xc3\xbb\xf8/\xff\xdb\x81|\xe9\x95\xb8\x8a\xd5\x16P0\x0c$|\x10\x08\xd4!\xdbQm\xa1 Me\"\xfcq\x0d$}*R\xa3UA3^e\x87\x84\xe6\x11`\xe8\x19{\xf2\xb7\xdaWp\xf3\xf8\x8fO+\xe7\x9f\xb1b\xa8h\x0f\xa0\x8e\xf6\x0eX\xb4\xd7D7U\xc0\x86\x08J\xb47(\x06\x000\xde\xf2\x05\x0c\xf2\x9f8\xfb\x7f\x95\xbe;@\xea\x9fK\xe0\x9cL\xbd\x90\xafb\x1aq&\x0d\xbb\x11I\xf2\xe8J\xe9\x1b|\x16a\xce\x9dQ\xed\x1f6@R\xa8n\xe4\x00\xa5`mwC\xb2y>\x8d\xdb>H\x15\x81\xcd\x8b\xd4%\x90I\xd8\xbd\xb9N&>\xd5\xa4\x98 L\x0c\xbf\xeb\xcc\xdb\x01~\xd3#\x05\xc3\xe4\xfb\xcb\xf6\x1d\xad\x87\xa5\xac\xe9\xb9\xc1\x94\xf9\xf5\x97_\x1f\x1e\xdceO\xaa\xc3U\xb6\x05\xd6\x83c<\x19>}\xf2\xd4D{\x1e\xeb\x9f\xd3\xb7\xba\x96\xa0\x96'[\xc9\xd2\xd1\x08\x9e\x85\xdcJ\x7fd\x84E\x8di\xcb\x17&\xb8*?0\x11\xc6\xa5\x97\xfb>\xcf;\x12-\xbe\xa5&'OO\x17S\xb9\xeb\xeeU\x9eo\xf5D\x9c\xa8\xa9\xee\xefa\n/\xd8)=\x11#\xc8\"\xe9\xec\x12\xd4\xf4Q9\xbbns\x8f\xa7\xfd\xd2\xe2\xd6K-7\xb5\xed\x9dl\xf7aP[fs\xaaZ\"\x8d\x15\n\\\xae\x8d\xdf\x95\xb07:m\x80\xce\xb1\x995T\x14\xdf\x9c\xb9\xaaD\xd2\xcf\x89\xbb\xd0J^5\xb1\xaa\x0f\x83=\xa0\xc2nl\xdb\xdb\xb5<\xdcb\x8ct\x19\xb7;\x95}\xe0\xa4\x94\xfc\xd7\x7f\x8f\x9b\x1f\x93\xf5 T\xad\x1f7\xe1m&\x1b\xc27\xc5\xe7q&\x93\xc9\xc8\xf2Y\xb3\xa3r\xa6\x1b`\xaf\xf7\x9e\x88\xe5\x1d\xfc\xa4Kn\x1bc%\x819\xe1\xcb\x8d\xe0'\xdc\xb8\xd6\xb5\x1e\xa1\xe5\x87\xc1\x9e\xc9\x1a\x1f\xe1\xce3\xc0\xe6\"\xberm\xcaq\x9778J]\xf0\xfc\x84\xa3\x9e@\xaaX\xceNFfr\xd5\x8e\xa9b\xd0\xdeO\xe3\x96\xa6i\x94}\x0dl*\xb7\xd2\x1b\x86kj\x9e\xb3T`\xe5-\x1c5\xf4\xda\x9e\x8b\x9e\xafT,\xd5\xac?\x135\xd8\xa1\xd4\xb0\xfd \x9e\xf5\xf1{J\x08\xdfk\xfb\xe54\x89\x96\xfek\xa3\x10\x04\x85 (\x04A!\x08\nAP\x08\x82B\x10\x14\x82`\x14\x82\xa0\x10\x04\x85 (\x04A!\x08\nAP\x08\x82B\x10\x14\x82\xb8\x1f!\x88Mn\x9e\x9e.\xa6\x8f\x10\x84@\xdfc\xb7o\xe6k\xf6\x9dv\"!\xc7c7\x1e\xc8\xd1E\x8e.rt\x91\xa3\x8b\x1c]\xe4\xe8\"G\x179\xba\xc8\xd1E\x8e.F\x8e.rt\x91\xa3\x8b\x1c]\xe4\xe8\xfa\x04\x8e\xaen\xeb\xbdd\xebw\x9a\xde\x94\xf6\xf6U\xb9n\xeek\xda\xdb`\xafD\x88q\xbaZZ=\xcco\x18\xe9\xde\x92\xaf\xeb\xbe\x93\xd2R\x97O\x97\xc3\x17\xa8g\x04\xect\xaf\x96\x12\x90\xb7\xe3(_]\x02\xf2f\x02y\xf7\x19\xa0X\x83\xe1\xd4\xd3\xdcO_\x0f\xc9\x95V`\xc1\x84x\xde\xef.\xde\xbe\xd7\xca\xd0\xe5\xbat\xb9\xee\xf7pw\x11]\xae\xdbcF\xba\\\xb7\x8d\xd6>\xe6\xe5\xba\xf4\x8e\x11\xbdc\xb4\xa1#\xbdcDO\x98|S\xa2w\x87+\xedv\xbb;\xef\x1bz\xc2\x84\xde1\"&@L\xe0;g\x02\xbb^\xf3K\xef\x18\x95h\x9f\xde1\xeajI\xae\x96\xb6\xf3\xd0\xf7(\x90\xab\x85\\-[\xceH\xae\x96~\xb2\xf5n\xae\x16\xba8\xfe^p\x04\xba8\x9e.\x8e\xff\x9c\x17\xc7\xd3;F]\xad?MN\xc0\xf6\xa6\xcar\xa7\xdc\xa1\x0f\xf4\x8e\xd1=\xdd\x98]\x8dVz\xc7\xe8\xbb#\x95\x9die\x07YG\xef\x18\x91:J\xea(\xa9\xa3_J\x1dm\xce\xe2:y\xd1Mg=\x8f\xc0\xd7y\x10\xdb\xd0\xf2\xf2[?Sk\x0b?\"\xc9p\x1f\x08\x92$\xc36TL\x92\xe1n\x92\xa1\x95\x0f\x9c\xcb\x19\xd1\xd9wBg\x0dD\xf0\x82\x12\x04\xbfP\x82\xe0\xfaV4\xc5\xb4\xbb\xf7\x86r\xf8(}\xe7\x9bR\x8cv`\xa6\xbbq\xedo(}\x87r\xf8\x88 \x10\x13\xf8\xce\x99\xc0\xae.\xeeo,\x87oM\xb1\xea\xafKQ!\x05\xf1_\xe2\xbf;\x1do\xe2\xbf\xa4\x84\x11\x13 &\xf0\xbd3\x01R\xc2\xa8\x90\xa2\xc9{\xbeq\x87\xa8\x90\x82\n):\x99\xde'e\xf5TH\xd1cF*\xa4\xe8'[\xa9\x90\xe2\x1b\xe0\x08\x94\x9f@q\xe3\xcf\x97\x9f\xf0\x81\n):[\x97O\xf0\xd7\x99\x84\xbd\xa4B\x8a{\xb81\xbb\x1a\xadTH\xf1\xdd\x91\xca\xce\xb4\xb2\x83\xac\xfb\xa2\x85\x14\x1b\xc2H\xaf\xa5\xe9!\x9d\xe8V/\xf2C\x93)\xd2\xcd\x04\xfb\x98\"[\xb3\x8e]\xf5\xf1o\xc8\x0fM\xc1(b\x02\xc4\x04\xbes&\xb0\xab\xaeF\xc1(\nFQ0\xaa\xbe\xf2-y<\x05\xa3ve\xf5\x14\x8c\xea1#\x05\xa3\xfa\xc9V\nF}\x03\x1c\x81\x82Q\x14\x8c\xa2`\x149\xb2\xd7\x19\xce\xee\x8el\nF\xdd\xc7\x8d\xd9\xd5h\xa5`\xd4wG*;\xd3\xca\x0e\xb2\xee\x8b\x06\xa3\x9a\xe3Q?\xf6T\xdf\xc8k@^\x83\xef\xc1F \xafA\x8f\x19\xc9k\xd0Fk\x1f\xd3k\xb0\xc6\xabAZ\xf4|N\x93\x9c\xc7$\x06H\x0c\x90\x18 1\xd0\xdd\xe3~\x8b\x01r\x1e\xdf\x0b\x8e@\xcecr\x1e\x93\xf3\x98\x1cO\xeb\x0cgw\xc7\x139\x8f\xef\xe3\xc6\xec\xea\x10l\xf1\xb0\xb5\xfa\xf8\xba7\x88\x92\x86\xbaZ\x92\xdd\xd7D\xf8d\xf7\xed\xaa\xe5\x91\xdd\xd7cF\xb2\xfb\xfa\xa9\x97d\xf7}\x03\x1c\x81\xec>\xb2\xfb\xc8\xee#\xf3\xe2\xa3\x99\x17d\xf7\xdd\xd3\x8d\xb9\x9b\xddGIC\xdf\x11\xa9\xecL+;\xc8\xba/\x984\xd4\xe0\xcdp:\xd3y\xae3u\xd2\xcfgU\xe0\x1a\xc0\xc5\xd2\xce\xbe\xd0\xf6UK\xc9\x1bB\xde\x90\xef\xc1\xf6!oH\x8f\x19\xc9\x1b\xd2Fk\xe4\x0d\xf9\xe68\x02yC\xc8\x1b\xf2y\xbd!-*\x9d\xbf\xadc\x13\xf9\xd0\xa5#}/\x1dY\xc3qnVu\x9f\xe6m(\x9b\xcc\xce\xbb\x99\x9d\x9bv\xea\x9c|\x85\xdf\xde\x86\x93\xaf\xf0\x9en\xcc\xae\xfe\x9f\xe63\xacm\x8fd\x10K\xe2\xee#\x89;\xb2\x11>\xa9\x8d\xb0\x83\xfe\xba\x9b\xa2\\\xf4\xfa\xfa\xef\xd8*x\x82w.\x0es\xdf]\xf7\xa6\x93/\xb1\xcb\x97\xa8\xcdB\x9b\xe1\x98\x1b1\xbc~2\x16\x96?\x19\xbe\x10\xf1\x91\x96\xaa\x1b\xbb\x13\xa1\xf4b\x1dg\x0e\x97\x0b\x9d\xa9\x06F\xb2\x8e \xcd~^m`\xf3\xf9pz}\xd7\x19\xd1iq\xcb0ms\xefm\xae\x03\x0f\xf8\xab\xaa(\xd9\x02\xe2\xaa\xd5=\xe8\xc1\x8f\x9a\xf8\xc1\x96L\xa9<\xc4\xae\x9cI\xa7\x85s\xaf?[\xda\xca\xc5]PI\x15!%c\xbd\x8c\xd1r\x06UA\xbe\x0e5\xe1p\xa8\x99\xc3I\x17\x8e\x9bV\xb6\x0d\x82\xcb\xfdw\xc7\xee\xcf^\x1f>D\xee\xdb\x1f\xc5\x15E\xba\xc5YS]|\xbdG\x05\xab\x05\"\xc3W\xab\xd9o\x0e\xd4~\xb8lY\xc7v\x08\xad\x0d\xb25V\xd1D\xe8\x8f\xc3en)\xd5T\xd2uS\x03~\x12V\xa4\xb9\xeb#X\x16]9f\xf7\xdc\xccj\xd9\xd8**\xfb\xa8\xd4\xde>\xdbv\xcf\xf2C\x04\x81kc@\x99\xea\xbb\x81q\xdeg}\x13\x8bo\x95\x8d\xc4\x9f\xdd\xaf\x15f\xc2R\x11\x0by-&\xfd6\xb4\x98\x94$e/I\xe9\xf3u\xbd\xa3\xbak\xe7{\xb1\x8d\x86\xfe%\xea\xdb\x8e\xf8\xdee\xd6X\xae&R\xcd>\x82\x0e\xde\xbb!QM\x17\xd5\xac\xf9\xfe\xdbw\xac\xacH\xeb\xe2+\xdb\xcf\xd4\xa3\xc0\x0f\xd5\xc3\xa0\x82E\xca\x91S\xf9\xf1 \xa9\xc4\xedR(#\xaf\x85\x13~6\xe5\xf1\xd5\xc0in\xfa\xc60\x03ka\x86\x83s\"\x9e\x8b\xf8\xaa]\x8b\xebAV\xdbQx\xc3bw\xe6\xb3\xe7 \xe4d\xf6\xa7o\x83\x1dv'\xdb\xc2\xc6\\\x8aT\xea\x06\x89\xd5\x18$\x99\xa6<\xb6U.\xdbJ\xd5\xd5\xd5\x1d_\x0be\xab\x11\xa2b\x9ba9L\xb8&\xc3H\xfd\x08aH\xb7\x1bn\x83e,-\x9c\x04\x1f)1V\xa7\x10\x05\x1fF\xeab\xee\x1a\x19\xa6\x84\x98\x88\x89\xa3\x90\x98'q\x96p\x0ba\x90T/S \xff\xc6\x13\xa1\xa7\xccX~\x85\xd9\xfdWBy\x82+\x0c\xb8\x90\xbf\xc6S\x0c\xa8\x03y2>\xb5\xc2\x91%B9\xe7\x86\xe98\xce\xd2T4Yz~g\xaa\x06\x87\xff\xadM\xbaA3\xe5\xe4C\xeb\x948=e\x87j5d?\xea\x1bq\xedD\x92#\xf5\xf7g\xaf\x03\x8d\xbb.\xa0\xe0\x98x.\x16\x82]\xce\xad]^\x0e\xf0\xff\xe6\x122\xc1\x94f\xf8u\xc0\xdc\x169\xa1\xa6\x81p\x00b#,\xcb\x96>\x1b2RF\xa4\xd7\"E\x10\x17|i\x10\xdb0\xa3\xd5y\x8a$H\x04\x89\x87\x8d\x1b6\xd5\xc0\xf9\x0e\x1cr\xfe\xc8N\xa6\xc5\x94\x0e\x81\xcbT\xbb\xa30\xc9\xa1\x02\xe6oL\xb6\x10\x93\xa1\xebp\xa8\xd8\x8f\x17\x17\xa7\xec\xd5\xf1\x05\xf3\xbe\xa9\xf7g\xaf\x91.V -8\xfb\xa5\xbe\xc5\x17\xab\xa5\xf8\xf5\x97_#\xc5\x82&\xa9\x02\xa6\x91\xe5\xc1\xda\x97\xa9\x9ed\xb1p\xb2F\xa4\xa9Nq\xbe\"q\xcb\x00\x97\x00\xc6\x1dXO\xec(V\xeb\xabl\x99k\xb7c\xee\xd4n\x04\xcdM\xf8\xfe\xec5\x8c>\xe7\xd7\x80\xfeEi\xdf'\xb8\xf1<\x00\xe3\xfe}\xad\xe5\xc4)\x0e\xae/\x0e\x0dd\x99\x8a\xa9N\xc5 \xb4t\x03p+\xc72qr\xc3qC\x13\xf4~w4\xd2kw@\x99\x03#\x9es5\x13\xf0\x15(j\xc8\xf6\xdf\x1b\xc1|\xe2\x9e[\x88\xdb4G\xf4\xb8k\\\xf1\x19\x00>N\x05rN?\xc2\xf0!\x88hm\xc5\x01\xb3\xee\x84O3\x15#i8\x18<\xf5\x03\x9bt\xd6CY\xcd\xc7}\xd2`Z8\xdd>l\x0cK\x85\xe3\x07b\x00*\x81\xb4a\x90\xcc\xa1\x10\xf4\xf1\x9c\xa0\xc6b&Q\xe3rl:R\xee\xcb\x10\xf7\x99/\xa5\x19\xc6z\x01\xe7\xed\x1cH\xc9\xa0y\xe0HS\xd5\xe9\x9c\xed{w\xacX,\xed\xca\xd3\xdeC\xb6\x00\x114\x16\x91\x82\xd9Ao\xc9\x15\x0d\xd4[\xccR\xc4r*cf\xc4\x82++c\xff\xee\xb0#\xa9>F[\x95\x0f\xbfq$;\x16A,\x96X+\xabs\xd6\x90D8\xd6\xd7\"@\xe1w\xae\xc9\xb7ry\xa8V\x97Ee\x13W\x8c\xa7ciSG8\x1bf \x07\x96'\xda\xa3\x99\xf1H\xb9\xd3\x05'\x1c\xe7\x18o\x14\n\xb9\x0cp[q\x1av9\x91c\x98\xdb\x1fn\xc3L\xb6\\\xea\x14\xf8\xd8\x92\xc7W\x8f3\xe5\xfe\xe7\xb8\x17\x9eO\x13H\x06\xb9\xad\x9e\xb2\xcc\"\xa5\x07\x9a3\x0c#0\x12 \x90\xcd\x84\x12)\xa8\xef\xa8\x06\xe6\xd1\x077&\xe0\xc9At|\xcbA\xddzr\xc0N\xdd\x84\x8e\xea\xfc\xdc\xbc\x9c\xd2}\xf4\xa7?a\"7c\xec\xa5\xd6l\xaa5{\xc6\x86\xc3\xe1\xdf\xf077(W+\xff\x17W\xab\xa1\x1b\xeee\xaa\x17\xfbS\xad\x1f\xfa\xdf\x87\xc3!\xfeCN\xd9\xbek\xf4\x1e\xa6\xba\xd0\xfb\x7fp\xad\x1e\xb2\x7f\xe1\xe7R\xcb\x0fe(\x9fv@\xf9w~\xcd\xfb\x80\xc9\x9e\x81\\p\x03l\x04O\x9a\xfd\x97Z\x0f\xe3\x84\x1bS\x86\x0e\x87u-\x10\x8aR\xab\xbf\x95\xc0f\x01\xee\xbft\xc0}\xba\xb2s\xadr\xc8q\xf8\x97Z\xef\x0f\x87\x8e\xc7x\x94\"\xd4\xfb\x0f\xab8\x86\x05\xac\xc3\xef>\x9f \xf8/\x8e\xcf\x8f\xceNN/\xde\x9d=<\x08+(\x90_\xea\xefG(\x01\xfe\xd7\x0e\xc0_\xe9\x003\x00}\xf0\x8c\xfda9\x1e\xbe\xd4\xfa_\xc3\xe1\xf0\x83\xff\xc2\xd5j\xe0\xe4\x87\xfb\xbcD\x8e\xfb\x86\xa7f\xce\x13\xb7\x9c\xd2\xf49\xfc\xf5\xc1\xc2HrZ\x1b\xe7\xbdZ\x14#\xc1<\xb0\x9d\xd0\xea\xdf\x9e1%\x93b\xd3J\xc3\xc3\xee\\\x80s*\xbe\xca\xcfG\x90\xb4\xce6Z\xd6O\xea\x8dL\x12\xf7\xc1\x97N8\x86\x1c\xa9\x07\x0d<\xf7\xb1S\xbe\xa02d\xe8D\xc8\x03'\xe1s\xf6\xe0XG\xc8\x86F|F*?\x9e*Y\x05\x8ddM\x83\xcbE\x92\xd7\xc4mP\x0c\x1f<~\x10)\xcf\x1b\xc2\x14\xa8\xe7\x08\xbf\x87\xd1\xdeT\xeb\xe1\x98\xa7\x00\xdd\xed\xe3\xd5\xf0\xf7h\x0f\xd7\x83\xea\x01\xaa.0x\xb4\x07_\x81\x08\"\xf5\xf7\xf3wo#\xf5\xec\xd9\xb3g\x88-\xf7w\xa1j\xa2\x04\xd0\x8e\xd4\x18\xf2W\xd4$2\x93gV\xcd\xb2\x84\xa7\x91Z\xefb!n\\p\xc9\x01\x13\x8b\xb1\x98L\n~9\xf0\xecVE\xaa\xc4\xd4\xd0\xfa\xbd\xfco\x07\xf2\xa5W\xe2*\xf5\xaa\x01\x05\xc3@\xc2\x07\x81@\x1d\xb2\x1d\xd5\x16\x9a\xd0T&\xc2\x1f\xd7@\xd2\xa7\"5Z\x154\xe3U\xf6\xa9L\x8d\x1d\x01\x86\x9e\xb1'\x7f\xab}\x85\xf2~\xff\xf1i\xe5\xfc3V\x0c\x15\xed\x01\xd4\xd1\xde\x01\x8b\xf6\x9a\xe8\xa6\n\xd8\x10A\x89\xf6\x06\xc5\x00\x00\xc6[\xbe\x80A\xfe\x13g\xff\xaf\xd2w\x07H\xfds \x9c\x93\xa9\x17\xf2UL#\xce\xa4a7\"I\x1e])}\x83\xfe\x889xu\xbc+\x01I\xa1\xba\x91\x03\x94\x82\xb5\xdd\xc5\x83R\x9a\xc6m\x1fT\x12\xc0\xe6E\xea\x12\xc8$\xec\xde\\'\x93\x8a\xd3\x02\x88\xcc\x99\x18~\xd7\x99\xb7\x03\xfc\xa6G\n\x86\xc9\xf7\x97\xed;Z\x0fKY\xd3s\x83)\xf3\xeb/\xbf><\xb8\xcb\x9eT\x87\xabl\x0b\xac\x07\xc7x2|\xfa\xe4\xa9\x89\xf6<\xd6\xd7\xfd\xeey=u*l\x96*L\xb1\n?\x1a\xf2\xb1\x7f\x03>\xf6\x06wG\x9f$\x88R7vvz\x14\xe4B\xb7{\xe5\xa3\xf8V\xc8\x87B>\x14\xf2\xa1\x90\x0f\x85|(\xe4C!\x1f\n\xf9P\xba\xc1$\x1f\n\xf9P\xc8\x87B>\x14\xf2\xa1\x90\x0f\xa5\xe7\x9e\xec\xe8Ci6\xb3w\xb1\xb1\xcb\x06vC\xe6\xdaT\x88Y\xca\x95\xcd\xed\xebW\xee\xafn+\x19:5_ T\x05\xdc7\x0c\xa0\x86z\x19\x7f\x983#R\x06M`\xaf\x15\x1a\x05\xdc\xdf\x03m\xe7B\xa6NS\x99\xa0~\x88c5j\x88M\x93\x8aM\x93\x8e\x85\x9b\x11\x1bN\xd6f\xe6\n\xd5^\xd7\xf4\x81)\x81\x90\xb7ZwT\x15\x03\xf8,0'{\xf5\x94\xe1=\xcb\xeehLebE\xea4r!\x8a\xf9\xba\xfdU\x96\\\x12\xe4\x92 \x97\x04\xb9$\xc8%\xf1\xdd\xb9$\xca\x85` \x9b\x19\xf0_\x9d\xe2\xed\xb6\xae\xeb?~:\x87\xe4H\xab\x99\xa3\xbe\xd4\x1d\x13\x10l\xb8P\xc7B\x03\x1f\xd9$\xf9\x83'\x1f\xa5R\x7f\xd7z/\x91\x08\xd7\xe7\x15\x7f\x06\xb9\xeb\xe8 \x08\xeb\xf1\xca\xff3\xed\x96\x88\xa4~\x90\xfaA\xea\x07\xa9\x1f\xa4~\x90\xfaA\xea\xc7W\xa4~\xb4\xe6\x0fT\xb5\x8e>\x9e\x8d\xbcS_\xd7Fu\xaa-jzsYy\x87\xf2*\xd2XHc!\x8d\x854\x16\xd2XHc!\x8d\xe5+\xd2X\xea\x90\x16\xca@q\x02\xdc\x9f\x0fL\xa7Wc\xfbLW\xae\xca\x89\xaeA\xff\xa1L\xd7/\x99\xe9ZS\x1f\xb7RU\xdb.\x90\x98\xe9\xebaq[\xf9R\x9b>\x0f\xc7-\xfd\x0b\x11\x8d/N6\xd6qOph\xdd\xa0\x866\xd5\xf9o\xa9\xe2~\x8c\x1b\x04\xb6\xbb>@\xf5\xbe7\xe0\xc4\x1d\xeeOuo\x80\xdf\xb1\xf2\xa9\xf5 x\x84\xfb\xfbC\x95S\x87\xe0\xf7\xd2\xb5\x81\xf0\xab\x95\xd7\x02$\x01lh\x07e\xf4\xbd\xb2|!\xd5h\xb2FL\xb4\xa9}\xee&}#\x95\\d\x8b\xb0\x81\x0c\xefs\x08\x1b\xe4\xf6M\x80\x95\x86\xaf\xe90\xbcM\x01\xc6Y\xf0\xdb\x80\xf5\x0d\x97,\xd4f\xe3\xb70\x1b\xb6\x87\xc9\x0e\xdd\x02\xe6:\x99\x88\x14\xc8$\x00\xe2\xb0\x94\xc31d'N\x99\xe4 r\xb3\x03\xf64Rl\xa1\x95\x9d\xa30v\x14\xe0\x14\xe5\x89#A\xa2\x85;\xd2B\x8e\xc9]\xa8B\xaa\x91\xc4\xbd\xca\xa9\x03,\xadn\xe2p\x0b\x86\xa6\x85\xa9\xe7\x06\xb7\xfe\xf6c\x9d\xdaJv\x14B\x86\xd2\x0d\x8d\x11\xafZ-\xb9\xd3\xa5m\x01\xae\xc9\xc6\xfe\x8e\x9b\xa6\xdc\xd7\n\xb3Y\xbf\xdd\x13_\x10\xf0\xd3\x19G\x963}-R\x05\xf6|\x98\xc2\xb4q\xb2\xf0\xb8Q7\xcdm/\xe4@s\xeb\x93\xc3b\xc9K@^\x02\xf2\x12\x90\x97\x80\xbc\x04\xdf\x9d\x97\x80*=\xa8\xd2\x83*=\xa8\xd2\x83*=\xa8\xd2\x83*=\xa8\xd2\xe3\x8bUz\x0c\xf6\x8c\xe5\xb6\xf2dj\xae\x0c\x85w\x92\xc3\xa3\xc0\xa3\xf3\x8b\xc3\x8b\xf7\xe7\xa3\xf7o\xcfO\x8f\x8fN^\x9e\x1c\xbf\xd8\x1b\xac}}q|\xfa\xee\xfc\xe4btz|v\xf2\xae\xa9\xc1O\xef.N\xde\xbej\xff~zx~\xde8\xf2\xd9\xf1\xdf\x8f\x8f.\x1a?\xbd<\x06\x8f\xfdZ\xd4\xa9\x1a\x9fh\xc6G\x8f\xe9*#ch\xbc\xc8\xd7\xdbr?_Wv\xadHV\xab\xef\xdf\x87\x92\x8b\xa5\x8dD\xab\xdf{\xd0\xa8\xef\xd0M\xa4\x94\x94\xda_\x06RR*\xd1B\x17-|\xdbI\xa9N;\x01wy\x1b\xa3*\x7f\xed\xc1\xa6\xa0y7\x93\xfa-\xd3i\xd6@T\x9d\xf9I~S\x96\"\x8d\x85\xb2N\xe1r(\x00\x1d\xc9X~%JO\xd6]k+\xfc^\xa1\xd2\x84:]\xa4X\xac\x95\x91\x13\xa8{\x05\xbf\x1b\xec\x95\x9d\xa7\xc2\xb8\xa3w\x07\xa8*\x1b\xf3Oa\x00\x86\xba \xd2\xa0U\x0e\xd9\x0b\xef\x89\xf3\x87\xf8\xcf\xc3\x1f0sKX=\xfa\x08\xc0 -\xe8)\xfbIxd\x00G\xb9\x00\\\xe1\x9fH_u\xe8\x00E\x0e\n1Y\x03\xf2\xc9\xe3\xbf\xd4d\xe8G\x80t\x13\xda\xb8*\x1d\xc0\x1e8\xfc\xf7\xff\xbd\x06\xdf\x9d)m\x17\xe0R\xc1\xe39\xc3\xa9\xdb\x80l\xd3\xb7\xab\xbap\x1fm\xdbg\x90\xf7\xd5\xb5=\x9c\xfd\xb5\xed\xb0\xb2\xfe-\xfb\x9b\xf2\x94KN\xb9\xe4\x94KN\xb9\xe4\x94KN\xb9\xe4\x94KN\xb9\xe4\x94KN\xb9\xe4\x94K^\x99\x82r\xc9)\x97\x9cr\xc9)\x97\x9cR\xd9(\x95\x8dR\xd9>[*\x1b\xe5\x92\xb7Y{\x94K\xfe\x05\xc2S\xdfQ.y\x8b_\xbc\xe6\xb7\xee\xe5\x19\x0f\xc0l\xe9\x1b\xdf\"\x15%\xc0\xfd1\x923\xc8kN^s\xf2\x9a\x93\xd7\x9c\xbc\xe6\xe45'\xaf9y\xcd\xc9kN^s\xf2\x9a\x93\xd7\x9c\xbc\xe6\xc5\x00\xe45'\xaf9y\xcd\xc9kN^s\xf2\x9a\x93\xd7|g\x9f#y\xcd{\xe0\xfak\xf3\x9aS\xa9\xed\xd7]j\xbb\x16~\xd8&\xc6\x01\x05\x00\xc1\x92\xda\x18\xe5(1\xbd\xfeq\x0e`\x85\xdd\xcd\xbef^\xde\xbc)\x0d\xd8\xea\xb3-\xd0\xado\xdc\xe9'm\xb7x\x0f\xfaZ\xdb\x1e\xad\xb6\x8f*\xb9q\x9b\xafT\xd0\xcbf\xa6\xf2\xc2\x99=1\xb7br\xc0NS1uF9\x06!.\xb1\x8b\xb9dR\x19+\xf8\xc4\xc7\x7fr>o\x84u\x1c\xc7\x9dk)L\xa4\xc0]3A\x07\x80\x9c\xb2\xcbD\xa8}?\xc6C\xf6\xec\x19{r\xe9\x9d\x06\xdc\xfa\xd8\x03\x18g7\x02\x1c\xb4O\x86\xec\x04\x1eL\x8c\xfc3\x8917\xc2\x0c\xbcG\x1a\xe6\x04\x9b,(\xbfV\xb3\x9f\xde]\x1c\x8f\xde\x9d^\x9c\xbc{[\xd6\x95Klo\xcdHi\xe9\xb27\xa8|\xf9\xe7\xf1y\xed\x97\xc3\xe7\xe7\x17\x87'ok\xbf\xbe}\xb7\xf6\xc3\xe8\xe7\x93\x8b\x1fG?\x1d_\xbc\xab\x9a\x19m\x13\xe7[s\x87\xe8c\xb1\xb7_\xcd\xb2\xeb\xe7\xd4\x1d\x9fwH\x13\x8dV\x15T\x02zD\x05\x0e \xafE\xe3\x8b\x1a\xc1\xd6j\x99\xfb\xa0\xedC\x89\xe5(\xfdH/\xcb\x93\x0e\xd7F\xfc\xe7\xf1\xf9A\xfd\x87\xd2\x08+_f\xd6\xda\xdf\xa3\xf6\xa0\xe9\xc7b\x1c\xc5<\xdb\xdd<\xd8\xdbw\x07\xb5\xbf+\x8b\xe9\xea\\\xec^}\x98\xe2Ku@\xd0\x11\xafCYb\x18\xdaQ3\x1e\xe7>\xdc\xfegh)&\xa5\xbd/\xe6\xc8\x94\x84\xc0g^\x02\n\xff0\xcbD\xa2\xfay.U,\x0e\x18\xb2\xe3Gfr\xc5\xfe<\xfc\xeb_\xf6J\x0f\xdb\xb5\xb5X\x83\xc3\xcd_\x9a\x19\x17\xa4ZdL\xa4\x0e\x19t\x80\nTc\xeb&\xd5\xc9\x8bA0UE:\xc8\xbd\xa4U,5\x8b\xa9\xb2\x08\xe9#\x9f\x00\x8c-\xc4\xd3\x16)\x11P \xb9;C\"\xc1E\x82\xab\x0f\x9d\x90\xe0\"\xc1E\x82\xeb+\x12\\u\x08\xb0\x90>\xd8\xc7\xae=2U\xa4{\xcc\xa2 \x97\xc6\xd7\xed\xd2\xa8\xa8\x0e}\xf5\x92>w\x19\x80}\xdd\xf7\xa1\xce;_\x02A\xd7\x8dt\x01C\xd7\x8d\xdc\xf3\xebF\x1a\xdde\x9b\x1f\x9f\x04\x97\x99T3\x0f\xc3\x96OP\x96\x1cg\xdd'\xf4k\xf6\x1b6\xae\xfe'r\xd2Y\xb2u\xc8\xd6![\x87l\x9d\xef\xd2\xd6i\x91 \xef\xe8$\xd3I\xbe/'\xb9\x99F\xa5\x9a\xf55\xac\xb6\xbcA\x97nD\xfeNoDn`!9\x95\xb5Y\x1f~\x90-\xad\x8eu\x91\xd3M\x0b\xa4]\x11O\xbe7<\xf9\x8bkW\xfeP-\xa4\xb2\xc5#>=\xe5\x81\xeb4j\xc9-,\xb9'}\x95X\xac%\xa4\xb6\xbb^nf\xa9\xa6 8nG\x8e|GXa\xb8i\xa0\x85\xbfA\x9b+\x95\xf1\xc4\x97$:\x8b5\x1f\x89\xb9\x91\xaac/\xf8m\x9f17\x0e\xd1\xe4\x91(\x0d\xe1\x9d9\xebC\xcc4OFc\xad&\xa2\x91\xbb\x86\x01\\3\x87 \xefwd\xd8\x83q\xab\x17\xc6\x0d3Nt|e\x1c\x9b\x1e\xad\x04op\x07lr\x0ec\xc1\xb0\x980\x1c\xc5M\xc2`\x94\x06\x89\x86\xdc\x18\xeb\x13J\x17>\x07\x97\xad\xdb8\xb6\xd0\x93,\xa9<\x82T!\x1dp\xeb\x1e\xc2\x06\x9d\xa6\xfaZ\x1a\xc7\x82\xfa\x07\x93qkG\xcb\xbc\xeb\xc6\xc56\xfa\xd6\xd6\x86\x08~h_\x95\n\xcb\x80\xf2\x0c$\xa3RC\xf0\xa1\xb5\xc6\xdc\xdbV\xb5\xd1\xcf\x1d)tt\xd7;\xb7\xf8\xbc\xd7qy\x12\xa8\xaa?\x12sB\xdc\x1ey\x05\x0d\xb7 \xadh\xb0\x19Yk`\xf7\x89\x06\xe4\x9d\xda\x92\x1b\xd7\xd1\xb3\xed[\"m\x17\x9fo\xbe\xf2\xdc\xab<\x81\xf6\xbb\xe2J\xc4\x17\xbfj\xbe\xf8y\xae\xeaF\x8a\xab\xca\xdc\xa3\xfa^\xb7\x10\x98\xc9\xc6f\xc9\xe3fK\xa61\xa0\xd9^\xa2\xde\"\x07\x10\x94\xb2j%\xd5D^\xcb \xf0\xccp4<\xb1a\xf9%^G\x11\xa9\xd3\xf0\x15\xc78m\xf0\x9d\xd7\x16\xbf\xfbQn9\xc9\x95\x83\x1c\xe2\xcc9\xd4\xdd'\xf8\xe3\"\xb87A\xedLL&\xe1f.\xd5lk\x15\xce\xc8\x99\x12\x93\x91?J7RM\xf4\xcd\xc6\x83\x94\x87&\x16R\x8d|ow\x02{t\x05\x89\xe3P\xa1o\x94\x95\x0b1\xfa\x1f.\x93\xd1\xc4\x17\x186\xa2\x14\xd65\x9a\xc2\xe5)Z\x8d&:\x1b'\x02\xa6\xed5\xd3Zw\x9c\xb8G\xdf6\xe5(/\xfd\\\x93\x11\xf9}\x15c\x0c\xf3\x87-i\xd0\x98\xd6vkw\xfa\xa7-\xbeW[\\rW\x7f,\x99\xd1I7\xe7r\xa6\xa4\x9a\x9d\xa8\xa9\xeeO<\xd7<\x01\x1cK5\x1bI5\xd5\xdd=\xfc\xeb\x7f\xcd{\x08\xe5V\xf3\x16[v\x8d\xb4\n$\xfd\x88\xb1B\x1eJ\xc0\xc0}\xc1\xadN\xd9\x0d7X\x84\x8e7/M\xdc\xcf\x82\xbd;\x83\x0f\x99\xfa\x1f(BD}d\"nGz:5\xa2\xdf\xdc\xd5M?q\xddC\x01\x9aaR\xc5)\xd4\xa0\x89 \x838\xbb#\xa6\xc2\xb3\x92\x83\xc6\xbd6\x027\x11pT\" 8\xb0\xe0+\xbc\xe6\x07\x0f\x0e\x84\x12D\xac\x17\x0bg\xa0\xa7Li\xeb\xc3\xae\x12RE\xfe\xc7\xdfe\x82.\x020\x18.\xcf\xa1\xe7s8\xaf?\xc3\x99\xbbdA\xaaY\x91.r\xc1\x06K\x0fiO\x97o\xa41\xa1\xdbsi\x0f\xd3\x94\xaf.\x81\xed \xb2F\x99\xb2rsjQQ\xd6\xb6\x166\x97\x0ba,_,\x19\x8c\xe2\x11V\xc5\x8b4\x0cgb\x93L8\x8d6\x91\xd7B cX8\x95\x98\x0b\xa3\x17cc\xb5j,\x96[\xf3z\xcc\x05\x04\x8f\x11u\xe1\x9e\x1c\x98n\xce\x0d\x83\xfa\xd7b@\xb6\x7f%\x13\x07\x80\xce\xd0\x1d\x9276\xc2>\x1c\xb2\x13\xeb\xe3\xdc\x91\xd2*\xae\xef+\xee\x12\xe8:\xe2\xb7L^k\xbc\xf2\xc9\xcd\x8d \x19+\x7f\xa3P\xac\xd5T\xce\xb2TL\xd8B\x9a\xb1\x98K~\xad\xd3!\xb2L\xb7 \x81\xd9B~US\x00\xbf\x93,\x0f\x99\xef\xcb\xae\xc4\xd2\x16\x97BeJ\x89X\x18\x03\x17\x84\xb9\x1df\xa9\xe0\x133\xc4K\x990\x16\x7fy\x9e-\xf6\x9b\xa8\xe1\xe1%\xe3\xc9\x0d_\x19\xb7>\x9e\x98*\xcd\x1c\xe1\x84\x97\x8d\x1e\xdc\x80\xa4\x12\xb3)\x87\xd8\xc2\xe7\x07\x86y\xae\xe2\xd4~L\xffYh%\xadN}a\xb6L#\x95\xd3\x05\xbc!*->!\xe5YB\x9d3\x05\xa6Y\x19\x17\x92\xdb \x87\x0d\xd3\xac z\x17\x1e(]g\xc3\x0d,\xb2\x0f/./\xb6d\x91n\xc3\x91\xb7\x90\xe756\xbce\x84\x83\xd83\xb1gb\xcf\xc4\x9e?\x0d{.1\xd4M<\x99'I1\x19\xf8h\xaa\x19\xdd\x9bY\x18\xa5c\xef\x9a\x8e\xbdn\xc9\xcc\xaa\xe5a\xbar?\x91Tl\xe6\x0c\x8c\\\xf6\xf9\xcb\x84\x0c\xbb\x99\x8b\xd4_\x10\x1a\xeb\x14\xbf\xc3]F^\xda\xe6\xd7\x0e\xb9\xd3\x0d\xe6P\x19~\x88$\x86\x16\xe7zQ\xc0P\\I\xc6\x9c}%\xe0\x96\xbe\xe7<\xcdqR\xbed\x8a1VY\x00l\x8e\xbfh\xea\xc3F\xe1\xbe\x95\xa5U\xee\xd7W\xbc7\x1d\xb4n\xc2&\xd9L\xb2\x99d3\xc9\xe6O&\x9b\x03\xbb\xb2pYo\xce\xad\x9ek59\xef\xbc\x8c\xed\xf9\xbb\xb7/\x9ao4\xab~q\x7f\xb5\xfc|\xf2\xf6U\xedw\xdf\xb8\x92\xdd\xd2>Q\x15c\x05\xd8\xb9\x9eQ\xba\x91*GXH\\i\x19\xf6\x805&\xab(&\x95O\x92)(\xbct%Z\xd3\x9a\xddP\xf8\xaf\xa6\x8dC\xca\xf1\xb7\x16#kk\x1b\xea\xe4\xed\xab0\xd6\xc9\xdbW\x1b\x07\xcb\xd4\x18E\xef\xfaX\x01\xa8\x1e yp6\xd0\xc8\x91;\xb9\xf0@t\xb7\x1c\x8b\xf3\xb6\x10\x9al\x08\xa3\xd6[T\xe20\xfemlV4b>q \xd4\x93\xdc\xbb\x1a\xa7\x82c\x84\xbe\xb4\xd9\x9d!\x1b\x08.6\x90y\x15@\xd7*\x8fmW\xe1\x80[\xe8g\xe1\xfd\xfdD\xcc@\x89\x1d0\x10Y\xc1\xc1\x8c\x9c\x8a\xdf\x8e\xfaM\x17ZV\xf0\x10b\xab\xf5\xf9\xebr\x8f\xc0\x0d\xdbXE\xfaa\xb0\xd7\xdb\x97\x00\x8e\x94\xde2\xfa\xc3\x00n\xdbF\xfb,\xcc\xedwx\x99\x8a\xebm6x\xce\xcd|\xe3\xb4!\xba\xbf\xe4\xa9\x1d\x19aG}\xc9\xaf\xee\xaf\x93\xca\x8a\x99H\x1b\x17\xdf\x13\x8a\x92\xbf\xe9\x94\xa7\xd6\x08\xfb#\x02\x03\xca\x0e\xe0\x04\xcd\xdfQ\xbf\x01\x8b\xe1\\{$\x00\xc4\x9d\xa3\x13`\"\xdc\xf2\x9e\x83a\xda\x91w\xb8\xf6\xec\xb3\x06\xc04\xd5\x8b@\x83\xce\xfe_f\xb6\xf8\xad\xd8[7\x19\xf8[\xb7\x9e\x11\x1f\xb1\xc2s\xd5\xbf\x0b_.\xfb7\x86}\xf0\xde\xc4\xfe\xbd\xc4\xb5\x13U\xb1\xe8\xd9\xa3\xc0\\\xc1&\x80\xe0\xf3\x9a%\x91\x8eZ\xbd}\xdd\x19(HX\x15\xe5#g\x1bh\xfd^\x085\x01?\x96\xf54\x83\x07c\xe8 \xa1\xea\xc8\xdb2\x84\xe8\xfe\xedvu\xd3\n\xaa\xf0\xd6{T \x0f\xbf\xd5\x15\xb3\x07\x86\x85~\x7fcc\x11\xcf\x99P\xb1\xf6~\xe9\xbf\x9f\xbf{;\xac\xd2\xcb2\x1bW\x83\x02mG\x9f^?\xa3\xd7\xcf\xe8\xf53z\xfd\x8c^?\xa3\xd7\xcf\xe8\xf53z\xfd\x8c^?\xa3\xd7\xcf\xf0\xdf\xf4\xfa\x19\xbd~F\xaf\x9f\xd1\xebg[\xec\xc9\xce\xaf\x9f\xf9\xf4\x9aB\x19j\xcb\xcf\x08 \x1f>\x9f\xeb\xc6\xa7kTl\xe5\"S\xc3\xb7\x06\xb7\x8c/\x84\x0cQqL\x8d\xd9\xab\xbc\xbcV\xf3lW\xa2\xe9\xf5\xc07\xdb\xc7\x01\x1f\xe71g\xff/g\xc1m\xb8{\xed\x8b'\x0e@F\xcc\x95h\xae\x12\xafb\x00\xdb\x05o;\xb2#\x88\x9d\x81\x1d\x03\xdf\xf6\xa5\x8a\x93!3\"\x99>\xf2\x1f\xa5V\x0f\xbd[\xdf\x07\xdaFf\xceS\xd1c\xc2z\x8f\xc25\x82\xf7\x89\xe2\x8f\xd2\x98\x0c-\xa9j&H\x11\xd8\xf3\xd3W\x02E\xf5\x99\xd6\x03\x02\x9e\xdf\xe6\xbf[\x91.LS\xcc\xa7\xcbSKQ\xa7\xef3\xea\xf4a\xb0\x97s\x83m\xb2\x13\xab\xd3\xd5\x87\x08k\x1b8\xcd.\xff\x88\x17\xac\xcdk\xf9\x8c``\xd7\x19\xe1,S\xa5\xcc\x98\xbd\n\x94[\xc42\xda\xe1\x84\x0c\x83\x0dP.\x9c\xea%\x9b(\x19\xdc!\xda\x89(+j0\xc6\x95\x1c\x9b\xea\xd4\xf1zj\x82\xad\x06\xfd\x8b\xf4\x84\xee\xe3J\x19:\x94\xfa\xd0\x95\xfap/2tBu\xb1H\xa6\xa3B\xd8\xf6\xc0\xcez\xa75\xb5\xe6\x81\x01!\xce&\"N8f\x9a\xe2M\x14\xfe\xd7\xd0qc\xb6fSl}\xc0\xac\x9e\xa1\x96\x16r\x8e\xbd8\xf7\xef\x1a\xe2FD\xea\xa7\x12(\x8e\x11\x04q\xefMA\xe9\x8c5\x7fM\x07 \x07X\x87Tf\xc8\xceCIqp\xa6Jg\x10\xb9\xa5\xe0V{\xcb\xaf\xd2}\x80\x1eYpT\xea4\x15\xb1e1O\xe2,\xc9\xcd\xafi\xe6\xa4a\xa42U\xac\xde\xc0\x1atf\x99\xb4\"\xc5\xe3\xac\xafA\x82\xe7\xba\x07\xfby.\x14\x82\x06\x9e\xdf\xb2\xce\x14\xa9*\x87\x1e\xd4hP\x1a\xc7&\xf0\x86\xb8\xfc\x99\xc8|\xcfn\xe6\xda\x88\xa26\"Re4\xc9\xaa\x0f\xb9\x84]\x04\xa5\x00\x03n\xa4@\x0b\xde\x16\xb7\xd5D\xaa\x82\x9f!\xfb\xc9\xdfP\xa7o\x04\x1e\xda\xb1\xc8Q\xe4,\x96\xa0\x95\x05\xc5\x1a\xc0\x88\xd4\"K\xac\\&\x12'\xa8\x8e\xb9\xd7p\xabC5\xa7\xa20T1F\x07\xbb_\xc2\x8f\xc2c\xe6\xb0QN;\x83\xb0\xde0R>\xe1\xda\xea\x14!\\\xf2\x14P\xe0\x139|\xcd\xb9\xa3u\x0b4\x80\xbci)R\xbc\xc5\x14L(u E-\xce\x90\x83\x1bT\xaa\x00Fj\xdf\xb5\xf07?\x87\x9a\xf6\xfa\xf0\x97\xf3\xbc\xd3H(\x9bJa.\x0b\x99\xf4pS\x8eI\xdfK(\xbae\xf8Fq\xed\xcf?\x8ano\xb09LU\x85\xb0\xe3\xabE\xe0\xba4Ik\x8a@\x13g.F\x08\xd3\x06\x9e\\\xd4\xf9\x14m\xf2\x89=\xe2v\x9d\xd5w/M\xc9\xc2O\xe0\xf9\x91\xc0\x93\xf2\xf5\x96\x0f\x9aNY*J\x7f\xef/E\xca\x96\\\xa6\x8fm*5n\xdf\xfa\x0e\xef\x02\xe8\xfa(\x01\xde\x025E\x9b|\x01V\x07\xa2\x05X\xdc\x12\xda\xefN\xaa\xceX\xb4\xadHI\xf73\x98\x1c1>Y[\xbcM\x8b\xfb!\xd5\xa8\xa6\x055MU\xba\xc6\xa8\xde\xba\x06\xd3\x1c\x18`E\xf2\x7f\xe2{\xc7&[.\x93UP\xb8\xdc\xa7H\xad\x11X\xcbr\xa1\xea\xecE\xbeO\xfd\x0b\xc3\x8b\xbd\x1d\xa5;t\xea\xddv\x9b\xcc\x8f\xb5.\x81\xec\xc6\"\x9e\xff\xe5\xe9\xa3\x90\xd2QK\x02\xc9\xbb\x85\xb0!R`\xffy\xd7\xba\xf4\x9b\xb7\xeao\xe8\xeb\xc3\xa9xn\xca\xf0C(\x14?:\xc9*\xaf\x9b\xd3\xce\x8b\xcd\xae_*\x03\xda\x0e\xea\x90\xe8|\x9a\x8b\x04\x94\x0c\xae\x18\x8f\xa1~\xc9\x97\\EJ\xdf(T@\xb4*!\xd0\x07\x8c!5@\xc7\x92\xe7j\x96-\xdd\xa8\x0c\xfa\x8e\x9e\xba\x9e\x91\xaa\xe2`\xcc\x13\xae\xe2^\x84\xf4\xbd\xbc\x1d\xde\xb6y\xe5\xa2R\xa8n\xe3\x89S\xa6\xacf\xa5\x0d\x16\xb71T\x9bA\xe1\x8d-\x85\x9e#\xe5Q]wr{\x02\xca\xeb'\x17:\x15\xccd\xd2\x82\xec\x023;\x91n\xa2p\xe8\x1b\xd3\x81[\xb8\n\xeb\xb8M\xac\x04y\xcb\x8db\x1b\xb8\x97N\x8b\xee[\\p\xd1\xc0\xc7\xca\x87p\xcbl5bp\xc4\xe0\x88\xc1}s\x0c\xae\xe5\x1cV\x98F\x81\xe9$\xa9Q\xadyP\\FQ;\x8c\xf4\xb8\xe0Wr\x9b\xc5f!\xd7(|Z\xc5]\xb8\x7f\xb9\xa9\xf3N\x92\xef}0\xb2w\x12\x81\x85\xe7\xe2\xe3I\xc0m\xa4\xcbW-\xd5\xd6}\x13[\"\x0c\xc3\x16Z\xed\x1e\xd0\xaa\x8d\x10V\xe1\xff*nv(\\1V\xeb+\xb6Lx\x1cLa\x88\x10\xb9!\xee\xe0}\xaf\x8d\x12\xc0\xc8\x94\xbc-\xa2S\x05\x0cEs\x0c\xb7b\x94g\xb4.![v\xaf\xd6\xa1\xc2\"\xbdx\xf7M\x12\xcc&u\x96?0+\xaf<0n\xeb@\xf4\x9e|\xc3\xa4\x1b&Xc!\x0d\xe7\xf6X\xd9\xb4\x12I.0\x86\x04\x84\x12<\x15\x89\xb8\xe6\xca:V\xc1'\xdc\xf2\x06)\x15\x9cY\x1co\xcfiv\xc5\xf9F=\xa1C\xd7/\xca8\x90fF\xaaYR:\x8b\x0fJ\x97\x04\x80\xbee\"\x85\x8ed\xdf\xb2\xeckv\xcbs\x94\xf1H\xa7\xf86i\x82\x0e7\x92\x8b_\xbd\\\xac\xd3\xcen\x02r\xe3(;I\xca<\x08\xd6_<\xe6\x14\xdb\xdd\x94\x8a\x95\xa8X\x89\x8a\x95\xa8X\x89\x8a\x95\xa8X\x89\x8a\x95\xa8X\xa9G\x15\x10\x15+Q\xb1\x12\x15+Q\xb1\x927X\xa9Xi\xa7\xc2\x18*V\xa2b%*V\xa2b\xa5\xc2ARd\xb0\xad{F\xa9X\x89\x8a\x95\xa8X\x89\x8a\x95\xa8X\x89\x8a\x95\xa8X\x89\x8a\x95\xa8X\xe9\x0b\x15+5\x86\x0e\xdbcu=\xb3i\n\n\xbcS\x84p\x8b\x0c\x9a\xa2\xb8fo\xe7<\x10\x8a\x1dR\xec\x90b\x87\x14;\xa4\xd8!\xc5\x0e)vH\xb1\xc3\x1eA9\x8a\x1dR\xec\x90b\x87\x14;\x04p(v\xb8c\x9c\x8ab\x87\x14;\xa4\xd8!\xc5\x0e)v\xd85\x0b\xc5\x0e)vH\xb1C\x8a\x1dR\xec\x90b\x87\x14;\xa4\xd8\xe1\x97\x8c\x1d\xd6I\xa7\x08\xc1U\xcel\x05+t\x0f\xc37[o\xba!|\xdbYe\xda\xd0w\x9b\xc8q\xf5\xfe\xca\xfeA\xe3\xb94v\x9d\xd8\xdc\xaf\x152+\xddN\x08\xc4\x8b\xe18\x7f/'\xaam\xdd\xf4\xd6\xf7\xa5Jz(\x95\x1eJ\xed\xdc\xe0~\xcfR\xd2C\xa9\xdd\x83\xd1C\xa9\xf4P*=\x94J\xf9C\x94?D\xf9C\x94?D\xf9C\x94?\xa4)\x7f\x88\xf2\x87(\x7f\x88\xf2\x87(\x7f\x88\xf2\x87(\x7f\x88\xf2\x87v\xdb\x13\xca\x1f\xa2\xfc!K\xf9C\x94?D\xf9C\x94?D\xf9C\x94?D\xf9C\x95\x13C\xf9C\x94?\xf4}\xe7\x0f\xb5f\x924\xa7s\xb4&\x91\xf8\xa7\xabj\xaf\xac\x9e\x9d\x1e\x05WAg\xfe\x08\xbe`\xd8?od\x99?`Z\x85\x1e\x7f\xf7&Zx\x84\xa6\xf4\x16\"\x907\xbcx\x83o v1\xfcn\xd9\xbcQ\x0c\xd3\x03\xa8\xf4\x00jY\xfa\x8d\xe9\x01\xd4\x8f\xf2\x00j\x0b\xdb\xaar\x91.v\xe5_M\xdd\"\xcb\xedT\xebd\x0b\x1e\xe5_Q\xadq(\xad\x93j\n%\xbcw\xaa\xa6\xba\x9b\x1b}\xa4\x17W\xdb\xb0WZ]'\xee\x1c\xd0[`\xee\xact\xd0\xb7`\xf3e\xfe\xf01\x1ef*\x8f\xd7\xdd\xbap\x80\xf4N'Y\xeb\xc2z=\xa7T\xcd\xc3\xcd\xc9\x7fd\xd2\xb8\xff\xdc\x8d\xdd\xd6=f\x15\x9e\xeb\xf3GB6K\x80\xab\x06\xc6\xc4\xd8]\xc0(u\xeb\x00c\"\x8c\x0dy\xc4\x8d\xb0\xdc\xc3\x17\xa6\xaa \xaa\xf5w\xa6*\xcb\xfb,OM\x95\xc1\xa9\xbe7U\x81\xe5S>9\x15\x8c\xef\xf0\xed\xc6\xe9\xdeUz\xb3<\xb5\x02\xf9\x05\xea\xa8\x8eJ\xbag-\xda\x06J*4\xea\x12\xf1<*9\x86Q\x11\x87]C\xed\xb7\x0cH\x93\xe1T\xe6Q\xb5\x17\xa8\xaa\x8b@\x12\xdb\xfd\x0d\xaa\xca`\x1b\xde\x9e:\xab\xee[)f\x94Hc1\x9bn\xc9S+\x9d\x15\x90V\xde\x9f*\xa6(=A\x95\xeaE\xb5\x87?\xfd\x15\x07Pm\xc8\xe2\\V\x1d\x9ew>\x90\x15\xd6\xeeF\xeb\x91\x1fG\x87\x98\x0e\xf1\xe7;\xc4\xad\xd8\xec1k\xfb\xc3\xad\x9c\xad\x83X}\xc15RE\xd6\x0f\xbb\xe3\x0b\xae\x91\xaa\xbcQ\xbd\x11\xf0\xbe0\xd7\xc05\x81\x85\xe5p\x7ft\xb0\xa94\xe9k/Mj\xd4\xff\xbb\x8c\x8cJ\xa7\xad\xdcI\x0d\xaf6\xf67:\xd0Y\xd1\xdd\xee\xcb\x9b\x07\xbd\xe7]\xeb\xd2o\xde\x8f,\xf2?\xbe\xf8\x96-\x82\xbb\xf07}\x16\xa9-\x9b\x04v\x01\xc3\xa7\x94\xd6\xf4\xcak\x93\x86\xdd\xe8o\xbc\xa7\xaf\xbc6p\xcb\xe6\x07\xe07\xb1\xca\x86\x05Dj\x0b\xffL\x1e\xee\xd9\xe9\xf1\xec\x92&\xff\x11\x9c4\xc5h\xbd\xdbn\xc3\x0b\xbfj\x1e\xdc7w\xa7\x92\xb1S\x86\x1f(\x1b?\xfa\xb3;i\"\xc3\xd29\xc8\x93\xe5\n\x17\xb6\x8f\x1d\"\x17\x98\x8b\x044s\xae\x18\x8fAo\x18\xb2\x13\xc7\x9a#\xa5o\x14j\xedZ\x95\x10\xe8\x0b\x05\xa0$D\xc7\x92\xe7\xe15Xn9\xce\xa5\xa7\xaeg\xa4\xaa8Xg]\xad\xc4\xd1\xe8\xab\xff0\xd8C\xbb\xa3\x8ff\x7f\x84\x8e\xfa`B\xc0\x9a\x8b``\xe1\xbf\x8759\x14\xc0\xc8\x90\x8d\xfa\xf6\xdd\xc5\xf1\x01T#y3\x07SA%\xf0\xba\x13\x15\xe4U^\x9f\xe0\x9d\xe3\x98S\x88\xe76Ry\"\x90\xdb\xaf\xdf2\x99\"Bgz\xa6!\xc5o\xf3\xe6\xb5\xab\xf4/\xda\xd4\xf9R\xc9A\xa4\xee\xa8\xc63\xd2\xe2\xbf^->L\xdf)\x1fZeS\xb8[\xa0\xa9s)x\xd0[6\xf5\x17H9\xc3\xe8nJ%\xa3T2J%\xa3T2J%\xa3T2J%\xa3T2\xda\xa3\x16\x93JF\xa9d\x94JF\xa9d\xd4\x9b\xa3T2\xbaSy\"\x95\x8cR\xc9(\x95\x8cR\xc9h\xe1 \xc9{S\xc9h5\xfeG%\xa3T2J%\xa3T2J%\xa3T2\x1a\xa2vT2J%\xa3_\xa2d\xb4-0\xd8\x19\x0dd\xb5`\xe0.\x11\xc0\x864\x97-\xd2T\n\x81\xf7\xf1\xb2T\xb6 \x1c~\xd5\x99'\x94\xfdWR&(\xfb\x8f\xb2\xff>N\xf6\x1f\xa5\xc4|E)1\xd5\xed\xe9/\x9a\xfag\xc84\x8d\xb2M\x9d\xed\xfa\xcb\x1f\xdd\x8c9\xa7\xd4;0w\xca\xa2\xa1,\x1a\xca\xa2\xa1,\x1a\xca\xa2\xa1,\x1a\xca\xa2\xa1,\x9a\x1e\xe9)\x94ECY4\x94ECY4\xde\x82\xa5,\x9a\x9d26(\x8b\x86\xb2h(\x8b\x86\xb2h(\x8b\xa6k\x16\xca\xa2\xa1,\x1a\xca\xa2\xa1,\x1a\xca\xa2\xa1,\x1a\xca\xa2\xa1,\x9a/\x99ES'\x9d\"\x04Wr<\xfa\xdb\xcb\x7f\xcbD\xea\x86)\xda\xc0\x00\x148\xfe\x8a\x02\xc7\xcd)S\xdd\xf1\xe1z\xceT\xcfk\x13\xce\xe8\x9ac\xba\xe6xG\xbd\x9bnHEk\x91nH\xbdk\x1a\xd6\xb7p\xcdq\x0f\x06{Lw\x17\xd3\xc9\xbco'\xb3/\xdd\xf6\xcf\x12\xa3\xfb\xba\x89\xe6\xef7\xcd\x7f{\xf7u\xf7:\xc7\xbb\x1d\xe1\xee\xd6\xb9\x9c\xed\xaf\x13\xafu!\xb3\xa0\x0f\x18d\x16\x10#\xfe\x96\x18\xf1\xb7o\x16\xdc\xf9@\x926E\x87\xf8~\x1f\xe2oO\x9b\xda\x0cx_\x98?\xfb\xeb'\xadJ`C\xadP7\x13\xf9\xf2Z]\xefy\xd7\xba\xf4\x9b\xf7#s\xea\x8f\xcfu\xa9l\x95\xcaV\x9b\x14\xa3\xaf\xa6lu\x1b\x8e\xf4\xc5\xbc\xa3t\xca\xbe\xd7S\xd6B\x9cy\x10\xb5\x9b\x1a\xa9\x9a\x95\xaaY\xa9\x9a\x95\xaaY\xa9\x9a\x95\xaaY\xa9\x9a\x95\xaaY{\x94\x89R5+U\xb3R5+U\xb3\x028T\xcd\xbac\xe5$U\xb3R5+U\xb3R5k\xe1 \xc9{S5k\xd5\xf1G\xd5\xacT\xcdJ\xd5\xacT\xcdJ\xd5\xacT\xcd\x1a\xa2\x7fT\xcdJ\xd5\xac_\xa4\x9a\xd5\x87\xdc\x1c\xacC>\x8ee\x1et;|~t\xf2\x06M\x94\xd7z\xd6\x1d\xbaZ\x98\xd9H\xaa\x89\xb8-5\x95\xca\x8a\x99H\xd7\x85\xec\x87\xc1^R\x19\xd4\x1f\x95\x0f\x83=q-\x94\xbdC\xd6\x07~m\x18\x98[\x9b\xcaqf\xef\x92R\xd2XF\xdb\xee<^?\x9b\x87\x01\x88\xb2\x8a\x94C\xc6nR\xbe\\\xba\xa39\x17>\xb5\xe0J\xac\xe0\xc8\xa1\x9f\x82\xbb\x13\x80\x83\xbbce\xac\xe0\x13\xa8\x81\xe57l\xbc\xb2-\xc9R\xe7\xd0\xe1\xd8!6\x9fV(\x86?\x84\xa8le\xe6P\xc1\\\xe0\xacH\x92\xba\x12\xab\xc7\x08\xcd\x92\xcb\xd4\xc7\xb6\xdc\xc9\xea\x80\xab\x0e\x15L_\xae\x9af&\x911H\x822d~\x82\x1b\x07\x96XH\x0bG&\x03'\x86\xd1\x0b\xe1\xce\x89\x88\xb36^X\xa5\xe2\x12C46\xcdb\xd0\xaf=\x00\xa0\n(\x06$\xec\x98\xc3-s}s+=\xd1\xb3\x8e\xf3\x12P\xf5mP\xd1\x86\x95\xbe\xe2\xe6DMu\xf7:g\xdc\x8cn\xb8\xb2\x15W\xc2\xba\x84\xce\x9a\x15\xefW\xdc\xfc\x0c\x9d\x83p\x0c\x9aC\xa6\xa4\x85\xc8\xc0\x8dN\xaf\xd8\x8d\x0f\xe6\xa1\xb2mo!\x1c!R7:,\xc3\x01\xe1\x94\xbe\x1dAxo\n\x00\n\x1e>s\x1aIl1\x02\x1ck\x85\x91\xcd\x86\x9d\xf2\xb8*4\xa0[\x96\xd3+\x8c\xe2\xc3\xbe\x9b1~\x06\x82\xb4\x1b\xe1\x13n\xf9\xc6u6\x86\xb0^p\xcb!@\xabV\xcc\x8d\xc0Ra\xb3T\x05OM8\x01`\xc0\xa8I\"\xd2b Cvb\xd9\x9b\xf7\xe7\x17\x10rK\x84\x9a\xd99[\xa6b*o1\x17\x02\xf2\x8f \x83R8\x1b\xc0Q\xac\x9b\x01\x07F\xd1$\xf2\x19\xf2a\x91\x00\x1b%D\x1dxw\xaa\xab)\xe6z\xc6\xa4\xc2\x15;$w\xaf\xe1\xeb\x94:\xf5]\xed\x1f\xc2\x84l\xa5\xaa\xa0\x0e\xfe\xbdu\x02\x06V\\\xf0\x1bi\x8a\x84\xb3+\xb1zT\x08\x02\xa7\xa5\x1b\x1dK^(K`X(\xdb(\x93\x90\xc5\xc3\xc95\x8c\x17\xe1y6\x11\xd7\"q\xab\x07\x8b\x8d[\xcb\xe3y9FX\xde[\xa7\xc1\x85\xec\xdf\xe7b&\xd5\xf3D\xc7W\x03\x16~;V\x93\xda/Gs\x11_]\xdc\x023\x0c\xbf\xbd\x10\x89\xbc\x16\xe9\xc5\xed0R\xaf\xb9\x15N\x0dL\xb92\xdc\xc7(\x17|\xe5\x94\xadp\x9bGf \x05m.\x8c\xc0\xf5}\x1a\xe1\xe6I6R-4\xdb\x90\x12\xed\x98D)m\x0d\xf5\xe6\xb0\xca\x97\x80\xb5\xca\xc2=26\xf3\x9e\x92\xf2\xd0M\xa9\x9f\xff\x18\xdc3\xb1y\x7f\x95\xaf\xd6\x0d\xbe\xb8\xed_\x87\xb8\x85\x17-\\\x9cr1\x17l\xec\x0e\xa1\xf7\x8e\x81\xc7\xfbv\xce\xcd\xbc\x9b\xb9\xbb\xbe\xa5\xa3\xc8\\/\xbf\x98\x890K\xde\x9c\xea\x18f~\xcb\x17\xd8(wt\x1d\xe9\x89\x08\xddK=[\xcd\x94\x86#\x86\x95\x06n\x00<\xf5-\x12\xb7\xf1h\xc2f\x0cB\xa4\xdbuO\xf9\xcd\xa8\x97\x98s\x98\xd0\x99]fy:]\x89g>0N\xea\xcdD\xca\xf6\xdd\x9e\xe3\x10\x0f\x87\xec\x0d0\xaeH)\xad\x1eM\x84\x15\xe9B*i\xac\x8c\x83x\xbd\xc3a$s\x8f8\xcew`\xee\xedv\n\x1dYL\xf2\x03\xc8\x9a\xcf\x9f\xac\xdaP-\x07\xff\xb0Q\xf3\xe9\x18\xba\xa7\xe1\xd5\xcc\xe4\x0e+VN\x8a\x97h\x85L\xbe\x82\x19\xf77\xae\xfaL\x13l(\xf0\x82\xd5&\xb1\xb7\xdd'\xd5R\xe24%NS\xe24%NS\xe24%NS\xe24%NS\xe24%N\xe3\xbf)q\x9a\x12\xa7)q\x9a\x12\xa7\xb7\xd8\x93\x9d\x13\xa7\xad\\\x08c\xf9b\xd9m\x87^\xc8\xc2L[\xa6\xe2Z\xea\xcc\xa0\xa3t\xc8^:\x85\x19\xbc\xa5\x86\xfd\x17{2`\xd2>@\xbc\xdd\xc0\xaf\xb0\x9f\x13\xe9\xac\x93)\x1a\x81\xf9\xc4\xd5Zev\xadm\xa1N\xe0\xe8\xaf\xb9\xb1Gz\xb1\x90\xb6<\x11{\xf6\x8c=\x19D\nfr\xea\x84\x91\x06F\xa5\xf0\x18\x85\xc7>Ux,\xf7\xcfy\xff#\xb6\xcf\xfd~(\x9aca\x0c\xf2\x94\xb2c\x889Kl\x00\xc4\x9fO\xc4\xa4\x8a\x93l\xe2\x84\xaa6\xa2m\x18?\x97\xe7\"!\xa1M;\x11\x1fz@\xcc\x18L\x0eeE\x88\xbeA&Y*\xb8a\xaf\xf5\xccT%\x11\xce?\xf0\xc6Yi;\xc2\xf5\x06\x83\x1c\x1a\x90\xfcU\x90\xca\xe0\xa0\x15'U,\x0e\x18\x86l\x1e\x99\xc9\x15\xfb\xf3\xf0\xafO\x87O\x9e\x0c\xdc?\xfe:\xfc\x01\xfe\xffC\x03=\x16\xc1\x9c.\xe7g~\x03\x83\xbd\xc5\x98\xbc\xc3C~\x1b\x83\xb3\xb9#e\xf9\xcc\x94|\xbd\xa8\x9d\x04\x95\x06\x02\xed\x06Y\xf8D\xc0\xed\x07\xe5@S\x9c\xae\x96V\x0f!\xc8odq\x99\xc3\x913\xddc\xfb\\\xdaC8\xe6\x9d\xc7[\xdc\xda\x94\x8f\xc6\xd2\x9a\x11\xdc\x912\xe9\x19q\x10I\x95{\xb4\x1d\xf75\x1c\xd6 \xc4\xd4\x88\xba1\x8cw\xb4@t)\x7f\xdb\x80\x8d\xa5e\xc0\xbc\x86N\x87\x92\x90\x05\x98\xf9\xe7\x12\x842Y*r\x87V~a\x04\xe0\xde\xf2+a\xd0\xb7\x04\x89\x9e\xe5t\xccH\xe14\xa8\x0b\x82t\xc2\xceR\xcdJ\xf3(\xed\xc6M\x05\x9f0\xc3\xa7\xc1\xa7\x80\xbf;4AV $>k\xe5\xbd\x14,\x03c\xb5\xb4i\xf6vh\xe4L\x95/\xdf8\x973\xf5\xa6\x1a/\xcb1\x19\xaah\xceO^\xbd\x1d\xbdy\xf7\xe2\xb8VCS\xfc\xfe\xe2\xe4\xec\xf8\xe8\xa2\xf2\xd3\xc5\xf1\xffy\xf1\xfe\xf0u\xe5\xb7\xd7\xc7\xaf\x0e\x8f\xfe9:|s\xf2\xf6\xdd\xc8QV\xe5\xeb\xf1\xc9\xe9\xe8\xc9\x7f<\xa9\x16\xd6\xb4\xcd]\x8b\x89\xf8U\x14\n\x0crjX+[\xb8/\xe8\xf2\xb0\x869\x9d(/Q\x98eX\xff\xa9\xb4\x9d\xe0W\x923\x853\xbbc{|r\xca\xa0\x8d\xc7\xb4\xf7\xfe\x1e\xc1\xc1\x8d\xd4\xf9\x8b\x7f\x0c\xd9\x99\x98\x1e0p\xf3\x1d<~,\xe4\xd2\x0c!\xd3[d\x8b\xa1Ng\x8f\x8fON\xcf\xdd\xcf\x8f\x9e\xfc\xc7\x13G\xccG\xc1Y9h\x80\x05\x1e6\x99Ic\xe1\xfe(0\x0f\xf2C\xe4\xce=\xbb\xe6\xa9\xe4\xca\x0e\"5\xcer\xd7e\xce%\x8b\xcc\xe7\xf3\x17\xff(\xd9\xd2Cv\xe1\xd8\x17P\xc0\xf1\xc9\xa9\x03e\xc0V:\x03'n\xa4\xc0%fJ\xb6\xc8\xe5\xc5\xed\x91VS9\xbbD\xb2\x02C\xa5\x81\x1bG\xea2\x80\xf7#\xca\xeb\xcb\x8067\x07\xc66\x1c(N]\x99\x88XN e\x1dMo\xef\x90\x8b\x94o]\xdd\xbfv\x91\xfc\xc3\xf0i\x95y\xe6\xc9\xa0\x99\x9d\xf7\xcb\x91t\xdb)\xd2\x91S\xdb6\xaa\xc0\xff\xffTL\xf7\x0e\xf6\xfe\x7f\x8f\x1daj\xe5\x18\xd8c\xf0\xddr\xf3x}\xfes\x18\x15 X\x13o\xe5\x19+\x95\x19\xe53\\\x14\xda\xa5\xe2\xb7L:\x12\xc0~\xc6G\x89 \xeb=R\x8e\xf81\xc7OO\x99\xc0-1\x18\x8eXp\x9b_GZ\x1d\"\xb0\x9a\xe7z\xb2z`\"\x95\xeb>04\x18\xbea\xac\x90\xce\xb4L\xe5\x02\xfc\xb70B\xae\x83h\x15\x8e\xe5\x92\xaf\x8c\x8f\x87 \x14iS\x012\xab\xba\xf8\x97\"\xaf\xf5\x98\nd\xbe3nX\"\x17\xd2\xe6K\xae\xe8\x99\x05H~n\xec\x1e\xa9^ \x85\x99\xfc8B\xac\xa7\xeeG\xaaR(\x10k\xbc\"W8\xdb\x01K\x1a\x80\x11\xea f\x06L4\xc4\xc2\xf3\xf2@d\xe7\xb1g\x8c\xc1%]\xec\x954aJa\xac\\\x80\xfdq-\x9d\xb8X\xf8\xea\x8a\xee\xaa'\xd4Ev\xb7\xd0&B\xe9E\xb3\xfdW\x1f\xb95\x95\xe2HKU\xd2i\xa1\xe0\xb5(\xcaPz\x11\xee\xfbuH\xe2\xca\xebOpv\xdf\xbe\xbb8>\x80\x0d\xf0J\x15z\x96P\xaf;Q\xa1Z/\xe7)\x15\x17\x05z\xec\"\x95c\xdc\x14\xf4<^\xb1\x99\x9ei\xd0\xc90T\xedS\x8f\xfcz\x0b\xa51P\x1a\x03\xa51\xf4\x98\x86\xd2\x18(\x8d\x81\xd2\x18(\x8d\x81\xd2\x18(\x8d\x81\xd2\x18(\x8d\x81\xd2\x18(\x8d\x81\xd2\x18(\x8d\x81\xd2\x18(\x8d\x81\xd2\x18(\x8dak/\x1d\xa51P\x1a\x03\xa51\xdc\x834\x86J kc\x02C^\xc3\x0b]6g.@\x13\x03d\xb4M\x90l#\x97\xd9%zV]\xab\xbd\xcdK\xf7\x13\x897\x17\x85cQ>2\xc3Z\xdc\xed\x0e\xbc\x8f\x02r\x14\x90\xa3\x80\x1c\x05\xe4( G\x019\n\xc8Q@\x8e\x02r\x14\x90\xa3\x80\x1c\x05\xe4z\xf89( G\x019\n\xc8Q@\x8e\x02r\x14\x90\xa3\x80\x1c\x05\xe4( G\x01\xb9O\xe8\xa5\xa3\x80\x1c\x05\xe4( \xf7\xf9\x03r\xeb1\xaa\"\xee\xd4\x16\xac*\x80FZY\xf2\x99/\xb0\xdd[{D\xa4\xf8Vv\xa9\x97~-\xdeN\xc1!\xbb_\xd8P\xe2\xd6\x8ez1\x91\"\xb6\x14\xfa\x84%\xb9\x7f\x86R[\xe3\xaf\xba?\xe53\xe1/\x05\x1e\xe2\xf7H\xb9%c \xa0\x1b\xc1\xc1-\xd8B\x1b[\xb1\x14\xad\xf2u\\\xe3\xef\xa5\xec,\xf7W\x1e8\xeb\x8f\xd5\xb6+\x106S\xf8\x0bn9\x06\x85W\x18\xbd\xc5\x87\xfaC\xf2e\xe0\xef\xff\x1f{\xdf\xfa#\xb9m\xed\xf9=\x7fE\xa3\xf7\x83\x13@\xae\x16I=(\xdfl\x00\x8f\xed8\xb3\x1b\xdb\xb3\x9eq\xf2a\xc6\x98\xab\xaebwkG-\x95%U?\x10\xe4\x7f_\xf0\xf0Q<\x14\xc5\xaa\x99\xc1^\xdc \x02\x1a(\xb5$\x1e\xbe\xce\xf3\xc7C\nP\x03\x80\xc3/\x8e\x1b\xbf\xa5\x96\xf9\xe1\x97\xd7o TmEw;\xdd\xc9\x98\xff\xa6yR|\x01\xd8\xa3\x1c\xf7Q\xeck\x19\x12\xa9\x1a\x14\xe1C;5\xd2\x8c\x98\x1a,\xd9\xd1\x9c\x8ap\x1a?\xfck\x7f\x8b\xbd\x10\xc8\x85tx\xf5t\x1f\xd6\xac\xea5\xab\xfa\xffSV\xf5g\x1c\xb1`Wo\x16x6t\xda\x84\xa7\xfe/\xce\xfbh\x90-v\xca\xbc\xbc9c\xf7\xffu\xbf\xc3\xb94\xfd\xcef\xe6\xea\x82\xea\xce\x80\x9f\xd4r&?\xfb\xd3\x05jZ\x97'\xd6\xe5\x89uyb]\x9eX\x97'\xd6\xe5\x89uyb]\x9eX\x97'\xd6\xe5 u\xbd.O\xac\xcb\x13\xeb\xf2\xc4\xba<\xf1\x11s\xf2\xc9\xcb\x13\xd8\x11\xb1\xbb\xa0\x01c1\x1bs\xed]\xe5\xb0*\x04@\xec\xf4\xa7*\xfdO\x8f\xaa3\x08\xfa\xd1\xd9S\xad2\x02a\x9c\xf4j\x82\x9cA\x85\xcb\xf57\x17\xc2|\xfb\xd6\xf9\x14\xea\x17\xa3\x01\xee\xf5\xd6\x06Y\xe2\xcd\xd3\x17j\xb9A}\x0dws\xf1]\xbd\xbd\xf3[`V\x1f\xa0\x0f0\xc5S\xaf\xe2N\xd5\x1f\xa9\xc7&\xfb\x15\xd3\xa9\x91q\xcc\xa4?3\xbby\xd7\xbd\x00\xc4\xf4A\x06\xd4\x8a\x87\xcc\x9b~5\xbf7a\xa1\xdd\x1e\xae\xde\xd3\xbd\xfe\xc3\xbb\x0er\x8eo\xc40\xa8\xe8\xa36\x08Ds\x0f\x8e\x9dnm\xb7\xbb\xd8\xd7\xcf\xea\xd9\x8d8b\xef\x8fw}+\xdeu\xfe\xf1\x87\xf7\xe2\xfe\x8cs\"\xe5[\x06O=\xfa\x92]?\x89\xabm\x7f\x0f\xb1\xba\xfe2\xa8\x1e!\xa5\x9e\xd0\x9a\xc2\xdf\xbf\xfe\xf9\xc7\x97?~\xff\x95\x9c\x96m\xdb\xa8-\xed\x92\xa0Z\x83i\x9f/\xc4\xd3\xbe\x87\xb5\x1d\x19\xcd\xea\x08\\\x86\x03\xd72\x10m[\x10\xe2\xfb^\xa7T\x1f#t\xfd\xec?es\xfe\xd3\x1e\x18\xfa\xfbQ\x08\x9b\xed}\xdbLw\x87k`r\x85\x01]\x1d\x176\xae\x9aq<\x88\xf1\xaa\"\x94\xfeA\x1d \xd9\xdc\x8b\xfe0\xbd?\xe3<\xe2\xf9>iU\xd6\xe0C\xee\xd9\xc4\xda\x98)M\xa0\xf0{\xe7\xf4a\xd0$]?\xbd\xeb\xae-\xact\xfc\xa4+|l\x16P\xdd\xa7It2r{\xaf\xe2\xf2\x152Z!\xa3\x152Z!\xa3\x152Z!\xa3\x152Z!\xa3\x152Z!\xa3\x152Z!\xa3\x152Z!\xa3\x7f\x0d\xc8\xc8D\xce\xb3\xc8V\xf9\xce\xd6\x0d1waLe\x94a\xe1\x86\xebg\x15\x1f\x8f\xef\xba\xc7;\xd1i\xe1Qj\xc8\xa5%\xfd\xc4\xf1`\x8e\x02\xd9\xc8HBZ\x0d%n#|\x10\xe5\xc2\x86\x89r\x86\xb7u\xf7\x058\\*[e\xa7\xf0\x9bY\xd4\x0e[\xdb\xd5\xd1\x04\xb2C]\xdf\xbd\xdf\x0e\xcd$\x83\xbf\xf7k\xbc\xbe\xc6\xebk\xbc\xbe\xc6\xebk\xbc\xbe\xc6\xebk\xbc\xbe\xc6\xebk\xbc\xbe\xc6\xebk\xbc\xbe\xc6\xebk\xbc\xbe\xc6\xeb\xd3\x1a\xaf\xff\x17\xc4\xeb\xcfv\x06\x9b\xdb\x0e\x0e'\x0d\x1dl\xff\xc2\xd9\xd4\x01\x1b<`\xf7\xa7\x1b\xeaC?d\xd4f2S\xe0\x04\xba\xfeA\xef\x05\xad\x0f\xd3\xdd'n\xcc5I*\xb01\xd7\xa6\xa3\x9c\x01\x14,\xef\x86\xf2v\xecZ\xa28\x13\xc7\xb9\xaf#\xbci{\xa7\x95\x9d\xde\xf9\xe6f\xd6\xbc\xeb\x8e\xe94\x17(\x9b\xc6\x1e\xc7\xb6\xed\xbbNl\xe1\x8c.K\x1c\xce\xfdG\x9b\x9c\xda\xe6\x83x\xd7\xc5\xf6\xdeJ\x8b\xd5\x8f /!\xf7\xf7\xcd\x93\x99\xabq\xaa\xbb]=h\x83b\xa3\x8a\xeb\xa1\xafw\xdbz\x84\x96\xcc>W\x1d\xda\x07\xf4\xc2\xec\xf2Y7\xea\xac(\xce\x8a\xe2\xac(\xce\x8a\xe2\xac(\xce\x8a\xe2\xac(\xce\x8a\xe2\xac(N\x98\xd8\x8a\xe2L+\x8a\xb3\xa28+\x8a\xf3/\x88\xe2\xac\x1bu\xd6\x8d:\xebF\x9du\xa3\xce\n\x19\xad\x90\xd1\n\x19\xad\x90\xd1\n\x19\xad\x90\xd1\n\x19\xad\x90\xd1\n\x19\xad\x90\xd1\n\x19\xad\x90\xd1\n\x19\xad\x90\xd1\xbfx\xe2\xcf\xbaQg\x8d\xd7\xd7x}\x8d\xd7\xd7x}\x8d\xd7\xd7x}\x8d\xd7M@\xb9\xc6\xebk\xbc\xbe\xc6\xebk\xbc\xbe\xc6\xebk\xbc\xbe\xc6\xeb\xff}\xe2\xf5\xff\xa2\x8d:\x93\xe8vb\xb8o\xbaiS_o\x9b\x0d|\xbc\xe6\xbc\xa0~\xeeX\xae\x9fC\xfa\xf7\xf9\x1cR\x90q\xec\xc0\xfd;L\xb2\xdd9u\xd8\xdf\x0e\xf5N\xb8\x9f\x96<\xb4\xe2o*\x8e==\x12\xd2d\x85:h4\x96\x8b\x1a\xd5\xfb\xfd\xc5=\x90\x87\xb1\x99UqF\xaa\xcfV\xf2@7\x1eF\x13i\x87h\xcf\x86\x0c\xf5\xc9Fzr\xe0T\x11\x1d'\xc3\x17\xb10y\x15\xfc.|@qq\x0c_\xb5\xf5g\x0c\x1dn\xfbk1)\x0d #i2\xcbL\x8d\n\x14\x84GF\xe3\x1e\x9c\x14&\xfd\xda\xee]\xe7\x0d\xd7\xd8\xdfL\x8fR\x97K\xb1\xdd\xef[\x15\xd1\xc0\xc8\xd4\xed\xc5\xbb\xcb\xbe\xfbR\x97}w _\xf7\xac\xbb\xdd\xa8?\xfe\xa5\xe1A\xc8\x94;\n\xb2\xf6\x80\x1d\xd7R\x13\x00\x0e\x95:C\xec\xccg?\xebv\x04\xa8m\xf7\xae\x9b\xfa\x8b\x9d\x98\xc4v\xbax\xbc\x13\x00.\xd4\xc7\xc6\x99FKK\xa6\xcc\x8b\xfd\x90\xa8\x1d\x00\x80\xba\xdeu\xa62\xf312\xe0\xf7\xc9\x0e\x8e\xf4C\xae\x85\xe8\x00k3_\x84\xd4\xd5$\x17\xcddF\xef]\xa7Q1\x8b\x10\x1e[\xd3\x8c\x17\xfda\xfa\xb2\xbf\xf9rWO\xe2\xc2\x9aQS\xf5\x9b\xe6\x1e\xbe\xe1\xf7\x17\x95y\xd6\x8c\xd2\xd7\xa9\xb7w\xd2}\xd1\xee\xba\xa5\x05\xd5\x89\xa7f\xb2\xc9oQ9\x90\x15~ o\xf9\xec\xf1\xadt\x9c\xb6R\xc4\xbfR\x0dP@\x99n\xd3\xa8\xf01\xe8\xf9\xce\xbe\xb9 \xbcy\xd1\xf6\xb7\xcd\xf6]g\x07j\x10\xf7\xfd\x83\xf9\xca\xa2l\xfb\xebo\xff\xf7F\xfb\x7f\xcd\xa8\x9dh\x0d,\x01\xe4\x93X\x84\xcf\xb2\xe2t7\xf4\x8f*\xe7\xf1\x8c\xbc\xbe\xf0\xa7,e\xcc`r\xf9&\x9b\xc8w\x1c\xf5{\x8d\xf7\xe8Og\x02\x9e\xf9\x93\x8e\x82v2\xd8\x83\xbe\xea\x86\x8eB\x0d\xb8\xd9\xdc\xbb\xa4\xb5 \xc4w\xec\x9c\x85\xa8,Ow7\xbdF\x06\x9bn\xdb\x1ev\x00N~ .\xd6\xbbn\x7f\x05EWPt\x05EO\xa9\x9c\x15\x14]A\xd1\x15\x14]A\xd1\x15\x14]A\xd1\x15\x14]A\xd1\x15\x14]A\xd1\x15\x14]A\xd1\x15\x14]AQ\xf3|\x05E\xff\xfb\x81\xa2\x0b\x80_\x00\x81;\x07\xf0s\x8a}\x14\xe0\x87\xd2!\xc7\xf31?\x95,\xf9^\xbb\xc6\x9f\x91#\xfd\xef\x9d4\x8a\xab\xf1\x06\xf5\x02\x1f\xdb\xa8jR\xd1\x87F\xefD3\xcc\xab\x1c\x17\xc1\xe4\xf0d\x9f\xc3^\xb8\xe4\xbb\xee\xe7W\xdfh\xeb\xf8iY\xb1@\xf5\x17\x0d\xdf|cz\xf0z\xaa'q>\x0f\x1e\xe1\x1fC`\x86\x00-\xc6\x17\x86\x1f\x96Z\x1e\x1e\xc0x\x8b\xcf\x19\xc80\x054\xa0\xa0\x1b\xfe\x99\\\x8e\xa2\x1e\xb6w/M2\xf88\xf5\x83\xb8\xfc\xea\xed\xe5T\xdf^\x01\xb1\xcb\xe4R\x0e\x07\xe8\x1d\xa3\x00\xbe\xdb\xf7\xdb;\xf4\x00\xee\xbc\xecn\xfa\x11\xbf\xff\xe7\x1f~\xf8\xa6\xef\xb6\xa2\x9b \x18x\xd5\xf7\xed_\x9b\xee\x83\xf7\x96\xf7\xc6\xcb\x9d|Gz\xef\xb2\x1e\xff\xdeLw\x7fn\xdaI\x0c\xe8\xd9\x8f\x87{x<+\xf0FN\xd3\x8c\xca\xec\x0enS\xddn\xbf{j&\xf9\xe0\x9b\xbe\xe9F\xd9\x9c\xd7w\xf5 \xc6\xd9{\xff\xabo:\xf9^\xe0\xb1\xbc\xfd\xaa\x1e\xea{|\xfb\xf5\xbe\x9f^\x0d\xcd\x167\xebM?\xd5\xad\x1a\xa2\xdf\x0e\xcd\xae\x99\x9e\xe7\x8f\x03u\xc0\xfdp\x91\xef\xc6\xa9\xb9\xaf'\xf1\xfa\xb1\xde\x7f\xf7To\xa7\xaf\xef\xfbC7\xbd\xec\xcey\xeb\xa7\xc3\x84^\xfbz;5\x0f\xe2\xfb\xfap\xeb5\xc0}\xf0J\x0c\xdf\x8a\xae\xbf\xc7/\xb4\xed\xf7C\x7f\xd8\x8f\xe1\xbb!\x92\xe6\x99\x9ckx\x8e\x1e\xc3\x9d\x17\xcf/\xbf\x9d\xdf\xc5t\x80\xc8\x8bg\xf8\x81\xc7^\x91\xbf\xf6\xdb\x0f\xf5u+\x8ce\xc5\xa5\x95Bz\xd3\x7f\xdb\x8cz\xf7\x03\xb0\x02z\xe7g\xf1X\x0f\xbb\xf1\xbb\x11\x0f\xd6/\xfbm\x7f\xdft\xb7\x816\xe1G\xe1\x01\xdbn\xe5\x0c\xc8\xd6I)\xf6\xebD\x8fM\xd3\x97\xdf\xf8k\xdf\xdd\x8a\xe1c\xdf;\xd1*\xfc\xf2\x8f\xfd\xf4K\xd7\xf6\xdb\x0fMw\xfbS\xd7>/\x97{U\x8f\xd3\x1b\xb5\x86r\xe2\x8d\x13\x0d0\xaf\x9dS\xb5zAN\xf4\xe2`\xaaW\xc4\xee\x05\xe0zK-\xb45\xcd\xe9\xc8V)f\xf8YlE\xf3\xe0i'\xd5\xe8\x19\xcf\xea9\x9cuU\xb1\xde\x8b\xba\xad;OK\xa8'\xaa\x9c\x12T\xf4\xf8G\xf1\x04\x03\x14\xa8\xe7\xb0\x0f\xa9\xa2\xe7n\xba\x13S\xb3Uo\xbcxV\xbf^q\xef\xadq\xe150\x03\xafd ;\xce\x85\xa9\xe9\xa6@\xfd [\xf0\x05+D\xe8i\x12CW\xb7/\xc12\x84\xd5\x8e\x92\xe7\x1d\xbei\n\xc8\xb0.\xac\xe6\xe3\"\x0f\xf6\xc7T:\x06\xda\xfb\xcb(\x06\xd7`\xbd>\xec\xc5p\xd3\x1e\x9a\xdd+\xfd\xd1\xa9\xf1[\xd1\x8a[\xf9\xecc\x0b\xfe\xd2\xedTQ\xe5N8\xdc\xd7\xb6_\x8f\xa3\x98fJ\xf2e7\x89\xe1^\xec\x9azx\xd6,\x1a0\x0e\xc7\xaat\xd3f\xdd\x06\xea?\x1c\xda\xa9\xd9\xb7\x8d\xc7\xb9\xf0lfC\xbfQ_\xeb\x12\xbb@\x13\xf0T\x1a\xeb\xe27\xc2\xb0\xef\x8b\xe7\xbf\x99\xf5\xb8\xb9\x1c8\xa3\x14\xe0\xdd@\xbf\x02\"\x11\xec\xfe\x8bg\xfdO?\x9c\xf3\xf2YM<\xce_\xa4\x02\x98\x91#\xed\xa5\xd7~\xe9\xf6}\xdf\xfe\xfd\xae\x99\x84t\xce\xb1\xcc\xc86|}\x98\xee\xfa\xa1\x99\x9e\x7f\x10S\xbd\xab\xa7\x1a\xbd\xa2\xd4\xd8k\xd1\xed\xfe\xd2\xf7\x1f\xbeV\xc7\x9b\xcf\x89\x80[\xf3\xcd \x02\xad\xfc \xba\x9bz;\xf5\xc3s`\xe4\xdf<\xfdY\x88\xf1E=\x06\xb44\xdcQ~\x1c\xba\xffg!\x80j\xa0\x19a\x7f(\xc8\xd0!\x16S*1\xfc\xfaa\xba\x0b\xb4\xff\xfb\xa1\xf6\xdf\x84[B,>\x19\x02O\xben[\xad\xa2\xf1\xfd\x90\xde\x8e\x0c\xd6\x18\x9cBx\x14\x9e\xdc\xba\xfb\x10\x9a\x14-\xeb{\xcf\x08\xaa[?\xdd,\xbd,}\xac\xfe0\xfdts3\x8a\x99\xe4@\xc9\xe57\xbe\xe9\xef\xef\x0f]3=\xcf<\xe8#\x8bCU\xdaOZx%\xf2\xb4\x1f\xac\xec-<\x97\xad\xdb\x0d\xf5c\x90\xcb\x8d\xeb\xd6\xf4]`\xc8,i\xd9\x8ff\x1c}\xff\xc8>\xff\xe90\xc1\xe7\x02\x9b\xee6\xd4V\xfb\xde\xeb\xb6\x1e\xef\xe6\xce\xecw\x0f\xcdN\xf8\x1c\x11\xbc\xf9u\xdb\xf6\x8f3\xe6\xb1w=\xce\xec\x1f\x02\x9dz5\xf4\xfb~\xac}\xdb\xa7\xefzc\x08\x9fJ\xf4\x07\x16nbv\xa9\xdb\xf6\xf9gXR\xc5\x1d\xef'\xafM\xf2\x0en{\xd7\x1d\xeav\xc1+x\xd9\xdd\xb4p\xe5q\x95\x8c\x94\x17<\x86\x90!\x90\xa3\xdet\xb7\xa1G\xea\xd3\x90\xf3\xd8\xd4y\x10f\xab%[\xf9\xb3\xd8-<\xb1E\x7f\xe9\xae{\xe0\x95%\x1a\xaf'X\xca=\x9b\xc5\xeds\xf4\xf8/\x8d\x8c\xd7\x9b\xad\xf4\x93\xbc^\xe8\nB\x03\xa2\x9f\xf8\xf2\xba\xd0\x84p\xcd\x8e9\x8c\x0e\x85?\xb1\x81\x81 \xd3=9\x82N\xf2!f\x9d#F\x89\xeecp 7*\x08\x97\\&\x00\x82\xbc\x16\xc3\x83o\x98\xbe\x17\xd3_\xebI\x8c\x13\xe4\xdc\xf9\x8f\xe0\xe6\x8bg\x95\x80\xe6?\xfc\xb1\xdf\x89\xd9d}/\xa6\xd7\xcf\xdd\xd6\xf7\xfal5G\xed\"f\x04\xddg\xc1J_7\xf7\x87\xb6\x9ef=x\xf34\xaa\xe3+\xdc\xfb/\xcc\xb7O\xdf<\xcd\xdf\xbf\xfc\xd596\xc0\x02\xa3\x97t\xc36\xfc2\xb9\x04d|\x04\xf0\x08p/\x0cn\xfd\xaa_\xf8\x9b\xd8\x02\x8f}\xf5V\xbfw\x95^&o\xd3\x84lX\xc6\x7f\xfd5y\xeb\x96\x82gpS\xbdJ.\x93\xb7$\xc96EU%4a\x1b\x9e\xe5 K\xd8&-\xcb$\xd3\xff\xe7 \xdb\xe4\x15M\n\xf5\xde\x8c$\xc1$\xe9e\xf2\x96&\xd9&\xcb\xf2\xa4L\xca\x0dIY\xc2\x93|\x931:+JqQv\x99\xbc\xad\x92lC2\x92\x904I7E\x9e\x10bn\xc8\xf6\x15\xbcL\x083w2s'7\x17EB7\x84\x16\xb3\x8a\x18\xae(\x93\xdd\x96\x15\xe4\\\x13\xa6U\xa1\xe8\xc1En.\x8a\x84m\x18\xa1 )\x13\xb6)S\x92\x10\x9e\xd0MJxB\xaa\x84lrR\xce\xaa\xcapU9LF\xba\xe1L7\x8f\x16$\xa1\xa9\x1c\xa0\x94&\x94\xc8\x96\xa7,\xa14\xa1\x9b\xa2H(3O\xb2\x84n\x02\x13\x98c\xf2\x85\x1cm\xd9\\\x96P\xd9\xd8\x82\xe5 -\xd5\xff\xdc\xfc_\xa9\x8b\x19\xad\x02\xd3*\xcd\xa8\x14\x15Q]'E\x91\xb04\xa1\x1b\x9e\x96 \x93m\xadder\xc0\x08O\x183O2s\x91\xcbFWU\xc2\ns\xa7T\x17\xb3\xbaK\\7\x97uC\x07\xb2\xd9\xab\x1c\xbfZ}N\x97+\x8f\xff\xa5<0\x9e\x94\x9b\x94\x078\xdb\x97\x16\xc9\xea\xacZz\xdb\x13\x04\"\xb9;K\x97\xde\xf6x\x9f0\xcd(EZ*\xe6\xcf%\xbbI.ci\x95dr\xf0IE\x93L2\nKY\x921s\x91\x99Gr\xf4y\xc6\x92\xac0\x17eB6\x15\xad\x92L\x0e\x0cc<\xc9*\xf5\xf2\xbc=\x9e\x88\x90\xecs\x86\x99xR@$\xdb\xe6\x8bc\xe115\x91\x8c\x99\x93\xa5\xb7=\xb6%\xe5g\xb5\xd4cD\xc2?\x8b\x9a\xc7\xab\xa422\xc5s\x9a\xc8?\xa9\x07\x93\x9ci\x05\x99K\xc9\xa9\x8a\xc0tx\x8cJSC\xa8\xac\x88*O(S\xe5\xcb\x8c'y\x9e\xe4\x9b\x94UI^\x80\"\x997\x8dz\xccL\x89\xa1X\xd1,\xc9\xcb$\xdfpI\x9a'\xd9&O\xd9\xbc\xbc\xaf\xe7)\xea\x9a\xee\x88*O\xe4\x9djI\xe9{\x9cO\x19\xea\x9a\xed\x914\x1aR\x01\x15\xa9\xea\xda\x9c\x90\xc7\xb24s \x81\xa6\x06B\x86bA\xf4\x18\xc9f\x86)zlKsK\x91\x95r\xd4\xb5E\x94\x12\x97\x93<)\x98\xb6\x9dE\xb6`\x1c\xa9\xc7\xda\xb4@JV\xb613r\xceS\xcd\x10\xf2\x0e\x8ccI\x92\"W\x06aN\xd9\x13\x03\x8a\xd4\xb7T\xdc\x1bi\xb4KmO\nY\x15\xe7,)*i\xc1\x18I\xcaT\xdb\x9eR\x1b\xa1y\x15\x9elP\xee\x0ep\x99j&,\xf5p&\xa5TI9\xe7I\x99-\x0d\xb0'\x1f\x14\x94\xb92\xdaI.\x95\x15/\x94\xf6\xcbR\x9e\x94R\xa1\xe5\x15OJm\xd7\x93\xb2\x04\xabT%\xa5\xec\x0e#,)+\xfd\x0e\x97.\x0f/\xb3\x84\x13s\x87\xeaw8\x93ZT>\xcat\x15\\\xd6E\x0b\x9a\xf0\xc2\xbc\\\x9a\x0b\xae.\xe6m\xf7D\x92\xa5A\x01\xe0\xd2\x83\x91\xd6\xbeJ\xd5\xc5\x8c\x10\xf3$\x91\x11\xc4e\x92P^0%\xc9\x19\xcf\x15E\xc2sE\x11.\xc8\x02\xbb1OH\x19E3f\xe6\x87\x83\x9d\xcexR\x99\xa9\xab@#\xf1@c}\x1f\x8d\xb9\x8d\x05\xb7\x85K\x91\xe2\xdak\x04\xd2\x94\xb3\xa42\xfd\xa8\xe4\x9d\x92\xcd\x07\x94y\xf2\xcb2\x97\xf4\x19\x14\x93\xaaP\xbe\xe9\x9c\xb4'\xc8,w\x85\x03F\x96Q~\x14\n\xa8\x83\xc8q\x00\x96+rE\x9a\xc9\x8brA\x00\x99'\xda\xacp\xbdJ \x9d\xd1L\xb1ZYq\xd5|\xe9:B\x1d$/e\x1dt\xc3i\x95T\\;\x9c\xd2\x0d\xdf\x14\xd2\x01H\x8d\x0b\x9a\x02;\x87\xd8\xc8S\x00\xec\xa8\x00r)\x0dtSq=z)\xa1\xaaz\x9a\xeb\xea3\xc24i9{$\xb5\xceu\xca@\xc2\xe6\xf6\x83y\xca\x80q\xc4\xb5\x96Y\x99\xb9\xb0\xd3ffK\xd1\x0eN\x97\xa7\x16\x985\x9b9\xd5}\xc9\x88\x1e\xca\x82\xe6\xb2/d\xc3\xe5\x05\xe8\x8c\\\x0e \xddTe\xa5\x06P\xbe+GP\xdd\x92\xddd\x9b,W\xdd4\xf7@\x14\xf2\x00SzR\x9e!)\x07 *\xb9\x96\x17\xf0\xe9\x81zI\xe7nk\xe6\x89yF\\\x1e\xe4r\x82IY\x1c9NR\xca6\x94fz\xa0\x18\xdc\xcb@\x8f\xcf\x89{\x82\x9eQ\xd7\x9a\x97\x10\xc3QC3\xa4\x893O\xae3\xe6\xf6\x13\x0c\x13h3\xd9\xbaB F\x98/2?\xb6\xca>\x95\x90'\xb3\xd9Qf%\xb3J\x0bY\xa4TqZZ\x94\x8a-8U\\\xc1\xabJ\x89S\xc5%\xa3\xc9\xcaXA\x13\x92\x82\x1dL\xe5\x8c\x97\xeaj^\xaf'\xc7Y\xe1v\x00\x82\x9dJ\x06|)\xb7S.\xdd?\xca\x03\xb3\xe2\x89dV\x06I\xd9\xb1\x88P\xf2\xa4-\xe3\xf1Q%d\xc9\xdad\x9ele\xc8%%D\xb2\xaf4\x9b\x84\xe8\xa8}N\xc1\x13\x89eH \x01K\x9e\xe6\n\xaa\x94\xc1\xa1\xd4(\x10\x1c\x16\xd2\xc3 n\xb4)g7S\x80\\\x0e\x91\xa3\x9c\xfb\xdc\x04\xa5$/\xecUi\xaf\xb8\xbd2\x81))\xd2\x85\x88\xb2\xf0D\xbf\xa8>\xc1F\xb0\xa5\xf0\xaa\xf0\xd4A\xe9\xaa\x03h;\xa9T\xa7Mh\x08}>\x0e\xbb\xd2\xef\xb2\xde\x82,\x0cv\xe9\xc9\x7f\x89BY\x1b\x1d\xdaF\x02Q\xb6I\xf3\x84\x14T\xf9\x08s\x9a\x9e\x92(\xa9\xd3n=\x7ft\xd6\x81\xa0\xdeR\xb3&=\xffb\x89]JO\x8d\x94\xe1\xf8\x16\xf7\x80*7\xddt!!\x8b\xf8O\xe9\xa9\x96R\n\xbc\xd4\x06\xa0\xf0\x8c\x96\xa7Rx\xd2,\xd7\xc3C\x02\xbcRz\x9a\xa2D\xd0\x14\x98 \xe8\xb2\xf5\xc6\x8a\\\xc7\xcf\x04L\x91jf\xb9\xd4LOC\x94\x85F\xa3\xcb\x8c)\xc8\x99S\x858s\xc7\x03'\x05O\xf2MQH3U\x19\x8dX\xa6\xf6\x8a,h\xbd\xd2_x(\x0d\xf6]pU[\xcerU\x9d\xbc\x00\xf8\x86C\xfc\x06\xa3\x03\nJ)\xe5R\xd7\x0cW%\x05X.K\x08\xc4?\xea*\xb3W\xb9\xba\x9a\xb7\xc6S\x18%7}O3\xc5\x00\x94\x15\xaaYr\xfc\x98\xfe\xe5*,\xd7\x0d\x90Q\xbc\xea\xba\xba*\x8c^,\xed\xcaQ\xc9\x174d\xe9\xa9\x81\xb2r\x06\xdf\x9a!P\x07T\xc6s\xdet(] m\xb9;\x0b\x95\xb1=\x10h\x06g\xc1\xd3\x0f\x0f\xdb0\x96kq.\xa4z\x07\x8f\xaa\xa2rl@\xbfU\xb2S\xa5\xbd\xc7\xd5\xd5\xbc \x9e\xf8U\x99\xd3)XlM ?vJ\xc96+T5z\xc5?\xd5\x18\x02%iXyV\x9e\xc9\xafP.\x81Y1\x9a\xd7\xf6Qux\x02Z\x19\xc3_IO\x16\xd6\xf5\x19\x92O06Rf)Yb\xd6\xca\x93\xcf\xaath\xda5\x08\xe9\xcc*\x9a\x94\x18\xadO\x01\xd1\xe1y\xa0\x9d\x9e\xd0V\x8e\xa4Plr)\x95\x8c-\xf86d\x96\xf0C(\x8a\x1d\x89q\x15x\xfeI\x8e\x04\x99\xe5\x08\x11\x84q\x19NV\x13\xc2K\x06\xf4\x017\x0b\xd0\xf2\xe5\x84dgkz\xb6\xb4\x9cOfy>$w\x86\x13lTEKw\\\xe5PH\xd6a\xc5\xe2\xb0\xfa\x02C\x8a\xd0\x14Y\xa7\xd3%Z.\x0e\xa5/9\xc4\x95\x1cG\x1d\x03\\\x089>\x8c'\x854\xac\x01b\xbe\xc0\x10\x1b2r\xdd\xd9\\*\xc54\xb3\xdd\x06%\xca+\xa0\x9ao\xa8T!\xac\xd2\xa1\x00\x05`2\x04N\x90Y>\x11q\xc5\xc8ilfr[hfuR\xa6\xb3\x84\x02d}9\xa2\xae\x95\"\xa0\xfa!\x19\xf1H_\xea\xb7\x9c\x05\x9a\xe8\xe7\x15\x11J\\_\xa84y\x8d\xa5\xf1I\x98\xf1I\x80f*\xc3\xd9li\x01\x82\xf8YG\x84R\x8d\xdf\x83\xbb\xab\x17H`AF\x8b\x18\xac\xc8\x80\xb7\x9b\xe5\xc69\xcd\x16sW\xfdd$\x02IE\x96\xbe\xf5\xb0mE\x0e\xf92)6YH\xc9\xf8\x89I\x84f\x9f\x00\xec--\xfe\x10?K\x89\xd0\xdca?\xb5PZ\xf1#T\x06\xf51FA\xb8\xd5-U\x0d\x05\xc9\xe7:\xd8\xa4Y\xb5\xc4\x86~\x16\x13\xa1\xe7\xbb\x89F\xaf\x07\xa8\xfa2I\xc3\xd6,O\x8de\xc8\x89\xbdR\xc0\\@8\xfd\xa4%By\xc8m\x06\x9d\xc9(\x07\xf2\x8a\x1fsb.(D\xb8 \xcd\xd9\"_\xfa\x82I\xab\x90\xe2\xb3\xb1\xb2\xc5=\xa5\xe8/\xf1\xa2/\x95,(\x95G\xf3\x9b\xe7I\xb1)\xf3\x00)?\xc5\x880\x12\x1d\x04\xe5\xd3TD\x125+\x0b4/\x17\xd66\x89\x9ffD\x18\x0d\x91\xb7>\xa4WO*\xff?\xa6>\xeb\xe1\x0eT3\xcb\x91e!F\x87jJJ\x1d\xbcWQ\x07\x85\x0b\xd4%\xf7Kn\x87{\x81\x8a|\x81eYh6\x15-)\xb94\xaf\x8cn)R{E\x16\xd2[\x88\x9f\x8eDX\xee8\xa9\xb0\xfc\x9a\xa6\x04\x16:\x16\xcc\xb7\x9flDX\xe1P\xd0\x99\xd3\xaa\x85\x92\xcdB}\xf4\xa5\x8d\x95\xa1>*\x08Q\xfa\x12\xd4\xa4;Fl\xb5\x9f\x14DXP\xd8\nHs(+W\xea\x16'\xdd\x97,\x16\x94,h')\\<\xde\x99\x9eb \xe8 ~~\x0f\xc9\xd2\x05\x9eR\xcb\n \xb7R\x11\x9c\xc5H~\xce\x0f\xc9\xc8)\xea\x9aa\x1d\xea\xd6W0\xf5$tq\xf9\x82\xf8\x89@$\xa3!%\xea\x04-yi\x80\xa7b\xd1\xaf\xf3\xb3\x83H\xc6\x9cy\xa5&)5\xa1\x85\xd5\x166\xd3\x94\xc2\x8a\xb7\xd4\xa3\x85\xb1\xf4e\xba\xa4G\xfd\xec!\x92\xb9n)\xd3i\xd8\xdc\xa8\xfd\xc2\x06 \xe5\x12\xfa@\xfc<\"\x92!\x9f\x14l \x98Z\x8b\x9a\xd1\x92\x1a\x19.M\xe6\n-\x970ME/\x0e\x9d\x92\xcc\x18H\x06\x06\x05v\xe3@\xd6*\xd9p\x96%\x9c\xea\x0bBR}\x058\xd1&/sh\x84\xbeWf\xf6J66c$\xa1\xa5Z~I\xa8l\xb9\xba\xe0\xe6\xa2\xd2\x17\x00\xfa\xc3\xdb\x80p\xc3-j.\x98}\x96\x99[\xb9\xb90\xb4\xb9\xa1\xcd\x15\xed\xc0(\xf8\xfa\x04R\x96(_\xdc\x1e\xe1\xa74\x11\x9c\xd3D\xabTg\xc7S\x03Z'\xb4\xa2\x0b\xf05\xf1\xd3\x9aHV\x05]XP\xca\x8a>5\xbcS-\x06\xeb~\xaa\x13\xc9\xd39;\x1a\xdf#\xa1\x95\x8d\xb3\xab|\xc9\xcb\xf1\x13\x9dHN\\\xdd\x0f\x05U_\x0b\xdb\xffr!u\x9e\xf8\xa9K$\xa7\x88\xd8q\xe0\xb8%\xb6\x94@A\xfc\x14%\x92\xb3SCh\xc4\x8f\xa5K\xe91\xc4\xcfM\"\x90DT\x1aH\x92\xa5$)6D\xd2LM*\x12\x83|\xc7J^d\xf6\xd6R\xde;\xf1\x93\x92\x88\xcaJRH\nD\xec:\xcf#a\xa9\x19R\x96\x96\x8b\xa3\xe0[V\xc8\x18\x92M\x02\x08!a)\xd7\xb0\x02K+u\x15 \xe2\x0b\x03d \xb9mb\xb6M\xa5\xb9\"\xe9\xe24+Q\x81\xed\x81\x0fb\x80C!`\x9b\xe0\xdb\xb7\x97p\xd2U\xf2\x8f\xcb\xf7z\xe7\xa0T?\xaa\xd6\xcb\xaf\xfe\xe1\x1f\x80\xf5\x8fK\x9e\xa9\xdbRk}\xf5\x8f\x7f\xfe\xf3\x9f\xb2\xb2\xda\xec\xf9?\x92\xa9\xb2#\x95K\xc6T!\xa6\x0b\xb3B\xff\x96\xfa\xb7R\xbf\x85~\xaf\xd0\xf7Me<\xd7\xbf\xba\\E\xf4/\x856\xf8\x8dD\x8d\xfa\x02\xb5\xaat[\x95\xc7K\x0f\x07\xb7(%\x95S\x96\xa4T\x8fC\xca\xe2T\x0e\xf7\x87\x16\xd1\xa19\xa2SF\x8bO\xcd\x83[8gnY=j4\xd5\xbf\xf1\xfeL\xcd\x83\xb8\xad\x0f\xb7\x88\x1e\x9d\xd1;Y^\x8c{1\xec\xd4A \x0e%\xb7W\xaaEK\x94\xcc)\x00\xc7\xc2\xdc\xed\x16\xd5\xddb\\\xfd\x96%f\x02\x92\xda\x0b\xfd\x06!\x9aod\x18\xa5/4\x11\x19\xb9\xe8\x0bb.\xcc\xcc\xa9\n\x16[y\xdftW\xdb\x01\x89F\xc9\x9dv\x96\xd1\xe2m{]\xe3yO\xddN*\x0e^.,\x1e\x9a\x1d*\xcd\x88;S$:\xc0m{;\xf4\x87=\x9a\x1e\x97\xf1\xe9\x89\xca\xa1\xf48\xe3\x15\x97\xffiT\xf2\x0c\x89\xc7f\xba\xf3\xc9\x14\xa9K&*\xf7\xdd\x0ew\xc6\xad\x18{7KD\xd4 \x15\x8e\xd0T\xc8&gfz\xb2(\x95~\xbaCJ\x16\x19\xd4\x98_pm\x0e\x94@\\\x9b\"_'\x8f \x9d%0=a\x12\xfcl\x12\xdb\xba\xdd\x8a\xa7f\xda\xf7}\xbb\xed\x9bn\xbc\x19\xfa\xfb\xf1\xaeF\x8c\xc2\x10\xbd\x98\x14Jr\xff\xb7o\xe0|\xae\x19\x15\xd4\xb1\x18\xc7K*\xd8s#\xc8\x88F\xf5\xf9\xb6\xee\xbe\xc0\xee0b\x8c\x98\xa0okO\x11\xb2\xd2W!K%o\xee\xb1xf>#'\x97\xd9\x89\xf2[\xe7\x00<9~m\xd3!\xee\xac\xce\x94\x0d\xf8\xc4\x136\xb7)b\xeb(?\xe0ag.3\x17\xd1\x99\x87/@a\x97\xc1\xad\xb6\xd2\xb6\xb8\x8aI\x84\xe4@\x97D\x89dI\x8b\xa3q\"3\xadq3\xfd\x7f\xa9\xff\xc7:=\xf1jN.+\xa3\xfb\x8dY1\xaeGj\xfc\xd54\xca\x9c\xea4,\xd4S\x8a\x1c\x86h\\\xb1\x85C\xc1\xf08!{r\xb2r8Rl\x0fG\x14\xb9D\x8a\x8f \x82\xeb\xc7\x91\x0d\x8d\n\x97\xe6Q,\x9b\x1f\xc9\xeb\x1e\x9f7;\xc9\xe9R\xef\xccm8\x1a\x9a\x13D;8\xa2\xdam\x17b\xde\xf8\xa4\xa8\xd3\x8d\xd0\xb0\x94\xc5\xf9R\xd3\x0f\xea\xccil\x92\xb8\xeb\x8cZ\x07!\xaa\x81\xec1\xd8\xd8\x1drT\xd8\xacd\x18\x17\xd8\x0e\xa2\xc6\xc3Q\"e\x16\x9deuN\x14\xd2\x84\xeeX\xa8\xear-_\xb9q\xd5\xa9 \x07\xa8\xf1}2\xd3\xb2<\xaa:TuB\x9d\x9c\xed\xb4\xd8\xaf3^~\xe6\x02\x97\x88@\x16c\x1f\xf8\xee\x97[8C\x9e\x80\xeeO\xa9\x1d7\x13\x16\x97&L\x8e\xf9\x07p \x1a\xe6\xcblf\xcb\x8e\xda\xab4n\x98\xd1j\xa6n3\x94\xa9\x19\xdc\xd4\xde1\x8e\xe51\xf2\x9e\x07\xdc\xa6\x14\xb3\x81\x96\xd1v\xc6\xf1#Y\x8c3\x8f\xe7\xba\x0dp\xc6\x1f\xd6\x7f\xc8\xc0Da\x99#\x9d\xa9\x9f\xea6@\x8c`o\xe3\x8cF\xf5\xc3l\x90)\x1ad\x12\x8d?,\x95\x839X-@\x0e)\x03\x16cGK\x0e>\x95\x85\xc7 q\xa4\x9d@o\x96N\xd1}\xd4g:\x06\xdcoJ\x11\xdf\xa61c;\xc7\x91\xdc>\x1ad\xcb\xb0\x12\xd3Lf\xa0\xa1L\xff?\xe3_\xc3\xb7ZV\xac\xda\xd3t\xb8f\xc4h\xa8\x02M\xab\xcd!\xae\xf7\xf6\x9cOG\x88\n\x84\x07\xc5\x943\x10\xf3\xa4\x9b\x07\xa4\xdb\xa0\x05F\xaaM\x04w\x96\xe7\x02\x95\x80\xf3\xec\xe3V\xc5\xb9ZW\x91\x08u\x96\xa2\x98\xe0#\xda\xb3\xef\xa7\xfd\xd0`\x8b\xca]Z<>\x0b\xfa\xacK\xa7%8\x14\xb0(M\x14\xa6\xd1t$\xbb\"Z\x19\xd2\x1a\xa7H\x0cb\x8b%\xd2U\xa2zDtk\x82\x18Rr\x99[E\x17g\x97\xa9n\xb0\x17\x8c\x00u\x8e\xc3\xf8%*\xe6lU\x97P\x89\xf07\xdd:\x8b\x9b\xa6\xa7\xe9\xc1\xe1\x88N\xc30*\x175p\x87\x01\xbb\x03H~L[f\x8b\x05F\xe8\xf5\x00\xe7\xe676W\xa2\xf6\xccx\x95\xce8.9\xa1\xd8E\xb7\xdb\xf7\x8d\x87\xed!D)\xeaF\xcd\\\x89l\xd9})bb\x04\x84\xfcaGx\xee\xa9\xc2sh\x90 \xa76\x8fR\xf8\xed\xd0<`p\x92 p2\xde\xf8a\xc0\x80\x0fseFOy4\x96\x16\xe3\xd4 \x13\x81\xb4\x99q7\x8c Q\x0e\x14\x0f~|\xc8\xb0\xd7`\xa47\x8f\xf6i\x06\xce#\x83G\x8cS\x13\xc5\x17\xc4\xd3\xb6= 2\x95\xcbZv\x89,\xe64\x88'\xb1=x\xc8\x0djJ|0\x9e\x1a\x0c\xfb\x90\n\xc5\nf\xf1-\xa6\x12\xc4\x93\x8f\xab\x13\x14\x87\xc6\xc7Q\x7fD\xa01\xe7\xf9\xfbk\x05\x04)\xd8(\xad\x1bO_\xb2\xc2g\xb3\xa5\x82B`\x01\xcfg\x02nW\x19\x96IL\xfd\x07\x0fE\xe4\xd9\xb9\x8a\xe2FL\x9e\xb2B:\xda:\xfc\x1c\xf1\xa6\xbc\x88\xf6\xab\xc1\x81 \xc2j\xa3\xae\xe8\xcd\xa1\xc5\xd2\x8e\xa0<\x83^G\x81\x98\x9b\xc3t@R\x8f\xa2\xd0h\xed\xb75\xe6\xe7\xecl~\x9e-X\xa1\xa2\xfeb\xa9\x9eY\x13&R\xcd\xedT\x0f.5\xf2\xe7\xb9\xa0\xb9~\xcfLB\x14\xd8\x84\xe5\xd2\xebg\xac-\n4\x14\xa7:$paB\x91\xde\x8eV\xee\xad\xa7 \x1c+\n\x8a\xdf\x8a `\xe9\xebg\xfd=zW\xd7U(\n\x8f\xa2\xd2\xb7bj\xe1|\xe4\x00\xc8\x8d\xd1\xc0\x98\xfe\xb7T\x8e_\x85\x17^\x930\xd4\x1c\x93\xb5[1u\xfdN\xf8\xd6\x94V\x98\xcdb\xbc}+\xa6\xf1\x19#D\x14-\x15\x91<\xa6\xf7o\x85\x8f\x94#\x882.\xd4Px\x14\x0fXDp\xe51-y+\xd0(\x86&\x98\xa5\xb891\xe7\xfc\xb6y\xf0\xb4\x9e\xeb\xd7\xdb\xc8\x12KT\xe6-NU\xd6\x97\xb5\x10\x821\xa0\xd4\xde\xf9\xa8u}\x0b3\xd8\x16\x18'\xdc\x04\x8eQ\x04\xc2\xfa\x00\xd1\xaeco\xcce\x9f(xy\xdb?`\xd7\x011\x1e\x89\xaa\x83\xa1\xf6\x9cQ\x94\xce\x82W(\xcf^\x19\x07\xaa\xf3\xd5O\x9a\"_ *\xe6\xf0\xf9\x0d\xdc0\x1eh\x18\xafP\xc3\xa2\xd4\xc4\xad\xd7\x9a\xf4\xe3Z\xe3\xad\xe4V\xa7\xc7)N\xceo\x8e\xebeE\x97\x84\xe7\x99\x18(\xe6\xd1L7\xb3FQ\xc5.I^?\xc3O\xc0D\xa0E\xf7\x13\x84\xf6H\x8deH\xb5\x7f\x0e\xdexWw\xbb\x16OB\x96\xcd\x88/\x16\x1e\xef\xb0\x8c\xa0v\xd9\xb5\xec\xa8\xa6\x0cX.dx\x8f\xca\xc184g\n\xfe\x1d|\xd3\x01\x13N\xe7\x84\xa3\xa5\x9b\xadtz=\x13\x84\xf2kNP\xe9{\x8c\xcd\x97\xf9\xb9\xb6\x1d>\xe9\xff\xd5\xd5\xd5m3\xdd\x1d\xae\xe1+\xb6\n\xef\xbfj\xae\xb7_\xde\xf6W\xd7m\x7f}E\xb7\x9c\xa75\xa5\xa2\xba\xa9\xb6\xdb2\xbf)\xe8uN\xcbm]eu]\xe6[AHZ\xa4)\xb9\x82O\xdf\xca\xa2W\xdb~\x10Wj\x01\xee\xea\x81\\\xfdv\x10\xc3\xb3\xfa2\xee\xffh\xf3\x0c\xf5\x14\xc5\xd0q \xa4\xb9\xc6\x86\x96\x9f\xbf\x1e\xe29N|n\x99\xac\xcfg,\x93Y8\xd2\xf7\xcd\xda{\xae5E\xee\xfb\x80\xc6\x156\xa2\x113\xbd\xcdN\xc687(=\x05u&V\x16\x02$dp\x90\x13\xa9\xeb\xb7>iL4M\xb0\x85\x06\x07E\xc1Q\xb9j\x9c\xef\xb7\xf9\xeb\x7f\x84V\x1fA\xc6\x8b~ \x9a\xdah\xc0\xd4\xc07i\x10_\xe0t\x98hZ\xd9\\\xf0P\xc8L\xedJ\x92\xf5\x15\"\x8e\x85\xd1\x1d\xe78\x16Q\xafR\xb6j\xb8\xc7j\x0f\xe7*\x9c\x95\xa7\xd3t\xfb\x83\x07X\xb9\xca\x93\xc7\xcb\x8e\x93\xa8\xf1\xa4\xa0\x15\xdd\xa8_\xdb\x1c?3\x87x\x9c \x84\x15g\xf8.\x91\xc2I\xbb$G\x14\xa22?\x8d\xa2\xbd\xc1\xa6\xdaU\x8dQ\xc0\xff\x83\x18:\x81\x17\xb4\xcb\xealu\xf3A\x8c\xa2\xf0B\x85EjC\x8d\xf3{\x91*\xb3\xe6LS\xcd\xcd\xc2\xa8\xfe-\xf5/\xd7\x1a%\xa6I\x16TJ\xaca\x1e$\x8f\xf8\x177\xecd\x83N\xb6C\x1a\xa6\xf8\xb8\x0fS\xb3=\xb4\xb5\x97\x05Cf\xd6d\x91\x80\xe7\x18\xa6(\x054Z\xb7\x07=\"{\x18/9\xdb=S\xcd5Hr\"\x87p\xdf\x8a\x1a\xab@\xb4R\xafG\xdaP\xd2\xbf(Ee\x89p\xdf\x8cp\x03\xc9\x13\xdaga\x92\x06c\xaan\x06\x19\x14\xbe5N\x0c:\xa3\xe7\xdc\x18@}Sw!G\x1e\xe0\x91\xdb\x97\x9cv\x9d\x8clC\xf6H\xf3\xb0ID\xb9l\xd1\xe5G\x95F\x8c\xed\xa9[8\x1a{\xcb\xc23\x01\xc7\xb9I1u\x05[\x1d\x1e\x9b\xe9\xee\xa6i\xb1 \xa6\xbe F(L\xcf\xc8\xafD\xa0P\xcc\x11\x9ceh\x11\x14\xdc\x14(+o\x89\xc6 \x1e\x9a\xfe\xe0\xf1nq\xb6\x0d\xdd\xab\xaf\x93;\x83\x87\x93%5;\xc4I\xf4\xfb\x1e7\x00%\xab\x846O\x19\xd11\xcb\xcb$\xba\xf5u\xaf?\xf1\xec\xa7\x8f \xf0\xea#wfAn\x0f\xa6\xe7RS$\xcc\xf2B\xcc\xa5\x0b% !<\xcf:\xb8\xb1y\xfc\xed 0\xfe\xe32\x91qd4\xa1\xb3V\x18\x9c\xc0\xdb\x18\n\xdd)\xbb\xb7\"\x18e\x1c\x0d\xca\xb9{-\x92\xd9\xae\xee`\x82\xb3\xb5\x97\xa9\x99|\xbb\x0f\xd9\xa6\x0fy)@\xaeQ\x8b1\x91\xa1\xe3q\x93e\x81\xa0)\x9c\x03\x96\x9f\xb8Hj\xa7\x05G\x7fg\xa2\x9bf\x07\x8co\xa8l\x1c\x12^j\xc1\xbe\xa4\x85\x9aN\xad\xc2\x00\x9baS\x8b\x94\xedy\x1e\xe6o\x87\x1e\xe9-\x8c\xd9\xc5\xea\x1f\xea\x0eg*\xa1\x14\xb0hn\xcc |0\x9f\xa0T\xe0\xa8K9\x88m\x8fS\xd5\x91o\xfe\xc9\xf0\x8f\x1e}\x0c\x03-\xb6!\x90\x9a\x8e\x14%\x8b\xf7\xff\xd6\xc7\xddPB\xaf\xd9\xeak\xf7\xfd#\xf1^$\xbaoko\xa9\x08\xef_\x8e\xf1\xc1 ~;\xf8H(;\xd3p\x0eb\xdc{\x9b~\x90[\x14E\x01\xd4\x86\x1d\xact\xd1Bi\x11/=\x1d\xbc\xe4\xbbt\xd1\x9d\xb2\xb2\xac\x7f\xf5\xcc\xdb|\xa8\xa5\x95h\xb3F\xa69\xc9\xa8\x1d?s\xd8\x02\x91^\xbe\xd4g\x03\x93\x9a\x9e\xe5PMo\x11\xb0\xf4\x80\x13\x13\xf1\x86\xd1\xbed\x86\xe3\x84\xf3\xbb\x96\x1dN\xe3\xdc\xd8\x0d\xea&\xcaA\x01\xa2 \xda\x8fk\x85&_\xd5FC\xc6I2^\xb4\x91\x02c$\xcd4\x1a\xb7\xd8\x18G\xe3\xe8\xear\xd6X\x1a\x8fG\x97\xf3\x8fPYD\xb1\xbd\xac\x919\xa0\x95\x9c\xc8\xd7\x9a\xef\xa6)\xe7\xa9\x87a[{\x9a\xec\xe8\x89i9\x07\xc3\x97\xca\xf7\x07og\x1cZp\x8f.Sxy\x12\x94\xb3\xf3U\x0b\xdeg\x89P\x90H\xb1q{'<\x80\x10\xed\x998\x0b\xfd\x18\x85\xd7c\x94\xa6\x14M\x13\x18\xc5\x80\xf3\x94\xca\xf3\xb5\xa9,\xdbx\x03\x86C\xd9x\xcdh\x82Q\x1a-\xf50\x8e\xa2B\x9c\xb9D\xf1\xae\x1epz\x12Z\xf1\x8d\xc2ics\xeb\xedSE\x0bd\x9e\xef\x15!\xd2t\xb7\xf3\x85\xe7\xf4Shy\xe7 1\x94\xa8\x15\xcf\x90\x1d\x9b\xee\xd6;\x94\xc6\x1d\xde\x99cm\xfdZ\xab\x1c\xb0\xab\xbaTM\xebg\xf0P|v\x92\x9d\xb6\xe8\xd0\xef\xc5\xb6\xc1k\xb9\xd4\xb7\xc9G\xbbb\xb7\x80\x9d\xd2\x9f\xd6I\x8e\x19uU7\x8ac\xf2@TUa\xda\xd1\x08\x7f\xdc{\xbef>\xf35O\xc4\xa7\xa1\x9dT\x199\xd7c\x1d\xa7\xfa\x03\x96\x02\x94\"o\xed\x98\xb1[\xd6_\x88\x8e\xd3T\x0f\x1eR\x86<\x10c\xdcc\x8ay\x9c\xea\xc9\x83\xceQ\xaa\x98\x17=D\xa8\xe0\xad\xd3\xa8{\xc7\xb0+\xba\xa45N=V\x15\x94\x93\xf3\xf5\xde448*@\x89k\xd1z\x0f\xd7\xe3\xde\xf3_\xf1\xfe\xc08\xbb\x1e\xf6b\xb8i\x0f\x1e\xfc\x84\xd0\x8bEG\xc5wL\xcerHN6\xc4_Ha\xe7:\xb5\xe3av\x12\x11:\x91\xe5D4\x1f\xa3\xfa\xdccu\x82VY\x8b\xcc\x12\xc7\x91Y\x8d.\xa8\x8c\xcf\xddt\xe7\xe5\xf4\xa3\x919k![Si\xb6jy\xfc\xfaY\xfdz\x9c\x83\x8eS\x88\xd2\x9bi\x15t\xaeVt\x83\xc2T\xb7\xdeD\xe3\x0d\xef\xd1\xf3\xe8d\xe1\xe7A\x8c\x07\x0f\xef\xc4\n1N\xa2\xc1Kvh\xf5\xd3\xc63&.\xf1#\xe5\x98\x86\xba\x1b\xeb\xad\xb7\xbb\x03\x85.&\xda\x8d\x9f\xcf4\x0d\xcd\xbe\xf54\x0fJ\xa6.c*s\x1a\x0eXC\xa0t\xe9h\xdc5\x0d\x07\x0f\x95)\xcfO\x1d\xf6\xcf\xa3\xc2\x9a\xd6\xb8\x03\xd1,\xd5\xe9y\x8f\x9a\x8e\x0ea4\xf62\xd6\x06u\x98\x03\xeaA\x8e\x0fn\xb3\xf0)\xc6Q\xa3\xf4\x82\x87C\x148&\x8d\xa9\x91C7?\x0f\xa4@\xa1aLS\x1c:o;>\x1a\xd9h\xfa\xd1\xa1\xf3\x93\xd9\x08\x8a^\x96\xce\x85\x0d\x83@\x8b\x95\xcc\x17\x19\xd1\xa931!>t\x13\xdeG\x8a\xd4_\x14`\xe8zo\x13\x0c\xf2\xf0\xa3>\xcfa\xbf\xc5\xa7`\xa0\xd9\x88\xba~P\xb4\xe9n\x97OfE)\x9dQ\xbc\xe0\xb0\xbf\x1dp*'-\xb0\xbcah?JF\xec\xcc\x81F\xa3/\xc3\xe7gxz\xeb\x81(\x1bG5\xc5\xe2\xfc\xfa\xd7\x84-\x06\xa6\xd3\x1c\x13\x05\xd5\x0fc\x8d\xdd\xf64\x9f+\xc9\xc5\xb2b\xc0+\xc6HIDW\x02dY\xf7 \xaa\xa3\xf7\x0c+\xaaM\xdf\x8d!QE\xcb\x85ElBg\x87\xbf\xa0\x94\x02\xeaA\x91\xfe\xe9)\x8e\x01\xb6\x8b`\xcbK^\x16\xbe\x08,1}\xfc:R\xacC\xf5\xd4\x0f_\xce\xf6\x80\xe2\x13\x0b\xcfZD\xb2\xd4\x82\xc7\xa9!\xaf>z\x9c\x9a\xa5\x13\xd0\xca\xf8\x08\xa7\x98\xfe\xb0T\xfa\xc34N5\xa8\xf9\xd01G\xf8\xa0\xb6\x98\xf98\x04:1\x85(N'8E\xc1L\x9c\x97N\xb9DL\x0cc\xe3\x9d$WbCx\x16z\xf0\xe0\xe9n\x8a\xb7\xc2-\xad\xc7F\xa8\x0d\xf3\x93f\xf0aP1\x02\x8f\xdeFO>?\xf1b\xb1$NZC\xc7)E}\xad\xc7\xd9\x869\x82\xb3\xb8bZ\xf0\xf1NLw^\xe6\x13ZL\x8dzI\x8fw\xcd$\xe6\xc9\xf8\xc5\xcch\x9f8\xb8\xce\x9cI\x859\x1d\xcdd\xf40*S\x1e\x87X(j3\xabO1\xb5\xfetu]\xe3\x8d \x14e\xeaU\xb1\xb1x\xba\x92\xde\xcb}\xdda\x93\x84\x00\xd4sL_\x88\xfc\xaf\xc9\xe5\xbe\xd9\x8b\xb6\xe9\xc4\xe5Wo\x7f\x95\xef\xf4\xf0x\x84\xe7\xff\xf1\xbb\xdf]\\\\\\<\xd4\xc3\xc5\xb6\xef\xa6\xba\xe9\xc4p\xf1?/v\xfd\xf6p/\xbais+\xa6\xefZ!/_<\xbf\xdc\xfd\xfe\x8bA\xec\xfa\xed\x17\x7f\xf8\x0f(\xf5\xb3\xfcgs\xf7\xbc\x93\x96\xec\xf7\xef\xdf\xc3\xc3\xf7\x80\xed%Gr\x7f\xf8\x0f]\xc9\x1f\xafT\xdb\xfe\xf4\xbb?^]\xf7\xbb\xe7?\xfd\xeew\x7f\xbc\xba\x9b\xee\xdb?\xfd\xbf\x00\x00\x00\xff\xffPK\x07\x08\x92r\xe6\xddX\x13\x06\x00\x84D+\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00 \x00openapi/openapi.yamlUT\x05\x00\x01\x80Cm8\xec\xbd\xef\x92\x1b\xb7\x92'\xfa\xfdL\x9c\xa0\xc0*\x90\xc4v\x11\xa0\x0b\xa8nq|N\xc4}\x8d\xfbz\xf7In \x81\xfa\xcb\xaa\x02\xaa\x9b\xa4Z\xad\xcc\x98\x89#7\xabP@\"\x91H\xe4\xef\x07@m\xb9d[\xf1\x0c~\x9c}?\xfb\xfe/B.\xd5\xb3\xbf\x00\x18a2\xfe\x0c\xde\xed6\xdb\xb5\x92;x\x0c\xab\xb7\x17/\xe1\x17f\xf85\xdbA\xaa\x12\xfd\x17\x80\x94\xeb$\x17[#\x94|\x06/\xe0\xed\xebw\xefAH\xc3\xf3%K8,U\x0e\xda0\xc3\xe1\x8f\x82\xe7\x82\xeb3\xc8\xf8\x8a%;09\x93\x9a%\xf6=[\xcc\x15\xcf5\x16\xf1\x14\xeb\xb0ef\xadm%\x9eh\xff\xf9'|\xab\x92\xb5~r\xf5t\xc1\x0d{\xfa$)\xf2\x9cK3\xc7?\xdb'\x01V\xdc\xb8\x7f\x00\xe8b\xb3a\xf9\xee\x19\xbct\x8f\xbd\xb6O\xc16WW\"\xe5\xe0\xdf\x05|\x17\xd4\x12\xf4\x96'b)x\n\"\xe5\xd2\xd8\x7f\xe6\xbe$\xb5\xe59\xb3\xb5\x83%\xcb4o\xfc\xd2g\xc8=\x955l\xd5\xfa\xfe\xff\xed?0\xe8C\xdd\x7f\x0e;O\xf4s\xe7r\xa9t\xe5:\xf3BJ!W\xceu\xe2O\xfe\xa5\x96\x9f|\xdd\xfd\xf5\x9ey\xc9\xa6\xe2\xbar\x17\xc6Lms\x07\xb0\xf7V\xbf\xd4%\x83\xd0\xc0\xa0\x90\xe2\x8f\x82C\xce\x97<\xe72\xe1`\x14\x98\xb5\xd0vH\x18\x91\x14\x19\xcb\xc1\x88\x0d\xcfg\x83_\xd0\x86\xe5fn\x1f:@e\xcb\xc1\x992\xc3\x1f\xdb2c\x1b\xf6o\x8fG\x9elV\xd2\xb6\xdb\xac9\xb6\n\x98\x81\xeb\xb5H\xd6\xd5_rX\x8a\\\x1b\xe0W\xdc6<\xb9\xd4\xb3\xbf\x8c\x16|\xbe\xec\x94-$\x16\xb6,L\x91\xf33\xfc\xb7\x8bS\xaeE\x96\x81T\x06\x16|%\xecdiD\x86?\xe3\xfb\xe3_\xb1\x85\x0f\xf7@Z\xb8\xa1{\x00\xfdO\xd1i\xf9\xd9\x96F\x85\x84\x057\xd7\x9cK\xdf\xec(%JPyj\x95\xafr\x9cIe\xcaSX\xf05\xbb\x12*\xb76\xb9\xe0\xb0\xe1\xe6\xac\xfe\xa6^\xab\"K\xc7\x8b]pX\xe5\x9c\x19\xdb\x95k\xe6\xfa%Y3!5T\x81\xca\"S\xc9\xa5\xd7\xefha\xaf\xca/o\nm\xfb\x10\xa4\x92\x8f\xff\x8b\xe7j\xb8_\"\x821'\x91\x9d\xd3\x1f\x98\xed\xcb\x94Nl\xd5\xb1\xec\xc9v\x80-\x8b\xcd\x82\xe7g\x80}\x03\xca\xacy\x0e\xd7*O\xf5\xd9\xb8\xc6\xd6\xea\x1a6L\xeeP\xbb\x1a\xd6L7\x86\xd9Ck\x17<}\x18\xd0\xfa{;\x94pD\xda\xe7\xe1Q\xab\xba\xcf\x9f~ck\x9c\xf2\xa5\x90<\x05\xa6\x03\x83\xa8*\xcbu\xfa\xf5Zi\xee\xfe]\x0e\xde=s\xa9f\xc2\xc6(\x8f\xec\xf0\xf9\x17\xe1\x18\x87\xaa\xec\x0bYp]\xfb(7\xc2\xd5\xb2e#\xd8\x9d\xe3\x8a\xc7\xf5\xe4\x15\xcbf\xd8\x9d\xe5\x7fY}?\x1a\xfa|\xc0\xb4\x06k\xfd]\xe5!\xfe\x0e\x7f[s\xd9\xb08tDgnv\x13\x1a47`\xd4\x0d?\xf3\x1c2\xa6G?\x0fJf;P\x92\xc7(\x08m\xdb\xfa>\x06+q\xc5es\x9aN\x98\x04\x95$E\x0e[\x9e;k\x9d\xfde\xbc\xb8\xdf~\x7f\xff\xfa\xbf\xa1\xae\x07\x1b\xb0a;H\xc5\x15\xcfW\x1c\xb4XI\xb1\x14 \x93&\xdb\xc12W\x1b\xab\xb5\xf1O\\\xb3,{\x9cT\xbe\xb31\xcd-\xf8\x8aI`f\x06\x7f\xeb<\xa3\x96\xfe\x11gL\xb6\n\x8b\xc0g\xfe\xed\xdf\x06\x9b0\x83w\xc5vkG\xf0H/=\xfd>`HUw=\x87\x7f\xadK\xac&\nX)\xaeA-\x97\x99\x90\x18-\x98\xe7O\xffz\x06L\xa6\x90(\xeb\xd4\x16,\xb9\xb4]-d\xa0%\xf8\xee\x8f\xdf\xbbw\xb7\xb9J\x8b\xc4\xben\xb5\xa3\xed\x8f6\xe0\xd8\x95A\xb3\xb8rf3\x83G\xe6\xf9\x8fO\xcf\xe0\xc7\x1f\xce\x80\x9bd\xf6\xcd\xf8G\xbe\xc5N\xb7\xdf)]\x9c\x8d9\xfc\xd8\xadz\xc8\x1a\xda\xa3\xa7\xdf\x9f\xc1\xd3\x7f\xfd{dyO\xc3\xe5\xfd\xeb\x19\xfc\xf0}ly?\x04\xcb\xfb\xe1\xfb3\xf8!\xba~?\x86\xcb\xfb\xd73\xf81\xba~\x7f\x0d\x96g\xbb\xf2\xc7\xb8\xfa}\xfb\xady\xfe\xe3\x7f\xff\xf6\xdbp\x99\xffz\x06\x7f\xfd\xfe\xef\x83E:\x03O\x94\x0d\x1d\xe5\xcaY:O\xc3\x93\xcbB\xa9\x8c3y\xa0\x19\xa3\xbf\x16n9\xe1\xbfd\xbd,3 d*\x12f\xb8\x86\xeb5\xc7\xb0\xc1:\xdfq\x95\x95A\xa3\xf5\xd86bp\xeed\xc7\xcd\xb4Yw\xcd\xc5jm\xc2\xaa\x89\x9ewC1\x97\xcf\xb6\xde`\xb6uU-C/g#\xfeo\xad\xe5I+(\x1bW\xa2\xef\x93\x19C},\x8a\xe5\xac\x84d>~\xe3j\x8eE;`\xc8:F\xab\x88\xa6\xfbW\xf9f\xfc+\x8f\xf8l5;\xb3\xaaK\xadJ\x1f\xcc\x1e\xd8)I*\x03,I\xf8\xd6\xf0\xf4\x9bP\xea\xf5\\\xc2\xd6*S$\xfc\x0c\x0cg\x1b;\xa5\x15\xcc\xaa`k\x83\xbc\xcdVd\x98\x02Wn\xb5/$\xcbw\xce\x95\xee\xb6h#\x0c\xd3B\xbb@\x96\x04= \x08c\xdd~\xa1y\x89:\xa2\xdb\xfb\x84\xdd\xf6B\xeef\xf0\xef\xea\x9a_\xf1\xfc\x0c\xf3K\x1f\xde\xbe\xd1~\xf1_\xb8$g \x8b`=#\x87\x8fkc\xb6\x1f\xcf\xdc\xff\xea\x8f\x88\x03I\xe5\x7f=s\xb3\x17\x93\xa0p\xc4`K57Pl\xed\xda}\xb7\x0d}\x83\xe7W\x0eo1\xb0a[\xedL\x02kj\xe7sg\xe9.<\xc1yW\x03\xd3\xb0T6\x00\xd0\xcf\x02}\xf1-\x9c/\xeb\x9a\xda\xae\xf4,\x88\xb4j\x0c\xa6)\xb4.6<\x0d\x00Q\xdf\xda\xa9\xe7\xdf\xdf\xbf\xbf\x80_^\xbf\x07%\xcba\xe1\xc6\xc3N\xf0\xcc\xce\xdb\xff\xd95\xd1\xf7\xbb-\xff\xfb\x7f\x06\xd2\x84~\xd5\x88\xd8\xa93\x08\xe7\xcbQ\xd5>W\x0cL\xbaye8\x0f\x06\xae\x9a\xdbm&\x12\xe6\x95\x95s\x17-\xb9\x00!a\x89\x1d\xe0J]\x16[;m\x16\x99\xd1\xb0`6\xe6r-\n\xd5\xf3\xc3\xdb7X\xa95\xbbB\x03\xda4\xac:uf\xcd\xca6\xd8\x7f_)\x91\x02\x93\xc3\xeb\x06'\xaeF8\x88s\xbeT9?+\x0b\xb1e3#\x16\"\xb3!\x98\xe4<\xd5\x1e\x0eF\x07\x94_\xf14P\xb6\x92\xd6\xc1\xc9\x15\xc7\x17q\x94\xcd\xe0\xd1\x07\xcdK\xce\xa2U\x8d5:\xeb=\x9c\xd51\xc9Vc\xf8\x9a\x95E\xce\xd9\xa5\xf5\x12\xbe\xf0Pj\xfe7e\xf83\x07>-\x0b\x99\xb8\xb1b\xdb\xe4=\x8c\xcf\xeee;`WLdl\x91U\x83Z-\x97\"\x11,\x8b\x98%\x16\xc5\x12rn}?w\xa1\xa40\xe5\x070\xb2\xb6n\xa0\x1eaHD@:\xd0\xb50\x81\x94\xa2}k\xe6\xac\x9bm\x85\x9e%j\x13\xf2\x85\xefp\xdci\x8f\x18#\xa4\xda\xf1%\xf0\xc8\xd6g\xcd\x81o\xb6f\xe7\x07\xea76\x8c_\x9b 6\x84\x0d\xb2\x15\x07\xb1\xd9f\xdcNW\x9e\x1a\xe0\xd8\xa0 h\xbea\xd2\x88D\x0f\x8f\x99#\xa6k\xfa\xa4\x15[\xfc\xea\x89\x04\xcc\xd6B\xa4\x8dx`o\xca\xf7\xf3%[\xa8+\xde`\xbbb\xa7\x0c|.6\x8c\xf9\xf8B\xee>6\xa2z ,_\x08\x93\xdb\xd17R\xa3\xd25\xb3Ly\xfb\x016\xdc_\xd6Q\xf6d\x81\xfb\xa3\xa1*\xc0\x19\xb1\xaf\x8b\xd2\xda3\xb1\xc0\xaaz\xd7\xaeA\x17\xdb\xad\xcaqb\xdc\xb2\xe4\xf2I!\xed\xff\xd8\xe9\xd0uv\xcd\xd0\x19\x8d\x07\xd4\x12\n\xe3\xbcN9^\xb5\xf5|,M\x85\x1b\xbc\xb0\xe2\x92\xbbE\xe2\x86\x9b\xb5Ju\xd9\x14\xfb-\xd75\xc3\xe5\xbf\xfe\xc4\xac\xd5\xc2\xd3gpa\xebg\x07\xab\xaf*\xab\x94+$\xbc\xfc\xee\xbb\xd08\xfbY)X*\x05\xcfa6\x9b\xfd\x8f\xd1Gm\xcd\x98\xdc\x8d?\xc4\xe4nf\xeb\xf4s\xae6\x8f\x96J}3\xfe\xf8l6>%\x89%<\xb2E~\xc0\xd6\xbdW\x8f\xfe\xc5\x96\xf9\x0d\xfc\x19\xf0\xb0\xa1r\xff\x19V\xee\x0f\x01\xe5\xfe\x07\xbbb\x87\xd7.<\xc7\xe0\xcb~\xee\x80\xea\x13\xfa\xd1\xcfJ\xcd\x92\x8ci\x1d\xa1=We\xfb\xa2kx\xe3\xe5\xf1\xfa\x8c\xa8\xb5\xd2\xeb\x8f\x01\xbd^\xec\xccZ\xc9@D\xe5j\xf8\xb3R\x8ff\xb3\xd9\x10\xf0\xe4\xa4R\xea\xa3\xe0sh\xb9\xa8\xf6\xdbj\xdd\x16v\xee\x94\xfe\xea\xf5\xbb\x97o\xcf/\xde\xff\xfe\xf6\x9bP\xa2\xaf\xb6\xf4p%\\5\xc2\xea\xfek@\xdd\xbf\x04\xf2e\xa8\xeag\xcf\xe1_\xb6\x8b\xd9\xcfJ\xfd9\x9b\xcd\xfe9\xfe\x02\x93\xbb3\x1bn\xda\xb7\xb6.f\xfa\x95\xe5z\xcd2\xdb \xe1\x86\x85\xd4\xdb\xadQ\xa0:b\xd9\xa9\xcc\x07\xb9\xa9\xab\x83\x95\xc5\x81\x86O\xfd\xb7\xe7 E\x16\x1c \xe1:\x8e\x8c\x04\xbb\xda\xc4~(=\x7f\xb9\xb2\x80\xc5\xae\x8e\xc4\xca\xb9 \x11\xff\xc5\xaeLn\xd9\xc8e\xb8\xe8\x87=\x91\xd6\x13\xbb\x88\x9e\xe1\x0f6J}\x08\xac1\x7f\xda\xb9\xd5Z\x86\xfd\x83\xb3\x8e\xe1\xc2\xab\x89Jf\xbbr\x11\xb8\xb7B\xaf\xa2a`KG\x86\xf3I\x81\x87O\x1e\x0e\x17\xedg\xd5\xb2Jn\xc9\xc9\xbd\x05?X*5[\xb0\x1c\x1b\xf3\xe9\xc9n\xf6_\x0f\x9cV\xdc\xc2i|\x9d\x88Uy`\xdf\xb1\xbez\xf0\xb1\xffx\xf7\xfbo\xc3\xbf>\x7f\xfe\xfc\xf9x\x7f\xda\xf7\xeb\xc4\x86'qY7\xe0C$\xb7F+\xb4\x8f]r\xbe*26B\xec\xda/\n\x81o^\x07:g\xc07\x0b\x9e\xa6u\xc8s\xe6#\xa9\x91tH#\x00Y\xa2\xf2>\xfe/\xab\xbe\x8f~e_\x05r\xcd\xce\x98\x95\xae$\xb4d\xb6\xd6c\x9dJ\xbd\x8c]\x8a\x8c\x8fO\x18\xa5#\xba\xe0\xb9V28\xee|\xbe\n\x89\x98s\xec\xda\xe7\xf0t\xfc\x0b\xd5KH\xba\xf3\xef\xfcp\xf3i\x0c X\xcb\x07\xa8\xd4\x07\xcf\xe0A\xdfpl\xabg\xe6Z\xfe\xe0,T&\xb6\xf97\xb6\xb1\xe5\xfeO\xd7\xa4\x7f\x0b\xbed\xdb\xdcy\xe7\xa6\x0d?_\xfa\xc5V\xdb\xe8\x9c\x99\x08\x0d\xd7<\xcb\x1e_Ju-\xd1\xa1\xac\x99\x06\x06I\xa1\x8d\xda\x04FW\xdb\xd6=\xfd\xa73\x00\x9c\x17l|\xdeZ\xb2\\\x01sv<\\\xf8G\x1cy\xa5\x81\xafU\x96\x96,\xe5\xaaf\x98\xeb\xf3\x03\x03|n\xcd\x8f\x8b\xe1r\xf1\xb3\xd5\xd0\x80G\xd6a\x95*\xd9K\xe4\x94\xb9\xc6\xbf\xff\xe7\xdf\xbf \x8d\xa2C\x19W\xfb\xcba\xfbB=\xd9b\x9f\xce~x\xfa\x83~\x10\xb0\x13\xf7\xbfC\xac\x82\x07C\xb4\x82=\xf8X\xa4\x88 \xcf\x97\xb9\xda\xcc\x93\xe5f\xf3\xe4O\xe4\x1e\xf8\x1f\xff\xf9`\x98m\xd0X\x97vq\xc9\xf3\xf4\x8d\x90\xb8\x06)\xb1\xcb\x8av`{\x17\xe11\x91Vl\xe4^\xa4\xc9\xe1\x82HE\xd3%N\x86\x0e\xd6\xbe\xe2\x98\xb6HUh\xc2cmB\xc2`\xa5\xec{\xfe\x8d{\xc6J\xe8\xeb\xe0\x1b\x81F\x83P6\x81|\x04\xf2u\x85@>\x02\xf9\x08\xe4k \x81|\x04\xf2\xf5\n\x81|]!\x90\x8f@>\x02\xf9\x08\xe4#\x90\x8f@>\x02\xf9\x08\xe4s\x12\xa1u\x02\xf9\x08\xe4\x1b\xfa\x89@\xbe=!\x90\xaf#\x04\xf2\xf5\n\x81|\x04\xf2\x11\xc8\x17e\\'\x01\xf9\xc6\x0e8lbu\x8d\xc2\x84|\x86\xb9\xe0\xc6\x9f\xea\x13\x0eM^\xdc\xe0\x80C'\xbd\xa0\xd0\xc4\xbd\xcdK\x91\x19\x9e{|*n7\xf3\x85}\xf2o\xc2\xac\x7f\xc6w]\xc6L\xc3N\x15\xd6\x96\xf00\xc7:\xa9\x80\xc5:7m\x1b\xcd\xb5i\xa4\xa0je\xfa?\xb5 \xc3\xcew\xfc#\xf7\x0c#l\xa8\xbd+\x86\x80\"\x02\x8az\x85\x80\"\x02\x8a\x02\xdf \xa0\x08\x08(\"\xa0\x88\x80\"\x02\x8a\x08(\"\xa0\x88\x80\xa2JB\xe5\x12P4&\x04\x14\xddV\xeb\x04\x14\x11P4\xf4\x13\x01E{B@QG\x08(\xea\x15\x02\x8a\x08(\"\xa0(\xca\xb8N\x02\x145e\xcbVB\xe2\xc7\xfa\xc3\x9c\xd6\x9a\xb2~\xb8:L\xd2\xe0\xb4X\xfd\xd9O }XF-A\x00 \x9c\xfe\x97\xfc\x93\x99_\xf2\xdd8<\x10\\\xc5G\xad\xe1\xfd\xe9\x89#'b\xd7\xf5)O\xf8\xb6\xff\xf4I+\xa6\xddq\x97p\xc1V\xfc\xad\x03\x9af\xee\xf7\x91\x02\x1dVe\x8b\xb2E[\x15s\xd8(m\x80cj\x08\xf3F\x03\xaf\x1be\xd8\x08*2I1\x81\xf3IC\x07KBY\x1d\xd4\x0b\xfe\xc3]4c\xe7\xc62\x1b\xd9\xc8~-[J\xc2\xe3\xe7\xe7\xf8\xda\xd8\xe8\xbbfx\xd1\xc7\x19\x08\xa3\xcb\xb4\xaa\x86B\x96\xc7\x89c2\xeaZ4nk\xa3\xbdi\xb47\xad+a\x9fC\x90#A\x8e\x049\x12\xe4\xd8\x16\x82\x1c r$\xc8\x91 G\x82\x1c r$\xc8\x11\x85 G\x82\x1c r\x8c\xd3:A\x8e\x049\x0e\xfdD\x90\xe3\x9e\x10\xe4\xd8\x11\x82\x1c{\x85 G\x82\x1c r\x8c2\xae\x93@\x8ec{\xd36B\xce\xab\x1b\xd8\x1a\xa5\x8d\xddG\xfb\xce\x0d\xd5\xea`H\xeb\x8b\x84,\xaf\x83\xf3\x03Ys\xfbY\xe3\xe6\xcbDm6\xcc\xf6C;\xa8x\xfa}\xc1\x8c\xda\x9c=\xfd\xfe{\xa9Lk\x9d+\xe43\x07\xc35\xfeV\xef\x8e[\xb2L\xdfh{\\\xd9l\xdc\x8d\x87sR\xfd\xc2\xb1?Y\x01\xb5\xb3K\x1e\xabj\x8fj2?5\xb9\xf391\x0f\xe7\xc1:\x8f\x8bU\x10(f\xceV\xa2}\x155\xb6\xcav\xca8\xa49\x83\xdf\xcb+\xf5\xd5\x12\xd4r\xa9\xb9\xb1\x0b\xe2vu\xa1\x91\x7f\xd7\xed[\xa3\x8f\xa4A\x18\xca\xbe\xf4\xa8\xd6\xd5zH\xbb\x9d$\x89o\"*X\x16\x1b\x9e\x8b\xa4\xfc\x1b\xba7\x7f\xab\xa0KC\xad\xb9,\xbb\xa3\x90U\x06\xaf\x13\xdc\x9f\xbb\x83P\xb9\xd6\xb5b]^\xac\xb0\xc3\xc3\x160\xa2e\xaf\xd9v\x91\x9fE\xcd\x1d\xe8\xb9G\xd1\x99\xd8\x88X=\xe3\xb3%:?\x84D\xbb\x9co\xd3\xc2=\x99\xc1\xc6\xd3[\x97,j\x16z\xbe\x84\x8c/\x8dO,\n\xe3f\x9f2\x00\xc74\xb5\x1b4\xae`\xab\xe5\xc5\x0e8K\xd6\xc0\xb6\xdb;\xa7\xcf&\xde^\xbf?\xa6\xd5\xc6\x1bV\xb7h\xb5\n7\x0e\x83\xfdGy7|\x058\x95\xba\xb4\x0f\xfa!,d\x92\x15i'0g\xae\xe4\n\xc1\xeb\xf4\x17b\xbd\x8d\x14\xb6\x9dS\xdb$\x94\x0f\xe7\xba\xd3W\x9d\xaa\xe2\xda$\xe7\xdac\xfc8\xb4\xea\xb1h\x87\xdb\xcc\x8f$\xb1\x92*o\x8c\xbev\xb1\xae\xd5\xc7\xe8\xca\xee\x85\xfe=\x1d\x96\xf3+\x9e\xb7\x8a\x1b\xeb,\xfft\xb7\xa3D\x83\x89\x91\xf3\x811`\xcb\xe5\x12#)\x95\xa7<\xef\xe6\xb3\xde \x99\xf0g\x90(\xbdQ\xfa\xb1N/\xe1\xfb\xd9_\x7f<\xbaV&\xee(\x97\xc5&\xb4\x99\xfc\xc1+\x1bOZ\xa3M\x9f\xc1\x161\x8ej \xcb2\xc3s\xab\xfa+L\x88|zb\xcbr8N^\x86A\xadm\xe2\xbf\x15\x9b\x8b\xc6\xcd\xa7\xf7l\x7fxG\x9b] b\x1atp4\x91s \xa4f'D\xce!r\x0e\x91sZB\xe4\x1c\"\xe7\xf4\n\x91s\xbaB\xe4\x1c\"\xe7\x109\x87\xc89D\xce!r\x0e\x91s\x88\x9c\xe3$B\xebD\xce!r\xce\xd0OD\xce\xd9\x13\"\xe7t\x84\xc89\xbdB\xe4\x1c\"\xe7\x109'\xca\xb8NB\xce\x99z;l\xc5\\y\xf2g\xc4\xf5\xaf\x9d\xe3\x99\xdf[Kk^\xf2\xda\\\x016\xefh\x05x\xeb\x9fzP^\x0e\xfb\x00\xd0\x1eKW \x0c\xcfY\xe6\x80YS]\x17k\x9fX\x94\xb7\xc9\xb6\x0b|\x9d\xe7*\xd76\x96h>\xbed\x98\xbar9%\xacM\xc247<-_\xdc;\xfa\xf9}\xcd\xda\xb9g\x98^\xd5\xb5\x130\"\x02\xec\x08\xb0\xeb\n\x01v\x04\xd8\x11`\xd7\x12\x02\xec\x08\xb0\xeb\x15\x02\xec\xbaB\x80\x1d\x01v\x04\xd8\x11`G\x80\x1d\x01v\x04\xd8\x11`\xe7$B\xeb\x04\xd8\x11`7\xf4\x13\x01v{B\x80]G\x08\xb0\xeb\x15\x02\xec\x08\xb0#\xc0.\xca\xb8N\x02\xd8\x8d\xed\xa6\xff\xc2.y\xed\xdf\x8e\xb7\x7f\xd9\xaa\xff\xe1\x1e\xc2m\x84\xd0t\x85\x10\x9a\xd1/\x10BC\x08M\xe0\x1b\x84\xd0\x00!4\x84\xd0\x10BC\x08\x0d!4\x84\xd0\x10BSI\xa8\\Bh\xc6\x84\x10\x9a\xdbj\x9d\x10\x1aBh\x86~\"\x84fO\x08\xa1\xe9\x08!4\xbdB\x08\x0d!4\x84\xd0D\x19\xd7I\x10\x9a\xa6\xd0\x15\xab\xc15<]\xb1\x1aR\x0d]\xb1\xda\x90S\xc1s\xb4)\xac%\x049\x12\xe4H\x90#A\x8e\xbd\xdf \xc8\x11\x08r$\xc8\x91 G\x82\x1c r$\xc8\x91 \xc7JB\xe5\x12\xe48&\x049\xdeV\xeb\x049\x12\xe48\xf4\x13A\x8e{B\x90cG\x08r\xec\x15\x82\x1c r$\xc81\xca\xb8N\x029\x8en\n\xa3\x8b?c/\x98\x1b\xd9\xe7F\x17\x7f\x9eD\xcd\xe1\x8b*\xe9\xe2\xcf\x86\x1c@\x9ft\xf1']\xfc90\x06\xbe\xb0\x8b?\xc7\x8e,\xd6Q\xc7\x15\x1f\xf4\x02\xd0\x0b\xa5\xca\x11u\x0fw.\x8f\xb1\x08nE=2A\x12@T6?6s~\x12\xf8\xff8\xe0\xff\xb1\xa1\xff\xbe\xb4\xc2\x0d\x80\xffS\xc0\xfe\xb7\x06\xfdO\x02\xf9\x9f\x00\xf0?>\xdc\x7f<\xb0\xff\x80P\xff1\x81\xfe\x03\xc1\xfcG\x05\xf9\x8f\x02\xf1\x1f\x0f\xe0?\n\xbc?\x0d\xdc?2\xb4\x7fT`\xbf'\x011\xee\xed\x8e\n\xea\x1f\x00\xd2\x0f\x00\xfaQ\x01@\x14\x98\x7f2(?.\x1c9\x01\x8c\x7f`\x10\xff\xc8\x10\xfeq\x01\xfc\x83\xc1\xf7\xd1\xf0r\x04t? \xb8\x1f\x87\xbfn\x06\xda\x8f\x979\x98\x99>\x1c\\?U\x9bS\xa0\xfa8\x85M\x82\xe9o\x08\xd2\x0f\xa7\xf8\x0f\x08\xd0G\xc3\xf3q\xe0|,4\x1f\xd4\xf2M`\xf9)\xa0\xfc\x18$\x7f @~\"\x1c\x7f;0>\x00sO\x01\xe2\x8f\x00\xc3\x07j7h\xe9G\x03\xe0\x8f\x08\xbf\x1f\x0d|?\x16\xf4\x1e\x05\xbc\x8f\x01\x83c\xa0\xfb\xe1!\xf7\xa3\x00\xeeG\x84\xdb\xa7\x83\xed\x93\xa0\xf6\x1b\x00\xedSa\xf6Q\x90}\xbcv\xb1\x18h<\xc0~\x03x}\"\xb8>\xd8\xdcc\x01\xebG\x84\xd5\x8f\x03\xaa\x1f R?\x8c)M\x82\xd3\xa7\x80\xe9\xfb\x93\xa6\xdf}y[P\x80\xf6C\xd2~\xc8} \x03!1PH\xb0\x8d\xa5\xc4\xe5\x1f\x9c\x9c\x00\x109\x16$r|P\xe4`\xb0\xc8i\x80\x91\x03@#'\x02GN\x02\x8f\x9c\x02 9&DrP\x90\xe4\xb80\xc9\xc1\x80\x92#C%G\x02K\x8e \x97\x1c 0\x99\n\x99\x1c\x1d492lr\x03\xe0\xe4\xc8\xd0\xc9A\xc0\x93 |\x12\x1d4DA('\x04Q\xe2\xc3\x98\x13\x00)\x07\x87R\x8e\x0e\xa6\x1c\x1bN9 \xa02\x01\x04\x88\x02U&\xc2*\xc1\x94\xe6\x0d\xa1\x95p\xb9\xb4\x1frLn\x08\xb5\xd0~H'7\x04^\xa6A/\xb4\x1f2\n\x869\n\x10\x13QG\xda\x0f\x19\x0f\xc9\x1c\x0f\x94\x89\x84eh?\xe4\xed\x01\x9a\x9b@4\x13A\x9a\x1b\xc14\xd3\x81\x1a\xda\x0f\xd9'\xc7\x82m\x8e\n\xdc\x1c\x0b\xba9\x1axs8\xe3\x9a\x04\xe0L\x83p\"\xf7C\xde\xd1K\xf2\"\xb7\xaf<\xe1\x9f\x84\x99\xebk\xb6\x9d\xeb5\xcb\xf9\x9cmp\x93\x93\x90\xfb\x1b[Z\xfbQ^\xb2,y\xfdI\x98\x0b\xa5\xb2\x97JHm\x97B\xefl\x11\xf7\xf4\x82=\xa3.\xb9\xd4sU\x98\xbb\x0b\xf1\xa4\\\xaa\xcd\xadS5\xce\x04nYLln\xc5\xdaNu>1sZ\xf63\xbckN\xb9#\xcf\xba[&}\xe5\xc6V\xa4\xbf\xfd\xfe\xfe\xf53\x0cW\xdc\xb3>\x06\x10\x98\xb89\x97\xc6;\xc9*#\xd6\xf2\x94.\xfa\x1b.\\\x8b\x95d\xa6\xc8\xb9\xae\x06\xb5\x0d[Wj\xa5\xd0\x1b\xd5\xe6J0-\xc1\xb4]\x89\x19\xc3\x86`Z\x82i \xa6%\x98\xb6!\x04\xd3\x12LK0-\xc1\xb4\x04\xd3\x12LK0-\n\xc1\xb4\x04\xd3\x12L\x1b\xa7u\x82i \xa6\x1d\xfa\x89`\xda=!\x98\xb6#\x04\xd3\xf6\n\xc1\xb4\x04\xd3\x12L\x1be\\_=L[\xd7\xc4\xc1\xacBz\xa4\xb5S\xa3C\x9co\xd8\xaa\xd3m\xf1\xe1\xff\xa3\x84t\xf80\xff\xc4\x92H`\xf8?\x94\x90\x17Je\xf7\x19\x0fv\xfd\xa8\n3\x1f\xc3K\x03I\x17\x02\x95k\x89(&6\x13D\xa02\x81\xca]!P\x99@e\x02\x95 T&P\xd9\x0b\x81\xca\x04*\x13\xa8L\xa02\x81\xca\x04*\x13\xa8\x8cB\xa02\x81\xca\x04*\xc7i\x9d@e\x02\x95\x87~\"PyO\x08T\xee\x08\x81\xca\xbdB\xa02\x81\xca\x04*G\x19\xd7W\x0f*\xdf\x16\xdb\xc5\xb6\xe9\x00\x9e{\xa1Tv\x81\x0f\xfa_\xef\x19\x8e\xeb\x940\x06\xdd\xd0\x05t\x1d9\x0e\xe2rl\xbc\xe5@h\xcb)\xb0\x96[#-'\xc1YN\x80\xb2\x1c\x1fc9\x1e\xc2r@|\xe5\x98\xe8\xca\x81\xb0\x95\xa3\"+G\xc1U\x8e\x87\xaa\x1c\x05S\x99\x86\xa8\x1c\x19O9*\x9a\xd2\x13\xf5\xd1\x05tQ\x08\xca\xc9\xf0\x93\xb8p\xe4\x04\xd8\xc9\x81\x91\x93#\xe3&\xc7EM\x0e\x86\x99D\xe7\xf4#\xf0\x92IhI\xf0\xa6\xaf\x1b %t\x01\xdd4l\xe4\x86\xc8\x08]@7\x11\x0b\x99\x82\x84\xd0\x05t\x83r\x04\xec\x83.\xa0;\x00\xe2q,\xbc#\n\xed\xa0\x0b\xe8n\x8aqLG8&\xe1\x1b7@7\xa6b\x1bt\x01\x9d\x93c\xa1\x19G\xc42\x8e\x83d\x1c \xc78\x8c)M\xc20\xa6 \x18\xf5\xa4I{Fh\xcfHW\xc2\xb8E\x0cr\x11lc)q\xe9\x02''\xc0/\x8e\x85`\x1c\x1f\xc38\x18\x8aq\x1a\x1c\xe3\x00H\xc6\x89\xb0\x8c\x93\xa0\x19\xa7\xc03\x8e\x89h\x1c\x14\xd38.\xaaq0\\\xe3\xc8\xc8\xc6\x91\xb0\x8dc\xa2\x1bG\xc27\xa6\"\x1cG\xc78\x8e\x8cr\xdc\x00\xe782\xd2q\x10\xac#\x88vD\x07\x0dQ\x88\xc7 1\x8f\xf80\xe6\x04\xb8\xc7\xc1\x91\x8f\xa3c\x1f\xc7F?\x0e\x88\x7fL\xc8\xd9Ga \x13Q\x90`\x06\xf2\x86HH\xb8\\\xda32&7DFh\xcf\x88\x93\x1b\xe2$\xd3\x90\x12\xda3\x12\x85\x9a\x1c\x057\x89\xa8#\xed\x19\x89GP\x8e\x87\xa1D\xa2(\xb4g\xe4\xf6x\xcaM\x10\x95\x89\x98\xca\x8dP\x95\xe9\xb8\n\xed\x19\xe9\x93c\xa1,G\xc5Y\x8e\x85\xb4\x1c\x0dk9\x9cqM\xc2[\xa6!._\xc9\x9e\x91\\$\xbcg\xcf\x88.6\x1b\x96\xef\x9e\xc1?\xeau\xf1\xbb\xad2\x17\xf6\xf9\xc6Yl\xab\xb7\x17/\xdd)\x87\xb0f2\xcd\xcaLe\xceM\x91{\x1f\xab\xb7\xca\x00~\x08V\xe2\x8a\xcb\xaa@\x86\x99\xb5\x9e#\xdc\xe0\x8fB\x99\xf6\x0fe$\xd2\xda\xccR\xd5\xc8\xffx\xcf\xf6\xb2X\xc5\xcdQq7\x82\xa4\x00\x8c0\x19\x7f\x06\xef\xdc\xdc\xe0\xe7\xd7W<\xb1C\xfa\x1bx\xfa\xfd\xec\x87\xef\x7f,\x98Q\x9b\xbd\xb7\xc3\xb9\x11\xb4\xb4\xaa\x03\xdez\xddU\xa6a\xbf\x84\xc6Qj\xd5\xd6\xb3HL\x91c^\x01X\xa3\xf3zJG\x93\xaa;\x82@O\x02=\xbbB\xa0'\x81\x9e\x04z\xb6\x84@O\x02={\x85@\xcf\xae\x10\xe8I\xa0'\x81\x9e\x04z\x12\xe8I\xa0'\x81\x9e\x04z:\x89\xd0:\x81\x9e\x04z\x0e\xfdD\xa0\xe7\x9e\x10\xe8\xd9\x11\x02={\x85@O\x02= \xf4\x8c2\xae\xaf\x1e\xf4\xack\xb2`\x9a\xcf\x99\xd6\xdc\xcc\x11,\xecT\xe9\xe0\xd7\xaf\xd5_F\x84\xf2\x94\x9f\xbe-\xd2k\x94a\xd9\x1c\xff3\x13\x7f\x14\"\x15f7\x82\xfb>xe\x87ib\xd7\xb1\xcf`\x8b\xa9\xa3*2`\x99\xe1\xb9dF\\a\x9c\xf9 \xbf\xe5\xd2cyi]-\x9c\xf6\xbd\xfd\xf6\x85R\xd9\x9b\xf2\xcb\xfe\xa9{\x06\xd8V\x8a\xbd\xbb\x88\x18]\xffvw\xae\x7f+\xc5\xc3\xf4\xb7\x1dr\x04\x93\x13L\xbe/1N\xc1\x10LN09\xc1\xe4\x04\x937\x84`r\x82\xc9 &'\x98\x9c`r\x82\xc9 &G!\x98\x9c`r\x82\xc9\xe3\xb4N09\xc1\xe4C?\x11L\xbe'\x04\x93w\x84`\xf2^!\x98\x9c`r\x82\xc9\xa3\x8c\xeb\xab\x87\xc9\x0f\x83\x18\xeb5\xcb\xfbv\x08\xef\x03\xbc\xef\xf0I\xff\xf3=Cv\x9b\xba\x18\xc3qnu\xb9\\\x00\x9b\x8dH\xa6\x84p\xd9`\x11qy\x8fC#\xb2G\xc4c\xe3\xd1X\x02O <\xedJx\xcc\x12xJ\xe0)\x81\xa7\x04\x9e\xb6\x85\xc0S\x02O <%\xf0\x94\xc0S\x02O ,3\xb6\xb2\xde_\xaf\xd5\xb5]3\x08\xf3\xd0\xfe\xb9~\n\x91\x0b\xf9\xb8\xfe\x03\x8e\x82qg\xfe\xdb\xfe\x0b\x1aRa{`Q\x18\x8c\xa0E\xee\xfc\x85\x06\xfe\x87\xc7zx\x0e|\xab\x92\xb5\x9d\xb4\xb2\x08\xac\x05\xcb\xb5\xad\xf0a\xb4\x1f\xa5[\x9e\x0b\x95\xcell5X\x01\x04\x8f\x1a\x95\x18\xff\x103\xc0@\x0b\xb9\xb2\xb5\x126\xc6\x97\xa9[\x0e\x0c\xb5\x89\xad\x98\x90\xa0d\xe2V\x0beM\xc7?\x93\xf3\xa5\xc82\x1b\xe2\x9e\xdb\x81\x9e\xfa\xdc\xb3]r\xb8\x94m\xe5\xd4\\\xac\xb0\xe2\xa6z\x07R&\xb2\xdd\xf0\xe2\xac\xae\xe8\xdc\xa8Q\xabs\xb6\x1d\xb0\xa3Vq\x18\x06\xady\xdelk\xce\xafY\x9e:0\xa5~8\x05\xa3\x02\x19\x0e\xc4g\x85\xc6I\xc3.\xac\xae\x04\x83L%\x97\x90\xfa)\xdd\x1a\xe4b\x87\xfd\xa0\x0d\xdbl\x83#h\xd4\xb9@\xa4\x83\x01D\\\x92\xcb9Nfs,y\xf4\xe1J\x93oTr\x89\x13\xd4{\x1f1\xb2*\x85\x8b\xed\xc2\x02\xcf\xe0\xa7\x9d}\xb0\x8c[\xe0\x1f\xfe\x0f\xef\xc5&\x84\xaaDz7+\\\x16\xa3'};y\x0c?\xed\xca\x8aD=\x1cQI\xfb\xe0o\xca\xb6(\xe2\xc1\x9fv\xbf\xe4\xaa\x18\xebYh\xd0^\xe2k;\xc5SZiw]y\xdex7 _\xf7\xa2\x1b\x96\xc9\xd8J\xb4\x14.\x10\xe0Yp\xccq4L[\x1b\x96\x1b\xe7e\x1a\xe5\x8fg]\x82'\xb8\xc343\xf1\x96\xfb\xca\x16[\xafH|\xcb\xf1\xac\xf5\xd6!\xeb\xd7\x1c\x87y\xa6\x14\x82{F9\x95\x04:\xb0l\xf4\x01\xeb=\xb5\x7f\xab\xd1&\xb4C\xc6\x8c\xf2\x1di\x1b\xa0\x9d\xd7\xcd\x94\\\xf1\xbc\xee#\xc4\xe4\x10|)!\xa5po\x97/\xcf\xeaO\xba<\x04\x02\xe1R!\xa4%Ef\xdd\xa8\xdc3*\xe77\xc2_\xf9\xd8\xf6!\x1f\xc7\x8d\xa6r\xa0\x07\xec\x802\x82J\x99\xe1\x8fM\xd8+L\xed\xb0\xf7e\x9d\xab\x1e[\x94}\x85\xe3\xc6\xfe\x01\xb1\xf0v\x07\xd5\xfa\x0f+\xb1\xfe\xc4\xe4\x1e*;\xc0\x16\xf11\xe2S\xe8Z0ES[\x9bi\xb6\xb0\xc6\xb7m\x05*\xc4\x96\xa7c=;E\xa7X\x83\x97J\xfa$\x00NN\xda\xe4E\xd2\x80\xbe\xffh\xd7\xb2\xd8* \xa9X.\xb9\xad\x9a]\x93\xb8\x97u\xa0\xc1\x1d\xc3\xc7\xe4k[\xd5\x1a\x92\x92\x85T\xf2b\xce \xe5[.1\xe5\x11C\xb6h9\xeca%%J\xc8\xd1\xb9>\xb4\xa4q2\xba\xb0q\x12\x19\x81\xc4\xc7 \x91\xce~\xd2\xa8\x0d_\xdd\xe1$\xba\xc8)&x\x8c\xcb<\x9c\x1c\xf5J\x0f'\xf1\x17{\xecK\\\xa0\x8d\xa6Z.3\xf1v\x9d\xb25j\xe9\x7f\xc4\xa0\x03\xc9E\x0b\xcee\xb9\x18\x8aX\xa5\xbdd\xb2\xb9\x80\xd9\x14\x99\x11\xdb\x8cc\xb1N\xf3z\xf0}t\xb7s;\x82\xc3\xe3(h1S\xa6\x0d\xaf\xb6\xfa\xfb\xa5r\xaa\x96 \x9d\xa5\x8a\xa2\x06\x8b\x92\xc5f\x8e\xcbM=\xdf2\x91\xce\xd5\x15\x1f\xe0\x1f;\x99\xd8\x96\xd8$B\xa0\xff\xfbjY\xb6X\x16\x9b\x85\xe7\xb9\xa0a\xb8\xe7\xda\x8a\xf0 \xe4qCH\x94\x1d\x03v\xf6\xb4\xc5\x0f>\xeaV\x9a\xbe:wOU\xad\xea\xed\xeb\xa8O;k\xa6\xdd\xa0ih \x10\xbc\xb3,\xe7,\x1d\x9e\x16\x1a\x8b\xdd9\xcd3-\xa1y\xe63\xce3{v\x89k\xb6\xde\x19\xa4\x99\xaf\x197\xf7\xd8\x0e\xf8\xa5\xcc\xd41\xe9\x8d\xd4}S\x1be\xdbd\x15^\x7fT\xc3\xce\x85\x83FA\xce\x13\xb1\x15\xa8\xb4\xeb\xf5\x08cC3#\xf4r\x07 \xcf\x91\xcc\xdf\x08K\xe1e\x15E\xfb<`\xc9v\xab\x1f\x02\x96\xab\xc2\xd1\x01\x86\xbfQ\xad\x00mT\xec\xfa\x94\xc1J\\\x95\xcba\xdb>\x1b#\x0f\x85\xe7\xbe#^\x94X\xc2\xaa\xe0\x8eT\xd0\xf3\xf4\x96\xad\xbc5\x0e\xe4\xdc]Y\x17\xd5c\x95a\xd7o:\xe2*\xa2\xee\x0eK\xe8/)\xe49\xc2\x1eC\xf2Of~\xc9\x07\xae\xb8\x83\xd8\x11\x1dE\x07\xf5\x0d\xff\xc7\xd8`/\xebS\xce\x01\xf6\x9f\x9e\xff\xcc\xb4_\xe6_\xb0\x15\x7f\xcb\xff(\xb863\xf7\xfbH\x81er\x87c\xd1V\xc5\x1c6J\x1b\xe0\xc82F\xe3\x1ax\x1dg\xe6\x03)&0O\xc6\xcc\x92.P\xb0z\xc1\x7f\xd4\xb3cIlo\x10\xa9\x97-%%\xb8\xff\x0f_\x1b\xf3V\xd7L\x83\xe6\xe6\x0c\x84\xd1%C_C!\x9dy\xa6\x8e\xd7|-\x06\x8c1\xce\x9f\xb8j9\x9bvmiA\xe4B\xc2\xea\xed\xc5\xcb\xca\xecK|\xba\x91\xa4\x1ejA\xa2r\xf7\x16\xae8s\xd7\xf4\n\xdf\xb6\xd1\x02.\x8b\x9bz\x19\x9e\x1e\xca\xd7\xde\xa9M]\xdd\x10\xcc\x0d9\xdfr\xe4\xc7\xfe\xc4\xf2\xaaW\"\xd8\x1em\xad\xa0\x89\x8e\xf1=j\xf2\x18\xed\x1e\xa4\xdd\x83] \xfb|W\xccAv\x0f\x1eq;\xc1(O\xa3\x9a(\xed\x040d\xfd\x9d\x89\xc6\xcf*\xcc\xbb6\xc7\x0fp>\xa79\xfef\xd5\x14\x84\xbei%\xda\xc8D\x95R\x1b\x9fRf\xf0\xbb\xccv\xb8YL-A-\x97\x9a\x1bP9\xb4\xab\x0b\x8d\xdd{\x9a\x9b\xe6\x90<\n\xf9\xc2I\xefd\xdd\xa3ZW\xeb!\xedv\\\xbco\"*X\x16\x1b\x9e\x8b\xa4\xfc[\x89\xac\xd8V\xbaM,k.\xcb\xee(d5mu\xb2\x90\xe7XZ\xc6\xb5\xae\x15\xeb2\xf8\x85\xb6\x1dp\xc9\xc7\xb4\xec5\xdb.\xf2\xb3\xa8y\x80\xe1\xd3Pt&6\"V\xcf\xf8l;\xa9\xb4\x1f \xb8Y\xb5i\xe1>\x96,2g\xaf]U/!\xe3K\xe3\xb7% \xe3R\x0f%}\x177\xb9\xb9A\xe3\n\xb6Z^\xec\x803\x1bFo\xb7wN\x9f\xcdx\xa7~\x7fL\xab\x8d7\xacn\xd1j\x15\xf2\xbbl\xdc\x05B\xa6\"a\x86W\xdbUK]\xda\x07\xfd\x10\x162\xc9\x8a\xb4\x13\x9e0Wr\xb5\xff\xb7\xd3_\xe8\xeb\x1bq\x9b\x8d\xfa\x1b\x8b\x00!\xe1\xc3y79\xdf\xa9*R\x19\xec\x9c\xee\xe6x\x1cZ\xf5X\xb4\xc3m\xe6G\x92XI\x957F_\xbbX\xd7\xeacte\x97\x05\xd3\xd3a9\xbf\xe2y\xab\xb8\xb1\xce\xf2Ow;J4\"\xe1\x9c\x0f\x8c\x01[n J\xe4)\xcf\xbb1\xe0;!\x13\xfe\x0c\x12\xa57J?\xd6\xe9%|?\xfb\xeb\x8fG\xd7\xca\xedYq\xf3-\xcf\xe7\x8d\xbcO\x88\x1fw\xc1\xf3\x12#\xee\xe1\xc99\xf6\xbeT\x1b_\xc4 a\xae,\xc6?G\xc49/\xa7\x88\xe2\x888\x17Zm:!\xe2\x1c\x11\xe7\x888\xd7\x91\x18\x07\x03D\x9c\x1b~8\xa2\x92D\x9ck\x0b\x11\xe7\x8887\x8d\x96\x15\xfe\n\x11\xe7\x8887M\xa7D\x9c\xeb\x97\xd0\x92\xc6 \x11\x1a\x06d\x8a ~\xed\x84\x06\"\xceM\x9b6\x888G\xc4\xb9~!\xe2\x1c\xcd3c\xf2u\xcf3D\x9c\xbb\x93\xc49\x7f\xfa\xa9I\xd6e!r\x0fS)\x85\xd8t\x03Bl\xba\x90j\x88MGl:b\xd3\xd5\x12\x18b\xc4\xa6\xeb\x91\xb0\xcfw\xc5|\xc9l\xba&\xd0\x0f]\xa3\x7f\xc55F^n\xa2\xc6D`\x95\x1cc\xcdY\xfd\x18\xd4\x91NK\x89\xfew[\x0d\x02\xd1\xffN\xad\xe60]\x8d\xe8\x7f\x0d9\x80>\x89\xfeG\xf4\xbf\xaf\x81\xfe\x97e\xf3U\xae\x8a\xad\x7f\xb5\x97\xf1\x97e\xc8*h\x1c\x87\x97e\xe0\xde\xf2\xcf\xb6\xa9}\xe5\xf3\xfe\xc7{\xc6\xe7k\xaa\xab+w!\x92\xc4\xfa9B\xe7\xfc\x94\xec>\x1b\xda\xe7\x92e\xe5\xa7\xe5r\x9c.\x15n-D\xb6\x18\xca\xa5\xf8\xfc\x9a\x8b\xd5:\x98(\x8dl\xb7\xe7\xc9\xcds\x9e\xa8<\x0d\xa6}C}_KDZ\x1a\xe25\xe4$VONb\xac\xa3\x96h}\x95\x12i1\xb5x\xbc>\xb2\xff\x9cL\xaeU\\:\xa4+> \xfa7\xacY\x194\xf9\xfa\x82\xab\xaf\x9b\x9a\x85\xf6\x0c\xbe\x05\xb7SC\x9b\xbbgU\x12\xcaU\x97\x82E!\xe82\x83\x9fU\x0eBj\xc3d\xc2\xdd\xe9\xe0W*+6\x1c\xf46\x13\xc6\xd8\x0fmU&\x92\xdd\x99{\xcd\xe7\x85\x83x\x7f-\xbe\xbc\xfa^\x0e?\xcb\xe1\xe1\xe5\x8eUZ\xd2\xa9\x84\xbc\xe4)\x9eo\x1b8\x04\x1e%)6E\x86\xf7=\xde\xcdn-k\xe7{\x16\xefE\xc2\x9b\xb2\x18h\xc9\xb6z\xad\xaa\x98\x8b%\xbe1*\xf7\xbdkr\x96\\\xc6\x10\x98\x9cT\xd7Eu\xbbmr\x0f\xc7~\xb16\x84FG\x94E\x97\xa9\xecF\x8f\x02\xab\xb9s\xd8\xf5\xc56ef\x84\n2M\xf1\xbf\xa92\xf2u\x14\xe5\x852k$\xeb\xda\x19\x03A\x8es\xb9T\x88g\xb4\xfe\xfa\x16}\xaf\xe3\xb7\x8c7\xdd\xf0d\x8dw\xd6e;\x17\xb4m3\x968\xb4\xe7\x95\x1d\x8aU\xf9\xf8_\xbe\xdce\xae6\xa8 \xab\x82\xc7u|4\xfe\xa9\x8dJ\x8b\x8c\x9f\xc15\x87$\xe76\xa6\xd7|\xcbr\x0c\xee\xf1B:\x97\x18Up\xc9\xf9\x16T\x91\x03[h\x837\xdc)\xa9!\xb1A\x9b\xad\xca\xf8Wr\xceR\x8c\xe8\x1fu*\xd7Fb[E\xdb\xa0\x15\x97\xc7x\x8d\xdf\x95\x0d\x00G\xbfQ\xdd\xfat\xcd<\x073U\xdc]}\x95\x8a\x9c'\x06\x17\x06\x19\xb6Ly\xf7\x96\xa9\x95H\xbe\xf1\x17)\xb2L+X\xf3l\x1bPY\xa1A\x8b\x94k\xc3\xb7\xc0 \xe7K\x96\xd8\xc1\xd4\xb8\xee\x0c\xc4\xc6aK\xbb$\x1b1\xbbjT\xcc\xdd\xa8\x08\x87\x18AW\x12\xe6\xf6>\x86\x9fv\xff\x1b\x87\xce\xe8p\xa8X\xb5\xc1g=\xb8\xf0\xael\xcc\x05\xb6\x05Rnx\xbe\xa9\xb8\xb2\xb6S\xae\xed\xffH\\\xa1`\xd3\x9b\\v!]\xb0\xd7:v\xba+\xb1\xa3\x14C\xf6\x11\xa4\x11\x9e>{\n\x1b\xb6\xdd\xf2\xd4\x1b\xc2\xf9\xab3`\x90 \x8d~\x12\x9dH\x80;ccBw\xc5\x1a\xeb\xf1\x84\xef\xd7\\;B,\xb6\xaa\xbe\x1b\xcfo hX:\x98\x11H\x13\xef\xeeC\x1f\xd7\x1a(j\xe9\xcam\xed\x06PU\xd8Zb\x9c,\xb1\x9e\xc1\xd1q\x87\xbf\xd1fI\xee\xb5\xa5z\x8f\xe0\x00\x82\x03\xba\x12\x13\xaa\x7f p\xc0-\x13\x0e\xe1\x93\xf8\xcb\xd0\xde\xc2 k\x95\xf6\x16\xd2\xdeB\xda[H{\x0b\xdb\x0f\xd2\xde\xc2Zho!\xed-\x9c\xb6s-\xfc\x15\xda[H{\x0b\xa7\xe9\x94\xf6\x16\xf6KhI\xe3$\x02\\\x8b\x8c@\xe2c\x90Hg?i\xd4\xd2\x9e\x8f\xcf\xb8\xe7\x83\xf6\x16N\x9b6ho!\xed-\xec\x17\xda[H\xf3\xcc\x98|\xdd\xf3\x0c\xed-\xfc\x1c{\x0b \x94#P\xae+1.\xd8|\x05\xa0\x9cu\xbd\x0e\x99s\xa5\x8c\x02s\x7f\x13f\xfd\x8b\xcf,w\x99\xc1~\xe5\x8c\xf9\xf7\x06Z\xe7\xcb\xea\x07\xeb\xaa\xf2\xfcS\xf7\x0d\xaf\xebWqW\xee\x82\xa9cU\xc3\x16\x1a\x8cmb\xbe\x05\x93H\xcb\x10?<`J8;\x99\xc0\x0c\xf1Z\x80 \x9a\xb02\x85\xcc\x0c\xd3\xf41\x91\xd4\x0c\x11\xf6\xd8\x96\x88\xb8\xb8\x94 \xdas2E\x87Nb-\xaa\x96I\xba,e\x82\x95\xd5r\x13\xd23\xdc\xb4\x86\xb1A\xe1\xbe\x9c\x9e\x00m\xe5\xb4$h8&\x11\x1anN\x86\x86\xcf\xd1\xdd\xa7$F\xc3g!G\xc3i\x08\xd2p\x83\x8e8>Q\xda\xca \xc9\xd2p2\xc24\x9c\x884\x0d\xa7$N\xc3!\xc9\xd30\x91@\x0d\xd3\xdcO<\x91!H\x90\x86\x89\x84j\x80\x93\x92\xaaa\xe2\xc8>\x05\xb9\x1aNF\xb0\x86\x13\x91\xac\x01\xe2\x89\xd6]\x19Y_9\x89\x0c>cC\xcep\x889a M\n'o\xc7{\x84 \xdcG\xa8Z\x11\xe6?\xc2\xc4\x11\x02\xa7\xe3A\xc2\xc9\xb8\x90pJ>$\x9c\x8e\x13 G\xe6E\xc2\x14n$@,\x16\x05G\xe5H\xc2\x81y\x92\x10\xef\xa4`\x82\xa3\x82\xe9\x9cI\x80\xd3\xf1&a\x9a\xa7\x84\xe8\xb0\x03\xa6r(a\n\x8f\x12\xa6p)a\x02\x9f\x12n\xc4\xa9\x84\x1bx_8.\xb7\x12\x0e\xcd\xaf\x84x8t\xb2I\x9d\x84k \x13\xf8\x960\xbd\x0d7\xe9\xff\x93q/\xe1d\xfcK\x98\xcc\xc1\x04\x98\xc0\xc3\x84\xe9\x1d3\x85XS\xcaM:\xf3\x04\xbcL8-7\x13\x8e\xc6\xcf\x84\x1b\xe8\xf8\x84lU\x84\xff\xf1\xbe\xd1`C\xd4\xd7[]\x9f3\x06\xc4F\x99Mdp{\x1b\xd85\x0ep5QPk\xec4r\"x\xf5\x14\xc0\xea\x89 \xd5\x93\x80\xa9\xc7\x83Q#\x01\xd4\x98\xe5\xd9\xb1@\xd3\xc3\xc1\xa5A\xc7\x01Q\xce\x03\xa6\x82\xa3\xa7\x81E\xa3\xfc\x16DB\xa1\x13@\xd0H\xf83\x12\xf8\x8c\x83<\xa7\x82\x9d\xf1\xfe\x0f\x8e p\x1e\x10\xda\x8cX\x9bG\x1b\xc4 \x80\xcc8\x083\xba\xc6\xd3\xfa\xf3D\x80\xe5)\xa0\xca) e$<\x19\xad\xf4i\xf9\xdei]tt\x18\xf2d\x00\xe41\xa0\xc7x]\x9e\x0cn<\x01\xd0\x18\x051\x06\x92\xae\xa1\x15/\x84V\xbd\x10\x1b7\xc4F\x0eQ\xae{\xc2\xa8\x8cK\xa5F\x16\x17oh\xc7J\x9c\x1e=ez\xf3diL\x10|< \xf0\xe6\x10`\x0c\xf8\x17e\x1f\xf1\x13\xc0\x81\xa0\xbei \xdf\xa46\xc4-\xdcG\xfb\xfa\x04`^\x14\x8c\x17 \xe0\x9dZ=\xa7\x00\xea\x02g\\\xc4\x83s4O8\x89,\x8e\xe6\x89\xf0\x06\x89t\xf6\x93Fm\\RxB\x91SL\xf0X\xa9\xe1\x13$\x87o\x93\x1e\x8e\x0d\xb4\x8f\x07%\xde\x06L\x8c\x83\x13\xa3-f\xca\xb4q Pq*\xac8\xb9-\xb1I\x84@\xff\x9f\x00^\x8c\x04\x18\xa3!\xc6\xcf\xa5\xaaS@\x8d!\xb0q\x12\xdcH\xf3L\xbfD\x17I\xf3L\xfcs\xdfj\xfc\xadfg,Y\xa6oM\xcfhM\xd6=\xaau\xb5\x1e\xd2n\xc7\xc5\xfb&\xa2\x82e\xb1\xe1\xb9H\xca\xbf\x95\x08\x8bm%\xfa`\xcc\xc7\xfa\xee(d5mu\xb2\x91\xe7XZ\xc6\xb5\xae\x15\xeb2\xf9\x85\xb6\x1dp\xc9\xc7\xb4\xec5\xdb.\xf2\xb3\xa8\xb93\xf5\xf7(:\x13\x1b\x11\xabg|\xb6\x9d\\\xda\x8f\x04\xdc\xac\xda\xb4p\x1fK\x16\x99\xb3\xd7\xae\xaa\x97\x90\xf1\xa5\x01\xbe\xd9\x9a\x1d\x08\xe3R\x10~v\xc1\x93\xe8\xfd\xa0q\x05[-/v\xc0\x99\x0d\xa7\xb7\xdb;\xa7\xcff\xbcS\xbf?\xa6\xd5\xc6\x1bV\xb7h\xb5\n9P\xe0\x0e8OE\xc2\xca\xab\x1b\x1a\xba\xb4\x0f\xfa!,d\x92\x15i'\xe8Km\xf9\xd8\x81\x92\xfd\xa3\xf7\xcc\xd3\x8e0J\xef\x82\xc9\x079\xa3Q\x96\x1a\xe6\x89F\x14\x13\xb7\x88:\x06+\xf4\xa8|\xd0\x9b1A\xfd\xd4\xf8\xb2\xc3\xf6\xdc9\xc4\xabw\x8c\xd1\xbcG\xf3\xde\xbe\xc48\x81/y\xde\x1b\xc7H}d8\xe7\xda<\xf9S]K\x9e\x8fA\xa3\x0d\xa7\xf3\xd6\xbd\xf8Z\x9b\x1a\x1c\x95\xc0\xb5\x11\x1bf\xaa\x8d\xbe\xe5\x9eyLfJu\x0d\x854\"\xc3\xe4\xcb\xdeNS\xb7\xf3\xc5\xe5\xf3\x97\x85u\x08\xe8q\xdc\xae\xf9\xbc\xdc^\xec\x8f8\xc2\xaf\xb14\xcd\xb9\xd6\xa0r[\"7\xe5\x06\xf4F\xda\xaf&6\x9b5\xdfU9\xac\xa5p\xd4\xe8\xe6= \xed \xb95!\xd7\x8d\xf5\xbf\xd2\x1c\\\xca)\x86\x1f\xcd\xc1wz\x0e\x1eT\xc3k\xef\x0dR\xb7\xff\xaet\x06\x0eiq\xbb\xb8\xca%j\n\xcc\xd4\xc7\x97\xf9\x81=T_\xf4&u\x02\xd4\xed\xe2]ps\x8d\xfb\x9e<\xd2Y\x9dj\xc2\xed\xffoURg\x80(\x0c\xa00\xa0+1~\xe8K\x08\x03\xc6\xf2\xa28\xbf\x0f\x1a\xbd\x9fLqt\n\xdd>\x16\x0d\xe7Q?)\xf3jTw\xd3JGJ\xb6\x96\xd5\xc7\xc3jD\xeb{\xad\x16\xbcQ\xc9%\x9c\xbf\xd2%\xd7\x10\xe1F_iW\xd5\xb2\xeexnB]\xca4\xd2\x1a\xff\xb4\xcd\xec\x08\x8ao\xcf\xbe\xd5\xf6Z\xebH\xa7\x07\xc8\x9d\\\xfaM\xa2C\xaa\xe9p\xbd?l\xb7\xe9X=:V\xef~\x1c\xab7\x85=7\xdf\xf2|\xdeH\x06\x05\xb6\x8d\xb4\xb9p\x17K\x91k\x03B\n#X&\xfe\xab\\{3\xe9\xd5\x8f\x88J\xc9\xe7\xac\xeemW\xc9\xe5Y`\\zN\xa1\xbfh`\xe1z\xd8\xfe\xe1\xbb\x06\x03t\xe8m\"k\xb4$\xbc\x06r\x12]\xe4\x14\xbb<\xc6\xaa\xc8\xc9Q\xd7FN\xe2WH\xfb\xd2R\xd2\xcb\x8a\xa6aJ\xe2}\xc90@U\x88\x9a\x88|\x06\x97|k\xcal\x8e\xbb{\xb2\x9c\x02\x86\xbf\xe76\xe9\xcc\xfd\x859\xf9\xdc\xcf\x15\xe1A\x10\xec\xee)\x9d\xed\xae\xc2\x82\xb7\xbe\x16\xd5\xb5!\xe5D\xd6\xbcE\xe4\xba\x84\x05\\\x9d\x1d\x1c\xeb/\x04\x0bM\xdb\xb6\xb0\xf6m\xc4\xf5\xf4Um;\xf2\x9937\xeb\xe16P\x97\xec\xb5f\xe6r\xf5\x01*\xdd\x9a\xc9\x95\xdf\xb6\xa4\xb9]&\x18\x0e\x1b\xbd\x1a\xea\x84XE]\xe0\xa6\xb67>\xa0\xa9v\xa3\xb9\x8d\x16R`\xe2\xd9m|\x83\x12S_\xb8\xb9\xfa\x93_\nx\xab\x18\xf1\xd4\xe7n\xeb\x9f\x8b\xec\xddN\xc6F:\xcc\xef\x82+\xe3|\xebW1\x85\xea9<\xa8\xb1\xb3\xca\xcf\x8e\xb8j\xef\xe4\xab\x8dtm\x9a\x9e\xcb\xbcy\x1e\x8d\x0d\xf2\xcbP\x83\x95\xed\xf3Q\xdd\xf0\x070\xb8\x1b\x08\xf7\x90j\xc4K\xaa\x9f\xdf\x9eWM:H\x7fr3\\\xea\"\x82\xe1\xaf\xd8\x17?\x96\xcd\xfd\x88\xaf{\x1e\x89\xb6V\x06\x85\\x\xc2\xc0^\xa4@\x99\x11\xca\x8ct%f\xae\xa7\xccH\xbb\xce\xbd\xb5\xac\x80\xfc\xfd=\x81\x87\x02)\x0e\x9b\x8bq\x1b\xcc\x0e\x9d\x92\xe9l[\xf3E\x0c\xa7c\xde\xe0\xf3\x94\x94\xf9\x8c\xc3\x9b\x922\x94\x94\x19/\x8b\x922\x94\x94\xa1\xa4LSB~\xdb %e\x06d\x8a]RR\x86\x922\x94\x94i\n%e()s\xb7V8\x94\x94i\xc9)Vm\x94\x94i\xd7\xf9^&e\xdcy\x94\xd3S3\x0fu79\xe3\xd69n\xa7\xe7\x01\x125\xf7\xf8\xf0I\xca\xd64$6$\x01\xca\xd6t\x85\xb25\xb5L1#\xca\xd6\xc4h\x89\xb25\xb5P\xb6\xa6%\x94\xad\xa1lM\x8fDv\xf7\x94\xce\xa6lM\x84\xa2([C\xd9\x9a\xbb\xb5\xc2\xa1lMKN\xb1j\xa3lM\xbb\xcew\"[3|\xfa\xc6Q>w\xf0\xe4\x90Tf^-{\xe6Jf\xbb\x88LQc%z\x03>\x0f\xf0OIV\xa4\xee\xbcm\xbc\xc1\xa0R\x82\x8f\xfa\xab\n\xf9_b3J\xbf)\xf3\xa1|\xd5.a\xfd\xeb\x94\\*\xe5\x14n\x8a\x92K\x94\\\x1a/\x8b\x92K\x94\\\xa2\xe4RSB~\xdb %\x97\x06d\x8a]Rr\x89\x92K\x94\\j\n%\x97(\xb9t\xb7V8\x94\\j\xc9)Vm\x94\\j\xd7\xf9N$\x97n\x9d\xed\xd92m\xac3\x8c\xc8\xe9\x94\x89\x9cN\x02\xc7zGY\xad\xf80Jj:\xd9\x05\xdf\xa9\xe6uH\xbe\xd4\xe1\x84\xcd\x05\xd3\xa6q\xe7\x1e\xa5fJ9\xc5 \xa7\xd4\x0c\xa5f\xc6\xcb\xa2\xd4\x0c\xa5f(5\xd3\x94\x90\xdfvB\xa9\x99\x01\x99b\x97\x94\x9a\xa1\xd4\x0c\xa5f\x9aB\xa9\x19J\xcd\xdc\xad\x15\x0e\xa5fZr\x8aU\x1b\xa5f\xdau\x1eM\xcdt3\x11p\xac\xdc\x8c\x93\xa1\x10\xfd`\x99\x9b\xc9\xbb\xb7\xd0\xab\x95\xd9\x9b\xc5\xae\x9cH\xcfj\xcd\x9c\xb5\xa8J\xe1T\x0d\xed\xd3\xea\xfb\xfd\x14#\x9f\xf25\x94\xaf\x19/\x8b\xf25\x94\xaf\xa1|MSB~\xdb \xe5k\x06d\x8a]R\xbe\x86\xf25\x94\xafi\n\xe5k(_s\xb7V8\x94\xafi\xc9)Vm\x94\xafi\xd7\xf9K\xc8\xd7|i\xdb\xb8\xaa\xf4\xd0\xa1\xf6oe\x87\xa0\xfd\xc0\xde\xd6\xae\x1bl\xe9*\xd3N\xb4\x99\xeb\x0e\xf82\xca@Q\x06j\xbc,\xca@Q\x06\x8a2PM \xf9m'\x94\x81\x1a\x90)vI\x19(\xca@Q\x06\xaa)\x94\x81\xa2\x0c\xd4\xddZ\xe1P\x06\xaa%\xa7X\xb5Q\x06\xaa]\xe7/!\x03u\xf3\x94\x90\xf3\x93l\x91\xf19:\xc5\x88\x04P\x99\xf5\xa9_\xf5\xfe\xd4E56\x94\x90\xca\xe5}\xd2\x9c]K\xd8\xf1\xd2\x1e\xfb\x127\x1f\xaab0\x14\xf1O\xde\xb3L\xcdH\xdc\x7f\x17\xc6|0\xb2\x8f\x1a\xaa\xe1h>\xa2\x98\xd8X\xe5\xf0\xb1\xfbQ\xa3\xf6\xf8x\x9d\xe6m\x9a\xb7\xbb\x123\x86i\xde\x0eN\xa2\xb7\x9d&y:_\xf0\xa5\xca9\xa6\xdc&O\x95\xdd\xa3\xed\xda\xa0\x88-7j/\xf4\x07_\xd8O\xf8\n\xed\x87\xee\x91S\x8c7B7\x08\xdd\x18/\x8b\xd0\x0dB7\x08\xddhJ\xc8o;!tc@\xa6\xd8\xe51VHN\x8e\xbaNr\x12\xbfZ\xda\x17B7\x08\xdd\xe8\x15B7\x08\xdd\xb8[+\x1c\xca\x92\xb4\xe4\x14\xab6\xca\x92\xb4\xeb\xdc[\xcb{\x86n\x08\xb9\xba!\xb8a]O\xd2@%\x86\xd31B\xae\x08\xbe\xe8\xfb\xfd\x14\x83:\x18\xbaG\x8d\xc5p\xb8\x1eQLl0r\xf8\xe0\xfc\xa8ay|@N\x133M\xcc]\x89\x19\xc341\x07g\xc9\xe9\xf3\xa0\xfd\xcfyg\x89\xfa\xe4O\xfc\xabHc\xa6A\x0c\xeb\xfdjf\xb1\x03\x91\xfa\x07[\x13\xa1]R\xb9\x15h\xb9\x00\xf5O\xdd\xb3Y\xb0\xa3\xc8 \xe3\x90\x9c\"9\xc5\xae|\x0dN\xd1{\x9aF\x81Gp\x8bNz\x91\xb4\x9byL\x9e\xce\x17\xbb\xb9H\x8f\xe3)y\xfa\xd3\xee\xfc\x95\xff\xf5\x9eyH\xab\x84\xb1\xd142 \xc2\xc3a\x0cp\x8d2\xdfH\xb056\x84\xbf\x1d\xd0z\x02\x985\x0c\xb2\x06 \xd6(\xad\xc6\xc3\xab\x87\x03W\x0f\x04\xad\x86\x81\xd5\xe9\x1a\x185\x98cC\xaa\x01@5\x0c\xa7F\xb57\x1eJ\x8d\xd7\xcci`\xd4S\x80\xa8\xb7\x81P\x03\x00j($\x81PX\x021\x9e\xd8I\xd8\x1f; \xe6^ \xd6\xac *\x07\x03\xf1\xc5\xc5[\xdf1\xf21p\xec\x9c\x0cL\xca\xcbt\xe5\x940\xe9d\x904\xaa\x83\xe3\xbb\xf74\xf0\xe8 \xc0\xd1i\xd0h\x9c\x82\x8e\x0f\x8b\x9e\x04\x14=2$z\n@\x94\xe0PJ04\x84\x12\x0c\xeeO_b\x82!\x94_hDMcI\x05\xa3\x0c\xcbJg\xb9\xe5\xb9\x0bEZ\x17\xa3o\x996\xb0\x12W\\B#\x14\xef\xc9:\xdc\xe3\x93\x98\xc7\xa2\xc6\xde\xfe$wI\xee\xb2+_\x83\xbb<\xc9\xf9dw\xe7\xaa\xc3A/\xec\x02\xd6\xf9\x82eL&<\xe4\x87aYd\x19\xf8\x87\xcb\xbc\x92+\xc2\xbf\xd0r\xb7\xbf\xe2/?\xb9\xc7\xfd\x03\xf7\xcc\xe1\x12\x1f\x04%\xa2\x98\xb85\xd81\xf2\x0fG\xcd=\xc4\xe7\x1dh\xaa\xa5\xa9\xb6+1c\xf8K\x98jo:\xef\xf8E@\xd3\xc1\x8c\xcc>>\xfc\x9f8\xff\xb8\xa0\xff\x05~\xc2?E\x93P)\xa70`\x9a\x84h\x12:\xa8\xbd\xd3$\xd4\x92S\x8c\xe1{9 I\xfe\xc9\x1d\x05=\x17ih\xf2\xd1`\x9fv\xc9\xec\x8a\xb4\xd2\x9am~\xe3\x9f\xf0\xec\xe5\xfbLi\xa9\x14\xd5\x95`\xaf\x0dPN\xc8\x1f\x91?\xea\xcaW\xeb\x8f0a\xa5\x87=\xd1\x05\xfe\x0ey\x83hWl]\x9aK\x97\x83a/\xdf]l\xddk\xfe\xf7{\xe6\x94\x9a*\xebJ\xd0\xd4\xc2\x86\xb6Ty\xc2\xfd\xe6\xa99\xcb2umW+\x0e%\x0f\x99\xe7\x81\xf8)\x94\xb0o\n9\xcc\x1e \xdb\xf1\x97\xed0\x87I\xcaz'\xcd\x9a\x1b\x91\xcc\xdd\x0f\xf3\xc5\xae\x0c\xe8&q\x96\xabrJ\xa7\xba\xd8\x81]\xe1]\xf1\xf2\x0f\xfd4\xe6w\xe5{\xce\xd3\xfe\xb4s\xff{_C\xc0\xb6\xba\x8f\xe6u\x0b\x99\xf2<\xdb \xb9\x9a\x8f\x06\x9d\x10km\x07\xe7;\x7f\xa8j\x88sl\x8b\xff\\\xfd\xd20\xa0\x87\x1aD\xc9\x9c\x14\x0ds\x1b\xa389\xc3C\x8eN\xcb:\xe1\xd7\x0f\xef\xde\xc3\x9a]qG\xd0\xac\xbe\x97\x8d\x10|\xb1\x88y \x13\x13\xa5\xcbx%\xe1\xe0@\xb0\xbdTN\xdd\x10\x07\xdf#\xcf\x0c\xb9V\x89\xda,\xca\x9c\x8aZ\x8e\xa9e\xc56\x1b\xd0k\x96s\xf8\x0e\x1a4 Sh\xf8\xcez'\x912\xa3\xf2\x92\xcbvg\x18\xc0F\x98\x8c\x074Vh\xcf\xafm\x10\x9c:\x9eI\x9f9~t\x82\xb6\xd5\xf3\xab5\xb01\xfdU\xa4_O\xc0+d\x93\xf7\x8b\xbf\x0e\xbc\xfd\xd9I\xe2e\x05h\x0eW<\xb7\x81\x88U\x8d5:\xeb=\x9c\xd51\xc9Vc\xe9&+\x8b\x9c3w\xee\xb7+|\xf6\xcd\xb8\xee~S\x86?sY\xcbe!\x137Vl\x9b\xbc\x87\xf1\xc1\x9c]\x8a_1\x91\xe1u\xa9~P\xab\xe5R$\x82e\x11\xb3\xc4\xa2XB\xce\xad\xef\xe7\xee\xbc\x11a\xca\x0fT\xd9\xafz\x84-\xf8JHi\x1bq-\xcc:\xe0\xcaw[>s\xd6\xcd\xb6B\xcf\x12\xb5 \xf9\xc2w8\xee4(\xb3vC\\v} <\xf2\x87\xdf\xf0\xcd\xd6\xec\xfc@\xfd\x066b\xb56\xc1\xfb?\xb0A\xb8\xeb\xa4\xda\x16\xe2\xd3%\xe5\x191\x9ao\x984\"\x19IX\x1eqq\xd9'\xad\xd8\xe2W\xeb9\x16\x1c\x98\xcb\xb06\xe2\x81\xbd)\xdf\xcf\x97l\xa1\xaex\xd9>o\xb7\xb7M\xa1}|!w\x1f\xcb\xc8\x01\xf7\xdb\xb0|!LnG\xdfH\x8dJ\xd7\xcc2\xe5\xed\x07\xd8p\x7fYG\x89>\xde\xd5j1\x1a\x0dU\x01\xce\x88}]\x94\xd6\x9e\x89\x05V\xd5\xbbv\x0d\xba\xd8nU\x8e\x13\xe3\x96%\x97O\ni\xff\xc7N\x87\xae\xb3u9\xac\xc6\xe3\x01\xb5\x84\xc28\xafS\x8eW\x0d.\x05.\xdc\xe0\x85\x15\x97v\xfd\x8b\x15\xb6\xab\x98\xeapB\xfb-\xd75\xc3\xe5\xbf\xfe\xc4\xac\xd5\xc2\xd3gpa\xebg\x07\xab\xaf*\xab\x94+$\xbc\xfc\xee\xbb\xd08\xfbY)X*\x05\xcfa6\x9b\xfd\x8f\xd1Gm\xcd\x98\xdc\x8d?\xc4\xe4nf\xeb\xf4s\xae6\x8f\x96J}3\xfe\xf8l6>%\x89%<\xb2E~\xc0\xd6\xbdW\x8f\xfe\xc5\x96\xf9\x0d\xfc\x19\xf0\xb0\xa1r\xff\x19V\xee\x0f\x01\xe5\xfe\x07\xbbb\x87\xd7.<\xc7\xe0\xcb~\xee\x80\xea\x13\xfa\xd1\xcfJ\xcd\x92\x8ci\x1d\xa1=We\xfb\xa2kx\xe3\xe5\xf1\xfa\x8c\xa8\xb5\xd2\xeb\x8f\x01\xbd^\xec\xccZ\xc9@D\xe5j\xf8\xb3R\x8ff\xb3\xd97!\x8btJ}\x14|\x0e-\x17\xd5~[\xad\xdb\xc2\xce\x9d\xd2_\xbd~\xf7\xf2\xed\xf9\xc5\xfb\xdf\xdf~36W\x80\xaf\x82\xb3\xf4p%\\5\xc2\xea\xfek@\xdd\xbf\xa8@\xdcfU\xfd\xec9\xfc\xcbv1\xfbY\xa9?g\xb3\xd9?\xc7_`rwf\xc3M\xfb\xd6\xd6\xc5L\xbf\xb2\\\xafYf;!\xdc\xb0\x90z\xbb5\nTG,;\x95\xf9 7uu\xb0\xb28\xd0\xf0\xa9\xff\xf6\x1c\xa4\xc8\x82\x03$\\\xc7\x91\x91`W\x9b\xd8\x0f\xa5\xe7/W\x16x\n^wn\xba\x16Y\xd6<\xc4\xaf\xd0#\xa1\xcd\xc3\x9eH\xeb\x89]D\xcf\xf0\x07\x1b\xa5>\xb4\x8b\xa0j\xfe\xb4sky\x92\x9d\xb3\x8e\xe1\xc2\xab\x89Jf\xbbr\x11\xb8\xb7B\xaf\xa2a\x7f\xac\xac)\x93\x02\x0f\x9f<\x1c.\xda\xcf\xaae\x95\xdc\x92\x93{\x0b~\xb0Tj\xb6`96\xe6\xd3\x93\xdd\xec\xbf\x1e8\xad\xb8\x85\xd3\xf8:\x11\xab\xf2\xc0\xbec}\xf5\xe0c\xff\xf1\xee\xf7\xdf\x86\x7f}\xfe\xfc\xf9\xf3\xf1\xfe\xb4\xef\xd7\x89\x8d\x12\x17\xb4\x01\x91\x0b\x91\xdc\x1a\xad\xd0\xbc\xcc}\xae\x8a\x8c\x8d\x9c\xf4\xb8_\x14b\xab\xbc\x0et\xce\x80o\x16_\x85\x87\xea\xce\xb1k\x9f\xc3\xd3\xf1/T/Y+,\xdf\xf9\xe1\xe6\xd3\x18@\xb0\x96\x0fP\xa9\x0f\x9e\xc1\x83\xbe\xe1\xd8V\xcf\xcc\xb5\xfc\xc1Y\xa8Ll\xf3olc\xcb\xfd\x9f\xaeI\xff\x16|\xc9\xb6\xb9\xf3\xceM\x1b~\xbe\xf4\x8b\xad\xb6\xd193\x11\x1a\xaey\x96=\xbe\x94\xea\xda\xed\xdc_3\xe4\x91\xb8M\xf6\xe3\xa3\xabm\xebg.\xd6\xef\x0c\x00\xe7\x05\x1b\x9f\xb7\x96,W\xc0\x9c\x1d\x0f\x17\xfe\x11G^i\xe0k\x95\xa5\xad\xed\xff8n\x85\xac\x06Fy(\xb4\x1f\x17\xc3\xe5\xe2g\xab\xa1\x01\x8f\xac\xc3*U\xb2\x97\xc8)s\x8d\x7f\xff\xcf\xbf\x7f\x13\x1aE\x872\xae\xf6\x97\xc3\xf6\x85z\xb2\xc5>\x9d\xfd\xf0\xf4\x07\xfd `'\xee\x7f'\xe2\x8c\x13wa\xa2\x17\xc2\xd3 5\xc7\xb4d\x05VU\xd0k/\x9a\xf8\xab\x90\xe6k\xdd\x99\xd9j\x86{\xb0:m\x03)5\x95\xea\xda\x87\xbc\xf4\x873\xa3\x95\x84`E\xad\xd8>\x0b\xf1\xdd\xa2\xf2$\xad\x96\xd5\xa5V\xbc#\xfc\x0f\xdf&<\xf3\xd7(|l(P\xb3+p-\xf4<\x0e\x96\x85\x1bUs\xe8\x1b\xfbP\xeb2G\x02\x1e\xf7\x07\xc6\xe3\xef\x83\x1bl\xb0\xb4\n\x1c:\xe8\xe5\n\xdd\xb2Q\x85\xbe\xba\x8d\xbf\xf2\xd9j\x06\x8fR\xb6;\x83k\xce/\xbf\x19\xaaj\xce\xd3\x02\xf3\x1fsw\x04\xf2\\H\xa7\x8c\xdb\xaa\xb9\x01X\x1ed\xdb\xd9pE\xb1W\xeaS\x9e\xfd\x1f\x85\x01\xc3.\xf9(\x9f\xcf(W,\xf71\x1f\x9e\xf0\x1d\xd6\xd4\x92%f\x08\x02\x86X\xfd\xdc\xa4\xe5\xee\xc35>\xef\xff\x0e\x9b\"3b\x9b\xd9~7\n\xf8'\x9e\x14&f+\x10\x97x\x127g\xd6\xd4\xdd \xd8\xd6\x91/v#\xda\x1e\xccH\n\xdb\xe0E\xe1^\xca\xd5V\xe5f|\xb4\xc6k`\xa8\xec\x96\xe3l>\x04\xcd\x87J7*\xa4\x19\x07c\xd1C\xcd\xe0\\\xfa\xa4\xf6\xb5\xcaS}V}\xc4E(\xdaZ\x95\x0dS\xac\x87\xc6\xa8\xc7\x9fh?\xe5#\xda\x85`\xea\x1a6\xc5\xb0\x1b\x89p\xef\x10\xe5\xe2\x01\x83lD4\xc63\x1cQ\x96\x0b\x93\xfa\x0e\xeao\xb7\xe7\xb9\xaa\x87\xda\x1d\xd4\x9c9J\xbe3bB\x81,\x08\"a\x89cM\xea\xea\x8b\x811me\xabT6\xaf\x8f\xec\xff,\n\xea\xd4\xe1\xa6\x8a\n\xa9\xc8ak-E\xd9/7.,\x18ST\xca\xafxfM\xcd_&\xf8yT\xb5W\x8bS)\xcb\xa8\xfa\xdb\xd5m\x10A\xce\xbc\x8dD7\x9bB\n\xb3\x9b[]\x7f\x16\x9d\xb5\xabpB\x85\xb9P\xcf\x7f\x1cmmHS\xd7\\\xac\xd6\x06\x0fE\xef\xf4oucH0\"9\xc8\x99#\x01g\x1b\xebn\x01\x82\xf7\x9b8\x89\xeer\xa7\xa1\x03\x157\xc5~\xfe\xe6\xbb\xa6\xbc0\xa5Z\xf9;<\xd1\xff\xd5\x9f\x10\xe8j Lk\xb1\x92\xce\x08\x84 `\x05\xef\xd7\xbc|Oh\x87\xfc\xe2`3<\xdf\x08\xc9\x07\xec\xd4-<\xc3\x13.\x94W\xd98\xfb\xf4\xe6\xed\x8d38~\xe3\x15\x15c\xc1\xd0\xbdlFU\xd1C\xf5\xd6X[J\xb7\x83\xcav\x1f\xd4\x95\xae\x11\x15\xc5X\xael\x15jv\x89\xdb\x1b\xfc\xc9\x8b8\x94\xed3\xa3\xd1a\xd5\xd1X5[\xeb\x1e\x9e\xea\xb7\xa3Q\xce@\xc46\xdbw\xdf\xdf\x967\xf1<\xd4\xde\xd4\x86z\xc3g\x17*\xb5\xb6>\x82{N\\\x8c\x1a\xf2\x13\x07Y\xb9\xc4\xecJ\x8a\xad\xb0\xdb0\xe3\x17q\xd6\xf4\xcb\xe7xYD\x84Q\xec=\xd12]L\xfc\xb8\x9cK\x14\xcf\xd7\xb3z}\xc2\x87\xc8\xbc{Bd\xde\x1e\x89\x99\x1b\x0d\x91y\x89\xccKd^\"\xf36\x84\xc8\xbcD\xe6%2/\x91y\x89\xccKd^\"\xf3\xa2\x10\x99\x97\xc8\xbcD\xe6\x8d\xd3:\x91y\x89\xcc;\xf4\x13\x91y\xf7\x84\xc8\xbc\x1d!2o\xaf\x10\x99\x97\xc8\xbcD\xe6\x8d2\xae;B\xe6\xdd*\x95=\xae\xd9\x1c\x15\xaf\x17\x01\xa5\xb9\x90K\xe5\xde\xef\xe3\xf6\xbe\xb2\xcf\x9c\xcb\xa5j\xd1{m\x89\x0f5l\x98I\xd6\xd6\x04V\xac\xb0\x91L\xea\x18L\x1e\x82\xec%\xf9V\xe5\xf9\x1f\xef\x19\xc7\xb7\xab\xd2\xae\x8c\x16\x0d\xc1\xe2\x01qk\xc3\xb2y\x08\xf7\x8fH{\xe4\x05\xf1O\x86\xe7\x925h\x8es\x1c\xe1#\xbbM^\xfbW\xce\xcb7~\xc1\x17\xaa\xf9\xa9,\xb2\xe6/:\xa7\xd1?\x1f\x0d\x94\xe6\x1f\xbdo\xb3\x133=\x05\xc2\x1d\xb1\xf4\xd3\x1eY\xed\x99:\"\xadO\x9f\x16\x7f\x14\x1c\xce_\xe1\xa2\x11\xd0\x0e\x86\xeb\xaa\xe7[\x9eo\xb9)X\xc4\xc8\\(\x95q&G\x9e\x8bM\xf6C\xe7\xdb\xee\xdc\xe7e\xc6V6j\xd6ku\x0db \xc2<\xb4\x7f\xae\x9fB\xc4W>\xae\xff\x80#b<\x08\xfem\xff\x05\xdd\xe4 \x995\x17y\xc9\xa2\xe3\x7fx\x8c\xbc:\x8f\xf0z-\xb2\x08\x8c\xdaG\x8eUR\xdf\x1f\xc3\xec\xf6\x17\xcc\xec\x9at\xb0\x02\x08\xba7*1\xfe!f\x80\x81\x16r\x95\xf9#{\xdd)\xba\xd9n\xb0Ml\xc5\x84\x04%\xfdF\x90\xb2\xa6\xe3\x9f\xc9\xf9Rd\x19O\xcf\xe0\xdc\x0e\xf4\xb4<~Zs\x0fu\xd5tn\\c\xad\xb8\xa9\xde\x81\x94\x89l7\xc2:\xac*:7\x03\xf1\xa5\x93\x18\x16Z\xa78\\>\xe2\x81\xc9u[+:s\xde\xd8G\x81@t\x90\xba)\x90\xd4\xe8N(N\xe1J0w\x8etu\xca\xb4\xcaa\xb1\xc3~\xd0\x86m\xb6\xc1\x11t\xb0\xf8\x11\x8fx\xc5\x93\x90\xe7X\xf2\xe8\xc3\x95&\xdf\xa8\xe4\x12'\xb5\xf7~\xa5\xcd*\xe8\x0b\xdb\x85\x05\x9e\x81\xbb\x0d\xa1:Z\xfb\x1f\xfe\x0f\xef\xc7O2\x87x\xef\x06x\xdez1z\x06\xbd\x93\xc7\xf0\xd3\xae\xacH\xd4\xc3\x11\x95\xb4\x0f\xfe\xa6l\x8b\"\x1e\xfci\xf7K\xae\x8a\xb1\x9e\x85FT\x1c_\xdb)\x9e\xd2J\xbb\xeb\x9a$w\xd3\x00/\xeb^t\xc32\x19\xcb\xe0\x95\xc2\x05\x02\xe3\x0b\x8e\xb9\xe1\x86i;\xe2fy0xY\xfex\xb6:x\xb7\x00L3\x13o\xb9\xee\xe6\x80\x069\x1b[\x8e\xb7\xb7\xb7\xaem\xbf\xe68\xcc3\xa5\x90\x14a\x94SI\xa0\x03c\x0e\xaf\x87i\xf5\x9e\xda\xbf\xcd\x83\xecK\x92\xb8\xebH\xbc\xb1\xc3y\xddL\xc9\x15\xcf\xeb>B.\x03\x82\xd6%\x14\x1f\xee\xed\xf2\xe5Y\xfdI\x97\xbfE\x02\x91TH\x05\x90\"\xb3nT\xee\x19\x95\xf3\x1b\xe1\xaf|l\xfb\x90\x8f\xe3FS9\xd0\x03v\xc0\x94K\x18\xe0\x06\x1d\xf6\xbe\xacs\xd5c\x8b\xb2\xaf\xfc\x0d\x01\xb0@\x0eQ\xbb\x83j\xfd\x87\x95X\x7fbr\x0f\x95\x1d`\x8b\xf8\x18\xf1)t-\xe5\xfd!\xde\xdaL\xb3\x855/\xc8V\xa0b\xba\x0c\xdf\x83\x00\x13u\x8a5x\xa9\xa4O\x9e\xe2\xe4\xa4M^$\x0d\xca\xd0\x1f\xedZ\x16[%!\x15\xcb%\xc7\xc3\xa4\x93\xf2e\x1dhp\xc7\xf0\x11\xb4j\xabZCR\xb27K>\xe1\x19\xa4|\xcb\xdd5\x101$\xb5\x96\xc3\x1eVR\xa2\xc4\xd86\xd2\xf0\x92\xc6I0\x7f\x15\x1d\x81\xc4\xc7 \x91\xce~\xd2\xa8u;9\x0eX\xe4\x14\x13\x04x\xa9\x84\xac&W\xe6'\x18\xbf\xf9\xa75\xcfX\x9ba\xd2W7D\xdd\x00\xf8\xed\xf7\xf7\xaf\x9f!\xba\xe7\xb7\xaa8\xcb\x13\xc8s:\x97\xc6c\n\xd5\xb0j\x01\x0b\x0e,\x0d}B\x8b\x95\xc4\xbbMtu\xb4\xbf\xf5H+\xb5R\x98\xc2\x1f\x1b\xa7q\x816\x9aj\xb9\xcct\x1b\x94|k\xd4\xd2\xff\x88A\x07\x922\x17\x9c\xcbr1\x14\xb1J{\xc9dkc\x88\xdb\xf3\xed\x8fRp\xbb\x8a\x07\xdfw{M>\xdf\xdd=\xf5\xf7\xab\xd3 \x9a\xbb\xb5\xeb(j\xb0(Yl\xfc\x06\xf4\xf9\x96\x89t\xae\xae\xc6\x8eU\x98\xdc\x96\xd8$B\xa0\xff\xfbjY\xb6\xb8>\xa1\xc0\x19\x86?\xa7\xa0\xa5\x08\x0f\xbc\x8d\x1bB\xa2\xec\x18\xb0\xb3\xa7-~\xf0Q\xb7\xd2\x0c\x1e\xe6\xf0\xb9T\xd5\xaa\xde\xbe\x8e\xfa\xb4\xb3f\xda\x0d\x9a\x86\x06\x02\xc1;\xcbr\xce\xd2\xe1i\xa1\xb1\xd8\x9d\xd3<\xd3\x12\x9ag>\xe3<\xb3g\x97\xb8f\xeb\x9dA\x9a\xf9\x9aqs\x8f\xed\x80_\xcaL\x1d\x93\xdeH\xdd7\xf1\xa6*\x07\xfc\xd6\x1f\xd5\xb0s\xe1\xa0\xdb\xcb*\xb6\x02\x95v\xbd\x1ea\xbaif\x84^\xee \xe19n\x82j\x84\xa5\xf0\xb2\x8a\xa2}\x1e\xb0d \xd7\x0f\x01\xcbU\xe1hT\xc3\xdfh]s\xe6\xfa\x94\xc1J\\\x95\xcba\xdb>\x1b#s\xda\xd2X\n!w=\x12\xe3\x82\xcd\x17\x8c\xdc=\x08Cw8\x10\x1f\x8bT?\xf9\xd3\x1dT2z{-z\x8fs\xeb\x10\xd8%\xafI$ \xdc2\xb2I.\x19`\x95\x94C\xb7\x8cg[0^Y\xbc\xff\xed\x9e\xe1v%\xe9A\xcf\xedT7\x1f\xcf\xba\xdd\x05\xd3\x8faiL4\xda@\x80\x19\x93\x89\x8c\xfa\xa2\xafz\x05Goyn\xff9\xe8\xa5\x9c\xf4\x16M\x13\x07M\x1c]\x89\x19=_\xc2\xc41v\x8d\xa2\x9f\x0e\x1a\x05\xde\xb5k\x14\x87\xe6\xb4\xf2O\xe2\xbfx\x8a\xa7\"\x8d\xf0P\xce\x1b\xcf^\xd8G\xabI\xacN\xf96\xcbC\xb5\xf4N^{%\xf9\x87\xee\xd9,6\xa4\xdc\xae\xdc\x85!\xe8M\xf8\x80c'0\x7f\xd9E\x07[d<0\xb9;\x89\xfa\xf4\xf1\xe7`\x9a\xdfh~\xebJ\xcc\xe0\xfa\x12\xe6\xb7\x9b\xcf!{#yd\x0ey\xe3\x9f-\x81\xb5z\x0ei\xd1e4\xa6+\xd0e\xf6\x92\x18\xed\xa4\xb1W\x94\x7f\xf0\x9eM\"C\xda\xed\xca\x01\xec\x9c\xa2\xf9\xa6\x90\xb7\xeb\x11\xf2v\x13\xef\x06\xe8\x1c,\xeb\x8f\xba\x1ftj\x15+[\x7f\xad\x17\x03\x04\x8d0l\x82\xeel\xcb\xc3\x1f\xe6\x1f<\xe4\xb0\xfch\xeb\xac\xff\x12\xa0i\x1e\xf9_y\xcd\xd6a\x9c\x8b]\x88,R^,\xe1\xefB@\x93i\x18\xa9\xff;\xa4\x8ak\xf9\xff\xfd?\xff\xaf\x01\x96\x18\xc7S\xc6\xe3\xf1\xcb\xef\x8f}B\x18\xcd\xb3\xe5\x19,\n\x039C\xbe\x9f;^\xa8\x07\xb0n\xa3\xf9\x98\xc6t\x8f\x8d}\xc0\x81YiKa\x84=x\xa1I\xa7G\xc2#\xfe\xcb\x9et\x1a\xd8\x83.\xb6<_f\x85H\xab \x87%\x89*\xf0\x10\xea\x8c\xaf\x18\"\xa1\xd9|\xab\xb4\x03\x01\x9f\xfc\xe9\xff\xae\xf2\xb9?\xb0v\x0c\x95x\xeb\xa7%\x96en\xd7G\xa1y\xfeP\xe3\x89\n\x903\xb9\xe2\xf0\xf2\x0dT\xa5\xbb\x81\xcdr\x0eu\xc5\xdc\xd1\xffi\xef\x14\xf6A\xf3\xfc\xa5B\x7f\x84\xe7\x0c\xbd\xab\xde\xba(\x8b|U6\xc3\xbf\x7f\xcf\xa66\xec\x1b\x95\xcd\xad^\xab^\x9a\x8f\xee<\xbd\x0b\xc3\x07\xcf\xf3j\x1a\xd1\xadG@\xd5\xf6c&d\xba\x82\x9b\x1dN\xf9A\xbd\x93f\xcd\x8dH\xe6\xf6\xd3\xe1\xef\x06\xc9.1\x9de\xa5\x90)\xcf\xb3\x9d\x90\xabyD\xa3!\xbe\xe1\x10\xdfx'\xf1!\x92\x93\x0fU\xcd1\x1b\x00\xe7\xaf\xea\x0di\xd5/6f\xbart\xe5\x87\x1a\x84?\x07\x10O\x8f-5\x1e\xa2\x9f8k(\xb63\xeb1\xca\x97\\\x9a\xe1\xd7\x0f\xef\xde;\xea\x08\x93\xcd\xaf\x867-`A\xa1\xc8\xd2\xc9\x04}OU\xe1;[\x8bW\xcdH\xb3n`\xfb\xca\x10\x06\x89\xda,\xea\x104\xac\xb4\x15\xdbl@\xaf\xad\xcf\xff\x0e\x16\xca\xd1\x98\xb5a\xa6\xd0\xf0]\xed'\xc2G\xc6\x03n\xddI\x83tK\x98\xa6\xab)\xb4K+q4<(\x8fg\xc4\xbdk\xb2jw\xcbn\x8a\xadv\x87\x04\xf9={=\xbfZ\x13\x0d\xeb\xd8\x1f\x9e\xaa\xf1\xdcY\xa3\xa0\x90xX\xac?L\x10\x7f\x1d-#&e\x0e\xd3\xd4:\xd5\x04\x9b\xbbPp]\xd0\xe4\x19\xb1\xee\x80\xc33JM\x91\x07\x8fk\xad\xeed\xda*\xe1\xe8\xc2ug\xacY\xb5a\xe2P[ \xde\x95\xd5DO$4$9g\xb8\xc2\xba\x129\xee\xc2t=\xebw\nJ~]\xb3\xa6\xa6\x0c,\x95\x8b\x15\xde?\xe0\xdef2mhH\x17\xcb\xa5\xf84\x83\x17\xae\xe5\xe5.\xaa\xaeu\xf9\xba\x05\xa9\x9e2\x05\x1b\x12\x1a<\xd6\x86%I\xb1)2WK$\xae\xa1W\xc8\xb4]w\xdav\x16\xdb\xd4\xdd\x81\x83\x9bC\xfd\x06\xc6\x1c\xb4H\xf9\xd9\xf8\x87\xcc\x9a\xef\xf0\x1ce\xb7\x9d\x84iX\xe6\x9cg\xf8\xaf\x86\xfb.\xb6#\xfb;],h\xa3\x840\xcd\xf2\xc0\x13\xe8a}x\xb8\xfa\x10_\xdc\x14\x0b>\x0e?\xf4\xe8\xec\xd0\x9bsC\xed\xd3W,\xe3\xd2\xcc\xddB\x84L\xa7!d:\x8arI^(\x97\xd4#1c\xfc`\xb9\xa4i\xe3\x91\xae\xe6\x18\xfd\x82\xa1\xab9\xe8j\x8e\xf1o\xd0\xd5\x1c@Ws\xd0\xd5\x1ct5\x07]\xcdAWs\xd0\xd5\x1ct5G%\xa1r\xe9j\x8e1\xa1\xab9n\xabu\xba\x9a\x83\xae\xe6\x18\xfa\x89\xae\xe6\xd8\x13\xba\x9a\xa3#t5G\xaf\xf8|\x15]\xcd\x81M\xa2\xab9\xe8j\x8e\xcf{5\xc7\xd8&\xd9=\x9eb\xa3\xc4#l\x97\xbd\x1d\xd9\xb2\x90%6-W7\xe0[N%E~h|\xee/e\xfb\x89\x17\xf9\xf9\xa1 \xe2Ev$\xf2\x83\xc4\x8b\x8c\xce\x99\x95B\xbc\xc8=\x99\xaaB\xe2E\x12/\xd2\x10/\xb2_\xa6\xb4\x84x\x91\xc4\x8b\x1c\x93\xe8\x01\x14\xae>\xc4\x177\xc5\x82\xef=\xb9\xad+\xc4\x8b$\xd3\x894\x1d\xe2E\x12/\xb2+1c\xdc\x10/\x92x\x91\xc4\x8b$^dC\x88\x17I\xbcH\xe2E\x12/\x92x\x91\xc4\x8b$^$\n\xf1\"\x89\x17I\xbc\xc88\xad\x13/\x92x\x91C?\x11/rO\x88\x17\xd9\x11\xe2E\xf6\n\xf1\"\x89\x17I\xbc\xc8(\xe3\"^d\xf7\xe4\xe3>Zd\x96\xcd\x99\xd6\xdc\xf8WCGK\xe6|%\xb4\xe19O\x9b\x07G\xba\x12\xca\x80\xa0\xc5\x91|\x91e/\xf0W\xff\xe3=c?6u\xd7\x15s\x07\x90\x9d r\x1b\x95\xa1\xc1V\xce\xf1\xd1\xb1\xa2\xa2\x88Gh\x0d\xef\xd1g\xcaT$\xccp\x0d\xd7k\xee\xb3\\|\xcf\xac\x1c\xa9\xcb\xf3+\x1cd\xabr\x1bWd\xdbq?\x82\x94\xae\xdb\xb6\x1c\x80\xcb\"\x00}?\x86\x9a\xf8[\xb5\xee7\xac\xf0\xf4\xf7\xde\\\xbc\x0b\xd4{\xe0\xc5\x16\x119PD\x89\x13O\xae\xb8\xef\xe2\xcek\xe5\xc5\x99Hcb\x02\x13n{\xdd\x88\xd3\xa4\xe3\xeaH\xb5\xc1\xe7\xfe\xd2\xad\xcf\xa0\x0f \xdc\x9ap\xeb\x1e1\x84[\x13nM\xb85\xe1\xd6\x0d!\xdc\x9apk\xc2\xad \xb7&\xdc\x9apk\xc2\xadQ\x08\xb7&\xdc\x9ap\xeb8\xad\x13nM\xb8\xf5\xd0O\x84[\xef \xe1\xd6\x1d!\xdc\xbaW\x08\xb7&\xdc\x9ap\xeb(\xe3: n}c\xb0XH\xc3\xf3\x0dO\x05\xcbws\x7f\xa8N$v\xdc\x80\x84\x9a\xa5@Y\xca\x10~|\xdex\xf8\x85\x7f\xd6?z\xdf\xd0\xe4\x96>\xbbb\xee\x00\xe2r\x18<\xf9\x8ae\xc8\x89\xb8uA+V\xac\xf8I\xcf\xbf\xb9\xfdiA[\xb6\xf2\xfb\x8c\xc7\xba\xf9V\xf7$K\xfe\xc9\xcc/\xf9n\x1c9\x0b*%*\xbd\xe5!\xe1\x7f\x8cAfe}\xca\xb33\xec?}>\x97i\xed\xb2\xd4\x17l\xc5\xdf\xf2?\n\xae\xcd\xcc\xfd>R\xa0;\x81\xc1\x16e\x8b\xb6*\xe5\xb0Q\xda\x00\xc7\xac)\xa6T\x87\x06\x822l\x040\x9c\xa4\x98\x80\xad\xc4\x10\"\xb0:\xa8\x17\xfc\x87,6\x0b\x97\xf9+\x13\xf5\x8d\xc4\xf0\xb2\xa5$w\x9e\x19\xbe661]3\xb1\x0c\x0b1y\xea\x06\x8d+\xd8jy\xb1\x03\xce\x925\xb0\xed\xf6\xce\xe9\xb3\x89\xc2\xd7\xef\x8fi\xb5\xf1\x06\xd47\xa2\x98\xbc\xe0`\xffQ\x9e\x8aP\xc1 \xa5.q\xa3\xbd\x1b\xc2B&Y\x91v\xc2E\xe6J\xaep\xa5N\x7f!\x02\xd9H\xacZO_\xb7\xc3\xf6\xdb\x87s\xdd\xe9\xabNU1b\xce\xb9\xf6\xc83\x0e\xadz,\xda\xe16\xf3#I\xac\xa4\xca\x1b\xa3\xaf]\xack\xf51\xbar\xa1T\xc6\x99\x1c\xeb\xb0\x9c_\xf1\xbcU\xdcXg\xf9\xa7\xbb\x1d%\x1a\xfc\x8c\x9c\x0f\x8c\x01[.w\xc4\x05\x95\xa7<\xeffY\xde \x99\xf0g\x90(\xbdQ\xfa\xb1N/\xe1\xfb\xd9_\x7f<\xbaVnL\xfd\xab\xff<\xaf\xef1\x19\xe1\xfe5\xe6\xc4\x92\x06X\x1b\xa6\xbf+A-a\xc33\x95\xee\x1a\xec\xc0l\x07\xee\xa2\x8bY\xe3\xfd\x9a\\R\xdd\xd4\xe04-\x95\xe1\xbd\xcc\xc1\xf7\xf6;\xf5I\x15\xaf\xea*\xfb\xa7\xef\x19y\x10\xf5\xba\xdf3{\x8f\xf5\xf9<\xa2\x9c\x10\xe5\xa4+D9!\xca QNZB\x94\x13\xa2\x9c\xf4\nQN\xbaB\x94\x13\xa2\x9c\x10\xe5\x84('D9!\xca QN\x88r\xe2$B\xebD9!\xca\xc9\xd0OD9\xd9\x13\xa2\x9ct\x84('\xbdB\x94\x13\xa2\x9c\x10\xe5$\xca\xb8NB9\xb9\x19\n\x87\xe7\xf0o\x8a\xcc\x88m&x>\x8c\xbd5\x017\x0f\xb0\xd5\xf7\xc8C]\x82[\xce\xfbI\x04\x89%9O\xec#|\xab\x92u\xff\x89\x1c\xb6\x12\xbfV%\xf8G\xee\x19\x98\xe6t6o\xdc\xbd\xdf\xd5zWF?\x06\xc1\x0fZA\x9d\xcf\x1dd?\x8e\xb9\x04S#\x0dTj\xf0\x80\x82\xc0Y\x1eQ\xdf\xf1G\x1c\xec\x9d\xf6\x8fe\x9f\x95L\x9c7\x17\xf5\xcd\x0d\xcd\x9b\x1c\x06\x8a\x0d\xa9\x1abj\x17\x97\x88\xb1\x11\xc8\xaf\xd8\xd7\x8f_W}\xfd\xb8\xb6nx\xcb\x13\x95\xbb\x0c\x1ev\x0f\xd8`e\xc9s]\xfa;?\xba\xaeUn\xd6p=\x18O\x99\x9c3c\xa3\x9a7\x17\xeef\n\x1bL\xae\xd9\x95\x90+\x17\xb3\xb1,\xb3\xc1\x8a\xff\xc8\x0c^_qi\x1c\x84\x81\xe9K\xfb\x7fv@\xa4\xc3\xb8U\xcd\x98\xf1\x81\xea{\xb1\xe1\x8f\xaf\xb9X\xad\x0dO\x1f\xb3+\x9e\xb3\x15\x7f\xecj\xfcx\xc1\x12\xcc\xa4.\xcbd\xa04\"\xe7\x90z\xbf7\xf4\x91\xba\x8e\x8f\x9f\xce\xe0\x11\xe6\x8e\x17;\xc8\x94+\xedz\xcd\xccCL\xf6\xd88\xb7\xa96\xd6\xcey\xc36\x17j0\x8e\xc3\x974\xe4\xfc\x9a\xe5\xa9\xfe\xa6DT\xb0@\xa9\xae\xcf*\x9dH\xe5H2\xef\xff\xf6\xe2\x02\x16\x85\x01!\xb5\xe1\xcc\xc5\xe5z\xab\x06\xa1\xb2m.\x12\x0e\x9eb\xb3P\x85LY\xbe\x9b\xc1\xcf*\x87T,\x97\xf4\x13\xc1\xec{B0{G\x08f\xef\x15\x82\xd9 f'\x98=\xca\xb8N\x02\xb3\x8f\x9d\xec\x80\x18e\xa3\x94Cm\xb7m-\xa7o\x81\xf3ci\xf8j\xe4\xee\xda\xde;\xd7\xcf\xaa\xdb\xf5\xc5\x12\x84y\xd8\xb8M\xdf=T\xdd\xa6_\xb5l\xcd\xf2\xfe-\xb5\xd5%\xf1\xfe\xc7{\x06\xfaw\xd5\xde\x95`\xb6\x84\xcbb\x10P\xef\xbd\xb4\x7f\xf4\xb2\xfd\xde7\xde\\\x8c]\xee\xdf\xfb\xcaK%\x13.\x0d.\xe6\x87_.\xb1\xc9\x89\xd5\x0c\xddq\xd0SZu\xc4\x81\xaeL\x13S$]\xeb\x15z\xc8\x11\xb1\x16\x8b\xe0\x0c\xb2\xad\xc7\xd4mD\x03[\xa52\xcc\xe3&\x8d\x86w\x1f\xa8J&L\x960\xd9\xae\x10&K\x98,a\xb2-!L\x960\xd9^!L\xb6+\x84\xc9\x12&K\x98,a\xb2\x84\xc9\x12&K\x98,a\xb2N\"\xb4N\x98,a\xb2C?\x11&\xbb'\x84\xc9v\x840\xd9^!L\x960Y\xc2d\xa3\x8c\xeb\xeb\xc6d\x1f\x8c\x82\xb2\x89\x92\x12A\xa0\xb9\x90\x86\xe7\x1b\x9e\n\x96\xef\xe6\xfe\xce\xfe'\x7ff*\xb9\x9c\x8b\xf4\x9f\x0f\x861\xdb\x12\xa8m\x16P^\xfa\x0fU\xf9\x98\xc7j\xc2a\xee4d\xdcbi'uQ&\xa0Z\xd8\xec\xcb\xf2\xf5\xf3F\xe1/\\\xd9\xfe\xf9\xfb\x06\xd7\xba\xc6\x8dAD\xb7\xda\x8e}\xfb\xfd\xd1W,\x9b\xb34\xbd\xcd6f\x80\x15+V|.\xd2[\x15\x12yg\xbd\xad,\xd7\x01\xd4\x8bN\x8fn\x0bA\xa8=\x12\x1e^\x04\xa1\x12\x84J\x10*A\xa8m!\x08\x95 T\x82P B%\x08\x95 T\x82PQ\x08B%\x08\x95 \xd48\xad\x13\x84J\x10\xea\xd0O\x04\xa1\xee A\xa8\x1d!\x08\xb5W\x08B%\x08\x95 \xd4(\xe3\xfa\xec\x10\xaa\xc7!\x1b\xe5\x08\xf9\x0c\xd3\xc0\x8d?\xd5\x18\xaa\xc9\x8b\x1b@\xa8Nz1\xa5\x1b\xedx\xe5\xda\x88\x0d3\xbc\xff\x92\xd9\xb9\xbb-v\xbe\xd8\xcdq\xd5\xcd\x8c\xca\xe7\x0dx\xae\x0fk\xfd\xb7\xfe\xdbg\xeb{gY\x9ds\xc0\xa2\xc0\x7f\xaf\x02`\xcb_\xabO\xd6\x06\xf4\xde\x9f>\x9b\xb1\x05\xcf\xec\xa8\x90P\xb6\xe0\x0c\x16\\\xa8$0\xbfu.\x8d\x9fK\xaa\xc4akBqA\xf2p\xe1Z\xac$3E\xceu\xe5\xfblt\xbfR+\x85N\xbb\xb6\\B\xb3 \xcd\xeeJ\xcc\x186\x84f\x13\x9aMh6\xa1\xd9\x0d!4\x9b\xd0lB\xb3 \xcd&4\x9b\xd0lB\xb3Q\x08\xcd&4\x9b\xd0\xec8\xad\x13\x9aMh\xf6\xd0O\x84f\xef \xa1\xd9\x1d!4\xbbW\x08\xcd&4\x9b\xd0\xec(\xe3\xfa\xechv\x8d\xf7\xfa\xbd\x89\x8d\x12\x8f\xb29\xf8\x8e\xecE\x1eE\xcbQaz\x18\xfb\xbe\xc0\xdf!o\xe0\xde\x08\x88bZT-\x9b{\x8bk\xdd\x97\xa1H\x0bN\xaeadW\xa6\x7f\xe6\x9e\xa1\xc5M}v\xa5\xd5\x0c\xf7`\x05{\x1a\x8c\xc1J\x05\x96\xf3\xebF\xa5E6\x90\x14\x19\xad$\x04+je#\xa4\xd8\x14\x9by.\xf4\xe5|\xc9\x123\x04\xf4Al\xee(6O\xd3\xfbm\xeb\xb5]:4)\x0c( \xbf\xbf\xfb\xf5\xf7\xe6e\xe3.hQK\xc8\xb6\x0e%\xd66.\x1bs_\x9d\xad\xefxEru<\xf5\xbf\xfe_\x0ei\xf1U\x01[\x15\xf0U\xb9V\xf9\xe5\xe0\xa1\xd1\x80\xb4\x00\xc0=\xe3<\x7f\xbc`\x19\x93\x89\x0b?\xfd\x06\xfb\x92\x1b\x82\xe9Z!\x1fj\xe0\x9f\xb6J\x17\xb9\x1d>p\xc5r\xa1\n\xed\x0e\xa7\x1e\xfb\xc8\x95\xca\x18\xe6m\x04\xd7g~\x1a\xbb\xe2\x98\xe4.\xdbc\xd5\xf50\xe7Zh\xc3\xa4y\x88\xc5\x97o\xed\x06,\xc7\x1d\xb4\xed\x87\xb6\x9b\x82\x1a\xb6W\xde\xe2\xdc\xd0\x9d\xb3\xc3\xaa0\xc2\xb5 \xd7\xeeJ\xd8\xdb\x10\xaeM\xb86\xe1\xda\x84k\xb7\x85pm\xc2\xb5 \xd7&\\\x9bpm\xc2\xb5 \xd7F!\\\x9bpm\xc2\xb5\xe3\xb4N\xb86\xe1\xdaC?\x11\xae\xbd'\x84kw\x84p\xed^!\\\x9bpm\xc2\xb5\xa3\x8c\xeb$\xb8\xf6\x8d\xb0\xdd\xb1\x0d\xd0\xc3\x88\xef\xc0ng\xdc\xf6\xda\xc4\x84\xea-\xc4%`\xe4\xff\xa2\xf2\xb3\x1ak?\xf3\xd8wU\xa6\xc9\xc56\xe3\xbd\x1b\x8e\xf76\x1a\x0b%_l\xee\xf1\xa9\xd3#\x9bl\xcd\x1d\x80kh+1m%>\xa8\xc1\x13\xe4\xda\x92S\x8caC\x90+A\xae\x04\xb9\x12\xe4\xda\x10\x82\\ r%\xc8\x95 W\x82\\ r%\xc8\x15\x85 W\x82\\ r\x8d\xd3:A\xae\x04\xb9\x0e\xfdD\x90\xeb\x9e\x10\xe4\xda\x11\x82\\{\x85 W\x82\\ r\x8d2\xae\x93@\xae\xe3w\x0b{\xa4\xf3\xf4[\x89\xbf\xd6]\xcc\xe37*\xf7B\xdd\xfa\xc9\x9f{\x1d\x15s\xa72f\x9d\xd7\xcdC\xb2\x9b\xbb\x9c\x95\xf6 W;,Z'\x7f\xfbO\x05v?\xd7\xd8\xb6\xfei\xf7\xaa|\xc9\xbfs\xcf\x10\xee~\x06B\xce\x13\x95\xa7w\x184\xdb\xb3\x9a['\xc2\xf6F\xed\xadK\x1c`t\xf4K\x84^ R7\x10C\x0c\x80\xd8V@\x14A\x00\xe2\x8b\x8b\xcd\xee\xc1Q\xc8\x02pl\xc2\x00L\"\x0dt\xa5\xdeJ?w\xfb\xd4\xc9t\x1aB\xa63h:\xb1\xaa\xe9\x9b\xe5\xde\xa2\xb7\xc7F\xd8>(\x12\x0f\xb9\x18\x05B\xa6\"a\xa6y\xd4\xc0p\xfd\x1b\xf3\xba_~\xfa[\xfb\xcb\x15\xb66\xb6\xa8\x0dK\xd6Bz\x90\xbb\xd0<\x87e.\xb8L3\x07\x1e\xf6\xb5\x90nx\xe8\x95\x88bb\xed\xe2\xf0\xc3\xe5\xa8C\xe5&\xc3\xc4\x19\xd14\x0f\x1b4\x88\xb09\x04\x8c!\xa2\x0fC\x86\x10,\"\xce\x08\x0em\x02G4\x80\xf8\xee'V\x1e\xb1\xf2\xba\x12\x1e\xb3\xc4\xca#V\x1e\xb1\xf2\x88\x95\xd7\x16b\xe5\x11+\x8fXy\xc4\xca#V\x1e\xb1\xf2\x88\x95\x87B\xac\x15q\x00\xf5M1\xab2\x03R\x1aUY\x8dr\x0d\xdc\x1e4\xc8\xe0\xb0\xaes\\\x0f\x8eg\x05[%\x1c\xcd\xadV\xfa\x9aik\\\xb9\xe1\xe9\xad\xe3\x91\xb2j\xe8=\x84\x86$\xe7nM\x7f%rS\xb0\xcc\xf7\x1c\\\xafy\xceA\xf2k?N\xec\xa3\x91\x03D\xe5b%$\xcb\xfc\x9bv\xfe\xaa5\xa2\x8b\xe5R|\x9a\xc1\x0b\xd7Zk\xa7\xb6\xb1]\xcb\xf1\xf5Rcyg\xe9.Jv >\x96$\xc5\xa6\xc8<\xe1\xc2\xa8\x1cM\x8aeZ\xc1\x82\xdb\xf6\x15\xdb\x14\xa1q\xfb\x9a\x92\x98\xba\x11<\x07-R~6\xfc\x11\xb3\xe6;d\x93a\xaa\x07\xb9^9\xe7\x19\xfe\xab\xe1f\x8b-1\x86\xbd\x10c\xb8Gb\x82\x10C\x8cab\x0c\x13c\x98\x18\xc3\x0d!\xc601\x86\x891L\x8cab\x0c\x13c\x98\x18\xc3(\xc4\x18&\xc601\x86\xe3\xb4N\x8cab\x0c\x0f\xfdD\x8c\xe1=!\xc6pG\x881\xdc+\xc4\x18&\xc601\x86\xa3\x8c\xeb\xb33\x86O|p\xdd\x17\xc1\x17n]\xca&\x94<\x04O\x18\xd7\xbf\xd5\xaa\xbeIM\x1a\xe2\x05\xfb\x92Z\xb4\xe0\xf7\xb6f5S\x8a\xe8\xc0\xfbb\xee\x00TEt\xe0\xf15T\x90\xea\x02\xb1\xad\x80(Z\x1a\xc4\x17\x17\x9bS\x83\xa3P\xd4\xe0\xd845\xb8!U\xcd \xd1\x81\xc9tnd:\xb1\xaa\xf92\xe9\xc0\xad\xa9\xc9\xcd\xa0w~n\x8a\"\x85\x1dp\xd4N\x98\x10!~\xc8A\xd7\xb6\xf6>TR\xd0\x16\xa3gC\x83}\xce:\xe4\xea%\xbb\xc0U*\x03\xe1\xd2K\xae\xcc2\xf1\x9b\xacY\xbe\xaa\xa8\xbf\xd5\xad\xf6\x08z\x83\xe4\xd7c\x0d\xf1Y\xe9\xf7\xbe@\xa1!\xcd\xd9\xb5\x04\x1b\xa8ci\xbf\xea\x15\xd6\x80ce\x1ej\xcc\xa7\xf0\xbc<\xf7\x17\xd9\xa9c\x1f09\x93z\xc9\xf3\xbcNL'j\xb3)\xa40;hn\xdc\xeaJgx\xae\x98\x9e'J\xeab\x13\x1c\xa6\x01\xf3\x1c\xd8\xb1\xd4\x95\x1bv\xd3/L\xbft\xd5l\xf5\xd6\x8aiH\x946\x18|\xbaF!d*\xf9u e\x8d|\x017\x88\xd8\xff\x93>\xc5\x8f\x88\xae\xde\xb2\x8d\x0dz\xacre\xc2a\xc3\x935\x93B\x07\x08\xbd\xef8\x7f\x06\xc8\xdb}\xf6\xe4\xc9J\x98u\xb1@\xbc\xf2\xa5\xd2\x9b\xbf1\xbdq\xf3\xeb\xe3r\x82\x15Z\x17\\?y\xfat\xaf\xc8\x96\x86p\x9avs[\xf3\x14\xdcV\x08n\xbb\xa7J\xcf\xe1\x0bO\xfc\\l'`7\xea(\xca\xf6BQv\x8f\xc4\xcc\x8d_B\x94\x1d\x11\xe4~Zr\xae\xab\xf0v\xc14\x9f7f\xfc\xb8-\xb3,\xcbp[\x88s1\xe5\xe9\xed\x9ed&rHT\xeeFL\xea\x0eYW\xd9@\xfc\xfa\xe9g\xce\xf5OL\xbbY\xc0?r\xcf\x82\xd7\xae\x8a\xbb\xd2\xdb\xdb\xe4\xa4\xc8Iu\xe5\xbe;\xa9\x07\x83^\xca\xc5l~Cz\x89\x11F^\xecf\xdf:\x7f\x05\xad\x9b\xdc\xf0\x967\xeb\xb9\x84\xdc\x16f8\x11{a\xdf-7\x90\xdd3\xb7\xe4\xf4r\xa3Q@\xbb\xf3\xc9k9\xf9\x8a\xbc\xd6\x1d\x05\xc8\x06}\xe6\x92\xf3\xb9\x0b\xcc\x86\xfddc\xf9\xf93\xe7\xef]\x18\x97\xf7\x86{\xd6\x956OJqi\x82v\xdcW\xaf\x0e\xfb\x02@87\x90*\xeev\x9b\n\x99dE\xea\xf6\x17T\xf1\xdfYI\xe1e\x1a\x84\xd1\xa0\xae\x1b\xac5\x97G\xe52\xdd*!Kck\xb9\xec\xaa \xfe\xc7{\xe6\xb0\xbb\x1d\xda\x95\xbb0\x90\x83\xb9\xc3\xa8\xf17659\x89*&2%\x13\x9b\x90)\xcd\xabu\xdb\x1d&\xf4k\xbe'\x83\xc4\xa5\x1d\xd1\x9a\xed\xc0\xc0\x13\x85\xce_\xc1\x96\x89|$\x17\x83\x99\x98\x0d\xcb/\x1b\xb0\x000\x0d<\x13+Q\xde\xbaSh\xee24\xe6\x13\x8e?\xa65\xc7\x1b\xf2\xdey\x1f0\xf2\x81s\xa3a\x9b\x0bw\xd9\xcf\x86g*\xc5\xad\xe5)\xcf\xc5\x15\xb7\xe37W\xc5j\x8d;\xed1\x83d\\\xf0Tn[\xf2\xcd\x18m\x01\xaf\x1a\x8bg\x1e \xbf\xd5\x7f\x89i$\xa2\xaa%\x8ek\xac\xb7\xa6\x8c\x8c\x17\n\x1bz$\xc6\xdb| a\xc3\xe4y[o\x95\x99\xe3HuW[\x8f\xa6fp\xda|\xb7U\xe6\x02\x87v5ug\x19\xd8r\xdc\x88\xd7\xff?{\xef\xda%\xb7\x8d\xa4 \x7f\xdf_\x11\xab\x0f#i\xa6\x94e\xb9/\xefY\xcdz\xcf\xc8\x92\xec\xae\x19[\xd2\xaa$\xf7\x993\xa77\x85\xccDf\xb1\x8bI\xa6IfI\xd5\x9e\xfe\xef\xef\xc1\x8d\xb7$\x89\x00H\xb0\xa4\xea\x88/\x96+I\x10\x08\xdc\x02\xf1<\x11\x80\xd5-p\xb6\xbe\xaa\xb3\x19\xd5\nc\x89v(K\xd6O\xdc\xb3\x1d5\xc4\x11\xa8\x92\xaa#=\xbe\xa0#\x1a,$\x95\xb2\x7f\xda\x0c\x95]vX\xf7QT\xa4!%\xd6xQ\xc1\xae\xf5\\m\x13\xc6\x9f^\xcb&\xa1v\x9d\xa6\xb1Kk7\xad\xddm\xb9/k\xb7\xeb\x91\xefW\xbd\xb6\x1b\xa9\xce|[\x16\xe7S\x1e\xfa\xd6i\xbeOs\x19TWn\x1c\x1a9\x1d8\xee=\xd7O4\xf6 \x19\xf1\xf99\xca\x15p\xa8\x9f\xd0o6f\xf2\x83\xcb(Y\xf3g\xa0\xbe\xfd$\xdf\\\xc37\x8b\xdf\xff\xceD\x116v\x8f\xe7\xcdr\xee\xd9\xbe\xd1\xd4t[\xee\xd5\xec\xc2\x1f\x8f\x80\xd2\x1dR\xba\xc3\xb6P\xbaCJwH\xe9\x0e)\xdd\xe1\x89P\xbaCJw\xd8\xb2-(\xdda\xb75D\xe9\x0e)\xdd!\xa2\\Jw8$\x94\xeep\xac\xd6)\xdd!\xa5;\xec\xfb\x89\xd2\x1d\x9e\x08\xa5;l \xa5;\xec\x14\xed\xaf\xa2t\x87\xb2I\x94\xee\x90\xd2\x1d\xdem\xba\xc3\xa6h\x18\xd68\xfc\xa5\x03i\x080\xa9\xcb\x81\xedt\x88a\xb7\x91\xd4\n\\5\x0f\xb7\x82W\xcb?\xeb\x0d\xa5\x0b\x0c\xa9\xc4\n\x1f\xd8\xc1\x83\x84\x7f.\x96\xd7\xfcv\x18\\\xb0\xfa\x00P\x1e\x00\xad\xde\xff\x1eB\x15L}L\xd4\x97\xf8\xa7vy\xb1#\xaa#\xf5\"\xff\x91\x1c\xf7+\xe5\x1c1\xbe\xcc\x9a\xefl\xdbP\x92\x1c\xb4K\xf9\xda\xd0\xdc\xfd\xc4r\xc8yq&Y[\xda)\x9b\xc31QCt\xa3\\Y\x9f\xa2\xfc\xb4\x87\xed\xee\x16\x89e\x1a\x9c\xd0%\xb4\xafD1\xeb\xc1}]\xad\xe8\xc6+\xcb\x07\x89\xb9@\xcc\x85\xb6\xd8\x97G\xc2V [%l\x95\xb0\xd5\xa6\x10\xb6J\xd8*a\xab\x84\xad\x12\xb6J\xd8*a\xabR\x08[%l\x95\xb0U\x9c\xd6 [%l\xb5\xef'\xc2VO\x84\xb0\xd5\x96\x10\xb6\xda)\x84\xad\x12\xb6J\xd8*jp\xcd\x82\xad\x0e\xc5\xd3UH\xe7\xe2\x9a\xd7\x9d8\x8d\xc3e\x0b)\xd4\xb0 \xd3\x0b\xa6\nk\x93\xde!\x8dvi\xb4\xa6\xc4\x10\xa5?g\x17%\x8dR\xca\x80\xd8aLp\x01o\xcc\x85Z\xe9\x16\xd2\xed6\xe7\x858\xa65\xab\x0b5\xafp\xce\x8b\xfa\xbe\x1f$DPI\xa7O\xa0C\xb5\xaa\xd6}\xdam\x1d\xddu\x13\xa5\x82\x93\xe3\x9eg\xd1\xda\xfcMN\xba\xb5\xbanM9G\xaexb\xba\xe3\x98\x94~\xa5\x96\xc9y!K\x8by\x9eW\x8aU\xde\x9ac.:\xe0\x9a\x0fiYk\xb6Y\xe4\x9d\xa8\xb9\x85\xddv(:\x8e\xf6\x11V\xcf\xf2Y\x83|\xf6A\xb9\xca\x13Y\x1f\xe1\x1a'\x15V\xdeA\xb90\xea\x85^l!\xe6\xdbB\xbb\xbb\xa2B\xad\x89\xc6,\x94\xceS5iT\xc1B\xcb&K\x00;\x1c\xbe8}\xd6\x01\xeb\xea\xfd!\xad\xd6\xde\x10\xba\x95\xa36\x95\xc9\x97@\xfc#J6\xd1\x9a\x15\xbc\x84A\x8c.\xc5\x83z\n\xeb$EM\xc52Ur\x89+\xb5\xfaK\"\x905\xc7\xaaX\xe9\x9b,\x8e\x0f\x17y\xab\xafZU\x95\x16s\xc6s\x8d<\xcb\xa9U\xcdE1\xdd\x16z&E\xbb$\xcdj\xb3\xafY\xacju\x88\xae\\\xa5i\xccY2\xd4a\x19\xbf\xe1Y\xa3\xb8\xa1\xce\xd2O\xb7;*\xaaQ\x192\xde3\x07D\xb9\\%\x9aJ\xb3\x0d\xcf\xda^\x16\x0b\x0d \x94V\xfa\xb3\x1c\x0e\x05o\x9f\xff\xa6o\xd1\x1aJo\xa8\x19\x10U\x18\xb7\xfe\x7f\x0d\x9dW0\x8b.\xab3\xc1\x87.D\xfft?#\xb4\x87H\x04\xa3HR\x85\x95\x03\x80r\xe6c\x1d\xe7\xb3\xa0\xffa\xb0\xff\xd0\xc8\xffD\xb8\xff\x1c\xa8\xffh\xcc\x7f\x16\xc4\x7f\x06\xbc?<\xda\x1f\x0e\xeb\x9f\x10\xe9\x0f\x89\xf3O\x84\xf2\x07\xc5\xf8\x83 \xfc\xe1\xf0\xfd \xe8\xbe\x1b\xb6\x1f\x18\xd9\x0f\x8a\xebw\xf8\x1f,\xf7I\x84\xc4\xf4'@\xf4-x>\xca\x00@a\xf9\xb3!\xf98sd\x06\x14\x7fb\x0c?0\x82\x1f\x16\xbf\x9f\x0c\xbdG\xa3\xcb\x08\xe4\xde \xb7\x1fF\xbf\xfc0\xfb\xe12{\x1d\xd3\xd3\xa1\xf5\xae\xdatA\xeaq\nsB\xe9=1\xfa~\x0f\xff\x84\xf8<\x1a\x9d\xc7a\xf3Xd\xde\xaae\x1fT\xde\x05\x93\x1fB\xe4'\xc2\xe3\x1d\xd1\xf8qX\xbc\x05\xe5v\xc1\xe1\x03\xa0\xf0\x96\xda\xf5\x8e\xf4`\xf8{@\xf4=\x18\xf6\x1e\nyG\xe1\xeeC\xb8\xe0\x10\xe6>=\xe2\x1e\x04o\x0f\x88\xb6\xbbc\xedNH\xbb\x07\xce\xee\x8a\xb2\x0fb\xec\xc3\xb5\xc3B\xa0x|\xdd\x03]w\xc4\xd6{\x9b\x1b\nW\x0f\x88\xaa\x87\xc1\xd4\x03!\xea\xd3\x0c%'4\xdd\x05K?\xdd4\x1bg\xb6zL\xa5GH%]\x97x\xfa3\x85Iv\x88\x1d \xc1@$\xd66\x1a\xc1\xf9%\x94\xcc\x00\x94\x84\x82J\xc2\x83%\x93\xc1%\xf3\x00&\x13@&3\x81&\xb3\xc0&s\x00'!\xa1\x93I\xc1\x93\xb0\xf0\xc9d\x00J`\x08%\x10\x88\x12\x12F \x04\xa4\xb8B)\xc1\xc1\x94\xc0p\x8a\x07\xa0\x12\x18R\x99\x04T\xb1\xc2*h\xa3\x01\x05\xad\xcc\x08\xae\xe0\xcd\x98\x19\x00\x96\xc9!\x96\xe0 Kh\x98eB\xa0\xc5\x01\x1c@\x81-\x8ep\x8b\xd5\xd5\xe9 \xb9\xd8\xcb\xa50\xc9!\xf1\x84`(LR\x89' \xe3\x06\xc9P\x98$\n\x9e \x02\xd0 \xeaHa\x92x\xa8&\x1cX\x83\x84k(Lr\x9d\xf3\xf5\xe1\xdb?\xfc\xf1\xfai\xd8\x8f\x9f\xc2\xc7j\xb2\xbb\xc0\xc6zQ!\xb8\xf8D\x08.\xee\x10\xfb2Gp1\xc1\xc5\x04\x17\x13\\\xdc\x14\x82\x8b .&\xb8\x98\xe0b\x82\x8b .&\xb8X\n\xc1\xc5\x04\x17\x13\\\x8c\xd3:\xc1\xc5\x04\x17\xf7\xfdDp\xf1\x89\x10\\\xdc\x12\x82\x8b;\x85\xe0b\x82\x8b .F\x0d\xae/\x06.\xfe[\x89\x17\xef26\x98s\xf1\x9dN\xb2\x18G\xb9\xf4B~|~,\xae\xd2,\xfa\x9br\xd4\x9e\x81,@y\xa3D'\xa9\xff\xe5bw\xac\xfe7\xeb\x04\x96\x7f\x94\x9f\xd6\xbf\xdc3P\xb9\xae\xd6\xb6\x14_\x00\xbc\xc2\xea\xbdhw\x97\x0c~\x0f\x90\xdf\x04$\xac\x03x/\x0d8\xf8E\x8c\xcc\x02\xf1@@\x98\x07f\x81z`J\xb8\x07f\x83|`\x1a\xd8\x07\xe6\x83~`.\xf8\x07f\x82\x80 0\x0c\x04SCA\x10\x1c\x0e\x82)!!\x08\x0f\x0bA8h\x08\x02\xc3C\x10\x0e\"\x02\x0f\x98\x08\xe6\x80\x8a <\\\x04~\x90\x11\x84\x87\x8d`*\xe8\x080\xf0\x11\xb8\x19'H\x18 \xe6\x85\x92N>g1\x9bf\x81\x94 \x04\xac\x04s@K0\x03\xbc\x04\xd3BL\xe0\x06\x84\x00\x16j\x02w\xb8 0\xae\xdb\x11\xb0\x13 \xcb\xb78\x98\xa6\x84\xa0\xc0[\xfbnP\x14 \x9b\xee I\xc1\x18X\n\xec*\x9f\x16\x9e\x027\x88\n\x1c`*p\x82\xaa\x00\xdf+~\x90\x158\xc3V`\x85\xae`J\xf8\n| ,\x98\x00\xc6\x02\xa4\xea\x1d\xe1,\x08\x05i\x01\xb6\xbe\x96\x99\x14\x10\xde\x82\xd0\x10\x17\x84\x85\xb9 (\xd4\x05x\xb8\x0b\xac\x90\x17Xa/\x08\x04}A8\xf8\x0bBC`\xe0 \x83\x81;\x14\x06\xbep\x18xAb`\x9f\xf8\x80@/\xc0\x01\xc1p\x81\xc7\xc0\x17\"\x03\x1f\x98\x0c\xec\xca\x08\x07\x97Ah\xc8\x0c\x02\xc2f\x10\x12:\x83\x89\x07\xa0#\x84\x06\xce0\x1at&\xd94\xc2?\x1f\xa2\x0c \x9aX\x1d\x04\xc69\xb0a\x05\x7fRD\xfb>\x0fA\xe3\xa8\xfe\xdf\xfdGu \xa8\xc1.\xba\xe19\x1cx\xb6\x8f\xf2\\\x1eC\x8b\x14\xf8g\xbe>\x0e\xb8 \xc4@\xd16\x81\xdel\xd5\xca]\xb5\x17D\x05\xbb-\x91\xe6\x0dtud)\x97N\xd8\x12w\x84\xcem\xd0\x90/dn+\x97\"5\x87\xc4\x1b\x12\xa7HM\x18\x03{\xbbA\xde\x14\xa9\x89\x82\xb6\x83\xc0\xda\xd6:R\xa4\xa6\x0b\x84\x1d\x0e\xbeFB\xd7\x14\xa99\x1e\xa6\xf6\x81\xa8\x1d\xe1i/h\xda\x1d\x96\xa6H\xcdS \x07=\x07\x85\x9dCA\xce\xc1\xe0\xe6\xa9\x06\x97#\xcc\xec\x061\x9b-\xb7\xca\x1e[\x996O\xe4\x9a\xfb\xcc\x80\xa1\xb5r\xa2\xe4\x99\xc2\xdbj\x7f\xcb\xf8\xaf\xc7(\xe3\x9bg\xb0eq\x03:\xea\xc2V:\x0f\xd4\xcd\x0f\xf2\xf9>\xb8\xcfw\xcbBc\x07\xb5\xb7\x1a\x87\xe77\xda\xb3y\xd6x\xfa\x0c>]\xf1D\xa1irh+\x18R\xee\xac\x1ab\xde\xb3b}%\x86\xf8.\xba\xe1\x89x\xfb\xe4\xc4\x1e\xb8y\x15\xde\xbc\xb8\xe6\xb7}\x0dl\xc1\xb5\x1a\x9bez\xc7\xcbd\xf0\xadt\xefi\xc8Q\xc3m%\x90+\x1dr\xbb(i\x94\"[%\x1a?\x0c\xcc.\xe0\x8d\xd0X\x9aHG@\xba\xdd\xe6\xbc\x10\xe7\xecfu\xa1\xe6\xd6\xcfy1\x83\x06\xa1\xcf\xa9\xd3\xa1ZU\xeb>\xed\xb6|/\xba\x89R\xc1\xc9q\xcf\xb3hm\xfe&W\xcd5KD+\x95wK\x8c0\xdd\x1d\xc7\xa4t\x0c\xb6\xce\x0c\x17\xb2\xb4\x98\xe7y\xa5X\xe5n;\xe6\xa2\x03\xae\xf9\x90\x96\xb5f\x9bE\xde\x89\x9a[\x00z\x87\xa2e\xeag\xa4\x9e\xe5\xb3\x06\x95\xee\xc3\xd3\x95+\xb9>\xc25\x86-\xcc\xf4\x83\xf2A\xd5\x0b\xbd\xd8B\xcc\xb7\x85\xf6WF\x85\x9a\xf9\xc6\xae\x97\xdeo5iT\xc1B\xcb\xab[\xe0l}\x05\xecp\xf8\xe2\xf4Yg\x0dT\xef\x0fi\xb5\xf6\x86\xd0\xad\x1c\xb5)\x14\xd9\x91\x83\xf8G\x94l\xa25+x\x89c\x19]\x8a\x07\xf5\x14\x8e\x92u|\xdc\xb4\xec}\xa6J.\x81\xc1V\x7fI\x08\xb9\xe6\x19\x17[u\x8dK\x13%\xf0\xe1\"o\xf5U\xab\xaara\xcex\xae\xa9\x03rjUsQL\xb7\x85\x9eI\xd1.I\xb3\xda\xeck\x16\xabZ\x1d\xa2+Wi\x1as\x96\x0cuX\xc6ox\xd6(n\xa8\xb3\xf4\xd3\xed\x8e\x8aj|\x92\x8c\xf7\xcc\x01Q.O\xa4\x81\x96f\x1b\x9e\xb5\xddd\x97Q\xb2\xe6\xcf@\xa5sx\x92o\xae\xe1\x9b\xc5\xef\x7f\x17\\+}y%\x1e\x0c%\x968\xd7f\xc5\xf9o\xfa\x1f\x7f\xd7,\x90\xae\\\x13?\xaaG\x14\xbbE\xab\xa5N\x1f\xfb(\x7fi&\xa0\xa8\x88c\xbc?\xc9\x84)S?@\xb9&J\x99\x83 \xa2M\xd9\xd1P\x8f\xee\xe6\xd1\xe5P\xee\x8b\xb0\xa4\x19\x08H\x9c\x81Y\xc830%\x81\x06f#\xd1\xc04D\x1a\x98\x8fL\x03s\x11j`&R\x0d\x04&\xd6\xc0\xd4\xe4\x1a\x08N\xb0\x81)I6\x10\x9eh\x03\xe1\xc86\x10\x98p\x03\xe1H7\xe0A\xbc\x819\xc87\x10\x9e\x80\x03~$\x1c\x08O\xc4\x81\xa9\xc88\x80!\xe4\x80\x9bq\x82$\xe6\xc0\xbc\xe4\x9c\x93\xcfQ\xee\x8b1d\x1d\x98\x81\xb0\x03\xd3\x92v\xc0\x8dZ\x02X\xf2\x0e\xb8\x13x\x00\x03\x86\x8f \xf2\x00\xb2|\xca}\xe1J\xf2\x811D\x1f\xb0\xab|Z\xc2\x0f\xb8\x91~\xc0\x81\xf8\x03N\xe4\x1f\xc0\xf7\x8a\x1f \x08\x9c\x89@`%\x03\xc1\x94\x84 \xf0!\x05\xc1\x04\xc4 @\xaa\xde\x91 \x04\xa1HB\x80\xad/\xe5\xbe\xf0%\x0eAP\xf2\x10\xe0 D`%\x11\x81\x95H\x04\x81\xc8D\x10\x8eP\x04\xa1IE\xe0I,\x02wr\x11\xf8\x12\x8c\xc0\x8bd\x04\xf6\x89\x0f\x08>\x088pB\\\x08G\xe0K:\x02\x1f\xe2\x11\xd8\x95\x11\x8e\x80\x04\xa1IH\x10\x90\x88\x04!\xc9H0\xf1\x00t$%\x8131 \xbe\xbc\xdc\x17\xf6\xd8\xfdSP\x10\xf8\xe7\x82'\x1b1\x82%f\xa4\x16\xe2UZ\\)o\xc1f\x93\xf1\\\xac\xffz\x1d79(\xc4\xc0/\x93P\xf4~\xef\xa2D\xad\xc5\x88\x13\x07\xdb<\xcaU\xf7\xc8\x12$\xf2\xaa\xfe\xbf\xb3\x8c\x86\xf3A\xd3\x95\x86\xb2d4\x13\xebSv\x8c\xb6\xa0\xdcL\x94\x1d\xc3\xa6\x9a{\x96\x1d\xc3@\xfe.I2\x9a\xfc\x03\xca\x91q\"\x94#\xa3C\xec\x0b\x1d\x0e\xfaG\xcdi7\xdf\xf5,p\x7f(\xa8?<\xcc\xdfu\x90\xf6\x82\xf8\xe7\x81\xf7'\x80\xf6g\x82\xf5g\x81\xf4\xe7\x80\xf3CB\xf9\x93\xc2\xf8a!\xfc\xc9\xe0\xfb\xc0\xd0} \xd8>$d\x1f\x08\xaew\x85\xea\x83\xc3\xf4\x81!\xfa\x8e\x83\xb3m-\x0c\x0c\xcdO\x02\xcb[!y\xa4\xd1\x80:#\xcd\n\xc3c\xcd\x98Y\xe0\xf7\xc9\xa1\xf7\xe0\xb0{h\xc8}B\xb8\xdd\x01\xecE\xc1\xec\x8e\x10\xbb\x0dB\xf2\x85\xd6m\xe5R\x8e\x8c!\xf1\x86\xce)G\x06\x8c\x81\xc7\xdd\xa0q\xca\x91\x81\x82\xc0\x83\xc0\xdf\xd6:R\x8e\x0c\x17\xa8;\x1c\xcc\x8d\x84\xb8)G\xc6x8\xdb\x07\xcav\x84\xb1\xbd lw\xf8\x9ard\x9cJ8\x88:(<\x1d\n\x9a\x0e\x06KO5\xb8\x1c\xe1h7(\x1a\x9f#\xa3\x9d\xb2\xe2\xc0\x8a\xab\xda\x9f\xaa\xc0\xd7\";\xe2\xe2^)\xa3\xc3\xd8\xc8a\xca\xe8P\x93;Q\xb3=\x03\x01et\xa8\xc9\x04\xfa\xa4\x8c\x0e\x94\xd1\xe1\x1f'\xa3Cf2:d\xf6\x8c\x0eY+\xa3C\x99\xcf\xa1\x99\xca\xe1\xac\xa4<\x9d^\x06\xd4\x91\xd3!\xa3\x9c\x0ewGh\xa0\x9c\x0eJ\n\x04\xb1\x03\xb0\x8dP\x82EF\x8c\xccB\xf2\x80\x80D\x0f\x98\x85\xec\x01S\x12>`6\xd2\x07LC\xfc\x80\xf9\xc8\x1f0\x17\x01\x04f\"\x81@`\"\x08LM\x06\x81\xe0\x84\x10\x98\x92\x14\x02\xe1\x89!\x10\x8e\x1c\x02\x81 \"\x10\x8e$\x02\x1eD\x11\x98\x83,\x02\xe1 #\xe0G\x1a\x81\xf0\xc4\x11\x98\x8a<\x02\x18\x02 \xb8\x19'H\" \xccK&9\xf9\x1c\xe5t\x18C.\x81\x19\x08&0-\xc9\x04\xdc\xa8\x10\x80%\x9b\x80;\xe1\x040\xe0\xed\x08\xe2 \xcb\xa7\x9c\x0e\xae\xa4\x14\x18CL\x01\xbb\xca\xa7%\xa8\x80\x1bI\x05\x1c\x88*\xe0DV\x01|\xaf\xf8\x91V\xc0\x99\xb8\x02V\xf2\nLI`\x01\x1f\x12\x0bL@d\x01\xa4\xea\x1d -\x10\x8a\xd4\x02\xd8\xfaRN\x07_\xa2\x0b\x04%\xbb\x00\x9e\xf0\x02V\xd2\x0bX\x89/\x10\x88\xfc\x02\xe1\x080\x10\x9a\x04\x03\x9eD\x18p'\xc3\x80/!\x06\xbcH1`\x9f\xf8\x80\xe0/\x80\x03\x87\xc1\x85 \x03\xbe$\x19\xf0!\xca\x80]\x19\xe1\x083\x10\x9a4\x03\x01\x893\x10\x92<\x03\x13\x0f@G\x12\x0d8\x13i\x80r:|y9\x1dV\xb7\xb5Jv\xbaG)\xa7\x83\xd5\xcdD9\x1dl\xaa\xb9o9\x1d2\xdf\x9c\x0e\x19\xe5t\xa0\x9c\x0eF\xac\xcb\x9cM\xd9J\n\x04\xf4\x8f\x9a\xd3n\xbe\xebY\xe0\xfePP\x7fx\x98\xbf\xeb \xed\x05\xf1\xcf\x03\xefO\x00\xed\xcf\x04\xeb\xcf\x02\xe9\xcf\x01\xe7\x87\x84\xf2'\x85\xf1\xc3B\xf8\x93\xc1\xf7\x81\xa1\xfb@\xb0}H\xc8>\x10\\\xef\n\xd5\x07\x87\xe9\x03C\xf4\x1d\x07g\xdbZ\x18\x18\x9a\x9f\x04\x96\xb7B\xf2H\xa3\x01uF\x9a\x15\x86\xc7\x9a1\xb3\xc0\xef\x93C\xef\xc1a\xf7\xd0\x90\xfb\x84p\xbb\x03\xd8\x8b\x82\xd9\x1d!v\x1b\x84\xe4\x0b\xad\xdb\xca\xa5\x9c\x0eC\xe2\x0d\x9dSN\x07\x18\x03\x8f\xbbA\xe3\x94\xd3\x01\x05\x81\x07\x81\xbf\xadu\xa4\x9c\x0e.Pw8\x98\x1b qSN\x87\xf1p\xb6\x0f\x94\xed\x08c{A\xd8\xee\xf05\xe5t8\x95p\x10uPx:\x144\x1d\x0c\x96\x9ejp9\xc2\xd1nP4>\xa7C\x1dn\xa0\x9c\x0e\x94\xd3\x81r:\xe0r\x10PN\x87\x9aL\xa0O\xca\xe9@9\x1d\xeeYN\x87\x15K\xae\xcb\x94\x0e+\x16\xb3d\xcd\xf3\xf3\xdf4\x81j(\x99\xc3\xf38\xfe^?/+n\x00f]\x88<\xb9\xc41\xacSq\x16\x10\x03\x90\x81X^c\x0el-\xc7Zg2\x87Z\xa9\xfa\xe7{\x96\xca\xc1\xe8\xf8\xcbe2lx\x92\xeeG#\x12l/\xfaxd1X\x08\xe1E\x1a\xd5\xb8nP\xa4\xd7<\xd1\x07Y\xd5\x1c\xb3\xf2\x89S\x05Kt\xe5\x86\x1c\xaf\xaf\xdf\xbc\x7f\xf5L\x9e\xca\xd5\xb3\xfa\xa8\x1bI|\xe2\")\xf4Y\xa0\x04~\x1a\x07\x02\xe5\xe4\xe8/<\x8fv +\x8e\x19\xcf\xcb).\x93\x9c\xa4\xbbT\x1a\xdd\xddn\xa1\x862\xcc02;v\xf9\xffz\xda),>J:\x91\xa7\xb1l\xc2B:\x9f\xea\xdbIAlBb\x13\xd6\x9f\xf9J\xd8\x84\x9d\x8d\x90\x9bdm#r!\x18\xd6w\xc5wo_t5\x81\x18\x87\x0d!\xc6a\x87\xd8\x17\xc3 \x19\x87\x01)\x08C\xbe\x1dmc\xf6\x0d{\xfd\xb3\x99t\xe6\x7f\x8bT/\x93\xe5\x8e\xb7mR\x92\xc8AD\x0e\"r\x10\xe1\x1c\x1a\xe4 \xaa\xc9\x04\xfa$\x07\x119\x88\xfe\xb1\x1cD\xe7\xab\xdb\xa5G\x1d\xa5->\x1e\x84\xc1g\xf3\xefX\x8b\xb0\x9f\xc3 \x80g'\xa0_\xc7\xdd\xabs\x1a\xd8\xa6\x07\xb5\xcb\x89\xd3\xcc.\nf;\x11:Zv\x88}q\xa0\xa3\xe5]\x1c-\xe5j\xd6Wc\xf9\xa3\xa9\xefZ\xad\x89\xe2/\xa8*Oa54*\xddg4\xf4\xd8\x0c9_\xd6\xf6\x9b.\x0b\xa1\xb6\xfc\x7f\xcfr\xfeR\xb6\xcd\x98\x0b\xca\"\x10\xc54W\xfc]t\xc3\x13\xb3\x0dTg=\x1e\xc9h\x8fz\xf0\x8628\xcc\xfb\x10\x159\x8f\xb7\x92K/VL\xb6a\x85)\xe5\x98DE=\x16,m\xbd\xdbc\x89\xe8*\xeb\x1f\xef\x9d-\xd2\xec\xc0\xb6\x0cN\xe1\xae-Nk\xab\xdc\xe4\xea\xb0B\xf7NW\x0d\x8a\x1dms'B\xdb\\\x87\xfc#ls\xed-\xe3\xee\x17{Y\xa3|iV\xd5\xfe\x15_\xce\xe6\xfcg\xb3\xfa\xd6\x8f\x86\xebX:\xdc\xca\x95Y\xae\xff\xb1X\x18wQ^paVW;\xa0\xde\x0c\xf2\xce\x85\xb9\xf9\x11\xfd\xc4=[\x9d\x8d\x9a\xbe\xe0iV\xd7\xe6\xd89\";})\xb6\xe9\x81\x0f\xda\x9b\xadd\xb0\xf1J\x10*P\x82Q\x84\x12+\xbfB J\x1dF:\x8c\xc5\x92\xfc\xacf\x95*\xa8\x91\xfc@\x19P5\xc3\xe7\x11_\xec\xe0\xc8\x8at\xff\xd8\x12\x99\x02\xfc\xf3!MN\x06}\x97\xd8\xf7\xa0\xba\xd4\xf6\xa3\x01\x08\xda\x08\xce\x87P\x17S\xef\xbaz\x0e\xe9'\xe5\x15}\xfaM\xf5\xbb4\x02\xd3\x84\xcb\xf0\xfaa\xb6\xb5\x92\x8cE:\x9c\xa52\x98\x94\x0bW9\xfc\xc4\xbf\xf9\xafG\x16\xd7t/\x17\xa8\x0fIT<\xcc\xf5b\x8e\xf8\xd0S\xdde\xdf\xc1\xd3\xffWV\xb7\xfa&\xa6\x08\x99g\xc2\xb8Qj\xd5M\xb7\xaa\xfb\xab\xa4\n\xeb\x8c\xb3\x82\x03\xab\xaa*\x1ez(\x1ez\x88\x08\xdaVR\xd6\xf2;\xf8\xe3\x19\x14W\xc7\xfc\x19<\x05Q\x86h\xc47\xff\xef\x8f\xc8A\xc7\xe2\x88\xe5\xf6 \x86\x9d\xfeJ\x10\x8b\x80\x12\xa7 \xa9I\x12\xba\xc6\xd0\xc8\xfe\xa5\xa7\xa2\xf9\xcd\x18\xb9\xb5\xe98X\xbc\xdb\xa0\xaf\xfa\xad6\xe2\x99\xa8\xc3q]\xb4C\xa2\x99\xaa\x84\xadO\x1b\xc7\xb0\xa3\x1e\x13z\xe4Gk\xe5\xa4\x1b\xeaK\xad\x9c\xdaZ\xde^\xad\x8c\xaa\xea\x13D\x9d\x03\x95\x96\x84\x01\xd0\xfb\x011\xa0\xed\x9b\x83\xb5#[|\xab\x9c\xb7+Y;R>\xaa\xe0T\xf1K\xa5t9\xc7j\xe3\xff\x9b\x81A\xbe\x89\xf2C\xcc\x06\xe8M~U\x1f\xe40\x95_-\xa1&\xbd]\x1cw;\x9e\x8b\xe3R\xedx]6\x12S\xa0\x82>\x9417\x90\xff@Z\xb2\x13\xb7\xf8A7\x982\x14\x8e\xa2\x87\xe4\x03\xb9?\xd6\x0f\xa4\x8dlA\xd2\xfb\xfc\x88\xef\x9e\xc1\x0bY4<\x17\xcbV\x7f\xb9\xf9\xed~\x95\x8e?^\xb8\xcdy\xf5\xd1\n\xa9\x15u\xd6\x7f3\x99\x80\xf2\xab\xf4S\x022\x8d\xa2IM\"[\xf5\xfc\xfd\x9b\x9f\x1f\xeb\xb4Nk[Z[=\xd6s\x19\xa7\xa9>\xa6\xbb\xde\x16\xd1n\xc5\xba\xea\x82\x1d\xcb\xe5Y\xc2\xbe\xce\xf5\x96\xc1\xec+X\xa3:\xe5\x19\xa5L\xfeP;\xc0D\x892fL\xc6EC\xcb\xac\x9dc\xe4w\x88\xa2y\"D\xd1\xec\x11\xa2h*\x91N\x88\xe6\xf1\xde\x053ky\x1f\x88\xa8)\x85\xdc\x8c-\xb1.\x886e+\xf9\xda\xdd\x8cDz\xf4\xf3\x9c*!\xd2c\xf5\x97\x19\xd4l'\xe9\x11\xe9\xb1&\x13\xe8\x93H\x8fDz\xbc\xcf\xa4\xc7\x16\xa6u\xfe\x9b\xfc\xc3Ph\xac\x03\xb8%\xf9\x8f\x95O\xab\xe1Z\xeb\xc7\xb4\xfe1 \xad!\x8bn\xd4)\x15\x05H!l)\x14\x18e\xb3@\xc1f\x85\x02\xa6\xd1J\xecMW\x82\x82\xa0\x10\n023\xfc\x84\x05\x9f\xec\xe7\x92J\\\x80'\xfb\xf9\xb4)\xa1@\xa7\x99 \xa7\xd1\x80\xd3\xacp\xd34`\x13\x12j\xc2Ln%\xd6)\xae\xc4a\xd2\x05\x83\x98\xb0\x1eW\xf0\x85\x97\x86\n\x1c\x87-\x05E\x96\x86q%T\xcf\xcd\x8c)Y\x11%\xf7J\x0f\x8e\x87\x89\xb1$\x17$i\x18Gro\xa73\x86\x14\x02A\xb2\xe1G\xee\xcd\x1a\xdc\xad\xe6A\x8e|q#\xeba\xa1\x12\xdc\x88\x1d\x8f\x18Y\xf0\"\xbb\xe6+?\xb6\xb7\x1b\x9b\xbc\xd8M!/vK\x10g\x07\xcc\xb9\xe1k\xf7b\xb7\xad\x9e\x8e3\xcb@|\x85\xf8{\x9d\x91\x1a8,\xc4\x89t+[\xad\x1f\xefrG\xbc\x95\xbf7\xdc\x10\x95\xa2\xc4\xce\xf4Y\x96\x07\xfbts\x8cyO\x88Cr\xad\x8a\xd1\xbf\xde3\x97C]\x85m\xb1\xce\x1f\xfb\xec\xc9y\xb2Y\xf2\x84\xadb\xbe\xb1\xed\xe6\xf7\xd9S`U\x81\x92nO\xe6\xa9\xd8\xf7\xd7J.y\xb2y\xa5>\xafb{\x9a\xb3\x9c5\xfa\x08\xf2\x82\x15\xc7\x1c\x1e}\xba\xe22\x9a\x88\x95+\xc4\xf0\x01T\x14\"J\xe8\xb7\xc8\xd5\xee\xbbt\x19\x11C\x8ah\xa8@O\xf4&\x07\xa4\x9c\xe8\xc6v\xe8\x98\xeb=\xe5\xc9UG\x15\x8a\x0c\xd6)\xf1:\xbd\xa4T\x9f'\x03D\x0b\x19 \x1d\x82Y\x8e\xbe\x06\x03\xc4i\xdf\xce\x8f\x87C|\xdb\xbfo\xbfO\x0b\x16_\xca\x87\x1a\x9b\xb7B\xa3\xd4\xdbPO\xb3\xd9\xb9u\xd7J\xd1?\xdf\xb3\xbd\xbb\xae\xc6\xb6| \xe3\xd6\xba\x85\xa2\x86\x9b-\xdf\x02\xaa\x18\xec\x869u\xd6\x85\xa0y\x17|2/\x08\xd1\x0e\x1b=\x8f\"\xe3\xab2\xb3\xca\x9c\x04\xba\xce\xfeN\xec\xcc^\xff\x83\x07m\xb3\xa7$\x07\xd7\x88uP\xdb\x874\x91<\x89\xe4i\xc4\x9f\xe49T}\xb9m\xd66.\x17\xa7X}\xd7\x1ct\x89\x95?\x90AJ\x06i[\xec\xab\xe0\xd7a\x90\x12\xafs\x12\xfe\x10\xf1:kr'j\xb6\xf3\x10\x89\xd7Y\x93 \xf4I\xbcN\xe2u\xdeg^\xa7:\xea!\xe8\x9c\xca\x98|\xb3m8aj\xee\x97z\xfe\xcaN\x17\x8c)@\xffv\xcf\xfc/C\x9e \xab\xa5e\xb7\xb3,\xee\x13\x84ids\x9dX\x8b\xc0\xb9M\xa6v\x9a\x04t\x99\xb8;LNq\x013\xa8]\xcef\xe5L\xa2,^'B\xc7\xb0\x0e\xb1/\x0f_\xff1l\x1c1a\xc6\\\x95\x1e\xe0\xc6R\xac\x7f\xe9\xb1X*c\xaa\x7f\x8f\xadym\xfe\xac^y\xa3\xcc\xafI\x80\x8fF\x91\xfa\xd9{\xb6\x0b\x13\n\xa2\x04Q\x0cn;\x9f~C\x0f\xba\xa5\xfbl\xeaB\x08\x05\xe9|\xc0>\xa4 \x05!\x14\xc4\xc8<(Hc\x17s1\xbb{7W\xc2G\xc0>\x1c\xc90\xef\x10\xfb\xfa\xf8\xf5\x1b\xe6\x84\x8f\xa0\xfdp\x84\x8f\xd4\xe4N\xd4l\xf7\xe7\x13>R\x93 \xf4I\xf8\x08\xe1#\xf7\x1f\x1fiyp\xe6\x84K\xfe\x01\xbc6\x84\x9d(\x99\xda\xd5\x12\xd0\xd1\xe2\xeef\xe9\xc7N\xbcOt\x9d\x05\x10\xaar\xfa3\x1d\xde:\xc4\xbep|\xfd\x87\xb7{\x84\xaa\xe4\xfc\xbc\xe0\xc9\x86g\xfb()\xaa{\xb5\xe2t}\x9d\x9f\xc7\xac\xe0\xf9\x00\xb0\xf2#/~\x92\x8f|/\x9e\xd7\x96\x8aj\xb8z\x15dA\x9d\x1bq\xf3]\xfd\xc4=\xdb\x81e\xeb\x97QO\x10\x9eu2\xd9\xa7\xd2\x15\xcb\xafF\xec\x9f\x80\xf3\x11\x1fXV,s^,\xaf8\xdb\xf0\x9e\xb5\x120-\x02T\xab\x84X\xbc\xbc\x80Zd\x8d`\xf3/\x0d\xab\x13\xb0*\x05\x9cZK\x07\xed[\x96\x159/\xfe$\xb5\xdb=T\xd4\x83r\xaa\\\xbc\xec\x1bi\xe1\x86\xd9|\xfd.\xceE\xbd\xa0\x8f\x11\xad\x0e\x95\x1fC6]&DG\xf4\x9c5v\x19[O\x18Vz]\xd0c\x06\xf0\xc8\x84\x12v8\xdc\xdd\xe7q\xc6\xb7\x91\x17baN\xf2c\x0ekvP\x16\xae\xda\x1f\xcd\x9f\xb3c\xac\x93I\x1d\xb2T\xac\xe82\xc7T\xd9\xbb\xf2i\xf9?\xeb+\x16%g\xc3\xa1\xd2\xa0}\x19*OU\\{\x11d\x92\x05\x95\x87E\xd6B\x18\xfd\xd2\"\x96\xdf\xd7^\x0ev8\xc4\xd1Z\xeeU\x0f-Q\xd9 \xe3\xb99\x14\x19K\xf2H\x9e#\xf6l}\x15%=\x89\xf0\x95\xc8\xba\xf4\xee\x0cF\x90]w\xc5\xa3\xdd\xd5 p\x8d.\n\xbfV\x16\xd1\xf0\xdd\x1a\x1e\x9f\xdc\xb0\x82?\x11\xe5\x0e<\x1d\xb3\xbcX\x0e\xef\xabF\x02\xccx\xfb\x06\x01.\x0d\x07\xecF\xa1\x04\xbd\x0f\x1bAk\x00\x9c\xb4\x00\xb8\xfd\xd9\x08~\x9f6\x82\x1d\x83Fp\xdd\x02\xae]\x03n\xdd\xe3\xb0\x9f\xb7^\xe8\xdf\xd7\x8d\xc8a\xbfN\xf7\xfb\xa8X\xda[\x8bn%\xbau\xba\xa2\xe2\xd3j\x95T\xebr-Ol\x97\x88\x9f\xef\xa0\xba7,\x8e6\xacH\xb3\xfc\x0e>\xde\xd6\xd56\x93Y\xe9\xe4\x9e\x02\xe9\xb18\x1c\x8b\xeao\x87\x8c\xdf(U\x0e\x94(\xd1\xbc;mS\xb9K\xdf\xc1\xb7\xd9\xe1p\x07_\x95\xf3M\xfb\xe2\xef\xe0\xf3\xfc&\xda\xf0d\xcd\xef\xe0\xd3\xe5\xf8\xadL3\x8bm-6\x8e4\xe7\xd9R\xdfu>g}\x1bF\xa8Zp\x1bL\xaf\xd2\xd0S\xe8\xc0\xfb\xd2\xd5\xa1\x170\xb5\x93\xf6Yj\xfd\x89\xa2\x01\xbb\xbb\xe2v\xd5\xe23Jk\xf6\\\xb0\xd6\x14N\xe0\xd2\x05\xc8N\x00\xe7\xd3\xc0\xfb\xcf\xb9\x02\"%J\xbb\xd2\x06\xb7rv+s\xfa\xdf\xb4\xeb\xe8O\xd2\xb6\xfd\x97\xa7\xbd\xc4<#\xca+\x9f\xa4\x85\xba\x0b\xebs\x0eW<\xe3\x12G\x93k\xe7\x02\xe0\xcf\xfca\xc6\xe1\xaf\xc7\xbc\x00\xb6\xcb8\x97\x10\x9a:Y\xa8\x94\xc6\xdb(\xcb\x0b\xeb\x97d\x1e\xca=g\x89n\x83\xaa\xe8\xf3\xc3\xe1O,\xbf\x82M\xcasY\x0d\x8d\xa6\x8a\xe2s.*\xd4\x7f\x1e\xd03\xee\xa58\x9a\xac\xd3\xa4`\x91\xf6\xa2I2\xc0V\x9d-\xd8Z(77\xe5n\x1a\x87\xa2\x9e\xa2\xcd:2\xcb \xb6\x7f\x0c\xc2\x8cd\x94\x81\x8bk\x83\x92\xcdQ\x1d\xff\xf8\xf2&-\xf8\x12\xd70%\x0e5\x02\xc7Z \x91\xf5\x19X\x93\x9a\xe2X\x19\xf0\xa8\x10\x98\xcf\xa0\x9fvZ\x7f\xea\xc2\x93\xa35[\\S\x9e\xc0\xe5\xc5\x8f\xaf_\xbd\\\xfe|\xf9\xe3\xf2\xfd\x7f\xbe}\xb5\xfc\xf0\xfa?^\xbf\xf9\xf3\xeb\x91\xa5\xbc}\xf7\xea\x977\xef_\x8d/\xe5\xc5\x9b\x9f\x7f\xbex?\xba\x9c7o\xdf\\>\xff\xc9\xa1\x18\x03\xdcM\xa0\x1f\xb7\x85\xbf)\x97\xd1.\xe1\x9b\x9f\xf3\xdd\xfb\xdb\x03W\xc4+16d\x92q\xf9\x93\x81\xc1\xccZW\xda$\xb6[ O\xa4\xb7\x13\x9f\xc1/i1pmc\xa7\xf4w\xc23x+\xcd!\x16\xe3\x8b\xc4\xf8o\x9a\xe29\x83\\\xcf\xd5J\xb2\xf4\x98X\xd3*\xd6\xc5\xfd\xc0\xaf\xc4\x86\x89v\x0b\xce\x19\xd4\x14\x8f\x85\x11<\x17Gp\xf2OT\xe2\xd9\xc5\xe0b\xb4\xb5\xc5\xd9\xc1\xd4\x14O\xad\xc2\x08\xcd\nqpE5\xc5w\x9c\x1a\xf1\x9bNF|\x06\x05\x8c\x1b\x180fpx\xb8\xb7\x9a\x82vv5\xa5\x88\xf6_\xfc\xd6\xf5\x92\x0b\xe5^\xc594\xe9k\xf7\x08k\xa3y)\xc0!\xe3\xc2\xac?\x13\xffP.\xde3H3P\xff\x94\x16\xbfr\x18V.@Q_\xbc\xfdS3\x9al\x8f\x829b\xac\xb0J\xf7X\xf3}\xd6z:b \x84\x8e\x18\xa7BG\x0c)t\xc4P\xe2\xb7\x15\xd1\x11\xa3-\x1e\x1b\xa6\x12:b8\x89\xdft2\xe23(`\xdc\xc0\x801\x83\x83\x8e\x18CBG\x8c~\xf1[\xd7\xe9\x88q7G\x0c\xb9\x9c.o\xd2\"JvKyY)\xb6\x03<\x94\xef\xbe\x84V\xe3\xf7\xcb\xab\x9b\xf3R5\xa2V.KTc\xac\xbe4\xf8\x99\x18\x89\xaf4zV!\x9b\x06OS\x98|\xa9mc\x90\x17\x9fR\xf1\xec6\x8e\xd6b\x80\xc8\xe1\x89\x18X\xb1\xb0p\x97\xea&\xc7%+\n\xb6\xbe\xfe\x92\x90\xbbZ\x8b\x96H\xe2\xb0\x12\xc7z\x81G\xdd@\xaf\x85|\xe3a\x96y\xd4\x0f<\xeb\x08\x08.z\xb7xV\x12FT\x14\xb0l\xf6n\xf1\xe1\xb8w\xcb\x88\xb6\xc3\xc8\xf6\x03\x9e%\xdf-\x1e\xabW[\xccj\x86\xa0\xb4\xf7 \x8ag\xdf-_B\x03|\xed\x88\xba\xcc\xcd\xdf\xef\x96\x19Y\xfd\xdd\xe2\xc3\xf5\xef\x16\\\x04@\xb7\x8c\x1aT\xee\xae #\xa3>\xebc\xec\xd4\xc5\x1eo\xd0-\x13U\xda\xc5\x16j\x8aC\xc4B\xb7\xdc\xf1\xfa\xed\xebD\x80\xf1\xca\x07\xbfsSSFz\x9c\x8c\x8c\xec\x05\x98\xa0'`\x8c'\xca\x88\xef \xbb-\xe3f\xb3\x911\x83\x0b\xa6\x19`0\xc5 \x1b\xed\xb92\xe2\xe9\xc12\xe2\x16'\xd2-#u:R\x97~\x91&\xdd\x82\x8c?\xe9\x96\xbbT\x83S\xb4G\xb7\xdce\xf5\xa7\x8f\x81\xe9\x16\xf7\xc8\x98n\xb9K]\xb9\xc4\xd6t\xcb]\xd6\x1e\x17\x9d\xd3-wYo\xc7\xf8\x9en\xb9\xcb\x068D\x08u\xcb]V\xde=\xc6\xa8[\xdc\"\x8f\xba\xe5\xee\xf4\x106v\xa9[\x94i\xe0\xaa\xa7\x11\xb6\xef\x18\x9b\xf7+=\xa9:\x93\x19\x8c\x8c5\xcd\xfd@0#tD\xf5\x19*0n\x0dPBG\xd4\x86\x8c\x9d\x07F\xc6Mc#c\x06\x17L3\xc0`\x8aA\xf6\xa5\x1cQ\xab\x1c\x87>ZU\xda\xb4\x87\x0fv\x0b*\xa8\xb0[FO\xae\xf1S\xcb\xac\xd0\xcbm\xccv\xbe\x85L4 \xdd\x99\xb2My\x02\xdf\xff\xf4\xe6\xc5\x7f,/^.\x7f\xf8\xe9\xf9\x8f\x1e\xac\xd0\xb6\xb4K|\xfe\xfd\xe5\xab\xd7n\xc4\xd7\xa6\xb4\x0b\xf4`\xd26\xa5]\xe0\xeb\x0b\x17BmSJz\xed\xb4jl\xcc\xed\xcd\x0f1\xdb\x95\x99\xa3s\x9d\xd7\xf4\xfbx\x9d^_\xbcT&\xaa\x99\xcb\x10)\xc6\x88\xad\xfcn\x19\xc5lj\xca$\x83{\x92\xb5\xd6\x91\xa7q*\x936\xc5\x1f\xbfP\xe2E\x95j\xca\xa4\xed\xf1\xee\x9a\xc6\xa9\xeb\x85<\x0e]F;\xc5\x0c\x17v\x98\x01\x0b%\x89\xaa\x1ek\xcf\xf4\xd3n\x07\xae\xce\x0f6\x83\xfcK:\x8c\xcc&` \xd3O,\xd7\xa7\xb5B\xe5E`&\x1b@\xe5\xf0\xc2W\xa5\x9aa9w:Qyn{\xbe\x9b]\xd56\xb7\xf7\xc6\x18\x06\x9eF\x81\xa7f\x94\xf8\xeaG\xc9\xa8Ur\xf44\x1c9\x05\x0f\xc7\xd5\xf0\xd5VC2J\xe90Z\xf1B\xf8\xe6\xdb?\xfc\xe1\xe9\xff\xf2}}\x82\x0e\x80\xf1\x9d $\xe7\xeb\xc3\xb7\x7f\xf8\xe3\xf5\xd3\xaf\xbd)\xe6\\s\\\xc5\xd1\xfa?\xf8m\xc3\x8bv\xcdo\xdb\xf7S\x1cs\xae\xf2\xbf\xd7\\j\xbf\x94\x0b\x8fG\x15|\x98\xacM\x19\xad\xc8\xb1g\xdd\xd2\x95z\xc8\xa24\x8b\x8aQ\xf3\xf3N\xdaaZ\xe0Z\xf1\x11K\xca\x98\xc5d\xc4\x1a>R\xc9\xa3\xe6\xdb\x88\xd5{\x84\xa2a\xa4\xb2a\xfc\xba=R\xe90V\xf10\xc5\x8a}\xf7\x8d\xb8\xe3\xb5z\xecJ=R\x81\xfe\xab\x1bL\xb5F\xdfY\x0b\xfc\x83>\x8c\x8c\xa8\xba{\xb5\xc5\xd9+M\x96n\x18\x94G\x0d\xddk\xb6\xba\xfd\x1bK\x8a(\xe1K\xf7\xd3\x92\xfb)\xc9\xf1t\xe4\xb5\xc8\xfb-\xed^;\xa8G\x0f)\xf1\\\xf7\xbc\xf6K/%\x82\xb7\"a\xcc\xee\xe8\xadP\xf0W*\x8c\xdb\x0b\xef\xa6\xcaw\xb6\xf3\xf9/\xb9\xde\x8ar_\xd4\x94\x8c\xdc\xe1f\xac\xaf\xffn\xe6QI\x8f\xea\xb9\xba\x9fG\xd4\xca\xc5\xb5\xdcp\x86\xfe$\xb6\xd6\x172`\xef\xb9\x8c\xd7\xb3\x85\n\x9e8@\x81\x15\x05\xdf\x1fd\x98`\x91\xc2>\xcac\xce6\xc0T0 \xa8`\xc0>/i\x8d+\xdb\xaf%\xd4R\x8c[v1\xa6\x04\xba\x1b\xb0C\x02AFQ\xdf\xc4\xc0\xedX\x82 \x8eJ\x82R-\xa0\xd5\x0bh\xac\x1e\xaddp[\xef\x9di\x1ch\x0d\x80\x93\x16\x00\x9cH\x18\xf8\xfe7\x82\x1d|Fp\xdd\x02\xae]\x03n\xdd\xe3A\x80@S\x1d\xb0\xa4\x06\xac\xfd\x8d\xb2\xba\x1d\x86\x8f\xcb\xe0q\xa6\x198v\x1a\x9e:0\x86$0\x82\x0e0\x02\xf8\xf7\x83\xf8G\x83\xf9\xa1a{/\x80\xdeqX8\xced\x07\xfb\xc6\xb3\"x\xbb\xc6 \x1c\xf7\xac\x0dB-\x01\xa1\xedYA\xec\xc6\xc7\x9a\xf7D\xba\xdcc\xdb\xba\x9d\x92.\xb0=\x11\xba\xc0\xb6C0[e1\xd5\x05\xb6n\xc1\xf9\xcf\xe1\xc3\xbb\x9f\xce3\x9e\xa7\xc7l\xcd\xe5e\xb4j\xbe\x1d\x93\xe8\xd7#\x8foAL\xc2\"\xda\x9a\x9b\xd1\x0b\x9d\xeaP\xdd%\x91E,\x8e\xfe\xc6{o\x9fV\"/\x9a^\xa71\xac\x8e\xdb-\xcfLG.\xd4\xbd\x17\xaa=\xb0?\xe6\xe5\x02\x00\xac\x80\x98\xb3\xbc\x18.7M8<8\x7f\x00\xeb+\x96\xb1u\xc1\xb3\x85\xbcC[\x9c\xc2 \xe7\xbb=O\xca\x05\xea\xc3\xbb\x9f\x1e\xe6\xf2.\\\xf5\xa12\x97\xd1\xf0\x17\xc4\xab\xdbc\x1c\xdf\xc2\xafG\x16\x0b-l\x94\x8et\xb1R\x1b\x8fX\x0eQ2\\\xd0G\xf1\xe9\xf3]\x9a\xeeb\xbe\x90\xfaX\x1d\xb7\x8b\x97Gu{\xed\xc7\xc7\xaa\xe6\xb2\xe8\xfc*=\xc6\x1bXq\xb5\x8e\xaeY\x92&\xd1\x9a\xc5r~\x0c\x7f\xe5\x11_\xec\x16gBu2\xa3\xc1\x83\xc5\x03\xb1\xaa\xc9\x1bL\xd6k~(\xf8\xe6\xb1-\x07\xe5E\x02\x07\xa1\xcch\xcd\xcf\xa0\xe0l\x9f\xc31?2\xa1\x02\x95\xe9\xe9\x10\xc5\xa2fE\xaa\xf2/D \xcbn\xd5\x05)\xb7\x07\xae\xef/)\xae\xf8\xed\xf0g\xd4\n\x08Q!\x0e\xd9\xc7\xbc\x9e+\xb3\xe0\x9fe\xb7=On\x17\xf0\xa7\xf4\x13\xbf\xe1\xd9\x99\\\x88?\xbc\xfb\xc9\xd8\x1e\xe2\x95\xe2\x8a\x0f\x7fD\xae\x8c\x1c>^\x15\xc5\xe1\xe3\x99\xfao\xfeQ\xe6\xa9JR\xfd\xeb\x99\x1cEk\x96@*g\x8cl\xa9\xd8Q\x8e\x07\x9d\xd8\xd3\xf2\x0d\x9e\xdd\xf0L5{\xcf\x0e\xb9\x1a\x12\xb2\xa6EZf\x02\x95\x8e\xb9H\xdd\xb6\xc2\x84\x81\x14\xc7\xe9\xa7\xfc\x99\xa5/\xfe\x19.\xb6UMEW\x1e\xb2T\xec\x8a\x9b\xb21r+\xce\xf3\xe3\x9eo,\xb7\xcc\xfc\xb3\xd8z\xfe\xf4\xfe\xfd[\xf8\xf1\xd5{sI\xcd\x87w?\xa9\xf9p+/\x9cg\xf0_\xed!\xfa\xfe\xf6\xc0\xff\xf2_\x7f\xb1\xe5\xb6\x90\xd7f\x8bN\xd4\x03B\xad\xe5R\xd5\x87,\xdd\x1c\xd7\x1cX\xa2\xf6\x95a\x8a\xd9?\xc3\xf3*\xa7F./\xdbaBY|#\xf4\xb9fk1\xc1\xd3\xf4\xfax\x00\x1dl\x07+\x96\xf3\x8dn\x91\xad\x9e\x1f\xde\xfd$+u\xc5n\xe4\x00\xda\xd7F\xf5F\x0dkf\xda \xfe}\x93F\x1b`\x89\x0d\xdaP5\x92\x938\xe3\xdb4\xe3g\xa6\x10Q6+\xa2U\x14G\xc5-$\x9co\xe4\xc0X\xc9(U9x6\x96\xb2\xd3D,p\xc9\x8e\xcb\x17\xe5,[\xc0\xa3\x0f97\xb9\x80\x84j\xc4\xa0\x13\xab\x87\x1au,a;\x9bi\xb7\xca8\xbb\x16\xab\x84.|\xf1xXw\xaf\xd3\x82?\x83B\xac\xd8\xdbc\xb2VsE\xb4I\xaf0\xebc\x96\xf1\xa4\x88okNg=\xa9\xd3\xed6ZG,F\xec\x12\xab\xe3\x162.\xd6~~&S\xaeD\x85\xf9\xc0Q\xf4\xb2\xb4\xc7\xca\x19\xb6\xe2\xbb(ID#>E\xc5\x95e)\xbf=\xf0\x85\x1a\xdd\xec\x10\xe5\x8bu\xba\xb7\xad\x85\x97r\xde\xe5\x90\x16Wj\x8a'\xed\xb5\x04\x1ei\xfb\x90\xef\x0f\xc5\xad\x9e\xa8\x8fa/}\x85+\xcbh\x94\x0d\x92\xfe\xf8h\x7f\x88\xb9\xd8\xae\xe4\xa8\x87\xfc\xc0\xd7\xd16ZC\xce\xf7,)\xa2\xf5\x00-3\xe0}\xf5]\xd2\xb0-~\x16+\xc7\x8a\x9b\x8ck5{\xe0d\xcb7\xf9rV\xe9\x0d7\xed\xd3\xe3\xb6\xf7\xaa4\xa4\x19\xf3\xf1yr\xfb\xb1::\xb0\x04X\xb6\x8a\x8aL\xcc\xbe\x81\x1a\x99\xa5\x99\xc5\xa9\x1e?\xc0\xfa\xfbK,\x94r\x8dW\xb5Z\x0dZC\xa5\x8130\xbe\xde\x9a\xd1\x1eG+YU\xbd\xb4\xe7\x90\x1f\x0f\x874\x93\x1b\xe3\x81\xad\xaf\xcf\x8f\x89\xf8\x8f\xd8\x0eUg\xe7fZ\x0d\xdb\x03\xe9\x16\x8e\x85Zu\xcc|\xcd\xc5\xca\xc76\x9bHM^\xd8\xf1\x84g\xac\x90\x15\x16\xa7\x982\xad\x91\xf8\x96\xea\x9a\xfe\xf2_}fb\xd4\xc2\xd3g\xf0V\xd4OLV]UV\xcf\x80\xfd\xe2_\xfe\xc56\xcf~HS\xd8\xa6)|\x07\x8b\xc5\xe2_\x07\x1f\x155c\xc9\xed\xf0C,\xb9]\x88:\xfd\x90\xa5\xfbG\xdb4}<\xfc\xf8b1\xbc%E[x$\x8a\xfc [\xf7>}\xf4O\xa2\xcc\xc7\xf0\x9be\x85\xb5\x95\xfbw\xbbr\xbf\xb5(\xf7\xdf\xd9\x0d\x9b^\xbb\xf0\x9d4\xbe\xc4\xe7&T_\x94?\xfa!M\x17\xeb\x98\xe59B{\xaa\xca\xe2E\xd5\xf0\xda\xcb\xc3\xf5\x19Pk\xa9\xd7\xdfY\xf4\xfa\xf6\xb6\xb8J\x13\x8bE\xa5j\xf8C\x9a>Z,\x16\x8fm#R)\xf5\x91\xf599r\xa5\xda\xc7j]\x14v\xa1\x94\xfe\xf2\xd5\xe5\x8bw\x17o\xdf\xbfy\xf7\xd8\xe6P\xaaF\xba\xbd\x12\xaa\x1avu\xff\xde\xa2\xee\x1fS\x8b\xdd&T\xfd\xec;\xf8\xa7\xc3j\xf1C\x9a\xfe\xb6X,\xfe>\xfc\x02Kn\xcf\x84\xb9)\xde:(\x9b\xe9g\x96\xe5W,\x16\x9d`o\x98M\xbd\xed\x1aY\xaa\x13m[\x95\xf9\x90\xec\xab\xea\xc8\xca\xca\x89&\x9f\xfa\x9f\xdfA\x12\xc5\xd6 b\xaf\xe3\xc0L\x10\xa7M\xd9\x0ff\xe57'\x0bX\xddV\x96\x98\xd9\x9b\xd4\x9d\x9a\xb7\xc6\xb9%,\x97\xfe\xa2\x1fvXZ\xe7\xe2\x10\xbd\x90?\x08+\xf5\xa18\x04\x95\xfb\xa7\xd8[Mv=5:\xfa\x0b/7\xaa$\xbe5\x87\xc0\x93\x13zi\x0d\x03\xdb\x16\\\x19h\xd2)\xf0\xf0\xfca\x7f\xd1zW5URGN\xaeG\xf0\x83m\x9a.V,\x93\x8d\xf9|~\xbb\xf8\xdb\x03\xa5\x15up\x1a>'\xca\xaa<\x10\xef\x88\xb5\xba\xf7\xb1\x7f\xbf|\xf3\xba\xff\xd7\xef\xbe\xfb\xee\xbb\xe1\xfe\x14\xefW\x8e\x0deJ\xa6b\x19\xd0&\x92:\xa3\x1dsn\x1c\x9d\xbbc\xcc\x06R2\x9f\x16%^\xdb\xf0\xca\xd09\x03\xbe_\xf1\xcd\xa62y\xce\xb4%5\xe0\x0e\xa9\x19 [\xa9\xbc\x8f\xff&\xd4\xf7Q\x9f\xec\x1b>`\xd3\x19\x0b\xb3\x94\xd8\x8e\xccb\xf4\x88E\xa5:\xc6n\xa3\x98\x0fo\x18f!z\xcb\xb3\xe6E\xba\xb7\xcc\xae\xe6X?S\xb6~k\x02\x98\x9b\x85\xcb\xcf\x8b\x91,S\x92\xcaq\xdc_\xf8G9\xf3\xcc\x00\xbfJ\xe3\x8dNuZ\xd5L\xfa\xfa\xf4\xc4\x00\xed[\xd3\xf3\xa2\xbf\\\xf9\xd9rj\xc0#\xb1`\x19\x95\x9c8r\x8c\xaf\xf1/\xff\xf5\x97\xc7\xb6Y4\xd5\xe0j~\xd9>\xbe\xa4\x9eD\xb1O\x17\xdf>\xfd6\x7f`\x19'\xea\xbf\x05\xdb\xd5\xfc\xeaO\xe0\x92g7\xd1Z\x1cb\x1f\x9c\xaf\xd3|\x9f\xe6\xe7+\x96\xf3\xf3\xa2$\xbd\x9d\xdf<]\xf1\x82==\x97\x90R~\xfe\x9b\xe2\xd1\xfc]C+\xbb*\x9e1?\xee\xf7,\xbb\x95\x98\x91\xc4|\xbe\xbfU\xd7G\xc3\xafG\x9eE<\xd7\xa8\x94\xd0\xfc.\xba\xe1\x89\xa6\xe4\x98\x8d9=p\xd5\xf6\x8b\xcdi\x19\xfa\x19\x83\xfe\xd4\x1a\xf1\xe0\xdbo\xbey\xd0\x0f!A~\\\xafy\x9eo\x8f\xf1\x97\x87\x1d\x0d3u\x06\x0b\x06k\xe1`\xa5~\xa0\xdc\x1d\x08g\x07\x9aycm\x11\xa0Z\x058\x86MaE\xd1\x8c`\x195v&\x0dJ\xa5\x80S\xab\x03c\xc6\xca\x94\x19H\x03n\xed\x14{\x87\xcc\xd8\xef\xa8\x9c\xee>\xd9\xdbQu\x04t=\x01\x9f{\x1d=f\xa06nP\xe9\xc8Q\x99\xd3C}\x1e\xeb\x93T2w\x86\xf3\x19s\x99\xfbd-\xc7\xe5'Gv\xdd\x9dP_\xed\x19\xc3\x9d?\x89\xa1\x049\xe4\xfb\x0e0\xe3\xed\x1b\x04\xb84\x1c\xb0\x1b\x85\x12\xf4>l\x04\xad\x01p\xd2\x02\xe0\xf6g#\xf8}\xda\x08v\x0c\x1a\xc1u\x0b\xb8v\x0d\xb8u\x8f\xc3~\xdez\xc1\xce\x80u\xcb<\x8dn%\xbau~y\xa3\x91\x19\xa2\xa7\xae\xaeS\xce\xe2\xa9?>}vf\xf7<\xccS\xb7\xc9%\x8b\xf2\xd4\xdf\xc6\xe5@\x9e\xfa\xab\x8e\x19\x8c\xa7\xfe\xbcC\xfe\xe1\xa9?\xed\x9e=\xd8-O\xf0\xb4\xf5\x0d\x9b\xe5W\xac_\xb3\x9cz\x8a\xcf(\xadM\x1a\xd9\x80\xe8\x02d'\x80\xf3i\xe0\xfdg\xcd\x8e3~Dip+\xc4E\x99\xd3\xff\xa6:h\xa1\xdcC\xff\xf2\xd4\x82?\x02\xbc\x96WAK~_\x1c\x0b\x85\xc2\x15\xcf\xb8$M\xc9\xb5s\x01\xf0g\xfe0\xe3\xf0\xd7c^\x00\xdbe\x9c\x8b\xd3\x81&\x7f\xa5\x99\x189\xd2\xa7k\xfd\x92dj\xee9Kt\x1bTE\x9f\x1f\x0e\x7fb\xf9\x15lR\xae8:\x9a\x02.\x8a\xcf\xb9\xa8P\xffy@\xcf\xb8\x97\xe2h\xd2\xf0\xf9k:\xb7<[0\xcd[\xa8S\xcb\xcbCQO\xd1\xf6\x1b\xfa&\x1c\xc4\xf6\x8fA\x98\x91\x8c2pqmP\xb217,.\xe5u\xfd\xb8\x86)q\xa8\x118\xd6\nT\xb41_\x0e\xacIMq\xac\x0cxT\x08\xccg\xd0O;\xad?u\xc1G6\x199\xbd\xe5\x1d\x1f\xf4SI\xef\xcd\xf3\xe3Kq\x88}2\xd2\x7fs\xbdC1eH\xd4x\xfd\xb8-\xfcM\xb9\x94\xb7b\xfe\x9c\xef\xdek\xd0J\xb1\x8c\xc5\x92\xa7o+\xad\x11#\x1a\xee\"\x1b\xd1\xe7Dz;\xf1\x99\x0c\xd8q\x89\xf8\x1f\xec\x84g\xf0V\x9aC,\xc6\x17\x89\xf1\xdf4\xc5s\x06\xb9\x9e\xab\x95 \x82\x9c\x9b\xe2~\xe0Wb\x0bz\xe9\x16\x9c3\xa8)\x1e\x0b#x.\x8e\xe0\xe4\x9f\xa8\xc4\xb3\x8b\xc1\xc5hk\x8b\xb3\x83\xa9)\x9eZ\x85\x11\x9a\x15\xe2\xe0\x8aj\x8a\xef85\xe27\x9d\x8c\xf8\x0c\n\x1870`\xcc\xe0\xf0po5\x05\xed\xecj\x8aS0\xaa\x11O%\xb9x\xa2\x9b\xe2\x15\xc3kddm\x9d\xba\xb2\xaah\x94l\xf8g\xf7j\xba\xcf\x17\xbfu\xdd)\xec\xd7\xc8|\x9a\xf4\xb5{dxp\xc9\xa6\x91\xc1\xc3\x19\x17f\xfd\x99\x0e\xbf\xd9G*VH\xfdSZ\xfc\xcaaXK\xcc\xb2M\x07\xb8jm\xa9\x19M\xb6G\xc1\x1c1VX\xa5{\xac\xf9>k=\x1d1\x10BG\x8cS\xa1#\x86\x14:b(\xf1\xdb\x8a\xe8\x88\xd1\x16\x8f\x0dS \x1d1\x9c\xc4o:\x19\xf1\x19\x140n`\xc0\x98\xc1AG\x8c!\xa1#F\xbf\xf8\xad\xebt\xc4\xb8\x9b#\xc6\x17\x9e\xde\xb3\x1a\xbf_^\xdd\x9c\x97\xaa\x11\xb5rY\xa2\x1ac\xf5\xa5\xc1\xcf\xc4H\xb4\xa5\x1d-\xb5m\x0c\xf2\xe2S*\x9e\xdd\xc6\xd1Z\xa6\x1e\x15\xc3\x131\xb0dR\xd2\xa5JJ\xbad2\xe3\xe9\x97\x84\xdc\xd5Z\xb4D\x12\x87\x958\xd6\x0b<\xea\x06z-\xe4\x1b\x0f\xb3\xcc\xa3~\xe0YG@p\xd1\xbb\xc5\xb3\x920\xa2\xa2\x80e\xb3w\x8b\x0f\xc7\xbd[F\xb4\x1dF\xb6\x1f\xf0,\xf9n\xf1X\xbd\xdabV3\x04\xa5\xbdOP<\xfbn\xf9\x12\x1a\xe0kG\xd4en\xfe~\xb7\xcc\xc8\xea\xef\x16\x1f\xae\x7f\xb7\xe0\"\x00\xbae\xd4\xa0rw\x05\x19\x19\xf5Y\x1fc\xa7.\xf6x\x83n\x99\xa8\xd2.\xb6PS\x1c\"\x16\xba\xe5\x8e\xd7o_'\x02\x8cW>\xf8\x9d\x9b\x9a2\xd2\xe3ddd/\xc0\x04=\x01c\xd6-#\xae$\xeb\x96\x11\x17\x95u\x8b\xdf\xf5e\xdd2\xfaR\xb3n }\xd5Y\xb7\x8cb65e\x92\xc1=\xc9Z\xeb\xc8\xd38\x95I\x9b\xe2\x8f_(\xf1\xa2J5e\xd2\xf6xwM\xc0k\xdc\xbae\xd6\xcb\xdd\xfa\xa4\x9aa9w:Qyn{\xbe\x9b\x9d\xfb\x9d\xfbF\xfc\x0d\x03O\xa3\xc0S3J|\xf5\xa3d\xd4*9z\x1a\x8e\x9c\x82^w\xf6\x1b\x19\xa5t\x18\xadx!|\xf3\xed\x1f\xfe\xf0\xf4\x7f\xf9\xbe>A\x07\xc0\xf8N\x00y]\xd7\xfa\xf0\xed\x1f\xfex\xfd\xf4ko\xca\x9d\xdd\xfdo\xc4\x87\xc9\xda\x94\xd1\x8a\x1c{\xd6-]\xa9\x87,J\xb3\xa8\x185?\xef\xa4\x1d\xa6\x05\xae\x15\x1f\xb1\xa4\x8cYLF\xac\xe1#\x95\xbc\xfb\xe9<\xe3yz\xcc\xd6\xfajo9\xe7\x8eI\xf4\xeb\x91\xc7\xb7 &b\x11m#^\xbb7Z\xcf\xfc\xea\xbaj\xcb\xd5\xd1YZ\xa4\xeb4\x86\xd5q\xbb\xe5\xe5M\xba\x0bu\xf7\x85j\x0f\xec\x8fy\xb9\x08\x00+ \xe6,/\x86\xcbM\x13\x0e\x0f\xce\x1f\xc0\xfa\x8ael]\xf0l!o\xeb\x96\x17\x92\xe7|\xb7\xe7I\xb9H}x\xf7\xd3\xc3\x1c\x0e\xac\xb8R\x1f*\xf3\x19\x0d\x7f\xa1\xe8\xb8\x03]\xeaH\x17+\xb5\xf1\x88\xe5\x10\x0d\\\xcb-\xe4\xa3\xf8t\xef\xfd\xbd\x1f\x1f\xab\x9a\xcb\xa2\xf3\xab\xf4\x18o`\xc5\xd5Z\xbafI\x9aDk\x16\xcb\xf91\xfc\x95G|\xb1[\x9c \xd5\xc9\xac\x06\x0f\x16\x0f\xc4\xba&o1Y\xaf\xf9\xa1\xe0\x9b\xc7\xb6<\x94\x17 \x1c\x842\xa35?\x83\x82\xb3}\x0e\xc7\xfc\xc8\x84\nT\xb6\xa7C\x14\x8b\x9a\xe9\x9b\x94WQ\xc2\xb2[uI\xca\xed\x81\xeb;L\x8a+~;\xfc\x19\xb5\x02BT\x88\x83\xf61\xaf\xe7\xcb,\xf8g\xd9m\xcf\x93\xdb\x05\xfc)\xfd\xc4ox\xa6\xae\x8c\xff\xf0\xee'c\x7f\xe8\x0b\xea\x87?\"WF\x0e\x1f\xaf\x8a\xe2\xf0\xf1L\xfd7\xff(sU%\xa9\xfe\xf5L\x8e\xa25K =\xa8\xbb\xd3\xe3[\xb9\xab\x1c\x0f:\xb9\xa7\xe5\x1b<\xbb\x91\x17\xe1\xb3\x02\xf6\xec\x90\xab!!kZ\xa4e6P\xe9\x9c\x8b\xd4\x8d+L\x18Iq\x9c~\xcam\x97E\xff3\\l\xab\x9a\x8a\xae\xe4\xdc\xe4\x03\x12\xaa\x11\x83N\xac\x1ej\xd4\xb1\x84\xedl\xe6\xdd*\xe3\xecZ\xac\x12\xba\xf0\xc5\xe3a\xdd\xbdN\x0b\xfe\x0c\n\xb1bo\x8f\xc9Z\xcd\x15\xd1&\xbd\xc2\xac\x8fY\xc6\x93\"\xbe\xad9\x9e\xf5\xa4N\xb7\xdbh\x1d\xb1\x18\xb1K\xac\x8e[\xc8\xb8X\xfb\xf9\x99L\xbb\x12\x15\xe6\x03G\xd1\xcb\xd2\"+g\xd8\x8a\xef\xa2$\x11\x8d\xf8\x14\x15W\x96\xa5\xfc\xf4>u\xdbZx)\xe7]\x0eiq\xa5\xa6x\xd2^K\xe0\x91\xb6\x10\xf9\xfeP\xdc\xea\x89\xfa\x18\xf6\xd2<\\YF\xa3l\x90\xf4\xc9G\xfbC\xcc\xf7\xe5u\xf8\xf9\x81\xaf\xa3m\xb4\x86\x9c\xefYRD\xeb\x01j\xa6\x9cx\x13\x18\x0d\xc8\x83A\xc3\xb6\xf8Y\xac\x1c+n\xb2\xae\xd5\xec\x81\x93-\xdf\xe4\xccY\xa57\xdc\xb4O\x8f\xdb\xde\xeb\xd2\x90f\xcc\xc7\xe7\xc9\xed\xc7\xea\xf8\xc0\x12`\xd9**21\xfb\x06jd\x96f\x16\xa7z\xfc\x00\xeb\xef/\xb1P\xca5^\xd5j5h\x0d\x95\x06\xce\xc0\xf8zkF{\x1c\xaddU\xf5\xd2\x9eC~<\x1c\xd2Ln\x8c\x07\xb6\xbe>?&\xe2?b;T\x9d\x9d\x9bi5l\x0f\xa4[8\x16j\xd51\xf35\x17+\x1f\xdbl\"5ya\xc7\x13\x9e\xb1BVX\x9cb\xca\xd4F\xe2[\xaak\xfa\xcb\x7f\xf5\x99\x89Q\x0bO\x9f\xc1[Q?1YuUY=\x0b\xf6\x8b\x7f\xf9\x17\xdb<\xfb!Ma\x9b\xa6\xf0\x1d,\x16\x8b\x7f\x1d|T\xd4\x8c%\xb7\xc3\x0f\xb1\xe4v!\xea\xf4C\x96\xee\x1fm\xd3\xf4\xf1\xf0\xe3\x8b\xc5\xf0\x96\x14m\xe1\x91(\xf2\x83l\xdd\xfb\xf4\xd1?\x892\x1f\xc3o\x96\x15\xd6V\xee\xdf\xed\xca\xfd\xd6\xa2\xdc\x7fg7lz\xed\xc2w\xd2\xf8\x12\x9f\x9bP}Q\xfe\xe8\x874]\xacc\x96\xe7\x08\xed\xa9*\x8b\x17U\xc3k/\x0f\xd7g@\xad\xa5^\x7fg\xd1\xeb\xdb\xdb\xe2*M,\x16\x95\xaa\xe1\x0fi\xfah\xb1X<\xb6\x8dH\xa5\xd4G\xd6\xe7\xe4\xc8\x95j\x1f\xabuQ\xd8\x85R\xfa\xcbW\x97/\xde]\xbc}\xff\xe6\xddc\x9bS\xa9\x1a\xe9\xf6J\xa8j\xd8\xd5\xfd{\x8b\xba\x7fL-v\x9bP\xf5\xb3\xef\xe0\x9f\x0e\xab\xc5\x0fi\xfa\xdbb\xb1\xf8\xfb\xf0\x0b,\xb9=\x13\xe6\xa6x\xeb\xa0l\xa6\x9fY\x96_\xb1Xt\x82\xbda6\xf5\xb6kd\xa9N\xb4mU\xe6C\xb2\xaf\xaa#++'\x9a|\xea\x7f~\x07I\x14['\x88\xbd\x8e\x033A\x9c6e?\x98\x95\xdf\x9c,`u[YbfoR\xf7j\xde\x1a\xe7\x96\xb0\\\xfa\x8b~\xd8ai\x9d\x8bC\xf4B\xfe \xac\xd4\x87\xe2\x10T\xee\x9fbo5\x19\xf6\xd4\xe8\xe8/\xbc\xdc\xa8\x92\xf8\xd6\x1c\x02ON\xe8\xa55\x0cl[pe\xa0I\xa7\xc0\xc3\xf3\x87\xfdE\xeb]\xd5TI\x1d9\xb9\x1e\xc1\x0f\xb6i\xbaX\xb1L6\xe6\xf3\xf9\xed\xe2o\x0f\x94V\xd4\xc1i\xf8\x9c(\xab\xf2@\xbc#\xd6\xea\xde\xc7\xfe\xfd\xf2\xcd\xeb\xfe_\xbf\xfb\xee\xbb\xef\x86\xfbS\xbc_96\x94)\x99\x8ae@\x9bH\xea\x8cv\xcc\xb9qu\xee\x8e1\x1bH\xcb|Z\x94xm\xc3+C\xe7\x0c\xf8~\xc57\x9b\xca\xe49\xd3\x96\xd4\x80;\xa4f\x80l\xa5\xf2>\xfe\x9bP\xdfG}\xb2o\xf8\x81Mg,\xccRb;2\x8b\xd1#\x16\x95\xea\x18\xbb\x8db>\xbca\x98\x85\xe8-\xcf\xf24\xb1\xce;\xed\xaf\x92\xb7\xbb.e\xd7~\x07O\x87\xbfP\xbe$I\x02\xfa\x9do\xfd\xb71\x00k-\x1fH\xa5>x\x06\x0f\xba\xa6cS=\x0b\xd5\xf2\x07g\xb62e\x9b_\xb3\xbd(\xf7\x7f\xab&\xfd\x1f\xebK\xa2\xcd\xadw|\x1b~\xb1\xd5\x87\xad\xe6\xa0S\xc3$\xca\xe1\x13\x8f\xe3'\xd7I\xfa)\x91\x0b\xca\x15\xcb\x81\xc1\xfa\x98\x17\xe9\xde2\xbb\x9ac\xfdL\xd9\xfa\xad `n\x17.?/F\xb2LK*\xc7q\x7f\xe1\x1f\xe5\xcc3\x03\xfc*\x8d7:\xddiU3\xe9\xeb\xd3\x13\x03\xb4oM\xcf\x8b\xfer\xe5g\xcb\xa9\x01\x8f\xc4\x82eTr\xe2\xc81\xbe\xc6\xbf\xfc\xd7_\x1e\xdbf\xd1T\x83\xab\xf9e\xfb\xf8\x92z\x12\xc5>]|\xfb\xf4\xdb\xfc\x81e\x9c\xa8\xff\x1eX\xc6\xf6\xbc\xe0u\xda\xea\x13\xb9\xe6>\xd3$\x99Z1Q\xf2Lz\x81k\x7f\xca\xf8\xaf\xc7(\xe3\x9bgPd\xc7\xfa\xd9\xb7\x0bX\xe9=Mw\x91\x18\n\xb6k\xd4\xe9\x92g7\xd1Z|\xe2|\x9d\xe6\xfb4?_\xb1\x9c\x9f\x17%#\xef\xfc\xe6\xe9\x8a\x17\xec\xe9y\x92n\xf82J\xb6\xa9z}WEY\xe6\xc7\xfd\x9ee\xb7\x12\xc9z\x9dn\xf8E\xb2M\xe1\xd7#\xcf\x8c\x83^\xfba@\x14!\xf3 \x19#!=p\xd5\x0f\x17\x9b\xc6\xdb\xfag\x03B\xd5j\xfc\xe0\xdbo\xbey\xd0\x8fdA~\\\xafy\x9eo\x8f\xf1\x97\x07aiSe\xd9\xd2d[\x06\xbf\x00\xd6\xaf@\x0d\xddXZ\xd3s[?\x06\xa8\x0f\xca\xa7\xbe\xb5`\xd5H\xb7O5p\xad\xf9\xa0\x11\x99\xb7\xa7\xff\xa85W\xf6\xb4\x9fl\x8e\x9a\x01\xc6\x19\xe2\xb3q\x94\x17<\x91\x14\x87Q\xe5$\xbc\xf8\x94f\x03\x9aG\x94\x81\x1c\x9a\x83e\xac\xafX\x92\xf0>\x0c\x15p\x85\xa0\x1c\x8d\xfb4\x89\xae\x87\x18o\x88\x0fI\x9f\xad\xad\x84I\xa6b\xf1\x19s1\x0d\xa2\xcaB\xb2\xc3\x1aG\x8a\xb1\x94WKN>\xbc.Y\x15aW\x82\xdcj\xc7\xf4\x15;\x1c\x96\xa3\x0b\x99b\x88\xef\",\x85w\xb0\x98\xd51\x8a7\xcb\xe6\xee\xdf\x16D1\xbb\x14\xbb\xa5 j\xb3\xe1\x07km\x86\x89\x84V\x12\xa1u()\xb1\x0f(\xfd\x1c+\xac4OD\xf3\xcbG\x15\xa9m\x9fn\x8e1o\xdb\x80\xa7b\xd5\xbc\x12\xef\n\xe8\xf2\x07\xdf\xc9\xed\xccF\xf7\xef\xaf\xaf\xf8\xfa:?\xee\x87:R=\xf9\xb3\xaaiT;\x8a\x8b\x13\xc6/\xaa\xe6\x17\xfd)6\x95q\xbb\xcc7\xd7\x93\x0c\xe0\xb2B\x0f.\xa3d-\xf3|\x8a\xf2\x9f\xe4\x9bk\xf8f\xf1\xfb\xdfu\x1f\x13\x1a\xb6j\xad\xce'\xed\x11\xffS3\x87KFX \xe2\x0c\x96\xdc\xf5f\xc9%\xfb\xf5\xc8\xf3\xa2\xf9\xa5\x92JV\x1a\xef\xc4\";\x11b\x91u\x08f\xdd,\x88EF,2b\x91\x11\x8b\xac&\xc4\"#\x16\x19\xb1\xc8\x88EF,2b\x91\x11\x8bL\n\xb1\xc8\x88EF,2\x9c\xd6\x89EF,\xb2\xbe\x9f\x88Ev\"\xc4\"k \xb1\xc8:\x85Xd\xc4\"#\x16\x19jp\xcd\xc2\"\xf3\xe7j\xe5\xb7\xc9:Jtj\x93\x1e\xa6\xd6\xa5z\xa6$jIr\x96~\xb1\x8f\x9f\xa5\xdf\xd1\xbf\xde3zVCimQ\xe5\xae\xd24\xe6\xec\x14!m\xc3oZO\x8e\x99\x1cL\x8f\x10\xfav\"\x84\xbeu\x08\xa1o\x84\xbe\x11\xfa\xd6\x10B\xdf\x08}\xeb\x14B\xdf\xdaB\xe8\x1b\xa1o\x84\xbe\x11\xfaF\xe8\x1b\xa1o\x84\xbe\x11\xfa\xa6\x04\xa1uB\xdf\x08}\xeb\xfb\x89\xd0\xb7\x13!\xf4\xad%\x84\xbeu\n\xa1o\x84\xbe\x11\xfa\x86\x1a\\_8\xfaVe\xfe\xe6E~\x1e\xb3\x82\xe7\xc5 \x14\xf7\x93|\xa4\xbc\xfa\xe8\x92\x17%*\xa7\xde\xae\x92\x89?\xc9y\xd1\x87\xce\x9d\x16\xa3\x1f\xbcg@\x9d\xba\xbea\xe8\xb2\x19\xabs\xc2v\xbf\x87\xed\xde\xb9\xe2\x0b\x80v\x101\xd9V=\x08A\\\xe0\x86\xa81 k\x0dHP\n\xb0\xd5W\x82\xf5\xea\x18\x99\x05\xa0\x82\x80 \x15\xcc\x02T\xc1\x94`\x15\xcc\x06X\xc14\xa0\x15\xcc\x07\\\xc1\\\xe0\x15\xcc\x04`A`\x10\x0b\xa6\x06\xb2 8\x98\x05S\x02Z\x10\x1e\xd4\x82p\xc0\x16\x04\x06\xb7 \x1c\xc0\x05\x1e \x17\xcc\x01tAx\xb0\x0b\xfc\x00/\x08\x0fz\xc1T\xc0\x17`\xc0/p3N\x90 \x18\xcc\x0b\x84\x9d|\xceb6\xcd\x02\x88A\x08P\x0c\xe6\x00\xc6`\x06p\x0c\xa6\x05\xc8\xc0\x0d\xc6\x01,P\x06\xee`\x19`\x1c\xcf#@3@\x96oq\x8fM \xa0\x81\xb7\xf6\xdd\x804@6\xdd\x13P\x831\xa0\x1a\xd8U>-\xb8\x06n\x00\x1b8\x80l\xe0\x04\xb4\x01\xbeW\xfc\x007p\x06\xdd\xc0\n\xbc\xc1\x94\xe0\x1b\xf8\x00p0\x01\x08\x07H\xd5;\x82q\x10\n\x90\x03l}-3) 8\x07\xa1\x01:\x08\x0b\xd2AP\xa0\x0e\xf0`\x1dX\x01;\xb0\x82v\x10\x08\xb8\x83p\xe0\x1d\x84\x06\xf0\xc0\x13\xc4\x03w \x0f|\xc1<\xf0\x02\xf4\xc0>\xf1\x01\x81\xbd\x80\x03\xfe\xe2\x02\xee\x81/\xc0\x07> \x1f\xd8\x95\x11\x0e\xec\x83\xd0\x80\x1f\x04\x04\xfd $\xf0\x07\x13\x0f@G\x00\x10\x9cA@\xa8\x01\x81\xa7r\x93\x16Q\xb2[\x1e\xd2O\xc3w\xe0#]\x0460J\xc9!K\x0fi\xce\xb3\xe5!\x8b\xd2,*\x10\x80\xcd$_n&\xad4\xb8Xg\xca\xcaN\x94\xb2.\x07\xb6\x8b\x12\xd9g\xdd\x95o|\xabzX\xb9\x88\xb9\xf49\xd4\xfej>\xdb\x05PVR\xd8\xb0+;j\x95\xf0\xcf\xc50D\x86\xd27\xca\x0d\xa4\xf3\x8a\xfe\xf7\x90/\xc6\xd4\xc7t\x82\xf8\xa7\xf6\x8f\xb2\xe2\x06\xccE\xde\x80\x99\x08\x1c\x10\x98\xc4\x01S\x139 8\x99\x03\xa6$t@xR\x07\x84#v@`r\x07\x84#x\x80\x07\xc9\x03\xe6 z@x\xb2\x07\xf8\x11> <\xe9\x03\xa6\"~\x00\x86\xfc\x01n\xc6 \x92\x04\x02\xf3\x12AN>G\xc9\x13\xc6\x10C`\x06r\x08LK\x10\x017\x1a\x03`\x89\"\xe0N\x16\x01\x0c\xf0:\x824\x02\xc8\xf2)y\x82+\xa1\x04\xc6\x90J\xc0\xae\xf2i\xc9%\xe0F0\x01\x07\x92 8\x11M\x00\xdf+~\x84\x13p&\x9d\x80\x95x\x02S\x92O\xc0\x87\x80\x02\x13\x90P\x00\xa9zG2\n\x84\"\xa4\x00\xb6\xbe\x94<\xc1\x97\xa4\x02A\x89*\x80'\xab\x80\x95\xb0\x02V\xd2\n\x04\"\xae@8\xf2\n\x84&\xb0\x80'\x89\x05\xdc\x89,\xe0Kf\x01/B\x0b\xd8'> \xb8\x07\xe0\xc0?p!\xb7\x80/\xc1\x05|H.`WF8\xb2\x0b\x84&\xbc@@\xd2\x0b\x84$\xbe\xc0\xc4\x03\xd0\x91\x00\x03\xce$\x18\xa0\xe4 F(y\x02%O\xa0\xe4 \xa5L\x97<\xa1\x0b\xb0\xa7\xf4 \x94>\xa1\xf9\xee\xddr\x0c\n\x04R\x8f\x9a\xe2n\xae\xe6Y\xd0\xf9P\xc8|xT\xbe\xeb\xdc\xeb\x85\xc8\xcf\x83\xc6O\x80\xc4\xcf\x84\xc2\xcf\x82\xc0\xcf\x81\xbe\x87D\xde'E\xdd\xc3\"\xee\x93\xa1\xed\x81\x91\xf6@({H\x84=\x10\xba\xee\x8a\xac\x07G\xd5\x03#\xea\x1d\xe7\\\xdbZ\x18\x18I\x9f\x04E\xb7\"\xe8H\xa3\x01ud\x9a\x155\xc7\x9a1\xb3\xa0\xe5\x93#\xe5\xc1Q\xf2\xd0\x08\xf9\x84\xe8\xb8\x036\x8bB\xc5\x1d\x11q\x1b\xe2\xe3\x8b\x84\xdb\xca\xa5\xf4 C\xe2\x8dtS\xfa\x04\x18\x83f\xbb!\xd9\x94>\x01\x85X\x07A\xab\xadu\xa4\xf4 .\xc8t8T\x1a\x89HS\xfa\x84\xf1\xe8\xb3\x0f\xf2\xec\x88:{!\xce\xeeh3\xa5O8\x95p\x88rP49\x14\x92\x1c\x0cE\x9ejp9\xa2\xc7n\xc81&}\xc2U=8\x13tP\xeb\x81\x15W\xb5?U1\xadEv\xc4\x85\xb4\x0e\xc4l[C\xb6)\x8d\x03\xf8\xea\x96\xd28\xcc\xa2f{\xda\x01J\xe3P\x93 \xf4Ii\x1c(\x8d\xc3}I\xe3`\xb28l\"1%VG\xa1\x912\x85\xc3:\xdd\xef\x8fIT\xdc.\x0fi\xaa\xb1\xee\xae\xcc\x0d/\xccso\xd34.\xf35(\x80P\xff\x02\xa2\x04X\xa7Q\x92w&jh\x14\xa1\x1f\xb8g\xe9\x19*\x1d\xb6\xa5\xf8\x02\x18\x0d\x1b\x9e\xa4\xfb\xd1\xc8\x04\xdb\x8b\xe5cd1X(\xe1%_\xbfH\xa3\x1a\x0b\x0e\x8a\xf4\x9a'\xfaL\xabZd\xd6:q\xc0\x10\x7fZG{\x16\xebj\x0e\xb9b_\xbfy\xff\xea\x99<\xa7\xabg\xf5\xe17\x92\x88\xc5K\xbe\xd6\xa7\x83\x12\nj\x1c\x11\x94\xdb\xa3\xbf\xf0<\xda%\xac8f\xa5\xc7\"/\x98\x0cb^\xdac\x8d\xcaU\xe6M\xf5Z\x9b\x1dgH9\xd2U}\xa2\xb0a;\xea\xb4X\xfd\xf8=\xb3\xa7\x10\xe4\xb8Q\x16\xcf`\xf9\x80XS\xc0\xb6\xae\x00\xa6\xa2J\xec\xd5UB\xe6\xce\xd7j\xee\x00ZEC\x0bH-N\xa7\xb6*\xc1\xa3c\xf2\xc4xp\x92\xc7fh\xf75\xa1ul\x83HZ3I\x1e\xddp\x95\xdc\x81\xad\xaf\xcfT\xda\xea\x1cr\xa9$\xc8\x99\x0c\xa7^_\xf1\xf5\xb5\x7f\xd8\xc3@\xd3p\xa6]_\xc1\xe7CJ#\x1f\xd2\x89\x90\x91\xd7!\x98E\x98\x8c\xbc{j\xe4\xe51\xcb\xaf8\xca\xb0\xbbT\x8f\x96\xd6\x9c|\x15\xf8\x8dZ\x96\xb7x\x97\x98.H?s\xcf\xec7\xad\xd0/w*W\x83\xe0\xc0\xb3(E\xc4r\xa3'\xa3\xe5~\xaa\xad\xbc\xa1d\xc8\xd5\x86\xfa\xa2}\xd3U\xd2\x1co\xaf\xc48\xad\x1b\x12uS\xa06\x94\x07\x12#\xeb\xfb\xa3\xa2\\ZP\xd1Z&0+\xaet\xca\xa7\xbcH3y\xd5\xd8@ \xf2\xe6\x9c(\x97\x17J\x98\xab1\xe2\xb5\xf40\x03;\x88\xde\xcb\"\xf9\xef\xbdI\xe7\x95\x17\xea\xba\x07i(\xf6\x9a6\xca\xb8\xa9\xc2\x1b\xcc}+,\xe3%\xc4\x95\xe8\xb4\xbaL\xb7\xf6\x8a\xe5\x90\xae\xe5\xfd\x0f\x98\x98e=\xae\x9b\xd1\xa1\xfaox\xa7\xed\xd8\x0b\xee\x14\"Z\xcf\\V\xd0\x05wt\xc1]\xfd\x99\xaf\xe4\x82;\x84\x03X\xef\x93\xb8#BOa\xe7'\xdb7\x1d\x0bN\x84\x8e\x05\x1db_\x15\xe9X\xf0%\x1c\x0b\xaa\xd6\xe4\x05\xcb\xe4\xc5\xbb'\xf9\x93\x9b;y\xf3\xb1FK\xccmj\xe5C:\x17s\xd5\xa0\xda\xbe\xdfn\xd8\x14\xf9*;z\xd8\x92\x90U\xa5\xd9\x9c\xa2\xcd:a\xe7\x17\xdfbJK=\x85r)-\xf5,j\xb6\x8faJK]\x93 \xf4Ii\xa9)-\xf5\xd7\x9d\x96\xba\xcdP\xe77\xd1\x86'k^:5\xcd\x1f\xd4K]^\xcb\xe7q\xfcJ?T\xd1\xf9\xe2\x18\xcc\x9b\x9d\x1e\xca\xdaK\xfa\xe7{\xe6\x9cl\xea\xad-\xf7\xeaD\x81\xf7\x13\x02]\xa8M\x17j\xb7\x85.\xd4\xa6\x0b\xb5\xe9Bm\xbaP\xfbD\xe8Bm\xbaP\xbbe[\xd0\x85\xda\xdd\xd6\x10]\xa8M\x17j#\xca\xa5\x0b\xb5\x87\x84.\xd4\x1e\xabu\xbaP\x9b.\xd4\xee\xfb\x89.\xd4>\x11\xbaP\xbb%t\xa1v\xa7h\x7f\x15]\xa8-\x9bD\x17j\xd3\x85\xdaw{\xa1vS\x1a\xa7F\xe3\xf6\xd7xP\x13 \xe9\x90F\xf2$\x1a\xbb$%\x95PK\xf9\x17QVg\x806Eg\x8f\xa2G\x15V>\x00\xca\xb1\x8fu\xa2\xcf\xc2\x04\x08\xc3\x03\x08\xcd\x02\x98\x88\x030\x07\x03`4\xfe?\x0b\xfa?\x03\xf6\x1f\x1e\xf9\x0f\x87\xfbO\x88\xfa\x87\xc4\xfc'B\xfc\x83\xe2\xfdA\xd0\xfepX\x7f\x10\xa4\xdf\x0d\xe7\x0f\x8c\xf2\x07\xc5\xf8;|\x11\xc3\xab]P|\x7f\x02t\xdf\x82\xed\xa3\x0c\x00\x14\xae?\x1b\xaa\x8f3Gf@\xf4'\xc6\xf3\x03\xa3\xf9a\xb1\xfc\xc9\x90|4\xd2\x8c@\xf1\x9d0\xfca$\xcc\x0f\xbf\x1f.\xb3\xd7I=\x1dr\xef\xaaM\x17\xd4\x1e\xa70'\xc4\xde\x13\xaf\xef\xf7\xf6O\x88\xd5\xa3\x91z\x1cN\x8fE\xe9\xadZ\xf6A\xe8]\xf0\xf9!t~\"l\xde\x11\x99\x1f\x87\xcb[\x10o\x17L>\x00\"o\xa9]\xefH\x0f\x86\xc5\x07D\xe2\x83\xe1\xf0\xa1Px\x14\x06?\x84\x11\x0e\xe1\xef\xd3\xa3\xefA\xb0\xf7\x80\xc8\xbb;\xee\xee\x84\xba{`\xee\xae\x88\xfb \xde>\\;,\x1c\x8a\xc7\xda=\x90vG\x9c\xbd\xb7\xb9\xa10\xf6\x80\x08{\x18|=\x10\xba>\xcdPrB\xd6]p\xf5\xd3M\xb3qf\x93x\x83O(e=\x8e\x92\x82&\x9bBA\x93\x1db\x87H0 \x89\xb5\x8dFp\x9e %3@%\xa1\xc0\x92\xf0p\xc9d\x80\xc9<\x90\xc9\x04\xa0\xc9L\xb0\xc9,\xc0\xc9\x1c\xd0IH\xf0dR\xf8$,\x802\x19\x84\x12\x18D \x04\xa3\x84\x04R\x02A)\xae`Jp8%0\xa0\xe2\x01\xa9\x04\x06U&\x81U\xac\xc0\n\xdah@\x81+3\xc2+x3f\x06\x88er\x90%8\xcc\x12\x1ah\x99\x10jq\x80\x07Pp\x8b#\xe0buvz\x82.\xf6r)hrH\xf5-\x16?\n\x0bS\xa6{(d\x06\x0b=\xc2\xfe\xe3\x97K\xf1\xffb\x02\x88i\x9d\x89\x85M\x1a\xa3J\xafb\x837\x1b\xceI\xe9\xa7\xec\xc7\xf2<\xe6B\x7f\xac\x0e\x85\xc4\x7f<\x11\xe2?v\x08\xe6\x08\x819@ g\xb5\xcb\xe1a\x96\xa3C\xa8\x83C\xf8c\xc3d\x87\x86y\x8e\x0c\x13\x1c\x18f:.\xccrX\x98\xe3\xa8\x10\xf2\xa00\xe91!\xec!a\xb2#B\xe0\x03B\xa0\xe3A\xc8\xc3A\xa0\xa3\x81\xeb\xc1 \xf8\xb1 \xf0\xa1\xc0\xe3H\x10\xf8@0\xc9q\xc0z\x18@\x1a\x0d\xc8\x83\xc0l\xc7\x00\xbc\x19C\xfc\xc7N!\xfe#\xf1\x1f\xa5\xb8k\x97\xf8\x8f\xc4\x7fDU\x82\xf8\x8f\xc4\x7f<\x11\xe2?\xb6\x85\xf8\x8fu!\xfe#\xf1\x1f\x87^ \xfe#\xf1\x1f\xa7\xe2?j\nV\xad\x9c\xd0\x0c\xad D\xc8fszs\xa6\x07\xa7o\x05h\xdc\x082g\xee\xc6\xe1\xccK\x12\xa7\xf4V\x1b\xaaf.\xf7y\xad\xaba\xd6f\xae\x7f\xbd\xaf\xb4\xcd/\x18\x1e\xb3\xd23\xd1\x8e\xae\xd0\x0b@S\xac$\xcd1\xf5\x0e8\xd3\x9b\x82\xa0j\x06'k\xa2\x86\x12 \x87\x13 \x11W\xc0\xf7\x0f8\xb8,\x8d\xcc\x82\xbeB@\x04\x16fAaaJ$\x16fCca\x1aD\x16\xe6Cea.d\x16fBg!0B\x0bS\xa3\xb4\x10\x1c\xa9\x85)\xd1Z\x08\x8f\xd8B8\xd4\x16\x02#\xb7\x10\x0e\xbd\x05\x0f\x04\x17\xe6@q!<\x92\x0b~h.\x84Gta*T\x170\xc8.\xb8\x19'H\x84\x17\xe6Ey\xc3\xd1=\xa1\xd7&\xad-R\xe2\x7f\x1f\xe6\x1eAg\xd5Mf\xdd]\xd4\xf8r\xed~7\x13^\xc9\x92\xfa_\x0d\xc3\xb4\xeblX\x89\xd5\x00\xb6\x9b\xbe\xe6\xa2\xcba\"\xa2uD\xa1\xc6\x92\xee\xda\xff\x1e\xb2\x83\xcb\x8b7\xf5I\xa6\xbc\x83\x13\x0e,\xcf\xd5\x16\xa2n\xea\x94\xd1\xa7\x0b\xf5\xfb@\x81\xf2\x9e6YT\xffE\x9d}C1-\xd8\xd8K\xbaz.,l\x8bV\xcd\xe0\x11\xa1\xbc\xee\xaf\xef\xc6\xc7\xda\n\xbdm(\xa9~\x17\xe2\xc0\x07>1y\x99\xde\x19DEnL\x82\x1c\x8e\x89\x1a\xa2\x1b\xb5H~\x8a\xf2\xd3\x1e\x1e`R\xe7^T\xea\x9c\xb8\xd4\xa7?\x13\x97\xbaC\xecK\x1c\xeed\x8f\x9a\xcdn'\xfaYN\xf3\xa1N\xf2\xe1O\xf1\x93\x9d\xe0\xe79\xbdOpr\x9f\xe9\xd4>\xcb\x89}\x8e\xd3z\xc8\x93\xfa\xa4\xa7\xf4\xb0'\xf4\xc9N\xe7\x81O\xe6\x81N\xe5!O\xe4\x81N\xe3\xae'\xf1\xe0\xa7\xf0\xc0'p\x8f\xd3w\xe0\x93\xf7$\xa7n\xeb\x89\x1bi4\xa0NG\xb3\x9e\xb2\xb1f\x0cq\xa9;\x85\xb8\xd4\xc4\xa5\x96\xe2\xae]\xe2R\x13\x97\x1aU \xe2R\x13\x97\xfaD\x88K\xdd\x16\xe2R\xd7\x85\xb8\xd4\xc4\xa5\x1ez\x81\xb8\xd4\xc4\xa5\x9e\x96K]?\xd0\x06\xa0\x03W\x9f\xab\xd0\xd1\xc55\xaf\xfb\x8c\x1ag\xd9\x16\xb8\xa8\x91D\xa6\xd7gE\xf8Up\xb2\x02\xc848T\xc2\x8e\xd2}\xb4\x8b\x92F)\x12C\x14\xa3q\x18F\\\xc0\x1b\xb1s\xa6\x89<\xb6\xa6\xdbm\xce\x0bq*lV\x17jN\xe8\x9c\x17m:\xf5\xaf\x9a\xefl\xa4R\xe0\x96\xc5\xb9\x97\x06\xa1\xcf\x05\xd1\xa1ZU\xeb>\xed\xb6<\x05\xba\x89R\xc1\xc9q\xcf\xb3hm\xfe&\xe7\xb8\xa6z*_\xcc\x15OLw\x1c\x93\xd2\x8d\xd5\xb2p/di1\xcf\xf3J\xb1\xca9t\xccE\x07\\\xf3!-k\xcd6\x8b\xbc\x135\xb7\xe0\xde\x0eE\xc7\xd1>\xc2\xeaY>k\xf0\xd3>\xf4W9>\xeb#\\\xa3\xad\xc2\xa8<(\x8fI\xbd\xd0\x8b-\xc4|[h\xefZT\xa8%\xd8X\xa1\xd2W\xab&\x8d*Xhyu\x0b\x9c\xad\xaf\x80\x1d\x0e_\x9c>\xeb\x18w\xf5\xfe\x90VkoH\xa2 \x97\xad\x16\xcb\x14\x88\x7fD\xc9&Z\xb3\x82\x97\xa8\x8b\xd1\xa5xPO\xe1(Y\xc7\xc7M\xcb:e\xaa\xe4\x12\xc6j\xf5\x97\x04\xdd\x1cc\xde\x19\xe6\xf2cz\xa3\x8a\xd1?\xde\xb3(\x97\x9b\xb4\x88\x92\xddR)\xb4\xdbq\xd3hM\xe3\xf9FV\xfc\x9af3\x1e3\x9d\n^=\x1f\x8c\xb8e\xaa\xc3\xb3(\xdd\x0cS\x1f\xac\x08Eg;e\xc1\x8dv\xc6<\xd9\x15e\xfe\x7f\xf5\x1c\xa8\xe7\xfa\x9c%\xa2\x1di\xce\xe2e\xa3T\x0bUc\x88.\x026\xca\x08`\xd4\xab\xc4\xae\xe4\xea9\xd9\x08Y\xee\xe0\xa3H\x85\x03\xbe\x03\x95 K\xc5\xc2:\xa0@\x12\xd9\xaa_d=\xde6\xbb[\x9f\x9e\x1a}\xac\x03\xe34{E\xac\x1e\xf0MT\xf0\xcd\x12\xd9\x0b(\xfd7\x9a\xf0Sc\xb2\x94\x1f\xb4O\x9b\x0d?\xa4yT\xe0\x17\xa6\xe6\x0b\x88\x95I\xbf\x10li\xdaG\xc9R\x7f\xc3\xa6\xd1/k\xa2ox\x92\xee'\x9a\x8a\x00l/\xac\xb6\x89\x8as\x99\xd9/\xd2\xa8\xc6+\x86\"\xbd\xe6\x89v\x1d\xaa&\x1a[\x93%*\x10PV\xd4\x06u\xbd~\xf3\xfe\xd53\xe9\x0bU\xcfk\x07c$Q\xe1\x8b\xa4\xd0\x1e\x98\x12no\xb8a\x94ky\xf8\x03y\xb4KXq\xccd`\xae2\xae$\xe7:\xdd\xa5\xd2\xdd\x81\\;~\x8e\x92h\x7f\xdc\x9bQ\xae\x17\xadj]H\x81\xcb\x10O\xebD\x14\xb2g\x9f\x97\xe5\xfc\x9a|\x8d\x18\xec\xc7\x9f\xd9g\xd9\x0e\xbd\x11\x8bf<\x17\xaa\xbcJ\xe3\x8d\x98\xd0\xd5D\x06\xd1\x95e\x0b\x17p\x91DE\xc4bM_\x80o\x07\xd5\xbeO\x93\xe2\xaaw\xa1\x14S\xb9Z,iR\xd3\xa4\xbe\xdbI]\xed\xa3\xd3L\xef(YFj\xb6\x94\xd3\\\x1e\x80lC\xdce\x96\x0b\xed\xcaB+\x9f\xb7\xf1%\xcajgE\x03\x01R\xcd\xd2\xae\x17\xc9|\xd4L\xa0\x03\x8b6\xc0\x8a\xaa\xad\xf9q\xb5\x8f\xf2\\\x1c\xa6;jR\xb08\xbe\xc5[\x11\xf5\xc7\x116\x84|<\x98\x05\xf1\xeb1\xcd\x8e\x03\x93\x16\xd5 (\xd6\x15~\n\x9a!x\xe0\xd9\x9a'\x05\xdb)r\x92\xf4\xc9\xe4\x05\xbb\xe6\x92\x80X\x9e\xfd\xb8\x1e\x99\xdai$=\x13\x83Se\x9d&y\xb4\x91\x11\xf0\x92\xf1\xd57f\x8b\xab\x8c\xe7b\x13\x98]=\x0fJ\x154\x86\xed\x7f\xf2\\6\xb8m\x80\xa72dg\x01/\xb5KQoG\xdf,\xfe\xb0\xe8\x03\x1fnx\x91.\xef\xae\x81\xa8\xfeW33\xdd\xc2/\\\xf7\xb4\xdc\x8b\xdf\xcb\x81\xa0\xfeW\xcd\xf6\xb66,\xfd/\xda\xce7'\xeazz\xfe;\xfb)\xe6\xeeT\x86\x1a\x13,\xa9-\xdc\x88\x01\xf2\xc7\xff\xafw\x84Tm\xbe\xa35b\\\x833\xe9?WU\xc76\xfc4\xb8J\xb9\xe5\\\x02\xab\xb4?\x90\x82\xaaN\x84\x82\xaa:\xc4\xbeC\xabb(\xa8\x8a\x82\xaa(\xa8\x8a\x82\xaa\x8cPP\x15\x05UQP\x15\x05UQP\x15\x05UQP\x95\x14\n\xaa\xa2\xa0*\n\xaa\xc2i\x9d\x82\xaa(\xa8\xaa\xef'\n\xaa:\x11\n\xaaj \x05Uu\n\x05UQP\x15\x05U\xa1\x06\xd7\x9d\x07U\xd5\xf8\xdd\xb5\xb2\x86N\x96\xb57J\xdc^\xf5[\x0d\xb9/R\x9d\x08q\x9bfg&.G\x87\xd0->\x08n\x18!8\xe0\x84\xe0\x84\x15\x02\xbeW\xfc0Cp\xc6\x0d\xc1\x8a\x1d\xc2\x94\xf8!\xf8`\x880\x01\x8e\x08H\xd5;\xe2\x89\x10\nS\x04l}-3) \xbe\x08\xa11F\x08\x8b3BP\xac\x11\xf0x#X1G\xb0\xe2\x8e\x10\x08{\x84p\xf8#\x84\xc6 \xc1\x13\x87\x04w,\x12|\xf1H\xf0\xc2$\xc1>\xf1\x01\x01\x1f\x81\x03\x84\xe4\x82O\x82/F >8%\xd8\x95\x11\x0e\xaf\x84\xd0\x98%\x04\xc4-!$v \x13\x0f@G\x0c\x13\x9cqL\xa8a\x99\xa7\xa204;`bu\x0e\xf0d(\xbc\x0f$<\xf8\xf6\xdd\x9b\xb7o.\x9f\xff\xb4\xbc|\xff\xfc\xfd\x87\xcb\xe5\x87\xd7\x97o_\xbd\xb8\xf8\xe1\xe2\xd5K\xc77_\xbez\xfb\xe6\xf2\xe2\xfd\xf2\xed\xabw\x17o\\_\xfe\xe5\xcd\xfb\x8b\xd7?\xfa\xbd\xfb\xf6\xf9\xe5\xa5sm\xdf\xbd\xfa\xf7W/\xde;\xbf\xf6\xc3\xf3\x8b\x9f\x06_2\xc1\x80\x9e\x8au\xf1\x98\x18@\xf5R\x8e\x17\xd9\xdb\xf2\xec\xaff\xac\xf6\xe9\xc8\xdf\xb8t\x03\xd42\\\xd8&\xd4\xe0\xb8\x18l[#\xf2\xdd\x18w\xf2\xbb\x87\\\xc5y\xd7\xf0a\xf4\xd7\x9bc\xeb\xb4\x02\xcd\xdfkY\x1e\xaaP\x7f\xa5\xa4\xcd13\xa9\x034\x1e?X\x15\x93\xfc\xc0\xb5\xbe\x8d\xe1|Z\xdd\xc6\xcf\xb8\xda*\x8aA\x90\xca\xaa\xf9sZK\xf5\xf7\x81\xea5\xc6\x94\xda\x8b\xaeX>\\Gy\x07\xa5{\x1d\xcdt=\xad\xa5\xf9e\xdaz\xae8O \xe3\x7f\x951\xbb\xee\xd5U\xcb\xc4ie\xd5\xdf\xa7\xad\xea\x96E1\xefMv \xb6\xdd\x84\xc5K\x95\x9dB\xe14\xf6\xade2,\xfe\xd6\xf6\x00z3\x03`\xab\\\x98\xe8\x93\x95\x97\x0c$)Q\xe2P\xd4R\x1cB\x967\xbc\x98\xaa\xd0f\x06\x14\xd1{\xefT\"\x8cj\xf0\xe4\x05K6,\xdb\xa8\\\":]F\x95U\xae\xb6\xdc\xf7}D&@)\x96E\xb4\x9f2\xa0h\xc3\n\xfeD\x94\xd9\xfb\xacI\x15\xc3\x93\xcd\xfc\x1f\x97\x19G\xec\xa9\x98\xec\x9c\x1d%\xd6tL\xe8I\x85\x9fV\xc8\xa4Lh\xe5\x01:1\x93C\x91.\xb6L\xa8\xf4L3$h\x1a\x93\xa2I'O\xcc\x0b\x96\xdd\xc1,\xd4_\xbf\x93I\x18\xe5UZ4\xfb\x87\xdb\xd9\x90\x9b\xd2\x18h\xc6*n\x18\xa2\xeb4\xe3\xba\xe3\xf7\xe2\\\x9c\xe9\x9d\x16\xb9X\x8e\xbd\x9a\xbc\x90\xae\xd1z\x86\xea\x82\xae&\xa7\xab\xc9\xeb\xcf|%W\x93w6B\xa5\xd41\xfcW\xa7\xac:%\x8f\xf8\xdd\xdb\x17]\xd5\xa7\\;\x0d\xa1\\;\x1db_\x08q\x9c`\xd4\x9c\xc7\xcc\x87Jf\xe1\x01\x87\xe2\x00\x87\xe7\xffv!l^\xdc\xdfyx\xbf\x13p~g\xe2\xfb\xce\xc2\xf5\x9d\x83\xe7\x1b\x92\xe3;)\xbf7,\xb7w2^o`No >oH.o \x1e\xaf+\x8778\x7f70w\xb7p\xe7\xed\x06\xe6\xecN\xc2\xd7\xb5ru\x91F\x03\xea\x0c5+?\x17k\xc6\xcc\xc2\xcb\x9d\x9c\x93\x1b\x9c\x8f\x1b\x9a\x8b;!\x0f\xd7\x81\x05\x8a\xe2\xdf:rom\xdc2_\xce\xad\xad\\\xca\xb53$\xde\x9cZ\xca\xb5\x03cx\xb3n\x9cY\xca\xb5\x83\xe2\xc6\x06\xe1\xc5Z\xebH\xb9v\\8\xb0\xe1\xf8\xafH\xee+\xe5\xda\x19\xcfs\xf5\xe1\xb8:\xf2[\xbd\xb8\xad\xee\xbcV\xca\xb5s*\xe1\xb8\xabAy\xab\xa18\xab\xc1\xf8\xaaS\x0d.G\x9e\xaa\x1bG\x15\x95k\xc7$\x14Q\xec\xa5Zy\x83\xf9v\x9ao5P\xd2\x8a\x06U\\U\x98l~b\x84\xcfKP\xbc;Bb7\xa7\xef\x8e\x08\x87\xd8\xca\x84$\x14v\x13\x08\xe7'\x0c\x0e\x12\x04\xe7%\x04\x9e\x12\x00\xa7\xban\xb9\xc3\xad\xd5\xc5)wa\x91\xdb\xa6\x92\xf5\xf1!\xa68\x92\x1b\x8ef\x83\xa3\xf8\xdfN\x8co\xb3r\xde\xa4E\x03\xa6m\xac\x97\xf2\xc7\xc6:\xa5\xfe\xc26\x9b\x8c\xe7y\x89\xa1\xd7\x96\xc7\xaa\xa4@}o*\xae\x17\xa9\xb4\xb7\xf2\xe5\x03\xad\x85V\xdd\xca\xa6\x9b\xc0s\xd8f\xe9\xfe\xceZQ\xbbE\xfd\x9a\xdf\xf65\xa5Ef\xd1\xcc\x15s\xab\x7f\xfd\x92tE\xc8\xd04\x83\x92\xe6\"\x81\x88]\xd4\xa4-\xc9V\x99E\xb6\x9f\xb6\xb2\x807\xe2\x0c\xa63\xcc\xe9\xbb\xe9\xd3\x0c\x9a\xd5\x85\x1a\x9c\x19\xe8\"\xfa\x8e5\xa0\xd3\x99\xdd\xa1ZU\xeb>\xed\xb6\xac\x82\xea\xfa}\x062\x92!Z\x9b\xbf\xc9UO\xa7\xdcS^}}\x19\xbf\xa2\xb0\x94\x80Hk\x19V\x17\xf8\xc7b\xc6\x94\x8aU0\xc31\x17\x1dp\xcd\x87\xb4\xac5\xdb,\xf2N\xd4\xdc\xa2\x17u(:\x8e\xf6\x11V\xcf\xf2Y\xc3\xcd\xe9c\x1b)\x08\xad>\xc2\xd5\x91V\x12\x90\x0f\xca\xf7^/\xf4b\x0b1\xdf\x16\x1a\xa7\x89\ne\xcc\x1b\xebJ\xa2~\xfa>\xc6T\xeb\x10V\xb7 \xaf\xf2b\x87\xc3\x17\xa7\xcf:\xa7\xaaz\x7fH\xab\xb57\x84n\xe5\xa8Me\x06G\x10\xff\x88\x92M\xb4f\x05/\xf1{\xa3K\xf1\xa0\x9e\xc2Q\xb2\x8e\x8f\x9b\x96\x9f\x83\xa9\x92KBD\xab\xbf$u\xa6\x86\x08\xca\x1b\xf3\x1aD\xc3\x0f\x17y\xab\xafZU\x95\xae\x9e\x8c\xe7\x9a2%\xa7V5\x17\xc5t[\xe8\x99\x14\xed\x924\xab\xcd\xbef\xb1\xaa\xd5!\xba\xb2M\xfe\xec\xe8\xb0\x8c\xdf\xf0,\xc7&\xfc\xd4O\xb7;*\xaa\xb1\xed2\xde3\x07D\xb9<\x91\x07\xd34\xdb\xf0\xac}2\xb9\x8c\x925\x7f\x06*\xd9\xe6\x93|s\x0d\xdf,~\xff\xbb\xe0Z\xe9\xcb\xfa\xf9`0\xed\xe7\xf9o\x87*%\xe4\xdf5\xf5m(\x0bh\x99\x04\xf4P\xb1l%\xf3\xabb \x98G/^\x9a\xb1\xd0\x99\x05T\xffvO\x93\x80\x0e\x11\xe1FQzk\xfd5Lv\xb3b\xd2(\xf2\xaa5y\xa7\xb5I\x80j\x16 )z\xc8\xb6\x81\x03\xbe\xadd\x16\xa2^8\xaa\xde\x1cd\xbd \xe9zs\x11\xf6&\xa1\xec\xcdF\xda\x9b\x89\xb67\x0fq/,uob\xf2^h\xfa\xde\x84\x04\xbe\xe0\x14\xbe`$\xbe\xb04\xbe`D>w*\xdf\x0cd\xbe\xe0t>/B_pJ\xdfD\xa4>\x04\xad\xcf\xc1\xd0@R\xfbf%\xf7\xb9\x98?\xb3\x10\xfc\x02P\xfcf \xf9\x85\xa7\xf9MJ\xf4s\"\xa3!\xc9~\xcet?\x04q\xc6\x9b\xf2\x87){\x10\xd8\x9f\x92\xf8\xe7\xa7m7\xf2\x1f\xa6\xc1\x9e\x04\xc0\x11\x14@\x1b{bR\x1a\xa0\x13\x11\x10O\x05t!\x03\"{\xc1\x8f\x10\xe8J \xb4\x91\x02'\xa4\x05z\x10\x03\xc7S\x031\xcav\xa4\x07\x06\"\x08\xa2j:8S\x02\xd2\x04\x03\x13\x05\x83R\x05C\x92\x05\xd1tA\x1ba\xd0F\x19\x0cC\x1a\x0cF\x1b\x0cL\x1c\xf4\xa3\x0e:\x93\x07=\xe9\x83>\x04B\xdb&\x88\xe0y\xe1\x99^.4BO\"\xa1\x07\x95\xd0\xa2\x82pt\xc2\xc0\x84\xc2p\x94\xc2\x80\xa4\xc2)\x87\x9b#\xb1\xd0\x95Z\xd8\x9f\xfc\xd2\x96\xfa\x12u(\xb7\xa5\xbdt\xa1+\x0d\xbf\x87Ny\xe9Fc\x1a~\xd3\x9a\xee\x12Mo\x1a~\xc9\x92\xea\xd2\x89\xf6t\xfa2\xd6;\x11,\xc9\xe5\xbc\x0cR\xdb\xb7\xe7\xe2\x936\x05\x931\xf2\x8e\xb8\xa6M\xf1\xabhH\x1ejS0i-\xe7\xe7\xa86\xc5!\xa5\xe5\xbc\xfc\xd5\xa6\x0c\xa7\xb3tIfYL\x87M[\xd3X\xa26&d\nKdY\xb6\xf4\x95\xe8b\xb0\xa9+Q\x05\xce\x90\xb6\x12\x95\xb4\x12UYl\xba:|\xba\xcaI?\x8bLTYX\xf2+\x81-\xc7\x12`'\x0bv\xba \xd3S\xa2\x94\x05\xe8\xd4\x94\xc8\xe2\xf0\xb6G\xa8\xa4\x94\xc1SR\xfa&\xa4tHG\x89R6v\xa0\xa3\x13QN\xfaU\\\n\xca\xa2\x93\x83X\x97\xc0\xe9'\x1b\xc57R\xed\xf9d\xda\x83wo_PV\xbd\xa6PV\xbd\x0e\xc1\xac\xf4\x05\x82\xb2\x87\x9a\xb2n\xab\xf2,d\xbdPT\xbd\xf0D\xbd.G\xbc\x17Mo\x1e\x92\xde\x04\x14\xbd\x99\x08z\xb3\xd0\xf3\xe6 \xe7\x85\xa4\xe6MJ\xcc\x0bK\xcb\x9b\x8c\x94\x17\x98\x92\x17\x88\x90\x17\x92\x8e\x17\x88\x8c\xe7J\xc5\x0bN\xc4\x0bL\xc3+\xdcIx\x81)x\x93\x10\xf0\xac\xf4;\xa4\xd1\x80\xa4\xde\xcdH\xbc\xc3\x9a1\xb3\x90\xee&\xa7\xdc\x05'\xdc\x85\xa6\xdbMH\xb6s \x7f\xa1\x88v\x8e4;\x1b\xf5\xc4\x97bg+\x97\xb2\xea\x0d\x897\xa5\x8e\xb2\xea\xc1\x18\x12\x9d\x1b\x85\x8e\xb2\xea\xa1hsAHs\xd6:RV=\x17\xaa\\8\xa2\x1c\x92&GY\xf5\xc6\x93\xe3|\xa8q\x8e\xc48/Z\x9c;)\x8e\xb2\xea\x9dJ8\x1a\\P\x12\\(\n\\0\x02\xdcT\x83\xcb\x91\xfc\xe6F}s\xca\xaa\x17\xd5\xbd,\xcd;\xc6\xaaG\x1a@\x93r\x80C\xb4\x81V\x06\xbdv^\x8e\x03+\xaej\x7f\xaa\x12P\x14\xd9\x11\x97\x7f\x02\x9b`e\x8a\xcc\x14\xe7\x1a\x03\xcf\x07RT\xbc\xd4\x8f\x94)*\x98\xcc@\xa3\xff(\xe1\xb6Oi\xee\x10\x9f\xe7D\x88\xcf\xd3!\xf6\xe5\x8d\xf8<\xc4\xe7!>\x0f\xf1y\x9aB|\x1e\xe2\xf3\x10\x9f\x87\xf8<\xc4\xe7!>\x0f\xf1y\xa4\x10\x9f\x87\xf8<\xc4\xe7\xc1i\x9d\xf8<\xc4\xe7\xe9\xfb\x89\xf8<'B|\x9e\x96\x10\x9f\xa7S\x88\xcfC|\x1e\xe2\xf3\xa0\x06\x17\xf1yj?\x8c\xe7\xf3\xd0%j\x1e\x97\xf5\x0c(\x97.Q\x9bE\xcd\xf61L\x97\xa8\xd5d\x02}\xd2%jt\x89Z\xcf\x1c\xd8\xdc\xdfK\xd4J\xaa\xea\xf9o%\xabp\xe8f5C\xc32\xacU\xcdQ5\xf7\xa5F\x89\x9apb *\x88\xc9|\xec\xe2\xe5\x99y\xea\xf9f\x93\x0d\x91Y\xf5O\xf7\x93\xcb:\xc4\xa6\x18\xc5\xf6B1QQ\xc0\x06\x8a\xd7\x84\xe0\xa0\">f\xe3[\x16\x08\xf6\xa9\x95{jU\xae\x12\xbb\x8a\x95\xa0X\xa7\x88\xb6+\xb1i@ \xb28,\xfc\x03\xc1\xb8\xa6\xc1\x99\xa6~\xff \xd2&H\x9b m\x82\xb4\x9bB\x906A\xda\x04i\x13\xa4M\x906A\xda\x04iK!H\x9b m\x82\xb4qZ'H\x9b \xed\xbe\x9f\x08\xd2>\x11\x82\xb4[B\x90v\xa7\x10\xa4M\x906A\xda\xa8\xc1E\x90v\xed\x07$\xe6\xab$\xdc\x1dP7i\xc1\x87.\x80\xfaE\xfc^\x02\xc1\xf2i\x05\x02\xef\xa2\x1b\x9e\x9ch\xa1\x81\x02\xcbw\xf5\x0f\xf7\x0c\xff\x95\x8a\xf8r\xe1#T\x94\xbd\xb33\xc8r\x83\x88\xd0\xc9\xf8\xbb\x9e\x94\xdf}\xa8\x18\xac'\x08T\xact\xc6\xd7\xac\x10\x13\xf0m\xc6\xb7\xc2\xfcS\x08\xc3G\xf5\xa1\xfc#DI^p\xb6\xd1\xf8S\x19 .\xd3\x8c$f\xe8\x0f\xaf\x90\xf2x\xb5Qfh\xb4\x85\x8f1O\x1e\xe9\xf2\x1f\xc3w\xdf\xc1\xd3\x8f\xda\xa4e\x85n\xa0\xdc\x8d>q\xe9\x19|\xba\x80\x8b\x04Xl\xf1\x88*\xbf\xe3\x9a\xe5I\x0f\xf5ZY<']\x9f\xfc\xcfW\x97\xcf\xda\x7f\xa8}\xe2V[K\xfe\x1f\xd0\xe3\xebY\xd7\x1f\x1b\xb9?\x14\xd9k\xe4\xd7^\xbfy\xd6\xfa\xff\x86\xbeF\x97^\x0d\xe0\xf6w\xaa_\x9a_\x94\x9e\x83\x1b^8}[\xed\xa8\xf6\xc5\x03\xbd\x1e\xb9M\x86?\xcb\xcf\xf3MmBTm:&\x91d2\xc8\xe6\x88Y \xff\x91\x1f\xe2\xc8\x9a\xaf\x06\x91\xbc\xab-\xfa>\xb7\x07\xdd/\xf6\x9d\xa5\xb0\xcd\x15\x0d\xac5M\xf5P\xd2G\xbc\xeb-\xe6\xb9*h\x9d&y\x94\x9b\x0beKz\xe9\xc5\xcb3\xb5\x88\x08\xc3\xf2\xact\nZ\x87C\xa3\x11\xea\xc8b.\x90\x13\xef+\x8bN\xadJ\x9dP*]\xa4h\x85~\xe9\"E\x9bj\xee\xcfE\x8a\xf2\x18\xefB\x87U>\x03\xa2\xc3\x9e\x08\xd1a;\xc4\xbe\xb0\x11\x1d\x96\xe8\xb0D\x87%:lS\x88\x0eKtX\xa2\xc3\x12\x1d\x96\xe8\xb0D\x87%:\xac\x14\xa2\xc3\x12\x1d\x96\xe8\xb08\xad\x13\x1d\x96\xe8\xb0}?\x11\x1d\xf6D\x88\x0e\xdb\x12\xa2\xc3v\n\xd1a\x89\x0eKtX\xd4\xe0\":l\xed\x87\xf1t\xd8\xce\xdb\xb7\xe8\nE\xf0U.]\xa18\x8b\x9a\xedc\x98\xaeP\xac\xc9\x04\xfa\xa4+\x14\xe9\n\xc5\x9e9\xb0\xb9\xc7W(J\xba\xd3\xf9o\x92L5tw\xa2dd\xd5\x03>6\x1d\xf7%\xa6U\xe8\xc7\xc5\xcb3\xc5\xd0\xea\xbd0Q\x94\xa8\xff~\x0f\xc3@\x86X\x13\xa3\xf8\\\xa8 \x0e\x14\x80\x81b.Y\xc27\x10\x1f\xb2\x91\xc1\xb1\x98\xc5La\x1b3\x04m\x04\x0b\xd9@\xf4\x86\x9dG\xef\xc3\x9fw\xe1\xcd\xbb\xf2\xe5\x1dx\xf2\x1e\xfcxO^\xbc5@\xa3@\x84gX\x833\xac\xcb\x85\x12\xfb\xa2\xa1\xc46\x13\x95\xa0\x06\x91\x12\xdbPR\xe23\xa0\xba\xde\xc4\x84c\xb8\x0e\xae\xae\xb7\x10\xa1\x18\x1e\x03M\x89\xe7p\xab^\xc7\xae\x95Jf\x0f\xc1\x98=\x00#p\xf8\xc5\x9c\xc1\x17!C/\xee$\xf0\x02\x17v\x81\\o\\\x86~\xa8\x80\x0b\xab\xa1\xdf\x14\x9f`\x0b\\3' \xb4\x98>\xcc\xa2\x9b%\xeeJ\x12'\x8e\xf8\xe9\xcf\xc4\x11\xef\x10\x8c\xddS\x10G\x9c8\xe2\xc4\x11'\x8exM\x88#N\x1cq\xe2\x88\x13G\x9c8\xe2\xc4\x11'\x8e\xb8\x14\xe2\x88\x13G\x9c8\xe28\xad\x13G\x9c8\xe2}?\x11G\xfcD\x88#\xde\x12\xe2\x88w\nq\xc4\x89#N\x1cq\xd4\xe0\"\x8ex\xed\x87)\xf9\xa0\x12\xec\xeak\x91\xfc\xb1\xd1\x16\xe5\xc0\xd0w\xff\x96H\xd6\xe1\x8e/\xfe5\xf4\xbf}\x94\x14%\xff\x8f%\xc9\x91\xc5Ki\x8e\xe4\x15u\xa5\x8b\xea\xf7\\>\xfa\xb6|\xd2\xb8\xa0@\x14('\xa6|\x00\xaa\xb2\xd4\x16\xd8\xc9\xf2k\x17\xa6\x9f\xb9g\x8c\xbf\x1e\xed\xb6\xc5\xea3\xb2z\x8b\x1a:9\xf9\xaaAX\x1d;\xac\xa7\xf8\xce4nr\x90\xb5;\x15\x85\xf0\xf6\x15v~2\xde\x08\xff=\x11\xc2\x7f;dV\xfc7\xa0C\xd8i!\x8f\x92m\\\xcbB\xd9\xb5\x80_\x98G4\x93\xbd{Q(\x0b\x1aX\xbd\xcb\x92\xf4\x8f\xf7l\xd9n\xe9\xb2-\xd6\x1eu[\xae+\x85\xf7,\xd3==\xd2S\\\xa7\xeb^\x0e\x9d\xb2\xd7P\xeb\xb2^\x85\xabA\xf3\xee\xed\x8b.3\x96V\xe4\x86\xd0\x8a\xdc!\xff\x90+\xb2<(\x0d\xd8\xd3o\xe5\xef\x8d\xb5XEb\xc9\xc0\xc3m9\xfd\xab\x03W\xe7Z\xfcB~\xfa\xe7()T\x81\xfa\x99{\xb6$\xd7\x95\xd9\x96\xe6\xf9Ri\xb5\x99]\xd9(\xd0\x9c-\xf7\xe9\xe6\x18\x87\xcb\xad,zn\xb9\xe1I:\xc0\x82G\x0dB\xcd\x14-4\xec\xb9N#\xe9\xad\x10\xe5\xf7\xbcS\xee\x15\xcb\x8c\x15|\xa9\xc8\x06\xd3\xd4b\xcf>G\xfb\xe3\xde\x9c\x1aT\xd1\x10%\xb5\xfdI|\xd3Z\xb1=\xfb\xb4s\x94b\x9dO6e+\xf9\x1av\x8e!P\xcf\xac }\xe3\xbe\\\xe0\xebK\x96\xda\x07\xc4a\xa5\xba\x87\xa5\xda*\xb6MZ\xfaTy0Z-7\x0d\x18H\xebt\xcdo\x1b\xd5\x16\xffo\xf0\xc7\xb2\xb6\x9a\xa9b\xda\x19\xbc\xe6\xb6m<\x8fY~\x15%;\xf4F\xde\xda\xbdO\xcf\xc4\xa6D\xddm\xfa\xfd\xc6\xce|\xa9\x1f\xb9\xf7;\xf4\xe0J2ns\x8dv \xdf,\xf5)\xecS\x94l\xd2O\x9e\xdb\x9c\x91\xda\xc2\xda{\x04\xdbG\xc9R\x7fZ\x9c\xfc&\xfd\xee\x00}}\x93~J\x8ah\xcf\x97\x7feQ\xbc\xdchR\xc2\xa8\xef\xcaa\xba\xdc\xcax\xa94Yn\xd2\xe3*\xe6\xb2m\xa3\x8aE5\xe7\xe4\xdb\xaau\xa1?\xdc\x98=\xa5\xc7P\xf3dN\xa6r\x19\xb3\xb1R+nk^\x9f\x9a\x8d\xfap>\xd51\xfb\x7fT\xd5&[i\xe0E\xb2\x95z\xe4k\xb0\x95\x9c\xb7g\xb1@E\xc9n\x19%\xdbt`\x97\xbeT\x8f]\x88\xa7\xca\xbdZ\xbf+\x93j\xc9\x13v\x1c\xab\xe8\x1fV\xa4\x99\xd9\x86\x9b\x1bu\xad\x18\xfd\xfb=\xdb\xa6\x85.\xbe\xdc!\xaci_\xa3\xc7^^\xb0\xacX^Yse\xa0\n\xc3Y\nP\xed\x08\x7fRy\xabX\xa1Y\x94\xe5\x98\x93\x97\x05Jb\xaa\n\x96\xde\x88?sx\xf3N\xfepL\xc4n?\x10c\x19%\x1b\xfey\xa9\x92\n\xce\xd8*;B^\xc9\x85\xa8\xa2nv\x94C\x94\xac3\x19,(6*\xb6\xbe\x02\xb1\xed\xcbM\xb0\xa9\x13\xa6=\xf0\xc3TO\x19c.-@I\x99\xdd\xb3[\x15\x1b\xab\x0c4\x99h\x83\xaf\xd3\xfd>*T\xd8t\xa1\xa3\xf6\xa3D\xcc\xb9\xbf\xea\xc82\xc5\xfa\xb6\xc6\xdf~\xbc\x94\xa5~/\x0d\xce?K\xbb\xefc\xe9^*x\xb6/\xcf=\xb2[\xccA\xe7\xe3\xcfQ\x9e\x9b\xd7\xbe\x8f\x8a\xe7b>}\xec\x0f~P]\xbe<&E4~\xe1\xae\xfaT\x8c\xab'B\xd9\xd8~}\x1f\xedy^\xb0\xfd\x01dUt\x176{*\xcauua\xa3R\x90\xc6\xd1\x0dOx\x9e\x97\xf6j\x7f;\x8bt\xbf\xca\x8b4\x19BpL+\xdb\x89*O\xc5eH\xfe\xf9\x8aKJ\xa9\x1a\x12&\x00T6\xe8\x8a\xe5\xb0\xe2<\xa9\xd5\x0e\x1e]G\xb1hbzT\x19m\xca\x87s^<6)Y\xfe@\x8e\x13r\x9c\xb4\xc5\xbe\x0f}\x1d\x8e\x93\xc1\xc81\xba\x85\xc3\x0b+R\xd2i@\xd0-\x1c\xa5L\xacf\xfb\xad\x11t\x0bGM&\xd0'\xdd\xc2A\xb7p\xdc\xb3[8\x86a\x82\xf3\xdf\xd6i\x92/\xb53y\xe8\x06\x8e\xfaq\xbd\x8e\xf0\xb7\xcf\xcb\x8a\x91\xb7\x96Y\xfeT\xa9\xba\xa4>\xf4@\xff|\xcf\xc0\x83\x1b\x16/\xeb\x9a\x0e\xe6\x1b\xb0\xe2\x00\x08C\n\x87\x01 \n\xc2z\xc2\x82z\xffq\xbe\xff [\x83;TCX\x9f\xff\x8c\x1e\xffY\xfc\xfd8o\xbfS/\xda=\xfd3\xfa\xf91^~\x9c\x8f\x1f?\xfc\xee\xc0\xbf?\x9fw\xdf\xd1\xb7\xef4r\xa6\x9a\xffS\xfa\xf4\x03{\xf4q\x8d\x9a\xc3\x9b\xef\xe6\xcboo\xbc}~}\xed{\xe4\x1b\xf1F\x97\xbdrR2\xcaq\xe7\xe9\xb7#\xb7\x9d\x14r\xdb\xb5\xc4j \xda\x94\xad\xe4kw\xdb\xd5\x0f)}c\xbf\xfe\x8c\x99}\xe6\x7fK~xk\x15\xa8\x955c\x86\xa4\xealV\xc8\\\xdd\xe5\xd1l\xc3c\xbe\x93\x9ba~\xfe\x9b\xfe\x9f4\x93\x8d\x1a:\x9a\xbd4O\xbe\xac\xde\xafb\xa8\xa4?\xa6\xfa\xbb\x0c\x9fR\x87\xb4\xf2\x0bFO\x9d\xb1R]\xa5\xeb\xe7\xee\xd9\x99\xadR\xd3\xb2\xa3eu\xf9\x12\xe6tU[\xfb|\x9c\xec\x0e\xb7\xe6\xa0\xb4\xf0\xcf\x00\xbf\x1e@{\xa4\x9c|\xc8L\xe9\x15__\xfd\xee\xdb'<\x11\x9b\xc1\xa6\x9c\xe1e\x1aK\xfdZ?\x07\x04\xd42\xa6\xec\x92\xd0\xcd8\xf9\x10\xae\x19\xe5k\xc3\xcd\xc8\xafXf\xeb1\xff\xba\xab\xd2\xb55W\xd7\xaeLf\xaf~\xcc\xf8\x9aG7|3TO\x9c%\xa9\xa4Zc\xda\xf4sq\x02\xd6\xa7\xd3\xf4\x9a'9\\\xf1X\xa6\xb5e \xb0\xb54\xab\xf5\x91\xc4B7\xfa\x94\xa8t\xb8iR\x1b.\xfaV\x02y\xebF\xba\x8e$>l\x8e\xc2p\x93\xaa\x04\x19\xe9'\xe5|M\x13\x0b!\x0e\xd1}+\x16\xb3d(\x002\xc0\xd4\x1dL\x14\xa1\x04=V\xd8^h|\xa2\xe2\\F\xc8\x8b4\xaa_\xa7&\x07\x83\xceN\xab\x9ah|\xe0\xa2C\xc5\xd8\x90\x15\xb5eS\x7f\xfd\xe6\xfd\xabg2\xdd\xaez\xbe\xba\xba\x95%p\x91\x18\x07Uy\xa3C#\xd3\xa76\xd2\x87\xa7j\xb4KXqTsF\x99\x15b\x10\xee\xd2]*3j\x8e\xa5UU\x13\xa7~\x02\x91\xe7k\x16K\xfc+\xadO.\xfey-\x0f\xa0\xe2\xf8\x18\x15\xb5k\x16\xfa[\xa1Gl;\xa5\xa9^\x08J\x9f\xd6>\xcd8\xe4\xc7\xa8(q\x89u,\x01\xb8rKE\x9c7\xbbv\xe2\xaa\xd3\xe3\xb8\xb5\x1a\xe5\x0f+\xba\xd6\xf0\x16`#k5jQ\x03T\x9ay^\xea8K\xfd\x90\xd7s0\xb5\xcdc\xfb\x0c&\x02\x18\x11\xc0\x8c\xf8\x13\xc0\x868\x0eJ\xe4 \xa5\xcb\xe0\xb7\xc6\xb5\xf7\x15v\xdey8\xa1\xb8\xf7\x13!\xdfF\x87\xd8W\xc6 }\x1b\xf8\xcd\x16\xe8\x8aE\xbab\xb1-t\xc5\"]\xb1HW,\xd2\x15\x8b'BW,\xd2\x15\x8b-\xdb\x82\xaeX\xec\xb6\x86\xe8\x8aE\xbab\x11Q.]\xb18$t\xc5\xe2X\xad\xd3\x15\x8bt\xc5b\xdfOt\xc5\xe2\x89\xd0\x15\x8b-\xa1+\x16;E\xfb\xab\xe8\x8aE\xd9$\xbab\x91\xaeX\xfcr\xafXl\xf2oj\xc5\x0d\xb0t\x1a(\xe9 \xb9\xac\"\xe1u\xa4e\x9d\x98yG\x01\xbf\x1e\x81e\x14\xf0[\x93;Q\xb3=@\x95\x02~k2\x81>)\xe0\x97\x02~\xef[\xc0o7\xa9<\xcdN9\xe5\xe7\x19\xaf\x91\xa8\x06\x18\xe6\xef\xea\xcf\x95\xd4\xf2\xc6\xdbU\xec\xef\x10\x99\xbcQ\x90~\xe0\x9e\xb1\xc8\xebZ\xf9\x1ax\xe4\xf5\xfa\xda\xe1\x90 \xe9\xa8\xf7\x8cI\x9eg\xeb\xd0M\xe9\xfc\x98iN\x15`Y\xefQ\xd0\xfc\x145\x0bOC=\xba\xa5\xfa\xd0&/\xe6kU\xedc\x96Vmx^\x98\xbd\xcf\xadi<)2\xeb\xe0\xb4\xcf\xccJ\x06\xe7h%\xc8\xe9\xa3\x04;\x89\x94\xac3\xaeV\x1b[\x04\x7f]\x1czK .\x16\xb6.\xcd\xf0\xacf%\xa1qX\xd4\x7f\xab\"\xac\x1b\x9d]\xa4\xe95\x1c\xe2\xd6\x9d\x18}\xb2N\xc5\x99^~j8s~]\xbc\xb5a\x8f)\xafK+`\xadQ\xd1\x86B\x8eI\xf4Ye\x03\xd8\xb6\x87~\xf5\x1aF\x1b\x92<\xc3\xe2%\"\xde\xa0\x12gm4\xda\xd5\xfad\xa3]\xfa\xb7\x92L.-\xcc\xe6zU\xb0\xac\x18\x0e(1\xa2\xa8\xe7b\xd5\x98\xa3Y\xd5\xd7\xca\xe8\xc2\xbd\xb1\xd8k\xcb\xd1\x93Z\x98\xbc\xa2\xc6\xcb\x91\xaf\xf0\x81zK\xed-l|\xben9\xbdJ\x8a\xec\xb6\x16\x04\xd1P\xa0Zb\x9479\xe31\xbfaI\x01{^\xb0\x0d+\x98\xed\xa3\x8dO\xea\xa5R\xd9\xc8\xedI\xa9\x7f\x9c*\xf0\xe7]s\x88\xd7<\xd9q\x94\x17\x8a\xd9\x7f`Y\x11\xad\x8f1\xcb\xaa\xdd\xf9a\xdd\x0cMv2L\xc8\x12\x01\xb4\xcd\xd2}\xb34\xbdGV='\xcf\xb1\x8d\xcfU\xdb\x0d\"\xb8\x07\xb1\xc7\xe0\xf6\x17\xc4\xde\x82\xdeW\xf0{J\xc3\x82\x15m\x19\x88;0\x82\xae\x068U\x05h{k mou\xa1\xed\xad\x92q\xcd\xfa\x87\xd8\xde\xd0\xc3\x04\xadK\x97=\x0eN[\xd9\x1f\xac\xc7:T\xd2\x8c\xda\xb30?j\xc4\xbe\xb1\xb1{\xb6/YB\xfb\xf0Z\xaa7\x19\xab\x9a\x96Vr\xb3\xfb\xf6W\xba\x8c\x95\x08\xa7\x97A\x8dP\x10\xa2\x95/KA\x886\xd5\xdc\x8b \xc4\xfe\x94J\x0dG\xb15\xfaP\xc7\x1a6\xdd\xd4\x83)\x95\xaaYBq\x87\x14w\xd8\x16\xfbb\xa8\x8a\xa1\xb8C\x8a;\xa4\xb8C\x8a;4Bq\x87\x14wHq\x87\x14wHq\x87\x14wHq\x87R(\xee\x90\xe2\x0e)\xee\x10\xa7u\x8a;\xa4\xb8\xc3\xbe\x9f(\xee\xf0D(\xee\xb0%\x14w\xd8)\x14wHq\x87\x14w\x88\x1a\\\x14w8Q\xdca\x9e\xad\x97\xcd\xe4\xdf}m9}\xb2\xd1\x9e\x8aoQkO\xc9\x88\xe0\x92\xcd\xd6n\xd5\x14Q'=\xed\xda\xe4\x05\xb2]\xa7O:\xb5\xab\x99\x129p\xab(J\xd4W\x83@Q\xa2s\xab\xd9\x1e\xd5HQ\xa25\x99@\x9f\x14%JQ\xa2\xff\xc0Q\xa2\xc7d\x95\xca&.k\xf4\x9a\x81h\xd1\x9az\xcb\xec\xdf\x1fL\x19}w\x14\x95\x1f\xe9\xb9\xad\xa8R\xeb\x89\x85g\x06Y\xf7\xb5E]_\xd6/\xdc\xb3\xc8\xd3\xaa\x9f\xbe\x82\xb0\xd3\xe6 \xb3\x84\x17\"!\xb1\x813\xc2\x94q\x9fN\xb7\x07\xf9T=\xdc\xadA_yd\x8as(\x08R\xfbJ\xdcB@\x06\xc3?\xa2\x9e\xc0\x8fj\x95\xc3G}8G|x5\x1a\x1f\xe91\x18\xe5\x11u\x05xT\xad\xc6Gw8Gv8\xb5\x1a\x1d\xd1\xa1/\x9b\xd2\x8f\xc4\x8a1\xb09\xc6\x8a\xdd\xa2\xaf\xbf\x02q\x1eA\xb7l\x86\x16\x0d\xb4\xc4\xaf\xd6\x8d\xd2;v\xd4V\xc8FR\xebr\xef\x80\x8d\xcdP,b\x97\xb9`\x8bI\xc4\xf2\x13:\xda\x07y\x91f\xdaR\x916\x8981\xc6\xbc\x11\x87XU\xc9\x12\x84(o96%\xd4\xee\x92N\x84\xe2\xc4\xa4y\"MI\xbe\x91\xb1\x8f\x14A\xd0\x16\x14\xf3\x85\"\x08l\xaa\xb9\xe7\x11\x04\xedY\xecx\x9fQ_\xb1\xe7\x83\xe5\xd2\xcdF\xa7?S\x84A\x87\xd8\x17K\x8a0\xa0\x08\x03\x8a0\xa0\x08\x83\xa6P\x84\x01E\x18P\x84\x01E\x18P\x84\x01E\x18P\x84\x81\x14\x8a0\xa0\x08\x03\x8a0\xc0i\x9d\"\x0c(\xc2\xa0\xef'\x8a08\x11\x8a0h E\x18t\nE\x18P\x84\x01E\x18\xa0\x06\x17E\x18L\x14a@\x9cu47\x928\xeb5\xb9\x135\xdb9\xd6\xc4Y\xaf\xc9\x04\xfa$\xce:q\xd6\xff\x819\xeb%\xadj\x88\xa8\xfe\xdf\x1dD\xf5_\xca\x17\x1b\xf4\xf4\xaa<\x88\x92m*G\xa9\xba\xee\xa8\xfcrY\xd6\x10-\xfdR\xb5\xa1\xe3s\xfa\xe9{\xc6I\xaf\xf4\xf6\xe5\xf2,\xcc\x052\xa1\xe8\xdc\xed\xf2\x1b\xd6d\x1f\x87\xfba^\xbe\xf7\xaf\x92\xf7\x0d\x86\xf5\x1d%\xf2x\xd0\xef\xe8Y\x8b\x11\x90\xe4\xc7|y8\xae\x06\xe9v(\x15\x02R\x8d\x80\xa4\xac\x00^\x8d\xe0\x80\xf9\x18\x99\x85\xbe\x02\x01),0\x0b\x8d\x05\xa6\xa4\xb2\xc0lt\x16\x98\x86\xd2\x02\xf3\xd1Z`.j\x0b\xccDo\x81\xc0\x14\x17\x98\x9a\xe6\x02\xc1\xa9.0%\xdd\x05\xc2S^ \x1c\xed\x05\x02S_ \x1c\xfd\x05<(00\x07\x0d\x06\xc2Sa\xc0\x8f\x0e\x03\xe1)10\x15-\x060\xd4\x18p3N\x90\x14\x19\x98\x97&s\xf29\x8b\xd94\x0b]\x06BPf`\x0e\xda\x0c\xcc@\x9d\x81i\xe93\xe0F\xf2\x00,\x8d\x06\xdc\xa94\x80\x81\xa5GPj\x00Y\xbe\x05<\x9b\x92^\x03\xde\xdaw\xa3\xd9\x00\xb2\xe9\x9et\x1b\x18C\xb9\x01\xbb\xca\xa7\xa5\xde\x80\x1b\xfd\x06\x1c(8\xe0D\xc3\x01|\xaf\xf8\xd1q\xc0\x99\x92\x03VZ\x0eLI\xcd\x01\x1fz\x0eL@\xd1\x01\xa4\xea\x1d\xa9:\x10\x8a\xae\x03\xd8\xfaZfR@\xea\x0e\x84\xa6\xef@X\n\x0f\x04\xa5\xf1\x00\x9e\xca\x03V:\x0fX)=\x10\x88\xd6\x03\xe1\xa8=\x10\x9a\xde\x03\x9e\x14\x1fp\xa7\xf9\x80/\xd5\x07\xbc\xe8>`\x9f\xf8\x80`f\x80\x03;\xc3\x85\xfa\x03\xbe\xf4\x1f\xf0\xa1\x00\x81]\x19\xe1\xa8@\x10\x9a\x0e\x04\x01)A\x10\x92\x16\x04\x13\x0f@Gz\x108S\x84\xa0F\x13:\x95\xbf\xb2(\xe6\x1b;`\xd2\xc6sO\xa5q\xfeV\xc5\x82\x89m\xfft\xc5\xb5\xaf\xa4\x9e\xffA\x8c\xc7\x15\xe7\x89yZ\xdeS\xbdJ\x131\x8e\xf2\x82\x15\xc7\\\xb9q;3B(Q\x8f\x0dU\xbfQ-]j\xd4\xce\xc8\xa9\xff\xfeH}\xbc\xca\xff\xa5\xff%\xfd\xeb\xfd\x9f@\xbaOxr\xdc\x0f[\xbaO\xe0\xfb7\xaf_./\xdf?\x7f\xff\xe1r\xf9\xe1\xf5\xe5\xdbW/.~\xb8x\xf5\xd2\xe9-\xf1\x7f\x1e\xaf\\\xbc\xfe\xd1\xe1\x1d\xebGL\x0e\x00\xe7&\xa9\xb4-\xf6\x11i\xd5w\xa3\xe7u2\x185 \xf5F\xaf\x12\xafn\xcco\x8f\xa2d\x1d/ \xe7\xf1\xf6I\x95ce\xa0\xe7+\x08^\xdd\x9f:u\x9d\xdb\xe5W0\xaa\xe4\x81\xe8?Fy~T^r\xd6\x00S+\xb2\xc0P\x0b\xaa\xcf\xe1kU\xfeO\x8b%X\xfd\xbd\xe0\xd9>7\x99%0i\xba&\xc7e\xf7i\x12]\xf3\x9e\xfc\x0d\x95 \xbb\x05\xdaJ\xd0\xc5\xd7\xeel\xbe:\xeeY\xf2$\xe3l#\xdd\xdd\xd2\xe0qR\x00h\x98\xb6\xb0^>\xef[iS~=m\x91A\xc4\xaa\x1f\xf3h\x97\xb0\xe2\x98qx\xc4?/\xe0\xc3\xdb4\x93\xf4\xba\xff\xe0\xb7+\x96\xf3\xc1\x95\x10\xe0\x13_\xe5Q1\xa5\xc7\xb9\xd1\x04]|g\x0b\xccoq\x94\\\x0fW2\xe7\xebc\x16\x15\xb7Ki\x88\xaf\xadi\xd5|k\xdb\xfeNg\xb5\xf9\x9eE\x12\x08.\x1f\x07\xfd\xf8p#\x06\xb3yT\xe2[w]\xbcY1\x15\xd6QVZ\xff\xda_\xc3*5\xa3=s\x1d\xb2\x8a\xd8lu\x8df\xb4\xeba\xba\xe0\x0c\xa2m\xf5\xe3\x99\x9c\xa6\xfa\x89\xff\x9f\xbd\x7f]\x96\xdcF\xf2\x04\xf1\xef\xf5\x14\xfe\xaf\xf9\xafIU}\xf2\xa4R*\xf5LkLm\x967U\xe7\xb6.g3S%\x9b\x0fmQ8\x0cD\x04'\x19D\x88D\x9cKW\x97\xd9\xbe\xc6\xbe\xde>\xc9\x1a\xe0\x00\xaf \x010\x00\xa6\xa4\x82\x9bu\x97\xf2\x04 \x02\x0e\xc0\xe1\x97\x9f;H[\xbf.\xafG\xea\xca\xfe\xdc\xa9\xf5\xe52~[ ;\xcf\xd1\xbb\x94\xad\x9b\xe0\x80,O73\xfec^\xb6%\xec\xfa\n\x12g\xbar\x1au\x19}\xc6\x8e\xc7\xbc\xae}\x8e\x95\xf6\x95\xde\xa9\xd2\xf9s\x8bq_\xf1\x1ci\xbf\xbf\xa9\x08\xb7==9&|\xb972Ua\xaf;B|\x08\xc3\xc3Mx\x13+-J\x9b\xca\xf1\x1cqf\x02x0B\x90\xe8\x9f\xfd)\xe7%\xad\xa9\xc73\xf1\x0d\xad\xa0\x0fX#\xc1A{\xd4uZ\xed\xe6\n\xa4Y\xbb\x93\xc8\x16[Y?AG\xf2\xb0Yc$\xfa;\xbdY?\x92\x87\xfcx>\x8e\x86\x86\x12\xa7\xddp\x19)\x81\xde\xd1J\x8dy\xd1 1\xa2\xbf\xdaX;\x9f3\x0eyK\xf2\xe2\x11\xf2R,\xe8\x9a\x8e\xf0\x7f\x1d\x96x\x8d\xf6|\x12\"\xd1*f\xc1o\x84>\xe2\x16F\"\xb7\xed\x92^\xca\xd2o+\xff`Z\xd8\xf7\xa4V\xf8\x8b\xed\xf4`\x8fy\xb9\x11\xc6I\xa7(u\x80s\xa5?\x8d\xe3O\x8c\x8c\xe5Oji\"\xc1\x96f\x05\xa9\xe8V\xbc$\xe7W\xfdU\xbf85\x10\xd78}\x03\x14\xee(\xd9M'\xae\x80\xb3=\xfa\x14\xa4C\x9678{r\xec`\xef\xa7]9\x7f\xe9\x0cG\x1cg\xda\x9aRN\xfc\xbc\x02\xfa\x803\x823$\x0f\xc0\xbc\xac\xaf\xe1]A\xea\x83\x90\xc7\x1a\x874\x87\x15$\x82M\xb8\xde\x95O\xbe\xd7\xec\x15\x82\x9c\xb0PlU\xd1\x8cCF\x8a\xec\\4.\xe9\xddY\xa8\xe2\xd3\x1f8\x97\xdd\xea\xe1\x82\x17\xec\xcc!\xe7\x12\x81]\xee\x81\xddI+\xa51\x05\xe1\xa7\x03-q(\x12d\xd5\xb5\x82\xa7\xbf\xd2\xd7\x84\xae\x06\x1b7\xaf\xc5!\xb5\xcd\xb9\xc6\xac\x90n\x8d\xd2\xfb\x03\xabi\x9b\xfe0\xfd\x91\xee4\xe4}xWgV\xb1\xebm\xb7\xb7y\x13\xf7A\xdf\xa1\x84\x1eM\x7f\xa5\xc7\xffk\xf8\x0b\x93l:\xb1{Z\xe9t%=\x05t+cH\xe4\\\x90 y \xd6\x1c\x10G\xa5\xc1\xc9\xa4\x825\xf3>\\\xd5\x98U\xf2=\x82\xe7zD\xcf\xf3\x88\x9d\xe3\x110\xbf\xc3#\xbb\xc0)\xaf\xc33\xa7\xc3\x86Y^\x9a\xcbak7\x95G\x9d\xa3\xc5\xb9\x1a\xa9<*\\\x92\x8f\xe1\x97\x8b\x91\xca\xa3:\xe5\\D\xc9\xb7\xb0\xf61\x95G\xf5\xc9\xad\x88\x97W\xe1\x98S\x91\xca\xa3^\x9e?\xb1$w\xc23obQ\xce\x84\x7f\xbeD*\x8f:\xa6x9\x11Q\xf3!b\xe5BD\xcb\x83\x08\xb5\xb8<\xf3\x1f\xfcr\x1fRyTK(,\x95GU\x94\xca\xa3\xb6\x7fY\x81\xcd\xf6r\x9e\xa9\xd2\xb4w\"y\xa3\x1b\xf4\n\xa6\x8e?\xa4\x9e\xfa\xad\x16J\x9d\x03\\\\\x84$s/s\xea\x14\x00\xe9\xf1v\xdd\x12\xa7\xee\x05N\xadl\x03'\xd6\x81#\xdc\xc4\x91u\xe0\x11\xabAZ\x05t\x12\x0fv\xb2\x06\xf0$ \xf4d-\xf0I\x10\xf8\xc9j\x00\x94\x95 (\xeb\x80P\xe2\xc2P\x02\x03QbCQ\x02\x82Q\xa2\xc3Q\xa2\x01R\xe2BR\xa2\x81R\xfca)+\x00S\xa2CS\x16\x81S\xa2\xc3S\x02\x01T\x1c *\x1e\x8a\x86#LeU\xa0\x8a\x8f\xfa\xb3\nX%\x02\\e\x05\xc0J|\xc8JP\xd0\x8a\x17\xb0\xc2\x11\xb8\xe2\x0d]q\x08\x02/\x86\xaf\xb8\xb4=\x1b\xa4\n bY\xc6m? \x8b\xcb\x80\x17\x82Y.\x80\xb3\xd8\"\x81A!-^\xa0\x16wX\x8b\x0f\xb0\xc5q\x16\x96\x81[|\xe1-6\x80K@\x88\xcb\x02\x90\xcb\xe50\x17\x17f{B]\"\x81]\x9cz:\xbbS\"B^\"\x83^\xa2\xc2^b\x02_\x9c\xa1/6\xf0\x8b\x0d\xfe\x12\x07\x00\x13\x0d\x02\x13\x19\x04\xb3\x0c\x06\xe3\x0d\x84Y\x08\x85Y\x02\x86\xb1\x1d\x82\x0e\x98\x05w\xd4\x82\x0f$f!(f\x01,\xc6\xc2\x82x\xd0\x98\xc8\xe0\x98x\xf0\x98\x88\x00\x99\x90\xcb\xcd\x13$\xe3\x0b\x93\x99.\x10j+\x0f\xca\x8d\xd1\xcc!\xf5l\xdfuJ\x83\xda\n\x83\xf6\xba\x14\xa3,\xa8\x93\xbb\xc2V\x12tIAP\xefr\xa0\xfe\xc5@\xbdJ\x81.,\x04j+\x03\xea\xc4\xdf\xde,\x87/\x01\xea^\x00\xd4\xbf\xb7\xb1\x8b\x7fv?\xe6\xda\xa3\xe6\x1f\xe1\n\x7f\xf2p\xf1J\xa7\x92\x9fN\x13\x01\xa3\xbaH\xe1\xcb}\xba\x15\xfb\\\xd6\xdd\xf8\x85>\x9d\xca|.\xeb|\x88\x12\x9f~\x05>\x97\xf53bqO\xa7\xd2\x9e\xcbz}QYO\xf7\xa2\x9eN\x9ds+\xe8\xd9\xeb\xfe\xc7)\xe7\xe9Z\xcc\xd3k\xd4\xf6\xcar\x13#_\xab\x8c\xa7K\x11\xcf^\x17\xc3\x94\xf0\x0cx\"\xf8\x15\xef\x9c\x18\xcb\xaa\xa5;\x9d\x06\x0f\xce\x0c\x00\xe7\xa2\x9dNKWS\x8fS\xb1\x0bv\xba\x97\xeb\\>\x86\x8fX\xaa\xd3\xbbP\xe7e\xa3\xfc(E:\x9dKt:\x8f\xcd]\x88\xc2H\x90F(\xce\xe9U\x9a\xd3i\x90\xfd\x89\x8b^\x96\xd3-:\x1d\xb3$\xe7*\x059#\x97\xe3\\\xa3\x18\xe7\n\xa58\xd7(\xc4\x19\xb3\x0c\xa7W\x11\xce\xde\xca\xf7)\x14\xd8\xd4 \xbc\xb4H`\xaa\x118\xfe9\xd5\x084\x90\x8b\xce\xc7\x1d@\xdbN\x07\x90\xeb\x99\x80\xb4\n\\;\x16X;>T\x9b\x87\x02j\xaf\x03\xd3\x0e\x00\xd2^ \xa2\xbd\n@{\x0dxvLpvPhv\\`v0XvdPv$HvL@v$8\xb6/\x18;:\x14;2\x10\x9b\xfb\xc3\xb0#\x83\xb0\x83@\xb0\xad\x00lG\xa5\xc1\x11|\xbd\"\xf4\xdaU\x8dY\x05v\x1d\x1ct\x1d\x1dr\x1d\x1bp\x1d\x10n\xed\x01\xffu\x82Z{\x02\xadm\xe0\xc3\xa5 k[\xbb\xa9F\xe0\x1c-\x06U\xa7\x1a\x81p \x8c\xda\x0fD\x9dj\x04:\x01\xa7\xa3\xc0\xa6\xad}L5\x02}\xc0\xd2\xf1\xa0\xd2\x8e@\xe9T#\xf0rx\xf4\x12p\xb4'4z\x110\xda\x1f\x16\x9dj\x04\x8e)\x1e\x10:*\x0c:\x16\x08:\x1a\x04:\xd4\xe2\xf2\x84?\xfb\x81\x9f\xff\x91j\x04\xf6+\x1fM\x8d\xa3\xffTo\x1cm\xa4\xf1#\x8c\xc3\xbb \xd4!\xaf9\xab\xf2\x8c\x14\x9b\xbc\xdc\xb1\xa7\x7fCH\xd8\\\xc5\xa7\x7fk^yS\xeeXS\xe2I\x8c\xbdmmX\xe7 \x9b\xd5\xa3\xefUs\xea\xb7\xa7\x9e\xf8\x8dUr\x12\x8c1\x9b\x03\xbdA\x88\xc7z\x8bi\xc8PUF\xce\xc4\xd3>\xcd\xf6\x15\xac\xfd\x15t\xa0d;\x87\x15\xb6~\x02\x9c>#H\xb9W-\xc8\x17\xbcn\xef\x96\xd4y\x06\xb7\x05\xcb>H\x9e\xcc\xbf\xe3\xd2Gp\xee\xa7 \xf9e\xdbC\xce\xce@$\xc7\x0b\x07\x91\xc8\xe9\xf4\xf1>\xef\xea*Dz\xa9\x8brAFN\xfc\\5pG\xfd\xe7\xea\\P\x04\xc3\x9f*&v/\x9e\xf2zv1\xf0%\xfe\x91\x1dH^^YlWULQ\xb6!\x14\x88\xe6E\xd8\x12N\x047\xce\x19\xf6B\x1bA\xf8}\xed2m\xc3!\x9f\xcc\\`\x8aTs \xb1\xa9HY\xa3*q$\xd9!/g\xca[\x00\xc8\xbel\xf2\x99d!p\x9f:\x1b\xbe\x18\xdc\x9br\xc5\x19\x03|$|\x9aT\xe6\xe5t\xda\xb9\x87R\xe2T\xd1\xbb\x8f($\x0e\xa4>\xd8\x9e\xf1\xe0\x15\xb8\x87\x0d\x00\xf54\xbe\xa9)\xdf\xd8D\xb8&g\x0e\x80\x17\x17\x04Y\xeec\xed\x12\xb7\xe2V\x86\xe4\xbal5\xb9M\x0b\xf8N\x0d\xf8MO\xb3HoH\xc5k\xca\xffM\xce\x92m\xf9K\xcc%\xdf\xd8\x87\xe0\xdcu\xe7.\xab\xee\x8aO\xa3\xb4\xc4\x8d%\x84\xea\xcc{\xe2\xe7\x8f\xd0\xdd\xb6\x8c\xe9G\xf8\xf8\x90W2)S\x9d-\xc0\xce\xfct\xe6\xed\xdfZ\x195\xd3\xa2,+\xfeQ\xc7\xd4V\xd6\\\xff\xdb\xe4t\xfa\x08_\x95\xfbMa\x1e>\xc2\xe7\xe9]\xbe\xa5eF?\xc2\xa7\x9b\xf5\xdb\xaah\x96\xe3S\x9c\x06\xac\xa6\x0e\x15d!x\x7f{\xca(J\xd1\x9e\xf5\xd4(|\xd29\x0b\xefi\xb9\xa5\xd51/\xb9\x12`x\xda}\xd6\x91\xbd\xe0m\\!\xad\x02+\xd5\x14\x0b^\xaa)>\xccT\x93)\x98\xb5\x08n\xaai\x1d\xd8\xa9\xa6\x00\xf0SM+\xc1P5\xad\x02G\xd5\xb4\x06,USLx\xaa\xa6\xa00UMq\xe1\xaa\x9a\x82\xc1V5E\x86\xafj\x8a\x04c\xd5\x14\x13\xce\xaa)\x12\xacU\x93/\xbcUSt\x98\xab\xa6\xc8pWM\xdc\x1f\xf6\xaa)2\xfcUS\x10\x18\xac&+\x1cV\x93\xa7\x12\xe4\xa4\xf9\xb7\xb4\"L\xd6\xf8I\x075m\x15\xd8\xac\xa6\xe0\xf0YM\xd1a\xb4\x9ab\xc3i5\x05\x84\xd5j\xf2\x00\x80jr\x82\xd9j\xf2\x84\xdbj\xb2\xc2\xd7\x14-\x85\xdfjr\xfd\x8e\xb5\naXX\xae\xa6\xe5\xb3\xe3\x07\xd3\xd5\xe4\xca\x8e\x85\xb0]M\x8b\xe1\xbb\x9a\x1c\xa6#,\x9cW\x93\x07\xacW\x93+\xbcW\x93;\xccW\x93\xc7\xac-\x83\xfdj\xf2\x83\xffj\xb2URF\n\x06\x07\xd6\xe4\x0d\x0b\xd6t)j\xc1n\xc4\xac\xe5=\xf8B\xcc\x8a\xdeH\x91\xebz#\xadQ\xdd\x1bi\x85\x1a\xdfHkT\xfaF\x8aY\xef\x1biy\xd5o\xe3N\x91\xc5\x05\xfa\xd9\xfbM\xc5\xef\xbc6\x17\xfdV%\xbe\x075\x04\xde\xde\xbc4\xf5\xe8\x98\x97\x9b\x01\x00\xf3\xc2~\xaab\x9a\x86\x86\x1bp\xe2\x81\xe4\xe5\x93\xfb|K\x1b4\xd3\x10\xae%\xd5%2@\xf2!\x88\x0f\x10$\xd4\"jfF\xe6\x0c\xe4\xf2\x1d\xd9\x04l\xcb02\x85\x97\x19\x0d\xe8 \xc1,=\x18\xd7\xd8O\xde\x9bsy2\xe3\xc9\xe8\n9\xc1\xa7\xd3M\xf2\xe3\x9f\x13\xae\xc4@ve \xe1J\x12\xae$\xe1J\x12\xae\xa4O W\x92p% W\x92p% W\x92p% W\")\xe1J\x12\xae$\xe1J\xdc\xb8\x9ep% W2\xf5S\xc2\x95\x8c(\xe1J\x06\x94p%FJ\xb8\x92\x84+I\xb8\x12\xa7\xc5\xb5\n\xae\xc4\x1bi\xc1X1\x83\xb3`\xac\xe8!,\xc4\xe3=(\x89\x11X\xc1X\xa1~\xfe\xad\xc1*\x1an\x0d\xa9\x0f\xaa\x10\\\xea\x86LGl\xeb\xd3l\x8f\xc0\xda+A%\xe3\x1bLX\xdf\xd8\xaa :\xf8@B\xb4d\x08+2V8\x07\x15\x05\xc7RHqD)\xa4h \xfb\xf6H!\xc5\x14RL!\xc5\x14R\xecS\n)\xa6\x90b\n)\xa6\x90b\n)\xa6\x90b\n)JJ!\xc5\x14RL!E7\xae\xa7\x90b\n)N\xfd\x94B\x8a#J!\xc5\x01\xa5\x90\xa2\x91RH1\x85\x14SH\xd1iq\xfd\"C\x8a\xc3,YS`\xf1/m\"\xab\x0e/\x92\xa2\xe8\xe4\xaej\x87\x1f\xcf\xb0\x02\xf8>\xbf\xa3\xa5\xba\xd4\xcc\x18{l[T\xbf\xfe\xc6B\x8f\xb6\xdcc\xfe\x0b\x88\xb1\xe0\x84\xb0jC\xb6\xdb\x8a\xd63O:\xbbMz34l\xbf\x17c\xd5\x7f\x1b^P\xf0I\xdd\xbc\xf7?\xe1\x96f\x07\xa0e\xc6\xb6\xd2\x1b)E\xc3\xb4\x92\x97\x89\x15P\xd6\xe7zs:\xdf~\xa0\xb37N9\xb0\x10\x1c\xd9\x08\x8e\xe1*pg#x\xf8{4\xad\x12\xba\x82\x88\xe1+X%\x84\x05!\xc3X\xb0Z(\x0b\xc2\x84\xb3`\xbd\x90\x16\xac\x15\xd6\x82\x95B[\x109\xbc\x05\xa1C\\\x10=\xcc\x05!C]\x10?\xdc\x05\xf1B^\x109\xec\x05\xf1B_\xb0 \xfc\x05k\x84\xc0 ~\x18\x0c\x96\x85\xc2 ~8\x0cB\x85\xc4\xc0%,\x06~\xca\x89cx\x0c\xd6\x0d\x91\x8d>gQ\x9bV \x95A\x8cp\x19\xac\x112\x83\x15\xc2f\x106t\x06~\x01\x1ep\x0d\xa1\x81\x7f\x18\x0d\\\\\xd2\x17\x84\xd3\xc0\xb1}\x8b\xe3,dh\x0d\x16s\xdf/\xc4\x06\x8eC_\x18j\x83K\xc2m`gy\xd8\xb0\x1b\xf8\x85\xde\xc0#\xfc\x06^!8p\x9f\x95e\xa18\xf0\x0e\xc7\x815$\x07!\xc3r\xb0$4\x07\x01\xc2s\xe0\xc8z\xcf0\x1d\xc4\n\xd5\x81k\x7f-;)b\xd8\x0eb\x87\xee n\xf8\x0e\xa2\x86\xf0\xc0=\x8c\x07\xd6P\x1eX\xc3y\x10)\xa4\x07\xf1\xc2z\x10;\xb4\x07\x0b\xc3{\xe0\x1f\xe2\x83\xa5a>X\x14\xea\x03\xfb\xc6\x07\x87\xa8\x0cxDf|\xc2~\xb04\xf4\x07K\xc2\x7f`gF\xbc0 \xc4\x0e\x05B\xc4p \xc4\x0c B\xe0\x05\xe8\x19\x1a\x04\xef\xf0 tB\x84c\xfa\xdf$/\xe8\xd6\x1e0\xb9e\xac\xa0\xa4\x9cy\xaeg\x7fc\xb3*\xee\xb3\x85\xfb\x03U\xbe\x12:\xa8zyKi\xa9\x9f\xdeU\xec\xd8\xdc\xe6*#\x88\xe8\xc6\x9d,\xa7\n\xea\xb1\xb9\xee\xf7\xba\xa5Z\x1d\xde\xab\xac\xff\xfe)~\xfciS\xd0V\xfd\x97\xf4\xafO\x7f\xc2\xd1}B\xcb\xf3L\xd9W\x901\xdb\x17?|\xffj\xf3\xee\xfd\xf3\xf7?\xbe\xdb\xfc\xf8\xfd\xbb\x9b\xd7/\xdf|\xf3\xe6\xf5+\xaf\xb7\xc4\xbf\x16\xbc\xf2\xe6\xfb?{\xbcc\xfd\x88\xce\xff\xf3\x1e\x92-\x99\xd1\x99\xdf\xbd\x99\xc7V\xd5\x82T\x07}{\xd5\xb2\xfc\xed\xd3\xbc\xcc\x8akY\x84\xf5I[\xcduf\xe6\x9b\xaa\xb3\x1b\xbc{8t\x9f\x87\xed\xb7aTy\xefqs's}F/9\xe9\x05S;\xb7L\xcf\x8c\xa0\xfd\x9c{\xaf\x9a\x7f\xf4\xe2\xba\xdd\xbfsZ\x1d\xeb&S\xb4\xe9\x95}\x13\x05\x8b\xcb\x1eY\x99\x7f\xa0\x13\xb9\x9b-9N\x0b\x8c\x8acc\xf3\x9d{\xd1\x0f\xe7#)\x9fT\x94`\xcde\xa9\xf0x1\x00T\x98\x96\xcf\x86\xaf\xe1\x82N\xeb\xf6\xdb^\xb7\x11\xb1\xf6\xc7:\xdf\x97\x84\x9f+\n\x9f\xd2\x87k\xf8\xf1\x86U\\\xc8\xe1\x7f\xa7\x8f\xb7\xa4\xa6\xb3\x92\x10\xe0\x9e\xde\xd6\xf9\\\xd9h\xa4\xa5CP\xcd\x1bG\xa0\x7f+\xf2\xf2\xc3|'k\x9a\x9d\xab\x9c?n\xa4\"\x9e\xf1X\xbd\x1d~\xc7\xd8mz$\xb9\x0c\x047\x8f\x83z|~\x10\xb3\x99\xbc--\xed\xbbj^KL\x8cu4\x9dV\xbfN\xf7\xb0-\xe7\x8f\xf7]\x04\x90\x8dn\x85\xdc\x07\xc3\x18\xf6CO\xc1\x15\xe4\x9d\xcb\x04\xf0\xfa|\xf5DsSG\xff\x8a}\xa5\xae\xec\xcf\xa5\xfd\x12\x02\xf7\x8b\x12\xbcG\xbf%\x9c>\x11m\xfas\x00/S\x98\x1e\xff1/\xf1\xc2\x85\x91\xdc\x921X&4iN]F\xdfVpw>V:E\xdf\xbb\xa7J\xe7\xcf\xe3\xdbBL\x14\xf8\x1c\x19T\xad\xb7n\xb7\x891\xe1\xcb\xbd\x91I\xa0\x00)\x86\xd5\xeeux\xb8 of\x15%\x1cm*\xc7s\xc4\x99 \xe0\xc1\x08A\xf3\x17\x02\xb4\xe4\xb8\xa45\xf5x\xd6\xbb\x1b`p\x11\x00\xd6\xfc\x97\xbaN\xab\xdd\\\x814kw\x12\xd92}\xb7AKG\xf2`\xb9\xda\xa0\xa5KF\xa2\xbf\xd3\x9bu}\x0f\xc8ph(q\xfaW\x1c\xd0;Z\xa91/\x1a$F\xf4W\x1bk\xe7s\xc6!oI^\x08y\xacqHsXA\"\xd8\x84\xeb]\xf9\xe4{\xcd^!\xc8I\xc2oXU\xd1\x8cCF\x8a\xec\\4.\xe9\xddY\xa8\xe2\xd3\x1f8\x97-\xc7k\xc9\x0bv\xe6\x90s\x89\xb8.\xf7\xc0\xeeh\xf7z\x94k\xf8\xe9@K\x1c\x8a\x04Yu\xad\xe0\xe9\xaf\xf45\xa1\xab\xc1\xc6\xcdkqHms\xae1+\xa4{\x11\xd0\xfd\x81\xd5\x9d\x8bs\xa6?\xd2\x9d\x86\xbc\x0f\xef\xea\xcc*v\xbd\xed\xf66o\xe2>\xe8;\x94\xd0\xa3\xe9\xaf\xf4\xf8\x7f\x0d\x7fa\x92M'vOQ\xe8\xde\xd2f\n\xe8V\xc6x\xe4\xb2\xd2n)\xd9\xbd\xe9\xd6\x8f\xe7\x82\xe7\xa7\"\xc7\x0e\xf5\xbfe|\xa9\xb7\x1b:\xb0\xfa\x16\x9b\xa2\xee\xfaB\xf8\xfd\x16\xe6\xaf\x8d:\x91\xbd\xba\xe3\xc7,\x1az\x9fk\x1f\xee\x17\xc1j\xff\xac\xd6\xac d\xdf\x92U\xd9\xb0\xab\x18%}\xe0\x9bY\xe0\xb6\x934s\x02'\xa9\x8b{\xfek\x0e!\xa4\xfb\xa3\x85\x9f\xf8O\x85\xda#u\x8d\x1a\xc8\x0d\xd9\xd3\xb7\xf4\xe73\xad\xf95\xfe>\xd3`{\xd5\x9fhZ\xb0\x98\xc2\x91\xd5\x1c\xa8\xc4\xc3I\xb0\xdc\xc4\xebr\xfd\x05b\xccy\xdevR\xac\x99\x05O\xe1v\xc8\xf5\xbeh/\xc4\xd2\xe2\xb0\x03\xf9\xdb\xf5\x98\x94\x89-\xbc\x91\xaf\xcd\xb9\xd8\xc5YXS~\x059\xaf5\xc6\xb4\x96r\x0e}\xc9\xd2\x12\xbd\xcf\xeb\xf1\x0c\xab\xee\xcb\xbc\x976\xcd\xc4\xb5\x92Y'\xd5\xa5\xadg\xd6|#\x953K\xe5\xcc\x86d\x97kn\xf9!N[\xd8]q\x82\xb5rBb\xe5\x83\xc4\xcf\x05\xe1\xa1\xf2@\xd6\xc9\x01 \x90\xff\xb1R\xee\xc7*y\x1fk\xe4|\xc4\xcc\xf7\x08\x9a\xeb\x117\xcf#X\x8eG\xe4\xfc\x8eH\xb9\x1d1\xf3:\"\xe5t\xf8\xe6sD\xcf\xe5\x88\x9c\xc7\xc1\xfds8\"\xe7o\x04\xc9\xdd\xb0\xe6m8*\x0dN&\xd1\xaa\xb9\x1a\xaej\xcc*9\x1a\xc1\xf33\xa2\xe7f\xc4\xce\xcb\x08\x98\x93\xe1\x91\x11\xe0\x94\x8b\xe1\x99\x87a\xc3\x19/\xcd\xbf\xb0\xb5\x9b\xca\x99\xcd\xd1\xe2\xfc\x8aT\xce\x0c.\xc9\xa1\xf0\xcb\x9fH\xe5\xcc\x9c\xf2$\xa2\xe4HX\xfb\x98\xca\x99\xf9\xe4C\xc4\xcb\x85p\xcc\x83H\xe5\xcc.\xcfyX\x92\xef\xe0\x99\xeb\xb0(\xcf\xc1?\xc7!\x953\x1bS\xbc<\x86\xa89\x0c\xb1\xf2\x17\xa2\xe5.\x84Z\\\x9e9\x0b~\xf9\n\xfa\xc8m\xe1^\xadj\xf3D\xca\\\x8d\xe3\xef4cB\xf9\xd3\x92\xdc\x16\xe89\xc1\xf0\x9b\xe0c'\xc4*\x8b\x96\xe1D\x9b\xaa\x96\x81<;\xbe\xc2w;\x7f\xab\xe8\xcf\xe7\xbc\xa2\xdb\xaf`G\x8a^\x14\xca\x14\xb11\x9a\xe9z\x18m\xa4\xf5\xfa\x03}\x9c\x1a\xce R\xa9\xc2\x92D\xc9\xfd\x8a\xf2sUb\x95,\x8c\xb6\xa9\xa0S\x13\xc3\x94n\xa9}\xde\xcf\xdd\x90\xa3\x12\x83\x9f\x8fI^\xc3\x0f\xe2Df\xa54\x87\xd9nWS \x06\xeew\x17:\xce\xed\x9a\xf2\x158\x08S\xae\x0d\x03k\xb1\xd7S\xdc\x1dx \xd4\x10%\x83\xcb\xf3\x91Vy\xa6\xff&e\x87\x82\x08\xa0\x8f\xe7@K=\x1d\xe7\xb2q\x8f\x0d4\xe77\xb2\xb5\x82\xd6u\xcbXt:\x9dk1\x01\x1f\xe8\x1c\x97\x15g\xfbM~\x146\x0fb\xc7\x06F\x17\xf91w\xe5\xb3|V\x87\xd7\xa7B\xc9\xe8P\xed\xaep\x85F\x10\xca\xea =1\xddF\xdf\xec\xa0\xa0;\xae\xbcv9G\xd1\xae\xb5[\x9d!q\xa6\xaaa\xc1\xe5\xdbG\xa0$;\x009\x9d~q\xfc\xec\x06\xcc\xdb\xf7\xe7\xb8\xdayC\xf0V\xaeZ\x06\xbc:S\x10\xff\x91\x97\xdb<\x93h&\x15\xcd\xd1\xbc\x14\x0f\xaa-\x9c\x97Yq\xde\x0e\xb4^\x82-7\xe1\xb1\xc1|\xc9@j\xc7?,\x04m\x1fE\xf2\xe3\x9bz0W\x83\xaeJ\xc5\xbf\xa2\xb5\n\xa0\xcb\xad\xd5\xeeE\xb1\xdd\xae\xd5N\xca\xf7%\xab:\xbb\xaf\xdf,\x8e:\xc6T\x0e3\xe0\x0c\x13V\xd1;Z\xf5\x9a\x9b\x9b,\xf5\xf4p\xa2\xf2\x0e\x94\xa2\xa2\x13{@\xb4K%\x08\x1bX\xb5\xa5\xd5\xd0Y\xf4./3\xfa\x15`\xe5\xcf'\xf5\xf6\x03|v\xfd\xa7/\xa2se\xaa\x04\xe9\xef\xed5H\x9f\xfe\xad\xf9oY6\xf2\xef\n\x101[\x95\xb4)J\xda\x01\xa3\x95;&\x17 \x9e\xe9\xed\x0f\xaa\xee\xa4^\x1a\xe6\xa2\xa4\xea\xc7\xdfjM\xd29\x9c\xc4E\x00.\xf7\x8a\xa2Nq\x8b\x1eo\xd7\xad&\xea^K\xd4\xca6pb\x1d8\xa2D\x1cY\x07\x1e!\x16\xa4U\xb0\"\xf1\xd0\"k\xe0E\x02\"F\xd6\xc2\x8c\x04A\x8d\xac\x86\x1bY 9\xb2\x0ev$.z$0~$6\x82$ \x86$:\x8a$\x1a\x8e$.\x92$\x1a\x96\xc4\x1fM\xb2\x02\x9e$:\xa2d\x11\xa6$:\xaa$\x10\xae\xc4\x01Y\xe2\xa1h8\xa2KV\xc5\x97\xf8\xa8?\xab`L\"\xa0LV\xc0\x99\xc4G\x9a\x04\xc5\x9ax\xe1!\x1c\xf1&\xde\x88\x13\x87\xd8\xedb\xd4\x89K\xdb\xb3\xb1\xa5\x90\xd8\x93e\xdc\xf6\xc3\x9f\xb8\x0cx!\x06\xe5\x02\x14\x8a-\x80\x17\x14\x89\xe2\x85EqG\xa3\xf8\xe0Q\x1cga\x19&\xc5\x17\x95b\xc3\xa5\x04D\xa6,\xc0\xa6\\\x8eNqa\xb6'B%\x12F\xc5\xa9\xa7\xb3;%\"R%2V%*Z%&^\xc5\x19\xb1b\xc3\xac\xd8P+qp+\xd1\x90+\x91\xb1+\xcb\xd0+\xde\xf8\x95\x85\x08\x96%\x18\x16\xdb!\xe8\x005p\x07\x1b\xf8 Y\x16bY\x16\xa0Y,,\x88\x87h\x89\x8ci\x89\x87j\x89\x88k \xb9\xdc<\xb1-\xbe\xe8\x96\xe9Z\x9c\xb6J\x9c\xdc\x18\x85\x1cR\xcf\xf6]\xa7\n\xa7\xad\x06\xa7 \x9b\x13\xb4\x02\xa7\x93\xbb\xc2V}sI\xedM\xef\xca\x9b\xfeu7\xbd\xaan.\xac\xb9i\xab\xb8\xe9\xc4\xdf\xde,\x87\xaf\xb6\xe9^k\xd3\xbf\xb7\xb1\xeblv?\xe6\xda\xa3\xe6\x1f\xe1jl\xf2p\xf1J\xa7\xea\x9aN\x13\x01\xa3\x12D\xe1+k\xba\xd5\xd5\\\xd6\xdd\xf855\x9d*j.\xeb|\x88j\x9a~\xb54\x97\xf53b\x1dM\xa7*\x9a\xcbz}Q\x05M\xf7\xfa\x99N\x9ds\xab\x9d\xd9\xeb\xfe\xc7\xa9\x9c\xe9Z7\xd3k\xd4\xf6\"n\x13#_\xabb\xa6K\xbd\xcc^\x17\xc3T\xcb\x0cx\"\xf8\xd5\xc9\x9c\x18\xcb\xaaU2\x9d\x06\x0f\xce\x0c\x00\xe7\xfa\x98NKWS\x8fS\xb1kc\xbaW\xc6\\>\x86\x8fX\x15\xd3\xbb&\xe6e\xa3\xfc(\xf50\x9d\xaba:\x8f\xcd]\x88\xc2H\x90F\xa8\x83\xe9U\x05\xd3i\x90\xfd\x89\x8b^\x01\xd3-:\x1d\xb3\xfa\xe5*\xb5/#W\xbe\\\xa3\xee\xe5\nU/\xd7\xa8y\x19\xb3\xe2\xa5W\xbdKc}>\xef\xf2|\xa9:\xdf\x88Ru>\x03\xb9\xa8m\xdc\x01w\xedt\x86\xb8\x8au\xa4U\x10\xd7\xb1\xf0\xd6\xf1\xd1\xd6<\x14\xd6z\x1d\xa4u\x00\x9c\xf5J(\xebU0\xd6k \xacc\xe2\xab\x83\xa2\xab\xe3b\xab\x83!\xab#\xe3\xaa#\xa1\xaacb\xaa#!\xaa}\xf1\xd4\xd1\xd1\xd4\x91\xb1\xd4\xdc\x1fI\x1d\x19G\x1d\x04Em\xc5P;*\x0d\x8e\xf8\xe9\x15\xd1\xd3\xaej\xcc*\xc8\xe9\xe0\xb8\xe9\xe8\xa8\xe9\xd8\x98\xe9\x80\x88i\x0f\x04\xaf\x13Z\xda\x13+m\xc3\x0f.\xc5I\xdb\xdaM\xd5\xf9\xe6h1.:U\xe7\x83K\x90\xd0~8\xe8T\x9d\xcf \xfb\x1c\x05\xf9l\xedc\xaa\xce\xe7\x83w\x8e\x87vv\xc4:\xa7\xea|\x97#\x9c\x97\xe0\x9b=\xd1\xcd\x8b\xb0\xcd\xfe\xc8\xe6T\x9doL\xf1\xb0\xccQ\x91\xcc\xb1p\xcc\xd1P\xcc\xa1\x16\x97'\x82\xd9\x0f\xbf\xecR\x9d\xaf_\xc8\xa7\xd3\\\xcf\xb8\xec?\xd5\x8b\x90\x8f\x8a\xf6\xf4j\xf8u\xcf\xdf\\^c\xc6\x0f\x9d?\xb5U\x8cxuv+b\xd4\xb3\xd3C\xd60z\xda R\xba\xd43z\xd5\x89i\xea\xd2F:\xec7Y\xd9H\xf3\xc3\\\xd1\xa8\xd3\xa4z\xee7V\xdc\xa8e\xf1\xc60\xb2.\xf1_@\xc4\xc9\x05\xb5\xe0\xf41p\xfc \xf4\xc0\xd3\xd6\xf2LH\x8e\xee+\x98FR\xeb\x8d\xab\xb0\x13\xb74;|\xf1\xf9\x13]\x83iP\xb5\xa9ym^\xb5\xeeo\xae\x88\xc3\x18}\xc8m\x18\x8e\xc03\x1b\x80\x1dii\xdf{\x10\xf6.w\xa5\x8f\x13\x7f\xachF\xf3\xbb\xb9\xbbf\xdd\x1d\x81\x82Z\x19\xd3\x9e\xde\x8aa\xacT\xdeV\x05\xfb?\x08\xdd\xf3\xf6Q:\x0c3Y\x03P\xd5\xf5\x9b?\x1b\xd9}\x89V\x12+;\xcbE9\xabe0\x86e9i\xa0\x18r6\xba8\x07\xb6\x13o\xce\x7f\xc3a\xfanIA\xca\xcc\xc1\xf3\x1bp\xeb\x96l6o\x05|\xd6\nBJ\x025\xe7\xb3B^\xb2\xbc\xec \x99\xe4bhQ3%;\xeaZ\x91bB\xc5\xda\x90\x1d\xb59\xd9\xbe\xff\xe1\xfd\xeb\xaf\xa4\x15\xa6\xb02h\xda\xe4\xd2\x1f\xfd\xa6\xd4h\xe4\xc6\xd1\xdfS\x00\x15\x84d~\xabj\xdc~\xdd\xa8\x15b\x11\xee\xd9\x9eIE\xebR/z\xbbq\xba0\x18\xf1\xa5;R\xc8:\xb1\xac\xbb\xb9\xe8CFO\xaa\x10m\xce;\xde\xf7\xe9Q\xa8\x15;\xd4t\x95 P\xfc\xa9\xe1\xc8*\n\xf59\xe7M\xfd\xce\xac\x90\x85j\x9b#\xd54\xd4t\xdb\xac5x\x93n\x9b\xb5\xb1\xe6W~\xdb\xacqf\xfb\x10\xb7\x8e\nnE\xbbM5\xf6\xd4h#$(\xdc\x90\x12\x14\xce@v\x91\x98\xa0p \n\x97\xa0p \n\xd7\xa7\x04\x85KP\xb8\x04\x85KP\xb8\x04\x85KP\xb8\x04\x85\x93\x94\xa0p \n\x97\xa0pn\\OP\xb8\x04\x85\x9b\xfa)A\xe1F\x94\xa0p\x03JP8#%(\\\x82\xc2%(\x9c\xd3\xe2JP\xb8\x8b\xa0p\xe9\xa6\xda\x057\"\x1a<\x1d\xe9\xa6\xda\xf6/+\xb0\xd9~\xb3j\xba\xa9\xb6C\x01\xf8\x99n\xaaM7\xd5N\xec\x81\xedo\xff\xa6\xda.\xca\xfb\xe9\xdf\xfa\x18\xd8\xb9kl;\xc8.g\xb0w\x0b~\x84\x13\xc9\xcd\xd8\xef\xb6]\xf5\xebo\x1f\xf1=\x87\xab\xb8\x08+\xe6\x82\xd7\xb6~\x06\x9c>\x05\xfeHm\xc7\xd8\xca\x8a(mO\x8c\xf6\xb2\x01\xc4\xc4g\xbb\xa0\xb3\x97\xf5:\x0c2\xdb5*\x15\x1f\x95\x1d\x1f\x93m\x9d0+\x1e;\xe8\xd6\xb4\"\xb1\x1d\xd7\x85\x0b\n\xdb\xa9)\xf7\xb5\x10\x03\x7f\x1d\x19}\xbd\x0c{\xed\xc6\x92\xd8\xb8\xeb\x88\xa8\xeb\xde\x00\xa5\xd6b\x1e\xcc\\-\xc5\xce\xd0Z\x04i\xfb\xa9\x04!M\x10\xd2!\xb9\xc8H\x9e \xa4 B\x9a \xa4 B\xda\xa1\x04!M\x10\xd2\x04!M\x10\xd2\x04!M\x10\xd2\x04!\x95\x94 \xa4 B\x9a \xa4n\\O\x10\xd2\x04!\x9d\xfa)AHG\x94 \xa4\x03J\x10R#%\x08i\x82\x90&\x08\xa9\xd3\xe2J\x10\xd2@\x10\xd2>\xea`j\x1c\xfd\xa7\x06\x97_k\xe4\xcbG\x18\xc7jx\xa1\xf6\xea\xfb\xce\x15\x843 \xa2\x0e\xe6\xf6G\xfd\xa6\x01X\xd4\xb4\xea\x80,j\x1a\x9cD\x18\x19\xbe\xa4\x1e\xfb\x8dA\x8d\x90ms!\xb7\x10\xe8\"\x17\xb4\x8c\x93\x0fl\x15\x98\x8f\x07\xc4\xc7\xbf\xd3\xb1\xa0=\xb4\xe4\x955x9\x17@\x05[\x10\x15\\\x96\x04\x92}a \xe1\xa5\xc6\xac\xb4\xde\x01\x8e\xe4\xc4m$\xb7\xfb\xc0\x91z\xf33\xe8\x92\x9e\x1d\xf5/}\xfbw\xe7\xcak\xe0\x8c}\x80SA\xb2I/)\x92\xba-[\xb4m\xbf\xbdv\xd1`\xddn\xb0\x1d\x0e\xb8\xdf-=\xe0s\x99?\xb4W\x7f\xb7\xa3m\x1f\xb7\xf86\xf0^\xeb\x8d\x15\xc1\x84\xe41\xda^\xef\x07\x9f\xe9\x9d\xa7\n\xfb\xa5\x1e)\xd0\xf5\xbf=\x17\x18\xa6RH4 \xdcyL\x91\xc723\x86%\xfd\xed\xb5m8\xd0^\x97\xbczl1S\x9d\xbb\xeb\xd5\x06G3\xb1\xa2\x05\xbd#%\x17f=\xd9\x12N\x1c\xa1{J !r\xba\xb7a:\xa8@\xf5\xd0%P'\x93RPs&\xef\xfb-\ni\\C\x9d\x97\xfb\xa2#\xf9?\xe9\xea\x0b\xe2\x7f'q\x80b\xf17\xef\xb7\xaa\x84\xb0\x04\xf0f\xfc'\x12\xf4M\xb7P\xe45\xb7\xa0\x99\x8ccX\x08q2i(\x86\xd6\x13\xfciD \xfed \x97\x13\x9b'\xf8S\x82?%\xf8S\x82?u(\xc1\x9f\x12\xfc)\xc1\x9f\x12\xfc)\xc1\x9f\x12\xfc)\xc1\x9f$%\xf8S\x82?%\xf8\x93\x1b\xd7\x13\xfc)\xc1\x9f\xa6~J\xf0\xa7\x11%\xf8\xd3\x80\x12\xfc\xc9H \xfe\x94\xe0O \xfe\xe4\xb4\xb8\x12\xfc\xe9\"\xd8P\x82?\x19\xe0O&\x84\x93\xd3\xf5\xb8\x86\xa0^m@8uZ\xc5\xf8\xe6\x08\x1db\xbe*\xd7\xd4\xbcz\xe17 k\x123\xf0\xeb\xb92\xd7\x05o\xe4\xec+[\x05(\xe5\x05\x95Z\xd6\xf5Xp)\x07\xc0\x94}q YASN\x0b\x05\xc9e\xb9 yB\xa7\x9c\xb9\x8f\xe4\x03\x9fZ\x0d@\xe5\x0d\xa1Z8hW\x18\xd5:@*o(\x95\xe7\xa8?\x1e\x9c\xca\x19Pu\xc9\x88\x02\x83\xaa>\x06\xac*8\xb0\xca=p\x11\x17\\u9\xbc*]\xd1\xeb\x10\x12KW\xf4\xdaX\xf3k\xbd\xa2\xd7\xbe\x8d\xfb\x17\xf5\x9a\x0c\x00+\xe0\xd0\xd4\xf5\xc1\x95\xbdF\xbb%A\x0fG\x94\xa0\x87\x06\xb2\x0b\xcb\x04=L\xd0\xc3\x04=L\xd0\xc3>%\xe8a\x82\x1e&\xe8a\x82\x1e&\xe8a\x82\x1e&\xe8\xa1\xa4\x04=L\xd0\xc3\x04=t\xe3z\x82\x1e&\xe8\xe1\xd4O z8\xa2\x04=\x1cP\x82\x1e\x1a)A\x0f\x13\xf40A\x0f\x9d\x16W\x82\x1e^\x04\xd9K\x97\xf7.\xb8$\xd2\xe0\xe9H\x97\xf7\xb6\x7fY\x81\xcd\xf6\xcbf\xd3\xe5\xbd\x1d\n\xc0\xcftyo\xba\xbcwb\x0fl\x7f]\x97\xf7j0:\x7fhp\xe8u~<\x17\x84+'\xf7\x89\xd5cx\xf9;\xf5\x08\xe8gk\xa0\x0f4;sT\xcfxE\xca\x9aH\x17(\x1au5\xcf\x8fD\xfe\xb8'b\xcdH\x01\x81m\xf6p\xe5\xba]\xf5\xdbo\x0cB\xbe'\xf5&/w\xcc\xec\x11\xea\x0dD?\xaa\xe5\xb0\xf8o!\x9c\xe4}\x93\xb7\xec\xcc\x15#\xdbu\xa7fb\x12l8\xdbo\xb0\xf6\x1dT\xff\xefI\xc9\xe9DuOp\x8d~8B\xa9z\x1c\xf93\xa9\x7f\x92\xdf\xd6,9\x92\x87\xfcx>\xc2\xb9\xcc\xb9t\xa4\xdf\xb3\xea\x03\xdc\xab\xf0%\x06\xce\xf8\x83\xf4\xea\xd3J|q\xcay#\x86%8\xf9q\x06\xf5c\xdd\x0eI]\n\xcavrvI\xc6\x11\x07\x90\xb1R\x05\x9c\xc7\xcd\xa1@rXQ\xea<\xc9\xeb\xee\xe9\xa2#)\xf1\xd7\xce\x96p\xc3f\xd2\xe4\xc5\xe0\xd9\x88\x99k\x10\x0b\xe0\x15\xe1Dj\x93\xe5\xa3\xec]+\xc9w\x95\xbcm\x15\xed:\x19\xbb.\xb7\x05\xad\xb4\x88c\xa5<\xf0\xbe\xfb\xf1\xdd{K\xc8\xb1\xa0\xe5\x9e\x1f\xe0T\xd1]\xfe\x80[U\x9e bQ\xd6T\xd8Q\x9c\xe2\xb7\xf1\x93\xe7\x82\xe7\xc2\xb0\xd4\xdfn>8\x19\x8f,\xd8\xfeB\xae\xf6\x18\xf6-\xdb\xf7\xfdA\x05\xdb\xf7d\x8f\x9d5\x13\x1f\xa2w\xb4\xe4\xbf\xb2Z\xb2\xb2\xb9\xd9'\x1cy,\x88p^\xe5\xb7gn\xfb\xa8\x1b+\x90\xac\x0cArd\x0b\x92+s\x90f\xf1\xc6]r\xe6\x93&\xa7\xdd\xde\x925,\xdfR\xec\xae\xe4\xe5\x96>\xf8te\xa8\xbfNQo\xab\xbe\x16\x1b\xea\xb9^Th\x16+\xd4\xfb\x07\xfa\xf8\x04\xad\xa9\x13\xc9\xab\xab\xd1\xb5\xe2\xa4\xc4\xed\xe8\x9c\x1f`\xc14\xca\xae\xe0\xb1[\x0bsM\xa3\x89`K\xefh!\x96\x934\x18 \xe7\xd2\x9ek\xdd\xd1]\xc9\xc2-!)\xed=yA\xf7y\xf9\xa2`\xd9\x87\xab\xe6o\xaf\xcb\xed\xe0//\x0f4\xfb\xf0\xfeAz%\xf5\xdf^\xd1\"\xbf\xa3\xd5\xfb\x07K\x98\xf1[\xc2iu\xd5Ubk8\x92G\xa1\xecc\xe2\xe4V\xf9\x07\xf8\x81\xd6TI\xb6i^\xbasR\xf2\xb1\xee +\xa0.\xf2Lz\x1e\x90\xc5\xb8\x85\x15\xe6\xef\x9eV\x14\xe81\xe7b^\xb7g\xc4t\xa2d\x9e\x1b\x9f\x9b\xd0\x9ess!iU\xbd\x0b\xf6\xe6\x9d<\x07\xf4\x11k\xc0\xb7\xe1}Z\xdd\xe5\x19\xbdn\xdaI\xd8\xee!%l\xb7\x81\\\xce'\x9e\xb0\xdd \xdb\x9d\xb0\xdd \xdb\xdd\xa1\x84\xedN\xd8\xee\x84\xedN\xd8\xee\x84\xedN\xd8\xee\x84\xed\x96\x94\xb0\xdd \xdb\x9d\xb0\xddn\\O\xd8\xee\x84\xed\x9e\xfa)a\xbbG\x94\xb0\xdd\x03J\xd8n#%lw\xc2v'l\xb7\xd3\xe2Z\x05\xdb]a\x9d\xa1\x17l\xdb\x89\xeb\x1a\xc2'\x9d(\xdf\xd3\xff]\x0f+e\x99\xa3(\xff\xff\x8a\xee\xbe\x82\xdf\xff\xb7\xa7\x19;\x9eXIK^?\xc5'k\x85B\xbb\xe6\x0f\xd7\n\x85\xd6\xc6\x85\xb0Gm\xf7\x8d \xef!\xbcME\x97\xcc\x007\xfe\xa0\x9e5UN\xfd3\xe5\xef\x1fj\x8c\xb7\xed(\xcf\x0eB\xc2?\xd4\x12\x8e\xda\x0d\x9a\xf6pk\x9d\x97\x1aF\xfe\xf2\xa0k~\x13\xd0\x19\x93\x8e\xf1\xb5\x93\x90\"s)27\xa4\x14\x99K\x91\xb9\x14\x99\xebQ\x8a\xcc\xa5\xc8\x9c\x91RdnH)2\x97\"s)2\x97\"s)2\x97\"s)2\x97\"sH\x0e\\O\x91\xb9\x14\x99\x9b\xfa)E\xe6F\x94\"s\x03J\x919#\xa5\xc8\\\x8a\xcc\xa5\xc8\x9c\xd3\xe2Z%27Wu S\xd0:\xcd\xf4\x8cJ\xfcU\xe7g\x15y\x8d\xee\xe2N\x8d\x06\xf9\xc4\xc8J\xf5+DA\x1fN\x05\xdbR\x8f\xd2K\xe3H\x841\x02a\xb4\xecS\x9d&\xefz \xa9NS\x87>\n\x9b\xedu\x85R\x9d\xa6\x0e\x05\xe0g\xaa\xd3\x94\xea4\xfd\xba\xea4\xb5\\\x91\xbd\xda\xdcN\x1ej\xff\xfa\xf9\xc0Y\xfc\x04~x\xfb\xea\xf5\xdb\xcd\x8b\xff\xb5\xf9\xf1\xfbw7\xaf_\xbe\xf9\xe6\xcd\xebW_\x19\xff\xda8\xa7\xd5}\x82\xa8M\xd6\xac\xe2-C\xe0\x07\xf1?/\x1a{XJ\x93\xe7\xef^\"\x07\xf3\x1a22\xba\xce\xae\xd3\x87\xe7\xef^~\xd5\xfbW{\x83a\x9f\xf3\x93-\xbcz\xddkB\xfc\xb3ic8}\x11&\xc6 yhy>\x0e\xf5\x133\xdb\xa7\x1fz\xfe\xee\xe5\xf4\x8fb\x8c\xbd_5\xd0f\xee#\xd3\xe0\xa7\x89\xf2]/*F\xb6\x19\xa9\xf9\xfb\x07\xb8\xd5\xff\xdd\xd5\x08\x8d \xa7\xce[\xea\xe7_\"\xc8\x89/\xc7\x03\xf1\x87\xe6n\xe79\x04\xcdEu\x90lw\xeb:\xc5\xb1vNw\xe9\xaa\x9b\x08\xdf\x1f(\xdc\x16,\xfb\xa0\xbe=\xf1<\x7f8\x90\xfapa\xc7z\x93->\xdc\xb52D\xfbS\xae\xbc\x8cmi}\"s\x17\xb7:u@\x8dY\x18\xe2\xb29]\x80\x02^\xb2\xedT\xc0o\x1a\xcc\x05N\x80.p\x9e\x91\x1e{\x9a\xc2\x19\xe2\xfb\x93\xd1\xc1\xcb\xcbf\x0d?*\xb4\x15\xa1\xf0\xd7W\xda{>\xf1jE\xee7\x81\xebK\xcd\xc2\xb4\xc4zag~:7ZR\x07e\xfaI\x0d\x05\xdb\xefi\x05\x9fV\xe4^}\xf4\x0f\xd7\xf0\x9d,\xcc2g\xe7\x97\xac|\xb2\x15\x86\xf31/\xf3\x9a\xe7\xd9\xd4x\x0b\xb6\xff\x95\x15\xa8:\xd6\xfb\x8dS\xb5!\xb7E\x8c\xe4\xb6\x94\xc1V|\x0c\xc9i\x89\x80C}0$\x97I@\xb2N\x05\x92\xe3\x84 \xb9N\x0b\x92l\xda\xe19\x0f&!\xb9W\x12Crg\x1a\x92#\xeb\x90\xbc\x18\x88\xe4\xc7F$\xe7:cH\x9e\x1cE\xb2bL\x86\xb4\xe0+\xee\xd2\xb0Om\xa1\xaf\xce5\xe0\xcdB\x80\xfb\x8a\x9cN\xb4\x12\x16\x9d\xba\xc2\xfb\x03}\x94\xcea\xb4\xd6Ie\x85\x8c\xb5\x84\x03\xaa!/kN\xc9V\xba\x13\xc8=\x9e\x19\x96P\xdc\xa2\x11\xbe\x93\xdfC\xc4\xbd\x1e\x1d-{%\xaf\x06\x03\x948Lq>4;\xc1et\x1au\xfb\x81>>m\xcb\xa3),\xa70\x14/\x19\xb8\xef\xb0/\xaf\xf5U\xb3\xa3\xc3\xa4Z\x0b3\xc2HG\x7f\xf1\xf2\xcdw\xe8^\xff\x96\xed\xdb\xf5&\xd8s\xce\xf8\xb9\xa2\xba\xd72*Pb\xbd;\xba\x05\xfe \xdfm|\xf3\x05\xdbO\x7ft\xa4)\xba\x9c\xfcb\xc3m\x9bC\xdf\xfdd\x9f.\xba\x0b\xae\xdb\xb8\xcf\"c ;\xff~\x05/\xa8\xeb\xa1~>\xef\xd5\x9aUy?\x1az8\xb6\x04\x87\x14\xb8h\xee\xe2\x8e\xeb\xda\xb8p\xfb\xe8\xd2m>\xa3*9\x1den\x87\x17wHsp\xe4\x10x\x0b\x97U\x92\x1d\xe2\xa5;\xac\x91\xf0\x100\xe5a\xad\xa4\x87 i\x0f\xab%>\xac\x94\xfa\xb0N\xf2C\xdc\xf4\x87\xc0 \x10\xb1S \x02&ADO\x83\x88\x96\x08\x117\x15\"Z2\x84\x7f:\xc4\n \x11\xd1S\"\xf0\xa0\xf5L\x8a\x88\x9e\x16\x11(1\xc2\xc9luV4\x1c\xd3#VM\x90\xf0Q\x7fVI\x92\x88\x90&\xb1B\xa2D\xfcT\x89\xa0\xc9\x12^\x80~\xc7\x84 \xef\x94 \x07\xf0\xf1\xe2\xb4 \x97\xb6g\xc1\x91!\x93'\x96q\xdb/\x81\xc2e\xc0\x0b\x93(.H\xa3\xb0!P\x83\xa6Rx%S\xb8\xa7S\xf8$T8\xce\xc2\xb2\xa4\n\xdf\xb4\n[bE\xc0\xd4\x8a\x05\xc9\x15\x97\xa7W\xb80\xdb3\xc5\"R\x92\x85SOgwJ\xc4T\x8b\xc8\xc9\x16Q\xd3-b&\\8\xa7\\\xd8\x92.li\x17q\x12/\xa2\xa5^DN\xbeX\x96~\xe1\x9d\x80\xb10\x05cI\x12\x86\xed\x10t\xc0\xca\xbb\xa3\xe5}R1\x16&c,H\xc7\xb0\xb0 ^JF\xe4\xa4\x8cxi\x19\x11\x133B.7\xcf\xe4\x0c\xdf\xf4\x8c6AcHirvq!9x\xd74\xc5\xee\x8a\x13\xd2\x0b \xbb\x92\xee\x95K\xf7\xcaA\x8b5i\x90\x1c\n=\xa3\xf2\x025\xac\x04\xcd\xb4\x8c\xd6u>\xbc\xc4\xf9ZF\x01f\x05v\xb7\xcf:\x03\x06\xf8\x81\xd5t\xea\x03\xaa\x17Ja\xa8\x95\xb9\xc6\xe6\x0dA\xdd\x96\xbc\x87Tz\x92KN\xf5\x85v\xd7\xf0\xd3\x81V\x94\xd4\xf0-\xdb\xd7}-\x1f{ve\x0d\x17tV\xd1\x91r\xb2%\x9c\\5_\x95\xf6a\x7f\x18\xdd!\xcc{\xd9\x8c %\x9f_?{v%\xfe\xe3O\xd7_\xca\xff\xfd\xd2\xd8\x82\xdb\\\xbf\x7fh0\xc5\x16\xd4NE\x0bzGJ\x0e\xfc\x01\xef\x9f\x15\xcc\xd7\xe3\x95A\xad\xa9\x91p\xb2\xaf;`)4\x8d\xb5\xa5-o\x8b\xadQ\xa5\xdc\xd2\x8cmMw\x16\xcfef\"u\x12\x0d.\xbd]\xb0\x9b\xe9\x90n\x17\xecQ\xaaaj \x17-\x85;\x80{\x1cu\x01\xb7}\x8d\xb4\n\xac'\x16\xa8'>\xa4\xc7\xe4\xb2[\x04\xe8Y\x07\xce\x13\x00\xcc\xb3\x12\x94g\x15 \xcf\x1a0\x9e\x98 \x9e\xa0\x10\x9e\xb8\x00\x9e`\xf0\x9d\xc8\xe0\x9dH\xd0\x9d\x98\xc0\x9dH\xb0\x1d_\xd0Nt\xc8Nd\xc0\x8e\xc1\xa1g\x93\x85\x91\xc1:A\xa0:VW\x82\xa3\xd2\xe0\xe86X\x11\xa2\xe3\xaa\xc6\xac\x02\xcf \x0e\xce\x89\x0e\xcd\x89\x0d\xcc \x08\xcb\xf1\x80\x898Ar<\x019\xb6 \xf5R0\x8e\xad\xddT\xc3t\x8e\x16\x83oR\x0dS\xb8\x04n\xe3\x07\xb6I5L\x9d\x006Q\xe05\xd6>\xa6\x1a\xa6>\xa0\x9ax\x90\x1aG@M\xaaaz9\x8cf \x88\xc6\x13B\xb3\x08@\xe3\x0f\x9fI5L\xc7\x14\x0f0\x13\x15.\x13\x0b,\x13\x0d*\x13jqy\xc2d\xfc@2k\xdc.8\xe3\xdc\x9fs\xea\xf3\x87\x8d\xcc\xef7\xe9Z\x16{\xdcb\x87\xf7\x8cb\xfd\x99&\x8eE\xee\xe7\xd3\x95\x8f\x13\xd1\x19K\x9fL\x05\xca\x90\x9e\xc0\x8b\xb7?<\x7f\xf5\xf2\xf9\xbb\xf7\x9b\xef~x\xf5z\xa6X\xd9\xc4\x0b/\xbe\xfd\xe1\xe5\xbf\xbb=\xfa\xee\x7f}?,r6\xf1\xe4\xf3\x89G\x9b\xbag^\xbdvqD4!\xc1\xef\xd8\x96v\xea\xe0I\x1fyS\x0cM\xf0\xbf)\x1e\xf5\xfea\x14O\x84\xb77/\x9b\x88\xe2\xc4\x16\x9dc\xf9W\xf0\x9f\xb4b\nN!\xa5\x81\xf8\xa0,e7\xe9\xfd1\xcf\xc8\x88E\xf2\xaf\x9d\x080\xef\x14y\x93\xe1\x1b\xf1\xa5\xb6RHV\xc8z\xaa\xf7$\xe7\xb5\xe8\x89\xf1\xdb\xf2\x84\x7fP\xee\xd0L\x02\xba8\xd6R$\n\xe9\xe5\xca\x031\xdf\xa3.\x8b?\x06\xee1\x01\x8d\xd5hJ`\xb4\xd1c\xa1\x93:\xf7\xf8\xb9\xb1\xcb\xcf\x17\xf5\x19\xabP\xd6\xc6/\xe7G\x89\xc0\xe3\xb4\x18\x95\xe4\xb2\xad\xeb^\xc4\\\xca\xd86`\x8e\xff\xe4\x9dx\xb9):\xae^\x1b\xf3\xa4\xbb\xce\xf5\xdf<\xaf`\xfd\xbd\xf9\x0e\xd6\xa7\x7f;\x90\xfa\xf0w\x15%\x9f\xbc\x8b\xb5\xb9\x85\x15y\xfc\xd8\xab#7\xbe\x85\xf5w\xba\x8b\xbf\xbc\xd2\x84\x0b\xee_M7\xaf\x0e(\xa1\x16\x0c\x94P\x0b \xb5\x90P\x0b=J\xa8\x85\x84Z0RB-\x0c)\xa1\x16\x12j!\xa1\x16\x12j!\xa1\x16\x12j!\xa1\x16\x12j\x01\xc9\x81\xeb \xb5\x90P\x0bS?%\xd4\xc2\x88\x12ja@ \xb5`\xa4\x84ZH\xa8\x85\x84ZpZ\\\xab\xa0\x16\xe6n^=\x90\xfa\xd0i\xa4gR\x8a\xdf\x9a\xfb\x19\x1f\xf0\x9f\x9c\xe1\xd5dW@K\x99\x1f\x0br \x1d\xe8\x83\xda\xc1\xdd\x137/\xbf\x92\x1e\xe5\xce\x9f\x8c\x917p\xbf\xc6\xcc!Hw>\xed+\xb2\xa5M\xa4N\x821\xe8vs*H\xf9\xf4ob\xd8s!\xbb\xe7\xf8\xf4MAJ\x95\xd5.\xc6\xa7\xab\x91\x14\x8f\xa0\x9a\x03\xf5\x19\x10\xcd\x8a\xa3?\xe7\xb5\xe4\xa91\xb2\xd7iU\xfd\xfcK\x8c\xef\xf1\xe5\x01\xb1\xb9k\xc1\xac\x0e\x16{\x11\xfd\xfe\xba\xc4\x1a,jev\xaf\x06\x03\xc2\x95\x0c\x11\xbf\xc8\x99\xb9'\xb5\x9e2K*\xb7\xd1\x83\xf2\x7f\x89\xc5\xde\x99=\xa7|n|\xebiw)\xbd\xbdyi\x92()\xa5\xbbG)8j\xa0\x14\x1cM\xc1\xd1\x14\x1c\xedQ\n\x8e\xa6\xe0\xa8\x91RptH)8\x9a\x82\xa3)8\x9a\x82\xa3)8\x9a\x82\xa3)8\x9a\x82\xa3H\x0e\\O\xc1\xd1\x14\x1c\x9d\xfa)\x05GG\x94\x82\xa3\x03J\xc1Q#\xa5\xe0h\n\x8e\xa6\xe0\xa8\xd3\xe2\xfa\xe8\xc1Q\xf1\xff;\x8d\xf4LJ\xb9\x0dU\x10\xa8\xeb\xd3\xd5\xe1A\x19|\xd2\xd1Rq\x18\xac\x1c\x18\x95!\xa8\xdf\x01LEE\x95\xc3EFE\xa7\xa3\xa1/\xf1\xa9^4\x14\xd7\x9e\xfc{/\x08j\x0c|v\x1aP?\xff\xc6\x02\x9f-\xff\x86\xd4\x1b\x84\\\x0e\xb9\x9dy}\x9a\xed\x17X\xfb\x06J{\x98\x8f\x1bY\xdd;\xae\xae\x14\x80w\x94wv\x84\x8e\x86\xaaq\xaa\x80\x8d\xfcI\x0bC\xe9\xc4\xba}\xec>6\x1b\x0dR>\xcb\xc6i\xc2v\xfc\x9eTT:[O\xa7\x02\xedO\xe9 \"\x05\xfc\x9e\x95OT\xa3\xbf\x979\xdf\xa4\xdc\xd6\xb0=\xcb\xc1\xce|D*\x85\xe2\xac\x82\xb6\xa6\xbeR\x1d;*\xa1\x9e\xbd\xbc\x8d/\xc3\x1b\xe9n$E-\xa3\x12\xb3#\xe1\x0c\xb6\x94\xd3\x8c\xc3\xfd\x81J\x0f!i\x87\xa3\x87\x99\x91R\xd5\x86\x07\x02\xfb\xfc\x8e\x96-3\xa5s\x7f\xee\x0b\xba\x83\xaa\xb8<\xaaV\xbc\x99\x02q\xbc\xddRZ\xcap\x85\xd2^u\x07\xae \xe7z\x8e\xe6>\xa1b\x07M\xd8\xa6\x1dA^\x03;\xf3'l\xf7dK\xb8\xcc#/{\\\xc3\xab^*\xf87\x1d\xcb\x9f\xfbLEIv\xe8\x94io\xbe\"\xbbH\x1f\xf2\xc9\x1b\x1bx~\xf1\xea\xd7\xaeM1\x8e'\xa2\xbd\x00\xfb\xe4\x95P\x0d2\xc2\x85\xb8\x97\x9c\xc0 \x84bN\x8d\xf1\x0599\xdb\xe6\xc9k\xc3\x93P\xb0}\x9e\xcd\xb1\xae\x99\xe5\x8a\x1e\xd9]\xf7\xe2\x81w\xaf\xfe}\xd6C!\xb5\xa5\xbcVZ\xb6\xf2\xa2KG\xf5U\x13\x8ci\xf61?T\xec~B\x88\xcd\x83C\xc0w\x1e\xa6A\"0\x9c\x03cq~M\xc2\xe61\xa1F4k\x8f\xca=}\xa2\x95\xf8\xb4 >\xd2\xd2\x0f\xca\xa0\xdc\n[]\xce\x93bXM'\xd7f^\xee\xd8\x85<\xe19/\xa8e\xadI\xaf\\\xe7\xee\x91&<\xd0\x08\xb0r\xc7TPI\xdd{\xb1\x05V>\xc9\x0ed>,]\x9f\xb3\x03\xa2\xbf\xf69W55P\x12H\x7f>\xe1\xac\xaa!\x93\xd1hr\xe6\xecHx\x9e\xc9\xf8\xa8\xfe0g\x13\xad\xeb\x93`\x83E'65'\xdc\xba\x8d-\xd7\xf8\xd8OJp\xc4Q8\xce\x0dxI\x04X\x0bM\x11\x0fO\xb1\x06\xa2\" \xa6b-TE\x10\\\xc5j\xc8\x8a\x95\xb0\x15\xeb\xa0+\xe2\xe2+\x02#,bc,\x02\xa2,\xa2\xe3,\xa2!-\xe2b-\xa2\xa1-\xfc\xf1\x16+ .\xa2c.\x16\xa1.\xa2\xe3.\x02!/\x1c\xb0\x17\x1e\x8a\x86#\xfebU\x04\x86\x8f\xfa\xb3\n\n#\x02\x0ec\x05$F|,FP4\x86\x17b\xc0\x11\x91\xe1\x8d\xc9p\x88n.\xc6e\xb8\xb4=\x1b} \x89\xceX\xc6m?\x84\x86\xcb\x80\x17\xa24.\xc0i\xd8B\\A\xb1\x1a^h\x0dw\xbc\x86\x0fb\xc3q\x16\x96\xa16|q\x1b6\xe4F@\xec\xc6\x02\xf4\xc6\xe5\xf8\x0d\x17f{b8\"\xa18\x9cz:\xbbS\"b9\"\xa39\xa2\xe29b\":\x9c1\x1d6T\x87\x0d\xd7\x11\x07\xd9\x11\x0d\xdb\x11\x19\xdd\xb1\x0c\xdf\xe1\x8d\xf0X\x88\xf1X\x82\xf2\xb0\x1d\x82\x0e\xc1x\xf7p\xbc\x0f\xd6c!\xdac\x01\xde\xc3\xc2\x82x\x98\x8f\xc8\xa8\x8fx\xb8\x8f\x88\xc8\x8f\x90\xcb\xcd\x13\xfd\xe1\x8b\xffh\x11 -\xd9\xedU\x89\xaa\xe8`\x1a|\xd2\x81\xbbX\x8a\x94\x0e,\xc9\xe2\xdfH\xe9\xc0\x06r dq\x870\x96\xa3o\xc9\xbe'ZZ%\x80\x15+|\x15?x\x15,t\xb5N\xe0*@\xd8j\xa5\xa0\xd5*!\xab5\x02V1\xc3UA\x83UqCU\xc1\x02U\x91\xc3T\x91\x82T1CT\x91\x02T\xbe\xe1\xa9\xe8\xc1\xa9\xc8\xa1)\x83\xeaj\x93\x85\x91\xc3RA\x82R\xd6\x90\x94\xa3\xd2\xe0\x18\x8eZ1\x18\xe5\xaa\xc6\xac\x12\x88\n\x1e\x86\x8a\x1e\x84\x8a\x1d\x82\n\x18\x80\xf2\x08\x888\x05\x9f\x8a\x17\xf8\x17\xf5\\/\x99\xb6\xc8k\xe9\xa3\xc4\xb6\xb4#\xa6\xc6T-\x99\xfb\xa2\x8f\xe6\x9e\x15\xfb\xfbwy\x99\xd1\xaf\x00{\xf6\xa4\xde~\x80\xcf\xae\xff\xf4\x85\x1eg/\x0d\xb7\xffu\xf5\xc4o,\x13\xd78\x15C\xe2\xbf\x80\xe8\xcc|J\xae\xb3\x93E%\x7f\x0d\x92\xcf\x15\x1b&\xdfS\xec \xf0}\xed\xe49\xcfg\xe45\x1d\xcd\xc4j)\xebs=\xcc\xe2\xb5\xf6\xda\xd5y\xd3[\xe5\x9d\x9b\xb1\x89\xdeZ\xe8\x03\xac\xc7]\x993{\xcd\xdb\xcc\xf8x\xaf\xa3\x83\xf5(\x9d\xeb\xc3\xbd\x8e^V\x95\x99K\xf3j\xdc3\x83\xb7\xce\xce\x0e)\xb5\xfa{\xde'R=\x90\x16\x86\x0f\xd8.\x0f\xb7\xf0,\xc5\xb5S\\{H.\x92\x93\xa7\xb8v\x8ak\xa7\xb8v\x8akw(\xc5\xb5S\\;\xc5\xb5S\\;\xc5\xb5S\\;\xc5\xb5%\xa5\xb8v\x8ak\xa7\xb8\xb6\x1b\xd7S\\;\xc5\xb5\xa7~Jq\xed\x11\xa5\xb8\xf6\x80R\\\xdbH)\xae\x9d\xe2\xda)\xae\xed\xb4\xb8V\x89k\xcf\x95\xb9V\x81\xaar\xa6\xda\xf5\xa0\x92f\xe7\x0d\x0ck\xa1\x8cj\xca]\x93\xd6:7\x04\xf6\xc6\x81\xc0N\xa4\x1b\xbe\xa5\xe4N,\x18\xe9DA\x8f\x81XS\xbd\x16v\x94\xabj\x9d\xe2T\xf3\x08\xa0\x83*\xbe\xfd\xb3\n\xebkj\xabo\xefHQ\x07,\xbf=y+q[\xe3Rs\x03\xcb\\>\xfd\x9b\x14\x7fX\x99t\xee\xa2\xe2\x8e\xb1\xff\xa3j\xeb\xa5n\xea\x9dh\xa9_\xb0\xbb\xe1\xb9\xfc\nn]\xb9W\xa5{\xad]\xe9R\x1a\xf0\xea\\\x0b\x8b\xf7\x03\xadJZ4\xd1\xc1\x92>\xf0~\xf06\xafA\xd6 \x95\xa5\x8fesR\xe7\xe8:uj\xce*!\x06x\xaba\xa8\xb2\xab\xfd\x16~g\x1b\xce\xdb\x9b\x97XR\x15M\x7f\xed\x16*\xe8\x9ed\x8fj\xb0\x9d\x83Z\x86M\xaaS&\x16h[E\x17Jv\x8f\x83\x7f\xf3\xe2\xa5\x94}9\xafA\xc8\xc2\x8a\x9e\n\x92I\x07S\xdb\xc8\xa7\xd2\x83\xf5\xd5\xd3\xa7\xfb\x9c\x1f\xce\xb7r\xe7\xaa \xcdo\xb3'{\xf6\xf4\xb6`\xb7O?\xcf\xfe\xc7\xff\xf8\x8c|\xfe9\xfd\x97\xdd\xbfd\xd9\x7f\xffr\xf7\xcf\x9f\xdf~\xf9\xf9\x7f\xcf\xc8\xbf\xfc\x89\x90\xff\xfeeF\x9f=\xfb\xec\x9f?\xfb\xec\xd9S\xb9\xdd\xc5\xabO3V\xd1\xa7X\xdf\xf4\xe9\xdd\xb3\xa7rA\xa24\xf8o\xdf~\xf9'\xadx\xf7@\x1cf\xbe\xa8'\x7fc`\x8e\xa9\xed\xb1(\xae\xe9\xe0\xb8S\x18\x05\x0b\xa6\xa6%\xbb\xdfMJ\x00\xf3\x94\xf9\xc4\xe2'&\xdd\xf0\xc1nL^\xff-\x05\xdaS\xa0}H)\xd0\x9e\x02\xed)\xd0\xde\xa3\x14hO\x81v#\xa5@\xfb\x90R\xa0=\x05\xdaS\xa0=\x05\xdaS\xa0=\x05\xdaS\xa0=\x05\xda\x91\x1c\xb8\x9e\x02\xed)\xd0>\xf5S\n\xb4\x8f(\x05\xda\x07\x94\x02\xedFJ\x81\xf6\x14hO\x81v\xa7\xc5\xf5\xd1\x03\xed\x9d\xc8n\xa7\xad\xb9@\xfb(\\\xda\xde\x1e,\xa3\xa6\xcd-\x95b]\x88Y\xab\xe8\xcfgZ\xf7]\xff\xf2t\xcbk\x1dmR\xcd\x9d\xcb-\xad\xd4\"\x90\x81\xdda\x88X:\xc3Y\xd5\xf3\x08E\xb8\xb8\x1a\xc9t\xbb\xa79\xa6\x9e\xb1\xe3\x89\x95\xb4\xe4\xf27\xfc\x88\xce\xbb\x1fL\xf5\xf3\xf2Q\xbf\xcf\xc7q\x11S\x1c\x84\x1b\xe2\x1e\x13}\x9es\x08D\x89c\x84\x8a[\x84\x8fS,\x8eK\xc4\x89C,\x88;D\x8a3D\x89+\xc4\x88#\x84\x8c\x1b\\\x14'\x08\x1b\x17X\x1c\x07\x08\xec\xf7\x0f\xe4\xe7\x0f\xe9\xd7\x0f\xe4\xc7\xb7\xf9\xed\x83\xfb\xe9\x03\xfb\xe5\x0d\x1a\xc3P6\x04\xf6\xbb/\xf2\xb3\x8f\xfc\xea\x13\x87\xd2\x84\xdf<\xa2\x9f|\xea\x18\x8c\xe2\x07\xbf\xd8\xef\x1d\xdc\xcf\x1d\xda\xaf}\x81\x1f{\xc6\xb3j\xf4S[\xfc\xd2C\x7f\x8e\xab\xdfy\xf8\xde\xdf\xc7\x83[\xe2G\xb6\x8fn\xdeO<5\x1c\x8b\x1f\xd8\xd9\xef\xdb\xb5\x13/\xf2\xeb\xce\xf8q\xa7\xfc\xb6\xd3~Z\xc3\xa8\xdd\xfc\xb0\xf3~\xd7\xbe\x9fu\xb1_\xd5\xeaG\xf5\xf5\x9b\x8e|\x90\xf3~\xd1 ~\xd0\xd17;+!\xa0_3\xa8\x1f3\xa0\xdf2\x9c\x9fr\xc2/\xd9\xf7\x94\xf4\xfd\x8e!\xfc\x8c\x81\xfc\x8aA\xfd\x88.~C\x8b\x9f\xd0\xc9/h\xf7\x03\x0e\xdc_\xc3\xaf\xb8\xba^\xe6\xfczN~<\xab\xdf\xae\xd3\xd1p~\xb9\xa0~\xb8P~\xb7`~\xb6\xa5\x93i\xf1\xa3\xcd\xfb\xcdP\x04\xef\xabSv\xbd'\x9c\xde\x93\xc7\xeb\xea\\\xf2\xfcH\xaf_wq\xbe\x8e\x0e\x9b\x116\xd8\xa8\x18\x0fq\xc0|\x02\xfdk\xc6\xfc\x1a\x90\xbe\xc6\xaf\x18P\xbd\xdc\x88\xe55 x\x0d\xc3E\x9aF\xeb\xf2I\x8c\xee\x84q\x80d\x07\xb2D\xf1^!\x85\xf2a!\x85\xf7d!-\xf6g!\xc5\xf1j!-\xf0m!E\xf2p!E\xf1s!\xc5\xf0v\xa9\x96\x03\xfa\xbc\x90.\xf2|\xe9&B\xfa\xbf\x90\x16{\xc1\x9a.\x85\xf4\x85!\x05\xf2\x88!\x85\xf4\x8b!\x05\xf2\x8e!\xd9|dH\xc1=eH\x81\xfdeH\x06\xfd`\xa2\x0ehX\xdf\x19\xd2\"\x0f\x1a\xd2\x04>u\xf6\xc0\x9c\xc5\xa2F\xf4\xac\x19>0:\xae\xa3x\xd9\x90.\xf6\xb5!\x05\xf7\xb8!\x85\xf6\xbb!]\xe0}C\xb2\xa2\x1bg\x10\xa3N8Q3\xca\xca\xd577\xd7\xc6\x08\xe8p\x89\xb7\x0e\xc9\x95\x1b.\x08\xcf\xf9\x81;\xa19\x9d}yHc\xe4\xc7E~=$+Js\x1e\x9biCdNr\xc9\xcd\xeb\x87\xe4\x82\xb94!-\x17\xfb\x01\x91\xac\xde@$_\x9f \xd2\x04:\xd1\x057\x19\xc4K\x884\xd1\x8b\xd1J\x0b\xe87D\n\xea=D\n\xe8CD\n\xe7ID\x9a\xc59\x9a\xf0W&Lc\x08\x0f#R ?#RPo#\x92\x8b\xcf\x11\xc9 \xa1\xe8\xe4\x7f\xec=jE#\x1a\xa1x\xe6\xaf\xbb\xba\xb2\xecxC'\xef\xa4z\xd4\xe6\xa3D\x1a\x0d#\x9c\xbf\x12)\xa8\xd7\x12)\x94\xef\x12)\x98\x07\x13\xe9\xb2%\xe0\x84\nt\xc1\x02\xe2\xe1Q?\x1eO\x07V>^\xd3\x13\xcb\x0e\xf5\xb5\xaa\xf7r\xfdZ\xfc\xf3M\xb9c\x9e\x0e\xce\xc6\xd5f\xf7r\x0e\x8c\x85\xf6M\xac\xd1\x83\xde;\xa8\xe8\x8eV\xb4\xcc(NR^\xc3\x89T<\xcf\x84\xcc\x02\x9e\x1fi\xc7 PsR\xf1\x8d\xf8\xa3\xc3\xc7\xb5\x9d\xb4%\x9c>\x11\xefLul`\xc5\xb4\x1f\xd1\x08E\xf9\xdf\x84\xab\xd5\xa6\xffR\xa10\x01*\xbd6y\xf6\xa1\x1e\xa8 ov\x83\xb6\xb4\xfdp\xe6\xe7\x8a^\xe1&\x13\xd3\x80\xab_X\xbf\xd2\xd4\x85s\xc9\xf3\x02-\x1a\xf1~\xbfU\xe9\x9an\xfe\xb2U\xeb\xc4\x81\x1fs\xb8N\xddLo\xc4y \xb7\x94\xdfSZ\xaan\xaaAv_|S\x02\xab\xb6\x82\x17\xac\x92\x0e\xecRj\x05\xf4@\xeeraHK\xdf\xc6\x91\xf2\xab\xf6\x13\xe8c\xec\xb5rKa_Q\xc2\xb5M.\xb7\xf2A\x9e\x18M1\x90\xdb\x82e\x1f\x06\xa3\x17\xa4wJ\x03=-Y\xf9\xe4?i\xc5\xda\xc7\x94\xabb#G\xe1\xc0)\x13\xf8\x13,\xab\xa6\xf7\x0d\xcdF\x8d\x8d\xc5?\x96\xe7\xe3-\xad\xa4\x9b)/\x95\x0b\xe2\x9eU\xdb\xfa\xaa?\xc3\x07v\x0fG\xa1w\x8b\xc1\xd6R\xbe\xb6k\xee\x131 t\xfb\xc9`\xad \xbd\x00\x97\xa3\xf8\x1d>\xedu\xe7\xebg\x7f\xc0\xaaC\xbb\xbc\x14\xa2up\x85\no\xdeE\x1e\xdf\x1fXM\xf1\xbf\xf5\xca\x1d\xcdN#>:K|\x82\xe1\x9bUv\xed\xd4'\x07\xee\x02\xf9\x03.\xef\x01~Y\xb2\xb7\xcf\x18\xb1\x9e\xab;R\xa0\x83\\\xffK\xf0\xe3\xd3\xa9\xcf\x0d\xa6r\xb2W\xff\xd4\xec\x87\xff\x80\x9f\x0e\xb4\xec\xcc\xb0\xdceW\x0dD\xba\xa6\x1c8sl\xf6k\xd4Zf>\x87\xfa1+\xa9i\xc0r\xed\x88\x9dL`\x9f\xdf\xd1\xb2+\xb3\xa5;;\xcb\xce\x15\x9ch\x85\xabche\x7f\xff\xc3\xfb\xd7\xff?\xc9\xab\xc9\x0e\x1e\xc9#l\xf3;Z\xed)\xd4\xf9\xbe\xccwyF\xa4\x17Q\x16G\x1b\xf9g\xefIQ<\xc9\x9a\xad\xdf\x91\x99\xb7tOJ \xfc\x1a~\x1a<\xc3v\xea\x11\x9cl\xf1\xc9\xa1\xe3\xee_\xffu\xb2\x8b\xd7\xf0\xee|:\x89\x1d0\xc3\xe5g\x9f\x0d&\xbaa\xef\xd7\xf0e\xdbB#\xc7`\xcfh\x0dl\xb7+\xf2R\x1e%\xfc\xebg\x7fB\xd7g\xc6\xc4&\xbf\x15\xd6\x15+\xc5\xcf\xfd\x86\xe5\xb3_|\x86\xcf*\xf7x\x8d\xec\xaf\xc5\x8f\xe2\xf4y\xd4\xa5\xb3\xf2;\x9c\xd6k\xf8\x94\x7f\xfd\xc5\xb3+\xf8\xe2\xf3+\xa0<\x1bzx\xff('I\xb4\xab\xb7\xbc\xac\xbc\x86{\xa3\xe1\xb0X\x08\x9f>\xfb\xec\n\x9e}\xf9\x1f\x13\xef?\xb3\xbf\xff\xe5\x15|\xfe\xd9\xd4\xfb\x9f[\xdf\xff\xfc\xb3+\xf8|\xf2\xfb_\xd8\xdf\xff\xf2\n\xbe\x98\xfc\xfe\x9f\xac\xef\x0b\xd6\x7fa\xfe\xfe\x1f\xff\xc8\xbf\xfe\xe2\x9f\xff\xf8G{\x1b_^\xc1\x9f>\xfb\x8f\xa6 \\P\x19\x13\xe7|\xb9\xc7\x95E\xb7c\xe1x\xcbXAI9%\x01\x07g\xb8\xb9U\xd4\xb5TKJ\xf7\xce\xcbm\x9e\x11Nk\xb8?P\xe5 \xcf\xebqcJ \x89\x03\x08w\xdb#\xe5\xf3B\x1es9<\xc4\xfc\xf0\x88Uu\xcf\x1c\x84\xbbJ\x1bQ'-N\x81\xfa[OU\xeb\x9d\xc1\xfdiT,\xba\x86O\xdf\xcf6\x81l\x90~\x02<}\xb5Kgj:\xda\xd3Qr\xbf\xe6\xd59\xe3&\xef\xf5\x96p\x02{&,\x9d\xbc\xe4\xaci\x80\xa8o\xea#\xfb\xf6Q>\xfe\xf0\x14\xb5xUY\x12\xe7bJ\xc3\x97\xe9)/q\xf4\xb2C\xba\xcc\x9b\xa7\xc6\x7f\xb9\xf64\xdbC\xd9\xb5Z0ka\xff\xb0\xd1\xb5P\x0ef\xfb\x07i\x82!H\xa1m!$\xb3n\x854\xdb\x9d9=\x0b\xc9\x0e\xcc\x08f)!\xc5\xb1\x97\x90\xc6v\x83\xd9vRO;O\xe4\x7f\x99\xf8\xb2\xd8\x9aB\ncS!]bY!9\xd8WH\x93r\x02\xc9i5\x9a\xaf\xee\xb4\xaf\xc4\x80\xd6\x17\xd2\x12\x1b\x0c\xe9\x12K\x0c)\xbc=\x86\xe4b\x95\xa9\x1e\xb8\xcc\xd5%\x92#\x86\xb5\x86t\xb9\xcdf\xe9\xe1e\x96\x9b\xa5\xf1\x0b\xed7\xa4\x0b\xad8\xa4\x08\xb6\x1cR$\x8b\x0e)\xb8]\x87\x14\xcd\xbaC\x8ab\xe3!]j\xe9\x0dZYh\xef\x0dZYh\xf5\x0dZYh\xfb\x0dZYh\x01v[Yl\x07\"\xe12\x9c\xb3\x06\x91\xa6lB$\xbb\xcc5\x7f\xc7\xc3>\x9cjs\xdeLDr3\x16\x91\x9cN\x1f\xb3\xa6`6\x1f\x91\"\x19\x91H\x17\x9b\x92H\xf3\xba\xe5\xc5f%\x92\x8fq\x89\x85\xc7\xafoIM\xaf\xb1&\xbc6\xden\xc8\x9e\xbe\xc5\xea\x0e\x9e\x06\xdb\x07\xfa\xe8aF\xce\xa5\x8e\x0e8\xf4\x81>\"g0\x02^Q~\xaeJ \xdf\x04\xec\xad*$^\xd2\x07\xbe\x11\x0fKUz\x9f\xf7w\x93\x1c&\xde\xf8\xa0\xae\x188\x91=\x85#\x13\x16\x8cD6J\xd8\xe35\xfc\xa0Ob\xb6\x13\xc2_\x1c\xf7\xac\x12\x9d\xe85\xd7B\xaa\xeb\xee\xb6\xc0\x17<\xf80\xba\xd6~n\xc7\xab\xeeHf\x94\xe7#\xad\xf2L\xffM.\x17\xa1\x06\xdcR\x85\\\x14J\x8cb\xdd\xb9l\xc0\x9c\xc3`\x96l\xad\xa0u\xdd2\x01\xd5\xcfs-\x98\xf5\x81\xceqD\x1b(\xbd&\x87,)\xf2c\x1e\x8d#\xb2\xf1\xc6 c\x9c\x14\xca\"\x10}\xd58a4\xad\xba\xeb\x86c9\xfcs\x81\xab`\x1c\xe1+\xe8\x8e+\xach\xae\xae\x9c\xd0\xb8\x17\x89\x19\xc6\xa5\x88\x0d\x0b~\xdc>\x02%\xd9\x01\xc8\xe9\xd4q\xa5 \xa1\xbc\x91\xbd\xf2\xf6\x02\x0e]emS\xad\x0e*K\xa1\x80\xf8\x0f-\xda\x1b\xfc\xbc\x1e\x9dxP-\xd5\xbc\xcc\x8a\xf3v\xe8\x87\xc6\x96\x9b\x94\x83\x01\x07\xa5s\xa5\x83\x04\x16\xe7\xdd\x89\xec\xf3R\x19\xc2%\xfc\xf8fh\xf5\x0f\xba*\x15\xdb\x8a\xd6\xca*\x95\xcb\xb2]\xc7b\xa9^\xabU\x98\xefKy\x87\x87^\xb9\xfdfq\xd4-s+\xa1>\xd5\x86\xd8\x93\x1fcU3C\xa6\xe6\xed\xea!\x15\x9dXA\xa2]ZJ@\x83\xb4\xecG)\xfd\xc6[\x1e~g\xe8TG\xe2i\x84\xc2;v\xd4\x82\xd8\x04=\xf8\x861\xa8\xd9\x91n\x9aJ@\x13\xc8\x97\x8e@\xefN]\x1f\xfc\xa2\x11i\xea\xa0\xedt\xa7\xfbz\xae\xb7R\x03\xe7\x10J\xf2\xdb\x9b\x97\xba\x1e\x90\xee|\x8d\xa0*-P\x9a\xc6\xda\xef_\xc3\xeb\x07\x9c:\xdbQ\xb4\xc8y\xa8\x8f\x02\x0f\xb138\x90\xc6\x9c\xe8\xb6\xab%Ns\xda\xc0\x89\xd45\xa6*t8v\x8d\xbf\xf7\x9a\xc0\xab\x8b\xe6\x0f\xa1\xe6\x85 \xd9\xe1.;\xcd\x9aS\xb39\xa7$f\x07\xfb\xbf\xeb\x0d\xa8\xb3\xb9\xfbk\xfd\x9e\xc8\x0dt%/\xbaQ\xa9 \xb5\xac\xfe\x84\xda\x88\xf4\xcc\xdc\xe7\xcd\xa5GS\xcb\xbf;\xe9\xb3\x0bN=\xd2\xac\xb8\xfb\x03\xad0\xbdG7\x95\xb1\n\x1f\x93;t\xb0D\xa5^+\x0f\xca\xee\xf0:c\xea\xefC\xf55\xc3F\xac\xe8\x89J\xf8\xf7\x0bR5\xfc\x9b\xdb\x8a\xaa)9\xf1\xa6]\xd8\xdd\x10z+\xbcdy\xe9\xb9\x05\xb6\xb4dG\xeb\xd2!G1\xa1\x96\xc7\xa6\xe6J\xf4J\xa9\x9b\xf2:'\xf6\x81\x96\nJ\x88\x9f\xd7\xc2F\x18\xc0\xa4T\x1f\xeb0\xf9\xfb\x1f\xde\xbf\xfeJ\x1a[\xf8\x93B\x19\xe62\xc5\xe0M\xa95\xec&\xff\xa2\x87\x06Cdh\xd3V\x9d\xefK\xc2\xcf\x15\xad\x9bZa\xe2T\xde\xb3=\x93\xf0\xabATeO\x8e\xc7\x86\xbd/HA\xca\x8cV\xef\xd9KVf\xb4\xe4\x12\xd0\x7f\xc3X\xf1m^~\xf0d\xfc\xadjlsb\xac\xd8\xe4\x86\x00\xa0\xeb\xf6\xcd\x8aK\xdb\x98:\xf9\xe6\x07\xdc\x99S\xa1\x04\x16\x14\n\xf1W\xed\xe7\xd6\x7f\xfd\xddh\xc8 \xba\x8b\xb3\xad\xdf\xcc:\xedC\x91\xff|\xce\xb79\x7f\x94\x0f\xaatL\xd9\xb6R\x05z\x8e5\x99\xfe%\xac\xd8^\xeb\x9c\xc11\xdfWR\xd9a\x9d\xef\xb49\x8d\xe7\xa2\x80\x8a\x94\xfbN\x07gz\x01'VK4a\xfb\xf4\xf3\xc1'\x95Z-:\x8a\"\x9e\xc0\x91<\xe4\xc7\xf3Qj\xc4%\x85\xac\x90O^\xa9\xb1\xab\x7f\x8a\x17;L\x9am\xa1\xf7\xc5\xb9\xb5\xfa\x9d\x1c|\xce\xca\xb74c\xd5\xb6^\xba:9\xdbt\xb9\x82+Mtp\xb5\x98\xdb\xdcFArr\x19\x8c\xce<\x98\xdc:HK[\x9d\xf7\xc5\x04\xdeRHq6\x16R\xc0\xed\x85\xe4\xb7\xc9\x90\xe2l5$\xef\x0dgR\x97\x86\xdb\xad\x93\x05W`pR\xee\x99f&\x9bf\xd1M\xdcr\xa4\xed\x9d\xf8`=\xb3\xc31\xc2\xff\xcdw\xdf\x99\x16R\xbdP#>\xeaql\xaa\xbe\xdc\x98hc\xaa\x1d\xf0\x97!0)G`\xfa\x9e\xb1Iy\x02\xd6\xbb\xc5\xecr\x05lR\x00l\xf2\x05,2\x06\x02|\xc1\xee\xfb\x8d\"s \xb2\xdc\x81\x18\xb2\x07\x16\xca\x1f\x88,\x83`\x99\x1c\x82I\xd3-\x82<\x02g\x99D\x8a\xec\xf5C\xce\xc5\x02\x13\xba\x7f\xfdM\xc5\x8e\xef\x0e\xa4\xa2K\xa5\x924\x19\xea\x0d;\x1bL\x908J\xc7\xc8,B\x9a\xd9\xabc\x13\xc9\xf2\xca\xfc\xbe]l4\x0d\xda a;\x0d\x9a\xbc\xc4\x84j\x16\xc8\xff\xc9\xf2R,\x90\xef\xd9\xbb{rJ\xab\xe3\x1flu\xc8'\xe5\xa4\x9b\xe7\xad\xc3\x11\xc7\x85t\xd1\x12\x92]\x11=\xd98y:\xd2\x9a\xfb5\xae\xb9\xb9\x854\xd0\x8b\xdel\x85f$\xce-\xa1`/\\Tc\x9dw\xa9\x87f\xa6\xe7\xdf\x9f\x8f\xa2\xc3K\x17~y>\xca\xae\x19\xf4\xfc\x0b;&zuC*r\\\xda5\x19\xb1\xb8\xc4\xfe\xe0\x13%\xc9f\xb6\x8cM\x97\x8eV\x8c,d)\xb28\x85\xc8\xf8%e\xc8\xe2\x15![X\x82,b\x01\xb2h\xe5\xc7b\x15\x1f\x0b]z\xec\xe2\xc2c\xe1\xcb\x8e]Tt,B\xc9\xb1\x80\x05\xc7B\x97\x1b\x0bXl\xcc\xa5\xd4X\x94Bc\x11\xca\x8cq\xb7\"c\x11J\x8c-.0f,/6s\xf8\xcd\x94\x16\xeb\x9d\x8b\xe1\x0b\x8b\xcd\x1d\xbb\xd1\x8a\x8a\x05))\x16\xa5\xa0X\x8crb\x17\x16\x13\xb3\x14\xcf\x9a,$\xe6PF\xccT\x86\xc8\xa7\x84\x98\xe9\xfd\xbf\x9b\x07\xbf\xb4x\x98\xdb\xe8\xed\x85\xc3\xe6\x86\xeaP4\xcc\xabd\xd8\xb0\xb0\xcb\xc5\xe5\xc2,\xc5\xc2\xe6J\x85\xcd\x17\n\x9b\xe0\x8a{\x910{\x89\xb0q\x81\xb0\x8b\xca\x839\x15\x07[R\x1a\xccX\x92\xcb^\x16,XQ0\xe3\xf7\x07+)p9\xb0\xe0\xc5\xc0\x02\x97\x02\x0b[\x08l\xa6\x0c\xd8\xb8x\xd2\xb8\x04X\xa8\x02`\x01\xcb\x7f\x05/\xfe\xe5Z\xfa\xcb\xa1\xf0\x97\xb2\x9b\xede\xbf\xd4\x83\x96\xa2_\x86\x92_\xa6\xaf\xba\xd6z\xb2\x95\xfbr.\xf6\xe5T\xeak\xd0\xf9\xb0e\xbe\x82\x17\xf9\nY\xe2+h\x81\xafK&\xdc\xa1\xb8\x97\xbd\xb4\xd7\xa0\xb0\x97\xd9\xf1\xb6\xd4\xe5\xc6\x98\x01F\x9a\x1cn\xc9\xe1\xd6Rr\xb8%\x87[r\xb8%\x87[\x8f\x92\xc3\x0d\x92\xc3-9\xdc\xbam&\x87[r\xb8%\x87[K\xc9\xe1f`Sr\xb8%\x87[r\xb8%\x87[r\xb8\xfd\xd2\x1dn\x0d\xd0\xfe\xf7\xaf\x04\x973\xa1\n~\x05'i\xed4B\x8f\x14\x9cV%\xe1\xf9\x9d<\xca\x1e\x9e\x9e\x18+\xd0Z\xab\xb0a\x8b\xdfNX\xd4\x17\xf8\xee6\xf2\xd9\xce\x08F\xc6\x87\xe5\xfb\x8b\xb1zf\x08a\x1c$,OW\x8dFq8^\xe8r\x8c\xe9t\\\xecv\x8c\xeax\x8c\xe8z\x8c\xe7|\x0c\xef~\x0c\xe0\x80\x8c\xe1\x82\xbc\xd0 \x19\xc5\x0d\x19\xd4\x11\x19\xde\x15\x19\xd4\x19\xe9\xe6\x8e\x8c\xe4\x90\x8c\xe2\x92tvJFqK^\xe0\x98LW\x8d:;)\x03\xb9)#9*\xe3\xb8*/vVZ\x1dv\xe9\xaa\xd1>9;0m\x03wpbz\xba1\xd3U\xa3\xe9\xaaQ\xa4`N\xcet\xd5\xe8\x8c\xbb3\xb4\xc33]5\xea\xe5\xfctw\x7f:9@=\\\xa0\xaeN\xd0t\xd5\xa8\x9bK4\x82S4\xac[4\xb0c\xf4\xd2%\xe0\xe0\x1cuq\x8f\xb6\x0e\xd2n\xe1\xce\xee\x01\xdb\xd3\xe4;\xb5Eu.9\x97B\xbf[-\x16\xa5\x89\xaa\xd7\xdcii\xc2Y8\xe5*4\x95\xf7\x84\xc5\x90\x0cs\xa9O\x08S\xee\x13|K~\n\x1a\x95\xfd\x04\xb7\xc1\x19\x0b M\x17O\x8fP\x06\x14\xbcK\x81\xda\x1c\xd7?\xe5\xfc\xf0M^pZ%\x17vra'\x17vra'\x17vra'\x17\xf6\x88\x0cJara'\x17vra\xbb:m\x93\x0b[Rra\x8f(\xb9\xb0\x93\x0b;\xb9\xb0\x93\x0b;\xb9\xb0G\x94\\\xd8\xc9\x85\x1d~ $\x17vraw\xdf\xfb\xd5\xba\xb0\xdf\x9d\x18\xbf\xa9\xf2l)\xf8\xbb>1\xbe9\x89\x06f\xd1\xdf\xea\xcf\xc8\xa6w(\xba\xd5a\xf6\x8afbW\xff\x01\x9e}v\xfd\xf9g_\x9c gG\xf5\xce\x94\x19k\xeeyoO\xf4/\xe1\xc2+K\xcf\x15^\x10H\xa0y\xb7\xe5,^\xedfe\xd7=9\xbd~ \x19\x7f.+\x08\xbf)\x17\xb2M\xd60v-\xfb\xec\xde\x9f\x1f\xce\xfc\xa2\x0e\xe5\xe5\x85\xfdy/\x96\xeb\xb7\xfaj\x83\x85}i\xaeFX+(\x92*\\G\xacp-\x97\x04^\xf9\x91\x96\xc5?\xd8\xb2\x88\x9f\xbb$W\xd7E\x15\xf8\xe5 \xbb\xc1+\x01\xc6+\xcbY_2.\x96\xc9y7/\x94\x89\xc7\xa7\xae7\x84K\x96H\xb7\x91\x10\xeb\xa3\xdb\x9e\xdb\xe2hf\xb53\xdf\xcd\xe4\x8a\x83\xad9c\xd9\x99\xfb\xce\xeaEU\xef\xa1wB\xdb/\xaat\x1c\x898\x9d?\xdeP\xf2\xd2g$\xb9\xbcA \xbf\xa3\xf5\xf5\xf3L\xfc\xef\x9f\xc9yO\xeb\x1bZ\xbd\x12\x8d,\xdck[\xc2\xc9Z\xd2;\xe4\xcdz\xd0J\xb2|\xab-\x15\x046\xc0\x9bW\xd2\xaf\x03\x92A\xc3>\xd4\x9b\x13\xadN\x94\x9f\xc7\xb6\x86\xee\xcd\xf8:h$;\xe4\xa2\xdb\xba\xdc\xac\xb0+\xc8^\x18L\xf5\x81\xdd\x0b{\"\xe7\x9f\x88?\xb7O\xc9\x00x\xf9\xa4\xfd\xc3^\xf6\xda\xd0\xf8\xf7\xe3\xc7j\xd8\xe6\x82w\xb7gy\x917\xcd+u\x1b \xd0\x9f\x15(\x80V o\xf3\x17\x12\xa3\x98\x0c\xcf\xcb\xd6D\x8f\x95\xb9J\xe4\n\x13o\xe7l{\x0d73\x9fU\x97H5\x9f65Ox{7\x17\xcf\x8fT\xca>\xe9q\x9c\xea?\xd9\x93\xbc\x04Vfx\"\xe9\xfe\x99\x1a\xaf\xe8./\n\xba\xbd\x12\x82\x91\x96[\x15\x08\x15\x87\x19F\x17\x9b\x8d\x83.\x94=\xe5\xcd;\xb0%y\xf18\xf4\xe6\xb6\x9d\xdapfX%\x93\xa6\xf3\xe0U\xe9\xf5\xd1\x97\x0c\xab1T\xf4\x9eT[\x8c\xbf\xb7\x0f\x0b\xa3\xda\xe4S\x96x\x9a\xbc\x96\xb6PN\xb7p\x97\x13(X\xf6\x01\xb6\xca\xd1!\xd6\xcf\xed\xa3dj\xcd\xc9\xf14\xb1\xa4\x0d\xfb\x14f\xf7*\xc8x|\xf6a#\xad\xb0Q2qK\x8a\x19\xdf\xb2\xec\x03\x1e\xff\xca\xdb\x85\x80\x0d\xb1\x11e\x7fe3W\xf0\xe2Q<\xa8\xbd4\xf0_\xea\x0f\xef\xf3\xa39\xe6>+\x1e\x04\xd1\xf2lP\x08\x91\x9e\xc0\x8bG\xfd\xa9\x99G&?.~\xfe\x9e\x89\xfe\xcd\xbc\xfd\xe7\x8a\x9d\xc7\\\x07).\xa4\x1f\xff+[/\xe6\x94\x89\x96\xfa\x0c\xee\x1a\xd6\xbc\x13\xcamy\x8dk=3\x881$\x9a\xcbX\xfe-\x95!\x87\xcej\xaa9\xa98\xee\xd2N\xa3\xa6\xc59\xa1\x8d\x83\xcb\xbc\xa9e#\x8f\xae\xd6\xa9\xa9\x06$U\xa6\x9e\xaetO\xe5\x86)\x18\x93\x08\x0c\xcep\xa4F\xce\xeb\xc1,\xec\x99]\xca\x0bj\x96p{k\xa1\xe2\xbb\xe8X\x8d\x92\xa7`\xe5\x9eV-w%pBF\xdc5R\xc0\x18A\xeb\x8c\xe1\xba\xfd\x10j\x80\x12?T2\x89O(\xf3B\x88\x97r4\xf3\xb8\x05\xa7\xda\xfek\x7f\x13\xfe\xd54\xb5\x8d*\xd5\xf7\nG\xd4`|\xc4\xd9%-\x8b\xeep\x07c\xd4\xcf\xbec\xc7\xb6c\x13\xb0\xca\x8a\x9e\xa8\x04z\xbf U\xc3\xd7I\xb8Y\x7f\xacr\xa1\x8c\x01g\x83\x1b2&|\xe8\xc9w\x9e|\xe7\xc9w\x9e|\xe7\xc3\x16\x92\xef<\xf9\xceM\x94|\xe7\xc9w\x9e|\xe7\xc9w\x9e|\xe7]JN\xa1\x0e\xfd\xf2\x9cB\xc9w\x9e|\xe7\x8a\x92\xef\x1c\x92\xef<\x89\xc9>%\xdf\xf9z\xbesV\x16\xc9M\x9e\xdc\xe4\xc9M\xae\xe9\x17\xeb&\x97R\xca\xd3/~ 2\xde\xd73=\xe5\x93\x9e\xf2F\xcf\xc9\xe4H\x1e\xe88\xbe\xe7h^\xe7H\xfe\xe6\x90\x9e\xe6I\x1f\xb3Y\xee\x06\xf3+_\xe2Q\xf6<\x8f,\xfe\xe3X\x9e\xe3\x99\x13\xc1\xec-\x9e\xf5\x13Oz\x88'}\xc3S^a\xbb?\xd8\xe6 \x0e\xe7\x03\xbe\xc8\xfb\xeb\x97\x94\x16\xc9\xd7;\xe5\xe5\x9d\xe9\x87\xcd4\x88\xe6\xd3\x8d\xe3\xcd\x9d\xf7\xe3Nzp\x1d\x14\xa6)o\x84\x8d\x81\x11<\xb5\x11}\xb4a\xbc\xb3s<\x89\xe8\x91\x8d\xe2\x8b\x9d\xf0\xc2\x8e\x1c\x0bf\x97B\x18\x90@J\x8f\xbe<=\x1a&\xd5\x88\x80\xbeR\x1f/\xa9\xd9?j\xd1\xaaMRh\xb17\xd4\xe6\x07]\xa8\xe1\x0fVO\x14\x7f\xe7\x84\xa7s\xd2\xc7\x19f(q|\x99C\x17\xd3\xac\xff2\x89\x99_\x8d\x98 \xe2q\x9cbXp/c\x0c\xff\xa2\xafgq\xd2Q\xf1\xe2\xf1\xcd\xab\x85`\xbe}\xd7\xd11\xf1\xde\xd4\xbb`\x04\xe89(\x8bs\xde5G\x07\x08X\x80yS\x8e\x10\xb0\xee\xb2h\x0e\x11\x88\xe6\x14\x81\x98\x8e\x11\x88\xe7\x1c\x81\xc0\x0e\x12\x98s\x92\xc0\xa4\x863z\xed\x12g \\\xe80\x81\xb9\xc3i>\x8c\xe6\x00\xbe\x8b\xe5@\x81\xf9\x8d\x0f\xb3\xb0;+\xe8n\x16r7\x0b\xb8\x9b\x83\xdb\xd9\x9d+\xe0\xe0`\x81\xa0N\x16\xb8\xd4\xd1\x02s\xa1T\xcb\x0cEq\xba\xc0\x8c\xe3\x05\xec}\xb2\xc9j\x88\xe9\x84\x81h\x8e\x18\xb0:c`\xce!\x03v\xc6\xd9\x1c3\xe0\xc8\xdc\x08\x0e\x1a\x88\xeb\xa4\x81`\x8e\x1ap\xe0QD\x87\x0d\xc4r\xda\xc0<|\xce\x88\n1[V0\x8d\x08\x999\xc4lh\x90\xe5(\xe19\x1c\xc8\xec\xab\xb6i\x0eg}A\x1c\x0b\x0c<\xad0\x98U\x87\x02:}\xc0\xd3\xf1\x03\xb3\xe08\x07\xebbJ\xe2-v\x04\x81\x833\x08\xdc\xfa\xe6\x89+\x88\xe2\x1c\x82y(\xdc,\x10.\xfc\x10\xe38\x8d`\x02\xfef\x05\xbf%1\xf7\x9b\x15sA\x1cN`abp\xc7\x13Dr>\xc1\x02\x07\x14\x92b'\x8e\x14-\x99\x06\x08$\x87\xd2\\\xf7!ao\xf0\xe6\x95|y\xd2{\x95\xf2P]\x9c])\x0f5\xe5\xa1Z\x9d_)\x0fU\x91\x83+,\xae3\xccz\x84\xa7<\xd4\x85\xee\xb1\x00\x0e\xb2KT\xaf\x88n\xb2\x94\x87:\xef0sq\x99Y\x9cf\x0eL\xb4\x99\x91Hn\xac\x8e\xe4<\x8b\xee>\x0b\xe9@s\xe1Ud'ZD7Z\xcaC\x05\xfb\xeb\xf6\x05\x10\xd6\xee\x8cfy\xfa\xdb\x9e\xf3*W`7\x9b\xbf\xa3-\xe5\xa1\xa6y\xfa\xc7\xf7\xe2\x9d\x8d\xdc\xe5\x17\xdd\xda\x94\x97\xf2Z\xb4B7U\xee\xd8\xb81\xe7\x1d\x8e\xb7\x9c\xdd\xd3|\x7fp\xbdvL\xf9x7\x15\xcdX\xb5\xfd\xa8!;\x137[\xb2\xaa\x07\x16\x05\x0d\xb4U=\xc1\x1f$\xebW\\\xf4\x08\xd0\xa7\xd1O\xf2KZ\x0e\xaa\xef\x03~\x1f\xbdhy\xad\xfc\xbf\xb7T\xec\xab\xbe\xe7W\x0ci\xca\x87 _\x95\x9a\xe35|\xc3*\xc8\xcb\x9a\x932\xa3x7\xfa\x1d+\xceG\n\xf5\xa9\xc89\x17\x0d\x9fX\x91g\x8fW\xf8\x9a:\x86'lnA\xea\xfd=-i%\xf7\xa12\x8d\xe4\x05\xed\x187\xd0N\xc0\xbc\xfc@\xb7\xf2\xfa2\x93\xc3(;\x1f\xcf\x85\xbc\xf5o\x1d\xb6\xeb\xaf)\xce\xd7\xb4\xba\x13\n\x87\xf4y\x94\xe4T\x1f\x18\xd7='\x99\xea\x1c\xab\x14\xf7yE\xc4\x11?\xc5\x94[RK5|\xc4V\xef\x19\x98\xfaB;1\x1d\xc6\xe9\xa6\xb4\"\xd0\xe18\x90\xd6#+\xa7\xe6|\x12\x16\xa3k>\xdc\xf7\x8c\xab #\x06\x81n\x19?\xc8`\x89\x90HR\x87{S\xee\x98Tkz\x7f}+e\x05\xfat\xfaC\xe14;\x94y&CL\xb7Bg9\x15$C\xf5\xf4\x95X\xdaM{\xf2_\xaa\x9d]\xc5\x8erdbHOZ\xc1\xdco\xfa\xc8\xb6\xe7\x82^\xc1=\x85\xac\x12\x87\x03\xd4\xf4D\xc4\xea\x94\xab\xa7\x06<\xb6\x18|\xa0\xf4\x04\xec\\\x01\xb9\xad\xc5\x8c\xa2\xee\x97\x15\x94H\xc5\xbd\xdf\xaa\xd0l\xe5Q\xfd\xe9\xe0\xe3}s\xac\xd7\x94P\x9a\xe5a\x97\x97@\xe0\x8eV\x8f\x83\x882\xba\x1a3\xb8'\xca\xdd\xbee\xb4\x96\xae\xbcm^\xd1L(\xa9\x15-d\xcf\x99\xda\xfe\x05\xdb\xe7\xd9\x1f\xae1\xb0C\x8a\x9a\xc1\x81\x16\xa7\x01\x0b\xce5\xd4\xf9\x96\xd6\x9c\x9e\x80@Ew$\x13\x8b\x973 w,\x97&I~D\xa5\xf71+:\xcb\xa0Y\x85\x1b\\\x85\x0e\xe7\xd58\x80\xf2\x04^<\xfeE.\xc5\xde\xf2j\x82\x19\xa3\xdf\x94\n\xf5N\x7f\xfcF~\x1b\xb6\x94\xd3\xea\xd8\x84)\x04\x93\xee\xc5\xff\x94\\\x06D\xc5\xd3\xdd\xd8\x9cPT\xc4a\xfb\xe7\xaeF=\x99\x9a\"\x9e\x9c1<\xe0\xd9W\xcf\xe0HN'\x19@\x17\x8c\x7f\xf3\xea\n\x08\x14y-\xe5\x82\xdcT\x83H\xab8\x93\xafP\xb77\xec\xfc\xf7\x07Zc\x10B\xf6R\xae\n1!:\xac\xd9Y9B\xc9mZ%E\xc1\xee\xe5\x9e\xee-4\xb6\xc3vz\xd1I\xd6\xa8 \xda\xb8!\x99\xd89\x18\xf2h\xdb\xec\xfb\xb9G}\x95\xcfM*@\xf5O9?,)\xcd\xb1\xef\xaaO\x13\xefM\xbd\x0b\xb3\xaa\x14,\xd6\xdf-j\x15\xcc+*sj\xca\x9c\x8a\x05\xb6\x93lV\xd5\x82Yu\x0b\xe6\xdc2V\xc7\x8cM\xf5\x02\xab\xfa\x05\xb6\xb1i\xb2\xaaa\xe0\xa8\x8a\x81\xeb\x17\xddt\x03XE-\x83\xe8\xaa\x19\x84T\xcf\xc0]E\x83\x18\xd3\x11S]\x83UT6\x88\xa3\xb6\x81\x03#\xc3\xabo\x10W\x85\x83hj\x1cDR\xe5 \xa6:\x07\x97\xa8t`Q\xeb`~\xbbNW\xde\x19\xa9q`Q\xf3 \xae\xaa\x076Ph\x04\x95\x0f\xa2\xa9}\x10I\xf5\x03G\xf5\x0fRZrJKvBgF\xc4f\x86Ff\xce\xe22SZrD$\xa6E!Li\xc9\x8e\xb8\xcb\x8bQ\x97)-9 \xce2\x1e\xca\xd2\x8e\xb1Li\xc9Kq\x95\xe1P\x956\x1eEFTF\xc3S\xa6\xb4\xe4\x1e\xd9\xa69, (\x12\x1c\xc8\x17\x0c\x94\xd2\x92e\x9f]P\x92.\x18I\x87\xbey\xc2K\xa2a#SZrJK\xfeG\x13s\xc1\x10\x8f\xff\xc0i\xc9S\xd6\xd0 j\x88j\xd0\x81\x16'Zim\xa8\xef\x88C\xef\x96`G\xce[\xd9O\xea\x9ae\xb9\x8cb\xc8\xd1L\x87)G\xaem\xbd\x19\x0c\xfb\xd1\xb4\x0b\xa7Bw\xc6\xdd3\x19\xaa3K\x8b0\x99\xd0\xd3!\xb8\xd9\x1d>+\x86m\xa1\xb6KeG\xd4\x90Z\xbcPZ\x90\x10\x9aC\xe8\xecb\xf6\xc6\n\x91\xc5\x0d\x8d\x05\x0e\x89M1*l\x08,R\xe8+|\xc8+t\xa8+J\x88kQh\xcb*\xf7\x91\xeb\x9e\x92\xdf$W'6\xe6\x84,\x9d\x96\xa2\x13\xed\xccm\xedX23\x86\xb4\xbcPN\xceJ\xc8E\xac\x0b/\x0fcI\xc2\xa02\xd0\xb41\xbe\x93\x82\xe5={\xd5\xac\x0b\xa1\xc9/-\xf9\x92\xea}/\xb1y\"\xd8;>\xb6\x8e\xb2s^\x0e,\x9aG\xcaU\xc2GGfL\xae#\xe9\x13|^\x14\xa8\xd1_T7\x08\x0d\x92\xb5VQXMyI<:U\x0eJ\x95\x83\xac\xf1\xe9T9H\x91C\xb4:n\xbc\xda\xeaeK\x95\x83\x16F\xb0\x03\xc4\xb0/\xf1\x8eF\x8cd\xa7\xcaA\xb8 R\xe5\xa0T9(h\x9c;b\xa4;U\x0e\x02\xfb\xeb\xf6\x05\x10\xceLB\x8a`,!\xf9\x98LH\xa9r\xd0\xa2\x98\xb8[T\xdc\xb1\x8f\x0bJ\xe9D\x8b\x8e\xa7\xcaAH\xd6hy\x12\x93\x06\xfa\xad\x8b\xc9`qt\x1b;\xa3\xc4\xd2\xe3E\xd3\xfd\xe3\xe9v\xff\xdbR\xcf\x9b|y-\xcf\xdb|\xd2\xee%\x02\xd1!u\xf7\"\x1f\x84-\x81\xd7*\x0f&\x91\x01\xc3\x16\xa6\xd2xg\x13y\xad\x92\x12\xac#D\x9a\x9e\x9b\x96\xac\x82\x13\xc9)\xa5\xd7\x8e4h\xc9\xf1\xbb.\x92WS\xac\x98\xda\x90b\xc4\xd8\x86ta\xccmH\x0e(\x85\x96\xa2LM\xf8\x98\xdd\x90b\xc5\xf0\x86\x144\xa6\xd7%;C\xc3b\x1dZ\x8a\x84zh)<\xfe\xa1\xa5\xd0H\x88\x96\xa2`\"ZZ\x84\x8e\xe8\xf6n>\xf5\xd7\xb2\x91\xa7\x9c\xdc\x93 \xc0`M\x01\x8e\x9e\x04l\xdb#\xb1\x12\x81c\xa6\x02\xc7K\x06vK\x07\xb6k\xa3\x0d\xbe\xf3\"\xb5t#l!\xd4\xe8V\xd5P\x83j\x8e6\x9d\x17l\xbb\x0e\\t)'\xfd\x17l#\x01\xebh\xc0I\x17\x06\x9719\xe9\xc4\xe0\xa0\x17\x83M7\x06\x97q#\xd9G\x8f\xe4\xa2'\x83\x1b\x174Y\xe7\xb8%w\x9d\x19\xfc\xfa`\xd7'\xfa\xb4\x96\xfe\x0c+\xe9\xd0\x10^\x8f\x06_]\x1abOY|\xbd\x1aV\xd4\xad!\xa6~\x0d\xce\x0c\x8e\xa5g\xc3\x1a\xba6D\xd6\xb7!\xaa\xce\x0d\xf1\xf5n\xb8\\\xf7\x06'\xfd\x1b\\6\xbf\x0dl2\xa1i\x83\x93>\x0ek\xe8\xe4\xe0\xb4\xaf\xe2\xe9\xe6\x10Y?\x87\xa8::8\xea\xe9-\x8dth\xd5\xc8r\xb56\x9e*\xbb\x0cP VP%4\xbd\x9b\x02V\x82\xd3\xaa\x84\xd8\x00K\x88\x0c\xb2\x84\xf8@K\x88\x0d\xb6\x84(\x80K\xb0\x83.\x01\xe6c\xafp)\xf8r\xa2\xcd\xcb\x11\x98`\xdb\xf0`\xdd\xf4\xe0\x8a\xc6\x04\x88\x8d\xc8\x04\x17Y\x03\x96\xc3\x12\xdc\xd0\x99`Gh\x82\x1d\xa5 V\xa4&x\xa05\xc1YV\xc1E\xa8\xcd\x99F\x03@7\xc1\x16\xa4w\x9c\xe4\x880N\xb0B9\xc1\xb5\x97\xee\xf3\x15\x19\xd6 \x91\xa1\x9d\xe0\x08\xef\x04\xb0B<\xc1\x95\xb9v\x08\x93&\xf7i\x88\x06\xf9\x845`\x9f\x10\x18\xfa \xce\xbc\x8b\x0e\x01\x85\xb80P\xb0AAa\x1a\x0e\n\x0e\x1e\xcb5\"\xf9\x16\xb1\xea\xb8\xab\xe61P\xe0\xd6\x8c\xdb\xa2 \x8d\x87\x82\x98\x98(X\x84\x8b\x02\x07\xe5\xf1B\x18\xe9D\xab\xfeXR\xb0\xe0I\xc1e\xee\xdd\x84\xf2\x85\xd8Rp\xc6\x97\x82O\x9f\xed\x06\xea\xe4\x1cF\xc4\x9b\x82\x0ds\nv\xdc)\xac\xc4\x86\x988T\x98\xc4\xa2\x82\x1b\x1e\x15\x92\x9c\x1eR\x92\xd3\x1d\n\x8fa\x05'\x16G\xc2\xb2BT<+,\xc0\xb46\xef\xcd\xe6\x1d\x06\xaa\x17\x85\xe4^5Jj~\xf2\xdb\xca`\xc7\x10\xce\xabK\xf0\x0c\xdd\xdd9!<\xd2m7vP\xc0\xbc\xd0N\xb7\xdd\x18\xc9.w4\xad\x13\xd2\x8f\x1f\xcc\x0f\x1a\xc6\xf7\x08\xe0\x07\x9f\x8e\xd8\xe1\xfau\x02\xf5\x91B\xf46F\xc6 \xcbG\x0e\xc8\xc7\x0b\xc5\xc7\n\xc2G\x0d\xbf_\x14x\xb7\x85\xdcg\xb6k\xba\xed\xc6\x16H\x8f\x17B\x8f\x15\x16\x0c\xce\xf3\"J<\xa5\xc4\xd8\xe4\x7f\xb4b\xbd\xa2\xf5\xb9\xe05\x90;\x92\x172\xcc\x9a\xefz\x03\xcd\x84T\xd8\xc8\xd7\xc6\x1b\xfd\x9e\xd4PS~\x059\xaf\xe1\x8e\x14g\xb9\x9f\xce%.\x89-0a\xa6\xdf\xe7\xbd\x050\xe71\xc0\x0f\xe3\x9a\xc1\xde\x8a\x19\xa0\xc7[\xba\xddb4w\xff\xf6\xe6e\xb3\xac\xe0H\xeb\x9a\x88}\xd48\xaaz\xcde\xac\xc2G\xa5\x02_\xe1\x88\xf4K\xf2\xf4\x92\xb6Ew\xb8\x831\xeag\xdf\xb1c\xdb\xb1\xbf\x99\x85{EOT\xc6\x13^\x90\xaa\xe1\xeb\xd7\xf0\xec\x7f\x9a\x1f\xef\x8dU.\x94\xaf\xe1\xf3\xc1\xb3\x7f\x97\xff\xb4\xbb\xd4\x17\xba\xd2\xb7\x84\x93\xe4?oZL\xfe\xf3\xe4?O\xfesE\xc9\x7f\x9e\xfc\xe7\xc9\x7fnz&\xf9\xcf\x93\xff<\xf9\xcf\x93\xff\xbcO\xd6]\x91\x1cCH\x8b\x1dC\xc9\x7f\x9e\xfc\xe7\x8a\x92\xff\x1c\x92\xff<\x89\xc9>%\xffyL\xff9:\xdaD\x87\xeb\x81\xf8\x15\x8a\xa9\xf2\xc65\xaf%\xdfy\xf2\x9d'\xdf\xf9/\xc9w.6\xf6\xf9t\xdd\xb35\xfa\xee\xf2z\x1eV?r\xe3\x8c\xdcG#\x87\xd1\xd0E4\xed\x14\x9a\x9a\xd8\xcb\x1d?\x8b\\=C\xae\xf5\xad\xcb>\xdb\xacQ\x86\x19Ob\x0c\xff\xe1\x84\x00\x18\xfb\n'=\x84F\xbf\xa0\xd1\x1bh\xf2\x01\xce{\xfe\xe6v\xf0\xe5\x93\x0dK'\x1cLz\xdb\x04'\x83{\xefL>\xbb\x89o\xcfi$Q\xbcr\xe1}q\xd3\x1e8\xa3\xdfm\x82\x11s\xb6\xe3\x1c\x93\x02\xfb\xd3\"y\xd1.\xf7\x9dM\xf1 \x92\x9f,\xb8w\xcc\xe0\x13\x1b\n\xe5\xe7\x99\xd4/\xbe\x95\x1a\xab\xb0j\x96\x86\x81SR\xe3\x12\xfb/\x82\xe5\xe7f\xf3\xcd\xae\x03\xbd\x10\x17.\x05\xb9\xe2\xd7Z\no^yL*\xd8\x14x\xdb\xbc\x83\xfc\xe2\x00-\x90o\xfbg\xa1\xe1\x1d1\xc3\x08*h\xe4X^\xc3\x96f2\x19T\n\x07\xf9GY\xf6 g\xe5\x15\xe4eV\xc9)\x17\x1b\xfb\xf6\x11\x9eMU\x16\xa1w\xfat\x1aZ\xf3\xec\xbe\xf4v\xd5\xd9C\x89?\x88V5\x07\x08.\x1b\x9d\xce\xda\x1b\xa0\xfc\xbc)4\xf4CY\xa0\x89&\x9f\x90i\xd9G\xb6\xcdw\xf8\xc7\x9a\x13>\x1b8\x9c\x8e\xce\xb9\x8f\xcc8\xb1\xdd\xb3_\xea!B\xcb))\xd5x\x00\x158\xe7\x0c\x8er\x83\x01\xd9qZ\xc1\xb9\x14\x7f\x16\xd3t \xc6\x90\x99:\x13\x87\xe3\xa0\xe56\x8e\xc3\xd7>\xd2\xd7\xe5V\xa6\xc9WtG+i\xe55\xe3%Z\xe64\xf3x/\x8f\x1c=\xe4r+\xe1\x0f[*]\x8d\x13\x8b=\xef\x18\xa3\xbb\xbc\xaa9\xe4e\xcesR\xe4\xffI\xb7x\x9e\x93R1N\x9a\x81Zmh\n\xa2\xb0\xec\xc3\x95q\xb5\xabCQ\x95y\xb9\xc5\x19\x11\x7f\xf8\xa7\x8ez\xd1\x7f'\xb95\xc1iU\x84;\xd6\x90\"\x1cnHnG\\\x97z\x83\x7f\xd984\x1bkC\xfb\xec\xe4`\xf3V\xdb\xbc\x82\x0f\xf4\xc4u\xb8\x07\xeb\xd3h\xa17\xfc\n\xe2r6*\xdd\xbf\xda(\x99\xe8\xb9\xbd\xed\xd3\x84\xf5'\xe0\xad\xfa\x0e4q\x9c\x88&:x\xa7\xee\x86\xbcn\xc0D5\x95\xa9\xfc(\xbf\x85\x85\x88\xe6\xaa\\\x16B\x9cO\x04\\\x0e\xa4\xdc+\x08RS\xd8\xe7X\xef\xfb\x8c\x9cg\xc0\x8d\xc4\x93}\xab\x0e\xd0\x06\x12\x86\xd6`\x99s\xd1\x1b\xc4\x9c\x81\xf6\x81\xdd\xe2\xb9\xf2\xf0\x14U\x1d5\x8b#\xc9\xf5\x06quX\x80\x0d\xe1\x7fjM\xc8\xa8\x1d\x02\xd0t\xb9\x1f!q\xae\xe1M\xe3\xa7\x96\x9c\xb8j$\xd0Ht)Q\xd7 \xd7x/\xac\x83~u\xfc\xda5;\x85N\x90\xd4\xcd\xa4n\x8e(\xa9\x9bI\xddL\xeafR7\x93\xba9\xf8JR7\x93\xba\x99\xd4M\x0fu3\xa9\x97I\xbd\x1cQR/\x93z\x99\xd4\xcb\xa4^&\xf5r\xf0\x95\xa4^&\xf52\xa9\x97\xb3\xea\xe5\x0d\xa9\xb98xR\xac$'\x01/\xf7U\xc3j;$\xdbG\x01(\x85G\xc6\x8e\xb7\xfa/I\xa1\x9e\x14\xa2\xb9\x1dP}\xde\xed\xf2\x87kx\xce[\x1d\x97\xedF\x13\xd5\x88\xf6\xb6\xd9F\xc4\xa3\xc0\xcf\xb2\xf3\xf1\\\xe0\xd7\xe5Y$\xd7tQ3\xa5\x96\x9eO[yZ\x88\xd7X)o\x05\xcei\x05u\xbe\xa5W=\xe9\xff(\x0fh\xbc\xdc\x98\xd4\xb0\xab(-\xe4\x7fu\x84\xc0\xf9d\x96\xfa=\xf6\x9dOx%\xf2\xf9\xb4\xd8\xdao\xd8 \xa5\xe0\x05g\xc1\xbc<\x85y\x9d\xf8\xa2\x80n\x1c\xf9\n\x97\xcbX\x98\x96\xb30\xcf\x0f[@7\x90\xcc\x85K\xe4.\xc4\x89\x8e\x9a\xe50D\x93\xc5\xe0)\x8f!@H\xdb0\xa3!\xe43\xf8\xcah\xb0\xec\xae\x18\xb2\x1a\xe2\xc9k\x88%\xb3!\xb8\xdc\xae\x03\x0b\xee\xd5\xfc\x1dv1?\xbb\x0d\x02$6\xc4\x13\xf7A\x04\xfe\xac\xc8\xb7\xf0\xc6&$\x82\n\xfe\x0bE\x7f\xc4\xcc\x80\xe9# \xe6!\xe0\x7f\x0c\x84I\xf20\xces\xa8\xe3`\xc1\x81`\xdb\x83\xb1\x0e\x85\xa8\xc7B\xc4\x83a\xf9\xd1p\xccK~}\xf7\xec\x96r\xf2\xec\xfaU.\x16\xcb\xedY\xf4\xe8\xa6b'V\x89\xff\xf2\x0d\x9d\xd5\x9c|\xc8\xcb\xbd\xaf\xb18\x98d\xd5J\xe3V\x96\x0b\xa8\xe9\x93\x8e\xae\x88\xee\xd3\xad\xfc\x9fM_\xf6p6r?\x92\xa2`\x19r\xb4n\xdaW\x1e\xd0v\xf5\x9d\x18+6\xad\xeb\xf3\xc2a\x0cZ[:\x9c\x81\x1e \xc6\xd6\x1f\x8e\xf8N\xc7a\xdb\x898\xd1;Z\x88I\xda\xa8\x91^8\xa0Q{q\x86\xc4Y\xfb\xa5\xc6K=:\x042v<\x9e\xcb\x9c?n\xc4\xf8/\x1cY\xbf\xb1h\xc3\x12o7\x9f\x92\xf3fsWLl\xcb^\x0f\xb7\x9dg:\xdd\xad\xfb\xfd\xfd]gY\x94\xecx\x0doJ`\xfc@+\xb8g\xd5\xb6\xbej\x9a\xc4@\x8b\xd8#\xf4\xc0\x8a-\xadj\xb8\xcf\x8bBE\x0e\xe8t\x93\xb5\x94V\x07v\x0f\xc7sv\x98\x136\x8b\xc2\xf2-\xbf}'\xbb3S\xfa<\x93\xffP\xfc\x91N\x7fq\x86\xe5\xdd\x98\xcd\x9e\x96\xb4\xce\xeb\x0d=\xb1\xec\xb09U\xec.\xaf\xbb\x12\xd1\xf5\xe3S\xed\x80\xfc\x03t\xfe\xb0\xab\xe4R\xa2*n)\x7f\xef\xf8\x19\xe5\xfb\xf9V\xec\xf2]\xee\x1f\x02\x1f\xbe/\x87\xab:\xd1\xf9+\xbd\xde_\xc3\xa7[\xf2x\x05\xf7\x94~\xf8C7\x88\xb5=g\xa2\xad\x0d\xc6+6y\x89\x83ra\x89\xd6\xbaf\x1d\xd7\x03Ud\xfa\x83\x92KmhE\xfd1\xe7 \x16m=\xdc\x85\xb2\x1d\\\xb7#\x89\xdf~cG2\xce\xbc\xb9:\xd9elN\xaf\xb7\xe6\xefp<\x170'\x80\x90<\x9d\x89\x065\x06<\xfc+\x06\xcb!\x82J\x03\xcej\x0d\xcc\xab6p\xd9\xd0\xa2\xa89\xe0\xa9\xea\x80M\xdd\x81\xcb\x06\x19I\xf5\x81\xc5\xea\x0f\xcc\xaa@p\xd9hc\xa8C\xe0\xab\x12\x01\xdc\xd3|\x7f\xe0t\xbb\x19q\xbf\x81R\xac\xe6xZ\x92\xa7\x8c\xfd\xf7xe~^~R\xec\xd08\x8f\x8a\x9e*ZK,\x0c)\x1b\xb8\x87\xc2\xde\xe0\xb7\x81\xd4u\xbe/\x91\xd59\x1fe\xe4\xbc?P\xfdd^\xa3sC.?N\xabc^\xd2\x89\x19\xe7\x8c\x93\xc2(\x86A\xa3ep\xa6\xd5\xd2P\xd3lX\xc3s\x03v\x99\xfd\x11\xd6\x855'E\xf3V\xbf\x87zCI6\xe1'\xea\x86K\xd2\xed\"O\\\xddW\xc9\xa1\x9d\xf4\n(\\\x92\\\xdc\xe2\x99\x81\x81\xd9L\x8a\xfc\xbc\xe8\x99\xd6\xb9:*\xde\x1f\x07\xa7\xd6\xc4){=\x167\x7f\xd4\xf0\x9eOj\xb5\x10Z>\n6\xe7\xe5\xbeaO\xafY\xe9bA\xfd\xc0A\xb9\x99\xd2\xd3\xcc>1\xd7\x0f\xa3\x9fG)\x9bb\x81\xe9\xe7\xa8n\xc28I\xeao\xbdE\x82\xa6\x03\x08\xe5\xa0F\x04\x89X\xac-J\xe9\xe1\xa9\xd4k5\xe6\x07&m\x10\x89_y-zt\xd3\xcc\xcfB_\xf8\x02\x13A\xf3\xf9\xf6\x91Ob&G\xab'\xd7\xa0\xb7\xaa\xa2b\x8c\xc8:\xa1\x1d\x8e\x8d \xe9.4Z\x97\x1d\x95u\x8e\x07\xad\xea\xaa\xfe-F\xa2\xd9\xdco\xe1\xe9\xa0 x{\xf3Ra\xf2\xac3\x10\x18A\xd4\x1b)\xfe\xdc?\xbe\xda\x15\xa3\x8f\xaf\xceJ\x99\xfc\xf8T\x07`\xd2.\x05\x8f\x13x\x91}\n\x8e6\xaaOGB\xd9\xaa`\xb1W}\xfat\xb1\xdd\n\xce\xb6\xab\xa5[S\xb2\x11,F!\x84\xb2e\xc1n\xcf\x82\xc5\xa6\x05\x0f\xce\xcf\x0ec\xb9}\x0b\xa1l\\p\xb4s\xc1\xaaYE\xb4w!\x9e\xcd\x0bv\xbb\x17\xe6\x94\xdd\xf9\xfc\xe4 \x1b\x18\xe6\x17\x108\xf0\x1a\xe2\xd9\xc3\xe0e\x13\x83\xdd.\x860\xc3\x8df#\xc3\x02;\x19\\le\x083\xf0\x88v3\\d;\x83\xd5~\x860\x1c\x88eK\x83\xbf=\x0d\x8eV\x95\xf9\xc0\xf0FN/*\x8a0ig\x83}:\xa6\xecm\xeb\xab\xf6y\x8c`{C\x14\xfb\x1b\xbcmpp`\x80\xcb\xaa\xf1\xb7\xc5!\xa2=\x0eKmr\x08g\x97\x83\x87\x89\xec\xa1\xa4\xcd\xe9\xa1\xd3\xd8\x15\xd7\x8e\xf8\xda\xea0o\xaf\x1b\x8c\xbcY\xcbRY\x94\xca\xccw3$\x07\x9b\xd3\xd3\x88tM\xc6\x1aK\x17\xc3cS\nt\x08\xf9\xa1\xdb\n 4\x9a\x118J\x8a\x86\xef\xe2@\xe9\xe8\x15=\xf4\xc8\x9br\xc7\x9ch\xa6$E+60\xeb\xf2w\xa3f\x85\xf5\xa5|l \xa6\xfaI\xc7\x0cR\xf9\xb2[F\xeb\xf2\xff\xfd\xbf\xff\x1f\x0e$\xe3gR\x14\x8f\xe8\xe4\xd1_\xec7\x9a\xf3\x9a\x16\xbb+\xb8=s\xa8\x884\xa8\x8f\xa4${\x93\x91\xde\xe4]J-\xe1Hxv\xc0\xc7\x86\xd1c\xcc\x1c\xed\xb2\xc1M\xf0\xc9\xd3\xaa\x91~\x0b\xdd\x98\xb2\xcb\x9b\xbc#>'^\x9ej\x00fD)\xcc ,\x83H\x85\x95\x15\xfei1\x0b6Q\x0b6q\x0b\xbeF\x81\xd3t\xbf~\xe0\xb4*I\xa1\x85\x18\xfd\xb3\x18\xc2R\x1f\xf6\x96p\xb2\xd6\x91\x16\xf60k\xb4\xcd|\x0b\xfdJ!X\x08\x84\x80d\xcc\xb0\x0f\xf5\xe6D\xab\x13\x15\x1b}\xaa7\xb7\x8c\x15\x94\x94\xa3_mfJ\xbfu\x84\xa1\xef\n\xb2\x17\x92\xaa>\xb0{\xc8w\x90c\xf2w\xfb\x14\xab\xa0d\xe5\x93\xf6\x0frE\x9a\xec\xaa\xef\xc7\x8f\xd5]\xfd\x98\x1fh^i\x9d\x8a\xfe\x8c\x92\xac\x8d\xce\xdc\x1f\xf2\x82\x8e\x85\x0f\x92lM\xf4X\x95\x12P\xf0q\xf4~^\xc3\xcd\xccgIQ\xf4>mj\x1es\xda1w\xbeIPge\xf18\xd9\x7f\xb2'y\xd9\xa6\x96\xeb\xfe\x99\x1a\xaf\xe8./\n\xba\xbd\x827%\xa7\xa5\xaeDr\xae)j\xb4\x1d\x89/\xe5\xf0\x9e\xf2\xe6\x1d\xd8\x92\xbcx\x1c\xd9\xa3M\xa76\x9c\x19V \xae;#t\xbd\xf7\xaa`(\xe2\xc0\xdb14n\xa1\xaasX\xc8\xd3l\xec!\x82\xa6\xde\x01\"\xb0\xb1~\x81\x04\xbd7\x90x&\xeb\x1f\x08\xa6\xd6\x9c\x1cO!e\xa3Lq\x91\xa8\xee\x8dl\xc5,\xc4\x90\x19\xdf\xb2\xec\x83\x14O\xef\x855%\x97\xbexGlD\xd9_\xd9\xcc\x15`\xe2O\x83\xef\xff/\xf5\x87\xf7\xa6D\x08\xb0\x89\x07\x90i\x18\xe7\xc9Z\xfdO\xe0\xc5\xa3\xfe\xd4\xcc#\x93\x1f\x17?\x7f\xcfD\xfff\xde\xfes\xc5\xcec\xae\x03\x1e\xeb\xe4\\\xf0\xafl\xbd\xb0E=\x90\xfa\x0c\xee\xfa\xf14\x9f\xb9.\xc1\x80@|\xb9\xd63\x83\x18C\xa2\xb9\xd4]n\xa9,\x9f\xd1YMh\x80\xeb\x0c\x03>q\xc1\x07h\xef\xbf\xe3\xd16z\x00\x97\x0d&\xf3t\xccQ\xaeK\x9e\xf4\x15\xc0{*7L\xc1\x98\xf4\xa7s\x86#5r~:-\x05\\zf\x97\xf20HQ\xd160\xf2]&\xa4\xa1\xe4)X\xb9\xa7U\xcb]~ (^Uy\x0f\xb3\xff\x0c:c\xb8n?\x84\x15i\x8e\xe7\x9aC\xc9\xb8\x98\xb82/\xb0\xa4\xd0p\xe6q\x0bN\xb5\xfd\xd7\xfe&\xfc\xabij\x1by\xb2\x90\x89\xf64'pf\xf5{\xdd\x97\x86\xd7\xb7\x9a\xcb\xbaz\xd2\xad\xbc\x0e\xa9\xcf\xdaNm$k\xc3\xde\xbc\xd5L\x14M\xfcu\xf2\x03r\xbf\xeaD9\xb5&xw4\nKQ<\xca\xcf6\xd5\x85\xc6\xf7\xd0\xb8\xf0J~\xed%+\xb7\xb9^\x98DL\xd19\xe3m\xde\xd8\xcf\xfd\x1e\xc9\xd2.\xdb|\xb7\xa3\x12\xd2\x91\xe9\x97k\xe3\x90\x06K\x91\xa8\xbaT\x1d\x16\xd6\x90\xe9J?Lv\x95\x14W\xb0\xa5'\x8a9Wr\x0b\x18\xf5\x8f\x9et\x1b\x0e>\xdd\x0d\x03N\x0b \\9,\xa4\x08E\xb1\x90|Jc!\xcd\xa9\\hb\xebzt\xd2\xcf\xa8\xfa\xdb\xb7\xbfe\x02\xab,M\xa4\x94\xdc\xbd\xc1>\x10\xf4\x92\x94=\xbf3b\n\x94\xfb\x01C\xde\x83\xb7\xd0\x81\x1d3\x1d\xb4\xfdB\xe3 \xe9z\x1a\xdaC{\xd0@y>*\xe4\xc2\xe6D\xf2\xed\x86\xddy_7\xe6f\x85\x19W\xa4\xe9\xeb\xba\xff-\xe8\x04\xe7LAOz\xc3\x92@\x84\x89\x8bj\x98XvB\xf8\x8bF\x07\x0f\xa0r?\x81\xb1\x897\xdc\xdeg\xc7\xe34\x8d\xb0)\x97\xd5\x19\xcf({\x13$\xae\xa0\xa2d;\x94t\x1d\x0bb\x93\xc4$$1)\x17\xe7hUH\xe5\xd9(\n\xbb&\xa8i\x89\xcd\xb3\xf3\xcf\xdam@J\xb5X\xb0}U\xacNf\x1d7\x1f\xa8\xe1\x11u\x04\x0c\xcd\xe6\xa7\\2\xe3\xfe\xc0\x86\xc3\xaf \xcf\xeb\xdd#d\xb4\xe2$/\xbbz \xbclT&\xe5\x8a\xa8\xcf\xa7\x13\xab\xba\xca\x0b\x90\x8a\x9d\xb1\x02\xde\xb0\xe5^&9\xce\x0b\x81}~\xa7\xed\x0d1\x96\x02\x8b\xe4\xc97\x9d\xbe\xa5&\xaf;Jiy\xe2\x8f\n\xe4f.\x80\xd91\xdb\xdb \x1dz}oY\xb9U.2\x0c\x01\x1d\x84\x16}\xfb(\x15pU\xd2\x1a\xdeH4\xaan\x8c\xdd\xab\x82\xcb\xac\xecp\x1e\xab\x13\xe7\x12\xc7\xc7\xb2\\BS\xb1]\xc1\x14\x86IK\xec\x1em2V\xd2\xf1D9.\xc9\x85rj;Z\xd3\x13/O5\x00\xb6\xf5\x0d\x1e\x02+\xdc:\x07\xdbZ\xf7\xe9V\xb85\x0f\xc6u\xef\xd3\x97%\xeb\x7f\xd4\xc8\xe0`\x08\xb2\x0fz-\x06\xda\x0c\xe6\xe9l\x87u\x8b\xd7,]\xb4t}\xceW\xb33\xc0El\x0d\x9c\x85\x8b\x8d\xfen#!l\xfdn{\xae&\xfe\xd4R\x1a\x0b#\xd1\x17\xd1\xd2\x1d)h)\x11\xcc\x9d\xa5F\x1f2zR6z.Mfa_\xd7@~7\x9c_\xc8%.\x14C \x12\xbf \x97\xb9\x1a\x9e\xd0,*\n\xf59\xe7BW\x94\xd6tV\x08{\xbe\x81\xd5\x0e\xa1\x9b\xf5\xf9D\xab]q\xce\xb7\xd7\xcf\x8b\xe2y]S\xbeT\xd1#\xf2\xe5\x0b\xd4R/\xc3b\xc2\x975#H\xaa\xe8 /wyA\xaa\x86\xaf_\xc3\xb3\xffi~\xbc7V\xb9P\xbe\x86\xcf\x07\xcf\xfe]\xfe\xd3(\x03\x85\xd4\xfc\xae\xc9\xcc^(\xfb\x8e\xb4`\xdb\xc7M\xab\xdbl\xdad\xef\x0b6-&d\xe1\"[\xb0\xb6\xc7K\xdbO\xbdm\x03\xbc\xc3SF\xb6s\xa5n3\x82oo\xda\x13\xbe{\xe2\xf7\x1a33d\xe6\xfbs\x16\x8aPr\xbf\x93<\x7f\xf2\xba\xe1\xf9\x93v\x1a\x01\xf3?\xa4\xee\x87\x08\xd3\xef\x07\x17\xaa\xe1\x8c\xc1=\xabdr]\x7f\xb9\xf2\x8a\x12.\x94\x95ooT\x15fR\xc3\x81\xdc\xe5\xe5^U0.\x8a&h\n\xdf_\xc3\xeb;Z*\xe7\x15W\xa8\xc8\\\xe1=\x07-\xcb\x8d(XHP>\xbe\xcf\x8f\xf4\x89\xce!|B\xeehE\xf6\xf4 \xf6\xee\xc9-\xc1{\xe9t\x02\x18-y^\xb5%\x87\x076V\xd3\x9f'\xcf\xae\xe1\xd3\xf7b'+0\x92h\xe3\xfe@\xf8'\x12C{\xaei\x8f1\xa4\x86[R\xcb\xe0.\xea\x16U>\xbam\x10\xa3\xc3\n\x1f\xfa\x07\xf87vO\xefh%\x9b)\xd9\xfdU3\xea\x92\xa1\xe7\xee\xfdO\xcfo\xa4\x83./kN \xde\xf8T\x9f\x18\xef\xb7{\xaa\xf2\x8c\xea\x92\x07\xb7\xec\\nI\xf5x\x0d\xdf\xb0\xaa\x83\xfc\x11\xebC\x1a\xd1\xa8[k\x84\xc4\xee,l\x93+\xb4\x15\xce\xc5\x80\xd1x\xa9\xd6\x8c\x9e\xaf\xd5\xaf\x85;\xde\xacGO,\xe5\xb1\xaa\xea\xaa\xa4:\xab\xa7\xde\x8a\xa9\x97Jj>\xef\x0do\xba[\x07\xbd\x96\xfa\x96\xc2\x15\x14'\xb5\xef\xf0\x120\xc6\x8a+!\\\xb2\xcex\x86\x0fL\xcet\x97 7\x8c\x15?\xd6\xb4\xbaau\x8e\x86\xe9\x8241\x7f\x9f\xe9I}\xee\xa2X\x9c\xa1\xa8\xbf_\x03\xe9B\x99t\xa1\xcc\xf2[\x05\xd2\x852=\xba`FC\xdd \xe0}\x7f\xc0\xdc\xee\x8auw@\xc4\x9b\x03\xa2\xdd\x1b\xe0yk\x00\xf4\xe2&\x9b\xb1S\xd8S\xbc\xfaI\x90\xe4\x83F\xea\xd8^\xb2^\xd46M\xc4\xfa\x131\xa1\x7f\x95\x126`\xf05.U\xbe\xf1\xed\xd5\xa6v\xcaq8\xf9\xc2\x94\xd3\xd0\xe1\xb04\xe8E\xae\xe1J\x13\xf7\xdb\x00K\xed\xc9d\xd3\xa0\x8d\xfd\xc7\x05\xb6\xa9w\xb5]9\x1d9Jf\xdf0\x0d\xe8u\xcd\xf3#\xe1\xb45>\xd4\x10\xe9\xf6\xb9\xec\xc8\x8b\xc7\xbfhMF\xaaM\x0b\xd7\x18&\x8dou\xdbc\x043\xb6\xf3K\xf1m\xa7\xbb\xcb\xed\x92\xe8\x87\xfa\xc8ZwQ\xd7\xe9\xb7\xc0\n\x9c\xf2\xcdYl\xb2\x01\xber8\xcf\x13o\x07\xf2\xc3\xcd9%{\xdf\x9cZ\x1c\x11\xfdnq|n\x91\xfcm\xb1|m1\xfclq|l6\xff\xda\xd2\xb2-\xf9\xf1|\xdcTy\xfda\xe1\xad#\xe3\xea-\xc3\x16\xdbxHv\xe6b\x1e~x\xf7\xdd\x0f]X\x02\x9a\x88l\x07\xc5I\xc3\\vC\x87hg'*\x0c\xd6U\xebQ\xfb\xf2\xff\xc0bl\xea\xe3 >\x0e\xea\xe3\xf7\xac\xfa0\xbe\x0dI\xaa3\xb4z\xa2\x01\x0er\x16\xa5\x16\xdb\xa4\x8b\x95\x82\xe5y\xf9I\x0d\xf4\xe1\xc4\xeas%67\xdc\x91*g\xe7\x1a\xa7m\x80\x8fa\xc2\x18*r\xc1bD\xda`f\x05\xa9iS\xfb\xf3\x96\xc2'\x15\xad\xf3\x9a\x93\x92\x7f\"\x1b\xd4o5\x85\x07\x94\xec\xb1U\x17\xefp\x04\x91\x9d\x93K#\x06\x9a\xb6\xb7\x06V+n=\xb7Xa\xfe\xbc\xb6y\xbab-\\\x08\xbcx!\xde\x02\x86\x80\x8b\x18\xa2-\xe4\xf7BOl\xb5\xec\x17\x8f\xaf4\xbcm\xe1\xe2n?\xb0\xe9x\x15V\xae\xf0f\x85p\xce.n+\xd2\xd2\xb25f|)\xdd\xb7\x0d#\x82\xd9Q\xc1\xb4j\x0d\xf3}\x02K\xea\xdf\xec\xab\xb6\xbd\x1eN\xdd\x868*78\xab\xdd-\xb9\xf8c\x90\xd2d\xfe\xc2's~\xc8#C\xbc\x89\xab\xc1\xa8\xcc\x03gM\x80\xb0#\xe7\x86=l\x05\x00\xaa\xa4\x0d\xb6X\xab\xa55\x17\x0d\x1cIv\xc8KD\x83\x8a\xe6+\xd8U9-\xb7\xc5\xa3\xb4\xb6\x8c\xce\xd9j \x93a\x1d9:\x93\x9f\xb5p\xdd[\xc53\xd8\x162\x0cg6,\xda\x1e\xc9\xe1$\x00\xef\x8e\x86\xc5\xdf#\x99Q\xf8H~\xbd[\x8a\xc874e\x14/\xe1\xd1\xf9H10\xfaH\x93\x8c7\xe0\xf5\x91.\xda\x1a\xe9H\xf8\xd8GBx\xe4?R`\xfc?@r\xf3\x86Y\x97\x11\xd6\xa4\xfbz\xc4)t\xd17=-|\xbf Q\x8a\xff\xf9X\xc9M\x8c\xe6\x9b\xcb\xc24\xeb\xe6\xdb,\xca \x98\x88\x8fY\xdf\x9b\x8d\x95M\xbc=9\x01?\x96'\xc6\x8a\x9f\x0e9\xa7E^/\x0d\xbc\xaaB\x06\x97\xf0\xdb0\xd4\xb9\xb2\x02\x9dq\x0c\xe0\x86\x9e]w\x0b\xb5L\xc0:\x8d@\xa5\x05\xa0G\xb7\x94\xa8a2\xd4\x04\xe3~\xd5\xa8\xd2\x95R\x9c\x0c\xdd\xe8\xaf\x9b\x1eW\xfb\x1cu\xe1\xa6\x13'\xbd\xb8\xe8\xcb\xc1\xce\xe1\x11\x06\x8f\x1b\x13\x8bk\xf2\x15`\xd4~\xa1@\x9a:\xe3\x9d\xc5\x91\x97\xf8O\xfa\xda\xa5\xfa\x9a\xeb\xa2X\x14\x92\xf7\xaf\xab\xe1\x0f\xe5N@?\xa4\x10+\xa8\xdb\x9e\xdb\xf2\x01G\xc7r\x9a\x88\xe8\x1315\xb0\x00\xee`\xddTH?\xb0\xab\xe0\xa9S\x00\xcf&\x17\xado\xa7\x00\x9e\xfbV6\xb4\x15bG\x1b\x9au\xdd\xd8\x9a\\\xe4,R\x9a\xcc_\xf8d\xfe\xda\x03x\xc9I\x1bb9FX\x8a\xee\xcb09i\x7f1\xba\x9b\x87*\x14\x04I\x9f\xf4\xa1\xa4\x0f9o\x0fC[!v\x89\xa1Y\xb7\xcd\xd2\x92\x8b\xecBJ\x93\xf9\x0b\x9f\xcc_\xb3>4/\xbd\x0d9v\x0b\xee\x1ev\x8b\x958'\x88]^\x87\xdc\xc5;7\xcf\x98\x1f\xcbm\xb2\xf1{\x94\xce\xb4\x1e\xfd\x03\x8a\xc1t\xa6\xfd\x86&\xf3\xd7|\xa6Ac \x9e\xcbd\xe5_\xb6 #,F\xf7\x85\xd8/1\xb4\xda\xe4\xd9\x0b\x12Y\xe4\x85\xe5^-\xbb8\x89W\x98(Hi\xa2\xd9\xe2D>\xb2\xd4x\xc9]\xc0\x12E\x17\x16)\x9a.S\xe4\xb8\x00\xacw\xdd\x19g?^\xb9\"\xff\x82E\x0b/8r\x99\xe7P\x85\x8b\x16\x94.\xb2\xed\xc1X\xe5\x8b\xa2\x160\x8aX\xc2\xc8\xbb\x88\x91\xc9z\x92\xa0M\xa3gp\xa1\xd5\xd4\xf3\xe3\x9b\xaf\xef\xb1\x18t?\xd6\xb4\xea!\xa7\x9a\x9ftI\xbf\xba)\x07\xb2\xb0\x93Y!/\x87\xda\x08ee\xd3T\xee[\xd9\xb4\xbb\xcc8\x9b\xa87h}\xcf\xe1\xce\xa9\xc0MN\xd7$D\xba\xc0\xecpQ\n\xc0\xd6y\xb0\x0d\x00\xc9\xae @d%\x01B)\n`S\x16\xc0\x85g\xf6\xc3\x04B+\x0ep\xb9\xf2\x00\xb3\n\x04\xb8\x0c\xdc\xaeH\x80E\x99\x80\xc8\n\x05,R*`V\xb1\x00\x17\xd6\xb8\xad\x89pJ\x06,S4\xc0i?\xc7S8 \xb6\xd2\x01q\x15\x0f\xf0W>ZJn\xc5\xc5\x86?\xc41\xfe\xc1\xcb\x01\x80\x94\xdc\x8a\xbf\xfa\xc9\\\xa8|\xb7a\x96r\x9f\xf4\xef\xc0\xcar\xd2\xbf\x93\xfe\x8dd\xe5\x99\x9b\xae\x95\xf4\xef\x89q$\xfd;\xe9\xdfI\xffN*\xdb\xafJek)\xe9\xdf\xbf\xfa\xc9l\xf4o9\x04\xac\xbf\xf8\xd8\xb9\xe7\xb9d\xc7\xe7g~`U\xce\x1f\xbf\xa3\x9cl '\x9e\x8a6\xd9\x1es\xc3\x95\x82#\xde\xab\xc3\xf2%\x16\x19\xa6\xc7\x13\x97\xb1{(\x196!\xd3\x81 \x9e\xeeM\xbf\xf5\x11\xaf\xda\x99\x9a9\xf3@\xa0>\xd1,\xdf\xe5\xb4\x16|\xc4?\xedZ\xb5A&\x88\x13\x8e\x1a\x95z\xb4\xa3\x94e\xe4DnU\xcdH`w\xb4j\x16\x82b#\xae\x84kx\x9b\xef\x0f\x1cJv/&\x0ee.+\x0b,\x80\xf4\\\x8c\xacm\xf3D\xabc^\xd7RZ\xcbr\xbb5\x9c\nR\x96\xcde\xf8\xf4\x01K\x0f\xeb:\xc7X9\xd7e.\x17U\xca\x95#\xd8\xe8\x13f\xb3\xa3+V4\xf3\x0d!'\xa0\x84IN\xcf\x0dR\xee\x8a\x97jr\xbf\xa1\xb4W\xcavG\xa9.\x03{ \xd5\xbe\xad%\xadW\x03\xe6\xe1\x97\xf4\xfew\x03\xae\xcaE\xff^5\x91\xd7\xb0\xad\xc8} \xbbJ\xea\xf9\x14\xbe\xab\xf7\xf2\x9bT~\xfe\x13\xa1\x9c\nSE\xe3zd%\xb0~\x93\xbc\"e\xbd\xa3U\xd5\xae\xfb\x8c\x1d\x8f\xe72\xe7\x8f\xb2\x10\xc0\xf5\xd4\x82\xdd\x93z\x93\xb1\xb2>\x1f]\xeeO\x9b\xb4\x00\x9d\x99\xf8gR\xbf\xc4\xcf\xf5x\xb9'B\x1b\xac9\x16\x89\xd2\x1a$i\xd5\xc5A\xc2\xc6\xfbA\xa1q\xa1O iE\x8e\xb0\xa5\\0\xa2\xcc(\x1civ e^\x1f\x87\x8b\xee\x1d\xa5_\xc1\x81\xf3S\xfd\xd5\xd3\xa7\xfb\x9c\x1f\xce\xb7\xd7\x19;>}\xc9\xea\xe3O\xa4>>\x95\x8b\xf9\x89\x92\x10O\xf3\xba>\xd3\xfa\xe9\xb3g&!z3[\xe4X\x17\xb3\xedJ\x9c^\xc9\xe3y\x99$K\xc6\xbc\xa0;V\xd1w\xb4\xdc\xfe\x1bc\x1f\x9e\xa3\xec]\xea\xd4a\xf5\xf1\x9e\xd4G\xc7<\xfb\xa9y\xb5\xf7\xab\xc7\x90\xe6~S\x84\xb7\x9d+\xaa\x19\xd3\xce\x8b\\&\xfd&\xf1rT\xa9:;3\xcb|\x90-\xe4\x16\xd1\xedl\x8e\x83\xa3}\xa2\x91\xa9\x86\xc0t\xcc\xc3\xbc\xb8\x0eq\xdc\x83\xcb\xde\x0c|\xecC\xa4\xa3\x1f.=\xfe-\xcby~\xe5,[\xcfc\xd6.]\xd2\xf57\x95\x92\xa2\x8b\xb1\xf2\x92\xe5\x97xn\xa7E\xc3\x7f\x99x\xd9\xef2\xdeU\xec\xc8E\xdd\xd8\xa8\x9d%\xfc\xfb\xf5\x97\xb8\x9f\xd72ar&\xc1<\x9b\x90\x0c\xce_\xae\xc1\xd9\x92m\xd0Q\xb4S\x88\xa3\xa1\x82\x9f\x96\n\xce\x9a*\xcc/\x9d\x8bn9\x8d\xa1\xb9\xc2\xe5\xda+\x04\xd6`\x0dBR;\x9d\x1b\x11-X\xdc(\xb3\xf2\x85\xa7J\xf1\x15\xf2\x18\xd7\xfcP ?\xec(\xad\x1bQ\xfc\x0d\xa5\xefE\x9f<\xe5\xefH\xd8\x18'[\xac\x9e7\xaf\xac\x8fM\xac\x87\xa9\xa3Lw\x19\xba\xa9\x19R\xf5i\x15$\x02\x19J\x1ey\x01\x94\x10.\xa2/\xf0\xe6\x95\xac\x87\xd7\xaeh9\xe7GR}\xa8[{@\xcc;-\xf2}\xae\xcb\xe3\x9ek\x8ak\x81?\xc8\x9d\xa7j\xc2\x95\xf0N3\xb5i\xef\x0d\xaf\xd5\x8dBy\xa9/s\x12\x1b\x95V\xf9\x9d\xd8_\x87\x8a\x9d\xf7\x07(\x18\x93wsh\xff\x7f\xc5\xeer\xb1\xe2T'\xbb\xfd\xa3M\xcf\x8f\xe7Ziw\xaaaRK\x85\x8c\xed \xe7\xea\x8a\x90z~\xb6\xd1@ 5\xbd$a\xfd\x96\xd4t\x1c}\x1b\xcd\xecl\x1f\xe4\xf7o\xc4\xf2X\x8aC\xbddm\xd9\xbb\xf6\xee\xc4\xf8\x8d\x98\xc7\x8f\xd0;\xd9\xc3\x13\xe3\x1b\xb9\x90,m\x8cCu\xc6A\xf4\xd5\xbc}u\xca\xa6\xf4<\xa9\xc4\xc9\x88\x9e\xe1\x9a\xac\xe6\x12\x18\xb5\xd1\xb6zK\xc8\xe5`\xe7\xad\xde\xbaK\xd5\xbe\x1d\xa5\x1b\xb9G/\xd1\x97#\xfb\xf3\xc6So}e\xf6@\x9c?\x0eC\x08\xc3A\x93\xa1d\xe2\xa0\xd9P\xa2q\xd4\xdbE\x122c\xf5\x91\xd5\xd7\xe4\xcc\x0f\x97\xb9\x9a\x8f\xe4as\xa4G\xb6\x11\n\x1d\xc9\x84\x81\xb1|\xdb\xf3\x87M\x9d\xef7E~\xcc\x0dE_\xbcZ\xf9O\xba\x11\n\xd0\xe6D\xab\xcd\xed#\xb7\xc9\x91\x99\xe6D\x8f\xeeh\x95\xef\x1e\xb1E\xba\xfd\xfc\xcb/\x9f\xfdK\xb8\x06k\x9a\x9d>\xff\xf2\x9f?<[\xda\xe4\x02\xcf\x9f\x98\xf8\x9e\x05hZ\x10Rf}\xec\xbbx\xc5\xe3\x9bsU\x0c%\xca\x8c<\xb1i\xd0\xcf\xe1\xc7\xb7\xdf>\xad\xfe?\xf6\xde\xf5;\x8e\xdbH\x1c\xfd\xbe\x7fE-?DTB\x8f\"'\xbb\xf7\\\xedj\xcf\xd2z\x99\x89,\xf1\x8a\x94s\xf6\xf8\xf87\xc4\xf4`f:\xec\xe9\x1e\xf7\x83\xd4$\xbf\xfc\xef\xf7\xe0\xd5O<\n\xfd\x18\xdb\x9b\xae/\x969\x0d\xa0P(T\x15\xaa\n\x05\x9a%E\x1aP\x88\xc9\x9e\n\x99Q\xc4\xe1O\x05\x8d\x8e\x10\xaei\x9c\x0b\xe9\xc1e\x00\xb33\xe5\xb19\xa3\xa9\xcc\xc4\xe8\xda\xbf\xfc\xc0\x14$\x11\xac\x8a\xcd\x86\xa6\xb0\xa7YF\xb6t!d\x8a\xc0U\xecR\xf9\x8a\x01\xdb\xe6\x11%\x99\xe6m3\xb6q\xcf\x9e\x9dA\xb9\xaf\xc4\xd1'\"Y\x0e\x19\xdd\xb2\x13\x9eB\xe9\xf3\xa7\xf7O28\x10\xb6\xa4\xac\xf3\xf2\xe1\x0f\xcdi\x87{\x9f\xa2\xe8\x08?\x15$\x12:\x8c\xcf_v\xc5gzN\xd8)\xa0\xdb\xf8\x8e\x0d\xf1l\x9b$\xdb\x88.\xf8\\W\xc5f\xa1RB\xee\x9e\n\x0cyw\xd9.)\xa25;\xe8\xf1\xab\xbd\x01\x89\x938\x0cH\xc4\x19\xb8\xdb\xf39]l\x17\x17\x8c\x14<\xfb\xe3lq\x06\xf2\x19K\x12\x04\xf4\x90\xd3\xf5S\xddy\xe3*\x86\x03#N\x18\xd0\x0b\xc8)\xe3\xfb\"\x13\x8f~\x1eR\x1a$\xfbC\x181\x0c\xe4\xb9n\x15\xc6$=\xf2\xa7Bs\xfe\xa2%_\xf4|G\x8f\xdd\xae\xe9\x97\x03\x0d\xf8\x83\x13y\xc2\xa5\xbd\xbc\xb7\xcc\x16\x8e~\xe1\xa4\xbf\x8c\x8f\x0b\xf5\x06\xa7H\xf7\xf9\xfc\xe9\xbdzh\x825ix\xde\x14d\xc1\x8e\xee)\xdc\xb1c\xd2\xdd\x85\xf8ov\xc7\xdd\xa6q\"\x7f\xbd\xe0\xab\x1f\x90\x18\x12\xce\xc5|FL\xc1\x14\x07\xa6r\x8e\x07]\xbf4}\xe0\xf5\x9bI\x0e{r\xc8\xc4Rr\x8c\xf2Dq\xa2\x10\x0b\"\x19\x93\xe7}$Q\x94\x7fz\xcf\x07\xe7*7\xdf\xd1}\x8d\xeb\xd6\x82\xed\x88\xc2\x95\xfd\xfb! \xd7@\xe2\xb6/\x0cxr`\xc2\x93\x03\xf9[\xb1\x9b$\xa5\x17\xaa!\xeb\x8f\xe4!\xf7[\x1f!\xa6t\xad\xdey\xe4\x9b<}\xa0kM\x7f\xe2=\xc5xK\xc5\xd3\xba\x8c\xdb\x17p\xfe9\xa3\xf0@\xd3,L\xb8o\x9a1\x08\xdb\xad\x82CHL\xb6\xbaD\xadUJ\xc5K\x8a\xb2\xc3\xc5\xd3.->$9}!\xf2 7E\x1c\x08\x9ee\xf8\xca]\x1c\x14iJ\xe3<:\x02y a\xc4_^\x91\x1b*\xd9l\xc2 $\x91A\x9a\xae\x8a\x0d\xa4\x94\xc9H*\x1f\x1b\xcaU\xa7e\x1a^\xc5\xe9+\xba\x0d\xe3\x98!\xfb\x18\xe6;\x8d\xf8;\x1e\xe8Bp\x1c9\x84\xd9\"H\xf4~\x0c\xce\xf3\x19$\xb2$:\x89\xdb\xfb\x15\xce\xd5#\xc0<\x02\"6\xc9S\xd8\xf3\xc0\xc1J\xc3-\x1cY\xee\xf9+\x1dt2\xa1K\x86* \xa3{\x12\xe7a\xd0\xca{\xe4L\xef\xa1\xfc\x94\x85\xc0\x8c\x1e\x9b^\xfc\x8e\xed\xc2\x15\xadb5\xa5^\xeb\xa81\xa9\x1b\xc8*yh\x9c}\x181\xff\xc5\xd0}K\xed\xde]\xc6\xc7\xbb\xda\xdb=1\x90t\x15\xe6)\xe3p\xcb\xc8Jl\x91(\x91k\xda~\xf6\x87 \x14.\xf3\xc4\xe8+\xab\xc6.\x15rk\xcd\xaf\x15\xa7E\xe1\x8a\xa3$E]\x06Yq8$)W\x02\x07\x12\xdc?+b\xf6\x1f&\xfa\xc5\xc2To!w\xf4Z\xb2\x81B<3Z\xee\x89\x0cD\xbc*\x14\x1b\x04\xb64\xa6\xa2D\xbe\xf0U\x95\xbey\xd6\xbf o\xb3\xcf7_\x08\xe3\x1ex\xce\xec\xbc\xe0\x9eo\x08\x89\x12)\x89\x15\xc6\xf0\xeaw\xbf\xd3\xf1\xf5\xdb$\x81M\x92\xc0KX,\x16\xff\xd1\xf9\x99\x8dJ\xe2c\xf7\x07\x12\x1f\x17l\xbc\xb7i\xb2?\xdf$\xc9\xd3\xee'\x8bEW\xe4\x86\x1b8gM?s\x0co\x93\xf3\xdf\xb0\xb6O\xe1\xef\x1a)\xa3k\xff\x0f\xfd\xe4\xbfvL\xfeO\xe4\x81\xf4\x9f=\xbc\xe4\x8a\x9du\xdbc\xaaav\xfe6I\x16AD\xb2\xcc0S\x81\x02\xfbX _k\xd0\x1d\xabE\x82\x92\x06\x7fp\xd0\xe0\xfa\x98\xef\x92X\xa3\x95\xc5\xe8o\x93\xe4|\xb1X<\xd5\xad\xb4 \xc0\xb9\xf67\xce\x05\x9c,X\xaa\xb0FW\x82(\xaf\xdf\xdc\xbc\xfatu}\xfb\xf1\xd3\xd3\xae{@t/8E?\x80\x18BO\x8e?:\xc8\xf1.\xd1\xe8oF\x8a\x17/\xe17\x87\xd5\xe2m\x92\xfc}\xb1X\xfc\xa3\xfb\x11\x89\x8f\x17\xcc\xa4`_\x1e\x84\x1e\xfd\x8e\xa4\xd9\x8eD\x8cHzDu\xa4h\x8f\xa6\x19*\xdc\xb4\x06\xfa\x1c\xef\xab\xa18\"\x9c!\xf9W\xff\xfa\x12\xe20\xd22\x98~\xfc\x16'q\xbf\x01\xa3\x93\x92<\xa5\xa7au\xac4\xaf\x92\x87\x8fa\x14\xb1\x1f\xe4\xf3#L\x9b5\xbb{\xa2\xd1\xac\xcf\xd8Ac\xc1\x7f`V\xc6\x13\xf5\xc8\xbeR\xd7|\xb5r~\xbf\x82a\xd2\xec\xb0\x14\x88qtT\xc6t\xe7\xe4RZ0@6\xb9|\xbc\x84\x1f\x90\x9e<{\xd2\xecNJi5\xb40\xd7\xa9\xe4\x9e\xb3M\x92,V$\xe5H\x7fyv\\\xfc\xedL\xccX\x18\xa9]{\x9b\x0fy\xc6\xbecr\xa6\xf1\xd3\x9fn>~h\xfe\xe5\xe5\xcb\x97/\xbb\xb4g\xdfU\x07\xb5*\xf6\x15KU)l\xdd\"+\xa3\xd2\xdb\"\"\xad\xd7\xba\xbb\xcds\xfe\x9ed\xa5\xf0.\x80\xeeWt\xbd\xaeT\xdf\x85\xd4\xa2\xad\xe3]M)\x89\xb0\xe2\xdd\x7f\xb3i\xdf\xc9\xd3L\xa9\xb8\xebD\\\xa8\xed\xa7;>\xb0\x15e\x9b\xaf2\xef7aD\xbb\x02Nm\xd2k\x9afI\xac\xe5gyn\xde\x84i\x96/9\xe9_\xc2\xf3nO\xe5\x87\x8c\x03\xd4w_\xbbE*\x80v\xd43N\x80\xb3\x17p\xa6c\xed\xe6\xb4\x16\x02\xfb\xb3\x0b]?\x1c\xef\x0fd\xcf\xfa\xfaO\x81\xe2\x7fi?dx\xb7\xbes!\x7f\xb5\x91Fhs\x91\xc5\x12\x85\x19<\xd2(\xfa\xea>N\x1eE\x84y\xc7]\x962$\xdc\xe5\xd4&?]\x08\xbb\xaa\xc5dB\x12\xd4\x86d\x9c\xc3c\x8b\x9co\x9a\x1d\xdeq.VL$\xdeT\xcf\xab\xa04\xdf\x03\xad\xd7\x1a\xd9\xcf\x92\xf7\x9a}\xf1\xeeK\x96\x83s\xb6\x81\xd5t;\x87H\xe5\x93\xf8\xf1\x87\x1f\x9f\xea\xb8s\xc8\x827G\xd0\xaf9\x9f7\xeb\xea\xf9\xe2\xeb\xe7_gg\x9au\x14\xff\xed\x86<[\xfe6L\xccS6\xe9\x04=]>\xbd\xbea\x08\xe9\xd4;Y\x10\"7\xb8\x00\x1dA\x05\x97\x1bpBG\xe0\xb8\xae\xc0\xa9\x9c\x81\x03\xdd\x81S:\x04{\xbb\x04'u\nN\xe8\x16\x9c\xce18\xbekp\x04\xe7\xe0\x14\xee\xc1\x81\x0e\xc2I\\\x84\xa3: \xc7w\x13\x8e\xea(\xc4\xb9\n'r\x16N\xe2.D;\x0c'q\x19\x0ep\x1a\x1a\xdc\x86\xc8(\xbc\xc6u8\xb9\xf3\xd0\xa5\xae's \x8e\xe4B\x9c\xc8\x898\x8d\x1bq\xb0#\xd1\xe9L\xb38\x13Q\xeeD\x83\x13\xc3\xcb\xa5h\xea\xa3s\x00\x1c\xeaX\xc4S\xc3\xed\\tM\x1c\xe1`\xf4t1\xeaN\xc4\x83\xdd\x8cNG\xa3\xdd\xd5\xe8r6Z\xa8\x84w8b\\\x8e:\xa7\xe3@\xb7#\xd2\xf1\xd8\xcf\xf5h\"\x0c\xc2\xfd8\xa2\x03\xd2\x88E\x87\xd3FvCN\xe0\x88\x1c\xdd\x159\xb63\xd2\xea\x8e\xd49$u.\xc9\xf1\x9c\x92\xa3\xba%'pL\xe2]\x93(\xe7\xa4\x87{\x12\xeb\xa0\xd4\xba(\xf5>+\xbc\xd7\xca\xe5\xa6\xf4pT\"]\x95\x9ai\x8c\xeb\xae\x9c\xc0a9\xae\xcbrd\xa7\xe5P\x16@8.1\xae\xcb\xcay U\x02\xb6r \xf2C3_\xe3/a&.\x9d\xc8_\xca6\x07\xb2\x95\xb7\x9e\xeaJ\xb9u\x7fM}\xd2\xcac,\xff,E\xa8\xf2\x8a\x0e\xb8\xc5\x16\xd3/\xf9\xf2\x9e\x1e\xc7I\xb1\xe8>\xbb\xaf@\x8d\xa3\x1c\xba\xec\x9f\xf2\x80N2\xf9\xb0\xc65\xd9\xaad\xf5\x85\xf8\xbd\xd3\x8d(\xd9\xc3:`\x1d2\x92P\xd8'Y\x0e\x94\x1f\x8d\xf9\xb9\xb9\xd1\x88W\xd5\xee19\xed\xdd$se,>\x0c\x9f\x1b\xffG\\\xecW\xe2\xf0\xa7<%\xb5\xb3\xfc\xa61Q\xce\x1eK\xde\xac\xcb\xf3\x8f\x84W\xc1\xba\xe0 \xcce]\xac\"\x16l\xb1\x16\xc7\xed\xc70S\xeb`\xbdK\xdbv{{\xf8\xd6\x9b7\x8a*\xf8\xd9\x07?\xfb\xe0g\x1f|\x85\xd2\xec\x83\x9f}\xf0u\xd0X\xb5\xb3\x0f~\xf6\xc1\xcf>x\xac\xd7y\xf6\xc1s\x98}\xf0\x1d\x98}\xf0\xb3\x0f~\xf6\xc1\xcf>\xf8\xd9\x07\xdf\x81\xd9\x07?\xfb\xe0\xc7g\x81\xd1}\xf0\xdd\x04b\xbd{\x11\xe3\xebl\xb6\xc4\xa7\x13\xff\xfaK\xd99\xaaX@o\x97\xb9\xa9\xa2\xc5\xc0\x1em\xd5-\xfaw\x8d\xa8t1^\xe7\xda\xaa\x17}\xba\x9f\xb0jX\x8d\xe3\xffV\xb2\xfc\xbb\x94T\x05-\x90L.K\xb6\xfe\xad\x13\xf6\xf2\xe4\xd3|.\x861\xa2\xef}\x90\xe7}:\xbf{O\xaf\xfb\x84>\xf7\xc9<\xeeS\xf9\xdb\xc7\xf6\xb6\x0f\xf6\xb5\x8f\xefi\x1f\xe4g\x9f\xc0\xcb>\xa2\x8f}l\x0f\xfb\x88\xfeu\x8cw}\x12\xdf\xfa\x04\x9eu\x8d\xa5:\x17\xc3\x18\xcb\x97>\x17\xc3ht:\x85\x07}\xa0\xff\x1cW\x0eb.\x861\x17\xc3\x98\x8baH\xe8\xe3\x0d\x9f\x8ba\x0c\xf7\x7f\x8f\xec\xfd\x1e\xd7\xf7=\x17\xc3p\xfa\xbb\xb1\xden\x84\xaf\x1b\xed\xe9\xc6\xf9\xb9\xe7b\x18s1\x8c!\x0b\x8e\xf0g\xbb\xbd\xd9\x95\xf8\xa7_\x0ea\xf7\x15[\x83\x81\xbf1<\xe6k*\x9c\xcf\x1dw\xb0\x0d\x1fhV{\xb2\x87\x9f\xf7\xe8\x17\x1a\x14\xb5#B^\x95^\x96\xc2WH\x8a\n?\xfe\xb0\xab\xcbKx\xa9s\xfb\xe58\x97\xe1\x96u@S'\x1d\xc4w\xee\xfa\xc6\xb3\x0brvA\xce.\xc8n\xc7\xb3\x0brvAv\xbb\x9a]\x90\x06i:\xbb g\x17\xe4\xec\x82T0\xbb g\x17\xe4\xec\x82\xac`vAj\xc84\xbb g\x17\xe4\xec\x82\x9c]\x90\xb3\x0b\xf2\x9f\xc6\x05\xd9\xad\x93\xd0\xf5\x07\xcaW\xc1\x19\x07p\x1f\x9e\x10\x04\xab$\xdf \xeb\xbe|\xd6\\\xca\x11\xe9\xe8\xe3\x8c#\x9d\x835\xf5{\xc5\x8fa\xfcT\x13\xc6\xdc\x90\xcd\xc2L\x90\x87\xb7\x10\x8fS\xf3\xff\xe7m\xb4NK\x9e\x0c\xf9N\x8c\xc3\xff\xd37\xa9\x97\xe3w\xb2\xda\x04\x1aW\xa9\x00\xcb\xb1L\xe36u\xb61\xbaP\xeb-{=^\x9d\x1b\xab+\x80\x1d%\x01.\x07\xab\x80\xc9\xdc\xac\x02\xc6t\xb6\n\x98\xc6\xe5*`\x90\xe3U\xc0t\xeeW\x01=\x9d\xb0\x02&t\xc5\n\x98\xcc!+`*\xb7\xac\xec}d\xe7\xac\x80\xc1.Z\xd5\xcd\xd8\x8eZ\x01\x83\xdc\xb5\x02&p\xda\n\x18\xd1u+`l\x07\xae\x80\x11\xdd\xb8\x020\xce\\\x01\x93\xb8t\x05L\xe0\xd8\x15\xa01\xdc\xcc\x12k\x02'\xaf\x80\xde\xae^\x01\x86*\x0e\x80Q\xcc\xd6j\x0e0\xbd\x0bX3\x88\xd6<\x98\xcc\x1d,`\x14\xa7\xb0\x80I\\\xc3\x02\xa6p\x10\x0b\x18\xe8&\x16\xe0\xaco\x00\xf6\x8a\x0f\x80s\x1c\x0b0\xdc\x1d\xf7t\"\x0b0\xf7\xa5\xbdc;\xd4\xad,\xc0\x87Zn\x17\xb3\x007Q\x10\xeef\x01^Ng\x01Zb\x0dw@\x0bpV\x8a\x00g\xb5\x08p\xba\xa4\x05X\xa9\x88wO\x0bp;\xa9\x05\xe8*H\xc0P\x87\xb5\x00\x94\xdbZ@\x1f\xe7\xb5\x003\xd1\x10\x8el\x01\xa3\xb9\xb3\x05X0\xd2r\xea\xc8\x0en\x01\xa3\xbb\xb9\x05\x8c\xec\xec\x160\xae\xcb[\x80\xb5\xea\x04\x18*O\x80\xa1\xfa\x04\x8c\xe8\n\x170\xa2C\\\xc0\xe8nq\x01X\xe7\xb8\x00\x84\x8b\\\x00\xdaQ\xde\xf8\xdcY\x99\x02\x8c\xca\xc0X\x9e\x00<\xfc\xa9.\x07\xba\xec\x0d\xebF\x97\x9fc\x9c\xe9\x02\xb4S\x1b\xd7\xb1.`t\xf7\xba\x801\x9d\xec\x02Fu\xb5\x0b\x18\xce&\x08\xb7\xbb\xec\xd0\xe9|\x17\xd0V\\zG\xbc\x00\xeb\xc1\xcb\xe4\x94\x97M\x0d%\x8c\xa7v\xd0\x0b\xf0u\xd3\x0bh\x1c\xe0\x84o\x9d;\x92 \n3\xeei\x93\x7f\x13\xa3\xae\x15KI\x84*=\xdd\xaf\xf46\x89\xeb\x7fU\x85\x13\xe6\xd2\xdbd.\xbdm,\xbdm\x8e$a\xcaq4\x1a\xe2\xaar\xd4\x06L\xe7\xd0\xd5\x1c\xba\x9aCWs\xe8\xca4\xc0\x1c\xba\xea\xc0\x1c\xba\x9aCWs\xe8\xaa\x06\x9a\xc3\xcf\x1c\xbaj\xc0\x1c\xba\x9aCWs\xe8\xaa\x01s\xe8J\xdfd\x0e]i`\x0e]\xcd\xa1\xab9t5\x87\xae\xe6\xd0\x95\x84\xe11\x899t5\x87\xae\x10l2\x87\xae~\xb9\xa1\xab\xd5\xb1\x86P:\x87\xae\xe6\xd0\xd5\xcf\x18\xbaJ\xfb\x86\xae\xd2~\xa1\xab_G\xccj\x8e%\xcd\xb1\xa4\x1a\xcc\xb1\xa49\x96\xd4\x809\x964\xc7\x92\xe6XR\x0d4\xa7\x919\x96\xd4\x809\x964\xc7\x92\xe6XR\x03\xe6X\x92\xbe\xc9\x1cK\xd2\xc0\x1cK\x9acIs,i\x8e%\xcd\xb1$ \xc3\x83\x04s,i\x8e%!\xd8\xe4\xd7\x1aK2=\x92 \xc0\xe3\xa9\x04\x01\xb9\xcf\x83 \x1a\x0c\x1a>e{\x84\x88-\xbb\x8aW\xad\x8es\xa4H\xc2\x1c)\xfa\x19#E^!\xa2\xcb&\xaf\x1bbD+\x12\xdf\x97!\xa2\xd74N\xf6\x9f\xe3\xd0\xf7\xdd\xe15k\xd7\x8d\x0bu\x16\xa61-\xde\xa8\xd2\x00bBR+\xd7c\x03L<\xc4\xf2\xeb\"\x0es\xee\xa9\x87\x82\xe4\xc9\xfei\xb5a\xe8\x97C\x12\xd38\xefb\x11\xc69\xdd\xd2\xb4\xf6w\xc5\x1bm\xd6\xb0ynT\xffu\x84\x0f\xc9\xa3`\x8e\xe7\xbf\xaf~\xe7z-\x89)\xf7\x1f79!%\xa1\xb4nW$\xa3K1\xa5\x8c\xf3\x92:\xefh\xfeM\x94\x04\xf7\xdf\x1c\xbf\xa5\xe1v\xd7W\xf7\xacX\x1f\xcbPC\x05\xb4T\xd8\x91l\xd7c\xd3t$\xc2\x81\xa4\xf92\xa3\xf9rG\xc9\xba\xfb\xa0\xa9Q\xd5\xd9\x9dn\xda=\x0de\x7f\xe6\xa8\xb9=b\xae\x9b4\xd8'\x0e(qxM\xd2<\xa3\xf9\xb7\x9c\x06\xff\xd2\xf9\x99\xaf\xf9\xd5\xeb\xe6\xfa\x0dY\xbc1i-K\xb7j\xe9\"\xd0\x17\xf1\x16\x8e4\x0f\x9d\x18)\xd8;\xa7\xa3C\x90:8V\x07\\2]\x009\x1c\xa6\x1c\xc0\xed\xafe6T\x9c\xd18+2\x08\xc8A\x18,\xc2\xe0P\x7fN\x8bH\x06\xdc\x0fi\x12\xd0,\x13\xb5\x96\x14\xe5\x85S\x94\xfdO\xb0#a|\xa1\xcfO\x08\xe3 *D\x95\xa6(\xaa}\x0e<\x08 \"l|lU\x08N\x8c\xaaJ\xaaV\x05\x8e\x9fh]\xc3\xc0\xa5\"\x85<%q&J8\xedI\xb0\x0bcM\xe5U>nKN)\xb0\x12}\xc7\xa5\xa3w3\xd7\xfe\xcfC]<\x19\xdd\xa9\xbe\xa2\x12\x03^\xb4L'\x95\x15\x0c\xdc\x1f&\xc1\x05n\xe4\x01S\x87\xd7!\xc5\x158f\x01\x88\x99\x80M\xba\x97\x1f8\xa4\xbc\x02L~\x94\x9dx\x80# `\x88\xe8\xd4\x06\xad\xcf\xdaZA\x01g\xa6 \xd9\xef\xc3|9\xbe\xc6\x82\n\x01\xd6\xb9\xd8\xf9B\xc20\x01\xd1\xf9\x9a\xfdq\x124x\x91g\x92'i6I\xf7\xedYnR\x9e\x95\xc2%\x1c$E~(\xf2\xeao\x87\x94>\x08\"t\xfa\xe1\xc7\x9a\x89q-5\xc0$\xbd\x93\xc3a\x92~9\x9f\xca\xd3\xcf$\x03\xd0\x87pM\xe3\x80N\xd2y\xc9\x1f\x95\xfa\xd5\xda6L\xa0%\x19M\x97\xf2\xf1\xa4q\xf1h\x98\x0dB`4\xbc\x06\xa5\xba\xe6\xd7\x84\xe1\xb6py\xb0\x00\xf8\x0b}\x92R\xf8k\x91\xe5@\xb6)\xa5\xcc\xea\x92/V\x88$X^&\xd4\xd0?\xcf\xc7\xdaS\x12K|\x05R\x97\x87\xc3\xb7$\xdb\xc1:\xa1\xe2\xf9\x01a\xcf\xf1\xfc,vn\xff\xd2\xc9\x92\x93|\xfc\x9a\x99w\x8d\x12\xb0\xec\xec\xce\xcc:f\xa9\x11Y\xd0]\xf6\xb6n\x98\x93\x8d\x0e\xd5\xae\x1b\x89\x85L\xdd\xc1p>\xb2\x18\"n3d]\x08C\x97.\x1f\x92\x9c.mh\np\x8e \xa8q\x19\xf0\x11;{\xb4 \xa8\xe1\x00=$\xa8.\x1d\xdf \xf6h\x1dh\\\x18s\xf1\xeb\xf0\x15\xdc\\\xbd\xfb\xf0\xe6\xf5\xf2\xbb\x9bw\xcb\xdb\xff\xb9~\xb3\xfc\xfc\xe1\xcf\x1f>\xfe\xe5C\xaf\xb6\xd7\x9f\xde|\xff\xf1\xf6M\xdf\xb6\xaf>~\xf7\xdd\xd5m\xcf\xd6\x1f\xaf?\xde\\\xbew6\x96\xa92/z\xcf\x1b#\xea\x9ap\x13nc\xba\xfe.\xdb\xde\xca\xaa\xc0\xe2\x11 \x9e\xd2\xcd\x7f\xaaWto\x1c<\xcd\xef\x084\xc0\xb8\x10/\xe0\xfb$\xef$j\xa2\xfb\x10$}\x01\xd7\\\xd5\x92\xc8\xd5\x91\xf9t\xd8\x04/N\xc6\x9d%\x04\xa4I\x11\x1b\xb2\xba\xea\x80=\xc6\x08\xa8!\xf0\x87\xaf\x1d_\xdb\x8e\x9aM@\x8b\x11\xf0\x12%\x808WU\xe0\xb5\x10\xe06\x03\xda\x80<\xbe6\xc1\x8b2\xe0M\x1d\x06\xce\x83n\x13\xfc\xf8E\x81\x0f\xe3*\xc0/\x1d\xf4Y>\xf0_B\xf4\xe1Y\xdb\xc8t\x94n\x7f\xbc\xa7YN\xf6FG`\xedS\x9f)\xbb\xfdCM(O\x93\xb63E\x13z\xe1\x83 }\x85J\x18\xaf\xe9\x17,\"X\x1e\xf5\x91ie\x18\x17\x8b\xc4\xd8\xd4\xf0\xd3\xb8L\xe35//\x1cR\xca\x0c\xbb\x0b\xf9v\xdb>\x14\x8f\xcb\x89\x7fr\x9bO8\x1c*g\x02\xc3\xcd\xa5ykJ\xda\xfc\x117(W\xb3A\x891\xacf\x83\x12\xc3\xde0\x1b\x94]\xf0\xe2d\x1f\xbd<\x1b\x94\xe0e\x95x-\x04\xf8(\x01\x01\xb3A\x89d\\\x05\xf8\xa5\x83>\xcb\x07\xfeK8\x1b\x94V\xe8\x85\x0f\x82\xf4\xb3AY\x81\x9f\xc6\xfdE\x19\x94\\\xd0,\x1f\x92<\x8c\xb7K^&\x02c\\\"\x08\x88\x15.\x15\x1f\xfd\x1c\xa3#7\xb6\xf7\xb8\xee\x0d\xdd\xe0\x99\xd7\xcaG\xcdx\xe3\x8d\xf4PW>~\xe5\xb3\x16\xb1\xa1\x92b\xca8\xcb\x1f\x13\xf6\xed&\n\x03\xb6\x8c\x9ca\x8c\x8b\x1e1\x0bh)\xeeG/I\x9e\x93\xe0\xfe\xb4>\xf1\x1a\xa6Kk:\x90\x00\xd4\xc8\x80\x1e\x1d\xa4\xbc\xa0k\xb4\xcaGc\x00^X\x801\xbfK\x0f^h\x807*`\xcf\x10\xd3\x03>oL\x0f\xdes\x82^\xf3\x02W\xe6\x99\x1e\xd0\xbb\xbe\x0dJ\nX\xb2\xd4\xf4`\xc9]\xd3\xc3\xa9Q\xf4\xd3tu8MN\x9c\x1e&\xcf\x94\xd3\x03>\x7fN\x0f\xb6\xac:=\xf4`\x07\xec\x91XA\x8f!\xf0\xea\xb8\x0e\xa6\x1c>=\x0cB\xcb\xad\xad\x9b\xe0\xcc\x02\xd4\xc3 \xa5\x9d\xdf1\x0d\xfa\x12\x10|\xac\xe4&\xf4:y+\xe8EI\xe8MM\xf0?\x91+\xf0;\xf5\xb4\xa1\xcf\xbeQ\xe0\xcf\x020\x84\x0d\xa0?+\xf4<\xc1+\xf0:\xc9+\xc0\xe4^\xea\xa1\x17\x85zQ\xc6'{S\x0f\xd6\x9cN=\x9cjz\x88LK=\x9c\n\xc1\xb1\xf2J\xf5\x80\xcd6\xd5\xc3\xa9h\xe0\xceW\xd5\xc3\xa9\xf0\xb3e\xbc\xea\xe1T\x98\xa1rf\xf5p*\x14\x9dY\xb7z8\x15z\xd8\xbc]=`\xb2y\xf5p\x9a\xf9M\x91\x0f\xac\x07\xa1\xe4p\xf3\xf7\xb6\xab\xfc\xed\xa9_\xecy\x03\x19\x9aS\xd0\xcf\xb0\xf3qk+\x98\x0f\x1a\x02\xbc\xf7\x98\x80\xf9\xa0\x81\x80>\x1bF\x81?\x0b\xc0\x106\x80\xfe\xac\xf0s\x1c4\xaa\xa2\x15x\x1a \xda\xd8\nCw\xc1Q*\xba\x0b=Y\xbb/c+)\xb6\xdcDd\xeb\xd7t\x10\xb3`\xf3\x8c\x9a\xf0\x15|\xf3\xfe\xe3\xab?/\xaf^/\xdf\xbe\xbf|\x87\xce\xbdiC\xbb\x9f\xcbon\xde|\xc0$\x105\xa1\xdd\x0d:\x0f\xa9 \xedn>\\\xb9\xd3\x91\x9aP&'\x8dA\x9e\xc6~Z\xbf\x8d\xc8\xb6VkZ\x94\x87\xf9&\n\x92\xfb\xab\xd7\xc2$R; B\x11\xfft\xf5_\x87\x1e\x91\xf3&\x0c`\xc1\x01\xd2\n\x15\x9d\xec\xc2\x08\xc8\xfa\xfaD\x05x\x84\xe2\x9b0\x02\xc6\x9e\xe4mX\xe0\xaf\xb8\x91|\x13nE\xf6\x1b\xb3\x19\x94\xfb\x9f\x87\xeb\xeb\xb7\xa9\x88\xfc\x1ac|k\x87i^\xde*\x83\xbb\xfcn\x98\nx<\x92LZ\xee\xb9\xb8\xd1F\xd4-\xaf\xcai\xe0B\xa0\xe2\xf9\x8c\",n/\x85\xe0\xa7\x06*\x9c1_\xfb+@/\xe5\xe75O\x01~\xb3\x15\xd0C\xce\xf4\xdc\x04\xbd6\xc0\xa1X\xe9\x8aE\xd9\xa0\x07\xe1\xa0'\xf1\x18\xd0\xf5\xd7\xff\xf6o\xcf\xff_\xbfF\xbd\x89\x08} \xbc8Pp\xf8\xfa\xdf\xfe\xfd\xfe\xf9/\x1fYe\x01\x17\xab(\x0c\xfeL\x8f\x0d\xaf\xc3==\xd6\xeb[m\x92\x14\x8a\x8c\x8a\xf2o5\x17\xc4\xf7\xe5vF\x0f\x8c\xcf0jBO\x02\xf5;\xcf\x94N\xa3C\x1a&i\x98\xf7\xd8\x1d\x93c\xaap\xc4\xa1\xe6\xbde\xfd7\xab\xb7\x9c\xebE\xa8\x1e\xdc\xee-\xe1\xbc\x89\x05\xbd\x08\x06}e[/\xc2A?\xe2A\x7f\xa9vZ4\x7f\x16y\xd6O\x9a\xf5\"\x8c\xaf|\x80ar\xec$8\xfa&\x9d*\xf0F\x0e\x8b\x18\xb3\xb4\x93x\x89\xf1M\xa3q\xc0\x8e\xbd:\xfe\x8d\xc4y\x18\xd3%\xd6J\xc6Z\xc7(\xab\xd8C\xe8\xf9\x88:\x0f\xad\x80\xa6\xa8\x00/)\xe1\xa1\x03<\x08\x01\x9e\xc4\x00\x7f\x89\xefI\x14\xf0%\x0c\xf4\x91\xef\xd3#ubi\xee+\x82< \x80\x15\x01\x02zI\xed\x890\xf2\x95\xd0h4\xd0\x08\xe0\\_\xde\xe3\xba\xddZ\x0d\x87\xcd{\xa6\x10^\xf1d\xf9K\x9e+\xefJ\xce\xef8i\x80\xe49\xdd\x1fxb~\x9e\xc0>\xcc\"J\xd6\xfc\x15\xc6\xed.\x97\x0f\x955=9\xb5\xdc\xa4\xf6\xec-B\xca&\x90&*\xb3h\x0c\x99\x8a^Q\xd5[5a\xd0\xb9\xbe\"b&\x00\x88P\xa1k\x1d\x14\xe0v\xa5+\xd0\x87 `\x88\x88\x0e\xd39\x02r\xf6\xd0\x9b\xdd\x8a\x9a\xb6&\x152\x18\x86\"\xa8+\xc0\xe5\x1f\xca\xf2\x0eZy\x87\xa7|\x02Q=CN\xd3\x04\x97<\xc2H\xa8\xc5C\xed\x05\xa7&\xf4\x1a\xca\xa5\x01\x11!\x1c\xaf\xf1\x8cS\x1b=\x00s\x82PKc\x08S\x91wL\x0d\xfev[\xf3\x13Q\xc6\x02\xf3\xef\x19+\x8b^\xe6\xf2\xf2zi;\x97\x97\xe7`\\\xbc1i=\x97\x97\x1fc\x00\xcc\x05\xbb\xd3\\\xa5\x9b\xfc\xd2\x1c\xfez\xdc\\^^\xc1\xc0\xfd1\x1f\x7f\xb4\xf0\xbf\xf3\xf8\x83\xb9\xe2\x84\xe4X\x03\xae>\x17\x94\xe6\xf2\xf2\xb8\x0b?Cpu_\xd7\x19\xd2\xfb\\^\xde\xca\x1fsyy\x8b\x1d>\x97\x97\x9f\xcb\xcb\xaba\xfa\xb1\xd0\\^\xbe\x0bsyy|U\xcc\xb9\x1a(\xb6b\xcb\\\x0d\xb4\x05^\x9c\x8c;K\x08@^9\xc4\x1ec\x04\xd8ckM\xc0_-D\x8b\x11\xf0\x12%\x808WU\xe0\xb5\x10\xe06\x03\xda\x80<\xbe6\xc1\x8b2\xe0M\x1d\x06\xce\x83n\x13\xfc\xf8E\x81\x0f\xe3*\xc0/\x1d\xf4Y>\xf0_B\xf4\xe1Y\xdb\x08w\xb5\x0f\x11\x91)?\xf5\x99\xb2\xdb?\xd4\x04\x8f`\x94\x82^\xf8 H?W\x03\xad\xc0O\xe3\xfe\xa2\xaa\x81\xce\xe5\xe5\xf1\x86\xd5lPb\xd8\x1bf\x83\xb2\x0b^\x9c\xec\xa3\x97g\x83\x12\xbc\xac\x12\xaf\x85\x00\x1f% `6(\x91\x8c\xab\x00\xbft\xd0g\xf9\xc0\x7f g\x83\xd2\n\xbd\xf0A\x90~6(+\xf0\xd3\xb8\xbf(\x83\xf2g\xcf#\x9f\xcb\xcb\xcf\xe5\xe5\xcd\x1f#G\x06\xf4\xe80\x97\x977\xc3\\^\xbe\x01\xe8]\xdf\x06%\x05\xd9\x9bz\x98\xcb\xcbK\xe8\x81\xe0Xy\xa5z\xc0f\x9b\xea\xe1T4p\xe7\xab\xea\xe1T\xf8\xcd\xe5\xe5\x15\xf4@\xd1\x99u\xab\x87S\xa1\x87\xcd\xdb\xd5\x03&\x9bW\x0f\xa7\x99\xdf\x14\xf9\xc0z\x98\xcb\xcb\xbb\xbe\x16\x80\x0c\xcd)\xe8g\xd8\xf9\xb8\xb5\x15\xcc\x07\x0d\x01\xde{L\xc0|\xd0@@\x9f\x0d\xa3\xc0\x9f\x05`\x08\x1b@\x7fV\xf89\x0e\x1asyy\x01\xc8\x8a\x1az\x18\xc0,\xd8<\xa3&\xf8\xd7\xe4\xd0\x83w\xa5\x0e=x\xd7\xef\xd0\x83OU\x0f=\xf4\xac\xf5\xa1\x87i*\x80\xe8\xa1G\xe4\xbc \x03Xp\x80\xb4BE'\xbb0\x02\xb2\xbe>Q\x01\x1e\xa1\xf8&\x8c\x80\xb1'yG\xafn\xa2\x87\x13\xd4<1\xc1\\^^\x0b^\xf3\x14\xe07[\x01=\xe4L\xcfM\xd0k\x03x\x14\xdeT\xd0\x83p\xd0\x93x\xe0_\x90SAO\"B_BB\x9fB\x9d\nN\x8f\xec\x89\x0bx*\xc0g\x185\xa1'\x81\xfa\x9dg\x0e}\n|*8\x11\xa6\x87\xb9\xbc<\xb2\x91\xb7\x84\xf3&\x16\xf4\"\x18\xf4\x95m\xbd\x08\x07\xfd\x88\x07\xfd\xa5\xdai\xd1\xfcY\xe4Y?i\xd6\x8b0\xbe\xf2\x01\x86\xc9\xb1\x93\xe0\xe8\x9bt\xaa\xc0\x1b9,bsyy\x8c\xd0\xf3\x11u\x1eZ\x01MQ\x01^R\xc2C\x07x\x10\x02<\x89\x01\xfe\x12\xdf\x93(\xe0K\x18\xe8#\xdf\xa7G\xea\xc4\xd2\xdcW\x04y\x12\x00+\x02\x04\xf4\x92\xda\x13a\xe4+\xa1\xd1h\xa0\x11\xc0\xb9\xbe\xbc\xc7u\xbb\xb5\xe6\xf2\xf25\xb0/\xd7\\^\xbe\x0d\xc8`#B\xd7\xb8f\x02\x80\x08\x15\xba\xd6A\x01nW\xba\x02}\x08\x02\x02\x86\x88\xe80\xdd\\^\x1e\x11\xe0\xf2\x0fey\x07\xad\xbc\xc3S>\x81\xa8\x9e!\xa7i\x82K\x1ea$\xd4\xe2\xa1\xf6\x82S\x13z\x0d\xe5\xd2\x80\x88\x10\x8e\xd7x\xc6\xa9\x8d\x1e\x809A\xa8\xa5]^^S\xe2\x1dY\\\xbe\xd6\xb2wi\xf9\xd2\xd2\xbd\xa1\xf9\xa0\n\xf3]\xfb\xc0\xb0\xc4zE\xa1?\xb8\xea\x05\xacF\xb0\x1a\x05\xaaY\x90\x1aw\x9f\x855\x8dgA\xab@\xb7\x0bs\xd6tY\xa4\x06%\xec\xdc'\xb8\xebT\x97\xf0\xf9\xd3\xfbg)\xcd\x92\"\x0d(\xc4d/9\xb8\x88\xc3\x9f\n\x1a\x1d\x81\xb1u\x1enByP\xcae\xf1\x0eQ\x1b2\x0dI\x14\xfe\x8d\xaeMW\x97\x0ei\x92'A\x12\xc1\xaa\xd8lh\xaaj},D\xddJ\x81=\xec\x8b\xac\xdcL@r\x88(\xc9rS\x8fIL\xe1\xec\xd9\x19\x04;\x92\x92 \xa7)\xeb\x8br\xbb\x162\xba\xdd\xd3\xb8\xdc\xdc\x9f?\xbd\x7f\x92\xc1\x81\xe4;1Dy/\xda\xd47k\xb4)\xa2\xe8\x08?\x15$bs^\x0b\x8a\xc8\x0e\xf9\xdc\xcfI\x06al\xea\xe2\x8e\x0d\xf7l\x9b$\xdb\x88.\xf8\xecW\xc5f\xf1\xbaH\xf9\x1d\xaf\xbb\xa7\x02[\xdei\xb6K\x8ah\x0d+*\xe4N@\xe2$\x0e\x03\x12\xf1\x8d`\xea\xff\x9c.\xb6\x8b\x0bF\"~\xe7\xeclq\xc6d\x02\xaf/\x1a\x04\xf4\x90\xd3\xf5Ss\xdd\x94\xab\x18\x0e\x8cha@/ \xa7d\x9fA\x91\x15\x84MX\xdc\x0e?\x84\x11\xc3&O\xc4\x8d\xb80&\xe9Q\x14.=\x1e\xa8\xac0\x9a\xef\xe8\xd14\x00\xfdr\xa0A\x0ea\xce\x8e#\xec\xfc\\\xd5t\xc9\xe9\x17\xbe0\x97\xf1q\x01\xdf&\x8f\xf4\x81\xa6\x17\\t}\xfe\xf4^iM\xd6$\xdfQS\xf7Y\xb0\xa3{\nw\xbb{\x9c\xc8_/8\x87\x04$\x86\x84\xf3>\x9f\x1d\x93\xb9\xc5A\x96\x9e1\xf6N\xd3\x07\x9a\x8aI\xee\xc9!\x13\xcb\xcd\xb1c\x87+Y\xa5\x86;\x0dBQ\x07\x950u\x1eE\xc9c\xf6\xc2H\xf3\xdf\xc2\xd5\xa6\xc2\x8e-\xd6!M\x98\xaeX\x97\x13\xe0j)\xcb\x8a=]\x1b\xaa\xbc\xb2n.c\xf8\xf6\xf6\xf6\x1a\xde\xbd\xb9U\xe5a?\x7fz/8\xfb\x18\xd2\x88\x9d\xfb~h3\xde\xed\xf1@\x7f\xfc\xe1G\xf3\xcd\xc2\x07\x12\x15|\x99\xe4b\x0b!\xccIzH\x93u\x11P 1\xd04M\x8c \xc1\xbf\x85\xcb\xea\x16c\xc6K\xdb\x12F\x14\xbaft\x0bH\xc0\xb6g\x92\xdc\x17\x07\x90I\xeb\xc0\xb4\xcfZ\xce\xc2\x8c\xdb\xe7O\xef9\";\xf2\xc0\xd9b_\xe3\xd2\xb5`S\xa2\xf0f\xff~H\xc25\x90\xd8\xec\xb8\x14X\xf0-\x98\xd2M\x92\xd2\x0b\xd5\x9c\xf5J\xf2p\x15Fa~\x84\x98\xd25_\xf4\x15\xbf}\xc1\x19cm\xec5\x89\x990\x8a\xb7\x947\xe1;e\x01\xe7\x9f3\xaa\xee<3B0Vb\xbb^\xf0\x12\x89\xc9\xd6\xec%X\xa5\x94\xdc\xb3\xdd-\xbb]<5\xd1\xe8C\x92\xd3\x17\x903Y\xba)\xe2@\xf0;\x9b\x81\x94 A\x91\xa64\xce\xa3c\xcd\xb5%\xb7d\xb2\xd9\x84AH\"\xab\xe4^\x15\x1bH)\x93\xc7\xf4\x82_`\x0ds\xd5u\xc1V\x90[\x1e\xe5.Y\xd1m\x18\xc7\x0c\xf1\xc70\xdf\x19\x85\xec\xf1@\x17\x82O\xc9!\xcc\x16A\xb27K\xac\x1b\xbek2H\xf2\x9d\xd8\x9aq{\xf7\xc3\xb9\xb4~\xe8\xfe\x90\x1f\xe56{\n{\xee\x01Y\x19\xb9\x8b\xa3\xcf\xbd{\xe1\xfe\x10Q\xa668\xffBv\xa0A\xb8 \x03\xc8\xe8\x9e\xc4y\x18hSa\xf8\xb6\xe9\xa9\x98\xfd\x8c\xd7\xef\xd8\xfe^QU\x9b\xa1\xa6s;\xcaU\xdd)^%\x0fT\xcdC\xf2^w\x0en\xf3\xe0\xee2>\xdeUF.\x89\x81\xa4\xab0O\xd9~\xb1`\xa1\x04%\x89\x12\xc9 @t\xab\xc0\x84\x17\x97\xb5\x02\x93\x95\xd5\xbe(\x0d\x07-\xa7\\+^\x8d\xc2\x15GO\x8a\xd8\x0c\xb2\xe2pHR\xae\x8e\x0e$\xb8\x7fV\xc4\xec?L \x89%\xcc\xd4v0\xe9\xdcd\x03E.\xa4\x82\xdaa\x19\x93Id\xbd\x0e\xc5v\x83-\x8diJr\x8e$\xb3\xb3\xcb\xcb\xddl\x14A|]\xcfo\xbe\x10\xc6y\xf0\xfc\x05\\3\x9c\xd8\xf6\x92\xe8\x91zM\xb4W\xbf\xfb\x9dy\x7f\xbcM\x12\xd8$ \xbc\x84\xc5b\xf1\x1f\x86\x8f\x18\x1e$>\x9a~&\xf1q\xc10x\x9b&\xfb\xf3M\x92<5}\xb8X\x98T@\xb8\x81s\xd6\xcdg\x8e\xffmr\xfe\x1b\xd6\xcfS\xf8\xbbQ\xc6\x99\xfb\xfa\x87\x8dX_;\x88\xf5'\xf2@\xc6\xa1\x16\xbc\xe4\xa6\n\x1bb Q\xc2\xec\xfcm\x92,\x82\x88d\x99\x95&\x025\xd6DL\xad\xd6\xcc4\xba\x96X%\xb5\xfe\xe0\xa0\xd6\xf51\xdf%\xb1\xd1\xe6\x10\xf8\xbcM\x92\xf3\xc5b\xf1\xd4\xcc=\x82T\xe7\x96/8\x7fq2\xf6\xa1\"\xeb\xe0J\x10\xf1\xf5\x9b\x9bW\x9f\xae\xaeo?~zjv!T\x9ch\x1bR\x0cj#\xdf\x1f\x1d\xe4{\x97\x18m\x17F\xba\x17/\xe17\x87\xd5\xe2m\x92\xfc}\xb1X\xfc\xc3\xf4)\x89\x8f\x17\xcc\xc0b\xdf\x1f\x84\xf5\xf0\x1dI\xb3\x1d\x89\x18Qm\x130\x13\xad=\xbeq\xf0p\xd3\x1a\xfas\xbc\xaf\x06\xe7\xa8q\xe6\xe7_\xfd\xebK\x88\xc3\xc8\xc2\xc06\x8c\xb4\x9c\xca\xceB\x9c\xaeJr*\xdb\x18V\xc7\xca\x02QR]\xbc\xc5pT^;\xa6\xc3u\x9d>\xd1X\x18\xcf\xd8\xb1n\xc1\x7f`V\xd8\x13f\xba\x97\xda\x86i\"U\x9dC\xac\xb3\xae\xdbR\xb8\xc7\xd1Q\x1dT:\xa7\xc5\xd2\xce\x03\xb2\xc9\xa90L\xf8\xd1\xf4\xc9\xb3'\xbaN\xa5\xf6Qh\x88\x03\x11\x95\xfcw\xb6I\x92\xc5\x8a\xa4|\x02_\x9e\x1d\x17\x7f;\x134\x10\xe6\xbe\xe9,\xc3\x87?c_3I\xa8\xf9\xe0O7\x1f?\xe8\xfe\xfe\xf2\xe5\xcb\x97\xa6Ubm\xaa\x03\xb40\x95\x12\xb65\xa5\x99 \xce\x11EF\x95\x83j[DD[F\xac\xdb k\xb0\xa6\x95\xb2\xbf\x00\xba_\xd1\xf5\xbaR\xfb\x17\xd2\x8e\xd0\x1e\xbbk\xaax\xc3 s\xf7\xdf\x8c4w\xf2L\xd9\xf0\xd2)B/\xd4&7\x1f\xdc\x18\x1f\xb0\x8d^\x1d\xa96aDM\x82X\x89\x85k\x9afIl\xd9#\xd2\xe7\xc1\xdf\xf4X\xf2\xa5z \xcfM\xbd\x96\x9f\xf3\xb0\x9d\xfc\xfak?e\x00`\xc1\xe6\x8c\x93\xea\xec\x05\x9c\xe96Ms\xea\x0b1\xb7\xb3\x0bso|V\x1f\xc8\x9e\xf5\xf8\x9f\x02\xf5\xff\xb2|\xcef\xd5\xfa\xdagjW\x1bi\xf87\x99E,r\x98\xc1#\x8d\xa2\xaf\xee\xe3\xe41\xe6\xdb{G2 \x10\x14Y\x9e\xec\x8d{\xa0\xc9\x9d\x17\xc2Bm\xb1\xacz\x13\xa6\x1c\x98q /(\xc4\xf9O\xd7\xed\x1d\xdf\x1f\x8a%wI\xb4\x96%\x8a*l\xb8\x17H\xb22H\x0f\x8c\xe4d]\x8f|\xa8\x92\x8d\xe1\x9c \x0eE\x80\x8e\x1b@\xf9\x9f~\xfc\xe1\xc7\xa7f\x8e\x1f\xce&\xcd\xd1l\x9c\xc2\xe9\xc1:|\xbe\xf8\xfa\xf9\xd7\xd9\x99q\xdd\x9b\xffo\xcf\x1a\xb0\x1e\xbdlqHDzD\xcf\xbe\x1b\xc7\xac\xd2\xa7\xae\xfc\xf8y\xdd}_z\xba\xbf\xcah-\xfep \xdb0\xe6\xf4\xac#\xd5\xe8\xb7\xfa\xa4\xcci!q\xfd\xafj\x08\x157\xa8k\xe9\\\xef\xa16\xf9\xa6yq \x8d\xab\xdbB\x1f\xcb\x81WF\xd2\xfeo\xf7\xfc\xa9\xc6Q\xa4b\xff\x94\x1e\x19\x92e\xc2\xb7tM\xb6\xf4\x13\xfd\xa9\xa0Y\xbe\x10\xbfw\xba\xf9\xa9\xa0\xe9\x91w\xc0:d4\xa1\xb0O\xb2\x1c(\xf7\x7fp\xe7H\xa3\x916\xee\x8d\x98\x9c\xb6\xd8\x99\x9c\x9e\xe6x\xcd\x87\xe1s\xe3\xff\x88\x8b\xfdJ\x9c\xe0\x95\x8b\xac\xe6\xb0\xd94&\x1a$E\x9c/y\xb3\xeeF~$\x19d4\xbf\x800\xcf\x94o/\x83\"\x16l\xb1\x16~\x94\xc70S\xeb\xa0\x8f9\xe9b?\xc8\xd0S\xbd\xe9\x80\xe7\x8d?$kz\x15o\x92\x9e\x91'i!.\xe3dM\x97a\xbcI\xba\xb1#4\xc3+\xff\xc6\xd2P\xc1\xd0\xd0\x9d\xadK\xfe\xdb\xd7\xda\xa0\xab\xc3{d\xe56K!\xc2a\xdd\x1aJ\x07\xf6\xef\xb4\xb9>\x9dd\x1cc\xc7Q\x98\xe54\xe6\xf1qt\x9b\x98\xe6\x8fI\xda\xa1\x8a\xf1{\xeb2k\xbe\x0fv$\x8ei\xd4Yb\x84\xcc\xe8\x08\xc4}\x12\x87\xf7\xa6G\x995]\xf1\xed<\x12C\xe6_\xcc\xd5\x96\xad+\x9d\x1e\x02\xefw\x0dku\x0fu\xfb\xcas\x8b2\xc3\x18M3r8,\xbd\x1a\xf82\xc46\xb4g\xd8i\x9a\xac\x8a0Z/s\xb2\xc5s\xd16\xb1\x0b$\xe3(kz0\x8c\xa2\xcbW2\xe4*Yx\xcc\x15\xd6>\x90\xdc\x90\xe9\xe5\x90'\xa5:\xdd'\xeb\"\xa2\xbc#\xcdg\xd6B\xb3\x9eC\xc8\xbe4_f\xa6\xc4(\xec\x08\xc1\x8e\x06\xf7Y\xb1\xef\x92V\xfc\xfe\x9d\xc0\xa0m(~/0\xbajW+\x12*u\x99\xad\xef\xbd\xd9\xa2\x1c\xf2\xec&\x8c\x03^\x14\x89\xf5\xf5U\xb6\xbe\x87\xdf/\xfe\xf8\x87\xbam\xde4g+\\\xb4\x06\xadF\x8fW~|M\x7f\xba\xefK\xab\x83\x1b?\x06\xa3C\xb5\xeaah\xdc\x1c\xe3 \x8c\xb7=\xed\x8cL\xb4\xee\x8a\xaeU\x92D\x94\xc4\x86Y\xb6\x06E\x9aV\xb2U\x8fI\xea\x8c\xb2\x9e3\x9esz\x06 \xbf|\xce\xe9\xd1\xc0\x9c\xd33\xe7\xf4\xcc9=sN\xcf\x9c\xd33\xe7\xf4\xcc9=sN\x0f\xcc9=\xc8,\x959\xa7\xc7\x87ZsN\xcf\x9c\xd33\xe7\xf4\xcc9=%\xcc9=sN\xcf\x9c\xd33\xe7\xf4\xcc9=sNO\xfb\xc79\xa7\xc7F\x9f9\xa7\xe7W\x93\xd3c\x8b\xfe COcd\xf5\x88\x80\xa6g\xb8\xa9\x1d,6,\x9a%0l\xcc.pt\xd2\x0e\xfd\xb6\x02\xbe\xf6>Z\xc1]\xbf\x90\xae\x83\x8e\xe5Zx\x92R\x13\x02\xd3NB\x13\xf6\xf2\x14'\xb9!\xc8e\xd9q.\xcf\xd5d!\xad1\x83Y\xd3\x84\xb1tG\x12t\x00k\xba\xd0U\xcf\xa0\xd5\x84\xe1\xaa\xc9\x02US\x85\xa8\xc6\x0eN\x0d\x0eK\x8d\x1f\x90\x1a\x14\x8a\x9a \x085b\xf8i\xec\xc0\xd3\x88!'L\xb0i\x920\xd3\x04\x01&\xcd\xe1D'W&\x08*\xf5\x0e'i\x03I\x08sScKO\x1c6\xb2\xa9\xdd\xc9BE\xa3\x04\x89& \x0fM\x11\x18\x1a\x18\x12r\x847\x8ca D\x00H\xe7\xd8\xf5 \xfa\xe8\xda\xffC?\xf9\xbe!\x1e\xdc\xec\xdda\x1d\xdbT\x11\xa1\x1c\xaf N\xdb\xad58p\xe3\x08\xd9\xd8\x825\xf60\x8d\x81*\xf8\xd0\x8c;(\xd3\x0d\xc7\x0c\n\xc4\xa0B0}\x82/\xda \x87;\xe02Z\xa8E;~\x8b\x93F\x0e\xac\x8c\x1eR\x199\x982n\x18\xc5\x12@\xe9\xba\x8d\xbbA\x93\xb1\xc2%#\x06JF\x0f\x91`\x83#\x88\xb0\x08: \x82\x0b\x85h\"\x05\xbaQ\xb1\x1emW\xe0\x03\x1d\xf2@\x05;Z\xc8\x8f\x1b\xe0\x18=\xb41fPc\xd4p\xc6\x90\x05G\x840\xdc\xc1\x8bJ\xfc\x9b\x02\x16\x06\x13_\x1fH\xb0\x86'\xe4\x81\xef`\x82G7j\xa49|}X\xbc\x16\x06\xae\"\xa7'ul\xb7\xbb\x0d\xbb\xd1xQ\xbc{\xa3\xdb\xc2\xd9\x96\x18\xa3\xf6\x16w\xbf\xae47\xb7\xfd;\xb2\xdc\xd6\xd6vf\xb8\xa5\xad\xfdVs;{\x90\x06\xd0\xdd\xc6\xc6s\xab\xf6\x06\xb6\xb6y\xe7\xe6\xb5'\xb3\x98n[\x1bW\xc7r\xcb\xba\xd3\xc6\xbeC>\xd6QGn\x13\x1d\xbaZT\x0dh\xbaP\xbc\x96\xdb\xf0\xfb\xe62#\xb1k\xed<\xc7z\xb7\xb8\xbb\xb3\xdb\xfc\x9a\xb7v\x18\xbeq\x8d\x029\xf7\x1d|SG\x049\xf3\xeeS \x9e|h\xba,,\xc4\xf6\x8ada K\xd9\x87\xed+\xc7\x16s\xc5~\x0d\xf2\xd7R\xa5\xc2\x1d\x96~\xc5\x14w\x9c\x15\x19\x04\xe4\xc0_\x03Q\x11G\xf9\xe7\xb4\x88(\x7f\xf3\x81\x11$\xa0Y&\x0e^\x8a\xa2\"\xc6\xc9\xfe'\xd8\x910\xbe\xe8\x1e{\xc4\xdb\x04\xbc\x15;\xc5\x95\x9f\xc2\x9a\xe4\x84\xcd\xaa\x08\xc4\xb8\xca3#FT\xfe\xff*~\xf6$\xebv\x9e\xe5$\xa7\x90\xa7$\xce\xc4inO\x82]\x18\xb7n\x96\xf0\xf1|\xaat\xe8_\x04B\xe8\x9d\xee\x12\xe4\xa1G\xa1\x86\xaa#\xfd;\x14\xdc\xcb`z\x00\xa8'/\x9b\xde\xadAr\x9d\xf6\xbe\x10\xe2\xa1\x1f\x0b\xb6\xe0\xc0\x987\xb7=\xee#\xfa\xb6?\xeccK\xbc\x130\xedkH\x88G|,\x0f\xf8\xd4\x1e\xc1Z\xea\xf0Dp\x989\xef\x8du(v\xa0\xd8\xe5l\xa36\xbed\x7f\x18m\xd8\xea*\xfdh]\xb6g\xb2I\x93\xbd\x92&\x90\x14\xf9\xa1\xc8\xab\xbf\x1dR\xfa &\xda\xe8\x83g\xfaM\x80[)YG\xeb\x91\x1c\x0e\xa3\xf5\xc5\xf9J\xa6\"\x8c\xd6\xa9zXf\xb4\x0e\xab3u\xa9\xa6:\xba\xbd\xf4NaM\xce\n\x0c\xe36T\xa9\xd8\xb0\x8d\xb3`\xa9\xca\xb8O\xbd~\xfc\x13\xdbH\xc8\xc2J3\xb1]4\xc0\xee\xc9\xbf\x18\xe6\xe4]\x04\xc7 \xc6\xb0A}\x8dUq\xfbE\xe69)\xcf-W\xe3\"\xce#T\xf6\x7f\x0b\xa2,D&\xe6\xef\x9ek\xa2\x86\x1f>\xde\xbey!\xf2\xb1\xa2\x88M\x17v4\xa5<\x89\x86\xef\xcb\x05\xc0_\xe8\x93\x94\xc2_\x8b,\x07\xb2M)eV\x86L\xfaIR\xb6>\xdc\x0f\xae\xe9\x9b\xe7\xc6\xed)\x89%\x9e\x02\x99\xcb\xc3\xe1[\x92\xed`\x9dP\x91\xed!\xdfUb\x1df\x94\xa1\xd0HQ\x16<\xf8\x9a\x991\x8dX\x85|\x1f\x89[%D\xc6\xe0\xeb/4\x95&S\xd9\x99\xda!\x03\xd8A\xd7\x05\xf4\xe7\x89^\xb5A\xd6\x850\xd6\xe8\xf2!\xc9\xe9\xd2\x84\x92\x00\x87\x01\xe0\x1a\x0b\x84\x1b\x9b.\x89\xe9W\xc4\x10\x80\x1a\x06TW\x96\xdfQ&\x81\x00\xd7\x93t\xc0\x9f\x80\xbb\xb9z\xf7\xe1\xcd\xeb\xe5w7\xef\x96\xb7\xffs\xfd\xc6\xf9\xa2\x9b\xa9\xdd\xf5\xa77\xdf\x7f\xbc}\xd3\xa7\x9d\xf3\xa1:S\xcb\x8f\xd7\x1fo.\xcdo\xd6\x01\xd4\xde\xad\xeb3O\x97\xf8i\xc2M\xb8\x8d\xe9\xfa\xbbl{+\x03T\"\x9b\x91m\xd1\x8c\xffT\x0f\xda7\x0e?\xe6;\xbb%\x18 \xfe\x82\xbf\xcc\xe6|d\xd7L\xbe\x17p\xcdU\x18\x89l\x9d\xfc,\x8fr\x1b_6\xad\x00c\x82\x0b\xa8\x0d\xaay\xed\xb4\x02\xdb\xbb\xa7\x15\xa0\xb6<\xa0\xb7= \x1e\xf6\x14\x80&2\xb8\xcf\x06u@\x1c\xa5\x9a\x80\xa6\x00xQ\x81\x81\xf3E\xd5\n\xf0\xeb\xaf\x00\xcb|\np\xcb\x02\xbeK\x03~\xcb\x83:\xc8i\x1b\x98\xdee\xad\x7f\xe8|\xdb\x12|\xa6g\xf7-4\xc1\xe3)O\xe8\x83\x83\x83\xb4\xd5\xf0\xc6\x8a\x9e\x15\xe0y\x0d+k\x10\xaf|\xc2\xe8\xb3\xc6k5\xfe\xe6g\x99#\xc1_\x04M)3\x86.d2\xf8>\x14\x19\xea\xe2\x9f\xdcN\x12\x07\xde\xda\xcb\xdb\x9bD{\x11ZAM \xea?\xe0\xc6\xd7j6\xbel\xedf\xe3k6\xbe\xb0\x9c\x89\xd5\x7f\xb3\xf1\xd5\x054\x91\x01+\x8c\x05\xcc\xc6\x97\x01p\xcb\x02\xbeK\x03~\xcb3\x1b_\x1c\xbcq\x98\x8d\xaf\x0e\xe0\xb5\xda/\xc2\xf8\xe2\xc2`i\xaf;Q~\x8b!\x14F\x00T|q\xaa\x11\x11\x9b\xd0k,\xfb\xe6k\xf0\xc0k\xe5\xcbd\xeb\xfdF=\x8d_\xfay\xcb\xc7\xf2\xb9\xaf\xbf\xa4\x8c2j\xf2\xc7\x84}\xbb\x89\xc2\x80-\x11g\x02\xedbF\xcc\x82X\x06QH\xe3|I\xf2\x9c\x04\xf7\xd3\xfbMk\x98-\x8d\xa9\x0c\x02\x9c\xa3\x01jD\x90\xfb\x9a\xaeQ\xaa\x145*\xa0G\x06m\x9e\x89\x1e\xd0C\x83\xd7\xf0\xe0\xaa\xeb\xdf\x06\\\xfe\x8a\x1e\xbc\xe6\x00\xde\xf3\x00[\x06\x8c\x1eP\xbb\xb4\x0dj\xd7\x1a\xb2e\xf4`\xc8\xa1\xd1\xc3\xa9\xd0\xc2k\x97:L\x9f\x9b\xa3\x87I3v\xf4\x80\xcb\xe3\xd1\x83)\xbbG\x0f\x9eK\x8e9\xe2)\xf0\xec\x1a\xa7\x02\xeb\xa0\xcb%\xd2CoT0\xe6\xa9\x02k6\x92\x1eN \x99\xf0G\x13\xe8C(\xc0Z\x94M\xf0>I*\xf0\xa6\x18\xf4\xa2\x1a\xf8\x9d0\x15\xe0\xad\xff6\xf8\xf2\xbe\x02\xbf\xe5\x85\xbeK\x0c\xfd\x96\xb9\xc7\x89T\x01\xfad\xaa\xc0\x95\x03\xa6\x07ojxS\x01\x9bE\xa6\x07cn\x99\x1e\xa6\x9e\x8e#\x03L\x0fS#5F~\x9b\x1e0Yoz\x98z\xce\xf6\xbc9=L\x8d\x93)\xf3N\x0fSc\xe3\xcc\xdd\xd3\xc3\xd4hY\xb3\xff\xf405J\x98\xfcA=\xb8\xb2\n\xf50\xed|\xc6\xceK\xd4\x83\xfe=\xc0.x\xd9+~v\xca/\xca\x16G\x84a\x14\xf8\x1bIXW\xa9\x82\xd9\x08G\xc1l\x84\xb7\xc0\x97\xe9\x15\xf8-/\xf4]b\xe8\xb7\xcc\xa74\xc2\xcb`\x05r\x91\x05\x1dt\xe9\xb8z0$\xe9\xea\xa1\x07\x9b\xf6aR%m\x96\x9b\x88l\xf1\xcdz3\x01&g\xa3 _\xc17\xef?\xbe\xfa\xf3\xf2\xea\xf5\xf2\xed\xfb\xcbw\xa8\xbc\x866\xb4\xfb\xb8\xfc\xe6\xe6\xcd\x07WBF\x13\xda]\xa0r:\x9a\xd0\xee\xe2\xc3\x95=\xb5\xa3 e\xa2\xc7Pr4\xf6\xc5\xfamD\xb6\x10\xc6k\x1e\x1fQ\xc5G\xbf\x89\x82\xe4\xfe\xea\xb509\xd4\xae\x80P\xc4\xba\\\xfd+\xf0\x8c|6\xa1'{\xf5\x940\xce\xc8T\x17\x06\"\xe8\xe3\x9b\x13\x80\x0c\xa56a \x96\x1edlX\xae\xaf\xb8\x81y\x13nE\x96\x10\xd3\xd5\xca\xa5\xccC\xae\xf5\x1b\x14D~\xed2Z\xb5C4/k\x94\x81<~\x0fD9\xcf\x1fI&-\xde\\\xdcZ!\xeaVGu8\xb6\x0d^\xf1qFQ B\x08\xa1\x8d\x17\xd5\xfa\xd7i\xf5\xe0\xa3\x90\xd0\xca\x08='\x01\xf8\x99 \xf0\x94\x0d=\x18\xda\x9b\x99\x8dO\xed\xea\xc1\x93@\xd0\x83H\xa0\xaf\x9c\xe2\x82\x1e\xc4\x82>\x04\x03Se\x16\x17\x9c\x0e\xc1 *\xbf\xb8\x00\x97\xd1\xd1\x84\x1e\x04\xf1\xb7\xfb\x0f\xee\xb7H\xf401v\n/7:^[\xceo\xb3y\xc9#o\x82xr\xae\x97$\xf2\"\nx\x13\x06\xfa\xc8 o\x02\x81?\x91\xa0\x9f\xf49\x0dj'\x97;\xfeR\xc7\x9b\x10>{\x1a\xfa\xcb\x9bI\xf1\xf2I\xba+\xdb\xf8 \x84A\x86Y\xa5I\xbct\xf9BQ\xe3b\xc6[\x1d\xffF\xe2<\x8c\xe9\x12cUb\xacI\xa7\x15\x89\x14JXQ\x84\x94\xce(\x8a @\xefh\xa4,FN\x18<&\x0d~\x92\xd7c\xf2\xe0C\x00\xf0\x95\xb3\xd3!rB\xa9\xea#\"<&\x8c\xd9\xae\x02\xbc\xa5\xe7\xc8X\xf8HJ\xd4\xd0\xa8A\xdd.\x19\xaf\xb1<\x92\x85\xdf3a\xfc\x8a'\xf1^\xf2\x1c^W\xc2p\xc7\x99\x00$\xcf\xe9\xfe\xc0\x93\x85\xf3\x04\xf6a\x16Q\xb2\x06\"\x12\x84A$\x08W\x1e\x87Z\xeeG}\xb6\x06Ab\x12\x1a#\x96\xb9\xd2\x86\xc3DO\xfa\xc0\x849\xc45\xd7\xb7\x82\x7f\xfa\xfaV\xe6\xb0\x8a\xd9\xc2\x18\xbf\x9e \"\xd0\xe1$\x94-x\xe1\x17\xa6\xf0\nHx\x85\x1e\xb0A\x86\x1e\xe1\x84\xf1\x03\x07\xc8\x10\x81sa\x9c\xfck\xd5&\xe8\xeemZ\xc4\xe1\x9eG\x8f\xa1\x9d\xc2\xa8\xce\xf5\xc9\xdd\xe8\xfaZ\xa2W\xaf\x15e4\xbbX\xb7w\xdb2\xcd@B-\xe1,B\xddS\xafZ^ku*\xc3\x96\xb0\x1e\xa7d\x9aE\x18k\x84\xb0i-\xde\xd6\xa4\xa0\x06\x87\xa6\xa4s\xc96\x874s\xc8/\xb3\xc4B\xc9\xa81\xa4R\x87J\xaf\x1a\xe6\x18\x96a;&\x98\x83e\x9b,\xd21\xbbL\\\xa67\xb7t\xa6\x96'\xaf\x8f\xc3\xa0N\x93\xaa\xa7\xf1g4\xa3\\&\x94\xdd|\x1a\xdf\xa6t\x98K\x06SIo&\xe9M\xa4q\x1ekp\x98DV\x02\x98L!\x97\xa80\x7fi4\x81\xd0\xe6\x0f\xc6\xf4A\x89\x94\n\xc6\x10.\x15 \xcc\x1d+\xd1\xad%\xde\x91sC\xce\xa9O\x11wT\xe9\xf61\xd1\xf4(T>\xe6\xb0m\xea\x0c-\xbf\xee[t}\xcc\xb9\xe0\xcb\xaa\x8f9*\xa6p\xfa\x98\xe3y\x95F\x1fs`t\xf1\xf31\x07\x05\xcf\xf2\xe6\x07\x8f\xa2\xe6\xe3\xe19e\xd9r{\xb1r\x84.\xc4\xe8\xc0\x13[T\xce\x82\xe3X\x15kw~(\x98M)\x13 g\x0d\x1e3\x87\xd9\x94\xaa`\x1aS\nW\xa8[\xcc\xcaU\x0d\xd5Y\xc1\xca\x83I\xf0,\x82\xa8FQ\x07\xaf\x05\xc2\x96\xd8\xc6\\*\xc3\xb5D\x97\xd3F\\@\xc35\xc4\x94\xceF_V\xd3\xc3XW\xd8\xf4\x80\xf2\xac7\xc1\x8b \xbc\xf6\xa8\xb3\xd6R\xf9i\x1f\x14\xdc\xe7}\x01\x1e\x05\xae{\xe1\xe1$\xc5H\xd7\xf3P\x1d\x8f{U\xb5\x0e\xcer\xd5\x0eq\xe6\x12b\xee\xd2\x81n\xc1\xeb\x10\xba(\x81\xeb\xc2S\x00jw\xa1\xd9 \xc9J\xa8R\x81\xa8I\x02z\xa2\xe0S$\x10=a\xc0O\x1a\xfc\xca\x03N\x83\xc2\xc9\n\x03\xe2\xea\xe1\x81\xcfD\xb1\xb6\xdd\xc1\xaf \xe0\x88\xe3\x1f\x1c\x05\x9a\x11,\x8daf\xc4\x9eEN\n\xc57\x88\xdd\x8a\x98\x18 '\x07\xf8}\x8a\x9c$`'\n>;t\xfc\xc1O\xb47\xb1;\x139A\xf7\xae\x00\xdf=9\xda\xc8\xee\xa0\x7f\xf9\xa5{H\xf3p\xd62\xc5\x96\x9e\xcd=b\n\x11\x9b\xad\x88\xf1\x8b\x03NZ}\xce*_\x9c\x92\xc5-S\x9c\xd2\xc49\x01pO\x02p\xb2c\x9c\xa1&\x97\x14\xee-\xe3\x9c\x88kw\"%\xc2\x80q\xdc\xbb\xbf\xd7\xde\x9c4=\xe7\xa4\xc5u\x8d7\x90\xde\x87\x99om7s\x9a\x0f\xbah\x8af\x93\x9b77\xe2\xd6\x93\x80\x01RO\x7f\x0fJ\xc0\x08r\x89w1LR\xb8\\Y~\x19\xdc\xa66\xb6\x01N\xa5\xe1V\x16\xce[~\x02\x9c#\x01j4p\xde\xfb\x13\x80\x1a\x0e\xd0C\x02\xee&\xa0\x00\xff\xfb\x80\xb2\x1d\x16g\xf0\xc2\x1b\xb07\x04\x058wU\x1b\xd4.s^\xdaS\x80\xb83(`jTp\x12\xbd\x0e\xa7\xbdK(\xe0d7\n\x05\xf8\xdf+\x14\x80\xb9](\xc0cY]G\x16\x05\x1e]\xba\xd5N\x1d\\w\x0f\xe5W}\x86w\x99o\n\xd0\xb7\x11\x05L(Ep\xe68\xf8\x12\x040\xd6W\x13\xbcNF\n\xbc(\x03\xde\xd4\x01\xfc\x89I\x01\xce\nn\x83\x0f\xff*\xc0/\x1d\xf4Y>\xf0_B\xcf\x13V\xab\x91+E_\x80\xcf\x9dG\x01^3\xf7\x9aq\x9f[\x90\x02Pw!\x05L\x85\xbe\xc7\x8dB\x01S!2\xf6}I\x01\xbe\xb7&\x05L5G\xfc=J\x01S\xe1\x81\xb9Y)`*\x0c\xbc\xeeZ\n\x98\n\x15\xf4\xedK\x01S\xa1\xe1{\x1fS\x80\xcf\xadL\x01\xd3\xe0?\xe5=M\x01\xf6\xdb\x9a\x02\xd0v\x00^\xff\xff\xecv\xaa\xf3F\xa7\x00?\x83\x03\xe3~S0\x1b\xa8\x0d\x98\x0dT$\xe3*\xc0/\x1d\xf4Y>\xf0_\xc2S\x18\xa8\xb8\x9b\xa4\x02\xc4\x9c]\xf7I\x05 n\x95\n\xf0d9_\x86\xf3\xbcg*\xa0\xc7\xe2\xba\xe2\xdfM\xe8\x7f\xf3T@\xef\xfb\xa7\x02z\xdfB\x15\xd0\xe7.\xaa\x80\x817R\x05L{/U\x80G\xe4\xaa =X\xa7\x87Tp\x86\xf1\x9a0\x00)\xac\x8fH\x00\"\x14\xd6\x84\x01\x98!\xc95\xd9\x9dVc\xf7\xd3\xddl\x15\xe0\xbc\xdf*\x00%Xq\xe2\xd4}\xe3U\x00VA\xa0\x94\x03\n\x7f\x01\xb8Y\x08\xf0\xd8\xcf\x9e\xcc\xe9\xc5\x98\x88;w\n<\x08\x01\x9e\xc4\x00\xcc\xed\x99&x\x12\x05| \x03\xb8{6M\x98\x1e\xa9\xc9o\xe44\xc1\x1dAo\x82'\x01\xfc\xecc\xe4M\x9e&L\x84\x91\xeb\x06\xae\x00\xf4\x96\xc1o\x16\xb4\xdc\xf0\x9a\xb8\x07\x17\xa2%\x06z\xf2\xe0E\x00\xf0\x95\x15^\x84\x00?b\x80\xbf\x94\x98\x16\x9d\x93\xca\x07?\xe9\xe05q\xec>\x84~ra\x12\\\xb0IG\xe5\xf7X$\\\x08X\xef\x05\x0bp\x8e\xe5\x1a\x03sSX\x80\xcb\xfa\xb2Z]\x08\xa1\x81\x11\x15\x08)\xe9\xa4\x88\x00\xd4\xeeC\xc8D\xc4\xc4\x0099\xc0K@\xe4$\x01;Q\xf0\x91w\xe3\x0f~\"\xe9\x86\xdd\xc2\xc8 \xba\xb6\x96\x00/)6\xd2\xc8X\x89\xe5\x1c\xce9\xd0i\x13\x18\x7f\xde\xdb\xcd\xdf6<\xdd\x9a\x8d\xaf\xdb\xe4\x9a\xa4:w\xfa\x9cA\xa8\x98\x84\x88\xe5M\x03-\xed\x15\xd55Yd\x9a\xd4\xb5>\x1d\xd9\x12\xcf\xa6M1\x9b,\x99\xcc\x9d6\xa6K\x10\xd3\x12\xaf\xab\xd0\x0d4\xd6o\xbfv\xca\x96\xa3qwo\x19\x13\xae<\xf9N\x17\xd2@pKG\x198bI\x16\x15kS\xab\xc6H\x90\xe8\x0f\xf5\xe0\x8dF\xe8\x99\xe28\x0eYg\xd1\x84\x8e(\x8c!\xdebK\xfdqpD\x0b\x07L\xe2\x8e6E\xc7g\x18K\xf2\x89O7C\xd3c\\\x890>\xb8\x98\xd3X|z\xd1%\xa1\xf8\xb4\xb7\xa6\x90\xf8tdL\x00\xf1\xe9\xc4\x95\xbeaK\xd4\xc0\x8f3f\x9aEG\xcds#\xe3\x9b\xbaJE\xaaz\xe3E\x01_\xb1:\xa6\x14\xb4$\xf5\xbb\xed\x90\xf2K\xfb!\xc7u\xb8\xb1&\xe7;mD\xab\xbd\xa2\xc0\x92r?\xc6\x00\x98D\xfai\xed\x1a\x05\x93\xd97\n\xdcv\x8e\x02[B\xbc\x95\xe8\x13\xbd$iJeGvj>\x838\x13\xd4\x07\xee\x0f[j\x88\x07\xf7\x1a\x0f\xd9\xc8\\\x1d\xc7,\x001\x13\xb0\xd9]\xe5\x07\x0e\xfbK\x81\xeb\xf0)\xc0\x95W\x83 `\x88\xe8\xb4\xd3Z\x9f\x99\xf2c0)\xdbH\x8e5\xe0\x8a\xb1\xe7\x14XS\xaf\x87\xa0\x81H6\x1e\xd2\xfdP;P\x81\xcb\x1e,G\x1b\x80\xab;\xddyH\xef\xb6$\xe6!\xfd\xa2R\x93\x87\x0c\xe0L8\x1e\xd2\xb9\xcb\x0eU\x80I\x1c\xee\x8f\xc7\x98v\xaa\x02}\x02pO\xebp\"M<\xbf\xe9\xdc\x86Y\x05\xff\x82T\xb0=)U`k\x8asY\xa2\\\xce\xc5s/\x1d2\x9d\x14EPW\xca\xa8\x7f\x92\xa8wZ\xa8w\"\xa8O\xeag\xcfd\xcfi\xd2;=\x12:Q\x8b\x87\xda\x0b\xce4M\xaf\xa1\\\xa9\x98\x88\xe4K\xaf\xf1\x8cS\x1b=\xa5\xf2$I\x94\xc6\xb4I\x83X0 \x83\xb9`\xf7`)\xea\x0c\xa2;'\x00\xeeI\x00.d>\xceP\x93\x07\xc8O\x10+F\x06\xc2\x07\x8ccJ\xde\xebi\x1cOr$\xb0r\xff@#\xd6\xc1\xf7N\xca\"\x18\xd1\xc9\xf1\xc3\x07\x99\x98\xd7]\x9c\x8e\\Z=\x97\xa3x\xbc\xf7\x08\xee\xb4\x0eK\xd7\xddn\xf5\x91\x0f]z\x85\x1aF\xc3\x9f:\x9e\xb4\xd6f\xf2T\x87\xd6\xeaK=7\xb6\xf9\x0c6p\x03:*(\xe1\x03.\xe0\xc6\x05\x10\xf8\x80+\xf8\x02nvT\xa0\xf8\xc7Qz\xc8Q\xfbh\xcc\xc10A\x198Y`\x06N\x11\x9c\x01\xaf\x00\x0d \xaa\x169\x17\xc4~\xf3\xdb\xd9\xdc%1\x01\xcc\x81\x1b\xf0\x1b\xc0~\x80q\x06q`\xbc=w:\x87\x08\xda\xb3\x04\xb8\xd9\x01r\x86\x00\x08/\x13\x94c\xba=M\x80\xe2\x14\x05.\x02\x03\x9e\xc8\x80%4\xda\xfbT\xfb\xd4vI\x1a\x13\x08\x02\xdc<\x10\xf8\xfb\x04\x85\xc0\x15\x18\x82\x91\xd0B\x04^`\xa4\xa1\xc6\n\x18\x81G\xd0\x08F\xc2\xdd\x1d@\x82\x91FrU\xc4\x19c\x0cT` F\x1a\xcc\x19d\x82\x91\x06\xc2\x06\x9c\x00\x19t\x82Q\xf0\x9a\"\x00\x05\xd6*4\x03-\xe8\x13X\x1b\xd6J2\x18uU\x1b\xc2P5f63f3C\x03(B\x8fmf\xb8+\xb0\x88\x19\xfc2\x9e\x93F\x06\xc0\xc0\x87\xf0\xae@\x18\xf4\n\x86\xe9Z9\x03b\xbaF\xce\xa0\x98\xae\x91\xab&J\xcf\xe0\x18\xb4yj\xb4\x00\x19\xf8\x05\xc9\xc0g\x81\xd1\xfb\xca\x190\x83>\xc3\xba\x02g\x80\x0b\x9eA\x9f\xb1\xadS\x1e=\x90f\xe8t\xfc`\x1a\xb8\xea\x90XD\x8e5\x1b\xdaz\xc7\xd5.\x08\xa7\x8d\xfc;w\x04\x8a5\x10l\xe1\xbc\xd3\xea\x9c\x0c\xa0&\x04\xee\x80\x84\x00\xd4\xc4\x0079\xc0\x84(\x04\x8c;\xec\xc4A\x0b\x01\xae\xd0\x85\x00\xd4\xc406\x10*\x98!`\x841M\xc1;p\xb3\xa4\x8b\x19'?f9w\x15bO\xb9&\x01\xb8\xfd\x84\x98\x0c`&\x04\xd8\x9d4\xde\x80'\xd8C\x98\x1d\x84\x98\x90{\xf7\xa0\xf7\xce\xe0\xd1\xdcAAp\x0f\xa3\x1f\xc2X\x7f\xc2\xd0\x9b\xbe\x17W\x85 \xbd\xd6\x1d\xe7\x95g\xe3\xce\xb7\xd2\xc3\xc2\xab\xc6}n\xdd\xe1\xf6\xbdm\xdd\xd5N\xfepl,\xc7\x1e\x1e\xd6\xfd\xa4;\xd6\xce\xd2\xa8\x05\xd4\xed\x18\xc4\xce\xec\xd1\xb7}\x17z\xed\x17\xed1\xc5\xd1C\xfb\x08\xf2\x0b\xaa\x9apM\xd2\xfcF\xb91\xd4\x944\xbbE\xb7G:\xae\x1f\xd1\xae\xeb\xe6\xd1S\xb2\xffEV\xa3\x0b\xa63=\xf1\x88f\xaf\xd9\x0d\xbe(jH7\xc0\xa5\x19X\x04\x96M\\\x19\xd3 \x90\x1a\xc6\x10\xd17\xa4\x0d\x0c\xe9\xd4\x95\x1e0}Z\xc0\xa4\xe9\x00\xb84\x00S\xf8\xdfHX\xbd\x03\xde\xb2\x0efY\xab\x0b\xeb#:\xd2\xbbS\xac\xe1\xfb\x9e\xbc<\xc5\xc5#\x84\x9f\xdcq\x18p\x1d\x04\xac\xfep\x93\x80\xac\x83\xdbz\x9d6X\x86\xf0o[\xfc\xda\xae\xb09\x82\xc34xa\xc3\xe3\xc6\xb0x\x9fa\x1d!\xe4>]\x8e\x11\xe6\xc6\x84\xb7\xfb\xe0f\x0fc\xf7\xe9\xd1\x14\xae\xee\xd3\x973,\xdd\xa7Sk\xf8\xb9O\x87\x980\xb3+\xbc\xec?\xee\xd8a\xe4n\xf8\xd8\xd3\xf2\x19QKi\xc3\xc161Z\xeb\xaa\x15\xfe\x9d\xd5\xd3\xac\x9e\xcc\xe1V\x81\xd9i\xae\xef \xc2\xa8NB\xd9\xc2\xa6~\xe1R\xaf0\xa9Wx\x14\x1b\x16\xed\x11\x0e\x1d?\x0c\x8a\x0c\x7f:\x17\xc6\xc9\xbfS\xd7dt\x863\xd1ch\xa70j\xd8r\xf2p\xa5\xc1#\xf0]\xb6\xbdeT\x90\xa8h(\xd2\xdc__\xc1\xcd\xd5\xbb\x0fo^/\xbf\xbby\xb7\xbc\xfd\x9f\xeb7\x1d\xe6\xec~q\xfd\xe9\xcd\xf7\x1fo\xdf\xd8\xbfh\xed\x1f\xdd7\x1f\xaf?\xde\\\xaa\x8dSn\x15;>\x0d\xba\xfe\xdf\xeat\xdd\x98\xbdX36wF9\xf9\x8e\xf8\x9ef\x19\xd9Ru\x82\xae\xbd\xf7^-\x9bq\xae/\xf8\xaag\xf6/\xc5|^\xc057\x84H\x94\xe9\x17\xaa\xf4<6\x17\xc9\xe9\xb7\x19T\xbaL\xebB\xf6\xb4~\x0c\x0ec\x84\xf9\xd3\xd9oF\xf7\xb0\x7fg\x139\x83G\xf1\xa9Z\x9d\xbe\xe8\x9e\xcc\x1ctSe( \x99h\x8e\x85\xcc\xb1\x10\x0c\xfb\x0b\xf8U\xc5Bt\x91|O 7\xda\xc9\xd5\xc8\xa5\x16\x1e\xb5q\xa8\x85?\x1d\xecce\x1e+g\xf6\xefxB\x9e\x1c\xed\x16\xaa\x02'/z\xf7:RL\xae+\xf5\x93\xdc\xf7Fl^3\x05-\x83w\x8f\\n\xb3P\xffU\xdb44~\xa59^9MD\xc0\x9b\x89`1\x15a4s\x11\xbcLF\xd3\xd7z\xb3\x11\x86\x17\xec\xee\xb8\x98Dkk\x18\xb3\xe6Z\xd2\xb9\x95<\xe5\xe9X\xee\xc7\xb9R\xb7\xcd5dp\x0b\x8d\x11\xd0wx\x0f\x1c\xbd5\xa6Ru\x14\xc6k\xfa\xa5?_j\x9d\x00xLLb\x81\x1f\xebSzHiF\xe3\x9c\x1f\xfaS\xfa\x90\xe4\xf4\x82\xfdC\x1c\xca/ I\xe5\xf9\x9ci\"*b\x1a\xb5\x84\x85\xba\x07\xa6&2\xa0)\xcfe\x00}Q\x86\x82=\xc5\xba\xa1\xb8\x81q\xf6\xad8u+\xe8\xed\xd3\xd8\x14\xdc\x9e.\xa8=I0\xdb\x1e\xc4\x0e\x92l\x9fd\x8b\x15\xc9\xe8\xe2\xe1\xf9\x8a\xe6\xe4\xf9\xe25\x0d^%a\xec\xb9Pk\x1a'{'\xad\xc9>)b\x97\x987\xb1\xadD\xac4\xb1\x08\xe4\xc9=\x8d\x85=E\x04\x06a\xcc)\xc0I\xc4\xfe\x14\x84{\x12\xc9ak\xfa\xec\x03\xd7Z\xb7\x8cl\xfc'\xd8\x844Zs\xed\x18\xb3q\xa4\xfb1\xdc\x1f\"\xba\xe7{\x84\xafq\x91\xe5\xc9\x1e\xf64\xdf%\xeb\xee&\xcd \xa5?\x15a*\xdcY\xdbd\x9b\x1c\xd2$O\x1a\x94^\x87l\xaa\xab\x82!Y\xa3xD\xb7\x1co\xf9\xaf$\xfdD\x1fI\xba\xf6\\\x03\x7f\x01\x966\x86\xa9>\x9b\xe6|\xdc\xe1\x11\x01\x16m\xd1\xe5\x17G\x13{J\xca\x08\x1c\xd4\xeaq\x0cFju\x89\xe3'\xdb61pS]\xe4\x8b\xe0\xb4Z\xa8\xb2-\x0f.\xaeU\xb3'\x99\xfa7#\x88\xe0\x1577_\x93\x94\xec}\xe5<\xd34E\x1c\xe6\xc7eN4\n\xb3\xb5\xd2L^-\xcb\xe3\x8c\x89\x89\xdb\x8d\x92\xb8\xc8\xbc[1\xd6X\xa7\xe4\x91o\xa9%\x8d\xd9IN\xd3j\x95$\x11%\xb1ni\x04=\x9a\xd1\\\xe1\xe8>\x88_\x98\xaa`\x7f\xadS\x13\xf6\xc9\xba\x88\xa8\x9b\xda\xff_A\xd3\xe3+E\xbd\xeb$\x89>\xd1\xec\xc0\x94\x91\xe7\n\x1c\x92D\x93\x088\x0b\x82_\xbe \x80\xf6t\xd9R\x96S+w\x16\xff\xf3\x13\xf6\x870\xce\xb4B\xa4F&3[\xb1)q\xe3C\xfd?[\x82\x92\x87y\xbbg\x8d\x86\xd5\xb4>]\xbf\x92SE\xf2u%\xca\x84\x04\xcbz\xf2\xb6\xd8\xeb'\xf3\x03\xcf\xec=){\xcb\xd5lHT\xf57\x12\x04i\xa1\xe2\x89\x95\xf2r\xe9L;\xb7YY\xbe\xd9\xc7\xb3N'C\xb8\xfe\x96\x1d\xdb\x7fU\xac\x8f\x88\xc0[\xb6AW'\xd7\x9b\xe8\xaf\x8d\x1a/\x8d\x1a\xb1\x17\xe0\xca\xb21lb\x01\x969\x080mh\x01\x8e\xe6\xae\xbcj\x98d\x8b\x0b\x98`\xa3\x0b\xf0\xd9\xeev\x8f\xe60\x13W\x00\xd6\xd0\xd5`\xd3\x16?\xec\xb0\xee\x12AI-5\xcfp\xe5b\x9a\xfd8\xab\"\x0c\x87\xfa\xf0fc\xba|-\x9b\xa6}\xb1\xe7\xcc\xd5d\nO\xfd\xa3\x93\xfb\xfd\x94P\xbd\xa7\xde\x9a(I\xab\x10UO54J0\xbe\xc3|\x0dr\xd6|\x93\xf5\x05\xa9\xdf\xb1\xaa\xb6#\xa3\xa6\xda\xf2\xf1\x96\x91\xd1g\x89t\x04\xe9\xb1>\xf5n\x06,\xce_\xe4\x11\xf5Rh\xdc\x9e+\xd48\xe8b|G-R\xb5\xdb7\x16\xa1\xa2\xbb\xfa5O\xe0'6\x0b\x7f\xd2\x1b\xa6\xdb\x8b\xfe\xad\xbe\xfc\x17A\x1c\xee{\x92\xfc\xd0\xf0\x94t(p\xe8:\x0e\xf8\x9fhN\xd3\xd2\xed[\xf7\x13\x18\x077!\x006\xcf\x0b\xd8\x84\xbe\xcb\x03co\xec\xf2\xc4X[;=2Uk\x8bWF\xb3z\x98\x93\xadt\xe6x\xf3I\xb9\xd1y\x82d\x96\xf1\xf3A/\xa6 \xca\x0e\x8c\x8cS}\xd2`\x9e\xda\x9f\x1b\x82\x11R\x1a\xd0\xf0\x81\xae\x07rQ\x17+\xb0\xda\xee\xe3'e[lv\x87\xc9m\xb3\xd7\xadM\xdd\xb6\xfa\xf8\x16\x10Lc\x05\x81\x87%$\x03\xb1m!mas\x1f\xf9\xac\xe9\xa6\xb6\xe5i\x1d\x10\xca?K2\xaa\xed7\xc0\xb8\xe3\xd7\x95\x8d\x19\xbeZ\x86t\xa7xux\xaa\x1aGI\x0e\xf6\xcf<\x81\x15\x9bV\x96\x89\xa5\xbe&[\xfa\x89\xfeT\xd0,_\x88\xdf;\xdd\x88s%\xeb\x80u\xc8H\xc2\x8eIY\x0et\xb3 \x83\x90\xc6y\xd4\xd4\xb3\xda\xec8\xc4\xe4\xb4{MNO\xa3\xe7\x84\xb3\x88\xcd\x8d\xff#.\xf6+\x9a2\xf6\x94w\xa2k\xa9\xc2\xe1\xa61\xd1\x801\xf2\x927\xebj\xa4G\x92AF\xf3\x0b\x08\xf3\x8cqU\xc1%o\x11\x0b\xb6XC\x92\xefh\xfa\x18f\xae\xac0\xab\xec\xec%\xcce\x1f^\x12\xbcl|\x19\x04\xc5\x9eo\xea\xf5\xab\xce\xe1\x02)\xc2\xf5\xa7\x92)\xa5\xf8\xeco\xc5\x98QX\x13\xca\xc4\xaav&ih\xa2\xea\x83\x1a7\x94\x1d\xb5\x8d\xa5{z\xc8\x810\xaa\xa5E\x1c3\x95\xc1\xb7\x1eM/ 1\x93D5\x9d\x90\x03\x89\x8f<\xf7\xd4\x83\xad\xbb\x06\x8e'O\x9f8\xa073\xf4d\x0c\xfd_\x1a\x86\x1e\xef,0\xd29\x00\xc5\xd4\x95\x15\xe8\xc9\xcc6\xa3\xd7\xc0/\x06\xe5\xab3q5=8%JO\x83\xd6\xdb\x94\x1d\xcd\x88\x1d\xc3|\x95\x8b\xac.j7\x8fS\x97Q\xa4\xca\xd9\xf5\xd0TLlO\x0e\x99XV\x8eU\x9e\x94\xd7\xc5\xb8B\x0e\x85\xd0!\x19l\x12\xaeJ^hi\xfc[\xb8\xdaTX\xb1\x859\xa4 \x93\n\xeb\x12q\xae\x7f\xb3\xac\xd83\xa1\xa4\xed\xe22\x86ooo\xaf\xe1\xdd\x9b[\x901\x8c\xcf\x9f\xde\x0b\xae=r\x15N\xe0\x876s\xdd\x1e\x0f\xf4\xc7\x1f~\xd4\xe7\xa4\xc8\xd3R\xac\x16U\xe8\x16N\xc2C\x9a\xac\x8b\x802\x93\x80\xa6i\xa2y\xa1\x87\xa3T]\xba\xc8\xb8\xcc\xe5\xfaT\xc9\xf3\x80m\xb9$\xb9/\x0e\xe5\x11oE\xd89V`\xaf\xc7\xe9\xf3\xa7\xf7\x1c\x81\x1dy\xe0K\xbf\xafq\xe1Z\xb0!Q\xf8\xb2\x7f?$\xe1\x9a\x19\xa2\xda\xce\xc4\xe8|[\xa5t\x93\xa4\xf4B5e=\x92<\\\x85\x11\xd3\xf8L\x0be\xea\xac\xcd\xb6\x7f\xfa@\xd7\xda\x1e\x93\x98 \x95xK\xf9\xe7|\x07,\xe0\xfcsFU\xadL6y\xc6.l\x17\x0b~!1\xd9\xea.\x8b\x03\xacR*t\x9a\xecr\xf1T\xeb\xc7Mr\xfa\x02r&\x077E\x1c\x08>fX\xcb\xfd\xcd5\x19;\xd4\xd7\x0f\xd0\x82?\x12~\xe2\xd7\x9d\x9a\xa5\xc4]\x15\xec\xf8\xcd\xe4(\xbd\xe0\xe6c\x98\xabn\x0b\xb6R\xfc\x84[r\xff\x8anCq,`\xbaU+ \x8f\x07\xba\x10Tb\x0d\xaf\x04\x91^\xbf\xb9y\xf5\xe9\xea\xfa\xf6\xe3\xa7\xa7]I\x08r\x10\xc1I\xa6a\xc4@&\xf2\xfc\xd1A\x9ew\x89\xd6&`\xa4y\xf1\x12~sX-\xde&\xc9\xdf\x17\x8b\xc5?t\x9f\x91\xf8x\xc1\x8c\x15\xf6\xedAh\xe6\xefH\x9a\xedH\xc4\x88fBXO\x98\xf6\x98\xda\x01\xc3Mk\xb8\xcf\xf1\xbe\x1a\x90\xa3\xc3\x99\x96\x7f\xf5\xaf/!\x0e#\x03\x03\x9a\xb0\xe8p\xda-\x8fq\x04\xf7\xa5\xe4Rv$\xac\x8e\x95FW\x12\xf51\x8c\"\xf6\x83,\xa5\xc0\xf4c\xbb\xc3'\x1a\x8d\xfd\x8c\x1dqx)\x8a\x05\xb3b\x9e0\xf3\xb6\x94\xf0L\xfa\xab\x0b\xb8b\x0d\xdb]\x96B5\x8e\x8e\xca\x80\xef\x9c\x9aJ\x1bI\x1e\xcesu<{\xf2\xecI\xbbC)\xed\xd5\xf0\xe2\x90@%O\x9dm\x92d\xb1\")G\xfc\xcb\xb3\xe3\xe2ogb\xde\xc2$\xd6\xd9\xf8|\xd83\xf6%\x93N\xad\x1f\xfft\xf3\xf1C\xfbo/_\xbe|\xa9[ \xf6mu`\x14\xa6F\xc2\xb6\x94T\xbf\xc2\xbe.\xb2\xf2\x92\xc6\xb6\x88H\xda\xee\xa9\xdbA\xceS\x06+%z\x01t\xbf\xa2\xebu\xa5N/\xa4n\xee\x1c3kjN\xb8\xf5\xee\xfe\x9b\x91\xe0N\x9e\xa7\x1a\x85\xe9\x14A\x17j\x83\xea\x0f/l\x8d\xd9\x06\xad\x8e\x16\x9b0\xa2:\xc1\xa8\xb6\xf25M\xb3$6\xf0\xba<\xcbo\xc24\xcb\x97|)^\xc2s]o\xe5\xa7\xbcp\xae\xfc\xf2k\x9c@\x060\x8c~\xc6\xc9q\xf6\x02\xcet\x8c\xdf\x9c\xe2B\xcc\xe3\xecB\xdf\x13\x9f\xc1\x07\xb2g\xbd\xfd\xa7@\xf5\xbf\x0c\x9f\xb2\x19\xb4\xbe\xc4L\xe3j#\x0d\xe0\xe6\xe2\x8b\x85\x0b3x\xa4Q\xf4\xd5}\x9c<\n\xd7\xef\x8e{\xee\xa5\xa3V\xc7\xc7MN\xbb\x10V\\\x8b\xfd\x84\xcc\xa8\x0d\xca8\x8a\xdf\xe0\xe7\xfc\xd4\xee\xf2\x8e\xf3\xb8b\xaf]\x12\xad\x1b\xeeb\xbeC\xc2\xb8dK\x90^\x04\xc9\x95\xed\xde\xf8\x10%;\xc29\xdb\xe8j\xd2\x9d\xa3\xad\xf2\x9b\xfc\xf8\xc3\x8fO\xf5\x9c;\x8c\x05\x9a\xa3\x98\xb8\x80\xcf\x9fu\xf6|\xf1\xf5\xf3\xaf\xb33\xed\xbaV\xffnX\xedee\xc8\x94\xe6E\x1a\x8b\xbb\x14\xea\x8f\xd9\x1c\x0f\x9f\xe3\xe1\xa7\x8e\x87\xb7\xaf\xc0j\x9c\xdf\x984\xe1Z3\xf8t\xfd\xaaBR\x13\x06\xd7{\xdd's\xb9\xa3\xb9<7x\xd1-\x8c\xe0\xf2\xa0O\xe6?\x1f\xd3{>\x8d\xef|\x90\xe7|:\xbfyO\xaf\xf9\x84>\xf3\xc9<\xe6S\xf9\xcb\xc7\xf6\x96\x0f\xf6\x95\x8f\xef)\x1f\xe4'\x9f\xc0K>\xa2\x8f|l\x0f\xf9\x88\xfeq\x8cw|\x12\xdf\xf8\x04\x9eq\x8d\xa5\xa9\x93+\x13x\xc5{\xfb\xc4\xb5\x1eq\x84\x15\xa41\xf1&\xf6\x85\xdb\xd4\xeed~\xf0Q\xbc\xe0\x93\xf8\xc0\xa7\xf0\x80\x0f\xf4\x7f;\xfc\xbdF\xdf7\xc2\xf3\xad\xf3\x9c\xf9x\xbdu\xed\xff\xa1\x9f|_\x7f7n\xf6n_\xb7m\xaa\x08?\xb7\x97\x97\xbb\xed\x8b\x18\xec\xe1v\xf8\xb7m\xdem\xbbo\xdb@\x15\xbc_\xdb\xed\xd5\xee\xfa\xb4\x07y\xb4Q\xfe\xec>\xdel\xad\x17\xd9\xed\xc9\x1e\xcd\x8f\xad\x1d\xbf\xc5I#{\xb0G\xf7_\x8f\xec\xbd\x1e\xd7wm\xf1\\w\xfd}]\xaf\xf5X>\xeb\x11=\xd6\xa3\xfb\xab\xb1\xdej\x84\xaf\x1a\xed\xa9\xc6\xf9\xa95^j\xdd\xa8X\xf7\xa4\xcbC\x8d\xf6O\xa3\xbc\xd3-\xe4\xc7\xf5L\x8f\xee\x97\x1e\xd3+=\xaaOz\xc8\x82#\xfc\xd1no\xb4\x12\xff\xddb\x00}\xfc|u'\x9f\xce\xb7\xb7\xa1t\x9b\x928/}{\xef\xd8\xffy\xfa\xf2x\x0f\xa8\xd2\xfa\x8dI\xc9fj\x1a\xaa\xf0\x86\x14VEFS\xf1 g\xa2X\x9c\xc9\x89|\xa1:\xdf\xd10e\xd6\xf3\xbav(\x12\x1dbjQk\xf0\xa06\\w\x90!\xb18\x0e\xb2O\x9fdm\xac\xcaO\x8d\xa1\x81\xaa3y\x87\x83\xd9Z\xc9F>\xdf\xcc\xb6\xe7&\x8cr\x9a\xb2C-\xa5\xd5\xe7\x03\"\x04\xf9\xec;\x9d}\xa7\xb3\xeft\xf6\x9d\xce\xbe\xd3\xd9w:\xfbN\x05X\x94\xdf\xcf\xe3;\x95\xa1in\x93\x01\xd7uI*\xde\xb9d-\xff\xfc\xfd\x0d\xbf\xb6\x95'\xc06H\xca6>7Q\x04E\x98BR\x82\x95\xf7g2\xf9T\x1cY\x18\x15=\xe3\xb9>V\x0e\x7f\xe3\xa7\xfa_eV1\xa6S\xb6\xd8\xea\xa8\xcc\xc3\x01F\x8e\xc6.\x05\x0f\x1bgt\xfb\x14\xf46\xaa?N\x93\xd9\xaa`Z\xc9\x0e\"c\xd8\xac`^Rp\xd4 2\xd9\xaf\xe0\xba\x12\xe0\xb6caJ[\x16F\xb6ga2\x9b\x16\x86\xda\xb50\xa9m\x0b\xfd\xed[\x98\xd6\xc6\x85)\xed\\\x98\xd0\xd6\x85 \xec]\x18\xc3\xe6\x85I\xec^\x18j\xfb\xc24\xf6/\x8ck\x03\xc3\x04v0\x8ck\x0b\x03\xd2\x1e\x86\xa9lb\x98\xc6.\x06\xbcm\x0c\xd3\xd8\xc70\xc4F\x06\xf3\xad;\xa7\x92\xb5\xde\xbc\x9b\xd4f\x86\xd1\xedf\x9d/\xb6c.c\x9c\xb1e#\xb47\xb69V\xdfBq\xa5\xf1u\xb2\xa2,\x06\xcb\xdb\xa7\xbe\xc1$\xd6\xb7\xd1\xfe\xf6\xc7lR\x1b\xdcb\x85Od\x87[-qW\xcdN\x9b5\xee\x14\x158\x8b|b\x9b||\xab|J\xbb|\x04\xcb|j\xdb|\x90u>\xb9}>\xb1\x85>\xad\x8d>\x8d\x95>\x92\x9d>\x95\xa5>\x82\xad>\x99\xb5>\xba\xbd>\x8d\xc5>\xba\xcd\x8e\xb7\xda'\xb4\xdb'\xb3\xdc\xbdl\xf7\xc9\xac\xf7\x81\xf6\xbb\xc5\x82G(f\x87\x15?\xb9\x1d?\xbe%\xdfA\xba\xb2\x8d+q\xc0\xfe\xf7I\x86\xf6K\xf7\xbb\xfcG\xe2\xfa_\xd5Aa\xbe\xfc7_\xfe3_\xfe3\x1c\x07\xbd\xce\x9e\xc6j\xb7\xdb\xe4aQ=\xf8|H\xb2\xd07\x0fH<\x98B\xa2e8\xa0N\xe2Z\x0c\x9d\xb8\xd3\x89LouOs\xa4\xfd\xd9\xeb\x8c\xfa\x15\x19\x8d\xfbU\x17\xbdb\xb2\xf34\xd5E\x1b/B\xf35\xaf\xcbF\x89\x9b\xe4\x06\xf9Z]\xcc\x8e\x0e\xfc\xef\xb5W\x9a\xf8_\xf3\xf0\x81v\xf8\xd0\xc5\xde\xbd\x1e\x82\xde\x87\xf1r\xdd\xdc\x1e0\xb3\xde/\x9e\xf5\xa0c\xad\x84q\xb8/\xf6\x8a\xc3@\x94\xa3U\xac\xc3\x18\x8br\xff\xd3C\xc2]L\xa2\xfck\xd5\xdb\x9e|Ql\x80/\x0dk\xa3\xf2w\xe4\x0b\xc7Gt\xc6\xd1\xb9d\xd3\xde%\xd1\x9a\xa6\x9c\xd3\x15\xaa\x8c\xd0\x15\x93\xc3\x15;\xe4\x91HZz\xf0u\x8bD\xfb$\xcew5\xd3\x9010;\xfd\xae\xd9\xb6\x9aY\xf9\x7f\x11+\x97\xab\xda\x9b\xa9\xc3x\x19\nn*\x99\x9b\xbb\x83|y\x9b\xd1\x857\xac\xfe\xc25Zs-\xbb\x036\x7f\xaf\x85\x11*\xff\xb4 \xc2\xbaH\x95\xbf[z\x9b\x1bC+\xbf\xbb\x0b\x9f\x06\xbbt\xd1i\xfc\x8c\xc3F8\xfe{!#\xf8\xb1\x8b\x85\xf8\xbbe\xf8\xc6\x9a\x0bY\xb8#\xcdG\xaeE\xc6\x88\x1b\x07\xc5\xee],\xd4/\xc3\xf0XQ\x1aCJ\xffJ\x83\x1c\x83\x8e\xd8V]d\xc4\xdf\x87\xa1\xb2!aT\x7fr{\x13\xc6$Z\xe6$\x8a\x8eK\xe1W\x1b\x10\x0b8\xea\xdf$\xd4zB\xc8*c&\x0b\xfa\xfb8\xf1\xf8t\xc9\x8c\xa8\xe5\x03\xcd\xb1\x8d\x9aa&F\x8dO\x9c\x185b\xf3\x17HI\xba\x06N,\x19\x03\xd3\x04z*\xda\xf2\xa8R\xbe\xcc\xc3=\xa6x\x8cr\x0c\xadIN\xbfbm\xfe\xa5BN\xc4\xcch\xbc\x1e\xde\x19O \x9a\xe3\xb3\xbf\xc6\xf8\xac\x90\xb2\xcb,'\xe9\x08\\%{\x1b\x85\xa9\xc2\xac\x8a\xfdw;Z%ID\x89z}\xba\xb1PJ\xcb7\x14m\x90\xa4T\x12v\xcf\xec\xd8TJ6\xe3f\xb3\x04Uo\x1a\xe6\x9bfbM\xb3\x0dg\xb2\xb9T\xbc\xe5C\xbd\xa9\xe64\xd3\x10&\x9a\xc3<\xf30\xcdL[i$\x93\xect\xe6\x98k\x9d\xa61\xc5\xba\x96\xcf\xcf`\x82a\x90\x98\xca\xf4\xea\x9a]\xa75\xb9\x8c\xe6\xd6\xe9L\xad\xba\x99e\x91N\xdf\xf3E\xbbn$zi\xd4\xab5\xfd\x83\x7f\xef\x12\xdeR\xd8\xa3R\xca\\\xdb\xbf\x8etI!\xa9\xe2\x1a\x19@\x994\x92D\xdaFM|\xffKg\x16\xb5`\x95\x86\\<\xd7X&\xe1\xf4\xbc\xacj4x\xd0\xc6\xad!\xdf\x06p\xe1>M\x9a\xb86%\xd9\xda\x9d\xde(\xd2\x1bn\xa07\xde\xc0f\xc0\x81\xf3J\xa6\xc1\x90\x03;\x11\xc0b\xd09\x9b\xba\xb2\x85\xc63\xee`\x1a\x03\x0f\xbc\x8c<\xfb\x84GJi\xd62\xb66\xf5M\xb7\xf50\x17\x03\x14\xa2\x88[\x01\xf5!\xfa\xdeEW\xc9w\xa7:\xd0X\x84\x81\x83\x9d\xad\xf7F\x8c\"a\xc0YI'\x18\x8c\xa2\xc1!\x1c\\\xe2\xc1* \x9c\"\xc2.$\x9c\xcd\xdd\x82b\\Q1\x99\xb0\xf0\x13\x17\xae\x89O!2\xbaB\xa3\xef}\xb5|~\xac\x8e\xc3|_\xcd\xf3\xbeZ[ax(%\xd4]5\xdeBd|\xf7\xd4I\xca\xe6n\\\x07\xeaL\xa6\xf1U7\xb7\x9c\xe64eB \xe2iHy\"\xbf\x1f\xb01\x8cG\x01\xb03\x90\x16\xeb\xe6!\x80\xc7\xf7i\xbc\xcdw*\xd8m\xb8\x11\x00u\x15\xda\xe8\xcb\xe0@>\x8duk9\xe1UE\x10\x11i\x97\xd6\xaa\x7f\x84\xd0Y\xfc\xf3\x01\x1a\xeb\xa7\"I\xdb Q\xa8\x03\x8a\xebb\x84N\x02IV8\xd04\xa0q\xce\xceN\x8c\xb2\xfc\xc4\x92\xe5\xe4\x9e\xf2{9\xa5\xfdL%\x87\x88#\x8c8\xadi\xd83H\xe2,\\\xf3\x1aw<\xb6\xd5\xe4\x98|\x97\xd2\x8c\x89\xb8 \xa6xVN\xa8\xc1*\xffC3\x8e~\xdb\x8cJ\xf8Qs\x01\xafeDL\x8a\xd3\xdf/\xfem\xd1\xccl{\xa0y\xb2\x9c\x12q\xcb\xda\x08\xdeN6\xf0=\x95\xab\xc05\xc3-_$\xf1\xbfb\xbf\xb4\xe7\xa6]\x1b6\x13\xba\xeeL\xf9\xf9\xb3?\x98\xec\xc9)\xa7\x8dZ/\x12\xd7D\x15b\xf1\xfe\xfd\xffi\xad^5\x97\xc9\xf6\xd6\xb0\x89\xa4\x94\x04;\xb9\xf1\xed\x13\xea\x1e\xe7\x9b'm\xcca^\xde\xc6F\x1f\xe5%\xa2=\x0f\xf3j\x9e/\xfaKD\x8b\xcf\x18\xb1t\x1a\xbf\x8d\xe6\xf26\xd8\x0d\x19\x9b\x19\x93\xcf\xb5\xefK\x98\xe6r7\xc0\xc0\x0b\xde0\xe9%o\xe8\x7f\xd1\x1b\xa6\xbd\xec\x0dS^\xf8\x86 /}\xc3\x04\x17\xbfa\x8c\xcb\xdf0\xc9\x05p\x18z \x1c\xa6\xb9\x08\x0e\xe3^\x06\x87 .\x84\xc3\xb8\x97\xc2\x01y1\x1c\xa6\xba\x1c\x0eJ*\x8f{A\x1c\xa42B\\\x12\x87i.\x8a\xc3\x90\xcb\xe2\xf0\xab\xad}\xdf\x19B\xa3\xe6'\xbbD\x0ec]$\x87\xa9.\x93\xc3D\x17\xcaa\xf8\xa5rp_\xad\x06\xdb\xe5r\xc0]0\x07\xd3\xc5V\xcf\x8b\xe6`\xe9Gs5p\xe8\xa5s\xf0\xa2\x8e\xfb\xf29 \xc8\x80\xb8\x84\x0e\xbe\x17\xd1AO\x9e\xe1\x17\xd2\xc1})\x1d\x1c\x17\xd3\xc1y9\x1d\xecT\xc3_R\x07\xd4Eu\xd0^V\x87\xa1\x17\xd6\x01{i\x1dz^\\\x07\x0b\x99\x10\x17\xd8a\xccK\xec`\xc3E\xc3\x89#_h\x87).\xb5\xc3\xf8\x17\xdba\xf4\xcb\xed`\xbf\xe0\x0e\xdaK\xee\xa0\xbd\xe8\x0e#^v\x87q/\xbc\xc3\x14\x97\xde\x01\xf0\x17\xdf\x01w\xf9\x1d|.\xc0\x03\xfa\x12<\x18\xc4\xb9\xe1n4x\xdc\x8fv]\x88\x07\x9fK\xf1\x80\xbd\x18\x0f\xfa \x8d{A\x1e\xa6\xb8$\x0f#_\x94\x87\xb1/\xcb\xc3\x08L\x81\xb84\x0f\xa8\x8b\xf3\xd0\xb8<\x0f\xda\x0b\xf4`?\xect/\xd2\x83\xeb\xd6\x10\xe2k\xcb\x85z}\x03\xf3\xa5z\xfd\xf7\x9a\x8b\xf5\xfa\x0f\xb5\x97\xeb\xf5\x9fv.\xd8\x03?\x86\xa1orUM\xec'\xb7\x91nv)8\xdd\x0d/\xf3\x88\xa7\xb8\xe9\xa5@\x7f\xd7]\x8f\xd7\xe47\xbf\xfa 5\xd5M\xb0\x12\x17\xedE|=.S\xde\x0cS`\xbd\x90\xafGk\xaa\x9bb\n\xda\x17\xf3\xc1y9\x1f\xfa\xc7z4\x17\xf5\xc1\xe5\x812\\\xd8w\xb6\xeb^\xdcG41_\xe0w4n&a\x8ct\x91\x1f\xcc\x97\xf9\x1d\xe8\x98\xafLC-\xdfPw\x07{P\xc7\xc6K\xfe0gF\xfd/\xcc\x8c\xb2\x16\x06\x80!\x8cd)\x120\xa8_S\xc1\x80\xaa\xd3f\xd1\x00h/\xec8\x85\x03\xb4\x99\x08\xadD\x01T.\x82\xc2\xc67\x1b\xa1\xef\xdd\x025\x8d_\xfb\x857C\n\xc3 \x99\x93\xcf\xcf\x86j`\xba\x94\x86\x11\x92\x1a\xa6Nk\x18\x94\xd80yj\xc3\xc4\xc9\x0d\xd3\xa67L\x93\xe00R\x8a\xc3TI\x0e#\xa49L\x96\xe80z\xaa\xc34\xc9\x0e\xa3\xa7;\xe0\x13\x1e&Ly\x98,\xe9\xc1+\xeda\xb2\xc4\x87\x81\xa9\x0f\xbf\xf6gC;\x83h\xcd\x83I\xd3 FL\x84\x980\x15b\xbad\x88Q\xd2!P!\x7fGJ\x04:)\xc2\x12&\xf5N\x8c\xb0\xf5\xa5\x0d\x17\x8d\x91\x1e\xe1G-\\\x8a\x04\x86(\xc84\x89\x1e\x89\x12\xa6\xd8\xda(\xc9\x12\xa8t w\xc2\x04&e\xc2AE\xbf\xb4 l\xe2\x84)ub\x84\xe4 \x8f\xf4\x89\xfe \x146\xa2!\x93(FN\xa3\xb0b\xa4\xe5\xd4 \x92)&J\xa7\x98$\xa1b\x8a\x94\ngR\x85)\xad\xc2\x94X1nj\xc5\xe8\xc9\x15\x13\xa5W\xf8%X\xa0S,<\x93,|\xd2,\x8c\x89\x16\xe6\xa8:>\xae\x8eI\xb6\xf0L\xb7\xf0H\xb80Lm\xfc\xa4\x8b\x89\xd2.\xc6O\xbc\x98 \xf5b\x0c6A\xa6_`\x130\xda)\x18\xa6$\x0c\xc7\xa1K\x9f\x88\xe1\x9b\x8a\xe1\x0e\xce\xa3\x9a\xd8\xd31<\x122\xbcR2\xd0I\x19\xbd\xd220\xa7\xc9\x91S3~\x8e\xe4\x0c7\x07L\x9b\x9ea\xcb\x85p\xb2\xda\x94)\x1a\xbe\x88M\x9d\xa6aK\xd4\xf8\xb9R5\x10\xc9\x1a?G\xba\x86>a\x03\x93\xb21(\xb6eH\xdcpz\xcf,\xc9\x1b\xce\xb6\xfa\x04\x0eD3{\x12\x87O\x18\x7f\xccD\x0ek*\x072\x96\xa9\x0fj\xbb\x13:\x06voM\xeb\xb0%v\xcc\xf5>GH\xf5\x98,\xd9\xc37\xdd\x03\x91\xf01\x90\xd1\x1ci\x1f\x03{\xb7%\x7f\x98\xd3?&J\x00\x99\x0b\x97\xce\x85KOU\xb8\xb4\xb6\n\xfa, \x9f\\#^\xfa\xa4\xec\x0f\x93tT\xd3\xa2=\xd3\x8e\xb8\xa2}\xd1\x9f\xb7\xe7\x07\xa2\xac\xa9g\x9a\x05\xc2p\x04o\x86N=\xfb>\xc9i\xcf\xe5\x7fHr\xcdS\x13\xe8\xd5\xb7\xe4\x90\xf5\xdb\xff\x0c\x1f\xfc\xeb \"\xaf\xa5\xfd\xb9\xcb\x8axM\x0f)\x0d\x08SUp\x9d\xd2\x0dMU\x8e\xce\x9d\xe80\xbb\x830\xcerJ\xd62;\xab4\n2\x9a3\xbd\xc0$dH\xb3\xae,\xe1!\x9a\xb5p\x8c\x87\x1b\xb8\x8bh|.\xfb|\n/_\xc2\xf3;\xe9^'\xb9D\x9e\xfb\xe2\x1e)\x8f\xd1?_\xc0U\x0c$\xd2\x08)\x11\xf5\x0fHF\xb3\x0b\x99\xe5\xc0q\xe2\x0e8up\xcf\x13\xf8\xfe\xe3\xed\x9b\xe5\xc7\xeb\xdb\xab\x8f\x1f\xea\xe7\xfc\xb6\xb5aY\x1c\xd3]\x1dC\xcf\x8e/\xff\xe7\xcd\x8d\xe3\x8b\xcbonn/\xaf>8\xbe\xfa\xf0\xd1\xf9\xc1\xf2/W\xb7\xdf.\xbf\x7fs\xdb\xfe\xb4t\xe3`\xa6 WK\xcf\x82\xa7\xc9\xb0\xd6s\xb5\x00\xa7\xfdm\xf2\xf0\x81\xd7\"\xea\xbe\xd7-\xa5\xee;\xd3\x82\xea\xbe\xd5,\xab\xfe3\xe3\xe2\n\xf0Z\xe2\xaa\x91\xfb\xb4\x01\xc0\x84\xebG\xb1U\xb5\x9e:^}Pr\x8d\xd2\x10\xe1\x03\x8d\xf5z\xc2\x18&5\xae\x8dqN5=\x15'_%\x87:&\xc6\xd8cgI_\xb4\xffP\xeb\xf6(\x8b\xc4\xf9u*\xd7\xff\x85\xee\x8fU\xe7\xb1\xb2\x06z\x8c\xf0\xe1\xe3\x8b\xd6\xff7h\xd1\xab\xc7\x8a\xc1\xda}W\xbf4G\xe1g\xce\x07U\xfa\xd02\x9e\x90\xee=\xf6\xb3\xc9\xd2\xac\xe0/\xbck\xba\xae1i\x85c\x11\x87<\xcf\xb4\xac\x8f\xc9\xff\x91\x1d\xa20\xd7\xfa\xdcn\xc28\xa0/\xa4\x95\xf1U\xb6\xbe\x87\xdf/\xfe\xf8\x87\xb6 \x14\xe6\xf9\x99\xfe\xe3z\xf0\xc2\x86=\xc3\xb7\x86\xa9 `\xec:\xd6\x01\xcf\xd2\xe6my%\xcf,o;\xf7\xae^_(\xef,M/\xcaP\xb6f\x81\xba\xa6Z\xdd\x8a\xc2\xd8h\x1c\x0f\x1f\x13\xad\xef\xcd\x00^\xa7\xb1k\xa4\xfd\xaan\x05h\xed:k\x87&-\xe8\x96\xda\x13\xdaw\x13Zx\xa3\xdbx\x8e\xe52\x87\x02\xf1:\x14c `\x8d\x03\x84a\xe0a\x14x\x1a\x04\x06\xab\xef\xe7q\xc0\xda\xec?\x84\x05h\xb7\x01\xfd\x16X\xd7\xc2l\x07\xe2\x17[\xf7\xb5\xd1\x16\xf4Zx\x01\x9e\xcb_5s\xc9\x16\x01'\xb2 Of\x15Nd\x17\x9e\xc22\x9c\xc26<\xa9uh\xb7\x0f\x9d\xfb\xddm#\x8el%\"\xedD\x1fK\xd15\x8b\xfe\xd6\xe2x\xf6b\x07KQ=[9\x89Y+a5\x88\xdd\x9f\xcd\xc1\x889\x18q\xea`D\xf7\xa4\x81=\xc7\xa0\x8a\xaes\xa7\xf4u\xe3I\n\xe4 \xa6[\xdd\xde\xb0 \x06N\xb3\x89\x871^\x8a\xa8\xf7gy$B\xfb\xe0\xc0\x80\x99\xa0j\xf3W\x89+\xa8G!\xcc\x0fB\x0c@\xd4@\xf2!\x0f@\xd4\xfbC\xbd\xfd\xe0x\xf7a\xc0\xecP\xcb0\xe8\xad\x07\xdb;\x0f?\x1b\xe2=\xdfv\xa8I\x81\x96\xb2\xe2\x7f\xe2\xb2\x85}\x12\xc6[\x89E\xa2\xb5{3\xbb\x9c\xf9\xd4\xc8\xb4B\xca\x99\xa3\xceO\xd2\"\xad&\x08\xa9\xfd\xae\x19|4|\xa2\x0f:j>\x1e=\xd8\xa8\xa1\xdb\xf7\xb5X\x1e\x92`\x06o\x8f\x83'[\xaa\xb2\xe3\xdb\xd16\xef\x9ejm\xa7\xad\x89|8\x93xoF\xf4\xdb\x18\x08\xdf=\xd0\xe3\x0e\xf1\xf6\x83\xbb\xfb\xb0n=\xa0\xa3\x0e\xe5\xe8\x83\xb8\xc6\x033\xa5\x9b\xd3\xe4c\x99]f\xee\xa5\xaa\x1a\xb8\xbc%'\xf0\x93\x9c\xc0C2\xbaodZ\xaf\xc8\xb8\xfe\x90\x13yBL>\x10\xe3~\xb4{\x0cF\xf3x8}\x1d8/\x87 \xdb~\x9e\x8dq|\x1a\x06\x0b\xe2cC2j\xe8\xdf\x94\x82n\xd9g\x96xv9g\x94nN\x99\x86\x94d&\xf95\x99\xd4\x9aLV\x8d$\xa1\xa6\x90KcH\xa3Ie\x90~\x1b\x84\xf1\xb6\x97\xa7\xc3\xf8\xc6\xb5A\x90\xb5]\x8aC\x9e`/\x8dy\xf3\xf3\xebS\x9aT\xe5\xf0\xbcm\xebG\xabe\xe5xb\x1d\xa7\x03:\x06\xc8t\xcf\xaaW\xa7\xe8V=\x99\xa6SW\xbf\x1c\x08\x14\x1a\xfdg:\x17\xc8 6\xf3zB\xbd\xd1\xb2\xbe1L\x87\x7f\xd9\x8b\xef\xa1\xbf\xab\xb1=w^\xd7\xa2\xff\xe7=L\xd9\xb7\xc6d\xfa\x0d\xa6\xd4q\xdd\xce{\xeb\xb9nW\xe3\xe8\xban\xbf\xfd\xf4\x9d\xae\x9fQu\x1eh-n\x97\xdb\xaaf\xb7\x8e`_[,k)\x1e\xf6a\x9c\x97\xf2\xa1\x976f=,;\xf7\xd9\x0crAZ\xf2\xb9\xac\xba\x15$!/>\xc0\xfa(\xbf\n\xe3M\xc4\x03rK\xb6i\x96\xa2*\x1d\xbe\xef\xbd|W\x9f\xc4qA\"Y\xd4\x0e\xc2\xb8\xea\x17X\xbf\x9a\xe1\xf6\xe4\x8b\xff0\xee^\x11~\xd0\xaaW\xe9l6\xf4\xbaMH\xb4\\%\xf1\x9ab\x14\x92\xec\x935b\xc4\x96\xc1\x1b\x10\xed\x81\xe4\xc9\xbe\xba\xa0\xbb\x8a\x92\xe0>c\xcany\xa4\xc4\xedi\xb4\xc4\xf4\xe4\xb0\xa28']\xcb\xae\xd9\xf0\xc0\xba\xd6q\xbd\xd4v\xa2PE\xedau\x15Dc\xfc\x01\xfbd]Dta\xe4^\x1ei\xbb\xe4\xab~\x9d&\x0fa\xc6dk\xcft@\xc1<\xcbC\xd9\x8f\x07Al\xd1\x84N\xbf*x(K'\xf2\x99\xf2\xe2\x1e\x82{k\x1f\xf2\xa0\x81\xd6bh\xdf\x8f2\xd1\xc0\x1a\xa8lv\xf1\xac\xdd\x87)v\xd9]\x81+\xc5\xba=I_\xb2\xfeH$\xaf\xb6\x92\x81\xd4\xd5\x07x\x12w&\x89 \x02\x97\x8d\\W\xd0\xbaDm\xbe\xf3\xedI\xd1CC\xacw\xe6v0\x98\x9ab\x0bJ\x0b\xb6\xbe\xf9\x8c\x83\x9b\x10\x00\xa3\x9a\x00\xfb\xa1\x05\xa3.\x00\xa32p\xe3\xf8\xaa\x0e\xb0\xa9\x0f\xbf!q#x\xdc\xeb\xc3\xaa\x140\xab\x15\\\xff(\xf5\x02v\x15\xe3\x18 \x93>\xe2\xa3n&y:_l\xa3\xa6-\xf5\xaa\xc1\x88\xc8\xed\x9a\x15\xab\xec@\x02\xb7\xc9\xd3J0\xd2~\xd3\xa9\x1c\xeba\x80\xd6\xa6P\xb7\xcf\xc3x\x1d>\x84k\xae\x9e\x94\x9c\x90{E\x14\x94\x13\x95\xb8\x9b\xdd\xb0\x8fDW\xd7\xba\x10k\x8bx#\xc9<\xbb\xc8kH<\x95WV\xceh\x80\xa8\xd3- \xd88\xdc'SL[\n\xd8\xb5\xa8\x06\x86\xef\xcf\xecYD\xb2]\x18o\x87\x1d\x1d\xb2p\x1b\xd3\xf5R\n\x86\xc70^'\x8fN\x8e\xae\xc4AS\x1a\xec\xc3x);d\"\xc6\xbb\xb7\x86\x0d\xb1N\x1e\xe3<\xdc\xd3\xe5_I\x18-\xd7\xb2\xc2\x98\xb37N\x96\xe5\x86\x17\xbdO\xe2\xe5:)V\x11\xe5X9\x9b\x1a\x10\xe9\xf4(\xf0\xea\xd7\x9d\xce\xe6.\x8b\xcdu4\x7fYr{%r\x03\xd5\x9a\xeb\x0c\xf1\x0e?\x8c\xb4\x835v7~\x1b:\xb8\x0bpJ\xa7\xabs\x9c\x9c\x86\xec\xb9\x93\xea\xe9\xe6:k\xcf8\xee\xb3vaA\x0e\xc1\x89\xfd\xba\x9e\x80+K\xab`,M\xef\xe6\xf5\x9bp\x1b\x87\xf1\xf6*\xde$=\x19\xfe\x81D|\xb1\xc2x\xbb\x0c\xe3\x8d&\xdb \xcd\xfad\xbdNi\xd6\x89\x1e\x989\x87W\xc4\xd9i\xe3\xc3\x88\x05\xb5\x98e\xdf\x8a\xac\x1e\xa2\x8a\xfcp\xef'\xc9\x93\x94g\xe1\xf2\x02\x9e\xe21\x925\xfb3\x85\x8f\x9f\xf8\x0fE\xfcW^'\xac\xd1i\x18\xaf\xe9\x97e\xb2\xd9dt,,]\xe9\x15WlHU\x9f(\x830\x0eR^\xa2\x88\xae\x81g\xf6\xb1\x1dPyu\xcby\x11i\x05k\x8a\x17\xc4\xecG&\x92x\xd0xO\x8e\xe2\xbd !Ox\x88\x99\x06\xc9~\x1f\xe6\xe2\x99\x91\\f^\x851\x04I\xfcWY\x13^\xf8\x1d\xb5\xafY\xdc\xdd\xf0\x9e\xbe\xe1R\xef/\\4\xdd\x95\xf6NN\xd3}i\xf2pr\xaa\xa4\xf7\xbb\xef\xc2,S\xcd\xbe \xf3\xcb4%\xc7\xbb\xa6\xbfT,\xc9\xb2\x88\xf3\xb0O\xf2\xb7\xb9\xfaW=m/\xdc\xd3,'\xfb\x03\xf0a$\xe9\x9b\x14\x0e3\x89\n\xac\x0b\xca\xce\x83Q\xf8@c\x9ae\xa5\x00m\xe2\x9d'\xfbU\x96'1\xfe\xcd\xac\x0eZ\x1a\xd6\xf8\xcb\x8e\xf2\x9c4\xb1L\xea\xc1\x04\x8e\xe0\x8ed\xa2\xfc^52\x9c\xdf\x87\x11C9)\x84\xdf\xb6\xfc8\xa3\xf9\xd3\x05\\\xe52\xadNS\x96\"\x0e\xda<&8\x84[\xe3\xf4\xa7\"|H\xc4k(\x0c\x17\x91\x8ezT sI\xbc \xb7EJ\xd7\xb0\x0f\xb3\x15\xdd\x85\xe4\xa1\xfd\xb4\xca\x9e\xaf\xbc\xd2\x93]\xbf\xaa\xe6\xd5C}\xf65\x18\xf5:s\x9a8\xbcA\xc1Z\xf7\x89M\xc9Z\x1b\xda\xb7\xd8$\xaa\xd6\xael\x07a\xeb\x12 \x13(\xdd\x13\xa8\xddI\x15\xaf]\xf5\"W\xc3\xa4~O\xa0\x80m*\xd8\xae\x841\xecr2E<\xbd*F*c\xe4\x8a\xf7\xdd\x7f\xc3\x95\xf2Dj\xd9\x85\xfct\xaa\x19\xa7\x9cm\n\x99DQ\x85@\xe5\x18\xd7_\\\xf5<\xee\xcd\xd7M\x9b?a\xe2\x05\xbf\xdc\xeb\xa6`q\xc9\x03\xf7\xa7o\x9b5t\x92\xc6\xeb\x10a\x0c\xdbO\xd7\xaf*sM>\xd3\x90\xc1\xe3\x8e\xa6\xe2\xc1\xcbzwA\x92\x8aO\xf9\xa3\x12\xd2n,\xdfv`\x12\x94\xbb\\\xea\xd3m\xcdQ}{\x93\xec+\xc4\x0c\xaf;\xa4\xf4@\xf9\xe3e\xdf\x90\xb4\xa4\xab\xf9I\x92\xc6\\9\xa3t\x1f$Q\x8f6\xb8-Z/\x1fP\xbd\x9d\xb7M\xab\x93D\x9e\xe6\xac\xc6\xc4\xd4\xb2\xbc\xc9\xac4\xec\x0f\x93r\x18\xd9\x884\x99\x8f\x9eX\xd9\xe4\xfd\xa8f\xe2\xa4\x06\xe2D\xa6\xa1\xc9(t\xd0Xg\x08Nj\x02\xea\x8d?\x93\xd9g[\xf2\x93\x98zS\x1ayN\xf3n\xc4\xfd1\xcc\x8c\x1b\xdd\x803\xa1:\x8d\xd1f0\xd7\x94\xbc\xce\xf9\x8b\xb7\xa5\xb8\xfe&\x89\xd77\x8d\xb7~4\xeb\xd0\xbe\x93\xf3\xcd\xc7\x0f\xafm\x8f\xd5\xb4\xbf`\xff\xe7\xf8\xf9\xea\xc3;\xc3\xef\x8d\xc6e\x8e\xb2\x1d\x05\x13\xc5\xab\xd9\x96\xc6j\xed\x11\x8f\x92\xe0\xadk5\x86\xb1^\x806\xcd8\x860\x96\x99\xce\xd5\xaek\xbft\xa3\xa7\x10\xebQ\xfcK\xc7\x06\x82'\xe5\xab\xc0B\x92;z\xbc\xfa\xf0Nuy\xf5\xe1\x9d\xb5\xcf\"^ ;\xc8\xd8\xa5B\x11\x81`\x1d9\x03\xdf\xbdbr%\xcbB\xefD\xfc\xa0l\xc83\x9e\xcc\xc9]\xed\x0f\x1bI\x0f\xfceq\xee\x1eT\x1f\x81\xccS\xe7&e\x19j\x0bRJDVb\x9d;\xaa\x11=\x8f+l\x0c\x0fk\xbe1\x1f\xd6\xb6L\xe4k\xa2\xcd\xdf\xe8\xdf\x8aS\xc8\x9aFt\xcbOZ\x17\xc0u\xbe\x8a[\xb6\\\xdf\xe4\xcbr\x086\xaa}\x83\xaa*\xa5\xab\x8d^\xdb\xa0\n\x986y\x10\xb93\xe9\x96:\x11\x15)6\x83\xf1\xadu\xa3E{M\xc2\xe8(\xac)\x92\x95o#\xb7t!\x9f\x96\x11\xe3\xe2\xc0l\x8c\xce\x1b\x18C\xed\x92Z\xb7\x8a\x05\xf8c\x97\xa5\xa1\xd7\xa18\xc9db\x92\xfe\xaaM\xb5\xfd\xaa\x0bC\xd5\x9fZy\xc8\xea\x82Fk\x078w\xf6\xa7\xfa\xfeDn\xef\xf6\x1a\x1b(7\xd1\xce\xd0\xed\n\x0c\x06'\xd9\x0d\x96\x9d\x80\xc5q\xf2\x1d`R\xbc-\xa6\x18$\x8b+\xdd\xdc\x11\xca\x06\x96|]\xc3\xca\x8f\x1d\x99\x99u\x8f\xb2S\x9b\xb4\x16\xcdjJrW\xecI\xfc\x1537\xb9\x17\x85\xbf0\xaaN\xdd\x1a\xcd\x12\xaei\x9c\x87\xb9;\xcb\xb15\xb0jW7G\xc4\xd5\x1c\x12U?\x96\xaf\x07\xc19\xfd\xb2\x80\xcf\xd7I\xca\x0fw\x7f\xa6\xc7\x15\xc9\xe8\xd3\n\x8fG\xba\xcaB\x7f^\x93\xcd\xb4X\xa8\xdf\xa20\xbe\xaf\x06\xcahP\xa4a~\\\xf2Wd\x03\xcc\xc9\xb91b\xbb\xbdvh\xba'a\xc4\xc9\xae>\x07\xf9y\x85\xc8\x9a\xe6$\x8c\xdc\xce\x87\xd6\xf8\xb2\x99\x1cV\x9e\x89\xca\x81\xe5\xaf\xda]RcN\xadQU\xfb\xd8\xca\xe4\xdf\x86\x19;\x10\x04$\xea\xe1r\xd9Q\xb2\xd6\xb19\xda\xb2y\xa0i\x16j2\xb6\x84oeE\xb20\x90N\x06v\x84i\x7f\xa5\x1f\x0b\xac\x81H\x99V\xdd\xfd\xb3#F\xe0p\x92\x02\x90\xc3a\xecN]\x91\x87WI\x9c\xd18+2\x08\xc8A<\xeb%\x94\x99\xfasZDU\xc16v\x84\x156\xa9\xa2(\xff\x9a\xffO\xb0#a|\xa1\xcb\xbe \xa2B<\x9e\x1bE\xb5O\x99\xedA\xd8\xac\x8a@\x8c\xab\n:\x88\x11\xa5\x06 \x87C\x14\x8a\x93\xff\x13M\xddjv\xbc\xa1\x90\xa7$\xce\xc4\xab\xba{\x12\xec\xc2\xb8\x15\x0b\xe3\xe3\xf9<\xe52bVV\xcf|=}\xe4\x90\xbf\x11\xcdI\xa8\x9b\x8d\xe0\xf8CJ\x1fFg\xf8\x1d\xc9v\x03XS\x13\xf1\xe0\xc9\xa6\xf92\xa3\xf9\xb2+\x02\x14X\xb0\x05\x07\xc6\xbc\xb9.\x86Q\xfe\xc8\xfb\x0e\xe3\x9cnij\xf8\xc6\x1e\xd5\x03\x0ba\xc0M\x1cp\x11\xa8\\\xd2k\x92\xe6\x19\xcd\xbf\xe5t\xea2\x84\xf0\x94-u\xa8 8\xcd\x1c\x8db\x1d\x8a\x9d(\xd8\x89m\xd8\xc6\x97\xec\x0f\xa3\x0d[\x05\xeaF\xeb\xb2=\x93M\x9a\xec\x95T\x81\xa4\xc8\x0fE^\xfd\xad\xda7\x8d>x\xfcm\x02\xdcJ ;Z\x8f\xe4p\x18\xad/\xceW2T4Z\xa7\xf4\x81\xd9\x81\x01\x1d\xad\xc3r}+u\xd5\x11y\xe2B?M\x97\xbe\xf9\xb9\xb8\xdci\xb1'\x1b\xa7\x8aR\xa5 \xdf\xde-\x8d\xd7<\xdc\x90\xcbm$\xc4]\xa5\xa1\x1eH\xa4\x0d\xd8L\x93E\xc5\xfe\xce8\xd9D\x0f\x87\xd8jL\xbe\xddW\x83\x0c\xeao\xed\xa3\xdc\x93\xacl\xf7\x1f\xb0\xa2\xc1\x0eh\x1c$2\x8a\xfa\xa7\x9b\x8f\x1f\xda\xe9\x19\xd5N9\x14+M\xc4\xdd\xa1&\xecJ\x825]\x16\xa9AK8%\xb8\xcb\xbc\x12p \x9f?\xbd\x7f\x96\xd2,)\xd2@\x1e\xc1\xb8\xc7RTda\x07_~@\xda\x84\x92v\xb9\xbc|\xc9\xd9\x89\xa6!\x89\xc2\xbf\xe9\x93\xac@\xcc0O\x82$\x82U\xb1\xd9\xd0T\xc5\x86e\xb4L`\x0f\xfb\"\xcb\xc5\x99#\x8c\x81\xe4\x10Q\x92i\xf3m\x80\x87c(\x9c=;\xe3~\x01\x12\xe44]\xf0\xa7d\xb9\xe7'\xa3\xdb=\x8ds\x85\xde\xe7O\xef\x9fdp \xf9N\x0cQ\xde\"0\xf5\xcd\x1am\x8a(:\xc2O\x05\x89\xd8\x9c\xd7\x82\"\xb2C>\xf7s\xc2\xb6\xb2\xa9\x8b;6\xdc\xb3m\x92l#\xba\xe0\xb3_\x15\x9b\xc5kyw\xe3\xee\xa9\xc0\x96w\x9a\xed\x92\"Z\xb3\xd3<\x8f6\x06$NbvR\xe1\x9b\xdb\xd4\xff9]l\x17\x17\x8cD\xdcn=[\x9c)\xe77 \x02z\xc8\xe9\xfa\xa9\xf9u\x83\xab\x18\x0e\xdc7\x11\xd0\x0b\xc8)\xd9gPd\x05/}*\xe2\x99\x870b\xd8\xe4\x89\xb0\x9d\xc3\x98\x07\x85\"Y\x15G0F\xbe\xa3G\xd3\x00\xe2\xd6%\x84\xb9\xaa\x1c*\xadp\xb6\xb8\xf4\x0b_\x98\xcb\xf8\xb8\x80o\x93G\xfa@Sq?\xf0\xf3\xa7\xf7\x99\xf4\xff\xb0&\x86|:\x06Y\xb0\xa3{\nw\xbb\xa2(y\xcc^\x18i\xfe[\xb8\xdaT\xd8\xb1\xc5\xe2\x97\xf8\xd7t]N\x80\xfd\x91dY\xb17=\xcc\xce\xbb\xb9\x8c\xe1\xdb\xdb\xdbkx\xf7\xe6\x16\x92X1\xb8\xe0\xec#/~J\xe0\x876\xe3\xdd\x1e\x0f\xf4\xc7\x1f~4\xf5\n*\x01%V\x8b-\x14\x0b'\xe9!M\xd6E@y\x943M\xbb\xb9i\n~\x0b\x97\xd5I(\x03\x92R\xc62\xc9\xa3p0\x06$`\xdb3I\xee\x8bC\x99\xe1\xb1\"\x19]\xcbY\x98q\xfb\xfc\xe9=G\x84G\xde\xf3\x1d\xdd\xd7\xb8t-\xd8\x94(\xbc\xcbp&\x89\xbb\xaf\xc6(\x10X\xf0-\x98\xd2M\x92\xd2\x0b\xd5\x9c\xf5J\xf2p\x15Fa~\xe4\xd5\xcb\x95\xa7\x8d\x8b\x8c\xf4\xa1\x93\x10[A\x12K\xaf2o\xc2w\xca\x02\xce?gT\x9d\xff\x19!\x18+\xb1]/x\x89\xc4d\xab3\xaa\x05\xacR\xca\xbd\x18\xaa\xdb\xc5S\x13\x8d>$9}!\xeb\xdf\xca\x9c\x03\xc2g e\x82\xacm\x10\x1d\xeb\xb9J\x82w\x12\x9e\\\xa5KP\x12\xa0X\x08R\xca\xe41\x15U\x0d\xc32\xd6Vz \xab]\xb2\xa2\xdb0\xe6\x11\xd9\xc70\xdf\x19\x85\xec\xf1@\x17\x82O\xc9!\xcc\x16A\xb27K\xac\x1b\xbek2\xe9:\xcaw$n\xef~8\x97\x0eC\xba?\xe4G\xb9\xcd\x9e\xc2\x9e\xe7\xad\xac\x8c\xdc\xc5\xd1\xe7\xe9\x19\xe5;\xe3\"\x86\x9f\x1dh\x10n\xc2\x002\xba'q\x1e\x06\x99\x8e\xef\xb5\xd7n\x058\x15\xb3\xe3`\xd5\xd2\xdc\xdf\xb1\xfd\xbd\xa2\xca\xfbU\xd3\xb9\x1d\xe5\xaa\xfc\x12\xab\xe4\x81\xaayH\xde\xeb\xce\xc1m\x1e\xdc]\xc6\xc7;\xa5\x97E)\xa6t\x15\xe6)\xdb/\x16,\x94\xa0$Q\"9\x01\x88n\x15\x98\xf0\xe2\xb2V`\xb2\xb2\xda\x17\xa5\xe1\xa0\xe5\x94k\xc5\xabQ\xb8\xe2\xe8I\x11\x9bAV\x1c\x0eI\x9a\x8b\xa2\xf1\xc1\xfd\xb3\"f\xffaJH,a\xa6\xb6\x83I\xe7&\x1b(r!\x15\xd4\x0e\xcb\x98L\"\xebu(\xfd\x98[\x1a\xf3z^k\x99 V\xda\x95l\x14A|]\xcfo\xbe\x10\xc6y\xf0\x9c\x1d\xa2e\x9e\x91D\x8f\x94D\x0ccx\xf5\xbb\xdf\x99\xf7\xc7\xdb$\x81M\x92\xc0KX,\x16\x86\xa49\x8e\x07\x89\x8f\xa6\x9fI|\\0\x0c\xde\xa6\xc9\xfe|\x93$OM\x1f.\x16&\x15\x10n\xe0\x9cu\xf3\x99\xe3\x7f\x9b\x9c\xff\x86\xf5\xf3\xd4\x94\xf5g\xed\xeb\x1f6b}\xed \xd6\x9f\xc8\x03\x19\x87Z\xf0\x92\x9b*l\x88\x81D \xb3\xf3\xb7I\xb2\x08\"\x92eV\x9a\x08\xd4X\x131\xb5Z3\xd3\xe8Zb\x95\xd4\xfa\x83\x83Z\xd7\xc7|\x97\xc4F\x9bC\xe0\xf36I\xce\x17\x8b\xc5S3\xf7\x08R\x9d[\xbe\xe0\xfc\xc5\xc9\xd8\x87\x8a\xac\x83+A\xc4\xd7on^}\xba\xba\xbe\xfd\xf8\xe9\xa9\xc9\xb5%\x06\x14\x9ch\x1bR\x0cj#\xdf\x1f\x1d\xe4{\x97\x18m\x17F\xba\x17/\xe17\x87\xd5\xe2m\x92\xfc}\xb1X\xfc\xc3\xf4)\x89\x8f\x17\xcc\xc0b\xdf\x1f\x84\xf5\xf0\x1dI\xb3\x1d\x89\x18Qm\x130\x13\xad=\xbeq\xf0p\xd3\x1a\xfas\xbc\xaf\x06\xe7\xa8q\xe6\xe7_\xfd\xebK\x88\xc3\xc8\xc2\xc06\x8c\xb4\x9cz\xcb/s\x07\xf7\xa5\xe4T\xb61\xac\x8e\x95\x05\xa2\xa4:/\xee\xbf:\xaa|'\xa6\xc3u\x9d>\xd1X\x18\xcf\xd8\xb1n\xc1\x7f`V\xd8\x13f\xba\x97\xda\x86i\"\xe5\xe1\x17\xeb\xac\xeb\xb6\x14\xeeqtT\x07\x95\xcei\xb1\xb4\xf3\x80lr*\x0c\x13~4}\xf2\xec\x89\xaeS\xa9}\x14\x1a\xe2@D%\xff\x9dm\x92d\xb1\")\x9f\xc0\x97g\xc7\xc5\xdf\xce\x04\x0d\x84\xb9o:\xcb\xf0\xe1\xcf\xd8\xd7L\x12j>\xf8\xd3\xcd\xc7\x0f\xba\xbf\xbf|\xf9\xf2\xa5i\x95X\x9b\xea\x00-\xd3\x1d\xd9\xd6\x94f\x828G\x14\x19U\x99\xd4\xdb\"\"\x9d[\x13 R\xbe[\x9d\xb0\x06kZ)\xfb\x8b*{]\xee\xb6\x0biGh\x8f\xdd5U,\x1e\x81\xb8\xfboF\x9a;y\xa6,\x0d\x98:\xa1\x17j\x93\x9b\x0fn\x8c\x0f\xd8F\xaf\x8eT\x9b0\xa2&A\xac\xc4\xc25M\xb3$\xb6\xec\x11\xe9\xf3\xe0\xa9\xd3K\xbeT\xe6t\xf7\xeas\xee\xf4\x94_\xb7\x13\xdeK\xd0+\x03\x00\x0b6g\x9cTg/\xe0L\xb7i\x9aS_\x88\xb9\x9d]\x98{\xe3\xb3\xfa@\xf6\xac\xc7\xff\x14\xa8\xff\x97\xe5s6\xab\xd6\xd7>S\xbb\x92\xd5t[\xcc\"\x169\xcc\xe0\x91F\xd1W\xf7q\xf2\x18\xf3\xed\xbd\xe3\xc9\x19\xb2\x04\xb0i\x0f4\xb9\xf3BX\xa8-\x96\x15r\xa860\xe3@\x1ez\xe4\xfc\xa7\xeb\xf6\x8e\xef\x0f\xc5\x92\xa2\xb0!w\x8cT\xd8p/\x90de\x90\x1e\x18\xc9\xc9\xba\x1e\xf9P%\x1b\xc39\xcf\x7f\x95\x04\xe8\xb8\x01\x94\xff\xe9\xc7\x1f~|j\xe6\xf8\xe1l\xd2\x1c\xcd\xc6)\x9c\x1e\xac\xc3\xe7\x8b\xaf\x9f\x7f\x9d\x9d\x19\xd7\xbd\xf9\xff\"\xc9\xdc\xe4fE]\x1aTy\xea\xf2\xba\xcd\xa3\xcc!o8\x82\xab\xf4q\xf95\x0f\xc5\xc8Rf*;V\xe4\xfd\xb7\x06\xcb\x1ai\xc3\x06\x14\xb2F\xb6m;#\x16\xce\xc5@\xcf\xca\xf4S\xf9/\xee\xdbkwl=n\x9a_Oqe+\x9b\xbfm\xe5-\xdb?\xacg0\x9b\xbe4t\x88\xccjV\x90'\xf7\xd4\xfc\x9a0&d zP\xc9*B)\xf1\xe48\xee\xc8\xe2\xbf\x9d\x87q\x10- \xa3\xd1\xe6+\xf9c\x98\xc4\x9dU)\x93\xea\x96\xd9\x8e\xa4:\xef>\x1e\xabv_U C<\xb7'\xfe\x18fY!\xfcm\xcd\x14\xf9*\xbd\xaf\x8bc'\xfd\xcb\x88A7\x17G\xaa\xec\xf2\xef9M\xf7\x99-wKA\xde?\x1e\xa2I;\xab\xc0\xe9u\x197\x15\xad\x02]RZ\x05~h\x8d\x9d\xa8V\x81&e\xad\x02?$\xfd\xd3\xd8*\xb0%\xb4U\xe0\x87\xcfhIn\xf5\xfe;\xe9n\x15\xf8a\xe7\x95\x02\xa7\xa0\x14\xfcS\x94\x87h\xa0\xd7\x1eI\x11\xef\x82\x9d\x0c\xcb\x1f\xc5\xe36\xbb\xd6]@\xeevn\xab\xccm\x11k\xafMp\xa8F\xd3\xa5\x1e!g\x85,\\\xd0\x1c\xcb6\xaf=;\x84\x85\xba\xfd\xce\xe3\x17 \xb3\xafrj\x9eU\xd0\xb9\xb5a@)\xe8\xe6\x97\xe7\xcd\xec\xec*\xc7|T\xc9i\xbb\x1eR\x81\x01\xd7 /\x8aT`\x9d\x1c8'\x08\x86k$\x158w-\xb4)0^\x02}\x13L\x97L*\xf0\xc7\xf5$\xa9\xf6Mp\\A\xa9\xa0\xdfl&O\xca\xaf\x83\xe1\x82J\x05\xce9\xb8\x85\x13t\x04\xd4\x08\xd7W\x14\xf0\x12\x944\xda,+\xa3\xd4S\xba6\x17\xa0\xdb]\xe7\xb0\xf2$\xe3f0\xaci\x10\x11q\xc1U\x14\x96\x96\x7fU\x0d\x9b\xa8\xda\xa3N\xdf\xd7\xf2\xbb;9\xdf\x17\x90'[qVS\xd7\xaa\xa5\x0dL\xf6IQf}\xb4\x0f\xb7\xdf\xd7\x10f\x02\\Y\xcc\xd2\xe1\x17\xa6@\xbf\xc8\xca\xde\x9c\xca\\\xe4\x87q\xb6\x80\x1bUJRE\xad\xbbY\x1f\x84M_p\xa0\xf4\xe45:\xbb\x10\x81p\x1e\xcaM\xd2\x94\x069\x04$\n\x8a\xa8t}m\nf\xc8\xb5\xbb-\xe2\x8a~\x19\x9fmR\xe4\x10\xe64\x15\xe24y\xe0\xb6ki\xda\xc3_v4\x16h\xf3\xf0{\xfd\xdc\xd2\xee\xbb\xa9\xb5/Z\xdb&\xcc\x98\xd0\x16o\x13 \x97[m)\xe1q\x97d\xb4*\x84\xd1\xee\xbaN\xde\xb0\x19\xe4\xaf\xad\x91@\xb3B\x91W\x8f\x16\x1e\xdf\xbc*\xc7\xdf\xee\xbbA\xd7\x85|\x15 \x0e\xc9#\x15\x02lEK\xd2\xd25\xf7\xeer\xd6PGv\x8eT\xbb\xcf}\x11\xe5\xe1!\n\xc5\xe0\xcd\x11\xe4\xa7&~m\xde+\xa8|\x8c\"\x81\x8e3W\x8d\xa8\xb1\x10\x0f\x8c\x84\xf5\xabc<\xe7\xae\x16\x82\x90\x17\xd0\xf3$\xfd\xff\xd9\xfb\xb6\x1e\xc9m,\xcd\xf7\xf9\x15\x07\xde\x05\xec\x1eTe\x8d\xdd\xd3\x0fS\xc0,P\x95\x95\xedN\xb4/\xb5U\xe9\x9d\xe9\xa7\xb42\x82\x19)T\x84\x14\x96\x18y\x19l\xff\xf7\x05o\x92(\xf1r(\xf1\x84\x1b;\xe2\x8b]\x91\x12yHQ\xe4\xe19\xdf\xf7Iu\xe1X4r\xc44\xa9AK\x9a\x8a\x17\x8f\xcb\xc9\xa5\x16\xf2#k\xd4' e\xc0\xa8\xfaUj\xa7\xf4\x956L\xca\xb0\xdb\x06\xf7\x7f\xfeF\xdc\xa1\xbf\xe0k$T\xc7\xcd\xfd\xfa\xd0\xdd|\xcb*\xde\x94\xac\xfd\xb5wU\xf4y\xc3C\xc0\x98%\x04\xed\xf7\x13=kX\xc8\xf3\xd3\x0b\x97\xf2\x02udJ\xa6u\xa7\xfe\x9c\xd8xz<\xed\xb4\xdd)\"\x1bE\xc4\xb7\xab5\x06\x99\x9d\xac\xd7\x95\xe9\xaf\xb1M\xd2c\x9e\xd5\x1e]\xe7\xc0\x180?\xc9\x14D)\x17\xdan\x8c\x86\xab@\xdd@\xc3\x06\xff\xfe\xe6\xc8\x1a8\x16e\xf3\x867e=8~N\xa7M\xb6.L\xab6=\xe9\x87\xb3\xbf\xa6\xeb\x1a\xaf\xcd\xeb\xd2[)z\x88\xfe`\x91eD\x7f\xa7\xe5\xa2\x88\x9fe\x10A~\x9fB\xfe]k:\x0d\x1ekY\xdd\x8e\\lD\xeb\xfd'\x1c\xc67w\x8e\xeaCQV\xaf\x9f\xca-\xeb\xf6\xe3\xb1\x1b!#\xda\xc5\xc8\xffS\xae\x9f\xde\x10\xfb\x9d\xc5\xb27\xe0`\xc4\xed\xf5\xb8\x13\x0e{\xf5N11\xf3A.\xea\x96{\x11\x122\x1f>\x11\xc7'\x84\xecE.\xbc\x84\xd5\xf5>q\x01\xabj\xae?\xa0q;\x8dK:\x07+\xe5j\xab\xbb\xc3\x0f4\xd4\xb5\xd4\xab\xea\xa1YM\xb1\x91\xbd4\x1f\xe1\xa8\xb6\xc2\xb4\xd7\xfa\x9f\xb21 \x91\xd9\xbf\x18\x0fZ\xfc\xa9\xabp:w=C$%\x92>tOw\xa6bg?=n\x9bQ\x0d\x9eZ|5\xd9\xb5\x8d]\xe1\xc0a3t\xcc\xec#\xb1^|z\xf4\xa4\xe0 \xed\x1a@\xba~+\xee\xd8\xe6\xe1\x8f\xdf\xbd6\xe0\xf3\x11\\\xbd\xbbmz\x94\xe9\xde\x96\\&N*\xc4\x99\x188\xed\xfb\"\xe2ivY\xb1\xf0\xe1\xa8H\x08\x9f\xfa\xa3\xf0|\xca\xc7\xe9a)|\x06\x01\xe8\xe7\xf1Xw^:\xb8\xea\xf0\xa1\xf2\x01\x0fl/}\xc7\xa2\x82b#\xe5u\xb4\x8c\xd04\xc5V?U\xca\xcf\xac\xab\xc1#\xd4\xa8J\x89\xff\xad7e\xd1\xf9\xdd|\xf0\xcdY\xe9\xe4\xd6\xf7\xe2\xcei\xbd\x9e\xa1\xbe+\xf6E\xe5\xfb\xe6\xc8\x8c\xa9\xef\xf8P\x13\xc4\x9e\x99Z\xc9\x13o\x8b=\x9dK\xb5\xa9\x9a\xe3\xa1Z\xc3\xba\xa3J\xbf^\xc9\x81\x15\xcfE\x1a\xe1\xc2\x84\xfd\xf4\xf3\xcd\xd5[ n\xd0[\x8eB\x0f\x942r|]\x990g\x87\x0f\xb52\xb6Z\xf4m:\xbdMp\xbe\x95\xdaye\xa3\x1e\xfa\xae\xde\xd52?:|J\xa1\xaeN\x17Sa\x98T\x9b*\xf6\xc2\xa1\xe7\xf5p\xa2\xb2\xe7\x8d\x14u\x92Z3|\x00\xda\xfc'\xd7\xac\x18\xa7\x9a\xf5\x0b\xd3i\xa7\x1d\xea\x86A{*\xb9tcd$o_\x8aF\xcd\xb2\xec&m{v\x01\x88|Zf\xd0\x0d\xdf\xe7e\x02\xdbM\xdd\xf4\xf7\xcf\x95\x8avl<\x8e=\x98\x86\xf4\x14\x8f\xd8\xcc\n\xf9\xa26\xab\xe8\x9aK\xbea!\xb7\xacTC\xf3o[\xa1\x8d+\xd5\xba%\x9bW|\x81\xa4\xda\xc0\xe8\xb60\xef&\xe6\xdd\xc6\x16\xbe\x1a\x9e\xcd,\xfa\x1c\xfd\x1bZJt\xd5\xf9\xcc\xf2mkD\x1b[\xda\xd6\x16\xeb2\xcd\xf6F\xb0\xc1M\xba\xe2\xda+\xfa\x07\xb7\xdf\x8f\xde\xe7\xf6\xeb^\xf2\xd9\xb5\x10\xba\x05\x9f\xad\x16\xfbKF\x87\xda\xeeg\x1d{6\xf6\x0cmO<4\xad\xd2\xd1\xf6\x9f\x82\x02&\xff\xf0\xd2\xd1\xbe@A\xd4\x7f\xf2\xbalv\x15o\\u\xccs\xe2~1\x91\xc6\xe5\xde\\\x1f\xff\xfd\xbd\x9c\xb9<\x14\xf6\xdc\xde\x16\xc2\xd3\xc2\x1b\x97\xdb\xc3r\x04\x88Uq?.U\x1c\x0fmx\xd3lq\x16\x85[\xa8+/\xfcF\x95\xa8\xd7\x17\x83\xe2\xa8b\x8d\xeb\xa8i3\xaa\xfa_\xbd\xf4r\x1f\x99\xe7u\xfd\x05\x8e\xfbb\xe3 \xf9\x81\x02\x7f\x1c\xf7L\xd6\xe9Op'u&\x9c\xe4\x1ew\xc8n\xdet\xe8T\x95\xcf=\xea\xa6\xefM\x7f\xb9\xbb7\x1azr\xebu\x0cUA\xf4\xc6\xb2rT\xad\xb5\xd1jWY_\xb2W\x1c\xd3\xedi\xafv)\xed\xa8C\xc1\xa3\xb6g\xb69`k\x8a]V\x9d\x8ee\xf8\xaa\xe2\x8d\x85H\xec\x1f\x96z\xc1\x94\x9b\xda\xb0={,*.\x96\xfeb[\xf0\"rr1)\x99B}\x83\xc0\x9dj\xd2\x17\xa5x\x96\x8e\x1e\xa8\x94\xaa\xf2\xce\xa4\x1f\xd6\x96\xd5n?X)\xbf\x1eH\xfd\xca3\xd2\xe4\xf8\xa3\xd2\xb6\xfa\xbeafW\x0c\x88\x98\xc6\xaf\xebf\xcb\x84G\xbc\xb7\x92K\xab{\xb7\xbaw\xbf\x8f{7~\x0f\x16\xf9y\xc1\xca\xe69|\x1d.g\xa6\x97\xd7\xbd\x84S\xdf\x0e\xfd:\xc4\x04\x87\x023\xc7\x1a\xfbs\x88\x0d\xc5\xa4\x86\x02.O\xc8\xdd\xe1\x01\x91\xa1\xc8\x86\x14\x0fj\x10\xcb\x0b\xe5\x16\x17\xa2\x93\x16\xe2K\x85\x85he\x85\x16\x88\n\x11K\n\x91\n\nQ\xca Q\x88 e\x91\x12\xa2\x11\x12Z,#D$\"\x94YB\x88B@(\xb3|\x10V<\x88L:\x88H8\x88\xe3e\x83\x88D\x83\x16I\x06y\x05\x83\"\x9blD,\xc8\xda\x83i\xa4\x82b\xdb<\xa9LP6\x91 2\x89 *\x81\xa0\x0c\xf2@\x08\xb9\x9b\xa04\x10R\x18\xc8'\xfa\x91*\n\xe4\xab\xc7\xc1\xfd\xcf!\x07\x84\x1f\x1d\x9c\x14Pl\x18\x902@\xc9\"@.i\x84,\x02@\x08\xf9\x9f\x98\xf8O\\\xfa'0ji\xb2?8\xd1\x1f\xb7\xe4\xcfb\xc1\x1f\xb4\xdc\xcf\\\xb1\x1f\xaf\xb0\x0eN\xe8'\xab\xcc\x8f\xd7\x16\xc7L$\x10\xf8!\x91\xf7!\x10\xf7\xc9/\xed\x13\x11\xf6qK\x9a\xb8E}rJ\xfad\x16\xf4!\x91\xf3I\x11\xf3AJ\xf9\xe8\xf8\x02N\xc8G_\x8c\x90\xf1\xf1\x88\xf8\xf8\xac\xc0*\xb3`\x04|\x92\xe4{\xd0\xe2=\x8e\x0e\xe5\x17\xee!\x91\xed\xc9-\xda\x93]\xb2g\xe9\xa4@\xca\xf5\xe0\xc4z\xec\xad\xc7-\xd4\xa3\x0e;n\x99\x1e\xeb\x9cA)\xd2\xe3\x96\xe8\xb1\x11z\xd9\x04z\x02\xc7;\xb78\x0f^\x9a\x07)\xcc\x83\x95\xe5A\x88\xf2$I\xf2\xb8\x05y\x02\xe3a=\x81\\b<=\x88\xc2\x8d\xdf\xc4\xda3\xae'\x8f\x0c\xcf\xb0\x89p\xeb\xdd?\x96J\xf0\xf0yy\x82\x80\xf8N$\x82au$\x9b\xf0NHv'\xc5 *\xc9\x9d\x80\xe0N\x8ay\xf3\xc5v0R;)\x96d\x97\xd9 \x88\xec\xa4\xd85C`'&\xaf\x13h>\x84\xe7\xb1\xcc:\xa7\xb0NXV\x07\xd1\x1b\x1f\xa0\xc7\xd3#ZA\x1d\xbf\x9c\xce\x18W4[Lg\xe6\x1a\x88\x91\xd1\xf1\xd8x\x06\x11\x9d@\xa7\x00\x81y\x0b\x89\xb8D\xdeG\x18\xf7\x9bF:'&\x9c\x93j\xe5\xd9Es\x90\x929s\xfaqF\xb9\x9c\x88XN\xc4\xfa\xd8\x92\x03\x93e'\x9bL\x0eB$\x07\xeb\x0dR \xe4\x84r-\xf9\xc5q\x08\xa5qH\x84q\xe8dq\xc8Dq\xee\xc8$q\xf2\x0b\xe2\xa4\xca\xe1x \x05\x13h\x17\nc6\xbd}!\xb0l.\x7f\xa0\x97a\x19.\x0f\xeaf\x1a\xda@\x0c\x87\x16YU\xcf\x8eE\x8b\xa3\xd1\"\xee\xc8\xfa\xe1\xbbTl\x1a%:-\x03>\x8d\x1a\xa1\xb6\x08\xa3F\x8eR#\xc6\xa9\xd1\"\xd5h\xb0j\x99\xd0jTx\xb5\x0c\x8852\xccZv\xd4\x1a\x0dn-;r\x0d\x8f]#D\xaf\x91\xe1\xd7\x92\x10ld\x18\xb6\x85(\xb6\xf5\xc3w\x8b\x11m\x191m\x84\xa86:\\[\x16d\x1b\n\xbd\xb5~\xf8\xae+)\xa3\x85C\xbba\x06\x05\x89x\x9b\x81y[?|\xe7,8\x0c\xdc\xfa\xe1\xbb\xdc\x88\xb8\xf5\xc3w\xbd\x9f\x87\xc2\xc6Q\xa0\xe3\xa2\xf8\xb8\xf5\xc3w\x18\xa4\\\x1aV\x0e\x8d\x96K\xc4\xcb\xa5 \xe6\xd6\x0f\xdf-\xc7\xcf\x11!\xe8\xf2c\xe8\x08Pt9\xa6 \x12I\x87\xc5\xd2\xad\x1f\xbe\x8b\xe1\xea\"\xc7\xcd\xf5\xc3w )\x83\\X\xbb8\xda.\xc5*\x1a\xc4]\x10sG\x87\xba[\x94\x0fY?|7\x17\x85\xb7~\xf8.\x05\x91\x17\xc4\xe4\xa5Z7\x03\x97\x17G\xe6E\x8cX?|wF\x9c\xde\xfa\xe1\xbb\xe5\x98\xbd(j/\xd6AX?|w^\x0c\x1f\x1a\xc57\xb77gD\xf2E\xb1|\x88>\xc4\x17'\xa0C\xf4\xa10})>'\x15\xae/\x96u\xca\x8f\xed#E\xf7\x11\xe1\xfb(\x11~\x84\x18?J\x94\x1f\x05\xce\x0f\x85\xf4\x83\xf1\x9c\xedQq\xd6\xb2d\x8d\xe2*v\xbd\xaa!\xfec\xaa!\x06\xd0\xa1X\x0dDG\x15I\x00U\xfb\x0b\x8c3\xb1\xa9\x0fe\xcb\xbd\xef\x8e\xf8\xa3\xf5\xd6\x0c\xbe\x80'\xdfK\x05b\xd3_\x9fT\xa7\x9a\x05\xaf\x8f\xfa\xd6\xa5{~%sk4b\xc8\xe5\x85\xe8\x99wW\xb4\xe5F}3S\xf6\xc6ue\xd8\x99\x8e\xb9\xd2\xb2n\x9f?\x17\xf5\x84\"\xef\x8f*\xc5\xf1H\xd9@\x1c\xdb\x02pi\xa0\xbb\xb0)\x8e\xeas\x0e\xca\xe92?7\xa7\xbd\xfe\n\xe4\xb1\xa97\xacm\xd5A\xc6\x8c\xbc\xbcZ\xfeC~\xbc\xef\x95;\xa8^V\x9b\xfdI%\x07\xf6\xfb\xc1\xe5\xc2Q,D/O\x1b\xd5\xb6\xc9?\xaaV\x0d\x92\xa7\xc7\xd5}\xed\xfc\x14\x89\x8a73\xe0MQ\xb5*sp(6\x0fe\xe5\x00\xfc\xc8voKG\xf0<2\xe8~\xf5\xef\xc8\xb3\n\xc7!\xc8\x9832W&\x87\xda\xd7[\xf5&\x1d\x1b\xf6H\xfa\"=\x14\xedC\x86i\xee\xc5\x89\x1d\x8b\x86\xdf\xb6\x8c\xdf\xba\x97 S\xa2g\xebxO\xc0\xb7\x8dZ\x17\xc8v\xa6_2\x1d\x17\x8c\x18|x\xf0\x007\x80\x80\x19\xc4n:|,\x1a\xde2\xfe\x179\x96\xeeI%Od\xfc\xd6g\x1ar\xe6zL\xd1f\x88\xca\xd5\n\xa0\xa6\xa6X(&W\x8b\x1fI\xcc\xe8}X\x92\xea\xc7\xbd\x94i5\xbd\xd2A}\xe2\xc7\x13\xef\x7f\xeb\xdf\xcfI=\xd2\x95$\xb6\xb5\xe7vP\xd4^\x1c\x8f$\xf5\xcay\xaa=N\x92\x06\x988\xadU\x1bFRy7?\xfam\xd8\xb94\x8b\xf5\xaan\xd9\x92\xef{\x06\xec\xb0\xdc\x07\xb5\x1eX\xfed\xb7m\xab\x13\xde\x0d\xab\xb6\xac9\x94\x15\xd7\xaf\xacZ\x8e\xed\x1d\xf8\xb1\xd8\xb7\xccC\xb1w}\xd5\xc3\xf3M\x8f\xe0Z\x1e^\xc5\xe3\xec*\x88\x8f\xdahp\xce\xc3\xb2\x02\x14\xd3\nb\xc3\x03\xd1!\x02]\x85\x9fu\x05\x98!\x02\xa4\x0b\xaa\n1\x03\x0bHXX@\xcc\xc4\x12\x85/gc\xc1\x19\x18Y\xb0\x94\x95\x05\xe7`f\x01=;\x0b\xc8\x19Z@\xc6\xd2\x82|L- dkA\x1e\xc6\x16P\xb2\xb6\x80\x82\xb9\x05d\xec-\xa0`pA\x12\x8b\x0bh\x99\\@\xc9\xe6\x02\xbd!\xa2\x19]@\xc9\xea\x82\xe5\xcc.\x08\xb3\xbb\x00\xeb\x00 \x0e\x9e#/\x81\x8a\xe95i\xc8\xeb\x8e\x103\xbe /\xeb\x0bh\x99_@\xca\xfe\x82\\\x0c0\xc0\xf2\x9a \xce\x04\x83\x146\x18\x84\xf9\x1e\xb3Xa\x10\xad\xd3\x8bq\xcf\xc3\x10\x83\x19\xa3\x89e\x8aA\xb4s\xc9\x8c1\x98\xc7\x1a\x83\xd0@\xe6b\x8f\x01\x96A\x06(\x16\x19 \x99d\x80\x19\xe5TF\x19$\xb0\xca \xc0,\x83<\xec2Hc\x98\xc1\"\x96\x19D\x07\x14\xcd6\x83\xfc\x8c3\x88[\xe7\x9d\xe9$\xec3\xa0c\xa0\x01\x15\x0b\x0d\x88\x98h\x80a\xa3A\x80\x91\x06\x01V\x1adg\xa6\x01\x05;\x0d\xe8\x18j\x90\xccR\x83\x14\xa6\x1a\xa4\xb3\xd5 \x91\xb1\x06\xc1\x8d(HI\x82\x04Z\x12\x8e\xbd\x06\xe9\x0c6Hc\xb1A\xa8\xbb\x14l6\xa0c\xb4\x01 \xab\x0dh\x98m\x90m*\xa1\x19n\x90\xc0r\x03\x07\xd3\x0d\x02l7\xe8\x0e\xa1>\xc6\x1b\x8c\xcf|\xb4\xac7\x080\xdf&\xa6\xe4d\xbf\x01\xe68\xeec\xc1A\"\x13\xceu\xbd\x97\x0d\xe7\xbb\xd8\xcd\x88\x9b^\x1d\xa88\x91\x19\x07\xe0g\xc7\x01f\xfc\xac\xa7\x97\x8f%\xa7\xaa\x8e1\xe5 \xd9B*\xc6\xdc\xb8!\x8c%\xdd?\x963\xe7 O~+\xc8\xa2\x03\xcc`\xc3\x04.\x9e\x8fM\x07QF\x1d\xcc2\x91\x8eY\x071v\x1d\xcc2x \xcb\x0e\xd0L;\x98e\x1b\x01\xe3N\xb5\x11`\xdd\xc1,Kg\xb1\xef\x00\xc5\xc0\x03\x8cAq\xa8\x93M 9+\x1b\x0f\x10\x8c\x811\xde\xb3\x7f\xab\xe2\x9e\xef}\xf1\xf0\x9fTA\xc4\x9c0\x11'\x15\xe8\xaa\xab`\x8cW\x95\xe8\xe8\xaa\x12\x8f\xf7\xaab\x07\xedl3\xc0\xd6.P\xbf\x99\x18/\xb3\x1f \xaf\xeb/p\xdc\x17\x1b\x0f\xec\x17T(\xf1\xb8g\xb2\x81p\xe8#\xb9\x97\xf1\xf0\xc74<94\xc5\xea\xe8\xa9*\x9f\xfb@\xaf\xd5\xcb\xfe6\x7f/up\xf3\xf6\xae\xd8\x17\xd5&G/\xed\xfc\x91]\xbd3\xaej\xfe\xf6$\x8e\xde\xf6\x1b\xcf\x8b\x86\xbbc8\xaa\xa8\x13\xa8x\x17s\x1b\xde\xd7l\xde\xee\xfe\xbc=x\xa1_\x0f\xd2\xf0\xea\x98.g\xa5:\xf7\x0e\xfb\xe2O\xde\x0c\x1a\x1dn\x99W\x15o\x06i7{`\xd4+\xacb\n\x0d\xdb\xb3\xc7\xa2\xe2bc.\xb6\x05/\xdcMY\x0d\x19\xbf\xbch\xd8\xf4\xe5\xd0\x7f\x9c\x13\x82\xfadO\xbf\x01\x8fE\xc3\xcb\xcdi_\x0c\x1c\xdb\xaf\xdb\x81 \xd5N\xba6\xce\xc0\x82DVXu\xe8]\xc1\xcan\x8c\x1a\xe9\x97_o\\\xde\xbb\xe6\x86\xd6[\xefZ\x1bYgck\xac\xe5\xf5\x08\xcb\xbc)\xdduA_\x17\xf4QY\x17\xf4\xae\xfc\xff\xbd\xa0G\x1epd\x8c\xe2k9L\xad\x1f\x9e\x15\xd9o\xa7\xf2\xb1\xd8\xb3\x8a\xab\x15w\xdaU\xf6\xbcaG\x1d,(=\x8c\xe5\x9e3\xd5\xcd\x9a\x11\xf0Q?\x05\xf5\xde\xcb\xe0h\xc3\xa0=\x95\\\x86wd\xdeu_z\x19\xd1\xdd\x99\xd1\x1e\xc3p\xef\x87]\xc1vy\xd4\xdb\xd6\xec(c\xb3:\xa2x\xee\xfe:z\xba\xea\xe5I\xd3W\xbd+\xb0b\x81\x18\xdd\xc9$\xc5I\xb4\xd6\xa4\xa3C\xf9\xf5%I\x94%skJfW\x93\\:)\x90\n\x928\xedH{\xebq\xebE\xaa\xc3\x8e[)\xd2:gPjD\xba\xd5!\xed\x14j6]\xc8\xc0\xf1\xce\xad\x05\x89W\x81D\xea?b\x95\x1f\x11\x9a\x8fIj\x8fh\x12m_\xfb\xe0 \xe4\xd2v\xec1\x05\xee\x04;\xd6\x9eq=}\x88\x7f\x89\x92\xe3\xb0\x89p\xeb\xdd?\xac\xdc\xc2\xf0w\xa4z#\x9f\x97'\x08h5F\"\x18VG\xb2\xe93\x86\x94\x19S\x0c\xa2Rc\x0c\xe80\xa6\x987_{\x11\xa3\xba\x98bIv\xa5\xc5\x80\xc6b\x8a]3t\x15c\x8a\x8a\x81\xe6\xd1\xaa\x1e\xe7\xd4O\x9c\xadM\x13\x03\xa5zzD\xab\x93\xe8WH\xb4\xccY\xa2\x8d8s\x0d\xc4(!zl<\x83\x06b\xa0S\x10\x05-\x85\x15\x0f#\xef#\x8c\xfbM\xa3r\x18\xd37L\xb5\xf2\xec\x9a\x86H5\xc39\xfd8\xa3\x82aD\xbb0b}l\xc9\x81\xc9\xb2\x93M\xa9p\x99\xb8\x8f=\xe4D\xba\x84\xa1\\K~-BB\x15B\x12\xfdA:\xe5A2\xcd\xc1;2\xb5\xc1\xfc:\x83\x08\x85A\x8d's\x03\xb8b\xd0\xfc~\x02\xcf\x81\x899\x80\xfds\xf1\xf8\xbd'\xf3{\xc1\xf1Cp\xf4\xe0\x02\xea9\x93&\xc1\xd0\xbdxy\x04V\x1eo\\n\x8c\xfc?\x94\x9c\x04\x8a\xd8\x16\xdd\x0b\x01En\x1b\xfb\x94\x99\xe9mH\x82[Rgb\xe2\x0dc'9\x1f\xcd\x0dItC\xf5\xc6\x8e\x13\xd0\x93\xdd\x96\xea\x0f\xc0\xd8\xe6,\x94\xb7Q\x9d\x84\xa4\xb7QKsioa/\x8a\x86\xfa6\x97\xfc\xb6\xc2\xffW\xf8?!\xfc\xdf\x9aF^\x12@\xc8\xb3Jf\x03\xb8*\x9b\xc7\xbb\x9c\xeb\xddu/\xdf\xd9\x9c\xba\x18\x8d \xc5m:\x07\x95 N&\x888Ha\xf7\x88\x07(\x05\x88M,\xbcz\x9bBJ,\xc8O-\xa0$\x17d\xa0\x17P\x13\x0c\x16Q\x0c\xc8I\x06\xc44\x03Z\xa2\x01\x0d\xd5 \x13\xd9\x80\x8an\x90\x81p@F9\xc8N:\xa0\xa1\x1dd'\x1e\xe0\xa9\x07\x84\xe4\x032\xfa\x81\xda\xb8\x90\x04\x042\n\xc2B\x12B\x80\x86\x80\xd8\x98#T\x84\xd1\xceMCF\xc0\xb8\x07\xa4\x84\x84\x8c\x94\x04BR\x02\x1d-!\x0b1\x01\x05\xbe\x8f\x90\x13\xd0\xf4\x84\xd0G\xf9S)\n\xa1\xba\x9c\xc0\xcd\x1cD\x85\xb4\xd1\xc2\x91\x150\x83\x82$,\xcc\xa0,\xf8P\xaeYh\x0b(\xe2B\x9c\xba\x80!/DF1\x8d\xc0\x80\xa50\xf8H\x0c\x19h\x0c D\x86\xf9T\x86\xd0\xa0!\xe9\x0c\x99 \x0dA\x8b\x9c3\x95\x80\xd6@Dl \xa16P\x90\x1b\xa2\xf4\x06\x1f\xc1\xc1Gq\xc8Kr\xc8Ns \":\xa4Q\x1d\xd0d\x87D\xbaC\n\xe1\xc1Ky\xf0\xe3\xdb\xf1\x08w\x0c\xed!\x91\xf8\x90@}\xf0t-?\xfd\x81\x88\x00\x91\x9f\x02A@\x82\xc81M\x90D\x08,\x15bL\x86\xf0\xd1!\xcc\xa1\xcbM\x88\x18\x9du()\x11>R\xc4\x18\x03\x9c\x8d\x16\x119n\xba\xa9\x11)\xe4\x084=\x02O\x90@Q$ \x8d$\xe1\xa3I\xa4\xa4\x0crQ% J\x96H\xb1\x8a\x860a7\x12\xb3\xa0\xfb\xc7R\xd2\xc4\xa2|H\x80:\x81\x88\xba\xd8\xb8\xc3\\\xf4\x890\x81\"\xd5,*\x12E\x90F\x91j\xe4|*\x05\x8eL\x91jOvB\x05\x84(\x15\xa9\xd6\xcd\xa0U\xc4\x89\x15\x11#\xc2X(\x1b\x15|FzE\x8c`\x81\xec\x95\x1f\x14\xe5\xe9\x19-\xcd\"D\xb4\x98\"\xb4fS-\x16\xad\x9c\x18\xc2\x85\xd7\xd63P.\xa28\xc2X\x07!B\xbc@\xbc\xb50\x1e\x01\x1a\xf2E\x9c~1\xc7\xd6\xb3S0\xd0$\x8c\xb9\xbd9#\x11#J\xc5@\xf4!\xbe8\xc1d\x81\xcaF\xc8@Q2R|N*ZF,\xeb\x94\x9f\x9aAJ\xce \xa2gP\x124\x08)\x1a\x94$\x0d\n\x9a\x06\x8a\xa8\x01\xe39\xdb\xa3\xe2\x06\x99\xd1\xfd^\x9a\xfe\xdb\x895\xa2\xb2\xfe\x9a\xbe\x9a\x15\x9f*M_\xf1\xa9\x14\xf8T'\x9d(\x8e=\x1dcN\xb1\xba\xd3\x9f\x1c\x1f\x1fw\xcc\xbf\xc0'<\xdc\x18O\xcf\xf3\xf1\x84C\x92\xe80\x0e\xaeNO\xac\xf1|@\x1cc\x8e\xb3\x92i`/\xedc\xe1}\xa5\x9eO\x84\xa7Y\x96\xfbs\xe0\x0e\x06\x11'D\x05G9B\xa8S#\xe2,L\xf2\x8d\xd7()\x08e=\xf2\xcc\x9b\xfd\xdb\xadQ\x12\x10\xde\xa7$\xf9:k\xe8\x9b\xacx\xd3h\xbf\xbfj5\x95\xff\xab\xabV\xf5)\x1f\xcf\xf6\xb9\xe2D\x1f\xca\xce\xfbyl\xc4\xcet5\xfc:5r{\n\xac5\x9e\xe9\xe4[_(W\x96\xc0\x9a\x12\xb1\xd2\xb5\x8eP\xad \x81\xb5\x03\xb3\x7fe^/\xdc+\x05\xc6\x10\xaa\xd5\x81l]\xc0\xbe\x1b3yA\xe1O\xc0'\x9eC\"\x9b;\xc2c\x8f*\x08e~\xf9 \xbe\xa9#\xacF)\x05e|\x19!\xbe\x99\x07\xac\xa6|1!\xb8\x8dc\x8d\xa2zI'\x0d\xe5|Q\xc1MUv\xf4\x19\xb3Wg\xfc\x0c:\xc5\xa7\xcfG\x9f\xecB,R\x19\xd6\xa7\x05+S\xe7\xd7,\xfd\xa8\xd1\xa4\xa2\xd9'V\xc0\x9cZSL#9\xbd\x02\xe6\x04;\xcf\xca\xdc'YX?\xef\x9cs[T%z\xe2\x85\x94\xde$$T2o\x97\xaaDO\xc0\x80\xe9\x0d\xf5\x06\xaaJ\xe84\x0c\xc9fRn\xa9\x8e\xe6ro\xac\x8e&RN\xc7\x93\x9bG\xd1_\xa2S2d?)\xc3\xf9#v\xe1\x13\x82*\xebr\xa9\xcb\xba\\N\xcb\xba\\\xfeN\xcbez\x9c7\xb4F\x92\x9dOT\xa18\xa5\xa82\xf9\xbc0\xe6\xfc\x85\xed\xda\xa8W\xadY\x9d'\xc7\xaf\x9c\xfd\xc2\x9d\xbe\x1c\xa23\x89\x87\xaf\xe0\xa9 \x13m\xcbwZ\xea\x8f\x0d3M\x99T\x803\xe5\xf7\xdf\x7f\xa3\x1bdpe[\x901[\xa2\xa1\x17\xdd\x07QF\xcfL\x94\xcd\xd6\xca\x8b\xeewA\xab\xd1\xfb\\\x06e\xbc\x0c\x16.\xd6\xc1\xb3j#R\xc0\x0bz\xfc\x18\xed;\xab\x82\x01\xa4%\x93\xde\x9d\xa9n\x8e\xd0\x1d~\xd9\xfe\x07N~\xcd[$\xce\x98\xf3\x9a\xb1\x18\x10\xe6\xba\x16\xbd\xfa3\xedY\xf0\xa2\xd3\xbe\xe2\x9e\x17\xa0C0%\xce\xf8\x90\xe0\x1cf\x9c\xa8E\xe6B\xf2r\x1e\xbf\xc0\xe7\x15p\x8f\x98\\`\xf5\x0f\xbb\xf6\x84\xd2q9E\xe3h\xe4\xe2\xf8\x12\xa18:\x89\xb8\x99\xe2p\x84\xb2pd\x82pTRp\xb9E\xe0\x16\xcb\xbf\xe5\x17~[$\xf9F \xf6\x96Q\xe6-\xb7\xc0[Fi7\x8c\xa8\x1b\x89\x9c\x1b\x81\x90\x1b\xc7I\xb8\x11\x88\xb7\xcd\x96ms\n\xb6\x056\xbf\x00\xda\xdd\xda\x17\xf3\xcb\xb3\x85\xb6]2I\xb6,bl$2l\x14\x02l\x0b\xa5\xd7\"2b^\xb95\x84\xd0\x9aK@)E\\\xcdu\xff\xdf\xdd\x9d\x9f+\xa5\x86\xeb}\\>-\xd4U\x84dZ\x92X\xdaX>f\xb1@ZD\x1a-$\x8a\x16\x96C\xf3\x8c\n^\x02-.~6\x95=[$x\x86\x92:\x9b#r\xe6\x14\x13\x8b\x0b\x9be\x934s\xb6?\x9aI\x99\x05\xcc\xb2K\x97e\x16-\xcb+W\x16\x10*\x9b\xca3M\xc5\xc9r\xc9\x92e\x14$\xcb.E\x86\x15!C\xc8\x8f\xe9ss\\xL_\x18\x91\x1cs(r\xb9Z\xc5*G\xc5\x04\xc6\xd0\xd2b(Q\xb1\x91\xf1y\x85\xc4\xb2K\x88\xe5\x14\x0f\xcb*\x1b\xb6\xe4\x81#\xa4\xc2\xe2\"a\xfd\xf2?\x15\x06S\xce\xfdT\x12\xcc\xf2\xaf\xa9\xc4\xc0\xa62`6X \x8b\x00\x98\xe7\xf82\x15\xfd\xc2\xc9}!\x84\xbe0\x12_\x11q/\xb4\xac\xd7T\xd0\xcb\xd3_kds\x88x\xf59\xe8\xa9|\x17\xc6\x86\xf1\xfd}Xx\xaed\xd7\xb0z\x7f\xab\xdd?\xac8\xf4\xf0w\x84L\x17O\x8b+{D\xb9\x02'k\xcb\xe8,B\\> .\xac\x11\x14\xb2[\x1e\xc1-\xacI\xf3D\xb6b\xf2Z\xd8\xd6\xb3Jjy\xc4\xb4\xb0\xb6$\nh\x85\xa4\xb3\x8c\x06\x97=\xb3\xcd\xc9\xbb\x87\xd9+\xc7`\xf7jys\xda\xc8\x93\xaa\xb6Fz\xa5\x15\xc8\x95B\xac\xd8\xcf\xf2\xde.\xee\xb7\xafw\xb1E\xca\x8cm\xe2\xfa\xe4\xc4\xac\x8d\xe6\xefd\xc6;\xae\xb2\xfa=\xc0\xe4f\x98\xcd\xa6\xaa\xf8\x1c\xf0\x8e\xce\xf7E{]\xdd\xd7\x89c\xb3+\xda\xdb\xa7\xa2\xe2\xae\xa8\xa5\xf7\x947\xd1\xa7\xb3F\xe6\xfb\xa2\xfd\x0fY\xa3q\x96\x8c\x0bz\xaaJ.\xb3\xe2Ou\xf3\x05\x9e4fGm\xd7\xfcY\xa6\xe5Y#\xda\xb8\xb0\xcc\x13g\x9b\x9c\xc6\xfd\xd2\xf6\xa6\xf5;\xf7N8\xbd\x1b\xae\x00g\x9b\xba\xd2H(w\x15b\xa0{/\xfb\xb9\x7fEd5\x1aV\x16y^\x9f\xa4\x83\x95\xf8\xb8\xb6\x05/\x12\xc6b\x84\x1b \xad\x1c\x1f\n^H\x0cX\xf5\"[\x81\x86\xf1SS\x99@\xb3yKe\xe4\xa0\xda\xeeY3X\x17\xe0\x9a\xc3\x8f\xbf|\xbe\x99\x80e\xf6\xac\xda\xf1\x0786\xec\xbe|V\xd8R\x89'\x97\xf4!&\x8e\xd8\xe2\xa5\x11\xad\xa9F\x94\xff\xc2\xba\xd6\xba&\x06\x0b \xc6U\x18uU,L6;\xb6\xdeAY\xa9Q\x12O-\xde\xc5\xae\xea\xd5\x0b\xb1\n\xa5\x17\x12\xc4?\xa9\xb2\xc4Q\x01L\x03\x13\xbfvXT\x03\xbe\xef\xbd\x8c&\xa1\xdc\x7f\xfb\xad\xa2l{\xe2\xc5\x17\xf6\xf2\xbaw \xc4\xf9\xbb\xad7e\xd1\x9fP*5\xedR\\\x18\xb5\xdd\xcb\x15\xb6\x85\xa2GK\xc2\x96=\xb2\xbdxh2vTp^l\x1e\x86)\xe3\xe1{1\x15\xee5\xfc\xc2\xf7lWV\xef\xf7\xf5\xe6\xcb\xab\xee\xb7\xabj;\xfa\xe5\xf2\x81m\xbe\xdc<\xcb\xcd\xce\xfc\xf6\x81\xed\xcbG\xd6\xdc\xc8`8P\xbd\xeb\xb1(\x14\x96`\x80\x89x\xc9L\x95\xaby\xee\xc8\xee\xa0q\x10|\xe5\xfd\xae\xbc\xdf\x95\xf7\xbb\xf2~W\xde\xef\xca\xfb]y\xbf\xaa\x046\xbf\x95\xf7\xeb\xdf\xb1W\xde/\x86\xf9\xba\xf2~W\xde\xef\xca\xfb\xd5e\xe5\xfd\xae\xbc\xdf\x95\xf7\xbb\xf2~W\xde\xef\xca\xfb%\xe1\xfd\xf2\xf2\xc0Z^\x1c\x8e\x88\xe0\\\xc8\xc3\xbe)\xfb(\xce\xb1a\x8fe}jU^\xf3\x02\xfe,\x0e\xa92\xb9\xd9\xc2\xff\x82o_A\xc9\xbfVO\xe2I\xfe*g\xce\xb6,\xaa\xc97\x91\xe5\xfbn,\xb4\xa5\x00\xe1\xb1\xe6\xbd\xff\xabZ\xfa\xa1h\xf9e}8\x94|\xd8(\xfc\xfb\xbf\xc3\xb7\xafF\x0b\xb2\xb0@\xf8\xbfm\xd9\xca\x16V\x98\xd4\xcc$\xd9\n\x93ZaR\xffH0\xa9.\x0b\xa4sf\xaa\x92.\xed\xa4\xdc\xcb\x0dk[\xb5m\x0c3\x062\x8e\xf4j\xb2\x02u\x96@Ym\xf6\xa7\xadp\x06\xeb\x96\xf9\xaa\xd4\xed\xea\xcd\xc10\x97\xea\xb1\xcbj\xee\x96\x00N\x19\xdf\xa883\x88,I\x17jX\xd1\xc2\x0f\xf5\xae\xb5\xfd\x1fe\xcb+G\x88i\xf0\x8c\x8d\xec\xeb\xab\xae\x1d\xe9\xc9\xda\xa6\x0e\xcd\x1c\x9fX?\x97\xd5\x86\xbd\xd5\xb8\x99\xd7\xed\xf6\x0b\xfc\xcb\xc5\xbf~w\xf1\xed\xb7\xaf\xc4\xff\xfc\xeb\xc5\x9f\xe4\x7f\xff\xa4\xef\xf1=\x97\x1e]\x13\xcb\xceu\x82\xb5\xfcY\xc1j\xc5\xb0u\xe2\xb5\xc2g\xed\xed\xe3\xc5\xae\x1d\xa43\x953n\xbcy \x90m\xd5\xe6\xbeeR\x18\xd6\x82\x00m\x9a\x97#\xaf/$`\xb7-{\x0d\xdc\xcb\xfap,6\xfc}\xc9\xdf\x89\xf5\xd3\xac\x08\x8e\xd5\xd1\xb5\"\xb2g\xde\x14\xb7w%oo\xa5\xa6\xb5#\xd7\x85\xc5\xc4\xb0\xfdh\xa1\xf6\xacr\x8e\x95\xcd\xf7\x18F}S`\xe9q$P pK\xa4O\xf7Ux\xb8+\xb9\xdaO\x06\xef\xb2\xcc&\x95\xad\x8a)\xf2\x1aX\xd5\x9e\x1a\xd6e3:9^\xf9\x18y\xf1\x85\xb5*q \xf9\x85C\xe6__\xa5jV\x9d\xa2\xa4\x8f\xa3*\x91\xdc\xe8I\xbbU-\xdaiX\xb1\x85\xb6\xb87qY\xf5\xbb\x18dI0\x93\x8c\xe2\xba\xd2\x91_8\xa9\xb8\x1b\xf4\xf3\x80?_\xb4\xe5\xae\x1a\xca \x7f.w\xd5\x8f\x03<\x93c\xe0mm\x90\xd7\xf0\xf9\xfa\xfb\x9fn\x7f\xfc\xf9\xc3\x95S\x82c\xf8\xf7\x0f\xd7\x9f\xae.o\x9c\x7f\xba\xb9\xfa\xcf\x9b_\xde\xfd\xe0\xfc\xdb\x0fW\xdf\xbf\xbb\xfc\xdb\xed\xbb\x1f\xaf\x7f\xfa\xf9V\xfa\xcc\xae\xab\xae\xae?\xde~\xfbo\xdfv\xd3@K\x84\x84\xac\xf3\xcd\x153\x08\xbd\xe7\xad\xf619Tp\x10\x7fQqd\xde\x82p\xec;\xf1\x82\xdd\xa9h\xc4\x1a6ZK\x133\x825\xb7\xc2\x97\x9ewV\xfc\x9f\x8d\x980_\xfd\x8f7\xe2\x1d\xa8+\xb1\xce\xbe\x91y\xbc\xa2}3\xb5\xf2\xb3lN\xd89<\xcc\x87\xdc\xe1\xa1\x81\x96\xac\xc2pm\xe9\xb5\x8c\x1a\xf6\xdb\xa9\x14\xd3L\xdd\xd7j0\x85d\x93\x8f\xbc\xccj\xab\xa9P\xf5\xbdtV\xe4\x16!\xb3\xea\x87\x82w\x1fp\xb3\xab3\xcb\xe2\xfbz\xfb\xf2\xf5\x08\xbd\xd6\xb9\xa0\xb2I\x19\xaf2\xf5\x1a\xd2\xc1\xb1)\x0f2W'k\xeb|\xbd\xba2\xeb\xc5\xb1xi\xa7\xa1\x83{68\xd7\xdf3\xeb\x1c\x19\x1a\xbb?\xb3N\xbf\xe1\x9e\xa9\x1dgW\xb4\xb0/\x0f%\xefF\xcc:9\xf4\x96k\x13\xd5\xed\xb6I\xa8^t\x86\xab:\x19\x9b\xb2\xe9\xedZ->\xff\xa6V\x1fOd\xe2\xb4\xa9\x94\x08\xe4\x82_o\x15\xe8q[K\xd0]'\xc5\xa4v\xb1\xcdh\x03\x00\x95?4\xb3EO\x87\xb25\xa6\xb0\x96\x97\x07yz},\xc5\xc6y\xd0B \x17\x93\x17\x01\x8d\xb3RN\xa1;\xd1|\x9e\xaf\xc8nYU\x1f\xdc\x81\x80H\x9c\xc1m;\xe2\xd6\x18RLx\xeee58:I\x05\xb6^\xfb\xa1\xaa\x0f\xe6\xab\x95\xe2\xe1\x16\x956\xc5\x95~\x04\xf8\xe9\xe7\x9b+\x85g\xd4\x1e\xb8\n\xb5\xab\xc3\xc0ue\xd4\x96\xbau\xdc\n\x96\xaa\x84\x88\xab\xdan2\xb5\xfd[\x7f\xf7\x02\xbbzWKW~\x9c\x0c\xd2\xbc\x02m\xc3\x84\xcd\xaat(4\xc4\xa4(\xf5\xbew\xcf\xec\xe8\xcd\xaeho\xe5\xeb8\x03\x9a0\xa1\xd9Bo\x95\xe3!tM\x8dI\xc1\xbbBC\xb8\xf4[!\xcfCb[\x1a\xd0/\xfa\xd3\xf6t\xe8\xee$\xd2Fj\x82\x9d:4\xa3\x84\x0fA\xbd\xd9\x9c\x9a\xd6^<\x8a\x97\xf92q\x8enI\xd9\xaa\x96q%22^\xbb\xf4\xf7\xeeJ\xf3=\xbcc\xf1b\xd6\x92{\xe1\xe1\xc3\xf5=t7\xf7\x98\x8cb\xb3\x91\xcfQ\xee\x06\xc7\xe2\xa5\xbfa\xda}\xb9\xae\x8bN\xa9\xab%\x16\x84?\x1b\x1b\xbeQ\xab\xe3\xa9U\xf0&\xf9\xebVC|\xd4\xb4\xad\xc0l\xdd\x7fp\xd4\xde2\xaeW\xbf\xee\x8em\xcdZ\xf8\xe7\xaa\xe6\xff\xac\xb1Dj\xf5\x15[\x99\xf4\xed\xee\x1d\xbb\x96c\xad\xb7\xe7\xa1<\xf2\xa4<\x17\xffD+\x07C*\xd6}58\xdf\xb0\xb2\x93\xd4\xb4\x9eR\xaf-v\xea#\xef\xf2\x16\xd9\xdd?\x18d\xae\x81\x7f\xcb:\xa5\xbdf\xb2:\x9eI-\x9f\x9axbC\x8c\xb8e\xd1\xd7\xea\xdc\xa7\xbfq$g\x82Xx\x8ebum\xca\x82\xb3ACr\xc8\x853\xca\x9e\xe5W}\x95\xc9\x9b\x87B\xacj\xb5\x0b\xc6..6\xa8\x97\xae\x9e\xf6\x95z\x8e\xd2\xf3\xbf/\xca\xbd\xbe\xcdG\xce1\x13c\x84\xca1{\xb9\x1e@\xe5\x00u\xd8x\x13\xce\x90'\x80\xa2\xabk\xf2\xe8\xa7\xce\xd9\xfb\xa6.\xb6\x9b\xa2\xe5\x89\xc1\x83\xf7\x9f~~\xf7\xe1\xf2\xdd\xe7\x9bP\x04at\xd1\xfb\x1f~\xbe\xfc\xab\xff\xcf\x9f\xff\xf6\xd3\xa5\xff\xaf\xef\x06\x7f\xeeuDcV\xf8V\x12\xab\xdb\xa3c\xd4\x9d\xf9[\x7f\x96\x12?\xdf<\x7ff\xcdc\xb9a\xfd\x98\xc1\xa7\x8f\x97zw\x19\xc5\x0d\xfc\x86\xbd\x85\xffbM\xad#\xea2\x13'\x1a1or\xa0\x0e9z\x93.\xcb_\x87\xbb\xecso\xff \"`\x08$\xea\xdb\xa0\xf0T\x94\\\xae\x10\xfdT\x11+\xc5\xb3\xde\xbb\xa4\xd4\x97\x8c\xbc\xaa/\x91\xca\x04U\xa8\x7f\xe2\xd9LL\x13?f\xb0\xac\x00\x13\xa8\xef\xf5\x1e\xcc'Med8h\xd9;\xa7i\xeff\xd9\xa6\xb4\x19\xfa\xad\xad<\xc8\xd4\x1fg\xfb\x97\xe8\xebu\xf3\xfcI-i\x89g5\xfe|+c3\xf3\x82\xaa0~\x05Lu\xc6\x1fh\x8a'\xf7\x06qpr#'m:\xf5\x86c/\xa5\xe7B{yp^b-\x11\xce+\xde\x8d.\xc1/\x15\x10q$\xf4\x81\x8e\x8d\x0f\xf9\x19\xf9\x80\xee\x18\x1d3\x1f\xfc\xec|\x980\xb5\x89\x18\xfa\x93\x86\xb0\x9b\x0fG\xb3\xf4\xc1\xc1\xd4\x87\x84\x1dr>c\x1f\xbc\xac\xfdH\xfbh\xaf#\x99\xc1\x0f\x1e\x16?\x90\x18\x14e\xf4\xcbf'\x9bo`\xa1\x0e-\xcd\xdc\xc3\xf0\x87\xf8\x8a\x89y\x15\xc9\xd8\xfe\x90\x99\xf1\x0fd\xac\x7f\x80\x85\xcc\x7f e\xff\xc3|\x05\x00\xa0U\x01\x00J%\x00 T\x03\x00\x02E\x00\xc8\xa1\n\x00$\xca\x00\xb0T\x1d\x00h\x14\x02 \xafJ\x00\x10(\x05@^\xb5\x00@*\x06\x00\x95j\x00\xd0(\x07\x80\xde\x8c\x10\xea\x01@\xa3 \x00KT\x04 tH\x89l\xb2\x11\x06\x87\xb5\x07\xe7W\x15\x984\xe1\xd8\xe6\xc9\xd4\x05 \x97\xc2\x00P\xa9\x0c\x00\x91\xd2\x00,W\x1b\x808\xe7\x1eB\xaa\x03\x80S\x1e\x00\x1f\xe39Q\x81\x00\x02\xf588\xa3K\xd5\x08 it\xe2\xaa\x04\x80\x18\x06\x84:\x01\xa4*\x14\x80{x\x96+\x15@\\\xad\x00\"\x8a\x05\x10U-\x80\xf0\xa8\xe1\xd5\x0b\x00\xa5`\x00N\x15\x03X\xaad\x00X5\x03\x98\xa9h\x00\x81aB(\x1b@Nu\x03\x08\xd9\xe2\x98\x89\x99\x95\x0e\x80B\xed\x00\xf2+\x1e@v\xd5\x03\x08+\x1f\x80S\xfd\x00\x9c\n\x08\x90Q\x05\x01\xf2*!\x00\x85\x1a\x02$(\"\x00N\x15\x01R\x94\x11\x00\xad\x8e\x00\x9e\xe5\xdcC\x9a\x87\x04\xe2|L)\x01R\xd4\x12\x00\xab\x98\x00\xee\x0e\xe5UN\x00\n\xf5\x04\xc8\xac\xa0\x00\xb9U\x14 \xc3\xa4@\xa8)\x00JQ\x01,U\x05\x00\x8f\xb2\x02$D\x90\x1d'\x0d\x1a\x95\x05\x00B\xa5\x05\x08\xab-\x807k\xc9\xcf\x98\xd0\xe5\xde\xbcd\xe4p\x1a\xcbE\xfa;\xa1\xca9\x92\xae\x91lc\xa4\x87\xa6D\x85\x14\x00\x93\x88\xcc\xd9XP\xb9\x01\xba\xc6\xfc\xea\x0d0~\xe3\xb2+8LZ\xf0\xabh\xe7Wr\x00b5\x07\xc8\xa1\xe8\x00\x88\x11\xa2Qv\x00 Tw\x00\x1a\x85\x07\xc8\xac\xf2\x00\xc9J\x0f\x10y^4\x8a\x0f\xa2\xccS}\xf0\xe3\x96\x1cP\xbc\x1e\x00\xa8\xff\xcd\x07\x08\xc0\xeeF\x07\x120\x82\xfa\xfb3KE\xf9M)e\xee\x9d$\x8f\x08\x91\x87\xfa\x16X\xac}\x947\xef-\xe1w<\x17\xcd\x8d\x80\xe2\x96Bo[Lms\xd2\xda0%\xd9s:\xe8&\x0d\x14\xa2\x073\x1c\xd8\xe1X\xd7{\xdf\xbe\xf7=[\x82s\x1f\xce\xd64\xb5\x84\x9b\xe7\xaf\x06\xf5\xacx\xf9\x15/\xbf\xe2\xe5\x7f\xcf\xf0\xca\x8a\x97w\x14L\xe8\xc6\x1f\x97\x1a\xfc=\x16N\x89\xc5\xa8T\x89uW\x95\x15/\xef*\xb1\x00\x86]V\xbc\xbc\xdf\xfe\x15/\xbf\xe2\xe5W\xbc|\xa2A+^~\xc5\xcbO\xca\x8a\x97_\xf1\xf2+^~\xc5\xcb\xafx\xf9\x15/?,+^~\xc5\xcb\xafx\xf9\x15/?*+^>0\xc7\xfc\xc3\xb5\xe2\xe5W\xbc\xfc\x8a\x97_\xf1\xf2+^~\xc5\xcb\xafx\xf9\xbe\xba\x15/\xbf\xe2\xe5W\xbc|\x14\xc2\x1eMD\xe6ll\xc5\xcb\xafx\xf9\x15/\xbf\xe2\xe5y\x02^\xdeB\xf0\x05\xe1\xf1\x1d,^\xde\x12\x01\xc4\xcbkZ9Og\xc3\x03\xad\x15\xdc\xbdo,\xfe\xec\xd2\x10H8\x1a\x19\xfe\xdc \x80\xefK\xf5\xd1\x1d\xf3\x06\x0f\xdf\xee\x8b\x81\xc5\x1d\x10q\x9e\xe9\xde\xed\xcd\xbf\xa9\xb9a\x8b\x91m%\x0c\xb6\xc2\x80\x17}\xf0\xc5H\xc3\x89\x10\xc6\x00\x881\xd2\x10\x1e\xc8\xe8\x862\x9a\xea}\x90\xb5\xf0\x08b\x01\x8dnHc\xca\x18\xc6a\x8d^`cJ3\x0epc^xc\x14\xe0\xe8\x868\x86\xddI\xaa\x0fbG\xc0\x8e\xb1\xb9\xa3J\x0c\xf0\x18\x80<\"\x9c\xc6\x10\xec1\xee\x83GQ\x80\x08?<>\x8c\xaa\xf8\x0f\x1a\xd6\x15q\x0f9v\xf00%\xdeyU\x10@H\xe4@\xa8\x82\x1b\x0eUPpH\xf4\xc8\xa8\x12=\x89\x98\x92Pk\xccO\x1d\x17z`\xe4\x0c\xd83\x11\xee\x99\x00\xf8\xf4t-?\xe8\x93\x08\xf6\x99\x1f\xf8I\x00\xfd\xcc1M\x90\xf0O,\x00t\x0c\x01\x0d\x80@S\"\xe3\xce\xd3\x0e\x1d\x14\x94\x18\x0c\x1a\x85\x83\xfa\xf3\xb9\xfcwH\x7f\xf3@\xc66zt\x8egiC]R\xe5|\xc9\xe9h\x1e6\xda_S\xa2!\x03U\x10I\xda\xdcMFA\xa3\xa6\xc90l\xf4\x1c\xc0Q\xcc*@\n\x1e\xa5\x87\x8ff\x02\x90bF\x8a\x0eDJ\x0c#%\x03\x92\xe6\x87\x92\xce\x01\x93\xc6\x9e\x1d\x1d\xa0t>\xa4tb\xf5\x10\x0b\xe9CQ\xf6\x1d\x19\xcc\xdfc\xb1\xd3R\xc0o}u\xf7\x97\x0ca$\x83_\x0d\xd8\xcfX0\xb4\xd2\xb3;\xf8\xf6\x83\x8a=\xf3[\xc76\x10X\x85\x03\xeb\xae\x86%:\xe0t\xa6\x1d3V\xe2\x7f\x8d\x8ep\xdb\xaaD\xcc\xc7b\xc7>\xa9\x0c\xfb\x85\xfa\xfb\xa4\x1a1\xb4J1TT(\xc6\x84\xc1\xa1n90\x99,\x90\x99\x04\xeb&^\xf3b\x92\x9fFtn\xa2I\x0c\xe0\x93\x96\x05\xd3\x8c\xec\x9b\xfc\x9f\xeat\xb8S\xe1n\x93O\x1ad7\xee\xad\x8eJ\xed\xde[y\xdb\xf4\xf5z*Z%[[\xf2\xd6$\xc2Z8UjZlU\xd2\xe1\xa9l\xcds\xf0\x81\x1a\x1dhe\x1c\x14\xfa\xe6\xb9}\xff\xa2\x16\xd2\xae\xb2O\x1f/#\xe0\xe8\x1f\xeb-\xbb\x1e\x80C\x1cs\xd25\x1f\xd5\xfe9|Xz\xc0\xf5\xc6\xda\x1dr\x06\x9b\xad\xd2\xeb\x9d?\xff\x0f.\x9dO\xd5\xaa\xf8\x93\x19%\xd1\x8c\x04\x02\x88\xdfL\xec\xdfc\x01\x84g\x18\xabN\x0e\xa5\xf2\xd7\xf0\xf9\xfa\xfb\x9fn\x7f\xfc\xf9\xc3\xd5\xed/?}\xfexuy\xfd\xe7\xeb\xab\x0f\xc1\xeb>\\\x7f\xba\xba\xbc ^rs\xf5\x9f7\xbf\xbc\xfb!x\xcd\x0fW\xdf\xbf\xbb\xfc\xdb\xed\xbb\x1f\xaf\x7f\xfa\xf9V\x9e:CW_]\x7f\xbc\xfd\xf6\xdf\xbe\x1d]\xa3\x03^oQ\xbd\x88m\xdd\x9f\xcb]%\xa6\xd0\xf8\x81\x0f\x1e\x81\xca\x8bq\xa5\x98\xdc\xb2\xcd\xa9)\xf9\x0b\xecN\x85\x94\x89\xf6\xecU\x9e1\xf6\x18\xdd\xe5\xa7\xe4\xea{\xaa\xd41\xdd\xb2Bl\x1c\xfa\xa8=i\xadab\x06:q'\xd3g\xf8v\xf2\xcb\xb0\xf5Q\xd7\x0d\x0e\xa1\x95\x03\xf5\xa1\xde\xa8\xbcg;i\xe8\x915j\x83\x93\xa3\xd5a\xe8\x94Wq\xf3\x1c\xb1LO\x9d\xb7\xd3\x9f\x94\xb7{\x7f\x92\xdb\xb1e\x9bB\xcd\x89\x11\x91m\xbf(\xb4\xdc\xb8\x95\x87\xd3\xa1\xa8^7\xac\xd8\xca\x05\x91\xb3g~*\xf6\x93\xb0\x9bpR\x8f\xe6e\xd3Yp\xfb\x9ai\x0fd\xd7&oH\xb8\xa3\x93\xf9\xff6\xf4G\xd5\xf9\xbbb\xf3\xe5\xa9h\xb6\xed(/?zB\x93\x86\xdf\x1d\xca\xaaV\x1e\xc6`\xf2@\xc3\x0e\xf5\xa3\x16\xad\x971[1\xb4\x11\xb3\xf5\x8b\xf8v\xfa\xd3`\xee\x98\xb5K\x19&V\xf7\xab\xeb\x8f \xaf\xd1\xcfM\x035.\xe5\">}\x15?\xfc\xf5\x02>\xb1\xfb\xb7 s\xd9o\xdf\xbca\xe5\xb1\xbd`b\xdfa\xa7\xc3E\xdd\xec\xde\\]\x7f\xfc,~~-\x96\x85\xa9\xd1\x97&\xc3\xff\xcaa\xa9T\xbd\xdf\x95-g\x0d\xd3_\x13\xe8\xde~\xb1P\xc2c\xd1\x94E\xc5\x1dN\xf8\xdd\xa9\xcb\xf4w \xf2\x0e\xb2!\x0c\x1f\x04\xe2/\xe0\xa6\x06V\xc9\xe9vu\xfdQX\xfa\n^\xea\x93\xc4QL\xab\x96\xb9\xd8v\x10\x8b\xfb\xf5\xe6\xf9\xb2\xae\xee\xcb\xdd\xafj\x8a\xcb@]5N\xcc\xbbB+\xbf\x9a\xee\xfcE9\xef\xbf\x9a\x87 lPP+a\xaa8\x00m\xd9\xa6\x14\xefP\xadc\xf6:3<\xadS\xdfm\xcf\x164\xd1\xebO\x17\xdfu\x17\x1eN{^\x0e7\xa34r\x91\xd9\xe7/~\x14\xf5\x98\x08\x99\x0d\x0e\xd0\x97\x8cr\xe8\xe3\xfd\xb4\xdb\xcf\xeb\x06*\x85\xb0\x94\xb6\xb5\xe5No\xb01_C\xd9\x90\xe8q\xdc\x95\\\x06b\x1c>\x87\xf9\xd3\xe0eR\xef\xf5\x17\xf6\xd2\xca\x15U\x0f\x7fgg\xd1\xaf\x86\xc3\xea\xd2\xfc\x11\xf6\xcc\x9b\xe2\xf6\xae\xe4\xedm\xcb\xeb\xc6'\xbe\x99*B\xce\xf6\x8e\x90\x12\xc2\x0d\x1e\xf9\xf8\xa1\x9d\xfbR,\x84\x1b\xfe\xbe\xe4\xef\xe4\xb8\x95\xeeWD_\xba~\xfep\xd5\xfd\xde\xed]\x81*}\xdb\x96\xdb\x0ewU\x9e\xcd\xa5n\xe4\x87\xd2\xe4w\xd0.@\x0f\x841J\xa6\xed\xde}\xbeT\xa3Y\xb6\xb0)Z6\xf4I\xed\x9e\xbe\xb5\xfe\xd5\xa7\n\xda\x0dS\xde\x9bl\xc5y\xb7\x18\x90\xb7\xf6?\xbb\xfbE\xef\x1d\x15\xe8\xb980Y^-\xd7\xa8a\xaf<\xcf\xfc\xb3\x9c\x933\x82\xc2\xca\xdd\x1b\xa7(\x12OU\xdcCT\x0b\x9c\x80bAJ2ZZNB\x1a\x0d\x15\x8d/!\xa1\xd1\xd1\xcff\x12\xcf\x08)gdd3*\x9aYn\x82\xd9bjY~R\xd9\":\x19\x01\x91,#\x85,7y,#m\x0cC\x18#\xa1\x8a\x11\x90\xc48\x8e\x1eF@\x0c\x9bM s\xc2\xae\xd2\xc3\x7f@O\xfd\nm\xbbdt\xaf,D/\x12\x8a\x17\x05\xb9k!\xad+BQ\xf2R\xb9\x10$.\x179#\x85\xb8\xe5\xba\xff\xef\xee\xce\xcf\xa5i\xe1z\x1f\xa7f\x85\xba\x8a\xa0c%\x11\xb1\xc6\xd0\xf4\xc5\xe4\xab\x08\xed*D\xb8\nS\xad<\xa3\x82\xa7W\xc5\x89USJ\xd5\"2\x15\x8aF5\x87@\xe5$*\xc5IS\xd9\xe8R\xce\xf6G3)39*;-*3!*/\x15*@\x82\x9aR?\xa6\xc4\xa7\\\x94\xa7\x8cd\xa7\xec4',\xc1 AmB\x93\x9apt&\x07\xdb\xc7\xd5*\x96\x95\x12#/\xa1iK(\xc2\xd2\xc8\xf8\xbc$\xa5\xec\xf4\xa4\x9c\xc4\xa4\xac\x94\xa4%\x0f\x1cAC\x8a\x13\x90\xfa\xe5\xbf\xcb\xe3.\xc7r\xf4\xcd\xb4\xec\xb7\x13\xab6\x8e\x8f\xceO\xce\x0c^\xd4l\xc8\x9d7\xf5wiU\xf3osT\xd8Hl\xec+\xfd\xe4-\xdf|\xb4\x94vp\xdb\x8d$%\xf1\x91\x84\xad\x8a\x88\xcb]\xa9\x80]\xf9\xc8\xe4tiX\xdb\x9a \xb9\x86\x18\xd8\xd5\x1e\x1b \xa7\x17\xb3w_\xbc(B\xc5\x97\xeed\xe5\xebZ\x1f\xe9\x1c\x1d'\xfa\xc4\xb5|\x8f\xbc\x10\x18^\x1f_\xef\xd9#\x1b\x9cf\xc3\x10\x98\xcf\xe5\xe1\xb4/\xb8\x81\x14'\x06XmM\xb0\xb4I3T\x17\xe6\xcf\xb72\x13\x990]B\xe8\x92\x11R\xc1\xd4\xde\xc1\x96\x8b'[\xe8\xcc\xba\xda\x99W\xf9\xa3\xeb\xc1\xfd\xdf\xe1\x83\xb3\x86\xb1\x07H\xab\x7fr\x17>\xda\xdc\xd3U\x12\x07G\xf7\xcd\xcc\x92\x8d\xde\x15\xed\xe4M\xb7zd.0\xf6\x0fY?\xc5]}\xe2R0NNx\xed\xd0\xb4\xca\xa2\x91^\x9c\xc3\x1e\x9fM\xb0\xf4\xfb\xc5N\xb4\xbd\xd5\xab\xef\x8b\xf6?d\xed]\xee\xabx.\x0f\xa7\x03\x9c*\x89\x10\xb8\x87\xa7\xba\xf9\x02O: \xa7\xc2H\xfcY\x9e\xb9Y#\xda\xb9\x98\x98;\xf3\xdb\xc6(c\x7fi{S\x0bK\xaa\xaf\xd8p\x15]6\x9a}\xbda*f\xe8}\xb2\xea\xcf\x03\xe0\xbe\xf8W\x87?\xc9\xf0\x0c]j\xcd\x88\x01\x89E\x89\x1c\xd9\x93\x0f\x05/\x14B\xecE\xc1\xb7\x1a\xc6OMe(OfO\x96qQ\x99\x8e\x1d(k\x8a%\xfb\xc7_>\xdf8Cd{V\xed\xf8\x83X\xba\xef\xcbg5\xc5eZJL\x84\x96\x1d\x8b\xa6\xe0L\xb5\xa8\x1a:\xedy)\\\x01\xd3b\xd7\xcc(\x82\xe6\x10+\x0e\x8c\x8c\xd5\xfd\x1f\xea\x9d\xed\xfbJ\x9e\xd1\xe0\xad\x8cw\xd9\xaa~\xfdx\x8a\xebO\x91\x0e\xa9\x82a\xc5\xae\x1fOY?\x9eB\xc5~\xcd\xc2}\x8d\x8d\xd0r\x8d\xe3 D\xc4\x94\xd0\xe2\x14w\xab\x10\xc4\xb3\xfe\xae\x91\x83\x15\xf7\xabn\x9e\x13=\xa9\xbbz\xeb\x04~\xd7\xdb\x8e\xa5\xa8\x99\xb02\xd5$\x93\xb6}\xbe|\xf0\x0c\x87u\xa4m\xb8\x86Z\xfb{/\xe6\xab\x88\xef\xb8\xd0 'TqE!\xd1\xf8 U\xe8P\x14\xaa\xcc\xc4R\xa8B\x88\xa8P\x85\x0cW\xa1\n\x15\xbaB\xd7\x9e\x19c\xa1\xcab\xa4\x85\xa9&7\xdeB\x95E\xa8\x0bU\x08\xb0\x17\xaadD`\xa8\x92\x1b\x87\xa1JF4\x86*\x18L\x86*$\xc8\x0cU\x08\xf0\x19\xaap\x1cJC\x15\x02\xac\x86*\xb3\x11\x1b\xaa\xac\"\xbe\x0bP\x1d\xaad\xc1v\xa8B\x82\xf0P\x85\x02\xe7\xa1\xcaB\xb4\x87*)\xb2\xb4\xab\x88o\xcah\xc5\x91\"\xaa\xc4\x07\x05\x81\x1aQ% ;\xa2\xca*\xe2\xeb(q\xac\x89*\xab\x88o>T\x8a*\xab\x88/\x1a\xb3\xa2J^\xe4\x8a*\xab\x88\xefBt\x8b*X\x8c\x8b*\x08\xa4\x8b*h\xbc\x8bu\xf9*\xe2\xeb\xf8C^|\x8c*\xd9Q2\xaa\xe4\xc4\xca\xa8\x92\x151\xa3\xca\xf2i\x82@\xcf\xe8\n\xa3\x18\x1aU\xc6\x1bW\xec\xd4\xd2\xa98\xca\x9c\x87\xd1\xfd\xeb~UGz\x15!g[\x15\x8bk\xd8o\xa7\xb2a\xdb\x81\x8c\xc2t\x80\x94\x82dW\x8f\"\xd9\xc9G\xa4!.b\x82\xa9|f}/E=\xb4\x00%\xbc;\xf1\x87\xeb\xea\xbe\xfe\xda\xf1\xedE\xd5\xa2\xd6y\x105\xdc<\x7f\xad01\x05?5\xac\xbd\x80\xabb\xf30\xb6\xd0@dd\x1f\xe5\xfcs\xe5Lx\xa7{(\xf6+\xb9W\x89\x97S\x8a\xfc\x8ac|\xbd\xd9\x9c\x9a\xd6\xe1\x00\xbd\x97 \xf0GV\x99\x17\xc0\xdc96\xe3\x1b\x13;\xec\xc40\xd5uz\x94\x1cA\x0b\xc9O\xbegM\xa3BC\x85\x89\xe5\x97\x07y\xa6\xd4\xbd\xab\xb6p,^\xd4\xdf\xeeY\x0f\xedxz\xa8\xf7\x8e\x0d\xcf\xfbU\xbd\x03;L\xbe\x82\x188\x9c\xc7\xa7\xd6\xa16\x99\xf1\xfe \\\xd5\x9c\xbd\xd9\xd4\x07\x19wV\xd3\xcb<\x13\xb5\xe1x\xa10\xa2\xfc\xc7\xbbO?]\xff\xf4\xfd[1Q6\xfbRI\x84\x8a\x06\x14$i\xff\x02\xec\xf9XK\x08\x14{\xe6&b\\\xd52\"\xb0)\xf6{\xb9\xea\x1dj\x8f\nS\x1fa\xd6\xd7\xfe*\xcc\xfd\xb5\xfb\x80\xe77-c\x1d\x0d}W\xf2\x87\xd3\x9d|\xa1U\x0e\xe7M\x8f\xd2yS\xb6\xed\x89\xb5o\xfe\xed\xdb\xef\xbe\xfb\x83=\xcab>\xd5'~\xeb\xfe\x1ex`\xbc\xe7\n:\xaa\xf6L\"h\xf8\xa1p\xeds\xa95V\xe1L\x06_\xf9\x96\xabvU;\x82\xffw]>I\x7f\xa7Q,\xcc\x0fEi\xe7Z\xd93gU[\xd6\xd5\xad\n,\xaf\xb9\xa157\xb4\xe6\x86\xd6\xdc\xd0\x9a\x1bZsC\xdeZ\xd7\xdc\xd0\x9a\x1b\x1a\x94\xe8\xc6\xbc\xe6\x86dYsCkn\xc8U\xd6\xdc\xd0\x9a\x1b\x1a\x9457\xb4\xe6\x86\xd6\xdc\xd0\x9a\x1bZsCknhT\xd6\xdc\xd0\x7f\xbb\xdc\x90?f< \xdd\xaa@Dwb1\xbf\xca\x07\xba)\xaa>\x8a\x7f\xf7\xa2\"\xc1\x8e\xe4\xcd\xd3\x03\xab\xf4\xf2\xa4\xb6\x9ca\xdd\xe2\x14\xdc\x9e\x8c\x90\xfa\x85\x98\x8e\xc2\x19R\x0bZ\xcb\xe45\xde\x80\xa3\x98\x90\x9b\xa2\xfaZ\x9e\xed\x14\xadc\xab\x121\x93x\xb6T\xb8\xd5\x92\xc7\xc3*\xaa\xba\xba\xdd4%/7\xc5\xfev\x8d\\\xaf\x91\xeb5r\xbdF\xae\xd7\xc8\xf5\x1a\xb9^#\xd7k\xe4z\x8d\\\xaf\x91\xeb5rmJ\x842\x172;\x0fB\x9a\x03!\xcc\x7f\xd0\xe5>\xf2\xe7=2\xe4<(\xf2\x1d\x0bs\x1d$y\x8e\xac9\x8e\xfc\xf9\x8d\xac\xb9\x0d\\^\x83(\xa7A\x92\xcfpx\xc3\xeeU\x87$\x8f\xb1 \x87\xe1\xc9_\x047\xcc`\xde\x82PeM\x1f\xac\xe9\x83X\xecxM\x1f\xac\xe9\x03\x8a\xf4\x81\x1b\xee\x9f\x1d\xeaO\x03\xf3_(N\x83\x17\xa6\xe1kt\xd4*ktt\x8d\x8e\xae\xd1\xd15:\xbaFG'e\x8d\x8e\xae\xd1\xd15:\xbaFG\xd7\xe8\xe8\x8c\x8e\xaf\xd1QU\xd6\xe8\xe8\x1a\x1d]\xa3\xa3\xaa\xac\xd1\xd15:\x1a\x0b\x8d\xad\xd1\xd15:\xbaFG\xb1\xd1Q\x9f\x00Jv\xf1\x13\xce\xaa-k\x0ee\xc5/\x8a\xbbMyq\xf5\xc8*\x9e\xa8u!/\x1b>\x12\xd7\x19\xaf\xe0\xbc)\xefN\xfc|\x92\x18_\xd8K\xbe\xf3g\xe6\xe3lYm\xd9\xb3\xaf\xba\xbb\xba\xde\xb3\xc2\xfe\x9c\xa8\xf5\xe0\xe5Czg\x06TQ\x07\xda\xb2\xda\xed\x99\xe8\xf4k\xb5K\x1e\x8b\xb2y\x05E\xdb\xd6\x9bR\x9e\xcd\xf4\x06\x07L\xdc\xed\xd4N\x19\xbcD\xb2 \x15}j\xa1\xe8\xa3R\xb0e\x8fl/\x86\\\xe9\xbcp^l\x1e\x86\x9b\xe4P\xd9e\x08\xf7\xff\xc4\xdac]\xb5\xec=\xdb\x95\xd5\xfb}\xbd\xf9\xf2\xaa\xfb\xed\xaa\xda\x8e~\xb9|`\x9b/7\xcf\xf2\x051\xbf}`\xfb\xf2\x9157\xcf\x03\x7f\xf8\x87\x82\xb3\xe6\x95%\xe3\x02\x87\xe2E\xbc8\xbf\x9dX#\x1c\xa3S+\x85^\xe4\x8b(\xbb\xde\x06f~7\xa8\x89\xaf\xc0h\xaey\xa6\x85sBLfV\xca\xcd\x93y\xe4\x9aA4sG\x0b\xe5\x9c\x8e\xbb\xa6\xd8\xb2N-\xe7\xc7z{\xda\xb3\xff\xa3bw\x89\xa3(\\\x12\xc4H\xe8%\x7f\x98'(\x8eG8\xc8\x96\xfbq\xb5M\x08\xd4\x17#\x05l\xc4\xec\xab\xdaSk\xea\xf4\xb6j\x8d\xf4\x80K`\x0dJ\x17\x84\x12C\xafn\xd7\x91\xc2v\xda\xd4`\xae\x7f.\xab\x8d\xb4\xc6\x90\"\xe0_.\xfe\xf5\x8f\xa1g\xf1q_\x10=\x82P\xac\xec3\xe3jG\x92\x0f\xc8\x10d\x8cm*\xff$\xffd\xb6\xb8\xd3\x80\x0f\xa1/\x1b\xb9E\xa3qo\xeb{\xfe$6U\xb1\x02\x1d\x8f{\x15\xda\x90\xc3Z\xec\xe1\xab\xbaz\xad\xab\xf9\n6\xf5\xe1PT\xdb\x16\xb6'\xd9\x05\xabZ\xdeQ\x82\xfaUI\x9f\xb6\x06\xa7(]\x97|U\xc4B\xc8\xb6\x17p-\xa3\xba\xc5\xbe\x95I\x98\x91\xb5\xbc\x86-\xe3l\xc3\x85\xd7 \xc3\xb1Eo\xb2\xe9\x8ap:\xd4\x8e\x0f\x05\xec\xcaGV\xf5C$s\x1bv\x9d\xc6\x08uK\xa3^H\xde\x0d\xa5\xf0T\xef\x18\xabd.F\x1f\xefL\x93\xaf\xa0\xe4f\xacG\xee\x87J\x8ft\x19\xa7\xde\xca\xb2\x85\xfa\xc4_\xd7\xf7\xaf\xb7\x05g\xbd\xf7c\xcc\xb8)\xc5\xbb\xd7\xc0_\x14\x17\xa6\x1cyK\x0d+6\x0f\xc2\xd5\xd5\xe7\xda\xae^i\x06{.\xb9\xcd\xe1A\xcc8\xf3\x92\n{^\x8b{\x90\xb3\xf1\x83\xf0\xc67b\x11{\xab\xacV\x19\x13\xdd\x91V\xa5E\xe4\xd0m\xbb+/\x1cW\xc2\xbe\xde\x95\x1b\xbb\x9b\xdd\xa87\xecP?\xb2mO4\xfb\xfc\xe1\xaf\xa3\xa8\x8dD\xea\x94\x80\x8c\xc4\xbf\xearB\xdd\x1b\xc1\x1f\x9a\xfai\xc0\x1aK\xe67\x8dW2\xdf\xc2\x04\xfa\xe0m8M\xbc#4\xf5\xcf\xfa\xa0c\xedG\xd6\x88\xea\xd9\xd6\x8e\xac\xfc\xac\xa3\x12[(\xef\xd5\xb8\xe9\xce\xb5l\xf0\x94\xc7\xdaz\xe1\xa5}d\xa1\x0c^\x0e|\x90.\xfb\xd0\xbd\x9a\xd5}\xad\xb3Me\xb5\xd9\x9f\xb62'\xf6z\xfaU\xf6\xf6$\xbc\x95V\xber\\.\x0e%W\xd3_\xe6\x11\n^7b\x11>\xed\xb7P\x9cx-\xfc\x98\x8d\xccq\x9a\x96x\xdd\xd5g\x96\xaa[E\x9a\xbbmy\xc1\x1d3y\xe2\xb3\xfa.\x8f\xef\xc8\xe2\xbbZ\xc5\xa6oc\x19|t\xfe\x1e\x95\xbd\x1f\x19\x9f7s\x9f=o\x9f3k\x9f5g\xbf\xe4\x81#\xf2\xf5\xf1l\xbdY\xfe-\x9f\xf9\xe3\xbe\x18\xa6A\x869\xc3\xe2\xae>q(\xe0\xb8/\xaaj\x10~\x15OU\x86\xa1\xcbNVJ\xaa\x83\x05\x93Q\xff\xfb\xc4\x9a\x97w*h/\xda4\xa9\xc4\xc4\xa4H\xde\xf0\xeb\x83\x89\x99\xabP\x8d\xa5)5\x8c\xbf\x8a\x11\x80\xa7\xa2\xcf:\xb8Frp\xfa\xf0u\xd6\xb4\xd4\x98\x7f\xcbw\xc6\xe4e\xe4]o\x06\xb7\xc1\xa7\x8f\x97\xfd7\x12s\x13\x03\x85\xca7IR a\xb5j\x8f\xa71\xbe]\x88\xf6\xb9L\xf0\x1c\x93\xcf\xda\xe3)\x10\x93f\x8d\xe4\x06\x13\xcf\xde<\x9b\xd14\x95\x8a\x92\x81OA\xcfF\x89\xdd<\x9b M\xe6}L\xe4\x07\x15\xc5\xf5\xe3\xffI\x0c{\xd6\x8d\xffs\x994\xbasfh\xae?\xafk\x1aprw\x10 <\xb9\xdb\xc7\x86\xa6\xd1\x19I\n\xa8\xb1\xd7\x84y3g\x171T$\xb5c\x7fq\xfbbq\xbfk\x8e'\x1dQ\xb0\xc2,\x92\x0bx|;F\xe5\xf0\xef\x00\x83\xf2\xa1\x1fx|?q\xbd\xcb\xc2\x16\x80ZF\xf0\xc4J\xf3\xe3\xe4n1\xcc\x17k`:}\xcby\xe8\x98\xcbB\xc7|6z\x97r\xd14\x9d\x06\xd3\xf9\x8a\xe4\x94\x90\x8b\xb6\xd9\x0cP\xebc@\xd0|\xbe*\xc94\xc8\xa7\x98'\xcdh\x00\xe3\xd92\xa6vK}\x0cB\xa4\xf0+D\n\xc7\x81)\xb0\x10\x9a\xe3\xa9\xd8\x8bx\xe4(\xa2\xbb\x8dl\x0d\x01\xb6\x8a-\xf378\xbe\xdd\xc7\xa6\xb6\xc9\xd9\xc6d\xd8\\m\xf4\x0c\x92 uQ\x0e\xd2\xf5\xb3\xd1\xf1w\xdfQ\x16\xb34a$\xa1\xc4\xc4(V\xbcF\xd9\xdf\xa4\x91\xe9\xb0&,\x12+\xcd\x93\xcf\x1c\x1cb\xdc\xca\x00qt\xeb\xcc-\x14\x89\xfe\xfc\x0fm2j\x88\xec\xccs\x18\x00\x00\x00\x00IEND\xaeB`\x82\x01\x00\x00\xff\xffPK\x07\x08\xd4`4t\xc7\x01\x00\x00\xbd\x01\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00 \x00swagger/favicon-32x32.pngUT\x05\x00\x01\x80Cm8\x00u\x04\x8a\xfb\x89PNG\x0d\n\x1a\n\x00\x00\x00\x0dIHDR\x00\x00\x00 \x00\x00\x00 \x08\x06\x00\x00\x00szz\xf4\x00\x00\x04|ID\xc4\xcf\xd0@\x04&%\xad\x1e\x16\x0f\xf7\x8d\x97AR\xfa\xca\xe7l\x87\x05\xf8\xd2\xfb\x0c\x84\x1d\x0dLVY\xdc/ju\x13\x1a\x88\xd2\xa0\xaaa\x82|nzp_\xf4\x03\xc8 \xd4;^\x8a9}\xeeu\x9a\x91 `\x04\x14s\xec\xe1\x0c\xc6]\xa3\x05``\xd1w\x12*~ \x00\xf3\xae\xd3\xa0\x9cb\x82\xa2bx(\xb3n\x1fqx\xd2\xf2\xda4\x1d\x8a}\x1ck\xd4>\x9cI+\xeb\xb3\xf4k\xc8u`L\x93\xf3]4\xb5\xd0\xc3\xe33\xd9\xee\xd7\xf2\xd9\x19\xea\x18\xc9\xc1Y:\x18\xfb(-\xadN\x82\x06e\xd5\x1f0\xa2\x1dV\xf8\xbe0\xc1\x985\x01\xf8\xd2~\\\xa6\xa5\xb5)&\xf6\x98V\x80l\xe4\x03\xf8\x03\x04\x00s\x9a^\xec\x85\x00\xf4+\x0b\x00\xe1:G\xf2p\x96\x0e\xc4,\xe46\x1e5\xbbP\xdd\x15J\x80}\xce\xa4\xe2\xc8{m\xa4\xe2\xc3\xc2\x01\x07\xc0\xdb\xa4\x18-\xa1\x931\xba\x10S\xfa%\xb6P`\x10\x19v\x99#|Gg\x9b \x10W\xf6\x8dI1\xba\x92\xd66\x17E\x12\xfa\xd9\xa8\xf3UTe\n\x1b\x95\x9d\x81f\xe5\x18\xa5umc\x81\x86\xa6\xeb\xec \x804\xcbg\x17\xa19\xfa\xc6\xf7<\xa3\xbd\xf2\x0e\x7f\x02\x80\x97Y\xc7\xac\x184$h\xa3v\xba! \xcc{\xcd\xb4!\xb1\xd8\x92%h\xe3\x93\xdc\xd3_\xda1\xe6\xaei\xcf\x83\xa6p\xbc$\xf0\xb2\xda\x94\xa2q\x14B@\x13\xdb\xff\xf3\xd7\x0d\xfaA\xb9\xc5n{\x8e\xd6Y\x08\x01u\xc1'~\x16\x8e\xe9\x04\xa2\xfbA+\xc74\x0c\x98\xab\xd7:\xfc0\xd1v\xaf$\xa2#\xb7\xf1\x08\xfdm!OXh8\x10j|g\xd1\xe0a\xb2\x99\x04\x9a[y\x9a\xbdk\xf24C$\xa0\x9e#\x9f\xa3\xa8\x001\xc6\x1a\"\xc0\xe4i\xa6\xcc0\xf3\xf7\xb7\xf5XE\xb8\xe0\xa1\xc9\xc2\x0c\x90\x83\x80$\x838\xdf\xd6\xe3\xd4\x82FNG\x0f\x876\x8a\xbf1\xa8d(\xa7@\x8cQX\x90\xdb\x19\x9f\xc5YG\xe9\x9e\x00\xa5y3]\x9aJ\xe1\"\x00\x00\x00\x00IEND\xaeB`\x82\x01\x00\x00\xff\xffPK\x07\x086B\xc8\xd7\x7f\x04\x00\x00u\x04\x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00 \x00swagger/index.htmlUT\x05\x00\x01\x80Cm8\x9cT]k\xdc:\x10}\xdf_1Q\x1e\x92\\\"\xfb&\x81p\xf1\xb5\xfd\x90\xa6\xa5\x81\x94\x06\x92}(\xa5\x14\xd9\x1a{\xa7\x91\xa5E\x92\xf7#!\xff\xbdX\xf6\xae\xb7\xdd\x90BYX\x8f\xe7\x9c9\x1a\x1d\x8d\x9c\x1ep\x0e\x1f\x1f>\xddBe,8/<\x95 \xc9yKE\xeb\xc9h(Z-\x15B\xd1\x92\x92\xc0y>I\x0f\xae?\xbf{\xf8r\xf7\x1ef\xbeQ\xf9$\xed\x1e\xa0\x84\xae3\x86\x9a\xe5\x13\x80t\x86Bv\x01@\xda\xa0\x17P\xce\x84u\xe836}\xf8\xc0\xffc\x03\xe4\xc9+\xcc\xef\x97\xa2\xae\xd1\xc2\xf4&\x8d\xfbL\x8f*\xd2\x8f`Qe\xcc\xf9\xb5B7C\xf4\x0c\xfcz\x8e\x19\xf3\xb8\xf2q\xe9\x1c\x83\x99\xc5*c\xae\xd7\xe0-E!\xbb'A\xa5\xd1\x9bbjD\x8d\xf1\\\xd7\x9b\xeaJ,:\x9c_\x9c\xaf.\xce\xa3\x008zB\x97\xb1\x90a\x10\xff\x9d\xde\xd9\xe5\xea\xec\xf2\x17\xbd\x90\x19\xf5\xc2\xc6\xfa\x18\x82\x9bC\xf8<<\x01\n\xb3\xe2\x8e\x9eH\xd7 \x14\xc6J\xb4\xbc0\xab\xff\xb7\xb8Y\xa0\xad\x94Y&\xc0\x1b\xf3\xc4]i\x8dR\x85\xb0\x8e/\xd0z*\x85\xda\xe7\xf2u\x02=q\x83\xbdL\x86\xe0\x9f\xd3M\x90\x14X\x19\x8b\xe3\xbb\xa8<\xda7\xfb#=CK~O\xb40r\xbdW\xd8\x08[\x93N\xfe\x1d\xdb+D\xf9X[\xd3j\x99\xc0a%\xba\xdf(\xd5\xfd\xa7\xf1\xd6\xaf4\xee'\xac\x0b;\xf9\xc1OI\x0b \xb9;\x0e,OcI\x8b|2\x18^Z\x9a{p\xb6\xdc%\xf1~\xc6\xa3\x1f\x8e\xe5\xdd*\x81\x94\xbfY\xe1\xbc\xd0R(\xa3\x91\xcf-:\xf4o\x14\xf7/K\xd2\xd2,#\xa3\x95\x11\x122\xa8Z]v\x17\xec\xf8\x04\x9e7N\xc51\\\x85{&\xc0\xad\x9d\xc7f\xc8\x97F;\x0f-A\x06\xc3m\x99\xde\\\x85\x9e\x8fGG[\xab\x12`Q\xeb\x8c\xd8v\xfb_}K7\xd3F\xfe]\xb1\xa1\x82h%q{\x8b\x9b6\x88/\xc4i }\xc07u~}\xe5\xad\xfd\xc9\x98\xe7q\xd8_}o\xf1\x92%\x9dx\x15\x9f\xd3yO\xbdX]\x1aA\xc9>t\xd6o\x93\xd3\x92\xf2\x04l\xc5\x8d\x92jz\xc1jN\xd6\xf2\xa9\x87\xfa\xb5]\x05\xcc\xf9\x1acB\xa9,\x9f\xd0\x08\x05\xb7\x962\xec\xdb\xb6\xe2\x16b\xc6\xd5\x942H\x05KfI\x06\x7f\x9c\x98\xa8\xc0\xd5\x9c\xa2\x0c\x13\xa3\xe7U\x8e\xb55;'Nk\xe6\xd0\x9d;\xd4%^\x14\xbd\xd5\xf7\x92QN\x8e.\x1c`\x079m\xe3\x9e\x8a\xfe\xed\xa2\xad\xe0y>\xe6\xe23\xdc\xf8u\xa7=\xa3\xf6\xa1\x98\xb4\x17g\xa9\xf4\x1dA\xa8Z\xe4\xf6\x88_\xfc)\xf8\xd5N\xcf,\xea\xb4\xabS\xf2\xd2\xe0v\x10\x90\x82\xbd\xb3\xe1\xc1g\xc8>\x120\x0c{\x1d\xbd\x1c\xd1\x7fd\xb4\xbf\x82|\xf7\x9f\xd0\xa7\x1e\x82\xc5`H\xc0\x94F3p0$H.\x0f]v3\xaa\x9b\x1c\x83EW}\xba4\x12O`_\xb5!H5\xd1 \x9a\x0c\xaa\xcd\x04\x8cE\xe7M:\xe1\x08\xfe\xefQ\xab\x02\xfe\xb7A\xeb\xb6k\xbb\x05{\xef\x8e\xde\x84\xcb\x9c\xb2\x8f\x04\xd7U\xf9\x9aQ:\xbe\xf51\xf1\x1a\xaaW\x97uR\xdd\xe7\xf59\x974\xb7\xfc5s\xd0\xc4P\xdf\xdd\"\xd7\x96\xc2\xdab7x\xb8;\xfc\x01\xfa'\x00\x00\xff\xffPK\x07\x08]\x12r 9\x03\x00\x00T \x00\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00 \x00swagger/swagger-ui-bundle.jsUT\x05\x00\x01\x80Cm8\xec\xfdyw\xdb6\xf68\x8c\xff\xffy\x15\xd7\xfa\xf6\x9b!kZ\xb1\x9d\xa5\xad\x13\xc5\x93\xc5m\xb3g\xe2\xa4\xcb\xa8\x1a\x1fZ\x82,6\x14\xa8\x90\x90m\xb5\xf2\xef\xb5\xff\x0e.\x00\x12$\x01\x10r\xdc\x99\xf9<\xcf\xc3s\xdaX\\\xb0\\\\\\\xdc\xfdn\xc1tI\xc7,\xc9h@\"`!\xfc\xf9?\x00\x00\xbd\xec\xf4w2f=\x18\x0c\x80\xad\x16$\x9b\x02\xb9\\d9+\xe0\xd6-\xd3\xd3y6Y\xa6\x04\x0e\xe5\x1f}\xf5\xf6\x00X\x10\xc2\x01\xf4T7\xfaG\x132M(\xe1-\x8a\xbf\xfa\xf1|\x02\x87\xf2G0\x1c\xe1\x80\x0e\\\x839T\x7f\xf5\x8f/\xe2\xb33\x92\x7f|\xfedI'));&\xe6'\xffs\x15\xb0YRD\xd5\xf4\xd5\xd4s\xc2\x969\xd5\xc0\xa2\x1e\xf0\xeb<\xce\x81\xc1\x00\xfe\xbcz\xf0?\xe5M\xf5*\xd0 \xd7_\xe6W2\x85\x80\x0d\xf3Q\xa8\xda\xe5?\x14t\x1e\xd4^\xe5mg|t\xc3|\xc4\xbb\xa8=\xc4\xb6\x0e \x8fZw\xd3\x03\xd8\xdak\xdf\x96]\x1c\xc0\x9fW\xb5gW\xf5N\xe5\xa8\x08\x1f\xd58N\xd3 S\x83\x8b \x8b@\xfbEC\xfe3\x85\x01l\xedj\x0f\xca\xd6\xaand\x9b\xb4?\x87\x01\x90\x08h\x7f\xcc\xa7\xc5\xff\x98\xc0\xa0\x8ep\x11\xb4@F\xfb\x99\xc4\xc5\xf5\x1a\xde\xe2\xd2\xf7\x05J\xbc\xcb\xb3\x05\xc9\xd9J~\xd9\x86\xd08\xa3\xd3\xe4l\x99\xc7\xa7)\xb1\x80\x85.\xe7D=\xdfm??#\xec\x00\xf2:\xc4\xc2j\x8e|\x0e\xb46\x87\xe6\xe8\x15\x86 Z\x93\xfe\xc9 )^\xab\xbd\xd1\xc25\xfdR+\xc1\xe7\x1a/SV\x1f\x03\x1c\xf8}\xed\xb1\xd6\xb4? X\x04\xbd\xb8\xc7\x81\x1c\x01\xabO/k.Q\xb3;\xd9\x8c\\\x99E\x9e\xb1\x8c\xef\xca\xfe,.\xde^P\xb5F\x02\x9b\xf0\xfbz\xfb\x0b\x18@\xef\xf6$)X/\x02\x1a\xd0>'\x12w\xef\xde\x13\xaf]\x05\xc3\x06~P\xbd\xff\xde\xb2 P\xb0<\x19\xb3^59\x9d\xdc\xd0\xe0\x1b\xd5T\xd4D\xb5ZS\xf5\x8f\xbe\xbdw'\x0c\xbc\xbe3\x0f\x81\xe9+-\xb6\x08S+\xd9\x05PN#\xb6\x02\x02 -XL\xc7\x9c\xbe\xb10\x046\xcb\xb3\x0b\xa0\xe4\x02>\xac\x16\xe4(\xcf\xb3<\xe8=\x8d)\xcd\x18p\xe0B\x0c\xe34.\n\x88\x0b\x88\xcb\x1ezacG\xde\xcct\xaaG\x1c\xc1\xf3\x08)\x15\x0d\xf6\xef\xef\x87\xf5M\x94\xc0\x00\x82\x1c\x06\x90\x85|\x07\xe4\xf5\x1d\x90\xc3\x81\x01y%\x9cZ\x1bO\x1f\x8f\x01\x96M8\x96t\x98\x18\xc1\x8c\xafd9\x04|\x06|\x13\xef>\x00\n\x0f\x81\xf5SB\xcf\xd8\xec\x01\xd0\xedm\xd3G\xa0f\x8d\xc4\x99\x8e\x1e\x18\xdf\xc8\xfb\x15m\x81A\xfd\xe7z\xcd\x89\x11\xe4}\x9d@I4\xe9\x9d\xc7\xe9\x92\xf4 \xa1\x90s\x88\x05y\xff\"OX\xf9F\x18A\xb0\x1bA\xa2 \x10\xf2\xc9\xe5\xfdOd\xc5igk(\x0djo\xda\xb9%\x009.\x18\x08\xb0\xf6*E*\x16h\xdb\\\x1c\x04\xb9\xbc\xcf\xbf\xd6)H\xbd\xcf+\xbf\x1d\xa5\xef\xc4\xfaHJ\xc4\xa0\xc17\xf7\xef70\xadB,N\xca\xff\x9dX\x7f\xf7\xde\x7f\x0e\xe9\xad\x04\x84\xe8\x14\xe3=\x99\x92\x9c\xd0\xb1\"\x1b\x9c\xd7\x81Y\\\xd0\xbf18%\x84BB\x13\x96\xc4iR\x90 \xec@\xb1\\\x90<\x08kop\x12C&\xbd\xd0x\x86l1\x8e\xd3%c\xb65\x18@p\x9e%\x13\xd8\x85\x01\xe7\xd2\xe0\x10zK*N\xedI\x0f\x0e\x9a(\xcc\xe9\x1bg$+\xaep\xab\xe4\xed\xf8\xc7\x04\x0e\xf4s\xe9\xaf[R\x18@\x1cp\xec\xfa6l\xaci&\x1f\xdd\xb9\xfb]\xf3Q\"\x1f\xdd\xbd\x17\x86&>0n\xb3\x05\xea|6p\x05\xc4\x8d\x1e\xc4\xb6\xb9\xae\x87'\x16\x90\xdf\xba\x05t\x99\xa6\xb8\x92\xccr\xf6\x1cs,\xe1\x8ceN\x8a\x82\xcfs\xbe,\x18\x90\x84\xcdH\x0e\xa7D4\x90\xe5\xdaa\x14\x01?\xacz\xb0\xbd1v4\xd0\x8eT\x04\x88o5d@\xab\xd7\xf9\xe8k$\xca\xc8\x19\x16,_\x8eY\x96\x9b\xa0\x0d\x88\x0f\xe9\x92\x1c\x00i3\x85\xd0d\x1c\x0d\x8c%\xbf\x14\xdd6\xb3\x96\xd0fPw[/5\xc87'\xae\xf2PPk|\x88\xd3\xcfk\xc7\x01\x13\x92\xce\xc9 \xc2\xe0\xe4\x84\x1fT\x1b\xf2\x01\xb8\x1b*\xa0\xe7\xae\x83\xd6\xbc\xd5T+|\x85\x1e\xe7y\xbc\xd2x\xc3\"M\xc6D\xdb*\xa0o\x17f=\xae\xc5\xdc\xeb\x8b/\xf9\xceqNbV;\x99\xc20\xd2\xf1\xa4\xaf-9\xe7\xc7\x1b\xdb\xc8<\x14\x03C\x0f\xd5\xee\xc5}-6\xec\x8b\x80\x84^-\xe6\xce\x16\x97U\x8b\xbf\xfa\xb6\x989[,\xaa\x16_\xfa\xb6\x98t\xcf\xfa\xd6-\xd8J\xab\xa6\x7f\xf0m\xda@\n\xb5\xa6\xb7\x82-\xc1\x1c\x91\xe1t\xe4\xd7\xe0\xd2\xb7\xc1\x85g\x83\x85o\x83\x13\xcf\x06\xd3\xee\x15_\xaf\xb1[\xaf\xe6\xc6\xbe\xe3\x9b\xb5\xc6\xa7\xffbA.X7\x16d\xea\x8fD\xfcA\xfbI\xf1\x9c\x95\x9ck,\xee\xbc$+\xc2\xc5\xf5\xa5|\x81N\xc8%\xde(\xc4\x8d\xc7E\x91\x8d\x93\x98%\xe7\xfc\xa3T\xdc|\x9bOH\x8eo\x8d\xf9\x0d\xd5\x06\xef\xba_\xb5\xc0\x07\xd0?&\xfc\xbcJ\xda\xf4c\xca\x05\xc4\xbf\xff\xfd\xe4\xe4\xf9\xeb\xd7\x1f?<~\xf2\xea\xe8\xe4\xf9\x87\xa3\xf7\xf8\xc7\xc9\xdf\xff\xdekS\xd6E\xfb\x8b\x97G\xbf\x1e=\xb3\xbc>1t\xf0\xe6\xd9\xd1/\xd6\x0ff\xed\x0f\xde\xbe\x7fv\xf4\xde\xfa\xc19\x0c\xe0^\xfb\xf6\x1c\x06\xb0\x07\x0f\x1f\xc2\xb9A\xf1\x00\x03\x98\xc3\x0e\x18\x8e\x96\x15*\x9c\xda\xf7O\x8dZ\"\xa8\x8e\xb2\xad\xbd\xd6SC3'\xd7i\xc6F\xcb/\x9c\xd8J\xfa\xd8$g\xc4\xf6\"O\x92|dn\x91\xc8\xa3\xa1lp\xd7o;]\xf2\xd3\xcc\xf6\xf0\xd8q\x12q\xbee\xbd\x86\xdd\xb6\xf4W\x13*_\xc7l\xd6\x9f\xc7\x97\xfc\x90&R\xb2\x84\x1dT\xb4\xf0c\x88\xb3Tx8\x06\xa8O\x13Rh\x06\x0f\x81>\x80\x8c\x8b\x9f\xf90\x1b\xf1\xe3j\x98\xc160\x83\xac)A\x99{\xcd\xf6\xa9s94\x9e\x8c\xf4\x8b\xe4\x0f\x05S\xfcs\x80\x0cE\xc2\xe9\x02#\xc1cq\xba\xf2'^\x1d\x7f\xb2B\x12\x99P\xba\x9c\x9f\x92\xbc\xc6\x82\xba$o\x8a\xd0\x7f\xf4\xe8\x91 \xfc\xa0\x1a\xe5|&\x15\x1c,_\xa9\xbb\xfb\xdf\xdd\xfd\xee\xfe7\xfb\xdf\xdd\xc3\x19\xd2R\x05\xfb&~cn\x85/2m\xe3\xba\x0d|\x0c\x1e\xc2.\x1c\n o\x03\xab\xc9,\xe0\x00\xcec\x97\n\xaf\xc1\x14\xda\xdaxkb\xe2\x1aM\x05rm94\xe4Zs\xe8\x08\xa1\x1e\x1e\x0e`\x87\xe2\xc9^g\xce\x0d/3x\xc4\x01\xe85\xb0w\xd6\x95\x97\xa3z-G\xee\xb9a?\xf8\xb6\xc7\xfc\xda{\xed\x018}c\xc0!P\xce]\xcb\xc5\xd6\xf77\x83m \x9c\xf5n\x087\x9cC\x12\xef%\xa8di\x9d\xf4\xfa/\x8e\xdf\xcf9\x1dhS\xe6\xdf\xf9y\xd1\xbe\xfd\x06\x06\xb0\xdf\xbe\xfd\x9e\x9fR\x95tW\x19K\x8eW\xf3\xd3,\xe5\xeb(\xfe\xea\x8bM\x9d\x19\x8c \xcf\xc4I\xa7^0\x1cm\xaf`\x00\xef9\x8e<\xb3\x1d\x01\x1f\xcd4\x87\xcd\x92\xa2O\xc9%\xf3f\xc6?\xab\x95\xb2\xe8\xa8\x94\xc1\xa4Z(\xbe\x05\xf7j\xcb6\xe4\xdf;\xa8(\x1cB^\x9e!\x19\x1c \x91v\x9e\x86\x99Y\xb2\x9bd\xd4v\xe2z\xd2\xea\xef]T\xc19$\x81~\xcequJ\x9a\x96A\xfd\xe1\xe6>\xb7~\xf4ec\x9f\xb8\x19\x83\x866H\xb3\xf4!\xcexu\xf1\x93\xb9\x0be\x91\xe1C\xb5\"\x82\xd4!\x08\xa3\x85\xdf\x8c~tw'\x0e\xd3\xf7Hk\x87\xefG|\xcb\x90\xe1\xb3\x91a\x08\x0d\xb5\xcc@?\x13\xd5\xf0\xbcF\xf4\xb3\x07\x8c\xd5\xc9\xabCXp)^]\xbcpv\x81\x1a\xa0\xe6\x91\xa3\xb6cB\xd0 \xab\x84\xe8>\xcb\x8e\xc9g\xbc\xa5Z7\xb7\x0d\x1aP\x0b\"\xc5'\x93M\x18\x95X\xe4\x02\x181\xae4(M\xa9M\xbfut\xb9 cF&\x82A\x83,\x87DIE\xa27\xc8\xa6b\xcb\x15\x11\x7f\xfa \xa5\x1b\xf1\xe8\x00\xb5\\\xb6n\x8d\xab\xc8\xaf+_d\xfb\xf5\xcb\xe0\xdeg\x19\xcab\n\xe2r\x11\x96\xed\xb5 \xfdi\x9e\xcd\x8f(\xcbW\xe5\xcb\xc4w\x94/\xbfl\x94\x86\x81\x11} |\x9cR\x8aT\xb7\x96\xdec\xfb\xc19\xb6\xe0\xcb\x07\xa7F\x13\"4\x19\xdeo\x8cL\xff\xf5QSU\xb1\xec\x98\xe5 =s)\xdd\xb4\xc1\xf6\x86\xcf\xe5\x01=\xea\xd5{\x88\xe0c\xff\xe5\xd1\xaf\xc70\x80\xe7\xfc\xef\x9f\x1e\xbf\xfax\xc4\x7f\xfd\xce\x7f\x1d\xbd\xf9\xf0\xfe9\xfe|\x13\xd5\xfaOh\xc1Q\x1f\x06\xcdQe\xcb|Le\xf2\xd9\xb3M\xd3\xd8^\\\x7fQ\x11|''%\x00{|$\x7f\xf6\"\xe8]\xf5\x9cc\x1e\xc7\xe3\x19yO\x8a\x0e\xeb\xa8\xd6\xd5\x96\xe8\x0b?\xc4sOt-e\xbd\x8f\x14\x1fL\xf0\xfc\xd2\xdf\x1c\x88\x17+\xac\xef\xb3L\xc8\xb2a$\x1eI\xc1Q\xfbH\x9e-\xf2\x05\xd74\xca\xfe\xbb\xac\x18\xdaDR\"\xbdx\x04\xa3\xd8\xd2\x01\x98{\xc8\xf2\x0d\xba\x18wv\xc1\x82_#x\x11F\xf0km\xf1\x15\xbd\xf5\\\x133\xa6\xbf\x14-\xbf\xf4\xc7\xf4\x97\x0eL\x7fY\x1b`EI=\x9b6\x0d\xf1\xe5\x0d#\xfc\x90#\xfc\xa8\x8d\xf0/o\x18S\xf6\xbcz\xf8\"Liw\xc1\x82\x1f\xc4z\xfe\xe0\xbf\x9e?8\xd6\xf3\x87\x06\xe5b_\xb6\x96/\xfaI!Z\xc8\x08\xff\xa5\xb4\xb7\x1c\xbd\xa5\xba\x96\x8f_S\xe4\xbelko\xbf\x8a\xe0\x9f\x11\xfc\x12\xc1?\xdaJ\xd3\xe3\xa3\x7f\xa0\xc2\xd4&9\x12\xe2\x10\x1dOb\xe4\xca\xd0\xa3L'6\x1b\xb1\xaf\xcc\xd2\x83\xe2/\xa5q\xe9\x13Y\x15F\x1eR\x8cDr\x83\xd5PN\xf8\x07\xc2\xc7\xadF\x077\x19\x1auN>\xa9\xf4\xf3\x96\xf9\xa3\x80\xe1\xaf\xa0\xcb\xbb\xbb\x93\x86\xb3\xa8q\xef\xa9<\x0c\x86#\xaf\x8e2KG\xea,\xaa\x0c\x18\xff\xf04\xb0 7fm\xf0+\xdeZ\xf0\x95\xd4\xb5\x12\x12\x0cG\xa1_\xbbq\x07r\x08\xa3fR\x883\x0fy@\xd9\x05 \xdb\\\xf3\x93\xea\x8d\xdc\xfc\xc6\x1f\xd5\x1b\xd4\xfc\x86Q\xca9\xac\x84\x9cR\xf5d\x16*\xbfL\xd2\x19~\x8a\xe0|\x04\xfc\xb8O6\x92x6\x92Y\x97\x1d@/\xcc\xc2\xdc\x97OO\x08r74\x8b\xc2\x8d\xe4?7\xb0\xc5\x80\x1e\x06|(W\xd7k\x08)\xf1T\x97\x11\xc9\x9a\x99\x81\x9a\xd9D\xf0\xd2\xca\x91\xf0\x03\xa2\xb2l\xecE\x10\x0b3F\x0c\x0f\x07\x90<\x80\xd8\xeeF\x07r\x1cK\xde\xc6\x90r\xd1\nv \xe6\xb2\x95\xc5\xad\x0e\xd4b\x0b\xbd\x1e\x0b\x96\xc3\xbdQ\x84\x8a\xbb\xe5pw\xc4\xbf\x8c\x80\x84\xa5\xa6$\x86mh+\xe1\xa0%~\xa9K}\xd6zhU\xfb\x936\xab\x8c\x9et~Df\xfc\x17/\x93q\x85\xac\x90\x15+\xe7\x02\x0c\xc7\xc6\x8f\x81\x93\xa5P\x97r\xfe\xf0_X\x05\xfc\xedmx\x04 \x1c:\x1a\x07?u\xa7\xba\xacjOu]\xc1\x01|F\x07F.\xcaKL\x12\xe8L\x86{\x8d\x93\xa8\xfc\xa8}\xdb\x03M\xb2\xfc\x1ax2\xb5;\xb1*\xca\xa4y\x94\x0b_L\x8eR\x11XQ\x83\xe3M\xfd\x0c\xa3\xd5\xbe\x91\xba\xcf\x0c\x9bx\x19\xd0\xb0?\x8f\x17\xd5\xba\xbb\xda\x05m\xd2\x08Q\x0c\x1d\xa06\x10:Ts\x13b\x1d\xd2\xaf\xff\x81!\xa9-\xd0^t\xb4\xeaD\xd0\xeb\x99|\xcd\xf8\xd5\xeb5=\xf7\xf0;N\xd3\x17\xde*\xab\x85\xfbT1\xf0#/9\x1b\xc1\xa1\xb4 \\:\x7f\x95\x14\"\nfB\xc4\xf3_\xeb\xcf_\xc7\x0b\xa1\xbb\xf2\x1a\xce\xc4=\x1ce=\xae\xf9]\x0d\x14O\xdd\xd4\xaa\xe9\xaf\xf9Acf\xdf\x11\x1cwHe\xbe$\xb0%\xf5\xef\x0c-\xcc%Fm\xd9\x18%\xc1\x82j/\xeem\xa0\xa6\x97N\x08o\xa7V#\x06So\xb8\xb6f \xb8y\xf9f\x10\x868\xa1\x00=\x0f\xf4\xbb\x9bN\x10\xec\x93\xf4\xa7f[f\xc7Q\xd2'\x9f\x97qZ\xa0J\xde\xf4\x02\xd3^\xd8Ro\x07\xcc\x93#?\xf7Z\xf2\xee\xe5\x8d\x03\x11M\xa4\xd9\xb5+\x87\x07\xed&+o\xca\xc7\xda\xcd\xe6\xe7''\xb3\xb8\x98\xb5\x1a\xa8n\x97\xaf\xd4\x1e\xac\xd7B\x7f\xcco.\xe5\xb0\nu\xa3\x907\xc6\xea\xc6\x18=\xa5;\x90\xb2\xe9\xc1!\x0d\xd1\xf8\xdb \x1b\xe5Z\x81\x9e}\xe6\xb6\xf9H\\\xac\x06J\x88})#\x04\x1d\xe6\x8f>9'\xf9*\xe8T\xa8\xa8K\xb1B9\xda\x00\x83P\xec\x82Nv\"\xe3@\x98\x91 CNQ8/\x06\x94\xc3\x15o\xeeb\\\xa1\xed(\x00\xf4\xdf\x97\xfdq.\xc2c\x8f\xa8q\xda\x16\xa8\xe5gc\xee\xbc\xf1\xaaZ@\x0b\xcd\xd1\xd5\xbe\x88m\xda\x0d\xdbB\x90\xb4 \x0exg\x0d\x0f\xf9\xe6\xa5xK\xc7\x12\x10\xa9\x05\x81\x01$f\x08\x1b\xa17\x15\xc10\xc6/\x16 \xb6\x8frE*\xd1\xc7\x14<\xa8_\x1c\x9e\x9c\x13\xdd\xc2\xd8\xb4\x00\x9d\xa43\xfe{\x86<\x01\xe9\x9f\x11\xf4\x8a\\\x85\xfc \xbf\xab\xddB\x1cQ\x185\x95\x1ek\x06\x8a \x885V\xf1q\xaa\x11\x13\xbe\xa8\x0b/\xba7w\xd3\xbd-T4\xea\xf1bsM\x02\xe2\x1c\xbbj\xc0\x8c\x8fB\x9f\xa3\xbc\x1e\x1a\xfa\xa4\x86/\xcb\x1e\xdc\x86\xdd\xd2\x9fE\xfa\xbd\x84\x91zC}\xe8:\xd8\xfeY\x0e\xed\x9ff\xc4\xf9\xa7\xb4\x19tl5\x1b\xb4\xce:\xa0U\x8b\x8c\x11*\x02O_\xa1\x15q9\x0b\x99\x97b\xd5X\n\xad\x0d\xf3j\x9c\x91@\xbaZE\xa0\xe2\xfb\nF\x16\x10\xc3\xfb\x98\x9e\x118]\xc1n/\x8cpo\xe19\xb4\x1b\xd5W \x0d5\xe8[z\x1bv\xc3\x08i\xba\xf6\x02\xc5e\x94K\x18\x9f\x16\xe8z\xc8\xe0\xa1\xe4\xd8\xf8\xdb;T\x99pN\n\x16\xe75\xdd&\xa1\x13M\xb5y\x82C\xc3\xc1\xeaX\xa3\xa3\x07\xfe=&I\x1a\x04\x0cv8\x01\xbe\x0d\x94\x8bV!\x97\xcd7\xc3\x9d_JX\xfeb\xc6\x9d_\xbe\x0cwN\xcd\xbaD\x81/\x9aJ\xe9\xf1i\xc1\xf2x\xcc\x9a\x96 K\xb3'\xc4\xe5fz\xe1|z$\x9f\xea\x0f53\xd6\xf0\x1f#\x15`\x1a\x10\x12\xc1K\x8e\x19z\xdc\xc3\x19\xe9\x0c\x04\x82\x86\x15\x86\x93G\x94\x0f4M\xfb\xf0\x932g\x84\xa3\xb6gc\xa3\xcf\x8dL25\x7fY\xadG\xe9![S-U\x1e\xb2\x03\xc8\x85\x8b\xac\x15W\xa4\x8a\x88\x04t\xc80\xecn\x07=\xba\xb2\x11\n\x7f\xbc\xa3jgf\x1c\x15\xadT;\xf3\x9a\xac\x9fu\xc84Q\xe3\x14Z\x937\xbe\x95\x9956\x9bikJ \xaa7\xbd\\M\xa8/\xf4\xc3CbD\xf9Z\xdf\xb3\xb8p&\x02\x80\xa6\xa5S4\xdd\x08\x93o\xa9\x02\x1a\xbd|\xe9\xc6\x12\x9d\x8a\x9dU\x99\xaa\"\xc9V\xeb;-\x11;-\xe1;-{\x00\x89;\x16:\xe6\xdf\xe3bf\xb0\x03 \x1c@b\xd1\xf35vf<\x8a n\xee\xc6\xc4\xa8\xb4\xb5\n\xa3\x89\x17\xc8\xae\xb3=%\xb8\xac\xfbS\x03\xa1uw\xe6\x9d{8\xb9\x89=\xbc\xd9*(\xc8\xa1\xa65\xfb\xf7\xed\xf9\x98\xef\xf9\xd8o\x8fk\x8b8\x9cU\x87\x1c\x95\x87\x1c5\xee\x8b\xd2[\xc5c\xad\x91\xf7\x0dk\xbb\xb2&4iB\x86\x85{V\xd8\xf2SP7\xcb\x86v\x94\xb1\xe8$\x9e\x04\xd4\"\x83\x96\xbb8{\x00[\x01F\x9cKyT\x08\xa4\x18\x8b\xb7'\xb4\x10A&d\xe2\x08\xf2\xedm\xb9\xab\x1e\xd8\xa5\x91\xbc s#L+}\xf5\x8d\x025\xcb7\x86\xaaE\x9d\xf3D\xd7\x12\x8b\xed\xf2\xbd\xa5Y\xcb\nl\xbe\xd5\x98\xb6\x0e\x1dZ\x0e\\$\xe1\x8c\x8e{@,\x8dX(\xaf\x8d\x10\xe4\x12\xe5\xf3\xff\x02\x94\xaf\x0e\x15\xfd\x14)C\x08D\xca\xa2\xb6\x83\x80~\xa0\x94\xc6\xa8\x07\x1e\xcc[6LF\x11'T\xadC\xc226\xbeK\xa8\xa6%\x12\xbb\xe4A\x17\xdd\xa4.m\x12\x9a\xd8\x86\xc9H\x84C\x96c\x8b\xeb\x03;\xcdI\xfc\xa9\xbd\xa06lk\x1d[\xc6\xe5\xfd\x8f\xed\xbe\xc6\xc2Z \x9ai\xb1\x8d/\xdf\x08\xab\x8a+\x01\x8f\xaac\xb5Ka\xd8\xbdQA\xc1\x0d\x11\xa5\x02\x9eC\xb1(\x82\xf2\xe4\x1e6\xbe\xe6\xb4.+\xf67\x1f\xfa3\xbcsI\x03\xe6\xe4\xfa.v\x0dA\x1b\x0e\xa1\xf7\x9e,H\xcc`8\xea\xc1A\xf5\x0b\xbd \x98\xa6\x16\xda\x86^u\x0f\xbf\xe5wX2'\x05\xb4\x9d\x8e\xe7\xd7g\xcaML\xb8\x18\x82\x81\x01\xaf\xf5\x93\xd0q\xba\x9c\x10o.|Ft\xc5W;*\xab\xd1<\xa6,\xf0\x99Hm\xffpPYQ^\x8b\xd9\x13S\x85\x03\xa5\xad\xab\x8d\xec\x83\xb0\x13\xc3\x8e\x08\xa6k2\n\xcd\x91\xe6\xe4\x9c\xe4\xc5&n\xda\x1dp\x9d\x90\xcb\xb7\xd3\xeb\x83\x15\x0eQc\xb8\xb3\xe7\xec&\x8d\x0b\xf6\xfc\x06\xba\xaa0\xb4\xb3\xcb\xeb\x0bS*UT\xb9\xc4\x98+\xcaJ\xb0\xca\x03\xa36\\\xda<\xd1\xa8S A\xbd\xe6\xb2\xb9\x94\xb3\x11\xab\xba\x19\xb1Vl&<\x04\xaa(N\xc5\x02Q \x89\xd0\x98\xf0F]7\"~xP\xd8\x1a4\xa5\x91\xd2\x13\x0fI]\xf5\x0e\x87m\xcc\xd4\xa6z\xde\xb6\xf7s\xfa\xbe\x92\xf4}u\xc3\xf4\x1dU\xc6\x8a\xbc\x8b\x1f\x1au\x17\xda\xddm\xe8\xf5\xfb\xfd\xea.\xa1\x13\xd8\x86@\x08\x15\xeaE\xb2\xe0\xed\xc1\xe9\xaa\xf69Y\xf0\x86{!\x9e\x07\xed\x93`u\xb3'\x81\x1an\xa5\x8b\x84\xaf\xebCi\x9d\x11\xabk\x9d\x11\x8as\x08\x08\xec\xe8}\x87p[\xeb\xcf\xba?0@zW\x18\xe452!n\xf05B\x9d\xf84\xcd\x0c\xb6\x87\xc6\x90\xbd\xcf\x9d\xc6\xa1Rv\xaa\x1d.\xe8R \x02\xb2\xcb\xa7\x91\xb0\x15\xe0\x19S\xdd\x0d\xe1\xe1\xa0\xf4-]\x91`7\x82\xddP\x1eO+\x89\xdcg\x84\x05\xbaU@\x99\x0c\xf8}f\xb8\x8f k\x9f]\xab\xeb\x1c6\xe7eTemy,\xf6-\xf8\xbf:\x92\x0c\x06|.vi@d\x17p\xaf3\x94\xf6D\xb5\xd0\xb5\xf3 4\x13mp\x89\x03\xed\xc3j\xf5\x85\xe7#\x0eGB\xd4@sV7s\x16V\xd8\x8dz\xc3J$\xe0\x90\x93\xf2`k\x03S\xf8\x1a\xf3\xe0iw\xeb*G\xeaT9\xd6%\xc4\x08\x12\xa3\x06\xd1\xbcl\x19l\x8b\x11\xed\xf0\x01\xe4\xfe\x0b\xd4\x92\xd7\x8c\x00\xdc\xfc\x00\xae\x80g\x1co\x03\xa0\x969\xf9\x02\xd9\x0c\xce\x9b8\xec\x95 \x9d9\xd5!\x0d\xe8\xf3E\x7f\x84\x16\xc9\xbf\x98\x03P\xca\x17\x94\xd7c\x1f\x91kuC\x0c\xc1\x8a4\x16F\xf8}\xc8\x1fe\xb8\x1d\x9aU\xc5\x13\xfegy_\x92,\xf9 \x9eq\xe7ed\x91\x81\x8f8%*\x9d\xd3 \x89\xe0\x94\xe0\x9f\x17\xd5\x9fG\xea\xcfSRF\xf4\x887\xb5@\x1e\xf1\xbe\x0c\xf29jH0|\xa1/\x89-\xbb\x04\x9el\xc9|\x89 &v\xf6\xab\xd3\x8e\xdf\x0b\xaa$,\x11\xec\x87*\x7f\x06\xbe~\xe0\xbfk\xee\xdf\xbbw\xe7\x1e\xdc\xe2\xe7\xd9\x9a\x13s\xfb\xc6)\xdfd\xe2M;\x92\xe3^\xd9F\xb7\xbbG\x8f\x1e\xc1\xde\xfdP\xde\xe1O\x02V\xde|\xf8\x10\xf6\xee\x8b\xdc3!\xac\x9b\xce\xf8\xb6P\xa6\xe3._Il\x1en\xc1\xde\xee7w\xbe\xb9\xbb\xf7\xed\xfe]X\xc3\x9d\xfd\xfd\xbd\xfd\xfd{w\xbf\xe1O\xfc\x9c2\x9fZ:\xd2)&\xac\xd7\x8e\xe0\xeb\x92\x86Z4\xd5\xdd>\x8f\xaa\xa3\xb6\x07\xa3\xbb\xe3\xae\x9e\xb7\x9a#4Px\xc5\x18\xa8qY\xe6P\xa5=\x18\xd8}\xce\x12\xf4)\xdc\x92C\x15\x0e;\xc2\xa7\xc21P\xd0\xf0t\x17\xd66\xe7(q\xec\x8d\xe0\xbd\x80\xf5\x1b\x993\x83`:\x1cxF0\xf1\x19>\xe7T\x1c\x1b\xe7K}\x9d,\x0bp :\xdb\x08\xc7gq1{\x9aM\x88\x06\x19u\xcb\xa4\\\xc4\x96\xaa\x90-\x1d\xa4\x9e \xb43\x9e\x1f\x9a\xbe\xaa\x08\xbfw\xc2c\x8d\x84a\x97\x1a3\xa9\x9c\x0b\xcb\xaf\xc9\xf09\x19y}\xb9\xf5\xd6:n\xb05\xceOS\xb4q?/\x8e\xaaT\xd8\xe8\x0egz\xe25\x16[g\xdd\xe0\xd5\xbf\x96\xa3\xa0\xd9\x84|X-\xf8\x96\xdb\x0d\xa1\xb8H\xd8x\x06Au\xbf\xab)~\x8d\xe3\x82\xc0\xdeA\xe7{\xa0\xd1\xfe\xfe\x92&\x9f\x97\xe4\xf93\xfb\x1c\xd5\x85\xcd\x7f\xb7a\xf3\x93l\x8c\x01\xc3G)\xe1\xff\x88\xc96n\x96cp6mVj\x83\xdcR\xdaj\x19\xdf3\x7f\xcd\x97k{\xfb5\x89\xf4\xa3\xef\x16\xbc\x16{\xff5\xee}G\x88\xc8\x07\x12r\xac/\xa4,z=G\xd7\x06\n=V6\xd5\x01\xfe@\x97\xe7\xa6\xc7`\xefMFw\xc8%#\xb4H\xaa@\xc2\x02\xe2\x9c`\x92\xe38M\xb3\x0b2\x81\xb8\x80OdU\xf4\x9b\x89\xb3\x9b\xdd\xf3\x0de-n\xf1\xdc\x98\xc3X\xbf|\xd2\x11\xab\xab\xbb*\x86~iI\x8c;\xde\x94|\xbay\xf1\x01\xcc~\xb1\xea\xc2\x15j\xac\xc3\xa6$C\xb2\xc9Z$\x89\xc6\xc1\x9b>\x08\xad\x0d\xb9\xd5m\xfa\xa5\xcb\xda\xfe=\xf7\xe3\xc5\"]I6\xde\x12\xd1\xaf_W\x91\x83L\xf23\xb0\x03\xb2\xddD\xb0\xe6\x94^\x91\xbc\x16\xde\x7f\xa4\x08!\x96AA\x18\xc4@\xf9>\xa8 \xa7\xc6\x08\x19\x95{\xc2\x89\xfa\xfc*\xe7`\x9f\xfd\x06\xf4\xc4y\xeaot\xda+\xe5kI\xd68\xc3\xa0e\xb41\xe6\x03h@\xeb'4]\xf1&\x85\xd6\x14\xd5\xa4c\xe1\xd4{J\x80s\x0fd\xd2\xf7\xf4\"\xfdd\xe1\xedKu\x0c\x13\x8c\x92f\xa1 \xf5b\x16\xfc\x85;{\xf0\xb5HU\xd8\x1f\xcf\xe2\x9c3/\x8fY@Q\x98\xb1\x8aG\xc7\xa4\xed#\xad\xff\xe2\xbd?&U\xc6\x84\xa48*ic\x9bj\xbc\xf5\xdaa,_9\xf0V\xa9;\x8d4\xf3\xcf\xab\x08z\x7f\xefE\x82]\xb4\xea\x04\xc6\xb18\xe2]{\\\xf6cs\xf57\xa0Y\xd8\x16\x97\xdf\x91\x08>XE\xe6\x9fI\xfc\xe9u\xdc\xd02\n\x06/xGd\xe6\x02\xf9\x92\xa1qqF\xb6\xa1\xfc\x1c;<9I\xe6\xf3%\x92p\x8em''\x8d\x14\xed\x1d)\"\x03lE\xfc\x0e\x9e\x93&\xd2\xf3\xfe\x7f\xe7o\xec\xdd7$\xa6\xe4\x0f\xf6\xef\x192\x1f\xbf\xb7\x0cY\xb2\xf86)\xfa\x95e\x03\x9c\x91@\xc4f\xa1tV\xb9\xcd/H>\xcd\xf2\xb9P\x7f\xc7\xa2\x8d\x8b\x84\xcd \xa6\x90\xd0iB\x13F\xa0H\xfe \xbe;\xf0\xa3[\x8cw&\x0d\xfbE$\x0d\xfb\x8cMp\xfeb\x1c\x94\xf9\xd3\xf9\xb3>\x1f\xd9\xeb%\x8byO\x85\x16\xd6\xd2\xa5\xab\xce\xad\xe9\xed^\x91\x80*-?\xedO\xb3\xfc(\x1e\xcfj\xf1V\xc6@\x06u)R\x8a\xdc\x15m\xa9\x9b\xd4e\x8a\x82\xf6\x03\xe7g\xef\\ \x7f\x90\x8el\xe6\x1fI\x04'|\x9e\x1f\x89G2\x9d\xd2| B\x8a\xcb\x038r\xa9\x88\\\x8bd%!\x1d\x15\x86`{\x00\xfb]\xa2\x14\xda\x85\xe1Q\x95@\xc6p,\xbfN\x8a\"\xa1g\x82 \xc3^?\x91\x95\xc8f\xc1\x86\xd4\x94fR]\x82y\xe6/E\xfcU\xde\x97-\xdc\xbds\x9d\x11\xfc\xd76_\n\x85\xa7\x96\x01\xeau\xbc\xb0\xa6<\xfb\xf8\x85\x96\xc5\x93<\xcb*\x959\xff\x81\xa2s\x19K#\xf26\x85&\x93b\xad\xebb\xa3\xae\xff\xa1'\x85r\xcf\xa9 \xec9\xdd\xa0i\x9c\xc8r1\x89\x19y\x8e/\xaf\x0c\xd5\x0cm\xdfn\xba\xb29\x99g\xe7\xa4S\xd26\xccz\xe5nxBR\xc2'\xe0\xdbtk\xd6\xbeS^m:e\xd1IsA\xdc\x89\xa3\x85\x08Y\x92\x17\xa5G;\x94\xae \xa12\xce\x94\x13\x18\x92\x91l\xd4c,m\xf4\xb0\x8c\x06\x83]\xd1)R\xc6b\n\x14w\xf8\xc8\x96$\xda'\x91\xc4\xb9\x8c\x03\x15\xa6\x8d\x95]'\x1aw\xfa\xe2qr\x17K?<;Q<\x97)c\x12YM\xcbb\xd6RW\x01\x03\xc8\x82\xa5\x83\x06\xca\xe5*p\x02K\xe9\xac\xdb\x8e!\x03\xab\xd4qF\x82\x04cH\xd0p\xc3\xf7n\x04\xbd\x84\x9e\xc7i2\xe1\x94\xf8]\xccf69\x88\xcf&\x85\x01\xc4.\x0fT\xfe\xd2XNy\xc5\xa7\x8c\xd4*\xe5\xfb\xc9\xfe\x01?\x07I0\xae\x16\xd0\xa9(\x9d\xe2\xec\xc7r\xf6\xe2\xd7\x8a\xff\x92\xbb=H9\xbe\x06I\xc5\xcb\xb0\x10\xcf\x8e4\x82\xa9\x81\x07\x90{\x9eR\xd4\xe9Z\"\x1ee\xdfy\xd9\x9b\xe4\x9aZu\xd0\x1a;`\x9c\x92\xd8Y\x94Hk\xbc\xed\x16\xc3\x84?\x84Ym\xc0:\xea\x8d\xb3\xee\xf6k2P\xe7\x04J\x8b,_\xa9\xb8x-t\x11&\x06@\x8e\x86 b\xb1\xfeE\\<\x16\xf44@\x1f\xb6\xfe\xc9 \xa1\xc52'o9\xbd\x0e\xea\xc4[\xb1R\xce\x81\x97\xbd{\xee\xc1\xd6\xf9P?7\xf4\xd1pQ\xec\xd2\x0d\xb6\xb8x\xae41\x9b\xf5\xaf\xf7\xd3\xb12%\xc86\xebA\x9e[\xce\xb67spR\x1a\x11r\x01/\xfde\x9e\x8d\xbc\xd0\xbe\xd4\x89Y;\xdcKo\x1b\x94\x03\xdb\x99E:\x88\x08\xba3\x93\x80a\x82\x19\x86\x19eL6\xf7H\x94}\xea\x80\x80\xb6\xda\x9d{K\xed\x98\x8a\xc11`+?\xd2\xfeI*\xd6Fgk\xa2*\xaf\x03\xb24\xc8\xe15\x1a\xd2r?\xe8\x0c\xce\x9edp\x0c\xd3I\n.\xb9\x0f\xe0\xb3\xc1s\xe8{\x12\x01\xb2W\x8dd\xc0\xaf\x1f\xbf\xb3TO{\xc2\xdf\xd6\x81dS\x0f\xfedO\xfc\x81\xc3oOH&*j\x19\x1f\xac5>\x9c @,\x9d\x9c&l\x8e\xe0PN\xb14\x13.\xc8\xd4\xab\xcf\x9f\xaf\xd3\xe78[Rv\xed._\\\xa7\xcbOd\xf5\xa3`\x8aY\x0b\xba~\xdd\xfezs\xdd\xae\xbc;}\xd9\xdd\xe9 \x13\xa5FK\xa7\xe6*\xc2\x86V\xbe\xcd\xf1\xf8\x93H\xd3\xa9(\xcaW$\x90\xbf\xfc\xb4\xa1?t\xa6x\x14\x15\x90D\xc6\xaaVRJ[\xb3_u6k\xa6m\x1ce\xac\xe5o\xd1\xab\xf8\xc0\xe6\x8eyr\xb2\xc8\xc9\xb9\xc9\x14\xec\x97\x85\xe5\x9f\xbeIQ\xeb\xc5_\x9f8\xf2\xf6fJ\xaa#\x11d\xa5H\xc7\xf0\x87F\xe9\xa8\xb8!\xa5\xbb\\\xfc\xaa\x13\xbd\xcck\n\xbf8\x93R\x7f\x8fz\xed\xe0{>\xa0\x7f\x92`\xd73\xff\xdd?\x9c\xb8z.k\x92\x9b\x8d\x9c\n\x15-\xab\xadt8\x17\xc1\xa9\xc5\x9d\x12d~\xd8\x8b\xe0\xc4\xa1\xbc\xc1\x04pL\xf5\x86\x91/\n\xbc\x11h\xcaU\xb1\xb8I\x04q\x18\xc1\x96T}T~U\xe6\x0eD\x1e\\\x19~\x18$\xb2P\xd7!\xe7\x02\xa4\xf6`g\x0fK~\x1d4\xab\xc9\xf1\xeb\xcae\n\x17zvl\xc6g\x14{U\xf9\xc6\x9fp\x9bW\x93\x1cZ\xa1'\x8a\x8f\x19\x1f\x9b\x82@m\xc8C\xea*\x8b\xb2>c\x16\x95\xd4\x07Q\x97\xb4\xd5\x14\xa4\xa5\xa3@O\xb8\\p\x08\x19\xee6\x93\xbe\xc2\x82\x8f\xd2\xe9\xa6\xd4/\x89\x05\x8d`\xe9\xe4U\xb8D%$\xb6\xc0\xf8\xe9\x01GD\xb9\x9e\x84\xf3#G\xc12\x8c\xe0(\x881\xeb\xc3\x05?'D\x0e\xd7!\xff\xcc7\x9d;cn\x1e\xaa\x95\xa8\xf4W\xe1\xf6\xd9\xba\xff\xc2\xcf\x13\x976\x80c\xea[l\xcc\xf2\x08\x1b\x0c\xf8\x02h\xac\xf3\x8br\xa6\xb2\xbaP\x04\x99\xc9\x96\x83\xbbW$\xde\x0e\xaa$_U\xcb\x07\xda\xdf\x8f\x1e=\xe2\xf4\xe3\x16\x9c\x99\xf7\xf9\xb2\xde\x08\xba\xe9k\x1fY),\x1f\xef\x8f8^\xaci\x1b\xc3Z\xfc\xb1\xc4qI\xbd\xea\xb0\x82\nl\xc3\xb9\x84\xccH\xe8\x15\x07\xf5\xd5\xcdB\xfe\xe5C\xf1\x1d\xe1+\x0d\x070L\" \xbeK\x9e3\x17\xbd\xac\x12k`\xf5\x82Z\x86\x02Z\x9a\xe8:\x12\xdfph\xd1a2\xb2\xd3\xcc\x02M\xb46\xeds\x1c,\xd1-:\xe0\xaf\x15\xf5\x8c\xc6>~ \xd3V4\xa1\xba\xae\xc2\x90\x1f_\x8be1\x0b\x0c\x9eEV\xf2\x12+\xa0e~@\xce\x9c@.w=zmUj\x95[\xb7\x00\xb3\xb0\xd6\xd4+\"'c\x99\xd8Wl\x7f?\xce\x12\xc1S\x82\xc9h\x87\xbc\xa3QX\xe3\xc8\x98\x0fG\xa6.\xe5l\xc0\x86\xb6\x04x\xea\xca\x10\xab%\xf9'5\x115FEKl\xad\xfe\x01F.J]\n\xd9\xcd\xb4\x99wU8\x8d\xf2|\n\x0b\x90\xd1a\x9a\x82W\xc9\x99\xd6\x8e\xb9d\xb7\xe0\xb8\x85\x14\xa9\xe8\xb2\xf9\x1f\"\x7f\x9dJ\xdb\xff\x0e\xec\xc1!L\xfa\x8bLT\x82\x98\x0cSN\x8dZ7\x86|\xe4\x9c\x1f\x9f\x08\x06S\xfc\x0e#\xec9hh\xff&\x95)\\ \xcc\x11L\xbaX\xd2\xab\x08~\xbc693F\x97!vY6+\n\xf5\\\\ \x82z\xfdp\x11\xf9IP\xf6\xb1hF\x12EC\x84\xa6\xd7J\xd8x\xc3\\\xce\xb9%\xb8\xbb24\x1b\x95\xb3\xc3%\x13\x8f03\xf2H\xc4q \x19\x89\x99\xd8\x89&x\xaeM\x17k\x99\xa1U\x02\xe8\xa7$\xc8m\xa0\xd2\x04D&Y\x1e\x8a@b\x0e\xa9\xb2P\xf0]\x9a\x9f\xa7u\x18\x9a_\x1acL\xe5\xd6\x00\x82\x14n\x81 \xb5\x91\xae!\xa1\xce\x1a\xca\x1c3AUtz\xc9D\x93\x08|s\xe7\x0b5B\\.\xf3;|\xef\x8d\xe1\x10\x16\xc3\xe9\x08\xdc!\xeb3\xa1(\x9b\x08\x0b\x8cX\xe8\xfaZ\x99g'\xd4\x04\x13\x8f\x83B\xc0\x01E\x97\x85F\xde\xc7N\xf2\xeep\xf3\xaaU\xfc\x92\x0c\x01\xdf\xcf\xa2\xde\xcc<\x8c\x103v\x1fHV\x9f>\x80%\xa6\xf9\xe1\xb81\x80\xbd\x10\xe2\xe1r\x84hp\x0b5\x0bl\x98lo\x8f\x1c5\xeb@\x13J\x87\xf9H\xa8\xb8\x84/|\x80 \x05\xb7\xb1\xda\x98\x81\x90\xf0\xc7\x8b\x08\xd2\x08\x96\x11\xcc,\x90\x94\xe79\xff\xbf\x08S/\xa1\xc4\xe5?\x16,\x86{\xf0/\x98j\x9c\x8b\xba\xe3h\x0f?\xde357\xab\xda\x99\x99\x11\xf1tSr\x7f\"\xd1m\x86\x14\xfc\x00R\xf8\x17\x92\xfd\x14\xd6`\xc1\xd0\x0b\xed\x93\x82\x05\x8b\x08\xa6\x11\xcc\"8\x0d\x9b\x01\xf8\x1d\xe2\xc7yY\xed\xa3\xf2\x80\xb0\x1f\xb5B\xbdZ\xa6\xbf\xc9\xb5\x08Z!\xc5P\x80O\xb9\xa7\x1eb\x99=Q\xf3\xacslz\x97\x88\xf6\xf5\x0e\xdd*\x8d\xa4\xfa\xcc1\x06\xb7\xa2#\xe9\x92\x16\xf0%\xb5L5\x00\xa8\xbbn\x19\xa2\x81_0\x80\xafH\x90X\xed\xe7\xe0\x14\x17\xc6\x19e \xdd\xa8\xf8C\xbb\x7f\xedW_\xf8\xccv\xecj\xa8\xb6\xa7mct\xe6J\xb5\xe6Im\x10\x90:0\xf9*\xa7|\x06s\xb8\x0dw\xdb-\x8f\xd5\xb3\xfd\xf6\xb3i\xf9\x9d\xcds\x7fa\xf1\x188\x97\xb1CG\xc6\x80a\xe4\x9b\xbb\xf3XZ\xe4\xea \xe6\xc9+\xa9\x9d\x99/\xa4\x18:\xec\xaa\xe7D\xdd5\x1e\xc4`r\xa9\x03\n^\x89\xe3:\x87G\"kt\x0e\x0fa\x0e\x87p\x81\x99\x07\xf2\x08U\x0c\x18g\x8a\x85 X@\xfb,\x13\xf2w\x88ei\xd9\xc6n1\xe8'r\x9c\xfc!z6\xa4\x01\xe9\xd2\xf4\x96\x9a\xda\x0e\x7f\x13\x93\x17\x89\x9f\xa7\xc5\xc4\xed0\xa2\xe5\x01\x99\xb1\x8e< \x0b\x16\xc1\x05\xe1l2\xf3\xc8\x03\xa2 \x1f\x81=\xc6r\xc1\xb4#\xeeKsZ\xbcJ\n\x06\xc3^\x04\xbdQ;\xa9E\xad'\xcf\xa4\x16\x89\xaa\x15_%\xc5\x0f\xcb\xac\xe4\xa4\x9e\x95\xdcq\x9ar\x01\xb6d-1I3\x8e<\xcb\x93\xb3\xc4\xe6\xd9\xa6d.\xde\x13\xed\x8b2\xa1\x04n\xc1\x99!\x14\xd2\n '\x0c6\xcb\xae\xe1k\xbf@\x901\x04\x99d\xabjU\xf3\x1dE\xa00\xb1\x7f\xe5\xc4\xc6\xe0\xa1\x96\x0dvs\x975\xc0c\xe1!\xec\xc2!|\x92\x19\x0cq\x9b\xed\xca\x08SqsW\xa8\x1f\xf7\xc43f\x8c.\x03\xb0'\xd8c\xe8\xfb\xa4\x16\xd3\xfcNe\xcf9aq\x92\xba\x19*\xe5\xdeo})q\x06\n \x14\xdfb\x94\xc08^\xc4\xe3\x84\xad\x84A|\x00\x97Xo\xbb\x195 \xe4A\x14\xb12\xf1R\xd6x\x89\xf4ORrN\xd2\xea]\xfb\"n%~\xe1\x06\x89\x08\x9b\xa8BL\xcbuV^\xf6b\x14\x1c^\x9b\xb8\xdc;7\xd3\x05\x82E\xac\x14~\xad \xa4\xcf13z\x17^\xb9\xe2,k\xdbj\xb3\xf4-H \xcaJ\x1c\x9aU\x03 \xcb,\x992T\\h2\xaf\xcah\xaf^R\xba\x0d\xf1p\x91&c\xe4\xdb\xf6lQ\xbb\xb5\xc1&\xb4 \xf9&d\xa0\xd1\xcbn'8\xfe\x0d\xc9$tjZ\xfeTK\xab'\x9b\xc0\x15\xe6\xf8\xd3\xc8>!%%\x81j\xd7NE\xc1\x19)'(\x16\xcbb\xd6\x05 %\xbcU\x11\xfa\x96]\xae\xc1\xc9\xca \xe1\x1b\x16\xbai%\xe0\x9f\x90\x11\x91dQ\xd9R-;\xbe\xe6\x16\xbc\x8b2\xbb\x96\x16\x11%w*\xe8*l\xe3\x1e\x1e\xe6^%\xd9\xea`\xcb|\xf3:|R\x87\xecn\x04;{\xeeV\x97\x14wWW\xcb\xad\xf5\xb8\x16\xb0\xad\xa1a\x9f\xf0\xc8\xd9\xf1\x05\xb3#\xfbd\x99HnH7\x07\xb1\x17(\x9a@\xee\x00\xf0&\x89W\x1e\xfb'^i\xf7\xe1\x95\x90\xa3\xd9\x91o\xe2\x95vw\x1b\xe4\x19y\xec\x97g\xc4\xdc\x87\xd7\xb4\xce\xaf\x93\xd7\xe3qg\x9e\x91&\x9fx,\x08\xad\xd7\x89\xa6o\xc2v\x11\x8dz\xcb\xbe\xf5\x97\xce\xbf\xa8\xee_9\"Y\xe2\xaf\xac\xfa\xe7\x1e\xddfI\x19\xca\xedi\x17gOJ\xe4\xb3\xaf\xcd\x06\x05a0\x14\xb1\xabB.\x9e\xa8\xa7\xec\xdfW\x04\x86b\xd1\xd6\x8d)\xd0F\xd9)\x9aur\xa5\xfe\xd8 _\xbc\x02\xa1s@\xa1\x04\xc1\xa2\xd7w\xa6\xd7\xad\xec\xdc\x98\xc8_\x92d\xe2\x82\x05:\x9b\x135\xb8\x9c\x1a\x87\xa3s7\x91\xc6\xdcl\x94\x90\xc2\xb4\\I\x81\x12\xf6\x00&\xac\xad\xc1\x9a\xb1v\xe2\x89W\xcf\x8f?X2O\x9c\xa3\x05]\x83\x9cM\x7f5gV<\xc0\xb1\xa3h\xac%-\xa8f\xd2\x8cn\xd3\x7f\x9d\xb3\xe1\x8c\xa9`\x90sV\x05\x83\x9c\xb32\x18\xe4\x9c\x95\x89\"\x9f\xc8\x9c\x91\xda\xbbx\xbf|[\xbd\xa5~\xe1\x8b\xa5\xfd\xed\x89\xb2\xc5i\xb7\xd5\x17\xea\x17>\xaaR{=)\xf3|U\x0f\xcadOOj\xd9\x9f\xf0\x85f\xe2\xa0'\x0d\x89\x19_\xd2\x93\xf4<\xd1r\xf6\xc8\x87z\x0e\x9d'\xb5\xa4:\xa2\x0b=\x03\xce\x13=#N\x04\xf3\xb6\x08\xf4\x84L\xb3\xdcd}\xb4iZh\xe9\xd0\x84\xde\xcc\x0c#\xdb\xca\x8d\x81\xeb\\\x86^hL\x97Y\xbb\x88\xfaC\xe1\x13e\x0e\xad\x15\x0e\x80\x8f\\\xadK=\xe1p\xc4O2s7\x99\xf4\xbb\x10\xaaHs/LT\xbd\xb0S\xf2\x18\xf4Q\x0c]\x06,,R\x1fs\xba\x15\xd7\xc0\x8c\xb0\x85\x1d\xd4q\x86!\x8e\x06\xdfJj\xa0jSe\xe3\x80\x85\x95,\xf3\x80\xf2\x12\x06p\\\xe5\xce2\xcf\x7f+1\xabTj\x8e\x13\xbb\x0f\xa0\x10.\xa6\x05\xfaIJX\x14\xa3R\xfc\xb2\x12\xe4\x0c\xddD\x96%\xf48\x8d\x0f#X6)\x98\x01G\x1fO\x19i\x1d\xef\x9d(\x1a\xd4q\x14\x83\x8c\xbf\x00S\xa5\xf5\x13\x85\xfa\x0e\x84\xcd\xdc\x08k\xee\xc4\x0b\x07\x93:\x0e\xda,J\x88\x839&\xcb\xe4\xd8\xa5\x83\xd1\x80\x82\xf8Rf\x86\x0c\x1a\xbf6DN\xb5Y\x9c('\x9b\x8ceoRY\x91\xa1\x92/\x92~mq9M\xceD\x85\x11\xc4udi\x1fog,\x82\x15\x8b8\xd3\xe0J\xa3~b?\xad*^]\x1d\xe2F\x08KEay\xb2\x1b_\xc2\x04-,\xc8\x1dQ3Ryf\x87O-\x91\x88d\x1cv\xc3\xc6\xc4\xa0\x16\xf7\xcc\xe7\xb6\x8c\xc0jc\xad\xe9q\x96\xb5rV\x16O\x13u)b\x12K\xff\xa5C\x85`\xe2x?PQ\xee\xf8\xd3\xce\xa3\x82\xf4K\x89e\xe5\xc3]\xf4\x8c\xdd\x81\xd8\xfd \xaa\x18\xf9k\x16\xbe\x11_y\x04s\xc4\x1d\xfe\xf2\xdca\x0f\x95@\xe8\xe4\xe1\xd5\x95\xa0\xe3,\x9fvZ\xee\x87SG\xd1\x11\xd0\xd4\x12X\xedq'\x85\x03N5\xdd\x9f\xc8\x96\xd1\xb3k9$\xe6\\)`\xdcvx\x97/a\xd1t\xcb\xcfPs\xdc\xb1\xac\xc2\xa9\xd5\x7f\x01S$/\xf5\x05L\xe0\xd1#\xc8\xdc\xdf\x8d1\x00f\x9b\x1f\xeb\xea\x03\xc72\x8d\xcb\x05\x1d\xdf\xf0\x82\xe2\xb9\xf6\xc0\xea`\xa1_|\xed\x8d\x19]L\x97Z\xf4\xa5M\xe8k^\x89,\xb2\xc7E\x9d.\x85|\xf3ZJUh\xe7\xcbv;\xbe\xba\xf80\xd2\x86/a\x17\x82\x83.\xf5#\x92\x8f\xe1\x00\xd2.$\x079\xf2X\xb8\xa2\x17\x98y?\x13\x87R\xc2Q\x83\xf2S;\x0b\xedn \xe0\x9c\x92co ]l=\xf6K(qaL\xf6c;D\x96\xad\xec\\\xe7\x0e\x8d\xc2\xb2T\x93\xc3\x0e\x17\x92\x96\x9a\xaa\\\xfc\xd4T\xe5\x0co(=9\xc5_U\xd6\xa3e\xa9$\xcf\xf0\x87&5&\xe2\x86\xd4\x97\xc7\xe2W=\xb9\xd7\xd2\x0b\x14G\xcc\xa5Q;c\x18\x06}\xc6\x07$\xec\xfa\\|\xf34\x85_\xb6\xa1l\x03q,\xfc\xf1er\x1ewL\x05\x11N\xf3\x0f\x15qS\x8a\xd9\xd6\x07\xc8\x0b#^j\xbe\x14\x99kc\n\x96\xb3\x83sK\x1b\xc4u\xb8td\xcc\x19\x0b\x13\x9f\xb4\xe5\x89\x8d\xa1`\xe1\xd4$\x8d\xc5 \xa5\xf2F\x05\x92\x0d\x136\xde\xb2c\x18\xc0\xd8\x1c6h[\xd1\xa2>\xf2\xf2\xf8'\x95[\xa6\xdeUT\x83\x9d\x80<\n;-\xde\x12\x0e\xcb\x9b\xcaD\x16\xeb\xe3l\xc7 \xd8\xf0\xe6\xd8\xce\xd3\x95j6\xf4\x07(c\xf0\x88\xe6\x99J\xa4\x07\xea\x9c\x05\"?\x97dK\x91+\xe5\xa3\xe2\xe2\xa5g\x1a\xc3\xa7\xf6\x91\x94\x16\xf4\x86\xedW\xb7\xac\x9a\xf9A\xf1\xe5C!\xd0(V\x10\xb6\xe1\xdc\x86t5sD\xc9DJ\xbe\x15\xbf~ \xfc\x16\xd0\x15\x07\x0b\xab\x0eJ\x1f\x06\x11\xaa\x95\xa3'\x03\xffhg\x00\xe7N\xc4\xeb*\xf3n\xad\xe8\xe5L\xd2\xa3\x05\xbd\xa8\xa83Q\xeeX\x7f\xa2\xe2\x0f,\xe5\x8d5\xb3\xbe\x9en\x07\xf33\xd8\xd9\xf6\x0e\xf6?\xf1a\xff1\xc6\x03\xb6m\xc5\x19\x96\xa5\xcc\x8c\xd8H\x91\x9b>@\xb3\xd1.\xfe\xbd\x8d!c\xbc\x05\x83\xc7\x02\xc7\x87\xb8\xb9\xbf\x92.2\x15s\xdc[j\xd8\x86\x86_\x13\xa7R\x13\xfb+\xd1#\xd5\x91i\xac\x82N\xb7a\xccG\xfd \xc4\xe7r\x1fa\xf5\xac\xb4\xbe\xe3\x0fa\xa8\x8cG\xe9H\xee*.\xd8\x8da[e\x1f(\xf8\x9f\xe7\x86\x11\x8d\x85L\xc8\x1f\x8f#QF}\xcc\x0f\x00\xf1o\x82\xff\xba&2\x15\xd2X\x82\x11\x04\xf8\xe72|\x00\x0b\x0e\x11\xec\xb9\xe0\xbb\xc9k\n\xb5\xa1\x8b\xf1\x9a\xf1n\xd2\xe5N2\xc3 \x8a\x87\x18#!\xc8\xc6RH\xdc\x07|`x[Soat\xe3\xc4\xbc\xb2X0]|s\xeb\x16\xc6\x01\xa3h6i\xa8 :h\xc5\x1c#X\x90\x90\xa7bz\x9c\xdf(\x1e\xc0\n\x1e\xc19\xff\x87S\x82.Y\xe2\x14\x060E\n\xb22+I\xd4\xc5\xbb\x9bK\x92s:\x12\xfdV\xbf\xad \xa4\xcc\xfc\x9d\xfaP\xf4|\x8e\xb4\x0b\x060\xe9\xa0L\xa0\x18|\x05\xb2\x80/\n\xc6\xac\xcfj\x8a\x93\x1c\xd9\x98e\x88g\xdd\xa3\x01,B\x8898\x16\xb8h\xf8o!\xdc\x16*\x07\x85VSR\x0f(\xda2\x85O\x96\xee\xc8\\8\xce8\xa5B\xfcp\xae\x9c\xdc\x87\xa9S\x98\xe1\x0bs\"\x84\xeeG\x8f\xf8\x81\xeeZ\x18>\x80\x13\xa4\xae\x8b\xea\xf5\x10Ns\x12\x7f\xb2\x7fu\"\x05\xb5\xed\x01\x04bK\x85\xf05\x9c\xe0&\xd9)!#\xf7\xd3\xf0\xc4,\xdc\x9a\x177\x15X\xfdH\xaa\x11E;M\x90\x16|ev`\xcc\x97(\x15\xfb\xe1\xa1\xd8\x0f\xb5\x0f\xca\xe5,8%\x90\xef+\xea\xb2#\xa9\xca\x8e1\x8ar\xe3\x94\xa4KTkT\xc7\x89`\xbbI\x8d\x9d_V\xba\x1d\xc08\xce\xca\xbd*\xd5\xdd\xabf\xbe\xeeU\x9cL\\\xb0 \x16\xe2\x0eFj6\xa3\x1b-\xc7\xf1c\xbf|\x91\xb9\x9e/\xb2\x16A_eY[\xba#B0)\xb6\x93 F \xc6\x9a\xbe'\x15\x10~$\xf7l\x82\xeb++\xfd\xc5A!RJ\x8aU\xbf\xe9\x94\x92\xb9\x88GK7@\x8f\x04\x1e)\xa7\xc9[\xb7D\x82\xa8\xca+9A\x92\xa2 \xdf\xccrcY\xa9\xb7])\xe6\x84[\xf5.*\xe5\x94\xce\xfa\x9co\xcas\xaf\xf6\xdf\xb9\xdbw\x16z|.\xdc\xe1>\xb0\xaa\xbe#\xbf\xb5\xb1\xdf\xcd\xf9\xff\xfa\xfa\x8e\x1f\xdcP,Ka\x8e\x9b\x08gk\xf0\xb5oJ\xbe\xba\xea\xe1\x9dfT\xb1+!\xaa\x14\xe1(\x02\xe1\x8f\x03\xb4\xdb\xf7OD\xea \x91;<\x15\xf6e\x8f\xdc\xe1^sz\xeeT&\xac\x842a\xc5{|\xcd\x02Q\xdd\xe6\x88\x05\xadP?K\xeb\xbf\xbb%\x0ci\xda\x89\x14KoM\xbd\x14K>8)\x1c\xfc\xbcHI\xc1,\n\xff\xa2\xe2\xf8\xf9\xd1\xba\xb4\xa9\x12\x06\"o\x93\x19o\x85~\xa2KQ\x18K\xf28\x10\xda\xd3\xea\xe7>|\x0d\x89r\xdcD\x1b\x910V\xb6\x93\x9fZDXu\xc9\xfe\xb5\xf9H\x15\x0bJk\x96}\x14\xf6Y\xf6\x92\xac\xc8\xe4\x98|\x0e\xc2\xcd)3\x19\xeeZ\xb8\x86\xb0?M\x93E\xc0;x\x1d\x8b|:\x1anr\xa2\x9b\xd7p\xb5\x8e\xb9\xba\x933:\\\xa0\xf1L\x95}c\xa10\xfe)%\x86\xe6\xdc\x1bkj\x0bND\x96J45(/\xb5X3\xabm\xa6B\x80\x18Qi\x19\x0e\xf7F]\x8b\x9d\x0b\xd5\x9eXG9\n\x91j\xdd:\x081?\xe9L\x1f+\x12Z\xb5\x10\xcbB)\xb2\x19+\xc9\xb0\xf1=\xb9\xfc\x9e(\xca!|\xc3%\xe5\xc8\xcc\x9c\x0c\x07\xe3kt\x7f\xf7\xcc\xbc\xfc\xa6\xc3\xeb\x04\xdd\x954\xaf\x93\x93eA^\x92U\x01U)\x0bE\xf1\xdaI|m\x9d\xbe\xb7\xd0tc\x8f\x9b7\xff\xec\xafm\xfe\xd5_\xdb\xfc\xc7\x8e8\xb6\x7f0W\x8aXV\x1bA\xbd{~\x83o\xf1.\xafN\xad9CR\xe6\x08\x8b9\xaa\xe2%\x9d\x0d\x9d\x97e\x92\xe5G\xb2\xfe\x19\xfa^9\x15b\xfe\x83\x05}7\xc9n\x02\x0b#\x12\x99*\x8a\xf09\xcd\xe2\xa2\xd3\x0d\x15\xf4\x8e\x12:N\x97\x13R4\xab\xda\x97-\xaa\x176kv\x16\xdb[\x1c\xc7\xe3\x19yO\x8a%\x86Q\x12\x1aaE3\xe9Q\xf8\x91\xe2\xe3Z\xd9.W\x04\x93\x12C\xcc\xce\x14P\xa7P\xadzV\x9e\x8c\xa1\xf4:\x14\xbc\xa1]\x1da-v\xa5y\xa7n:?\xa1\xef\xe5\x07\xc1\x9b.\xa9^i7UW\xa2]\xbb\x98\xaeXx?'Vu)\xbbf\xee,_\xab.\xe4RHg\x1d[uU\xfb\x0c\xdd\\\x87\xbb\x1d\xd9\x90\x00\xc3:\xd5\xbb\xda\x87{\xa3H\xfb\xbb\xe5^\xd8\xbc\xdcfQ+\x19Q\x97-\x8b\xb9\x1f>\xf2\x95\xc2\x15\xfe\x9d\xcbLp\x00\xbf[\x11\xa9v\xd3F{?ws\xba\x9d\x148o\x12\xdd|s\xd2b\xa7\x01y3\xa4\xd3\xa7\xa82\xc6\x81bbz7\xc5\xadj\xa6d\x18&\x8c\xbe\xf6\xa2\xc4Nn\x14\xedp@N\x02\xe43\xbck\x13\xa0\xac\xc3\xd9\xa6N\x83\xf2\xa0\x9a\x91\xfaXZ\x04mD)\xeb\x98\xb2\x99(\xf9\xcc\xb9\x86\xc3o:\xeb*o@i\x94\xf8\x9atR\x19t\xb4\x93\x04F\xc9\xaf\xf6\xb7\xcf\xa5OZ&h\x83\xdbE\x05}\x13\x9c4H\xc9\xef\x1cZ\xcbHC\xb6\x18)\xd0\x92\xe3\x9bq\x01\xc0\xa2NhUE\xb4\xec\xf1\xef\xbb=\xd7\xdc\x1b\x9c\xea,\x16m\xeev\xba s\xe4\xe2\xb2\x88`\x7f\xd02\xe7\xcd \xa9S\xe0\xa3y\x06\xa0sW\x1b\x8c\x13\xf4\xbd(\xa4D\xdb\x961pW\xa8Yj\x90-W:\xc1\xb2'\xd4\x04\xc8\xbc\x8f;{\xb0cHa\x0d\x92{h\xd2X+WP\xa7\xb1\xb5\xc6--_\x8f\x8d\xeb\xe0\x0e\xa9\x81\x97\xa3\xe6\xe8\x90\xff8\x0f\xd7Q\x8c\xe4*\x82-\x1b\xec\xcc\xb1E\xae\x19\x19\xcfx{\x0f^[\xfe\x0f_\x95_\xc7\xc9\x8e\x9b1k\xa2\x9a\x15\x8f\xcf\xcbD\xbd~\xc7o\x86\xc7\xd4\x8a\xf7\xb2\xb5U\x11\xc4\xccq\xfaf\x7f-;P\x8e\xa7\xcd\x0bH[\xbb\xa1\xb4P(t\x98\x0e\xa6\xc0\xe5My\xae\xc5 \xd8\xcf\x98\xa5\xb9*/t#|\xe2p\xeb\x05%5\xe8|\x02~P%R\xdc\xde\x8e \xe3\x0d\xe5\x12\x02hn\xb6\xe7\xf9\xe4Sm\xfa\x84\x81Z<7\x1f\xe1\x03\xa6&\x1f\x918*/v\x03m\x036\xc3\xd3\xf9S\xe1\\\xdc\xc9\x8d\x80\n\xca\xa8s$\x89\xfb\x0be\x08K|\xb8\x12\x906\xb1b\xb8\xeb\xb0\x9a\xa9\x0b\xb3Y\x1a\x13\x83\xeaW\x1d_\xc6h*\xd4r\x02}\xc6\x8a\x882\xb7:\"\xcf\xd8\xcap\x82U\xf01\xf3;~\xb6\x81'\xbe\xc4\x8fX\"N\xf9\x0c7r#\xe2B\xc4\x1e\xdcF\x1f\x1c\x0cDD\x9f\x1c\xf9\xfe[Y\xc1,\xeb\xcc\x9b\xc4\xd1\xe6\x9d\xa8cf\xb7'|@\ni \xc8\xe1\x04\x0c\x12X\xaf!\xe6\x7f\xc5e\x8f\x1c&}\x96 \x15\xbav\x10\x07a\x05)\xf3\xa0\xa4\x93w\x0c;&\xcc,`0\x10\x9e~\x01\xdfl\x85tD\xda\x85\x03c\xa5\x89s\xe9\xd5\xe8>vR\xc5bV\xe1\x06K\xac\xac\xa5\x8c\xa1\xcb\xca\x80\x18\xc1\x16\x9eR\x992\x8b-\xcb4>A\xda<+<\x8ea\x99\xe1\x86\xc9p\xd3*)\x10\x93E\x15\x15\x93\xb6\xcd\xe9$\xa6\x9b1\xf8\xb1\x85\x11\xa4_\xa6\xa7\xca\x9c\xe09\x96!\xda\xa4\xc2\xbcf!F\x11\xb4\xdd\xe5\xaf\xf45\xbe\x9e\xb2N\xda\xf4x\xff^K\xe4\xd6\xd3)\xb4\xd1Zm\xab\xf8\xec\xeb\xe3\xb1\xbc7|\x96\xaa\xb5z\x10B\xd6yZrxmo\x17\xf0HC\xf9\xae\x93\xd8+\xfa\x1d\xba\"\xe0\xf9u\xe5V\x13\x10T\x13tM\xa1\xe4\xaa1 \x96\xd2\xe2\x11\x0c\xb0g\x91\xa8\xa3\x13\xc9'\xcfU\x92\\\xf4\xc6\xd05\x95\x9b(\x08\xeaXk;0\x7f\xf2=0\xddd\xfb\x86x`;\x19K|\xf6\x08 \x1c.\xef\xe72\xc8\xc2E\xa7\xba\x11\xdd\xc1i\xa7\x9d\xa4J\xa4\xe4\xc6\xd3\xb2\xc9u\xa7aE\xb5\x8a\x16\xdb]\xb8\xd9\xee0\x02C\xa0\xe5\xcd\xf0\xdc7\xb0,Y\xee\xb3.\x9b0\xf7_~\xdel@\xb0p\x93\xe3\"\x19\x12\xb5\xabk\x92uP\xa4De\x1d\\JZ\x11\xd6Y\x7f\xa4\x0cY\x832d\x918\xc2\xb2.\xba\xd0-7L+\xabG\x07\x8f\xcf1\x04+\xf9\x8d\xf1/\xde\x81\xe0\xf2\x8a\x1a\xde\x8ee<\x93\x83\xbd\x87\x8bY\x92\x12\xb0:\xe5\x81\xae\x0e@\xdb\x95>\xf3\x04\xfb\xd8\x88\xe6\xf9 ?\xde\x88\xe1\xe3\x8b-\x01\x0e\xfcE:e\xa9s$\x07P\xce\x86\x04E\x07\xed9WUC\xac[\x99_\x85\x89\xb2e\x1d\n\x04\xd0\xb8\xe7-\xf4\xbcJ\xe1!\x16\xac\xb9\x05q\x80U\xfb\x90(\xa7\x18\xa8\x0d\x07*M7R\x04*\xcb\x01$()\x86\xa5$\xb1\xb5\x8b\xc59\xedxeW\x95\xf3\x85\xe5_\xb7K(\xfd\x15\xa6\x8c\xdc.\xae\x81\\\xc5aG\xa1\xf3\x1b\xa3R\x92\xadJ\xbc\x94\x14\xc4\xcbd\x02\xea\xdc\x92\xa9\xe672\xcf\xa6\xbe\xf4\x06d/\xb9\xa4\x00\xa5\xfb\xf5po\xc4%T\xd4\x10\x06K\x15O\x81\xd8\xc5\x8f\xd18H\xab#\x93\x96\x84#\x8f\xc4\xf9\x99v\x93E~-\x85sn\"K\xa3\xa5\xad\xe5u\xb6\xa0\\\xb4\x90\xac\xa3g\x97\x1di\xbb(`\xd7\xaa\xdd C\xbb\x01E\xf533\xfd\xec\xa4\xa8\xc2#\x13]@M\xf2\x8b\"\xb8Kk\xda\xe8\xccN-\xc5\x9eT\xda\x8d\x9a\x83 \xeb(\xe2$\xe1>\xccq\xe4\x99(\xbdx\x08\xe2C\xe9^\xc6\xac\xee\x83e\x96i\xeb\x11\x91\xf4\x8b,g~\xd2\xacb\xa2\x022\xbc3\x8a\x80\x0e\xef\x8c\x10\xcb\xc9p\x7f\x04;@\x87\xfb\x86\x0c\xc1aU\x90\xbc\x91\x95\xc1j\xb1I\x86l\xa4v\xd2\x00\xf6\xdbm6+\xf4\xb9\x1a\xe2\xa0\x1f\xee\x99\x06&8\xd7_e\x8d\x0f\xe1\xd6\xfdR\xfc\xfa!h(\x04m8\xf5\xc2\x89S\xc2\xdfE\xc3+\x0f\xbb\xd1\x17\xe2 \x1fJ\x89\x1bV\xbc\xc8\xc9d9\xde@\x87![\xff\x15=+\x05;G\xd1\x87S(*,\xf9\xf2\xdd\xb6\x0c\xd4\x8a\xe5&\xdfWG@\xca&\x03\xaf\x0f:\x12\x89\xf9\xcc\xc3\xf5\xf4|\xff\xd5\x8b'\x13\xf5s\xec[N%\x8f\xbfu\x0b\xa8\xa6\xbf\xad\x85M\xae\xd7U4\x82\xf8\x05[\x03\xde\xedz-b[\xbd\xc6\xfb\xb2\x8a\xbf\xf8\x02\xa1Y\xea:\xf91OH\x90\xfbz8\x97k\xd6\xf2\xb3\x04\x81\x84\xf3\x84\x06u\xcb\x14\x0c\xfc\xf6u3\x0b\x9f\xf0\xf3\xac\xce\xc4\xdfE\xbcv&Bx\xb6T\xfd\x0bM\xa2\x81Z\xfa=i\xa9\x10\xe4\x95\xd9\x92\xf0\x81\x06\x94\xf6|\xba\x05Y\xe2\xc1\xb9\xe5\x9e\xc0U\x97\x022_\x1f~2\xc1O\x01\x86\xb0W>\x97\x1c\xdf\x1d\x07\xfe\xf5\xf5m\x1e\xec\xff\x06\x9c!\xaef\xa7\x00\x86\xba \\\xce\xe4\x9a\x80\x92X\xe0\x02\x88H@\xd2/\xb29\xb9N\x07\x1c\xbd\x1c\xcd\xcb\xfaR\xffFFJ\xe5\xc7\x8c\x11\xbb\xa5\xb3\xaf,Gq](\xe2\x00]\xb3\xbcy\x81\xf8\x87\xce\\\x08\xc2\xc4\"jr\x90\xfe8\xa3\x05\xcb\x97c\xd4,\xfb\xd1\xf7\xaf,\x8e\xdeI\x99\xcdFD a\x89\x116\xcb\xb3\x0bD\xf1\x0f\xab\x059\xca\xf3,\x0fzG\x97\x0b2fd\x02\xc3\x97\x11\xfc4\x02\xb6\\\xa4\xe4\x00z\xb0\xdd\xcaHk\x19\xc3?\xdd\xd1U\xaf\x88\x8cG\x08#x\xea\x1b`\xf5\x8b\xbb\xcd\xa5\x00[^\xb1A\x19\x17x\xbd\x9a\xfe\x87\xbb\xe9z\xc4V {\xfaUc\xb88\xb7\x15j\x81\\^\xbd\x12\x8f\xea\x1c\x9c\x14\xd7\\zT\xee\xf6\xd6\x13\xb41\xce\x9aY\xdd\xf1-\xe9\xa4/\xf3\xac\xbf\xd0\xb3\xcbW\xdf\x0bm\x13k\xa7.\xb5\x8c\x9eu\xe6\xba'\xf0Hf\xa3<\x10\xc5>\xe0\x10v\xf8\x0f\xbfs\x9fZ\xb6\xf2\xb9\xf4E\xfb\xc9x\xe0\xa3\x14m\xe7\xa5\xf9\xd3\x9f=0\x1f\x8f\xc0\xd3\x94@\x96\x03\x06E\xef\xa4\xc9\xa7r\x0f\x98I\xbc\x18\x14\x1f\xb5\x81@X\x97\xd9\x0b\x16yG\xe2d\xc1A\x94$\xd0\x99SLX\xb0\x13Z\xb0\x98\x8eI6\xd5*\x9e;\x9c\"\x10r\x88\x1e\xf5Ok\xc9>\xf3\xc0\xa6z.\x9bpr\xe8\xfc\xa2\xa8\x96\xea\xd6\xb2\xc6U(\xe5'\xb2*\xac~\x89\xea\xda\xf2\xe3\xca\xf4\x8b\xe5+\x8f\xb7\xf8\xc5\x8c\x11\xae^\x9d\xa8K\xceeB\xa6 %\xef\xf2lAr\xb6\x92\x9c\xaf\x7f+\xfc:#L\x13-7\x19\x83\xbat\x12$\xc2&7j\xe2\xaa\xdb F\xbf\x8a\xdax;\x8fo\xd3uF\x1a\x89\x98#\xe8=\x8d)\xcd\x18o\x1d2\n1\x85\xa4L\xcf\x9b\x93q\x96O\xfa\xbd\x92d\x8ah;\x07\x8bi\xba\xba3\xb7\xa9\xcb\x12\x8d\xd0\xbc\xae\xfa\xa7 \x9d\x04U\xd4]\xf7gW0\x8e\xd9x\x06\x086\xf7\x80\xae\x02\xe5\x9a\xae\x8e\x88X\xea'\x90\xeb\xa7\xf1\x9c\x94\xa1\xc3\x9fD(^\x8c?&d\x1a/S\xf6\x13\xe7\x960\xe7\x8c\xb5\x1b\xfb\x00\xc4\xea\x88\x80\xc3\x8f\xa4\xa9\x98P\x97\x05q2\x94)\xcaS\xab\x15C\x9d\x99t]\xa5\xe4\xa7\xb1P\"\xda\xb1\xa9h\xd3\x7f\xb1\xe0\x1d\x8b\xe0#gL\xde\xdd\\\x95\xaew7Y\xa5\xebm>!9\x99\xbc\x8e\x17\xf0g/\x82\xdeU\xbbV\xd7\xbbk\xd4\xea:\xd7k\x04\xf0\x95\x125\xfc\xed\x90\xadyh\xc9b:\x18F\x8a\x1f\xd2PT\xa6m\xd5\xd0z\xf7o\xaenS\x96\x9d\xe1S\x92I\x95\"}\xb4\xb5{\xa1\xcc\x88\xe0\x1c\xf5f\x95\xbf~g\xae\xdaG\xef\xae_\xfbHo\xb8]\x06\xb5\xd6p-\xf5\xb8\x0f\xb0+\x90U\x9f\x06\xa8\xb8\xd1 \xa7?rv\xbf\x91nDGD+\xf2i\xa30\xd8\xd2\xba\xdc\xe8E\xbe\xb9\x80\xa1\x0e\x90\xa1\x05\xd6\x12\xde\xe57/\xbf\x12\x17\xed\xa1O\xf3l~DY\xbe\x12\xbaRM\xf9\xd3\x8d+\x9b\x15J\x10\xc2\xdf\xa0U%\xc1#\xbf6\xab\x11\x85Z\xb7V3BEH\xe4\x12\xd5?\xb2.+\xdf\xd5\xaf\x99t\xe5$\xfe\xd5\x16\xd4\xd1\xc2\xf4\x9d-\xf2^\x18$\x1a\x84dRh\x84t\x00\x1fX\x1d\xbe\xc3\x99\xaanP\x83zY\xe7\xc0\xb0o#`\xc1\x1b\x16\xc1\xafa\x04o\xaeA\x81\xdb\x82\x1fR`\x13&\xd4\x9ao\xc4\x0dt\x96K\x13m\x8b\xa2i\xce\x86Q?rL>oD3\xb0q\xf5e\x9b.\xbc\xa9\xc3\xcd+T\xe8\\\xab\xc8l\xc67\x0e\xdf\xef\x159\xdc2%\x1b\xac\x8dQ%\x1b@\xa3\x86\xf74A\xd7\x1d\x89y*+\x87=8\xfc*l\x05\x896\x80 0\xb7\x13;t\xb2h\x06\x02\xa7\x02\x9fk\x87\xcd\x06`\xc8\xaf\x03\x06\xda\x00\xc3<^\x18\xf0\x15$\x18Z\x85_\xde|\xd9\x19\x119B\x94\xda(\xa99\xe0\xd6&\xaf\x99\xf3<\x1c\x97I\xc0l1KW\x9c@\xa9|\xcb\xff\x14\xeb\x10\x8a,=e\x0fV\xd5y\xd9|\x16\xc9|\xcd\x14\x0eD1 SWa'Q\xd8\xechB\x1b\x9f\x0e\x96\xd0\x01Au<\x99\x8f\x0bZ\xd7=\xb5\x0c\x1aV\xd4m\x82\xcd\xba\xa8\x9e\nye\x19\xa2N\xef\x8bRL@\x83\x8aP\x1a\xa2\xa2Y\xac\x02\x16\xc4G\xbf\xb0\xd2\xbcbZ\x0e\xd7RT' \x0b\xde\xb3\x08^\x86\x11\xbc\xd7\x97\xca\x14\x08\xe8I\xc4\xcbh\xc06%\x7f\xffe\x9b\xab\x93\xd2\xd8\xd7\xc7\xb8\xe9\xbcy3\xdca\x08r_\x96\xcc8S?\xbc\xff\"\x84\xbd\x11\x0ce\xbe\x18\xca\x14\x862\x85\xa1\xa2\xda\x96\xc2K\xaf\x9aa,x\xc6\"\xf8!\x8c\xe0\xd9\x97s\x10\x0e\xe4{v#\xc8\xf7Wb\x18\xf3\xc7/\xe3dn\x0c\xbf\xfe\xc3HT\xe1\xcf\x86\x88\xf4Jr\xba\xaft\xe8\x10)\xcct\xf1\x10\xedu\x94,D\xb3\x9fW\xff\x95\x88\x84\xc7\xa5\xed!\xbf\xbeb\x81\xb5\x88\x9e\xe6d\x11;\xdf*\xd1\x15K\xf4\xa30 \xaa\x12\xa3\xd8Z\xdd\xdc\x157-R,\xbf\xdaz9#\xa2\x1b\x81\xfd_\x83\xe8\x1e\x91\xa1~{\x01\xca\xf0\xca\x9a[\xb8\xa3\xa2\x86Z/\xd6\xe5e\x89\xde\x95\xae\x11\x82@\x0eS\x18\xa0~)\xde%\xee|S\x0e\x1e\xf7r\x06\x87\"\x91\x8b@\x89\x1cQ\xa2\xba\xb9'n\xee\xb5\xf3\xe5\xeb\x97\xc5e\xd1\x83&\xd4\xce\xe1z\x1a\x827\xf6G\xcf\xec\x8f^\xd9\x1fa\x8e\xaa \xa7\x11\x9c\x10.ZP\xed\xcd/T\xb0.\xa9\xe4A\xb7\xa1g\xd5\xb0\xd6:\xdc\xf8\xf8\xaci\xd4\xf9\xe7o/he\xf2qw\xe6\xa9L\x10v\xd0YY\x1d\xdd\x85\xe6\xf5\xcd[\x1b\xdc\x90\x18\xe2\x94ks\xe1\xe2\xeba\xf5\xb7\xd2Y\x18b6\x9b3\xf1R\xfeV\x92\x89Qe%\xfa\xbfuK\x1b@M\x9fk\x9eli\x1f\xd7l\x03v\x9dT\xff\x84\xcc\x17l\x85br\xf9c\x001\x95\xa2\xf6/\xa4\x9d\xf2\xb41UO\x8dq{\xd1*+\xb5\xb0P\xffM\xb3j-\xe9'\x9a]P\xf8DV\xd0\xfb\x1bl\x03\x81m\xf8[\x0f2\n\xfc\x97\xc2c\x8b\x91\xbc\x06\xbd\xad\n|\xb2\x98~Y\x8b\xc3\x8c\x14\x1ez\xc3\x9a1\xa1\xbeD\x85\xd2ku\xe0V\xad,\x846\x9a\n\xe7\xe0\xa0Z\x87v\x1d\xe6\xda\x1ax*\xd7\xed\x1b\xc7OCZ\x9f\xa9\xccS\xea\xca\xac\xd8\x9a)\xeb\x9ci\xfb\xe8\xae\xcd\xf4\x86\xb4\xfd\xce>\xae\xcf\x1eX!\x91\x07\x06\\k:jZ:\x00])e1Y_uk\xd8\x8dS\xbc9v\xf3\xdf8C\xe25\xc1\xff\x84 \xa1\xbeA62\x0dT\x1b@\x06\x0d\xf8\x1a\x04\x1ap\xa8w\x82\xcc\x16z\xd7j\xc0\xb1\x15\xa8\x8c\xc5\nuxO\xd7\xed\xd3\xf2\xd7\x19a\xefT\xf3o\xa7\x9c\xb4\xd8\x11E\x1b\x7f\xde\xcc\xe4\xed\x17(\xb2\xec(\x99--\xfe\xebu\xdd\xcb\xb0\xaf\xee\xf6\xde\xa3\x93D\xcf\xab\xb3\xc2\xdd\x993'\xfd9E\xff\xde\x94\xcacgk\x1c\x94\xc9\xe9\xf9\xb3k'\xa7O\xae\x9d\x9c\xde\xc5\xc1\x97\x92t<\x99\xd8\x8b\x11\x18\xb6\xa6\x17 S7 \xb7\x82-\x04\xe1\x16\x19N\x9b9\xa4\xeb,zF+[UFK\x0bUy\x1b\xeb`\x97\x0f\xda\xe5\xb73*Jdk\xd5\xb2\xab\x9b?'\x18\xd4\xa2\x1e\xf0\x9f\xd5\xc3V\xf9m\xf5\xe0\x19!\x8bF\xf1\xed\xfa\xc3F\xb3\xeaV\xfd%c\x01\xef\x8c\x1aJ\x8dg\xd4XA\xbc\xbc\xdd\xae \x9eQ\x8f:\xe0\x19\xed\xdb\xeb\x80\xe3CW\x1dp\x16\x144\x82#\x8ey\x05\xbd1\x07\x93\x82\xa2-Yf\xd0\xf6\x96D\x02Nq\xfb\x9f\x88\xb0?\x9bZ\xbd1\xa9\xaawL\x98U\x9a*\xbeH\x9a\xaa\xb8Vg\xbb\xf1d\xe2\xdb\xee\xa4\xc0\x9aq\xac\xac\xbcC\xb7\xb7CH\x026\xa4\xa3\xb0}\xec85\x8a\xe5\xb1\xcd\x8f\x1d\x8b\xfa\xc6x\xec(\x07\xa9Z$\xc1p\xb7yx4\x96>\xa1\x8c\xe4\x05\x19\xb3\x9b]\xfe*\xa3\x12\xf3\xab\xbd.0\xc4/\xbeC6\x94\x98NeS\x18\x9f\x17\xcb~-,0\xf0\x14N\xbfg\xd6'\xe7$_y\xb4\xac\xae\x12\x1dJ#\x8cE\xf5\x0b\x02 \x90\xcd\x93\xa4\xc5\xa6$\xeefZ\x1aHR,OY\x1e\xff\x7f8\xf2o\xc2\x91\xeb\xc6ry\xa2\x08&\xb2\xbai\x14Q<\xa4\xcf1\x85`\xc43G\xab\xe5\x10\x81\x93\xebi\xf4$9H7I=/K\xaf6\xd1q\xafCM\xd3\x1e\\[\xe7T\xdf!Y\xce|y\x819\x0d~.\xbdw:Nf\xde\xee\x93\x95\x8f^\xc2\xd08\xebn\xff/\xd2 \x15\x7f\xadz\x85iZ\x85\xb61\xcf#3t\x90c\xcc\xb9\xafa\xd88\x1d?\x85Xk\xc4\x9b\xea\x80L\xf9\xb0;\xd5[\xc5\x7f^\xfb\xb3\x99\xc2G\xf65\x8f?\x91\xe0\x0bu>8\xfb\xa48FM|J\xdb*\xa01\x8d`\xcaq\xac\xf7\xf7\xbf\x9f\x9c<\x7f\xfd\xfa\xe3\x87\xc7O^\x1d\x9d\x1c\x1f}89\xf9\xfb\xdf{mG\x90\x05\x7f\xbb\xf0P\x1aM:\x11\x81X\xaa5\xb1f\xb5&\x05\x05U([j\x88\xb1\x1c\x9c<4\xa5w<\xae\xf0|\xc1V\"|\xba\x04\xa3\x9f\"b\xd6\xbd\x17\xebJ\xae\x85#\x08\xa3\xcaf\xdf(_G\xd5\xb4\x88\xc8\xea]\xad)\xf3M\xc2}\xee\xa4Kc\xcc;\x10\x8c\xf9xg40\x99j,\xed\xce\xbf@\xa5u!TZg\xb4\xd2d]\xfc\xbfM\x93u\xe6\x86_\xa9\xee3\x14X\xd4\x7f-\xe8pJ\x95\x03\xddBSj-*\xa5\xd6\xa2\xae`R?\xeb\x0f$k\xb0\xa0\xba\xcej\xe1\xa3\xf0Y\xb8\x14>\x8b.\x85\xcf\x82\xaa}\x08\x038\xa7\xf2\x06\xdf\x8a\x88\x92\x11\xb0`N9q\n#\x98\xdf\x9cFh\xfe\x97h\x84\xe67\xa9\x11\x92\xfe\xf7.\xc5\xd0\x9cV~\xfa\x82r\x9f\x19(\xf7\x8aFp\xca\xf7\xc9\xdc\x83\x16\x9flJ\xd8N\xffC\x84\xed\xc2 \xcd\x95 l+>\xde\x13\x1a<\xf7/\xbby\xf4\x05\x84\xed\xad l\x97\x1aa\xe3\xb7\xfaKZ\xcc\x92){\x9c\xa6\xbe\xd1\xfc\x97\xde\x8a\xee\xa7nE\xf7)\xad\x1clO\xf5\xbdvA\xe5\x0d\xb9\xd7Np\xaf\x1d\xd1\x08.8\xb5<\xba\xb9\xbdvt\x93\xbb\xe2\x98\xc5\xe3O0\xe4\x1bb\xd4\xde\x10G\xd7p\x05\xa9\x1b\xe3g$6\x14\xaaG\xbd\x15\xd1\x92r\x93\xf0\x81H\xbcNvv\x1e\x84\xf8\xbd\xf0\xaa\xb2\xef\x058\x04\x99\x84\xc6\x14\xf7W\x1b\xf9\x82\x90O\x1b\x01\x88\x8f\xba2\x1c\xf2_\x86\xec\x1d\xad^\x96\xc5\xac\xab\x97J\xdbP\xae\xaf\x9f\xd6\xa1\xd4\xf4\x95\xce$\xb8\xfb\xb7[\xedD\x1a\x03\xcc\x07\x1e!0\x9bo\xc1\x0e\xecq\x88?\x12j\xc3\x9d\x9d\x10?\xb3\xf1\x05\x98Y\xa5lcH-\xb9\x0f\xf9\x825\xd7\x82_\x86D\xcbu|\xb4\x04S\x96\x9c6\xae\x87\x16o\xd5\xac\x18*\xef\xd6\xcb\x9f3\xe9\xda\xff\x98\x9a\xc5\x93\xd6\xe2=\xe6\xa4\xc8C0\x91\xead\xb4u\x05$\x0c\x05G\xe4^\xbf*\x07I\x87\xd4\x82\x0c\xb8\x19\xba\x1d\x9b\xaa\xe4\xed\xcb\xf0\xa0\x0d84&\xb2\xe4\xd9P\x00*4pT\xa7\x10\xeb\xdfN\x9d\x0f-2\x8aw\xca\xc0X\xdb\xfa\xb3\xc6\xfa\xd3\xeb\xae\x7f\xdb\xfd\xba\xb5\xfeYge*\x1de\x8b4\x19\x93`\xcf\xdd\xa6<\xa66i\x97\xa3\xa1\xa7:\xca\xd4\x95\x0f\x067\xbb3\x9d\xa2\x8d\xd67\x9fF\xb6\xb8\xce,6\xb12}i|\xb6D\xa9\x06\x06m\x82W\x9c\x15q\x83\x8d#\x89\xcf\x91\xc9\x89\xca[\xe9\xe8Q\x0e\xd6\xc7\x15\x8cbq\x11\xa2\x7fe\xd6p\x7f\x08jM\xd7-TeG\x17\xa49\xfa*M\x8f5\xc6\xaf<\x99\xf2\xda\xc9\x84e\xce\xb2:\xc9\xe2\x07\xcd\x83\x10\xeff\xee\xd3\xdd\xbd\x88yc\x11\xb3k\xad\xdfcj\xaa0\xddX\xc3\xcd\xd4V\xa5.\xa9\xad\xb9\xaa\x10\x94\xe3\xeacZMH\x9f\xcc\x86a\xc8\xfa\xcc\xf6,z\xa8\xa3kkAe\xdc\x81\xbe$\xd5\xd1\xa2y~\xb9\x90\x82\x8a=\x977\x10!\xaf%\x13\xccU0\x08\xd5\x92 \xe27y\x07\x13\xe85Y?\x1d\xa9\xd7l3\xb3\x0e\xb1\x9a\xa9\xf1\xec\xcb\xfdNn\xcf\xc8\x84N\xaf\x7f\xc5O\xe4]\xf1\x03\xb2\xdf\n\xd0\x91\xf0\xec\x17\xcb`Q\xd1\x98g(Z\xead\x1e\xba\xb2\xf393\xf3\xf9D\x05\x1c\xa1\xd6\x15\x85\x9a\x01\\\x1a\xa4\xf7c\x1a\xc1S\x93\xde\xf5\xc3\xe3\xa7/-\x9a\xd7O\xfc\xfd#\x0fi\xffq\xe9\xae\xd7\x91?\xb4.\xf3\x7frf\x94\xa9\x98\xe1L\xe7\x84\xb3\xa6\xa3^V\xd1\xbf\\\xfc\xaaS\x07\xbf\x94\x81o\x9d\xa7\xee\xb1\xd0\x03\x1cs\x80<\xa6A\xcb=\xc5\xd2\xe8\xbbnq\xb1D{\xabYR;\x9c\x86\xa8\xa3cCjH\x84k\x85\xa4\x9e\xbe\x8bU\xbc1\x0d#\xa8\\&\xb5\xd0\x88\xe3\xd5\xfc4K\xb1B\x82\xeby\xb3\xadf}|\xfd\xd7':|Z\xaa\x17?\xf9h\x03?\xb9\xb4\x81\x9f\xba\xb4\x81\xbc\x0b\xdd\xb6\xf6D\xb7\xb5E@\xfb\xcf+\x02\xf91\xe2\xcbDM\xe9\xbfdJl\x8f4_\xafH\xe0bE@.8\x91\xb9qE\xa6\xed\xeah_\xaf\x8d6zh0\x06U\xbe\x07\x8b\xe9\xcdi\xdaV\xd8c\xa61\xad\x15\xc4\xbbm\x9a\xc0\xb2\xe7tB.\xc9\xe4\x98|\xf6\x00\x8cF\xe2\xdf\xcb\xa8s\xbf^^\x1c\xfb\xb7\x8e\xc01\xa6\xc2\xf6\xd1\xccc\x82\xdf\x9e\xfa\xa4\x07\x9c\x85Y-H6\xc5\xfc\xda/\x8eQ\xe7\xc8\xff\x10\x16\x1e\x0b\xf8P\xbb\xc4\xdf\xf1\x9d\xde\xdb7\xff-\x13|\xfb\xa6\x9c\xe2\xdb779\xc9\x97du\x0dAC\xf8\x13\xd8\xfa\xa4\x93F\x8f\x1eU\xa3\x10\x98\xfcS\xcc\x89\x1aX\xcc\x1b\xa0\xebI\x0f1\xa1\x89\xb9<\xb8aXB+\xb4\x19,j\xc8\x125W\x9c\xa1\x84\x8ay\xbbYh.Sc\x18\x08\xe7@|6o\xa3oRZR\x04=\x84C\xe8aE\x028\x80^\xd4\xb3c2\x83\x01\xf4\x0czTu} \xa6\xbbp\x9c\xcaR\xfd[{\xe8\xb2\xba-,%\xfc_t3\xdaR%\xa4\xb4I\xe1\x9a\x96^4x\xe6\xf4\xda\x9c%\xc8\x1d\xe0\xc5\xb7}\"\xab/ ?\xcf\xbdVt^\x93C=\xd0\xaa\xdcb\xf5\x94\x9d^\x9d\x89\xb3t\xc3\x0d\x16A\xe6\\\xe0\x06\xae\xb5\x1cT\x1e\xc2>\xe6G\xe4\x98\x02\x07b\xc3\xb6\xb6\x83\xae\x06\xc0\x9a\xb5\x0e\xe4\xc8\xe0\x10\x82LR9l.\x94\xed\x92\xb2\xf4\xad\xa8\x18\x988\x0b2\xe7\xfe {\x9f\x9c\xcd\xd8\x86pS\x84Ig\x84*C\x94\x9b>I\xaeG\x9a\xdes\xab\xdd\x1dl\x83\xc6^\xfcq\xb7D*=\x19\xaeWWh\\\xbe&\x06?\xb9\xde!\xc1\xb9\x91\xcdz\x14yYD\xac\xdc\x1b\x8a\xa5\xc2LY0L]\xe5^5&\x9a3\xb3\x06\xe4\x80\xb9\x1f\x94\xba\xbf\x80\xd6\xfc\xee\xd5\xcb\xe9\x92\xbd\x8a7Q\x0f\x88}\x8d\x1e2\xbb\x11\xec\xecy\xf5\x92\x14G\xf3\x05\xf3\xb11\xc8^4\"\xae\xcb\xe9M\xc9\xfd@.c\x9d\x19\xf5\xe0EmFH\xaf\xd9\x8c\xb3%m\xee\xfc\x8e\xf9<\x0dH\xa5J\x12\xdb^\n\xb0\xe2\xe3\x0d\xf4*\xd8\xfb\x13_\xf6T\xf6\xefK\xa5@\xa3T\x1fI\x10V\x06)W\x06<%\xe5\x98\x88w\x17\xeb\x8a\xdf\xcb\xbc AU\xa7\\T\x12\xe7\xbbR\xcfy\xec%\xb5i2\x97\x99\xddU\x97\xa3\x94\n\x9e\x05\xba\xb9\xcdR!\xefJ?o}V\x8f|^\xc6\xe9&\xc2\xd69)\xc9\x86W\xfb2k\xa6\xc7V\xd3\x1dN\xcdk\x8b\x81Z\xfd\x13L\x97W+\xceDHu\xdf\xcd)\xd6\xab\xb7\xfeN\xc3\x86\xaa\xd5\xcd'\xd6\xaa\x1at\xf9\x8e5>&\xc6<\xa0\xea\xba\xf2\xe4\xf7\xc4.}\x93m\xb8\xdf\xa5\xf8\x81;|\xa3\xd3\xa5\x14Y6\xe7,,\xd5\";xn\xea']V\xc2%m\n\x97\xbc\xefa\x16\x01\x1d9\x05L/\xd6\x8aO\xff%\xf1%n5o\xf4M\x84=T\x8dQc\xa9]\xf3\x98\x1agd\xc7\x8a\xe8 7\xb3z8\xda\xb2\x99MF\xb1!rx\x0e\xa5\x02\xdc\xa6\xe3\xf1_-\xcf\xa1\xbc$r\x05\xfdF\x91o\xcc\xbc \xe8\x1f\xfb5\x9f\xc6\xec\xf5\xb5\xa51\xdf5\x02m\x13\xffb\xae\x93\xa4\xae&m\xabk\xea\xbb6\xb2\xd6Bn8k]\xc7\xa1\xae\x895o\xf1\x8d%O\xd9\xe2\x06ga \xd9\x1f5)\xc1WD\xd0\x8f\x12\x7f\x8c\xe1\xa7\xdd\xab\x0d\xcc\x90\xf5\x82y\x1e\xd8R\xa1\xa4.\xef\xfa\x14\x1f\x9fa]m\x9b>5\xaa\xfcd}\x07\xfe\x9cz\x0e\xddTnZ\xf8\x03c\xa1MUa:\xabU\x98\xee\xcc\xb6\x9c`\\\x90GV\xe4\x00}\x1a\xb1Z:\xc6-\xa9\xa4\xc4I\x04+\xceJ\xafB\x14\x13V\x95\xbf\xa7\x19D\xaee\xf1:\xad\xce\xf2l\xb9\xf8w\xb0\xe2~6\xbc@f\xbb{\xc7P\xd5\xc5\xf9wO\x06\xde\xc8\xb9w\xe9\\\xf8\x95\xb59w\xfe\x99\xe0\xdc\xbb\xf7\xb5~I\xf0\x04\"\x04r\xbd\x86\xe1(\xc4\x18\x06\xccY>\x8c#HFp\x00\x89\x87q\xd0A\xc7\xec0P(\xe8G\x81\xb3:\xe5\xed4?U\x14\x8cD\x90\x04&\x12\xa9.\xcb\xf87\x165f\xf1&r\x06\xd2!\x99py%b\x08V\x9e\xbd<\xdf\x84\x86\xab~\x9e\xd3M{J\x8a\xe3\xe5\xa9g\x81\xcfR\x06\x1c\xd8|\xc2\xcaJ)\xc2\xea,y\xf4J'\xe4\xb7\xb4\xe5y\\&\xc6\xd9 \x9f\x96y\x8a\x0b\xce\x0bm2\xc9\xc05K 3m\x96ay\xd3\xffT\xfbDVo\xa7\x1b\x0c\xa9<\xd483\xb7\x11$o\xc0H(\"\xce\xfd\x8f\xf8\x9aV\x86\xef\xea\xe7-)\xd5\xa7\xdbts5Z\xab\xe4W\x1f\xf9Y\xff\xfe^^g],\xbc7\xae\xb11\x97U\xbb\xefy|\xb9A\xaf/\xd8F*\x8cy|\xb9\xe9\x99\xfa\xa2\x96\x8f\xc8\xab\x13?\xa3Yk\x06p\x08\xef\xa9pa\xf9\xe8'(\xcd\x13z\xfd\xe9\x88\xee\x98\xe8\xcewn9\xd9\x18\x13\x8d!\x8f`n\xbe\xf8\x94,6\x80\x9d\xd6\xfe\xeb\x98\xcd\xfa\xf3\xf82\xb0T$\xb6t\xd6\x14\xbe}\xa5\x04\xcb\x1e\xe3M\x06D\xbb\xe3=\x90\x9fgI\xba\xa1\x99\xa1\x1c\xccO\xd74l|J\x16\x1f)K\xd2\xcd\xba\x15@WC\xdeL\x05%\x12\x82m\xd6_\xdb\xcaa\xc8\x0c\x06\xe6\xfeX\xfc\x89l\xb0\xbc\xacf\x80\xb8\x06J\xf1\xfen\x18\xa5x\x93\x9b\xa3\x14\xff\xeaKP\xea:\x92\xc4?\xbc\xb8[\xad\x84\xd1G\x8aj\xdeZ\xf26\x8c\xac\xec`x\x15;\xcd\xac\xdaeuq\x91.\xab\xc7\xe6i\x05Zja \xd8\xb1\xbb\xb5sY\xcf\xbf\xa3\xec\x7f\xc9\xb8\x19\x04\x1f\x82*\x91e\xd7\x0c\xb5f*\xe9\xa7\xfc\xf6\xd6-\xd8\xde\x8eQH\x95\x0dZ\n\x95\xab\xeb*\x8c \xb6\xbeq\x15\x81^\x06\xe9\xbfhU\xb2|\x93e!5o,\xfe\x9d[\xae\xe5\xd7\xd2\xe1Q\xa2.9N\xcf(K\xfdB\xdf\xa9e9\xd3\xee\x0f\xc0?\xe2Q\xbf\x9c\xd1\x8f\xfae\x89\x95\xd0/e\xba\x89;\x8bS\xa9K\xe8\xf0kE\xaa<\x1c\x1aUD\xa3\xac\xdf\xeb7\xd1B:\xab\xfa\xbd\x9d\xe2\xdb{\x1d\xae\xad`\xdaki\x04\x05j<\x0f9i\x1b\x0c\xe0\x8d\x14s>s\x8c,\xf0\x05\x91\xe6o)=C\xfe\x0b\x16\xb7\x8b\x088)\x80\xf1\xe1\xe6\x9aW~\xf0\\\x97\xa9(\x0f\xad\xcd\x98\n\x15C\xb0!_\xba\xb9\x186\x8b\x8b\xd9\xd3l\xb2\x81\xa3\x0b\x9bU\xd9\x05\xb0\x8a\xf3L\xcf6\xd0\xcd#@\xb9\xbd\x84\x83\xf2`\x00{p\x1bv\xcb\x8d\xe6 ]\xcaL:\xeeT\xf0\xf9\xb9\xf2\xa36\x16\x0ea\xcf\\\xf5\xb6|M\x0c\xcck\xf1\x1b\xdf\xf0\xd1^\xa2\x90~\xe7\xee\x9d\xfd\xef\xf6\xbe\xbds\xefN\x18\x95\xb7\xe1\xe1C\xd8\xbb\x07k`\xf0\xe8\xd1#\xd8\xd9\xbb\x17\xc1\xdd\xfb{\xdf\xde\xbd\xf7\xdd\xee7\xcd\xf7\xeeh\xef\xdd\x89\xe0^\xf5\x1c\xd3\xb9\x07\x0c\xb6\xe1\xce\xb7\xf7\xef\xee\x7f\xb7\xbf\xf7\xdd}Xs\x98\xfe\x8bo\xe9\x7f\xc9\xcf\xf6\xeeG\xb0\xbf\x7f\xf7\xfe\xb7\xfb\xfb\xf7\xca\xe6\x8f\xe5\xe7\xd8M\xf9\xe6\x9d\x08\xee\xec\xdf\xbf\x7f\xf7\xdb\xef\xbe\xdb\xfd.\xd4\x9bpl\xb9@\xe7\x0f(\xd6\xba<\xdc\x10j0\x80;{\xf05\xe4\xb0\x0d\x9fi\xf0\x94\xe0\xa6yJ\x02\x16\x86|F\xf6\xce\xc1sw\xaaKh\xc5\xaf\xd1K}R>\xdd\x943\xc2\x8e:;\xd8\xacq\xcfvCc9k( \xa2\x89\x14\xd6\xee4\x95\xc1|/~\x10\xc9\xc9\xb4\\\x00\xfa\x1b\x1f\xe8p\xaa\x02\xbc?\xd0\xe1+\xfe\xf7\x07i\xb2(\xf8-\x19:*n\xcb\xc0\xea\xf2\xbe\x1e8\x04\x03xF\xf1IB\x8b\x85\xc8\x8d\x8f\x9f\x1cg\xcb\xbc\x9eW\xc6\x04\xb2\x86\x12I\xba\xb7\xd6g\x87\xad\x8fgqBE\xdb\xd2\x96)ng\x94\xc5 F\xa5\xe3\x10\x84\xee\x12c\xc4s\xd3)9M\x93\x0dB#K\x01\xe5#\xb3\xae\x84I\xed\xb38j\xb9\xf7\xfbZ\xff\xedT1\xb7\xcb\x02N\xe1n#\xc3j)M('\x89a\x12A6\xb2\x17\x9f\x06\x10FU\xcd&\xe9)4\xce\xe3\xc5\xcb\xba\x0f\xb2/\x8c\xae\x01\x04\xbe\xeeMXt\x89\x19-X\x88h\x04\x07\x10\xb0\x93\xeb\xec\xd6\xd7\x14\x93\x9btf\xeexn\x07\x92\xdaI\xf5\xbe,\xed\xfc\xde\xd9\xce\x90E@F^\x8d\xbd\xb1\x90\xc3\xe6\xd9\xdc\xb1\xd9\xb6\x88O2.h\xc3\xd32\xac\xf773\xac\x9d\x1b\x1e\xd63\xf7\xb0z\x05\xd2\xc0\x9a\xf1\x03\x0e\xe1\xc5\xf1\xdb7}\xf1(\x99\xae\x84\xdaVRK\xcf\xdc\xa2\xaf\x9c\x04\xf8\xd8\x9a\xc9\xd3\xd2\xdc\xc7N\x0c\"\xf0\xb0\xe4\xe0\x08<\xc2\xbfw\x90\x9d\xf3\xea\xe0\xb3G\x07\x9c\xf5\xd9\x86\xfd\xfb\xf7\xee\xde\xbds\xef\x9b\xfb\xdf\xc16\x04\x843d\xf7C\xf1\xe7\xa3G\xb0\xdf>}\xeb\x0b%[{M\x87\x0bu$\xbe\xae\x8eD\x19\xa8\xc5\xef5\xceD\x91^\xa0|\xd08\x14;\x89\x9a\xec\xb6\xb1\xb0\x0c\xa3o\x0f0\xfc\x161\xa5>p<\xd82s\xf2\x93/M\xdf\xe0\xa73\xbf\xd1\xc0\xa9=\xbf\x93b\x9a\xd0 JO\x9e\xdd~\x817\xdd!:\xd3\xc1\x01\xec\xb4\xfd\xffLfN>*?\xc3\xd5\xb9\x9e>S\x99\xa8\x9c\xa3\xd1\xd2\x0c\x97{\xc7\xcb\xd53\x8d\x0b\xf6\xfc\x9a#+\x8dq\x7f\xd9\xe8n\"~\xc3\x13qn2~\xc3\xb7\xcb\xc5\x06}*Dm\x86\x15\xd9\x9d\x98\xf9:U\x96\x02.u\x8a\xa0Z\xb1\x10\x98\xf6j_\xfe\x89\x15\x8c;\xb23\xf2\x8b\xa8\xec\x8c\x9c`\xef*\xe7~t\xce\xafRDt\x04\x85VI\x15\x959\xa3\x03{J0\xef\xc9\xd1\x1eB\x0e\x07\x90\xab\xd0\xfdc=\x02x_94\x88\xd61\xc7\x81gP\xb0r\xee\xfc\"\xf2Qz\xab\xfe\x15$\xe4:\x8e\x9f\xa2\x9a\xbdW\xeb7\xe4\x9a\xe8\x89\xfd\x1b;\x0d6\xd2k\x87\x88\x82\xaa\x14]]\x0b\xa5e^\xafG\xd3\xdc\xba%\xf8\x8b\x99\x96dU\xe1\xed\xb5\xfc\x11EUmKV\xa5M\xdd\x117s^j\xc1\xe3\xd1\x00v1\x07\x85%\x90\xc8\x02(d\xbefUt\xd1\xce^\xf5\xa5<\xb4Z\xd5\x14\xc1v\xc61\x92/\xb2b\x13\xd3\xe6\xf5\x93|\xf8\x99\xf5\xaa\x12\x03%\n\xec\xc3\xd7\xea\xd7\x0e\xec\x89\x02\x03\x0e\xcb\x9f-\xf5\xa1~)\xa3\x01s\xca\xe5\xeaJ\xbe\xd8V\xd79 \xad\x8d`+\xc1R\x00b]Eh)\x17\xd1\xb30\xd4\x92\x96b\xb3\xf2\xbe\xb3\xe5+\xde{\xe4\xca\xa3\xa1C\xd4l\xb6\xf3\x06i\x84\xb0\xaa\x19\xd0~\xc7\xfe;'\xefo\x0f\xbd\x86\xfd\xac\x84l\xc6!\x1b\xc3\xff\xe5\xb2\x03\xdfz\x1c\x07\x92\x9a\x0b0\xc6\xfc\x1e\x88w\xe0\x10>\xf3\xb9\xc7\"\x1d)Zm\xd4\xcfL\xa5\x8c\xed\x02\xbf\xd3ZbIU^Q \xefm\x9c\x92\xf8\xdc\x87\xf3Rf\xb9!\xefbd8\x94C\xc7bq\x1e\xe5\xa5 \x00J\xff\x12\xc1\xcb~6EgZ\xebg\"?\x89\xe6\x9d\xef}\\\xc3\xbf\x8e\x1f\xf8\x9e\x11\xaa7\xed\xde\xe3y\xf2\xffq-\xbd\xeaK\xf5\xc7+\x1a\xb9\x90\xcd{\x0c?'l\xe6sN)\x99G\xef\xc5\x8do\x9c\xa7S\x01\x02\xed\xf1\xdbL\x96\xb5;W!\xa7\x08Uz\xd8\x89\xd27\xe87\xcb\xba-\xef\xd0q\xbd=\xfc\x8dy,\xc4 Q\x0bZ\x9a\x95\xbd\xe4\xb4\xeb\xe6\xd31T\x9d\x86\x9b\xd9l\xd8|\x95\xc3\xcd\x03\xda\x89\x96g[\x94\xd0\xaeY \xf4\xc7\x9a%A\xbf]3)\xfc\x1a\xe9J\xda\x10\xef\xbd\xac-\x9f\xb8\xf7C\xadiq\xef\x84\x18>\xbe \x86\xaf\x8fH\xf3\xf36TT~\xb9\x03\xa0m\xb8\"P_\xb4\xef?\xcd\xd2\x94 \xa4\x0f\xe0\xd4\xe0\x03\x81\x01b\x1f\x0d\x0f\xf4\xb4\x92\xefX\xfb\xb9\xc8\xcb\xb70<\x91\xa9\x02\x8f\x8c\xa3d\x07P\x18\x1e\xe8Y%\xe7\x86\xe7\xef\xc98\xcb'\x07\x90\x9b\x9e\xc5\xf4\x8c\x1c\xc0\xca0\x89\xf7dAb\xde\xa4\xe1YR\x1c\xc0\xccp\x7f\x9agsLmkK\x97|\x15\x01\xe9\x93\xcbE\x96\xb3\x02\x93\xc4 \xac\xbcr\xfb\xb4\xf5\x96\x05\x81\x82\xe5\xc9\x98i\xf9i\x94 ]\xdbn\x9a\x0f\x8d\xdeQ\xb3u\x15\xfb\x16G\xb0\x8c\xa0hn$L\xc6\x1e\xb00\x82-\xe3\x1e\xe6]\xa7m\xfa\xa7\xa5\x01C=OX&L;\xca\xf3,\x0fz\xaf\x13\x9aL\x132\x01r9&\x0b> \xc8\xc6\xe3e\x9e\x93\xc9\x03\xe0\x93d3\x024\xa3;s\xf5\xe2\x84\x9c\x03\xa1\xe7I\x9eQNu1\x02\x8b\xbf4]\xa6)\x10\xde*\xccIQ\xc4g\x04b:\x81x2Ix\xb3q\n3\x92.\xa6\xcb\x14.\xe2\x9c&\xf4\xac\xe8\xf7\x0c\x14\x9b\xa4\x05q\x90\xfc1\xe7i\x9a\xc0r\xf8\xf7L\xed\xfcfP\x07\x05\xeb\xe7d\x91\xc6c\x12\xdc\xfe\xbf\xc5\xed\xb3\xa8\x9b\xa8AE\xd8\xc6\xc3\xe9\xf6v;\x84\x17\x90\x8a\x85a\x9f\xc6s\x0c\x8dxN\xcf\xe3<\x89)\x83\x9f\x92,\xc5\xe4\xdb\x86\xfc\x92\xad;l\x96g\x17\x90\xf6\xa7y<'\xc5\x87\xec\x1dV\x91\xd9k\xa6b\xd3\xb0\xfa\xcb\x91\x98\x06w\xee\x86f\xdc\xcd\xaf\xdf\xba#K\xa2L~>!\xd3\x84\x12\x95\xfc\x9c\x8bE\xbd\x93\x13R\xbc\xce&\xcb\x94\xf4L\xa4T:I5\\\x9e0\x8f\x12\xe7\xbb\x9ef\xf3yF\x8f.\x19\xa1\x85\xcc\x7f\x8e\xf7\x1bwH1\x8e\x17XS\xf1UB?\xbd\x8b\xb1\xae\xa2J\x9d\xdf\xba]\xcc\xe24\xcd.\x8e>/\xe3TV#d\xfd\xd3e\x92N\xbe\xcf\xf2\xf9\xb3\x98\xc5\xe2\xb5,g$\x97OY&o\x92<\x89\xd3\xe4\x0frL\xe2|,\xda[\xc4y\xa1\xff>#\xec8\x9e/Rr<\x9e\x91\xb9\xf8\xee\xaf\x17\xc7o\xdf\x88\x9d\xd1\xe9\x01\xc6\xf2U\x07\xb3\x8c\xb6*D5\xab\x8eF\xe8\xa8o\xdd\x82^\x86\xbd\xf6D\x11\xb2\x86\xb1\xa0\xb7\xa4b\x9fNzp\x00\\\x82*\xf8\xc6\x8d\x97)\x0b\x03\x16\x86\x8ex\xd7+\x18\xc7l<\x03q8\xb6\x1e\xcb\xef\x1a\xd9\x1b\xae\xf8^\x16\x03J\xa6\xabNH\xc8F\x8e\x05\xc3|$\xf9f-\xa9<\x1c4\xfb\xc6\x1e\xe2<\x8fW\x1bt@d\xb3\xe8]\xa3\xff-\xeaI\n+\xefp\xd4\xeeH\xb0%\x92O\xd2z\x03b\x0eM\xe3\xabr\x84\x1eT\n\xae\xe6\xb3\x9eAB\x0b\x16\xd31\xc9\xa6\xb0RK\xd2\xe7[\xd2\xf5i /\xc6\x01U\xcf\x86\x8b\xb7\xd2\xb2)\xce\xb8\xcb\xb4\xbc$\xec\x8b\x8c\xce8\xdb\xea\x95\x8a\xd9\xac\xde4\xd5Nd\x98`\xf0Cv\xcc<\x0b\x05)\x15\xa3)\x87\xbb\xd2\xfd\xecF\xb0\xacP\x91\xb4\xb3\xf3v [\xe6\xf0\xc5!3$\xe80\x14\xbe\xeb*\xc6N\x879\x17\x0f\xc90\x1f\x89\xf4\x8at\x99\xa6fMt+\x13&\x82\x8cf\xf9\x1c\x0f\x0f\x81s\x03\xb8\x8c\x90N|O}\x91\xd6<\xc1vOIQ\xd2\x9dc\xd9\xc7\x92\x8eo\xbe\x175\x11\xaff\x9b\x99\x9a\x8dT\xe2u\xbc\xf0A'+\xca4\x93\xfa\xba\xf4\xa2\xf5ue\x01_Y\xa1\x8a5\xe5\xee\x84?\xdb\xa5\x84p\xc8\xef\xb1\xcb\x7f\xdb\xa8K\xc5x9^\xa7\xee$s\x1e\x08Y\xd7\x81 U\xda\xfcn\\\xdd\xa5\x18r\xb1\x01\x98\x8aU\xc1\xc8\xfc\xc3lI?\xbdN&\x93\x94\\\xc49\xf1E\x9c\xee\xfd\xcf\xfa\x93\xa4X\xf0\xb3I2\x8eH\x97\x9cp\xe9n\xd4\xf4\xb2\xd3\x82\x05\x1d[\x08\xcd\x93\x01 0\x959\x0b,\xbel`\x14#\xccw\x0d\xe7\xa0\\#\x0e\x80e\xf14\x9btC\xf9\xbcL\xb2\xa5\xaal[I4+55\xc1\x05?[.\xf8D\xfc\x93\xa8+\xe0\xec\xf7Ty\xd4m\xe8\xf5Bc\x06\xa5\x10\x19pK0\xf3\x95\\f~\x82\xf9l<\x8c\xce\xa9N9\xa5\xc0\xe1\xbc\xa7\xfc3\xd0\x8a)V/\x8a\x13\xb2\x0d\x0eu\x9a\x11\x99\x83\xc0p\xec2\xce>\xb0\x91\x1d\x96\xf5^\xfaI\x81\x9dQ\x91\xf8\xfe\xa05\x88\xf6\xfcg\xc9\xd9,M\xcef\xdd\xdc\xa5Z\xe1I6Fu\xab\x99\x01\xd9\xaa\xf8\x8c\x9e!s\xaf\x08N`\xe4\x92=\xcd(#\x94\xa94\xac\x8f\xe0\x1e\xb9S\xc5\x03\xe9\xafX'\xdf\x8d+\xb5\xec0\xba\xd2@\xa4\x83\xab\xfa\x88\x90\x0b\xdf\x8dP=\xb2\x1c\xee\x8e\"\xd44\xecE\xa8@ \xfd\x84R\x92\xff\xf8\xe1\xf5+\x91q\x18\x16\xa8V\x10r\xb2\xa8g\xbb\x80\x87\xf0\x0d\x92\xc9\xdf~\xc3\xfdJ\xa5\xe7\xdc\xd8\x99m\x86\x03\x84\xf7\x94\xaa\xae\xb7\xb7\x8b\x910\xafM+\xd8\xecE\xb05\x86\xf5\x1a\x16\xf0\x08\xbe\x15\xbd\x08\xaa\x80w\x87\xb7\x7f;\xbe\xddg\xa4`\xc18\x8c\xf8\xdb\xfc\x83\xdb\xc3\xaf~\xbb\x18i\xf7\x83\xdem9\xb2\xf5\xbal\x80\"iN\"\xf8[\xefo\xa0\xdcN\x92\x08z\x7f\xeb\xe9?\x97\xc3\x02v\xe0\xee\x08\xb6\xd1)\x9e\xf2g\xbd\x9d\x9d\xdf.\xefp\x99\xbc\xba\xf5\xf5\xed\xdeh\xb8\x18\xb9\x8de\xb8,SQ\x98\xa1\x1f/\x16\x84N\x9e\xce\x92t\x12\xc4\x9a\xc8}\x94\x12\x8efA\xafX\xc4\xb4\x17\x86\xfd\x82\xb0\xc7\x8c\xe5\xc9\xe9\x92\x91\xa0W\xb0\x15\xaa\x03\x86\xbdq\x96f\xf9\x01\xfc\x9f{\xf7\xee=\x80iF\xd9\xce\x05\x11 qO\xb3t\xf2\xa0\x17\xe1\x8a\xe1\x7f\xfa\xabxo4\\\xc0!\xae\xdd\x1d8\x84}8@\x08\xdf\x87C\xb8+\xff\xe6\xf7\xef\xc0\x01l\xdf\xfeW\x10\x07\xa7\x05\xcb\xe31[\xa7I\\\xac\xe9d\xadL\x0fk\xbeg\xd7E0_\x17$g\xe1\xe1z\xc9\xb2p}\x1a\xc4\x05Y\x93\xb3\x84\xae\xb3,\x0dHL\xc3\xc3uN\xe2O\xeb\x15#\xe1z\x8c\x8f\xf9\x81\xb3\x9e\xc5\xf9\x1aE\xdb\xc9:\x8d\x8bb\x9df\x94\xac\xb3\xf9\"]g\xb4`\xeb\x8c\xb2\x84.I\xb8\x9e\x90\xe0tyvF\xf2\xf58\x99\xc7\xe9z\x9c\xc69YO\x03\xbe\xc7\xd7$\x0f\x0f\xd7 M\xd8:\x0d\xc8Y\xcc\xc8\x9a0\x12\x1e\x86\xebI\xb6\x9ed\xcb\xd3\x94\xacI0\x9ee\xeb\xb48L\xa6\xeb\xb4 A2\x0d\x0f\xf9<\xb0\xf6\xe8\x9a.\xe7\xebsB\xd9\xfa2\x18\x93\x05[\x93\xf1z\x11\xa4\xc98a\xeb,g\xe1\x9a\x91\x80N\x8a5*M\xd69\x0d\xc3\x90w\x9d\xa6l\x96g\xcb\xb3\xd9:N\x0b\xb2Nh\x9c\x06\xe9\x8a\x0f\xe5\x92O'\x8b\xf9\xd7\x01\x89\xc73>\xfb\x84p\xb0e\xf3\xf5\x92\x8e\x03\xbe{\xf9\x00\xcf\xd2\xec4N\xd7g\x19\xcb\xd6g\xcb8\x9f\xac\x93`\xba\x9e/\x02\x81\x03\xc5Z\x1b\x04\x0d\x12\xb6F\x95~p\x92\xd11 \x0f\xd7i\xc2\xa1\xb5dk%\xfa\xacY@\xf2i<&k\x92\xd38\x0d\x0f\xc3\xc3u\x11\xae\xd3 \x9e\x9fN\xe25a\xebl\xfci\x9d\xd1\xb3p=\x0f\x92q\x9e! \\\xa3\x8ai-\xd4\x08\xe1\xfaM\xfcfM\x83xN\x8a\x05o)f\xc99Y\x93K\xb6&\x17\xeb$]gl\xbdL\xd3p\x9d\x05\xc8\x16\xad\x17\xc2\x10\xbe\xce\xd7K\xb6>'y\x9eLH\xb8^\x04\xf1\xf8S|F\xd6q\x1e\xcf\x8bu\x9e\x9c\xf3u\xc93F\xc6\x8cp@\xb0l\x9c\xa5\xeb\xe5i\x9a\x8c\xc3u\x1e\xc4 \xc7\x98 \x9ed4]\xf1\x85\x9b\xae\xcf\x92\x82\x91|\xbd 1[\x7f^&y5\xefb\xbc$k\xa1b[\xb3|\xb5\xe6T1\x0c\xd7Ep\xba\xe2\x8b\x1f\xa7d\xb2&\xe9t=\xcbr\xb6N\xce(\x99\xac\x93?\x10<1K\xc6kT\xe7\xacY\xbe\x1c\xb3\xf5\xf2\xb4\x18\xe7\xc9\x82\xad\x97\x0b\x92\xafWt<\xcb3\x9a\xfcA&\xeb\x8b\x84\x8dg!\x87\xe8|\x91\xf2\xc1\xcf\x08]\xcf\x92b=\xcb\xb3\x8b\xe2p\x9d\xc7\xb4H8\xd2\xe4K\xb2\xceW\xeb\xd5\x82\x041\xee\x8f \x99\xae\x93\xc9\x9a\xc6s\xb2\xce\xa6a\xb8^\x064\x18K4\x9f\x90i\xc0\xd9E\x8e'\x19]\xa7\xa4(\xd6\x85\x18#K\xd2p]\x90u\x91\xf0\x05:\x0f\xe2|\x9d\xe4l\x19\xa7\xeb,\x99\xacQm\xca\xd7\xe7\"\x18\xcf\xe2\xfc\x84\x89\x01\x91\x9c\xacgIJ\xd6 \x9b\x85\xeb\xcb,_\xaf\x12\x92N\xc2\xaf$\x01\x9cr~iw\x14r\x16T'9\x8a\xdc| \x97\xecM6!\xc14\x0cC\x91Al\xc1)\x94\xa0\xeb\x9cF\x1c\xf0\xf3c\xaa\x1d\x00{{\x0f`k\xb8\x17\xc1\xed\xe1o\xb7\xff\xbc\x1a\x06\xbf\xedl\x7f=x\xf8\xe8\xe0\xc1\xfa\xb7\xdf\xfa\xd1\xe1\xd6\xad\xbf\xff\xfft\xfa{{\xf8\xdb(\xac\xdfhPhI\xa0\xc7\xbc\xe3\x0cS\x93sR\xff\xb0\x07[x\xceH\x12=.\xa9\xf3\x98\x1fS\xdb\x90\xc26\x12\xe8m\xd8\x1b\x95\x7f\xee\x8f\x90 \xffvyg\xbc\xb5\xb3\xd3So\xf2{\xb7\xbf\xae\xff\xbc\xcdi\xe1\xff\x11-\x8e\x86;;\x8b\xd1\x03\x87\x07\xcf\x14\xb6\x070\xf6e.\x8d2\xda<^|\xc8\x1a|\x97M\xf5as\xb1\xe4\xc7b#\xc9~\xf9\xcapo\x04\x87\xf5\x9f\x07\xd0\xfbDV\x06\x96D)\x06\x0d\xed\xef[\xdb\xdf\xaf\xb7\xbf?\xaa1[\xaf\xe3\x85\x89\xe1k0\x90\xaf\xe3E?)\x84\x96\x04=\x81\x84\xf7\xc3\x06\x1cd\x9dc\xa4\xa2\x82\x0dE\x0b\x89\x89g\xe4\xfd\xd3*\xef\xfd^\xa5\x11\xea\xcfI~F\x02\x93\x14x.\xa3\xe5\xbbG\xc3\xdf\xe4\x8c\x155V\x07\xe2O\x0bK\xf4\xbc2\xecl\xed\x99\x9fM-:]p*=K\xe6o\x11\xc1\x04\x06(~&\x9a\x96RE\x06\x04!\xa6 \xe4\x83\x0b\xf8\xb6\x9e\xd4\x1c\x85\xc2\x07r\xd8..\x8e\xf72\xe3\x14\xc3'8\xfd\\\x8e%\xab\xc62C\x17Y\xe7Ws\x0e\x83\xceP\xf63|k\xaf\xe3\xad\x15\xe7i\x83\xb3\x08h\x99m'\x82\x9c3X\xc12\x82yS\x0d\xad_mTPB\xc7\x8a\x0b\x1d\xb1r\xfe\xc0\xec\x87\xb1H\x9a\xb72s\x83\x06b\xa1\xab\x86\x8d\xdf\x8c\xa5k\x05r\xe5\x86\xef\xa7\x9c\xfbHm\x18a\xc7\x15~ma \xdeI_n\n\xedo[\xe2\xe6\x8e\xee@\xf1\xf7\xa14\xe0M}\xe1\xd0\xba#\xc7\x14\xb7I)\xb9D\x8e\xf4\xfb$%o\xe29\xf9>\xcf\xe6R\xa6y\x96\x14\x8b\xac@\xe3\xeb\x8f$\x9ex\x94\x95W\"\xde\xedi\x92\x12~l\x0fz\xc1\xf0_\x0fF_\x87\x0f\x0e{\xb7\x93>\xb9$c\xa3\xe1\x00\xcb\x9e\x08\xdb\x00g\xea\xebm\x94MT-\xd8\x88\x93\xaa\x9e\x82\xcdh\xb2\xa1F\xaa\x8c\xf9\x19\x94\x12n\x99\xa6m\x08-\xe2b\x1c\xa7O\xe3\x82\xc0\x00\x9e\xd6\xef|/\x07\xd9 \x1a\xd9\xc3\xd3\x80Tf\xe2\xdf\xfa\xc3\x7f\xf5o\x8f\xbe\xfe\xea6\x17%B\x93\xc6*\xa6 K\xfe \x1f\xf3\xb4\xb3\x07\x0e\x802vlK\x8b\x1d\xe3\xc2\x9a\xd0u\xb8ekM18\xd6{\x0e\x8dG\xf0\x19a\x8f\xc7\x9c\xcb\xe7\xd8\x92gi\x9a\xd0\xb3\xf7\xa4Xd\xb4\xe8\x86F\xe3$\xab\x14\xfe\xfd\xa4\xd0\xb4\xff\x9a:\x84/\x8dMcP?\xf6\xccoV\xfa\xa5\xbaCx\x97Wry\xc2\x15,\xceY\xf1s\xc2fAo\xbfW\xea#u\x15*:\xe9\xf5\xc6b\xf7\xf4\xf04\xfd\xf3*\xac\xb0\xd0V\xa8\xc1LlK\xd5N\xd0\x93]\x88&\x8dv\x12K\x1b|\xcb\x06\xd40.s#a\xa9|\x93\xa6.5v\xa1\x0d2CVA\x887\x9b\xb7\xf1dB\xc8\"]\x1d\xb3\x8e\xbaLmJ\xf3\xdeP\x86\xffye\x0eLi\xe0hf09\xd9\x15\xdaU\x1cQ\x1edC6\xc2\xbdr\x08\x13\x92\x12F\x80\xdf\xe1B\x0d\xff\x87\xf3\x03\xe2\x0dj\xcce`\xcaV\xabl\x03\x06\xb2\xa7\xa2!\xbd\x08\x89)`\xd6\x95\x19HV We=\x95Y\xd7r\xa6X\xad\x16\xa4k\xc1\x89\xb0Z\x94\x87\x12 \x1d\x0c\x84F|s\xad\x89\x08\x84}o\xdf\x00R\xc5\xect\x19$\xcdQ\xc2\xe0\xe2\x13\x88#\x15\x03\xebS\xf4\xbd\xf8\x90\x95\xfe\x1c\x1ek$\xbe\xb1\xac\x91\xd6\x9b\x15M\x1a\xa6\xbf\xfa{\xe7\xb2\x92\xe7I@\x83oL>\x12ctH\xba\xf7\xcd\x9e\xe1\xd9T~x\xef\x1b\xa3{\xc5B\xb9f|\xbbkz<)\x1f\xdf5=\x9e\x95\x8f\x8d\xe3:\x97\x8f\xef\xdf36>W.%\xbb\xf7L\x8f\xcfpV{\xdf\x99x\xff\x95\xfc\xf4\x8eqR\xa7\nX\xfbw8\xe2\xd7\x9e\x97\x04\xfa\xa4\xc3w\xe1\xd6-\x0c\xe1P\xbeU\xd2\xb5\xd8\x8c\x8b\x12\xa5M\xa5\xea\x9bQ\xf3\xfa/\xbe\xb0\x170\x80\xf2\x08lO\xe5\xc8\xe0\xc0\xd3\xad\xd9o\xc9\xc8fsL{\xb06`]ndv\xae\n\x047&on\xfc\xd8\xd9\xf8\xd6\x16q\xdaW}(\x95c\x0dtO\xa9\x89\xfa\xc8\x06\x86\xa7\xce\x91\xf2~\x17U\xbf\xfc\xe7\xd4\x7f\x18u\x07\xaeN\x16\xce\xa1\xf8\xd9\x8c\x8b\x18Z\xc4a\x0b\x8br\xc7\xda\xf8\x9dz\xe3wD\xe3NN\xbcn\xa2\x97} \xefQ\x7f\xc8\xca\x87\xeb5 `\xcfk\xc7\x88\x0e-\xab\xfd\x18\x9d\x84\xab\xfc\xdf\xb4b\xbfM\x9a\x15\xd0\xfd\x00\x86\xd4\x92\xf6\xces\xa3\xc1!h\x02AR\x04\x182\xc5Q\xd5\xcaq\xf9\xa05\n?\xb6\x06|\xfc\x0e\xf0\x08'\xf8i\xd6&\x06\x82{k\xd4l\xeb*`\xb3\xc5{\x99k\xc3\x1cR\xceY\x0d\xa9\xc1\xeau\xd5\xdc\x12\xeds\xef\x93\xc5\xe1\xb1s\x7f\x80\xb2\xa7\xc2#\xa8\xc2\xc4{?\xc5\xe9\x92\xc0|Y08%\x90\x92\xa2\x006\x8b)\xc8\x96\xbd\xca\xd9?\xb68fn0\xa6\x87\xf61\x9d\xa1\xc2=\x97\xc3\x12\x8d{\x0d\xeb\xad\xd9\x85\xb4\xfb\xb4@9\xf3\xf6\xbfv\x0e\x7f\x9bl\x07\xbf\xf5\xf9?\xe1\xa1\xb2\x0chRjc\xa01H\xb6\xc7gp\xef,>\xaf\x9b\x8d\xcecP\x14#\x01\xcf<\x87\xf5\xc1\xe4\x9b\xeb7&<\x95\xb6\x02\xe2\xf0)\xb4Cn\x9a\xa4\xc4k\x80\xaf-\x0e\xc5~c\xec\xb1|Iz\xb2n0?D\xa7qZ\xe87\xb6v\xb5\xbf\xf7\x14#o\x1b\xf5\xa9\xe8\xdek\xe0\xcf\xcd\xce\xd1~\xe3\x16\x835\xa8{\xecc\x93/\xfb\x0c\xedw\x9b3\xb7\xdf\xe0\x92\xe2M\xfc&\xe0\x9f\x95\xce\xc2\x8e\x95V\xcd{\x8d\xec\x8d\xc9\xef\xdcoTJ\xd8S\xa2F\x9fe\xaf\xb2\x0b\x92?\x8d\x0b\x12\x84\x11l\xdd\xfe\xd7\xf0\xcf`t8\xdc\xdd\xf9.\xde\x99\x8e\xfe\xfc\xf6j\xa7\xfc\xfb\xae\xc7\xdf{\xfbW\xc3\xf0j\xe4E\x18\xf8\xc8\xbd&\xfc\xde\xea~\xefOL+\xde\xc4\x8f\xce\x8b.\xbc\x86\xf7\xcc\x1a3\xb0\xf9\xf06 \xf9\x1b\x8c\xf0\x95%\xd2\xc1{|[\x94\\\xc0{rvt\x89\xfe\xc8\xae\xa5\x9dfi\x9a]\xc0Bv\xd2\x83m\x93\x03{\xfd\x0co\xc7et\x8e\xec\xba\x9c\xed\xad[\xb5\xdfv\xae\xd6\xc6\xf1\"\xab\x87\x94\xe74\x9b\xac\xa4RY\xa8\x17\x13\xda\x13N\xf2\xf8\x0b\xcdX'\x97\xf3\xb4\x87\xee\xf2\xda\xcd\x9eEU\x99T\xea\xce\x9c\xa0\x9b\xc2\xc4\xf6j\x0c\xc2;J\xbe^`\x84\x8b\xe8\xc8\xa2\"\x8e\xcb\xd5\xca\xedv\xc7X47\x97|\x8e\xa5\xf3\xb1\xf6\xa6d=,oN\xab79q\xb6\xbd\xb6\xa8^\x9bf\xf9\x8f\xe0,\x82\xd3\x08N\"\xb8\x88\xe0(\x82\xcb\x08\x8eG\x0d\xe1\xd59\xf6J\xdfd|\xc5V\x92\x0eYB\xe4\x9f\x9f\x86\xcd\xb9\xbf\x97\xb4\x1e\xa6 I'\x90\x14@3\x06\x8b<;O&x\x02\x98(\xb6j\xf4\xdc5X>\xf1\x8f0\x80WA\x16\xc1\xb9\xc3%\xe1#\x1a8\xc4x>\xfa\xba\x1a\x80\x1c\xc2\xa4\xda:\x93\xae\xd1|\x86\x01\xbc\xe7\xa3\x998F\xf3Y\x1b\xcd\xe7MG3\xeb\x1a\xc2\xf70\x80g|\x083\xc7\x10\xbe\xd7\x86\xf0\xfd\xa6CXV\x00q\x96\x1d\xe1\xa3\xf9\x03S]a\x91\x11\xfbh\xfe\xd0F\xf3\xc7\xa6\xa3\x19W\xa3\x19w\x8d\xe6 \x0c\xe01\x1f\xcd\xd81\x9a'\xdah\x9el:\x9a\xfa\x91\xd85\x9e\x9f\x1c^K\xeaB\xee&\xf8 5\xe41#;\x8c\xcbQ\xd8\xfc\x02\x0e\xe1\xf7\x00Uh\xbd%\x176\xca\xbbo\xc4\xdd\xe7\x82\x88\xda\xf9\"u\xc9\xd9\xfedsb\xa9\xc8l\xfd`\xeb\x9a\xdf\x8f0\x80\xd7\x81\xab\xda\n\xce\xee\xc7\x0d\xc6\xf8c\xf7\x18k\x87g\xd7\x10\x7f\x86\x01\xbc\xed\x1e\xe2\xcf\x1b\x0c\xf1\xe7\xee!\xd6O\xe8\xae1\xbe\xc0\xec\x8d\x9dc|\xb1\xc1\x18_t\x8fQg\xb0\xbaF\xf8k\xc7\xd0N\x91\xf9)\xd90\x9f\x81\xfe\xaax\xd6\xe74\x18\xf6\x12F\xe6E/\x02\xc1g\x8f0\xc9N\xcb\xcc\xdd\xe5\xe9\x01\x9a`\xd5\xb5\xed\xf8U\xc3\xa4_\xd1E\x82#\x0b\x86\xaa\xd6\x97P=|'\x1f\xeaT\xe0Wd\xc0\xf8\xd3\xe7\\\xa8\x8c\xa4\xb9]\xac\x83{\xb0\xfcJDVKC\xde\x95\xe6\x85\x995\x0e,\x99\xc4\xd4\xe5\xac7\xdb\x89\x13\x1a\x83\xdc\x85\x12/a\x00\x1f\xba\x91\xf6\xa5\x0f.H`\xbd\xf4\xa5\xc6V\xab\xb7\xc1{\xa5\x9dF\xc1\xcd))7\xa3/w66X:Az\x05m*\xf6\xb7\x0cZ\xa6\xf8g\x0e\xef\xdb\x97\xf3T\xea\xae\x98U\xbeK\x84\xcf\xd5\xe5<\xc5m\x8b\x7fa~\x12\xd7\x9a\x0b=\x0f\xff\x86K\xf9\xf2\xdb?\xaf\"\xfe\xfdW_\xe5d\xaa;\x03\xac\x16\xe8\xb4F\xfa\xb8\xaf\xc5\x9f\x0b\x91\xcf#!\xf2w\x95\x16\xe6]\xf5\xe4\x10\xfe\xf6\xf0\x907~N\xf2\"\xc9\xe8\xa0\xb7\xd7\xdf\xed\x01\xa1\xe3l\x92\xd0\xb3A\xef\xe3\x87\xefw\xbe\xed\x1d>\xfa\x8dJ\xb7v\xf8\xe5\xf5+ \x97\xb8\xc40\x8e)g>O \x9c\x11\x8a\xc9\x19' B\x94\xfef\xf5~R\xd7yY^\n\xa7\xd3\x9fsQ \xb8\xfd\xdb\xf1\xd7\xbf\xdd\x0e~;\xde\x0e\xbf\xba\xed@\xf6\n\x88\xb2\x84\x94'*C\xddXx\xa6,\xb5\x93\xa7\xa8/\xfb\xe5\xf5\xab#17\xe1J\xe2\xe3\x01r.\xcb\xaa\xd5\xdb\x13\x9b\xe0\xfb<\x9b\x8b\x8d \xdbk\xcfH)\xc5l\x92]\xd2%\xd9%a\x08\x87M?\x98\xa4\xf2\x83\x81\x83F\x8eJ\xe9\xa3\xa9\xa7?q\xba}\x9d\xcb\xcc\x86\x7f\x1at\x85 \x93\x17V\xe2|\x9a\x8d1\xcbN\xbf\xc0\xc6-\xfa\xa5Joi\xdbZ=\xa1\xa4w)MD\x16\x94byZ\xb0<\xd8\x0b\xfb\xc5\"MX\xd0\xbbe\xd2\xc6\x80\xee\x9f\x9eCB\x81\x86@\xfb\xb3\xb8x{A\xcb\xdc7\xb9pS\xc4(\xc3a>R-\x0e\xb8XE\x86\x132\xce&\xe4\xe3\xfb\xe7O\xb3\xf9\"\xa3\x84\xb2 \x1f\xee\x8e\xc2\x11\x0c \xe7T\xe8\xd6-0\xbe\xb37\x12v\xd5\x9e\x0f>\xa9m\xdd^\xb3v\x1a\x1b7m\xb5Z\xc5\xfd\xca\x97\xab\x81\xd0\xd6\x8cD\xca\xfdA\x0f\xb6MO\xc9\x90\x19\x0d\xb3\xfd\xdf\xb3\x84\xe2\xf2\xb4\xa7&S\xf5\xb8\x07\xa5\xe6S\xcb\xb9\xa1r\x17Sr\x01$`\x9a\xb9\"\x82\xde\x92Mw\xbe\xed\x85au\xb7w\x1a\x17\xe4\xfe]\xd3\x18\xaa\xd4A\xed\xae3\x0c6K2Z\x1c\xe3[6\xaf\x9d8]\xccb\xcf\\\x83\xa0\xbb\x8f)m\xe2\xac\x17\xe2\x16J \x07h\x9c\xf3)i\xcf,G\xb6yc\xce \x9be\x93k\x8fF|n\x1b\x8fz\xea\xcdD\xb4\xc7\xc8\xe2\xb3\xbf\n\x9c\x8d!{\x0f\xd2\x80\x99\x8d\x14S~\xec\x8c\xc9I\xa5\x8a\x8d\xe6\xe4\xc7z\xfa+_^b\xf5\x10\xd1\xd8\x96\x1c5\x88\xbd\xeao&x\xbb!\x8d\xf8\x06\x8dL\xfb3\x0f\xb5\xc4k\xfb\xbb\xb7\xcf\"\xe8m\xf7\xc2\x91\xdc\x9f\xa6%\xb5R)\xe6\xda\xd4\x86\x94]\xb5\x95\xb48\xd6\x94J3N\xb8f\x15\xe1\xa2\x9aSN\x97\xcb\xc8F\x1e#\xf5\x91\xd7a\xae\x94b\x96\xbcd^\x04\xd8X\xa0\x063\x8ektL\x9a\xb31\xa5Q\x9e\xcc\x03m\x91~\xc3\xecx\xbd\x13\xb4\xd8\xf4z\xae\xe1Z\xb2\xaay\x0d\x93\xc3\xec\xb4\x82\xd9\xc7\xb6{Yd\xc8\xe3\xe6\xd54ig\x9b\xe8N\xc2z\xfb_\x97;%s\xdd\xb9l\x915\xf7\xdc_9Bi\xffY\x97\xf6\xa5ui=ZK\xbb\xd8ZZ\xbd\xfc\xa7\xf2?\xd5\x83\xb2\x90\x16\x0d\xee\xdd\x0d\xfbO\x96\xd3)\x91\xde\xe2\xd7\xca\x06hN\x88\xd9\x9cfI\xa9\x8c\x92\x99\xc8\x15\x0f\xff\x7f\xf2\xde\xbc\xbbm\x1cK\x14\xff\xbf?\xc55\xa7_\x8a,\xd3\xb4$\xaf\x91\xedx\xb28\xdd\x99\xc9\xf6b\xa7\xea\xd7\xa3\xf2xh\n\x92\xd8\xa1H\x15\x17;\xae\xb2\xe7\xb3\xff\x0e.\x00\x12\x04\x01\x92rR\xd3\xfd\xde\xe3\xc9\x89E\x12\xc4r\x01\\\xdc\xfd\x9e@\x15\xcb\xf2\x13\xf1\x83\x9c\xc7\xa2\xfc\x17$\x0b(\x81p\x047a\x16\xe6\xb0\xc8\xf3\xd5x{{\xe6\x07\xe4:I\xbex\xf30_\x14\xd7^\x98l\xa7\xf4\xbb\xedi\x12d\xdb\xf8\xf1\x16#\x9fRo\x91/\xa3\xd3P\xc4nd\x94\x86\xcb\xf3\xb9A\n\xc7\x90\x1fA\xba\xb9\xe9@\x0c\x9b'`=\xf1\xd3y6\xb94Q$\x157\x97\xa2\xcb\xaeB\x1f\xb2:\xeaq5ED\xcd$\xed\x1f\x94\xb3\n\xc8\x99uG\xe2l\xa2\x99\xa4\x16\x1dS\xe5\x15\x98C[\xd2\x1a\xd8\x12\xc58j\xc4\xca\xca\n\xef\xbb\xc4\xa8'\x14\xd8\xe7\xa4\x1f\xac\x932\x1a\xf1#\x9a\xacB\x19\xcbcf\x1d\xa8nz\xf5#\xcb\xfd\xe0\xcb#\xba\x80\x11\x98\xd9\xb8\xe9/:r\xfa\xb7W\x9b!\xb7\xd0}D\xb3\xc2\xb8\x17[\xd6\x18\xfd\xf6j?\xc5H\xcfk\xb5^\xd4\xb3\xbd\x88\xa8=\xad\xca\xa8\xf2\x84\xc84'\x04\x8b\xac\xc3\x8c\x102x\x06{p\n\x19l\xc1\x1e\x8c1\xf3R\x00'\xb0w\x04\x01\x1cCv\x04\x01E\xe3\xd1$\xa0\x05.\xe5\xda&AKb\xf0\x1b\xee\xa5n\xb6\xa3\x86R\xdb3\x93\xe9\xac\xd4c\xc1\xb0\x8d\xe2:q\xd1\x16\xd0\xd4\xc4\x9eux\x8a\x03\xb75 \xdb\xe5\xdf\x1c\xdcR,h\x8a\xc3\xa3p\x8afOSzb\xc2\x7f\xd1\x9f\x05\xfd\xf9_\x90\xcc\x90Zd\xcfV\xecYV\xacV\x11=\x7f\xf2\x84=O\xf0\xb9\x0b\xe4\xeb\n\x03\x9c\x80\x1fC\xe9\xd8\xe1\xfd=\xe3\xa1\xbf=\x8d\xe8A\\z)\x19\xc8\xb3\xbch\xe5X\xc4EK\xde \xe7\xb2\xe8H\xe9\xde\xa9\x8b\x16\x97\xb0\x8d\x99\x95\xd9\x03\xdb\xacN\xe4\x0b\x1d\xf3y\x1eJ\x91~h\xb2taQ\xaeo\n9\x8f\xc2pQfP\x88\xda<\xf1\xc5E;?/\xe5W\xf3\xd6\xf2f\xd8\x1a\x82\xc5\xf5\xda\xe4\xd9\xc2_\x911\xac\x9aoD\xa07\xed\xcb\xa5\xbfzY\xbe\xef\x8d\x1ef\x88\x9c\x1ew\x06F\x18\xe5>\xb3\xf5\xe7\xb6\xb6\x87X\xbc\xd9Z\xdb\xf9\x8a\x9f\xf4<+\xb5'#V\xd0<\xeb\xdaN6\xb9\xcd\xae\xb3\xcap2\xb1V\x0dg\x8d\xae\x9f\xbf\xf2~\xfe\xca\xfb\xf9+\xf6\xf3WM\xd9\x94\xc7\xfb\xcfl\x8b\xed\x7f\xcb\xed?\xe1D\x87.\x9b\xb3\xadi6,S,d\xf6\x9a\xc7\x99\xec&&z\n~\xb3\xaf\x82+\x11|t}\xbb\xf2\x11h\x9c\xc7\x84\xfeu\\\x1f\x1e\xb3R\xa5\xef\x85\xfc}\xac\x8e_\xf4\x97\x16\xaa0+r\x1ae\xcen\xbb\x14>\x03\x06F\xac\x05\xdf}\xd0\x8c\xac\xd00]\xe2]\xce\x8f\xe1\xb4\x0c\x9e\xa7\x9b\xb0\xb5N\xe0}~\x02\xefK'\xf0\xbe\xee\x04\xde\xef>\x81\x05\xd5\x00'\x80\xa6+)\x0b\x9e\xc7\x8c\x1c]\xe1\xbd\xcb\xe2\xb3\x9e\x02QQpm`2\xe2\xe5\xc9\xe8\xa5\xe3\xb14u\xa2\xc0\xf6\x1b\xe7\xe3\xad\xcfl\x9f\xb2\x15 \x18S\x16\xc6\xac@\x88\x05<\x94\x97\xb0\x86\xebk\xad\xb1\xa2\x98&A\n\x0f\xbc1t\xb4++\xf6\xc2\xac\xec\x96\xfa\xcd\xa0\x16\\U7\xed\x99\x96\xfco\xd2ar\xf4D\xed\xec\x8b\x89\xa7P6\xa9X\xec\xac\xd5\xe44B\xda\xa6#\x87\x8f\x81X \xdb\x89\x95\xa8/\xb1\xf2_\xa5\xac\xe0\xbft\x14\x8aQ\xec\xd8\x8c;\xe2\xb4\xc2=2\xc9\x1b\x9b\xa0\xaf\xe0\xaeI\n\x02\xf2\xc6\x8b\xb4\x1b/(7^\xc4I\xdfH\"}g\x8c\xf4\x9d\xc11DG0\xa3\x1b/\x98\xcc\x9a\xa4\xef\xcc\x10\xd0i\x85\xaa\xa6\xc44\xe7\xb1\xbdj\x9ds\xbaf\x0b3\xfd\x84F\xd0\xf6\xeaQKB\xa2_3\xcd\x92X\x18\x96D\xd8E\xbf\xa2K\x00#\xd5\xfa,\x10fW\xc1'S\xef\xe7\xa3\x19\x00-#\x1ce\x0d]\xc4y_\xa5\xc9\xea\xa2\x1cS\xd6\xe8{\xb9\xe2\xb4\x99V\xca\x95s\x83\x91\xab\xca\xc8\xf5.\x92\xb8\x03\x97\xd3\xac<\xa1-,\xe1\x18\xe6G\xb0\xa4\x8b\xc4<\xa5\x18ZJE\xb27.,\xcbEL{9\xa1\xfd]\xd2_\x97V\x89t\x03\x13\xb5K\x81x'\x9f\x82\x08\xae\x12\x80w\x1d\xf3\xd0\xb1\x19\x85xC\x17.\xbb\xb9\x1f[\xb7`\xa2\xdd\x82a\xb9\x05\x13\xc7\xe5 \x10\xc1\x87cH\x8e\xc0\xa7\xd0\x0c'~}\xbb\xf9\xe6s\x0eQ\x07vU\x01r\x88:]\x16\x7f \xf3\x8d\xb8r\xb7\xab!\xa2[\xae~\xfe\xcaq\x84\xdaq\xf8\xe58B\x8eJB \x95\x14\x0c\x95\x14p\x0c\xe1\x11\x14t\\\xfe\xa4h\xa2\x92\xc2\xa4E\xe2(\x8cLrC \xe3^\xca\xda\xf6\xd2\x17r\x97]H\xfb\xc9NV\\\x08\x9a\x91 \x89\xa7e\xd7\x9c\xe6V\x8bM[\xad\xc9\xe6\xb6o5\x90\xa1\x8b\xe1~\xe5H=\xe5\xbe\x9b\xb1}G\xb1jP\xee;\x8a\x9cW\x1c9\x9b9T\x81N3u\xef\x05.\xcc\xca\x99G\xa4\xb8\xf5\x8c\x02\xc5\xa6\xe3\x08&\xb3K\xfa\xcc\xa9v\xa1\xdf\xc6s2\x8bi\xe3Nl\x92\xe5\xa0\xc5\x8a\x0fNs\xf5\xea\x0f\x98l\x9d\x9d<3\xd3\xe7\x92\x05\x8bb\xb7U1\x060\xae\xbdk\x9eK\xb1\xa9\"\xb4\xd1\xd2r\x15\xb5:G\x97Z\"\xee\xff\xa5\xd3\xfe\xb1\xc7y\xd1~\x9cO\xff\x87\x8e\xf3\x9b2\xcec%\xffi=X\xbb4\xebK\xc4x7-\x18o\xd9\xb5\xeb\xe9)\xbdTw\xfd\xc2\x85\x9b\xda\x89\x8b\x1c\xe2M\xf7Y\x0b=%J\x9d\xc6\n\xed[u\xd5\xdc\xaa\x95|G\xfeT\xfc\x925\x85\xcc~\xecQ\x8a\xa3\xed\x1f\xcb\x9f\x8c\xc3\xde\xf2\xb3,\x9cWl\x92\x1d8p\x1e\xc6\xd3\x94\xc0y\x92.\x8a\n\x01\xfdk\x14\x06$\xce\x08\xbc{sQ>\xfcq\xbb\xfc)tR<\x8d\xd9\x9c\xe4\x92)\xd7\xf9\xdd\xf2:\x89\xb2\xa6\xae\x8a\x97\xae%\xb9\x94\xbek\xea\xae\x1a\x1fp\xcb\xca\xbb7\xd9Y\\,\x19\xda9\xd2\xc2\xcdH\xc4\xe8=\xa9pS\xf3\xe6\x18\x94Z\xc3\x89\xdcp\xbb<\xba\x83\x85u\x93\x7f\x1d\x98|\x11\xc9\x04\xb1\x8e5%\x96\x0b\xd6\x1e\xb34\xd4\xc2\xee\xbd\xbf$\x99M\x9c\xc9\xe0\xb2\xb5\x0355\xf1\xef\x0fL)<8\x82\x18\x8eaH\xffR\x84\x97O\xac+\xba\x15X\x0f1\x0f\xd3\xcb\x85\x9f\xbeL\xa6\xc4\x8e\xd1t.\xd6\xf7\xd7\x1a\x0cG;\xbb{\xfb\x07\x87O\x99}KK_s\xc5\xa6\xadK\xc4\x95\xabq\x84\x00$\x0b5\xab=\x8c\x8bXw-I\x91\xe8\xc9p3\xb4\xb6\xb2\xd2\xb6\xc2\x94\xd7\xc4\xbb\x9aE\xfe<\x83'PPZ\xe5\xa5\x1f,\x08K\xa5@[\xd1\xcbxo\xcaLG\x154\xe8\x17)\xd1$\x80\x06\x11\xa7\x82%m\xc2\x82M\x9c@\xc6\xb2\xb8\x02\xed\xe7\xb55!zV\xed\xea\xc3Vm\xfb\x0d\x8fx\x1fO\xc2\x8e8\xea\x19\x02\xddw\xbc\xabi\xb2|\xf3\xaa\x9d\xa2f\x16\xb2Z\xaeN\xbepTGU\xd4\xd1\xe4\x08\xa1\x91`P\xfa\xf3\xf0:\n\xe3\xb9Yy..\xda`d'\x94\x8b\xecjP\\3\xdbw\xa1\xcd\xa3K\xbe\x02\x9e\x91FC\x08\xa8\x97Y\xe7L\xaf\xd4\xb6vF\x16\xed\xa7\xb1\x98A5\xdd\\\x12bi\xde\x9f\xe8\xd7\xe6\x9f\xf4\xdf\xeb\xb6\xc0\xb4\xb9\xb5\x19\xd1\x9aU4(\xbd92\xec~&qa\x96\xd7\xb0\x81%M\xc4\x03w\x7f#\x98\xda\xdb[\xf9)\x89q\xc3:\xb2vA\xb3\x01p?U\xc5\x0d\x83\x83jI\x91\xd2U\x11\x87q\x84U\xa4\xde*Y\xd9\x8e\x83\xd8\x8a\xf6Y\x98U>y\x02+z\x96\xaa(E\x90\xac\x7fj\xb6%\xb8\xe3\xfa8\xe7$\x7f\x19%\x19\xc9rq\xc6\xbcN\x93%\xed\xf2\x18\xa6\xaeZ\xb4Y\xa6\x9d\xfc\x12\xf4\xfeT\x1b\x97^\x82 \xca\x0b\x99I\xba\x84\x13y\x18\xc2\x9c\xfb\x87\xd5\x81\xd8\xe8\x1c\xfd\x86vLt\xb2\xabsa=\xfb:\x91Z\xc6\x98\xcc\xd6\xce\x0e\xba\xf2T\xcf%7\xba\xf2Y\x07\xa7\xc3V\x98T\xdc\x11V\xf7\xa4\xaa\xfb#\xae\x13\xd4\x8f\xda\xd6\xce.\xb6\n'\xf5\xb7\x86v\x8e\xca@\xfcl\xc5\xe4b\xc5\xe01!\xf7\xdd\x08\x7f\xa9P\x1b\x84W) \xe8\x96\xadvl\xc3nD\x14\xe1KC!ub\xf9]\xafe\xd3\nf&L\xe7\xd1\xb2\xe9\xc9Y\x1b.\xdd/E\x14\x19\x8d\xa5\xf5<\xf8\x02\x9f\xaa\x04\xa4\xdc\xc5\xea\xb0\xac\xbeR\xce{\xe6\x1d9\x06k\xe4\xedy{\x96\xaeMM\xc0\xe6\xab+\x86\x01\xe8\xdf\x13q^~+);\xd0\x19\xe0N\xac/a<\xa5|}J\xb2$\xba!,\xf7Z\x9ca\xae)z#D\xc8\x1ff\xf4n\x95\x92i\x18\xf89a\x9f\xacR\x92\x91\x18\xcbq\xf3\xffs\x9e\xec\x8de}{\x1e\x85~F2\xeb\xb2I.O\xac,\xf0#?\xc5\xb2\xe4\xd7\x82\xc4\x01~\xb7\xf4W\xab0\x9e[\x97\x1d\x92\x11#y\xe5\x82__ \xe1\x8c\xe5\xb9\xc8\x85'\xac\xcc\xe1\xe6}\xc3\xb4\xd3Z\xb6x\xd8 \x0f\x9d\xc1?\xcc\xd0w\xb7b\x1bS\xfb\x87\xcf\xf1\x978\xb9\x8d\x81\xa9.\xc0\xfa\x81\x13\xa8?X\x10f\xb0$9%\x80\x90KD\x03oHf\xac\x0cae\xfe\xf6\xfc\xdd[\\\x04\xde\x0f\xcaju\\\xc8\x17a\xe6\xe5\xfe\x9c\xae8~G'\x0f7:\xfe\xe0\xf1\xed\xf9;>\xa1\xf8Z\xfc\xbe\xbf7\x8b\x96@b\xd3\x15\xb3\x07^c\xb9.\x98[Ky'\xd7\xda\xea*\xa1\xad\xb5Z`,\xbctu[\x1fO\xb9\xf4\x18f+\xef\xd4Q\xf35\xc9\xc7-\xee\xea\xa5\xe4\xc5\x8a\x05k\x0f\xeae\xe5\x85\x8c\xec\x1cs\x1e\x95\x9f\x96\x1f\xf8B\x9e%hB\x8c1 \xaf\xb7\xb8\xaf\x08'\x9e\x90\xcb\x9eK\x93^\xfe\xa4d\xc6LR\x9f\xc6\x82\xf2\x1d\x17\xf8\x92\x0e\xab%-\xd6\x95ii\xe3Rc\x0b\xbb\\\x82b\x81W\x165\xf4@\xea\\\xd9\xbdx\xf4\n\x85\x8dvG\x8em\xdd~\xc9\xd4\xf8j\x8c+\x1f\xee\x1b\xd8\xf2\x1d\xc7cR\xdd&s\xaeM\xdc+\x99\xe3\xda\xfd\xfc^\xf8\x02G\x91\xdb\xfd=\xd8\\\xf6\xe6\xd3\xd9\x0f\xc5C\x1f\xf5\xb0cH\x1c\xdbb\xfda\xc6`\x92\xb3\xd4\x83\xe3ey\x82\xa9\x92\xd3>\xb0\xd1#\xfd\\\x0e\x15_\x0f\xdc%\x80\x19\xda\xb1\xbd\xb7\x7f\xa8\x06\xacO\xf8\xab\xa7CG+7\x08\x8dC\xef\x1f\xa3\xde\x10\x9f\xfe\xe1O\xcd_\xe5\xbel\x13\x89\x0bmD\xdb\xc1\x00\x1c\x81\xab\xf6}\x15\x11\xa7\x17\x81)\xce\xf1\xa5\xf0\xae\xfa\xb0\xb3Y\x90\x08\x05S\xb0Gz\xa5,_\x96\xf1}\x88!\xe1\xcc\xef\xfd\x8e`*\xed1\xd8J:\xb5`bH%\xeb\x19\xc1\xbck\x98\xe3\xa6@\xd5u-\xef\x1a\xe3V\x18%[\xb0\xbcj\x94EbHW\x8e\xa4\x9e;G|\x9c\x06\xe6\xb5_`\xb7\x90\xa7\x16\xf3\xb5\x88\x0e\xa0_\xbe\xaf\xee\xa0t\x1b\xe8\x18\x9bIi\xc6\xb2\xf64c\xd0\xb3i\xe0\xcb+\x14(\xd67W\xa7\x1f\x9f\xf6\xa9\xe0\xa1\x1a/\x1f\xd8\xea\xd4\xd0\xcd:\x91\xb7\xd0\xe6\xfayN\x96\xab\x1c\xf2\x04\xa6\x84\x1d\xf5E\xca\xbc\xd9\x84\xbdni`\xa0*\x03\xaa\xcdl\xf7\xa2^%:u\xbf\x1d\xc9\x0f\xf7\xb5H~4\xfc\xbf\x16\xc9K\x07\xa0^\x1c=\xdc\xd3\x82d\xf7\xa9F\x1a\x1d\xdb\x0d!u\xc1\x1e\xab\xa9M\xfaz]\xa3\xf2\xc1\x05f\xbd\xb2\x02\x0c\xe0\x0d\x99\xf7Z\x8f\xaa\xa6e\x81\xbf\xe8\x0b,\xca\x02\xe7\xfa\x027e\x81\x8f\xfa\x02\xcb\xb2\xc0\x0b}\x81yY\xe0g}\x81;8\x81)\x9cB\"\x92.\xd1\x99\xe5\xd9\x97~7e\x11\xbb\xc6h&\xa5\xb6W_\xe8\x8a\xd7\x9c\xc2\x18\x16\xf4/\xcb\xecd\xa7\xbc\x95\xdf\x1f\x9c\xaa\n\x03\x9b\x8f\x9a\x9ei)\"\xca\x1d:1\x98\x9a|\x03\xf3\xe0^)\x11\x8a\xae&\x11\xd3\xb1\x14\xf6\x1d\xaa\x7f\xe8h(\xb1\x1d\xc0)\xbe\x841\xaa\x81\\\xb8c:!\xac[k\xbf\x85\xa5O\xb14\x8caI\xcb\xd1JB{\x86&yc\x98c\x07\xb0\x9a\x13\x98\xc1i\x07c\x00\x12\x83_\xd1\xb8z\x0b?\xf9B\x96n\x11f\xb5x\x1e]\xe2\xd3\x0c\xf3#\x83\xad\xea\xd6\xba\xbe\xa3W\xe0g\x04\x06\xe3\xcerP\xb7\x8f\xd1L\xa1za\xcd\xc3\xf5k\xb6u\xf8\\\xbd\xb0\xf2\xd1c*\xd7\xc60\x92\xaf\x0ea\xb1Z\x996W\x99\xb8\xccu\x95b)f5C\xe7\xdc\xad\x94\xa3\xfa\x1a5\xdau\x90\xc4\xa1\xd5\xfebr\xd9r\xc3\xea\x02\x88\xb3d\xd47\xca\x86\xa8N\x91\x19\xae\xfe\xd7\xfc\x0d\xaa5]\xc0of.\xfb\xcc\xb6\xef\xbc\x1b\x96\x14\x1b7^u\x87\xb8\xc4a[n\xe6r\x8c\xf4\x89~sM\xff\xdb\xb8\xa6\xaf\x9e<\x01\xdf\xbev\x01\xab5\xa7(\xc9\xbc\xd7\xcci;\xf3\xfe\x02'0\xa2?\xce\xe1\x04v\xe9\x8f\x8fp\x02\x87\xf4\xc7\x0bZf\x9f\xfe\xfa\x19N`\x07K}\x86\x13\xd8\xc7b\x9f\xe8\xdb\xd1\xa1[\x93\xb70Q\xfc\xbaR09\xeeT\x85=n\xc3x\x9a\xdc\xd2!\xb1_\xde;\x0c2q\x82ZL8\x15\xef\xc7\x86\xcf3\x12a\x10e\xfaW\xfd\x14\xdf\x8dAL\x84m\x89\xd9^\x84\x99\xe5\xc8\xa6_Zq\xdb\x9c\x8b\xdb\xe6\xdf(n\xeb\xe2\xbc\\~b\x8f\xf6\xd5\xd3\x16\x03\x81\xd1S\x9eE\xcaN\xeb\x9cT\xda\xceI\xa5\xa6e\xa1e\xa0\xda=\x1aPBEx`\xb0\xb0\x96\xd9(w\xb5\xc7\x7fT\x901h\xd4\x83\xa44r\x1ak9\x9b \x89g\xe1\xbch)q\x9b\x86\xb9x[\x1f\"\x86\xa0g\x07r\xec\xd6T\xb1\xd0=wfym \xd1\xd8\xde\xdb\xd9Q\xa6\xa8\x9a\x91Z\x7f\xf4M\xeavH\x8d\xfb\xd4\x8b7\xe3>\xfd\xff\xc6\xb5\xa7\x8e\xeb\x8f_z\xe52j\x17\x15\xd6\x94%\xc3#\xc8\xb5\x860\xb9\xde\x10\xe6F\xcd\xd4\xa0\xb5NoDr\xeb\xb0\xea+\x0dUx\x8072I/\xb9\xf7\x94\x89\xe3\x01\xbd\x89\x00=\xa8\xde\xef\xef\x0d\x06\x07\xec\xfd\xfe\xde\xde\xce\x1e]I\xfc\xd7\x13`\xf2&z\xb7\xaby.*\x1c\x94\x95\x1d\xb2\xe7\xc3a\x95]J\x14\x1a\xee\x96\xa5v\x86\xb5\xcf\x87\xa3\x83\xf2\xd5p\xef\xa9\x03<\xbf\xd63\x18\x0e\x87\xbb\xc3\xe1\xd0a\x97\x04\xd3&T4\xbe\xba!\xcf\x02\x87\x9d6\xa11\x8a\xfe\x18\xc06\xc1\xb6 l\x9d`\xf9}\x07\x9e=\x83\xa1\xca\xbe\x8b\x8b\"\xbf\xbd\xfd\x9d\xd1\x80~5\x1c\x8cv\x10&FM\xaf\xce\xac\xb6I\xf5k\xd1\x9a\xeeS\xad)\xf8\x0dw6\xdd~bO\xfc\xad\xdf\xfe\xe5\x92\xfe?\xd8zz\xf9\xfb\xd0\xdd\x19>8G\xdbs\xc5\xe0\x8dR\xc5\xdb\xff\xf9/\xb6}:\xfe:\xf1\xb7f\xbc\xf0\xe1\xc3\xfd\xa4\xfc\xe98\xdb\xcaW,\xe7\xec\xeep_+\xb4n7\xc5R\xc4\xa5|\x88\x89\x1d\xf0\x14\xcc\x01\xe3\xd0w\xf6PO\x92{\x01\x1f\xf1\xf3\xdc\x1e\xe0\xb2\x88Dx.F\xabc|\xab\xaf\xcc\x946\x9f\x0c/\xeb\xb9\xaf\xe0\x140\x80\xea\x9b8\xb7\xf3\xd2D\xcf\x85\xe1>\xa5h\x1a\xaf\x86\xf4\xd5\x00\xe3\xb4\x16v\x8cD\x8f\x01\xcc+\n\xb8\xc9\x93\xe3g\xd6\xe5v\x1d8S\xe9\xcd\xbc\xfe\xaai\x02B/\xeb\x895\x06\xeb\x89\xbf\\\x1diB#[\xc7\xf86\xca\xb5/\x9f\xe1\xcb\xb9\xf6\xe5\x0f\xd6\x0f\xf4\xe5\xafE\x92\x1f5b\xd15\xa7\xed\xc6\x88S\x16\xb2\x11\xb6\xac-\xe0V\xba=\x84x\x93K\x06a\x86\x1eK\x9a\xc1\x85\xe1:\xfa\xe0\xd6dVR2Lq\x0c\xe6z#c\xb4`\x149H\xf8W\x06\xe6\xbeKum\x0coH/2\x89/y\xe4\x1bm\x19]\x0c\x91\xfa<95Z\xdb\xc5l\xc0=\xd2\xe9q\xa0[\x1368\x8e@.y\x04\xf3V \x11\xff\xb4q<\nSW~\xbe5\xcd\xa9\xeb\xdd\\\xf8xN\xd3\x9fE\xcc\"\x1d\xbek\xcfgWJ\x1e\x84b\xd4\xfa\xe5\x17\xcb\x81c\x18p\xcd\x16)\xe3,\x86.X\x7f\x1eZ\x8e\n\x99\x9f\xfc(\x9c\x9e\xc5y\x98\xdf\xbddf(>}\x81x3\x99\x92\x8fI\x88j\xea\xc2e\x9ajZ\x17\x96\x0eI/A\xb4\xd4\xb5'\x86\x9ee\xae\x9c\x18\x08\xbb\xc5\x06\xff\xd7\x1c\x03\x84w\xb6\xb1\x12I\xd80\"\x83\xa8v\xea\xc2\x8d\x0e\x19\xb51Ak\xc9\xd8\xa5\xa0\xd6U\xe0\xcbS)\xc1;\x8c\xf5\xf2\x98\xae\x1e\x19E\xeb\x0dn\x8f1K\xfb\xeai\xcbD\xeb{\x87Z\xd1\xfa\x81Z \x13\xad\x0fGj-\x8f\x93\xad\xbb\x92\xf4\xdc ^_t\x89\xd7o\xba\xc4\xeb\xcb.\xf1\xfa\xbcK\xbc~\x07'L\xb6\x8d\x923.\xe3f\n\x13!A7\x8a\xbc\xcd\xa2\xf5\xc5\xba\xf2\xf8+8\x81kI\xd8G\xbf\xb9\xae \xff~\xd7\xa5Q\xaaD\xechY)\x89\xd8\xd1+\xd3f\x82v\x14\x91\xdfA]\xd0~\x87\x82\xf6S\xb8\x831\xc4\x0eJ\xd4\xe9\xb1\x8c\xc2\xa5\x00\x8fp!&G\xc9\xb9Q\xa0X\x98\x04\x8aw\x8c\xc4\xb8c\xe2@!2\xfc\xec\xb8\x80\xb2\xc2\x0d\x9ee,\xe4\x02\xc3\x15\x06\x08\x10\x02y\xf1\xd6\xbe\xe2\"G\xa301\xf5\x02\xa6\x9eJ\xdc\xffi\xc1\xa2Y\xf5\xa5*\xb3\xb8\xeak\xa0\xaa\xc4\xf8\x06Uw\"\xdd\xa0\xdb\x96J\x00\x15\x9a}hP=\xdc\xf0\xa8\x01\xdc\xcc&\xc4\x1c\"\xda\x85W``KtM0R\xdf<\xf22*\x95\xed\x82\x85\x11\x15~\xec?\x9c\xa0\xe1\x0coH\n\xba\xec\xbb%\xf9\xe4\xa0U\xcd\x0f\x0e\x8fF\xf6\xactu?\xde.}\"\x9e\x19\x03\xfe\xaegP\xa7\xf1X\x8b\x99\xea3\xb7\x0b\xc7\x85\xd4N\xbd\x8f\xb0 \xa9\xf7\x1a~\x84\xa4=\x02\x83\xe0o,\x0b&\xe4\xd2\xa6c0\x02)gF\x03\n\x05}\x7f\x0f9w\x88\xa3_K\xd9\xe0\xeb\xc3u0 #\xc6O\xae\xb15\xddG\x15\x8e\xba\xeaU\xdc\xc3\xfa$_\x84\x95\xd1\xfa\x83,on\x9a\x19\xd0\xfab:\x0c\xa3\xb4\x1aq\xd5\xc0\x05r\xe3G\x8em\xb1\xc7U\xf5F# \xcd\xb1Y\xc9\xdc\x11\x93\xb1[\x1d\xaf\xf6\x9d\xa4\x905Q\xe3S\xdd\xe6\xfc\xfe\xa2\xc6^\x9e\xb37\"\x19E\xa3\x01\x91xb\xacMT\xb1\x08\xb3SV\x160\xf1\xf0j\xb9\xd0\x84\xe7C\x91\xd89\xf6\xb2\x15 \xceIDh/2\xcd#\xbc\xfb\xb7,i\x15\xf7\x89\xa3\xcc\xf4\xad. \x8e\xb8x\xa7}\xbb\xa0\x0cmi \\\xd7\x1e\xd25\xa8XH\xff\xfe\x80\xb1lb\x9d\xa5\x80|}H\xc3\xb1\xc6\xdeF\\\x0f\x18\xd5\xd3\xd4l\xeeB\xd8\xf7x\x85j0\xe2\xd4\xb8\xf5\xd3\xd8\xb6p\x95\xde\xa6\xfejE\xd21\x04I\x11M\xe3\x1fr\x98\x13\x16\x17\xd4r\xdc\xa6\x9fa\xb3 \xad\x17\x99@dt{\x0c\xfe\xa1\x86\xf4\xcd\x86[\"\xe3\xf2\xcdGiZ\x7f\x15\xaa\x9bO0\xae\xcd\x944\xcc\xf9\xae\xbe\xc9v\xbc\x81g!\x8d\x9fW\x0c\xdan\x17\x13f\xe6\xfe\x0f\x9d.\xeeU\x1d\x15:\xc1\xa7h\xe3\xcf\x08\x91J\xde\x8eqCE\x02l?\xe6\"\xf7\x0d\xc3\x88\x1f-R\x1c\x1d\xa8RBLy\xd1\xe4\xd1d*\xa0\xa4\x06\x18\xda\x96\"\xb2\x887M\x8e*\xa5\xfcb\xd2\xcaQ\xea\xa1\xa7\x0f\xcf$\x8f\xa6\x1f\xaco\xfa\xc4V\x16\xae\xbdL\x03[\x03\x03\xed\xba\"\x0d[s\xa9tx?\xd6\xfc\xb2\xdb\xcc\x7f\xae\x8b\xf9E\x92D2\xb3\xd9\xab}I\x90\xac\xda\xa7\x0b\xab\x1bu1\x84\xdcv[uZ\xf2+k\x80\xfa\x99-\x9f\xb23\xa6\xf1\xdc\x95\xa2\xe6\xd4\x0b\xab\xd1s4\x87\x13\xba\xb4\xa3\xeb1\xda\xe8P\xb4\x8a\xe4Qj\xc7\x8ekN\xdb_\x1e\x0d\xa2\xdaZ\x89\x1a\xe1\xfe\xd0h\xcf\x9a\x93\xdcb\x91j\xe8\x9cg\xe2\xae\xb9I\xad\xe7A@\xb2\x8c\x9e\x7f\x18\xab\xb9X\xd19#S\xd36\xb5\x90d\xe1u3\x86\x8c\x99\x87\x95\x0e)kn\xe4~Vb\x0dw\x84\xb5\xac\xc4\x1e\xd7\xa4\xbab\xbe\xa5\xc9N\xb7a\x83\xcb\x81\xce\x88,\xb6w\xf6v\xb5\x8a\x91}Uz[\xf0\xe2\xaa\xe7\x02J\x9f\xecCu\xafD\xac\xd1]u\xe4L\xf1\xaf\x96\x9ei\\\xadV\x18\xb0\xb3\x0eS\xb4L\x9b\x93\xfcc\x92Dd\xaa\xe6\x87Xh\xe4\x1a7%2)\x1f\x97'\xeb\xb2\xc1\x1d\x9cy\x98\xde\xea\x13 \x928\x08#r\x91\xfaq\xe6\xb3\xd2O\x9e\xc0\x0d0'\xff\xe1h\xc72YOP\xeem\xa2l\xdb8\xccY6\xcfq;\xe3\xc5<]\xc34\xbf+i\xdb\x8ce\x18\xc3\xbc\x18\xecX\xae}\xa5\x88\xa54\x82\xabu\x1a\xd98\xa9\x9a\x81S\xb0g(\xb5\x0d\x08%\x19\xcd\x9f9.\xdc\xdaH\xfe\x95\xdf\x9e\x18\xc3\xb0?\xa8t\xe6z\xc0 \xfc(\xba\xf6\x83/\xff\xbb \x05\xf1R\x92\x91\\\x11{<\x16\"\xf5\x9a\xe3$\x0fgw\xcf\xa3H\xad\xbd\x1a\xc8\xa5nI\xdd5\xe3\xff1\x1f\xe7j\x98\xd2\x9a\xb2\x9d6\xb8\xf2\x95\xebj\xfa\xd7\xd8\x07\xa2\x19\xcd\xba=i[\xd5R%\x1b\x83v\xdb\xa8\xeb6\xe35\xe2]-\x93\"\xce1\x15\x06lA.\xdf\xb7V{\xd5F\xdej\xe1\xa2\x88G\xeb\xab\x96\xc5\xfe\x18\x8ev-\xc4\x9c\xe2\xb9C\x7ffI\x9a\xdb\xd7\x8e\x0b\xab\xcd\xcdz%Ud\xba*\xaca\xce\xa3\x1a6\xd7\x0b\x17tR\x04:\x9b\xc4\x06\x0fQ\x1f\xe7\xe8jE\xe2i\x18\xcf_\xf2\xd9\xcb\x9a\x0c\x1c\xba\x156\x0b\x96\xb3_xQ2\xbfHVo\xc9\x0d\x89>a\x88'c\xa0\xa3\x1b\x1e\xbd\xd6\x90\x9e(\xf4\xae\x82\"MI\x9cs\xc6\x0c\xf3\x89c\x9e\x03?\xc8E\x1b?3\x16\x0b\x8f\xe4\x88\x8d\xa2\x11g\xcba\n\x03\x8be\x03,VS?',\xb8WD\x97\xd4{\x7fI\xe8\xaa\x14\x0c\\\x1e.\x89\x9dt\x19\xab\x00\x87F\xe6\xadH:K\xd2\xe5g\xac\xf7\xcd\xec=\xa1\x84\x85\x9f\xde\xd9\xa1\x8bF\x0d\xcd\x85\xcct\xa7 *n\xa5F\xcf\xe2)\x8b\x0c\xae\xe7>{D\xbe#\nf \xf1\xaf\xf4\xaf\xedO\x82K\x97\xef\xc2\xe2:\n\x03\x11\xb8\xc6V}>\xfe\xd4\xfc\x95\xd8\xb2\xdf\x19D*R\x9c\x93\\\x1a\x1b\x9f\x90\xac\x03\x8d\xf1\xad8oC\x87\xc2-4I\xfb\xe0\xc4v\xb4\x14z)\x89\x88\x9f\x11\xbb\x89\xa0\x1c\x03\xd6b_\xb6!\xa4Z\x9d\xba\x99\xee@v]\xa1\x86\xf8\xd2\xea&\xb6\xa1\x02i$\x16$\xcf\xd1\x89>M\xc6N\x88\xc2-E\\\xd0\x93\xe2\xd5R\xa1k\xd6\xf3\xa7S\x8a\x9c\xc3x~\x91\xd8w\x8a8\xef\xb6M\xcc\xc9\xa3\x0b\x95h\xf1\xfe\x1e\x16\xc6(Y\xb3\x0e\xb7:\xa1\x88\xbb\x93\x8f\x1c=\x86!b\xf0\xf6\x95HKO\xd7\xc2]9\xad\xba\xd4v\xdaN\x19{\xc3\xa8<}\xf3\xe2\xe4\xd0\x04\xb5\x03-\xfd\x08\xb9|\xd4\xd7\xd6tWG\x8d\x82\xa4\xb3\x06/`\\\xed,2V}\x81^Sn\x8cL\x19\xee\xcb\x9a\xeb\xb4\xcc\x17\xd3\xb2`\x97t,7^\xbd\xaaf\x05m\xfb\x84\xe3\xb9\xcf\x1c\xb5\x97\xe75\xd1\xdbP\xf2\x16\xc3\xec\x05m3\x8c\xe7\xbcQFFb\xa0\x81\x9c\x0b\xe8PZ\xe0]\xb1C\x03\x8b\xbfGm\x08\x17Ji^\x9c`N\xbc!\xd2\x98\xdaQ\xb5\x8ed\x16\x15\xd9\xe2\x85\x02\xd5[\x85\x19\x8a)G\xceT\xca\xcd\xe5\x88/\xf5\xf3g\x16\xb1\x88\x8b\x94L\xc3\xbe\xe5\xb4\xe2>\xbd\xb6\xb0I^\xb0\xfe\x08@\x9f\xe7\xa9\x9f\x93\xf9\xddz}9\xa0}\xd1gOQ\x00\\\x92T\x87\xf8\xc95\xdd:\xbe\xf2Es\xda\xc5GO\xe9G7\xfa\x91\xb5M\x9a\x9f\xf9\xab\x1e\xa9T\x03[\xb3\xe6\\N\x97\xf0[\x8f\xd5\xf5\xd2\x8f\x7f\xc8\xc5\xb2\x06?\xc6&@\x1cP\x10\xc6\xe0c\xe8E\xf25\x87\xdb\x05II\xc1\x87\xe2c\x08\x85\x1c\xaeI\x18\xcf\xc5\xf6\xf4\xe8\xb8\xa6%5\x80\xfds\x19n2\xb2>z\x81\xd6\x19>]C\xce\xb0\x11\xdb{C\xc7l\xb4\xc3q\xc0\x01\x9d!\xbd*\xe9\xf7\x07\x17,\xbf\xa1B\x02FytP\x06r\x13]s\xeaxU\x9c\x8c\x87G\xa84\xc5\xd3.O9\xcc~@\xc1\xf2T\x17\x1f\x07_\x8d\x86\xea\xab\xd0\x14h\xa2\xd4b\xa0\xcd_\x861!\xe4\xf7\xa5\xf6\xa4\xd3[^\xc8tUSWz=@\xd7\x8e\x95\xf5\x0b\xdd\x1d%U|\xaf$\xe5Q\xcf\xe4\xd7,\xe2i\xa9\xa0\xa9\xcc*O\xab1\x8e\x0d]]\xcf\x83\xe8\xbb*D\xc4/\xd9;\xb1\x1b\x18\xd2\xac\x9d@hW\xfa\xae\xd6)\xe3\xfd\x97\xc3JR\xe8H\x86\x00c\xd4\x03U\xddk\x9d\xc3\x7f\xc4\xfc\xad\xd1\xf7\xc7oG\xb3\xd4\x93\xb3\x97J\xc4O}S&\xfc\xd6 \xd0\x9a^Bgx\xfe=\xc6( T\x0d\x86\xe6\xaa\x84\x94\x0bTu\xf2T;\xb6\x9f:.L\xaci\x98\xad\xe8\x01\xf2\x12=\xa9-\x17\xac\xab\xdcOylVz\x1b\xfbyx\xc3\xfc+1\x96c\xf6\x8a\xcd\xf7\xc7\x94\xd0gd\xca\x9eRT\xee\xcf\xd1\x08\xee\xa5\xa94B\x1f\xca\xdd%j\xd8p\xdf\x18K\xdb\x10\x1d\xad4\xfb\xd3ft\x03\\\xd4\xa7\xd8i\x96\x01\x8e{\xe3Y\x0c\x00\xec`\xf0y \x8f=D\xc5\xecX\xfa&\x9e\xf8\x9a\xdc!\x0d\xe8\x08Y\x1d\xe6B\xf5\xd4Y\x87S\xdd\xc31l\xb08\x8e1\xb7\xde\xfb\xa9i\xbc(i\x84\xbd&\"\x80\x13\xa0\xdcU\xd8\xb0\x9aR\xf6\x1bZY\x89\xc8\x9d\x1a\xc4\x81<\xb1\xbe\xfc\x9f\x9acN\xedL\x96\\\xd5\xa7l\xc5\xfa\xf6J\x9c\xea=$L\xcdAmh&\\H \xd4\xd5\xda,\xc9t\xd5\xc4\xabw\x05}\xa1\xea\x8fl\x87\xd9\xf8a\x88\xcc:7#M\x08\xafM~r\x02h\xadf\x9e\x95\xc6\x8c\xb4r\xa7Y\x9e\xac\xa4I\xe9\x00\xda\xfa\x80P\xeaGH(\xcfZ@\xc1\xb0\xea\x0bD\xbd\xbc\xc2\xda\xa3\x13\xa6\x80\xee\xbd\xb8:\xc1\xb1\"i\x86\x99\xc4\xbb\xd7N\x98}d\x85\x19\xdaj\xb4\xd3\xd6\x8c\xfc\xadv\xbf\xd4J\xf7\x96\x9a\xd6\xa6\xa7\x07\xae\x84z\x0c\x0d\x96\xd1\x0c\xf1\x0f\xd3\x84k\xa3\xd3\xeb\x94\x15\x95\xd0\x9aebB\x146\x89//\xb5\x12\xd1j_;.dU\xe7\x98kc\xe6\xf9\xc5|I\xe2\xfce\xe4g\xbd\x1dNd\xb8\xa8\xbe'5\x1f.\x84\x8d!b\xda\x0d\x8fn\x10\x93[\xf5\x18J\x99\xec\xbf\xfc\xd0\xa9\xdda\"\x16\xf9A\x9d\x98\x06\x8c\xa6.\x8f3E&\x18\xfbR>f<\x9e\x8b\x98\xa4\x19\x908H\xa6a<\xafgD\xc8\x17$\xc6\x8d\x87\xc9\xd2\xca\xc3\x0fD\xe0\x17\x1fx\x03\x06e\xb88c\xb9\xc1@/\xd57\xffF\x18\x19\x18\xcc\x04\xf4S\x13\xb5\x88\x85\xc0\x0cCC\x8c\x9b\x1f\x84}n}\xdc<\x9b\xa6\x0f\xac\xa2\x16gp\xbd\x03\x1d\xae\xdb\x17\x0c\xdb=y\x82LO\xb9\x1e\xe4w\xcdC\xbe\x85P\xc3\xd0>\xde\xf5]N\xde\xf2l\xdd1FWA\xcf\xf3\xea1\x1cWv\xcb\xeaV\xfd!\x99\xcd2\x92\xff@\x97@R\xe4\x90\xcc\xe0:)\xe2if\x9a]\xb5MZ9l\x82\x8d\xb6\xfd\x03\xc7\xd8\x0e\xdbs\xfd\xdb\xc9\xeb\x99\xd1\x99!juO!\xd5@\nuE\x80\xae\x08n\xe0\xb1\xee1\x05\xb3\xbe'\xad\x88)oCD\xb4\x00\xcf|\xd8\xbaU4J\xe2\xda\xec\x8f\xf5\xde,\xdd\x04\xa1\xb84\x9f#@\xcb\xe8\x0e\xf7\xf7\xcc\xed\xde*\xf2\xd9a\xdb\xd4od^\x98\x9dq\xbca\xc7\x8ei\x13 \xd4bIh\x83\x1d\n\xac+%\xee\xd1\xed$\x90\xce\xd3\x01\xdc\xc3\x82M\x9c\xde\xe2\x10\xf8\xe1\x8a\xd3\x81\xc7V\xea8\xdem\x1a\xe63/HX\xa7\xdcL\x8d\xe1\x98\x11\x91\x84rZ$\xb9)\x1bUJi\x08\xfag\xf3\x04\x86t`\x18\xbax\xb4\xb7\x07O \x9f\xa4\x1a=\xd7Z#\xd4$^\x85r\xdd<;\xa1\xbc\x95\x89jy^e\x96\xf1#\x0c\xbfB\xf8\xce\x82\xc8O\xe7\x842\xa8~\x0cK\xffk\xb8,\x96\x90\xa1;\xc7\xe0+\xe5\xb3}9\xcd\xf5p\xdfAWNJ6i)\x9e\x12a\xdf\xf7\x1c\xd4\xa2u%J'\x8b\x9c;JH\xcb\xf5\xdb\xb4\x0f\x92\xd6\xdasHe\xbc0\xfb)$,\xd0H\xf31\x9d\x88\xfb{ \x06\x14/\xf7\xb4\"0\x9b\xbd\xd5\xb8\xd6W\x8c\x9e\xa5\x13r\x80\xb4\x9c\xdb\xa1\xc0\xa9\xcd\xb2'\x9a\xedU[\xbe\x1b\xc3\xa3#\xa7\x14\x0d\x1bOB\x14\x88Z~\x16\x84\xa1\xa5\x17\x8b\xb2\x12\x91\x9f\x87\xf1\xb0\xb5\xc8u\x18\xfb\xe9\x9d\xa1\x08H\x12(\xfdq\xc2*A2\xaf\xad\x95\"\x9fm\xb5\x96`\x84vg/^\xdb\xc41\x02\x1c\xaa\xe6\x82l\xd4\xde\x9f \xdb\xea(\x91\xcf\x86\xfb\x11\xe9*\xb3\xd5R\x08\xaa~\x8f\xe0\xc7v\x08.\xc8\xd7\xeeZbx\xf6\xec\x19\x18\xac\xb6\xf9t\xfa\x19\xd9\xdf\xed\xae\xea\xb7.@\n\xa32cE\xa8\xedpzO\x0cp&\xcc\xc6\x1d\x95;\xf5\xe8f.\xcf\x8f\xd6\xf8T\x95\xbe\xeb\xd1\xd7M\x1b\xc7\"\xf6\x16\xd1F\xc6\xe7riz\xfc\xb9\xe2\x10L{5\xba\x94\x98*\x83\xc6\xa1B\x01\xa4\xa4\x189\xc0\xb64\xd3h\x10\xb7\xc4\x94;L\x99\xf0\x1cOn\xe49\xe1\x99,\x91;\xc575\x11\x1d=\xdd\xb7\xca'\x87 b\xa1I\xcf\x1cV\xe1f\xecB\x98\xbd\xf7\xdf\xdb\xb1S\x16K\xf8\xe1\\\xca\xb7\xb6`\xe8\x08\x91\x80(T\xbe\xdcDZ?\xa6\x07 \xe9p\x84@\xcb\x95V8\x00\x8f\xfe$7\xdd\\\x19@\xa2\x8c`m1\xa3\xd7\xcc\xcdm\xf4k\xafk\xf9A\x8bH\x8c\xd9\xdd#\xcf>K\x93%\xe5\x15S\x07\x15\xc35\xae\xac\xc6J\xe5\x15\xfb\xb45\x841\xcc\x95\x15eX!Z\xe1\x13\xaf8\x87'H\xeb\xb8\x069\x83\xe9\xd0\xad\xc4\x17\x92\xf6\x97\xc7\xd9\xc5\x08\xa4\xa7\xadE*\xf5\x04\xe7Z\xb5\x85#?\xcb\xdf\x18>\xc0\xb1O\xf2\xcb\xb6\xd1ky\x97\x1b?* {\xc1\xae0\x08Q\xce\x843Z\xfd\xe8q\x15\xfe\x06d\x12\xb2\xf0l\x86\xd8o\x85\xb4p\xf5%2\x89\n\xd6O\xb1\x14\\\x95\x89\x14\xd8\x89\xc6\xf8\xef\xb4\x8a\xc6\x99*h\x14\xe9!~\xb8q\xa1\x15>\xe0gY\xfd\xd1\x96\xf4\xcc(/@\xb2\xb6\xa2\xd8GL\x18X\xddw\xee+\x9fEO-`\x9bEQ\xe5\x7fc\xfc\xab\xd9o\x8dG\x8a`\xd6\xd4Q\xde\x8dai\x92FX\x00{\xe2\xa5\xc4\x9f~~\x13\xe7\xc3\xfd\x17gv\x0e?\xea\xdc\x18\xf5\xfb\xdc\xa8E\x16\xce\x8e\xa6A#M\x87j\x98#\x08\xe1\x18\x8a#\x0877\xf5L\x19\xf0\xc6px\xa1\x83\xfdG\xad4OQ\x1cp<\x1c\xc2\x16\x04\xadr\x1dQS\xf9!]9\xb4\x9b\xa1\xe3\xb2\xcfa\x93\x03(+\xe7-\xa0\x001V\xc9\x91\xec\x16K\"\xc1j\x0ca\xeb\x84\xf7\xc6\xe5P0 g3lb\xd8\x84\x0c\x9eAQ\x9e$\x05lA\xe60\x7f`\x84\xda3d\xe6\xc2\xad\xad\xb6!\x97\xc4\xf3\x8c\x07\x0b\\1\x1ep\x05\xc7\x90\x1d\xc1\xaa\x0d\xe8P\x03[{>\x1cCz\x04\x9b\x9b~\x1b\xfa\xa0\xc7\x84\x9c\xf7\xa2\xb8\xce\xf2\xd4\xa6|\x82\xef\x02O\x8d\xa1_X8H\xa4\xd6\x8a\x8a\xa0\xf0\xf5e\xc9\x84\xee4f\xba\xdb\x03\xe9\x89\xcaz-\x9a\xeb\x8eE\xc3+{a\xbf\xa6\x1bJ^\x16\x0e\xaa\xe4\x9a&@\xa6\x96\xae\xfa\xb6d6\x18(\xeb\x94smM.]Y\x14V\xb2\xf2L\"\x963\x87K&8\"r\x02\x94\xb8C\xa2\xafK\xa8\x98\xaf;\xe8\xdb~\x83\xae\xc1\xa6W\xc5g\xfd*~a\xff\xb6~\xa7\xbf\xf6\xad\xbb\x97V\xa3\x92W\x96\xde\xb6|\xd6\xa4\xadF\xa4\xa0\x15\x1b\xb6\x9d\xd3\xd3i\x84i!\x1c\xbe \x19+!\xcd\x9f\xcf\xf9M\xcaO\xc3!\x8f\xdaL\xd1\xc6\xde\xbe\x0b!\x9b\xf6\xc4)\x7f\x9a4yF\x94\xfc\xf0\xad\x0b\xfe\xbc\x8d\x9f\xad\xb3\x10t\xd8q\x8d\xc5\x84SH\x91\x07yq\x97\x13\x91\xf1\x9dbU\xf5!WQ\xe5u\x9b\xae\xb6~\xbdl\xeb\x17\x05\xf3;?_x\xcb0.i\xc6\x1e\"[:\x9f\xe8\x1aq\x04 \x8an\xdb\xd0&\xa5\xbd]\xb4\xafu1F\x07\x99$-\xc9\xe5\x03\x11,\xc1X\x82\x9e\xe0\x11e\xa5w\x9e\xc2)\xec\xc2\x98\xdd\x8dv\xe0\x14v\xf8\xdd\xf0\xe9\x10Na\x04c\x93\xe8\x05iE\xd8\x84\x19\x1c\xa3\xb0O\xc8\xeffm4D\x9f\x04\xb8\x11\x1c\xc3ptX\x12rQ\x8b^ \x04\x9da.\xd2'-.m\x8er\x19\xc3\xa7#x\xc2\x88X2\xa1\x83\x1b^:L8@\xd9\x17{g\x08O r\xe0\xf8\x18\xf6\xe1\x1e\xf6w\xe0 %^\x9f\x89\x0cb\xd8\xdd\xec;t\xd7`\xf6).\xb9\x7f<3>\xde\x8d.]e(!\xf6\xbe\xfe\xcc\x97F4\xdc+G4\x1c\xc1=\xd8bL\xf2\x10}:\xc4\xd1`\xf7\x80\x7fw\xcc\x13\x96\xdd\xdf#9+%x\xfb^\xe3\xdf}\xfc\xf8\x8b\xf2ng\x0dh\xd4\x9f\x15\x06\x08\x1d*\x10\x92@\xe6\xd7AV8\"\xef\x1b\xad\x89\x82\x8c\xa5\x92\x1bI`\xd2\x0eQO\x12\x97\xc6X\x94/\xc2\xcfi\xdd;.\xee\xe4!\xc5s\x81\xdc\x9e\x1d\x94i\xe4\\H\x19>\x0f\x98\x18u\x00O\x00\xf3\xc5\xdd\xb3I\xe4\xdc\x0c\xcb%w\x0f<\x95\x1cer\xc4w\x18\x1bg\xf3\x04fM\x8co\xc2\xd2\xdd\x14\xc9M\x19\xa7\xa9M|\x8a\x8aq\x8a^\xbe\x94$\x9f&\x1d\x1d\xb71>\xe7b\x10\x9d\xde\x02$\xdd\x85\xa5\xc9V&\xaeT\xaf\x0c\x04(\xc3\xa2\xa4\xa8=\xa4\xc7\xeb\xe6I\x9f\xce\xf0\xe3&u\x99j\xeeK\x07\x11\x157\x81l7\x8eO\xf9.\xf7\xb8b\xe9\x84\x1e\x0e\xb9w\x1e%\xb7\xe5\x93\xf6y\xd8$U\x84N\x82\x12V\x0dC\xc0\xba\x95y\xa8\xba\xb37\x1b\x1e8\x90{o\xde\x9f\x7f<{yq\xf5\xee\xf9\xffw\xf5\xe2o\x17g\xe7t=\x0dL\xb2\xb8\x139\x89\x0e1\x98\x05\xe9\x9fwy\xf6\x18\x83\xdf\x0b\xdf\x1a\xc5di\xd8a\xa2R\xb3J2\x9fie)\xbd\x00\xb0\xe5\x18N\x92\x1e\x01\x13\xc4\xc5{\xb5\xdb\x94\x1f\x89K\x8f;\x1e\\\xd8\x1dqZi\x96$\xb6c\x14\x87\x12\xca\x901K\xd3'O\x84'x\xf9\xcc\x1eb\xc2\xbcJ\xa9\xd8\\\xaa\x9d\xd9\x0d\xf8\x1864\xb2\x93\xfa\xbab\xf1u\xbe\xbc\xf3\xbf\x96\x91\xa3|\x1b\x05\xcb\xab$\x89\xce\xc3\xdf\xe8t\x1e\x0e\x9fb\xf2\xa1+\xeea\xd3\xb9\xe2\xb5\x13[sJT=\xbf\xb8`\xbb\x87\x1f\x8cT\x7fd\xf3\xf0EZ\x0b\xcc\x16!\xb5\xec Y\xeb\xa3v]\xd1\x91k\xcb\xb8\x06\xfb\xc9st\xf5\xa7\x0d\xb1_\x18\x1cJ+!\x13\xdetY\xa9Xa_hmM\x98\xe1K\xdd\xd5\xad\xcd\xccAV\xec16\x08\x02ZGc\xdf\xd43\xd0\xc9\xb5\xd5\\j\xb5\xd0B\x0c\x933\x0c\xd2\"\xd5\xa5\xbc\x07\x99\xc4\x97FvK\xc8\xa5j\xc7\x83\xad\xcb\xb3\x0f\xdcV\xdc\x84\xee\xcc\xbd0\x13\xe7>7F1\xb3\x812\n\xf7\xff\xa0\xf9\xa3\x97\xcf\x8c\xb9Q\x13\xce\x19_\xe1 \xdf\xb1\x16\xa1Z\xb7is\x91J\xce\x1e'\xb0p\xa1F\xe9I\xc7\xe7\xc6\xa0\xfe.\xbb\xf5W\xc3\xfd\xb6x\x9d\xa0\x06\x0fh\xd3\x13\x11\xad\x9eH6\xd7\xe4=\xc9(\x89]\x99\x0e/\x8b(\x0fW\x11\xa1\x10\x1c\xeeo]\x87\xb9\xf6X\xac)\x1a\x06Gh\xbeK\x8e\xd8\xf2\x1b9p#\xe2\x9f\xba\x98\xb4R\xc7\x7f e\x82\x1cB\x04\x04\x10\xeb`\xd9\x19}W\xb0\xec~#XvF\x8f\x02\xcbn\x03,;\x8e[=\xa2`b\x7ftZ\xb85\xa0\xb5\xbf\xfb]\xa1u\xf8\x8d\xd0\xda\xdf}\x14\xb4\x0e\x1b\xd0:\xd0Ck_y\x9d\xe8\xda\xf9\x83F0\xcc\xe6LX}a\xfc\x16x&\x8f\xa7\xf2(\xb1\xfa\xd5\x8b~S\xb1Z\x890\x90\x90\x1f\xa2\x19\x1e.\xba>M\xa0\xd9(\x96>>\xa1\xbd\xe5w\x9d\x1f\xe3\xeac \xa4\x89\xe4\xcc%\x19(\x1b\xa5\x1b\xd0\x83\xee\x14\x17\xef\xc5\xc7j1\x9b\x9c\xac\xa0\x0f\xb5\n\xbd(Vq\xf1\xc6_\xae\xd3x\x1b\x9d+.^\xef\xf3u\xeam\xa5\x8e\xa1\x1f\x85,.\xde\xfe\x87u\xda\xef\xb4\x1d\x86\xaa\xe2\xf3u*n\xa1\xc6\xa1\x17E\x0e=\xa9rX\x872\x87j4\x17\xfdF\xd3I\xac\x03\x94v\xd1Z\xc6\xfa3\x8b\x0eUz+\x8e\xb51\x14\xd4\x8b0w\xc4M\xb0\xac\xbef\xd3\xa0\xa5\xc9\x1eD\x0c\x12\x1c\xac)\x0cI\x1d\xa9\x93_\x0b?j\x8f\x1f\x01ZiC\x87lA:\x0c\x85\x8df\xeb\xc1\xc3\xcf\x80\xfb{\x8e,KY\x88\xde/\\\x19E\x18g+L+\xd6\xefd2)F\x98\xffRC\xca\xdf\xdaqq>=\xe3f\xd3%]Q\xba\xf3 \x8e\xe4\xfe\x92\xde\xd2\xcf\x83\x85\xbd\xed\xfd>z\xd8\x9e;\xde\xdf\x930\xb6-\xb0Dx\xb0\xb22\x9e\xec\x89\xa5P\xf7<\x0f,\xc7q\xc1:\xe6\xf4\x06\xae+]6\xf4:\\\x0c\xf2\xa4N\xa3\xf6\xef?\xd5*\x8fW;YU\xcfmf{\x8e\xda\x11\x0e\x90\xb1Z.-\xed\xb6\x94\x17\xcc\xd6,i\x9c\xa8\xb9\xf0u\xa7'pY\xef\xfd=\np\x06,\xd5\x9cr4\xeb)>\xee\x8f\x9e\xd2G\x80\xf6\xd1\xa6\xf1\xa6\xf0\x8c\xf7'\xa7\xbfZ\xdd\x84\xaa\xf2\x9d.\x04Je\xe6RH\x07\xb8\x10\x97\xbf\xd2\xf2WR\xfe\xaa6_/\xf1^\x88\xae\x03[t\xf5`\x0e,\xd8\xa2\xcb\xa9\x90%z\xa1\x0b\xbe\xc3\xcc7\x10\x9c\xa5^0\xe1*\xd8\x9ae\n\xd3\xec\x0e\x8e`\xc6\x0ci77gf `4\x991 `0\x99\xb5J\x00i7ia\xd6KZ\xda\x8c\x83\x1f!\x01\x0c\xe1\x18\x8d\x90Q\x02\xe8\xc31\x84f \xa0\x8c\xa5\x82\xa8\x98\x92>\xb1\xc6\xa4\xb6\xb8q.\x82\x92\x9b\xe3\xdbf z\xd3\xba\x7f\xad\xc6\x96\xf5\x90\x1a\x98:\xaf\xad\x11\xc9\xe4\xff[\x1b\x1a\xb66\x84\x1e\xfaz\x0cf=\xbdp\xdf\xd4E\x10\x86\x1cm}\xa5\x10?X\xac\x0f\xda0@\\X\"\xe2\x87\x984\xd99\xba\xa8\xf1\xe5\x1f\x1a\x03\x03\xa9\x91\xfe\xd4\xd8t\xa6\xeacz&IB\x07s\x1c\xcc)\xf9\n\xb2x\xa1'D\xff\xde\xc1\x0c\xe5\xa5O\x7f\xce\xed\xa9\xf7p\xc2\xf5z\xc9\xda\xeeU\xadud\xaf\x17\x17Fu\xc3\x1d\xee\x8e\x96\\\x02\xea!\x9e`P\x9e\xe3c8\x84\x1f)\xfd{\n \x8ca\x08[\x908\x0e\xdahk^\xf4\x1a\xf0\xfb\xb5\x06\xbc;z\xba\xfbt\xff`\xf4\xf4;\x8dz\xd7<\xea\xbc9\xac\x1d\x1c\x16\x03F\xaf\xc1}\xea\xbd?\xbeea\x99\x96j\x0b>y\xf4\xfa|U\x1bQ[J\xc6\x90\xeeB\x04\xc0\xc0e\xa0v!\xe1<\xae\\\xc7h\x87\xbd\xa3\x10\xd8\xed\xd5\x87\xb7\x8f\xee\xc3\xa1\xa1\x0f{#\xf6\x8e\xf6\xe1P\xe9\x83|\x97\xa9t]\x1f\xfb\x1d\xe1\x15\xd7OI}\x02\xff\xfd\xdf\xc4U\x83`\xe6p\x8a\xa9Z\xfe\xfb\xbfs\x97\x9d\x14,\x0c\xe5&=\xb5\xcb\x1dBD\xc4\x11B\x0f\xf6\xf2Q\xeaT!\xc9\xec\\\xf9&\x17\xdf\xe4\xe57\xb9\xf4\x0d)\x9f\x10\xc7`\x03\xecT:\xcf\xd2\xea\x1aaa\x0c\x90\xb9\x96\xfc\xa4\xa4\xc0`K\x8d\xcb/\xae\xb8\x0c\xf3\x9b\x08q\x86\x81\xbb\xa81\xe7\x9cNH8\x19\x13S\"\x80\x0d\x04)\x00\xd2\x95\n\x07\xaa\x85V\xf7\x80P\xd8\x0f\x11\xd5\xe0\xedYO\xb9\x1a\xe1\x92\x19!\xb8A\xaaM\x90\x13\xb2|\xa3\x05\xf7\x89\xe56!\xdcgoX\x12G\x9b\x9bt\xd89\x17\xae\xffxB\xe9\x1e\xe7\x88\x13\xb5\xec\x1b\xd8\x84\xf0\x12~\xd4\xb9v\xebIY\xfd\x88_\xfccF\x0c\x9b\xb0\xb5\x95\x8bq\x1f\xe1\xd2\x1et\x0c\x97~\xf0\xed\x03>\xec\x83\x10\x84\xc6\xa9\x1c\xe3\xd0U\x15\x1cl\xe2\xfa\xb48\xdco.\xab^\x8d\x8e\x0c\x8drK\x0f\x04\xca\xf0\x12\xcf\xfc~\xfdhN\xf6\xb7\xf5\x03\xa9\x8dZg\xfa\xf4cg\xf4Hx\xec\xaa\xfd\xb0\xcd\x00\x91\x1f\x8d\xf0\x11\x8b\xf37\xdc?88\x18\x0d)\x17Q\xbe\xdf\xe9\xd9\xedG\x82\xaf\xd1\xedF\x1f(gc+#\x18\xee7\x87P\x1b\xd5\xcee\xab\x08\x9fv\xfb\xff:\x8c\x06\xcfN\xf8\xe7\xc3\xd1\xa1\xc3E\xe1[\x9cv\\%\xb76\xa5\x12(X\x1d\xc7\xedF\x07\xff\x10\xf4W\x03\x8c\x84\xdb\xd2\xcb#$/\x9bX0T\xb0`\xda\x0e\xa4P\x03\xa4\xd0\x08\xa4\xb0\x07\x90\xbe\x13\xcaD\xdf\xebr\xc5\xa3:\xefG\xc0\x88\x10[\xd2>@\xaf\xd3\x9e\xd8u\x0d\xe4j\xc4fM8\xde\x88\xd8\xaaF\xe4b\x84\xfd\xce\xe8`\x9f\x0e2\x86S\xc6\x08\x0d\x86\x07\xfb\x03\xb8\x87\x18\xc6\xdd\x14\xc8\x1a8\xfa\xd1\xc3a\x83\xb8\xaf\xa1\xf0?n8\xdf\x0f\xd5\xaf\x87\xe9\xebx\x92>\x1b\xed\xf6\xean?\xe8\xf7\xef.\xb6\xdc\xect\x0f\xe4\xde\xd5\xdd\xd7Q\xe2k\xb0\xfb\xe3\xba\x9b`\x95\x95\xa2ac \xb8\xbe^\xdd\xf8^Pktc\xd8\xb7\x1b\xaf\x92\xe2:\"\x8f\x04\xc7ag?\x06\x82\x01\xed\xd7\x8fG\xc2\xa3\xbb\x1f\xc3>\xfd@\xe6\xd9\xc8\xcd\x18\x848\xc8\x86n\x92\xda\x01\xc7\xacXPm\xfbF5 P\x0f\x93\xd8\x81-\x8a\xf2M\x8e(\x899\xc6_\xd8\xe2\xf4\x81\x1b\"\xafBN\x13AI\xc4\x8dc\x92\x15eD\xc4 \x10\xd8\x86\x84\xc9\x81\x8c\xe8\x8d\x16n\xc5b%$\xb5d\xc2?\x10\x921\x161BSc\xa4$AS\x88\xcfJ\x88nm%\x18 \x8e\x93\n\x1a\x90&\x02\xa4\xe1w\x03i\x83\xa8h\xb7`\xd1\x00U\x85%E\x16{{.\xeaQ\x8c\xf9~pv\x10\xe4\xb3(IP\xd2\xcd\xb1\xb5\xbc\xca\xb8\xc9\x7f\xaf\x81\xe8(\x90o\x1e\xcb\xc8e\x92\xe3\xb6\xd1\x9cj\xb6\x87[\xcd\xd9\x90\xcd\x19\x8aH)M\xf5\xf7Z\x03,G*=|z\x0e\xb27\xa5\xfc\x07\x0e\x92\x8fF\x1d$\x1f\xbbf\x90\xc3\xb5\x06\xa9\xa3V\xbey\x90\xbb\xae$\x12\xef5RF\xb3\x88\xd1\x8ev\xa5\xe1\x8e\xaa\xe7\xc3}\xc3\\k\x963\x85\xcc{\xfd\xf4\xb7\x92E\x12d\xfe\x80\xe9_\x1f2\x06\xa8\x0c\x0dP\x19\xe9\xd7\xccN;d\x86\xbd!\xb3\xe6\x11+\xa4\xc72X6\x8c\x06G\x02\xd57\x8e\x07\x0c\x1d\xad\x97\x9d6\xce\x96\x84\x1d%[\x1a7o\xbd=\x18\x9e\xc5\xfa\x83\xa5#J\xef#Op_:n\x88\x10y3\x89z\xc1~\nsLv\xb6\xd3\x01]\xe2\x97\x05\x86(r\x95s\xdf\xa6\xa7\x94\x0f\xcf\x9e\xc1\x80\x9e\xa3\xc5w9\xaf\xd6\xa4\x00\xfeO\x99\xe8\x16*\xe2\x9b&[\xcc\x85D`\x84\x15\x81\xb1\xf6\x8co\xfecf\xfc\x0f!P\x86\xa3\x03\x17\xb6\x86\xa3\xc3\xb5i\x14R\xd3!Q\xd02\x9f\x84\xe1\xb7\xd0/\x7f \xf9\xb23:\xd8\xa7cE\x19B?\xd4\xfe\x07\xd20\x7f \xf3\x88\x81\xfe\x81t\xcc\x1fH\xc6T\xf9\x10\\%\xedA\x8f!\xb7\xcfm\x0f\x12\xa7F\x12}\x13A\xf3\x07\xd23f\x10\xd5\xb7o\xcdHB\xec\xe2\x1eP\xfc'\"~\x0c\xf2\xa7v(\xbeR\xe6\xac\xcb\xab\xa2ji\xdd\xf9RZ\x1a\xf6j\xc9$Ejo\xea\xedc\x06e\x12\x14\xad\xd5T\xe7\xa8\x82du\xb7\x1e\xddR\xa5\x9b\x1c\xa0Cd\xe9\"X\xd9\xd5\xe7\x8a\xa7\x97\x94\xa5\xa42E\x90\x0b\xd0\x0f\xf3\xb2F\xae\xe2HK\x12\x10\x9d\x17\x98\xf7eWz\xa7\xb0\x11 \xa5\xea\xa0\xdc\xad\x8e*\xf26\xc3\x9b\xdcO\xe7$?\xcf\xfd4\xef\xce\x86Z\x9a\xf1\x003\xd6T\xba\xa1o!K\x8a4 k\xb4\x90\xb6\xf5\x97\xd5v\x16O\xbb\xebJ\xeb\xce\x17%\xf4\xeb3*\xd9_\xe5\x18{iK\x9a\xa8\xda\xcbM\xadU.\x12\xb4L\xbf\x95\xea\xe3\xd6\xe3\x1cTn\xa8\x18t\x99+\x07\xb1\xc5\x96\x904 \xb0t \xc3#HxV\x83\xad-4\x0bK`\x13\x10I\"\xae\xa3w\xba\xb8/\xa5\x93\x11eA\x86d\x07X\x18\xaf\xf5\xb2\xfe\xb105\x8aY\xda\x1a\xedk\xf3\xb9d$\xaf\xf2\xb8\xd4Lubf\xf6\x14:\xfa\\\x98B\xef\xd7\x86\x08fa\x14\xad\x87\x084NWkg\xb6\x16\xe9 0\xa4\x06?6\x95\x1d\xa2M\x9f+\xe1\x85\xe6'.\xcf\xba\xd1\x95\x19 $\xde\xaa\x16\xb0\xdcdy\x04\x18\x80\xe8\x18m\x8c\xc5Am\x88\x8ff\xce\xb7\xaa&\x9b\xd1\xe4\xc33\xf9\xb3\x97\x19\xbf\xfb&\xf36\x80\x1d\xdb\xad\xe7\x02NM^\xc5&\xcf\x8fF{\x95\x12`:-\xc9\x9b)\xcb-\xe2T\xe9\x17a9\x00n\xab\x87>\xca\xb5A\x08\xbc\xe8OB\xf8_P\xaca\xb3\x977b\xe4\xd4\xfb@\x07\xfb\x19N`{\xf2\x9f\x9b\xbfl\x0f\xb6\x9e>\xdf\xfa\x0f\x7f\xeb\xb7\xad\xab\xcb\xed\xb9\xc9\xf5\xe6\xd7\xf6\x10\xae\x80\xca\xd9S\xb0\x06\xe8\xf4_O\x13:V\x1e\xd4\xfbfh\xf0\xb5Q\x01x\xa3\x0f\xd0\x96\x03\x8f\x8a3\x84\xed\xce\x1c\x97\x95\x83L\"\xc2\xf3\xeb\xf2:\xb4\xa7P Y`\x9bFb\x07\x07\x9ea4\xef=qD\xef\x1d\xec\xec\xee\xb6!\xdc\x90\xe7\x873\x97\x80r\x93>\x83\xbd\xfd\x9d\xe1\xd3\xae\xc2\xf4b\x89(vh\x7f\xb6\x86\xb43<\x99\xc4h\xe7\xa9\x0b\xc3\xa7C\x17\x86\x87O[\xd0\xba\xb8\x82$\xce\xc3\xb8\xd0\xe7R\x12\x979{\x10\xf0\xbe\xfb R?\x19\xa5z\xf2\xf5O\xd4{\\$\xed-u\xb6\xd2\x9e] \x97\xc9\xfe\xce\xc8\x98BP\\\xfd\xa0\xe2\xfe\xc1]\x8e\xb9\x8f\xc6>lR\xban\x8b\xa7 8>\x86!3t\xd9\xe2\xa3\xd1\xd6\xc0O\xc5\x84\xf3==\xc6c>\xc9\xab\xfd\x1b\xb3D\x15]\xfb\x8c58d\xd9Y\xba\xd2\x1f\xf0\xce\xc4\xad\xe3\x10\xf37\x1a\xec\xf6l}\xb4^\xeb\xf0\xec\x19\xe62\xc0\x00\xdb\x98\xd0 \xa6w\xa3\xc3^\xdd\xc2y\xea\xd7\xaf\x9d\xf5\xfb\x85I\x17F\xa3]\x16\xc2\x03\xf6\xe1 \xed!\xf6n\x8d\xbev\xa0F\x1c\x07O\xd9\xa0\x8b3 \xd2i\x05\xc9\x94\xc0*1x\x91\xc9U\xb2\xf1\xee>b\xbc\x87t\xbc\xbb\xe4\xeb*I\xf3\x0cN\xe0\xf7\x07\x89v,\xc1\x106<\xd2\x1b\x9b7#\xf9E\xb8$I\x91\xc3\xc2g~\xa0\xd7\x84\xc4 B\xe6W\xf0~\xd04\xe0w7\x10D\xc4O\xbf\xa1\x89\xa2\xb9\xe0\x19n\xc5\x18`e\xef\xab\xe8\xc2\xe5#\n>\x95o\x16T\xe3\xc9 \xf3\xe2\xda`\xf9\x8e5\xf5\xd0C\xb6z\xecv\xd4\xab\xcf\xb7!\xaab_\xd4\x97\x81\xc8\x0f\xa17\x955\xa6\xef\x10U\xb2\xa5SF\xcb\xd79\xfc\xb7\xb6\xd0\xac\xab\x94\xd2v\x07\x0f\xa8&l\xa3Z\xac\x8d\x95\xa0\x1d\x03f\x9d\x11\xdf\xc8\xbc\xa6\xb4\x10O\xe5\x9b\xb1\x8av[\x13k\xd0\xeaU4-\xdf\x19\xe6\xc9\xd4\xa9\xda\xe2=\xad\xdf\x8e\xd5,\x89\xad\x1d\xa3M\xa8Y\x15\xcb_\xb6\xb4\x9a\xe8\x1e\xe7\xa9\xcd&Jb\xb3\x00C\xbf\xd4\x9f\xcdx\x12\xda\xe6\xc6Y5f\x04\xb3\xb7b\x1a\x0b\x9bW\x05\xa5X\xe0\x14[\x14\x01\xc4\xed\x08\xc3\xa7b\xdd.D\x92\xecuj;\xed\xfbu\xdah\x16\x89\x88\xc0\xc4L\xd2\xb3\xad\xb0W\x1a\x8a\x01\xfb\xd8\xc6KR\xa6S\xf4\xed\x083\x11\xe9\xd79~@\xb1d$\xe0\x8aA\xc4x\xf6\"\x9e\xf2cv\xe9\xa5El\x9b<\xfc8(\xe4&;v \xf0D\xcfl\x8f\xea\xe6N\\\xfd\x8ev&T\xa7\x98K^\x86U\x1a_\xe9\xa1\xdd\x16P\x12Q \xab\xc8G\x14\xc8b5h+\xa5\xabV~\xe1\xf6o\xc6\x8c\xc2\xc4\x95\xda\x06\xf9\x12\xf4\xc2^\xe2\xean\x08d\xf2K\xc6\x9b\xe6\xe6a\xad.@\xa3\x01\x8eL;\x1a0\x8f^\xfb\xe6A\x05\xd8C\xebN\\h\x858(\x0b\x9c\x15(9\xe1B{\x96\xe6\xe8D\xcaZ\xaa\xab\xee\x86n\xec\xaa\xc5\xc4\x8b\xc9\xd7\xfc\"\x0c\xbe\xb4\x12\xa7b\x9fR\x8a\x80\xd1\xbc\x8d\xb8\xcdM\x93!\x94W\xa8\xc5\x9e\xc1\xb0 \xce\x12\x17\xc4\xcc'\x93\xb2*\xea\x97G\x10onRr-f\x86XR\xe8\xe8F\x98\xfd\x883\x1b\xe4V\x80\x0fe\xf7\x98\x15Z\xa2\x07\x03\xfa_aO%T\xe8\xc2B\xb6\xabG\x00\x9b\xcfF> <\x1c+[\x8e\xd5\\\xd4\xaaM\xbc<\xcc#\x0cJz\x9d&\xb7\x19I-\xfa\x90\xff\xe6a\xf2\x13\x8f\xc47H\x07\xd2\xdf~:\xbf\x11y5\xbd\x1b\x92ft\xfeX$\x93\xf2>+K\xe3\xbb\x1b\xfcn:}\x1bf9\x89\xb1\xde\x1b\xf6\x12\xdd\xd1\xd9\xef\xd9L\xfcL\xc92\xb9!ja\xf6\xf4y\x14\x89\x17\x99xC\x96a.~\xafR\xb2\"q\xa3%\xfe\xf8C\x1c4\xea\x8d\xa4\xea\xccK\x8d\xef\xc0\xc9e\x1dz\xd7a\xdc\x99\\\xa5A\xb5\xae\xd2$ YV~\xccC\xa4HA\xf1\xea\x8d\x04\xb7\xd3\xb6\xf9\x16\xac\xd2\xb6\xa5|\xb6\x98\x86\xe9\xe3z\xc6>\xed\xeaW\xb1\xf4\xb3/=z6\x90\xb6>h\xb8\x10E\xc5o\x15\x19AEO\x90KL\x9c\xcc\x90\x98G\x84\x1a\xa0\x8a\xd8\xda\x90Uu:}\x0f\x06\xb1\x15\x03\xf5\xcb\x8aU\x19C\x83k|\xc4@\x9aH/\xd5\xe2\xd0\xca\xbe\xe6\xa4\x0bk&f\x94\xd8\xc0p\xc7'0\xa4\x88E\xd2\xdeT\x98jx\xc9\x835\xc8\x8f\x9a\xf4DlLx+duZ\xb0\x19\xd7\x07\xa8\xc2{\xb5\xd7Lt\xcfP{\xea\xa8\x02|\x9fb\xdep\xe2\xd7\xb1\xaeof\x961\x17\xd6\x86\x88\xa2\x19\x0b\xd0 \xc3&\x91\xa1\xa1GnHzW\xcb\"\xdd\x95\xda\x0c\x19\xb7x\x92^j\xf8\x1bts\xb1\x19W\xcdp2\x9b\x04\x17B\xc7a:\xb5\xd05s\xf2Z\xde\xbb1\xf15\xc2\xb5 \xc7\xb8\x84cN\x0f;8\xc5\xe0\x14C\x1e\xd98e\x07\x1c\xcb\xb9 )\x85k3\xa9\x9d\xe4-\xa0\x16\x97\x00]\xfb\xa6\xef\x03}6\xc4Y\x9a,[Yv;4\xcc\xc3\x83\xf1\xb8\x8f\xbc\x94dE\x94\xbf.\xe2\x80\xae%\x17\x9f\x04\xc9rU\xe4~\xce\xd9\x94\xce\xcd&6Z\xe3\xe5\x03\xab/#\xf9\xa7GWJgH[q\xed\xa1L\x0c\x88_\xb9wuE\xb2w\xc9\xb4@\xf6\x8d\xf2i\x98:\xd6/\xa2\xfc\x1dY&,soB\x9f\"\xda$\x02\x8b\xbedH\x94\x11\x1d\xe5\xcb<-\x82\xbcH\xc9\xb4D\xb6}\x18\xefGP\x99\xbeBe6\x99s+\xc1<\xb8F\xea]\xc8\xfeM\x1dg\x87C\x06\xb30\xcd\xf2*^\";\x18\xfc\x18X\xf5p\xbb )\x01\xe2\x07\x0bX\xf1\\\xbb\x94\x11\xf0A\x9c%\x9a\xa3\xc3Gk\xb0\xb2SG\x0d\xa0\xd0\xbd\xc6\xd3\xf8~!wYC\x88UR\x8bq\x1dU\xb5\xf9\xc3\xd3\x0dY_\x0e\x8e\xdb\x93\xe4\"Z\x84\x9cW\x08\x81\xd3~\x03F\xfb\x11N\xfb\xe5\x93\xb4\x9d\xee\x03i(^J\xa6E@l\x85\x13\xea\"\x98\xc9\x84R\xcb\x97\xcc\x18R\xa3\x8es\xe1\xf7\x07E %\xb1\x9fu\x91\xb6\x8f\x04L}\x99\xd3\xf5m'z\xb5\x97\xc2\xa7 \xee#\xb6\x87\xc3\x03\xe5@D\xc6\xc6\x1e\xed\xee8zV4\xb6\x87\x83\x01\xa5\xfc\xda\x1a\x00Y\x84'\xd2'$6Z\xabK\x83\xea\x91TLZ\x12\xcc\x18tM\x96\xb4\x1a\xea\xc1\xaeaD\xed\xcc\xf5\x86\x1c\x0b\xd5\xc4G\x8b=\xb6\xf1H>Z\xedq\xac*$\xeb\xfb\x8e\xc9\x9c\xc6`\x8d\xbc=o\xcf\xd2\xad\x12\x8d\xfd\xe1\xd5\x153\xd4\xa4\x7fO\x84\xdb@o\xf0\x8d\x0e\x0e\xd6\x86\x9f\xcc\x85\xca)\xe7j\xb2\xeau\xa7Q\xbf`\xf7\x0ev\x95\xe7!\x7f\xbe\xa7<\xa7{\xc7\x9ap\x9c\xf8\xbe\x88\xa2K%Tx!\x17\xf8,\xd2\x9d\xab\xa524n?E\x13\x04f\x0fx\xe1\xcf\xcb\xcc\xde\xdf\x01R\xd2\x89Bo\x0b\xcc|2\xe6\n\x16\x08c\x8ev\x99q'\nF\xc6\xc8&?\x16\xb0{OGz\xc8>\xdd\xeb\x9cx\x0d\xbd,\x96q\xc2\xdej\xb7E\xca\xb2\\\xc4%\xd8\x1e\xdb\xf7\xd1Su\x96Y\xdf\xf7w\xd41\xb1Uqp\xd89$\xc3\x0c\x85\x0c\xde)\x83w\xb26\xbc\xf5\xb2> !\xef\x0e4#\x91NXJl\xb4\x93\xd4\x82V\x99h\xce0\x89s c\xa42\x84U\x98\xf9\xbc\xab\xbdx0\xc0\xad>\x96\x90\x1f\x14\xfbR\xb5\xa1\x17\xc6\x0b\x92\x86\xfc\x149\x1c:\xcd3-\xb6w\x06\xeaL\x16\xac\xae\xda*\xac\xea\xb2g.\xf8\xd2\x9br\x80\x19\xae\xbd\xa2\xd2\"\xf0\x14I\x83#\x88\xe0\x18*uFD \x80\xe6\xda\xa5\x04t6\x89\x14\x18\xce\xaa\xfa&\xc1%\x8a\xb9\x94G\x94)\x93\x1f\xb4\xebwg\x86C\x879\xc7\x88@\xda\xc9\x0cfU~IJ\x12\xce\x1a\x84\x96_W\x95\xb9P\xa8\x0f\x10\xfbo\x08\xd7\x89\x94\xf8S\xff:\xe2\xb1c\x17aV=9a^\x80\xf5\xf2\xb7i\x98\xd7\xcb\x97Oxy\xa6q\x89\xa2\xe4\xf6\xaf~4\xfb\xb0\"1'\xd3\xeb\x15\xd5K\x94\xb55>,\xabL\xe2\x80\xd8\x16\x89\xa7\x96\x0b\xabvp6\xb5\xf4\x9a\xba\x85\xc3\xc1\x95\x18\xc0y\xee\xe7\xc4#\xf1\x94L\xe9\xcb\xb4\xd4\xc5\xd9S\xd6\x85.\x1d}c\x0e\xb16[E\x0d\xf4\xe2;\x99\x1d*\x1f9\x19.\xaf!\x17,\xd1\xaf\xbf\x86\xf3\xc5\xcf~N\xd2w~\xfa\xc5r\xd56\xe2bIRZn\xdc\xd0\x85\xcfI>n\xa7\x98\xc5\xe6\xd6\x00b!7[\xdf\xfc\xd5\x80\x1c\xb7\xd7P\xa6$\xcb\xd3\xe4\x8eL\x1b\xdd\xef\xddE\xc9\x9f\x86\xf5V\xacS\xec-]@\x8d\x12\xb5\xf1TK\xac\xfe\xa5W\xf6\x0d\xbd\xce4\x80(\x0b(d\xb9B\x08\xd4\x06\xa2\xc7\xc8\x7f\xfc\x10*\xfd\xb3i\x10\xb4\x88Q\xe1M\x19,I\xe1z\xc5\xbf\xea:\xe4\xb1Av\x80\x14Q$6,\xae}W\xdeGyM{\xff]\x0e\xca\x9d\xe1\xc8\xb1\x1f{\x8a\x93\xca=\xabT\x91t\xd1\xe8k\xf6o\xff@w\x90\xb3\x10\xf7\xfe\xd7G\xf6;\xb1\x07.\xd2\x1e\xdf\x00\xccu\xcbk\xa9\x94\xa1flvl\x1f:]\xf2\xbe\x90;~z\xe2l\xfb\x98$\xc2\x16\xc0\xc4@\x0b\x82\xa6\xf9\x1d*8\xf4\xb2;\x19\xc1 \xc3Pz\n6\x05\xd6F\x0bez\xd0\xd2\xef\x1b\x86\"\x1a\x9a\xb2}\xd4D>\xca\xf1h\xa7\xe7\x8cm\x8d\xf6,t\xb7\xc5\xedVP.\xde\x16\x9bH\x03\x1f8\xe6\x1b.I\xa2\xf3\xf07R\xe2\xad:L\xe8vl\xa4o\xad\xdd\xfa((\xab=*\x1a\\&\x16\x9cNi\x9d\x94\xb9I\xc6\xed\xa8@\\%\xfb\xda:-q\xad\xcf\xdc\xba\"\xf6\xe6$\xa7\xf7\x88\xac\xd0\x01\xca\xa7O\xcb\xf1\xa2czu{\x02\xc3\x81C\x0b\xa4$\"~F\x98\x84\xaf)\xa1}\xd0\xa8oc\"\xd2\xa9b\x83\xe9X\x05\x08\xbd\xf2\xdbD-\xd5\x0b\x06\x8fY\xe4 \xeb\xa6\xd6Y\xe8\xa0[\xec1\x8b\x10\xe0\xe8\xc0\x01\xda5\x0f\xbauO\xab\xe8\x03\xce|\x91\x92\x06@\xbbD;\xe2\xfa\x16h\xa5\xdf\x05Zi\x19G\xa9\x114Z\\\xfd\x01\xd6\x88\xc8\x00z\x98\xcd\x92\"\xed\x02Y\x8bT\xf1[\xa0\x96|\x17\xa8%R\xf4\xa9\xd4Q\xf5\xf9\xe2Z\x0bp\xae\xd6\xf1\xb8\x8e\xca\xf4Gg\x81O\xdb\xe4ju\x03\x7fmq\xb3\x98tO\x95.%\xfcy\xb7l\xc4p\x94\xa7v\xb2\xfe9.\xf7\xe8\xd1-s\xb9\xd1#\xc8\x08\x89\xfa\xda\xd1\xcb\x8a\x0e\xb5\xe2\x96\xe1P}\xce\x98\xfd\xe1\xfe\x81c[Y\x1aX\x1a\x9e\xff5\xefH)_k\xca\xdfX\xfe\xc1\xc2\xf1\xb2U\x14\xe6\xb6%J\xcaR\xd8\xd8\xde\x1f8\"a\xf99F\xca\xe8\x03$\xce=\x93\x9a\x05\x98m\x94~\xe1\xda-tr\x84\xc8d\x0d\xafx4FH\xe4\x87\x14s[\xb1\xbf$\x16\x1a\xd1$\xd5=7\x9fDIxi\xd2cK\x9f\xf9\xd5\x17>/\x87\xf2\xd6M\xf6{\x0c\x19\xb3H\xe0\xde\xcb\xb9\xe3\xb0\xa8b,\xb6\xcbi)c\x871\x14\xe2\xb6\xf64\xa9\xd6\xc4\x18\xec)\x89HN\xf0\xbd+\xbd\x92\xd7\x94c\x97\x93(3\x85\xe54\xb5hu\xf84h!\x87\x04\x14\xa7}&>Ja$a\x87\xdc\xfeZH\xa1sM\x94z:9\xf4\xc1\xa9\xc4A\xc0\xb8\xcb^\xa5\xd76\xeb\xa4\xbe\xf5\x9bo\xb4o\x10\x81\xef\xeckw\xdf\xde\xaeJ\xc53Q\xdb\x81Z<\xe3\xc5UYj\xc4\x9f\xab\x12\xbb\x80?W\xeb\x99\xf1\xe7*2X\xa1\xd0\x8ci\xb3\xce\"B\x0f\xc4z\x81\xa9T\xe0\xb5O\xc9\xe4\xbbz\x81\x05+\x10%\xb1\xbe\x82\x1b8\x81\xb4\xfeh\xd9I\xb47t7\xd0<\xc8\xe7Z\xb2\xf9\xe5\"\x8c\xa6)\x89\xc7\x86sx\xe9\xaf\xc6\x10zK\x7f\xd5$\x0b\x80 1\xcf\xfc`A\xcb\xf0\x9f\xfarAR\xc49-\x85?\xf4e\xf2\x045\x9f\xb4\x14\xff\xa9/\x97\xc4\xd1\xdd\x18f\x8dw\x1a\xca\xe5e\xb2\\%1\xa1M'^y\xd3,\xf7\xb1HI\xadl\xedA\xb3|m\x05\x8cA\x03\x1cy\x86\xc7\xa0\x81J\x98\xfd\xe4G\xe1\xb4,Rx\xf5'\x9aN\xa6\xc9\xea\x82\x99De\xa6.\xbd\x8c\xfc,\x1bC`z\xcf\xd7\xe4\x18\xa6\xa6\x12\xef\xc2\xafa<\x86e\xf3\xfd\xab\x0f\xef\xc6\xe07\x9f\x97J>\x8d\xf1\xe9\xd5U\xb6J\x89?\x1d\xc3M}q\xea)\x829>\xfdc\x90Nc\x93\x87L\x12\xf0\x94\xb2\x1e\xf6h\x7f\xbf\x12\x14V\xe2\xa5\x85\x9f}\xb8\x8d\x85\xc8P\x8b\x9cF\xfb\xaa\x9eO\xcf\xa1~!wc\xd8\xd0XA\xa6d\xa6\x7fqu\x95\x91\xc8\xfc\x0e)\x84\xb1\x9a\xbeX\xeb\x10\x9a\x19O\nI\x9cG\xbc\x94T\xbbJ'?\x8e\xfaU\xf3\x85\xdcI\xd5\x88_BU\xa1\xe1\x1cX2C\x03Y\xd2\xd4*\xd3\xeb\xcf\x7ff'\x96vE\xe6\x98^\x994_\xe0\x1ch\xb6\x16NA\xdc|\xbeJ\x93U6\x86B\x03\xff\xe46\xa6|PhZ\xd6P\x01\xa7\x8a\x0b#\xbd\x0f\xea\xc7\x88\x060:`\xa4\xcc\xd0\xfaw\x1d\x97\x06&\x0b\xf0\x15\xe8,\xc0\xd1\x9b\x96\x11\x04:\xde\x19\xd5S)\x84t\xf1\xe4,3\xcf\nm9R2s\\\x88\xc4\xc3\x19:\x98\xc0&\xa0\xd2\xcfqky\x06=\xb6\x84\x05\xe91.\x9f4\x8b1z\xb7^\x10\x9f!\x1d\x14\x96\x921\xe6\xb5\xb6Q([\xd3\xe6\x99\x87}f\x1f\x93OR5\xe3.\x05\xdfTg\x18\xb5\x05\xa3&d\x98\x0eh\xea\x80\xef\x05\xfc\x8c\x84Fl\x8f2\xe2\xc3\x14\xbd\x944\xcb\xb4T\xf2-J\xc3\x9e)\x85\x11S\xef\xdd\xc01L\x8f\xe0fs\xd3\x81\xc5\xe4\xa6n\xd8s\x83\x811\x9b\\\xee\xc0\xad\xf7\xa9\xee\x8f\xf8\xd0\x18 \n\xdf\x88\xb0?\xa3\xf0\xcat=\xa5\x9d\\\xa21\x87\\\xb2\xd9|\xb5.\x96N\xcd\x96\x8c\x02^\x9a\x81e\xc3\xe0\xfeA\xb77\x02\xba\xdag.\xac0\xa9&z4\x05E\x9a\xd2\x03\x10\xfc\x1aK\x13\xd4\xc9\xaa^Fp\xca&C\xb7\x9e\xd2 P\xbbWs\x8f\"\x0f\xae\xa4P\x9a\xa7G\xfa\xf3x\xfa\x89\xc5F\xf8w\xd2\xa9t\xa8\xc6\xe81\x86\"w\x19\x96\xa5\x7f\xf8>\xa0?\xf8:'\x1e\xc3*\xf4\x17b\x1eu\xfc\x12M\xd1\x13_\xf8\x0c\xb8\x94\xa8\xb4\x7f\x7f\xa8*n\" \xd4\xba\xd0-\xdc|\xb5\x00~8h\xce~\x0cj\xdd2\x16\x8d\x87_\x17\xd2\xf1kHg!\x90\x0e\xdb5\xe5\xf2\x90q\xd0T\xc5A\x0c\xdel\xe1\xe39.\xaf\xe9\x12mi\xde9\n\xb6\xf1\x0d\xd8\x86=\xb7e$F\xf9\xbb\xba~\x8c\xe2\xbd\x15\xf3\x81\x99\xd1?cqG\xcbj\xb0\xd3rM\xec\xb4t`\xd5\x07;-;\xb1\xd3\xbc\xc4NK\xc7\x85;\x86\x9d\xee\xe0\x18\x96GpG\xb1\xd3|rW\xc7Nw\x06\xecT\xeb\xd0\xbc\xd7\xfe\xe7{c\xea\xc2B \x81\x9b\xba\xfe\x9c.\xfe:u\xfch&\xb8\xa6Gc\x0bD\x90\x12\x0c\x8d\xc9\xad\xca\xa4i\xf0'\xe8&M%\xb1\xd3\x81\xe3\x9d\xdf-\xaf\x93HO\xe9\xa6\xebU7:\xd4\x9b\x0d\x0d\x0f\xbf\xcd\xd6m\x83C!\xa9\x0c\xd0q\xc1\x7f\x8b\xdd\xdb\xc8 \x81|\xaa\xaa\x19\x19\xd3\xbf\xdf\xb0#bt\xf5\xfe\xb0sdf\x94+E\x12\xe4f]p\n\x13r\x89\x96g\xfe\xb7\xc8\x131\x1e~cxJ\xf8\xbb~\x13\x11\x1aB\x972\x95\x1b\xa9\xechH\x13W`\xe0b\xd8lD\xe1\x11k\x7f\xc0j\xa4\x93I\xfbF\xe8\xddV\x02\xa7`m\x0d,J_u\x8c\xbf\xc6p\xe9$E\x9cUb\xe7+F\x1c\xea9C\xc4\xcb\x8a\x15I\xaf\xb8yq\xc5lU\xd6c\xacR;\x97eqM\xec\x15$\xb1\xd0E\x9a\xc4\x17\x98\x98_\xcb @\x87]\x8a\xb8\x84\x89\x82\x9e\x0b\x03\xd6\x8dY8/D=\x1a\x9f\x81\xda\x93\x87\xbaU\xf1\xa3\xc0\xd6\\\x0e\xaa\xd7\xb9\xc2\x88\xc45(\xd7\xe0Z\x9f\x80\x98\xdc\xa2\xe9r-.w f\xf8\xfe\xb6\x07\xfb\x9d\x9b\\\xb7kj\xa6\xceJ\x98\xd8\x97~\x1c'9\xd0\x86\x11\xc5%)\x14q\x19sH\xbb[\xbe\xcb\xa0\x1a^\x1f\xcaxyt@\xfb\xa0\x81@P\x10\x91b\x04_\xba_S\xb9\"\xe6\xfb\xdb\\\xdd\x9ch\x19\xab\x99c\xe5\xfe\xf02\x9d\xd0\xec\xe3\xc9\xf4\x87x.\x89\x93\xa8>\x04\xdd\x0c\xd9\x03\x17B1 g\xed\xc3\xa9\xe7\x8c\xb9\x06\xa0\xb5\x18\x0d\xab;M\xf2\x99\x16f\xab\x18\xff\xf7\xc3\x8cr\xa8\x98X\xe6\xfe\xbeK\xceT\xc6\xd6\xe6Lm\xccX*\xd2dj\x1b\x10|\x048\xca\xc7\xa5\x9c'\xed\x92\xf30S\xef\xfb{a\x06\xde\xc4\x0b \xefg/\xcc\xde'\xf9\x82EcH\xdd\xda\x0b\x06\x8a>\x04K7=W\xf5An\x83\x0b\x93\xfb4\xa1\xee\x04NBpjbB\xc9\x079\xd5o\xad\x99\x94\xac\x88\xdfo\xdd0\xcf\x1e\xf5\xe8\xc6\xa5\x133\xda;f^\xd61lb\xd4L\xccP\x85\xc5\\\xefL\xcf\xc1\xe6F\xf4[e\x81\x1a\xcby1\x18/\x8c\x83\xa8\x98\x12\xa1\x95\xe9p\x1fG\xef\xe0\xb2\xad\xda\xeb\x07\xae\xc9\xed[S\xb3\\\x9bEM\xee\xe5\xfe\x9c\x9b[\xd3_O\x9eP\x1e>\xa4\x8b\x88\x89\x92\xe9O<\x13M!a\x1f\xd0\xaeJkJ\x86ofa\x94\x93\xd4n]\x91PAn\x8b\xc7J.\xb1v\xaeV*\xad\x93\xe6\x84i\xa2\x16r\xf3\x15\x9c\x0e\x14:\x88\xdf\xf7\xf7hK\xc6\xde/WQ\x18\x84,\x1dIy#\x97 _\xa5\x12\xe5\x8d\xae\x8e\x9e3\x85\xb2A/J\xfc\xe9\xbfs [Y\xe0G~jq1\xbex%\xd3Y\x89m]\xa0s&\xbac\xc6I\xbc\xc5\xbeA\x84LO\xbc|A\xa0\xec\x7f\x14f\x18\x07\xdf\x87,X\x90\xa5\xef\xc1\x1b\xf1*%Y\x12\xdd\xd0\x13!\x99AV\x04\x0b\xe6\xed\xdf\x08l\xe3Y\xcdIe\x86=\xc9r\x15Fd\xfa\xa6\x82\x9c\xcf]\x08,\xd1\x01\xcb\x85\xc9\xa5\xfa\xc1\xd9\xd7\xe6\x07\x02\x9e\xda\x0f(m\xf9\xce_)\x14v\x03\x9etK\xf2\x1d\xa4\xd5X\xd0\x8b\x01k\xac\x95\xdf\xe3{\xf2kA\xe2\x80\x98K,\xfd\xd5\ns\x1f\x98\n\xcc\xfc(\xba\xf6\x83/c9h\x97\xb8\x1e\x94H\xf3\xd0q\xea\x8b+\x9e\xb0\xadx9\xc1m\x8af\x16\x9eh\xa9z\xa6\xf1\x15m6GQ9a\xa8\\\xe7\xa7|\x84q\xed\xf3#\x16,v\xe8H2'R!!U\xae\x08Fj\xd2\xd6\xae\x16\xc3\x9aP\xc9Jz\x15\xde\xab\xb3\xd7\xcf?\xbf\xbd\x10\xfa\x95R\xc1\xdf\xb6\"\xc4j\xa8w3\xbb\x0d1\xb2\x9c:h\x1d\xdc\x03?#0\x1ck\xe7\x03\x83'\x8a~)p\x9c\x0c\x0c1\x02\x0c\xf1\x96\xb1\x9d\x91\xb9\x1d\xb9b\xb5)\xd5G\\\\\x86\xa6\x04\xd3\xa2\xfd\xa6\x86d~N\x93x\x0e\xcc3\x141\x88h\x12\xd7\xcf9\xc3&|\x16J\xe9D\x9b\xba!\xe4y.SA\x0e\xa2\x83u^{\x92;.l\x90^\xf1_\xc49+[K\x17\n\xa2R\xf0\xe6\xf9\x8a\x04\xe1,$\xd3\x12-\"C\xcfQc\x06v\x92RD\x19\xc6\xf3\x88\xf0\x11r_]\x07\x83\xc6\xfba,pn\xed\xad\xa72\xb5k\x84\xb1\xd1\x0d#\\w\x18\x7f{\xfe\xee-\xc7\xde\xb51P\xbci\x1a\x81\xf4\xae\xd1\x7f\xb1\x8f\xc9-\x14\xb6\xe6\xdcb\xc7\xa7V\xaa#\xf0\xf8X\xf5\x05\xac \x93\xbb\xad1\xd7$\xf6\x86\xc3\x9a\x19\xdf\xa1\x96\x96K\xda\xe4\x956\x81'\xf4\xa5\x1aXLn+\xd4\x1e+\xef>\x9f_\\}>?\xbb\xfa\xf8\xe9\xc3\xc7\xb3O\x17\x7f\x1b\xeb\x92\xa1\xfe\xf5\xf9\xf9\xd5\x8b\x0f\x1f\xde\x9e=\x7f\x7f\xf5\xd3\xf3\xb7\x9f\xcf\xc6\xb0\xab/\xf5\xfe\xf3\xbb\xb3Oo^\x8aR\x87\xfaR\x1f?\x9c\xbfA\xd6@)>2\xd4\xfa\xe1\xa7\xb3Oo?<\x7fu\xf6J\xed\xc6\xce\xa8\xf9E\x18\xd3\x85\xf1\xea\xc3;\xc1\x10\xbfD\x19[\x97\xf3\x12H\xb2\xd1P\x7f:\x02'v\x89\xc7\xab\x0e z8\x98NS\xe0\xe2h\xe2\xbd\xfa\xf0\xeey\x9e\xa7\xe1u\x91\x93\xf7\xfe\x92d+?\xe8\xfe6\xd3\x7f\xdb\xf5Y$>\x13\x00\xe8\xf5U \xbez\xc7\xe3\x9d\xbc#\xf9\"\x99\xf2\xef\xf4\x98\xba\x94W\xccP^\xe1\x85\xd9\xcb\"\xcb\x93e\xd9_J\x18\x16\xdeU\xe3\xb9\xb0\x97\xe4^U\x9a/\x9d\x16\xba\x1f\xf0`]\x95s\xa0\xea\xd7fL\x12f[\xbb\x87\x96\x0b\xb3\x16co\xdaw\xa4\xcd\xbc&Y\x98\x877\xc4X\xa7\x1e\xcb\xf5\xab\xfc\xc3\x0dI)\x07E\xa6\xc6\xe1\x9b\x90b\x93\xc9\x95/\xc3F\x06~\xf2/<\x05\xe2\xb0 \xf8L\x1e\xa5x\xa6\xefd\x19*(\xb5\xad\xbd\x01\xee?\x174[\xb4ms\x03\xdf\x9a7\xe8\x9c>\xeb\x08[\xb5\xf0j{\x02N\x14sA\xf9\xd2\xbbi\x00:\x96k\xb1\x88\xad\xd4\x8e;\x0es|\xcd(\xaf\x17\x19\xbf\x92w\x1b\x9c@\xc4\xca\x07\xc6\xf2\xf5\xcd\x06'\x10\xb0/dD7\x99]6lv\xc4\xa5\xe1\xd7jO4\xbeq\xd6\xf8\xf9\xd6\x7f\\\xf9[\xbf\xfd\xf2K1\x18\xbc\x1cl\xe1\xdfW\xfb\xec\xcf!\xbb}\xcdn_\xb3\xdb\xd1\xeb\xd7\xf4\xcf\xce\x01+\xbcs\xf0\x8a\xfdyMo\x87\xaf\xf1\xedh0x\xb9\xc5\xfe\xbe\xc2?\xac\xf0hx\x88o_\x0e\xd8\xed\xeb3z\xbb3\x18\x0c\xe9\xed\xab\x03\xfc\xf6\xf5S\xf6\xf6\xf5\xab\x97x\xfb\xea5\xbb}\xfd\xfa\x95&|Is\x05\xbdyu\xf5\xfc\xe2\xe2\xd3\x9b\x17\x9f/\xce\xae\xde?\x7fw6\x06k\xea\xe7\xfeVJ\xfc \x0f\xa7Vs\xfb}\xfa\xf0\xe1\xa2\xed\xa34Ir\xcdg\xf5/\xae\xce/\x9e\x7f\xba\xb8z\xf9\xd7\xe7\x9f\xb4F\x85Ji^\x0e6\xc1\xfa\xe5\x97-o\xb0\xf5\x14\x81\xfc\xe2\x00\xa19\xe0\xc0\xddg\xd0\xdcy\xcd\xa0\xb9;\xd0t\xa3Z\x1cz\xae\x1e]\x0d\xb3,d\x8e\xd2\xf1\xd4O\xa7\x0c\xff\xeb\x91y\xcbQ=n\xa4\x16\x00\xb4DV\xca\xf7\xa1\xb3\xea\xfa \xa6\xfai'\x13jj!3\xe2\xc00\xf5\x03\xb7\xbd\xb2I~\xe9\xc8\nr\x8d\xd6\x15\x8c\xa8B|3ln7\x13)\x8a\xe6\xcdFS\xcf\xef\xceO\x1c\x1c\xee\xd4\x18\x8a\x1df\xa3\xfc\xd4\xc0W4x\n\x8a\xef\xfc`\xf1\x89\xcc2.\xe1Bi\xc7\x157\x9d\xe264:a\x87\x9e\xcfX&E\x9cK\xf6\xf1\xea\xd8P\x98\x1f\xa2\xb5\x94^.V eZ\xaf\xc6\xae\x7fi\x94\xe7\x10\xb5\xdf\x92\xce\xa7\xf9\xd2K\xc9\x8cI\x91\xe7$\xffD7\xff;\xda\xea'\xe2O\xefl\xc7#\xf1\xaf\x05)\x08z\x04R\xcc\xdc\x86_\xe7$\xffk\x92\xe5\xef\x93i\xe7\x8e(\xbb*}c\xb7:6\x17q+P\xb5\x8dxSRN+3\xb1S&\x94>S+n\x08\xb0\xeb\xfd\xe0\xf1\xf3Z'74M+\xe3\x8c\x94^4'\x12\x95:(T\xc6\xc4\x13!\x97/_\x05I\x9c\x93\xafF\xdfdM\n\x10\x90\xd6S\xeae\x8b\xa4\x88\xa6\x9fWS?'\x08\x14_\x9ft\x18\xf0\xacA-B\x1d\x82\xbe\xc3\xec1\xeb \xb0\xc5\xa8]\xf6\xd5\xe3\x16`\xdcc\x016\x11P\xdbT\xadH:K\xd2%\x1b\xef\x9b\xd9{\x12\x90,\xf3\xd3\xbb~\xfe\xcb\xc4\xbb*\xf0\xcb\x17~\x1e,\x98\x86\x8f'\x8a\xc51\x9ajo\xac\x9f\nk\xe81`\xf8=0\xe0\xc8\x10\xedo\xb8\xfbT\xab?\x1b\x19\xfc6w\xf6\xd4\xf2\x183\xad2\x08\x91\"YN\x93\xa0\x10\xd3\xab J'^{\xe2\xc7\xbb\x84)q\xf4\xb5\xc5\xfeM8\xc7h\x9erf\xe5\x93\xe6{\xaf\xc8H\xfa|\xce\x1b\xde\xfe\xe5\xfal:'\xbfl\xff2\xdd\xf6r\x92\xe5\xb6\xa6\xa0\xf6\x1c\xd0\xf8x\xd0\x8d\xd7\xf0\xa9\x00\xd9\x82\xcc\x8b\x93\xa9\xc1:*\xe69V\x995\xa7~W\x8b8\xedz\x8e\xa5\x16?\x9e\xc7\xb1\x8cK:\x00\xc3Y\xb2,h\x93\xf4\xd2\xc5\x1d\xa5\xd9\xbch\xc5Z\xed\xb6E\xbe\x8c0\x8a\x1c\xda\x8e\xd1;\x07\xc6\xd2{\x8aP(\x1c}V\x00\xf1\x8bi\xfd\xd6\xd6]\x84Q)\xbbv\xd2p\xc8=\x16(\xdc\xf0?\x94db\x02\\\xdd\x0b:\xf7\x95\xd9B\xed=\xa5\xe1\xea2\x0bf\xeb\xc1\x03\xeb\x89\x92\x82a\xf9\xfc\xe9\x0d\xc6\x83\xd2C\xe1\x1c+\x10\x85\x84\xd2\x94A\x8e\xb7\xaf>\xbc\x93\x7f\xb3\xca\xc5\xddE\xf2\x85\xc4\xec\xc6\xcf\xfd\x8b\xd4\x8f\xb3\x19I\xdf\xe4d\x89\x0f_\x87\xbcQ\xba\x9d\x9fG\xd1\xcb$\x8a\x18\xc7\x8bO\x94\xdb\xd7I\xba\x14\x0e\xca\xf4\x9e\x85t\x16O\xde\x91i\xe8ce\xef\xc2%\x1e\x80\xcc\x8d\x9b\x9e\x03S\x8a\xce\xde\xf9+\x97\xfe\xc52\x1f\xfd\x90\x8e\xe1\xd7\x82d\xac\xeb\x1f\xa3b\x1e\xc6\xfc\x0f\xfb\xf2\xfc\xa7\xbf\xbc\xc5\xb5\x8e\x05\xce\x7f\xfa\x0b#\\\xc5\xddG?_\x9c\x93yy\x9b\x84q.n$(\x9c\xff\xf4\x176\xee$e\x83f\xd15^\x14\xb3\x99\xa8\x8b\x82\xfb|A\x08\xfb\x9c\xa2\xa1\x8b\xd4\x0f\xbe\xbc\xe4\x00/\x1f\xb0\xbb\xa4\x08\xb0G\x96\x88\xe7\xe1\xd2y\xcc\x18\x99\x93\xa1(Dl\xd1L\x1f\xb4\x93\xee\xccb\x92iv&\xddK)\xdd\x89\x8d73\xe0\xfb-\xa8,G\x15t\x81\xce\x1b3\xee\x8a\x94`\xc8Q\x17\"\xba\x10'\xd1%\xdd\xee\x1e\xc2\xb5c\xcd\xab8\x91\xa1\xa62\xbcI\x17\x024\x1c\xe9\xb1\x08T\xe2eQ\x18\x10\xfb\xd0\x85\xada\x97!\xafi\xbb\x9b[\xeb\xce3\xd5\x99c\xea{\x04\xc7\xeem\xd8o$xj\xee \xf6\x10\x9e\xd0s\xbf\xb9\\\xea\xee\x07\xf6\xc8PNrd\xb0w\x0de\xb8\xbb\x84\xa2;_\x0fAJ\xb8pG\xe5\xbd8\x0f\xb7o\x8a\xd8\xde;xp\xe5\xe5\xe3B\xd2\xb5\x84\x8c\x1d\xdc\x1d8\xdeL\xd7\xc3=},\xe6&\xee\xee\xda z&\x82E\x99M\xd0\x1e%\xe6&\xc6D\xf6\xc9\x08\xb9\xf6\x93\xa0l\xac\xb92T\x97\x93\xbe3\xb9&\xa4\xba\x98\xf4\xdd\xbd=\xc7\xde\x18\xd4D\x95\xa3\x9d\x03\x87\xc7\xedq\xc1jF\xcf\xd1\x9bG^QR\x8eG\xfb!\xc2\xfe\xee\xaa\x9e\x82\xe3\xa1%\x06\x8f\xb0\xb6\x12\xd1\xc2\xae4>\xfee\xb8\xba\xabPooRK\xfe}\xaa\xa5\xa8\x10\xa8<]L\xe3\xf54\x895\xe1\x18\x90\xdbB\xff\xdb\x9c\xf1Wbl\x9b'\xa5\xaf\x84n\x8e\xcd\xaeK\xbc\x9d\xa1qn\x1d\xed\xe4\xfe\x13!\xf5\x162n#\xb6\x87\x83\xa1c\x1b\xa7\x9a\xb7{@\x11\xbb>\xae\xef\xef\x0f.X~#\x8c/\xf4\n\xe5+7\xd1x\xa9\x88\xe7\x1c\xcf_\x07\xe8\xfd\xe0\xda\x9aQ|c\xa3!Vn\xcf>\xadU\x8ftat#\x89\xddk6e\xb3(\xdd\x01\xc0\x02\xcb\x86\xf1#\x17\x1c\x81g0@\x1e#ET\xf1t08\x18>}:\xda\xdb=\xd8\x1d<}:\xa4,\xc7\x9a4\xfd\xb7d\xb5lM\xa1\x07[0d\xe6\xc0\xd6\xbb0fVs(\x12\x06B\xc9\x0f\xf8\x17\x0cyFi\x90#\xb8 \xb30\x87E\x9e\xaf\xc6\xdb\xdb3? \xd7I\xf2\xc5\x9b\x87\xf9\xa2\xb8\xf6\xc2d\x1b\x15\x99\xdb\xd3$\xc8\xb6\xf1\xe3\xad) \x92)ar\x9f\xd30\xbe\xf1\xd3\xd0\x8f\xf3\x13\xac\xb2\x96:\xa6L\x1bHQ\x8e\xf5\xc4O\xe7\xd9\xe4\x92\x95\x8bi\x15\x9f?\xbd\xa9d\xdfRb\x19\xd8\x84\xa1\xeao\xc4\xea\xc0Qc\xae\xb6\"\x8a`I\xb2\xcc\x9f\x13t\xb4\xcb\x08>\x8f\x93xk)F<%7@\xe2\x9b0Mb\x14\xaf\xd2\x8f\xf1C\x1cG\x06~<\x05\x7f:\x0d)\x80\xfd\x08\x16$Z\xcd\x8a\x08n\xfd4\x0e\xe3y\xe6)n27<,d\x95oHM \xc0\xa8\xbc\x04\x85d\x14\xf6o\x04p\xe0\xa70\x89\x90\x9d\xc2\x8c\xb8\xb3\xd4_\x92\xec\"\xf9\x98\xac\xe0\x84\xceT\xf2\xc8\x8d\xd1\x87\xbe\xe3IC)]CJ\xb7\xeb\x1c\xc9\xd3\xf5Vk\x8bI\xa7x\x03\xedj\xaa\x86\xf7\x998\x03\x1a\x91\x04\xa1\x81\xf4r\xe1\x1d\xd5\xba+\xa4\xc6j.Up\xdat\xb1\x1aW)L\xf0\xd9%\x93\x94\xc6\xcd\xc8\xc0\xd887T\xe9\xdb\xbcu\xcd\xca\x9b\x932\xf2z\xdf\xa3\xdc\xb5_\xa5\x1a\xaf7\xa5\xa6\x0fi\x99\x8ee\xcdJMu2}M\xbf\xaa4\xda\x0bm\xadl\xd6{\xd7\xaaqU\xd7\xd6\x8aa\x0f\xfa\xd7\x8a\xc5;k]\x1b\x9e\xb2\xab\xa2\xae\xc2Od~\xf6u\xd5\xb7\xb6r\x8d\xb2\xcf:\x16i\x0f\xa7F\xb9\xee\xfe\x8e\x8dR\x1b\xaf\x14\x0f\x84^\xbd\xa7\x1fu\xf4\x1dq\xea\xda\x15\xe3WR\xcd\x0c\xcfIf\xe5X@\xd7\x9e0\xea\xe8\xdd\xa4(\xd5\xb9d>\xa6\xe1\x12\x0d\xfc\xfaV]\xedk\xd4\xeb\xe9P\x07\xbe\xd0l/|n\x88\xe5\xa0[\xe2P\xcf\xc4\xa7\xed?\x93O1\x970~S\x16{p\xca\x185\xb1\xbd\xb7\xebx\xec\xbd\x9e\n]\xdf\xfdWs\x8e\xe1\x04J\xc1K9'#\x0e\xd9\xbf=\x7f\xf7\xf6\xeck@V\xfcx\xc5\x97)\xf13\x9cY\xc2\x1f,\xfd\xf4\x0b\x0b\xfc\xc0n9\xe9pR%v\xa1\xe5)\xcc\xec\"\xfe\x12'\xb71\xb0g\x8e\xe5\xc0&/\x85\x95\x9c\x82\xc52\xfe\x89'\xe5)f\xe3\x99b9n\xd9\xe5U^\xa4\xe4<\xf7\x83/\x17\xa9\x8fQ\xc6\x0codk\x19)\xee\x01\xad\x10\x9fe\xb4$\x86\x0d\x14\xc4\x87\xc3\x9f\xd1.K\xe9\xcd\xca_iK|\x0b\xd6 9\xedOj\x8c\xbb\x90\xd6_\x8a\xb1\xb6\xae\xec\x1b9\x1b\x01\xce\xd3&Xc\xd0G\x0c\xc9)e\xd79 .lT\xc1\xfcq\x1e0\xe1\x07\xa3\nM\xd3\xe1(\xa1\xb4\xd6\x8e\x83\xd3%\x8884E\x91\xa0\xd3\x94*>$\xa5\xff\xc8$\xb6wv\x07\x8e\"h\x15\xbe\x83\xf8\xfe`o\x88\x96W\x07{#\xb5\\\xe5j\x82\xe5vx\xb9]\xfew\x8f\xff\xddw$w\xf1G\xecN\xf1T\xe6\xaat\xe9:b{\xd4Hu\x11r\x13\x08\xf5\xb90\x8dP\xa5\\E\x15\x103\xf5\xe6L\x14NX\x0c\xaf&\x92\xc8L\xd2-\xd1\xd3\xb61\xaaeso\x1af+\xca\xc82O\x0fo\xb5\xf032\xfdD\xe6a\x963\x05\x08Z\xeeNbs\x14\x89\xc2&\x8d\xa0\xec\x0f\xf4Y\xdc\xb4\nJ\x99\xaa\xdd\xbb\x12\xcd\x8a\xa1\xa2\x01\x8b\xf6\x05\x8b\x1c/\xbdy\xc3\xcf\xb6\xc6'\xe5\x0b\x17\xeaq\x86\x9a@\xd4\x04\xd4\x14\xe1\xfaz\xc1\x03\xa5\xfc^\x9e\xfa7$\xcd\xc8\xc5m\xf2\x91\x96\xb3\x89w\x95\xfb\xe9\x9c\xe4\xb4+.dJN\x9bf?\x02\xbd\x18}\xad\xbe\x98\xe6\x97\xd9\x99\xc8\x1dj\x14\x03!\x9e\xa3|=\xa6\xd6@\x05\xb8\x00$\xd3M7#X\xd2K3\xfaX\x1d1@]\xe6\xd1\x1c\xff\xcc\xb4H\xd1\xc8\x85\x99s)PH\x95\xf1\xb7-\xef\xce\x8f\xf5 \xa1\xfb\x9a\xafj\xcd\xc0\x1f\xb3\x84\x93o[\xc2\xd0 \xc8U\xdf\x05\xadB\x80\x16\x9a\xa9\x0bw\xa0I\xc6\x04\x1c\xae\xd3\x86\xce\xd7\x0f\x82bYD~^.\x85W\xbcM\x92u\x19pb\xf0\x83\xa8\xd5R\xb2\xad\xfa\xf3/\xe1\xea\x02;\xde\xab!U\x15nj\xe8U\x98\x92 _s\x14\xab\x9e\x95\x9f\xc59I\xdf\x12\xff\xc6\x00\xa6\xd2\xb4W\xd7R\xb5\xed\xaajlf\xcd;\xe3 ]L\xabF\x7fRO\xf1\xe97\x1f\x8d\x86\x93Q\x1fy\xaeyb\xf2\x88\xceC\xdd\xc9\xa8;I3\xc3I\x1aUI\xa6~Ws0a\xcc\xf9\x86\xc9\xd1\xacK\x8c\x04b+\xd9\xa1G\xbe\x92\xa0\xc8\xa5y{\x13\x7fH\xa7\x84\xd3\xedh\xfb\x95}$i\x86\x1b?\xb7\x193&\x13\x94\"\x0f\x91\xdd\xd8\xdd\xf5^\xf5f\x8f\x11\x81n\x0cZ+\xeb\xcd\xb9\xb3\xca\x86\xad\x95-\xfaVfy(\xe9\xf4\xae\xd2$A\x93\xaa7\xaf\xea\xf5\xd6\x17\xd2M\x03\xadH\x1e\x00\xcdF\xd8\xcb\xb3\x1b\x12\xe7\xccl\x01\xe7a\x0c\x89\xa7\x7f\xd3D\xf4\x8dr\xd9\x0b\xee\xde\xa7\xa9\x83\xbfk\x9d\xb2\xa2\xa4\xdb\xfa\x19\x06ku\xe51S@ZOw-\xfcR<\xd6\x1cD7\xdce`\xd1H\xf4I/;\x9a\xe4,\xfbh\xc4\"\x81\xfd\xfe\xe08\x93\x10#H\xe8\xeb\xc2\x94_\x8d\xf3\x81\xd9\xebd\xda0b>\x1a|z\xd3p\xfa\xb1\x1a\xbc\xeeY \x866\x00J\x84o\x0f\xa3|\xa1I\x8b\xb4=\xa3\xe4C\x9f9\x00)6\x84v1\x8b\x0b\x835XI\xfc2\n\x83/\x96>\x90B\xa3\xdcK\xc6\xe6\xf6(\xfe*)\xae#\xd2\xb7r\xa9t\xff&\xde%EF^%\xb7\xf1:e\xd7\xac\xfe]r\xb3V\xd95\xab\xff\xbc\xea_\xb2\xbbj\x90\xf4t\xf6\x06\x92\x8a\xfeu\xc4\x12\xbcbT\xc0\xdc\x05\xeb\xba\xc8s\xb6Cy2H+\x8cWE.?\xc8\xd0\x14K~\x92\x93\xaf\xb9\x9f\x12\x9f?sZ\xbc\xa8[#s\x88K\xf4\xb2\xe98\x05\xa0\xea \xc4\x85\x87s\xe3\xcd\x03\xb3\xceV]'DDJ\xf59\x8bY\xed\xc8b:=\xeeH\x8dx\xa8T\xf2SZ~\x92^\xb6a\x00\x96/\xe8\x11H`=\xb4\xc5\xf9\x8a\xdb0\x8a^\xd5Z4=g\xed\x9bG\xae\xc7AX\x1dO\x81\x94N(tz\x0c\xfey\x14\x95lC\x17\xd5)\x98<=\xe0\xeby\xbc\x15\x12[\\\x14O6\xfcpc\xb4\x82\x89&\xf1\xe5$\xbflC\x8ab\xfcf\xf0\xeb\xc4\x06\xe2B\xf8\xa4\x86i\xd0=\xb7\xb9\xa1<\x87)\xef`\x8f=\xf1\xa0J\x90\xf2\xd4\xe7\xc7{\x7f\xca\xbb\x84g\xe8\xf2\xa3r\xc5H\x83\x9a\xfd\xa1\xdff\x7f(.a\x87\xe8O2\x03|p^\xba@O \xda\xc8\xab\x8dF\x1e\x83\x19\xf2\xccv8D.7\xa4\\\x91~q4\x11K\xf3 \xdf\xdea+\xbc\x99\xebU\x13\xdefR;\xc0\xbe\x05\x1a.X!\xba\xd2$ Y\x86U\xffo\xdaHW\xf5b\xcf\x04M\xe8\x94\xfc\x01d\x88%\xe1\x14V0\x86\xa9\xe32\x80Q\xaa\x0c\x93\xb1\xfa^JP\xd5\xfd\xd2/\xe6\x8b\x9c\xe9\xc2[\xbbyu\xb5*\xd29\xe90\x81\x89*S\x0fc=\x12\x91\xf4\xc2\x8f\xbf\xf4\xcb\x8f\x1d\xd5\xeb,\xef\x0c,!\x0b\x01\xf0\x8d,a#\x85\x97` \xd5$A\xfa\xe8:7!\xb9\xed\x9aK(\x83\xe9\xd1\xd2U\xd0n\xbc\xd5\xaf~1\xfd\x89\x16e\x82\xf0\x99\xf4n\xc3x\x9a\xdc2\xcb\x81\xb2b\x8d\x87%H\x87P\xeea\xe2\x85W\xdcKM_\xb8<\x0eO!\x16!o\x7f\n\xc9-\xc6t\xe5\xfe'?\xb3\xc6\xc7\xc0z\xd1\xdc\x85MffJr?\x8c\xfa\x00\xac\x04\x12\xfb\x84\xb6\xdb\x199\xbb5B\xa6\x0b\x89\xda\x16oCRZIy@\x1bf\xa3\xf8\x85\xe7\x17s\n5\xcc\xa3e\xfb\xcc\x0bT^\x94\xfe\xb7/J\xb5\x93\xcb\xe4\xa6\x13_\x10\xcc\xa7\x1e\xe4o\xe2\x9c\xa4\xb1\x1f \x01\x1d\xdd&\xa8El\xdb\xae=\xc4R\xe5t\xe8\x9bi\xab}\xe1w\"\xd3\xbaF\x9e{\xff\xae\xdd\x90\x92\xbe\xde$#1C\xcah\xd7\xac\xc7?\xbdTS8\xa9\xd5\xf7\xdb?nH\x8d\xbcLVwi8_\xe4`\x07\x0e\x8c\x06\xc3}\xf872\x85\x9f\xfd\xdcT\xec\xefdz\xcb\xea\xabl\xc5\x02\xbaz\xd1E\xb0,\xff\xe3\xf6\xffQ}\xdc0\x1f(\xfa\xcd\x05u\xab\xd6:)\xa9D\xbd,\x91G3t\x02\xc8\x14\x16\xe1\xd9\xbe\xa5\x10\x17\xcdh\x95-\xe1,\xc4\x86\xafl\xeat\xf49plo\xcc\x9f\x0c\x92\x90\x85\xcbaR3Q\xa5$\x958\x81P1Y8\x81\xd0\x01\xc2\x9c\xfe\xda\xa8\xb32}L\xddb+u\xca\xaf\x13\xcf_\xad\xa2;\x9eP\xa9\x95\xbf,+\xaby\xc3\x86z\x82O\\\xe5D`F\xa0\xd4\x11\xc6\xc6\xa9\xc8\xcb\x93rG\x17\xde\x1f\xff\x9b\xe9G\xc2\xf2\xceZ\xd0\x1aKR\xc6c\xacy\x814\xeai0\x92\xd2\x85\x0eGk\xd7\xb4\xa2-x\xb2\x9e\x9e\xfa\x81C9\xc7\xd8\xb4(\xcb\xade\xf7\x95T\x9e\x0f\xf6zV\xc8\xdc.\xb8\x0f\x8a\xe3\x9e\x1b:\xd5\xf3?\x81A\xaf\xda]\x16*\xbc\xde\x9a\xe8i\xea\xc7\xd3diw\xfan\x18\xbak1\xf36\xdb\xf2\x82$\x0e\xfc\xdc\xae\x85\xc4\xc74\xc6cJeX\xce\x95\xe5\x82\xbd\xb9\x19\xc3&\xa4Ne\x0e\xb1\xb3\xff\xf8\xe43\x8dh\x06<\xb5e\xe39Sp\xec6\xe6\xcb\x07\x83\xd5|\x05\x8d\xdcc\xd9o\x87\x83\x81\x03\xa7\xfa\xd2\xd0-ZF\x94V\x06Y\x0d\xe9\xf2\xdd\x188.\xa46\xe5\x9d\x13\xa7\xdd\xd0\xdd\x14\x8c\\\xb6v\x7fh\xb4g\xcdInQ\\\xc1\xacW2q\xd7t\xfc\xb2\x9e\x07\x94aKR%\xdc\xb4\xc9\xf3\xcbBw\x0c^7\xe5\x0cE\xb2i\x0f_P\"\xf1\x11KTsP\x89\"\xeb\x9a\x17\xc7e\xce\x88F\\\x9f>=\xc1\x9d\x11\x9002l\x9aY\x94$iW\xef\x0c]\x0b\xb3\xf7\xfe{\xf4\x81\xd9\xc44\n\x03\xe6\x12\xc3v}\nc\x88\xd7O\xe8!\xe1\xa4Q\xaf\x87J\xe3>\xc3\x99\xa6\x91\x1b\xb4\xc4qn\xf4\xc1 \\R\xcaK\xddh\x98\xd6\x88\xcb\xd4\x93\x9d\xfe=\xd1\xb0n\x9aO\xea\x9d\xa91p\xf2\xa5\xf0\x8c\xba\x05\xd9\xe7\x0c&\xd5\xa9[\x92ofC\x08X\xe3\xd05\xef\x97\x7f\xa0\xe7\xaa\xd9Gr_\x9f\xc8b\xcf\xe4\xc3\xd9\x89\x0eR;Y?\xffZ\x97\x98gO/\xe69\xd0Iy\x98\x87Y\xf3\\\xc4A\xd5\x1f3\xbd\xff\xb0;\xc7\x9e\xd9\x14.cF<\x1ao[\x96\x94\xdeGk%\xcb\x82 \xb9\xd4\xb9\xf7\xa2\\\x7f`\xf0\x06\x8f\x1a\x11\xd8C\xb3\xe7\x1cH\x82']8`!^\x9ad\x97]\x84\xaaT\\\xe3%\xe72\xef<6\xa6f\x02\x0ds\xc21X\x1f,\xd8\x84\xcdMM\xf2oq\xddj\x93l@\xe3\xdc\xc1'\xad\x92\xf9\x99H\xeb\xa2\x8dfB\xaf\x7f?\xfb\xdb\x184\xf6#\xef\xcf\xce^\xe9\xd3\x17\xce\xfc,\xffw\xa2\x86\x873mg\xcc\x1a\x90\xc8A5\xb5n\x0b\xcc[]\x9f\xb6\xf2\x14\xacs\xca\xfdX\x1f\xd1X\x9f\x98e\x1d\x1b!NOk\x04a,\x97\xd5:\xf4\xdaj\x97{lT\xd4\x9bu\xd6R6P]_\xc4\xa5\x9fLq\x86N\xd2K/lNl\x13\xf2s\x92\xffL\xfc/\xeb@\xfeQ\x00\xd90\x84H\x84&<6\x86\x7f\x088zi\x05\x92\xf8uJ\xc8o\x9dBn\xa8*\x8f\xd0\x1e\xd4\xa3\x8b\x9b\xfe\xc2\xd8vO\x9e\x80\x00\x13\xfd\x1d\xd8u\xb6K\\:\x02\xb0\x8d6c\xfc\xee\xef\x0fe\xb8\xe77\xd9Y\x19yC\xfb\xf5Z\xb4\xc9\xef\xdf\"]\xd6W\xadw{\xcf]\xb0\xaa\xc8F\x0d\xf7w\x8e\xf2\xe4xG\x947\xf7^\xbe={\xfe\xe9\xea\xc5\xdfPs\x847\xf8\xeb\xfd\xd9\xcfW\xcf?_\xfc\xf5\xea\xecS\xf5\xe0\xfc\xe3\xd9K\xfa\xe0\xea\xc5\xf3\x8b\x97\x7fm<.\x1f\\\xfc\xf5\xd3\x87\x9f\xdfkJV/J\xc5\x05\xedCLn/(}\x1b\x9f\xa5\xed\x9eg|u4\x97\x0e\xc5A\xda\xa8\xcd+\xff.J\xfc\xe9\xb8%\x83$\xd4\x89y\xb5C\x18/\xf3[z\xa59@\xca^\x91\x8e^\x9c\xafH\xf0\x8d@\xc9\xbe\xbd\xf9o\x06\x81&\xbe^\xef>\xbf\xba\xa6;\xd7j2\x01\x0d\xc4]~\x9c\xadH\xa0i92\x1f\x02\x8dO\xb5\xad\x06\xbac\xa5\xfc\xd4/\xf2\x85\xa6\xd5Y\xedT\xc2\xd2\xb8\x80\x95b\xab\xaa\x18;\xc9\xaa\x92W\xd7w\xcc-\xb37_\xb6\xaf2X\\\xc6\xaeK\xdcY\xba?3\xa5\xc0\xe5\xda\xe1C\xdaH\xed\xfb{\xb4\x0fa6?\xc4\xa1\xef*\xeasMfs\x7f\xc7\xe1\xec\x96\x0b\x16s?5E\xaf\xeaE\x98H5\x0f\xf4\xee\x88\xfb\x0d\x19\x0bO\xf7?\xd03\xb0\xfb\x03\xbd\xf0e\x7f\xb0\xdb7\xdc\xb1\x10nli\x98\xa1\x98[U\x01W\xd3\x0c0\xe6\x16W\xe2\xd6\xd7\\\x92r?c\\@\xb6s\x04\x9b\x9b9\x1cCl\x0c\xb3\x99\x1a3\\3\xafa\x92\xdb)f\xcfK'\xc3\xcbv)\"\xbd2\xd9\x0b\x98\x9f@\xa9[{\xccm\x0fO \xa9?\x9f\x13\x96\xfc\xaa\xf6p\xe1\xa3\xe5J\xfda\x86%\x8b\xbauK\xb6\xde\xdc\x0f\x07{}$c*\xd8$\x93\xd0\x13)_x\xbc\xb5u\xd4\xe4C\xb8\x94~\x12_\xb2\xfc\x83\x92\x19\xb0\xf6\xac\xd8\x1a>z\x8f\x0c\xba\x93\xd1kFS\x0d\xe4\xeaj\xea\xe7\xfe\xd5\x95\xb6_\xa9\x9d;p\n\xf1D\xc3:\xe7\x94u\x16\x8f\xc7`-\xfcla\xd1\x134\xf6\x96\xfe\xea\xd1\xe31\xb8C\xed7\xe2\xf2\x89\xf0v\x06w\xa8]\xfd\xc6\xec\x11\n\xd7\x84\xeeD \x9dlA\xde\xa5!\x85\x86.:\xc6)\xf86*\x93\x12\x9b\xe0\xba tg\x89T\xddc\x94\xb8v\xc0M\xee\xdbZ\xbd'\xde-\xb9^\xf9\xc1\x97\x8fIt7\x0b\xa3\x88\xab\xe4\xa7d\x95\x92\xa0\x99\x17\x14=\xdeW~\xbe\xc8\xb8=I\x15z\x99\x7fY\xde\x9e\xb0\xf4\xb3z\x06\x8f\xb8`\xb1dM\xda\xd8f\xb5p\x91\x9a\xf0tk\xc5>#^\xd4x\xad0\xd6\xad\xfd\x0c\xffG\xfa\xa8\x11\xc64\xfa\xd8\x9c\xad\x13\x18>R_\xab\x9a&\xd4\x07@w\xdd\xf6\x7f\xda\xa7\xe3\xc1\xfdd\xb8\xf5\xf4\xf2\x97\xe9\x8f\xce\x9f\xb7\xbb\xb6\x88\x01\xa3$\x95\xb1\x8f>\xef\xfb\xc6\x86\xfd\xff\xb3\xf7\xef}q\xe3\xc8\xe20\xfe\xff\xbe\x8a\xc2\xe7\x9c\xac=\x18\x03I&\x97\xce\xb0,\x03\x9d\x1d\xce\x06\xc8\x0f\xc8\xcc\xce\xaf\xc3\x971\xb6\xba\xdb\x1b\xb7\xddk\xab\x9b\xb0\x9b<\xaf\xfd\xf9\xa8$\xd9\xb2,\xd9\x86\xb0{.\xcf\xd7\x7f@[\xd6]\xa5RU\xa9.T9\xd3\x18\n\xc9`\xc4*{\xf2\x04\\\xd5EI\xde\xf0A\xb2\xb1\xc7M\x87\x0b\x1e]\x80xX\x80\xc0\x1f`k\x97\xff\xfa\x0f\xf4e\xcfi}\x8c\xc5\xfb\x80\x99\xd2]L\xf5\xcd\x82\xed(\x17\xfa5\x8a\xe9\xa2\xf9z\x8b+\xd8\x18\xf1\n\x86\x03P\xba\x82*\xae}\xc8\xa1\x83\x90\xd2\xb1\xa1`\x1f^Y\xc8\x9dg\xfa\xfd\x99 w\x9e\xe9\x0e\xc6\x05V}\xa6\xd3\x99\xa5\x99*M\xc5%\x81^\x0d^\x18\xb9\x85\xd7&\xa4S7\xf7\xdats\xea&Zj\x8c\xa9\xa1\x96:\xc7\xd4\x95\x96\x8a\xe1\xdd\xea%q\xb9\xe1\x91\xe2m(\xfc9!\xb7W\x08vk\x97\xbb\xe3`\x7fQ\x97\x8c\xbb\xacqw=\xae\xd5\x947\xca\x9e\x84K\xb5X\xee\xf1\xd01j\x96\xf7E\xbeHJ\"\xb3%\x01\x0f*N\\^_\xd8\xc8|A\xa8Z_\x88YV\x8d,\xbf\x90\xf0\x93\xd6\xec\x8ao\x0fw=\x08ZK\xe3=_\xa62\n|c\\9r\xcf6\xfd\xbc\xd8\x9d\x8b\"\xf4\xc1>\xa4n\xc6\xdd\xdbh\xd7~\\\x81P*)\x18/\xf7\xf1Z>\xea\xbc\x967\xac\\\x9b\xa6\xc5z\xa6\xc3\xea\xc1\xe9\xb4T\xb1\x1cVE\xb5\xca\x96j\xe2a\xd5\xe0\xfa[\xaa\x98\x0f\xab\xa2\x82\x8fFn\xa3\x8a\x81\x8235\x05\xf2AV\x0d\n\x89\xfd\xecu/\x95e\xbf|\xce5\xaeG\x88nF`\xb4%\x13}W\xb4arq\xaa\xf49F\xb4v\xbf%T\xe1\xd8\xf2\xd5\xce\x90Au\xf2\x0d;\xdc\xb9>\x1e\x82\xe8[\x97x^\xcdJ\xc8x0l\xf3f\xf0\x03$o<\x94i\x91I\xee\xd2I\xb6\xb9y\xe5]\x19\x07\xcf\x8d\xf2\x90\xd7\x16\xf4\xa8\xa6_?h\x02\xccr\xfb\xfaZ\xb45\xb4\x0d\x1a\xacIQ&\xdc\xef\x92PE\x92IA\x92\xc5\xe4\xf3\xd9\xd4u\xd6;\x81\xe3u\xe7\xd8e9\x9e<\x11\x02:s\x8eW,\xcf~\xcf\x85cF>\xd3\xcb$\xd2n\xb1z\xf4u\xfaUX\x18V\xad\xd5X~\xefDa\x9a\xde\x84\xd1'\xa7\x92\x1eb\xf8Y\xb8!\x8aZ\xcb\xef-\xaa\xc5ka\x07\xc7c(\xb4\x94\xb3\x8de$\x8e4\x06F\x92\x0f\xa2\x85\x9d\x1e+_\x8b\xc2\x97|$*\x08\xe4LZ\x8d}\xa0G}K>\xed\x1a{ie\xf5\x11\x1aT\\]\xdb\xa2X&\x1f=\x10\x89\xfat\xe9w\xc9\xe7Q\xbbjU>\x93Ooo\x9f\xffk{k\xd5N\x93OW\x87\x07\xd9b#.D\x12SRS\xee\n\xb6\x90\xb3 \xb9\xb9B\xc8\xd0\x9e\xdc \x1e$\x93ps\xf3\xaaa\x8d\x10\xf6D\xe5\xfd\xe6YQ\xcd\x03zt\xfd\xbf\x0e\xbd\x81\xd68<\x14\xe3\xd5hL=wU\x07\x89\xdf{f\xcdx\xbb\xa6\xb5\x89\xcc/\x84\x97E\x93<2\xe9;\xb2\x92\x0c\x91\xe0$\xbb\xc2s(S\xfc\xc2u\xd9\xb5Y\x84\x10y\xf5]\xa9F\xfe\xca\x83i\x91/\x00\x9d\x83\x85i\x9aG\xca\xcf\x0fY\x19NI+\xe1\"\xcdo\xb5#\x81\x91\xa3n\xe2\x16\xdc\xa7\x0c\x0d*w\x94\xa1\xe7C\xe2\xe6<~b\xc8\xdb\xea\xa7G\xf0h0x\xce4\x1f\x0c\xceA\xe34\xc8rq\"\x88\n\xcc\x94\x8biRX\x0f\xf9\x1c\xdc\xb3\x8b\xbdg\x97\xd6\xc5\x8e\xeeI\xb0j\x9b{6I\xae\x0d\xc1\x14\x98\xc2\x05\xc2>\x14\xc14\x91Z\xc1\x8c\x86\x13\xaf\xcaoT\xb07\x8c],z\xaf\xf2\xe9?a\xec\xf5\xd2\x98\x16E\x01\xbe\xff\xc2\xce\x15\x01\xeb\x81`G{\x05\x87\x83h=u#e\xee\x8b\x97\xdf{\xae3\xcd\x8bq\x18\xcd\x9dA\xa8\xa8O\xe3\xf5\xd9\xaeY\x10\xf1\xcc\xe2\x06r\xf7\xb5.)\x10\x82\x88W\xaa\x18\xd7\x1dL\x8c#R\xc3\xf8$+T\xcfL\x8d3\xdb\xbaC\xfe\x01\x9e6\\\xe5n4\x84\xban)\x9c\xc3r\x97\xb1D\xb0/\x0c\xc2\xcb\xc6\xd1\xf5T\x04\x8c\x94\x8c\x0dFO[\xa1I\x13\xe7\x0b6\xd0n\x08\x93\xc3J\x7f\xd3\x89\x1c\x11\x93KI#2\x04\x97\x92v\xebx\x9e\xcf\x0d\xe1\x1b\xa3\x82Z\x91\xc6\xe0\xc6\xb0\x19\x96%kgP\xc5\x9fI\xfbs\x1d\xa2G\x8fK\x0c%\xdb\xfen\xee\x96\xac[ld\xb5x\xf6\xab\x17\xcc\x86\xf2\x83b\xa9|\xdd\xef@u\x0di^\x15\x945\xf1@\x06\xe6\xc5I\x1b\x8b\xf3LY\x1c\x86\xceh\xa5\xec\x03#H\xc4=\x88\xf8\x8e\x16\xe8\xcd\xef\x19\xb7qS\x1a\xe5\x1fqA\xd3\xba\x0f\xca\x17\x0d\x18$ \x945 \xac\x0c\x80P\xb6\x00\x01},\x98\x16\x1d\x05\xd3\x86%G\x9bd\xc3J7A\xc1\xa0\x01\xa4\x82B\xa9\xafv*V;\xf5D\x0c\xbd\xe8~(\xa9\xc6\x12\xadp\xb9\x02I<5_\x01={f2\x18\xcb\\\x8b\xb0rwW\x17nrt\xb7\xfbB\xc7M\xdc\xa7D[R\xa9\xaa\xbd\xb8TS\x82\xd5\x87\x88\xbe\x05\x97&\xb8\x8e}\x98\xfb\xb0\xf6a\xe1\xc3\x0c\xf6`\xa9\xaa\x89\xdbhU);n}dD\xa5Y\x94w\x87\xc2\x06\xde\x11\x06\xd9Oa\x04:\xbae\xcf\x0d\x92\xe0\xcd \xb6q\xc6\xb3\x1e\xe3\x8e\x84r8i\x99v\xb0\x1a\x13wf\xd4\x19E\xba3\xe6\xa6\x072F\xef\x1b\x88\xe1\x0fp\xf3\x06n67\xcd\xd46\xab\xd1]\x08G\xacwn\xe8\xce\x91T\xbd\xb9\xf2\xf0\x8em.\xee\xd8\xee\\L\xf3P\x06\x81\xb7_\x0b\x1e\x0b\xb2\xba\x9a]4!\x1a\xcd\x7f\xcd}\\\xc3\x1eTq'\xde\xc0\x066\xb9F\x8e\xc3\xf5\xbc \xce3b\xb8\x14\x06\xb5\xb3\xb9\xbb\xf6\xe1\xce\x879\xb7\xc5\xe3w\xc4\x03\xba\xf6\xd5\x0b~<\x1f\x1f\xfc\x99\xc7j\xa5\xc1\xf9\xf8\xf2\xc3\xf9)\xec\x89\xdd\xf6\x8d\xe7\xb3\xd5'u\x11\x1c\x8d\xdf\x1e|xw \xfd\xfe\xa9ww^\xf5\xf8\x9d~)\xfcL\xbf\x12\xff_\xdf\xdb\xdf\xb4BR<\xb7\xdcm\xec\xe8\xdb<1\\\xf1\xdc\xdf\x94\xd1rH\x85Fm\x8aD1pD\xee\xc5\x0d\xb1\x18\xddd\x83\x00\xad6a&\x1f\xec\x96\xd6+W\xa8\x869O_\xeaGCU\xcchc]}\xb5-\xdc\x0e\xa7}\xd9\x7f\xdep\x05\xa7\x07\x82\xc9\x8cxp\xf8\xda \xb39FQ\xde\xe2(\x10\xa6I\x16\xa6ig\xd7:;\x0eP\xb9&\xeb\xcf\x08r\xa4Q\x9a\x97b\x00\x9d\x05\x9aF\xe6\xdcu\xc5\xe0\n\x86\x0c\x0e\xba\xe6\xde\x93\xa8\x15{\x1a@\xba\xd2\xb0\xd9)\x81d-\xb0\x11s\x03a\xdbu\x8b|V\xed\xab\x05\x90\xd8\x81\xfb\x83GM?\xae\xff\x93U\xbcNh\xe7u*\xcffA$\xa0\xf8\x80\xbaa\xa7+\n\xae\x01\xd6\xa3T\xc5\x88,\xe7\xc9\xdfV9}\xd3\xe1\x8b\x83=7\x05 ?\xd9\xb3\xf0\xd6^\x0di-\\,\x1f\xa5\xb1\xd7C\x1a\xfb\xb7\xcfO_>Fk/:\x14\x0d\xa1j-}\x94i|\xd1\xa3b\xc8\xdb\x9a}k[\x83t\xd8\xa2<\xa3I\xb6j\xdf\x0c\x81\x95\xc5\xe3|0j\xf6\xbb l2\xfcX\xaen\xf8\xb5\xb5\xbb\xf2!\xf4\xe4e>\xe3@\x19+\xbc\xa9#:s\xe5b\xaf\xca\xfa\xf7Y\xc9v\xe50\xd2C\x0c<\x92\xbaH\x83\xea2\xfa\xa67\x851\x0b\x852\xb5\xd9@\xaf\xcd\\\x96\"\xbf\xce@ [\x92\x96FId\xb8\xb5\x9d\xa2p\xa1\x99\xb6l\xa3\xabvx>\xf6\xd0|yp\x93\x17t\x04N\xc8\xfe\x1b\xd0\x1f\xcb\x92%\x0b\x0c\xe11\xce\xe2\x11\x94\xae\x13\xca\x04\x92\xc5\\\xff\xb9\x99\xd4]\xcb1%<\"H\xb3\xaeD&\xeb5\xd6\x1f\xba\xeb\xbd\xa0!\x1b\x89Zg\xc9\x92\xf4\xfax\xa2\xb1\xae\x1f\xd3U1\x02\xe7&]\xe9&\xed\"\xc3a\x98\xbdO\xc3\xbb\x118Q\x98-\xd3\xf0\xae3\xdb\xe5\xbc\xc8W\xb3y\x9d\x9b\xf2\x04K\xa1y\x98\xcd\x08\xcb\x8c?,\x99RT\x01w\"\x8c e\xce\x92/\x96y\x99T\x0b\xe6Du\x82uu\x94Bb\x1e\xd5b\x1dS\xa6\x14\xfc\xb0\x8cQ&\xa0\x96\\a\x9a\xadhF\xc9gzB\xb2\x15\x16\xc2\xb7\x05\xc9V\xb6\xecK\x9c\xf8|i\x9b\xf5\x15v{e\xe9\xa9\x12\x1ek\x04N|\x93v\xcc\xe1Q\x11\xceX\xa6\"\x9c\xd93\xf0\xd9ey\xac\xd3\xca\xb3QRT\x19)\xb1\x80\x16f\xfd\x9cP\x99\xf3sb\x1bG\x11\xce0\xc0\xa3\xc8\x99\xb2\xdf\xf6\xacg\xeb\xaa\xf5|\xdd\xd5\xb8\\w\x96\xb3c\xc1\x8f\x8a|\x89\xb9\xf2\xa5%\xc3\x8ao\xd7\n\x9ec\x91\xd0\x05\xd7\xe3\xc5\x92&\x84\xcd'\xe1\xbf,\xd9\xb2\xa8\xb8[R\x9eQ\xfe\xb6e\x8dE\xb6\xd8\x9a\xa5(r67\x84\xfd7gy\x9bG\xabr\x04\xce\x94\xfd7g9\xce\x96\x08x<\x02\x981\xcb\x9f\xc9\xddQ~\x9b\x8d\xc0\xf9D\xee\xe2\xfc\xd6\x82\xca\xfeL\xee\xde\x17\xa4,y\xbe%\xfbi\xcd\xf8a\xc9s\xad,\xab\xf0\x0e-\x93\x19\x0f2\x92f\xca\x8cs\xe9\xca|Bh\x18\xab\x05\x16\"\xc1^H\xc2\x0c\xcb\xdf\x013U\xe0\xb8\x118\x0b\xf6\xdb>\x07U\x108\x99\x95qW\x1dY\xcfp\xee1gn\x9b~\x9e\x91\xef\x03\x9e\xd3\xba\x11D\x988\x99\xd16\xbb\xef\xc3\x121\xdd\x92\xfd\xb7eY\x95<\xcb\xaa\xb4e\xe1G\x89\xfd\x1ca\x19\x92l&\xf2$\x99\x05\x19\xbd/\xf2\x99\x80\x9b\xa5\xf8i\xcex\x1eRRm\xcb\"\xa4\xa4kKr \xdb\x08\x9c\x12\x7fX2\x11\xf2 \xb7Y\x89?\xec\x99\xf80J\xfe\xcb\x96-\xe5\x91=\xab.\x962\xa5\xb3\x9f4LS\xde\x07\xfe\xcb\x92mU. b\xec\x92\xff2g\xbb$\x9f\xa9\xdc\xd1T\xfe\xb6dM\x16\xa4:\xf3h\xb2 ]\x87\xdde\xbe\x8a\xe6\x87a\x16\x116\xa5\x94\xbdE\xf8\xd6\x91\x9d\x1f0\x98\xd7\xde_\xf6U\xec\x17\xcci\xdf/\x98U\xeeX\xcc\xdb\xb1e\xf1\xda/Q\xa9>Z\xa5\xd4d_3\xcdX\xd1\xcfy\xbaZ\xd4P\xb7\xc6\xd7\xae\xf5\xfc%L(\x87\x96[\xfe\xcb\x92mNp*o\xd9\x7f\xcd\x04\xb4Y`\xcex(\x1e\x85\xa6\n\xa2w|\xe4\xc0\xa6\x90\x18\xb9\x8d8\x04^P\xa6ID\xdc\xa7^\x93\x1dX\xa3j\xdb?\xbe\xa2VE\x93\x94>'2\xd2Z\x1d\xa4\xb0}\x990 p\xad\xa9\xa2~\xf99:\x8f\xf9)\xcc\xe2\x94\\\xe6\xcbwdMRw\x1d\xcc\x1b \x9e\x0f\xeb\xa0]=\xec\xf5{ll\x8e\xa2$t\x9ca@\xcc\xbe\xae\x19\xdb{\xf2\xc4\x98\x1e\xd4\xd5\xb6\\\x01j\xb3X\xb6\x9b7\xb5.5\x88\xdc\x0dc?\xbe|\x01\xe3\x87\xa0\xaa\xdf\xed\x0e1\x97b\x81\xcb|\x80S\xd1\x86\xa4\x98\xfa\xd0\xed;O>b\x00=j}\x95\x16\xde\\D\"\x99\xcc\xaf`\x0f\x96\x9b\x9b>D\x13\xf6&\x82\xfcV\xaf\xed\xe5\xe6\x11 `\x0f\x92V\xc0\xc6#\xc20%\xc9\xa2\x84\x94\x13r\xd50f\xcb\x87\x08\xb3P\xcb\x9d\xed\x1c\xabu[\xa1\xc7\x99\\\x89X2+\x1e\xa7\xd8\x91{\x9d\xcb\x86Wht/v\xbd\x07\xfbfp\xa2E\xb8\xfcqu\xc3\xd6\x11?(\xb5\xf8\x12e\x08\xb3\x9d\xd4\xe5G\xfd7\xd5\xa8\xd4 \xaa}@%Gg'H~\\\x88\xf3\x96W\xe4TGqc\x02\xe4\xa1\x0c\x1b;\x9d}\x16\x01o\x95\xf6\xaa\xea\xeb:\xee\xd9cC\x0d\xc6\xc2\xbf\x1c\x9f\x1e\x9d\xfdr\xfd\xd3\xc1\xe9\xd1\xbb\xb1\x1c\x0bR\xd4r(x\x86p\xbe\xbb\x1e\x9d\x9b\xba\x92\xde\x16\xa3s\xef1\xbc\xb7\xa2dUEf\xc1}\x96\xf2\xd8\x17_\n\x01 \xf3\x04\x90`uI\xe6\x08\x15\xd7\xc1\x93\xd5\xecO\x92\xf5\xf5\xa8U\x81\xec\x10\x96G\x1a\x97u\xca\x87\"\x10\x1f\x85N\n\xbeck\x98\xc0\xba\x1d\x9b\xf7\xd6\xb0\xb6W>\xc4\x93\xd5\x15\xef.n\xc7\xbdVHy\xe8;.\xf4Z\xfb\x03\xd5\x80b\x867\xa8\x9f-\x85bK7\x1aK\xfd8\xfdhB\xcf\x90\x8e\x88\xc86<4\xe9\xfbpF\xfe\xf2k\xcfA\x86\xb7\x17\xfa\xad\x1e+\xdd\xe9Kz-\x9c\x86\x9a\n\xba\x0e\xa2\x19\xfcm\xd2\xe3\x92\xf7$\xaa\xd3\x06UQ\xa0k|$+W\x85\xc0`?\x87\xe9\x8a\x9c\xe4YB\xf3\x02 \xba\xdeq*\xae.\x90T\xc0K\xdcu`\x984\x97\xed\x80\x0d\xcc\xb41\xed:|\xd8$\xac\x82\x82L\x0bR\xce\x95~\x95\x96\xfb@\xd3R/\xf8\x18\x94\xd2\xe8\xebzZ\x87\xecR\x1fm?To_-\x06\x08\x83<\x904\xc5\xd4Ur\xa5\xd1P\xb4\xe6\x94k\xb4^\x17\xab\x94\x94\xd7\xd7\x0d\xdd\xf0\xeb(\x8c\xe6\x04\x13-\xd7\x8b\x85Bp\\_O\x93,\xc6\xdcv\xaa\xa5\xad\xf7W5-\xc8\x04~\x8d\xb7\xb5\xfb\x06\xa8\xd5\xb1`\xb3\xe0ds3\xbbB\x85\x01\xae*s\x0fO\x83\xbe6\x82(_,\x93\x944\x07a\xbaB'\xa2\xfb\x06\x96\x83M\xa1\xe3hT\x0cQ\xc6)\xecI\xddn\xda\x8e\x04\x84\x13\x98\xfc~\xe3\xf5\x18\x07\xa8\x95\xa2\xae\xfe?\xd0\x07q\xaby[ OY\x92\xc7\xda\xe2\xae\xf3:\x86oD\xa9\xec\xc9\xd4)p\xd1!X\x86\x13!\x07G\xf9\xe0\xbe|\xd1Z\xe5#\xcd\x82if\x88M\xdd\x1a\xad\x0d\x1cB:\xd0\xf2\xa5\xa8a\x99o\x01\xa3\x11\x1a^\x12\xb1\xbe\xea>\xa3\x19Doq\xb5\x81B\xb5\x8c\x16V\xd1\xef\xc3\xa2$\x05\xb0\xe9C\xc3\xb2i\xbeB~\x1f6A7K\xd7\xf6Eq\x15L\xa5\xf1g\xebK\x98b$c\xfc\xff\xe5\xcb\x90]\xdf\x9c\x9d\x1b2\xcd\x0bb4\xf7k\xb9\xb1ZK\xcfx\xbd\x93\x94Hm\x9c\x8eI\xca\x1fs\x92\x82r\x89l|\xee\xc3\x8e\xc9\xf5!C+F\x13R\"\xd9K\x93C\xc4if4/\x0dS:\x82\xa4\x9e\xf2\xd6\xb6\xbb\xd7\n\x84SJ\x8a\xff=\x0b\xc0o~\xff\xa7-\x02\xc34\xf7@\x13F\x04\xa0M\x08\"/\xdb$\x18T[z'\xc10q8 \xc5cM\x02\xefA\x9f\xf2\x17\xcb\xd0\x0cJ\x8b\xae` \x8c\x00e\x06\xdc\xe3cs.\x86\x1dy\xf5Y\xd9\xd2\xa0\xe7\x87\xd9\xb0j4\xba\xa4\xda%fU!\xca\xce\x1e\xc3N8g]\x87E\x98\x853R\x8c \xc9\xd6a\x9a\xc4bg0\"\xc5\xb4'\xa0\x8d\xbd\xe9\x95:*=\x84\x13\xe6\xbe\xef:\xc5I\xd9Z(}\"\xdc\xeee\xf2\xfe\x17\xcc\xe5\xeec\xcc\xe5\x8cP\xde\xbb\x01jo\xc2\xcb\xc1\x9e\xdeB\x0d\xef\x15\xe1\xe9\xb6\xfa1!W\xda\x1e\xfd\xea\xdf\xdf\xf3{\xbf\xbb\x93\xce\xbd\xbb\xe6nC\nn1hq\xd6\x8e\x16\xc0\xc12/O\xc2\xcf\xed\xaf+\xf9\xb5\xfd\xa9\xc4OIy\x9c\xbd\x0boH\xda>x\x94\x8f^M\xc7\x9b\xf2\xa5,\xcf\x87l\x11\xd2hN\xe2\x8b(_\x92\xb2\x8e\x0dj\xfc\xbc\xb5\xe5\xb7*C>\x05{\x8bf\xf5x4)\x9d\x10\xa2\x14F\\\xed\xbe\xe1\xa3\x82\x1f 4z\x9ag\xfdz\xcd\x0fN7\x07\xa1\xca\xaf\xea\xecaq\xcf\xf3 \xdb\xdclCr\x15\x82\xfb\xf53\xe1\xdb\x11\xbd\x04\xb2\x9f[[V\xd2\x99\x0b{\xcc\xbc+\xea\x80\xb5\xbe\xb4u\xabP)\xb7$EP~J\x96\x97\xf9'\x92\xd9\xc3\xef\x80\xa2\x11\x0f\xfb\xdc\xc5\x19_l\xcb\xa4\xc3\x1e\xf7\x0cb\xfd\x9a\xc1\x16\x9ft\xbe\x06+}\xfeK\xff\xe1a\x15^\xdb\xa2`r)\xba\xeb\xfc\xdd\xf1\x8cq\xa5\\%\xb6r\xa7V\xaa\xd4w\xbd\xa8=B\x15\x02\x8f\"\xc1C]\xc7a\xc3\x17\x0d\xf6j\xa3\xa9\xf5\x0f\xd3\xb8m\xc8IL\xa1H\x9d\xc30\xfb=\x85(LSX\x10:\xcfc\xc830b\xd4\x96\xcb\x8d{\xcew+&\xa20S\xd8\xf5\x02)x\xd2no\xd0a\x87\x08\xe0\xe2\xe6M%\xf5^\x1f\xa4\x96\xc5H`\x1f\xb4\xaa\\\xf4:\xaf\xd8\xb1\xdd\x7f`}\x9d1 S\x14\xd5\x15jD8\xcdW\xb8\xc0\xb6y\x1b\xc1!\x8dd\xf2\x97\xedr\xedt\x19\xae\x9c\x87]+\x10\xe1\xc8\x18\xd3^\xdd\x9e\xa1\xe6\x8eJ\xd1?\xc7\xd9\xf4\xfeun\xfcs\xbak\x83\xe4<[\x93\x82\x82p\xfbKsX\x16\xc9\"\xa1\xc9\x9ap\xefON\xdf.\xd3\xd6\xb9\xe9\x0c\xec\xfb\x9d\xfb\xfa\xe5\xd0\xadpd\xd4w\xdd'\xb8\xf0\xf4\xf5B\xd7\x1f\x0dE\xfa\xae\xe7:\xc7\xe3\xeb\xf7\xe7g\x97gz\xd0\xd1U+jA\xe3s\xd9%\xc8\x02)\xcc\x12\x8e\x99\xdc\xdd\xef_x\xae\x93L\x8bpA\xf4\x86\xe4S\xe0\x05\xa0\xcdS+\x8f\xc2\x12\xa0I\x10#7\x97ix\x07{\xe0dyF\x1c\x1f\xa3R\xecx\x0d;\x17\xee\xa4\xb0,\"\x96\xed\xaf\xe1:\xe4VE#\xc7\xe7\xa4(\x0dP\xe3/\xa3\xbf$Y\x9c\xdfV\x08\xc3\x0b\xf2%\xc9\\\x1e*\xa0H(q\x9d\x1fx\xd1?T\xc2\xec\xb7{\x1c\xbf\xfe\xf0q[|r0?\x1a\xbc\xba\xc2\x95\x14 \xde\xbe\x81bk\xeb\x8d\x07\"<\x8b\x12oe\x92L\x8a+\xc3\x8d\xa4\x00\xcc\xd2\xd5\x0e\xc4\xaecE\xa0\x1eP\xa3\xb6Zi-#\x02\x16\xa2v\xe9.Kq\x8e\xcf\x8f\x17N\x91\xa0\x03t\x1f\x9a\x9f\x85\x93\xd3I\x88n,\xd1\xfe\x04=\x9fka\xd4\xa5\xe3h7\xfb\xff^D\xfa\x17O=\xd7\xf9D\xeeJs`\xdf\xdd\xdd\xfe83\x96\x8e\x17\x82\x86w\xf1\x07w(\xf9\xe0~>5\xd9$\x17\x13\x871\x11\x05\xd9\xfaky]\xce\xc3\x82\xc4\xd7\xd7\x8el\xd4\xfc\x0d\xef\xfb\x1f8\xa2\\\x8e(\xe7#\xfa\xc7\xd7\xbe\xf1\xd8\x10\xab\xa38\xd2\xf7\x9b\xd7\x90~R\xbe\x97 |6\xf5M\x04\x99O\xf3wy\x14\xa6\x84\x9f#\xbe\xe4\x9e'\xb0u\x82~\x07\xd1\xa1\xacsVG]B\xbb\xb2\x02\xcd\"-T\x18;\\\xc34%8be\xe9F\xc2\x12\x19\x1e\x008\xde5#8773\xd8\x84\xc2\xab\x18\x13F\xc4\xf7\x9dl\xd6\xbd\xf0\xd2\xe2\xea\xf7\xd9\xffx\xb6\xf7y\x0f\xa9\xf4\xe2\xe5C{\xfb\xa8\xa4\xd2\xee\xeeK/\x98\x9a\x899\x93\x07\x17\x13\x9e\xea\x1b\x87\xf9\xbe\x07\x95a6r$V3!='5A\xeeC\"\x03\x84\xa2\x03\xb6\xf6foz\xa25\xdd\xecH\x87\xc6\xcd\x8d~\xcf\xb9\xea\xf5\x80\xf3t\xd74\x03\x18{\xbdw-\x19#b\xcf\x04\n\xcem3X(\x03_\xf2\x18B\x82\xa7!\x0d\xdf\x11\xc6XI\xa0\x13L\x8c\xa5\xf9\xf2Eu\xd4\x9e\x19$a?\x86\xb1\x8cW\x04\n9ju\xcf\xc7=)g\x95\xec]}\xaa\xcb3\x11\xd5J\xa0\xd1*\x11e\x13\xe8\x8eVc\x1d\xbf\x81uy\xfa\xbdY\xd4\xf0\xbdM\xce\xd9\x07\xbe F\xefd\xc8\xbf5W|k\xfc\x9b\x03\x9b\x90\xa1\xbf\xdb8'e\xf6{\na\x14\x91%\x85\x82\xcc\xc8\xe7\x96\xd3[\x01\x11\x02\xa9~\xdb\xa6f[\x14\xa5\xc5\xfd\x9b\xd3x\xc6\xc3\x1el\x07\xdb\x9aH\xc9x\xe2:\xdb\xc1\xb6\x03\x13r\xe5jnu\xaa\xa3\xd6(\x80\xef=\xbe\xe9\xa4\xb8\xe2\xf6\xb8\xb0am\x03z\x8et\xd3\xfcn\xdc3\xe0\x11\xc5\x8d\x8c\xb4\xfd\x90\xec=L(\xb27F\xac\xda2Q\x16\xa2\xad\xd6 \xc9M\xa0\x9f\xefx\xc1\xf4\xa1k\x9b\x07\xfc\xcc\xe7\xec\xa9|\xe1\x81\xa1\xfe\xf1\x15\x83.\xd4\x19\xfe\xa1Gtq\xae\x91\xc4!xAs@\xdd\x1d\xd4\x97'\x90d\x1c\x93\xac0f\x95 c\x0b|\x1c\x06\xd3\xd65I\x1f\xac\xb7\x97DH\x8cf\x84*\xfc0\xef\xb6\xd9\x8d\x07\x0fXz\x7fT\xdf\xa1\xcd\xb5\xfd\xddFs\x90\xdf\xc1\x1fc\xc2\x05iI\x9e\xc19\x89VE\x99\xac\x89\x94\xb8\x92\xcf\x94dq\x92\xcdZ\xc5\xc2\x15\x9d\xe7\x05\xfc\x9c\x84\xd1\x9c\x94i\xb8\x86w9-\x17a\x96\xaf\xe1\x87T\xfe|\xf5\xfa\x8f\xb3E\x98\xa4A\x94/\xfe\xd0\xaa#M\"\x92\x95\x04N\x8e/\xb5oz\xd6\xcb9\xe6\x82w\xa2\x84{r|\xe9\xf5\x949\xcc\x97wE2\x9bSp#\x0f\x9e\xee\xec>\xdbz\xba\xb3\xfb\xca\xd8\xe5\x9e\xaa\xde\x93b\x91\x94\x18\x14,)aN\nrs\x07\xb3\"\xcc(\x89}\x98\x16\x84@>\x05\x06_3\xb6L9\x84\xd9\x1d,IQ\xe6\x19\xe474L\xb2$\x9bA\x08Q\xbe\xbc\x83|\xaaW\xcf\xce\x11(\xf3)\xbd\x0d\x0b\x02a\x16CX\x96y\x94\x84\x94\xc4\x95\x1e/Zf\xc04II .\x9d\x13p.D \xc7\xc36c\x12\xa6\x90d\xed\xca \xc8\x9cp\x9b\xd0y\xbeb(\x9d\x83M\x92g\xbe\xf0s\xcdz(?\xa7\xc9\"\x11\x0d\xb2\xe28\x8b%\xd0\\\xaf{U\x12\x1f\x07\xe5\xc3\"\x8f\x93)\xfbOp\x0e\x96\xab\x9b4)\xe7>\xc4 k\xe9fE\x89\x0f%K\xc4\x05\xf4\xd9(\xb7\xf3\x02J\x92\xa6\xac\x86\x84\x94\xc6\x89\xa9\xfb\x8eE\xf0\n\x80-\x06\x15\xd3\xcbz\x05\xb7\xf3|\xd1\x1cgR\xc2tUdI9'X&\xce\xa1\xcc}\xbd\xfarU\xdd+\xb0\xd2\xd3>\x1a\x1f\x81sp\x01\xc7\x17\x8e\x0f\xbf\x1c_\xfet\xf6\xe1\x12~98??8\xbd\xfc\x15\xce\xde\xc2\xc1\xe9\xaf\xf0\xe7\xe3\xd3#\x1f\xc6\x7fy\x7f>\xbe\xb8\x80\xb3s\xbd\xe6\xe3\x93\xf7\xef\x8e\xc7G>\x1c\x9f\x1e\xbe\xfbpt|\xfa'\xf8\xf1\xc3%\x9c\x9e]\xc2\xbb\xe3\x93\xe3\xcb\xf1\x11\\\x9ea\xfb\xa2\xe6\xe3\xf1\x05\xab\xfbd|~\xf8\xd3\xc1\xe9\xe5\xc1\x8f\xc7\xef\x8e/\x7f\xf5\xe1\xed\xf1\xe5\xe9\xf8\xe2B\xaf\xff\xed\xd99\x1c\xc0\xfb\x83\xf3\xcb\xe3\xc3\x0f\xef\x0e\xce\xe1\xfd\x87\xf3\xf7g\x17c88=\x82\xd3\xb3\xd3\xe3\xd3\xb7\xe7\xc7\xa7\x7f\x1a\x9f\x8cO/\x038>\x85\xd33\x18\xff<>\xbd\x84\x8b\x9f\x0e\xde\xbd\xc3\x96\x0f>\\\xfetvn\xea\xfd\xe1\xd9\xfb_\xcf\x8f\xff\xf4\xd3%\xfct\xf6\xeeh|~\x01?\x8e\xe1\xdd\xf1\xc1\x8f\xef\xc6\xbc\xe5\xd3_\xe1\xf0\xdd\xc1\xf1\x89\x0fG\x07'\x07\x7fb}?\x87\xb3\xcb\x9f\xc6\xe7\x98M\xf4\xfd\x97\x9f\xc6,\xa957\xa7pp\n\x07\x87\x97\xc7g\xa7l\xcc\x87g\xa7\x97\xe7\x07\x87\x97>\\\x9e\x9d_V5\xfdr|1\xf6\xe1\xe0\xfc\xf8\x82\xcd\xde\xdb\xf3\xb3\x13\x1f\xd8R\x9c\xbdeY\x8eO\xdb\x9d>=\x1d\xf3J\xd9\xaa5\x17\xf7\xec\x1c\xdf?\\\x8c\xeb\x9e\x1e\x8d\x0f\xde\x1d\x9f\xfe\xe9\x82uH\xcd\xacC\xcdv\xe3]\x9e%`!\xf7\xa5\xf4\x02\x92\x8c\xc1g\xc4\xe3\xfc\x8a\xf3\xb5J9\x12\x97$\x8d\xc4s2\x1b\x7fn:\xf1S\xe2oAS\xc7\xdd\xd88\xea\x874Z\xb6q\x10R&AE\x04\xaa}\xf9\xab\x0e\xca\x00#dI\xa8\x12\xa6\xc1XU\xa5x\xc26<\x1a\xd0\x19\xbc\x92\xf7w\x95M\x89\xa7\xb2U,\xc1E%\xa4\xcbdA\x1a\xd2.k%|\n\x1b\xd5\xf0$\xa3ZVK\x17\xebCF>/I\xc4N\x992\xa1+\xe1\x83e\xd0\x8a\xe4VI\x97\x14\xd3\\_#o|}\xedT\xf7PUh\x99\x96\xb0\xab9ak\xe1\x94\xcbH%\xda\x00\xc1\x10\xe0h\x17\xad\xccd\xd4\xfa:\xd0G\x1d g\xe7\xaa\xd3\x96\xc6R\xefS\xaf%\xab\x9c\xec\x18\xae\x14\xe5M,7\x9e\xec\xce+*\xe4jz\xb5N\x1aZ$\xf3\xeb\xf3\xaa\xbc\x0f\xbb\x06\x9d=k\x14M\xc3\x04\xa0\xf9]%\xe0\xc4\xb7\xa6~\xe0\nidA\xb2~\"w\xa5\xbb24iu\xa1\x0f\nc\x84\x12\x9f\x90\xfb\xa2G\xe1I\xee\xa2gz\x1e\x19$T\xc1\xc2\xd0S\xd2\xe8\xa9\x8c\x9c\xeb\x86\x93\xb2\xba\xf54h6\xaay*\x90%f\xeb\x06\xf5Y\x0b\xa5\xea\xc9\xd0x\x8cm\x03\ntN\xd5\xdd\n\xa8\x8b\xa2\x85G\xaf\xee\x83\xd9~i\x8e\x0c\xa35\xe5\xe2\xba\x97\x8bw\xb3F\xa2\x90\xf9\x8a\xb7\x04-\xd6\xd5\x94\xb6\xf7-\xf5\xf9\xea\xf9\x90[s|E\xdd\x96\x11?\x06\x9a\x13\\\x88O\x86\xd5\xa3\x8d\xd5\xa3m8\xa3ze\xbc\xd7\xbc\xc2f:\x0f,l\xec\xa0!d%\x1bMhA1\xcd\x80\x94\xcf=\x11Oq\x10\xbf|\x1f\xa5K\x9b\x00\xbb\xbd\xf4D\x89\x92\xc4\xd6\xd6b\x94\x88\xcc\xba\x01u\xb4\xd4{qZ'W(\x11n\xe7\xcf\xb8>\xba\x1et\x9a=\xea\x8e\xa7\x86\x1do\x0d7,Q6\x9d\xe4\x96\xbdc\x0c\xb9\x94\x08\xffqO\x9e\x98\xa6\x85\xf1\xf7[\xbb\\\xc6W[\x08M\xf2+6\xbcb\x92_a<\xf7\xc3\xa4\x88ViX\\90\x92\xa9\x04\xb3\xf9\x90 \x97\x0e;\x08P\xe2\xa3!\x00\xaa)\n\xac!\xf6#\xe56ih\x9f(\xcc\xd3D\xda\xd0\xf2\x0bR\x96\xe1LV!\xdf\xf6\xea/C+*i\x18}\x12\xd5\xf0\xdf{2\xd5P\x85\x14\xc57w\x04\x03\xf0 \x06\x922\xde\x06\xe1m\xca\xe4\xad\xf8\xc2-?\x84\x1f_\xe0~\xd5\xf2\xecn\x91\xafJ\xc7\x83Mpp\xfe\x1f\xacP\xf8\xfd+\xf35\xe3\x0bc\xc8#\x96n\xf2|\xcc\xd2\xf5k\x80\x95H\x7f\xed\x99\xcc'K\xbb\xd8\xc9\xa4\x10\x8d\xda8J\x84\xbb\x1d\xae\xf0j\xd0\x9d\xe2zS\xdc\x19? \x0b\xd7{\x03\x9b\x9b\x14~\x80\xcc\xa8S,g\xa2\x1do \xa4\xec\xbc$\xd4-0\xfeW1\xd9\xbd\xb2\xe9\xed\xd6\xbf\x14\xa5'\xde\x07\x86\xac\xfdF\xb2P\x8f\xc2`\x1ceS\x15\x9em\x94f\xe2{\xe9\xf9\xe0\x9c\x84K\x9b\x10x\x90V\xbc\"Un\x85\xd0\x13\x10e\xf1\xea\xf8\xc2\"\xd2|\xd1\x12\x81\n\x88\xda\xd5E\xf4\xa5H\x7fi\x84\xb4\xd4\x0ei\xc2< \x0ei\xc8\xad\x140\x1a\x99\xd1\xca\xaaL\xfe\xce\xf1\x05\xfbaX\xf4\xd4\xb0\xe8\xb9\xdfH\xae\x16=i\xa6\xf3E\x0f\x9b\x89|\xd1W\xcdD\xbe\xe8es\xd1S\xe3\xf2\xa8C\x1e\xacN\xdb\xf0\x9b\xb2\xb5\xcb\x1d\xa7\xd0\xca\x9c\x98\xeb\xdcK\x1f$\x9b\x9b\x19\xfc\x00\xc5\x1b\x0f\xc8$\x87M\xc0\xf81\xed\xb05\x92o\xd3\xe6l08\xbdx\xaa#\x1c\xa1\xf2\xfcZ\x07\x1bcL6\xa3\xaaS\x0b\xda\xba\x84\xc4m\x18\x0c\xd5\xe0\x8a]\xec\xb9\x8a\xb1\x90,@B\\Q\x1e(\xdc\x90\x1b\xb6[E\xc7Z\x8dj\x10\xb8V\xbe\xaf\xba\x03\x1dF\x83\x9a\xf7\xf4\xea\xbe\x8b`>%\x9e\xebkcZ\x83\xf6t'\x9a\x97\x8c\xf6\x14'\x03\x16\x0eq\xd37\xaa\xb6\x08u\xc7A\xab\x99\xb3\xaf<\xe8L\x15E\x15\xd56\xb8\x87\x92\x8dU;\xbd\xd9\x9ey)\x06!\xed\x0e\x1b\xb1z\x95\x9e\xe9\xab\x015\xf2m!e\x90\xbaB\x16\x8e\x08\xffl\xd0 \xcbcry\xb7D\xd2\xc9d\xfe\x88\xf7Af:\x92;\xa4\xc7zH\xa3\x1e\x83\xe9%\xdfW8\xbb\xd5\xd4\xec\xf1\xab&\x19t^\xb0&&\xbf\xe0l\x1e\xdd\x15\xec\xc3*HJ-7\xb2\xd4\x9a\xde{{\xfeAgPv\x9f=\xf7\xaa\xcb\xd5!z7\xafwv^\xee\xbe~\xfd\xf4\xfb\xe7/\x9f\xef\xbc~\xbd\xfbP6\xc5\xe4\xbf\x1d\xe7\xf1\x0f\x8c(\xc7_\xff\x81\xbe\xf1\xb93\x02\x02?\xec)\xa2\xb0\xfek\xb1{\xf5\xa6\x1b1I\xdc\xde\xba\xd4\xed\xe9\xceC\x80\xfb\xe9K\x9d\xc0\x04\x01\xdd\xdf\x08\xc1l\x13\xe4\x8f\x00\xc1\xd5NH\x1a\x10\x8cU\xa3\xb9cDJ\x83\xc5\x9env\xd0\xca\x00\x9d\xf7\xe0 \xe5]u\xeb\x05\xf9\xdb*)H\xe3\xc5uV4I\x1d/`\x03\xb3xb\x01U\xae\xfc\xe5\x8b\xdc\x8e7 \xdeD6^du\xc6zz\x02[}u=\xfbf\\=`3v(W\x99\xaf\xd6[FT\x0c\x04\xb6?\x06_>N\xdc\xfd\xd1\xe4\xffL>^]}\xf7\xc5\x9d8\xbf\xbf\xf2\xdc\xfd\x91\xbb\xbf\xf1q\xd7\x9b\xfc\x9f\x8f\x1f\xaf\xbe|\xfc\x18x\xdf\xed\x7f\xdc\xf5>\xea\x81Yx\x00\x98\x8f\xb7\xdf\xfd{oH\x07\x8b!S\xc3\x8eI\x17\x8bV\x92t\x01\x98F\"k\xc3\xad\xb0\xc7\xc6\x1ed\x08\xd4%R1JB\x158B\xa64\xdc\x0em\xa0F .?\x8f\x05\xc2\xa3\xc8n$\xea\x9b,A\xf9\xf6H\xa4\xd3<\xf7^\x86\x0e\xf7BD\xf7\xa4\x1f\xcd\xf2\"A\x99pm\xd3\xcaE\x17\xf5\xc1\xb9\xbe&\xe5I\x1e\xafR\xe2\xe8\x1a B\x1bAU\x08AC\x9b\x05Y\xe4\xc9\xdfI|\x11.\x96)y[\xe4\x8b\x8bhN\x16\xa1\x90*\xf0\x8f\x87\xa8,\xf8\x97\x93w\xe3\xcf\x98\x8d\xb3\x10\xf8\xf3/\x8bT+\x94dSR(\xefe\xbbfq\x00\x824\x81i\xd4\xac(z(\xec\x98\x89\x1b\x0b\xdd\xcc}\xf1\xfd\x0b\xcf\xb0\x0f\xf0\xd3\x8b\xd7\x9e\x91\x97\n\xed\xeb\x83\xa0\x10\xd4\xf3(T\xf5\xdaXKFF\xd0\xddZ\xfd\xae\xfdk-|\x19\xb6+\xe1\xa2\x99\xe1qm\xa5,\xa7\x95\xc7\x10F\x8bg\xbd&\x8b0I\xef\xd1\xc2\xaa$\xc5\x1f _\x8c \xca\x17\x83\xda\x12\xfdb,(\xd9\xa2\xc9\x828\xc3[t\xe5\xf5\x95\x17\xd0\xfc\xf8\xe2L\xa8\x84\x19\xf8\x02\x83<\x05\xd1\xc4\xf0\xb6\x06\xc5u\xe3\x95^O\xd3<\xa4\x8f\\u\x92Q2{\xf4\x0e\x0bT\xd8G\xff\x83\xb2\xca*\xf6\x94\xb88\x10 \x8dW\xad\xf2\xa5\xdd~\x13\xdc\xdb\xbcLw'\xa4\xcc\x82mt\x17\x9d\x0frr%\x99\xdeyF\xff3 \xc4f4h3a\xf2AO6\xc14/\x16\xa1\x812\x02\x81\x12V\x13\xd4O\xbcv`\x13\xb8\xa9\xcc\xca\x18\xd5S\xc2%\xf6.)\xdf\xae\xb2\xc8s\x13\xc6c%\\O\xda\xf9\x90}\xca\xf2\xdb\x0c\xb5 \x85K\x1b\xec]\xd7\xd4\xa46\\Xa%\xcb\x0d\x93<2[7\x89\x7f\x00\xa4\xa3\x15U\xd6\xfa\x8ep\xf7\n\xf6\x9b\xaf\xa3\x96)\xa8|r\xd3RP\xcbR \x99\xd9\xb1\x14\xca\x97\"P\xe1\x8035V\xb3Vg\xaa9\xef\x1c[\x16\x00m\xce\xb26\x844\x93\xcf\xa2\xe3\xdb\x0c\xc9\xb0\xcf\x0bC\xc0f\xf60\x1c6\xc3;j\xf3\xf7\x1b\xfc\xbe,\xc841x\xb4b\xcfuU\x03F\xab5g\xba\xe5S\x9b\xad\x16\xe6\xef\xe3\x8aG\xb6\x1c\xe0a\xc7\x01\xceN\x90\xd4C\xa8\xfa\x97\x9c\xe2a\xdf)\xee\xb2Y\xbd\xc3K\xff,\xa7\xe1\x8cM\x8e\xc3\xcd\xa5\xdc\x1b\xd8\x87\x1bF\x96\x8f\xd0>\x16u\x01\xee|\xb8\xe6\xde\xd2\x17\x13\xf6\xdd\xf9\xbcH\xb3r\xc4\xce\x8e\x1b\x96 _\xd1_\xc1\xb5\x85\xc0Q\x0f\x05\xc48\x91\x0d\xf9\xb2\xdc\x11\x83\x07\xd8\x03\xfe\xff\xcb\x17\x98qK\x10\x9f\xa7HU\x0d\xe5\x85\xe5\xe1P\x023\x11\xa9>\xae\x88\xbf\xf5$\x93nn\x9b'\x04\x9e\x0d\xd3\x81ns\xe5\x13\xc9\x1d\xc8\xfd\xb6\xb2\xca\x85\xdf^v\"\xe4V\x9d\xa6\xd6\xf94g\xad\xcf\xef\xdd\xba|\xb6\xac\x8b\xfb\x8d\x0bs\xaf\xf6E\xaeV\xa6\x01\xe4\xb6U;\x91M\xfd\x85\x99\xdc\xee!\xa7\x0f\x199\xad\xec\x19\xb4$\x95\x1b\xf0\xc2N\x9d\xb2\xbe]\xe8q\n\x0e9\xde\xd8\xb8\x98\x1c*\x84\xf7\x97/\xb0T?\xd4$7#\xc6-\xd3\xd5h\x87\x95\xe2H\xa2\xfa){(\xde\x03\x06\xb3h\xa9\xd2\xb5l\xf2a\x03\xff\xd4R\xbc\xc3\xba\x90Jc\x9d\xad\xde&;Wv\x96E}\x0ed\xff:\x0fm\xfd9\x93\xa5\x04D\xd91\xbd|\x16\x93j\xd4\x12\x1d\x1e^UG\x16\x92M\x07l\x04\x07\xd04\xb5\x9dN\x0e\x91\xef\xc1\xff\xcdOg,\xfd\x8c%~b\x7fJ\x9c\x8b\xee\x85\xf9\xdaw\x80\xc9\xa7\xd9\xd9=hw\xbe\xe1\xf3H\x9dA\x8d\x18\x94\x03p\x1byx\xba\x05\xce\xd5\x87\xad\xfa{d\x99.\x86\x15h\x82\xc7{Tw\xe5;\x05\xd1\xa8pa\xf0^\xa2[\x8e\x04\xde\xf7L[\x17j\x94\xcc\xa4h\xa8\x0fQ7\xa9\xcd\x118\x07\xd9\x1d\x9d\xa3\x0dT\x98\xc1\x0dAc7\x0bU\x80\xe1Q\x86\x9e\x08zC\xa5\x8doeH\xee\x11\xcf\x99\x018R\xcc\xdc\xb8 \xffSv\xd4W,\x15&\xcd\xd9\xf9\xdbB\xff\xb7lQo9WV\xa2]\xb8Xa\xc6\xe1M\xcc}\xb7\xf6\xfb\xab\x0fcV\xd1X\xef\xfaW\xe3=\xc8\xd4x\x89'\x05\x8e\x11\xff\xda\x84R\x86\x0d\xb3\x86\x9c+\x97x\xc3s3\x93\x19lL\xa24\x94\x81{M~\x0b\x92,\xc6\xc0*\xceG\xaa\x85c\xd3\xaf\xe1\x00\xcda;.\xa5X\x7f\x92\xba?\xd3\xbe\x1b.-\x7f\xda\xaf&Q\xcd][t\xcf\xd5\xf0\xc8\x9aq\x87\x95V\x9ex\x15\x87\x05O[\x84\x9f\xabxrU\xc6Fb\x85\x1b\x95 hw\xc1`\xd7$\x85\"2OCl\xd8YY~?\x8ds\xd5\xd8\xa0\xbb\xe2\xc4Z\xb1\xeaz\xc5\xb0\xd2\x0dGY>d\x01\x06W\x19/\x12\xca\xdd\xdcc\x9a\x12\xac\xa3\x9ayy\xbb\xd8\xf8\xaaMz\x9dG\xac\xfeI\xf3\xfb\xaeV\xbe$z\x0e\xbb\xd4\x03\xa9&\xe5\x06\x9b*\xc6(D\x06\xa8\x10\xbe\xebL\x1e\x152X\xacJ\xca\xd0g\x08<\x1e\xf2\x9a\x88[)\x8b\x1b\x05#\\\x11\x0eo\xf5\xcc6GD\x16 \xed\xb7\x9f\xe7\xfe\x8f|X\xf9P\xfa`\xf0\xc4\xac\x83\xb9\xabm\x03\x0c!'\"\xe5\n+\x1c$\xc4\xd4l\x01~F\x05'\xb7\x9d\xce\xd5\xd2\xda\xe9\xd2\xd0\xceDo\xb1\x9e\xa1\x8b#U^\xe3\xa9\xc6oc^5\x9f|\x03\xcd\xc3F\x1f eZ\xbe.\xbf\xff\x90E\xe1j6\xa7>\xac\xb2rI\xa2d\x9a\x90\xb8\x1a\x1bv-\x00\xf7\xf7\xb0\x89\x0e\xa2\x1d\xcf\xe4.\x84\xb7\x17\x05\"j5\xa7\xde\xa3&\xdak\xcdq\x82^\xa2\xd4\x19\x98\x90+\xbb\x92\x05\xd7\xc2\xc8<\x0f\xca\xdb\x04UXt9\x97i\xca\xa2\xb0$\xb0k\x8e\xf4/\\\xb0\xa2[t3\xd5\x82>\xa4\xdb\x9f\xb0\xd2\xa7\xbd\x95\xfa\xcdu\xba\x7f\x13\xcf\xee\xd9\x84\xfa\xf6\xf4\x9e\x0d\xca\x9b\x7fc\x99UE\xd4\xf7[\xe1\xb1\xfd\x18.\x97\xe9\x9d\xe8\xe0J\xd7{\xad\x84\xf4\xb9k\n\\\x83,\xd4\xfd\x1a\xc4C/\xc5\xeb-n\xda\xe2y\x95^t\xc9C4r\xc7\xe5Pnnz\x90N\xca+\xad\x8bF\xfc\xa3j\x954\xb1L\x18\xc7J\xcc\xd0N\xe5!\xb6\xe3\xc26$oX\xfc\xce\xa4\xb2\xda\x1aYV\xa7^\x17\x96\xecAU\x0d<\x93\x91[5\x02)~cx\xd3u\x94/\x0e\xfa\xff(\\\x1a\xc8.y(\x90\xaf:8\x02\xaaU\x94\x04\x08/\xa5\x9f\xf6\xae\x074\x87$\x8b\n\xc2\x90\x0d\xfa\xb7\x08\x9c\xd6\x92J\xe4\xea\x9b\xe9/\xd9\x7fZ\x84\x11\x1e\x82\x8d\x04\x0cL\xd7u^\xe7h\xe6\x00\x1b`\x15\xb9&<\xfa\x8du5\xd9\xc3\x03\x88d\x12\x83\xee\x83[\xfd\xdec\x8c\x8dyU\xd0\x08[F\xd8J8M\xf0\xad\xeb\xd4\xbf\x13\xfb\xb7\xdaA\x9a\x0e\xe3\xad\xd6F\x07\x81\xad\xed\xd1\xb3\x156:\xc6\\\x15\xe5\x9ci\xeb\x8ax_g\xf4\xd1\x87\x98~\xe6>y\xd2\xb9/\xda]2\xb7f\x05t\x8a\x0e\xc8\x1a#\xd6\x97G8\x02\x90K\xd8\x9eh\xa3\x0d\xb7J+\x19\x8a\xe8\x8dh\xf0#cC\xaa\x0b\x0eF\x9e\xa6\xb0\xf04\x96\x93!\xb3\xa1\x03\x83\xc6\x04N\xd0\x9bjo\xbc\xb1W:\xa9\xf6\xcc\x16\xb4\xf8\x0e1\x13]\xcbh\x03\xeat\x10,\x9b\xc8\xd26\x8d\xc4\xdd\xf1\xea\xdbx\xbfE\xfc\x19(?I\xe3\xc3H\x8b\x16e\xea\xeba\xbe\xca\xba\x05\x02:\xbboS\xae\xa0\xed\x85m\xc3YRy\x94\x14\xd3`q\xa0R\x87+\x96\x16\x9c\xfd\xf8F\xe3F\xec#4\x1c\xe6\x95\xbaJ\xa3T\xbfI\x80n\x0cD5\x0f4\x99\xfbl\xe7{\xcf\x0b.hA\xc2\x85\xa0H\x82s\x12\xc6\"\x02\x1b\xbe\xffR$T\xbcg\xee\xee\xeb\xefQ\x80y\xb4Z\xa6\xe437\x80\xe3)\x97E\x98\x95\xd3\xbcX\xf0\x8aww0\xf5}X\x96\x97\xf3\"_\xcd\xe6<\xf3\x8b\xe7\x83LMz\x1d\x01\xf28_&T,\xdc9>\xdf\xf1l\xf4\x9fA\xd7\x1e481II\x12\xc6|\xa1|\x84\x07\xaa\xe0\xa7PF\x8b\xbbf\xd24\xc9\x92f\xc0E\xdb9\xbd\xd19\x07\xfa#-\x0f\x08o\xd4~\xb6\x93F\xaf\xec\xf9\x04R*\x8c\xe6\xfb\xea\xb3\x16^d\nd\xe0o\xc2\xc8 \x82P\x1f\x1a,\xb9\x93\xc5\xe8fk\x8b\xf1y\x18v\x1d+`3h-k\xbe\x07\x02\xac1\xca\x8bO$>'\x7f[\x91\x92\x96o\x0b\xf4\xe9mJ\x96\x8bDP/\xcdPlO\xd3\xdb\x92\xcfW\xee\x91\xa5\xf5\xedk\xc7\xeeV\xb7\xd3]\x9b\x0fYq\x11\xc6\x06\x0dn\x8a\xfc\xb6\xe4\xd4\xcb\xc4Y\xef\x04\xbb;\x8e\x0f\xec\xc7\xeb\xc0\xb9\xaa]\x81\x04kR\x94I^y\xf9\xf0\xe1{\x8fk\xd2\n{\xda\x04\x87w\x99\xe8KpW\xed\xd3\x0b\x1a\xa2-\xfc\xac\xdd\x9dT\xd8\xad\xbc\xd0\x8e\x954H\xb29)\x12\x81\x15^\xed\x1aX\xaa\xc8h-\x02(|\x12z\xa6#\xdc\xe0\xcf\x06\x99IL\x05\xfe\xd1=\x0e\x80\xd4uvw\x9f\xefJG6\xed,\\u\xebC\x92\xd1W(i\x025`\x8d\xd7R1e\x03\x98\xfb\xa8\xa1\xc5\x1a}iE\x0d\x0b,l\xf983bg\x10\"6\xee\x82\x8a\xa3C\x0420\x84Q\x05e\x1fSU\xf6k \xd5\x11\x99\xf0\x8b\x8e\x93\xd9\x15\xfc\xeaz\x7f\xea/\x10\x19z\xb7\x0f\xbb/`\x04\xbb/\x9e\xbdzn\x99\x85FW\xd0\xaa\xf4\xcb\x17A\x0c\xe7\xb0\x0f9\x8c\xc4\\\xa4\xf5\x87\x94Q$)\x8c \xf2\xcd\x95\xd4\xb1~\xdc\xf6w\xafF\xe6az\x18\xa62,\xa7/\x0f\x02\x12\x1f\x15a\x92\xa9\x89\x1c\xe7i)\xcdr\xfclh\xa6\xc5\xa4\xa4E~'\x12\xcd+\x82\xf1\xf99\x7fE\x82\x98Dy,\xa2\xc9\xd8N\xaaF\x1eVxZ\xb5\x86B\xb2q\x16\xe5\xa2\xb7\xa4\x95\xf6\xe5\x0b8+:}%\xe5I*\x13\x87 l\xc5\xb5\xa1rD\xab\xe4)\xef\xb2HJL\xd8\xfb\x0dn\xe5\xf7\xdcZW+\x9cg\xa8\xff\xd2\xab\xb8\x0b\xedC\xb3\xef\xc4\xe4A\xdc\xaeoU\xec\xd8\xad\x84RpY\xf4]\x16u\xe7\xe3\x81\xe0\xb0\xe3\xd1\x8d\xfd@d\x14c\xff\xa8\xe4C\xb4\xb9%\xb2\x81\x8a\xc6 \x15\x7f \xf7\x1eII\xe6+\xbf\xd9\"X\x1b\xf9\x8a\x871\xf5\x0c\xc4\x87\x99\xa6\xd2\x9f\xad-\xe5x\xf71r\x80[\x9fJn\xeeC\xe1\xf9\xca9\xe5^\x08\xa6\xdco\xad\x03\x97\x9br\xb9\xa8\x14\xa9\x12\xc1\xd8\xf3+,V\x19\xe3\x15\xdc\xdc-\x1e\\\x81\x0f\x17\x1cT\xecZ(\xe89\x8aO\x00es\xd0A\\\xf5+\xf8\xe0\xad\x01\xec\xc1\xd8\xd5YD\xfd \xf1\xcc\x90{\x07\x7f\xb7\xb6 C\xde2\xb9\xa2dX\xea-gB}\x8cfZ\xba\xd78\xcd\xfcj4gsv\xed*\xef\xf6\x91\x1b\xbfXi!\x05\x01\xa8@Y'\n\xf8kl\xfa\xba\xdb\x8d\xfciX\xd2\x1f\xbb2T`\xa6\xd4\x88\x8a\xcem$\xaa\x03\xc2\xae\xb9\x03\x92\xdf\xdai`-\x8d<\xcc\xc8-\x84\xfcf\xb11\x016\xba\xe0\xce\xbc\xad\xb9\xe6s\x930\xd8p\xe7\xfc\x12\xec\x8ew\x00\x8d\xbe\xd9\x8f\x06-\xe05\x1c\xa0\xdeY|\x9f2n\xf6V#\xfaX~N\xa6(\xe1\xa2ok\x0e\x0e7\x08\x9e\x94f}\x0c\xbe\x86\xca\xc5\x87\xc4\xcb\xe2\x8b\xed\"A|^\xeb%\xd7u\xd1\xb5\xbd\xac8\x01\x95\xc22e\xaf\xfej/\x8eg\xb4R\x98\xbf\xef\xc9/\x9e\xe7\xc3T\xb9-\x1e\xb4\xa67M\xa4\xc8E\xe9\xc6k\x03\x15\xec\x19\xfaP\xf6F(_\x05>\xc7\xcb\x03\xe5\\\xc4\xa8+r\xa6\x18\xe6\xa4\xf2$\xe4a\x87\xf9\x17\x97\xb7^\x7fSk\xd9\x1d4\x9ake4\xa6Ad\xd0\x17\xf0Q>\"\x06\xa3<\x83\x9e<\x01\xaa\x10C\xb8\x06-\xe2Hb\xe4\x98\xa59\x06,\xfc\xd5\x15\x07\x84\xc68\x16n\x8d\xbb\x07\x8d\xf3\xd6\xdawj\xa4?\x0c\xb6\x0c\xeb\xca\xb1\xb2\x86:\xcc\xb2\xa0j\xf9PD\xcfo#\xd8\xc9g\x9b\xbf\x8a\xf87b&;\xc1\x91\x8b\xcd\xcd5\xf4\x8a\x0e\x83AtZi@l\xe6\x93(\xa9e\x05\xe6\x0c\x95R\xf4\x8a\xa3\xcd\x92\xcf\x1b:\xfd\xcb\xf1\xc6\x82k=\xa1w \xbc'\xc3\x1c\xbb2\xd0'\xce\x86\x0f+\xd8\xdc3\xc9\xd3\xd8\x93\x07a\x9a\xf2\x83\xa0\xe4^\xd8\xe4\xee\xe3;\xa6\xf2\x92\xe6\x83\xe30\xd2\x82\x1f\x00Mx\xd9\xdc\xc4\xac\x1dG\n'I\x18\xb9b\x11\x0b$\xa2\xaf\x89*\xe7\xf1\xecb\x04qN`?l\xe7L\x1b\xd6\xbb(\x08)&\xee\x94\xc8T\x9c|\x10\xcdW\x99\x85\xd1\x92\x0f\xea\x0b\x05DP\xf6\xddy\xb99r\xbf\x88\x87\xc1}\xb5B\xbb\x88\x99\x1a\xdc\x1c\x8c \xad\x16-\xf5\x19\x036\xd5\xc0\xc1\x0b\xae\n\xb9\xa3\x81S\xdau\xf4\xca\x83\xbd\xa6\xb9\xf9\x1e\xb2\xd4ZW\xa9\x87\x0bhn\xa4Z\xb4\xc8H^\x86\x06fM\x07\x9d\xc2\xa7\\\x8f\xb4\xbc:\x85*\xf1\x96\xb6\x07xx\xf0\xc9\xd5\x1b o<6\x0c\xb4=\x92\xa28\x9c6\xebJk\xe1\xe9\x0c\xc2\xca>A~\xb7\x171\xb3s$e\x1e|p\xf8pZ.\x92\xf4gF\xe8\x08\x0d\xad\x84\xc8\xb5\xdbI\xa3\xfe\xa8\xb7{\xd5\xd4\x1b\xdc\xda\xa8\xcfW\x1f\x1c\x8d\xe9\xe6}\x85\xa4\xacE\xbfBYI\xcbX//\xe3nH\x18\x07\x8e\x0f\xce\xd1\xf8\xfd\xce\xce\xce3\x8b\x8f3ho\xf0*\xb9\xd7\xfd\x99\x85E\x10\xb1\xb4\x9e<\x11\xbf\x82yX\x1e\x0b~\x0bl\xa1C\xa5\x9b\xe8z\x99&\xed\xd2Wh(\x07{\x03s\xfb\x16X\xb8\xf3\x0d=\xeb\x08\xe0\xd5/O\x92Z\x90\x1bsU\xdf\x94\xd4\xfc&\xdb\xed\x9c\xe3\x92\x0e\xa6\x9a\xbc\xa4\xc2\x8f\xce\xfaN\xcb\xaf\x88\x85\xe6\xbd\xe2;y\xce5\"\x9c\xb4\xee\xe5}P\x15G\x97\xc9\x92\xf4a\x07.\x01h\x1e4uP\x90\xc30\xcbr\n\xac\"\x1f\xd8\xafB\xdcp\xea\xac\x88\xd6r[$i\xbf\xa3C\xb2\x9e\x1b\xf0\x1b\x18s\xbb\x8d\xfd\x86\xc1#7\x88\x0b\x85\x8d\\\xa5\xab\xd01:W\xa1_V\xae8\xdd\x02\x17\xb4P'4\xb6\x1fi+$\x0d\x94\xe2\xdc\xed\xaa;L\xf0**Y\x06\xd3\"_\xe8\xf1\xe3\x00DH\x05\xcb\x16D\"\x85\xebWpT\x8dT\x18\xe3\x0b\xf6\xf1U\"@FmsEX\xbc\xe1\xd1$\xd3\xcd\xdak;\x86\xac\xaa}\xe1\xf9\x90\x0b\xb9\xfb\xfe\xb0\xb3[R\x03\n\xc8\xf0\xa5\x0f\xa7\x94\x14@\xb2\xd8\x16d\xd3D\xdd(G\xb4\xc5y\x86\xd8\x8b\x19\x9e\xdc\xab\x16\xe7m\xe7\xd2A\xb9\x9e1Y-\xc9'\xb4\\$\x80B\xdc\xd4\xa4\xf2>\xf7\nN\x1az\x80'\xe1\x1dn\x15>\x11\x98\x1bQ\x0fF'+Q_\xc0\xf1\x8c\xd1\xa3\xb9,A\xb1\xa3\xc989\xd4\xbc\x8er\x0dm\x1eg\xeb0Mb\xc8\xf2l\x8bW\xbb-N\x1a\xe4s\x1c\x0f\x95\xc5\xb9/\x8e\xe6\xbc\x87\xcdy/xJ.\xf9\xd0v\x10\x10\xb9\x069\x97\x99\xf2\x00\xd2n\xde$\xc0B\xc3\xde\xaf\xa4A\xb6\xf5AU\xae\xdek|S\xd5}\x078\xd1o\xf4\x8c\xd7Axw#\x17E\x8b[\x82{Jl_\xda\xe1\xc2G>F\xf2H}\xbeVz\x18\xf6\x8a\n\xee\xb2\xa4\xda\xa0\x8c\x88\xcc\x95\x0d\xcf\x15\x03,\xce#\xcc|\x9e\x94F\x18\xf8\xce\xc2\x18\xb9@>\x95\xd8j\xd3\xaa\x1b\xc9\xeaF\x0b\xb8:8\x12m\xde\x0c\x9a\xcb \xed\xfd\xa6\xeck\xa7\xc3GR-\x18\xc4\xed\xc1\x05\x0c}p\xc3=\xb6\x19\xd8Z\xfb\xfc\xdb\xb8\xe0n`\xc3\x1d7\x02\xc3\xcd\xbb\xfaH\xb1\xc2\x08\xf4P\x84\xda\x83\x07\xce\x08\xb2\x1eY\x85\x90<\x8c \xe9\xce\xc8v:\x8fgo\x07M\x1f-\x86S)\xca1O\xc3\xc8\xc8\xe4\x1b\xf3Z\x85<\x9b{\xd0vs\x06\xb5\xa4G\x95\x94\xacj\xfc\xd1\x89\x9e\xcb.\x8c\xb5\xf2A\xa2\x8cvL\xa0& \xc3\xa0j\x10\xf1\xa4\x11\xee\x1c\x1a77\xbb\xea^eCjo\xf0l\xcdV\xda3 \x1b\x16H\x9e\xbflm\xf9\xca\xad(:\x82\xac\xef\xcb\x14\xa9\x07\xbe\x19o\xcf\xda\x02\x13\xbc=\x93$q'\x11X\x12z\xd4\xba1\xef\xa6\x95\xd0\xd6\xd2\xe2\"O\xb8\x99\xa2\xf9\xbb\xfc\x96\x14\x87a\xc9\x8d,6\xdc\x893'\x9f\x19w$\xee\xdd\xd9\xff-\xfc\x11\x96Q\x92\xb0\x1f7I\x16\x16w\xf8+,\xc9\x8b\xe7\x98+*\x9f\x8a\xff[OE\xb1\xdd\x17\xe8k\x17k\x90\xbf\x8b\xf0VQ3r l\x82\xe3xZ?P\xcf\xa8\xb2\n\xd0Ng\xe9`\xb2\xde\xf3\xe8d\xb2G]W\x83+\x83\xf2\x81I3\xd7\xca&5X\xe6[\x93\xda\x89\x91\x83&U\x9c\x83\x91\x91\xe2F\xae\xba\x97\x93\xee\x18W\xe3\x80h\xef\xdd\xe6\xe8\xbc&\x84]\xdf\x87\xcf\xc8\\\x85J\x15\xd7C\x1e\xe3\xc4\x19\xb1\x96,\x96)Y\x90\x8c\x92\xb8\x87\xb5\xa9/\xe7\xb8h\\\xfdF\xb2x`g\xaa\xbb\x8c!{\xdb\x1a\x90 \xa9\x02\xc2\x055\xe2\xeeW\x11\xbd\xdf\x8b\x99\xa8\xcd\xbf\xa1\xe9$\x83{\xa8\xaf\xee\xa8\xa5\xcc\xabP\xf1MQ\xab\xb0\xc8\xcbc\x8e\xe2p\x87\x16R6\xcb\xd8\xad\x06\xd2\x192S\x80\x07q\xad\x1f\xb4S 7\xfdJX]\xd5\xb9\xaf\xd2\xb2\x19\xbf \xcc\xb3\x88TB\xb7\x0e\xd2\x8d\xd6*G;\xbe\xa2\x9a\xd5\x16Q\x83r\xa8\x14-Fe\xe0\x16\xacT\x97\x8c\xdb\xee^\xdbJY-\xd3\xd5v\xa5\x84\xae#\x14\xd1\x81\xf6\xd8\xda\xdb\xbcl\xf4\xc7\xca\xe7Z\x9aw;\xdb\xc7\xd8\x8d\xf7\xdc\xf9\xf5%\xf7Z\xfe\xd6\xb6\xe9*S\xf3ToZ\xae:O/\xbf\xcb%%Y\xecz>\xd0V\x0c\xf8\xdf\xd5=U\x03\n~\xcf\xa0\xd4}\xb6\xf3\xcac\xc7\xe1\xf1bA\xe2$\xa4\x04\x13w\x87\x85\x0ex\x8c(\x83F\x04\xf2\xbbf\xe7\xbf\xb9\x1b\x99\xfb\xe2\xf5\x8e\xe7z\x95\xdbN\xc6-a\x98\xc8\x17\xafw\xbfa\xa8\xeb\xcam\xfc\xcb\x1ds\xf0\x84\x17\xa6\x88?\x99\xfb\xea\xa9!\x86\x97n]-\x0e\xf6f\xc6\x95)jSWx\xa0R*E\x867\x9a\xff\xc5\xb4\xa1.y\xdf\x05\\W^\x1b\"_u\xa5\x0f\xb51\xa2\x12\x9f!\xb4\x98W6\xcb\xe1\x85@\x86\xc1W\xb9A\xb0W\x9b\xbaF\x9a\x93\x05~F\xa0sI\xf4p\x11y\"\xce]\x04\x7f\xd8\x83\x1d\xc6&\xb0\xb4\x914H\x96vN[\x90\xba\xa5\x1by\xde\x1b\xe0a\xee`s\xd3p\x1d\x85z>\xaa\x94\x95rq\xc2T\x1c\x8d\x13z\xe5C\xe1N\xbdz\x8c\x1a\xbf&R\x15w\xc9\xdf\x00\xcd\x0d#\x89\xd6i$\x05\x95Z\x07\x86\x11\xb5&\xd1\x1b1\xd3\x8bHaJ\xc2\xc4nD\n\x8aT\xb8\xf1\xe1+\x97\x12tw\xaa\x06,\x967\xce#\\r\x11\xc0\xe1\x92|\xa6\xa7yL\\\xc7\xe9p\x1cn\xd0\x00QT\xaf\x06\xdc\xaf \x83\xd3\xc1\xe6{\xf2\x80\xe7\x97\xeb\xdc=\x16\xb5\x9d\xdfC\xfc_f\xfd\xfe/\xb11\xe3W\xb3D\x05\xad\xd6\x9a\xe4\x94E\x8e[;Z\"B\xf3\xa3\xca\x8f'8\xd1c\xd0\xc8\x077l\x1e\xc4!\xe5\xe1|\xf6`s3\x81\xff\x80\xa7\\\xdd\x01k\x0b\xcay2\xa5.z\xa1\x10\xe2\x17ix-(\\6\x82 \xad\x96qH\xc9\xbb\xf0\x8e\xcd\xf3\x00*\xd7@\xb2cD\x0f\x83\x80u\x19\xde\xa5y\x18w\x84\xfb\xa9;\xf06I)\xe9>\xe5{:`\x10\xc9\x0e\xeb@9\xcfo\xfb\xc9C\xc6\xa0\xb6|B\xf5\xf8>\xe7\xc1\xb4\x94\x04#UE*\x17\xb0\xba\xfby\x06\xc5\xb6\xe1\xae:\x86ke\x1b\xb3\xd9\xc8\x14\xbf\x8e=l\x16\xb2\x91\xe1.\xc5f]\x88s\x17\xcd\xc3lF\x84UW\xff\x0c\xdes\xfe\xda\xbe\xe3\x1d\xe7\x11\xa70|\xe4)\\\xe41\xb9\xd7\x0c\x9a\xb8/c\xd0\xae\xf6\x06vR\xdc\xb1\xd7|\xf7\\\xf37\xa7\xcd\x9f\xb5\x91\x81Vr\x8a\x1b\xcfi\xb3p:Z\xd1\xca\xb1\xc1:m~\xae\xc2J2;\x83+\xee\xa2\xf2\xbf\x1ea\xe2\xf5mH\xc9\x8fd\x9a\x17d\xfc\x99D+\x14l\xd2 \n3\xf1\x8a~.y\"k\x0cOR%m\x1e\x96?\xe5\xe2\x12\xa6\xfa\xfeKB\xe7'\x84\xf2Y[\x86E\xb8 \x94\x14\xe6\xd4\xe3,JW%\xab\x94P\x9ad\xb3\xb7ya.\xf6\xe3\xddqL2\x9a\xd0;\xfc\x1e\xa6i~{Y\xdc\x1d\xd3\xb3\x15\x95\x85\x16\xec\xa8\xafn\x0ddj\xa1\xbf\x96\xcb<+\x89\xb9P\xa9\x16)\x1b\x05\xf8\x1b\x0dg3\x12\x9f\xc9\xb1\x96\xcd\xa1\x97\xac\xbb\x97\xe1\xac\xca{Dh\x98\xa4\xd5\xab)\xfby\x9e\xd3c\xaet\x87r)\xca\xa3Z\x88\xf6\xe6rzo\xc2\x92\xbc\x0f\xd1\xacO\x00@Rw`\x9ad\xf1Q\x95\xc6+!\xd1\xaaH\xe8\xdd\x91\x96U\xa6\xf3i.\xf2x\x15\x89\xa6\xa2<+W\xb2\xdd\xbc9\xc2eH\xe7\xb2\xfcb\xcd\xfd!I\xe3g\xfcM>SRdaz\x94G<_\x92M\xf9^M\xca\xb3\x83\x8bg\xbc\xec\x92D\xd5\x8f\xff,9\xa8\x9c\x932O\xd7$\xbeX\xdd\xd0\x82\x88\xe6Y\x06\xedC+\xbdQS\xf5r\x91\xaf\x8a\xa8\xce|Ay_WE}\x19\x8b,\xaf!>\x82\xa2\x15\x94\xb9\xafLA\xdaQ\xa5'GyA\xd1\x0c\xf1Wt\x87\xf8+\x9aH\xafn\x13cm\xbf\x97\xd0nVa\xb0\x1c\xfd\x08\x17\xecL\x9d\\1\x96bF\xe8q\xe6N\x9c\x05\xa1\xa1\xe3\x83\x83K\xe6T.\x9e5G\xb5\xd4\xf3a\xe2T\xdb\xact\xae<\x1f\x0f\x8d\x12Eh\xffy\xe1\xb9\x93+\xcfC\xc8\xea\xb1\x87\x94\x97\xa0\xc1I\xb8\x0c\x92\xf2$\\\nE%\xec\x93\xeb`\xb0\x06\xaf\xd6\xf4\x16\xc9I&\x12\xb5\xb9A2\x81\xf7\xe4$\\z*9\xea\xab\x98\xe1g\xae\xe0\xd2\x7f\xf7a\x9a\xae\xf7Bj%)\xbf \xb1O\x94\xe7\xf1\x0e+\x93%\xa7\xea]RR\xcf\xf5\xbc\xa0 l\x1f\xb9\x8d\xaet\xdd\xc1\xc8\x08\xa4\xb1\x081A\x959\xd9\x97o\x88\xb8\xaf?/R\x87[5\xd4\x89]r\x19F\x9c\xbbj}\x9b\xe0\x04\x0el\xca\n\xf8r0\xb0j\xce\xbb\xbe\xfc\xffP\xa3\xa87\xa7\xbe<\xe6AX\x8e\xb3\xff\x1a:\x87\xf1\x84|\xf2\x83\xa4d\xffT\x81$ \xca|A\xbe\x11f+\xe0\xd4\x94\x8d\xfbf\xe4\x92\x07\x1d\xba\xf49>\xa5$\xa3,\xc9\x0c\xabz\xc7\x14\x08}\xd3\x9aH6\xd5\xb1K\xbcj\x9f\xf7\xed\xef\xd6~f\x0b\xda&\xd5\xb8\x8b\x92\xfb\"\x8f\x81\x953Tz\"n\xceZ\x1fQ\xa7\xac\xb5\xb5x\\]r+vW\xbb\xd8\n\x1d\x93`1yb]\x8bM\x811\xd2\xcd_Fp\x89\xd1\xf30j\x15\xcb\xe8,V)M\x96aA\xb7\xa7y\xb1\xd8\x8aC\x1a:u\xb6\xbcX\x1c\xb1\x14\xcc\xcapE\x12\xe1q\xb8\xfdy\xeb\xf6\xf6v\x0b\x8b\xac\x8a\x14\xaf\xd7I\xecT~\xda\x8d\x04\xb96U\x06h\x14\n*\x15\xc0\x189\x1aI\x894\xf2\xe5\x9d\x00Z\x1d\xe3\x87\xf5\xe1\xde \x83&dy/\xb0c\xc7\x8a\x9c}\xc3\xa1\xd2\xc6*\xd1\xaa(HF\xdf\x0bR\x84\xd3e'\xcdS\x19A\xc5\xfd^\xbfrY\x99y\x04~1\xf4\xd2k\xd6\xc1\xce\xff\x893#\x14\xe1{\xc5\xff\xe5%\xfe\xe7\x1e\xba\xd8\xaf|\x89D\x0f\xfb9'a,\xf6B4g?\xd0\xcb\xa6\xa3E\xd2\x88z\xc5\xde\x15Wf;\xd7\x00Z\xf7\x9fS\x1e%M\xa5VX\xd1P\x08\xcb/HJ\"\x9a\x17\x9e\x1b\xf5\x05\x82\xac\xb0\"\xee\x8b\xaaBM\x9d\x9fs\x04\x9cHz\x94\x86V\x85\x1e\x15\x9d7Q\xd3d\x8f\xd2\x0c\xab\x8e\xa3\x0cG\xf7\xfc\xef\xeb\x04\xe1\xa35\xc8k\x14\xcdf9\xdd\"qB\xf3\xc2\xd6\x01A\x9e>J\xf3\x7f-\xf3\xac\xa2>8\x18\xe9\xb3\xacm\x86%\x87$\x8dp~\x94\xce\x14\xa2\xbe\x9e\x0e\xf9Vz\xbe\x97\\R\xdbC\xecSh\xccB\xf7\x11\xc5Qr\x8b\xce\x91\xcd\xca\x80\x89\xc3\xe8\x03~M\xa8\xa6d\xdc\x8f1\xce\x05\x8f\xca\x8a \"~b\x19\x9c\x151)H\xccg%X\x90bF\x18\xc3S\xd3\xa9#\xdd\x16K[\xbbx\x08\xb3\xf4mK\xd9\xdd\xd3\xa5\xdf\x00<\xcf\xd7\x97\xbeZ\x87\xf6\xaa7\xde\xe7*\xff7\xa8c\xd3\x96\xbaC\xb3\xc6\xb5\x88#)\xb9K\xf34\xcc\xfd\xee\x0b\x16\xd1\x98n\x0f\x8a0+8\xd8\xfe\x8a\xbb\x86\xf1Wi\xaf#\xc8\xcai\xde\x9e*m\xae\x16|d\x1aG\xfd\x98\xddP\xab6\xac\\\x83\xb57\xb7\xbb\x1e\xd8\xae\xda\xaa\xa8\xb3u,h\xc3\x9f \x84%\xe5\x0c\xe6\x0e,\x06v`{\xbd\xefNv\xb6^_}\xe7}\x0c\xda\xbf\xb6\x93\x80|&\x11#p\xb8\x0b\xb7]\xd3lH\xe9\x87\xb9+\xf1\xc0\xae\x10I\xeb2\x02\xaag\x12\xee\xdaB\x18s\xe3\xb3\xbe\xc6\xf1\x0e\x9a\x07\x0e \xca\xe4\xef\x04~\x80]\xaf\xb9\xfb\x05\x17\xdbf)%\x03\xd7\x93\xad\xb9\xd6\"\n\x1d\xec\x83K\xda!\xe9H\x87\xca]\xdd\xd5\x8d\xaad\xd5Uk\x18bc\x1bV\x83\x1c\x10F\xae\\\xb3\xb6\xf0d0\x15\x97K\xd9\xf0\x9a\xb7\x8f\\W\x1f\xb6\x9a\xbd\x9a\xf2\x0bB\xe7y\xdc\xab\x9f_-\xb7U\xa6.\x9f\x84U\xc6\x18\xfb-\xc6\xd8\x9bU\x07\x80\xc3\x95\xe5J\xdat/\x8f\x87\xf0\xa8\xb9\xda\xfanh\xbc\xdf\xe8r\xc3oCR\xbc\xe1\x0bB=\x974\xd9\xb8\xbe\xe3\xe5Z\x97f>vGd\xd5}\x1d\xb9\x95\xc8\xab\x12\xb2~[O$\xd5)\xeak \x9e\x0c\xc8\xca,\xf8}\xd4n(U\x1b\x89\xfc\x968\xba\x97\xd0\xab]\xbfY)=d\xd3\xeav}\xa0W\xbe\xd031\x82xS\xb0!\x08g[\x15v\xb5\"\xd4 F\x99D\xeb\xa6\xdcoI\xe2\x1fe\x96\xd5.\xda\x85\xa1P\xcd\xb6r3\xf0(\xed\xcb\xfa\x8cK+\xee#\x1e\xa5!V\x97\x99I\xac.@\x1e\xa5\x1dQ\xdd\x006\xa5\xfbf\xc6\xdc\x99;\x1fn|\xb8\xee\xbe\xceku\xac\x11\xd8\xdd\xaa\xc5Qe\xe7\xd7\x8c\xaeSu\xd0\xe9\x9b\x02\xf9\xa0\xd7\xa3\xae\x0c2\xd3FS\x18\xda\xaf\xb5\x06j\x07o\x13:\x97\xaa6\xe5\x80\x91\x19+\xd1p>'Z\xe4\xd0\xab\xf4\xa1#W\x1f\x03b\x17|\x8ekP\x11\xd5\x9f\xaf5\xe3S\x1f\x04\xcd\xdeU\xe9\x8f\xdc;\x83E\xb2\xfe|m\x85\xb6o\xe7\xb0~\xb6\xfbpnt\xca\x80|\xe4c$%\xb4\xbd\xa5\xa1h\xae\x97#\xeeC\x1fe\x8b\xb3\xbaz\x0f\xc7\xc6\xfbg\xd9\x87\xfa\x8a\xb6\xf7\x94\x92S\x82~\x81*\xc4\\]\x02q\xe5\x01W\xd9G\x83\xee\xcf\xa05\x1a\xe5\xc6\xcc\xa0?\xd1\x89\xc6\x9a\x83\xbc\xd0\xd8\x08\xe5z\xda<\xed\xb7>\x8c\xfd\xc1\x13A\x06\xdf{\x81r\xc6+`N\xab\xf3YEl|5\xaflJ\xb7\xf2d\x0e\"\xf4\xab\xcfH\xf8]\xf4\xcc'\xf7\xa2\x10\x02\xe9\xf0\xd0\x07QZ\xfdD\x06\xce\xb2@=\xc6A1\x8c\xbf\xd32\\G\xe8\xd9\x03\xfb\x08C\xfb \xf6\xed\xff\xd5\xea2\xf4^\xcbZuC\xb9w\x94w\x8c\x1d\xfb\x11TPn\xc8\x9fz6\xee!'\xb1\x0d\x8a\x18\x83\x10F\x95i\x10\x9c\xe2x\x0e\xf3l\x9a\xccJ\xb6<\xf6\x85\xc5\xcb,\x06\xb8\x17yAM>\xd0\xe5\xc3\xfd\x10\xd7{\x92\xe7\xef\x04\xf5\x0b\x94O\xe4\x05\xfd\xf1n\xd8\x9a(e\xcd\xee\x00\xba\x02\xd4\xea\x8f\x9c\x0f\xa3\xdej!t\x1fV\xd8?R\x94\xca\x1cL\nK\x14}P\xe9\xeb}\x90]\xe8\xb0\x11\xff\xea5)\xa6>\x0f\x0c\xf2\x9e\xdd\xd8g\xe9\x83\xbc\xee\xb3\xbe\x1a\x93\xbc'^z\x02{8t\x8aU\xb8\x05^\xd0\xf7\x0eV\xc1\xdb\xdd[\xbb>\x96F\xdc\xd9[\xd6\x01z\xa0\x8a\x0e\xca\x11$\xf7F\x04\x86\x9d\xd9\xdc\x82\xbe\xa6\x07e><\x86\xca\x9ck\x192\xaf\xf0~\x17\x1a\x9f\xf0LST\xb4\x1e\xa93\xbc\xbe>&\xa1\xf1~\x80]ik\x90=J\x8f\xb4j\xef\xd5\xb13\x8e#\x9b\xban\xf7\xe0O\x0e\x95\x1b_\x96U\xb2\xc9&\xa8P\xb4\xeb\xee\xd1\xc2\xa7\xc1-\x98\xb4\xfa\xee\xd1\xd0\xc1\xe0\x86\x0c:\x85U;\x1d\x0dh\xc6)M\xbd\x10\xa3\xfa\xe2\x90\xdeK\x04v\xef\xbbw\xa3JW\xf3|5\xa3\x92\xfcA\x8a \x03\x9b\xb4\xcaW\x8a\x81\x9c\xb0\x14E\xe7\xb89\xb2\x06\x9d,\x15\x9c2y\xc9\xe2\xd8\xc6\x08\xe2\xa4\x1eX\x0b\xa6\xcd\xc3r\xce\xc5\xac\xf8\xf30\x8f\x89q@\xa0\xe3y\xc3\xa5\x9aXq\x93\x11\xca\x03Y\x85JQI\xed\xb6Y\xf7NMi\xb7o^\xb7N,\xf3\x9ec\x99\x1ee^\x1d\xda-\xc2y\xe9)+\xab\x16\xc2@\x13\xa9c\x7f8\x98^'\xb2\xa3\x0c\xab\xe6\x0cf7\xf4{\x1f\xe3.\xbe\xffh\xfe\x19\xdb\xf7\x1b\x01\xa5\xb0\x80\xc7P\x90\xb0\xae\xca\x99\x98\x93\xdc0\x95&\xe5\xf0oD\x83\xbc\xd0\xd5c\xa1\xb8\x07T\x97\xd4\x9ah]\xba\xa1\x0d\x04\xd7y1\xa5N\xa4<\xac\x0c\xb8\x02p/Z\xd7\xc1\x8e}\xd0\xf7\x17\xf2i\xcd\x0e'\xfa>W\xf5\x93k\x1d\xff\x07Hj$\xdanH|\x8d:r\x06\x17<\xdc\xcc\xb1V\x1a\xc5\xf8\xcf\xce\xb6\x08K9\xd9Q\x02\x12\xaa\x11\xa2do\xe0\xd2\xde\x9f\xff\x81*\xa9lRz\x95R\x0d\xb3p\xf2\xaf\xd155\\\xa3\xa0\x99\xb2\xf4\xf1\xd2\xb9\xbd\x1f\x88\xd0\x85\xccU(y^y\x9d\xf7A\xb9T7\xe5#\xaa\xe5\xb5;\xbd\x97@x\xff\x83A\xac\x1a\xaa\xa0x\xa7\xd4\\\x8a\xdf\xb5\x7f\xb11\x1e7\xe5p\x95\x05M\x1f\nl\xcc\x8fP\xaa\x0b\x16!\x8d\xe6\xee\xf6\xffq'\xe1\xd6\xdf\xaf\xd8\x9f\x9d\xad\xd7\x9b\x1f\xb7\x82\xab\xef\xbc\xd1\xb6E\x0b\x97\xbb\xa0HJ\x19\x90\x80\xb1\xed\x1c\x92\xb3V\xd0\xc1\xd6)\xcb/P$\x8a\x14\x92\xef\xd6G\xe7Z\xac\x0f\x1f\x9e\xc33\xe6\x9ar^\xc3\xf6\xc1`h\xd47%\xa2s\x13gN\xe9\x12\xd54)]\x96\x8a\xb7\xac\xe3\xaa$\xf7\x90U\xb7\xdce\xf4\xd4)\x0d\xe9\xdd,zd\x8a\xc7\xa1S\xecF\x19-\x8d\x07\xdb\xe6Rp/z\xdf,M\x96\x03\x02\xcfJqj\xe5\xfa\xd1\xa0\x0b\x93\xa9\xeb\xd8\xc65\x7fm\xf7\xc4\x8c\xd6\xf61\xde#W\xf3> \x97\xda\xb6\xf9\xaf\xb7\x8d#\x8a5\x9c\xf8\xddp8\x98\xcf\xd4\xd7\x92p3\xf3\xa6W\xc2\x92\xd0\xd6+\xe7\xc7\xb9E\x12J\x80\xc7\x8b%\xbdC\xfb\x9f\x8az\xc6\xaf\x12N\xf1\x93\xb4\xa8\x92\x89\x9a\x16\xe0a\x18\xcd\xd5:M\x86S\x82O7\x7f\xc2\xb4\x0bi\x9c\xb5\x0c\x8b\x92\\\xe6\x95U\xd5\xc5\xf8\xf2\xfa\xe2\xf0\xa7\xf1I\xc3\x9c\xfa||q\xf6\xee\xe7\xf1\xd1\xf5\xc5\x87\x1f/\xcf\xc7\xc6oj\xda\xd9\xfb\xf1\xf9\xc1\xe5\xf1\xd9\xe9\xf5\xc9\xf8\xf2\xe0\xfa\xe7\x83w\x1fx\x99\xc3w\xe3\x83s\xf6~\x8c\xf9\xde\x1f\x9c\x1f\x9c\\(_\xce\xc7\xff\xbf\x0f\xe3\x8b\xcbF\xca\xc5\xfb\xb3\xd3\x0b^\xfc\xdd\xd9\x9f\x1aYXoO>\\\x1e\\\x8e\x8fZ\xe9\xedw\xa5\"S\x0fD\xdf\xc7'\xef/\x7f\xe5\xe9\xd7\xc7\xa7\x87\xef>\\\x1c\x9f\x9d\xaa\x19\xf0\x93\x9a\xf0\x9f\x17\xcd\x0c\x1f\xce\xdf\xa9\xaf\x17\xef\xc7\x876\x034\xd8\x83\x1b7s\x9f~\xaf\x93\x9d\xb9\xf8\xf2\xea\xb9\xfe%\x91e\x9e\xe9_B\xf1\xe5\xf9S\xfd\xcbJ\x96\xd9i\x15*\xc5\xa7g\xcf^\xe9\x9f\xd2\xea\xd3k\xfdS$\x9b\xfa\xdek\xd0\x8f\x1c&/\xfaT?%\xb6z\xc7\xe8\x8e\x82,\xd30\"\xee\xf6G\xba=\xf3\xc1\x01\xd0\xf1\x96\xcdkc\xad/\xd6Fsh/q\xdd>\x1f+3g\x8d\xaej\x9e\x1c\xcd\xbd\xf5-\xb6\xf9\xa7\x1d]\x18\xe0\x1c\xe0\x03j\xe9?\xb8\xf5\xdbok\x9d\xa1\x85\xde\xc5\xec\xe9\xc2\xf8\xa1]\xe0\x06\xf6\x88\x13\xcd\xbc\xb8! bO_>w\xf4\xc5\xcc\xa9q\x95?\x8b\x86\x9e8P,\xf7?x\xb4\x9f\x86\x0b2\x02K\xf0\xa8%?\n\xac*\x85I\xf9\x97E\xaa[\xfd\x00\x0crL\x80\xf3\xd6)\x89\xb4\x1b\x9b\xfe\x8b\xa6\x0f\x87o\x9d\x1c1\xb9\xddSS\xdcsjR\x12\x16?\xeb\xa7\xed\x83A\xfb\xf8A\xf3q\"\x14D\xdbj\x1c\x03\x96U\x9av\xa1\x91a\x1f)\xdb\xd3\xfd\xbf>\xa8\xfb}\xbb\xc1\xb2\x9c\x9f\xc8\xdd\x08tS\xbd\x87\xcc\x80\xb4\x1d\xfb\x1f:\x03\x1a\x1f{\xcf\x19`\xf0\xab\x10\x96\xdf2\xf6\xcb\xc7\x1d\xbbT{\xbe\x87\x0f\x10eD\x92r\xfe\x96\x01\x9d\xfc\xb7\x18PI\xe8}\xd9[\xdb\x80\x8e\xee= \xce\x9ew \\6^\x0bx\xca\xf1\x1ad\xc3\xb6\xf16\x89\xd9iEd\xbe4\xd9\xa5e\xaen\xd1\x19W\x05Z\xf4\xe5\\|\xda}\xd9\xfa\xb4\x96Ti\x9b\xcc]\x88O/_\xb4\xc8\xdcY\xf5\xa9Ej\xdfI\xc3R\x13\x93{c=\x14dh\x1e\xd51\x04\xe9v\x0ca%w\x1a\xf3xm`\x1e\xd0\x14Q\xfa\x9fA;\xc8\xe6\x18n\xdb\xfcG\xa3\xc8\xaaH\xb5\x12c\x03\x07\xd3(\xc2\x95\xa8\x1be>\x9b\xd8\xa0F!<\xd2\xb5R\x83\xb8\xabF-\x84\xf1\xc9\xbc\xae\xfa\xfaF\xab\xf5\xd0\xc2\xc7\xf1\x8a$\xf3l\xec\xd0'\x13O\xc8\xcb\x95\x84^\xcb\x8bt\xad\xd4\x81\x81\xb3T\x0b!\n\xd3\xca\x9cup\xa9uYq\xe9m\xa9\xe3\xbd\x81\xf3\xe5e\xd3|f)ca\xa0y1D\xb9\xb6Q\x9e\x18\x99\xf1fAS\x8b\xc7\x9d\xec\xbdZ\xbesi\xfe:@\x8a\xd0\x00\x95J\xccz\xbd 4\x14\x87j\xb3\xceS\x8b\xb4\xa2QOm\xde\xda({\xde#\x051\xd6q]r\x81\x8bV\xd7Q\x05\x0c\x95\x80\xc5a\xcb/e\xaa\x8d\xcc\xef\x86\xaa\xb8\xb9;>\xba\xa8\x16R\xc5J\xdc\xa6\x9bH\xab\\zS\xe8\xd3K\xfeV\x19:\xad9\xb8\xc5\xe7\x01\xe6,\xcdGLQe\x937J\x96\x8c\xdc\x99\x10)\x8a\xce\xea\xf8\x95\x9c027g \x85{R\x83\x1c\xd4\x1a\x16\x10\xc3@\xc0\x97/\x90\xb8\x18\xb0\n\xc1\xb6C\x87\xabD\x0bqF\xda\xb1i-\xda$\x1d{\xbez\"h\x91\\\xaa\xa0\x0c\xa7\xe4]\x1e\xc6\xc6h]j4=\xf3T\xf2\xa5a\xf4t\x9e\x8aX\xfb\xe8\xf1-\x0f2r\xcbx\xf6qq\x9fN\x9b\xa7\x8f=)Y\x93t\x042\xa0\x935\xdf\x82\x94e8c\xc4GP\x90\xb0\xcc;\xcc\xe4\xd2$\xc3|\x8b\xb0\xf8\xc4OQ\xf6+`\xc9\xa8\xdb[\xbfmb\xe4 .:\xb3\xcck{\xf2l[\x05\x03\x1d)\xde6\xf7\xc0Uba\x85\xb0\x0f\xce*\xe3\"et\xf2\xc1\xb6VTo\xad\xd0\xe3&\xe0M\xd1\x88\x1bz\xec\xd0\x1fH#}0\xc4\x95\xfb[\xa5\xbf\xa5Hf; a0\xecM\xab\x86d\xe5\x85\xa8\x7f\x7fBus6`\x8f\x82t\x83\xde\xbbO\xa1\xf2\xff2\xed\x00\x8a\x15\xecA\x18L \x8d\xe6\xf6L%f\x12S\xd5\x01`\x98\xed\xe0\xc2\xc0\xe3\xc8'\xaaD\xb2\xb8\xfa)\xec\xc3?\xbe\xc2\x08R{\x91\xa9\xbcT\x14:\xc2f\xb5\xa0\x0fh, 7\xe6mXd\xdc\x91\x84\x98\xa2\xc6:7\xc2tB\x99d\x11\x81\xf5\xb3`w'\xd8\x810\x8b\xe16IS\xb8!P\x90E\xbe&1$\x19\xac\x9f\x07;\xc1\xce\x1bX\x95\x04,r~\x11\xd0s\xc3\xf1|\x0ep\xb6XW\x0c4\x18i>\xedRv\x8e10\xd9\"\x8fI*/ZN\xc2\xa8\xe8\x88*5\xc7\x12\xd5\xcdVO\xee5\xe6\x16C9\xce()\"\xb2\xa4y\x87R\xf5B\x94\xe0\x04\x8cR\xc42\xcaz\x95\xeb8?y\xe5i\xc1\xad\x9dG\xf0\xfb\xf6\xca%x\x1e\xac\x8a\xd4\xaa\xfe\xc5&\x8fq\x15\x11\x83\x88wIFNW\x8b\x1bR\xbc\xcd\x0b\xb4\xcf\xdb\xb7}h\x86\xdd0\x84\xc2\x90\xcf]\xd5\xcd\x0bZ\xd8\\w\xcb\x1b\xb7\x0eT\x8f[\xca\xe8cH>\xac\x8dN3\xe4\x9b\xb0$Gyd\xe5\x1dA\xb8\x00mB\xc8\x08b{\xf6&x\x8c\xa0c\xd3\xb7ac\x04\xeb\xae\xec-\xc0\x18\xc1\xc2\x98\xfd\xab\x17\xd09\xc9\x06\xe8WA\xe3\x8e\x95M\x98\xbd\x03\xec\xe1\xf6\xad\xfc\x1a\xd6\xae*\x9eL\xc1Mz \x0c\xa8$\x02\x0e\xba\xf3\xcf\xcc$\x06\x082\xa3y\xfb\x9f\xe1\x1do\xa6(\xd6t\x0d\x11T\xe5\xbc\x81\xda\x9a\xeac%K\x08?\xcf\xd9\xa4LWi*\xb6\xc8\xcc\xbd\xf3\x95\x14i\x15\xc0\xd2\x96\xdc\xc8\xb5\x91\xbd~ \xfe\x9a'\x99\xeb\x04\x8eZ\x04)\x15FU\xcb\xd8\x93$\xa0\xdcE\x9b\x9c7\x1f\xb5s\x84\x8b iu\xccr\x9a\xef\x93\x89\x0f\x8e kz\xa3?\xcb\xa7\x11\xcf\xaa#\x10\xa8\xfa\x08\xb9! Dc\xbd\x85\x86X\x01\xda\xa1\x8e= #\x13/qV\xc6E\xf1#j\x99\xe4\xdf`9XhWfvS\xaaVr\xcb\xfc`r\xa5\x1dGo\x85>\xda\xa2&\xc6\xd8kZ\xbf\x96\x15Y\xcdh\xc7\nh\x81X\x03\xdfQ5b\xa8\x0f!\x0f\x80\xe2C\xec\xc3\xdc\x87\xb5\x0f\x0b\x1f*k\xdf[\x1f\xc6V\x85\xa1\xba\xed\xdbb\xd0\x86\xc1p\x0bo\xdexP\xde&\x9c\xca\x0f\x96\x05F\xfc\xe2\xc1\xd0\xbb6Z\x14\x96\x04vF\xddk;\xe5\xe7\xd7\xdf\x82\xf2\xae\xa4d1d\xe3\x12\x19\x8c\xf1y7\xdc\xb0\xe7\xa6 a;\x92\x9a\xfa\xd8\xc1\x05lH\xc2\x89\xc9\x8d\x00\x1e\xe9\x05`\x04q\x9e\xfd\x9e\xc2<\\\x13\x08\x81\x0f\x06h.\x0c`\x08\xe4\x99\x0f\xe1M^\xd0$\x9b\x05\xdcaQxS\xac\x96h\xe2\xc1\xda\xb0\x05\x07\x069\x93\xcf\xfbg2\xd3yQ\xc1\xc6\x92\xa2\xa8)d\xc1\xb1N3\x1fi\xe2\xbc\xa2\xf2\xf8P8\xef\x97#E\xaaS\x9e\xa1\xa4\xfc\xade\xee9\x04\x94\xd6\"R\xe8`\xacK\x0dw\xf3\xb6\x87U\x1eb\xe8\xd4\x14\x91\xf0\x12\x91\xf0\xa2\x1fh\xe1\x1bp\xb0\xe9\xf9\x16\xbclz\x86\xe0j\xd3S)\x14\x8au{\xeaw\x99\x1b\x9a\x1el\xf9\xe9\x83[\x0e9\x91K2\xea\x0b\xb6\xbc \xe5*\xa5'\xe1\xd2\x17\xbc5\x83\xf2_\x12:?\xe4\x0e=%\xcaV\xa0\xed\xa5\x0f\x89\x9b\xe2\xf9z\xbfi\x93O\xc5tL9\x1f6\x8c\x96\xd2\x1f\x13[r\xf7\xb0\xaat\x96\xe5\xe6a\xd5\x98\xd8\x19\x83\xa2\xd2\x90\xc7\xc8\xea\xdc\xde\xbb\xaa>bQ\x7f\x10\xbc^>\x18\xbc\"\x05\xbc\x96\x88x9\x9f\xc4\x8f\xba\x88sWP\x04a\x9a\xe2 R\xba\x1e\xf7f\x86\x8c\xcc\x10n\xc9\xf6\x0c\xe4\xa2lO\x9b\xbbZ\"w\xb5\xd4\xcc\x16\\.\xa1\xb8?\xfbdz*l`b\xa0\xe6\xee\xfa\x7f\x1b\x03ez\x1e\xc2T\x99\x9e{3Z\xa6\xa7\x9f\xf92=\xa8Pm`\xba\x16\xd2\xbd\xf6\xac>WW\x885\xe3\xf6\x87\xb4\xfa\xd0\xa2\x83\x1e:\xbd\x15f\xef\x94\x10u=\x96\xa3`\x04\xf6\x08\xf0\xb6\xe7A\x88h\xf7\xfb\xfba\",\xe4\x90,v\xeeW\x0e\xd4\xcdX\xd2|i\xf1\x91cz\xba\xa9g\xf9|\xc5\xe8\xf1&G\xb6\xc6\xdc6\xc9\xa4\xfa\xb4\xae\xf0z|)\xa8O5Xs\xd0\xcf\xde:\xba\x07\xfd\x95Q\xc3\xab\x8an\x13\xb8d\x00bW \xd6\x9d\x9a\x9c\x0d\xbb\x93\xab\xcac\xcfR\x9a\xd0\x074\xff\xcf\x8b!D\x84\x15\x9c\xa7\x8a\xc8X\xd4\xd6=\xc0\xae\xf5\xe1\x90\xdb\xc3~\x8e\x95\x83\x92{-\xafxz\x1f\xaf\x8dx0\x10I&>\xed\x06\x07\xe4\xf1\xfaz\xf4\xba\xbbG5c\xf1\x1aO\x87\x1d\xec!^V\xba\xbb\xbb\x9e\xafK\xfe\x02j\xbb{\x80\x8aL\xed\xa1Sc\xb3\xa1\x83\xcb\xc6>\xae \xd3\xdef\x9e\xd9\x9b\x19\x8a\x11\x86\xec\xfe6\xd0\xab\xbb\xda\x87\x89\xb1\xd4\x841j\xbb\xaf\xafZ\x1f\xaf\xda\x0e2\xe0\xd9\xf7\x0d\x9d{\xab\xb5\xc77^\xec\xffM\xc6\xc1\xf4+\xa8\x03\x0cC\xfaV\xf7LX\xbd}m\xdb\x02\xdc\xd3\x11x\x8fJ\xdcy{\xff~\x8b\x8e\x9fT\xd8l\xaf\x99m\x80\xfe\x10\xdb\x1c+o\xfdO\x1a\xdd\xc4\xe2\xc0F\x0cO\xc5\x83\xf7\x1bi\xcb0\xe9[\xd6\xee\xf0A\xa3\xab\xb4\xa5\xcdC\xe4.\xc1\xef\xbd\x84]\xf6X\xdf\xae'\x7f\xf1\xcf\x18\xe9#\x98\x13\xf0\xb058\xea\x9f\x85\xe9\xc2\xf0iS\xb7v\xd3\xbc\xed\xc1j\xae\x03&\xa5_=\xd7\xfc\xb9`'\xb6\xc9\xcd\x81e\xc9>uAK\xc3\xb8\xef\xbf\xe7h\xffv\xaf\xd1\x1e\xf4\x8c\xb6e\xe0\xf8\xbfa\xd0g]\x83n\x18y\xf6\x1e\x9c\x1d\xe34\x8c\x857\xff\xbe\xab\xf9\x96\xd9io\x17\x86*\xe5\xd9Tn\x8aa*{\xf9P\x95\xbd\x95&\xeb6\xe7\x12\xf1\x06\xc3\xf2YOu)\x12\x96\x0c<\x18\xca3\xe7\xe1r$qW`\xcc1\xc5\x1c\x95\x8e\xa8\x05m\xc2\x1e\xacl\x9c\xc1\xfd\xb4S\xac\x9a)\xe6\xec3\xbc0\xe0\xacD\x9b|M\xa6\xe0\xce\xe0\xc9\x13\x98)\xa1\xc7\xf4w)y\xd2\x93\x85{\xd2~\xf1\x93\xa4iY\x0d\x1bBK\x86{\xc7\xaa\xcf\x89\xf6\x1e3\x98\xa5w\xc6\x0b\xcf;\x1d\x07\xb9\x93\xd4\x87\xe8\x8am\x84\x8c\xad6\xd2X^\x17\x9bJ\xd4)\xd9k\xbe~\xf9b\x8d\x1f\x00\xca\xd6P\xcbLx\xc3\x1d\x1e\x0c\xdd\x0dt\x0e\x8e\xa1\xfcv\x84\x8b\xa52\xf9;w\xda\xe1\x9a\xea\x82=p\x0c\xbe\x97\xc0\xcc#\xa0H\x07\x83\xc8}\xa6\x1f\xaa\xc8Lq-\xfa\x91\xcaH\x01\xcd/\xd0\x12\x96\xb1\xcf\x02<*\x00?\x8eQ\xc8\xa7\xbe\xefi\xdfG\xbcP\xca\xfeD\xa2\xf3\xcd\xfcY\x90/\x8fcw\xc6\xefc<\xd4)\xe5d\x96k]\x136\xa97\xb0\x07)l\x823r`\x13\"\xf3\\2v\xb6\xe0\xb1>\xca\xa0D\x1c@\xe2\x0bLro\x90ko%w\xe8_]\x8bjX\xbe\x9f\xc3\" oR\xd2\xa5\n\x05\x18,\x9d\xe5\x1eU=\xe9\x96\x08\xb0\xa5,\x97aDFpc\xcd\xf8\xb5_\xbap\xfb\x08=\xedo\xbf{\xce\xabv+\xf7>\x15t]{\x12\x91\xec\xc35\x8c\xe0\xd6G5^=R\x1d\x0e\xa2\x9d\xec\"\xa0\xf0\"\xad\xa8u\xa2L+\x9d\x17B\x87!\xdfm\x7f\xe7\xd8\x17y\xac\xb6\xfac\x1es\x9c\xc4\x8b\x9bK\xb1\xc1\xdd\x05I\xf9\x9f\x17g\xa7\\0\xed\xb9cT\x8cW\xab\x81=`\x19\xb86\xbc;\xf6F0f\xfba\x8csi\xc8<\x16\x93\x0c\xa3\xf6\xa7\xf6\x86n\xa5\xb0\xa1|\x163\xaf\xb8\x01\xf9\x07z\xe6m\x8f\xe33\xee\xc4\x9bU\x92J2\xcc\xfd\xec\xf9P(\xc4\xa8\xab\x1c\x90\xf5A\x08\x9f\x0d\xb5\x11\xc3\x11\xa6R\x19\xbd\xfeq\xd7\x0d!\xe0\x84\xea*:\xea\x93\x9bG\x99u\xab0\x16m\xc2\xd32\xc0\xbc\xe1\x9bD>_U\xf8k\x0e\xd3p\x97\xcc\xc6u\x01{p\x14R\x12d\xf9mG\xa8\x9bLRg.\xd1\xd5\x05\xad\xd3F\x83x\xc5Qj\xa3\x0d\xd8\x82\x8bj\x0dyO-c4\xa8O}\xf5\x84\xa0\xad\xbfyuJ{\x1a\xea8c\xb9\xf6F\xd7}\x0b)\n.^\x98\xab~m\xccg\x9ei@\x8d$\x0b\xafI\xdan{\xf4aK\xf5\x04\x83\xa3\xaf\x1d\xab\xa3\xaf\x9d\xa6\xa3\xaf\x9d+T\xe37P\xef\x15%\xda\xfe\x96uR\xa0\x89\xd8\x07\xb9b\x9e\xc3}\xfeP\x0c1\xc9\xcb9Wf\x1fi\xdd\xa4\x9bT\xd2$\xc14\xebR\x9a\x0f+}\xd5\x01\xf4;\xe9\xe7\x07\xca\xea\xf6\xdf\x16\xa5\xce\xed>\x0c\xb9\xfa\x80\xe6\x1d\x8b_K\xd8\xa9\xfc\xb0\x1d_W8x\xednl\x8a\xf7\xc9\xed\x03\xcb\xce\x08D\xa6\xa3\xca\x9c\x9d\xd1J\xdb\x9f\x17\xe9v\x12P\x86\xac\xa6\x96N\xccq\x00\x15\x81\xd8\xe8\xbe\x0f\xb1\xfd\xec\x16\x80\xb0\xd2\xb8C\xd4},\x9a\xb85\xb1md\xa1\xfcm\xd1\xbf\xe7\x8a\xdf\x96\xa5\x96\xd8\xa2\xdfb\xd8V^\x92\xc4V\xednS,\xdc\xa9\xa5\xab\xc2\xb4\xd9b\x9fa\x0c\x97\xbb4\xa0\x1c+\xce\xc1_=\xce\xa8H@>/\xf3\x02\xfd>7\xe7\xbb\xb2\xf1\xcd\xdc\x97\xcf\x9ej\x90P\xdb\x087\xbdO\x19\x9b\xb4\xb57@,\x89\x91]\\n\x00\x12f\x11\xbaUD\nKA\x80\xe8\x11\xb4\x80$\x03\xe2\x01\xde\xea\x03\x9b,T\xb4p\xd1\x1f\xeb\x08\x92,\xca\x8b\x82D\x14\x92l\x9ds\x07x\x1b\x16W\x8e\xe4~3hv\xe7U\xd9(\xb9\xaf\x9f+\xcdT\xc3\x0f\xa6CD\"\x19\xb9\x1d\x805Y\x8f\xda{\x8d\xd15\xc1\xb2\xc8\x17 \x8a4YUdX\x9096\xe9\xca\xfcRm\xbe\xb3\xf6,;?\x861\xbc\x17mEyV\xd2b\xc50\xb3M\x97\x11O \x1f\x0f\x1b\x83\xbc\xd6\xf3y\xe7\xc5\x05*\xcb\x84\xbe\xe5D\"\xa3~1M\x0b.\xf3U\xb5;\x1c\xb4t\xf5\"}\xbfcZ\xa4\x01bB\xd4\xb0\xe3GW\x921\xd8D~\x9aLrv\x16\xe3\xbf=\xa0\xec\xdf\x08\nVG\xee\xe3\xeb\xbf\x04\xf2^>\xdf\xb5\x8c\xaax\x8c\xea_\xbd\xb0\xd4\xce@M\xd7g\"\x9f\x97i\x12%t\x04\x13\xd6\xb1\xe7\x8c\xe0u_>\xff^\xfc\x7f\xe1\xa9\xdeP\x1f\xde\xbb\x0eJR\x99\x97\x17\xbb\x167\x93\xec\x9b\x8e\xea@\xd0=\x9a\xc7\xca`s\xeb\xea\xbb\x91\xb7\xef~\xdc\xfe\xb8\xed\xed\xbb\x93\x8f\x17\x1fK\x0c\xc9\xd9.\x1eb\xf1\xc9\xc1\xd6\xff\x1f+\xe0\xffw\xb6^on\x05W\xdf\x8dX\x05\xdb\xedB\x8c|\xb1\\\xad:\xff\x86\x9e#\xc3r\xae\x87\xf3\xae\xb3\xec\xb3,\x7f[\x91\xe2\xce\x9eg[\xfatDG\xca\xd6l\x7fd\xd9\xc2\x15\x92x\xbb\xb6\\\xa7\xe1)\xeb\x13\x8fH.\xaf\x86w;\nl\x8f\xdc\x8f\xf1\xa6\xf7\xef\xdb\x18\xc8\xbch\x14\xebo\x04{\xac5\xd4*c\xa8\xa6}\xce\xc9\x87M\xe7\x08v\xcd-\xe3D\x8e`\xb7\xf5Q\xf5# \xaa\x9b\x8d\xd4\x8e\xaf3\xaepo\xb3\x94C\x015\xfa\x83s+\xc3m\x1a\xa4\xe2\xd4\xe2\xc2@\x8bp\xd5\xb9I\xf3\x9b\x91#d\x9e\xcb\"\xa7y\x94\xa7\x1e\x87{v\x96\xb8\xab\x8c\x94Q\xb8\x94\xbc\x13\x9bF\xcf7WH\xd2\x92\xe8\x8e\xea\xf6t\xf7\xd8\xf2A<\x981\x1cX\xb7E\xb0b\x1fJO\xeaz\x14\x93\xcc \x91\xac\x1bR-\x99\xad\xda\xd6uS\x84\xa1\xdb$\x03\x94\x90\xba\xacr6_\x93LG\xaf\xf2Ql\x14\x8a\xa0L\xc3rNP\xfc\xec\xd6o\x8c\xb0\xa5\x9cQ\x9f\x17dj\x8a\xfa\xd3J\x91\xbc\xe9\xef\x9a\xd9\xccp\x11u{;\xad\x02\xfaZ\x89g\xf3\xa4\xc8\xb5\x1e\x01\xe5\x0e\x9f\xd9\xbf\x80\xe6\xef\xf2[R\x1c\x86%A)\x8fc\xb1v\x17\xa3\x1f\xc1\xc6\x06\x9d<\xb5\xec\xbe\x82\x94\x94U\xff\xac\xbd\xd1\xf4+V\xf3\xd0\xa7\xb6C\x14*J\x8f\x1d\xf1*\xb17\xad\xbdPW0E\xcd\x82\x176\x83\xdc\xec\xa9\x94\x1a\xf7sn\xc1\xb0\x12\xc1\x91-\xdc\xcc\x02j\x97\xdd\xe6\x1c3\x96c\x9eX\xb8\x8a;\xd8\x83\x9dv\x7f\x10L+\x88f\x84\xd3\x02\xad\xf5\xe5f\xaaR\xb8=\x8e\x8f\xcb\xcf\x1d@s\"B \xfe\xb3Q\xf50\xabJ\xe4\\\xcc\xe7\xf1\x82)RH\xec\x9c\xdap\xd9q\x13\xb9\x84{.\xf6\xbc\n\x0f\xe0\x85H(A\xdd\x87Y\x03\xea\xe5\xef/_ \xe1\x1eu\x95\x8cU\x15\xc8\xf8\xc9\x17DL\xea\x9b\xe3\xf8\\l\xc1h7\xea7ku\xd7\x93\xa7l\x83N\xb6\xdd\xe0;o\xbbq\xf4xo\xe0\x0e~\x80\xb5\x10s\xbc\x81\xbb\xcdM\x0f\x91\xb5\xcbx\xd8\xf5\xe4\xee\xca\x9b\xec\\\xf9\xdc\x12{\xb2{\xe5C\xc9f\xa5\x84}\x98M\xe6\xb8\xef\x19|\xb7]j\xb2\x1c\xff\x8f\x1b\xa3,@\xfaX.=~\xc9\xe1dh\xfe\xa2f_\xb2>\xee\x83++\x15\xa0\xb3#tT\x95\xa4\x1861\xb7\x87A\x87\xb5\xfczf,\xcfs\xc6(\xfc\x15\xbb\x9c\xf7C\x14\x8eq\\z1\xdek\xcf\xf3\xe5@\xf1\x9f\\\xa5\xe5\xe4\xd9\x15\xae\x96Hd+\xb0\x9c<\xbfR\xebe\xff\x9a\xa8\xc0\xb0}8`\xcd\x02<\xe9\x90\x14\x12\xbf=\x84+\x15 @\xf1c?\xab\x8e\x91 \x9a\x87\xc5\x01uw\xc4\xdc\xea\xdfy\xef8GQ\x9f=\xa2\xd5*\xd3\x00?\x11\xa0\x92\xdd\x18\xe9\x0c9\x14g\xdb\xf1\x82r\x99&\xd4\xe5?\xe5\x0cn\xedz\xd2a5Q2x\xbep\"\xc1A\x8e\x1b\xbce\x93\x02\xb6\x18\xfd\xc1\xb7\xd2.7s\xdby\x03\xc5\xd6\xd6\x1b\x0f#{\xe0M\xd9\xa4\xb8B\xcf\x19\xac\xba\x08#\x13\xec\"~\x0d\x9a\x19\xdcf\x0e\x1fB\x06\xd6#\xee\xb7\xc3\xdd\xa9\x03Z\xb8 \xf7j\xe0C\xab\xc4\xd6V\xb7\x94\x19\xd7&\x0bVY9O\xa6\xd4u\x1c\xcf\xc7~\xb2\x89\xceq\xa9\x82\xea\xed\xcb\x17\xc8\xb8\x0e\x1cf\xcb\x84\xce\xfc\xb6)\xa2\x8a\xb2*\xbe\xbabl\xde\xd8\xb7\xbc\xa0*f\xe0\xfa\xa93\x19a\x97\xff\xe0\x85yf~{\xc8\xdeV%)\xc4b\xb36\xca\xf26/b\xfc\xcc\xbe2B\x13\xa7d\x89\xdf\xd9\xab\\\xb5Q\xab\xfcr\xb2S\x81}\xa3.\x86#\x04\x02d_\xf2\"\x99%\x19oP\xc1\x86\xa2\xbb\x88l\x93\x94\x8c*\x98\x95y\xf6\xd5\x97Mp\xb6\xb7\x1d\xd8\x94\xc5F\xe00|\x8dM3b\x01\xab\xaf/3\xb53Q}\x9b\xf2J\x85)B\x1b\xc4KBG\xbd\xac\xa7|\xf0\xe0\x13'\x94\x19R*\xeb\xaf\xae\x0bh\xae2\xca9\x86n\xa5\xd1\xdeX\x17\xd2\xdd\x84\x8b\xd4\xaa<\xa8x\xa0\x85d\x82\x17\xc9=\xe6_C4{9\xd7\xd0c\xee*Zc0K}H\x14p\xdd\x17~1\x12 \xb2I\x05\xb2\xd5\x95/\x0f(o\xc8Q\x8d\xc3\xe92\xd7\x84\xa1#\xa98\x9a\xa1\xa3I\xf8\x96\xe2\x13\xbd\xb9'\xba\xcbS\xd9$\xcb\x1e?\xc64#O7\xb4c\xdb\xa3\x8f\xf1\xe6\xbfos\x1a\x9a\xb2Yv\x85\xffxe\x0b'\x12!\xd0`\x99/\xdd\xaa\xc3bSS\x81\x96F\x8e\xa7\xcc\xbf\xfc\xa8\x14\x7f\x9c\xc9\x97 \xd17F\x95\x08\xa2\xcd\xf3\x94\xf5\xa9\xa6\xa56z\xa2N\x0f\xeb\x95\xa4\x8d\xfa\x94\xbcQ\x0c\xd0o\xf4=\xc8\xd6\x13\x0dW\xd9\xc4V\xad\x0b'3\xfbx\xe0\x8f\xc0\xf97\xcb\xb5\xb6\xfaHhP(\x82\x0da\x16\x1e\xb2M\x05&\xe5V\xf5\xf9*X\xc2\xc7@\x15R\x8c=\x08~\x8d\x99\xccF\x1f\x15\x05Rr\x02\xa1\x84\x1f`U\x91\xaf%;\xe7\xed\xf3\xcd\xca10ZM\xca\x0e\x0d\x9dT\xd2q\xc9$\x9d\xec^\xb1\x1e\x8a_\x1a5w\x8fnK\xa2\xa1>\x11\x93\xc6\x89\x98\x18O\xc4D=\x11\x13\xc3\x89\x98\xe8'b\"O\xc4\xa4\xa1\xde\xd3\x0e\xeei\xba\x9f\x14\x05F=\xb2o@\xd7vMNI\xf1\xa5\x8f\x04\x89\xf0\x8c\x84\xf5%\xd3\xbb\x0e\xcd\x1b\xca\xe5\xd1v>\x0f@\xc6\xc9\x95\xe3\xb7\xd0e\xd8%1s\x85\xdc\x04\x85<\x1c\xb7\x18\xa9\x88B\x07\x81\xb8;\xfa\xc4\xe3\xb4n\"\x1d)\xd0\xcb>\x9f\xf2\x91\x1d\xf9U\x97\xfc\x15\x9d\xc4 \xcc\xcd=%\x8d\x11\x7f\x15\xb9T}\xe7\xc7H\xfd\x05I\x7f\x96\xfeGG\xfe\xcc\xf8J\xf3\\\x92\x10\xcf\x87\x8d4X\xa6\xabY\x92\x95\x93\xec\xaa\x0biR\xb9\x86\xe35\xc9h)\xeby)\xeaQ\xab\xe9>5\xe4)G\x03\xb2\x167\xab\x1d\x1e\xad\x14D\x9fd\x10z\xb0r\xc3Iy\x85\xeb\\z\xb2\x17\xaf\x1c\x94;\x19<_\x82\x11\x17\xab\xd7\xb4\xed\x95\\\xd9h\xfe\x94w\xf94\\\x90\xa3\xa4\\\x864\x9a\x0b\xedd\xb6\x19\xcen\xb3\xcaP\x99{\xc9b]{\xed\xa0*BGY!8m\xceA\xad\x8f\xb1\x9c\x87%\x89\xcf\xc9,))\xd7q`uhS\xc6A\xcd\xb0|\xd5\xfc%l\xfe\xacR]\xaeS\xab\x0d\"\xf1<(\xdd|\x92\\\x89\xe9\xe8\xd9\xe9P\xa3?=\xae\xed\xefLy6HPh\xc3B\xfcR\xba\xed\x0f\xa2\x07>c\xd3;\x17\xaf\xb4/\x9e^'\xbfB/\x19\xf5\xc1\x17kwg\xa7\x02\xe7\x8e\xccH\x06\xb7s\x1c\x91%\xc9b\x92EI\x95M\x01\xf1Iv\x15\xc4J\x0ee\x10\xf2\x97\xa4K\x9a\xfd\x16\xfb\xaam\x95e\x83\xa7\xb6\xda\x91e,\xfd\x19\xd5!\xb5s/\xf3\xb2LnR\xd2\x82M\xe1\x01\xa0 \xa1\x19;\x9e\x10y\xbc\xc7\x11a\x8c\xc9>\"#\xafVf\x97\x9d\x81u0\xba\x8a\x83\xe7\x92&~0\xb0\x95\x0bu\xd6\xbf\xa7\x1b\xe5\x8fw\\)e\xc0M?\n\xa5,\xb2f.\x0e\xc3k\x11\xeb\x0e#m4\xd1G\xa7\xe6\xe2N\xc5\x8e!\x133\xeeI\x10\xadH\xb9\x93\x8b\xafr.\x9f\n\x9c\xc4\xf3\xe0\xad8\x17\x80\x0dD\x9fH\xa1\xf6L\xf4\x8c\x88 \xe6\xc0\xf66/p\xd2\x87\xce3 \xe2\x06T\xb7\xc7\x8flUk\x13V\x17\x16\xf6\x1d\xdc.\x84\xb2*\xb3[g]\x1b\xc3\x86\x8e\xbbNqn83\x08\x8f\xcb\xa7\x02)\xd4\xac1`^\xf9\xe0\xc9\xaeC@\xd1 V\xa0\x80\x96}\x96\xb2Iq\xd5\x01uP\x1f:b\xc2\xdbQ\x85\xe4\xd3u\xfe\xcaG\x92\xcd\xab4\xed\x82\xaa\xeb\x82\x94\xa4\xb1}Gv5Nh\x11[\xb9\xb8\xe4A\x8fg\xad\x8d\xc3\xe5\xe1\xe2\xb2\x94\x91]\xed\xe1Wd\x8e\xe4'\x8c\x97O\x12\x88\xedg~\x1f\x12\xa1\x1e\x0f\x9e\xdb\xde\xd7\xa2{\xd4\x88\x13$Yk]\xd6\x8evC\xbc>\xf6\xa0\xd0\xdb\x0d\xd5v\x8bI\xd8\xbc\x804j\xd9\xaa\xf4;_\xcf\x87S\xe9\xdc\xa3\xa2\x99VG/\xd0\xee\xd3\xdd\xa7\n\xdd+Hw\xf7\xb51\xfe\xc6\xaaC\xdd\xad\xa6\xb9P4\xfc\xe5\x0b8\xab\xecS\x96\xdff[\xb8\x8e\x9a\xf0\x85\x04\x11w\xe9p\x19\x163B\xf1biF\xe8i\x1e\x93\xb7E\xbe8\x16\xf7\xa8n\x81\x97\x84\xfb\x10\x06I\xb6\xce?\x91?\xad\xc2\"&\xf1a\x98\xa67a\xf4 }Cp\x7f\x99\xd8-\x82W\x14\xe6\xbcU\x16\xdf\xd0zc\xef4\xa9\x8a\xb6\xdeER\x8e\xb38)\xe7}\xf8X\xecK\x87\xe6\xcb\x93|U\x92\x0fK)\x94b\xd3C\xf3\xe5e\xbe\x8a\xe6\xe3,6%\x1f\xb2\xf1\xa7\xe2K\xd7\xb6N\xca\x93|M\x1e\xd0\x1dV\xcc\xd4\xb2\x92\xde\xdd\xee\x05\x0d\x0b\xfa\x80\x86\x8f\xf2\xdb\xcc\xd40\xd67\xa0e\xa1\x82{\x94\x14$\xa2\x129\xf4u\xa2>\x1c\xaf\xe5\xe9\xf8.))\xc9\x88M\x0b;k\xe6\x960i\xc0\x03M?T\x94\xd3\x10\x8cXx\xe6\x18\xa1\x8dA\xb4\x19\xde3\xcf\x18\x18\x18\x14\xfc\xc4\nS\x97\xd83J\x95<#\x90\xfb\xc6 0}\xac\xc6[},\x06-\n/M\xca\xe36\x95j\xb9\x16]WV\x80C\x97\xa6\x18\xbc4\xec\x9c\xd5\x9d0w\xe8\x01I4\xb6\xf3\x06r\xf8\xa1v\xd5\xfc\xe4 l\x90 )\x19b\x0fg\\[\x9e\xe6\xcb%\x89]\xef\x0d\xe4\x9b\x9b^\x8d\x1d'\xf9\x95\x0fE[U\x12\xa4\xc2\x10^X7\x90\xa9!\xe3\x03W\xe9!K\xc4Fr@/\x8b\xd5`J\xbe_\xbay\xff\xed\x06\xf7\xdar`\\[\xdaI\xbc)\x84!\xbf\x19\x87\x1f\x1a7\x7f\x1d+\\lnv;\x18B\x8azR\\\xb1Ue\xe4\x9f\xa2\xfd3)\xdajG\xa0\xdc\x15\xa0\x87\xe0'O\xd8\xa6\xe6\xc1\xb3e\xc1n!\xa9\xbe\xd8Xe\x97\xfaU\xe7\xde\xee\x847\xda\x05U\xf3\xb0\xac!\xaa\x0f\x80\x14\xf1E\xbb\xbd\xaeV0\x9e7\xef4C\x98\x0cq\x0el\xab\x08\x0ce\xf5@/\xed\xd6t\xd4|\x9f\xd6Zh\xbd\xbb\xb5\xa4<`k\x81\x0e#{\x91\xa5\xe4\x18\x82\xba\x14\xcf\xdb3\x9ew\xf9-Zw,\x16y\xf6\x90\xe6,U\x0cj\xfb}\xc8\xce\xa1{\xce$6\xd9,\xd93\x8f\xb4\x08\xd7\xa4(\xc9\xe5m\xfe\x9e1\x8c\xc3\x14\x11\xaa\xe6\xf4\xe2U\xa1!m\x8e3J\x8aw$\\\x1bZE\xd7\xe6FYu\xab\xed\xba\x1a\xadp'\xfc\xa0\\&\xc93\x93g\x0f\xfe\xf10_,\xf3\x8c\x11\x03\x05\xe9]\x00\x90'l\x1b\xbf\xb4Q7\xaf\x9fU{\xc9\xc7\x10\xa6C\xea\xcf\xcd\xf5\xff\xce\xfcfa\x8f8\xc6x8{\x042 U\x95\\\xf1:\xb9\x0dd\xcc\xb1\xaah\xcb\xa4\xa33j\x14kUQ\xa1\xc2\xc9\xee6\x86\x02\xe5^M\xe3FL\xccN\xcb\xca\xac\x9b}je/\x08\x1a\xca\x1c\x86\xab\xd9\x9c\n\xd7\xe1\x9d\xb2\x02v\x8aY\xcdr\xd6\xc2&\xd4\x12\x14\x86\xdb\xe4\x14\xf5Y\xf4\xadp\x91<\x1c.\xcc\x164&n\x97S7\x94\x13\xd7_\xbe\x00 \xca\"\x1a\xa7dA2|\xbfM\xb28\xbf}\xa3O+\xdb\xef4@\x9b\xaer\x99gq\x92\xcd>\x94D\x96\x93\xfaG\xd6\x1c\x9e\x0f\xcfxh\x9c \xcbc\x82F\xfd\xfb<\x8c\x1c\xc9\xf0\xe0i\xe8(|\xab5\x8e\xd0-t\x9f\xaa\x163y\x10\x85\xd9\x87\x92\x1c\x9d\x9dT\xe0\x1b\xe7\x11\x1a\xef\x06\xc9b\xc9{\xca/'\x9f<\xb1}\n\xe6a\xf9\x96\x84tUH\x7f'\x1b{\xd6z\x94\xcc\xae\xe3\xf8\xa8\x1d\xdc\x98\xd9\xed\xef\xbekB\xcdwp8'\xd1\xa7\x92Af\x98q\x81?$%\x94\xab%[_\x1e\xc0\x89\xce \x08.IP\xc7\xe82=['E\x9ea7\xb4J\xf56N\xcf.\xc7#\xb8\x9c'%\x8f\x0f\x95\xe5\x14n\xf3\xe2\x13\x08\xa3\xbd\xf4\x0e\xa9\xce,\xcf\xb6f\x8c\xc6I\"\xde\x13\xd6\x8fh\x0ea \xbf\xf1H\xca\xbf\xf9z\xd5\xbf\xa1\xb8\xee7\x1f~K\xf30f\xff\xd1\x08\xfc7\x1f\xa3Q\xfd\xc6\x1ds\xfc\xd6\xd7\xc1\x1f\xf3\xa2\xc8oK\x98\x16\xf9\x02N\xf2\x98\x14Y\xf2\xf7\xa2\xaf\xd4\x1f\xd1^\x14\xfe\xc1\xb5\x0f\xbe\xd6\xd7%\x17\xab\xe94\xf9\x0c(D\x84L\x98\xaf\xcf\x02p\xa24\x89>9z\xbdUE\xfb7y\x9e\x920chq\x89K\x8e\xab\xc3\x16\x07\xd7@$\xa2\x9c\xb7\xb1J\xed\x1a\xa51AU#c\\dE\xedenW\x90\xb036\x0b\xd3\xd6\x874\x89HV\x92z\x9a\xe0Y\xb0\x13\xec,\x0b\x02\xee\xe1\xaa\xa4\xf9\x02~\\%i\xec\xc1\x1789\xbe\xd4\xcao7\xde}\xbb-\x9e\x8eL\xd0~@\xddS_\xbe\xf0[\x82\x0d\xd7 \xe3\x18\xe7Z\xd2\xc8\x0e\x83Z\xb9GjVA\xbfY\x91\x1c\xb5\x93g\x0el\x9a\xfc`\xa1PP\xad\xecM\xbbOF\x92e-\xae\xa0\xab\x8d\x1a\x15$\xa4\x12=\xb9N\x9c\xacM\xea\x1daP\x12z@i\x91\xdc\xac(q3\x1f\x84\xb3\xe47\x8e\xd0\xfe7\xaa\xc2\x84\x93\xcc&2\x05\x85\x9d@Mb\xae\xbdr;'\x95\xd8\x0c\xa4~\xf2\x10\xac\xc2\xef\xe6\x03^\xde\x07\xe7Y\xb0\x83\xaa\xd6\xc9\xa3!\xd3\xd6\xd1}\x90\xd2\x118aJ\xffL\xee\xf4\x90\xbayF\x8b<\x1d\x81\x13\xd1\"m\x7f?!4\x1c\xa1\xdb\x82\xb0\xfd\xf1b\x9eLY\xcd\xa8W\xcd>\xd7C\xb0\xd0:\xb6\x03\x0e\x0dW\xb3\x90&k\x82\xf3\xd3\x86\x12\xf43v\x92\xc7\xc94!\xc5\x05\x0di}\x8d\xd4\xfe\xd4bO%\xa0\x16\xad\x1b\x83\x8aS\xc43dc\x83\xaa\x90PC\xc1\xb0\xf3\xbau\xcd\xf2\x08K\x99\xb9\xaf^\x1b\xd4_2\xf7e+=\xe1j1\xbb\xdcv\xf4\xd9k\xfc\xf7t\xf7\x95\x1e\xfd\x9a\x8b\xe4w\x9f\xeb\xe5W\x98\xfe\xec{\xb3X\xbe4b\x151d\x93h\x92S\x18\x93\xdd+!\\\xa7\xe8\xb5\xf8\"\xb9I\x93l\x86\x1eu\xa6IQ\xd2\xc3y\x92\xc6\x86)_\x8b\xab\xf6\xc4\xedc\xafH\x90d%)\xe8\x8fd\x9a\x17\xc2\xb1D]\xa1q0\x91\xad\xaeB\xd4\xc58\x0dQ_\x8b?3\xe94XM\xb7Z3\xb3ob\xdcl(07+\xeaTaK\xec\x840\x8fI\xa4\xcc\xb8]\xb8\x95\xba\xdc\xee\xba\xe0\xd7\xf7\xdc\x82\xbdCk4\xafh_\xf5\xd1\x88g\x1c\x1cZ$Q\xb4\xdaA\x91s:l2\x97\xd6\x03l\x88\x1c\xae\xba\xcf\x9d\xec\x1a\xee\xdfb\xac\x1b?\xef\\\xf1;v\x12\xf0`\x9b\x08\x89-\x0eK\x0355+\xed\x1eFl\x83\x89\x8e\xe5\xab\xc4\xef\xddK\x87|P\xcfR5\xfbZ\x0cc\xfc\xe6\x0861\xa3\x15\x8b|U\xa6w\xe7d\x99\x86\x11a$?\xe3\xe3N\xc2\xe2\xd3j\xd9DS\xeb\xb6k\x8c\x9e\xf2-\xef \x05\xcfuD\xd2d\x91P\x12_\x92\xcf\x03\x0d<\xe4\x84\x11\x8571K~\xf9\xbda\xe7\xb4\xe6\"\x1c\xe8>\x17\x9e\xa7n\xe1\xeb\x14\x08\xeb\x19\x8a\xf6\x18\xe4\xe4x=\x02\xfb\xe0\xae\xf0\xde\xcf\xf3!v\xf9u(E\xd5||\xeb\x95]-\x8b<\"e\xf9\x01=\x14\x97\x03\xc4e\x0d\xeb\xae\x9d7\x90)\"\xe67\x90\xd9u\xab+\xf0\xb2\xea\xabHS\x98\x02oXm\xf5@\xa5]\x7f|z1>\xbf\xbc>98\xff\xf3\x87\xf7=j\xf6\x88u\x0b\xe9\xd8\xc7\xe7GJ\x11\x84SJ\n6\xa7}\xd1\x0d\x06\xd9\x05\x9c\x9c\xfd<\xbe\x1e\xff\xe5\xf8\xe2\xf2\xf8\xf4O=\x1d\x9a\xf2\x0eL\x85\xb8\xf6\x9f\xd4\xa3\x8b\xf1\xc0\xf9 \x1b\xf3\xf3\x18M_\x8e\xffry}xvz9>\xbd\xeci|\xf5\xe8\x8d\x9f\x8fq-N\xcf\x8e\xc6=m/\x9b\xeb0T\xc9\xe9\x9e\xf2\x9a5\xa6>\x88\x1a\xb3{\x01\x9a\xd3\x05#\x9f\xe7\x94.G\xdb\xdb\xb7\xb7\xb7\xc1\xed\xb3 /f\xdb\xbb\xaf_\xbf\xde\xfe\xcc>kd\xf3\"\xa4s{\x99W\xdb'!\x9d\xe3\x9f\x93wZ\xc9r=3\x16{\xba\xb3\xb3\xb3]\xaeg\n\x01\xfe8C\xed%u\xd5\xe8\xe9\xb5\x0d\xf6\xc9\xc5\xc1r\xc9\x10(\xfe@S\xde\x0f\x19\x0f~\x1f\x85\xe9[y>*\x94P%\x826\xaa\xbfvV\xd3\x1f\xd6N^L\xa9\xad\xb4aI\x17\xac\x8e\x1e\xdb\xdb\x8cQ\x8d=s_\xed\xbc4\xd0\xf1\x99\xfb\xf4\xc5+\xcf\xcd\xdc\x97\xdf{AR\xfe\x1c\xa6I\\\xc9\xe6\x1a\xb9CE\x19\xdee4\x7f{\x12nV\x94\xe6\x99\xd9\xaf_4'\xd1\xa7\x9b\xfc\xb3\xf9k\xb2\xc0\xf8\xfe\xa6O\xf3$\x8e\x89\xa5\xd2\"\x8c\x93\xdc\xf2\x89\xa0\xed\xa6\xe9S\xb9\xbaY$t\xd4\xd2L\xb6i \xe9\xeb\x8d\xe2\xee\x0dv\xc8\xe3\xa0H\xfc.\xc9>10\xac?`x\x04\x99\\\xb8\xce\xab\x97N\xaf\xae\xb2\xde\xcc\n\x95X]\xadR\xa9\x9f\xc8\x93\xf2\xec\x10\xe5mR\xc7\xfc\xd5\xab\x9ev\x0c\xdePZ\xed\x88Q\xf5\xb4\xf4\xba\xd1\x92\xfc\xc5\xc002\x9a\xd2\x8a\x88\x11Ch-P\x18f2\xa1\xa8\x93\x19N\xb8.\xd6\x15\x17N\xcb\xee\xf0\xb7\x82\x84\xf1Y\x96\xde\xf1\xb78)\xc3\x9b\x94\xc4\x8c\xbcb\xfd\x1f\xa1\xcb\n\xe1 \xeb\xd7|%\xc3\x83\xc6\x10\xc2o\xd8\xad\xdfX\xd2\x12h\x0e!\xa3y\x160MH\x1a\xc3mB\xe7\xf9\x8aB\x98\xc1o\xb2\xc1\xdf`\x1efqJ\x8a@\x91\x93\x16$\x8bI\x01!\xb0\x8el\xe5\xac'XC\x00\xc7\\\x90\xc7\xeb+\xe7\xf9*\x8d\xe1\x86\xc0bEY\x171\xd4\xfeo\xc22\x0e\xbd\xf7\xfd\x16\xc0\x19\x9d\x93\xe26)\x19\x99@(\x90\x84\xbd\xab\x1d\xc8\x0b\xf8M\x8e\xf8\xb7\xc0d2n\xd9~$~\xf8\xfc?\xe2\x94\x8b\xbe\xfc\xb7\x98\xf4C\xd1\x97\x7f\xd2\xb4\xcb\xd2#H\x026\xf3\xbf\xeb\xc8?\xb5\xda\x13-\xdb\x9b\x16u\xc8m|\n\xbf\xcb\x99\x11\x94q\xdb\xfc\xbf\xd3J\xb0\xe5\x08\xe95\x9b31\xa9\xdc\xff\"\xe4S\xf8\x8d[~m\x82\xf3[\xd0\x0ckh\x94]::m\x00\xa2Oq\x0b) \x18\xbc/\xf2%\x1aE\x0c\x83\xcc\xa62td\x03^6\xbe\xc8\xa4\n-%\x16\xd1\xa4\xb8b\xc74\xe7\x9a\x1c\x06\x88\x8e/\xee\xeb\xf2\x0e\xcb\xa9D\xf5\x89\x83\xe0\xcd%\xdb\x89\x0c\xfb\xc7\xba5\xedV\xdb\x99T\x99\xafP\xd5\xdeN\xde.u!\x81|zI\xd4&d\xcd\x08\xfdY\xc7\xbe\xa6.V\x9a5\xf5\xf1\xb5\x8f68(\xbc\xa8\x12\xff_\xf6\xfew\xbdm\x1cY\x18\xc4\xbf\xf7U\x94\xf9;\xa7\x0f9\xa6\x15\xc9v\x9cD\x89\xe3\xe3v\xdc\xd3\x997\x89sbg\xfa\x9d\x9f\xc6G\x0f-A\x16'\x12\xa9CRv<\x93\x9c\xeb\xd8o{\x0d{\x01\xfb\xec%\xed^\xc2>(\x00$\x08\x14H\xcaq\xf7\xf4\xec;\xfc\x90X\x04\x88?\x85B\xa1\xaaP\x7f\xc4_\"X\xf5\x8d\x15\xc4\xdf\xee\xfb\xc4\xa6=\x8d\xbd\xeb\xa7\xea\x11\xaa\x8d\x84\xd9a\xf5Z\x1f\x81|\xdd4\x06i)vVn\xc6V\xc1\xb7+$T\x94Ql\xd7/\xe4\xfd\xa9\x1c^m|M\xb3q\xb4\"\xab\xc8vJ\xf2{\xa4\xfd\x10\xce.*\xf8\x1aFI\x10?\x1c;\xd5!\xb1\x08\xe8\xfd\x12|\xa7\xe4\x18\xb7\xcc2\xfb\xe2\x1f*\xf5\x8c\xa9\xc4\xb1]\x88\xa0\xd2f\xa0\xda)cI\xa9\xd5\xa0k7Z\x95T\x15N\xab\xcb\xd26|UO\xe5\x98\xb4/b*\x90\xb3@\x92L\x96\xc8h\x18\xc4\\@\x06\x8f#\x8a\xc4M\xb6\xc1\xc1\xaa\xa7\x95<\xd0X\xf0\x0dv\x06\n\x0bd\xae\xd6\xca%\xabN\x83\xdd\xa6)\x0e\xb9\x8f\x95\x8a2q\x9f\x8e\xcc\x87\x16\x0du\x00\x8f\xb0\x0e\xfeQ\xf0}\x82\xdc*\xda\x1f\xa2\xa0Xa>9\xe5FB\x80N-\xa2\xa4\xba\x9a\xec\xdbwFZl\xb1\x9a\xcf{i\x16#\xec\xc2\xedZE\xadV\xd1z\xff)\xa1\xfb\x89\xdd!%\xb2q\xdc\xa8cjW\x84\x87\x90\xb4\x10\x15\xe1\x04\xc4\x0fg\xcf\x9aK\x08*\x00#\xcd\x8a\xf89\x06Q\xb2\x071\x03\x7f+\xab\xdc\xb3G\x91H\x99\xb9\x95\xfal\xc4\x7f\xa1\xaa\x1e\xffp\xdf\xf8\x96\xd06\xd6\xef^\xc8\xd9y\xc1\x15\x9c\xeb\x0b\xb75\x10\x7f\x132\xa6^\xb7\xd0\xea\x12\x17\x8b\x18\x81'\xab\xaca\x85\xbd\x94\xbd\xceU\xd0I\xd7=\xb7B\x1e\x12b\xf5\x10\x91\x88wUl5\xfe\xe6\xa8^%\xb6\xaa\xc40\x84Z\xfcG\xbc\x8dV\xe9\x9a\xd1T\x07\xff\xc4\x97\x9f\xd8\x9d|\xf7\x89\xdd=\xc4Z\xd17\xcb\"Tf\x1bAV\xac/M\xaa\xbdCo\x08\xdea\xdf\x11y\xd1\x1bb\xf1\xae\x9d\xba\x9bH\xf8\xa3\x80\xfd/\x9c9\xf6=4J\x08\x14u\xf7\x1f\x8d\x0e\x87\x97\x8f\xae\xc3\x0e\xe7\x87\xbaZ\x1e1\"\x96c\xa3._\xc5\x0f\xfdV\xa0\xf4q\xda.\xa0\x1c\xee\xf2\xe2\xe1&@\x11\xe0\xf0U\x8466\xea\xa3\xb7)\x87\x95\xf8\x8dQ1Y/__ D\xf4w\x05\x83S\xbd\x18\x04\x81\x06M\xff\xb0\xff\xe5p7xx\x80V\xf8J\xd3\x8a\x07 \xce\xec\xe2\x8a\xf6\x0fP\x916\x18\xec\x9a\xd7\xe6\xf2z]\xde\xab\xef\xef\x05\x9d=\xda\"BN\xec\xb1\xe4\xbf\xd6l\xcd\x04\xdfP\x8f\xccm\xb7@h\xbbJ\xdb I\x94\x1a\xcf?\xfd\x14+\xe8C\x0csQ\xa9\xb8\xe4\x82\x8ah/z*B!\x11\x014\xb3\x8e@\x92\x04fF\x8a\x8e\xf2\xf7\x0b\xd8\xed\xe3\x95\xdb6x\xe0\xf3&\x86\xc0q5\x93a\xaeB\xf0\x02^\x16x\xa0g\xffs\x87\x16p\x9d\x1fh\xeb\xed\x1a^\xa2\x0e}\xad\x03\xbd\x01\xdb\xed?\xce\xdf\xa6\xeb\xa4h\x97\xa0\xd4R\xd1\xfd\x83n\x86RH3\x94\xdeXH\xfclZ\xdaT\xd77\x89!I d\xaa\xecr\xbb\x08\xed\x8b2\xd9k\xe9\xbc\x88U\xed\xe1\xa9mc\xaf-\x94\x9cEu\x84\xd2\xeeb\xbd\xf1\x8a\xa1\x95\xa9\xea,\x87#\xea\xad\x08\xbf\x88\"\x13\xf5\xcd!\x8c\x8a\xcb\x10\"\xebB\xbb\x11 \xaf\xa51^\x07\x11\x93\x91\x03%\xdej\x03\xa5\xbe)\x07\xda\xecM \x07\xfac\x9aM$-\xe8\x8aM\xf4bH\xe3\xder@Z\xc3(\x98\xf0\x11\x15fJ\x0crH\xf2\xe6\x1e-\xaa\xba!T3\x9aH#\xf4rd\xd8\xf0\x7f\xf0\x9e\x14\xac\xaa2\xbdo9l=\xc1\x82\xa6\xd4\x97\xbf|\x02\x99\x85\xf5_\xd5\x90\x17\x84\x9b\xa2a\xd2\x80\x86\xc9e \xf0\xb0\x0b0\xcfYA\x01\xd2\x05\xc5\xc4 E1[?\xa1\xc0\xf8\xe5\x0b\xd0\x05\x870\xba\x0c\x02\x85\xb0|\xd4\xa6{\"=jy\xe3\xe4\xd8=\x0e,\xa86\x8327\xc7h,\xac7\x96\xc9\x0e\xf9\xf9\xdb\xbe1\xcc\xe5\xec\x0093\xd6\x99.\xf7I]\xc0\xee\xae\x87#\xe7\x07\xea\x86l\xc77x\xc9'\xfe`/\xa0\xb8\x90\xbd}\x9a\x0b\xe1<\x86\xee\xaf\xa9\x8f#\xbd\xff8\xba\xdd\xed\xdeT\xc1\xdeP\x928I\xa7\x8c\x16j&\xf3(\xe3\xa5h/\xccP\x1b\xc0yI_(\xbaU)^M\x0d\x84?ARZ\x06\x0e\xf6\xf8\xde\x92\xc8P\xc0\xcbC\xd8\xdbE\xd5\xc1^\xa9[(`\x08\x1bJ\x9a\x15h\xad<\x15\xd2\xc5`\xf7)y\xdd\xbao\xde\xc2b\x98\xc7\x91`\xa1${si\xb0\xe3k8\x04u\x0d]\xe9V\xeaurB\xfbR\xaf\x81q\x0e\xcb \x80\xf5\xb2 \x86,\xa8+k\xec\xdb\x89\x85\x90\xeae\xde\xc3M\x97[\x18a\xf3\xf7\x18\xaa\x8b\x05|\xdfD\x8dJ\x0fdf,\xf2\x84\xe24\xa15\xe9\xd3\x0c\xe7\xa4\xd4Ex\xb5\x8c8\xa8$\xd2yO\x1a\xf7\xaam~X\x0f\xfe\x9e\xe8w\x01\xc2\x8eK\xf4\x94\x04\xbc\xea\xec\xbe\x08\xb5\xfb\xecI a\x8c>\x83j5\xcff!4\x82\xbe\x93\xbc\xa2\xf7\xe3\xcaJ\xd3\xb2eA&1\xd2a\xe7\xb3\xde\xd5]\xc1\xde\x08u\x12\xcd\xf8b6\x9a\"\xe8\xe5\xac\xf0\xc5\x0f\x0cb\xdd\xe6\xdec\x8e^\x05\x87\xc4\xf5\x9b\xc7yo*\xe6\xa5R \x0e!\xe2EJmm\x16\xba\xc1\xa0\x00\xaam\xfc\x01n\xf2G\xfa\xc6\xff\xef\xbe\xd8\xf8\xfa\xbeG\x94\xc4\xa8\x0b\xc5\xfc\x03\x9b\xac\xb3<\xc6$\x86\xebP\xf8r\xf1\xf7mWB\xb8w\x8d\x8dk\xedX\xc5\x95H\xaabs\xab\x9e\xa7|(\x84s\xb8f\x1c%\xe84z\xda\xce\xd2u\x82~\xbcY\x9a\x16\x8e\x9c\x98\xe6~\xc6I\xce\xa3\xfc\xa3BhmB\xc0\xec`\xf3q\x15\xc4\xb0\x99{\x16&B$fuq\x8e\x01\xcb{ \x94\xfe&u\xec\xc5c\x90\xfc\x1a\x14\xf4}\xe4\xc0\x02\x02\xd9\xd4\xf3\x95\xcc\\V^\x94\xb9\xc6\xa7\xae\xdbb\xdf\xb4u\xd5\x9f\x08\x15\xaar\xd4\xeeyjg|\xd4qV\xe9(\xb9l\x99\x18\xb9\xdb\xaa\xe4w_\xeb\xb2~3\xef^\xa2E\xa1\x19(;\"yH\xc3\x12\x91\x92\xbdL\xf9\xa9l\x9cD\x96,\xe1K\x89\xb9 \x12\xf9\x13\x0fl.\x89\xc8\xdfe.fyh\xf0wE\xc6\x98\xe5\xd8EN\x14\xcd\xb5Y]B\xf0q\xdbh{\xa3\xe8!w)l\xb1:\xc6\xd0\xa8d \xcb7Q\x08\xef\x83\xc7\xa6\xbeD\x08\xefOLY_\xba8\x0e\x1e\x93.\x8e\xcf\x06OZ%\xac\x86k\x04\xce\x06Q\x97\xc0\xbc\x81]G\x19\x17\xf2\xf7\x1ce\\\xc8\xdfw\x94q\xf1\xfe\xc0Q\xb6\x82Cx\x0c\xea:\x9cH\xa2<\x05y\xfd\xbd&iV9\xd9\"\xe4\xb4w\xde\xc8D\xdf\x84\xb0\x0c1\xd1\x1bnKL\xea\x96\xfa\xd7A\x08W\x98kv\x8d\xd9\xe4\xf6\x82\x10\xc6\xfcL\xf1\xef*6\xfbV\x90\x99S\xf4\x05?\x82)\xefo\xccE\xa4\\\xfd\xeaW\x06R\xcfa\x0c/\xe1\xf69\xdc\xba\xb6*\xdf\xa6\xfe\nc_p\xa2,\xa3\xe4/\xe1\x10\xae\xfc\x1b8\x84\xbb\xd1\xede\x08\xb7!\xf0\xc1\x99Z>\xb3\xa1$\x80\xd3\xd1-\xe7\xf5\x974\x11\xe1OI\xc5\x96A\xb7TA\xa0\x18\x9a\xbdf\xbf\x17\xd0\xcfjw\xff\xa0\x9a{\xdc\xb9\xb9\x9b\x0e\xad\x1dtn\xed\xb6Ck\xbb\xed\xad\x9d\ny\xe5\xc6\xbd$\xda\x891i\xe4\x7f\x14\n\xc3\x11\x17K\x86\x80\xd9\xf5&p\x04\x13\x18\xc2i\xad\xba\xe9\xeax/\xcd\xa9\x14\xdb\xc4a^j$\x8a\x10\xbc*\xd3\xb7g\xfa^H\xd3z\x9d\x0d\xe3T\x13Sv\xa5Y\xfcW\x95\xde\x1d\xcf\xdf\xf2\xe5\xf1\x04\xed\xca\xa4-\xda\x0fQ\x1eO\x8e\xd7\xc5\x9c%E\\\xa6bpV\xff1\xcd\x96\xef\xa3,Z\xe6F\xad\xd5jA~\xfe\xbeJ V\xf4V\x19;V\x05\xaf\x97\"!1\x16\x9c\x9c\xbd\xfb\xf1\xf5\xef?~8\x1d\x1f\x7f\xbc\xf8 _\xfd\xf1\xf8\xcd\xebW\xc7\x17\xa7\xf8\x83\xbf=\xfb\xf0\xfa\xff\x7f:>\xe3\x7f\xee\xe2\xcb\xf7\xb2\xbaU\xf0\xe6\xec\xf7g\x1f/\xea\x1f\xe2\xaf\xf3\x9f\xce~\xc6O\xc6\xef\xcf\xde\x7f|\x0f\x87\x8a(|W\x81T\x86\xcf\xf5\x13\x7f\xff\xb1yE\x9f\xca\x92\xdd=\xea\xf2\x1e\xbf\x19\x04\xb5C*\x9f\xa7\xb7\xaf\xf8\xa2\xc6\x1c4\x9d|\x9e\xecm_`\xea\xf9 A\xa1\xa3\xbbE\x1aM\x87\xcdbG\xb9\x16\xdf\xd2;A\xfe\xbb\xf5\xbeH\xaf\xd3u'V\xdf\xd5\xf5\xea\xbe]\x97\x13?\xe3\x7f\xed~\xcb\x18\xa6\xf7\x1d\xc3\x04\xa3=\xaf\x05\xe2\x7f\xcb\x08\xe6\xf7\x19A\x1d\xb1#\x85\xbe\xfdg&\xfe\xaee\xd1\x9ee\x96\x92\x0bV\xa7OZ\x9e\x10nEJn\x13&\x1e\x15\xf5\x92\x8a\x1c{zJ\xacv\xcf\xa26\x89\x89c'{|\xab\x8dW\xe9j\xbd\xf2\xec+\x8c:%\xf0J\xcc0\xaa\xae\xea\xf4\xc3\x13\xc8kT\x9ab\xcaK\x17\xf9\xf1V\x19\x1b\x97\xed\x8fSD=/\xa4\x89\x98gU4\xa0?\x17}i\xc4\xd0S\x17\x97\xd8\xa6E8\xbd\x12\xe1p\x10^\x8d\x1a9\xe8o+NV\x9c\x1c\xc5\x95\x94\xcay\xdcp\xc7X\xb3!\xe2m\xd1cY\xd6XKx\xd2\xf3\xc6\xe8\xf2H\xc4,K?\xb1\x84\xae ,\xa8\xa5[#]e!\xf2RM\xe6l\x19\xd15&\"\xc2E\xb4t\xf8\xfb\x8b\x9b\xb1kV\xf8\xdel\x91\xdeR\xe1\x82d\xc4\xf4uO\xe2x/\xbf\x8d\xae\xafY\xf6\xf1\xf5\x076\xc5\xb8\xcf\x822\x85\xe0E\xe51+t\x063\xcep\x88\x1c;\xbd\x84\xdd\xf2e;\xcd\xcc\xa4\xfe\xea\xe1\x8d\xbc\x9e\x92G\x04\x7f\xf2t\x9dM\xd8P\xe5\x90\xa7\xe1\xc1n\xd8b\x08\xdem\x94%qr\xed\xa8%%\xc1!x\n\x8f\xc4\x91\xbf\x8c\xee\xe0\x8a\xc1\x1a\xddgCXEy\xce\xa6\x90\xa3y\xc5m\x94\x83\x88\x0e\x86J\x8e\x9ce7,\x83\xf7F\x95\xe4\xdf\n\x89ml*\xc2|a\x1eRQ\x9b\xb0C\x0cB\x88z\x18J\x0c\xed+~M\x10a\xafm\x00\xf2\xfb!\xc4j\xdd\x03?\xa2<\x821\x13\x97qH5\x0c\xdf\no\xa8\x1e\xdc C\x88\x88.\\$U\xa7\n\x14\xaf\xf6\xeb\x92\x04\xd6\xb8\x11c\x11X\xc3\xb9\x11\x059(\x13\xab\x91u\xd62\x84\x87\x98\xa0\x9b$Tu.\xac\x8bt\xf5L\x84zu\x11\xb3\xa4x\xedhk\xa6\xd59g\x93\x8c92\x9b\xaf\x9c&\xba\xfc\xb9\xce\xa2\xa4\x18\x8b\xf3\xdfS\x03s`\x1e\x7f\xf2I\xca\xabrp\xa6+\x96K\xfbF |\x16\x01\xac+A\xf5\xa0\xc7\x9e\xa3l.}\x15\xcd\xf7JKy\xc5\xa5 A\xc0\x16p\x04\xf3^\x9dL\x1c\x82\x87\xf2\x06\x9a_\xf2\x1d\x92\xf7\xae\x8a4\n\xfc\xa8\xcc\xf8\xba\xc6\xbbM^\x96V\xbbgEy\x9d\xf3G-:\x89\xfc\xae\x8f\x14 \x87\xb0&\xe9\x8a\xcc\xc1[\xce\xc2\x9f\xa0\x06`*\x97s\x1cs\x08M\x82\x10f\xf5\xf79\xae3\xdf<\xe8\xba\xd5y\xf2\x93r\xf2\xb3\x00\xd3\xec\x99\xf2\x9b\x83&\\\xa5\xd3\xbb\xa1ji\x1d/\xa6\\8{\x15\x15Q\xe0\xaf\x1c\x8a\xcdu\xb6\x18\x8a\xe0\xce\xbe\x87T\xe3c\xb60Y\x0e\xf5\x08\xb8\xc6\x0eD`\xd1\x94e9\xc9\x96\xf2\x07AH\xb2\xcdPR3\xe2N\xdcI\xafB\xb7\xb0\xf9[\"U\xa9\xac\xc1w\xdf\xb7\x10\xb3f\xe2\xb2\xeeH\\l\x93b\xfd\xa9a\xe7\xb0\xcb\xce\xdc\x84\x8a\xd0\xc1\x00\xd4S#lr\xfbL26eI\x11G\x8b\xbc\x9d\xc4\xa5m\xb4\xcdI\xa3\x1eb{M\xee\xb3e6\xd9{r\x83\xb4\xec=\"r~\xc7\x0d\xe4\xd6\xe9\xb4\xdb\x00\xb98\xf3D\xba:\n\xc6\xf6c\xb6hV\n;m\x8f\xb3\xb2\x8fV!\xa1h\xe5\x1b\x8a\x96\xadVt\xd8j\xc57o\xb5\x1a\xbaG\xfa\xbe\x1bO8\xc7\xefF\xf7 f\x08(z\x13g\xd81\xac\xa5\x0e\xa6!8`\xa1\xd5\x12\xc7\xd4\x10\xd6\xee\x9aj\x11\xc7\xeb,\x1e\x12V\x04\xd0\xb8\xc3\xb2\x07\xd8af\xd2U\xf5\xb4\xef\xb0t\x93\x1df'\x9c\xbe\xd7\x0e\xa2\x95\xa8\xff\xdcJ\xb5\xe7a\xb6\xd2o\xe6\xd4\xfa\xbbm\xe3\xbf\xff\xe6\xbc\xff\xf1\xb7\xd9\xe6\xfc\xa5\x8e\xbf\xeaZ\xe4\xc1x\xc7\x99C\x13%\x90\xfe\x9a\x152\xeb\x1f]+\xef\xc6\x7f.:i\xcf\x84\x824\x8d\xf2\xbds\x0c\xae\x9e\xbaR\x15 \xbdh\xbeb\x93\x96\x8a\xabrx-\x15\xa7Ho8\xe68\x96\x0e\xcbQ6\xa0+\xdc\x94W2(}\xcd\xe1\x08\xfe\xf6\x15\x9cR\xc6\x12\xdb\x93\x08AW\xb9\xae\xb7\xb8T-.\xe9\xeaw-\xec\xf9\x95\xd05dD\xa4 \xfe\x8c[4\x97\xb7p\x08\xfeJ\xc3\x07\x1f\xad\xe2\xff\xf65\xe8E\xd3)\xde\x11E\x8b\xff\xe0\xf0\x11\xd6\xfa\x82-\xa3\xdb:%\xae\xaf\xf4\xb2Y/\xce\xcf\x8e\xcf\xf7\xfc\x80\xcb\xb0\xfd\x10\xa2J\xa0\xbe\na\xd2\x13\xb1\xf7\xd9\xf4\x1cul\xbe\xc8\xac\x0cC\xa2\xee\x8c\xcfXV\x08\xeb^\xe2\xbaU\xd1-\x1c\xd5\"\xf6\x89\xa6\xb2\xaa\xa9\xdb@\\\xa6\x9f\xca\xb4\xf4\x87`\x08\xfa\x7f\xfb\x1a\x82,\x0c\xe1\x96\xb2\xe3\xe3[\xee3\x1c\xc2i\xe9\xd1\xe0;\x88\xc89\xd1\xbc\x93\xa8\xf2\xf3|\x85a\xcc+\xd9\xf2\xd1_\xf24 \xa1`\x9f\x8bG\xabE\x14'!\xfc\xee\xd1\xef\x1a\xa8\xbcw\"\x82[\xee\\\xdc\xad\x98g4\xf6y\xe7\xf6\xf6vg\x96f\xcb\x9du\xb6` ?\n\xa6\xb6b\x13\x04\xb5\xba\xa6\\\xb3z3VL\xe6\x8eY }\xfd\xec\xd8'\x18\xd6i\x08\xde*\xcd\xcd\xdb\x0c\xf5\x94d\xf5\x9c.\x97\x12\xfd\x8dc_\xe0i\xe18\xf9e\x9c\x1bt\xf3\xe2`N\xb3!\xac\xfd\xa0g\xbfw}\x9f\xaf\xd2$gD\x03V\x81\xd5\xc0\xd7\xa0\xc7\xf92\xbf\x99[\x02\x8d+\xd3,KYo\xcaO<\xf7\x92#\xf5\x97.\x91B\x1b\xfd\xe5\x0bx\xaes\x0d\xd4\x15\x88\xfc\x02;9\xd5>\xa3\xed X/\xfd\x84\x0e\xcc_\xbe@\x06G\xb0hWw\x83\xa6\xf2v\xd0Z\xe8\xa8\xd2\x86\x8e\xeaqhP\x7f\x13\x16\x85\xa0T\xe0yG\x158\x94\x8c\xc1\xd8=\x00\xa9\n\xb7\xf9zP\xdd\xfd\x03\x00\x8f\xf5\xf2\"*\xd6\xf9\x05\xfb\xec\x9a\x08\x85\xe6\x98\xaai\x03<\xaf\xacQY\xa0l\xfch\x04D\xcb\xc5r\xb7\x89\x9b]\xf5K\xec\x90\x06\xae\xf9\xa6\x0c\x00P\xfb\xc4m\xf2C\xe7\xa6\xd2\x1f%\xdbh!M*\x17\xad#}\x03\x8bL\xa4\xcd\xe6E\x99\xdc\xb9\xc2sp\xfb\x10\xbc\x10\x98H\x16%\xc2\x04\xe0\x0ft\xee\xc5\xbf\xc6S\x96O\xb2x\x85b\x9e\xfe\x91\xf6\xbe\xf6\xa9\xfeA\x93m\x92\x96k\xcb\xf6\x0e\x02\xa0|\x86\x00\xfd\xec\x7f\xf3\x18\xbd\x01\x1a\xd7^\xfd\xf6l\xab\x10\xad\xfe\x14-\x17\x82\x81s\x99\x10\x95\x19\xa7\xc8\xe8\xbb\x98k*\x15!U\xeb&\x12Y\xb3\x89\x84\x91\xbb\xb6v\xb7o\x0d\xac\xd1\xd8\x94\xdedR\xea\x89\xab\x0bk\x0c\x87\x1cM-g\xea\xc6\xc4p\xb2\x19\x91\x0fT\x13X8\xa2^\xcc\xb3\xf46\xe1\xa8\xaa\xd3\x9f 4q\xfe\xb7\xb7\xf4\x8b4\x9a2a\xc8vq\xf6\xfb\xdf\xbf9\x1d\x0b\xeb\x8bs|\xf5\xf1\xfd\xab\xe3\x0b\xfdU3^\x98\x16\xc5\xbf\x14Z\xacUh\x86Flh\xb1=\"\xb4\x11\xa5\xed\x91q\xd2s\x0e\x9e\xd9 *PrH\x16\xe9\xf5\xf5\xe2\x9b\xcc\xd1\x08\xe5\xe5}\xac\xa1\x88e\x93\x064\xf9X@\x8ep\xc9&\x96\xbf\xfcH\xcc\xcc\xd3W\xa0D\x9br\xb2m\xba\x86\x1a\xfd\xbf\x07\xf6\x97\xafK;\xadL}D\x07AG\x03\xfd<\xc3\x8bmi\xae\xcf\x92\x9b\x9aA\x7f!\xcd\x17\x95\xc9?\x92\x1b\xe4e\x95}?\xe7\xbcr\xcd\xe0\x7f\x95\xe6\xc20[\xfdz\x1bq\xc1M\xf5%\xed\xb7e1\x9e\x9e\xd6Z\x90j\xe3\xf1U:\xbd\x1b#\xf6y\xb6,e5&\xb3T\x8d/\xfe\xf4\x9enN2Vx\xbfk4\x18\xd5\x1b<\x7f\x7f\xf6\xee\xfc\xb4\xa9E\xb1\xd3\x9b\x9a\\\xd7\xe1\xc5\xc14\xfe\xe3\xf1\x87\xd7\xc7?\xbc9%\xe6,\xa06\xbe\x91\x08/\xa7\x8d-\xde\xeb\xd8\xbf\xd1\x02\x95R1\xc2\x12\x7f\xb7O\xba\xc2\x0e\x1e\x9b\xf1\xad\x84/\xecc\xb3\xbap\x85}b\xbe\x16\xee$\xfb\x8f\xcd\xf0\xa8\x0b\xe19kjK&b,\xfbf\xf5\x99\x18\xcc\xb3\xc0\xf7\xe2\x82e\x11Fv\xaaWYq\xfe\xdf\x1f]b,\x14\x8c\x9c\x91p\x8e\x1a\xe2\x04\xe4K\xdf\xf4ui\x94\xd2@Sl\xcc\xe3\xbc\xbe-*\xc8:\xdd}Q\xfa\x9a\x87\xca\xd3\xd5l>\xf7\x13\xacdFQ\xe2+u\x17\xc2U\x08c\xe1\xea\xda\xae\xe0\xc50\x10\x98 \x0b\xf3R\x9c\x94\x9e\x8e'V~Z\xf5tr;\x15148\xe4\x1a\xf2\xad\x89J\x88\x9fM\xd5\x80\x96{\x1b\xebk\xdf$\xec\x16\x12\xe9\xa7\xee\xc8\xe7\xa6\x9eMT\xa9\x9b\x8c\xa8\xfbH\xec\xbe\x08\xf3\x13\xf4P\xc4\x10\xb5\xaf\x15B\xdb\x95>K\x07 \x0e[8<\xa4n\xe3\xce\x85\xd8k\xbd?\x11\xdc\x02\x1d#\x8e?\x9f\xe0\x10NF3\xcc\xfas2\xf2\xfe\xfd\xdf\xcb\x8d\x85\xafn8>\x9d\x8cn.\xed/\x8f\xe1\x10>\xa1\xc3\xb4\x7fC\xdc|\x9d\xc1!\xdc\xc0\x11|\x86#\xb8\xf5=\x96\x14Y\xccr/\x80!\x1c\x97~\xd9\xf6g\xe8\xd4\x85\xb1&\x84~\x1f\xfb\xef\xc9\xafyoF\x82@\x8e\xf5\xefQ\x1f?\x86C\x98\xf8\xefeT6v\x0b,\x08\x02\x8c\xe5i\x86\xbc\xe2\xd5\xc7\x98\xb3\x13?\\\xf8\xe3\x10N\xe55\xb7\xb8\x93S\xa8\xa0\xdf1\x8c%\x94\"^}\x16\xc24\x08B\xf8\xcc[\xc0\xbc_\xe5\x02\xf1\x1e?\x89X \xbc\xf5s\x19i\xf4\xb8#\x95\xf9T\x05c0\xb4i8\xba\xef\xbf\x87\xadk\x0c>\x8f[}\xeb\\,\x90\x1a\xda \x0e\xed8\x08a=*\xb8\xa8z\xcc\xff:\xe5\x7fMC |\xa49\xfc\xee\x9c\xf6ObNC\\D\xbej\xb7\xbe\x9a\xa6\xe3\xaeS\xc4Y^V\xd5\x91n8*\xcbU\x1d\xc2\x19\xb1U\xe0\x9a\xdeV(\xd8_I\x1f}\xfc\xff\x84O=\xe6S\xbf\n\xe1ntuI\\\xa8\xa2\x03x\xea\xa7\xbd\xf7\xb0\x0di\xefG\xf8\x1d\x08o\xff\xf3\x00\xe9\xef\x1d\x1d\x80e\xc3(\xf7\xfa)\xb0\x95\xf8\xfb\xfb\xa8\xd5\xddJ\xfc\xc7\x83\xc0\x9dQP\xf6\xf5\x04\xb6\x0e\x1d\x829?\x80\x0f\x02\x99\x9f>\x04/\xb2ds\x10\xc9w\x86\xedDL\xf5f\x83\xdc\xc0\xb6^\xe5\\!\xefg:\x07\xdaxLG\xc9|B\xe5\x85\xe1l\xc1^\xe0[9cd\xb0\x8d\x83A\xe0{\xafO\xc7\xef?\x9c]\x9cy\xf7\x0e\xb0\x11\"g\x92\x92\x894\x84\xc2\xd2z\xbdp\xc5M\xc3P\x82\xeb\x00\x12\x0ci\x89z{\x7f\x8d\xb0\xc0\xa8\x902\xc4/\xf1\xe1\xf32 \x0e\xbc\x84\xfcy \xbf\xe3G\xc0(\xdf\xde\xbe\x14f2\xff\x1d\xfb\x0bl\xed\xcb\x97\xaa5\x1a=\xcd\xa8\xe2\x9d\x17hw\x10\xf4T\nb\x1a\xa4\x99\xb8\x8fP\x95d\xd0\xdd\xcdzq\xa1\x01u\x0bb/\xb5\x8d\x0e&\x1d\xa7GN\x06\xd3\xac\x07\x8btj\xe4$\x8a\x08\xcdy\x8ca\xe8F\xf1%\x0c\xe9\x13\xc1\x0en\xaf\x07 \xad\x97\x1e\x19\x91\xef\xab\xc3hX\xffL\x86\x88:\x82\x08\x86T\xe4\xf8\xce\xd0\xdf\xdb#\xa0\x9f\x8d\xbc\xf1x\x92fl\xe7/\xf98\x9fG\x19\x9b\x8e\xc7\xe2\xa8\xf7]e\x87\xf0\xb7\xaf\xad\x1b\xcf\x01\xd2t$r8\xfa\xa9\xd0\x9c\xfe\xedk\xd02\x1f\x17=\xbd\x9fF\x91%\xeb%\xcb\xb8\xf04\x84-\x7f\x00\xdf\x03E\x01\x94\xf7\xb4\xaa\xb7\xeb\xa8w\x9b\xc5\x85\xaa\xb3\xef\xa8\xa3\x14#\xb5\x82o\xba\xd8\xa9Z.\xb7\xef\xfe\xe3\xc0\xdf\xd2\xb5\xd4\xfc\xddA\xe0\xcbh\xbf\xe0\x89?\xbc\xa6$\x1a\xa8g\x1e\x17p\x08\xd2\xa2\xaeT\xca\x8f\xe3\xfa\xcdG\xe8>U\xf8\x98\x98L}/\xda\xb3!Rj\xe0\xc71I\xc5\x12xyXQ\xc6#b\x15%L]<\xe34M\x98\x9d\xe0\x15\x86\x18\xcc\x0d2\x91\x7f\xa0\x9a\xdb\xf6a\x19V\x8f:Feg\x04\xaf,\xfb\x19\xd4\xfb\xd1\x10z\xc3cr0\xa0\x03R=\xde\xbb\xefv++4\x05\xd3\x8fC\x88\xc4y(\x17>\xf5\x0bS&V\x0f\x1e\x05~\xe2(\x15A\xa6]\xd1\xd2\xe4\x98rx\x01}\xe1\xd7\xfeR\xb8V28\x02\xcf+\x85\x00\xbeP1\xb6\xa4\x05/\xcc\x83\x00^\xc0\xe3\xc7\xbb\xcf\x0e\x90\xbd\x83\x97\xf0\xf8`o\xf0L4\xb4\x0d\x03\xe9\xa8\xc9iKd}\xcc+\x88\x06\x0e\xf6v\xb1\xf3\x887\xf0do\x7fO\xf6/\xeacG0\xc44H\xe2m\xbe\x88'\xcc\xcfC\xec\x04s\xd5D\xb0#\x9b\xd9\xe6\xe3\xdc\x91\x83z\xf1\x02\x06\xfd\x00\xb6\xe1\xe0\xf1\xe3\xbd\x83_v\xb7\x9b\xfa\x11\xa9\xab1\xb1G\x86-3\xe9\xbeT\xd5\x98\x1a\x9c\xb5\x0c\xf1a\x9e\xc6RWs@\xebj\x06\x96ng\"\xeb\x9b\x83\x94\xca\x9a'\xffT\xd6\x10\xcf?\x955\xfa\xf3Oe\x0d>\xffT\xd6\xfcSY\xf3Oe\xcd/\xa6\xacqjj\x06duw\x18\xd1\x03\xc7\xdd\xc9\xe3\xbe\x83o\xd3\xc2\xb3w\x12DQ\xfcL\xdb$\xa5\x0d\xf9\xca\xb7Q1\xef-\xa3\xcf6\xcf J\xe2\xa4\xc3 \xe9\x18\xb0d\xb4\x19\xf2\\}8\xe2b4l\x83\n\xc2\x19\xfb\xcc\x88\xc9\x0f\x1b\xac\x8f\x9e\xc8#4\xb2\x96\xc4\xb9\x9e1c%_\xbf\xceOK\xb9/,\xd27\xe9$Z0)\x1b\x95)Qpo\x9c\xcd\xbc^\xbeZ\xc4\x85\xef\x85\xde\x86\xec\xfb\xde\xde\xaf\xa2Dq\x04\xad\xdd\xa5\x95i\xc8o\xe5+6A\xfa}\x8f\x15\x95\xea\xb2H.hk\xca\x14\xcd\x13,\xc2CH\xfd\x16Q\x923?\nF\xf1e \x13\xef\xa4z\x92\xf3\xeeh-b\x17\x87J)h\xddR\n^v\xff\x89 \xab\\nL\x07/{`\xf2\xc4\x13Zs\xc2Y\xd9\x89\xca\xcdl\xb3\xb0\x93^\xce\x8a\xd7\xcb%\x9b\xc6Q\xc1l~u\xd2\x9b,X\x949j\xcc\xb1\xc6[a4\x7f2\x8f\x92\x84\x19~\x867X\xe3U\x9c\xaf\xa2bb\x98},m\xe5\xe55\x11\xca\xe7\xae\xed@CA\x1e\x0ea\x9b\x9fe6I\xe6'\xcf\xb5\x99:\x85\xce\x90\x01\x9a\xe1\xc5\xb5\x93\x9b\x95A\xd2x\x85\x10\n\x9f\xf0 \xa8\xbd1\xa6s\xd5\xcad\xdf\xc9\\ \xc2Q\xa5\xdeV5\"<\x96\xa7(D\xae\x1a\x9b\xac\xa5\xfd\x18]\n\xad\xed\xe09D\xd95n\xed\xbcR\xec&\xcf\x03\x95C\xa3,\x1d%\xdb\xdb\xe6I'\xf7\xcf\xf5h{{y\xd9\xb6\xd0\x02(\x7f\xe5\x0c&_\x87\x9b^\x92\xde\xb6\xb6\x86\xb5\x9c\x0d\xcd\xe1H(\x13|$\x93\xec\x16\xe6A\x8f\xd3\xbd\xdd\x10R\xfcc\xd0K\x93*\xb4\xf9\x95\x08T\x1f\xf9qo\x95\xe6\x85\xdc\x85Hk\x06\x18\xcfi\xd2\x8b\xa6\xd3\xd3\x1b\x96\x14o\xe2\xbc` C\x9aN.\x86\xd6\x00r{\x93^\xbc\xe4=\x9e\xa3\x17P\xceG\xd6<\xb5\x89>\x06<@=/\x04\xefw\xf54\x07\xf6\x88|ON\xc8C\xaejK\x8c\x1c]\xa5\xd2$c\xd1\xf4\x0e\x03\xee\x89p|(]/|O\xf8&a\xaa\x15\xf7\x88\xf2^\xb4Z\xb1d\x8a\xf9\xe8}\xed\xab\xa0g\xb7\xdc\x86\xc3y/c\xcb\xf4\x86\x89\xc6\x90g\x0e\xcb}\xea\xf4\x1c\x80\xa6\xcc\x959+.\xe2%K\xd7\x85\x86\x11\x9c\xe9\xa8\xbe\x0f\xeaF\xb3\xd6\xf7V\xa4Y\xa4\xd5C\x98VM\xe0_]\xb9\x15\xf7`\x1b\x9doh:\x8a\xeaF\x9a\x1f\xbf\x19\x02k'\x9b]\x1cv\xdc]\x13\"\x1f\xc8\xae\xdb:n\x81\xde\xa6\xec\xce\x13:D\xff\xe0I{V3G\x9e\x8f\x0cie\xea\x17vj8\x91\x90\xa8-\xb5q\xdc\x9b\xb9\xb2\xfe\xfa\xfd\x10\x92^\xc6\xf2tq\xc3\x02\x8cl\x8f\xa9\xfc\x96\xb1\x96\xdfjC\xc0X\x10\x10\x80yF+\x01\x91\x0dDg\x86v&\x90\xe2\x00\xe9|\xf3\x98\xc7\x8f\xcb\xc9Z\xdaT\x91wF\xb2x[[\x9c\xc9\xf3>\xb0\xeb\xd3\xcf+\xa4\x8di-%\xe6\x86s\xb6\xf8<\x95\xb0\x81\x9c\xf3\xe3{\xe1\x82ZN?\xed\xc9\xab7\x11\x9aA^\\\x89w\x9cK\xb10>\"\xc2\"F\xd2A\xc0O\xf0\x161\xeb\x9d\xa3C(\x17ac\xb7\x05\x00\x88l\x9e\xb6\nA&\x8c\xf1B\x88\xee\x0d\xc4g\xae\xdb\x84Zf\x97Nr\xa9\xa6\xeb\xc9\xea\xc9\xc57\x1a\xd1\xee\x9eC\xa69\xd8Cyc\x12\x15\xbe'\xf8)O0\x1dB\xc2\xab\x875\x9e\xd5\xeez5\xbe\xf4]\xb4d\xbf\x8e\x9c\xbdk\"\xa2\xdc\x934~Z\xe6\x0fR\x9aylj\xce\x854c\xdd\x9eKaf\xcf\x14Z\x16.@\xbc\x92\x0e\xc8\xba\xe4&\xe0&lS\x8e`\x01- peF$\xcc\x98'\xae\xf9\"\xbf\x90\xda\xb7\xd2\xccL|`\x1eH_\xad\xaedN\xa5\x92\xf4\xa6\xfeV\xd6\x9bii\xfdB`\xa3\xe2\xb2m\xc5\xcc\xe5Jp\xa7\x96\xb1C\x1el;\xa8D\xae\xf8\xc9\xa5\xe0\x8a-~\xa6\x13R\xb9Y\x94\xd2\xdd3\xf1\x1f\xef\x99\x18Ty\xeb\xd4\xfdr\xbat\xd9v\xed\xf4\xec\x80\xde\xa4O\xcc\xf7\xb1c3\x08\xf4\xb6\xac=\xe4\xbd\x93\x95tGS\x94Ey\x1e_;\xd4Q[\xb8\xb5[L\xaa\x944KE\xb4-\x1c\xef9\x92\x9c\xdf-\xaf\xd2\x05\x15[\x06\xb9\xe9\xe8j2e\xb3\xeby\xfc\x97O\x8be\x92\xae\xfe+\xcb\x0b\x8f<)e:\xd1'!dJ\xbf\xe4\x05\xbdY\x9a\x9dF\xad\xd1\x1a\nq\x86\x18\x0e\xadA(,\xc4r\xe1l\x1b\xf0\x0e\xca\xf3I\xdc\x95\x89\xa2\"\x08d\x98L\x0f\x93\xeeVn\x16_\xeb\xcc~\x9b\xd7\\\x84{\x9e\xc3\xdc\x94rC\xa49\x83PFK\x9f\x85\xa8!\x89{\xb3\xe7\x90\xc3KX<\xb7\xf9\xd2\xb2\xe5\x95\x90=\xd7\x9ap\xbc\xe0\xc2q(\x14!\\\xfe\xf3\xa7\xe510\xf1\xa7B\x98\xf1\xa7A\x88\x8a\x90y9\x86\xa5H\xc2u\x03/a\xf9<\x00I&\xa6!\xead\xe6\xa3eiQ\x95\x8cV\xa8S\x1f\xad\x1c2\xb8\x96a\x0d\x86\xdd\xb2J\xb5\xed\x9eA\x9f\xe6\xd7\x06\xa6nI\xec\x9e\xdd\x03j\xf7\xf8\xbc\xe0\x80s\x8f\xfe`\xf7 \xa8\xd9{<\xc5\xd7\x8f\xf7\x1e\x93)\x1a\xd6\xd4\x98\xa1t\xd7\xcc\xd2U\xae\xb9\xfdV)\xd4\x95_o\xc6f\xb9\xcc\xe2\xc7\x7f\n\xafh\x9c\x19\xea\xef5Jc\xf7\x9d\xff\x1d\xfb^\xd4\xdd\xa8\xd7\x9aof\x9c\x7f`\xd1\xa4\xd0\xf3\x10\xf2\xed\xa2W\xc9e>\xfd6\x9e\xb1\x8c\x85e\xe4\x82wg\x89\xc7\xbc\xbe[\x87e\xca\xf8\xa7\x8f\xbd\xa0>\xbf\x9e\x91\xd3\xbf\xbc\xaf\x0ceD\x05\xa2\xae\xcab\xafR\xb7\x85\xe0\xa9)\xd4u\x06\xfa$gi6a\x1f\xed\x00\x01\xe4j\x19\x1d\xfeX}\xab\x04x\xd6qp,\x04O\xeb\xba>\xbeE-\xab\xf1Z\xcfj\x9c\xd7\xf3#\xb3[X\xd4^\x1a)\x97s.\xd3\xe5z\x03ZkA\xfd\xcb8\x7f\xbf\xce\x98\x85\x15[\xfd&\x95AY\xd3r\xe5\xe2\x8di\xa5\xb9\x86\xa8p_\x82\x92\xf8\xcf\x02\x9b\xbc\x18\x0bc\xf5l\xfe\x90\xae\xafa\x861\x0c\xba\xfe\x07\x91\xcb\x13q\xb5k\x1fjk\x10\xf5+X;nb\xee\xbf\x04\n\xe8z\xc2\xb0\x07n\x9aT'\n^\x84\xef.\xf1\x17\xdf\xb8\xf5_\xbe\x97q\xdc\xed1q\xaf\xe4\xa1\xc9\xf0A\x7f\xd0\xdf\xfb\xc5F\x9a\xf8\x8f\xf7\xefm\x9d\x86\xe2\xd6\xd6`C\xd6\x98\x1eP\xed\x82\xf0\xfc\xf4\xe4\xc3\xe9\xc5\xf8\xd5\xd9\xf8\xdd\xd9\xc5\xf8\xfd\xf1\xf9\xf9\xf8\xe2\xa7\xd7\xe7\xe3\xb3\x0f\xe3?\x9d}\x1c\xff\xfc\xfa\xcd\x9b\xf1\x0f\xa7\xe3\x1f_\x7f8}\xf5\x0d\xees\x0f\xe65O\xc1u\xd7\x12\x0f\xa51\xe0\x01\xed\x92\xf7\xd82\xd0\x92v^\x074\xc3\xbd\xfb\xe4q\xdd^\xf4\xc9\xbe\xfe\xbb\x87)\x13=\x91k\xfe\xbcH3\xe65\x98}\xaa\x05\xed]i\xb3\n\xabV\xd2\xe5U\x9c\xb0\x0fl\xba\x9e\xa0\xd7gkKi\xcd\xdb\xa0j\xe9*N\xa6\"\x8c\xd0 \x1fY\xda\xa9\xb1\xd8\xd1X\xb4Z-\xee\xde\xc6\xd3\xe9\x82\xddF\x9d&\x189Z\x9ap2\x9fwia\xbd\xb1\x1b\x85\xe3 Ps\xe8\xd0g\\\x1bs\xd1\xd3o\xcb\x80\xc9|\xb0V\xf46\x8e\x8aFJO\x92.a\xf4\xb3\xda\xad/\xe7\xb1\x11\xf9\xc4\xb5\x98(38m-\x15\xf1\x16\xff\x88:\x9f0\xa5/\xc5BED*\xe5\xd3\xcf+\x8c\xf9\x00\xc5\x9c\x01K\xe6Q2a\x19\x14)\\1\x88\xca\xe9\xf6\xa8\xe8\x8ajq}\x16\x08C\xd9Z\x0d[+A\x8e\xa9h\x1bS&\xb0\xbf}H72\x99/\xa1g\xc6{j\xfb\xf5\x84pM\xe1\xef\xf1\x9e\xda~\xbd\x92\xa7W\xad\xa0D\x88)\xa9\x8e\x9c\xe1\xda\x8a\x1c(\xe2\xfa[X\xc6\x06&\xb0\xe8F\xe7MVS\x8bNM\xdc\xd0L\x8csAX\xd3\x82,\xd4\xe5]\xebj\x80v}M\xa5O\x95s\x98\xfaA\x08\xb32\x9a\x8dU\x0d\xb4\xa94\xda(\x8a\xd4\xdb\x0d\x15@\xea,\xb6\x06!\xef\xd5\x1e\x91\xfe(\xd9}&\xb23\x9f\xd9W\x14\xe63C\xfd\xc4\x84\xf9I\x08\x03\xda\x8a\x0b\xac]A\xbfu\xad\xe4\xd2\xbd\x92[Y/B;\x02k\xe9d\xf08X\xae\xf3\x82/\x19\xc6\xe2\x05!x\xe5=\xf8\x983\x98\xac\xf3\"]\xc2\xb2\xa4\xe8\xa8e\x88\xf2\xbbd\x02\x91\xf8\x9c\\^#-:\xeb\xa1l`\x0d\xe1\xdf\xca!Dw\x98\xb2}\x1e\xdd0\x88\x12(\x83\x1d\x83\x87jiPvG=\xf8\x89W\xb9K\xd7\xb0\x8c\xf3|\xc5\x16\x0b6\x85\x08PD\x89\x92\xe2\xe8\xdf\x1c\xa3Y\x11\x00P\xa7g\xd9\xfdT\x1a\x804\xce\xcd\x1dFs%E\x1bNSr\x7fA\x9a\xc2~\x85Y\x9cD\x8bEc\x1b\x03\xfb3\x9b|\xe8\xf6\x12\x9c\\\xcd\xc4\xd9 \x93\xa6k\x89\xe1\xb7\xb7]\xc8\x7f#3\xb6\x17\xa3\xc4aD\x92\xb6^\x80\x82\xa6\x92\xfb\xce]m\xe9\x0c\xc8\x15\xf7^\xbf{}Q\xff\x94V\"\xadI\xc3L\xb5hd\xec\xf1|}\x95O\xb2\xf8\x8a\x91\x11\x96\xafKq\x87\n\xf5\"\xe4'\x89$m\x92\x1f\xdc\x9bp\xf2\x93,a\x9f\x8b\x0f]O3\xf5H\x1d\x0f\x05Y\xf58!\xac\x1e*Th})BX\x8f\xd2^\xd4j?sS\xf9)\x11I\xacu+Fz\xb8\xdaJ\xb5C\x1a\x14\xb4 5\x91\x0e\xeb\x8b\xbb\x15\xa3\xe0\x9d^\xc9t\x89\x12\xd8\x8a\xec!\xac\x9d=\x96\xe4\xb6\xddJ\x9f\x95\xf6\xd4\xe2/\x7fn\x9e\xeb\xfaC\x93~@)\xa2\xe1pQ\xa2Ma9\xc3\xeaO\xa3\x0d\x82z\xd6\x89\x06\x7f;l\x90z\xba\x9cQ\xf8&\xe8\x843P\x0d\xcf\xf2&\x01\x81|\xcc\xc2\xc6\xf2\x05\x11)\x87\x0b]\xb4K\xecc\xeb\x0e0&Q\x91\xef\x94!x\xff\xfe\xef\x9c\xb9\xfc\xfc\x88\xff\xac\x07\x93\xff\x06\x89Z\x17\xf1\x1d~i\xd6\x9d\x8d\x14E\x1f\x9bWB\\\x1a(o\xc7\x84\xd8|I\x84\xc2Qfk.\x9f\x87\x9cp\xfa\xad\xd7\x10\x1eh\xa5Mo\xad\x8c\x1f;\xb9a\xb3X\xaf!\x92\xb9\xe2\xb5\x81\xe8\xa6v\xc1\x1c5\xea4\x90{\x89\x91{\x01\xcc\xd7\x8a\x7fm\xa1hS*\xdal^\xbc\xc0\x1b\x93\xc8b\xcbxs\xa8$\xe6\x1cIQ5\xd1\xb7\x9bH\x90\x1d\x17\x8e\x07a\xcd:\xda\xb3mY\xc8\xa3\xca-\xd7%\xba+2\xbe\x91\xf0I\x02^uV\xa1\xf7\x83 \xda\xe3~\xd0\x8bzB\xa3e\x82~cm\xd5\xa6\xf5\x9dkm.u\xc9\xcc0\xf2.\xacP\x97\xc7x_\xa6q9exIq\x19\xa8Y\x83^\xda\x8b/xQ\xc5\x18\x95\x08\xd0|\xda\xd0\xac\x8d\xdd\xf8\x80n\xbc\x18\xf5/I\x04)zBz\xf5k\xb0l\x18AWB\xca\xfc\xa2\x87j\x18\xc9\x80\x87\x15T\x88\x13\xc88\xec\x1fDq\xf8`J\xbc\x10\n\x15\x00\xb9\x8b\xf2S\\\x10\xd5(\xb7&}\xc0\x11xq\x12\x17q\xb4\x107P\n,*\xabr\x91\x82\xae\x9b\x83!\xa6\x1c\xbf\x89\xd3u.\xd3)gl\xc2\xe2\x1b6\x85\xab;]\xffP\x8b\xec\xaakM\xcb\xd1w\x81e\xb5g\x9f8\x9cQ-\xdb{y\xb1i\x1e\x19\xca\x84\x9frG\x1d\xc0#\xd3\x98]\xb8Q\x1cA=b\x02\xe5\x90\x86r\x0d\x1cA^\x1e\x07e\xc5j\xf5)}5GJ\x8a\xba\x13y\x06\n\x97Q \xaf\x1f\xfb5\xcb\x95\x82KXh\xc3kW\x8d\xf4\xaa\x0bL\xee!\xe8y\xc0\x17\xd6\xa3i~A4\xa6\x08z_\x18\x9fp\x1c\xe3@,\xf8\xaf\x9d5\xc7\xaa\x9d>G\x96d\xb3\xadS\xed{\xa7\xbd\x9c\x96\x0f\xa8\x84\x0e\x9e>\xe2\x08\x92\xb6t\x87\xa5G\x1f\xbe\xae\x0f^_\x0cm\x80Ay\xb6%\xfe\x9e2\xf0\xde\xdc\xfc\xb6\xcd\xbcag l\xbf\xe5\xa9\x8b\xb6\xf4}\x18j\xb1\x01\xd2\x92\xb0g\xc1s\xd8\xde\xe64={\x1e@*\xe8y\xe1\xb3Qr\x89\xcaT\x87\x1dh\xba\x19\xd4\xb5\x83\xf1\xc9A\xe0{E\xfaq\xb5b\xd9I\x943\x97\x15'}Hv\x02\x0eqA\xaf\x06\xb0C\xd8\x1c\x8bh\x97\x94\xaf\x7f\x81>_\"%\xc6!\xec\x14\xf0\x12R \xcb\x14\xb6\xd1h\x0b]\x81\x12Y\x90r|\x0c\xca\x8f\x12\xd8>\x844\x10\xe0\xe6\x1f'\xf2\xe3\x04v\xf8\xef\x97/1v7\xff\xe3\xd0\xcczU.h\\.U\x8aK\x95\xc1\x0bH\x9f\x07\x10\x8f2\xb4\xa5\x19e|$\xf4a\x17\xb7\xac\x92\xb9D|.\xc2\xc2\xd5\xf7F\x7f\xfe\xf3z\xb7\xdf\x9f\xfe\xf9\xcf\xeb\xe9\xd3~\x7f\x87\xff?\x9b\xcd\xfe\xfc\xe7u\x7fO\xfc\xec\xef\x1d\xf0\x9f3\xb6\x8b?glw\x86\xdfL\xf1\xe7n\x7f&J\xfbL\xfc7\xbb\xdc\xdc`W\xce#\xe9\x15,/\xdaM\xcf\xbabG\x08\x19\x85 \xa9\x03A\xe2\x86\xbdD\xac\x1a\xdee\xc6\x12\x03\xf8\nmo\xa7\x97\xb8v)\xbc\x80\xf8y h\x9e\xcfw\xd7(\xbdD\x0f0\xc76\xdb\x90\xb8U\xdbl\xf0\x9420\xae\x84\xf1J\xcdA\xc6\xd7\x8fI\"\xe3\xd6\xb3\xa0\xe1\x9a4\x04)\x9c\xf6\"\x05\xad\"H\x89[\x83\xa4M\x84US-\x99,ZQ-v\xde\x11(\xdeLXldhx5\xea\x13\xa6\xcf\xa0\xd6[\x04*\xb7\xc5{<\x0f\xb9\xec\xe5\xa7\xd5A\x17c\x1eHs\" \xc7)r`\xd7\x07`\xd7,q]e\x00\x88{9o\x14/\xb4\xbe|A'\xc1\xdaG_i\x94)\xbfO\xd8\xad\x1f\xf7N\xf0\x17\x97\xe38\x0bo\xe0\x13\x7fT\x15\xcc\x8e\xa0\xef\x9ax3\x94\xb3ng\x05\xfbd\x19\xf5\xc6\xba\x04}\x9c\xdf%\x13%,\x9b\x82tM\xd6vUZ\xeb\x95~\xcf\x12\x116\xc0U;\xd7k\xbf\xcf\xd2\xcfw\x97\x8e\xab\xf7\x16\xf9\x18\xad\xff\xdb\xc4\xe1\xcc\xe5F\x81\\\x0c:\x95\xe2_\xeb\xf2\xaf\xb8\xfc\xab\xcd\xc8\x86\xa2\xdd\xb6\xd6\xa1\xc52\xb8y\x92\xa5i\x17\xb5\x01\xdd\xeax\x0d\x11m\xff'\xfe\xb4d\x86jmY\xf8\x8fm\xd2\xecWj\x11\xf4\xd4\x10\x1b\xa2\xfa\xa0\x1f\xf8\x89\x7f\xb0\xff$\xd8\x88{ih\xd0\xdc%b\xf3\xec?i92\xcbKo\x19\xfa\xc8q\x80\nv\x15\xad\x0c\x95.\x06\x8a\x92h\xab\xa2-\xe53\xb4\x95\xfa\x89\xf0kV\xf4\x1c#\x02&h\xae\xaa\xf7\xc7x\x97m\xa7r\xc3\xacim\xdc\xee3\xda0\xe4\xc0\xca2\x14\xa1\xb1n\xed\x15\xa7\x07\xbbm\xd8\xae\xd8\x80<\x84E\x08\x13\x8a\x19@g\x02\xf8\x9e\x0c \xaf1\x8cv\xa9\xc8\xa8Dq\x07x\x1f\xc6\x019E \xfb3@\x1f\xdd\x97\xb0j&%\xc2\x8f\x9a\x9f0\x94nm\xce[\x11\xc5\x9a\xe85\xc7%\xb6\xdb\xbaq\xf08Kq\x87f\xbd\xbf\x96`\xe0\x12\x17?\xb63B\xf4\x04\xc5\xf9\xa0\xbb\xb8\xa0N\"!k!dE\xce\xfb\xdc\xc0\x0bX=w\x1d\xe5\x98\xa7\x96\x8c\xef\x02\xd2)\xba\x18\xdd\x10we\x1c\x00y\x80M\x8c\xf9\ns)\xd9\xbf\n\xe1\x0eC\x1d\x15\x88\xa1\x13\xcc\xca\xe8\x8b8F7\"\x9d\x13\x7fK\xb7\xa6\x99r\x8c]*\x1f^o\x1c`\xea\x9a8Y;\x92\x0c.\x0d\xcb:\xfd\xb9\xcaX\xf4\xc9*\xb1I!:\xa77\x8db\x0b\xa5\xf1V]V\xed\x93\xd8\xbf\xc6j\x9cA\xbd\x13\x9a\x1a\xbe\xfb\x17\xd2\xcdTl\x8bIP\xe1\xd2\xb50\x06p&\xbdl\xea\xb1 \n\xe0\x84\x04\x90\xd0\xf8*\xe2\xa7\xc4\x18+\x86/\xd0\x15\xee\xa3\x85\\\xdar\xe0\x8e\xe1|\xeb\x82\x90\x87\xc8\xa4'<\xcaQCZ\xfe(\xeaN\xe9\xf8\xd7\xbd\x84\x95o\x92\xf35\xc9\x9e\xc4\xac\x9a\x98\xefT\xcc\x97\x84\xa9e>N2\xbf\xf7$\xe8}\x8c\x93\xe2)\x8a\xb1\x0fr^\xee>\xa3B\x80r\xb1\x87\xbe\xc79\xd8\xbf\xaf\xe8)\xe2\xa5~\x93/\xddSz\xac\xbb\xedcr\xeb2b\xa1\xa5q(g\xf8l\x8e0\xf4_\xe6\xc7!$\x1dp\xa4D8x\xfc8\xf03\xc7\xd6M7\xebc\xd0\xa7\xa3RqN\xcd\xbf\n!'&v\x0d\x870\xf2X\x96\xa5\x99\x17\x827Y\x08\x7f5o\xca\xf2\"K\xef0\xb0N\xb4\x16\xef2\x96\xaf\x97\xcc\xbbt\xb9\x08\xdd9\x11&\x06y\x1b\xc3a\x88\xde\xe0ROf\xce\x154\x1aU\xe8F\x86\xb1]\x0f\xbd\xc9\xc5\xed\xd3\xdbt\xca\x9b\xdc\xdab\xda\x0b\x19Z\xd9\xb7\xeb\x99o\xbe|\xc1O3\xb9\x7f\xce\xca\x12\xc7\x1d\xa40r\x98\xc7\xd7\xf3\x9f\xa3\x82eo\xa3\xec\x93\xbd& id\xd5\xeeO\xed\x1f\xac\x89\xd1\x1d\xc1\xe0\x00\x8608\xd8{\xba\xef\x80Bm(\xfc,\xe0S\x12'\xa42\xa5\x10\xb0\x88\xaa\x82(\x90\xd9c\xd6!\xdd\x08\xc6\xfb\x9d-\xd24\xf3\xedr\x15\x96@\x08\x8a \\\xeeo\xca\x84\xed\x18\xe4R\xcb\xd8\x1e\x8b<\xe9\x9c\x8f\xd5_\x9d\xa4k\xf4\xa5W\xf5f\x8b\xf4V\xa4\x1a\xd7j\xb2D\xa4\xc8/\xf3\xb5\xb3d*\xe8W\xed-\x87\xb2\xf8\xb6|\x85.>\xc2\x9d\x05\x7f'\x8cM\x15\x91\xac5(Z\xa3\x8a\xd4\xda\x89 \x8aF\xfbbC\x9cO\xe6l\xba^\xd4G#\xf7\x8f\xf9\x12-\xe9N\x93I*\x87\xca\xacw\\\xae^\x17\xb3\xa7*\xe3|t\x1b\xc5\xc5\xab,\x8a\x13\x0dNr\xaeo\xd3\x8c\xd5\xdb\x9f\xa4S\x96\x99\xe0+{\x13oY\xf5\x8a\xa3\xc4\x1c/\xb2\xe6\x92\x82<\x0bzBE\xf1J\xb4\x15\xd8M\xb3[\x98\xfbU#\x81\xdd\x8fVX\xc3W\x97\xe7\xd7\x95\xdb\xf3\xcb\xa4\x1c[\x88\x8b:e\xb8\xaa8\x08>\xb4+\xd2\x95\x0dG8\xce\x8c\x03\x92\xd7\x17DK\x04\xa9\xa8\xad\xb8\n\xf1 \x14\"4\x03\xcc\xebV4\x06\xdb/w|\x10\xba\xd8f\x89\x1b\xda\x87\xea\xcdaU\x1a`\x14\nW\xdcx\x07 \xc7\xd5m\\\x16B\xeab\xe9%\x17\xc1\x0c\x88\xd8`\xabL\xcd\xe1\x08\xfc\xc8\xd8c\x9d\xf8\x04\xd4\x8d\x8b=\xac\xd6\xc9\xee\xa7\xaa(\xf1\xcc\xd5\x1ah\x9c{Y\x99\xb7\xde\xe4b\"\x94\x01\x8a*!\xd4%\xddRy\xd3\xc2*\xb1\xd06o\xb8N}aX\xb1\x91d'\xf6\xed\n\xa0\xb9xI\xb9\xfa!\x9c\x93\x97\xf7\x1ct\x11\x86.\xf2\x91f#\xbew\x82+B\x81\x9es&\xa2\xe4,zq.\xd8'?\x13\xce\x07\xfa\xb6A\xcd%e\xbb\nztn\xa5*1NKa\xa8W\xf7Mz\x9d\xdcD\x8bx\nI\x9a\xec\x88f\x1f\xc9\xc3a2_'\x9f<39\x9dz\xf0\xb8wLDnk\x02n\x11F\xb0\n!F\xe1\x93\x13p\xbf\xe4bb\xcc\xc7c\x0cY\x1a\x9c\x96\xf1\x97\xfb\x1c\xa3]\xf37?&\x93\xc5qi\x16\xb3\x0bi6\xc7\x1c6\xcdv\xde\xc6\xdc\x16\xbdY\x96.i\xdc\xc0 f\xfc\x94\xd6\x8f<{\xbe\x9aC\x9e\xe0({\xeb$\x9f\xc7\xb3\xc2\x0f \x9a\x15,\x03\x96L\x81\xdd`\xf0\x8f\x00s80\xb48\x10!\xfa\x10X\x02U\xbb\xb4\x8d[F5|z\xf6\xa3h\xd2\"\x0eQyd`nK\x0em\x8c\x0bXn\xda\xdb,\x96\x97{&\xb4\xa5\x8e\xaeJ\xf5\xa5\x8fw\xc0{\xfbT\xed\x9bz\x99\x0ci\x8c\xe9\x9ej\x03\xa2\xb0\xcfT,\xb6\xad\xd5\x16\x93`\xe2$\x84\xd5\xb9 \xdc$r\xc0/L\xe6\xb0b\xba\x98\x93\x8e|\xf5\xcd\xf8\xe3\x0e\x1a\x7f\xab\xd1xj\xc0E\xc9E}\xff=\xd4\xddEp)\n\xc1\x16\x1d\xf1)\x88\xb5\x9eFE\xc4\x97\x1ac s\xa0\xf9}\xb1\xa6\x1d\x89\xa2@\xd2\x92\xa6*\xe4Kx\x1b\x14\xa5\xad\x01\xee\xfb\xef\x914\x06\xa1XT3\x10d\xed\x17\xed\x94q\xa5\x87q\xf2J\xc6\xeb\xdb\x93\x9f\xea\nc\x82\x7fP\x01\xad\xea\xaf+\xce\xcf^bB\n\xae\x8d\xc7\x89\x80\x8e\xee\xfd\xc6\xfe\xf9 \xdf\xee,\x13\x82\x06\xbf^\xc5\x88,\xd5\xdf\xf5\n\xe3u\xa2\xd7)\x7f\x19\xb5\xaa:\xad\x87\x99\x90\x06\x10;\xd6\x8b\x05G\x10+\xccw\xbdq^\xb7K\xc37\"EE\x06\xe4\xf29\xc9AVG\xf4\x04\xcfoC{Th1\xdb|\xa4kxld&7/r\x15eu\x86\x9b\xa1;\xa1 \xfb\xc2\xba\x07U\xac\x9e\xf4\n\xc3\xa0\xa9\xe3*\x1c\x1a\x126;\xfcH\x1d&r\xcf\xb5\x9e\xe4\x97/_\xc2\xa0\xf6k\xb7\xf6k\xbf\xf6\xebi\xfd\xbb\x83\x10\xd8\xf6v`:]\x83\xe0\xb6\x03T>\xbd\xa8q\x17\x0c\xe7\xab\xa0\xa9\xcf\xbc\xb04\x06\xfd\x10\xfa\x1dc\xdb\x9c\xd3PPW*\xed\xc2\x97\xdd;\x97\xf3-e\x05\xc7\xfa\xa9\xef\xf1\xd7\xea\x9d\x17V\x8b\x1eP\xdfH\x9d\x88\xe2\x04\xd2*\xf5\xc6 \xba\xa3\x0d\xe1\xa4f\xe6\x02\x0d\xf3<\xa1\xe7)\x87\x04j\x92\x9e\xc8\xb0\x80\x0c\x87\xfe\xee\xc2N\xea@\xf7\xf3\xc9}\x82\xd4\xf4!\xc8\x82\x9b\x1a\x92~\xa8O\xf2X\x10\xd6\x8e\x13\xbb\xca!\x864\"\x01\x0bXV\x9c\x16\x17\x10\xce\x9c\xab\\\xeaK8x\x8bx\xf2\x89\x1ag\xa7>\xde\xb7\xaf\xb0\xc2v\xa1y\xa3zB|w(\xe6,eZ\x85\x90\xa8\xd9\x96\xe8\x18\x82\xb9d\xdarn6\xa5\x8bo%\x02\x88bS\xdf\xe3\xe3\xa9m\xeb\xe7\xf5AJ\x0b\x01\xa5|\xf2\x83\xe7\x86\xc0\xe3\x1a\xe1\xdb\xb6C\xc88z\x8eDWH\x1d-F\xa9{\xaf\xe3\x98\xdeu\x13I\xfaB\xfbU\xb9\xb0\x08\x07\x16\x0c7D\xe2\x15_$\x91\x93\xa4\x16^\x8a\xb8g\x92%;\xa6\xf4\xa0\xff\xd2\x15:\x99\xd8\x93\xcd\x1a\x02)Mx\xe2\xecd\x9a\x91$\x9f\xef\xc0\xb4\x95\x02\x0d\x01 \xa5\x0dM 1\x8a\x00\x8d\x9er\xfd\xa4r\x832\n(\xa9\x9b\xd0\xfeZ\x9al\x0d\xc3\x0f-\x99\xee\xcb\x17\xa5f\xa8n\xac\xe5\x8c\x87`\x89\xef\xa2\x9d\xb0\xfc$l\xd4\x01\xbd\x16\x97\xc40\x84s\x95q\x81\x13D\xd7<%\x81>T*\xa8@k-p0\xfe\xdf\x7f\xafzq\xb5\x8d|\xb2\x0c\xd0Q\x03\x8d\x13}\xa6\xbe\xc7\xebUJ\x82\x10C|\x18Q\xae\x04\xe4\xaa\x93\xc6\x96\x97q\xfcS\xe5\xf6\x00\x0b\x96\xe7P\xcc\xa3\x04ny\x8de\x94}\xf2\xc4\xb8P\xb9\xaa\xc0\x86\xcd*\xd1\xeeH\xad\x05\xff\x91\xe2\x95\x19\xde!\xa4b\xe1\x91\xbf\x93R\xf94\xc5\x01{A\xa8}_S\xa9HM\x91\x05@J\xa3T\xd38\x9aJ\xb5@or\x10\x1a\x82\xb0X\xc1\x04WP\xae\x8aX\xdaL\x1e\xf1}8*\x05\xbc\xa1<\"\x8f\x1cz-\xfe\x7f?\xd0u\x7f;\xa8\xec$gQ\x02\xd01\xa3\xa4\xdaJ\x9a\xc2C\xe2\x8f\x1a*\xea\xc6\xcbk\x94\xda]\x14?\xb0\xea\xa7\x9b\xa1 \x1ew\"(Z\xc3\xc4\x85\xa6\x80x\x00q\x8e\x81s\xe3\xe5JdH`6\x1d6n b\xcc2\xd2\xca\x8c\x96\x82\xd6\xf7B\xb8#\x8b\xa7Y\x14'^\x083\xb2T\xed\xcf%Y*g\x17\xc2\"\x109S\x8d\x8f\x13N\xaa'\x0deWd\x99\xa467AX\xc6\xbd\xde\x8au-!^\xeb\x8fo\xb3\xb8\xa8]\xbcn\x99/\x91\x08\x96\x9f\xcc\xa88\xb9_\x1b\xd6w\xe2\xbc\x8a\xc6\xb5E\xceP\x18\xeeM;\xc5\xb2\x8e\xeb\x06#\x1a\xef\x8b\x04\xf2\x8c\xab\x8cQ9^\\X\x17\"\xea!|\xeb\xc9X\xc6\x02\xc6\xd5.\xa0A\xac\xb20Pes 24\x00\xd4\xb2!8O\x05\xc4$1\xc1P\xb6\x14*j\xc5Jk\x1c\x8e\xbeBt\x91\xd1@k\xe4\x12\x1d&%qW\xa1\x0ej\x15^\xc2\x80W\xda\x11\xcd\xbe\xf3+\xfa/x\xcc\xad\x95b\xa2f\xd1\"g\x80\xddB\xc6\xf2U\x9a\xe4,\x04ek\x9e\x98\x17\xb0\xb5%n(\xdd\xde\x96\x93\xeb\x8bl\xca\xbc\xbdMw\xe3\xb2\x05\x88\x8aT\x15A\x08W~+5\x13\x08'\x10L\xbc\x17\xe7\x82\xc1\x98\x10\x11!\x9a\x06y\xed\xdcV-\x84\xf9\x8a\xa4 \xee\x8e\xee\x9ai\x93l\xbb\xf5\xb8\xd8\xb4\xdb\xab\xa6n\xab\xc3.\xe9\x89\xbf\xbb\x9d\xfdJ\x9e\x15;\xb1$\xfed7]o\x07\x00\xac`n\xba\xb1\xef*c+\x96L\x15P*/=\xb3D\xe4\x98iP\xa1\xf7\xc6h\xc2\x97\x0b\xe4\x91?F\xc5%\x1cA\xe4\xeb/\x02\xb4\xe3\xab~\xd7-\xb2j\x9f\x1e\xc2( k\xaf.\xb1\x8a\xf0\\J\x1c\x04OCeu`\x8b\x03\xa5\xce\x1f\x88w\x06W \x90^\x9e3|3\xc7%\xa1\x95w{\xc8\x8aU7r\x89\xbc\xcd\xf3\x03\xebR\xdf2\x82\xb1\x18\xf3&\x9d\xd5F*\x03\xf7\xdaWL\xd4\x90Jz\xc1\x1f\xc2\xc9%\xd6b9\xeb\x1c\xbdR\x11\xce\xe3\x9c\xfeh\xe0\xfe\x88U\xcc\xa5,\x87#lIXq(\x89Q\x96\xe1Qi8f\xd8^\x19\xfa)8\x90\xd6\xf0j\x11KvA\x18\x13%R\x92%p\x18\x9d\xfd\x9c\xfcB\xe9\xf0#\x0f\x0b'\xa8S\xa8\xcf\x9c\xde,\x9b\xce\x8an\xa5\x163\xb4\xff\x1cb\x0c\x15\n\xf1\xf6v\x00\xd9(\xbet\xc1\xa0Qak\x19\x0e\x01I\xa6nd\x9c\xc3w~Q\x9d\x9f\x0d:8D\x89H[l\xf9\x99\xca\xd9\x13\x850\x08\x0c@\xec\xa0\xe4cc\x93d~\x14\x08\xe5_\xa3\xfe\xa5\xb6{]\x0b\xdf\xb49S\xeb\xc6\xb5Ib\xcek_Vn\x10\xd2p\x83\xc60A\xd1\x05g\x12\x94\x82\x98\xdb\x00\xadT=(\x02C\xf0l*FRe\xb3\xa2\xdao\xc1\xe5.B=\xe0]Q]\x89\x9c\x11.G|\xe7R\xef\xc5\x85\x88\xa5\xc9\xc9\x1c\x0eM\x99\xa6\xec\xca4}\xcey\xa9<\xd4\x04\x853\xb9\xa6\x9b\x1c\xabM\xeb\x1fM\xcb\x93\x0e\x0e\x0d\xcc\x08\x0dU1\xdav\xb4\x98\x19\xde\xc8@\xfb\x9d\x00]\x9e\xb9\xc6QS\x9d2\xcc`\xf7[1\x15\xa4YJ\xdd\xd0D\x19\x1fY\xe6'\xf5\x1b\x88\xf7\xa4\x01\x12\xe0\xd9*\xd1<\x08(;CC\x0f\xc5\xb9\xdb6@U\xaaV\xbe\x8b\x04\x87\x0dr\xb2B\xc7\xd1\xb0E\x82\xb0\xe3>\xc2\x83\x1b\x99w\x87\x05e\xfd\x1c\xd1\x14s\xf2\xab\x0e\xd3\xbd\xcd\xa2\xd5F\xa7\xbb\xfb8\xef|\xf6g\x8e#\xa2<\x1eR\x8c\xc7\x83\x0c\xa5\x10\xa7[\xc5^NN\xa6\xbe\xc7g\xb3bS\x90\xc2}R\xf7\x97P\xba\xf8f\xc9\x99 \xcb\x87nnP\xf2\xec\xd6\xaf\x0f\\Z3p^c\x16\x9a\xa9\xb6\x8d\xbc\xa5&A\xf2\xd6%,HW4\xfe\xe8\x90P\xc2i\x0d\x14~Z\x9b\xa3\x90SS\x8e.[\x89\xe17R*\x95QS\xafY\xef\xa7B\xa4\xf7\xcd\x0f\xb0\x9e\xb2JQb?\xce/\x0d\x04\xd1U\xba\xf1R\x90\xa4\xb6l\x806\x93\xba\xcf\xd4<\xceG\xe9%\xd4c7kR\x81,\xf4UE\x0d\xa9\xdb\x1c\xee[\xd1K\xab\xcb8\xf3/B%3=\x85F\xc7\xf5\xfe\xca\xe1\xdc\x80\xfa\x1agt]^1\"\x83\x84Hp=\x8a/\xb5\x9d\xde\xbb\x8a\x93\xa9\xa4n\xbc\xa8\xc1#\xa7\xd0\xbd)\xdb!\xa3\xa1\xd0X\xde\x1f\x16\x81\xf2\xfe\xce\x14\xe7Z\x89\x11\xf6Di\xda\xd3\xc5\xddD\x91\x90\x9ao7\xe9z\xc2\x92\xf5\x92e\xbc.\x97\x13lj\xb3\x91k\nEak\x17G\xf6\x1c\xeb\xb3C\xbf\x8f\xf1,K\x97\xfcT\x86Cx\xfb]UV\xcf\xac\x10b\n\x1eG\x82\x05C0\xae\xe5j\xb0\xe3Mti\xa2-\x1b\x90\x88\x99Q\x16\x94\n\x83\x94<\xaa\x1b\xb4,_\xc9Q\xd7?\x97~,\x1d\x0c\x8f\xee}\xd7\x03m~D\xee\xd0\x02\xe23K;M\xbc\xaeZsn:\xf4\xb2\x8e\x84\x9f\xde\x11:\xe1\x94\xd6\x9b\x1b\xf4\x83p\xae\xb1\xb3%\xd3\x93*yA9Y\x08s\x9d{\xba6i\x17\xa7\xd6\xc0\xfcF\x08\xd4?\x96\xaf\xfd\xf2\x04 ;h\xb8\xb7\xe4=\xce\x11\xe7\xcb\xf5 &bv 5(\xf3e\x1dV8(\xbc~E\xd0\x92\xfa,\x87\x9cU\xfbYzd\xb5\x10\x93{\xc3}@\xf3w\x99\x1d~\xc1\xf2\xa1\x996\xb6`\x84u\xf8\x96\xe5\x1d\x90\xdf\x12#\xb0\xca\xcd)\xd4+\x08]Vs\x1b\xc6\xa2\x9aNU\x06\xf9\xe9\x9ca\x87\x0c\xc8\x96\x95\xa1g\xaa\xfbvDd\xafL>\xabG\xcf\xca\xd9B\x04\xb5\xe4\xff\x7f\xf9\x02\xb7q2Mom\xfa\x92\xd2\xe1\xef\x91\x93p93\xd1Y.\xa0\xc4\xb4xZ\xf9N\xf5\xc6h\x89\xfd#\xd2K\x07x\xf0\xcb^\xce\x8a\x8bx\xc9\xd2u\xd1Q\xccI\xd8-\xc4~*N\xb0\xeak\x8c\x87P1@!\xe0\x00d\xa1\xa5\xb7\xc0~_'\x05\xcbn\xa2\xc5=;V\x9f\xd3=\xabR\xa2k}d\xa8\x80\xa9}\xd0*\xffH.\x1f5\xb1\xbe\xd5|\\S\x97fl\x86\xb6\x91\xba\xec=3\xe6k|\x84\xed\xb6\x81\xa4\xb6\xc6\x02\"YX\xe2\x011g\x96d\xe9b\xd1EA\xa4C\xc7g\xbc\xb9\x05\x93?_OQ\xfc\xd0_\xd9\xf8\xc5{['D\x7f\x0f\xd2\x99i\x0e\xc7{\x1b#\x9c\x8f'E|#\xb4\xaf\x91\xfa\xf3[:\xa7/\x08\xe5M\xaaV\xd5\xaeW\xc0\xcbC\x99S\xc9l\x15\x0e\xa1\xda2~+/\xcaz\xe34Q\x93\x17\x97\x12\xe5o\xea\xb6\x87p\xb9\n1\xa4\xd5n\xa0\xf6\xdcr\xc9\xa6\xb1\x08\xce\xd2N\xc2\xea_Ta+*Rh\xd5\xe08X\xb2.za\xb9\xf36\x1c\x82\xf1\x0d9\x08\xbbNm\x18\xf5\xe2\xea|\xe8\x94\xe0lc\xe6\xd9\x11S-Eeb\x9c\xebq\x88\x9a\xf1SY$\xe1\x9d\x82\xe7\xc16\x17\x82q\xbeE\xfa&\xbd\x15 \xc9|\xa7\xfd7\x1a\x11ys\xf6\xd9\xa3\x8d{D9FBj\xa9\xb0\xd3\\#\xca'q\xdcX\xe3*N\xa2\xec\xae\xb9J\x94\xb3\x83\xfd\xe6\x91L\xf2\xdd\xb6\n;-5\x8a\xd9\xe0`\xc1\xda\xea\xec\xb4V\xca\xa2[G9h\x1e\xda\xfd{\xda\\\x95\x1e\xde\xf6\x16\xaf\xefnG6,\x8a\x931\x08\x95B.\xdc \xac\xab'\xb8\"\x81\xed\x0c\xbc\xba\x90\x92S\x11x\xd6r\x11T<\x7f\x1e\x94\x03s\xb6\x0c]p\x17:\xe1\xafz:\x0c\x12\xba\xa0!tBE\xe8\x88\x8e\xd0\x15%\xd5\xa3M\x03k\xb7\xcdd\x11\x15q2h\xed\xbdq\xf7\xaaG\xf5-\xdbl\xeb\xbaq\xbbC'\xd2\x02\x1dh\x9cz\x94\xba\xae\xc1\xe8\xa9mO\x82r\xb1h\x0e\xb2\xa5\x1eN\xb3}I\xb4\xeb\xf4ZD\xa3\xd0R\xd8\xea\x0f\xa5#\xa4n&\x1d\xd1{\xc5\xe5b\xed\x989<\x94\xd1\nE\x120\xdb+\xc4\xfb\x98|J\xd2\xdb\x04\x14\x15\x18\x82\x18\xb6[{\x88V{uJT\x05v(#\xd3Q,W\x07\xb4\xc7F\n\xf6\x99C)/\xdb\xe4\xac\xd3B\x80\x8e\x88\xd1\x08n#\xd7VR\x81\x1d\xcc\xe2\xc5\xe2M\x84z\xba\xf5\xfd{i\xc4j}^\x93\xda\xbcf\xa2\xc7\xbd\x8dzlDX]\x89),\xc0\x0ea\x15\"\xe7\xe4k\x1d\x9b\x92B\xed\x17\xd6[Dy\xf1\x8e\xa1\xa0\xadB#\xf2W\x17i\x81\x92\x92\xfe\xeed\x1e \x9f:\xdd\x1f\xb0\xa6\x0d,\xff,\xcf\xaa\xc8&\xf3\xa5\xa9\xc5\x8bC\x18\xec>QIb\xe0\xe5Kx\x0c\x87\x87p #B\xe3\x9b}\xfef\xb0\x0fG\xb0\xa7^\xed\xf1W{}8\x82}\xf5\xea\x80\xbf\xda\x85#\xd8\x19\xc0\x10vv\x1b\x87\xb4v\x1c\x9fJ\x1bXM\x7f\xa7\x0e\"[\xca\xdf\xc4\x05\x1a-Ov\x9f\xf2\xbd\xec\x0f\x9e\xed\xc2\xf7\x98\x14<\xd0\xac\x99\xeaK\xe1\xfd\xdf\xff\xd7\xff\xe9\xa0\xb2\xe8cTU\x97\x16\x83\x9ak\xd8\xa0\xe9h\xa5\x062p\x0dd\xd08\x10\xa0\x06\xb3k\x0c\x06\x7f\x9b\x1d\xee\xba:\xdc\x95\x1dv&\x9e\x85T\x88>\xa7\x90L\x93$\x12t\xb0\x1f\x1aX\xffB\xf36\xc3x^\xe8\x97YCy\\V}\x1f\xf0\x0f\x03c_\x94\x89\x0d\xeb\xfcVho*\x11\x17\xac\xa9\xa32\xc2\x99\xbe\x9f\xcb\x11\xefh!\xd0\x9a\xf7^N\xaa\x00\xf8z\x95\xd9T8\x8a\x07\xf0\xaf\xb0\xcb7P\xbfI)_\xa5n\xf4K\xf2\xee\xb6#i\x0e\x04\x80\xd7\x91\x93y\x94\x9d\xa4Sv\\\xf8\x9a\x0f\xac\x199Z=\x18b\x9f\x8b\xdd\x8f\x1f\xef>;\x004\xcc\x7fq\x08\x8f\x0f\xf6\x06\xcfj&_\x06.Y\x04m\xdfX\xb8Q_\xa4-\xd6 \xb2{i\xd6\x19Xu\x06\x97!$\x95\xa3\xfa\xce\xe0\xfeF\x1e\x14\xde\x9a3\x19\x103\xd9m\x9f \x1f\xa5c\xe1*4C\xa87\"\xd2\xc2M1\xeb7\xe2G\xda\x81$n?\xa8\x9c\xec\xf5\x8d\xd4r\x11\xe4&\xc7\x0d\xdc\xcb\xb6ksj\x10\xe8\xdb\x01\xc1\xc8\x95h\x84\xcc\x84\xdcbj\xfc\xd66\xdb#\x89T_z\x9b\x1c\xd5\xd6J\xb2\x1a\xd2\xf1\xcc71b\x0fv !\xb0bOY\xa4%j5\x1a\xf1\xa3\xd6\xf47\xed\x87 t\x0c\xbf\x86iI\x0b\xcd\x9a=\x1c\xaa\x91[\xe9\xa8\x11;\xcaA\xf7C\x04\xb0\x81\xa9\xc3\x16lX\xb9\x99\x1d\xc7\xf9\xd0\x0c\x8ci\x03\xf3\xd4\x06\x0b\xada\xf5WQ\x8f\xe7\x06\x87\x10\xd75\xd3\x8a\x91t\x0b\xff\x95\xcdmy\x06\x95\x82\xa1\x01~\\\xb6\xd0t|\xee\xb4\xff\xe3*\xef%\xfab\x96\xac\x99b\xe2\x85\x9c\xe3\xe8\x18t\x03%\xd5Mhs\xbb\xf5\xbd/\xec\x14\xd1\xe5\x9bD\xa3\x04c\x92V\x00\xd71\x89\xf3\xfc\x9c\x10$\x81\xe2/\xeao\xf0:I[\x91:\xd4\xa5\x88\xd0xK\xf5\xc0\xf8\x8f\x1cV\x1d\x9d\xebc\x92RL\xe3]\xc2\x8d\x99\x17\xbd\x81\x01\xae\xec\x93+\x8aAs\x0e\x19\xbc\xe0M(\xd2hW\xba\x91\xd9\x03\"\xbf\x18e\x97\x0e\xfe#E\x0d}\xd9L\x8a\x8e\xbcB_\xaf\xa1@\x8aG_\x08)\xdd\xc8\xce\x0e\x0e\x86\xaf\xde\xce\xae\x10\xb3\x9b\x06\x86\x8c\x956\xb2\xa0\xf3\x18v\x7f\xfd1\xc8\xb60\xf8\xce\xa1\xca\xd2Y\x1f\xd5\x1e=*\xd5y}\xfb\xb8M\x8bQOhly\x9b*\x96\x01\xfb\x8d\xaf\xad\xf3-\xb1\xa9\x8c\x1e\xa0\x01v\xc0O,\xcaMn\x0c\x9a\x05\xef\x0b\xcfijh\xf5|a\xf5\x0d\xa3\xa9\x17\x9a\xa9g};\xbe \x08\xa9C4h\xe4\x85\x1eT@\xa9C\xeb\xde\xc3\xd1\xc4\x98\xfa\xa45 \xc68\xa5\xeeu5\xa3\x9b\x1ei9Nn\xb4\\Pt\xa63LcS\x164\xa9\xd7\x11\x87\x11\x04\xb5\x84*\xf5\xb4 \xb1\x9d\x01\xabfu_Zc\x14Y\x94\xe4\xb34[\ns\x0c\xca3\x06C\x83_\xa8z\x1dl\xa7\xc0d\x9b\x8d^h\xa9*\xe9\x95\xb5\x9a]9*\xb1\x0d\x0f\x9c\xc9\x95[J\xdb\xca\xea\xf2\x983v\x80\xe068\x84\xae\xa2\xc9'\x15\xaaf\xb9^\x14\xf1j\xc1\xa0\x88\x97,w\x86\xbcW\x03\x99\xaf\x93O\xa5\x9bJ9\xba\xea\x8d\xcc\xfaW\x94W\x852ut\x88Y\xf8\xdc\x93M\xbb\xda\xc5\xf3'5Lw\xfc\xd4\x8al\xaeLd\xe1\x05\xa4D\xe0\x8d\xaa+\xdf,\xb6z\xfcZ\x99\x81Ri\x04\x19\x9bj\x88C\x99I\xeakN\xd7\x90`\x14\xf1.\\\xc5\x1c\xf4\x8d5*u3\xafT?/h\xfb%\xc2\x13\x83\xaa\xa6E\xf3h\xcc-RNT3y\xaa\xde\x1d\xea5\xdc\xa9Ff\x8bu>\xd7\x1a\x10\xbf\x0fU\x89\xb2\xbaG\x9b\xedU\xc6J_\xbd\xa8M1J\xf1S\xca\x1d\xa3\x8eg\xe4\xc8\xf4\xd1\x1c\xe9\xbfj\x99\xd3Hnl]\x12\xd7\xfa\xa2p.r-\xc9U\xb5\x7f\x9a\xe7\xb1v\xb1}\xb5\xab\x14\xc2\x88\xd4\xe6\x12j\x99GY\x15\xee\xde\x8a\x14\xa0\x0eL\xeb\xa2\xe3$Z,\xf86\xac\x16y\x9a&\x0cn\xe7,\x81\xdb2\xa9\xd2\xd6!\xf4\xcd\\\x86B\x8bi\x10\xcd\x1au\xdc\xb0\xbb\xbc\x88\x17\x8b\xdaV3\xbb,!C\xb8\x03TB[j\xa5V\x0b\xb5w~,\xd8\x95x\xc3\xe0\xee:\x816']\xa3 \xa5\xdfS\xbd}\xcb\x9d\xac\x1ay}0\xb5\xfd\xd6&)X\x00\xae\xbev\xc4\x98qvk\x8b\xb2t\x97ug\xb3\xa63\x13\x85\x13\xfd\x80\xe1P\xa9\x1dB\xac|\xa3]\xb7\x17!le\x06\"\xd1\xf2Q\xe7#\xc7\xcf\x8c5\xc2\xf3\xe5\x17:q\xbe:Al:\x174\xdf\xaa4\xc2\xb6t;)t\x88\xe25\x82\x02\xb8\x88\"\\cW0\x0c\x93\xc9\xc0\xf4-.\xcb\xd7\x1b\x0dU\x93\x15\x03\\\xf4\xea\xdc\x960!\xb6\xb7A\xdf \x89\x8e\xa9\x1at\xfe\xccd\x14\xed\xd6\x8c-\xd6l\x90Q\xf8\xc2fZ\x10Y\xe1Cn\x12w\x83\xb8\xdc\x8b\xd7\xd6\x98j3\xeb$G_\xcc#\xa9KEiv\x1aM\xe6\xf5\x8aq\x95\xdf~\x92\xb1\x1a.tK\xdf\xab\xf0*\x16D\x93\xa4\xaa\xd2\x8a\xb4\xb4\x1am\x03 \xe7\x069\x8eug\xb4iV\x10M]\x12\x99`\xbe\xc08\x80\xc0F\xc9\xa5U\xf9\xab/\xf3f\xa3\\`\xaeUX\xd34\xc2}\x97\x8b\x84g\x00\x7f\xfb\x86&5\x0c\xd0Sen\x92\xb7\x16\x89\x1d\xb9jq\xfe.z\xe7c\xfa_\xd4b\x14B\x7f\x817w\xdf\x7f/\xd5\x15;\x98\x9b!\xc5\xe8\xd6\xc32\xfc\n^ \xb5\xa7O\xef4\xc7\xba\x0b\xce\xc1\x93\xa7\x81\xcf\x87$\x916\xca\xf3\xf8:\x81!\x16=\xfbV\x9b\xc2\x10\xd2\x10\xb3\xc9\x85\xb0\x0eA\xf5h\xec\xadNv\xbd\xd6\x85\x05\x7f\xb4\xb8 Evg|E{g-B\x90Q\x00I'\xacI\x9a\xcc\xe2\xeb\xb5r\xc3\xea\xd3\xcc\x7f\xe4t\xd2js\xe2\xc2,\xd8C0\xcc\x80\xb5u\x85IT\xda\x8fU\xa7\x93\xb8\xf4Xhw\xb9\x99%Y7\x0f\xdd=\xec\xfa\x90\xab\x91\x88\xd0\x86$\x14\xc3\x8d\x13\xd4\xa35\x0cJ\xa6\xa5.\x0b\x1d!ez\x0d?\x13\xf9\xc1\x05K\x81\x9eZ\xd5*e\xfa\xad\n^\x17\xc9\xd4\xd2\x83\x83 \xc4\x8c\xa8\xa3\xcb\x10\xe2v\xaa\x1aR\x1ap\xce\xf9\xacG\xec\xb2d\xe6\xf9\x8fz\x15${\x05\xf6\xf3\x1c\xd8\xce\xce\xf3@\xb9\xb9z\x91\x07\xdb\xe0oo'A\xa5\x82\xda;0\xe5zM\x8f\xa2\xdc&|o\x96\x88\x9c\xb9XTJ\x1c>o\xb0\x90Q\xeeC\xf0\x02\xd8\xe6\xff\xfcM\xb51K\xa4\xc3\xa68;+\xc7\x81\xe7\xf0\xf5y\x9de\xec\xbcF\x04\xc5G\xf9\xc6\xb1f\xaeD\xf2 \x9eZE`\xa9\x1e\xec\xbd\xc9\x9f\xc8OB3\x01\x95\x03\xfd\x81\xba^\xfe\xfa\xad\xc4I\x88\x1cT&u\x1a\xe9\xeb\x00\xaa\xaa]\xb3\xe2\xec6Q\xd5^\xb1|\x92\xc5\xab\"5\x0c\xa8#\xd7\x07\xef\xa2\xa5\x19\xd3d\xed\xaa{~\xb7\xbcJ\x17y\x87\x93\x89\\cA\x82\xe5\xd1\x9c\xf9\x85\x89\xa7('\xea50\xca@\xe4\xe7\x81bv*\xf1\x9b\xce-G\xae4\x7fpOg\xa1H\xba\x9eQ>\xb6\xfa\xd2\x93M\xa0\xa1\x86\xfd]\x1d\x81\\\xaa\x0e\xcc\xe7\xbe\xfe\x07\x9b\x89n\xe0SJ\xe8\xb4\x9c\xfd]\xbd\x95o\xdc\x15\x8f)\xfe7\xf1\x07\xfb\xe6n\x89iO0\xce\x9e\xde\x17I\xf9\xc1Fd\xc2\xe3\xfb\xa7\xa4v\xa3\xddK\x12\x0c\x19\x92+\\!\xbd#\xc1\x87\xac\xa9\xe5HF\xd9%\xfa8)_\x8a\x08\x05\x12\xf5\x85\xb5$I\x0b\xa0\xf5>\xba1\xfcr\xe8[[R\xdb'B\x10\xd4\xd3\xc8}\xf9\xe2P\xe0![\xefR\x10\xceY\xdbh;\xa1\x05\xcdH\x15!x\xe31\xcb\xdf\xa6\xd35\x9a\x9c\x98K\x89\x8c\x8e.W\x06\"\xde<\xda}v\x81\x88\xbdX9\x17\xae\xdf/\xd6\xd7q\x92\x0f\x1d{\x8be\x99\xab\x08\xb0\xed\xe9z\xc2\xb2|\x08~\x9f\x0b\xbar\xe9\xcd\xe2E\xc1\xb2\xee\xc4\x80\xf5>\xb1\xbbs\xf6_~\xd0c7,\xd3\xc8\xb4\x13\xb4`u_\xb4d\x0bD\xa9mT4d6Q\xb2?z\xb8f\"\x16aw\xb2\xefDg\xd6[\xb2\xec\x9a\xf9N \x19\xc5T\";\xdc\x06X0\xfe\xe1O\x0f\x8d\x08\x9a\x1e\xa3\xf2 N~\x0dtH\xe8pZ\xbf\x06\x805)\xb2.\xc2\xc5B\xe5\xb6k^\x97\x89\xcb\x0f\xf3m%\x94\x0f:\x0b\xe5j2\xa6\\./e\xec\xc9\x95\xaa\x03\xc3{\xfa;\xfb/>\x83\x85uG\xc5\x19\x9b!\x18WS\x0bv\xc3\x16\xc32`|\xadl\xc9\xf2<\xba\xe6Go\xe9\xe6\x8d\xb5\x8c\x1e\xff\xbe\xa2\xb7K\xaf\xd5\xa4\xe1\xb4`\xfb\x97\xfc|\xc5&C(z\x9c\xc98W\xda$\xfc\xf5\x87\x04\xd6\x91\xb28f\xf35\xe8\xc0\xb1\xaaok\xa2\x80\xd8\xa1\xf8b\x15 \xbe\xc4l\xba\xc2G\x87\xf6\xf0\xc9\xae\xa9\xd4\x7fH\xed!Er\x08\xf7\xf8\xff\x15\xf4\x80 \x87\x8e7\xd3\x11\xd2\xe4]q\x8f\xc6\xff\xdc\xab\xfe\xdc\x0f\x02a:\xf3\xf7'_\xb4!\xa3\xeb\xc0\xe8\x80\xc67e\xb41\xc4ZI\xc7\xbd\xa0\x17'S\xf6\xf9l\xe6{\xd2\xe21\x9dA\x84g\xbd\x9f\x07\xa6\x11)\x947\xd1/a\xc7\xe9\xf6\x7fS:q\x1b] \x07ft \xa3:S\x96\xb6\x98\x05\xa1\xf0\xbd\x90\xea\x1e\xf4i\xe7z\xfb\xa1\xab\xc3>\x92\xd8\xed\x0ebB\xadqq3\xe1\x9b\x88\xd0\x90\xd7\xcdh\"\x91i\xdc*'4\xb1\xab\xe5\xef\x970\xc0\x83}\x1b\xbc4\xc3\x18)\x05\x0c!\x1b%\xb0\x0d\x83K\xa3\xea\xae\xac\x8a\xc0\x0b\xc1\xd3kj%X\x80\xbf\x9c\x03\xfc\x1a\x82\x97\xcf\xd3\xf5b\nW\x0c\"\x97Z\xc3O6\xc9$\xe0&~\xbf\xe9\xfdD\x9c\xbdEO\x1c\xfc$\xa1\xd1nu\x1dD}\xb0\xf7TCZ\x071\x0f\x91_\xfcMC\xe6\x1b(\x8dkw\xfa\x14\xf9\x11&@\x9e\xf2s\xeay\"e\xeaj\x11M\x98\x9f\xb0[\xf8\xc0\xaeO?\xaf\xfc$\x04\xef\x9aW\xf7\xbc\x80\xd2\x1b({\xa2\xdf:\x1e.\xa2\xbc@ss\x11Yr\xb1\xc0\x1fy\x19\x16\xd6@+R\xb4\x10\x98\xf6\xd8|\x1d[M\n\xa5\x8b0{U\x0cl\xd0q\xf5\xea\x80l\xd3\xb1\x94k\xae\x8b}JXU\x9a\x16cm\xaa\xa9\xd6\xc1B\x8f:n\x1aB\xd9=oG\xe3\xc8\xbf\xc5$\xe9A\x97\x9d\x90F\x1cs\xb0a\xdb\xe5\x92}\x11\xdd\xa5\xeb\xa2\xdb={)\x88\xfc\x03\xdc\xafS8\xfeP\x1c2}\xbf\xbe\xdb\xef\xbb\xef\xd7\x9fv\x16\xe5\xffW\xe0\xab\xff\xbe\xdb\xca\xc6\x99P\xaahvM\xa3\xa8HaM\xfc\xd0X\xb3& \xb4\xb0\xab\xe6\x98\xa4\xd3\xb8\n\x96hm\xaen\xe7\xa3J/\x90\x86\x90\xf7>\xbe\x7fu|q:~s\xfc\xa7\xb3\x8f\x17-\x8a\x82\xfaQ+\x88\x00\x9e\xa0R\xb9\xa7S\xc2\xc6\xde~|\xfd\xe6\xe2\xb4M\x91\\\xefM\x08\xde\x9b\xf5v\xfe\xd3\xd9\xcf-\x9dX\n\xca^>Oo\x13\x9b\x0e\xa9\xa3b]j\xed\xabO\x8ay\x9c\\\xbb\x1c\xe0\x94\x16\x1f\xdb\x95\x87T\xd5\xc8\xdf\xf8\xd8;\x1ev\x1c\x0e\x19\xe1\xd8\xd8\n\x07 \xf5\xb7g\xafN7\x06\x07\xce\x8d\x06GUi\x99N\x99c\xfa\x18\xea\xdc\x1fy\xbcJ\xee]\xaa\xfb\xab\x84\x0f5\x13\xb1C\xd0\xc6\xd9\xabO#\xfd\xad\x1c\xa5|\xd9\xce\xd7\xcbe\x94\xdd\xe1\x94o\xe7\x91\xc8\x0f\xc4\x7f\xc4\xf99_U\x11\x86}\x9de,)~D<\xd5\xdf\xb8\x98-u\xec<\xdd\xfbUO\x1d\x82\x95\x13de`Z\x97\xe5\x92\xda\xe8T\xa5\x9aS\x07\xf6\xe8Z#\x13\xda\xf2\x86\x04\xb4\xba\xb6&\xc9\x80S\xdd\xb50\xd6\xa5 {\xb4\xd6\x8brw'i\xb6\x8c\x16\xf1_\x19\xba{\x05\xd2\xfe\x1d\xfb\xd6wp\xae\xef\xe0\x00\xcb\xeb\xaf\xf9w 9\xcc\x1a\x0eu\xda\x8d\xa5\xdd\xab.\xa0\xd7SX\xe9\xa6\xb1pT\xff\xe9\x8e\x9e\xd3>kj\xef\x1a\xea\xe5\"0\xa6jo\x1bA\x94\xbaK\x06\xb6\xfc\xdb\x81\x1d\xdfBf\xc3c\xd3\xb8Hk\x18\xd2\x89\x94T\xf2\xcf\xdeAG\xd7/N\xa5\x8c\xa1\xd0jt9\xc0\x14\xf3\xe6d~\x12\x8c\xfa\x97!$\xa3\xc1%zc\xfa&EoTm\xab\xbb!\xd6\x13\xcd\xda\xc2\xa90\x14\xd7\x90#\x16\xfec\xd2\xc8Y\xa4\x0e\xac\xf7\xf8]\xfd\xaf\xce\xb0zb\xd2\x0c\xa9\x96x\x16\xf8^\\\xb0,\xc2\xa5\xb0\xc9\x9b\xe1K\xd9\x06o\xc7\x8a\x9b\xa1\xf4\xfd\xac\x87\x0dk\xc9\xc71{\xdaa\x8d\x9f\xddp\x8a\x8dsI\x8d\xb0\"\xf6\xfa\xab\xe5\x1a=\xb9\x1ce\x97f\xfe\xbdX.b\x93\xa4\x06\xaa\x1f#*Q(\xa1\xc8)NM^\xa5\x1a\x108\xb1[oA\x83 \xedx\xd3\xd9r_\xc4AB?\xe6*\x84\x93\x19oE\x913\xf3=\xbdi4\xc0\xd1R!?\xccb\x02\xa6X\x86Y\x97\xda\xa0\nMr\xb0z\xa6i\xc2\x86b\xdc\x9d\x83^\x878\xb0\x0d\xba\x8f\xa86\x98\x1f;\x08\x03\xeb\xe0\x1e\xd5\x05\xcb\x7f\x05\xfe\xe9\x97VE\xe4xk\xea^\xbe\xdb,Z\x1d+\xfdBC\xee\xe8\x7fH\x85\xc5\xde\xaf\xcb:.Paa\x99\x94\xaf\xcb\xa2\x81Y\x94\xcb\xa2\xbd\xfd\x03Z\x97AD_\xfd\xa7.\xe3\x97\xde\x97$:\xadHw\x81X\x95\xec\x99%\x91,yj\x954i),!c!\x9b\xd9\xb3\xba\x9eH\xb5\xc6\xc0x?\x93\xefwI\x84j\x08S\xfaK\xd8\xb9\xd4\xf4,\x99\xa6g\xd1\xac\x0f\xb3\x10fJ\x06?\x7f\x7fz\xd2M\xefQ\xe6G\xd0\xa2\")\x81\x1b\xa3\xe9\xa2Z\x04-Ru\xa5\x08\xe8\xa3V\n\x01\xc7`>~x\xd3m,\xb2\xb3u\xb6\xd0\xfb\"\xc4\xf6\x86\xce\xfep~\xf6n\xa3\xde\xfe\x92\xa7\xa6\xb4u\x96MY\xc6\xa6\x9a\xee%\xe8\xdc\xff\x87\xd3\xf3\xb37\x7f<}\xb5\xc1\x18P\xf8\xc9X\x9e.n\xd8\xd4\xbb|\xf8\xb1\x8c\xcf?\xfep\xf1\xe1tc\xad\x0c\xad\x8fI\x84\x13\xbd]\x98J\x13\xdab\xde\xa2\xa4Qs=__\x15\x193e>]\xad\x14\x04\x0ehd\xdd\xa1\xf0\xfe\xf8\xc3\xf1\xdb\x87\x9a:\x9f\x9d{\xe6Y\xb4|\x17- \xd0\xc4U\x85\xd7\x84\xd6o]\x15\xdb\x85y\x13\xcc1\x9cg/\xce\xff\xe7\x92\x88 7!tB\xea\xbd\xf0T\xe6\xe7\xcf\xfc$\x9d\"\xd1\xda\x8a\x05g\x0dG\xb0\x16\xaa\x88$Z2\xa17\xeby\xb0\xad\xde\xc6\x89|\xc7?\xde\x11\x05\xaa\x1d\x1f\xf3\xf7\x97_\xc4\xf61\xca\xe9\xea\x02\x8e\xc0\xc3\x19\x8d?/\x17\x1e\x0c\xe5/Z\x7f\xa0i\xf7\x18\xe6\xf3F\xeb$7\xd6dA\x08#\x0f\xa1\xc9\n\x86Wv\x93\x10f\x97A\x08yg\xac9}\xfb\xfe\xe2O\x02w\xc6\xaf\xdf\x9d\xbc\xf9x\xfe\xba\x95\xb0l\x84EoY1O\x89\x1a\x0f\x83Kq2Y\xac\xa7\xect\xb9*\xee\xfe\xc8Ak\xf3-\xc2\x1cx+.y\x1ee\xc2v\x1be\x89\xef\xfd\x1ce \x06\x1el\x02\x08L\xd0\xe4\"I\x0b\xb8f \x17^\x19D\x80c\xfb\x1f\xec\xae\x87\x16d6\n\xe4\x18\x1d\xd7\x81#\x0f\xb3\xe8c\x04@\xce\xd9g/\x84\x9c\xaf\xfd\xba}\xed\xffx\xfc\xe6uE3\xce\x7f\xbd\xe5\x8e\xf3\xb3\xe3\xf3=z\xad5\x05YGH\x04\x84\xfa\x9f0\"\xe7\xb4\xe3\xd1\xe7\xe5\xe2Q\xdc+X^\xf8\xb1\xd8\xde\x1c\x0d\xd6K\x96\x8f\xc5\x96\xa4\xbe\xe4{x\xd2\xe3\x9ca\xc4\xa1\xf3s\x8c\xf3\x8bd\xcc\x10ArB\x18\xb1\x86!6\xdfcl4]c\xb7_R\xd3\xefx\xfb1S\xd6\x8f\x1a\xed\x10m\x95\x8e\x15\x94\x01\x95K\xecV\x18\"\x8e\xb0\x9bh\x11\xf3\xc9\xbd\xe7\xad\xa3\x91\xfb\"\x84\xb4\x835\x18\x87FAR\xe4\xa2\xa2\xc8!(\x0b\x85Ks\xfe\xa4\xd1\x93\x1d\x15\xa5}\x7f\x08\x93\xfco\xdc%\xdavx(\x1cH\xdaq`t\xd9\x15\x07\xbaX\x03\x81\xc5F\xd6\xacCj\xdd\x12\xb0\xdf\x18\xf0\xe7\xa7\x17\x9c\x9b{\x7f\xf6\xee\xfc\xc1\xb8\xb8\xcc\x8c\x07\x035\x1e\xce.\xc3k\x9d\xde\xd2A\xc8\xd6\x0ef\xc3_\xa3\x13\x1d\xc2\x07\x8e\xc0\xd0\xea\xdb\xa0\x15\xd6\xd2dP,\x8e\xfcC\xd1V/!\xcf\xc6\xd2\x90_T\x92? \x9e\xaa\x88\x8au\xce\x19\x16U\xb5zS_\x9bP\x96g,_\xa5I\x8eY\x02\xb2\xa07g\xd1\x94\xa19\xd2\xba\xfc\xfb\xcb\x17K?\xc0\x17c\x824\\\xe3}\xb1\x1d\x8e*i\x08\x91\x8b\xdd_;(\xe4B\xc1\xae\xf7\xc3\"\xbd\x12\xda\x97iTDzPm\xbb\x8e?A\x8a\xed\x1aD\x08^\xc1>\x17\x9cr\x88\xd6\xf8\x112\xe9\x88\x95\xff\xf1\xf1\xf4\xbc\xedJ\x7f\x03\xa4\xfc\xaf\xcd\x902\xd6\x90\xb2U\xec\xf8\xaf5\xcb\x0b9\xe9\xd8\x05\xf9.\xa2\x05\x9f\xf9\xdb\x8f\x17\xc7\x17\xa7\xaf\xfe\x91 \xb0\\\x17Q\xc1\xa6\x1f\x1e\x0e\x10\x929<{\x7f\xfa\xe1\xf8\xe2\xf5\xd9\xbb\xf1\xdb\xd3\x8bc~B||0:\xd5$r9\xa4\"\x01\x92O\xec\x8e\x96\xa6F\xad,\x85\x83[\xeaz\x1eYN\xa0\xe5J(V\x0e\xb5\x0e\xae\xcf\xf3 \x080{dY\xbd\xd2\x0el\xfcI\xab\x90\x8d\x9f\x1eUX\xe2\xaa\xb7\xe0\x87ll\x9f\xaci\xd0M\x1b$\x98\x87\x87>\xc5\x9a\xb0\xa3qOL\xd9\x82I&C'\x87Y\x08\xe9e;\xde\xab\xc9<\xe8\xd6\x7f\x98\xb9\x94{\xbb\xe3T8-;?\xf9\xe9\xf4\xed\x83\xadI>\x993\xeat\xfe&*\x96\xf2s,\xd6\x11\xd5\x13\xfdTT,\x13\xca\x87/_\xb0\x9e\xbc\xb6\x1dR\x1fxc \x83s\xf1\xe6\xb2\x9e\x97$(\x7fv\xbe\xbf\xdd\xa3c\x99=\xdb'4\xdd\xf2\xb67_\xb1I\xccr\xaf\x8b\x1d\x00\xb9\x16!\xb2d\x99\xcf\xd0_?/\xb2\xf5\xa4H3\x12zZ*\xa8HK\x0f\x7fx\x08~\x82mD\x01\xdf\xdb\x98\xdbh\x08\xa9n+\xd0\xe9*\xe1\xa6\x16\x87\x15\xe7\xb8\xff\x8cV\xd8\xef\x99 \x91\x86\x85\xfb\x94\xce>\xf1\x07V\x948\xa9\xb1\xa7\x14\xf6\x93\xde*K',78\xdbU\xc9\xfd\x94\x89\xf6k\xe5S,\xafg\xc0\xaf\xd7\x98c\x8d\xb7\x82\x9f<\x99GI\xc2\x0c\x85\xdb\x0d\xd6x\x15\xe7\xab\xa80\xc35/1\x1di\xed\xd55\x11\x80\xee\xae\xed*\xf7F\xa67\xd8\xb6\xc3_\x83\xd4\xea\\\x1bWJ>s\xe6\xbeW\x97Z\xd7V(R\xf5\x08\xba\x82\x15B(|B\x92\xa9\xbd1\xa6s\xd5h\\\xc1\x1fu\xe1%x\xcez[\xd5\x88V|\xe7O1\xc6\xc1\xaa\xb1\xc9*G\xba\x8c\xd6\xcaQ{\xf0\x9c2lJ\xaa\xe8\xaa\x95\x11S\xb2\xbd\xed\xb8g\xbb\x1emo/[o\xda\xd7\x8e$\x1a\xf2\x06\xe8\xc7j\xe0\xa1\x15\xae:\x84\xcc_\x06!,\xbf\xd3^5\xc7\x86\xd7VG\xff\xc8\x93[\x00\x87\x90\xf8\xcf\xf6\x02\x7f\x16\xe0\xb5l#\xec\xd0\x94\xe1\"\x9e|\xf2#\xff\x0e\xe3\x94\x0ct\xfe\x0f\x86p\x83\xc6`\xbd$\xbdmm\x0dk9\x1b\xc2\xd0\xc2\xb12\x19N\xd8-\xcc\x83\x1e'{\xbb\xfct\xe2\x7f\x0czi\"\x8578\x84\xab\x10\xbb\x8b\xfc\xb8\xb7J\xf3B\xeeB$5\x03d>&\xbdh:=\xbdaI\xf1&\xce\x0b\x96\xb0\x0c\\\x01\x0b\xb5\x06P\xdb=\xe9\xc5K\xde\xe39\x86S\xcdU\xd0c\xf7\xd4&\xfa\x18|tt\xe3\x07\xca\xef\xea\xa6\x87\xf6\x88t\xa7\xa1\xab\x10\xb6\xc4\xc8y_^\x9ad,\x9a\xde\xa1\x1d\xc2d\x1e%\xd7\xcc\x838\x81\x85\xef\x89 \xaf\x1e_>\xf7\x88\xf2^\xb4Z\xb1dz2\x8f\x17S_\xfb*\xe8\xd9-\xb7\xe1p\xde\xcb\xd82\xbda\xa21\x91 \xa7\xdc\xa7\x06\xce\xd6\x16\xb5a|\xac\xb8\x88\x97,]\x17\x1aF\x84\xd0\xaf\x1f\xb8\xfa\xd1g}?\x84\x95q\x06pZ=\x84i\xd5\x04\xfe\xf5\xedq2\x1bM\xebh:\xea\x08\xc2\xcd\x9f\x9b!\xb0v\xb2\xd9\x18\xc9\xb5\xb5kBQ\x02\xb2\xeb\xb6\x8e[\xa0\xb7)\xb3\xb3\xfb\x94dvv\xfb\x8f\xef\xc3\xe2`\xb2\x10\xa4\x95\xa9_\x88|\x1b:\x9b#\xed\xedJK\x08[\xf1\x82\x91\xa2{3;\xa5\x98\xf8\x82\xf3\xc2\xa8\x05\xe3b\x92\xb4\xa4\xe5\xec\xc32\xce7\x8cs[\x8fu\xffd\xef[\x02\xda\x17\xba\xe5\xc0!l\xb9\xcc\xb9w\xfb\xbf\xa4Q\x8e>\x1eY\xa7\x8b\xa5d+\xf3\"\x9c%\x1d\xa1\xc5]\xa8\x8f\x89\xe1\xd40j\x8aw2\x9a\x13\xd8\xe3\x81\xccOC\x88\\\xb5\xa112\x85zn\xa4\xb3}1J/\xfd\x88\xd0\x10\x98\x8f\xd0\x0e\xa2\x8a\xc2Y\xb7=\x8a\xb3ztF\x9e\x0c$\xa3\x1e\xdb\xe0K=x\xeb\xb7\xeeM\xd3\xa4\xda7%`\xd5N\xf0\xf3\x00c\xfav\xd0\x80\xab'\xf3=\xce\x15\xcb\xc8\x1b\x89\x88\xd7 \xd2'\\\xb6exq\x918\xc2^\nM\xc0\xb7R_\x84\xc9\x8e\xe5\xff\x98\x0d\x87\x8b\xdb\x9b\xa1Q5\xe9\xc1>}\xca>1\xe5j\xa9R\xd83St\xca\xfc\x15\xe6\xa1,\xc4\xf0\xa7\xfd.g2\xba\x1f\xe4\xd4\xc9\xbc\x15\xa1d\xa9TP\xf5\x8dX\nb\\\x84\xdf\x19\x84(\xb2\xa3\xa7|\x8aQ\xe2\x82@Jb\xa1\x90\xdaa\x07\x06!J\xe9\xecy\x99o\x12\xc5\xbe\xed\xed\x05\xbc\x80\xc9s\xd7\x81\xc2%\xa4\xb5_\x8c\x16\x97\x0e\x82\xcc\x05w\xc2y\x81O\x01{\x995I\xc7\\\xa6_\x8d\xa6\x0e\xe9XO\xaf\xcd\xbb\xe1\xc2C\xee\xdf\x840\x0da\xc5\x99{QA\x98r\xceQ\x80\xb9\xe1\x9c\xfc\x0d\x0c!\xe6c\xc6@\x17\xfc\xcd\xe8\x92\x9f\xceT\xf8!\xebM\xe6\xaf\xb0\x83y \x00\xc6\x87\xf7\x9d\xfb\x13\xb5>\xf7E\xc2\xbd\xfdN\xbc\x1bq\x14{\xe31\x9a\xb9\x8e\xc7b\xaf\xe0\x9e\xe0\x8c\x88\xfc\xc0\x86z{V\x9cZ\x12\x19\xa2\\Z\xa1\x12V1Zb\x1a\xc3\xbf\x01\x95\xd7\xa3\x82\x0b\xf7\x1b\x9a\xb5k\xf4\xc9\xe4\xc5\xd261\xab9\x10\x16C\x95\x9c0\xc4\x0d\xc1\xab\x9b\xe2\xb6\xc5\x8f\xc10\x94\\&E\xb3\x07B\x06p\x9b\xf7\x7f\xf5\x1d\x8b\x9dv\x81\xc7/lN\x1cBQ7\xa1\xc8Q\x17\xcd>\xb3\xc9\xba`\xf2N\x0b_ \xfb\x81?\xe4ir\xbeb\x13\xed\x95\xfc\xe9\nJ\x11\xfb\x89\xbfO\x862\xe7%\x83=\x87\xa3<\x91\xecX\xad\xc5/c\x0b\\\x9bL\xa3\x0cU\xa9\xec\xf3\x15\x9bH\x07\x05R\x1aj\xc4VfX\xf6TL{(L\xd1rv\x91rx\xcbz\x89^\xc55\xa1\x90Z\xa9_c655\xa1\xa9\x1b\x0c+\xc71\x14 #\xcc\xe5\x04\x11\xbc\x80\xe29D\xdb\xdb\x01\xc4\xa3\xe8\xb2\x96&$\"\x0e\x08\x13d1\x82*N\x14\x06\x7f\xa8_\xcf\x9dD\x939\xa3\\\x8c\x94\xd4\x11\x8f\xfa\x0e\x07\xa5\xdc\x0eP\xbf\x0e\xab;\xce\x80\xb2K\xe0\x8f_\x8f\xb9I\xe5\xacq\xf2\xe9F\x7f9\x1a{\x05\xbd\x7f\xc9\xd8\x8c\xa3<\xdeb\xf3\xedh\xcc\xd2W\xa3\n\x81]n\xc2\x80\x87\xd4F\x7fh\\!\xcd\xb8\x94\x0c\xda[\xa4\xd7\xb2k\xe1\xb6\xea\x9b\x1a\xdc\xfah-J\xb5\xc1h\xcb\xb0\x8c\xf7\x1f/\xc3`\xc7\xd2\xae\xd0\x8aRcP\x95\xbf?]\xef\xa2c\xb8\xd1c\xbd\x9d\xa4\xcbU\x9a`VJ\x0b\x04e\x94\xb6\xf3\"\xcd\x1c\xd6\x01Z\xa0b\xbb\x02\xde\xaa\xd5z\xb1\xeb\x08\xab\xa6\x8c%S\x96\xd9\xa5\xb9\x0c\x1c\xfe\x89\xbd\x8dV+6=I\x93\"\x8a\x13\xaa\xea\xa2\xdc\xbeK\xb6L\xe3\xbf\xb2\xc0\x8fDvr\x91>:F\x1e\xdcJ\xa2\xe5T\x0bfiZ\xbcN\xf8\xda8\x9d\xd9\xf4\x99\x0d\x810\x1c\xe7\x0f1\xf8\xa19\xd0\xdc\x1e\xe8\x02\xc7J7)\xa05\x84\xb5\xfdYd\xdd\x88\x80\xc5\xcb\xba=\xd5Z/\x9a6r\xf6\x02\x0d\xd9(\xc2\xd9\xe2\xf4\x05\xbf\xa8\xe3\x17Tk\xeft\xfe\x02d\xe58\xf3\xfe\x94bf\xd0=\xea7\xb2\xf1uTD\xfa'p\x04\xff$0\xb0\x81y\xbb\xe6\xcc\xdbcj\xbe\xd7$[\x17\xcb\x12\xda\xe5\x0cK\xac\xd6\xd6\xaa5\xca\x01\x11?1\x0b\x16\xb2\xc0\xead\"\x0b\xac>f\xb2\xe0\xc0,X\xe1\xd2\x99\x97\xe4S\xac\xbe2\xde\xcee#O\x9eXC\xbd\x11\xe2\xffc\xf3\xfa|)?y\xfa\xf8\x19\xcd\xe6^\xff\xbal._W+\x1d\xb4C\xe5k\x13\x81\x06\xa3l \x8eR\xa7\"Y=\x9a&\xb9\xad*\xd4\xaf\x18\xf2\x8aM\x12\x1a\xefL\xda\xe1L\xcc\x02?\xeb\x952\xb3\x8a\xe8\xbf\xae\x19\x9594\xe7n\x0d)\x90:\x04\xfd\xd1F:\xab\x19\x06%r\x98\x8b\xda\xdbQ\xfb\xdc?\xb1\xbb!xb\x1f{\xf4A\xa0?\x9224r\xec\xd4#\x07>-\xf5\xd7\"\xee\xc7\xa9Hl\xcf\xe9\x91a\xbf\xf67\xf4u\x0fdn\xf3U\x96\xaer\xf9\xf7$M\n\xf6\xb9h\x81#\xb4\xc2\xf2\xebe\x10\x12\xe1\xd8\xcbb\x7f\xd5+\x89\x9dK9\x8d\x98KC-\x95\x9c\xc2\x0d\x1fp\xc2&\x85\x16\xdb\xa4-\x80\xeb\x8dL\x8eo\x9a_\x7fE31\xe6S\xd1'\xd5\xa3PD?\xbe\x96\xd1\ns\xd0_\xa4\xfc\x04@\xdb\xe7v\xa9\xc1h\xb0}\x9d\xf1\xde\x9a\xba\xc7\xd4\x1f\xf7\x9a|\x0d\xfc\xa4\x8c\xf1D\x146d\xf6Ij7\xee\x0d\xd4d#J\xb2\x01\x15\xf9\xadP\x107t\x1f\x96rl@5\xeeC1Z\xa8\xc5M\xef}\x96\xde\xc4\x9c\x97\xef\xd0\x18 j\xa6Y+j\x82\xe0\xb16\xa3Qn\xf2t_:\xdf@\x97Zh\xd2W\xb1\x81`h$\x0ci\xb4\xf4j\x8c(]r\xc6)\xe7\x8c\x1b=\xa7by\xd9JS&\xd2\xba'\x1670\xc9(\xbd\x0c!\xc3\x7f\x19\x99\x88\xa6i6c\xbc\xacp\xb0\x9f\xc44\x85\xcdc\x830\xde,\xb1C\x9d0\xb8x\x1c\xf58(\x82\x9b|\xeb\xa4\xff>\x14C\xa4\xac\xc5\xda8\xb6\xf6\x93\xe2\x8a\x03'\x12Z~\x8c\xb2G\xa3^\x13=\xb5\xa9J\xb1)U\x11\x14e\xa2\x90\xfb\xe7x\xb1\xf8\xc0&,\xbeA\xa1%o 2&\x81id%\xf9\xa3M\xb8\xda\xbd\x9b\xd2\xd4\xafM\xa4\xa7#y\xdc\x944\xaa\xcb\x06\x0e\xd8e\x1d7\x14 \x8a\xa4\xd3\x96\xa6\xee\x8b8A\x18\xb9n\xdc\xf4\xa7@a#\x0e\xc1\xcb\xd2\xb4p\xdd\\\xa8\xa7\x9d\xa5\xdb\xd8\xec\xc1A\xfa\x1a\xc8\xde\xd7P\x97B\xc9\xedn\xc5c\x03\x8db\xa9\xaaY\x08\xde\xf1j\xe55\xcc}\xde\xabl/x\x7f\xbek\xe6q\x88\xb7\xa2\x81\xc5\xcc\xb4\x1aUTJ\xb3$Z\x12z\x8e\x16\x90{\xd3\xf8\xc6\x92\xe5\xd5\x93\x17w\x0b\xd6\x14\x14i\x15M\xa7\xe8B\xee\x0d\xd8\xb2\x01k'\xe9\"\xcd\x86\xe0\xfd\xff\xa2(r\xe4\xbd\xb3W0\x04\xef\xff\xf9\xdf\xff\xb7\xff\x03<\xf7\xf9\xea\xc5\x9e\x00\\\x08\xdeI\xe9\xa8.\xd7\x96/\x0c\xe6\xbf>\x84\x02\x8e\xc0\xe38\x0f%\xb5\xf0`\xc8\x17\xd1\x0b!g\x0c\x8a9+\xbd\xe3=+\xe4w}b\xb7\xad\xca(\xb5&\xdd\x18f\xb9B[>\xab\xd8o!oW\xdcx\x9c\x7f`\xd1\xa4h\x17.\x9a\x0dI\xf5\xa7\xf3\xd1\xa5\x9e\xf2\x08k\xa7:\xd0\xc2\xdf&N\xfe6i<\xad\x92{\xf0\xb7\xd0*\xd5\xd1'RB\x9eHI+\x9f\x0b\xdd\x89\xb9z6%\xea\xea\xa9\xae\x02:\x9cI\xea\xe9 \xe1&n\x1a\xdcI\xc2\xc5\x1bwz\xda\xd2\xbd\xa8Dl\x01\xa3\x06\x0d\xa8Y\xb5\xed\xde\x1dZM\xfdJ\x06\x95\x91\xb7\x83Yy;\x88\x96\xa9\xe2v0\x85\x17\xc0\x9eC\xba\xbd\x1d \xd7Y\xbb\x1dt1\xb0\xa0\xdf.\xe9h\x9b9 \xd7\xc9TP\xb6XOG\xc5\x87\xea\"\x92\xe36\x89G:d;VL=\xc27\xbb\xc0c\xc6\x8d\x1f\x8e\x99Q\xd4\xddPgW0\xb4\x94\xc6\xf6\x19\x9d\x86\x10\x9b@\x8ag\xe0\x97\xc6[U\xe2\xbf4\x90A+\x13v\x0b\x17w+v*\x12x\xbdcl\n\x11\x88\x0fB(R\x981\x0e\xfd\xa8:#z\xf0s\x94\xc3u|\xc3\x12\x880\xd5\x8d\xaf\x99\x04\xa5\xfcPY'BM>\xe5\xe7\x89q\xe1\x9aZA08\xd6 \xa3-3*\x84\\U\xce\x8b\xc5\xbc]\xe4(\xb0\x1b\xfe\xf3N\xb1\x9f>\xfa\x14\xe0\xcf[?\xc2\x1f\xb7\x82[\xf3\x99\x1f\xf4\x16\xe9\xb5\x0c\xeeR\x9d\x86\xb38\x99j\xc7\x1e\xe70$\xb3Q\x0e\xa0\xd3%\xa1\xdb|_Nx\x08\x89\xff\xe4\x89i\xc8W\xe9\x8c\xeb\x97\x03]\xba\xa4\xaf'\xdc\x03\x99G9^\xb3\x0bG\x89w\xe9\x94\xe5C\x18\xddX\x12\xc2:\x04\xe1V\xa4\x90\xd5w\x10T4\xdb\x16\xb1\x93\x1c'\x838\x94\xd7x\n$x\np\xc4Jz\xf2,\x80\xa1\x8a_\x87\xb1\x89\x9d:\xee\x05\xca\x11\x92\xfd\xec)\xa4\xc6hl[\xfd\xc6\x03\xd0\x81\x8e\x8dwR4,\x0b\xa1U\xd1\x1b4\xb8@\xd26[g\xd0\x84\x1b\xec7\xf1\\\xf5Q\xcbKC\x93\xceO\xd1b\x8cz[\xc4K\xa2\xc4SE;\x8bt\x12-<\xbb\x06[F\xf1\xc2~\xbdL\x93bn\xbfN\xd6\xcb+F\x8ck\x15\xe5\xf9m\x9aM\xed\x92\x8c\xef\x07\xfbu\xce\xa2lBtP0b0\x9c\xef'\xde\x923^gD\x03\xb7\x8c}\xaak`\xdb\x94tN.W\\N*v\xb6\xfe\xab\xce\xb5\x92\xac\xae\xce\xe5\x16p\x04[[\xd9Hp\xce\x98b\x8e\xcf4\xcaX$+T\xe3}p\xfc\x12\xa9\x03\xcf'\\\x8c|\xc3f\xc5\xd0\x0c\xe1U\xabq\x91\xae\xac\n\x19\x9be,\x9f\x8b\n\xb8m\xf3\xb6}\x98\xf5\xac~Q:\xf8\x1c\x9aE\x17)\xfaK\xf7\xeejm\xb4\xee\xc3\xec\xdb\xe1\xe4R\x83\xfa\x83\xc7\xa6u\xbatM\xb7B\xc1E]\xd4W\x9c\x82\xb7\x86\xd6f\xbdY\x9c\xe5\x05\xaa\xf4\xddZ\x1b\x94\x9f\x12\x112\x06\xd3ic}\xferO\x8aS\x1cC/\xeeV\xd5\x89s\x93\xc6S_\xbc\xc7\xa5\x83\xc3v\x0f\x15@`k\xeaX\x8bU\xd2V\xc5T\xfbvW\xf9r\xae\xba\x15\x82{\"a]918\xe2\xc4]\x04\xd3AMy}j\x15\xde\x04F0\xa6o\xa0\xdc\xdd(\x07}\x1f\xcbz\xb3t\xb2\xce\xcds\x86v^~\xf0\xdd\x1f%\xf1\x12c\xdb\xbf.d\x90\xfb\x93t\x9d\x104\xf6*\xcd\xa6,{\xbd\x8c\xae\xd9\xd9\xba@\x06\xbf\xa1\xca\xf9\"\x9e\x10$Y\xab\xf1s<\xa5\x8e\x95\xab\xf4\xf3\x8f\x0b\xf6\xd9Y\xf0\xfb,]\xaf\xc8\xd2\xb3l\x1a'\xd1\xc2Qa\x92.\xd6K\xd7\xdcDan\x17\xcc\xc8\xa1\xcc\xc48n\xe9\x92\xf7i\x1e\x17\xf1\x0d1{^z>\xcf\xe2\xe4\x13]\xf6\x8e]G\xee/1\\\xb1]t\x9d\xc5\xd3\x0f\xd4Xd\xc1iB\x1c\xc5\xb2\xec|\x15%\xee\xc2\"\xca\x08X\xf1\xd2\x13\x84WS\x99\xb3WQ\xec\xeeX\x96\xd3}\xcf\xd2\xa4\xf8\x99\xc5\xd7s\xa2l\x11'\xecd\x11-\x89\xb5\xe7E?9>KW\xd1$.\xee\x88\x02\x1a\xdci\xb6\x9aG\x14\xaa\x14\xd1\xd5y\xfcWb\xedn\xe3izK|\xf0\xd7\xd7\xc9\x94\xc2\xae\xbf\xa6\xe9\x92\x98z\xbcX\x9c\xb9\xc6:[\xa4\xe9\xd4Y\xca\xb9\xd9\x86\xc2,\xfd\xc4^E\xf9<\xca\xb2\xa8\xb1B:\x9b\x91\xdb^\xd4x\x1b\x17,[\xc4\xcb\xd8Y\xa3e\x0c%A(\xcb\xbe\xda\x17p#\xefgv\xf5).\xbc\x10\xbce\xce\xff}\x9b\xfe\x95\xffw\xe6i\x9a\x1e\xa9\x89\xf9\xc4\xeer?\xeb\xe2\xee\x9d\xdauh\xa7\xe3Q\xeba\x0e\x9a:\x11\x13WL\xe6Qv\\\xf8\xfd\xa0W\xa4\x1f\xb90+5\x99\xbc,__ \xc3\x0b\x7f@\xd9\xa4\xa3!\xe8%gf\xf4\xd0\x97X\xa6\xa98\x8d{\xca\xd8\xa2\xf1q\xfe1\x89\x8b\x05\xcb\xf3w\x92i7\xdcs\xf3y\x9a\x15\xf3(\x99*\xad\xd5\xe9\xe7U\x94\xe4\"'\xa3=\xc5\xabh\xf2\xe9:K\xd7|\x8f\xd3\x00\xa8j\x1c\x17E4\x99/\x19Ev\xed\xda'\xb4\xaccW\xc4#\xa4KEA\x8d\xd3\xe4\x7fnR\xf9O]*\x7f`+\x16\x15C*\x8d)\xa1:\xb1;i\x87\xdd\xfd\xc7\xdeiD\x92\xc29F\x81\xa5\x8eC\xba^\xe9\\\x98\xc76W*W\xb6\xfb\xd0~H\x8b\x82\x93\xc2\xa6\x01\x8a:\x9d\x86)\xaav\x1a\xac\xa8z\x8f!\x0b\xf1\xa9i\xc0\xbcF\xa7\xe1\xf2\x8a\x9d\x06\xcb+\xdec\xa8\x1f\xc4y\xd84V\xac\xd2i\xb0X\xb3\xd3h\xb1\xe6=\x86\x8bbg\xd3`/\xd2U\xa7\xa1^\xa4\xabN\x03\xbdHW\x1b\x0d\x93\xf3&\xae\x11\xf2\xb2\x96Ny\x95?FY\x1c5\x11\xca&\xfeG\xafC3\"\xeaib\x87\xd4\xc3[\xf91Z\xc6\x8b\xbb\xae\xf3O\xd7\x05o\xd8\x05\x02Y\xdc\xb2D\xb2V\x0b\xacd\xad\x86\xe5\xf9\x8e\xfe\xe5P\x15\xc4\xf8\xf6\x9b\x84\xaa\xc4\x7fj\x06\xe3K\x85a\xd0`\x1f\xe3\x02\xee\x89\xf0\x80O\xfb\x96\x83\xbc4 \xc2rv\x0b\x1f\xd8\xf5\xe9\xe7\x95\xef\xfd\xe7\xc8\x83m\xc8z\xc7\x17\x17\x1f^\xff\xf0\xf1\xe2t\xfc\xee\xf8\xed\xe9\xf8\xfc\xe2\xf8\xc3\xc5\xf8\xe4\xa7\xe3\x0f\xb0\x0d\xde%]\xa9,\xfe\xdd\xbfXi\xcd\"\"\x1e\xfbZ\x06\x80(_\x96w\xa5\xb9\xf3\xaetkkmG`\xc7\x00\x81\x11\xf1\x9e\xcb\xfd2\xfb\x1a\x1a\xb4\xf9\xeb\x11\xbb\xc4\xb0\xaf\xa8\xdd\x85!\xf8\x91\xf6\xa6\x16H\x9bNs\xdc\xc5\x9e\x10\xf3\x84\xcc\xa3\xfc\x874]\xb0(\x11:\x80\xef\xbf\x87\xad\xaa\xe8\xddz\xc9\xb2xR\x16\xc5\xf9\xbb\xe8\x1dg\xfeT\x05%\xce\x99\x15\x0bx\x01\x83\xb2\xd6\xd9\x0d\xcb\x16i4eS\xab\xaf\x01\xa9\xc0\x03\x89<\x13[\x1f\x87V\xcbo\xa3\xec\xd3z\xf5c\x9a\xbd~\xd5\xaaJ\x13\xd3\xcez\xaf_\x8d\xeb\x88\xc0q\xe0\x90cHj\x85\xb4\xae#@\xce\x8a\xe3\xa2\xc8\xe2\xabu\xc1\xac>\x1d\x8c.f\x9b(\xbf\xf2\x89\xee\x89\xe0\xefM3\xfd\x90\xa6m\xd7\x95\xe5T?\x9c\x9d]\xd8\x93\xfd\xb7C\xcf\xfb\xb7\x0d\xe6i\xf4HB\xd7\x9a&\xd1uXK\xdcK\xf4k\xccT\xed\x8c\x0ePV\xea?\xbc\xfc\xe6\x1f\xc5,'\xf6\xd7Q\xad\xc2\x08U\xc8\xb4Q\x15j ]\x82\x0bF\x8b\x14.\x1f\xa5~\xd0\xf3huc\xe9\x07\xd6\x8b\x14tl\xb3\x0e\xf5\x94\xf6\xff\xe6n\xfc\xf2E\xbcl\xd8@\xfdRE\x1e\xab5\x86!\xfe\xad\x90\xbb\x93\xbe\xb2\xc4\x9d8?Y\xe7E\xba\xac\x16\x15\x01X\x91\x0d\xbc\xc1\x1a\xa2\xf8V\xf5 \x01\xba\xc1*\x1b\xbdtXl9\xc4\\RL\x15{\xa7\xc00#\xc6`<\xaf\x05\xd1\x11\x80ndk\x880\x92\xb6\xe0[a\xe1[\xd1\x8co\xa4\x1f!h8\x94\xf60cW\x9c&T\xbeD\xf5\xf0\xa6\xe2@hw]\x06~l\x913GgP\"x\x8a\xee\xbd\xba\x02\\\x98}\x89\xabb\x13pb\xb9\xe8\xeeT\x9b|\x02y\xf11/\xed>\xd0$Q\x81\xe8\x8eo\x8cK:@\xabzZ\x06\x0e\x9a\xbdQZ\xdfq4\x93\xa4?k\xfb\xa3|\x15M\x1c{\xb5\xfa\xea\xc8\xa0~\xef\xce\xfd\xb5\xc8\xa2\x877\xbc\xe8.O\xed\xe8\xb4\xd3\x8eN\xac\xf6}l:P\xa9\x8c\x8c\xf7\xd8\xa5s\xc4\x8e+|\x9b0\x08Hc\xd0}\x82\x14\x14\x06^Lz\xdaV\xd2(\x86\xdcA\x1d\xf7\xa0\x8b\x0886a.\xf3\x00\xf8\x8a& P\x89\x84\x15\xfaXmH\x15%\xa4\x1a\xc7V\xc7\xf4Mh\x145\x8c\xee==\xf0\xc9\xb71%r\x9e|\xa5\x85\x7fgJ\x94\x06\x9c\xad\nU\xf0\xe3\x06r\x84\x1d\xdb\x04\xc2\xbd\xd9\xab\xa3U' \xee\xddj\x1f\xabG\xc0F1\xb2\xd3\x03\x0c\xfb\x8b\x7f{\x0e\x9fc1J{a\x8d\x93\x9d8d\xc5\x97\xf4>\x12\x17\xe2m\xc8R\xfer\xc8f\"9\xe77\xcaf\x03*lq\xe2\xef\x0e\x1c\x11\xc6\xcdp\xeb2\xcf\x97\xd9\xca\xba\x92\xdc\xb6\x06\xa4\x91lnq\xb1x\xd7\x8bV\xccY\x9a\xa25\xcd\xebW\x95\x0dv\xcd\xdci\xc5\x92i\x9c\\\x7fD\xa3\"\n]\xda\xbe\xc1\xe5\xb7\xb1\xc6\xf0.\x10w\xed\xf2\xcaU\x06C \xf1\x04\xc3\x9aW\xf6B\x94\xfdL\xc5\xb1|\xff=(\x03>\x89\x98>\xeb-\xd7\x8b\"^-\xa8\xb4P\x15\x1e8\xc5=\x82X\xde\x94\xd9\xd8\"\xcc\x81B\x1b(\xf5\xd2UaGEu\xde\xba\xa3\xbbA&\xc4d\xdd\xe5 \xa9\xbb\x1cd#AhG\xe9\xe5\xff\xcb\xde\xbbv\xc7\x8d\x1b\x0d\xc2\xdf\xf3+J\xcc\xacCF4\xad\x8b\xc7c\xb7G\xd1\xeb\xb1\xe5\x8d\xb3\xe3\xcbZ\x9e\xe4\xeci+Z\xaa\x1b\xdd\xcd\x11\x9bdH\xb6de\xac\xe7\xb7\xbf\x07\x85\x0bA\x12 \xc0\xb6<\x93d\x1f|\xb0\xd5$\x88K\xa1P\xa8*\xd4\xe5\xac\x93\xc0\xa4\xd5\x92\xd2B\xdcn\xc1L\x89X\xd0\xcd\x0e\xb1\x8b\xa7\xf9\x197\xa4\xd2\x93\x02\xacPaLU2\xc7[\xf1\x0d\x9e\"\xed\xe7Gj\x82xQ:\x1a\x13\x137\"A\xc3\xa6\xde\x02O{r\xda\x01R\x907\xb3@&\xa0l\xdb!t\x87\xba\xa3#\xac\xb1\xe2k\xe2\xc7\xd3\xbd\xee\x17F\xcc\x12\x7f\xe9\x05\xef%\xa9\xff\x9cW5\x06Mq8\x9f\x84<\xc1b\x19\x99\xecA\xf3\x8c\xd9\x01Nz\xd6\x8c\xe2\x8d~\xb3q_xv\xb8\xf4\x97k\xf0\xc8]\xe7\x9b\xac\xfe\x1b\xeb\xcba\"\xe2\xa0U\xf6\xb6\x8e\xdd\xed\x8c\xbf\x07>QZ$\xc8\x9c1*\xc9\x92:\x89Sn\xb9*\x08\x07et2\x984!?\xf1\xbdI\x8f\xc9\x12\x8eU\xecs\x83\xaeP\xc2\x7fX\xcc\x17EXw\x8d%\x8e\xa20@\xf2\x10\xceoy\xe7\xec\"\xcf|~\xeb\x0e\x04\xdf\x85\xba\x9b\xd8\x0eP\xcd\xb9\xe3*.|\x1ec\xcb\x18\xd5\xe0\x96\x85\xaa5\xd9\xf9_\xc7\xd5kN\xbc'\x92\xa0\xd7\x0dA\xefch\xa8\xa6\x8d\xa8\xf9\x8eW\x13r\x1eu\x16\x99\xbe\xdc\xa0\xc9\xcfF\xb7\x8d\xc3\xee^e\xc1\xa3\xf1\xd3\xe7\xcc!\xc8\xb6\xc6\x06/\x0f\x15\x13\x87\xfa,\xf2\xaaf\xa0\xd7\xec-\xd3\xc6bVmZD\xb2n\xb1\xd6\xc8\x0cY\xe7\xa1e\"\xd6\xfe\\Y4{_Je8\xd2-\xb1\xbe\xdf\xd2N8\xc4\xde.\x99\x7f\xb6\x8da \xd9q\xaf\x19A\x08%Ztex\xb6i*42\xd3N\x0f\xbb\x8e\x07\x9amW\xa5]\x0c\xd5\x15?D>\x13\xaf\x17)G\xfe\xfa\xaaLm7\xb0m\xae\xe7u\x19O\xfbx\xbf\x1b\x91\x80g\xcdy\xd45q\xdc\xf0\xe7\xdd\xfb\x8c\x8a;:\xd3\x0e\x809<3\xdewx\x13 \x19\x93N<==\xb4\x96m\xd6\xab\xf7\x11\xcd\xfb<\x1c\x97\x91\x8fxz\xa2}\x91/\x8f\xee\x88\x98\xc7\x00\xf1\xd3\x0e^J\xb9\xccc\xd9\x92Zi\x8e\x86\xf4b\x86\xb3\x88)\xb1h\x03z\xb9S\xeb:\x84A\xfc4\xa1:z!=D\x11|\x8bI%\xbb\x17\xc2\x0cv]\xbc@Ax\xf9\x0eU\x80\x16\x0d\xa3\xbcu\xbc\xd6\xe6nP\x0bg\xab\x85\xf2\x18\x9e\xaf\xc8\xec\x12\x03K\xf1\xc05,\xf55\xe4\x0b\xf8\xbf\xe8\xa3\x05\xbb\xe0\xfd\xdfH/\x9a\x82Q\xb1\x03\x8a!\xb5A\xac\xf5\xf3\xe8<\xbf\xceHI \x87\xef\xed\x1f\xeeyMX\x89\x04\xd5\xc9\x13 \xf2\x10f6\xae\x98\x16MV,\xb6\xec\xc8\xb7\x1c\xc1\x86#\xdc\xab\xac&e\x16\xa72|\x8b\x8f\xc1%]<`\xc4\xac\x1a\x8cQ3p\xdd\xbb'NPf\xf5\xda\n\x95\xa5\xffF\x8dfK9\xc3&\xa4\x8c\xcb'%\x0b%(?\xea\x03\xc9g\x10\x088\x082r\x0d\x15\x9b\xae/~\xb3\x1a~\x1e\x04\x11\xe7\xb2)\xa3\x83\x87}\xd6zr\x04\x19C4\xbcr\xcb\xe7]r\xc16\xae)7\x99\xc7\x9c\x12\xba9\x89\xdb\x0b\xc3\x9d+s\x0c\x1c\xe1#\xb5G\xec\xd8\xf7\xc2\x86\x02\xb4q\\\xde^\x9c#\x00\xd1p\x8fy\x8f\xcbGk\x96\xc1\x97\xb9)w\xf3+\xd1\x92\xfb\x95\xea\xbf\x98t\x05\x86s\x16\xc9\xa1N0g\x8a\x1a\xe4l\x02\xcd\xadC7\x81,{\xf3uN\x92\xef\xbay\xd6\x94P\x17}\xd4\xfd\xf3\xdb\xd3\x0f=\xc7\x00Z\x9e\xbf}\xfd\xee\xed\xe9\xab\x0f'\x13\xd0\x88\x02'\xaf\xdf}\xf8?\x138\xe8\xbfY\x92\xfa\xc3M\xe1\xc4\xb8\xb7/~;'\x01\xdd\xe8\x11v\x83\xea\xea\xa4\xfak\x9c&s\x11\x15\n\xd1\xd6\xb0 \xf8\xbeN\"9\x05\x98@\x12\xd1\x99\x8a\xa4g\xa5\xef\x1d<\xd2'o\xec\x88\xd4\x067\xf1/\xb5=`\"x\x1f, f\xc68Y\x17\xf5\x8dD\xa4\x97\xf1\xac\xce\xcb\x1b'\x88R\x92o\x9bR\x1f;\xfa\x8d\xb1]\xe7\xd4\xa5\x90\xa7\xed\xb0l`\x90Dl\xa2\x94k8\x82<\xbcS\xd8\x9a7\x07\xdf\x05,Ve\x0f\nm\xf5\xf3\x95\xd6K\xdcpL\xd8\x00\xc5\x81\x94S\x04\xa7Tk\x9fR-\x86\xa9\xdc~\xc4v\xd5\xaf%\x83\x8e\xddb\x82ZK\xfbI\xf5\x01\xdd;\xc6M\xa8\x15\xc8&\x19l_\xac\xb7\xce\xd2\x88\xbd\xfc\x9f$#e2\x93cx\x9e\xc6\x95\xd5! \xf8\xd2j\xb0\xbeO\x9bX?\xad\x89:w\x92\xb8l-\xf9\xeb\xeby\x19\x9aQ\xfb\xe1#\xc6\xe1\xef\xf7rj\x08YB\x97\x81S\xec \xff\xa0\x9fiD\xd1\x94{\x91\xa7\x11,\xbc\x89\xe7.\x08H\x9c\xa1\xfc\x8b\x86\x7fW\xef\xceItIn\xe0\x18\xe2\x88T\xb3\xb8 >>\x08P\xc5T\xe7,G\xaa\x7f\xf8H57\x12\x7f\x8d\x89\xd9\xd51=\xa2\xc7\xc6\x9e\x92+\x9e\xa7\xa9\na\x16\xea\x13q\xd2E)BLr\xc2gQ\x1b\x04 %\xd2\x1e\xe5\x00\xd1\xb7\xcb\xbb`\x92\xaaxD\xf9\xaa\x9a\x13\xa2&\x94\x9a\x88\x94\xd10O\xbc\xae\xc26\x89'\x0dTy\x17u\xf4\xcd7|d\x18\xf4Or\xf83\x7f\x81 \xf1\x85p\xa2\x07\x8b\xc6\x0e\xa3\xf7\x84\x13\x94U\xeb\x05\x86\xda\xf0\xbc\xae\xb9\xc5\x97\xfaA\xb2\xd0\xa9h\xcb\xb2 \xa1\xc2tn3v(\xeeuo\x7f\x17\xec\xf6\xf7Q'\xe0%S\x7f\xe9N\xad\xc2\xec4\xfe\x92\xd7Q\x04lq\n\xf5\x177k\x02\xe4\x98\xf2\xa9\xf5?\xa2G\xbb\xb4!\xf6\x98\x07\x12\x06\x89\x0c\xa2\x92\x14i<#\xfe\x83\xe9\xc7\x8f\x7f\xff&\xfa\xe3\xee\xb1\x1fL?\x9e\xfdr\xfb\xf9\xec\xc12\x04\xef\xe3\xc7o\xeeyJ\xb5vW\x9f\xa5oT\x10\xfd\xf1\xd8?>\xfa\xf8\xf1\xa3\x1f|\xc6m\x1b\xed\xf2\x07g\x01\xb6\xf4\xcd~\xf4\xc7c\x86\x18\xdft\x03\xc2\xeb\xbd`\x85~\x8d\x8fV\xa7n\x96\x06|hF\xdc\x0d\x10?\x184X\xd8,\xef\xb7\xbf\xf9]\xff\xaf\x8e\xb2\xae\xe1*\xd8\x11\xb3(\xf3\xb5Qm\xf2:\xc6T\xde\x85\xff:.Z\x06|\xaf\xe3\xc2AQ\xd3\xaa\x85\xdbL\xb6\xd6y\x1e\x18\xdb8%5\xfb\xe8\x94\xd4\xad!\x9c\x92\xdaa\x08\xadZ\xca\x10\xfa\xcf{q\xa4\xaex\x92r*#\xbc\x8e\x8b>b\xae\xf8\xcbS\xd2am\x9c\x12\x9a\xcd\xa3\x8a\xd4\xecm{\x0d\xc3v\x0e\xea\xa1\xe5\x9fGK\xd2\xd7@\xb3D\xb8\xc3\x0d\xcc\xb9i\xa0\xe6\xe3\xd8\x16T\x8ew\xde\xe0\x8f?g4\xb4g\xa1\x85l\xf2\xf0@VQ<\x9fkF1\xecx\x0e<\x07\x83a\n\xd6\x98\x94\xfd)\xac\xf4Sh6\x94\x8e)\xba\xe2\x99\xe6\xbb\xee\x07\xc0\xb3\xf2\xe9\x9e/\xad\x13\x03Eg\x1a\xe9C\x1ai\xda\xbd\x19\xd3.&~~\x95\xd5>\xe1\x1e\x9b\xfe>ej\xf74\x8a\x8a-P[\\\xdf-\xb5T\xef\x8ae\xc8\xac\xc7c\xbd8s\xf4\xed\n\xab\x8bi}6~?\x0c7\xcd#.\xe9\x9av\xdd-*\xafq\x15D\xeb\xb8\xf0o\xb6\xd8.\xc3\xe3\\\xb3l\xf8\xddD\xf9.\xbb\xc9 \x00k\x0d\x00\\\xf7\x9a\n\x80\xb5\x1e\x00\xbf\xeb\xffE\x87E\x05\x85\xe9\x99\x8e/97\xf3%yo\x1eF\xf3\xa8+\x99\xc2y\xb6J\xd2\xf9\xab\x17:\x99\x0c\xc3Oe\xd2\xab\xfa|\x8c\xb5\xd7\xb5E\xc8\xf6>f\xd8G\xc6B\xd13\xcd\xffO\xd9e\x96_g\xc8s\xf8h\xc2\x0f~\\\x03c\x80\x16I\xca\xa2\xf2H\xd6\xe6\xef\xd1\x1f\xa7\x1f?~|p\xf6\x80Y\x1c\xef\x827au\xd3$#\xccM\x9a>\x0c<\x14<\xb19\xa69\x9b\xc3\xc5\x0d6\x9b\xc9\xf7\xaa\xf3\x87nB'}\xb8k\xf4\x05\xde\xef\xc9\xba\xa8o\xb0\xc1q\xf7\x1b\xde\xefk\xf2\xa96}(\xd4\xd8\xfc\x8f \xff#\x9a'U\x91\xc6hY\xca\xdc\x98\xf0i\xc6\x7fJ\x80\x0e\xce\xec\x93\x01\xa3B\xc4\x90Sz\xde\xbeh\xba\xd1Z\x97\x94\xa2b\xa3\x91\xefW\xcaE\xa5\xb7\xd7\x19)_\xbd\xe8a\xab\xd4\x8b\xa2\xe5\x8c\xae\xef<\x08B\xb8\xc6\xfc\x91\x80\xb1\xc8\xcf\xab|S\xce\xda\x1cE{'\x9d\xf6\xb4\xb6yvJXH\x9d\x92dcL\xab\xf4\xd6\x92\x14\xd03\xdf\xdb\x7f\x88\xd1\x923\xb9\xa1\xe8\xee\xeaW\x97\x92z\xc9$\xf5\xb2\xa5\xbe(\x87-\nY\x8e\xb9\xd2\x90Z\x1f\xb8\x0e/\xf7\x13\x93m\xa1\x1ck+:\x7f\xdc\x8cY\xaf\x8c\x8b#\xc2\x83\xf9(\xcch\xeb!6\xbaO\x1b\x8d\xa3\xa4z\x9do2\xba\xc9Xo\xdf\xed\xb7;+\xe2\x92d57\x90R~\x1ea\x8cr\xe5\x01^\x8e\xca\xd6\x0f<&\xec\xc9\xf7.\x176\x1d\xd5h\xf6\x03Y\xe4%y\xdd\xbaAu3\xe7/}c\xb8H\x0e\x87 h2\xaf\x03FSc\x03\x9e@\xa6\xaf\xc0\xec\x9e\xcc\xf6oby&05\xac\xbd\x84\xb9\xd9V\x8f\xc55\xe4\xc1s\xc6Z#\n\xc8\xfd\xc4\x1b\xd1\x83n\x9b\xddC1JA\x194\xfe\x91\x98\xd5\x8bb\xd5\x1b\x96y)\x87N|\xfd`\xea\xf6V\xae\x95a1\x97Va\xf1\xa6b\xf0\xc6r\x95\x92g\x030\xdbf\x8c\xa8\xc7m\x01\xac\x8e\x94\xb5\xdd\xdd\xb5\x8c&[\xdf)\xc8X\xa4\xc7\x16\xa4\xf6\xf5\x90\xaa|\xa2K\xc7x!\x82\xf7\x0f\x8d\xbb\xd8\x94K\xc2\x87N\xe6r\xf0\x95\xc5\xd5\x14\xc3j\x9eF\xe7EI\xaeHV\xbf\xdb\x94\xcb$3*j[\xc9\x94\xf6\x9e\x02\x81\xef\xe1B\xd2fb\xa6\xcd\xb4\x9c\xfb\x17Sr\xe6\xaa8\x03\x9c\xf8@\xd0\xfa\xe1[\xdaf\xb7\x7f\xc9\xe2 \x85\xcaN\x17\xa9\x86\xfa^\x92\xfa9\x8f\xecW\xc7\xb3\xcbg\xf39\xc9\xe6\x9b\xb5\xebHtVO\x836L\x82~\x9c\x0c\x86\xaf.\x99\xe5$Z\n\xe9\xcf\xbe\x1av\x8f\x18\xeb@\x1a\xae\x81s\x11\xd2*\xcav\x9e\x80\xa2\xe4Z\x88\x08\x87\x06\x8aL\xc1N\x9b\xcf\xa3\xf39\xb9\xd8,_\xbd0\xae\x00\x8e\x0d\x99\x9d\x16L\x7f\xb8y\xf5B\xc4\x9c\x17EcB\xdb\xfd\xc4\xb6\x14\x12\xcd\xf9z\x00y\x1a\xb0!|B\x8e\x9f\x08\xce\xeb\x1d\xdf\xbcC\xc8\xd3\x15i{\xb8\"\x8f.7\xfc\x18\xc4T*\x124\x12\x0b\xa6\xf5\xb4t\xaf0\x8f\xae#\xe8\xf0\xb1\x83\x839q\xf3)n\x1at\x1d\x84\x03\x18\xc4\x19\xe9\xd4=g\xb9]\xbbw\x87\x01\x12\x0e\xb6\xefpT\xecO\x89\xf2n\xa3{'\x19$\xb7\xe19@G\x1e\xcfk$Gi\xff\x15Y&UMJ\xc2\xe8U\xdc\xe5@\xaa\xd5\x9b<;\xad\xe3l\x1e\x97\xf3\xbf\xc5e\x96dK$\xbe\x0e\\\xb0\xf1FB\xa4>,I(\xf2\xc2N\xaat\xd8\xecH\xa2N2\x94;\xb5/\xc6\x86\xda?\xc5\xa7\xdb\x1b\x010G\x97\xeeu\xbf\xde\x9e\x969\x1b\xba\xe9{\xa09gH\x14\xcf\xe7'T\x80\xfc\x91{+2'\xa8\xeeSn\x1e\xb6\xb3\xaf\xb5\xadn\x1a]\xe7Wc\xd2\x8a\x08\xff{C_c1\x90\xc5\x9b\x881\xa4'6\xc9'\xd3<\xf0=\x8a\x00\xbb\x0c4w<\x959\xd1w\xb3\xcd,L~\xb5\xfd\xed?\x8b\x8bzS:\x06\xee\x80\xedW~\xef\xae\xc15\xb0\xf2\x9a\x8bKQ\x06`f\x1f]\xa9\xff\xd8\x05\xcc%\xe7\xa0^\x88$\xba\xeaL\x8d\xe6\xdf\xad\x84kwA\x0d\x1e\x1f\xe8\xc2\xf8\xd1\xe7\xfaP\x11\x87\x8f\xba\x99\x00\xb8[\xddw\x07A\xbb\xfd\x8d.M/\xf3aM\xf2\xecy\\\xc4\x17I\x9a\xd4\x89=u\xc2\xd5\x97&\xa0\x80\x8e\x14\xe6\xb7SQ\xdc\xbb\xc7\xb2Ox<\x8d\x00^\x1b}\xfe\xdcKI\xc1\x9e\x95\x1b\"*\xceXL\xff\x93yR\xc7\x17]\xa7`\x93\x03o\x92g\xaf\xb2E^\xb2(\xf4\x16\x0c\x17\x1a\xb6x`Jz4\xc5\x18\xfb\x04\xdd>\x8c)\xbe+1\xa0\xf7\xccc\x1c\x03\x1cj\x97\xc8G\xb7\x91M\xa4\xce\xc2'Zy\x1el'nI\xaa:/\x89l\xc7i\xf9\xd9\x05[lJ\xda\xc3tZ\xca\x9c\x0d\x13\xc6j\xedi\xeb\x14\xed;G\x9c\xe9\xc7\xab\xb52\x84\xdc7\xe5l`\xa1\xe30!\x90\x19z%\xd6\xd8D\x95\n\xbe2\x84*\x08!\xf1\xcb\xe1\xd0E*\xcc\x9d`\xa5\xd7\x1azr\xda\x18l\x1e\x13Q\x90\x007\x96\x1e\x83*\x16\x93^\x81\x17~\xa8\x87,\xc9\xe6\xad\xaa'\xd9\xbc\x8f\x15\xfd\x81I\xebP ^\xd9B\x7f\xb3\xab\xbb\xd6\xb4\xf1m\x12a\xbf\x1f\xee'\x87\xb8`\xf2\xf5\xcc\xb8\x8eD\x08*\x01\xf7\xb4\x12\x18b>)8\x10\xefg\x11=1\x10\x80\xbe7[\xc5e<\xabI\xe9\x85p\x9f\xa7\xf9\xe2\n\xee\x01\xb1\x04A\xcc\x1b\xa2\xcc\xe3`3\xdaV4Y\xfa\xb9\xddR-\xd2]\xbd\xc5\x98\xf7\xd5\xb0*\xe1\xf3\xe7a\x941\x98\xb8\xe3\x04F\xaa\xef+\x03\xf2[n\xd0\xea\xa82\xe3*3\xbb$\x99&\xd6\x15E\xc5V\xaa\x7f\x91\xb6\x9b2w\x86\x1d\xd4\xdd \xb4v\xd8\xd9\x0bp\x04\xaf\xe3z\x15\xad\x93\xccG\xa7\xad\xd6b\xfd\xc6\xfb\x02\x1dt\xf86\xf8@>\xd5\x83[!\x89fy\x9a\xc6EE|d\xe1\x12\x13bg\xf2e\x0fYs\xb8\xcf_\xb3Y\xe9\x12\xcf\x8aH[\x95\x82\x93CQ\x94\xf4<\x12\xcb/\xb8\x15\x8f\xe4\x96\xe2\xa6\x830>\x01\xee\x8d\xd9q\\\x11\x02\xa2XO8n\xfe\x14\xdcy\xd0\x84\xe2\xeb+B\xf5\xea\xa5\x86\xf7\x9e\xd5\xc9\x15Q\xf2\x08\x91\xe8\"\x9fwRH \x81z(\xbc\x8f\xee\xbb\xdf\xb5\xff\xda\n\x9cW6\xef\xdb\xc7z\x86\xb3\x17f:\xd6\xfb\xea\xb2(\x0e\xfb\xdfv\x1b\xafZ.^}\x0f\xaf\x94\xf5\xf2\xb0+\x15\xcf\xf8\xf3n?\xcc8\xfe\xf0\xdb\xee\xf3\x82\xcf\xad\x1bub\xce\xfa\x17\xe1\xb0\x1f>\xea\x0e`\xc5:z\xdcy|\x85\x8f\x0f\x0e\xba\xe3Z\x8364\xdb\x92u\xdf\xcb\xdfu\xc3\xb9\xf6n3\x17\xaa\x03\xdb\xfe\xc3'\xddQ\x9d\xf3\xee\xbb\xd3\xb9n\x1c\xdb\x92~\x00\xe4N\xe5\x13\x8cQ\xa6\x8b\x1f\xdc\xaa\xf6 \x8e\xba\x9e\xd2\xa7p\x04O\xda\x8f\x9e\xd3Z\x9dj\x97\xc68\xde\xcf\x8c&h\xcc4L&\xcf\xa2\xbb\xf6\x14\x1fu\x93qMZ)\xc8\xba\xac\xae\xce:\xec\xad\xb9Sz\xb6\xca\xa0\x80\x8c\x84\xabO\xfck\x96\x8ew\xd8\xfa\xec\x9d\xd8n!\xf2\xa4\xdd\xbe\x90\x96\xb7\xa9\x06%O\x8b\xa8\x9f5\xdbtv\xc6\xe6\xe8=\xec.\xd1\x14\xf2\x03\x8e\xc0C/~\x16\x8ck\xc2L\x155w$1\x1cC\x0c\x13\x88\xbb\xf6x1\x9a\xe2\x05\xa1T\x95\xd5\xc9\x9a\xf4\xaet{\x13\xa6\xfb~\xd5\x89\xf3@\xc1\x94\x85<6\x01w\xa9D\x07\x98n\xf8\xa8DU\xcd\xd1\xfe\xe8Q\x95`\xc8\x81s\x16\xbdC1\xa0\x88\xcek\x0eD\x1e\x0e\x89e\x87\xffQ\x8d\x88\xf0*\xabsLa\xbd\xc1\x85\"\xb8P\xd9\xb0\xb5\xe4\x07eUuKJ\xc9\xe3:B\xe0\xbe'\xb3<\x9b%)\xf9P\xc6Y\x153\xfeuI\xeawy\x9e\x92\xb9\xbf\x83\xcc\xc1,\xdaT\xe49\x9e\xe6|\x01;\xb3\xce\xa3\x82\x94T\x02\xf5\xdf \xb1\x11\xe4|\x10\xe1`\x7f%I \xe5)\xf2\xe1i\xbd6\xe9\x8d\xf0*d/\x84U\xb4\xc94\xeb\x86\xd6D\x9d\xed)\xf8\xec\x9e\xf4\x15<\x85\xbaI\xfb\xf74\x80\x9a\xab\x81\xf0\xb7\xaf\xbc\x1b\x1e\xec+\xb3\xa5\xf0\xb3\xf1\x96\xc2U\xa4\xcbj\xae\xf3Q\x13f%t\xe9>\x7f\x86\x9d,:_\xe5\x15\xbf\xdb\x18cC\xfc\xb3\x91\xf4\xec\xf8;\xdc\xdeU\x02u\x07\xfd\xde$\x1f)\x9f\x9dj\x9e=\x1f\x06\xdc\x1b3\xe0\x1c$U\x0e^=\x9b\xce.\x88\xef\xdd\x1b\x0fN\xdc\x06mX\xf20{\xfd\x9bW\x93e-\xbb\xf6\xc2\x16\x9e\xe7Y\x1d'\x19)_e\x8b\xbcO\x05z\x07\x83\xf8\x8bN\xf1}\xffl{a\xb3\x88\xc7\x08R%^\xbe\xc2\x11\xbc\xefZ\xa95\xc3}\xa1\xf8(%U;\x88\n\x0f\xe7\xf9\xa2\x15\xd9\x06\xe3\x11\x0d\xf4.\xe6N\x07\xa0\x10\xfdfn\xb4A\xde\xd3\x87\x1e1T#\x82\xd2\xb9\xff\xd8\x93\x8c;\xdfL\xe0E\x87\xeb\x10A\x11\xaa\x1fn\x18\x01B(L\xe0\xb2\xc3\xd4a\xa2\xd4\xd7y\x96\xd4\xb9K\xc4\xc7\xae\x84\xd1\x112\xcf\xd9\xbd8\xedl\xc0\xd2U\x7f\xe8B\x03\xb6\x1f\xa3\xd6\xb8\xfc2\xb4\xab\xaf\xaf\"\x92\xfdcC6\x82T\x8b\x00\x19\x92x\x86L\x08\x95\xf5\x9e\xc7iz\x11\xcf.\xd5\x8a\xb9F~\xa2\x87\xd8\xe0\x9c\x196\xbc!\xd7\xd6ik\xe7\xfc3\xcf\x19R\xfa\xde\xe1w^\x10\xc2&\"Y\xb5)\x89\x92\x14\x97\x03\x02\x93J\xf77\xab\x10=1\xde<\xc6\x13\xee\xd6XG\x17T`!sf\x0dQ\xf9\x1f\xd0\xacY\x8cJ\xdf$\x0b\x8c+1\x89o$#\xad\xb8\x9c\xc6g\xf4\x8bp8\n\x07\x83\xd6\xe9\xe6\xa2. \x9e\xf2\x92(8C\xacc\xc6\x82\\`\x11\xadbT\xaerH>\xa6\x90\xfcQ0\x1f\xba\xee\xd4N\x1c\xd6\xf7\x8bF|\x15]\xc5i\x82&#\x1c\xeb\xfc<\xe4|\xde\x8b\xb7\xaf9A\x11\x96\xec\xad0C\x0dr<\xf1B\x93\xad\x8c\x07\x94\xaa\x93\x18\x83\xa3\x15qU%\xd9\x12b`\x95!M. \xfca\x9e\\\xfd!\xc4\x97\x80\xfdr=\x85\xe8\x07\xdf\x07\x90\x97\xf0\xfd<\xb9\x82\x07\x7f\x8a\xd0-DL\xd0\xb1\xc7YJ\xdb\xc7\x0e_\xe6\xf9@w/\xf3\x9cu\xf62\xcfEg\x99\x1a\x03Z\x89U\xc6\xf9f\xec\xf5\xc3*\xa9`\x1d\xdf\xc0\x05\x81Y\xbc\xa9\x98W\xcd&K\xf0\x02!\xc9\xb38Mo \xcd\xe39\x1dP}\x9dC\x92\xcdIA\xe1\x9b\xd50\xcb\x8b\x84Tt\xc8lL\xdc\x07\xc7\xb0\xa5\x98\x9fX\xdc\x19\xf9\x0b\xd3m\x1bR\xf8 h\xe2\x9ci:\xb0\x9a\x9fRq\xbb\xe0n\xa7\x06\x05\x122H\xe7E\x99\xcfHU!o\xc6\xc3\x99\xfaUt>c\x7f\x1a\x15B\xf4\xeb\xa5~\xe2T\x92\x7f\xe3\xeb\xf2d`\x12\x8c\xa1QSa?\x1d\x12{\x0cSY\x80\x7f\xee\xcf\xd8\x15\x80Y\x07L{X\xb0\x1e\xfaB\x05\xe5\xde7\x17i2\x93\xf1\xbb-\x96)sa,k=[\xd4\x9237\xf3\x85\xf9\"\x14@\xab\xa1\x17E\x9eq\xba\xc3\xd2O1\xac@\x82\xa4d\x1e\x84\xb0\xd0\xb6\xa3\xbfk\xfd\xb1'\x07<\xc3\xd8xvS\x0e\xe0\xc0]!\x1f\x99\x19\x00\xb7\xa6\x12\"r\x84;o}\x93\x82\xfd\x06\x8e\xe0\x95\xb1\x89\x0b*\x82a\x13)\xfe\xab C\x00\\9\"\x89w\xf7d\xa5\"a\x16\xc2E\x08I\xe0\x88\x08\xc6C\x8b\x1bK\xe3\x92^\x07!\\\xdb\x8f.\xb7\xfb\xfcf\x95\x07N Ud\x1c\xce\x08\xa2_X\xdb%\xd6\xcf\xcd\x81\xf8p\xcfD\xe6j\xdc\xed:\"\x83\x8e\x0c\xc6T\xb5\xaf\xd0n{_Q\x96\x7f\xe0\x01\x020\xd4D\xa3\x9191\xd0/!V\xed; '\xaf\xcb\xddc/\xa7u\x8f/9\x0b\xfb\\\xcek\xa1;@\xeb\x98\x9e\xb7n\xeb\xa7F\xf7\xa0;\xde\x93\x10b\x1dD(\xac\x14N\x8e\xb9\xa5\x0d\x86c\xdd\xe0^\x1b\n\xee3\x8ffq\xf6\x9el*\x9e\x19\x8a\x8eb\xd3\xc92C\xc5\x0b2\x8bg+\xc2v:\xad\xa1oQP\xf6M[_6\x8f\x9e\xff\xf9\xe4\xf9\xff:\xfd\xe95\xaa\x16\x99\xf6Q\xdf\xc2\xa6\x97\x93c\xc4\xc7\xe2t\xd8D\xf9\xa6&\xe5\x9f?\xbc\xfe\xd1\xd4Ke\x1b_\x08\xdd\xa8\xbc\xa2\x88\x13b \xb5Q\xe1\xe2Y\xaf\x16\xe9\xba\x90\xa9\x97O\xe2\xce)\x94\x9e\x94A\xa8\xfaWf\xcc\xb1r\xb0e\x10\x8c\x80H\xf5\\\x06\x9c\xe1\x91\xbf\xe5j\x1b\x1c\xec\x85P\xc0.\x1c\xec\xa1S\xf4\xc7\x0c\xfc\x8a\x94W\xa4d\xd5g\xe6\xea\xfa\x99\xe9tWtg\x1dx!h\xaee\xfb4\x03\xb5K\x86F\x0e\x19\xaf\xdd\xd3\xef\x19P\x81\x07\x98r\xd5\x90\xe9'\x94GIV\x91\xb2\xfeP\x12\xc2\x1c\x1b}F\x9d\xe81`\xe4\xd3.X\n\x80P\xb3\xd3kE\xab>\xf2:\xefG|\xfa\x85\xf7O\x87\x8f\xbe\x0d\xf4\xcd\x9b\x8f\xa5\xc6\x0fH\x03$TM*\x1a\xe37|\xed\x98\x95@\xd9DS}\x1a\xa01\x8fN\xb9l\xd0A\xb1\x060\x00\xeb\xb1\xf6;\x98\xc8Z,\xe4+\xcf\xeb\xd7\xb3\xf8\xfb\x82\xab\xbb::?'\xd5\xeb|\xbeI\x89F\xcd\xc3C\xb2f~\xf7\xea\x0d\xc3\xe7b\xbc|4\x7f)\xd5f\x8e\xa1\xd4Z\xd8\xcd\x859\\\xdb\xb4\xeeV\x1d\x0d\xaf\x83r>\xff;\xaaVqA:f\xd3t\xe7\xce\xca\xe4\x82L\x94\x8at\xfa\xa8\xc2\xfa\xc7&)\xc9\xbc=\xe2yR\x15\xf4,v\xfe\x80\xf9\x94\xd5C=4+\x10\xdc\xe1\x12\x84-8\x98\x11W\x7f\x0b\xcd\xaf<\xc0\x14\x16I\\\x89\x90\xb2\xccK\xf5\x8e\x04\x1f\xf4\xb8.\xfd\xddt\xbd*\xf3k\x8c\x80t\xc2\xbfj/\xa9\xde\xbc\xdb O\x95\xcb\xe4\xc7\xdd\x1bJ~\x9b\xdc\xb3S\x14\xa9\xae\xba7\xa41\xaf\xdf\xc5\xde\x0d\x7f\xdem\xbf\xe2\xcf\xbb\x17\xc0\xfc\"\xb9\x97^\x80_$\xf7\xd2\x0b,\xf8\xf3\xee\xc5/\xbbH>x\xa2\xbbH\xce\xfc\xc3\xc7\xddy\xb1\xfb\xe3\xfd\xc3n\xfbW\xbc\xfd\xee\xb5\xfa\x9a_\xabw\xdbY\xf2\xe7\xddy\xb1\x1b\xe4\xde=\xf4\x05\x07\x7fw\xba\xe7\xbc\x99\xeep\xae\xf9\xf05W\xc4\xb4zw\x94\x9f\xf0y\xef\xda\xfa\xb4\xafN\x7f\x0eG\xddh\xda\x97p\x04\x0f\xdb\x8f\x9eQN@\x04\x00|V.\xf1\x12\xa9:\xebD\x18|\xab\xd6\x12\xa1\xeb\xba\x95\xde\xa9\x950\xf4n\\\xe7\xa5\xa9\xf6\x07\xb5\xb6\x88<\xd8\xae\xf2\x9a\xdfb\xcb\xdf\xd3gg\x94g\x9b*\x03.\xe3\x9b3O\xf7\xf4\x87\xcdbA\xca\xde\xbb\x17q\x1d\xff5!\xd7\xbd\x17<\xc7\x87\xee\x03\xd2{\xf82\xcd\xe3\xfa\xf0@\xdf=\xbe|\xf4P\xff\xf2UV?6\xbe\xd9\x7fd|e\xea\xecu\\\xf4\x9e1\x17\x14\xf1\xf8C\xe7-\x8b \xd8\xfb\xe8\x94\xd4\xfdg\xc8\xdf\xf5\x1f\xdf\xac/\xf2\xb4\xf7\xf8\xa7\xc487|\xf5<\x8d\xd7\x05\x99\x9bk\x98\xa6O\xdf\xb5\xe6O\xc9\xbc\xf2\x1e\xc9\xa8\xf8\xeam\xe7\xe3\xbf\x91\xf8R\x02ig?\xd4262,\xef\xab\x10~\x0e\xe1M\x08\xefu\xb7w/B\xbc\xbb\xc9\xe0\x1e\x9c\xf6\x99\xeb\x9f\xf8\xab\xe7\xfdW\xff\xe0\xaf.\xdb\xe7\x03ei_\xe1%\xee\x0b*\xb5\xc31\xbc\xa2\xe3\x90#\x98\xd0\xdfA\x10\xaa\xda\xd3\x17R\x84x\xd1ol\xe7Z\xcd[\xdaa\x9e\xe8\x0c^\xe2\xbdBWJ\xa5\x9f\xbe4\x89\xc1thW~M%\xee\x1fe\xd3\x18\xd5\xf7E\xf7\xe02\xc4\xbf\xa5\x1d\xff\x13\x8e`E[\xe9\xbd\xa5\xe5\x078\xa25\x8e\xe0-\x15\xb8\xf1\xafwz\x05\xc6\x85:\xc1\x8a\x8e\xe2G\x83\xaa\x03[\xf9 \xdb{F\xff\xfa\x01\xb5ToLr\x81\x98\xeeO\xac\xee1\xfcr\x0b\x13Xv'\xff\x13\x1c\xc3\x82v\xbd\xf1_0\x1d\xe7\x04f\xf4w\xcc\x7f\xf7\x1a7\x82F\xf4\xba\xf3z\xfa\xcf3\xd9\xc1\x1b\xee/\xfb\x8bA\xefH\xc7\xb8\xa6\x1d\xfe\x93N\xbf\xdf\xdb\xef\xcc\xbf\xde\xa3\x0d\xde{`!\x18\xcb\xa0\x8f\"\x7f\x85#x\x8f\x9aj\x1d\x9a\xfcU\x0e\xf2\xaf\xfd\x97\xef16#bF\x88~\xed\x0d*\xca\x08`\x92}\xe9\xd9t\x00\xde\xdcbXC\xbf\x14\xbb\xb1D&\xe7}\xd7\x12<\x08u\xe8\x7fn\xeb\xd2p\x9f\xf3\x02\xc7\x9d\x87\xa0t\x9c\xbbvLa\xf6g8\x82\x7f\xc01b\xc6\x1c&P\xc0\x04\xff\xbe$7\xd5\xab\x0c\x03\xe2\xf6:\xfd\x1b\x1c\xc1K8\x16{{\x02\x7f\xee\x01\\h5\xfd\xbf\xd1U\xab\x15\xde\xcf4\x93\xbf!5)1\xc6\x13z\xe8\x9e\xa1%\xfd\x0b\x9c\x8f\xdb\xec\xe4\x93\x91\x1c\xe7\xc1\x93.\x87$8N}\"\xaa\xef\x1e\x8f\x9669<\x12\xe6u\x81W~;\x18Z\xbc\x95\xeb`\xe4\xb8\xf7\x1f\x1b\x92\xc2\x1ety2\xce)?\xd6g\x85=x\xd2}\xbei\xc2\xf62\x0f[\x11A\x97\x1d\xa0\x15%#\x83\n\xdfV\x94\x8d\xe9\x19\x8b\xb2\x81\xce[\x14\x04<\xcc\xc6\xb0{{{}a\x02\xb1\x1e\xe8N\x06\xc1\xeab\xeb\x81v\xd8cX\xb9{\xd4\xf6\xab\x8d\xcb\x9c\xb4\xaeuG\xae\xf0\xe3\xc7z\xcc<\xec\xc9H|\xb0\x8f\x0f\xb7\x1dl\xe2+\xa9\xa0\x99\xc9\x18&\xec\xf7\xbe`\xf0]4\xcc\xa5\xde2\xfed\x1b\xa6\xfeF\xa3Q\xa3@\xaeZi\xd7\xa8L\xe1Z\xc6\xfb\xb0\x0f\x13\xc0\xe0\xfd}\xe2e\xbdc\x93\xa8KA\x1a\x0b\xb9\x82\xc5\xfd\xbc\xbf\xcf\xaebs?i:c\x1d\xa1\x14\xc9\x82\xf7o\x82\xa7\xb0\xbb\x1b\xc3\xf7\xb0y\x1a@\xc5\xcd\x11\xa65\xecB|\xa6?\x17Y\xe3\xfawr@\xa9\xec\x816\xb5/{\xa9\x9f\x06\x90\x8a^L=\x08\xf6\x87\x05\x0c\xcd\xfc\nS\x8a\x11\x96S3\x04\x9d\xdeo\xfb\x85\xefn%a\x0f\xbe\x1f\xf8\xa5\x01A\xbf\xc0\xf7\x91S*\xa6\x15i\x12\xab\x87\xe05*\x16\xaf{Y\xce\xb3\xd3*w1\xb7\x81A\x05c@B\x0d\xd5\xcbzZ\xae\xa6\xf5\xa7=H\x99\xf7$\xea\xe2\xd9\x0dV3\x05\xc9\x1f\x90\xfe1^w\x04N\xd1\x884M\xe9/\xafr\x9b\xc0\xbc^,q\xdayTs\\\x11\xb4\xdedQ}\xc94;3\xd8\xdb)\xb0\xa4k\xd9\x80\xc2\xcf\xfc\xfd'\x07\xc1\x17h\xcf\xbe\xf6\x92\x1bM \xf54\x03\xc3\x88\x18\xbd\xa4\x92l\x91k3\x87\xd1\x92\xe6Km\xee0\xc0\x94\xb5e6\x81C\xfdKT\xdcM\xe0a\xef\xa5\xc659\xb3\x1ao\x82\xb2nSrF\xb9\xb6\xfb\x9a\xfb\xd0~\xd3\xccOs\x96g\x8bdYEi\xbeDs\xc0~=F\x02J5\xdb\x00\xa8f\xa7\x89\x8d\x91`\x97Z\x92 \xcb[\xafDR\xc5\x12\xfe\x04\xfb\xa8\x87f'\x00\xa5\xca\x94\xb0\xee?\x05J&\xcb\xa7\x10\xef\xee\x06\x94F\xd2\ngjkZ\xb2\x89\xa0\xfa\xd3\x91\x12\x92\x95+M\x83)9\x8b\xe2\xa2H\x11\xe5\x06\x0d\xda\xc5\xe9\x1a\xd1\xb5D\xfd6&)f\x17\xee\x1e}\x88\xf7\xb3\\/\xdb}\x8fOY\x05\x8aD\xbd\xf7\xf4!{\x8d\x18\xd8{\x8fO=\xad[>^Vc\x0e\xa8\xca\xe4\x17\x8f\xa8\x99\xf4\x91\xc00]\xa7S\xc2\x9a\x07\x8e21]M\xe3\xd7\xb9vpc\x8f\xc4\xc6\x978\xae\xa5u\xfa\xb3\xc0\xc0`\x90\xce}\xc4:\xbe$\x7f\xae\xeb\xc2\xa7\xc4\x97\xbc\xa4\xaf)Y*\xf2\xaa\xc6\x1f\x06\xd5\xc3\xc5&I\xe7\xef\xc9?6\xa4\xaa\xd5\xe6\xd4\xe7\x06\xd2\xc1r{\xab\x1f\xf1G\xfa\xfa%\xa9\xf2\xf4\xaaU\x9f?\x1a\xac\xcfMM4\x9f\xf17\xfa\xaf+R&q\x9a\xfc\x93\xbc'\x95\xfa\xad\xfa\\\xffe^\xbc\x9a\xab_\xacHZ\x90\xb2\x8a\xe8\xf3\xbbEc7\xdc\x91\xc4\xad\xd6\xeb\x0c\xf0\x84\x9e\x96\x8d\xfa\x84\xfe\x10-\xf7\xe9\xd1\x15w\x1d\xa1\xb5\x8cGQ2\x81\xd2p\xd2\x98\xa3\xe3\xf2.'\xba\xa8<\x1aM\x8e\xe0C\xe8h\x91+\xc8\xc5\xa0Q>W~\xa1\x97N\x94r\xcd\xa7|a\x00=\xf0If\x1anF2\x15k\xceNDx\x0d\x83\xe7wGp\xd0\xb9\xdd\x00^\xb9\xe5\x9c\x7f\xf9\xfc\xd9\xc0A\xb0\xaf\xf5\x90e\xfb\x7fS\xc6\x17)\x19\x00e\xb6Y\x13Q\xc7\xc0\x10,I\x8f.\x01h\x82\x10C\x1d\xd9On\x01\xb0\x1e\xbf\xa8\n\xe9\x96#\x9f\x88-\xd3\x1f\x138Dl\x11\xad\x8c\xc0\x9d:\x9a\xfbY\x08^\xcc\xfd\x8a\xb3\xfe\xd4s\x17\xfb\x18\xde\x9c+\xef\xdaO\xbdRG\x05KL\x05\xb5_Gt?\x1f\x1c*\"\xaf?\x1d\x1c\x82J\x072\xff\xe1\x81\xf2e8<\xf8\xce\x97\xdfn\xfbek\xb4\xe3\xbe\xdc\xba\xcf\xc3\xc3\xc7\xe6O5R{\xfb\xd0o\xbd\x92$\xb2\xd4c\xb7@-\x0dr\x13c@\x1fy\xf6\xdb\x93T\xea\x07\x93\x1b\xf1M\xec\xb6.\x1f\n\x7f\x82\x83\x8e\xb5x\xc3\\\x1e\x9c\xc1q\xfb\xe7\xc4\x98\n\x8d\xb29\xbe\xa6\xf5Cc\xeb\x87\xed\xd6\x0f\xcfP\xff\x1eDW\x07o\x0bRbL\x9aWh^\x12\xd7 \xc6/\xb9y\x9d\xcf5\x1e\x9f*\xa8[\xa9\xddTE\x0b&kP,\x10&\xe8\xf87\x13\xf4#\xf0I\x10\xb0(Qy\xd39s\x84U\xd2r}\xac0\xc7\x96\x174\x86a\xab\xf6'\x01L \xe1W[\xfaE\x1e\x9e\x9e\x9e\xbej\xfd\xc5\xcc\x02\xc9@8K\xdd\x12\x8dC\x00\xfb\x12\x99\xc8\xad\xc0A\xbfnG\x84\x80]\xf0\xce1}P+QZ\xb5\xf3\xff\xfd\xfe\x9b\xff\xf1\xf7{\x7f\xf4\x83\xf3\xdd\xa3\xe9/\x1f\xcfn\x9fN\xbe\xff\xd3\xe7\xe8\xe3\x83\xe3\xf0\xe3\xc7?x\xde}\x96<\xed\\g\x99\x0b\x0df\xb0\\\xe8\xcc\xf3\xb0\xb1\xa1\xdbo\xfa\xad\x95~}\xff<\xf8\xe5 \xbc\x0dD\xd3J\xe6\x12\xff<\xf8\xa3@\x80\xe6\x83\xe9\xf9Y\xf0\xc7o\xf8s\xcb\xc6UF\x851X\xe7~M\x87\xd1\x0f\xa4nX\xdc\xd8v\xa0\xf0\x06\xbd\xfb\xfdtL\xa667\xb66+N\x1fw\xf6\x90\x03q\xc6\xc4\xcaDWA\xdc\xc1\xb1\xe0Vb\xcf\xeel\xb3g?\x7f\x86\x1d\x12\x15q\xbd\xaa\xfa\x8du\xaa\xb3jC\xb1-@Qs\xf1\xea\xfd\nR\xb6\xcf!\xc9\xa0\xd4\x9b\xa8*\xeaXZi\x9a\x1b\xa2\xcc\x03\x87\x85\xf7\xee\xd9\xfbg\xafO>\x9c\xbc?e\x83O\xa2:\xff\xa9(laSD\xb9\xe2\x0eg\xb4\xa7ibP\xa6\x8aB;\x8c\x07\xe9el\x83}\x1cX\x87\x04\xd0\x18j\xdbk\x8aR\x15df\x8c\x13\xa6+t\x95XX\xd1\xdc\xfd\xa35\xa9W9\n]-(\xbb7 i\xfed \x9c\xa8Z4:(]\xc1\x0c4\xbe\xc9\x06]-(\x85\xa1W\xb2D\xe8\xcd\xe0Gz\xa7\x97\xfe\x9b\xf6\xaf\xadT\x96\xa0U[b\xe3\x9a\x0bp*g\x95~\xe6\xef?\xee\x06\xff\x00n\xb6\x86o\xbby(\xea(\xa9\xde>;=t\x125\x98.$/H\x16\x17\x89\x91\x89\xe0Y\x15(\xae\x17\x0d\xae\xd3\xc9\x1ez\x1a\x16<\xa9N\xaf\xe3\xe5\x92\x94\x07#\xc6P\xb1O\xb6\x18\xc3\x81n\x0cy\xf1j\xce\x12\xf0\xd7Q2\x7fY\xe6\xebwq\xbdz\x8d\xf8\xcd\xdcI\xeb(%\xcbxv\xf3\xaa\xff6\xa6o\x97\xa4\x96\xc7\xf9\xfb\xf8z\x84\xf8\xc2\xd9[F}\x8f\xd9Ib\xd7\xd7J\xc9/\x12[\xd7\xbc5\x18!f\xbb\xd5\\+\x11\x8b\xcb&\xa1\xdf;x\xe2$\x83'Nb\xa3z\x89\x12\x19i\xc7p\xef%H^\xa2\xf2\x85\x83\x0c\xca4\xf7\x13\x19\xf0\"\xf6\xf9\x1f\x9b\xb3\xa8\xca\xd7\xc4\xb7\x03\x14\xba+\xc2\xee\x16\xb5uu\x91\xd7\x0c\xd9\x10\xd0>>\x9bK\xdc\x80#\xd8\xd0\x87$\x9e\xad\xd4\x87\x15\x8b\x93Q\xaeQ\xcb\xc5w\xc4\x98\x0dQ\x90\x99~mY\x005D/\xb3\xd4\xa1\xb3\xd9\xc1\xb5F\x96\xaf\x8e\xbe\xf9F\x8emn\xba\x8b\x82\xde\x89m\x0c2+\x0e\xda\xccx\xca\"\x9f\xbd\x17\xc2\xa2uZ\x0e\xac\x9d\xc0\x18\xcc\x92\x15\xafIMJ\x0d\xdb!\x8a\x1cgE\xc7\x19\x07\xb0\xe3\xb0\xe7D\x91r\xe0\x948\xf0\x08;\x9did\x0d\xf6{\xb3<\xab\x93lC4\xa9a\xd4r\xc5]qs\x9f9\x7f\x99\x9cqE\xa1\xddj\x83\x02uK9\xad\xa8tB\xffc\x91\xca3\x8a\xc6\xf8\xf4\x08\xa6\x99ev\xc0\x87\x86\x87\xcb\xb4r\xa8M\x076k\x84\xa6\xfd\x00f}{'\x13\xbd\xd4\x15\x12\x9d\x9f\xe7e\xb2L\xb28U\xc4)\xe6\x96\xa1}\x83\x12\x8cBT\xc2\xf6O\x96\xb7\x9f%L\xe7W\xed\xd6\x81\xe8\\\xab\xbbE\x86\x00Td\xc4\xac-\xf4\xba\xcd\x98\x02\xbc\x80#\x98M\xf7\x1c\x00NKa\x84\x91\xe9\x0d\x15P\xda0*:0\xaa\xac=\x9b\x19%\xfb[\xe4\xe5\x9bm\xcc\xce\x18\xeb\xb6\x04\x0e\x9d\xb9%U\x84ZV\x06\xda\xd7-\x92^\\QzQ\x07\xe0\x15e>\xdf\xcc\x08\x1f\xdc\x15\n\x02\xb3<\xab6\xeb\xf6\xb3\x8a\xcc6eR\xdf\x88g\x9f?\x83\xbf\x9a^\x9d\xa1\xb1\xdb\xd5Y\x08s\xb6\xf3V\xba\x0ca\xddB\x01\xb3A\xc6f\xa5\x909v\xa64\xed\xd0\xbf\xb97\xa0\x03\xc8\x80\x83m\xcd\x14\xf5N\xf5\x81{\x18\x98\x14\xe1\xbar\x03G\\Ab\x9f'X3pt\x8b\\\xa0\x8b\x10\x9d\x16(\xd1M\x1b\xa2;\x0f\x9e\xc2\x8eO\xa7\xe8_\xc0\x11\x9cG\x19\xf9T\xfbA\x10\xcd\xf3\x8c\x04O\xf9\xe4]\xc1%\n\xed\x8f\xb2z\x17,\x00\xa8\xdb\xbcD\x91#>\xa1(um'3\xdd\xc2n\x90N\xce\xc6\x8eZ\x94\xde.\xa3\x0c\xcf\xc9\xb6\xad\x01\x87\xc7\xa7\x91h\xa4+\xa7#QKW\x9e\x8fD7]\x19\x87\x82\xba\"\x17\xf92D\xa7\x95\x0eZ^\xd3\xe5\xa3\x98I\xa1\xe6_\xc2\x11<\xebb\xe6'\x8e\x99;\xf6\xab\x981\xe5\x8a\x87\"\xbf\xdc\x06uu\x85bb\x87\xd7v>\xc5mE\xde\x1be\x1e\x81\xb7\x19*p\xc4\\\n\xc4\xbcq\xfe\xd4q\x9d\xac\xb5\xb6\x150n\xfdJ\x0f\x1b\x8d\xf9K\xef\x89<\x89T\x85\x08G\x8e\xceMQ_E\xbb\xe0J\xd8\x87\xdf\xe9T\xb4\x85P\xd1\xf6\x82Z\x03\xf7\x17\xb6k(\xf8\xf0\x98\x07\xa4b\x11\xa1\\\x15rs\x08\x8d\x06\xab\xdf\xe9jL\xa7D\xb9w\xfc\xfb\xc7\xeb\xb3\x07\xcb\x84]\xfe\x0d\x80u\x9c\xe9\xc1\xe3'\x036\x16\xffo\x98\x1e\xdc\xcd\xd5s\x9a\xc7\xf3S\xa3\xc2\xb0\x94\x9c3\xd3R\xd0\xe6\x0d\xe9\xdb\xf5\xc9\xc6\xe4\xdb\xcb \x90(\xbf43\xf2\x9b2\xa5U6e\xca\\\xc5\x8c\x15\xab:\xae7\x15\xe6$\xc1\xbfl5Y\x8aPQ\x9b\xfe2\x7f\xb1\"\xf1\x9c\x94\xd5\x04\x12\x9fD\xfc\x87\x81B\xe8\x1b\x89\xe1\x08r\xf1\xe5\xd4\xe3y\x84\xee\xd3\x9d\xe7\x19\xf4\x10\x1b\xccC\xf9\xf93\x9c\xfb\xb1\xd9\x0f\xca\xdf\xa0kKM>\xb1\xf8\xe5\x17i~\xc1\x14X\x17\xe8'\x1e\x88\xcd\x1c\xd5+\x929(\xb9)\xc9\xceY{hH\x97G\xf3\xb8\x8e\xd9\xdf\x9b\xc0r\x00]\xf5\"\x01;(\xea\x84\xa63.\x8a4\x99\xa1\x02\xe9\xc1\xcf\x15\x8bO\xc1\\w\xfer\xfa\xf6MT\xc4eE|LA\xb4l\x8c>\xe3\x05\xf91\x8f\xe7C\x0c\xf4-\x1d\x85\x0e\x84\xa2\xe4\x98\x01\x01\x8e(\x85\xc8\xa3\xfc\xe2g0j\xf5\x9dX\x83\x9c\x8d\xf5\x84\xdbl\xeb\xb9\x01\xfd\xe9\xc3a\x91\xf7\xa9\x83\x9b\xe1B2\x9cT\xaaO\x19\xf6\x8c\x94a\xafM\x19\xf6\x18e\xd0\xe3\xaa\xce\xbf\x04\x94\xa5\x15\xe3SC\x8e\x10\xa1\xd6e\xf6@:\x1d\xaf\xf9r@ \xba9\xcd\xe8@\x85\xbf \x9a\xfaGI\xc5\x1d\xa1\xa6\xd9Y\x00\xc7\xac\xd2\x04\xa6\xf4\xff\xb3\x10\x7f\n\xb9\x8b\xe2\x93\xf0U\xd1@\x1d\xf1\xb7\x1b,s\xc0ld\xe0\xa4\xd0Gfy\x99\xf0#C\xc4\x89\x13\xcfd\x9c\xd1\xa3\xadl\xaeVm\xfb\x0dS\xe0\x17\x12\x15I\xf1\xa5\x06,\xcdM\xe3,Oy\xd6\x9a\x97\x98\xf0\xcc||\x90(N\xd3\xfc\xfad]\xd47\x18;\xd8|||\xd9\xcc\x8fE\xf2\x1dJ\x1f\xf5WX\xdd\x04@es\xfdb\xc8\xc8\x1f\xfb9\xcb\xdfp\xc1\xa2k\xa8 \xcd\xe5\xd7y\xff\xe3+\x91~'\x9b\xe5s\xf2\xd3\xfbW\x86\x80P\xa0p\x92\xa8\xcdM\xb8j\xe8\xa6\x99]\x1eX\x1dma\xd0\xfc\x16l\x81\x19\x95\xcf;\xf7\xe4:\xee0\x08\xcdW\xbe\xb9m\xa9rfd\xd4\xde\xbf8C\x97G\x18\xfe\x1d\x8e!\x8f\xd6q\xe1'A\xf4s\x9ed\xbe\x17zt\xf3z\xebMZ'\x0c}\xd4J0\xe9\xd4\xd7\x03`V]M\xc0\x0b\x0d\x06\x99\x15\xbe\xfd\x1f\x07{\x86\xf75{\xbf\xf7\xc4\xf0\x9en\xbfj\x02\xdeg\xaf\x0fP\xa4^\x94\xe9\xc0\x14\xd0\x9e\xe7\xb4M\xab\xe1{\xe0\xceU#\xda\x02\xce73U'7Dx\x85\xd1\xd64\x1b\xb8>\xa1\x9bvg\xa7\x8c\xaa\xcb\xa48\xa1\x88\x9ed\xcba\xab\x82\x9c\x87\xeb\xefo\x0bc\x88V\xe0l\x95\x1d\x83EQ9\xf6/\xa2)\xc6^ny\xe2\xbf\x9d6\x82v\xa3Q\x88\"6\xf84\xa1\xc7\xcf\xc6\x8f\x8d\xeeJ\xa2pc\x1fC\x1a\xd2\x10\xf2 \xd4\x05v\x0e)Oo$0\xeb\x86\x9dB\xa90Y\xa0\xe1\x91~\x14l\x85\xcc\x0e\x0eI6Of\x14\xa3u\xf1R\xbb9o`\x00\x8f\xd3\xdf\x8e\x95Aq\xc3*\xf9\x08\xee\xd4\xf3\xd0\x9d\\[=\xc7\xd6\xfe\xb1!\xa5!\x8203\xa9Y\xe4\xe5Z\x7f\xd0\x0c\x86fM\xfb\xfb9 \xc6X\xb3@\x83\x04\xb1\x9fL\xc9\x19;)\x07\x10|`3\x168\x15\x83\x8c\xc3d\x12\xf9\xf29\x7f\xf9\x01_\x9a\xed;P\xe8{\x80\xf4\xbb\x88\xcb\xfa\xe3\x03\n\xa9\xfbT\"y\x90D5\xa9j\xbf\xb0\x9a|\xf08j\xa6\xf8\x9d\x80J\x04.\x01d\xe4\x1a\xe6\xa1\x06\xa8=\xf6\xd4*\xd6\xb06\xa3\xb8(H6gAu\x92i}\x86\xf6\xbdC\x00\xd6om\xa6\xf4\x94\xe3\xac\xfc\xc40\x1d\x1ez\x98\xe1T\x7f\x07j\x91L\x1bq\x058\xf8V\x98)\xb2*\xd2\xa4\xf6\xbdco\x00\x01\xae\xa0g\x0b\xbc\n\xa1\x1b\x8aB-K\xba\x9b\xa6{\x03G ^ O\xf7\x07j\\\xa0=\x86\x19\x85nl\xf8q\x8e\xe9\x96\x04 db\xe6\xcd\x00\xb2t\x90#\xd7 \x87\xeb\xa6\xe3\x8bu>%f%6e\xab.ZCl\xa8\xf4\xf9PFmP\xa9u?\x0b\xa7(&\x8c3\"\xc4\xb5-\x9d\x8d(\xf2fSG\xb0C\x96\x0c\x08\xcfG\x12\xb0l\xbf{O!\x83\xef\x81<\x85lw7\x10bYC\xb8\x87\xac\x8d\x04gRG\x8b$\xadI9~1\xccZ\xfb[\xc1O\xde3\xb9@@\xd3LI\x8f\x84c\x0fv\xf1(\xf7\xfal\x1d \xa3p\x11BE\x99^}{L\xe1u\x04K\xd8\x85\xeb\xb0\xd9\xd4x\x928\xecj\xed\x94\xbe\xb2\xc1q\x08uT\xad\xf2M:\x7f\x91_gi\x1e\xcf\x9f\xa1Z\x8deg%\xe9\xc2p\xdd.\xed\xc3\xfc\xcc?\xe8eK\xa4Eh\xc5\xf7\x86\x94\xe2Z\xa3\xe6\xb9\xd0\xa7\xeb^\xae\x1a\x8b\xe7\xfe\xcb+\xf1Rc\x0f\xad\xba\x1a\x0b\x9b`\xf9\xec\xcf\xec\x8c\x136\xc1l\x07Ri\xf8m\xf9\xbf\xe9\xea K\xce5)\x97\xe4U\x86\xcf\xde\x96\xb4\x02\x1cA\x8ao\xb8\xc3\xb7C\xc0\x1bh\xd6Zz\xdf\xd8\x11\xdf,\x11\xb2]Y\x7fq3\xda\xfa\xb2E\xad\xfb\xad(B\xf2\xeeg\x90a \xbaK\xab\x9b\x03\xaa\x8c\xf5,2\x08\x82\xaa\x01\xbf_\xf2\xc8\xe85\xfe\x95\xf9\xa4\x97\xa8[6\xd1F}Z\xf9\xe0;\x8d\xc5\xfdZ\xa0\xb5\x169\x97\x02\xc5\xbe\xd5\xbd\xbd\x11\xdf\xf6Ru\x02?\xf5\xe4\xae\xd2\x83\xa3\xed(op\xda\xe8\x83a\x02\x9a\xf4\xee\xdd\x1d\xc0\x8f\"\xdbI \x88?=2\xaf\x14S+y\x94\xad\xe3\xf2RRj f\xae\nUL,!\x17Kn\xa0\x97\x01\xf6\x8d2\xc0~[\x06\xd8?\x1b\x08C(Ng9\xcc\xeb2.\x1c\x0f\x14\x16\x82\xfdi\x00\xd5u\xc2T\xc5QQ\x92+\xe4\x8d3\xf2\xc9\xca6\xce\xe2\x8a\xc0\xded\xb0\x0e\x08\xd3,\x93\x10[\xdb\x84X\x91\xc2\x1e5\x02\x14\x96u@O\x1c\x0c6\xbf\x92\x04\xac\xf9\xfb\xf3gL.\xa7\xdd6q\x10\xc2N\x1c\x95,\xa4\x04\xa6)\x9b\x91\xa2\xce\x07w\xb9Z\x18`\xe0\x08\xf6\x1d\x0d\xb1.J\x12_Zk\xda\xef\x87\xe5\xb5$\xef\xff\x11\x9d~\x7f\x1e\xda\xfb\x17\xb5\xe0\x9a=r[3\x12\xd5{\xcc\x1c\x9fdu\x08\xf4\xe7h8=\xf9u\xc1\xc4\x87\x1c;\x00\xe1\x89\x1d\x08,\xe3lmYjlm\xdfa\x1f(\xa7_<$|\xc6&\xe13\x1c\x96/y8+\xce\x81\x19\xbb\x90<\x9a\xb1\x1f~\xb8\x88\x08z\x92,\xec\x1f\x86\xca\x0ex\x14\x82\x8f\xf9\x1eJ\x8c\xed\x82\x071\x06y\xa1O\xcbt\xf8\"\x0b$\xe0\x1c\x90Q\xb2\xab*2\x8aa<\xa1{]=@|\x16\xaf\xd4\xadw\x07,\xa0[A\xed\x1a HU\xe4YE\xbe\x84\x82\x1c|\xf7\xebn\x8d.\x0598d$\xa47\x13\xa3\x0eP\x14\x84\xdc\xc1\xa1\x1b\xe4HT\xef\xb7\x89\xc8\xfexP=\xfauA\xc5\xc7l\xc9\x0f\xc3\xc0\xe0\x82\xbe\x8c\x8c\x18\x9c\xc3Da\xcd}goN\x82\xe5\xd0\x01\x83\x10$.\x1d;n\x04I\x0b\x0e\x9e\xe0b\x1e\xb0\xbb\xb4\xb8\x9e\xad\xfc\xfd\xc3\xc0\x10\xafFW\x9ai\x1c\xda\xa7\x01w\xb8\xba\xcc\xc4\x8b\x8e\xdd\x01.\x87\x0eh\xce\x1a\xf4s\xae\x94c\x19%J\xc5Z#\x08\xf8\x8f\xe7\xf9\x1c\xc3\xc5\xf2\x9fL]\xc5L@ \x97{Q\xde\xc6G\xf5A\xa8\xbb\x99S\x0b\x1b\xa5\x03\xda \x19\x8b\xf2\xcb\xd1\xeb\xf3\xd0\x02'Q\xeev}\xf0\x16\xd1\x0d\x9c\x89\x0e\x9c\x89\x04'}\x1cv\x93\xcfw\x0b\x82\xf1\xe1\x81\x1d\x8c\x92\x8c\xc6\x17\xe5\xa6\xa8}\x8f=\xf0\xc2^ \xefna]X\xf0 +y$\x9b{#\x86R\xd5y1`\"\xa9\x07\xf9-K\x93\x871S\xa7\xc6o\xa7\xf4\xcc?x\xa2\xd7\xf9i\x02\x18\xdc\xea\xd4D|\xa0v\x85t\x03\\\x16\x92\x10\x07'%![(\x8d\xdbnVB\xa125*{\x06%B>\x98\x07\xfe\xcfU\x9e}\xfe\xb4N?\xdf\xc4\xeb\xf43\xa6\x00\xfdx\xf1\x80\xf1\\_|\xb9\xd3\x8d\x10\xb2\xad9\xe1\xc3\xfd\xffxk\xc2\x81\xc1\xb4/1I\xa0\x06Q\xfe\x1eCi\xe2\xd5\x97\xf7\x00\x83\xa0\xe0M\xba]F\x16\xe6\x04\x99`\x02\xddkTS\xe3\xb3\x01\x13)#\xa3\x85\xbaR\xba9\xd8\xbc\x9b\x00\xcfti\xce\x95\xa5\x19GZ5S\x991+g\x9d9\xaa#i]\x0c3\x19\xeeW\xa4\xfc\x0b\x85\xf1\xd2\x8d\xcaiL\x85\x9d\xf1\x19i\x94ua6\xca2\x0db\xee0\x08Q\xb9e&\xeb\xd4\xfaJ\xdf:zAY\xf6\xb8\x88\x9b4x!\xe1\xc5\xf3\xb9\xb0\x8a\xff\xfc\x99\xb2#\xeb\xfc\x8a\xb4\x9f0\x06\xc5\x10\x99\xc6\xb8/;\xc6Z\xa6 ^\x0d\x82\x0f\xa7\xff\xf93\xd0\xb9\"$\xd7\x9b:\x16\x90D\xc9\xfb\xc6\xd1\xd4x=\xd8\xcf\x15o\xdfo\xe0AA\xd7\x07\x80|\x8a\xb7\x16\xbag/\x08)\x9a\xe7n8\xb4t\xc0\xa1\xaf\x8e\xc87Fcl\xb3\x87\x06\x1f\xe1\xa9\xbc\xd6Z\x92\x1aM\xaf\x7f\xb8y\x97'\x19\xa5\x08\xfd\x18\xb8\x00.n\x0f\x82\xbcw\xb2\x86\x86\xda\x88\xd1\xbf3\xff\xbas\xa3\x84\xbe\xecz1t\xeb\x7f\xce_\x1ej\x0d\x06\xae\x87\xec\x10N\xc4\xa7\xda\xdb\xdcO\xe26W\xf7\xf2T|\xaa\xb5~x>d\xc3p)>\xd5:\x0c>\x13o\x1f\xf7\x8d\x18\x9a+\xdc>4\xe3\xf9|2,'\x8b2(3\x81\x90\x9b\xe8>\x1d0\x1c\x1c\x92\x9b@\x91\x9d\xb4\x154\x08\xd6o\x89\x93\x85 $\xbaw\x94\x8a\xde\xe9|9a\xb6Ny\xfb !\xf5\xba\xab1S\xba\xe8\x1a'\x8a8\x899\x19\xca\x86\xa3\xe5\xdc\x06\xdd %\xad\xb7!L\x87\xb6\xa3\x89\x9a\x9b\x0e\x1ae=\xdb\x8a\x0b\xdd\x9a\xdaV\xf1\xaa!\xb6\xe6\x11f\xcc\xeb\xf85\xa9c\x1c\x1d\xa9\x00\x83}\xadI\x8d\xaa\xcd\xb5_3\xd5B\xc7\x8f\\\xd0\xfc\xcf\x9f[xEk^\xe9)\xd7U\xc8\x9b\x15\xe9l\xafl00\x9e\x85\xf5Y\x10\xde\xf1\xc8m\xc0\\v\x0e\xc7a<\xbb\xd0\x83`)A0\x1ee\x14\x06\xe0\xc2\xc8\x00h\x9f\x8a\xdd\xd7{\xa9a\xcf\x8a\xb8$Y\x8d\xa1\xba5<\xda\x10\x83\xd6\xf1\xf0\xac\xed\xf1\xaa\x95\x84\x9aG\x98B\x17\xf1\x95]\x9b0\xbf\x97\x92\xf9\xbd\x18aE\xfbE\x9f\x18\xd4\xc3\xa2s\xb0\xa5O\xf1\xba\xef\xfd\xa3\x01\xc6\"\x8d\xeb\x9ad\x13\xd0\x04}Yl\xd2\xf4\xe6\x8d\x08g\x84s\x1e\xe1;\xbe\xf0g~\xea\x93\xae\xf6\x1a\xf4\xe3\xc8:\xddh<1\x93\xea]\x99\xaf\x93\x8a\x8c\x18D\xc1\xb5\x86s\x9f`,\x14\xa7\xb1p\xcf\xae7\xe4\xda\x117\x86\xe3\xa3\xf0\xa1\xe0}m\xa5U\xb5\x01\xb8\xa8\xdb`\x08\xcf\xc1U\xc4j&\xf7\xaeL\xd6I\x9d8kA\xdcg\xb9\xf9\xcdg\x99T\x7f\xa9\xf2\x8c\xcb`+\xdd\xfb\xe7L\xde\xed\x89i\x16\x84\x92jn!/\x9b\xb4\xdc`\x1a\x18\xefQ\xe3\x1b\x9fT\xaf\xb9&b\x02W\xba\xd7\xcf\xe6s\\\xb0\xa6\xdaZW\xed\x7f\x92\x8c\x94q\x9d\x97#\xe6\xf5\\\x92d\xe5\xfb\x97\xcd\xd7ns\x13\x1fL@\x93P \xa9\x18\xdb=\x81B\xf7\xf2\x84\xe5\xaeu\x1eq+x\n~\xdc\x1fc\xeb \x95\xdf\x15C\x1f\xa9\x0c\xfd\x9dRap#t\xa3\x8e}A\xae\xb4'\xdb~\xba?\x94fm\xf8\xd3'{\x03\x86M\xb6O\xb7\xcebw\xb0\xf7\x9d\xf9\xd3\xff`s*q\xbfw\x07\xfeJz>\x8c\xe5o\xe8;\xae\xe8k\x97\xbcv\xcfF]_\x9d\x850\xb8N\xea\xd5\xf3\x92\xccIV'qZ\xc11xI6K7s\x82&`U\xbc&\xf7Y\x9cx\x8d+\xb6`\x03\xc4z\xdb\x14yd@hB\xe7\xbe\x81Pm\"p\x9d9\xbd&`G]XML\x01\xecX\xf5\x1e\xb0\x8cyTA\x8d\x177,\xfc=\x9b\xd1\xb6&\x9a\xd0g\xc6\xcf\x06\xd2\x1b\xcd\x9a\xe5\x99h\"\x88\x01\x8aw\xaea\xe0@\x95c/\xf2\xb9>x\xa7.\xcb\xc9\xef\xcc\xbf~\x85\xdb\xbdd\xe8\xb2,\x1e\xf0\xe9]\xc7\x97,\xb7\xf2_N\xdf\xbe\x11N\xbd\xb3\x94\xc4\xe5\xf3x\xb6\"6\xbb\xd6**\xd2\xcd2\xc9\xaa\xa8$\x8bJ\xf9\xb0cB|\xeb\x9aQ\x1eT\xc2R\x9b\x17J\x10\x97z\x95\x18\x92\x99\x9c\xa0X\xd8\x19\xe0<\x9f\xe1\xf0X\x14]\x12\x84\xdd\x19,TX\xf8\xd7C\xeae\xddf2\x84;\x01\xd3f\xba0\xe0\x97~JB\x8c\x9a\xb6\x07m\xd0i\n\xeb \x01N\xd5\xb0cI\x81\x931MM\xd3X\x13\xf2>\x08\xf5\xdf\xad\xf5\xdf1\x9cN\x08~\xc7\x8f.$\xec\x85\xb6~\x9c\xa6o\x17A\xd8\x8d\xf9n\x06\xb55k\x9b\xbc\x11\x1a\xa6<\x17qE^\xe4\xb3 \x9clCi\xf8\xf0\x07IfW[\xa1\xe5\xbdE\xa1\x82\xfe\x8b\xa4\x9aQ1$c\xec\xaa\x86\xebmj\xf3\xd5y\x1d\xcf\xca\\\xcb?\x8b\xb2\xce\xe7$\x15\x94\x86W\xefGE\x01\x854\x9e\xbb\xe4E\x86\x8eos\xdc\xac]b\xf4mv\xd5\x1b&\xdb\xb8\x1d\x8b\xf2\xa5\xee\xc7\xa2\xb8\xba!\x8b\"\xcf\x8a\x9e\x07\x87\xc9\x16\xb4[\x98\xeb\xa0[\x8fc\x1c:D\x91#\xb48v\x882\xac\xf2\xe6\x8e\x1e\xe6f\xb4>\x1b\xa283D\x9d\x0f\x9c}8D1(\xd2\xfd\x00&0\xeb%\x13\xb3\x9d\xe6\xa0\x90^\xc2N\x083\x8b9\x94pl1\x1cd\x8bE\x92\xa2{W\xff~\xde\xc4\x8fT(\x8c\xbe\xee\xaa\x1d\xb0\x0b3\x17\x19R\xdc\xb1]\xd2\xa3E\xfa\xcak9\xc66}\xd1\xd7^\xf2\xa6U\xc2\xa5\xaf\x89\xf1\xe3\x9dy\xf9\x0b^\xdb\x91\x97?g\xebr\x99\x14B\x97\x87<\xa7\xbe\xf25\x8b\xe7U\xd7\x1a\x19\x1d\xb8\xc1\x13\x89\xf8Ibd\xfai\xad\x13tc\x0e\xb1E\xbc\xd5\xbe\xa6\xffl\x04\x9d\x0b1fN\xed\x97\x18\x91\xd1\xcck\x8c\xe03\x1cy\x8c\xdb\xc0?\xe1t\xbf\x9b\xfa\xbd\xcfZn8\xf7\xa8\xb5\xb4\xe2\xd2\xfc\xbe\xe6\x15K\xbbY\x19Rnf\xfe\xd6\xba\x83\x83\xbd\xad\x93\xbb?\xd9Z\xfe\xdfZ\xfa\x1f\x18\xabU\xf6W\xdf\xdc\xb9\x10a\xe2\xc8\x0d\xfaOy\xa2\x9b\xd9\x03TAE\xb3\xb8\xa87%9\xad\xe3\xd9\xe5\x872\x9e\x1186\xbd\xe1\x04\x9d\xfe\x1b\xcd\xf2\xac\xaa\xcb\xcd\x0c\xdd\xdf'\xecYEkR^C\xfan\x06\xec\x99\xe5\xaaA\x1fx+k\x05\xde*Y\xe0\xad\x92\x05\xde*ww\x03\xc8\xa6e;\xf0Vi\xe0\xacqpkRU\xf1\x92`\xae\xc6\xbd\xb3\x90\x99\xd0\xd4\xad\x93J\xa7l7\x11\x8c\xac\xb9\x8bW\x9dUC\xf5\x05\xcf\xedC\x8f`\xf5\xa9\x02:\xfai\xd8q\xa8\x1a\xad\xf5\xfb\xed\xf12\xa9^\x96\x84\xa47o\xe25\xb1\xe7w\x90\x86\xe4S\xd2\xf2\xc7\xd1\xae\x1d;\xc4\xa5\x0b\x9d\x91\x80\x97Q\x92\xcd\xc9\xa7\xb7\x0b\xca\xa5\xfc \xee\xefS\xda\x9d\xcb\x87Y\xf30q\x0d=)WZ4BX#}$\xb1\x12e\xf4i\xf2\x1a\xb9K\x17M?\xc7:\xb80 \x1dX\xe5\x85\xa0f5\x0b\xc1\x13\xe7\x05\xfe\x10\xf9\xf8^\xb4\xbf\x98\x89\x90\xb4\xd5\x83j\xb6\"\xeb\xb8\xfb\xb4\xd5\x88\xf2\xbc\xdd\x95\xda\x0c\xef\xe8\x946\xa7\x1f{\x82cg\xfd= \x9f\xe2u\x91\x12\xefl\x0c\xc6v\xc8\xf7\xc3/ \xc3\xadW\xff\x96*X$G\xc6\xedp\x07\n\xda\xfe6B\xf3\x86~03\n\x87\x8cG\xf9\xc3`\xef\x8c\x9c\xed \xc5T\xef3r%\x91>\xb9F\xab\x8f~'\x1d!TP\xdd~E\xb1g\x90r\x97\xa4\xca\xd3+\xe2w\xb5\x82\x96}[G\xf3\xa4\x8a/R\xc6]-\xe2\x19\xc1\x00Q\xdd1\x84\x18]\xfb\x92<+\x92\xeaC\xbc\x94\xd9C\xfd:\xd0G)\x1e\xa2A\xb34!\x99\\\xc1Nt\xb7\xdfL\xcbxh\xd62\xfah\xed\xffm\x80\x91\xe4\x1e\x05\xba\x8a\x82\xa1\xd4\xa7\xf3\xa9\xc4[\xad\xb7A\x8a\xbb\xf9;\x03SY\xfa\xa9!\x8cb\xe6\xef?2\x06Q\\\x0cEP\xd4\x86\xb0[17\xf9'\x86\x00\x8a\x99\xff\xad\x8e#^s\xbe\xb7\x0d\xd8\x1ce\x0d48\x94\x82A\xae\x06CL\xe5\x8f\xe8\"\xc9\xe6~\xb6I\xd3\x90\x7f\x16\xf0X\x1f\x14\x9f1m\xad\xd2\x04\x7f|\xba\xb9\xa8KB\xdf\xce\xd5\xb7\xe4\x13\x99mj\xb4\xd0\x11\x7f\xd3\xc7\x9d\x18\x8fi\xebA\xabB\x13\xf01\xed=\xa4\x15\xdbJd\xe5g\xc82\x85\xb0\xb3\xe1\x87M\x92\xf2f\xae\xa2w\xcf\xde?{}\xf2\xe1\xe4\xfd\xf9\x0f?\xbd\xfa\xf1\xc5\xc9\xfbS\xd3f\x82#Xi_\xd0\x0f.h\x9b\xef\x99\xd4\x84\xed\xaa\x0f\x10r$-X\x9f\xfd\xdd\x90\x17\xaf\xe6\x13Xc\xe2\xfb\xf6\x86\xc0q+-\xc8\xac\xd1\xe2\xf1\xffY\xd8\x17\xfe\x00\x9d\xfc\x98 \xc5\xfe4\x99\x8e\xdao [\x14\xa5\xbd\xcbm\x17o*n\x0d \x84`\x1d(.\xe8y4\x96fe/l\xf4R\xc8\xc3xt\xef{\x83\xbe\xbb\x94\x08WRi\xcf\x02\x88\xd7\x06\xed/\x89Vy\x85\xbe\xba>\xff\xf3\x082\xfc#@ 3I\x80\xbf\x17\xbf\x8e`\xca\xc5\xdcY\x9e\xca\xe8(\xde\x84\x8a\x13^p\x86_^\xc4\x15y\x17\xd7+\xfe\xa9\xfcy\x04T\xba\xb3/\x80\xaa\x03\xc9\xc7\n\xca\x16e\xd3\xde\x80\xd01\xfc\xe9\xfe\x17\x98\xb8l\xadW{\xb2\xf7h\xdbO\x0f\x1fn\xad\x1f{\xb27` \xf4\xef%\x9a\xa9\xbf\xee\x9c\x1bG\x9bdv\x01\x89\xb8I \xd5\xeb\xb8\x18\x08.\x9e\xc3@\x84\xf0d\xc8\x1dX\x1a\x0chu\xbe\x9b![\x83j\xc8W8\x15\xedj\x87$\x82\xa1\x1fj\x9d\x85\x17C\x9e\xc42C\xa86h\xb4\xe0\xe5\x0f\xf6\x86\xdc\x81\x87Y2E\x14\xbd\xf6I@E\xc1\x02\x8d\xb6\xad\xaa\x1a\x11n\xfdP+5\x89x\xeb\xda\x81\x8b8\xda\x87\xda\xb7\"\x8e\xf6Cm\xc3\"\x8e\xf6C\xed2 o\xf0\x87Z\xafm\xe1\x0e\xfeP\xeb\x98\xed\x94\x08A\xb9\x00\x1e<\x80;\xf9\xb5\x98\x98K\x82^.\x12\xf6b\x98\xcdd,\x92g\xf1'\x99\x93\x8b\xcd\xf2GrE(\xe7\x98d\x8b\xdcR_\xde\xfaO-\xael\xac\xe2\x9f\x93\xaa\xce\xcb\x1b\xb3\xd5\x9a(\x8cy\xb07+|s\x1d\xaa\x16\xcc:|.Y:\xdb\x07U\x1dSi\xc46\xd4\xc2\xb5\xbd\xc6\x0c\xc3\xd2\"\xaf\xf8\xa1$d\x82\x9b\xea\xdc,4\xa9\xa5Z\xe5\xd7/\xe8\x02\x9a31\x89\x12\xa7\xa93\x1c\xd8\xd2Q2M\xa5 FY-h\x91&\x17\xafI\xbd\xca\xe7\xd5\xa4\x8b\xab\x9dd0\x14u\x035\x10\xbcu\xdc\x1d\xc6\\\x93RJ\x14\xca\xc1\x04\xfc\x06eI$\xb7w\xbe$5S\x16\xf0\xceE\x05n\xf3\xad\xd6\xe3\x8f\xfa\xd5Wq\xf5~\x93\xc9\xaa\xecg\xbf\xdau\x19\x17\x05\x99\xbfk\xce&\xfaT\x98\xfa\xac\xe3\xc2\x97\xd5X\x1d\xa5\x89@\x84\xe4\x91\xc0\x89\x1a\x13j\xd1\x01\xc7>fD\xd4T\x8c\xe7s\x7fz\x166\x1cp`\xf9\x80\xe3\\\xf3\x11\x7f \xbf\xdb\x14\xf3\xb8&\x1c\xec\xbe\xda\x94\xde\xd2`\xd0\x11\x87\"\xc1\xbcA\x02\x12\xc2\xd4L\xbd.\xc9\xcd\x04<\xa4L\x03h\xc7Y\x03\xbb\xee@\x14\xe4\xef\xe94\x1a\x9a\xc7\x8c\xf5m\x1f\x82z\x9bV\x87Z-1\xbbBc\x17j\x19\xaa\x8c\x8f!\x83\xfb\xb0\x0f\x13\xd8\x0bBd?\xf6\x9fB\x0e\xdfC\xf6\x14\xf2\xdd\xdd\x00\xcai\x8e73\xadK\xb6\xdc\xc1%\x17\xdd\xbfy\x94\x95 J\xf3e\x13\x86Jc\xbd\xa1\x16\xb39\x8b\xc1Fd\xe8\x90a\xcbtE\xca\x8b\xbc\x1a\x8a\x04\xb1\xd5B\xc9v\x99\xf3_{\xd9l\x0d\xc0\xbf\xcf\x82M\xbd)\x06\xce\x84]\xf0\xce(C\x7ff\x8b\xca&\xcaWX\xcb\x86*\x8dYNKx\x05P\x04dAE\\lk\xd4\x827\xb9\x83*\x13Qr\x83\x08\xd0-B\xfa\x99*\xf4\x99\x9ex\x98F\xb8d\xd70h\xf4\xde\xab\x10\xc0\x04t\x04\xda\xc7\xb0m9\xbf\xc9Qk0\xe9G\xc4\xab\xca\xad\xdcu\xb7\\m\x93P[\x14>\xd1\x9d^\x889\xcc\xc5G\xaeHy3\xce\xb1Y-R\x86<\xe2I\x98\x9d\xbe4$\x1bkU\xb1o*\xde\xb7T\xd4tL-K?\x0f\xc1\x988\xb1[0\x16D\x08\xb3\x10\x16!\x14\xe8\x14\xbf\na\x8d\xee\xab7\xf6\xb1\x80n\x85p\x1a\xc2\xf3\x10.Cx\x16\xc2\xdb\x10\xde\xb9A\xbe[,+\x11o;~\xd0\xadL,V&\xdeje\xbae\xdb\x95\xea\x16\xcch\xdd\xa7A\xf9\xa8\x00\x16C%\x96\xf9r\xb6[\xa4nq\x0fk1T\xec!*l\x85\xa5b\xb8$7x\xd3\xbf\x98.T#\x9a;\x07\xde\xc3\xff,\xe0\xf1\x9d\xd7L\x0f\xe3D\xe3\xd9\xe9\xa3>\xf9\x92\xdc \x0d1%.u-,\xe2\xff\x97o\x93f\xa4\x8f\xbfl@\xe0\x96\x11\xc4V\\\x93H\xd9\n\x9a\x89)\x98\x1b\xa2\xe2m1\x9d\x9f\x85\xa8G[H\xab+\xd5l*\x08Q\x8d\xa6>\xc2\x93\x1dC\xa9\xcc\xf1\xcfu\x88\x87B\xa2\x0dD1\x9b\xe6\xd17\xdf\x94dq\xc6\xb2\x95\xee\xec\x85\xa8=\xdb\xd9gf\xbf\"\xed\x91\xa4\x99\xfb\x0fC\xb4\x0d\xee\xb8\xbe\xd0\x9fU\xf3\xd3\x98 \xd3\xb58\xa7C\xb2\x15J\x1c0\xce\xc5'8\x82\x13\xc4\x1d?\x08\xa2y\x9e91r.Eb\xe4\xe1\x7f\x18m\xc0\xe8&p\x04\x9fD\x10\xf9\xe7p\x04\xf9\xf4\xf4,\xc4\xf8\x95\x0b!\xf7\x9c\x06!\x86\xac\xd4\x9c^\xcf\x83\x10\xdeb\x96\x17\xc4\xb2\x10\x06\xd3\xfa\x8e)\xf1\xd8\x84H\xb6\xf2\xaf\x04\xf5\x9dg\xff\x0d&K\x91^W:\xb2\xf6\x16\xe5\xb6\xd9\xf4\xed\x19\xd2\xb4\x80Y\xb8\xa5d\x19\xd7\xe4\xff$$\x9d\xfb\xa5\xcf\xd8\xd6\"\x08\xc1\xab\xf7\xbc\x10\x0e\x1e\xdd\x05\xcdr\xc9\x81e+\x18x\x9aJ{\xa7,d\x0c=\x83\xef\x1c\x1f\x0e-)\xb8\\\xcb\xbf\n>P\xa0\xbd\xc3\xcc\x06\x19\x8b\xd0\x96a$\xbbw\xff\x0d8K\xe9r\x80\x87\xfb\n\x0b\xf8\x1c%\xbcK\xcc\xddZ\xdc\xc5\xfe8tt\x15\x1c*\x82Q\x89\x9b\xf4\x8b_62\xb8CV\xf0\xf0Ny\\\xc7\xcc\xaaC\xe5\xce&v\x07\x94M\xb2\x91\x87\x98\xb3\x153\x0b\xc6\"c\xde\xc3\x80\xf3\x9e{\x8c\xf7\x8c\xadi\x02m\x85\xc9\x1cw \x9b\xcbq?Ty\xe1\x87\xfb!\xec\\P2s\x12\xf1]\xa4\xfc\xddM\xc05\xb68\xa5Hs)\x9426c>\x0ca\xe7\xfc\xce\x89\xe2\xc3;\xd8\x81\xf0/D\x14Y\xde\xbd\xeb/\x9b\x14[\xc1;\xd86\x92D/\x92,\xa9V\xfe\xc3\xc3;\xc1-\x87D\x89\xb6\xd2\x1b\xd9\xde\x9d\x8c\xec\xf1\x97\x8dl\x1b?sS\x913t\xf4?7\x95\xedp\xf26\x84\xd8\x9e\x98\xd0V\xa6Tj\xa7$\x97\x92\xaf\x87\x8f\x1dB\x1a\x9b\xca\x94\xd2\xbc\x10\xa9\xc8\xc3\xef\xdc\xee\x0e\xba\xc5\x10\x15r\xa8\xdc\xb2\xc4\xf1\x9d\x8b\x83\x9b D\x9b+\x0c\xc9\xcb\xcf\x8d\x82\xeb.\xe6\x8a\xeeBj\xe2\x1f\x852f\xac\xa2\xba\xc8uw\xf8\xdd8mc\xf5\x19\x88\x81[`1\xa5\xd5\x18\x84x\x8d\x1e\x02w\xa1\xae(%\x97\xb4\xa5zb;\x9a<\x1e\xdf\xf9N[\xc2\x11\xac\x85\xc6\xa1\xec\x88m7\xfeR\xbcZ\xf28\xa3K)\xc1\xed\xefo\xb3J\xfb[p\xa4\x02\xdd$l\xb7\xd0En\xc1\x97\xb1\xf1n\xc1`\xcaq\x1el\xc1Pn=\xd0-N>\xb9W\xf7\x1fQ\xe8\xb2\xd4\xd3\x9cA|\x14\xf0\xfd\xbd\xc7\xf6w9\x9a?d\x12\xfa\x16\xfc\xa0\x1c\xd6\x81JO\x0e(\xff\xb7\xa0<\xdfJ\xe1\xffV[\xf2\x7f\xce\x99\xc4\xbb\x85%3\x16c\xa2\xfc\xdd\xd6\xf7}\xe5\x97j\x8b~-Z\xc1\xf8\xb3\xf9\xb8An\xad\xa0\x91\xee\x8c\x9c\xcb9\x18\xcb\x7f9\xe73\xef\x96^\xcfc\xf9+\xd6\xf3\xc8\x93\xe8K\xf8'9\xe2\x91\xfc\x92\x1b\x0e\xdc\x86P\x8e\xe7\x87\xa6\x8fB$(t\xf7\x1e\x8ca\x7f\xa6\x07\xc8\xee\xd0Mu\xe0\xc8\xee8\xb07\x16k\x8a[\x9f\x04}\x03\xe2\x9c\x99\x1d\x96\x81\xcd\x8a\x18\xa4=\xe8\x9bxM&\xc0\xa3.|\xfe<\x14~Q\x94V\xe8Y\x95!\x92\x8f\xfd\xdc2\xfa\xd1Q\x8d\xecVN\x94(\x8d\xb6r\xb2\xd1@\xbbw\x9b(\x8aE\xe4\xaam\x16\xdb1\x1eU\xbc?\x9c\xcc\n\xa4\xf7\xd6\x92\xd4\x82\xd3\xac^\xe6%k\xce\xaf\xd5\x8c\xae\xbf\x0d\xd0U\x83\xec;\x84\xbd4\xec\xecX|\xb72\xd8J\xc9K`\xa1\x0c\xb9\xd2\xfb\xcc-u\xa7Z$\xe8q\xe8\x16\xe0~\x05\xe8. \xc7hno?\x02\xb8\xd6\xf9\xa9Q\x13\"\xd9\x11\xa5\x06>\xb1\x1c\x1f\xaa\xd7n\xcb\x1f`Z\xf3\xfc3_\x11\x14\xef7\xd9\xf3|\x93\x0de\xb0\x1a\x0d\x0buB]\x98\xfbDl\xb0\xaf8)\xde\xd7\x87d\xc8 \x7f\xf4\xb4\xf4K\xdc\xcc\xcbm\x951\xe2\xcf\xb4V\xedeX\xf2\xaa\xaf\x08\x0fA\xe7^es\xf2\xe9W\x03\xc9\x87\xa4\xc0\xe4\xcbj\xe7N0\xf2\xb2\xcd\xfa\x82\x94\x1e\xec4\xbe\xd9p\x0c\xf7\xf7\xc1\x94&\x0d\xee\x04Lt\xb7\xde%t$\xbdkX\x83\xbb\x1f=w@\xd8\x96\xae9\xd8\xc8\xb6\xcc\x92\xc7\x916_C\xd4\xb2\xb3\xb6\xbf\x87\xf2\x9c\xa7TG\x1f\x8c\xa1x\x91_\x08+v\x80}E(\x0d\x03\xa5a\xf1\xda\xe9;\xe8f\xe1y&F\x1e\xach\x8d\xd7\x0b\xec\x1f@\xc6\xbd\xcd\x19Dm\x8bE\x0bf\xd8\x19NY\xa1\x16\xb4\x9b\xd0\x1aqKV\x025\x82\x19sK\xf0\xbb+\x00\xde\xff\xcck\x88!\xcb\xb3\xfb,\x0f0\xf3\x1b\xf3Bp\x19-\xf0!d\x91\xf4\xf1b\xb1\x83\x1b?.1\xf5\xb0\xc5Ys\x1e\xcb'2=\x91\xf0\xd5\xec\xb19\xcd\xf7l\"\xad\xf7\x1fV$s\x82+h\x8cM\xd5\\\x1a\x1a\x88U\xd2\xcd\xca'\\\xed&\x86\xbb]\x7f\xe2\x14\xd0\xf4\xc5\x96E\xb2\xc3\xba\xcc\x15\xdd\xe2\x96\x93D-\xfd\x8c\xc7]\xfc\xb463,\xb0~\x0d\x8e\xbc\x03\x991D\xc3\x06\x97v\xe6\xebvL\x16\xb1\xd2hO\xd1qJP^!\x19\xd5\x19\xe3\x88Z\\\xf5\xae\xc8\xb4\xbf\xdc6xdA$q\xba+\xfesM\xe2)\xe6BW\xc75\xc1\xf0\xbev\x14p\x0c\x1ebY\xe1\xe1\x11\xb3\xc0\x14\xd8\xaet\x81mvp3dJ\xa7\xbf\x02\xb2\xb0\\\xc6\xdb\npV\x84iq[]:\xd5\xc4\x07\xb4\x81\xe8{\xd8\x13!n8U\xfeP&d\x0eu\xce\xf3;C\xdc\xf6\n\x86z\x15\xd7\x90T\xd9\x1fj\xa8W\xa4$;\x9e\x0c\xb7\xd9\x1dFU\xa4 \x95\x18C\xd8\xff\n\x00\xee\x11\xdf\xaf\x05^'>\xb5\xd9c\xfc\xafN\x14\x19''!\x11eN\xb7M]\xb6\x154S\xcd\xac\x95m\xfb\x070\xbe\x81\x06\x8d\xd9\xfe\xe9x\xbb\xda\xdc(\x03~\x890\x0e \xee\xfdkB\xa5\xaa\xe5k\x1c\x07\xaa\xd2h\x0c\xee90\x90\x8d\x97\x18\xa0\xe6p/\xd4\x0bBH\xe1\x04\x15h\xa8\x1c\x93'\x05\x95k\x9eW\xb8\x1f-\x01\xd8\xbf\x00\x1c\xcf7eI\xb2\xad\xa0\xe2\x08\x11!w\xe8\xb4u\xfc\x15\x1f\x04\x7f\xfa\x95tG\xfd\xfeG\xccu\x14\xf5\x89\xf4\x92\xbb\x95\xb6\x9b\x00\xe6\xd7\xb0\xfbU\xe8q\x17\xf4#\x00b\x83\x87:\x97\x99\xda\xc7W\x99\x05')o\x17\x1fn\x8aQ:\x80\x11\x1b[\xd8<|\xa5\x8d\xf8cr1b\xe0\x8e\x83F\xf07a+\xee~\xe0\xe7K\xf25t\x8f\x0d\xcb\x8a\xc9\xf1\xdb\xdc\xeaW\x80\xbf\x12\x14\xe3+\xcc\x86m\x82&\xfc \x9d\xd4\x90\xb8\xb4\xf54\xaa\xadf\xe1\xbe\x07z\x13\xa9\xe8D\xbe\xce\xd9\xc4\x83\x8f\x8c\x99\xc8\x98Y\xf44\xe8\xc6\xc3\x08\xfe\x04>;\xd1\xbf\xc6,gi\x9e\x8d\xa2X\x8e\x93\xfc\xcb\xe9\xdb7<@\x1feMsE6\xfd\x1a\xe7\xab\x88\x8d5b&\xb6\x89H\x97lb\x9f4-\x84 \xce-\x81W\x93\xcc\x97k.\xda\xac( a\xfbH\x14\xd09\xfe\xedW\xc6\x99sM\x19\xc0\xba\xb9\xcf\xb5\x19\xc9\xa0R\xcf\xc9\x11_D\x8ck:h\xf1\xec\x0e\xc2\x06\xed+\x97\xda\xa8\xdc1\xb8v\xb7\x88}i\x8a\xb0\xa6+}\xe9\xe4\xeb\xf6f\x87\x85\x88\x96\xed6\n5\xb6+\x9ekN_\x89\x00b\xf8\x1d\xfba\xfd\xce=\xca\x04\x1b\x8d\xaa\x8a\xf5\x13\x11\x0eI\xa0I\xa3\x9a\x0dB\xf5\x9e\x99\x07\xb3M\xbed\x131]0\xbbV@\x9a\x8c\x11C\xd5\xdfx\xd3\x16\xb6\x1f\xb2\x0c\x1e~\xef\x19Rl\xca8k\xea\xff \xf6\xf7\xb4\xd7\xe5\xd6\x98\xbc\xa2\xb0\xf5\xcb\\\x17O,\x9cT\x99r?P\x99\xf4\xc3\xf7\xfeF\xfepE\xa0$\xf1lE\xe6\x10\xc3*.\xe7\x90&\xeb\xa4\x86|A\xc7\xcbMT\xa0\xdcd\x95g\xa3V\x0eD\xa2DW\xb9>\x87.5\x93zK\x03\x97}&\x92\x08i\x9b\x19oy\x00\xe3\xac\x0f\xc0\x01\x00\x00\xd0_\xfe8M\xfd\xcd\x97\x8e\x0fi\xa0\x88\x97\x13\x82\x0cmfm\xe56p\xcdN\xd0-\xdb\x91\xb4/\xd8\xa9\xbc\xc3Q\x03\xcd:Xv\x04\xa5}\x89\xc4\xb9\x9aE\x1a]\x85o \xab'J\x8e\x0dtu-p\x1f\x1cla\xc7]\xa6\x95\xaa\xd9\x97\x0bPD\x11\x87\xc7P&_]\x89\x99\xf1\xfe\xa8o6\x8e\xd1\xa3\xd4\xe2\x0e\x06Qdh\xb2\x8a\x99 w\\\x08J\xbf\x0e\xd9\xaa\xfe\x98\\\xf8A\x10<\x85\x1d\x9fB\xc0\xaf0\xa9A\xcb\x8c\xff)\x87M\x00\xc4\xaf\xf8\xe5\x87\xf3`\xc6\xdft\x89\x12s\xcbi\n0;\xc5\x11\xe5\x16\x16I\x16\xa7\xe9X\x80\x8d\x071-; %\xd7\x85bL]Hc\xeaQ\x8dm;l\x10\xeer\x01\xb70\xde\x8c\xfa\xdc\xcd\x86\x15\x9ck\xde\xb2;p\xd2G0\xeb\xe7\x12Q\xac\xe2\xb0(\xed+Q\x8ck\xeeO-\x91A\x9d\x8cQEa'\xfe\x04\xfaY\xfeu\xe56p\xb1\xa4\x1d\xb9\xceRTj\x99K\x95cf\xd12!2%\xec\xee\x16\x97\xf8i\xd6\x1a\xd2,\xc0\xf1`\xbc\x1dxo\x90\x8d1&}\xef\xd5\xad\xeel:1J\x07%YT\x13X\x0b4\xd1\xd3sL\xa1<\x81\xe5p\xad&\x05\xd7\x04n,Ue\x04\x9c \\\x88\xaa\xfd\xa9\xb4O 5\x0c\xf9u;By\x93ay\\<\xf8\xc3\x87\x03\xf1\xe0\x87?=x\xfc\xdd\xb6\x9f>\xde:\xa5\xe4\xc1\xf6\x91\xef\xf7\xf7\xb6\xfdt\xff\xbb\xed\x13\x04\xec\x7fIF\xca\xd6+\xa9\x94\xf9\x8d\xe2\xed\xeb\x07\x93\x1b\x95\x98,2LT\x93\x8aY5\xe9\x07\x80\xb5jq\x80Q\x99\xecm\xebV\x9d\xe5Z\x8a\xa1$i\\'W\x04~z\xffc\x08\xd7I\xbd\xca75\xac\xe2\xab$[B\x0c\"\x13E\x84Y\xbe'\xf0\x07\x19\xf4\xf4\x0f\xf2\x1d\x7fZ\xe3S].Bh\xa0\xf8\xa9'\x97\xd6Z\xf5w\x9f2\x89ep\x82^b\x84\x9e \x9f\x0c \xcf\xf3M:\x87,\xaf%DJ\xb2 %\xc9f\x04.\xc8,\xa6X\x93/&\x80\xb3\x16\xb92\x11\xc3:c6\x0d$\x1e\xc4)\x1f!\xe9\x05h\xa3P\xfb\xde\xef=\xb7V7\xc6\xe9 \x9b\xbfwS\xa2\x89o\x8b\xda\x084\xe09\xd5\x98\x9eeA0\xc0\xb1 \xab\x80\x14\x99\x90\xe1U\xa6\x0c\xc2E\xc3 ,{\x8b>\xec\xbfr~\xce\x15\xabz\x1eA\x97\x91\xc6\xca\x10\xf3\x91\xa9C\xe1v\x81\xee\xb8W\xf9\xa4+\xce\xda\xfaKM\xf8\xed\xb6\xd0\x95\xbe\x03!B\xeaWY\x88\xcep\x0c\xbae\xae\x038\x86\x1a&\xd0_\x96:\x80 \xf8\xb4U8\x82W,G\xf8_N\xdf\xbe\xe9\xcf\xdb\xc8O\xf2\xcey\x1b\xb5>U`\x88\xef\xdd@\x90Zq}\xa6\xbd\x85f\x9a7.\x17\x7f\x0f\xfbR5V\xf7\xeb\n\xdc>\xed\xde\xd1\xe91\x1d\xcd\x18\x9b\xac\xe4e\x87\xca\xf6\x89J\x91'YMJNG\xe8\x9e\x87yN*\xacC>%U\x0dI\x06\xf3|\x86\xa1\xa9\xb5\xf9Th\x91\xadh\xce\x14\xcd(\xf9t\xbb\xc9\x16\xf5P\x9e\xe9\x11\xad\x95\xfe\xb21\xf9 \xea\x8c?\xdc\x14\x84\xeb\xfbN>\x15dV\xa3\xaa\x8f}\x14\xc2\x12\xadi\xe9\xbcU\x90\xd1\xc3\xd3\xdbd,\xaf\xcc\xdc\x03\x96|\xe0\xaau\xa3c\x9e\x92\xf7\x80Y(\x92\xe9\xde\x99\xbc!!Q\xb5\xb9\xa8\xea\x12s\xc1\x80\xe7\xc9~\xa6g0\xc1\x0cXHb\x1fx\x01\xd3\x86\xb9a\xdfb\x90~\xeb@\xc3\xd9\x82\x13\x89J\x9b\x8cT\xb3\xb8 >\x91\xc9\x9f\x1e\xfc\xd7\xfe\x83e\x88\xb9\x9d\x94g{\xf8\xec\xbf\xbazP\xd3\xd0\x8a\xc1\xa15\xfdkzg\x1d\xed\xa9\xbd\x7f|\xc0\x1e\xee\xbbv?\x1fdP~\xf6\xeb\xc6\xa4wG\xa3\x95\x11\x9b\x97D\xb3U\\>\xab\xfdZ\xda\x0b\xe9\xe9\n\xcb^\x86\xa6C\xf7u\x1e\xfe\xbc/\x8e_j\xdac\x8a!;\x98\xb9^ \x0e\xfb\xf1{\xfe\x03k\xd0_;t3;M~%\xf8\xcc\x10\xb4:1q\x0d\xf5\x01\xef\xc5K\xcdpsL\xf5\x95\xf3\xc0\x15\x1f\xf0\xda\xb9\x0cA\x1b2Sh\xd2\xec\xa7\x0e\xf4\x01\xc1)\xe01\xdd\x12\x13\x84\x00\xb22q\xe1\x17A\x93@Z\xdb\xda\xad\x9f\x19V#\x86#\xf0\xf1\xee\xc2\xfb\xbe*\xc8l\x1d\x17\xf7);\xf8'/\xa0\xd4\xed\xf7\xd8\x89\x9ep\xd6p\x84\xce\xfc\x1d\xdb\x81\xe9Y\x80i\xcf^\xe43\x0cZ\xea'\x98\xca\xd0\x86B\x1b8\x02\xcf3Q\xffq\x19\xadi[\x1b:|\x84Q\x81\xb7\xaa\xf9t\x83$\x86\xfe\xef\xda\x9c\xd2$n\x92\x18c\xb6\xcf\xfd\xd8h\xe8\xa1\xe3h\x86\xe7\x9eO\x13\xbc\"\xc2\xff\xb9\x93\n\xbf\x7f\x89\xbb\xfbW\xfdu\xe7 \xbd\xdaC\xa3Kr5\x94\x93k=\x94Xk9\x98\xb0K\xa6\x82\xd2~{1\x94X\xeb\x9c%\xba\xd5e\xb3\xbd\x16}jSH\x9d\x88>\xb5\xcd~\x1aL\xf2{:\x94\x13\xeb\xb9\x18\xae\x16J\x97B&\xef\xbfz\xc6\xd3\xea\xbf'\xcb\x93O\x85\xef\xfd\xdd\x9f\xc6\xf7\xffy\xb6;y\xf0\xe0\xf3\x83\x07\x81\x17\x82\x97x\x9a\xef\xder}\xf5\xf3\xe6\x8c\xf5(k\xf7\x9e,\xf0\xf0\xf6\xec2\xb4(x\x03&2M\xe2\xc7,_\x7f\x87\xebGk\x00\xe0\x17\x9c:\x04\xef\x0f\xf2\x1d#\x87\xbd\xe7\x1f\xf8\xa4\x07\x94?\xaf\x8d\x8a(f\xcd\xf1MI\x16\x06K\x0e\xa1\x91\xec\xce\xdf@\xdbE\xc1\x8b\x00\xbc\x86a\xa7\xd2^\x08\xda\x83I\x14\x94\xc8i\xad\xcb(\xa9^\x96\x84\xa47o\xe25\x99\x07~e\x0d\xeeN\xfb\xc2\xb4sJ\xf6#?\x93\x14\xd3~1\xaag\xe2\xda\xc20\x05\xd1\x04\xd6\x9b\xaa\x86\x0b\"Y8\xf0)\x9a\xdc\x7fO\x16\x81\x913U\x0bk\xc5\xe1\xfe\x98\x8f}\x02\x0e\xd9A\x16\x1b\xbc\xa3_\xd9,\xcamW\xa4\x14\x8e\x0b8B\xb1\xdc\xdek\x81\xa1\xb7\xf7\x1c\"E`\xd8\xee)\xf3\x9b\xb5en\xa3\xe5\xca\xf1\xbe\xca\xed\x02\x85\xb6\x96\xd2\xae\x0b8\x86\xdc/BH\xa9 gL.+\xca\xb8\xdb\x01\x8e, =-\xec\xb5A\x15X\xe6v\x88\xc0\x18\xd4\x01\x8e>\x0c%\xae\xdc>p\xc5!\xd0\x1f\xc8\xad\xd7V$[6\x91\xc7\xac\x9d\xdd8\"\x03\x12\x90\x95?\x0f\xe1*\x84\n\xcd\xbb\x1c\x16\x029\xa1M\x9aR\xb6\xeb\n\x8e\xc1\xbfA\x91y.\xfc\x07\x19\x9f\xe8/\x05u\xf1o\x02\xc62/9\xd1\x1dV\x93q\x99\xf6_\x06%\\)\n\x8c\xc6\x88\x80\xee\xa9%OhD\xe9(Bh\xe3_\x850\x0f\x82\x88+\xad\xe0\x18\x96\xf2\xef ,\xbb&]N[\x0ddl\xa3\x11\xbb\x0d\xb6\x00/\x8c\x051l\x01f\x18 j\xb0o@\xe0j\xa4\xa5\xc6\xc5\x98\xd3\xa9\xe9\xa9\xa2\xdeZ\xe7W\x84\n3\xb0t\xc8\xfaE\xf7\xefEK\x1b$\xa4\xe4\n\xd3\xdf\xb8-\xc77\x1c\xae\xd6\xca\xb63\x0b\x84\xc6\x89\xee\xca+\x14R\xd3f\x96\x17\xa12N\x91\x1b\xd0\x9acT\x14\xb9\x94W\xd6\xea\xb7\x81\x03\xe8\xdc\xce+\x10\xc4l\x9c\xc5\xb6Z\x84\xfa@\xab\x005\x15iST\xc4\xf5**\xc9|3#\xfe\xd6C\x00\xf52\x96ytNk\xbc:\x9d\xd6nA\xa2h\xc1\x8c\xfd\xee\xfb\x08F$\xa55\x15>hU7\xcc\x9d\xe4\xb9\xb2$S\xb5'\x7f:\x82=\xd4U\xec\x85\xcdmn\xe0\xd7AG\x1cv\xf2\xa4\xd3\x15q\xb1\xe3\xd7\xd3\xcc\xe1\xb2\xbf[\x86\xe2\xf2\xe8\xca\xad_\x8f1\xb7\xb9\xf5K\xe1\xa5q\xd1\x88\xe4\x17\xd6o\xed7\x12\xdd\"p\xc9\xc6\xb5\x81\x95\x011\xbf5\\\xf8\xf7\x9ejd\xb0W\\\x80T$\xbc\xd7&23\xcfg\xcf\xe3\xd9\x8aL\xe0\x9d\x1e\xb5\xe3\x8b*O75I\x167\x13\xc8\xf5uf)\x89K\xde\x8c\x9b\xd2\x85\xf33;\\\xf1;')\xa9 \xbb\x8a\x98t\xf1\xf7\xdd6\x91-\x94\x16\xcd 6\xa8x\xf4\x93TE\xf0 \xbc\xd5W\xba.\xe3\x82\xd7H\xf45\x96\xa4F2n0\xbfG\xdd\xf7\x04b\xfd[\xf2\xa9.\xe3Y\xfd\xb2\xcc\xd7\xd8\xc8F_M\xde\x06\xb9.\x87r\x19x\xce\xee\x920\x81\xec0\x88W$\x9e\xa3\xa1\x87}\xd3<\x9b\xcdHQO\xc0\x8b\x8b\"Mfh\x8f\xf3\xe0\xe7*\xcfBP\x9f\xdc\xc4\xeb\xd4\x1b\xde/\xc3\xf47\xcd\xe3\xf9)\xdaF\xef\x98\xe3\xaf\xdd:\xdf\x0c\x8a\"\xe8^\x84G\xf6\x80\x91\xce\xb6-_K\x02_\xc5\x0b\xf2c\x1e\xcf\x07=\xb4F\xe1-\xc7\x19#\x0fH\x97\xe1\x1dcF?\xe4\xe8\xa42\x81\x99\xbe\xaa\xb8\x1f\xf9\x8b\xfa\xc9%\xc9&\xb0\xe8\xd3\xa5\xa0k\xb9\xc3\xa7\x08G\xf0\xaa\xaf\x8a\xfc\xd9\xaa4\x17*V\xa2^\x0f\x10\xf5z\xa0cp\xd0\xeeD5J\xa9{\xe6FcMZ\x1enm\x0ds\xf0\xed\xf6\x9f>\xfa\x02C\x1a\xf5\xcd\xaf\xa0Z.\xad\xeb \xdb\x1a\xec\xc0\xb0\xd1\x0e\xe8\x8fI\x93\xc29\x17\n\\3\xba\xf6\x87\xc1\x14\x95h\x12\xa7Q!\x99\xb5\x94 ^1\xe8\xa7\x85lv\x1c\xadI\x1dS\xa4\xe6\x7f\xb24\\6\xe5\xe6f\x1b\xe5f\xdeUnn\xacZ\nf\xd0\xd4Isk\xfb\x08T\x0dl\xfb\x16\x1a!\xd8\xe813\x88i\x9b&\xc3$\xb5\x08;\x8fH\x88\xabL\xb1m\x89\x003\xf8Vhn],\xdag\x98\xee\x04\xb7\xc3\xf0X7[\xf0.\x80\x1d`B,8\x82Y\xcf\xfe\xa2[\xa8x\xcd\xf8\x1d\xfc\xc0\xdfca\xd89\xfb\xf4\xcbm\x08\xb3 \x88\x10\xd6n:\xd7i\"\xe5\xe8M\x08\xbf\xdc\x062c6\xe9\xf8\xa78\nb\x887I;\xc4\x97\xfd+\xe0_624\xe5\xb8\xed\xb8A\x0b.\xa4\xa3\x8b\x81\xa0W]\x13\x89\x94`\xfeqH2h#*\x8b\xbdT\xb9\xe0)(\xe6\x1d\x1d\\\xb5\x9bU;\x9b\x18'\xd1\x9a\x94K\xf2\x82\x90\x82\xae\x98E`\xba\xb5\xc5n\xe2\xad.\x98\xac\xdci|\x16\x04!\xcc\x18]\xa2\x84J\xd6\xe2\xba\x9b\xa9D\x96M\x08\x1eV\xf3\x02\xfaM\x9fG\x10\xc5Y\xd6i=\xc1XTc\x0eu\xeb\x19\xd9z%e\xf7\xdf\xc8\xd8T\xfd\xf5+\x1c\xd8\xf9\xd0\xadl\xd2\\\x90\x8e?&\x1b\x9b\xf0Qgei9+{\xd9\xd6q\x1d\xec^\x82\xe2\xbc\xec8\xa6O\xcf\xec\xea\x9d\xfe\x1d\xa2E\x1c\xe9wC\xa9q\xd2\xb1]+\xa3\xaa \xb3\x10\xaa\xa1})e\x90\xfey\xe2@\x84\xdd\xb4}\x9bi}\xa6,h\x19\xc9\xa5{\x1d\xcf\xca\xdcO\xed\xa4e\x94.E\xe0]\xe3\x87j\x0bR\x03\x0d$\xf2\x0e9\x1dv\xec\x18P\xb4\x04\xea\x8a\x88s/\x0bac\x10\xb3\xb4O%!\xd64d5\\\xfdoJ\xf6oB\xc9\x9a\xa4\xcd\xa3(\x99i/\xd0\xd1\xc6z\x1aa\xda\x08\xd2\xb1qC\xd9\x122d\x06NK<\xdd\xb4w\xf4:\x9f\x93T\xc0\x9d\xedjZ\xc7\x80\xeaN\xbbY\xe5\xed\xed\xbbx\x14\xe3>~\xaf\xc5\xff\x8f\xef5\xfd`\xcc.*\xd2T@\xdf\xf3l\x95\xa4\xf3\x92d\x13]\x8cq\x16e\xb0v3BM\x86l\x95\xe4\xe1&b\"\xca`\x0b$*\xca\xbc\xce\xff\xca\x9fgp\x8c\xbbe\xd3\xde-\x99R\xab\x89P\x8a\xc6\xc4W\xec\x99\xbf\xa7\x04\x8c\x08|\x12\x89\x99i\x94\xcb\xc6\xd3T\xb5\x84e_Ok\xc3\xa5V\xab\n\x1cAB\x913\x13\xa3\xd1\xba\x19t=\xf9~u\xc2\x19\x0fY\xfcm\xf8\xcbC\xdd\xcbJ\x98\xd7i-\xe8RA\x90\xb5\x0d\xcfTM\x91 \xf2\xae\x17i\x9d\xb4\xf6\xcc\xb0M\x86o-\xf3\x9cR\xc1\xdc7\x9a\xba\x81\x8d\xe8t\x1c\xc9I\x08S\xf3hd\\\xac\x11\x81\x89\\\xb8\xb9\xabnP\xf5\xb8$\x19\xc6\xc2\xda\xb1\xa5\x1bB\x1b\x13[\xfb\xa0\x08\xc5dJ\xd4t\x03v\xd5\x08p\xa3\xe3L\xee\x00;K\x17O\xcb38\x86\xc4\xa7\x7f\x0821a\x8fq\xbd\xe8\x83\xc1V\xb8\xe7u\xe2\xcb\x85f\xcdl\xd2t@\x91\xae_\x7f{\xc0\xa9;\x8e;G\x17\xc5\x97\xb1;\xa7g\x81\xd6\x19FL\xccE\xed$\xd9\x04\x19\x15\x92\x81$S\xd3,*\x7fS\x9ei\xef)\xe4\xf0}c\x87~\xef\x1e\xf8\x0c\x03\xf2\xb3\x10|D\xb8\x86lN\xcb\xb3\xe0)\xe4\xbb\xbb\x01\x0b\x911--\xd7\xfbb\x1a\x18\xe0E\xa1\xd7_eu\xd8\x8e\x18\xb3F\x0e\xdb\xaeu\x03A\x945\x82cfi4Q\x9f\x1e\x888\xc9Hu\xd0\xafE\x11\x1cu6\x0dN\xfb\x12Ui\x8dA\xa8\x05\x0f@\xdd\xc9#6\xa4\x98j9\xcd\xd0\xa8\x9eE\x8e-Y\xfe\x85\x1c\xad\xd4\xd0\xe8?\x04\xfalxg*\xc4w\xf4V4\xfa\xb7\x9b\x99\xf7\xd9X\x06o\xf8\xd6\xe5p\xc0\xf1\xf9\xdf\x8b5T\x7f\xfd\n\xdc\x84\x10\xc3\x1e\x0e\x89aZnB\xf0!\xfbZ\x8b{\xc1\x88\xeck\xe5;\xc9\x89<2q\"\x99\xff\xed\x00\xf6\x0cr\"W<\x03Y\x87\x99\x94\xa2\x1bKs\xab\xf2*\x03\x9b\x1a\xb7%f\x0b\x9e\x85\xb0\x08\xa1\x08a\x1e\xc2\nMF\xd7h\xbdv\x03G\x10\x97Kt5T2m\x1d\xa0uYc@!\xabL\x0f\xe8!\xda\xfaI\xf9v\xfdn\x97Z\x141\xf6\xeb\xd29\xf2\x14\x9e.O\x9f\x06P]'L>\x14\xd9, \x86\xce\xb1\xd11LW\xe8\x90\xd5S(\xce\xe1\x08nx\\\x99\x93\xacNJ\xf2\xa1$\x84\xa5\x18\xbe\x11\x86\xf5,\xb50\xad\xf6\x8f\x0d\xa9\xeaWYM\xca\x19)\xea\xbcd\xc9\x86\xe9\x9b\xaa\xc8\xb3\x8a\xb4^\x15\xf8\xaa\xad\xe7b\xd9Jo4\xb22\xcbGl'\xd2\x80\xa10\xea\xd5\x8b\xa4\x9a\x95\xc9:\xc9X~\xbe\xcc\x8d{\x92\xa6~\x06+\x90n\xe9O\xd9x\x83\xdf-\x1a\x98L`\xe1\xf6m\x1bh\x13(\xdc>\xebCu\x02s\xeb\x97\xb7!\xda\xce3\xf6[\xa6\xbe9\xbd\x8e\x97KR\x06\x0e!\xf3\xa0 {h\xadKe\xb15\x86\xf2d\x8aY\"\xb2\xac~\x1bv%\x8cN\xea\x0d*\x8c\xael\x863\xa2\xb0\xe1\xac\xdd\xc0\xd6\xcf\x80\xe1\x1a\xad\xab\xbaL\n\x11\x85\x14\xedl\x06\xadcD\xb1^\x12\xe1&\xfe\xd6y\x13/\x99\xe3/\xc9\xea\x10vJJ\xc2\xda\n|\xe6\xdb\x99\xa9\xcc\xe7\x12\xc1\xcfW]\x91\xf8\x97|Y2\xf4\xd6C\x16\x9f\xaeQ|Qn\x8a\xda\xf7X\x87^\x08K\x97\x19X2\xad\x8e\xc9\xac*\xb5\x18\x96L\xaaF\xc6\x960VI\xebb\xd8\x9f\x8a\xb8\xa5\x93j\x8b\x81\xc3F\x0e\x0d\x93\xb0p\xb9X\x9e\x14V\x9d\x99\x1f\x8ce\xaa\xfe\xbdX#\xfd`\xf2A&@s2\xef\x19O\xe6\xbd\xf6\xc9\xbcg:\x99{kjSE1\x0b\xe97\xf1z\xc0+\x809d\xaf1\n\xbb\xb9\x16\xc6\xe2\x8d(Yf\xe1\xb2\x0c\xb9\x9a\x9dG\x08|\x94\x89\x1eV\xfbFX\xed\xb7a\xb5?\xc4\xc5\x80\x8a\xdb\xe4\x13\x99mj\x16rZa\xcf\x86\x891#\xc2\x04I\x8ay\xc7\x86]\x1aDB\xf0\xfa\xe7\xae\x87O{G*}\xbc\xa9H\xf9\x92\xd4\xb3\x95g\x8d\xc1&V\xd4\xca0\xb0%\x9d@9\\M\x0d\xcaeI)\xac,\xffP\xa8\xb4\xdb\x10\x12\x831\xb7\xf5\xd6\xde\xac\x1f6\xed\xb6\x9a\x1d\x1d\x94\xe6k\xbb\xe4*\xd9\x0b\xfd\xdbF\xcd\xc1\x03\n\x1c\x03\x95\xd4\x0d\xa0\xcd\xb1-\xbe\xcc\x1f\xe2\xa5\xbeV\xd2n3\x87c\xf0\xf87\x1e\x18\xcd\xa4c\x96\xec\xe7\xe0m\x03\xe4\xe7\xf9\xba\x88\xeb\xe4\"I\x93\xfa\xe6u>7\xec\xe2\x8d\xc1\xdb\x96\x96\x05\xbe3\x92\x12\xc6\xaf\x90x\xb6\x92\xdd\x06\xf4\xa8\xb0s\xfa\x8d\xb6\xdbNb\x18\xd8l$&\xc5Z\x12\xc7\xf4[\xdaO\xa3:^Vp\x0c3\xfeg\x00\x13\x98&gc\xcd\xc0[\xce\xb4G\xaa3\xad]\xbb\x8a1\x1cX`\x1c\xfc\x8f\xddF\x0c~\x06\\\x97\xcd\x00\x9e\x17\xaf\xe6\x81\x9f\xe2\xfd_n\xdb\xf0\xa2\x0c\xa3\xc6\x04bk+:W\xedn)PDv\x1b\x11\xe7\x98\xed\x8d\xc2\x18\xba%\x8a\xa0_\x86\xfd\xd2-\x12q\x9c\xfd\xd9Z\xe4\xccL\xdeE\xb1\xf9wQ\x8c\xdaLgg\x01\xd0\x7fwwCH\xa6\x9e\x07\xbb0\x83]|D\xf1\xa5\x18n\x83\xa9\xa9\x9b\xb0D\xf4\xecK\xb0M\xfb\x8aP\xcc\xa4\xa2)\xed\x8a\xa2\xa4C\x04a\xacz\x04s\x16\x8a|\xfcp\x81wK\xe5^:L{m\xeeyA+\xb7:\x9c\xd3\xde\xcc\x89\x9bAQ\xe2\xb31\x17\xc6\xba\x06\x06Z\x7f\xa9\xd66;\xfb\xcaj\xb0\x10\xea\xa8\"\xe9\xc2\xe0'\xac\xde\xb2\x1d\xf6-\x10\xd6\xf1%9aL\x0c\x1cQ\xb2\xc1\x1e=+\x92\xeaC\xbc\x94\xb4\xa1\x92\x7f5\x95\x9d\xf4Vw\xc0\xb2\xea\xf7\x1dj\xce\xd4\xe1\x1b\x9d\xf63^\xb3hMh\x80\x1a\xd9h\xe2v\x07*t8?s\xad\xd9\x85Ic`\xa2\xb5\xa5\xe1@\x96w29$\x99\xe9>KVJh\xa5r\x9a\x9f\x0d*\x9c$\x81\xab\xb47\xf4\xc0x\xb5l\x9a\x9f\x05\xd8Xs\xf8V,,\x8d\xb9i\xceMO\xf0\xebi\xa2W\xf2\x9b\xf9\x0e}\xc3q\x91T\xba`\x81=\x1b\x0d=\xe6\xffK\"\xfaV \xf8\x8f\xd9\x03nK\xd9\x9e*=K\xfa\x84Q(\xf6\xbf\xd5\x9a T\\u\xdf\x7f\x93\xda\xb0\x02\x9a%\xd1\xbalj\xd6z6\xc6}\xa5g\x89\xca\xb4\x12:\xd7CMW\x0b\x16.\x8d\x1d\x1a\xfa~\xba\xf03:\x17*\x88\xa9\x13\xdf\x9a\xa5\x19w\x07\xf6\xe4` \xce\xf1\x7f\x86\xa6\xe7\x0b\x85O\x85\xd14\x1f\n>\x89*2\xdb\x94I\x9d\x90*\x04\"\xee*0JPV\x7f\xb8)\x08{\xca\x14\x08\xcac\xc3I\xc3\xa4\xaej\xb6\"&\xd9\x8c\x89\x9c\x9a;\x11m\xed\x8a\xd7\xee\xdf\x93h\xab\xcf\x98\xdc\xcd\"\x19\xfcT\x1ax\xf2\x05\xd6\x92\xea\x0f}\xa5\x82\x81\x87\x0f\xf4\x87|~\x13\xa2\xb6\xb8\xbc\"\xa5a\xf2s\xaeP\xa6U\xfe\x1a\x97I|\x91\x12\x83S\xed\n\xab\xae\xea\xdapE\xb1\xe4R\xaeP\x93\xe8k\xdd\xb4k\xfd\xb0I\xd2\xb9\xb1\xb2\x08\xe2\xf5)J\xaa\xb7\xcfN\x0f\x03\xbf\xd6\x1c\x147\xe8\xaeO\x1b~\x0b\xc7p.\xef!\x95\x88\xe8\x86 \x83\xef\x8c\xc4bS\xa6\x13cd\xa3YI\xe6$\xab\x938\xad&\x80Z\xf6Ut\x9d\xd4\xab\xe7\xcds8\x06/\xc9f\xe9fN0\x0ca\x15\xaf\xc9}\x16C\xcc\xd0h\xe3\x08l85gy~\x89q\xdeuF\x84\xfd\xf9\xc5\xa8\xfd\x7f\xa7A[z\xb4\x07!T\xb2B\x0fS\xe1\x08*\xca\xf4\xf3\x1a\x12\xed(=7\x80\xf2\x83\\\xaa%\xa9%\x91}\x1f_\x07CQew>\xa8\x91U\x9f\xfb^\xc3\xa4P\x89'\xc3\xd0\xb1Y^\xc3\"\xdfds\x9d\xab\x10\xed\xfb5F\x9e\x94\xd4C\x0f\xbeWmm\xd3k8\x86_na\x02\xaf\xf5\xd5\x7f\xc66\x87t1o\xb0\x86\x10\xd7\xf5\xf3{\x17m\xca\x14v\x8f\x8c\xa6\xa1\x83\xaa\x01F\x93\xcc\x01\x03$\xcd0\xdeT\xb2\x8dm\xbcU\xec\xec{c\x18\x9dF'\xf1\xc6pdr\x1d\xc4\xcf}\xcc\x0cB\xd8\xc9\xa4\xa5\x8d\x88(\x10ql\x0e\xe1]\x1fr\x12joBx\xc7\xd7\x80\xa2\x17J\xc1?\x07Q\x9d\xffT\x14\xa4|\x1eW\xc4\xc7\xa08G\xb0d\xca%=~\xbc\x97*\xfej\xfa\xe6\xccT\xb3\xe4\xd8\xce7b\x14\xa3\xbb=e\xa7\x0ch\xf7\x02\x8e\xe0\x99\xe2\xa9u\xea\xbfR\xc8_\x104\xcf\xdf\xb7\x9ek\x9a{1B+'4\x8a7S\x12%\xd9\x80-ai\x89\xb3\x85\xaa\xbd\x8b|~\xe3\xc9\x18\xb2\x8ca@\xbc\x8b\xd5\xbf\xa3\xc6h_Z\xb4-;\x11\xb5\xd0:\x8a}\x94\xc5k\xfck9e\x7f\x9fQn\xce\xf0>\xc1M\x1e\xb10\xadX\x19&p\xe9\xb3\xbfCx\x11tn;D\xc2\x96\xeb\xb8\xcc|\xef\x9d\x80+\x8f\xd4\xcf\x9a\xc6p\xfdI\x05\xf1\xfa\"Yn\xf2M%\x83\xdb\xd7+\x02<\n3\xee=X\xc5\x15\xac\xf3\x92\xbe\x893\xc83\xd2(\xfa1;\x00~\x91!\xee\xf7z\x88\xb39\xbe.\xe2\xaa\"\xf3\xfbI\xa6|\x8b\xba\x8d\n\xe6 \x8b#\xc6\xfa\x848\x83?$\xd9\x1f\xd8\xdb\xc8\x0bB\x11\\\xebh8\xf6bG\xd5%u\xeb\x8a8\x86\x91\xb9\x1bsCy\xf2\x85\xbd\n\x8cCHJ2\xa7\xbfvH\x84\xb7\xe2'\xeb\xa2\xbe\xf9+3\xf9nH2\xf7\xe2|/>h&\xd8\x06\x06\x856\x9dgQ\xe6W\xc9\x9chI\xb5:\x99\xb7]L\xf3\x98;\xa8@E\x8ev\xf5M\x81\x88\xa2\xd1@\x976\xaf\x0d\xe0[@I\xa3:\x90.\xdf\xcdK\x03d\xa02\x058M\xb48\xec\x85;\xb6vqA\x84\x97\x8c+\x1c\x91!\x041\x18\x15s\x80l\xf2\xbd{\x90Y\xb4\xce%\xf9\x871\x0e\x8d(rl\xd6@h\"3\xc1p-E\xa9\xfcj\xb8\xa6\xcdz\xc4\xd9\x9c\\\xa7f\xa6\xa4\xf1\xc7\xbe\xa9\xc3/\xcc*@\x0f6u\xe8N\x9d\xa0\x9d\xf1;\xcem\xd2\x9e\xae\x9b\x9e~\x0c\xe1]\xc0\x83\xef\x9ct\x1e\x07\xe2\xcc\xc3M\xda\xb6\x80\x97\xe7a`\xf1\xbd\xa43\xfc\xa9\x9f\x8aM\xf9~l\x98/q\x9c\xc8&\x8c\xde\x18\xa0J\x96\xbb\xe0cP\xfb{\xc8\xdeb\x18\xec&goE\xca\x04M\x8b\x06l\xceoC\xfa\x99\xbe\xa7\xe6\x10~\x8ec\x82#\xf8\xa9\xbf6\xfd\x13\x9c\x0d\xee\x9d\n\xe8>\xc3\xc1\x02#\xa17\xf6\xab\xec\x7foHy\xf3\xb6|\x99\x97\xeb\xc0\x7f\x17\x84\xf0\xeew\xed>Z?m\xf7\xac\xcama#\xb20\xb9\x97\x9e\x80ng\xbbMV\x06)/\xdbo\x14K\xa7\x1b\xc5\\\x11\x02\xcd\xb5\x12'A\x15\xa4\xbc\xec$TB+\x99!\x12\xffXp\xe6\x03\x86{\x15\xdf\x02J\x92\xb6:\x84\xa9\x87<\x9e\x87\xf7\x85~\xc9\x82\xd3Rv\xf1\xc7\xfc\xbaa\x17=6\xb0\xca;\x0bD\x9c\xb7\x81f\x1cj75\xcc\x03N1n\xbb\xf9\xfd\x8c\xc7\xd94sj9\xc5fDi\x97,\xae\x14\x91\n*\xc6\x8dL\x85*\xcd@6\xa59*\xdb\xd0\x0d_!c\xe9\xe5\x01\xfc \xee#\xcf\xe6\xa7\xec&\x86\xce\xb2\x9a\xaaUL>\x93;io\xba\xb2\xa1j\xbawF\xc7'\xda\xdb;\x0b(1\x14\x8dz\xbfxM\xcfn3o9zL\xcf\x98\x87\xc7\x83_\xfc\xe9\xdfo\xcfv\x83\xdb\x07K\xd5\xcf\xe3)\x0bs\x81\x862> \x9e\x06T\xb6\xd8T+\xbf\x9c\xee\x9f\xd9}6\x0d*`?\xdd\xe6f~\x16]\x89\xfd\x85\xbcq\xf3sJ\xac\x97\xa1b\xc2\xed\xaf\x86\x8fo\xe0\xc4g\xc3\xef\xf3\xa5\x0d\x9b\xfd\xb3\xb2\x13\xc9\xfd\x17\x99\x1c\xe6\xd6\x0b\xc1[\xda\x02\x81\xd0\xa5O\xa5\x97j9\xe8\xccd\xba\xdb\xd4\xf7\xd0\xb5\xc6\xb2m\xac;\xb9\x1c\xb1\x85\xcd\xae\xef\xc2\xe2\xcb\xd6 ]\xca\x95<\xb6\x19\x93l\x8b\xdfPj\xbe\xa9-\xdf\xd0\x13\xe6\x9d\xcf\x1dLgy\x8a\xb4\xf4\x9d_\xb6\x1f\xd8F\x9b\xe0\xbe[\xe5\x15z\x1e\x96\xf8\xd7\xf0\x17\xcc\x85\x8e\x92s\x14T\x1c\xfap\xc9\xac\xcb\xf1E\x84O\xf3\xe97H\x9e\x138\x86\x9cb\xf4\xe4\x01\xe6\xd4\xf0\x13\xd8\x85\x18\x9d\xf0\x82\xe9F\xf5\x00\x84c\xd8\xb4\\\x99`b\xc8\xbaz\xeb\xa7!hr\xb2\xdf\xfa\xe8\x9bk\xa7\x15\xe3x\x8a!=8H\x8e\xc2\x85\x0b\xc8\xdb\xc7z)R\xb2XX\x8c.j\xe5\x03\xa8E\x97\xb7}oT\xf3 T\x98\xf4K\xfc`;\x0e\xfd\xad\x8cma\xf4/\x8a!1\xc3\xcd\xa4\x83\x9b\xab\xba.\x06p\x87\x19\xf4\n\xdcL\xe4_C\xf8\x96\xe27\"\xb0\xbb\xad\xf6\xcc\x82\x99]\xac\x9caz\x17>\xc9\xae\x99+\x96\xf6\x89\xf0\x1b\x17&\xc6\xf2\xbfy\xf80E\xdd\xc4n\x98e\x8di&i\xa2\xe6nU\x03\x82\x7flH\xf9\x95V\xc86{ &\xb3\x8e\xbd\x8ep|\x08\x03\xf6\x17\x87\xc0\xce>w{\xbbw\x0f\xbc\x8b'?\xbd\x7f\xf5<_\x17yF\xb2\xda\xcf4\xbe\xa7:\xcb\xea\xbc\\\xbf\x88\xeb\xf8_\x12\x00~\xc64\xc1=\x0b\x16F\xa5\xe8\xd8\x11<\xf8\x87D\x13\xfa\xcbiC\x89-a\x1ee\xa7\xe3I\x7f,\xe6o]\xb6\xab\x1ei\x1d\xfc\x05\xfe\x93\x03\x0d\xa8\xbf\xee\x9c\xc5\xe8\xcb\xf9\xf9\x90\x12P\xc4`\xd2\x8a\xc8B-\xf9\xed\xe3q\x81r\xff\x05\x08\x8e\xb9bC\xa9\xcdu\x10*QU\xdf\xa4\x03\x95P/K\xd14\x1d\xf6\xae\xe9\xabr\x86%\x18\x8c_g\x1b!8moZp\x16\x13HP?_%\xeb\x82\"\xd4\xe0\x17|J\x13\xd8\xd0ol\x990X6\xa0 \xec\xec\x1b\xab\x99$\xcb!\xfa\x9f\x0b\xd2\xaf\x0bL\xf2\x1f\xc9\x98\x99\x19\xb06K5\xcc\x88l\xfa\x91\x0e\xbcM\xc6mF=n\xdb\xa5\x04+\xd2\x99\xb6\x8b\xe2\xcd )\xde*\x86\x8d|Op\xc3\xb1\\me\xa4\xb4\x0f\nq\xca\xacY!\xdb\\$\xc5\x8c\xa9\xbc}?\xf3\x86\x0fAQ\xf8n\x19\xb5\x15E\xc1-\xe9\x98r\x95\xf7\xe3\xe8\xce\xcew\xa7\ni\xb7\x0f\xc5\xb6\xe3\x07\xf6{\x82f\xb4\xf0\xd0IP\xcd\xc6\x1dJ\xee;e\xf4\xa1\xd0\xdf\x1e\xad'\xb7}U\x0b]\xdf\xa9\xc7S(K\xe6\x8c\x12\x9e\x9a\xbf\xec\x9ad\x11\x14\xbb\xa6g\xae\xdd\x81\xeat!\xc1\xb0\xff\xa8\xe3\xe5\xac\xdf`[t\xe2\xfd\x0f\x14\xfcM\xed\xfd\x9c'\x99\xefi\x9c\x13\x95w\xd0E\xd8_]#\x9b\x0cid\xe3F#\xdb\xd5\xb9\xb2[\x90\x17I\x85\\!\x99S\xfc\x88g5;\x01\xf3P\x1f\xc3\xdeb\xb8i8_\xb5VF\xf5X/\xb0Krcc\x04\x9cTl\x16M,3\xfd\xb42D\xcc\xafk\x88\x1e\x00W\xeb\xda\xe7(\n\x87\x13\xe6\xd6\xb2Ku\xe2(\x1c\x8e\xe1h8\x8f\xa0\x7f\xe6\x88\xc2\xa2\\2\xa6\x92\xb15M\xb6\xdc\xf1{lc\xca;/7Qhrv\xc1\x81\xa4\xf1\x05I\xbb\xe3`.\xf2_e4\xd1\xe0h\xd6q]&\x9f\xbe2X\xc6&r\xe1M\xb2,2 \x1c\xd3\x83\x84\xb9\xfbQ\x06\xef)\x05U\xcdX=\x0c#2a\xaa\xce\x10\x7f\xe9\xc70\xe0\x8e\x8a``\x8a\xb4#\x9b\xa7\xbe\x90`\x13\xee\x1c\xdb\x8ccB\xfb73\x9e[\xc0\x15\x1c`\x0b\xcaBkn\x02\xc0(\xed\xb3-Q\xc43\xf2\x82\xa4\xc9:\xa9)\x93\xee4\xfd\x94O_\x99\xf8o;o\x0f\x83\x15\x18RX\x0d\xcc\xbeH\x8a\xd1\x93\x9f\xfd\xcbM\xfe3\xc6\x0eu\x9dh\xde\x0d H\xeb\xa1AE\xc7\x1d\x92\xbe}\xc2\x1c\x92\x1e\xe9\x1d\x92\x985\xf9#]~\xff\xd4i%\x05\xec&\x0f\x8e\x7f?=\xfb\xffv\xbe\xb9\xf7\x07?\xf8\xe3n\xf8\xf4\xc8\x93\xf7\x19\xdcp\xb6?\x15\x8d&~L\xa7\x0f\xfe>\x8d\xef\xffs\xef\xfe\x93\x8f\xf7\xa3\xf3\xff:\xdb\xfd\xe6A\x12\xd5\xa4\xaau,\xd7\xb6~\x01O\x0e\xf7\xb7\xb7\xd1?\xd8\xfe\xd3\xc3/0\xefo\xbd\xfa\xb7\xd4\x8a\xca\x00\xa9f\x95\xa6\xdd5\xb5\xec[ a\xcc\x9a\xc1\x84(\x96\x08\x95\x9a|(\xd8\xe6`\"\x14\xb3\xdb\xef\xa2\xef=\x8bw\xa3\x86\xcbbtR\x8c\x84\xc2\x9d\x18\xdc{\xe7\xed1\x16b\x8c\x06\xdfeLx \x80\x89F[q\xeb\xd7\xd4\x10n\xe4\n\xb3-\xdc\xbb\x07;;\x1d\xfd\xea\\D\xc8\xd2\x7f\xb8\xee\xc7\xc6\x8aC\x98z3a\xf6\xac:\xfd\xde\x9c\xb2\xf0\x00<\xb6\xcfP*)\xe5\xa6l\xd1\xbd\\]H\xe3\xb4E\xdb8\xad3\xf42P\x14\xd8W\xf4\x1f\x16\xd3\xa6s}\xd5\xc0\x0bG\xd5\xfc\x94a\x7f\x8e\xc1_il4\x06X\x13\x19\xe0&\x83$\x1bN\xde\"8\x98\xf9t(\xb6$p\xa4^O\xb3\x01{\x0f\xb4\x07\xb0\x9d\xd3R\xa1\xcb\xf3\xd6\x7f\xfel\xbb\x10\x03\x8e\xfd9zN\x0c\x9b\x9b\xb0!X\x9bCy?.\x92\xffEx4\xcc8\x00\x0f\x17\x93\xdf3\xf2\xe0\x98\xfeB8\x19\xc8\xeb\xf0$\x08\xc1c(\xd1\xab+.\xcf;\xb5\xd9\x9dp\xaf\xb6\x08\xc0\xa6\xd6\x1e\x9e\x1d\xa8>\x18\xcc/^\x8c\xde\xce\xf2\x80\x8c\x01\x1aW\xc9L\x8c\x86\x85\xccp\xfd\x1e\x14\xae \xc1@\xc1\xf6[\xcfnAuYT\xc4Uu\x9d\x97\x03a\xcatE\xc8\xb3\x8a\x7f,\x0buA\xd9\xa3\xca\x01z\xa2\xc8\xb5\x8a\x9e\xa9w\x8ep\x04\xde\x0f\x14\xfcN\xf1\xbf\xbc\xe5\x81*-R\xae>R\xa1\xe0r\xf9\xb9\x87a\xdf\xe9\x06\x8eVq\xf5\xf6:\x13'`{x\xb9-_\xb2d\xb3 \xcf)Bi\xfa\xdeS\xa8\xe1{8\xf8\xf6\xd1S\xd8\xdd\xad\x03 ,\xda&\xf3\xca\xa1t\xff{\xd8\x7fD\xb9\xb1=\xc5\xf2\xb1\xe5\x17\xd4q\x0c2\xab\xef:>:\xbeR\xb3\x8ebJ:?\xe4l\xca\xb6\xb3V\x91\x18\x8e\x00s\xce\xd5Q\x91\xc6I\xc6>\xa7\x9c\x1a\x87\xdd\xac$qM\xfcl\x93b|y\xca\x0b\x96l\xda%|/\x1d\xb8\xe8\xdc\xcb@UV\x91iy\x86\xf8\x98\xd1?\xd8\xef\xee\x92sS\xe9f\xcd1)6)\x97\xa43\xfe,\xec;\x92\xa2\xba\xb6IC\xd9\xe1\xc3\xd9\x0d\x99T\x7f \x9d\x9b\xd6\x03\x81\xd6\xed\xc6\x0e\x96\xeb\xa8\xb3\xa5E*gVDk\xfa%r\x9cS:\x1d\x83\xe8\xe5\xe7\xedE\xf8\xfc\x99\x8a(i\x9a_\xbf\x13\x18\x8c\x0fw\xcah\x16\xa7\xa9\xdfEo\xba7\x18\x11 S\x0cv\xbb\xb37b\xc3\x0fy\x809LK&\xcd\xecBLp\x87D\xbb\xfa\xbd\xa0\xcd}\xef\xdf\x8c\xcd)A'\xd0\x16\x9aS\xdc@m\xa7\xae\x95^#\xc7\xe0g}\xc1:\x0b!\xd1*\xc0\x18\x8c \xbe>\x062M\x10\x9f\x15\xad\xb6\x84\x02}\xc5k\xfc\xff\xec\xbdk\x97\x1c\xc7\x95 \xf6]\xbf\"P3KU\x0d\n\x8d\xee\x06@\x11MAt\xa3\xbb\x014\xd4\xe8n\xf6\x03 \x00a\xa0\xac\xcc\xa8\xaaDge&\xf2Q\xdd\x8d\x11\xe6\x90#\x8a\xc2\x83;\xb3\xde\x91\xa8\x91=cy\xd6$H\x00\xb3^\xdb\xeb\xb5\xd7\xf6\x8e\xf7\x1c>\xd6>Gs\xa8\x99\xbf\x80?\xb0\xfe >\x117\"2\xf3\xde\xc8\xac\x02 R\x9c\x1d\xd59\x12\x1by\xe3\x1d7\xee+\xee\xbdqFcp[\xfcSc\xeeB\x81M\xe2o(X%\xf9B\x8e\x97\xbe\x9cjS\xf7\xf8a\xda\x0e\xada4\xd6\xe1j\xd2\x1b^\xf7\xebc6ms\xc2#v\xf4\x88\x01\xe8t1bT\xde.\x01\xbe\x90\xa6\xfe \x9cDs\xd4\x18\xca\xf3\xcb\xa6\x0f\x13\xd2H\n\x88\x9d]\x0foX\x06\xc6\xd1\xc0<.$\x95F'A\xfb\x8b\x93\xaa7\xa8_\xc9\xb1X\xce.|Tf\x17f-\x946\xc0<e\xbe\x9e\x9e5_O\x7f\xc7|\x9d\x9b\x9f\x97q\xc5G\xf5\xc0\xe4\xa0\xd8\x82\x80\xb2\xb9\xf9W40\x12\xd8\x0e_\xe7gO\x96>\xcf\x9d\x9eg\xb2\xd9\xef\xb1\x97o\xb0\xa3\xe2\xcb\xfc+\xecG\xec\xe5\x13\xec%f\xea\x9c:5\x7f\xfae\xd3\xff\xa9\xef\x9c8y\xb2hb~\xfe\xa4nbn\xbe\xdc\x06\xb4\xca^b/\x9f\xb07\xddND\x0bs]\xb9\xb0/\x9f:u\xe2e)S\xcc\xcd\xce\xcb\"\x1d\xf6\xdd\xef\xb2\xb9Y\xf6#\xa6\xbe\xa0\xb5\x97; C89k\x86\xf0\n\x19\xc2\xdc<\x19C\xf3\xd0:\x0d\xac\xc2\xce\xd5\xddh\x14;ns\x14n\xf5\xcd6\x8aaQ\xefV\xdd\xc5Cd\xbdr\xa0\xe2g\x9cD\xf1\x02kE\xd5\x0c{\x96fI\xeef\x91zH\xbb\xf4\xa1\xe8\xab\x16\"4\x85b|\xdfb_VaU3/\x16C \x1bTS=\xfe\xcf\xe6g\x8f\x0f\x8a\x16\xca\xf7\xc4\xd5\xc50\x97\xb2\xad\xadsK'N\xbf\xf22J\x1f\xd3\x97i\x89\xe1m \x8a\xbd[\xe7\x96\xe6\xbes\xe2\x95ib\x8c\x88\x90\x19uY\xeb\xa8-\xf3\x04\xa5\x13jh\xcf\xd1\xcd\xc4+\xe6j'f\x1e-\xf5W\x8b\xc0a\x00f\x95\x9eo_\xf5\x0e\x02E(6P\xbe\xbdF\xb7/l\x9f\x9e\xc3a4\xbe\xfa>\x8f\xbe\x9b0W\xb5\xbd\x93n\xfdY\xe9\x04H\xef\xc8P\xbf{\x02O\xb9H\xc7\xac6/;\x9b,;\x99<\x13\x19\xf9\xf8\x1a\xe33\x03\x9e\xed\xf8#\xde\xee@\xf5\xd2\xbf\x17T\xbc\xfe\x11x\x19\xcf\xa2!Vt\xa6\xe2\xbb\xcc\xf62\x03\xe7@\xca\x9f0\xb0\x05\xf9\x97\xfcc\x9aY2\xb5\xf0A\x97\xb9\xf5t;oC\n\x97\\\x12h\xb52G,~f\xba\x02/\xf6\x0fhp\xf1\xef\xa9\xea\xfb\xd2\x80\xa0\x0b\x1e\xf1\x85\"\xa03\xe3\xe8\xd3\xd1\x01\xf3\x91\xfag\xd6\xe92\xc7\xcc\xb4\x81\x07\xa5\xb2\xe9z&#\xad\"\xe94\x13ef\xb2\xca\xbc\x083E\xbaDSm\xc9\xd0\x02`bA\xc5\x18\x14\x1c=\xda|\xe7);\xbe\x1e\xdcP,.\xb81U\x87\xba\xc8\xb4\xe9\xfeX\xad~\xa7\x7fc\xf5\xe8W4\xf1\x8d\xd4X\x96\xcaj\\\xf6\xb4\xc67M\xd2\x8c\xba\xe4s\xb5{\xde/v\x88\xc5\xd3n\x90\xdc\x9c\xfeL\x1a%Y\xbb\xd3e\xb1\xf9K\x06\xea\x95\x9e\x88\x14{\xf7=\xd8\xc3c\xc7\xeawM\x0e\x04v\x8c\xc5\xd3l\x98\xc1\x8e/\xd8\x99\x8c\xed\xbb\x1e\xdc\xe8\xb2#N\x9b_wotY&\xff?\x9c\x8c\xdbZx\xd14\xa8\x90yi\xfa\xfd\xbb\xc5\xb1\xab\xc0\xee\x96\x1c\xa6\x8c\x7fR\xde,kHu\x9c\x15Y\x17\xcfT\x1e\xce\xbaki0\xadm\xf0H\x1bH\xab\x95\xa8\x8a\xef:\xffV\xe9\xbbA\x0e\xe9\xcc\xa9;\xa9(\xfb3n\x14\xcb\xb7\xf8j\xc0\x92_I\xf1\xa8\xa0\x0c\xea!d[\x8f\xd7go<\xaf\x04\xa49%=(\xc0\x0e\xe8u\xb3\x8d}\x9e8=ka\x9f\x13/\x98\xd5\xe2Fj`H\xad\xbbK\x19o\xd8\x9e?1[1\xb4_L\xa3pS\x1cw\xfd\xa0\x9b3S\xfc\x13\xacN<^\n\xa2P>*=s\xd3\xfc\xb3*\xee\xe5\xd6%p#\xfe[G\xc8s\xa9+\xd4\x11\xa2\\&O\xa9;\xdc\xf9\x8c\xf8o\xf5@\xd9\x14\xaa\xc0*\xa9Kw\x03\xd0K\xean5\xb5\xd5\x9e.\xa7d\x02\xa2w\x0b\x17P\xd4\x1f\x8f\xab\xfcO\xc3i\xe4Mt\x97\x85\xb0q\xa6\x8cM\x8bs\x95\x93JR\xe3\xa7R ~\xd3\xd2\xcf\x91\xb9\"\xbc\xeb\x8cN|.\x1f\x98?2\xdb\xe9\xaa\x82V--a\xaf\xb1Dp\xc2\xd9.\xe3\xf2\xeeDH[l\x81\xc5\xf2\xa3\xcc\xb8\xdcR\x179\x00\xa2\xab4V\x99\x0d\xed\xe8XAE\x8b\xa5\x95\"=x\xb0{\x9e\xee7\x8a\xcd\xce\xb93\xa5\xe6\xe4\x1d\x8a:\n\x16\x9b\x9dlF\x9d\xc7\xe7jJ\x8bl\xe2T\xd6\xb7,\xa5C\xd3\xacT\xa3\x05\x8eO\xd1\x93D\xd4\x10D\x94.\xc3\x0d\x89\xad\xaa\x0c\xa1S?\x06ql\xca\x1d\xdaw@\x9a@\xe4\x11cg\x04\xf75\x88\xd81Od\x01\xb8\xc3\xb2a\x12\xed\x8b-#\xcai\xbb\xb5#\x1a0\xce\xc1\xac\xef\xf8\x01\xf7Z]\xd6\xdaY\xd9\xde\xb9\xb9\xb1\xb9\xb2\xb5\xb8\xb3\xba\xb1~\xf3\xdc\xe2\xea\xda\xcarK\xa2T\xd8e|\x82\x18\x86\x16G\xac8E\x92\xba\xcd\xad\xae]i\xc5\xab[\x88\xb7:\x0f\xecf^\xd9\xaa<\xef\xb4\xcd\xb0\x90\x18j\xeb&\xcd+h\x1e\x81g?\x8c\xe2\x1f\xca\x8bL\x9ed\x87\xccOY\x18eL\xa8\xf9Q\xbfX\xe2\x94\xa9\xa8J\xe6\x87l\xeb\xdc\xd2\xb1\x97O\xcf\xce\x8b\x05/\xd6zc\xf3\xe6\xea\xfa\xe5\xc5\xb5\xd5\xe6\xf5\xd6\xcbR%V\x95\x7fE\xca\x92\x8fT)\x8eU)m\xe6l\x03=`\x90WW2\xd0\xac\xdd:\xde\xb2\xd8>a\x17\xc8\xe7!;\xc3,\x8f\x16\x8cKv>\x0b\xb31!b\x146h\x80\x1d\xd6\x84\xe3J\xd3\xe2\xa1|\x1a\xae\x8e:\nb\xf8\xaa\xf5\xcaWl\xf9@\xda\x16\x877\x14\x95-\x11a\x08\xde.\xc7\xb3]\x1f\xdc`\xaf\xc9)\xf4\xc18\xd6\x9e\xed\xb2\xa1N\xc5z\\f\xe7\x1b\x8a\xee\xc7\xec\x18\xe4\xe2o\x8f\x98\xa1\xbc\x95\x00^\xd9\xf8aA\xb8G\x82R\x0f\x8f\x1e\xc5\xf7\xc8^\xad\x89_\xe2\xfa1@\xf4AG.\x9e\xa7\xad\xee\xd6\n\x0d\xae\x8aL\xe3\xbf\xb4\xf6\x95\xa5\xd2A\xa7\xf9H\xac\x1c\xc4\xdc\xcd\xb8\xc7\x9c\x90\xe5a\xea\x0f\x04\xba\xf7\x9c\x94\x1f\x9b\x9be\xea9d\xa6\x08\xf3\xc8\xd9\xf3\xc3\x01\xcb\x86\\6\x96\xf0>Ox\xe8r\x0f\nH\x80\xf4\xe9c<\xe0\xf2\xa8\xef\xfb\xd9P~\xbe\xc3\x93\xe8\x98h\xd6\x03\x81\xb5z\x8a6\x17w.\xdc\\][[9\xbf\xb8vsqkk\xf1\xea\xcd\xd5\xf5\xe5\x957\xd4\x99\x02\xed\x8e5\xbd\xe5W\x9d\xb2\xdc9\xb1\xa0\x7f\xfc\xc7\x83iu\x1b\xa6\x96p\xc8\xbew\x86\x8d'\xdd\xcb\xc8\x85\xae\xf2H\xf1e\xc0\xbeg6q\x021\x1fr\x19\xc6\xe1\xf7}\xbd&\xec\xd2\xee\xf6\x0e[\xdf\xd8a=\xce\x06\xd2W7a\xd9\xd0 a\xc5\xa5\xc1V\xd0'\xb5\xb8\xa9\xa0Jf\xc9\xab\x0bzyqmw\xe5\xe6\xc6\xee\xce\xcd\x8ds7\xcfn\xec\xae/oO\xbf\x96\xf2\xde \xd8\x92\xb4\xdc\xa7\xd7\xc5\xf4n\xc0\xedV\xd8e^\x97\x0d\x04\x99\xeb|\xfd<\x8b\xd5\xd1R\xfd\xb3\x08\xccE \xc3@\xb9\xc5\x1c9\xc3\x06E\xaa\x83?n\x15\xf8\xe2\xcc\xe4!\xe4\x9a\xdct\xb2a\xe1)8\x90\xa7\xbb\x113\xf0\xaa\xe5\xdf\x9cU\xab]1\xbaZ\x1e\x032Y\xc3\xa8l\x02s\x7fz\x81\xd9&\x16\x13\x07\xe1\xe6\xa5\x91\x7f\xb3\x94\xdf\xce\x05\xe5a\xa3<\xcd\xc4qq\xc2\xe2\x18l\xaf\xbc\xbe\xbb\xb2\xbe\xb4rs}c\xe7\xe6\xe2:\x10\x14\x1c\xe12-\xbb5\x9e>\xf2F\x9f\xef3\x1d\xd6\xa4\x0e\xb9\xf2\x00\xebB>Msk\x9a\xb3\xef\xb2\xf4U\x96\x1f=\xdaa\xfe\xf5\\\x86`\xcau\xba\x9e\x0bN\x05\xf7\xf7\x12R\x16\x8d\xac\xda\x8bO\x054\xbfqC\xe2 \x1bRw\x0bU\xbd\xf6\xa2^\xf4\xd3IVJ\x96rB\xa6\xba\xa9\x10&\xb5%\x1bg/\xae,\xed\xb4\x00k\xc5z\xbcJFy$\xbf\xce\xc5\x01\x9a\xb6\xdf\xafD\xa2\xab\x1f\x9eq\xbe-_\xd9\x81\x826\xe5xEa:b\x87\xa9\x86-\x0cr\x8aa)\x9f(9\x92\x82\xc4\x1d\x07\x12\xa7>\x177\x81\x8dc\xfdv\xfdX\xe5\xa9K3'Q\x1c\xbeu\xbc\xf5\xed/6\xde\xb2\x1a\xc7\xa9\x1a\xc7\xa5\x02 X\xadm\xb9\xa5\x027\xedr\x8b\xc2t\xb9\xe3\x84\xa7\xe2X\xb5U\x88\\/\xe0\x025~(F\xf5C\xe6\x84\x1e\xfb\xa1\x18\xcd\x0fK(\xd4\xa9n\xcd\xb9\xad\x8dK7\xb7V^\xdf]\xddZ\x994W#/\x98\xa9V\xd4c\xf3\xb5P+\xcd\x02\x94o\xa1\xb5Eq\xca\x99\xcb\xd2\xd3O\xdd\xf1\xbc\x1fv\xd9\x0f\xd5\xc8\xd4\"\x88\x115,\x02\xc8\x1b_\xfd*83C'\xdd\xd5\xc9n\xdaz%\xbeyK\xb1\xb4\xb8.H\xdd\xd2\xc6\xfa\xce\xe2\xea\xfa\xcd\xdd\xf5\xe5\x95s\xab\xeb\x13\x96\xc6r%Q6\xc5\xa8e\xa87cB\xa0\xb4<\xe3\x85:\xd8\x98_\x83)kxD+\xd8E 1\x1e_\xd2\x98\x94\x1d\x05\x15I\xfd\xb3y\x0f\x96\x9cP.4OdT\xb2\xa3\x16\xb7$\xe48\x99\x14f=\x9e\xfa \xf7\xa4u\xcfB\x03\xd5\xba..\x97W\xb2I\xe6\xab\xc1\xad\xb2\xe5\xc2|,\x0c\x0fM+\xed\x83W\x99\xa3\xdc\xac\xa2\xe7\x9a\xb8\x98be\xce\x8e\x9c\xa9\x10\xf33\xe6E\x1c\xf0\x91\x1f\xf8if\x99\xfd\xee\xfa\xd6\xca\xf6\xc6\xda\xe5\xc5\xb3k+\xd3\xce\x7f\n\xfaZ\x8fQ\x81\x10\x07\xdb\x16\xff}\xfdk2\xd0\xea\x1f\x18j\x81\\O\xbc\xa3\xab\xc9}.~wo\xd0c\xa3\x7fb\xaa\xd2\xeb\xbdq\xc9\xe4\x9c\x03\x99\xf9\xe2K\xec\x9a\x98\xc7\xd4\xfb&\xd9\xc3\xd4\xfb\xd6(\xd7yZ\xae\xc3;f\xf7\x8b\x93B\xd4\xf3Iq/J\xb8\xd6\xdd\x87\x1d\xd6oW\xe4\xeb\xb0\xd3\xc5\x02\xb7\xd0\x03~\xf4#\xa1\x11\xd0F\x1aL\x1e\x89L\x19\xf6\xa3\x1f\xd5\xe5\x01\xac\x84t(\xd7\xfc\xc2\xab1\x12\x82y\xd2\xe6\xd7\xa3\x1b\xd2\xb79\xd4\xc6\x9dI1\x0b\xcd\xee\x81\x926\x94\xfdn\xf1\x1a\xd7]\x81\x88\x1f\xecLm0\x99\xf9K:\xed\xca\xf7\x92\xcf\x1enF~\x98I\x0f\xfa\xc0Du\x17\xfc\xee\x0cs\xcdW\xd8\xdb3\xaco\xbel\xc9p\xbd\x04\xc7\xe7\xe2y\xe9\x0b2u\x8bb\x91\xd4A\xebM\xbe>\xc5V\xadaR\xd6\x8c\x8a\x85\x12\x13\x1c;\x81\xef9\x99\xf4\xe9\x8aK\x1f\x84\xd6\xe5}K\x15\x9b\xc6\xb3-l\xcf\xbfR\xea\xbd\xd6w\xdb\xa6h\x1dI\x94\xb72\x9f\xb9\x99\x81{\xac^\x9e\x9d\xc3\x98\xab5Y\x0de@U\xe6\x0b\xa9#\xe1.\xf7\xc7<\xe92\xf3\x96\x84L)\"x\xe2\x11|\xcc4*!\x1c\xf9BQ\x0b_(\xad\x0cM)SN'Sr\ni\xcf\xcfw*\x8ew\x96<25\xbe\x93\xf4\x909\xfd\x8c'k\x91\xe3M\x13a \xafk\x93(\xcaVC\x08\xc4>C?\xe9w\xc9\xd1\xf7\x19?\xf4\xb3\x8d\xc5<\x1bB\xb2\x98<\x1b.\xca\xde\xd2\x197\n\xfb\xfe O\xb8\x80Zj\xc6 7)\xdc\x16e*(is\xee\xf9\xa1\xd7\x86\xcb\x0f\xe94\xdeT\x0d\xf2\x1a\x9dan\xb5\x16%O\x94\xa5\xa6\x99\x93\xf1\xcd \x1f\xf8\xa15\x0eD\xfcD?u0&W_\x12\x87t\x81Ez\xb3\xeay\xb7\x03\xcb\xd2\x185\x96\xf2\x80\xbbY$Z\xb4\xbf\x0fY\x93\x95\x16r\xdd\xd4\x0ft?q\xe2E\xdd\xbf\xfdQ\xae\x89\xee!U\xdaa\xdd\x05\x0c(v\xb5\x8a\xf0\x91B\xf8\x13\xa7O\xe2\x9c\x19>\xbc<\xd4\x9e?A\xb2M:\nt\xe2\xf4)\x0c\xca\x0dH\xe6\xd90\xb0&\xb7c`C(\xdbc\xd3\xed{&\xa3J(iWQW6\xbc#\x89\xea&$\xe80\x91D*\x05@\x06\xd1\xdf\xfczX\x93K\xa2L$x9\xff\xa7M6\nj}\xaf\xa7\xcfzY\x93\xf1\xb2Y(s5\x89\xb5\x18\xdb\n\x9d\xacL;\x0c\nQ|/\x1e\x0d\xd9\xd6\xa7\x85\x16\xca\xa5\xcdR\x14\x12\xdc\xd5r\xfaMz5?\xddX\xdc>\xd1\x91 \xcd&>\xb2\xc1\x16\xd8\xf5\x96%\xd3b\xcb\x12\xa6*\xd4\x82\xbc\xdd\x11r\xc8j\xd8\xben\xd2E\xa4]v=\xbbA\xd2\xc1\xc0F\x04\xec5\xe6\xcb\x07\x99\x13\x94\n\xb3![\x99\xfd\xdc\xebdq\xb5\xae5:u\x9c\xcd\xcf\xd2F0\xc5\"8\x0b,\x98\xc9\xa2\x8b\xdb\xe8=gHS+NB#\"\xf4\xeb\x1c\x8d4U\x98\x1a\x0b\xfci\xb0\xc0\x81\xb7[j\xb1 7O ~eX \xc3\x98-X\x907aA\xca^c\xd1\xf3b\x81\x0d\xcb\xd5\x96\xa5So\x19\xfb\xa6\x89F]\xed\n-\xa5#\xca+$\x84d^r\x14d\x8e<\x00\x90Kq\xf5;\xe8+$\x1b\x9e\xc3\x11\x16\x81\x8a\x87\x98\xb7\xf2\x14\xf7\xeb!\xa7\xfa\xaf2\xa9\x97\xfeT:'kT\xca\xc9\xdae\xc1\xcc\xf6\x85\x8d+7\x17ww.\xdc\xdc\xdc\xd8\xdc\xdd\x9c\x90oY\xfb\x95e3\xb1-\x9f\x9f\x9e\xd1L\xca\xb3v+\x1dF\xfbe\x84\x17\xa8Q\xda;\xfbx\xc4P6\xb6V\xaf\xad<\xefH(B'&Op?\x89F\x17\xb7;BW&\xa5\x80\x90\x0c\xc4\x80\x8b\x1c\xc1-x8CV\xbe\xe4\xc4\x1d\x1c\xf8n\xd4%\x1ef\xc9\xe16\xbf\xdd\x9e6\xe3\xba\x96\x0dP\xbaN\xdee8\xb0U\xff\xe4,\xaf\xcf\xd6\xe46H$t\xae\x06\nIe\x159i\xc1 \x17T*\x939\xcfjl\x0c\x95T\xab2\xc7H\xe9\xa5\x1d\xbf#W,\x92[\x1c\xda\xcdG\x85\xa9\xac\x94\xdf\xd4\x9a\x97\x87\x95\xc2}\x8aq\xca\x93.\x86\xa9\xb9R\xebFC\xfca`\xaf\xab\x19\x96u\x9aLm|\xdb\xccET\x0e\xbbL\xd5ot\x9f.xe^?*H3\xb7P\xce\xa6\n\x8f\x93\xf5\xb2\xc8)?\xdaS\xf7Ls\xa7S\x1e\x96\xda\xba\x1b]\x98j[\x7f\x98\x98\x11B\x066\xc3y,\xa1\xb7\x10\xad\xa6?\x8a77\xc4\x9f\xf3/\xe6D\x86\x92Q\xdb\xcfaX\x97,\xd9\xa9\xf1u2\xe7\x10\xde\xeb!o\xfd\n\xaa\x17u \xcfH\x95\x14$z]$\xd6T\x96\xc6\x81\x15\x96\x88\xd7\xb9\xd1-\xe7\x05\xac[\xaa\xb5\x8d\xf3\x1b\xbb;/f\x81,\xc4hf\xdf\xcf\x86\x97\xf2\x0c\xaeG\xa6\xc8\xa8h\xc9\xe4\xd5\xf8\x8c+\x9f\x81\xc0\xb2\xda\x10^\x0b\x9a\xd5\x98N,\xb8\x96L^\xc0\xa5\x8d\xf5s\xab\xe7w\xb7V$/z\xde\x85l\x1a \x18\x16,\xdcG\x8d\xea\xb7+\xc0t\xc1\xf6\xb8\x04\x83\x94s\xf2\xd3E\xb3x\x90\xd4\xad\xfaO\xaf`\xa9\xe7\xa2d\x0bLY\xe0\xbe\xa4\xd2\x0f\x94\x98\xee\xd9\xc3ug\xc4S\\q'2}H\x90`\xd5a\xa9\x9a\xe5\xb8i\xdbS\xde\x0e\xdb'\x89t\x15)\x08\x95\xa1 o\xc3),D9J\xb4z\xbe8\xe2\xafDV\x1a\xab\x04B\xf5\xc7\x8a\x9a\x05\xcb\x967\xcb\xe2\x01\x19\x82\xec\x90Z\xe5\xe8\x08enr\x1f\x8a\xbc#\xd9\xa9\x83p\xa6v/'\xf7\\\xd3\xf1tb\x0b\xd2\xa2l\x0f \xb4\x8d\xec\xe4\x80\xecT\xfb\xcaQh\xe4\xa05?\xcd\x88\x90\xc5\xca\x96\x8b\xe7\x16\xb4\x18\x12\xb6\xa2\xa9\x84-fD\xaa:\x81\x8b)\x9c\xae\x17\xbaXIYt\xac\xe2c\xb9T.\xc9T\xd2\x95/%\x86\xe0\x1b\x9b\xa7\xc3vn#\xb9]\x9c\x17\x91\x92\x12\xeb\xe1o$\xa7S#@H\x11\x80\xce\xcb\x8d\xc24\n\xf8\xcc\xbe\x93\x84\xed\xd6\x95\xc5\xad\xf5\xd5\xf5\xf3\x0b\xcc>2?e\x1e\x8f\x13\xee:\xe00\xeb\xb1}?\x08X\x8f\xeb0\x1e\xed\x91\x19\xf2\x83\x8c\x8d\x9c[Q\xc2\xc6\\g\x9aB7\xe2;\xd3\x04\xbb\x11\xe7\x99\xce`,I\x98?\xa1W\x1b\x8f\xc1\xbf\xca\x9b\x039PF\xa9\xba(\xd7\x95T\xd0\xbc\x97^b\xed6\xbcp\xa1$\xe3(\xe6i\xab\xd3\x99\xd9\xe3_h%\x99\xf4~v\xa30s\xfc0U\x17N\xb2\x87T\x8bI\xdc\"w\xeb\xdf]\xe5\xc1\x98+I(\x08\xa2}\xeem\xc3\xa8\xba,\xed\xa8\xe46\x99\x84\xfb]f9\xe9\xba\x1d\x1f\x9e\n\x95\xb9\xcd\xec\xf4\xc0\xaf\xa3\x07\xddI\xa2B\xfdbh|u\x92\x81\xbc\x08L\x0b\x07\xb79V\xcd\x15f\x8a\\\x9f\xbb\xc1^\xab\xfes\xa1\xe9TMEtT\xa16\x18\xfa\n\xaec\xe7~e\xc6\xa3\xfa\xecL\x9f\x84\xdc\x1c\xf14\x1a\xf1)\xc5fSG \x1e/\xe1\x9b\x9f\xa4Y\xbb\x06G\xac\xb2t\xd3.V\xe4\xbf\xc9\xfc}\x82da3rh\xa2\x84\xb8 \x92D_$\x13\xa9\xeeg1\xa6\x06\xe2\x0b\x9b:\xe3\xa7\xe2?\x10\x1b|\xe4H\xa6\x8c\x95\xcf\xbd\xcf*\x97#2\x9b\xf2\xce\xcc\xc8\x89\xa7h\xa5\xd4\xd2\x91#!\xec\x7f\xddv\x1b\xaf\xd1#s\xb6\xad\xd7\x87\x0b\x99W\x19E\x84\x8a\xa2\xf0\xa5\x11A+F\xe5]\xff\x16\xfbFhD\xfc\x80\xbb\xb9\xf4,\xb0j!]\x95\xe5f\xfe\x94E\xd7\x90\xd6\xceH2\x88\xa4\xaa($\xcd\x8aB5^\xb8\"\xe1\x17\xe3\x99R/\xad\xa0\xb7]\xcd\xcf\x9a\x04)|\x9aj\x9f\x83\x89\x94\x1a\\\xe7\x8e\xe8\xa8\x0c\xd6\xd90\xaayr,\x97%\xa6x\xc1M,C\x968\x0d\xcf\xc9\xd6\x1f\x95\xe2\x80/(\x03\x90>\xeeb\x9f\xaa_\xd4\x89\xae\x97\x1eJ\xd4\x7f\x81%5*\x88\xdc~+hb\xfb\xe5W\xdd\xca\x1d\xe0VMS\xf6s_K\xc8x\x1b[\xa9\xac\x0d\x80\x93_\xcd\x1by\xb0\xa3\x0b\xcc\xb1\x83K\x0f\xde\xd4\xd8(\xcb\xaf\xe6X^\xbf\x95rJ\x1d-\xfa\x86P\x89/\xe3\xf1\xd2\x0f\xebnB\xd3\xa1\x94\xd8Vn\xe7N\xf0}~\x08(\x86\xbe\xd1\xf5\xaa[*j?\x917G\xdf\x80\x15\xa4#K\xdba\xfb$y\xe7:2>\x16\x13\xfd\x8dj\x05I>\xd3\xb7\x10\x16{\x82\x02\xf1\xf3\xa2\xfd0\x98\xd2\x1d\x89Y\xc8emj\n\xfd+\xf4D\x9e$\xea\x02\xb9Y]aZQ\x9at\x8d\x8c\x7f\x8e\xa94u?\x10\xf8Tp\xfb\xc95\x02I\x9f\xfb\xa0\xc4v\xcc\xddv6\x93 ~'\xf4\x8a< \xda\x9d\"\x93\xbf.\xb6\x9b\x04u6\n\xfdk\x1e\xbbL\x14#8\xac\xea\xa2[7\xc6\x00\xfe ,\xdc\x0d\xb8\x934\xbc\x8d\xa1\x7f\xcf\x83dB\xfe\x0f\xa6h3O\x82\x05[\x9e\x16\xfc\x13\x03\xde\x96^\xd1G\x1a\x1e<\xd4?\xf5 \xe9j\x98\xf1\xc4\xe5q\x16%\x0b2=\x0f\xfe*\x96j:\xf9\xb5\xfc#w\x8du\xbf\x1a\xef\xee\xf2/\xe1i\x1c\x85)'C%\x9f\x7f\xfbcu\x13\xee\xf10\xf3\x9d ]`\xad\xd4\x19qEg\x1b\xe2\xe0\xf4O\x91\xb7&\xa7\xf6\xf2OP\xc98[\xa8\xbe\xe2y+\x8d\xc2\xee\x1f\x1c\xff\x83\xc9\xe4\xad\xf9\x94\xdc\xed\xccdC\x1e\xb6\xfb]\xd6o\xb8$\xb0Bj\x96\xc9r\xc8\xa6\xd5\x8c\xb4@x\x1d\xa2\x1d\xcc\xd1\xec\xb2V\x11*\xa4i\x8a\xf9\x08zG\xab\xe1\x0d\xf4\xaa\x1553&Nx\\N\xdf\x01r\x95\x11G\xfcg\x01\xc4p)\x90Ws h\xdf\xa8\x92\x1d6\xebLdT\xd9a,\xa8\x85\x90\xb5n\xc2\x02\xddT\x93\xbb B\xf8\x04\xbcQ\xae#\xb6\x04n\xfaW\xb3I\xe4\xab\xcd\xff\xb9V\xb7\x0d\xaa\xdbh7\xe3N\xb7\xb9\xc6)\xa2\xce\x8c_\xfe\xddm\xb2\x0c\x97\x7fU+qe\xb8pc@\xcc\xd4\xfag\xbb\xd9\xb0\xda5i\xe7\xd3\x04\xd8L\x8a[113\x8d\xd9!u\x10N3v\xd5\xa3\xd5B\xb3\x0d\xd8\xf6S\xb3\xb6\xbc.g<\x98 \xd1)]\xf0nQD\xe6;m&=\xf5\x98\xdc`\xed,\xa2\x88j\x1e\xa0\xa2\x9b\xfa-\xfb\xbf\x90\xb5k\x82\xe7O\xf5\xab \xca\x99\x9f:&\xe7\xab\xf2 \xfa\xed\xda\xe5\xbe\xace\xf3\x85\x9e\xa4\x1a\xf32\xab\xe2M\xdf\x8e7\xf6\xba\xea\xdai\xbaH\xb9t\xe6EG\xca}\xe9x6j7u\xdba\xfb\xf4 \x12\x9c\xa6\xee\xa8N\x9c\xb0\\R\xc9\x00NZ\xc5Q\xa0\x93\xb3\xb3\xb6P\x04\x00\x11\x0bm\xaa\xc6pr\xb6\xe6\xecXB\xb9\xfe\xe9\xc5\xb3}\xcd\x01\x18c\x95T\xb2\xda\xc8\x80gk\x91\xeb\x04 `-4\x9b\x03\xb5\xf7\x834K\xc4N\x92\xf2\xab\xceHU\xed\xb4\x0bi\xa9q,\xbf}bf\xec\xd8g\x0fw\x130Tk\xfb>|op6\x85\xf3S\xb9v\xc0U'^w7_\xa2\x96\x169\x9b\xe9\x87`C\xef`E\xb9\xee\"^O\xe9\xb9\\#\xac\x06*}\x99[\xb9*\xa0\xf2\xb7<\xb7\xe6\x9cFh9\xda\\)\x1f~\x97\xf96\x03\xbf9\x0d~\xfd\x1dIh5\xe2\x87U#>{\x8d\xb5\xa3&\xfb\xbdR!:\x02w\x9f\xab\xd8n\x12\xb4[\xe2CU\x89\x08KV\xfd\xc2\xa8?\x93'\x81@2x\x81]HH\x99\x8a\x84#\xe7%\x04\x03\x89ED\xfd\x06\x9f\x9f2\xe6\x0fx6%\xa6q\x15\x0d\x83\xdf\xdf\x94\xf6\xfc\x05\x19J\xf8\x0d\x9d\xa5v\xef\xe8*\xe1q\xde\xf6\xda\x9f\xf4\xf0\xf0\xbf\xbc\x87\x07e\xb0u\xb1~\x82U\xdb\xef>e\x00\x91\x8e\xad+\xc5sE]\x96\xce\xecn./\xee\xac\xdc\x84\xd8\x86\xed A\x0df\xef\xe0\xb9\xf1j\xb4J\xa1\x04\xd0P\n\xdc\xeb\xce\xc6\xf9\xf3k\xd3\xf6\xfa\\1)8U\x89\x19\xb2\x8a\x05;\x82\x02=\xa2o\xc2=\xf7\xf3\xc9\xd3\xd7\x0d[\xb5\xd9\x1f\xa6\x91\xad\xa7\x90o+ \x16\xea\x8b1e-\xe0\xf8\x15\x8d\xe7\xd09\x9f\xfb\xbe\x91C&\x1b\x95c\xb4[xtNa\xb2f%\x84\xda\xf7C/\xda/.3\x86NZ\x93\x00\x0d\xff\xb2\x99\xc09\x8c\xf2L\xc7uKJ\xbe\xccy\xbc\xe6\x87{\x17\x9ct8\xcd\xfd\xd2\x04\x1b]-\xf4K\x98|\xc4\xae\x9a\xfc\xb6\xb5\x1b[\xf2\xcc\x99\x90\x06\xc4$\x1d\xdaq\x06\x0b\x85\xbb\x10\x1dJ\xe5\xcb\xdd\"\xd1\xacEUq\xa4\x9a`UU\x00\xf4\xb2-|\x07@\xdf\xb1+\x17\xce\xd7'W\xff\xf6 \x89\xbc\xcc\xd8v\x93(\x08v\xc0\xf5.U\xffPw\xe0\xf2[\xc2\x1d\xefp'\x82r\x8a\xb8\"\x1c\xae\xd45!X\xcd\x0e\x8f\xfd\xda\xb8\xf6\xbe5\xf2\n\x0c-'g\xb1\x97d\xaej\x9c>AR\xa34\x86\xb6c\xde(\xdf\xa0l\x07V\xac\xe8\x7f}X\xc1\xd4*\xc5\xe5e\x9cH/\x0b\xc67\xc9\xcf\x06\x9c5\x81&5\xc4\xbdLKp+\xef\xf8c\x0f{\xd8h-\xafU\xde\xc2\xcfT\xee\xe3\x08r\x1f\x17\x9e\xf6y\x8d\x99\x1e\xb2*V\xa9y\xd4\xe9\xb2\xb0\xdd\x91\x8f0\nT\xf4\xc3Ag\x8aG`\xc5\xfeG\x13#D\\Yj\xae\xe1\xd6 0O@k\xa14\x10Bi \x84\xd2\xa0\xa1\x9eV\xa6\x13!\xef\x8b\xe3#+\x9fK\xa2\xd1j\xba=\x8c\xf6\xc3\xef\xf3C\x89\x88u\x0d\xc8\xdca}\xf4:ls\x7f1\x8d&\xeeO\x8e\xa5\xf1\xd8\x19\x16O\\\xa9\xa1,\xd5\xb4Rr\xc0n\xa7\xac\x9e:B\xcc\x12\x93\xef\xc8\xa4\xa2\xf5u\xe7\xe5\x9d\x8cyX\xf65\\\xbb-\xe3\xd0\xe1\xcaA\xd3\xa4M'\x83v\xd9Q\xe6Iw\x16\xf1\xd7P\xaaTs\xd5\xf6^z\xe9\xb9\x1b\xac\x8b\x84\x98\xea.\xbe\xaa\x07N\xff\xb2Z\x95hT7\xc4\xc3\xf4\xb7\xf9j\xa4\xd6\xd8\xca\x8a\x8b( \x107\xa1\xcd\x9bYTs\xfdd\xae\x9dp\x1eIE\x06\xafs\xfaTW\xe3T\x86\xb5\x0cf\xaa95[GX\x85RV\xe4\xb2z\x0c\x9f\x92`2\x85\xe6`z)\xa8p\xa7J\x9f$\xbbh\xc2\x8f\xb1\xc9\x06\x04\x0f\x90\xcc5\x1c\x8d\xd6\x11\xf08\x13\xc4\x8c\xe9\xcc\xf9\x91\xa9\xd8\xe9J\xc4o*\xd1L4|\x9c\xf9w\xfah\x12\xfd\xd3'\x9e\xebwhT\xba\xdd\xf6\xf1\x9b\xc7\x07]\xd6b\xad >\x1c\x13(\x94#\xe9\xa8o\xe8\xa6\xa0\xa2\xbb%\xaa\xda\xf6\x1b\xe6\x18J\xfe\xdav\xba\xf0\xdc@h\x8eP\xdby!\xe7rl\x95\x9f&2\xf3\xa9,l\xac\xe2\xf7\x8b\xd0S\xe0\x9f\x96\xeb\x043\xa9Y\x03\xd7xi\xf9i;\x01\xfd;0Z:\xef\x80\xe1:D\x1a\x0c\x92\x11%g\xc7e*\x92\xa5-t\xacq\xddF5\xb2\xe8\x8b[\xb9f!A\xca\xbd`&\xec\x87\xc5Zn:\x89\x98/\x17\x92\x8cY9u\xd7-\x0b\xc8G\x1eg\xb2\xa8\x96\xac\xff\xd68\xc4@\xae(\x96\xf7\xa7\xb1\xd7O\xc3%d\xbb\x8aWP\x87\x1340\xbb\xe5\xa9\xda\x8d=\x9e\x01m\xc4\x94f\x04M\xf0\x8d\x97\xaf\xfeC\xe1U3\xe5\x97\x84|\x14\xe7\x19\xf7\xb6\xb3\xc3@\xe6#\xae\xad \xd6\xb4\xe5\xf4\xd2(\xc83\x95S;\x99\x89\xa3T\xc6\xea\xd4W\x93\xf1\xf7\xec5v\xbc\xed\xe4Y\xf4#X\xc7\x1f\x0d}\xcf\xe3a\xe78[\xa8\x02:\xc7\xeb\x99O\xab\xef\x1fp\x0f\xf7\\\xbc\x90f\xafidx\x99^\xf0U\xf9\x1fG\xf0\xe0b\x91^\xad\xa7\xd221\xbdm\xa5\x9cN\x97\xb5\x8f\xc8wTZi\xe6d\xbe\x0b\xae\xd3\xe5\x81\xbd\xf4\x12\xf3eZ\xe0v2\x13\x8dy\xd2\x0f\xa2}v\x94\x15\xff\xb8Z\xf9\xd7\x1b\x9d\xc2\xdd\xde>\x17=\xd3IX\x88\x14\xc5 \x960\xc0\xf3\xdaT\xa9\x93\x8d_\x88\x96-\xb0\x86D\xe7\xba\xec\x02\xab\x89q\x13\xbf\xcaQ^`\x83\x06,.\xb3\x9f\x056\xae/I\xa4\xae\x056\xb4\x13\x1f{\x1b\xa5{\xe9\xfa\x95\xa8r\xa6i\x1d\xbf\x18\xc3\x9e\xccM\xef$\xf5UZ\xac\xed\x01\xb4_\xd4{\xa44\x8b&\xa9\x1e^;\xf1\xbb,\xb7SgDX\xb2\xa1\x9fvY\x9d]\xd5\x08\xc1\xa9\xd5\x90\xed\x1aCv\xda\xe9J\xeb\xed\xec\xab\xac\x0f\x8f\xf8\xf5\x8f\x1e\xed0\xf7z\xbfj\xc8\xee7\xbf\x16/\xd8\x9cO3\xa7\xc2 \xe5\xbb\x83\xc1\xcc\xcd\x9b\xd2\xb9\xec\xe6M\xed\x12]\xf2)\x0f:\x1d\xe9a\xa6L\xe2\xbc\xcb\xae\x8b\xba&\xc9\xb2\xdb\xe9\xc8\xf0\x99(\\\x8b\x1co\xa2\xfdL\xff4\x07\xf6g\xe2$\x8a\xd3\"\x93\xc2L\x16\xc1\xc1j\xca5\xc0\x14\x17F\x92G8\x939\x83\xae|\x04U}]\xf5\x1a8*\xbe2\xadH\xb0\x82?\xd4\xe9\xc4p\xc3\x10\x12G\x02{V\"J\x96K\xe6\xe9\xbc\xb4\xd2\xf06<\x92I\x82.\xaby\xf6hO\x88=\xad\x84\x87\x1eOj\xcc\xa6\x8a\xdaL\xbc]a\xc5\xa0Rdq0Q\xaai\xec\x84\x84\x9c\xd1F\xfa\x0b\xf0\x9c\x04\xe0Cm\xe1\xbb\xdd\xda\x9e\xb8z\x90B\"F\x1d?\xa7\xab|\xa3\xd3E)\x19\xee\xb6\x8b.\xcc\x15\xf37\xda\x87\xe7\x1bG\xfaCi\x176\xff\xfc\x1d\xd9/\xfd~G\xf6\xbf8\xd9\xb7\xe8\x85\x9a\x13d\xce\xe0\x0b\xd3\xec\xf0w4\xfbw4\xfb\xab\xa6\xd9\xcf\xe7\x1ag!?\xb5It\xa28='\x13\xb2=\x87\xe3R10\xc4Kt\xba\xaf\x93\xb3\xa7-L\xe3E\xe5\xfb\xfa\xe6\xeeG\xa3\xb7(\xc9{gy/\xa5TA\xbe\xd5~\x86\x85&`\x13\x87\x0f\xfc\x97\x85\xa1\x93\xcc\xd4l\x8a`\xa8)\xed\x19\xcc\x04\xeaB$\xf9tlD\xff\xa6\xf5\x1e\xc2?U/\x91\x0f\xc0w\x1b\xbc7'\xb6f7\x9a\x19h\xb3\n\x03\x13\xbf\x98F!\x9e\xfc\x146L\xf6%\xe6os\xe3jwf\xa2P\x90\xdc\x80g\x96G!m?\xb3\x8c/\xbd\xc4Zz\x10\xe5@\xcdP^\xec\xa6<\xdb\xf1G<\xca\xa5\xbb3<\xb8\x7f\x86\x1d\x99\xeb|\x95+_\x0b\xad1s\x92\xaf\xd3\xd2Y9\x15\xeb\xa1/\xefF\xf9\xbd\xc6\x96\xe7d\xce\x82?r\x06\xfcx:\x1e\x1c=\x18\x05\xaf\xf6\x9c\x94\xbf|\xb2\xbbya}\xfe\xda\xe1\xd9\x13\xce\x95\xadYgy\xd6\xbftkq\xdf\xbd0\xf0W\x97\xceF\xd7\xae\x04\xa1s\xe1\xf5\xd3\xab\xb7V\xf7/]8{r\xd5_\x1c\xf0\xf3si/\xbctzu4\x9c\xf5.,\xbe\xbcvx\xfa\x84w\xc2\xcd\xbd;\x97\xf2\xde\x89\x8b\xe1\xda\x9d\xd5\xfdK\xcb\x8bc\xf7\xc4\xb5p\xd5?;\xef\\\xb9|\xe2\xf5\xd1\xe9\x93\x9b\xdb\xab\xfb\xab\xcb\x8b\x83K;\x8b\xfb\xab\xcb+\xfb\x97\x96V\x07\xee\x85\x8b\x81;\x7f\xf9\xd0\x1b]>\xeb\x9e8\x1b\\=\xb1\xb5}\xf5\x8d\xad\xb8wg\xd6\xe7+s\xf1\xb5s\xc1\xbas\xe5u\x7f\xf5\xfczz\xf5\x8d\xf5;\x9b\xdb\x17\xd3k\x17.e\xee\xe8t\xda;\x1f\xe4\xd7\x0eW\x07\xee\x89\xadS\xbd\xf3\xbb\xa7WG\x17\x87W\xe7\xb3\xd0\x1d\x9d\x9e\xeb\x8d^\xcf\x9c+s\xc3k\xf3\xbb/\xaf\x9e?5\xee\x8dv\xbf\xb3z\xbe\nw\xcf\x9f\xbe\xe3\x88\xbe\xe6O\xbe\xbcz>\xc8\xc5\xdfW\xaf\xec\x0f\x9c+\xa7b\xef|0\xec-\xa7\x83\xab\xa3s\xb7\x9cy\xef\xb0w\xe2r~mi\xee\xf0\xda\x1bg\x83\xabo\xbc^W\xde\xdf\xbcup\xcby\xe3\xe2\xad\xde\xf9\xdd\xc1\xd5\x13\x83\xd3\xab\xb7v\xf7W\xfd\xb3\xb7\xf8\xce\xac\xbf\xbe\xb3\xe8\xaf\x9e\xbf\x16\xf7\xce\xef\x9f^\x1d\xc91\xf9\xab\xe7O\x85kW\xce\xcdz\x17V3\xf7\xc4\xd6ao>\x0b6\xb7/~\x87\xcf\xaf\x8f{\xa3k\xf1\xb5\xc3S\xb7z\xf3\x07c7\x9c;\xbd\xea\x9f\xcd\xaf\x1d\xce\x0d\xbd\x0b[\x87ko\xac\xcf\xba\xa3\xd3\xc9\xb5\xed9\xb3o\xfcDv\xab7\x7fj\xe4\\qso>\xd8\xf3\xce\x0fO\xf7\xb7W\x07\xbd\x91\x9b]}ck\xd6\xf5\xe7\x0eQ\xdb\x87W\xafl\xc5\xde\x1b\xeb\xb8\xdc\x1d\xef\xc2\xc5\xb13\xbf\x9b];\x7f\xee\x8es\xfe\xdc\xa1;:w\n\xd5\xdd\xbb\xfa\xc6zt\xf5\x8d\x8b\x87W\xdf\x08d\xfdb\xfc\xab\xb7\xd6wv\xe7\xc4\xffV\xfd\xb3\xa6-\x18\x93X\x93\x15\xb1&\x87\x9b\xdb\xabw\xd6K\xf5\xd6\xael\x0d\xdd\xf9\xe1\xd0\x0d/\x0e\xc5z]\xda\xb9:\xbbvk\xef\xce\xa5;W\x0f\xd6\x97/\x1d\\\xba\xf3\xfa\xfc\xfa\xf2\xca\xdc\xea\xf2\xee\xfc\xda\xad\xbd\x13\xebw\x06'.\xed\xbc~g\xfd\xce\xe0\xf0\xd2\xce\xa5\x93\xab\xb7N\xber\xf5\xca\xa9\xb8w\xe5\xdc\xec\xb5\xcb[\x87W\xaf\x9c\xbasmt\xfa\xb0\xb7}V\xae\x99s\xe5\xe2\x9cw\xfe\xf2\xc6\xd5+sb\x8dg\xdd\xd1\xb9\xdc\x9d\xbf6vG\xb3\xfe\xea\x85\xadS\xae\xc0\xa1\xf0\xe2\xd8;\x7fn\xf6\xda\xf6\xea\xe0\xea\xfc\xb9\xf4\xea\xec\xdc\xf8\x9a\xc4\xad\x83\xb87\xbau\xf9|\x90]{\xe3\xd2\xe9\xd5[\x8b\xdf\xb9\xb4\xbd:\xb8v\xe1\xb2\x98\xf3\x81{\xb8:\xb8:\xba\x1c:WN\x9e^\xbdu\xf6\x8eX\x0b\xc0\xab\xade\x81g\xde\xf2\xac\xef\\9\xb5w\xed\xca\xb5\xb87\n\xc4X\x8en.\x9d\x1e\xf6F\x81\xd8\x9f\xe0\xf2\x85\x8b\xc3^\xb8>\xea\x9d\xb8\x98m\xde\xda\x1f_\x9d\x0f\x0e\xaf\xce\x1f\x04\xe2oq\xe66\x07\xd1\x99\xd67D\"X\x8a\x82\xc0\x89Sx\xbab\xcd\x0f\xf7\xe4\x1f\xe0\xcb#\xff\\\x0d\xe3\x1c\xfe\xda\xe1\x07\xd9b\xc2!\x0d\xea\xd9<\xcb\"\xe0\x16[\xd2KX6\xa5\xfe+\xb3}\xcb\xb7{\xeb\x82\x11\xa5\xff51Ch\xcf\xecW\xac\xafS\xf6mF\x10G7f3i\xf4mF\x90T\x01H\xef\x81\x02\x10#\x88\xab\x00\x15#\x88\xf4\x13\xb7\x9b\xbf\xbf&\x87m\xdaqLx\xbd\xb10p\xab\x85!3\x16\x06\xae^L\x98}\x95\x85\xec\xbb\x8c\xbf\xca\xc2\xa3G;L\xc5\x0d\x17\x16\x86\x10\xa9\xe1jb\xd9tI\xa3U\xe9#G\xd0\xac:3\xb7\"?l\xb7X\xab3\x93%\xfe\xa8\x8dEg&\xb5\xfc2f\xd5wd\x96#\x9b\x14\nLl \x99R\xdbSb\x1c\xc9\xa8a\xa4|G\xdc\xe9(\x99\x05\x8a\x17\x12K]\xec+\x1aIPj\x0b\x9e\xdfE6\x85\xccj=\x98`9\x98\xd6j\xa0\x11\xa4\xd0\xd6\xebET\x95\x834\x0f\x82\xd4M\xb8\xed\x81)\xfd\x0bM\xc9\xfa2\x96\\q\xbc\xcb\xae\xb7\x8a\xf6e&\x9d<\x08j\xdf\x1e\x93\xc9\xec\x8cg\x8e[k\xf5\xe0 \x88B4\xaf\xad!\xed\x84\xd4J\xf7\x9d\xc1\x80'\xc7\\\x8dn2\xabN\xc8^c\xadcr(l\x81\xb5\xea\xbc\xc6\xa7\x1fG\x9b>3\xe97\x99e\xdc\xc0I\xd3u\xf9XZ\xdc\xf6g\xcc?+\xafj\x95\x7fw'\xbb>\xde\xe8Tb\xfd\xdb\xae\xc5\xceR\xa5\xde\x1e\xf1\x97\x1bE=?\xe0bI\xaa\xfb\x9c9\xbd\x80g\x0b\xacu\x0c\xfeB`\x8f\xa7{Y\x14\x0b\xb8\xfa\x13\x15\x08\x9cd \x9a=6\xf4JW\xb3\xafV\xe8A\xf0;J\x00\xbf\xdf\x1a%\x18\xfa^CV8\xa0\x01{\x9c\xc7K\x90\x8d\xb3\xa1=I\x0b\xf8\x0c\xa0\x93\xd0\x02\x01m\xba\xd2\x9bB\"\x88\xf8Sb\x05\xf1\xdb\x90DC\x0cE\x90\x8brw\xe2\xdf\xd0\xa2|\xabQ!\"k\x19\x94c-\xd9b\x8b< k\x86%\x93\xf1\xbe\xf4\x12;\x12NAe\xc0\xb6*C\xe8\x9b\xa9\xcc\xf5\x1a{\xb6\xe1\xd89\xf3C\xe65\xbb>z(\xedG;\xefL\xd2\xf6\xf5u\x83W\x1b\xec\xa4\x7f\xa2\x83\x1c\x1e\x0d2F\xdc)L :\xc8\xa9\xa85\xb1'\xa6z\x0b\xd8w\xd9\xdc4}0\x99\xd4Q\xbe\xe5\xd2\n\xa3\x90\x0b\x02=mT\xad\xa0\xea~\x98O\x91hob =\x84^\x10\xb9{0\x86\xae\xf9\xe8F\xc11\xf9(\xa5\xfc\xde\xd8\xd6\xf3\xda%t\x0cW\x8c\x0c%\xd7K\\\xc1\\\xca8u\x88=\x11\x97\xbf0\xa7J\xb3\xc3\xa0\xf6yl\xfd\xf3\xfc4\x0e\x9c\xc3\x05\xe9}\xacv\xd1\xf2nG\xf9\xd7`9+1\xc7\x9a\x14J/\x86\x19v\x8d\xc2\xf3;\xb6\xf3\xe2\xd8\xce$T\xf4\xfc\xb1\x1d\x0dK|jZ\xc9\xa9\xa8R\x16\xa1Z\xfb\x89\x13\xc7<\xa9u\xd2{!\xd8S\x1c\xc4vI\x85\xfe\x1d&}}\x98\xd4\x93\x8b\xfeU#\x93\xea\xe5+\xc5\xa5\x8e\xfe&\x98?\xcd\x91Y\x1af\xabF|.\x19t\xeaQp\xd2\x82f\xfc s\x12\xee\xb4*\xb7\xec2\xb5\x936\x1d}\xf1\xc6}\xd1\x02j\xb9r\x86\x8c\xa1j\xaa3Tw\xa1Ws\x80(\xdb\xd4\xe6\xab/z\xb0dV6(-\xc7b\xe9b\x08\x85lo\x81\xeb\xe8\xcc\xba\x17 \xd4jB\x00\xa7<02\x15&\xfc\xb5\xc0\xf8\xcc(\x0f2?\x96V\xa7\xeb\xad\x96\xf4\x0bo\x89S \xaf\xf6j\xb3\xac\xaa\xa3\x17Q\xa4\xedZ/~\xf5\xef\x1bC\x13\x9e_\xa9Q\x0f\x0d^\x16\x1d4\x14\x06\xedF\xafj}\xb9\xa4hte\x14g\x87\xb2\xdd\xfa\xe2\x91\x1e\xab\xdc\x17\xd8?\xf9<\x12{\xcd\xfe\xbd-\xb3u!\xc8\x17\x15\xfa\xc4\x81jt\x0f)Q\x16+\xf9\xab\xad\xa8\x17\xaa1\xab\xac\xc6\xb6\x86\xe5 \x97\x86N8\xe0\xc6?\x05\xfei-/P\x94\xbdV?\xdd(V\"n\xfdt\xd5\x80Z\xf6d\xd6w\xbb\xacu\xecX\xab\xa3DWA\xf6\xaaq\xca\xd3\x054|\x99\x012}R\x1a\xa2 Y1\x91m\x999\xb7)}\xfd\xddnQ\xe8\xb7\xc9\xc2\n|92\x87\xac\xfe\xd5\xa3T\xbd\xd7\xa8\xda\xab\x86\x93BM\xcb\xd4\x81\x9e\x99\n\x8a\x95\x9b\x9a\x18\xf2\xc9'\x91\x1a\x08\x9e\xd6m7\x93\x83p\n*\xe3K\xab\x02\x84\xd7+N3\x939\xc9\x80g3\x80Ei\x83\xf3\xb43\xe1\xa5\x1b\x01\x8f\xd8k\xcc\x9f\xce\xd0\xaf\x7f\xc6\xb7\x06\xe8\n\xb7\xfb\x91\xdd}\x9e\xe0~\xd3\xa4\xc4\xe7\x9a\xf6\x04=\xd4\x93\x97\xe5\xba\x103\x04\x81!\x13\x0f\xbbS\xd3l\x17\xdc\x1a\x12[\x88>\xc2\xff\xeaR\x8f\x85\xd0`.\xd8\x9a':A\xe8g\xbfe\xc1\x9f\x91\xb9\xb2\x17\xc2\xec\xd9d\x86\xcf\x9e\x83\xe9\xb3)\x88\xab\xf3e\xf4\x00\xe8 X`\xad0\x8ab\x1e\xf2\x84\x85Q\xc2\xfb\x9fCe\xd5e\xb0\xce\xb6\xd1\x8c\x98c\xf3\x04\x9d;\xf4\x03/\xe1\x96\x90\xeeIK\x0e\x9a\xbc}U'\x9a\x8d\x86\xdc\x1f\x0c\xe5c\x13ymR\x18\xf1\xebE\x89\xc7\x93\x05eUj\x10H\x9cd\xe0\x87\x0b\xac\xe1\xa1\x92\xd8\xf1\x95\xfa\xf2O\xc9\x04\xb0\x1ee\x8b\xa1?r2\xee} \xc9_\xdfN\x17'\xccO7\xc4Y\xf5\x1a\x84\xc2\xb1\x8e\x19,\x1fL\x85\xf0\x82\xb1\xd4\xe2v\x18\xa5n\xe2\xc7\x99\xbe\x00\x98@6\xef\xda\xce\xc1oO\xe5Q\xab=I\xdb\xd1\x0b8I\xdb\xa9'\x11\xac\xb41\xec5p:\x0e\x95\x8f1,\xfc\xc4\x9dI:F\xe3!\xe8by\xb3\xe3\xc5\x8b\xa6z\x15,\xa2\xa9\x1a\xc6\x82v\x00d\xec\x9b\xe1\xffK\x9dp\xbcZ'\x1c\xcf\xe6j\xe3\xeb*6\x1f\x1c\xcf\xe6j\x93+\x8057\xa2gs\xb5 \x14\x80\xe4\xecw\x15\xe0\xf4+\xa71\xa8\xaf@sd`\xb1\x86\xd8\xfdt\xbc\xaf\xc7OG\xffE\xb4\x91\xe7\xa5\xf5E\xfcQ\xd2\xb5\xa5 \xc1d\xbc\xd6\x8c5!\xee(\xa8\xc4\x1d\xb9\xe0\x15\xe4B\xdc\x91{\xf4h\x87\x05\xd7\xdd\xaaW\x90k\xb9\xe0SK)\xa8\x866\x99\xe5\x84\x11\x81\xdf\x19aF\x115\x9b\xd5\xc5\x1c\x052\xe6(\x99\x19\xf0\xecR\xe4\xf1@HO\x13E\xec\xd2\xf8\x94\x17?7^\xfc\xad\xdf;^z\x15\xfbxKf\x93+2\x87\xfd\xe1\xcc\x1f\xfc\xde\x0f\xca%~p\xfcx\x97\xb5\xa4\x05\xc0\xd6\x96k\xd2\xd8\x1eO\xdd!\x1f9\xa4\xc9\x9aB\xbaQ\xd0\xca\xc8\x14\xee\xaaIo\xf1\xfe\xb6\xac\xf2<\x93N\x14[\xab\xbc\xbf;\xd3\xf7C\xafx\xde\xdbf!\xb8\xdb\x85\x9c\x14\x84\xa1'\xc4 \xa5V8H\xad\xc2\x81\xf3<\xc2\xc1\xd7\xca\x18Uj!\xb9=\xcdJ:\x9f\x98\xff\x94)2\xca\xa7}\xf9\xd8\x81\xc2r\x83\xebK\xe5\xb2T\xc2o\xe7~\xd2\xc4\x99SY.l4\xd2\xb9\x8a\xcbo\xf1~}\xa1\xbe\x99\xc3f\xeds\xf9L\x11`>\xa3nz\x9b\x8d\x832\x8dd\xbb\x05\xecN\x9e\xe4V\x83\xb9b\x08\xa5%\x95\x9aXx\x0c\x857\x13\x7f\xe4g\xfe\x98O\xac0bgX+\x92#i\xd0\x1e\x06\x82\x04\xc2\xab\x902)\xd0\xef\xff~\xc2\xfbuna2 \xa9|\xccx\x00\xe1\x0f\x1a\x07\xcbt\xab=\x10\xb4\xec\x88S\x14sJ\xc5\xccIo\xa7P\xcc\xb8\xa3\x04\xb5\xd6\xdcI\xa1~\xe5[\xa2\x91\x18\x06\x93\xff\x7f,\xf3\xb3\x80\xd7Z<_`\x7f\xd0\xd3\xcd\x9b\x19?\xc8j\xfb\x8b\x05_\x10\xbc\xa8\xb6c\x7f4h\xec7M\xdc\x05\x16\xb6O\xce\xcd5!\x95V/\xe7g\xe3\x83\x86\x8d\xdf\xf7\xbdl8\xb9\xd8Du\x96\x19\x15t\x8d\xf7E\xbfs|4\xe9\xa5=\x95\xbcL\x92\xc2\xc0\x11\xd8<\xa1F/\xca\xb2h\xb4\xc0Zb\xb0\xb5%k\xe2_\xea\\G\x04\x15=\x94\x89\x1a\xfctcq\xfbD\xbbS:\x07\x1e\x8f\x13\xeeJ\xcd\xad\xa6z\xba\xef\xcbL\x84\xae1:J\xbe\xe9\n\xa5\x8c-\xb0#G\x06]y\x06\xcb\xa7+;\x8c9\xbc\x997j2\xf9\xb8N\xca\xcd\xd9]h\\\x99 \x87\xc7\xa3\xb6\xa1\xc6\xe6\x18Bo5\x86\xc6:\xcfelb*\xc0N\x90\xdc\x05\xd6@\x9d\xf5\xaf\xe0F\x8d\xf7)\xfa\x07\\\xa6\xf1\xa12\xfd\x0b\xe5\x14\xa7xL\xbf\xc0\x85\x05v8\xb9\xb8d;\x0b\xccm^\xb4\xa6\xcc\xb1\xb0\xff\x8e\xe0\x0b_n\xfb\x87_r\xfba\x08/v\xf7\xff\xf1m\xa8\x96I\xea\x1e\x8b\xd3\xbf)\xf6T\xbd\xf8X\xbf\xa9P,\xccG=\x9eL,\xe6\x87\x19\x1fLQ\xae\x17E\x01w\xc2\x86rZ\x03\xfc2\xc86\xfe\x92vh\xa6\x91C\xc9\xa9\x13\xef\x02\xd9\x7f\xe9\xd8d\x85O\x8c\xe7\xac\xb5\x0c\x95\xb0s(\xb7d\xe70\xe6\xd4,\xa4\xd7\xa8o\xf6YZ\xa2\xb9w\xc9\x89\xa5Lm\x93\xd0\xab\x1b\x17\x9b\xaaB\x97i\xae\xa46o\xca*\x15\x95\xa3\\\x0b8Um=\xd8\xcd\xa28\x1c\xc4j\x99\x92\x88?\xa9\xa8\xa2\xf1E!q\xc4\xaaE\x8a}n*\xc5\x0fbG(\xac\xb1`\x87EA \x00hx\xd3\x14*\xf1VS.\xf0\xd3\xf2\xc2\x14\xa8Q\x8d\xa6\x87L\xa5\xbf]\xfb\x9e\x18Q\xea\x08\xdd\xfd\x8e\x0c\x90\n\xa8\xc1/\xb7Y\xd6\x84\xe6\xda\xce\xc1J\xd6\x95EN\xce\x9d\xea\xd8\x8c\x7f\xb2\xd0\xec)\xab\xfdO\xc2\xe6N\xd8\x0dm\xf9\xd7kh36\xb0\x19\xc7\xf3.D\xd1^\xbb\xd5\xe3\xfd(\xe1\xdbjy\x14\xd9M\x1b\xd3:\x9a{\xe6a\xc2\xfb0\xcc\x94g\x8bY\x96\xf8\xbd<\xe3m!\x80\xb7\xba\xf6\xdb\xbfN\xb74LlzM\xa7q\x89;\xfe\x87\xd7\x17\x8f]\xfbA:{\xec\xf4\x91\xd7~0s\xe3\xe8\xef\x1f\x1f\xa8d\xc5Ug8\xba\xda\xf5i\x98\x8a\x85\xd1\x88\"\xf0\x94\xae\xf5\xe2\xf2\xf2\xcd\xc5\x9d\x9d\xad\x05v\xbd\x05\x97\xe8\xadj\x86P\x92\xda\x82\xd5\xe6c\xc2C).\x11\xd3(O\\\x8bE\x00\xee\x19\x1a\xfc\x89\xfcBm8s\x06\xee\x0eZ\xd2w\xbc*B\x08\x95;mgE\xd6\xe6\xa4N{\xac\xbb\x94\xach\xabN\xb2\xe7E\xfbaU\xa4\xbbK\x0d\xac\x10\xbbq\x86\x85|\xbf\xb0c\xd6\x08\x8f\xc3l\x14\x88clg}\xd9a\x1c\x0d\x12'\x1e\xf2\xa4\xbeP/\xe1\xce^Z\x0f\x0f\xfcp\xcf\xef\x1f6\x17\xd8\x91\x9b\xbc\xc0Z7{\x81\x13\xeeY\xd2\xa8w\xd4EK;\xb3(\xd0\xae\xcc\x12\x96\xa3\x850w\xff\xafI\x15\x05\xf8\x9fq\x8d\x91\xe3\x8aa\x7fJ\x86\xa6\x01\x04\xb1FN \xd6\xeb\xd9Gx\xd7\x17/m.\xb0\xd6K\xa4|l\xf9\xba\x18J\xccy\xfc\xe7\xb84|\xbf\xf7!\xfd\xae@\x8f\x7fNA\x00\xf8K\nH\x83H>)\xf1\xec\xf1_P\xe0X\x02\xfe\x1b\x02\x90\xb3\xbbGvDz\xa6\xb6\x9e=z\x9f\x02d\x94\xac\xb5\xca(\x85\xf9`,\x02\x90\xe3\xc8\x16?\xb2\x03{\x12\xf8\xd8\x0e\x94\x07\xf2\xd1\x13;P\xf6\xf9\xe8\xa9\x1d\x08\xb3\xf8\x1b;P\xe2\xfc\xa3\x7fm\x07\xca\x85y\xf4?\xda\x81\x12#\x1f\xfd\x1b\nL2\xb9\x02\xbf\xb2A\xc6r\x8e\x0f\x08]\x01\x18L\xe3\xaf(0\x05\xfc\xbfGhE8HEo\x9f\xfc\x84\x02\xee8\x89\xc0\xe7g\xff\xfc?`T\x8c\x06\xd2\xee\xfa)9\xd0\x1a\x80[[\x8c\xe2>\x1c\xf5\x7fO\xaa(\xc8\xcf\xff%\x86\x88S\xf0\xec\xfe=\xf2Y\x10>\x89\x88d\xe9bID\x1fcJ\xe6\x00F\xdf\x7f@\xbe\xfbr\xc1\xee?$\x80(]`\xado\xe3Y\xc4qpxN1#+\xa9s\xe28\x89\x0ej\xc6-@\xfc\xb6u$\x8b\x89\xf4\xac\xb2l\x83\x06|\x80k\xa4.\x10\xcf\x7fI\x0e\xb1\x81\xfco\xa4N\xea\x0f\xe4\xc0\xef\xff\x8cT\x12X\xf0\x07\xe4\xeb\xe1\xa8f\x17\x04DM\xe6\x9f\xe3n2?\xf0$\x8d&L\xd1@\xfe\x07\\'\x17\x02G\xeb\x13\x82Q\xea;!!\xfbn\x14\xfa!\x1c\x14\xcc2\x9d}\x05\xf9\x08S\xf5\x9e\xe3\xee\xb9\x11\xd0\xab\xfb\xefZ\x80Z\xcf\xee\xbdG\xa0\x89\xa4\xbaO1}\xef9\xc9\x98\xcb\xb1<\xc0\xfd\x9du\x92}.1\xfb]\xcc\xbb{\x05\x08\xa3\x1a\x80\x80dS`/\xd9\x13\x80?%\xf3\xee%{\x99\x06\x92%\xab]\xeb\xb3 s\x90\xfd\x81\xcf\x98\xe7\xf6\xbc\xdby$\x97\x1dK\n=\xee:y*W\x0e\x8f\xec\xac\x04q+\xac\xd7\x08\x1b\xc5\xd9\xa1\\\xf4G\x98\x92\xf4\x04~X\x91\x83'a\x94\x8b:oc>qV\x82\x82\xc0Ok\xc0\x99\x9430\xf9\xeb\xa9\xef\xff\x0b\xfd\x0e\xa2\x0c\x1dB\xb6\xcf9\x1co\xd2\x89\x96\xb4\xc8\xbej\x00f6=\x7f\xe0\x02\x05~\x88\x05O\x01\x02\xd1\xf3\xd9/0 \x16\xb0\x1c\xaa\xe1\xc3\xdf\xf3\x07\x91\x17\xc1\xb9\xc4\xb2\x93\x80\xc5\x01l\xe4GX~\x12\xc0\xcc\x1fq\x80ZF\x93\xdeV}~D\xd0\xdd\x1f\xa4\x99#\xb9\xc5_\x90\xa9\xfb\x83,\xf1\xa5,\"\xf4&Q\xe6=rr\x8b2\xd0\xc3{\x98\xd6\xf4\xfcAnF\x8e\xa9W\xcf\x1f\xa83\xfa\xd02)s\xda\x1e\x92\xe5\xd8s\x92h_\x80\xde\xc7\xd4\xa2\x178\xee^\x10\xdd\xe1J\xb8\xfa\x10\xcb,\xb2@z;w\x12 \x7f\x0f\x0b<\x12\xae'%K`5\xa1R\xc2,\x0d\x968*\xa5\x02\xb8\xb5}\xf6\x0b\xb2;\xe5R\x89\xbaT~\xf6\x1e\x96\x02\xa4\xae- \xff\x023\x86^\xb077/\xeb\x90\x03\x12\xec\xcd\x9d\x94\x10BE\x82\xbd\x13\x00\xc1\xc2\xb2LO !\x98\xa1\xf5B\xb1\x18g\x9e\xfd\x183\xda^\xc8o\xe7\xbe$\x07\xf7\xff\xda\x02^\x07\x94~\x8a%\xc0^\x08\x80w\xb1\xbau\xd6\xc8B\xff\x07\xaebd!2nh\xeb\x01\xe9]_i\xdb@\xfb\x99\x0f\xe8E\xe6\x1a\x1d\xf4@J\xf9\xf0>\x05-\xaf \xc8\xcf\x7fa\x81\x04\x12\x82YT/:\xf0\xa0\x0eV4\x04D\xd6\xf9\x19^\x04\xd1\xda\x96\xac\x83%\x11\x01\x91\x07\xd6\xb2\x08\x07\x1e\xd4!\xa8\x10\x1dx\xb2\xce\xcf\x08O\x8f\x0e.\xc8*\x96\x01H2\xfa3r\xf6\xa2\x83\x0b\xcb\xb2\nVo\x05D\xb2\xce\x9fciD4\x06u\xe8.\x1c\x0ce\x9d\x9fa\x92,Z\xdb\x95u\xb0\xbe\" \x92\x95\xfc\x9c\xf0\xfc\xe8`\x08u\xb0\x02$ \xb2\xce\xcf\xc8i\x8e\x0eF~\x08\x04\xea\x01\xa1\xf2\xd1\x81&^\x0f\x08k\x8d\x0e\x0c\xd5}\x80\x15\xb5^t\xb0\x0b{\x8e\x95\x0d\x01\x01<\xc1\x82i/:\xc8\xa1\xce\x7fk\x81\x00\x9e`\xa5S\xb4\x06{\x8e\xb5N\x01\x01<\xf9\xa5\xa55\xa8ci-\x07<\xb1`\xddeY\x85\xd0\x92\xe8@\x9e\xfd\x9f\x11\xca\x16\x1d\\\x06\xd4\xb2\xec\xece\x89[?'\xb49:\x18C\x1dB\x95\xa3\x831\xe0#V\xb6Dk\xb0j\x844F\x07\x97a\xa5\xb1V'Z\x83:XA\x11\x10Xi\x0b\x0e_\x86U\xb3\xec\xf5eXi\x0b\xfa\x8c\xa1\x8e\x05y\xc6\xb0\xd2\x04\x0b\xeae\xe8\xb3\xca\x98\xf6k\xb2o\xf5\x80qO\xb2\xf7\x8f\xf1a=\x0bZ\x10\x95\xb7zF=\xfa\xdf \x84\x8f\x84p\xf7\xec\xad?#\x90:\xc9>Us!R}/\x8d\xc4:\xff\xe0\x07\x96\xefR\x85\xff\x90\xc8#i\x14\x0c\xd3\\\x02\x7fEHv\x1e\xc8m{\x93lu\x1e@j1\x1bH)o\x7fj\x01HM\xf9 \xb6L\x08\x08\xe8\xcax \xce\xe6F\xdf\xb35\xa7@\xb8\xd6\x92\xb6E~\x8a%3\xd7@~J\xea\x80\xfc\x88\x89\xbc\x12G\xefar\xe9:\xb16ta\xf9\xcbu\xe2^\xa2d\xc3\xc7\x98\xd5\xb9N\xac\x9a|\x8c\xf5\x7f\x01R\xb5\xf0\xe8\\'VB\xecc\xcc9\x96\x9c\xd8\xcf\x9c`\xd9\xef\xf7y\xc2\xc3\xccw\x02\xc9\x14~\x82w\xdaubPY\x1e\xff\xe7\x7f\x8f\x1bq\x9d\x04\xb6\xf3-,1\xbaN\"\x15\xd3_\xd3\x05;\x0c\xf8!h\x17X\nqu_\x8f1\x82.\xe9\xf6>\xc5<\xd35\x10Z\x87{\xbe\xd4\xc7\xc9\xb2\x18\x08\xe6YKJW\xf8\x14\xa3\xb4\xab\x01xc\x96J\xaa=V\xc0\\7W\xf3\xa1\xa3\xce\xe34\x95\xc7\xf41f\xf6K\xb0e\x9fb\xb3\x8b\xab\xbe\x93\xfdW\x93\xf9\x18\xcb\xa9K\x02\x1086\x90[R\x1b\xb1\xce\xe6J\x7f\x86\xd6\xc7\xf8\x84.\xf10\xe3\xc9\xb2\x1c\xc4\xc7\x98\x1c\xb9\x12\xe8\xd9\x81K\xfd\xc4\xbe\xdfZ\x9f\xc3D|\xe9\x02\xa8\xd6x{\xdc\xa1\xfc\xfe\x0fdC\x87\x1c$\xe5\xbf\xc4b\x98\x84\x8c\x9c\xc4\x0e]\x1a\n\x12\xfa9\xedF\xaa\xcd\xa4\x17\xb0\xe4\xfd\x82l\x00\xa0\xc6\xaf \xd5\xf0\x13W\x91\x1a,\x9f\nP\xc0\x9d$\x89\xf6\xb56\xf2\xce\xffY_\xc6\xe8\"\xef\xfc_\xd6B\x1eX\xc4\x9e=\xc0\xb2\x8a\x02k\x0d\xf8\x01\x96K\x14\xdcS\x06\x9d\x07X>Z\x92\xf0e%\xd0c\xd9E\xd5\x16L\xf5cL\x9c\x15l[T\xfcs|\x9a\xa0\xd9KF\xd2\xc3B:\xc07\xb5\xb0\x87%u\x00\xef\x18y\xcf\xb2\xba\x92c|\x88\xb5z\xd7\x07=\xd3\xb6\x1f}}\x8c?\xc2\x07\xd2\xf5\x93\x11\xd8^\x9fb\x0b\x82\xeb'\xa9B\x8b\x0f\xb1\xcc\xb5$\xd4\xb7}?\xe5KQ\x98Ey\xb2\x1af|\x908\x923\xde\xc3\x87n)\x88R\xbe\x94'\xc1\xe1r\x94\xf7\x02\xfez\x1ee w\x90-1%\x8b2dc\x82\xbc'\x97\xe6\x97X\x0c\x93\x90\xdc\xcf\xac\xc0\xa5\x08\xac\x89\xcf\xee\x91\xe3\xad \x0b\xb6\x1ap\x03\x83Ey\xd7\x80\x88\xfd\x16@\xb7k`\xa3\x91 Y]\xdbw1\xec\xff\x8a\x02\x80\xd5\x12\x16\x14\x8d\xe2>L\x07Kb\xae|\x19a\xc4\x15\xdd\xb6\xd5\x0c\xf8\x01`\xd7\xdbx_\x8d\x99\x90p\xca(\x1chv\x8bI\xddR\x14\x0e\x92\\ux\x1f\x0b\xbaK\x05\x0f!\x18V\x80\xf0\x11\xb3\xe1\x15-#\xb5t\xdb,\xb4\xfaNw N\"\xb8\xd6\"\xacI\x82r7\xb3C76\xaf\nR@d\x9e(>\xac\xfb\x9e\x02g\xc0\xe7q)\xca\x05?i%\xa2e\xa6\x90\xec!\x99M\xee9I\"W\xe7}26 \x93\xeb\xf3>^\x1f7\xe7\xb1\x84<$s\xcdy*9\xc7C\xacM\xb9y\xa0\x97\x1b\xdbv\x01$\xa7\xf5>\xd6A\x96\x94\xbd\x95\xf0i\xf8~\x0f\xab\x9an.\x84b%\xf9\x126\x92\xc7J\xfe&\xd7:nn\xe4e\xc2\x96s#/\x13\x11+\xd7\xf2\xf2\x03K\x83\x11\\\xe4\x91c\xaf\x84\xbc{O,\x02rn\x90\x92\x90T \x92\"\xe0\xfbX\x8dv\x05y\xe7\xb7\xe3\x84\xbb5\xdb\"\xe1i\xee\xd6mN\x12\x1cjc.\xd6\x80$\xb00\xe7\x12\\\xcd\x93D\x1a\xe6?\xc6J\xb7\x9b'c$\xb3\xd0\xad\xd7E\n\x91\x85N\xbc~d\xea\xba\x87\x0e\xaa|\x83F\x04V}\x83v\x0f_\xc5\xb8\x87\x81\x9b \xda\xf3\xec]L\x90\x97e\xaep\x01z\x13Sc\xaf\x00a\xc1\xd4s\x02}\xa3\x81\x0f\xd8\xb2\xdeh\xd2\xdc\"\x00~\x8aq\xde\xd35(\x00\xc4\xb171QXv\xd2!\\\xb0\xe1\xbd\xf14\xe4\x01f\xea^\xc9>\x8f\x97\xd5\xeb\x05\xd2\xd3\xe0\xd7X\xc8X6Z\x15\xde#\xcf@pc\xcb \xb3cv\xe2\xc1g,\x1e,\xdb\xb5M\xf0\xf5\xf8 >\xb3\x9e\xd7\xb0]z\x1d\x7f\x8a\x8f\xf3\xf2r\x94%\x0e\x984\xdf\xc7\x94\xd7\xf3\xa2,\x05!\xe41FQ\x8f\x0b\x0e\xff1\xd6\xe7\x969p\x1e\xac\x18,\xf3\x00\xae\xbf\xc8\xdc5\x00\xcf\xde+\xe9_\x18i\xbd\xbe\x9f\xc2\xd1\xf9\x00\xbb\xe0,k\x85 \x8f\xc0\xd3\x00\xb28\x17\xe0B\xe9\x03l\xeb\xf5\x86\x0ep\x8a\x9fb!Y@`=\xb1\xcc\xb0\xec;n\xe2g\xbe\xeb\x04\x8bun[\xa52\xa06\xfc\x1a\x0b\xa7\x95\x12B\xd6\xd5mQ,,J\x9eW\x9eT?\xac/\xb2\xa3\xae\xeb\x7f\x8d\x8dx\x9e\xefH2\xfb\x10[\\\x96}g\x14\x815\x86\xc0\xbc\xc90#Gcs\x9e\x80\xa75\x10\xb9h\xd8 N\xad0\xe4\x00\xf8\x03\x07\x04\xe3\xdf\xe0U\xf2\xfc\xd4\x97b\xeeCL\x18=y\x13\xf4 \xc1n\x7f\xec\x83c\x83\x1d\x12\x85\xc6\x94\xfe\x90 \x9a?\x8e\xc2\x03+h\xf9\"\x9ct\x8c5\xde-P\xda\xb1\x1c\xe3\x05n\x94\xc8\x81\xbf\x8b\xf9\x9b\x17\xb8\x89|b\xe0\xd9\xbb\x98\x0f{Q\x10H\x94\xfe}\xdc\xbd\xb9\xa9\xc2:\xb2gD]\xacH*c\x06\xde\x0e\xaf\x06q\xa3Li\xc2?&(\x16eJ\x9f\xc1$[B\x94Pq\x1f\xd3\xa0\xe5([\xb9\x9d\x83>8+:f\x01S\x0c\xae\x01\xd8Z\xc1\xb5\x9d\xf4\xd9}\x8c\x1f+\xb0hX\x0d\xe5\xb0fX\xca\xe1\xcbJ\xd2 \xaa\xc9\x8a\xba\x05\xc2\x83\xd5Fz\"cpU\x01\x1fR8\x9f?\xc1R\x1c\xef\xeb\x860cZ\xd1:\x066\xc3p\x0d\xc07FR\x8bz\xf6\x04o\xc5\x8a \x8b -\x19\x08fy| \x89\xf7\x132\xedA\xaa\x8e\xca\x13l\xe4\x05e\xed \x96\xe2VJ\x86_\xd2\x7f\xe0\x87\x19OdW\x7f\x86 \x13\x87K\xed\xb71\x93\xe2\x01\x0c\x0d\xef8\x0f\xcc\xd0\xf0\xda\xaf\xe8\xe8\x0b\xbc\xc6\\\x03H'B_\x94c\xc6\x04IBR\xb8\x86%@\x99ky{\xe4\x04\xc1\xb6\x91\x08\x7f\x81\xe5\xe3B\x17\xb5\xd7\xbf\xcc\x13\xdc\xc6{\xd8Y\x84\x8fRI{\xdf\xc4\x9cS\x00\xe6NH\x10V\xa3$H\xba\xbe\xbdI\xfa]?\xbf\xc0Z\x9f\x91\x83'-\xef\x9f\xe1\x0b8\x1e\xaa\xce1G^\xd1.\xfe\x0474\x80`\x87\xd1\"\xb0M\x8e\x1b-\x82\xe0`\x0cT\xf4!\xc1\x80\xd8IR\xe0\n\xd8*\xc3\xb5\xf4\xfe\x18Sx\xe5\xb4\xfb9&\xd6+\xc6\xd9\xfbs\xda\x8f\x01\xe1Z\x02$\xb6\xf67\x04p[_\n\x12\xba\xc7o\xd7\x931~[y\x97\xdc\xc7k\xcdo\xa7\x81\x13f\x83,\xb1\x1fT\x00\x07<\xb5\x9f\x16\xa3\x07=\xa6#\xcd\x1dy\xc4\xce\xd8\xaah\xad\xdf6\xa0\x9c\xc3\xb5\xe8}\xcc\x92Vn\xe7~\xe0\xf7\x12?\x97s\xf9)\x16\x18JN\x946\x08\xd8\xae\x1ec\xa5\x81\xdf\x1e\x17\x1b\x8e\xa5h\xaeY\xe0\x07d\xc3\x13Mq\xf1\xa1_\xd1nA\xd8\x10\xc55\x00\xf3m\xaeI\x0e\xd1&W\xd4\xbe=\xc6\xd7&\xbcnCW\xc0tE\xf8\x06|&|i\xe7\x82\xa0\xdb\xb8[\xb0\x96~\x82'\xb0\xa2\"%\xc8IV\xdf y\xc9\x13\xe9R\xff'\xd8A\x8a\x1f\xb8\xa2\xc2\x11\xf2\xd9\x87\xad\xbf\x87\xe9\xd1\x8a\x80\xa4V\x10?\x88\xb9\x9b9:^\x86\xac\xfa\xca\x01${\xf0\x9d@^/S\xdeY\x14\xb03\xd7\xbe\x13\x04\xbe\xbc$T\x96G\xc2d\xcf\x81\x98\x80\xa5\xe6>\x88 \x98\x82\xf6\xf9Hu\xf5K|\xf3\xd0\xef\xfb\x10\xf8\xf8\x9f\xff\x06\xcf\xb3\xdf\xd7\x10Z)\xd0 \xdc\xd59\xcd\xe4\xb1\x9c\xd6\xd7\x00L\xe2\x8a\x01`5\xe2\x9c\x1f\x04\xdc\xc3l \x13\\(ec>X\xec\xea\xdf\x82\x9e\xfa\xb70 p\xc0B\x87\xc5\xaeb\x9e\x18\xeb\xfbA\x16J\xf4x\x0f\x9f\xd3~\x18 \x06\xf0\x9f\xc8\x96\x19\x96\x81\xf5\xb3\xbea\x19\xf8\x10\x9d\x8b\x92E\x10'\xee\x91=\x88\x12\xa7\x1e$\xfdX\x1eb\xc3\x87\x00\xc0\xbd\x00\xe6g\xe7\xa2<\xf1y\x92%p\x0bL\xe6\x14;I\xa6\xfd\x1e\xb0\x10\xdaO\x1cW\xba\xb3\x7fL&& \x92\xa9\xff\x04\xd3, \x12L\xfdc\xbc\x9f\x12rJV\xc2\xc4_\x82^\x96 <\x01 zE\x82\xb0\xe0.@\xf30\n\xb2 \x02\x04}aF$@\xd2\xe1\xfec\xac(I\x08T\xc2\xfb%A0\nl\xfa\x13\xa0\x93P\x0bK\x19\x02t\n\xa6\x85e` \x82\x06\xb1=W\x80\xbe\x03 l\x13\xe8'\x0e\xb0\x97\xb7\x08%HT\xe8\xc3\xbbX\x08?\xa7y\x05\xd9{\xa3\xfbb\x81p\xa0U\xaf\xff\x07\xf3\xe2\xf3\xca\x08\xfd9\xdevm\x9d\xfe\x1c\xb3\x17Y\xc3\x13\x12\x08^\xb8\x81\x81\xe0\x15\x18\xc0\xcd\xed\x13l\x970\xa2\xc9\x13L\xd6\x00$\xf9\xfb\x13L\x8e\x15\x0c\xe6\x8a\x91~\xc0S5Yz\xf3.`0\xc8'\x988\x9c\xd7\x1c\x0b\xab\x17\x03\x0d\xc0\xec\xf7\xbcTd\x1fb\xda4\x00? ,\xac\x0c\x065\xc5\xfd\x11l\xce\xdbXx:\xaf\xaeN0\xa7\x1e\xa8\xab\x13\x82qpc\x80\x9b\x19Hg\xcfgO\xc8\x1e\x83\xbc\xf2\x04s\xaeApK~\xc7\xd3\x1d\x84\xea\x00\x92\x05\n\x8b\x98a\x0b\x10\x10\x98\xec\xc5\x9ckud]\x96U}\xaf\x82\xcf\xb4\xaf\x01X\xc6\xf0G\x0eh^\xb6\xb6\x06~\xe8$\x87\xab\xf6\xd5\x199\x83@\x9d\xe8\xb71j\x0b`\xec@\xca$\xbaw#\x99\xc5\xb4\xf5)\xd6\xd4\xfd\x91\xb4<={\x80Y\xb8?\x8a\xa5\xc3\xec\x7f\xc2\xf8\xb4:\x8a\x03\x1f\xd4\x1f\xe2`\xe2\x87l\xc1v\xf9\xe5\x87\xae2\xb0\xbd\x8d\xafc\xcc\xde\xdd\xc3\x8a\xb7\x84\xa8\xd0\xfd\x0f\xb1\xbe\xec\x87*\x87\x06\x99\xd1\xaa\xc2\x12\x82q\xea;\xd9\x8d0s\x81\xc6<\xc0B\x9c\xca\x08\x0d\xb1\x1a\x98\x81V\x9c\x97,\x8d\xf2\xa4\xae\xd9Uy\x11\xc8M\xf6$\x92X\xc4\x0f\xb3\xc0I\x86\xd2 \xf7\x11\x16\xda\xfc0\xd3A\x14\x1fa!q5\x1c\xfb\xa9/\x1d\xac\xc0fb![\xba\x88\x89qz\x0bK\xe5\xab\x1b@I\xb0m\xd5\x8f@\xf4!X\xabo\xbc0\xc1\xf35\x00\xdf%\xac\x1a\xae\x86\xf9\x92o \xd8\xac\xb5\n'\xf9s\xcc\x07\xd5 \xff\x1c\x0b\x16~\xed*\xf9Z\xca\xfe\x18\xb3\xf9U\xcd\x15\xc9\xe12\\\x11k?\xdaC\x92\xe2|\xea\x87Z\xf0&49\xf5A\xc8}HF\x9d\xfa`#~\x88\xbd_%DZb\x1fb\xca$@c\xfb 2\xfb\x0e\xeb\xfcS\x9f\xe2\xcbp\xdf@\x08\xc1\xcc\xf7\x00-\xb0\xee\xe1+\xc0?`s\xe8\xaa\xbaq\xc1\xac\xdbW\xdf1V\\\xd4\")\x9e\xfa-\x0d\xc0\xeb\xa8l\x1b\x18%\xc0\xb4\xf1\xf7xm/j\x06\x86y\xff-\x0d\xc02\xca-E6\xff_L\x1d/\x1a4\xc5\x87\xe4\x96\x81`}\xea\xa2\xc1!,\x94\xde2\x10\x8c\x90\x17S\x9e\xc0d\xf0\xce\xde\xd2\x90\x7f\xc0\xf2\xc4E\xbdQ\xd8\xa6uKo\x14\xe6\xf8\xdfw\xe2X\x9e!|\xe6\xf64\x00\x930 \x90\x97\xbfX<\xf9\xbe1\x8abo\xa5=\x03\xc1\xab\xf9}\x18/\xe9\x1d>\xe3\xbe\xbf\xafw\x0b\x0b^{\x1a\x80\x91zo\x90@B\xa8O\xb1\x90\xf5}\x15\x0d\x8cwdOE\x03cn\xf5}\x85qX8\xd9S\xd64,\x7f|\xdf`\x03\xa6\xf1{\x06B\xea\x18l\xc0\x82\xd6\x9e\x86\xfc9&\x9b\xc1\xa2\xd6\\\xf0\"\xae\x99\xfc\x02\xf88\x04\x06\x82W8pJ1\x04\xf80\x06\xce q\xe0\x16\x13\xb3\xff5g\xd4\xf3$\xbe`\xdc\x0f\x0c\x04\xabOk*k\xe6\xaf\xb0\xf8\x14h\x00\xdeM\x01\x80\xfc\x8e\x98\x11\x05\xc6\xb3\xccR \xcc\x8exC\xd7\x1c\xf9\xe2\x9a\xbe\xc4\xc23\n\x1cH\xb8\xf61f\xf0kZ\xab\xc7RK\xa0\xed\x00\x98\x85\x98\x986\x1b@\xc6\xf6\xfd\x14\x8b\x18\x12\xd2\x97\xec\xe0}|\xf9 `\n\x84e#\x01\x02\xe1\x81\xa8\xa2\x02\x14\xc8\x95x\x07\xcfH\x06\xd6I\x81\xe5}\x8a)\x89\xb6\xe7|\x80y\x8f\x80e\xb2\xda;\x98\xcb\xa8\x1b\xd2'\xa4\xa7\xc5\xcc\xf1\xa1'\x8a'\x06\x84\x89z\xe0@D\xf2\x13,\xfe\x0b\x00\x98\xa8\xfe5\xb5\x18\x05g\xd5\xb2\xbf\x8f\xa9E\xd0\xd3\x10|\x98\x03\x9d\xe4\xef\xaf\xb0n\x10\xf4\x12\xb0:\xfc\x91\x0d \xea\\\xa7\x80=9\xecGX\xd1\x16\x904\x00D\xc6\x1c\x12`2\x8f\xd1#\xcc\xac\xd6\x8c\xb7!V\xd0\x03\x03\xc1B\xca\x9a!\xbd\xf8\xf8\x05\x06\x82\xa5\xa4\xc0\xe5\xb0\x13\xefb\xd6\x13\xb82\x16\x15\xaf\xc1\x1a\x90F\xb2\xa5\xf0\x99t\xec\xb9R@}\x1f\xb3\x89\xc0\xe48\xc4\x84QB\xc0\xe2AN\x9d\x97x\xda\xe1\x143\xf1\xc0K\xf2T\x03\xc9.x`\xd2x\x87l5\x18!1 \x06\xf2r\x1f\x9fT\xe9\xf2/\x88\xcfY\x81\x07\xe01GhP%.\x80\x90\x81\xb5\xb2\x0d\x89R\x8f\x8a\x85\xc9V\xb7\xec\xedN(\x89)\x80\"\x04\xb0,g\xba\xd1\xc7\x90\x1cj\xd1\xd2\x12\xf7\x03H\xc7J\x91C\xc0\xc1\xf9\xbf\xbc\x14x\x19\xa1\x94t\xd7.\xf9\x8dc\x0b\x85.Ur\x1b\xc7\xb6\x9ej\x11\xed5\x8ei\x87(u.\x88\xa0\x8dw\xb1\xe9VLZy\xe0\xeb,\x7f\xc4\x1f\xbeT\x06\x02|\xdf!\xe7\x85\xf73\xb3|\xa0\x1ec+5\x0d\xf8 FaQ\xa4j+$\xf6\x99\x80\x14!\xadT\x8b\xa4\xb5[-\xcb\xa8iA)r>t\xa9\xf4v\xee\x0f\x8a\x1e1\x11\xb6\x05'`\x8a[\x8a\x9e!\xa1\xa4\nV,\x8c\x0d\x83\xab\xd8\x82%\x1d1\xd4l\x98p^\x84\x98\xe1\xd9\xc8FJ)\x1f\x1f\xe0S_.\xa0\x90\xe9CL\x9c\xcbe\x8c}\xf2\x01\x16\x93D)\x08\x92)\x0d\x19\x0b,P\xa8:-|\xa7\x0feJ\xa1\x1aXG(\x17\xd0\x07\x00\xeb\x04(\xda\x03\xe3.\x8d\xf4 \x82\xd0\n8\\S\xfc\x80\x0bi\xba\x19p\xc1CD\x1a}\xf3C k\xc9'\x80\x9e\xbe\xb4\xee\xbb\xba\x99#\xf2\x9e\xf1 x\x8c\xd7+(\xf9\x04`\xedM\xc1\xe4\x1a<\xc1\xb4&\xe0\xa9\x9a\xacE\xce\xe0\xa9r\\x\x82o\xd4\x03\x9e\xa6\xa5\xab;,\x81\n\xb0\xb6\x13`\x0dZ\xc0\xf8m\xe5\xf7jYc\x01\xd5`\xb25kO\xaa*\x14\xa1U\xa2\x08\x12\xb0 \xe1\x8a\xeeHrA\x94\x80\"\x95\xb8\x0d&\xcdC$\xc7x\x00k\xd9\xb6|\x06\xd7\x92GD\x18\xd0~:T\x1eOJ\x04\x92X{\x12\xa5\xc0R\x01=1\xb4\x91\xec\x00\xa4\x00z\x93X>\x12E3\x1f\x10\xca\x98:Z\xf9\xc6\xf8\xb9\xa6\xafF\x88dh\x8c\x92X\x98ZS\xaa5\xa1\x95\xb5\xdfk\xa4\x81\xc08}ac\x88\x80\x80`J8vz\xbbg\xb3\xc7\xa4z\x82\x041Rc] B\x92vb\xf8\x8c\xc8\x8b\x06\x82\xed\xbbk;\x0b\xac\xf5]\xfcQ\"\x05\xe5\x9a\x99\xa5l\xa0\x9d\xce\x08\xdd6Ng\x84\x86d\xb5\x82\xa4T\x8c\x16l:QP\xa8K\x84=e\x9a\x9d\x7f@hQ\xc9U\x8d\x98v4K&t$K\xe0:\x97hK\x81\x0e1&\x89\xf3\x83,\xd1\xeerdRy\xe2\x19\xc3\x0e9\xb3ybB\x90\xc9\nV|\xd0>\xb2H\xf3\xda\x07\xcd\x02S\xb7\xfa\x1f\xe3\xdb+\x13.\x83g0r\x80\x16\xfc%\xd6\xec\x04\x80\xc3\xe3\x1b\x04v \xc4\x89\xf71\x91\x1e\xc1\xf7w\xf0\x94\n\xfeT\x032\x96\x0dl\x1e\x03\xb0a)Xa\x03\xb0\xb2y\xe0k\x92\x91\x93\xec\x01\xc5z\x0f\xdf\xfd\x8et\xb6\xc5g\x1fa\x99\xf9\x12H\xa0\xd8\xbc7\x82\xcf\x98\xbd\x8eL\xca*l\xe5\x18\xe9H\xe6{\x98\xb1\x8f\xb8\x93\xe6 \xf7\x8a\x07\xb6\xb0\xf2q\x89{~>2Ndoa\x82{\x89\x07\x81\x1f\xeak\x01l\xf4\xbe\xa4\xd5\x01l\x88\x1bi\x00>\xe2\xa3\xa1\xdc\x9c\xb7\xc9\xea\xfb\xae\x0c?\xfb\x18K:*-\xe8=l(\x19\xf9\x9e\xfd\x8d\xa2\x91\xef)\xba\xf0\x14\x13\xd6\x91\xef\xd5\xa4\xcf-\xb2\xc0`\xb2.!\xf0\xc6\x16^\x1b \x82\xd1a \x0e@R]\xf9\x08/\x81\xcc\xc9\xaa\x13\xaf\xde\xc3\x8cq\x14\xb8\x90\xad\x10\xdb\x8fG\x01\xb3\xb4g\x1e\x1a\xa3\xb0\x0c\x1e9\xf8%\xa6M\x12\x02f\x85:\x18\xf8\xfc`\x1f\xbb\xb0'\x9d\x8c?\xc6\xd4:,R\xcc\xd3\xb1\x97r\xc9S\xa0\xce$\x89\x97}]\xdf\xe5|\x86\xb7*4\x10lz_\xd7w9\x9fa\xae\x11\x1a\x08\x96:C\x93r\x96\xf6S\xce9k\x19\xb9Jt\x89Q|\x1d\xc88\xd6\x14B\xf8\x8c\x15\xca\xd0Pw|\xbaT\x82_\xb2\xd4\\{F\xbd\x8fYU\xc8\xf5\xdd+V*D% y\xc7\nQ\xaa\x02\x85\x99\x88g2\xfdu>p2\x7f\xcc\x11\x1fy\x13KW\xba\xdc\xce\xd0w\xf7\xa6*\x16N.u\x99'\x87\xcd%Ko\xf5`KS\xc8S\xaer\"a[AX\x04l[&\x9cf\xdc\xa3A%$\x82\x02\n\x96-\x7fD\xde]\xe7\xfb\xca1\xf9\x07!\x19\x82 \xaf&\xf4\x86\x17\xf1\xd5\x18\xb6\xae\xf9.6\xb8\x85\x1a\x80\x87\x19\xea\x988\x8a\xd9*,\x0e;\x16\x86:\xce\xcd\x06\xb8]\xdfX9\xd6\xcd\x06O\xeb@:4\xccRI\xef\x13\x96\x1aB\x1d\xd6b!\xc9\x03\x00a\xb95\xd4\xc6[\x028\x9f\x01\x06=\xa5\x030\xd1\x0eX\xb7\x0cM\xb8\x03!\xacCexx\x8a\xd5\xbbPj\x0b\xf7\x08\x0e\xc3Cq\x0f1\xf3\x0b}\x10>\x1eb\xa9/\x04\x8c'\x0d\xad+\x93'V\x11Be\xf2\xc4\xea^h|8\xb0\xba\x19\x1a'\x0eZGI)XD\x0e\xf5E2]Du\x97\x8c\xa5\xb5\xb0z\x13L\xc7P\xb9\n&\x03\xb1\xdc \x92M\xb2\\!\x92\xed\xd278dx\xc5\x15\x8emJ\xe5[\x1c\x1b\x19jM\xdbr\x0e@\x1b\xa3\xddh\xb5\xf5!&W\xa1\xd1[\x1fbkZ\xb8\xa6\xce\xc8\x13:8-\xc1c6\xb5\x1e\x9dM\xb8#Y\xd8[\x98\xbb\xadG\xa1\x04\xfa\xe1@\x13w\"l\xac\xebX\x11\"\x9d\x18\x01\x16K\xec\xfam62|\xd0\n\xf0\xe7\xf5(\xab&\x95\xc7\x86\xc9_\x01.\x06\x81)\x7fQ\x06\xc5b\xda\x86b\xe3\x9d\x0d\xe5\x0c\xf7\xc4V\x9e\xa2\x08\x0e\xcclh\xadX&\xcc2\xd6\xa3\x8c\x86\xe2\xd8ZB\xf18\x14\xe1\xa3L\xb9B\x13I\\@\x8c/\xb4\xbd\xa2r\x87\xb6\x03\xc7N}\xbb\xf0\x10\xf4C\xac\xd9\x02\x0cr\x98c\xe3\xd5z\x94aO\x00r\xe8Q\x19\xe3\x0c`[\x19\xabG\x00\xa1\x15\xb2`\x0d\x8dS\xb0by1\xd5U\x05\xca\xc8c\x1dHY\xea\xb2\x0f\x95^\xac\xd6\x95+p\x06\x93\xd7\xf5(\xab\x93\x07\x9f\xfc+[sT(|\xf2\xd7\xb6\xadV\xa2\x00\xf6\xc8\x93\x10\x85\x04v\x18 \x01\xd6\xa9\x01\x06H\x805\x8f\xf5(\xdbL\xb8\xcb=\xf5\xd2\x0b\xb6\xf3\x95\xe0f\xad\x9e\xfc\x1b\xdb\xe4t\xb1\xea\xba>\xb4P\xac->\xe6I\xca\xcbD\x0fOG\x94\x92\x195\xcb\xc8IdlTHc\xa7EOA%\x8b\xe1Y\xa86\xe4\xc1\xd9\xce{*\xe7\xdb\x03+\xb6\x97K\x15\xcdYX\x84.\x18\x8b9C\x83\xd6\x01V\xcb\x15Mb\xd3\x97(Z\x8c\xedO(k7\x05\n\xb7\x1c\xa2#\x8b\"\xae\xcb\xb9\x07\xbb\x8e\x0d\xfa%x\xb1\xeb\xd4XQ*\x86v\x1d\x1b\x1aK%\x8b\xf3\xf4\x1f\xed\x0d\x96\x16\xea\xc75\xb3Ck\xf4\xc0\xc23\x8bn,\x93\x93\xc0\x82\xccXx\xa2,Qeg\xc4Z\xa4J\x15=Y\x86\x81\x99?\xd1\xd6\xe3\x1a\xa9@\x00\x9c P \xf1mPH\xcd\xf1\xf4o\xe9+\xb4\xa1\x8e\x80\xbbG\xa5\x810\x8e\x02\x1d\\\x88M\xc9!?}\xc7Z &Id\xcc4\x8f\x1b\x88\xb2\x02\xabI\xd6T\xd6\x93\xb4\xf4\x9b\xa9|;D\xc8\xd7qx\x9f\x10\x8b\x96\x81\x10;T\xa6\xbc\xd1h/\xe8yr\xaa\xe2\x96K\xc0d\xa8\xaeK\x9e/\xa7\x07\xbfRD\xb5C\x04\x0dy\xa5A\xec\xc3\xf2+1\x0f\xcb,\x9a\xbfG\xbfrH\xda\xf86\xbe\x13\x0es\x9d-\x96\xd8\xb3\xc7\xfa='\xcb.^^\xd6\xcf\x14\x12+\xd8e\xf3\x82!\xb1\x18\x8cM-B\xe6\xc6\xa6\x16Y\xc6\xb1N\xbbe\x19\xc7\x18\xf2\xcf\xd8 \x17t\xb8\n9\xbc\xe3\"\xfe\x1d\xdf\\\x85cm\xcbz\x1f\xdb\xe9\xc3\xb1\x8ee\xb0\xf5\x06. v\x88\xb9\xc4\xb7\x815\x0b{\x9f\xd0\xdd\xb1\xe1\n\x0f\xfe\x9d\xad\xa6~[\xf8?X\x80\xfb\xc6\xe8Oh\xda\xbe\xe6\x99\x04\x15\xf65\xcf\xb4B\x14W\xa3\xb0P\x9b\xc7\xf1\xd5\xe1\x86I\x11\x81\xef*\"\x03\xc1W\x81Q\xdd\xf3\x99\x91\xba\xac%\xeffn\xe8\xf4\x11XF\x894\x00kc*\\\x1b\xef=Dk\xff=\xd6\x89\xa2\xda\x1797\xf4\x9bM\x9f\xe1k\xed\xc8@05\x8a\xe0!\x98g\x1fa\x9a\x13\xe9\xd7\xce\xb0\x93V\xe4\xa5\x91\n{\xc2\x96\xdd\x8d\x15H\xbd\xf0\x19\xde\xff\x88+\x00Y\xf8\xbeZ\xc6G\xd8\x95iC\x1b\xfeI[\x1a\x80\x0f\xa6\nV\xff5\xde\xa9\x0d\x93\xc4\x824e \xd8\xa4\x1d\x81\xb1\xfdC\xcc\xba\"\x9d\xa8\xe7\x116\xc3DC\x81\xfd\x9fc9&\xaa{\xa112\xa6hl\x06\x8f\x02\xbd&d\xeb\x03\xf3(\xe1#\xec\xb4\x13\xe9\xc4\x12o\xd2Z0\x17,\xcbn(O\x98\xcf\xb0\n\x1bi\x006]o\x8c\xf8\xc0\xb1\xceR\x01~\x83\x19\xe8\x86\xf4\x8f\x90\xe9\xa7\xb1M3*@x\xef#%R=\xc2\x86\x9fhT\xfb.\xec\x861\x9e\xe2+\xd2\xc8@\xb0\n`\\)\xb1\xf1i#\xe6\xa1\xf5\xc5U|\xbdo\n\x16E\xb0_Z\x14sx\xf0\xf0\x11\x96\x11\x8c\xef%y\xc5vC\x0e\xeb1\xa1 N\xe2k\xbf\xc8(\x17\x04)\xc0\xb3\xf01\xa6\x14Q\xe2\x81\xb5\xe7mL\x8b$\x04R\x8a\xd8`2\x13\x17\x16>\xa2\xc4\x13\xb8\xff1A\xe4\xc4\x1f\xa8\xec$d#\x13\xf5b\"\xde\xc6(I\x83\x08D\xb9\xc7\xf8>7J$\xa9zLH\xb1\xfd%\xe1\x0d\xa3\\\x90\x01k\xc7\x0fB\x89u\x8a\xa4O\xc8.\x1a\x08!\x94\xeau\x8f\x07\xb8\xca\x86\x11\xf4\xf0\xf6F\x06\x82\xa9\xc8F\xe1s\x8bq\xb2p\xc7%\x8f\x1a\x03\xc8\x81zx\xa97T\xb6\x06\xb2\xd2\xea;\xd9\x9a\xb1\"q\xefbanc\xccu|\x11!2\x12\xa6\x82k\x9f\xfd\x19fe\x1a\xaa\xc2 \xff\x94\xac\xfb\x98'\x9bN\xc2\xc3l\xc8S\xb86\xfc3|\xd4\xb42\x85M\x06B\xd7\x13\xd8\x87\xe7Q\xd1\x01-\x95\x94\xb8\xf2\x14s\xfc\x92}\x82B\x94m\x02\x016\x9d\xc4<\xcfF\x81\xc0\xc61\xf9\x8b\xe13&}1O\\\xc91\xfe\x19\x05\xf82\x1f\xca\x0c\x05\x8c \xd6\xf3Mlt\xd6\x94\xe7\x01\x99>O2\x1eJ\x81\xecM\xac\x85lj\xfe\x8ayu\xac\x01XX\xde\x84\xa7\xd2\xb1\x96\x1b\xc3S\xe9\x98\x1c\xc7Cxu\x00\x1f\x8ax\xa8^q\xa6\xfeX\xf1P=\x17\xfd\x17\xf8&tS\xf6\x8c\xe9z,;\xc6\xfc.\xf63wX\x9b';\x86Q\xe1S\x12\x07N\x08\xef\xc7\x93\xa4i\x00\x82\x84jx\\\x02\x06i\xb7-\xd5$\xd1?j\xf9\xec(\xc6\xff\x11\x16\x92\x05\x104\x7f|\xb2\x04D\xd7\xc2\xa6\x04\x01\xf3\xa4\x9aE\xde\x81\x93 p\xf3#\xb8\x11\xe4\xe0\xd3\xfa\x18\x0bE\x9bA\x9e\xea\x87\xd9?\xc6h#\xaa\x8d\xc2:\x88:l\x1f\x11\x1c \xf24\xdb\x97c\xfc\x08\x8b\xeb\xf1\xc8\xd6\xdaf\x04\xc9\xa8\xc4\n\xcba\x92\xcc\x83\xb1\x90\xb9\xb4\xa1\x10c\xd9\xa6\xbe|\xc5bml\xa4\x04l\xbf\x8a\xa3\\>\xf6\xf81\xde\x95M\xb9\xecO0\xd3\x05S\xe4}\xcc\x0d\xe3DE\x18a\xc2nL\x94\xf7\xb1<\x1d\xc3[\xf5O\xc8y\xd0\x96K\xfa\xdd\xad\xe9\x9b\xbb\xa50&:\x02\xee\xaaw\x83\xad\xe3(\xdf\xb3\x90\xb6-\x97,5%\xaa\x96\xf6\xda^\n\xab4f2e\xe3\xab\x05T\x8e\xd4\xc2\xb2\x96\x84+;\xce\x13\xccu%P\x87Ya\xe9J\x00\xb5\xc5\x10\x0fh3Q\x16\xc37\xe9\x16i\x08>E\x12\x92\xdaq0\xd1Qht\xf8p\xc1j\x19z\xc3\xc0\xd5S\xed\x98\x02m\x96\x1ej'\xd4)\x89\xfaN\xa0\x04\x00\xac\xb3\x08\xa0V3\xde\xc5\xca\x94\x00\xa698\\\xbfKx\x87z\x7f\xed\x1e\x96D7\x93(\x8e\x12\x9dI\xed\x1e\xc6\xcc\x02\xac\x12\xb5\xe1\xfa\xa2a\xf0\x9b\xb7\x80\xea\xb6-N\xf2\x04\x04\x83\x07\x98en\x1a\xa1\x11\xdb\xc6bc\x91\xc6\x86\xc9Mx\x95\x87\xac\xbf\xfc\xfc\x1b,\x96\xc6y\xe8*\x13\x17\x06\xbd\xae9,&\xd7\xb75\x00\xef\xc8\xed\xbal\x8b\xafk:\x87\xcd\x13\xb7\x0d\x9d\xc3\xec\xe2\xb6\xc1\xd9\xb7\xb0\x80\xf9\xbaY\x15\xact\xdf6\xab\x82\xf9\xfc\xed\xdc\xc9x\x12\xfa*3\x01\xc9\x8c*\xe0z\xf4\x98\xeb\xea\xd8\x94\xd7l\xdf\x15\x91\xc2\x02\xd5\xeb\xbb\x1b;\x0b\xec\xdb\xado\xe3*Qf\xf9\x9c\x98\x84KX\x9b\xd0B\xec\xbd\xbf\xfd;\xcc{\xb6\x8c/5\xde\xa0\xc4@0\xc3I\x1c\x0f\x12\x90\xde\xc3;\x91\x94\xb34a\xfa\xb1\xa5c;1\x1a&\x1a\x80u\xf0\xc4\xa4U\xc2'S@\xe4\x94\x1ea^\x9f\x14 \x97hs*s\x12fo[Z\xd9\xc4R\x97\xb9\xfc\xa2\xfd\xab\x1a6\x00\x10\xbc\x0f0]KLR%:\xe6\"\xa9\x12\x19Bq\x97f\x81\xa8JX\x84J\x8atKXQL\x8atK\x18\xf1\x13\x93n\xe9\x03L\x0f\x92R\xba%\xac\xe9l\x99tK\xefc\xa4O\x8aLLX\xd2(]\x03\x92E7 \x97\xb0\xc2\x94\x14\xb9\x98(\xeae>\x10M\xac5IH\xa8\xfd\xe7q\xbd-\x93\x8d [\x18\x13\x03\xc1\x1c%1y\x9a0\x05HL\x9e&\xb2[:O\xd3]\x1b@\xd4\xb9A\x01*O\x13\xa6\x84I)O\x13\x16\xd3\x93R\x9e&<\xa3-\xe3\xa7\x8f\x15\xfb\xc4@0\x03\xdf2~\xfads\x0d\x04\xd3\xd6\xc4\xe4i\xc2\xc6\xb3\x04\xf24\xe15\xd8\x02\xcd\x91\xe0>8\xc3b\xad'\xd1y\x9a0kM\xbc\xc0\xa4\\\"\x87\xdf\xe4p\"\xf8V\xe4p\xa2 \x15\x17Jh\x19\xc8\xe9\x04?9\xf0t+@g\xc9%\xd4\x99;\x81\xc9\x92k\xab\x08\x88K\xc6\xc6A\xdey\x0f\xeb\xae[+\xe7\x05\x91\xc3|5\x81W\xfe\xf1g\x8b\xff\x0fvV\xd6E\xd03r5\xc5vcT\x90<\xb7\x9a\x14\x890\xb0=\")\x12a\x90\xe6U\x0eh\xb2BZ\x90 \xdd\xe8\xc4\x16\xf8\x16\xdb\x84'\x93\x17\x7f\x13\x9d\xd8\xe2\xa7\x04\xe7\x8a\xc4\x16\x98ln\xc98\xba\xcf\xb1\x8e\x95\xc8\xcf\xbf\xa1]DR+'\x8cX\xc6\x88\xe3|]\x18\x8bQ$9\xe6>\xc8}\x820\xa7\xaa\xf7\x84\xb5v%g\x17fTE\x89J\xd4\xfbO\xf1\xfd_\xd1\x91I\xda\x85\xe9\xbfl\xaa\x9c\xb5\x0b\x93\nY\x80\xa6\xed\xc2*\xb5*\x86\xf3v\xe1\xd3b\x8a\x95\x12wa\xb3\x16*\xa3\xf3\x0ea\xf1G\x16;W\x8b\xa7\xe5\x04V:\xc2\x95\"Z\xa9\x10\xf8\x06P\x8c\x13EP\xf6.\xeb:\x97\xf2\x80A)\xc2.D)\x9c{\x8bPf\x9ff\xd4\xb2.\xa2N\x97\x85em\x0d,\xb0\x13[F,\xcfr\x13Z(\x8a\xa0\x8cYx:\xc4\x17\xf1\x01\xa1\xceVG\xc4\xa6B\x85\xf7\x1a\x96\xdad1\x925\x0bK\x04\xaaTur\x98R\xa9B\xa5\xa4WX\x8b\xab\x94\xd0\xf8\x87\x05s\x94\xd3\x8c N \xae\x9b\xc0\xbak\x02\x87\xee\xd7D\x88\xf2\xd3\xea\x83\x8d\xa4\xa2I\xa6CP1\xd0\xe9 \x08\xfa\x05\x90\xf3\x81HQEf\x1bL\x0c\x93jf\x1b\x02\xd6\x81\x0cO \x933 d0WLL\x02\x19\xbc\xe8\x89I \x83iKbn\xd3\xb0&\xb8\xa5uQ\xc2\x95\x8d.J\x04\xde\"/ \x1duqGB\xf0/\xcaC\xaf\x94\xe0\xfe\x03\xac\xde'0\xc6\x8e\xe53\xdc\xf8>\"\x9a]\\r;$<\xc2d\x03!\x04\x19\x85\xf0\x90\xb3[d\xea\xc0\x06\xb5-};E\xebh]\x1b\xfb\xc6l)\xc9\x8b\xec}\xedw\x99\\\x83\x08\xd1&\xb9\x06\x16l\x93\"\xb9\x06\x01\x15\xa9)\x082\x17t \xc7ni\xdf\xc3\xf7\xb0\xa5\xab\xe4db\x81H\xc2zE:\xe2\xc5\x93\xf7d\xbc\xb5\xe8:\xf2a0\xefR\x88\xdc\xc9'd'G*\xaf<65\x08\x00\x84\xaa\xfd\x0d\xcd\x02\xb5\xbdqn\x07\xce*\xa9\x16\xf538\xadX\x9c\x01G\x9f\xe3\xf4\xab$\xe3\x1fb!_\x00\xd4E\x1aa!F\xf0\xc5rQj d\xc9bG]\xc1\xfe\x92\xa0\x99\x04\xe9w\xfd,\xd0\xc4z\xf0\xd3\xdbJ\x96x@\x98\x9f\x80\x80\xaf\xd1\x9f\xd3\xb5Ko\xab\xdc!\x0f\xb0\xb0,!P\xefg\x965\xbf\xad\xfcg\x88\xd4t[\x076`\xb5\xa7\x08\x94x@(\xce\xedR\xf8\x82\xb5^\xe1\xd7o\xab\x0b3 \xb4\xd4D_<\xc04P\x82L \\\x0dPuH\xebJK\xd9{\x98\xd5\x97^\xae'R@=\x08j\xe1g\xa8\xc8.\xd2p\xc0\x86\x02\x85R\x8f\x17\xcb\x16\x06\xd8X\xa4h\x8a\xb0\x11Yn7\xd4#\xa6\xf8\x93;p\x83L\x1e\xf2Oo\xe75\x80\xda\xeb\xa5msk\x89u\xc8\xd4hR\x98#\xa7\x0d\x02I\x03mJ35\xee\x87\x98jogp\xfa\x08 U\x80\xbf\xb0\x01d[\x7fAD\xc6,q\x04\x9f\xe6q\xea\x07r \x7f\x83\x95$]D9_as\\\x9a%\xd2\xeeE\xb2\xdfm\xc3\x01|H\xf0Z\x1dL\xc2r\xf3\x9e~\xb3\x9b\xa8\x0e&\x16\x89\x02\xe0d\x91\x19\xe7=\x9d\xaa\xe7)\xe1\xbayo\x94\x83\x07\xf3S\"[\xe7=\x90\xfa\x9fb\xbb\xa2\x80@_\x84\xc0\xe6=\xcdE\x9f`\xb2\x9c\xe6=\xc3E\xb1^Z\x1c#\xdb\x1a\x990*+H\x11\x05\xcb\xb4\xcb\x11T\xd6\x0e\x8b\xb3d\xaf\xad\x12\n\xdb\xa6 \xd0\xdbu\xeb\xa3\xfd\x1f\xb1-A\x80`\xd3\x9f\x12\xec\x11 \xc8\xf2F8\x86\n\xf6\xa2\xfaj\xee\x96]\x8f\xb0\xd6*\xc0e\xd7#\x8cL\xe5`_\xd2\xb6%\xd2\xb7\xa6\x04r=\xaa\xeb\xa5\x14\xe1k\x19\xa7\x0eY\xb3\x80\xca\xaeGD5\x15p\xedzD\xd4S\x01\xacUPs\xb7^\x0b\xcd\xdd\xe1\xce\xd0\xb1_Bm\xc3e\xd2=\xc2\xf7j\xbf\x83!\xf0\x97\x98\xb8n\xc3v?\xa4\x15\x80}\xd2\xd3\x1a\xcf \xf2\x82OO\x9a\xc7\xf3\xe2;\x91M\xf3\xf8\x84\xf8N\x84\xc7<\xd6\xe4\x05[ \x05H#(\x11XM\x84 \x05\x009\xa0\xd8\x1e\x1b\xd2\x83\x05\xb8j@w\x0d\xb08\xa0\x96\xa6\x87\xca7\xfcWXQ\x9405 |!\x9c\xe6\xb1I\xdbJOSl\xa8!\xa55\xb1\xa2\x86Dp\xcdcE\x0d)\x1d\x8855|J\xc45#\xed\xd8\xb6\xbfn]*b\x90eI\xca\xe1\x94V\xa8\xa6h\x96\xa1\x96)\x9ae\x8e\x9a\xa2\x11\x9e\x9e\xc7z\xad\x89\xc0!@@\xd1\x08\xbb/b\xd6\x88\x19\xc6\xc4\xacachjb\xd6\xac\x90\x9a\xbc\xd7\xe9~\xa8\x8d'D\xba\xb9\x03\x91S\x9f`=q\xc7\x113\xfaA\x86>gN2\x80\x9dy\x17Oh\xc7\x91!\x9aX\xaf\xc8\xe4\xe7\xdf`\xe4\xcf\x94\x9d\x9f\xf8\xea\xef\x18k\"i\xc9@\xb0\xa6\xb1cl\x80\xd8\xfe\x92\x19\x08\x96\xa9\x94zF+H\xdd\x0c#\xbf\xce\x9c\xfcclw\xcdx\xa0\xbcb\xdf\xc5\xeclG\xdb\x8b\xf0 \xcc4\x00\xdb\xcd\xb3!O\xf8I\xd1\xd8=\xb2,\x02\xd4\x8f@b'\xd0\xac\x11\xba3\xe4\xf0\x06*\xa6g\x99\x06`\xb6)\x01\xe9\xa1\xc0\xf7\xdf\xe0\xc3)ac;\xc4w\xf7J\x197\xf1A\x91\xf0:cJ5\x03\xe2[\xbf\xa2/\xf5gC?T\x9e\x8d\x98\xdeU\xb3\x1dbh6\xdcS\xb1\xbdtD\xf5\xe3\xb9\xb0\xb1\xb5.N\x066\xc7d\xc3(\x11X\xf8 \xe6\x1c\x86\xbb\x93\xb6t<\xce\xaf\xb1%\x1a\xa5\xdb\xc0\xc4\xce\x92k\x03\x8bq(\xd1\x06\x99\xa0\xba!\xf9\x84\xe0\xa0\x00\x80\xec\x8d\x15z\x00\x01\xc1\xf8\x88\xa0\xa8\x00\xc2\xbb\xb9XP\xc9\xea\x1e\xe0\xce\"\x0e>B\xd8n\x99\x81\xd7\xee\x03r\xd2\xa3\xb8\x07\xe7\xed],\xd0dQ\xac\xd3\x18\xe3\xa1\xed\x18\xdb\x06\xa6\xed\x99\x81`\xca! *d\xe3)6\x1bdQ\n\xc3\xc6rSVx_\x93\xa3\xb6\xb5\xb8,\x99\xe4\xdb\x84\xb0$\x0e\xec\x91\x05R\\\x9f\xbf\x87\x15.\x0d\xd4\xde\x0b\xefaA\x0d\xc7\xee\x93\xac\xea4t\x9f\xa4W\xd7E@F\xc6HJ\xe2\xfa\xc9\xa5\x9a%\xac\x9f\\\xafe\x89zU\xe5\xd9/\xb0IL_\xc9\xd9z6\xb6\xc1\x8f\xb0\xdc\xbb\x93\xf8q\xc0\x97\xeb\xe8\xb2\x80\xaa\x9a\x96\xe1\x02\xea\x7f\x88]\x06\xb3\xc4\xcf\xd4\xd6~\x84e\xa3,\x89\xf9\x1d\xe5F\xf5gx\x0fw\x8c-\x00k\xbe\x99\xb1\x05\x10\xa2\xa5nz0\xfb\xcf\xd4U\x0f\x96_v\xb4\xf9\x9f\xa0\xb7\xb6\xff\xe3E\xd81\xcf\x0f\xd0>4\x04_\xc0d\xfb>\\\x8c\xdc'\xdb\xb4\x1f\x0d\xb9\xe3U\xf3K\x12\xea\x08\x85\x90w\x13&1\xbb& \x1e\x1f\xba\xdc@\xf0~\xefj\xd1\x07\x8b*\xb9\x96\x960?\xcau\x0d\x0c\x10M\xe9\x00\xfb\x0f\xf0\xb6\xec\xf6\xd4\x93\xca\xf8\xa67W\x80\x7f\xc0s\xde\xed%\\\xc6y\x7f\x86\x97,7\x10L\x13wu\xb4>\xde\xb3\\\x030\xfe\xed\xc2\xa8\xb0\x1c\x93\xc3\x98\xf0\xa9\xcf=\xed:\x809\xc6\xae \xd6\xc7\x04<7\x10LZs\xe3\xca\x89M]y\xe1?\x88\xf9\xe1\xae\x16s\xb0\xd8\x91k\x00V\xd7vM\xc0<\x16as\x03\xc1\x879\xd7\x9e\x85da\x86N\x02\xeen\x98d\xe6& -\x1ern\xde\xc5\xc2\xdaJ.\xdf\xa7\x12\xa0w1\x95\xca\xcbOWY\x80*6\xe5]l\x1e\xcd\xcdC\x18X\xfc\xda\xd5\x11\xf2X\\\xcf5\x00\xbb\xedC\xb0\xed\xc7\x98\xc1\xee\x86\x9e\x8e\xa9\xc5\xef\xe5\x00\xc8\x84\xd4\xe2Ce\xc0:\xa6\x16\xd3sY\x00\x07\xd5\xe2{(c\x8a}\x88\xf1SBt\xb6\xff\x07\xf8\xa8\xed\xaad\x0b\x9fa\x0c\xc95\x00k\xf4\xbb\x86\xc5c\xcd-7\x10L\x04\x9b.\x1cw\xe3\xc2\xb9\x86\xd0\x95\x02f\xa9Wv\xda|\x1f\xdb\x8c\x15\xb8r'KOh\\\xbd\xb3\xc5\x8a\xc5n,\xa4\x81b|\x18\x9eW\xe1\x96\xfa\xd8+\x98\x9c\xeaX91\x9aw?\xc8\x19\xd2%\x8a\xa7\xa4\xc8a\x8ak\xb77\x8e\xf1[MX\x9b\x94E\xd0\xad1\x96awU\x08\x14^\xe4\\}\xc7\xeb*\xbe\x0fm\x15v\x8d\xc1\xfbs, \xe6\x85-\x9cn\x93v\xbf\xc4\x95$\xa4\x187mSa\x10x\x7fb\x99=O\x0c\xa9\xc1\xe7)/?\x02e\x01jRC\x16\\9\x19~F6Z\x03\xb0\xd8\x92k\x0f\xaa_`\x82\xbbkD\x1d\xc2?\x8c\xa8\x83U\xb7\xdc\xbc<\x84\xeb\xecj\xdd\xe83L\xbbr\x03\xc1\xf2w\xae\x9d\xbb0M\xca\x8d\x0b\x17\x96ps-\x0b\x90\xd5\xdeUy\n\x08\xe1V\xdf\xb1.\x97\xef\x1ba\xfd\x11\x96\x9d\xc6N8\x80;\xc8G\xb8\xb9\xb1\x934\\\xab\x8c\x9dD(\xce\xd2c\x01\xaf\xd0\xd8I\xc2H\xe8\xbe\xf0\x9a\x06\xc6\xc2\xb1\x93\xd4\\\xc6\x08\x88o\x0b:\x17\x80\xfa\xb8\xc6\xb1\x16\xa7,\xed%Vz\"\x00\xe0`\x8f\xe5\x86\xb1\x93\x18O\x0clR\x11\xb0\xea\x1d\x03\xbd\xd2-\x97Q7\x0d5\x85*\xa6\xbd\xe62\xca\xc0g-\xa4-\"\xc4\xb6!`H\xd3\"\xaf\x03\x97\xca\x18\xaaH\xfc\xa1/+\xcd\xfa)f\xe1c\xc53\x9e\xe2\x83 \x002\x8a\xef)>\x08\x97A$\xc4\xe4l\x0c\x9f\xf1\xf0\x8a$f\xb8\xeb\"\x87\x19\xee\xa1HaFFe\xea`]H\xb6&%\xaf\xa7\x98\xe3^V\x9e\x9c\xf8\xa6m\x0c\xdfI\xea\x991\xe7j\xb9\x1e`qx\xcc\xb9\xd2W\xb1\n1\xe6A\xe0\xc3\xbd\x02&w\x97y\xa2\xda{\x93\x1c\n\x0d\xfa\x11\xad\x93\xd5\xd5\xc8j\xca\x97\x13\x9bb\xb9T\xc3\xd5\x13\x17u\xd5\xb7y\xec$\x8e\xf2+\xff+,B\xebR\x85\xe5\x07#3}\x04\x04\x13\xe5\xcbZ\x0c\xc7\xc2\xf6X\x030\xee\x8e\xb5\xc4JQ\xdf\xe4\x8e\xb4dz\x1c\x9b\x9c\x8b\x96\x0c\x89\x97\x8dx\x86\x95\xf1\xb1\x81\x10:[\x1b\xef=6o\x17\x92sg\xd8\x16!R\x86ma\xc5z\\\xba\x01\xb6\x90\x8b\xd2-\xb0\x15j\xeeKj\xa0\xbc\x8eZ].\x0e\x17\xd6\x00\xc6w\xfc\xc1\x1dG\xb2\x82G\x18\xf1\xafh\xbfV\xcc\xfd\xf65\x00\xf3\x9d}\xee\xa9\xf3\xf0\x18+\x00W\xb8\x07Q\xbd\x0f\xf1\xe8\xf65\xe4\x1e\xde\x17 \x81C\x89qj\x9f\xfb*[\xcc\xdb\x18\x97\xafht\xc3\xf3\xd9\xd7\x00<\x9f+\x063\xb0\xa0\xb3o \x98\x94\xec\xdb;\xdfO\xac\xa7g?\xe1N6\xb4\x82\xae\x18D\xc2\x87`\xdf \x12\xd6A\x0e\x94'\xd4C\xcc\x04\x0f\xd4\xce<\xfb\x05\x16\xc0\x0e\x94\x13\x14\xd1\x9c\x0e<-\xfe\xe0k\xe67\xf4za\x9b\xc2\x81\x06\xe0\xfd?\xd0\x0f\xb5\x90\xb7o\x0f\xb4\x8eL\x9e\xbb}Cf#\xc06\x90\x03\xf9\x15\xab\x00\x07:\xbd$y\xcb\xf7@\xdfA\x927|\x0f\xd4\xf3d\xe4!\xdd\x03\xfd\xe2\x0bf\x05\x07:\x99\xe0Gx\xaf\xde0\xe8\x80\x95\xef\x03\x03\xc1,\xef\xa0\x88\x0d\xc1l\xea 2\xd6A\xb2\x91:<\x9d\xbc\xdc{\xa0}>\xc8\x83\xbdo\x18L\xc2\xc4\xea\xc0`\x12&\x8a\x07\xc6;\xee#l\x1f<0\n\xd7G\xf8\xb6\xed\xc0\x88\xcc\xa4\xa7q\x0dK>\xd8\xaf%\x00W\x8d\x8d\x0e\x93\xdfC\x03\xc1\xb8yu\x11\x84\x12\x8c\xe6\x87\x0e\xd8\xaf\xf0\xfe\\\xd5$\x0b/\xda\xa1\x06`\xbc\xbc\n\x1d`\xd9\xe6\x10\xda\xc7\xa4\xfd\x90\xcbdBX5\xbb\xaaO\n\x96\xdf\x0f5\x00\x8f\xe7\xea*\xf4\x8b\xef\xa2\x0f}\xe8\x18+\xadW\x0d\xe2a?\x9fC\x03\xc1D\xff\xaaA\x14L \x0f\x0d\xa2`JxU\xd9\x0b\xb1\x08t\xa8\x0c\x86\xa4<\xe8;\x9f\xe1\x83z\xa8\xf4 l\x00\xb8fBQ0\xc2\xdf1\x10LT\xae\x99\x1b\\\x8c\x1ew\x0c\x04\x93\x90k0\x0d\xbc\x8cw\xe03F\x82k\xea\xe5vL\"\xee\xa8\xef\x98\xa6\xdc\xe1\\?\xe2\x89\x19\xc65\x9eDW|/\x1b\xd6?\xa3vM]\x9fb\xc9\xf0\x8e\xfa\x8eq\xe5\x9a\n\x9b\xc6]\xdd\xd1\xc8E\xa6\xa3,\xfe\xa4\x030\xf8\xff=\xee\xe0\x8e?0!c\xf8l^\xd3ar\xf8\xb6\xed\x8e\xc1;|v\xae\x19\xbc\xc3D\xfa\x8e\xc1;|p\xef\xec\xdf\x92k\x85 \xd7\x9d\xfd\x10\x00\xef\xb6\xcc\xf7\xbb\xf2\xaf\xbb]\xd6\xcfC\xe9g\xda\xe6]\x96uY\xd8a\x7fd\n\xb5\xf2\x94\xb34K|7k\xbdj\xbe\x8e\x9d\x84%\xec\x0c\x0b\xdb'\xe7^\xe9T\xbb\x8a\xe4\xf7\xf9\xeftf\xf2\x90\xa7\xae\x13\xf3K^Q\x93\xcf\xf0\x838J\xb2\x94\x9d\xa9\xf6[\xeeTw\x11v\x99\xdfeN\x97\xe5\xec\x0c\xcb\xaa\xdd\x88\x9fh\x84\xcf\xc4Qz\xc99x\xb5\x02\xf5\xfb\xac\xfd\xf2,;sF\x14H\x13w\xc6\x1d:\xc9R\xe4\xf1\xc5\xac\x9dup_\xe2\xd7\x8f\x12\xd6\xce\x8e\x1e}\x95e\xec\xbb,}\xd5VF\xb7<\x07-\xb7Cfo\xbe\xc3\x12\x9e\xe5I\xc8\x8e\xcc\xbdZ\xdb\xc8\xcb\xf3\xb2\x91\xd0\x14v\xd8\x19\x96\xb4\xa36\xb4\x98\x06\xbe\xcb\xdb9;\xca\xe6\xc4\xeat:]v\xe4\x08\x9f\x89\x9d$\xe5\xc9\xcc\xd8 |\xcf\xc9\xf8\x9a\x1f\xee\xb5\x9d\x0e{\xe9%\xd6\x96+!\x16\n\xea\xf0\x99\xc0\x0f\xf7\x96\xa20\xe3a\xc6\xce\x88e<2\xdb\xb1\x8f\xe7\xb4\x1a\x8bhGV\x17K\xc0^\x13\x7f\x9fa\xf3l\x81eG\x8f\x92\x8aw\xc9\x173\xebo\xd5\x97\x93\xeb\xec\xb33lV\xad\xb4\xe8\xf3\xc4<;\xd2\xb4\xa0\xa2\xcc\x91v\xc8\xbe\xc7^\x11\x7f\x86\xec\xbbl\xeed\xe7\xd5\x0e\x19\x81XX\xebd:j.t\xfe\xfe\x83\xf4\xe8\xf1A\x97\xb5X\xab3\x93E\xf2\x0eg\xc9Iy\xfb\x85\xe0\xf0F\xef\x16w\xb3\x19\x8f\xf7\xfd\x90o&Q\xcc\x93\xec\xb0\x9duY\xeb\xe6M\x9e^\x8a\xbc<\xe0\xad.\xc1\xd6 \xe7\x0b\xec\xc8l1\x82N\x97\xc9V\x9c<\xc8\xca\xd3\xac\x99%\xc5\x147\x1a\xc5Q\xc8\xc3,]`\x8en\x89\"\xfb~\xe2\xc4K\xa5\xa2y}\xd14s2\xbe\x19\xe4\x03?L\x17jXA\x1as\xb7\x0e\xc6Tw\xdb<\x90\xb9&\xd2\x05\x96\xd0^\xf4/-J\xf9\xd6Bw\xedu\x9d<\x1b>\xc7\x08\xa2\xe7i;r\xd2\x13Mm;r\x8f\xd2\x05\x96\xd6\xcf+\xe1^\xeer\xd1\xb5[\xbf\xd4\xfaWZ\x84\xc0>P\xf2\xf5n\xcd)\xbcK\xe9l\xdc\x0e\xdb'\xe7\xe7;\x16\xc9\x14@'0\xc87\xa0\x93\x18$\x88W_\x82NaP\xaeA'H\xadT58\x7f\xe2e\x0c\nt_'\xc9\x08]\xdd\xe0\xc9\x13\x9d\xce\xab\xdf20}JX\xbf\x9e\x1c\x08\x02\xc6g\x8a\xc3\xc8^c\x9c\xd96Um\xce\x02\xe3u+j\xe98\xa6\x1d\x0b\x92Mz-\x88t\x95\xd4j\x0e\xfeGw)\xbb \xf3 `G\xce0N\xe59\xc9P$\xcfc~\xc8xG\x93\xa18\x89\xb2(;\x8c\xf9\xcc\xd0I7\xf6CM\x90f\\'\x08\x04Q\x0bA\xd6\xc9\xae\x877\x04S\xb9\x1e\xde@|N\x0d\xb3L\x8b\x04-,-\x02\xfbF\x90J?\xdd\xdew\x06\x03\x9e\xcc\x0b\x8e7\xe3\xa7\x1b\x8b\xdb'\xe4\x9f)O\xc6\xb7\x1b(\x82\x103y\x91\x942\xc5#KtY.\xddJ\xa4\xec\xaa\x93\xe6\xc7\x03&\"\x99\xb0\x90\x00\n\x17^l\xb1\x97{fz\xaek\xcd\x03\xcc\x9f9o0\xefp\xde\xa4=/2+vD\x00\x01 \"\x80$)Y\xd5}\xb0\x96\xad$\"\x10\xd7\x1d;\xf6}'a\x00\x9b*\xfaf\xe7\xbe\x92\x1bl\xbf\x0d\xf1\xed\xd6\x8e\x12\xc6}-\x8cW[\xd1\xde\x07]=\x1d\x13W\x0d\xd8;#\xc5\xe1U^\x10z\x91R\x1c_aP\xfc\xeb\xbb\x9c6\xa2&\xday_\xf6\xa6\x0b!\xdf\x16\xc7\xce\x1cz\xec\xcb\x85\xcdc\xa7\x851\xd5\xf8\xec\xa3\xcc\x94\xf7t\xc8\xb0/\x9fq\x03\xf4\xc5L\xd94s\xb7\x89\x85\xf1o E\xe3\xdf\x12\xfe\xc6\xbfk\xdc\xce\xfe\xac\xd0\xfe\xddLI,e\xffvUw\x8f\x91C\x1d\x82\x83)\x84\x13\xbcXn\x86\x7f\x95\xb8\x17\x87\xed\x85\xf9K\x1f\x89\x15F\xfe\x18\xcee=\xbd\xce=\xfb\xb9MP\x0c\xed6\x93\xc4_\xbf?=#\xe1\x9f\xa3\xe4IY,\x92,\xfc\x99\x18\x88\x8a\x9cR\xd1JZ\x9e\x96\x8c\x1e\xa8Hy\x05!\xe2+ \x91\xd2D\x88\xe4\x9f\x86\xd8\x16\xbf\xe8\x84#\x0d\xaan.\x95-\xee\xceP\x7f7k\x87.\x83}\x7f\xed6\xccvq\xab\x8c'\xdc\x01\xc2+>t\xdf{\x11\xe6\x85\xd3\x06\xfe\xeav#q\x91]\x1d\x92\xbf\xdb\x8e7O\xb2\x03\x7f\xb60\xcc\x0d\xa4[\x93\x1d\x06\xbe\xee\x0e\x1d\xc7\xd8Q3\xa2\x14R\x8a\xe9\xe6\xb1\xba\x14u\x0e\xd3\x91\xa6\x94\xe2\xdf\x92Q\x01\x94\x0d\xb1\x14g\xd8J(\xcb>\xb6P\xbe\x84bn\xfe\xc1c\x7f\xf6}D\xf7|\xd2\x04\x00m\xfdk\x0d\x03\x11#\x03\x92\x96\xf9\xc2\x8e\xc9\x05\xf8\x14\x81\xf3\x1b\xbd\xda\xd6_\xaeQ\x056\xf3\xe6aT\x90l\x00|@}\x88\x18FE\x91-Q\xd6\xbdv\x1cG\xc1v8.X\x8b\xa2H-\xfc\x14!\xd7\xf2\xd3\xf0\xcf\xe4J\xbc\xa1\x84\xc2\n\xc3/;\xfd\xd0>\xe2?\xc8\x7f\xadt\xe5*\x99\xbfJV@o\x8d\x8a\xad\xf2\"\x12\x9f\x15\x0b&2\x7f\x92e\xfe\x95\x9d\xc1c\x18\xc1>d\xb0\x01#\x98\xc0\xa6\xe3\".\x18=\x82\x10\xbe\x82\xec\x11\x84\xeb\xeb\x0e$\xd3\x90V8\x96[\x9b\x86\xc7\xdd\xcd\xa4}\xfaws\xd9\x97\x155\xe3\xd3\xcb=j1\x8b\xd3\xe2\x98\x92\x8b3\xbf\xb0\x13\x87r\x93mV3\xd1^\xff\xac\xe0\xf7\xbf\xff[\xf2\x8c\x9a\x9a\xbdK\xa1\x82\xdc\x06W\x1f\x0f\xe3\xebVe\x91\xef\x84\x8d\\\x99\x81\xbd3\xd6y \x03+\x13%\xf5\x86\xa1Z\xa7GB\xa0\xd5\xe4E\x1d\xde\xd6\xc8\xd7\xe6m\xbev\x18\xf1\xb2\x12\x8f\xe3\xf6*#\xccK[\xe1\x9fB\x89\x7f\xe2\n\xff\x14\x1c\xff\x14\x12\xfe\xc9\x18\xfe\xc9\xe0+(\x1eAF\xf1O<\xcd\xba\xf8'\xd3\xe0\x9f\x04Ug\xb7\xc6?\x127E\xf1\x8f\xdfB/1\xc59]\xd1\x8e\xe9\x88\xaf\x84\xd7?)+E>gV\xa9\x8b\x07\x99\x0e\xa2\xa3MH\xaa\xa2\xfb*N\x88\x15u\x98\xa4Z\xa9\xf1P\xaf\xd4\xd8T)5X\xd1H%\xcdcEz\xa5\xc6\xd6\xef\xab\xd4\x10\xbfd\x91\x7f\xb3\xa1\xa7~\x14\x9d\xfa\xb3\xf7\xf9\xa4&b\x9as\xf9\xb6(\xd2'\xa8\x88\x8b\xd4\x15\xde\x12Lc\xf5u\x12\\Mj\xfa\xbcY\xe7\x90a#\xad\xfa\x92\x97?M\xe2\xc2\x0f\xd1\xdfL\xa3\xbc\x94:;\x08B\xf4V\xc8\xd55_\xa7\x84%\xff\xa9\xfa\xd6(\xe9\x12Q\xf1E\x18\xbf\x9f@(j}\xe6\x87\xc3\xb7c\xbb\xab\x9fKxI\x07\x90C\xbc\xbe\xec\xd8\xa6p\x8cUF\x14l\x91\xa8XQ'\xf1\xd1A\xb4\xff.%\xa8\xf5B\xc0\xedr-\xb1\xb8\x18*ex\xb7\x0e7\x0cI\xc9\xec\x8d_,\xba\xe5LJbU@TA\xa6\xa5\xb0)\x0b\xe7`\xaf\x15\x95\x1e\xb0:\x03\x9cH\xe0\xe9ul+O}J\xf5\xd0\xdb\xc4\x05\xebU\x02\xd5$\xda\xcc4\x9d'SI-\xfd\xb4\xa6-z\x94@\xda\x8e\x83\xf0\xbc\x03e\xe2yO\xae&\x12c\"\x9ekW\xdf\xdcb\\\xcd\"\xc6\xeb\xaf=\xc8\\\xc7\xaa\xf1\x81Z_|\x91\x91\xb9\x10\x13\xecc[0\xb9\xd9\xf8A\xcc!W\x16_\xab\xc6\x17\x99XI\xba\x9b\xf2\x00\xa3jc\xe90\xd5\x8c-\xf0=\x9bUR\xaaa\x02\x83\n\xf7LZ\n\x0c\xf9\xd1q\xd3\xd0\xbf\xf3\xa5\x0b\n\xfe\x94\x98\xd6\x12pX\x13\x98\x99\xc5\x01\xb8\xe4Q\x8f\xc8\x00\xfd\x86,s\xa5%)\x16I\xd0\xdbV\x8a\xee1=\xa2\x15q\x9e\xe9=\xc3\xd8t\x17r\xba\xdd=\x12\x99(J.\x8e\xb2\xab\xe7\xc5\xeb\xb2\x98\xb4\x8d9\xe5\xe7Z!<\xd0\xbdo\xbfko\xe3\xb0C\xcb\x8eY\xfey\x194uo\xa3Pu\xe7\xd0\xcb\xc8\x0e\xc5\x9d\x13\xf6\xdf9\xe1\xe7}\xe7d5\xf1\xa1\xbbu\xa4*\xdf\xd3\x85\xeb\xd6\x0b\x07\xdfNX'\x9e\x87g\n\xa8/\xab\xfb\xabb \xba\x95\x98\xb1\xf8<\xee\x96D\xec\x0ee\x06\x84GW\xa9b\x9c3\xac\x12\xe6\x07\x97dV\x16\x8a\n\xf3\x9e+4\xc5\xf2$~\xba\xf0\xe33\xc5\xf7\x01\x82\x8d\xf5\xd2\xcf\xde\x07\xc9E\xac\x92?.X\x95e\x12\x90\xe8\xe0\xd2_\xa6\x11QU;g\xd5:\xb4\xa1\xaa\xee\x12\xb85q\xc1\xe4\x01\x01\xc9gY\x98\xd2\xad\xb7*]f\xf7\xb3\xb3\xd6g|\xe9\xf8'\xe4\x02\x12\xefu\x16\x90\x8c\x04/\xfd\xb4y\xce\xe9ZG\xb4\xda\x99\xf7\x9e\x08\xe1w\x98\xe5E\x9bu\xa3\x80v\x05{p\x86]\xa8\x90\xd6)\xec\x81\x95\xe0)fw\xd3U\xcd\xef\xa3\n\xdar\x81\xc9f\xdb\xb6?H\xa2\\\x19n2\xbc\xf5(\xeb\x1b\xce\xf0B\xba\x97\xcc\nRl\xe4EF\xfc%\xbf\x08\xe9$\x98\x91k\xe4\x85q@._\xcfm+\\\xfag\xe4\x1e[\x88N\xa1_\x06a\xa2+<\x0f\x03B\x0bu,\xf0 \xdb\xd6\xe7qZ\x16*m\x03\x9f\xcb\x0c\xf6\xeb\x0b\xae\x85DOt7\x1d\x93f[\xf3\x90b\xecK\xf3;\xc1\x0e\xa1\x82V\x98t\n\xb5\xa3)\\lL;(.'\xd0\x8f*/\xae\"b\xb2^\x07\xf4\x1a\x880\x98\x07\x1d\x9d\xb6b\xf72\x026F\xeb\xdf\xfe\xf5\x8f\x96\x90}\xdf\x14\x07\x81\x0e:NN\xf0p\xea:/]\x88(\xc0\xdf|\x85\x1a\xbdfI\xba\xc1O\xb8v\xba\xf6\x17\xfc^p,\xe7#L7 iFf~\xa1\xdb\x0b\xca\x95\x0b\xbcQ\xd5\xa4\x97\x82\xfc\xb7\xd8\x0d\xd3\xf8nw\x88dj\xb8w\x9c\x12\xe1\xec\x1a\xa9\xb0\x06+\xab\xabta\x1a\xf6<6\xf2\xfeA\x98\xa7~1[<\x8f\xc3\"\xf4\xa3\xef9\xcb\xaa`J\xc4\xc3n\xff (\xf8\x12\xf1H\x13\x9c\xa0\x9f\x94\x05\x1b`\xc1\xbaz\x01\xb4\xcd\xc8\x9c\xde\x04B}E\xcehs\x13\x06\x8a\xcf\xe7\xb0\x0f\x01L`\xae\xffhU*\x15\x18\xa5\x8azu\x83\xfd\x86z\xef\x9d\n\x1f(\xa5\x1dZC<\x18p\x07\xc9 \xb24\x9d\xfd@\x05'yRf32\x81es\x04\x86\x83\xb2P5\xd3\xbbW5K>\x01_\xc1p\xcb\xfc\xf8\x04\xcan\x0dr\x99\xfaq\xf0\x8c\xa4\xc5b\x02#\x85t@\xf0\xdbJ\x01\x9c\x80\xda+a\xb8\x83$\xac\x02\xf8jA\xd8\x9c \xc2d\xe2WQ\x9f\x13&z.\xe4\\w:3Y\xfb\xa3!\x12j M\xd5\x15\x90\xd58B\x96L#\x06\xec\xdd\x19\xe8]\xe9 \xefz\x8c\xa7\x15\xe9\xa2\xad\xd2\x90\xbc\xc5\x14\xeb\x95\xb0\xaf\xad\x9e\x18g\xcc\x89\x9d\xee\xed\x05B\x98\xc8\x996\xedh\xd2L\x12\x03VJn\xf8\x17\x0b\x8dW-\xfa\xaf~\xb2\x19\xff\xd4\xd4\x81\\\xc9zS\x818X=f\xaf\xf2\x83\"i!\x04Y\xdbCQd2\x87Z\xd1nY\xbd\x8a\xd1\xc2\xcb\xd3(,l\xeb\xc7\xd8r\x86)\xd3\x15\xad\xc4\xf0\x186a\x9f\x1b\xb3\x11X\x87\x91\xe3\xfd\x94\x84\xb1m\x81\xe5\xc0:\x14`V\xe0\xf2\xcat\x10\xeaM\xa3\xb8\xaa\xa5\xa9\xf5\xc5\x06\x8d\x1d&/\xfa\xe5z\xd8\xb6\xa8\xa8\xf3\xe6=q\xdc4,\xb4#\xafF\x91\xb2\xe5#\xef\n\xf6 \xc5\xb7\x9f\x1b\xf13S\x918 /\xe8\x908!/\xe8\x908>/Pz\xbb\xcfT$N\xce\x0b:*\xcf\x88\xdb\xe9\xd6c\x9d *gf\xa0rf\x9f\x9e\xca1;e\xf6P9x\xa5\xbb=\xc2\x90U\xa1'L\xce\x18\xd3\xd3k\x88M\x9f\xd0\xcbI\xc1\xbe\xaa\xd5Hx\x06\x14gY\xee\xe3{?\x0b\xfd\xd3\x88\xa0\xc8c\x85\x0e\x85R;\xec#\xc8bn\xb3^(\xfa\xd3\x7f\x951O\xfc2\xcbH\xcc\xbf4\xd3j\xd5\xa4\xcfH\xf1\xa4(\xb2\xf0\xb4,\x88m\x05~\xe1o\x9c\xf3>\xfb\xe8\xac\xe6\xc2\xa9\xaf\x06K,\x8d\x05{\xd5\x8d\x82\x91pb\x83\xa9\x0e3\xa66\xc68AZ9\xd1\x97\x9f\xfb\xd1\x04|e\xf1\xb5f\x8f\xabE\x1f\xb4\xa3\x8c\xe3\xc0\xddd_R.\x97\x04\xac\x85\x8e\xe9/\xef\x04\xcd\xdc:\xdc\x00\xfa\xafh\x90\x08\xb4\xbd7T\x9cE8\x8c\xb3\xa8\\\x8b\x9f\x85\xc1\xcb\xa4\x8c\xdb\xc9\xff\xe0\xa32\x19\xdcB^\x0d'\xa4 \xbcH\xf9\xd3\x96\xebcZ\x08%>#\xc7\xcb,\xb2\xfa/^\x15Y\xd7Z\x8b\x1f\xc2(zKf$<\xc7\xcb2\x1f\xb0&\xbd\xa7|\xc8\xa2\xc4\xb2sJ\xdf\xc9^\x15\x1f$\x955{\xe3+\xf5\xdaS\xba\xaf\x1eqk#\xd0\xb5\xab\xf9\xceD\xc4\xd1\x15@/\x19o\x1e\xc6\x81D\xfc\x0d\xa4\xfc\niwyl\xc5F\xdf\xda6LF{h\x8c\x11Vdl\x0b\xb0b\x15`\xe9\x1b\xb3CVO`\xc9\xdc\xaa<>\xa2\x96:zu\xfa7\xb1[\xf3\xc5o>|\x80\xac\xc7\xb0\x11$\xac\xd9n\xa2\xf7Cf\x92\xda_\x0fqj\xa1P\xb7Zz\xe6\x0e\xd4\x08\xb7\xa7Ha\xb31\xf4`\xdf\xa9\xf8\xc4\x8c\xd3\xee\xfc\x98\x0f\xdc7\xcd\xe9\x1e `9\x98\xcf\xc9\xac\x08\xcf\x89\xf8\xd2\x88E\xd0\xfb\xaa}\x92{\xd5\x1d\xb2k\x94|\x92MgW{\x82\x06\x1e5\xb3\x04\x87\xc7\x14\xf4\xf2\xf0g\x0d\n\xe4c\xceo*\x14\x91\xd5|\xc2\x13L\x0d\xd8\xae\xbe\x93\xc8?%\x91\xb1\x9bE\xb1\x8c\xbeA%\xf3\x8d;aa\xd1\x8c\xbd\xd4\xea\x03\x04\xf0&y\xad\xeb0fT 3\xb7k\xda\xa2\x98\x00\xa6o\xe1\x13&p\xeb3\xa0\xe6g[\x8693:C\\!W\xd7\x03\xa7\xdb\xa8\xa7\xb3G\xf6\x8a\x841N\x8e\x905\xf5\x00\x1374\xbe\x0b\x88\xa3\xb4LY\x90`\x83\x8eP\xb7A\xd6S^\x0b\xde\xbd}1\xb1\x0c]7Dg\xa1\x9d\xe1\x8c\xb4\xb5\x17\xdb\xb5d\x8b\xd3\x0c\xd2y5|\xd8\xb4s\xd2Wk\xd89\xf9\xab\xdd\xa9}\xe0\xd5c\x89\x03z\x7f\x0d\xf1\x98\xce\x1a\xda\x06\xd4~\x1bC\xea\xf1\xdb\x95\xc4\xe5\x12\xcd\x11ns\x8e\xe9\xd3\xe2\xe8z\xaf\xf9\xfa\xec\x13\x13\xcfkZ\x8e\xc6\x14V@\x050`\xbf\x06\xa2\x03\xa8\xe2?\x92`B/\xf3\xbd=Hl$\xa6\xfa\xa9\x1c\x86\x1a\xfa\xeb \x9cc\xacH\xb1\x87\x89\xfaq`\xa2\x9fm\x88\x96\xb8}\x93\xe5\xa6\xb5\x05\xb9T\xf1s\xf2\xc3G\xccW\xa2\xcf&\x0e\x86\x83\x83\xb9\x91.\x0c\x9a\x16D\xeb\xf0Q[Ctj\xf4\x88[\xeb\x05\xee\x13\xbb\xce\xf1\xed\xe7&v\x8dtb\xd7H'v\x8dtb\xd7H'v\x8dtb\xd7\x88\x89]\xebQEL\xc0\xaa\x12\xabF\x9f^\xac:\xbb\x8dXU\x12\xac(\xa4\xa7]\xad\xadVy\xdc\x92Z\xdeJy|+\x11\xcf\x9dr?}\xbcM1\xc4)F\x19\xe9\xa3\xa6Q4\xb7\xa5\xeb\xb5\x10\xb2\xa5\x98\x81I\xdbMk\x1f\xa1w\xee1+\xa4p~\xe5\xd8\xed:\x15\xd2\x17\xb0>GI8\x962\x0fE4\xe5a\xf3\xe8\xe3\x9d\xb9\x8b\xdb\x0fYX\x90\xd7qt\xd5\xc0\xbc\xedG\xa7\xabp%\xb0\x1f\x0c\x08\x83\xa1\xb7W\xcc\xc0\x80\x96\xe9\xee\xaa\xd3g\x02\xd9\x85\x1f\x07\x11y\xbd\xea\x88[\xa0;\x14\xd0(\x10\xdf\xfb)O\xe2{\xa1W\x90\xbc\xb0\x0b\x16\xc0^\xb6\x1d\xe0yf`2\xc8\xa6\x00VY\xbe\xf6\xe17m\xaf\xbc\x91vlX\xc1\"9;\x8b\xc8\xf3\xfc \x08\x8b\xaf\x93K0$\x99\x91\x1f\x19\xbf\xb2\xb1\x0f[y\xe9\xdb~\xb9W(F5\x815\x8c'\xc0\xfe2~\xa7\xb6\xc0\x84\x1e\x98\xc7\xa46\x9d\x08W\xf2#\x8fE\xe1|!\x9e\x0e\x82\xd6W\xe5\xa7A\xa3p\xa4\xc3\xea\x14t'w{f\x1bV\xb2\xa9\x80\x15\xf8o\xfa\x08\x05u\xe3\x16\xaa/\xf1\xc1*S\x1d\xf6[\xdd\x02\x02V\xb1\x82\x001\x85\x16\x9e\xe0\xb6\x04\xf5\xdf_~\xa9\x9e\xaa-Ur\\X\x93\x1a\xab\\N\x18\x11\xd8\xf8\xb3\xd2\xeb\x0f@\x0b2d\xae\x8e\xf1o\xbc\xd4\xcf\xc2\xe0]\x1a\xf8\x85.\x08\xc2M\xd7X\xa2\x11\xf8*\xcbo\xb4\xeb\xac\xda\xa5;\x9a\xb2V\x10\x05+\x1e\x86a\xeaxXA%\x0f\x15ie\x88\xb6\"?\x99P\x9f\x0f\x101A\xa5\x9f\x1fx?\x86\x98O\xce\xfa\xba,\n\xb3c#p\xba+\xb3\xad#rY<\xc9\x88\xd2\x15M~JV}\x11\x9e-\xa2\xf0lQ0\xb0\x9a\xf4T\xe1\xee\xab\x97\x9ef\\zz\x13W\xe0\x81\xd2\xd3\x94U\xcc\x0c\xa3@\xf2\xad\x8f\"\x1f\xaa\xf0\xd5SK\x91M\xcer!9\xee\xd9'\xc7\x85s\x13\xa3a-vk\xab\xe7*o^`\x19XS\xbfo\x99fC\xe6%b\x11\xa8\x82R\xf4\xcf\xe9\xc6c\xab|\x13\xf8\x94\xdfqH\x9bX\xb8Rz\xfe\xb4\x15\x01\x15,\x17\xce\xf1_\n\xa2\x06 \x83y8\xbd|\x1e\xacd\x17\x0b\x9ck 3\x12\xe0\xed&\"b\xf6~\xc5\x08\xa2\xfa\xe0\xf5\x7f\xd1q\xae\xe8\x91\xc7\x00\xdb\xbb\xbb\xdc\xbc7~\x9e_$Y\xb0\xf2\xe6\xfd\x11\x9fO\xb1w7\xdb\x0d\xbf,\x12z\xddG\xa4\xa0\xbb\x12\x93\x8b\x8d\x94\xcfu\xc0\xd7\xb1\x08\"8\xf8\x0b\x0ea+|q\xf3\xdd_\xe8\xfdkz\xc2z\x88\xa7\x07\xdd\xe7C\xf6\x85>\x84^\x9e\x83,\xe4\xa1\nf\xda[\xd5\xe0\"\xc8\x8a\x0dF\xf4\xda\x12\x11\xb6\xe4\x94\xf8\x19\xc9\xf8\xbdj\x82\xf7\xdf\xe9\xc6\xc3\xe1\xdd\xea\xca\xbb\xf1u\x87\xd7B\xf0\xd9]u7\xba\xe6\xee\xf6\x8ac\x16\x89\x16.\xcf\xe7\x86\"\x87_m\xab\"\x9c\xbb@6w\x81h\x86#\x99\x01\x08\xc6\xe8\x7fl\xda\xa9a\x08\x81,\xfb\xeb\xd4\x11\xab\x12\x0c\xf6\xfe\xed\xd1\xd1\x1b\xccLK\xe2\x82\xcbR'P\xc6y\x99\xa6IV\x90\x80IR\x08\xa5\x97\xac\xffh\xc1:\xa4\xb0N\x7f\xddN\xfc[\x0f\xaf\x16\x017W8\xed\xb3e\x919\xf6.{\xd1\x002\xb9)c4r\xc6\xab7-\x98\xf4\x1b\xcf\xb4\xab\xccLH_+D\x0b\xb5\x1e\xd5$3c33\xf1e\x95\x82\x92\xaf\x1d\xcf\xe9\xc3\xc4e\xfd\x02$w\xb3\x00\x9d\x99\xa8\xb2\x92\x1b\xb3\xbe\xd1;'O}J\xe3\xd6\xab\xa7\x96\x1e*s\x9d\xd1\x01\x9d\x99\x00\xca\xb4\x9cd\xc8r2Q\xbby9\xd9\xc5=h9\xd9\xeau\x86l\x17\xd5\xec\x15\x06\xb7\xf54\xe5\x15\x87\x9e\x94\xbf\xe2\x11\xa4E\xefT3\x96g\xbe\x17r\xe2\x95\xa7*\x0f\xdbp\xdbK\xd0\x90\xd5\xd0\xa0\x1fL\x15\xe9G\x0d0tM\xb4k\xa9r\xbc\xfa\xf4\x07q\x05LT-\xa7j\xe4\x03\x82\xc8\x19h;\xe5)T\xc7\xa9Q\x07\x8d\xcb\xebxn\xd2\xd5\xe17\x12\x08B\x87\xa0\xba\xbd\xfa\xf2ws\xf6MZY~\xfbp\x03\x85\x82\xde\xaaYGW\xa7\x06 \x96\xf7\x95R>k\xf1\x80$\xa1\xe7\xbc\x8d+u\xe5;pKo\xea\xa2\x11[p\xb8;t\xdb\xa1\xba\x9eT6(\xc2\x9b\xd6\xa3Z4\xa4*U\xef\xfe\x8d\xe2Yw\xe5J\xffhB\x83\xed-\xbd\xd4`\xab\xc3\xd3\x87UQ\xc7\xad\xd9\xaf\x8a\x1e\xe8d\x07\xdb[\x0fu\xd2\x83\xedme\x8ckV\xf4yX\xf2\xc9\xfb\xd9lHX\x8dHym\x9aSyR\x16\x8b\xe7\x05YJ\xb9\xc7\x9b\x15\xea\xec\x0c\x93ZR\xd0\xacR\xa7\xa26\xa6<%3\x1e\xb6\xd0\x9ba?\x98\x90\xeb\xeb\xab\xe7\x01\x89\x8b\xb0\xc0\xa06b\x08\x7f&W\xa8*\xc2\xbe;\x8db`mQ\xf5i\x12\xe7\xe5\x92\xe4?0\x01\xd1JB\xfb\xdea\x17\x8aa\x8b\x0eQX\xe0\xd8Ek\xd0\x9a\xe12_\xcf#\xfft\xd0\x00\x05\n\x97\xd2\xf2\xb1\xbc\x0f\xb0\x8f\xd1\xe0z-%\xea\x0f\xbf\x0f\xf3\x10\x85'k\x9bj*\x8d>\x14FN\xfd\xd9\xfb\xba\xb2:\x1c\x14\xa2QK\xd4^uP\xdd^\x0cCR\xcd\xc00(FO\xab\xd7\xde\xec\xc2\xa5\x98\xbbzT\xca5U\xf6\xa8A\x1f\xf0\xb9j9\xf4\xbb04z\x04\xd3n%\xf1Qv\x95\x94\x05:\x07\xeb+'\xbc2\xf3g\xee\xa9\x1cr\xbd\x99X{}M\x96\xe5\xd2\x8f\xa2\xe4\xe2(\xbbz^\xbc.\x0d\x96P,\x87e\xc1\xeb\x1d\xc4\xfei\xa4\"\xd5\xc4\x83\xf1\x1f\xbc\xb9A\x0b\x12\xad\x10\x0e#\xa8\xebb\x1ag}\xcd\x05\xd6\x1c\x18L\xf6\xbc\xaa\xdc\x1b\x1fv\xc9\xb6`H(\xd9\xb3\xaa\xea\x80!\\UZ\xce\x97\xa8\xc5\xd4\xd7<\xad\x06\xfb\xc6\xa8\x13=a\xdd\x0b\xad\x8e\xbe\xe2\x05\x86e\xaeQf\x8f\xc3\xd8\x01\xab. \xa5?\xd2\xc8%\xfb\x80\x07\x85;BZZ_\xfb\x90\xd5~Z\xa1\xca\x1e\x0f\xb0\xa7\xac\xfe\xdb\xdaM\xbc\xef\x8b\xf7\xb0\x07%\xa5m\x0c>\x7fO(Q\xe5\x859e\xbe\xf4\xb5^\xc3\x1e\x9c0\x16ArS7\xcd\xee\x0d\xec\xc1\xa9\x97G\xe1\x8cP\x9c\xb51rx\x82\xef\xc6\xf7F\xe5\xdf\x8dS\xad\x1a\xb4oZ\xcd\xcd\xc7\xe8\xacO\x05w'}\x0eP\xf5\xdd\xb8\x9f\xd5\x838T>~\x155\xd3\xcc\x1c\xac\xfdX# \x02\xc5l\xc3\x82,\xc1\x82u\x9e}\x8b\xd9\x93v\xae^\n\xf7\x96\x8f\xaa\x1b]2S\xc3\xca\xac\xa0\x13\x1c\xa6\x04\xd5\xf6\xc4#2W>F\xf5ZQv\x86\x1f\xba\x9a\x9er\x0c\xd9x?\xd1~J\x83\xf9h\xdb\xd9\"\xb9\xfe17\xb3F\xedR\xcce\x17\xcd\x9bu-\x1c\x98\x06J\x18\x0d\xa2\x14\x8b\x88\xa7A3\x193=6H1]r 9K\xb3\xf1\xb4\xdd\x02*\xe5\xf5\xaf\x1b\x1e\x10r=\xf4fI\x19\x17\xf6\xad\xceD\x0b\x1c#2\xa0cmg\"7\xcf\xb0\xee$\xc4\xb8zO\x14\xe7W\xa0\xa6\xaf\x96\x0d\xa8\xb3\x18<\xe2Y\x12\xc1,\x89N\xd8\x85\x03\x8d\xdd\x8aN\xd0IK7\x13\xeb\x15\xbap}\x8aq\xc8nO\xda\xe1<\x93}\xa3\x1c\xe3\xb8\x1a\x99\x94\x06\x99P\x82\x8c:%\x9f \xee7\x9fV]\xbd\xf4S/\xcc_\xfa)\xf3\x17R\xd8\x1f\xd2\xe7\xda\x0e\xa5\x8e\x07&o\xd2\xcd\xe7\xa2\xcf\x8fh\x1e\x1bc\x95@G\xcaj\x88ZB\x1fA\xc1O\xe0\x94\xd1\x80}\xd9\x84j\xb6g\x02\x06\xfe\x80>\x99\x7f\x81W\xe6\x04z\xe2T\xa4\xac\xd6\xa2F]?\x84\xc8\x82\xf8\xb5|\xc9\xbe\xc2\xf4%\xc6v\x98\xdb\x94\xec\x94h\xae\xdf\xcc\x04\xd4\xe7\xa3#\x7f!\xa4H\xf2\x97-QV\xff\xbaK\xb2t\x03\x07%jsNo\x02\xe7}\x8b)\xb8\xb7 \xf4\x04\xd7\xaeBEN\xe0\xbd\xb6\xa2.^h#;\x1c\x06\xd8\xbb\x0b,\x7f\x13\xe31m\xc7i}\xdd\xbfJ m\x90o0\x01\xcbj\xdc\x9bm\xb2\xe6\x8e\xee\xad\x8a\"\xab\xef.\xb8\xcbY\x1e\x1a\x07\":\x9f\xf0\xb0\xe2\x98Z\xb2K\xb8\x1a\x0e\x8a\x8c!\x14,c\x1f\xc1y]-\xf5\x13\xdb\xa1\xa4\xe2\xeb:t\xab\x9e9\xb8\x93\x95\xff\x87d/oJ\x0f\xd7\xe0}\x82w=\xa3\xda_\xd7r\x01\x8c7\x80; \xfd\xa9\xbd\x81\xb9$\x03#%\x1a \x83\xa6\x87\xb1\xae\xda\xa5iN\\\xe6y&\xe2\xfb>\xade4\xdc\xff\xe8\xccmk\x8a\xafL + y\xf2 \xf05\x10\xe9\x00\x1c\xef=\xb9\xc2\x1b\xdfH\xa8\xf3\x8b\xa1_\xd8/\x9e\xa5\x97\x93\xe2mg\x06\x03r\x1c\x8bh\xf8fd\x0dm\xdcn\xacmr\x0f\x1e\xc6\xfeI\xd1<\xf9\xd2m\xa0\x06Zw\xcaM@r\x93\x83t\x17\xb8\xf1\xa9\xd1,\xb7Blo\xf4+\xd2\x08\xfc\xf8zP\xbd\xef[\xe0\\\xbd3\x01s\x9d\xf8\xa1/\xf9\xaf|i\xaf\x06\xc1\x03\xdc\xdc\xb5\xa6T\xedG\xa85W\x9be?\x84\x03W0\xcck\xea\xdb\x8e)\x0f\x19C\xe3\n3D\x9d\x12\x0f'\xb5\xe5sY\x0dr\xc0\xa9\x84\xd5h)\xf1\xf0\xc3\x9c\xd0^\x9f\xc7L5\xd4\xfba_\xa4\x90\xc1\x88g\x95 ~Fh\xa7F\x97\xab_\x03Z|t\x03\x8bo\x95\xa5\xf7\xb9\xe8M\x1dD\xb6%\xa9\xe9\xcb\xb5\xd4\x12\x01\xf5Uoi\xb8\xba\xda\xcd\x86\xbe\xac\xab\x92\x95\x94\xdb\x13\x98\xd6!SZ\xf1h\xe9\xaa\x06\x06\x1b\xaf\xf3\xcf\xd0\xa8\xc6e\xa6\x0b\x1d\x03\x16\xcc)\x95\xc1\x1e$H\xecdM\xd3\x91\xccl:\xd2\xf4\x93k\x81\xac_[\xe8\x89W\xab\x98)\x0e4\x94SZ\x83\x85\x83\x84\x9a\xbaZ\\?\xadod\xe9G\xea$\xedyq\x15\x11\x9de)%\xfb\xcf\xb2\xa4\x8c\x83\xa7I\x84\x19\xdc\xff\x7f\x0f\x1e\x9e\xce7\xb7\xbb\xf7t\xeb\xe4\x19\xc6\x92fj\x19\x9dL\"\x9c3\x1bx\xab\xdd\xa8E\x17\xdf\x92O\xfegj\x0d\xd6\x03E\xd9\x10(\xd2\xd8K5\x0dj?\xcf\xe9\x07\xdax\x16\x81\xce\x18.\xd0\x19\xc3\x05:c\xb8@g\x0c\x17\xacf\x0c\x17\xa8\x8d\xe1\x82\xda\x18\xae\xebd\x93r\x0f\x81-\xa5\xb1[\xf0\xe9\x8d\xdd\xcc)\xfe$c7\x15\xed'\x19\xbd(L\xde:\x9e\xc2\x83M\xdbn\x95Q\xf8\xf31\xbf\xe93\xae)jO\xe0\x1es\x11JPO-t\xde\xd98M.\xadc\x03}O!L\xeb%\xcc\xd7i\x8d\xf9M\x88\xe0\xc2\"\xeeX\x9a\x91\x99_\x08i\x80\x1dsI\x8e\\\xc0.\xd7>U\xda0\x86\x8e\xcd\xa7n}\xe3\xc2\xcf\xe20>3\x89\xffE\xdd\x89uW|e\xec\xfd\x94\x84\xb1m\x81^\xe8\x91\xe8{J\xbd\x97t\x16\x1d\xfa\xf3\x97kW\x86\x01\xc3Pd\xb9\xb9\xc9\xb6\x88\xa4\x94#5d\x0b#\x97\xa9\x1f\x07\xcfX\xbd\xbaoOzO\xcf\x9b:\x01\xd4\xcd\x1c!\xfb\x1c \x19_\xa6\xbf\xb3\x16\x9f\xe75\xf4\xef\x0e\x1a\x9f\xad\x83\x86\xc15C\xaf\xa8\x890\x91c\x97\x89\x02~\x93\x87\xde<\xc9\x96\xbe\xa2_\xee\x92\xc1\x03\x9a\xab\xfd1\x84K\xd7\xda\xde\x1eD\x18\xd9\xfb4\x8c\xfd\xec\x8a\xbd\xc1\xecB\xd6\xa9\x9f\x93\xddm\xf1F\xef\xa9\xc1@_\xef\xd2\xa0\xf4\xe4\xe0\x01\x12\xe7\xa12\xdd\x90\x84\xeaJ\x1eS\n\xf6\xc1\n\xe3s?\n\x03\x8b\xc9\xe0\xbbm\x86E\xd4\xfc\xa2\xd4\xd4\\E$\x9a\xdbU\xcaK:\xda|\xba\xa9\x08\xd2\xaf\x90\x07\x04a\xce\xd9\xdc\xc2\x0b\xf3g\xfc\xaf\xe6a\xf8\xcch{\xb7\xca\xbd\xdfL\xef\x0duR~\xe1\xe8\x9e+\xde\xd5u3\x92\xa7I\x9c\x13I\xea\x01R\xa6\\\xcd\xebJ\xde\xc3\xdbnEN\xd2\xb9\xcb\xc6\xf6}\x05\xd6\xd3\"\xb7P\x8b\xdc\x8c\x84R\x15\xf0\xacP\x06<\x8b\xab\x80g\x94\x88\xccX\xc0\xb3\x0c\xbe\x82\xe2\x11d\xeb\xeb\x0e\xc4\xd3\xac\x19\xf0,\xd3\x07<\xab\x15\xf0&\x92\xadJzwx\x95\x17di;M\xdb\\\xfc\xeb\xbb\x9cN\xc7HW1Z\x96\xd9e:v\xc6r\xbf2j\x96\xad8?\xde\x0d^L<\xad\xdb\xf6\x0f\xdd_\x8a\x8d\x0c\xcd\xd1J\x854\xb6\x80}\xc0\xd4\x18\xcd\x06\xacc`\x81t\x9b/\x95x\x0e)\xd5\xe7\xb1\x1d\xf3\xec\x05-XW\xc0]kl\n\x03\x88V\xd3Sag\xfa\xcc/|\x8b}\xe22\x85\x03\xcbZr\x8c}\xb78YWw\x18\xee\xaa\xffn\xe3\xa6\x81\xa8N\xeb\xdd\x8d\xa4\xd3\xba~(j\x84\xd2?\x14q\x1eT\xae\xcc\x98\xb8\xa1\xbe\xf0\x84\x0f\xb3\xd6\xc9:\x91P\x9b\x9are~\x00Ul*\xc59\xc6\x80\xa2\xfb0\x0d\x11|;s\xc2\x98\xcf.\xc4\x02\x94\xf5\x15\x9a\xe7\x0bH\x94\x13\x15S\x8b\xbc\x96\xa6\x9d\xa2\xdb\x8ei\x1b\xb3a{\x93\x0f?\xc8\x9f\xc9\xa6\xc4C6\xc5\xbc#\x03\xb7#6n\xc7\n{\x11W\xaa\xb4\xcc{\x9dq\x17\xf5\xd4\xb1\x1d\xe5\xd6t.\xed!\xfb\xe3Br\xbb\x9d {w\xc6\xef\xdb\x99\x84\xc5\xddeq>\xf7k\x84\xe2\x9b6\x8a%#\x17\xa8G_M\xb5e\x08Mn\x9d\x82\xa8\xa7\x89G\x9de\xa3\xb4}\xa2\xbcrl\xdah\xac\xd9\xb6\x81\xb1\xbai\xeb\xa5\x97\x914\xf2g\xc4\x8e\xc9\x05\xbc%g\x07\x97\xa9m\xfdb\xc1:`D\xc6k\xcb\x05\xeb\xccr:*9\n\x11\xa5\x04\x1f\xf8\xf3\xf7\xa5+\x95\xca\x8e\xd2\x8e\xedqG\n\x1a\xf2\x92Q'4\x0fSX\x8c\xb7v\x95T]\xf9;\xb2\xac\x14\xfb\xfer\xed\xb6\xa5\x82\x99\x0b\xbe\xf7\xee\xcd\xb3'G\x07'\x87\x07/\x0e\x9e\x1e\x1d<;9}\xfd\xea\xe8\xe0\xd5\xd1\xc9\xd1\xdf\xde\xfc\xfbZ\xaa\x88\xe0\xd5\x16\xf5\xf0\xcd\xebW\x87\x07\xbf\xcf\xaa\xeadR\xaa\x98\xac=\xeb\x91\xb8\x10\xeaH\xf1U\x16\x84a\xaf\x93\xef\x9f\xbc}\xfe\xe4\xeb\x17\x07w{du$\xc4 \x0c\x16{\xef\x89\xc2\xa8\xc5\x17K\xad\x069 \xef)\xef\xfe\xcc\x85\xd0H\x11b\x05\xe3V\x94.\xf8\xcd\xf5\xcdnq%\xd72\x8fQ[\xbd\x97\xf0\xd7;\x0f\xa4\xfb6\xa1\xcb\x82y\xf4\x92\xec\xc0\x9f-l\xbdh\x01\xe9>\xef^\x18\x07\xe4\xd2\xfb)gr?-\xd5Gw4\xb1U1\"\x88G.\xd3$+\xf2)#\x80R?\x9f\xf9\xd1S?'\xdf\x84\x11\xa1\xdb\xe8\xd8\x85s\x8c\x1b#.\xd1}\xe9w\xdbAH\xba~\x07-\\loo\xefR\xb2H\x8c\x03\xd7eg\xb43\xe8k\xc3\xb2\x0b\x1b\x8d\xad\xb1L\xd0\xd4\x11\xbd\xecU\x0c5*Z#\x93\xa6W P\xdfd\xc92\xcc\x91r\x89\xed\xed\x9d\xfb\x8e\x0b\x87H\x91\xd7\xa65^^\xf8Y\x91\xff\x102\x0dIlo?\xd8\x1d4\xc3\xd8~8FM\xef\xc3\x07\x9dU\xda\xde\x19\xd6F\x1fpno?TB\xe7\xf6\x8e\xca\xc0%\xb6\xef\xb7_3b\xef\xfeHZ\xe9\xe6H\xc7[\xf7\x1d\x1b\x05n.X\xf8\xaf\xd5\x83\x87P\xbbt\x82\xd2;\x9b\x08'\xb3\x13\xda\xff\xa6\xf8\xe3=ES\xf5~\x18\x92x4T\xa6'\n!|\x15\xac\xe0Da\xd7\x18W\x85\xe1\xfa\xba\x12{\xac\x11\xdcTxL\x19\x94J\x9cm\xd7s\x10\xa2\xb9\xc4\x1e\xa1MzB\x0f\x9bE\x0f;\x8b\xd3\xc6\x8d\x0cYZ\xd9\xfa\x1d\x992\x99C\xec\xe2O\x89;\xbav\xab\xcah]\xf3D\x08*Q\xd7\xc0W:\xb3Y\x17\x0e\xfe\xac\xabg\xb6E\xe2\"\x0b\x890\x9co\xc3\x8f\xbc~\xf2F\xca\x0b\xac\x8e\xd0\xd8\xfb\xa5j\xaf\xf9*\xaaP\x17\x8b\xb9\xda\xdd\x93 \x89)\xdb\xb2f\xa6\xfdoy.F;\xeas\xf1\xb0\x1d\x95\x91\x1d\x8b\x87m\xc1\xb6\x8f\x9c\xc6#\xe9,\xeflb4\xf3\xd8\x1e=tl+,H\xe6\x17\x98CV\x0f\xbb|q(,\xd5\xb3k\xa1\x82>y\x1b\xa9\x11\x11\xc6\xef\xf6U:\x9e\x98\\\x16\x142Gn;u\x00\xed.\xc4\xb6)+\x0b\xcf\xaba\xaf\xb6\xdc\x12\xc2Q\xdf\x86[\xbb\xeau\xdd\xd5\xe2\x95\xedm\x07\xf6\x95\x9coHr\xe81@N\xecv\xa2\xa1Jk\x10\xbb\xb8y!\xaa\x07\x90\xda\xadT\x079S\x16\x94\xf0\x18\xf2G\x0ed\xde\xdc&\\\x182\xcd\xd7\xd7\x8f](\xa6q[\x08!\xa8\x8c\x9b.\xd8\xfd\x91\x9a|\x18\xa9!q{g[\xb3duw\x1a8\xab)\x0e\x96wFGQ\x94l%\xf4q-#$9\x84\xcaES U\xa3\x14\x1c#\x05iBI\x1cv\xa9\xc2\xda\x9e\xde\xb5\x117\xed\x11D\xf0\x18f\x8f\xf46\xc0\xb45\x9bne>\x9d\xad\xaf\x1f;\xb4\xcd\xd2\xa9\xcdU:\x1f2\xe1S\x7f\x970[_\xef\xe9\x16\xaf\x87\x19\x841\xe4Ho\xe4\xd3\xd91\x0b+\xea\xd4r\x0f\xac\xf2\xe1\x03j\xa2\xaak\xe5\xcb/a\xa3\x19\xbbhE\x1c'a\xb3]\xd5\xa9{\xe9\x17\x0bo\xe9_v\xc1\x88\x95\x84q\x1f \xe9\x11\xba\xcd\xb0\x0dq\x1c\xf8\n6a\x9f\x9e8X\xa7C\xdc\xa4\x97 C)7F\"\xea\xf9P\xac\xbds'\xc0\xaf\x83\xfc\x10\x83\xb8SHbD\x9eM k\x0d|\xb3#\xa2\xf3k\x8dPp\xc8\x0e\x88B+\xc1\xc6\x94\xe3\xda}\xf8\x009%/\"\x14\x87\xf1X\xb4\x9c\x9a\x9d\x80\x8dr8o\xb6\xf0\xb3\xa7I@\x9e\x14v\x8ek\xbe\xb33~\xb8K\xbf\x0d\xe11\xec\xecn\x8d\x1e\xb2\x86\xd6a\x84\xe0\x87\xb6\x04\xb6\xdf\xf9\x98V`\x0d\xecn\x8d\xb1s\x9f6p\x7fk{\x8b\xf7\xcf\xeacGt'a\xc2\xdf2/\xbd\xdc\xc5N\xc6\xb4\xcc\x87\x0d\xde\xcc:\x1d\xe7\x06\x1f\xd4W_\xc1h\xd3\x81u\xd8\xdd\xd9\xd9\xda\xbd\x1b\x08\xef\xdc\x1f\x1c vu\xd8\x90\x02\x8b\x83\x12e~\xa5\x0d\x8a*\xdc\xbd7\x90\x19\x13\x1f\xb6\xc4\xf0\xc5\"K.\x802\xef\x98%\x1dO\x80\x05a\x0eqR\x00R\x00\xa7\x11Y\xd3X~dv\xc1\xa2\xf0\x11g\xc5sB/\x81\x07\xc88\x8c\xb7\xb7\xf1\xdf\xed\xdd\x87\xec\xdf\xfb[\xec\xdf\x07\xfc\xfd\x83\x9d\x0eg\xb1\xbb\xe9\x08\xaefHg\xbd\x84\xd4\xaejgd\xd2(\x99\xc6\xf6\xe8\xbec[E\xc2N\xd5\x91\x7ff!\xdbi\xfdlQVn\x9d\x82\xfc\xda\x1eX\xd3\x04o{\xf8\xf9\xd8b\x0c\xd7\xfd-\xc7\xe6\x14@\xed\xc9\x00UCV?mU\xb5\x89\xe9j\x90l\xa7\x90i\x1dK\x1ah\x0c\xa94d-\xe4\x85\\\xa3\x1c\xfe\xa6\xc32\xac\xd8\xa3\xcdQ\xbf\x0d\xf5}:I\xb5(\x9f\xae\xe3\x03\x87Y\x1e:.X\xbe\xd2\xfe\x10\x83ik{i\xf7\xd6)l\x99\x088\x9e_\xaf\xc1\xa0\xf9KDK?\x11\xa2\xb8;0)\x0d\xbb4\xc4\xd5\xf8\xa8s\x0c\xd5z0Le#\x9d\xc3*\x02\xb6\xcdTG\x02$\xd8\x86d6\x13U\x89\xf3U\xf5\xa7\xd2\xb0\xe9\x1bE\x1e\xe5\xf5|\xf56\xd7>\xcep\xdb\xf8\xc6z\xea\xc7\xff\xb1\x80Y\x12\x9f\x93\xac\x00\x0e\xe9E\x02i\x16.\xc3\"<'\x8c\xcdZ\x95\x9a\xef;\xf3\xdb\xbbm\xc91\xc3\xc6\xe3\xed-%\xcd:RJ\x15Z\xec\xd3\x03\xc1>\xdd\xff\xef\x99}\xd2\xb0\xa5\xdb\xbb\xea\x95\x1dw\xc48>\xc7\xca\x94 }~p\xf2\xe6\xed\xeb\xa3\xd7\xed\x80\x15e\x9b\xdfo\x16\xb7\xc5\x01\x9d\xf58g\xb9+\x0b\xde\x15E\\\xe1<3D\xc6@+\x0c-5\x84$w\xe1\xa1S\x90\x17\x84y\x1a\xf9W\xf4v\x88\x93\x18\xf3E\xdb\xe3\x9d\x11\x9a\xf5\x938x\xba\x08\xa3\x00Y\xb7\xc2\xcb3\xcacX?\xf9\xe7>\xf3\xe9\x9dXU\x16J\xee\xfb\xf7C\x18\x07\xc9\x85\x17$3\x14\xa18^\x92\x92\xd8F\x18\xb9\xc8\xc2\x82\xd8\xd6W\xec\xd3\xc7\xa2\x8a\xf7\xcd\x1eC\xd1_\xfdx\x8f\x17\xa1j\xd7\x9bEI\x8e\xe9\x0ds<\xc1\xdf<\x82lc\xe3\x91\x03\x01\x89HA \xaf\x01i\x1aN\xb3c\xbdMYn\xb7`H\x8dI\xf9E\xc1,8)\x9dfD\xad\x889\x95tF\\F\x11J\x90)\x15g\x97-x'\x0ecpcrA\xf9\xbef1s\xff\x8aYZ^\x82\xa6g\x98\xd5\xc2qei\xab\x90p%v|+\x9a\x7f\xa46\x1e\xec\x9c\x08\x0e\xf9\xdb\x0f\xf4\x94\x1f\xbd\x98\xff{\x90\x1d\x8cF\x0f\xd4d\xf1\xb8\x8d\xa0\xb9\xf0`w\xd7\xb1\xd7\xda\x02\x075\xca\xb8\xc1\xfd\xce\x97\xa8\xe4\x84t\x17\x17\xe0\"u_Sfiz\xacX\xf3\x98\xf2\xd5\xa5\xc3\xa4\x04>\x8a\xf31%<^\x9b\x91\x88,\xa4\xf8\xf0\x11\x14BX\xcb\xf7\x03\xbf\xa3\xa8\x01w\x83\xb9\xa8\xfc\xa7\xd0\x8e\xb0\xb5\x0f\x1f\xea\xd6\xd4[\x14\xddt\x8b\x1e>\xd4\xac$\x83N\xdb\xfa\xd9r\xd0\xd5\x82\xd2\x81\xcf\xf3\x83\xb8\\2\xbe\xc1\x96`\x18L\xe6\xd1\x82\xd2=\xac\x93\x83\xd0s\x8d\xe6;y\x1a\x85\x85ma\x8e}\xde!\xb9\xf9 \xed@\x95\xd0ti.\xa7m\xdd\xdc{'\xd3\xe0\xd6\xff]T\xf5\xdf\x92\xa8J\x83\xb2\xb6w\xdb\xef\xc3\x01\x94\x8c__\x94\xd5\xc5e\xbcN\xcfH\xf1FT|=o^\xab\x1aX$\x02\x9d\x01fp\x0e\xf1dMQ\x1b\xad\xa2\xf0)\xa9\x90\xc4y\x91\x95\xb3\"\xc9\xd0\xe4 \xc28/\xfcx\xd6-\xddo\xfe-\xdd\xbe\x93\xe6g\x1c\x0f\xec\x83\xdf6\x00_q\xfdw\xb6nz&9\xfe\xc8V\x17XT\xf7'g\x1f(;P\xb1\x0c\x0f( \xcd\x98\xca-\xc7\x15\xde\xf0[\xfc\x82E\xc6\x80'\x8f\xb5G\x9bc\xc7\xe5>\xb5\x94Z\xc0\x83\x1b\xb5\xb8\x05\xf6\xaa!kp\xd1s6\x17\xba\xb3\xa0\x13m\xe1\xe9\xe1\xe1\xdb2\"/\xc2\\\x11\xec\xe0\xe9\xe1\xe1!%M\x9f\x91Y\xe4\xb3x\xd3\xdd\x80 O\x0f\x0f\xd1\x14\x817\xd1.\x8dB\x12\x17o\xc9\xacP\x97?{\xfd\xd2X\xc8\xe6\xa2->J\xde\x93X=\xf8g~\xe1\x1fe~\x9c\xcfI\xf6\xbc Ku\x1b\xdf\x84\x91f\xe4\xdf\x1e\xbd|\xf1$\x8a\x9e&Q\xc4\"P\xa9\xab\xf4\x95\x7f\x93dK\xee\x85\xa4\xae\xc0\x9c%\xb4U^\x92 \xf4\xd53|\x19. e\x89qs\xbb_\xbe\xf2\x97$x\x95\x04\xe4\xa5\x9f*J\x93@\xb3\xebo\xfc0\x16\xe1O\xd4K\xf3&*\xcfB\xc5|\xd9{\xcdp\x0e\xbf\xff\xd3\x0b\xbc\x8a\xd4m\x1e~\xff\xa7W\xe5\xf2\x94d\xda\xe27\x98%X\x03\x0b\xb4< c\xcd\x80\x0f\xbf\xff\x93 \x90\x0e\xbf\xff\x13\x83\x94$\xd3\x80\xc9!f\\\xfb\xba\x9c\xcf\xb5\x03\xa4\x07\xe5pAH\xa1^\xd5#rY\x1ce\xfe\xec\xfdS\xddQ\xa9jh\x8a\x93rV\xad]Ur\xed\xa2+zb\x07\x945a\x94\xf89|\x05\x0b\xc1s\xc2\xf9\xfa\xba\x8aZ]\xba\x18\xc9~1=W\x18\xbcQ&4\x98\x9e)JN\x91\xacW\x95\x9c\xc0\x1e\x9cR\xa4\x7f\xaa\xba\x90\x80_\xc5'H~\x9e\xd0\xfb\xf7\xc3\x07(\xed\x13\x17f.\xa4\x8e\x0b'\xd3y\xfdn\xee\xc2\x19E~\xd33\xca\x80\xa5.\xa8\xe2\xd2 r]\xd2[=s\xe0d\xba\xc4\xcfC\xfa\xf9\xd2\x85l\xba<\xae\xc5\x9b0\x14a\xf7\n\x804J\xcb\xed\xfbj\xbe\x03\x11w\xe3\xbd_Q\x94:&n\xbc\xbd\xfb\xefv%\xff8v%z\x82\xef\xbec[e\x9c\xcf\x92\x14\xbdU\xda$\\\"\xfc\xf5T\x07\xa6\x123@2\xcd\x8e\x99R`\xe7\x01\x1a\xaff.\xfc\xa2\x97\xf6u\x98\xfaiv<%\xf4\x18\xc9\xf6\xf0\xca\x99\xe8$\xfeF\xd8\xfb\x0c\xed\\\x84\xb1\xa9/(\xa9\xf1v[\xc2\x92W\xc4V\xe35\xa7\xb0\xc6\xaa\xb8%*\x8d\xcf\x9c5\xdf\x16\xd4\xb0p%\xf7\xb7[\xaf\x03\xdez\x1b\x85,8\ni\xd7?\xe7\xef\xdb\xf6\x10K\xd6\xebN\x1b\xb5\x9c\xf1\xf7[\x8e\x97\x93\xd6\xba_\xb1\xb6\x1elvb\xe1\x9dr`m\x8f\xea\x84\xb7\xd6\x1e\xd5\x05\x7f\xdf\x1e\xd5\x01R\x9a\x95\x8c\xbeYx\x89\x85i\x96\xccH\xde\xf2D?\xc4\"\xae\x98k\x16=\x85=\xb0\xf8Gx\xceg\xf6e\xab\xd7\xf7f\x89\xee\x13\xb4\xb0\xdd\x83So\xde,xM\x0f\xc4\x9aY\xda[dW\x1a\x9eW\xe0\xc8C/#y\x12\x9d\x13\xbb\xbdz\xf2\x83\x1e\x1aM\xf6g\x8f\x1ea\xa1\x1e\xccS2C\xfcr<(\x1b\x96x\x88\xfd\xde\x85\xf7z\xd6\xf7\xba\xcb\xd2\x83d\xc7\xf0\x14\xfdQU|\x1c\xdf\x8b\xb7\xe4'F\xd9\x1e\x9c\x93\xb8p\x98\x0fK\xb1 \xb1\xfd\xde\x919\xb4\xa2\xd3\xcd5\xcc\xfcb\xb6\x00\x9cCK\xf9\xd6\x06\xbf7\xbdsF\x15\xb5V\xa8\xbcf\xaf\xa5\xf4\xbb\xe6d*m\xb5\xcd\xe21\xd0a;8\x85\xe6h[\xe0r\xd4\x87\xed@\xe8\xb9\x88w\xa2\x95\x88\xd02\xc4\xb7\xea\x0d8\xe7\xb6\xcb\xc4;\x99\xa9k\\\xe95\xaa\xf2\xd3\xe0.\x89wr\xcex\xcb\x11`\x8c\x9a\x93\x9c\xb1\x97\x9b\x8c\xb5\xac\x05K}p\xc5\x85\x995\x02M`\x1f\n/y\x0f\x13(\xbc\xb9\x1f\xf6\x84@\x87*A\x14?\x1c\xfd\xd5#^\x9d\x02\\\x7fm\x9649H\x96~\x18\xab\x17P<\xfa\x13,?%\xa5?\x124\x1b\x19\xf3\xb5[PP\xf9 \x89)\xfck\x0fF\x8e+\xe2\xff\x94H\x81\xec\xa1I\xb5\x8d\x81*f\x1e\x89\x0b\x92\xd9\\\xa7P\xda\x19\xf2\xe8\x98\xa1\xd8#\x97aas\x06\x7fm\xd3au\xf6\xd0\x1b\x81\xdbX\xefCd\x1f\xd8\x16?w\x1b\xb3\x85\x1f\xc60\xbb\x9aE\xc4B\n\x08Ma\xde\xd8\x14\x82\xf7!d\xda\xd2\x18\xfdK\"Z\x9cc\xc9\x04\"[\x91\x1dP~\x1a\xe7\xb2wYp\xfck>\x9f\x1f\x9fDd\xf7\x84\xdf\xbc6\xe0#\x88k\xd9t\xf8\xc8\x01\xdf\x8e\xa7\xe1\xfaz[9 ?\xf4\x90\xa0\x90\xdc\xad\x8e\xd5\xc8\x05\xd42\xaf\x89}z\xa9\x1b\x93\"z\xe6\xb5\xe9\xf8\xbf\xec\xc5Egl\xf1s\x03\xfd,\x1eD[(\xc4\xe5f\xfbxB\xb5\x13\xa5[\xfc\xbc\xa3\x80\xa9J\xe7\x14\x08(|\xc0C\xe0\xf0\xa3c\xea\xed\xa7\xde\xdeV\x85_54\xca\x80U-\xfa\xb7l7,\x01S\x05\x87\xa9\xaa\x02\xdf.v\x0b\x9b\x92u\x0e\x00'\x01J\xf4L\x0d>\xfa\xc6\x9dz\xd5\xbbv\xc2T\x8er\xaa\xddu)\xbc\x93\x00\xaf\x10\xfcA1\xbd\xcb\xd6\xa0\xf0N.hA\xe1x'\x94\xa2\xa7d\x85wB/\xc81\xfe\xf2\xc5W\xccG\xfdd\xc6\xed\x0d\xe9Eqd\x17(\xc40\x8e\xfc\xed\xb0\x91\xbb\x15o\xaeV\xf5\xac\xc5\xdeI\xa0\x03\x86\xb8\x9e\x14*\xcd\xf9\x9c4\xd7\xaf\xf9\xda\xa5\x9d\xb1\x1b\xb0:X\xf5\xe5\x073\xb4\xec9\xa5\xa7\x19\x89\x87\x00\xc2\"'\xd1\\\x97?\x8f>\xb8\xceo\xd0\xbcj\x7f(\xf1\x04\x12\xaf\xde\x7f\x17\x9e\\L\xc0\x90l\xb1\xaa\x16h\xd3\xb2\x8aGC\x95\x8bg\x18\xc5\"\x0c(\xe9}\xfc\x16/\x98\x11\xde\xcd\xaf\xf8\xef\xbb$\x03^\xb1\xbe\xb2\xde\xc0\xdb\x86\x9b\xdf\xa1wL\x05\xfe1\x03\xff\x11\x85\xef\xd8\x855\xddx\x87\x8d\x93\x8f\xcf<\x91\x01\xfb\xd7\xb3w\xd7\xda\xf9w\xe7\xdd\"2\xea\x1d\x7f\x8dg\xfd\xd0x`\x17<\x82\xe7\xa1\x0b\xe2PX.X'\x0b\xcbq1\xd4\xa9\x0bY\x9d\xc5\xbau*\xd4\xe0Cl\x04\x13\xd6n\x05)\xe2\xcf\x16r1.\xfa\xabf\xfe\xec\xe6\x97\xd5_\xd7.\xbb\xc4\xf5\x93d\xd2>A\xd9\xb1\xbf\xe4\x9b\x97\xbd\xc9e f h?\xfc\xeb\xbcSy!Wf\x84b= \xa7i\xdeco?\x189\xf6\xa1l[\xdb\x1e\x1f\x89\x07\x84\xfa\x17\xac\xdc\x13{)v\xcd\x9cS\xfc=\xec)\xd9T\xa6\x7f\xc6\xb3A\x19\xacf\xad\x9a3G\xba\x97br\xce\xfd \x19C\xefb\xfe\xe7\xa4\xb5&\xb3*\x07U\xb5\xc6\"Y\xcc\x89\xdf.\xcbi\xd9\x11\x9f\xc7\x1a\x05\x93Xp(\xcd}n\x9e#\x04\x97\xbe(v\x92\xc5\"\x13!\x88q\xeaa\x88kG{\xe5\xd41\xb9\x80\xecQ\x17\xba\x04U\xc8n\\\xfa\x86\xdf(\xa8'}\x8b \xd5GNU\x84Z\xe6=v2\xb0D\x86\xe6SoNwy\x88\xb2\x98\xe0\xcdv\x88\xdb\x89?}JA\x93\x0b\x16\xf4m\x82\n\xf5\xc6$\xe7\xf6\xdc\xfb\x13\xac\xc3\xdc\xfb\x01\xff\xff\x0d\xfc\x11\xd6^\xb7\x01\xf2\x8d \x8a\x0e\x1b\x1f3\x13S[\xc6\x15\xdc\xfe}\xec\xd8\xf2+\xa6v\x90L\xe0Y\xc7\x87\x8d.%|\xd3\x9e\x1b]\x9e\xbeM\x16\x04\xd2\x13\x15f\x02I\xf4\xb4\xe9V\xdc\xbe\xc3\x14\x16j@\xeb\xacS=\\\xbb\xa4+\xbc\xf6\xda1\x8e\x1a\xf7\xbbo\xd8|T\x17v)\x0eG\xb5o\x870\x81>\\\xd7\x19\xda\x9a\xfd\x9a\xc9\xeb\xb7\x1fl\x99\xa2\x85\x1ez\xcc\xea\xd9\xc3\x13d\xbf\x97\xc1\xc24-?\x8a\xfa\xa6$\x93\xaa\xea[\x8fa-\x9d\xf1\x10\x8b\x86`\x14\xdf$\xbc\x8a^d\x13\x0e\xe7T\x05\x1e\x9d\x1a\"4\x03o\xd2\x90$\x1f\xb8~m\xa4\xa7\xb1\xce).\xa7\xd7\xc8p9\xeb9\x0f\xb6\x14\xae\xaf\xf7S\x80\xe8!a\xe8\x1f\x90\x98F\xcc\xcbP =\x9b\xeb\xebn--\xa3\x10\x81(r\xf8\x08\x01;\xa6\xa4E.\x88\xf4iy\xcc0\xdf\xc6\x062\x18\x99\x1d\xf7Q\x85Z\xa6\x198\x98KM)\xeb]\xeb\x8f|\xe8\xa1-Ub\x87\xde\xf9\xd0\x8b%\xf3g\xbdg\xf7\xae\x00]\x0f\xc5\xc9\nP\xbc:luw\xbd>v`\x90\xe6i\x93\x08jw a;\x90\xd9\x89i\x07$\x14\x84?o\xa4\"dB\xaf\xf6\xd4\x91\xc7\xb4\x1b\xb6]\x05\x8a\xed\xb9\xaasmo\x0f\x98\x84\x07\xc2\xb8f\x0dk\xa7\x8f\x18\xd6\xc1\x9a@\x18\xcf\x92,\xa3\xb7u\x18\x9f'34K\xd2\xb9\x9a\xdd\xdc\xbe\xb8\xa3\x02\x14z~\xb5;\xf7\xf6}\x95\x9f\xbc\xc2\x86\xbb\xe4f\x01m\xcdc\xce\x9bi\xdb\x02F,\xb0W\xe3\xdd\xac\xe5C\xc2u\x1c\xa6\xdd\x98\xbb\x90\xaa\x08\xa8\xc0\x85\x85\x0b\xe7\xae\xb0\x07Ia\xbf_2\xd4Y\\\xf1\\\xa30Ze\xff|\xc5|Fq E-p\xeb\xd4;E\x13\x96\x0e\xdc(I\xe6\xb3\x9b\xfa!\xa20\xd5>sT\xf3C\x9dJ\x802|a\x9d\xe0<\x82\x00\x1e\xc3\xe9#8\xd5Y\x9a\xa2\x95\xe9\x92\x07\x8c\xbd\xb2}\x9b2#dzz\xecL7\x8f]XLG\x18+\xf0\xca\xc6wN\xed\xa7\xba\xc4\x9f\xb3\xca\x0cu\xd9<\x8ej\x13X\xa6\xf7\xc1da\xdcq\xea\x11\xaca\x97\xe7^L.\x0b\xdbq\xbc \x89\x89\xc6\x1a\xb7\x1alb\x9f\xbbp\xe5\xc2\x82\x07\x82\x82b\xd8\xd0\xae\x1d\xef\xeb\xb7\x07O\xfeL\xc9ezq\xbd=8z\xf7\xf6\x15\xec\xc1l\xb5C\xb6\xd3o%-\xe07\xe90\x90JFW\xe0:\xd8\x87\xc2\xa6\xf7\x14.\x7f\xcc\x97\xbfh_\\\x15\xafk\x8c,I<\xd6\xacB\xe6\x87\xe0'\xe1\xaf\x90\xa1\xd8\xb0rhs\xdb\xfa\xc6?4\x7f\x0d^\xab\xae!QR\x1b\x99Hf\xa0M@7Y\x98\x0c3\x1f\xe1+*\xcd\x11\xaf\x11;cv3L\x8c\x87\x86W\xd3\xe4\x98\x0b\xf5n&:\x8d\x1c/a\x98\xc3NuY\xa1f\x0b?\xf3g\x05\xc9\x9e\xf9\x85?Q\xba\x94q\xfb\x9c\xde\x85H\xbd\xc0/\xd0j\x8aNe\xde\x03\xdfJ$\\\xf5\xa1\x9a\x85'\xde\xdc.\xd0TOA\xf0a\x82\xb4\x12\xb9\xe0\xaeK\n\xac\x1aX\xa5\x90\xe3M\x88\xa7u\x14nLo\x18\x89\xfc\xa4%U\xed\xde\x7f\x82Y\x9b\xde?\x9ef\xc7m,\x1br\x16\xae\xef\xec'M3y`\x13`,\xd4\xac\xd3q H\x04\xe3\xaaB:\x1d\x1c\xc5\xd3\x12t\xfc\x01\xb8\xf3C#t\\fg\xde\x1bX\x87\xcc{kP1\xcd\xc3\xd8\x8f\xa2\xab\xa1\xd2w\x9f+\x8d\x93*j0\xe5\x88\xc5\x1f\x1a\xd1{\xacSr\xab\x92\xd9\xb4\xd5\xc7\xb1,\xa7\xd4\x1ab\xf3\xcfJ\xcchj;m\xbd\x8a\x89\xcc\xeal\xb4\xfc\xa8\x8c\xcb(\xebF\xa9\x8b\x8f<.\x86`V\x1b\x96^u\xf9\x11\x81\xb7\xebP\"\x02\xf7l\xb7\xc0\xf1\xd0\x00\x88E6\x18\x08\xf1\"\\\x84\xb9\x01\xdcB\xa5}\xad\xd0J\xc7\x1eACwn\x0b0\xa9\x953\x8e\x1d\xa3\xd2\xa4_M=dAc{\xfb\xc1}\xae\xa5\x7f\xc0\xff}\xd8\x8cj\xc7\xc3co?\xe4Q\xed\x1e\x8a\xf7;\xfc_\xfe\xfdC\xfe\xfdC\xf6\xfd\x0e%G\xf0\xdf\x11\xffw\xcc\xff\xdd\xe2\xffn\xf3\x7fw\xf8\xbf\xbb\xfc\xdf\xfb\xfc\xdf\x07\xfc_\xde\xde\x88\xb77\xe2\xed\x8dx{#\xde\xdeh[\x19e\x8f9\xdb\x0eY\x8b^0\x1aw\xc2x\x87U\x90J\xbc\x92\x9f\xf2\x10\x8f]\x94(WJ\x02\x82\xfe\xc1-\xc8CD\x88\xe6\x04k\xcc\xd0}\x84\xf1V\xaa\xa0\x19Ul\x91\x0e\x82\x94\x1b\xed\x83\xd0:o\x9f+\xb4\xdc8\xe9n\n?_$\xed{\x0c\xbeVL\xc0\xa2\xc2\xed\xc1z\x9d\xc8\xcf\xc78; \xc5'\xa3\xd1h{4\x1a9\"v>C\x18o\xfd\xf8\x8c\xebH\nYG\xe2\x03\xa6\xb3\x84Y\x12\x10H\xe9dtv\x96\\i]\xc0W,\xba%\xecc4 \x0cy\xca\xa2_\xae\x83m\x17\xb0\xb1\xc7\xca\x1dx\xfc\x18\x10~\n\xf8\x0f0\xda\x1co\xc3:\x8b\x99\xd9\x9b1\x17$\xfc\xcb\xb3\x0c[\xb7\xc3a\xbd`\xa6\x8b\x1b4\xda\xdcR`+\x0dPd\xfe\xc5pP`\xb15\xbc\xcc\xbf\xe0LiX\xcbnM\xe0A\x81\xa7d`\x12\xc3c(\x1f9\xc0-\xb9x\xe4\xd6bZ\xae\xaf\x1f;\x18F\xe2+&kiV\xa8\xc1\xa6<6X\xab\xf9w\xb3\xf4\xea\xeb\x83\xe2\xacM\xc7\xb6\x8a,\\Z&\x85y\x9b\x9bV-\xaa`\x059\x15\xb2u\xbb\x01\xf7\xc2\xca\x8e&\xd6\xdf\xa6:\xbc\xd4\xf6\xc3\xf6{\xba}\xd6\xd4\x82u\xf0YD\xce\xaeXS$\xdb\xfa\xff\xd3Z%\xff\xcf\xfac\x9b/\x8a\xea\xaau\xa5/\xda\xb5f\x03\xb8o\x90\x85\x12\x8aT\xb2\xc0\xc7\x1d\x0e#S\x04k\xb2\xe6O\xc9\xb1\xcd\xbc\xf3~\xfb\xf5\xff\xf8\xb7\xff\xc2\xe2\x9d\xf2\x9fX\xa6l\xe3Zs\x8b\xd3\xb5I\x98;s\x89J\xbe9\x86\xe3\xed0\xca\x807\xfe\x97_\x82\x9dLcZ;GWnA\xfbR\x94_\xca\x07\xb9e\xf9\xd2Z\x809\xec\xc1\xcc\xa3\xb0\xda\xc7\xa0\x81\x04\x8er0eT\x05\x8e\x803\xef6\xe1jE\x96]-w\xc1\xc2\xbc\xeccM\x85HTh\x11\x1ej\xc1\x82Z\x0b+\x8fT\xaem\xfdX\xfc\x18\xffx\xfe\xe3\xfc\xc7\x0c\xfe\xed_\xff\xeb\xff\xf5\xeb\x7f\xfd\xd7\xff\xf3\xb7_\x7f\xfd\xed\xd7\xff\xfc\xdb\xaf\xff\xc3o\xbf\xfe\x8f\xbf\xfd\xfa?\xfd\xf6\xeb\x7f\xf9\xed\xd7\xff\xf9\xb7_\xff\x97\xdf~\xfd_\x7f\xfb\xf5\x7f\xfb\xed\xd7\xff\xfd\xb7_\xff\x9f\xdf\xfe\xf3\xff\xfd\xff\xfe\xfa\xeb\x8f\xe5xs\xfc\x00\xff\xff\xf0\xc7rN\xe6sk\xc8\x19\xbb!M9\xde\xde\xc1(n-vF\x8f\x91g\xe2\x8a~\xd2{I\x0b\xd5q\xafm\xf3 $r\xc3 \xea\x02\x8a\x8d:\xe1%(n\xb1,\x8f\xc4\x01\xe6_Q1x\x14\xc8\xe9\xa7[\x8em\x89z\x96\x81\xa6\x11u\xfaVJ\\_\xa1X*\x17\xe4\xf6\x95\xe76V\xdcg\xf0\x18F\xb0/\xa5#\x1e\x1d\xd7\x06\xcc\xcaV2\x96\xf1\xc7\x1c\xd3\xacl\xe9Iy\xee\x1b\x11\xf9\xddN\xd0\xe493 \x18~j\x0d\xbc\x82O\xc7\xcdM\xe1\xd1\x0f\xb3DM \xf7\xdc)a\x03\xeaK\xbbd6\x15\xf9\xef\x02O\xf7\xc7J\xde_\x06\x8d0\x9eEe\xc0\x82]\xe8@C\xd4\xe9\x03\x8d\n\xed\xff\xa7D\x02\x8e\xba\x07\x0fS;\xbd\xc6\x08\x91\xab\x80\xc3\xed\x0ecc\x99\x06\xe3\x8e\x8c\xa4\xc4/&x\x83\xef:+v\xd9\xb7_\xa3\x91\x96\xb6\xb8\xa9\xb4\xb8\x0e\xdcO\x99`\x05x\xa3\xc0E\x91\x89>\xe4\xf1P[\"S\xf48\xe5a\xfaC\xd8\xdb\x83\x11\xdc\x83M\x05Ca=M\xca\xb8\xa8\x1d\xb7br\xe6\x17\xe19is\x12\x0f/\xc9\xdd\x0f\xbd(>\xc9\xd8\x93\xb8\x98%\xd1\xc78\xb2\xb4i:|\xd1\xfc\xc7<\xb6\xb4\xaf<\xfc\x99|\xbcY\xf0\xd6?\xe6$\xc2\xc2\x8f\xc2Y\xbe\xd2\x1c\x86L!\xfc\x14\x80\xb42\xf2\x19\xb4\xfa\x88\xf6\x17\x19\x99\x7f\xe4\xa5\xcf\x97~\x14\xad4\xfc!\xa3\x17\xad~\xf4\xc5\xa7\xef\xdf\xaf\x06\xfc\x83\xc6/\x9a\xfd\xf8\x13(O\xef~\xf4\xe5'\xc1\xfey\x99~\x84\xa1\xa7w4\xf4\xd8\x1e\x8d)\xb9\xbc\xf4\x8b\xd9\xc2rad\xae.\x0dfZ\xd5S\x8a?\xd5k\"\x1e\xc1\x19\x10\x93\x921\x91e\x0f(z\xa8\xd2\x99\xc5\xd3B\x9f\x19C2\xafO`_\xd8\xe11/\xaa \x9a\xc0q)o\xecL\x8bc!\xc8\xcf:qA >\xbe\xe1jrQ\xa3\xe5\xc2\xf8\x06\xeb\x99)<4`\xd0\x92\x86}K\xea7\x964\x93\x974\x1b\xb8\xa4\x12?\x91a\\\xb3\x04W\x95\xbd\xe1k\x19:,N\xd3\xdd\xadhN\xfc\xec\xdf\x01\xf4\xee\x963\x8d\xc2B \x9e\x1d\x03K\xfd: \x0dGl\x8fw\xda\xbe& D!\xdd\xd7L\xef\x86J\xb4\xae\x90\xc4\x9a\xa1\xf1\x8a\xe5\x9f\x9e\xce,\x9ew\xe2\x9e}\xea\xfc\xf1\x9eC\x99\xe3\x0f\x1f`\x1bu\x1e\x05\xc9\x8b\xba|\x7f\xe2\xdcsac$\xc2:\xd1zc\xac\xe7\x9f\xca\xb5|lH\xaa\xc4\x1a\xf3\xea:\xde\xbeC\xffkT\x92\xcb\x1d[*\xa3\xdc;-\xaf\x8a\xbd\xfd\xaaP\x05r\xe7\xdc\xf7Y\x12\xa8\xde\xb3\x9d\xfd\xfd{\x1e\xb9$3\xdb\xb2\xe8\x1c\x15P3DO\x02\x92\xad\x9a\xd0]\xaa\xe3\x06@\xd3'gOx!\xf14<\x95%\\;\x95\x8a\xfc\xedZ\"\xa7_\xab\x83\xe8\xe1\xe8\xd4\x9f\x9d3K\xff\xdc\x85\x08\xc3T\xcfY8}\x93\x93z\xc0B}\x86gq\x92\x91\xa7>\xc6\xf6\xb3B\x0b&\xf4\xda\x83uZ\xb6,\xa3\"\x8c\xc2\x18\x8b\x96\x8d\xa22\x0eQ\x11\xbf\x0fV\xd9(\xc8\x8bp\xf6\xfe\x8a\xbe\xbf\xe2\xef\xf5CX\x98}\xe4\xcf\x9b\xbbY\xc0>l\x8f\x1fn?\xdc\xbd?~\xb8\x83\xe6\xfe\x8f\x1f?65\x80\xd1g\xeb\x03O\xbc\x1c\x83\xa3\xbb\x10\xc0:Xg:\xfb\x01\x94\xfea\xd0\x06t\x8e\x90Z`J\xce%o\x876\xf2\x85\xbd\xbf\xf6\xe3\x8f\xb9c\xb9\x10\xa84\xd4\xd5\x83\xfe\xeeK\x06\x8b<\xbe\xe7\x9amG\x18y\x0cE\xcd\xb0\x0e\xf9t\xf3\xb8\x82\xf0\xc7\x80\xf1\xd5\xec\x94\x07?\xe12\xa5\x85+>p\x1c\x17\xd6\xd0\xb6\xbf!\xf1\xc2\xa4!\x9b\xc7\x95F.s\xcd\xe4O\xe3\xc1\xa9\xcf1.\x01\xcc\xe1\xab\xae\xe4{\x03\xc6\x8f`\xbe\xbe\xee\xc8;S\x8b\xd8\xe6h\xe8k\xe3\x8f=\xa5D\xbc\xf1\\;nw\xf0|9\xbe\xaaC0\xa2]\x00s\x14J\xe9\x07l%F\x0e\xcf.!-\x1b\x8b1\x1f\xb9\x90V\xad\xee\xc1\xb9\xe3|\x00\xbec,\xa3O{\xfb\xe8\xa0\xeb\xc1\xc19\xecC\xca\xcb6]8\xc7O:#hY.3\x8f\x06kS\xa0F!\xd3\xdct\xa4\x15\xb3\x07a\xb6\xe6\xa5\xd9FW\xb0\x0f\xd3c\x98\x08\x1cT g\xdb\xdc\xa0Z\xcc-\xd1\x08\x1a\xa2\xeb\x06d\xd5\x8d\x08\x01\x89\xac\x8ak\xb2*\xeb\x90U\xb1\x8a\xac\xcaV\xa5\x03\xcc\xf2\xfa\xd4\x8e\xed\xedQ[\xec\x9c\x88\x92q\xbb$\x14%;\xed\x12\x9f\x97\x8c\xee?h\x17\x95\xbchgk\xb3]\x94\xf3\xa2\xadNO\x11/\xb9?\xden\x17\xcdz\x03\xf7U)\x98\x88wrB\xf2\x97IPFD\x97C\x14$\x99\xff/\nW\x10\x8c\xbb\xc7r\xe2\xe9B\x99\xd5\xf9\xdex\x0c\x86v\x8a!o\xe1\xe7\xaf/b\x91\xbe\xb5\nC\x17s\x95\x0d3\xb6 \xdd\x84oP\x83\x10&\xa6\xf3\xcb\xa8\xe0\xa1\x99\x9a\xa0A7e\xbb\xb3Ts\xae|q\x1e\xfd\xa1z/\x96\x0eR-\x8b\xdaY;\xcc\xf4<\x18Y\xa3.E\x92\xd6Y0\xde\xdd\xd9\xdd\x1c\x05-E\x1b\xbdv\xad-o\xf4\xc0\x1b\xb7J\xe8}j\x9d\xfa\xf1OI\xab\xe0\x8c\x16\x1c\xfa\x85\x0b\xe3\x1dxR\x9e\xc1xs\xf4\x006\xefOv\xc6\x93\xf1.\xfc\xe9\xe5\x91t\x10\x86\xe9\ns\xb1\xf4\xde9\xc9\xf20\x89s\xbc*;/?|\x80_\xae]E\x89\x97_\xf8gg${\x17*\x9d\x97x\xb5 (\x02\xdd\x9e\x85\xc5[r\x1e\xb2\xf2\x85\xb2\xfcY\x98\x15W\x13\x08\xba\x85\xa7e\x18\x05G\xe1\x92\xe4\x85\xbfL'p\xd6\xad\xb2\xf4g\x8b0&\x93v\x0c\x85.\x07Ph\x1d\xaf\x82dy\x12\x06,\xcf\x94\x1ao\x06\xc9\xf2U\x12\x10S\x95<%\xb3\x89\xde\x88*\x8b&J5,/\xccMMG\xfeUR\x16\x13\xb0\xbe\xf6s\xf2\x02\xff\xd0\xb4\x14$\xb3\x83\xcb\xd4\x8f\xd9r[Q\x98\xebj.\xfd\xcbg,\xf5( \x8e\xfc3c\xff\xf30*Hf\xaa\x81\xe6\xa4~\x91d\xefp\x9e\x8b\xa2H\xf3\xc9\xbd{IL)^\x01=^\x98\xdc\xab*j\x86\xc5|\x97r\xfdB\xce\xca\xbcH\x96\xfar\x9eO\xf5uJX\xea\xaa\xe7A7\xa9N\xab.\xcfz\xf4\xac\xd4%\xbb\xaa\xea\x13\x92\xbe\x08\xe3\xf7a|\xa6\xaf\x94\xb1\xd6\x9e\xc7\x05\xc9f$-\x92\xacOc[\x7f\xc9\xb0\x97\xb2\x82f\xba\x19\xc9\xd3$\xce\xc9'\xea._$\x17\xe8\xd3M\x02\xbejj\x073\xa8q\xeb\xcb$ \xd1[\x12\x07$\xc3u\xb3\xc8\xa5\xbfL#\xa2\x83`\xe9+\x04\xe5\xe0\x19I\x8b\xc5\x04\xb4{R\xd7\xcf\x87|@\xa7ppY\x10<#\xb9~\x1fi\xbd\xa7\xc9r\x99\xc4\x83j\x97)\xc5\xc3$8,O\x97a\xc1\xa2M\xe4\x13\x98Zg\x04\xd5.i\xc9\xfeIr\xfc\x97e\xd1\xa5\xbf\x92\x94nU\x8e\xfa\x01\xe2\x07X\x89\xcb8\xad\"\xf3g\xc4\xd20\x9eiFrR\xd0>\"\x81\xb0u51C\x17\xad\xa9\xa9\x10\xc6a\x11\xfa\xd1!\xddX\xfd\xd1\x9a\xc7\x86c\x99,\xd3$\xa6|\xcb\xa4\xed<\x05jp\xa2\xfc?%\xd3\xe7^\xeag99D\xb9Y'M p\x82\x89x\x1c\x057\xf1:OF\xac)\xa5X?\xe5\xdd\xf8b\x8d\x1c\x9b\xdeq\x05\xd2\xde\xb1\xa2\xb7+\xed5\x91_\xe5\x05Y\xaa\xc8\x08\xf1T\xd8+\xf5\xf8\xcfU\x0eW\xb5M\xa9\xc7\xf7V\x03kl\x9b\xda\xb3\xd2\x8eJ\\\x1ff~U\xd4J=\xf6K\xdd\xb7x\xc4\x95\x90z\xec\x97\xb6\xb2f\xaeP\xdf\x98\xc6~X\x1d\xdd\xc5)\x1e\xbc]S\xaf\xcc\"\xfd84;\x01\xa9'C\x7f\x97@V\xc4&\xe8\xfb\xa4\xa2\xa7O)=\xdd\xaa\xdd\xfa\xbbEZ\xdb\xa7HRK\xfdS\x15\x9a\x078`\xb2\xdc#\xa5\xc0\x86\xb0\x073\xc7\x85\x13/'\x05\x1bCn\x97\x8e\x0b\x17\x02;=\xc1\x99\xe7^\x94\xf8\x01 0\x8fI\x9d=\x9d6\xb5\x16\xd3CE\x7fZ \xf2\x84\x16KQ\xb0\xe9BX\x8f\xb2\xc4y3^p\xd3\x85\xa4S\"%|ck$:.\xd3\xc0/\xc8\xbb,\xb2-\x0b\x07\xd6-|\x91\xf8A\x18\x9fQ\xe8/s\xdb\xca\xcb\x19\x06~\xd1\xd4>L\xc9\xcc\xa6\x83\xc8:\x83\xc0d)\xcdo\x82\xe4\"\xa6s\x07\x0c\xea\xc1g\xaa\x1d\"\xd6\xe8\xf4+\xda\xe0\xc5\xe8\x81#6\xc0\x81\x0b/C\xd2\xa7\xde\x14\x17\xac'i\xaa\x93\x97V\x91J\xb0\xfeI\xa8\x0d\xcd\x0f\x1c0s9\xb2\xc6\xdfK\x92] \xf8\xab\x9b\xd0\x8bR\xab\xe1\xe5bXj4\xc9\xa3\x89P\xe0\xc0T8\xbceL\x06\xd0x\x89`\xf7\xe1\x03\xf04\x1e\"k\xc7\xe1\xfb0MI\x00YM\x07\xc6 \xfc\x0bk\xe5_ \xc9\xf07\xfd\xf8_\xe0\xc2\xcf\x11\xed\x87\xf3\x90\x04\xbau\xe2x\xe8\xa2\x8b\x18\xba\xe7\xeb\x92bB\x0e\xf2L\xa6\xc8~\xbf\xcb\"\xa5\xac\x0d\xe5\x98\x8dM\xee\xbc\xa0G\x9b\x9d\xa8\xaf\xaf\xdeq\xb0Y3\xd6\xf8\xf0\xc1\xd8\x82\xe2\xfa\xc6K\xed\xb2;\x1d\nlo\xc92)\x08\xfb^M\x81\xab\xd8\x90\xd4\xeb\xbeU}\xa9`)\xe8\xa7\x9d\xd7M\x1c\xec\xc2\x01fb\xb0\x8d\xf3\xbc\xa4\xd5\\\xb8\xa0\x87\xf1@r\x03\xba\x96\x91,\xe9\xa5E\x1c2\xe1\xd8\xde\x19=\xe88\xf0\x8ev\x1c\x8f\x8b\xfd\xde\x93\xab|HC\xf5\xcau\xac\xa0\x99\xb6\xf5\xe1\xae4\xe1\xd8\x1e\xef\xdcwx\xbaM\x03\x95\xd1631\xbb\xed4\xb3s\x03\xacnX\"/C\xb3\xa3J8\x18\xdb;\x9d\xc0\xb0\xb5pq\xd2\x9fb\xb3\xb3\x03\xdc\x83\x1b\x1d\xbe[\xfbp\x7f\xdb\xf1\xe6rL\x94!-\x0e\x9cD{\x9bn7\x89\x9d1\xf3\x07\x1f\xdd\xe7~\xe4c\xeeW>\xbe\xaf\x04\xaf\xc3\xab\xe5i\x12\x0di\xbb\xd7J_\x9d\x8e\xb7\x13\n\x83G\xe9m\xe7\xb2\xe4\x913\xda[\xca\x83\xf4\xee\xb4\x83\xf1\xf2\x19\x8c\xb7\x1d\xef\xcf\x07\x7fk\x96\xb1\xd4\xa1;\xed\xf1\x88\xcc\xa1\xed\x011\x81\xf6\xc3vX\xa1\x94{\x87\xb4\x8d\x13x\xea\xd0\xb6O\xc2\xa2\x82\x94\xe6\xfbs\xfe^\x9d9tg\xdc\xae/2\x87\xb6'\xcc\xb2\x86n\xb5G\xc3R\x86\x8e\xdb\xb5Y\xc6\xd0N\xdc\x87\x0b\xbe\x9a\xed\xb9\x1e\xb0%h\x8f\xf1\x92Wo\xcf\xf5\x90\x8f\xbd]\xff)\x1bL'X\xca{\xb6\xe5\xed\xd7O\x04Bj\xbe~\x0d{\xf0\xb4\x9d$\xf4\x0d\xec\xc1\xfb\xf6\xcb#\xcc\xfb\xd9z\xf9\x12/\x08\x06\xd7\xcd\x92\xe7\xd5\xd5\xd1|\xff\x13\xec\xc1sJ.<\xafQz\xb3\x06\xbd`\x02\xdb:Y\x84A@\xe2\xb6\xca\xff-+-\x927Y\xb8\x0c\x99\xbfM\xb3\xc63\xd4\x03y)g(\x9f\xe7\x07q\xb9d!\x91\x9b\x15_\xd0\x1b\xd2\xb6r\x1c\xfd\x06c\x05\xb3\xabvs\xef\xe4Z\x9dd\xc6\x7fg\xa5I\xba\xa1\xa9\xf0\x0d\xecu\xb4I\xcd\x1a?\xeb\x02\xc2\xbcl\xd6\xfb\x1aW\xf4/\xac\xb1f\xd1\xf7\xb0\x07k_cf\x88\xaf\xa5\x8c/\xad\xbf\xbdy\x18\x07O\x17a\xd4R4|\x0b<\x82odvr\xe6w\xce}X\xdb\x83K\xfb\x0d\xf2fh\xd7\xab&\xd0\x87\xc5\xd8\x82\xba\xe17\xb2\xad\xb0Y*\xc2\x93,\xdf\xd7V\xbav\xbcn\xd0#P\x8aA\xae\x9dv\xddkG\x0eg\xa3\xb1]\x03 !\xbf\xb6\xbfQ\x9b\xd3d\x92\xac\xe2\x9biq\xec\xc2\x9b\xaa=\x1e\x10\x92 \xb7\xf9\x0d\xfd\xf9\x06\x9b\xe9\x04\xc0\xbf\x86 \xbcin\xd9\x0f\xbd|\xbb\xe0\xd9\xdf1\xaf\xf1K\xfbe\x0d\x08&\x1d%fL\xef\xaa'\x9b\xdd\x7f\x07{\xf032\xc5\x0c\xea\x1bP\xeb\x89\x9b\xbb\xb1\x88\x06\x80R4B:\x0b0\xa8\xa5F\x94\xfd\x97\xa6\x19\xfcm`l\x80\xaa\xe1=\xb1I\x7f\xb3\xff^m\xe0\x15\xcb\xe2\x02{p\xc13\xd6\xd1w\xb4$\xb1\xdf\xa1\x91\xc4>\xc6\xd7\xa9\x10\x10f\\\xa5\xfd\xbdby\x85\xa7\xaf\x8e\xa7\x053s\x11\xbf\xf7x\x0e\"\xdc\xb4Xw\x10\xea&)\x17\xb1\x89\x89\x8bT\x90\x0d\x93\xba\xc3\x0f\x1f\x18\xf4\xbdr\xe1\xc0\x1ea6uJ\xa6\xd4\xfd\xd2\xe1\x7f[\xad\x06\xfd\xb6\x86V\xd3b\xfey\x88q\xc8\x95\xd2\xf5\xad\xd6\xbc\xb3\xe0\x1fK\x9e\xe8\xb3\xa0CKXj+\x16e\x97IP\x98\x1fe\xf2\xc8\x81\xbf\xa1\xfe\x1d\xc3\x05&\x18\x06\xa60j\xdf\x8d)7\xfe4\xf88=k\x18\xaf\xe0\xc6\x13\x96\xaaP\xdb\xf3\x1a\xd6\xae\x01\x08A\x83\xe5\xf7\\K(0\x11f\xc1e\xaf\xd9\x05\xa2\xec\xda\x17\x9f\xff\xf9N\xfc\x16%\x0cz\xe8o\xbay\xe4\x18\x0b\xdbv4\xcd)~1d\x8f\x98\xdd\x05]\xff.\\\x0b)\x11\x89\xa9\x9e\x94\xff\xc8\x11{\x82\x87\xcd\x17\xb3\x8a9\x04\x7f#v+dSz7-\x0c\xe70l\xce\xaa\xae\xf73nmi\xdb/M\x81\x0d1\x08\x14=N2\xa2\xef&\xc4\xb0\x18IZ\x87{\x92\x92\xd0w\xf2b\x9c\xf3\x8cj\xa9\xca\xebw\xb3\xe1\xf5\xbb)\xf9\xe6\xbb\x9d)6\"B*\xaf\x13\xe0Y\xdajl\xc0SZ\xfe\x9d](\xcd\x03\xce\xfe\x9a\xbe:\x16\xf8\xc2\xae\x8f\xbc\xb8'\xbe\xad\x0d\xe9\x10\xa9\xab\xd2\x1d]+\xa5|H\xf2}O\xff\xf7-\xdd\xc3N.@\x18\x14I5\xa7T^\x8bXp\\\xf8\xa1\x99\xeeM\xce8h\x15I\xe5\xe3\xdd'\x04)0C\xdf\xfb?\xc8M?\xc5\xa4t_\xb8\x94E\x81=\xf8\x1bF\x90\xdby\xe8\xe0_\x87\xf8\xff\x7fF\xae|\xbc\xc3\xde\xfd\x89\xf1\xe8\xbb\xec\xaf\xbf\xf2\xfc\xc6k\x94\xdf\xdc\xc6e-\xe9\xfc-\x15\xc3`\xb9\xf4kD0\x0b\xfc\xbaWR\xf5\x83\x1d4$2t\xc4\xbe\xedc\xaa;\x1fS\xdd\xf9,[\xda\xcf\xed\xf5f ;\x91\xe8\x16Y\\V\x1d\xe7\xbfPva\xe1\xe7\xcf\xf9\x01p\xc3\xfci\x12\xcf\xfc\xe20\xcd\x88\x1f \x9b#(0\x17\x9d\x85\\n\xbd\xeb2\xd7\x0c\x97\x07\xe8u\xd1\xde\xd3\x958)W\xec\xcc\x91\x7f\xe6\x96q>KR\xda\\.LC-\xd7\xa2\x17\x01a8\xe2/\xf5!!\xe4\x91\x03\x81\xfd\x97)!\xcd\xb4\xe65\x12\"\x98\x8f*\xf0\xf2\"\xc9\xe8\xe5\x12\xf3V\nR7\x13\xd3f\xce\xed\x82L\xe3V;t\x05\x0f\x1bk\xc7Ox7B]\xbf\xfdG%;{Ao\xb5\xf5=\xb47\xdf\x87\x17\xf4TM\xd8?{\xdd\xe4\xea-\x04\xfc\x9e\\}\xd3\xdf\x15Z\xe0\x7f\x87\x16\xf8\xc6\x9c=>0\x1a\xb8\x83\x9b\xa0\x19<-\x8c\xe1\x85ZCA{z\x81t\xdc\x9e\x9c\xba\xc3H\xc6\x9799$\x05\xaa\xb1\x8d|\xda\xf7\xaa\xf0\xc0\x9d\x96\xc2e\x1a\x91!-5\x93\xcd^w\x8eJk\xa3\x19\xc3\xdb\x8dq\x84A\xd4\x07$+\xedZ%\x17\xb0\x0f\x976\xa6\xa5\xfc\xb3}\xc9h\x1d\xe3f\x07d\x1e\xc6D\xa8\xa8'\xf07CqH\xf2 \xfc\xb9Y\xe1\x8c\x14\x92\x8a\xfb\x19\xc9gY\xc8\xd4\n_\x98*\xbe\xf2\x97\xb4\xb1\x7f6\xd5a\xc7 \x9f\xc0_\x1b\xeb\x88\"\x96\xe6b\xdakx\xc5\x1a\x98|q\x11\xbel\xc7<\x16\x8c\xda4.\xa3\xe8\x18c\x99\xfdd\x0b\xba\xd3\xfa\xe5\x9a\xbf\xe9\xae\xbd\xdf1,m}\xc26\xb7\x851\x1d\x17\xac\xef\x0e_\xbfR\x04\x01\xa9\xb4\x0c+\x10?\x9cd#\xc7\x8c\xa3\x18=R\xc5\xe0\xa1,\x05\xa7\xc9\xea\xeb>ib!\xf1\xf0L\xde\x9c \x1a\x1d\xbb`\x9f\xda\x9d\xa4n\x9c\xc4\xffN\xf6\xbf9\xe3\xd5\xecb\x089.\xfaRJ\x87X\x987\xa44;\x06\xf5\x8eK\xfb-\x1c\x0d\x1a\x00\x0e$t\xect\x1a.\xfc\xc4\xb5*\xcf\xbb\xc2\x87\x06XIB\x84\xe9[$\xc6c{g\xd3\x91\x85\x0b.\xbcm\xd4cI\xb6^\xcf1_\xe8\xcb\x1aq\xb3\xbf\xfdb\xe1\x82E\xff\xb1\xf8=;\xe7j\xa6\x1a\x06\xd66\x07\xa9\x00j\xe9xG\xca)\xa2B\xa9\x93\xd8QBaU\xbd\x94\xe0\x073e\xda\xb7\x98\xc5\xe5\xed\x1a\xce(2HV\xa0\xea\xbb\\\x00O\xf1\x11\xed=\xf4\xe6,/\xcb\xe6#(kH\x8d\x1e9\x90W\x16\xe8\x94`/\xa7\x11\x12\xe5HN2\x10V\x1f`Ia\xb8\xda\x8av\x84\xdb\xc2\x9b\x90\x92]\xdd5\xfd\xe5\xda\x13\xa4D\xb3\x10\x83\x03\xd5\x86\x14\x02\x96/\xc28H.P\xc9\\\xfd\xe2BS\x05F\x84}C\xa1\xcdZ\xa0\xb8]v\x8b\xab\xb5\xa3\x83\xa88\x0c\x8akM\xd9H\xe1\x07l\xf2\x18G\\\xe58\xeb\x95n\xe9\x93\xd5T\x04\x88\xca\xda\xaa7\xf9\xbb\x18\"w\xf4Q4\xd1<\xc06\xcf\xbf\xdc\xd4\x14\x0e\x02\x00\xa6K\xb1-?\xbf\x8ag\xcfWR\xc8\x89OY\xfa\x12\xa4\xa5\x07}\xa7\xd6|\x15\xde\xe9UA^\xb0#0\xe4\\F\xdas\x89\xe9\xa5:%\x19\x96\xb4}:\xf9Ro\xd1\xdb\x13\x83/9p\x0f\xb6aC\xe2\xcd\xaf](\xbc\"\xf9\xfa\xaa <3\x9catm\x9e\xfd\xa4\xb0\xe7\xce1|\xf5\x15\x8c\x1e\xc0\x87N\x11\xac\xc3\x88\x17\x8f\xd5\xc5cV\xbc\xab.\xddr\xe8JL\xf3\xf5u\xbc\xa60\xb2\xf2.| \xe3\x9d\x9d\xf6\xfb\x07\x9d\xd7\xe3\x9d\x1d\xf8\x12Z\x89\xa4\xc6<\xc5\xb5\xb8:\xd5\x93\xd1\x0c\x96\xce\xe5\xf1c\xd8\xeev\xd2\xc2\xb6\xa3A\xbd\x8c6\x8dK\xb6\xad_\xb1\xc7\x8fa\xa6\x87wZ\xb0u\xfd\x12v\xb7\xe8\x0bko\xcfB)\xf7\x98\xb7\"\xf6\xcbf\xed\x8cq\x1f\x1e8\xb0\xaemx\xb4)Z\xa6\x80Q\xb5\xcc\xbb\x1aK]Y\xed\xa1\x0b)L7\xdc\xf4\xb5\x82\x7f\x16B\xc7D\x12>Ze\xcc8\x8f@N\x0f\xfb.\x8c\x8b\x07l\x1f\xf7\xe5?&,\x9f\x0b\xdb\x14\xeb\xc9\xd7O\x9f\x1d|\xf3\xa7o\x9f\x7f\xf7\xe7\x17/_\xbd~\xf3\x97\xb7\x87G\xef\xbe\xff\xe1\xaf\x7f\xfbg\xfft\x16\x90\xf9\xd9\"\xfc\xe9}\xb4\x8c\x93\xf4\xefY^\x94\xe7\x17\x97W?o\x8e\xc6[\xdb;\xbb\xf7\x1f<\\\xbfg\xf1h\xdc\x0c\x8f\xf8\x95t\xbe\x84\xaf \x7f\x04\xeb\xeb\xa5\x03\x19K\xc6\xedOK:\xf0\xa9/\x83r\xe9`,c\x95[[\xa4\xc7\xea\x02\xd8\xba\x84U\x01\xff\x01\xb6)\x1a\x13\x8c6E\x9e\\\x16\xf8\xc1vn\xc2\x84!f:^9mfw\x1df:\x8c_g\x8cB\xf7S9:z\xc1v \xa6\xff\xac\xef\xc1\x96\x83\x00c\x13\xba\x13\x14\xe5P\xec9\xda\xbd?\x1a\xed>\xd8d>\xf6\xd3\x92\x9e-\x06\xe9\x14\\w\xc6\xbc\x84\xa1\x0fV>>\xa6\xac\xb9\x80|;\xc4\x8cZ\x08\xff\x0f$\x98\x0f\xf1\xcd\xb8\xfdfWz\xb1\xbb\x05_B\xd8\xe6\xa9*\x8a\xa6{\x14\xaa_\xc9\xd4\xda\xb0d\x08\xdaD\x08\xda\x1dS\xd0\xb2NTE[JzC^\xcd\xc2\xcb\x88\x1f(T\x81<(\x8a\x02\x0cCW\x10\xea\x0f\xe0\x8f\x90PZ\x80b\x06\x85`\x94.\xfc\x88\xaek\xe9\xa8k\xa0\xbf>\xaeY\xb7\x8c^\xcb\x1b\xf7\xbb\xef\xd1~\x06\xf6\xb1\xe3\x11LT\x01\x0bR^e\x83\x96+\x9a\x0e\x10QR2a\xde\"w\xb8\xc3\xfe\xfa\x1e\xa4\x0c\xc3\x04\xf0%\x9f\xc3\xc6\x8cM\x02\x02x\xfcx\x0f6f\x94rX\xa7'\x18f\x18\xd8\x14\xeb\x8fwv\xe1\x8f\x10\"\xc2d\x1d\xb8 \xda\x9b\xc1\xc6\x1e\xcc_\xf9\xaf\xb8\x8c\xa7\xc0\xb6\x18x\xec\x83\x8dY\x04D1o\x92!\xef\x19j\xe9}\xd1\xd6R5\xcf?\x85\x0dX\x1c\xc3\x87=\x18\x8d\xe9\xc1:o\xddp7b\x8a\xb9\x10\xa4)\x9c\xb6\x0b\x17\xac\xda\xac\xb5#B\xe5\x96S\xb2\xb1\xab4bAj^)\xa3G$\xbcd\xac\x8c+\x81%[\xaa\xb8\x12X\xa2\x8a*A\x0b:_\xe4\xbc\xa0\x13l\x82\x99\x9a\x8e\xef\xb7U\xaf\xcc\xd6\xb4mf9\xc7ff\xad\xb7)o\\\x11\xe6\x82\xd9\x9a\xee\xec\xb6\x03]/\xaaO\x1e\xb6?\xe1\xf6\xa6\xe3v\xdfK1\xb7\xce\xac\x99\xc5\xa9&\xa0\xc3\xd5\xa7\x0f\xe8p:D\x1a&%\x1bm\x82\xca\x89IU_M\x8b(UA\x92t\x9e\xb15J\xe5{\xed\n\xb8\xd6\x88\x0d\xb4y\xdc\xd5\xcb\xab\x82\x7f\xb4\xdc\xc9\x84a\x8d\x8b\x05i\xbb@-p\xcb\xcd^\xc1\xbd\xce\xc5+\xb8\xcd\x9a\xbc\xe3L\xde\xc7\xd0\xf1@\xd6\xd7\xcb\x92\xa4x\x1eS\xd4\xd1S\x11\xe7\xfdF\xccN\xe1\xd4\x0c]M\x99xN\x932\x0e\x0e\xc5\xc45\x95\x8a$\x89N\x93K\x8d\xc34bz4\x00\xa8\\\x18\xe9\x1d\x81\x16\x01\xd5\x1b\xef4\x8c\x03\x1e\xf0\x87\x95\xa1\x82\x99\xdd<{p\xeaVn\xd63\x14r|w\xc8\xf6\x9ayUr\xe1[\xb3\x93\xfe\xb0\x85\xe2\xa9\x18s\xda\xfe\x99\xc7\xf6\xf9hQ\xc6\xef_\x86A\x10\x91\x0b?#\x8e\x1d;\x86\xc0i \x06\xf2\x12\xe1FNN\xde\x1e<{\xf7\xd7\x93g\x07\xdf\x1f\xbd~\xfd\xe2\xf0\xe4\xe0\xafG\x07\xaf\x0e\x9f\xbf~u\xf2\xf4\xf5\xcb7\xaf\x0f\x0fNNP\x87\xc7\xbcGsE$\x1c\x90\xc8\xc6M\x97\xd6D=\xe9!\xaa\xdd\xf9\x84\x12;b\xfa\x9ez\x98\\\xffS\xa5*wTf$6?\xaf\x8eXk\x0cO\xc2\xbdK\xd1\x1a\x05\xdfVN\xb5\xf8\x17?\x1e:\xadRk\xbce}$\x89\x0b\xd3\xee\xba\xbf'W\x13\xb0\xe8f\xd1\x19)\xdc\xa2\xf9\x05gTCC\xcb\xc2\x04a\xa6;\xdf\xe6\x90U\xe8\x81\x8dFLx\xc0hz}l\xd7\xd4\xa9\x07txp\xc4t\xb0\xf2\x0b=\xb0\xc9y\x80\x81\xd8&\xd0\x16\x0f\xe5}\x18t\x879\xa37\x1cJ\x91b\xc09\xfe\x1a\xc5JNC\xdb\xa8\x06KU\x9b\xdf\x94\xf1\xac\xf1-\xb1\x0b4\xa0\xd5y\xf9\xaa\x1aQ\x8c\xc0[\xfai-:\xd7jW\xe5\xa7\x1e@\xc7\xde\xb5\xfd\\;^F\x82rF\xec\x0b4\xa35\x0f\x957\xacA\xa0\xc0t4mTg\xeb\x02\x00^p\xfc\xc5qU\x8c,\x01\xb7\x06m\x1cH\x85\xfe\x03\x9a\xd7r\x1f\x00\x08\xfcF\x9b\xd6O\xf1\x9c\x07\x17U\xc0\xedX\x0b\xb7\xe3\xe6\xfd=>\xeeq\x0d\x07Nd&\xde\xc2\xcf_\xa0\xb7\xb6yD(T\xd0W\x19\n\xd3\xa8\x07T\xa9\xdf\x0b\xcf\x9f\x17${\xc1\x9d\xa7\x91\x83X\xdbt\xe1\xc0\x96J\x1cY3\x1f\x9bB:\x9a\xcf\x84\xdc\x0c?\x1e}\x1e\x12\xd52M\x14\xd9\x9f\xc5c\x82\xdc\xbb=`\xcd\x99dB\x18\xd1\x7f*\x07\xcd\x03\x00TY\x80\xeb\"\xfd4\x85\x95\x18\xb0z\xd3\xc5\xbb\xa1\xad\xf0\x18T\xba\xe3\xd13\x02\xceG\x16\x82K\xe2o\x06u\xfe|9\x81\xb9XZ}\xb5\xb7\xc4\x9f\x15\x93:H\xa2\x1as\nn\x8cqi\x12\xcf \x18\xc6\xe5\x96p\xce\xa7u{p\x92\x07\xa9\x8bX5xdw9\xb0\x01\xc2\x82!c\x87\xce\xf8\xbbo\x0c3\xcaW\x99\x91\x96\xb7Q\x0c\x14\xf6\x14q\xf7\x06\x0f\xab\x894\x07\x0c\xcdxE2b\xc4p\xef {(b`\x0bLmW\x97\x18\x9f\x99,.a\xbea\x8c|JN\x7fz\xe9\xa7\x0e\xbdA\xfa\x97\ndZ\x89\xf1\x18\x99fW\xb9\x87V+\xd6\x0f\xa9X\x93\x9a8\x1bB\xe6\xf7RH<\xc6-F\x82&\xd3\xf8x\x85H\xe0\x82\x10Y\x91\x0c\xe9J\xf8br\x013\xef\xa5\x9f\x9a\x19\x05\xe0\x84\x89\xcc\x15\xf7s\x93k\x99)\xc2\xb0\xfc\x08\x93\x80lZx\x94\x1d\x18\xd0x/\xa3\x0d\x12'u`\xc7\x8e\xc9_N~\xf8\x88\xab D \x97\x0c'\xc6/\xf5\xac(\xa8\xc4\xbe\xed\x07aO\x0d\x95\xc8\x0f\xbbm\xa8,\xe4\x08X\x9b.\x04\xde,Y\x9e\x86\xb18M\xb9\xc3r\xea\x9f\xf6&\xc97\xa3\xdf\xa3\xabt\x88L\xa8W\nC\xa6\x9b\xc7^\x91\xbcKS\x92=\xf5sb\xa3\x11P\x15+\xbeW\xec\x86\xa7\x9e\xcd\xcd\xb1\xf5H\xa2\x1aP\xacH\xe7!?\xe7<\xb6y\xac\xcc\xf8-\x1eTT;\xf28\x92&}\x9c\xc1:\xc5u\xa1\x9aU\xba\xcd\xa5L\xc9\x13A+\x0f\xd8\x80!\xb72\xdfN\xdb\xca\xab\x86o7@N\xef\xdfbx\x02\x915\xc7\xe7\xf3v\x07\x82\x05^\x06d\xc5\xcb\xa0\x03T\xc4`\xd6\xa2z\x1a\x02\x06\x8a^\x1c\x13\xa0\x14\x9dL\xe0\xf2\xa3a\xb5o ?j\xeel\xc0n\xf5\x9ef\xba]\xc3\x98\xd1\x06_\xa8\xf2W\x07\xdd\x86\xc6\xcd\xfd\xe8\xbfpi\xaf*\xac0\x8d\xeb\x0c\x0e\x1b\xf7\x9dc\xef\"\xf3S>\xa4\xdeK:\xe3\xf8U\x03h\x03\x04\xbe\xe2\x0e\xca\xa6q\xcf\xb5\xc6\xbbD\xe3K\x14\x10 A\x91\x9d0\x1f\x17\xb4UL\x8e\x1d\n]m\x9ad\xc8P@Z\xaa\xde\xa3\xd9~\xc4\xbd\x88\x87\xa3!\xaci\xa9:\x14Q\xc4t\x8fB\xbf\xd8~\x90\x90\x90\xcfY\xe6\xc8\x16\x89\x92\x87\xb2\xb4\xad\x10\x13\x12\xe4P$\x954\xaa\x96\xd2\x16\x0b\xbf\xe0\xafs\xf0\xb1\x91\xaa\xcc\x0e \x14\x0b\x02\x17\xec\xe4\x00CD\x8e\x0e\x11\xc9\x0f\xef\xe8\xc0\xcez$\xdd<\xf0\xe67\xbcO)\x88\x08\xbd\xafM$\x82\xb6\xf8n\xf1\xc4*\xd7\x8e Q\n\xa2\xce\x8c,\xb26\xb2\xa8%D\xfd\x01\x0e\x9a'S\xce\xa5\xa3J\xe7%?\xe2TN3 9<4)\x16A\xb87)qL\xc2\xd0J5\xf8^\xc4\x12v\x10K\xb1\xc2\xf0A\x16\xcaO\xb3a\x88\xc5\xef\"\x16\x9f!\x16\xb4x\xf5\x99M\xaa\x82\xd9\xe9\x1d\nH\x14\xd5\xca\x88\xa5\xb2\xbe\x0d\x15\x1c\x0d3Mb\x83\x0d\x1dn#\xcdlr\xc3GP\xae\xaf;h\x0e\xdd\xe0M\xca\x9e\xe5\x10\x8f@\xf1\xc8\xcf\x990\xda\x94\xcb\x8b\x9e\xc7v\xe2\x1cS\x8e{\xe6\x17\xb6\xaf \xad\xdb\xcfM\x10\\hBp\x02\xc0~?\x0c\x17\xf6\xa1\xb7\xc2\x80\xde\xd4<\x0e\x08\xf4\xa6a\x81n\x87\xdeP\xca7\x08\x99\x0d\x90\x94fM\x0b\x17\x15.X]^\xd0\x14\x08\x10\njL\xec\xad^\x0e\xf7v\xe2\xbe\xa6|\xfd\x1fg]\x06#\x16\xc1m\xb3C\xabr\x11\x15\xcf\xf5G\\\xe3o\xe2\x01K{c\x99\xe5\xc4+\x93\xc7z\xeaV\x83\x92\xaa\xb05<\xb6\xf9\xbe~\xf4\xd0\x96,\x8b\xb2[m\xce\x9d\xd2jJz\xaa\xd2\x98T\x14\x99\xb3\xa2\x84EEa\xf5RFz6\xb0\x97\xc1\xe1-\xf4\x1e/\xf9ix\x84u\xc9\x8f\xb0\"?2\xa7\x8a\xe6\xe4\xc3W\x90=\x02\x9f\x92\x1f\xe1\xd4o\x92\x1f\xfe\x00\xf2\xe3\x9c\xa7C=\xb0cAl`*$\x0d\xa9\x11\x1a\x93W\xf2\x87O^i\\\x81\x89(m\xd6c\xe9\xd8\x85\xcd\xa2\xca\x1b\xdb4X\xd7|\x14q\xc5] )\x08\xc6\xe6\xfa\xf0\xa1\xa3\xf1\x13jt\xf5R\xcah\xca\xab\x85[\xed\xc8\x1d\xe2Q\x9f\x18\x99\x84\x1f\x80nl4(<\x0d\xc5\xbc\x9ff\xc4\xa7\x07\xcd\xa9\x10\x17\x90\xc1\xa6 \xd2\xc6\xd7\xce\x8b\x85\x99\xcd\xe8k\x1a\xe4\xeb\xb4\xe8\xb3\xe1\x82\x017\x9b\xfc\x08\xe9\x1f\x05\xfd~\xf8\xd6\xbb\xff\xb7\x1f\x94(\xdeB*!\"\x06\x0cZ\x1e\xe0\x1d\x0e\xabI\x1f\xba5\x138\xf7^\x1d\xfcpr\xf4\xed\xdb\xd7?\xbc:9x\xfb\xb6_\x03#\x1e\xcc\x80\xa0\xcf\x92\xa5zR\xff*J\xfc\x80\xa5\xf8Y\xc8j\x84AM\x98\xb5\x1bX\x03\xe6a\xecG\xd1\xd0-\x12@\xd5[\xd9\xdc\xb5\xc9\x02\xb0p\xb42\xd7[b\xaa\x97~\xca(\xe8\xe4M\x96\xa4C\x90\xd5\x10\xf9\xb7\x11\xcf\xf4\xb6\x04M\xac\xd2\xb2\xe3!\x03H\x9a\xdb.\xc93\x8e^\x87\xaf\xca \x92q\xd8\xb2\x0c!\xee\xec\xa6\x87\x02\x8a\xe5\x0dVL\xc8\x81\xd5VG:P\xea[\xb6c\xfam\xf5\xea\xdaV:\xaa\\hCG\xddZ\xc5\xab2\x02-\xd4\x0d\x9b\xac\xa2\x1b\x0d\x8fT\xde!\x0dA\x860\x03\x95\xb4\"\x83\xea\xcbF\x9a\xcd\xea\x05\n\xd8j\x96\x04)\x9a\xd6\xd5\xd6\xaa2\x80Z\x15T*\x91\xc8r\xe6\x1a$\x91\xf0*\xf9\x1a\x067\xe8H\xe9\xf7\xc1n}\x89&\xb6\x9c\x8c\x9b\xc6\x14\x18x\xf4\xea\xf6`\xa7\xd91\x86\x95\xc1yu\x1b\x99&.\xc4\xc7\xc6\xaf\x9bp\xa7\xd0\x19\xb7\xbe\x91\x13\xfdk\x9a\xd5\xba\xee\xcb\x8c}w[\xdb\xbb\xaa\x8a\xa1Y;\xddC\x18\x9b]B\x98\xa261$\xe5ow\x18V\xa9\xa3\x1aoe\xd5\x8f6\xc2.\xc8\xb2\xd5a\xca\xa2j.%\x9d\x8b\xdfG6\x9c\xf3,K~\xaf\xa8\xb2 `9\x93\xd6\xd2O\xa7\xf9\xb1+$\x9fye\xb1\xde\xd8\x96\xee\x9bir\xac|)O\xb2\xb7\x02\xed\x13\xe3z\xf4Ub\xf3\x13\xb0\xdfW\xdd LU_\xf2}\x88W\x8d\xf4I#2\xa1*J\xc4\x81>Z\xc6\xaa\x9e$*\x9c\xe9xQr\x86\x02]\x850$\x96\x93\xa9\xef1Ij\xcb\xf7\xc3D\xec\x0b'F#\xb1\xa0'\xa3\xa5\xb0\x98*N8\xab8\xe1B\x84\x12\x7f\x04 |\x05\xc5#H('\x9cQ\xf8\x92W@wb\x05\x82GcpN\xa7\x13\x17\xa6\xf4\xba\xaf\x00&SY\xae\x0c\x8d\xe5\x85\x11C\x9a\x19\xc3\x08\xcfE\xd7\x036\xd7\x7f\xe8\xfe\x92\x13\x8d\x9f\xe0\xdb\xdeX];[c\x85\x17\xb0\x9c\x14\xa9.U\x07\xc8S{\xca \x9dE\xdbI\x99\xb4\xa3\xca_\x0f\x19g=\xae\xf1\xa64\xdc\xcc\xce0\xcce\xc6b\x86\xb2|7\xda\xb8\xa1\xedX\x9e\x98+\xc5\x9b\xd7#q\x86\x0c\x85.\xd9\xb6)\x87\x94\x9f\xe7\xe1Y<\xa4\xa9\xfeY\xe9'\xc3z\x99`\"\x98-g\xc59\x98\x93\x0c\xc9\xa7\xf2Z\xbd\xfb\xd9\xed{\xa1\xeb\xd8\xf6\x9ef\xb1\x055\xc1\x1a\xb7\xd4\xb9\x8cv\xb6\xdaYyJ\xcc\x1aP\\$O\xf8\x01\x7f\x93$\x11i\xa5{\xc3Yx\xf3\xa4\xccL\xb5\"\xd8\x83{?\xde[\xbfw\xa6\"\x86gZ\xbfi\xdb\xb2`\x1d\xd0\"\x13MG\xed\xc8\x05\xeb\x8b/\xefYf\x94>W\xca>Q\xd0C\xeb\xf0\xfc\x1c\xf4\xcfY\x12\x17\xe4\xb2`1<\xf9\x9b2\xa6\x7fo\x1a{Hu\xe7Ul\x0b\xc1\x9e\xba\x18_\xd0\x9e\xd8m\x0b\xd33_\x99\x84\x19\x0f\xb1\x81\xac\xaf\x9bg\x1aHaI\x94\xf3\xcdH\xce\xf0\x98\x98\xf1{r\xf5&#\xf3\xf0R\x9a3_\x94\xb8\xb3(\xd9J\x8b\xb2\xe8_\x146\x9c\xee\xb2\xf8XZ\x8d\xad[\xa14\xaci.\xafi\xb7\x98\x02_\xc9\xd66o\xadms\x03\x9a\xc4WD\xa9\xfbs\nq\x19\xaeo\xe8\x15\x0b\xbfx\xcb\xd4\xac\x02\xd8)\x05\xcf\x13\x9e\x02\xcb\xe1\x98xa\xfe\xbd\x1f\x85\xc1ADh\x0d\xda\x0e}\x1f1\xc6 Jb\xf2$\x0e\xde2x\xfe3\xb9\xa2\x1d\xf8\xb0\x0e\xf6ZD\xe7\xcf\xe2\x9e MF\xff\xa2T\x01{\xbf\x0f\x96\x05\x13\x98\xd9\xf8\xa7\x03\xeb`\xdd\xb3\x1c\x0cU\xe8\xb8\"\xf0n\xe4\x98\xc1\xe5\xdc\xee\x0f\xcf\x04{`Y\xcd\x85\x113dq\xb9h\x8d\x19e\xc0\xd9\x10\xba\x1c\x03\xdd\xab\x802\xd2\x88\n\x02\xbb\xc0([\xd8a\xb3\xb2O\x87\xb3p\xa1\xa4\\\x92\x97\x91\x88\xf89\xb1K\xf3\x1c\x96=We\xe3\xce\xaf\xef\xf4\xb9\x14P7 \"\x95\x81I\xcd\xd88\x1a(\xaco\x9d\x8e\xc6\xcb\xce\x01\xa1\x9b\xe2\x07\x01]\x830>;J\xec\xb9\x98\xe8\x8d\x06R\x1dd\xa9W\xf9,K\xaf\xefp\xcc\x81\x0by\x8b\xae9\xeb\xc8>\xe7Iv\xe0\xcf\x16\x93^b\x06\x84-7\xb3\xb5\x96\xa2\xac+\xec\xc5\xabk\xb4 I*\xb7f\x84\xa3\x94\x85\x84\x9aWp\xd4\x8e\xc3\xdc\xc4\x0cK?\xfdH\x03\x9e*\xa8`\xfe\x15\x9e\xbf\xcc\x15\xbb\xc0\x9c\x8f\x8diJ\x96~\xfa<.\x92\x1f\xc2b\xf1g\xb1\xdb\x98?5\xf6\xa3 \x9c7+\xe3\x8e\x0e\xd0\x00\xf2\xd1\xe0\xb2-\xd9h\x8ckU$\x88\x12\xfb$y\x82\x95\xe8[\x80B,\x80\x1a\xa5vRg\xd5\xf0\xa9\xa6\xa2\xce\xf0\xed-\xa9\xa8\xd1f\x9b.\xc2\xc0\x7f\xb1\xfd\xc0\xe9\xb34\x16)U<\x91R\x85B+g\xa3\x86H<\x9b\xdf\xa5I\xda\xa3\x83b\xa7\x17\xfdjY(\x16Epr\xdd\x06\xc4\xe4\x02\xbf\xef$gP\xd0\x8a\xe6Y7R\x85\xd1&1)\x8fm\x8dw0\xc7\x85\x84\xdb*\x1fN\xc5\xfaPv\x92\x16\xa5I\x12\x1d\x86?\xd7n\x9d\xcd5\xa1\x97\x9b9\x9d\x04\xa5 \x92.\x01\xdb\x1d\xb7\x8c\xdf\x06\x9c\x15\x90\xc5`\xc6m\x89\x1bc\xe61%\xe3\x1a{\x01g\xf0}\xfa\xb6\x9a/K\xc7T\xfd\xb9\x07#L\xc6$\xb0\x18\xec\xd1\xbbS\x91\x9bIAZ\xc6\xa4I\x83O\xda\x0bB\x9f\x0e=?p\x0dn\x02\xe4 \xad\xddJ\x80\x0e*`\x8fyl~\xd5r\x80\x12\xe6A\x05\xf7\x9dT\x15\xa0^\xceb\x91\x91\xce\x82\x0e\xb90\xe0\x96\xab\x95\xdd\xc9je\xae\xf0\xcb\xeb\\1\xe2\x19\xbe`\xcax\x1e\x8a5\xeb\xf2\x81\xdd%3\x98\x91\xdcf\xd5\x92;Y\xb5\xa4Z5FM\xa8\x9d\xc0VZ\xb8NB\x88n\x0b\x9a{\x8d\x99k|\xac{m\x9b\xa5Z\x1e\xef\xdeW\xc5\xa2\x8b\xed\x9d\xadv\"]\xbf\xbe\x10c{g\xbb\x13^\xaed\xe5\x0f\x1d\x17,\xaf\x9d\xc6\x95N\xc8\x9aX\x9ax\xc5\n\xc4#\x08-\x0c \xd2\xcdx\x80\xef\x05cB8\x8b\xe4{$\x9f\xf9)\xb1 c\x92&\x18Z\x9e\xe5Q\xb0\xb7v\xdb\xd22\xb8\x990\xae\xa2\x06y\xdc\xccj\"\x84\xc7w\x9a\xb90\xd7\x11H\xa9\x8bq\xf2\x84\xb9F\x1761_I#05\x86\x91\xfd\x12\xacSz\xa2\xfcX\xbc\x12YP\x90|sk\x07F\xbcd,\x16\xab\xd9\xc27X\xd7\x8a\xcb\xe5)\xc9\xe47\xf5\xaa\xf2.\n\xef\x8b/\xf8\xc8\xd0\x15\xb2\"wg\x94{)\\\xca\x83\xb2\x00\xcd\xfbP\xc2: \x05\xb2\x89L\xb0\xe3\xc2HM\x13/0\xc6\xa5\xf2\xc8\x9c#\xb3)59\x81\x18\xd6A\xa1y\xa1\xab\xd2\xe4\xcf\x0b\x8d\x06\xa1\x92j/\x99\xc4zII\x8c*\xbc\xf6r}\xdd\x81\x05\xac\xef\x01\xb1S\xba\x0f\xd3\xe5\xb1\x0b\xe78\x97\xd4\x85\xa5\xc3w\xaf;\x02Ml[\x90\xd8\xa2P\x99\x8d\x10\xf8\xf0\xcf\xfaP\xd8\x95\x8b\xd1\x04\xcf8m\xd7\x13Z\xe6\x0c\xc1\xa0\xf0H\\d!\xe91s\xa9\x16\xe5\x84-\xca\x9a}\x05{p\xea\xc5\xe4\xb2\xb0\x1d\xc7\x0b\x12L\x1d&-\xcc\x15K;#\xad\xcd\xc9\xfa\xba~u\xc4CW\xa9\x7f$\xda\x01\xe8\x17H\x91i\xd2\x8e\xe1\xae\xcdSU(\x92P\xdd\xc1\xca4\xc7\xca\x0e\xc2P\x0e_\x0d\xc6\xd6\x9e5\x01koS\x03\xc1\xd6\x04\x8b\xc7V\x17J\xb4\xf2\x02\xeb\x0b\n\x93\x1d5\xc0\xbd\xe9\xde\xe4\xf8\xdeY\x1fc.5TL\xc9q\xb7_#GY\xc6w\xb3(\x9b8m\xdd\xa2\xec\x8di\xf1d\x95Ea\xcba[\x1e;\xccd\xba\x89\x1az\xbaV\xeco\xd4D\x13//O\x19\x15`\x8f\xd1\x97Pz1r\x1ci5\xed\xbd\xcd\x0f{c\xe7\xee\x17\xb4\x86W\xf5\xd9\xb9\x13\xfd\xd7\xfd]\x87\xc7\xe8\xfc\xc6\x9f\x15Iv\xd5=\xc5\n)\xc0\x84\xa2H\xbfM\xa5b\xd1\xe9i\xc6JOO3e\x85 \xc8H\x9e\xb3:\xec\xb7\xb2ZFx/\x19Qw\x94\x15\xe1,\"\xbc\x0e\xfeVV\xcb\xc3\x80W\xa2\xbf\x94U\xca LX\x15\xfaKU\xe5\x14\x8bO\x95E~\xce\xda\xa7?\x94\x15\x82\x90\x95\x07\xa1\xba8\xe1\xc5\xea\x9e\xc33V\x1c\x9e)\x8b\xa3d\xf6\xfe\xefeR\xf01T\x7f*+'\xc1\x15\xab\x96\x04W\xca\nl\xeb\xd4\x1bwZ\x16E\x12\xb3\n\xf8SUi\xe6\xc7\xe7>\xdb\\\xf6S])\xa5\xe0\xcak\xe1oe\xb5\x90\xcf\x8a\xfePVH\xf8\xd6\xd2\x1f\xea\n\x11/\x8f4\xc5gYR\xa6\xa2\x0e\xfe\xa1\xaa\x18\xf8\x05\x03F\xfaCW!\n\xf3\xa2\xaaD\xffPV\x0cX\x95@YH\xd8p\x03\xa2\x1cn@\n?\x8cr^\x05\x7f+\xab\xcd\xd9\xca\x06s\xe5\xaa\x06\xa1\x1f%\x0c\xa6\xd8Ou\xa5s^\xe3\\Y\xcc\xc7\xa9\x1e&_\x05\xe5\xfc\xc9\x12\x0b\xc9R]xJ\x02^~J\x94K4\x0fI\x14`\xd2\xe7\xcc\xb6\xc4\x1f\xea\x8ag2\x98\xd5\x7fj*\x97\x19\x11\x15\xcbL L\xf3$\xc1\\\xb5\xff\x1f{o\xda\x1d7\x92$\x08\xbe\xdd\x8f\xf5+\x9c\xf1\xaa% \x03\x0c1H\x89\x94B\xa2\xd8J%\xb3[\xdd\x99\x92FRVMw0\x8a Fx0PB\x00Q8xdQ\xef\xf5\xcc\xec\xdc\xf7\xee\\=\xf7\xd9\xb3;\xf7\xb1\xc7\xec\xce\xf4\xf4\x87\xce\xfc#\xf3\x07\xf6/\xecs3w\xc0\x017\x07\x10$\x95U\xbbo\xf1\x81D\xf8\x05wssss3s3Q\x08^\xe9B\xc9R\x16I\xc81.\x86\x90\xbd\x18\x92\x99\xdb\x98\xb9Mf\xee`\xe6\x0e\x99y\x1f3\xef\x93\x99\x0f0\xf3\x01\x99\xb9\x8b\x99\xbbd&\xf7qB\xc4\x8b\xad\x80\x04\n\xbe\x92\x85\xcaU\xb6\xb0\xae\xb1\x85l\x85n![\"\xca\x89\x17\xaa\x00\x92X\x92\xc0\x06\xf3\xc4_\xe2\xe4\xe2+Yh\x89K\"X\x92\xeb!\x88V9\xe2\x1c\xbc\xd1ERY\x80\\\x95\xefO\x10\x90\xefOH8\xbe\xe7\x97\xa7\x1cQ\x15_\xa9B\xa1\x7f\")\x04\xbc\x91E\xf8)\x8f\xf0K\xf8J\x16Bh\x85$\xb8\xc2 z/\xb3\xa3\xf7T\x81\xa5\x1f`G\xc5\x0b]`%\xf3\xc9\x89^\xfa\xc9{\x99\x9f\xd0\x1f\xe0Q\x8e\x05x\x94\xdb\n\x04\x99$%\xea\x07]P\xd2m\xf1b) \xb1\x17\xde\xa8\"\x91\x8f\xa40\xf2IR\x18\xc5\x18M\x19\xcb\xc8\x1fTA<0B1y\xac\xa5\n\xe1\xf4\xd2\xdbU\xbc\xca\xca\x85\xa4~X\n*\xba\x17[i^\x9cg\n\xa7\xf1\x95*\x84\xdf\"?\xb2\xf2\x13\x1fg\x00\xde\xc8\"\xc14StU\xbe\x93\xc5T\x11[v|Zp\x8c\xea\x07U\xf0gP\xe2gTV\x82\x03I\xc8\x91$\x08\x85\x84\x84@\x92\x9f \xcf$^\xa8\x02\xd8/\xb2C\xa9\xbf\xc4\xef\x8a\x17\xb2@\x89:v\xc4I\xf9\xb4\x98N\xf9N\x17\x0b\x15~\xe1+Yh\xe9\x87\x88b\xf0F\x16\x89\xf3d\x8a\x13\x82\xafd\xa1\x95/;\xb4\xf2\xe9\xdedI\x1c!I\xc5W\xba\xd0\xa5d\xe0\xe1\x8d,\x92#\xeb\x9d\xe6$\xf3\x9d\xe6\xcb\xa5\x9f\\\xca\"\xf0N\x17\x93\xf3@\xaf\x97\xcc?\x91\xfd\xc80R,Q\xa4\xe0\x9d3\x1b\xf3\x9c!\xd9\xcdH\x92\x9b\xf1\x8b\xac8\xd2\xa8\x1fdA\xc1[`)\xf1F\x16Y`\xfe\x82\xceT[vf\xdb\xb3\xb3@n\x87\xe2\x85.\x90)x\x887\xb2\x08R\xcd\x8c$\x99Y\xe2O\xdf\xcb|\x7fJ\xd2x$\xf0$u\xcf\x11As\x12;\xcf|\xfc\xf0\x99O~\xf9,\x98qW\xfc\xfa\x9c$\x11<\x0c\x83\x95<@\xcaw\xaa\x18\xae$\x9a5Y\xfa\xa7\x92\xbb\x11oT\x910\x88\xb0\x84x\xb1\x15\xf0\x93_K\xfcY\xc0\xa3\xac(Z&Q\x95\x96~\xaa\xf6\xf1\x94\x9c\xe3\x95\x82\xd0\xca\x02\x9d\x95\x9fe<\x89T\x19\xf1N\x16\x8b\xc3\xcbSI\x00\xe5\xbb\xadX1R\xf5\x83*(\xc6\xe4\x87\x95\xd1V\x93\xc8J\x8a\xb8&6\xd2\x9a\xc5\x92\xc8d1M\xec\xcf$=<#\xe7Q\x10\x85\x82:\x90\x05\n\xa2\x9b!\xd5\xad\x94\xb0\xc8\x88P\x05{\x0b2\xa2\xaa]f\xb5w2\x1a\xfb\xae\x1e|\xac\xd2 eMv\xc3~\x18\xc6\xd7\xf8\xe1\xba\xe95j`)\xfdk\xe4\x0c\xeb\xe1\xb5r\xd9\xf7zq\xb4\xa8\x7fp\xff\xbeeL\x8df\x1f\xcal\xe3&\xf2s&\x8doi\x19\xba\xfa\xcaT\x94x\xf2\xc4\x8f\xe2\xe8r\x19\xe7\xe9\xd3\xa7\x84\xa8tn\x95\xaf\xfah\x99v\xe6\xf4\xe0\x8dB;\x06\x82#\xc1\x98\x9e9\x85\x12\xd5RN\x0c\x17\xca\x15\xe3\xb6\x14Dm*\x14\x95\x8aUKA\xc55\x9f5q\xcd\x0c\x19\x8e@0\x1cg\x8eR\xde\xda\n\x02\xd0\xb1 \xbc\xda\n\xfa\xd1\xe5\x88-\x9cD7\xb3{ \xdab;(_\xcd\xdb\xe4\xdd\xeaQ\x9a\x9c\xaa\x7f\x1fk|\xcc\xfaS\xd3wh\xb7\x9a\\\xdd\x94b\xe6\xf4\xd4U\x13\xf6u\x8f\xf5!8j\xefk\x16\xcf\xcbx]\x98\x91`\xc6\xc2OY \x03\x16\x8b\x9a\xef.W\x9cEq\xe6\x83\x8a>\x88\xd2`\xc6\xd5P\x07m~\xb0\xce\xe4\xbd\xc0\xac\xd5\x99#\xdcn\xad;[k\x83\x01\x93\x9f\x00+F\xc7\xef\xee\xf4CBF\x05f\x16\xc3\x8f\xc5\xf0\xeb \x12 \xc5\xb4\x14\xd3\xd2|\xb5\n\x03>cY\xacC\xcdc\xfcb\xc5\xa7\x19\x9f1?B\xe8\x0c\x08g\xb1\xfa\xd3|Q\xbfP8\x87\xa8p\x0e\xd9\x13-\xc8u\xd8\xefw\x05\x0d\xdc\xd6p|\x8f\x85\x05f\x89\x1e\x8fE\xdfC\xf16\xe9y,\xef\x0091AS\xddf\x11.\xe5\x95\x16\x0e7\x18,ey^\x7fl>T\xe8\xa5\xc8q\x93\xea\xe0Q\x80\xdd|%\xae\x89\xe4|\x0d\xc4\xce?>b\xe7\x9d\x11\x9b\xa5At\x1ar\x8c\xbf \xd9\x80\x9ba\xf9M&\xde\x16^Ja\xe8\xf7J\x887\x1cp\xba\xa6\xad\x0e\xdey\x8e\xf1\xeeN\xe4/\xc1\x98\x95\xb8\x9fC=y\xab}\xb1\xedA\x1c\x1cL\xe3\xa8\xb8;qu\xc5\xaa)\xd0\x9bri\xb7c\x9fz\x94\xd1\x99\xd1X\xa7\x16>\x00\x14\x7f)\x90]\xcd\xa4\xa8\x0e%|(\xf1\x8bCw\x0b\x17\x05\xfa\xafk\x12\xb9\xc6\xbbL\xf5\x07\xd0f\xe9\xf0q6q\xeb\x0c\x86>\x01I9\x01\xb1\x05\xd8\x91IY\x80\xa4\xbc\x8cg\xbc\x95\xa3\xb8 \x0cm$\x03\xf9\xca\xef\x95`\xfc\xc2875\xd6V@\xeb\xbbZ;M\xea\xc6\x81UL\xba6*\xf1\xec\xd7_\xcb\xebpd\xf8\xcd\xd61k\\\x17\xf8\xa5h\x1d\xb6\x18\x90?X\xf8\xe9\xab\xf3\xa8\xb8[\x1ev\"\xfd\xac\x99A\x1b\x00\x83\xd6\x8d5c7e\xcf\xd8/\x80t\xc5\xd1\x1a[4q:\xd0<\xe5\x18\x07\xb4\x06\xbb\xbe\x9b-\xdd\x02A\x8a\x95\xa1{X\xe6\x05\x83\x9e\xeb\x17\x8fm\x8f\x18\xd4J\xcc<\x07\x7f\x1e:\x8c\xdb\x97\xa6Xp\xbf\xf1\xf6\xd5\xcb\x01\x9eu\x83\xf9\xa55\\\x80z\xd6\\i`\x1f\xaao~\x1d\x96Z\x1c\xc1\x8eY,\xcf\xa6\xfd\xf2\x1a\xe8\xf2\xee\xb2\xdd\x9cL=\xb7\x862\x157\x1f[\x8fYV\x99\xe9\xac\xfd(\xa6dAb\xef\xec@\x1f\xa9\x9d!*:\x1e8\x1bC\x8f\x15\xb3\xa7\x9c\x87T\xe6\xa6\x80\xd5\x80\x1d\xd6\x8f\xa5\xb0},\xf8\xf4}\x01\xc6\xd4c'y\xc6\x12>\xe5\xc1\x19\x9f\xb1_I\x99\x9f\xb1 \x9a\xf1\x0b\xf6+\xe9\xa0\xe7\xb1\x13\xf4\xed\x05\xf7\xa4k`\xb3\xcf\xee\xf7\xb2\x04\xa5o\xd1r:\xfc\xf6\xe9`\xda\n\xe2\x9d\xbc\x8f\xeaWX\xd3jo\x05\x81v;QG\xd6\x99\xc6vY\x9f\x96\xa5x{\xeb-]t0\xddT\xcf\x0d\xa7\xf4\xff;\xac\xc6\xd7\xf8\xc5\xaf\xd7\xe44:\x1d\xe0\nfa\x1cv\xc4\xd9i\x97f\x99lz\x0en n\x85\x0f\x99\x17\xa0\x9e\xb7\xd6i^\x12\xdd\x16\xcc\xed1%\xfc\x02BK~oX\x9fv\xc6\xfa\x10\xb0\xbe\xee`\xae\xfe\x18X\x1f\xde\x00\xeb\xc3[\xc7z\x85\xc2>:\x93\x04\xfe\xa9\x8dk)V\xca\\\xac\x94N(-J\xaf`\xa5\xcc;\xae\x94\x8d\xd5zpz\xcf\xe5\x99l\xdeL\x8e\x8f\xa2O\xfdY\xa1\xc2\x10\x195\x9e\x0da\x80\xd7\xf9{L^\x139\x8a@\xd3\x06\xb7J\xc8Z\xfa%\x13\xe5\xa7K\xd6\xef\xb0L\xcf\xe4\xa5\xb2\x95\x93zln\xae\xf6y\xb7\xd5.\xe0\xb6(\xc0\xb6\xf8\x05\xadc#\xf5\x83vE\x92\x99>\x87(\xfcQR+y\xfd\xef\xa0pR\x7fu\xc5\x86\xec\x1ed\xc0K\xc6F\x8c\xc3\x85I\xb8\xed\x07\x0cZ\xa5\xb5\x0f\x96o\xcfhJ\x02\x17g\x97J\"\x81\xe8\x84\xe2=\xf0\xd8\x1c`\x92\xa37\x1ep\xb1\x13#+\xfa\xdc\x0f\xc3 :-D\x0e)\x83\x95\x03\x8e\xb9\xd9,H\xf84\x0b/Y\x90\xb2(F65N\x04\xd18\xb9\x84\xc0*_\xaf\x92x\xb5)\x88N\xfa5[\xf9\xd3\xf7\xfe)\x1f\xb0\xafR\xce\xbe.\x1a\x1c\x00\xc3Z\xfct\xdc\xaf\xc5:\x9b\xfaa(\x9aX\x0e\xd8\x1b\xee\xcf\xd82N\xb8\xe0\\\x17Y\xb6\x1a\xdd\xbb7?\x19,\xf9\xbd<\xe5\x9bP{\xb3\xfc\x8eu\x91hx(f<\x19\x07\x13v\x007+\x8b\xcb\xa1*\x0d\x89\xc4\xbb\x05/\xcf:\x15\xa2\x19\xa4`\xe5(\x18\xef\x94%\xfcgy\x90\x80TQ?O!\xdf\x1dd\xa9$\x067b\xdc\xa9\xe0H\xdb\xa5k\xa6+\xe61\xbc3\x92\xa1\x0d*\xb4^\xba\xd6B\x1co\x10\xd7\xdd\xd5#\xc6\x10c,\x91\xa4\xdbm\xee\xa4v\x9b\xbb\x8b\x10\xe11\xdb\x80\x10\x91A\xed\x16ucMV\xeaBb\xbcB\xadM\xe4\xd0\x0e\x9a5nvS}\xea\xc8\xf5\x82\x17\x9f\xae7\xbbAx-\xf0cc\xe9\xf8\xe3\xe1\xa4\xd3@X\x17\xd9\x8e\x0d\xa3\xa5[\xd8\xf6\x05k~\xbf\xeeu\x96&s\xa7\xcdWL\x95\x9e\xc5\xba?\xd5\xe5\x85\xec\x80I\xbb(\xe0\xfc4\xf1\xfa\x1b~zx\xb1*\xef\x81\xf7XGG@\xf2K\xca\xf4\x08\xaf\x9c\x82;\x89\xb7ZJ6\xee\xfd\xea\xaf*\xd7\x1b\xef\xfc\xd3\x1e,\xe0\x16k\xb2L\xef &\x9bpD\xa7W\xa2\xe3\xaa\x07\xf58r6\xe0^\xda\xddwiN\x98a,\x05\xb5+UZx\x07\xd9\x84\xbc\x9a\x9bSR~m8\x01ht\xb0T\x99\xa1\xcf\xfcL\xfb\xfa\xcc\xcfx\x8f\xc6J\xa3&\xcemY7\xe1\xa7\xfcbE\\1\xb6\xa1Q7x\x9e4#+-\xd0/v\xec\xe6\xad\x1a\x91\xb6i\x1bn\xdd\xf6\xd4\xe8\xfd\x088\x9b\xc6=\xb4y+\xc620\x03M\x05$\x98;\xf4\xa8\xa9C]iL\x9b\xd3\xb7\xea/YIs>\xc9\xf6Q\xc5V\xa6xl^;\xa9\xb0}\xc1J\xcf\x07z\xc2\xdc\xd3\xa4b7\xf0C\xd0\xe4x\xa7P\xe9\xdfR\xfb\xbd\xe1\x83\xc1\xee@z\x1e\xb8Vkg\xa5\x8f\xe9\xdd\xfb\xee\xa0\x88\x98@Y\xf3\xb6\x19\x1b\x07\xb2\x9d\x07\xa4}\xef\x83\xfb{\x16\x83]\xdfQ\x92\xb9\xdb\x18\x87aG\x8c\x9d\x1fn\xd3n\xa3\xeb&\xca\xa2\xb3\xbdep\x11Di\xc7I\xad/xuf\x19\x13\xd2\xc3\xd4j\xef\x8b\x9f\x1c\xb1\xdeg\x87\x9f\xbfxyx\xfc\xe5\xb3\x97\xbfe\xf1\xad\x90f~\x16L\xbb\x95])\x0c\xefTZ\xfaS]\xa3\xc2\"\x08g\xcf\xd7\xadu\xca\xb3\xcf\x90\x1a@\x84\x9dj\x9d\xe3/\x0f\xdf\xfc\xda\xe1g\xf6\xaa/\xa2 \x0b\xfc\x10\"\x17\xadY\xf5\xb9\xd6\xddu\xaa&<\x82\xbb\xb4\xaa\xc6\xab\x97\xcf\x0f\xad \x94+\xe8\xc7A\x18~\x89\x8eK;\x80\xa4\xa8\xf6Y0\xbbF-\xf1\xb17\xa8($@j\xc3\xa3E\x9c\x0bp\xc86\xbeZ\xcd*\x10\xed:\xc8z\xbd.\xfd\xfd,\x98]\xa7\x1a|.Zv\x86\xcfW/\xdf>\xfb\xfc\xf0\xf8\x9asB\xd5^\x1b\xc8T#k\x0c=\x87\xa2\xc5\x1c\x8dX\xef\xd5\x8f\x0e\xdf\xbcy\xf1\xd9\xe1\xf1\xa7\xcf\xde\x1e\x12\xbc\x8f\xd9Nh%:\xb0\x10\x93\xe0\x8c\xcf`5}\x9e\xc4\xcb\x86\x15\xd9\xe5[S\xeb\xb7fA\xba\n\xfd\xcb\x97p\xe3\xbb\x13G\xce\x80\xf0j\xf5X]\xac\xab\x1e\x8b\xd6H\xd1\xd4\xce_\x13\x1cgK(\xb9B\xed\x11\xa1\x9a;\xaa\xb8a\x8b\xfa}W\n\xb4\xc7\xd1d-\x15\x17AJ;\xf7\x9b\x0f\x8c\xda\xe2\x88.C\xa6\x19y\xa4\xabP\xd6\xd0\xb5k\xf7\xca\xd2\xa1\x1b\xf4\xc5\xd8;\xd6\xe8N\xad.8\x13\xaa\xa7\xed\xb3\x85c\xa4B\xcb#\xb2\xf4Z\x08\xa9\xed\xc6kt{\xa5q\xa9\n\x84E\xda\xba\xf0+\x98\x87\xce\x1d\xd8\xe8^\x94u[C\xac\xba\x8e\x82\xa8\xbdU\xf5(>\xaf\xdd\xa6_=\xd0\x9f\xba)`\xd4\xd9\x14\x90)\xb1\x97\xe0\x16A\xd3\xd9\xed\xb3\xe2 \x9c\x8d\xd8cw\xc1\x88\xf6y\xe8\xa7\xe9\x88\xfdV\x9c3\x1f\xf4!\x19_\xae\xb2 :eY,C\xcf0\x9f%<\xe5\xc9\x19\x9f\x01\xa6\x88\x9ez\xec\xeb_I\xbf\xf60\x16>n\xd8\xd1\xd1\xdd\x8c\x9dp\x06\x11\xf2A\xb4\x0b3\xdac\xef\xf9\xe5\x80}\x86M\x05\x19\xf3S\xe6G\xa5\xc1\xb4j\x11R\xb8?{,\xca\x9c\x07a\xc8\xd2L\xfc=\xe1\xcc\x9fNy\x9a\x06'a\xd1\xb8n.~\x97vRo{\x94\xd8\x0b\x80\xd6A\xea\xa5\x1e\x90~\xad3;L\xe3\xb9Cs\xa2\xd9\x01\x0b\xc7\xd1D\xca\xe9\xbb\xf7\x83\x95\xa7\xcb\xc0\xa1\xb6C\x10{\xe4\x1e\xebu\x9e_1\x95\x02\xb2\x97q\x9eh\xb6\xc2\xa0 \xcb\x16~\xc4\xe2h\xca\x07\xec\xdd\"H\x05\xe4\xe7a0\xcd\xd8\xd2\xbf\x14s3\xcb\xb9h\xc9\xc7Mm\xd0C\x07\xc8gq0s8\xc6\x95_\xc0\x8b\xc7\xa8\x80S\xb6\xa7Y\xff\xab?\xf2#\xb4\xc7\xe5\xfa\xd3\xde\xac\xbd\xc4\x07\xa42\xeb\xd04?\xcf\xe2\x93 \x9aU-\xee\xd7PA\xd3\x81u\x98f#\x98\xd6\x11+\x13\x88\x95\x8e3;b\x9d\x10U\xee\xdc\x11\xc8Te\xe1\xd0Ml\x05\x8f \x12\xc2\xdc\x9fr\x1bB\xc5g`\x87Q\x9a#\x86eXj\xc9\xb3ENDg\x9f\xe5Y\xfci\x10\xcd^\xfbAb\x89TY\x8dR\x19\xd5\x97\x99\x0f\xcbl:@\xee\x1f\xa6T\xbe\xbb\xa4\xbfw\xf5\xc0\x1c\xd7\x1bC\xbb\x8a\x1cC\"\xb6\xedJg\xf2^h4\xce;X\x8e\xad`\xd8\xc6\xf7\xda\xf5\x80sg\x85!w\xa6fm\x97M\xc7\xf9D\x0c:li\xa9\xc1\xef\xb3\xfe\x881\xcd(\x02\xd8\xd6S\xd6d7\x0d\xc6+\xe0\xac{\x05\xb7\xdc\x86H*\x06\x8a\x92w\xdb\xc1\xc0P\xbfmR\xf4\xe7L\xba\xcfN[\x03\x96\xeaO\xe0\x80\x13q;\x13\xb0\xac\x13@\x99\\_\x81_E\x85\x11\x81 \xd1l\x15\x87\xc1\xf4\x92\xfdJ\n(\xfd\x9e\xc3\xeb\xf9\x82G\xb8\x02O\x81\xdd,\x96\xa6\xa8\x02\xc4x\x89\xb3\xdf\xd0\x9d\x03\x96`\xe4\xd2\x85#^\x042\xb0\x11\xd5C\xf4\xe0\x8be\xcf\x8a\xb2\xdd\xa0/\xddA\xcb\xda\x1d8+(\x1ec\xd0\x93\\|\xc7+*7\xd6m\xe0\x15\xcc-\xbe\x13\xa1\x9fY\xf7\xfb\xea\xb1$p\xa4AY\x83\xaf~\"=\xf3Xo\xc9\x93S\xaeB\x1c\xbd\x8c?\xcbW\xa1\xd8\x90\xf9o\xf2\xcb\xd4qG\xec\xb9\x1f\x89m\x17\x8a\xb1(\x8e6\xb1\x99\x14\x08x\xe62\xe2\xc8\x82Q\xca*:=`\xf8Z\xbf\xf5.\x91\x06-\xf8\xb5\xec<\x96\xf4;\xc5\xed^p\xfa\xa9\xbf\xe4\x18\x06]l\xbd\x9dv\xd6\xc7\x02D+\xf0\xf0*\xf6\x044\x92SE\xa7~\x9eJk\xb2\xf3\xb8.\xb6u\\\xb1\xc5\xd5\x0e\xd3\x8e\xab8\x0e\xc9w\x8b\x15P\xe9\xa7\xd8\x1c\x17\"\xf5=\xbfL\x15\x0b,\x19S\xcb\x0dUeB\xd8 -\x16m\x96\x88:{i\xdd\xf70\xb04F\x83\x15\x10\xf1\xcaH\xb2\x96{\x8e\xe2\x81C\xad\xa5\x96]=\xaaL\xe2\xca{(I{\xe1\xd2\xd6#\xb2\xef\xde\xe0^\x98\xf0\xd5\xcc4\xa5\x9b\x13\xe3\x14\xc0\x0b\x1dV\xa4\xdbz<\xbb1\xe0\xad\x00\xb7\x02\xf5\x9a]]\xb6\x1e\x1524\x9e\xa3\x94\xc4\n\xec\xb5/\xd5[1C\xd1\xa9\x87P\x13\xb4\x82\x86)\x83\xd6\xe3\xe3 \x85J`\xe3\xb7\xb1E\x96&H\xaa\x89\xb4\x97\xed\x1d\xac\x88\xea\xaf\xddG\xda\xde\xa5S\x1fO\xac}\x94\xfe\xc1\xa5\x02\xa9\xb3p\x0b\xfa\x87\xf2\xf8d\xc0\xa3\x9f\xe5<\xe7o\xb4\xa6$\x86\xad}z-\x06\xdc\x11N\xca\x16g\xa3\x0e\xb0\xeb\xc3\xea\xd8\x1e\xd6\x97iF\xa2\xce\xb1\xaeT\xd7y{vB\x90\xb6\x12\xb2M\xe42\xab\xa9T\x93\x06sPV\xa2\x89yXP\x91\xd7\xee\xdc\xe9\xf0e\xf5T.\x11r\xb2]\xcf\"\xeag\xfd}\xb6\xdd\xd6>\xab\xc9,\xdb\x8f\x05L\x9e\x88\xb2q\xc4\xfal\xd8\x81O\x85\xe0\x0b\xfbH\x99\xe2\xeb\xfaA\xf8\x00\xe8\xab\"\xda\xad\xa4t\x9b[C\xe7&|\x0e\x0e\xc4\xbc\xca\xbaP6\xeaQi1\x9fq\x19\xcb\xc7>\x90\xc2\xcaWT\xa9\xb1\n\xec\x80Lv\xdcV\x81^\xe0\x10\xacY\x0evuUs2`\xa6\x7f\x85\xf8\xc4\x88-\xc5\xc9W\xa2\x7fq]]\xf0.\xe2\xd3=\xb1\xb9\xe8\xea)q\n@~_P\xc14\xd0\x14w=\xb7\x06\x91\x9c^\xad-'\xde\x04\x84\xe5\x15c\x97\x88\x9f\xb3cOO\xac\xf8\x10\xc1h\xc8Z&\x85\xe22\xa8_>\x90!O\x9d\x95n\x00\x9e\xb9\xae\xc7VN\xe6\xb1S\xf5\xc2\xd5\xcb%\xec\xb0u\xb5\x08\\EP\xc1\xe6\x0bMI\xbd\x98\xe3\x82\xacB\xef\x1c*\xda=\xd6\xc3\xc0\x07pnr\x06\x83\x81`\x98M\xd1\x16NO\xb0\\\xa15\n\xf3\xd9\xd7\xd8\xc0\xd7\x92\x93\x04f:u\xf5\xf1\xcb@%N-I\x86\x9bj\xe4w\x9a,\x93n`\xd0s\xd6\x12\xd3\x0c\x0co\xca\xe2\x91cs\xe6g\xa7zr\x00F\x0cg\xee\xca\xe0\x96\xc3\xfb;\x10\xdd\xf2v\xc7\xb3\xbdG\xdb\xe2)\x1b\x00\xb1\xd5\xc5.Ek\xfd\x12*5Z\x0b\xc1X\x1f\xeby\x96#$\x8f\xf2%O\xd0\x01\xfe\x86%\xd0\xe8)\xef*]Q[\xf3\x80\x96\xb5\x13b\x82\xc6\xbe\x07\xdf{\xbf\x83[\xe9\xb7D\x93\x8e\x9d'\x1b\xcf\xea\x08\xc4\xf6\xd9\xd0Bv\x18uz\xb8\xc1\xfao\xa3E\x80\xb7\x9e\x14A\xe3M\xa3*\xca\x927\x95\xe0&\xf5 >Iyr&\x86.\xce\xdcp\x0bXK\x1a\xc9\xa0\xbc\xe2P\xad\x12{\x10\xd1]+\xb4\x8fvr\x19:\xc7\xd6\n\x92;\xf0\xf7\x02\x91\x8a\x80\xc7\xf0\xcf\x00Bn\xa4\x98[\x8fYP\x11\xf0\x04\xb4\xcb\xa2\xb3\xc2)N@\xc8f\xb6<\x1a\xc4|\xecO\xf0\xe2\xa7xA\x07G\xb6\xbd\x8ai\"\x11\xbd\xc7u\xeb\xab-\x93\xd8\xa6\x16F\x8a\xe6\xbc6:\x08\xca\xaa +\x04\x04E\xc5F\x91\xe9\x99\xe6a\xabY\xf2\x85\x07C\xec\xbamm\xeaO\x06\x1e\xc7\x04;\xfb\xe2\xe5\x8bw\x8d\xc5?\xb4\\Q\xd5No\xb1\xcb\xb2E\x12\x9f\x83P\x05n\x119w\xdf\xf0Y>\xe5 \xeb\xdde}\x96\x81\x1b\x90\x9e\xc4`>c\xc5V\xc9fy\x82*[\x90 \x05\xdfH\xe3\x9b\x17sT\xaf\x81\xd8g\xe5\xa7)j\xe2DZ\"[\x0e\xd2\xb2\x19\x8f]\xc69\xca5\xf8\xc5*\x0c\xa6A\x16^\x16\x0bf\xc1U\xfb\xd8\xe0\x80\xbd\xab'\x81\xfe-\x8a\xc1B\xb0h\x15\xba!\x1a\x9e\xc5\xd1\xdd\x8c\x9d\xfbQ&:\x91\xf2\x8c\xf9\xd2\x01\x81X'\xa0\xbf\x93\xbd\xc2\x8eL\xfd\x08\x0c?\x80\xb9\x91\x86\x83,\x9ek-7\xb9\x96\x11\xd3\x1f -\x10\xad^\xdc{\xfd\xe6\xd5\xa7\x87\xc7_\xbd\xfc\xcd\x97\xaf~\xfc\xf2\xf8\xd9\xf3w/^\xbd<\xee\xb1>\xfb\xd2\xcf\x16\x83\xc4\x8ff\xf1\xd2q+\xa1\xcd\xb5\xe0\x9e{\xee ]\x85A\xe6\xf4z*\x80o\xe3\xe7k\x93\xdb\x15\xbd\x10\xb5\xe8\xed\x86\x01>\xdd\x00K@\xbb\xbfJ\xe2\x13\xf1\x1ed\x0b\xe63\x1c6|v\xc0>\x83 \x12\xcb5\x8b\xd9\xc2\x8ff!z\x99P\x98\xce\xfa\xec.\x8b\x13\x16g\x0b\x9e0\x1f\xd6 \x88\x18z\x08\xe1Ozh\xd6\xb5\xf2\xd1<\x8a_\x82\x8d\xd54\x06/\xa3 X\x96\x06g\x80:\x85yO\x81q\x1a\x9aM\xf3$\x01\xa3\x03\xc0)\x81\x1c~t\xc9\xf2\xe8}\x14\x9fG\xea\xbb\x1e\xcb\xa3\x90\xa7)\x0b\xb2\x1a\x12\x07\x11;_\x04\xd3\x05\xde \xa4>PAZ\x8f%\xfc\xd4Of\xd0X\x8c+\x06\xbf!\xc1\xd2\x0d\xcd\xd1\xa9\x86\xc0\xd9\x13D\xd9\xc1]\x8b&\x86\xd0\xfe95\xd3\xa0\xca\x01\xd3(\x0e\xc2\xf1\x06\xfa\xddEo)\x96\x87\xd83\x0b\x9d\xa4\xd2`\xc6\xb2\x12\x14\xc9\x80\x8f\xb2\xf8*/\xbd\xbc\x88\xceb4\xdcz\xed'>\x84u\xff\xb2\xf0\xb1\x9b\x15\xac\x84\xf4\xf4@\x124\xf0\x16$\xb6\xae]\x97\xd8\xbbD\xd6\x83]#+(\xb2\xf6\\\xf2X\xeb[\x95\xba\xd2v\xa4\xb2\xfey\xf3\xfa\xb7\x1e\xc0\xb5\x05_\x1bj\xa2\xe6\xd8[\x0bd\xb1^\x8d\x82\xff/1\xe9\x15\xbds\x04\xe5%\xa61P3L\xcdU\xf0}\xcf\x15E\x9c\xed\x8e\x9f\x82\x1a\x89\xa6\x0e\xb5\x1b\x81\xa4\xb9\xa5'\xbb\xb7Y\x9cp6\x8b9zc^\xf8g\x1c%\xf3\xc1L\xc9\x1c\x06\xecK\xff=g\xf2*//#\x8c\x94J\x85\xfa\xe6\x1b\xa4\xday\xf7|\x11\xa7\x1c\xa7&\x05\x99\xb0l7\x1d\x10\xc1k}I'\x0b\x14s\x0d\xed\x13\xba\x0d-\xb6\x84\x17\x19\xaaM\x07A\xaa^\xf5\xb8.\x85\xbbd\x1f$\xd8A\x8aB\x91\xe2\\\x9e\xd5\xa2\xa2\xa8\xc1e18&\x88*\x81\xdf^,\x979\xc4\x83/\xbeZ\xdec\x9a\xc7a\x18\x9f\x07\xd1\xa9rx\x10\x80S\xaa\xbb\xac\xcf\x02T\x1a\xdc\xedy\xacw\x17eL\x83\xbb\xe6\xd8\xe1\xc0%f\xef-\xff\x19(#\xf0\\\xe8\x0e\xe6A\x98\xf1\xa4\xe5\xa8 \xc7\xbba\xdc\xdf\xaa\x1da\xeaZ)Y/\xd7e\xc0\x07\xac\xa7]\x19\x04\x81\x04^\x94,J\x1d\xb0\x9e\xf2\xeb\xd0c\xa3\xe2G\xc0S\x14\x97\xe1\xc0ss\xe0l\x1e\xe7\x118\xa5\xbe\xab&E\x03\x7f\x16\xb3y\x10\x15a\x83\x04\\Q\xf0\xaf\xe4_\x853 \xbcC.\xc5\x1a\x0dp\xd6\xef>\x96\x9dD\xff\x13'\\J\xeaf\x83\xbbuw\xca\xb7\xbf\x1b\xde\x1aE\xf3\xd6\"\x0euo\x9c]tH\xa4d\x13UH\xa0\x1a\x12X\xaed\xa7\x97+)\x0bEQ\xe7\xad\xc8?\xeb\x02(M\xb6y+\x13\xa4W\xacB\xab\xa0\xd0b\xd7\xae\x07\x00/\xe7\xa9:#]>\x199\x8fP\xc4\xfd\xe8\xa1[\xedy\xe4<\xd8\xdb\xead\xe0Y\x1e\xa1\x87\x86\xafC\xe9l\xf0\x91\xeb\xf4\x8a\xd8\xe0\xa4\xad\xf3\xde\x96\xc5\x8a;r\x86\x0f\\\x8d\x8a\xaeq*\xb0\x1d\x084ER6\x8e\xd1c\xad\x16\xbb\x1c\xee\x14@4\x81:\xcdJ\x1c]~\xd7 \xc0\xcdV\x86\xf7~\xe2\xfc\xca\xf6\xd6\xd5Q\xea~\xe2\xfc\xd4?\xf3\xd3i\x12\xac\xb2\xab\x99\x9f\xf9\xee\xbd`i\xc2\xf2\xde\xf8'G\x17\xdb[\x9bG\x17{\x87\x93{\xa7\xf5\"\x01\xb69\xfe\xc9h\xd2wG\xf7N\x97\xe6qk\xdc\x1b\x08Bt\xaf7\xa1\xe1]\x05h\xeaGA\x16|\xc3\xbfJ\xc26a\xd5\x99\xb4\xb5\xf1\xe4\x8e!\xaf\x95\x89cA\x8fRKw\x12\x10j\x05\xfd\x010\xec\xaf\xe6\x0e\x1foM\\\xf6\x94m\x12\xee\x97\x9d\xdc\x95&\xe7N\x04\x12\xc0\xa5\x9fM\x17N\xe0\x8ad4\xd9\x11\x873\x96\x0c2\x9ef\xe8\xb6\xa4\xe7\x9f\xc4y6: \xfd\xe8\xbd\xd86r\xb8\x1d\xae'V\xbe\xb3\xa6\x15e\xb9<\x1e\xd8\xec\xff\x1f\x0e]#\xdci\xc3f\n.\xa2\x07Y\xfcE|\xce\x93\xe7~\xca\x1dpG\x02\xfa\xa3\x03&\x90\x94\x8d\x0c\x1f\x1f\x96\xe5\x15\xaf7\x84]\xca\x9e>r\xb6\x1f\xda\x96\xaf}z\x95\xb0\xdbI\x1c\xeeVG\xb3\xe6\x1a+\xbb\xb7W\x17]|/\xa6\xe4`H\xdelF\xde\x0d$g\xff\xbf1y1\xc7\xf5 \x8e\xba\xd9\x8cw\x03t!d\xb9\x96\xe5\xb8\xbe\xa2)\x84\x13\xeb\xc1r\xa3g\x8f\xf2\xaf\x0b\xcb\xea\x9aCh\x96\xf5\x80\xc5\x03\x19\x94@\x814F\x12\x18 \xd1\x90\xe2y\xa34\x93\xa8\x0e\x96\x91hd\x91\x0d\xa6\x0b?y\x969[\x16%L*\xcb'N\xe4\xb1\xa1\xb2P\x82\x08!\xd9 \x0d\x83)w\x1a\"\xb0\xe4c>\x01\xc5wU\xd8\x7fm\xda\xbb\xfd\xb0\x1d\xc4\xf6cl\x0c;\x9a\x14\xdf\x93\x98T,2\xe9\x02\xea\x80\xc5\x82w\xf7\xd8\x06\x98\x01D\xec\xe9>\x8b\x95Ux\xf1\xa9\xeb\x8e\xe6\xc1^\x9d l\xc1\xbb\x9b\xd0g\x8e\x08\x02\x97\xb4\x92\xf6\xc5b\xe3h[\xbf\xc4Ks\xb65>\xa1\x10\xb97>:\xcag\x0f\xb7\xb66\xc5\xff\xf9|^\xbf\xf4\x96\xa8B[;Xhkgw~t\x94\xcf\xf96\xfc\x9c\xf3m\xf1s{k\x06?\xb7\xb7\xcc&\xe0\xc6\x00|fg:\xc6\xcf\x9c\xd8>\x07\x86~\xe3\x9f\xb4t\n.\xf49\x07#\xbd\xd1\x19\xdf\x85\xe2\xb3\xf9|\xe2\xfe|\xfb\x03y\xc5Oo\xf7d>\x9f@\xc2\xd4\xfe\xa1T~\xa8\x08\xe1sU\x84\x01r\xc5[\xef\xa0V!T\x9f\x99\xf3-\x8e\xff\xe6\x93\x03\x15\xe1\xc9\x91\x9d\xde\xde\xda\x9a\xc9V\xc7\x18\x93)\x9f\xc8\x95~\x85A\xe2\\k\x1b=\xf7\x93\xfaY`\xaa\xf5r\x1c\xa8\xae\x1e\xf4\xf0\x1a<(\x08\xa3z\xfb\xb5~\xcf\xd9\xbe\x0c\x8c\xe0\xc0\xe8\x9c\x83\xfdr\xa40\xe8)F\x8a\xec\x9d\xf6\xae\xbb&\xb8\xe4*\xe7p_t<\xb9\xee2\xde~hc\x08m\xcb\x98\xf2%/G\xdb\x1b\xdf\xfdo\xbf\xf3\xbb\x93\xde\x8dF\xd6\xbc\x9d\xa8\xdd\xdd \x1c\xb1o\x14,\xbe\x0f,\xbe\x0b\xce\x1ez\xbd\x1b\xdd9\xd2h\x9c\x058\x06\x0b\n\x87\x9e\xf1\xd1\xc5T\x1c\x8bf\xbbG\x17\xb3\x87\x9bG\x17\xf3\xdd\xa3\x8b9\xbc\xcc\x8f\xf2\xad\xa1X\x19\xf9\xd6po>\xb9w\xda\x00\xc2u\xc9\xc3M`\xed\x80\xd0\x1a\xa4\x82 \xa9U\xd0\x0c<\x96\xd4a{} \xdew\x9d\xea\xd7{\x7f\xf8;\xbd\x11\xeb=\xab\xad\x9b\xde\x1f\xfe1:\xf9\x8f\xd3\xc9\x7f\x82N\xfe\x1f\xe8\xe4?I'\xffC\x91\xec\x1b\xc9\xff\x88N\xfe\xc7t\xf2?\xa1\x93\xff)\x9d\xfc\xcf\xe8\xe4?-\x92\x9f\x1b\xc9\xff\\$O\x8d\xe4\xbf\"\x92\xeb\xde\xf1{\x7f\xf8\xefD\xf2\xccH\xfe3\"\xb9\xee;\xbe\xf7\x87\x7f\x96N\xfest\xf2\x9f\xa7\x93\xffg\x91\xcc\x8d\xe4\xff\x85N\xfe\x17t\xf2\xbf\xa4\x93\xff\x82H~a$\xffE:\xf9/\xd1\xc9\x7f\x99N\xfeW\"90\x92\xff5\x9d\xfco\xe8\xe4\x7fK'\xffU\x91\xfc\xd2H\xfe\xf7\"92\x92\xffG\x91\xfc\xcaH\xfe\x9f\xe8\xe4\xbfF'\xffu:\xf9o\xd0\xc9\x7f\x8bN\xfe\x0f\"96\x92\xff#\x9d\xfc\xbf\xd2\xc9\xff\x1b\x9d\xfc\xbf\xd3\xc9\xff\x89N\xfe]\x91\xfc\x95\x91\xfc\xb7\xe9\xe4\xbfC'\xff]:\xf9\xff\x14\xc9\xb9\x91\xfc\x7f\xd1\xc9\xff\x99N\xfe/t\xf2\xdf\x13\xc9\xf5\xd8\x01\xbd?\xfc}\x91|i$\xff\x01\x9d\xfc\xa7D\xf23s9\xfc\x9eH\xf7\xcd\xf4\xbf/\xd2\xdf-\x8c\xf4\xff*\xd233\xfd\x1f\x88\xf44\xad\xa7\x7fK\x93\xe5oi\xfa\xfb-Mh\xbf\x05\"n\x90\xb7o\xff\x04\x9d\xfc'\xe9d\x80\x80A\x0c\xbf\xfd3t\xf2\x9f\xa3\x93\xff\x02\x9d\x0c\x84\xd6\xa0\xa8\xdf\xfeY:\xf9\xcf\xd3\xc9\x7f\x91N\x06\x12d\x90\xe5oij\xfd-P&\x83Z\x7f\xfbW\xe9d \x13\x06\xfd\xfd\xf6\xaf\xd1\xc9\x7f\x83N\xfe[t\xf2\xdf\xa6\x93\x81\x04\x19\xf8\xf6\xed_\xa7\x93\xff&\x9d\xfc\xbbt\xf2\xdf\xa1\x93a\xcd\xfe\x9a\x91\xfc\xf7\xe9\xe4\x7fH'\xffc:\x19\x16\xe7\xa9\x91\xfc\x0f\xe8\xe4\x7fD'\xff\x13:\x196\xfb_7\x92\x7f\x8fN\x06\x1e\xc0X\x98\xdf\xfes:\x19\xb6Xc\x07\xfb\xf6_\xd0\xc9\xff\x8aN\xfe7t\xf2\xbf\xa3\x93a\xfb66\xb6o\xff%\x9dLo\x9a\xdf\xd2\xbb\xe3\xb7\xff\x9eN\x86\xed\xe47\x8cd\xd8N~j$\xc3v\xf2\x9bF\xf2\xff!\x92\xdf\x1b\xc9\xff\x89N\x86\x9d\xe0\x0b#\xf9?\xd3\xc9\xbfO'\xff\x01\x99\xfc\xdd\x1f\xa3K\xc3.\x13\x1a\xc9\xff\x85N\xfe\xafd\xf2w\xbfC'\xffq:\x19H\xaf\xc1\x8d|\xf7'\xe9\xe4?M'\xff9:\x196\x01\x83\xa5\xf9\xeeO\xd1\xc9\x7f\x86N\xfe\xf3t2\xd0o\x83I\xf9\xee/\xd1\xc9\x7f\x85N\x06Bm\xf0\x17\xdf\xfde:\xf9\xaf\xd2\xc9@c\xdf\x18\xc9\x7f\x83N\xfe[t2P\xcd\xc4H\xfe\x9bt\xf2\xef\xd2\xc9@\xa8\xdf\x1a\xc9\x7f\x97N\xfe\xfbt\xf2?\xa4\x93\x81\"\x1b\\\xc1w\x7f\x8fN\xfe\x07t\xf2?\xa2\x93\x81\"\xbf3\x92\xff)\x9d\xfc{t2\x90\xde\xccH\xfegt\xf2?\xa7\x93\x81\x98\x1aL\xe1w\xff\x82N\xfeWt\xf2\xbf\xa1\x93\xff\x1d\x9d\xfc\x1f\xe8d\xa0\xb1\x06\x0b\xf9\xdd\xbf\xa4\x93\xff5\x9d\xfco\xe9\xe4\x7fO'\xffG:\x19H\xef\x8f\x8dd \xbd\xe7F2\x90^\x83\xc7\xfd\x0eH\xaf\xc1\xcc~\xf7\x9f\xe8\xd2@z\x7f\xdbH\xfe\xcft\xf2\xef\xd3\xc9@L\xbf1\x92\xff\x0b\x9d\xfc_\xc9\xe4oav^\x98\x1b\x0f\xc0*0v\x9e\xef\xf0\xb8fp.\xdf\x01\xb3\x14\x9b\xe9\xc0X\xde5\xc9\x1b\xec\x1bi\xa9\xd9\xb5)Hi\x8f>\xd7\x16rw\x12\xb0\x11\xce\xd4F`\xa3[\xa9p\x03\xc9Z=\xf6\xa3\x12;R\x96\xdf\x84\xc4M\x9am?l\xf7\xbcG\xabT\n\x0b\xc5}\xd0+x\xba\xea\x04u\xf4\xfa\xc0AA%\xd5\x10~\xa9\x86\x80\x00T(\x87\xcd\xba\xc9a)\xb5\x01\x18Tlmm\x1e]l\xcf\x8f.v\xfc\xcd\xa3\x8b\xfb[G\x17\x0fN6\x8f.v\xb7\x8e.\xf6\xc4\xcb\xde|\xd2\xbfw]%\xa3\xeadt\x93N\xfa\x9b\xdfL\xc6\xcf6\x7f{r\x05\x7f\x7f\xbe\xed}\x80\xb4\xab\xf1\xd6\xe6\xa3\x89x\xc5L\xf9\x02\xa9W\xe3\x9f\xe0\xcf\xad\xcdGlr\xef\x9a\xdd\x8f\xd0Pb-\xb5O\xa1\x939:\xba\xf0\xa7GG\x17'\xc3\xa3\xa3\x8b\xd9\xde\xd1\xd1\xc5\\\xfc\x01\x01\xab\x008B\x1c@\x8e0\x07\xa0#\xd4\x8f.NP\xe0\xba%\x05\xae\xbbsvt\x94\x89\xea'GG\xa2\xae\xbf\x05r\xd9\xf9\xfc\xe8(::J\xa0\xd0\xf6C\xfc\xf7\xe8\xe8(\x1f\xee>\x14%\x86\x0fA\xf9 \x1a\xc2\x7fC\xfc\xb7\x8d\xffv\xf0\xdf}\xfc\xf7\x00\xff\xed\xe2\xbf=\xfc\x87mn=\xc2\x7f>~\x01;\xf7@\xfc\xdb\xd9\xda\xda\xaa\x11\x18\xd46\xf5X\x9fE\xac\xcfz\x16M\xd2\xac\xdf3\x17\x1cH\xa1\xb7\xf7\xe4\xb0\xf7Nh\xa5\x91\x98j\x01\xd4\xb9\x80\xd4|\xf7\x08\xa5\xddG\x17\xa6\xea''5Q\xaak\xa0\x18\xa9}\xd0\xda\xf4\xb3\xcd\xdf>BA;H\xdaQ\xd4~t1\xe36u\xd3\x1az\xad\xf0Zz-\xd0\x18\x8d;\xf7k\xae)\x98\xfcB\x0d\x96S\x8a\xa4\x95Vt\xda\\t&\x8b\xae\xa9>\xb8\xb2\xa9\x12\xdd\xba2naU\xc6\xcd,\xca8R\xf5\xc8R\x8f\x85\x9d\xf4s3Z?wV\xd1\xcf\xd1\xed\x89\xbc\xda}\xcbe\xa9b\x19OQ\xa3\xa7\xe0\xdf\x17`\x03\xc5\x95s0\x9a]\x85\xe1\xd5\xf2*\xe1W\xe9Uvu\xc6]\xf7@\xaa\xef\xc6\x89\xc7\xa6\x1e\xeb\xfd\xb0g\xaa\xff\xd8\xcah\xe8\xb3\xab/\xbe\xb8\xfa\xf2\xea\xcd\xe1\xd5\xdb\xabwW?:\xac5\xc4\xfalnk\xac\xec\xdf\xbcK\xffT\x8d\xb6\xcf\xf79\xc0\x1d\xeb\x87\xd7\xa6\xec\x1b\xce\x06\xd8t \xea\xa6l\x10\xc0\x14\x97\x1d\xb0\x15\x18A#\xe3\xef\x17\x0eG\xd9Z\xa8S\xdc\xb5~d\xbdk}o\xfc\x93\xc1\xa4\xff\xc3{\x03~\xc1\xa7N,z\x10\xc35\xb1\xf2m\xf0\xe2\xf0\xf8\xf5\x9bW\xef^\x81\x91~\x0f\xac\xb8{\xe8\xc8\xd1I\x93\xa9{<\x1c\xa0E\xd3\x88\xf5z\xd7\x85\xc4F >\x18@`\xd6k\x8c\x14\x91~\xcf\x1d\xf7\x8e\x8f\xa7q\xc27\x7f\x9a\x1e\xa7\x0b?\xe1\xb3\xe3c\x9b\x95\xfdu\xa5\nv\xdf6\xed2\x83\xf6s[7\xb0\xa9\xad\x01\x88\xcb\xc2\x87\xcd\xe3\xce\x1de\xde[!JcN{\x05)\xe9\xd2\xe6>\xcb\xd8\x01\x1b\xb2\x11l\xda\xd7\x05\xbf\xa0\x9e\xc4 \xeb\xf88\x8cg~\xba8\x16{\xfdqqg\xe8\xf8\x988v\xb5\xb8OX\x17\xb9*PR\xf0\xa8\x02#\x983\xc7pZ\xcc\xb4\xf3sf\xc0\x8fULN\xf7\xd1\xa6\xb4\x98\xee\xa6@J\xb2VPx\x15\x86\x95.\xbeP\xd8\xfd\xde.\xf0\xbf\x7fx\x16\xc6\xe7\x07\xd5+>0\xc4X\x1b\xf8\xed\x0e\xb4\x01\xcb\xda\x06\xd9\xe4=\xacu\x9c\xe5\"\xeaW\x17#rdC\x8fEb\xe8\xfbh\x8d\xaf\x89\xd82i\x9d\x9c!\x83pS\x02\xd1\xc6\x96\x8c'\xb7\xc4\x88\x0cw(\xf6\x18\x83\xd7h\xcc\xd8*\x0c\xa6\xbc\x0d\xf2\x9d\xd0\x8bf}\x13D\"rN6\x9c\x88=A\xc7\x11N\x04\x9e\xa0\xd4\xd5\xd4M6\x14\xebm\xb0\x8a\xd1WD\x89\x8f`\x1e\xef\xb1\xcd\xcd\x02H\x1e\xdb\xba\xd6\x9e[@\xe9\x174z\x1c\xbb.\xba\x1dG\x93\xf1\xb0m\x0b\xba\xd5\xa1\x146\xaa\xd5\xb1\x08rW\xb91\xf6\x11\xba\xd2u5\x9b\x80\x8d\x01\xb0\x91\x15\xb0\xb1\x04\xac\xd3\xefkH\x12a\xec\xd0\xb1\xf8\xf0\xc4\x85\x08P\xe3X\xc0[F9j_\xdb\x0d\xc3\xddn\x1d\xae\x0d\x89\x12\x15\xf9\xcd\x95G+\xdb-\xa1\xebr\x01\xad\x14\xc9\x8e\xdf\xd2S\x1d\xd9\x9d\x1e\x9e\xe8\xd1\x81\x1b\xf0\x9bQ\xbe<\xe1\x89\x96\x90\x02\xe7\xa9%\x9c\xc4q\xc8}\xe9\xf4M\xf0\xa6\xc7\xc7@\x89\x8e\x8f{2\x10\xc0Hs\xce\xf7}\xceFe\x1d\xc0d\x9c\xf2\x0eb\xfc\x8f\xdc\x07\xdc\xa1>f\x1f\x1a\x16a\xd9\x0fz\x05F\x80\x8c4e\x03\xc1\x034\xeeU7\xdeHnk\xc8\x8a\xc9\x8d\xf7fK\x8f\xb6{7\xae\x8eI\xe5\xdc\xfdV\x90X\xa6\xa5(\x80{\x10\xe9u\xef\xac\xe2w\x9d\xbcI\x06\x8e/b's\xa9\xfa\xaa\x8dT\x11\xb8\x1d\xa2\x05&o\xaa\x05\xe0{(j\xec\xbb\xfe\xc8q\xa4N>\xe6\x13\xb8|\x90wu3k\xa6\x9cI\x8f\xbc\xbc\x00\x87\x95\xf3\x0ea'a\x07,\x1f\xa7\xc0C\x87\x82\xc1\x0c F\x9a\xb1\x1bH\x03w\x87\xf5[ \xf2\x02\x84!`AL\xd8~\xd4*A\xb2\x12\xc6\xd8F\xa3\x87\x15&\xe6\xce\x1d\x96\x8d\xb7&\xe3\xed \xde\x19\x14\xef[\x82\xbd\x13/\xc3\x89\xd8\x82\x8ao5\xdd`\x8e\xa4\x13Q\x88\xb6\x16QAB\xaf\x0d\xb5\xa1qwF]\x8d\xa3\xa064%U\xdbm0\xc4\xaf\x0bd#\x80\x99\x02\x1d\x91n4\x8d\xe1\x0b\x04K\xcd\xe4)\xdbg\x1b\xb9y8,\xce\xf4\x85\xdf\x98\x8dZ\xfc\n\x10\xb0\xf2\x8a\xc7\x03\x96nnZ\xa5\xabs\xd1\xbdqjq}=\x85`\xa18\xbbs\xc1G\xc0\x166\x9e\x8f\xb7&\x02\xb97\x1c\xf1\x06b\x92\xd2\x93\xcdFS\xac\x0f\xe8\xdec\xd6\xef\xa7\xec \x0b\xad\xbdZ\xb1}\xe6\xa8\xae\xb9V\xe7i3\x10\x0d\xaf,\xb9\x0b1IV\xaf\xde\xc5\xd0l\x04\xa5\xe6\x90\x04B\xdco8\xab\xe6\xd1\x8aG\xc6}\xb7\xd3\xbe3\x86Q)\x1bBQ\xe7.\x94\\\xb2}\x96;3\x8f-<\xb6\xc2U\xe1\xb13\x0b\xc5\x04\xba\xabwy f\x12\x0b\x8f\xcd<\x16\xb0+y_\xeeL,\xcae\xf3\x08\x1afP\xd5\xba\xc1\xa1\xad\xf5\xeai}J\xea\x07HT\xd1\xacu\x86\xbc\x01\x8b\xd8~\x04\xca:\xf3\xb5\xa2\xac\xe4\xd5o\xbd\xc3\xfa\xc7T\x7f\xbb\xf1x\xb7\xf4\xad\x9b\xf2r\x16\x8d\xe0C\xea~\x9fH\xaf\x97\x07b\xbd\xd5\xead\xa1\xeb\xa9\x8c \xbfLy\xd9\x8a\xe7ft1\xa6\xb1G\x91\xa5\x15V\xf0Gb\xab+\xdcT=a>\xdbd\xc3bM\xe6\x95\x83\\\x15\xd3\xfb\xfdH\xa2\x90H5\x9b7\xc6!\x17L\xe0\xe4\x1d\\M[\xf8Z\xc5\xd6\xde\x90\x93\xb5n\xc5u1\x9ade\xb7\xa9x\xa7\"\x9d\xd2\x1c \x14\xaa\xab?Sl\xbf\xaeq\x08ew\xea\xcdL%\xdfTO\x9f\x9b\x9c\xc1J\x0f\xac\xfaLy\xf0\xac\x9b\x97\xcc\xaa\xa5\x12\xff\xb2^b\xa1\x97\xc0M\xbb^\xe4\xec\xe6\xc2S\xc5\xa2,=v\xea\xb1K\n\xffO\x04+\xe2PG\xa1c\xc8\xc9\x88\x9cs\xb6\xcfN\xd8\x01\x9b\xb1\x11\xcb\xc9\xba\x87l\x9f\x1d\x17%\xa86.\xc4^/\x1a:\x17\x9c\xcd\x8a\x1d\xb0\x05\x1b\xb1sW\xfc\"8\xa6\xb7\xa2\xb8h\xf5P/~h+\xfe\\5|h.\xe7\xe7bK\x0fA\xd7e\xaedX\xa5!\x9cb\x8a\x8d\xd2\\l'\xe0+\xc5\x83A42>\xc5\xf76.\x8a\x06/A*x\xa964\xd7c'\"e\x8a\"\xdb\x98\x98\xb5\x11\x0bd\xeay%\xc3\x1c\xdb\x86\x13\xb1;lN\x0eM\xcc\xf6{\xb6\xcf.@\x0c\\\xb8\x96\xe9\x1d\x1f\x9f'\xfej\x05\x82jb\xa2\xc4\xf3\x8c\xed\xb3\xb7Z\xb5\xac^\x8d&w\xef\xc5\xb8\x9e5\x9d\x07_\xb1}\xf6\x9e\x1d0>\x00Wr \x11mp\x9a\xfe\x9a\xed\xb3g >-\x8bg4[d\x05\xf6\xa9\xf3\xcac\xaf\x15\x1c/\xdb|^\xd3l\xd0\x06L\xaac\xb6\xee\x9b\xd3w\xfd\xad\xd1\xd8\xea\xe4\xc1o\x9b6\x96\xd9\xdd\x1ev\xf5\xe3zv\xcbf\x1du.M\xb7\xef\x80\x02\xfel\xe6\x80w\xe1\x1a0\xc4\xe3k\xf4\xcd\x9f\xcd\xc0\xabP\x99\"\xb6D4\xca\xf0\x0d\xfb\x8b\xa0jj\xe1\x93\xf0\xad\x037\xba\x99\xae\xa6\x13O$w\xd3\xc8\xed\xb4s~\x9f\x8cX\xfb\xb7\xec\xbae\x00\xbb\x93\xb5}\xc2\x8a\xd06/I\x86\xb9\x93d\xf5\xb6(7\x17\x14\xdf\x90K\xfc\xafo\xf8\xa9L\xaf\xb7\x13\x9a\x1b\xbb\xe0\x01\xb6\xcd\xed\xbf\xd8\xa3?E o}\x93\xae\xf0\x03\x9f\xf9\x99aiZa\x05\xc0\xa3e#+\xf0\xa5\xbf\xa2\xf8\x00-\xd8\xfb\xf2\x84\x1bM,\xf5\"h\x97R/r\xaa\x17y\xcb\x0dn\xe3\xb2\x92\x0f\x12\xf0z\x91\x93J\x11\x10\x81\xd7\x8b\x1c\x1b\x8c\xcf\xa7\xf9|nv\xf8\xbc\x066\xffG\x01?\xaf\x17:,\x9c\xaa\x15\xeb\xde\xe2\x9b\xea\x02\x18\x83\x03v\x88\xfb\xc2\xabyg\xd7k\x8aX'\x1e;\xf4\xd8[\x8f=\xaf\xe3~z\x1e\x80\x0f4R\x8e\x05q\xdc\xceGF:\x93; \x1f\x9c\\f\xfc\x0bd\xf77\xc41P\xfb}u\xc50\xff\xd5|\x9e\xf2\xac\xcc\xc7\xdf\x8d\x1c\x88x8x\xa3:\x01\x00{\xd2\x1b \xfe2\xcbCG\x8f\xe9\x8e\x16:\xcb\xb6\xden\xbcu\x04u\x8f1\x18\x0c\xbce\xaeKl\xfe\xf0\xb5\xb9\xf95H_Y\xd2\xcf\x1a{\x178}\xee\xb1>%y\x86\xda\xb3\xc6\xda|\x10\x81Oq1&x\x03O+K\xe53\x1c\xc2\x9d\xe0\x0fK\xf3KK\xa7/\x9b?\x8b\xfa\xa0~\xc5(\xa9R\x7fA\xd7W\xbcZn\xa9vj\xaf\xf6\x0c5\xfd,\xb4\x8b\x8b\x80/sD\xfb)x{\x85\xb3\xde\x86\x12R\x00\xbb\xfa\xac\x15\xfb\x14\xfb\xf6\\\n\x1b\xec\x9f{U\xb4\xf5\n\xe0aa\xd8\xd8\xd5>\x9bz\xecyy\x14\xb5\x7f\xf858\xb4{\x0f\x88\xf8\x1eC\x15\x94\x0b\xb8\x91!|^\nm<\xf6\xda\x02\xde\x13\xfb\x8a.\xf9\xf8\x0b\xe55P\x0cJ\xfe\xb0J\xaf\x99\xb6\xce\xda\x94\xcf\xed[\xf4\xba\xec\x9c\x0c\xe1\x04\xd3K\xcb\xaa\xb8\x195\x82\n\xa5\x0e\x0d\x8e\xfb\xfdl\xc2\xf6\xc1\x86\x9e\xd7\xee\xa2\xb9\x1fC\xc4\xf5q\x86\xd786\xbe\xf6\xb0\xecv\xb3\x8f(\xf1\xc7\xd0\xe4xn\xe9\xb0\x8f\xf2\xde\x94\x02\"\x08@\xd8\x1d\x16\x9bp\x9c\x82f\x8e:\xcb\x0b6hJ\xf2\xffb=\xcc\x05\xe1H\x9c\xcc\xd5tC\x1b\xa1\x95z\x14\xd1\x8a\x04\xe34\x7f\xccV\x0dJ\n\xc1:M\xc7+\x8b$\x7f\xc3 A\xc0\x00^\x9aG\x9aA\xdb\xcc\xed\xa8\x95\x10\xdfX\x80\x190E\xc1\xc47`4\xa9\x0c\x87R4\xba \xa8\x98\x12\xf0o\xd4\xbc\xab\xa6\xba`-U\xf1P\xea\xdf*\xa0\"\x18\xb9P\x1c\x9eV\xec \x9b[!s\n\x1a\x10\x05\x1f\x8b\"\xe4\x12,\x07g\x16\xf0\xf9n!\xfe \xe1B\xe5%\x1cWg\x80E\x1c\xf0g\xc4|G\x9c`!\x15\xd1+\xb5)~u\x05\xc4 ;\x10=\xdc\xdf\xc7\xd3w.\x1bA\xd4\x84vO\xecJb\x90\xa8\xd0\x14\xfc$\xe1\xfe{#\xc7T\xe1.a{\x03\x9exZ\x1a\x92\x83m\xc6\xac\x89>\x83\xea\x07\xf0wi\x03\xfc1\xb0\\Z\xab4\xe8\xcf\x81\x17\xd3\x8a\x99\x03:\x16\xeb\xe6\\|\xad\xda\xc9@F\xec0R3\xd4D\x91\x01\x06\x8fE\xde\xb1.\xa6\x86\x14\xb2,|\xf3\\/{\x8eF\xdf\x08\xfa\x0e\x1bX\xaao\xa1\xc5\x0f\x81\xe0g?\xa8V\\\x9f\xf4\x13\x87\xcfJ|\xc7\xcd!F\x83\xb5 (\xd0\xdc|\x0b\x03>\x8e'b)E\xec K\xacK\xc9\x87\xa5T\x8fZ(\x9e\xcc\xf1\x01i\xd1\xac\xd9 \xc6q\xbf\x0f\xb1\x0e;\x80(\xf8\xde\x00\xa1\xa23\xaa\x91\xf2\xc7.K0(cf\x04'\x91\xbdKZzg7E\xa0\x05\xf9\xf7\xa9\xfb\xe2\x94\x94\xbcm\x0b\xb3\xc8\x1dbiZ\x9eHf\xeb\xc6\xd0\xb5|\xa7\x953[\x170C\xcbMz\x03`>\x84)-\xc1\xe3\x8f\x0b\xf0}\x1e\xc6~\xb6\xb3-\xb5\x08\x80\x80\xb5\xcc\xdd\xfbt\xe6\x8b({h\xcd\x19\xeeZ\xb3l\x1f\xfb*\xb06\x08Y\xcfC\x7f\xb9\xe23{ \xdb7E^\xe5\xa3\x1b[\x9e\x9e\xafaP\xad&\xdd^E\xf0P\xcb+\xe48\xb5\xf4R\x08afp#Q\nr\xea\xb3!q\xc5\xc8\x00\xa9N-MIrj\xc9J\x17TKVB\x9dZ2\x08r\xeaiRxSK\xfe1\xf7\xdf\x17\xfd\xd8\x18z\xeb-\xc1@.\xc1\xd8\xe1E\x94&\xb1\x1fm\xf8c\xb1*o`\xdaK\xfb\xa0\xd85\xac\xdfn\x81C\xae\x8f\x0dc5\xe9\xf1\x98L\xfb'u\xf6\x18O,,[$6\xe7\xc2\xec\xc6\xd5\x9c\xf6G\xae\xb9\x91o\x00\x03~\x87e\xa8\xea\xb5\x10\xe86\xcb\xd7\x86\xb3\xc6\x9e\xebh\x81\xb6<\xd93\x8b\xe9\x05}\xfd\xc8N\xe5v\\\x07\xae8y\xac\xa7\xd6\x8b\xed\xe2\xd9\x0d\x9a~\x9d\xc4\xcb \xe5\x1f\xa1\xe5\xb7<\xfb\x08\xad\xca\x95uK-o\x1b\x97v\xe5\x8aX\xdf\xc0\xb3\x12\x856.B8gE\x00\xda\xa8\xe1\xf4\x15\xc0\xf1!\xb2\x1c.\x90m\n(\xb6 \x99\x0f\xe9\x06\x96\x95\xd2E0\xcf\x9c\x06D\xd5.\xfe\x03k\xd1\xb64E\xf9\xc0\x89\x8b\xbd\xcb\xde\xb2x\x00\xf8q\xc3\xa2\xa2)-\x99\x8aS\xe1$\xec\xa9\xf4%\xa6\xf6\xbc\x91\xd8\xc0Y\x9f9\xd2\xc8\xfd\x80\xf5\x9e\xdc\x13TM\xfe\xee\xb3\xde\xd3\x9e^Jn\xa0\x82\xa1\x8aD\xe9\xa3Hf\x83\xa6\x10\xe4\xa0\xd4\xc2\xb3\xcfb`\xdf\xc2\xd4)kC\xc7\x138J\x96\xbf\x07\xfej\xc5#\xf0\xef\xe0\xe9\xf84\xc0\xc4\xb8\x92\xa8\xcc\x18\x9c\x0dq\x06\xdd\xd8\xeaB\"\xe0N\x06br\x01\xb5*\xbc4pi\x80*W\xbf2s=`=\x86e\xb5\x072\x0e\xd6\xabN/\x8a3\xe6\xa7ip\x1a\xf1\x19\xcbb\xe6\xb3\x95\x9f\xf0(\xdb\xa0\xf8\x07\xf5\x9ci\xfe\x91\xe8^\xaa\xa7\xf4H\xa3 f\xec\x0d\xe7\x8e\xd6[IT#\xaf\xd2\x02\x8a\x80\xfa\x82\xc1P\x94\xd6\xf5\x9agE\x7f\x14{\xe9P\xbc\xa2zlT\xca\xc2f\x08\x9a\xd7uJ\xb4\x0d\x17\x0d<\xc4\xd0\xe0\x84\xcb\x95\xd7\x1d\xc1\xe7\xaa\x1c\xd1\xd3\xce$\xd3*\xfa\xac]d+~}pK\xc7\xc3\xce\x83\x07\xf2\x80\xdd$\xe8W\xdbyu\x80\xbd;\xbd\x11\xeb\xdd\xf1\x97\xab\xc75\xa2x\xb7wW\xe4\xfc,\x8f\xb3zV\xef.VZ\xc5\xa9\x91\xf5\x04\xb2B\xb3\xceS\xc88\xcd\x1ek\xc1\xfa\xda\x04\xe3\x16\xa9\xb8$^\x92\xb2\x01\xf1*\xc4=\xce\xf8N\xef\xc9\xd3\xbb\x18c\xa1U\xd8\xa6\x04\xccFP>\xe0\xd9\xca\x8e\x92\xd0\xad\x91G}\x08\xf1\xe3\n\xdc\xa5\x19\xc1\xa3\x1dwpx\xc6\xa3\xecp\x19d\x19O(o\x1f\xe6A:\x913\xbd\x08\x0cu\xb5x\"\xe7\xe1\xd0ub\x0f\xfc\x97\xc4\x837%\xc5\x14_\xbc\x0f\x89?N\x82\xacH\xdc\xdd}\x00\x89\x9f\xe5\xab\x90_\xc8\xa4]Hz\x97\xf8Q:\x8f\x93\xa5L\xdd\x83\xd4\xd7~\x9a\xbe[$q~\xba\x90\xe9\x0f!\x1de\xe2x\xb0\x8bu\x97\x1f\xc1\x8a\xb7\xe97\xce4\xdf]6\xc9yL\x9fF\xf9\xe0\\\x0d\x07U \xb8\xd5\x88D.j\x80\xd5\xd8\xca\xcfS\xae\xbd\x1a\xc7&\xfa\x93\x01I\x85\xa2r\x1f\x82\x16\x13\x9e\xe6\xcb\xca{\xe3\xa9,\x1a\xc4Q\xc1\x92\xc5`,\x08 \x89\x1fD=\x8f\x05\x90r\x1c\xa4o\xb3Y\x00r\xfcL\x1b\x18\x1e\x9e\xc1\x119\xd4\x12l\x9c\xc7r`\x88\xc4od\xdb<\x96\xd6\xa5xg\xd2Ztch\x83oN\x0e\xd6\x87\x8f\xf9r\xc7\xe5H\xc7\xbaA/\xed\xd0 y\xa9\x8d\x0ff<\xcd\x92\xf8\x12\x17\xb6\xfc\xd1\xf5\xb3!M\xb7\xc5\x16:u\\OZ\x02$\x830H3\x1e\xf1\xe4\xb9\xd8\x87\xa4\x13\xe1\x1e\x17\x9bi\xcfU\xfbk\x9d\xde\xd2_\x9cZ\xd1d\x19\x9f\xf1/\xe4wjsndj\xf3oV\xd5\xe7\xb9\x9eW\xce9Y\x13F$\x98%\xea\xabz\xae\xed\xab\xd3\xc6\xafN\xc9v\xcb\xdc\x86\x95\xa0\xc8-br\xa5\x9f\xf5\x14\x1d\xdb\xa7\x06\xb6O\x8b:\xd5\x14<\xca\x08\x02\x04gL\xaf\x95\x86\xbb\x10`\xa9\x89\xac\xf7\x04!I\xb3$\x98f=\x92\xaa\xdf\x1f\xba\x03\xbc\xadDZ\x08\xec\xb6z\x9c\xaf\xe3R\x81f\x9cD\xb3\x8d\xf6m\x8d\x15\xa6\x91\x9ci7E3Wg#\xdf]\xae\xb8d%\x9f\xfb\x91\xe0&\xc5>\xc3|6\x0d\xfd4e~\xca\xfc\xe2K\xc4\xb9\xf0C\xe9\x86\x1b\x19\x9e\x05\xf7g\xd2LK\xa6d~\x10VS\xe4y`\xdf\xea\\\x99i\xbb\xbc\xe9E\xaa\x99QS\xbc\xad\xe5h\xe9g\xbe\xd5;Y\xc4/2\x94G\x99\xe34y3}(O\xc1\x16\xa9\x18.\x88}@Q>\xaa@%\xab\x82$\xf3\x98\x8c\x01\x80\xcdT\xa1\xe1U\xc6\x9eG \xfc\xfe\xf8\xc3/\xfa\xdb\x05\x062\x06\x89\x06 \x10\x06\xebc\xac!\xc6:c6Fl#\xf0R\x00V\xb6\xdat`\xe5\xeaH#z4\x10\x10\xa1\xcf3\x12\x01\x87\xc6\x10\x0f\xaa\x03\xaa\xe1x}\xca\x8b/ \xf0\x16\x91A\x949\x05a\xce\xde\x04\x11\x15\xf5\xae\x11\"M\xbdkY\x81\xd5\xaf\xfd4\x0e\xda\x1d\xb8#\xfc\xf7\xeb\xf0\x97\xd0\xa3|\xe6Tn4\x15\x9d\xc5kM=\x14\xc7\xc3\xacHoH\x02n\x8f]\x16\xb1\xfe>\xe8\xc03\xcb\x9c\xd1f\"5\xf8\xc5\xd1\xd4o_D\xcdcJ\x06~\x18\xc6Sg\xcbb\x8an`LQ\xb3\x0d\xedJ\xc8\xc0\xb19F\xb3)\xf9\xbd\xaf\xa2\xd4\x9fs\x87\xb3\xa7O\x9f\x82x\xd2\xaf\x82/\x17\xd3\xf9\x98\xf9\x8f]\x00\x9c\x0f\xdf@\xa8\x06x\xa3>\xf7@\x97\xb6\xbaD\x9b\x1fQ\xa5\xaf\nV\x0c||\x04\xba\x0d\xc4\x81\x01\xe2\"\xe1\x83`\xb5d\xf4\xb7 JW|\x9aU~\x0c\xa6y\x9a\xc5K \x13\xa5t\xa6\x98\xa0q\xbd\xe0\xa4 \xd9\xd5j.*\x11r5\x1c\xd6\x88YI\x8e\xe5\xf2\xa6(\xae]\xfa,to\xa0/\xd2\xc6k=rw6H\xa2\xb6\xef\xea\xeeN+nH\x8eD=\xb0\xefC0\xcb\x17\xcb%\x9f\x05~f\x95jH\x05\x0d\x1a\x19I\xbf3\xe6}7\xfd \xe1\xa2\xbb=\x7f\xda\xa0\x9baRw\xc3\x07\xb3x\n\x922{\xb9Uitt\xca\xb3\xd7\nI^\x81R\x83\xcc\xb0\xba\xb0\x12M\xad\xc0\x92D\xc0\xe4]\xb0\xe4q\x9e\xc9\xe8\x88\xdc+\xfd\x1c\xac\x92x\xca\xd3t\xd2\x835\xfc\xf3\x0fEpIy!x \x0b\xa0\xb1m\x1b\x1dQ\x8f\xa6\x07j\xa4\xdc\xfa\xb3p\x88\x0b_\xea\xb1 \xb8\xd8HG\x9d\xa6O\x80\x12u\xb0\x8a\xd3\xecK\xe9@M\x9c6\xf9 X\x8a%\xf9v\x9a\x04\xab\xccj\xef\xa3\x1eE\xc47\xb6\x9a\xa5\x88LJ\x12\x05\xb3nu\xd1\xa6?\x05\xf3W\x94o\xdb\xf4\xeaOF\xeb\x10\xf4\x07\xf7\x86\x12\x02N\xaf\xe7\xb1\xde'=y\xaa(?\x1c\xd5o\xd9UZ\xa1g\xc2qA\"%\x9b~\xbe\xf0\xa3\x88\x838\xdb\x01{J~\xce\xaaY\xee@\xc0}H\x0f\xb8\x11\xb9\x16\x0e\x07\nn\x93y\xae\x81\xa7\x01tb\xbb\x02\x14\x0b\x16\x82l\x0c\x16b/\x8e\x12\xee\xcf.\xd3\xcc\xcf\xf8t\xe1G\xa7\x1c|\xdd\xcc\x07\xd3\x84\xfb\x19\x97\xa2w\xa7\x97\x02R\xf5\x04`\xc0\x8eq^\x90\x00Yd\x9d\xae*\xd4\xb3~\xc5\x8e`\xd9\xc0\xec\xf1:\xe8%E\xbdt+\xc8d\xc5\xf2d\xfc|\x11\x8430s\xced\x9e\x1d\x8fD-\x94m\xabZv\xc0w\x87SI\xed\x9c\x85\xc7\xb6\x8c\x1bF\xea\x11\xa4\x03\xc43=}\xcf\xf8\xa1\xd8\xed\xe0\x16P\xe2G\xb3x\xe9\xc8@\xb5\xc8m\x14=h4a\xcc\x06i\x9c'S.ob\x08\x8c\xd1\x83sI\x1b\xa5\x812\xe9\x93|\x172%A4\xe3\x17\xaf\xe6\x8e\x0f\x02\xbd\x85\xd3\x97\xe9\xa0pq\x14\xd3b3q\x14\xeb\xd8\x9f\xcd@\xd8\xaad\x14\xb0*\xeb\x89NO.\xba\x1el\x7f\x1bC\x10\xfc\x0e\xfc,\xf3\xa7\x0b(\xe9\xf4\x8a\x85)\x052Ig\x00T\x89\x8c/XX\xa43\x96\xf9\xf5p\x93*&\xa1\xf3\\kR\xb5\x8d\x9a\x19/\x97DGy7q\x80\xd1\xe6MF\x7f\x156\xbd48.\x14\\\xea\x10\xb1 \x11\x0f#\xe4>#\xf6DwM\xd0\xef\xbb\xca\x97@Qo\x0c\xaaA\x8b\xdd>\xd3\xec\xbe\x9aW\xa1\xd8\x8fO\xfc\xe9\xfbF_\xe3\xe2\xf1\x93\xd3\x942\xb8S\x0fq\xacU\x8f\xdc\x86\xc2q:A\x01w\xe2\xa4\xae\xc7\xd2~\xdf\x86p+<\xa2\xe9sG\x1c\xa4\x1b\x8c\x08f\x0d\x16%\x18\x947\xac\xdfhd-M6\x18\xa9\x80t\xd4\xa5\x88\x04\x0d\x94\x86\xe88L#\xca!\x19\xebV=p\x85\xad\x8d\xc8N ?|\xf5'K.;p\x02\x1b\x1dW\x8f\xfe\xa8\x81\xa0RW\xa0Y;\x83\xa3\x9e\x04\xea \xack\xee\xbdz\x94\x91u\xd2\"\xbb\xa0\x1e0\xbc\xde\xb2\x1b\xdfRO\xa3\x01%\xf5\xb4\x98i\xd7\x1f\xe8\xd3p\xdd>%\xe3-\xeajw\xd3s\x9d~m_\xa7_\x1eK\xc6\xc3\xef\xa3w;\xd7\xef\x9d\xf8\xbb\xfd\x91\xfb\xd8j\xebM=\xa0\xb0\x0fA\xe4@\xd8{P\x0f\xcdQWJ\xd8\x98\xa3\xa2\x00\x9b\x07\x91\x1f\x86]\xe8\xc3\x0c\xd8\xb9i\x87\xf3\x825\xb7\xab\xe1oM\xb6\xe7\xf4\x8a\x98\x05:/\x94\xf2p^^aW\xf7W\xb3E\x90\xc2\x0d\xd7\x11\x14\xd0\x94\xc0\xba\x11\xc0\x0e\xec\xc5v[\x80\xee\xd7\xa2\x8a\xed\xc3B6\xed\xc4\x17\xadV\x06a<\xf5\xc3\xb7Y\x9c\xf8\xa7\xbc9\xe6\xda\xd4\x07\x02\xd8\xe6\x15\xa45\xda\x19\xd3U\xca\x95\xef7\xc6^\x97>#\xc0\x9c\xac\x97%9\xc7\xc3?\x9e\xfb\x9d\xc8\x1dd\xf1\x17\xf19O\x9e\xfb\x84\x06Y\xff\xd5\xf9^\x1fS\x97a\x9c^\x14\x7f\xc6W \x9f\x82\xe9ZO\xbb\x97g\xf6Wi\x9b(\xd7\xaa\xf5\x9b\x82M\x1b\xfe\x06ycS/\x119=\xd0\x10\xd5\xbaV7>\xb29\xf7f`\x90\xd0\xcb\x12\x7f\xca+M\xb0\x036\x8d\xa34\x0e\xf9\x002\x1d\xf0w\xa4\x92\xce\xfd$B7\xe0\xb0\xf7w\\SL\x17\x17 \xa9\xc9@%UZb\xb5\xadC\xebR\xea\xb4\x86hA\\\xc5\xf9N\x99\\j\x0cw\x86\x96+\xe5[\xbbd\x00\x98\xc0\\\x1f\xa8\xdc\x03\xc2\xa0\xe9\xf7\x82\x12\x890v\x98\xe1N\xbb4%!\x02\xe8\x8b'\x1e\x04\xd1\x82'A&\x1d\xc1\x0c\xc1\xd2C\xa59\x01\x9a\x99\x04\x9a`\xfd8\xd3\x8cF\x9a\xa0\xc5\x007\xf0\x94\xdc\xea/\xa4\xc1\xb6&r\x86\x8f\x1et\x9a\x9fj\xad\xdd\xebT\x1a>\xba\xef\x96f1\xd7\xac\xaf\x19\xd0ti\xa1M\xe3\xbc3\xa4\x02\xe8\x8bt\x8bK\x82\xbd\xf6[\xea\xf5\x89\x92\xaa\x08\xbc\xac]\x1e\xe0\x0c^H\xa2\x9b?\x88\xe2d\xe9\x87\xc17<\x81k\xa9\xa0\x96s2\xed\x8678.+\x95\x0d\xa5G\x0c\x7f\xe0\xa7\x97\xd1\xd4E\xcf\x04\xfe`\x95\x04\xcb \x0b\xce\xc4\xd6\xa7\x8c`\xd8A\xf5\x13p\xb1z\x0b\x0e\xeb\x19\\\xb3\xc0\xaaF\x89m\x17<\x7f\x8f\xea\xb5\xb5vE\xb1\x1d\x17bQU\x13\xf70Q\xbc>\x84f\x8a\xae\x82\xe5\x8f\xb3\xb7\xf5\xc8\x95Q\x8d\x96\x8146r\xf6\x86\xa0\x9f\x19\xcc\x82t\x15\x97\x89\xbb\x90\xb8\xf4/\x9e\x9d\x16i{*M&lc\xcd\x84\xcf\xc1@\x85'*}[\xac8\x81(\xfe\x9a\xab\xa6\x0d\x91v\xf7(D\x02\xa1\x8f\x7f\x92\x9a\xa8\x049\xf30\xd6\x1dbwC'\xa5>J_\xfa/\xd1_\x05\xba\xe8\x00,\x11Get\xa7\nN?\xee\xdcaA\xfay\x10\x05\xe0\xa2\x1a\x1c\x0dq\xf0\xf2\xe1\xc4\xd2\xdfP\x9bQG'0\xd4\x88\xc3\xde\xb6\x0b\x82[\x18c\x1a\x9cF0\xf5\xbb{;\x9d\x88F\xfb'\xac\xfb\xb3Re\x15\x1f&\x17\x18m6\x05h/\x0d\xe0\x9c!z\xa5\xdbT\xbf7\xb7\xb7\xd6u\xe7\xb1\xc60\xec\xb6\x99\xdadz\xe5\x8c\x03Q\xd0=\xb2pi:\x81>pn\xa3\x9f%b?\xa0\xbd\xd2\x0e\xef\xd7\xfd\xdaH\x02Y\xf7\x98$\x03V\xee\xd1\x01+\x05\x9dm\x86\x0e\xe3\xb4\xb3\x81\x08oCUgX\xec\xe5\xe8\x10\x03n^I\x97\n\x15\x9a\xebjtG\xd1\x1b\xc2\"\xfc\xd5J|\x1d\xf3 l\xe8\xca\x9f\xf4\xb4\xe6\xce\xa8\xe5\xcc\x9bbEt\xd8z\xa0\xda =6\xf7X4\xe6\x13\x88\xe9\x81Nx\xc8K\xe5\xb6\xe3\xea\xad\xe0\xf2\xae%\x16\xe0\xce\x90\xf6K9\xbco\x89 \xfcp\xcf\x1d,y\xb6\x88g)Ejw\x0d\xff\xc0\xa9\xe4\xec\xeaG\xa8\x90^\x0cp,\xac\x96\x9cv]6\xf3re\xa0\xa6\xb1\x9a\xad\xd9(\xa0(G\x12\xcb\x80\xd7\x86\x82!1\xe3\x9a\xdf\x80\x05\xa4\xf2e\x90uXX\xc4Q\n\xec\xbb=vVD*\xf5\xd8\x89\xc7\x8e!\xc8\xec\xa1\xc7.0\x9a\x96\xc7\xde{\xec\x99\xc7^y\x10tk\x0e\xe7/\x9a\xe2c\x00\x11y\xa1\x14i\xb9\xdc\xbd\x0b\xf14\xee\xd6\\#\xe8\x1aW-\x10\xff\x02\x9cu\xea\xc9\xae\x07Qq.\x06\xa7<\xf3 \xf2\xcd\xc5 \x15\xaf\x97\xf0\x8a\x9a\x0d\x0f\x02\xd9\\\xa0\x06\xc5\xf5J\xc1\xcc \xe1i\x1c\x9e\xf1$\x85\xe6_\xc9\xad\xa5H\x15\x8b\xfa\x19SA\xf3\xed\"-Vn\xc0\xd2\xb4\xaa\xa0 &\xf9\x10\x1b\xf2+\xf8\x1e\xf8\xbeq\x02\xb7\xec\xd2>n\xd2K\x91\x08\x8aIb\x9b|-f\xab8\x89C\xe0]_Z&\x9f\xf2\xac\x07\xab6@s<\xd7c\xaf\xc9\xe8%\xa2\x0f\xe8tO\xf0LAi\x808-\xe8 \x9e\xe2\x83\xf1\xd6DP\x80\xb0\x9e\xae\xfa\xbc\x8f\x9e\xa1\xecB!bd\x8a\xb7H\x9c\xde\xf3 \x99\xe6\xa1\x9f\xb0 :\x8b\xa54\xc7c\xbd\xe7/\xde<\xff\xea\x8bgo\x8e_\xbc\xfc\xd1\xab\xe7\xcf\xde\xbdx\xf5\xd2\xa6x\x17\xad\x9e:\x01!\x8bA\xa5\x92\xe8C\x03\x18o\xa9'r6^\xa3J2\xf6\xd8s}^R5/R\x89/\xf8\x90*\xfd\xf4\xd8\x99[x\x15\x14\xeb\xa3Q\xe0\x06\xc7gzV-C\xc5\xbb\x02\x8dh\xa3\xae\x13\x14\xa8[\xe2\x90\xc5\xaa\x10\xf4m:\xb2\x97xT\xc7\x97Rf\xc6F5$s=\x1b\x9a\x17\x9d\xbe\xe5IB\x93\x000\x19&\xa6\xa9\xb8C\x8eV\xad\xa6'l\xdd\x93\xfa\xed\x92\x02\xfd\x8e'lyRT\x0c\xab\xd0\n\xa6\xb8qZ\xe3*5\xa0\xfc\xda\xc12\xbd)5h\xe8\xdc-O\xdf8\x16k,\"'/V\xf3\x16U\x82\xf21\\c>\xa9\xfc\x8f\x93\xe04\x88\xfc\x90T\xf8+n}\xc4\x9e\x99\x99\x92\xd5\x7f \xde\x83`\xb7W?\xcd\xb2\xa7<\xebr\x15T\x0e\xf2U\xc1\xe8\xbdr\xb8\x0b\xbb\xdc\x01[\xa2\xb3\x07\x89\x14\\L\x86I\xf5\xcc//\xfct\x8d/[\xe6\x91r\x12o~\n\xf7\xdb._\xb3\x900\x86\xfd\xa5{\xc00\xaa\xfa\x9d;\xec\x12-\xa5\xd8>{\x0d\xbc\xaa\xb4`\xc0\x1f\xefu\xb4\xc0\x9c\x1e\x86\xa8\xa3\x1cE\x99\x83\x006a\xd4\xae\xf2P\xa2\x15\"N(\x83\x80\xc8w\xee\xb0\x13q\xe6\xd3X#\xaf\xe8\x18|\xa5\xd7\x15\xb0q4j?\xb52M\xa0#\x16\x7f!\x10y\x0bz\x0f6\x02\x1b\xac2\xf9y\x91,\xa1TZRA\xfcW\xf0\xe41\xab\x08\xf5i\xdf\x15f\x7f\xc5\x18Glaf\x14\x87\xe1\x0e\x00\xe6\xc8\xd9\xca\xe5i~\xb6\xbe\xbc\x8fMV\xcd~\x95\x05-\x8b\x1a\x883.A8\xe5\xe1\xf1\xae\xe4d2\xe0d\"\xe4\xd1\xfc2\xc6]\xbdC\xeb\xec\xe9\x85\xa8[\xb6&7\xbfj\x93\xacmi\x11\xe4\xa3\xdcTp\x17\xf1\xcb\x00}\xf5\xfe\x9e\x83\x14\xbd\x95\xf5\xe0\xad\xb0\x93\xdd(\x87.\xf7\xdc\x91\xda\xef4\xb0r9k\x02\xa0%u\x8b\xb0\xb3bE\x9b\x82\x97\xc3\x8f\xd6O\x1f\x82\xd8K\xd8\x93\xdd-\xb1\xa0\xa1\xe3\x1210\xe6\xbe\xd9\xff\x95\xf3\xcc#\xfa\xac\x0b\xbfF,\x00\xd7UV\x12\x1b8\xc7D\xae\xa4]\x81\xe3\xab\xd3\x8e\xf9\x15\xd8\x89\x02\xe7\x9c\xca\x83\xbd\"p\x0e\xcd>\xfbE\xca\xad\x1c\xf1w\x86T \x10q$\xb7h\x99\xea\xe2-\xb1\x97\x83`r0\xf5WY\x9e\xf0\xb7\x99?}\xff.\xf1\xa7\x9a(\xa9\xe2\xab\xa3U#\x15I{D\x94wR\xd1n\xf3\x8aphH\x88\x90\xd2\x9a\x90\x89<\x0b\x07N*\xddm\xe5\xb8\xa9I\x8f\xa4\xca\xa9=hdR\x19\xd50\xc2\x9b\xb8\x81*\x1b\x0d\xa6\xf1L\xe0^\x0eWu \x08D\x84\x8c\xea\x9a\x0e\xa8\xd7\x90\xc7\x93j\x05\xdc\x81\xa5\x90\x02}\x85t\xd7.H\xf7n\x0e\xed\x15e\x1e\xc7#\xd6K\xfcozu\x1ae\x96=\x11\x18\xdf\x9b\x9d\xfb\x1d\xcaf\xc97\x97#\xd6\x13\xffz\x06\x8a\xf3\xc1<\x8eY\x9f\xf1\xc1\x89\x9f\xc0\x7fQ\x0eh\x83\xe8\xca\xec\xdc\x87z\xb7,\xb8\xdd5\xa2B5Hn\xd7\x08\x9c`\xd1\x10\x94\x17q\x02\xc3\xe4\xd6c\xdb5\xbe\x1blu\xb9.\xe9\x04n\xb4b\xa4M\x8a\x1a\xedV<|\x9c@\xfc\xd1qBX\x9b\xb6\x9a\xecD\xe8\xac@\xac\xebV\xf3\x0bd\xf8\x87\x8f\x99\xcf\x9e\xb0\xf41\xeb\xf7}y\x85\xadX\xa0\xfe\xc4\xc3\xf8\xd4\xca=Q\xee\x9a\xea\x13\xcd5KT\xe8EHL\xff\x18\xaa\xc3\x87CT\x1dj\"vT\x1e>\xdc\xfe\xd8\xcaCz\x12\x15\x8f\xa1\xf9\x96\xed\x15Z\xf5\x1ex[\xac\xceC\xe3\xa4\xd26X\xb7-P\xa6\x94#\xda\x00\xda\x96S\xbd\xe3\xb2\xd31x\xc3-\xe6\x06\x8fg\xeb\x1a\x9f\\\xab\xef\x04\xc5\x94\x9f\x18\x91\x97\xa6\xf0\x16\xda\xc8\x98\x9ak\x0e\x1c\x86}\xe7\x0e\x8b\xc7J11\x11\xebr\xdd\x10\xb9\xed\xa8)\xd0\xfc\x01\xe2\xbf\xbc.W\xb9s\x9b\xf9A\xa4V\xc3\xee\x0dV\x83\x82\xb6N\xe6\xd7\\+M{]R\xf6Ulz\x1b\xcae\x88Ju`\xf7R\xbe\xeb\xeby\xf38\xee\xdd\x8e\xaa]\x0d\xd3\x00\xa5\xbc\x0es]l\xa8\x1d\x11+\xcae\xf6\xf46\xf5\xef\xb5\xeb\xa4\x9er\xc8N\xe9\x80\xe6\xb4^t\xd5Y\x953\xeb\xaa\xcaY4\xabr\xce,\xaa\x9c\xda\xe7\x96]5>\xa7\xed\xc1n\xab\x15.I\x8a1\x8d\xa3yp\x9a\x83\xf6\x95\xa6\x1a\xbc\xd0\xce\xd2\xae\xaf\x95\xa7\xa4&\xba\x92\x1b\xdf\x164*i\xe3V\x98\xe2X\xac\x87\xb69\x185\x9c\xea\xb8\xd7;>\xe6\x1c\x0c\x07\x0e4\x07s\x90&\xcer\"\xe9rp\xe6\x87\xb9\xe0h\x16J\"sV\xab\xed\xb1K\xd7\xd3\n\xcab\xd1\x98O\xd8\x01\xe5t]\xe6\x88\x7f\xe8\xb1\x0d\xacO!u\x9f\x8dQ\x9b\x9aM\xca$\xe9\xad\xa3\n\xb1\x1a\x8d\x8f\xa6|\x04\x94\xbe\x1b\x94<\xdd'\x98z*\x80\x8a\x95[>c\xb9F]\xee(J5u\x8c5\xe0*\x992\xdah\xb7\x8a\x05\x07;\x02\xba\xaf\xa2i\xe1\xd4\xe7\xf8\xb8#(\xe6\xf3\x11\xf0\xbe]!!\x89\x04-\xe7F`l\xd0hS\xf1\xa7@\xd7\x97q\x80J\xc4r\xc7|\xd2\xa1\x9e\x896\xe8`T\xd46!\xc6\x14\xeb\x1d\xe0\xed71y\xc98\x98\x08\x1e6pY\\\xfa\xe5\x8d)\xb8b\xae`\x94\xb7\x95s*%\xd2\x97(\x98\x8c\x03i%7\x14\x88\x99\x0c\xd2\x15\xdc|\x0c<6\xa4\xee\xee\x81*-)?\x9b4~V\x8ac\xa3&\xeb\xf8\xb6iG \xa2\xdfzG\xf1\xac\xf0j\xd18\xef\x16:!\xb6\xe3\xb8:\xa1\xf6\x19\xa1\xe7\xb1\xd9\x19<\xccbD(\xc9d\xac6-\xde\n\xdew\xcc\xf0\xc8\x92\xb1',\x12\xd3\x9d\xb9,\x18g\"\xb3z\xd91k\xb8\x08\x07\x1f\x8d\xc1\x81\x05^h\x95\xedn=\x06\xc2\x1b\x8b\xca\xd8\xb4\\\xc5I\xa9\xc9!\x1b\x95\xbaTu\xa3\xac>\x96&\x00t\xb9\xb55+\x88\x0b\xe8\xa9\xec\x03c\xedw\x8b\xba\xdc\xc6\xaa~\xaf\xc6\xb0\xdc\xfc\xeb-\xb7\xad\x9a\xbe\xeeU\x84G7\xebK\xa7[U\xbf\x10\xfc\x14\xcf\xaa\x06\x05\x1b\xe6\xfd\x80\xfe\xf5\x81\xf2\xc6,8\x8b\xa9S\x17z\xe2^:u\xe2z\xba\xd8X\xa6N\xe0R\x84g\xea\xe8\xe6\xd0hG\xb8t~\xfe\x01\x85q:{\xdc\xec\xf5G\x19\x8bi\xa1*\x17N\x88\xce\x88\x8bSc5T\xa4\xc72e\xb4\xc4\xf6Y\xfe\x03vS\x8eY\x9e\xa3\xea\xb1~\x1b\x04\xab\x04\xdb,\xf88\xd2=q\xf9\xbdf\xe7\x01\x1a\xdd\x1f,\xfdU\xbb#hU\x81\x1d\xb0\xcc\xe1\xe3\x08T\xcf\xe2\x7f\x15%\\\xe9|\xc9\xc9+Zi\xf3\n\xff\x07o\xbdc\x0d\xc8\xbd@\xe0\xd516O O\xc5\xbe\xa1Zq\x05\xd7u\x12D\xb3\xf6P\xb6\xddg\x16\x8f=\x8f(S9\x9c\xa8 \x85\xff\xd7<\xd5\xc5(\xda\xe0\x10\xce\xfdv\xba\xdd\xe9 \xadD\xcb\xc8\x98\xe2H\xe6I\\\x0b\xc8\xd5t\xdcF\xff\xed\xe0]\x00\xe6p\x0c\x82d\x0fe\xc4\x13\xd7c\x9f\xc6q\xc8\xfd\xc8\x01V&+}.C\x01\xd4\x05\x81]\xf4m\x8cY\x13\xe4<\xdav\x07A\xc6\x13?\x8big\x8e\xc6\\\xca%\xfa\xc8fAN\x1a\x90\x1bK7\xa5\xe5\xc9!\xbd\xfe\xa7\xf2\x9bur1\xaf\xe3U\xa7c\xb5yX\x9e\xdd\xc6a\x94\xc8\xd7\x0f\xa3f.\x1c\xe6\x08\x1f\x8c\x1f\xac'\xf9\xeaQ}\xddET\xb2\xa5V\x13\xcaV]\xd2\xdbF]\x128Z*%\xf3)J\xe6C\xe7B\x06\x08\xbf\x90\x0e\x12\x99t\x19\x0eh\x0e\x13'R\x02\xf4\xf8\xec\x16\xbe\xf2\xaa\x8d[\xfc1\xc0 \xe8\xc2zF\x9c3y\x89F\xaeN4\xf7tN\xb5\x10\xc5\x82\xa4 \x16\xc9\xdb\xdb\xf2\xc2\x9e8\x9f;\xcb\n\xc71t!b\xd9>\xe3p\x19}i\xe1\x86\xf0T'\xbe\xda\xc2\x85W[\xaft\xaa\xe2f\xe4T\xb05\x91\xcb\x96h\xcc\xc7I\x0bJ\xf5\xc8\x91.\xc9\x02\xe6\xa5R3e !\x03\x7f`/\x040\x9f\x1bzdf*'\x9cs\xe8n2\xb1\xc2\x02\xe0p\x02f\xae\xe7\xf2J*\x1a\xd2\x08\x82\xa9\xe0#\x0e\xc8\xe2l~\x02\xce\xc5\x9c\x128\x1b\xc7\x83Y\x1c\xf1\xc7.(\xe0/\xd8\x81b\xe2\xd0\x1a\xf8\x18%&\xd2\x90\xbd\xf8%\xf6ogVHS\x0e=\xb6p\x96\xb02fp\xddJ\x82\xf9\xb0\xfe\xd1~\xdf\x125K\xcc\x1c\x11\"\xa84\xf7\x9c6`\x03@\xe0\xb4\x123\xdb\x1c=\x8c\xd7\x03\xb9]\x0d'\x0e%B\xc8Py\"GZ%\xed\xb3\xc3\xc1t\xe1'\xcf\xe3\x19\x7f\x969[\xae\xcb\x9e\xee\xb3\x07\x0f\xb6\x1f\xed\x82\xc5\x12{\xb2\xcf\x1e\xec\xee\x0c\x1fA\xf9Cp:9\xee\xf7\xa3\x89\xb4g0\xc0y(\xedG\x0e\xad <+Ax&A\xd8\xef\x9f\xd9\x81v\xd6\x82\x8e\x1a:\x89=\xf0\xd4D\xb8\x02z\xbe\xa3\xad\x9d\x1a\x00\x9dS\x97^P\xe40%4\x15o\xd7\x1d_H~\x00\xbb2\xab\xc8\xee<\xb6,/\x89B\x8c\x90\xa2\xe6\x0d\xf6\xf5\x9a\x96\xe2\xd1\x8e\xd4R\\.O\xe2\x10U\x12\x8f\xee\xdf\x82J\xa2v\xc2)\xf48\xb5-\x1e>[\x91\xc3\xb6\xe9vH\xbe\xcb\xdcb\xc8{(8J\xcd\xf9Bm\xf7`\xfb\xb2\x88\xd3\xcbx\x9a\xc9\xee\xd5\x8d:i\xf5\xa22o\xac\x9b>\xddD\x89\xa8\x97\xd9H\xc6\x95Q\x14,\xd9\x04\x953F~\x16\xbfV\xdaM(B\x95\xc0N\xbf\xf3O'\xb7\xc74\xea\xba\x0e\x8b\x8aC!_\xfdZL\xd8\xac\x90\x98v\xd54\xcc\xbbi.V\x84B\xc2d\xfa\xc2\xfa\xed\x90\x1az\xed\x1b\xe8U;\x97\x14X\xb5\x06\x1a%\x8e+=\xda6i\xa5\xeb\xeaf&\xe7`\x81\x9b\x80\xb3(\xbb\xef50}57\xbb \x92\xc0\xc5\x98c\xac?\x8c\xa1q-wF\xe3\xca)\xb4z\x98\x8f\xbb\\\x8f5\x89[\xbd\xb3\xfc\xd6:\xeb\xc3\xcdrP\x04\x01\xf4CG\xf3j!\xc5h\xda^\x0b\x01\x1a{\xa5\x15\xa1\xe0B\xa6ND[ \xce8\xfa\xa2\x0c\xe2\xe8\xf8x\xc4r\xf0/\x9aQ\xe6|\xc7\x91\xbf\xe4e\x993\xa7n\x02\xfd\xa1*\x1f\x99:q\xfd\x93\xf38\x11\xd5\x9b\xb1L\x0ez\x86\x8a0\xf87\xc2\x7f\xfb,v\n\x8anHE*\xbf\xdf\xf3\xcb\xcf\xbb|\xccb:\x0e\x8b/cA\xc4R`jgv!\xfel\x9cM\xd0\xd6\xb9\xd4\xdc4vm\xe1\xa7/$\x96(X&\xa8\x06\xd1r\xd0\xa2\xaf\xa7\xa5\x18\x01\xd3\x83\xf49\xc8\xaa\xde\xaeT\xc8\x97Zsf\x01\xd9\xaa\x99a6.\xf7\xb1z\x932Y5$\x7f\x1a\xd5\x97\x82\x1c\xd6\xeaB\x9a\xac\x08\xefF-\x19\x19\xa9VO\xc5N\xc2\x9a\xf2\x97Q7\xe5~b|\x12\x13eM\xfcaV\\\xf1i\xc0\xd3zMLUU\xf1\x17Q7\x0c2\xa3f\x18dE\xbd0\xc8\x8cZ\x1a\x0fP\xab\xab\xe5\xc8\x16\xb4\x14\xa2\x9d\x82S0\xda)r\x8av\x8a\x14\xa3\x9dW\xddS\xdfoT!\xeb\xc2_E\x95j+\xae\xd6\xb1\xd8\xde1\xfd\xcb]\xbe\xaa\xc8\xb7\x031\xdcQ\xf01\xa8\x91Q\xd6g=\xd70 \xad\xfc\x863\xc5\xaby\xd7\xaf\xa6\xb5\x98Z\xcc\x1c\xe5\xbc:\xcaXG&\xaf\x0d\xac\xea\xfa\x89\xfc\x0e-\x1e\x95\x8cw-B<8\xc8(0\xce\xd1;E\xf7\xaa@D\xe8\xd5\xb4\xe7)\x98\xf6\xb0B\xd0^!\xae8\xe3\xafp\xcct\x13UHPM\x94l\xf9M\x1cj\xe9\x02\xda\xdd\xb5=\x19\xa1\xdf3\x108P\x9c\x03\xba\xf6/\xf8\x06\xfa\x1c$'\xeb\xd6\x8dG[E\xfc\x1b\x1bx\xd9\x87D\x93\xab+\x91\xaf\xc7*\xc0\xb2o\x8b\xb2\xe0\xc6\xb4\x1e\xca\xe0\xce\x1dV-2\xae\x16\xaa\xce\xfcm\x0cYM\xa0a\x12\xa5>U]\xc6`K\x81\x12\x88.\xcb\xb8\x10\xc0V\x17\xb2\xe3\xae\x8d*Uk9\xee\x02x\xe2_,\x04\"gg\xb8}\xed\xa1\xd8\xdd\x06\xfdR\x0d\xb2\x12\xf2|\xbd\x01\xa6\x86CqX\x18\x88\xe6\xa6)\x88\xf2\xcf\xa1\x1d)\xb0o\xa2R\x0d&\xee\xedY\xcc\x9e\xe9^`\xd6\x1d*\xc1N7O\xef\x01\xb1XR\x9e\x91\xd7g\xe1\xaeQ-\xea\x9d8\x12\xd1\x91\xa4\xa0t\xe2\xf0\xc1)'.\xd3i\x01R\x07)\x071a\x06/\xfbP'\xe5\x10\x9d\\\xdenC\x15\xa0\xfa\x81%\xf0\x07\xdc9\x93\x01\x8f\xb0\x90\n~$\xca\xe0\xad)\x88\xd1\x0d\xfd\x94\x1f\xc8\xd0\xc1Dv;\x14k\x8d\x89)\x04 J\xdej\x1eb\xb5\xa0\xff\xbd\xff\xbeW\xcd\x97\x87\xa2\xfd\xf2\xd20\xc8e'\xeec\xb6\xb9\x99@D\x9f\xfe>\xeb\xfdw V\x00q4\x89 \xd9\xf77j\xb5\x19\xea\xf7%Ik\xbfB\xd8\x12\x95\xc3\xcb\xf0\xd6`\x82\xf2{A\x02\xb8\x18h\xac\xc2<\xe1@\xb3q\xbf\x9f48\xf61\xd0\xb5\xcb>Q\x8b'\x7f\xcb\x17\x18\x86\x86\n8\xae\x8b\xf8Z\x00mc\x1f ]i\x06*)3=\x82\xd3\xbc\xdd\xc5\x8beA7\x9f\xe6\x99f\xc2JwG=\x01\xd8\x8bZ\xb3}\xeb\"QOPD\xdf\xf2\x8b\x15\x13\x8c}\xb8\xba Fe\xaf%>-J\xda\x06\xc0\x14>>f1{\xc2|\xb6\xc9\x86\x8f\x9b\n3\xd9\xb0t\xa7\x07\"\"\xb9?\x04\xa0\xed\xe4\xe3x\xe2j\x0eW\xad\xdd+Z\x83.\x0e'\xa0C\xe9\xf7ckaS\x05\xa9\x1e\xf9\xad\x96>\xb1\x03\x15\x8eN~N\x81\x8fl\x97\xfe\x9a6*#\x9f\xb8M\x9eV\xd0\xc8jo)\xd0(@ao\x03\x1a\xe5\xcdh\x04\xd2\xc4\x8eh\x94\xba,\xc7\x10\x0e\xfd\xbe%\xf0PK`\x03@\x1ah\xe3\xeaJ\xbe\xec\xb3q\xe3DS+\xb3\x9ao\xcd\x9e\xc8\xab{\xe2;\xf2V\x9c\xc4\xd4M\xe9\xfc\xc3 \xcaI\xcfa\xd2c\x81\xf6h(\x1b@\xd5-i\xe4\x0e\x19\xa2\xa2\xc7\xf2\xf1P&~\xc4\xae\x17}\x1fN\xc6\x01\xe0\xb8\xff\xf8F\xfdv=\xd5\x18N\xe05\xf0WJ8\xc9p\x8b\xe6P\xd7\xf3\x8e!\xdd\xc74`\xb2\xdf\x8c\xc9\xb9\xb4/o\xc6\xf5\\\xe9\xc1\xad\xa5B\xd8\x0e:\xac\x05\xc9l\xf9\x02\xbb\xec\x8bAT\x81X\x80\xe3\xb4\x0b=\x0d4,\xedNO5\xee\xdf\x07t\xc8\xc7\x81FO\x9bIi\x88\x88\xe2\xa3\xa7&\xec\xebp2\x8e\x01\xe9\x82k\x10\xd6[\xe9Yq\x15\xb7\xe8\x8c\xa8\xaf\x0c\xf7c\x0f\x10Z\xe4U\x92\x1e\xb3\x0d(&\x15\xe0w\xee\xb0P\x117\x176\xdcp\xb0\x8aW\x8e\xeb\xe1\xa4\xc8_n\x87\x96\xd7X.\xda}\x80.\xeb\xa4\xab\x03\x16\xc9\xa7\xe8|\x89\xd9\xfc\x0f\xe8_7\xe0\xca\xaa\x9a\xff\xbd-y?\x11\xdd\xd2\x0e\xc0\xa9\x9dt\xec|\x93+\x89k1q\xfa\xb7\xd79\xca\x81\xc2\x9b;?\xff\x00\x84\x92;/\xfd\x97x\x0b\x91;;\xf7\xbf\xcf\xb3N\xc1\xf5o\xec\xdf\x8e\x1c\xac\xca:_\x13\xack\xf2\xc6u\"y\x1bl\xb1F.2\x0f,\xe1,fpU\xe6-.\xb9\xb4h\x1cwZuU&\xab\xcd\x7fh\x8642\xc1\x03W\x84\xbf\xfa}\xee~\x9c\xbdP\x93XA\x10)\xd8\xf87`\xa0x\x86\xaf\x12\xab\xa8\xf2\x9b\xa0\n\xb7Ct\x08~\xe5#\xd0\x9b\xdb<\x05\xd2B\x06\x1a\xd5#++j\xe3\xe3\x08x\x10%\x83\x1b\x1e#\xad\xbe\xaf\n\x89@\xc1:\xa1\xa142\x11\xbc\x95\x89h\xdc\xa6\xb3\xca6\xddr \xeb\xc434\xb2\x96-\xfd(\x97\xb7\xfc\x8c\xf5\x10\xd6\xba\xd2\xad\xc7\xa9\x02\x9c\xd2\x00i\x0b\xaf\xdcD\x8fY\xae\x81\xb3\xe0\xc0\xfd\xb2\xa7\xa9\xe4\xc0s\xc5\x81\x8b\xbcT\xe3\xc0surH;\x9c\x1c\x9aN\x0d\x96\x13\x03\x9c\x16R\xf8\xe8p\x02N>\xfa\xfd\xbc\x0b\xdd\xbc\xce(\\O}\x06\xce\x11\x99\xc7\x02\xb0/\x10hHxN\xee@\x0b;a8\x1es\x91\xcb\xc7\xc1\n\xb2\x14\x82\x18 \x93\xc7\xbbk\xe3<\x9e\xa1B8C\xb5\xb3\xa6)B$W\xc1\xbf\xe5)\x0d\x91\xdf_\x03\xf9eo6\x1a{\xd3rd\xc8\xf4\xcf\xe7&#\x9b\x13,r^e\x91\xd3*\x8b\x9c\x16,r^\xfe\"Xd\xb3ekO%G,f\xaa#xn\xb0e\xd9 9\xbb\xe6\xf2\xf2t\"nv\xf5\x07\xf4\xaf[\xda\x03m\xbe\xc1\xe9\xcb3;C\xfa\x82\x9b\xe9K\\\x1aY\x1a\x17_R\xdb\xcd\xb7j\xb1\xf5\\\x84[6m\x88\x16!\xe3\x18\xb4\xdcx\x97B\xd3\xb9\xc7V\x1e\xd8WN\xa5\x81\xa21\x1f\x8b\xa6\xcc3\xd0n(\xc7sf\xfe\x12\xf2\x95\x13\xc6*F\x97\xf5\xc0$\xbc\x99\x97S\x9cF\xe9_\x98\xc4\xad\x04|C\xa9\xa8\x0ep\xaf\xd4*\xa9\xa7\x9d\xad0\xe5\xb1/A3\xbb\xb4`\x9f\xb7<\xb69\x14[\xc3\x99\xbc}2/\x9c\"\xac\xc4\x9b\xa9s\xead\xb1\x1c8\x1a\x00\xd9Y\x83\xe1\xf2\x87\x1a\xf8\xe2H\xb9\xe9m\x87]\xe3\xf5v\xf2\x02%+\xcc\xdd4\x17\x05$\xcct\xc3\xbd}6\x9e\x81\xcb\x8aH\x19\xf1!u\x8f\\\xd4\xc1\x01h \xeeM= nH`\x91\x89tb%}L@\xa8|e\x93\xdfbD\xa3\x1e\xe0?\xect\x94\xf2\x15\xbb\x901\x0d`\xbf^\xa0\xf7\x8d\xd2%2\xac-\xf4\x07\x1b\xe0~%\xbd\x19'\x10M!\x8e2~\x91A,\xa6\xe44u\x0b\xfb\xcd\x04\xe3G\xc4\x88)A\x89BbNlq\xa2[I#\x86\xfb\x96k\xab\xcd\x0d\xc7\x19^\x8c\x94F\xe1\xd6E\x11\x89\xa1\xf3jd-\xe9\xffC5\xcf\xb8\x1da\x14\xff\x8c,\x05\x1f\x043\xbb\xe4O\xfa\xc2d\x8d\xf1\xfc\x01\x03q\xbb\x13\xadaOf\xe3\xb4t\xdb\x8b?\xe2R'ct>\x03W\x9a\xa9t\x80\xc8\x0e\x98\xd2\xec:\xe0P\xdcY\xa0\xe0\xdc\xde \x86\xf6lbnG\xb8\xe2\x1b\x8bbh\xe7\x06Q_\x89Ri\x89R\xa9G\xaf\xaeXF6\x88\x8b;\xc9nCI\x14\xc3\xd5/\xc7C\xf5n\xd7\x90\xf5Gk\x8c\xb7\xdc\xb4gr\\\xe8)\xdc\xc2\xb5\xa1\x087wBy\x9b\xd9\xf4\xfeB\x1d\xb6q+\xa6\xa8\x00\x97\xbc\xb4\x94\xb3\xca\xae.U\xb3\x1c\xe2\x03NOp\xc9E\xb8\x00}\xcd\x05\xf9\xb2\xc5\xfd\xcc\x07OR\xd9\xb4\x03\x95\x85\x95#I\xe1\x1adr0=\xa9Q\xca\xc1\xf4\xc4-\x0d\xa0\xc5\xcf\x02\xd7\xf1G4\x08\xc4\x96)\x9d\xef\x001e\xa3\x12\xa9\x89\xeb\xe38\x8a\xc2\x9bu\xfbvA\xb0\xeb\x14\xb1\x9c\x01\xb1\xbc\xba\x02BY\xec\x9c\x0b\xdd\xabv\x95\x84b\xa2FEU$\x19 \x98 n\xb1\xf5^\xb9\xbcn\xa7r\xa2\x0bD\xff5>\xa6\xe8\x0f4\xaa\xba\x13\x0b\x8cl_\x1d\x92\xce\xc8\x9e\xf3\xa2\xe7&\xea\x1ac)~\xde\n3k2\xad\xc8\xcc\xee\x191\x18\x03\x99^\xbf\xc4\xed\xcb\xf4\xba7]\x15K\x8c\x0epc2\xb9\x1dn\x0c\xc5N/[p\xf0\xd8/\xfe\x8fd$d\xb8X\x1fG\\\xfd/\xd2\xdd:[\xabB\x19val\xb5\x0b7\xc6\xac\xc4M\x99s\xea\xa6\x11S\xa62[\xca\xec_]\x0e\xac\x96)\x14T\x1c\xfc\xa3\n\xf2\xb3\x01\x91\x96\xe8k!w{\xac\x0f\xde\x1eX\x9f\xf5\xee*3\xcf3?\x0cfL\x0dv\x19\xcf\xb8q\xf1\x8d\"I \xee\xeb\xb65\x11Z\x02\xf4\xc2\xb0r\xc7/ES1:X\xf5\xa5\xc9\x14\xb1Q%\xf4\xe14\xc2\x8aC\x8f\xcde\x13f\x19\xd1\x95i\xabS&\xbd4`\xee\x98\xb2\xb7Q\x8f\x18BH\x04\x9c\xfb\x12yj\xce\xb8\xf8=b\x9f\xf1\x8cO3>cy\x14'3\x9e\xf0\x19\x13\x88x%\xb0\x8e\xdd)\"sC\xf8\x9e\\t\xcec\xe7\x8b`\xba`A\xc4\x002K\xff=O\x19F\x1fc3hMpC\xf1\x9c\xa5\xf9t\xca\xd3\xf4\xde\xdc\x0f\xc2<\xe1,X\xae\xe24\x0dNB\xce\x9c\xf3\x05\x8fD\x13wu\xec\xbe\x0b\x13\xeb\x1eE\xcf\xe3(\x0df\x80N\x04m3*?\x1c7\x1f\x1b\xc6 \x15\xbd\xc8\x02\x89\xb5N\x0e\x84'T\x9dc\xac\xf0\x96:\xbbh9S$k\x9d)H\x13\x97\x8fz\x8a\xa8\x8b\xa6\xa5\x90\xe0#\xe9\x89\x9b\x14\xb7JOY\x06\x90k\x06[\x86\xe7\xe3\xfa\xc5\xfc\xea\xe5\xf3\x9b\x03\x88p}\xa5NYm\x91\x96\xad\x86*\xe8\xf9\xfdV\xe7Q\x9c\xca\xd6\xbf\xbd\xd1\xe8\xa2\x1f\xaf\xe28\xe5\x15\x19p\xe8\xa6]\xfc\xd3\xa2\x895H\xad\xcd\x89\xa3\x0eC\xaf\xfd4\xe5\xb3B\x10\xa3\x05\x84\xc6K4\xc1\x9c\xcf\xea\xf1\x8cn\x17~{\x86JG\xcc\xf3\xbd\xf1Qt\x94\x1c\xe5\xdb[\xdb\x0f\xe1\xef\xa3\xc9\xbd\xd3u\xc1\xac\xd0_\xcc:\x89\xfb\x85\xc2\xe2)\x1bnm1\xe5\x80.\x93\x0eX\xb7<\xf6\xe8\x11\x1c\x13\xff\xdb\xef\xfc^O\xde\xff\xcf\xd4=iAq\x9b\x97\x8a\xfc\xcao\xbc}\xf5r\xa0\xc0y\xe9pW6?\x04\xc5Fm\x19\xdd.p\xff_\x83\x9cJ\xcf1~\x19G\x9b\xd3\x98'S<\xc6e\xb1DD\x17o\xf2N>\xea\x85\x8d\xdb\x88\x11o\xd3&\x96\xdf\x0b\x06\xb3 ]\xc5\xa6L\x85p\xa9)\xfaV\xb3\x81\x08 6\xa5\xa2\x9dg\xa7]W\xe0\xcc\x03\xa7B\x1e\xab\xf93\x05\x89#\xf8\xe4AY\x0b\xdbg+\xc5\x96.@\x89P,\xd0\xd4\xb2@\xd3\xe2\xc7\x01\xeb\xe1za#\x06\xbea\ny#\xeb\x8b\xcf\x17\x1d%\xf1u\x86\x0e\xd6R\x9e\xbd\x0b\x96<\xce\xb3\xf6sO!\x00\x8aH\xe1\n\xb7\xe9\xbb\xc4\xa7\x06y\x94\xf0\xb9\x18@\xf9\xcb\x81\x88\xa7\xe0UNt\xe6\xce\x1d\xd6\x8b\xf8E\xf6.\x98\xbe\xef\x81u\x90J\x86\x05\xa4\xba)\x12E\xc5\xf5\xfb/\x8f,\xcb\xbasa\xd9\xff3[\xff\x97\x95\xfe/\xb5\xfe\xb7hpj\xf3@.\xfb\xca\xd8f\x18\xef\xbf\xd0\x98\x8a\xb3\x15B\xc8\x80\x0c\xa7 \xa3\xd7^\x92A\x15\x05.\xf1\xcf\xb9\xd8XE\xb3g\x18\x1ct\x7f\x7f_\xcf\xb9\xba\x92Q\xdb\xcb4\xb1m\x0fvvv\xd8\x88M\x9d\xb9\x83\xa6\xe8z>\x1aGmI\xcc^\xb2}\xf6\xf3\x0f\xd2\xaf\xd6\x90m\xb23\x97}\x82\xd2M%\xaa\xa8\x03\x07t\xde9\x05\"\x18\xec\xd5\x15\x83\x01\xb2}\x0dK<\x16\xb4O\xbbE\xda!\x1e\x0d\xaa\xfb\x1aT\x1d\x0d\x84\x9e\xae\xb0\xabl\xa1h\xbb\xe6\xc4\xae\x8b\nA\x08\xe8W\xb1\xb3\x91\xc6\x03\xd2b\xae\xb2\x8c}'@Hu\x12O\x84\x1e\x0b5 \x05\xfc\xa4$\x9c\xa6\xdf\xa7\xea\x1eT\x839\xbd\x0d\xcd\xdaP\x96\xd5\xd1\x96\xdc\x8b\xd0\\I \x01bp\xec,\xbb4\\Ctn`\xb9\xe5c\x88q\xc6\xf8\x8b\xdf\xb7\xb2\x05\x1a\xbe\x98\xd5\x11\xf3\xd1\xda\\\xb3\xe0\xca\xa4\x01\x87\xd8\x0e\x9e\xb2\xb8\xc9\xb7\x08\xbf\x98r>K\xd9\xd2\xbf\x08\x96\xf9\x92\x15z\x8b\x0c\xa1\xf2}9\x1b\xd9\x1e\xde\xdf\xbb\xffpg\xf7\xfe\xde\xf5\xdbk\x07\xe76\xad\x17\xdd\xd5\xafx\x04bG\xee\xb8\x1d\xcb8R\xc4^\x9c\x14{q.\xdd\xc0Kk\xf258\xe5\xe6\x8d\xd8G\x13\x9bf\xc4\xd7\xdd\xfb\x02\x8b0X\x04\x99\xeaZ\xbb\xc1\xc0i\xf9)b\x0b\x12\xa3W^\x11\x0cr\x00\x99\xd2\x1d\xc2m K\xcb\xe46(\x9f\x83\xf6xW\xeb\xae\xb1\xb32\x044q\xf3\x01\xc2F\x9a\xc9y)\xff23\xd3\xa6\xcc\x10\xda*R\x1f\xed\x15\xa9\xc3\xedm\xb8\x0f\np\x02\x18 \n\x8e]\xae&\x02\xdcz\xff\xf7\x1f\xfc~\xafq\x1d\x9av\xef\x84\x1d\x85\x8e\xb1 \x82\xc178j{\x15D\x96a>\xabK\xb5\xea\xbe;\xd1\x05\x87\x1f\xdc\xe2\xc2N\xe4\xec\x0co\xe2\xdb\x93\xf4]/\x1a\xee\x1d\x1f\xf3\xf4\xcbx\x96\x87\xbcW\xa7\xda2T\x90\x1eJ\xc1EY\x0f\xc4\xd3k\xb2UQF\x00\x89*\xec\xb1X\xbd\x96\x1b\xd0\x07\x93\xdd\x08\x1cq\xb8}Pw\xf3\x1b\xcb\xac\xfb\xdb\x10\x95\xb3\xc8S\x1d\xc0\x90cd\x1f8\x12\x99r\x9c\xd2\xef+\xb5Ca\x9c\xc0\xba\x9f\xbe\xf5\x88\xe9/\xc7\x04\xa8}\x87&\x8b\xd3x\xb9\x8a#A\x0e)8\xa8\xe7\xd9j5b\x97\xc5\x0cZ\xcb\xf9y\xb6\x88\x93\xe0\x1b_\xf4\xe4u\xbc\xcaW#v\xd2\xbd\x1a\xff4\x8bF\xecx\x8d\n\xafV<\x81\x8fA\xcd\xf3n5\xd3\x11;l/\xf9,\xcf\x16/2\xbe\x1c\xb1\x8b\xf6\xc2\xa2\xd9C4{{\xdb^:\x16\xc5\xb7G\xecY{Q\x7f\x15\xfc&\xbf\x14}\x19\xb1\xe7\xed\xc5O\xfc4\x98b\xe9\xf7\xed\xa5\xe5\x91\xe4U{\xc908\xe3ox\xba\x8a\xa3\x94\x8f\xd8\xeb\xf6\nA4\x8fG\xec\x8f\xb4\x17|\x11\xcd\xe3\xe7\x18\xd8\x9d'#\xc6y{\x95\xdf\xc8\x97\xabw\xf1k_\x8c2\xebP>\x8e\xc2 \xe2?\xf2\xc3`\xe6gq\xf2\xa9?;\xe5#\xf6\xaeCE\x85]\xe9\x88}\xb9F\xf1\x11\xfbi{\xe9\x02u\xdf\xe6\xcb\xa5\x9f\\\x8e\xd8\xcb\xf5+} A1G\xec\xcd\xfaU\x11~\x9f\xb5W\\\x04\xa7\x8b08]d\x82\xe1\x18\xb1\x9f\xb5\xd7H$\xa6\xa4#\xf6y\xf7\xd2#\xf6M\xf7\xc2\x9f\xc6\xb3\xcb\x11\xfb\xb4\xbd\xc2\xcaO\xfc%\xcfx\x92\x8e\xd8\x8f\xd6(\xfe&>\x1f\xb1\xdfh\xaf\xc0/\xf84\xcf\xf8\x88\xfdV{\xd9\x05\xf7g\xd0\x91\xdfl/\x0bF\xb4\xe9\x88\xfdZ{Q\xb8\xc5\x17e\x82y\x1d\xb1\x1f\xb6\x97\x8f\xcfxr\x16\xf0\xf3\x11\xfb\xed\xf6\xc2\xf38\xce\xc4\xc2\x8c:,\xb4\xcf\x830\xe3\x89\xb6\x9a\x93\x0e\x95^\x0b\x88\xe3t\xc6\x1d\x8aO\xf3$\x1c\xb1\xa0C\xc9t\xba\xe0K\x81\x83~\x87\xc2o\xb1\xb0\xd6\xf7\xbcC\xade<\xe3\xe1\xe1\x85\xbf\\\x85|\xc4\xc2\x0e5\xbe\x145~\x9c\xf8\xab\x95\xf8\xc6\xb4k\x8d\xe7q\x18\xfa+\xb1F\xd2\xaeUFl\xde\xb5h:b\xab\x0ee\x0f\xa3|)\x9b\x9eu(\x8e\x8c\x8e\xac\xb0\xe8P\x01\xcc6e\xf9\xb3\x0e\xe5\x0bg\xf7\xb2\xce\xb2S\x1dd\xb8F\xec\xb4C\xe9w\xc9\xe5\x8b\xecU\x9e}\x9ag\x99 \xeb\x97\x1d\xea|\xe9'\xefg\xf1y4b\x17\x1dJ\x7f\xea\xa7\xfc\x0b\xff2\xce\xb3\x11{\xdb\xa1\xfc\x8fx\x92\n\xde*\xf1O\x97>\xae\xb7\x11;\xe9^\xf1m\xe6/W#v\xdc\xa1F\xb1a\x1c^d#\xf6\xc5z\x15\x80|~\xd5^\xe7\xb5\xa2\xb7\xf0\x91__\xa3\xc2\x8bh\x1a\xe63~\xb8\\\x89\xd9\xfcq{\xcd\xa2{\x10i\xe4\xc5\x1a\x154\xaap\xda^\xed3\xceW_\x04\xd1\xfb\x11;\xef\x00e\xc1\xff|%H\xda\x1f\x1d\xc8\xd7\xe6\xb2\x02ap\xeb\xc6\n\xeaw\x03i;;}\x96\xa6\\p\xf8\x87E\x87\xc8\xd2\x9d\xe4\xd8\xb4\x9frV;K<\xef\xa4F\x88:\xb5\xf5\x9eh\x8b\xd4\x1c\x8dg\x05\xbc\xd9\xbc|M\xcbW\xbf|\x0d\xcaW\xeal\x8az@\xf9\x8a\x87\xbb\xb0L\x88<6-\x7f\xad\xca\xd7E\xf9zV\xbe.\xd5k\xe3\x89\xf7\x15\x87\xe0\x03\x8f\xa8#/\xe6m\xef\x1a\x11\x8e\x8a\xbc\x9d\xedz\x9e_\xe4\xdd\xdf3\xa2\xe5\x14y\x0f\xef\x1b\xf1\x80\xca<\xe3\xf8\x1d\x96yF_\xa6E\xde\xa3\x9dz\xde\xbc\xcc3\xfa\xb2*\xf3\x1e\xd6\xf3fe\x9e\x01\x97\x85\xca\xbb\xbfe|\xef\xac\xcc3\xda\\\x16y\xc3\xadz\xde\xa9\xca{\xb4c\x8c\xef\xb2\xcc3\xc6pR\xe6\x19\xdf;.\xf3\x8c1\x9c\x17y\xf7\x8d\xbe\x1c\x96y\xc3z\xdeE\x99g\xcc\xfb\xdb2\xcf\x80\xcb\xf32\xcf\x98\xf7\xf7e\x9e1\xef\xcf\xca<\x03.\xaf\xca\xdaq\x07\xdc\xebv\x11G\xab6\xcd5\xd9\x1amW\xc7\xceQzs\xa8\xc5\xe8=}\x10\xa0\xad\x1a\x04D\x10\xa0\xadj3b\x1a5w\xc9\x807\xbfU5\xb2\xf5x\xfd]ugDN48\x81\x1eD\x837\xf0\x03tX7#\xd7\x12\x8e\xa3\x00X)\x8d\xb3\xdb\x87.>\xaa\xdd\x02\xb2\xaaM\xf1\xc1\xaf\xf3\x14Y\x11\x8f\x84)\xc3\xf6\xd4j\x82\x10\xaf\xb4F\xf5\x98\x06z\xc2\xff\x8c\xf9H\xf5-\\j6\xaf\xbe&\x13\xc9\xd0\x19\x14&\xc5\x1b\xd3\xd1\x0c\xc6\xc2\x82D\xff\xda\xaalar\xad\xaf\xb54\xe7\x05ab\x9b\xe7\xac5\xd6\x1a\xec\xe4Y\xe5\xae\x1d\xb1s\xdd\xc7\x01n\x96\x06\xb8\xa9\x0c\x106]\xb7_$\xa9\x86;\xb8\xbfg0\x14.\xe7\xac\xa9\xcc\xb93D|\xc1\x83\x0c\x83\x9b\xd1\x1b\x98\xa3!G\xe2\xac\xf3\x00x\xcf!\x85\x97\xb0|\x0e\xcb^\xcf\x05\x8c\xea\xbe\xec\xc3\n&p\xed\xac\xa7\xcbY\x1f\x96\x8c\x8c\xb0\xaf\x86\x10+\xe6^\x99\xf4-\x0e\xc6\xb5p\xf7\xc7A<\x87\x0e:f,\x06!\xbdM\x1d\xd7E\x0f\n\xcd\x10\x88\xb3@\x17\xadi4\xc0\xab\xe8>\xb0\x01q\x8b)Q\xa4\x19\x944b\x924}\x9f5W\xc9%\xa6\xe0\xfd7!\x1b\xd5\x8d\xcd\xc9\xc6\xb3\x9d/<\xc10{6;\xc9\xe3\xc1B\xd4\x89\x9c!\xab\xc8\xa6NyT\xeb\x07\x12\xef\xd0\x19\xed\xed!)\x15\x14\xf5\xd9\xa6 \xac[\xe2\xef\x9e\xf8\xfbTKh?p\xf3\xc46]Y\xc0\x95\x87\xcd\xec\xcb0\xbf\xb5\x88i\xbc\xcb\x9a\x83A\xa0'\xd0\x92$VI\xe8BO\xb8\xd7\x82u\xa9\x14\xcf\xf9zU\x87r)\x1a\xa9\x96_\xf3N\xb7\xab\xe5+A\xe7\xab\xe5KQ\xbe\xe3\x0e\x12ZQ\xcb\xde Z\xbf\xe3:U^_\xf4^\x9d\xda\xb9h\xad*Y\xde\x88\xf2*;u\x88\xb1ws+\xb3\xf2\xc3[\x1eI;\x8e<\x9aT\x82q\x9e\xe0#\xb1\xee\xe5G\xaf\x18\x05\x17/!\x01\xf7\x9c\xdb*w_1\x0f\xa9(b\x0f`\x1fw\xc9\xc5`Q~p\xcc\xd8\x97\x8e\xdd\x04T\xef\xcf\x0e\x8a\xdd\xc9\xc9\x00\xa3\x8f]S\xa7\x8aG\xea\x87QC\xa7\x9cZ\x17\xed\xa6\xa6\xa13z\xe6*\xb9\xcbg\xad\xac\xfd\xe4\x87:W}\xb82\x1b\xc3\x1b\xa2\xe1\x08\xc2\xe5\xbcb\xf4]{>\x8a\xb5\xf8H\xff\xe0\x11\xd3\x0e\xafi\xc8M\xdb(w;\xbbr\xd5\x94\xa7\x9a\xa0\xf7\xe6 \xc8\x9f\xab\xe8\xf7\xa1q\xce\xd7\xf5\x8c\xa5P\xcc\xa3\xe3t\xd6\x0e\x8fi\xa9\x8b\xea\x84G\x11\x1f\xb6p\xa2)\x0f\xa7<\x98\xd3\xa6`\x85 M\xf0\xe9\xe0\\\xebM\x0bH\x83\xcfCt\xa7\xd4/\xc0\xb5\x08xH\x07\xe7\x9e\xbe\xc6]\xb3\xc5-\xa8\xd2#O\x18z~\xcd\xcd.\xd1\xd0\x91\x0e\xce\x93RZ\x8c\xbcE\xa37\xb9\xfc\x08c\xd8\x82|F\x18\x817\xba\xc2\x98\xa5\x0b\xe2[nq\xe4'\x11\xf1.ps4W\x0fDu\x86p\xcd\xb5=\xac=\x8fV\xc4oH\xede\xde\xc1\xea'c\xf2\x0c\x1at:\x9b\x02v\xe8\x14\xfb\x07\xda\xb5\xe2\xaf}tj\x15\x0e\xb2\xac>\x97\x83\xc6\xe0\xa0\xb9\xbd7\xa0aJcG\xf0\x1f\x19\xba\xbap\xdfPo@o\xfd\xd4\x11\xeed\x9d\xa1\xcb\xeb\xb0\xdd\xa6\xd8\xe2\x07\xce\xa1\xd3\x15\xfbn\xc3\xbb$~\x08\xde\x9d\x17\xd0.\x0fI\xcd\xd6\xf1\x83\x13rk\xd8<1N\"\x9cA\x13\x87\x9f\xd8\x81\x13\x9b\xa9\x01T\xf7e#Xp\xfc\x1d\"\xe6'&\x11\xe8\xdc.\xd5\x8f\xde\x95\x07\x9f\xd4\xf8\x8d\xc8\xb7\x08\xaf\xec\x89 O\xec\xa08uR\x94D\xad#\xff\xd8n\xe4\xfch\xd2\x0f\x9e{\x15\x0e\xce\x8d\x01=\xc3bR(`\x8b9\x19\x8e_\xfb\xb1\x8b:q\x19\x98\x99o\xac\xe2\xf0\x03\x8f\x84\x8f1\x8c\x98`\x1e\xe6\xe0\xa7 \x0d\x16\xb60\xba\x08\xe7\x0f\xe8&=i\xcb<\x81\"Z7\x9f\x85\xe77c\x08\x9b9\x93\xf3\xf9X\xcd\xf1\xaf\xfb\x18\xb8r\xf9i\xc7\xb1\xa4\xf9E@\xe0|\x14\x01\x9e\xd9\xf7#\xf1\xfd[\xb2\x01Gy\xbe\x8c/?\xf9]v\xc6\xe4\xe8\x1fr\xf4\x1f1\xfc\x0e\xfb\xd01\x8d\xb7\xdd8\xc5\xf8\xec\x13i\xb1~\x0dk\xf7\xd98\x7f\x8deQy\xbb*\xfe\x11\xb8\xd7O\xac\x1b\xf6RD.>\xe9\x83\xdc\x14\xdd>t\xcf/\xbbn\x1f\xe6\xdc\xd5Jx\xcc\\\xfaU\x17;=\xfaP\x07\xd1\x84\xb7\x9bc\x8a\xfcY!.V\xa0\x1f\x15=\xd7\xe0\xa1\xa8\xbb\xfa\xfc\x107O\x925Ppv\xfc\x97z\xf2\xf2\x92\x84\x8b/\xfc\xc7\\\xf2~\xf8\xeb\xbaV\xf9R\xad\xcc\x19\xc5b@nq\xa5&\xd4\x1d\xbb\xaes\xa2\xc4\x8c\xaa\x8d\x8f\x86\xe3fQP\x8ar\x07\xceJ\xae\x9ak\xd3\x15FWe\x9dtGI\xce\xca\xcey\xb67\x98\x80e\xd4\\\xe3\xd9\xc9jq\xe9\x07\xd9\x18v\x16\x8b\x9f\xe3\nL\xbc\"\x97\x8f\x841k\x80\x7f\xad>K\xd8\xb3S1\x8f\xceH\x0dTS^\xe7\xf2>Bti\xd2\xdc\xcb\xebH\xd6\x11\xaa\x10\xe48\xcd8$\x82\xe8\x18\x89\xb9\xd4\xc1\x84\xf4\xa6\xea\xb8\x89\xdd\x14\xe9\x07\xa8\x98\xa18Q0\x04\xecG\xbc\xaf\x1a\xb9\xf9#\xc6\xa4\xe0\x93#\xf1D\xc5\xe6\x8b\xc1\x82\xad\xb2\x15\xa5\x8b\x08\x0f\xfb\xfb\x80>r\xfc+a\x1c4\xbd\xe1\xbe[c\x0c-R\x9a\xe4\xc2Y\x0c~\x82\x1e,\x06\xbf\xe1\xffx\xbfr\\E\xc8\x0f\x92):)\xbd\x1c:\xcf\xf6\\G%\x15B\xbb\xba\xeb:j\x11\xa9*Xy\xbf'\xa5\x1e\x15rS\x9d\x1a\x83N\xd3\x1aK\xfe\xe8@G\x98@\xd1<1\xf4\x14\x10w\x1d\x1e\x8aD\x8bg50\x15\xc3u2\x06\xe0\xce\xb1k\x1d5.w\xd3\xb0\xc5\xa8n\x9cL\xee\x8d|\xd9Nro_+\x9aV \xe9\x1c\xb3\x86\x1ao\xc8N\x06x\x84\xbb\x03\xdc@\xce\x95\x8a\x15\xb6i\x91 h\x9a\x92\xca\xa9\xea\x0f=N\xb4R\x83\xd2\x92\xbb\xf2Z\xb57\x91\xa8b\xd6\xd8\xf8\xed\x05UIFm\xb9 A4iI\x90\x0f2\x96\x8b\x99\xc5\xbaf\xa4\x9c\x9d\"\xed\xd5\xac\x18|\x01\xf6\xc1\xef\xf5\x9a\x19\xc0\xc4\x90\xb6C\xfd\x88\xec\xc9\x9c\x02\xb2\xbd\xd9\xeb\xf5\x0be\x19\xc3\x88\x96\xa9\x0e\xd4O\x82\x9cE\x92'q\xc8D\x12\x89\x8d\x0d\x94/b'lb\n\x8d23\x084W\x9a\xd2\xd6\xd3eG\x90.\xc6\x03\x1e}\xc2\xf1\x07\xd7m\xcf\x95\x98x\x8d{\xf7[!\xba\x19\x8b\xa3\x07`\xf1\xc3q\xab\xbe\xea\xc5\xb6\x03\x8b2O#\xdd\x82}\x05\xa2\x81\x08\xc0\x1b\xd9V@!A\xf8\xf5KmMtgu\\\xdcuc\x94\xc1\xf2P\x93\x1b\x1f\xb9\xce4\x8f\\P\x87\x9cG\x12\n\xc3\xb1~%e\xb8\xa1 P\x8c%L\x85\x9aT\x03\x12lg\xd4\xa2\x9dt:\x9c\xa9m\xf5!\xd5gd\xc7\x167[\xb6\xc8Z\x19i\xda\x15\xe5\x86\xd6\xb7\x1e\xd4:\xfb\x7f\xd3\xd8\x87xj\xe8i\xfb\x0bzb\xffo5\xf4'\xea\x180N\xe9B\xc4=\xc66\x94SQ\x8b\x91f\xbb\xb1\xea\x8d\\d\xb9\x1d\xc5\x14\x84\x83\xf7Y\x8a.1\xc7\x17 \x8d\xaf)\x06v\x88\x07\xbf\xd1\x8b_\xfc\xb4\xfa\xac\xfc>O#\xad\xbd\xde\xcc\xf0\x91\xf6z3\xa9^o\x86\xce\xb3-\xd7!M\xd7\xf9ZNX\x1ay\xb5\xca+\x19\xf7ui\x13\xf0> \xa5\x00\x94\xde\x88\x90*\xa4\x06\x16o\x00\x9e\x035&\x98\xe6J\xeeE\xd8G\xbe\x9c\xa2\xdd\xc5\x97(\x88\"M\xd2\x0cPEScl4\xc8\xa3\xd5cl\x1c$\x04\xa9\")\xb6\x8d>V/)\xb5\"\x00\xc2\xaf|\xca\xf8\\\x9e\xaf\xbf\x00'qy\"D\xdb\x9a\x90\x81\x0cv\xe9\x04\xd6\x06\xf3D\x1e\x1d\x9fcgH\xae\xfd%I\xa5n<\xff9HR\x12\xceI\x10\x85\x1a\xad\x05\xc6\x7fC\x83\x1ey\xda\x98\x00z-\xf2\x7f\xe5\x15\x1d\x83\x1a\xaeq\x8a\xf2\xe3\x89\xc8\xa5\xadu)|\xce\xad\xda\x8frU\x95.M\xb5\x06\x92\xfa\xdd\xb1\xe0\\\x94\xb6\x8b5\xec\xc3<\xf2x\x94\x1c\x1e\xff\xeb\x94\xde\xa6G\xd1\x9c:]\x9d\x8e\x92\x8b~\x81;\x888\xe5p\xd6\xba\xb0Q\xec\xe3]\x92\x98x)\x8d_\x93\x94\x8c\xaby2@J|m\x00\xb1\x1e\xccI\x8a\xb7\xbel*\x8b\x06\xfc\xd6\x12\xe1\xbc\x0f\xedf\xbb\x16A\x08\xf5\xdd/\xc21\xc4\x06~\x0cS\xb2\xf2\x9d\xd4\xb4D\x80\xfb\x8e\xc7\xb2b\xef\xc1>\x86\xcf\xa5<\xfe\x0c\xcf\x0e\x1a\xa2\x9e\x1c\x1f\x19\xe6\xd4\xea\xdch2\xbd2\x9c&5\x93J_o\xa8\xc5\xc5\xef\x9a!\x8fLA\xae\xda\x804\xd0\xfe\xdaN\x95,\xb0>\xc1,\x8f\xa8\x15\xf1\x88Zq-D!W\x07\xe1ej\xcaD\x06\x8cf\xbapR\x0c\x93\xaaa\xc0\xa2p\xe1/\xb3\x98\\p#\xdb\xfa\x12/i\xda\"\x0c\xa0\xa2\x0djB\xcd\x07\x9e\xff\x8d\xeb\xa87\xa13\xaccm\xd5\x89\xc1\xf2*\xcbm\xa2\x8aNc'\x1e|\x80\x1e\xc4\x83\x8f\x16i^\xa4\xf7j+\xe8\x10\xa1\x9e\x8b$G\xc1\xf6\x82/\x7f\x18\xa4\x9c\xd0\x84\x1e\x9a\xa0c5E]\x08\x93blF\x93\x17\xf1\x1aOH\xe0\xb8U\x11\xd6v H\xe5\xa8\xb6\x82\xee\x1a\x8f1\x99}\xf8\xee\xe3\x12\x91\xd3\x1e4,\xb3\x96\xe8;\"o\xddt\xcf\xcfM\xf7\xca\xe8xbA\xc44n\x8d\x84\x11#\x11\x987\xda\x88n\xbe\xd6\x92A*\x00\xc3\x01E\x93\"\xa1u\x1d\x17r\xb0\xeb\x84(\x9f6k\x04\xdb\x00T\x82\xce\xba\xde&b\xf4\xd9A\xa32\x99_\xc2\xe9*\x15\xbb5+J\x0c\x01?\x88\xe9\x92\x864f\x0c\xd8\xc7,L\xfd\x15\n\xdd\xc2\xa9gIS\xc5\x95\xe7\x88\xach\xe2\xc4\xee\xc0\x0f\xe7\xf4\xf6x\xc1\xda\xaf\xbe\xdcu\xe1eM\xe3\xe5\x83\x08c\xa7\xeb\xae\x809&{\xd1\x0d\xa8\xe0c\xcb\xd6\xb7{\xec\xd4\xc2\xb4\xec\xfa\xb7\x94\xc8\xf9\xc8;\xd5yx\x11}S\xf7~\xb1p\xc6\xeb%\xeb`\x8b\xf7\xb5\xeb\xae\xb6\xa5\x18u\xd6\xeel\xf4;\x0c\n\xa37tU\xaf\xf8`\xd5\xb1\x9c/v\xd95\xab^\xcb7\x91\xdd\x93\xbb\xd5E\x14\xc0D~\x19\xd7\xccVA\x9c5\xfe\xc0O9@\xd0\xbe\xf1?\xffS\xfe\xec\xd6\xeb\xa3\x8e\x92\x87}}[~\xa9T\xa6y3\xc17e\xb0\xc3S\xb2\x14\xef)%\x9a\xb7\xf0\x92*BX\x95\xce\x94zMOX\xf7\x99\x91\x15\x04\xc2z.\x04\xc8\xf0\xa9\xa8\xe9\xb9\xad8w\xc7\xd4\x0d\xecC\x80\xb9\xa6d\x93\x0c\xde\xee\xe0&&\x8c\x99?\xaf\x93))\x03t\x93,Y\xd3pN\xe7')\x89S\x0d\x0c@H\x04E\xcd\xbf\xfa4\x98\x1bj\xa2C\n\x8f\xa9\xe4\x87:\x90\x820\x06\xefz\xd1j\xcd\xf6\x92\xa9\xa5k\x9ePA\xfbl\xa5qC\xc4\xf2)\x995\xd1Bhb\xce\xf4\xc0Z\x16\xbbfI\xd3\x0fr\xe3\x1c/\xf4#\xbc\x83}X\xb2e^:K\xe7\xbd3\x9d\xb9\xbaKS\xf48\xb9C\xb3(\x14n\x85pw\x87I\xb3ej\x91;\xcd\x8blD\x17h\x9c\xad\xde\xf9\x1e\x96~\x95\x028;+M+\xb7\xa5\xfa\x17\x15\xeb\xed\x93>\x9cT\x8an\xfbp2M\x18\x88o1MW@\x90\xc6\xb3\xe5\xfcIb\xa4(\xbf\xf8\xa5\xcf\xd7mp6\xc3\x83\xd2\x19\xb2\x0fW8m\x8c'\xaeu+\xb5!j$n\xe8\xaf\x9cs\xf5\x0d{dh\xed\xde`\xa7\xf9\x04\"t\xca\xe2\x1e]\x0f\xb9'\xcbU\xcb\"\x9f\x0e\xe5\x8e]Jk\xfa%\xd0\"\xf7+\xc4\x8f\x8b*vuY\xd97 \xb2}\xb8\xc8O\xe3\x074\xd6\x9d\xf2\xd3\x18\xf2\x01Ur\x1e\x82\\\xe0+z\xd7\x9c\x8a\x04\x14R35\xa46\xa8\xf9\xaf\xa7\xd2\xa8\xc4\xba\xbe\xec\x94\xbe\xa6qB\xab\\\xb4\xfa\x91\xa3\x83f;>\x91\xd9@\xde\x1d\x19\x15\xd4\xeaG\xca\x06\xe9`\x1d\xadMZM\xf5\x83\x0c\xb5\x98fn\xd0\xc3\x91\x08\xd3h\x84\x1c\xb5\xb8\x91\x92^l\x94\x1f\xb3\xa5\x1c(\x02q\xde\xde\xd0\xd6\x9e\x96Hx|`l\x91\xdf\xf7\xe1\xb4D\xe8\xf4\xa0Q\x0e\x8c1\x9c\xeaW%\xa6 m\xb4\x02\x91\x1f\xccz\xc1\xedp\xe8\xb5b\x9a%\x14y\xf2gBCy\x81;8\x17?B\xf1L\x81'\xffM\x03\xba$\x18\xa5\x84'\x92\xc4\xd2\x15\x86 \x95\xd9\xc0\xba\xa2\x94\xc4K\xa5\xa54\xbe;\x0c\xd3\xd8\xa7\x89\xcc\x97\xec|p\xfb\xd0i\xb0h,\xa2\x9d\xb3uG\x91\x17\xbaiWxo\x88P\xdbCW\xe1N\xb8v\x86;Kux\xea\xb4\x9eL\n;\x12 \x86X\x1d\xe1[i :z\xf0'i\xb4n\xa1\\\x03i\x00\x95\xa3\x8f\x19\xb7\xa5\x0dU\x05H\xd3\xe1l XP?\xb2\xb8\xd8`*}\xd4\x93p\x98\xd0\x01\x1eJ\xf2\n\x86-\x82\xf9eU\xd3\x14_\x93zb\x020\x83\x821\"L\x8c<\xbc\xf5\xe8:\xc5\xa8\xb4\x0f\xc4J\x06\x9c|\xa0v\x00\x156\xdf\xcd\xb4*vL\xa9\xf6\xd5\x8f\xd4J\x0d\xc4\x96\x140\xecC&\xf0\x16m\xc4\xc5NA\xef\x11\xae\x04\xaf\xa3\xba\xc4s\x86\xcc\x1d\x8b_\x85y\xe4\x12\xc5\xfd:\x1aHg\x9d\x0d\x18=\x07\x1fU\x11\xcfacC\x1b\x17B\xfd\\\x8b\x1c\xffU\xac\xf2\x1b\xcc{@H\xb1\xa4\x15\xf2\x81D\xc08\x8a\xc4\x9e$\xac\xb7w\x91\x97\x13\xe8\xd8\xe9\xd2pn3\x1d\x97\xad\xc8W\xe1\xc5>\xe4d\xabi\xa2 &\x8b\xb9kD6\xf4>tQ\xc3\xf1.\xf2\xba\x96\xd3M\xfd\x04\xe5\xd7\x85J\x18\x1bhw,\xe1\x9dm\xd0f\xb4P\xa3\xcc/0=/\x1f\xb0\x02\xb7\xa2\x10\x1d\x10\x9a\xc7\x01\xda\x96\x8b\xb9\x94\xdaV\x8a\x1b\x1b\xfe\\\\z&\xdfs\x8a\x8d\x0d\x7f6i\x1et\x1f\xbc\xa3\x0d\xd4\xfc\x1b\"\xf7F\x1a\xdfA\x92\x92\x94b\xd6\xf4\x1b?\xbd\x8c\xb2T(\xc5\xa2X\xde\x07\xb4Yy\xf8n\x10\xb7\xd6\xb0\x98\xf9?\x84\x84\x93\x8b8[\xa7-l\xac\xe5G\xe15\xed\x94*\xcc)\x95\xf1Z@~r&\xb0B\xa9B\x03\xbf+?\\\xb9\xaa\xa1\x18\n+\x10W\xb6rny-\x96*.-U3VI\"m\x10\xe8\xd5\xcfEL\xc9\xd57]D@}&\xa6)\xc5\xc6\xc5y\x8f\xfa\x02\x99>\xac+}z\xf0\x16Q\x01\x0e\xc8\xd4%\xbe2el\xcc\x17\xac\x9c\x05\xdb\xe5a\xe2s\xd7\xd7\xfc`@-^#wA\xe4\x11K\xfb@\xc4a\x99\xf6\xb11\xc7\xc2=\x8a\xa3W\x1do\x1f\xae]a\x0e,GA\x1d\xf2 \x06N\xbe\xf6\x00\xa4\xff\x16\x1cVi\xc58<4\xcb\xc6\x1fLJ\xf3\xc7\xf6a\x0c\xe2\xea\xa3R\xd3\xc9Y7\xb9\x83\x04\xf3\xc2\xfe\xd6\x98s\xd1D\x19\xc0\xfctf=\x84Q\xbc\"A\xa9\x07y5\xed\xa8o\xa4n\x1f\x0c\x1e\x7fz\xa0/\xfc\xd0O\x1a\xfd\x13\xf2\xda\x05\xc7o'2iNd\xda\xf9\xd3k\x88L\xda\x82\xc8\x84\xea\x8e\x11\xdbKe\x9csL\x0c\x95\xad\x81\xc9\x89\x17)\x8d\x19e\xe9\xa3\xe3\xb8 h\xf0P\xb2\xdd\xca\xdbC~\xfe\xfd\xa0)\xa8\x92\x80d;\xa2\xcb\x8d\x84\xdb\xb2\xa4\xa0\xd9\xb5\xb1\xd8\xb5\xcd\xfd\x81\xa26\x8b\xed\xbb[\xfd|0\xd9d\xab\x1f\xfb\xb1\x0e\x05\xc10\xcb\x11\xf0\x85GG\x8d\x0b\xf2\x03&\xca\x07\x82\xef!iJW\xeb\xb4\xfb j*\xb5\x01x\xe32\xae\xea%\xad&\x82\xea\x0eR\x94\n\xf6\xe5\x91Woc\x8c7`\xe7\xecc\x9adAzDVt\x0c\x0d\x01-\x18]{\x17yc\x83m\"p\x85\x0e?\x9d\xb8\xe2A\xa1\xab9u,\xc4@\x03q\xac\x95VM\xc0J?sy\xf6\xbcA\xcd+q\x95\x9f\xf1\x8a\x9eI\x89\x0fs(\xf2\xe6\x1d\xea\x01Q\xcb\xa7\xe9D\xaa\x82[\xfb\x0e\x11Z\xe5S\x07\xef8\xa7:[f\xb1\xc8\xfe\xe0\xdc\x0f\xaf#\x8c\x02j\xb3\x15P?\xb9\xdd\x80U\x8b\x99\xb7f\x8a\x95(?\\s\xc8\xd6n\xae\x11\x08rm-\xf8 \x90 \xa6d~\x07q\x16\x86~\xb8\xb4\x89\x01E\xabZc\xf9jU\x95\x1e\xe5\x19\xc6\x0d\xd9\xf0\xe5GL\xf4\xadA9\x0e\xcd\x9a\x85\xb0\xe0\x00\"<\x96\x10O\xfd\xe7\x8d*Z\xc9\xf6\x85\xf9\x06m&\xef\xa4\xa9Q\x10\x0dg\xe8\x14B\x18\x064\xd3W4\x96m\xd32\xc8\xca\x08\xe3\xeb\"\xafns\x1f\xa0(\x85\x1a+\x7f\xa9x\x06\x12\x13\nZ\"\x97\xc7\x85Pjb\xc3B\x0d\xdb|\xfe\xe4\x92\xb9\x8a]E\xa3\xcd0+\x90x!q\x92m\xbc\xcb~\x9b\xde\x01\x9d\xa9j\xba@\x07_m\xf0v\xe2C/1\xb6\xa1BU\xc3\x01\x97O\x9d\x82o\xe5\xad6l\x18\xd8\x87\xb9\xbd\x8a\xd4\x17\xdd\xe4D\xa8\x19\xb1K\xdcq\xd2\x9a\x99\x10\xc0\x957 \x13\xb8\x841\xac\xfb \x8e\x8b\x87\"i\xe3u\xa6\xfa\x11I\xfd\xb0\xabvZ06\xc6\xb1\x18k\xe3\x0b_\xb3\x07T\\MrQ\xc3\xc9\xf1\xae\x90Y\xa4ZV\xd2\xad\xc4\x8eX\x06F\xbaV\xfa\x99-}\xd8\x07\xe2\xf6+\xc97M\xc7\xf0\x8d\xed\xc42;S4\xaeX\x8ai\xb5$z\x99\xd7\x89\xc4\xcb\xdc\xb3\x07\x87\xd1v\xa6\x8d\x11\x1c\xda\x0eQ,E\xc3\x08\xdb\x0e\xab\x15\xd0\x0f1\x9e\xa0\xe1\xe1\xad\xed\xe1\x89\xed\xe1+=0\xa6R\x01\x91c\x9d$=\xb3\xfc\xce\xcal\xd8&?\"hg;\xf1Le\x83\x05\x93\x84v\xb2\xadW\xb7j\xee\xaa\x9f\xf0\x95\xc5\x9a\xb4Nu\xd4\xd1\xa83\xb1\x19\x1a\xe4]\xf9\xad,\x8d\xe9\x8dt\xa7W \xda\xc0\xc3A\xc9\xb2\x90\x07\xbc\x8ey\x90\xbc\xa6\xd7@\xe1:n\x1c:\x0dg\x18a n\xc9{Hr\xd5\xd9\xdf\x177Fm:\x04\xe5\xa8\xc9\xda\x13a\x10\xd7\x11 \xbf@n\x1e!\x14pE\xcb=\x8dE`\xa0(E\x03L\x05\x8bV/]\x17&r\x1dr\xef\xa2` \x9e>\xc8\xb8\xa3\xfaI\x1d\xb9\x99\xa8X\xa2V\xaf~~\x88\xeb\xae\xfaI\x9d|\xd3>\xacC\x17\xc6u\x10|\xd5\xd4\x93\xdc$\x01C\xc9'-\x07\xd2j\xc8\xcd\n\x04\xe2d-x/\xb1w\xd2Z\xb0\xf8R\xad\xb6T\x08\x14J\x06\"K;\x87\xa0\x8f{z\xcc\xa8B\x9dv\xb5\"]\x07\xd6\xc8/<\xec\xa6\xd4\x0bL\xe5\xfd\xacF\x11U\xb0\xb9F\x99\x13or\xea&\x0e*\xb3\x92\xb6`\xac}L:/\xc74\x10\x80\xa9^\x1f\x17\xca\xd8\xc2PB\xcc\xd5\xd0e\xaev\xbc6\xd3\x84T\xc3:\xe5\x1d\x943\xd0\x9f^\xd2\\\xa1\x02\xf3\x88&\x10F)\xac\xe3\xe8\xda\x9fS \xf0\x18\xdf\x7f\x0c\xbcA\x93b\xc8\x86\x0b\x9aH}\xdaE\x8c\x90*\xc7}e%\xc5\xa85\xf4\xb9&H\x0bz,\xf1\xcf\x02\x80Hh\xc5\xebK\xac\x81\xa8\xbc\xeb\x89\xf4B\x90Tm\xe0\x95\x88\xe0\xed\x9dt\x8a4D\xe8\x9dfx}!\xe2\x99\xa7\x85B_\xa8\x9b\n\xee\x02\xcf\x95\xb4\xa4P\xb2\xdb\x19\xe8f\xc0\xb3\xcd\x8f\xcb\xef6\xa0@\xbe\xfc|\xd0\xe0s\x1c !\x88#\xc4\xd4W\xab\x9d{lwa\xd1o \xae\x1d\x1e\x03\x9d\x0egu\xf4\xa9\xaf\xc3\x88\x9b\x9ar\xa0\xc9\xcbd\xcc\xc72\x9a\xb9}\xd8T\x1f\xabz|\xa0\xdc\x1d>\xd7\xd2c\xd1\xd6\xcc\xad\x9b+\xa19]\xdan\xce\x1f\xecs\xa6\xea\xed\xd9\xfd\xbd\xf6\xfa,\xcdMR\xa4L \xbd:R\x8e\xbf\xa5F\xf6\xab\xd1\x94\x0d\x03;\xd5\x0f\xac2W\xd8\x87\xa9}]\xb8\xa9G}e08\xacd\x92\x8f9\x10\x8b\xc8N M\x9d\xea\xfd\xbei\xa4\xef\xf5#E\xaaj\xd3\x16\"|\xa7\xc4p\x07\x81\xb4]\xa1\x12|\x7f R\x9fom\x8fJ\xcf_\x1d\x7f<,?/eU\x1a\xbc>|s\xf0\xe9\xdd\xe9y\xb5\x9fQ\xa5\x1fY\xef\xcd\xa7w\xefJ\xf5\xb6wJ\xf5\x82\x88\xcc\xf1\xc2\x94}\xa9>8\x08\x82\xfc\xd9\x01\xe3 \x8a\xc7 Y\xd0w\xf2]\xf9CWA\xb6\xa1\xfcV\xab\xcd\xb3\xd5\x1a\xb95\xf6\xa5\xfa\xfek\xf9P\xfeP+\xfc\xf5\xe0\xfd\xbb\\q-`\xb0W\x9a\xdb\xfb\xb7Go\xdf\x1f\xbc\xb3-G[0Z \x98x\x84\xbb\xedv\xd9\xb7n\xe9\xd9\x9a\xc4\x18F\xd1w\xba\xf8\xb5\xfc\x14\x93\x19\xcb\xe7\xe2G\xb9\x06\x99\xcf_\x95<\xa5|\xa7[.\xeb~\x93M\xfc\xb4\xea\x06\x1d\x15\x00-\x95\x8b\xb4Z\xdb\xfaDq\x08\xbdRyV\x80\xacT\x9eh\x9cE\xad^\xa1\x01F\xbd-\x15y\x18\x07\xbaL\xaba\x1f\xb6\xcaE\x0c\x81\xb6\xcbE\xf3z[\x97\xf5\xb6\xae\xebm\xad`\x1f\x9eL\xcfn\x87\xc3\x8d\xb3\xdb\xe1\xd3\xb3\xdb\xe1\x8fg\xb7\xc3Wg\xb7\xc3\xc3\x8d\xb3\xdb\xd1\x9b\xb3\xdb\xbd7\x1bg\xb7O\xb7\xcfn\x9f\xeen\x9c\xdd>{s\x96\xbdy\xf3\xe6\x10\xff\x7f3\xbb\x9f\x9ee\xaf\x9f\xb2\x97\xb3\xd7?\xbey3s&\x1dV\xf2\x8a\x97\xb0\x1a\xee\xbd3\x19O\x7f/W\xbb\xff\xdd\xadT{R\x1e\xd6R\x0c\xeb\xe9\xceY\xb69\xdc|\x8a\xff?\xab\xd6\xba\xc3Z\xfd\xb3\xe9\xd9\xec\xec\x1fg\x9f\xab\x8f/\xd8\xe3\xdf\x9d\xc9\xb8s\xdf\xe9\xdcw\xa6d\xe3\xefg\x1b\xb3^\xc7\xfd\xf3\x13\xbf\\\xf3\xbc\xa89\xfd\xbdh\xcfu&\xe3\xff\x98\x0e7\x9e\x91\x8d\xc5\xec\x1f\x9b\x9f\xef\xf9\xf7\xbf\x9fm\xfc_\xcf\xcf\x9e\x9cM\xc6\xff\xf9h\xff\xacw\xf6\xe7\xfe\xf9\xd9\xa0\xf3?g?<>s\xce\\\xf6\xf6\xcc\xfd\xe1\xcfO|\xddYqc<+F\xc3\xc2\x8an\xb4\xc5\xbf+\xd4\xbc\xde\xd4\xa1\xb1\xa9gEK[\x9b-Z\xba}HK8\xbe\x87\x8e\xf5\xc4\xd8\xc3\xf6v\xd1\xd4\xb3\x91\xf2}K\xe9b\xb3\xf4c\xa7E\x87\x1a\xbd\xbaF\xc5,\xc7\xf0\x14^\xec\x0bgI\xf6mg\x0f\x13Zn\xb0\x07cx\xb6\xc7\xca0\xaa\xf8\xd6&\xdc\x0b\x9bF4a\x1c\x0d7\xd1\x9ca\x83U\xea1\xb0\x8cacd\x1d\x98F\xff]\x8c\x82Or\x02\xdd\xb3a\x97\xf7\x9c\x97\xfc\xff\xb0@\xadr\xc1JF\xa3]\xa5(\xc5J\xd5\x82Q\xbe\\\xac(\xe4EjK\xd7X4\xdcT\x8a\x16\xbc\xd6\xb6R\x14\xf3Z\xa3\xa2\xe8\xff\xcfJ\xb6\x94\xd7\x00\x0b\x8a\x97\x1ew\x1f\xc3\x18\xb6\x95i<\xc1\x11\xaa=\x9d\xb1\x92=e8\xff\xe7\x7fc\x9d\x1d\xa5\xe4\xff\xc6:\xeaL\x91*\xb0\xd2\xa7\xc3J\xe93V\xda\xedZ\x17\xe1\xc0\xb8\x08\xb8\xfe\xbb;;[;0\x01\xeet\x87y\x0b_]\x92\xf8U4\xc7\x9c\xa8c\xed\x83\x9d\x9d\xcdg\xbb\xd0\x03\x87!\x0eka\x17^\xbe\x84\x11\xe3uvv\xb76\x87\xe5G\x8f\x18\xbc\xb7\x14o\xd9\x82_\xcb\xed\xe4\x8e\x85\x9a\x043\xee9\x9b;\x8c5\xfb\xa0);\x054\x97;\x85\x17\xb0\xb9\xb3\xfb\x1cN{=\x17\x8e\xa7\xa73\xd8\x87+\xe7\xd4\x85 \x8c`\x0c\xc3>|(\nu\xc4\xe9\xbdV\xc1\xa9\\\x94Dx\xdf\xc7\xc3\x17\x0f\x16~@C\xb2\xa2\xa8,\x0b\xd7Y\x8aN\xb4Q\xe2\xa7huH\x07\x81\x1fR\xb5\x0c6D!:\xd0\x97\xe6^\x1f\xcb[\xedX8\xcf,\xc6i}\xff\x0f\xed\xfbt\x10\x85\xbf\x918\xf4\xc3%w\x8d\xce\x7f\x8a@\x85\xa8U\x12\xed\xeb\x16\x87\xad\xcbQMe\xc4\x18\xb7\x9a\xd1\x99V\xb9{]$\xa4\xab\xcb\x8e\"7\xf0>\xd0\xc15\x8d\x136\x8dG\x8f8$\xba\xf3l\x1d\xf8\x1eF\x1d\x84h\x01\xff\xc1\xba\x84\xb9\x1fS/\xf5\xaf\x91\xc7\xe2IC\xf2\xa4:\xf9\x9b\xe5\x9a@<\xc6`&@o\x89\x97\x06w\xc0d]\x99\x03\x12\xe3E\xb3A\xb0-\x85w\xe0O~w\xd8\xa17\xeb\xb9g\x03\xf9\xed\xcfO\x06\xf4\x96zN8\x1d\xce\xb8\x17\x1b\xef\xc8\x0f\x82\x8dE\x14\xaf\x98\xa4\"\x1a\x04L\xb0I\xa1>Z\xc6\x8e!\x03\xf96L\x9d\x18\xc3B\xe2^\xf1\xcb\xe5\x9b\xb2\x9c\xcf.*z\xcbB>\x13r\x11\x88\xf6%\xccD\x9f20\x1b\xe7?\xe5\xc3}\x081\x12%\x1dx\x97\xd4\xbbz\xe7\x87\xf4\xc7\x98\x92+\x0c{\xc1v\x90\xec\n\x0d\xdc7\x8b\xaf\x7f\x88^\x93l\xcd8Y:o\xe8\xb4\xb4\xba\xd5\xccb\x07?=\x0c]\xea\xb8\xb2iX\xed\xd3\x83\x9f,\x8b\x9d\xdeDE\xc2O\x06\x988\x07\x08\xf2\xc7\xb8\x0e\x17\x83\x94&\xa9\x13\xa3\xa8][\xda\x94,\x81'o\x01g\xe1\xc7I\x9a7\xe8J \x94\xc6\xc0zI\x84\xeef\x90\x92\xe5{\xb2\xc6\xcb[9\xe2\xc7\xe9%\x8d)\x9a\xbb\xc1:\xa6\xd7~\x94%\xc1\x1d\xcc\xa9\x17\x90\x98\xce!\xc9\x16\x0b\xff\x16\xa9b\xf71\xf4 \x86\x1e<\xee*\xc3x\xec\xf6\xe1\x9c\x0f92\x0fy\x1dS\xd6\x8c\x93P/\n\xe7-\xc6,\x07;\x8dg\xb6xr::\xfa\xd1b'\x89\xb7\x0cy>\xb5\xf2\xba\xa2f\x10^\xe8QA\x18\x93Ib+\xdcH\x11q\x8c\xd1\x81\xf1(\x89\xb8\x83\xad\x8fw\xbfB\xed\x06\x11\xbc\x00\x9f\xfd\xe9\xed\xc3\xc8\x15<\x83C\xb0\x8e'\x8e\xb4\x03\x06PW\xf0~/\xf6y|8\x82|\xcfh\xb4=\x1a\x8d\n`\xd3\xdb5\xf5\xd8\x9e\xb8&\x81?\x87\xbf\x9c\x1c\x1f\x15\x11\x0cuv\x8bhp\xb5\xe2\xab\x96)4\x84-E\x92\xc6\x94\xac\xd0\x16\x89\xf8a\x02a\x14n\xacc?\xe4[=o6\xd1\xb6+n=\xd8\xbc2\xd3\x9ai\x96\xecu\xb1d5\x87M\xbc\x7f\xe1\xeb\xd5\x87\xa0\xdc'B8\x1e\xf8 \x17\xfd\x9cP\xc1@\xa1\xaaY\xd1xIaE\xd6k?\\&\xcf\x11\xdb\xc4\xdd\xd6\x1c\x92(\x8b=*.9\xd8&P\xc9\x1aC\xc3\x8c\xaf\x1e\x13\x16\x1d\xc58\xf6\x8a\xdea\xa2\xb7|A3x\x01\x01\xfb\xc3\x17\x14\x9dd\xa6\xd9,\xdf{)\xda&`r!\x1e\x95 \x9c\x12\xb6\xeb\xf9\x0fU#\xae\x03\xcf;\x05\xa3\xd5t\xaa:P\x05}\xf0\xeax\xcd\xb0\x90\xb3MN\xa4\x9e2y\xc4\x11\xf8\x07\xe6\x83N\xc9r|GV\xc1 \x8a\x97\xfd\xcd\xe1ps\x8c\xf0\x13\xa6\xf3u4gm\xf3\xf4\xd2~\xc2\x99\"\xdf\x96\x958\xe0\xe0\xf4\xf0BL\xc2.\x80\x17\xe0\xb1?\x1cv\x12\x17\xfci0\xd3\x9b\xe4!\xf6\xe6\xd5\xeau\xf09\x1d\xfc\x91\xf0\xbb\x95$\x8f\x82\xcc T\xa7X\x13^\xe0p\xbe\x08\xd8\x1e\xc3\x0c_5\xd6i\x1f2\xfe\xa4`\xb0\xca|\x01\x9dK\x14\x83+z\x87!M\xd2i\x84\x17\x7f\xf9\xadM8\x8dfZ\x01(\xb5.\xfe\xa7V\xb2\x94\x102D\x8aMN\xa3\x14JR\x8c\x1c\xf32\x15?{=&Vl d\x98\x80\xa3>\xea\xe7\xa2\xa6\xb5E\xce\xcb\x15\xaf1\x1e\x9d\x83\x87\x00\x02\x16\x9d\x9e\xd8\xf6\x92\x84\x8aSx|\xd6\xc3\xe4C\ng\x8a\x13\x90\x8dY!\xf37\xd3\xd9]J\xc69\x94\x19\xfflSx.\xb2~GZchqyr\xe8D\xees\xd7\xd4Z\xaf\xa7\xb6\xa7\xdd)\xb8\xdb\xb6\xb8he\x08\xf0?\x8f,\x979mz\xd6\xbe\xfc\x19n.}\xc62\x8c\x86\x05#7\xda*\xbe\x8bb\xc3\xb8;7x\x14\xe12\xd6k t>a\xf2\x90f@\xf7!fx\xc5\xd7\xfbm8\xe7\xe6\xcd\xc3\xe7R\x90e\x0b\xa0>d\x95\x1f<\xed\xcf\xba]\xb6!8\xf4b\xba1G\\e$/\xf8c\xcel\xce\xe9\xc2\xf7|V\xec\xe3S\xe4\xfe\x91k\xb3b\xe5\x1b\xc3~\xed\x8bD\xb3r\xc8ZR\xd0q\xb6wpl\xa6\x8d,2\xe7n\xefr[\x01\x0c\xfd$\x84\x96z]\xe81\x82\xdaTe\x93\x13\xc1\x90m\xc5\xad\xbe\x80MC\xff\x9d['u\x1bd\xc8\xbfke\xc0QNjTf\x81\xeb.R\xcc\xda\xcfc\xce\x15\xcf\xe2AL\xd7\x94\xa4N\xf7\x0c\xcdd`\xa3\x94(K\xd7\xf5\x8f\xda\xae\xafE\\A\x89Q)\xd1X\xe2\xf9\xdck2\xf4.\xaby\xb3A\xa8\xa5u\x99Q2M\xae\x11\xeetQ\x08\x95\xbcM1=\xfe\x831\xb8\xf2;;,\x88\x90 \xda\x11+lk\x9b\x93\x13\xfc~\xebX_Dtp5\x97\xbe\x92\xb9\xed\x0c\xfbP\xa6\xffHbY\xf1\xc6\xc8\xad\xef\x96}\x06c\x99\xbb*\x0b\x82v\xa3\xafu\x9f{.\xf0\x0d\xc2O\xdf\xdf\x04q_\xf0<\x1e\x1d\xcc\xce\xc2\xbb\x92\xc8\xe1\x96\xc7\xd7\xa6\xf3~q\xd8#-\xc8\x8f{1\xa5\x97\"^\x8c\x00\xb0+\xce\xb1\x0b2W\x89\x00\x93Z\x08$\xf4o\x19\x0d=\n4Lcm\x94\x80|b\x15\"\x93ji\xa9$\x01\x9dL\xe0\x08\x13\x9c\xd0W'\xc7\x1dd'\xe8\xe0\xca\x0f\xd1\xaaG\x8e\xa0\xdb/6\xd3>\xe3\x0c\x9b\x18\xca_\xcd4*g1\xf95\xbev\x07T1\x9dMq\x8b\x9f&N\xf3\x11P\xd8\x0f\xe8\xdaQ6\x0c\x9b\xbfI\x03C\x84X\xc9\xafv\x18U\xde\x15\x1cP\x9b\xd3\x82\xf1@\xc8\xcfw\xcc\xdcA\xe5\x851lq.)b\xef\x12%\x01g\xb7\xd3\xe9\xb6o\x85\xbf\xd1\xedC\x99\xd11\x98<\x1b\xd9\x816\xdd\xd5^\xcc\xd9\x00\x85\x0b\xd8\xdd4\x1e\xfd\n\xe5(lF\xd8\xecc\x9d \\\xdaem\x86W\xb0\x89Y\x98K\xb04\x9cK\x9d\x80\x10Do\xfc\xf4\xd2\x0f\x81\xc05\x8d/H\xea\xaf\xd8\xcaW\x15<\xa6p \x82sS\xe6\xdb\xb9\xe5\\\\\xbe\x9al\xaf\x11\x98H \x98,\xa5\xceC\x08\x90B\x10\x06z\xeb\x05d\xc5\x11pE\xe2\xab\xa4\x9b\xa7k\xae\xc0\x82\x1dP%\xf1\xa1\x87\xc9\xed\x84bG\x95QCR\xd1\xe9T\xfaL2\xef\xb2$r\xcb\xcc\xe5U\xf4\xe1\xa4\xbd\x1d\xdc\xeb\x0b\xdd\xbc\x9ew\xb9R\xaa\xd0\x15\x18!\xb5\x08\xa2\x1bF.\xd9v\x8d\xe2\xd2\xf8\xcb\xab\xa6#\x7fx\x90u\xce\xf5\xfd1x5\xc0h\x8c\xf6\x1b\xb1\xcb\x03KH\"\x1a\xc3\xb8\xae\x06\x0b]\xa5F\xaep\ng\xa8\xe6\x1a\xb3]*N\x89\xa2\x16+\x93Ou\x8f\xeb\xf2\xb3\xac\xcf\xb5mY\x98k\xd6\x94UG\xcdZ\x88\x9a\xb5\xc7\x98\xda\xdeJ\xbc\x7f6\x13o\x0dY~\xca\xc9r\xf8\x15d\xd9\xcc\xc8\xe8Is\x08\xa2\x86J\x9e\x0d\x03(af\x15\xab\xe5\xc6\x0d\xc5\xc6\xe5\xa2f\xe7\xc4 \xd9\x0en\xd3\xa2\xf6\x84U\xb6M\xae\x03)\xf6cy\na4\xa7\xb0\xca\x92\x02\xdfH\n\x01%I\x8a\xaa{E\xcbV:\xa6\xed\xbb\xa9a\x81\x7fS\xb4a\x9as\x01\xddqQ\x1b\xb6\xea\xc3\xb2\x0fw}\xb8\xe8\xc3y\x1f\xae\xf8e\x94\xe6\xd0~o8\xcc\xff0\x1c\xe6\xcab\x07~\x92\xd2\x90\xe6\xb2\x12\xff\xe5t\xa35\x0d1\xbfx?\xc7~~}\xa3@A\x16\x08~E\xfe\xcc9\x15^\x80jO\xd8Gc\x88u\xc1\x97-\xf8W\x11q\xad\xca\x88:\xefs~\xb5\xcc\xbe\xc1\x84\x03\x01\xd3_\xa9B\xa6\x90:\xf0\xba\xae\xfa\xf0\x85P\x84\x9d\xa2\xf1\xa5\x8b\x17\x1e\xec\x85\xd3\xfa\x19*N\x14\xe4\xa0\xee\xefq3>w\xcb\xc3\x9b\x14\xa3[q~\xec\xbb\x0c\x12\xc6\xd8\xbcn\xfdV \x832\xbfg\x83\xf4\xf3\x1b\x9cS\xf6`-6\x15\x93\xfa\xce1\"w\x0et/'i\x98\n\x80\x1d+}\xb8*\x1f5\xa5{\xc4\x1cR0\x01\xde+\xca^W\x08\x9c\x87\xdc\xb1\xf4\x0b%ob\x96\xce@X\xee\x98%4\xf6YXBr\xcf-\xcf.%Nj\x9f^[\x9f\xae\xacO\x97\x86\x0d\x08\xc2\x8eF\x97\xa7\xf2\x0b\xe4\xc7\x85PY\xb7\x93\x1f3\xa3\xe7\xbf\xf4Vn\x16'\xfbB`\xe6B\x1b\xa9\xf0\xb4\xbb\\(@\x81f\xe7\xa9\xf8~\x7f\xcfhyl\xb5\x84F\xad\x13\xd2\xc1\xb0\x0f^.\x02\x1auP\xea{\x8a\x80\xd7\xe8F\x880n\x03\xb1C'c\xfb\xdcP\xb5\x81\xbfR?l\x84;\xdc\xde\"s\xe1\xd6\xd4y\x85S\xce9F\xc2X\xf8\x94&k\xe2)\xa7\x8f\xaa[\x05td@\x0e\xfa\x8a\xdemp\xd3\xea\x84\xae \xf7\xf0\xc8\xd9\xe9\x8b \xf2\xae\xa4\xd6\x9a\x1d_(l9x\xd7\xb0\xe8\xc3\xbc\x0f\x97}\xb8\xe6w\x05n\x1f\xf7\xc6\xb5\xa0\xd2\xa2\xe8N\x109\x81\xdc\xc8|\xb2\xbf\x97\xf9\xfe\xc57$\xc1\xb7\xc3\xa5e\xf2+\xa6\x04\x88\x97vF\xe9\xba\x91Q2\xe5'a\x80\x17\xe6\xa0\xce\xba\x19\x17\xf8\x9d\xd8\xb3\xad\xbe\xd0\x83sM\xac.P\xbd\x85\xf2\xb1>G\x9b\x9caX\x1beQ\xf9a\x1d\x8e6wD\x8fC\xde\xe3?\xda8\xf4|\x01[\x15\xbb}0\x80\xa1|\xf2\x0b\xfc_[\x19\xab|\xab\xb1\xbd\xda\x06\xbc\xe2\xbe\xb0.\xbe\xf2\x9b4\x8e\xbb\x97%\xdc\xbdVp\x97\xd1\xdb\x1c\x7falR\x1b\xc7\xe6\xc3d^\xf0\x1f\x9c>\x82\x17\xadV\x04.hzC\xa9P\xf8xQ\x10P.\xc0R\xeeD\xc8H\xa3\xc7\xb6\x95H~\xc9\xc5=\x1f\xef\xd99\x9a\x88\x13a\x0dm//@F*%\xf6\xeb\x8a\xd4\xcdU\x0e\xe5\xeb\x84@\xb9N\xf0\n>%Q(h\xa9\x19\xe3\xc2\x97\x05z\x02\xf9\xe5H!\\ \x8ew\x8d\xe4Xj\x9b\xdb\xe0Qe\x04\xba\xb1/\xca$\x9f\xad1\xd2\xb8\x18\xe9\xbc\x874d\xc1]\x81'\x10\xf3{\x13\xac\xc0\x17A\xa9\xc3*\x89\nI\xb5ga\x1e\xde\nI'\xe0\xcc\x1f0G\xd6-\xd6\x1f\xb5\xd8\xb3\x0fQ\x13W\x90\xb1\xaasd-\x9d\xb3\xd1\xa2\xee\x83 \xd9<\xfdn[R]\x15T\xe7f!\xd5$\xf0y\x96g\x0b\x0c\x8a\xab}\xb4\x86Z\xfe9\xf9\xd1\xe9\x01 \xa7\xa9b\x11I\xf3\"\xba\x82\x87\x7f0\xe1\x16\xb7\x08\xa4\x15\xddntP\x04I\xa6\x95\xab.\x8f\x04$.S\xacnW\x12\\b\xf0deC\xdb\xde\xb2N\xbf.h\x89\x1bU\xe22\xfc\xdcg\xe4k\x82+-\x1a\"\xc8\x7f\x8d1\x80\x17\xc7K~=\xcd\x99\x1b\xef2Z!w\xb3B\x86\x92q-\xfe\xc2\xd7[\xe1A\xb3\xd8\x83b\x80\x83\xc4\x83\xbbI\xa0\xbc\xc8\x93ne\xb9\xb3D&\x9d%6F\xbfF\xf1`\xdf\x18\x11\xbe\x8e5\x0c^\x87\x0e1\xea\x16\xac\xe65m0D?\x0ey\xaf\x86]\x9b\xf9\xfe-\x89Y\xc6!X\xc7\x07_3FP\xc7\xd9\xb9q\x88r\xcf\xad\x19\x90aC*\x1b\xce0P\xc5\x1a\xa8j\xe4\xd37\x8d\xbe\x9d\xf2\xc4\xe9x5Y\xe9\x05;\xe4\x1e=\x92\xd6CDc=\xd4\x06b\xe6%\xebxP5{x \x0bdC\x169{\xc1\x1f\xb8}\xb8A\xd4[\xf7z_\xbc\xd9\xeb\xb3\xb3\xe3C\x82\xf3\xbe\xae\x98\xd3TLf\x02\xf4A\xe9\xc1\x1a\xc6\x8c\xb5\x1e\x8b\xb70\xc4\x88\xcc\xf1\xa8\xd8\xe2\x9c\x85M)\x0f\xecA\xed\xcd\xaa\x0fa\x11=\x01\xb6Q\x18\xc7\xb0\xca\xd9\xb8\x96\x83\xe7Zo\xf9\xe6\xc8\xfa\xe6Z\xf0\x8ccA\xed\xd60\xd1M\x17\x90\xee\xd8\xdaix^\x1e!\xb7\x16\xee\x0c%\xe9\xea\x8b\x83\xbbj\xfe\x05\xd5M\xf8\xdc\xfd\n\\e\x9f\x8fB_\xaaj`;\xa3\xb6\xa4\xd3(@W\x8ek\xc9A=P\xbc\xd53'[\xcf\xbe\xfez\x12\xdar\x0bUi!\xc6\xec\xbd\xfb\x9a\x0b\xc76\xe3\xb1\xb0\x1c[\xdc\xa0\xdf\x9a\xf2\x82\xd5\xfb(8\xf6\xd2\x821\xee\xbe\x01,e\x9e\xa5\x00\x8cE\x17\x18\x97\xe6Y\x85D\x19\n\x863\x0e\xa9\xd7\x8d\x83\xb7\xe6\xf9\xd0#1b4\xf6\xe3\xb2\xc3H\x88_u\xf0\xf2}\x94Kt\xfb\xfb\xfb%\xc3\xdfG\x8f\xb8\xf1\xe4\xc4\xca\xefK\x1f\x9f\x82\xe3O\xfcp\x19P\xf8[\x16\xb1\xaab\xedEBJ\xf3,5\x1b\xe9!b\x86\xbe\xd3o\xb1ST\x01\xc3\xb0k\xb69z\xb4P\xd3}\xfb]\x13\xa29\x85v\xd7\xb4\x18\x8fU3\"|W\xb3|\xd0Z\x8a6t\xabC2!>\xaa\xb16e\x9b-\xf6\xa2\xae\xab\x9bvW4\xae\x8a\xfd\xe6}\x98\xeb53\xee/\xca\x90\xfex\x9a\xcd\xdc\xd2\x01\xf3\x01}G\xd4I\xb6h\x11%\x9c\xd1\xa60\x83\xc3`\x93l/m\xa2+\xf1^.\xcal\xc3\x18\x9e\xee\xe4?\x99\xd80t\xe1%\xfb\xaf\xc5]Y\xc4/\xb4}n\xb4\x1d\xb1\xf7\x9eC\xb4\xb1\xe1b\xef\xaf\xda\xc2\x8a )0\xc1f\x1c\x1f^\xbc\x80m\x17z@r\x91*\xdf\x81\x97\xf4\x96\xcc\xa9\xe7\xafH`wiR?*(\x0f\x1c\xbf\x82/f\xbe\x85\xc3RR\x81\xab0\xba \x81&\x1eY\xd3\xdc\xd8\xd3\xd6u}g\xd8)iVPR\xbe\xf5M\x94\xb4\xde\xf0w\xa2\xa4\xf3(\xbbhCI+\x83i\xc1K<\x84\xb4\xeaG\xa1%\xad\x8a\x1aG\xc95o\x0e\xbd\xc6!\xad\xa7\xaa\xdb\\\x87\xd1|\xf1\xdd\x86\xaa\x1a\x1aie\xee\xc4M\xe0n\x85\xf5[\xe7\xc4\x89\x19\xd9l\xd3b}0\x0f2y\n|\x92<\xc8\xe2Ic\xfc\xd8/\x9b:)*\xf5J8\x16\xd5\x10\xf2q\x16\xe6j\x80\xb9\x18G\xc5(N9\x93T5}8\xab\xde]\xd5\xd9U\x86&_j\x8a\x82ZWO\xea[\xd9IiV\xce\x99/\xba\x19z\xdd:^3b1\x88\x9c8\x1ew\xfb\xe4D\x1a\x85\xde\xad\xa7\xc5\xf7\xedM\xa5|\xab\xf8.\x15}\xf8cW\xad\xf4L\xf9\xae\xd4\xd9\xdaS\xea+\xe5\xcfx\xa8\x07\xcf\x8a\xe5x\xe2\xec*\xdd\x0b\xb5\x99\xc7u\xf4\xb7\xcd\xdbHHg\xf7\xf7\xdc\xbe\x8f\xa1y\x8b\x8d\xd5\xcc\xaeD\xe8K^fw\x85\xd5\xba\xd8`\x9e\x95\x0b\x11\xd6\x19\xd6Dp|A\xbfh\x8a\x16\xe1YI\xaf\xb8\xb5\xd3v\x10\xf6\x01\xa0\xafL\x8b>\x9b\xb4\x12\x8dGM1G\xafY\xfb\xc8\xda\xbc\xc1\x8a\xcdV\x10Y\xaef\x91\xd74\x8a\xf1Y\x90\x17p\x95\x89rrn\x8cjw\xd4\xfb\xf6\x04o\xf2C\x14\xf9\xfd\x8b\xb5U\xe2#S:X+\xda\x839\xab\xc0\xe7\xfe\x1f\xdcx\x80\xd1'u%\xc4\xfduI\xe7\x16|{=\x8e\xbe\x14/\xc08/\xc3\xe9gg$y\x191\xde\x0d\xc8\\\xdb\xe6t\xfbp((\x9fS\xae!\x0c\xcd\x0c\xcb\xd1\xe0\xf2`:\x11\xabC\xedtr2\xc2]\x82\x05\x99Y\x94\xe8\xcb\xba\xaeQ\xe1\xacH_ZQr\xf2\xf7\x87@\xa1\xdc\xd1:\xf7f\xc9\x8d\x0d\xba\x93.\xea\xa6,u\x95\x12q\xb3[\xd8\x81\x15gur\x19e\xc1\x1cmu.\xc95\x05\x12\xdeI\xcbk\xbc\x84\x95\xfe\xde\xad\xaf\xbb\xf3{\xc5Buv\x9a\xcf\n\x8d<\x85\x8dg\xa5i1\xean\xa7[\x14\xe8\x9d\xcd\xba\x93n1S\xab&y\xc9ugw|\xed\x85\x11\xd2\xe9\xdd:OZ\xf7\x1c\x96\xf0\x02\xee\xd8\x1f\xf4\x1f\xb7\xd2\x1c\xe7\xa2\xde\xcet9s\x072\xe0\xbb2u;\x9dPp\xe2b\x90'lW]\xd3\xe4:_\xf0\x1b\xe6/\\\x82o\xbb\x7f\x05\xb1/\xb1t\xe7\xb6`T\x0b\x86N\x19\x13\xbfw\x16\xc7\xdb\x91\xf0\xf0;\x9a\x863\xa9cc\xf4\xf4\x0f\xa1q\xe0\xf44W\x82\x15hZ\xd2<\xfc\xc9\xdcy\x99\x1e\x0c\x15\xd1H\xec\xf7\xc2=\xdfN(\xdaV\xe4\xf1\x1c\xdaW\xdet\xcb\x11]D\x84\x07u\xdc\x0c D\xb3W\x13T\xd0\xadH\\\x8b\xdb\xf2[\xc1\xd3\x8bi\xa2\x9d\xc6Z1N+\x03\xa6N\xa4\x1f=\x82%w\xf0,\xaf\xbd_^{\xc8Cq\x84Q\xb8qp\xf2\xea\xed[%\x9eL\x02$\xa6\xe0\x87)\x8d\xd71E\xc7\x87\x04\xc5\xad<\xe8\x9c\\\xda\xa4\x166\xa0\x85<;\x81\xed\xddf \xbb\x82\x15h\x80\xb0RA\xf1\xa4\xdeP\xa9d]\x1f\x1a\xc5\xa8\x0b\x15\xe8Yxp\x94\xd6\xc3z\x18\xff\xd5\xd1Fa,bAQqv\xa0\xcc\xc3\xce\xc8\xa1\xe4\x17\xf2\xb8v2d\x0c-\x03\xa0\x98\x02\x82@\xc4\x92\xb1Wrhn^\xd0\x87\xdd\x9d\xcd=\x11+U}i(k\xb2r\x8e\x15#\xb7J\xfb\xaeE\xde\xe9\x90\xde4\xdf\xaca\xe6 \\B\xc0DL\xf8[F\xcfds/~\x08\x96G\xd4Id\\\xf6T~\xbd\xbfg27>,\x02Y\xb2\xe7\xc5\xafr\x13\x9c\x13\xc1*\xe2\xeb\xfd=W\xeb\xb3\xa7\x18\xa0\x8a=\x93\x91\xaa\xf2'9\xbb\x86o\xca\x1f\xe5\xb6KB\x8cL\xc2\xcd\x07\x8a\x81\xc0\xfd\x80\xce\xdf\x8a:2\x97 \xe7\xdf\x0d\x95O\xf9\xd3|\xe8\xb8v\x052\x88rE\x171\xccG\x8b\xea\x08\xf5\xa7\xd4H\xa8e\xaa!\x10O\xf7,\xf7'\xf2\x17eB\xcb\x97S\xc3\x04\x86b-\x11\x93\x86\xdd\xaev\xe5\x97s\x93t\xf2\xdc$EZ\x12_3#%$V\x11\x82-\x86\x17\x10\xb1?<\x04[\xea\xf8\xd3xf\xa7-?i7\x9c\xdc\x99\x7f\xd5\xad\x1f\x1b\xb1p\xe8\x96\xd9P4\xfb\x95\xd5\x1a\x89%\x95\xb5$X\xa7C\x8dOA\x91\xc9!r\x8a\x8b\xc3\xfc\x86>\xa7\xa0~\xa8P\xd7>\\d),\xa2\x8c\x9drQL\x1f\x94\xc9\xa1He\xf0K\xbf\x9e\xfa\xe0\xa7\xbe1kA\xd3-D\x8b5E\x94\x89\x07\xf46\xa5\xe1\xdc\xa9\x83\x8fo\xea1\x90\xf2|Xg\x95\xe5\x90\xc8\xf7\x85\x8d\xfdI\xf9\xa9M\xe3`\xa5\xccb6?}\xe9l\xea\xf1\x81\xbf>c\x81.\x98h\xe4\x94B/V\xa7\x81tL\x1c$\xf2l\xb9\xc8\x16\x0bN\xba\xeb$3,\x93\xccX\xfc\xf4\xa2 [\x85\xa5@\xa7\x05\xde))\xd8\x07K\x9a\x9e\x84\xfezM\xd3&\x00\xd7\xcc\xd5\xeb{\xb1\xa3\x0c\xd7U\x95\x06:\xd9\x1bD\x00\xf8m\x85c\xd8\xdb\x11\x11p\xc4\xadKi\xb6\xc2:\x80\x1d\xe7\x1b|?w\xcf\x86g\xf1Y\xf8\x7f\xfe\xb7\x9aU\xa0;\xf0\xc39\xbd=^8\xcah\x90\x8a\x1f\xa4N\xc4\xef/\x0c!\xab\"\xd8@2^\x06\xf2\x06\xf6\x9b\xc2\x13\xd8\xe4\x9c\x87^X\xc3q\xc3`0\x00\x1c|o\x1fv\xf4RJ\x1bw3\x04\x91/ A\xea\x90 \xf0B\xc5\x0d\x85\xbd\xfab\xd0\x10#X\x1c\"\xc8\xf8F\x052-\xa0\xe2\xabP!\x0c\xbe_\x01\x15\x81Q\x99\x84\x87\x98\x00\xe7\xea\"\xee\x8aX\x98R\x02\xaa\xa1\x84\xe4\x95\xa1\x01x\x8f\x07\xcc\xefUkAO\xb3\xe6=\xe5\xbc\xe8A\xf7\xf7\xaeJ\xa0\xd4=\x94F\x9c\xfb\xb5\xe6\xe6UB\xf6u\xbb\xda3\xbe\xd8\xfa\x8caE\x0e\xe2\xb1\x1fr\xe1\xb1x\x86\xd1\x92\x1f\xe3U9\xe3XH\xca%\x186)\xa7\xa0\x04(\xd7\xf5\xd8\xdc\x04%(\x9e\x8b\x02~\x05\x82;\x10\x85r|VP\x03G\xa8\xa8x/c\x0e5\xd4]j\xc9tNi\xbe\x92h\x8ev\x953Em\x9d\x9d\xc6\xb1\xa3 \x87\x93\xa4q\xb7_\x81\xf5\x95\x1f\xce\xc7\xc5}n\xe9Y\xae\x90\x1d7\x98w\xd4t\x9e\x98D\xa2\x94\x8b\x00\xca\x07\xbb\xfb/\x82\x00\xfd\x9b\x11\x02\xb9c\xde\xb7\x85A\x95\xb9\xfe\x97\xc3`E\xd6&\x18\xe4\x8e\xb6\xdf\x16\x04\x15\xd7\xd0\x7f=\x08\xd8\x08\x1f\xb4\x13\xc4\xedA\x13\x00|\x19\xbe\x07Ek\xabm\xf0u\x9e\x8cR\xc8\x01&h\xca\x98\x9d\x8f\x1eA\xf7\x7f\xc4\xcd\x1d\xf2\x02E\xb9\xd3\xc5 \x15\xcf\xbaG\xd5\xdf\x9f\xde\xbd\x13\xbf+\xbcv\xf3R7\xac\xb4\xad\xb9uL1\x10Y#\xe0T\xcc\xc1Q\xdaZ\x8d\xe9:\xa6 \x0d\xd3\xb1\xa6%\x8f\x84Q\xe8{$h\x98\x01\x14\xbdv\xffG\x93J\xb3~5\x12D74\xf6HB\x1f\xd02\xaeK\x9b\xc6\xb3\xf5\xfa\xc1\x8d\xe3\xa2\xb6i\xdc#+\x1a<\xb4q\xfd\xc8m\xeb2\xa7\x0b\x92\x05\xe9Iz\x17\xd01tsxu\xff\xe5\xfb\xfd\"\x8a\xfe\xa9\xfb]c?\xd5z\xbf\x97\xf6u\x1agT\xdd\xc7\xa7\xd5\xdf\x1f?\x1d\xca}\xcd\nv\xd4\x97\x17$HJ\xb5\xdf\xd4\n\x0e\xde\x9d\x1c~)]\xb0m\xe4\x87\x0c\xfc[\x12\x90\xeeT\xa4\x13\xf81\x8a\x02J\xc2\x19\xef\xa3\x96\x9cN\xb2\xa12\x03\xed\x17\x93\x1b\x1dQ0&\xc8\x95\xf6\xa00\x91\x00\x1a\x83X\xa56\xdbXG#Z\xf5\xc5\x81=\x96\xeb\xdd\xa6/\x1d\xc9h\xd7\x97\x9c\xd7\x1b\xc3\xbc\xfe\x1d(\x88)C\xe2\xee\x03\x93\x9c\xd6\xb2\xa7\xed\x14\x03\xd54D\xda7\xb4\xa74$\xbfUI]\xa4#u~\x98\xfe;P:\xae\xb4Q5\xd8Z\xcc\x89\xccn\xf5\xba\xa8\xde \x95'q\xa3ylw\x83\x1bB\xf1[\xd4i4C\x19\xad\xdb\x13y\xdesY\x8eN{\xbdh\xe6\xf6\xa1;\x14\x99\xfe\x8d\xe29j=z\x82!\x8b\x1b=\xbfp\x14\x17\xbcQ\xb5+S\xfb\x90\xbby\xf4z\xa4\x9fb\xe6\xb7\x959\x8ev\xddA\x1a}b\x02\xe9+\x92PG@\xa2\xb1\x9a\x0526\x1c\xab\xc8\x85b*\x15I&aO\x0f\x02\x9f$4\xb1\xe1\xe2t\xb3\x0f\xdd\x0b?\xecjR \xe4\x98>\xedC7\xf2R]\x95\x1c\x8e\xd3\xd1\x10\x13Uy\xbaZ%\x88OG\xbb}\xe8^\xd2\xdb\xee\xf7\xbd\x0b0\x8b\xb5\xe5b_\x08\x90\x1f\xe9\xf2\xf0v\xedt\x7fw&\xe3\xe9Fo6q&\xe3\xe1\xfdt\xb4\xf1l\xc6\x8e\xd8\xf3\xd9\x0f\xae3\x19\x9f\x9d\x0d\xe4/VaJ\x0fgXY\xa4\xc4\x9d\xdc\xe7\x15z\xda\xc7\xc5/\xd1\x8c3\x19\x97\x0f\xf2\xa2\x07^\xf9\xecl\xe0L\xc6~\xb8\xb8\x7f\xcb\xfe\x1d\xbdq\xefyQH\xc2\xfb#rt\x7ftp\xe4\xba\x7fV-\xef1.?&\xedU:\xa7O\xcczB\xad\xf0\xbc\x08\"\xf2]\xc4gU\xbf\xcdoF\x18\xa5u:\xbe\xe0`\\\x95\xf9\xa1S\xd5zo\xf6\xcdy\x1am@\x189B\xd8\x07\xc9G\x08\x03\xe4\x1a;2H\xa3w\xd1\x8d\xdc\xd2\x8c\x97\x80 ;\xc8\xc7 b\x00Og}\xe8\xf66\x94+tdX^\x8a\x13\x86\xdf\xa1\x16\xccH\x1fX\xcdE\xc1{\x08\x0b$\x98\x88\xc3l\xf0\xe1\xf8\xe4\xed\xe9\xdb_\x0f\xcf\xdf\x1e\xbdy{\xf4\xf6\xf4\xaf0\x96\x8f\x8e\x0e\x7f:\xa8>\xea\x0eB\x12\x16\xcd\x1d\x91#\x18CZf1\x04is\xd2/\xe33\xa22\x9f\xf1\x86!\x8e\x95\xd3\x10\xb6w1\xe74\xa2\x07t\x95JN#f\xaf\x9b9\x8d\x10~`|\xf3\x18\xbf(\xa3J\xff\x9dx\x0d\x873\x1b\x9d}\xee\x8d\xa1\xe15\xda2\x1b%Bi\xc2\xf8P\xaf\x1c\xf2\x93#r\xc4\xfa\x82\xe4\xc6O\xbdKp\x8c\xca\x03\x8f$T\xd5D\x8e\xb5\xb5@\x01\x0e\"\x9f^<\xe2\x8d\xe5z\xdc6\x8d\x1d\x1d\x1cY\x1b\xcb\x15\xb5\xad\x1a#G\x1a\x8dl\xe1\xf8l\xdcnB\xeb\xf7=\xa0\xc5v\xfe7\x83\xd6\xdb\xa37\xdf\x0eZo\xc3E\x1bh\xd5)\xd0\xf7\x83\xd6\xc67\x05\xd7\xc67\x85\xd7F#\xc0t\xbb\xbdx}8\x18j\xc6\xa2\x9cKe\xbe\xb7\x0f$\xcf\xe95\x810?\xa6\xba\xb4\xcb\x0e\x14\x1e\x083\xb4\x11\x93\x7f\xd6mC\x8d\xff\x8aj\xfcW\xce\x1e)\xff\xb9\x1b\x8e\xe9\xc7\x9f\xbb\x8d\x1c]c\x8b\x93\xca/\xc6\xbb\x9d\xa6\xb3\xfb)\x9c\x9d\xa5\xb3\x9e[z8V{/\xfd\xe0\x0c\"/\xf9\xc1\xe5\x1c\"\xb6\xf0\x83\xf3\xdf\xf7\x0ec\xc6\xdcj7\xa5\xf7\xdd\x89\xebNJ\xac\\\xab\x1b\xdd\xd4_\xd1$%+\xa3)\xcb7\xe7\xd6\x8a\xb0\xe5\xd1\x80\xdeRO0my\xa9/K\xbf\x03\xbf\xa6\x89\x87b\xb85Y\x0b\xf7L\xfd\xb9\x97\xdf\xe0 \x0b\x96\xcf\xc3\xcd\xb9\xb2b\x12j\x9erW1\xf3>\x8c\xe3(v\xba\xafIJs\x9fZ\xca\xcat\xc1\x99|\x91W\xb4\x97NG3\xce\xfc\xf4\xd2\xe9\xe6\x8c{-\x11\xfesk\xd6\x87N:\xdd\x9e\x15f\xb0\xf4\x06X\x07\x0e\xfbo\xf0\xe9\xf4\x95#\xc0\xa0\xf3\xc3\xf3E\x98\x8a\x1ek\x82G\xa9\xe8\xa5\xd3\x9d\x19\x8fO\xd1K\xa7\xbb\xb3>\xa4\xd3\xbd\x99\x89\n\xa3\xca\x15\x03\xdfN\xf7f\x82+\x1d\xf6a\xcb}\x0e\x8b\xc2\xa7r\xeb\xb9\x0b\x0b4\xf0\xd3Q)l\x87u\xb7\xa8\xd3?\x13z\xa5\xd3g3\x04<[\xb3]\xba\x0d?\x80\xb3;\x84\x1f\x10Z\xc3\x19\xf4\xa0\xe7\xa4\xd3\xd1h\xc6\xd0l(\x95\x80\xb8 \xea\x9b\x1bkW\xc4g0\x82M\xc1\x9e\x85\x8bQ\xd5\x1f=\x02o\x90\xd0\xf4\xd4_Q\xc7\x1b,\xc57\x1760\x88\xa6gCa?LR\x12z\xf4x1\xc6\xeeZph\x96M\xc6\x88\xfa\xdb\x93cA\xd7\x8d\x8e\x00\xdf\x8a\x10?\x90\xcc\xf0\x04\xfc\xdf\x8f\xc4t_\xbcP\xac\"L\xe6O\xdf\x0e\x0c\xc5\xcf4\xbe\xab\x0c\x8b\xc3hg\xdb\x1d\xfc\x88\xb6\xc2E\xaf\xe0\x11dd\xd8L>\x97\x1a\xb4(\x18\xba\x07?\xbez}\xf8\xe6\xa7\x9f\xdf\xfe\xe5\x97w\xef\x8f\x8e?\xfc\xd7\xc7\x93\xd3O\xbf\xfe\xf6\xbf\xfe\xfa\xdf\xe4\xc2\x9b\xd3\xc5\xf2\xd2\xff\xe3*X\x85\xd1\xfaoq\x92f\xd77\xb7w\x7f\x1f\x8e6\xb7\xb6wv\xf7\x9e>\xeb=\xd9?\x0b\xcf\xe2\xee\x03%x\xae\xe4\xf9\x1e+\xf6\xc57\xe0\x06J\x1d5^\x8e3\xfa\xe8\x1b\xae\x88B\x1e\x030\xe4\xbeC\xa1\xed\x9e\xa8\xe3 i'\xb9\xfcK\xa5\x19;\x8f\x06\x08\xbb\xdb\x8d7G)\xbc\x80a\xab\xdb\x1f\xd4\x8b\xefj\x1f\x1b)a\x0c\xff\x01OQ\x01]\xc6\xfb\xaf>:\xa3\xb2\x02cz\x16\x9f\x85\xfb3\xa1\xc60\x03=\xb2.K\x86\x91\x80\xb4\x8f\x12\xf3r\x07\x86;\xa1\xdc\xd3{\xf8\x1c\x18\x94\xc9sH{=\x17R\xf8\x0f4\x05\xe3*\x13~\xa5\x13\x88L\x11\xf0\xf2%\x8cv\xe1\x11l\xee\xec\xb8}P\x8b\x9fVK7wv\xe0\x11$\x8c\xec'\x98\x0e\xe4\xc5\x0b\xd8\x85{\xc8rt\x88$:\xa4\xba\xe3U,\xd1\x10dH\\\x82\x03\xfb\x01v\xf1\x9a\xe6\xab\x86\x04c\x18=\xcdu=\xe5\xb6\x86\xda\xb66E)\xbe*|\x0f\x19h\xd4:\xdb\xf9\x9b1\xa6\xdfX\xc4\xd1*\xff\xe2\x04(\x16 \xbd\xc7\xaf\xdf\xd4~\x15C|0)\x87S\xd0\xf67'm\x11:\xe6n.F\x82b@>\xd2Hk2\x0b\xad1`\xe7V\x05;q\xe7g\xd3\x08\x97\x8f-\xfa\xee\x16\xf2|J\xe9\xa6\xaet\xb7R\xb8\xbb\x05\x8f\x00Mr\xd8\x8c\x9c\x88a\xecS\x17z@\xa7\xa9\xf9R\xb5\x8c\xa0[\xfc\x0e\xf1\x1b\x8f\x08\xc6\xb0Y\xa0k\xa9\x9d\xa1\xae\x9d\xedZ\xe1\x8b\x17P\xedqw\x1b\x1b\x1e\x15\xc8\\j\xb9>\xc0\x17/j\x0d\xefn\x97\xdb\xebC\\F\xbc\xfc\xd7Ws\x10f\x89\xb6\xa6\xff+\x87\x9c\xacs\x08F\x85\xe1\x03\x99\xb4\xc8\xe2\xd1`\xf0\xea\xf8\xca3\xdfd\xcf_\x91\xd7\xb8*\xdcx\x1cP\xdb~\xe3\x97\xd2A\xee%\xccv_\xf8\x9c+\x83\xcd\x1ed\"uh0MgE>\xb0\\]\xcb\x01>\xeb\ny\x15\xd5\xb2q\xb3Q\x87\x88\x89\xe3\x87\x10\xdb\xadx\"\xd1$Jj\x16\x8eB\xd6\xcf\x1a\xbb\x96\x9f/\xb2\xd6A\xe6\xa7\xb9\x0fVM\x98!$\xf9\xa1H\x9a\xc1\"\"[\xb4\xca\xdf\x91#Ny[~!\x83S\xd7O\xfc\xb3\\\x8dZ\xec\xfa/\xdc\xc4k\xe2\xc7\xc9\xbf\xd7.\x16\xbe\xbb\x96\x9dJ\xc4\x8c\x0e\xe2\x98\xdc9\x99t\x81\xcco{\xd8\x16\xce\xbel\x0bg\xb8\x85\xf5[7j\xbdu}\xf4\xe7G\xc3!\x85\xe2^\xd1\xbb\x84\xbd]u\xf17\xb5B\xa6\xe9\x8c\xd12\x7f:d\xe7\x0c\xfe\x9d\xcd\xfe\xe9hoXG\x1dW}]\x0d{&R\xd1\x18\xd6\xd1/\xad#\xd1\xae#1\xad#[-\x82\xab\x15\xd5@\xdc\x07_\xc0.\x12\xb0\x8b\x10vF6\xc6\xff7\xd8\xc1\xe5s\xfb\x81\xfb8\xa1\xc6\x0bt\xbdw\xe1\xf7\xdb\xc4\xd6#\xd6\x0f\xc1\x10\x08L9\xc9\xc2\xbe\xb0D\xccIm8Mg\xd6\xfd\xf2mQ\xdeD\xe9\xff\xed<*\xffH\x9ed\xe1\x9c.\xfc\x90\xce\xbfR\xfbb\x81\xc3\xc3\xa1\xea\xd6\xf2\xcd?T\xa6\xbb\x8e\xfc\xb9\x8c/f\xeb]'\xcd\xd94\x7f\xffn\xae\xd1\x7f$Ob\xba\xa4\xb7\xdf\xe5F\xe5\x01\xca3\x1f\x03\xd5`\xbd6\xe7S\xeeW\xa7\xe7\xb3\x19\x11xr\xf6\xc4\x99.\xfd\xd5\xec\x07\xf7\xcfO\xe4\x05\x87\xbez\xac 9\x00\xd2z\xfa\x89\xd4\xbe\x0f\x8dw \xfc\xc2C\x9a\xf2\x86\xd3\x11\xcab\xf2\x16\xe1%\x93K[\x9c\xd8\xac'4\xeb\x9d\xa6\x85!P\\\xb2 *\x9a\xa9\xb5\xf2\xbd\x8f\xe1\x7f\x0e\xc4\xe56Q\x80\xceo\xe1\xaa\xd0-\x19\x13\xf5\xc1\x001\xbc\xd0*.H\xd3~U\x96\xf9J*\x913j\xbc\x83\xb6&1\x0f%(\xd6\x05a\xb0\xea\x01\x1d$Q\x16{\x14z\xac\xc0\x08X:X\x06\xd1\x05 \xc4\xd5_o\x1f\xbaK\x1e\xb9\xaf\xc8D_\x11\xf5\x9fV\xca3\x9b\xd2\xaf\\5i\xd6.\x94_\x08`\x1f\x9eU\xc8 \xec\xc3\xa8r\xad\xb5\x80}\xd8\xda\xac`\x03+\xdb*\x97\xcdY\xd9v\xb9\xec\x92\x95\xed\x94\xcb\xaeY\xd9^\xb9l\xc5\xca\x9e\x96\xcb\x96\xac\xac2\xbe;\xd8\x87\xed\xcaX.XY\xa5\xdfsVV\xe9\xf7\x06\xf6a\xa7\xd2\xc7!\xec\xc3n\xa5\xbd[VV\x99\xdb +\xab\xf4\xf1\x8a\x81\xaf\xe2\x93x\xc5\xca*\xef\x1e\xb0\xb2\xddr\xd91\xe6/\xacT\xfc\x80\x85\x95^N\xb1\xb02\x95\xf7\xb0\xafA\xfa\xe1\x18\xbaggC\xcdQ\xb4\x87O\x88\xe6\xc9S|r\xa1y\xf2\x0c\x9f\xa4\x9a'#\xdeQ\xa8{4\xc2G\xd7\xbaG\x9b\xf8h\xa1{\xb4\x85\x8f\xaa\x0c\x1d\xfbl\xf2\xa1Wu\xd1\xec\xb3\xb5=\x86\xc7gg\xdd\xc7\x9a\xb1\xf3\xbe\xce\xce\xb4\x9d\xf1\xde\x8et\xcfv\xf9\xd4\xceu\x90\xda\xdc\xe2\xad\xbe\xd3?\xe4\xad~\xa8(\x1a\xcaU\xdf\xb2\xf3\xba{\xd7\xedC\xf7\xaf\xec\xbf;\x9a\xe0w\xf1\xe7\xf0\x84\xfdA\xb6\xb7{\xcc\xff?b\xff\xe3W\xfe-\xc2\xaf\xfc\xffc\xac\xbdX`E\xf1\xe7\xcd\x9b\xeeL\x17U\xe3\x8f:\x9d,\xb4\xb6\x95\xabhn\x82\xb2ou-\xeb\xf3\xc8\x19\x9b;;.\xe7\x85n\xbb<\x80\xeff\xb9\xad\xdc\x1a\x19\xab\xef\xee\xecl\xc9\x172\xf1\xc2\xb6\xe6\x05=\xd7\xde\xe1\x8dlo>\xdb~\xb6\xbb\xb7\xf9l\xc7u\xcb\x11q\xbdhNa\x1d\xf9\xa5\x8c\xb9<\x00\xe2\x8a\xdc\xc9L\x0c\xcb\x98\x92\x94\xc6<\x19\xc3\xf0\xf6\x8d\xf8\xe8X\x07\x1c\xe8'1\xd0\xa7\xe5\x95-\xfd\x92\x87\xde\xd9YW\x84u,\xe28\x0e\xf1\xfd\x8d\\Vv\xa1\xa7\x08p\xba\xc8%G\xf5\xc5R\xa2X\xf3x\xe1y\x98n_\x06\xc9\x961\xa7\xdf\x93\xf4r\xb0\"\xb7\x0e\xa6\x0c\x17\xc5\xf7\xf7\xb0\xe9\xcah\xdfW\xfe\xfamxM\x02\x7f\xce\xdbR~\xab\xa1\xb9\x17At\xf3\x8e^\xd3\x00\x99X?9\x8a\x18L\x97\x0e-\x9e\xb8\xd2\x17I)\x93\xbd\xa4w\x81\x08\xc1]:YMLu=%p\x93Ym\xe1\xdb\xff\x8f\xcf\x06\xcds(\x12\xa2pk\x0d\x9e\x845\xae\xdc\x1b\xa4\xf9\xd5\x0c\x8f\x04\xe0?\xe7ARG\x90\x89\x86X?\xac=\x91\xe4!\x18\xa8>\x97}\xc8xg\x19^\\\xab\x8f\xa6\x19\x1b_8%3\xd8\xaf\x06\xc3\x05E\xcd]\xc6gGA1\x868\xd8b\"\x0d%s\xdc\x89\xe2\xf4\x17z\xc7\xb3\xcf\xe4?\xca\x01\xddC\xfa\x9b?\x97\x01\xd5\xf3_\xf7\xf7\xf0T\x86C\x0f\xa3\x8ft\xc1\xdb\x10_\xd5\x16\xc2\xe8U\xb4Z\x93\xf4=\xdb\xce\xbc\x8eR\xa0\xd6\xf4\"\x86\xdd\xe8zu#@\xa9\x14\xa85\xbf \x84\xbcLOd{\xe5\xf0\xb6\x1cu\x1e\xd3`\x85E\xe4\xfaR\xb6F,\x99g\xec\x0d\x92Ra\xaf\xc0K\xb3\x84\xce_\xabOJ\xb1\xfet4\xe2\xa3v3!\xd2\x8b\xdd\x14\xc1~%\x9al\xea\x8at\xc6\xfc~nc\xc4\xf1\x9a\x8d-Q\x83\xa5\x81\x0f/ y\xeeb\xda\x064`\x97\xd9\xfa\x85K\x1f;\xfb\xc1w\xd1\xec\x87\xfb\x8a\x88\xac\x16\xa2\x83\x04\xb3\xbd\x95\x9e\xb0.ydW\x1f\xad\x86\xf8\xf7P\xd5C\x9c Q0\x14x\xdd\xdb\x87\xc8eC\xec\xedW]\xcb\x04\ngV\x10\xbd\xb6\x85\xe3\xd6\x87\xdb\x95\xe4\xf2\x07H]k\xdb\xef\xea$Z\xca\x1c\x08\xb1\x05\xc3>\xfe\xd5\xbe\x8e\x9f\x8c\x0dmm\x96\xa3T\x8d6wQ~\xdf\x1dU\xc3`m>\xdba\xbf\x18\x87RxP0\x96D\xfc\xba\xbf\x87\x9d\xbd\xad\xed\xed\xf2{\xec0\xdeb\xbfx~\x8a\xbc*+\xdf\xadt=\x1am\x8fF#\xebD\xfef\x9c\x08N\xb1\xd2\x0f\xb6\xcc\xbe^\x14__\x15_\xaf\x8a\xaf\xc7\xc5\xd7\xd3\xe2\xebM\xf1\xf5\xd2:\xac7\xc6a=\xf9\xfd,\xfc\x01dT\x13u\xb9\xe57\xb6\x91\xfe^\x0f<\xf2#cs\xcaE\xbf2Y\xa5\\\xf43\xe3m\xcaE\xbf\x01\x06\x99\xae\x0f\xf2/\xf6\xd0\xebl\x1c\xbej\xe7\xd4\xd1\x84B \x0c\xe5\x0b\xdc\xe9<\xeeG\xfd\xe9{N\x07j\xe5\x8cS\xfd$\x12\x92\x96r\x96TV\x12\x83\xf3t\xde9\xfc0\xca\xb0\xec\xbc\xf8z[|\xbd)\xbe^\x14__\x15_\xaf\x8a\xaf\xc7\xc5\xd7\xd3\xe2\xebe\xf1uU|\xbd+\xbe\xae\x8b\xaf\x1f\x8a\xaf\x87\xc5\xd7e\xf1u^|\xbd.\xbe\x9e\x14_\x0f\xc4\xcc\xcc\x89^49\x1f\xd2\xbaJ(7y\x18r\xba\xaaP\xd9^\xcfv\xb3\xd5\xf9$\xc8\xae\xd2\xbf\xafD\x05\xfaM\xaf\x04f+\xf7\x96\x8d\xfdoZc)\x13\x83\xfd\xc5\xc3\xd4\x0e\x12 \x9f\xe7rd\x1d\xf6a\x01hQ\xcdX\x15\xe4Ya\x03\xde\xe3\xe9\xf2\x92[\xf1vA$\xd2\x9c\xbeg'\xc3\xac\x8f\x88\xe9\x1b\xf4\xdc\xb9P\xc1@\xf4\xb5\x00\xd1n$\x1c%\x0e\xbaq\xa8\x7f2\xb7&\xc6\x85\xdcM\x00\x13\x08\xe1%<\x83\"\xed\xd2o0\xc6\xf2\x9fa\x0c\xbf\xc2\x98\x8f\xb2\x13\xf1\x87\x7f\x871\xfch%m\x7fU\xa8Fu\x85\xe8`\x9e\xadJ\xbc\xb7\xe9.\x84\xdf\xfe\xa6\xd5\xdb\xdf\xee\xe3\xc7\x86\x9b\xd9N\x85!\xe3\xa1\xfd\x19H\xde\x16!\x08\x14W\xd3\xc7\x18\xa0\x1dz\xec\x9b\xfeF\xd9\xcf\xb9\x0b;\xe9\x94\xfc\x17'\xed\xf3$\xc6\xbeH\xdeL\x14\x85\xa3\xd1eY\x80\xb0Q~\x92\x1f)G\xe97\x02\x94\xdcYd\xc0H}\xa6\xd9\x90\x87D\xe3\xd9\x82\xccv\xa8 p\xa2\x9ah6\x9c\xe5\x19H\x15T0\xc5n\x04\xeb\xbd\x0d@\x9e$\xa9\xbe{\x8d\x96\xaf\xe8Q\xfd\xf7F?jM\x06{\x90o\xff\xd8\xf8\xb6\xc0\xed\xc2\xe7\xe51z\xbb<~\xdcuM\xf8\x0e\xb2\xf5_\x9b[\xbfg\xad\xff\xc2\xf3\x04r\xbca\xcd\xfe\xe4|dE\xbe)M\"\xb6\xfess\xeb/\x8d\xad\xb7\xc67(\xcb\xee\xb0\x0fO\x9c\xb3\xb0\xe7:\xd3\xdf\xcf\xc2\xd9\x0f\xee\x93\xa5~W\xa9\x1f\x94\xc9\xb3\x9a|\xe1r\xd9DP\x96\x0c&\x90\xa1\x9aA\xb8U@4\x08H\x92\xbeeo\xf0\xfc\xe0\x7f\xce#\xd3\x0d\xfb\x98\x7f;u\x0d{Z\xfd\xa0\xa8~\x16\xcaP0Ct\xffd$^\xfe6c,\x88\xc9k$l\xf5#b\x0c\xc6\xaa\x0b\xb01\xc1\xa7\xfaam'\xc0\xc3\xbc5O\x04\xc4\xc9\x15O7\x1b\xc6\x0cyJ\x18>\xcb\x00o\x80|\xb6\xd3\x13\xe81Y\x0f\x13\xdc38\x88\n0a_\xc7<\x9f\x1d\xf4\xe0\xcfN\xc0\x85I\xbc\xb5\xb0vf\x8ey \x05*\xfa\xc6J\x9f\x19z\x12\xb7 \xdb\x7fk\xc4\xf6\xc7\x98\xac\xa4\xf9~O~rA\xba\xe0\xca\x85\xa4l\xe4\x91\x84\xce\xb4\xc2\x08\xbd\xe4\x02\xda.\xa0\xe7\x0e\x13\xd7v\xb7F\xc8\x04\xd4\x83\x95\xfa(\x15\xf3wv\xb76\x87PD.\xdd\xda\xdeb\xc26*\xa6\xfepF\xc3Mt`Na\x83\xb7\xce\x93\xc9l\x88\xd7z\\\x86c`c\xbc\xdb\x98\xeb\xbc\xde\x0b\xab\xd9\xde>t\x90\x93\xf9\xe4`Zh:\xf5g0\xe6\xa7\xdc\x1fz\xb74\xf5#\xafSmk\xe6\xf2\x8c\xa2\xfa\x86D \x08\xf3\x92\x95t\xba\xfej\x1d%\x89\x7f\x11\x08\xc7\xf71\xf8BU\xc9\x8d@x \xb2n\x13c\xf7\xd9\xb1\xcb\xf3\xbf\x983K\xc1\xbe\xe4\xd7\xa4\x02\x10\xe3\xafin\x01\xe221)\xc5\x95\xd2\xea/B\xb6\xdfx\x8em\xfd{\x9b\x9c\x1e\xe5\xcf\xd8(\xba\xbd..\x97\xdc\x94\x1b\xfc\xb09\x0b\xbb\xd6\x19\xfed\x14\x84MCf\xb8Q\x90\xd4\x8d\x11\xa6\xf7\xb4\xf6\xf1g-\x14\xd1\x1aAq\xbcV\xc9k\xce\x1bTl\x87UE\x96\xe2CY+:\xae2\x90\x85*\x9d\xc0\x0b\x08\xd8\x1f=\x07\x89\xa2\xa3\xe31)oJf\xee\xa0\x88s\xc0P\xc4\x1b\xe4\xf6\x06\\\xcb\xdd\xf1*5\xba\xdc\xbc\x80aR\x9e9\x90\xd3XY/Z\x80\xfaR\xdeN\xder\xa5#F\xfal\x82.\x95\xea]\x98\x80\x87\xdf\xc7\xd0\x9dt\xfb\xe0\x0dr\xbb\x04\xdb\xb1\xc2\xdaXp\x95\xa8\xb8\x1a\x99b33>\x0e5>N\xdfh>\x91\xf1\xbb\x00\xb5K\xee\x13\xa1\x94\xb03sa\xa1\xe2\x06\x0d\x80\xfaA9/\xa9\xf5\x85\x11-\xca\xf4\x99'\xe8\xf7D\x82\xfe\xc7/1k\xbf\xe0\xfdc \x9eG\xd7i\x82Wo\xfc\x04\xe6i\xc2\x10\x02\x8f\x9bN\x9a\xf2\xb4\xa6\x8b\x19\x9f\x99\xf9\xe41OY\x8a\xc3\xb1\xb6\x8a5\xfe\xb4\xc6&K+\xe6w\xec\xfa\xd1\xffU\xd2\xf1\xf1M_\x95\xd9\xd5\xfb\x83|\xc8a\x9fo\xe5\xb0\x0f\x9d\x11F\xc1\xc9\x7f\x0e5\xd9\x82\x13\xc8\xb1\x847Q\xcd\xdb\x9a\x13?U\xa4}\xc1#\xc4\x95\xa5\xdcjVS\xd6|\xd0\x87E\x1f\xed?\xea\xdeR\x0cAQ\xd9\x91?B\x17\x1f\xf9\xa4\xae.C\x85\x9d\xa3h(\xc5\x8dXqI\x92\xcb\x04\xa1\x8b7f\x85o\x06\x02\xeb\xd1#\xb6\x05\x95\x02T\xdb\xdc\xdf\x83P\x84K\xa5\x02\x12\x86\x97 R.\xfb\xa8*u\x85Z\x8aVn_\xa6\xc1\xcc-\xa0\xdf\xfd!\xa6\x8bs\x86\xe3\x15\xf1\xderQ\x8d\xd3\xc2\xb6;\x9a\xc6q\x08\xba\xf2}\x9eR\xdc\x00W\x97\xaf\x1c\xcf*\xab\xde_\x8aU\x96\xc7\xcd\x04\x9cN\xcd\x96I\xa3!\x92\x9f\xb2r\xb9\xaf.\xb0\xc5\xa2\x95\xdf\x1c\xa7\xc4\"\xe0]V\xeeYM\xb9\xf1\x91\xd6H\x1f\x04y\xa5\xe8\xc2%~w\x9aT\x80J\x0e\xd9\xe2$\xd0\xb4\xa3\x145\xb4\xa8\xbe\\\"u\xf9u\xe7*K\xd0\x92\x80\xc0\x05O|\xc3\x13\x98\xdb\x8c\x10\xa1\xa4b\xe5,\xc4e\xe9\xbe\x8d<\xe72\xd8\xc8E\x95=\x135\xc4\x823\xc8\xf8\x0c\xa9\x1d\x0c\x89$\xae\xb5D\x88\x89p\xca\x18\x9c\xcb\xa9?\x9b\xf5\x05\x8d\xe1\x96\x80\x19O\xcb\xce\xffq\xbc\xc7\xdd\xd5b\x07 \xe4\xc7\xbd\xc1\xbe\x15\x1e\x15L\xf0\x90\x89\xe0e\x1dO,\x1d\xd6,\xe77\x9f\x88 N\x13\xc6\xa8\x8a\xaf\xd0\xc5\x8d\xd7\x93\xaf0\x0e\x83S\x81\xd2\xdc\xd4\xa9$|\x1a\xc1\x17\xf4<.z\x1eC\x97\xe1uo_\xed\xdd$\xedHZk\xa2\xee\x89}&g\xe4K\xda\xe2\x14t\xe4QNG\x90\xc9\xe3\x9d3\xd9\xac\xbe[m[\xb5b#\x914\xec\xd3\xa0y\x9fz-\xf7i5\xa7\xb6\x97\xa3o%\xa7vV\xbf\x8a\x9f\xa0\x00\x8eR\x93\xa0`\xfc\x18\xc2\xbb\xddn\x1fq\x02\x95 S\xb6?\xbci\\`3N\xb63\xe2\x87_\x01\xd22N*\x8dq\x04\xcb\x8a%f2\x96q8\xc8x\xa3eF\xbd\x0e\x17\xaf\xb099\x14R\x1e\n\xb2\xe6Y{lR\x8f\xf5\xee?X\xaf \xeb\xbf\x11\xa3\x9a\xd0\xa9\x0b]\x05\xa9\xeac(\xa8\xa5\xf6`.\x1d-e\xf0~\xc9iRx\x00\xdb03\x93\x98i\xc16\xc5l'4\xd9\xe8\xa8\x84\"D[\x1d\x95\xe4)$4B\x12J\xcad\xa6%1\xc1\xb7\xba\x1b\x0c!\xc4W\x9e5\xb8Xy\xfb\xc2g\xca\xc2\x13\xce!\xcd\x9a\x16\xfd\x9fAF\x1a\xd6\x88\xb4X#\x85\"\x84&\x8a\x90\xf3\xbe\xd3xV\xdeA*1\xf091h\xd8\x8c\xae\xd0U\xb6\x82;Q7\xdc\xb4+S-7\xc2\xbe \xf0\xad6\x9cY\x94\xcc\xb7!\xd7(\x89@\x03I\x93\xf4X2\xd5k\xf4m\x84\xaa*-\x0b\xb98F.\x02\x8a\x9eT\x10-\x801/|,i\x048W$Kz!K/'\x95\xf9\x87G\x8f\xf8\xc5\xa4DbT\xe0\xd6\xc1]+i\xe2K\xca\xab\xc1\xc5N*\xc4\xce\xeeKu=\xfed\xee\xa8.\xd2\xe9D\xb5\xff2+\x03sm\x94.\xd4\x8c\xce\x1d\x87\xc7\xbb\x94-\xa3\xfb\x97\x89~*\xb4\xb3\xbe\xa2\xb9\xe5c'O \xa6\xd1\x80\x98}\xec7\x94\xc0\x14\xa1zO[Xy\x15ia|\xdc\x9c1\xf7ui\xbc\x85\x0fy\xbd\xd4\xed\xf3ce\xe0'<\xb4C\xaa\x89\xce.?Uf851\xc3\xd4I\xa7\xfeL@\xcd<\x12{G\xd5X\x11\x15K\xb8\xc8\xd6y\xc4y\xeb\xb0\xee\xc4\xca\xd0$\xe2dZ\xb9R\xf5\x0d\x97\xa8\x90\xaar-\x82,\x9a\xfa\xd3p6\xabL+\xd5\x98\x03\xe6\xe12b\xbb\xd2\x8fR\xab\"\x9b\xb5s\xc43\x02\xb0S\xe8\x1fUOB\xa9\x97V\xcc2q3\x84\xc8\x03\x85}6GZ\x9c\xb0\x13\x08%\x8b\x85\xda\xcbR\x0e\xf2b\xe7\xe5n\x9fr\xfbR\xaadh\x1f$dA_W\xac\x15,\x96{|\x8a\xf1\x80\xde\xa64\x9c;\xf5}\xc4m4\xc7@\xca\xab\x85'~et_\xe4\xf6\xa3z\xb1Z\x07,\x0d\xe9\xd5\xac\x07x\xd9\xd6q(\xecC\x8f\x9aC\xcaX\xa3\x99\xf3h\xe1\x97i\xba\xd6\x04\n\xe7\x0fo\x12C\x0cq\xd1\xdfS\xc1\xec\xd57T\xd1\xb8\xae \xd9zC\xf3\xdb\xdb[\xf6\xf6\x17\xda\xb1+-l\x8e\xec\x0d,\xa3\xf5%\x8d\xedm\xec5Lr\xe1\x07\xa6P\xebzs\x04\xeda\":\xf9\x16\x98%\x1d\xca\x1a\x83\xc4\xd47~d\xbc\xde\x99S/\x9a\xd3O\x1f\xdf\xbe\x8aV\xeb(\xa4a\xea(Q:\xcfzh\xb2\xc0\x18+\xcd\xceM\x07\xdc\x7f\xc2_\xdc5!{NT\xaa\xf1\x05$\xed\xd1\x9e\x8c\xdcQ\xdc\x0f\xa1\xcb;R\x9d\xcd\xf95\x0dZOO\xd0#\xde\x85X(6\xd1H\xf2\xd1#\x10G\x0f\x0dkS\x8cP\xb2\xdbG\xb6\xa0\xfe\x94'\xf03\xd0\xbe\\\xf4I\xd1O\xf2\x8f\xc8\x0f\x9d\xee\xa3\xae[!o}H\xb9go 2U\xb0\x94.\x92\xd1@b\xfa\xfb\xfe\xe4\xd1\xac\xe7\xeeO\x9c\xe9\xef\x8f\xb8\x95\x04\xae\xfa?>?G(\x86V3\x01i0\x159\xe8\xb4i6\x8fb\x156\xabg\x0b \x9b\xe2\x87\xfc\xba\xd7\x89\xa7\xfe\x8c\xb1\xc9-x\xa6\xf8a\x08^\xf8FnU}\x1a\xb9o\xe4\xde\xee\xb6\xd67rk\xb8\xa9\xf1\x8d\xec\x1e\xde\xae\xa9\x97\xd2\xb9\xaag+W\xcb\x14\xdf\x97\xf2\x93$\x7f\xe2\x87-\xc8\xb8\xe1\xcaL\xdc\x94\xf5a\xdd\x87y\x1f.\xfb\xe8\xc9\xa8\x89\x01\xba2X\xe2.\x0d\xe5w\xa8\xf9-\xafSE\xb5Yl\x8a\x92?\xf4\xe9\xdd\x9ar\x9fh\xa2\xe6R\x06\x950\\\xe8\xcf\x10\xb9+\x03=\x02\xe1\xddK\x1du\x04.\x04\xec)\xec\x8bh=\x1c\x10)W\x1a\xd3\x01Y\xaf\x83;'\xeeW#>}6\x0c\xf0\xdc\xech\x8f\x16\x12\xb0\x01\xe6\xfc\xedJ\xbc\xa0Kn\xb7\xf2R\x90\xa1P\xdei\xa0\xe8\xc0Z\xb9f\xcf\x16\xad\xc6t\xa35\x97dC\xa2\xb8\xb3t\xbbj\x01\xce\xb9\x9ac\xe3\x90\xed\xe0Z\xb59\xec\x83\x08\x05\x1fe\xa9s\xd3oa\x94\"A\x91\xc2\x068\x08\x0f{\x00\x88%L a\xdc\xdaB\xbep\xed\xd6\xf3s\x00ga\xabn\xdf\x06\x88\x1cZ\x1d\xad\xe7\n2\xa0Av\x00\x13\xb8`\xaf\x8c\xf9\x9d\x8e\x8a-5 M\xdf\xe3m\xd3\x1a\xe81\x97\x01\xea\\\x0bz\xb6Bl,$^f+\x1a\xa6 \x0f\xe4\x9f^\xfaI\x1fo+\xa8Ei\xc2^V\x90\xad\x10\xbf\x9b\x97\x0f\x14t\xe5\xbd\xd4\x91\x80 $\xab\x02fkmC\x9f\x1d\xd3\xc2\xb3\xd1-]u5\xea\xcd_8\x97m\xe4\xf0\xfa\xc6BSyG\xd7\xa8\xdb\xaf\x8cT{r`\xaa\x0bF\x85\xee\xefQFrB\xae\xfbA:\xd9a\xe7-\x99\xfb\xe1\x92g\xdap\x18\x95\xec\xae\xc8\xedo\xc4O\xbbty\xbb\xb5PS\xe5~p\xa2{#\x97u\xff@ *\xdd\xeb9\xe1-]B\x0f\xab\xac\x05\x82\xe43\xa1\xaf\x0f\x9d\xd8\xa9\xc4\xcd\xccs\x08\x15\x0c\":`\x8c\xc1#\xe1\xe3\x94\xcd\x0dH\x02\xb9|\xd9\xa9\xd8O~\xd6\xef\xd0\x1a\x80\xc6\xa0]\x14\x14-\xba\xe7\xe7\xd8\xfe\xf99R\xe4\x7f|\x86I\x15LZ-\xa89\xe8\x16\x8fC\xe7l?s\x1di\x15\x85\xe2`\x9f\x81vw\xe8\x0e\x16NUp\xee\x832\x0c\\\xbc>l\xba.\xeb\x7f*\xc3\xd9u\x1c\xaa\xda\x8c\xa1\x9aM\xe78\xd5\x14y*\xd5G\xcd6\x9e\xb0*0\x8cl\x87\xa8\xebK%\\\x8aFx\xf9\x9c\xd0\x1cM\xd0@\xf6\xb8\xae\x06\xad\x9a\xc1\xfe\xe33\xbf|\x19\x8b\x83\xa6\x82z\xde%\xf5\xae\xc6\x8aEv\xebM\xab\x92\xf5\x02\xe5\x8b\x8d\xdb\x82\xe8\x1b\x8f\x1d\x0fC6\xf0:\x0f\x1b\xd9\x97\xed}\xde\xdf\x18\xc7\xff\xcc}\xe0~oV\x1a2p\xed|E[\nx\xab2\xb4\x90\xad\xf7\xb4I\x88\x9d\xad\xbd-m\xdc\xa1\xa7\xba\xb0C\xa1\xb3]\xad\xcd\x07\xfft\xbbZ=\x10\xe5\xd5\x83\xc0\x13\xbdVG\xb9\xe0\xf5w\x86\xa5\xd3\xf0\x99\xf2+\x1a\xf8![\x1a\xa7\x82U\xeb\x1a\x19Z\xf8\xe1\xfc\xf5\xf1\xfb\xa3hN\xc7Ui6\xa6\xe1\x9c\xc6c\xf0\x07\xfc[e\x92\xe1*\xca\xc24\xd7\n\x1d\xa4\xbc\x11\x7f\xa0\x7fR~\xfb\x9a\xc6\x89\x1f\x85cH\xaa\xad&x\xc3v~\xc1\xe8\x05\x9d\x7fZ\xcfIJ\x931d\x83r\x89\xe15>\xd2\x93\xec\"\x8d)}\x1b\xa6\xd1\xab(L\x89\x1f\xb2y\x14\xc2\xabB\xa1\xf5\x91\x1a\xcf\xcf?\x1e\x1e\xbc:=\x7f}\xf8\xeb\xe9\xf1\xf1\xbb\x93\xf3\x9f\xde\x1d\xffx\xf0\xee\xfc\xe7\xe3\xe3_\xce\xd1CWk9e\x7fM,\n{\xbbU\xc5\x8ar>\x87\xe7iL\xa9.i\xf8\x92\xa6\xaf\x82(\xa1I\xfaV\x10\xe47q\xb4\xe2\xab\x12\x0f\xccO5\xba\x16\x8aK\xc6*\xc8\xcaM1\xc3@\xb9b\x18\x88e\xa0\xf3|\xcc\xfc\x02\x921\xfbR/\n=?`\xcb_\\h|\xaepH\xeboAL\xf6\xf6\xaa\xd1\xca$5\xa9\xeewNM\xf6\x9e\xea4u\xac\xbc\x1a\xdd,\x13\xe5U\xaa$\x88\xe1\xd3j\xbf\x81(\xaf\xf6\xcb\xe9\xc9\xde3==\xa9\x11\xc35'3\xa3*Y\x9a\xf3\xf2\xcd\xea\xe1w)\xcaG\x95\xf2kQ^\x9d\xeeJ\x94W\xc9\xe4R\x94W\xc1p'\xca\xab`\xb8\xe0\xe5[\xd5\xf6\xcfEy\xb5\xfd\x1bQ^\x9d\xef!*\x18\xdb\xf0n|{6\xc4\xce>D>\xeeP\xb8p/\x07\x87\xd74L\x0fW~\x9a\xd2Xl\xf0\x8f\x94x)\x96\xbf\xf3\x93\x94\x864vVn^\xf7C\x90-\xfd\xf0\xe7\xecB\xd4V\n\x8f\xe39\x8d\x1dR\xad\xfb)\xf5\x83D\xd4.Q\x0bga\xab\xcaj\x9c\xc6\x84\x91d\x12\xa0\x80\xde<\x82\xe4\xc7\xbb#\xb2\xa2\x9a\xfbC\xf69\xf1W\xeb\x80*\xd5\xc7pS\xa72\xecs\x18\xa64~G\xc9u\xb9v\xa6\xaf\xfd\xea\x92\x84\xcbrMCv\xb3\x13\x1a\x94\x07<\x86s}\xcd\x1f\xe9\"\x8a\xe9\xdbp\x9d\x95\xab\xd7]\xb4>#d~\x8e\x92\x02\xb8\x020?\xb1\xb5\xf3\xbd\xbc\xf8U@\x92\xc4\xf1\x8c\xf5O\xe9mZ\xa9|\x89\x95_\x1f\xbf\x97\xd7T\xa2\xaaR\xf2*\n\x17\xfe\x1235\xb4\xab\x99\xb4\xaey\xc1\x17}\xb5f%\xe5\xb1\x96\x0b\xdf\x10/\x8d\xe2\xbb\x16\xb1>\xa5\xc2\x81\xde\xc0\xba\x1a\x98\xb2\x80\xa68\xcd\xf3\x0d!\xc8\xf5iL\xc2\x84\xf0\x1e\xee4\x15\x7fd\xbc\x80\x1f.O\xd2\x98\xa4ty\xe7\\c\xa5\xda\xd8\xc3k?\x8e\xc2\x15\x0dS'0K\xf3\xf8\xed\x8b\xc8\xbf\x99F\x08\x00\xfb\x8cw\xa9\x03\xa8Kb\x9flxY\x1c\xd30\xed\x8eu\xf7 \xbc\xca\x9c\xa6\xc4\x0f\x12k\x15?a\xac\xcf\xdcV\xe7\xd2\x9f\xcfih\xab!\xfc\x02mU\xae\xe8]r\x19\xc5\xa9\x97\xa5\xd6\x01\x05\xe4\x82\x06\xb6\nq\x14\xd09M\xbc\xd8_#\x07e\xa9J\xb24\xf2\"FMRj\xab\x87\x92\x97\x1d\x06\xf4vM\xc2y\x03\x9cH\xb2\x8e\xd6\xd9\xda:=zm\x9f\xde*\x9a\x13{\x05\x19\xb5\xbc\xb1R\x82d\x8c-\xaf\xadj\x14\xfb4LI\x13,\xf1\xce\xfa2\n\xe64\xb6V\x8bi\x92\xd8\xc1\x14S2\x8f\xc2\xe0\xce^\xe7o\x99\x1f\xdb\xdb\xe1\xd3k\xa8\x13\xc5\xd6\x1drM\x82\x8c\xae\xc8ms\x1d\xdf\n\x1d\xac\x13F7\x8duRzk\x1d\x10I\xa3\x95\xef\xd9j\\d\x89\x15t\x81\x7fm]\xef\x98\x06\xf4\x9a4\x10\x0eF\x7f\x16\x0b&\x9f[j-crqa\x87?\xa3\xc2\xd7\xb8]i8o\xe8\xd4\x8b\x02\x8f\xf1\xe1\x0du\xd0P\xae\xa1N\xb2&\xd6\xe5\xf2\xa20\x8d\xa3\x06\xca\x884\xe6\x82\xce/\xac\xe0F\xcf\xe8\x15M\x12\xb2\xb4\x82}\x11D7id]8F\xf9\x82\xa6\xfe\xa2\x9b\xd0:\xecu\x94\xf8aB\xadP\x8c\xa3\x9bFH\xc7\xd1M#\xa4\xe3\xe8\xa6 \xd2 M\x13\xff\xef\x08\x99R\x8d\x8a\x00\xf6\xfa\xf8\xfdA\x9a\xc6\xfeE\x96R\xc6\x1a\xb2s\xaf^E\xf2\x1dy\x8d\xbc\xc2W\x9c\xc2\x8aFgX\x95V\xc4\xd5\x81^\xa3\xb3\xb7W\xad.e\xb0\xaap#e\xb0\xaap\x83q\x08\x9f\xf5a\xb4\xd5\x87\xcd\xbd>lmV,[\x990\xb6\xb9\xa9 \x14\x1d\x0d<\x12~J\xe8\xeb\xe3\xf7\xa8O@\xde%\xf1\xd9\xcc\x91\x0fE\xbd/O\x11Q~\x19\xc5\xb5R\xda\xfcjS\xf3\xc8\xc3+\xda\xf7\xd1\x9cb3\xb2\x00\xa4\xc3\xa0,\x18\xa8U\xab\xca\"~\xd3Zm\x9c\xf1\xae\xd5\x01\xb2\x07\x1d\xee\xb2\xe7\xd4\x0dk1\xf5\xbbHv\xc1V\x9f\xb8F\x05\xcaz \x14C\xac\x06\x9a\x07\xbd\x0dS'/u\xdc>\x8c\x86.\x8f\xe7\xa7\x11?+cu:\x1e\xc8HT\x0b\xc0\xec\xbe\xec\x0b\x86\xe4\xabL\xf6Z\x13\xa6{\x95G-\xc5t\xbc\xaf\x84W\x03\xe35K\xf5\x96\xdax\xd2\x17\x85\\\xa1\xe3\x00\xd9g}I\x12:\xffH\x97~\xc2\xf8X?\n\xe5\xb6\xd0Vg\x9f\x8b\xec\x82\xf1zc\xe8F\xa1\"\xb9X\xbc\x10<\xb2N\xb3\xb8\xfe\xca+^^\xb7\xe5\x87\xfa\xde\x96\x9f9]\xd3pNC\x0f\xd9\xdai7\x8d\xd6*\xda\x86\xf3n\x1fX\xe1/\xf4\xee\x03\xe3\"\xc4O\x862b\x98\xf8\xfb\x03IR\xda\xd5$\xe5\xab\xf7\xea\x95\x9a\xffN\x80\xac\xce\xa1\x1d,\xcbo}#p\xfe\x18d\xb1\x80\x92 \xb2\xaf\xa3\x9bP\x0f\xe7_\xe8\xdd\xa7\xb5\xf8\xfe>\xca\x12\x8aU\x1f\n\xe7\x93\x94\xc4\xdf\x0be_U\xba\xf9\x02X\xe3{\xdf\x15\xdabd\xff,xs\xc9\xf6\xfb\x03\x9c\xf7\xf3\x05\x10\xe7/~W\x90\xcb\xb1}C\x98\x97J*\xe3\xbb\x13\xaa\xbe\xbc07\x9b\xba\xd0^\xa5I{r\xad\xb2\x83[C\xe7C\xb3ZD\xd7r\xf7\xa2G\xc5\xab\xf2\xe1\xabk\x18gim:o {\xd0D\xd3S\x9b\xe3\x105\x19\xa8\x97@k\xa9\x84ki\xb7\x00\xd7\xc4\xac\xb3F0j\xb2\x1c\xd7ymhL \xafe\xde\xb7\x01W\xa0\x94G!:1\x05A\xe9\xceIJ\x90\xbbIa\x02\xe9\x80\xfd\xac\xdeI\x14#b]\xdd\xe4,Y}t\x87\x92\x8f5\x84\xa6\xcd\xfa\xba\xd8\x0e\x1e\x86l\xb3\x99FC\x13^\x82\xbaT5\xf2\xd6\x18\xf3k9\xa8\x9e z\xe39]\x17\xec\xbczX\x07\x87\xe1\xbc}\xf3\x82Z<\xac\x07\xfeR\x13\x9d\xe0\xd7O7\xdc\x96\x10\x85\x8fG\"J|u\xb8h=\xd7df\"1M\xd9\xc4\"\x92\xd3\xa3G\xca\x8e-\x07\xba\x16\x031\xf7\x8e\xab\xe1\xf6AI\x18^\x16\x08\x00\xf9a\xf6.\xc6q\x17\xe1{kMp\x1c\xab>:\x0c\xd1j\x8f\xe7\xa9c\xf2\xcd\xcd`I\xd3\xd7$%\x8e\xcb\x81\xb3\x0f>\xdawEQ@\xe7NTu\x05`X\xbd\xc0,\xc4E\xa5\xac\xd8\x03udO\\X\xf0]V\x8bsbp\x05\x95\x97\xd9\xe7Z\x7f\xfb\xdc\x92GDH\x91m\xb7qn\x8c\x07\xc4\xf3\xb2U\x16\x90\x94\x9e\xdeD\x1f\xd8\xf1\xfb\xdaO\xd6x\xf9\x9c\xe0E\xca\xc2J\x8dn\x1b\xf6;\xa9\xcf\xbf\x83\xd1\xa2\xe6U\x13\x9fo\xb6\xe3[m\xc7s\xa7\x1a\xb0F~\xda\x1c\x1c\xf2\x93\x1fF7\x97\xbew\x89\x8bp\x0d\x13\xbe\"cp\xee\xc4u\xd8\xaa\xa9\xabBd0\xf7\x95\x1bv\xe3\xfa\xea\x1b\x04\xe5&\x02Q\x1dc_\xdf\x15C\n\xf5\xef5\x86\xd9S\xf6]3M\xc1\xad\xdc\x82\\0d\xb81\xad,:5\xd4\x17\xb6\x88\x0c\xd7\xf1\xd8\xdc\x04\x07cj\x05\x14\xc0)\x1b\xbb\x11z\xfe \xa6\x01% un\xdc~~\xe0\xf5\x0d\x01,\xf5\xae\xce\xeda\x06\x0fBu.O\xb6Z\xabo\x8e\xe1\x8f\x1eA\xa7\x85iD\xe5m\x87\x0e\xbc4\x0e~\xa1w\xb8\x1ayJ~\xd8\xd0\xd1\xa2\xcf\xd1s\x80\xf2\x83\xf7\xba\xf9\xbe\xb9t<]XD\xa8\xb1\xa8\xf8*\x1b \xba1\x8b\xdcQ\x1a\xda\xd6HX\x01J\x810\xc1\xaa\xac\x96\xbc\x0d\x1d\x9c\xdf\xc4d\xbd\xa6\xf1I*\xb2~\xa4\xe5\"\xf3\xd5\x01gT0\xd0\x980\xd7\x0d8\xaf\xd3\x0d\xb3\xd5\x05\x8d\xf3\x95c\x0b`\x19\x0b(\xacw\x97\xe7\x8c\xc3\x03\xcc\xdc3`\xf4\xb5%Ms\x93TG\x9cyn\x112\x17\x1d\xefk\x15\xb4+\"?\xfa{\x8dz)\x9eB\x81\xd1\xe1D\xafp}\x8f\xa5_)*\xef=\xd595\xab)\xde#q\xa4\x8a$\xe2V\xb4i\x197\xd5@\xe0\xf8\xe5\\L\x17\xf5\x85\x928\x18\xd60\xd7\xe2\xce\xaf\xcfV\x00\x13\xa0\x0e\x0f8\x92]\x04\xbe\x97SMd\x02\xe2\x01\x99\x17n\xa8\x07\xc9G\xba8\x8d0m_\xbf\x1ab\x0bp\xe1B.\xc8\x0d\xce\xa3\x9b\x90Vc\x96\x16K\xc8\xc4\xb7\xe42\xca\x02!\x06\xb5\x81\xa6\x84I]r\x03\xa9\xae\xac]a\xe4\xd0\xa7\x06\xe8c\xb9\xc8\x86\x16\xd3\x85LL)\x86_\xbf\x0f\x89\x8c\x03\xf0\xb5\x03P.W\xecX\x90\x13\xcb\x94\x8f\xc3\xc7\xafb\x1c}\x08\xf1m\x0c#\x9eG+,\xde\x8e\x90\xc0\xf1\xbdY\x062g\x89\xdb\x80\xf7\xff5\xc8\x8a<;\xe2fLW\xd15-\xa3';\xf9\xbf \x82~\x075\\)\xe2\x80Q\x03iP\x8a\xfc\xe6\xc1^\x0b\x13G\xedR\xa7\x91Xh\xf3\xfb\x1e\xe6\\\x9a@d\x89\xfc\xe2\xac\x8d\xc1V\xd8\xe73_\x81 W8z\xe6!\x8b\xf0\xa0\xfb\xfb\xe0\xb5\xc4\x94\xb9h\x16D\x92\xe4\x04\xc6|\xb05\xf5G`\xb8\x96\x07\x19uD\xb4\xe2Y[\xf1,\xad\\WlZ\xc9\xa0 P\x88\xd0\xb8S\x0ds\xc9ov\xf0\x9d\x80S'V\xcc\x17\x0c\xd3`]WVq_\x17\x95\x17\x04dV\xfa\xd1 \x81\xc60\xca\x96\xd1\x08\xd0\xaf\xca\x83\xa2\x9c\xb6\xb3\xe2\xbc\x7f\xf6\xab:\xa8y\xd9\xce\xa98D\x95{\xa9\xeb>\xac\xf8&w\xfb0e\xbf\x1a \xa9\xfe\x8c\xcf\xb0\xf4+\x0f\xd2Z\xf4\x1bv\x8e\xca\x00+~\x14\x0e\xde\x7f:9=\xfftrx\xfe\xe1\xe3\xf1\x87\xc3\x8f\xa7\x7f\xad\x9f\xafj\xf5\x9f\x0fN\xce\x7f<>~wxpt\xfe\xeb\xc1\xbbO\x87\xf5c\xb7Z\xfd\xe8\xd3\xfb\xc3\x8fo_\xe9\xaag\x9a\xea\x1f\x8eO\xde\x9e\xbe\xfd\xf5\xd0\xf6^\xa2y\xef\xf8\xd7\xc3\x8f\xef\x8e\x0f^\x1f\xbe\xb6\x0d0\xd0\x9eR~\xf2*K\xd2h\x95k;\xc6\xf0\x91.\x0fo\xd7J\x94\xfc\x94&\xe9\xe0\xc2\x0f\xe7NHo\xc4c\xa7\xfb\xbb3')\xb9'\xb1O\xdc\x0d\xcc\x01\x14\x0f\x0eNO?\xbe\xfd\xf1\xd3\xe9\xe1\xf9\xd1\xc1\xfb\xc3\xf3W?\x1f|\xc4\xbc@?\xfc\xb9\xab\xcb\x1ao\x0f\x85\xc1><\xb3\x8e\xd6\x07\xb9x\xfc\xea\x92\xc4\x185\xd1R+I~\xa1w\x96\x1a)\xc6\x1c3=\x0e\x82\xe8\xe6M\x16\x04'^L\xa99\xb6\x0c\xd6\xc3\x08%xjx\x96\x0e\x03\xcbp\x13\xcb\xa3\xbb\xd03w\x9f\xa5\xd1+\x11\x12\xc3\xdcD\x96F\x1f\x02rglE\\\xec\x9b\x9f\xd3 \xf8@\xe6s?\\\x1a;auN\xd6\xc4\xb3\xd6\xb9$\xf1\x89e\xd5\xbcK\x12\x04\x14-\x1c\x8c50\xb4\xc7\x18\"\xb87\x8e\xd6\xb7\xc0\xc2\x0bH\x92\xbc}m\x7f\xceYLS\x8d(H\x8cA\x89\xbc\x88\x01\xc1\x8cV^\x14\xa64\xb4@\x80??\x9c\xfb\x18\xe8\xc3^\xef6}O\xc3\xccZ'\xc6\xc1\x9a\x00%*\xbc\xf3\x13\xdb\x88\xa2xnFO/\x8e\x92\xe48\xf61L\x92\xa1\x0e\xb7\x0c2?\xa4\xa7\xbe\x05\xdey|\\\xc3,\xe6t\x81\x81 \x0dO\xfd\xd8\xdc\xb2\x08\x96c~9\xba \x83\x88\xcck\x91 \xf3\n1Y.\xad\x0bEC\x8f \x04\xc6\xe7\x8b(^Y\x1f\x1e\xd8\xe9\x14\xabr\xd8\xa2\x8f\xf74\xbd\x8c\xe6\xd6*G\xd1\xaf$\xf0\xb9\xff\xa9\x01 \xac\x1a\xe7\x0f\xcc-\xc5dE\x7f\x8cb\x8c\x16i\xa8sI\xc9\x9c\xc6f\xa4\xba\xa4\xfe\xf2\xd2\xdc\x05\x0f`d\x1c\xe4\xa5\xbf\xbc4\xbf\x1b\xd3\x85\xf5\xe1;b!`\x97\xe9*x\x13Y&\x96\xa6\xeb\xc3\xbfe\xfe\xb5\xb1\x86\xefY\x16\xd37/\x10\xden\xbd\xc7\xf0\x8d\xc6\x1a)]\xc6~j>\x81|3\xc4\xaf\xe8\xdd\x07\x12\x93\x95\xb5\x86\x15\xc9\xae\xfc\xd0d\xeet83ov*nd\xd9$e\xba]D(4\x7f2\xec\"~]\x19\x95\xea3\x08a\x08|\xda\xd7\xed\xbe\xca>3$WK\xbe\x052\xd5\xd0C\xe4\x87xVE2\x11\x9b\xf4\x99>?\x84.\xd9L\xac\xac\xe8\xa40\x9d\xe7\x89x\x04\x85r\xbas\xff\xfa\xffa\xefM\xdb\xdb\xc6\x91E\xe1\xef\xf3+`\xde9ij,)\x96\x9d\xc5Q\xe2\xf6u;\xce\xe9\xdc\xc9\xf6\xc6N/\xa3\xf6\xf8\xc0$$\xf1\x84\"8\\d\xbb;\xf9\xef\xef\x83\x02@\x82d\x81\xa4lgf\xeey.?\xd8\"P\x00\xb1\x16\xaa\n\xb58\xfa\xbe\xb7\xb9\xf2\x1e\xfe\xfd\xb7\xf4//\xdc\xdf\xae\xb6\x07\x0f\xf1Q\xe8\xa5\xdbX\xbb\xca\xcf\xc5\x9a\xa2\xee\xd6\x04\xd1DL:\xfd[\x91\x8ab\xf8\x8af\xde\xd2M\xdb/>\x01Ug\xb3\xc9yU\x1f\xbc9\xf1\xa8yVH\x94np\xe0\xd6u'\xe1\x82\x1bkd4\x0e\xa2\x88%b\xbb\x08\x9c<\x9b\x9c\x93m\xc2\xc86 g\xbb\xc8\n/B\x1a{\x00\xbds\xfe\x9cx\xa3\xd1\xf3\x81\xd4\x0c\x1d\x874\xcd`\xe1V\x17\xa6\\\xda\xd5O\xb1\xe6\x90\xce\xb5B\x98\x9a\xf4\xf4\x87\x9b3\xba\x80H\x0d\x8e\xf4\xb7^?a\xe7:`\xb3\x8c\x16\xadgkH\xb8;\x1f\x8c\xe7<9\xa1\xde\xd2\xcd\xeaF\x80E/br \x83~\x81\xfa\x89\x1b\x8d=\xd1x\xb1m\xd3\xc1s\xb3?\xa2\x87Z\xdfQn\xe42\x0f7\x99,\xf1\xfc\xd7\xfb\xd8\x7f\xfb\x96\xcdm_\x82\xaa\x1d\xedkT+7nI\xcd\x1cTC\xb7\xaa\xd0x`\x86#~\xf0\x808r\x06\xc05\x03T\xb2\xe5:)\xcb^G\x19K\xd64\x94\xe9\x83\x8a\xde\xbc\xa9\x13)p\xb3 \xcd\xe1\xf3r*\x82\x14\xfe\x8b\x06\x8bO{4\x0c\x19S\xf5\x83\xa9G\xc6V\xaa\xda\xea2\x13%\x0eI\xa3\x12 \xa2\xc0\xf6\xbf\xdb\x98\xa3\xdc\xaf6\x7f b'\xe1\x0d\xd5c\xb7U\xd5n\xb6\x85r\x86\xc3\x08\x16+20\x99\x91\xad\x0c.\xc1x\x81\x8c\xc8\xa4\x18 ]\x1c\x9d\x9c\xb1\x1c7\xa3\x9ez(\xf9AK\xbc=\xb5.d?\xcb[v\x18F\x15\x87\x1d\xc1Jf\x9c\xbc&UX\xec\xbaH\xef:7\x13[U\xfa\x9e\xe0\xe4\x05\xc9\x9e\x13\xbe\xbd= \xd1\x8c\x9f\x8bI\x98q\x04\x05i\xf5\x9c\xe6\xdcO\xc9\x8c\x9d\xdf\xef\xb6\xb3\x1c{XP\xa4\xbb\x1ec\xa0\x13\x89h\xed\xcd&C\xf2\xdd\x0b\xc9\x1f\x16\x02\xec\x03'Kr\xe6|\xff\xdd\x908/\x1e\xca\xcc\xef\x9d\xf3\xe6\xc1(J;/\x80\xb1\xfc\xde\x01`\xf5\x1b\xf1\xf4=\xdb+a_d\x97\xdc\xbf\xf9\xfeE\x96\xe8b\xc9\xf7/\x1e\xaaDK\x1d^\xd9\xda\xf5\x82\\\xaf\xc2(=\x00\x8eo\xfa\xf0\xe1\xd5\xd5\xd5\xf8jo\xcc\x93\xc5\xc3\xdd\x9d\x9d\x9d\x87\xe9zQ\xb4~\xbdhT5G\xa9x\xe7/\xceT\xf6\xe8\xf0\x85\x1f\xacU\xcb\xe0\xd7y\xf38\xa4 \xa3\n\xfc\xc5\x8a\xc6\n\x1a~!\xd0\x1e\x0f\xa7d\xb6\xdb\x1c\x01\xddi\x8f\x87\x8b\x84\xe7\xba\x9e\xe2\xd56\x1a\xe2 \xd9\x82E\xben\xc4<`\xa1\x9f\xb2L\xd5P\xbe\"%c\x9a\xd0\x95.(1\x8b*\xa6_\x90BY\x82vAM`\xeb\xdc\x11y\xb7\xb0\x90\"wDn\xcacy\xad\x8bdyT\xe5!l\x92\x1e&4\x13\x9a\x84\xe7\xcc9\xcf\xf0\x9c%\xb3\xdcog~#\x08\xa0,0\xad\xbb\xa7,w\xfa\xcc\xf1\x82\xc4\x0b\x81\xc5\xf5\xc2 \xfe@\xb3\xa5\xf8\xed\xb39\xb8n`a\x18\xc4)d/\xc4\x9f`E\xa5\xaf\x07\x08\x80\xa2\xfe\xd3\xe4?\x13\xea\x07,\x02-\xdd\x15M\xc1\x03D\xac\xaaR72\xf0\x93\x877\x0b^\xfc\xd4u\x88\xc244\xebHddJ'\xcd\xb8\xf4\x0d\xc1\xae\xa5\x060\x84;8/(\x1b\xfba6\x07\x0f>\xc4\x1b\x12*\x7f\x99\xc1xk^N:i\x88@\x9c6\\\x9e\"\xf3\xda)\xa2N?p!\xe4\xfcEpV\xd4\x02\x11T\xe8?\xe7/\xa5m\xb5\xf3\"\x0c\xa2\xcf\xe4\xe1\xf7\x0e\x99\x12\xe7\x85\xa3HP\xe7\xfb\x17\x0f\xcb\xdfN\xd9\x95`<\x0f\x12M}\xa9\xe4C\xd9e\xd4\xd3\xed]\x0f\x01T\xc8`Qwoe~q\xe1BO\xeeW\x1f\x9d\xb8\x82(\xe6\x83\x99\x80\xab\n%\xfb\xd0\x0e/\xa2>\xac$Nl\xde\xc1<\xa2S,\xd1p@\xa3\x19\xc9z$=-\x97\xa8\xcfI\x8eK7R5\x85x\x9c\xc1\x86\x02\xa6\n[\xfa\xa4\xce\xbe\xaa0\x83\x0dW>\xb1\xaa\xbe\x9e.\xe3\x0cN\x1e\xd7;+\xe3\x0c\xee=\xae\xc3\xaf\xf1\x15\xa5\xc2\x0c\xee\xd4;\xab\xc2\x0c\xee\xd4 \x91\x1b\xd5\xfc\xfa`\xaa0\x83\x0d\xbb\x8d\x0b)\xb5\xd9{6\x18B\xb8\xc4\x9d\xba\n\xa4\x8a7\xd8\x18\xbe\x13U\xf0\x11\x14\x9c\xf8\xeb\xebB\xa2`r\x0b\xa2\x85\x16{\xf7\xa8\x10\xf9;\xe4l\x19\xa4D\xd0\xf6\x82c%W4%:L,\xb9\xbc!\xff%\xce\xa9H\x9cS\xff5Fn6\xfed\x7f\xd3\x1f(Ka./\xde\xa1'\x83\xb4Z\xfd?36\xbe\xc8\xe8\xe2\\\x1a\xd7(s\xcfl\xac\x97\x85\x1e)\x99jY\x0c\x8a\x1fu&{O\x1dA\x1d\x88\n\x87\xf6\xc1?$\x0e\x81\x0btA\x8f\xa9\x91P\xaa;\x84\xcf \x9c\xda\x96\xb2\xe5\xc0\x8b\xe1\x1a\xc3\x91\x0f\xf6\x89]M\xb4uO6\xfc\xc9\x0eHu\x11\x9b\xd9\xb6\xfa\xce\xc0\xa3\xa4\x15B\x8a\x94\x9fL\x9cA\xa5\x81p\xcf^1\xd158\xf72W\x14\xddu\x86\xb0\xec\x07\xed.M>\xb6x\xdc\x90N\xb6\x133P\xfd\x15\xea!\x19\xf1\x88\xa8m\xa6\xd9\xf8b \xa1!\xda[\xe4\x05\xac\xf2\x07\x0f\xf4\xcfRN#h\xb6\xd7`\x99#a\xa6\xe2W\x87 \xd3\x91\x9b\x0dI\x00>\xb2\x16L\x06\x8e\x85\x88\xc7\x1f\x19\xf5o\xdc\x81v\xa6\xe5\xbe\xc4\xee\x0e\xa0QQ\x9aM \x12\xeb\x99\xa0\xb6v\x16\x97\x9a\xa1:3\xa6\x88\xdf\xe7\xafVKQd\xb6^6\\ \xcd\xc7q^\xc6\xc1\x05\xe7\x92\xa2\xcd\xca\xcfd\xbd\x85*Y\xb7\xa7}i\xbci|l5\x8ey*G\xf0g\xe9\xca\x02\xbe\xd8^\xcd\xa7F5\x97\xb7\xa9\xe6\x1f\x8dj\x16\xdd\xd5\xe8_b5\xbej\x1ca\x19\x8f\x8f.y\x02w\xd3\xe2\x7f\xed\xcc\xcbx|L#i\x0e\xe0x4\x8aCzc\x05)\xfc\xe1h\xc8L&4\x0b\xbc\xcc\xe5|\x1c+\x0f\x85\x8e\xaf\x12<\xcc\xab`\xc6\xe3\x93U\x9c\x05\xe0K\x90\xc9_\x08H\xe4%7q&\x81\xf4o\x0c\xccW >\x9a\x9d$p\xa3\x0e\x91\xfd\x9a\xd9o8\xf5\x99/\xfd\xd6:!\xbc@\xc8\x0f\x0b\xe0[\x96Q\xdf\x04^\xa9\x04\xbc\x80\x8a\x9f\x04\xb0)\x12\xe4\x08\x1c\x96\xe7\xa9\x18\xb0X\xfcG\xb2\xe5L\xe1\xd3$2\x81\x88\x80\xfc Z _$\xa0X\xe6\xc4\xeag\x13\xe8#\xcdX1s \xcd\x98m\xd6N\x19\x03\xf3\x0b'\x85\x1f8\x80lQ*\x7f! \x19\x0d\xa5\xcf\xc9T\xfeB@\xf24\x06I\x8f\x93\xca_M\x90\xb3`\xc5t\xb4$'\x0bV,\xc7B\x1ae<\xfe\x89\x87\xf9\xaa\xec\xdd\x1a^m\xfd\xfb\x99\x06\x99l\xfe\x95\xfce\xd0\x11\x18 \xf6{c\xff^\x8f\xb3\x84z\x9f{\xec\xfd\x1f\x1aeK_\xcb\x82\xe0~\xfdR\x1f\x98{\xf5\x8b\x1a\xb1\xf3\x199 \xea3\xd5\xcc\xc2W\xbe.\xfe\xc8)<\xf4ft\x81\x1du\xd2\xd3{\x00\xba\xfb\xd6 ?\xeap\xc6\xdd\xb5\xcb\xeaMW@\x05>\x06\xb9\xa9/\x86%\xfeA\xba\x1bU\x0e\xdc\xd4\x1e\x01\xb9\x8f\xfc\xcf\x06\x96k\xe0\xcb\x84\xd1\xcf\xcd,\xd9\xb0u\xe03nm6\xcd\xfd\x00\xcb%\xa6\x0c=+]a\xdb\xfbp>$\xaf\x06\xe4U]\x1e\x93\x01\xb1\xd7Vx\x1c\xe7\xe9\xd2E\x86 \x1b\x92W\xb3\xec\\t\xdcB7\xb7v\\j\xac\xdd\xef\x8c\x9cH4Y\xe0\xcb[\xceI\xb0Z|\xf3v\x0d\xc9\xb7\\Us\x9e\xac\xee\xb7\x0b\x1f\x19h\x88\x11'Q?Z\xbap\x9a_\xae\x02)\xb4\xd4\xbfn\xd7\x8d\xc0\x128E\xad \xe9*\xce\x1a\xd7\x8b]g4a\xf4~\xc7\xe1\xb5\n/>\x14\xad\xd3?\x99=$\x01\x82;\x7fj\xe0\xce\x1b\xa0\x9b\xe4\x89\xd0\x87p\xfa\x11\xe5\xfd\xe5%\x07&k\xb8\xa4\xe2\x94Fs\x12<\x1d\xae@\xb0\x0c\xb6\xba\x14\xc7\x1f\x96\xb5\xb4\xd4\x15\xac,\"\x90@\xc6\x14\xc5\xb2>\xb3\x9b\x05\x8b\xf0\xbc0\x88>\xe39\x82\x9e\xc1s\xd4\x1d\n\x96\xa5Ug\xb1<8\x0e\xf1\xac\xab\xcbN\xe1\xcd\xcf\xe84\x89Uf\x95\n\xc5\x89\xad%j5w}\xf3\xff\x80\xff\xbe\xe6WW,\xca\x83\x8c\xad\x90\xf2\xe4\xc7\x9ap\xedW\xd0\xa2\x99\xd1\xd1\xefG\xa3\xbf\x9d\xab\xff\xd3\x8b\xdf\xc6\xbf\x8d~\xf3\xcf\xff\xf2\xe7\x87U\xf0\xbf\"\xb7\x95\xff i\xb5\xd3\x06#B\xfe\x8cJ3\n\xedJ\x1d^\xd0\x199\x03\xf2\xfd\x01\xd9\xa9J0\x02[\xa4\x92\xbfA\xb0\x01\xe4{\xbf\xb4\xc5\xd8\x13|{\x15\x17u\x85\xc4\xf9Oy\x03\xfeW\xf03\xfb\xe5\x0bq\x7f\x05\xf3su\xcf!\x08\x98\xc7\nW\xfeU\xdf\xbd4\xdc\xbc\x16\x04NUFb\x86\x03\xc9\xe8\x824\\C\xea\xcc\x88\xaeX\x1aS\x8f}\xfa\xf8\x9aT\xe3ph\xb9\x94\xbee\xa8e\xc7 [\x07r\x9e\xb9e\x9dRZ[\x1a\xa4\x05,u%\xa99\x17\xb4\xbe\xa5\x9d*\xbcv\xee\xc6\x16\x08\xd5s\x18\x92\xd7Q\x90\x054\xd4t\xbb\xa0%\xe7C\x92\x0c\xc9\xd5@\xfa\xd8o\xfa\xf4\xfb\xda\xe6fP|\xfd\xa4\\\x98\xf0\x8d\xf71\x8b\xce\xe8B\x9a\xdd\x1cE\xfe\x87\xf2\xda*\x85\x0f\xb6,\xf6\xebZ]JA@\xd6\xa5[k\xe9\xa7h\xfe\xd6\xb5@)?\xce\x8a]yN\x0e\xc9\x89X\xdeR\xf3\xebD\xaet\xb2M\xae\xc5/\xb9\xfc\xadKC\x02\xf7@\xe0\x1b\x92\xaf]\x14O\xc7\xc9\xf2\xa68\x82\xe6c\x9ag\x1c\xc2\x88H\xd3\xba\xd6r\xc1x. M\xfe\xe3\x9fr\x14w4\xeb\xd3\xbfSwZ\xa9\" r\x99gY+-\xf7o\xd0\x8dNz\xb3\xa3Q\xff\xe8O\xbc(\x99J\xab\xbeN\x0f\xcc\xd0CCQ+\xd6\xc8\x03l\x83\xb3\xb0\xb8\xd2H\xe0J\x03?\xc7@\xa7\xa7~\x8f\x91t\xc6\x89\x06/\xee\xb3\xa4\xc5T\xcf\x0c)\x11\xd8\xcfP\x0d\xfa\x1ek\x03x\xa7\xfe\xa8N\xa1\x04\xe2\xa2\xd8\x0e\x04\xfdt8\x87\xd5\x8f\x03\xba$\x92\x96\x01\xcb.7P\x7f5&\xc6$6\xdc\xfd\xe3\xebP+\xa2\x08\xa2-\x80x\xf6r\x9a\xe5\xfc\xbe\xe2 \x94H\xdd@-\xa6\x8e\x06\x135\xa29\xc1\xdc\xeccOA'\x9b\xf4\xe4\x9fK,\x0c\xeb\xe8\x90\xbcm\x8e(\xc8\xd4\xc4\x87\xbcz\x9bk~ ]1\xd8\x10(\x01\x85.\xab\x94\xda'\xb9\xd4 \"\xdb\x07\xc4\x01\x15\xa5\xbc}\xc2\xfb\xc6\xcb0\xcc\xc2#\x9f%g\\\xf0\xf9\x81'\xdbA\x0eID\xa6\xfa\xf4\xa9\xd2\x1cf[\x1a\xad\x07\xfa\x03\xf4\x8eZ\x80^\xbfT\x15\x83\xech\xd0\xea\xd3\x1d;\xb5\xfb\xf9s_\x17\xe1Kp\xe2\x80\x93\x16\xb5\xad\xe6J1\xf7\x1c\x1f\x14\x0b\x85\x8f\xa5\xce#\xccRB\xca\x04divP=b\xc1\x7f\x98\x15\x1aYZUL\xd0\x1b\x86\xe2\x98M\x01R?T\xadu\xc0\x0df\x84p]\x83\x9d_)Q\n\x0c\xdc\x89\x1b\xb4\xd1\xc5f \xda\x86\xd3\x12\xbd\xef\xa5\xfcQ\x13\x8aT\xc5[\x18\xff7\x0f\"\xd7qng\xa7O\xca\xa5\xfc\xb3I\xa3 \xce\xf37\x15\x02,\x19{K\x9a\x1ce\xee\x8e\xd8\xbb\x90\xbcM\x1225\xe2^\x10\xeb\xca\xab\xd1\xb7\xbd\xa5\xa6Z\x89\xed~\x97X>\x86\xd3T\x94\x17\x08\xe2\x7f\xc6bs\xa4\x83\x89\xc0\xe8 \x84\x86\x06\x0c\xd8{\x05Z\x1bY\x9c\xd5i\xfbB\x94\xec\xca\xces\x12\x92\x17$\xd5\xb6\x94$\xdc\xde\x1e\xe8fI\x0e6\x19\x92t\x16\x9ew\x912\x8d\xe8\x14\x1e\x0b\x8c\xf0\x14\x9ba1\x8c6i\x0e\x0d\x06e\xdc\xceHv\xb0h\x81\x9b\xc1\xc9\xdf\x8czR7\xe8\xab\x16\xbb\xc5\x16\x00\x19=\xbe\x8c\x82o+\xd7\xefb\x8c\xb8M\xdc\xcb\x15 \x82f\xda\x96%\xb9\x17J\x9a\xdb\xa4\xb3\xbaMh\xe6\x9d\xda\xd4)\xba\xe56\xf1\xacn\x13\x9ay\xa76\xf5\xe0\x03\xb9M\xec\xaa[\x85f\"$\xb3\x9d\x01\x7fW\x14j\x13\xaapE@7`\n,\xa3 \xc4V\x19v\x8b\xf8\xfa-\xde\x95\xda\xd1\x15M\x8c!\xb9\xc6\x83\xe3\xde\x95\x03\xec1\x1f\x97X\x83\xee\xf0\xc9\xcee\xd9\xc1t\xfe\xd4\x8f\xe9\xac\x9f\xfc\xc8\x0co\x80\xade\x8cI\x0b\xcf\x98 >\x00\xf4\x03:\xf3\x08\xc3(Y~4Y\x1f\x7fl\x96 \xe7\x91Yq\x85+\xeb#YN\xed\xecZ;\x1f\x05\xfd\x0cD?\xd3\x01I\xeb\xed\x0e\xa4\xec\x1fX%pU\xf2\xc7\xd7\xc1,8\x07B\xbd\x83\x9d\xb33\x8f\xedW\x8e\x92Z@\xb8`r\x08\x03G L\xad\xdc\xe6\x89`\xcc*\x0c\x1fka\xf8f\xd8A\xecB\x11\xd1\xed9\x90\x81q\xc5dfn\xaa\xd1\xc4\x83M\xd6x\xebZ\x12\xe0\x10\x98\xa6\x87Pb.\xa6\xb0}\xf1\x0dI\xdc\xb5\xa7Hek\xc4\x03\xb2\x15#{\xe3\xcb\x172\x87\xb1\xc0\xf3n\xb5o\xaa_\x9e\x0f\xd0\xca\x1f< \xb1\xa8OL\xc1\\\xfc\xb0\xecR\x91\xd7!\x81\x90\xfbM\x14E\"\xfb\xe9\xa7\xa0\xe0Q\xe9\x94\x98\x1aC85\x07|;\x95k\xa3\xdc\xaa=j\xaf\xc9n\x06\xf6\x9d\x9c\xb2\xacm\x1b\xb7\xdf\x8d\x17\xdf\xdb`\xa3w\xa3`\xdf\xa6|^\x7f\xca\xddrX\xedI\xd1K_u\x81L\xed\xd8\xc5\xdf0\x10k3\x05\x84U\xd4l\x80\x12\xd8\x15\xe3\x98c'\xb2\xf5\xfc\xbd5\xd7]\xb0\xb6\xac\xc2\xda\xb2~\xac\xed\xdd\x99c\nZz-6|\xd6L\xc5\xd1\xe3\xd5\xe6m\x02\x05\xd0\x8f\xbfU\xb5\xa9\xc1\xc6\xf3\x92\x8d/G\x0b/\x16vq\xffx1\xaf\xf25\x03\xbd[\xbc\x07\xcf+\x9f1\xe0\x11\x1aKg\xa5\x05q\xa4B]e\x06\xff\xabIr\x89\xb8#uF{\xa2\xc8\x16 _\x03\xf8\x8c]gJ\xf8\xe8V,>\x03PF(\xe4\x16\xd6\"d\x9b\x04\x03\xe3\x98\xcc\xc9!\xa1P.\xaf\x95SW\x92\x8e\x14\xf2\x1aE\xc2\x1a`\xd1\x81\x10\x0bg]\xdbL\x8a\xffy\x07\x0e\x85\x8b]\x84\xed\x1d%F\xab\x1b\xd5 u\xe6\x91]\x95\x10\xabyC\x9e\xfd\xff\xe9\xe2\x19\x8f\xd6\xf9\x95c\x87[\x01\xd8\x0f\x07iV\xdezvT<\\\xed<'\x11yA\xb2B\xfa\x15mo\x0fH6\x8b\xce\x95\x0e\x87\xcd\xf2\x9c\xf4a\xe7\xda\xf8\xd9\xde<\xe6\xf58\xcdx|\x96P\xefs\x10-\xbaN\xc7\xce6\x81\xc3\x82\xb6&-\x19\xf5\xdboo\xb9\x7f\xd3\xd2\xde\xc4u\x9e6\x1f\xe93\\\xf6\xd9i*C\xea\xa7\x8f&\x8bA6\xe0\x07\xa2\xf4h|\xc7\x03\xf1\xe9\xb3\xba\xcb2\x0e\x86\x87\xa3U:\xea\xf4\xdc]_\xeaj\xeb&n\xe1e\xdd\xe5C\xe2\xac\xd2\x913\xa8\xe3\xda;\xb5\xfb\xe1\xc8\x1d\x0f\x1e.n\xd9\xbe\xb2u\xc9\xb0\x1b\x85kW\xe0\xe3\x8c\x7f\x12\x14$\xe2\x02\xfc\xeb\xbdv\xceF\xa5(\xaa!\x19\x07\xe9\xa7(\xc8B\x96\xa6\xef\xc0\x7f\xd9\xa0k\x1cZ]\x19iQ\x02h@9\x97\x9c\x87\x8cV\\\x17\xcb\x0c\xa5\xc0_z\xe0\xaa\xed\x04\xady\x11\xa4\xef\xe8;7\xab\xa1\x07\xbd2DU \xe80\x9c(s\xc4?\xe5\x83\x07\x84K/\x922\xd2\x05\x99\x82\x08\xbc\x11!\x80HG\xe3`\x96\x99\x04+\xd0\xcf\xca\xc4y\x13_7N\xf7;N\xca\xfe\x0e6)\x0f\xff~\xb7\x8d2\xa8\xec\x94\x11l\x95\xfbl\xf7Cwv4\xfa\xdb\xf9=m\x16g\xf4\xe7\x893\xb08\xc3\xbfCk\xfb\xb5H\xcb\x0b\xfe\xf8\x8a.\xae\xa2 z\xe6\x17\xdb\xb8\xb6\xd8\"y\xf9\x90\xcd\"pq-M\x89\xa5\x14>\x82\xd54\x8b\xec~\x05\xc8m;lpg\x8fw:\xf7\xafej\xbes\xbe#\xdb\xb0\x88\xc8\xb6x\xb9\xe7\x86M\xcc\x86i\x92\xa9\xda\x10q\x08\x87\xecL\xd9\xfcb\xa2l\x8e\xcdE\x97A7\x01?\xa9\xea\xa6\x1b\xdc>\xa4 !(|\xa7B\xda\xff\x07\xf7\xe0[\x13\x84\x9ft\x931\xbb\xce\x12\xeae\xbat\xd9\x1e+s\x8e\xcf\xc2\xbd\x84~\xd9}2\xc0\xec\xe09z\xe8h\x9e\xc1\xb2\xcc\xa3\x19\xabn\xc0s\xcc*=\x9a9?\xb3\xcb\xcfA\x06\xae\xff\x80\x1c\xb9*\xde3\xc8\x7f\xcb\x7f/3W\xf2E\xe6\xac\xd22\xe3\xedi\x99\xfe\xbeL\xe6\x90\xda\xf8jm \x12\xe3`hN3\x8d\x82\x15\xb8\xf8\x02OM\xdcu\x8et\x823$\xe5\xcbI\xe4c|KQ:\xc8\x98\xf4\x14\xd6R\xc7k\x0d\xd3Z\x93\n\xf5g\xad\x05\x9cqa5d\x89\xa0?\xcd\xae\x9c\x15)\xa2\x86\xf2\x0d:S]\x81My\x02\xe6v\xde\\\x0d\xa6k{q\x00\xe6\xfd\x18\xf6\xca\xa0\x8a}\x01Q\x1b\xae\x82\xc8\xe7W\x80\x04\xa5\xa8\x8d\x04csf\xca\x97!i\x02\x14\x83\xdf\x0e\x06#[\xbe\x0e\xaac\x82\xb4\xa5\xa8\xa22\xb4\xc6[o\x9f\xd9\x82\xc6\xa13v^P.\xe2\xe5y\x03d+0a\x90h(\xe2\xe4 \x1aE\x0d\x113\xce)\xa2\\b$5\\D\x91\xbc\xd2.P`\x88\xce\xd1\x8d_qIJ\xee\x8e\x946s\xfc\xdct\xc1,%_\xbb\x93\xba\x0f\xe3\x1c\x97:J\xc7\xcf\x8f\xf6\x8cCE\xbb#~\x86b\xc7\xb0\xdb\xbd\x19h\x13 zY\xc6@5\xeb\xf5\xac\x07\xaa\xe3-\x99\xf7\xf9\x92_\xebHU:,\x1c\xb8\x84\xe7\x95\xd4\xc3R;d\x0c\xc5\x98oj\x8c\x8c!R\x9b\x05\x1d6\xa3)\x98\xaa|\x1b\x88\x95\xe8x\xa1$ nf\x11\xed$\x1a\xecX6\xb2A\x9a\x93\xb2\xff\x98\xcf\x1a\xf1\xc8\xb0\x9aR\xe8f\xb9f\x850\xa8m\x10\x10(\xba\x15\x80^k\x80F\xfeWX\xddx\xe3Tx\x7f\xd5\xbd\xf6o(\xd8\x9fd\xd8\xc16H\x15\x99P\xcfg\xa4\xccFX\xed\x9e*\x90*\xf4P!^\x91\xa7\xdb\xa5\xabJ\xc8!h\xe8[\xaaR\xfd\xc0++\xddc\xd6K\xeb\x9c\xe6\xd0\xb5\x9e6\xa6\xd9\xff\x06\xeb.\x1b\x9b#\xd9\\O\xac\xa7\x8b\x8dj\x9f\xcb1\xca\x8a-uh\xfc\x9e\x96\xdfm\x1d%sR\xcc:aN\xa1F\xf9kJl\xb7\xffU\x8f\x1f]s\xd1M\xcc\x92\xc6m'\xa6\x11\xde.\x9b\x95\xfb\x9d]3/\xcf\xd8{\xf5q7k\xb7mK\xc74\xa5\xb1\x1bv\x1aI\xae\x0b\x85\xf6\x88\xaeZ,\xe4Azh`Ce\xfbk\xe8k\xa2\x14\xbf\xf9\x14G\xa68Xr\xfb=\xd1\x10\xee0\x82\xe7\xc43\xc2\xf7=\x1f@j%\xa9\xdf\xd7\xe6P\xec\x1f9KnNA\xf7\x96'Ga\xe8\xca\x9b\xdb\x99\xe8\xf5\x81\xa0i\xff\xcf\xe9\xfbwc)i\x08\xe67Re\x01D\xd8\xdf\x9d\x83\xda\xcc\x81\xea\xfd\xf9w\x03\xe9\x02`\xe79\x89\xc9\x8b\"\xf4\xd9s\x12oow\x0d\x01Q#\xee\x83\xd6Y\xdc!\xb3$j\xdc\xfdR'\xc3\x1f\xcfy\xb2\x82\x19\x08\xe0g\x9f/\x12\xf5\xd5\xa5\x1ew=\xdeb\xec\xe1\xd2\xb5\x1e;\xcd\xf6,\x95c\xadg\xe0\xe4\xbb\\d\xcbn\xc9*.\xfa\xec\xce\xb5\xe7\xa0\x01\xa8\xf4\xf3u|\x19D>\x1a\x9eO<\x1e\x8f\xb2\x84Ko\xb2\x1e\xa6N\xd0\xaaM]\xa1<\xba\xf0\xc0\xda\xea@\xbfe\xf3Kd\xab\x10`sn\xca\xe3\xe9\xc1\x03\x12\xa0\xdaq\xf8\x06\x13\xdc\xb4\xa3\xaa\x85;\x1b\x88}\x8b\xcc\xbe&\x17\xad\xd5\xe0\xb8\xb1N\x9b4+\xaeZ\x84\xe1x|N\\)'\xe4pG\xa1M\xde\x00{\x0f\xf4\x0f\xc1\x8d\xeeX\xc4\xf2\xc5MD\x11\xd2\xad\xc4Y]\xb8\x1aD\xec4I\xe5]\xa1\xab\xbe6$\x93\x1d\x90\x18\xb5\xdc\xc9\xb8\\\xeai)\x8f1RcK\xb7VbH0\xa9,\xdb/\x91\x0c\xbe\x80e'\xca\xe2\x1a\x1c\xaf\x039\x8b!\xd6\xa3\x16\xf2*x\x03_W\xcfr\xd9\xd4JJ\xf1\xc9&\xa4[\x03E\x01\xb5f\xd9\x81y\xaec\x0d8.\xf3\xca\x8au\xe2\x01\xd9\xda\xaaC\xb6\x926u/\xe8\xdfl\x7f\xda\xb6Fs*\ne\xb1\xd6\x05\xa8\xf4\xab\xa4\xd7\xd66\xed\x1c\xe9\x05\xb6\xc5d\xa5KA\x08\x02\xbd\xb7~\x02\x9a\x06\x1a\x85\xdc\xa3\xed*I+\x1ee\xcbv=\xaa\xae\xaf]1f\xd3n#\x10a\xb5\xdc2C\xe3-\xea\xa0i\xf5\xd32\xaa\xaa\x82>\xdf\x8ej\x0c\xa2~\x9a\xc7\\\xc1\xb0[(3eb*\xdd\x11H \xa99?,\xbbdl\xa2zZ_(\xfc3u\x05\xcd\xe2\xcd\"M\x9dC\xea\xad\x04\x17f5\xce\xe9\xc9\xf1\xc7\x93\xb3\x8b\x97\xef/\xde\xbd?\xbb\xf8ptzzq\xf6\xe3\xeb\xd3\x8b\xf7\x1f/~}\xff\xe9\xe2\xe7\xd7o\xde\\\xfcpr\xf1\xea\xf5\xc7\x93\x97\xce\xed\xbfi\x08K\xeaR\x11\x15o\xb9\x1e\x0d+\xc0\x85\x1f\x94\xe0q\xa0\xf2\xf2^\x0f\x8e\xdf\"\xb3\x90V\xa4\xf6{\x90\xfa\x15\x9c\xe6\xe2\xc7Z\xad\xae\x88K\xc7\x86\x1d\xc8\xaf\x90[\x10\xe9\x9f\xacq\xd3&\xc5 \xe5)Z\xa6\x1f\x92\x8cl\x8b\x92SiN\x01\xd2\xc8\xad\x9d\xba\x9c}0$Y\xb9:*#\x1c\xe2\xee\xd9\xb8\xe9K\xc2\xd0\xa5\x96\x94\x8b2\xf6\xab\x17,d3\x92!\x01\xc4\x03\xea\xd5\xd7\x99[\xbf\xa8 V\xe4\x10\x0c[\xbc\x80\x98=\xb7X@\x08\x90\xc0PDo2\xca\xdbb\xf7OI\xea\x96\xfa\xef\x03\xf9\xd1\xad\xc9\xb0\x16\xe0\xb7]7\xa9\xe0\xc6\x0c{\xf4\xa4b\x8fn-J4\xf7 .\x0ef\xe1\xb9\xe4~\xfa0>rEv\xb36\x80\xda[\xa1,\x8a\x1b\xa5Y\x90l\x9dl\xda\xed\xe5\"r\xbd\x08\xa6$\xefX\x04\xdf\x96\xe8\xb1s\x1c\x06!\x19X\xe8\x9f\x8a\x037\xd7\x01xg\xa8K\xb6\xd2n\xb7\x14\x87&\x16\xf9e9\x9cm\"\xbf2l[\x8b\x14\x12\xa1\xeaJ\x99oU$\xa7\xbf\xaaN\xcc\xe2\xd5\x0ei\xe1\xbf\xc0\xe7\xa3\xb9\xf7\xec\x02\\\xf5-\xaft5\xcd+\xd7r\xa4\xcf!-U\xee\xeez`nt\xbb\xd0\xbcE\xa0\xf8A\x9aoz\x8b\x90\xf6\xbaE\x08;n\x11\xf4/\xfc\xb8\xdap\xb9j\x81E\xc9\xff\xd8\xad\x9e\x12\xd7y6q \x82\xfe\x1fmRp%\xaf\xbe\x1f\xe1w\xb9\x13\x1c\x159nC\xa1\xf7\xbf\x8b\x9c:\xe8\xbe\x1f\xb1\x9c\xf8\xa6fT+\xc5@\x1b\xe2p\xbb\x187$\x07\x9d\x0ed*\x96QnE\xd7V\xac\x85]\xb1\x16\xaa'n(\xc5 \xa1:F\xc9\x8b\x032\xd1\xf2\xb9=G\xf9~ g;\xe7\x03\xe9\xdc\x16\xe644\xb8r\xa9\xc8K5\xd7\x00\xc2\x9b\xe6\xfc4R\xfa\x1efUq\xbc\x94S\xfc_&w\x0f6\x95\xbb\xab-\x9eK\xc9hZ8m\xec\x10Rv\x8c\xfa\xbfD\xfcH7\x92\xfc%\xf5]\xd7E\x92v\x10\xe3\x92\x9e\xc2\x07Z\xda(F%%\xe2\x96\xfc5\xafH\x9d\x1ar\xab\xa8.\xb7B\xa4o\xcd\x15o\x17\x995+\xac\xc9\xc0\xda\xe6\xf1\xb6D\xdbf3#E\xc9Yi\xc1\x89P2\xea\x82\xdb\x8e\xee\xa1\xafY)\xc5\xd8\x90\xfd\xff\x96\x94\xc5\xee.f\xcf\xe4\n\xf8]\x19\xe4X\xda\xf2l\xaeg\xa3A\x9f*v\xc3\xa85\xfd\x90\xf0\xa1\x9dQ\x04Y\xbfv\x90\xd6\xd6\xec\x14\x1cGgC8;i\xdd`\x99\x0dE-\xc5\xe7\xa4\x06\xa9\xbd\x86\xf28B\x17V\xc7\xaa\xe0bU\xd0\x86\x05q\x04\x12T\xd8\x0fQ}M\xf0\"\x9a\xf6d\xdffg\xa5\x95\xbeg\xaer+h_DR\x1d\xca9;\xf9\xe5\xec\xe2\xf8\xfd\xbb\xb3\x93wg\x16G\xacD]1\xc3\xd0X\xa2 \x8bg\x0e\x07\xb8\xcf\xae\xbb\xbcR\xce\xd5M}\x17\\\xc6{UG\xe7\x19K\xca\xfaP\xb8\xaf\x03\xcc\x1d\xa4m14\xdd\xd8\xfe\x8f_\x07\xa7'g\x17o\x8f>\xfe\xf5\xd3\x87\xff\xb7\nH\xdeq\x1c\xdbVCf\xf8\x16\xbc\x1dIp\xdb/\xd7\xcf\xc9\xea\"\xb4\x8f\x1aG\x14\xb5\xcd\x87v\x9c\x809r6W\x89\x19Wz0\xa5\x92\xa0\xb0\x9f\xcf\xe2\x1c\x84\xab\x97V\xe7wp\x0c\x0d\x0b\x973\xed'\x1f(6\xb5\x83\xf8\xdd \xcbn\x90\xb5\xf5\xe6B?\xb0\xe1=\xa9*\xddZ\x15\x0cC}\xcb{\x9d\xe4\x00Qc\xb3\"\xeav3\x99y=\xe8\x02\xf1,\x04E8\xf3z\xa8oIU\xad\x059$\xee\x1c\xa4\xb9su\xe4\x97\xc1cVC\xb2\x1eB$\x9e\xc1@\x86\xe3yK\xb3\xe5xE\xaf\xdd\x95y\xc0\x0b\x80!Y\xd5\xce\xfc\x18|\xf1\xad\x80\xb1h/\xabB:\x95M\xb8(\x11\xe8\x91\x04s\x17CBg\xcbs\xdd\xa2L\xd9B-\xb7\xb7\x07C\x12\x0b\xf2b\xad\xf9|\xed\x81\xc7E\x9c\x7f\x98\x8f]\x7f\xab\x9c`>h\x1a\x03zR\xbaUk\xb2\x89\xf5]\x980\xc2g\xde\xf9\xa0\xcdm>\xf8?\xd2\xe8}^\xfa\x0fi\xd2\xb5\xcdK\x17\x82\xf6\x00\xc3\x7f\x91\x95\\o=\x087<\x05\x9b\xe7^f\xfah\xb5\x84\x9c\xec\xd3\x81bA\xf6vLF\n7\x05\xe6\x92|!\x80\xeb\x96y\x1d\xa8\x98\x94\xf4g\xfb\x9eU'\xef\xdb\xf7?\x9d\\\x9c\xfc\xf2\xfa\xf4\xec\xf5\xbb\xffl9|\x89y\x00w#?\xe3\x1c\xae\xf4\xa9\xbb\x94{\xcd\xae\x11\xaf\xac\xc7E\n\xb1L\xed}\xcd\xeb\xc7\x13\xd8\xc3\xef\xde\xbf<\xe9;\xab\xdd\xe3\x7f\xd7\xfd\xdbB\xa2\x93\xfeT5\xe9IY\x93\x8em\xdbkV\x9bg\xf8-$a\x85\xc5w\x95\xb4H\xd4\xa9b\xe0\x05Qe\xd4\xbbm\xe6Q\xd5s\xcd\xe9\x0b<\xf8\xb0\x19b\x8f\xe1w\xf0\xc4\xde\xfcH\xbaBl\xb6\xf4O\xf8\x9bEt\xedA\xea\xadD\xd7\xa5\x9b'\xd4\xd6W\xb9\x17\xa8\xfb\xe1 \x86\xa7\xae\xfa-8)\xa5\xdb\xbb\xbb{ \x97\xde\xdd\xdd\xad\x0b\xb4\x89\xa1x\xb6_\x1b\xb4\xdau91\x85\xccy\xc7\x81\xbfV\xb6\x1b\x86\x17&\xd60Z$\xe6} \xa8\x89H\xa1\xb7\xb4\xb3\xe7\x82^i*\x89U\xc7FV\xbfu\xa0*x\x0fN \x11\x15\x0f\x81=.N\xde\xfd4%N\x9cp?\x87^ \xe8\xe4\xe7\x93\x1f>\x1c\x1d\xff\xf5\xe2\xf5\xbb7\xaf\xdf\x9d\\\x9c\x9e\xfd\xfa\xe6\xe4tJ\xb6&\xd5F\xd4FJ\x8b\x0b\x9b\xdfE\xa4\xd8\x1b\x13M\xfa\x8e\x8a\x0dL\xb5\x80v\xb9j\xdd0\\?Z\xbc.>\x9d\xcb@\x01\x1b\x88\xf1\xda\xba@\xa1\xc2\x14\xa2U{\xe0k\xd7\xde#\xf0\xe9\xd1y#+\xf8\x9c\x0e\x9e/n\xf1\xbd\xa4\x1f\xd4\xba6\xee\xcd\xf3 \x06\x15\xd8%\xb8\xd8b\xb3\xf8\x1c\xb8\x0d\xbf~G\xda\x8f\x1d\\\x83\xf5n_k\x1e\xbd9@?(p\x97C\xb2\x1e\x0cH2\xae\x07Sq}`\xc3\xf2!\xf8b\xca\xa4\x1f\xa2\x96\xb1\xd3O\x0f\xbfJ\xfa\x91*JTV\x9dT\xa8W\x1f\xdc.\xd4\xbd\xa2\x8a6mM\xfa\xc4(#\x06w\xcd\xdd5l\xfa~\xa5TOW\xfd\xa0\xc57\x16\xd0\xfaZKW\xf5\xa5\xdb\xaf\xbeH\x8a\xcf;\x98Z\xd2\xca\xd8\xb6\xe7\x96k\x9c\x0d\xc8V\xc3\xc7[\x0cV&\x80\xf8\x90\x05.\xcd\xf5\xc1[[|.\x98\xf5\x8d\xa7\x0em\xd7]Y\xdc\x96\x13\xbdj(o\xf1vG\x88\xc5\xe3]\xd4\xb9\xa55r\xc4O\"\xf3A\xc6\x84\xa3\xb4\x8c~\x90Q\xa9\xa4\xd4\xd0\xb1I5\x94\x17|_\x07\xca\xb5\x8c8\xac\x1f?V\x13p+z\xa2\xf3*\xdc\xa2d\xd7PV\xa7\x96\x8bs\xa5dW\xf7\x89\x99*U\xbd\xba#\x80P\xb5\xa5\x9e\xeeU|h\xee=y\\'P\xe68\xe5\x13\xcb\xfa\x1a>9}Y\xdf\xbe\xa2w&\xf5\xea\x96\xaa;\xf5v\xacK%\xfbzO\x05Z\xaa9\xce\x14Xd\x17\xbb\xd2\x07\xc7T\x7f`\xb7\xf2\x97\xe8\xca/\x15H\xcb\xe5rS:\x7fU\xd1 M\xdf\x15\x18u\xc8\xc8\x01 \xc5\xbe\x96:\x89xX\xe8\xc6\x02\x85\xbb\x0b\xe9\x94Z\xaa\xf7(\x12^*\x97Wbf\xd5c\x0d(*B\xf5\xa9\xa2\xb5_]\x82\x17\xcd\xb1\xbbB\xe9$\x8fGi\x96\xe4^\xaf\xebALM\xcb\x88\xf3eq\xf7\xeb\x89\xad\x9c\x06\x19;\xbb\x89YA\xf4\xcb\xbc@i\xc6\xd4\x92\x8d\xd0\x8f\xcd\x8c\xca%l-_\x0e\xdb\x0f4\xf3\x96\xd2\xffZ-?f\x91\x1fD\x8b\xb2\xedH&h\xd6\x80\x03#<\xff\xa3\xf4\xb9\xa5\x15\xeb\xb6&\xb5\xfcW<\xf1\x98\xbc-\xa8dk\xc1\x9f\x18!d(\n\xb9\xa0\xc6|\xb5|\xb5>j\xa9\x80,\xdf'r\xb1\x16C\x9e)\xafOJi \xef\xc71\x0d\xc3K\xea}N\xeb\x1f\xa2ah4\xe3\xe7 \x0c?I\xa4\x0c\xddi\xac\x0c\xabZD[\xe46\xab%z\xbd\xb3\x1c\xed\xe9\xc5\xf66\xbaV\xb2\xd6\x85b'\xdd\xe9\xd0\xb8\xf3\xe9\xaf\x83G\x14\xe6U\xe3\xaa\x14}\n+\x11{!\xcf\xf61\x1ce\xe8g\x0eJ\x82\x0b\x96\xc9\xe5%\xbdl\xb5|\xc6o\xf5\xbeS\x7f\x14v\xd9r\xb7X\x89\n\xc1\xfa\xd8x\x1f\x07)\x04\xbe*f\xb7\xe5lv\xbd\x96\xb6-\xcb!\xd08\xa8B\x08I\xca\xd0F\x13\xfafD\x86%1LV\x97\x1ay\x1f\xf6\xf2eF6\xe8\xf8\x87\x9d\xe9\xb3tl\xb2\xeb\xb6N\x05\xd2\xb8!\x91\x1e\x06b\x1eD\x99-\xa0\x07\xee\xaa^?E\xd4Vl\xa5V\x9b\x83#f\xed\xda>o=\x0e\xc6 \x97\xa4\x91K\x07u\x1c\x86\xee=7o\xd9\xf9\xa0\x96]\xadC#\xa7\n\xdd\xf0\xc1(Y/`2\ne\xaa\xc2\xc2\x83\x016\xbeV\xba\xb2\xc9bo\xed\x808\xa2\xd2\xeb;\x0fu\xdbZ\x0dn\xb9\x1ao\xb5\xf8\x8aq\xd6\xe3f\xa7IZ4_\x83\x12\x83 \x8a\xb8@|.\x96\xe1v,\x87\xa0\xc7\n\x08\xf4\xa4\x07\xe5<\x0f\x86\x15\xc1~\xa1\xaan\xce4\x90\x0543&\xdc\xb5 \x03\xd7\xca\xe5\xbd'\x90\xb78\xecQ\xcf\x18\xa4\xa1flp0H0,b\x08\xe6\xcd\x81\x07a|\x95|\x02i8\xdc\"x\xe3\x93\xb7\x1f\xce~m\xbf>\xb2,hI\x85\xcc\x11\x15\xdeD/\x92*\x81\xbe\x0cB\xdf\xa0\xd2\xb1(\xde\xc8z\xec\x1f\xd2\x8a\x187\xb3\x15\xb1\x9f\xa5\x03\xbd>\xbfi\xf4+\xa2E\xf0\x96ov\\\x02d\x8dmc\x97\xdcII\xbf\x87q\x8c\x0f\x1e\x90\xad\xac\x8d\xa7\xecs\x87\xd0\xc1\x92\xee\x0c\xdb\xef4\xf4S\xb9\xb8, \xbam\xe2\xa0mw\x07\x1d\x01\x05\x08\xe8w\x07\xd1\x9a\x7ff\xff\x99\xd3\xc4g\xbe\xe6\xa9A\x05\x00\xadU\x9a\x93e-!E )\xac\xd6\xf1*\xda\x82a\xd9\xb6\x08\xe8i51\xbf\x05\x1c\xd3W\xba\xa5\xd8\xa2&\xe1\xf9\xf6\x14r%\xdb&\xe3h\x95\x03\xe1\x92\x16\\\xb8e\x93\xb4\x84:p\x99\x8dE\xec\xb3\xe5/V4\xfd\xac\x10U\x9f\xed\xben3\xa7\x04\x1eVuM\xcc\xa3%\xec\x07\xf8\xdb-C \xc4v\xfc\x8e\xf9\xc1\xd6O5~N6 \xd1,9o\x0d`c\xf5\x14\x87\x8dKU\xd2\xb2\xf9\xd0\x18\xe3j=\xf2\xf4\x99\xb3Q\x83\x8c\x93\xa5w\xabL=\xfb\x8d\xa4AM\xca\xc6>\xa5\x81t3[6\x8f\xe8\xe8\x0c\x8d\x1c\x19\xa8\xa1\x0d\xa1VC\xf0 \\\xb5\xf2rpl\xac\xb6\x82\xa5~\xba9K=\x90\x1f\xc2j\xd5B\x8f\xfd\xcdj\x15g\xbe\x1d\x89\x96.w\xbf\x02\xdf\xdb{\x0f\x13\x83\x1d\xeb\xb5n\x80`7;\xd4_\xab\x0f\xf3\x81\xd1H\xaa_X\xf7\xaf~]Q\xbd\xef{\xe5\xceM\xa1\x9e\xe8T\x1b9\xd9\x86\x84\x95\xdeCyP\x011\xc7@I\xaa\x9f\xaa\xa4b\x1f\xe4\xd9\xf0z\xfe\x8e\x89\x0dJ\x93\x9b>\xfb\xb2P\x8e\xc1\xdayH\xe6ME\x80\xcc\xb0\x14\xab\xc2\x0f\xcb\xfb\x11M\xc7\x97\xce\xa8\x0f\xac\xa7\xe1\x97/\xf6\x83\xee\x10\x1f\xa3\xf2;\xd5\xd9jO\xad\\;\x99M\x94 \xb6\x1b\x95>SPk z\x0f\xd0a\xfdI{\xe2\xb8\xc8\xf4\x97 0\xc2\xde\xa6\xa2\xbb\x16\x16i\x08\xbc\xcc\xd6\xa4m1\x17D\xc3\x81\x0c\xd2\x9b\x83\x11\xb8N\x9dJ\xd7[jF\xab\xf7\x04\xc1@\xd5o\xd3\xbeX+\xc7&\x9dW\x11\x10\xe2\xd8\xe6\x1d\x88\xc0\xd5#X\xe5\x03\xeeW\x9f\x1cJ\x17\x98\xb4Ji~\x94\xeb\x1b\xbc\xa6td\xbb\x9e=\xa6\xd9Z\x07\xfe7\xfb]\xe1r\xa1\xb0\xbdGq\x8bw(\xeb\xf6\x80\xf8h\xe3t\xc9\xf3\xb0$K\x8b\xad\x13\xc3\xc4\xa0\xb9\xa25\xf3\xa1\x8c\x82\xacg\xb5\"\n?8 \xd2\x8c\x03\xda\xe5\xbb\xe1\x90x\xb0\xac\xb6|\xf1E\xd1\xa3!\x99\x03\x9f\xde\xbe{\x86$&\x87\x9a7\xeb$e\x01\x91\xd5\xdb\x1aI\x9d\x19\xb8(ab\x17\x81\x95 \xb6\xd5\xc57\x9b\xb4m0$\xb4\x10\xea{\xe2E\xcb$\xe6Cc\xe5\x1e`\xa6=-$\x909\xbb=\xd5O*|Y\x0f)My,5\xd0f\x1fb \xe1,\xect\x93\xb5\x08\xc6m \xcc\xccVii\x11\xb5]dHGo\x0f\x1e\x90\x89r\xa4+\x1d\xc6\x14\x85\x93\xd9\x8e\x85p6\x88\xb1\x03E\xb2\x08\xfc#\n\x88sF~T\xb9\x84\x13\x19\x132%;\xcfI^\xf1\xee\x96\xb7\xfb\xc5^\x1bf\xd9v\xb2\x89\xbbtH\x1c=\xe5\xa6'\xc2\x94\x1c\x92T\xea\xd8H\x8dE\xb9\x1c\xa6$\xbd\x05e\x85\xf8\xbf\xc1\x96#\xbakn\xa1y\xad\xaf\x87\x87\xda\x13A\xdfe*\xb0\xf1\x0f2d\x9b\x1bV\xee?d[,8\xd3#\xda\xe3O\xa8%\x809\xbc(\xf4\x02\xbe:\n\x91\xe0\x90\x845\x19\x81D \xe07\x0b\xc9(\xee\x03p\xaa\xc0\xd4\xe6\xa8\xa0\x8a\xb0@\x15\xd9P\xb7E\xe2\x95\xd0@\x15I\x15\xef}\xac\xcb\x06\\\x18\xe8\xa1\xec#o\xbf2\xc2\x86L\nO\xc2B\xe9Ut\xbf\x1fv\xb24\xe8V\x18\xaa).iEU\xd1m\xc8g\xbb,\xb7\x1d\xc5\xd9\xa4\xd7s\xe2.]\x10\x95\x0f0\xf2URb\xacMP\x9a\xd9\xa4\xc8\x1d\xca\xac\x1a5U%\xa16{Y\xf1 r\xaah\x88\xbb@\xd7OS\x92\x8d\xb9\xdb\xd6Ou\x1a\xbb\xa5\xd9d\x03\x896\xef'\xd1&-\xb2\xba\xd6\x90\xac\x9a\x18\xc4\xc4\xdd\xc5\xfc\x95:1fJ\xcd{E\xdbT\x8bm\xda\xddp8\x0d\xc5\xf0\xfd\x1cdK\xe9]@\x1c\x01!\xca\xa2\x91\xdeR/\xb4\xe2\xfe\x9c+\x1d\xe3-c\x1b\xd8\xd9Y\xf7\x9fy\xb9\xfb>i\x8az\xda0\x08\xeb\xc9\xcb\x14\xc62\xb2\x11\xee\xddZ\xdc\xb7q]4P\x95\x14\x16+|\xd1F2\xe4c\x85\xf4T\xa7[VS\xeb\x95\xafx\xba\xaf\xb8\xd0iA\x06N?_\xc9<\x88h\x18v}\xd9\xec\x05\xca\xf5\xea\xa7\xd5\xf9\xec\xad\xdb\xdf.*\xd5\xdaA\xcc\xd0\x0eb\xa8v\x10+\xb5\x83\x9em\xc8\x16\x0f\xfbI\xb2h\x96Qo\xf9\x91\xcdos\xa2.X\xf6!\xbf\x0c\x03\xafp\x94f\xe9\xb9\xe6\xf2#\xcd\xe5Ov\xda\x18w\x194\xa7w\xedn\xa4\x14\x99\x0e\x0e\x80=\xd3\xaf\xe4\x8f\xaf@I\x8b\xb7\x81\x0c\x04\xd7\xcbv\xc7g\xc8\x98\xd8\x06D\x05\xd5\xb3\x8d\x07||\xc6\xce\xfb|W\xcdl\xdf\x8d\x7f;\xe1s\xf3~\x10\xcc!*)\xe3B9\x86[\xdcQ\x15\xa8\xae\xa6\xae\xa6l+j\xa9\xacPbS\xf9\xfa\xb5\xaf@\xaa1\xb0\x1b\x8fQ/\xcc\x8d!L\xedc\x02\x96\xf0\xb4\xdf\xa6\xb2\x93\x19\x88\xcd\xaa\xc56R*X\xdd\xc9\x96a\x82\xd7l\x1d9\xcd\xb2no\x17\xc9_\xef\xde\n\x94\xb1<\xbdY]rp\xc7*\x7f\x8d\x057\\ys\x9dD\x8c\xdc\x98\xc9U\xed\x00\xba{\xb23\xd9\xd9\xc3{\x95\xfc\xb3Z*\xa3s\xf2\xa4:\xed\xe0W\xf3\x7f\xffo\x9dy\xeb8\xcc*\x04\x0c\xa8\xe6\xcd\x92s\xd8=3~^\xc3|\xe0\xb3\x1dkmy\x01X\x0f\x0cp\xab\x91i\xb1\xb2\x95V\xb2\xcf\x1b\x9d\x90F4\x9b\x19\xc7\xf2\x0e%;0_\x12CR\\Y\x19\xc1\x12\xda\xf6?\x18/\xb53^\x86^\x0e\xb7\x9a9\xed\x0c\xa5\xa9md\x1a\xdf\xba\\\xda\xddvG\xb8\xaa\x0e\xd2\xbf\xca\x04\xd7\x16\xdc\xd5r\xda\xe3\x96\xb4\x08\x02m\xbbS\xd6(\xc5\xd57@-\x8e\xd3\xbf\x891\x17\x1eb\xe4I\xdd3\xba\x0e1\xf2\x14\xb1\xe6*\xcd\xad\xf6'\x0d\x07\xa79x\xa4\xaa~\xbai\xd9\xacd#\xd5S\xabb\x1e_\xfc.6E\xd8D\x12p>%L9\x8f\x0d~g\x10\xef\x97\xaa\x1a\x87:_\x90\xaag\xfc4\xa3Y\xe0I\x1e\xca\x10\x0f\xe5);6\xa3\x19\x9b\xf2\xd0\xbc\xb4NP\xea\xe5\xb4\xd5k{\xd3\xdd\xa9\xe0\xe2\xcb6)\xe5\x8a\xb4\xe3\xb4V\x8b\xa4\xea!\xa8v\xac6EN\xfd*M;*5\x0c2\xfaUX\x1f\xa8\xb6\xfa}\xa6\xa9\xa8\xda\xccW\xc1J\xed\xcfV0\xad\xe6\xd9\xb2\x8a\nP7,\x0d \xc03\xaa7\x18\x12>\xa6\xbe\xff\x81\xf30\x88\x16g\xdc\x0dk\x18\xe1^\x1c \xef\xee>2\x10\xbfD\xfa&\x14o#@\x8a\xb5\xcf\x9a\xe7\x0d\xa9\xc5\xb8o\xe1Q@\x15\xc6eD\xd3|p.\x0eH\xb6L\xf8\x15\xacjA\xd8I\xfd_\xe7\x98F\x11\xcf\x88\xc0<\x84\x12/\xa4iJhJh\xf1%\x07\xc1\xee\xea\xd6\xb8\xd0\xb5\xca\xca%/\xce\x83\xea\x92\xa8\xce\xa1\xa6\x9bM\xf3\x14X\xd3\xac\xdb\xe6G\x9b\xbb\xd4\x10\xfb\xb0R\x9dB5Z\x81\xaa\x8e\xe9-\xf2\x97z7\xc6A\xfa:\xaa`\x17\xe0\xdc\xea\xb5\xe3\xb2\x19\xbcE\xd5k\xb2\xf6\x9en\xd8\x1c\xa3\xea\xba\xc3w\xbc-\xb5\x0b\xa1\xceU\xb5a{\xcc\xea\xdd\xa6\x1e\n\xde\xa6S\x96}\xab\xf6\xe8\xaa-m)1\x88\xc9a\x9b\xa8\x81\xdf\x07j\xb0\x9c\xc5\xfb\xb6\xb3\x189\x8a{\xac\x1a\xe4\x0e\xb5f\x87\xfa\x8e\xfbu\xa5\xc5[\xdb\xad\xfa|%\xf5\n\xab\x83jbbjb\xe2j\xa3\xbb\xcd-\xad\xbeb\xa8\xbc\xa0\x08\xfcc@\x1e\xc9\xf6v\x93\xf8\xaa6\x91\xa2\x9d\xdd\xd4\xf0R\x0b\xec\x1d\x02\xec\xd9\x88\xad\xe2\xecfJ B\xa5\xf1\xb9m\xe2\x10D\x0bW\xfa!\xa8\x93 m\x14|*\xfb\xc9\xaf\"\x96\xbc\xe4^\x0e\x12\x0e\xe55\x89\xaf@HfSb\xd06\x0b\xe38a\x1e\xf5\x96\xacP\xe5\x967P\xdcEn1\x9b\xf2\xc0\x9aT\xb7FX\x1d\xca0^\xceo\xd7{\xde\xd6h$\xc6!\x17\xbd\x1f\x8d~\xbb\xdecNm\xaf\xd5\xce\x02\xab\x8eW\xf3\xf0\xef\xaf\xc4^t\xdb\x1a\x04\xba\xadQ-\xda\xea(\x930\xce\xa3\xea\xd8\xd6j/qK\x8d\xda\xa0\xf7\x82R&\x15b\x03\x0f\x1b\xc0Q4\xea\x14\xb8\xc0\x01\xe7\x19J\xd0\xba\x07\xd1]j\x99\x99\x91Y]k\x86\x07\x0eP.\x06\x86\xf39\xe1\xcfI3\x80\x1d\x89\xea\x9b\xb4\x12\xb5{G\x1a\x03e\xcf }\x0e\xbfh\xb5t\x80\x96~N\"2\"\x01\xf9\x9e\xec<\x1f\x80\xbc\x8bU\xaf\x91\xa2\xd1\x08-\x16\x90\x11\x89T1@\x04\xd5b\x01ZL\xef\xfe\xe89\xc9G\xa3\xe7v^\x1dB\x02\xb71\x8dHK\x1b\xad\xb0\xac$R\x15\xa5\xff\xa9 a\xae\xb3j\x0b\x83\xf4(\xf2XZ\xa5\xc8m\xa7\xacm\x89$\xc9lr\xbe\x89\x96W\xdb\xdc\xf5gIk\xea\n\x06\xea\xb5\x88\x08\xda8\x07i\xe8\x88\xec\x0e\xbcS\x05\xd1\x01*\xf1v\xa6x\x1c\xb1\xeb\xec4\xb8\x0c\x83h\xf1\xdcJ\xa7\x93\xda\xc5X\xa6\x14Z\x9e\x14\xd6q\x12\xe9\x0e\x86d_2A\xe3H\xab)>x@j\xf8\xcc\x80\x90\x11\x0d[\xbeJ\xcaE\\\xc7 \x16c-\xfd\xb4G\xe0\xb6;\xd3\x94\x04\x981,=\x17\x8d\x9e:A\xe1U\x0fx\x1c\xab\x9d[\xcedVWa\xba\x9b\xa8\xe2vD\x81\xc0\xd0\xb7\x15q\xdc\xcb\x85\x8aEj\xfa\x08'\x07\xf1\x1bL\x19h\xb1:x\x16\xef\xcb\xfafqJh\xf3\xb0\x15\x83\xd7\xb5\xd7 (\x02\x07)\xd8\xce\x04\xd1B\x85M\xb4\xb8\xa0k\x9b_Qfv\xdb6\xf2\xf1<\xcc\xd3%\xb4\x82)-\xf4T\xaa\xa1\xf3\x86\x04Gv%+\xbb!e0\xc9`\x08\x85A\x17m\xee\xd6<\x91}%W\xcb d\xc4\xadKT\x8cX\x82 \x97\xe1\xe4E\xa5n-b\xe1 \xa1\x81\xc5Qd\xce\xf8\xf9\x90,\xc7\xcaC\xd7\x99\x9a\x03\x97U\xa6C:\xb53\x87j\xd8\x18;\x1c\x17\xc7v.\xde\xa6\xa9\xd1\x18&lu\x18$Du\x81\x18\x19\xf5\x01h\xde\x19\x96M\x06n\xb1\xa2\xaa!\xf8\xc5qv\xc5\x8f\x92\x05\xf0\xb5\"\xa7\xe2dx\xad\x1c\xefW\x1b|\xc1\"z\x192\x7f*0d5\xa7:\xc4X\xdc\x95\x9f_\xbf{\xf9\xfe\xe7\x8b\x1f\x8f\xde\xbd|s2%\xc1\xd8\xa3\xd1\xa7\x94\xbd|\xff\x96\x1c\x92\xab \xf2\xf9\x15\xc1\xca\xa5,\xfb\xb1Vy\xbb\xe4\xa81\xe1bQT\xc7\xa6\xf1\x85\x13\xdd\xb1\xce\xaa\xd5\x10\x88Sb\xab\xb5\xd6 mV\xdar\xfc\x96U\xb7U\x9a%4\xfeAJ\x1faQ\xf4\x13V\xeb\xdb\x0drH\xf8X\x06\xf0W\xb1\x89\x96\xa0Z-\x0e@\xa8N\x124r\x99\xb1\x81\x16\xd7v5\xe8X\x892o\xdb\"%\n\xbd\xaf&\xadx\x14d<9\xf5\x12\x1e\xca\x88\xe8]\xd3\xaaQf;\x94x\x98\xeb\xb9r\xad\"\x8e\x9b\xbeV\xdb\xda$<\x8a\xc1\x97U\x0c\x89\x93B#\x1dD\x8d\xa2\x8aN\xcc\x11\xe9)\xd3(\x17T\x1b\xd1$0f\x0c\x86\x06\x02\x05\xb4\xc6\xeei\xb7\xcfI\xc7U\"\xce\xf5\xedr\x81\x1eF7\xf18a!\xa3)so+\\(\xde,$\xd7\x12RoEr\xf5S\xc1.\xc4`?K\xe4\x067\x1d\x86\x0eY\x91q\x88\x8c\x03\xc4\xc5\x8a\xe9\x82\xfd\xf2~>O\x99\x0c\xd82\xf6\xb5\xc6\x82\xfe\xa1m4\xe4:z\xc3\xe6\x88\x00\xf5FW\xf5\xeb\x06U\x9d\xf1\xaaX\xf0+\xc1\x82\xceC+;\xbfm\xa9\xf1O\xd5_\xb7\x9a\x89\x92\xf8\xdd\xaf3\xaa\xea\x9acb!~\x1b\xd7\"\xed\x81\x16\xf6\x9e\xe0\x91\x16&\x8f\xeb\xf5\x84\n\xbe\xde\x1e\x0f\xa7\x97q\xbe\xc9\x10B\xd0q\x10\xfd7\x83qi\x8e\xef\xcb\xf7ou\xfc\x8d)I\xda OVqvcT\x9b\xb7\x02\x0b<\xf3!\xcc\x17A\xf4c~)\xb8\xdf~\xc0\x9f\xb2 L\xc5\xd9\xde\x05~\xb2\n\xb2\x8c%S\xf0\x9bg\x05\xfd\x11t\x88\x8a&\x87m\xb0\x05\xef\xe8\x95P\xd5\xf5\xf6/\xe0\xbc\x1e\xd7\x99\xa6\x00g\xb1\xa8e-\xa9\xb5\xf7\xb4\x9e\x9eV\xd4\xc8'\x8f\x9e\xd6\xd5\xc8\x15\x17\xb6[\xff\xbe\xd7-\x03\x01\x8e\xe0\x94\x85r\x08_G\x82\xd9\xa5\xf8\x98+\xd9H>N\x80\x16eE\xa9\xea\xc0c\xf1\xb9\xcd/v\xca\x7f\xb4\xbc\x97\x8e\x0b\xa2\xaa\xc3&\x92\x8eK\xa2\xce\x85X\xe3\xbd\x0c\xad\xea\x02)+\x1dP\xa9\x1f \x94S\x17D\xddu\x04\x94\xa4\xa8\xa2\xb0.F\x9da\xc6\xad=:\xb6\xd1w\"\x9e\x05\xf3\x9b\xa30\xc4\xbeU\xed(*\xf8B\x98\xfbv\xc9W\xbb\xe5Aa^Pk'\xa8Q\x94\x94Ldx\x99D\x8c\x14\x0c-\xd5\xca\x86\x8e\xef\xd5\x06\xc1\xab\xad\x83z\xc5\xb7\xb2A\xc0:\xdf\xf1\x9d\x8d\xcd\x12Z)l\x9b\x81\xc1&\x0d\xae\xf8\xa8n\xfb\x18b\xa6`W\x18hl\x11\xed\xca\xba\xa1\xc6]y\xed\xcd\xae\xf3\x82,\xc5>7\xb0.\xcc&\xcfR.\xbf\x12\x91%\xee\xdc\x14)\xa4C\x12\x0f\x86$\xa8\xf2\xee\xf3\xba\xe1\x15\x14\xbf\xe3\x01\xd6\x90\x05*]\xea\xddz\xdc\xa7@\x1dl{\xa8\x18\x8f\xb6h)\x94\xd78\xdap[*\xa8%\x96\x8d\x98KO\xe6\x85\x90\xe0\xc1\x03\xe2\xa4\xfa\x80\x01\x85/M\xb9\x8a\xac-\xd71\x8f-\xc8W\x8cZ\xf3\xe8l\xce\xeb\x82e\x928N\xa7$'\x87=N\x00\xcd3\x16tt\xd16u}\xff\x91F\x8b\xd6\xa0,`\xdb1\xce\xd8u\xa6d8vP\xb8\xb3\x1d\xfby\x1c\x06\x1e\xcd\xac\xd7\xb5 \x84\xaa?\xe3\n\xcb\x9dI\xb7\xa6C\x92\xc8\xd3\xca\xff\x00\xbb\xcd9\x89|@\xaaI\xe6\xd8\xb9=-rK\xcc\x16\xb6\x9e\xb9-\xbc\xa1\xf8VC\xed\xcf|X\xe4OA\x03\xa5\xe9\xf7\x95\xe0\xcc\x1e\xe9\xc2\x07\xc4\x98$\xb9\x12*\x84\x8dX4H\xb2mh\xe5-\xb1`\x9dv\xd4-k\"\xe6\x174mz\x86\x05\x95\xf3M#o\xc9!\xdep\xd7tKH\xb9,\xed\xb0\xd2\xb7\xc1\x9c{y\xda^iP\x02v\xd5\x99k\x7f \xb0\x86\x8f2\xd7\xe6\x91\xb0]$\x90\x8fa\xe2\x0b+\x80\xe2\xeazH\xf21\x8b\xfcf\x06>\xf9:XC\x9f\xd8=\xa8\x07\x00\x82.!b\x98\x04P\xb723\xf5\xd1\xaf\x8cpu\x14\x07\xe4\x90\xec\x10A\x04g\xfc\x14\xd40\xdcA\xe7~\x0eA\xf2\xee\x85<\xd2h\x02\x1f\xdfPa\x15\xf1]p\x06\x12e)\xec\xe8P\xedh\xb7>\xc6C=\xea\xaau\xf6\xe5\xe8)\x0d\xa7z\xf9\xd0,/^\xcd\x99R\xef\xd5\xae\x87\x9bt]\xf0\xbb\x1e\xd9&-\xee+c\x13\xadV\x90)\xde\x9bX\x0c\x06\xe03W\xb94\x8b\xf5\xf0p\xbb\x03#\xad\xd2\x14\x8f=\x1e\x864N\x99%`k_\xf4\xe6\x8bs\x83L\x89\xd7\x81\xe6\x04\x9c'\xd0W\xcfu\x8a\x90\xf3\xa9\xf5\xb8\xear\xb52\xd4\n\xcb]\xe7V\xf7icX\xbagbQ\x90CIL\x00\xf2\x801!\xd3\xe2\xd7\xf7\x05\x8c+\x01X\xe4\x0f\x15\xa2\x03\x08\xf0Zi\x94\xd5\x99,\xf2\xc1\xd4\x14?\xd9d\xba\x9c{\xc7[\xd2\x84z\x19K\x1ci\x19\xce[\x8e=^\x14\x16\xcb\xa4R4!\xa3\xa2\xb8\x18\x1a\x8c\xeb!=\x84\xb0D\x1d\x1b\xc8)\xd3\x86\xc8\xf4Q\x81\x1eN\xf6\xa5E\xd4\xb9\xc1f\x81;8\xef\xdc\x86DI\x1d\xde\xd2l9^\x05\x91[\x0e{\xc7G\xf2\xaa\x93\x03=\xad\x94L\xcd\xca\xe4\xf4\xb6\xa9\x95\x89\x035\x1a\xb3\xebL\x94\x7f\xf0\x80P\xf2=i\x0d\xc7C\x0c|\xdd\xe2\xa0\x8d\xa86Ri\xff\x92Z\x01\xed\x9aJZ9\x15\xb4\xd6i\xc7xx\x1a\xd0f7FTo\xc1\xe9\x87\xd7\xa7\x87\xf3\x0d\x11\xa0~\xe6%\"\x0c\xe1L\x15\xe8\x9aK\\=\x04\xc7Eb\xc1\x1f\x85!\xd4\x96\xba\x10/\xe8{\xc0 n$\xb8\x0c\xf9\x959\x00\xcb\x99q=U\x91\xa7+\x82\x8d:\xd7\x08\xb6\x91-\x8a\x1a5\xe1\xc2{b\x1d\xfeN\xb1>.\xc5\x93\xb3\xbc\x11\x13T$\x17\xdcKbWB\x00\xe1\xfdx\x1e$\xa9t\x91_(\"\x18I\x95\x82\x9a\xdb)\x12\xb1\xdb{n\xff\xa0\xdd\x16\xca\xd4\xa0+\xf5\x1a+\xea\x86\x8d\x82\xb2\xad\xa5\xeaCuH\xff\xd4\xfc\xd5\xdb\xb3G\xc5`-\x01\x9cl\x18\x9f\xed<'\x91\xb5'{\x92\x13,\x88\xbf6\x1cJ\xc1i\xed6\x89\x80\x1bQ\xa4\x90Fr$ /\x94\xea$%\xdf\x9b\x86b\xf6\xad\x16\x81\x96)\"\xd3\xd4\x8f\\\xceS\x92\x91\x11\x12\xa6\x8a\x90FHi\xfd\x04\x851b\x05\xb8\x91\"\x07\x8c\xbb\xd1\xe0\x9b\x9a\x7f\xec\xef\xedX\x8c\xb0\x8be(\xd5\x9c,\xfc\xfa\x96b{\xb6\"\xb0\x01WVe\x11$%n&\x13\x137\x1a\x14\xfaR\xc6:\x13\xb8\xc2\xf1$\xf1\x98*\xbb\xb6C\x88f#\x93D\xb1)\xd9\xda\x92\xf1mhR(\xda\x7f\xe0i\xa0\xb9\xb4\xad-w\xf2\x84< V 1\x84\x0d\x15\x8d;\x0f\xdb\xa4c\xd8\xac\x17~\x80F\x1e< {\xe0\xe9\xa6\xc9\xdb\xdc\xa1}\xfd\xda\xa1\xb9^\x97\x899\x19W\xec+\xe0\xf2\x8fL\x8b\xe3e0\xf6\xd9\x9c\xe6a\xf6S\xc0\xaeD\xa6$;Pd\xb6\xe5nI\x17\x83\x16_Qc0\xba9\xac\xder\xaa\xd4)\xeak \x84:\x118D\xaf\xa4W\x95\x9c\xa5v{\x13\xe0\x1d]\xb1\xfb\x9dwg\x99e\xf1\xf4\xe1\xc3\xab\xab\xab\xf1\xd5\xde\x98'\x8b\x87\x93g\xcf\x9e=\xbc\x0e\x83\xe8\xb3\xd3\x94\x90!\xf0\xbf\xbc}#\xca\xec?\x8c\xe8\x8a\xa51\xf5\x98\xd3\x94\xa05\xf1\x12\xf5<\x16e?\xb2`\xb1\xcc\xa6\xc4\x91\xaf\xa3%\xbc#>\x9a\xa8\xe7\xe5\xab<\x04O\xd6;H\xb6\xef\x07Y\xb0\xb6d\x86\xc1\"\x12s\xff\x03MY\x18DL|O\xa7\x8d.U\"\xf6\xd10\xe4W\x1f\x19O|\x96@\x99\xf2\x15\x85\x8e\x97\xf4\x92e\x81\x87\xb7b\x15\x87A\x96\xfb\x966&\xf42\xf0^\xf1d%>\x04/\xa39OV\xd8wR\x0fn\x07\xb1Z\xb2, .\xf3\x8cI7\x88N\xe5\x1d\xabJ\xe7\x8b\xa5g\xc2\x8bw\x0c>\xcf\xf8G\x06\xc6\x92\x02\xba|\xc3`\x7f\x0fVy\xb6D\xdb)\xc6\xfcU\xc2\xfe\x91\xb3\xc8\xbb\x99\x12\xa7\xf2\x8e\xd4%\xf2?$|\x1e\x84LA\xab7\x0b\xac\x98\xcf\xd3e0\xcf\x14\xb4x\x1f\xa5\"\x01+p\xc9\xaf\xf1V\xb2E\x10\xe19\x01M\xf1\x8c\x1b4\xd9\xa3\xa1\xf7\x16\x0e`G\xffD\x1a\xe2\xd1\xb8\xd8\x0f\x1e\x8d\xed\x9b\xc1\x0b\x83\x18\xffN\x18\xc4\x1f\xa8\x18tG\xfc\x1c\xc54[Z\xca\x7f\xcca,\x01,\xc9\xd1\x91\xd4\xb5}\x8a\x02\xc1w;\x95w\x0c\x9e\x87\xb3#\x1b?\x98\xcf\xf3\x94\x1ds\xe9\xabsJ\x9cZ\n\xd2\x1b?H$go\xa9\x11\xbc\x9eZ\xf2\xd6\x81m |\xbe\n\"Z\xc1\xef:\xa9\x0d\xbd\xfb\xb9\xa5:|\\}\xbca\xcc_0\xb5\xb7\xf5O\xe4[,dkj\xed\xb8\xd4[\xfb\x81z\x9f\x17 \xcf#_\xd4\x05I\xa3\xcb\"\x0d\xab4\xc2'U\xd0L\x91m\xda\x04\x9b\x9bD4\xfc\xc8R\x9e'\x1eK?\xb2\x7f\xe4A\xc2\xe0\xa3\xb6<\xe4\xe3\xf3 \x0c\xd1\x0f\x88\x8c\xf71\xf5\x02\xf0k#\xdeF\\\xbeZjQ\xa8\x08 -\xa8H\xeew\xdb\xe72\x96|d\xa9\xacB\xfe\xb6V\xa1q\x99\xf1\x86\xc1\x86\x9c\xfb\xc7\x02\x13\x08P\xf12\x02\xbc`\x035\xba\x0b\xc0-\xfd\xe5^\x9e\x8a\x99\xc5\xfb\xc2\xa3\xec\x15]\x05!T\xc5\xa3l4\x877\xb4\xa2(;\x05]\n \x98\x06\xbf\xa3\x03\xa7\xc0\x8e\xfc\xff\xce\xd3\xcc\x04\x1eQH\xb2\x95\xc9\x12\x96y\xcb\xa2\x80|\xb5\x02\xdf\x84eC\xc4\x8b\x05\xf0'\x9a\x04\x12U\x00\xe8Z\xbeZ\x80\x7f\xd6g!\xc0^\xd9\x0eC\xa9\xae\x83\x0fg\xc2Wx\x06\xbe\xc3\xe7\xf8\x0e_L\xf0\xe4]<9\xbc\x89\x97\x8a\xfe\x82\xdf\xa3\x08'\xbe \xf3}\x12\xb0(\x03\xcc\xf0#O\x82\xdf\x05\x9f\x18\x16%y\x99;Z\x16\xd9=\xea\xfa\x89%Y\xe0YjZ\xabL[=\xe0\xb8\xdb\xd1?1\xa8\x84\xfa\xa2:\xd0\x12\x99K\x9a\xb5\x91\xd6RNo\xc2\xca;\x02\xbf\xa4\xd1\x02Ned\x98a8\x8e\xfc\xf5/S\xe2\xc0\xef\x11\xf5\xd7\xa3k\xac\x16\x91\xfb> \x16AT\x02sxG\xe1\x03\x9f\xf1EB\xe3\xa5\x85\x90\x0fVt\xc1L\x92\x01\x12ZI\x86 \"xU\x11\xbe\x86\x80\xd8\xf1X\x8c/\xeb\xcfx*\xbeJ?\xe3_\xf8\xbc\x87'?\xc2\x93Y\x12\xb1\xf0-\xcd\x92\xe0zJ\x1c\xf3\x15\xe9\xad\xcc\x16\x93\xfa\x06\xe4UE\x892\xc9R\xca6\xd9\x9f\xd9\x0d\xdci\xa4P\x95\xfa\x8d\xd6qs\x1a\x8b\xd3^\x01\xaa\x17\x1c\xf2,Xi8\xf8\x89@Iy[\x81;\xcdW\x14:\xcbXr*p?\xac\x0b\xf9>Je\x02V@\xa040\xa6\x95'\x8d~\xb7\x1e6`\x8f\x0e\x05\"v\x14-\x00\xe96\xd2\xb0r\x1cp\x012\xb2+\x9a|f\xc9 \x90\x1c\xf2\xf7\x88\xa1\xb4\x86\xcc|\x1b\x18\x80\xab\xc0\x0ex*\xaf\x085h*o\xa1,\xc0\x05\xd7c\xbeZ\xa15\xf60\xde\xac\xb0?\x07>\xac?\xe3\x0d\x85M\xf1=U\x84\xcb-qV=\xc9R\x9d n\x87\xcb\x96lE\x15\xa2\xc6>\xcf-\xd2\x82(_\xbd\xf72\xba\x86\xf5[\xbe \xdf\xd0R]\xa4\x12\xae\x89\x164O\xbaa\xc73\xa5<\x04\xcd ld\xa7q\x00\xd9\xf2m\xdc6_\xb3d\x1e\xf2+k\xa6\xd8\xe4Z6:%\x8eN\x1a\xc5*\x0d\x1b\x17\x05s\xb6\x0c\xbc\xcf\x11KS\xb3\\\xa6\x13\x91\x821\x0d\xa2\xec\xbd\x92\x08\xc1\xcb\xc8&\x10\x8ai\xc4S6\x018\xf1k4A\x81\xb2e\x81&\xcb\x17\x1cRP\xe7\xb5\xf5\x88\xa4\xda\xcb\x9a\x07v=\xc9^\xaa\xf6)\xeb78\x1c[\xa0\xee\x0e\xe0\xf2}\xc4 \xc1V\x00\x97\xa3\xc8\xac\xa3\xec\x17]\x8f\xf8m\xad\xe2(\xfb\xd5\x80\xfb\xb5\x05\xeeo\x06\xdc\xdf0\xb8\x84\xa5,Y\xb3\xa30^R\xf0\x1bo\xbc\xb7\xc1\xa71\xf3\xb2\x8fby\x9b\xa5\xcaT\xb4,`\xee5+\xc6\xb7\x92\x80\x94\xc07\x9d \xa2r|\x18\x136\x17#(\xfea\xd5\xb1\xf9\xaf2\x17\x1b\xb2\x82\x9ey\x0d+\x0b\x00U\n\x08cP\xba=a1\xa3\x19(\x89A\x81\xe2\xcd\n\xfbR0\xe1N\xf1\x1b\x85\x93<\xe8\xc9u\xc6\xa24\xe0Q\n\x05\xea\x89-%_1\x9a\xe5 3\xcb\xe9$\xb4\x94\xd2oA\x074\xcdCK\x16\xcflR\x94\x04g7\x12\x1c\xf7\xa6\x1e\xb5\xb0\x87)c8\xc3\x9f.i\\!I!\xa1\x95$MC\x1e[\xbe\xa2 \x184\x8fyyH\x13C\xe8SO\xc2\xbe\xa5@N\n\xb9\x84SO\xc2K\xd9\xba\x1b'\x8c\xfaoY\xb6\xe4>\xd4U\xbeb\xf5\x94\xda]\x02\xb8|Ca\xfd\x97l\x1dh\xe1\xa5\xf9\x8aB\xb3\x15.\xe0\x169kKN\x90y\xcb\xb3 \x84\xe5h\xbc\xa1\xf5\xf3X\xd3\x86\xe2\xb7\x95.\x14\x99\xa5\x0c\x02@\xed\"\x884K\x82\xcf,[&<_,\x8dc\xb3\x92\xdevvV\x00\xcd\x03\xb4ZC\xdb)*o\xb8,\x03\x94\xf0\xcf\x96\x95 Y/i\xba\xa4IBeWE\xca\xc8\xd7I\xf8\xa7T!^\xae\x81\xa2\x14\xb7\xaf\x04\x01\xf3&\x88\x98G\xe3\xb2L(\x13Z\x0b\xfc7\x0f\xa2j \x91b-\xf26\xc8\x04\xdd\xb1\n\x8c\xa6\xad\x8a4k1s\xbe\xa1L\xeb\x8c\xf3\xcfL\xd3\xc2\n\xfc\xcaB\x0c\xa7y2\xa7\x1e;\x95X\xc81_1\xe8\x1b\xb1\xd4\xdf\xd0h\x91\xd3\x05\xc0W\x12\x90\x12\x19\xbd\x0c\xa5\xb7&\xb1d\x8c7\x146Y0 \x02\xd4/+\xcc\xaf\x05\x0cv\x96e\xec:;\x02\xfdV\x01\xc6\xae\xb3\x91\xd4v\xb5\x80\xbed\x1eO4\x0e\x00p\xbfH\xb1\x141\x91/\x94h\xc3\xbd\x02\xa0\xa0\xf9\xca\x17\x0c\x92\xa3\x1b!+\xe98$7\xc7%\x019. \xc8E;k\x14t\x91\xd6\x86\x06\n \x13\x05\x94%\xdb\xb6\x7f\x1e\x05\x9e\x8d\xb7Qy?\x04~\x00\xf5\xc1\xdb\xe82\xf0\x03{E\xa0|e@\x83\xaa:\x0e\x9e\xa5\x1fXr\xb2\x92\xc0Y:\x8a\x05\x85\x8a\x11\xbf\xeb#\xe3>\xd7Y\x8f\xca\xeb]\x0c\xf8G-\xaar\xd6#%\xb6\xc2\xc0^\x9b\xb2%g=2dM\x18\xf8\xdb\n\x87\xe8\xacG&\xcb\x88\x15P\xdb\n\x19\xd65\xf32\x9e\x9c\xcc\xe7\xcc\x13xF\xbe\x8e\x18\xbcc5\xb1$\xb5\xb1jk\x96dG\xfe\xfaW\xa8&\xc9@\xf0\x86\xa1\x1d\x91Y\xca\xdd\x00\xb4E\xecVB\xffZ\x83F\xeb\x0e\xd8\xd5\x0f\xfcZ@\xca_\x16\x983\xc0 \nL\xbe\xa0\x90ip\x19\x846n\x18P%>\xacW<\xf1K\x89\x8fxk\x91\xf7\\% \xa9Q\xb7E\xeam\xb4\xc2o\x8cp\x9a\xf1\xba\x90\x95\\\xdb\xef\x87\xafq\x04p\x8d#\x80\xeb\xe3%\x8d\"\x16J\xad[@\x91\xf5$\xec\x1ba\x10}>\xf2\xb2\x1c\x88^\x07^\xa7T\xbe[\xc1\x13/\xe1\xa1\x01.\xdfm\xe0?& \x88\x96\xb0\xcb\x04\x15EC\xe6G\xb3\xd2\xb6\x1aO\x97\xfc\xaa\x00L\x97\xfc\xca\x06x\x16dF\x95\x99x\xb3\x82\xca\xab\\\x05\x89_\xe2^\xaf\xc2\x1f\xc0\xd3\xb6s\xbd\n\xa7\x97\x14U\x98\xb8^\x85\x11\xbe\xc8 \xe7\x17\xf8\x00\xd4\x10\xa5SLAG\x81\x8a\xb3W})\xa4\xe8:\xbc^\x85b\xcd\xea\xf6`J;D\xfa2@\x1as\x83/\xae\x1b|q\xdd4\x17W= \xf9\xf2\xefh]\xbfs\xbe:\x8a\xfc\x0fT\x1cQ\xe5K\xab\x7fT\x8a*\x1f)\x17\x02\x81\xc0\x95\xf5@\x11Dz\x1982Ug`\x84R\xcc!\x04il\x85\xa4Y\x1dil\x806 \xb9\xec\xdb >v\xd6!\x17z\x1b\x84Z\xe1\xad \xb0\xb2m\x10zI[\x8c\xdc\x8a\x85h\xcfWk\xb0WH\xd9\xc6\x8cL\xcd\xc8]\xa4\xaa\x9d*#\x02\x8e?\xb3\x9b\xd4\x0d\x06\xe39ON\xa8\xb7t\xed\n\x84t\\\xae\x08\x19\xe7vgH\x02\xf1\xeb\xc1\x03\xe2\xd2q\xe3\xeb\x12H@\x18\xeax\xdf$@\xc7N\xddu\x02\xc7\xedW[\x82\xfe`\x0e\x15\xa4\xa3\x85Guk\xd7T\x81\xef\xe2>>\x1e\xe3>>vw\xeb\xd5\xcf\xc16\xbdj\xcb\xaa50\xdf\xea\xf8\x05\xa69k\xc3;\x8b\x80\"/\x0e\xc8\xa4\xe6=\xb1i\xaeN@2\x12\x02]\x83o\xd0xIS\xe6\x7fd\x8b \xcd$\x15\xaf\x97\x10\n.\x1e\xe5\xf1~J\x1c\x1eID\x85\xa0)\xfdh\xd7\xf6\x06\xb4r\x11\xe5\xa0e\x90\xf5M@\xd9&\x16LC\xe4\x01^\x9a9\x19\x8f\x7f\x08\xf3\xc4\x19\x12\x07\x04\x01\x10\x1b\xfb-\x8br\x95\xf2\x8a{y\xaa~\xff\x95\xdd\xbc\xe4WQ\xf9\xf6)V\xbf\xdf\xf2\x06\xe8I\xe47'\xab\xa9\xa2\xbf\xa1EV\x8b\x05q\x87\x0b\x12\xfbf*\x0dM\xa7=\x0d\x82Mc\xd4io\xd3\xe0\xc2du\xda\xcfB\xd8\xb0j\x9dV\x8d\\\xf1m\xdb\xb17\x88\x1a\xed\xa6\xa5a\xab\x85b\x0f\xdb\xc4[\x8e\xbb\xb4KP&\x84\xd3\xc2PA\x07\xc7o\xb1\xf3\x92Q\x12\xa4\xf1I\x0b\x14\x8f\x05\xd0%\xcf#\x1f|5\xc4v\xd8\x90\xcd3\x13\xf8\x0d\x9b\xdfn\x94\xbf\xba~m<\xc0\xb2n\x0d\x8a\xfa\x9e\xbb\x16\x07,6\xde\x80~\x9a\x03\xa9\xcd\xfes\xc3\x93J\xac\xe6aH\x96Cbq\x10\xa7\x06\x9fC\xb4xr\xa0]58C\x91\x04|\xa6\x98\xd7!I\xc6\xa5\xea\xba\x8e\xb8\xf3Ry\xb7c\xa9\x0bf\x99\xd5\xfe\xfd \xf9\x8c%N\x93h\xfce3X\xee\x9aE\xa0\x84\x9aNImF\xd8u\x96P/\xd3wtu\xca\xa4%|\xf4\xd6\xa2\xc3\xea_\x0fdF\x0em\xb1\xd3\x06d\x8a\x9a[\x88'\xbd\n\xdam\xde=\x9a2\xe3\xd8\x9bZW\x9a\x1b\xba\x1c\x82\x9d;Y\x923\xe9#\x9e\x8f\x95\xaa\xed\x89\x1f\x80\xc8Q\x9a\xf1\xf82\xb6\xc7R\xfa\xa2\xd5\x07T\x8b\xd1!\xb8\x82\xc7\xb3\x8b\xf6\xc1\x99mo^qd\x96\xc7d\xf1\xe5\xbb}\xb8<\xe9\xed_\x87\xe3\xd6\x12\x17\x8b\xf4\xfc\x8eI\x89\xe0_\xaa6\xe9S\xdc\xd2 \xb5\xa6\x14\x19@n\xa4E{G\x0b\xeaT\x8b\xbdz\xb1t\xe7\x83^\xdd\xd2$TG\x97$m\xd5\xd9!\xd5\x91\x0edFZ\x1c94\\b\xfa\x1f\xf2\xec\x0d\xf8\xd3d\xf5\xe8k\x16\xaf\xa3%\xf1*M\x97a\xd1\x03u\xb5c\xb5\xc1\xc3\x8d\xaf.!\xf5\xae\xcc\x0c\x1e\x99\xc9\xe6\xaf\xbb\xc9\xfbP\x9c\xc9\xc9\x95\x05\xdbc\x94\x9b\xd9\xdf\xab\xf3J!\xce\xfc(\x8f\xdd{u&g\xae\xd2\xeb\xf0\xb1jM=\xdd\x97\xf0\x8f\xea\xbdZ\xaa\xf4\xfa(\xacUz\x9d\xe9Z\xa9A\xab\xc3/\x14|\xdd\x07\xdf\x8d\x1c\xcd\xfa\xe8\\*\x1e\xad>\n\x17e\x84\xaa?\xbe\xd6\xf2\xaej\xe1\xe8g\x0e\xbd\xe4\xe0G\xc0\xa1Q \xdd\xe3\x9dD~\xe5\xfdu\xc6\xf4\x15\x89\x91\xaa\xfd\x0f8\x97\x8a\x95\xf1h\xf4!\xa47\xc6\xcf3ya\x08)a\xe0}\x86\x1fUn\xc7\xe3\xb1,\x91C]>\xcf/Cv\xac\x81\xfd\x84.\xf4\x7f\xd5*\xf9S\xfa7\x90/\xd7A\xa6\x7fC\x8c7\xfd\xf2~]\x02\x15\x8d\xf5\x13\x0e\x1c\x92\x9f\xcb.)<3$\x0e[\xc5Y\x00Q\xcc\x1c\x16y\xc9M\x9c\xe9\x17_\xfdH\x12\x0e\x15\xce5{\x16D\xb1lv\x10\xadi\x18\x00\xd4\xe7\x92_\xfb\xccn>$pO\x02\xbf%k\x16r\xea\xeb\xff\xcc\x7fI3Z\xbe\xbde\x19\xf5\x8d\x94\xa2\xd5+\x93\xd5\x83\x97\xb7\\v\x14^\xde\xe7%\x94\xee\xf5\xaa\xe4\x06c\x9afL\xfe\xc8S\xf9C\xcd\x93\xf8\x0f\x12m\xe2\xc4 _\xe8\xc6&4c\xe5\xc0\x80s>\xc7t\xf1\xeb\xa4\x8c}\x96\x83\"~\xa9\x1a\xd2\x8c\x86\xa1J\xcd/WrV\xd2<\x8d\x99\x9c\xb9,X\xa9P\xd4\xf0\xc6soy,\xc8\x87\xb0xUS\x0c\xbfu\x07\xe1\xa5\x18\x08\xb8\x1f\x0b\x8cE\xba\xe6a\xbe2\x1a{EA\xf6\x0e?\x97\x8c\x85\xcey\x0f)\x91f\x8d\xd8l\xe7|\x9c\xf1Oq\xcc\x92c\x9a2w@\xb6\x05c\x16\x06\x1es\xeb\x9b\x95(\xcbg\x87G\x10\xe3\xb7\x99\x0bv\x98\x19\x8f-\xd9\x1c\x15x\x90;\x8a5Z\x0c\xc1KiFD\xb6\x89s\x0f\x92\x8c\x04\x91*T\x0f\xe3\x0b)P\xe3Cr5K\xce\x8b\x80\xd9\x00Y\xf3\xd2~\xa2PS\x91X\x08\x07\xae\xad\x16\xca\xce\x18\xe2P\x8d/\x12\xce\x81.}\xfd\xb2\xac\x1f\xa9\xe9\xd4^\xd3e\x9ee\xd2\x0c\xf8@\x06\xe0T\xdb\xdbHH\x8d#W\xa6\x08TF\x13FU\x9a\xf1m\xfdK\xf4\xec\xb8\x95\x92\xbf\xd8\x90\x92\xe7(\x13D\x13B\x87pR\\\xcd\xd89.-\xd8\xba\xe9 \xf5\xfb\xd3\xeaGpjtPT\xc7\xeaD\xe8\x07\xa6O\x8b\x0e\xe8\x97U\xcc\xdd\x01}\xa2\xb0z\x17X\x81\xf1;\x01\xfd\x1e@pRt\x00\xbd\x86\xd5\xd5 $\x0f\x96\x0e\xb07\xe2P\xe9\x01\xa3\x0e\x9c^\x90\xc5a\xd4\x03Z\xe2\xe7\x0e\xc0\x0fp\xfat\x01\xf5X/\x1f\xd4\xa9\xd5\x05\xa6O\xb4\x0e\xb8\x8f\xe5i\xd7\x05 'a\x07\xd0\xa9<\x1b{@\xf5\xe8\xc3\xa9:S\xbb\xc0\xe4y\xdb %\xcf\xe2\x0e\xb0\xb3\xf2\x9c\xee\x80\xfc\xc9<|;`\x7fV\x07\xb3\x9d\xbf\x12<\xc0\x1d\x19\xe5\xbfj\x8a\xab\x9do\x94\xfe\x9e.\xdd\xa8M\x82\xac\x9f\xfbf#!\xb8\xd3\xdd\xba\xd9\"\x88(`\xba\x84)\xa2\x19\xde\xdd\x9a!\xc9\xf4\xf6\xa1\xdeU\xaeq\xe4\xe9\xba\xc9p\xbf4X\x81\x8e\xbev\xc9G\xaa\x80@Y\xf6\x01\xb4Nc\x15\xec}7\x1a\x7f[P\xe6\x1d\x80\xdd\x12\x18\xa2\xe6.\xbe\xdb\xdc\xbd\x14\x9cUGc^*\xae\xab\x17X\xd6\xdd\xb9\x97\x9a[\xeb\x01'9\xb9\x1e\x80}F\xf5e\xc1\x01v\x02\xf2\xae\xadkq\xadHz\x8e\xfb\x99\xc1\xf6t\xe1a\xcd\x12\xf5\x81\xeb\xb3\xa8\xcfJV\xaa\xbd\x8f\x16\xef\xb8\xa4g\x1f\x8fLABG\x9b\x8e\x9aB\x86\xbe%\xfa\xf4\xa4\xc5\xbb^\x9f\x9e\x9cU\xd8\xcd\xf6O\xad\xef\xf6)\x19\xe4\xa7\xe3\x1b\xab\xbb}\xe3g\xe0\x88\xdb?\x81\xf8\\\xd3O\x9fO\x1c\xf3\xb8\x93~;\xeeF\x98\x1f@d\xd1\xde\xd2\xa6?\xc4\xa6\x08\x96\n.-q\x9d\xfd'\x0e\x1e\xc8H\xf0M\x17\x10\x90\xa1\xbc%\xba)9\xadf\x01u\x80\x05\xed\xb7?\x17\x83!\xb9\xa8\x94\xbd\x07\xa1/\xdcV\xf3H\x1e\x89\xa5\xdcw\xeb\xd4e\xe3\x8b\x8c.\xd0\xdb1b\x08j\x05\x1fm\x17\x0f\x04z\x18\x90`\x83\xf8\xac\x9f\x08\x96\xfe\xcb\x17\xe2\x9e(\xde^G\x85\n\x0c\x89\xdf\x0d\x16_\xaamh\xae\x820|\xc9B\x961\xcb\xf0\xdc\xfb\xd8Djll\xbd\x8c\xce\x95\xc3Iw0$>4\x0dR\xbb\xfaU\xbcYd\xef\xc7\x90zG\xd9\xfb\xa3}\xd4\x81=o\x11\x18h\xf7nc\x8f\x86\xa1\x8a\xacn@\x97\xcd.~%c\x9aC\xbc\xf8\xe3\x90\xa6\xa9\xcb\xeba@\n\xa9\xb0\xf4\x8f\xd0\xd4\x06a\xd2/\xb1\xe0-\xb0\xec8e\xb9\xcf\xcb\x0b\xed\xca\xadhM\xfd\x8a\xdf\xd3\xa85o,\x9a+\xc4\x0b\x83\xf8\x92\xd3\x04\xf8\xe6>~\xda\xb54\xa9RP\xe9\x94\x1c\x126\xae\xa4\x17\xb7\xa6\xd5\xe4\xaee\x85Mw\xf0-\xa7;\x90^\x86\xcdI\x08\xeec\x12&\x93\xc9\xbf\xc1\xdaM\x98@\xe2\xbeV(\xff\xf6k\xafy\xf1\xc3-79\xb8\x87\xbd\xcf\xecf\n\xf7V\xf5[4\xa2<\x02d\xa0\xe0\xdf\xdce\xe2\xf1\xb2$\xfc+T\x80f\x83/\xb5\x96|\x1a\xb6\xe5\xaeXF[\xb2\xa51\xa8-\x17|\x19\xa0\xd8\x81\xc8\xb8\x16o\xb9\x1f\xcc\x03pA\x90 8wwR\xbf\x18\x14\x8f\xb7\xa4\xc9q5\xf4~\xe7v\xfd\xccnb\x10\x1cH9\xae\xd4\xfd8\x94nm\xa7\xb5x\xa4\x04\x17\x8f\x7ff7\xb7\xf8\xaa/\xb8V\xf3\xa3_\xbe@z\x1e\xd7\x9a\xc2\xc6\xea\x03}\xdbs\xb5\x0c\xbc\xe5\x86\xadi\x19\x83\xfbll%\x05Eg\xf4[b\x00:$\xc1\xb7P\xe9m\xee_\xfcP9I\xbd)qNR\x8f\xa26\x05\xa0=}I\x93)q\x08\x92\xfd\x06\xf4\xad\x9c\xa3$\xe1W\xe27\x02\xf2)\xd6\x00\x9f0\x83\xc6\x8f\xca\xd0\x04 >ZLM^\xf2\xabH\xc3\xc8\x9b\xc7&\x08\x0b\xa7\xc4\x91\xa4\x1a\x92\xfd3\x18K\xbe?E\xb2\xde\xb2(\x9f\x12\xa7\xa2\xf9\xda\x00:\x8a\xe3\xb4\x13H\xb2MS\xe2\xc8\x1fo\xb8\x87\x19O\xbc\xe5\xbf\x7fH\x82\x08\x14\x84\x00?9\x9f\xa2\xc0gQ&\xf0\x89\xdfjg\x80\xa3\xe0\xfd)q~\xa0\xdeg\x9b\x85\xc5\xb3)q\xce\xe8%\x923\xd9\x15}\n\x19\xc5\xcc#&{ba\xc8\xdb\xedf\xe6\x13\xd1M\x8b\xaf\xcb\xc9S5T \xc7\xec\xc7&\xa2\xc1G!ZR\xb4U\xca\xe6\x9b\x99\xbb;S\xb8(L-\x03\xbb\xfb\xb4m%\xef\xedZ\xd6\xf0\xde\x1e|s\xc1\xd0\xf5\xb9\xf7H\xe5Z\xd6\xdd\xdec\x18%\xcc$|O\x8c\xd1\x8f\x1cu\xcb\xb5\xf7\xb4c\xdb\xec\xed\xb7n\x9b\xbdg]{\xe6\xd1N\xc7\x8ey$Z\xfe:J\x19\xea3\xe7\xd1\x93\xb6\xed4\x81\x95\xf3\ns52\x81u\xf3j\x17\xcd\x12\x83\xf9j\x0f\xcd\x12\xady\xf5\x08\xcd\x12My\xf5\x18\xcd\x12\xc3\xf8\xea \x9a%\x06\xf0\xd5S4K\x0c\xde\xab}tC\x88Q{\xf5\x0c\xcd\x9a@\x97w\xd0<9\x1c\xe8x\xec\xc2xL\xd0\x01y$\x06\xe4]\xbe\xb2\xac\xe8 \xccQ+6\xd9\xdd\x15U\xbce\x19\xada\x0e\x9c\xcb\xb3\x9f\xc0\xd2\x0b\xfegvc\xbb\xd1\xcd\x04\xc99\x03\x90s\x19\xec\xf63\xbbir\xa9\xc0\xfcV0\x1ah\xc8\x97\xde\xe3\xab\n\xb9_\x1b\x8d@\xcf~[\xa3\xb4\x7f|\xabld\xa2\xfc\xe1\x93C\x8d\xcc\xc8\x94\xc8\xb0:\xe3y\xc2W\xc7\x8a@\xab\x07DF\x15d7\xa2;\x82YAy\xc0x\xd5\x06eJ\x9cr\xc6\xee\xc1\xc9\xb6\xd4\x11\xfb\xd7s0>\xcd\xa8t\xf7\xc3\x92\x7f\x1d\x03\xd3\\-\xa0\xbb\xc3R\x1bI/\xb5\xa9\xcf\xda\x81<\xb8]\xf4;\xa0\xee\xc4\x96\xdc\x91%\xb2q&\xd5\xb5\xfd?\x86i\xff\xb7X\xf1\xb1\n\x15\xfd\x7f\x8b\xb8\xe9\xdf\x04O\xb00\xa3\xbft\xf1\x84\x1a\xf1JhCv%\x13\x04\x16\x05\xd5\xba\x97\xd5\xfc\x11\x1b\x1b\xc9\x0d\xc6\xaf\x11\xa74\xcc\xe8\xaf\x1b5\xe5\xd7zS~\xad6\xe5W\xbc)5(\x1c\xa8Ws\xff\x86-%\xc8\x91\x86\xff\xdfj\x19 \xce\xf2\xf1\xa0\xb9\xac\x9eu\xd1\x1b\x88\xac\\\x1f\xe0\xcd\xb1\xbe\xc8x\xfc\x86\xadY\xa8\xe2\x02O b`u\x11\xf8\xe0\xf5KdO\x90\xecJ\x84\x8e\xa9\x8a\x91R\x84\xc0\x80 \xa9\" \xc2\xa9U\xa3y\xd8\xb0\xeb\x85\x8co\x83\xe8O^dta~B\xe0\x82q\xc6\xdf\xf0\xabB{\xd3^\xa9\xb6\xfd\xfe\xf4\xf1uQ\x87\x91F\xa6\x88\xda\xfesl{F\xb5}x\xab\x196\xa7\xaf:3\xf5x\xcfS\xb2U3\xa0\xcfS\xf6*\xb8\x14\x13\xb25\xb9\x8f\xb6\x18\x91c\x1e\xd5\x15\xe6\xc51\xff\xf0\xb7\x87\x87\xdf?\xac\xa6\x0b&\xf9\xe1\xdf_\xfc\xb6\xf5\xdb\xe8\xb7Q-\x0f7\xd4?\xfe\xf1\xe4\xf8\xaf\xa7\x9f\xde^\x1c\x9d\x9d}\xbcxw\xf4\xf6dJ\x1cA\xc7\x8c \xe4\xf0\x08b*\xa79\x1a&\xc3\xf7\x8fU\xee\x19\x97\xb1\xb4\xbb\xf0\x081\xe8i\x9ct%\xe6\xd5^\xc6\xd2LTt\x08\x01f\xd88aqH=&\x10\xaaC\x1c\xb2M\xe8\xb8\xd9~\xb2M\xbe;p\xbe#\xdb$\x13?\x9d??\xf8\xae_@s\x1a}dy\xca\x9a=\xe9\x8a\x80\xa8c\x9b\x16\x16\xec.\xd6\xae\xf6\xce\x8aJ 6QL\x93\x94\xbd\x8e \xf0\xe4dg0\x94\xc1\x7f\x80\x8eo\xf6\xc2\xb6/\xeeY\xa4\xf6\xe4\xf1\xe3\xddI\x17\x92\xab\x0fQ\x11\xc7KL\xf6d\x08=\xdc\x91\x91\"wdH/V\x84\xdb\x12ks\xf4\x88< \xc1s\xc2\xc9\x0bB\xd1\x10_E\x8d\xb9\x19f\x90\x93m\xf2h\xe7\xd9\x93!\xa1\x03Y:\x17\xff\xb6\x0f\xc8\xa3\x01\x89\xc4\x7f7\x13\x7f\xd9X\x0b\xa4\x8f2\x97\x0f\x06d\x1b\xcd \xdbd\xd2\x96\xb9\xdb\x96\xb97@f9#\xffq@\x121\x00\xffa\xc6\xa6&\x8d T\x91\xdaD\x17\xc48lo\xab\xf6c\xcdGq\xa0+?5 _\x88\x1b\xa9\x9f/^\x90\xc9\x93\xfb\xc0G\xe6\xac;\x93\xc7\xe3'\xe3]\xe7\xf6\xb5u\xd8,\xb9\x91\xfb\xe8\xc9`(m\x91p\xdb\xa5I\xdd\x9aG{bx40\x8f\xec}\xa8\xe5\xd9\xc6\xa1\xb7\x04;\x1e)kw\xd6\xa2/'\xe0&\x8a\xfb-\xe3\xce)pV\x85\xd5\xbb\x01\xac7\x1b\xe8O\xd4T\x8a\n\xdcL\x06\x11\x1e\x08\xf4\xc7\xed\xe6\x9e\xcd\x16\xa1\xa1\xb4\x04\xf2\x8c|&N\xfd\xc4u\x1e=rDY\xf1\xeb\xb13\xac\xb8\xf3\xb8\xe7\xf8WbB\xf6,\x83\x9f\xa86\x9d\xe6\x97Y\xc2\x04\xd2\xe3EX\xe0\xdb\x7f9\x1b_\\\xb0\xf4-\xf7\xf3\x90\x81!\xdeP\x86\x87\x8b\x98\x97\x01\xa6\xfe\x90\xf0u \x86BG\x1dm\xb6:p#w\xff\xf1n}\xe5\xf1\"\xeb\xd1\x00e#\x02\xabY\x83\x8a\xf7h4M\x1ejM,\xa7\xa2\xa7MIwL\xc5J_\x12\x1dw\xad\xda_\xae\x93\xefyDU\xad-\x83\x18\xb9u\xfb<\x0eK:r'\xd8\x96\x16\x19{O\x1f\x9b\x18T&=\xc1\xc7\x9a\xfes\xc7Z\x9f;-\x07\x9en\x99\n\x1a\x8d|o\xab\x1fU\x016\"n5\xe8\xdd`@\xb2e\xc2\xafH\xc4\xae\x88@2`\xdc\xe0:\xc74\x8axF\x04oJ(\xf1\x04\xc3IhJh\xf1%\x07\xa1~\x14\x17\x8b\x99\xdd\xaf\x95\x95y\xff\x862\xb3e\x1f\xd9\x9c%,\xf2t\xf3\xc4\x87\xc8\x92\xa6\xd1w\x19\xb9d,\"A\x14d\x01\x0d\x83\x94\xf9dD\xd2\xd3\x05\x1b\x93O)+\xeb\x1b\x83\xb4\xa2xu\x07$\xe3\xf2d\xcc\x96l5&\x1f\x19\xf5\xc9J`m\x9a\x11\x15hu~9^\xb1\x87y\xca\xa4\xa8cT~\xc5\xa9\xdf\x8a\xe1\xa3\x91\xb5-~\x1b]A`\xd0\xcb\x95 \xb8\xe1&\xaf\x80\x0b\x08\x95kn\x04C^r\x1e\xa2\x19\xa2\xb1h\x86\x8c\x94\x8bf\xc9\xa3\x15\xcd\xd2\xce\xc5\xb1\xac\x9b\xd5\xa5\xa5\x114\xc2[\x0d\xfdy?Ge\x8bLK\xdb\x90r\x9a:\xb2\x14\x95\xf2Jk\xc7,\xa5xd\xab\x0fr\xa4\xc7F$\x17\xe2\x01\xe0]\xb8\xa6b\x18kW\xbf(\xff\x1e\xd5\x160\x91r\x83\xb1\x99 \x0e\xec\xa2\xec\x1d\xf0F\x83\xa8o\xa2\x14u\x82\xd14\x0d\x16\x10\x9e\xbb\xaf\xb0\xe79\xc9\xc8\x0bB\x93\x05\x88\x94S%\xe6yN\xb2\xedml\xaf\xe8\xa5^\x14\x98e\x88\xe1t\xf1\x89\x84\x04\x91\xe8\xa1j^y,-i\xfa\xfe*R\x8e&o$-')qqN3\xa9\x1b\x1f\xcd\x92\xf3\x1e\xd7\xdd\x86 9~\xe8\xb4\x8d8Q\x9d\xf2\xccN\xa9Q \xdf\x93=\xd1\x1e\xc95\x01\x8e,\xfb\xbdwN\x0e\xab\xaf\xb8\xfb\xd4\x159 ?p\x1e2\x1a\xa1\xa6\x04\x0b\xa2\x0c\xe3\xe7\xcd\xbc\x1b\x84e\xd3\xe9x\x14n}S@\x0e\x89\xbb#\x0e=5\n\x03)\x81\x88\x9b\x88\x0b<\xa2\x80\x8b\xc0\xe6\xf7\x05\xbd\xe3\x8d\xe3H\xf2z\x1dNb\xdc\x99^u\xcd]Y\x8a\xe6\xd58\x00\xe5\xdb\xbdp\xd4\xeeJ\xcb\xd3\xe8\xcb\x17\xb2%\xe8oZ\xd2\xdf\xba\xce\x12j e$\xf5\xb2\x07\x82\x0d\xa8\xbb\xb2\xd5\x0f: \x95\x11\xbd\x8f1\xa9N\xd1\x1d\x87\xc5\xaf\xe0\xad\x96\x91\xa9\x00\x9a\x83\xe3\xd70\xdf\xa6\xe3\xf3\x96%\x0b\xe6\xdfit\xba$OX9\xb1_/\x8b\x02\xed\xacf\x8b\xf3j\xd2\x85\xa1H\xc1N\x1a\xcb\x08\x1b\xd3\xcd\xa6oKV\xb9*\x07O\xcc\xc8)L\x0b>\x81\x06\xa89}f\x0d\x9bL^\x90\x9e\xe6\x97\xa9\x97\x04\x97\xfd\xe7K\xb5\x1d\x97\xa9\x89\xc6\xe4Q\xaa+\xed\xd3\x86,\xb9)\x1a\xd1\xb7\x0d+p\xbeQ\xffZ9\x1ef\xe2\x81q\x1f8.\x92%\xdc\x92F~\xa8\xa8\xe2\xf1e\x10\xf9\x90<\x18\x0cI#\xdbE\xfc\x8c\x10\xb47\x9f*\x1f\xef\xd5\x9f^=qu\xb3\xaa\xbd\x13\xecd\xaf\xa6\x15\x92\x83\x97\x81\xff\x96\xe7Q\xe7]\xab~\xe0\xa3\xe64\xb9\x9b}\xef\xe7 \x0c?2\x8f\x05k\x84\x93h\xfb\xf0U\xcbN\x90[\x0c\xdc\xc3\xa8\xb9j\xf2@M\x7f\xe5\xfaik\xea\xa7hu\x9b\xd1\xf9\x84\xcc\x94)\xb3\xe8\xd5\x8e\x02~\xa3\xaf\xd7\xb17h\xa5\xd7\xcf\xc2jz\x15c\x18\x19\xb6q,\xb2\x9b\xecd5\x7fm\x9c\xf7?0\x16}H\x98GC\x0f\\\x19\xf9\xca[\x7f\xadi\x06H\xc0#\x10\xa3T\x1b%o\xe6\x99\xaf\xb4\xd4\xab\x99v\xa2\x0b\x01\xaa\xf1%\x0d-|\xfd\xd4&\xc6\xc4\x04}\xa7\x06\x14\x1fk\xfb\xb5\xcf\xa1VCY}\xf9[\x02:\xb9\x07\xc6\xd8\x8eK\xe9Z\xfb\xd9\x07\xec\x8b\x14'\x00\xd1\xd9\xd9L]\xe8\xaa\xc4\xc3m\x1c]\x9f\xea\x08&\xcd\xef\xa2\xf2\xebO\x96\xdcl\x00M\xcc\xab \x1a\xc7\xe1\x8dk\x11\xe2`\xcfW\xe2\xd1vo\xc6\xb6G}s9\x06y\x9a<\xb0\x97\xbdk\xb0\xcb\xb3\xccGQ+6r^\xee\x8a\x0e\x8aI?\xb0<\n\xe7\x9a\xfd\xcaDp\xd3\xb5\xc4\xc8o|\xb7\xab\xd1\x18\xf4\xc7#\xedb?\xd2k\xa8z\xe1\xb4T\xef\xc0~\xd3l\xca\xb4q\n\xc8|\xbe\xb6\xaf\xb8\x16\xe9e\x1f\xbc\xb5`\x99\xb4\xb7\xf2\xb5zu_\xec\xa59\x8c\xea\x15\xc7\xf5\x908g\x9cP\xcfci\n\x97\x12W\xb2\xfa\xe2\xf6kHnxN\"\xc6|\x92q\x88\xe0\x1f\xcco\xc8\x1fD]kNI\x96\xe4\x8c|%T\x16\x9f\xf3<\xc9\x96\xc5\xe50\x01\"\x12\xeeF\xe0~q\x00\xf7HcgP\x1c\x04\xf3t|U\xedQ\x9fq\xe8\xa7\xda\xa5\x1f}\xcdi;\x10\xdb\x11qT\x96l\xae\xab\xf6\xa2\x81\xf9\xd1\x96\xe5\xdf^\x0b\xad\x9c\x02\xb6=\xd7^G\xae\xeb\xa8\x1d\xbd\xf6\xdd_\x1cw\x16\nb\xd2AAL\xfa\xef\xfc\xcd(\x08\xaa\xefih\xbb`-\x95{\xbeuX\xc2\x8e0Hp \xe6\x80\xf5R\xad, /e\xba\xce\xc8!\xd4m\xc2\xb6\n\x88:\x84\x84\x1e\x12\x1d\xb1\xfe\xccU\xb4D[~@\x0ee=;dJ\x803u=\xbd*l\xe7\x8a+x\xa7\x10`\xe7UXT\x82\xe2\xb6]\xc5\x16L\xf2\xd6\x96\xeb\x81\xd6\x07\x8c\xe6\xa0\x18\"\xab\xe8\xc1\x95\xbcqN\x0eIN\xa6jY6i\xc8k\xa5\xf9\xc1\xd5\xf5\x99\xca\x01\x1e#q\xff\xf8\xda$\x95\xbb\xee\xd3d\xe0\xe9\x1a~\xc2#`\x10\xc0\xfd\x03\xd1\x88TX\xc7j\xc5\xd5U\xb4l\xac^um^\xb5\xdf\xaf\x16Z\x93\x03\xe5!\xe0~\xb4\x1e\x87v\xa5\xbez'\xc1K\x90ti[\xdcR\xd5\x8f8\xcd\x98U-\xea\x9a\xc7KR\x83\xa9#\x19\xb0>\xd4\x1a\x83\x82\xd3L\xd4K\xf9\xe5\xda\x81T\xa8G\xf2\xb2j\x9bj\xa44\xbf\xddyN\x02\xf2\x82D\x85zf\xb0\xbd\xdd\xc4\x91\xc0\xd3p\xa5\x194$\xd1,8\x07a\x12\x9b\x89\x9f\xe7\xf2\xeeE\xfe\xb6\xb6\xad\x18\xac\xda\x0e\xf9\xb6Sh\xd9\xe7\x05\x00\xca0\x1b\xd4|\x02\x82\xce#\x00\x06\xdb\x7f\x9e\xa4\xf2\xbc\xe9\x89&\x957\xc2\xa7J\xb4\xd6\xd1[(QV\xd0J\x83\xe3#C\x0c\xb9\x08\x8e\x04\x1a\xd6\nv5\x12\xaf\x17\x94\x1aw8v[\xa0\xcaS\xd2\x0e\xb4`\xd9\xcb^\xb5\x01`\x12\xac\x99\x0fd\xd5\xab\x84\xaf:J\xac\x82\xeb j\xc9/\xceS;H\x06\x8a\xdf\x08+\x8dh\xe7f\xd6\xf1\x8fZG@\xee\xc3\xd6f\xca\xed\xdc2k4\x0c\xc1\x05E[~K\xf9B\xf7\xb8\x0d$\xc8n\xfa\x0e\x85\x81\x0b}6\x0f\"V\xa0\xa0\xe6\xce+A\x17,3\xb0\x15\xc4\\k\xc2s\x1b\xfc)\x98 %\x02[\x89\x97,\xf5\x92 \xce0^\x8fV\n\x19\xdaMMPA\xcaPAEP\xa5'\x85[\xe9\x17\xb4H\xea\x86C\xe2\x0d\xc9\x1cCD\xa0['\x0d-L\xcd:\xcf\xc6\x8e\x0bx\xd4\x0eG?\x023\xc4`g\xeb\xb5\xf0\x12\xb1h\x7f\x0cX\x1d\xb83hc,\xda\x88\x16\xc1e+\xe2S>\xb8\xf8\xb0}\x8a\x13\x1d\x1d\xd8\x17\x84\xb1G3\x97\xbb\xde\xc0\xc6\xe5\x14\x87\xdbR\x9e[K\xf2\x82\xf8\xc5\xb9\xb5\xbd\xbd\xec\xea\xb8 \x1b\xfc\xd9\x121+\xd0\x8fRN\x9e\xad\xc1a]\xa6\xfe\xcfE;\xe7\xb3\xf5\xb9\xd5o\xbd~\xc4WV`\x1f\xee\x0d\xc9\xbaC`\xd8O\xfc\x1a\x89\xb1_\x0f\xc9\xaaC\xf2e\xcaW7\x16\x83\xa1\xa9j\xa56%\xfeMp\x14\xd48\x12\xab\xde\x97\x12\xb7\xd7Y\xd8\xed\x81\xa2^\x1aL\xd1\xf8\x90\x04\xb8A\x9a\xd6\xdcn\x0e:\x084\x9a\xb3%\n\x18\x96\x08\xd9@\xc6\xbaeWD)\xaf\xbe\x0d\"\xf0fH\xd8\xb5\xc7b\xd8\xcf\xdc\xf3\xf2$a\xfes\"\x9a\x9f-\x19\x89x4Zi@\x9f\xad \x8b\xd6A\xc2#\xe0\xab\xc5\xa2\x06\xc9^\x1e\x86\x04\x82\x9a\x92\x15KS\xba`\x84F>\xa1\xbe\x0f\x11OhH\x96,\x8c\xe7yH\xaeh\x12\x05\xd1\"\x1dc\xda\xe2,L\x99eQ\x89>\n\xcehV\x1f\xa6s\xbb\xe0\xc3\x83\x9d\x86f\xbb\xd5\xa1\xc8\n\xbf<\x0f\xff#}\xb8\x18\xf6\x13\x1d\xeau3\xf3\xb6\xb7\x9b\x01\x1c\x88d\xfa\x07\xd2\xee\xe1\x808\xaf\xa35M\x02\x1ae\xe4\xa7\x80K\xe1\x15b\x00\xd1H\x91\xf2\xact\xd2\xec\xcc\x1f_\xf1\x1d\x828Hi\x02\xea\xd5\x87\x89\xd0\xa4#\xa8l\xd8A\x95\x13C}L\xbaE\x91\xf6\xd1!\\k\x83<\xb04\xaf\x9a\x0c\x86\x98\x8d\xff`Hr\xd1QO0d\xa0h,\xc5o\xa2\x7f\xdc\x8d\x86\xe4\xe9\x90\xa4\xd8\x01T\x1c>s\xe3;\xcf\xc9|4z> \x01\xa8\xfc\xcd\xe6\xe7-R\xa2\xeaR\xb3\x99\xdd\xa2\x0b\xcf\x1c\x8c\xde\xbe\xe5\x8a\x06\x8b\xae\x8d&C\xa2E\xbc0U\xe4\x90\xec\x80Nvy|F\xe4\x05I\xe0\x86R\xe9\xd2\xb9l\x16\x9dK.~\xf0\x1c\xa7b\xea1V{o\x99\xc6\x9a\x96;\xe6\xc9\xa3.{d\xac\xab\xa6\xec\x06\xd6\x11w\xb3AE\x90u?\xad\xdb{\xba\xffo\xd1\xbcF\x88t\xd9\xbcI#\x02\xbbB7O\xea\x88\x82vK\x07\xba\xfa\x89\x9e\xad\x89\xcb\xca \x8eA\xc3\xb7\x91\xbe(\xe2\xa84D\xac\xd3\xd9\xb9E\x9e\x91\x835\xd0\xc0u\x0c\x1b\x0c\xa0\x88sP\xe0\x83\x8b\x00*\xe5\x13L\x9c\xfc \xd1\x8e\xc6q\x9e.\xdd\x1c_\xbb]\x06\xb4\xdd\xbb\xae>\x06\xba\x7f\xf5^\x14Hr\xeb\xa0.]%\xd5\x9d\x1aDj^` 3\xd9\xfe\xba\xaa\x9e\xc6\x81\x9b-\x9f\x8e\x88\xdb\xdaM\x1321\x1c\xe2j+c\xb3\x83\xaay\x8f\x8c\xebdx\x95\x14i8\xd3\x05\xd4>R\x8f\x14\xb9B=\xacR\x0ff%N\x943\x81\xa0\x9c\x90\x03Q\xf5!I\xc6?\xe4\xf39K\xc8T\x99}\xdaX\xb3CB\xc74\x0c\xb9\xf7)J\xe9\x9c\x15\xf0\xd5A\xee\xbd\xbb \xa9;\xed\xd21\xca\x91\xc3`]h\xa4+e\xe4\x06\x04QL0\xdc\xc6\xb8\x11h\"\xb3+\x02z\xdez\xe1\xa3\xba\xe3\xc5\xc7=\x1e\xdf\xb8\xc9`h\xf52\xf7uP\n\xf2\xdc\xc9\xde\xa3A\xe1\xeek\xf3-\x80\x0c\x88q\xe64\x1bi\xf4\x1d\xd9\xe9\x99TP#\x07\xe4(I\xa8\xe8\xc5\xa08\x99\x9e\x0fH6\x8b\xce!0|t~\x1f;\xa2\x13\xdfO\xf6\xefr\x1c%\"\x13P\x9d)+\xbc\x9f\x96\xed=\xedt\xdcqO-\xab7+\xba\xff\xa3C\xa3M\xfb\xa6H\x14\xabQ\xdd\x05\x16\xc9\x8a4\x82\xd5B\x13\x03\xcf\xccv\xce\xe5\xa9\xa0\x8f '\x88|v\xedH\xcd\xe0d\x0co\xd0\x0e\xf85$\")\xce3\x95\x14\xe7YeSm8\x93\xbb\xbb8\x93\xb0\xff\xb4N\xae\xabS\xfb)\xee\xdap\xff\xe9\x1e\xca%\xec?\xad\x9f\xf2b\xd4\x9d\x99D\xb8\xdaQ\xc0\xb9\xd3d\x19\n\x98\x974cu\x00\xcf\x04xK\xe3z\xfe\xdc\xcc\x7f\x07\x8eD\xea \xb1 \xf2\x91-N\xae\x1b\xb5\xf8&\xc8)\xcb\xea\xf9\xcbJ>Lm\x1dd]\x01\x01\xe9_\x1dde\x82\x00\x86\x91GF\x1dnQ\x1b\x14\xfaS\xc0\xae\xea@7&\xd0\xab\x90\xd3lo\x17\xea\xac\x03^6\x00\x9f\x01\xd4\xb1\xbbA\x1d\xe2\xef\xc4Z\xd3\xde\xc65\x89\xbf\xbb\xbd\xbc\xe7j+a1\xd6\xb7]\xa9\xfb\xb6\x1b\x90G\xf8R\x9d<\xc3tk\x04\x1b\xdbzH\x90\x9aL\xcd\xc9\xb8\x143;-\x91\x0c*^\xf5\x9aHH<}<\xfb)\x83\x07\xc1~\xe0\x00\xa6\xbb\xbf\x06@\xcd\"V\xb0i\x01\xbe\xf3\xf0\x18`\xdd\xbb\xc5\xb2O[93\xbd\x04,\xab\xa4{\xe3j\xd6h\x7f\xa76\xb2bYL\x9e4\x97\xc4K\x9a\xb1q\xc4\xaf6\xc5:\x9a\xdeA&0hj\xbf\xf5\xe9\xfbZ;\x02\xb5\xf9 \xc8\x01{\x8e\x88K\xc9\x08\xf5O+\x98L\x88\x86#\x0e\xa7\xef\xc9\x0e\xf6\x15\x0d\xb7\xbd\x9d\x91\xef\x0fHapnx\x8e\xdei\xaa\xd4}\x95\x1a\x82\x19\xae\xd7W\xdb\xb8\x9a\xcd,j\xbc'\x89\xe1\xe4\x11.\xe3hluEn?\xc3\xc9\xed\x06S\x9a\x93\x03T\x0d&\x85\xf4\x86\x16L\xd8}\x95Y-\xe0\x011\xde\x89G@ \xdb\xcd\xe0\xf0\x92\xb1\xbb\x80\xc6L\x95\xd6Os\xd8\xc5\x94\xa0\xf3[\xd5\x0c\xc9\x06$,\xf1\xb1\xe6|\x80D\xcafQ\x1d#[\xa8+o\xb3\xa9\xda\x7f\x86\xc7\x93\xd8\xdb\xe9\xbe\x1a\xb7R\xbc\x05\x08v\n\x13\xe3\xfb\x18iG\xf4\xbahU\xa1\x90\xfc\xaf$\xbf\xa2YPeL\xec\xbbR\x14\xd9\x85\"\xbb\xe7\x16\xc5\x10\xa2\xe7\x85\x1aW\xd6\xda\x9f;\xea\xe6Ip\xdan0\x1a\x81mu\xd1\x06\xa9Y\xcf]\xf3`\xcd\xe5U\xb4l\xfc\x0b\xb2g2\x06T\xdak\x81^c\xb1p\x05\x95A\xb6\xb7\x13\x08\x16h\xc3\x12\x9aP\x8ef\x89E\xf5\x1d\xcc\x95\x81\xdcNe4\x8f\xa6\x92\x92U\xb8V\x0bip\xeb\x83\xbeyp\xab\x95fa\xc2\xf7\xf6m\x11\xe5\xfap\x83\x81\xab\x83='bS\x92m\xe28\x1b6\xbd+\x12\xcb\xfe3\x1c\xcb\xed?{j \x1bWo+\xd8/\x03j\xf2xH\xaa\x8e\x8aB\x9a.e(\x882\x91\xe6\xd9\xb2\x9a\xb2\xe4i\xcd\xfd\x8f\x18\xa4&\x8cR\xb0\xae86Jku\xa5\x8c&^-\xed\x1f9Knj\x1f\xa0\xd9\xb2Y\x9dH\xad} asRs)T.\xb2l\x0c!P\xc9\x01\xb9\x1c\x92l\x9c\xb0\x94\x87\xebN\x97\xaejr\xc1\xc7\xdd\xd6\x04\xfc\xba\xe9\xa2\xa6\xaf\x9a\xafF\x95r\x1f\xf5\xac\x98\x91C\xb4\xf2b3V<\xac\xc3g\xe6\x0eRIl*y\x16H}.\xad\xd7D\x15\xdf\xf9\x01D\xe0\x96_\x81\x18\xcb\xa6\x1f\x0f\x99\xac\xafZ\xaa\x0d\xfb\x94\x88%\x15TW.\x85\xd0\xc1\xee\x8c\x8e~\xdf\x19=\x1bo\x8f\xce\xb7\xa7\x83\x87A\xf3\x98}8\x9d\xed\x8c\x9e\x9d\xff\xe5\xcf\x0f\x9bG\xed\xc3\xbf\xbb\xbf=\xfc\xed\xe1\xa1{\xb8\xf5\xdb\xc3\xc1\xec\xef\xbf\x1d\xfe\x96\x9e\xffe\xe0\xfev8\xfb;\xfc:\xac\x97\x02\xb3\x04\xe7\x0fgH\x9c\xaf\xe2\xcf\x17\xf1\xe7\xb7\xdf\xc4\xdf\xbf\x8b?\xff\xe5\x9ck\x03\xa1\x99\xf3B\xa4|\xef\x0c\xc9w\xcew\x90\x07q\x80E\x81\x04\xfeF\xf07s\xce\x07\xcd\xd3{\xe6|WV\x15\xd6\x00\xe6\x00\xf0\x1f\xa2\xf8C\xf1\xe7P\xfcy.\xfe\xfc\xaf\xb2\x90W+\x14C\xa1\x12\xfe\x7f95s\n\x1fFd\xb6-\x87\xf4h\xf4\xb7\x8b\xd1\xf9\x1f;\xc3'{_\xeb\xa3\xb0T\x83\x8f\x80\x0e\xdc\xf1_\x06u\xf85ja\xf8\xdftM\xa5!\x1b\xce\x958\x06\x80\xd3\xe0(j\xd6{\xabo\xff\x89\x05\xfa \x88\xcb\x84V.r,\x86\x89s[\x99\x05\x8f\x976\x83\xc8y`\xe3\xdf\x1ch\x84\xd3\x92\x99Zs\xe7-%Uk\xacEE\x83:\x87\xedF\x9d%\xfb\xe8Yri\x93q\xfc\xff\xec\xbd\xeb~\xdbF\x928\xfa}\x9e\xa2\x84\xec8@\x08R\xa4\xe4+mZ\xeb\xc8\xcaF3\x89\xedc\xd93\xbb\x87V\xf4\x87\xc8&\x89\x18\x048\x00\xa8K\xc6\xdeg9\xcfr\x9e\xec\xff\xeb\xaa\xeeF\x03\xe8\x06@\xdb\xc9dv\x07\x1fl\x11\xe8{\xd7\xbd\xab\xab\xe8\xfa:\x17<\x06a\xa6\\\x8d\xc9\xbc\xa2S\x95\xa6\xe4\xb5\xd2\x1b/4R\xa7\x94(\xb7\x1a@\xdde\x0e\xc7\xa1Q)I\xe9\xdb\xec3\xe2\x12\xbaF,-)\x05^\x05i\xb0f9K\xe1\xebm\x1a}M\x19\x05.\x19\x04\"gU-\x81\x80\xc9Q=,<\x01_.\\\xe7\xc81(s[\x94Q\x8b\x14g\\h\xd3\xea|\xe5xp\xc4\xe9\x02\x8c9a\xa8\xd7\x8f(S\xc6&\n\xf3\x9a\x97z4\x1d\x9e\xc3\x04\xff+\xaeV\xbd{\xb7\xbfD\xf2d\x18\xf0%\xa6\xfb\x99@4\xf89 \xe3Z{|\xf5x\x91\xcbA\x9e\x86k\xd7\xf3a\x0fS\x8d\xcb\xb4\xc54\n>\xe6\x06\xf3\x17\xef\xe7\x02&\x90\x91#\xc3\xa5Ew\xbd(\x07\xf0\x16\xcc\xff\xb2\xcc\xf9/\xeb\x02\xc3\x05J\xc1\x17\\\xf8>\x92\x81\xd0\xa4\xd4\xc1\xdfV\xa4\x8e\x1c\x8e\xe0V\x80\x9bV\x18\xc3\x96\xe6\xa9;\xf2T\x10n\xe3\x07(\xa2\xad\xc9N\x1c\xa7\xd2\xc5\xdf?\x8a82e\\\xac-\xfe5\xd7\xd6\xcd\x8b\x82\x91\xffl\x8by\x02\x13py\xe5\xeb\xe9\xf0\xdc\x1b\xe4\xc9\x0f\xc95K\x8f\x83\xcc\xe8>^\x15\x08O|\xa0-\x15\x13\xbb\xaey\x1f@m\xb4x\x19\x81\xab\xa6\x18\xc1\xf0r\xb0\xc6H\xea\xfb?q\x96=\xfd\xe9\xdf\xdf\xed\x9f\xf7\xfe]\xfc\xbfo\xbc\xef\xca\x87\x8dn\x83\xfb\xfb\x0e\xc2\x8e\xea~\xe8\xc3\x81a\xd4{7\xd4\xdd\x9d;\xb0\x9e^\xe3\x8dZ\xb74\xec\x03\xaf&\xd5V#\x91\xd6\xe7\xb0\x87m\xf1-,\x9a\xdf[N\xaf\xcd\x97t\x95&}\xe6\xc3\xb1\x8f\x9e\x87\xfd\x91\x8f\xde\x82\xc3\xc7\xf0\x0c\x9e\xc0F]\x85zfNP\xc6\x1f\x81\xec\xeeK\x1c\xbeD\xf4\xcd\xf4\xd9\xb9\x88/\xdc'tz\xcf\x87\xf4\x12\x9e\xc0{z\xcd\xfb{iP\xaa\xb8^J-\x1e\x13)\xa1\xcaGpY8\xffpJ\xf2\xef\x98\xa9\xbb\xf6\xd2\x87\xf7\xa2\xdf3ZO\xbcw0\xf4\xe1\xd8S\x90\x81\xaf\x8e1\xa1}YM\x98\xb3Y2go_\x9f\xaa E\xee\x99\xe7\xc9\xb5\xb1(\xbd\xda\x82-\xba,\x18_\xf2\x97\x8f\x8bi\x96\x17n\xf1y\x0bG\x15d\xb1K \xfce\xddG[\x95\xf7\x95Uy\xef)\x12\x94f\xec\xfb$\xcb]\xaf\xae\x14\x95\x7f\x7f\xf8\x00\x8e%\xb3\xd6+<\xd7&\x9c(U\x12\x8e\xe7\xce\xb9\xe9[\xe9\x974'\xf4adP\xd5\x11\xec_\x99\xef\x81+\x00\x7fS\x1d\xb2\xa0\xec\xfb\xef\x06\xfb\x9e\x0f?r\x82\x83\xbb\xe8\xc3\x1b\xb9b\xb4\xa1?6\xee$\x88Y\x9e\xc2\x04\xdeL\x9f\xb5\\\xa2?Et<\x15\xd4e\xdezq^\x0d\xffgA\x85_\xd0\x10_\xc3\x04N\x15\xa0\xbd\x80'\xf0\xfa1\xbc\xe0\xa3<\x1d\xccVAz\x9c\xcc\xd9\xb3\xdc}\xe1\xc1S\x18\x1d<\x80#\xf8\x19z\x13pn8\xcf\xc5?O\xa7/\x1a\xc6\nrY\x7f\xee\x97\x8b~ \x19\xc2\x198\x1e\xf4\xe0\xd2\x80\x15\xcf\x8b\x12\xedc\xb9LY\xf0\xbe\xb1T\xdd\xbc\xd4\xfc\xa5\xfe\xd6\x88GO\xe1\xe0\xde=\x99\xeeA\x1b\xbd\xe3H\xc9\xc0\x86\xe8eV\xec\xc3+-vvQ%\x1d\xe4\xc9\xb3\xb3\xe3\xd3\xd3\xf2\x17\xd3\x05b\x0e2\x7f\x93\xbd\xa0\x15\xe6\x08\x9c1\n\xa1\xea\xcd\x98\x83\xbeq\xbe\xdfu%D:\xe9\xfb\x0ez\xf07]\xe8\xeai\x8d\xf0))\x01\xc8\xba\nRb\xf2\xcd\xeb\xdb\x07\xce\xbb9\xccp\xea~)\x08\x9d\x06H\x97^+\x1f\xbf\x9a\x9e\x9c[.E\n:\xc5i\xd6\xac\xe06\xad\xa4\x8a/\xf5/\xbc\x8e\x95L\xf1\x8e\x05//\xb8\xd1/\x8d\xa8\xcf\x1b\xfd\x96\x8b\xd8q\x8dm\xfe\xd2\x80\x02\xdf\"\xc9\xff\x05\x97\x05\xabg\xb3`\xc3x_\x8a\x17!y\xfe\xc5#\x84\xfa\xd6L\xde\xeb\xf0^\x97A\xffR\xe2\xad\\\x92/\x18\xef_\xb4\xbd&\xcb\x9e\x92\xbe\xfeR\xe1\x8aC\x1f\xfeR\x05`\xde\xfc\xf7\xe5\xe6\x8f\xaa\x88\xaf\xad\xe9\xf7u\xf1]u\xf7\xbdW\x11\xb1\x8b/RH)\xc6*\xcb\x94\xa4||\xe9\xd5G\xfd\xfd\x8eb\xfdeQR\xd3A8\xb1[NO\x10\x90\xcb\xb8\xa1\x82w\xab\xd2\xa6\xfa\\9\xabj62\xbb\x18\x0d\xc8\x04e\x05e\xd0\xea\xd8\x04\x8d\xbf\xaa\x88\xb54\xc1&R t\xaf\xbfA\x0f\xfe\xda\x80\x89\xba\xba&\xf43\xfc[\x1a\x16+JP%^p\xdd\xc8i:eU\xd4\x05\x05P\xc3\xa0\x992~\xe2?\x06Lc\x9e\xa7\xc5\x199|\xb6\x1f\xfa\x9c\x88\x92 \x7f\x02\\N\xae\x03\xae\x8aM\xac4'\xec\xbbNhc\xf3&\xd4\x0b\xa6Z\xcc\xe2\x95\xadPh *\x1b @\x96\x87YP\xed#2\xcb\xdd!\xf5\x14+\xe6\x18#\xc1*\x9c\xd1\xb0.\x86\xe0p\xberD\xc0\xc7r]\x0ex\xfc[\x0f\x8f\xad\xb6r\xe2\x18\xa8\xabR\x94/\x14-\xca\x16ij\x0fB>Ht7/phz\xf4\xd5y)ZOSLQ#B\x96\x89\x8a\xc7\xe5E\xec{\xab:q\xber|p\xfexp\xe8\xe0\xd7\xd4FEL\x87<\x96\x83\x18\xdc\xa2\xf2\xe1\x8b~.\xe3)\xba\xd5\xd2\x97\xe1\xf4\xc7du\xac\x18\x1d\xcd6\x91\xdcl\x16\x85\xe24K\x1b\xa1O\xd4\xb0\x81\"\x97\xe2\xb7`\xbb\x14\xc2\xa5\x8aQ\x9e\x8f\x14e\xf8\x18\x02x\xa2\"\x84>\x86\xc0\x9ef\x1d\xfdO\xa6\x81\xc9\x83q\xba=\x17\x086\xdd\x9e7\x8c\x8eB\x93\nQ\x02\xbd&V>\x97\xaa\xc9\x96\xc89H\x11\x0cH\x1d\xf5i\xdc$\xae\xcb\x0eL\xe1\x1c\x85\x82\x90\xd4\xba\xd1\x9c\x93\xd5\xc3\xac\xa2Uu\xf8\x18\"x\x02E\xd6\xf9\xa8Y\\\x9c\xc1\x04\xb2id\x11\x17\x1d9\x16B\xb5\x19\xe1\xf1tF\xd1\x08f\x06\xf1\xd5z\\\xbe\x9c\xc6jf\xe2:zI\xc0\x88\xcb\xd2E\xacNN\xeb2\x86ya[6\xadXW@g_\xf5\x8bHU\xd3\xa2\xa3\xb4\xbe\x9c\x16u\xcem+Z\n\x96T\xdd\x9e\x0dm\xcf\xa6dB\xda\xb4\x1b\x1e0\x04\xf1t\xd3\xa0\xcc\xc7\xd39\xed\xc8\xdc\x12K\xcc\xf8\xb6\x11L;l,\xa1\x82f\x95-\x16\xc8\xe7\xb8\xc09\xf8\x87\x0f\xb0./\\i?\x99\xfaQ\x9f\\CD\xb7R@D\x97U\xc4\x16O\x9a\xf4\xf7\xb9\"\xb0\xd2X\xee\x9e\xcb\xa4\x8a\xb8\x1a\x90=\xc0\xabEx\x92O1\x83\xa2\x162*V\xd2E]V\xd6\xaf=$\x07\x1c\xa8VB+\\)\xe3\x03~]\xe9\xfe\xf8\xf5\xcf\xa5\xf5Y c\xc3\xbe!\xdf\xbbmC\x94\xf0\xcf\xc4\x9f\xbcM)\xff3\xfa\xcb\x17\xd8G4LL\x93+\x0b\xb14\x922\xfc\xc3\xd7\xb1tR\x999\x13\xeat,}+\x18\xfeQ\x9a\xc2\x87\x0f\x107H\xff @\xfc\xaa\x8c\xe8\x16\xc1R>x\x04\xd8\xa2\x03\xf0G\xd1\x90+\xe8\xc1m\x87\x05T\x18\xa1y\x99\xe8\x02\x91\xa2\xd4\x9f@\x83\xe4IU\x99\xce9\xe2(\xa1x[H3\xf5\x05\xb8(\xed\x173\xb6\xc4:\xb5t\x0d\x13\xb8\xe0\x8d\\\xd2\x16a\x9bD\x17E\xedz\x9d\x13\x98\xc0u\xfd\xf5MmR\xdad\nL\xe4\xfdL\x0d\x11\x17\xcf8\n\xafJ\xb4\xa0<\x90z\x1b\x1a\xb9\x06:\xfc\xd0X\x8bA9?\x13\x1c\xa5\x84\xa7\x1a\xdc\x92sN\xb1\x08\xae\xe0\xe77\x1c\x81\x8f\xe8\xbf\x89\xfc>\x86\x1b\x85\xb0\xf4\xca\xf34t\xe2\x0d\x97YM\x99@P_\xac\xdc5\xabu\xbd\xa2\xaeW\xd45\x93]\x17\xb4\x82\xa9\xae\x15q\xc2\x0c\x7f>n\xedu\xad-D\x135+^\xef\xc23\x13\x01)\xca\x90R\xa6\xba\x8e\x15\xb6[ B\xa9.\xbe<\xd2\x7f\x8c\xb5\xba>t%T\x1c\xbc*WY\x903\xf0\x8d]\xa9\x13[<\nso\xe8*\x8b\x0f7\x83M\xb2\xe1\x18\xc9\xdf\xdcH\x17\x96\x95\xd7\xb5[K\x7fx\x08\xffb\x1bE/\xd3\xb71Et\x9e\xbb\xb2\x19\xa3|\x8c\xe0\xe7\x95\x17M\xad\xfa\x8d\xe4A>\xb8\xaf\xb8\xd2\xbc\xe7\x16@H\x7f\x15\n\xed\xbf;\x1eyD\x17\xdf\x04b\xfc\xbb#\x8e\x92\x14\xf1~U4\xac:+\x0d\xe1U\xc1\xfd\x1a\x88`\x87\x85\xf2A.\x89[`=\x8eF{/\xe9?\xdf\"E\x93\xb5\xf2p\xa4\x13\x901g\xa2\xa8\xb1\xc9\x11\x1c\x15\x83\xc1\x8f\x9f*\x02\xee\xdd(xQ\x93\xdcT\xbd\xf6J\xbd\x8a\xb1\n\xad\xb5\x18D!\x9dJ\xd2\xd1*\xe9+\x99\xe5\x98v\x1e\x8dw\xfd\x91\x87^\xb0\xefiA\n\xca.\xff\xba)\x0c\xfaB_w\x06\x84e\xc7\x88q\x03\xf9\xcb\xd3\x10\xf0X\x9c\xef\xfa\xf0\x12\xfb\x92\xb2\xe6Kx\x8a\x12\xe8\xcb~\xdf\x03\xd9\x0e\x1e\xc0\xdeL_\x9e{\x9c\xd4!L\xcd\x98\xfbR\xdc\x7f+:\xe0J\x7f\xf9\xb3O\xa6\xe81<\xc3\x81\xd5>\xf6\xfb\x06Z\xbcG\xe7\xd5'\x16\xc3\xf7c^\xed1<\xf34*\xcb\xc7Pi\x89\xb2\x10\xead\x9a\xaf\x95\xb8\xfb\xf0\xf0\xfe\xdd\x07fM\x8ck\xfc\x87\xf7\xcd\xdff\x18f\xdc\xf8\x89\x83\xf9\x81\xa5\xda\x867\xf9\xd0\xfcm\x0e\x13xP\xbd\x13'\x1f\x8ez\x0f\x0e\xcc\xdf\xb8n9:\xb0\xb4\x8a\x91\xf1\xfa\x16]s\x89~\xc97q\xbf\xbfo.\xc0\x05\xa1\xfd\xe9O\xefn\x0e\x86\xfdw7\x0fN\xce-\xe5.\xb1\xdc\xbb\x9b\x83\x93w\xdb\xc3\xe1\xf0\xe0\xdd\xf6\xbb\xef\x86'\xfc\xdf\xfb\xa3\xf3\xfd\xa5\xb9\xd2\x855\x8f\n\x7f\x92+\x96.\xa2\xe4z\x0c\xceK\xf5'Em\x8c\x19\x9bgp\x1d\xceY\na\x9c\xb3%K3\xc8\x13\xd8\xa4\xc9\x8ceY\x83b\xed\xc4I\xde\xbf\x0c\xb2p\xe6\x8c\xc19\x8d\"\xb6\x0c\"\xd1*\x17\x1dn\x1e\x0e\xc1\x8d\x93\x1c\x02\xc0R\x80h\xb4I\xc28\xf7\x9a\x9a\x0d\xe3\xab \n\xe7}l \x9b\xa6\x17\xd4\xb49\xf1\x9d!\x9d\n\x08\xc55\x82>\xcc\xcc\x9f\xb9\x8e\xfac\x90\xaf\x06\x8b(\xb1\xe5\xae\xe4:\x01\x19\xb5\x07\x8b4Y\x1f\x0bo\x1a\xcd\x9dX>\xca\xad\xf8\xcc|<\x00*\xc6\xfe\xeb ^\n/\xdc\x8b)3\xdaE\xed\xad\x1f[o\xd4A\xd5\x1e\xaeB\x85\xa2I|z\xfe\x18b\x0c\xc4\x9eR\x84X\n]n1hI?\xe5\x9d\xc6\xf6\xbeql\xc5\xb0\n\x89\xc2\x0e\x07\xa9\xe1\x00P}\x93\x02y!\xef\x82<\xf8\x89\xb98\xd5\x03\xf4\xfbC\xceON=)\xf4\xe0\xd8\xa5\x13Su\xe6r\xe9s\xc9\xd6S6@\xca \xeb\x15N;;\xcd\xfe\x99}\xdf\xd5\xb6P\xac\x06\xda\x0e\x1f\xaf:\x0d}\xe1D-\x05\xef\x84\xae\xa9\xb9\xa4jk\xee[I\xaf\xe7y\x1c\xb5\xee\xdd;xt\x9f8\xc7\x93 \xdc\xbb\x7f8z\x84R\x0b\xaf\x08G\xfc\xc5\xc1\x10\xe3\xa2\xdc\xbf{ot\x00\xe24\xad\xde\x96G\x01\xce\xb8\xbc\xea\xba\xa3\xe1\xc1!\xdc\xe1\xbb\xf7\xe4 \x8c\x86(\xc5\x88w1\xffq\xff\xde\xbd\xc3\xfb(X\x89*9\x17\xa0\xb8r0\x06\xf5\xe6\x0b\xc2\xd2K\xfbj\x8a\xf6\x10\x13\x9a\x8f\xe4\xe4#O\x9el\x00\x05\xfa\xbd\xa1\xa78\xd7{\xa0\x0e}\n\xa3!\xdc\x01\\\x9e\x0f\xb4\x1dB\xa0\xa1\xb5\xff\x00b\xe5\x18\x1d*\xf2&\x0c!\xcd\x01\xcf\x02\x05\xb4\xed\x08l\xaf\x1aQM\xcd\xa5\x07\x07\x07\xd0\x83\x07\xf7\xe0\x1bp\x19<\x81\x83\xfb\x1e\xf4\xc1u\x87\x18\xcd\x0c7\xfb\xden=\xbf\xb1\xdd<\x90\xcf\x95\xb8\xfd`I\x89\x82\xb8\x80\x98 Gp\xe22\xd8\x879\x06\x95\x03\xbe\xae\xc2G\x81\xde\xe7\xdec\xdc\x8fk\xf8\x06\x16\xf8\xf91G\xe4 D\x1e\xae6\x95\xban\x06\xbb\x13\x97\xe3\xbe{\x8d~3\xf0\x0d\xf0*._\x99\x8d\xb7\xdb\xc4\x7f\xb4\xc3\x98\x86\xdaz\xce\x18L\x075\xf7a\xe9\xc3-9\xe2\x98\x8c\x9a\xf2\xb9\xd0I\xb6\xb5\xd4\xb5\xf9\x16\xbe|8\xbf\xba\xb2\x7f>\xae\x1b\xc8\xe4\x83\xfb\"(\x85\xeeA\xbd\xf6f\x82\x82\xd0\xf3\xe1\xc4\xbdF<\x86\xa7\xc0'xc\xe8\xea\x86\xf0\x9d\xca\xf1\x89\xfe\x11\xb3\x03_J\x0b\xd1u\xaf\x87\xa1\xa7n\xba\xfa\xfcA\x81\xfb/\xdd\xcb\xddp\xfc\xf4sq\xdc\x87\x0b\x9fC\x9b\xb8>QMr!\x1f\x04\xccK\xe9\xc3\xf5\x0c]\xb6\xa4\xb0\x96#\n\xa3\xa8$\x84\x83U\xc9{\xe1\x92c\\\xe0\x11tN\x83s\x8e\x9e\x02\xd5\xde\x13j\xdd\xb85\xaf\xa0R\xc7)\x06{\x99\xc0{\xd5g\xa2\xd5^{\x84\xd9\x97\xed\xa8\xc5\x91)k\x19\xdcS\x91\x81\xfc\x16\x9e\x88,\xe6\xbc\xd6m\x837\xa8h\xba\x0fy\x81\x1a1G\x0d\xf7\x02c\x82pBn\x02\xda\x98C\x12U\xe4\x84\xfe\x82\x96rk\x1a\x9f\xb5o\x10\xa6\xc7\xd2\xea\xe2\xf8{\xbd\x18\xa1\xb8\xde\xef-P\xda3\xfbb\xc9\x07g\xc6IK\xec\xa3\x8e\x1a=\x96\xc8\xcc\xd1q\xce\x919\x14\xc8<\xe7\x0b\x17j\xc8<\xc70(\xdec\x98\x0bd\xe68\xb8\x81>\x87<\xa9\xe8,\xfd\x02\x04^\xb9K.\xf3\xc2\x1f98\x0e=O8\x15\x9c\xb8\xc7\x0dF(O\xf9\xb4\x13OAj\xafW\x97\xf0\xf4\xe7c\xaf\x17\xf3R\xf5\x84S\xd0\x86\xc7\xef\x9b\x84\xa4\xea\x9b\xadU\x17\xbebi\x16&\xf1\x18\x1c4\xe6X\xb4\xd0\xed,;0\xe5\xb2\x96\x0f] \x1a\xc33;\x9b%\x1f\xb01\xbc4O\xd5b\xb4\x10\xed\xfeh\xfe,\xdb<5\x7f\x16.\xf6\xe3\x8e\x12\xb1\\\xd8\xee2\xb4V\xebv\x90\xb3,\xa7\x98|\xceM\xdc\xef;\xd0#\xd2iJ\x99-\x9f\x8f\x16\x02n\x9b\xcf\xdb8\xa4\x19w\x1b\xdfg\xcdh\xa9\xcd\xe8GW\xe6\xa6\xb9[\xb9k\xf8i\xf3\xab\x83\xac\x0fZ\xbeD\x94n\xac\xa6Y\xf9\x88qn\xeb\x8d\x15\xc1nP,g\x14\x02\xd3\xd5c}$\x15\xffC\xdd\xe3\xcf\x90\xe6\x86\xffy8\xb2d\xbb\xe9\x14\xdfC\xef\xbc<\x1f\xe9\"\xd8\xb6\xabb\xbe\xa6\x0c%\xe5\xb9\xf8\x95\xe6\xc9\x91\xaak\xf3\x16K\xab\x88\xf58i\xeb\xec\xc56\x8a:v%\"\x85vjR;1\xde\xad\xf5\x1dC\x89u\xda\xcb|@\x84 \x0d\xf8\xf2\x16z\xec>|\xf4\x88+\xb7\x03\"Kd\xdd\x97\xde\xc9@q\xaa\xba%\xf3.\xf7\xaa^+\x91,m\x8a5\xd2\x12\x99J%\xb1\xa9e\xf0\x81\x96\xb0\x87>\xd4l\xf8x\x84\x81G\x89w\x1cbzxC\xd8\x99\x18\xf2\x8a\x07\x86L\x90\xa19M1zC\x0c\x853D\xe5\xc89\xa8\xb7\x8cqE\xde\xf5\xf6+\xc29\xd3\x0ckU;\x8ct\x01\x1d\xb1\xc3\xca\x888\xac;1\xe6\xa3\xd1q \x1c\xac\x83\x9b?\xb3[\x14v0\x85\xa9zch:\xd2\xcdW\xa5\xaf\x99\x0c\xf5\x19I\xc9 \x13PV\x1bQ\xd61J\xa4\n3\x8c,\n\xbd\x9e1\x833zLJ\xa9{\xe5\xa3\xc9\x9eMg\xc5\xfd\xff-\xfaQ\x0fm\xc6\xc55\x17\xaf\xd5\x81\xa7)5\xc6\x1a\xed\xd7p\x04\xee\x02\xcb\x16gTk!D\xa9wk!\x8c\x8eEY\xfa\x8c\xc7\x94s\xf3\xed\xe1\x85\xe7\x83\xe5b\xf1\x86k\xd6n\xe0\xc3\xdc\xa3\xb0\xd3\xd39\x1e\xb4\xf3\xffI\x16[a\x1cTr\xe0\x9c\xf2\xff}X\x9d\x17\xafV\x16\xec\x87\x02a\x82\x02\x0f\x8a\x89\xe3\xf9\x97\xcc'6\x083\xfc\x9f\x83e\xab\x8by9Q\x90\xb8\xba[CJ\x19&\xb2\x1ecgw\x02\xa1\x8f9m\xf4IWYld\xf8\n\x030atO\x89\x94\xcdA>\xebpB\x95/)gTKm.)\xe5\xe9\x96a\x94\x8bE\x10e\xcc`\x8a\xa4\x06\x05>6\xe7B\xc9\xbe\x0b\xe30g$\xb1\xd0\xc1s\xbd\xbd9[\x04\xdb(ol\xc9q,@\xf3\xd1\xcc\xce\xeb\x84\xb2\x16sX\xb4l\xa7\x97\xbe\xc6\x0dA\xdef\"\x91\xc8\xb3\x1c\x7f\x1eA\xe8\x06(\x9b\xa8\x01\x046\xea\xc0I\xa4\xe1\x16F\xea\x06x\xb5\xc2\x90wW\x8c8qI\xe3\xe3\x9d\xf1\xbf\xba\x08\x92R0\x83\x9e\xb9Of\xb22\n\xa3/\x86\xc2\xb2\xd7\xe4c\xa9\xde\x1c)U<2W\xdc\xd24\x1bF\x84\xf0\xf2\xfb\xa2\x04\xe6`o&\xd6O\x0e\xfa\xeb`\xa3\xe5\x92\\\x07\x9b\x1a\xdb+\x9d\x85M\xcfKV\xcb\xe2\xb8%\xed\xf5<\x99\x035w\xd94\xe5\x05-\xfe*\xd5d\xa8\xa0q{\xcd\x81\xbfy\xbd\xae,\xf9O\xcba,\x99\xd7Y\xb6\xa1 \x97\xbfR\x1a\xd4\xda\xea\xef5\xeb*fb-\x9fn!0\xe5#\xc6\xee\x96\x82.\xe5\x82\xde\xc5\xec\x1ar\xb7\x80(\x97S\x8e\xcb0\x0e\xd2[\xc7\xf3\x8a\xd7\xcee\x90\xb1\xfbw[-\x07V\xa5\xe8\xde]O$M\xed$\xce^iY)\xcdA\xdd\x0f, \xcf\x0f\x87\xe6\x84\xe7\xf7;\x05\xf47\x1c\xc8(\xde3\x01\"\x9d1\x14\x19\x0bb\x91\xb1 uC7\xf6\xd0\xc2\xaa\xc4O_$ \xc6P\xacB\x17\x8e\xd1\xbeV\xb8\xe6 un\x81*}@\x9f6p\xc9 \x84\xbe\x8c\xd7o\x14\xc7`\xf0\x84\xe6\x81\xf0\xe0)\xad\x1a\xaf.j\xa5\x9eN\x14\xd4\x90\x13\xf4n\xc8p\xa5%\xfe5E\x84\x1f\xd57\xf3n\xdb\x86YfL\xb9\x16\xe0\x03\x84m2\x92\xde\xc0^C\xc3\x16\xed\nt2\x9b\x9bQ\xd0\xaa\xaf\xc8\x95-.\xfb\xf9\xb0?\xfd\x89\x02\xf2\xbd\xeb\x7f\xf5o\x7f\xbc\xf3\xf57\xbd\xc1\xbb\x9f.\xfe\xcf\x87\xff>\xdf\x0f\xa5m\xc5\x12\x88L\xfaw\xccVA\x1a\xccrtD\x81\x15\x0b\xe6,\x85E\xc8\xa29\xc4\xc1\x9a\x99\"h(\xf2_\xb2\xd2\x94\xd1\xda2\xe7\x8ef\x87\xb6iW\xf5msg\xa9\xb93\xc9 \xcc\xd4/f7\xba\x19\xc3F$Ak\x88I\x7fK\xbbqWL\xd0\xde\x16\x7f\xe6I\xcc\xc6\xba\x8d\xca\xe0\x10\xa8?\"6\xbb\xd9\xb0\x0b5Rk\x7fkH'%\x06\xbc\x1a\x849\x85\x88\xa7s\xf9)%/\xa5\xb7y\x92\x9e\xef`D\xab\x8f\x13\xe3\x97u\xda\xca\xc4\xbc\x95\xe8\x9f\xb8\x0e6\xa8\xf6\xfb\xe50\x81\x89\x0c>z\x12\xccV\xed\x81\xb1Us\xc1f\xc3\xe29%\xbb\xa9\x8f\x98n`\xa3G\xb5.\xab \x85\xc0\xd0]\x97\xbe\x18:\x98\xb3\xe9\xc8\xe4\x94T\xf4\x88{ \xc4\x93%\xcb5\xa1\xe4E\xb0f\x99\xcb\xbcz\xff\x9d\xe7:\xcd\x1b:\xef\xb4G\xa1\x9d\x9e\xb1\xc1e2\xbf}\x9b\xb1\xb9\x12\x1e_\xa5\xc9:\xcc\xd8 exC\xbaB\x9c\x9eE)\x0b\xe6\xb7\xc0\xffuL\x87jE\x8b\x18\x90\xad\xd3\x00\x83f[\x1e\xbb\x96\x83j\x0f\x02\x0e8\x84$\x8e\x92`\xde\x05\x05\xf8\xc3\xc5\xa6\x94e\xdb(\xb7Y\xe4\xb1I\xc6W\xa0k\x9b\xb1\xcb\x06X\xa1\xb3\x11\xbc\xdb^n\x9bI'_\xab\xef\xc2\x88\xbdFva\xa6R1\xca?&\xe7$I\x0f\x06|w\x9feZ\xb2c\x12\x97:\x8d0k\x826\x94\x9dj9\xef\xabn\xfdP\x99Q\x91b\xd8-\xa5\xe9l\x98A\xc6\x08t\xf5\xaa\x18\x82B\xa4j\xec4\x95\xa8)K\x05\xe2\xa9\x0e\xeb2\xdc\xd1E\x18\x87\xf9\xb7\xc9\xfc\xb6\x93P\xcf\xd7\x85\xaa\xf1\xb6N\xe3\x10\x19\x97\x91\xc6\xe9UL\x07\x01\x1e\x14\x0d\xbda7\xd8\x90\x9d\xf3i\x17\xc1.\xa3\x04\xc3\xda|\x1b%\x97\x9a~\x15f\xaf\xe4\xdf/\x17B^\x91\xed\xf3\xa2\x9d\xdb_$\xe9\xfay\x90\xa3\xf3\xf4w\xe2\xef\x8e\xfd\xc8\xe2\x9d\xfb\xa2\xcb\x05\x18\xcc\x15-\xaco_\xffp\xa6\xbd\xea\xd8\xad\\>M\x9d\xea\xd4{P\xa0\x0c\xe0\xf5d\xb9\xb4\xebJ\x07\x1an\xc1\x84\xe3\x8cL'\xeaC\x0d\x1a8\x1c\xf3\xf5v\xa7\xc6\xfa6\x97Uh\xbe\x07.\x1f\xbcXT\x1e\xf9\x87\x0f\xb0\xa7u\xd0\xb0f\x80WH+\xb2\xac`\x15\xdb8\xdbn\xb8\xa8\xcf\xe6\xf0\xad\x9c\x0d\xaf\xd9\x16\xfc\xada\x95\xecH!s\x94T\xb7\xd0\xe6\xe2H7(\x90Lf\x9ci\xbb\xce,\x89s\x16\xe7}\x1a\"\x1e\x1a\x9a\xb0LE\xc6\x11u\xb3Z]\x1f\x9c\x9c\xdd\xe4\xfb\x9b(\x08\xe3\xc7\\\x8c\xcfX>y\xfb\xe6\xbb\xfeCG\x05\x97-\xb0H\x86\x8cRo\x06\xbc\x95.\xdd\x18\xaayx\xd1\xf5\xd3\x91@\x8d\xa6qz\xc1f\x13\x85\xb3\x80S\xb6\xfd\x9b\xfe\xf5\xf5u\x9f\xa3x\x7f\x9bFda\x9bWgm\x94`\n\xec \nxI4\xa5\x95\xbf\xca\xeb9!\x8521\xef/\xf2\x1b[@j\xbdPy\x11\x0db\x90\xc8\x04P.\xd6\xa5=\x0dz\xad\xcd\xb6\xe2v\xa7\x9e$\x954`\xe1,\xd9r\x8d1\xc9QdS\xe4\x17x5\x082\xe0\x8bnC\xc8\x1d\xc6\xcc\xb1\xadj\x9d\x85BP-\x91\x97\x0e[\xac\xf3\xd8\x1a%8\x92;\xcfq\xd4\xbeO\xa5\xe5\x17X\xc7g\xebz\x83|\xc5bwk2D\x8b\xe1\xe6D\xfeZh\xd2m \x8ak\x05\x06\xc1Q\xda\xfb\xd85i\x88n^\x98\xf74Kx^\xb1\x84OQ\x956\\yq\xf3i#\xeb\x95\xda\x8b\xddU\x0b*+\xa6/D\xa7\x95\xfb\x0c\xb4\xe7\x00\xbe#\xda\x97\x91\xddB\xd1uQ\x8fj,\n \xae\x15\x9dt\xb4\xe7#\x94\xa8\xbah@\xd5\x9f\xb3$\xfe\x9c\xb6\xfft\xf6\xf2\x05\xf9qX\xa9W\xe9\xbdMY\x98Y-\x18\xf2\xcc\xc5U'\x80\x7f\xff\xe8\xa1\xeaP_\x7f\xa4\x15\xba\xb5\xc4x\xe6\x0f\x06\xf5\xddhK,\xab\xeb\x0d\x92\xd06%\xb7\x85m*S\xed\xccR6gq\x1e\x06QFn\xdf\xc5o\xaeF \xf9\x00\x8a\x00\xb7\xe2\x05\xa1X\xe22\xf9FE\xfe[\xb3|\x95\xcc\xb11\xfaS\xbe'\x87\x19\x86\x7f\xf8t*\xaa\x1cx4I\x18\xef\x1cC\xe9\x9d_\xb57\x18\xf6P\x13\x0ci\x96\xca`i^~\xc3\xec\xf3\xd2o\x19\x98\xb3\xf2\xceI\xd6a\xee\xf8\xb0W,NE\x98\xb2/Vn_\xacv\xd2W\x98;\xf3\xe4\xedfc\xcf\x04\x00\x05\x1a\xdc*\x8f\x0ftF\xef\x8f\xb8\xbcit\xe7\xfb\xe8\xe6r0r\xe2\xc5O\xe7?N\xde\xa8\xe8\x87k\xe9\xf8\x84\x7f\xa8\xc2\xe2\x87\x96\xc5)e\x0b\x96\xa6( \xd0[\x17\xdb)BRj\x1d|\x7f\xf2\xecy\xed\x0b]\xc7\xb7\xc0<\xaa\xdex\xd12\x8a\x92k6G\xb6\xf0\x1f'o I\x81\xb7\x06)\xfb\xdb\x96eyfB\x08\"rR\x83w\xe3nV\x99E\x07\xab\x8c \x83MV{L\xb1!/\xdf\xddq\x0cV\xc3F3B\xabxP\xbam8i\xbam\xc8\x9f\x94.\xdd\x93\x05]\xcb&\xd2\xc3l\"\xd0V\x1d\x0f\xf7\x04\xf3\x9b8\xc6\x06\xec\xcc3\x97\x16P\x83[\x10\xd7\x91\x0d\xaf\x13\x83\xf4 \x16S[W\xeb\xf6\xa6}_\x93\x86\x0d\x951\xf4\xd3\xa3w\xf1\xfe.\xbbY\xdb\xacq\xdb\xd5\xd0b\xa3\x08\x8a\xec\xe2C\xed\xb6\xbf\xfeH\x7f\x07\xb9qc\xa7\xb9A\xd0\xf7*\xf5\xab\x9e\xb5\xf2\xf9\x9c=\x98[\xf9*q\x84\\O\xb8B\xaa\xf3\x04\x1c\xe1\xea#\x95\xe4,\x0f\xf2-'\xb7\x0e\xfd\xe5`jLN\xf3\xe4\xa71\x1c\x0c\x87\xa2t\xf2^\xc5\x8b\xa5\x8fO'\xfc\xab\"\xe7\xe2\xed\x138TU\xe8\x95\xb49\x14\xbfj\x1da\x9118/\xff,\xc7f\xe7\x05\xbe\xce\xb5r\xfc_\x84\x9a\xab\x90\xa9j@\xd5\xd2/4\xf0\xb0\xc1\x82\xe5\xe68rW\"\x16\xa0\x19*tS\xc2\x18\x9c\x8a%\x01\xa7g\x08w\xc6\x1fy@5\x06\x87\x0e\xa7\xa80\xfaX\xcac*|E_\xcd\x8dp\x85m\x0cN\xa1\xd0h\x8dp\x0d\xa3\xf8\xd9*\x00\xf2'Oo[\xcca\xda\xa1\x03o\xdf7eO\x96\xcfG\x98\x05\xe8R\xd7\xd5\xad~odo\xcb\x8c8\xb6l\xc0R\xaa\xe6k#\xfel\xda\x0bM\xfd\x1e\x83\xa3)\x1aT\xa9\x8e\x9ef\xd1\xa8d&\xf4\x10r\xae0\x95\x9dtv:\x95\xfa\xd6\xb9\xe3\x17.P\x85\x1aV\x7f}\x1c\x05\xeb\x0d\x9b\xd7\xbf\x9e\xc6\xf9\xe8\xbe\xb9\x92\xe9\xfdi\x9c\x1f\x1e\x98\x8b\x9b\xde\x7f\x17%\x81\xfd\xc3\xfd\xbb\xe2\x83\xe5z\xea\xba\x93\\\x06\xba\xeb\xc6\x9d;\xc07\xe9/!\xbbn0\xbf\x99\x81\xc0<\x88\xa5\xf4K\x13V\xda0\xe3\x8d7;[\xe9\x8f>\xb4\xc2\x01\xb8\xd5E\x8d\xc4E\xf3@\xebP\x93h-\x11\x9b\xa8\xf8\xbbX\xd9\x11\xa3\x90\x0cB;\x8f\xdd\xd4\xc2\x82$\xcb\"\xf10\xd8L\x99\xe5\x8e\xa1V@$wO\xa0\x07\x8e\x8f\x81\xb1al\xba\x8f\xef\x97\xc6?g\x11\xcbY\xa7\xad\x17EU\x97|\"\x86\xbc\xda\xe5\xf6\x97,\xef\xd4\xb8\xda8\xb9@\xc4F\x82\x8c\x0e\xbb\xf5y\x8e\xcb\xa9R-\x1d\xaf\x82\x9d\x1c\xd0d\x07\x15\x07<77;w\x96\xfb\xca*\x93l\x80\x80\xf2\xea hk_\x08Ym\xb9Y\xe5SI\x96-z\xf4\xacs$\xe7B\xa6\xfc\xe1\xd4\x18\xe3s\xbaqT;\x957\x8c\x11\x9d\";\x98,\xa4u\xd1vkV\xdf\x8f\xba\x83A\xc3 9\xe0)\xb9p\x904\xa32\xfa\xde\x9bM\"\xfaT\xd0\xd5\xe57\x98L\x87\x99\xd8N\xef;\xce\x84\xc5y\x1a\xfe\x16S\xe9\xb6/S\x0eL\x06\xcf\x0fh\x99R\xc51H\x9b\xa1\xc9E\xc8\xb0\x00\x96\xb3\xf8[\xe4\xf3\xcfO~8ys\xc2\xf9%W\xd8}\xa1\x9e\xfb\xe0\xbc|\xf5\xe6\xf4\xe5\x8b3\xfe\xe7\xab\x97g\xf8\xe9\xd5\xdb7\x8ea\x81fZ\x97\xb3(\x89Y\x97\x15\xd7\xa4\xb2\x19ZP\xfc\x86\x15\xbcL\xe6\xb7\xfa)\xdbi\x1cZ\xee\xd8\x1aWP\xa4\xcb\xd7\xc6\xe9\xa9\x97\xf3\xd2\xcb\xf9gNe^9\xf9o\x9a\x14i\x0fc]\xdb\xb0k\x84\x85\xaa1\xae\xaa'\xf6JB\xeb\x18K5D\xd3M\x1a\x94\xcfm\x1a\x8d\x95\x9a\xb2\xc3*\xcf\x07\x9d\xfdi$\xba\xd1\x92\x91\xc5\xa8}\xa1\x1a\x82\x82\xe8\xcb\xe3X\"h5\x9b\xcf\x98R4q\x16N\xd5\xf3\x11\xcc\xd2\xd0\x95\x88c==\x1c\x8e|8\x1c\x1e\xf0\x7f\x0e\xf9?\x0f\xf8?\x0f\x0d\xe82\x1f\xa4l\x1e\xa6\x1d\xd2\x8d\xcb'\\\xa8\xfc.\x97\x9a\x95O\xb7\x96i\x11\xb7\x94\xbb\xa9Pjg\xc9\xdcz@_\x02\xdd\xae\xfb\xd0\x05\xe2\x9a\x95\xa7(\xa1\xa3\xe6\xc6\xcb\xc6;\x80\x1e\x1b|\xafT\xee\x84\xff|M\x06A\x98\xc0\x8c~f\x9b$\xc6{\x9ds\xfe\x1b5\xe7\xae\xab\xaf\xadQ\xcdi-n\x10v@\xb7\xbe \x99\xc3^\x9aml\xa1(\xfc\x9f?\xfe\xf0}\x9eo\xc4<\xec\xa6\x9apG\xcf8\xd0\xb0\xaf\xb9\x14h;\x1e\xb6\xd2\xa7r\x0dB\xc4\xb0\x13\x91\x92\x8f\x02\x9d\x8d\x1br\xc1\xf9Y\x14\xc9m\x13\x9b\xeb\x8a\xa8\xbev\x97\x110#\xa9\xfe0a|qR\xd1\xf8\xdb\xd7?\xa0\xca\x1c\xc2\x11\x84\x03\xed-\x8c\x81\x95\xfdI\xfe\xb3/\xf6\xa3\xcf+\xb5\xf8\xbcH\x93\xa2\xea\xc8\xd0\x0b\xe6\xe9\x97?\xf8257\x19\xbb\x82\xc7\xe0%x;\xe6\xf8\x08\x16\x9d\xa9\xb1|\xd2\xaak\xe8\x0b\x96_'\xe9{i^\x87E\x10Fln\xf2\xfd\x90\x8f\xe8:\x0f\xd7,\xd9v:o\x97\xcf\x17\xeb|\xc3b7Q\xc7Q \x9d\x7fa\xaa\x1d'\x8cg\xd1v\xce\xe8\xf0!)\x9d\xf6p\xc9*\x1c\\\x87\xf9\xea\xb8tND\x15\xd5\x16\xddn\xe46\x96|\xc1\\m\x17\x05\x17!/\x0c>\x00 B;\xf9G\xcb'\xe4\xea\x95\x80:B\x03\x8b\xbb\xb4|\xb8$\xc9+\xc5sWsoO\xb4C\xb7#:\x8a\x1b\xeb/mR\xa9\x99\xd8\"\xf9\x1cl\x92\xe8v\x11F\x91\xc9+X\xfd\xe5:[y\xd1_\xbfk\x90\xb1h\x01G\xf4\xdfXS\xb1>\xeb\xa2l\xec>\x1a\x9a\xae\xaf\xf0\xf7\x0f\xcd\x17\x92\x1e>\xb2\xdc<*\xef\n\x85!\xe6\x84\xb0\xdc\n\x1e2\x8f!)\xbfUQ\x02\xc6\xb5\x9c\xf7\x9f9\xbf\xc3\x87\xd5y$j\x1e\xf5\xf9\xd5!\xeb2\x0df\xef\x19\x9fHg\xd3\x00f\x84\x9b\x9e\xd7e*\x83\x0d+\x8c\xe7\xe1\x8c\x95Zo\xe7\xab\xd4\x01f\x96\xa3\xe4s]zJ\xd9\x86\x05\xad10@\xeb\xa5\xdej\x19d\xeb\xf7\xd2\x9e\x079+Y\xcdN\xcf^\x92\xe1\xac\\\xd6\x1c\x8dg\xce\xa2p\xcd\x15\xb31\xde\x0e\xae}\x97\xc1n\xf6\x0cR-}K\xc7\x90\x8a\xe0\x13\xb6\"\x7fA]\xfde\x1c\xdd\x8e\x8d9\x063\x96\x86A\x14\xfe\xc2\xf8\\vX\xad\xa0v{U>\x86\xbd\xc8\xde\x87\x9b\x17\xdb(\xca,c@p\xe6\x05\xbe\x0f\xe2y\x84\x91Q*V\xf3J\xa3\xba\xc6\x0eL\x04~Q\xf1\xc82\x1f\"\x9f\x8buE\x88\x04\xd3l\xa4%\xdb\xc0R\xd1\xdbZv\xa0{\x82F\x1eV\x89\xb8Xwe\xba !\xdd\x82\xaft\x7f\x0e\xbe\xb6Tq\xe36\xd6RW\xc2\xaf\x9a\x04\xfdP\xb9LQ\x06\xb4\x15\xa7\x93|D[\x01\x0c\xe8\xfbf\xb8\xe2\xcd\x9f+\xf4\x8fm\x81u\xb0{\x9c_\xa1\x84U\x8f\x97A\xefe \x80\xea\x87t\x10f\xe2V\xc1\x95\xa7\x0d\xff\x08\xa6s\x17#\xc4\xc3\xb8:\x07\x8f#\xfb\x84\xa3\xfd\xdc\xcd\xdc\xab\xd2\xa7s\x18\xf3\x9a\xb1^F\xb8x\\y\x9eA\xa5\xe2\x9b\xbd\xf6\xd1~n\xb2\xe0\xe0\x96\x15\xcc\xf0J\x0d\xd1\x10\xff\x8f\x97-\xdf7\x8a<\x0f\x8f\x07\"\xcb\xd6\xdaU\xdc\xdbJ\xda3\x13t\x808|\x98\xc1\x11\xdc\x0e\xb2$\xcd\xdd\x19\xdf\xe0. \x9a\x94\xa9\xf3\x92\xbc\xdd.\xe1 \xac\x95\xb7[\xafw\xd9\xa4\x7f_\xc0\x04\xd6\xd3K\x8b\xc1\x0b\xdd\xbd\n\x80\x9d^`&\x07wY\xbd9\xef^yp\x04K\x99S\x86\xb9\xbc\xa8\x0f FP\xf3Z\xd0\x96\xcf\xb3V5\x86\x1e\xb8\\8p\x06|\xe7/T\x9e\xd2\x0b\x95\x9b\xb4\xb9Q\x03\xd1\xaa\xbd\x91\xfb_&CfQ\xa0\x91\x99\xa9s\xfd:\xe1\x0b\x80n\xe5\xa6\x83 \xcb\xc2e\xec\xfe\xfd#606\xc6\xcdQ\x01\x99\x02\x89\x07x\x8aS\xdc\xf7-\xbd\xd7\xc8W!T\x05\x05\x810\xba\xd1\x9c\x88\xfa\xab\x00\x03\xa0_2\x08\xd4\xe4j9E\xaeD\xdc\x1b\x0do\x82\x81bjp\x04[\xed\xd7X\xffV_\x89\x19\n\xc4u\xe2\x11\x0c\xea\xcc\x01\x8e\xcc\xaf\xc7\xb05\xbc\xae\xf7\xb5\xb0\xf7%\xf9\x14u\xa1~a\xcb\xf2W\xbd\xc1\x8d\xb5A\x11\x18\xea\xa8\xf8s\xac\xa8X\xbd\x1d\xae\xa2\x1b\xb9N\xb1\xb1G\xda\xdfES\x86\x05]\xd9\xdb\xca(\xa5\xbc\xf8\x83N\x8b\xea\x0d\\\x15;K\xb0\x85\x9eU\xcf\x93\x1cy\x8e\xf6\xb3^u\xdd\xd0\xb7.n\xd0 Jop\xa5\xf57\xf5\xd6\x97-\xab]H<\xdaji/\x8be+^\xd6\x91\xad\x04\xd4$\xdc{\xea/4\xa2\x0bo\x93r\xd5\"\xf3U\xa7\xc8\x15\x89h0gi\xe6\x17\x1dY\xb0\xf3m\xfc>N\xaec\xa1k@\xb2A\xf1g\x93&W\xe1\x9c\xcd\x8d\xf8)\xc2\xb1\xe2\x80\x8b\xae\xa6\xb2\xa7\ni\xb7l\xda\"\x8c\x08\xa1\xd1\xa1\x95s\x12\xf9\xces1/\\\xfd\x06\xae*\x80\xba/&o\xd7\xab\xd5\x07z\xedc*\x82*oF!D\xc6\xc2)\xe8\x98\xee.:\xe1\xfd\x0bj]\xbd\xf8s\x8d\x9d\xa2\xff\xc2w\xb4h\xc2\xc0R~9\xe6\x8a?*&\xa8\xba\x07X@\xbc\xe1lF}\x1csE\x9f\xeb\x15\x8e^\xa7>\x9b\x1b\x98@8\xbd\xaeL\x06\x83\xc8\xb8U\x96\x1f{\x18\x0d\xeb\xce\x1d\xc9\xdc\xabw\x1c\x15\x0f?#\x1e~\x06O\xe0V\xe3\xe1g6\xe1\xf6\x18&p;=3\xf0\xefE\x89w\xc7\xd3c\xe2\xdd|\x07N$\xb7\xcd\\\xfe\x1e\xa3\xf8\xde(\x0e\nG0\x97$\x83C\xd6\xca\x87+\x9f\x0bV\x17>,\xab\x8c\xf5cm]\xdec\x07\xe8f\x16\x19\xcc\x9c\xcf\xd0P \x90.\x98\xcf\xff\x9f-Ko_\xa5l\x11\xde\xf0m8r\x0c1\x9e\xc4\xce\xbf/\xf2 \x0c\xe1\x08\x9eA\x0f\xdeW\"\xfc\xe0_\xbf\x8az\xdd\x82\xeb]\xf4nEN\xcd*\x12~Vn#\xb6B\x1c\xa4\x7f\xe0,v\x0c\x07\x06\xa5\x91\x1c(Qi\xa4?ME\x9au\xd29\xdb\xe4\xab1\xdc30\xc1 \x0d\xd6,g\xa9\x18\xc0\x88\x1d\x1a\nEA\x18\xd3j}1]0\xe8\x10L\x05\xda\xbce\xd5\x0ekl\xeeH\xcb\x92\xb1\xffn\xe0N\x7f\x1aL\xcf{\x1e:\xb2N\xffmt\x8e\xf7\xfa,\xbeW 6z\xdf}7\x9d\xfe4}w~\xfe\xcd\xb9gK\\\x03b\x16\xe5\xc2\x94h*m:\x86\xe3\xd4\x0d\xc5Gq\xa5\xda'\xb2\xc5n0!\x85\xbdb\xd6p\x8e\xcd\x97\xa9\x16\xcd\xacZ`/\x1e\xe8[ \x98/\x0c9Z\x15\x1504\x1a\xa5\xab\xae\xc0\xb0$\xdav\x83vF\xa7\xe2\x86;[`=\xfdQ\xc4R\xe4\xf6VB\xb3\x1b`\x08G\xb1\xa88\xa6\x08\x9e@<@\x90n\x0c\xf3\xcdg\x1cA\x0fC\xe7\xef2\xf3`::\x17[3\xf2\xa1/\x02v\x7f\xc6J\x04\xc6\xa0\x14`]\x0ci\xab\xe1\xdd\x8a&HQ\x92\x10\xa3\xc0E\xe8M\xd6\x01tA\xb0Ry\xb9\x0d\x1c\xa9r\xca\xf2\xa2%7\x1b\x89\xe4\x03\xc3\xc7\xd0\xef'm\x8d\x81@\xd0\x90\xa2\x98\xb3i\xd2\x90\xda[>(9LE\x0c\xb6\xc0Cl\xc44\x08\xd3sO\xb28\x9b{\x99\xfet\xb8M-\x1f\xb4\x18\x97\xc1\xe3H\xf2\x86Y\xca\x82\x9c\xa1\x0eg\xd2\xefl\xcf\x95\x08\xe5\xc7\xb7\x8d\xd8b\x91\x9f\x91+y\xe7\x95\xd7\x81\xb6\xc6\x1e\xc9\xd7\x1a\xfcq-\xcc\xbe\xc7\xd5\x87S 4_\x9f\xc6\xb9\xbb\xf5ad\n\xd9`z\xf6\xc2\xecE\xf0\xc2\xcdp\x88\x01b\x1f\x06\xbd\x17\x06\x9a\xcc\xc31\xe3\xab\x8c\xc2\x8c\x8a\x1c\xc8i\xc6P|\xcc\xe8\xd3\x13\xa4\xc7\x8a\xa9\xc1\x91\xda\xc0iv\x8eQ\xf0\xc7\x10N\xb7\xf8g\xeb\xc0\xcc\x18\xa2?\x1cT\xc3\xc6R\xcdm\x08l\xb3\x0f\xe5\xa3\x9b \xec\xa9\x15\xa9\x98\x9a?\xc3\xcc\xf0 \xf6\x84X\x88\x03U{B\xe9\xbd\xd1\x9e\xa0JX4\x96\xe7l\x07{\x02\x8ei\x10.\xe3$e\xba\xe4\xa7dB\xc3G\x1f\x87 \x8d\x0c\x13S\xacl\xbd\x80\xb0D\xbef\xcb\x93\x9b\x8d\xab}\xf10I\xa5n\xae\x085s\x85\xe4\x12\xbc\x83\xba\xe5S~\xc3?eI\x8c\x83=\x11\x9eZ\xc1\xa0\xf8\xe9#f\xb1\xcd\xb1\xf0B\x0e\x06\x17\xea'f\xa5\xc8f\xc1\x86\xbd\n\xf2\x95\xba0\x8b\xa5\x0c\xefy\xf1ml\xab`\xfcR\x1e\xfe\xd6\x90\xd7\xaf\xd5\xad^\xc0c\xbb\xcf\x01]\xd0\xbc\xccXzE\x1e\x9c\xd3syk\xf3\xf2g\xa8f\xfc\x80\xba<]\xbdQ\x17\xed<\xb4\xb6@\x95\x9cv]\x06\xb3\xf7\x14\xc8\xad4`\x98\x98\xa2mV\x07h\x8a\xfd=\xab/I)\x8b*\xe5\x9cJ1-\xb9\xa471<\x81\xf41\xc4\xbd^]\xcb@\xdb\xce4>\xa7e\xc3H\x0bd[\xb7N\x0d\x19VlQ\xb7/S\x16\xbco\x99\xd9\xc2\xcd\xe9\xbe\x88\xaf:\xe3\x7fm8\x14s\x11\x0b\xd3D\xa8\xdfR{E\xabJ\x81\xaaz\x1b\xa2\xa4\xe1\x08\x81R\xc8\x8a\xefF#q\xa8\x1b\x891\x94\xad,.`\x8a\x15\xfb\xa8n\xfc\xf0_n\x88\x89\xbf4jY\xdf\xac\x85\xab\xb2\x01\xd4,\x1a\x18b\x82\x92\xe9\x98\x96\xda(\xa4\xe7\x83<\xf9\xd3\xd9\xcb\x17@9X'\xea\x85k\n\x14\xa3\xe0\"D\x9epAK\xfdg\xce\x9ar\x8f\x84\xa1\xf2[\xe6\x91\x98\xb37\"\xde\x17\x94\xac3\x99\xb0\xced\xfd~\xa3X\x83\xe6\x18\xe4T\xd3\xec\xbc\xc1\xa2\xb8\x97\xd6.\x8e\xf9\xb0\xf1*\xd2g>\xdd\x9cWt\xd0\x08Mf$\xc0\x94\x8f\x98rO\xc5\xac\xb7\x9bg\x92\x0d\x1e\xd9\xac\x93+\xd6\x90o{\x13\xe4\xab1\xdd\x0c\xdc'\xf3\x98\x81\xe0\xb9\x1b\xfb\xc5\x1c\\HK\xae\xd7\x16\x03\xd2\x95\xc8\xf9\xc2\xe7n7\xaf\x18\xf2ADP$i\xa2\x1f\x86B3\xbd\xd0\x8c\x0b\x89.\x89\xa2\x1cJ[\xe7\xcb\x85\x1d2\x11`;\xee\xde\xd0o_r(\x96\x1d\x05\xf3\x86u\x87\x1d\xd6\xbe\xb9\x15\x11}9\xd5X\xa0;kr\x81\xedjF5\xfbEm9\xe0*j\xb2W`\x8f\xb9YDNMm\x08\x15\xb5\xcez\xbd&\xeb'\x07\x8e\x0d\x9e%f\x0d\xc0Q\xc3-f\xc3-\xae\xfau\xde\xbf`>\xff\x87\xed\x1d\x1fm\xd3\xf6u\xd8=\xcd\xc5X\xfd\xc5\xa5\x1c\xc1\x96\xdb\xeciZQ=+\x02\x97\x94:\xb6\x80\n,\x99\xbe\x9bE\x9cR\x08\xb3!\xf1\xf5\x82\xa1\xe7\x94`871tPL=\xd7\x98\xba\xd2\xe1\xf9\xeb\xf2\x9a\xd4\x02 \xf1\xda\x898\xdao\x95vJz\xb9\x90?\xb9bq\xfeC\x98\xe5,F\xfb\xa3\xed\x93\xeb\xac\x93m\xc6\xb6\x1b\x87\xac.\xd6b\xef\xd9m{!lk\x9e\\\xc7m\x05\xdf\xb3\xdb.\xc5f\xab ^2,\x85\x807Of\xdb5\x8b\xf3\x81\xfc\xe3$b\xf8;\xc8\xf3`\xb6\xc2\xda\xae\x93\xc4\xe59u\xad\xa5O\xb1k\x9d\xea\x8c\xbb\xd6+/@\xd7Z\xfazt0A\xc4\x15\xb9;\x16\xaa\x01iO\xb1\x99J\x9b\x80z\x86y[\x8c m\x84\xddV\x12\xa7\n~!R'\x1f\x03\xc9+\xf4\xc3\x12\xc9C\x9e\xadw%r\x80\xc7>\x8c,\x08\xc9 _\x87\xaehH\x02\xb1\x0d\x13\x0d_-\xc8h,i\xc0G{\x8bu\\\xb3\xb5\xa9J6\xe3\xdb\x9c}\n\xbeUju\xc27SO]0\xa7\xdeW1\xb5\n\xeap\x8eT\xc0\x01\x85n`\xd7@I\x99\xbcRD\xd6\x8fd\xad\x8aYJ&\xa8\x19\xff\x8dv\xbe\xb4\x9b\xa0bp \x91F\x90B\xb1Em\xbd\x9a\x01\xac\xc9h\xa8\xb4\xe3\xcfI\x02\xd69\xadW)\xe1\xafQ\xa9\xd63\x94\x1d\x95~\x8d!\xf6\x06\xd9*\\s\xf6\xdd:/\xb9dZ\xc6\xb7%\xeer\x86'\xf2v\xa2%\x06\xdd\x12q'\x90\xadi\x92\xa7\xd9DdH\xab#}!-Ck\x0d\xf6\xa3mo\xbd?C\xee\x17uK\xcb\xac\x82\xd2\xfb\xfa\xb1\x19\xd3\x8c=\x9d\x9ce\x99\x0f\x0e\xff\x831\x87\x1cij\xb56\xa2\xfciv\x12o\xd7\x14\x11\xc3P\xf7\xc3\x07\xdd\xa5\xec\xa3Kq4\x0b\xc8\x89\xe1\x08}\x0b\x12oPD\xb3\x9f@JVR\xfdUb\x04\x94\x9d|\n\x8d`JQ;p\xe12\x11F\xad\xfaQ\x85\xf4(\x1d\xa8Y\xf6F.y1ih\xba\xebU\xda\xd1\xe6\xf1\xb1\xc1,\x89\xb3<\xdd\xce\xd0\xc0=\x99\xe8\xdf\xd0t \x86\xabv \x8e\x8aI\x8d\x0d#3A\xb9\x1d\xea\xb4\x93\xcc#\x0ee\x11\xb6\xaa\x9fh\xf2\xf7\x1a_\x1c\xeb0:)9z\xd7\x8bR\xa2\xc8#Sz!\x07\xcf\xe5K\xed\xb5\xf4\x9b\xb6\xe1\x96!g\x8f\xc4e}\xc8 \x0d\x00\xb3\xc2\x8c\xd58\xb4/\x81[\xc9Bo\xea\xcc\x90\x7fG\xe9\\\xeb`\xe3\x86\xcdc5\xe4\xa4\x91\xf4\xdcz$,\xe9y\x15\xbdE\x80%7\x9f\xc6\xe7\x18W\x9dM\xe3Z\x10\xfc:\xb57\x8c\xca\x90\x87\xa6\xa4\\+\xbaZ\x18\x82G\x15\x83\xa3*2\x1d\x9d\xf3\xb5\xd4\x7f\x8eIX5;\xf0bT6\xb6\n\xae\xc2d\x9b\x8e\xc15\xf4u`\xed\xeb\xa0\xdc\xd7\xc19\x1e3z\x83r\xabx\xc5N\x9a\xd5J#Pg\xe4|\xeb\x9a\xad\x0d\n\xb91&u\xb9\x15\xcf'+:}\xf3\xa5\x13e\xc4\x85\\%\xf2F&Y\xb7\x94\xbf:\x9dF\xe7t\xda\xad\x1f\x91\xceD\xe2\xe8\xe1c\xd8\xc0\x13X\xa8\x067v#\x18o\x11#WL7\x0d\xa7\xe6+.\xf0L\xe7\x0d%\xae0\x97\xe3\xaa\xc1\x12\xb5\xc6\x12\xe1tn\x8b\xef^\xba\x8a\x80W\xde\xec\x12?\x96- \xe3\x13X7\xa9\x1b \xe6\x8a\x0e z'k8\x02>\xa8\x0e>\x83!%\xc0\xce\xd0\xebk\xba\xf4a\xeb\xae\xbcs\xa3\xbb\x99|D\x9clQs[\xbbz \x1fu\xadE\xa76m\xf3\xd7\x8av\x9a\xfb-\x1ex\xdb\x86 \x1f1V\x07O\xbd\x1d\xe1\x17VA\x13Z2\xe9+pk\xbe,)\x9f\xf2\x1a\xd8\x07\xa0\x97Z\xd5J\x18\xd5\\\xfd\xc0H5\xd3)\x17f#\xd5\"\x12$NA\x90\x84\x1dA\x8en\x1ecL\x1e\xcd)\xc1Hd6(R\x1a\xf0\x02\xe7zk\xd3\xd4,\xefg\xe4\x16Q\x8c\xdd/\x06=\x88\x93\x1f\xb7y\x907*\xe6j\xf0\xcc8\xf8\\\x0d^\xe6g\x18\x92\x1e\xcdH\x8f\x06\xc1\x07\x8a\x81V\x0f \xd5@\xc9\xbf\xd1<\xd2\xeb0_\xbd\xc4+R5\xdfI{\xba\xd5L}\xafl]\x8b\x8cg\x0f\x0c!\xf3\x8fC\xec>\x1a\xdd\xab\x10\xa0\x8b\x0b\x96\xfd\x98\xcc\xb7\x11^\xf3\xdf\xad\xcb\xd8\x1d=x\xc0\x17\xd0}t@\xff\x8d\xee\x8b\x9f#\xf1\xff\xa1\xe7\x97\x05[wt\xcf\x1b\xfc\x95\x05\xef\x7f\x0c6]\xfah\x10]}\x99\xc9\xf7p\xe4\xb9U?\x8ePtV\xbd,C^\x0e\xa3\x83\xbb\x95\xf7[j\xea~5Y0\x0d\xfa\xd1\xa8\x1a\xbb\"\xa2\xf2\xd5\xe6g\xf8\xfa^\xd5{d!\xbcG\x0e*\xef\xf1\xdcr\xb0d9_\x91\xf2\xa7y\xc1\xbb\xc2\xec\xe4&gq\x16^F\x95\xcb\x1e\x9c\xedd\x83\xed\"\xcb\x93\xb4\xf2\xe9\x8a,\xca\xa5w\xed\x01d\xab^\x076\xaa)Y\xb8\x88\x8ag\x904\x86%qbx\xaed\xd3V\xd7\xe3\xf2\x98\x97FYg\xc9:\x05\xd6\xc0{\x13(A\xdb\x89\xbf\xa4q\x1bcj\x06\xf9\x88 \x0b?\xe0\x1c\x8e`\xe5.\xc4\xec\x1d\x01\xcf\x8e\xe7a\x0c&\x94}1\xfa\xb6HU\x14\x16\xb37v`8\xf4\xab\x8b Yy\xca\xedAK\xb2\xc1\x9c-\x0c\x83\xf4\xd1?d\xc7m\xb8\xadj\xa8\xee\xa3\x83\xa1\xe7\xaaV\xf1\n\xde\x12o\xbb\xef\x0d1\x96Q\xb1\x963\xb7\xcd\x18\xf1\x00\xf6&\x80\x96\xa5[\x0fs\x7f\xc9\xbb,\x8b\x94\xb1_P\x18\xa4\x17\x9e{\xe5\xf9\xf0\x80\xd6Yc\xff\x1fI~\xdf\xba.\xa6l\xe3\x9f\x8f\x0b\xad\xd0]\x977I\xbb!\xb3\xf4|\x08\x06/NN\x9e\xe3\x01\xba\x0f\x89;u(\x8e\xae\xe3\x83\xb3\n2\xfe\xdf\x92\xe5\xfc\xbf\x8c\xe5\xce\xb9\xdf\x00w\x12\x96n\xb5.j\xeb\x8c>\xf2\xb5x\xc1!\xc6L\xd2\x1a\xcf\x0d^\x1c\xa0`:'\x03\xc4\x1c\x9d\x10\xcc`@\xb0\xb7(\xd2\x7f\\,\xc4\xe1TSP\xe3P\x065\xbeXL\xd99\x8d\xc2\\Zj\x86|U@\xe8\x9b\xbc&\x8c\x0d\x97\x18\xec\x0e\x91\"\xa8-\x02i^\x8b\xe5\xffQ\xdfc\xfa\xbbs\xa2\xf0G\xa3\x87\x96\xc8I\x8dh$\x07\xc6\xae]\xd4\xbe\xf5\x10\xaf\x9d\xf8b1\x82\x1a\x7f\x10\x1c\xab\xc6\x96\x04\xbbz\xe4\xb9N\xb6a\xb3\x90\x95\xd2\x84t\x93\xd8\x10\xf8\x8cb\nj\xe5\x1c?LW(\x84\xf1I3\xa2\xa0}\x8a\x9c\x85PJBHK\\\xcd\xce\xe5\xa9\x1c\x08\x82\xa6\xfb\x90\n\x90T\xe6\x10\xf2\x18\x9a\x86\xe7\x9e\xf2\x1f\x12\x85\x8b\x1c\xf1\x92\x96R7\xe3\xd6T\xf6\xdd\x85\x03Z\xe7\xe1}\xe3\xfas\xf6o\xe6\xba\xc2\xcd\xb3Z-0\xef\xa6\x10\x1a\x86UaBH:w\xab\xef#%\xaf\x18\xa5\x86\xaat\xd0$5DnU\x92\x9b\xe3\xdb\xea\xc8WxxT\x86\x93\xaeR\x00\x1b\\`\xea\x07\x17\xff \xd2\xb1\xae\x1e\x10\x94~\xae\xdbN\xcb\x90\xb2\x04hrojg\xd9\x86\xa3P\x8cr\xe3\xb2A\xd0D\x94+\xe5\x19\x17F\x10\xf0j\xa5\xaa\xd9\x90\x0b\x98Zk\xd6\xc3\xaa<\xd2A\x16\x91|a)\xe8\x9c5 \x94:\x83\xcb\xa7\xa3\xc6\x15Z\x05\xad\x01\xd2\xa4\xc8\xb2W\xf4\xda\xd4b7\xf9B\x1e;4\xcd$F\xe7yT\xf5r\x99\x021\x10\xf1\xa5Y=\xbete\x1c\xc4|\xdb&'WT\x043\xd6\x01\xa0M.\xca%\x00\x18\x9cv\x0d\xb3\x11\xb5\xfe;\x07\x99\x88%\x90\x07\xa2\xb9\x8f\x97\x08\xf6\xf6\xfe\xbb\x9aTF\xfd\xe57(fe!e\\#u>\x84\xb6\xa9\xa3\xdbc)J\xa35\xc4\xeb\x96\x7f\x8d\xb0E\xe7\"$g\xd7\x8b\x9c\xdcE\xd8\xe0\x82S\xbcU\xaf\xe7\x83@r\xa2\xcc~a$\x04\xbc|\x97\xb9)\x8e\x88M\xc3ss*|\xfb\xd2\xa5n\xa4\x8b\\\xe6av\xdbv\xf9\xa0Gg\x80\x92\xbd\x04\xf3\x91]x\x97@\x9b\xec \xe2s \xbeR\xd2s\xeey\"\x11\x03I\xf71_\x93\x99\x1b\xab\x9c8\xc8\xe4D\xfe\x85X\x89\xfd\xc6\xbe,\xee3\x1d0Z>\xff\x88\xd9\x8bD\x0f\xa6\xa9\x9bgi\x80\x10\x1f\xa2f\xcc_\xd4\x91\xc0\x86\x01)YK\xd1\xb7x\xcft/\xb8<\xa1\x14'\xc4H\xbb\xc8\xc5\xa5\x9bt\xcaP9\x9b d7\x0dM\xa8\xd8c\xb8*P\xfb\x0f\xf0\x05$\x94\xaa( \x04D\x8b9\xa3f\xb6\x08\xcc\xf6\x06\x12L\xeeU[\xc9,RQd\x91Wf\x16\xf9fa\x16\x876$uW\xc3\x9b\xce\xf1\xf5\xdd\xa17X\xd4e\x13\x8b\xf9\xe6\x8a\xea\xdcm\x15\x82%\xa5$\xed\xf3\xd6$\x13_\xe2y\x003\xd8\xe6/`\x02\x97\xf5\xd7\xd7\x9c\xbf\xe1!!\xa30;f?\xd4\x13\x98\xc0\x05G\x86\x8b&m\xef\xc6p\x1e%@\xf3\xcaz\xba\x89\xcd\xba\x18\xad\xe7D\xe5\x16\xe1Rx`W\xa5\xf9\x83*\xf4\x85'\x93*\xb8\x1ez\"\xb9U\x95\xca\x83#p/0\x91\x8b\xaen\x1aqm\xc6\xbf\\\xa0j\xea\\\xcc0\xeb\xe2\xe0b&\xa4\xc1K\x9dO a\xc0\xebsK\x1f\xf2\xe9\xf5y\xcd\xca\xc0)\xc0\xca\xe5\xcb\xe9\xa3\xc3\x94O\x04\xd3\x173\xf4\x97,\xf7WA\xe6g,\xf7\xdf\xb3\xdb\xcc\xa7<\x1f\xbe\x98\x8eO\xb7\x0f\x1c\x99\x9e\xce\xe7\xa3\xe9&&\xe0\x16\x82\xbcnZ\xa8\xacu\xb2\xc1 \x8c\xe1\x84\x9c\xcdq\x03\x1c\x1c**L\xa4Em]}\xc3K:{S\xa8uN\xb4e\x16 \xbe\x9e\x9cn\xa1LA\xfa\xd5\xc2\x8d\x0br\x8e\x06\x07\x1a\xae:\xaf\xb3\xab\xec*\x0f\xd1\xc5\x8c\xab\xec\x05\x05\x1frr\xed[\xd5})\x0f\x15z{R+W\x15\x89=\x9f\x82H\xcd\xcb\x8b\xe0d\xe1/\xcc1\xf1\xf6\xb2t\xdc&\x9a\xd1,\x06\xbc\xb5\xfaPjP<&(^W\xcd=dIY\xfap\xed\xf9\x90\x95G\x1a\xe3\xadOe\xf0\xf1|\xd8\xb8b;n(G\xd3\x85\x0f\x89\x9b\x0c\xfe\x03z\x90\x0c\xfe\x8a\xff~\xe7\xc3\x8d\x9c\xf9\x9a\xb3\x90\xb3\xc9J\x98\xa4\xcd\xb0\x16\xa1\x1eTy\xaf\xec#\xe72=O\xb5\xe7\xc3\xfe\xf4\xa7\xa0\xff\xcb\xb0\xff\xe8]\xff\xab\x7f\xfb\xe3\x9d\xaf\xbf\xe9\x0d\xde\xfdt\xf1\x7f>\xfc\xf7\xf9~8\xc8Y\x86\xb9\xd7\xcc\x81Wd\x82\x97\xd9*H\x83Y\xceR\xceW)\xcd\x00,B\x16\xcd!\x0e\xd6\xc6\x9c/\xca\xfa\x94'?$\xd72\xaftyq-sn\xb6\x84t\x9e6\xeb\xd4\x99\xc1\xf1\x11t'$#p\xc5\x98u\xa4\x95\xac\x82\xd6\x10\x93Iv[\x957{[\xfc\x99'1+9\x88\xb5$<\x11\xb7\xa2\xccI\xac\xc0\xa8\xe2\x99\xdf\x1a\xbcF\xc4\x80+i\xc3rS\xb2\xb0\xd6\xb5\x92\xb2C\xbd\xdf\xce\xd9~\x0d\xde}\xa0\xa5\x02\x14\x97sJ\x19\xf2\x13\x0c\xfd\xb1S\xbe\x0c2\x1eQ\xd6bs\x82\x0c\x91\xf9\xbf\x1e\xcd\x14\xbd\xeaL\xddu\xe9\x8bM\x87\xe7>0c\xe86\xadG\xdc\x03q\xee\xb6d\xb9\xe6\x1e\xf7\"X3\xae\xfd\xef\x90!\xaf:\xd7\xa9)\xab\xdcGS\xe6B\xdb\x1e\x19|\x13A]k\x90\xd9\xf8\x95\x04-\xb2 \x0dR\xc6\xe7S\xcd\xdb\xf2,JY0\xbf\x05\xfe\xafc\xba\xcc\\\xc9\xef\xdfi\x80\x06\x7fF(K0\xb5\xd4LM\x81\xec\xd8\x8eY\x93r\x97\xcf6\xdbF\xb6D)x\xff}\xb7\x8c;\xb1\xcb(aZw\x1bO\xa7\xa52\xf8n\x82F\xf1\xf8Z\x15\xb9\x97\xcdT*FW\xa9\xdc\xce?\xf2\x01\xdf\xddg\x99\x96\xac\x96\xdc}:\x8d\xd0\xe0\xc7 \n\xda0\x86\x8cvCP\x04\x9f1\x8cE\x9fQ\x91\x8f\x98\x03\xecm\xce~\xa0\x0b\xbb\x0d3\xc8\x18\x81\xae^\xd5C\x15\xfc\x12'\xd4i*QS| \xc4S\x1d\xd6G\xd54\xdf\xad\xa7E \x0f/JY\x05\xe9\"UC\x12\xa0\xd0\x9c\xdd\x81yZ\x0eE\x91\xd9\xdc\xa0\xa6\xcbG\xf9\x05\x16\x89\x8e\xbe\x8d\x92K\xcd%\xbf\x9a\xecXo\x9f\x17\xed\xdc\xbeL~\xcd\xfb\x90\xe1g:\xf6#\x8bw\xeeK\xcf\x7f\xce\xfb\xab$@\xef\xd8\xad\\>u\xc1\xa2I\x86\xd0z\xd7\xd2mC)\x87\xd4\xba\xd2\x81\x86[\xe8\xf7\xc9\x04\\\xca\xec\xc0:4\xc4\"\xb7\xb9;5\xd6\xb79\xbdB{\x00\x03\x90&\xf1\xf2\xc8?|\x80==S\xb5}\xcd\xd0\x00\xb3\xac\xc8\xb2\x82U\xe8\xd7-\xbe\x95\xb3\xe15\xdbr\xab5\xac\x92\x1d)\x84+hm\x0b\xab1\xa7\xe5\x83\x05K\xf9\xdffI\x9c\xb38\xef\xd3\x10\xf1\xf8\xd6\x12\x04\xadT7\xab\xd5\xf5\xc1\xc9\xd9M\xbe\x8f\x01\xa9\x1es1>c\xf9\xe4\xed\x9b\xef\xfa\x0f1\x04W\x05\x8b\xe4\xe1\x98z3\x10W-Z\xbb1T\xe3\xed\x7f\x0e\x12\xa8\xd14N/\xd8l\xa2\x90\x92<\xee\xdf\xf4\xaf\xaf\xaf\xfb\x1c\xc5\xfb\xdb4\xa2\xe8\xfc\xf3\xea\xac\x8d\x12\x8c\x96a\x8d\x88)\xd1\x94V\xfe*\x8d&!i\xcc\xe6\xfd\x0d)d\xb4\xe44\xf6B\xe5E4\x88AY\x12]\xb1j\xb1.\xedi\xd0km\xb6\x15\xb7;\xf5$\xa9\xa4\x01\x0bg\xc9\x96k\x8cI\x8e\"\x9b\"\xbf\x98t\x17\x82\x0c(\x93]\xa3e\xa2\xcb\x989\xb6\x9d\x9b\xb7\x99\x04\xda\x12&\xb7nq\xc9\xaaY\xa5\x04Gr\xe79\x8e\xda\xf7\xa9\xb4\xfc\x02\xeb\xf8l]o\x90\xafXl\x8aM\xfdQ\x92\xdf\x9c\x88G\xeb8\x7f\x13Pl\x17\"`G\x11P>vQP>\x15\x91\x90o\xb3A\x16\x94\xcf\xc7_\x0bM\xba-A\xc9\xf3\xbe&\xfd\x91\xbfzaS\xcde\xdc\x17\xf2\xba\x1f\n\xaf{u\xb5E:\xdf\x9f+\x1b\xc7`\x91&\xeb\xe3U\x90\x1e's\xe6\xe6\xd3F\xd6+\xb5\x17J\x99`\xcbk\xfa\xd1\xb2\x10\x9dV\xee3\xd0\x9e\x03\xf8\x8eh_Fv\x0bE\xd7E=\xaa\xb1($\xb8Vt\xd2\xd1>\xc7\xf37B\xd5E\x03\xaa\xfe\x9c%\xf1\xe7\xb4\xfd\xa7\xb3\x97/(\x06\xaf\x95z\x95\xde\xdb\x94\x85Y\xab\xe7\x0f\xf9\xf5\xd1\xfd,\x0fU\x87\xfa\xfa#\xad\xd0\xad%\xc6\x08\x94`P\xdf\x8d\xb6\xc4\xb2\xba\xde Q\xda\\F\xf9T\xf1\xcd\xac\x94)\x95\xe9\xbf\xb9\x1a%\xe4\x83\xc2Gv\xa5r4\xc7\x98\x8f\\e\xd7\xf5\xe4NQ\xd6VlL&p\xa5\xf7\xc9\x9c\xd1\xdbd\xce\xfcR\x82\x18`\x9a$\xcc\xbb\xc2l\\z\x06\xf6\x8a\xbd\xc1\xb0\x87\x9a`H\xb3T\x06K\xf3\xf2\x1bf\x9f\x97~\x7f\xf8P_\xa1\x0f\x1f\xc0I\xd6a\xee\xf8\xb0W,NE\x98\xb2/Vn_\xacv\xd2W\x98;\xf3\xe4\xedf#\xed\xbe\x8d\xc8}\xabe\x1a\x87\xa7\xd0\xa7{H\xa6\x8c\xdd\x1f\xdd\\\x0eFN\xbc\xf8\xe9\xfc\xc7\xc9\x1b\xc7+\xefcN\x7f\xa8\xc2\xe2\x07\xe5\x9d\xc1W)[\xb04EI\x80\xde\xba\xd8\x0e\x99V+\x1d|\x7f\xf2\xecy\xed\x0b\xf9\xcbZ`\x1eUoN\xf90&4\x9b#[\xf8\x8f\x937\x90\xa4\xc0[\x939\x873\x13B\x10\x91\x93\x1a|5\x8e\x8f\x0d\xf7\x17\x1d\xac2\x82\x0c6Y\xed\xd3p\xedz\xf2\x8c\xfe\x8ec\xb0\x1a6\x9a\x11Z\xc5\x03B\x1e\xd1~cxb\xfe\xe0\xf6H\x0b\xba\x96M\xa5\x87YT\xa0\xad:\x1e\xdc \xe67q\x8c\x0d\xd8\x99g.-\xa0\x14d\xf8\xed\xeb\xd3\"&\x19\xd7\x91\x0d\xaf\x93\xeeq\xe1:[\xb77\xed\xfb\x9a4l(\xad\xf4\xfe\xbb\xf4\xe8]\xbc\xbf\xcbn\xd66k\xdc\xb4\xda\xe5\x8d\"(\xb2\x8b\x0f\xdd2\xda\x8b\x8d\x1b;\xcd\x0d\x82\xbeWi\xed\x0e\x82|>g\x0f\xe6V\xbe\x9a+_\xfa\xbf\x17\x82\xbbH\xd0-\xae\xeeI%\x99R\xd5SXs\xfe\x17\xe6\nC\xf7\x0d\xf9i\x0c\x07\xc3\xa1\x8c\xfe\xfa^\xfa\x85\x88\x8fO'\xfc\xab\"\xe7\xe2\xed\x138TU\x8a\\\xf8E'\xfcW\xad#,2\x06\xe7\xe5\x9f\xe5\xd8\xec\xbc\xc0\xd7\xb9V\x8e\xffc\x8a\xfc\xaa\xa1\xb1j\x17)/7\x1axDZo\x1b4\xaf\xac\xc7n\xba)a\x0cN\xc5\x92\x80\xd3\xb3\xe4Q\x92\x07Tcp\xceD\xcc\x88P\x06\xa6\x90\xc7T\xf8\x8a\xbe\x9a\x1b\xe1\n\xdb\x18\x9cB\xa1\xd1\x1a\xe1\x1aF\xf1\xb3U\x00\xe4O\x9e\xde\xb6\x98\xc3\xb4C\x07\xde\xbe_=\xc3\xd0\x9f\x8f0\xc3\xe0\xd4\xcd\x94\x174\x97\xca\x91\xbd-3\xe2T\xa3\x1f\xcbGJ\xd5|m\xc4\x9fM{\xa1\xa9\xdfcp4E\x83*\xd5\xd1\xd3,\x1a\x95\xcc\x84\x1eB\xce\x15L`\xaa\xe2\xd5\x9cJ}\xeb\xdc\xf1\x8b(6\x85\x1aV\x7f}\x1c\x05\xeb\x0d\x9b\xd7\xbf\x9e\xc6\xf9\xe8\xbe\xb9\x92\xe9\xfdi\x9c\x1f\x1e\x98\x8b\x9b\xde\x7f\x17%\x81\xfd\xc3\xfd\xbb\xe2\x83%,A\xfbuP\xf9H^\xc0!\x94o\xd2_Bv\xdd`~3\x03\x81y\x10*[\xaf\xb0\xd2\x86\x19o\x9cS\x88\xdd\x87v\xa5\xc4\xc1\xd6\x10C$.\x9a\x07Z\x87\x9aDk\x89\xd8D\xc5 \xd5\xca\x8eP\x94D\xb5\x9d<\x83\x9a\xae\xde)?\xbeu\xb0\xb1:Di\x05`\x82\xa7\xd0\x18\xfd\xd4\xc7\xe8\xa706$\xff\xc1 ^\xc5\xf8\x85\x93z\x97\xad\x17EU\x97|\"u\x9f\xf6J\xfbK\x96wj\\m\x9c\\ b#\xe4f~T\x9a'\xa5{l\xebx\x154\xfbFU:\x96\x1d\xd4\xc2Bs\xe8h\xeb+\xabL\xb2\x01\x02\xca\xab'\x80\xa0\xad}\xe9\xf3\xdb\xe1\x1a\x14\xd4\x02\xdc\xc8\x1e=\xeb\x1c)\xdc\x8d\x88L\x95\xfb\xc5\x18\xe3st\xfc\xcak\xa7\xf2\x861b\xd0\xb2\x0e&\x0bi]\xb4\xe5\xfb\xd3\xf7\xa3\xee`\xd0\x92\xea\x8d\xc9\xc8lfT\xc6\x8b\x89f\x93\x88>\x15\xf23\xfe\xf5'\xd3a&\xb6\xd3\xfb\x8e3\x11\xae\xd2\xbf\xfeT\xba\xed\xcb4\xae\xdf\xf7\x92O\xd3\x94*\x8eA\xda\x0cM.B\x86\x05\xb0\x9c\xc5\xdf\"\x9f\x7f~\xf2\xc3\xc9\x9b\x13\xce/\xb9\xc2\xee\x0b\xf5\xdc\x07\xe7\xe5\xab7\xa7/_\x9c\xf1?_\xbd<\xc3O\xaf\xde\xbeq\x0c\x0b4\xd3\xba\x9c\x89\xf4\x17\xad+\xaeIe\xd2\x13\xdc\xbe\x82\x97\xc9\xfcV?e;\x8dC\xb3+\x96!\x16\xf5G\x1f\"Bnm\x9c\x9ez9/\xbd\x9c\x7f\xe6T\xe6\x95\x93\xff\xa6I\x91\xf60\xd6\xb5\x0d\xbbFX\xa8\x1a\xe3\xaazb\xaf$\xb4\x8e\xb1TC4\xdd\xa4A\xf9\xdc\xa6\xd1X\xa9);\xac\xf2|\xd0\xd9\x9fF\xa2\x1b-\x19Y\x8c\xda\x17\xca\x90D\xb7\\\x84\x96\xc7q,\x83nDm\xa6\x14M\x9c\x85S\xf5|\x04\xb34$/\xd5L\x0f\x87#\x1f\x0e\x87\x07\xfc\x9fC\xfe\xcf\x03\xfe\xcfC\x03\xba\xcc\x07)\x9b\x87)\x05\xd8\xed\xc4\xd2\xb8\xa0.RK]jV>\xddZ\xf6:\x88\x97UwS\xa1\xd4\xce\x92\xb9\xf5\x80\xbe\x04\xba]\xf7\xa1\x0b\xc45+OQBG\xcd&\xeb\xa4|,\xea\x93\x11\xf4\xd8\xe0{\xa5r'\xfc\xe7k2\x08\x02\x86^\xe5?\xb3M\x12g|{\xe7\xfc7j\xce]W_[\xa3\x9a\xd3Z\xd3%\x17\xd0\xad/H\xe6\xb0\x97f\x1b[(\n\xff\xe7\x8f?|\x9f\xe7\x1b1\x0f\xbb\xa9&\xdc\xd13\x0e4\xeck.\x05\xda\x8e\x87\xad\xf4\xa9\\\x83\x101\xecD\xa4\xe4\xa3@g\xe3bN\xa7gQ$\xb7Ml\xae\xeb\x91\xb1\xc4\xee2\x02f$\xd5\x1f&\x8c/N*\x1a\x7f\xfb\xfa\x07G&\xa2\x0f\x07\xda[\x18\x03+\xfb\x93\xfcg_\xecG\x9fWj\xf1y\x91&E\xd5\x91\xa1\x17L\x0f(\x7f\xf0ejn2v\x05\x8f\xf1\xc1$\x97\xcb\xe7\xa3\x8f`\xd1\x99\x1a\xcb'\xad\xba\x86\xbe`\xf9u\x92\xbe\x97\xe6uX\x04a\xc4\xe6&\xdf\x0f\xf9\x88\xaes\x8a\xfe\xfd\x0f\xe9|\xc3b7Q\xc7Q \x9d\x7f\xe1\xe5&'\x8cg\xd1v.\xe2\xd4%\xa5\xd3\x1e.Y\x85\x18\xa5\xec\xb8tND\x15\xd5\x16\xddn\xe46\x96|\xc1\\m\x17\x05\x17!/\x0c>\x00 B;\xf9G\xcb'\xe4\xea\x95\x80:B\x03\x8b\xbb\xb4|0j\xe4 c\xf1\\\x0f\xa6\x9ah\x87n*}\xa0\xf6\xd2&\x95\x9a\x89-\x92\xcf\xc1&\x89n\x17a\x14\x99\xbc\x82\xd5_\xae\x9e\xc1\x163[\x90lQ\x8d\x85\xf6\x07\xd1xiqv\xbai\x94\x9bn\x19\xdd\xbb\xeb\x0d\xc8\x98b\nd\x1b\x1a\xb7\xc0lQ\x14\\\xc0pLQ5\xd5J\x13\xa2Q'\x10\xcd\xa4*\x8d\x9b\xf4\xc6\xe5\x03\xd1|\x13m\xeb\xa9\xfe\xaa\xb6\xd0\xc6\xcd\n\xb5\x18\xef2\x89\xec\xdd\xf2`W\xf9Ml\xe9\x9eQF\xffE*KN\x910\xdc\x9a&\xe7J\xc4\x1b\xcd\xe0I\x11N\xfa\x88k\xd6\xc2\xbf\xe2Y\xee\xa2s\xfd\x8b\xe0E\x9d\xcee\xd7!\xae\x9a5\xdb\xfd,\xc8\x18\x0c\xc7V\xc0\x97\x0dX\x8f\xd7\xe5\x83\x0d\x1d>\xb0\xb7$\x1f-\xd9\x80\xb8z\xd5\x10Y@>\x98\x86\xad\xb9\x18\x0e\xe0\xeea\xfb\x00\xf0J\xac\xcb\xd7\xf4\xf0\xa0\x85\xdb\xc8\xc0\x86\xadm\x06\xd3\xa8\xd73'\xea\x94\x8fY\xf2\x82\xe6\xc9\xe1\xa4F\xf6\xfe\xb9\x0c\x1b\x92<6\x83\xa7\x13\xb8\xfb\x90On\xc6!\xeb\xde\x03\x0f\xd7z\x06}\xb8\xfb\xd0>O\xe5\x95\x8b\x0d\xdc\xbf\xa7\x1ax0,\x1a\xb8\x7f\x0fz0\xb2\xdc\x10\x86\x1d\x1ch\xa9\x97G\x0fT/\xa3\xe1Ac\xf0<\xf9\xa8\x15>|\xe0k\xcb-p\xab#\x045\x96\xb2o\x10\x08\xb0\xe5+\xf1\xe8\x01\xae\xc4'l3\x1f\xe8\x81}\xa0mPp\xd0\x0c\x05\x82\xc4\x98\xa0 \xfd\\(H\x7f\xe7P\x10\xea\x10\xf1\xeb\x83B\xfa\xd9\xa0\xa0F;\xba\x0f\xdf@\x0c=\x93Q\xfd\x0f\xf6_\x82\xdf\x05ER\xe2\x08\xfaz\xea\x94\x8f\xbe\xc6\xca\xf8\n\x15\xab\xa2XVP\xf2\xf2;\xb8w_2\xaa\xc7\xb0\x85'pp\xef\xfec\xe8\xf5\xb6\x1e\x04\xd3-\x86#\xfe\xa3\x03=p]\xfeqt\x1f\x8e\xc0\x19:\"]r\x0f\xb6\x05\x97\x1d\xdd\xf7<\x9b\x87\x8d\xcc\x9e\xd6hFo\xb8E\xd9\x9b\xf0\xfe\xca[\\\xf2ft\x9cR\xceP\xe1\xac\xc8\xb4T\xc5F\xcdRj\x94%\xb6j:I!\xf0=<$\xf9\x8fkNw\xefi\x7f\xdf/\xfe~\xa4\xbd\x1f\x1dh\x1f\x12\x0e\xfb\x87\x8f\xf8\x8c\x12\x0e\xfbw\x0f\xd4[B\xdc\x84\x10W\xbd%l\xc4\xb7\x8f\x86\xea-a\x0f\xbe\x1d\x1d\x1cX\x04xtd\x80>\xc4*\x1dh\xce\xd7P^(BE\x9b\x8b\xd3|K\x0f\x1e\x12\xbdO9T\xfb\x80\x05\x83ib\xb1\xdd*\x82\xc1\xeb\x1e\x0c\xef\x1a+\x8f\x1e\x1d\x00\x0e\xf7)\xdc?\x87\x1e\x7fs\xf0\x10>\xc0\xfdC\xb8\x03\x9dZ\xbew\xef\xe0\xd1}5\xe7{\x0f\x0e\xef\xde5utppWv4:\xd0{\xa2\xbe\xe1\x0e\xdc?\xdcm\x00\xcd\xd6\x87\xb0\xc1v\x80\x10\xd2\xeb\xe9pW2*\xbd}}*\x94\xb1\xb7\xafOa\x1dD\x8b$]3\xab\xdb!\x08\xfb\xc5hx\xc0\x07]\x81P\xdf\xb4\x18w\x87\xf0\x81\x12\xc5\xdd\xbfw\xef\xf0>b\xad\xa8\x9ex\xf0\xe4 \x8cx\x81\xd0\xf3p\xbd\x1e\xd6\xd6ktP[\xb0\xe6u4\x0e\xbc\x03\x01+\x02\x890\x8c\xfbT\x12qs\xe8\x15\x80\xea\x95c7\x96\x15\x95\x96\x88\x05\xd4\x97\xe5\x8e\n\xef\xd8\x94\xb9\x85#K\x98}\x17\xc6!E\xe4:\x02\x87\x93?,~\x99$\x11\x0b\xe2zSG\xe0\xe4\xe9\x96!Y\\\x04QF\x7f9\xfa\xb8\x0b:,\xf5\xa5hw}\xc9\xae\x1e5\xc51,8\x02F\x1e\x18vQ\x87h\xd1\xc2\xc5-&\x0c\xa4[+U\xa5\xc8\x9c\x0fX9\xf1:w\x04MF\x87UgR\xb9ht\xa5\x12\xfa\xd2\xd8\xca_\x89\x0e\xd8\xa2\x18%bD\xba\xe6H\x96\x03<\xb3\xa9\x7f\xe4\xf8B\x99b'\xf6d>\xa6%,qM=\xe3\x83\xcc1\x1c\xa8\x88$\\\xbd\xdbrvL\xd9\xf29GZ\x10+Z\xc0\x13\xd8r\x1e\xb4h2\xe1S\xaa\xe1EC\xa6\x879\xa5$n\xc9\x16\x11\xba\x19\xe6\xb7\xedU\xd3A\xca\x87\xafm\xf9\x12\xf8\xbcQ\x08Skp\x05\x13\x98\xab\xf9\xaea\x02W4\xdf%\xcds O\xe0\x8a\xcfs\xe9\xc1\x8c\xd3\xa4\x15\xf4p8\xf3\xe9\xf2\x9c\xf3\x1b^`-\xd4\xb0\xde\x04\x9a.V`\x08+\xbep\x91^\xdeLp\x88r\x97{\xe4\xdd\xb5W\xaf\x8bj\x02gf\xedDL\xc7o.v\xa1\x8f<\x024\x995\xbe<\xba\x04\x86\x88_\xa1-\xea\xc6\x87\x0f2[\x8fdFJ|,\xb7`\xa8\x9d\x17\"CM\xec\xba\x12)\xf1c \x08\xb5%$\x8fp\xdbW\x8e\x1b#vXn\x94P\xbdN\x8e\x93\xc1:\xb8\xf93\xbb\xcd\x94\xee\xae\xde\x18\x86\xc5\xd1m\x04\xfbU\xb5p\xa6\x84 ^`f\xa8\xb8\xc1m\x93T\xd2443\x15\xaa\xdb\xaf\xb0\x9b\x0d\x8e\xb3\xfe\xd1&\xc0r\xbc\xde m\n}D\xe1\xe9\xb9\x8f\xc86$,\x1b\n\x0c\xf3\xf1\x94\x99\x13\x96K\xf1\xff\x05\x9d\xc1\\\xd3\x7f'T\xe8\x86\xb0\xf1\xa6\"\x00\xdf\xd8\x04\xe0\xb3\xaa\x00|c\x11\x80\xcfp\x8c\xb9^tm\xa5\x1c\xbc\x82\x18<:]\xb9\x87\x0f\x10\x1c\xcf\xe0\x08\x07:\x821\x9c\xa8\x9d9+\xc4\xe0\xb3B\x0c>+\xc4\xe03RJ\xd5[\x12\x83\xcf\xa4\x12 G\xc0es\xe8\xf5(\xc2\xda5Y\x9b\xb1\x8f \x86\x91\xe6\xb4\xc7j\x0e\x035CJ\xba\xa2\xcdp\xd9\xaa\xa0\xf2\x8a\xbd\xde\x12\xabn=\xb8\x82'\xe0\xbe\x87 \xdc@\x1f\x96\\B\xa38\xd5\xb7\xba\x04~\xe5\xc3{N\xa2\xc4\x96]a\xf1^\x9bIl\x96\xc4y\x18ow=\xe6\x03\xe1\x0d7\xe4\x00\xf3\x9bo\xc5Ee+\xcc4\xdc\xf8\xf6\xee\xa1\x18'o\x077\x10\x8e\xc0\xe5\xebz\xa5\x86[]\xd6\x1b\x0f\xe3\xa9q\xd2\xf5\xc7\x83\xa1\xc0\x11\xea\xbfR\xf3\xd2T\xf3R\xaby-\x8f,\xd4\xf6\x188H\xa1\xb7\xf4zk\x1cn\xd6\xc4\xe5\x8f}\x90\xb0\xb1\xb6o8oN\xce\x97\xc3\xd3{\x1b\x04\xc1X\xfb^\x9d\x10B\x98\x8c\xf88\x81\xc8\xbd\xf5a\xc3\xdf]\x8b\xe2\xfc\xdd\xa5x'\x8e\xc4W\xeaH\xfc\xd6\xf3 \x98\xde\x9ec(KXMW\x82\x96\xf0\x17\x86\x9bY 4(\xf7\x18\xe5\x98\xdbsO\xbf\xa6\x85r\x06\x1c\xc1\xf1\xf4Xk\xe6\x12\xc6\xb2\x8b\xe9\xb1\x0f\x97\x16\xc5\x8c\xaf\x06\x06\xf5\xea\xf7\x17^\x93\xc1\x8cou\x99\x16\xdeb/D,\xd5.\x12UE\x8c\xa8\xef\xe7\x1f\xec\xbf\x16\nt\xaet\x95\xe5\xc3\x07X\xf2/^\xfd\x93\x0e\xb7\xe5\xdd\xe3;\xb7\x86'\x90\x19v\xce\xfb\xcc}\xe3Hb\xdd9D\x84\xcf\xd9\xa3\ns\x90B\xc5\x1f\xcak\xd69\x93\xc1#K*\x83\xc3\x87#\xaf\xfdtO\xba\x13\xc8\xebpp\x04\x7f\xffH \x0dAB\x8b\x91\xeb\xc7e\x9d2]\xea\x03\xaeF\xd5\x13\x03\x1e\xb6GI\xb4'\x85HE\xa7\xad~p\xa2|\xe2\xb2Z\xfa\xb3\xd6\xc8p\xd69\x8d\x0e-s\xba[M[D\x81\x05\x1f<\xea2U\xc3\x0cJ\xfaT\x7fD:\x94\x12\x16Qt\xfc\xfbG.\xad\x04\xa83\xd9D\x16\xbc\xf01\x0d,\x9a\x10\xe6\xe9\xe3#\x88\x0c\x82L\xec\xce\xf8\x07\xa0\x98\x81>\x84nDA:g6\xbd\x18\x8aU\xcfv[`\xf3\x19\xeb\xfe7{E\xdb\xdf\xc0,I\xde\x87L\x7fs\x9cln\xd3p\xb9\xca\xdd\x99\x07\x07\xc3\xd1A\xff`8\xba\x0b\xaf\x93u\x10\xc3\xd9*\xbf\x8d\xd6A\xdcT\xe1\x1e\x1d\x9e#\x0f\x99\xa3*O\xfcf\xc4\x99H)w\n\xc4\xd3\x0d\x95\xc3?&\xb0u\xe7>d\xed\xa1)M8SI\xe4\x9d\xb14\x0c\xa2\xf0\x17\x93~\\],E\xa0\xc4v\xd7WZ7O}\xf8P\xbdm\x88pY\xa8n\x05d\x86\x16\xc8L0\xa9\x1e\x88\x06\xc3\x0cB\xf2\xfe\xab\xee2\xeep\xd0\x12\xa8R\x81y\x1c\xac\x9b\x1a\x93\x1auX\x8b4A\x07|\x18\x9e\x9b\xfa\xda\xb6\xf6u\x15D-]\xe1uu\xe8\x813q\xa0\x07\xdbz\x8f\xc2R\x06)W\xb5\x9f-\xadW<#(\xca@\xdft\x18\x8b\xc7\xd4\xd9\x8b\xe0\x85\x1b\x99\" \x89\xaa\xd9\n\x831 \x0dxA&\x00\x03\x14g(\x98?\x86\x1f\x83\x9b\xfe\xb3%\xc3\xc1\xff\x18\xe4\xab\xc1\"J\x92\xd4\x8d\x9a\xa87\x1e\x87\x0c\xe6\xc9:\x08\x8d=\xe8o\xb0\xd7\xe4\x15$'(\xfa\x98\x9cUe\x9b\xea\xd3\xe6\xdd\xe0D\xc1\x8d\xb3C\x87?\x047\x9f\xd3\x9b\x90\xc5v\xe8\xf0sf\xd8\xeaF\xd4\x04\xf4j\xbfu\xa8\xaf\xb5\xd4\x81\xffj2k1L\xc9Y\xebF\xca\xba\x1aP?N\xa9\xab\x04\xfb\x8f\xe1\x9b\xfd\xf2k.\x9a\xed\xff4}\xb7\x1d\x0e\x87\x8f\xf8\xbf\x07\xc3>\xff\xef\x01\xe3\xff>\xa4\x1f\x8b\xc5y\xef\xdf\xf6M\xc7c\xdb\xdf\xeax\xac\x1a\x93\xb9\xfc\xd7'I\xf8\x1dC\xaa\x8b\xfek\xcb\xeb2-\x1c\xc4t\xefk\xd7\xfb\xe6|\x7f\xd9\x16\x8b\\\x1eK\xa0\xbbF\xc9\x9e;\xf4J^\x1ae'\x8d\xf2\xec\xdb4H\xbd\xe3n\xb3,\xb9i\xc8\x1c\xf32+\xb2\x92\xc7c\xbb<\x9eV\xcd\xd3\xb1E\xe4N\xd1U\x00\x1d\x07\xee\xdc\x81\x14m\x97\xf7\x0fG\xe8q\x11C\x0fF\xfa\xc9|\x83X^s\x08\xc1\xca\x16\xc1\x9a\x0e*\x9fbW\x07h\x1c\x12n\x1c\\un0\x1c\xcb\xe3\xcf\xd1\xf0\xe0.|C\xde\x1a8v\x0fz\x90\xf0\x1f\xd8^\x8f\x8e\xf2\xed\xe4'\xa7\xebp\x07w\x87ey(\x84}\xb8\x7f\xb7\xf8\xc7\xf3at\xf0\xd0Z\xc6\x83?\xc2\xfd\xbb\xd62\xe5\xcf!\xfeB\x1f\x84^\xa3\x1bg\xa3\xbd\xban\xf25\x9c\xc6Qh\x89\xbb\x0f1B\x04\xcd\xf4\xe0ny\x84i\xf3$S\xc3\x04R\x9a\x00\xe7\x97\xbc\x03\xfeR\xb5?zt`l\xa0^WTH;\xd8\x0d\xda\xd2O\xea\x90\xb2gw\xf3\xe7@\xc3la\xf9\xedF\xb2J\x91\x86\x0b\x96(\\\xa6z\xfe/\xcb\x19\xb2\xc4\x93\x86[d\xa1\xddAs\x9e\xb4`F\x80V!v\xc3f\x8d\xa9\xc5\x94\xb62\x99L h4\x0d\x83\xd2\xcbCx\x02\\\xbao)\x9c\x90S\xcd\xf0\\\x19\xa7\xc2^\xcf\x0c\xc8p\xbd\n#\xa6\x14'>\x14s\xbb\xd2v\xc7\x81N\xf3x\xe9\x8f\xcc\x19r\xfe`\xdfIK\x8a\x00\xd0\x9d\x04\x85v\xbaS\xbb\xc2\xach\xa3\x8eZz\x8d;\"\xbd\xc1\xd4\x99\xfet\xee\x9c\x97\xcd\x07d;\xe0\xa2l\xcd\x9e\xa3\xda\x12\xa4\xbd\xed\x92\xf0\x0ea\x81\xb0\x1a!%\x1bd\xc96\x9d\xd9\"Fx\xbe,\x18\xca\x82\xe48\x98\x0efI<\x0bD\x10Gv\x0d\xaf\xd9\xf2\xe4f\xe3\xa6\"\xe0\xcf\x07\xc7\xab\x99]\xc1H\xba\xd8`\x11\xc6\xf3\xe3U\x90\x9e\xc6sv\xd3fB\x93\x0f\x87\xd1\\\x87\x0f\x85\x89\xfd\x86\xb3\xa22\xceZ.>\x95,i\x89\xeb\xf9\x02E\x0b\xd7\x98X\xa2\x1c\xda\x1c\xdcx\x10\x05YN\xc3\x7f\n\xb9\xf7\xd8\xe38\xd0\xb8]\x86\xfc\xcc\xbeX\x8aoos\xb6\xd3R\xc8\xd9\xf0\xd5\xc0\x1b\xb4\xb4 \xe4\x95\x858\x83\xf5q&\xe6x\x8b\xc4\xc5\x9fu\xbe\x1a*\x17\x87n\xa6\xebc\xa6j\xf6\x0d\xe0\xd2\x0c\x9e\x88\xc6\xc6\xbd\xb3EY.\xe4\x1b\xe5\x98\xc9\x85\x8d\xea\x89\x88\xfe$\xe8t\x84\xfb\xd4\x92~KQ\xc6\x84\xeb\x8c\x94)?\x99\x0e\x8dq6tyg\x97\xd5j\xbd)\xa3?r\\Hc\n\xdc\x92(\xe8#\xb50\xee%\x7f>\xb6\xedA\x8a\x06W\xd9\x8b\xf1^\x0c\xd8D\xbc\x96\xa5$\xa9\xf2\xc9\x84\xbcA\x92B\xb4+\xcd\x89\x8f\x15}?\x87\x9e\xafdN\xe95\xca<\xa7\xd0=\xa8\x07\xee\xa2Q\xe0\x10\xde$\x9c\xf4\xbdJ\xc2\xb8\xc5\xe6!\x9f.\xb6\x0f\\\xdb\x99lW\xae\xb1\xc6=DjIU\xc4\x13\xd6\x12\xa1~j\xef\x1b\xa7o\xe1\xfajBo\x84\x85\xe8\x8bM\xac?\xb9\xcf\xd7\xf2\xf9w\xdf\x9d\x1b_\xeek\xbb\xfeQ\x1c\x16t=\x13\xf8\xba\xdf\xef\xbf\x8b1\x00\x96\xb3\xca\xf3M6\xde\xdf\xdf\xb0\x1c\xf3\xdd\x0f\xb2\xeb`\xb9d\xe9 L\xf6\xaf\x0e\xf6\xe5\xaf\x9f\xb3$v\xde\xc5\xf3d}\x11\xce\xc7\xe0|%>\xf4\xb7\xa1\xf3\x8e\x0e\xc1\x82\xd2>\xab\xa60\xf2\xc15-\x07\xf4a\xe6\xc1>$\x1dg\xa5?ie{\xb4\xa3\xc0\x0cz\x10\xc17d\xee\x1d\xdc\x83#8\xc08\x0e\xdf`$&\xfe\xbf{\x17\xfa\xf4\xd2C\x95\xd2\xa6\xe0\xd8\x9e\x02Py\x17#\x0e\xac\x08\\\xdf3t\xef\xf5\xf0\x00\xf2 \x10`\x0f\x88L\xd37.\xb1\xa0\x0b\x90\xbe\xd2\x81\x0f\x8f\x1eiPo\xc7\xce\xea\xf3\xd1\x87G\x1d\x8b\x7ft\x9b\xcb\xd9/%5\x90\x84h\x07S\x85|2wK\xf1\x9e\x8dG4\xf2\xb1\x84\xb4\x93\x8c\xc8N\xa4X\xbe\xdd\x8c\xbb[\xbb\xa1h\xd4\x1571\x91*y\xeap\x8c\x8fU|B\x87\xe6\xdcS\xc6\x9d\xdck\x8a\x1d)\x1f\xe1`\xf4|\x9b\x8a\x00\x90q;\xb8\xb3\xf9\x92\xbd\\,2\x96\x9bBz\xeb\xcf'\xed[\x9e\x8c\xc1\x92\xab\x80>\xff\xd7\xb8\x89\xd6\x85q\x9e\xfc%d\xd7\xe5u6]\x9c\xad>\x92Wc\x9c\xf0o\x93m<\x0f\xe3\xe5q\x14\xb28\x7f\xcdf\xb9\xeb\x0dV\x88'\xed+\x14H\x8a\xae\xf8Z\x0f\xc2\xf6j3YM\xe2j{\x95\xc5N\xbcc\xc3Q\x02zm\xa1n0\x05\xf2\x13Xp\x88\n\x91^<\x85\x19\x1cQ\xbc\x01Z\xc91\x04\xe2\xc3\x06\x8e s\x03N/\xf9\x9b\xa2\x00\xb1\xd2\x06\xccn\x80\x81\x19\x8bs\x96\xd6\xb60\xed\xb0\x8b\x99\xdb$]\x94I\xe1>\x1c@\x8f\xa3\x0b\xc7\xaa\x96]\xe7\x85=OL\xefS\xe6\x94\xe5\xc9f\x0c\x81\xbd\xc0:\xb9\n\xe3e\xc7\x0c\xfcP\xd0\x86\xbd\xbd\xfa!\x90|\x1a\xc6\xc3\x81f,\x80\xa7\xb1\x14.\xdfX[Jca\x833N\xbdUN\xb3\xa4\x14?\x90\x7f\x9cDl]s \x04\xc1G[\x17C,\x82\xd0E\x88\x9f\xfd\x17\x1a\x91\xc5\x8f7\xc9\xa6\xcb\xd0\xd0j\xef\x9a\xfb\xa0x\xd7j\xe0\xd4n\x18/\xc5\xc8yo\xea#/k^N\xa4\\\xddd\xe5\xd2l\xde$\x1c\x92wL]\x81\x9bkIN\xa9P\xa0#\xac\x95\x978\x8cc\x96\n\x89\x01\x97y\x86\xc8Bov\x1c\xa3\x00\xadn\x8b\"\xf5T+\xa2\xe6\xc9\x86\x93 \x14\xde\xe2A\x82,\xca\xb4\xfb`\x06W\x83\xb75\x06%\x0drv\x86\x1bQ\x8b\xeah\xa3G\xd2N\xd5\x08N\x96D2e(i \xcb\xaf \x9c\x03\xef\x8ek\xff_\xbb\xed>k@'h\xec\xe8S`M\xc9\xe7\xac\x04^~' \xdc\x15S>\x0d\nw\x86/\x01/\x7f\xa8\xbct\x82\xf9\xfc\xe4\x8a\xc5\xf9\x0fa\x96\xb3Xd\x0c*L.{b\xcaq\xf2\xff\xb2\x98\xcc/\xf8\x9a\xb9%\x9ac\xbc'&E\x1ag\x15fy\x92\xdeV\xad9\x9bm\xb6:\xcb\x83\x9c\xcc<\xa2\x90y\x9d\xb8L\x13\x92 \x08\xe1\xe05\xe3\x85Qj\xd4+\xd7%\x0b\xcaT*>\x0fj\x95\xf9\xe8\x82m\x9e8\x9e\xda\xdc\xea\x82\xb8N\x94\x04s\xc7o\x87 \xeakWE\xb1ql\xeb \xde\x06\x91%\x86=Wq\x1a\x86\xbdI6\x19\xaen\x9b\xe7\xb5|\x18\x86\xe8&K\xdc/,\x16\xdc\x8cRH\x15\x9f\x12T\xf1\xc4\x8bAQ\xce\x06\xf7\xb0\x87\x97\xf3\xc40e\xb0\xf7\xc1*\xc8\x10\x92v].iUL\x06\xa8\xd0\xb8\xde\xa0\xd0\x08\x9aO\x0dZ\xedC\xd2h\xa7 {\xc9\xa4x\xf0\xed\xed\xe9\xdc\xadM!e\x0b\x99\xc1\xef+\xc7\x9b\x8e\x9a\xf2\x05\x83t\x8ek\x1b\x05\xd4\x0c\x05$L&\x850\x99s\x1e\xc3:\x88\xdc \xe4\x98D\x08\xe9\x9c5\xb5+\xf4Cx2\x81\x14\xc8 \x1d\xd0\xff\xdc \x124\xa8\xa8\xd0\xac}\xd9\xa1\xd9D\xb6\xf6L\xae\xebW2\x8aO\xe1\x86\xe5\xb8?}x\xf7.\xf34J\xe5\xbe{\x97}\xf87\xcf\xe4\xc2i\xc5\x9aY\x14\xce\xdewB\x99\xd2\xb1!\x1b\xe4A\xbad\xf9c:\x89q\x9e9\"\xd8L\x1e,_\x04k\xf6\xd8\x13G\x9f\x9b eq\xfe\"\x997$\n\xdfs\xf7\x90\xb1\x8c(\xe0\xd7\xe0z\x15\xceV\xa4&`\x1a\xc8?\xb3[\xfa\xb5fy\xa0~\xcc\xf24R?\x82\x88\x97j\x8c\xfd\x82\x16\xc86h\x94\x90\xa8\xa8\x94\xa2\x10\xf5\x08d\xe52G\x95\xdf\xe3\x9a\x91\xbc\xfa\xc4\x1a5\xd1\x80\xb6\xb9R{\xca?\xd0\x88\xac\xb8\x96\x82\\\xc7\x8d\xeb\xe7k\xd5\xa7\x94\x02pW\x90\x06\xdd\xc5\x0b\xb3\x18\xe4y\x1a^ns\xe6:\x9cv8\"\x85A3\xd9\x12\xc6\xfe\xe2\xce\xf6W\x0e\xf9\xb7n\xc9C:\x1f\xcc\xa2 \xcb8\x90\xb5\x86\xfa\x91\x06\xdf\x06\xb7w\xf9D\x0d\x840-\xdcZ\xdcQ\x9b\x89\x10\x8fW\xber\xc4\xd1j\x87\xbdB\x0c\x88\xe4\xd1J;\xb9\xca$\xac\x10q\x8c>\x95.\x01egJ\x19'\x08\xcf\xc94\xd5\x06}W\xe2\xcac'\xd6\xa5?\x15^\x02\x93\x16c\x164\xab\xd3\xf2Y\xec\xcc\x19\xa9\x16]\xff,3\x9c\x0c\xfa\xb0@/\xeb;\"x\xd9N\xb3\x94(\xa7\xa4<\xf7\xef\\\xdet\x8c>^\xfa\xf3\x11C\xbb\xa2\x94\x91\xf9\"\x83\xf4\xac\xc1\xe8af'\x16V\xf2\x07{!\xe9\x07\xa7^~t\xcb\xdea\x18\x9e\xd1\x18J-\xc5[\xad\xc1f\x13\xdd\x92\xa7 \x8c9\xac\x7f\xf8\x00\xae~\xa2\x1c\x9a\x0f\xa0;\xdd\xc9\x13\xc1\x1b\xe9\x94\xb2\xc8\xc9\xe7\x83sq\xc1\xb2\x1f\x93\xf96\xe2\x92^y_0}\xdbX\xcf\xc8\xa0\xeb\x99\x926m\xdc\xd8\xbd\xeb\x19\x02\xa8\xf0\x0f\x07\xd5\x0f\xa1\xf8pX\xfd\x10\x88\x0f\xf7\xaa\x1f\xb6\xe2\xc3\xfd\xea\x07L\xf6\xe0\x0e+o#,^MJ\x85'G\xbc\x15\x94&\xf1\x0f\xb2\x88\xb9\x87\x0f\x1fT\x1b^P\x94\x17\xcft1\xd3\x90\xf4Y?\x83f\x83b=E\x9c\xd5:\xac\xcb\x9b\xb1-\x97/A,2E\xbdX\xb1h\xc3\xd2l\x90lN\xe7\xe5\xe1\xb6;\x02\xaa\xd1\x0b\x7f:\x0b\xfe\x91\x9c(F\xe7\x89Lj6\xcf:\xa9\x9e\xf1JA\xb5\x92\x9b\x0f..0\xfd\xd9\x05\xc5\\\x1b\xfa\x18\x19R\x16\xf2<\x91#\x11K\x93{g\xe3\xc1D8\xc8\x93\xe52bg\xab\xe4:\xeeJK\xa4\xb0\x1f\x0e6i\xb2i9c\xcc\x85\xd3\xeem\xb2\xcd\x9fa\xdb-\x15b!\xb7-\x9b\x8b\x91\x97\x1cG8$\xd5\xd5\xcd\xab>\xc25;\xc3\x896\x17E\xad\x96s\xae\xd7,K\xa2+6?\xdb^\xe6)k<\x0f\xc53P\xcd?'@;\xf9@$\xc6\xa95\x84!KV\xc9\xb5;u\xd4\x0c2\x87\xec\xd9\xe7>\xec\xd9\x9c\x9a)u\xcfq\x10\xcfXt\xccE\xe2\xae[\x869j\x04\xbdo\xde\xae\xf4\xf64\x7f\xb9\xcdO\xe2\xe02b\xf31\xec\x85B\xa7\xac|\xb1\xb6b\xc8H\x03\xc5\xd8\xdf\xa4\x1c\x10v\x1a\xfb'\x80[\xb6a\xb3\x1d\x80m\x13\x98b\x8a\xea\x0fA\x1be,j\x10\x0c\x7f\xcbU\xe60\x84.\x1b\x7f!\xbf$F\xc9\xc11\x87ejs\xab\xa3M8\xb9a\xb3m\xde)q\"\xec2-F\xed\x9e\xc6\xaf\xd2d\x99\xb2,\x1b7&\xf2n\x18c\x1d\xfb\xba\x0e\xf6\x13\xa1\xe5\x8cEl\x96'\xe9\xaf\x00/]\x08\x13\x1f\xc2\xab _\xd9aK\xdd\x07\xc0\xac\xf6\x1b6\xab\x12\x15.\x9b\xfd\xe9\xcc\xf5\xe8\x12\xb1\xa9\xc4\xd4\xe1\x03Wt\xa6a\xf9\xcdt\xebW\xde\x82_\x0da\x7f\x85\x0d\xb0\x10\xf6\xf2\x1eX\nu\xdf\x06R\xd1\x9b\xb2\x00\xd6 \xc9\xc8>[\x13zZr\x8a\xfb\xa6;\x97\xb57\xca\x11\xc1\x87\xad&\x85\xf8\xc2\x07\x81OA\x7f;5\xcf\xe3=\xbb\x1d\x83\xb3\x0e6Hb\xde$\\\x8c\xce\x1c\xf34\x84\xe8\xdc\xd9]B\x1aJ\xf2A\xb2i\x07\x98\\\xc8)\x1d\x89A\"\xc4\xb4\x9c\xdc\x1d\xe3E\xb8\xcc\xbc\xb63w\n&?Of'7\x9b \xce\xc2\xa4\x834\xc2\x85G\xb6\xf9!\x8c\xdf\x87q\x8bX\xb4\xa5\xe2a\xb6\x89\x82\xdb\x97]\xa5\xa3L\xaf%R\xd9I\xff\x8f\xe6\x9a\x11\xa9\xb6\xdb\x0d\xd7\xa6\x10\xc6\xd7a\xfe#\xa2]\xcb\xeaa'OO\x16\x83\x1f\x83M\xab\xd2\xfe\xb3\xd0\xf4\x17x\x13\xfcOg^\x0b\x8b\x03T4\xc6p\xda\xdc,\x7f\xf2`\xd9\xe9\x86\x05\xa7\xdfV\xef]\xfd\xc9\xa4\xee\x91[\x14-\xfa.\xf4,\xc7\xc2\xdd\xf4g\xce6)\x9b\x059\x17\xf1OI\xf3-^9B]3\xf6\xa5\x15\xa3\xee\x9a\xccS\xf2!\x0e4\x86\xa4\xbdh\xa1\xa7t\xb8JQ\xd6UZTi\xa8\xaa\x8a-j\x19\x96\xaf\xdb \xc4\x82u\xb7X\xb4\xf7R\xd2/;\\\xf0SzU\x8b.\ne\x15\xaaE\xf6\x80\xbaN\xd9B\xf2AW\x81Z\xf4O\xb0\xe8\xc6-\xda(4\xe8\xc7-B\x12X\xd5\xfd\x16\xce\x0ff\x89\x96\x04b<\xd2\xa9}mo\xb0f\xd6\xd5\x9a\xebzB\x04P\xf7_\xd7\x1fa-\x89\xa4\x89V\xb8\xb5\x0b\x8f\"\xf7\xc7\xb6\xabb\n\x9c\xc7\xf0s\xf3\x8c\nm\xba\xcdh\xdf\x11<\xba\x82\xb4v\xb6-\x96P{\xd3\\\xb5tR)*\x97\xde\xb5U\xd7\x0eiUu\xed][uqD\xa7\xaa\x8a\xdf\xcd\xd5\xa4<5\x86\xcb\xf6\x82\x82\x95\x8f\xe1\xba\xbd\xac\xe2\xe3c\xb8h\x19y!$\x8c\xe1e{Y\xad\xe5W\xcd\xa5K\xf2\xd0\x18\x8e\xbb\x94\xd6Z?k.\xaf Och\xd9\x9d\x92\xe44\x86g\xcd\xa5u\xc1r\x0c'\x1d\n\xa3T9\x86\x9b\xe6\xa2\x8bx\x0co\xac%l\x87\xab\xb5\xb7\x1f\xcf=\xbfrO\xe4\xa3\x9b\x0d^mSfJ1\xb9\x92\xe4\x02-\x1d\xb5\xb3\xa9\x12s\xda\xab84\x16t\x00\xdd\xc7J\xdf*\xbc\xa4Z\xd5\xc4\x0c\xaa\xb2\x84\x8d\xf2k\xc6\x05\xcc\x15#&\x00\x13\xa0\\\x14\xbf7\xc7\xaf\xc8\xe6\xf8\x15\xd9\x1c\xbf\"\x9b\xe3Wds\xfc\x8al\x8e_\xfc\xc3Pw\x1a\x8a\xc8\xb9\xcb\x92k\xfa\xb7\xf6\xd9\x9a5\xfadi\xfeX&k\x8cv\\ip\xc7\xf2?\xd9\xe5Jx\x18bq\x992\xa7\x9a\xd6\xc8\xe8\xd4\xf8\x19\x07\xa7d\xa0Z\xb2\xfc\x07$t\x06)\xbe\xab}j\x17\xdbT\xbe\x83\xaa\x1c\x9b\x14\xdf\xc1l\x9b\xa6\\\xbch\x10t\xd1>\xe9\xc6\x98T\xbc\xd1y\x0d\xef\xe8\xb6\xceO\xab\x90Yd\x1dg5r\xa4O\xeb\xd7\xf0\"\x11\xdc\x03D\xf0\x19\xbcS\xe0|\x8d\xe7\xf5_;\xf0ug\xd2Z\x86\x00\x93@\xd5bg\xfc\xa4=T@a\xb3\xe6\xb6\xac\x06\xa3\xa50\\\xfb(\xcf\xa7\xcc88\xd3\x90\xed\x99\x18\x87Nwg>\xccj|\x84Z\xff\x171\x16\xcf\xfftb\x8c \x8b(\x15\xfa\xd5|a\xb0\x8b\xd3\xac\xba\xf0\xc3WL\x91_\x15_?\x82 \xe5 u3\x8fr\xe8\x0f\x1f\xc3\x0c\x9e@\xf6\x18f\xbd\x9e\x07\xd1tv\xae\xd7\x9c\xce\x0ca\x01\xc5R\xc6x\xe1\xd1\xe6\x9c\x8b\x18\xd8\xca-fA\x14 \x96\xc1|\x98\xf2\xba\xe72\xf4b\x84IZ\xc3\xc1,J\xb2N\xeeV\xc2\xc5J\xb7\xfd\xa11\xfc9G\x85\x10\x7f\xbbU\xffz 4\xc3\x8bZ5\xa6\xc77\xe3\xb7\xe0\\_\x96\xe4ub[\x1d\x0d\x9eqwcj\xba\x03;\xa4\xd3\x15\x96\xa6\x1d\x86\x10\xeeb\xf1\x0e\x84\xf1t\xf0\xec\xec\x8d\xbd\x14\xdfm\xed\x04-\x90)m\x1b\xcc`\x98\x0e\x15\xa1)\xd6\xc1\xa9\x81sS\x8aT\x87\xaf]f\xcb\xd0\xd0\xc6\x8a\xe7\xe1U\x8dT\xeb\x8f\xbaV5\x06g\x1e\x06Q\xb2\xecoo\xacWq\xbfH7\x97\xc1\xec\xfd\x1f\xea\xe57Z<9\xa5>^\xcf\xff\x8d\xfaZ\xb1`\xfe)\x9d\xad\x0e\x95\x1c\xe8<\xbb\n\xc2(\xb8\x8c\x18\xea\xfbI\x1a\xfe\"\\\xb8\x9a6\xfbr\x9b\xe7h\xe0\xb5\x0f8\xbf\xdd P\x89\x92\x9d&\x86\xfc\xa0\x8f\xd3k\xa8\x91\xc4\xba\xb9 \xeb\xec\xbc\x02\xd9\xd5\xb2q\xf4\xd7\xe1<_\x8d\xc19\x186\x0cd%\xa2;\xf0R;\x8f`\x9b\xd5e5\xfdY\xa5l1\x06\xe7+\x9c_\xc3 n\xa20~\xff}\xa9\xb0\x05y\x91\xe9~Y\x00\x9c%q\xce\xe2\xdc:\xfbh\x80|\xee\x8c\xfd\xcd\xf5\x06\xeb`S\xcaI\xdex\xfd\xb7\x85~\xce\xda\xcc\xb6\xc8~[\x0e?\x9e\x9d\xbdi=\xf0\x98\x17,\xc1\x1a\xb7D>e\x13X\xcb\x19\x96\xce\"[\x0f\x81*\xa6\xb8\x96\x93\xdb\x92\x91\xaf\xc5\x00\\1{\xd6\xdd\xa1\xe5c\xb3\xb4y\xf8\xd4\xbe}9%\n\xdf\xfeK_\x12\xcf\xbf\xf4\xa5\xff\xc5\xfa\x92\xe0|]4\xa6\xce\x97S\xf2\xeez@\\\xd7/\x06\x1a}|\x93\xa8\x83g\x9bI&\xafim\xe6\xd4\x15\xffR\xda\xccO,\x80\xac\xac\x8dy\xa4\x8b(\xd9\xedU\xb2\xd9n\x1c4,6+u{{\xbb)>\x89\xa8\x13\x14\xee\xce\xde \x0b\x7f\xb1D\x13\xf9\x92:\x10\xef\xb2\x7f\x9d\x06\x9b\xcd\xa7\x08\xbc\x1d\xe4U\xad\xb3\x04\x8e\xc0\xb9\xccc%\x113\x88\x92\xd9{6w`\\\xfd\xb0\x8d\xc5\xa7\xae\xf2\xaa\xf8\xb5\xf3\x14\xb2M\x10kR\xbb\x1c@\xa3\x98\xfe\xcf\"\xe5\xe2\x82\x7f\xa5\xad\xf1W\x1d\x96U\x13|\x1b\xea\x9bG\x8c\xf4\x14\xddkm#\x8f\x85u\xf8_\x92\x0d\xfcK\xb2\x81\x7fI6\xbf\xbddc\xbd7\xc0\x06Y\x9el8\xd4\x07\xcb\x80\xf8\xb0\x99\xff\xc8\xcb\x05\xd2z,:\xb1\x88&\xe8lop\xa9\xff\x9f(\x8e\x94\x1c\xd5?\x8dy\xef\xc6R9\n\x96\x85\x94\x8b\x0b\xceH5\x9am\xf8\xda\x81\x0b8A\x1a\x06\xfd(\xb8d\x91c\xea\x06h\x9c\xd6\x8e\xe4\xf7\x0e]}!>\xfeO\xc2\x93\xd9g\xf2\xe4\x86\xfa\xe6\x11\xff/\xb4\"\xcc8K\xad\xf1\xd4D|\xa9q\xe1PV11\xdb\x99\x89\x0bo\xc5\x87\x1a\x17\xce\xc4\x87\x1a\x17\x8e\xc4\x87\x12\x17\x9e\xc9\xc8G3\x11\xf9\xc8\xc4\x8fg\xbf=?^t\xe5\xc7\xb6\xb0EU*l\xe5\xb9W\"\xafz\x95\x98[}g\x92:\x0fl W$\x16+\x18$1\xa7\xcd\xc7\xab ^\xb6g0\x02\x8d\xcf\xb1A\x1c\xac-\xbaXP\\[\xab\xb0\xe8\xbf\x7fDL`&\xf4\xe3\xfc.\xc3\xbb\xee|H\x9d\x06S\x0fb\xc7\x1b\xa9\x1f\xdf*\x15\xca\x0d\xc8\xe3\xd7\xd2}\x94,M\x91tv\xe8\xbfY8\x08\xda\x14t\x8a\xab\xd0\xc9@B\xc1\x154\x93H\xcd\xe6\xdd\x1a\x80U@\x819\xa25 \x1d\x19\xe4 \xc9w\x96\x99\xc5b\xcd\\s:\xd3\xa0~\xec\xbe\xc3b\x9a7\xb3\xe3Y|P\x84\xfa\xe0\xbf,8\x0ee\xd9)3\xcaN\xc1?@vj6\xe2t1\xf6\xc4U\x00i\x83\xa5\xee\x87\xeeyW\x1bR\x88\x85\xbb\x9d\xd0\x07t\xd2\xcd\x91\xff4g\xeb\xa6\xabH[*Jy\xe0\xda\x8cO\x19\x15\xfe\x96d\xc8\x96\xa3\xf6\xa4do\xb2\x97\xa5\xc0\x19\x8b0\xcaY\xfaIH\xb7\xb77\xc3k?\x96(\xea\x80\xd8g\xef\x7fc\xee\xbfc\xe7r\xe5D\xd4]\xbc~\x94\xdfnXC\x8c\xd8\xa6\xc1\xcc\xbf\xcc`&;\x0c\xa6Q\x8f\xb0\xdd\xbf\xd8\xdd\x088K\xe2<\x08\x9b\x0e\xd9\xf7\xf66h\x95\xe4b\x87\xb5\xdfE\x92\xae\x1b;Nb\x8a\xf2\"o\xa5(6h\xebvS\xa6\xf6mI\x97Z\x16&\xe8t\xc2\xd9v\xba7[\xb1u\xd0z`\x18\xe3\xf2\xb6\xb4\xb5\xd3\xe9\xa6.\xc3\x8c\x81\x95d\x9a\xe6\x9a\x81vy\xad\xe5\xdeK\xf9\x08\xf5\x13\x8e.\x0bN\xea\x7fA\x00\xbd\xcc\xe3VK\xb5\x00P\x8e^\x0b\xfa\xf3\xc8:\x82\xack\xef\\e\xa6\xa3yi\xa3\xee\xac\xcdjR\x96m\xc8\xce\x0fX\xc6\xf1`\xfciC\x15\x1e!\x84H\x1d=B\xeaS*\x00\xc4\xba\xb8e\xeb\xf8'\x8d\xb5e\x0c|\x8b\xe7I\xdc\xe4\x97\xb1\x83\x97\x8as\x8cn\x1bh\n\x9bs\xa25o\x03 \x01\x94t\x18\xf0E 7\x9b%\x1b\xd6\x9f\xb3E\x83/\x87\xa5\x9bMq,q\xc6[\xc9 H\x19l36\x87<\x81e\x1a\xc49\x041\x04\x9bM\x14\x8a\x80\xd3\xf3p\xb1`)\x8bs\x88\xd8\x15\x8b2H\x16\x10\xccf,\xcbx\x95y\x90\x07\x90\xc4p\xc9VA\xb4\xe0\xdf\xf2\x15\x03\x16\xcfy\xa3\xe9\x00N\x82\xd9\n\x9e\xbd:\x85up\x0bs6\x8bx\x7fI\xcc Ia\x9d\xa4\x0cp2\xd9\xa0i\xf7\xf5Q\xf3\xa6R\xf6\xb7m\x98\xb2\x0c\xbbZ$Q\x94\\\x87\xf1R\xb6\x04Dg\x80b\xe1'1\xcb\xe06\xd9\xc25\x9f\x9a\x9ac\x9e\xc0\x19\xa5\xd1\x85\xb7\xa7\x03\x07\xe3\x03\xef\xc6\x81?\x8d\xfb~\xac\xbb\xd64J<\x9f\xcb\x91A2\x9f\x06%\xc5\xbe\xf0\xdb\xb6\xa6w`\x00\x92\xbd\xb5\x05\x8dA\x10oR\xa9\xda\x19\x04\xa7z\x9ft] \xeal\xa3\xa2\xe4b\xbf7\x1b\xd5\xef\xf2<\xc8\xa7?,\x96\xa8\x7f\xb6\x93\xa1\xffy\x17\xb6\xbe\xa8\xda\xdd\xa6T\x8b\xd0\xaaH\x0b\x9aUo2\x905\xeb\xdc\xbb9\xbaw\x93kC\xe5\xe3\xd1\x16\x1a(\xd8\xc1}^h\xdc\xc1&\xfc3\xbb\xe5\xc3hR\xa4#*|\x19d\xe1\xac\xad\xecL9\xd17+\xdb\xb9\xce\x9a\xcc\xda_v\x1db\x06\x93E\x13C\x9a\x05\x19\x031\x0fgl-\x06bh\xb6\x83\x8dV\xce\x02\x1d\xb5&\xe8\xae9AW\xed j\xfaJ\x87\xc8\x1c:+\xec\x10\xf9c'\x0d\x0dHF\x15\x1a\x9a=\x8d&4\xe8\xf6\xf2\xb9LY`9V\x05\xb5\xbf\x08z\x9f\xb1\xbd\xd1\xbf\xb6\xf7\xf7\xb9\xbd\x92U~\xf2\xcev\x928A\xedn\xf3\\|p\xde\xc6\xef\xe3\xe4:Vas4'nTB\xc1\xf1a\xd1\xf5v+t8\x0bo\x1b?\x8d\x1bz\xe0\xf4\x7f\xde\xae7V\x15\xcb\x90h\xe6\x7f\xf8 \xe8\xefR\xba\xfc\x97L\xf9\xbfD\xa6\xe4\x82V\xd2@HU\x1c\x00\xd7A;E\x93\xd0\x14\x17e\xd7,\xcb\x82%k*\x9d\x16\xa5\xb3d\x9b\xce\xac\x02\xd4\xe7\x92\x1e\xdd\xc6\x83\xb3\xb5\x85m\x05\xcc\xd3}\x1b1\x13\xe4\xea\xcfe0{\xbfL\x93m\xd4)\xd5\xe7\xfbm\x80\x1e\xf5\x07\x97\xe7\x1f\x16\x98\xbay\xa7\xa1t#\xaa\xc9\x95\x16t\x7f\xea;w\x8a\xd4\x10\x9c\xe0\xe14\x1c[z\x9c\xfa\x92\xdbX\xd8\xef\"\x94w\x1b\xdc\x83.(u0\xb2\x81\x12\x95\xba\x99\xc4@\x19\xe6\xda\xf7.\xc44\x8d\xcei\xbc\xd9\xe6m1v\x03*\xfb:\xb9n+\xb9\xa5\x92\xc7I\xa3\xb0\x08*\xff$\x1e\x19\x9fp\xc1\xac\xad\xfc\x8c\xca\xff\x18\xa4\xef\xe7\xc9ukX`\xcaB\xe9\xfc C\x9d\xbe\n\xf2U\x9bO\x0e\x08\x17\x96\\\x04W\x12\xa4\xa9\xb9\xc2\x1c Y\x10E8\x85\xcc\xf5v;\xf0\x92\x8fdo$\x11\xf3%9\x9d;\x1e\x9e\x7f}\xba\xe9\xa2\xdb9W\xcb\x19\xea\xean{\x99Y2g\xaaT\xa2\xe2\x04\xbb\x0e\x07B<\x07t\xfe\xff\xff\x0f\\2pz\x8e\xbd\xa5E\x9b\x11\x84\xa2#OU\x16\x19\xcd\xe7\xce\xf1!9\xb7V\xc6\xb4\xb6\x9bF\x87\x98\xd5}\xc3\xf5\xb2y\xd3\x19j\xd0\xb62\xad\xb7\xf4I\xf7\x19\xcb\xf5\x9a\xb3l\x96\x86\x9b\x1c\xa3^7\xcf\xe5\x93\xc7\xa4\x1f\xfc\n\xbd\xa8\xeb\xd6\x96w\xf5\x8b\x8d\xe24\xde}\x0ca\xfc\xd9#\xa0;\x13j\x14\x88\xeec\x07\xc1\xa4\xc1\xf1\xa04\x18\x07\xbe\xc1\x07\x1a\x9dB\xb6mC \xdb\xc0Dx\x8ep\xe5\xabE\xcd*L\x9e\xf2\x92\x06\xfel\x82%\xcf\x87yS\x98\x8a\xae\xde\x83\x9f\xe4g\"\x1fT\xcd[\x0f\xb2\xa1\xfd\xe4\x1d\xc0\xea\xefD\x9f:\x0b\x1a\xa6\x80\xa9\xa6\xc3\xec\xf2\x907m\x97\xd3u\xc1\xa2N\xbbK\xbb\xa67e\xdd\x85+\x91\xfa\x8e\x15\x97\xbcZN\xe3\xc8[6\x0f\xd2%\xcbi\xe3\xede\xe5\xdd\xb7\x8a\xbf<#\x91\xbcmg\x85\xc0ega6\xf6\xc5\no\xfd\x10\xd3L\x87\xadz\xfc\xbf|\n\x8a\xe7\x93\xac\xbe\xffd>\x05\xb0\x9bN\xde\xe9f)\x88\x9e\x7f\x83\xc4\xdc\x0b*\x186\x8cb\xdb%|\x05\xdf\xd1m\xab\xde\x11a\xa9f\x9d`&\xf3a\x0b\xc1w\xb0\xcdXj\xbfP#v\xbfK\xf6RR\xce\x1b4o\xa9\x9c7\xccS*\xe7p\xd4Bs\xe4\xa8m\x8a<\x7f>r\xf0\xb4\x9a\x19\x7f\xeb\x94\xa8\xffp=\xbf\x8bc\x06\x94\\HZ\x95\x0e\xbaM,\xf5\xfcX\xd3\xf39\xda\xd8\xd6\xbe\xbe\xf0\xffK\xb5\xfdv\xed}\x978\x93\xf0;\xd0\xf6\xa3O\xd3\xf6wS\xdf\x17\xbb\x99\x08\x0c\xda\xbe\"z\xedj\x7f\xf2\xab\xaa\xfduc\xa3\xfetP\xfb[N\xccH#\xb1GH,\xd4~\xe7\xdb \x0bg\xe5\xe8\x88\x8e\xbdj\xab\xce\xdb\xac\xc3\xa7]tx\xfb\xb0\xad:\xbc\xadJ\xd0\xb6\x14\xad6\x89O\xd7\xe1?yLU\xdd\xf5\xad\xe4yR}\xb5V\xac\xa8\xaf\x8e\x0f\x1b\xfc\x9f\xeb\xaf\x0d~e\xcd\xc3\xf9\x82\xfa\xabpC\x9f#q\xa7?[j\x10\xafw$\xde\xfe*\xfa\xf1\x17\xdb\xa8WA\x96]'\xe9|\xe7\x8d\xd2\xed\x0c\xbf\xde>\xed\xbe\xfa\xc16O8g\x8bX\xcew!f\xd7\xfd\x8d\x98c\xb7}\xebXZ@P\xc7\xd2\x9f\xb6\xcb_\xc4\n\xf2Y\xde{\xff$V\x10\xd3\x11yy\xc8\x8b\xdf\xbf\x15$\xd5\xac \xf6R \xda\xf7;\x18I\xd2\x16\x99\x8d\x1c\x9b)\xb5\x176gf\xe0\xc14<\xe7\xb2\x85\xaf\x9b@\x9a\xe4V\x94q\x03\xf3n\xa2\xe5\x84Y\xa3\x0b\x94w\xf5\x9f\xc9\xc7aa\x8d\x1b\xb2\xb0\xf98,l>\x0e\x0b\x9b\x8f\xc3\xc2\xe6\xe3\xb0\xb0\xf98,\xc8\xb2R\xfe\xc0\x05Yw!M,\xfc\x8fGw\x1fxf#\xcb\xe2\xb77\xb2l\xbe\xa4\x91\xe5\xf7\xe6\xf80\xff]:>\x04\x9d\x14\xee\x85*\xd9A\xc3\xe3\xbb8\xe3 B\x17\xf8\xb3\x06\xc5\x07\xa3\x98\x0c\x8a\x04d\xae\xd0\xc8\xed5\xae`Bb\xf7\x86$\\%j\xb5f\x16]Wj\xce\xa2\x90\xc5\xf9\xa9H&\xba\x1a\xc8\xdfm\xed,\x8d\xed\x9c\xb1Y\xca\xf2r[\xf4\xae\xad\xbd\xdbJ{R\xacx\x8379\xb0\xb6\xc8Q\xd8\xbfL\xe6\xb7\xceg\xbb\xa7\x04\x9b\x0d\x9d\xb5\xad\x06\xe2O\xfb\xe0\xbe\x84+\x0b]\xdb\x1c\xc3\xf4\xbc\x01\x14\xc5\xe27\xa6\xdb\xd4W\xb51\xb9favkH\xea(\xd7y\xdc\xb8;\xfan\x8c\xe1\xd6X\xee\x1f\xe0\x8e\xf3\xab\x18\x9b\x9a%\xbd\xaeaU@\x85Vi\xa3?\x00\xbbEV\x81]\xa3\xab\xc0\x8e\x11V@\xb0\xe1\xbc\x83\xcdkKS\xec\x96/\x05\x8a0+\x9d\x8c^\"\xa9I\x07\xa3\xd7\x82Jv0zm\xba\x86y\x01\xe9J\xb2\x83\x85lE\xe5w\xb3\x90]Q\xa5\xae\x16\xb25\x9e\x1b\x84\xd9\xcbgg\x87\xcd%9\x89^\xbb^-\xfe\xe01\xd7c1\xea ^o\xc7\x9f\xcd-\xdd\x16-\x11\xf59N\xd9\x9c\xc5y\x18D\x19\xb5T\\\xa4oi\xea\xff\xb2\xf7\xef\xebm\x1b\xc9\xa28\xfa\xffz\x8a\x12fN\x06\x1c\x93\xb0(\xdf\x99(>\x89-\xef8c\xc7\xde\x96\x9d\xcc\xda\x1ao} \xd0$\x11\x83\x00\x02\x80\x944\x89\xdfe?\xcbz\xb2\xdf\xd7\xd5\xdd\xb8\xf6\x0d\x94l\xcb\x19c\xd6r(\xa0\x80\xbeUW\xd7\xbd\xe6\x98\x04\x06I\xfc\"6/\xeci\x0d\x8eu*I\xc8\xe2\xf9\xd9\x91\xc0\x9f\x14\xfc\x96\xfeSg\x98)\xba\x9d\xb9\x07\xdf\xf7\x0d/\x1e\xa1\x15\xe6Cj\x16\xe5\xc2\x82\xb8t9u\x80W\xc5\xdf;\xbaT\xa7\x9c\xad\x1fG![\xbff\x88\xbf\x08\x040\xf4\x0fsC\xe8;y\\/dK\x1dgT\x9a^\x99\xaf\x94?\x06\x07\xdc\x17\xdfm\xca\xd5\xc1\x18\xe8\xed\x16\x1a\x823\xd2\xb9\xbc\xacL\xca\x02\xbd\x0e\xd57\xe8P\xcb\xba\xca4\xe7Ft\x1e/\xab;\x0d\x9dj\xbd\xf5\xd0g\xa7\xff\xa5J\x9b\xc8\xde8\xd6\xb9\\mM\xc3\x14\xaaU\xd9Zj\x868\x86\xb3\x1d=\xbd\\'Z\xd3\x11F%\xc3\xcc9\xdd\xf8s\xfc\xb9\x1ci\xbf\x99\xf5?\xc9R}\xbcy\xf5l\x80{SRo\xd8\xea\x13o\xf2\x98\xe5F\xa9\x19\xd5~\xef\xea\x9f\x17\xd6\x1d}\x9d\xbe#\xac\x83\xd6\xfds\x1a\xb8\\\xd2\xd7\xab\xcei\x1b\xd4/s3F\x077\x88zm\xc7\xe0<\x89\xd3\xb3\xe13\xca6\x1e\xfa\"\xd6\x93\xb8\x87\x93\xf8\x10!5\x0e\\\x81i\xe7\x1b\x01*=\xb0~\"V\xe5:~\x82AB\x98\x01\xe5\xb4\x92\xb4\xb4\x13\xb2ij\xff\xcf\x068\xaf\xb57pe\xf9\x12;X\xf5\x19\xa3E\xa4\xf4\xe71\x15\x17\xa6\x9a\xf8y@UE\xf1\xaeL3\n\xa8\x1b\xa0r8\x11\xf2u\xa6\xdeDa\x7f>\x0dl\xb7\xb5\xb9\xc2 \xfd\xd2\x9f\xe0'/a\x83@\xfe\xd4JE\xfd\xb1\x11\xb0\xda*Z\x04\xcc\x9aV\x8d!\x08h\xe3=\xf9\xf9b\x9b\xa5\xb1b\x98i\xa3\x8dq\x96/}\x16\x18'\xc6r\x8a\xf94\xb4\x08\x87S6\x14\xd9\xda\xd4\xae\xa9d\xf8|(^\x81r\xafqR\x11 \xdb\xf3\xb9\x0bV\xbd6\xbf\xb8\x1bfiF\x98f\xdc\xbf@?B\xaeoi\xab\xe9\xb48\xf3\x8aA\x02B\xea\xf8\x95\x81=`i=\xb4M\xd7\x0e\x14W\xd9\xf0o\x1b\x92\x1b\xc6\xfc\xbf)\x08d~\xee\xafII\xf2\x02}\xe6)#\xc99E\xd4t\xaa9^|\xdce9\xbf\xfaJ\x8c\x19\xd9'\xc5\x96B\x1e\xd4\xdd;\xa3\x9f@f\xbc\x01'\x14\x8fZ>\xf5\xea\xe9\x0bk\xf642\x1cf\x15\xd8`\x02\xf3g=\xcd\xea\x89\xb3:\xc8,\xd8\xa6\x86\x9fA\x07\xbd\x0c\xda+\x86\xfa\x12\\\x1aB\xde*+\xc4\x87 m\xbd\xfduE{\xe9\xa3\xef\x93\x82YWl\xf6\n\x03\xfd\xb2_\xda\xfb\x85O\xe0n\x18\xcd,.W\xb5\xdfd\xf8\x7fl\xd3\xbdK\xec\x81=$\xfb\xa7\xf8\x8fe:W{-\x01W\xc2\xee\xb4\x92\x98\x9d\x9d\xe3 \xd3\xef\"\xe6\x9e\x0e\xcb^\x0df\xa5\xa1\xd1\x13\x12\xacS:]j\xe2\xa03y\xc1\x8a\x04\xef\xe6\xa9\xa2 \xb8\xb84\xadZEt1\x9cc^\xdfV\xe9\xc3\xe8\xdea9\xa2\x1c\xb8\x01s\xfc%\xba\x8a\xb7\x84\xfb\x8c\xd9PD\xaf0*(i\x08gpf\x06\xe6[\xa9\x9a\x19\xf3\x1b\xf5\xce ^\x9a \x1e\x19\xb6\x05p\xdd\xe4% 54\x89\xb5\xf5|\xed\xba\xd4\"\x9d\x8a\xb9OM\x0c\x8bJ]~\x170M\xc4.H\x8dTp\xe7Q\x9au\x94\xd0iO\xaf\x96\x03\xd6^r9\xbd(t\xdal\xea\xbfMM\x97\xf2\xb2\xd4\x15\x84$\xb5\xef\x18\x8e\xae\xc2\x03R5\xe0\xd0f\xb8\x1f\xcf\x03\xf2\x92\xf87<\xeb=\xb0\x859G\xc9H\xc7'eC\xda\xd6&\x887\x1e\xee\xbd\x0c\xf8\xba\x9e\xdb$\xc0\xff4}\xaf\xde\xd2v\xbf\x91\x15_\xb3\xfa\x97\x1d\x81Ej|\x18\x90\x1e\x1fx\xe7\xab\x14\xf9R(K\xc7\xddz\xcc*\xc7\xdd\xf0\n\x1cw{\xe5\x95\x94\x94\xa3\x94\x94W\"\xbb\x97Wj\xe3\x82i$\xc0GS\xd6n\xc3\xea%\x1b\\\x04\x8b\xe4\xb9\x112\xad\x1dq\xd0\x15O\x0d\x19\x0dq\xc1\xf1\xe1\x10R]\xe2\x92\x8d\x88\xf4\xac\\\x00\x15\x0en^\x10\x13?\xd7\xf8\x1f3\xc7\x82\x19\xe8Y2\xce]\xf9\xfa\x82\x1c\xc2\xd8\xcb\xe0\xe4h\xce\xbd\xb6\x02\x81\xc7#C\xdffU\xa4\xba\x16\x8c\xaf\x94\x96M\xad\x17T\x9b{6`S\xaa\xcd\x7fK\x9b|$\xe06\x8a\x91*\x11\xbc\xc5mZm3\xe1\x1covw\xcf\xd1q\x02\xb9H\x9doj\x8a`\x94\xc1/D\n\x019\x06E\x0bp\xb1\xcc\xf4d\xca==\x18K\xca\xcbJDIH\xce_,\xdctd\xf2\x97\x8b\xa0\xf72\xaf\xa0{\x92\xbe\xd5\xf8uXy\xd1C\xc3crx\x15\x1d qA`/g\x1e\xda\x8a\xf1\xc1\xb7t\n\x18\x84\xb9C\xa23\x9d\xcf\x0dv\xba\xa9\x9c\xc7\xf7\xb4\x89\x84\x94\xf5\x8148\xd8P\x04\\1\x0e\xb6\x91KOY0\xaa\xd5\x14\x9e\xe1\xcbsX\xa4cPE\xdf7\x16\xc9WO\x02\xe3\x98\xacF\xdf?\xe8\xd4\x1e\xe9\x89\xcdy\xc46\xaa\xd5y\xc4\xe6\xd3\xe6_\xfb\xe7\xca\xbf\xbe\xf2\xb2M\xb1r\x9d\x9c\x14Y\x9a\x14\x04\xed\xca\x87\xa8\xd3WP3E\xde|\xd6^ev\x1c\xd2\x1a\xba\x9c\xed\xd4\\\xdf\x95\xf8C\xcca\xcf\xf3y\xc8\xe0\xd8T\xb6^hS0\x87R\xa0d\xe9\xc0\xe1!\x92\xd1t\xc1\xa2X\xc4\xe7*C\xdd!\xaa\xff\x12\xfa\xc17\xaf\x9eV\xb2\x9e\x9bu\x03\xa5(A\xd9b.\x03Vr\xeb\x15 \xa3\x9c\x04\xe5\x9bZ\x9f\xd1\x13\xe8t\x0c+\xfe\xd1\xaf\x9c\xd1[\xf6\x93\x8bS\xa7\x95\x84\xe1\x8b\"9\xa6@\xb09\x8b\xe5\xd4\x19\x89\xba\x06\xa2y\x99Lp\xee \xcd\xe6q\x1a\xbc\xc3\x12\xeey\x1a\x9f\x9e\xceK]\x08c\xdbF\xc4\xff\x92B3\x0b\x11\xf1sI\\\x94\xb1\xde\x89\xa9\xce\xc9\xf5\xcc\xa1\x8aD_\x9a\x03\xe4Z\xd69\x19\xb3\x1f\x07X\x15\xd9\xbd\xf7y\x9c\x05\xd0\xd29\xad\x88\x1f\x92\\b\xf53\xed\x19\xbb\xe0\xc9F\x98\xa1\xa0=\xc0\x9b\xd4\x17\xb2\xce\x1b\xd9\xc1\xbb\x12L{\x81\xcc\xc9N\xea\xd1\x86\\d\xfc(\xc3e\xae\xe9\xa2I\xfb\xe1\x8e\xc1\x81u\xe1\xe8G\x1d\x1aGm8\xf3\xa1M\xa0%Y^\xc6;gr\xb1\xa9\xa7\x06=*\x06W\x9c\xdb\xa1X\xa5\x9b8\xac\x08\xe1\x9b,\xf4K\xdb|\xac6\x15\xcd\xeb$\x0e\x9e\xd0\xf9\xa0tI\xea?\xff\xf8\xa3 E\x0fq\x0e\x81?\xdbO\xd9\xf1\xcd\x9f\xf3?\xda\x10aTd\xb1\x7f\xc11\xeb\xb1P\x7f\xb07\xe4\x0f\xa5c\xf8\xdcR\xb2\x8a\xe9\xd4\xc3\x0eM\xca\x9a\xd6\xf0\x06C=T\xd5\x8e\xe5\x93\xac\x7f\xd3\xafx=\x0b3?T\xcax=\xc7\x07\xfc\xc8\x12\x98\xa2\x87\x0c\x98\xf3\x00\xba\\<\xdfPi8\x14\xe4\xe9!\xf8\xde\xbau\xebI\x9a\xbb\x9b1\x14#\x98\x81\xef\xe5\x9d\x9b\xfa\x86B\xa8\n(S\xa1{cL\xa9\xb0\xa2\xa7+\xcf@$\xd7\x974\xafm\xfd\xf9\xea\x10\xf1\xca\xf4\xc7cSE\x97u\xfdb\x92\x96\x8f\xd3\x00I\x12\x86\x87k\xdf[\xd6\xef\x11\x9b\xf4\x1d\x175<\xfa.\x1a\xc0\xe75x\xe3\x98\xd0\xber\xda\xb7{n-\xd2VlO\x1c\xca\x9f\x92\xa4\x9c`\xe4\xd8[JZ\xb6'\xce#~\x13\xa3\xc24y\x85\x80\xeb\x94\x12\xd7 ,\x16\xea\x9c\x81\x8a\x8d\xfb=\x0b\xcf\xd2\xber\x0c\x87]wm\xa3)\x1c,\x0enk_W\xe8p\xf9\x0c\xc3\xe2\xc8\xe8\xf5%.\xa4\x95z\xa7\\\xe0l=8\x98\xe3\xcc\xc1\x90\xf7\xed y\xcb\xa2\x15\xb5\xef\x9a\x92x<\xa2\xe24\x1e\x06\xc7\\\xe0\x96\x8b\x82`1iMn'\xd0E\xaa\x1c\x99f\x96\xd3\x0fm\xe2\xf6\xd1\x18V\xda\xf4\x06v\xcc\xd7\xed>\xf3\xf5\xe6\xd53-\xdf5\xd4)TD&\xd2-\xa0\x1e\x8f%\xa3\xb7\xd2\xa7Xh\x8e\xe7\x98\xe4[\x92\x83\xd8O\xda1a\xf0\xcc\xc0Q\xb1\xcf\x16\x13\xf6\xeeN#+\xe9~1\xafR\x99\xef\xd85\xb6\x1dw\xec[8\xa8\xd1 \x8d!H\xe3S\xd6d5\xeb\x13z\x8f\x1fk\xban8h$\xd4.\xd1\xd5\xf5\xc7\xca}\x9cv\xea1)\xfd(.\x0cy=J\x8c\xa4\xfdP\xab\xf8\xd1Vo\xe8\x92\x85cX_e(S\xd5\xfe& kfc\xa7\xd1G\x8d\xe0\xba7\x8d\xaf\x81S\xf9\xf8_1\xaa\xed\x84_K\xdd\xf4\xb5\xca\xf7\xb6\n\x8e\xc1\x0d<\x04\xe1\x86\xb8]\x95\x99\xae\x03\x18.4\x9f>7\x0e\x8e183\xb80\xb0\xc8\x0c\x8e\xa5'4\x04\x17m\xf2x\x06\x06\xe6\x9c\xf3\xa7\xda\xcc\x89\xf4j\xca+\xba\x98\xb1\xf7\xf5|<\xd2\xcc\x871\xb4\xb2\xea\xd7\xb1MS\x11=\x96\xe7\x97 k\x10|\xed\x0c\xe6\xe6\x06\xd5\xe1-\x97\xf0\x85\x97\xeb?C\xbc{\xdd\xf4\x9f+\xa5\xfe\x13\x9f\xf4\xb4\x96\x91x\"S\x80\xaed\x9a\xd1\x0d\x7f\xd0\xd3\x8c\x16\xfcA\xaf\x8d\x98?\xe8iF\x03\xfe\xa0\x97\x1dy!\x1a\xdf\x7f\xd0}\x94Q\xf1e%\xb4\xa7h}\xec@\x84\xa2\x83\x8a\x9aU\xab\x8f\xafO\xdd\xda\xda\xd6T\xa9\x94\xa5&*\x99\xfd\xac\x99B\xb9\xb0Q\xbcEm\xc5\x9bE\ne\xac\xd0\\\xc7]\xbc\xc9\xe3!\x96-\x9eU\xb9\xad\xce\x90\xcb\x19\xc2LG\xce`!z\xe9\x12o\x93\xc7.\xe6\xe5\x17;5N\x99\xa3\x00\x95\xe4\x99;\x87+\xd1\x14\xca\xe7*\xe5s\xd5\xd4\xe3\x8c\xdc\x91\xc7\x1d\x8f\xd2\xbc\xe7\xf3\x04`\x9d\xe3\x17\xc9|\x7f\xbaT\xba\x86f\x9b\xb3\xa6\xabd\n\x0f\xc1Y\x95eV\xccn\xdeL\x13*Q\n\xbf\x06/JoV\xef9 \xab\xaa\xd7K\x8a\xab\xb4\xb1\xc5\x0d\\\xa8\x15\xa6m\xcb\x9b\xd2\xc6\x16\x08z\xf9K\x14\xc7\xafH@\xa2-\xd2\xb6\xc2\xc2\xec\xa6\x94\xd3\x85\xe2}\xf8\x12\x81\x88;\xb2p\xac\xc7uB`\xdb\xa5\x02\xddr\x95\x03\x96K\x1eZ'\xf3\xb1o/\xa1\xec\xd4\xbc\"[\xa7\xd8\xa9t\xce\x1b\xba\xe3\xf6\xe4\xd3\xed\xab\x9e\x1a\xb1d\x99W\xf8t.\xffM\xde\xe41\xa3Bu\xb1\x83j\xf2TqF^\xb0\xc9s\x92\x94OXj\x08s\x85\x93-%I{\xcc\xf9\x03\x7f\xbb\x1b,4\x97f\x05\xff\xc6f\x0c\x18\x9f\x88~\x16{Q\xf1\x93\xff\x93\xbbB\xfd\xca\x8a)0\xc4K\x1b\xaf\x88\xa3\x80\xd0M\xb2\xd2U\xc9m\xf9dlzy\xc5|\x13\x9fDw\xc3F \x87\xeb\xa4\xd5:\xea\n\xba@=dU\xbf\xac\x12\x92\xb1\x9d]\xb5\x89\x89\xf5\x0c\xf5\xb5\x00\xb5 \xcb\x17\xf3_\xad\x12\x99\x95\xfeR\x9b-F\\\x9d\xdd\xa7\xcdB\xd3~\xa7\xca[\x93\x9a\xdf\xa8\xf7\x9f6\x8bC\x0b\xdc\xc2& \x8c\xe7\xe8\xae\xbei\xe9\xa1!,\xf0\xe5\xcf|L\xa3m|\x0d*\xb2\xc5\x8d\xc5\xe5*5:\xf1\x89+\xc5@M\x816\xcf\xa2\x82\x9e\x8b\xb4ez\x98&c\xc8u9g\xc4\xc5\xd1\x8f\xc7j\xba%\xaf\xa3\x85\xa5\xad2\x98\xc1bTi \xf3Q\xad\x16\xdc\xb9\xb0\xba\xb8XJ\xd1*3\xa4\x05\x9a\xd0\x8b\x9e\x1e/\xb1\xac\x90\x05\x96\xd0+\xcd\xac\xd0\x1b\xaarE\x169@\x01\x83\xb9\xe9JY\xa17T\xdb\xc7\x08\xaa\x91\x8c\xd8\xe3F>D%d\x13\x8a\"3\xa6\xb5\xfd\x06\xa6\xbaB\xde\xab[\x0d\xaf\x8c\x9fR\xa8\xc9\x17p\x856D \xce\xfe^]8\xe9R\x96mYy\xe6\xcf\xc9\xb2-\xad\xe1\x9b\xaaj\xf8F\xaa\x1a\xbe\xbe\xaa\x86\xefFU\xc3\xb7P\xd5\xf0\x8d{5|Y \xcf\x82K\x05m\xe8@\x04\xcb~\x16%~\x0d\\\xfb\xa7\xe4\xd8\xafi\x88\xe0\x10\xee\x9cq\xe6\x8c\x1bPC%\x02J\x0d\xc2\x8e\xb2`\x15\xc5aN4\x944\x1d\xc6\xa9GC\xb8t\xdf\x9aC\xdf\x0c\x90/\xb0p\xb2\x8e%_\xb0\xc38\x0d\x8e\xce3?)\xb4Q\x14\x19?\xb8I\xf6,J\xdeE\x89fFCQ\x04\xd8Y\xf8qAX\n\xfeL\x0dO\xb9\xf4\x0d\x96\xfd\x8c\xfd\x0c\x1dk\x95\xa0[\x06jSes\xcd@\x1f\xf3\x1e\xeb@\x97\x0c\xd4\x04V\x05\x164\xa1\x1aJ1\x9cb\xab\xb7\x15\xb5r\xc8\xe7yz\xa6\x19\xdcY\x14R\xd2\xe0\x1c\xec\xeb\xbccH\xb4\\\x95\x0cjpo7\x85>\x14\x88\xed\x08\\\xab\xbf\xc4\x14\xcf&\xd8\xe7 r8t\xa9\x9aw5\x9d<\x8f\xa3\xe4\xdd\x0f\x83>\xa6\"6:\xad\xa3\xb6\x86rT\xbc\xc8HB \xf6\x91j\x9er\xa3\xf9@\x92JC'xg\xe2)\x1a\xe6{\xce'BcX\xab\x9d\x16y\xba\xfe\xf1\xd8\xfd\xbd\x1b\xcd\x87\x1a\x0f\xa7\x9e\x94\xf7\xe3k\x97\xd0\xb4/\xd4g*\xa1>S \xf5\x99J\xa8\xcfTB}6,GS\xe6vc\x94\xa9\xe4\xeef:\x97\xf3\x05~\xed^sY\xb96@&\xecg\x1f_\xd8\xd7\x9b\xe9\xbe\x08\xfb\xe2\xfap\xc2\xbeP\xa4\xaa\xe1r\xcbT\x05)\x87\xc3@R\x0dc\xc9\xb4\x07\xe9r\x19\x13d1\xd5\xa0L\x82O\x93\xd79\x15\xf8\xf1\xb8T\x03o8\xf0#? Hl\x00.8\xf0\xd19 6\xba|\xfb\x0b\xa3\xe1.\x1b\xa0<\x08\xadU\x12\xabjq\x8cz\x8e\xed\x10s\xea\x1a\x81\xad2q/+P\x8b\xef^\xb0 \xf5\x8b[\xc6\xef\xce+P\x8b\xef\x9e\xb6\xdd\xce*\xc6J\xc3z`\xb8\xbd)w\x02\x15\x9f\xcf\xbc\x90d9 \xfcRW=\xe0\x1c!\xb98\xa4\x06;F0}n\x8bG\x08c\xcak\xf1\x0e\xa1R\x8dn\xe7;\x84\xd0*\xe0^\xf0\x8f\xf0\xe9\xd2\x95\x9c|\x89\xa0~\x1c\xa7g\xaf\xf3\x8b\xa7\xe5\x8b\x8d\x06\x83_\xb3y\x1b\x98-\xe49\xeb0\xff\xfa\x11\x13?\xd5\xe0O\x11\x9c\xb0\xbd\xf94y\x99\xa7\xcb\x9c\x14\x1a,\xf9\x15\x0e\xe1\x9d\xd7P\xea\xa8A\x7fB\xd0\xa6\xeeF\x0d\xfb\na1\xdd\xb7,\xa3\xb7\xb8\x1e#\xc6 %Q\x9ai\xb5@\xcf\xe0\x10\x1e3#_\x15\x02\xae\xd3\x8f\xbd\xa9\xe1\xb3<\x0d7\x81\x1e\xfc7\xee\x8f\x8c\xa9G\x9eEE9r\x1f\x8f\xe1\xc4iT\xd5\xd5\xf5\xee \x1c\xc2\xb6F\x9bc\x1c\xba{<\x86G\x9a\x97\xfe\xddQl9c\xf8n\x0c/4\xca\xab\xef\x9b\xbd<:/ \xeaI\x8b\x91\xfbX\xd3\xcc\xcf\xc8\x04\xd9\xcd\xda\x0f\x0c\xb6YKX\x0d\xfc\x0b\x03\xe6\xf8\xa6\x83\xfc\x91A\x06,w\x9d\x1a\xee\xbf\x19\x9c\x8d\xf2\xf5\x1f\x0c\xd4F\xf9\xfa\xbf\x18(\xc7G\x1d\xe4_\x19d\xe5\xd5\xc1\xb2,h_\xf9?\x9dW\x8e\xf4I^\xfe\xd9ma\xb3^\xfb\xb96\x17\xca\xfff\xaf\x98\x14\xc2\x84\xf2/!\xcf\xe9S\xe3\x86\xda\xa5\xf7\x19f\x8fe)d\xd1\xc4\xf9-\xec\x9b\xdc\x95\xd0\x9d~\xef\x19\xee+\x1e\x9a\x97{\xad\xec>,F\x87\x838\x9c{\xd3\xb9p\xe4\xe8\xe0R\xf43\xf1\x8c\xa1$\xb6\x16R\x10\x1e\x04\xb4\x7f't\xdfI\xd2\x84\x02\xd8\xe69\xb1\x12\xe6\x9b\xaa\xdb*\xe7c}2R\xf9\xf6\\\x06\xe2\xc0\x0dx\x047\xc0\x91\xe9x\xdbP\xea\xd5\x8e\xc2\x99F\x03\xfe\xefZ\x01\xaa\xd4\x80\xaa\xa6\xe0\x9fZ-\xb1\xc0[\x94ngp\xaa\xeea\x83S\xd5\xfa\x98\xb4}K4\xa7w\xab\x84\xd3Z\x0f\xd7\xf0\x9f\xd1\x1c\xf6\xb53\x84\xca!W=M\xffm\xa7x8\x1f:\xfdC0\xb0R\x8d\xab\xeb\xe2\xbf\x1f\xc3c\xba!\x1f\xb3-\xfe\xc7\x1f\xcc\xff\xe4\xf0\xf0\x10\x1e\xd7\xce(\xea\\\x13\x06?\xe8J\x15u\xeb \xd3\xd5S\x15z-\x03\x18\xbaU'\xee\xed\xe9TC\xe8d\x13\x10\xa7~\x18%\xcb\x89\x9fDk_c\x1f\x19\x8d\xe1H\x9bX\xc8`%\x91\xb5\x8d\xea\xcd\xd3$\xcd\xd7\xbe\"\x07\x10&x\xfa\xc5\xcf\x93(Y\xce\xe0qM\"Fc\xf8\xd5\"\xcf\xd1\xb0\xfe4\xd89}\xa9\xca\xab\xc6Bcf\x10M\x83\xff\xb01G\xfc\xaaX\xd4\xd1h\x0c?\xd1y\xfc \xc3=/\x91\xb6E6,\xc1\xf3N\xc24(v\x9f\xd1\x0f\x86YO\xa2$\x84u\x9a\x13\x08EF\x9f+^\xd8\xd6\x0c\x0c\x1f\xb91\xd0\xd5\xd8\xe6\xa99\xeb\xcceq\xeb\xa7\xa6\x18\xa4\xc23u\x1b\xff[\xd7\x86}\xb0\xac\xc5L\xc4\x91\xf6\x0bJ\x8b\xd6O\xda\xe8X\xf6\xb4\x91c\xa7yj\xa87\xd4\x0f\xbaa\xd7R\xc4\x0c~\xb3:\x85yA\x10;\xf1\xa3\xe2Ef\xf0X\x03\xc5+x\xff\x03\xdd%uj\xb8\xa6\xbaL\xeb\xaa\xdb\xd2\x95I\xeb]\x89\xab#\xb9\xcf\xe0\xb9\x86mi*\x12f\xf0R\x0d\xb9H\xa4Ev\xc4e\xcdP5\xb4d\xda\xecE-\x15\x996\x7fQ\xe6\x97\xab\xe7\xdc\xb1\x93q\xe1\x86nr\x17\xe4P\xb1\xe1*l|\xae\xc1\xc1\xbf\xeap\xd0z2\x98M\xfeX\x0d \x1cV5Ly\xda\x91\x1bgB\x03Q\x98\xe5H\xda~\xf5\xda\x16\x15b\x85;\x12\xda\x91\xe31T\x1f\xd1\xe9!\x96\x84\xbb\x83\x91\x90}l\x06s\xafh\xdd\xd1\xacs\xff\xe5\x0b\xafw\xd3\xf0>\x05\xf9\xd9\xcf#\x8a\xf0?3\xed;\xffH\xef\x89a\x18Mx6\x8ca_8Z,HPF[\">\x85\x9d\x11\xdf\xa9\x9e\xe2}3\xfe}\xf5\x15\xbc\xa4\xff\xbc\xc2\x7fLtq\xa7cV((T4Z\xd5\xd8\xff\xd2\x9eo\xec\xa33x\xf5aq\xdf\x96\x98\xf0H\x16\xa6!\x9b\xc1\x13\xc5\xcc\xd7S\x7f\x15S\xfc\xbcRu\xbc\xa4\x12\xf9\xbcL&\xcb<\xddd(ys\xfd\x95\x91\xb3{.\xdeW\xf5\xe8\x17+\xc9Y{Z\xd9\xce\xe20\x92|\xd9\xb5\xad\xec=3(\xacvJn\x9a\xaa\x1f\xb5(k9 \xf6C\xd3wz4\x86\xa7W\xb5\x97\x85 \x1aT\xc1dCw\xf3.\xcd)]'\xaaey\xa6\x19\xe0\xcf\xba\xd6*\xb5\xf1\x0c\x9e\xa9g\xbaJ\xea\xab\x89*\x11\xcc\x90(\xfb\xa0\x8d\xfd\xb0>\xb7[l\xc4Ul\x98\x86-N\x9b#\xd2\x1aK\xb9\xf5a\x06o\xcc@\xfc\x90\xda\x8a\x80\xbf\x97\xfc\xfe\x934w\x19C\xa59\xfc\xfb\x8c\xb4\x95\xce\xdf~\x1b\xa9A\xe4\x86\xad\x19\xbcV\xbf\x82\\\xac\x89\x9a\x10\xf4\xa0\xf8\xdet\xdc\xfe\x1f\x1d\x06\x93J\x17>\x83\xef\xad1\xce@2vq\x1bz\xb9\xc9\x89\xcce\xa8\xca|'w\x19j\x9c\x1c8)\xad\x87y\xb5\x99d\xcf\xf8\xa6\xec?\xaaQ\x85J\x8a\x0b\x8fY\xbc\xba>5\xcc6\xa1\xf3B\xfa\x12Z\xd4\x9e1\xa5\x17\xd2B\xee\x85\xb4\xa8\xbd\x90\xee5S\x19-4\xeeF_b\x8b\xfe\x03\xdd\x8d\xac\xfc~\x86\xc4\xfb\xe7\xf6\x0e-\xe9\x10\x87\x16\xe6\xa6\xd4\xb6\x13\xa9\xa1}K_\xaa\x0d\xd6\xd039\xa7\x14,\\\x9d\x91-5X\x80`QQ\x95=\xd5\xf0\x0d\x0b\x845\xb9\x9ed\x08\xa5s= Y\xd7V\xe9\xd9\xb1\xa9{+\xfe1\x0b\x17\x94-\x03\xcd\xa3e\x94\xf8\xf1\x0b\x9bW0\x12I8\xa2X\xbd\xb1\x84C\xc8\xcc\xb3z\x81K\xc4\xd5\x1d\xc1&\x8fJ\xadU{\xce\x12(Tu`\xab\xae|_j\x8d\xf9\xa7\x9d\xc4\x0b|:\x9f\x1b\x03\xbf\xcf\xe4/\xbe4\x04\x9a\xf3\x1a'?n\xd6\xd9\xeb\x14\x811;\xc4\x07\xb7.\xd7Z\x01\xd6O\xe8\xfc\x8d\x06b\x8d\x16\xb0\xae*(\x05\xd1\x08 \xa7\xba\x1e\n^P\xc5\xb9\xa9?{f\xaf\xa6\xd3\x05>v\x0c\xd0\x1a\xc3r\xcd\xe3\xc8\xe3\xc6ig\xc3\xab\x92\xfb\xba\xabcc\xafX\xd2\x83\xad\xa8\x99],\x8a\xedn\xe9\xdd\xd5\xc8\"{\xfen=\xab\x93\\D\x8a\x02\x04\xef\xc7 :Qg\xdc\xff\xea+\xb8\xf0\x82t\x93\x94\xae\xaeos\xbdY\xbc&\xb93\xd0d\xcc\x1a\x1e\xe3!N\xd4\x941\x94\x98\xef\x97JMT\"\x89r\xec[\xe1^\x982\x89 \x81\xae\x13\x06\x17\xae\xc2\x01\x05z\xacEu\xd7\xac\xb8\xd2V\xc8\xc9\xb4\x08{\x85B\x87!N\xa1\xbb\xcfL\"D\xb0\xb3\x08q=\x03\x19>i\xa6\xb2\x01\xc5\xa6?\xa32\xa3_\xc4\x04q\xed.&hK:\x9b\xb8\x8fK\x1d\x1b<\xb3\x8e\xf4\xdd\xf7c\x94P\xded\x19\xc9\x1f\xf9\x05\x91%W\xd9\x99P-\x86\x13\xaa\xfa\xbb\xe3\xcf\xa0\xc4\xf1g\xaa\xad\x10\x91S_\x94\x16\xff\xb1\xd4H\xcd\xc0\x95\x034\x11\x89Dc`\x14\xf5\xe9\xc6I\xac\xe2PR\x844\xc6\xa1D\x08\xa6\x8fC\xf1\x11F\x1b?\x82u\xf1\xed\x84\xf7\x82w\xecq\x9d\xc6\xc4\x18\xe1AO\xd8\xb2\x99G\xe4\xc3\x9f\x04y3'\x838\x0d\xe8<\x9d\x9e\xb6\x9d\x9d\xa5@\x83\xcd_\xdazUU\x02\x06\x9d\x02J$`\xd0\x98\xa2\xb2\x06\xdf\xca\x9ao\xfbO\xfbXy\x80J\xd8\x1b\x0d\x0e\xb2,\x0d\x91|\x84Wy\x04^7v\x99\x9e\xaa\xcd\x80\x078\xe4\xe5R\xfa\x87[D\xcf\x84\xfb\xb2\xd3-\xea\x96\xd0\x8f\xd8\xe9\";=\xa2\x8f\x7fz\xf8\x98\xc1\xa63J\xf5q\xb2\xad*\xca\xd7\xe6\xa6>\xe6$\xed\xd27b\xa5\xdb\xe1#\xaf\xd2\xb3\xee\xbe\xe6\x83M\x87j*\xa4\x0c\x9d,\x81\xcc\xfb\xf1\x95~\\Z\x9bS\xd7F\xb3\xb4i\x1d\xbb\xe2P^\xe3R\xfd\xc2\xf2\xa5*c\xbc\xaeC\xa2f*\xeb\x93\x1a\xacU\xe3T\x0d\x96[\xc0\xc8\xeb2\xaa\xcb~\xf6\x06\xe3<\x89H\x8cN\xe5\x1f\xb2\x114Q\xb3\xa2\xa1\xeafZECK\x8f$e~qL~\xc3\xec\xb7\xa6\xcc\xa0\xdbF\x8d\xa8f\x9d\x9f1\x1c(\x881=\xbb\xcb\x93}\x85\xb3!\xee\xe4\x93\xa9$ \xc8\xb0\xad\x12\xd5Q\x84\x0cUT\xa5\xdeT\xb8\x8a\x9e\xa3\xcb\xa9BAy\xfe\xb3\x1f\xcb\xf4<\x9d\x04\x96\xef\xdb\x05\x10\xdf\xcb\xcf\x04\xf6\x99\xebu&\xbcJ\xcf\x0c\xc7\xc2\xed\xe9\x9f\xe2X`\x03\xb59\x19(B\xc8\xcf\x04\xe2Q|\xe8?C\xa6\x14\x1eR\xa63\xfd\xf1\xb8\xfa\xe1\xa2\x92\x91+\x1a\x87\x9d\x14\xd6\x94\x88o]#1ap\x9d\xbd\x1a}&H\xdbG\xcc?Q\x02\x13\n\xf0\xe0\xee\xfe\x9f#g \n\x9f\x98\x949\x1a\xc3\xa6O\xca\x15\x82z\x1fp\x91\xe6\xe0\xd2\xaf\xd1 \xaf$p^Bn\x8c\x13\xceR\xff\x16\xa31N\xf4\xfe\xd7\x10\xc07P|\x0d\xc1\x8d\x1b#\x88O\x82\xb7\xcd7O\x02\xf5\xc1B\xb7v\xc4O\xb2\xbe\xb2\x00ei\xa3\xc2 \xf0\xe3\x98k\x0d\xc8\x18N\xe8\xbboE\x11\x87\x18O\xe1\xc8Cs\x85\x1fG\xff\xae\xa5\x07c\x19\x07zE\x1e\xa1\xe3\xed{?\xbfG\xadBz\x865y^\x936\xef\xab\xfa\x1a\xf3$\xaai\x00\xd7X\xe2\xbe\xa3\xdfc\x7f.\xa2\x98PN\x03S-\n\xef%\xaf|\x0b)Z\x0dY E\xac\xce\x9c\xc07\xacVa\n7 \x82o\x0f\x99;n\xc2\xe2\xbbqs\xf39}\xcc\xd6JV]u\xcc4\x19=E\x17\xdd}\x1fC[u\x95\xb5\xcf\x98\x9c\xbf\x8a\x96\xab\x98\xce9\xaf[I$\xc1P\x1d ]\xc6\xff\xf5\xbb\xf7&\x0b\xfd\x92\\\xaf\xfe}\x02e\xdfV\x1f\x90\xc1vV%h\xe87\x14\xa9\x88\x0f\x15\xc3\xb4:.,0\x86\xc4\xc4\xb9\"\x9f\xeaj!&A\x1a\xaa\xca2\x8eQ/v%\xed\x89\xa1Nx\xc5yY57q\xd5^\x1dt]\x9a\x14Z\xd5M\xe71\x07r\xcc\x96i'\xcb\xf5\xc9\x01YYN\xda\xb4\xe4\xc8\xd1\xf5\xfa\x97\x15!qU\x04KG\xd0\xd5_i\xcc\x19\x96=\x80uD\xbf\xa0\xae{\xfa\x9er\x00\xc6M\xd4W\xc3\x99Tpr\xa7\xd7\xe6N\"\x1e9\xcf\xd2\xbc,Z\xc7S\x9f\xbd\x85\x06\xe7\x99\x903\xf8>N\xe7\xee y+[\x83\xf2\"\xc3\x91ST\xa7\xfc@\xc4\x8ad\xdfL\x83\x92\x94\x93\xa2\xcc\x89\xbf\xeeH\xeb\x1d\xf6'ZT\xf5v\xf7\x0e\x0f\xe1,J\xc2\xf4\xccK\xfcm\xb4\xf4\xcb4\xf7\xd6\xc5\xb1\xbf%\xb4\x0f#\xddC7\xefsV$.\x88\x82k\xa3\x87\x1e\xff\xda\x9bW\xcf8\xc61\x0e\xfe\xcd\xabgn\xae\x91\xe9C\x9e\x0c\xa4\x8b\xa6\xbeL\xef\x1dyX/W\xb8\xb6\xc1!8I\x9aP|\x8e\xbcUN(G\x9c\xd2\xdf\x05)\xbf+\xcb<\x9aoJ\xe2V\x9b\xcfa\xb2N\xa3\x1cq\xcd\x00\xd13\xb3\xfb\x1ec$\x9cq\x15\xd3;\x1a\xd7\xdd\x9d\xa7\xe1\x05\xe5\xd9H\x12>ZEq\xe8F\xc8\xa6\x05t\xeb\xba=\xc0\x9c\xac\xd3-\xa9\x01\x1b\x93\x95\x93m\xfa\xae1Y\xa9\xea\xe8}/E\xc9\xeb L\xc9\x95\xbfR1+R\x89Y\xbeJ\xcc\xda\xa8\xc4\xacB%f\xc5\xfcAOb\nx\xca\xc7\xbe\x1cUKZYU\x12B\x98>+\xe0?\x81`\x95\x8f\xc1\x97\x0bV\xd1u\x14\xacr.Xml\x05\xabt\xa8`\x95{\"x\\\x84\xe1\xfc\xc2B\x04\xad\x84\x0e\xde\xd5\\T\x88\xac\xc3\x85\xbc\xa0\xf5QT\xa8\xba'\x02\x10M\x90\xd5k\xcc\xed\xe2-\xe5\x9f{\xad\xbcg]\x14\xf1T\x8f\x18\xfb\xf0\xfa\"#\xac\xd7V\xdd\xace#\xca~\xe4i\\|\x17\x04$+\x7f@\xf5\xaf\x89\x9f30})\xe6v2\xb0\x8f\x11\xba\xedY\xa5@\xf4\x11To\xa4\xdd \x8c\xceO\xa6\xac\x08\xbad\xea4EZ9\xd1\xd3\xe5\xb4d\xde{j\x00\xe1>\xbb\x91BH\xaa\x17\xbd\x1f3\xabs\xafp4\xdd\xad\x96\x82X!\x15\xc4|;A\xacX\xa5\x9b8\xacX\"ka\xc7\xb4/\x1a>M\xdd\xc0@\xe4NH\xff\xb6(\xbf\xcf\xde\xaab\xdb8x\xfdw\x1bN\x84\xd6q\xb0\xeaO9\x14n\xc6\x0e(\xbb\xd7\x86\x97\x07\xbc\xf1\x17\x15\x0f;-\xfa\xe5J4D\x7f\xb6\x9f2D\xe1\xcf\xd9\x1f}\xdch/\xffG\x92\x06\xf5$\xc1F^d\x1e\x19\xd5z\xe9)C\xd2\xc3\x03=yH,\xbdN65\xac!\xa5,\xf3\xd3\xb0\xcc\x13\x8bl\x841\xefm\xd2\xc6-5p\xc8\xdc\\\x06\xa6\x0d]U=\xd6G\xd5l\xf9\x11Zi\xed\x8e1\x89\xdf\xa34$#7\xd5x>\xac\xb1\x98\x8f\x13\xd4d\xd3T\xd1\xc6w\x9d8\xda\x12\xb1\x86\xa6\xca6~\x1d\xbbj\n\"\x91m\xf5\xaf\xbe\x92\xdd\x16Q\xa4\xb27f\xb5\x84\xf7\xb2\xf5D\xdd\xf8)\x1cB\xd1\xac\xf6\xc7\xa6rIJv\x82>b\xe7)\x95p\xc5\xb0\xe9\xacJ\xcd6\xe229\xee\x0c\xd1+T\x1b\xcc\x98\xd9\xe0J\x9a\xb3q\x01\x10\x971O\x16w\x05x\xd5\x88_n\xcf\xb5)q]\xec\xcfI]3\xc4\xe4\x08\xd5i\x0e8b\xa3\xcc\xad\xcb\xa6\xa5\xad\x16\xc3\x89\xab&(L\xb0\x97\\1\xa2\xe065\xc4\xa6\xde\x7f\xc5\x0c\xe6\x1a\xc0\xc6:\x89t\x17\xfc\xe5 \x8eQ\xbeJ#]\xc6\xabA\xc8Q\xe3b\x94\xe8\x92\"Df\xa5\x9a~E\xb5\xd5^\xea`i\xeb|\x94\x1a^\xae\x99y@\x93\x03\xaa\x93y@CP\x18\xf7\xd8a\x11\xcc\xbcd\x8fk\xd0\x1c'\x8a0}U\xfe\xa5\xe1\xdb\xd4B\xc9(\\k\x86b\x0e{o0=i\xbb\xe8\xa8\xc1\xf2\x1d\xba\xb4+\x8dS\xb8\xe1\x88K\xed\x8eS\xa1\xf0\x84\xde\xe39wU\xcd;\xf4 \xd7&\x03\xbc\xa2~\xd8\x04\xbb9\x8f\x1b@]j\xfe\xa1;\x18G\xc9;\xcd<=\xc3\xc7un\x07\xdd\x8c\xb5<\x9bR\xa5gS\xa9b\xa5\x81\xb3\xd3I\xdf\xc3\xa9T{8\x89\x0bYg\xa5\xa7\x93\xb8\xb0|\xc9\xc9\xd4\x00\x15\x027\x18F\xed\x0c\xcepx\x08)<\xac\xf1\xfc\x94'#A'_G\xce\xb8\x80\x99y\xb9\xd0\xad$\x08a\xc5P\x96\xb8\x8e:[\xb1\x1c':6\x15\xd0\x1d\xf8\xb1\xd0\xa6mQ\xafkh`\x91h#\x13\xa1\x8du\x1aZ\x8b\x90iH\x8cC\xaaO%M8/\x0c:I\x803\x07]u\xce\x8c\xa2\xc6\xe1\xa1.m30\xbe\xa4\xabK\x9aa\xd9\x0f\xa5\xaa\xc9\xdc\x15\x0e\xae\xe5\x87\xc0\xfeT\x85\xfeI\xad\x84U\x14\x85n\x15\x83\xde!\xa1K\x8d\xe7;$u\xe9'C\xeaGX\xd6\x99\x83\x98\x85\x98U\x8a\x1a\xb9'-\xfb\xcf\xaf\x85\xa4\x16\xa7\xea\xa0\xdf\x9b\xd6\x03\xf8\x1c2\xb9\x84*w\xacP\xe5\x8e\x15\xaa\xdc\xb1B\x95;V\xa8r\xc7\n\xa5\xe6\x8b\x98?\x91Z\x10\xdcP\xd8\n\xc2\xcaV\x80\xbf\xa6\xb7z\x05\xa4\x17R\x8b\x03\xaa\x07Te\xa5\xc3\x8fo\\X\xd9\x1a\x17\x88\xc4\xb6 C<\xb3hkjo);O)\x0e\x8d}\x914\xc1'+\xf2N%$n\x90\xba<2)\xb9\x12\xe6\xeb\xd3oF\xfd\ns%\x92\xd1m\xf9\x99\x8b*\xec\xe3\xd2/uJ\xeb\xbcO\xb2\xbbK/\xae\xf7h\xd82\n\xb4\x9a\x11\xc8\xcf\x9c\\\xd1Z\xef6\xfa{Q6\x84\xf4\xe8\xa5\xb8\xa4\xc3q\xfa\xac\x1d\xfd\x94\x02\xbf\xe1\n\xdd\x94\xaeF\xb3\xca\x08-Z\xe0RK\x1d*3\x9aP\xfeB\x0d\xc3\xac%\xe6\x02d\xccbb\xe1\x9a\x13\"\xa0Y\xaf\xb8B8\x9d\x12t\x8b\x10v\x9a\xdau\x0dk\xd0\xd4.\xab\xfeYhj/\xf8\x0cVx\xa4\x06\x9dW\xa0\xf6\xf6\xb1S8\x84\x95\x17%\x0b\x92c\xaeS\x8d\"\xe1\x0c\x0ea\xc9\xc5!5\xd4\x11\x1c\x82\xcf8u&\xe2h\x93\xfa\x9d\xd7\xd0\xe4\xdc_g\xb1>\x07\xe0q\x0d\xced%\x0d\xec#8\x84\xadU'\xdeqH\xe1P\xc5\xe5Q%\xfcw\x0c~\x9d\x86$>b\xbd\xd6\x81\xbf`\xe06%\x80^2\xd0*.\xd3TL\xe75\x83\xb7Tp?\x17\x9b\x16i\x97'\xa1Q\xf4\xc8\xbaPP\xf1\x05\xb8g\xee\xc8$/>\x15+\x84\xc5\xb2x\xc7\x9c1<\x7f;\xe6\x8a\xe7\xe7~6r\x7f\x7f\xdfe3\xba\xd7\xafp\x08O\xb9\xc4\x87\x88\xe9\xf4>\xa0\x16\xf1\xeaP?4M=ma\x98#\x94\xe0\x99W`m\xa0hq1r\xbb0T\xccf@KR\x1e\xe3M\xb6AF\xee\xaf\"\xec\xd70\x9b&A2J\x82x\x13\x92W\xc4\x0f_$\xf1E\x8b\xcb\xec^\xf4\xd0\xa3\xc7\xcd\xaf\xf0\x10\xcaJy\x95\xf0;\xa7U\x9fj\xc5V\xce\x9f\xb9\x8d\xcc\x89\xcd\x151\xf5]L\xfb[\xfaI\x85\xe6\x8d9T\xd1^\x9c\xba\xbe\xe8\x01k\xda\xf7V~Q\xad\x1d\x9d\xf2\x90g\xfb\xacnQ\xb9\x14\x07\x95T\x0b\xd2\x9b\xebd\x0c\xcfu\xf3(\x99C\xcdi\xc4\x80\x7f\xc9\xa3\x92hg\xfc\xbd\xde\xfcq\x8e\xbe\xcc\x94v\x9d[\x04\x8a\x89K\xb0\xc0\x94\x1d\xa2l/+&\xf5\xd7\xbf\xe6d\xe1\x08\x97.\xda\xae\x8a\xebQ\xe0;\xddu?Y8\xf05/a\xdcF\x0bTeo\x1a\x16\xff\xd6\xbc\x9a\xb1p\x0d3\xbe&\x16\xaey\xe5\xda\xb8\xb8\xe6\x95\xf2\x1893\xa4\xe0\xd0[{<5%V\xba\xa4YK\\\xc8t\xc9\xd9IqiMKw*\xcd]\xaeQ\xf2)\xe3\xfe\x9aW\xdb\xa4\xc2h\x9by\xf68[(\x8f\x19\x17\x97,v\xbc~V+-(J_\xd6^b\x1c\xeb\xf0q\n1A3\x06A\x05\xe4\x1b\x92\xa2\xf7\xf9\x18\xde\xed\x98\xdc`\x07M>8p\x03\xdc\x0ds#\xd7l,'\xf4K\x9f\xb9\x85+\x03\xff\xafN\xdd>D\xd7\x1f]\xa1\x9a\x7f\xb0n\x7f\xe7}-[\x8bn\xab\xa7\xa7z\x93\xa1\xaa\xf1\x17\xba\x86E\xd5\x1f_\x94)l\xd8&T\xa7\xc4\x18\xce\xcc\xbb\xcdj\xacL\x9dWQ\xf3\xe6\xd0\x1b6Y\xd3\xcet\x84@2\xf1Q\"\x11\xd6\xa8\x19\xcc5[o\xe84\xbe\xb60q\x1b8\x1e\xf5\x94\xb4\xec\xd7|-\x04#E9\x9b\xee-\xef\x1da\xc7(\x88\xc4\xd5\xc7\xe4\xb7^\xd2\xb9\xe6\xd51\xb1\xcb\xf4>\x8a\xf5\x1e\xc3\\\x9b\x83q\xed\xc7\xb5\x83\x81\xc3\x9d=\n\xd0E\xa1 \xe1\xa8^ar\xa43\x1a\x83\x03l\xe9\xbc\xda\x06Uq\x9b?i:\xf1\x9d\x16\xc5+K\x89u\x9a}MV\xfc\xa6Z^S{\xb1c\xa2\xd0\xd5^D>T\x88\x02L\xb5\xfd\"\x0fIN\xc2\x91\x9bhV\x94\x1fB3\xf8I\xb1p\xd5\xd4\x1di\xa6\xee\x91n\xea\xb8h;\x83#\xeb\x99\xd3\xf7e4\xae\x04\xfc+\xb5w\x0e0r\x1e\xc3C8\xf6\xcaT\xc6\x85v\xa2W\xba\x97\xe1\xc0}i\"T\xc8\xb5i\x14<\xf4JpP\x06 :B\xad\xfe\x11,\x17\x064\xa4p\xa4\xad\x87Yo\xdf\x9fR\xe0\xaa\x92j\x95{\x1f\xbc\x94\x05i\xa5\xb7 \xd5fCF \x85u\xe8\xf7\xf7]s\x89\xcc\x9a\xd7TL6T\xffm\x9b\xd0\xea\xbf\xf8\xcdke\x13Z)sG\xacTQ%+UT\xc9J\x15U\xb2RE\x95\xacTQ%+\xa5Mh%lB+\x8c\xc8\xbf-\xb5\x04\xb1g\xbd/W\xe6\xa0\xf6\xedP\xf4]\x91no\xf5\xf1\x0dE[[C\xd1\x97(\x94\x8e\xd1\xca\x14\x85\xa2\xb7\x88d~^\x90\x90oq\x85X\x85\x91\"\x1bt\xdd\x7f\xd9\x04\x1fd\xf2\x12!)\x9c\x1bSk3\x99\xff|\xa9\x16b)\x10S\x91@\x94\x14\xa5\x9f\x04$]\x00\x0b<4\xebC\x12\x1e,\xf9$\x8aQ=\xa52\x8f\x89+\xf1R\x16\xc6g\x91\xc3\xa0y\xe56\xe6\xb5\xe6\xd5] \xca\x0cobydn\xf3R\x9cD\xd5\xe31~\xca\x0f\xbf+^\x93\xf3\xd2\xd5L,\xd7\x1bZ\xf7\xbc\xd3\xe3\x92\xf2\x07\xac\xaa\xbbN\x03!C\xafO\x1b\xa4r\x95\xd9\x02PN\x90\xec\x15\xd7\xea\x88W\x07a\xec\x942@\xb9)\x95\xbd$b\x7f^\xa2\xabWc\xd5\xb4\xb4d\xd6\xc1g\x16YB\xad\xccu\xac^\xc9&\x97$T\x12\x17\xabR\xc2\xf9|5\x98_\x9b;Xz\x8d\x87\xf0\xfb{\xd0\xba\x0fo\x06d>-\xdav\xa3\xd6nT\xbf\x85\xf5A\x06X\xd5\xe8\xc1\\\xfb\xf2\xa1\xa6\x8b\x92\xcf\xc7~I\xb0\xbe\xe8\xebhMt\"\xf4\xba\x9a\x04\x8d4$\xc9\xf5\xd5\xbc(\xc5\xa7\xcb\x92\x8aL\x0d7\xffo\xc3\x87\xe9_\xad \xf6\x9b\x91W\x92\xa2t\x93\x11\x05\xf6O\x1c>#\x93\xc7Q\x91\xa5\x05f\xe6w\xde\xd2\xe3\xe3\xa6_\x96~\xb0\xa2\x07\xb5xI\x05.\xbe%4,\xa1\xdd\xb7\xa4\xe0\xbd~5\xb4G\xec[\xf4h\x82\xd7\xb9\x9f\x14\x0b\x92\xcb\xba\xd6|\xa3\xd75\xeb\xcfI\xdf\xd0(\x8f\xe9*8\xf4\x98u Jx\x9c\xb9\xe9$\xa4[\xf9\xa2\xca\xb1Q\x92\xf3\xf2\xe6\xaa\\\xc7\x16\xban\x0c\xce\xe9\x1e\xf0\xc2\xcaV%;(\xa5\xc9\x0ed\x17K\x80pa\x84\xed\xca?\xb2\xebT\x9f\x94`n\xf1\x8938\x84\x93\x0b\xca\xd0\x15\x9byQ\xe6n\xea\xc5~Q>MBr\xfeb\xe1:7\x9d\x11\xdc\x80\xe9h\x0c\xa7o\xbd_\xd3(q\x9d\x99n\x9b\x8a\x0b\xed\xfc*D\xd5l\x08=\x13\xd4\xc9\xfdpdZv\xe0K\x7f^\x99{\xc8y\x99\xfbA\xf9\x84\xe7oz\x92\xa7k\xde\x8fF7\x98W\xc4\xc8=2\x18\x84\xe8\x85!<\xb43\xcc\xeaG\xe7\xf3\xdc\xc0 i\x9fR\x1aTy]\xd6\x99+\xe8\xc7%\xb7yB\x8b\x17\xf9\x8b\x8c$\x1c3/eIq|\xa3\xc6\x16\xaa\xfa\xec\x06\x07\\\xd8\xa9\x06\x8a\xb88We3hw>\x863\xfd\xa4\x83q\xe2\x9bYf`\x11 #\xff\xb5\x9aM\x91\xcbc\x06g\x83\xc7\xa2|\x81\xb3\xdb\x14\xf1\x94\xe3`)u\xb8\xce\xa8\xfa2\xe7< $%\x96\xd6\x86\xf9\xa6\x84\x8bt\x93\xc3\xd7r/\xda\x99f\x96k\xda\xe7\x06'\x84\xa2\x81\xdbN~\xc8x\xd7\x9b\x14\xe8_7\xb3\xd8\x8f\x92\x9b\x8d\xd9\xff\xc8\x036\xf0k\xc2\x88\xa7\x181\xcc\xe0\xe6\xff\x8d\xd6\xfe\x92\xfc\xebf\x0b\x87\x12\x8f\xbb\xfd\x14\xaeSl\x97\x8e\xd6\xb0\xd1\xa4\xf9\x0e8\xa8Fv\xc0\xd1+\xdb\xd7K\xed!\x80\xf9\x9ed\x9a\xcb\xe6\xb5\xf6\xcf\x7f\x89\xc2r5\x03g\xba\xbf\xff\xff\x93c\" \xe5W7\x94\x073\x1d\xbb\xa8\xd0\xc8\xf0\xb9\xf37a\x94v\xe6\xce\xea\xb8P\x9f\x8d\xf4\x8bzC\x117G\xaa\x1d\xb1tA\xd1h\x1c\xd7O=\x9d\x11]\xado\x96\xacL\xb5\x89\xe8\xc48\xcc\x7f\x88n\x1f\x04O\x17P~\xfc\xbdQ\x9e\xcbtE\xe22o\x0d\xee\xe4\xf5-\xec\xc3C(lw\x80z\xf9\xad\xcd\x7f\x91:\x9c\xf1M\x92\x93 ]&\xd1\xbfIX\x99\x89p\x8e\xbf\x16\x81A\x94\x89\x10A\xee~\x81\xd4\xdd\xd3E\x8a~\xca\xd9/4\xa4\xf8\xd3M\xe4\x06K\x91@\x99\x8a)\xad\x8d\xf7Z\xb7\xa5\xe5\xa5q\xa4\xe1\xc5Vg,\xc0\xb0Tz\x9e*]\xab\xacm\x916UH\x98Yu'\xcb`\x95\xef\xd0}p\xf7\x8e\xc4\x88\xa7\xd7}\xd6\xbe\x9eY\x1c\x95\xeeM\xf7\x9b\x7f\xdd|x\xf2\x7f\xbf}{\xe3\xdb\xd1\xcd\xe5\xc8[DqIr\x0b\x0fK\xfe!\xc7\xa9\xb2\x0dEkY\"\xdc\x8e\xfa\xba\xdd\xdf\xc8\xb6\xbf7\xbf\xf9\xd7\xcd\x1b\xac\x9b\x9c\x11 \xda\x0f\xfb\xf6\x1f\xc6\xaf\xfe\xeb\xa6\xddw7\xb6\xdf\xb5\x9e@\xec\xc0\x9er\\\x80\xc8E0\xef\xf0^$~\xf8\xbdn\xd6\xf8!\xcf\x9d\xd9\xed\x850JuM|\xf0-Li\x13\x0d]Gm\xcb\x9b\xbe\x85\x87\xed?g\xf0\xbb\xe4\xdcg\xb1[\x82\x83\xed?G\xbd\xad'a\x89\xfb\xa01\x1c\xca\xf4\xa6\x01\x1c\xc2IGeSg\xb2\xa5\x7fu\xe2\xac\xe9x\x17c4\x07\xbb\x0b8\x042\x86\xd4]\xd8\xb8\x13\xf3uR)\xeau!]\xec\x14wK\xd6^\xe4\x96\x94uq\x1e\xc5i\x11%\xcb\xd7\xfe\xd2\x81\x19l\xf8\xdd\x17\x19I\xea\xbb>\xbf{L\xe2E\x1b\xdeyM\xe4\xb9\xbe\xe5\x01\x81\xed\xa3\xf7\xfdH\xe2\xba2\x86TeR\x8eLI\xeaX\xfdq\xa4\xe8\xbd\xe7\xad\x81R\x1e\xdf\xa7\x88\x15O&\xf2\x9e\xd2\xad\x95\xbb\xc9\x18b\x85\x92\x0fK\x89\xc3\x0d\x88\xfa\xef\xa3b\xb69\x83us7n\x8c\xa1\xd0\xd9Y(J\xa4'%L@\xe7\xbe\x1dVP\x07\nM\xa1|\xb8l\xb9\xf0\xef\x0c\xe7 ov\xbb\x1aV\x8f\x109\x1d\xac\x9c\x057 ds\x0f7 \xab~ET\xe8\xc4\x80\x05\xec\xcd\x18\xb0\xeb\xc6\xf0kh\xd0\xa6\x0eN\xb4\xc7\xc3\x81\x02o\x91\xe6G~\xb0\xb2\xdb\x1e\xd9 yK\xf7_\xf7\xe4\xa42jfw\xaa\xf0/\xed\xedu\xfc%F\\\xfb\xfb\xaf\xa6o\xe9%\x12\xb6\xde\xfc\xfb^\xdd\xc0\xdf!'\x19\xf1\xd1vB\x99\xbaoVe\x99\x15\xb3\x9b7\x97Q\xb9\xda\xcc\xbd ]\xdf\xfc5M\x8a`\x15G\xc9;\x92\x977[\xf0\xdf6\xbe\xd4\xfc\xe8\xa34\xbb\xc8\xa3\xe5\xaa\x047\x18\xc1\xc1\xfe\xf4\xf6\xe4`\x7fzg\x0c?\xa6 \x1cW\x1f\xf3\x9a\xef<\x8b\x02\x92\x14$\x84M\x12\x92\x1c\xca\x15\x81\xe7O_\x8b\xdbM\xd0\x9b\xd5od\x06X\xd4c3\xb3\x842\x7frw\xdeq\xe3\x08Ab\xaf\x12$\xc8\x08\xcaU\x9e\x9e\xa1\x9d\xe1\xf5EF\x8e\xf2<\xcd]\x87\x9cgL\xdd\xe6\x03\x7fI\x92\"y\x8a(]\x8e*^\xa3\x0fr\xd0\x05\x81\x1b]0\xe1\xa9@\xc4\xc1\xf4w(\xfb\x1f\xca\x19\xf7A\xa9~\xc3\xce\x98\x8fX\x16\xf4\xfe\xc4@S\x9d\x97Vg\xde!\xc5\x1b\xde\x97\xca\x1e\xb1O\xb1\xa9\xfd*z\xc7|\x8d\xa5\x00\xaa\x97\xd1\x0d\xe3[\x98~=\xa2''\x0b]qS\xb8q\x88F\xf8\x12\xbe\xfd\xf6\x10\xa6c:\xc4\xc3\xee\x18E\x8b\xf4P\xe2o\xb4\x1a\x1f\x86\xed5cxw:2\xe1\x82\xc2\xbb)w\xc9\xc8+\xd3g\xe9\x99\xa8D;\xac\x0f\x1f\xdd\x99\xed3,\xfe\xba\xa82\x1b\xd0_\xf7F\x7f\x8e\x82\xaf\xdb/\x05f\xd4\x05f\x84\x17\xfd\x80h8\x81\xe0\xb9\xaa\x8a\xf6\xa8\xe2\xa8\x8e\xceKM1\xef\xb4[\xb2;U\x97\xecN?\xbeZ\x88 t\x9d\xb1\x98-\x8b\xe6z\xddReh>t\xb7Jy\xa7\xd3Sr^\x92\xa4\xe8\x1d\xf6\xef\x99\xe7\xd4\x0c\x9c1\xf0\xa3)1\xd7\xda\x8e\xae\x1bB=e\x9ecG\xeb\xac\xbc0\x94\x89\xef\xc5\xd4\x8a*\xf1\x98S\xb5~'\x12\xfa\xc9\x88\xeb'\xafU\xc5x\xd5\xc8m\xf0\x10\xb1B\x85\x88Q\xc1\xbf(9\xea\x98\xf9S}\x02\xfb\xfc\x0b\x8f\xa3\x02)\x9d\x14\xa1\xf9\xb9\x8f4\x0f{\x8d\xda-\xf4\xf6\xbb\x0c\xaew\xf4\xa9-\xd4\xa7\xad\x9c\"\x0e\x9d\x96\xe9r\xa9\x11>B\xdesY\xfa\xe7\x9e\xeb\x86\xba\xbfQ\x92mJi#\xcc\x04\xee\x04+\x12\xbc\x9b\xa7\xe7\x12MY\xa3\x0b\xfd\x87\xf8\x1e\x1e!\xa8t\x90(tj^\xc9\xac\x9c\x8c\\Q\xc1\xda\xe3\x1f6\x1e\xb7\xa318\xc7$ \x01'\x95mL\xa7\xe7#\xf4Y\x95\xe8\xff\xa49\xa1\xe5&\x93Pj2Q\x94\x93T\xa4\x88\xbeu\xd0\xcb\x0b\xf0%\x17\xb4\xdc\xb0ag\xd4\xb0\xcd\x05-v\xe0.f\x82\xa1\xeeG_}\xd5\xfa[-F$&\x1bD\xc3\x02\x90TC\x18\xb9\x89'$\xc618\xcc9\x03\xad\xcb\x88\x13\xcc\xbaLD^\xc2\x84\xd5PB\x91\xbfOG\x9a\x96\x14\xebCK\\\xdbai\xb2\xad\x94\xc8y\xad\xc2W\x03\xa5\xd6\x9af\x1fS\x1aX\xc9\xb4\x9b\x1a\x94\x8a\xc4\xda\x05IxT6\xce\x15.\x04N\x1e\xe5\xe4\xdct\x0c\xfe\x186*S\x10\xe6\xf3\xe6\xd5*X\xcdA\x8b\x8c\x05\xc2\x00c\x9ci\xc6KX\xea\xf6\x13\x10u M\xd3\xc8\xca\xb5WHg\\\x18\xb5r\"\x19C\xae\x98\xdbF\xf4\"\x96\xf0`k!\x0e\xb3\xaf\xbe\x02\x07\xb5Y\xb8\xdf\xd2z\xa1t\xfa$\xc1\x9a\xe9\xa2\x96\x01\xcf\xc3\xa88>\xf3\x97K\x92\x1f\xa0N\xd6\x87\xaa\x8d\xf3I\x9d\xf9\xf6\x8f?\xd8]L\xcf\xcbi\x11\x8f\xed\xad\xefW w\xabT\x8aj\x88\xc67f\xd8\x0b\x9e=\xea\xab\xaf\xc0m\xf4A\xd1\x83\xddZ\xaa+`\xef \x07\xb0\x1e}tY8h\xb2Y\xcfI\xfe\x9a\xeb\xc7F\xae\xaf\x88\x93\xeb{q\xc90\xdd\x1d}\x9c|\xedU\x12\x86_\xa28~E\x02\x12m\x91;\x91\xd5\xdc\xb7\xce\xc5Ps\xea\x9fxw\x99R\x88G\x97\xda\x83Hd\xa2\x02 \x1b\xee\x84\x1cf*3\x9a\xcd\xeeJ\xab\xed\xe4F\xad|\xd4#q\xa8\x07,%\xf5h\xc4Q=\xd9\xac\x91w\xf5\x81\xe5b\x88:\xf7u\xad \x17\xcd\xc6{53lJoP\x18\x86\xd2\xd84\x1b\x8c\x03\xa1\xff\x9d\x893#'\xbfm\xa2\x9c\x84\x8cT\xe1\xae\xf2\xd9\x19L\xf72\xba\x89x\x8b(/J\xb7\xb3\x01\xb1\x90e\xc1?+jZ\xdam\xc7bTe\xd1\xee\xee\xb4\xfe\x86lo<\x99\x18\xf4\x01\xbc\x05\xec\xce+\xc3q\x9fX\xee\x8f|@V\x8e\xb4\x865\x98\xcb#.?sm\xaf\x9e\xd7 Z{\xfe\xa6%\xaa\x0b\x95\xb7\x1e#\xad\xe9M`Mo\xc2\xea\xb3\xe6\n\x0f\x85\x91\xde`\x95\x07cj\x11\xafX\xa5gGB\xdde(\xef\xc0\xa0\x1f\xa5\xebu\x9a\xd8\xbcs\x81^\xd9\xce\x8fE\x9a\xb0\xcc\xe7O\xd2|m*)\x9b\xbb\xcc\x98\xfc=\x0b\xaaQ\xc2\x9e\n\xc7\n\xc6n\xa8\x01\xcf\xe0\xb0\xc9\xa2\x9c\x9a\x0b\x98\xceM\xf6\xac\xb6\xc1\xc9`\x15Y$Zk6\xd4\xf6#\x83\x95)\xa8\xec3\x85W\x15S\x10\xd8\xea\x06\x06\xbbP\xd0\xf4\x8f\xa2\x9fh\xa4\xf3\xc1{\xf4\x135\xcd$E\xd9\xc8\\hot\x92\x91I\xbbwk\xf3\x93\xa1\xf4X\xc3\xc2\xa3\xc9\x05\x04\x83\x8b\xb65\x8dL\x81\x12R\x97\xe1\xe4\x88\xe1\xafm\x0d\x8ds\x06nSC\xe3\xb8\xb13\xb8\"\xddT&\xa4 \xde\x94!MEC\n-\x93\x12P\x89^\xfd\x81\xef\xea]\xb9H\xf3\xb5\xaf\xed\xe5\x0b8\x04\xf4\x81^!7Rv\x18\x11\xed\x86x \x87\xf0\x82\xbdP\x1a\x10\xf45%\x00\xb47\x8f\xfd\xd2wL5\xf8\x9eS\xe8'\x15t\x94\xd4\xa1\xe5\xea\x97\x9e\xd6\xc3\xae\x19\x0e5\xf8\xaf\xa2\xf3(\x0cD%Y\x17T\x16\xc0\x81t\xab\xc95\xaf\x9f\xe0\x10\xde\xc1Cx\xd7\xe5\xa1\x1cM$\xe7+8\xc4\xc0GW\xd4\xa2\xe8\x12\xf0\x91[Vy{\x95_y\x0c\x87\xb0n~e\xe0\xfb\xcf,\x12Y\xbd\xb1\x80\xf9\xcd\x02\xe6 \x1c\xc2\xdeT\xab)h0z\xcc\xe9\xfeY\x8dOl=:\xec\xe03:v\xda\xc1gM\xbew\x8c\xfd\xe1\xb7\x84(\x87\x86\xe37\xf5\xf7\x04h\xe3koh\x9bo\xea\xf0e\xda\x03\xec\xf5~\x1b\x8e\xf5\xed\xb7\xfa[U\x1b\xe3f\xccB\xd9\x15G\xb1\x02FWL\xd6z\xa4\xe8\xf3\xf6\xb3\xdc\xfbH\x17&\xa8\xb0\x99\xd9\xba$4\xdf\x8c\x12\xa7\xe5\xde }\xe9\ns\xf8\x0fq&\xba\nC\xffSx\xd82#\xd2\x06\xa1\xa2\x070\xeb=T\xf6\xa6=\xb9\xf8au\xc6\x00VF]\xddC\xabT\x0dA\x1ac\xbe\x10\xdaS\xf5\xd9\xa7\xea\xaf\xf3?\xff\xef\xefN\xc3\x8f\xee*f\xb39Y\x9a:\xe9cx9\x86_Q\x0fu\xe2\xc0\x0d\xf8\x15n\x80\xf3\xd6\x19\xc3w\x18\xc2\xb7\xf3\xac\xb5z\x92\xa7\xd9\x84\x9fg\xca)p\xffJ\x1b\x1d\x833\xd2o\xb5\x1d\xa7 $YN\x02\xbfT\xad\xcf\xfbq}\x96\xd6\xdb\xbf\xf1\x16\xc6\x846\xfe\xfep\xab\x15i\x9c\xe4\\g\xdcb\xdbq\xba\xc6\xb0\xa4}~%\x94\xe3\xaf\xae4G\xfa\xb1\x89\x9dgnW\x14o&\x14\x83\x0c\xeeR\xe7\xff\xb0H\xa9~\xfe\xb3\x1f\xeb\xcb\xb0\xc8g\xa8N\xa0\xbf\xa63\xf2X\xcc\xc8\xe3\xff\xf8\x19\xb9\xc2\x1a+;8wV\xdb\xa9\xe1\xe2\xa9!\xca\xe7Zz\xcc\xeb\x9f\xc8\xbei\xc2\x8a\xbd3\xd4\x0b\xc3\x1f\x7f\xc0\xde\x13\xb3$\xab\xed\x87\xca\xf9\x85\xb2+\xea\xb5\x14\xbdw\xbe\x89\xbe\xfdn\xebG1\xa6\xe2@V\xb4\xf8\xe6f\xf4-=\xe6\xe0\x06\xbc\xb1\x88\x8eo^\xc2|\xaa\xc1\x8f\xda7\x8f\x07\xf5\x8eU\xc9\xcd\xde\x8fZ3\xd5\xe0\x94~\xfb0s&\xd82\xbbi\xe3*A6i\x8d9\xfbM9\x98\xd7t,{\xcf\xb5'Z+\xcb\x13\xc6\xdc\xce\x0cY\xed*)\x07\xcb\xebP\x94\x8a\xcc\xd3\xa3\xad$o\xd0uX\xebM\xb8N\xf3'5\x84`\xabf\xf0T\x0d\xd4\xd8Z\xf2\xedVK\x9d\x8c\xd5\xa2\x14\x0f&\xd0p\xb9m\x83\xcfXx\xbd%\xef\xbb\xabV\x84\xd0\xc5+fB\xccc\x7f\xea\x1a\x12\xf5\\^(\x11\x087\xc3\x0b\x0d\xc5:\xd2-\xab\xf5\xba\xd5\x0e\x96\xdd\xba\x88\x06\xa4\xe0\x0e\xd9\x9a\xacVvZ\x1f{\x8d\x8f\x98\xb3\x8e\xd6A\xb3*\xa2\xf6\x8d<\x89\xa5\x84H\xefX\x01G\x816M\x1d\x8en\x9a\x84K\xda\xac\xa9\xc9\xa9\xec\xe0\xc7\xa4,\xa3d\xf9$\xcd\xdd\xa0'g4\x183\xcdD\xd4>k3\xf8\x89\xb96PY\xf5'\xe4U\xd4\xaf %\xa7~\xf6\xae\xca\x89\xf9\xfa\x97R T\xaeT\x81\xca\x95*P\xb9R\x05*W\xaa`\x98+U\xe0\x16\x8d\x8e\x06jO\xe2\xe0\xe3\xfb?-l\xfd\x9f\xbe\x04\x98\x0b@\xfb\x00\xf38\n\xde}j\x87\x17k?$R[?4goevS\xc30\xcb\xe0\x1aU\xferma\xe2m\xfd8\xe2\x85\x1e\xfcu\xe1\x9e\xa4c\xf0\x91\x02UO\xbe'\x8b4'\xfcp\x12\x00\xa8\xb7\xe3\xb3\xe4\xa5 \x7f\xca|::7\xdd\xd1\x18\x12\x8f\xf0?4\xc7\x82\x18\xb4\xf6\x04\xce\xf0\xf4\xd5\x9c\xa3kn\xe1\xe8\xfb\xec\x02\x12*\x837\xda\xcb<\x0d7\xc1\xb0\xb8\xfe\xca\xdb\x8f\x8d\\\x92r\x80\x7f\x94\x19\xc9O\x04 \xae^\xf5\x1a\xeb\xf8\xdb?i,\xbf)\xf6y\xce\xa2\xabme\x93y\x99\x00G)\x10\xe1G\xfc\xd8f\xa9\xa6\xae\xdb\xb1\x8d\x19X\xee\xab\xb2\xc6H+\xa0I\xd3\xc9\xf8\xaat2\x1bU:\x99B\x95N&\xe6\x0f\xe4\x15\xd0Z\xb9c\xaeY\xc6\x98\xfeG\x84\x1e\xfa/\x0f\x1e<\x90 \xe9\"M\xcac\xa6\xcfv\xa2\xd2\x8f\xa3\xa0\x1b\xa2\xd3\xfa34\xd2'\x03\xe3\x00m\x1a!)\x83\xd6\xab\xbb\xa4\xf6\x93\xee\x94\x1fc\xc72\x03\xaf\x18\x02#\xff\xdb\xe9\xd1\x8e\xa5\x9b\xc0L\xb9`\x00\xf5\x82\x81\xfeEP\xb1\x08\xc62@\xc0\x19\x04:\xac\xb6\x17\xd1\xc8u\xc4\xd6V\xf9\x05C#\x94\x06\x9ae\xe1wVyC\x87\xd0\xf2\xfe\xeb\xe39\x01\xf46&C>\x06\x90\xb7yz\xaaI\xca\x00\x9c>\xff\xc0\xcb\xa9\xea\xe3\xe4\x8dI\x06@\xde\x85\xdd\x86;$\xd3\xc0\xd0.M\xf2\xf4l\xd7^\xed\xd2\\\x90\xc6\xfa\x05\xb8l\x92\x02\xd8\xb1\xddV6\x82\x8f\xdf<\xf3\x1a\x1a\x90\x05\xa1\xf4HR\xe6\x17\xb2\x12\xb9&\xdd\xb1\xf0\x01\xee\xc8?d\x0c\x07\x06\xbf%\x10\xee\xbb'\xfb\x9ax\x10q\xa1\x0b\xef\xc9\xd4\xa2\xda\xcf\x9e$\x1f\x83\x1b\x8d\xaa<\x81\xeaL\xd5\xe2\x12N\xbc\x91\xd7\xf1\x19\x7f;\x12N\xb4\x1dOr\xee=\x02\xb3\xc6S\xa3G\x89\xb86\xb2\xa6Z\x0e\xec\xfa\xee\x9a\xd8W\x8b\xbd\x0c\xe2HJ\xb5`\x97\xf0\x0f\x10\xd7P|\x06\xd6lz \x13\x94\xb8vl:\x92(\xa3?]o|^Fb\xa39H\x13\x9b\xf6)\x97\x80\xb6CGx\xcb\x991\x95\xbe\x83\xa6D\x83\x97\xa0\x80\xe5\xdcb\xa6\x1f\x94F\xfdX\xc3t\x93CHS\xbd\x83\x94c\xeb\x88?x\xcbP\x82\xba)\n\x85x\xf7\xba\x89B\x9fT\x83\x19\xc8\x04\x1e* \xb9\x81\x10xP\xdc\xf93\xa8/\x1b\xfc\xbeDK\xd9g\xf9m#5m$\x90k\xaa/\x19\"m0I\x83\x84Q\x99\xe6F\x0d#SF\x92<\xb7P\\2md\xec_\xa4\x9b\xd2\x02\xbf\xb3p\xb9#\xcc \x884\xdcH\x18\xe55\xf8\xf3\xd5\x07\x84\xcaL\x04\x82gv\x8a\x8c\x04\xe6\xe1\x84W9\x9c+\xeb<\xf3\x0b\x93#\xc8h\xa7tj\xb6\xfc\xfc\xa2\xcdL\xeb\x93\xa7C+\xcc\x19gA>\x05\x0c?u\xc7;\x9e\x95\xa5\xe1h\x14\xec}\xd9<\xa2\x94V\xea\x9d\xf6jo\x9f\xaa\x8f\x9f\xf7c,Mgh\x86\xe9\x90\xf4\xa7\x87\xd031\x7f\x1fVg\xaf\xe9+\xcd\x99\x0fx\x08+\xb7\x03\xc5\x1c\xc3\x1a\xae_\x02\x16Co\xc4\xcd\xcc/W\xf8\xbe\xb2\x1f\xc5\xda\x8f\xe3F-F\xbf\x84\xee\xeb\x0d\x7fW\xf5gt\xce\xebFw\xff\xb3UT\x92\xe3\xcc\x0f\x98k;\x99\xe0\n\xabw\x95U\x15Gi\xaa\x01>\xb05)\n\x7fI\xb4\x07\x8b\x16]\x8cC\xc2\x8a\xa0\x93\x90\x04)3\x91;3p\xb0\x12\x8aah\xc1&/\xd0\xdc\x94\xa5QR*\xb9\x1f\xd9\xd8\xb0\xb6\xb5\x8e\xe6i\xaa(W\x07\x7f\xe2\xcd\xa3$t\x19:\xe4R\xbb\xb6\xf3\xe3f\x9dA\x99\x02\x1d\n\xc5\x96\xbc\xd6U\x88\x1fm\xb24\xd4\x04\xb6\x13m\x91C\xe5\xbc\x8c\x8f\x92ZtwJ\x8e%h\x9fEE\xe9E\x05\xfd\x8f\xdb\xd9\x0c\xf6\x9bI\xb2\x97\xb8\x9f\xb0\xc7v\xd5%>\xc4\xd2\x804\xc8!\xfa\xe3&\xe8\xe5\x91c\xcc\xa4\xdd\xa7\xd3\xa4Z\xc6\xd6\xe7v\xde\x19\x9f\x90\x90Z\x13I\x0c\x0fB\xc4\xfd\xc8$\xcd~3\xff\x99 \xd5\x95\xd2\xa86\xd6Z\xd1\xab\xf6+\x06\xda%\xd3\xd6\xad\x94\xda:\x17\xd3k9\xce\x88W\xa4t\xc0\xb1\xb1\x1d \x11\xfcd\xff\xadW\xa6o\xe8va\xf5\x8a\xe0\x06\x10\xaf\x88\xa3\x80\xb8\xd3N\xc7\x04-\x81^\x1d10\xa7\xccm\xf2\xa4-\xa51\xfb\xc2\x17\xbd.\xbf,\xf5\xbaA\x95\xbb\xefO\xa3\xe1\xfd\xe2\xa0jQ\x01\xe9\x12>\x87\xe2\x13u\x12O\xdc\n\xd7\xd0\x93\xb0\xca\x92\xf58\n\x9f\xa7\x9bD\x16Td\xab$\xaf\x95\xe3\xcdl\x1fE\x95\xce\xa837\n\xf0*?R\x7f\xb2\xda\xf3!;J>`\xea/\xd2\x1bT\xfbN\x9d\xe6\xa9s\xbf*\x9d\xcf+)0\x9dH\x13G\xa4\xc3\xbf\xc4\xf8?\x81\xb9\xa39\x04\x93\xb5\xa3\xe2\"M\xa6\x0e\xec\xaeV%\xddv\xb3\xda\x89\x89\x82^\xc8&\x8edR^dD\xb0\xb7\xc8f\xba ?\xfe\xa5\x9f\xd1\xe9\x11\x0b4\xd6\xec\xd4\x03s\xcd\xf4\x9c\xf5J\xab\xf7\xd5\xc4\x85\xa9\x06SZp6\xe22\xe9fR\xe6C`\xa5\x953\xe8\xdb\xf8\xa05\x81\x9bR\x8fm\x80\xaeE}\xc7\xda\xe9z\xa5\xdbB\xcf\x98I\x12@\x8fzU\xa9\xf9\x08\x93^~\x93\xe6\x16cI\xb5co\x91\xa7\xeb\x1f\x8fG\xee\x89C\x0f\xb5(@.\xff\xe6\xafE\x9a8o\x1b\x9c\xe3\xf8\xday:\xd3\x1e\xbd\x10!\x06\xcf\xa2\xe4\x9d&5\xfcug\x10\x13\xf7\xb6* \xfdg\xc9\x18^\x05?\x98H\xf9\xc1\xa8\xe2\x07\x93\x11\xe3|\xf6\xbf\x86\x0d|\x03\xc9\xd7\xb0\xa1\xfc`t\xb2i\xf3\x83\x1b ?(\xf8\xcd\x0f\xc5\x08F#M\x12i\xcc\xb2\xf8\xda_\xa2\x05\x17u1\xa7\x8d\x1bLx\xa5\xccn\xa1X,\xb8B\xe6\xad\xd9\xb2\xc5i\xaf3:5\x98\xb1\x96\xc7\x003\xfd)\xf2F\xb7\x87\xa8\xe6G\xe87^d\xd7\xb9\x87\x9f\x80c\x1a\x14\xadf\xed\xf4\x91\x0fq\xfaH\x07\xa4\xcad eK\x7f\xb9$aE\xb8\x0b]\xc6G\xcc\\lv 11\x0f\xf6\x8aB;\xee*\xdd\x92|\x1b\x913S\x8d\xc1\x17\x1c\xceA\xa1p\xb0\xf56\xad\xad\xb7U(\x9d6\xaa\x1e\xf8$\x9f4z\xe8/\x0bg\x0c\xa5\xc1Y\x98y\xcf\x08\xa7\x92\x08\x1dI\x8c\xb6\xe2\x9dye\xa86M\xd5OT\xc2*_\xb8\x84\x9f\x05\xec\xe4\xb6\x00\xf5(sF\x1d\xe8\x9cl\xd4\xee\n\x00=;F\xf7jbPL\xd9\x95\xe6\"\xe9}\xd3\x85\xef\xaa3A\xa7\x87\x1b\x0e\xf3\xa2S\xcd\x89o\x9a\x90\xda\xef\xc1\xe0\x93j\xf4}\x00\xd6\xc3t\x00\xab\x0f-\x0bN\x992\x86PG\x06\xc4U\xa7\xeb7\xc32b\xb36d\xb0\x15\x17\xf33\x8b, \xe9N1$G\x05\xce\xde%\x0d/\xad\xc6\x06\x1e\xc3\xc6\xd29}g_\x0b\x10\x1b\xcc\xa2\xa7\xc6\xf8[q\x898\\C\nSzE\xe1\x0c\xd2*\x19\x93\xc5\x0bt\x8b%Z/\x9c&\xe4\x8b\xec\xa9\x19u\x9b\xc0/s\xb2\x88\xce\xb1\xb0]\xbd\x0c\xc6\xb7W9Y\xcc\xc0\xf9K\xf5\x12\x8e\xc6\xa2\xd9\x8a\xde0\xda\xa1'\x1a\xb6\xfe\xdbR\xb0&\x08&\xca\x8f\xfeM\xe0\x1bVUDM1o5\x0c\xfa?\xa5u\x9cv\x01L*\x0b!J01\xc9\x1eHm&\xad;\x03\xe5[\x83SI_\xa4\xb3\x12D\xa4\x04\xc7Z\xe4\x10\xd2\xc6\xae^\xc9\xcd\xfa1\x1a\xbe?i$.H\xbcS\xfe\x077VQ!\xb0=\xaf\xff%\xf9\xc4\xe5\xf9}\xde\xea\xc7\xe5S\xf964\xb1\xa8\xed\xed*'\x91\xcc\xc3\x98\x8fb\xe4\x9e$\xc8\xdc\xc0\x1e{[V\xe4\xbf=\xab\xd7\x8a\x81\xd7\x1d8I#\xd7\x83\x89Y\xc7\xa1\x9b\x98tJ\xcev\xe2\x9fc\x8fnE\xdd\x99\xc3(\xa5\xe6\x0c1\x9a\x99\x81\x87J\xffB\xa2\xe5\xaa\x9cAN\xb9\x9dy\x1a\xb3,\xa4I\x9a\xaf}m\xfc\x9ez\xec\xb2\xe4\x00j\xf0\x96wl\x9c\x06\xef\xaad\x04\x94e\x1b\xee\x05l%z\x08\x9f\x0b;\xe9\x83\xce\xca$\xf6\xe7$\xc6\xf3HQ#|\x0cI\xdbT\xbc\xb3/\x03(\xdbW'\x1f\xb4\xb0=\xd8\x1c\x1b\xff\x05\xd7B\xcb\xf84Y\xa4o\xf2\x18\x8f'\xfa\xfb{\xbf /\xfdr\xa5Q8JS+\xa4\xaa\xd4\n\x91*\xb5\x82\xafJ\xad\xb0Q\xa5V(T\xa9\x15\xe2Vj\x05\xb4C\xb7\x01\xea\xdc\x0b\xdcR=\xdd\xbf\x16\xa9\x17zsn\xc5\x11h\xdc(\xbeD%5\xe1\x86\x9eY\xab\xb4\xd0\xe8x\xd8\xa95\xe7\x8b\xb5\xd3q3(\x16\x84\xb64\xd9\xe4jR\xe4\x9c\x00E\x1dx\xf3\xea\x19\x96\xc1-\xd1g\xc1\x81\xb7\xbb$\x80\xd11\xb6vn\xd1\x06\x0c\x85O\x8c\xa5\xd0\x9b\x05\xb8\x12l\x053\xc6\xc2\x00\xac\x85\x81\x98\x0b\x15\xf6\x86~i\x90\x89\x93\x01\x1aM\x00h:\x9e\xf3\x94\x9c\x7f\xfc\x01N\xb9\"\x10\x92-\x89\xe9\xc9c\x905\xd3\xfa\x0b\x14\x93-\x14|\x1c\x9a\xac\xfd\xc8\x08\xefc\xf2<\x87\xb2p\x16\xf1\x1fV\x8cL\xaa\x15/mX\x1e\xa3\x86\x8aq\x94.\x96\xf5*\xfc$*\xa3\x7f\x937y\x99%r\x90\xfb\xbb\x9d8\xc5\x14\x9e\x945\xd4\xb1\xf3L\xb5\xb9\xc9c\x1d\x10\xb3\xd3\x08\xee\xc4\xe4\xe5^\xa2\x0c\xa9\x83bR[S\xca\xd3A\xc7\xcc\xea\x83L\xee\x15x\xcdc\xee\x98\xbc\xcaV\xa8\xa6\xe1\xb1\x8e\x86\xd3\xdeh\xf99\xe4\x984\x829c\x085\x06\xbc\x9a\x19\xd4\x9cZ\xcd9\xd4\xba\x91\xb6\xcfA\x85\xa3\x8d\xfa\xa4\xb8\x949\xb9y8\xb0\xda\xfe\xd7\xedp(T\x87C\xa1:\x1c\n\xd5\xe1P\xa8\x0e\x87\x82\x1d\x0e2\x92_||\x92\xaf\xd7\xa0\x7f!\xf9\xe2\xb2%\xf9\xc2/v\x97 Z\xc6\x1cXo\xa1\xf8Zn\xa1\xeb\xc1_\xf5\xf7\xd6\x17v\xea\xcf\xb2\xb7v\xd6/4u\x0b\x8b4Ugp\xfa\x8f;\xf7\xae\xc7\xa6\x157\xffDB\xd1\x97\x94B\xda\x94BO0\x9f9K\xff`4\xe5\x03\x9fO\x1ed\xd7\xc8 $\x17\x06\"i\\\xf4&\x0b\xfd\x92\xb0\x86e\xc6\xdbO\x9e{\xe8\xd2d\xf2\x03K\x9d\x83\x82\xae\xa5\x96\xfdG\xa9\xd6\x90B\xe9\x8e\x13\xa7~\x18%K\x96\xd5\xb8\xf4\xf8\x9f\xc7\xa5_n\xb4B\"\xc5[g\xe1G1 \x07\xbf\x8bn\x85^\xb0\xc9s\x92\x94\x1cC\x0c\xd2\xeb\xef\xef\xb5\x82(\xba\xde\xb9\x1b\x0f\x0b\xea\xd1\x9e\xe5$tF\xdc\xdb\xb0y\xff/\xbe\xefk\xb3\xa07%W\xfa/\x8e\x0dmw{S\xfe\xbb\xaa\x1a\x7f5\x07$\x8e\x1f\xebU\xfaQ\xb2CN\xfa|XK rf\xaa'|\x9d\xce\xa3\x98\xcc`z0\xb4/N\x94d\x1b\xfbTCut$\x9f\x05\xfe\xba\xf2\xe5,\xf6\x03\xb2J\xe3\x90\xe43p\x18\xea\xc0\xfc\x02J\x7f\xa9y\xab\xbc\xc8\xd0\xbeE\xceu\xdf\xee%*j\x12M\xf5k\xd5\xc1_c\x8aS\xe6\x1b\xe2T\xd8\xe28\xa0U<\x84U\x81qs\x14\x94\xdcn\xf6\x81\x13x_O^*S\xf1R\x99\x8a\x97\xcaT\xbcT\xa6\xe2\xa5\xb2a%\xc53\xca\x15\xb4\xeeb`L\xa6\x89\x9cY\xe0\xc7\xa6\xfbR.,\xfb\xf8\\X\x08\x87\xf0\x84\xb7\xef!\xebAwO\xbb\xcf\xfa@\x1a\xe8\x84\xd7v\xf0\xa4yYse\xc0{\xa7\xe6\x96\xec8%\x11iK\xfb\xa4Wmn\x19|\xc4B\xa3K\xbf$\xd2\n\xae\xe2\x8a\x8a\xa30*\xbfO\xcfg\xb075\x12\x0bGI\xe4#\xc3.\x86+a\x80`P\x02F\x18\xc0\x13\x81H\x95\xc3\xd8?\xacq]4\xa7\xbef\x96\xac\xcdc\xaa\xd3dx\xb6E\x90\x8cD\x9boB;\x14U\xa2\xb7\xa1#\xf8d\xfel\x8c\xcf\x14\xe7\xde\xa34)6k]\xfeD\xa8\x9c\xd62?\xf7\xd7z@\xe6\xb5\x16\x15\xbcf\xb6\x1e8\x1a\xc2\x1eC\xe5\xb7\x96\xf9\xe5\xea\xb9E\x9a\x8e\xcd\x003\x0ep\n\xbfq\x9d\xefYE\x1c\x0dk\n\x9c\x82o\\\xe759/\xbf\xcb\x89o\x02\xcf\x18\xf8*Z\xae\xe2h\xb9*\x1f\xa5\xa1\xd1\x81,d\xef4R\xf0\x99\xde@\xef\xed\x08\x8bg\xe2Z\x91\x92\xe4\xbfD8[\xfe\xf7\x17OC\x92\x94Qy\xe1\xfa\xdc\xe7<\x1fyu\xd9\x94\xc2\x19s\xd3\xf7\xb3\xa8(Gn\xf7\xc8\xea^[,\xa7\xd9\xe8\x1c\xdb*\xae\xcf?\x9a\x93\xdf6\xa4(\x1f\xd9\xf7~\xddBb\xfai\xc4\xccN*Wq[\xf8,\xc8\xde\x98\xd5\x8c\x0c%\n\xd5\x03}\xfbK\xd1>\x12~=\xec\x05\x1c\xc2\x92\x89\xc7z\xc09\x02V\x07\x85\xd1[\xed\xca\xaa6\xcf\xd3\xf0b\x82X`\xf0zpB\xbf\xf4\x19\xe4\x04c6f\x907#8\xec\xdf\x8e\x92\xfa\xdd(\xd1\xd5\xfc\x1a\xc3\x9c.k\xaa\xa9\xae\xb9\xd8m\xb0\xa7\xa7\xc8\xf0\xc3\x0dpW\x0d\xeb\xa3\x03Q\xb2\xf5\xe3\x88e\x070\x0d\x8a\x93\xdf\x0b\x03\xadk\x8b\x0e+? c\xf2\x82\xdfT\x8f\x9d\xee\xbc\x0b:z\xd5\xc8\x8d\xce@\xaa\x91\x13\xab\n\xa3bp\x9a\x1ej\xca\xae\xee\x8e\x86\x13\x96\x91U_P[\x87\x11\x97i\x9b\x84Q\xa9mX\xd5h1\xa0\xc19\xa6\xa0(\x13\x08\xfc$ 1H\xd6\x86u\x04D%\xb50*\xd5PF\xeck\xa4\xa9(\xd3\xe52&O\x05\x99\xd1\xef\xbc\x87\xe0<\xc2\x1ebG\xe8+u\xd5\x02\xcd\xd2\xb3\x0c\x0e\xa6\xf9X\x95\xeb\xf8 \xd6q\xd8i\xbe\xdb\xf1N\xceKq\x8c\x89L\xb4\xc0\xca\x92\xa9?`\xf4U\xe3\xf8\xbf\xd5Oo;\xf1\xad\x89\xeb\xa9(\x81\xc1\xf9Z\x81\x9d\xad\xe4\xcb\x9a}\xa9L\xea\xd4\xbb\xab\xf0.k\xc7\x9c\xd4\x87\xd1\xaay\\\xf6D\x1eq|\n\xdf8m\x02\xe0\xf6\x04\xe0\xf8\xba\xef\xfd\xfe\xbe+\xbfW\xf3\x17\xca\x1f<\xaaz\x10V\xcf\xdf\xb7\x95\x03\xdb\xa6x\xda\xe5\x97\x9b\x98y\x05\x89\xd9\xfdY\xcdLDU\xde\x10T/\xa5B\xbd\xa4\xd0\x1cQ6\xf9\xe6\xf9:\xbe\x19y%)J*\xceJ\xe1(\x83\x8c\xcbf\x02D\xab\x08<\x84\x84\xc7\x80\xd0\x9e\x9e\x9e\xafYu\xb0\xe6M\x99\xe7P\xb4\x00\x97w~\xef\xf0\x10\n\x9db=\x86C\xd8C\x8e\x0f\x93\x17\xfe\xfe\x9e\x8e\xb2\x903M\xc4+HyLY5W'\x1c\xe1fW\xd4\xb0\x1e\x8d\x9b9\xf1\xf5\x9eH\xc5?\xd7\xb1V\xa1\xd7P\x06(\x12\x9cK\x94u@\xe2\x82\xe0\xdc\xb6\x92\xf3\x17x\x0c\xb8\x0e\xce\xb1\xaa[\xfa.i\xbb\x83L\x88\xacEMc\xda\xcf\xb5)\x0d\x17\xf8\xd97\xad7\x14\xd1I\xafXvK\xb7\xe3R\xae$J\xbcE\xe2E\xc9\x82\xe4\xc7X\xe2\x7f\xe4\xe6<\xdaF\x9dg\x8d\xbe\xb7\xa0h|\x8c=\x16/\xa6\xa8\xefT\xcc\x07+\xb0\xf0K\x1e\x95\xe4E\x12_H\xf3]*\xe6EL{kf\x14\n3\xa1\xf7Lj\x19B=~\n\xf4\xcf\xb5\xa44\x99q\xaf\xf0}\xa2\x90\x90\x0d\x8bOw\xd1i]bc\x0c\xa9|\xdc\xa7C\x06\xee\x92N\xed\x0e\xf8\xe3\x0f\x08G\x0c^\xfa\xf96\x03>\x14\xedl\xe8p\xde%\x98\x89\x82`\xa6\x1d\n\xac\x82\xa3\x84=\xa7Bl\xcb\xe0\xea\x95y\xb4vYA6\xbd!\xb6\xb1\x85\x95ek9\x99\xe8\xc7\xba(\xb0\xb3\xc3J\xea\x8eUh\xa8\xa6k\x0c3+\xd9\xf8;v\x8aURc\xbe\x14^\xc2\xfc\xa8\x0c\xc9\xef\xe5\x96\x8e\xeb\xe9J\x7f\xdd+\x10\xd0\x1f\x0f\xee\xdf\x1a\xfd9\x8a\x10\xfc\xf9\x1c\xc2\x189|\x92\x06\x9bK\x96 \xe2$\x88\x15\x94\xa1\x1cB\x98\x068\x0e\x8f\x9c\x93\xe0Q\xba^\xfbI\xe8:A\x9a]\x98Sd\xc9\xa8\xd4\x07\xf3\xcc\xf0\xb8\x12R\xcd\xb4\x95\x9ck\x88\xeb9%W\xe0\xfd\xae\x0e\xce\xac\x8bK:\x8fX\xee&\xd3\x17\xd5T\xb2]\xbf'\xa3\xd2dQ\xaa\xb3\xcb+\xdb)\xc9y\xe9\xe7D](\x11P\x14CTj)\xbb\xf0\x8ezrs\xe2\x87\x8c7b\xb6q5dk$tZ\xd4\xa0V\x89A[\xc52/\x91\x0bT\xb0E\xf2)\xfd\xa0\xe6\xf7\xebP0\xa7\x7f(m\xe8\xa14\x95\x9dJ\xf4\xc9\xf4\xbe\xecX\xa2O\x1eLUqlj\n$\xbc\xd1N$\xa5\x08(\xe3&\xab?U\xd9|\\gE\xfc\x90\xe4EW$\xa5\xe2h\xe9e\x9bb\xe52T\xc3\x84\x9d\xec\xef\xc9?\x9d\xb1x\x9d\xe5\xd1\xc5\x18N\xfe\xf8o\xce\xdf\xb0zf\x9d\xa1\x08n\xc0\xdf\x9c\xbf\x8dx|\xf4\x06M\x12*V\x93\x9e\xaa{\xfbrTC\xb1Wa@\x0e$9C\xc5U\xe6\x17\x8a\x8dP94.\xc6h{\xea\x9c\x1b\xdd)\xf2HR\xe6\x11)\xa8\x90\x04{.\x16\xba\xa1\xc7i\xe6%\xe4\xbctG#/L\x132\xfa\x9a\x8f\xc2d\x8e\xc4L`6\xd6\x91\x15\xefZ\xe3\xc8\x0d\xc7p`R\xcfS\x9e\xedd\xdfP\xa1b\x8dPS\x89#\xa6\xb8(\x12\xad\x1b\xab\xff\x038\xdd\xd5\xde\xc2\x0dpf\x98?m\xcdW[N\x0b\xfa\x84\x00\x02\xbf\x0cV\xa0>Yc\x86\x11\xb8\xc2}{\xc1{XD\x89\x1f\xc7\xaa\x15V\xaf=\xbd\x98\x12%\xf3\xf8\xa1\xd5\xf8\xed*\x06`h\x0e\xf8\xd6\x89GP\xae\xf2\xf4\x8c\xbb\x07u/\xc9<\xfc\x97\xfa/\xfaA\x8e\x8a\xf34\xbc\x90\xa5\xd6\xa1 \xcez\x13\x97Q\xe6\xe7\xe5\xcdE\x9a\xaf'\xa1_\xfa\xcc\xd1\nG\xe6\xbc|q\xfc\x9a\xfd\xdd\xdd\xbb\x1aNa\xa9\xd9\x8f\xc0-|:\xa7\x8e\xb9f_\x82q}\xaa\xfdy:\xc6\x8c\x1c\xf2\xfd\xc9&\x057\xe7\xc51\xf9\x8d\xefN\xdas\xf7\x14\x0e\xe1\xac\xbb;\x97\xc6\xdd |\xf4G\xfd\x8dw\xca7\xacq\xfb\x01\xcf\xf5qd\xdc\x82\xc0\xb7\xe1\x91v\x1b\x02\x9e\x08|\x0f>q0h>J\x8a\xd2O\x02\x92.j\xae\xdb{\x12\xa1\xb0\xd0\xda\xa0\xe7t\x83\x1e\xfe\xffq\x83z\x89\xbf&\xf4\xef\xaf\xcb\x8b\x8c\x1c\xb2{\xf4'\xdf\xb9(P\xf7\xde5\xeem\x90\xe25X\xedq\x10\x98\xb4?F\x8c\x91\xdb\x05m6\x9f\x1e\x9f\xe8\xb5\x87\xc1\xfcg\x8d=\x7f\xa6\xdf\xf3`\xd94\xf0}x!\xf6\xfe|\xe8\xabe\x0f\x1b\x94\xb7#E\xb5 \x84\x97\x13t\x07uo\xfe\xeb_\xc9\xcd\xe5\x18\x1c\xa7\xab\xd8\xe3\xe3/e\xe5\xac\xdb\x1c\x8d\xcf\xb9\x93[\x8aJz\x9b\x8f'\xc4^7F\xefK\xcc\xca\x97\x98\x95O\x11\xb32 Z%B\x95c\xb0\"k\xab\x9a\xd7\x0dp\xab\xcf\x0b\xf1#29\xd5 c\xa0.K\x1b\xb3\x072\xbeD\xc1/\xa0#\\U_\xb0\x1e\x19\xe2J~\x0dCiZ>\x98\x97\xad\xe3-Q\xde\x148\x01\n\xeb\x1f305\xd6\xff\x9aV\xf0n\xba\xa7\xb1\xd0\x17\x8e\x82H\x9b\xf8\x10\xebr\xdd*p\xcc\xa3\xdb\x1b\xb3x\xfd\xf2c\xff\x00\xca7\xbd\xd2\xad\xea\xbc~_\x91\xf64\xec\xa6\x993;\xae\xd4N+\xbcW\xc3\x95h\xc6\x94\xa3M\x1d\x17o\xc5T\x0e\xf2\x98wF[\x89\xc5\\\xe7[Q\x8c\xdb\xa8\xf6R\x16\x8a\xe1d\x16E\x92\x01u\xfcL\xebdY\xb2\x9b\xf7\xce\xa0Z`\x85\xbd\x95 \xb6%\xbbM[jw\x05\xdf\xf5\x8c\xaf\xf9\xc2\xf7} \xbe\xef\xcfg`\xfa\x14gF\xcd\"\x99\xce\x0d\xcb\xb0\x82|@\x90\x00s\xb1\xa8\xc2\x17\xf91\xac\xd1\x96D\xf8\x02'\xf6\xe6\xd8\xd8\x82\x04\x9b<*/\x1e\xd3}\x1d\x95\xa6Z\xc7t+\xe5\xc6x\xdf\x98A\xf9\x9br\x95\xe6\xd1\xbf\xc9\xf7%\xa5\xb0{\xdd@\xb6\xe6\x15\xb0W\xc4Qx\x05\xf60\x8c\xd4\xe5\xc5&\xff\xf8\x03\xfd\x9d\xae\xc4\xea\xc5\xbax\x890\xda\xcd\xb0\x96\x8a+\x89\xa3m\xce\x86z\"\x02m\xd7\x9a\\\x91>\x84\x94u\\\x9b\xdf\xaa\xb1\xad\xd4\xc6\xae\xcaAX\xb7z<~\xbaJq\xf5\x1f\x9b\xeb\xea\x93zo\xc8\xe3T\x03\xb7ht4P\x1f\xad\xd7\xd9wC\x15Xj\xad6\xd9~\xf8\x80\xd2\x88\xfbP\x89*\xf4\xa1\xc9\x87\n\x1a\xf94\xd2\xe45\xbe\xcchD\xfb\x9e+n\xac\xd3\x90\xc4\x942\x8da\x8f\x07\xaaz\xe4<\xf3\x93\x90\x84#\xa1\xea0\xb8\xc6\n\xf8Y\xff\x13\n\n\xd0\xdf\xc3\xf2\xe9\xdd\x98\xb4&\x18iW\xb5&\x87\x89\x11&\x10S\xc8\xe3\xc8\x94\x1a*S\xb8n=ZE\x9f\xba-\xcd F\x99[\xac\xfeK\xee$\xd8\x86\xeaOI7\x9a\xf7\xc3\xf0^6\x11\xbc\x1f\x8e\x0d[E!9&\xf1\xe2Er\x84\xd3j\xe2\xc5\xf4+\x0d\x15\x1bV\xa1\xb5B\xe7C\xf7D\xd2\x89\x07\xac\xf6F\xdes\x0c\x85!\x1a\x90\x0f\xad\xfd\x11s\x80N\xf0\xf5\x94T\xa3\x19\xb4cw\xd8\xaa\xb6\xf3\xf0 \xb8z\xd4\x82\x98p\x08\x991\x956P\x98|\xaa\xe8\xcd\xfe\xfc\xb2U\xe8b\xae.\xdcl\x88F'\xc1\x0c \xea\xf2\xb6\x0d\xb5\xde*\x8a\xc3\x9c$\x943\xfa(M\xebB\x0d\xcd\x0d\xc9\xc2\xcc\xaasM\xc3Q\xdaxi\x05\x9b\xbc@\xa5[\x96F\x892_\x1c\xf4\xb0\xb7\xba\xcb$\xe7?\xed\xe0v\x1fX\xab\x92\x04%\xaa\x1368\x8c\x8b\x95\xed\x12\x1eP\xe4\xd4\xc7\xa0\"|\x17S\xf6\xcb\xbf Ar\x985a\xbb\x87\xa7\x91J\xf5\x85\x02\x990\xb0h\x1d\xd1\x92\xe8\xb5\xee\xc1\xee\xfc\xeey\xde\xfb\x0e\x89k\xb0C\x1d\xaf\x0f$O\\\xf8i=\x10GO\x9b(v\xdc \xbb\x14\x87~\xbf\x1e\xd2\xf83\xf0\xf9\xbb\x96*\xc11\xfb\xa10\xdc_g\xe5\xe0\xe7!\xc1\xf8A\x19m\xc9k\x7f>\xc8VZ\x99aC\xbf\xf4\x0bR\xa2G\x8e\xfc\xc8\xb6\x92Q\xaa^\xa8\xd5\x12\xbd\xdb\x97\x13JP\x13\x98,\xa2\xa5\x02\x8a\x89%\x86\xc0\xce\x00\x13QW\xb9\x86\x9fS\n\xfc\n\xf9\xaa(Y*E\x18G\xc4\xef#\x8b\x18\xa0k\x1b\x12\xef\xc6\x0d\x97~\xba\x02\xb4HS\xd4\x98\xc1\x98R\xf9\xaa\x8d\x99\xc4\x83\xefc\x0b/W\xc9j7\xb2\xce\xb0-^\xffIg\xafq8\xb5\xe0ly\xef\xc6XG\xee\xc4\xd1\x90\xefG%Y#\x9fY\xd3\x9a\xc3\xc3ff\x9d\xc6\xd9\xf2\x10\x1c\xbe\xb3x^\x96\xc1}\xd3\x07\xadt\xba\x16G\xc9;U\x860\xa8\x92\xd9\xf0$8\x8e9\x9dJ[~\xa8\x86\xa5\x1aDD\xc7{\x14F%`\x8c)\xcb\xbe\xc1\x1a\xe1wX\x154\x8dqd\xd7\xa5\xe0\xe7\xc8\xf5Z\x08\xda\xb3\x88'\xe7i5n\xbbBlTW\xb6>l\xc7\xd6\xb9P\xcc\xb1Y<\x92\xcb\x8c\xe8_}\x05\xe9\x18\x8c\xcb\xa0\xa9\x84\xa65\x071b\xab\xad\x94\xd2.M\xa2\xa1\xf55 \xd5\xa6;h\x1d\x06\xda\xc4'\xa4\xa6\x993\xd0\x14\xb3\x14\x14Y\x97\xef\xb4\xf7\xc0(1~\xdef\xa4\x05\x15\xb1z\x12S\xca\x9f\xf4\xa4\xb2H\xbc\"\x13\xbe\x162\xa9l\xc3\x1f\xf4\xda(\xf8\x83\x9eT\x16K\x0dL(\xfe\xb8qS,W\x1b\x98\x16\x1f_<\xcbl\xc53\xbd\xcfn>\x06\xbf\x7f\x92wy\xdfk\xe3\xb3+\x92\x84ozb\xa2\xc2g7\xed\x8b\x8az\x9f\xdd\xbc6X\x1d\xb6\xb7\x8e\x8aG\xcde\x89\xe3\x01\xabE\xc92\xca\x17\xab\xf4\xcc=a\x94\xb3p\xc6@\xde\xd2o\xf7\xe9\xc0\x989Q\x8c\xbb\xe3\xa5+f\xe9\x0dSH\x85\x1a\xdfN\xa8\xb9\xe6\xbc\xbb\x0dc\x9c6\xf8V\xdd!\x1c\x19B\x9f\x9a\xda\xf8\xe6\x92V\xc7\x05J\xb2Q\xdb\xdb\xb7\x03\xe2E\xc5\xf1*=K\x9aK\xdf\x80\xa6\x1c\xc0[\xccB\xa0?\xa0\xed8\x12\xa6\"\x9d\xa7\xe7J\xdeX\xd5L:\xeejX~o\xa9\xfbu=h\x1e\xb4\xc6\xe3\x93\x84Z\x0f\x8e\x90\x9d\xae\x9ax\xb5ZYY2'P\xf6\xa7\xa9]~l\x97]C\x16\xde\xa7T\xa3\x9f\xf5\x06v<\xabc\xe3\x19\x9d\xe1]\xc3\x19\xed\xea\x1e\x82\xf2\x10\x07\xbe\xad\xd0^\xe2\xf06)g\n%\xc6\x9c\x89^\xcc\xa0c\x84\x16G5\xe7\x02\xfc\xa2\x88\x96h\x931\xeb,\xaa\xe3\x806<\xfd\x1aJ\xf8\xa6w*|\x0d%\xa5\xfcj4\xda\xf2<6\xf5\xa1Pj\x82\xed\xaa&s:\xb4d$\xba]%\xfd\xf6V~\xf1\xe2,\x11l\x0c\xd3\x16b\x04\x02\xeeZr\x92\xd3\x13(9\xc9\xdf\xdaF\xc2B\xe3x\xef\xe3D\x1f\x01S\x1bw\x89\xea\xc4&\xda\xc3\x06\x9aCN\xd8\x81\x9a\xc07PV\xb3\x9b\xe8g\x17\x1a+\\\x9e$\x860\xc6\xdc#\xc9fMr\x7f\x8e\xe7a\xebO,&1\xc6\x9a\x88t\xd3o\x04\xd0\xde\xfe\x18x\xf64\xba$X8\xd1\xcd\xbd\xb3<*+\x88\xd1X\xc1d\x12\xfa\xc1w\xe4B\x1a!\".\xdb\xa0<\xa8\x17\xaa\x9a\xff\x92\x87\x9fh\xa6\xa8\xe27(\xeb\xe66P\x89\xee=^ \x12\xd3B\xe5\xbd\x9c\x84\xe2\xea\xf7\xe5\xbd;\xeao\xb3\xc8\xa8\x8c\xae\xd0\"2\xd5\xb9\xb2\xe2U\x80G>\xee\xb9\xa4\x19\x92Z\x8eD$dB\xce\xe0\xf5EF\x8e\xf2<\xcd]\xe7\x91\x9f$i t\xcf\x80\xcf\x8e\x18\xf0\x0b\xf0\xab\xd6T\x825g\xcbT \xf8\xa014c\x87At\x9a4{\xf9\x8a,HN\x92@t\x956\x08+\xbfH\xfeV\xc2\x9c\x90\x04\xd0\xe5\xd4\x8f\xa3\x82\x840\x81b\x93\x91\xdc\x1d\xb5 \xe8\xb0H\xa8+\xb9\x0f\xf5\xfc\xee\x95h\x97N\x11m\x1d\xd8;\xc4\xcc\x9dt\xf2\x90\xc0V\x13\xd2z\xc2\x98}9\x8e@c\x9e\xdc\xa8\xcd\xba\xf2\xcd\xb1$\xe5K\x81|/\x16nd\xe9\x1e\x0dR\x0c\x1c\x82'\x18\xa5.\x1f\xd2W_\xb1\xc21\xa8\x84V\xa0\xcd1\x9dlz\xe0\xe6\xa4((\xf6\xae7E $*W$\x879a\x1fH\xf3\x06\x1e\x8d\x81\xe2\x99\x037\xaa\x86\x14\xabB\xea\xedX\x9fQ\x8c\x87q\xb1s\xad\xfd\xaaa\x97\xd2\xa4(\xf3\x0d\xe5\xcdL\x96o\xbb\xf8\x8c\x9a2\xea\x8b'\xd0K\xd0\xc2\x996b\x1fX7+\xda*M\xc9'.\x05M\x1cq\x87 \x97\xcfT\xd1\xc2(x\x08\xd2\xfb\x1c7f(\xb9\n\xb4<\x94\x8a)n4\x86\xa62b\x0c)\xbd\xa5-\xd7P\xac\xd2M\x1cV\xef\xbc\xc1l\xa5\x96\x95\x03\xb4\x019\x82\xf5\xc0\xed\xa1\x9d\xd7T\"\xaf\xc2\xb70\xa5s\xd5H\xeeY\xf3 \xd3\xb7\xf0\xb0\xfd\xe7\xacg\x1a\xef^Q+\x01;\xdd\xd7\xaa\x02P\xd0\xa03\xcc\x9f\x81\xa5p}\x910\x1f\x80\x9a$\xbc#\x17\x85\x9b#WNZu(F#\x8flI~Q\xb3\x8b\xdaC\xae\xd1b\xe2E\x05\xf2Ac\xb6y\xb2B\xc9\x0c\x01\xe2\x14\x1e\xfd\xedn\xa2\xb9I\xd1\xcf\x94\x9e\x03\xfd\xeeiW\x12:\xddKO\xa8\x9c\x1c\x9d\x10m\xc7\xe4{\xa0\x8f\xb4\x94S\xef\x18\x06\xbb\xc73\xf1\x9e\xae\xd7\x1b\xdc\xa5\xad$\xc3p\x08\xd1\x18H\x83\x89\x8f4\xbc\x8cNa\x06R\xa5\x19\xb4\x07\xf2\x9e%\x88t\xf7E\xdd\x1d|r\xdd\xb4z\xa14WR\xca\x9f\xdc\xef)\xe9\"\xfe\xa4\xa7\xef\xf3\xf9\x83\x9e\xbeo\xc3\x1f\xf4>U\xf0\x07=}_\xcc\x1f\xf4\xf4}\x81T\xdf\xb7@\xf0\xa0s7\xe3\x1f\xb9\xd7t*\x08\xd5\x8a\xc0\xf0\xe3+\x02\xf5e\x8c\x86(\x02\x15\xc1\xfb=\x97\x0c\xad\"0\x96*\x02\x83J\x11\x18\x8f\xc68\xd7\xfb_\xc3\x02\xbe\x81\xf8kXP\x81%8Y\xb4\x15\x81\x0b;E`a\xab\x08\x8c\xec\x15\x81\x01W\x04.yd\xb2\xff=\xaf\xa9n#\xc7\xf1>\n\xdd_\xcb\xaa\xe0E\xc5\x8b\xef\x8eoa\x01\x87\x93\xdak\xa0p\xc6<\x1e\xc7/\x1cz\xae\x9c8a\x1d1\xe5\xbc\xed\xb5\xf3\x9e\xf7\xeeQ\xc7\x13l@\xff\x1c\xe8\xab\x86\xf0\xb3,\x11\xde\x15h@\x15\x8aN\xce\x8f4\xe7G\xbc\xc0\x93\x1b\xbe\"E\x1aoIx\xbc\x99\x979!\xeeI\xb50\x1d\x85\xaed\x85\\\xbar\xf4\x900\xa5\x17(Z\nU\xdb\xf4\x02\xb1T\xa1\xba\xf9\x04\nU\xbd*\xd5F\xe5\xca\xb2\x1d:\xfaa3<\xcf\xfd\x80\xa0\x8d\x18\xb8#\xb9\xaa=F\xb8,\xa9\x90\x1dE\xb4\xebb\x94$$\x9f\x18z\xa7l\n\x1d&\xad\xdb\xda\x0d\xe1\x9c\x12k' z}\xa4\x99#\xa7\xcc\xb5\x9d\xb1\xcb|\x96\xc6\x98\xf8\xec/w\xef\xde5h\\\x17iR\x1e\xb3o:Q\xe9\xc7Q\xb0C\x9a4\xf5`\xc2\xfa\x90jp\x893GG\x99\x1a/\xa9`^h\xa7(\xdd\xe4\x01\x99\xc1\x91\xbc\xbb\xa3Q\x8d\x80\xe7\x94H\x9f\x8b<\xd0\xe7J\xc3\xb4\x95\x0fw\xc7i\xcf\xa2\x8e\x1b\x0bi2\xd9\xae\xd1=\xe9dj\x80\xa2\xf2\xe4\xa9\x8b\xa7\x8e/\xd8\xf2,'\x81_\xea\x99X\xe0\x02\xe6\nm\xa9^T\xa0I\xf5\x1d~\xe8\x9d\xc7\xad&\x85\x9b\x1b>\x91)\xf3\x1f5\xaf-\xe5\xdc\x03?\xfe.\x8e\x96\xc9\x0c\x9c2\xcd\x0c\xf8I\xaf\x8cr\xff\xc9\xf2\x15\xf7\x9c\xd8\xf7\x0e\xc8\xda\xc03\x1amQ,\x026\xf3(\xfe\xff\x82>\x19p\x08\xce<\x8dC=n\xeaw'\x08\xad\x84&\x0d\x04\xb4I\xca\x86G;Vk\xa5\xde~\xa6=\xa3\xef\x17\xa7\x1c\x99\xee\xfb9\xe7dv'\xcc`K\xa3\xa0A\xa7r\xdd\xb0AIy\x80\x1f<\x7f\xd7s:\xf6sc\xee\xb1\x0c\x81w\xef\xb9\xaa\xcb/\xc7\xddT\x00\x16(\xc7\x03\xbd\xd0V\x99\xc0\x0dp\xf0WN\x7f\x9d\xd2_\xbe\xae'F7\x07!\x0f\x1b-\xf1m\xbf\x00\x83\xd5\xab!\x9b\xf1:\x84\x0d\xcd\x00\x86+\x9a\xdb\xe2\x0e\x02\x81\xa1%\xeeIa\xf0 \xe0Q\xdc\x0b\xb8\xa1\xb3\xa8\x8dd\xd62\xf6\xa46\xa8U\x87\xcc\x99\xf1\xb8\xe7'\xe4\xff\xfc?\xa7\xfdV\xf9\xb1\x0f\xa4\xc4\xea@J\xf9\x81\xa4&\xb2\x18\x8dw>\xe1%b\xbd\"\x8e\x02B{s\xa0,\x08+\xae-/\n\x99\xc2CH\xbd2\xfd\xf1\xb8\xfa\x81S\x9a\xf2 \xb2\x8a\x80\xbc\x0c\x19\x07\xb1\xaf,\x1cU\xac\xc9\x074\x99\xb3{\xf7\xee\xe9i\x07h\xe9\x07\xd8\x1c \x0c\x97\x92K\x92G\x18:\xc6\xc1d\x12l\x86\xda\xf1\xfc\xf3U\xbb\x10\xd4\xbc\xaal\x7f\x1e\xd3\x13\xefX0\x816;\xd5f\xce\x9do\xe0\xef\xf0\xed\xa59]\xc9Q`\"\xd75\xa9\xd6EuZ\xd3\xe9>\x8d\x1e\xaa\x8c\xb5$\xd3\x82D\x1f\xabA\x8c\xe4\x19Is\xb5\xb2\xbf^\xe5z\xa2\x0e\x0c&\xdf\xda\xae\xe8\xaf\x1d\x8am\x88\x197\x91,\x1b\x1f)\xa4W\x9a\xd8\xed+E3\xb0F5\x18\x82n G9T@\xa2\x89\xd2\xdc\x8c\x19\xd5\xa0\x81n\x06\xa7 #\xca\x01(\x92\xad@W\xda\xfc\xe9*\xd1\x11U\xaa\x03\xd0\xf1\xa7/\xe8\xd8\xb8.\x89\x8eL\x9f\xfd\x99\xa3\xe3\xab\xabD\xc7$-\x07 \xa3\x01\xad>\xbf#\x11\x0d\x14Wv\x02\xbe\xba\xec XW\xff\xba\x94 \xa0\xaf\x08\x0e\xe2\xb4\xd0\x94K}\xef\xec\xe0G\x98\x19\xfd\x08\x99\xe1\xee\xba9Pe\xca\xcc\x90\x99\xd4M*\xe2O\xa41\xe4\x99*\x86^z\x971\xa8\xdc\xbc\xac\xdc\xc6\xa0\xf2\xf42\xbbR\x01W\xe1G\x83E\xffd&\xf4\xb7^\x94\x84\xe4\xfc\xc5\xc2\x95\xa4\x12j^\xa6\xd8\xa0%\xcf\xeci\xe1\xfa\x03\xdci\xac\x1c\xe0\xd6\x03\xdcw\xcc&y(p\xe7\xb1\xd2u\xc4\x81h\x02?\x83C\xd8R\xd2~\xb98\x17\xd8\xc5\xbb\x02\xe0\n\"l`wg\x06`\xedo/\x13\xe0d\xd5GK;3\xe8\xe7C\x1b\x9d\x0b\xb5\xeb\x82!\xc4\xaf\xf6L\xf0\xe1\x9bC\xd8\x18\xc8L\xbf\xc2\xd3\x89\xe7yo\xb5#pN\x9c1\xac\x85\xdem\xbd\x9b\xae\x1b:\xfa\xeef\x90\xa9Y\xdf\x0d\xd6:o\xa8\xcc\xb5:\xbd7\x98q\xc1\x18\x97\x05\x95\xe2\xb96\xe2\x98\xfbF\x8f\xd0\x7fX\xaa\xab)\xec\xcf~l\xb4R\nX\xceB\xc9+\x1d\x8aK\x91\xcb\x8a=\xaad\xce\x0c\x1e\xee\x1ej+\x0c\xfb\x1a\x13&m\xa9B\xa9K\xc5\x1b\xb6v\xa3\xa0\xda6C4\x11\x01=\xd4\xfc\x12\xe9\x8c\xc1>\xa51\xb4\xa4\xd8\x80K\xb1V\x078\x0bvN\xb4\x9ex\xd0\x10f\x0d\\\x87\x9dh\x0e\xb5\xe8\xeb\x1bU\x1fcpZ\xf17\xad\xe7\xbd\xbb\x1dy\x14o}\xb6\xb1mr\xc93UI\x9e\x91J\xf2\xf4U\x92\xe7F%y\x16*\xc9S]\xad \xeb\xc5qRy\xd4\xcd\xea0\x9c\xe9\xfe\xe7\"\x80\xde\x9d\xd3\xff]?\x19TR\x14\xa1/\xf4)e\xd0\xf4\x03\xc8\xa0;\xe6\xf8\x87\xeb\"\x83\xdaH\x89\xc9@i5\xddAZ5\xcb\x8a\xfe0Yqc+\xda\x16\x18D\xdb\x0d\x15\xd1{\x03\xb0d\xc4{\xe8\x9f\\E\xa4\x18J\x07\xa0\x06S\x9f\x0d$n\xc4yP\x81\xce\xc2K\x8d\x83/\xd2|\xedk\x95\xb6\xc0\xb7#\x7f\xe1|m\x94\xaa\xb654F\xaa\x1a\xc0\xd7\xd2 \x15\x9f\xfec\xc8\xa7\xb1\x1c\x1c|\x03\\\xa8d\xe1vKR\xd6\x0bG\xf7\xb6\xfeE\x94,\xafL\xf2\xc6\xa9\x19C%\x81\xf3\x95\xb8\x02\x11\x9cw\xf1\xa7\xb4\xdc\xb9\x97\x17\xde\xca/\xcc-\xe9\xe7\xeb\x14\x8fe\x18\x83i.)Y<_\xc7\xe8\xfa\xb7\xfa\x0f\xd9\x13vS\x07;m\x0c\xe3\x84\x83\x81\xf1h\xae\xbd\xf3?\xff\x8f\xfe\xcf\xc1\x14\xe2\xce\x0c\x9c1\x1c\x97y\x94,\xddT\xe7M\xdaL\x94T!\xe8Vw\xe6\x9e\x99&\x83K\xaa[\x03\xa7\xdf\xf2II4=\xbc\x9c\xc2\xcb\\\xfa\xeb:(\xbc\xc6Pz\xe2}I <}\x86\xa7k\x91\xe0I\x14Qj\x8d\xc3&\xd3\x13?\x1e\xfa\xd8\x92T\x8f\x7f\xf6%*\xd9\xb4z\x8c\x87\xc0\x15ef\xe2{\xb2\x97\x0d\xc9*\x05S\xd9\xd9yI3W\x92\x1c\xf9\xa2k\x80|}<\x8be:\xd5\x94?\xe8\xe9T#\xfe\xa0\xa7S\xf5\xf9\x83\x9eNu\xc3\x1f\xf4t\xaa\x05\x7f\xd0B\xf2X\x8d\xe4\xf1\xc7G\xf2\xe0\x8a\xb2\x14\xa5*\x05f\xcf\xbbF\xa6\xc0\xcc\x87+0\x95Y\x8a6R\xc5edR\\~\xb2,Ei\xf2:\xbfH7%\xa6\xdfV\x03'\x1c\xf8\x91\x9f\x04$6\x00\xe7\xcc\xab%\xf1\xe71 \xb5\x01\xfe\x86\xba\xdd\xea\xb3\xb1U\xa8<\xbf\x98\xa4\x1buT\xb7\xb6R\xfb|S\x96\xf6Y\xd1\x9dy\x99\x00o\xef\xf4\x94\xfe\x11\xe0\x84\xd8\x147\x97\x1f\xcb\x94\x0fd\x93\x8aa]\x1f\xaa\x9f6\x1dT\xd4\xfc\x1b\x83\xf3:\xbf\x80\xa8\x84tS\x82\xccdfp\xdd\xd4\x17\xf7\xaeX#V\x12\xaak?i\xe1\xe7\x0c\x9e\xf0\x1d\xd0\xa8\x86\xd6\x01o`\xa8\x19\x9c\xe3\xe8\x0c\xf6jc!&\xc8\xa8\x0f\x95\xebYp\xfc\xcb\xa1\xf2\xe5P\xb9\xbe\x87\xca\xfc\"\xf3\x0bC\x91\x16\xe2E\xc5\xf1\x99\xbf\\\x92\xfc\xc0t\x94\xb0\\?\x1a\x12\x86P~\\\xa4\xc7\xab\xf4L{\xe2\x94\xba\xc3\xa0\x19XP\x8f\xd6\x0bVQ\x1c\xe6$A\xa1\x0e\xcb\xfc\x98?bG\xa6\xb7$/\xa24\x99d\xb9\xbf\\\xfb\xca\x13,\x1d\x7f\x88\xe6NO\xd7\xa4(\xfc%\x01\xc5\xfd\xc9\xc4_\xcf\xa3\xe5&\xdd\xa8\x0b~X\xcd\xa5\x12hu\xab\x0e\x0ey\x83\xb4\x18\xca\x14\x18\xc6\xe2\n@]\xea\x06\x13\xc7\xa8>\x94\x99\xdb\n\xd2\x90\xd4\xad\x15\x0c\xf5X\"V? \xa9\xa4a\xf9j\x9a\x91\xc4\xcf\"\xf6\xea\"\"qXP6 IK\x98\x13\xc8rR\x90\xa4\xc4\x8a\xd4+\x02\x85\xbf&\xc0\xf1\x1c\xd2\x1c^d$\xf9\xee\xe5\xd3\xc6\xb8\xeeY\x8e\xdc9\xdedY\x9a\x97$\x14\x0b*z\xe7\xe7d\xc0\xf8\xf8\xd4\xa0\xf0\xf57\xe7\xc0\xdbw\xfeV\xcdR\xb9J\x0b\x02\xe5\xca/a\xed\x97\xc1j\xc0g\xf9\xb4\xcd\xe0\x96\xb7\xef%l\xf6\xdcE\x9a\x039\xf7\xd7YL\xc6\xbb~k\x1f\xbf5\xf2\x1c\x11\xd3BI\xb0\xc5\x16\xd5\xee\xf3\x0f\xb0\xdf\xae\xdf\xf6^GE\x11%\xcb\xcfgs;\xafWt\x87\xa5\xdb($a\xe3u\x08SR`\xad\xdd\"#A\xb4\xb8\x00\x9f\x1eoQg'X\xef$\xbe#\xa3$\x8c\x02\xbf$\xd5\xd7$\x1b\xb9\xdd\x00|\xd9\x83\x97\x11\x10Z5I\xed\x85\x04q\xf2\xcb<\x0e\xc5\xa6\x96=c|\xca\xe7\xc7\xfd_c\xd5\xe5\xe0\xdc\xf4l\x97\x0c\xd48\xae\xfd8\xae0Q \x96\xe5\xf2\x9cm\x12\x9a\xd9u\xb7\x03\x07\x13\xb6\xe3\x7f\xafY\x92v\x8a\xa0\x8f \xc9\x9eE\xc9\xbb\xcf]\xbd\xdd\x18\x87\x0d\xb2pq]\xa9\xde\x96F/1\xe1\xa0$\xe7\xe50$\xf3\x8d\xb8\x93\xa4\xa8\xe1\x96\x88V\xb5N\x05\x1e\x1a<5\xa11\xd9^\x96\x93-I\xca\xc7\xacG\xae\x84\x92*\xf3\x9b\xae\xb0\xa2[\x89\x15\xddn\xb2\xf4N\x0c\xb4\x8b\xd9&=>\xdbT\xe9g\xa9n\x1f\xe3j\xf7\x1d\x89)\xb6\xb9\xb8+F\xacLk\x0b\xa1s=B\xe7\xed\x19\x94O\x86R\x8a\xe6k\x1b\xd9\xb0RJ UU\xc1\xf3u\x9c\x143pVe\x99\xcdn\xde<;;\xf3\xcenyi\xbe\xbcy\xb0\xbf\xbf\x7f\x13_\x93\xbf\xf4\xcf8J\xdeI\xdf\x9c>x\xf0\xe0&\x16 \x94\xbc\xabM\xf0\x93\xa5\x05rc3p\xfcy\x91\xc6\x1be\xf9{^\x05QQ\xbcF\x94?\xdc\xef\xa3\x7f\x17\x99\xd5\xd3J\x16\x85\xc5\xbc^\xac\xe7i,\x9d\xdamD\xce\xbeO\xcfg\xe0\xec\xc3>\x1c\xd0\xff\x93\x0c\x06\x0bNm\x928\x0d\xdeu\xd3\xd3\xe9z\x97\xb1<\xe0\x12\xa4\x9b\x81\xf3|z\xc7\xbb\x0f\xf7\x7f\x98\xde\xfe\xf9\x8ew\xf7\xd1\xf46\x1cx\xf7\xf6o\xc1\xf4\xc0\xbb{\xf7\x0eLa\xba\x0fS\xb8\xe7\xdd\xbau\x1b\xa6p\x97?\xbd\x0bw\xbc\xbb?\xdf]\x1dl'\xde\xfd\xfd\xe9\xa3\xfbp\xcb\xbbw\xe76\xdc\xf7\xee=\xb8\x07\xb7\xe8K\xb7\x82\xa9w\xb0\x7f\x8b\x0e\x07\xf0\xd9\x01\x1cx\xd3\x07\x0f~\xbe\xff\xc3\xed`\xe2\xdd\xb9s\x0b\xf6'S\xf0\xee\xde\xbe;\x99\xc2\x14\x1fM\xef\x05\xfb\xe0\xdd\xb9\xfd\xc0\xbb}p\x9f\xde\xbb\xf5\xc0{p\x87>\xbd\xb5\x7f/\xa60\xf7\xbc[\xf7\xef=\xba\xe3\xdd\xbdw\x00\xd3\xfb\xde\xfd\xbbS\xb8\xeb\xdd\xb9\x03\xd3\x07p\xcf\x9b\xc2\xf4\xc1\xea\x8ew?\xa0\x9f\x80}\x98\xd2\xcfL\xe8W`J\xbf3\xa9>swB\xbf\x13xw\x0enO\xbc\xe9\xdd{\xde\x83;\xb7&\xde\xbd;\xec\x07m\xee\xee\xcf\x0fh\x97\x1eM\xef\xc1}\xdaG\x98\xde\xf5n\xdd9\x80\xfb\xc0&\xec\xdf\x9d\xf9\x1f\x8d>\xf8\xca_\x9bu\xff\x93\xac\xe0\xf3\xe9\x01\xdc\xff\xe1\xfe\xcfw\x10l\x10\n\x7f\x82\xd5\x97\xe4\xb9\xb8\xc4\xe2\xdf\xf6n\xdd\xbe\x0f\xd3\xdb\xde\xfd\xdb\x0f\x82\x89w\xfb\xee\x03\xfa\xff\x93\xa9wp ~\xdd}p\x0f\xf6\x9fQ4\x98z\xf7\xa7\x0f\xe2\xc9\x81w\xf7\xce\x94\n`\x07\xdaW\xf0Q\xe3\x1f\x04\xa0\x98B\x1f\xc7\x07\xde\xbd;\xf7'\xb7\xbc\xe9\x9d \xfd\xf9\x00\x7f\x1e\x04\xb2\x97\xee\x8b\x97\xaa\xdb\x80\xb7\xc5\xcf\xaa\x83\xf7\xbd\xe9\xfd[1vor\xcb\xdb\xbf5\x0dto\x80\xe8z\xf5\x9ca\x1a\xed\x1d\xf6\x89b\xc2\xf4\x0e]k\xf1;P\xbe\xf2)0AY,\xf7\x12\xf8p\xcb;\xb8\x03\xd3\xfdgw\xbd\xe9\xfe\x038\xf0\xee\xdc\x0f&\xde\xc1\xdd\xfb\x13\xef\xe0\x1e\xffqo\x1f\x17\xf7\xc1\xbd\x07\xe2\x81wo\x7f\x8a\xff}p\xf7\x01\xec\xc7\xf7\xbc\xfb\xb7\xe0\x9e\xf7`\xff~@!\xbc\x83{S\xfc\xef\xbd}:[\xf4\xc5x\xd2\x80\x99\x08 \xfa\xe9)\xb6\x83\xdf\x11\xed\xd2\x15\xec4\xfcL\xf4\xf3\xd3\xce\xfa\xa4\x1fyy\x89\xa9\xbf\xe7\xdd\x9e\xde\x07\x9c\xf8\xc0;\xb8w0\x11\x93\xc6~<\xb8\xf7\x00\xf6\x0b\x9c\xcc{\xfbS\x9c\xc8\xbb8\x91\x0f\xf6\xef\x03\x9d\xce\x00\x97@\xcc\x14\xfb\x81/q\xa0I\x05\xd4XQ\xfc\x14N8[\x81~\x93\xb8\xf3\xe9t\xc7\xd8\xc1\xc9=oz{\xfa\x81\xe6\xfd6\x1c\xdcV\xcd;/\xcbqe\xd3\xfd\x00\xeemo\xffp\xc7\xbb\x7f+\xbe\xe5!)\xba\xf3\xe0\xd9}\xb8\x1bO\xee\x02\xfb\xdf\xd4\xbb=\x9d\xd0\x7f\x9eQ(\x98\xde\xfa\xe1`\xfa\xf3\xbdO0t\x16\xf1~e#\xdf\x87\xe9\xfd\xd5\xed\xed\xe4`5\xb9\xbd=\xf8\xf7\xf3[pw{\xb0\x9a\xde\xff\xf9\xee\x0f\xb7\xfe\xbd\xbe\x05\xf7V\xd3\x83\xed\xe4\xe0\x87\xbb\xdb\xff\x8f\xbdw[r\xe4F\x16\x04\xdf\xfb+\x90l\x9d*\xb2x\xc9d\xd6E\x123\xb3\xb2\xd5j\xe9\xb4\xd6T\xdd2\xa9\xfa\xcc\xce\x90\xacj0\x08\x92\xa1\x8c\x9b\x10\x08ff 5\xd6\x0fk\xfb\x03\xbb\x0f;f\xbb/\xfb0k\xf3\xb2f\xfb\x0b\xf3)\xfd%kp\x07\x107D0\x98U\xea\xd3\xe7LS\xb2\xca\x08\x04.\x0e\xc0\xe1\xeep8\xdc\xcf\xeb\x9d\x1d|\x1c\xc5\x84Q\x18D\xfd\xf3O\x07\x13\x9a\xa6\xfe6\xaa\x9f+G\xfd\xe9\xd9Y\xd5\xa6\xd47\x1f\x9e9\xce\x95\xd5\x87\xe9s\xc7\xb9\xb2\xfa\xf0\xb4\xbaCK\xf1\xc3\xf3j\x13\x81\xf3F\xa5\xdd\x9b\xa9\xba\x9e}\xee0u\xdddA\x80\x9f\x9f\xbb\x82\xedxq\x18\xc6QH\xf9\x8d\xce4\xad\x1c\xc5\xba\xd4$\x9ekP\xd5\x0f\xce\x10R\xee\x91+\xf5\x19\xdeX\x04\xd1\xbb\xf5[\x0c\xd7\x95\xd0}\x8b~\xd6_D|\xc3\xe0\xc3|\xa9S\xfc(\xf0#\xf6*^3rEN\xa6\xa5T<\x0d\x85G\x9d\xbeR\"(\x1e\xba\xaa'\x9d\x8aJv\x86\xa7\xa7\xe6\xc5\xb4x\x9f\xc4[N\x93\x9d\xfe\\x/\xa0S\xbd\xf7\x1b\xe7-\xa9^\n\xe6y=rrE\xc4}\xc2\xe2\x0d\xea\x8c\xfa\xa0\xb1\x19\xc1\xc1qOOWoP\xedL\xc4nIV\xe9\x89J\xa3:\xcd\x8b\xb9\xc9\xe6\xd7\xbb\xa6\x92c\x93\x9c\x056-\xad\x8d\xba\xbd\x1e\xef\xc1\xd5\xc9\x8c\xb3~0gK\x03O\xcaD\x1f\xae\x1e\xfe\xfc\xbe\xba\xa4`\x08r\xf3\x11\x95\xb5UY\xc5\xfb\xc5\xa6G\x84\x15*\x1c\x95j\xb2\xa0tR~\xa9Z\xcb\xfa+\xb80\xc9\x06D\xecx|\x0b\xfd\xfe\x8a\xf3\x98\xf7{\xff\x81\xc7\xd1\x96\xfc\x993\x85\xdet\x15\xb0?\xe3\xa1\xa4\x18\x11o\xc7\xbc\x1b\xb8\x9c\x7f\xea\xa1\x13\x8e\xea\xbd0\x8b\x9f\x18\xabF\x8d\x8cM\x1a\x8c\x88\x02[\xab\xe7!\x87V\xe4\xdc\xb0\xfb\xb4_\xfc6\x98lb\xfe\x15\xf5v\xb9-{m\xd5`sy\x99y\xb4\x84i\xc4\xa6\xcd\x1b\xd7Z\xbf\xbe3+\xc4\xd2\xaa\x10\xc6\xa6\x01W\xd4\xef\x8a\xb4\xde\xf93\x8a\xb8\x82\xc1\x87zj\xaa1\xa1\xfcp\x9dj\x06#\x8d\x99\x9e\xae\x18\xf29\xd5\x91\x16\xedU3\x1eK\xd3~4\x18\x91H\xd3\x89&@\xf4\xa1Z\xb7\xde\x01:!\xb6W\xd6\x94~@\x14\x86\xcea=\xe5\xf5\xa4RZG\xe4\x1b\xb3\xbc?\xe2\xb8D\x15\xbax6\xfa\xa0\xa1\xea\x06\xe2\x03\x06\x0c+\xee2l\xe0\xf7+\xe6B\xd1\xa7M\xe1u\x92 ?H\x0dC\xfe\x15\xf9(|\xbd\x81\xa1?u\x1e\x07\xf85%\xa6%\xb1)D\xfeE!\x01\x9c\x8e\xc4\xa6\x97[&~\xcb\x19U\x14<\xb6/\x0ebZ\xec\xb6\xaf$\xa7nS\xe3\xe0\xba\x9b\x98\x93\xbe\xe9e\x0e\xe1Hk\xfc\x03\x16m\xc5n\x04B\xca\xd9\x08D\x92^\xef\x82\xc4\xe3\xf1\xc5\x80P2\xbc\"|\xce\xe6\xfeR1@\xb6T\x8d\xf8\xc3!\xb6\x84]r#\"-\xcea\x1d\xfa\x8f\x0b\xf7x\x9a\x03>\x1c\xfa\xe4\x92\xc4\x17\x03\xd2\xc3\xa5\x80\x8e\xf3m\x17\xc85\xf6\xaa\x80\xa0\x06\x19U\x16s\x0ej`\x9a5\x8c\xc1Q#\xf0\x91\xb0s\xb2\xa3\xa9\x0bC\xd5\xa7,b\xa9G\x13\xf6j\xed\x92=U\x0e\xce\x92\x80z\xec\xabH\xf8\xc2g\xa9K\x12U\xd9\xb0\x9a\xdf\x8b0\xa8\x8b\xa4?\x17\xb4\xfa\x19J\"?e\xb1`o!\xa6\xd5a\xed~\xef2/\xf3rQ\xd8\x88\xbe\x1f\x95\xeb\x03\x95QG\xb2\xd3\xbb<-\xd4\xda#C\x92b\xf6r\xed\x1eR\xc4.5\xb2\xb9Xj9\xeb\x9a\xf4.\x13\xce^^\xaa\xe2P9\xed\xc3g-\x17\xc0u\xe6\xcbS\xf8zy\xaar\x16\x00 3\xd2\xebR\xb02\x0e\x1b\x16y\xae\x85=R2`\xe0\xe2\x0f\xdeH\x91F\x08\x1d;\x17\x8ekjkX\x1b\x8e\xc305\xeb\x93\x80F\xdb\xef8\xdb\xf8wu\xc9)Q\xe4\x9a\x86\xa9K(Q\xdf\xc1\xc9\x0c\xf8\x9f\xd1\x19'i\x12\xf8\xa2\x7f\xbaH\x87\xa7\xdb\xc1@\x87\xf2\x86H\xde\xbc\x1f\xe0\x12\xc6\x1e\xbe\xf5\xb2T\xc4\xe1\x88x\xf3\xb3\xe5\xc0\xfa\xb1p\xe5\x99\xab,\xcb\xca8\xd4\xed\x17U7\x1f\xe3\xd1\xe3U\xef1\x19\x92\x1d\x0c\xbb\xdf\x8f\xfb\x9b\xc1@\x8d\xf8\xe3\xde\xe3R)\xa7)ia\xc6\xd5\xbc\xad\xd5L\xc1\x0c\xf6\xa3\xc9\xce\xdf\xee\x02\x88p\xf4\xe8\x11)\xbcj\xc3\xd5B\xca\x88\xcc\x133\xd90\xeb\x1e\x15}o\x80n)\xfa\xf6\xd3\xa0\x15\x83\x1c\x88\xa1\x87DK\xeb\xd9d\xc7\xe8\xda\x8f\xb6\xb5%\xd8\xbabv\xaa\x0d@\xc7\xdd\xb7l\xcf\x02\xecb\xb95S\xf1\x91k\xd1Yum\xad\xef\xbap\x00c\xda\x1bM\xeev\"\x0c\xfe\x98\xc1\xb1\xed\xe5\x8e\x93\xd3\x97=X\\;\xfe\x12<\n8\x87k\x95\x05\x01\x13o\x03?\x15\xdd T\x168\x08S\xa1\xa2#G#\x0b\x9a\xa7\x13\xea\xf3\x05\x0b\xbbC\x17\xf8\xd5Y\xca+\xa9A\xd6\x0cU\xe0\xd7;\x19s%\xaa\xad\xdd\xc3\xd5&\x98\xaa\xb9v2\xc0\xdee\x1c\xe8e\x03\x95\x93\x97dJ\xae\xc9c\x92\n\xca\x05\xaeP\xf3 \x96&FTu#L \xbc#'!n\x99\x04E\xb5`[\xdf\xa9\xcfE\x06!\x80\x0c\\\x93\x1e\xa2bR\x9d\x99\xbc\xe6N\xe0\x9a\xe1<\xe9\x17jW;\xe659\x07\xe1\xf1%\x05\x1b\x10\x03\x07R*\xce6\x06\x06\x0c\xf3\x15\xbb(\"\x8c\xc1\x11\xcb\x8cV+\xf0C\xba\xed\"\xb2\x9b\x01|LR\xee\x95 M\xb9\xa7\x01\xad\x8fS\xf6\xd0!oX\xbd~\xb85Q\xcf\xfa\x8f \x0d\xf4hc-4P\xf3\x80\xcc\xd5$\xa0]1.\xe1\xc7\xbd\xc7\xeaO\x86\xeb\xbfH\xbf\xc9i\xaf\xb0\xd0+#\x04\x11D\xbb\xd3C\xc8^'\x16X\xcb\x113\xd5T\x8f\xe2\x81G@\xa3\xb27\xd5r\x0c4\x0d\xf5\xac\xe2\xf5\xfd\x11\xd0\xa8\xecM\xb5\x1c\x03MC=\xfc\x08Pxm\x9e\xf9Q p\xd7\xa8v\xa2\xd8\x1d\xb8\x94\xd8i.E\x03\x7f\x1bi\x0eu\xaf\xd6\x8d`wb\x0c\xa93\xa43\x98\xa3\xca\xac\xea\x90\x1d\xd3\xb7]\xad|\x1d\xe5\x1e\xda\xb3\xf5G\xee\xd9qh\xbc\xae\x96O\x05\x8f\x1d\xa2jc\x15\x98\xbf\xa1\x96# q\xd7s\x8c\xe0\xc5BG\xe9# \xa8\x97_\xb3\xa0{\xf3k\x16\xb8\xca\x1f\x01\x80\xa3\x06?J\xbbC\xe0G\xa9\xab\xfc\x11\x108j\x08)\xaf\x0b\x15\x8d5\xa8\xdc\xce\x1a\x8e\x00\xc2UG\x9a\xad\x0e\xad\xb5\x1c#\xb3U\xf3f\x1e>V\xebN\x8e\xa8;i\xab\xbb&`\xee(_\xaf\xb4.\xf1\x90D\xa1\x1b\xa9\xec\xa4Vj'\xb5\x88P\x12\\9\x88l\x1ao\xc4\xd1M@\x81\x94\\whM=\xd6);\xbb\x13\x1d\x07\xad2T\x95\xf1\x11a`N\xcb\xbaTV\xac\xaa^\x93\xa0\xdb\x0f\xae\x87\xaeVu\xae\xd9R\xd3\xe3KU\xe2\xa0\x14\xf7\xf2\xb1\xa3\x99#\x16\x85\xca_SB\xc5\xb1\x88b\xc1\xder\xb69\x04\xad\xe1D\x7f\xc8\xc2\x15\xe3\x08\x9f\xbf&C2\x1dLD\xac\x1d\x938N\x97\x95\x88\xdb\xdbD\x9cm\xc0\x10\xdb\xc9\xc4P\xea\xcdV\xdf\xac\xc9Kr\x06G\xa6\x9c\x0c\xafHof\xf5\x0c\xf0u0\"\x8f\xd5\n2\xea\x1f\x03\xffX\xd5\xfe\xd2\n\xfd\xbf\xdeD\x8fuL\xdf\xc7=\xe2\xaf\xaf\xac\xc4\xff\xb8\xf7rn>\xf5\x96Jxw.:;.\x80Y]wD\xba3eI\xf8\xf1\xe5\x8eW\xc1M\xc7)Kz\xb0N\x14\x1fn\xce\xa22\xc0\xec_\xa6\x0c\x9a\xaeeSY.\xe3\xa0^\\m\xa1\xa1|k\xcf\x8e\xc0\x9f8PM\x9dj@\xeaT\xc4\xd6|\x14\xea\x07>\xcc\x0fNX;j\xe1l\xd6\xa6\xde\x17,\xac-\x0e\x0b\xcc\x11\x1dt\xe9Kl=4\xf2v\xf1\xc1CE\xb3Fr|o\xefR\xd7\xc5\x105-\x06\x92\xe3|\x01\xe3\xabC\xb4\xa2\xde\x0d\xac\x90\xbf\xfe\xaf\xffM\xe1|e\xb0\xd6\xc7\xc8(\x0e\xcd\xd9\xfa\x08\xcd\xdbZ\xd4D\x9c#\xf6^\xeb\x9a\xb0\xb9>N>rC\x7fL\x0d\xc2Q\xc3Q\x02\xf3\xba\xb2\xe9+\x1f\x03\xa5\xe4\x8ad\xc5\xf3\xc3.\xcb\xa8_\xe4\xa4\x84\xf5]\xc4\xa9\x90}8\x8c\xc8\xcb+\"\xf4\xe9\x1a\x19\x93s\xc5\xc7\x15\x9b.+\xcaP\x13\x05\xd6\x07F\x0b\x85/FmU\xd2X\x89\xb9B\xbf\x82\xc6\xea\xac\x9c\xac\x99\xa5iU\x15\xafh\xcf\x8a\xf5\x9c\x97\xda\xd4 Z\xab\x85=Tip\xc5\xb9\xd4\xcf\xf78P\x03ri\x8f\x0f\xa1\xa9\x8a\n\xd5*\xd9\xecya\xaf.\xa7\xe4SS<\xa8\xcd \xf5\x03\x0f\xfa\xea\xc6]1\xb9\"\xf3\xda\x94\xcd{@\xa8{\xe8\xdb\xff\xec\xf9\xc0q\xf03\xef)\xden\xb2\xbcpg\xe1l\xc38\x8b<\x08\x13\x0f\x19?ug\xd4S\xaa3}\xe6\xced\xe9\xa2\xa0~`\xf2~\xde\x0c\xdc\xb9\xce3=k\x82\x0e\x8e-C\x16 \x03\xdft\xea\xce\x9a\x86\x94\x0b8\x06\xb49\xcf\xdd9\x03?\xba\xf17\xf7&\xd7\xd3\xc1\xb2\x94iy\xc4q\xbf\xc3z\xaahd\xc5\xcb\x84\xdc\x1ej+\x92pvA\x18\xb9$\xb1F\xc6\x0b\xc2\x86\xc3A\xa1\n\x8c$\x12\xcf\xd9r~\xb6\x1c\x11x\x98.]\xa6W\xc5\x03vm\xe5Q\"\x10.n\x84Gi.\xf8\x04\x9a\x02D\xe66X\x01\xa2-\x13\xdfg\x01K\xfb\xbd\xde``\xe1\x16\xe4\x92D\x17D(\xf0\xf9\\,\xfb\xac\xd1\x84\xe3\x03n\xc3\x95,A\x1a\xbb\xc6\x8a\x160\xd7\x84i;\x17\x1c\xcb:\xe1SC6\xb3\xd4\xcae\x01\xa9\x830\xb1I\xca=s\x88\xde?]D\xa7[\xbc\xf6:\x11\xdc\x0f]\xe2m\xc0\xf6,p\xde\xdeRm\xa532?\x1b\x91\xa9\x03?\xf3\xbb\xd8\xf32^\x82CWm\xc2h\x0c\x8f\x14X\xa3\xa2\xbd$\x9b\xb0h?\xb2\x1d\xff\xd8\xc6\xafO\xab\xb6\xaa\xdaJ\xe6y\x93\x91\x0c3\xa7\xb6\xbe\x0b\x0b)\x9c\xe6\xa6#\x12\x8c\xe0\x18\xbb~\x04\xfd\xec\x9c\x9c(\x82<\xf1v\x94\x7f\x19\xaf\xd9\x17\xa2\x7f\x96\x9f\x17\x8f\xa7\xf5\"\x9fO\xebE\xa6\xedE\xb4G}f\x1d\xe4\xf7\x96\xb3^{\x11j\x96x\xa1\x8b#2_\x0eF\xa4\x9f\xc1\xd5b:\"S\xe07gDJ\xf2\xfc\xb3:T\x19\xc8}\x8d\xcd\xc0r\x0c\xc8\x15\xa1\x93$N_\xd1\xbb\x11\x8a\x01\x8a\xc1]\x90\x94\\\x92@\xb1\xb0\xe9\x19\xd4L\x01E\x0b\xb5\xa7\x83\x0b\x92\x0e\x87naR\x873\x0c|\x8f\xf5\xcfG$\x1b\x8c4[\x86C}\xf3\x05\x9a\x1a\x91\xd4\xa0\xb9Y\xf4\xe4\x9a\x8c\xa7dF\xfa>l7\xd9\xde\xa7H\x07\xa5\xac\xa7)\xda8\x18\xe9;\xd8\xd0F%\xc7\x1c%Xo 2m\xe3\xc7+\xb2\x19(X\x1c\x14\xb0\x1bq(\xd0=\xf0'\x82Q=p\xa1\xb8\xccF\x0b\xb4\xa4~\xc9\xd8\xd2\xca)\xd2J\x9aKM\xd3\x12M\xac\x954\x0d8\x85*Z=\xde+\x89R\xd4\xca%\x8dR\x92\xaa\xc0J[.a\xcf\xfc\xa0\x03jY\xd3\x82\xc6\xe2\x82\xf0\x82pt\xd2\xef\xab\xf5\xed\xf7\xf9\xa8`R]\xa56\x88\xe3\x83\x8b\x01\x10 \xaeQ'68S\xb7\xd40\xbfb\xc3\xaa\xe4(o\\\xe1Q>\x14 \xde\xa1=c\xde=\x9bx\xc8[\xef/N\xf9\\6W\xcf\xa6U{B\xaa\xd3\xab\x86\xf8h\xed\xff\xec\xfc\xccIA\xd3\x9c\xbc\xd4\xccp\x14t\x9apB\xe4\x80\xf5\x88\xecFd?\"\xe1\x88l\xbb\xd1\xc5\x03\xa4\xf4\x01t1\xa8\xd3\xc5\xd4\xd0E\x0f\xe8b0\"g\xedt\xd1\xeb@\x17\x13rE\x02K\x17\x15\xd1\xf2\x90.n\xc8%\xc6p\xe8?=G\x8a\xb6\x86\xac\x15\xea\xb8Ac\x9c)R\xa4\xf5\xe0\x82lj\xb4\x12\xc8\x80\xaf\x00\xde\x1c\x80f\x0fM(\xc1R\xc7m\x1ca\xfc)\x03\xa4\x82px\xa5(\xc3G\x04\x0fZ\xb6\xf5\xed`\x1c7\xea\x91\"\xc8\xe4\x9a\xf4\xc3:`\x16(%O@\x86^\x0fSw\x83\x02|\x1a<\x07d\x17\x03\x05\x8c\x93\xad\xd8\xd2\x9a)9J[\xde\xb1U\xbc\xacoX\xcdtD\xbcA\x99M\xa4\x93|s2\xdf\"w\xa8\xa6\xb9.\xbe\xe8\xb8\x9c\xa1\xc3\xe4\x0d\xfc?\xecK\xe9\x8a7m>\x1eS\xf1[\x99\n\x10\xccB\x17\xb4\xc7\x8eR\x92\xb6\xa1>\x92\xff\xf8\xc7\xf3\x9f\"g\xf1\x1b8K\xce\x99\xfc\x1agr\xf2\x1f\xffh\xfe\xe3\x1f\xe2?\xe9/\xc4\x7f\xfcv\xfe\xe3\xbb\xf8\x8f\xff7\xe5?\x0fA\xc1F\xfc\x83\x01\x8fpw\x07n>\xec\x0e.\"\x97\x84_\x90H\xed\xe0JX\x01\x08\x16\xcf\xa3\xe5\xc0\xce\xba\x99\x07\xbd\x03\x11f\x00]\xbb\x10\x91{\x8b\xfb\xd7\x1a\x0d\x90\xcaK\xdb\x0c\x18\x80\xfar\xc2{d\xb5\xf4\xa4b\xf8LJ\x0b\xd9\xaa\xd5\x816\xb1\xfc\xa2\x9a\xddx\xd6B}\xb5\xe8\xdfz\xc5c\x17\xa4\x06\x85\xf5\xc7\x8cB\n$t\x85\x8b\xe6F\x1cF2\x0f\xe8\x8a\x05#r2\x053\x1cGUE\xfdV\xb9\xae\xe9\x88$Z\xce\x0e\x14IMM5}`'z\xfb\xcc\x06#r\xb2\xa9^$\xd2\x93\x9d\x0f\x05\x18%\x0e\\\xdd\x04\x04\xa4\x96\xe4\x95K\x8c\x0en\xd6I\xbeaw\x9c\xc348Q\xd1\xdbpo8\xac}\x06/Q\xb9\xb2\x83:\x15\x1an0\xa0']\xe0%\x0e\x98[\xa0%\xfa\nmK\x90\xc3\x96\x0e\x11\xdd)\xdc% *^\x93>lG\xe7\xcbAG8+\xb4\xbf\x19\x12\x81\x0eh\xda\x82\xcdv\x006\xeb\x08V\xa3\x8e\xc6\xfc\xac\xae\xc6eEh~\x06\xa0\x96j\xac\xfa\xa50\x8c\x1f\x0c}\x95U~\x8cQ\x1d\x8f\xbd\x06\xb8\xe0\xe2\x8a\x82\x1eh\x02\xd0&\x886\xab\xd7x\xfei9\xc8\x97]\x91ji\x83\xf5l\x80\xf2\x8c\x9b\xd3\x9b\xdcs[,\x97@\xac\xf6<_$q\xd2\xcf\x03\xbe\xc4\xf9\xbe3\x8b\x04\x9cg]\x17\x13fJ\xac\xe1\xa8%\xe5p\xa3\x87p\xb5\x1c\x1f\xba\xe6\xf0\x98\xee\xe1\xab\x0e\x0e\xd6Z\xc3|\x1b\xccj\x98\x12\xb7\x14\xe2#G-\xf6\xc9\x1ft\xa3\x84\xc4\xd1\xcbC\xb8u\x10q\xea4\xb2\x96\xd2\x0567\x95n\x83\xae\x05\xb2\nT\x1f$W\xd9d\xbb\xbf\xe6\xcd^\xfdruo\x7f>\xee\x0f\x16\xf3\xc5\xf2\xe7\xf7\xc3\xeb'\x93O\x16o\xe4h\xf6\xeb\xcb\x93\xc5b9\x00E\xf0b\xf1\xc9\xb4\xf71\xf6\x10\x0ey\xa5\xb8\xbb\xef\xb0\xb7()\xcf\x1a\xb6\x0dy\xce\xef\xd9\xf6\xab\xbb\x04\xc4]\xb8&\xd4\x7f#\xe7=\x08\xd2\xb8\x88\xfa\x83\xf9\xf2\xf1\xa27\x19\x9d\\\x8f{\xfafO\xaf\x87\xc1\xb7\xb8\xb9\xdb\x83\xa6\x82\xcbA_\x95*_t\xaeC\xd31n\x97\x9d\x804[\xa5\x82\xf7\xa7\x0e\xbc\x1cL\xd2\x98w\x0cN\xaa\xeb+\x9ck\x9a\x13@W\xbd\xa5\xeeI\xec\xdf\xa0\xff\xc9\x03\xc7\xa5g\xe4\xa3\xc2h\xa3\x82\x04_\xfa\xeb\x11\xe9m{j\xe7\xbb\xb1\x92Q\x9e\x17E\x933$\x98\xbb\x92\xc0\x1e\xa3\xc0\xee\xa6+\xd5\xed\xdd\xce\x9c\xd5\xba\xf3\x93\xe2\x86\xb2\xafH>\x14\xb0\xd2{eo\xf9\x12\xe8\xb2\x18\x8f\x9bk#\x06\n\xc1\xee\x84\xdeLP\xbd\xd9\x1b\x1c\xdc\x1b\x9a\x9f\xd5\x80\x9f\x8d@OF\xf3\xdd\xc6f\x12\xd0T|\x13\xad\xd9\x1d~\xf7\xb4\x0c\xb7g\x81\x11\x8d/@|\xdfL\xd8\x1d\xf3\xfa\x19\xe8-\n\xa5^\xa2\xfa\xfc \x95-\xfe4e\x83N5\xd3\xd9\xe2\xcf\x8a%\x99\xde\x98\x06#\x92\xa0>\x8d\x0cI2\x9f.\xf5\xe0v\x08EG\x0e\xf1\x99\xe2\xef=\xb8q>\xbeo\xd6L\xadc\x07\xb5\xb6\xc5\xb1\xde\xb5\xb8\x91\xcc\xcf\x97\x1d\xa2\xe7\x91\xc3\xf2b\xf1\xf7\xd0\xee=d\xeaT\x0f\xba\x15\xf9\xdb\xcc\xce!>_\xfc\x1d\xe0\xf9\xc5\x9f\x82)\x80\x05\x93/\x921I\xe6O\x0d\x8a6\xabR\xcc/-ho\xfa\x01\xb9$Y!\xe1!\xfd}\xc8t\xd9\x95\xf6K,\xa9\x12aT\x04\x0d(\x8d\x91\x98}\xdd\xf4\xd9\x08\\\x1b\xa4#bR\x04\xea\xb4\xdb)\xe6\x07 7&\xd5\x1cZ\x9c.\x86c\xb9\x98,&rq\x8d\xff\xc9\x93\x93\x93\x139\x1a\xc9\xf1\xf8\xb4~\x98q\xba\xe8\xf7=)B\xc9e2X\x0cN\xb7~\xfd`\xa3>w\xde\x8c\xf4\xfe\xfb\x7fsL\x11W\x1f\xfe_\xc7\x87D}\xf8\x7f\x1c\x1fD8#\xbd\xbf\xfe/\xffw\xaf\xf4\xa5\xc1\xda\xa6\x8b4\x95\xcbQ.iIk\xab\x8a\xbe}\x1a\xe4\xa5\xd2\xde\xa8\xc8\nS\xcd\n\xd3&VXc\xc4v\xd3\x94v\xe7\xc7\x19)\x97;\xcc\x96I\x91\xed*,\xcd,\xdb\x85\x95 gQ9/U\xafx\xd0<\xc8Oz\xfa=<\xa3\xb9&\x01\x99\x91\xc0J\xc3\xf1\xa8\xdd\xf6\xac\xfa\xd3\xd2\x97?\x17\x13\x11\x7f\x1b\xdf2\xfe%MY\xbfbtS\xfc\xa9e\xc6'\x82\xa5\xa2O\x07\x16^Z0\xbf\x18\x8eA\xec\xfe\xef\xff_oPH\x9d\xfc|>z\x0f\x1f\xfe\xfa\x97\xffZ\xfc\xd2\x9f_\x9f,\x07\x7f\xfd\xcb\x7f\x85\x8f\x9fL'\x93\xfa\xd7\x9f\x9f\xe9\xb2\x9fL\xd5\x7f\xc5\x0c#[\xef\xa8T\xee\x8d\x9c\xbf\x19/\x07\xe3\xf1\xb8\xaf\x1e\xe4'\x83\xd3m\x085\xfc\xf5/\xff\xfb'\xe7\x95\xbc\x8bt0\x1e\xf7\x17i)\xdb\xffV\xcb6\x7f3^\xa4\xaa\xd2>>\xd5\xb3\x83\xff\x96\\mM?\x8an\xd5\x12\x8d\xf9\xe3\xde\xd2E\x1c }[\xa7\x08\xa7\xf3\xf1\"\xc5\xdd\xd1\xf2\xd4\xb5\xc3\xa2m\x16\x8a'}a\x0e\x02\x01\x7f\x8d`\x0e\xd3~\xe2#\x120\x85\xbc\x85N\xd6\xdb\xc8\x0e\x98^\xdb\xad\x04\xd0em\x10k\x13\x914WF\x91<\x80\xde\xf8\xceM\x9b=\x92\x1d\x91\xfb\x11Y\x8d\xc8\xdb\x11\xb9\xfd0\x82t\xab5\xbf\xab&\xc2\xb4\xd2\xc4`u.\xc5\x9a\xccFaK\xaer\x88a\xe8\xb60tx\xfct;\xdf\xea\x9c\xe4\xf2\x8al\x06\x17d;\x1e\xb7\x9c(\x99_a\x0c\xb6\n\xb9P\xae\xd2\x9b\x14\xd8_\xd9\x15<\xe8,[\xb1\x19v\xe1\x82(\xc1\xca\x03\xc2\x18\x97vAz\xe3\x13\xe3\x86\xc7\x1f\x0c.\xda\x87\xd9\xfc\xc0\xd7\x07\xb9\"'\xb4\xafPX\xefN\xc6d\xaa\x05\xc2\xd4\xeeW\xa6#rO\xaeH\xef1NL\n\xa6\x89\xa0:\xc0\xb2\x01\x1e[']\xe6\xc3\xfcT\xeb{U\xc3zDB\xf57\xe9\x06\xb5\xf9\xc1\xa0\xb4\xcdc_\xcd\x83\x9a\xcaQeJ\xc9f\xa0\xa7\xf4\xa8\x06\x89\x06z7I\xfdh\x1b0\x18\x8a{\xd5R\xa1r\x95\xb69f\x18\x8a\xbf\x1c\xe0{rM\xfao\xe7;\\j\xc5\xe3\xca\xcc\x91<\";\xb46\xc8\x89 Z\xc4\xce\xcf\x97\x15\xb6\x91\xf5\x0b\x02\x80\x9e`G\xb9\xa7K\xd0&\x7f\x0c\x10\xce\x1e\x08\xc2t\xa9X^qI\x1d^+\xae\x9fj\xca\x8f2V \xbe\xd1\xe5WW\x836\xfd\xf6\xe4\x9a\xdc\x1e\xb3\xcf1?\x18\xc5V\x1d\xb4\xeb\x97\xc4\xe9\xcc\x0e\xddQ%\x11ug\xc4\x11\x07\xbb\xed\xa7\xf7J\x9b\xce\x85\xc0j5T\x8b\x03VH\xff0\x02\xf4\xfe\xfa\x97\xff\xe2\x8a\xa0\xea\xfa\xbd',H\xd9G\xad\xfa\xa3\xee\xc1\xc0\xc0\xbc\xea\xf8\x15\xe4\xa9\xdb\xdb[\xf9\x1b\xb9\x98-N\x17\xa7N\xb9\xc9o\xd4L\x9f\xbe\xb9\\\x9c\xd2E\xfa\xe4\xe5\xa9\x91\x90\xda\xc5#Z3^7F\xe8s\x87^CX\x0b.7\x06\xab\xce&\xe82\xaa\xf9\x9c*\xe3\xc1\x8c\x9c4\xc4\xae`!\xf5[>\x8b[_\x08\xc6\x9b+\xd7\xf2\xf2\xd7Q!0g\xd3\xdd\x16\xf3Ko}\xe1\xed\x14\x92l\x99x}\x9f\xb0\xfeA\xa1\xc1\xa3)#\xbd\x8c\x07\xbd\xd9Add\xc7\xacy%\xb2\xccH4\x81\xc8dl\xfd\x9a\xddu\\\xf60\xaa\xd0\x83?\xf1\xc0\x11\xf9\xa6\xfak:w*\xfe\xe0\xc2n{6\x1c\x08\x98\xb5\xbf\xaf\xa1\xe8)\x90D\x0cjF\x18\x96\xafTB\xbf\xb0\xa3z\xa3s\x9c\xfa\xa3\x92[\x9b\xa6\x9f\xe3\x0c\xcc~j\xfcb63Sg\x8ez\xb9\xea\xb4\xe8\xf2\xf5\x11\x0b\xfc\xe8&\x9d\x11V\x1f\x12\x9a\x89X}U\xcb\xa4\x1c\x93\xda\x15L\xea\xd8\x8d\x0co:\x80*\xeee\n;\x80:|jg\x12eA\xab\xe2E\xdf\xc3i\xd8\xe3\x14,\x95\xee]\x96J\xce\xb1\xaemk\xee;\x1e|\x14\xb6+\xa0o\xb9\xffX\xe7\x1f\xb9\xdb\xa0\x1eXD\x822);\xea\x14\x04\xea\xd1\xb7\xd0\xb5\xdc\x9d\xabr\xb6 \x9f[Vw\xfa\xe6\x92\xce_.\xd2\xa5a\x0d\xdb\x01\x1a\x87\xea+\xa3\xbb\xf1xD\xfc~\x9a;\x18P\x89\xc3\xe1@\xc9\xc6\x90\x0bR\n\x9b\xaf\xbc\xad\x18k\xcc\xcbv\x01\x9e\xe8\x0e\xac\xe0\x90Q\xc9\xf9}\x85\x1b\x14.\x13(\xf4F\xa1\x7f5\xc91\xda\xee:l\xaf\xf6\xa5=e\x08\x05\xfb\x81\x82yo\x15\x06F\xbc;L\xf1\x88\x99tOo\xa3\xd7\xd0\x9a\xde\x11np\xc7\xba!\x97\xb6Y4\xbe\xcdM\xdf \xce%\x15\xec[\x05\xc6~\xbeYN2\x1e\xa0\xa6J\xdb%\x1b-\x1a|\xd4;T\xf5Y\xb5\xb4\x1e\x11\xef\x18\x12I\x1e\xa4\x0d'E\x8dx\x90\xab\xa5\x93\x8eJq\x92\x0b{\xebN\x05 \xb2\xc0C;f\x1d\x8c\x1d\xd1;m\xcc\xab\x87\xbf{9}`\xd5f&T\xfd\x99\x81\xe8p.E\xb4\x02\xf3\xa1#\xf1\xd0)\xb6\x98\xd6\xbd\xec\x91\xd3\xfb\xf0>\x15h\xe0\xd1\xd0\x8d\xc7\xdd\xe1\x0b\xd0\x92\x1eP=!\xc3|L\x0c\x91\xe8 \x0e\xa9_P8\xb4zh\x9f\x1f:\x8fG \xf2\xd1\xf3w_9\xbb\xcaJgWY\xf9\xec\xca\x1b\xd9\x834}vu\xb0\x9d\xf6m2\xee\xd5\x0eV\x82\xe7\x1e\xe3\xf1\x05pI\xadM9\xb9\xb2\x14\x9a\xe0\xadmC/\xe0Sf\xac\xd7/\x06\x8a-\xdb6:\xed\xe0\xf6:(\xe2\x88\xf89z\xc4\xfa\xe6+\x1a\xc0\xd9\xe2U\x8ew\xfa\xe4\xa4\xdc\xa1'\xe4\x0b\xcb\xc7&?\xa6\xd5\x8fg\x93\xe9\xf3\xc9\xd3Jj5\xd3\x97qr\xcf\xfd\xedN\xf4\xbd\x019?\x9b>'\xff\xcc\xd96\xe6\xf7\xe4\x7f\xa2^\xbcJ\xc9\xe5\x96\xb3\xedo\xd4?\xe3\x1f!e\xe2\xc5\xe1\xcbj5\xaf\xbeyM\xbe\xf5=\x16\xa5l=!\x85\x18\x86j\xdc\xd28\xe3\x1e\x83X\x86\x01\xe6IOC_\x8c\xf5\xcb$\xd9%\x07\xa0T\x15\xa6\xb3\xd3\xd3\xad/v\xd9JAp\xaa B\x80N\xdbF\xe1\xb4\xf4\x0e[\xd1Q\xd9\x80\xbd\xddF(\x9e\xfcI\xf8\x81q\xb0\xae\x9d\xe2W\xac\xc4\x9c\x02v\x9c_\x94v\x9fe\xc6Q*x\xe6\x89\x98\xcfH\\_\x88\x19\x0fR\xf7\xb6\xb5eG\x9b\xeff\x1d\x1f#v\xfb\x1f\xfch\x1d\xdf\xba?\x97\xb7\xda\xae\xcay\xa6\xd6.\x9b\xe9{3\xf5\x1c\xc5X\xac.'\xd0\"\x0c\xbe\xa3\x14\x9d\xf8\xe9\x97A\x9c\xa2\x13\x9ck\x18\x89WT\xec&!\xbd\xebGj\xaf2R\xd2\xfc\x0cvK#\xa2\x1d\nT\xfd\xd5\x17\x7f\xa0KC0\"\xe1\x8b{\x0b\xc51e\xf1\xeeV\xab.\x86\x98\xcb\x8bfz\xf5N\xf0\x07\xc1[\xdbP?\x0dJ\xd0\xb2OGX,\xcc\xce\x8cnV\xa5\xe9\x04\xb7F|\xb5\\\xef\xddX\x8d\xc0w\xc1mc\x8c\xa8\xb1\xfaU\xbe\xb6\nj\x0bf\x02w@\xa0,\xc8\xf3=\x94\xfb\x17\x1a\xe8\xa8\x03] s\x15\xef\x02#,=\xf74\x14\xc1\xb7j8bb\x19\x95\x93'\x1e\x0d\x02\x13%FS\xe9\xc1(\x8f\x86te\xa3! rM\x04\x99\x91\x13\xbco\n\xbe\\\xec\xe8\xa0V\x08\x8c\xc7\x05\xf1\xa3T\xd0\xc8S\x85\xe2\x89\" \xaf\xe9V\x15.\xfa\x83\x9a\xd9\xd1}m\x89R\x7f0Y\xa9\xa7>+\xfaY\xea2\x88%\xd23k\x16\x05\xcc\xcf\xa8V\x01\x86\x9c\xbc\xb6\x0e'\x83\xcd\xb1\xa3\x94 \xe0TH\x9a\xe4\xd0\x0cF\x8e\xb3\x0cw\x17^\x15i\xf8q}(\x90\xffc:Q(f{QH\x9b\x141\xbf\x99T \xcb\x85\n\xd5c3\xa9\xd5\x1c\x18r\xc2ssV\xcb\x91!\xb3~k\xce^b\xc2P\xa4\x90\xe2&.\x83#f\xe6u\x81q\x1e719\xcb=f^\xf2RvZ\xbe\x80\xdb\x11\x85\xc5\xd2<\x1f\x05\x81\x05j\xb3\xef-\xc3me\x14l_\xbf6\x17(\x88,H\x05\xcd\xfbQ\x83]Jy?\"1p\x99C\x9e\xb3H>n06}\x81j\xaa~U\xc0\x1c\x19t\xd6\xbe\x7f\xe2\xf2\xaa\xfd9\xcfPIS\xb2\xabS\xfa\xa4\xabTp\xea\x89WL\xec\xe2u\x07d\xc0\xa0f=S\xae\xd7\x05\xe1Ph\x9e\x1d\x1e\x04R\x94\xc3\"\xe2G*\x9b\x98\xech\xfa\xc7\xdb\xc8F\xa3\x8fP\x14a\xf3hI\xd0#X\x03\xfb6\xb8\xd8\x05Fv'X\xb4\xee\x08#\x80\x87\xf2\x1f\xcb\xc5\xfbf\xe4\xaan\xe7\xde7\xdc\xcc)m\x15\x1a\x16\x98\x91\x18AW]\x1b\x9b^a;\xd1\x1b\x00\x93*\xa4\x90\x0e\x13L@\xde)\x14\xd2\x81F\x90\x99R\xbe\xcd\xc01V\x83\x843(u\x01\xc2\x03\xb6\xce\x0d-\x81\x07q\x19\xe9$\xcd\x12\xc6a\x01\xe2\x0d\xe95\x0b\x98`\xe5\xae\x8c*;2\x8a\n\x84\xa8\xd3\\\x07\x81\x9f\xa4~:k\xdd\xa2\x17\x7f\xd6\xa4K\xebh^b\x90\x04\x98\x83(\x0b\x02%VD\xe4\x9a\xf4&\x93\x9e\x12~1\xbc\xa21\xf6Rl\x1f\xf4\xfcc\x12Y\xd5\xf1\x90D] \xb6V\xecvDN%\x0f\x7f\xc19\xbd/x\xe8\xd25\x0c\xf2\x8e\x18eq5r\x83\xf9\x15\x96\xa1\xdd\xeb\xb0\xceG\"\xc4\x9c\xbb\xc0\x1aU\xd2\x95m:j\xc5\x87q\xfd8\xcb1 p\xff\xe5\x8bh\xfd%MD\xc6\xd9\x11\x03s\"&\xdb ^\xd1\xc0\x11\x9e\xf1\xcfP\xed\xf7l\xcb\xee\xfeL\xc2,\x15dG\xf7\x8c\x88\x1d#\x8f\xb7\x8f\xc9&\xa0[\x92\xb2Z`F\xf3\xcbG\xac\xb23\xbc \xb8T\xc1@\x8a\x81\xcf\x00}\xb9\xb9\x80\x1f\xf1\x08\"\xe9\xad\xd9\xdd \xdf7Eh\xbf\x82\xe1(\x8c9\x94Jl\xb5\xdf\xb2\x1b\x8az#Pw}\x84\xeb\\\xc6H\xb9Wf\x99!}\xec\xe3m+W\xdc\xdc\xdb\x9d/X\x9aP\x8f\xc1\x08\xce\x08\x04dr\xec\x0f\x8a\xfa\x8e\xc3\xdb\x02\xb7\xde\xc5\x86+\x8d\x18W\xa0\x1a9#O\x90\xb2\x98\xf2\xfa\xd5\xb7\x9d\xf0\xcanw\xbb\x80V\xdc\x96\x08,\x86\xa1UE12\xa5\xf95\nb\x95\xe6\x8eiMJ\xd2\xeb\xc4\x81S&\xbe\x10\xe5\xbdb\x87\xbbkzC\xa3J\xa6\xfd\xc1\x9c-\xf30\xba]\x1a\xdd\xd6\x1b=\xba\xc5.\xed\xe8\xce\xa5]\x1a\xaa*xtK\xad\x0b\xa9\x82\x829\xfeu\x01n[\x07\xae\xcb PU\x06d\xe8\xc2\xebU)\x0c\xae\xf9\xb9G\xe4K\xc5>\xbb\x8cH\xb1U=\x92\xfd\x1e0\xdf^M\xc3I\x1a\xe4\xbb\xf5\xbass\xb9\x9a\x0d\xd5hf\"\xa0\x82\xfe`\x94\xc7^\xac\x10\x14\xd4\xaf\xe9\xb9\xd0\xdc\x0bo\x11D\xe0\xf8\x1d\xefDr\xb5\x13W\x94\x17\xef/\x98\xc4\x0b\x98\xf4l\x92\xee\xfc\x8d\xe8+\x12<&\xb8\xed\xf7QrP\xdc\x9c\"\xc1l\xe2\x88n\x1c\x9d\x189\x85\x16\x03\xcfu\xc5\x0e\xce\xc2x\xcf\xfe\xee\x07\x8f\x16oX\x95FR\x0de\xbbv\x13\\p\xe2 _\xc0\xa8\xc3\xb1\n\x8e\xb7j\xc1c\xfdtD\x1c\xd7m\xc9!\x8d\xd9G\x9d\x89m}\xc9tY1\xb5\xe6;\x93\xe4\x1dM;\xcf\xbb\x15\x8e\xd0\x9a\xa3GzdX\x9d|\xb8(\xdc+\xdc\xa5\x81LL'w\x81(e\xe2\x1b\xc3?\x8f\x80\xaa\xc6\x89\x8f\xe3\x80\xae&\x8fk\xb1\xf3\x90\x1b\x1d\\\x87\x96J:\x8f\xa2\x16\xbcE\xe5`\xb2\x83\xce\x0f\xb0\xe2\x07\xc1\x0f\xf0\x96y\xef\xb2\x87\xd1\x95 \xaa \xf5\xdcb`2\xd2{\xd9\xcb\xa3\xf8\xda\x91R+\xbdwy\x8a\x05{/{\xcb\xa3T\xc7%\xf0:\x0c\x05\x8a\xcd\x96\x0bYA\xbe\x1a\xc5\xcb\xfc\xaaC\xa7\xd7G\xfb\xc0\xcd\x97\x87\x84j\xe2G\x84\x0d\x08sk\x03\x84\x16\x98\xc9\x90<\xc6\x08\x0b\xb0\xf5\xc0\xa8`\xed\xf4<\xa7\x16\xf5\xd1+\xa5\xbcW\xa2xMou\x84\x88\xfcQD\xdf\xceS\xdc\xa5\x89\xa2\xd6\xc9\xc8\xfcm\xbe?\x8c\xb4\xda\xa3-f\x06\x14\xe5\x1d\x98\x7f<\x0d@\x14`\x85\xd3+T\xb5\xe3X\xfe\x9e\xb3M\x7f\xd0\x82 ~N\"\xa0R\xedoZ\xcf\x04\xbb\x13\xfdBm\xa8\xb7oROt\x19\xbd\x02\xcc\x1d\x05f\xb3On\x1e9bm\x87Dc\x1e\x07(\xe6g\xf9:\xc2\xf6e\x8a\xbcC\xed&\xdb\xe6\x95\x1b\x13u\xa3K1\x1b'\xabA\xd5\x190\xb6!\xb9\"\xbd\xb7\xab\x80F7\xbd\xae\xaa\x942<]P\xae$\x81[-k\xfb\x12\x85\x93\x9a\xa1\xa5\x8dC\xd2\x1b#s\x9bu\xa4\xfc5\x8c\xe9\x02\xa9Uek`\xd7\xf1k\xadF\xae*f\x89\xbb\xd5\xbc\xc0\x11\xcd\x19b\xa2uT\xf6X\xce\xa8\xb0\x15\xbb\xc3@\x1e\x93\xef\xfe\xf8\xc37\xaf\xbf\xf9\x97\xaf\xde~\xf3\x87\xaf\xbf\xf9\xc37\xaf\xffc7\n\xe6<\xd69\x82\x8c\xa9\xf2z\x8f\x0f\x1a\xfe\xd3\xfe\xf5\xac7\x7f\xd3[>\xb9\xee\xc9\xc7\xf37\x8f\x97O\xae\x1f\xcb\xf9\x9b\xc7\xbd\xab\xcb\x97\x7f^\xa4\xcb\xe1\xe0\x14\x19\xdc\xe9\xfc\xcd\"]\x9c\xf5\x1e\xbf\\\x9c^-\xee\xce\xa6\xe3\xc5\xdd\xf4\xeb\xc5\xdd\xa7_/\x87\xa7\x134\x0fQ\xb3\xdb\xbf\x9e-\x16\xe9\x93+\xf5O\x0foM\xdao\x83\xeb\xde\xa8\xe8\xcbd\xaer+Vy\xd9?\xf9\xdd\x1f\xbf|\xfd\x1f\xbf\xfbj\xa0^u\xeab\x91\x0e\xf3W1\"= \xeeQ\n\x15\xaa\xcf\x83'\x86\xdb\xe2\xbb,Tq\xd9?\x85F{\xe0o\xe6t~6\xfe\x9c\x8e\xdf}1\xfeO\xcb\xfcq\xb6|rZ\xad\xb3\x0c\x81\xb0\xad\xa8^\x9d^\x17\xda\xcb\xf9\xf7\x88\xf4\xb6~\xcfE\x0b\xd5\xa0\x7f\xb9\xa3\x9cz\x82q\x13Q\xddhZ\xfa\x8f\xa2U\x9a\\\xc8G\xbf\x9e\xbe8\xbb\x90\x8f\x02\xa1\x9e\xe1q\x8b\x8f\xe7\x17\xf2\xd1OY\x0c/O\x9f\xc1\xbf\x9f_\xd4\xaf\xdb\xab\x1f\x989tA\xd8\xd2n\xa4\xb0\xf7\xb0\xf8Q\xb2\x8c\x98//PUzb|]\x82\xf2g\xfe\xf4@nE\x10ON\xc4A7\x1bAE\x93\x1b\x8f\x88\xd0\x9a\xbaf\xab\x81\xc0\xaa\x87\x91c\xa91Ut\xe7\x8bh\x0d\x93w\xff\x87x\xcdR0'\xf6At\xd1Zv\x7fD\xa2\x81M\xec\x17h\xfeWh\xa4\xa1\xca\xf5\xb5\x8f\x81\x81\xd6\x0d\n\xab\x1b\xa4M>\x86H\xe3fJ\x89wq!@\xc9\xa1\xa9\xf0\xaa\xc3\xd12\n^\xb7Q\xf0\xdc\xa3pD'4\xed\xf4\xbbP\xe5\x06(\x8e\xc3x\xad\xdf\x8dr\xb2Y\xd1I[\xba\xdd\xbcp\xf5~]\xaf\x8f\xc8*\xd79Z\x0eA\xd0\xb1\xf3C\xd3\x01{\xf89\xef\xb02\xa29\x07/\xb2\xcd\xd3E\x0b\x92t\x01\xf3\xd4X!\xda)\x84\xcb\xdc\x99\xf2\x91\xecg\x0f\x99\xba\xbaX\xd4(m\x14V\xc2\xd1'85\xc3\x86\xe2\xb2j\x11|Adh9\xe1\xb3\x92q\xc5\xe1Ds \x0f\xad\xa8\xaa!\x83\xcc\xef\x18Q5\x1f\xfb.H\xdc8\x12\xf9\x0c\x1e\x1c\x88\x0f\x06\xd9\xe0\xd4\x87\x00l\xf1\xf2\xe3\x81\xfb\xabr\x06\x87\xb4\xa4\x1a^\x9e\x8e\xb4S\xb0I\xffz\xe6G\x82\xf1\x08\xbc\xf4\xd1@Z\xf2\xe7\xc7\x91z\x01\x92\x14\xf3T2\x95-\xe1~\xcaR\x99\xecb\x81^i\xeee\xc2\xe35fO\xe5&\xce\xa25\xd4$\xfd0\x8cW~\xe0\xb3H\xfa\xd1:S}`\xa9\x0ciD\xb7\xb0VU\xb9\x84q%tI\xc1\xbc]\x14\x07\xf1\xf6^z;\xee\xa7\"\xa4\xa9\xf4\xe20\xcc\"_\xdc\xcb\xb5\xcf\x99\x82\xe1^\xb2u\xe6a\xf5\xec\xa7\xccO\xa0\x1e?J\x85/2\xc1dH\xf9\x0d\x13~\xb4\x95i\x1cd\x08\xd1\x9eb\x81T\xae(\xdfR_=\xc4\x99\xf0\x7f\xca\x98\\\xa1\xa20\x95j\xfb\xaedf\xe9\x05\x8cF\xf8\x10\x8b\x1d<\xc4a\x92 \xc6\xe5\x9a\x85\xb1\xc7\xa9\x90k\x9f\x86q\xb4N%\xf4\xdf\xf7R\xb9\x8b\x83\xb5\x1fmS\x19\xf8\xdb\x1d\xb4\x9fP.\"Us\x12d\xe1\n \xca\x92$\x80\xber\xeaC\x13{\x16)y4\x95\xd4\xa3k\x16\xdeK\x8fr\x06\xd0\xc4aB\xa3{\xe9\xf1\x0c\x06{\x1d\x87\x007\xbbK\xe2\x94\xad\xe5\x06\x9aI\xe5&\x88\xd5X\xc9-\x0d\x02\xc6\xef\xe56\xf3\x05\xe5\x00\x8e\xbf\xa6\xf7\xf2\xc6WX\x11\xc9\x88e\xa9\xa0\\\xc67~Do\xa9\xe4\xcc\xf3\x13\x96J\xce\"A\x03\xf5w\xef\xb3\xdbT\xa6;\xff&\xddQ\x89\xce R\x009\xe6B\xa6\xf7\xa9`a*\xe9\x96E\xde\xbd\\1\x1e\xf8\x91\xf4h\xc88\x95\x1e\xa0\x85\xf4\xe2\xcd\x861\x85/\xeb8\x95\n\x05\xa2\xadd\xa9\xa0\x82I\xa6z\n\xe03.\xe4&\x13\xab8\x9074\xdb\xb0H\x06\xd9]\xc6\xefeH\xfd4\x8ed\x18G4\xdd\xc90KY\x16\xca\x88n\xe3{\x8a\xb8\xa6\xa0L\xa8\xcf\xd5\x1f\x80)\xf6|\x1a\xe0\xa8\xdeKA\x85\x88c)|\x16\xad\xa9\x1a\xe1=\x0b\xe4\xde\xa7?\xb2T\xee\xfd \xa0\xeaO\xaa\xd0f\x1f\x03d\xfb\xf8\x9en\x99\x04\xccF4P\xa3\xbfN\xa5\xb7c4\x91\x9e\xdaw\xc85\x8d<&a\xd1\xcam@S5\xb2Y\xaa\xd0,\xda\xc62\xf2\xa3\x1f)L\xb4^\x0e2\xdd\xc5j\xd4\xe2\x80r)b5\x03\"\xbe\xb9\x8f\xa5\x88\xe3 \x95\xb7j\x8d\xca\xdb\x98\xdf\xa4\x922\x1eK\xca\x13*i\xeaS\xb9b\xa9\x90+\xff\x86\xc9U\x00h\xf9\xee\x9d\x1a\xdeDzA\xb6\x92^\x1c\xabU\x19'rCy(7~\xba\x93[\x7f#\xe46\xe3\x99\xf4\xa3M,\x7f\x8cW\xa9\xbc\xf1o}y\xc3\xd9Z\x064Z\xcb\xc0\x0fc\x19\xf8\xd1\x8d\x0cY\x94I\xb5\x18e\x18\xaf\xa9\x8ch\xc8d\xa2\xf06Q_\x938\x15\xf2\xa7$\x8e$\xf7\xbd\x9d\xe4\xd9\x8e\xcb\x94\xdd\xddK\xe1'\xa9\x1a/\xa6\xfe\x89\xe5-\x8d\xb6\xf2V-\xe7[\xff\xc6\x97\xef\xe2\x88\xa9%%W\xfeZ\xae|\x05\xf0J\xad#\xe9\xb1Xa\xb0Z\xaar\x1b\xef\xa5\x1f y\xe3\x872\xf4\x03\x191!\xe3(\x901\xdf\xaa\xe5/\x93l%\x15\xc0\x82\x052\x8bby\xcb\xd6\xf2\xee\xeeN\xde\xdd\xbf\x93\xd4\x93t-)\x93t#\xe9VR_\xd2@\xd2P\xd2H\xd2X\xd2\x9f$\xe5\x92\xa6\x92\nI3Io%\xbd\x93\xf4\x9d\\Q\xb9Z\xc9\xd5Z\xae\x98\\m\xe4j+W;\xb9\xf2\xe5\xeaG\xb9\n\xe5*\x92\xabX\xae\xb8\\\xa5r%\xe4j/W\xb7ru/W\n|\xe9y\xd2[Ko#\xbd\xad\xf4v\xd2\xf3\xa5w#\xbd@z\xa1\xf4\x14)\x94\x1e\x97^&\xbd\xbd\xf4n\xa5w'\xbd{\xe9\xbd\x93k&\xd7?\xca\xf5\x8d\\\x87r\x1d\xcb\xf5;\xc9<\xc9\x98d[\xc9\xb8d\xa9dB\xb2Ln|\xb9\xf9Qnn\xe4&\x94\x9bXn\xb8\xdcR\xb9]\xc9\xedZn\x99\xdcn\xe4v+\xb7jb\xe56\x90\xdbPn#\xb9M\xe4\xf6'\xb9\xe5r\x9b\xca\xad\x9an\xb9\xbd\x95\xdb{\xb9\xbb\x91\xbbP\xee\"\xb9\xe3r'\xe4.\x93\xfeZ\xfaL\xfa\x81\xf4C\xe9G\xd2\x8f\xa5\xff\x93\xf4\xb9\xf4S\xe9\x0b\xf9#\x93?\x86\xf2\xc7X\xfe\x98\xc8\x1b&o\xb6\xf2f'o|y\x13\xca\x9bH\xde$\xf2\x86\xcb\x9b[ys/o\xde\xc9\x80\xca`%\x03O\x06\xbe\x0cnd\xc0e\x90\xca@\xc8 \x93\xc1^\x06j\xa9\xca\xd0\x93\xe1Z\x86L\x86[\x19\xeedx#\xc3@\x86\xa1\x0c\xd5\n\x96a\"\xc3\x9fd\xc8e\x98\xcaP\xc80\x93\xe1^\x86\xb72\xbc\x93\xe1\xbd\x0c\xdf\xc9\x88\xca\xc8\x93\x11\x93\xd1FF[\x19\xf92\nd\x14\xcb(\x91\x11\x97Q&\xa3w2\x0eeBe\xc2d\xb2\x91\xc9V&;\x99\xdc\xc8$\x90I(\x93H&\\&\xa9L\x84Lner/\x7fR4M\xf2X\xf2T\xf2L\xf2[\x99R\x99\xaed\xea\xc9t-S&\xd3\xadLw2\xf5e\xfa\xa3Lod\x1a\xc84\x94i$\xd3X\xa6\\\xa6B\xa6\x99L\xf72\xbd\x93\xe9\xbdL\xdfI\xe1I\xb1\x96b#\xc5V\x8a\x9d\x14?Jq#E E(E$E,E\"\x05\x97BH\xb1\x97\xe2V\x8aw2\xa32\xdb\xca\xecFf\xa9\xcc\xeee\xf6N\xee\xa9\xdc{r\xcf\xe4~+\xf7\xbe\xdcGr\x9f\xc9\xdb\x8d\xbcM\xe5=\x93\xf7B\xbe\xa3\xf2](\xdf\xdd\x0e\x16\xab\xd3\xaa\xe6\xb47\"\xe8\xffoq\xbb\x1c\xfc\xa6\xbf\xb8\xfdy:\x9a>\x7f?0\xba\xcc\xb2:\x14r_\xcf\xe6\x8b\xf1\xc5\xec\xd1\xd5b\xb8\xf8d\xb4\xb8]L\x96\xc3\xdf\x14\nD\xf6\x897Ub4\xa3\xb6B\x94\x19\x96\xf3\xf1dh\xc5\x87\xe5p\xd6\xbf>i\xfa\xb48]\x9c\x0e\xfa\xd7'\x8b\xf5pqz=\xe8_c\xca\xb5\x13\x90\xbaJ\xb7?\xb9>E\xa5\xaej\xff\xf6\xf6v19\xbadsG\xad\xf6\x17\xd4\xc5\x8b\xb1\x05|\xf8\xe87\xbf^\x9c\xfe\xd3\xd5\x7f~\xdb\x1f\xc8\xc7\x9f\x80@Tg\xe1O\xbc\x0du\xc8\x11\xb3@\x8c\x0f\xaf\x03y\x12=\x1a\x7f\xe2\x81&-''Y\xb7\"\xdf\xb3\x80\n\x7f\xcfl\xb9\xcd\x81S\xc8\xa3/\xfa\x117\x99$\x87NX\x9a\x87\xd0\xd2\xf7\x19I\x9a\xa1\xb54\x7fF\x1cZc\xf3\x0b\xb1\xdf\x0d\xc1~\xba\x10\xf7vj\xd4E\x08\x81\xdb\xe4\x03\xe3bX!\xf9\x17\xa2_\"W\x87\xf8\xb4\x00$\xc6\x95r\xba\xe8\x9fn\x0f\xdc\xb7\x8fJ\xf9\x07\xa7\xdb\x03<\x1b\xb9\x80\x0d\x0e#%9\x1b\x90K\xd2\x07\xf2\x14\x95\x92-!?9\xeb8\xa6$\x9fs\x87w8\x976\xf2UU0\xeb\xaa\x84\xf4#pK\xd5(X\xce\x17\xb7\xcb\x06\xc1rG\xd3\xaf\xb3 \xc8\x8b\x9a\"-\x12\xbf\xa3\x9a\x8c\xfb?x;\x16\xb2\x83\x15\xb8a\xf8\x0f1_\x7f\xa90d#\x18\xaf\x023\x9b\xbfY\xa4\xcb'\xd7\xa6JG\x15E\xe6\xdb]\x1e5\xd3S\x94\x06tM\x7f2\x1dR\xec\xca\xdcb\xc94!\xfa]\xcc\xd2?\xc4\xe2\xf7to)\xf6\x1f\xf9\xefb\xa1\xad\xd3Z\xb2\x7f!\xbee4\x15\x7f\x8c\x98\xe9q\xa5\x8c\x9f~S\x9b\xcc\x9c\x92\xf5]\xe7\xf1\xce\x13\x89r'\xba,\xd7\xea\x82\xd3](\xce\xeb`~\xb6,\x1f\xac\xb6J\xf1\xbd\x1f\xe9\x9e\xa6\x1e\xf7\x131Cg=0\xce\xbd\xfd\xaa\x9c\xd8\xa5G\x87\x86\xbe\xa3\x89\xa0\x9d\xf1\x13\x86\x8e\xe7\xd5\xfa\x07\xfb\x00\xc7:@\x9fw89c\x13A\xdb\x1avO\\\xded\xbbA^\xc7\x82\x87\x81\x7f\x827&NL\x0f\x9aWQ\xcdW\xac\xf99\x91\xa7\x0d\x05\xbb\xa0\x92\x01\xf3\x84\xd9\xf1m#Q\xcd\xc09\x88$\n#P\xf8\x08\n\xf9Q\xf6\xcf]\x06\xef\x01\xc7\xbc\xaf\x8abS\xd7C\xae\xc2\xbe\x18Jv\x84-7\xf5=\x06\xc2\xa2\xc1\xa6\xb3T\xe3<\xc1\x8e\xc3q\xf6W\x98\xc5\x8fs\xe6\x87\x1ej;\x8e\xc2W\xb8\x7f\xe9Zy\xbe\x1f\xecX\x7fq\x94\xbb6R\xf4g\xfb\xc0\x06\x1f\x80A\x0d\x8d4\xce\xa7\xde\x8a\xfd-fT\xef\xd5\xba\xce\xe9\xeb\xf2\xd6\xaek3E\x0d\x00\x96\xed\xd8\xde\x83\xe6\xd88N\xd3\x0d\x82\xe74;\xe1\x0f\x87\xe2\xb8\x89\xef\xfd\xa6k\x93\x8dh\xf0'\xfe\x80E\x9d\xf1\x00\xf7S\xb9\xc2\x13\xc6\xc3(\x8d\xfb\xa8\x00\xbe>uY\xc3VX\x91\xad\xa2A\x1e5\xf9\xbf\xe3,a\xd1\x9a\xad?\x96\xedI\xc6;S\x99?\xf1.4\xa6tO'\xe3\x0dJ\xa2\"\xb6:\xf7\xb8V\x80\xacn\x9ak\x1f\xec\x90\x94}\xc3d0\xa5=\xed+\x10\xcc\xbdGM\x05!\xf4}G\xaf \x0f\\*\xd0\xb2qv\x9e\xfb\xf4~D\xc3\xe4\x02\xe21=\xeav\xcd\xea\xd85R\xbd6\x05\xed?tN\x8c\xbe\xae\xa8P(\xe7\xc3\x05\xd1\x07\xe7XU\xb5\x83\xa3\xf8\x9f\xcc\x12\xc2\x12\xf6#^`}\xcd\xa9\x1f\xf8\xd1\xf6\x87\x80B\xcc\xf6.\xe3S\xae\xb6\x8bl\xe4V\xd1\x97\x17\xb7\xdb\xe1zS\xf3\xeeAy8,Nb\xd1\x19$\xc7X\x1e\x01J\xef\xb4M\xe1Q\xd4\xe0\x1a\x87\xab\xe3i'/F\x8a\xfa\xda\x94\xf7#\xedh\x11c$\xf16?\xa5\x1a\xb0x\x92\xfb\xe5\x84\xbb\xc0\xf9`\xbc7\xbeeFd\xbe\xc4(>\xfd\xa2\xdbx\x1d\x8a\xeaC\xa3a\x1b\x8c\xc8<\x0fa\xde\x1b\x91\x1e\x04\xa4\x86\xf02\xea-\xf0S\xd1s\x85(\x9d\x973Bm\x9f\x7f@m;\xaek9?\xfb\x80Z\xe0\x93\xaeg\xdaZ\x8f\xbb\xbc \xcbm\xea8\xaf\xd4\xd1\x00;\xa3k?\xda\x9aBO\x1f\xd0pP\xa9\xe3\x99{\xf6v\"\x0c\xa0.\x93\xef\xf9\x03\xda\x12t\x15\xd8\x1e~\xda\xa9\x87k\xb6)\x0em\x15m\xdc\x85\x8aPA\xb1\xcf+\x81\x0d\x97\xee\x98x\xd5\x05\x8a\x14<\x0b\xacW\xb6\x8a\xcb){\xdd\x81\xa1\x1b\x1bF.\x89o\xaf)\xb0\xe1pP\xa8BG\x92\x9f\xb3%\xc4\xe7\x82\x87\xe9\xd2%\x8e\xd1@\xcc\x08\xe6<\x87\xf3\x85\xf9r\xa0\xa9\xd2\xa0BzrJa\x9fh\xc1\xad\x11\x04\x82\xf0\xdf\xb1\xaa\x835\x87\xe6\xcd\xf6E{\xfb-\x00\xbee\xe2\xfb,`)\x1e\xa3\xa3\xa3\x04\xec$\xbaH\x10\xe8\x10\xe1dzA(\xb9\xd4GHl\x12\xf8\x91j\x98\"Q\xbd\xf1\x93\xaf\xc2D\xdc\x7f\xebG,\xedS\x08m@\xc9\xcb+\x12\xa1\x17\xfe\x93>\x9b\x88\x1fv\xfeF\xcc\xe9\x12\xae\xdb\xac\x82\x9bo\xa25\x8b\x84\xfb\xfa\x13\x00\xccq\xe0\xe1F\x08\xd4\x12\xcf\xf9Ru\x91\xc2\xf1\xe6\xc9tpA\xf8p\xe8\x90\x130\xea\x85\xf0\xb7;\xa1`\xcfF\x84M\xfc\x14@4\xb0[\xbe\x90\x19\xb9\xaa\x8f\x9dQ_\x07\xa6\xa7y1\xda\xa86W\x8da%#2\x1c\xdaAB\xaa\xa1\xb9RB9\x8b@\xe8\xad\xd7\xda\x12\x0e&\x1f\xe7\xda\xe7\n\x9f\xcaq\xa5\xcc\x0420S]D\x0bQ\x8b%\x99\x82q*W\x1f\xb3\xb3\xb3\xcf\x9e/\xe5|\x91\x9d?;\x7f\xb6\xc8\xce\xcf\xce?\xd3\x89\xd5R\x01\x94\xca\xce\xce\xe8\xd9i!,X\x111\xe1\x8e\x91\x03+G\x84W\xc7P\x81\xe8#\xa2\xb9<)\x03\x02\x94\x92\xe1>>\xb3\xc7\x02\xd5\x9b\xf3\xc0\xe55\xab7\xc2I0\x02'\x10\xb98\x9b\x8eHo\x11\xa9\x14\xabU\\\x88\xde \x8f^W.\x9f\x15\x18p\x93Z\x1b\xd6V}\x0e5\x94\xd3\xb3\x82p\xf2e\xbcf_\x88~4 \xd7:,,F\xf9\xf3t<\x14\x08\xfe\xa6P\xbf\xa7j\xe8i\xda\x00\xee\x85)\x19\x13o@\xfe\x89<3\xc7\xb5\x90\x08\xc5y\x95z\xe8\xd5\x8c>\x15\x99\xf1\x07k\xe6\xc1\xdc\xab\xd54\xa4\xef\x8f\x14q\xf3#f\xfe\xbe\xa2w\x05\x024*\x05\xb4Al\x1fz\x1epZ\x86U?@e\x18kM\x9a\xeb\xae\xae\x96\xab\xdf\x8a\x00\x9c\x0dj\xa8X\xac;\xdf7\xfd\xaa\x0e\x08/\xbaUD\x1e\xd6\x1a<\xa0\xb8Y\xc7\xfa\xe7li\xd5`(\x11\xb0\xa5\xa2\xbc\x85.\x14=\x9f\xbd\x1f\x95\xda,K\x1a\xadM\xd7]\xda\xeb\xfe\xa2(\x87g\x8f\xfdC\x90]V\x00\x1b\xa0\xe8w\xe1\xea%k\x83\xfa\x87\x84zGC\x9cr/\x978\x0d\xd0z\x15\xd9\x0c\x85%\xc8\x1e\x0c\xde\x97;\xca\xd3C\xaezKn1\x9d\x00F\xf6\xe4\xa9\x06\x19\x02\xfdA\xf0\xfd\x96z5w\xc2\x0e\x86\x0c\xd2\x1f\xb9\x04\x97\xf8\xa6n\x07\xdfP\x10\xbf$\x91#b/Z\xaa\x9d4\x0c\xf2x\xccr\xbb\x04\xa6\x96\xedq\xdd\xd92Q\xc7\xdeV \xa9j\x19\xa98]],b\xb0\x8c\x1a=\x14\xa9,\x81\x82\xb6\xe2\x92\xd4/\xaf\xffy\xa0V\x01F5\xf0\xf1\x10\xce,\x87`9\x02\xb7\xad\x8acpr]Z\x19Pjj\x1c\xc1\xdb\xc4Q>\x82(\xc7\xa8~\x0c\x1c\x93\x91iQ\x05|\xb7\xf6\x05\x19\x83\xe1\xac\xf6 \x1a(\xd4\xbf \x81\xa2\xbc\xf1p8\x80\x88ne\xc8\x06j*Ax\x03&?\x18\x01\x07;\xb3)gZ\x1c\xaa\xf54\xc5\xfe\xe0\xc8\xa8\x15&e\xf7\xcee\xf3xY\\\n\x8d}\xd4c\x9d\xd5}UUD+\xb4\x8d;J\xb42\xa9\xee\x90\x83\xee%b\xf6\x82\x0e,2c*\x96j\x12\n\"\xcd%y\x96\x9b\xe3L\x1ds\x18\x03^\\\x81\x8f\x9a)\xee\xdb\x9aVW\xbe\x03\xe2j-\xb9x~\x8b\xdd\x1fl\x02rHy\x15\xd2\x97W\xe4Y\xfb\xc6J\x81:\x1c\x1er\x06k\xf5\x9cZ\x86\xe3\xa3<\xf6{C\x8c*\x1d\x8b\nUf\xb5\xaf6\xe6TN\x05\xd4\x96\"\x1e\x91g\xe0\xe8\xc5va\x04[\xd2ZyP\xc2\xb8\xaf'*\x10\xd3\x19\x99\x8b\x91\x86\xd7\xa1<\xd1\xe1\xab\x18\xca\x8c\xa5\xcf\xef\x95\xf0\x96\x8bI\xef\x7f\x194\xecN\xdf\\\xc7F\xe8|C/^\xb1\x84\x11\xb3\xc8Z\xcf\xbe\x81\xec\xccd\xaf\xa3\xbaG\x86\xe4)yI6\x8dh\xadrM\xcf_\xa0\xd7\x96\x18u\x1def\xe0\xa1\x82\xe3s\xcc\x13\xb7\xd6\x04\x92\xf7\x08%\xe7\xbeg5'\xc0\xda\xfa\x9e\xda\x03\x0d\xc8\x98\xa4\x03rI\x9e\xb6V\xa45\x159\xc5\x01C\xf9\x89\xe0~\xd8/\xeej\xff\xac7\xb5\xad\x95\xf1\x82\x8d]\x03a\x16\x17\xe4\xa4?\x1cf\xa8\xd1A\xc1 :\x90\x16g$+\xcdH\xb6\x04\x9b\xbe\xd2$\xa84P\x7f\xd8<5]P\x03\xb5\xa8\x8d:0\xb1\xb8\xa2[\xca\\\x84\x00\x04\xf8\xe6\xd1\x06\xe5R9\x0b\x8aj0\xb5\x10\xb0\xbe\x81\n\x01\x9a\x9e\xb9\xe9\x0b\x90\x9en\xd4\xc5\x87vs<\xce\xc9MF\x86\x8ae_\x03\xeb\x81\x93\xbfn\xc4\x07\x94\xf1\x0e\xea\x93PN\xc3tFhG\xc2\x84\x8a\x85\x0c\x16\xa7\x93\x1c\xfd{\xa29\xf5\xb0\xbb\xc7Q\x9b\xf0\x10\xb5\xd9\x93\x97$l]\x89/\xce\xb5\xb1[\x05\xdb\xf7\xc3\xe1\xa0\xb5\xa0\x1e\\\x85\xeey\xac\xdf\x90\xde\xfd\x81\xa5\xc2\x8f\xb6\x1f\xb2\xfc\xf5f\xa3\x0e\x13\xac\xe4\xbd\x92\xc84\x11\xc8Y\x17\xab\xeaA \xeaaa,\x01\xc9\xf3\x91\xbd\"{\x14\xce X\xed\x9e\\\x92\x10\xc2\x11\x15\xd6\xe2~@fd\x0f\xd4,D\x81m^\x98\x0d\xa8/\x17[T\x1d\xe3b\x0b#\xcd\x0bP-TS|\x17\x8e6\x8cO)\x94`b\xb3\xa39\xe9\xf7K\xe8\x10\x97\xd0!^\x02`\xfd\x12\n\xc4\xcb\xc1\x00\x03\xa09IZ\xfb\\7\x8b=~\xabXc\x03+\x9fLGpW\xe7\x0c\xaf\xa6l\xec&-!\x97d}A\x92C\xb1\x0b6\xf3d\xa9/eE\xb0\xfa\xdbt6\x04\xaeA4SC\xf3sSE\xf3k\xf6\xd0\xb5k\xedtf\\\xfd\xdb\xc9Q{\x14\x93\x98\xcf\xd1\xa88c\xa0A{\xfa\xf4\xd3:\x8dF\xc1\xb3\x03\xde;\xdb-\xa2\xc8\xf1x}\x18\xe8\x12f\xc7K\xc7\x8a\x0dH\xf9\xc0aT>~\xb8\xaa\x9c{v\xe4)y\x99\xa6\xa0\xc1\x9a\x19@\x84g1\".wue^P \xed\xfb~0\xca\x97\xa8\xd5K#\x11\x8f\xbb3\xbf\x02\xa0M\xf1om\x9c\xdb&\xa6T\x190\xc5\x1b\xe6\xd3\xa5=\x1d\xd2K\x0b\x17\x13\xcd\x97\x16F\xac\xd6s\x93\x90!\x01Z\x94\xcd\x93\"}\xb2\xe9t\x9e,\xdd\x8a\x83\x12\xf9L\xff.xd\x99\x17:\x0cJ\x0eq\xbf~F\x86%9Gm\xd8\xd3V\xce\xf4\xec\xbcE\xee\xce\x80N>zD\x9e=G\xc9\x1b\xa4\xf0\xe7\x07\xa4pX jEN/HF.I\xea<|\xac\x88\xd8\xb5Vm{O\x11B\xda\xd8\x1e\x01\xbfrVT\xf5\xab(\xef\x9a\xfe\x93\xbe\x8f\x1b\x80G\x8fH\xff\xe4\x84k\xbb\x10-\x13j\xa1\xac\xe3b\xd8\xf1\xe6\x85\xfaaR\xdb\xa0z:}\x14N\xda\xe4\xcai\x90\x0b \xf5\xf9\x90s\xa9\xf4y\x9b\x90\x86\\9.\xa3\xe6\x80\\\x93\xb1\x12\xa8\x0dzE\xae\x89\xe6\x15\xf4\x02)\xe0\xd9S\xfd\xack\xe0\xe4\xb2\x84\x07\xf5Zlc\xbc0Z\xf5\xce\xc7\xad\x9d?N\x0e\x8d\x0f\xadD\xf0\x83\xa8F&_&c\xd7\x1e\xb3e\\.\xc9\xb3\xcf\x14ZF\xe4%y\xfeic5\xa8em\\b\xbc\x1d\x08b\x15=m\xa0\xa8\x1d\xdegj\x0e\"ry\xa5\x80i\x13\x9e\x9e\xa1\xee3R\xb0?{a\xa2\xa6\xb6\x88\x16\x16\xb4\xda\xd7\xa6\xe3\xf7B\xa9\x07\xa2\x87yj\xa7\xd7\xb534p\x87\xd9\xb2\x9b\x19)\x01c;\"\xf7#\xb2\x1a\x91\xb7#r;\"_\x8d\xc8\xdd\x88\xfc0\"_\x8e\xc8\xcd\x88|\xe1\x10\xe1\x00\x15\x94\x08\xa9q\xd4(\x14\xb6\x8e\xbc\x0d\x1a;=\x89\xaa\x12^\xaa\xa4\x95lB\x03\xd3\x96Q\xfe\xd0\x8dO\xe8B\xaa\xb5\xbe\xcf\xed\xb7\xef\x8aV\xb8gG\x12l\xace\xb6\xe4\x1a\xef\x017\xafV\xd8T\xa2\xffj\xad\xd4\xd07\xca\xd5<\x911I\xf0~fg\xfa\x1e\xf35\xe3l\xfd6\xf0S\xd1$\x97A\x9e\x19\xd972\x82\xdb\x87KlJz\xed\x08\xea*\x0b\x02&Z!\xfdpx\xac\xc9\xd2[\xbd\x07\xbak\xdb\xf7\x81\x81\xce\xe0\x82\x9c\xf4O\xfa`\xb6\x836\x98\xb0\x81\xea\xdfW\xd5AkD[K[\xe9Rkf\xee\xc9\x98\xac\x958\xf3\x0cX\xb6*\xadPhG.\xc9\xb4\x94\xa2\xa4\xa8uQ~\xa7\n?v\x9dg\x1b\xc6\xce\x17,<0\x80_}\xc8\x00\x06\xd5\xdd<\xea\xc5\xc0H\xc1\xec\xf5\x0b\x08\xbdq\xec6\x8a;\xf1\xfb\xeaN\xbc,\xdd\x82e\x965\x808\xab\xefU\xb4}`\xd3\xc6\x00\xf7\xa6y%j\xaf\xfe\x16f\x11\x88\x99\x1a\xf5\xb7Vn'c\"\xc8K\x9c\x14\xa7=X\x15\xba\xa0\xda\x9b\xb4\x08\xaeW\x83v\xf3\x80\xa9|\xf0&\x050\xbd\xb0'\xf9\n\xb7(tD\xee+\xd2:\xd1\xa6xj\\\x8a\xa6g\xf8~\xbc]\xde\x8d^\\?\xa0\x82\xe1KrE\xee\xec.\xe8\x07rI\xbe\xbc ?4)\x18\x14\xe9\xbd\x9b\xffP\xb4\xe3kW.\xdc\x1cP,4+\x15\xea\n\x05\xd5\xf8M#\xc7W_\xb7m\xf2C\xce\x08)HAg\x83&Eo\xeev#\xe7{\xe52\xee\xe6C\xb7\xa4\xb0\xd6\xf7\xf6\xeb\xad5\x1cXuAB\xc5\xaf\xca\x1c\x04q\x91T\xa8\xf5\x831\xf4\xd6bdn\xc7\xa8\xa4\x8cG\x8f\xda\xcd\x0cHY\xf2G\x1c\x07>?$\xe7\xf5q\x03\x9c\x8c\xf4\xde\xe8\xdc\x08\xcc%\xe6L\xc6\xe4\xbc\x14\xb7\xd3f\x98GKcAevi\xb9\x851\xd2Y\xad\x08\xca\xf3\x0bm\xc6\xd9\xcf\x13U\xcb\xcb\n!+\x14(\xa4G\xe8\xd8\xbc1k\x97\x82\xa1\x7fO\x9b\x8bv$\x08\x99\xb6g\x1b\x92sT+\xf43\xb3\x0b\xf4\x14\x17x\xfe\x99{\x08\x87\xc3lPVDd\xc3\xa1\xc2m\x16\xed'\xe6VCjn\xae\x94\xd2 \\c-\xeb\x84\xb3\x8d3?~\xd0\x85R+\x9a\xe3\xf1f\x80\x0b;S\xcb\xb8\xa1\xcey\x0f\xae\xf0\xa6Km\x1a\xd9\x8d\x04\xda\x9b\x19o9\xdb0\xce\"\xafY\xbdIW\x8a\xda9\xe2\xe1\x1f\x14\xa9\xe2*?\xae\x1d\xf9\xd1\x03RTI\x10\xcd\x06d\x8c\x82S\xf1\x08%+\x0b/\xc3+\xf2\xac.M\x15.\xa2\x14\x1b(1~C\xd9\xec\xd7\xe1U\xedx\xc7\xb6;.}k\xd1\xe0\xe6\x82Z \"Z\x86z\xac\xa1.\xf6\xdd\xaf\xf64\xfe\x90\xd9}03SR\xca\x07\xe9\xbcL\xea\x07Q\xe7\xe3\xe8\xf2A\xad,\x9c\xe8\xb7ka\x9f>o\xd3\xc2\xe2\xb5\xb5\x03\xd5\xe4ZW\xb3\x16\x1cd\xe6\x82<}\x9e\xf3`P\xce\x82\xca\x94\\^\x91\x17\x17\x03\xe2\x83\xf1Wci\x17\xd5;\xe9\xfb\xe4%y\x81\x10\xea\xfa\xb4.&.S\xb5\xd4\xae1kg\xd8OG\xe4\xa9\":\xf9\xcd\x90\xfa\xf7\xe7\xea\xbb\xda\xfae$7\xcc\xac\x01H\xf3\xcb&`=?(\x08DG\xeas\xf1:W\x13\x8d\xda}\x8bX\xec\xb8\xc9\xfd\x11\x94\xbev\x0c;\x02\xebG\xaa\x9dv+\xa8\x9c\xc6CH\x1fm\xc2r\x084\x18\xb3\x07u\xd1\xdb\xf9\xc1\x1a\x1ci\xcd\x97\xb5\x0ev\xec\x97\x99\x84&R\xd26\x0b\xbf\xacZ\xdd\xa4>\xc4\x12pd\xee\xe1\x88F\x8bV{\xa7K\xcb\x10\xcd{GG\x86\x8aa\x8e=\xe0\xe8\xf7K\xec\x91\x96\x88\x1a\xd5:|\xbfH\xc8\xe8R\xcb$\xfdg\xcf\xf3\x8b\xb8\xb5U\x17#mz\x81:_\x8eE\xe2\xf2B\xee\xc7x\x17\xc6BQ`\xb31l\xd7\xfcb\xb9F\xb5^\xe1>\xdc/\xb0\x9cM\x17\xb4\xbe\xe9\xfca\xa8\x7f\x00\xf7:\x82|\xdc\xa2\x06V\x9d\x1f\xbd|\xdc\xe5\xad\xa8\xea\xbf\xf2\x12\xef03\x87W\xfc\xe0# \x16\x85;\xdfg\xe7\xd5\xbb\xdd\n\x81O\xdf\\\xf6\xe7:x\x9fvu=_\xa4\x8b\xd3\x97U\xd7n>f^\x9c:\xb2\xbf\\\x9ev#4#B]\xb4&?\xa0\xa8H\xc5\xb5\xa1\xab\xd8o\xd63$e1\xba.\xbbxJvMF\xe4$\xdf\xdc\xedD\x18\xb4\xca;\x89\xa2M\x8apx\xb0[zyu\xc0<\xf4\xc5\x99{\xeb\xe4\xb5\xef<\x9f\xe2\xa6\xae\x9f\xb9H\x97\xa7w\xae\x8a|a\xbe\xaci_Y8{._rz\xdfv\x1c\xf3\xecS\x00\x1a\xa4\x96\x93\x96\x1b)\xe6g.\xa5<='\xb2z\xf5\xc0\xfc4\x18`t\xf9\xf9\xa7\xaaf\xa1d\xb7\xe9\xf9y-\xfb\xfb.\xdb\xdeg\x9f6\xf7\x9c\xd8c\xa5\xeaV\x11-a\xd1\x95\x9e?(\xb6R\x87\"W\xd2\xb5\xd7\x13\x0f\x0eC{\x82h\xc0\xe7\xe9|Zq\xd6\xb7o\x0b\xd5m\xfcm\xc6\xa1U\xb5\xb3e\x1c\x9fx\xa8\xfe\xee\xa6\xf0\xef9\xfc\xfb\x14\xfe}\x06\xff>\x87\x7f_\xc0\xbf\x8c\xae\xb1\xd4\xce\xc2\x03\x1e2z\xfe\x86\xd3P\xbb\xc1P\xff\x86\x14>\xc6\xe0\xd9\x0f\x9e\x00\xd28\x13I\x06\xef\xf09A`\x12\x1eo9K\xa1\xf3\xe8b\x12\x9e\x98g\xe0N\xc5=\x8e\xa6\xf1\x11\xd1\x13f\xd8\x04tY\xb0;A9\xa3\xf0\xbc\xc1\x0b\xaf=\x01~'\x04\xc7gF!g\x06p\xec\xfd5\x8b{\xcb\xc9&\xe6_Qo\xd7o\xb9\x808g\xcb\xf2\x0dP\xad\x95\xfa\x90\x1b76\xb9\x8b\xf9\x8aCr\xcc\x95)\xb5u\xc0\xdb\xb6\xecv\xf9\x16N\x8e\xc1BdL\"\x97\xb7\x88v\xf6\xdc\xf5\xcau\xd1\x8a\xa0\xce\xc8\x04\xb2\xc9\xc2];\x17\xbb\x0bJ[]\xe4\xd8Am\xd7\xd0RA\xbf\xa4\xfa\x08J\x12x\xb0,\x9f\xcc\x06\xcd\x14\xd7\x87\x0b\x1d\xa80\xd6\xbb\n\x87J#\xb7\xfb\x81\x1b\xbfZ;\xea\xb7\xd6J\xady\x030\xef\x1199}3\x1f\xcf$Y\x0e?9EW\x9b\xb4]$\x80\x1b\x08\x14C\xa9\xf6{\xb2\xa7\xf6\x1f\x10\x03\xb5M\xad\x92\xe8\xeb\xe7)Z$\xa6\xe4\x92\xe472[no\x9f\xc0\xb9\x947O\x97\xe6\xdaH\x1b\x9fE\xff\x05\xa0\xb8M\xe1\xd1+\xb9W2\xd7\xb2[\x05\x83\x83\xde\x98\x89\x01\xed\xf4\xcd\xecz<\x9c]\x9bq[\xb7\xb3\xdf\xe7\x9f\x01H\xeb\xd2\x81Y \xbek\x92 {se=S\xdf{\x18b\x0b\xce\xbe\xb8\xbf\xdd\x89\xde\x80\xcc\x9c5\x9f\x15\xaa\xeb\x05l\x839MB\xaf\xed\x06\xb7\xea\xdc\x18w\x0c\x05tq\xdc\xdb\x81\xb9o\xc1\x14D\x14\xeb\x9d\xed\xcdB\xca\x85\xfc\x04\xfc\xb3\xf5\x06\x05\x04\x1a\x91\xc4\x8c\xc3Ia\xd2Z\xeb\x8e\xdb-_:\x8a\x0b@\xe8\x0f\x98)\xec>\xc4L\xa1+\x1c\x8ao\x1c\x80C\xc1\x00\x8b\xf6\x97\x84\x83\xff\x92@4/\xfe\xae\xe0\xed\x9a\xc0\xa3\x81\xbf\x8df$\x99\xa7.\xc0>\x02\xec\x1d!<\xacw(\xd0\xb2\x8f\x00\xe9/\xa3W\x10\xbb\x87\x1e@|\xc0R\xe4\x0fm\xf3\x88n\xa9U\xf6\x8b\xb7\xa2d\xc6\x03\xcbh\x0f4\x05\x8f\x0b\x1fDW\x8c\xa0r\x8e\xdb+}\xfb\xa7Efy\xf4\xc88)\xcfiz\xe0\xa6\xe9p\x83\xbd\xd1\xaa\xa6;Q?4^\xa4\x0b\xdd!\x87F\x83|0q!\x058\x1a\x8909DdHW@7F\xa0\xc9\xc3\xf3+Q\x0f\xc4\x15\x95\\e\xe2p\xabrD\x9a\xf2\xc0{Y\x8a\xa8$\x91Y1\xc5j7\x8f\x19\x97F\xb2F\x8a\xa4\xad!\x8a\xca!\x8aE\xda\xa8\x16\xe9\xb8\xf8Hi\x12\x9b\xd689\xb4\xce\x89\x83\x8a\x11\xd8\xa2to\xbe\x99\x90\x91n\xcd\x97W{\xe9\xcdn\xad\x8e E\xbf8\xc1\x03!\xea\xc1\xad\xec\xd0\xfcj\x8f\x7f\x82QI\xed\xf3a\xea\x13\x9b\xdce\x03\\\xb0\xe2\xea|r\xedw\xd8\x06\xc7j\xd3\xe7\x1b\x13z{M\xdf}\x18d\xees\xe8\xbd\x1c7\xc5b\x14\xc7#\xd7\xe9\x8f\xce\x12\x95\xda\x89*\xe3F~\x91}\xb6\xb5\xd6o\x15\xd0\xfb,\xf7\x08\x06\x96\x85\x8f\x1e\xd9\x89x\xe9t\x9d\xb7)\xee\xc3\x8d\xaep\x03\x05\x87\xc3\xcd\xc1m\xbc\x9d\xb3\xcdQ{w\xdf0\xc6\x8d1\x81lm\x03\xd0\xf9h\x9b,m\xa7\\4\xfb\xeb\xbc\xd2\xd6\xc1\x01\xb9\"\xf8\x90\xbdJ\x866\xe9J<\xa8\xf8\xafc\xb3\xb6K2\xf0\xe9^\xdb\x0dn\xb5\xd1\xed\xa1\x1e\x91B\xaf\x1a-\xedIA$\xceF$\xfb\x10\xb6{\x04@\xdd\xb8]A\x03\xac`3\xd8Z\xf4\x8d2m>J$\x1d\x8f\x13I\xb7!\xf8\x98\xfcs\xddlKK\x0e\x11t\x82\xfc\xd3\x89'$_\x9d\x07A!\x05pZe2\x92\x8f\x8f\"k\xf3\x8d\x1b\xf9m\xd6C\xa8B\xf4x\xe1\xb5\x1b}\x9d`\x0d/\x86\x86\x8d\xf4\x89^a\xa6\xf7\xc5#>\xba\x1c\x81\xd2\xa0j)W4\xd9gE\x1f\x89E\xfb\x03\xd8\x12\x14\x13\x14M/\xdd\xc5\x18\x91\xf6\xab\x08\xb9\xb7b\xa7\x91\x1bu\xdfF\xd8\x82\x81\xd1\xbd\xb9\x8d\xb0\x05\xb0\xf4\xf15=x\x1b\xa1\x08\xee\xbe\x08`X\x83oW\x1d\x8adT\x1e\x8du7d%%\x0ciCX\xd2\x05i\x89\xd9F\xa0\x18\xb2\xb1\xfdW\x02\xfb\xcb\xfc\x02^\xd3\xb1\xe2\x01\xb6s\xb0\xac\x83\xf9\xb4\\\xf8\x03\x1a]_x\xb5\x14\xe4\xa5/\xdb\xee\x0f\xfa\xda-\xf0\xa6\xc8j\xb3f\xb7T\xa5\x8e\xd6<\xe3\xb4\x95\x82\x8d'\xd0\xc9\xc1a\x90J\x17@\x1e=\"t8\xcc/\x88t\x01\xadn\xec\xd3\x06\x9a\xef\xbe\xfdP\xca\xfc!\x92\xf8:x\xb8\x80\x1ch\x94,H\xc6\x9b\x11\xb9\xff\xc7\xfd\x04\xe7\xfd\x04\xef\xa3\x1d\xba6\x8a\xcb-\xdb\x87\xe2\xfd\x04\xb7\x91\x9a\x0f\x1e\xb6.\x8d,\xaf\x8f\xc5\x07\x95s\xf1\xd4\x11=\xceZ\xf37\xde\x14\xcc}\xce\x0fP\x13\x12\xd5\xaaE\x9dH#\x19*\xe8\x90R\x971\\\xdb\x0d(\xeb\\O\xc9\x7f>^\xba\x82%o\xd51>\xb9$\xf4\x82\xf8m^]\x88\xa1Is\x1f._\xa5]._\x99_\xdc\xc1\xbb\x0b9\xe8\xe1\x858i\xa9\xf9\xe9\xcdM\xd7\xfb\\\x9aN\xe0j*\xda\x0c\xa4\xcd\xd2b\xbe\xd0\xd3\x11\xe1f\xf1\x15\x97\xca\x01rSYzu\xa2\x03K\xc9\x1d\xf5\xa8\x8b\x19DY\x8c\xaaQ\xac\x8eP\x1eV\x96\xf3CMw\xb4\xc1\xfb\x85\xec\xef\xf2an\"\xeem\xe3\xdc6\x86\x1f\x8d\x88\x1d\x8e\xb0r\xfe\xf4\xb9#\xc0J\xd4?\xff\xb4\x92L\x1b\xe2\xae\x08vgbc<\x9d\xba#wD\xec\x16\xa7\x1as\x9d\xbbs\xb1\xd4\xa3\x89\xcd\xf4\xd4\x9diE\xbd\x1b\xe1{7&\x8a\xcb\xd3\x86`!k\x16\x98\x1c\xcf\xdd9\xfc\xc8\xd6\xf1\xc2\x9d#\xa4\xdc\xc4\x1ay\xda\x10Q\x86\x85\xc9\x8e\xa6\xbe\xad\xe93w\xb64[\x99\x1c\x9f7\xe5Ht\x8egg\xee\x1c\x81\x1f\xd9^?k\x18h{\x95\xc4\xac-\xcc\xdd0\xe0\xc5\x8b'&k\xc3\xb0S\x1d\x1e\xc8dk \xd1\"\xa8 \xe4\xf2\xaca\\Y$|qo2}\xd6%0J\xf6Q\x02\xa3\xe4^\x90\x9c\x81Q\xa8 \x8cB10JE\x11\x0c\xd9\xf7\x18\x81\x99}\xebG7\x8a@\x17\x16i\x1d\xea\xb4n\xe9\xb3\xb7\x81t\x91\xd8\xb7E\xcc\xd5\xbc\xc3\x1c\xc6\xabb\xbe9z\xf9J\x8d\xa1\xafXI\xf1\xf8f\xd63\xf1hU\x89\xb9\x0d\xa6\xdb\x1b\x15\xe3\xed\xf6\xc0H\x0bM\x9c\xd6T\xd0\xde\xd2\xd6 \xcc\x11\xce\xac7\x98\x9f-]\xe6:Y\xc5\xe7\xf5kE*[=\x86C\x9fG\xc6KLa\xd4KQ]j\x88\x02\x8ez\x8d\x8e\xac\xf6\x15u\xafI\x9c:4y([y\xd4\xdb\xb1\x7ff\xa2\xef\xc3\xe5\x97\xb3\x01\xe6W\xe8R\xd1o\xb9MP1l\x03b\x8f \x97$\xbe \xa2Mx\xe2s\x01\"\xcbI\xc1g\x08\x04\xe2\xd2\xa0\xfc\xa0@\x19!\x10\xce3\x86$N\xf1\xdeb={)w>\x17\xefG\xa5\xe90\x1b\xfd\x8e\xfe\xdb\x0fNIy\n\xf2!G\xf7\xf40\x98\x97\xc4o\xd6\nF8x\x91q1s\x02\xc3\xc9\xe7\x11\x8e\xd3t0\xc0}\x84{W\xd6\x18\xe8\x187z\xaa\xf5\x97`\xef\xd4z\xbb\x9dM\x12\x16\xad\xfdh\x8b7\x04S\xee\xcd\xf5H/\x1b\x06\x95\xe0d\xe8R\xa0\xf7P\xe4\xe1;L\xe8\x0f\x9aF\xff\xd8\x802\xcdaO\x1ct\xc7\xeap\xfcF\xa7\xdc\xd9\xaf\xc8\xb1bB\x9dd\xf1:\xc2\xa4\xb7\xbe\xf0v\xc4mw\xed\xd1\x94\x91\xe9\xd9\xcc\xfd\xe1\xf3\xf3\xa6\x0f/\x1a>m\x1a\xad\xa7\x9f65\xdf4(\xd3\xf3\xc6\x91o\x82\xebE\xd38>w\x8c\n)\x98\xd29vbk\xb6\xa1Y \xda\xcb5\xf9S\xeap\x94\xd5H\xec\"\xcb.\x80\x1c\x192\x06T\x89\xd7]7G\x83\xc1\xc5@\xd1&'G\x8e\xf4e\nE\x82\xd4\xb6L\xe8\xbb\xe2UJ\xa3\xad\xf4!\xa3Z\x87\x83Q\xce\x82\xca\xf6\xe2\x1f \xe2w\x1e\x8b\xaa2\xc8\xc9;\xa7\x0d\x17E\xe2v[?=\xbc\xd8\xff\x82\xf1\x81\xd1#\xe1h\x8f\xc8\x89p;\x9a\x85\xd3\xcb\xb3\xd2\xf5TSYyV\x9c\x88ck\x98\x1e\xacA\xbb(9\xa0\xc6\xb0\xf4\x19U^>\x9eS\x12\x7f<>\xac\xb9\xb0~\xd4\x1c\xcd\xfb\x9d\xd4\x189\"\x15\xab\xc9\xedE\xce\x14+\x1e\x92iC\xe8\xd9\xe2\xefC4\x1d\xec\x90\xfe\x9d\xe4[\xe1\x1d\xe5kh\xabE O\xdaw\xbd\xc5\xdf{\xf70\xd7Xzi|\n1SG\x87\x81\xd7\x80\xa7\xf1F\x1c\x02\xbc\x03\xd0N\xa3\x11\x0d\xeb\xc1\x13\xb7C0\x1ch\xdfiv\x17\x0f\x87\xe8\x19\x9a\x93\x96;\xdf\xb1\xa2rq\xe3\xfd\x1b$U\xf1\xc7RF\xd8\xa5\xc5\xb59\xb8\x0e\x9c\xa2\xc0<\x7f\xfe\x02\xfdP\x13\xbd\x19;+\xf4\xaa\xb7X\x9c,z\xbf\xfe\xe4\x9f\x1e=\xee\x0f\x9e\x0cG\x93\xd3\xd9\xc5\xe5\xd5\xcb\xeb\xdf\xcc\x97o\xde\xfe\xf9g\xf9\xfe?\x8f{f\xe3\xd2\x1bt\xbboQ6\xb4Z\x92\xabb$\xa9\xca\xe5\x8b.d\xd5\xd2\xd4\x96\xad\x8a\x92\x9bk\xa4\xf3\xf3\x06\xbf\x8b\x07(\xeep\x18\xe3\xc5\xdf:j\xf9\x8d\x8e1\xf1\xb6\xf0\xf9\xf3\x17\n)\xcc]\xb0(\xbf\x88\xd0\xc4\xc8\x8c\x8fg\x85\x10\xc3+r>r2w\xcd?\xb4\xc3J7\xca\xebM\x15\xf8\xf4\xea\xb6B\xbb\x90\x96N+\x14\xa2\xf2 \xb6\xf9\xc7/\n\xf3k]\x1c\xb6\xb1_5\xbf5\x0fuo\xb1\xe8\x99aV\x1b\xc1\x8f\xb3\xea\x8eE\xe4\xd29F\xb3\xa0\xa0c\x89\x1c\xe3*\xc8\xee \xb3\x11\x01\x0f=\xbc\xb4\xa1\xcc\x0c\xb5\xfa\xfcE\x93+\xa1\x8b\x81*\xe8\"w\xa4,rE\xe8\x12\xc3\xd7\xc1_\xb3\x0b\xb0\x84\xac\xdc\xa7)D \x81\x93\xbf\xe6\x8d,\x85sx\xb8\xceH\x0fAIU=\xd4\x85>>\\\xc0\x19+\xa8\xae\xf2\x00\xb6\xe5\xc5\xd7\x85_4\x84\xed!\xa4\xd9i\x85_\x08\x93?'\x8bh9\x04\x93]\xd2k7Q1\x91|\x9a,S\x0e1\xa6\\\xde\xa5\xb5u\xd2uU\xc4E\xca\x93G\xfd\xfd;Z\x1cJ\xb2\xadu>m\x91\xb1\xcf\x1b\xd6N\xdaN\xf2\xdb\xed\xd7R\xf4^\x06w\x91[\xb257\xfe\xcb9\"\xf3u \xce\x94\xbc$g\x18\\\xa0\xda6\xd8.\xcf\xc0)\x96\xd3\xa7\xb9\x82\xee|0\x02\x03\xca\xab\x83\xd7\xdcL\xaef\x9f\xe7~\xee\xed\x8c*\x9c\xd3|\xab\xb9\x00\xd0\x01\xaeC`\x9ec\xdc0\xb8\x99n\xda\xaa\x81\xcc\x15!\xa8\x05\x0d\xf3\xd1\xa74T\x93\xc7O\xb2\x08\xce\xc9\x98\xa4\xa3FF\xacWt:\"\x1c\x0f\x89\x1c@\x9a%\x97\xe2A~\x8c\x8e\xe4u\x0b\x10>.k\xf4v\xdd\xd8\x19TC\xb6\xf6\xd7\xb6\x80\xceH\x9c\xf7\x161\x0f\xda\x0dY[Xj\x96\n\\\xd2T\xc3\xea@\x11\x9b\x01\xd1\xc4\x82b\xef?\x9a\x8d\x17\xbc\xd8P\xa8\xd7$\x1e\x8f\xc9\xcc:\xc1/|\x84\xe7\x18\x1d6]\x82\xa7\xe7&\xa1%\xfa\xc0\x18J\x04wSxjou\xe6}\xd6\xc1\xd4;\"\xd7zF1\x06\xaa\xd6%T\xe6\xd8\xa2K\xbb\x15\nk6 m3\x8c{\xef\xf6\x98\xd6\xb6\xcb*\xb4\xf8@\xc3\x97\x02\xef\xb0\xdd\xd7\xd6qv02P\xa2\x90Y\x01\xe7A\xad\xfco\x963h\xdf\xfd\xff*\x8c\xa1\xb1\xed\x7f\x13|\xe1\xd9\xd3\x0elAg\xfa[p\x85g\x0d\xee0\xdb\x98\xc2\xc9\x95\xae\xe7\xef\x8e-4\xf5&\xe7\n\xad9\x8e`\n\x1a\x0b\x1f\xce\x13t\x05\xff` \x9dX\x82\x1f\xa5\x7fc\x96\xa0Z\xfc\x07K\xa8\xfcZX\xc2\x8b\x06w\xc3\x7f\x0b\x96\xd0\xd8\xf6\xbf \x96\xa0\xdd\x9e\xb5\xb3\x04\x9d\xe9o\xc1\x12tS\xffNXBSor\x96\xd0\x9a\xe3\x08\x96\xf0b\xfa\x81,AW\xf0\x0f\x96\xd0\x89%\x84\x94\xdf\xfc\x8dy\x024\xf9o\x8c)\xd8\xe46\xd3 \xb3f\x89\x0d\x00\xc50\x00\x14\xa8\xfaT\xea\x8b\xe76\xf5\xf33\x9b\x8a\x9e\xe9X\xd53\xdd\xd1Q\xb9\n\xfeR\xeb\x03\x9b\xa1-}-=mH\x0fZY\x98\xe7Z\xc6\xc2u4\x85\x97\x0c\x1a\xc8\xbb\xc8\xc9;\xeaZ\x03\x18\x89j6\x8a\xa1\x95=\x97\xaaU\x0f:\xdc\x16\x81\xd2`5\x0f\xf7\x9a\xfa\xa8\x10\x1e\xeb\xab\xa7\xcf\xc85\x8c\x02\xf4x\xaa\xf0\xe3i!\x9a\x1f\xb6\xee\x80\x91\x16U\x10H%bt;o\xda\xd1\xd5D\x85\x1c\x91u\xe1\x0c9>G\xa7\xb0\x1e\xc0\xc7\xfb\xda[\xad\xad\x80\xf7\xe3\xdc\x15\xf3\xc9t\xa0\xd0\xbc\xbe|<\x1a\xc1J\x9d\x91\xcc1!4\xc25\xe5t\x07\xbff\x81\x1f\xa63\xe27\x10\x97\x07\xd8Z\xe4RO\xf5\xdap+\xe2l\x9a\x0f\xce\x12\x17Nm\x06uF\xa9C*&\xb0\x01\xc0\xb1O>@\\\xfb\xbb\xdcW>z\x84\xfd\xd3s\xa4\xbax]7\xb7\xb0\x01\x05\x90\xad\xa3C\xea\xd3\xfe\x1b9\x7f\xb3X,\x07\xfd\xc5b\xb1\x18\x00\x83>9\xcc\xf9U\xb6(?K\xd5\xb1\xf8\x80\xcc\x18s\x08\xe3\xdc\xd4\xde\x07}p\xfc\xe1\xc0O\x9du\xe0\x87+2_\x0e\xcc\xee\xac\xfe\xbd\xe0V\xd4E\x0e\xe2\xc3\xe8Xv\x0cR\xa7\xcb\xeb\x87\x84\x8d\xac\xac\x1b\xdc=\xd6\x1c\xa1\xba\x17S\xbd\x93s\x7f\xa9\x06\xaf\xde\x03\xa8p\x96W\x9d&\xb8\x9d\xa9H\xfe\x95%ZXCqm\x07\x90\xd9\x08x\x1fc1\x1d\xbbhJa/\x9b\x17M\xcbU\x1d\xc5\xba\x9e\x92\x97\x07\x8c\\N\x1c\xf8ZM\x83 \xd6\xad\xb54EGo\xb9\x16\xd4\xa60\xc8~9K#k\xa7\x93\xe5v:\xf4\x82\xf0\xe3\xa3\xa3\xf3\xc3\x81\xd7\xa6\x0d\x02}\x87\xa2M\x81\xd5y\xf7\xc0\xeahG\x04\xfd\xd4\xe4\x8e\xab\xe1B\xd7\x8a}\xae\x96cT\x11k2\xe3\x05\x10\x05#-\x12\xe1\x1c5\xc65\x8f\x96\xcd\xe4\xaf\x1bMk\xaf\xfc\x12D9\xad\xaah%|\x0e\x82\x11\xbb \x86\x8e\x98\x1e\xb9\xb4\x08Y$f\xe4\xacN8\xda`\x84\xa8\xcd3\xe2\x82\xb1\x94\xb1\x99~\xcf\xe3\xe5\x04\xdan\xec\x08~\xd6\xd2\xc7\x87R\xf2\xd8\xc1\x80\xb3\xd57\x0f\xa0\xf1\x05\"\xcaK\x04\x94~\xc4\xc0\xe4\x05Y\xe4\xecY\xd5u\x99\xd1\x99|\xe6\xd0\x99\x14\xe2\x8a\x9e\x8d?\x9f\x9c\x80\xf2\xf4\xc9pqzum\x15\xa6\xc3\xdf\xe49\x96\xfd\xebY\xfe6^\xfe|6z1}_\xf8>\xb8\xee_\xcf\x16\x93\xa3J\x0c\x9e\x0c^\x9e\xd6\xf56\x05\xd8&\x8b\xf1\xf2\xe7\xe9\xe8\xfc\xf9\xfb\xc1\xac?\x7fs\xf9rqwv6^\xdc\x9d\x9f-U\xd9\x87\xf3\x91\x92n\xa7U\xc2z\xd1\xa8}\xd0\xd4\xa3_\xa5\x16\x9b\xa2\x13\xaa\x97\xbd\x82(\x04\xaa\x90H\xab\x0f)\xb8\xab?\xe9s\x9b9\xab\xc5\xa1,\x94U\xbb\xa1l~\xb6\xd4\x8dL\xf5\xd5~\x0f\xac\x08\x02\xb5\xe7:\xb1\x02C\xd1/W?(\x8ba\x1dd\xef\xd6\xfd\xc3\xc1]Be\x1d\x1c^\x96\x02|\xe69(\x8e\xd6[\xba\xc2S\xb2\xaa\xe3\xc3\xa3[\xed\xb2\xcb8\xb0\xb2\x87zF\xf2[\x98\x03E\xedN04i\x94\x874\xb5\x13\x986M`/\xa4~ b \x87m\x93\xe9\xfdc2K\xbf\x8f:\x99iu2?\x0e\x91.\xd2\xa6y\xcf\x8b1N\xe7:\xf6\xeb\x8e\xe8(\xa5\xfa\x0fD\xe6\xa4\xab\x18CwR\x0f\x0b\x99?>\x04\xd6\xf48\xfe\x05\xb7u\xf0\x17#\x94\xfa\x18\xffs\x0d>\x1d\xads\xbb\x8d\x80\xb2[\x16\xc3\x1f\xfdo\xb2\xd3\xd1E\x9f\x9ec\x04R\x81\xd9\xd4_(\xee\xd3;\xf8\xa3\x9b\xf6C\xfcW\xbfE\x1b\xa8\xc7O\xf0\x95\xfb\xa9\xf9;Y1f\x13'w\x89W|\xces\x05\xb7\xef\xd4s\xb0\xc6\nq\x19\xc0\x13\xf6-Lyb\xfeB\xa9P\xfc\x84 Y\xa2V\x85z\x8c\xd8-|\x8a6\xf8\xc7\xc7\x7f!\x16i\x14a\x7f\xe2\x84\xfe\x94\xb1 \xf6n`+\xa4\x92\x92\xd8DD\x85b\\\xa4\xf0\x9e2\xbe\xf7=\x86\x8fij\xe2\xa1\x9a\x81I}\xb6\xc7\x8f\xbe~G\xb8\xd2\x10\xffD!&\xc74\xb1C`_ \x0b\xfa\x84\xec p\xca\xa9\xfeD\x188V\xe8\x19\x12;?\x0dY\x9a\x82\x06\x8a\xf4D\xf4\xf4\xfc\xd33x\xc2\x16\x05\xccr\xc6\x01\xae=\x0bC\xe8/\x0e\xc1-\x86t\xbd\xf3\x10j\xf5w\x9c\xa5L#\xca]\x18\xf0\xc4\xb3`\x15^\xb1T\x88\xd3\xf8\xee\xe9\xe7\x93\xe7g<\x7fDd\\\xfbYx'8b\xe8&\xc1?\xf8 \xb1\x82j$\x16\x82z\xbb\x90E\xf8v\xab\xfe]\xb1tG1\xf4\xec\xca\x17^\xeccX\xde8\x80\xb9\xf6h\xa0g\xdd\xdb\xf1\x18\x83\xda\xe2\xd3\x98\xdd \x16\xa566o8f{\x16\x89\x15\xf7\x05\x1bS!X\xb4f\x98\x1d \x0c<\xee\x01\xa8u\x10\xd1q\x12\xd0\xfb\xd4\x8f\xb6\xda\xbf\xa3IR\xb9\xa9\x1f!\xea\xaf\x05T\xbe\xde\xaf\xd4\x1f\xb6>\xbfQ\x7f7\xd4c\xc2GX6\xcc\x84\xf9\x8d\xb6:\x84\xaf\x9f\x02zma*\xb7\xbe\xc0?\xef\xc28\xe1\xb1 \xc0\xbb\x154\x80\xbav\x1e\xae\x04=+~\x82\x7f\xb8^\x13\xde\x0b\xfd\x17\x97\x85@L\xfa\x91BK?\xe2\xdb\x0d\xbbO(\x16\x08h*60\xe0j\xd5\xe0\xa2\xa0[\x8dD\xa1M\xe17:%G\xa5\x10\xeb\n\xd3\xf1\x8e\x05zYE8wa\x16\xea8\xbf\xe1\x1e\xa0\x03\x19[=\xc4\x88; \x0dB\xfc\x9bPN\xdf\xbd\x03\xa4K\x02*L4\xe3\x84\xc7w\x10\x1f8I\xef\x01\xce\x9f2\xc6!\xc1,0\x96\xc6\x19\xc7\x95\xc5\x11iyz\x1fA^.\xf4\xb2a^\x1c\xad\x03\x7f\x83KL\xaf\x88t\x8bk\xf0\xe6>\xc1\xf4\x10\xa6*\x8d\x835\xc5\xc0\xc5I,\xfc\x0d4\x96\xe2\xc4\xa4\x82Q\x00+\xc5\xee\xa8\xd74\x01\xc7)\xb0\xc2\xa2-\xc0\x94\xad\xa1\x81,\xe2\x8c\xc2r\xcc\xc4\xf9\xd9\x19DaVx\xc6}D\xd0\xbd\xcfn\xc79\xf4\xb7l\xe5a\xf6[Aq\xf5\xdd{\xfe\xed= \xc3\xdd\xc6GD\xbf\xe3\xf0\xe9>L\xb7\xbc\xb7|8\xff( \xf9\x9f\x0e&\xbf\x7f\xfd\xea\xdb\xb7\xaf\xbf\xf8\xe7\xb7\xdf\x7f\xf5p\x01\xb8\xa2Eq+\x17+A\xf8I~CE+^\xc8Ic0}\n\xc7\x1aE3\x05\x14\x97\x9f\xea;\x8dN\x97\x0e\x06\x17\xa7\x15\x8d\\\x8a\xe5@u\x04\x98\xac3?\x9d\xbeW\x99\x1f\xce*\x8b\x97v\x1c\x04\xab\xc0\x0f\xeb\xfa\xf8\xa7\x9f\xb9\xb9\xa3w(Z8\xde8\xdd\xb8/\xa9<}\xee\xd6Iy\x9a}\xbai\xa6\xbf1f(9\x93\xf1\x0c'+\x1cI\xa0rA\xf1\xe7\xde\x1dF\xaa \xe6\xd3\xa5b %\xdd\x14\xb9&\xa0\xa1\xf8&\x12}\x95\xc1\xe85\x06#2}\x01\x01\xd6\x8b_Gd\x8aa\xb6\n\x97\x81\xfc~\xa4j\xa1}\xa0\xcc\xb4\xff\xe2\xf9\xf3\xa7OK;\xf2\xa0\xcc\xb6\xea\xc4\x1am6\xc0p\xa8\xb1k)2\xe9X\xf1\x01\x05J\xb5\xa7%\x98\xf8\\eY\xb6\x00\xe1\x14\x95\\\x0e\xec\x1e\xfd\xc2\xfe\xeb\xca\xb3\xac\x05\xb5\x99c\xf2\x95\xe0\xe1\xf6[v\xa7>\xfd1k\x88\xca\x01\x07*iC\xc4\x0e\x1am\xbf\xe3l\xe3\xdf\xcd\xd4\x8e$\xdaft\xcb\xc6.\xed\x8b\x1f\xdd\xf8\x9b\xfb\xc6\xf8*7\xaf)\xdf21sJ\x03\xe2>\x89!\xa8\x08\xe3\xee\n\x809\xa63\xd2\xfb\xeb_\xfe\xcf\xbf\xfe\xe5\xff\xfa\xeb_\xfe\x8f\xbf\xfe\xe5\xbf\xb8\xd4]\xfev\x17`\xfc\x91(\x0b\x1cJ\xa8\xfc\x8clF\xce\xab\xa7\x1c\xa5W/\x0e\x938b\x91p\x8e\xb5\x17s\xe6JW?\x9e\x05\x10\x8a\xa5\x07\x9e\xe4z\xa3<\xea\x8b\xda\x1c\x19+\x19|\x03\xc9E1\"x\xd7\x83\x88{\x1f\xca\x05v\xbb^\x8e\xaeV\xfc\\=\xd8\xa3\x0eA\xfd\xa0\xe7\x08\x83\xe8\x98mto\xd7\x05th\xbe72\xce\xf7\xd4\x06\xd9@`\x1aV\xcf;F\xd7\xc8 {;T2\x890\xb0}\x0f\n\x9fu\x90\xbeB\xd0\xa6\x91\x8e\xa5\xdb\x0dv\x1c\xc7\x83\xc0\x17\x02w\x94b\xa7\xe8\x00)\xc5\x00&y\\\x8e<\x14K5FH!\xc2\x87\x0dHR\x08\xef\x82\xbaP\x07\xfc\xbfr\xbf\xfd\x83,\x14?\xfe\xbb$\x0b-\xcb\xae\x0d\xab\xff\xce0\xc6q\x1d\xbe\x801\x8e\xaf\xff\xc0\x18\xf8=\x04cj\xe9\xe4(F\x82\x0c\xa1\x13\x0d\xfd8\xf4\xffCh~'0?\x94\xd4\x1f\xa2\xf1\xff\n4\x1d\xb6]\xf9\xd2\xe4\xc5}IU\x98w\xaffS\x0b\x83#&jf\x1e\xfez<\x8e\xeeQ?\xbf^s\x86\x07\x04\x943\xcc\xc5\x85\xef\xa1\xde\x97\xa6>N&\xcd\xd6>h=A\xc9\xbaZ\xfb\xf8\x07\x93|\x18\x99\x95\x1d\xda\x12:\xac\xe25\x8c&\xb6\xbc\xca\x84\xd0z{\x1a\xed\xf1D\xcb\xa3\x890\xca|\x16 T\xa6{~\x19\x9b\xbc8\xd0\x7f\xb6<\xce\xf0\xc4+W\xef\xe7\xa7]\x82\x1a\x1cZ\xe39\x18\xf3bNE\x8cZ}d\xe9k\xa6$ d\xf2\x1b\xd4\xf3\xfb\xf8\xdd\xc7\xc32\xcc\x05\xb5\xb0\x80\x99S\x0b\x06\x03\xb6\xf1Y\xb0N\x99\x8e\x11\xb5-\x00\xbf\xf1\xb7\x19\xd72\x01\x96P\xb2\x81>\x1b\xd0\n\xf1\xdd\x14\xfe\x05yl\x87\x87k\xa0X\xde=\x87\x7fA\xe9\xaf\xd6\x83\xf9\xab\x0f\xe2l\x9f\xf3\xf5\xa3\xfe\xc2,\xf8!\x0c\xbf\x1f%x.\x88a\xdbz7+\xa8\x04\xacw\xe0\x81mY\x84IP,\xa4x\xde\x12\x9aC6\x08\xe5\xa6\xfe\xfe\x94\xe1\xf1I\xc8\xa2\xcc\xfc\xf5\x05\xf6>d\xbaC\x11\x9e+F1\xce+\xceN\x9c\x08\x0bil\xc7%\xce\x84\x06\xcd\x9c\xad\xe1\x9fxk0\xef'\xf5\x0f\x9e\xe9q\xc8\xc8\xb3\x15\n\xb6\xf0\x0f\xb5\xe7\x00\xa6\xca\x94\x05\xfa<%\xdd\xd1u\x0c\xc7IiH\x03\x80\"\xd7\xc9\xa7 \xf5\x10\xdc4\xa1XPp\xff\x86\xe9\xa7\x18\x89N*\xee\x11\xdb1\x08]/\xcd\xc2\x90\xe2)\x05\x06\x9d\xd3R\xa7z0\xd8,`$\x05\x0b\x93@\x1f8*\"`V\x90P\x13\x0f\x0f(\xb4\x9a\x195gG\x82\xe3\xbf\x14)\xa0\x80\xbc0\xd6\x19\xf4`\x8f\xc7<{\x7f\x8d\x07\xb3\xb7+\xdes\x04\x8a\x03\xa3\xb0^\xba\x87^\xe0\xd2\x0d\xc46\xb8GQ\xd9<\xafQ.5\xaff&i\xe4\x87T0/\x0epm\xe8\xf706c\xac\x13\x04\xa7Qj\xd0\xd7\x92\x81\xc2\xea\xf5\xb9&\x16^\xe0' \xc5.\xaf\xd9F\x0b\xd1)\x9c\xe5\xb0 \xf0\x93\x14\x17\x87\x1f\xd8E\x81\xcb\x04\xcf\xcb\x0c\xdc\xf0`\x84\xe9\x1b\x86G\x9a\xda\xf6\x1e\xe8\xaf\xfdK\xf9\x96\xd3\xb5\xaf\x97'\x9cnq|J\x11\x97\x99\xa0\x862\x84\x06\xb2\xc2_\xa1+O\xe2\xe0~\x1b\xdbG\xcb5\xe9\xda\xa7A\xb1 n\x90N\xe01q\x8e9\x10\x01\n\x9e\xee\xc3U\xac\x0fq\xef\x84\xf9k\x1a\x05\xabzx\xd0\x1d\x14\x061\xed\\\xef}\x06\xe8\xbc\x87\xae;f=\x82Y\xdf\xb0\xdf\x06z=o\xd8\x97j\x12_Q\xc1\xfd;\x93\xa0\xc5\x88\xd70{z\xb819\xd5\x94U\xbdF\xfb8\xd8\xb3b\xc9\xdf\xf9\x9bM\x96\xb2o\x958\xa3\x99\xb2JL\xed\xde\xf3\x15\xd2\x0bH\x144\x12\x90\x13S\xbe\x0e\xe2XC\xf4u\x16y_\xe4\x8f\xbf\xcd\x1f\xff9\x7f\xfc\x1e\x1f\xff\x99fi\xea\xd3\xe8\xb7A\xa6\xe1|\xc5\xf8\x96\x15\x1e\xff`E\x8aW1Ovq\x10o\xef\xf1\xfd\x8f\x9b\x8d\xa1\xc5\xa87,\x80\xf3C\xc2\xbc,\xa0\xbc\xdc\x97\x1f\x92\xb8\x98\xe9\xb5\xb1\x84`\xaf3\xbe\xca\x02%\xb4\xb8F\x1d\"r\xf4B=\x8f!\x8b\xb4e\x89z\xe6\x1c\x97P\x08\"\x0f\x9a(l8\x05\xc4\x0f-^\xe3\xe9f\x08\x04\x99\xad\x91\x04\x84a\x16\xf8h\xea\x81\xa7\xb0H\x92\xd1\xd8!\xdektN\xe8z\xad\xabMv4\x121\x92b\xae\x89L\xc8\x91\x00\xea\x83\xdc\x04\xa8\x1e&\xfc\x84\xe44\xbc\xb7\x98\x1aj\"\x17j\xd2\xa6\xde\xcd\xa3%s!\x92\xb7\xd0\xa0p\xa8\xa1\xcd\"\xcd\x90\xf0 \x00t\x8cU\x0cc\xf5k\x14\x8b\x1c\xd2\x1a\n$\x9e\xc7\xb4m\x80%\xeb4\xf0\xb7\xfa\x01\xbfd\"V\x12q\xc0\xb4,A\xbd\x1b\xc5`\x10\xefW[K\xbcV1\xd7\x90y,\x08\xd4x\xe9\xf9V\xafj<\xcc\xeb\x8ey78\x94V\xc0\x08(2!/`Hvm\xad^\x8cB\x82\xfa\xab\x97\xa9\x17\xc7|\x8d\x89\x9a:A3\x8a!\x8cW4e\x86g\xd2\xd436>\xe6L\xcf \x84M00\xd3w~\x98!`\xaa\x8a\x8d\x9a \x16y\xf7&A\xd59Nw\xfe\x06\xea[1\xbd\xd2V>\n\x1e(!\x16\x96/ZB\xa9\xbfc\xc3o\xe1E\xed\xffz\x95u\x1d\xf3\xb1Z <\x89\x03j7\x1f\xf5\xe41\n+i\xfe9\xe1\xb11\x9e\xc3\x04\xce\x14)4\xf4\x05f\x07\xbb\x80\x8b\x1d\x12Pf\\#k\xf5\xe2\x08\x18'&\xf1\\\xa8]\x03\x97\xd5Y\xf7~\xaa\xf7,\xc8\x14\xd9z\xcbB\xcd\x06Y\xc0\xf6\x16j#\x04\xf8(\xfc\xaa\xbf\xe3XQ<\\\xf9\xf0nF\xa0 z)V=\xb6#\x82\xaf\xc5bq$\xc6\x1b\x1a\xfaA\xfejP\xdb\xbe\x8c\xe9\xfa\xc7,\x15y\x9a\xe0L\x8bA\xfa]c1\xbc\xed)\xf7i\x94\xe7\xbe\xb5h\xb6A\xd9\x03Z\xda\xc2\x06i\x0b\x1b$`\x9dc\x83?E\xb9\xd0\x08eY\xe4#\xe34 %i\xb5@8u9M\x1a\x950Y\x9e8D-?\x82va\x99\xdf\x00 7\x98\x00;\xb5\x1b\xd8\xa9)\xb1L\x17\xbaa\xf7\x89\x929R\xfd\x92&\x10X]\xbf)n\x00\xcf\x96\xd4\x02%\xcd\xc7,`\x8a\xd6\x8d\x0b\xecI\xd5\xcd\x82\xd0\x8ac\xf8\xae:\x99S\xe1@K3\xf9\xe4\x05\xb16P\x1c\xb3\x84\xef\xbc\x1d\x8d\"\x16\xa0\x00\x84=\xbdw\xa4Asw\xd0\x8f;\xe8\x07\xca\x1f*7\xfc\x03_\xee\xe1\x0b\x18|\xbf\x8b\xe3\x90Fk%09d\x94\xac \xa3\xf4P8\x81U\xaa\x97\xb4\x15{Vl\xcf\x02-k\xdbM\x9a\x17\x07Y\x18\xa56\x13\xbe[r\xad?kQm\xcd\xa28\xb4Y\xd7,\xd1:\x0d+\xcb\xe7l\x1a\x1es>\x07\xbbG\xf5\xc05ykbA\x81\xc2\x1f-q\x17H{\xc4\xc4\xce\xf7n\"\xad\x17\x0b\xecV.\xb0\xfaT\xb5\x05-\xef\x83T\x8a]g\xea\xc50j\xf5\\\xe0\xba!\xbd\xb3_\xfc\xc8>\xc6{\xb55\x81U\x03\x8dFqNL\xa3,\x1f\x07#\xad\xf3\xf8\xd6\xa6\xf1\xf8\xd6\x8e!\n\xcc\x06w\n\xe23\xb7\xbd\xe0\xb6\x17\xb8\xe7\x05\x03\xc5\xfc\xb5\x00\x95\xde\x13\xfb\xef\x98\xde[\xf8Z\x8f\x07\xe8e\xb5\x80 \xb5L\xc2\xbeh\xe2\x03\xa2\x88V\xe2\xe9 \xffV\x96L\xb3\xa4\x9ar\x1f\x86Lp\x1f\xe4\xf1}N}\x0e\x8b\xcex\x83\xe3.\xf0\xa3\x9b\x99\x99\xe3\xbb0\x98i\xebzH\xb7\xe2\xba\xfa`G\x03\xaa\x9cA\x8e\xde\xb2`?I\x8a&\x8f\x81\xd3\n\x89T#7\x9b\xab\x9d\x17$\x1a\x8f/\x06\xa8\xe8\x8c\xb6=ru\x05\xa6\xa6\xf1\x86\x88\xb9\xb9}:\x87[\x98\xeaO\xe5f\xd9\x88\xb0\xb9J^6x\xdf2\xa6\x9b\x95\x83\x0d7\xe4^\xbb-\xae\xebp\x93h\xf5\x16^\xa6\xad\xb7\xaf\xbdc\xfb\x11a\x03\xf2\xc7\xd5\x8f\xcc\x13\x85\xf0\xf2;\x9a\xfe\xf16\xfa\x8e+\xd1A\xdcO<\x1a\xc0\xe0i\xcf\xd1\xba\xd7l\x1e-\x1d\x9eT\x8c\xc9N\xc3\x91\x0d\xd1\x80o\xc0\xbb\xdc\xcf\x8b\x9f\xe7\x8bt\xf1\xc3\xf2\x89\xd4\x7f\x17\xef\x17\xefO\xb7a\xbdG\x89*p\xf9O\x95\xec\xff\xf4\xd2\x99y\x0d\xd6jk*\xe8x\xbe\x18/n'\x8b\xec\xec\xec\xb7\x9f\x8e\x17\xd9\xd7_\x7f\xfd\xf5\xf2\xd4q\xf2\x08%\xd4\x12\xc7\x12\xcb\xe1'\x8e\\{\xc8\xd5\xbf\x9e\xe1\xff\x1b\xb9\x13\x03\x91\xa4\xd7\x12o\xd6H\xc1\x02\x89\xd7-\xa4\xe7\xaf\xe5]\x98$\x83\x99\x9c\xbf\xa1\xe3wK9\xa7\xe3w\xc3\xc9b\xbc\x1c\xf6\xafg\x90\xa6\xdefK\xf9\xc9`P5\xb7#\xda\xb3\x154\xb6\xb8\x1d\xe2\"\x93`\x829se\xde\xaa\xccs\xd5\xcd\xb3\xb3\xb1\xfas~\xa6\xfe\xfd\xe2l\x91M_|\xa6\xfe\xfd\xec\xec\xabEv\x8e\x9f\xcf\xcf\xce?W\xff>\xdf,\xb2\xa7ggg\xcb\xd3m\xbd\xca{rEz\x06 \x8b\xf8\xff\x03hf\x15.\x18%m\xed\xe3D\xc9\x0f\x8a\x86\x90\xeb\x03\x16\xe5\xa4\x803XC\xdd\xa9\xee{2\xeb^\x0b\x03\xc0\xda\xe1f\x13\x10\xd1x\xa6\x18,\x18\xe1\x15\xbe\x81M\xa1\xee\x86]\x13\xe4:\xef\xec\xac\x05\xd2&\xea\xb3r\xc3\xedoH\xff\x0b%\xb5M\xfc\x14\xfe\xf6Y\xa3\x85\xa1%Sj\xd1\x9f\xe1=z]\xc6\x98\xb0_\x10\x01\x11\xe7\x0d \x13\xc3\xe1\x80Ds\x81\xebU,\xeb\xcb\x95\x14\xdc\xf5\xd5{\xd3\xb4\xba\x11\xe4\x0d\x8f\xc3vG\x80\n\xda\xb7m\x07\xae\x85:{J\x00\xd9\xf8\x11[\x17\xe7\xec\xd6\x8f\xd6\xf1-\xb9\x06{\x002\xd3\xef\xe5&\x9d6\x83v\xe4o\x9d\x8d*\xc8\xbe\"W\x84\xf2m\x06\x86`&\x92\xfcK\x8c\x0d_\xf0B`\xb3\xcc\xcf\x96\xe4\xba\xfc:#o\x9b\x02\x9a\xde\x95\x0c`\x9b&\x95\xe4\x10\xdfV\xc7\xd2\xfc\xde\xbb\xbd5\xdcM\xf6\x8c\xa7\xaa\x8bW\xa47\x9d\x9cM\xd4\xae\xfan\xc2Y\x18\xef\xd9Z\xc7\xbd>\xf9\n\x9ck|5Y\xc7\x1e\x80\xad^?\x87~\xe5i\x93(^\xb3\xd7\xf7 \xb3\xb6\x9bw\x13?\xfd!K\x92\x98\x0b\xa8\xead:\"wu0\xd4(\xfe@\x8aU\xb9\xc7\xe2\xcb\x06\xbf~\xeaw\xd3\xf2\xed\x8b\x0eu\xff\x11\xf2\xfcN\xe7\xf9\x9a\xd3ms\xde\xef \xef\xef_\xbf\xfa\xf6\xb5>p\xfc\nO\xa5\xdd\xd9_C\xf6?\xd4,\xad\xcd\xef\x95\xfd\xfe5\xe8\x83\xdc\xb9\xbe\xc1\\4dk\x95\xf5\x15M\xdc\xf9~\xb4\xfc\x1a(\xd27\xe4\xbaRLM\xddW\x93W\xf1;H\xfcB\x08\xae\x12g\xe4\x1bw}\x7f\x80v_\xb3\xbb\x86\xde}\x0f\xdf\xbfD\x8b|w\x96\xdf\xe1\xd8\xfe\xf1\xd5wp[\xda\x9d\xe9[\xc8\xf4?\xbf\xfa\xf6\xf7B$\xdf\xb3\x9f2\x966T\xf7\xa7r\x0f\xbf\x85\x1e\x96\x0b\x92\x19\xf9\xd6]\xf8'h\x86Ej\xff\xf6\xa7\xef\x1b\xfa\xfcu\xb9\x85\x9f\xa0\x05[\x86\xcc\xc8O\xee\xb5\xe4\xe4\x17\xdf5-Z\x85\xf6\xef\x14\xf5\xfd\xff\xd9\xfb\xda\xae\xb8m%\xe0\xef\xf7W\x0c~zR\xfb\xe05\x90\xa4\xb7\xed\x06\xc2!\xb0ii\x03\xe4\x02i\xdaK\xf3p\xcc\xaev\xd7\xc1k\xed\xe3\x17^z\xcb\x7f\x7f\x8eF\x92-\xdb\x92\xec%iz?\\\x7fHXk$K\xa3\x91\xe6E\xa3\x99`\x9c\x92\x8a\x88\xdc\xea\x18\xdb\x10\xc4\xff\x8f@\x98D\xd8\x16S\xfe\x08\xe8mBRI\xc1(c1\xc27\x94\xdb.\xd5\xc8\x87u\xf0\x15\xeb\xa0\x1eK\xbf\xc0\x0e\xbc\n\xa2\xc5\x92\xf7\x1b\x95\x14=\xe4\x8f\x08\xc9G\xc9\xa8\xf0P\xb0u=\xf4{\x84\x9e\x91\\ ${u\x7f\x1e\xce\x18\xb5\xea\xe1\x7fRZ\xef\xb7\x80\x7f\x83\x1d8c=\xa7in^\x97?\xa3T\xdc\x9e\x82\xe6\xae\xf6Kc\xa7\xffE\xf4\x85m\x10\xeat\xf0\xfdr\xaf\xdc\x88\x8e\xe8Ds\xf7\x8d!\xfd\x07\x8c\x8c\xa6\xed\xd4W\xb0\x03\x86\x95\xffo\xd8\x81\x89\xbe\xe8W\xd8\x81\xb9\xbe\xe8_\x18wM[D\x08\xec\x80F\xa4cON0(\xa0\xb6,aez\xcf;@F\x05;\x10\xbb\xffy\xf0\xe1\xe2\x03\xa3\xceq\x98\xbbW\x188\xeb\xca\xcd\xf1\xdf\x04\xffM\xf1_\xeay\x06\xdeH\xed\xdf\x89\xf4\xdf\x89\xb0\xd5\x10\xff-\xf0\xdf\xcc\xf8\x85\xd0\xfe\x85\xc2^\x9c\x11Cb\"\xc0[\x81\x96\xc21\xb1\xb0\xb3\xa9\xadpi+\x9c\xd8\n\xe7\xb6\xc2\x1b[\xe1\xc2V8\xb3\x15\xde\xdb\n\xafl\x18\xba\xb4\x15\xde\x12\x8bB;R\xc8\xa2r\xa0\x91.A\xd2\xa3\xa0\x8a\xf7PZ\x93T\xef\"\xe1\xe4\xc3\xbdD>\x98d7\xed\x97J\xcf\x12\xe1(V\xb9Gq\xa7\x1aSkg\xb5\xd6\xb8a\xb99}uh\xf8\x98R\xc6*\xb1\x97\x85ZI\xfb)\xa5LVB\xfaw\xde\x9d\x8d.\xdf\x9e\x9e\xbc>|3\x92\x9fz\xf2\x04\xa6\x81\xfa\xde\x17\x9b\x14\x0f\x82'\xfa}\xb9wz\xb8\x87\x0d\xfab\x9b\xaa\x17\x1f\xec\x9d\xcbb\xdc\xa8\xe4\xfbw\xc7?\x1f\x9f\xbc?f\x8d\x9f\x9f\xec\x9f\xbc9C\xa5a\xcb\xe7;\xd648\xdb{=\xba|}rz\xf9\xd3\xbf\xde\x8dN\x7f\x93\xa5\xcbF\xe9\xf9\xe8\xe8\xed\x9b\xbd\xf3QY}\xc2\x01\xde\xffx\xf2ftyp\xb2\xff\xeeht|.\x0b\x17\xbc\xf0tt\xfe\xee\xf4\xf8\xf2\xe0\xe4H\x16\xcc\x9a\x05\x97\xafO\xf7~P\xab\xde\xb7 \x0e\x8f\xde\x9e\x9c\x96\xe57\xbc\xfc\xf5\xc9\xe9\xfe\xe8\xf2\xd5\xc9A\xd9\xe3\xab\x1aR\xce\xf6\x8e\x0f\xcf\x0f\xff\xcd\xbav\xe4\x8b\x8dI\x96\xfd<\x1a\xbd\xbd\xdc?9>\x1f\x1d\x9f\xfb\x9ciV\xc4\xf1\xee\xf4\xf0\xf2t\xf4\xc3\xe8\xd7\xb7\xac\xe1\x9c *0\x0c\x11\x91i\xd5f\xfc\x05\xdfa7=\x9cZ\x0c\xecI\xb4\xbc\x0dy%\xa7OT\xdb\xf8Z\xb8%Uh\x80\xd8M\x88\x0f\x8c\xd7\xc6.%>D<\xb3\x97\x84\xcbnf\nX^\x82\x85\xe5_Y\xab\x02\xd7Z2\xa5^\xd2]\x8f\xed\xb3Gj\x97\xd2\x12\xb2P\xebx\xb8\x9a\x0e\xf8\xa2(\x87\xbe\xb3\xc3\xa4\x88\x12\x11c7!\x1e\xd6b-U\xf0UmF\xad\x08Oy\xed\x88\x94\xbf`\xecRQ\x9b\x12\x15\xbe\xaa\xcd&\n\xc9S6\x13\xbbgD[\xe8!\x01\xf0\x8e\x95.Wr\xee\xb8\x85\x94\x1b\x96RB\xfe \xb8*\xab\xb7\xc2\x82\xca\xcb\xdc\xa9\xe7\xf3\xadu\xaa\xdd\xfd\x0c\xdc\xed\x84\xf46\x18\x94J\xbe)&\x82\xfa\x08\xbf\xeb\xa1\xc6Z%\x9f\x07K\xce\xb1<\xbd\xb7\xf4\x04dv\x08\x92\xa0<.:\xb6?\x8f\xe2\x89\xc9\x9c\x01h\xd1\x1b\x87\xf9x\x8ey8\xbaZ\xa7ENR&\x92c\xe8rs\x93\xab \xfb-\xe9\xba\x9e\xac>\xdd8XiF\xd8S\xfa\xf0\x0c!g\x1a\xd3\x9e\xfc\xcd\xb0\xc8$\xea\xce\x16\xa6)]\x0c\x1bv\xf6\xe6\xf3\xd0c\x06\xac\x94\x06\x9f86\xb3p\xa1>\x9f:\x14\xf3\xc4\x89\xae\x97\xd85\x9a\xd8\xf4\x9d<\xef\xbf&\xa5a\x96K2\xf61\xdbNf\xe4\x13M\xc1\xbd\xe1\x1b\x12\xca\x04\xdb|$/\xb77\xc4\x1f\x0e\xac#7\xb8\xee\x9a\xbfn\xeae\x0f\xfb\xc8k\xdb\x92\x85&\xd1\x98\xd1\x0ej\xb4\x03r\x0b\xef\xcc\xc3dO\x1a\xa4$[\xd2$C\x1b$\x1b\xacT\xb4\x1d\x1f\xd2\x80.I\xe2:?\x8c\xce\x1dq/e\xc86\xe7\x0d\xc6\x18_\x8c\xe7a\x9a\x91|\xa7\xc8\xa7\x83\xef|D\x89/\xd2\x9a\x06\x19I&.#@\x8fGE\xa9>\xf3\x08Jb\xd3\xb1\xef\xf5\xc0%\xfb\x92\xcb\x06}\xe0\xf1\x18\x83\xafS\xba8\xc33D\xb6\xcf8e\xdf\x9d\x9ek\xd3\xdc\xa7\xf2v\xfc\x93'\x90\x97\xc6 !\xa8\xe3\x95y\x9e^\x94uIg\xdap\x1d\xc7\xf3\x82+:\xb9\xf7L[x\xa2\x16L\xa34\x93\xcdc1\x13\xc4k\xdb3\xa3\xc7\xf7\xfc\xbc0G\xe9oW\\\xb1\x81\xa1\xb8\xbf\xe4]l\xb6\xefw\x81\xde\xc8]7\xd70 \xd8v\x8c\x00\xca-\xads\xe2~\xbd\x9d\xdd\xcc^n\xcf\x80\xa2\x8f\xf0\x0e\x06~k\x0f\xd3\xf5\x9c\x97\xdb\x1b\xb3\x97\xdb\x1b\x0c\xfck\x03#$\x01\x86\xdb:\x13.\x19.j\x91\x18\x82\xc9\xbd\xe62\x82\xbe\x9e\x9d\\\xdczW\x97/\xb7Qo{\xb9\x1d-f\x90\xa5\xe3\x1dg{\xa3\xf1\xe6\x0eh\x82^\xf2;aL\xd2\xdc\xdd\xf266\x9c\x97_{\x9e\xa6\x83\xc0\xd4T\xae7\xed\xf3N\xea\x11o'\xb6\x07W36\x86\xe7\xa3\xfe{\xa3 \xd4\x1f\xc5Ir\xc3\xde\xf9\xe7\x9fl\xd1\x12\x1f\x8e\x82\xb3\x1fO\xde_\x8e\xde\x8c\xb8\xac/_\xec\x9f\x1c\xd5_\x9c\x8f~=\xf7\xbb\xa9\xa1\xf1\xf9\xa3\xe0\xf5\xe1\x9b\xf3\xd1\xe9\xe5\xde\xfe\xfe\xe8\xed\xb9y\xf5\xd5s.\xd5\x8b\xb4\xaf\x0fWFE\xa9\xfd\xee4\xb4\xdfs\x8d\xf6{\x8e\xb1l D\xe8U6&t\n\xe70\x14\x07\x9d\xa6\x86\x88\xa6!\xc2\xd5h')\x16W$UM\xdd\xa4<\x02\xe2\xc7\xba-\x9f\x07\x0ep\x1c.\x0c)O\xf5\x88\xf9\xd8\x12\xb3\x1a\x973\x9b\xcf\xcf\x17\x04]+\xd8\xff\xc1\x94\xa6\xa3pN<\x95\x0c\x8eQ\xfdT\xdf\x9cb\xe8/\x8d\xcfJ9\x7f\x86 \xce\x03\xc6\x99\xf6\xab\xe3 \xed\x91H\xaer\x07\xcewJi/S\xfb\xf1\xb1\xb3\x89R&\xb3@f\x8a`\\\x05\x969\xe1\xb9\x1al\xf9\x7f\xa5\xf4Q\x91m\xddA\xa7{J\x8a%M\x1a\x13\xc2\xe7\xa3\x83\xfd\xf3\xf3\x8e!\x18\x8eH\xe4\x13\xc61\xbd%\x93\xf3p\x96\x0d!\xb1\xa9f>\xac%\xe4\"\xfd\x80\x01\xff\xd8\x1f]\x8b\x80\x8d\x80\xab\xb2k#\xach\xc2/ \xa2$#i\xbe7\xf9\x18\x8eI\x923&\xdeG\xc4\x01\\i\xed\xba\xae\xb37\xcdI:Bg:\x06\x90p\xc1\xe0\xb3\xc9\x94\xcd\xf97c\xadk\xff]\x9b\x12\x1eT\xb0%\xd3\xf0\xd7\xca1]\xf9C\x0f\xbb\xb6\xb1\xbd1\x0br\x92\xe5.Q\x97\x10\x97\x0eV\xd2\x9d*M=\x18\xc74\xe1\xaa\xa0m\x03\xaba\x99'9\xa9:P\x06\xe8c\x1d\xf4\xc1y\x12\xe7/\x1c\xcf\x93\xa6*\x99\xeaA\xdd\xf7\xb9\xb8X\xfeS\x1fO\xd9\xde\x0f>8\xc0$G\xf9\xe2+\xfe\xc2\xafW\xa8\x82J~\x01,\xa8\xdf\xdd\x81\x84\x0d\x93-\xe2\x90\xd1\xa3}[\xddZ\x85\x0b\x9c\xae\xc8\x05V\xd6\x07\xedpiO8\xda\x13.\xea \x17\xf6\x84+\x1e\xcd\xf2\xca]\xbe>;<\x82j\xc5a\xba\xb6>\x86\xf4v\xcc\x15\xdd\xc3\xda\xe4\x1b\xb5.\xa0\x89\x0e\xfa\x970.z\x82_\x13\xb2d#\xd2\xc7ki>\x82\x15T(\x18\x0253\x04\xd0\xebJ\xea\x83\x8ebl.\xc2\xd2\x11\xac@_\xd6n\xb4\xc8\xec\x92(k\x84\x17\xc5\x07/H\xc2\x05\xf1\x91\xf4\xf2\x00\x0f\x98\x82<\x8d\x16\xae\xe7\xf3\xa0\x85u\xbe\xeaC\x16H\xd4\xf2\x04P\xfc7\"\x8f'\xeb\xc8\x02\x89\x1e\x91J\xb3\xc9m\xf7\x94\x18\x96hJ\xe6_W\x1a\x92\x07d\xb8\x85Q\xe4o\x87G?8\xca\x8e&\x05\x9d0\x88&\x1e\xd29\xfb\x8b\x13\x14w^\xab\xbc]1\xa0]\x10.\x97\xf1=\x1e.\xbf%.?\x8e#\xfcG\xc2\xff\n\xcbL\x12\x91\x07/\xa1\xe0\xbcA\x95PD\xb5\x88\xa3\xc9\"c\xc8\xc7\x90\x12Q\xf7\xa0\x93\xca\xe1\xf1\xdbw\xe7\xbaa\xf2\xbb\x0e\n:\xf0f\x1d\xb7\xb6\x0bs\xf9\x05E b\xad`\x7fy\x1eF\xc5\x8d\x92B\xe3\xc7\xa0{\xd8\xc8\xb0\xb9D3\xec\xc4\x07\xc7Qp\xd5\xd9\xa2\x9d\xcb\x83\x18\xaeB(\x18)\xf8\nY6\xf6d\xad\x1c(\xa7\x03\xfe\x9b\x0d\xcfM!J`\x8f\xfd\x8d\x7f]\x13\xcf\xe8P\xd9|\xd8G\x05#d\x04\x87\xff\xa4\x9dl\xcf\xc3\xa3\xb6'O\xe0\xdf\\\n\xa0^\x8f\x99\x079\xfb8P\xac\xfe\xebc\xaa\xf7\x1b\x18\x88\xc1\xad\x95d\xc0\xa9`E\"\x00\xd1\xcc\x19V\xee_\xa7\x1chN\xf8\x18+\xa4\x12\x82\xb4\xd3w\xcc\xa0\xb6\x86\x97~\x15RPn\x0eT\x04\xc1\x1d{\xaa,0\xdc\x80\xc8m7kw\xe4\xc2\xa4 |\xe8\xa6b\xf5\xc1\xb0\xa2\\\xe6\xfe\xd7g\x18#\xa8\xe3L\xaby\xea\xd5@\xf7\xea\x82N\xd3T\xf3i\xaf\xf8\xd4\xf3\xd5\x93\x01\xba\xb4\xc8h\xea\xb3\x82\xb8\x0f\x9d\x83\xb1\x97\xb6$@\xad\x94alb\xa5\x03\xa5\x03U2\x04b?\xd7\x92wM\xfa\xc8Tl\x13:b\xed\x99\xa9\x07\xf9}[\xa6:\xc3\x80>\x07'G\x0e7\x87\xb0\xc1\xbe\xc0\xef\xa6AB\xeer.X\xbf\xf0Z\x0c\x98W\x14\xa1B\x92R\x18;&n\xc2\xb5\x9a\xa4\xd4\x8f\x14\x8d\xff\x049CU\xe6\xf9p\xcajX:\xde\x9a ]\x97\xf5\xb3`\xbcxr\x17d\xa2\xb1\xbe'|}g\xa3\x8f\xf4\xddG\xf2\xee#u\x87\x1d\x924f#\xe4Qqa\x07\x9c\xdf\xef\x9e\x8d\xd7\x06\x83\xdf\xef\x9e\x11\xc6\x88K\xf3\xceZ\xa5\xeb\xe3\xdetH,\xf7\x0b\xa0\xed\x0b\xab\xd4\x0fr\xcaO1<\xc8\xe7)\xbd\xc5\x83\x1d\xa68\x8e\xd2\x94\xa6\xae#\x8b!\xca \xa19\x84%\xf2M\xce\xb0\xe5\xf7Z\xbd\xc5AU_t\x19\x0b\xd7~t\x12\xa5\xf9}\xf5E\xde\x90\x0f\xe1\x15M1N\x8d\x81x\x8c(]\xab\x1d9t\"J\xb5\xbd\xde\xbb#\xecp\x98GcnHa\xc2\x8a\xce\xec\xd2\x84\xeb\xb6\xe6\xe8\xec\xb1\xa55\xac\xde\x9c\xdb%w\xb2\xf6\x04\x19\x18\x1a\xa8NtV\xdd\x1b\xc1t\xb3M>f\xcc\xcf\x91\x9a\xf7\x08\xba\x916/1\xd4M\xdf\x1e\xf0,\xbb\\HK\xf8\x19J} x\xf5#\x06\xc5a\x98\xed\x04k\x9b\x9eW\xb7w\xbf:9\xf8M\x88\xcb\x95\\\xbd\xcb\xf7J\x18B\xc2\xb4\x03\x92L\xf8\x99Xj:$\xb2\x0bdH_\\\\_\x9b\xe0\x7f\x03\x99-\xb8\x14N\xb6\x1d%\x7f\xb7}\xd5\xac\xc9\x91\xa3\x80+\xea\xf0^\xf3\x9b2\x06W \xfd\x14\xf0\x93\xe6\x13\xb6}\xa3\x95\x8b\x1f\xef\xe9{P\xdeC*8kJ\xbc\x17\xb8\xef\x15u\xae\xc2\x0dL\xb4\x86h\xca]x\xd8T\x1f\x13\x97rnB\x8d\xdc\xe4\x80T\x85\x9c\x9dP\x91\x8c\x98\x1a\xfa\xc60\xb3\xb0\xdae\x18\xc4\xacCG\xc1\x11\xb2-\xf8'~\x9e\x904<\xf0_\x80\x8a\xa6\x17\x1e\x845\x02\xe9\x81C\x90\xf4\x82A\xfb\xcd0b^\xef\xb9V\xc2\x80\x7f\xe3]:\xf3e\xaaK\x1f\xc2\x15&Z4\x88G\xb3\xea\xd9-#\xf2\xd2\x94\xd8\xaa\xf9\xc0\xd6dF\xf2}\x9aL\xa3Y/\x1b\xd8\x1e7\xd2r\xdfdMly\xd6\"\x06\x8aj\xb7ij\xb2rW\x95.\xcf\xfaf\xc3\xc9\xe4GJ\xaf\xfb\xf2\x7f\xfd\xd9\x03\"\x1c\x8f\xa3v\xf8\xa9\xd4\x9f\x7f\xe2^\x84'Sh\xc6\xcc=\xcdU\x8cj\xf3ju\xc1\xf4\xfd\xda\x99\x97^\x90n4\x9b\xad\xd4\xae\x1c\xc5\x85F\xa7Q\x1a\xde\x8b\xe3V\xdb\xc6\xa6\xd1\x0fW\xdbZ\xed\xe5\x832\x16\x9e\xce\xb6\x0c\x8b\x9c\x8a\xa2G\xc5W\x16\xfev\xfcpS\xdeSvs\x1f\x9c\xcbK\x92\x1d\xd1 \x0f\xd3S\xef\xfc\x0d7\xe0\xa9\xa9\x02\x94\xd5)O\x8cb7q\x9f7o\x15PQ\xf0\xb4Y\x10\x89\x82g\xcd\x82P\x14|\xd3,(D\xc1?\x9b\x05\x99(\xd8T%f\xf6b\x8b\xbd(\xdf\x94:F\xdc\x9ey\xf5\x06, *T\xe0\xe9\xb1.\xa8\xaf\x88\xaf\xd6\xf4\x0dlF\xd8\x05\x81\x9f\xb1\x95\xee\xca\x9e\xe5\xb6k\x9e\xee\xa6\x0f4\x10\x1f\xf6\xdc|\x1ee\xdc]\x95\x15\x84\xcd\x027\x0f./\xd1Twy\x89\xccb\xd3\x87T\x01\xf2;\xd3\x88P\xd0%\xbb>\xba\xaf\xab\xe0\xc5\x82\x93\xb4\xb4\x88\x99 \"[/\xaa\x8554]\xc3\xe4`lM\x0dM7<\x01\x0f\x0e3z6\xa7\xb7f\x92[Zmh\xe6\x01,;\x87\x18\xf7Et\x94Li\xba\xe01 ;\x88\xc2\xd2\xa1\xb1\xeds\x0bz\x15\xc5d\x08[OWm\x96\x8aqz\x96\x91N:q1\xed\x84\x98wB\xc4rg\xf8D\x0cXx\x08\xc9\xaes\xba|\x0c\x9a\xc2\x1eh\xfa\xaf\x1e@Q\x0e@\xa7\xb3\xd5\xde<|\xf0|\xe5*\xc2\x83[\xb5Y\nS\n\xa3\xcbe)\xec\xc0\x18\xdf\xfe\xbd\n\x8d\x0fy\xf0SF\x13\x14\x15\xc2Kn\xa1D&\xad\xbc\xbd\xa24&a\xd2|\x8d\xe1\x03\x9b/\xb9\xe9\xb1\xf1\xf65M\x17\x1a.-u\xa8{\xa6*\xb5T\"*KZ:Q$JZzW(\xab\xe8\xb4\xa8{\x9d\xde\x95\x89\x82\xd67bQ\xd0\xd2\xbb\xb8\x94\xd7\x14\x88\xa6\x08>n\xbc]\x8aF\xb6\x9a\x8dp\x01\xed\xdb\xc6\xdb\xb9\x04\xdfj\xf5\xf3F\x16\xb5\x86\xb6\x90%\x9b\xdf\xb4\x061\x13\x89\x8a\xb5\n\xe1\xfd\x97U\x08\x97\xe5\xba`=\x08\xa2\xecT\x84\x85\xf6\x95\xa20\xb9\xf7\x1b\x90\x96bN\xad\x86\xa6x\xa1\x0f7\xe5\x9b8\xcar\x15\x82\x91\xb5\xedw\x98\xdc\xd7i\xf5\xaa\xe5*t\xa3w\xf2\xa1\xc9\xfe\xf9\x86\xb6]\xcd:\xff\x1c:\x7fK\xb5\x97:\x7f\xd6,\xd0\xe9\xfc\xaaF\xfe\xa9:\x7f\xac\xb4U\xe9\xfcuK\x80Q\xe7/\xd3J\x1dD\x93#\x1eG\xb6\x05\xf9\xd7\xa9\xff\x93([\x86\xf9x~\xc8t\x860\xe6\xceP\xc6:\xdc\npc\x07\xe2^\xd2\x92\xc0\xf5\x1a\x17\x1aCS7\xe9\xe4\x9d:\x16\xff\xf7\xd9J\x90\x84\xbb\xd0\xc3\x97Z\x17~:\x90\x18\xd5\x90h\x91\xd8W\xb0\xcb\x14\x08;5\x1c\x0e\xe4AN\x7f\xe2\xd7\xaa9{g?]\xd3a\xbb\xf4\x8b\xb4|.F\x17\xbb\xfc~i\xe9\xfe\x18a\xb8\x9a\xbf\xe0\xa6\x80>*\xa9\x0f\xb4=\xe3\x06\xc6\xd3\x06\xac\x9di6c\x02\xfa\xb88x\xa8\xc5\xc2\xe3\xf9\xaa7_\xc0\x18\xb6\xa1x\x01\xe3\xf5u\x0f\xe2\x8b\xf1\x07\xb5\xe6\xc5X\x13kQ\xc6Y\xc4S\xe5\x1d\x03\xf3\xc3=\xae\x93\x01\x8e\xc38\x16\\\x90\xf8p\xc1\xea\x96\xc1$\xb8\x9e\x96\x96\xdbQ\xaf\xc3\"\xe9\xae\xaez\x8er\x92\x17\xfbh \xa2`\x92\x80G\xec\x0e\x18\xa0\x88\x81X\xbeC\xba4,<\xd1\x9a\xec\x15\xe3\xb2\xf2\x9d\x90\x90\xb4\xc7Sl\x1c\xa3\xa4X\xac0\x16\x81\xe7\xd6\x17\xf5\x1f@\x9bvK\x14a\xf4\xf4%\xe4\x89\xbf\x81/\xf6c?+\x08\x0f]\x8c\x96\xf6b\xb4\x9c\x87J\x99\xb8\x8b\x87N\x08\x8f\xf3d\x8c\\\x07\x82\x85\xa6\x01I\x8a\x85\xd92\xcd:G93\xdd\x15\x7f\xb8\x1e\x0c\xf1\xac\xb7\xe82U#Ou\x1d~\"c\xf3s\xea`;V\xbe\x02u\x8b\x1a\x95\x91Jw\xc1\x89\x12\xcc\x07\x84\xd7\xab;\xee%`\x90\xa8Zm\xda\xa3\x96\xb8\x9b\x80\x82ff\xe5]P\xd1\xaceF@\xb69Z,\xf3{q\xa5b\xcd\xc2\xa2\xa0\xc6\xcb\x90\xc8\xd5\xfd\xc0X\xcft\xbb\xd3\xb8\x86b\xdc\xfch\xba8\x08\xf3Pn\x80\x11\xba\xbb\xaf\xb9\xce\xeb\xb2 JD\x0c\xda\x8e\x83\xa3\xdcu\x0e1\x91\xa4]\x10\xa9\xed\xb7b\x8b5Q\x89\xd5\x82\xc6\xea\x0eEs\x96\x9e}\x12\x1d\xadNC\xad\xa9\xeb\x92\x90e~\xaf!\xc4\xfa dk\xd3\x84\xa0\x85|\xdf\x03Q\xcb0\xcbni:\x91\xb8\xe7R-CFU2\x94\xb9\x07\xffk\xf0\xd9\xbd\xc2\x16Q\xf2\x06[\x1b\xda\xfcK'\xe4\x8a\x16\xc9\x98\x9cG\x0bB\x8b|\x08\xcf\xbe\xb1@+\xa1\xe7\xacb\xe9_0\xdb\xad\xd7\x9fU\x02\x95\x16\xcf^\x02(1\xdc]\xef-dJ\xf3\xe8c\xad\x1e<\xae\x06Bc_\xcc\xd1\xf7\xf5\xc2\xdf\xaa\xf2R\x1ady\x98\x0b!\xc0(\x9c\x1d\xe6D'\x9cY\x1c\xae\xd2 #\xf9\x19k\xba\xba\xdao\x8d\n :hg\x91ri\x88Kj\x19\xc9\xb98f\xacd\xf2\xefW\xb0g\x184w\x98b\x03\xef'\x8fj\xc6k\xbd\x1f\xb0\xcax\xe5\xa5<\x11\xce\xe4/\x19o8\x994\x07\xbb\xcaX\xfb\x04\xc4\x10T\x06;p\xe9J\x8a\xeb\x12\x8a\x04\x06\x048w\xcaslau\x1e\x8d\x80\xd5U\x10\x0d\x1az`\xa1\xdfx\xff\x82\x01\xe2B7^\x9c\x15\x1f\xaefF\xdbH\xed\xe5_\xa3-\x95\xd6\xd7\xf7Q\x1c\x9f\x921\x89n\xf0\xb4,\xeb\xa1@\x19\xe7J\x92\xde\xda\x8e\xd0\xa2\x94]\x8f\x89\x7f\xfc\x9d\x9cN\x9bB\xa0\x92\xa3~*:\xf9\xd9\x17\xb2\xa0\xdau\xc4>\xba$?=\xec\xa7KR\x84\xedV\xed\"\x84\xebR'C\x84\xeaR'\x0b\x842\x99OC\xbc\x11,\xb4\xbeP\xd5\xfa\xec\x06\xd4\"\x88\x92)I\xb9\xf8\xe0FA\x94\x93E\xd6\xedhV?Q\xe9\xe1s\xf6\x8ag\xf7\xef\xf0\x1f\xcbP\xb7\xb5\x88W\xd0\xa6h\xb3&\xbc\xec\xd2v\xe7\xd2\xd3\xed\x13\xb5\xddy\xd7\xc6\xaeH\xd5\xe1\xeaR5T\x92\xb5R;\xecQKf\xdf\xed\xbe\xb7/\xd6\x9c\x85\x96\xa1\xad=\x1b\xa2\xbf\xd7\xa0kz1\xfd\x9b\xf5\xe2\x8ey\x14\x0eW\xdc\xedc\x8dGC\x99\x04\x98]\x91\xfd-\xfet=\xd8\x86\xad\xea^\xca$X\x84KE\x10\xf2\x81v\x11^$\x84\xe6\xb4n\x96\xcf:.\x96\xc9\xd9\xb75\x0f\xe2\x13K\xdc\x10xZ\xd7\x9e\x92\x8b|J \x06\xaf\xf1\xf0[/\xd6J\xb6p\xab\x80'\xeb\x82j\xe5\x9d\x8f\x8b\xe5\xc5\xe6\x07\xbe\xe3\xc1:P\xcb\xdd\xe4\xce{Y\x1dsi\x1f-2\xa2\x0e\xa2T}\xbf>f4\x19\xf0\xed|\xc0\xf4\xeb\x01\xdb.\xad\x0e\x81\xa6\xeeY\xdd\xcd\xa0\xfbd\x05Z\xa7+\x1dF*)]\xf7]\x81\xfd\x04{\xf9\x94$\xa3\xaaO|)\xd8)\xc7\xde\x1dy\x9e\x13Y\x96\xbf\x19\xc7V\xf3\x124\xa6\xf6*O\xe0*O\x06\xd9\x02\xb4\xb3<\xe0\xfaH\xc7\x86K\x93\xfd8\x1a_\xf7\x10^\xd4\xa7\xc4^\xa5\x87\xb9]\x88\xb3\x11\x9d\x03\x03pL\x9e\xa8^\x90S~\xf4\xf3X\xd4\xad\x84\xb6p2\x01\x07\xd6\xab\xcd\xab\xc1\xf8\xb8\x1b\xa1\xf1[%B\x91#\x08\xbdM?06\xee\xbd\xc9\x04\xd8g\xb5\xc3\xef\xb4\xb4\xbc-R\xb2\x8a\xb5\xa5r;\xebeo\xf9\xdf\x81\xdf\xca\x07~\xabj\xa9\xff;(\xd3?\x7f\xd1AY\x97\xceB{\x1d\xa7\xd5\x0f\xca\x0c\xa7\x0bx\xf2%\xf4\x9b\xb4\x9f~\x13\xf69\xcc\xea\x10#\xc2\x9e\x1ba\xba\xbaX/Dz\xa5f\xda\xcfX.\x82\x08$\xb6\xdbFuA\x9d\xbb\xc6MS\xba\xf8\xe9\xccs)jYx\xff\xd3\xc9S\x9e`e\x1a\xc6\x999\xe1\x0b\xe8\xa5\xf9\xb2\x1d\xdb\x81\xd7\xaaB}\xb7I\xe1\xd3L\xe4\xa5\x07\xf1\xa3\xf7\xec\xde{\xb2\\\xa1\x9fl\x1f\xb7X\xc6\xd9\xc2\xc9H\x8esrN\xcf\xc2\xc52\xeee#\xaf\xbc\xbb\\\xf6\xe5\x19\xdb\x1cxm\x8e'\xcf%5w \xfd\xdd`\xa2\xb5\xcb\x1bEF\xd2\xf2\x990\xb4:\x0f\x93ILNVi\xfb\xa6\xccw\xdc\xed\xbb\xa1\x0c^\xe7\x03\xe8\x1b\xbd\x85\xe132\x80\xcf\xe9y\xb9V1\x81\x86\x9dO\x9d\xc3\xf2e\x9bdtw\xb4\xeb8\xf8B\x86\xbc\xffbN\x96\xbb\xce9\xb9\xcb\xf7R\x12>\x92\x9b\xd4\x0c\x0c& \xda\x93\xe50R\x9b+\x06\x04c\x1d\xf6\x08\x9e\xc4\xd8M\x16\xfda\x0d\xcfkF\xbddX\xac\x05d\xc3\x1fi\x94\xb8\x8c}x\xfd8\x97EGm\xb0\x89\xfa\x06\xa0\xad\xf5(w\xbe.\x11\x1f\x81\x1fu\xe3E\x1e\x86\xe2E\x87\x7fz\xc1\x818\x91F\xa7\x89\n,\xad\x17\xf0\x10\x92\xb58\x02\x8f\xef\xc2g\xbdt\xd3\xec\xa6\xe9n\x8c\xf8h\x98e\xd1,a\x8c\xcc.\xa6\xd7\x92>o\xf1\xfc\xceMuE\xe4y\xb6\xef\xf3\x95\xa6bJ\x03]~\n\x03'&=\xf3\xc2c(8\xb4Ta\xac\xe9\x1dH.R]\xa0\x89\xd6\x1b\xc9\x90\xeb$X\xa7x\xda\xc5\x9aK\xd1\x83XO\x9ck\x19\xfe7_@\x02\xdbj\xa2\x7f3\xf6@\x99\xb9\xfc\"1`\x0e\x90P\x99tG\xd2\xf0\n\x05\x8a\xdaO\x91|,e\n\xdb4\x9a\x15\x12hm\xb3L\xda\xc7P\xce\xe3\\\xa6\xc1m\x1a\xe5%D\x99}\xaaI\xa7\x845xM\xee\x19\xfe\xf5\x0b\xbe\xff$\xa8\xd6X>\xa1V\x85\x91\x07\x01u\x15\xd2\xe0\x99\xc3R\xf1\x9eG\x07l{\x157\xb6\x9b\xe6\xc5r\xa6\xd8\x14<\x02F\xbd \x14\x05[\x9b\xdf|\xab\x0f\x86Q|\x91\xbbOn{\x99\xf7\x92\x8a\xb5+{\xad\x9f\xb3\x04\x8f\xf5T\x8b\x80\x95\x9b\xc2\xa1\xed\x87IBs`\xeb\x12B\xce\xfb \xccj\xa1\xd8\xdas\xd2!\x90'}\xbd:\xb0\xa3D\xed\xd9)\x99\x92\x94$\xe32D\xdc<\xca`\x1ef\xc9\xd79\\\x11\x92@\xc4\xaf\xb1D\x19\x99\xc0\x00\xb2bIR\xd7\xabA\xb0\xa1\x90I\x87\xf8\xb0\x86\xc7\x0dJB\xc9Z\x10\x1fm8\xbb\\P\x81\x86F\x0d\xfa\x86X\x843\xc2\x98\x1f'\xfa\x93i\xcb-\xc7\xa2y$\xab9d\x93`I\xd2,\xcarSX\x05\xc9\x14\x92\xee\xd3\xbdd\xa5\xe3kU\x1f\xd0o,=s\xaf\xb0\x1e\xd2~=dO\xe9\x06\xf7\x92U\xe1\x82x\xe9\xcd\x86\xe1\xaa\x12\x9aGS\xbc\xe68,\xb7oxYU|\xf2\xa4\x02J\xf1\x88\xa8G\xbe\x066\xd8!\x08p1\xf8\xaeZP\xe1\xcb\x92\x91\x0e\xf4\xeayUd29\xb7\x89\x12\x13-%?\x93\xfb\x03zk7\xa0\xca\xa7\"\x0f\xa9C\x8a\xda\xfa pFI\xceS\xc20\xf1\xfe\x9a\xdcsdNi:&\xc7\x12\xed\xbe\xc85e0\x10\xb2.\xbe\x8a\x8b\xf4\x91\xfdcUM\xf4\xbbb?\xb8\x86\x80\xf0\x11\xe9\xd7\x1f\x1eQs\x1b6\xbd\x92\x86\xba\x84\x0f\xf9\xc8\x05^\xc4\x06/F\x83V-\x03\xfc\x8a\x84=\xb5\x0f'\xc1\x84\xf2\xf1Z*\xdb\x97^.L)\x8a\xed\xa5\x1b\x0d\xf2I\x82(\x13\xbc\x8e\xdf\xd1a\x02L\xd5)\xab\x9f\x19\xdb\x07\xcd\xcb\\\x87\xddGtg\xd3\xd7\xcf\xbf|\x90\x0e\xa6q\x91\xcd\xfbN#TS\x99\xf3\x9a\xb6\xb4\x13Hf\x8c!\xc7\xab\xb4\xafEk.\x1a\xb2}NOXz\xea\x97\x93\xd4\xa7cI\xc3\xc4$\xce\x18D|Z\xe5r\xad\xfeS\xca\xba\xec5\x9f\x98_\xa0\x86\x03\x1b\xc6J\x0c\xe3^$\x91d&--K\xec8\x81\x04\x0d\xb31\x7f!Wx\x14E\x9e\xa4\xac\x08\x0c\xa2X\xfe\xfeR\x0c\xe8\xf1i3{\x07\xdf\xc1\xa9\xee\xe5\"(\xdd\xe6\x98<\xd6f\x8c\xd8\x8en_\xa9Aj\xcd\x87\x9d\"\xa81r1\xb2\n\xf4=A\x07?\x83\xe8|\xc6\x84O w\xcb\x94d\x19\x93\xda\x17E\x96\x03\x89\xf29I\xe1\x8a\xf0\x06h\xaa\xc8\xd2>\x06\x1dv`\xbd\xfc\x90\x862I\xa5\"U\xba?\xe7N\xae\xc8\xdb\xa8\xe8Pz\xd4\x8ei\x92\xe5i1\xcei\xaaS[\xe4#g\xc0L\xef\x95F\xda\x8e8\xa0>R\xff\xb4\xbbA\xa9\xba\xec\xd0\x94\x8cICK\x92{\xbb\x02\x1bYM\xa2\x86]\xd0\xbe\x17\xf3>DUN\x8a\xe5l:\xeb\xa4\xc3t\xcf\xf2T\xa0a\xbd\xf2\x81\xf630\xbf\x8f\xe2\xf8S-\xcch\x95\xab\x8b!\xaeb`n\xdc\xbf\xe8\xb2\x97X\xac\xc9\x7f\x89K\xac\xdcH;\xb7\xd0D\\\xc6\xab\x8dF\xbf}\xe2\xe8k\x8b\xff\xcf?\xcb\x8c\x85\xb84+g[\xc5\x01\xb7Q\xd2[\x8f1\xddi\xf6!\xa9<}\xb5\x93Q~\xac1}I\xb7\x01\xb5\xe74\xbdK\x16\x9f\x83\xbc\xb8t#{k\x92Xzw\xf1o8\x97\x10\xb9\xbe\xec\xf4\xe5*\x91\x15J\x8a\x04R\xb1k\xbfM\x82\xec\x95\"\x9b\xbc\xbaG\xf5\xc6\xe68\xc3\xa3-TUNP\x1f\xb1\x9c\xef\x8a\x90\x0fB\xab2\x03\x16\x02\xd0\xde\\\x86PQ\xb2,\xf2S25\xc3\xc5}\xcd1\xf2\x916\x9c\xff\xf4I\x1aUZ\x7f\x89\x07y\x19\x96<\xf5\x98\xb8\xb3\xa9XA\xec&aR\x9a\x84\x13n\x12\xc6\xac\x85\xf6\xcfK\x1d\xca\x08\xf4\x80~/\x8e\xa0\x18\xc7\x07G\x12\x85S\x1aQ}pJ\xa2\xc0d\xd1u\xa2\xc0\x83\xfb\x16Q4\xde\xf2y\xe7\xed\x8b\xb9\xe5?\xe4k9G\xd6\xd3\xffqG\x0cKt\xf3\x86]\xcb\xdc\x95_/\x1d\x01\xc4o\xfd\xbe\x06C\x08\xfb\xb6g\x88\x17\x0eC#\x910\xba\x98v\x0c\x89\x95\xd3\x8e.0\x1c\x96\xe3a?\x8c=)z\xb5T\xadB\x99\xba\xb4(r\xaeueb\xe8\xba\"\xf3=\xd8\xd6\xdd\xd7\xad\xcd\x06D{\x93h\x8b\xc2\xad-\xa3\x0d\"w\n\xd9\xc1\n\x97\xf8W\xc7\x99\xa5\xe5\xae\xa0\xdc\xd3\x9d\xd1\xdd\x92\x8cs2QM\xfcmBIa\x07\x8e\xc3\xe3v\x01cz\xce\x85\xf0\xf09\xbb_\\\xd1\xf8\x83\xa6~\x04;\xb0\xf1\x7f\x7f\xcf\xd6\xff\xfc=[\xffjc\xd6\x86\x08\x11\xe2b\xb0\xfea\xf3\xeebs\xf0}8\x98~X\xffjC\xe3\xe6T \xe4\xe6\xd5\xc5\xe6\x96\x01\"\xe3\x10\xf4bs\xf0\xad\x01\x841A\xcc\xad\x7f\xa8\x93\x1d\xd8\xde\xaa\xa4f\xa9\xe9\x81B\xe7:\x11NM;R'\xc3\xd7\xed\xa6\xa6\xfa\xa62\x12OY\x0d\xf5\x7f}\x9b\xac\xa4\xdd,\xdb\x80\xc6x\xf6\xcb\xfey-\xe7\xd9\x91\xd6\xa7y\x949\x9e.\xec\xf2\xa4R\"+\x16,\xd3\xe4\xb4\xc1\xe7\xb0\x03Ga>\x0f\x16\xe1\x9dF\xac+K#\x8d\xf8\xd2\xef\xb6'\xef\xf028`\xdbNBou\xf2\xa7r^\x07\xea\xb9\xd8L\xaf\x7fH\xddC&\xba1\x1e\xa8\xac\xad\xf1\xac\x18\xb5 \xd2d\xddiz\xa7\xea{\xa3\x89\x9e\x08\xd2\xac\xa0\xc9\x97nK\xd3\xc2\xeat\xebX\xa2\xbe\x93\xe1\xba\xab5\xde\xed\x16\xd0hD\xa0BC\xaa\x066\xc0Z}\xf2\x04&B`\xf3@{i\xe5AM\x13\xa4\xb1\xcdc.\x15KF\xa9\x9b2\xa8PmBdF)\xdc\xbdQ\xe5/\xffF'U\x93\x17\x1a\xec\xc0\x8cm\x86\xbb\x90\xc3:\x8f)\xd6u\xc6\x0c\xcd\x0cJk\x9a)\xac\x12\xe6\x13\x18\xc2\xba\xe6\xf3D\xb8\xdc\xf2\x84~\x11\xe6\xf33\x1f\x97\x16\"\x1d\xb4\xe5,\x90\xcdp&\xc1`\x17bW\xe4!u\x9f\xa2\x86\xba\x0bOa\x08\xdf1l\x84\nX\x8a\xfdk\xd0\xb3\xfaK\xf5\x8ci0\x17\xed\xa1>\x1e\xd1\xf9\x10a6\x99\xc2\x87\x0c\x85\x13\xf4w\xd7\x0b\x1cSn\xb2\xd3\x96--e\x13\xb4\xd9\xebIH\x9fpLo\xa8K\xbc\xc6v\x02\xea\"\xbe\xea\xf6w\xb4\\_b|2\xb2Jv\x8ca*\xe9\xdbx\xa0\x17_\xa8x\xdcr\x9e26\xae\xa1Js\xa75\x91;\xe5#;M`\x00\xb1\xb5gJ\xc0\xbd\x98\x11W\xc2T\xb6\x9c\xff\xb5\xcdu\xb7%zB\xc0\x00\xc6\xac\xac\xad\x04\xd8\xfax\xdb\xa9\xf4/l\xe1\xff/k\xf9\xc6\x8c9\xca\x18\xd5f$\x17\x82\x99{\xeb\xf7\xdc\x05K_V\x18\x80\x8b\xb8\xea\xbe\x9c\xba\x84]\xb8q\x13\x1fBYi\xec\xa1\x05\xdf\xb8a\xae6\xab\xa3\xce\x9d?S\x08i\x02\x98\x1dk\x17\xae\xf89\x82\xdb\xa4\xb4b\xb5\xaf\xdf\xf5\x99/\xf3JHx\x1c\x06\xcb\x8cR\xd5\xa5\x8c\xe7\xe4\xe2.\x10L63EJQ\x1bP\x086\xf3\xdaV\xfe.\xb3\x86\xa80\xe6_k\x13N\xee\xf90\xad\xf0\xa9W\x14\x01g\xd6F,\xe2^\xb42c\xed\xcf\\\xb9\xa6\x00\xfb=\x17l\x86b\x8c\xaeq\xcf\xd7\xf4\xdc\xe8\xc5\x95c\xe4\xe8\x1ccbn\xfa0s\x85\x15\x06\xf7\xec\xb54\x88 \xe6f\xe0Y\xb0]\xb6[;\x8b\xf0\xee}\x18\xe5\xdc\xfd\x8cq\x98\xb9{\xef\xa6\x81x-[B\xc3{\xe8\xe3&\xee\xe4i\x18\xc5\xc8K\xd1em\x17\x9b\x96/a\x08\x13L\xe0\xd7\xffhT\xb1\x00#\"0)\x98\xc4B&o_\xf1\xebG\xb1X\x15\xd5\xd2ic\x87}\xbd\xf7\xb9\xafn2v\xa1\x80!\x8c\xdc\x85kH\xf0U{\xa9\xb8\x87IW \x1f\x12\xf7\xd9\x96\xa8\xdc\xa1\xe5I\xe7\xc2z\xf7\x9c`#\x8c\xe3\xe0c\xe6\x0c\xe1\xf9\xf3\xe7~\xab\xb0\xc8\xe7\x1b!6\x9aq\xa8\xa7\xcf\x9e\xea\xa1\xd0\x88\xc7a\x9e}\xffL\x0f\x93\x92I1&i&\xc1\x0c\x1f\xccd\xe2! \xf7\x8d\x01nI\xc6\x83\xdb4\\\x0ej]|\xf6\xfd?[\xf0\xfc\x10)k\x8e\xa5\xdd\x01 8'\xf1\xb2\xec\xe9\xd3g\xed\x01I\xc0\xda\xb8\xbf7\x82\xd5\x87\xfe|\xb3\x8dE \xd9\x18\xfd\xf3\xcd-3(C@mH\xcf\x9b&\x06'\xd8\x98\x10\xb2\x1c\xc4Qr\x1d%\xb3\xfa\xb8\x9eo\xb61[\x83V\x06\xf7|\xb3\x8d\x83\x1al\x1c\xde\xd3\"\x97\xc0m\xcc\xd6\x80\xcb|K\x83<\x9c\xe1\x1c.I\x1a|\xcc\xee\xb0\xf2\xb7}+7+\xb6'~Bo\x93\x98\x86\x93A\x91\xc6r\x96\xbekA\x914\xad\x93\xc6\xd6\xd3v\x1f\x18\x10\xdeG\x18\xe4i\x98dS\x9a.H\x9am\xcc)\xbd\x16-?mO\x95\xa1R\xedGB\xf3\x01\x9d\x0eP\xc9\x16\x0d\xb5\xc9\xa3OC\xcb0\x0d\x17$'\xe9\x80&\x84Nec\xed\x89\xeb\xd3\x18\xd3d\x96\x03\xe9\x0e*\xdbj\xcf+kK]\x04[\xedE\xc0@\x1ak\xffi\x9bN\x19Ts\xe9?m\x13(\x8f\x9dP'\xcd\xf6\x8c\n(\xba\xccxV* \xd9\xee\x1c\xa7\xdb\xc6\xce\xa0YF\x02N\x1d\xea\xd36\xbd \xa8\xe6h\xdb\xd4$\x00[\x03n\x0f%\xa6\x8dm\xe6\xbb6Rh\x98=knn\xed\xceq\xa8\"\x9f\x0f\xc8]N\x92\x8cAo\xe0\x06\xda\xdct44\x83\x95\xcb\xe3\xc5l\x83\xf1\xa0\xabp|\x9d\xc9\xd5\xa7\xc1F\xb3\xce<\xcf\x97\x03\xd6\x01YG\xc3M\x9au\xd4\x89\xd6\x90C\x13\xbc\xda\x1c\xd8vQ\xf6\xad\x8dVs\xc5\x8c\xa7X+\xfb\xd8\x8d\x8b\x94\xfc\xbf\x82d\xf9\xe0\x8aN\xee\x07d\x12\xe5\xb4\xdc\x93\x9e\xb5\xf7\x04[\xed\xb2\xc3m\x8aiV\x13\xdd\xac\xb2\x1d\x95\x9fl\x13\xaf\xa1n\xf9\xb5\xf6\xb2\xc0\x1a5n\xf1\xcc\x80\xfc\xda\x04\x19F\xdb`\x7f\xcf\x0d(m\x92\xe1s\x03y \xe3Sh\xb8E\xbe\xedmJ[OO\xfb\x86\x8f\"\xb0\x82C\\HQN\x16%\xde\x0d\x0b\xa0YQE\x98F\x04\xd1\xd6Q\xa38p\x1b\x93D\x91\x01\xe3\xcd\x06\x16az\xcd\x98\xa1\xfc\xaea2[\xd5\xe8\x84\xc4r\x80\xcf\x0d\x84\xd5\xacD\x938J\xc8\x00\xaf\xb6\x859M\x07W\xe1dF\xe4\x97\x0d\xb4\xd6l\xa4df\xd5B4\xac\x89f\xcd\x1b\x9e\x02r\x90\xe5\xe1bYV\xd6\xec\x00 \xd6\x8aINjs\xb2\xd5\x1ef\x86\xb71\xb3\x8d\xa9\xc0\xdf\xd6\xf7m\"\x910\xb5\xad\xba=\xbd\x8c\x06\x9b\xdcF\xd3\x18\x83R[\xd2\xec\x94\x08\xd3\xe04\x9a\xcd\n\xc1\x1aD\xfeT#U\"\x9cF\x9c~\xde&k\x99\xd5\xeecc\xb4m\xc8\"\x8f\xe2\xba\x8c\xdc\x9e\xc4\x9b\x88\xdc\xd6`\x9e\x1b`RJ\xf3A\x94|$\xe3\xbc\xec\xdcw%\xa46]\x0d5^\xd8I\xdc\xa8fly\xd0\xd4\x8e\xda\xb5\xa5\xad9\xbd \x8d[Z\xfc\x06M\x0e\xeb\xb0U\xbb8S\xbf43\x8d\x92 ,\xf8\x0d\xa1\xaf\x1dX\x07\x02\xeb\xe0|\x1d4\x0d\xbdR\xd7V\xfa'\xff\xa2\xc15\xb9\xb7\xe6O\x16\x95\xc5\x11\x0e\x83v\x95\xcb[\x0f>\xd0 %\x19\x8do\x08St\xeb\x17\x1d)+\x8d\x98\n\xbe\xb5\xf9\x0d\xc7\xee\xc3\x07\xef\x1f\x0f\xde\x8b\x7fll\xfc\x1f\xc8h\x91\x8e\xc9Q\xb8\\F\xc9\xec\xdd\xe9\x9b\x9d*\xc3\xe1\xe0\xaaH&1[\xe7\xc1\"\\\xfe\xff\x00\x00\x00\xff\xffPK\x07\x08-\xe3\xb5\x97=9\x05\x00\xf7\x0c\x1b\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\x00 \x00swagger/swagger-ui-standalone-preset.jsUT\x05\x00\x01\x80Cm8\xec\xbdys\xdc6\x9a0\xfe\xff|\x8aG|w\x152M\xd1\xdd\xad\xc3:,k\x1d\xc7\x9e\xf5\xbb\xf1Q\x963\xf3\x9b\xb7\xa3UQl\xb4\x9a1\x9b\xec\xe1!Y\x13i?\xfb\xaf\xf0\x00 \x01\x10 \xd9\xb2\xb33\xbb5\xacT\xac\x06A\xdcx\xeec\x0b\x16U\x1a\x95q\x96\xba\xa5\x0f\xc4\x83\xdf\xfe\x00\x00\xe0dW\xbf\x92\xa8t\xe0\xf4\x14\xca\xbb5\xc9\x16@\xbe\xac\xb3\xbc,`{\xdb\xf4v\x95\xcd\xab\x84\xc0\x19\xff#\x10\xb5O\x81\xb8\x1e\x1c\x83#\xba\x91?\x9a\x93E\x9c\x12\xda\"\xfb+\x08Ws8\xe3?\xdc\xd9\x05\x0e\xe8\xb8k0g\xe2\xaf\xe0\xfc6\xbc\xbe&\xf9\xcfo\xce\xcb0\x9d\x87I\x96\x92\x0f9)HY\x0f\xa1\xec\xab\xf3\x87\x07\xb7\\\xc6\x85\xdf,\x89X\x8e\x9c\x94U\x9eJK%^\xd0\xe7&\xcc\x81\xc0)\xfc\xf6p\xf2\x87\xbaPT\x85\xd4\xcd\xe5\xca\xf4\x89\x17\xe0\x92Y~\xe1\x89v\xe9\x0f\xb1b'JU\xdavLG7\xcb/h\x17\xcaKl\xeb\x18r\xbfU\x9a\x1c\xc3\xd6\xa4]\xcc\xbb8\x86\xdf\x1e\x94w\x0fj\xa7|T%\x1dU\x14&\x89\x1b\x8b\xc1\xf9\x10\xfb \xfdJ=\xfa3\x81S\xd8\x1aK/\xea\xd6\x9anx\x9bi\xb0\x82S(}H\x83\x88N\x8b\xfe1\x87S\xf5\x10\xfa\xd0Z\xb24\xc8\xf8\xf9\xbc\xbf\x87\xf7x\x1c\x02vL>\xe4\xd9\x9a\xe4\xe5\x1d\xff\xb2\xbdBQ\x96.\xe2\xeb*\x0f\xaf\x12bY\x96\xb4Z\x11\xf1~\xdc~\x7fM\xcac\xc8\xd5\x15\xf3\x9a9\xd29\xa4\xca\x1c\xf4\xd1\x8b\x13R\xd2\xa3^\x06\x97\x97\xa4x+\xeeK\xeb\xac\xc9\x8f\xd8 :\xd7\xb0JJu\x0cp<\xec\xeb\x01{\x9d\x06s\x97\xf8\xe0\x84\x0e]d\x1f\x88:\xbdL\xdf\"\xbd;\xde\x0c\xdf\x99u\x9e\x95\x19\xbd\xa9\xc12,\xde\xdf\xa6b\x8f\xd8i\xc2\xef\xd5\xf6\xd7p\n\xce\x93y\\\x94\x8e\x0f\xa9\x9b\x06\x14pL\xc7\x07\xac\xda\x83;\xd3\xceG*\xf7\xefT\x05\x81\xa2\xcc\xe3\xa8tN\x94[\x99\xc3)\xa4\xee\xfe\xd4S\xf7\x94^\xa8\x99\xf39N\xe7\x8e\x0fNN\x8a,\xb9!\xf4\xcf(K\x8b2\xaf\":\n'N\x8b2L#\xf2~A\x7f\xads2\x8f\xa3\xb0$\xec\x935\x05\x1b)\xd6\xe3[s^\xde%\xf8\xb2\xa0\x7f\xbcH\xe2\xb0 \x85s\xa1\xf6\x9ca\xcfE\x14&a\x8eu\xc9_+\x92F\xf8\xdd*\\\xaf\xe3\xf4\xda\xb9h\xe6PJ`\xb4s\xf9\xe9dS\x1f\xaa\x936\x9c\xa1\xb7\x8c^\x9a\xdf\x1e|\xb1=\x9f\xc9]\xe1\x12/Xd\xf9\xab0Z\xbau\xd3\xadvE+;\x138==\x858\x88\xd39\xf9\xf2~\xe1\x12\xcf\x83r\x99g\xb7\x90\x92[\xc8\xdd\xef~N?\xa7\xd9m\n\xd9\x1a\xa1\x9e\xf3\x1d\x8c\x80\xc0\x08\xbes .`EJ\x88S\x06\xd8c\xac\x90-X\x9d\x92\xd5\xf9\xcb\x8b\xb7?!l\x0f\xbe\xf3\xb4\x8b\xe6\x03\x05\xcaA\x19^3\xc8\x81\xbf\xe8\xe6\xd1\x99\xb1?\xee\xef!\xad\x92\x84\xbf\xe3\x1b\x8a\xaf\xc5\xdf\xf7\xf7\x83\xae\xca\xd6X\xed\x9c\xb7X\x9f\x0bl\xb3\xf9%\xb7\xda\xba\xf4`\xbd\x81\xbc\xd5\xe6\x80a\xb3\xd2Ou>\xf5\xd1\xc3j\xcd/}\xd6\xfcL\xf2y\x8b_j-\xf9\xb0bE\xa5@\xad+\x1fd8\x057\xc5\x0f\x94\xd2\xfa\x83\n\xf1\x9f\x8f\xbf`\xeb\xf4\x14R\n\xea\xe4\xf3\x96\x1a\xce\x9bq\xcd\xd2Yy1\xf0h\xd2\xa7\x9a\x9d\x97y\x9c^\xbb\xc4\xa3\x18\xb2lUzh\x1f\xa8\xca\xf3\x81\x1f\xe9\xac>\xd2\xf5\xb9\xb2\x1dm\xd0F%\x1e:\xba\xc8\x87\x85\x0f\x89\x0fk\x1f\x96\x8c\x06\x81\"x\xdd\xa6r\xe83\xaf+\xfc\xd1\\\xe1\xa6\xaepn\xaepWW\xf8`\xaep]W\xf8\xc1\\\x81\x12\x88\x94\x0b\xc8\xe1\x18n\xe8\xbf3\"N\x17A\x1a\xf8\x81\x12\xf3\xae(\xfe\xed\xc1k\xe8\x0ds\x8b\x97\xbc\xc5\x98\x9eB\xd1Z\\\xb7f\xfe\xe8\nN\xe1\xb2i\x19\xbf\x91\x7f\xe3\xa7'\xadO\xe9\xf5w#Dvx\x98\x10hz\xb8?\x94Lv]\n\xec\xb7\x96\xf4\xdd\x8a\xfe\xef&\x8b\xe70F\x90\xb9\x9aE\x17\x1e\xe5\xa0\xe0\x18Ro\x16]\xf8@\xe9\xa2kZm\x01g\x10\xba R\xc6\xc7p\x87L\x98\xe9\x0e'X\xef5\x7f\x83\xf4\x96\x0f \xfd&\xf1Y\x87\x95\xbb\xf2\xe9\xa1\xa0P\x1e\xb7\xe1g\xcf\x87\xcbYt\x01[\xa7\x90\xe0\xcdu/\xb1\xc6\xda\xf3YOW\xf2[\x17\x7f\x9dB\xa2\x81\xd5f)\xf2 bw9\xf6\xe9I\x83S\x98\xd0?\xfeHI:\xfa\xc79\x9c\xc2\x1e\xfd\xe3\x03\x9c\xc2!\xfd\xe3\x07Z\xe7\x80\xfe\xf5g8\x85]\xac\xf53\x9c\xc2\x01V\xfbH\xdfN\x0f}\xe5\xc6\x17\x9b\xdd\xce]\xe3\xed\xdc\xd3\x8b\xf9\xed\xd4\xef\x1b\xbd\x9dO\x9c'\xd7\xed\xcb\xa9\xf7n`]@b\xe38\xaa\xca\xdc\xd2\xb3\x1c;\xda\xa8\xf3\x8c\x02H\xd2>\\\x1c\xde:N\x83b\xdd\x10F\xa7\xe0\x00\xfd\"\xa5\x18\xe7\x14\x91\x0f\xef(\xf7(%\x90\x84\x11q+\x1f\x9c\xed\xbfVYy\xe2x\x88\x99\xbe\xf3|\x08a\x04\xces\xfamL\xffz\xf6\xc4\xe1d\x9b\xf3\xdc\xb1m\xeffD)\xe7\x8b\xe5\xf2\x94a \xe2\x86\x9e\x0f\xb9\x9b\x07\x1f`\x04y\xf0\x1a\xbe\x87\xd8\xed\xa4\xd2\x04\x1f\xe580+/\\:\x07\xeb\"\x11\\#\x12\x94\xd9O\xd9-\xc9_\x86\x05q\x91{$A\xb1N\xe2\x12\xbf\x0e\x12\x92^\x97Kx\x0e\xbb\xeat=\x1f\x1c\xb6\x86\x94!\xe9C\xdc}\xe8\xc9\xa9R\xc6\xac\xce\xe9\xce\x89\xbbz\x1b\xa7\xf3\xec\x96n\"\xfb+x\x1b\x96Kz\x97\xf1\xdf3\xf1\xfe\xd8\xf2yA\x92\x05\xfd\x98\xfe\xab\x7f\x8a\xef\x8eA\xc0\x01\xd7\x11\x84\xe82.\x1c\xcf\xf5z\xf0\xe05\xc7\x83\xd7\x8f\xc0\x83G\x9d\xa4\xca\xbe\x8e&\xd9\x8d;\xfa\xdfC\xaa\xd8\x89\xb8\x03\x9d\x16\xa0Kb\x90m\xc9\x1b[o0#\xa5\x91d\xe5\x7f\xf27\xed\xe5\xcc\xe9\\b\xfa\xbf\x01\xfb/\xaf^6\xf8p\xbf\xc8\xf3\xf0.\x88\x0b\xfc\xd7\xdcX:\xb8\xb1\xff\xe57E\x9e\xf2\xb0\xb3J9nN\x17\xd0\xbe\x04;\xf2\xe9nM^\xe5y\x96\xbb\xce\xcb0\xfd\xae\x04\x8a\xdd)k\xbd\xcc\xe6\x90\xa5\x00\xec\xac\x9aey\x9bB\xb0\xa6\x15E\xb4e\xb9Vt\xb5\x9a\x1e\x94\xf3\x95\xdfi\x9f\xd0\xf6\xd2\xce\xd3\x89wq\xec\x03\xb9 \x13\xcfuXq\xd3\xfee\xd9\xc7\xbf\xcc\xfb\xf8\x97\x9b>\xfe\xe5\xae\x8f\x7fi\x18\x9c?\xdb\x19\x9c\xe5\xa6\xec\x08\xe5aV}\x8c\xce\x15o\x99\xb2Ns\xc1:\xd9x\xa5.\xdee\xa9\xf1.\x8ckY#3\xa0q-W\xc8\xb5loC\x88\x8c\x05\xbb\xbc\x94\xd5\xa1,\x0b\xf2\n\xc7\x90\"3\xb3b\x8c\xc3Rc^\x9a\xd3\x8f\xb5\xcf\xb0\xb6`rh#Y\xcd\xf7\\\xd7\xdc\xc8\xe9)\xb2:\xdd\x92$\x90H\xc6F\x90d\xa7\xd2\xc5C\xaf'\x05: Dr\xecf\xda?\xa0Oq\x1b#T\n\xf3\xebjE\xd2\xb2\xe0\xb4e\xdfw\xf4\x89\xc2\x82\xc0\xf8\xb8\xb7\x1eH\x02{r\x0be{\x0b\xf5\x07[\x9el\xde\xb2K\x0c\x94\xb5\xfe`\xe3\xd3\xc74\xae\xd0\xd4\xa6\xe7\xa1\xf3m\xab1\xba\xa1\xd6/\xecm\xd5\xea\x95p\xbdN\xee\xb8\xf2\xaf\xde@s\x8b\x0f\xe6u\x11\\\x87\"!\x904!\xb2J\xa5n\xcaE\xce\xfc\xa6\x93\x9b\xcfl\xdc<~\xe6\xba\xab\xe0&\xce\xcb*L\xf0\xe25\xbf\x10\x96x\x9cW\x17\xbc\xfeG\xfa\xcd%\xfd\xdf\x16\xb2\xfc(\x0f`\xdc~\xe2yV\x8e\xfe\x1f\x85\x8b\x9f\xeab3.dk\x953\x1cu\xa8#4\x8a\xa2\x8c\xca\xc3f\xaa$X\xb06\xf7=83W\x96\xd5n\x16\xccE!H\xee\x96\x9e\x8f\xb0'\xa3gtk\x8c\xdc.jL=\x03Y\x04\xcd!\xaa\xeaf\xd5\x0d\x91 \x9f\x87V\x7f\xce5)\x1d\n\xbc\x91\xb8r\n\xf1\xcb@>\xbe\x88\"R\x14Y\xce\x08\x8a\xa2Z\xd3\xfd \xf3-\x0bA\xe1\xdc\x84IEx\xdb\xf4\xd0\x95\x0cY\xa5\x01\xbe\xf0\xfcMI\x0e\xf9\x08l\xa5\xee\xf4\xc8\xb3\xf3\xfd|\x0cO)\x9e0+~\x7f{\xe0\x8a\xcb\xf6\x82\xa2\xe6\xb6S\xa4 w\xd1\xbe\xa0\xea\xfa{A\xd8\xcc\xb3\x9f\xd8o\xe4\x1f\x9a\x1a\xb4\x8f\\\xb4\xebWS\xa3\x06u\xc8\x92K\x82j\xcb%\xda\xdd\xb3\xb0\x85\xa9\xbb7\xf5\x14dk>\xf4\x82\xc5\x0e\x16\xbcF\xecNh5\x99t\xef\xbf:\xb5\xf1\x01;b\x1b\x9f-I\xe67\xb1L\xa8\x9b0\xdf\xa2\x17\xb7}iT\x1a<\x05\xc6k\xd8\xaeL\xdf\xa0\xfb\xf8`uX\xff\x8d\n\x8dne\xba\xb2rCd\x82\x88\x9bc\x1f2\x1f*\x1fB\x1f\n3\xa8\xa4@d\xcbHc!\x03\xd0\xc6\xb9\n\x8fL\xc9T\x88\xe8\x1c\xc9-p\x18\xf76N\x99B\x8e|\x89\x08SJgQT\xe59\x99\x9f\x00\x9dd\xb9$\x90f\xe9\xceJT\x9c\x93\x1b \xe9M\x9cg)\xc5\xffH\x0e\xd3J\x8b*I\x80\xd0VaE\x8a\"\xbc&\x10\xa6s\x08\xe7sTe\x87 ,I\xb2^T \xdc\x86y\x1a\xa7\xd7E\xa0\x9f\n\xfa\x90\xa4 \x1dD*E;3}\xb1.\xcct>}(\x86\x1f\x9bi\x11W]\nR\xcb\x80\x9f\xfck\xf1\xe4\xda`\xdedz\xf8A^\xcc\x92\xd1\xe8\xc2X\xeb\xc1\xf3\xbc \x0dW(\x91}\x93\xde\x84y\x1c\xa6%\xfc)\xce\x92\x10)\x99\xd6WmJ\x8c\xdd\xb2(X\xe4\xe1\x8a\x14\x9f\xb2\x0f\xd9\x9aQ\x1a\xd1\x1f\xcc\x1f\x0e\x82\x01}\x16!OM\x9c\xae\xa4\xac\xeeW\xec\x0b\xb6bvaa\xa3\xd8\xa5\x8eS\xca8\x90`]\x15K7\xed\x10V\xab\xb35_\xacD\x9d\nW\xf2\xca@.\x0b\xe2tI\xf2\x98\x83\xed\xdd}O\xfd\x84\xb1\xe8\x93C\x1d\x03p\x1e}\xf2\xd4\xd8\x16e\xbf*\xe9M=?\xdaK\xec\x86\x0d\x91\xeb\xf9x\x0b\xc7'\x10\xc13\x10\x1c\xd0 D\xa3\x91\xbe\x88\xe2\xc8\x17\xb3H[\xc2\xa4io\xb6`\xcc\xb1Vt\n\xa1R \xa3\xc2f\x94|\xff \xb1\x80\xf9\x16\x8b\x97x\x9e\xccY\xd0\xef\xd4\x91U\x1c\xfb\"\x9b@\x89\xbbP/@\xa9\xec\x16\xb3,(\x83\x9c\x84\xf3\xf0*a@\x98\x1bi\xf0\x92S\xd8\x9a\xb4\xea\xdf\xe6q\xa9\xd6\xafKD}Z\x18&Iv\xfb\xefa\xb2x\xbf&)7\xbdS\x1bRk\xd4\xad\xb5>\xac\x9b\xcc\xd2\x88\xb8\x0eA\x83\xa8u\xf7r\xae[P\xc3\xd0\xf6\xfd=+\xbd\x14\x138/\xc3\x92\x04$\x9d\x13\xb4\xd6\xc9\x83\x94|)?\xc5\xd1gw\xc9\x86\xd0\xdd\xe9\xb2\xbd\x87%m\xcd5\x89\xf2\xccTb\"\xf3b\x8e\x18\xd7\xbf\xc7\xd7\xcb?\x87%\xc9\xdf\x86\xf9\xe7\x16 \xa9\x18\x06j\x86\x83\xfd\xa4\xa5$\xd5\xd4\x17b)w\xab\xde\xfdfB\x9e?h*sR\x94yvG\xe6\xad\xe1\x0f\x1e\xa2$\xcea\xa3\x15\xe7\x14G\xab |\x0c\xf3i\x8e\x98\xfaeP\x8f\x8d\xd60-D]Acu4a\xa12\x113@\xfe\xfd\xa7\xd0X\x9f\xd9&A\xabx\x1d\xdb)m\\p\xc9\xbf\xea\xa3\xfc\xb1C\x86?\xaa$\x11\x17\x16\xcf\xbe/\xdf#\xe2\xcb}\x7f\x13499\xda\xb3\xea\x8a\xec\xbb!\x8e=\xaetN\xd7\xb56\n\xeb\xa3\x8a7\x1c\xdf\xde\xc1\x9e\x01\x8f\xbf\x0d\xcbe\xb0\n\xbfv\xeds7\xde|\x02\xd2\x80\xcc\xe3\xd9\xb73\x88LZ2\x90\xb5\xfb\x87a\x10\xa7\x87\x1b/\xf0\xdf\x85A\x1c64!\xaci+\xc1J8\x93\xee\xa0\xcd\x19\xe3\xdb\x8f\xa8S\xc8\xb5\xb5U\xba\x1d\xf2-\xebg\x9a\x85\xeec\xf7\xdeb\xaeg\x16$\xee\xeb\x06\x96\x8c\x90>:\xf4\\\xa7\xc8#\xdd\xd4\x81\x92\xd3\xb5\xd0\xb6\xcc\x98\x1dI[\xfd\xe5:\x0e\x8c \xf4\xb8=\x8a#j\xca'\x06-\x08\x838-\xd6$*\xcf\xb3*\x8f\xc8\x90C \x08S\xe9f\xf96K \xc1\xa5\x87&\x12=\xb2Y`\xa4\xea\xa9\x8e\x10\x7ffn\xea\x83CYB\x07\xf5@q\xf3\x9b\x1e \x8a\xbc\xe8\xadm\x8c\x97\xa4\xcf\xaa\xe6\x8b\x8a\xd7;\x03\\\xa1\x92i\xb1\x8a\xe0\xd7,N\xdd\xda\xda\xd7\xc3\xf6\x90\xe2\xcd\xe1\xac\x86\x07p\x0c\xa1\xf8\xa9\x94\xc6\xcd\x818\x06wN\x12R\x12|\xefK\xaf\x14K\x8fF\xf2.\xd3[\xf56u0\xd2\xe2.\x1a\xef\x19e;894\xab\x90\xc1\x91\xf8\x08\xb9\xffot\x0d\x7fo\xc0\xb01\xd66_\xbd\x03\x93\xa2\xd9M\xdd\x83\x03\xcf\xc7\xf7\xe3\x86 \xb69\x98\x18\xaf\xe9\xe4@7\xf3\x0b\x8d\xaeT\x9f\xc9\x9d\xd9\xff''\x0b\xf3\x8b\xcb\xcb\x82$\xf6wx]\x8f[ \xcb\xe4%VX\xb7M&[\x83\x9c,\xa4\xcdh7\x13\x0dk\xe63\xb9\xd3\xf6\x14$\x96\xbc\x0d\x1ar!\x962\xc2\x88\xb6\xbc\x92>\xff\xf2/\xec\xf8\x1cC\xd5^\x1c\xfa\xea\x18\xca\xf6\x0b\xdc\x03\x83v\x1b\xb7 m\x97\xaf\xf3l]\x1cChX\xff\xec6%\xf917j\x12\x8f\xd9\xfbI\xb2]\x91\xc4\x1cA\x94\x93\xb0$\xaf\x12\xb2bn\x15}\x94 \x9e\xf1\xda\x17\xa25\xa2\x84\x9e\xc6*I\x0c\xb3\xe0o\xd4\xc1QZ\x83\xdfNY\xdc/\x1e\x14\xc3\xe4\x10\xd3\xc3CP\x03\xef\xae\xb9\xef\xc7\xc2\xf3!\x12\x85 3\x98\x1c\x01\xa1\xfb\xee\xf9 \x8bM\x03v\x84\x05\x1c8\xaeK\xda\xd5\x18\xf2Q+b\x19\x02\xa5\x8c\x810\xe6\xbb\xb7\xbd\x0d[\xa1v5]V\xeeV\xcc\x93\x11\xfd\x1fOZ\xcb\xb7\x84S\xd05\xe8\xb0\x03\xd3\xf6\xca0Y\xc7\xd2\x83*\x88\x96q2\xcfQ\xa4\xa1\xa1%\x94\xb9\xd2\xdaKx\x0e\x13\x13YQ\x0b\xb3\xe6\xc2\xac\xcd]\xd25bb\xac\x1bx\x06\xcb\x13\xb8\x19\x8d<\x98\xcfn.\xe4\xd1\xcdn`\x04S\x83\xfco\xec\xabc\x9a\xab'\xb05\x13\xee\x15\xc8=q\xe8z\xb5\x84\xe4\xc0\x97\x07\x8dO\x94\x9a\x16\xf1#\x9e\x8b;O\xdeD\\xi\x07\xee\xe8\x0et\x0cM\x08\x80\xe9ig\xee\x03c\xfc/\x0eP\x8a\x9e\x96\x14g7\x17\xc7\xaf/\xcc\xeb0*\xb3\xfcn\x90G\xa4v\xc9\x82\xab8\x9d\xbb\xdc\x07\xc9L8\x93@(\xd75/\xc5E\x10%YJ^\xa4\xf3\x8fL\xdc\xfd\x1f\xa4\x97\xb9n\xe6\x18p%\xbd\xcf\xa0,\xfd\x87\xdf\x03\xfa\x07?\xe7e\xc0\xa0\x8a\xcf4\xfb\xebB\x9f?\x1d\xc0f\xf0\xa2\xaa\x0d\x9brTd\x8a\x86\xdb@\x02m\x9b\xe8\x15n\xbfB\xc1\x03\x0e\xbb}j(\x12\xed\x9a\x8b\xb79\xd0\xa9\x14\xa03\x17@\x87\xdd\x9a\xfax\xc80h\xa9\xc3 \xb6\xde\xec\xe0#\x1e\x97\xcft\x0d\xb6\x0c\xef<\x0d\xdaT\x16h\xc3\xca\x15\x15\x11%\xb6T9P\x02g\xb0\xa6\xc5\xa7\x90\xd0\x7f\x8e\xc5/Z\xd7\x00\x9d\xee6\x84Nw\x1e\xac\x87@\xa7\xbb^\xe8t]C'\xbaz+\x06\x9dV\xf0\x0c\xeeN`E\xa1\xd3\xf5l\xa5B\xa7\x95\x05:)\x03\xba\x1et\xff\xf9\xddX\xfa0\x17@\xe0F\x95\x13\xd3\xc3\x1f\x17\x7f\n\x93xn:\xfe\x9bP\xa4\x8a\xbc\x88\x1d\x10AJ00&\xf7\xaa\x10\xc0\x7f\x80~\xe2T\xd2\x0e\x1f\x98Y\xc0\xdd\x83~\xa9@\x87\xb3\x03c%\xcc\xa0+wS\x8f\"P8\xe6\x87\xb0\x99\x8aq\xec\xfa\xc09%\xa6\xab\x8a\x8d\x04ef\x10\xd3\x0b\xc3R\xae!-H\xf9)^\x91\xac*a\x192\xb1\xc5\x15!\xdcK\x97\xcc\x9dn\x91|\xd5\xdfA\x94\x900\xff\x8a.B\xb3\xfc%\xc5s\xd0\x8c\xbe\xd6\xda4Et\xf9\xc6\x06\xc8\xc6\xbf\xcd(\xd3\xb5\x95\"\x880\xb4C\xf7\xb1)\xf6{\xda\xed\x94r\xa4\xec\x0b\xf5\x9a 9\x87\xd1\xa7\xd5\xdc\x1c\xb4l@8\x92l\xb5\x0e\xbd=\xb4\xdb\xe2\n,s[\x16\x10\xf1\xb0eg\x7f\xcdsHm\xb2\x04\xe9 \x9e\xc9?Z\xc4{\xa7\x80(\xad=\x18\xea\xfa\x03\x06\x95\xdb\x06\xa5\x1c\xde3\xf5\xe7\xb1\x04\x85\xa0w`\xb4\x8b\xca\xb6\x8a\xae\xa6\xa2-\x98\nu\xa6i\xfe\xd1\xfeV\xd3@Q\x0c\xb931]\xfe\xb6\x8e\x8e\xf9? J\xe4M\xd5\xeaY:9z\xe0\x83(K\xa3\xb0t#\xb4/\xc4\xb6}\x88D\xa5\xedmX\xba^\x9f\x96\xcet]\xb7\x166j\x96\"\x89\xd0]\x1b\xd4\xe28F\x83uC\x8d\x0f)\x01\x18\xd5\xfaerb;\xe7\xf8\x01\x85\x92\x91X\xd7\x13\x18\x8d\x12x\x86\xdf\xe0\x82\x14\xb3\xe4\"\xc8\xab\xd4\xb5X\xbc\x8a\xa5\x90\xbb\xec\xb9%\xc0%|\xec\x8e\x9a\xf6N\x865\xbc\x92\x0b[Jk\xbd\x1d\xdeP\x85 \x90\xf1d\xc6F\xe9\xa9\x95_\xf8\xc3\xbb\xb1\x830\xf1\xe4n\xd9\x864\xe2\xe9\x87^\xe2\xe9\xef\x08d\xb5\x83\x0c7\xed\xdd\xc3FC\x80V\x07\xc2\x1a\xa0\xbb\x03\xfb\xec\x8do\x1e\xf4\x05{\xe8\xbc\x89s\xbb*qQ\xa5\x92&3\xa44%%x;\x9b\xbbq\x15\x8b\xd3\xb8\xd6:\x0e\xe2\xf1(E\xc0hW\x03\xed<1`\xe9V5J\x1d\xdba\x01\x9d\xcf\xe4\x04Rx\xd6\"\xceO \xa5\xc41\x99\xa5\xb4+\x95@N5\xe28\xe2ZVr+\x96\xcf\xf3a\x82th\x0d\x05\xef\xef\x01\xa3s\x84\xeeR\xa1~\xe7\x92D2\xaf:=\xa6\xc4&p\x9bs)\xde\x06\xee\x85\xd2l\x1c\x94q\x89\xd6\x1f\xceU\x9e\xdd\x16$wh!\xff\xbb\x89\xba\x94\xde\xf0\xf0\x1bq\x10\xe6\xd77\x0c\x7f@\x1cp\xbbAd\xbe\xa4\xdfE]\x1b\xdf\xdd\xe0w\xf3\xf9OqQ\x92\x14\xdb\xbda/Q\xd9\xc0\xfe^,\xc4\x9f9Ye7D\xaf\xccJ_$\x89xQ\x887d\x15\x97\xe2\xefuN\xd6$m\xf5\xc4\x8b\xdf\xa7Q\xab\xddDj\xae\x97\xa1\x98]\xa8\xabw\x15\xa7\xf38\xbd\xeeVR\xe9T\xeb:\xcf\"R\x14\xf5\xc7\xb1f%\xedh[\x14\xdd\xce\x07x\xc89O\x1c\xed\xb3\xe5\x0f\x18\xd9&\\\x88\x91R\xe22y&\xc8\x81\xb3\xe1\xbd\xf9\xd3\xab\xcb7\xef^\xbfy\xf7\xe6\xd3_\xb0\xc6\x04\x9e\xd8V\x9a|)I\xda\x8a\x8bh[\x02\xa6\x9dk\xd3Q6\xf9-.\x0d[:7S-\x9f]\xe2y\x0d\xed\x04\xcf o\xd6\xae\x9c\xc5\x94\xc5\x9e\xa5\x17LD\x1a_|\xfb+$J%9\x9d\xd9]\xa5\x15\xd4\x8fYj\x8c=\xd35\xac:5v\x063n1\x95 N\xa3\xa4\x9a\x93\xa1\xa1\xcb(\xa7_\xf7\xa5\xbc~\xe0\xc6\x0fC[2D@3\x8c_<\x84\x85\xc7C\xe5.\xfdk{[\x84\xc6ce\xf8\xe7\xf66\xe4\xc2\x12\xbd\xd5\n\x1d_\xca\xde\xea\x9c\x06\xbeY\xc4IIr\xb7\xf3-IN(\x11\x17\xa2\x17\n\xfb\x06\xc11z\x0d, \xd4\xe3\xa740d\x0b\x08\xa1\x88\x96d\x15\x06\xf0F\xbcb\xf1\x0d)>\xc8\x16PT\xd1\x12[(Z\xc4a\xe0\x18\x8e\xe3\x12C\x1b\xae\xd6qB\xe6o\x9a\x95\xab8\x0b\xeb\x88\x018>\xcc.\xf4\x0f^}i\x7f \xd6\xd3\xf8\x01E\xcco\xc3u\x17E\nB0\xc4n\x90\xd1\xae\x80>l\xb1\x8e\x8dZv|\xcf\xc3j\xdak\xf0`\x9b\xf6\n\x8b0I\xae\xc2\xe8s+V.}d\x89{\xfdA\x07\xce\x17O:cW\xf1b\x86\xd7\x94\xf9P\x8a\x9e\x9a2C\x0c\xc3vw\x14\x90\x97\x0c\x90\x13\x83Z\xea\x04J\x86\xf9J\x0e\xbd\x1b\xc6W\n\xaf\xa8k\xff@\x12\x0d\xab\xe7\xc55\x9e\x16\xcb\x99\x90/\xb7\xf8+\x0c~|\xf5\xfa\xc5\xcf?}\xaa\xe5b\xa1`\x19:N\x848\x0d\xea07\xf1\xb5\xef\xf2\x80G\x01\xa4\x18\x97\xb6\x8e\xb3\xb1AyF\x9f\xab\x9c\x84\x9f\xdb\xaf\xba\x9c\xe1K\xada\xbd\xab\xc9f]q}\xa8\xa5/\x19\xc8\xfc9\xcf\xd2k`\x9e\x81\x08AD\x97x~\xce\x194\xe1\xbbP\xb3v]F\x01\xcc^\x81\x02vN\x0c\xd6N\xceM \xf3\xe5\x0b\xc8\x0d\xc9\xefz\x80\xa7\xc0\xb3\xb2\x1bN\xa8\x01*\x0dn\x9e\xd7\x916\x05XDn\x88\x83\xc6\x02\xdc,\xa7\x802N\xaf\x13\xc2g\xc8Mq=\xca\xa0\x95a\x9c\n\x98\xab\xbcm\xf9\xec!wA\x1e=\x8dl\xd3i\xd4\x81B\xb59P\xb8i\x9b\x81\xf4\xae5~q\x8f\xc9-\x84\xae\x01o1\xf4id\x89\x05\x1c?\xd6\x1d\xd3\x14\x11\x83\xcc\xa4\xb1M\x1bj\xab\xf8\xdb \xcaP2Ho\x05\xc6\xe4\x81Om\x16\xe9\x83}\xf9j\xcdl\xe9C\xac\x83\xad^},s\xee\x16\x06\xa1\x9b\xb2\xaf\x9a\x0e\xce\x0b\x8a$\x8e\x88{\xe8\xc3\xce\xa4o(\xdd\x0e\xf5{\xbb\xff+\x1d\xea\x87-\xeb?\x80\xd5\xf9\xb7:\xf7\xfb&?U\xe6\xdf\x12\xa7\x8f\xa3\xec\xb3\x9eC:@/+\xb7=\\7+\xf5\xf1\xa3&F\x1d4z\xfaQ\xcf\xd8\x91\x86\xda\xb8a\xfcJj\x19\xc3\xc1\xc8\xb21\xac`\xeaO8\xdc\x0e\xeeR\x81\x9e]G\xe6C\x1e\xaf\xe22\xbe\x19\xbcL*\xa1i\x04\x1d\xf8\xc2p\xbdX\xfc\xc5\xf6\x05a\xe5\xed#\xaeS\xb2FPW-\x16x\xe9\xcb\xfaG]\xed\xc1\xab\xddaR\xf7\xe0\xd0\x0b\xd8{\xb3@es\x0b\x06\x03\xe9\x8e\x1b(9-s=\x80\x08\x06\xf6\x97\x17o\x7fz%\xc2\xae9u\x82\xaa\xb0\xc8d\xdb\xc3U\x98\x7f\xe6\xa6?\xf8\x93\xc7V;mb%\xd1\xfat\xcd\xdc\x8a\xa7`be\x1ef\xb0p\x9bF\xcex\x02\x8c\xba\xa4\xc6b,\xf7\xa4\xe3\xf9\xf5\x90\xd7e\x95\x93\xf32\x8c>\x7f\xcaCth\xb4\xbc\x11\x86\x9cK9\x01X\x86q\x88\xb1\xac\xa05\xd1EYXhy\xbc\x8c\x0eY\xb2\xf6\xaa\xff\xca;,\x9c\xd8 \xe4HZ\xb9\xd5\xf2&W_\x8a\xb9\x0e\xa3U\xea}\x1a\x81s\x0c\x8e\x91f!h%\xd1\xb7 >l1\x07\x9dz\x1f(\x85C\x9a|$\xa6\xed\xd0s\x0b\xca\x94\xd6\xa0\x84\n\xbd\xf6\x026\xf7\x1d\x96\xcdK]\x95Z\x08>K\xdd\xe9x\xeaiV\xf7B\x01\x8a\xef\xf7w'\xe8\x88\xbe\xbf\xdb\xaa\xd7\xc8\xcb\xb1\xde.\xaf\xb7\xc7\xff\xdd\xe7\xff\x1ex\x92\xc5\xcbc\xc5\x9dv/\xc66(S\xcc\xda\xdc lCip,\xd4\xcc\xd6\xdc\xa9\xa5\x9ed\x00\xe7\xeeY\xeap3;Mm\xa0\xdd\x85!ru\xcd\xc4.\x17\x82\xcf\xb8\xa3Q\n#\xc8\xbd\xe6\x00\xef\x1e<>\xae\xce\xe3\x03\xfapV\xea\x11a\x89$%\x8a\x1e\xc4\x84\x87\xf7oE\x1f\xcax\xb9\xce\xb0n\x10=\x99\x05\x8c\xfdg\xf4\xe4\xea\x9bDO6\xdd\x8f\xbfOPa\xd3H\xf0ZF$N,7v\x91dY\xde7:\xcb\xd0\xe2\xe2]\xf8\x0e\x15\xce#\x14#\x8c\xe1\x18\\\xa1\xc1\xc81OZ\xbfD\xc1.\xaa\xe9\x0f\x10\xdcw@\xd5\x10\xb4|\xd4\x9a @X+\x18\xad\xb7\xba\xcc\x13xs\xf5h\xac\xe6_R\xe5\xb2!\x05\xdb\xf27\xfa\x18D\xd7]\xa6\x0b\xad1\xf4\xe4Nh\x0f\xc3\x1a\x9b\xdf6\x92\xdd\xe1#Ah\xb0\xe1`\x14E\xaf\xfc\x0c\x90N\xd6\x9dw0\x0e\"\x9b\x00\xb1\xa6\x12\xd8\x04\x1f\x0e\xbb.qoB\x99\xded2\x8f\x0dTf\x8f\xaefQ\xdaO\xc6\xbd\xb7\xce\x02\x0d\x1e\x15\xd6\xae\x8f^l\x85\xfc\xe2\xf2Z}\xf0\x0c+\xb62\x06VbNm\x19m\xea>\x16\xbe\xdc\xf0\xa8:\xa1k\xa4\xd7\xb0\xed\xca\x87\xc2\xe7\x99\xf0\x0c\x95(\x1e\x8efcC\x00\xe9\x04\xdf\xe8&G\xd9\xb0\xcc{\x1d\x9a/2+.\xba4\x9fZu\x83q\x80\xcf\x8c\x12xv\xbf\x96\xc5(\"\xcf\x98\x07\x00S\x1c\x17|X y\xc0\xe41\xf2\xab\xc2\x87)\x93\xb5\x9eu\xe3BhF\x96\xd4\xf8\x90q\x80\xfa@\xa0/\x16\xa9\xb1\x1d}6}\xc7Xn\x98\x91U\xbf=\x18\x15\xd0\x8f\xbf\x04\xc3.\x9f\xa2\xeb5y\xf01\xedo\x13p\xfd# \xa3\x92\x07L\xff?\x0e\xcf\x84\xec\x9c\xc0M\\\xc4%,\xcbr}\xfc\xe4\xc9\"\x8c\xc8U\x96}\x0e\xae\xe3rY]\x05q\xf6$\xa7\xdf=\x99gQ\xf1\x04?\xde\x99\x93(\x9b\x93>\x81\x9c\x999\xe6\xa3\x91\xc7,\xd5\x9d\xed0\xbf.f\x17X\x8f\xa4\xb4\x89\x9f?\xbey\x99\xad\xd6YJRY\xaf\x96\xc3\x08&\xba\xf2\x8c\xb5\xa1\x06\x7f\x17\xa2\x89,\x1f\x1e9\xbe\x89\x1a_\xf4\x87\x8b?i]\xff\x18\xe4\x10\xee\xba\xaa\x8e\xc1\xf4\xb83\xfa\xba\x0fq;\xacz\xdcs\xea\x06\x9d\x1b\x89\x82\xb2q4\x8f`\xe5\xebb\xf1I\x87\xf7\xcc <\xac^\xb8?\xb4\xff\x12\xeb,\xb7&\xc1\xb78(\x97a\xf9\x11[+\x98\xd8E)z\x1d&\x05Z>\xba\x18H[y\xf7)\xaf\xf8\xab\xb1\xfe\x8a+\x17r\x11\xcfW\xfdn\x19w\x9a\x8f\x88\xb9)\xf9\xf6\xb46^\xf0\x03>\x04\xa5\x9a\xfdO\xe0\x94\x1f\x94\x8d6P\x94v(\xa5\x9e|\xbf\xa5n\xd7\xf7\xf0iI\xe0\x8a 7W\xd9\xbcJ\x08,\xf2l\x05i6'\xc1\xaf\x85__D\xee\xf4\x1ah\xdf\xeb\xcd\xfd[X\x95\xcb,\x07\x80\xd7$\xcf\x8a\x02^\\e\xd5\xe7e8\x8f\x7f%Kx\xb6\xc0\xc2\x7fc\xff\x04Y~\xfd\x1c\x9e \x88\xd4\x94\xb5\x1a\x15\xf6H\x8aA\x12{\xf9\xa4uu\xb9\x1c\xaa\xc5?CC\\\xb4\xb2\xe4A\x93X\x0f\xef\x94\xf2\xb2\xbe\x10\xed\x98+\xd0le\x11|\xfa\xcb\x87W?^\xbe\xf8\xf8\xf1\xc5_.\xcf\x7f\xfe\xf0\xe1\xfd\xc7Op\x06\xd3\xc9\xde\xd3\xbd\xc3\xdd\x83\xbd\xa7p\x0c\x93\xf1\xd3\xdd\xa7{\x93\xc3\xa9\x96\xef\xd6\xd2ah\xc5\x95\x94\xe2\xa4\xc3yF_7\x86\x17\x1f\xc3\xf4Z\xf0\xc9\x14(%\xf1\x1cI\xd190Os\x865:\xcc+l\xb3p\x85\xbd\xd3\xcfqZ\x1e\nCc/\xb8\xbcDl\x7fy\x89!,\x1a\xf9\xea\xb1b*\x82l7o\x00}\x9c\xe8a\xe7\x18\x8c\xe5\xb8\xd3\xa1\x85y=\n\x1b\xc5\x06\xc2\x88\xcb5O\x80\x07\xc4\x97\x95 \x85\x9an\xa0i\xba\xbd6H\xde\x1b\x14\x0d6\x12\x0b\xeb\xb7\x15\x10\xcaN\x89MZ0\x1c\xc9=\x9d\x8b\xda,\xb9\\\x12\xe6\x86\xb2\x88\xf3\xa2\xac\x11?\xac\xaa\x02\xedgB(Z\xd1j\xe5G\x10A\xf6x\x08\x0f\xb63\x105\x01i\x0cr\x1c\xcb\xd6Db\xfd,\x0c\xaae\x0d\x89\xd9l\xe8;!\xb5Q\xe7\xcdm\x87BnR\xdf\x91~\xda\x9c\x89\x16\xcf-W\xe5lo\x03\x91\xcf\x83\xfc\xae\x1dK\xbb\x83\xedFW\xbf\xe0\xea\xae$?\xe1\x89\xf6\xd1\x0co\x0c\x98\xeb\xba)\x86g\x8d4K\xbf\xaa\xdfe\x8bEA\xca\xef\xe8\x11\xc8*4G\xbf\xca\xaat^\xd8vW\xef\x936\x0e#p1\xf7\xf0\xd8\xb3\xf6\xc3\xee\xdc\xf0~0\x00A#cI\xa5\x00n\xa7<\xf0o\x0b(\xd4F.\xd6*x\x81\x8fM\xc5t\x99\xcd#\xe9\x04L\xa4\x0b\x10\xd1\nk\x06H;\xaf\x8a\xc1\xd0O\xd9\xfdc\x93R\xb1\xc5\xd8tx \x1a>\xc7\x05\xad\xf3\xc9\xdf\xdf3\xe7P\xa7*\x17\x87][\xbfU\x04q\xf1\x8a\xc3\x0d7\xb58`\x7f\xe7\x08\xd0\xe2H`\x83!\x056\x94\x1a\xf6\x98n\x12H\xf8t\x0c\xf70g\x1bg\xf6\xd7\x02\x8e\\]\x16T\xa8d\x86\x8e\xb7y\\\x12\xd7\x02U\xd9'u\x96\x02\x97\xf9\x042#\xfc\xb1\x0f\xb1\xf7\xe8\xed\xf2\xfaL\x1f\xc5C\xd7\xb2\xa8\x15\xba\x141uH\xb3j\xd5\x08\xdc\xc3\xd2%\xc2\xe7\xc9\x166c\x08\x906\x9a]Iu\x82\xb8\xf8SLX\xda\xfdv\xb1\xc9\"L\xaa%\x8f\xb4!0\xdb\xa3\xad\xa9\x99-\xd5R\x0e\x11\x1dK\x1caX\xe2\x9b:\xd9f\xd7*pj\xb3\x1eIW(\xc2\x1c\xc3\xfb\x9d\x9cx\xb5\xa2\xcf\x8a Q\xbd\xe5\x84E\x14\xc7\x8eY\xc9\xc5j$a\x19\xa7\x93\xce*Wq\x1a\xe6w\x96* )w\xcd\xe8\x845\x82d^W/U\xb9\xd8\xe9\xac\xc1\x08\xed\xdeQ\xfc\xec\x96\x9eu\xc1\xa1\xe9.*\xa6\xdd\xe3\x89\x8a\x9d\x9e\x1a\xe5br\x90\x90\xbe:;\x1d\x95\xa0\x19\xf7\x14\xbe\xef^\xc1%\xf9\xd2\xdfJ\n\xcf\x9f?\x07\x83?\x114\xdb\x19\x16\xe4`\xaf\xbf\xa9\x1f\xfa\x16\xb2\xd37\x1c\xa0v\x0c\x19\xba1\xc0\x990\x96\xac\x86Ph\xf6SvK\xf2\x97aA0\x03\x19F\xa1k}\xaa\xebR\xcd\xe0\xeb\xa6\x8bc\x11w\xab\x9c\x11\x03\xec\xe7F\x14\x14\xfd\xf9\x02 \xe6\x83:\xbd\x93\x98*\x8b\xfe\xb8\x01\x01eM1\xf2\x05\xdb1l\xa3E\xdc\x92R\xee\x10\x85\x81\xdc?\x0eyNx.K\xe4\xce\xf0\x8d\"\xa2\xa3\xd8}\xa7.9D\x90F+Ie\x1ekp\x94\xfa\xdcB\x82\x852\xc6j1G\xce\xa5\x1ccQ\x88\x04D\xa5\xfa\xe5\x08i\xfd\x94\"\xc0\xb2#\x88\x82\x98e\xdc\xb9\x0e\xc0C\xe0\xc8]\xb7OF\x13\xf6h\\\x99\xc2J\x91\x86}\xda\x99\xc01\\k'\xcarB\x8c\xc2'\xde0\x81m\xa4u|\x8b\x9c\xc1\x86t\x1b\xf1\x85d\x10\xcac\xee\xc0\x19\x1e\x86\xae*\x8d\xe5\x0f\xe7Z\x8d\x95\x93\xb0(\xdfX>\xc0\xb9c\x12%\xfb\xec\x8d\xbc\xcbM\x98\xd4\x84\xbd`WD\xa0\x8a\x9c\x93W\xadP\x14\xe6\x1b\xad\xaf\xbf\x05\x98d,5\x8b%\xbc_(\x1d\\s\x8dB\xa2\x82\xcd[,\xa5\x16`\"\x05\x86\xd1\x18\xffM!\x01'\x04s\x0d\x8c\"=\xc4\x91\x1b\x17Za\x01\xc7ej\xd1\x8eTf\x95\x17\xc4,*\x91\xa0\xd8\xa7L\x18\xd8\xfc\xee\xbdWt\xa5\xa6>\x84\xf0\x04\xff-\xf8\xbf)\xfek\xb8o\xad\"M0k\x1b(\x1f\x06\x0b\x17U\x89\x8c]\xc7<{\xee\xcfo\xd2rr\xf0\xc3+\x97\xc0\xf7r\xb6\x11\xf1\x98\xef\xb9\xd5&H85\xda&\x8d4\x1d\xaaaN \x83g\x10\x9e@6\x1a\x99\x992\xe0\x9d\xe1\xf42\x0f\xc7\x1fQ\xf0\xc1C_-8\x1c\xce`\x07\x16\x9dr\x1d\xd1R\xfd\xa1\x88\xd2\x9dy>\xfb\x1cF|\x81\x8az\xdf\x16tA\xacMr \xbb\xc3\xc2\xd7\xb2\x163\xd89\xe5\xa3\xf1\xf9*X\x80\xb3}mR\x18A\x01\xcf!\xac1I\x08;P\xe08\xf9\xaa=Gf.\xdb\xd9\xe9\x9arM<'<\x88\xed\x9a\xf1\x80kx\x06\xc5 \xac\xbb\x16\x1d\x94\x85\x87\x11\xac=\x16\xa4\x97.\xfe\xbaw\xa5\x81\x9b\xc0\x98\xfc\xbb\xf5\x07\xe3\xeft\xd62\xcbq\x80\x0f1\xa9\xb7+3\xd6\xb3j@vt7k3\xe0[\xf5h\x07\xe8\x061o1J!\xdc\xdf\x9b\xf8\x18\xa1\x04\x97\x90\xb6\x81\xe2\xcd\x05-\xc3\x9b\xa3\x90\xe79\xc4x\x0chqLq\x01\xfea\xee!\xeb\x85\x9d\x19\xfc+L)/7\xb68r\x0bu\xe2\x92|\xe9P=\xe5\xf0\x1c2x\x02\xd3zh\xf8\xabK\xfeP\xb1\xb3W\xb1h\x87\xa3Q\xd5\x05>(\x9aX\x87yA\xde\xa4\xa5K\x82\xa2\xba*\xca\xdc\xa5|B\xe5\xc3\xd4\xf3ar\xd0!7g\xd4\x9a$(\xac\xccu\xcb\x19\xbdi\x98\x8a&\x1c\x00\xf4Dc\x83\x0e\xcde\xcf\xa1\xe1\x8d\xfd\xd5\xfd\x19s\nK\xc7\xc2C\x95\\\xdb\xa0\xd3\xd6\xd3\xd5\xd0\x9e\xec\x06\x03u\x9b\xb2\x11\xd2\xecB 8Q\xb3\xf2L\"\xc6\xb3\xed3\xc1Q\x19D<\xe4\xc4\x8b\xd2M{$\xfam\xc0\xf7\xc0dy\x9bL\xfav\xd8\xa4\x95\xb5\x19\xd4\xf0\x97a\x0d\xff\xd5\xfda\xf3A\x9f\x0fm{\x90VC\x0e\xec\xc0\x83\x93\xf2]\x93\xaeZ}\xb0\xb6\xb7a\xcbu \xc5NS\x0f9\x02~ \x19+!\xed_\xc5\xf9M\xcaO\xc3!\xcb\x84\x93R\xb0\xb1\x7f\xe0C\xc6\xb6=\xf6\xea?m\x9a<+H~\xf8\xda\x03\xff\xaa\x8b\x9fUY\x08\xf4\xe9TXL\xf4\xd5\xa7<\xc8\x0fw%\x91<\xa2[\x85\\E\x85\xfd\x0c\x1b\xd7\x8b\xaeq\xa5RL\xa1\x9af\x1c \xb2\xc5\x10\xf3\x18\x83\x1ab\x14\xddv\x81\xcd\x8c\x85\xf8\xf0E~\x93r\x16\x1bLS\xc5\x83N$\xc6L\x89\xe2A#V\xcaJ\xef\x1e\xc1\x19\xec\xc11\xfb5\xdd\x853\xd8\xe5\xbf&G\x138\x83)\x1c\xdbD/\x08\x91a\x04 \xad\x87[|\x83\xe1Z\x8c\xf8\xc5#\x8f\x8f\x81\x05\xf6kz\xe1kS\xc9p\xf4jY%\xcdh\xb2_\xcfh2\x85{p\xc5\x9c\xe4)Vt\x8a\xd3\xf1\xdeS\xfe\xdd3\xd8\xdf\x9f\x1e\x1dP\x92\x88\x92\xb3\xfbOw\xf7v\xbdo:\xff\xbd\xc7\xcf?\xac\x7f\xedn\xb0\x1ajYhY\xa1Cm\x85\xa4%\xab\xd4%\x0b\xe9\x92\x1d\xec\xef\xef\xee\x03\x06\xf4x\x06\x93\xc9do2\x99J\xcbd\x9c\xa2\x99$\xae\x8d\xb1(_\x84\x9f\xd3\xb6w}\xbc\xc9\x18tl!\xf7\xe7.(>\xa0?\x0f|\x11\xb5x\xc1\xc4\xa8c\xd8\x86\xc9x\xba\x0b\xf7l\x1397\xb3\x7f\xb0;\x1d\xc3={\xb5\xcd\x0c\xc2\xf9w\x1e\x05T\xa3SH\xda\x10\xdf\x06\xa5\xfb)\x12A\x8c\xd8\x15 \x14\xe3\x14\xbc\xbc\xafI>C8,\xee1\xc2\x13\x85\x1b\xf5\x16 \xe9.\x1c\xc7\x0e\x18s\xb32\x10\x04\xf4\x16\x06\xd3\xdcXz\xc0`8\xba\xc9}\xa6\x9a{\xdfCD\xa5\xedEv[\xe8S\xfeE\x82\xda\xb7\xbd\xf0\x81\x04\xe7Iv[\x97t\xef\xc3\xa8l\"\xab`,\xdc.\xbbBT\xdd\xb9#S\xa0\x837\xef\xce?\xbcz\xf9\xe9\xf2\xed\x8b\xff\xef\xf2\x87\xbf|zuN\xcf\xd3\xd8&\x8b;U\x93)\x9b\xcd\x82\xcc\xe5=\xb1\x13\xed\xf9\x8cn\xa4\x88o\x92\xc9\x92\x9e=G<\xb5\x02M\xb6J\xb2\xe3\xb4\xba\x96Y\x00\xd8\x81\xa8\xb3l@8H\xf1\xf0Q\xed\xb5\xe5G\xe21\xc3\x8e\x07\x1f\xf6\xa6\x9cVZd\x99\xebY\xc5\xa1%e\xc8\x98\xa5\xe9\xf6\xb6p\xeb\xad\xcb\xdc\x89\x0f\x13OR*\xb6\x8fjg\x0c4h\xe6\xb0e\x90\x9d\xa8\xe7\xca\xf5\xe8\xc9\xfa\xfc6\xfc\xc2-\xe4P\xc5L\xcf\xd4:\xcb\x92\xf3\xf8o\x14x\x1cN\x8e\xa6\xb4\xe82\xac\xae{M\xb6\xc1\xb6\xb1\x85\xe2\x0c\xa3\x1fo&\xd8\x1e\xe0u$\xb5\x1f5\xe9\x05\x0d\x16\x98\x1dBjW\x1a\x8b2F\xe3\xb9\xa237\xd6\xf1-\xf6\x93<\x9c\xcc\xf66\xff+@{U\xc2\xf3\xb8\xa9e\x17LbF_\x99\xc3\x9c\x16\xbe\xd6\x8a)\xe0)wh7S\xa3\x9d _\x1e\x98\x1a\x01\xc1\xcef\xab\xbf\x81\xed\xa7\xf8\x02Y>D4ca\xd6$\x1bB2\xf3\xbe3\x93\x05`\xde\xd4\x0f\x161\x0b\xea\x86\xc6\x86j\xa1Tb\x00\xf0}\xa7\x05\x17\xe1\xe7\xb4\x08\x17\x83\xe3\xafX2\xb5\xe9\xcdQl\xf1-\x9a\x94\"\xac\x0cjk\xcbmb\xa1\xdd\xdf\xc3V\x19\\\x8a&\x0c\xadG\xd9j\x1d\xe6\xa4\xcf!\x1bd\xf3\xca\xdar\x03\xdb\xd7\xf4QF \xd9\x8b:\xba\xb7P\xac\xb0/\x8c\xb6&\xcc\xf0Eu\\\xee2s\x90\x15{\x8c\x0d'\xf5\xaf\x98\xc5\xa1\xcfdN\x92\x99\xd2\"k\x98Q\x86\xde\xe2t\x8b\xc3\x98\xc5\x17xD\xc9,\xbe\xe8B\"\xa9\xe0\x1cY\xff\xad\x0c$\xf2c\x97\xddZ\x89>\xccw\"\x94zh\x8e\x04g0Q\xe2\xe1Bs^\x84\xf9k\xef\x89\x11l%W\xfe\x94-\xe5\x8fy\xc2}\x06\x06\xdf\xca\x84\xe3\xbf\xc1\x1ee\x80\x8d\xc3?\xa8\x01\x88) )\x0c1\xb3\x18L'\xf8u\xe6\xd5\xc1\xd0!\xb3\xa6\xbc\xfa\xceI\xe2\xa24\x99N\xf2\xe0{\x90-\x04P\xb0YQZ\x0c\x1f\x04\x01m\xa2\xb1\x11>\x98[S\x02$\x18W\x0b!\x0ca\x10\xa4C\xaa\x8b!\x89f\xe9\x85\x95\xdd\x12r)\x05=P\xbch\x86;f>IO\x1d\xa5\x8d\xc2N\x9cW\xdc\x18\xc5\xce\x06\xca \xbc\xfa\x9d\xf6\x8f>\x153\xe6FM8g|E\xf4\xd6\x9e\xb3\x08\xcd\xb9mEg+dg\x8fS\x98\xfb\xa0Pz\x12\xfa\xdc\x1a\xab\xef\x8a\xdbp=9\xe8\xf3\x0c\x17\x0c\x0e\xc6\x8c\xea\xd2\x13\x95F=\x91l\xae\xc9GRP\x12\xbb1\x1d^UI\x19\xaf\x13BWpr\xb0s\x15\x97F\xb4\xa8(\x1a\xc6'h\xbe[\x9e\xb0\xe37\xf5\xe0\x86\xbb&\x11Jm\x8dZ\xd9KA\"\xd1e\x17M\x10\x8b\xa8.\xcb\xee\xf4\x9b.\xcb\xdeW.\xcb\xee\xf4Q\xcb\xb2\xd7Z\x96]\xcfo\x8a\xe82\xb1\x7fLZ\xb8\x0dV\xeb`\xef\x9b\xae\xd6\xe1W\xae\xd6\xc1\xde\xa3V\xeb\xb0\xb5ZO\xcd\xabu\xa0\x15O\xd9?\xfbZ\xf1.\xfbg\xef\xf1kk\x8a\x1f\xd7\xb5\xbah\x9e\xdc\xb5\xc2\x8a\xa6\xa3\x8e\xaa\xc5~\xb6\x02\x08\x9c\xc1\x0b>\x9b1\xa5\xcc\x07\x84\x87\x92\xc7\x93wh\xf2\xe9F+\xf8\x07\x8d`\x98\xcd\x99\xb0\xfa\x1a#\xdb\xf4\\\x9eO\xe3Q\xe2\x0ck\x17\xfd\xa6R\xbd\x91\xda\xd4N*D3<\x8a7\xcda\xb69Y\xc1\x10j\x15\x06Q\xac\xe2\xe1\x9d\xbf\xd8\xa4\xf3.:W<\xbc\xdd_7i\xb7\x93:\x86a\x14\xb2xx\xff\x9f7\xe9\xbf\xd7v\x18\x9a\x86_m\xd2p\x075\x0e\x83(r\x18H\x95\xc3&\x9494\xb3y;l6\xbd\xc4:4v\xd1F\xc6\xfag\x1e\xf9Rx+\x1e\x83\xcd\xbd@~J\xe6\x8e8\x02\xc7\x19j6\x0dF\x9a\xec\x81\x8b\xe4\xd9dmA\xa5T\xa0N\xfeZ\x85Iw`\x170J\x1bzd\x0b\x122\x146\x9a\x9d\x88\x87\xe3\x80\xfb{\x0e,kY\x88\xd9/\\\x9bE\x9c\x16k-xr\x17f\xb2)F\x98\xffRK\xca\xdf9p\x81\x9f\x9es\xb3\xe9\x9a\xae\xa8\xddy\x10Fr\x7f\xc9`\x15\x96\xd1\xd2}\x12\xfc6}xr-2l\x80#\"\xe3\xd6\x8d\xf1\x10\x80,\xc8L\x10\x04\xe0x\x9e\x0f\xce3No\xd4\xe1r\x9e;]\xebb\x91'\xf5\x1a\xb5\x7f\xfb\xad\xd6y<\x05\xb3\xea\x9e\xdb\x0c!\xa2v\x84/\xc8\xb1^/\xaf\xed\xb6\xb4\x17\xcc\xd6,naT\"|\xdd\x11\x03\x8bv\xef\xefQ\x80\x83/b\x1d5\x9b)>\xee\x8f\x9e\xd3\"@\xfbh\xdb|sx\xce\xc7C\xe8_\x9dnBM\xfd^\x17\x02\xad1{-\xa4\x03|H\xeb\xbf\xf2\xfa\xaf\xb8\xfe\xab\xb9|\x83\xc4{\x19\xba\x0e\xec\xd0\xd3\x83!\xcd`\x87\x1e\xa7P\x96\xe8e>T\x1e7\xdf\xc0\x00\xc8B/\x18s\x15\xacb\x99\xc24\xbb\xe3\x13H\x98!\xedh\x94\xd8%\x80\xd1,a\x12\xc0\xc5,\xe9\x94\x00f\x18\xbc,\xe1:sZ\xdb\x0e\x83\x1f!\x01\xcc\xe0\x19\x1a!\xa3\x04\xb0\x82g\x90\xd9%\x802\x94\xc2(\xc2C\"\xbbI}q\xe3\\\\J\x91%\xd7.Ao[\xf7o\xd4\xd9\x9d\x1aR\x03\x03\xaavu\"\x99\xfc\x7fmG\x93\xce\x8e\xd0C\xdf\x0c\xc7l@L\x8b\xb9Y\x93\xb8L|$\xddt\x9f\xf3_\xadVj\x0f\x14\x1d@\x99\x83\xa6\xe4,J\xf9F\xad\x9b\x8f0\xc2\xe0\xb8x\x1d\xa7\x18\x97\xc03\x04d\xe1\xae\x92,r\x81p\x8c\x10\x84\x87\x0f,P\xc7\xcc\xe7\x91t.<\x16\xc9\x11\x92,\xbd\xa6\xfc\xaa\x88Fk\x0f\xa8q\xcf\x00\x85\x18D\xea\xc1\x19\x05\xcc\xac\xd8\x08\x899\x07Ay3\xd9\x9f\x89\xd5\x1db\x94_\xdb\x18K\xa8pGO\xea\n]\xacU,98\xc9\xc1{\x9e\xd7NM\"\xe2 \xe3\xef\xf0\xafA`_r\xeeeg1\xab\xca\"\x9e\xd7A\xa9\xec\xf1I\xf2:\xae\x805^\x86\x02^U'Q\xabJo\x08\xff\xc5/\xdbJ\x0b\x94c\xde\xf2^\xd6k\x18\xdb\xc5\xfb\xbc\xdc\xa0\xcf>\x8e\x8b7y\xb5A\x93_\xab\x8a\x80\xa6\xdb\xdb\x0d\xba\xed\xe5\xb1x\x9b_6h\xf3\x1fN\xd9q>h\xf0\xbd\xdc\x14Z\xf3o\xc4I\xd9,u\x01\x98A\x13s>\xd5\xbd\xa6\x98\xc2\xb1\xdf\xf9T\x97v\xfd\xdf\xf3\xf7\xef\xfa8\n\xbe\"\xe6\x1bJ\xdb9\x06\x11\x0c\xc4\xccr\xcc\xc32<\x06\xdd\x93\x0e\xe9\xa3&oFp\x19\xe6\xb9\x88\x0d\xe6\xf7\xc3R-\xf8*\x05,\xef\xe1\x14\xf6\xc6G\x07\xb6\x90q\xbfv\xe1l!A3I\x92\x1ec\x16\xac\x98\x03\xa3\xce\x97\xd9\x8c\x992@\xa2\xc1)js\xed\x0c\xe40\x87\xde\xcf\xff\xa8S\xfc\x16\x93{3drv\x1bDw\xcb&\xf5t\xb78r\x95\xd8\xa7\xbc\xc1\xb2\xa6+\xa9,\x82\xe3\xb0\xfbG\x98\xab\x1c.F\xe61}\xd3k\xb7\x9ce\x1dS\x8f\x07M\xfdm\xd7\xd4\x15St\x8d\xf1\x90\x877f\xc3\xcbk=^\xc659\xb1m\xd7\xf2Yv\x01#\x98\xee\x1f\xc0\xf7\x90\xcf2S\x90X\xd8t.\x9f\xba\xe6\"4\x12\x13\xd4H\xb0\xd8\x18\xf6H6\x0e#\x01E\x04\xef*NK\xbb}\xc7\x08\xc9 k\xdc\xb7O\xf9]\x9c^c`\x13Lj\x00W\xe4.K\xe7\x82\xf6ak6\xd0\x0b\xf7\xa5*\x82@\xa7\xc8\xc7K!\xbes\xd8\x18\x8ca\x80\xb8\xb0D\xc4\x0f\xb1i\xb2 \xba\xa8\xf1\xe3\x9fY\x03\x03\xe9\x91\xfe\xf4\xd8t\xb6\xe615\x88$t\xb0\xc7\xc1\x9c\x93/ \x8b\x17\x06\xae\xe8\x87\x1ef\x88\xd4>\xfd\x84\xdbS\xef\xe3\x86\x9b\xf5\x92\xca\xed\xd5\xadud\xaf\x17\x1f\xa6\xaa\xe1\x0ewG\x8b/\x00\xf5\x10\xdb\x18\x94\xe7\xd938\x84\xef)\xfd{\x061\x1c\xc3\x04v \xf6<\xb4\xd16\xbc\x184\xe1\x8f\x1bMxoz\xb4wt\xf0tz\xf4\x8df\xbdg\x9f5iOk\x17\xa7\xc5\x16c\xd0\xe4\xde\x0d\xbe\x1f_s\xb0lG\xb5\x03\x9e<\xfa|\xfe\xa4\xcc\xc88\x9dZ\xaer\x7f\xcf\x16`\xec\xb3\xa5\xf6!\xe6<\xae\xdc\xc6t\x97\xbd\xa3+\xb07h\x0c?>z\x0c\x87\x961\xecO\xd9;:\x86Cm\x0c\xf2\xafB\xa7\xeb\x86\xd8\xef\x08\xaf\xb8aJ\xeaS\xf8\xaf\xff*}=\x08&\xe1\xb9O\xfe\xeb\xbf\x88\xcf0\x05\x0bC9\xa2X\xbb\xbe!\xa5\x888RR\xc4^\x17\xe5^\x13\x92\x8c\xe5\xea\x92\xbe!\xe2\x1bR\x7fC\xa4o\xca\xba\x04\x93\x1d\x1b\x03\x985:\xcf\xda\xea\x1a\xd7\xc2\x1a s#\xf9IM\x81\xc1\x8e\x9eeE3\x86\x11\xec\xec\x101\xef\x13<\xda\xe3\x9e\xe9\xd2\x0f\xbe~\xc2\x87C\x00\x02o\x90\xd4s\x9c\xf8\x9a\x82\x83o\xdc\x90\x1e'\x07\xedc5\xa8\xd3\xa9\xa5Sn\xe9\x81\x8b2\xb9@\x9c?l\x1c\xed\xcd\xfe\xbaq \xb5\xa1\x0cf\xc88v\xa7\x8f\\\x8f=}\x1c\xae}A\xe4\xa2)\x16\xb18\x7f\x93\x83\xa7O\x9fN'\x94\x8b\xa8\xdf\xef\x0e\x1c\xf6#\x97\xaf5\xec\xd6\x18.D\xe2Li\x06\x93\x83\xf6\x14\x94Y\xed^t\x8a\xf0\xe9\xb0\xff\xd7A4x~\xca?\x9fL\x0f=.\n\xdf\xe1\xb4\xe3:\xbbu)\x95\x00\xdf\x03\x06\xf3\xec\x05\x07\x7f\x0f\xf0G\x94\x85\x91`[~q\x82\xe4e\x1b\nf\x1a\x14\xcc\xbb\x17)3,Rf]\xa4l\xc0\"}#\x90\x89\xbe\xd7\xf5\x89Gu\xde\xf7\x80\x11!v\xa4{0\x11\xa9\\\x07@\xd7\x0d\x80\xab\x15\x9a\xb5\xd7\xf1F\xf8UX\x81\x8bu\xedw\xa7O\x0f\xe8$S8c\x8c\xd0x\xf2\xf4`\x0c\xf7\x90\xc2q?\x05\xb2\x01\x8c~\xf4t\xd8$\xee\x15\x10\xfe\xfbM\xe7\xdb\x81\xfa\xcd \xbd\n'i\xd9to\xd0p\x87\xad\xfe\xf0\xe1b\xcf\xedA\x0f\x00\xee}\xc3}\x9dd\xa1\x01\xba?n\xb816\xd9(\x1a\xb6\xc6\x82\xeb\x1b4\x8co\xb5j\xadaL\x86\x0e\xe3\xc7\xac\xbaJ\xc8#\x97\xe3\xb0w\x1cc\xc1\x80\x0e\x1b\xc7#\xd7\xa3\x7f\x1c\x93!\xe3@\xe6\xd9\xca\xcdX\x848<\x9d\xa7\x82\xe0\x98\x15\x0b\xaam_\xea\x06\x04:2I=\x96t\xcc\xe6\x88\x12\xdbc\xfce\x1dN\x1fx!H\x13r\xba\x14\x94D\xdaB\x93\xac*#\"N\xa1\x84'\x1039\x90\x15\xbc\xd1\xca\x9dP\xac^I#\x99\xf0w\\\xc9\x14\xabXW\xd3`\xa4$\xad\xa6\x10\x9f\xd5+\xba\xb3\x13c\x808N*\x18\x964\x16K\x9a}\xb3%m\x11\x15\xdd\x16,\x86E\xd5\xd7\x92\x02\x8b\xfd}\x1f\xf5(\xd6|?\xb8;M\x06\\\xb7\xf4\x04\xb4\x96O\x197\xf9\x1f4\x11\x13\x05\xf2\xd5s\x99\xfaLr\xdc5\x9b3\xc3\xf5\xf0\x9b=\x9b\xb0=C\x11)\xa5\xa9>(\x1dl1\x1b\xfb\x91\x166\xd2>\xc9\xc1\x94\xf2\xef8I>\x1b}\x92|\xee\x86IN6\x9a\xa4\x89Z\xf9\xeaI\xee\xf9\x92H|\xd0L\x19\xcd\"f;\xdd\x93\xa6;m\xca'\x07\x96\xbd6\x1cg\xba2\x1f\xcd\xdb\xdfI\x16I+\xf3;l\xff\xe6+cY\x95\x89eU\xa6\xe63\xb3\xdb\xbd2\x93\xc1+\xb3!\x8a\x15\xd2cyY\xb6\xac\x06G\x02\xd4\xb7\xd0\x03\x86\x8e6\xcbN[\xb8%f\xa8d\xc7\xe0\xe6m\xb6\x07C\\lF,=Qz\x1f\x89\xc1+\x19\xdd\x08\x917wJb\x7f\nsL\x86\xdb\xe9\x84.\xf0\xcb\x10C\x14\xf9\x1a\xdew)\x96\xaa\xe0\xf9s\x18S<\x1a~\x13|\xb5!\x05\xf0?e\xa3;\xa8\x88\xaf\xdal\xb1\x17\x12\x81\x915\x04\xc6\xc6;>\xfa\xfb\xec\xf8\xefB\xa0L\xa6O}\xd8\x99L\x0f7\xa7Q\x14\x1d\x12]Z\xe6\x930\xf9\x1a\xfa\xe5w$_v\xa7O\x0f\xe8\\Q\x860\x0c\xb4\xff\x8e4\xcc\xefH\xc2\x04_K{0`\xca\xdd{;\x80\xc4QH\xa2\xaf\"h~Gz\xc6\xbeD\xea\xf5U\x8c$\xc4-\x1e\xb0\x8a\xff@\xc4\x8fE\xfe\xd4\xbd\x8a?i{\xd6\xe7U\xd1\xf4\xb4\xe9~i=M\x06\xf5d\x93\"uw\xf5\xe3c&e\x13\x14m\xd4U\xef\xac\xa2l}\xb7\x19\xdd\xd2\xa4\x9b\x1c\xa3Cd\xed\"\xd8\xd8\xd5\x97\x9a\xa7\x97\x94\xa5\xa41E\x90+\xd0\x0fI\xdd\"Wq\xe45 \x88\xce\x0b\xcc\xfb\xb2/\xbdS\xdc\x8a\x84\xd2\x0cP\x1eVO\x13\xa4\xcb\xf0\xa6\x0c\xf3kR\x9e\x97a^\xf6gC\xad\xcdx\x80\x19kj\xc30\xf7PdU\x1e\x91\x0dz\xc8\xbb\xc6\xcbZ{\x95\xce\xfb\xdb\xcaU\xe7\x8bz\xf5\xd5\x1d\x95\xec\xaf\x08\xc6^\xda\x916Jy92Z\xe5\"A\xcb\xf4[\xb99n=\x12\xc8\x8d\x1b*\x06]\xe6\xcaA\xec\xb1#$M\x0c,]\xc2\xe4\x04b\x9e\xd5`g\x07\xcd\xc2b\x18\x01\x03\x92\x14\xd6\xd1_\xa6\xb8/\xb5\x93\x11eA&d\x17X\x18\xaf\xcd\xb2\xfe\xb105\x9aY\xda\x06\xfd\x1b\xf3\xb9\x14\xa4\xac\xf3\xb8\x94\x8a\xa9N\xca\xcc\x9e2\xcf\x9c\x0bS\xe8\xfd\xba\x00\xc1\"\xc6\xf4\xf6\x1b\x00\x02\x83\xd3\xd5\xc6\x99\xadEz\x02\x0c\xa9\xc1\xd1\xa6vC\x8c\xe9s%\xb8\xd0\xfe\xc4\xe7Y7\xfa2#\x81\xec\xe2$\x07,\xb7Y\x1e\xd1\x87n\xe9t\xff\xa0F\xd4\x96\xf8h\xf6|\xabz\xb2\x19C><\x9b?{\x9d\xf1{h2o\xcb\xb2c\xbfj.\xe0\xdc\xe6Ul\xf3\xfch\xf5\xc7s\x97\x98\xf2\x9d\xf3\xc5b\xa9\x92\xacF\xbf\x1cF\xca\xe0\xe7\x19\xc3\x0dj\x91\xd5*\xfa\xfd`O`\x0c\xe7\xd1\xc4\xcf\xa3\xed\x9b\xa1Tf\x1bl\xe3\xcc\xab%\xba>SF{\xcc\x93\xc8\x8d}h\"{P,gL\x0bo\x87'\x06\x8b}\x04\"L\x93a\x01\"viB\x85\xb6|r\xacB\x96Q\xf8g7\x15)\xeds)\x01\xa6\xd7\x91\xbc\x99\xb2\xdc\"N\x95\xf9\x10\xd6\x13\xe0\xb6z\xe8\xa3\xacLB\xc0\xc5j\x96\xc1\xbfB\xb8\x81\xcd^\xd9\x8a\x91\xa3\x8e\x81N\xf6op\nOf\xff9\xfa\xe5\xc9x\xe7\xe8\xc5\xce\xff\x0bw\xfe\xb6sy\xf1\xe4\xda\xe6z\xf3\xba;\x84+\xa0r\xf6\x0c\x9c1:\xfd\xabiB\x8f\xb5\x02ul\x96\x0e\x7f\xb6*\x00o\xcc\x01\xda\x08\xf0\xa88\x13x\xd2\x9b\xe3\xb2q\x90\x89Ex~S^\x87\xee\x14*1\x0bl\xd3J\xec\xe0\xc1s\x8c\xe6\xbd/P\xf4\xfe\xd3\xdd\xbd\xbd.\x80\x1b\xf3\xfcp\xf6\x1aP_\xd2\xe7\xb0\x7f\xb0;9\xea\xabL\x1f\x96\x88b\x97\x8eggB\x07\xc3\x93ILw\x8f|\x98\x1cM|\x98\x1c\x1eu\x80u\xf1DYZ\xc6ie\xce\xa5$\x1e{\xf6 \xe0c\xaf@\xa4~\xb2J\xf5\xe4\xe7\x1fi\xf4\x98\x10\xaa\xb3Jo/\xdd\xd9\x95\xf0\x98\x1c\xecN\xad)\x04\xc53lU\xfc\xdfy\xc8)\xf7\xd18\x80\x11\xa5\xebvx\n\x82g\xcf`\xc2\x0c]v\xf8l\x8c-\x88\xb4\x89\x9c\xef\x190\x1f;&o\xeeo\xca\x12U\xf4\xdd3\xd6\xe1\x84eg\xe9K\x7f\xc0\x07\x93v\xcf\x83\xef\xdft\xbc7\xb0\xf7\xe9f\xbd\xc3\xf3\xe7\x98\xcb\x00\x03lcB\x83\x94\xfe\x9a\x1e\x0e\x1a\x16\xee\xd3\xb0q\xedn>.L\xba0\x9d\xee\xb1\x10\x1ep\x00\xdbt\x848\xba\x0d\xc6\xda\x03\x1aq\x1e(\x14!\x92\xb4&V\xd2\xdar\xf6\x99p\x86\x19X(i+\x93\xab\xfbu\xd6\x7fy\x8cw\xa6\xe3t'\x13>\xb5\x07\xbfS\xb8&h\xa8\xd4}\xea\x05,\xe8|\xd3q\x19\x90/\xeb,/\x8b:\x85\xf1\xe0\xd6\xf6\x0e5\x8a:f\xc5GZ1\xa5\xd3\x9cY\x86a\xf0y\xd0\xfb\x0b\xc7<\x02\xfb\x89\x15'\xa7\xc0\xefU\xc6\x8c\xae6\xfdb{\x1b\x90\x0d8=\x95\xee\xdd\xc3f\x93\xda\xdd\xf5\\\x16\xb1\xdf\x07'\xcaIX*~m_\xb1\\\xbbOw\x8d\xeb\xb5\xfbt\xcf\xb0`\xb4|_+\xafx\xf9\x81V\x1e\xf2\xf2\xa7\x9e\xc4\x0d\xd4\x07\xbbh/\xe6\x0d\x8f\x0e\xbac\xd0}\xa6\x1c?\x03\x0f\x9f)\xa7sV\xcfk\xad\n\x0d\xa2\x84\x84\xb9\x8b\x87\x9cX\xb3q\xddt\xa7\xd4FQ\x10)\xdd|6\xbe\xf0!\x9fMt\xbb\xff?\xb4\xffRd\xc0t\x0ctWT\x89\xd0\x9c$\x04c\xfc\xc4j\xf95\xa1\x102S\x0b\x97!\xdd\xd7J-,\xb0f\xe8+{_l\xb6\xf7O\xf7,gH\xf9\\_5c\xf8\xfb\x13HwvN\xda\xf0\x17\x05\xa8n9K/p\x01\xa5\xbc\xd1\x1aU\xc9K\xa5,\x9f\xe6+\"\x8ff\xf0\x90\x1b5\x92\x88y\xdad\xc9!\xf4/\xf2\xe8\x8b\xf9\xf4\xe81k\xd8,\xdf\xe5\xe5<,\xc3\xcbK\xe3j\xe4.\xf1\xe0\x0c\xd2\x99E\xbeW\x17\x1f\x83\xb3\x0c\x8b\xa5s\x01\xc7\x90\x06\xabp\xfd\xd8\xf9\xec\x8d-\xe0s\xa2_{\x06\x0e\xf0v\x8b\xa2\x8d`f\xc6D#9\xcb\xe8G!\xe5c\xc7<\xb1\x80\xb0\xc9d\xf7\xb1\x83CP#NH\xec6\xd2N\x8aY\xf3\xaf\x18\xeb\xd3\xb1a\xa8\x9a\xa8a\xd8Hmbbz\xbaY\x0c\x01q\xea\xdbb\x1bT\x12a\x14N\xe3\xb1s\xc6\xd8\"\xaa\x04\xe8\xd8\xe8\xbd\x81\x9d\x98\x1e\xb8\x9d1=l\x1b^\x17\xa7*XB\xf3\xa8\x94:lh\xc6\xd6\xf5\xd8\"\xc1\x0d\xc9\x0b\x8a'j\x0dS]TG\x86sn\xc6\x81\xe3u\xd7\x98\xd0\x1a\xb5]\x8b\xb9\xc6!\xads\xa6,{\x1bO\xa4\xe4K\xf9)\x8e>\xab\xb1\x98;bK\x82\xd8#Q_\x96B\x97\xb6\x08\x0f\x94\x8e\xba\n\xa3\xcf\xc6\x18\x0f\xa2%[\x98\xfb\x9b&\xab$\xb4\xc3J\x9b\xbf\x11\xb1\xb7\xc2.b\x1c\xa3&\x8d{\x02\xd5\xf6$\x80\x14\x16@\x81XI\xb7+X,\xb6\xd8\x93\xdf\xb1\xddb\xbd5}\xe2\x0f\xc0k\x86D+\xe7\xfa\xcd\xac\x83x\x1e\xfa\x86\xda\x93\xdb\xf1\x9b\x0e\xb5\x95{U\x7fzG\xdb\x93\x89\xf1[\x8f\xd6\xb7ir\xc4\xd35\xe0\xde\xd8Z \xcb\xc1\xe9}b\x1ci\x88\x16|\x8a\x1c6\x137\xc1\x83lV\x8dF\x17\xf2-\x99U\x1dq3\xe1[\xac\n\x8bX\xcc\xa5\xc4}\x0bb|\xdd\xc7\xe2? U\xdc\x801 N\xcb,\xda\xee\xde\xa6,\xda\x81\x89*\xc8y\x96B\x13y\x9f\xf5\x91\x8eqJ\x81 \x99q\xae3m\x14\x13\x0f\x86\xe6*\x9by\x86\xe0L\xeb\xf7R3\xe2\xaf\x98e{\xa3\x98\x9c\xa7\x1ek\xfe\xe4 \xb8\xf4\x02L\xa1\xa5\xa2\x84\x1c\x8e\xc1\xcd\xdc\x9cN\xcb\x9734V\x9e\x0f\x99\x1b\xb3H\xb0\xd5\xd0\xccr\x88\x1aL\x8a\xaa!\x01\x88\xd3\x8cc\x04\xde\x80gD\xe3\xa6E\xa1#\x1c\x9a~M\x19b/\xee2\xc5H6\x0fO\x1c\xab\xb8\x85\x01\xf8\xc0%5.1ghKYf\xe8\x98\x9fh\x9e\x13\x1a\x7fJ\x7f\x8f\x15?\xe4f\xee\x03\xb2\xae\xfd^so\xb6\xc6\xb4)\x03\xf3\xb7\xfd\xce\x83\xcb\xa5|\xa3\x1b\x93\xbafZO\xbeH\xa9\xbbwp\xe4\xb9\xce\"\xcb_\x85\x91\x08\xa5\xf5\xa8f%\x1e\xe0H\x17?p\x1e\xe0H\xe7\x0d2\xce\x1b\xe8\x10\x8d\x891\xf6\x9e\x1eJ\x8b\xe2n\xc6\xd0\xf9\x94\xfa\xe2 \xbd\x8d+\xdb\xca\xf4\xf1\x0c\xa6\x94~5\xd8)\x94p\xc6r\x15s\xf3\x8d\xd2g\xc9N\xab$\xa1'\xbcPP\xd7\xf4\xc2W\xa4#\xa8N\x0cy\xe2!\x16g\x15#\xd5\xa6\xa8P\x16v.N\xe4\xf0\x80\x91R\x19\xa1e\xa1Zv\x8b\x01\xd9##]\xcc\x93A\x1a\x12\xa2\xaa\x99 \xd3v\x05\x92V+\xc2_g\xed\xd7\xb7y\\\xb2\x97\xa1\xf2\xee\xc1\x87\x02\x19\xc7\xd8-\xe8\xb0\xe8\xcc\xa2\xe6\x90z\xc1\xf5\x90\xa8\xd3t\xc3\xf8V\xf9\xb00\xb3A\x96]\x89\x1a\xd3\x18\xf3\xe6D\xca\xe6\xecJ\x9bC\xc1\x99\x14\xba\xe8\x182\xce\xe1\xf3\xf7\x14\xae\xa5\xea\xfb\x149\x1c\xb9S\x1e\xc1\x87nh\xd4\x8cAz\xa3\x1d\x06q\x10\x8a\xe6 \x84\x86\x83P\xb4\x0e\x02\x8fa\xde\xde\xf4kR\x1a\xb7\xbc\xa0\xe5\x86\x9dV\x8fB\xd8}\x14Z\x89y\"\xbe\xdb\x11\x1d\x0ff\xc3\xf9\x16 I\x92\xe1\x1c\xdaD\xa9\xc1\x8f\xaf^\xbf\xf8\xf9\xa7O\x9c\xb0\xcc]\x0d\x0e\xb3 \xe7\xc70K\xdd\xfd]O\xcb\xdeO\xbe\xac\x938\x8aK\xfe\xfa)\xdd\x16w\x7f\xf7\x90\xff{\xe4I$\xcf \x18hgP\x05\x8d\x0c\xa9;m p./I\xf16\x9bWZ>\xd6AKG\xdb\x93\x05\\\x8a\xf5C\xea\xd6\x1abwz\xc0AI\xea\xee\x1eq\xaa;u\x0f<\xd7\x11&\x1b\x9f\xc2k\x01Z\x9c\x97\xe7\xe7\x1f\xab\x84\xfc\x14\x17\xa5\xff\xf2\xfc\xfc\xbc\xbcK\xc8\x8f$J\xc2<\xa4#\xa1e\x7f\xa2p\x85UHb\x92\x96\x1fIT\xe2\xcf\x1f\xdf\xbf\x95\xfff\x8d\x8b_\x9f\xb2\xcf$e?\xc22\xfc\x94\x87i\xb1 \xf9\x9b\x92\xac\xb0\xf0u\xcc;\xfd\xf7Oo\x7fz\x91$/\xb3$!8y,\xd1~\xbe\xce\xf2\xd5\xab\x84\xd0[\x8c\xbf\xcf }+J\xde\x92y\x1cbco\xe3\x15\xa1\xe8\x96\xa5\xe9}\x17\xae\xc8\xfc]6'o\xc3\xb5O\xff\xc5:\x1f\xc2\x98\xce\xe1\xaf\x15)\xd8\xd0?$\xd5u\x9c\xf2\x7f\xd8\x97\xe7\x7f\xfa#K&\x87\x15\xce\xff\xf4\xc7w\x88\xa5\xc5\xaf\x0fa\xb9<'\xd7\xf5\xcf,NK\xf1CZ\x85\xf3?\xfd\x91\xcd;\xcb\xd9\xa4\xcf\xd1D\x95\xa1sV@\x97\xfb|I\x08\xfb\xfc\x13eg\xf20\xfa\xfc\x92/x]\xc0~eU\x84#r\x82b\x9d\xc4\xa5\xeb\xf8\x02Z\x8cO0 ~X\xcb\x80\x8b\xd1\xc8\x04g\x11\x1e\xce\x8a\x8b\xf6\xbd\xa7\xe0%\x9fE\x867h0I\xe9\xf2E#\xf4V\xa14\xe6<\xdeJf\xd5\x05\x13\xd2%(\xf9\xa0@\"\x9bE\x94\xab\xc8\x02\\\xd7\x9e\x13\xaf3<\x14\x8e\xfe\xf6P[\x1am*\x96\x13\x02D\x0eH=\x1e\x86\xf5\xd0\x87\x9dI\x1f)e\xbb\xec\xdd\x94`m\"\xd7\x10\x80\x12\xf1\xf72L\xbf+\x81\x0e\x06V\xa4\\fs\xc8R0\xe6\xeaii+7\x1b$\x07-\x83Y\xca\xa9\x0d\xeav\xd2Y\xa8\xc7\xef\x13o\xa6\xbe\x1e\xa1\x87\x19\x16ZR\xa4s\xe3+\xb1\xe3B\xc8\x8b\x80Mlc\xd3\x9f\xa1\xe5\x8eF\x91\xbe\xff\xf4\xde1h\x1aeY\xcc\x83\xfa\xba\xd0^\xb7`\x0d\x1dl\xc9\xa9(w2=\xf4\\'^\xe4\xe1\x8a\xe8\x1d\x89'G\xe8b\x13\xab\"\x92$AA\xc1l0\x8f\x8bu\x12\xdeQ\xac\x97f)q|\x9c\xfb\xa1\x17\x84\xeb5I\xe7/\x97q2g\x99\xca\x83\"\xa7\x80\xd2\xf95\xbc \x8b(\x8f\xd7\xe5\xb1\xe33\xabV\x12DYZ\x92\xb4\xfcs\x9c\xce\xb3\xdb`\x9eEH\\zA\xb6&\xa9\x8bn\x03,j\xa7\xf3\x8c}\xfa\\T ^\x9f2\xc5\xf1\xb3_\x9e\xf0W\x98\x81)\x88\x92\x8cE\x8c/\xf08\xbd>\x81|g\xe7\xc4\x03\xae\x9a\x94t\x8d\xb3l\x96_\xd8\xad\x02\nWS\x89\x9a\xaf5O8\xcf\x94\xd7\x94\xa4\xed\xe7\xa7\x8c\xf0\x89\xabf\x04m\xdb\x0c\x93\xa2\x12\xb7\xf4\xfc:\xdce\xe8\x83\xfa\x9aK$)\xc68e\x0eX\xb4j\xe1\xaaY\x95\x08\xd2\xe0\xc7\x10\xbb\xa9/'\xe8\xed\x07\x87\x02}\xa0\xf7hDb-=~\xae8\x96\xf6\x01?\x9b\xa4\xabx\x17\xbe\xe3\x0e\xce\x1eW\x84\xbb%\xfa\xf5\xb0\x10\xa8\xa9\xb71\xcf.\x11t\xbb\x9e\xeb|&w\x85~\xf2\xd9\xa5U,\xcc7\x1av\x8e\xe1\xa3\xee\xc1\xc5?\x98\xec\xe7\xf1\xa34 #g\xce\xe5e\x94\xe5d\xe7\xd7\xe2\xb2X\x869\x99_^:\xa2O\xf3;\x8a\xe8\x1f;\xa1XL(f\x13\xfa\xed\xa1o:6\xc4\xe9DYZ\x94y\x15\x95Y\xee/\xc3\xe2\xfdm\xfa!\xcf\xd6$/\xef\xfc\xb8\xf8 \xce\xef\xfb\x85\xbf\xe6\xc5o\x8aW5\xbf\xe4\x97\xd9OY\x14&\x84a\x03_\xa0\x05\x9fc\x1e\x99j\xdbl\x95'{^\xb00\xcaTtQKf&\xf6\xfbV\xd6\xcc\x98\xa3\xcau+\xc6#\x9er\xdb\xf9\xb2\xb9\xc6\x18\xd0\x98\x99\xd4\xa0\xb8\xa5\x0d\xcdUfs\xcb\x10PA\xc8,\x94\x17\xbd\xfb\xb7!W9\x9d\x1cy\xee\x96\xec\xeeBq\xcb\xbe\xc7s\xde\xfb\xe0\xb0?\x1c\xbf\xe3\xb0\xa1\xfd\xc9%]\x8a:S>\xf7O\xbaD\x83\xaff\xc8\xbe\x1d\xc5I\xe8\x8d\xb7g\xb6\xaf\xe1\xed\x9a\xa1\xaebHvf\x17\x041@\xda\xee`\x9e\xa5*\xffI\x9f\x07\x06\xbc(\xe0\xc6\xe5m\xe66\x92\x8d\xeb\xad\x9d\x19&\xc2\xfb\x99X\xf7v\xc3[\xb071\xcb\x15[\x9cm\xebF\xd4r\xd7\x02\x89\xb7\xbc[]\xa4K\x08\xd5\xf1\xbb^\xefm2\xed:A\xfd[\xd5%d\xaf\xf3\x11\xff\x9c\xce\xc9\"N\xc9\xdc\xa1H\x84\xc9\x8f\xf8\xabwU\x928Fg1\xa4E;\x119\x0e8\xbf3\x94Jc)g\xc4\xe0\x98\x02QX\xa7\xe6\xd5\xf4\\\xe8\xd1\xca(\n\xbc\x12\xb1\xe7q\xac\x9d\xa1\xb0\x08\xb5\x00\x0e\xab\x80\xc3u+v\xca<\xcfFV\x03KBCP\xe3 m\xdd1T=\x80\xc1D\x02\x8c-\xa8?\x0f\xd3y\xb6r7\xdeM!\x92d\x86\x8a\xaeC \xc2(,]}\x17\xe9xK\x1f\x1c\xef\x92\xd2\x8e\xa3Q*\x92\x04q\xf8\xb1{\xf0x\xb4\xbbk\xbe\n\xfb^M\x8f\xb6/A\xee\xc6\x1c\\\xc7\x9c\xf4\xe3\xf2\x93\xc7\xae\x00\xdd_\xad)fA\xf4\x9bn\x8a7x^\x93\xddn\xaa\xe7\xa8\x9fS\xfd\xef\xa0z\xf6\x9fZ\xf0\xf1\xbe.\xf1\xcb\xcc \xaao\x12\xff\xbb\xf1\xf1\xc1\xc4\xb4\x00\xc1b\xc8>Rn\xc2^ $h\xdb\xe6\x92\x10\xa3\xad\xf3l\x15\x17\x843&\xa5+O\xc4\xea\xc5\xa4y\xb4\"\xd3$\xfdN\x0d\xd2\x9e\x1f\xc29|\xe0}Id\xa5=\xf3!\xea.\xd2\xdalX~\x1e\x04:\xceI\x91%7\x84\x03\xd0\xba\xf0W\x96\x858\xd7\xddZ\x1e\xbe\x82\xff\x98\xec\x99\xa5\x05\x93\xf1#O/\xb3?m\xb2JJk\xc5n\xc6\xffq\xd0L~\x04\x0e\xcc3R\xa4\xdf\x95\x98\xf7g]BN\xae\xc9\x97-\x8b\x8e\x94\x83\xd3\xaf\xba\xd0\xf4\x82b\x8e\xe4\xfe\xabiD\xeep\nO\x82'\x9a|\xc7\x88j\x9d'\xc1\x13\x07f\xe5\x85K\xb4\xbd\x128\xb6\xb5p0\x04o\x93Y~\x81J%\x1f\xb6\xac}@\x0f.7-\xef\xa6z\n\xf3\xe5'A\xa3\xfb@ e\x1b.Tn\xeaN\x0f\x0ft/\xdc\xb8~u\xa8\xbfB\xd2\xceD?\xc4\x01W\xc3 \x85\xd1\xf6\x08\xc8\xeb\xf7g=\xc0DPE\\\xe7\xa8\xed\xd8\xf1\xc0\xaf\xad\x84\x8e2\xd02\x90\xe0\x04\xcb*\xad\xbcFPS\x17I\xe2\x94\xb3f\x8e\xc7\x96\xa1\x9a\x0c\x83*+\x90\xe5\xc3\x91\xb6\x8c!\x9b\xf6\x0ckuWi9I\x0f\xd2\x11\x10\x93\xd9p\xd7N!s\xeb\x1d\xf3:\xb7\xccBPW2A\x9d)@\xb1s\x0f\xff\x1e\xfb\xb7\xc1\xd8\x87\\G\x82h5u\x0f6d\xb6L\x82\x9d\xd4\x9d\x1a\xc9\x9bC\xb3\x01\xc7dl\xf6CAi\xc6c\xc1l\xcc\x1d\x94\x98\xc0G\xfc8Eb\xf4\xb7\x0748j*\xfc\xa6[3:\x97l\xf7\xd0\xbd\x1bC`0\x0f\x84\x98\x87\x9f\x0e)\xf3[v\xb0\xb9U\xb0p\xb5\x08\x06\xbd\xd4Q{;\xb8\x00\xf6\x9a\x94\x92\x84\x89\x0d{C\xbf\x91\xdd\x03}K\x84\xcf\x90\x99\x12\xdd=\xd4\xad\xde\xb9\xcf\xd0\xa1\xceQp\x9f\xa1\xc3\xe9?}\x86\xfeA}\x86(\xaf\x94\xbaO=\x1f\x9c\xb7\xe1\xfa[9\xa1\x1d\xea\xde%\xdc\xebdj\xf6:\xd9\xdb\xd5\x0f ;P\xfa\xf1\x0by\xedG\xfb\x81\x18\xe1o\xc9\x11\x93|\xb628\x06'k\xe4\x0dR\xd5\x8a9\xba\xc4n\x89\xe7\xa1\xa4\xe7\x81\x82\x0c\xc6\xb6\x86\xfd\xc0U_3z\xae\x8f\xc6\xe3\xa7\x93\xa3\xa3\xe9\xfe\xde\xd3\xbd\xf1\xd1\xd1\xa4-nx\xf2\x9f\xee\xd9\xf1\xf8~6\xd99\xba\xf8e\xfe\xbd\xf7/O\xfa\xd6\xc0\xa2\x86\xc1\x10>|:FZxk\xcb%\xd2U\x13\xfa\x13\xc2\xb2\x9f\xc8F\xae13v\xe3hg\xeb\x94\xf9\xee\xe7AI\x8a\x12u\xba\x88\xb1\x84\x0b?\xcb\xffy\xcaC\x97\x96\xf0\xac\xd7\xefd\xc8J\xf5\xad\x82\xed$Xb\xeft\x0c\xf7T\nu:\x08m6\x17\xc2\xec\x84\xd5r\x1e\xa2\xb7\xe1\xc9/\xc1\xfd/3\xf7\xecx\xf6\x9f\xb3_..\xbe\xbfwg\xcew\x17\x9e{v\xec\x9em\xfd2\xf1f\xff\xf9\xcb/\x17\xf7\xbf\xfc\x12x\xdf\x9f\xfd2\xf1~\xb9x\xd2\xbe9O\xfe\xf3\x97\xdb\xef\x1fu@\xb8\x7f_\xa3o\xde\xd2\xc2\xdf\x8bm\xe8>A\x8a9k\xaa\x90bu\xc1U\x96%$L\x9b\x12\xc5Ik\x0bY1z\xbe*q\x9c0\xbaX&\xff\x12_\x10\xb6Cq*d\x88\x1b\xa9\xf9j|\xd4\x96\xe42\xf15\xb9!).\x9d\xf2\x13I\x03!\xe1^\x85_~\x8a\x8b\x92\xa4$o**\x855\xb3/\x8d\xac=\x84|C\xd0\xd5\xd9Xlo\xcc\x04\xda\x9a-8\xedi8\x1bD4k[\x00\xda9L}H\x83Wt-_\xad\xe2\xb2D\xdb{,k\x10\\\xb3\xf2\\\x0d\xa1\xbe\xd5\x16\xbd\xa9\xc3\xa9\xe3\xb7\xea\xfb\x89\xf6}A\xf4\x1av\xa8a3\xd1\x06\x91\xc9\x18\xdd\xc3\x99.\xd7$\x9cH%c\xeduV0K\x8cN\xabm\xf3\xb9\xf2\xd50N\x0f\xea\x8c\xc8*\xee\x8e\xc8 )\x11,\x96\xcd1\x8f&(\x1fsW\xbb\x06\xbf=Pr\x81\xd0\x999M\xd4AwK\xae\x16\xe0k\xee4\xdf*gF.\xedr\xe1\x97i\xa2\xd2x|\x0e\xd9\x14\x97b^\x91!9[\xb0\xb0\x1fb\xf1\x0dY7\xe9\xec\x17\\f\xc7\x1d\xf4~N\xa3\xb0\xba^\x96>Ti\xb1&Q\xbc\x88\xc9\xbc\x9e\x1b\x0e-\x00\xf7;\x9e}\xd7\xf1L\x927\xd6\xdf\x82\xd9t|)\x99 \xefB\xa9\xf6\xd0Z\xe3\xac\xc9\"\xcaW`V^\xd8\xc1.\x83\xcb\xa9\xe75\x0e~\x9a\xed\xb9i\xc9\xba\xfc\xf8\xd2&G\xbfE\x9ah \x7f\xd2\xe5\xca'5\xea\xab\xfb\xb4y\x17\x16\x17r\x82\xde\xb8\xaa}\x92\xb7,\"\xdcD4\xdb\xf6\x91\xed\x84\x92=\xa0J\x813)\xb9\xadG\xbf\xcd2\xe8!\xdct\x1d\xe9\x8d\x83\x0c|\xee\x92@\x0c\x89\x92\xfc\xcd/$\x87}\xfd\xfa2\xae@\xbb\xd2\"\xcaaS\xc4\xc2\x06\x11\x91\x9aOn\xe0\x14fZ\x91\x0f\xe4\xc2X\x91\xf8\xa6\xcet\xb0J\xbb\xbb\x0d\xf3\x94\xcc\x81\xa5\x0b8\xa5\xc8\xbb\x85ZP\xdbjD\x9b\xc7\x06D\x84\xddT\"\xf6\xb0\xde\x1d\xb7)x\x0e\x15vi\x19\x0dsa\x88\xb2\xb4\xc8\x12\xc2\x80\xbf\xeb\xb8i6'\x1e\xd0*\x18>s\x9d\x15E|\x95\x10P\xc8\x84\x15Ye\xf9\x1d$$\xfc\x0csR\x92\xa8$\xf3\x00\xfeu\x0eI=\xeap>\xa7e?\x17\x04\x08\xfbJ\xc7\xf6\xae\x07e\x06q\x1a\xe5\x84\x02\x9b$^\xc5e\xe0\xb4\xb6\xb4\x89\x93j\xa4\xbf\xc4\xf8\xcb<\x8c\x90\x08U\n\\\x91\x0e\xc9v\x932\x14i\x98\xaf\x96^\xb3?\xf9\xf67\xbaY\x82\xc2\xa7(Hy!\xd1\x95&dS25\xd2*\xbb!b\x0et\x98\xb1\xc7\xe3\xbb#\xc2\xa3\x9bNT\xf0#\xa0Y+\x82\x92\xfcKXi57\x10o\x00\xf6\xc9\x96#\xeeYkud}kyS\xfb\x7fQB\xe9w\x81`\xd8\x8c\x0e\xbf\xf4\xcb\xdb\x11w5^\xb0\xfbl$$j\x0c\x901a\x1a\xddQ\xa1s\xcc\xddT\x02k\x94\xea\x97V\xf5\x14\x83\xbdr\xd9T\x0b\x16)\x90T[Q\x15\x98\xaa/\x19<\xd5\xe3-\xab\xb8\xd0p\xa4jlX\x9d@\xb8\xb3C!\x8e!&\x0d\xf0\xc5Hg\xe1E3K\xfa\xab\x99\x17\x9d\xa5R\xc0'\xda\xeeS\xf5\xdf\xc4\xfe\xab\xf6\"I\x86\xf1Vf]{\xebz\xf4\\\x85\xad\x8e97!\xecYf\x1c\xddm\xf3Lg\xf4Q \xa0\xe3\xdc\xed\xed\xce{\xd1\x1e\x92\xb97\xebA'\xe8D\xaf\xccX\xdf\x1en8 \xb6\xb0\xbd\xd0nGLs\xdb'z'\xda\xf9\xc1\xe5\xd0`+\x18y\x9a\xdc\xc2\xd3X0\x83\x1e\xee\xbe Oi\xa1\x8bO\xea\xbbqbotV\xdf\x99\x1dh\xf1\x1d|%\xba\xb6\xd1v\xa8\x93Ag\xd9D\x96\xb6i$\x16'I\xbf\xc6g-\xe2\xcf@\xf9 \x1a\x1f\x8eav\xd17\xd6\x97Y\x95v\x0b\x04tv\xdf\xa6\x1e!\xed\x8dm\x9f\xb3\xc68\x83/\x83!u&z\xee\xd4\x15\x84\x05j?\xbc\xd1\xb8\x11\xfb\x0c;\xc2\x85\xa9_\xf5\x0b 5q.\xcf\xc5!{\xbeO\x0e\x9fz^p^\xe6$\\q\xd7\xdd\xe0# \xe7\xe1\x15Z(\xe0\xef?s\xbfg\xf6\xc1\xe4)\xfa\x86\xfcX\xad\x13\xf2\x85\xa9C1MLP;\xf9\xb1zGS,\xfd\x10\x16\xc5\xa7e\x9eU\xd7K\xa6\xfb\xd8?\x1c\xa4\x83\xed\x0d\xd1d\x0ett#\x92\x99\xb9\x18\x07MyW\x93\x7f\x06\x95?h\xc7\xc4$$\x89\x0b\x8c\xb4\x02\xc2o\x83!\xa1\xb4\xcc\xef\xd4\xa2E\x9c\xc6\xc5\xb2\xcf\xc7\x87>[\x9dK\xa0?\xb5\x96\x8fujG\xed\xa52*{=\x0e\x93r\xa3NQ~\x84\xd6%\x0fD8({\xa3\x80\xfa\xdd5I\xe7qz\x1d]\xed\xecP6\x8f't\x81\x1cW\xd0\xfam\x9b\xf2\x10\x0f \xa2,\xffL\xe6\xdcc\xb5x\x9d\xa3]\xac\xa9XlRIy\\\xd3g\xa7\x86\x00\xa8\xf4y@\xb5\xb7\xc1V\xa8\xe3r\xcb\xb7i\xd5fCB\xee\xe4N\x82\xab<\xbb-\x18\xf12sn\xc6\xc1d\xec\xf8@\xff8\n\x9c\x8b:\xfaW\x13\x0f\x8cA\xc9\xb1\x0f\xfb\x1e\x8f!\xcd\xbci\xb2:\xda\x8f\xda\xdb\xaa\xbe\xa6\xe7e\x88Z\xd9\xeb\xf6pP\xc8\xe2\xee\xeby\x04\xa3 N\x97$\x8f9L\xd8\xd5\xd36\x08\xb1\xa3\xf9\x90\xcc\xc9:'QX\x92c\xbc\xdeO\x0d\x0b\xd8V\x85'\x1c\xfa\xe8z%\xfa\xac\x99\xc6i\xec\xf1\x906\xed\x1aK4\x81h\xf2\xa6(\xde[\x1e\xfcfH\x0c0\xf7\xe1\x86\xf7i\x07\x0cw\xf8\xb1\xe5\xe5\xb5\x114\x03\x97\xaf\x85H\xb23X\xc8N\x1f\xaaW\xda\xf7D\xdcb\"\x0b~\x0dt:\x82\x12\xa6\xe5x\x9b\xcd\xd1\\l\xab\x94\n|\x16V\xd7m\xd7\xd3K(W\xb6\xc5\xfc\xf1\xe8\xf9x_\xbf1PZ\xb5~5X\xc6\xd7\xcb?\x87%\xc9\xdf\x86\xf9\xe7\xf6\x16\xd0'\xc2\x8a\xa2\xdd\x7f\xef\xff`a\x18\xdd\x19L\x0e\xe0\x18&\x07\xbb\x87{\x96UP\x86\x02\\k\xcbh\xd3\x18\xce \x86c\xbe\x16Q\xf3\"\xa2\xe4H\x04\xc7\xb0\xf0\xcd\x8d\xc8\x19\x15[\xef\xbd\x06\x94\x87\xc9\xcb0I\x98\xc0g\xe2\x0b4@\xe6?\xe6a\x9c\xca\x85\x0c\xe2i%\xeaw\x0c3\xa8esR\x94yv\xc7\x0b\xcd;\x92\xe0;\x9e\xe7fN\xa2l\xce\xbd\xablxJ\xa9C?N\xea\xdePB&R\xc1\x00kP-\xbb\xbf\x07\xa7*\x17\x87B\x98$spX@w\\\x9b*\x03\xb3R\x9d\xe2.\x8d\xb8\xb8\x04\x7f_\xe1U\xfe\x90g\x11)\n\xed\xe3,E_\xd1N:O<[\xdd\x94\x92\xfc\xdc41Moe\xd8h>\x9b\xe2\xc9\x99 \xfa.\x8d\xba\xeb1\xf7f\x1cxteG\x87\x94\\\xec\x9f\x95xJ}mE\x07\x0d\x85Q3\x07\xe2\xee\x91\x84\xa4\xbe\xf4\xb7\xe2\x86\xa5?\x0f\x88\x8a\x89g =\xba#G\x8aggGB\xee>\x1a\xe0\xbb\x0dNrc\x1fr\xcf\x97\xb0\x94\xfb\x8as\xe4~k\x1f\x98\xd0\x94 E\x85<\xb5\xe4\\=\xd3_\xd1\xc60f\xbfO\xc5\x1b\xcf\xf3!\x91T\xc5\x83\xf6\xf4R\x05\x8aL\x8en\xdae\"\x1f{\n>\xa4\xbbQ\x89\x9f\x1c\x9e\xa3\xe6@\xc2\x8b\xe8\xbc$V\x8aBN\"0!K*\xc1\xde\xb8\xac\xf7\xe6\x9d\xdc\xcad\xd0l\xae\xa4\xd9\x98&\x91B_\xf4\x03\xf1\x88\xb8\xc6\x1c\x07moc\xf4QA\x0ca\xda\x9b6q\xc4!\xf2\x9c\x969\x06(\xfc\xe0\x96\"\x86\xa5\xc26\xe6n\x03\xbb\x07\xcd\xf3\xd6:vb\xa4?\x0c\xd9\xb4\x04\xcd@t\xd0a\x16\x04\xd5\xdb\x87\xf2y\xa6\x8a\xa0\x98\xcf\xb6~5\xf1o\x84Lv\x82#\x069\x92ln\x89\x02\x02\\\xeao\xe2z\xcd\x98(k$\x05\xe6\nu|\xad\x90\x81\xcd\x82\xad\x1b\xda!\xc7\xa8\xae`&O\x98^\x0e\x95d\x05\x0b\xea\xc6\xa3^\xe0j\xf8\x10\xc2\xe8\xd4$L\xa3\x0f\xc69e\x88\x00\xcd\x7f\xfd\xfa\xf6\xb1\x1bSg4\xf3\xc1q(i\xc1\x10\x80z^F#\xac\xda\x81R\x18IB\xc9\x15\x8bP \xe3c\xcdd)\x8fg\x17\"0<\xc1\xce\xad\x0d\xcf\xb4\xcfz\x17\x05!d\xc4\x9d\xf2\x98\x9a\x8f\x0f\xa2e\x95Z\x18-\xf1\xa0\xb1P \xd29v\xd7M@\xc4\xeb\xe9\x16\xf0\xd0s_\xef\xd0\x04!\x93\xc2\xcd\xc11D\xf5\xa6E>e\xc0\x12\xed8\x98\x17\x8c\xde\xf9\x1a`z\x1b)\xa8\xe8S\xbb\x88\x0b@d?\x0d}2\x1e\x90@\x86\xf2\xado\x81$\xc3\xe0\xf0\x97n\xff(\xc1Abtx%\xab\xb10ld\x85\xfa\xb8\xd0d\xa2\xe1-\xd9O\xbe\x8c\x83\xc6un\x85\x9b%G\xa7\x0d\x0bc\x95Pj\xc0\x1b7A'\xc6SviU\x1aN\"\xda\xeb7\x8e\x05\xf2\xd3\xe7a\x182xe\x9d\x94\x80\xf1_\xbatM\xec\x10\x0d\xe46\xd59\xdd\xdf\x03Q$\x07\x14,Z\x88\x17N\xad T\xd2\x80\x99&{\x18+\\\xd59\xe7\xaa\x90;\x1a\xb8\xa4]\xa8W \xf6\x86\xe6fw\xc8\xd2j\xd3\xa4/\xd9\x94C\xeb\"5\x92EJ\xf2R0p\xad:\x8a\xd4A\xab;e\xe55\x16*\x85\x00I\xbb\x03,\x98\xc8\xec\xe2\x04\xca\x13\x8fN\xa3*\x96,4 \x12\x82t\xd9\xac;\xadyy\xb7\x81d\xaf\x18\xdf\xee\x96J\x1f\xee\xe6\xc4\xfc\xd7\x84\x9b\x93{-{\xac;l:\x8e\xc9\xe5J~0\xcc\xe9\"\xa8%\xae\x9b\x05|\x97U{\xf5\xd2\xbbv\xde\x10\x18\xc7\xe7hL7\x1b+\xc4E#\xf9\xe5\x96JZ\xc5f{)wC\xc2y\xe0\xf8\xe0\xfc\xf8\xea\xc3x<\xde\xb5\xa4F\x83\xf6\x05\xaf\x8b\xed.\xbb\xf8\xda\xb5\xb1\x08\xdc\x13n{\x9b\xff\x15,\xc3\xe2\x0d\xe7\xb7\xc0\xe6\xd3\xf8\x9a\x97IQ\xc7\xda__\xd0\x8bK\xef\xc6\xb0\xda\xbe\xe5,\xac|\xc3\xc8:\xdc\xef\xfa\xe5I\xb5#\xcc\\66-\x1b~\x93\xde\xf6\x15\xf0T\xcd\xdb-\xc9\x8a\xcc\x8f^\xf7a\xcb\x07\x84B\xf3^\xf1]\xedG*5^\xb6\x94\xf2>\xac$\x10\xb1\x8e\xd7\xa4\x0f:0 \x80\x8ah\x9a\x1c\x8a/\xc34\xcdJ\xa0\x0d\xf9\x18\xa7>\xe7\xeaM\x9d\x15\xd1zn\x8b$\xed\x1a:$\xebY\xe4Y\x03cn&\xbb*\xc6\x1e\x19\xdfa\x80\xe4X\xa6\xab\xea\x84\xfb>\xac\x9b\\\xce9nh./\xe8\xd2\x8e\xd2B$\x0d\xd6J*h\x91\xd9|\xf0\x91Zc>\x01\xdd\xfb\x13\x80\xe7\x10\xb4\\A6\x81T\n\x0eM\xa90\xca\x17\xb0\xf0\xd3\x02\x00Rj\x1b\xd1%sr\xd5$\xd3j\xeb[R\xf0}\xd1\xfa\x9d\xe7C\xcc\xe5\xeeg\xc3p\xb7\xa0\x06\xa4#\xc3\xb6>\\\x94$\x07\x92\xcem\xc1*L\xd4\x8d\x84\xa2\xf1\xb0\x98V \xefb\xca\xc3^\xeb\x9c\xb7\x9dK\x07I=c\nZ\"\x9e\xca\xa2H\x00\x89\xb8iH\xe53\xe6\xa9\xa8\x06\xe8\x7f\x1b\xde\xe1Ua\x0b\x81\xb5\x11\xf4\x14PfP\xa0\xb1\x80cM\xd6\xdf\x04\x05a= 9\xa4\xaa\xa3\\C\x9f\"\xd7i\x9a\xa5;\xac\xd9'\x1c\xd3 \x9f\x83\xc1\xbf\xb9A\xae\xb6\xee\x95\xba\xee9+\x89\x05\x1f\x1a[\xf7 f2S\xe6\xe6\xe7\xc6*\x01V\x19\xee~-\x0d\xb2\xed\x0f\xdaq\xf5*\xf1MM\xf7!\xf0R\xd7\xe8\x19\xd5A`\x8e\xdd\xdf\xdc)~}\xb1\xc7\x1e\xe9\xb4\x91<\x92\x9f\x87\xda\x08\xc3\xdeP\x8e\x06_U}A)\x11\x19K\x17\x9e\x99\x05T\x16\x8co\xbd\x03!J9Z|g\xde\x99Y\xaa\x16[\x8d\xac\x86\x91\xb4\xed\x02$ \xd73 \xaaf\xd0\xfc\x1d3\xdd\xd7d_c\xcb\xba\xa0\x05Q-\x18\xc4\xeb\xc1\x04\x0c}\xe7&b#k\xb3\xb5\x1d\xfa\n\x0b\x17\xdc}\xd8\xf0\xc6\x1d\x83A\xf3.?B\xacp\x0cq\x8f\xaa\x8c\"\x1cc\x1c~\xf9\x11\x92\x07c\xee\x05\xf9\xa17\x9d9;\xdb\x8f&\x0b\xd2\x1f Q\x8ey\x19\x8e\x8dL\xbe\xb1\xaeU\xc83:\x85\x89\xf9\xf02I\x8f,) \x1b\xf8\xd1 \x9e\x8b.\x88\x152\xce\x0f/\xb0/\x85\x82\x836 CO\xd5 \xe2I#\xdc\xd9i\x1c\x8d\xba\xda\xae\xd2!\xad+<\x9b\xda\x8bA\xa7!4a\x0c\xc8\xb3\x1f;;\xbe\xa4\x15\xa5\xe4\xab\xa4/\x93\xa4\x1e\xf8\xcb\xa8=k\x0bL\x98\xf6\x8c\x93\xc4\x9dD`A\xca\x1f[\x1a\xf3nZ)\xb6\xa5A\x14\xa4V\x19\x94\xd9O\xd9-\xc9_\x86\x05\xf3\xb0\xd8rg\xce\x92|\xa1\xdc\x11\xd7\xbb\xd3\x7fw\xf0\x8f\xb0\x88\xe2\x98\xfeq\x15\xa7a~\x87\x7f\x85\x059\xd8\xc3ZQ1\xe5\xff\xeeL\xf9g\x93\x83\x84\x88\x16\xc4\xdfyx+\x19\x19\xb9,\xd3\xa2\xa7\x8d\x03\xad\x8cp0\xb59\xe2\x90\xbbm\x8d[\xc1,\xae\x9bt5\x12{@ \xccM\x98 )\x10\xf7\xf6\xb6\x1c\x98\x8e\xb1\xb8\xb5\x8eZ\xc8\xbcr\x19\xde\xe4\x8d \x8bP\x1e3\x10\x8774\x17\xb2Y\xcan)@g\xc8J\x01\"\xe2\xc6>h\\\x0b7\xfdZX]\xb7y&\xd3\xb2)\xd3\x04fiDj\xa1[\x07\xe9F\x1a\x93\xa3\xb1/\x99f\xb5E\xd4 !\x95\xbc\xc5\xa8\x0c\xbc\x82\xb5\xe9\x92\xf1\xdamt\xad\xe4\xdd2\xa8\xb6k\x0bt\x1d\xa0\xf0\x01\xb4\xe7\xd6\xbe\xe6\x852\x1e+\x9fk\xe9\xde\xed\xec\x9f\x9e\xe1~1\x89z\xd3\x1a%\xf7\x8d\xf8[\xbb\xa6U*\xd7\xa9\x7fi\xb5\x9a:\xbd\xfc.\x93\x94\xa4s\xd7\xf3\x81\xb4\"8\xfd\xa1\x19\xa9\x9a\x9b\x11\xb3\xe8\x1f\x8d=\x8a\x0e\xdf\xacVd\x1e\x87%\xd9$\xb5~\x7f\x0e6\xfb\xbe\xf0\x03\xd2\x1b=\xe2\x9b\x0c#u\xf7\x0e\xf7<\xd7\x833\xee\xbf\x8c\xc9\x13\xd1\xb0\xf5p\xff+\xa6z\xd3\x84o>2\x87R\x99\x9a\xd3\xc2\xed\xea\xc1\xc3*\x83k5G\xec\xedPC\xfc\x1275\xb5h\xee\xca\x07\x850\x8a\x0c\xaf\n\xf5M\xf4Uy\x02n\xea\x90\x0d\x0b\x1f4k\xf4\xb8\x95=\xa5\xb2\xf8V\xaa\xdf\xa1B \xc5\x00\xb6\xcc\x1b\xd8k\xfc\\\x17Z\x84\x05\x86#h)\x0bo\xb1\x10Y\n\x16\xf0\xfc\x14\xb3\x14D\xee\x82\xa7\xfc^\xc6\x8d\x93\xd3\x0eDn\xe1.<\xef\x04X\xe4-\x18\x8d\x0c\xea(\xb4\xf3\x91\xa5\xac<\xccP\xc2Q\xe3\x8c\\\xf8\x90\xbb\x89\x94\x02E\xc3\x8f\xbc\xb47\xd3\xfc\xa0\x93\xa6xH\xb4\xb0\x91\x10Tj\x03\x18F\xd4\x9aDo\x96\x14\x8fHa\n\xc2\xc4\xeeA\n\x12]\xa5\xbcx`R\x82\xeeA5\x07\x8b\xd6\xad\xf3\x8b\xb0P\xcc\x9f\xc8\x97\xf2]6'\xaec\xcb\x99\x92ah\x01\xdbx\xb4\xb0\xb8]\x029\x0b\xfb\xcd\x1d\x858\x82g\xcau\x16#\x9bX\xf1w\xb7u\xa1\x90.\xb1!v0\xfdp\xaai\xe5\xc4c\x96\xa8\xa0\xcb\x9aJNY\xe4\xb8i\xe3\xc3\x08u\xfa?V\x1f1x\xe9Zf\x86\x176\x0e\xe6a\x19b\x98\xc2S\x18\x8d2\xf8W\x982s\x07l-(\x96\xf1\xa2t1\x04\x05\x17\xbf\x08\xafkN\xe1\x95\x06m\xd5\x83\x17dW\x05\xc9o\xd0R\xca\xbcx\xd12\xcc\xc3\xa8$\xf9\x8fa\x19\xb6\x82\xfe\xb3V,\x16\xeb\xbd\xf4\x02}X\x9a\x17\x0cai&X\x99\x94{F|(/P\xec\xc0\x15\x94\xa8\xbde\x04\xb0iq\x86\x88\xc5\x1e|3\x1c\xb6^\xe3v\xe4$$p\xec\xaa\xb0&\xc1\xb4\xe4\xf6f\xf6B\xe9\xe8D\xdcO\xdaM\x9d.\xa8C\x8cj\x1c\xca\xdb\xaa\xc4\x84|\xef\xd9\x8e7~\xb1\xb1\xdbze\xbf\x95\xc6\xa6\xffL\xae\xfe#.;:\xb0Th\x1f%\x1bH1\xdf\xa8\xde\xe0\xbb\x80\x8c_\xee\xea\xa2\n\x00\x16\xb8\xd5\xd8lA\xcaO\xf1\x8ad\x15J;\x0c\xdb!U\x182\x80\xa6\xba\xcb\x0e\xfb\xd8<\x98\x96T\xeeA\xba\xb2\x83\xe8\xcaoBeY3h\x9a\xb2f\xaay1\xa7l\\\xfb\xd3}\xfe\xef\xc1\xc6y1;F'\xd2S\x1e\x9a\x92\x8d\xa1\x86\x8f\xa7'P\xc3\x0e\xe7\xdda\x87\xd5X\xe9\x96|WV\xc8 \x84t\xed\x0e\x92,\xc2\xc3~\xdcJaF\x9fe\\\x94Y~g~\x99\xadI\xaa\xb2\x7f\x86J\x98\xf2\xab\xb7\xd6\xeb8\xd1+\xd9\xe6\x0b\xe2\x86K\xf1\x82\x9b3\x7f\x8b\xc9\xcal\x89\xfa\xccV\x1cta\xd8wmxr\xc3\x1dFm\xda\xb8\xb4C\xc5\x9b\xd7\xf1\xde\x0c\x82P\xab=Im\x08\x13\xf3\xb0Ih\x15$\x82B\xbb3\x87\xae\x95\xe3\x83\xf3C\x92]\xd1\x7f_g\xf9\x8a\"=\xe7\xc2;\x01\x16\x16\x13\x13\xf3U\x08\xc0]\xcf\x0b\xe6YJ\x90\xc4E\x8dE\x07\x92\x13z\x97\x98\xe5\x10\xb4\x93\x1f!\xc4)_3\xc693;QV2\x0b/\x86`5,\x91\x0d>\xec\x0b\x93;\x8c\xee\xe0P`\xe0\xd0k\xcb\x0b]=\xc9@\xaf;\xbb$\x1eW\xcf\\\x9f\xb8@h\xd6\xe7>\xdc\xf8p\xe7\xc3\xb5\xde|\x81y\x0f}\x98\x1b\xdc\x92W>\\\xfap\xe5\xc3m/\xbb\x08\x82\x83Z\x83\x08\xb6\xfa\xa2\xc6\x05/\x8c\xf1 \xe8#\xc2\x15v2\x00\x18\xef\x8fe\xec1\x87\xe0k*1C\x8a\x8ej\xd0\xacf/\xfbi\xf8\x86R8i\xad\xdd\xea\xfc\xca\xe2\xfce,\xdddD\xc3Gb\x00vmt\xf9\x05\xbd\xa5G\xe0\xc0\x1bq\xa0\xdb\x95\xce\xe1\xb4^[\n&n\xdaU^Y\xd0\xf1\x0bT\xca5\x82\xedV\x85\xf7p\n/f fNz1s\xfe\xed\xdf\xea\x8b\x85E\xe8\xfc\xf1bvcH\x1a\xfd+\x05\x86L\xdfxc\xe00?S\"\x00\xce\xe0\x1c\xce\xe0\xd6uHZ\xe61)\x10\xa2\xfd\n\xf6\xd4uoX2\xb7<\xbc\xc3\xa9\"\xa2z\x11\xf0\xafio\xef\xdb\x14\xd1\x1bD\xc5W\xf4\x96\xb8o\x18\x19\x8e\"\x0e\xcf\xf3P\xea\xae\x8b\ni\xf5+\xa6>G\xcfj\xf7\xca\x87/>%\x11(\xba\xa5<\x85\x89\xed\xb8\xe2\xabT\xd1\xea\x89\x0fK\xcf\xf3\xe1\x9c\xb6\xf0\x1e\xe1\x8c\xd8 \xec1H\xc3\x15\x93\xad\xbf\xe2x\xfc\xd7\x81P\xe6\xbd\xd5\x9f\xcb\xe3n\xf1[L\xf7\x8bW}\xeb\x15\xdb 1\xb4\x178\xb4_=\x1f\xc2\x19\xa1\x94\xc9\xaf\xf4\xaf/\xf4\xaf\xa5\x0f7f\x11\xdf\xcaj4\xc1\xe6t\x8c\x9bHw\xed\xd6\x15\xd3\xb4\xc8\x14(\x988\x86\xbb\xa6\xba)\xd3\x97x\xf8\xae\x1e\x83A\xb1\xe8\x9bl3A\x90\x89\x97\x14\xc2\xad<\xc0\x7f_\xd0\xa9gt\xea\x97>\xacf\x97\xa6\xf0\xa2,|\x91\x1b\x07\x1f`\x04q\xf0\x1a\xbe\x07wM\xbf{\xe5!\xfc]\x99c\x11\xad\xea\xc2A8\xf7FJH9\xb5\xd0\x0f]\xdfC\x1d\xa7\xa7\xd4\xd2\xe4\xda\x08{\x01\xc1\x8d\xba\xb9\xae\x08\xb3:\xcc\xeb4\xd2\x12}7,\xae\x05\xe4\xb5\x17\xbe+ mk\x0c\x1d\xd6\x81`\x1c\x06\xfd`\xa3\x91X\xe2\xd6\x9aF\xd2\xe30n\x1c\x8c\xd5\x1f\xb9+\xce\xca\x10\xf4S\xf7\xc64\x08DV\x1fX\x9a\x1etb\xe5\x93\xb9\x95\xba\x93}\x16\xa54u\xa7G\x9e]B\xccG\xf3\x14\xb6N-\xcaT\x91\xda{\x1e\xdf8\x9e\x0fN\xf8\xf5j\xd4\xa7m \xa1\xce\xdc\x0b\xc2f\xf2\x1b\x92\xfbS35|\xf4?3\xdd\xa2\xaa\xf6\x9bn\x9a\x19\xa8\x95s\x98\xab\xf1\xcc\xf9A\xa6\x93}\xcf\xdd\xd2)uc&\xf9\xbeu\xb1\xc7\xfa\x0cyB\xc76\")\xda @\x813\x163\x8d\xec\xe5\x9a\xb58\x85\xd0\x83\x94\x1e\xde\x8a\xed_\x88K\xb1\xbd\x0d\x11\x13^\xeb\xc1\x0d\xb8\xf3\"i\xc2\xe7\x16'\x1e\xff\x8e\x12p\xb3b4b\xf1}\xdd\xff\xca\xdc\x08[\xbb\xbfoZ3#\x97h\xb3M\xed\xdd\x9f}s\xaa\xe8\xcel\xfe\x95A\x93\xda\xc5\xf7\x06\xd7\xa4\x94\xb2d\xabV\"\x96c]\x8a\xbd\xe3y+\x91\xc5\x9de\x176\xf9\xae\x9ae\x8b\xf33\x8dW\x85\xf2\xf6L\xfd-\xd1x\xc7\xeag\x9c!?\x83J\x97\xe4n\xb8\xf8\x87\xe6\xc5o%\xe4no\xc5?s\x14\xd7\x03\xee\xcbu\xf8?;G\xb1\xf5\xec\x98\x12/\xfd\xcf\xcd\xa5\xdf\xb9\xcd\xbc\xb7\xf6.+\x16\x8b\xee\x04\xb6\xc1\x04\xd5\xb5<\xb6\xee\xd4RO\xd8,\xd1:{\x96:\xe6\x8c\xb7\x9b\xeda\x9f4m\xb2{\xd0N@\xbf\xfb\xf4\x9f \xe8\xa5\xe7\x7f@\x02\xfa}sR\xc4\x01\x19q-\xe7\xbf\xae`\xb3\x9f\xa4}\xf3@\xe6\xcd\xbe\xc7\x14.\x99y\xe6\x82g\x016\xbf\xa5TOhu\x14\xe1c*DJ\x9c\x82ns\x84 \xd6x6s\x8e\x03\x8e\xc1\xc5\x08\xdb\x98D\xf1e6'/J\xb7\xf0\xe4\xee\x9d\xe7\xc3\xdd\x1f\xa4\xa2e\xe7t\xa5\xdd\x91?r\xf8\x15\xc0!\xa4\xee\xde\xc4s\x13\x0f-i\xbb\x1aK\x1a\xd7\xcb\n\x83\xf4\xfa0\x91\xcc\xae\x1f(eI\xf7\xe1&H\xb3\xdb\xde\xd6\xb0\x96\xb5\xa19\x86\xce\x16\x06\x99\x94\xa2\x9c{\x01\x05zS\x1fb\xfcc\x12d\xe9\x8a]68\xa5\xd4\x07\xc6\xcap\xb3`\x9d\x15%\xbf\x85\x08h&\x18\x81i\x11\x84\xf39&\x1a\x94Se\x197Cj\x00\xc9\xbcE\x10\xafh\x8f\xe7Q\x1e\xaf\xcb\x82\x8e\xac{j\x0by\x0c\xdc\xa1\xdc\x07\xe7{)\xac\x17\x85\x94\xad\x11\xb9\x0e\x9f\x90\x83\xe4\xd4\x16\x1b9\xed\xcb\xc9\xd2\x9c\x84\xf3\xbb\xa2\x0cK\x12-\xc3\xf4\x9a [\x1d\xb9N\x81\xa3r\xbcNK\xf5\"\x08\xd7k\x92\xce_.\xe3d\xeeJ_yA\xbb\xe5\xbe3,\x123\xb1\xc6J\x16MY\xdcS\xab2\xb9\xd3\x94Q\xb2\xa0oN\x84bG\x8f\x99>%\xc4\xd7\xfa\xfe\x18\xd6\x1af\xa0\xb0\xfa\x18\x9a\xecC\x9b\xd1)\xf6\xc1\x9a\x95\x0fVy5},\xce\xf5\xf4\xb996{\xee\xa8\xeb\xd8i\xd7\xda\xdb\xb5\xc5\x04\x9bv\xdd\xd7q\xcf\xeamJ\xe9\xb4\x0c29\xa53\x1ed\xed\xa2O\xbe1u\x89]\xe6YH\x14\xe5\x1e\xea\x9bl\x9e\x857<\xb6U\x16,ZQ\xc4\x05!\x8c9\xc5sRd\xc9\x0d\xf10\x9c-F\xb1[\xc5\x05y\xec\xc2\xb4V\x80-\xcc\x9e\x9d\x04\\\xd1\xad\xef'\x00M\xd4\x9f\xd9\x99\xb2\x0en&9\x963O+N\xdemmQ\x02\xcf\xf9H\xae_}Y#h\x8c\x15\x0f\x9bAS\xb6\xdf\xd6\xda5#u\xa7\x87:A\xd7\xb8v(\xf2\xffA]\xca\x12V\xe3*\xeb\x9dq\x03\x84\xa3\xde\xc5\xb5Q\xd7\x88\xa1\x02\xae\x1b\xc6\xa46\x1eW\x8f\xb12J\x16\xb5\xaeX\x85\x84\x9d\xba5\x15\xcf\xfb\xcb\xb2A\xb9yp\x0e#\xc8\x91Y\xce\xba\xf5\xbc\xf4\x90(\x85\x98\xbf\x9dk*}9|\xd4\xa054\xcb\xae\x89\xecr#\xc2\xb5\xf3}\xec[(\x14\x8e\xba\x8a2\x9d\xd8B\xa9\xf0\x80\x84\x14\x97@\x08Q\x12\x16\x05\x84\x85\xe2%\xfb\xbbLG\x93\xd2\x0bO\xa4\xc9\xbe\xe9\xc4|{W$\xe3Z\xb6\xc8\n\xfe\x02J\xab^\xbc&oS\x96\x1a<\xc5\x18]\\\x9d\x03\xe9h\xd4E\xe8\xe7h\x89\x92Z\x08\xfd\"\xd2\x84\xac\xa0s\x01\x0f\xad\xaeB\xf6\x89\xe4\x95\xbd\x95\x07\x0b\xce\x97\xb1\x80J\xe5\x8c\\l\xb8_\x8f\x03%8WJY\x1d\xea\x1a\xdf\x98\xbf\xda\x1dO\xf5W\x19\x7fE\xe1\x8f\x9c\x86\xb0F|\x86\xdc\xa4\xb5\x89 \x0b\xd4,\x83\xa5\xb2\x1b,iA5\xfe\xd0\xfek#\xf8d\xb9\xea\";\xc1\x163\xc27\x12=\xe7\x14:\x01\xf9\xb2\xceIQ`\xd6\xa4\xaa(\x81\xc4\xe5\x92\xe4p\xc5c\xccf\xb9D\x05\xb1`\xcd\x0e\x8c6\x86J\x1a\xb8\x935s\xccc6\x96\xaa3\x8eJ\xc2\x8d\xed\xe5\x94\xd8-\xd3jC\xa7\xf5\x0d\x0c\x08@\x07\xaa\x91\x96\x85\x95\xd5\xcc\xbd\x0c1,\xd4\xdd\xc6\xfb\xc8\xa8\x11\xb1\xc7g8\xfd\\\xa1CD\xb2\xa1K\\\x83\xcbKJ!}\x93\xfb\xa3\x1aX\xef\x8e\xbfM\xfc\xa4\x03\x93}`\xea\xee\x99\xedz'-\xc5\x12zMS\xe09f\xe1\x07\x0e&\x9eb\x906e\xe5\xbb\xe3\x03\xe3\xf5\x0cMc\x06a\x97\xb6\xce\xb3u\xd1\x845\xa4\x98\xaa\xe4\x01HyIN\x16\x05K\x0d\xc5B\xcc\xad\xe7a\x89\xf9\x0f0Nr&\xad{\xbb\xef\xe2\xef\xd8w\xa4\xba\xdd\x87r\xf4\xa9\xe2# \xa3\xf2e\xb6Zg)\xc1\xbc7\xbf=\xf8J\x95\x82\x94\"EY'\x90\x91\x88\x11%n\xa69\xf4\x90\x04x\xd8\x8f\xdcu\x0e\xf7\xeb\xec\xef|~\x01I\xffZ\x91\x8a\x9c\xf31\xd4V\x15\xbe\x94\x87^\xab\xfb\x92\x87\xa2\x15\x11\x9d|p\xc4\x14T\x01\xa7<\xc9E\x96G\xe4gl\xa8[\xb6f\xe8\xf0u\xf3\xad\x906\x96\x03\x07W\xfa\xe0H]\xab\xe3\x8b\x14\xd8\x17\xcap\xaeP^Qp\x1d)\x85\xaa\x94 \n\x1fb\xb7\x90\x1b\x90Z\xf3\xd4/\xe3\xe2C\x95\x93\xd6\xa9\xe0 D,\x8cB]\xf3\x18B\xf5\xca\xd2\xc6\xa4\xb7\xc5\xb7\x00N\xa9{ ;\xaf\x0b\xf8\xa2\xe1\xbc\xe2mV\xa5%\x99\xf7\xc5\x0d\x14\x14\xb5fc\xa9NC\xdb\xbe6ae\xae/\x1d\x0dm\x18\xe6\xfa\x1f\xc9: #\x16\xa0ph\x1f\xe2n\x18\xea7\x8bm\x86\xec\xf9\xe3\xf7@,\xba\x1c\xac\xfe\x1b7\xfd\xdb\xb7\x1f\xb5\xfd\x04GU\x9e\xe3 \xdd\xdcu\xa2{\x16\xc3\xb2\x9a,\x98#H\xf3\xcburz\x05\x03\xc2\xd4\xf8\x0e\xfa\xdb\x1c\x8c'\xe3\xdd\xdfuQ\x9c\xf3W/?\xbe\xfat\xf9\xe3\xfb\xcbw\xef?]~xq~~\xf9\xe9\xdf\xdf\x9c_\xbe\xffx\xf9\x97\xf7?_\xfe\xf9\xcdO?]\xfe\xf0\xea\xf2\xf5\x9b\x8f\xaf~t\x86\xf4\xa9Q\x12\xd3\x897L*\xd1\x17!\xafu\x97\xcd~z\x14\xfc7T\xb7\xd1I\x8f\xd3\x7f\xba17\xa6\xbb\xba&\x14\n\xae\xb2\xf4\xd5\x97\x92\xa4\x94\xf8-0\xca\xf85)\xb5\x12RD\xe1\x9a\xfcH\xc8\xfa\xa78\xfd\xfc!\xc4\xa4\xcb\x84;\xbb\xb5\x8a\x8be\x98$\xd9\xed\xab\xbfVa\xf2\x1f\xe4\xae\xe0i\x05\xe3d.\x82\xbe\xb0jY^\xb2\xccz$\xb8*3^H\xf28L\xe2\xbf\x91s\x12\xe6\x11ko\x1d\xe6\x85\xfc\xfb\x9a\x94\xe7\xe1j\x9d\x90\xf3hIV\xec;L\xd1\x10\x96\xe4C\x98\x87+\xad\xa4,I\x9e*eo\xe3\xf4'\x91;Z*\x0d\xbf\x18J\xffX\xc5s\xa5\xe0\xc7\xb0$\x9f\xe2\x15Q\n\x99%\x8cR\xf4C\x96%$T;~\x1d'\xeawo\xd2\x92\\#\xad\xd3\x94\xbd\xabVWZ\xd1\xdb8\x8dW\xd5J\x1fn]Fi\xac\x97K\x12}\xe6\xdf\xad\xc8*\x8b\xff\xc6\xba\x8a\x8b7\xabU%\x84~\xa6\xd0>\xe2:_Q\xd6p\xfa\xd4d\xbd\x1e\xd7\xaf\x8fL\xaf3\xfe\xfap\xcf\xf4\xb6\x12\x1f\xef\xee\x9a^\x87\xf5kc\xd7\x05\x7f\xcd9S\xf9\x15\x9d\xdc\xff=\x7f\xff\x8e\xeb\x00\xfa\xec\x19\xec\x9eK\xc2*\x816\xc6\xce\x9b1\xb9-p~\x93\x85\xa4kb\x97\x0d\x11P\x15*+X+\xc6Z\x9d\xf4\xa4\x93\xb2\xa1\xf4:\xedD\xbc\xb8\xeb] \xde\xc8+\x17C\xd6|qy\xe4\x9a2\xfb\xbf\xe7.\xb2]\xaa\xdfj\xdd\xc3\xff\xcf\xde\x9fw\xb7\x8d#\x0f\xa3\xf0\xff\xcf\xa7(\xeb\xc9/C\xb6i\xc5r\x96N\x9c(\x9et\xe2\xa4\xdd\xd9z\xb2\xf42\x8a\xc6\x87\x96 \x8b\x1d\x89TH\xd0\xb62\xf2\xfb\xd9\xdf\x83\x02@\x82$\x00\x82\x8e\xbbg~\xf7^\x9e\xd3\x1d\x8b\x0b\x96B\xa1P{\x85i\x1a\xae;t@E\xb3\xe8\xd8\xaa\xfe\x8d\xbd\xbc\xf70@v4nv4K\x93\xe5O\xef\xdf\xa6S\x92\x125\xef7PO\xab|g\xabr\xe1\x11c*S(VN\xb1\x84,\xe5\x92\xf4\xd9\xbe\xb4}Z\xc0\x8b\x94\x19x\xa3\x8c\xcf\x04oM\x8a\xa6\xde\x93/\x1e\xf1\xfb\xcbp\xe5Q\xccd\x1fe\x14g[\xbe\"\xa6\xf5:\\\x95oB#\xc6 +;D\xf1\xf4C\xe2$\xa2\x80b\x16\xab\x1b\xb8\xa0jV\x0d\x159\xdb\xef\xcf\xa2\x05%J<\xa3\xb1 \x91hA\xefD\xa3\x8d\xf9\xf3\xd9i\x7f\x18N\xe6e\xeb\xc6\x1c\x01\xd2*0J\xc7h\x0dM\xc78{O\xe4^\xd7X#\x9a%\xfe\x18\xc8\xe2$]\xe2 \xc2qn\x08\xef\x03\xa4\x13\xcfcW\xa4m\xc9\xe8\\\xf4\x14e\x05\xdd9\x14}\xe4X\xfd\xf8\x9a{\x91\x13qj\xb6\x8a\x9bu\x97\x10A%^\x87+\x17t2\xa2LJ\xa6\xf9D)\xf2g\xcb\xfdP]W\xe2\xb1\x95\xe5\xa6\x9df&\xd8\xcb\xa0\x12\xd1\x08\xca\x90\xdfa\x97\x7f\xd9\xa8\xcfD=\xabr\xbc\x06\xcb\x9cP\xf7Z\x0f\x84\xa8\xed@\x88D\xa5\xa7\xdd\x00\xf2\xf2n\x1c@\xd4 L\xd9:\xa3d\xf9a\x9e\xc7\x9f_G\xd3\xe9\x82\x9c\x87\xa9]\xe4\x07\x9d\xe5\xce\x04\x13\xd2\x9fJ\xf7I\xc1\x85\xe9K*@\x97Fu/7\xf4H\x86\x0f\x8cyKc\x8fz\xe8\xbfE\x9c$\x8b\xe9\xc3\x1e/_\x8f\xff\xa9\xaf\xe2\xbd\xf1h\x05\x07\xb8v\xb7\xe1\x00\xf6`\x1f!|\x0f\x0e\xe0\x8e\xf8\x9b\xdd\xbf\x0d\xfb\xb0}\xeb_^\xe8\x9dd4\x0d't\xb3\x88\xc2l\x13O7\xd2y{\xc3\xf6\xec&\xf3\x96\x9b\x8c\xa4\xd4?\xd8\xe44\xf17'^\x98\x91\x0d9\x8d\xe2M\x92,<\x12\xc6\xfe\xc1&%\xe1\xe7\xcd\x9a\x12\x7f3\xc1\xc7\xec\xc0\xd9\xcc\xc3t\x83\xf2\xedt\xb3\x08\xb3l\xb3Hb\xb2I\x96\xab\xc5&\x893\xbaIb\x1a\xc59\xf17S\xe2\x9d\xe4\xa7\xa7$\xddL\xa2e\xb8\xd8L\x16aJ63\x8f\xed\xf1\x0dI\xfd\x83M\x14Gt\xb3\xf0\xc8iH\xc9\x86P\xe2\x1f\xf8\x9bi\xb2\x99&\xf9\xc9\x82l\x887\x99'\x9bEv\x10\xcd6\x8b\x8cx\xd1\xcc?`\xf3\x88\xb3<%\x9b8_n\xceHL7\x17\xde\x84\xac\xe8\x86L6+\x0fS4o\x92\x94\xfa\x1bJ\xbcx\x9amPs\xb2Ic\xdf\xf7Y\xd7\x8b\x05\x9d\xa7I~:\xdf\x84\x8b\x8cl\xb0l\xf9b\xcd\x86r\xc1\xa6\x93\x84\xeck\x8f\x84\x939\x9b}D\x18\xd8\x92\xe5&\x8f'\x1e\xdb\xbdl\x80\xa7\x8b\xe4$\\lN\x13\x9alN\xf30\x9dn\"o\xb6Y\xae<\x8e\x03\xd9F\x19D\xecEt3Y\xe4S\xe2\x1d'\xf1\x84\xf8\x07\x9bE\xc4\xa0\x95\xd3\x8d\x14}6\xd4#\xe9,\x9c\x90\x0dI\xe3p\xe1\x1f\xf8\x07\x9b\xcc\xdf,\xbcpy2\x0d7\x84n\x92\xc9\xe7M\x12\x9f\xfa\x9b\xa5\x17M\xd2\x04I\xe0\x06\xf5L\x1b\xaeK\xf07o\xc27\x9b\xd8\x0b\x97$[\xb1\x96B\x1a\x9d\x91\x0d\xb9\xa0\x1br\xbe\x89\x16\x9b\x84n\xf2\xc5\xc2\xdf$\x1e\xb2E\x9b\x15\x8f\xaf\xdc\xa4\x9b\x9cn\xceH\x9aFS\xe2oV^8\xf9\x1c\x9e\x92M\x98\x86\xcbl\x93Fgl]\xd2\x84\x92 %\x0c\x104\x99$\x8bM~\xb2\x88&\xfe&\xf5\xc2\x88a\x8c\x17N\x93x\xb1f\x0b7\xdb\x9cF\x19%\xe9fEB\xba\xf9\x92Gi9\xefl\x92\x93\x0d\xd7\xb3mh\xba\xde0\xaa\xe8\xfb\x9b\xcc;Y\xb3\xc5\x0f\x17d\xba!\x8b\xd9f\x9e\xa4t\x13\x9d\xc6d\xba\x89\xbe\"xB\x1aM6\xa8\xd3\xd9\xa0\xa9a\x93\x9fp\x97\x84M\xbe\"\xe9f\x1dO\xe6i\x12G_\xc9t\x83\xb1\xc4>\x83\xe8r\xb5`\x83\x9f\x93x3\x8f\xb2\xcd\xf7|L\xd1\xce\x06\x87\x11^\xf3z\x8a\xf6\xcc)E\xfb\x14\xab\xfc\xa2AB\xefGR\xbc\xdc\xf4\x86\x99\x06Pw\x06\xae_X\x8b\x8c1\xa6\xd6\xb7N\xf1\xadA\xcb[K\xc6\xd3z\xa7\x01\xc4\"\x83\xc9\x00K\xede\x84za\x00k[\x81\xe2&*H\xa1c\xc9\x84\x8e\\: .1\x19\n\x0fq[\xea\xb9A\x0d\xb1hMU\xdb(\x9a([0\x11\xa7\xc2\x9b\x8d{\x87\x95\x84\xbe$U\xa3\x81\x86\xb8H%\\\xa3\x08J\x80\xf6\xb5l\x12.\x9e\x86\x19\x1b\xd6\x93\xea\x9d\xe7b\x90\xad\xa0\x91\xeaG\x8f\xf6Sn\xe8\xf7n}\xea\x8f\xfe\xd5\xbf5\xfe\xee\xc6-&J4K\x7f\x92~\x16\xc6\x11\x8d\xbe\x92\x8f\xe9\xa2\xb5\x87H\xad_\xabz\xdb0a\xadW\x8b7\xd2\xc9\xd6\x8abp\xa6\xf6\xeck\x8f\xe0SB\x9fL\x18\x97\xcf\xb0%M\x16\x8b(>}G\xb2U\x12g\xed\xd0\xa8\x9dd\xa5\xc2\xbf\x1fe\x8a\xf6_Q\x87\xb0\xa51i\x0c\xaa\xc7\x9e\xfe\xcdR\xbf4\x8b\xe2\xa9\xd7\xaa\xac\x91Wq\xc2e4Li\xf6kD\xe7^o\xafW\xe8#U\x15*\x83\x89\xd7\x9b\xf0\xdd\xc3\xad\xf6\xff\xbe\xf4K,lz\xfe\x01\x98+X\x15\xaa\x1d\xaf'\xba\xe8\x89\xc4\x9b\x1a;\x89\xa1\x8d\x14\x9d\xe64\xe3\xd27\xe2\x17\xca7a\xea*\xb3\xa4\xc5\"O\xa2Y+\xc7\x9aM\x9bx2%d\xb5X\xbf\xa7i\xb4zI\xd65~\xcd\x927\xecZX\xaab\x99[\x94\x81:\xa7L=\xb6ut\xbb\xafZ51\x99N]K\xb7\xd9\xa8\xe4\x8f\xf1q\xb1\xcd\xd4&5\xef5e\xf8\xbf\x19\xb05d\xb1\x86\xa3\x91\xc6\xe4dVh\xe3\x98b\xee\xa1\x17a=D\xd4*\x8a\xc8mv\x87 5<\xa1\x0c\x15o\xe8\xd3V_\x9aU\x90\x91\x86\xec!\x15s\xb1\xa3F\x86\xa2\xdd\xa6\x94\xe2\x80^)\x0c\xb9A-\xeb\xcdp\xddp\xa6\x18\xad\x16\xb4m\xc1)\xb7Z\x94\xd5\x8dMn\xf5P%\xbeU7_n\xdf\xd3T\x94+\x98\x9d6\x83d\x91o\xb1\xd9\x84iM\x18L\xc4g\x1a\xd2\x1f\xa3\x03\xc6\x87\xa4p\xeapX#\xfe\x8da\x8d\x94\xde\x8chR3\xfdU\xdfc\x9bb\"\xfd \xee5\xfc\xfa\xa1\xc8\xbaq\xfbN=<\x05D\xee\x0d\xf4\xb0\xb83\xd0}\xba\x92-\x7f\xbf\xab{\xaa\x0f\x89\xaf\x16_e\x0f\xcf*\x07\x89\n-\xa3\x05\x19\xb3\x16\xf4\xa3\x18\xf5\xe3\x99\x17\x97\x0c\xb8N\xb7\x02\xaa'\x809:\xd7m\xa3\xc1\x01(\"A\x84A\x13\x11\x16Z5\xf2\\.hm\x8d\x95t\xf1<\xc0C\x9c\xe2\xa7Q\x93\x18p\xfe\xad\x9f%K\xd5s\xa2\x8d\xddd\xbd\xac\x95a\x8eb\xc6[\x8db\x8d\xdd\xeb\xb2\xbe%\x9a'\xdf[\x83\xdfc\xeb\xfe\x80\"\x10\xf01\x94\x02T\xef\x97p\x91\x13\x1e\xe8uB`A\xb2\x0c\xe8<\x8cA\xb4\xdck\x8e\xb1\xb9;\xfe0\xf8gv\x18\xd3#\xf3\x98NQ\xe5\x9e\x8aa\xf1\xc6\x9d\x86\xf5Y\xefI\xda~Z\xa0\xa4y\xeb_;\x07\x9f\xa6\xdb\xde\xa7>\xfb\xc7?\x90\xb6\x01EN\xad\x0d4\x04\xc1\xf8\xb8\x0c\xee\xc8\xe0\xfa\xdamt\x0e\x83\x8a!\xe2\x8d;\x0d\xeb\xb5\xceE\xd7mLx*\xd5\xf2+\xd4\xbc\n\xcd\x90\x9bE\x0b\xe24\xc0\x0f\x06\xbfb\xb71\xf6h\x9a\x13N\x1aD\xccR\xb8\xc8\xd4\x1b[\xbb\xca\xdf\x03\xc9\xca\x9bF}\xc2\xbbw\x1a\xf8S\xbd\x8f\xb4\xdb\xb8\xf9`5\n\x1f\xf3\xd8\xc4\xcb.C\xfb\xd9\xe4\xd3\xed68^\xb1\x9f}V\xb8\x0b[VZ6\xef4\xb2w:\xf7s\xb7QIqO\n\x1b}\x9a\xbcJ\xceI\xfa4\xcc\x88\xe7\x07\xb0u\xeb_\xa3\x7f{\xe3\x83\xd1\xee\xce\x83pg6\xfe\xf7\xfd\xcb\x9d\xe2\xef;\x0e\x7f\x0f\xf6.G\xfe\xe5\xd8\x890\xb0\x91;M\xf8\x8d\xd1\x0b\xdf\x9d\x98\x96\xbc\x89\x1b\x9d\xe7]8\x0d\xef\x951t\xa0\xfb\xf0:\x90\xfc\x0e#|f\x08xp\x1e\xdf\x16O\xebpzx\x81\x1e\xc9\xb6\xa5\x9d%\x8bEr\x0e+\xd1I\x0f\xb6u.\xec\xd53\xbc\x19\x9e\xd1:\xb2\xabr\xb67oV~\x9b\xb9Z\x13\xc7\x8b\xac\x1eR\x9e\x93d\xba\x16je\xae`\x8c\xe2\x1ew\x93\xc7_h\xc8:\xbeX.z\xc7\xd0\xf9LyS\xb0\x1e\x867\x17\xe5\x9b<\xc9\x85\xfe\xb5U\xf9\xda,I\x97!5\xbd8\xaf\x8cQ\xec\x00\xc3\xbb\xd3\xca(\xed\xef\x9e\x95\xef\n\xc4\xad\xa7\x1e\x01\x01G\xeet\x950\xa67\xb2f\xe6\\3\x91\xbdT\xcc\x0d\x01\xbf\x8c\xf4\xfd\x83Pe\xf4B\x99\xe0[\xbc_\x15\x9ay\x82\x97H\x16\xd306u\xackJot\x94MN\x92<\xa6&-:\xbbN0\x9c\x8fq$\xcal\xccl\x8d\xb9!\xd4eH&\xa1l\xcb\x8bx\xa6\".\x96X\x06r\xc1\xbe/\xb5i\x95\xcfw[\xbf\xc6\x94\xf1\x92\xf9\xeb\xfe\xf9\xa1\xc1\xc8\x0e\xd2\x00\xd7\xd0B,\xcc\x9e|V\xed\xaa\x9bdvhp\x08\x90\x17O\xef\xad\xd7\x11G6u\xac\xbc\x94\x80\xa7\xc8\x0fD\x7f\xc6/\xda\xed\xcf\xf2\x92\xb4\x88\x1b\xb8{H\xf7 ;\xde\xf88y\\bq\xf6\xe1\xf1\x80c\xe9\xf9\x81\xa1\xfc8h\xf5\xb9 \xb6\xe3\x13F\xd2\xd7\x01\x9c\x16\xb5#0\xb5\xfd\xfb\x00\x0e\xc75\xe1\xd5:\xf6R\xdf\xa4}E\xa7\xe6\x07\xb1\xd4 \xf2\xcfe\xf9 9\xf7w\x82\xd6\xc3,\"\x8b)D\x19\xe6\x0fY\xa5\xc9Y4\xc5\x13@G\xb1e\xa3g\xb6\xc1\xb2\x89\x7f\x85!<\xf3\xa2\x00\xce,N _\xd1\xc4\xc1\xc7\xf3\xd5\xd5\xd9\x00\xc4\x10\xe6\xe5\xd6\x99\xb7\x8d\xe69\x0c\xe1\x0d\x1b\xcd\xdc2\x9a\xe7\xcah\x9ew\x1d\xcd\xb4m\x08\x1fa\x08\xaf\xd8\x10\xea\xa5E\xd4\xeb\xa32\x84\x8f]\x87\x10\x96\x00 \xdbF\xf3\x03\x0c\xe1-\x1bMh\x19\xcd\x0f\xcah~\xe8:\x9aY9\x9aY\xdbh\xbe\xc0\x10\xfe`\xa3\x99YF\xf3E\x19\xcd\x97\xae\xa3\xa9\x1e\x89m\xe3\xf9\xdd\xe2\xb7$/\xe4n\xbc\xdfQC\x1eR\xb2C\x99\x1c\x85\xcd\xaf\xe0\x00~\xf6P\x85\xd6\xcb\x99\xb0Q\xdc}\xc7\xef>\xe5D\xd4\xcc\x17\xc9K\xcc\xf6w\x93\x1bKIf\xab\x07[\xdb\xfc~\x85!|\xf0\"\x0b\xb0qv\xbfv\x18\xe3\xaf\xedc\xac\x1c\x9emC\xfc\x05\x86\xf0\xb9}\x88\xbft\x18\xe2/\xedC\xac\x9e\xd0mc| C8j\x1f\xe3\xcb\x0ec|\xd9>F\x95\xc1j\x1b\xe1\x8b\x96\xa1\x1d#\xf3S\xb0a.\x03}!y\xd6\xa3\xd8\x1b\xf5\"J\x96Y/\x00\xceg\x8f\xfd\x00\xa2\xa6\xa1\xbb\xcd\xd7\x03\x14\xc1\xaam\xdb\xb1\xab\x82I/\xd0I\x82!\x0b\x06\xabV\x97P><\x12\x0fU*\xf0\x02\x190\xf6\xf4)\x13*\x03ap\xe7\xeb`\x1f,\xbb\xa2xJ.\xf6\xa1\xc5g\x90]$M\x93t_\x13/\xa7^\x97\x96x\xb0v\x9cP\x18\xe46\x94\xb8\x01Cx\xdd\x8e\xb47\\pA\x00\xeb\x86+56\xda\xbd5\xfe+\xcdl\nvNI:\x1a}\xbb\xbb\xb1\xc6\xd2 \xc2/\xa8\xab\xd8\xdf0h\xe9\"\xa0\x19\xbco],\x17BwE\x8c\xf2]\xc4\xbd\xae.\x96\x0b\xdc\xb6\xf8\x17\x166\xb2\xad9\xd7\xf3\xb0o\x98\x94/\xbe\xfd\xf7e\xc0\xbe\xbfq#%3\xd5\x1d`\xbdBO\x18\xda\xc7}\xcd\xff\x14%WD\xb9'\xda\x0f\xa7S\xf4M\x0c\x17?\x97O\x0e\xe0o\x8f\x0eX\xe3g$\xcd\xa2$\x1e\xf6\x06\xfd\xdd\x1e\x90x\x92L\xa3\xf8t\xd8\xfb\xf8\xe1\xf9\xce\xfd\xde\xc1\xe3O\xb1pl\x87\xdf^\xbf\x02r\x81K\x0c\x13\x9e\xe2\xf7\x84\xc0)\x89I\x1aR2\x05\x1e\xa4\xf47\xa3\xff\x93\xbc\xa4!LL\xa7\x8f\xa9\xb1\xbd[\x9f\xde\x7f\xf7\xe9\x96\xf7\xe9\xfd\xb6\x7f\xe3\x96\x05\xd9K \xc2\x10\xa2\xd1\xa0\x19\x8c\x08F\xc6B1\x16\x9eJK\xed\xf4)\xea\xcb~{\xfd\xea\x90\xcf\x8d;\x93\xb8\xf8\x80\xb0\x89$\xc2\xc3\xa8l\x8fo\x82\xe7i\xb2\xe4\x1bA\xb4\xd7\x9c\x91T\x8a\x99$\xbb\xa4M\xb2K\xb0\xbcm\xcd\x13&)=a`_\xc9y\x06Pxi\xaaYP\xac\x8e_g\xa2\x0eI=\xa9\x92\xbc\xd8\x12\x94\xe2\xfc\"\x99\x84\xac\xa9~\x86\x8d\x1b\xf4K\xa5\xde\xd2\xb4\xb5z\xa8\xa47\xee\x11y\xf0\x90~\x96\x9fd4\xf5\x06\xbe\xac\x17tS\xa7\x8d\x01\xd5C=\x85(\x86\xd8\x87\xb8^>%\xe5\x8e\x8a\x18g8J\xc7\xb2\xc5!&[\x1bM\xc9$\x99\x92\x8f\xef\x8e\x8a,]^:\xda\x1d\xfbc,\xdd;@u\xa1\xf6\x9d\xc1\x98\xdbU{.\xf8$\xb7us\xcd\x9a\xd9l\xec\xb4\xd5h\x15_\x86+\x07\x7f6\xf19\x12\x83\xea\x8c\x88\x0f\xdb\xd0\x1b\xa2\xb6\xb6\xf9\xb4\x9a\x99T^\x97~\xff\x8f$\x8aqy\x9aS\x13\x19{\xec\x83\x92\xf3\xa9d\xdd\xa0\"n\x17K\xd5yD1W\x04\xd0\xcb\xe9l\xe7~\xcf\xf7\xcb\xbb\xbd\x930#\xf7\xee\xe8\xc6Pf\x10jv\x9d`\xb8Y\x94\xc4\xd9{|\xcb\xe4\xb5\x13.V\xf3\xb0%\x97\xacz\x154\\j\x13\xe7=\x1f\xb7\xd0\x02S\xc1\x85)\xf1\x88\xfa\xccpd\xeb7\xe6\x92\xd0y2\xbd\xf2h\xf8\xe7\xa6\xf1\xc8\xa7\xceLDs\x8c4<\xfd\xb3\xc0Y\x1b\xb2\xf3 5\x98Y\xcb4\xe5\xc6\xce\xe8\x9cT\x94\x8c\xeeQ\x0cF\xbd\x91\xf4\xe6\xa5F\x0f\x11\x85m\xe1\xa5oz\xe5\xdf\xa2\xcc\xd1(\x0e\xd8\x06\x0dt\xfb3\xf5K\x9f\xfa\xff\xd9\xdb\xbdu\x1a@o\xbb\xe7\x8f\xc5\xfe\xd4-\xa9\x91J\x11\xdb\xa6\xd6d\xee\xaa\xac\xa4\xc1\xb1\xa6P\x9a1\xc25- W\xac8\xe5\xb4\xb9\x8ct\xf2\x18\xa9\x8e\xbc\ns\xa9\x143\xa4's\"\xc0:\x8f[d\xcaT:&\xcc\xd9\x98\xd4(\x8d\x96\x9e\xb2H\x9f2\\\xa3c\xb4\xd8\xf4z\xb6\xe1\x1a\x92\xab9\x0d\x93\xc1\xec\xb8\x84\xd9\xd7\xa6{Y\xa0I\xe7\xe6\xd44m\xe6\x9b\xb0\xecd\xf1\xd1\xad\x7f]\xec\x14\xccu\xeb\xb2\x05\xc6\x14t\x7f\xe6\x08\x85\xfdgS\xd8\x976\x85\xf5h#\xecb\x1ba\xf5r\x9f\xca\xff)\x1f\xf0\x94\xdfl\xa7x\xf7\xee\xfb\xfd\x1f\xf2\xd9\x8c\x08\x7fq[\xf5\xa3\xb3\"sSq\xf2\x95x\xa2\xa6\x19\xacX\x8c\xc0%S|o\xc49U\xfe\xe9\x18\x91:nT\x8cr\xca\x06\x89\x94\xae\x1cWjcD\xf59\x0eAaO\xf9T\x94d\xbc\x8bhBL^\x97\xc4\xb8\xbc<\xa4\xaa\x9aL[\xe4K\xe4\x14@-1\xe1c)+S.\xd9zZr\xfdP\xecx\x99\x97\xbe\xaf/\x9b%\xb9\xf4-\xa6\xd6\x16\xc3\xb2\xc5\x17\xae-F\xd6\x16\xb3\xb2\xc5\x1b\xae-&\xed\xb3\xbey\x13\xb6&e\xd3?\xba6\xadI-\xaf4\xbd\xe5mQ.\x87\x8f\x16c\xb7\x06C\xd7\x06\xeb\x898L\x0df\xae\x0d\xce\x1d\x1b\x9c\xb4\xaf\xf8f\x83\xdd:57s\x1d\xdf\xb41>\xf5\x17\xf1R^\x83\x85x\x91\xfc#\xe1\x7f\xc4\x8a3+\xcf\xd5\xcd\xee\xbc$kL\xcf\x17\x8a\x17\xe2)\xb9\xc0\x1b\x19\xbf\xf1$\xcb\x92I\x84\x99!\x00s\xb8\xc4e\x00\x1c`x~\xdc\x97m\xb0\xae\xfbe\x0bl\x00\xfd\xf7\x04k84\xe9\x07\xa6\x19\xf8\xfb\xdf\x8f\x8f\x8f^\xbf\xfe\xf8\xe1\xc9\x0f\xaf\x0e\x8f\x8f>\x1c\xbe\xc3?\x8e\xff\xfew\x8dji\xd5\xfc\xe2\xe5\xe1\xef\x87\xcf\x0c\xaf\xcf5\x1d\xbcyv\xf8\x9b\xf1\x83i\xf3\x83\xb7\xef\x9e\x1d\xbe3~p\x06C\xb8\xdb\xbc\xbd\x86!\x0c\xe0\xd1#]\xb5\xf3S\x18\xc2\x1av@\x93\xaa\x7fi\x90\xf7\x8f\xed5\xae\xf7\xeb\x89$A\xcf\xf9\x9f\\\xa5\x19\x13-?o9\xd8\xb9q\x18\x0b\xbb;\x92\xe4\x0b}\x8bT\x1c\x0dE\x83\xbbn\xdb\xe9=O*\xaf\x7fxh9\x89D\x84\x9bF\xaf^\xa9\x0e%\x0bH{\x98x\\\xa88w\xb0JH*r\x9e\xcb\x94\x05<\xd3\xc6\xeeCLw\x11?\x84h{\xdb\x87t\x14\xf1$\x89\x11\x13\xe8\xcd\xee\xf5\xa9\xd3l\xed\x01\x0d\xaa;:\x06\xa2\n\x98f<\\\x82\xf6\x8f\x8fy\xe9|\xe2\xfd\xc1OW\xf6\xc4\xa9\xe3\xb7\xd6Tb\x85\xf5A)\xe9a\x13\xc1P\xb9\x04\x8f\x1f?6\x995\x84\x92j\x1bb\x11C\xbd\xd9\xc0\x9d\xbd\x07w\x1e\xdc\xfb~\xef\xc1]\x9ca\x19\x99\xf8&|\xa3o\x85MZ\x93\x92\xcf\x04>\"\xcax#\x90\xb7Q\xf1\xe1\x06\x9c?l\xc5\xf2\xeb\xf9\x9c\x0dm|v\x90\xda<\x19jP\x16\x9d\xde\x92Q\x91\x14\x1e\x0da'\xae\x14,\x1cJ\xd0\xd5_&\xf0xXW\xc0\x9a\x06v\xd4\x96\xbd\xf1\x83\x18\xb9\xe3\x86}\xed\xda^\xbd\xaa\x8f\xa1\xbd\x0f\x0e\x80\xab\xc5i\xc4\x986\x97/\xb6\xba\xbf l\x03\x1a\xc5j\xb1\xb4\x8cC\x92\xe5\xe2\x99\xbc`\xac\xde\n\x02\xbf\x9f6\xabT\x83pd\xd6\x9c\x07\xef`\x08{\xcd\xdbo\x9c\xb3\xb6\xf3M\x9d\xa4\xcd6^\xf1\x93N\xbe\xa09\xda\x9e\xc1\x10\xde0\x1cye:\x02\xbe\x1a\x08\xf6<\xca0\xbb\x8833\xfe\\\xae\x94!\x99\xa7\xb4Z\x94\x0b\xc5\xb6\xe0\xa0\xb2l#\xf6\xbd\x85\x8a\xc2\x01\xa4\xc5\x19\x12\x89\xb2\xc0\xd6\xd3\xd0\xe0\x078Mb\xd3\x89\xebH\xab?\xda\xa8\x82uH\x1c\xfd\xac\xe3j\xad\xdcc\x18\xd4\x0fv\xees\xebWW6\xf6\x8b\x9d1\x00S\xd5h\x8a8\xe3\xd4\xc5\xefv5\xe0\xaf\xda\xf4\x1d\x05-\xe7Un\xb5\xc5\x96\xf5\xdd\xfdj\xef\x8e3(o\x90\xd6\x8e\xde`\xedR:ze\xcaM\xa4\x9d\xbb\x92\xb7\xdaiD\xbf8\xc0X\x13\xcc,\xb8\x14\xa7.^Z\xbb(\x92\x01\xa8G\x8e\xdc\x8e \xcf\x95-\x85\xe8>M0]\x83\xb5\x80\xb5\xbc$P\xd1y\xbd\x12\x167\xac\xd5\xe6!\xe7@\xa85\xc3\xfb\x96\xa9^\xd8\xe1\xc5\n3\xd3q\x06\x0d\x92\x14\")\x15 5K2\xe3[.\x0b\xd8\xd3\xcf(\xdd\xf0G\xfb\xe8.o\xeaV\xbb\x8a\xecj\xa6\x083\xc0\xfd\xc5\xb7\xc1\xbdO\x13\x94\xc5$\xc4\xc5\"\x84\xcd\xb5\xa0\x98\x9f\xfd0\xa6\xe9\xbax\x99\xba\x8e\xf2\xc6\xb7\x8dR30\xa2\x0e\x84\x8dSH\x91\xf2V\xe8<\xb6\x1f\xadc\xf3\xbe}pr4h\xe0\"\x14\xef\xd7F\xa6\xfe\xfa\xaa\xa8\xaa\xa8&\x1f\x81e\xb0\xbd\xd1\x918\xa0\xc75\x05t\x00_\xfb/\x0f\x7f\x7f\x0fCx\xca\xfe\xfe\xe5\xc9\xab\x8f\x87\xec\xd7\xcf\xec\xd7\xe1\x9b\x0f\xef\x8e\xf0\xe7\xbb\xa0\xd2\x7f\x14g+\x9e\xed\xbc6\xaa$O\xab\x99\xb9m\xf4\x85\x1d\xf0\xe6\xdc\x0bJ\xcb\xa3g\xe3\x0em\xd6\x1b\"\xdeK\xae\xb7x\xd9Of\x8e\xed\xbc\xf4\n'\x92\xc6\xc0^V\xa7L\xbe8\xb6\xa9\x1b\xdb\xcb\xab/*\x82\xef\xf8\xb84\x8e\xb2\x91\xfc\xbb\x17@\xef\xb2i\xcfQ\xfb\x99\x84\x939yG\xb2\x962\xc7JW[\xbc/\xfc\x10d\xc5\xafB\xd6\xfb\x18\xe3\x83)\x17\x06\x957\x87\xfc\xc5\x12\xeb\xcb\x8a\x0f\xa2\xfc\x99\x14\x1c\xcb\x8f\xc4\xd9\"^\xb0M\xa3\xe8\xdf%\x86HLdB\xcb\x82d\xbc\x02\xa8K\x0f\x89S\x00\xbe\xe8b\xd6\xda\x05\xf1^\x04\xf0\xd2\x0f\xe0Ee\xf1%\xbdu\\\x13=\xa6\xdf\xe0-\xdfp\xc7\xf4\x1b\x16L\xbfQ\x19`II\x1d\x9b\xd6\x0d\xf1\xc65#\xfc\x88!\xfc\xb8\x89\xf07\xae\x19S\xea\xb5\xdd\xf5=|\x13\xa64\xbb \xde\x8f|=\x7ft_\xcf\x1f-\xeb\xf9c\x8dr\xd1o[\xcb\x97\xfd(\xe3-D\x94\xfd\x92\xda[\x86\xdeB]\xcb\xc6\xaf(ro4\xb5\xb7?\x05\xf0\xcf\x00~\x0b\xe0\x1fM\xa5\xe9\xfb\xc3\x7f\xa0\xc2\xd4$9Rj\x11\x1d\x8fCQ+\x83\xd6\x88M\x17\xf6\x95\x18z\x90\xfc\xa50.}&\xebL\xcbC\xf2\x91$\xb26\x88\x1c\xca\xf1gQ\x0b\xab:4\xd2eh\xb1u\xf2Q\xa9\x9f7\xcc\x9f{\x16:+\xe8\xd2\xf6\xee\x84\xe1,\xa8\xdd{*\x0e\x83zm\x1fCG\x91\xa1#y\x16\x95\x06\x8c\x7f8\x1aX\x90\x1b36\xf8\x13k\xcd\xfbI\xe8Z)\xf5F\xe3Ff\x16}\xbby\x0brh\xd2\xe0\x88.\xa8\xdf\xe4\x9a\xbf\x94o\xa4\xfa7~(\xdf\x88\xf5oh\xa5\x9c\x83R\xc8)TOf\xcf\xbe\xabK:\xa3\xcf\x01\x9c\x8dAd\x8a\xed \xf1t\x92Y\xc3\x16\xa0gza\xee\xdb\xa7\xc7\x05\xb9k\x9aEfG\xf2_j\xd8\xa2A\x0f\x0d>\x14\xab\xeb4\x04v\xc29\xa9\xcb\xa8`\xcd\xf4@\x8dL\"xa\xe5H\xd8\x01QZ6\x06\x01\x864\xef>\x84\x1c\x1e\x0d!y\x08\xf9\xf6\xb6\xa9\x11\x10\xe3\x08\xd1S8f\xa2\x15\xec@\xced+\x83\x7f\x15\xc8\xc5\xe6z=\xe2\x85\xa3\xc18@\xc5]8\xda\x1d\xb3/\x03P\x02\xdas\xd8\x86\xa6\x12\x0e\x1a\xe2\x97\xbc\xe4g\x8d\x87\x96\x04s\x0dV\x99g\x83tZ\xa6\xd9\x9f\xbcL\xda\x152B\x96\xaf\x9c\x0d0\x0c\x1b\xbfzV\x96B^\xd2\xf9\xc3}a%\xf0\xb7\xb7\xe11:W\x9b\x1b\x077u\xa7\xbc\x8cjOy]\xc2>\xc7\xcc\xb9P\x1f\xa9i8s\xfbp\xa4E\xbe\xe2w5\x94r}\x8e\xf4z\xa8\xe9\x93j\xbe,\x03\xb8\x05\xbb\x85?\x8b\xf0{\xf1\x03\x89\xce\xf2C\xdb\xc1\xf6\xcfbh\xff\xd4#\xce?\x85\xcd\xa0e\xab\x99\xa0u\xda\x02-\xaa\xaa \xb8\x8a\xc0\xd1WhIm\xceB\xfa\xa5X\xd6\x96BiC\xbf\x1a\xa7\xd4\x13\xaeV\x01\xf4\x9e\xf2(\xde\x8c\x92\x15\x84\xf0.\x8cO \x9c\xaca\x17\x83\x1eAX'w\x83\xea*\xc9\xba#\xb8V~\xa0$\x01\xe0\x9eo\xa2\x1a#.ax\x92\xa1\xeb!\x81G\x82cco\xef\xc4\xd2\x84s\x8c\xc5\"T\xbd\x1f\x89\xa7\x8aj\xf3\x18\x87\x86\x83U\xb1FE\x0f\xfc{B\xa2\x85\xe7\x11\xd8a\x04\xf8\x16\xc4L\xb4\xf2\x99l\xde\x0dw~+`\xf9\x9b\x1ew~\xfb6\xdc9\xd6\xeb\x129\xbe(*\xa5'\xa2\xfaa\xdd2ah\xf6\x84\xda\xdcL\xcf\xadO/\xc4S\xf5\xa1b\xc6\x1a\xfdc,\n\x01\x11\x8f\xd2\x00n\xb0\x95S\xe3\x1eN\x89SIW\xc9\xb5\xb3U`\xe4\x91\xdb\xb4KM\xfb\xe8\xad4g\xf8c]\x05\xf3J\x9f\x9dL2\x15\x7fY\xa5G\xe1![Q-\x95\x1e\xb2CH\xb9\x8b\xac\x11W\x84\x8a\x88z\xf1\x88Q\xae\x14v\xd0\xa3+\x1a\xa3\xf0\xc7:*wf\xc4P\xd1H\xb5\x1bu\x1d\xb4\x93u\xb3\x0e\xe9&\xaa\x9dBc\xf2\xfa\x89\xea56\xdd\xb45\x05\x10\x1e\xa3\xfa\xc3\xc6\x819i\\\xac\xda\x16\xaei\xa1\\\x02/Wf{\x9b\xad\xcd\xf6\xb6C\x14 CuB\x03x\xc1\xe8\xd6\xd5Q\xbd\xee\xe5\xaaC}\xae\x1f\x1eQ-\xcaW\xfa\x9e\x87\xee\xf1lJ\xd3\xf5(wM}\xa2\xeb\xdcX\xbcS\xbe\xb3JSU \xd8ju\xa7%|\xa7%l\xa7E\x0f!1+q\xcfDY\xbc\x14\x173\x82\x1dH`\x1f\x12\x83\x9e\xaf\xb63\xf31V!\xae\xee\xc6D\xab\xb45\n\xa3\xcd\x14\n\xd7\xb5=\x05\xb8\x8c\xfbS\x01\xa1qw\xa6\xad{8\xb9\x8e=\xdcm\x15$\xe4P\xd3\x1a\xfdu{>g{>w\xdb\xe3\xca\"\x8e\xa6\xe5!\x17\x8bC.\xd6\xee\x8b\xc2[\xc5a\xad\x19*\x96\x121\xaeeEhR\x84\x0c\x03\xf7,\xb1\xe5w\xafj\x96\xb5\xd4\xb02\xe8$\xbex\xb1A\x06-vq\xf4\x10\xb6\xbc\x08O\x05\xb5*#(\xb9\xbc\xbdHT]\x84t{[\xec*]\xfdR1\xe5F\x8e -LK}\xf5\xb5\x025I;C\xd5\xa0\xce\xf9\xa2j\x89\xf9v\xf9hh\xd6\xb0\x02\xdd\xb7\x1aQ\xd6\xa1E\xcb\x81\x8b\xc4\x9d\xd1q\x0f\xe0\xd2\x08\x15\x9e\xd3F\xf0R\x81\xf2\xe9\x7f\x01\xcaW\xea\xc8\x17$\xb0\x08!\xe0\xb6\xaa\xa6\x83\x80z\xa0\x14\xc6\xa8\x87\x0e\xcc[4J\xc6\x01#T\x8dC\xc206\xb6KbEK\xc4w\x89\xb1\xf2\xbc\xa4\x9b\xb1M\x9b\x84&\xb6Q2\xe6\xe1\x90\xc5\xd8\xf2\xea\xc0NR\x12~n.\xa8 \xdb\x1a\xc7\x96vy\xffc\xbb\xaf\xb6\xb0F\x82\xa6[l=\x10\xafc\xef\xe1J\xc0\xe3\xf2XmS\x18\xb6oT\x90p\xe3En\x8b\x8dkQ,\xf2\xa0<\xb1\x87\xb5\xafY\xad\xcb\x92\xfdMG\xee\x0c\xefZ\xd0\x805\xbd\xba\x8b]M\xd0\x86\x03\xe8\xbd#+\x12R\x18\x8d{\xb0_\xfe\xe2^\x10\x8aZh\x1bz\xe5=\xfc\x96\xdd\xa1\xd1\x92d\xd0t:^_\x9d)\xd71\xe1|\x08\x1a\x06\xbc\xd2\x8f\xac\xf4\xe3\xca\x85O\xa9\xaa\xf8jFe\xd5\x9a\xc7\x94\x05.\x13\xa9\xec\x1f\x06*#\xca+1{|\xaa\"U\xd2\xba6\xb2\xd7\xa2\xba\xe4\x0e\x0f\xa6\xab3\n\xf5\x91\xa6\xe4\x8c\xa4Y\x177\xed\x16\xb8N\xc9\xc5\xdb\xd9\xd5\xc1\n\x07\xa81\xdc\x19X\xbbY\x84\x19=\xba\x86\xaeJ\x0cm\xed\xf2\xea\xc2\xd4\xeeC\x88\xe1\x91\xb2\xc4\x10;i\"*\xc3\x8d\xeb'ZlUB\xc4Ns\xe9.\xe5tbU\xbb\x11k\xc9f\xc2#\x88%\xc5)Y\xa0X@\xc27\xd6\xd9\x83\xeb\x12?\x1c(l\x05\x9a\xc2H\xe9\x88\x87\xb4\xaaz\x87\x83&f*S=k\xda\xfb\x19}_\n\xfa\xbe\xbcf\xfa\x8e*cI\xde\xf9\x0f\x85\xbas\xed\xee6\xf4\xfa\xfd~y\x97\xc4S\xd8\x06O\x08\x15\xf3B\xcd{\x00=8YW>'+\xcc{\x84I\xe74'\xc1\xf2zO\x029\xdcR\x17 \xdfU\x87\xd28#\x96W:#$\xe7\xe0Q\xd8Q\xfb\xf6\xe1\x96\xd2\x9fq\x7f`\x80\xf4.7\xc8+d\x82\xdf`k\x84:\xf1\xd9\"\xd1\xd8\x1ejCv>wj\x87J\xd1\xa9r\xb8\xa0K\x01\x9e!\xe5\xd3\x80\xdb\n\xf0\x8c)\xef\xfa\xf0hX\xf8\x96.\xa9\xb7\x1b\xc0\xae/\x8e\xa7\xa5@\xeeSB=\xd5* M\x06\xec>\xd1\xdcG\x905\xcf\xae\xe5U\x0e\x9b\xb3\"\xaa\xb2\xb2B\x0d\x85/\x18\x031.\xc3\x1c\xd4r\x07V\x87\x03\xe1Z\x89N\x96\xece\xeeSa\x19((x\xba\x0b\x1b\x93s\x14\x1e\xa1qY\x8d\xd3\x8b\xe1_C5G\xd1w@\xfd\x87\x0c1\x94\x9b\x0f}\xc0\xd7(\xdcR\xdf\xb5\x12\xdcC\xea9\xa5J\x8f\xea%]\x145b\x99\x9a\xffg\xaax\x99\xeb1\x0d\x94UxEG\xd4\x9e(\xb7\xea\xb1\xf2\x96ao\x00o8\xac\xdf\x89\x9c\x19\x14\xd3\xe1\xc0+\x9e\xe8\x1c\x9f3*\x8e\x8d\xb3\x83\xef*Y\x16`\x9fw\xd6 \xc7\xe7a6\x7f\x9aLU\xc8\xc8[:\xe5bT\xaf\nV~\xe8\x08B3\xe3\xf9\x9a\xd6\\M\x11~G\xdccM\xadPji\xa3\xfe5\x1d=\xa5c\xa7/\xb7>\x1b\xc7\x0d\xa6\xc6\xfb\xa2\xea\xc1\xfa(;\x8c\xf3\xa5\x08\xc0Bw8\xdd\x13\xa7\xb1\x98:k\x07\xaf\xfa\xb5p\x98\x8c\x93)\xf9\xb0^\x11@\xd2\x9e\x9dG\xbc\xfeYq\xbf\xad)vM\xc2\x8c\xc0`\xbf\xf5=Ph\x7f?\x8f\xa3/99zf\x9e\xa3\xbc\xb0\xf9\x07\x1d\x9b\x9f&\x13\x0c\x18>\\\x10\xf6\x0f\x9fl\xedf1\x06k\xd3z\xa56\x88-\xa5\xac\x96\xf6=\xfd\xd7l\xb9\xb6\xb7?\xd0@=\xfan\xc2\x07\xbe\xf7?\xe0\xde\xb7\x84\x88\xbc\xa6>\xc3\xfa\x8c\x18=\x1c\xc1\xc1\xd1\xb5\x8aB\x7f\xc8\xfa\xc8C\xfc\x81.\xcfu\x8f\xc1\xde\x9b$\xde!<\x95q\x19H\x98A\x98\x12,\xfa\x86\xd9\xb5\xc9\x14\xc2\x0c>\x93u\xd67\xd5=\x90\xdd\xb3\x0d%\xa2\x8dy9\x89\xd2#$\x80\xa7\xd4\x14W\"/R\xec\x9b}\xd8\xb2\x04x\xb1k\x92\xc4\xb3\xe84w|\xfb<\x8d\xa8\xdb\x9b\x82O\xd7/>\x80\xb9\xa4\x1e\xa8\xe5\x0d+N\xf5\xddH\x86`\x93\x95H\x12\x85\x83\xd7}\xe0\x1b\x1b\xb2\xab\xdb\xd4K\x95\xb5\xdd{\xee\x87\xab\xd5b-\xd8xCD\xbfz]\x06\x162\xc9\xce\xc0\x16\xc8\xb6\x13\xc1\x8aSzI\xf2\x1ax\xff1F\x08\xd1\x042B!\x84\x98\xed\x83\x12rr\x8c\x90\xc4bOXQ\x9f]T\xce\xc1<\xfb\x0e\xf4\xc4z\xeaw:\xed\xa5\xf2\xb5 k\x8caP2\xdah\xf3\x01\xd4\xa0\xc5\xcb)\xb3&y\xfddT\x93\x96\xa5y\x18\xf7@\xa6}G/\xd2\xb7\x06\xde\xbeP\xc7\x10\xce(\xa9\x16\niiG\x03\x05\xbep{\x00\xdf\xf1T\x85\xfd\xc9\x829\xf3Ld\x15\x16\xd6\x97)\xdc\xbdu\x9d\x11\xfcW6_r\x85\xa7\x92\x01\xeau\xb82\xa6<\xfb\xfa\x8d\x96\xc5\xe34IJ\xcd,\xfb\x81\xa2s\x11K\xc3\xf36\xf9:\x93b\xa5\xeb\xacS\xd7\xffP\x93B\xd9\xe7\x94\x11z\x14wh\x1a'\x92\xaf\xa6!%G\xf8\xf22h?c\xcd\xdc\x92}p)Y&g\xed\x92\xb6f\xd6K{\xc3S\xb2 l\x02\xaeM7f\xed:\xe5e\xd7)\xf3N\xea\x0bbO\x1c\xcdE\xc8F\x89\xcb\x03\xe1\n\xe2K\xe3L1\x81\x11\x1d\x8bF\x1d\xc6\xd2D\x0f\xc3h0\xd8\x15\x9d\"E,&Gq\x8b\x8flA\xa2]\x12I\x9c\x898P.\x80-\xcd:\xd1\xbc\xd5\x17\x8f\x91\xbb\\\xf8\xe1\x99\x89\xe2\x99H\x19\x93`\xf0Hk\xc5\xd8\x0c\x86\x10y\xb6\xb2\xdcb\xb92\xbe\\\xc2Y\xb7\x19C\x06F\xa9\xe3\x94z \x03\xb2\xc8\x1b\x9c\x11\x1a@/\x8ay\xb5\xfb\xcfd\xfd3V\x883Cf\x82%\x80-\x1e\xa8\xec\xa5\x99\x98\xf2\x92M\x19\xa9\xd5\x84\xed'\xf3\x07X\xa0\xd4\x9b\x95\x0bhU\x94r\xd6e&f\xcf\x7f-\xd9/\xb1\xdb\xbd \xc3W/)y\x19\xe2\xe3\xd91 `\xa1\xe1\x01\xc4\x9e\x8fc\xd4\xe9\x1a\"\x1eE\xdfi\xd1\x9b\xe0\x9a\xea\x96\xd9\xfa\x0e\x98,Hh-J\xa44\xdet\x8b\xa1\xdc\x1fB\x1c8\xc9yL\xd2\xa3gp BaE\x0c\xe3n\xa0\x9e\x14CQ\xb4S|\x83\xc1\xfb\xc3\xf2\xac\xe0w\xc3\x05\x15\xf5N\xb6\xc4M_pw\xd6\xc9,Iz\xda\xaat\x90\x90\"\x02\xae\xb2ks>\xc0f\x1f\xbfF\xd5\x92c\xb6\xf3\xa4\xe8\x08\xfd\x97\xea|\xd2\xa0\xe9\xc8\xd1\xec\xaeJ\xa0\xec\x86pM\x0fFl\xa9\xd2L\x12 \x84\x03\x07\xad\xaf\xf8\xde \xf0\xf3e8\x90\x7fI\x1d\x0d\x12\xd5}\x88Gj4^\xb3\xa8m\xcb\xf1\x81M>#\x18,\xdbi\x9d#\xd2m\x8dY\x1fN\xeb|%\xd0\x17\xc3J\x88\x87b\x85\xe3\x88\xfe7\xa2\x02\xae\xd6\x81\xfa\xebzQ\"KR\xea\xca\xe7\x1c\x11\xef\x17R\x98\xfd\xdb\xdb\xfda\xdd\x81uT\x1b'\xed\xedWd\xa0\xd6 \x14\xb2\x16[\xa90{\xcdu\x11:\x06@.)\"\x16\xe9\x9f\x87\xd9\x13NO=\x1f\x8f\xa1\xe3c\x12gyJ\xde2z\xedU\x89\xb7d\xa5\xac\x03/zw\xdc\x83\x8d\xf3\xa1zn\xa8\xa3a\xa2\xd8{;\xd8\xc2\xecHjb\xba\xf5\xaf\xf6\xd3\xb22\x05\xc8\xba\xf5 \xce-k\xdb\xdd\x1c\x9c\xa4F\x84\x9c\xc3\x0dw\x99\xa7\x93\x17\xda\xb7:1+\x87{\xe1m\x83r`3\xb3H\x0b\x11\xe1\xc1v\x1e\xc1\x043\x043\xca\xe8l\xee\x01/\xfb\xd4\x02\x01e\xb5[\xf7\x96\x9cI\xc9\xe0\xe8\xb0\x15\x0e\xe0\x9f\xb4dmT\xb6&(\xf3: K\x83\x1c^\xad!%\xf7\x83\xca\xe0\x0c\x04\x83\xa3\x99N\x941\xc9}\x08\xcf5\x9eC\x1fi\x00?\xd0f2\xe0\xd7O~6TO\xfb\xc2\xdeV\x81dR\x0f\xfenN\xfc\x81\xc3oNH$*j\x18\x1f\x8c5>\xac @\x0c\x9d\x9cDt\x89\xe0\x90\x90\x8f\x13\xee\x82\x1c;\xf5\xf9\xcbU\xfa\x9c$yL\xaf\xdc\xe5\xcb\xabt\xf9\x99\xac\x7f\xe4L1i@\xd7\xad\xdb\x17\xd7\xd7\xed\xda\xb9\xd3\x1b\xed\x9d\x1eS^j\xb4\xdc9E\x84M\\\xfa6\x87\x93\xcf\xc8\xbc\x14\x14\xe5'\xea\x89_n\xda\xd0\x1f[S<\xf2\nH\xa6}\xac\x0b\x025!\x0f\xad\xa9,$fGAA}\x10u\xa9FM\xd1\xd4Q\xf8X\xe4\x0c9\x84\x08w\x9bN_a\xc0G\x11%^\xe8\x97\xf8\x82\x06\x10Zy\x15&Qq\x89\xcd\xd3~\xba\xcf\x10Q\xac'e\xfc\xc8\x85\x17\xfa\x01\\x\x0cU\x18\xc4_\xc8\x1c\xae#\xf6\x99k:wB\xec;\xbeVy6\xf74\x9eEF\xf2\x92K\xa0En@\x8e\xac@.v=zm\x95j\x95\x9b7\x01\xb3\xb0V\xd4+<'c\x91\xd8\x97o\x7f7\xce<\xb1\xef\xeeR\x9433\x15\x002\\\x0cu\xf8Ue\x1a\x8e\xb7\x92\x8c\xba\xf2\x9c\xab\x84\xcc\x9ax<\xb9\x8a\xce\xadjx\x9e\x8d2\xf2\x85\x1e>jY9\x13@r\x97e\xe1\xdb\x1c-Cq\x7f\x16\xb1\x93\xc1\x01\xfd\x8a\x8f\xcb\xc4\xb9\xcdA\xfa\xbeb\xedb\x07\xb2\x9af\x17\xe9jy\x8am\x18\xa9\xc0\x94\x87\xca7W7\xb5\xa7\"\x1a\xaa\xf8\xc4\xb6\xe2\x80&pq\x1e\xa5U\xabi\xab\xf7pE\xfe^\x8a\x1a\xa3\x08x\xec\xd2\xf8\xad\xc6e\x02o\xabA0\xa6\xa5\x93\x17\x95n\x19\x86\xf4\xb1\x97\xd5z\xd2\x05A\xc3\xb2\xd2\xf1(\x1a\x17\x0e!\x9a\x81bf\xf2\xca\xd1\xe7\xc5\xa3]G\x89#l9iA\x84\x86x\xf7\xef\xde\x7f\xf0\xe0\xf6\x9d\xbb\x0fx,\xcf\xce\x10\x03ax\x1c\xcc\x9d\xdb\x83{w\xef~\x7f\xef\xae\xef3f\x0f\x1f\xec\xc1M(\xbeQ\xee\xdfa'\xd3\xde\xdd\xbd{w\xee\x0en\xdf\x0d\x80\xc2\xb6h\xea~\x00\x83\xbd\xefy\xf3\xf2\xde\xe0\x9e\xdb42\xe2(\x85\xa4\x02\xc5\x0fm\x15E\xa3\x11\x19\x0b\x01\xa3\xd6\xbb\xfa\xeb\x0b\xba\xba\x08\xde\xec\x0b\x15\xe6p\x18\xb2\xbf\xb9\x15.(\xffD\x9dz\xf1\xd2Q\x1c\xc0\xef-N\x11\xe6\xb9T\x0eCUz\x17\xc7\"g.\xa2\xf2X\x84G\x90\xf3\xd3\xd1HH\xa7\x88\x9e\xd1(\x193\xd4)s-\xb2\x1b\x03\xe7R\xe6\xb5Y\x19\xcd\xf0*\x1fi\x9d!\x16\x1b\xe1;6\xc0\xd3\xb9:\xdd \x9f\xee\x0c\xcfc9\xdd <\x02\x8cm\xda\x9abB\xe0l4\xc1I=\x84\xc9\xf6\xb6\x81![\xc0\x90\x7f\xa7\x17\xc8\x16p\xc0\x9b\x19\x8cq0\x11\xec3\xeeWQN\xea\xbf\xe3|\xb0\x17\xa2g\xd4\x02]\xc9.\xbc\x84IQaIH\xb3\x96\xec8\x18\xc4\x81\x0e~[!\xfb\x7f\xe1\x9a\xf0x\x08\x13]\x98\x8a\x15y\xe4\xc5\xa5Z\xe9\xb1\xf8\xdebp\xaf\xa0\x9b\xe0\xfah\x00\xe8\x88\x1a\xc0\x88u4\xf6+\x1c\x19q\xe1\xc8\xe4%\x9d\x0d\xc8\xc8\x94\x00O^\x11b\xb5 \xff\xb4\"\xa2\xe6\xa8h\xc9\x8d\xd5?@\xcbE\xc9K\"\xbb\x9e6\xb3\xae2\xabQ\x9eMa\x05\":LQ\xf0J9\xd3\xd81\x93\xf7V\x0c\xb7\x90\"em6\xff\x03\xe4\xaf'\xc2\xf6\xbf\x03\x038\x80y\x7f\x95\xf0J\x10\xf3\xd1\x84Q\xa3\xc6\x8d\x11\x1b9\xe3\xc7\xe7\x9c\xc1\xe4\xbf\xfd\x00{\xf6j\xda\xbfyi\n\x97\x02s\x00\xf36\x96\xf42\x80_\xafL\xce\xb4\xd1e\x88]\x86\xcd\x8aB=\x13W<\xafZ?\x9cG~R\x94}\x0c\x9a\x91D\xd2\x10\xae\xe95\x126\xd60\x93snr\xee\xae\x08\xcdF\xe5\xec($\xfc\x11fF\x1e\xf38..#\x11\x1d;Q\x07\xcf\x95\xe9b%3\xb4L\x00\xfd\x84z\xa9 T\x8a\x80H\x04\xcb\x13#\x90\x88E\xaa\xcc$|C\xfd\xf3I\x15\x86\xfa\x97f\x18S\xb95\x04o\x027A\x87\xdaH\xd7\x90PGue\x8e\x96\xa0J:\x1d\x12\xde$\x02_\xdf\xf9J\x8e\x10\x97K\xff\x0e\x1a\xdd\xe1\x00V\xa3\xc5\x18Z\n\xb1sE\xd9\x9c\x9b\xc5\xf8BW\xd7J?;\x1e%>w8(8\x1c0\x94|\xa5\x90\xf7\x99\x95\xbc[\xdc\xbc*\x15\xbf\x04C\xc0\xf63\xaf7\xb3\xf6\x03\xc4\x8c\xdd\x87\x82\xd5\x8f\x1fB\x88i~\x18n\x0ca\xe0C>\n\xc7\x88\x067Q\xb3@F\xc9\xf6\xf6\xd8R\xb3\x0e\x14\xa1t\x94\x8e\xb9\x8a\x8b\xf5\xc8M\"\x98\xe3A\x1f\xcc\xcf\x1e\xaf\x02\x98\x04\x10\x0605@R\x9c\xe7\xec\xffj\xb9z\xb5H\x7f\x93*\x11\xb4x\xb2\x04\xb6\"\x12\x0df\x81c\\\xeaWxS^q\x0eRQp.W\x88?{k\xe03V4\x1fc\x9ck\x0e\xdb\xc6\xd4\xb8\xd0~xs\xa8iA\xd6\xc2!\x15\x1c\xb6\x84\x9a1M \x14\nu\x84\xda\xb6@\xaa\xa8\x84\\!P\xb8\x80.\xa9\x80\x8e\xab\xd6\x10tb\xcf\x86\xf0\x08\"\xdc\xb1>\xbb%h\xbb\x97\xf0-\x1b\xf3\xd7w\x06\xa8\x9d\xe5\xf7\xe8(\x84m\x97rn\x86\xc2\x1f*\xee\x19\x8f\xcc\xe3\x82\x9d(\xac\xa8'5\x93\xe6y\x95\xbb\xe0&\xda\x93\x00\xce\x1b\xe7\xe5/\x7f-;aa$Z\xf8\x08\xce\x10Df\x11)\x81\x03Ht,\x82\xceo\xf2\x97\xffel\x82\x94\xcd\xb4/L\x1cNa\xc6&LF\xa1\x81Lg<\xf8\xc6\x911\xa0\xc4\x9bu=\xa2\x85#\xadC\x0f\x05O\x81\xf6z\xc3\xb1\xd2.\xc3\xed\xec\xac\xe0\x11,\xae,\xb7U\x08\xecn\xa0?\xe0cy\xc0s\xa1y\xc0%\xe5R,c\x14d\"\xce\xfc\x0c\x1e=\xc2#\xbf]L\x9b\xa1\x98\xa6[\xac\xca\x9beT0\x1e\xb3!\xfe\x89\xb4\xd1\x8b`3d\xc2T\xce\xf9 \x06yc[\xad\xf2ZIB\"-k\x01\x92\xbd\x98 \x87\x11\x1a\xcd\x8c\xab\xedm\xfd\x9a\xcf\xbb\x9e\xf2\x8cS\xcc\x88\xc7\x99\x99\x05\x93\x9c\x8cta^\x90K\xe9\x00\xb2\xaaQ\xcbi\x95ZrNj\xc5\x98\xa4:\xd9xyej\xf9\xdf\xacKz\xf9\x9f#\x86\x82\xae\xe9wy\\\xe6Z\x14\x86\xbab\x8e\xa1\x92\xc0\x8f+\x7f\xb8\xbe'&\x8a_\x1d\x0eZH\xe1\x9a1\x14K\xf2\xff }WXr\xee\xb3\x8a\xd5\xf4E\x99\x97P\xc0\x92M\x80\xb1\xee\x13\x93\xf1\xb4\xb3\xa6\xa5]\xcb\xf2\x1f\xd4\xb0\xbc\xd4\x00`\xde\xd8\xe0/\xae\xbc\xc1\xa5\x18\xc3\xa3B\x0b\x9f+\x86 2\xa2\x8e\xdf\x18\x8cu\x0c\xc9\x8b\xeb\xd9\x835U\xaev\x99\x90\xe4!\x06W\x87i\\./\xc3\xea\x19\x05\x12(\xf3\x08\xfd\xc6F\x0ce\xc0\n\xc3H\xd8\x87\x0c-\x01Z4\xaa\xac\x1a\xb68,\xca\x10\x89e\xd3\xe1\xadXv\xde\xa5f\xd7#\xd1)w~c\x91+\xba\xf3\xd2\xb9\xf6\xa5\xfeve\x0d\xac\xa4=n\xd0\x91\x94\xd3\x91\xa8V\xb6\xe8!\xa4\xa2\x84L\xea\x94\"9.\xea\x97\xa0\xe7\xc1X\xadwY\x9f\xdc\xaf\xfaY\xfcrm\x93\xe3L\xa6\xdb\xd4\x0c\xbcN!|\xd5\xe6\xa5\xe7w\x18(\x12(\xb3\xcf$\xfdJ9\x06\x13,@\xa7=}qE0H\x8a\xac\xa0k\x03\xad\x88w\x83\x06\xf0\xd5\x0f\xe0\x86\xdaKL.ZS;\x14P\xa6\x12\xca\xe8_\x19\x94A\x02\xdc\x99\xf2!\xd8\x8b6\x88\xfa\x13\x04\x17\xc9\xac\x0e\xc7\xd4\x98<\x0b\xaa\x8e#\x03)f\x8b\x89Z8\xd6\xa8\xa8\xadZ\n\xe1\xdcg3\xd5AI^\x97en\x9bT\xee\x96\xb6n\xb0\xbe\x99\xa8b!>Q\xf0\xce\xd7v\x1f\x91l\xc4\xc1'\xddS\x0f\xb0\xcc\x1e\xafy\xd6:6\xb5KD\xfbj\x87v\x95FR~f\x19\x83]\xd1\x91\xb4I\x0b\xf8\x92\\\xa6\n\x00\xe4]\xbb\x0cQ\xc3/\x18\xc2O\xd4K\x8c\xf6s\xb0\x8a\x0b\x93$\xa6Q\xdc\xa9\xf8C\xb3\x7f\xe5W\x9f\xfb\xcc\xb6\xecj(\xb7\xa7ic\xb4\xe6J5\xe6I\xad\x11\x90*0\xd9*c\x1e\xea5\xdc\x82;\xcd\x96g\xf2\xd9^\xf3\xd9\xa2\xf8\xce\xe4\xb9\xbf2x\x0c\x9c\x89\xd8\xa1\x0bc~=\x87<\x96\x9a\x88Z\xf6\xe5\x9cxJ\xcaI\x8d\xf0-O\x82\xc8\xa3\x96\x0c\xa3\xb1\xbd\xc6\x03\x1fL*t@\xde3~\\\xa7\xf0\x98g\x8dN\xe1\x11\xac\xe1\x00\xce\x89\xb7\x8b\x0c\xcfY \xe2L\xb1\x10\x04\xf1\xe2>M\xb8\xfc\xedcYZ\xd2\xd9-\x06\xfdD\xdeG_ \xf6\xacI\x03\xd2\xa6\xe9-4\xb5-\xfe&:/\x127O\x8b\xb9\xddaD\xc9\x032%-y@\xd8ArN\x19\x9bL\x1c\xf2\x80(\xc2\x87g\x8e\xb1\xe49\xbc\xc4\x11\xf7\xad9-^E\x19\x85Q/\x80\xde\xb8\x99\xd4\xa2\xd2\x93cR\x8bH\xd6\x8a/\x93\xe2\xfbEVrZ\xcdJn9M\x99\x00[\xb0\x96\xe8+\x83#O\xd2\xe842y\xb6I\x99\x8b\xf5\x14\xf7y\x99P\n7\xe1T\x13\ni\x02P#\xbbF\x05\x06\xdd\xb2k\xb8\xda/\x10d\x84\x83\x8c\xb3U\x95\xaa\xf9&\xbfo\xf4\x0d|\xac:\xb1\x11x\xa4d\x83\xed\xee\xb2\x06x,<\x82]8\x80\xb7\x82\xc7\xc3m\xb6+\"L\xdfJ\xa7\x04\xb4\x00\xf0gD\x1b]\x06`N\xb0Gp=\xe5b\xea\xdf)\xed9\xc74\x8c\x16v\x86J\xba\xf7\x1b_J\xac\x81\x02\x08\xc5\xcf\x18%0 W\xe1$\xa2kn\x10\x1f\xc2{t\xc2\xabG\x0dpy\x10E\xac\x88\xbf\x14\xd5^\xa2\xfd\xe3\x059#\x8b\xf2]\xf3\"n%\x8e\xe1\x06Q\xfa\xd0Z\xee\x00\xf8\xd8\xd6\xba\xd0\x13\x8e\xc6\xec$\xd3w\x13 \xbf\x0b\xae\x8a\xd4\xf7\"\xaa^\x98)y\x0e\xea(F6\x03\x16\x16\xa9\xcf\x19\xdd\xca+`F\xd8\xc2\x0e\xea8}\x1fG\x83o%\x15P5\xa9\xb2v\xc0\xdcJ\x169@9\x84!\x1c\x96\xb9\xb3\xf4\xf3\xdfJ\xf4*\x95\x8a\xe3\xc4\xeeC\xc8\xb8\x8bi\x86~\x92\x02\x16\xd9\xb8\x10\xbf\x8c\x049B7\x91\xb0\x80\x1e\xa3\xf1~\x00a\x9d\x82ip\xf4\xc9\x8c\x92\xc6\xf1\xde\x8a\xa2^\x15G1\xc8\xf8\x1b0UX?Q\xa8oA\xd8\xc8\x8e\xb0\xfaN\x9cp0\xa9\xe2\xa0\xc9\xa2\x848\x98b\xb2L\x86]*\x185(\x88/Ez\xc8\xa0\xf1\xab#r\xca\xcdbE9\xd1d.z\x13\xca\x8a\x08\x95|\x81\xf0k\xcb\x8bi2&\xca\x0f \xaf\"K\xf3x;%\x01,I\xc0\x98\x06[\x1a\xf5\x13\xf3iU\xf2\xea\xf2\x10\xd7BX(\n\x8b\x93]\xbf\x0c\x80J\xbe\xd4\x165\xc3\x0f}3|*\x89D\x04\xe3\xb0\xeb\xd7&\x06\x95\xb8g6\xb70\x00\xa3\x8d\xb5\xa2\xc7 +\xe5\xac\x0c\x9e&\xf2\x92\xc4$\x17\xfeK\x07\x12\xc1\xf8\xf1\xbe/\xa3\xdc\xf1\xa7\x99G\x05\xe1\x97\x92\x8b\xca\x87\xbb\xe8\x19\xbb\x03\xb9\xfd\x93 F\x9a\xee@n\xe0\x1b\xf1\x95\xc7\xb0F\xdca/\xdb\xec\xa1\x02\x08\xad<\xbc\xbc\"t\x9ce\xd3\x9e\x14\xfb\xe1\xd8Rt\x04\x14\xb5\x04V{\xdc\x99\xc0>\xa3\x9a\xf6OD\xcb\xe8\xd9\x15\x8e\xa8>W\nh\xb7\x1d\x80\x0c\xab\xab\xbb\xe5G\xa89nYV\x11 \xea\xbc\x80\x13$/\xd5\x05L\xe0\xf1c\x88\xec\xdf\xcd0\x00f\x9b\x1d\xeb\xf2\x03\xcb2\xcd\x8a\x05\x9d]\xf3\x82\xe2\xb9\xf6\xd0\xe8`\xa1^l\xed\xb5\x19]tW\xa1\x8b2 }\xf5+\x12E\xf6\x98\xa8\xd3\xa6\x90\xaf_\xa1P\x85\xb6\xbel\xb6\xe3\xcb\x8b\x0dcR\xf3%lCpP\x08&G\xf2\x19\xec\xc3\xa4\x0d\xc9A\x8c<\xe7\xae\xe8\x19f\xde\x8f\xf8\xa1\x940\xd4\x88\xd9\xa9\x1d\xf9f\xb7\x04\xb0N\xc9\xb27\x90.6\x1e\xbb%\x948\xd7&\xfb1\x1d\"a#;\xd7\x99E\xa3\x10J59;\x9b\xd98UU9\xfeTT\xe5\x04oH=y\x8c\xbf\xca\xacGa\xa1$\x8f\xf0\x87\"5&\xfc\x86\xd0\x97\xe7\xfcW5\xb9W\xe8\x04\x8a\x0bb\xd3\xa8\x9d\xa2i\xd0C\xc5\"\xb7\xeb3\xf1\xcd\xd1\x14\xfe\xbe e\x13\x88s\xee\x8f/\x92\xf3\xd8c*(w\x9a\x7f$\x89\x9bT\xcc6>@^\x18\xf1R\xf1\xa5\x88l\x1b\x93\xb3\x9c-\x9c\xdb\xa4F\\G\xa1%c\xce\x8c\x9b\xf8&\x1c\x0e|cHXX5I3~B\xc9\xbcQ\x9ed\xc3\xd0\xc6[t\xccXi}\xd8\xa0iE\xb3\xea\xc8\x8b\xe3\x9f\x96n\x99jWA\x05v\x1c\xf2(\xec4xK8(nJ\x13Y\xae\x8e\xb3\x19\x83`\xc2\x9bC3OW\xa8\xd9\xd0\x1f\xa0\x88\xc1\xa3\x8ag*\x15\x1e\xa8k\xe2\xf1\xfc\\\x82-E\xae\x94\x8d\x8a\x89\x97\x8d\x02P\xfa\x91<1\x8f\xa4\xb0\xa0\xd7l\xbf\xaaeU\xcf\x0f\xf2/\x1fq\x81F\xb2\x82\xb0\x0dg&\xa4\xab\xfarJ&R\xf0\xad\xf8\xf5C\xee\xb7\x80\xae8XXuX\xf80\xf0P\xad\x14=\x19\xd8G;C8\xb3\"^[\x99wcE/k\x92\x1e%\xe8EF\x9d\xf1r\xc7\xea\x13\x19\x7f`(o\xac\x98\xf5\xd5t;\x98\x9f\xc1\xcc\xb6\xb7\xb0\xff\x89\x0b\xfb\x8f1\x1e\xb0m*\xce\x10\x1623bc\x8c\xdc\xf4>\x9a\x8dv\xf1\xefm\x0c\x19c-h<\x16\x18>\xe4\xf5\xfd\x95\xb4\x91\xa9\x9c\xe1\x9e\x12s\xc0\x0d\xbf:N\xa5\x1a/Q\x88\x1e\x13\x15\x99f2\xe8t\x1bfl\xd4\x0f}|.\xf6\xd1\x84\x8dkR\xdd\xf1\x070\x92\xc6\xa3\xc9X\xec*&\xd8\xcd`[f\x1f\xc8\xd8\x9fg\xba\x11q\x99\x90=\x9e\x05\xbc\x8c\xfa\x8c\x1d\x00\xfc\xdf\x04\xff\xb5Md\xc1\xa5\xb1\x04#\x08\xf0\xcf\xd0\x7f\x08+\x06\x11\xec9c\xbb\xc9i\n\x95\xa1\xf3\xf1\xea\xf1n\xde\xe6N2\xc5 \x8aG\x18#\xc1\xc9F\xc8%\xee}60\xbc\xad\xa8\xb70\xba\xd1pda\x905\xff\xe6\xe6M\x8c\x03F\xd1l^SA\xb4\xd0\x8a5F\xb0 !\x9f\xf0\xe9-a\x08\xd9CX\xc2c8c\xff0J\xd0&K\x1c\xc3\x10\x16HA\x96z%\x89\xbcXwkAr\x8e\xc7\xbc\xdf\xf2\xb71\x81\x94\x9e\xbf\x93\x1f\xf2\x9e\xcf\x90v\xc1\x10\xe6-\x94 $\x83/A\xe6\xb1E\xc1(\xf6iEq\x92\"\x1b\x13\xfax\xd6=\x1e\xc2\xca\x87\x9c\x81c\x85\x8b\x86\xfff\xdcmaR8(4\x9a\x12z@\xde\x96.|\xb2pGf\xc2q\xc4(\x15\xe2\x87u\xe5\xc4>\x9cX\x85\x19\xb60'\\\xe8~\xfc\x98\x1d\xe8\xb6\x85a\x038A\xea\xba*_\xf7\xe1$%\xe1g\xf3W'BP\xdb\x1e\x82\xc7\xb7\x94\x0f\xdf\xc1 n\x92\x9d\x022b?\x8dN\xf4\xc2\xad~q'\x1c\xab\x1f\x0b5\"o\xa7\x0e\xd2\x8c\xad\xcc\x0e\xcc\xd8\x12M\xf8~x\xc4\xf7C\xe5\x83b93F \xc4\xfb\x92\xba\xec\x08\xaa\xb2\xa3\x8d\xa2\xec\x9c\x924D\xb5Fy\x9cp\xb6\x9bV\xd8\xf9\xb0\xd4\xed\x00\xc6q\x96\xeeU\x13\xd5\xbdj\xea\xea^\xc5\xc8\xc49\xf1r.\xee`\xa4f=\xba\xd1p\x1c\xff\xe1\x96/2U\xf3EV\"\xe8\xcb,k\xa1=\"\x04\x93b[\x99\xe0 Z\x01M\xe9{&\x1c\xc2\x8f\xc5\x9eMp}E\xa5\xbf\xdc\xcbxJI\xbe\xea\xd7\x9dR2\xe5\xf1h\x93\x0e\xe8\x91\xc0c\xe94y\xf3&O\x10Uz%'HR$\xe4\xebYn\x0c+\xf5\xb9-\xc5\x1cw\xab\xdeE\xa5\x9c\xd4Y\x9f\xb1My\xe6\xd4\xfe\x91\xbd}k\xa1\xc7\xa7\x9ce~M\xca\xfa\x8e\xecVg\xbf\x9b\xb3\xff\xf5\xf5\x1d_\xdb\xa1X\x94\xc2\x9c\xd5\x11\xce\xd4\xe0\x07\xd7\x94|U\xd5\xc3\x91bT1+!\xca\x14\xe1(\x02\xe1\x8f}\xb4\xdb\xf7\x8fy\xea \x9e;|\xc1\xed\xcb\x0e\xb9\xc3\x9d\xe6\xf4\xd4\xaaLXre\xc2\x92\x8d\xeb\x03\xf1xu\x9b\x0b\xe25B\xfd\x0c\xad\xffl\x970\x84i'\x90,\xbd1\xf5R.\xf8\xe0(3x\xfdb=6LIA\x0c\n\xff\xac\xe4\xf8\xd9\xd1\x1a\x9aT C\x9e\xb7I\x8f\xb7\\?\xd1\xa6(\xcc\x05y\x1cr\xedi\xf9s\x0f\xbe\x83D:n\xa2\x8d\x88\x1b+\x9b\xc9O\x0d\"\xac\xbcD\xff\xca|\x84\x8a\x05\xa55\xc3>\xf2\xfb4yI\xd6d\xfa\x9e|\xf1\xfc\xee\x94\x99\x8ev\x0d\\\x83\xdf\x9f-\xa2\x95\xc7:x\x1d\xf2|:\nn2\xa2\x9bVp\xb5\x8a\xb9\xaa\x933:\\\xa0\xf1L\x96}c\xd4%\xc2\xc3\x9c+1\x14\xe7\xde\\Q[0\"\x12J\xd1T\xa3\xbcTb\xcd\x8c\xb6\x99\x12\x01rD\xa5\xd0\x1f\x0d\xc6m\x8b\x9dr\xd5\x1e_G1\n\x9ej\xdd8\x08>?\xe1L\x9fK\x12Z\xb6\x90\x8bB)\xa2\x19#\xc90\xf1=\xa9,\xb4\")\x07\xf7\x0d\x17\x94#\xd2s2\x0c\x8c\x1f\x90\x93s\xcc\xbc\xfc\xae\xc5\xeb\x04\xdd\x95\x14\xaf\x93\xe3<#/\xc9:SJYH\x8a\xd7L\xe2k\xea\xf4\x8d\x81\xa6k{\xec\xde\xfc\xab?\xb7\xf9g\x7fn\xf3_[\xe2\xd8\xfeAl)b\x89:\x02R\xed\x9e\xdd`[\xbc\xcd\xabSi\x8e6\xb1?\xc0b\x8e\xb2xIkCgE\x99d\xf1\x91\xac\x7f\x86\xdeg\xb6\xbe\xdd\x07\x0b\xean\x12\xddx\x06F$\xd0U\x14as\x9a\x87Y\xab\x1b*\xa8\x1dE\xf1d\x91OIV\xafj_\xb4(_\xe8\xd6\xec<4\xb78 's\xf2\x8ed\xf9\x02\xf9\xdf8\x00\xc5\xa3\xf0c\x8c\x8f+e\xbbl\x11L\x85ZO\xebL\x01U\n\xd5\xa8g\xe5\xc8\x18\n\xafC\xf4\xb5\xa7fu\x84\xb1\xd8\x95\xe2\x9d\xdau~\\\xdf\xcb\x0e\x82wmR\xbd\xd4n\xca\xaex\xbbf1]\xb2\xf0nN\xac\xf2\x92v\xcd\xd4Z\xbeV^\xc8\xa5\xd0\xd6:\xb6\xf2*\xf7\x19\xba\xb9\x8ev[\xb2!\x01\x86u\xcaw\x95\x0f\x07\xe3@\xf9\xbb\xe1^X\xbf\xecfQ#\x19\x91\x97)\x8b\xb9\x1b>\xb2\x95\xc2\x15\xfe\x99\xc9L\xb0\x0f?\x1b\x11\xa9r\xd3D{\x9f\xb7s\xba\xad\x148\xad\x13\xdd\xb4;i1\xd3\x80\xb4\x1e\xd2\xe9RT\x99\x97%O\xcd\x85~\x0b\x19{(r\xd0G\x18&\x8c\xbe\xf6\xbc\xc4N\xaa\x15\xedp@V\x02\xe44\xbc\xab\x12\xa0\xa8\xc5\xd9\xa6J\x83R\xaf\x9c\x91\xfcXX\x04MD)j\x99\xb2\x9e(9\xcdY\xc5\xe1w\xe6\x14\xce\xdd)\x8d\x14_\x93V*\x83\x8ev\x82\xc0H\xf9\xd5\xfc\xf6\x99\xf0I\x8b8m\xb0\xbb\xa8\xa0o\x82\x95\x06I\xf9\x9dA+\x0c\x14d\xcb\x91\x02\x85\x0c\xdf\xb4\x0b\x00\x06uB\xa3*\xa2a\x8f\x7fl\xf7\\\xb3o\xf0Xe\xb1\xe2\xfan\x8f\xbb0G6.\x8br\xf6\x07-s\xce\x9c\x90<\x05\xbe\xeag\x00*w\xd5a\x9c\xa0\xeeE.%\x9a\xb6\x8c\xae\x8c\x07\x83J\x8dl\xd9\xd2 \x16=\xa1&@\xe4}\xdc\x19\xc0\x8e&\x855\x08\xee\xa1Nc\x8d\\A\x95\xc6V\x1a7\xb4|56\xae\x85;\x8c5\xbc\\\xac\x8f\x0e\xf9\x8f\xf3p-\xc5H.\x03\xd82\xc1N\x1f[d\x9b\x91\xf6\x8c7\xf7\xe0\xb4\xe5\x7fpU\xf9\xb5\x9c\xec\xb8\x19\xa3:\xaa\x19\xf1\xf8\xacH\xd4\xebv\xfcFxL-Y/[[%A\x8c,\xa7o\xf4\xe7\xb2\x03\xc5x\x9a\xbc\x80\xb0\xb5kJ\x0b\xf9\\\x87ia\nl\xde\x94gJ\x9c\x80\xf9\x8c \xf5Uy\xa1\x1d\xe1\x13\x8b[/H\xa9A\xe5\x13\xf0\x832\x91\xe2\xf6v\x00\x91\x87~ \x1c\x02hn6\xe7\xf9dS\xad\xfb\x84\x81\\<;\x1f\xe1\x04\xa6\x1a\x1f\x91X*/\xb6\x03\xad\x03\x9b\xe1\xe8\xfc)q.o\xe5F@\x06eT9\x92\xc4\xfe\x854\x84%.\\ \x08\x9bX6\xda\xb5X\xcd\xe4\x85\xd9,\xb5\x89A\xd5\xab\x8a/34\x15*9\x81\x9ecED\x91[\x1d\x91gfd8\xc1(\xf8\xe8\xf9\x1d7\xdb\xc0\x17W\xe2G\x0d\x11\xa7l\x86\x9d\xdc\x88\x98\x101\x80[\xe8\x83\x83\x81\x88\xe8\x93#\xde\xff,*\x98E\xady\x93\x18\xda\x1c\xf1:ff{\xc2k\xa4\x90\x86\x80\x1cF\xc0 \x81\xcd\x06r\xf6W^\xf4\xc8`\xd2\xa7 W\xa1+\x07\xb1\xe7\x97\x90\xd2\x0fJ8y\xe7\xb0\xa3\xc3\xcc\x0c\x86C\xee\xe9\xe7\xb1\xcd\x96 G\xa4]\xd8\xd7V\x9a8\x13^\x8d\xf6cg\"Y\xcc2\xdc \xc4\xcaZ\xd2\x18\x1a\x96\x06\xc4\x00\xb6\xf0\x94\x8a\xa4Y,,\xd2\xf8x\x93\xfaY\xe1p\x0c\xcb\x0c7\"\xdc\xb4L\nDDQE\xc9\xa4m3:\x89\xe9f4~l~\x00\x93o\xd3SEV\x1e'*\xb2\xea\x95\x8eY\x06B\x87\xd6\x81J8Nu\xfd\x95S\xc3\xa2\x03\x92\xd4\xd7\x12E\x9cqW\x02\xe3\xf3I+1\xbe\x12\xcb&|o7\x1b\xd8\xc2r\x90\xf9\xf66<\x82\xa4\xdcl\x13F\x83\n\xad\x9c8\xc7b,\xf8\x80\xe7X\x84h3\xe1\xe65\x031\n`\xa2\xa3G\x93oT\xd6 \x9b\x1e\xeb\xdfi\x89\xecz:\x896J\xabM\x15\x9fy}\x1c\x96\xf7\x9a\xcfR\xb9V\x0f}\x88ZOK\x06\xaf\xed\xed\x0c\x1e+(\xdfv\x12;E\xbfC[\x04<\xbb.\xedj\x024P\xb5N\xa1\xe0\xaa1 \x96\xd4\xe2Q\x0c\xb0'\x01\xaf\xa3\x13\x88'Oe\x92\\\xf4\xc6P5\x95]\x14\x04U\xac5\x1d\x98\xbf\xbb\x1e\x98v\xb2}M<\xb0\x99\x8c%.{\x84x\x16\x97\xf73\x11da\xa3S\xed\x88n\xe1\xb4'\xad\xa4\x8a\xa7\xe4\xc6\xd3\xb2\xceuO\xfc\x92je\x0d\xb6;\xb3\xb3\xdd~\x00\x9a@\xcbk\xe2\xb9\xbf}Y\x92\xd4e]\xba0\xf7\xdf~\xdet X\xb8\xc9q\x914\x89\xda\xe55MZ(R$\xb3\x0e\x86\x82V\xf8U\xd6\x1f)CT\xa3\x0cQ\xc0\x8f\xb0\xa8\x8d.\xb4\xcb\x0d\x8b\xd2\xeaa\x7f\x99q\xa2\x0b\xac\xe47\xc3\xbfX\x07\x9c\xcb\xcb*x;\x13\xf1L\x16\xf6\x1e\xce\xe7\xd1\x82\x80\xd1)\x0fTu\x00\xda\xae\xd4\x99'\xd8G'\x9a\xe7&$\xfcz-\x86\x8fo\xb6\x04X\xf0\x17\xe9\x94\xa1\xce\x91\x18@1\x1b\xeae-\xb4\xe7LT\x0d1oeve:\xca\x16\xb5(\x10@\xe1\x9e\xb7\xd0\xf3j\x02\x8f\xb0`\xcdM\xc8=\xac\xda\x87e\xf2'\x18\xa8\x0d\xfb2M7R\x84X\x94\x03HPR\xf4\x0bIbk\x17\x8bs\x9a\xf1\xca\xac*g\x0b\xcb\xben\x96P\xfa3L\x19\xa9Y\\\x03\xb1\x8a\xa3\x96B\xe7\xd7F\xa5\x04[\x958))\xa8\x93\xc9\x04\xe4\xb9%R\xcdw2\xcfN\\\xe9\x0d\x88^RA\x01\n\xf7\xeb\xd1`\xcc$T\xd4\x10z\xa1\x8c\xa7@\xecb\xc7h\xeeM\xca#3.\x08G\x1a\xf0\xf3s\xd2N\x16\xd9\x15r\xe7\xdcD\x94F\x9b4\x96\xd7\xda\x82\xf0\x8eJ\x90\xac\xa3g\x97\x19i\xdb(`\xdb\xaa]#C\xdb\x81\xa2\xba\x99\x99~\xb1RT\xee\x91\x89\xd1\xaa:\xf9E\x12\xdc\xd0\x986:2SK\xbe'\xa5v\xa3\xe2 HZ\x8a8 \xb8\x8fR\x1cy\xc4K/\x1e\x00\xffP\xb8\x97\x11\xa3\xfb`\x91e\xdaxD$\xfd,I\xa9\x9b4+>!\x1e\x1d\xdd\x1e\x07\x10\x8fn\x8f\x11\xcb\xe9ho\x0c;\x10\x8f\xf64\x19\x82\xfd\xb2 y-+\x83q\x97\x96;i\x08{\xcd6\xeb\x15\xfal\x0d1\xd0\x8f\x06\xba\x81q\xce\xf5\x85\xa8\xf1\xc1\xdd\xbao\xf0_?z5\x85\xa0 \xa7^Zq\x8a\xfb\xbb(x\xe5b7\xfa6\xed\x82,u\xe0\xdcRG\xe0\xcaK\x02\x99\xad\x0f;\x99\xe0w\x0fC\xd8K\x9fK\x86\xef\x96\x03\xff\xea\xfa6\x07\xf6\xbf\x03g\x88\xab\xd9*\x80\xa1n\x02\x973\xb9\"\xa0\x04\x16\xd8\x00\xc2\x13\x90\xf4\xb3dI\xae\xd2\x01C/K\xf3\xa2\xbe\xd4_\xc8H\xc9\xfc\x989\xe6\xc7\x14\xce\xbe\xa2\x1c\xc5U\xa1\x88\x03\xb4\xcd\xf2\xfa\x05\xe2\x1f[s!p\x13\x0b\xaf\xc9A\xfb\x93$\xceh\x9aOP\xb3\xecF\xdf\x7f28zGE6\x1b\x1e\x81\x84%F\xe8(6j\x0d\x810\x01\xc9\xcd\x818mI\x9c\xcc9\x88\x82\x04Zs\x8aq\x0bv\x14g4\x8c'$\x99)\x15\xcf-N\x11\x089D\x8f\xea\xa7\x95d\x9f\xa9gR=\x17MX9tv\xc5\xa8\x96j\xd7\xb2\xe6e(\xe5g\xb2\xce\x8c~\x89\xf2\xdar\xe3\xca\xd4\x8b\xa6k\x87\xb7\xd8E\xb4\x11\xaeN\x9d\xc8K\xcceJfQL~N\x93\x15I\xe9Zp\xbe\xee\xad\xb0\xeb\x94PE\xb4\xec2\x06y\xa9$\x88\x87Mvj\xe2\xb2\xdd F\xbd\xb2\xcax[\x8fo\xdduJk\x89\x98\x03\xe8=\x0d\xe38\xa1\xacuHb\x08c\x88\x8a\xf4\xbc)\x99$\xe9\xb4\xdf+H&\x8f\xb6\xb3\xb0\x98\xba\xab=s\x9b\xbc\x0c\xd1\x08\xf5\xeb\xb2\x7f\x12\xc5S\xaf\x8c\xbak\xff\xec\x12&!\x9d\xcc\x01\xc1f\x1f\xd0\xa5']\xd3\xe5\x11\x91\x0b\xfd\x04r\xfdq\x88\x81\xbcK\x93\xe5aL\xd35\xd7\x95*\xca\x9fv\\\xe9V(\x81\x0b\x7f\xc3F\x95\x04\x87\xfc\xda\xa4B\x14*\xdd\x1a\xcd\x08%!\x11KT\xfd\xc8\xbc\xacp\x00\x1f\x88p\xe5\xecPmA\x1e-D\xdd\xd9<\xef\x85F\xa2AHF\x99BH\x87\xf0\x9aT\xe1;\x9a\xca\xea\x06\x15\xa8\x17u\x0e4\xfb6\x00\xe2\xbd#\x01\xbc\xf0\x03xw\x05\n\xdc\x14\xfc\x90\x02\xeb0\xa1\xd2|-n\xa0\xb5\\\x1ao\x9b\x17M\xb36\x8c\xfa\x91\xf7\xe4K'\x9a\x81\x8d\xcb/\x9bt\xe1]\x15nN\xa1BgJEf=\xbe\xb1&>Jr\xb8\xa5K6X\x19\xa3L6\x80F\x0d\xe7i\xaa\xcd\x88yJ+\x8798\xfc\xd2o\x04\x89\xd6\x80\xc01\xb7\x15;T\xb2\xa8\x07\x02\xa3\x02\xcf+\x87M\x070\xa4W\x01C\\\x03\xc32\\i\xf0\x15\x04\x18\x1a\x85_\xde}\xdb\x19\x11XB\x94\x9a(Y\x1e\x13\xd5\xc9+\xe6<\x07\xc7e\xea\x11S\xcc\xd2%#P2\xdf\xf2?y7>\xcf\xd2S\xf4`T\x9d\x17\xcdG\x81\xc8\xd7\x1c\xc3>/\x06\xa4\xeb\xcao%\n\xdd\x8e&<\x1eT\xb0\xf8\x16\x08\xca\xe3I\x7f\\\xc4U\xddS\xc3\xa0aD\xdd:\xd8\x8c\x8b\xea\xa8\x90\x97\x96\xa1\xd8\xea}Q\x88 hP\xe1JCT4\xf3U\xc0\x82\xf8\xe8\x17V\x98Wt\xcba[\x8a\xf2$!\xde\x1b\x12\xc0\x0d?\x807\xeaR\xe9\x02\x01\x1d\x89x\x11\x0d\xd8\xa4\xe4o\xbems\xb5R\x1a\xf3\xfah7\x9d3o\x86;\x0cA\xee\xca\x92ig\xea\x86\xf7\xdf\x84\xb0\xd7\x82\xa1\xc4\x15C\x89\xc4P\"14\xe5\xa6\x10\x81\x97N5\xc3\x88\xf7\x8a\x04\xf0\xa3\x1f\xc0\xabo\xe7 ,\xc8\xf7\xeaZ\x90\xef\xcf\xc40\xe2\x8e_\xda\xc9\\\x1b~\xfd\x87\x91\xa8\xc4\x9f\x8e\x88\xf4Lp\xba\xcfT\xe8\x10!\xcc\xb4\xf1\x10\xcdu\x14,D\xbd\x9fg\xff\x95\x88\x84.1\xa6\x87\xec\xfa\x89x\xc6\"z\x8a\x93En}\xab@W,\xd1\x8f\xc2\x00:vr\xb1\xb5\xbc\xb9\xcbo\x1a\xa4Xv5\xf5rZD\xd7\x02\xfb\xbf\x06\xd1\x1d\"C\xdd\xf6\x02\x14\xe1\x95\x15\xb7p\x8b\xf3\xa4\\/\xd2\xe6e\x89\xde\x95\xb6\x11\x02G\x0e]\x18\xa0zI\xde%o}S\x0c\x1e\xf7r\x04\x07<\x91\x0bG\x89\x14Q\xa2\xbc9\xe07\x07\xcd|\xf9\xeaepYt\xa0 \x95s\xb8\x9a\x86\xe0\x9d\xf9\xd1+\xf3\xa3g\xe6G\x98\xa3\xcaK\xe3\x00N(\x13-b\xe5\xcdoT\xb0\x86\xb1\xe0A\xb7\xa1g\xd4\xb0V:\xec||V4\xea\xec\xf3\xb7\xe7qi\xf2\xb1w\xe6\xa8L\xe0i\x9e\xe6Eut\x1b\x9aW7oep#\xaa\x89S\xae\xcc\x85\x89\xaf\x07\xe5\xdfRg\xa1\x89\xd9\xac\xcf\xc4I\xf9[J&Z\x95\x15\xef\xff\xe6Me\x00\x15}\xae~\xb2R\x99\xa0\xda\x06\xcc\xd3\xec\x1f\x93\xe5\x8a\xaeQL.~\x0c!\x8f\x85\xa8\xfd\x1bm\xa6<\xadM\xd5Qc\xdc\\\xb4\xd2J\xcd-\xd4\x7fS\xacZy\xfc9N\xcec\xf8L\xd6\xd0\xfb\x1bl\x03\x85m\xf8[\x0f\x92\x18\xd8/\x89\xc7\x06#y\x05z[%\xf8D1\xfd\xb2\x16\x87\x16)\x1c\xf4\x86\x15cBu\x892\xa9\xd7j\xc1\xadJY\x08e4%\xce\xc1~\xb9\x0e\xcd:\xcc\x955pT\xae\x1b7\x8ey\xa6\xc48\xfb({\x8f\x9a\xf8I\xdcT\x01\xcd\xe2\x00\x16\x0c\xc7z\x7f\xff\xfb\xf1\xf1\xd1\xeb\xd7\x1f?<\xf9\xe1\xd5\xe1\xf1\xfb\xc3\x0f\xc7\xc7\x7f\xff{\xaf\xe9\x08\xb2bog\x0eJ\xa3y;\"\x18\xaa5\x91z\xb5& \x05Y([j\x88\x91\xcd\xe5\x87\xa6\xf4\x8eg\xa0^\xae\xe8\x9a\x87O\x17`tSDL\xdb\xf7bU\xc9\xb5\xb2\x04a\x94\xd9\xeck\xe5\xebb9-\xca\xb3z\x97kJ\\\x93p\x9fY\xe9\xd2\x0c\xf3\x0ex36\xdei\xec\xe9L5\x86v\xd7\xdf\xa0\xd2:\xe7*\xad\xd3\xb8\xd4d\x9d\xff\xbfM\x93uj\x87_\xa1\xee\xd3\x14XT\x7f\xad\xe2\xd1\"\x96\x0et+E\xa9\xb5*\x95Z\xab\xaa\x82I\xfe\xac>\x10\xac\xc1*VuV+\x17\x85\xcf\xca\xa6\xf0Y\xb5)|V\xb1\xdc\x870\x84\xb3X\xdc`[\x11Q2\x00\xe2\xadcF\x9c\xfc\x00\xd6\xd7\xa7\x11Z\xff)\x1a\xa1\xf5uj\x84\x84\xff\xbdM1\xb4\x8eK?}N\xb9O5\x94{\x19\x07p\xcc\xf6\xc9\xda\x81\x16\x9ft%l\xc7\xff!\xc2vn\x85\xe6\x92\x13\xb6%\x1b\xefI\xec=u/\xbby\xf1\x0d\x84\xed3'l\xef\x15\xc2\xc6n\xf5\xf38\x9bG3\xfad\xb1p\x8d\xe6\x7f\xef\xac\xe8~bWt\x1f\xc7\xa5\x83\xed\xb1\xba\xd7\xcecqC\xec\xb5\x13\xdck\x17q\x00\xe7\xd4\x0f\xe0\xe2\xfa\xf6\xda\xc5u\xee\x8a\xf74\x9c|\x86\x11\xdb\x10\xe3\xe6\x86\xb8\xb8\x82+H\xd5\x18?'\xe1\xb4\x89\xcf\xa8\xb7\xa2JRn\xea?\xe4\x89\xd7\xe9\xce\xceC\x1f\xbf\xe7^U\xe6\xbd\x00\x07 \x92\xd0\xe8\xe2\xfe*#_\x11\xf2\xb9\x13\x80\xd8\xa8K\xc3!\xfb\xa5\xc9\xde\xd1\xe8%\xcf\xe6m\xbd(9\xbe\xe5\xfa\xbai\x1d\nM_\xe1L\x82\xbb\x7f\xbb\xd1N\xa00\xc0l\xe0\x01\x02\xb3\xfe\x16\xec\xc0\x80A\xfc1W\x1b\xee\xec\xf8\xf8\x99\x89/\xc0\xcc*E\x1b\xa3\xd8\x90\xfb\x90-X}-\xd8\xa5I\xb4\\\xc5GC0e\xc1i\xe3z(\xf1V\x8d\x8a\xa1\xfcn\xad\xfc\xb9p\xed\xff#\xd6\x8b'\x8d\xc5{\xc2H\x91\x83`\"\xd4\xc9\x98\x1f\xda\xa3\xbe\xcf9\"\xfb\xfa\x959HZ\xa4\x16d\xc0\xf5\xd0m\xd9T\x05o_\x84\x07u\xe0\xd0\x08\xcf\x92gB\x01(\xd1\xc0P\xf5\x18\x8a\xf5o\xa6\xce\x87\x06\x19\xc5;E`\xaci\xfdIm\xfd\xe3\xab\xae\x7f\xd3\xfd\xba\xb1\xfeIke*\x15e\xb3E4!\xde\xc0\xde\xa68\xa6\xba\xb4\xcb\xd0\xd0Q\x1d\xa5\xeb\xca\x05\x83\xeb\xdd\xe9N\xd1Z\xeb\xdd\xa7\x91\xac\xae2\x8b.V\xa6o\x8d\xcf\x16(U\xc3\xa0.x\xc5X\x11;\xd8\x18\x92\xb8\x1c\x99\x8c\xa8|\x16\x8e\x1e\xc5`]\\\xc1b,.\xa2V\xe95h\xb8_{\x95\xa6\xab\x16\xaa\xa2\xa3sZ\x1f}\x99\xa6\xc7\x18\xe3W\x9cLi\xe5d\xc22gQ\x95d\xb1\x83\xe6\xa1\x8fw#\xfb\xe9n_\xc4\xb4\xb6\x88\xd1\x95\xd6\xef\x8fXWa\xba\xb6\x86\xdd\xd4V\x85.\xa9\xa9\xb9R\x10\x14\x0e\xf0L*\xa8\xbd2\x99\x8ea\xc8\xea\xcc\x06\x06=\xd4\xc5\x95\xb5\xa0\"\xee@]\x92\xf2hQ<\xbflH\x11\xf3=\x97\xd6\x10!\xad$\x13Le0H\xac$\x13\xc4o\xd2\x16&\xd0i\xb2n:R\xa7\xd9&z\x1db9S\xed\xd9\x97\xba\x9d\xdc\x8e\x91 \xad^\xff\x92\x9fH\xdb\xe2\x07D\xbf%\xa0\x03\xee\xd9\x8f\xcb`\xb2\xfa\xeag\xc8[je\x1e\xda\xb2\xf3Y3\xf3\xb9D\x05\\\xa0\xd6\x15\x85\x9a!\xbc\xd7H\xef\x87q\x00Otz\xd7\x0fO\x9e\xbe4h^\xdf\xb2\xf7/\x1c\xa4\xfd?\nw\xbd\x96\xfc\xa15\x8f=kF\x99\x92\x19\x8eTN8\xaa;\xeaE%\xfdK\xf9\xaf*upK\x19\xf8\xd9z\xea\x1er=\xc0!\x03\xc8\x1f\xb1\xd7pO14z\xd4..\x16ho4K*\x87\xd3\x08ut\xec\x9f&J\x18!\xa9\xa6\xef\"%o\x1c\xfb\x01\x94.\x93Jh\xc4\xfb\xf5\xf2$Y`\x85\x04\xdb\xf3z[\xb4\x06\x11\xf5\xd7\xdbx\xf4\xa4P/\xbeu\xd1\x06\xbe\xb5i\x03\xdf\xb6i\x03Y\x17\xaam\xed\x8b\x9aE%\x80\xb8\x7fT\x12\xc8\xaf\x01[\xa6X\x97\xfeK\xa4\xc4vH\xf3\xf5\x8cz6V\x04\xc4\x82S\x91\x1b\x97g\xda.\x8f\xf6\xcdFk\xa3\x87\x1acP\xe6{0\x98\xde\xac\xa6m*\xb0GOc\x1a+\x88w\x9b4\x81&G\xf1\x94\\\x90\xe9{\xf2\xc5\x010\n\x89\x7f#\xa2\xce\xddz\xf9\xe9\xbd{\xeb\x08\x1cm*l\x17\xcd\"W\x87pa\x84p\xefn\x1d{!\xa7,\xd2\x94]\xd2I!\x17;\xf6\xde\xa9\xdb\xec:\xbb\xed\xbcI^u\"\xa6\x9d\x9a\xcf\xaa\xb3R >\xce,\xac?/WY\xaa!\xe4\x9c\\ \x052\xae\xee#\xbc\xb86\xd0\xbf\x8a\xb2\x0eK\xbe\"\xd7\xd5/7C\xb8\xf7\xdc\x1b!\xc7r\xb2 \xe3\x9eK\x0f\xa5\xa9\xc3\xb1\xfc\x85Y\xbb\x04\xdb&\xc6\xf2\xba\x9f\xbe\xf2\x12\xc3\xcc\xb91\x8f\x97\xd9e\x94?\xc5\xb0\xc7}\xce\x14\xc2\x01\xe4\x98\x92|\x1fB\xea!\x7f\xd8\x8f2\xc1'J#\xe0\x88\x8e\xb5\x94[\xbd.}wOo\xf5*\x10\xc0\xe2\xf5\xad^\xa6\x8a\x1dP1\x16D\x0d+\x8f\xfd\xabA\xed+\xfb\xb8\xcfD%\x84h\xb4\xebP\xe79)\xed\xad\xb8\x08\xa1\x97\xa0\xc7\xae\x0c\xc4\xcd<\xa5\xd0j\xb3\xde\x96\xbc\xcc\xd9W\xcfD\x95(Q\xfdBW\xd7X^\x92\x92ci\xe9!L\xeaT\x14\xc7\xc4$N\xf9T\xd2S?\x90\xf7f\x8b\x90R\x12{[\xbb\xc2\x12\x83\xdaEM\xd1\x13\xebV\x00\x01\x1c%\xcd\xa8\x13\xba\xc8-\xc4\xfd\xa0\xec\xc0\x87f\x1fJ\x85X\xd86XN\xe4e\x06\xf8%\xaf\x8d\xd6,g\x8b\x0f\xa5\xfaV\xe3\x0e\xed\xc6\x8eH\x8f^\x97\xb4\xc9*\xbbV\xf5 v\x897\x98\xda\x12#k\x0b!4n\x91\x98\xa6Qe\xac.CU\xf4{\xef\xdc\xba9#\xe9\xda\xf1Lq\xe4\x82cK*\xf2\x16.8\x0d\xc0V\xf2\x13\x8a@s\x8e\x03\xbc\xd6\x11~\xa1\x14Z\xe3Z\xa2\xad\x81\x01\xf8uG\x12\xd0\x03\x86\x13]G\xc8\xd4O\xae\x1f\xd4|\x82\x9a\xf0'0\xf5\x19Ok=\xbaT\x8db\xc0d\x9fbNT\xcf`\xde\x00UOz\x80 M\xf4\xe5\xc15\xc3\xe2Z\xa1n\xb0\xa8 KP_q\xeei\x89y\xbb\x89\xaf/S\xa3\x19\x08\xe3@\\6o\xbd\xef\xc2\x92\xc2\xe9!\x1c@\x0f\x19\x1f\xd8\x87^\xd03c2#\xc1=\x8d\x1eU^\xdf\x82\xe96\x1c\x8fE\xa9\xfe\xad\x01\xba\xacn\xa3\xd2\x14\xffE7\xa3-YBJ\x99\x14\xaei\xe1E\x83gN\xaf\xc9Y\x82\xd8\x01N|\xdbg\xb2\xfe\x06\xf2\xf3\xd4iE\x97\x159\xd4\x01\xad\x8a-VM\xd9\xe9\xd4\x19?K;n\xb0\x00\"\xeb\x02\xd7p\xad\xe1\xa0\xf2\x08\xf60?\"\xc3\x14\xd8\xe7\xf9\x90\x1a\xdbAU\x03`\xcdZ\x1b\x01\x84\x03\xf0\"A\xe5\xb09_\xb4K\x8b\xd2\xb7\xbcb`b-\xc8\x9c\xba\x83\xec]t:\xa7\x1d\xe1& \x93\xca\x08\x95\x86(;}\x12\\\x8f0\xbd\xa7F\xbb;\x98\x06\x8d\xbd\xb8\xe3n\x81Tj2\\\xa7\xae\xd0\xb8|E\x0c\xfer\xb5C\x82q#\xddz\xe4yYx\xac\xdc\xbb\x18K\x85\xe9\xb2`\xe8\xbaJ\x9djL\xd4gf\x0c\xc8\x01}?(u\x7f\x03\xad\xf9\xd9\xa9\x97\x93\x9c\xbe\n\xbb\xa8\x07\xf8\xbeF\x0f\x99\xdd\x00v\x06N\xbdD\xd9\xe1rE]l\x0c\xa2\x17\xf5dR\xe4\xf4\xba\xe4\xbe/\x96\xb1\xca\x8c:\xf0\xa2&#\xa4\xd3l&I\x1e\xd7w~\xcb|\x9ex\xb4T%\xf1m/\x04X\xfeq\x07\xbd\n\xf6\xfe\x83+{*\xfaw\xa5R\xa0P\xaa\xaf\xd4\xf3K\x83\x94-\x03\x9eD\x0d\x1d\xf1nc]\xf1{\x917\xc1+\xeb\x94\xf3J\xe2lW\xaa9\x8f\x9d\xa46E\xe6\xd2\xb3\xbb\xf2\xb2\x94R\xc1\xb3@5\xb7\x19*\xe4]\xaa\xe7\xad\xcb\xea\x91/y\xb8\xe8\"l\x9d\xd1\x82l8\xb5/\xb2f:l5\xd5\xe1T\xbf\xb6\x18\xa8\xd5?\xc6ty\x95\xe2L\x94\x96\xf7\xed\x9cb\xb5z\xeb\xcf\xb1_S\xb5Z\xcf$\x0e\xc6A\x0b\x1d3\xc3@\xa2\xa0\x1b\x05\x8e\xaa\x94\xb7\xd5\xfc\xa4P\xb0\x00\x12OG\"\xe5e\x18\x7fgQc\x1ev\x913\x90\x0e\x89\x84\xcbK\x1eC\xb0t\xec\xe5\xa8\x0b\x0d\x97\xfdp\xaf\xd1.=E\xd9\xfb\xfc\xc4\xb1\xc0g!\x03\x0eM>aE\xa5\x14nu\xe6<\xba\xa2\x13r[\xda\xe2<.\x12\xe3t\xc8\xa7\xa5\x9f\xe2\x8a\xf1B]&\xe9\xd9f)`\xa6\xcc\xd2/n\xba\x9fj\x9f\xc9\xfa\xed\xac\xc3\x90\x8aC\x8d1s\x9d y\x0dFB\x1eq\xee~\xc4W\xb42lW?mH\xa9.\xdd.\xba\xab\xd1\x1a%\xbf\xfa\xc8\xcf\xba\xf7\xf7\xf2*\xebb\xe0\xbdq\x8d\xb5\xb9\xac\x9a}/\xc3\x8b\x0e\xbd\xbe$\x9dT\x18\xcb\xf0\xa2\xeb\x99\xfa\xb2\x92\x8f\xc8\xa9\x137\xa3Yc\x06p\x00ob\xee\xc2\xf2\xd5MPZF\xf1\xd5\xa7\xc3\xbb#\xbc;\xd7\xb9\xa5\xa43&jC\x1eA\xdf|\xf69Zu\x80\x9d\xd2\xfe\xeb\x90\xce\xfb\xcb\xf0\xc23T$6tV\x17\xbe]\xa5\x04\xc3\x1ecMzT\xb9\xe3<\x90_\xe7\xd1\xa2\xa3\x99\xa1\x18\xcc\xefW4l|\x8eV\x1fc\x1a-\xbau\xcb\x81.\x87\xdcM\x05\xc5\x13\x82u\xeb\xafi\xe5\xd0d\x06\x03}\x7f4\xfcL:,/\xad\x18 \xae\x80R\xac\xbfkF)\xd6dw\x94b_}\x0bJ]E\x92\xf8\x87\x13w\xab\x940\xfa\x18\xa3\x9a\xb7\x92\xbc\x0d#+[\x18^\xc9NS\xa3vY^L\xa4\x8b\xaa\xb1yJ\x81\x96J\x18\x08vlo\xedL\xd4\xf3o)\xfb_0n\x1a\xc1\x87\xa2J$l\x9b\xa1\xd2L)\xfd\x14\xdf\xde\xbc \xdb\xdb9\n\xa9\xa2AC\xa1ry]\xfa\x01\xe4\xc67.\x03P\xcb \xfd\x17\xadJ\x92vY\x16Z\xf1\xc6b\xdf\xd9\xe5Zv\x85\x16\x8f\x12y\x89q:FY\xaa\x17\xfaN\x85\xc5L\xdb?\x00\xf7\x88G\xf5\xb2F?\xaa\x97!VB\xbd\xa4\xe9&o-N%/\xae\xc3\xaf\x14\xa9\xb2x\xa9\xcaKF4R\x11\xc3\xdb\xfa\x01\xbb2\xe1\xac\xea\xf6\xf6\x04\xdf\x1e\xb4\xb8\xb6\x82n\xafM\x02\xc8P\xe3y\xc0H\xdbp\x08\xef\x84\x98\xf3\x9cad\x86/\xf04\x7f\xa1\xf0\x0c\xf9/X\xdc6\"`\xa5\x00\xda\x87\xdd5\xaf\xec\xe0\xb9*SQ\x1cZ\xdd\x98\n\x19C\xd0\x91/\xed.\x86\xcd\xc3l\xfe4\x99vpt\xa1\xf32\xbb\x00\xd6e\x9a\xab\xd9\x06\xday\x04(\xb6\x17wP\x1e\x0ea\x00\xb7`\xb7\xd8h\x16\xd2%\xcd\xa4\xb3V\x05\x9f\x9b+\x7f*\x8a\xdf\x0e\xf4Uo\x8b\xd7\xf8\xc0\x9c\x16\xbf\xf6\x0d\x1b\xed{\x14\xd2o\xdf\xb9\xbd\xf7`p\xff\xf6\xdd\xdb~P\xdc\x86G\x8f`p\x176@\xe0\xf1\xe3\xc7\xb03\xb8\x1b\xc0\x9d{\x83\xfbw\xee>\xd8\xfd\xbe\xfe\xdem\xe5\xbd\xdb\x01\xdc-\x9fc:w\x8f\xc06\xdc\xbe\x7f\xef\xce\xde\x83\xbd\xc1\x83{\xb0a0\xfd\x17\xdb\xd2\xff\x12\x9f\x0d\xee\x05\xb0\xb7w\xe7\xde\xfd\xbd\xbd\xbbE\xf3\x87\xe2s\xec\xa6x\xf3v\x00\xb7\xf7\xee\xdd\xbbs\xff\xc1\x83\xdd\x07\xbe\xda\x84e\xcby*\x7f\x10c\xad\xcb\x83\x8eP\x83!\xdc\x1e\xc0w\x90\xc26<\x8f\xbd'\x147\xcd\x13\xea\x11\xdfg32w\x0e\x8e\xbbS^\\+~\x85^\xaa\x93r\xe9\xa6\x98\x11v\xd4\xdaA\xb7\xc6\x1d\xdb\xf5\xb5\xe5\xac\xa1 \x88:RX\xb9SW\x06\xb3\xbd\xf8\x9a''Sr\x01\xa8o\xbc\x8eG\x0b\x19\xe0\xfd:\x1e=c\x7f\xbf\x16&\x8b\x8c\xdd\x12\xa1\xa3\xfc\xb6\x08\xac.\xee\xab\x81C0\x84W1>\x89\xe2l\xc5s\xe3\xe3'\xef\x93<\xad\xe6\x95\xd1\x81\xac\xa6D\x12\xee\xad\xd5\xd9a\xeb\x93y\x18\xc5\xbcma\xcb\xe4\xb7\x93\x98\x86\x11F\xa5\xe3\x10\xb8\xee\x12c\xc4S\xdd)9[D\x1dB#\x0b\x01\xe5+1\xae\x84N\xed\xb3:l\xb8\xf7\xbbZ\xff\xcdT15\xcb\x02V\xe1\xae\x93a\xb5\x90&\xa4\x93\xc4( \x1a\x9b\x8bO\x03p\xa3\xaab\x93t\x14\x1a\x97\xe1\xeae\xd5\x07\xd9\x15FW\x00\x02[\xf7:,\xda\xc4\x8c\x06,x4\x82\x05\x08\xd8\xc9Uv\xeb\x87\x18\x93\x9b\xb4f\xeexj\x06\x92<\xd5\xaa}\x19\xda\xf9\xb9\xb5\x9d\x11 \x80\x8e\x9d\x1a{g \x87\xf5\xb3\xb9e\xb3mQ\x97d\\\xd0\x84\xa7aXo\xaegX;\xd7<\xacW\xf6a\xf52\xa4\x81\x15\xe3\x07\x1c\xc0O\xef\xdf\xbe\xe9\xf3G\xd1l\xcd\xd5\xb6\x82Z:\xe6\x16}f%\xc0\x87\xc6L\x9e\x86\xe6\xbe\xb6b\x10\x85G\x05\x07G\xe11\xfe\xbd\x83\xec\x9cS\x07\xcf\x1d:`\xac\xcf6\xec\xdd\xbb{\xe7\xce\xed\xbb\xdf\xdf{\x00\xdb\xe0Q\xc6\x90\xdd\xf3\xf9\x9f\x8f\x1f\xc3^\xf3\xf4\xad.\x94h\xedCT\xaf\xc2h`\x95\xcb\xe5\x95|\xb3\xad\xaeu@J\x1b\xdeV\x82\xa5\x00\xf8\xba\xf2\xd0R&\xa2G\xbe\xaf$-\xc5f\xc5}k\xcb\x97\xac\xf7\xc0\x96GC\x85\xa8\xdel\xe7\x0c\xd2\x80[\xee*1~\xd8\x7f\xeb\xe4\xdd\xed\xa1W\xb0\x9f\x15\x90\x8d\x18ds\xf8\x1f&;\xb0\xad\xc7p \xa9\xb8\x00c\xcc\xef>\x7f\x07\x0e\xe09\x9b{\xce\xd3\x91\xa2\xd5F\xfe\x8cd\xca\xd86\xf0[\xad%\x86T\xe5%\x95p\xde\xc6\x0b\x12\x9e\xb9p^\xd2,7b]\x8c5\x87\xb2oY,\xb6/op\x02 \xf5/\x01\xdc\xe8'3t\xa65~\xc6\xf3\x93(\xde\xf9\xd6s\x96\x14\x1b\xdf+\x88\x81\xb8\xc7\xe8\x80\xc8H\x13\x94\x94\xc8\xcd\xc7\xa9\xab\xcb\xdd\x92z\xbbj\xcaj\x97>\xae\xe0_\xc7\x0e|\xc7\x08\xd5\xebv\xefq<\xf9\xbf^I\xafzC\xfe\xf1,\x0el\xc8\xe6<\x86_#:w9\xa7\xa4\xcc\xa3\xf6b\xc77\xc6\xd3\xc9\x00\x81\xe6\xf8M&\xcb\xca\x9dK\x9fQ\x842=\xec\\\xea\x1b\xd4\x9bE\xdd\x96#t\\o\x0e\xbf3\x8f\x85\x18\xc4kA\x0b\xb3\xb2\x93\x9cv\xd5|:\x9a\xaa\xd3p=\x9b\x0d\x9b/s\xb89@;Q\xf2l\xf3\x12\xda\x15+\x81\xfaX\xb1$\xa8\xb7+&\x85\x17\x81\xaa\xa4\xf5\xf1\xde\x8d\xca\xf2\xf1{?V\x9a\xe6\xf7N\xa8\xe6\xe3s\xaa\xf9\xfa\x82\xd6?oBE\xe6\x97\xdb\x87\xb8 W\x04\xea\xcb\xe6\xfd\xa7\xc9bA\x10\xd2\xfbp\xac)\x90\x81\x01b_5\x0f\xd4\xb4\x92G\x1a\xe7 \x9e\x97o\xa5y\"R\x05^hGI\xf7!\xd3\xe5{\xbb\xbb\xd3O\x9f\xf2\xe9\xfd\xdd\xdd\x1d\xf6\xefl6\xfb\xf4)\xdf\xbd\xcd\x7f\xee\xde\xbe\xc7~\xce\xc8\x1e\xfe\x9c\x91\xbd\x19~3\xc5\x9f{\xbb3\xfet\x97\xf0\x7ffc\xd3\xe0\xcc\x14\xad\x100(\xc9\xa8J\xc7.\xbb\xc1i\xb0\xfb\xa0\xc6\xeb0.\xb2wx\xb1\"\x13J\xa6\x10\x16\xed\xf4\x14c\x8f\xbc\x07\x89\x96\xb0G3\xf0\x94\xf8\x88-\xc5D\xb0\xd9\xc8\xecA\x1cE\xb4\xaf\x11\x1f\xe8\x9e\x864<>\x16\xd9F\x9bX\xa9h\xf1\x84\x14[\x83\x0c\xbb&\x9a\x1aTQP\xb9]\x14\x82M\xaa\xf7yQ\xc4\xbcz\x933\xc4a\xf5f\x86ofUB4\xe9\xb6:\xb7\x1f\xe8\x97\xe7\xce\x83\x96\xe3\x18\xa8\xc8\xcb\xc1Co\x1b\x8e\xeb\xca\xe6\x15\xc6\x0eOT\xe6\x04R\x9c\x80\xf2\xd1V\xc4\xb8\xab\x9b7\xd9\x1f\xb1\x8fJay8\xc6\xec\xaf\x98\x1dA\x95\xfe(\xeb\xf2\xca'\xfe\xed\x07\xb7\xb5\xb3\x1e|_G>\x81\x94\x0f\xeei\x90r\xd0\xc4\xc7\xbd6\xd2!k\xb9pG\xe1\x99\x0e\x15\x17\x98\xb5\xf8&\xe4\xcd\x03\x17\x0b\xb2\xca\xb2\x8c\x8d\xa7s\xc4H\x9dY\x8a\x11\xa8\x15\x03\xe4\x1c\x81\xec-\xd8?sx\x0c+;]F\x9d!\x0f\xd0\xf5\x9b-bAK\xfeX\xa9-6\xc5%n\xb6u\x06C\xd8\x194G\xbd\xe62t\xe3\xfe\xa9\x00C\x08\x07|'\x82\xf4\x8e\xae\xb6\x8dy\x01fx\xfc#\xa9\x0f\x80\xff \xbc\x06\xe8\xf6\xf6\x19<\x82\x956\x11\x00\x1b\xd6\x92\x81ttf\xe0n\x8e\xb1(\xcc\x99\xc6Q\x9c\x01 \xf3\xb1\x89\x13\x18\xc2\x02\x0e \xf3\x8e\x03X\x06p\xc6\x03\x91py\xf7!\xf3\x96\x01\x1c\xe3]\xbe\xfa3\x0d?SK\xe2{b\x92\xae\xd9{'>0\x018\x8aM)\x0b\x10\xa2\x03\xfd\xb3\x93\x94\x84\x9f\x1bO\x9a\xe7\n\xeb\xe8\xd46\n\xb6e;\xd8\x0c\xf0\x93\xc4;\xc5\xd7n\xde\x04oY\xe6\x8c\x9e0\x08Q\xb9-f~\x89K\xa7<\x16\xdf\x18\xdel\xeb\xd1\x06\x050B\x02\xb4\xd0\xb8\x04\xb2\xc8\x08Nb\x89\x0bt\x8c\xfbh\"\x96\xb6\x18\xb8a8\xdf\xba \xda\x13y&N\x10t\xba-~0\xfc_\xff\x9f\xea\x876n\xc8H\xa5\xeas\xa9\xd4_\xdb\x11 /%\x11\xa7\x98&o\xbf\xa0Ml\xdb\xc5\xf0\x08\xd2\x87\xcd\x95C\xd3\xb8GG\xf1\x18\x01\xa7r\x86\xbbZ\xfeOI\xef\xd4\x91\xcc\xdf\x19\xd4y\x83\xe2pkRyQ\x91\xa98^\x9b\xf4\x1e%\x19\xa5\\S\x93\xfc\xa3*\x08\x9f\x1de\x87q\xbe\xe4\x8a\x9f&{\x92\xda\xad\x1db\xe2\x85\xb8VE\x06\xcf\xf7\x85 \xde\xae\xec\x13\xad0\xe6\x9bak.X\xcc\x00z\xec\x0fBz\xfc\xc4\x0d\x9b\xf7\xab\xfd\xe9\x8f\xb4\xcce),\x99\xf2\x15\x06Qch\x10\xeb4\x18h\x9e%m*\x97-\xd2\x8f\x93)aB3\xdek6\x81\xab\x89\xa2w\xb3\x1d\xca\x8d\xd4\xac\x1dZiG\xa3sbk\x9es\xe0\x16\x90A\xc1\xe4\x00\xd2\xfe\x0f\xf9lF\xcaS\xab\xf95\x03\xa3\xc7\x8e\xb7\xb0\x1fe\xb5\xb7Q\x8a\x8d\xccJ\"E\xe2\xa9(\x89\xee\x0f\xfc\xc2X\xdc}\xdf\x1b\x988\xda?''\xabp\xf2\xf9\xe7d\xb1\x9eE\x8b\x05\x0fY\xe9O\xc9*%\x93Z\xedG&O0\x96t\x15\xd29k}4\xc6L\xf1\xf3h1MI,\xbe,~\xb2\xe7e\xb9\xb4)\x99E1\x91\xfb\x0bqr\x91\x84S2\xed\xe9\x14\xab\xa4\xd8a\xfbz\x0e\xa2K\xd1\x19\xda_4\x1e7\x95\xd4\xe6qF\x7f\xc9\x18#\x8716Wk\x08\x83J\x02\x9b\xced\xd4 #\x0c\xea\\t\"\xee\xdf\xd1p\xcb\xb8\xdf\x92~\x94\xb1\xfd4\xe5Q\n\x95\x97\xf8f:\x80\xc8\xcbQ\xe5\xa4\xa7;a\xb7\xb1\xdf\xdd\xbd\xaaZ\x91\xf2\x83\x8d\xd1\x81\xb4]\xb9\xd8\xbe\xb74g\xaa<\xc9\xe5;Z\x87\x17\xa9!\x10\xfa\x05\x91E\x90\x8e\x85;_\xcd\xdf\x84p\x8f\x92H\x16'\xf4\xe2\x9a\xa9\xeb\xf2\xaaX0\xb8_\x97\x818\x16|\x7f\xbf\x15\xc2m\xec\xc4.\xf72\xf0\xb8\x1a\x88\x07\xf1\x17\x9cD\xa1X\xe1\xd2\xe0#H\x1e\xfa<\x85\xe8(\xf2\xc8(\xde\xde\x1e\xfbc\xbdv\x8f\x7f!\x082-h\xebU!\xa0\xd7\xd9\x0d\x1a\xd8.v\xc1^\xfd`\xe3\x8a\x8c;\xdf_\x05^bJii\x18\x8c\xc4{\x07\xc0\x90a\x1f\x12/\xaf\xb8 9M\xae\x97g\x042\x9aF\x13\xaa\xa8\xf6*^X\x0d?\x11\xe9j\x13{\xdf?\xa8\xebF\x94\xe9\x1c7E@&\xbas\x98\xdd\xfb\xbe\xf6\xe5q\xff\x1d \xa7\x8cN\xbe\xa7\xfc@YV_`\x80\xbe\xeb\xf7\x0f\xcfHL\x0f\x97\x11\xa5$mv\x10\xb6\x81Q^%\xd1\x8f2Jb\x92b\xd1M\x8er\x8d\x0ft\x96{\xb1%\xea(\x01\"\xb88\xf6\xee\xef\xfa\x82\x03h\xbe1CA\xfdc\x14\xd3\xfbH\x07\xd9\x9e\xad\x9c\x9f\xcd\x99-85\x1b\xd4\xc0\xb6\xe8G\xf1\x9c\xa4\x11\x15J\xaf\xbb\x1a\xf3\xc0\x8a\xa3\xdd\xdd:\xb1\x06\xa12\xd0 \xd5\xec\xfe\x8am\x9fU\x7fJN\xf2\xd3Er\n\x07\xca\x0f\xaf\x97\xd1\x94\x84\xcb\x9e\x0f\xfbmC\x9f\x06(\xfb\xb3!\xd4w\n\x08\xe1\x88\x81\xb2\x8eK\xe5\xd4\x98X]7\xf9\xb3\x86O\x19\xf7\xd0#i\x9a\xa4=\xc6\xbd.\x92\x8c\xb0?\xa6$\xa3i\xb2f\x7f\xae\xc2\x9c\xdfKI\x96/Iol\x8a\xd6Y\x1a\xd1%\x01\xa1i\x8e\xbd\xbd\x81\xa8a\x81b\xab\xae\xbe\xa0$\x16\x04\xa28\xa3a\x94w\x86\xe5S\xdf\x0f \x13j\x85F\xb6?\x13 OJ\xe5\xb8)\xdaS\xe1!h\x0d\"M\xb0 \xdd\x147i{ym\x8f9q \xa8\xaa\xe2{X\xae\x93^\x89\xc7_\x14xfSJ\x9e\x15\xc5\xdd\xc4\xcb\xacu[*\x15\xce\xc3J\xaa\xc4\xa0N\x04\xdd\xe2\xaa\xd1\xd8\x0f\n\x9d?l\xb3\x86\xab\xd4\x17\xf6\x8b\xaf\x0dJT\xed]RR\xae\xdd\x00\x0e\xb5\x86I\x06\xba\x1c\xeb,zH\xb3\x11\xdf\x9d\xe0\x8aP\xd0\xcf9\xe5Uy&\x85F\xc4KQ\x15\x92\xaa\xdbf\x86\x94\xa6\x19}I\x94\xb8\x83a!\x0c\xd5NK\xcc\x12\\u\xaa\xe8\x1d\xc5g\xe1\"\x9aB\x9c\xc4;\xbc\xd9[\xe2p\x98\xcc\xf3\xf8s\xcf\xb7\xc5\xd3\x18&\"\xb6\xb5\x06n9: \x06\\*A\x02\xee\x15\\L\xc2\xe0\x99\xd7\x86,\x1c\x89\xc4*?\xc6\xc8\x1f\xcf4\xff\xfa\xc7e\xa5\xf9\x9f\xa5j\xf3\xed\xcc#<]\xb1bND\xd8\x10\xa7\xe4#bn\x13\x0c%\xd7\xe3\x06N0e\xa7\xb4z\xe45\xe7\xcb\x16B,\x02\xe7(\xfby\x9c\xcd\xa3\x19\xf5|\x08g\x94\xa4@\xe2)\x10\xc6\xf5\xf7\x10\xd7\xce\x11\xedd:;\x04\x16GU\x97\xb6q\xcb\xc8\x86\x0f\xdf>\xe7M6\x88C^\x1c\x19L\xfa\x8f\x19\xb4 &>\x92\x9b\xf6<\x8d\x84\xae\xbd\x0em!\x85\xcb\xb5:\xa8\x8cw\xc0z{[\xee\x9b\xea3\x9fW\x8fb\xcbP\x1d\x90\x0e\xfb\xea\xaa\x83\xb6\xb5\xda\xa2\x02LH\xb8\xab\xdc\x04n\x92\xa2HV\x8d9,\x99.j\xa4#\x97^\xeeF\xe3\xcf\x15\x1a\xaf\x1b0)\xb8\xa8\x9b7\xe5\x1eVh\xdf\x16\xe1l\xd1\x01\x9b\x02_\xebiHC\xb6\xd4\xa8\xf7b@\xf3v\xf9\x9a:\x12E\x8e\xa4\x05M\x95\xc8\x17\xb36t\x94\xb6\x02\xb8\xff?{\xff\xbe\xdc6\x924\n\xe2\xff\x7fO\x91\xc2o\xc6\x03|\x84h\x92\xba\xd8\xa6M\xeb\x93e\xb9\xc7\xd3\xed\xcbH\xb6\xbb{\xd8\xfa\xa9!\xb2H\xa2\x05\x02l\\(\xab\xc7:\xd1gw\xcf^#\xf6\x01\xf6\x9f=o\xb0O\xb0\xb1\x11\xe7MN\xef\x03\xec+lTV\x15P(T\x01\xa0,\xf7\xec9\xdf\x87\x88nS\xa8B]\xb2\xb2\xb22\xb3\xf2r\xef\x1e\x92F\xc7e\x8bJL\x9a\x16\xfa\xe85\x87\xe7\xd2}C.\xb8\x18\xd4\x9d\x1b\xa9\nU\x17$\x85\x7f\xb8wO\xf7\xba\xe0\xfc\xaaK\xac\x91\x81\xdb\x05\x0c6to\xd7\xf6OO\xf86F\xc3\xe7%\x83\n\xc1\x88\\\x8b\xdf\xe5\n\xe7Y(\xd7\xc9\xffRj\x15u\x1a\x0f3&\x0d vdA@\x11D\xe3\x06.7N\xeb\xb6ix]\x8es\xdf\xc8\xec\x08\xf5P\x19\xd1C\x91\xebN\x1b\xa9\x80.\x02\xd25f\xf1\xa6r\xf3,Hv\\f\xb8\xa9\xc0#\xc8>\xbbl'\x98\x99\xd1qyg\x8eK\x19\xb9\x92SB\xc5\x9fC\x81 \xdfs\x8d'\x0f\x9f\xa3\xd4<\x93 (\x87\xa2z\xc4+]\xf8\xc9[/K\xca.P5]l\xf5\x8b\x94_\n\x86r\xfaT\xd7YBd)\xa9\xd5\x9c\xda\xc91\x95\xcd\xa2\x885\x86z\xb2p\xc3j\x94G_U\xac|\x84\x11<\xdcy\xf8p\xbf\xf7\xd0\xa4/95\xa2n\xae>\x7f2b\xfe\x8dU:N\xf2#\xbb\x87d\xb6B\x9dS\xa6\xf0=(\x1f\x08\xd2\xa9\x9a\x93\xe6\x05\xf1\xa6]z\x08\x88\xb2aQm\x88a%\x80(\x07\x1ac\xa2U\x8dA3!\xcb'\xf6t\x04\x1fQ K\xff\xa5\x9dloSY\xeb\x13\x1d2F\xf7*\xfd5(\xfd\xb5[\xfa\xeba\xf9\xbb}\x17\xd2NG\x9bk\xe0\x86\x9d3\x08U \x0e\xe8!\x92CS\x9e9\xa9h\x0cz\x98\x9f\xb9\xd59}\xac\x87Bn(\xd7H\x8f\xaa\xbd\xf7\xe9\xe9\xa9*+(\xd6/l\x8b\xbe\x16\xef,\xb7XtG\xf7\x0d\x9bI\xce \xb0|\x1f\xef\xfc\xc9\xa5}\xc8#/\x1eV\xdceM\xf3<\xd4\xcf\x93\x0f \xc4$-\xe4.\x18\xc3!\xbf{\xd56\xa0\xcb\x1b\xe3n!%}\x08\xb2\xe0\xaa\x86\x04\x9d\x8e\xf2I\xfe\xa4u`2u\xfc\x93\xb1\xe3\xd2\x05Ln5FY,\xc1z2\x86K\xda\x7f[\xa4\xe0!I\xc10\xea\xf6\xd7\xc2\xb6\x96\xde\xf5\x05\xa1\xab\x86\xf3@\xf5B\xcf\x92\xd94\x17m\xfb\x8a\xce\x9d\xc7Ny0\x0d\xc0\x1a\xa9\x89\xbfL@\xb84\xaer\xae/\xa1\xe0M\xfd\xc9\xa5n\x9c\xad\xfax\xd9\xbc\xc2\x02\xdb\x99\xe6M\xd7\x13\xe2\xbb^1G\xaa\xca\xb4\x1c!Q\xb3\xcd\xd1\xd1\x05u\xc9\xa4\xe5\xdclJ\xaf>\x97\x08 \x8a-l\x8b\x8e\xa7\xb4\xad\x1f\x97\x07\x99\xa7R\xe6\xe3s\x1e+\x02\x8fi\x84\xef\x9a\x0e!\xe5\xe89`]!u\xac0J\xf9\x91\"\xc4\xcf!l\xa5\xec6\xf5i\xa9\x0d\xbb\xa4\xc0\x91\x0f\xa3\x9f\"?\xb4-\xbc\x13\xe9\xf3\x9eyI\xcd\xc1%\x0b\x1a\xdc\x9f\x92\x14>\xb1EQ@\xbc\xd8F\xd9&\xd4X\x94\xd6\xa9Z\x0c\x1a\x8a\x94\xed]\xf5\x00=\x00Lu$\x97H\x91B\\\xb9@[-u\xf2,\xc8\x1c\x06\x9a.\x88\x04\xe5p\x93\xf0\x96\x05\xc5\xa2\xad\xea/\"\xc4\x13Wmt\xd5\x07\xef1qlf\x15\\\n\xdb#\xf0\x8dDI<\x88\xed\x8f\x81\xc5r\xa4\xf4\xa46\xf7\x14\x08uf>\x80\xfa\x81\x82\xb8\x91\x81\xa7\x10\x15p\x8c\x8a\x13\xbf!\xb2\xb2?\x03;c\xd6I\xc5\xe7>\x95\x8e#\x18\xf2\x1f\xe5\x85f\x9b\xc7\xc6\xe9g\xb5\xa6\x96\xe2\xa9\xb4ow:\xb1\xcb\xc1\x81\xab\xbe`Zf\xfefX\xbc!\xdd\xd4\xf3\x03\xae\xe7\xe7\x02\xbc\xa8\xecr\x08A1\xc4\xcc\xa4\x91\x93\x1f\xb3\x85\xa7xn:\x1d}xc0jFA\xb2m\x17\x13\xddFw\xa0\xaam\x0e\x085)q6\x89\xab*p|\xd2\xf5\x82 \x9a\xbc\x0f\x13oF\xdaE\xe1m\xb1+(\xca\xd7\x98\xc5\xc6l\xa7N\xa2\xd55\xaa\xde\x04\xe7c\x97\x83\xe4\x8b\xe0\xbc\x1eSaS\x9c\xf7k\xc2]\xb8M\xc1\x974\xb9\xee\xf0+~\xde\xb9\xc5 K\x19E\xc3ev\xb9{\x13\x9bp\xf4\xb9\x8c\x0c\xbb\xde\xe1\x13\x7f\n=\xd95\x93)\x98\xffd\x910\x17Ql\xc7\x024\xa5\x9dB\x14\xe2\x9d\x02Y\xae\xd2k`J\xe8?i\xe6Bd%9\x13\x02\xe4\xfb\x17\x89\xfd\x7f\xabMrb\x8c\x1dj\xd6\\)=rU\xa1\x98$\xb3\xd2,_V\xf7\\\xce\xcbVD:\x9b\xce\xdej9\xa6\x93v\"I\x8fk\xbfr\xc9\x84\xd9\x93C\xd8\xe9\xe8/\xb20\x1a\xfa8\xe4vq\xc5\xbd\xaaQY\xb6\xadJ\x0f\xf2_\xb2B'f{\xb2^C\xc0\xa5 \x8b\x9d\x9d)\x8c`\xe5\xc5 y\x19\xa2[J_\x17\"e]\xf2;+\xe1\xa0\x9e\x12b\xa43=z\xf2\xf5\xe3\xca\x0d\x9dQ@N\xdd\x98\xffyE\x93-a\xf8\xa8\"\xd3}\xfa$\xd4\x0c\xc5\x8d5\x9f\xf1\x10*\xe2;k\xc7\xcd?qku@G\xec\x92\x18\x86pl\xf3\xcblJ\x10M\xf3\xe4\x04z$TP\x8e\xd4\x9ac`\xfc\xef\xdd\x13\xbd\x98\xdaF>\x99\xa5\x13-\x83\xc6\x88>\x0b\xdb\xa2\xf5\n%\x01\xe6\x15\x11#$\xd2N\"\xd2IS\x95\x97q\xfc\x0b\xdb\xe2u\x02\x92$\x90.\xbc\x10\xaeh\x8d\xa5\x17_Zl\\\xa8\\\x15`\xc3f\x85hw \xd6\x82\xfe\x11\xe1\x95\x19\xde!\xf8l\xe1\x91\xbf\xe3R\xf94\xc2\x01[\x8e+}_R\xa9pMQ\x05\x80:\x8dRI\xe3\xa8*\xd5\x1c\xb9\xc9\xbe\xab\x08\xc2l\x05C\\A\xbe*lic~\xc4\xf7\xe0 \x17\xf0\x86\xfc\x88<0\xe8\xb5\xd0\x0e\xc7\x91u\x7f\xdb\xa8\xec\xd4\xce\"\x07\xa0aFa\xb1\x95$\x85\x07\xc7\x1f1T\xd4\x8d\xe7\xd7(\xa5\xbb\xa8\xb8\x92w\\Q\x10\x9f\xb7\"(R\xc3\x9a\x0bM\x06q\x07\xfc\x04\xc2(\x05\x7f\xb9\n\xc8\x92\x84)\xa9\xd2a\xe5\x06\xc2_\x91\xd67\x10\xb5\x01\xd5\xa2\xb6\x97\x13\xc9\x95\x8f\xae\xc6\x91d8eb\xad&^B\xa07\xd4\x96\x01:\xe0\x0b{\xac\x1af\x0f\x99 }1\xb6\xdfo\xd3\xfe\x98\xfft!\xad\xc9\x13S\xd3\x15\xbfOi\xec\x8b] 5^wI_0\xd3\xb3\x0e\x95n\xe9\xce\xc7%\xc5 \xa0\xa3?N!Z\xa5\xc9\xe8\x8f?Yn\xa9\xb6\x9e\x1f\xa3\x8b\x8c^([\xcc\x90\xb0\xcf\x15r$\x9c\"YJ\xf9\x1dP\x92N\xa3,U\xde\x908\xa6\x92;\x0c\xe1\\\xb9%\x80\xb2\xc3\xb5\xce\x88X<\x0b\xdb\x8a\xc2,\xa4\x03\xb5\xd8m\x92\x08\x88\xca.\xdf\x99\x1e%\xee.\xbc\xe4=\xd6b7\xd8\xa5\x17\x8c\x06,lk\x12\x10/\xccVB\xa7\xb6\x8c\xd6\xdc\xf6\x8d\xc4vn\x1e:\xd7\x96\xce\xfc\xd0O\x16\x96\x0bKm\xf14\xf6\xfc\xd0r!\xd0\x96\x8a\xfdy\xad-\xe5\xb3saB\x89G\xf5\xe3\x90\x92\xeaYM\xd9\xb9\xb6\x8cS\x9b\xb5\xe3\xa2\x85/\xde\x82E\xb2\x96\x10\xaf\xf5\xcf\xafb?-]\xbcn\xa9/\x91\x08\xe6\x9f\x04\xfa\xa8\xf8\xe6\xf5\x9d\x19\xaf\xa2qm\x913d\x86{\xd3\xc68P\x808^2\x18\x91x_\xe4\x11\xc2n\x14N\x88\x00\x0dZ\xbeu\xa3\xb0\x04e=\x9e\x07\x8d\x14\x174v\x15Mrz;\x01B<|\xb3\xbe \x9fs|\x92\xd5\xba\x8e\xa2\xe5\xc5\xf3\xa7\xf8{{\xbb8\xcf\xca\xb58\xfc\x8c+\x8cQ1m\x886~(h\xc1\x7fc\xeb\x84-\x06\xe3b\x17\xe8A\x8cx\xa8\xd1-\xac\xb9+9-3#\xd2\xda\x9c\xab\x171\x89M\xd0\x05\xa1\x12\xe7\xd4*\xcd\xadq(\xfa\xb2\x83\xdd\xees\xa9\\\"\x97\xe8}\xc4\x89\xbb\xf0<.Ux\n}Z\x89\x87_=\xb1\x0b\xfa\xcf\xe3t\xae\x04\x135\xf3\x82\x84\x00v\x0b1IVQ\x98\x10\x17\x84\xady\xa8^\xc0\x96\x96\xb8\xa6\xb4\xd3\xe1\x93C.\xa4\x8b\xedm\xba\x1b\xaf\x1b\x80(H\x15q\\8\xb7\x1b\xa9\x19C8\x86`\xec=;\x17\x14\xc6D\x17L\xb1f\x90s\xe3\xb6j \xcc\xe7Z\nb\xeehYO\x9bx\xdb\x8d\xc7\xc5\xa6\xdd\x9e\xd7u[\x1cva\x97\xfdnw\xf6\x0by\x96\xed\xc4\x9c\xf8k\xbbi{;\x00P T%\x1b\xfb\xaeb\xb2\"\xe1T\x00\xa5\x08P\xae\x96\xb0h\xcd5*\xf4\xee9\x9a\xf0%\x0cy\xf8\x1fcr\x06\x07\x90\xd9\xf2\x0b\xf4n\x92\xfe.[d\x95>\x1d\xc18tK\xaf\xce\xb0\x8a\x08\x1e\xad'x\x12*\x8b\x03\x9b\x1d(e\xfe\x80\xbdS\xb8\x02\x86\xf4\xfc\x9c 1f\xa1 \xb4\xfcn\x0fY\xb1\xe2F.\xe4\xb7y\xb6S\xb9\xd4\xaf\x18\xc1T\x18\xf3Z\x9d\xd5&*\x03\xf3\xda\x17L\xd4P\xbdL\x15\x8f\xc6\xc9\xa5\x90\xc3I\x89\xa3\x17\xd8\xa1\x0d_O?\xea\xd7|T0\x97\xbc\x9c\x07\xccfV\x1cBb\xe4exT\x96\x1d3H\xc5+\xa3t\n\xf6\xb95\xbcX\xc4\x9c]Hy\xc4YnH\xaf\x1f\xf8Vmp\xd2\xb8\x18\x98Y\x83\xedCy\xe6\xfa\xcd\xb2\xe9\xac\xf4\xad\xe4\x8a4\x16\xe7\x1a\"x\x02\xfec\x88:\x1d\x07\xe2qtf\x82A\xad\xc2\xb6b8\x04Z2\xb5\xe61\xdcNlR\x9c\x9f5:8D\x89LZl\xfeY\x97eg\xb03\x17\x9d\x97K\x80\xd8F\xc9\xa7\x8aM\x9c\xf9\x11 \xe4\xbf\xc6\xbd3i\xf7\x9a\x16\xbensF\x95\x1b\xd7:\x899)}Y\xb8Ap\xc3\x0d=\x861\x8a\xce8\x13'gm\xcc\x06h\xb9\xeaA\x10\x18\x8dRY\x84,)lVD\xfb\xf5\xb8\xdcJ\xa8\x07\xbc+*+\x91c\x8d\xcb\x11\xdd\xb9\xba\xf7\xecB\xa4\xa2\xc9\x89\x0d\x0eM\xb1\xa4\xec\x8a%}\xceq\xae<\x94\x04\x85K\xbe\xa6\x9b\x1c\xabu\xeb\xefM\xf3\x93\x0eF\nf\xb8\x8a\xaa\x18m;Z\xc4cL\xdb\x02:?s\x95\xa3\xa68eR\x85\xddo\xc4T\xe0f)eC\x13a|T1?)\xdf@\xbc4GP.\xa2\x9c\xeb\xec\x0c\x15=\x14\xe5n\x9b\x00U\xa8Z\xe9.b\x1c6\xf0\xc92\x1dG\xcd\x16q\xdc\x96\xfb\x08\x0fnd\xde\x0d\x16\x94\xca9R(\xe6\xf8W-\xa6{\x15{\xab\x8dN\xf7\x9a\x1b\x80\xb6g\x7fl8\"\xf2\xe3\xc1\x07?\xe4\xa2\x1d\xd7B4\x89\xbd\x94\x9c,l\x8b\xcefE\xa6\xc0\x85\xfb\xb0\xec/!t\xf1\xf5\x92s\xca,\x1f\xda\xb9A\xf1\xb3[\xbe>0i\xcd\xc0x\x8dI$S\xed*\xf2\xe6\x9a\x04\xce[\xe7\xb00&\x1e\x94!!\x84\xd3\x12(l\xbf4G&\xa7\xfa\x14]\xb6B\xc5o$W*\xa3\xa6^\xb2\xde\xf7\x99Ho\xab\x1f`=a\x95\"\xc4~\x9c\x9f\xef0\xa2+t\xe3\xb9 \xa9\xdb\xb2\x0e\xdaLJ>S\x14\xbb\xc6\xfe\x19\x94\xe3\xd2JR\x01/\xb4EE \xa9\x9b\xdc\xed\x1b\xd1K\xaa\x9bR\xe6\x9f\x87\x81\xadM\xe5\x07\x065\x86\xaf\xbb.\xd7qF\xf3\xfc\x8a\x11\x19$D\x82\xf98:\x93vz\xf7\xc2\x0f\xa7\x9c\xba\xd1\xa2\x1a\x8f\x9cT\xf6\xa6l\x86\x8c\x84B\xe7\xfc\xfe\x908\xc2\xfb;\x16\x14\xa7\x10#\xaa\x13\xd5\xd3\x9e6\xee&\x82\x84\x94|\xbb\x9b\xa3\xd8hL\xaa6rM\xd1Q\xd8\xd2\xc5Qu\x8e\xe5\xd9\xa1\xdf\xc7\xf9,\x8e\x96\xf4T\x86\x11\xbc\xfb\xa7\xa2\xac\x1c1\xdb\xc50\xd8\xed\x02g\x97bpW\xa3M\xb4iB\x1fNc]\x84\xbaz\xa4\x8dI\xeakO\xea\x1a%\xcb\x8dv\xd0\xe5\xcf\xb9\x1bK\x0b\xbb\xa3[_\xf5@\x93\x1bQMd\x01\xfc\xac\xa2\x9c\xd6\xbc.Z3\xee9t\xb2\xce\x98\x9b\xde\x01\xfa\xe0\x14\xc6\x9b\xed\xfbA8\x97\xb8\xd9\x9c\xe7\xf1\x85\xb8 |,\xd0Z\xc7\x00\x91F\xcf&\xe9\xde\xb420\xbb\x16\x02\xe5\x8f\xf9k;\x8f(\xee\xb6Ppo\xf1$\\\x07\x94-\x97'\x18\xb2\xd9\x85\xbaA\xa9/\xcb\xb0\xc2A\xe1\xed+\x9e\xccZu\x96A\xcc*\xfd\x99;d5\xd0\x92[\xc3\xbd\xafg\xef\xe2j\xf4\x85\x8a\x0b\xcd\xb4\xb6\x05%\xaa\xc3\xe7,o_\xfb\xadf\x04\x95ru\n\xe5\nL\x95U\xdf\x86\xb2\xa8\xaaO\x95B~>?\xf6\x9f\xec\xa4\xc8\xb0\x12#H\x84\xec\xd4\x9a\xca\xe1\xf0\x13\x12\xcch\x15\xfc\xf7\xd3'\xb8\xf2\xc3itU\xa5/\xbe>\xb272\x12&_&}\x00\x7f\xc81\xcd\x9f\x16\xaeS\xdds4\xc4~\x816\xc8\x06\xf0\x00\xf2\x9a I\xdf\xf9K\x12eiK)'$W\x10\xd9>;\xc0\x8a\xaf1\x1cB\xc1\xff\xb8\x80\x03\xe0\x85\x15\xb5\x05\xf6\xfb2LI\xbc\xf6\x82[v,>\xd7\xf7,J5]\xcb#C\xfdK\xe9\x83F\xf1\x873\xf9\xa8\x88\xad&\x96\x8fJ\xda\xd2\x98\xcc\x94\xec/\xec\x8d<_\xe5#l\xb7 $\xa55f\x10\x89\xdd\x1c\x0f4s&a\x1c\x05A\x1b\xfd\x90\x0c\x1d;\xa5\xcd\x05\x84\xff\xf9r\x8a\xd2\x87\xfc\xaa\x8a_\xb4\xb7,\xd4\xf4w'\x9d\xa9\xd6p\xb4\xb7s\x84\xf3\xe1$\xf5\xd7\xe8'\xda\xf5\xc4\xcf\xcf\xe9\\\x7f?\xc8/R\xa5\xaa\x1a\x8dV\x91bQm\x15FPl\x99\xe6\\ri\xf7<\n\xc5\xe4\xd9\x9dD\xfe\xb7\xee\xb2G\xe3q\xe5bD\xab}G\xec\xb9\xe5\x92L}\x16\x9b\xa5\x99\x84\x95\xbfP\xb2e\xb2\x01\xa95(\x0e\xe6\xac\x8b\\\x98\xef\xbc\x0d\x87\xa0|\xa3\x1dD\xb5Ni\x18\xe5\xe2\xe2|\xb8M\xde\x9a&\xde\xd9\x14P\xcdGU\xa2\x9f\xc8Q\x88\xea\xd1S\xd8#\xe1\x8d\x82eA\x07R~\xab\x99F\xdfDW,W\x8em\xb4\xfeF\x13\"kA>Zz\xd3\x1eV\x8eq\x90\x1a*l\xd7\xd7\xf0\x92\x89\xef\xd7\xd6\xb8\xf0C/\xbe\xae\xaf\xe2%d\x7f\xb7~$\x93d\xd0Ta\xbb\xa1F:\xeb\xef\x07\xa4\xa9\xcevc\xa5\xd8\xbb2\x94\x83\xe4\x9fm\xc8+\xd9hq\x95\xfbwWwxys\x1b\xf2\xfc\xe8\x18\x19Ee+\x90\x0b\xf7\x07i\xeb\x07.(`3\xff.\xae\xa3\xf8T\x18\x9e5\\\x03\x91\xc7\x8f\x9db`u\xca\x97F\xdc\x85V\xf8+\x9e\x16\x83\x846h\x08\xadP\x11Z\xa2#\xb4EI\xf1H\xd3\xc0\xdaM3 \xbc\xd4\x0f\xfb\x8d\xbd\xd7\xee^\xf1\x88\xbey\x9bM]\xd7nwhEZ\xa0\x05\x8d\x13\x8fP\xe9\x98\x87\xd5\xb8'A8X\xd4\x87\xd8\x12\x0f\xa5\xd96'\xdaez\xcdbQl\xf5\xb4\x9f\xeb4\x84\xba{I\xbc/\x13\xd12\xb6\xca\xc1\xc5\xed\xd213\x1a\xf1X\x85,\xbdQ\xd5'\xc4z\x1f^\x86\xd1U\x08\x82\n\x0c\x81\x0d\xdb\xa8\xc7`\x07l\x99\x12\x15a\x1d\xf2\xb8t:\x8e\xab\x05\xdac#)\xf9(\x92\xc6\xb06)\xe74a\xa0\xd3Dh\x04\xb3\x89k#\xa9\xc0\x0ef~\x10|\xe3\xa1\x96\xce\xbb}/\xb5X-\xcfkV\x9aW\xc0z\xdc\xd9\xa8\xc7Z\x84\x95U\x98\xcc\xfek\x04+\x96f\xdc\x96:^\x98$g\x10\xe3\x0d\xbc$}MP\xce\x16\x81\x11\xe9\xabwQ\x8a\x82\x92\xfc\xeeh\xe11\x8f:\xd9\x1b\xb0\xa4\x0c\xcc\x7f\xe6gUV\x13\xd6\xfa\xc9\x08\xfa\x83\x07\"c\x03<}\n{0\x1a\xc1>\x1c\xc0@\xbc\xd9\xa5o\xfa\xbbp\x00;\xe2\xd5\x0e}\xb5\xd3\x83\x03\xd8\x15\xaf\xf6\xe9\xab\x01\x1c\xc0v\x1f\x86\xb0=\xa8\x1d\x92g8>\x852\xb0\x98\xfev\x19DU!\x7f\x13\x07h\xb4;\x19<\xa4{\xd9\xee?\x1a\xc0=L\x0f\xebH\xb6L\xe5\xa5\xb0\xfe\x9f\xff\xeb\xff4PY\xf40*\xaas{A\xc91\xac_w\xb4\xea\x06\xd27\x0d\xa4_;\x10\xd0\x0df\xa0\x0c\x06\xffV;\x1c\x98:\x1c\xf0\x0e\xdb\x13O\xae\x0f}\xacC2I\x90\x08\xd1\xbd~\xa8`\xfd\x13\xc9\xd7\x0c\xa3y\xa1Wf \xe5qY\xe5}@?t\x94}\x91\xa7l+\xf3[nuS\xb1\xa8`\xb5\x1d\x89\xcb4y?\xe7#\xde\x96\x02\xa0\xd5\xef\xbdD\xab\x01\xa0\xebe\xa7\x85'\x10q0!\xf9\x08\x1dWjt\xf2\xc5\x0cs\xf2n\xb6\"\xa9\x0f\x03\x80\x97\x91\x93\x85\x17\x1fESr\x98\xda\x92\x07\xac\x1aWZ<\xb4\xd1\x98J\xdd{{\x83G\xfb\x80f\xf9OF\xb0\xb7\xbf\xd3\x7fT2\xf8Rp\xa9B\xd0v\x95\x85\xe3)\x9a\xc7\x12D\x06gj\x9d~\xa5N\xff\xcc\x85\xb0pS\xd7\xe6\xd9\xae\xbc\xd1\x9bxh\x89\xa32\x93\xbef&\x83\xe6\x99\xf41\xe5\x85v\xe1\n4C\xa8\xd7\"R]\xaa:\x90\xef\xc3\x0f\xa4\x03\x89]~X\n\xe5@jQ\xdaH\x0d\xf7@fr\\\xc3\xbdtL\x9bS\x82@\xaf\x1a\x0eL\xb7\x12\xa4\x1623\xed\x16\x13\xe3\xafl\xb3\x1d-\x91\xeaq_\x93\x83\xd2ZqV\x83\xbb\x9d\xd9*F\xec\xc06\xde\x94\xa8X\xb1#\xec\xd1B\xb1\x1a\xb5\xf8Qj\xfa\xb3\xf6\x83\xe3\x1a\x86_\xc2\xb4\xb0\x81f\x05w\x87j\xda\xadtP\x8b\x1d\xf9\xa0{.\x02X\xc1\xd4a\x036\xac\xcc\xcc\x8e\xe1|\xa8\x07\xc6\xa2\x86yj\x82\x85\xd4\xb0\xf8E\xca\xd1\xdcX\xc6\xc7\xa8d\x1b\xe4\xa7\xf5\xc2\x7faq\x9b\x9fA\xb9`\xa8\x80\x1f\x97\xcdU\xdd\x9e[\xed\x7f\xbfHB\x87\x9e\x989k&\x98x&\xe7\x18:\x06\xd9\xba\xf12u\xbd\x84\x02>\x1e}\xae\x9a\xdeJ4\xb2\xbd\x8d\x83\xa1\xab\xb7=`bv\xdd\xc0\x90\xb1\x92F\xe6\xb4\x1e\xc3\xe0\xf7\x1f\x03o\x0bC\xef\x8cD\xca\xbc\xf2\xa8v\xf4\xa3\x12\x9d\x97\xb7\x8f\xd9\xb0\x98\xe9 \xcb[\xbeJ\x15E\xb8~\xf5\xeb\xca\xf9\x16V\xa9\x8c\x1c\x9e\x01\xb6\xc1\x0e+\x94[\xbf1\xb4,x\x8f\xf9M\xeb\x86FKL\x1bFR/\xd4S\xcf\xf2v|\xa2!\xa4\xfaq\xd5\xf3Bw*\xa0(+p\xeb\xe1\x14bLy\xd2\x92\x04\xa3\x9cR\xb7\xba\x99)e?/^\x17\x176\x035y\x1f\xcfq\xae\xcf\xcb\xac\xd1\xae#\n#\x04J\xd9T\xca9\x13\xa2j\xda\xf0\x92\xc9}n\x8b\x91\xc6^\x98\xcc\xa2x\xc9\x8c1tn1\x18\x17\xfc\x9d\xa8\xd7\xc2r\nT\xaeY\xe9E/T\x85\xdd\xbcV\xbd\x1fG!\xb5\xe1y3\xb90\x0bi[qY\x1c3\x06\x0e`\xcc\x06\x85\xd0\x857\xb9\x14qj\x96Y\x90\xfa\xab\x80@\xea/Ib\x8cw/\x06\xb2\xc8\xc2\xcb\xdcG%\x1f]\xf1\x86\xa7\xec*L\xadx\x1aWW\x93O[<\xe2\x80apl\xe1}\xe0+\x86;\xb6_ k.\xecc\xe1 \xf8\x9a\xa8\x1bEW\xb6Z\\\xe9\xf1\xa6\xb0\x01\xd58\xdd\xd1\x8e%\xc4\xd1\xd9H\xcak\xae\xaf\xc1\xc1\xc8\x82]\x98\x8a)\xe8kk\x14\xdafZ\xa9|\\\xe8\xad\x97t\x0154\xd5\xa4P\x1e\xb5\x89E\xf2\x89J\x06O\xc5\xbb\x91\\\xc3\x9cgd\x16d\xc9Bj\x80\xfd=\x12%\xc2\xe4\x1e\x0d\xb6W1\xc9\x1d\xf5\xb2&\xbd\xa8\x8e\x9d\x12\xbe\x18e<\xd3\x8fL\x1a\xcd\x81\xfcW)g\x9a\x96\x19\xf3r\xdaZ^\x14\xcaDz\x9c\\\x15\xfb\xa7~\x1e\x9e\x89\xeb+\xdd\xa4hLH\xabLB)\xb1`Z\xc4\xba\xaf\x84 \x10\xe7e\xe5\x9e\xe3\xc8\x0b\x02\xba\x0d\x8bE\x9eF!\x81\xab\x05 \xe1*\xcf\xa8\xb45\x82\x9e\xa5\xe9?U\x89f\x89:n\xd8]\x92\xfaAP\xdajj\x979d4\xbe\x00\x85\xcc\xe6W\xf2\xaa\xb9\xd2;;b\xdcJ\xb4adw\x99@\xab\x93.Q\x90\xdc\xe9\xa9\xdc~\xc5\x97\xac\x18yy0\xa5\xfd\xd6$(T\x00\\|m\x080c\xec\xb6*\xc9\xea\xbb,{\x9a\xd5\x9d\x99(\x9b\xc8\x07\x0c\x85J\xe9\x10J\xf37\xd2m;qa+V\x10I/\x1e\xb5>r\xecXY#<_\xbe\xd0\x89sc\x04\xb1\xeaYP\x7f\xa9R\x0b\xdb\xdc\xe7\x84\xc8\x10\xc5[\x04\x01p\x16B\xb8\xc4\xae`\x0c&\x95\x81\xe9U\xb8,[n\xd4\x15M\x16\xfc/\xe9\x96\xb9-f@\\\xdd\x06=#$Z\xe6i\x90\xf93\x95Q\xac\xb6\xa6l\xb1z{\x0c\x96{=\xe4D\x969\x90\xab\xc4]!.\xb7b\xb5%\x9eZ\x97\x89\x17sH\xcaBQ\x14\x1f{\x93E\xb9\xa2\x94\xe2|\x12\x93\x12.\xb4K\x8b+\xf0*bDSKU\xb9\x0din3\xda\x04@Lgz\xef\xde\x06\x8c\xb6\x9e\x15DK\x97\x10\xbd\xd9\x1c \x18\x04\x10\xd2qxV\xa9|c\xf3\xb4\xb8\x18\xc9X]+\xb7\xa4h\x84\xdb.\x97\x16\x9e\x0e\xfc\xfd3\x9a\x940`\xc7iZ93\xcd\xf5\xf5\xab\x96\xbc\xf6^\xdb\x98X\x16\x95\x18\x84\xa9/\xf0\xe2\xee\xde=\xae\xad\xd8\xc6\xc4\x0c>\x86\xb6\x1e\xe6\x8e\x95x#\xd4\x9c\x1d\xb9\xd5\x1c\xcb\xfe7\xbb\x0f\x06\x8eM\x87\xc4\x91\xd6K\x12\x7f\x1e\xc2\x10\x8bv>\xd7\xa2\xd0\x05\xdf\xc5Tr.x.\xcf\xe6:P\x13\xa4N\x9aH\x0b\xe8\xee+\xe8#\xe7\xcc\x8f\xaf\x95\xaf\xf4\xaeY\x13\x17x\x08@\xad\x07\xd6$\ng\xfe<\xab\xc9$.\x985\xbdl\xd1\xe4\xc1\xb5\xf6\x82\x8c\x0cA1\x02\x96\xd6\x15&^n>V\x9cN\xec\xcec\"]\xe5\xc6\x15\xc9\xba~\xe8\xe6a\x97\x87\\\x8c\x84\xc55\xd4B\xd1\xdd8\xa12\xa5h J\xa6\xb9*k\xc4s\x06\xa60\xa4\x87>B\x86\xb1\x14\xe8\xa7U\xacR,_\xaa\xe0m\x11\xcfn\xfc\xe8\xa1\xe3b:\xd4\xf1\x19\xcbl\xdd@U]\x9d\x02\x9cr>\xde8=\xcb\x99y\xfaG\xb9\n\x92=\x82\xfd<\x86t{\xfb\xb1#|\\-\xcf\x82\x0e\xd8\x9dN\xe8\x14\x1a\xa8\x9d}U\xae\x97\xf4(\xc2i\xc2\xb6f!K\x98\x8bE\xb9\xc4a\xd3\x06 \x0fq\xef\x82\xe5@\x87\xfe\xef\xef\xa2\x8dY(\xbc5\xf1\xec,\xdc\x06\x1e\xc3\xcd\xe32\xcb\xd8z\x8d4\x14\x1f\xe5\x1b\xc3\x9a\x15b\x8f\xc2\xe7\xe0\xa9E\x9c\x8a\xea\xa1\xba7\xe9\x93\xd9\xe8\nU\xde z\xf4\x07\xdd\xed\xf2\xcd\xe7\x12'&r\xe8\xb2\xad\xeb\x91\xbeTM:\xe7\xe7$}s\x15\x8aj\xcfI2\x89\xfdU\x1a)\xf6\xd3\x99\xe9\x83\xd7\xdeR\x0dh\xe2\x99\xea\x9e^//\xa2 iq2i\xd7\x98\x91`~4\xc76Q\xf1\x14\xe5D\xb9\x06\x86\x18\xc8\xec\xc4\x11\xccN!~kC\x0d\xeaW\x1a\x9b\xb6\x99\x87M\xc4\xc2\x14j\x14?\xf2\xd2k\x9b@\xee\xb2\xfa]\x19\x81L\xaa\x0e\x0f0\x82\xdb\x7fY3\x91\xed{r ]/g\xffS\xb9\x95\xcf\xdc\x15}\x1d\xff\x1b\xda\x0fUUs\xa4w\x03\xa3\xdc\xe9mq\x94\x9ek\x9a,xt\xfb\xe4\xc4n<8\xd3B!Fj\x85\x0b$w\xc4\xd8\x10O\xb7\x1a\xe18>C\x07'\xe1H\x91\xa1<\"\xbe\xa8\xacH\xd8\x00g\xb9\x8fv\xfc>\x1f\xfa\xd6\x16W\xf6\xb1\xf0\x03\xe5\x14r\x9f>\x19\xb4d\xc8\xd5\x9b\xf4\x83\x0b\xd24\xdaVX\xa1\xe7\xa3\x88\x0b\xd6\xf99I^E\xd3\x0c\x0dN\xd4\xa5D>G\x16+Yt!/N\xc8\xf7\xde28BnE\x93\x16\x7f]D\x88\x0e\xed\xbdAO\x83q\xc8\xfc\xb0\x80\x0dq\xb7\x18\x04\x1c@\x0cC\xcd\"\x0bSS5\\p\xd1\xa9n`\xb5\xa8\xaa'\x0f|-#\x91\xe3\xaf\x9bx3\xf2M\xe4M+ \xacjID\xce3\xb1\xd0\xc8q|\x88\x03I\xba!\xb9zG\x89@x\x1c\xc7v\xa1IB*\xad\x1c\x97\x1bz\x916\x11\x84\x9d\x87\x06q\x88\x8e\"\xb6\xcbs\xf0\xc3I\x90M\xc9\x10\xc6\xa1=\xe8\xed8g\x12\x12\xfcC\x07\xd3\x1f\x0c\x9c3\x85\xb0-W\x81?\xf1S,\xdf\x1b<\xc0P\x06{\x83\x87\xfc\xdfG\xec\xdf\x9d\xde\x1dM\xe2N7S\x10y\xcc[\x99t\xdf\xbd\xf9\xea\xabo\x8e\xcf\x8f\xde\xbc~\xf1\xf2\xabS|\xf5\xfe\xed\xf3\xc3w\xf2\xab\xda\x9d6\xe8\xed\xfdN;-[M\xbd\xaa\xf6\xd2@\x165\x07\xf3\xf5\x8a\x0c!\xab\x9e\x10+\xef\x9a\x02d\x08v\xcf-\xb6\xa0c\xff\xfdF\xd5\xe2\x02(\x9a?\xd2M\xa3\xf9<\xa87\x0ej\x18\x91&\xabJ>\xa2\xd4\xd4uy12\xfd\xbaYL\xb2K\xce\x19\xe4\xac*\xaf\xa8Y\xff\xfc#63K^\x81\x1cod\xad\x89n\xaeU\xad\n|\x1eA!2\x12\x8dJ\x0ef%l\xec\xef\xa9\x0c\xc8\x97\xc2F^\xa7\x85b'\xa7\xca~\xc8\xe2:\x94\xd1\x8c}U\x1d\x04\xdf\xbca\x83\xae@\xa3i\xd8H\x17\xa1\x18\xac\xa0\xa9\x16\x8b\xde\x19\xba\x9br\x87\x94\x1a\x10\xf9\x1c\x18\xdeQy\xa1\x8f\xb7\">\xdd\xd1\xd6%\xb9N\x90\x91&\xdc\xa3\xc2\xc2\x1d\\\xbc\xc3\xe47C\x16\x14w\x1c\x9e\x9d\x95t.\xa22\xdeZ\x1e\ny\x05%\x0c\x0e\xe9\xd8f]\xa0\x91\x86T\x1d\xc3\xd0\xa7\xb1O\xff\xd2\xe2O\xa3haT}7~\xb9\xd1\x01\xcc \x9a&\x18\xde4\n))\xda2\x1ew\xb7\x1c\x9d:4\xbf\x1cJyK\x96\x87\x98\x90\xfc\xeezE8o\x0c\x1d\xb0\xc4\xed\xaa\x977\xbae\xba\xafn\x18\xec\x86\x9b\xf8\x91~\x0f\xef\xedj\xb7\xf0#\x95\x05\xcbP\x18.\x1a\x0e\xed\xc1\xbecg\x94\xf2\xec;\xb6\xe5\xa7$\xf6\xd2(\xa6\xe8\xd3t\x94\xa7r\xf0\xb2\x1b\xa7F;\xa8\xbb\xba.h&\x8c \xa6#\xa8\xe2EH>\xa6t\x13i\x12\x91\xd3\xdd\x80m\xe3b\xbc\xcc\x87\xbd\x19\xb0%\xf5\x84\n?N\x1a\x1fh\xc1\xba\xdb3\x93\xc0=\xe9\xea\xa3\xc4\x94\xfb$i\xca%\xe8W\x14\x9dEf-\x17\xd7.B}\x04\xe5\xd02N\x81\x98\x06\xae\xf7\x18\x85\xbd\x07;\xbb;\xbc\x7fV\x1f;\xa2\xc8\x82\xce\xdf\xf4-\xf3\xc2L\\\xecd@\xcb2\xd8\xe6\xcdt\xe88\xb7\xf9\xa0\x9e<\x81~\xcf\x81\x0e\xec\xef\xed\xed\xec\xdf\xcd\xa6\xaf\x1c\xa9\xfc\xe0\x18\xf4\x8dg\xea\xc0\xe9\xceI*\x0e\xf9\xe6[Y\xa4\xf3\xeaIjd\xf1H\x03\x8b\x87<\xd1E@L\x0c^l\x13n{\xe4\xdcz'\xf6w\xf4\xd7#\nOV\xa10(\xa4\xb5\x03\xdb+\x92.\xa2z\x034\xc9\x8dl\x0b\xa3\xcd\x0b\x9a:\xf6\xcf0\xc0\xc5\xd8\xfa\x97\x7f\xc9\x87\x83\xaf\xa21\xa5Ng\x9b\xcd\x9b\xae\xf6\x0eJ\xbb\xfd\x1d&\xf5\x0evv\xf9\xbfLM:\xd8ej\xd2\xc1^\xaf\"\x0e\xf7\x1f9B\x14o\xd3Y#C\xad\xc3G\x99E\xf6\xc7\xa1\xddwlK\xdc\xc6\xbf\xf3\xe6\x96s\x06#\xb0~\xc1L\x8d\x1d\xba\xcf\xb7F`\x8d\xd9E\x0b\xfcrf1\x1d\xc1N\xcf\xe1VK\xa5\xe8\xbd\xa2\xa1\xba\xb0\xdd\x1c\xf2y\x9b\x16t\xe89\x80\x01L;`\x9d\x95\x9c\xe3\xb6\xda\xe9\x07d0n\x85\xf6\xee\x80%G\n\xed\xdd\x1d\xc7\x1cx\x8d\x8f\xe4\x01\x9d\xa2^\xd7\x1c\xda\x8f\x1e9\xb65\xf5\xd7Tl\xb0<\xad\x19\xccF\x81\x86\x1fT\n\xd5\x9b\xcc\xaeW\x00\xa0\xd5\xe4%]\xbf\x89\xd0\xd4\xb3\xe6\xe8\xaa\x81'\xb1\xdeV\x813\xe9~\x95\xea\x10\xd3\x95\x9a]\x8e\x13\xc0\x96#\xe6\xb1\xc7\x05I)|\xd1j\xe9\x99\xda(\xca\xd4of\x9b\xb7\xb9\xf5e\x86\xab\x92X\xeb\xc8\x0b\xff\x94\xc2$\n\xd7$N\x81\xa3y\x1a\xc1*\xf6\x97>\x06+\xc4)l*\xd25m\xf7\x81\xe1\xfc\xe9\xef\xe8%\xe8~O\xe5_\xaa\"t\xff\x01\x17\xa1\xfb\xff\xaaE\xe8\x87\x86\x83]}\xcf\x01\xbb\xab\x03,\x05x\xcf\xb1\xad\x97\xc7\xe7oO\xde\xbc{\xa3\x1ez\x9e\xaa\x9e*\x17\xab\xda\xab\n\x15U\xba/F\x8c>?\xf9\xe1>/b9FxXV&\x1e\xa7\xdd\x17\x8f!F\x8b\xb3) HJ\xe4\xac7\xe3h\x1c\x9fir\xa6\n.W\x8d\xed\xaa\xa7\xa3%c\xe5rP\xc7v\xa6b\xbc\xbb\xdc\xca\x1d\xefF<\x05\xdd\xd1\x80\x1b\xd8\x0d\xad\xe7B\xb9\x98{\xe3\x8c3\xb4'\xc6\xec\x93hzVX\xc0\x8c$}\xac\xcf\xb2\x19\xdf\x16\xf1\xf7\x0c\x14\xc5\x80\xf75\x1c\x1b=\x92\xff5(\x8f\xf6\xf4\xa4b_wEG\x99\xc2\xbeco\xb5\xa3\x16\xb78\xd99\x80<.5T\xe9\x00\x82\xa8\xfaz\xc2\xcc7\xab\x10Gsv\xcfaJ\xa2\x8c\x19Z{\x08\x8b{\xf7`\"\xfc\xb44\x1f>\x96\xa3@\xe1j\xe0w\x94,\xe0Z\xb0d!\xff.\xb2'\xd8\xda\xa7OEk\xfa\x05\x9a\xdcv\x81vM<\x12\xb7\xe3\xb3~\xb1\x1c\xba\xe1\x90\x01|\x99\x1c\xe7\xf7\x8ev\xaf\xc0\xe0\x12\xc2\x9a\x18\\\xce\nS.#f\x96\xec)&\x10Km\xcb\xa2\xfb6\xb7\xfa\xbf\xedT*H\xc5pmWg\x9c@ \xb6I\xb5\xdb8\x95\x92^\xe2\xdf\xf4\x94\xff\x15\xe9)\x0d\xe4j\xb0\xa3\xfa\x1dD-8\x18\xc9j7?\xb1j\xcf\xd19I\xdf\x8a\x8aof\xf5A\x92s\x90pZF\xf7\x94\x0b\x11n\xabqt\x06C\x93i\xdf$\n\x934\xce&i\xc4r\xe3\x83\xe4\xb7_.=(\xff-\x1d\xbb\xc3\xf2g\x9c\x08\x1c@\x06\x8aG\xf3\x86\xe0\xef\xdfzK\xcaV\xc7\x9b\xf5\x9e\x1f\x9d\xc2w\x07\xfdH\xf3\x03\xdc\x15\xda\x97\x9e\xe3\xf2\x93h\x8f\x1f\xad(\x0e\x08\xcf\x94\xdd]\xc7\xc5\xfdLe\x03\x177\xed\xa4,\"\x04\xecUI\xb9\xc0\xf2\x82'\xe2~wQq\xcc8:==\xc9XN\xbe\xaa\x19\xc7\xd1\xe9\xe9)eH\x9f\x93I\xe0\xc5\x1e\x9da\xd5E\xe3\xe8\xf4\xf4\x03\x15\xafx\x13ji\xe0\x930=!\x93T_\xfe\xfc\xcd\xab\xdaB6\x17c\xf1\xbb\xe8\x92\x84\xfa\xc1?\xf7R\x8fy\x11\x92\xf8eJ\x96\xfa6^\xf8\x81a\xe4\x7f~\xf7\xea\x9b\xc3 8\x8a\x82\x80L\xf4S\xa7U\x9a\xca_D\xf1\x92k\xbb\xf5\x15N \xfd\xdeX\xe5\x15\x99\xfa\x9e~\x86\xaf\xfc%\xa1b0.n\xf5\xcb\xd7\xde\x92L_GS\xf2\xca[iJ\xa3\xa9a\xd5\xdfz>]\xb1\x9f3\x92\x18\xd6\xe5m\x90\xcd}\xcd|\xd9{\xc3pN?|\xf5\x0d\x1eC\xfa6O?|\xf5:[^\x90\xd8X\xfc\xd6K\x17\xa7\xc4\x80\x0b\xb4<\xf2C\xc3\x80O?|U\x87H\xa7\x1f\xbe\xca\xfdM\x0d5\xa2,\x9e\x10\x16z\xdeP\x83n\x94\xd3\x05!\xa9\x1e\xaa\xef\xc8\xc7\xf4]\xecM.\x8fL[%\xafa(\x8e\xb2I\x0e\xbb\xbc\xe4\x86\xa5\x0b\xf7m\x0cY\xc98\xf05<\x81\xa9\x904a\xdd\xe9\xe8\xf8\xd4k\x17\xe60\x82\xe9x\xad\x18\x9d\xd2g #X\x8c\xe7\x9a\x92sd\xe7u%\x170\x82sJ\xf1\xcfu\xa7\x11\xf0c\x18\xdd\x89\xed\x0bz\xf6~\xfa\x04\x9e}\xe1\xc2\xcc\x85\x95\xe3\xc2\xc58(\xde\x05,\x07s2\x9e\x9f\xb1\xe8\xbaK\x8d/\x03R\xd6kz\xa2\xc7\x0e\\\x8c\xaf\x99\x1a\x99~~\xedB<\xbe>+\xf4\x99\xd0\x96Z7*}\xb4>9\xf4\xbd\xe1~_\xd5\x05e\x82\x954In\xfd\x9d\x07\xfff\xf9\xf4_\x8e\xe5\x93\x99\xd7pl+\x0b\x93I\xb4\xa2\xd2L\xa22o\x1a\xa7m \xdf\x84f\x01\xfcq|\xc6\xae\x00\xfa\x0f\x1c\xdbG\xef\x8f\xbf\x9b\xf5{\x15I~\x1c\x9f\x8d\xd33\xc5\x89^;\x11\x93~\xbf\x16\xf5\xf8\xa2\xea\xc4\x93\xbb5\xc4j\xbfMe\xb7^\xbe\xa1T\xa6;\x11lV\xe9-c\xae\xf6U\xab\xa8\x19\xbe\xae\xdc\xed\x04\x8ckS\xde\xae\xd8[U\xc3\xb0`M\xab\xaf\xa7\x9ct\xa8\xd6\x91k\xf6~W\x1d\xca5\x17,\xd5^\xe7\xfc\xfd\xae\xd3M\x88\xb2e\x97\xbc\xad=\xc7V\xbe:\xe7,\xb1*\xd5^\xf0\xd6T\xf8\\\xf1\xf7*\x01\xfc\x88\x1cf\xae\x8fW\x8eE\x91\x0c{B\x12\xc5\x91\xf0\x18\x8b\xf8\xfd[\xb9\xe8\x10F`\xf1\x8fp\x87\xcf\xecS\xa5\xd77\xf5\xea\xdb\x9f0\x92\xde\x08\xce\xbb\xb3r\x01\xa5\x84[[\xf5\xaa]\xb3\x7f\x9d\xa0\x8e\xc7\xdd\x98$Q\xb0&\xb6\xba\xa6\xf2CX ZY\xe6\x19\xd1\xdd\xcb\xaf\x01\x93\x15\x99 a9\xab\xdd\xc3\xea\x93\xdao\\xc\x96v5\xd9\xfaA\xb2\x0394zl\xf1\xa58!?1\x86\x163_\x8a\xac8\x0b\x12\xdao\x1cY*\xab\x8a\xe55\x1e\xb27*\xf6\xbdl\x9c\xf3\xba\x9aX\x05\xa4s\xc4\xde\xc2\x98\xaf\xe5\xc9\xe4w\xf1,p)\x0e\xdb\xc1)\xa8\x89\xb4J\x7f\xbej\xa2s \xae\xb4\xd2\xee\xb9Q B\xcb\x14\xc7\x01\xf9Y\xe7\xe1\xbc\xcf'\xfa\x1a\xcb\xe6\xa4U\xa0J\x94i\xf7|\xcd\xe4\xc9>.e\xf7\x1c\x00\xe9F\x97\x18\x94e\xe6\xf9\x9ahc\xea\x93\xe0\xc5\x03\xdf\x1b\xcd\xd5'\xbc:E\xb8\xe6\xda3\xac=\x8d\x96\x9e\xdf\x94 \xc4\xb8\x81\xe5\xc7c\xc1.>}b19)\xec0\xdc\xd8[\xc6E\xd1\xbfF\x18\xa4t\x8b)\xf9=d=Fh\xedoc\x0e\xadY\x97\x84)\x89m~\x81\xe0\xd91\x8a\xe6\x94\xc5\x9du\xc9G?\xb5\xb9P\xbf\xd5sX\x1d\x8c\xb4\xb3\xe2\xe6\xff\x070\xb1?\xda\x16\xdfw\xdb\x93\x85\xe7\x870\xb9\x9e\x04\xc4b\xa1\xea\xe9:\xbe\xb4)\x06\x1f\x087\xd0\xd0\x85\xc4\x85 -N\xb0d\x08\x13;6S\x03P\xf7e#Xp\xfc[\x19\x9f\x1f\x9f\xc4\xc4\x94f[<75\xf4\x08\xc2B\x19\x1d=v \xb3\xc3q\xd4\xe9\xe8\"\xc8\x8a\x87n\x12\x1e\xe1&p\xd4p\xad\x9a\xde\xde6\xf6\xb6)\xfe\xea\xb1QF\xac\x1c\xe8\x7ff\xaba \x9c\"\x1c\xa7\xf2\n|\xb9\xd8)\\\x83Rm\xd0I\xa0\x12\xddS\xad\xb7~\xedJ\x9d4\xc2n-\x05S\xab\xc2\x85t\xcf1S\xb4\x8d?X\x184\x84\x01\xe9\x9e_\xd1\x02\xe2t\xcf\xd7,F\x1d\xe9\x9e',{\x04\xe1+l\x13\x86y\xa4{>\xe1\xc6\x94\xf4\xa0xe\x13\xd4]\xd4\x8e\xfcu\xbb\x91\xbb\x86\xc8g X\x9a\xb0{\xae\x0d\x05\x0f\x18\xec5\x9f\x14\xde\x90\xf39\x19\x8e\xdf\xfac\x17\x03M\xb2\x00\xf6bc\x15\x87\x1fL\xd0\x88\xe7\x82\xeefd\x1e\xa6\xe0\xa7 f\xaa\xa9\xa4\xfc \x9c_\xa2%\xd5A[\xe6 $!\xbd\xf9,<\xbf\xd2zGV\xaaM\x87\xba\x84\x82\xf2c\xe0\xca\xc5\xd3\x8ec\x11\xe6\xa1\xf4<~\x8d\x07L\x1f\xcf\xe6\x13\xfe\xfb.\xd9\x80\x93\"\xf3\xed\xadO~g\x88y\xc39\xfa\x87\x0c\xfd\xfb\x14\xbfC\x17\xb6L\xe3m7N>\xbe\xfa\x89\xb4X\xbf\x86\xb5\xbb1\xce\xbf:o\x85\xc9(V\xfc\x12\xf7\xfaq\xed\x86\x9d\xf2\xa8I\xc7.\x88Ma\xb9`\x9d/,\xc7\xc5t\x14\xae\x1c\xd5\xbaU\x14\xa3\xd4F4a\xed\xe6\x98\"\xfeT\x88K-\xd0O\xca\xf1\xb4\xcb_\xe6\x7f\xdd\xb8\xec\x107O\x92\xa9\xf9r\xce\x0e\xff\x92O^\xf6&\x91U\x97\xe5l\xe5\xebJ\xe5\x85\\\x991\x8a\xc5\x80\x9c\xb2-\x8f=\xd8\xddw\xecc\xd9\x86V\x1d\x1f [\xc4\xfc\x16\xa2\xdcO\xb6\x88uu\xac\x0b\x97-\xac\x8f\xa8\x0c5\xd2\x8a\xa9\xec\xca\x19\xf7\x06\x15\xb0\xca\xb5F\xe5\xd4\x83\x94\x92s\xe9\x07\xd9\x18z\x16\xf3?\x87\nL&R\x08_\x0e\xe3<\xf0\xa8\xa7\x96a*\xdfW|\x1e\x98\xb8>\x14\x12Jy\x9d\xcb\xfb\x08\xd1\xa5\xce.\x03\xca\xd6\x89L\x85\x90\x8f\xd3\x88C\x8e\x12.\xcd\xa4\xa0\xc6x\x1a\x8f\xab\xd8%\xb8\xc2\"];?Q\xf0z\xf45\xc6[\xc8\xb3\xf33&\x05KNx\x89\x8c\xcd\xe7]*s\xfe\xd4\xe6\x828\xc5\x93\xed\x18\x97\x13\x7ff\x94\x83\xe6\xc1\xe9Q\x8d-\x1b\x9e8.\x04v\xd0\xfd\n:\x10t\xbf\xc5\xff\xbf\x80\x7f\x86\xadK\x15!\xdf\n\xa6\xe8\xb8\xf41\xb3&\xb5eZ\xc1\xad\xdd\x1f8\xb6\xfcJD\xa3\xcb\x0d\xddY\xc7\xa7\xa5.%z\xa3\xce\x8d\x82\xa7i\x91\x05\x83\xf4\x93\x8e2\x81\xa4z\xea\xb9\xb9\xb4\xef\xb0\xe8\x9bzD\xab\xc0\xa9\x18\xae\x8dl\xd3\xd6\xa5S;j\\\xef\xa6a\xf3Q]\xd9\xf9\xe6\xc8\xd7\xed\x98'\x93i\xc0S\x05\x92\xf6%\xd3\xd4\x0fv\x1fJV\xf0\x95\xbe\x8f\xbb\xcc\xc0\xb9\x8b;\xc8~#\xa3E\xdd\xb4\xbc h\x9a\x92\xcc\xaa\xeaO=F\xb5L\xf6BxsQ\xaf\xbe\xf1y\x15\xb3\xca&j/\xa9\n::\xd6\xdc'\xcaO\xa4\xb7\x9b\x93\x1f\x8a\xe8\x86\x14\n\xf4YSZN\x8f\x91\xf6zV\xb4\xb0\x82\x11D\x9dN3\x07\x98\xd4\xa4p\x10O\xc8(/#\x81tov:n\xa1-\xa3\x18\x81$\xb2\xfd\x08\x01;\xa6\xacE\"\x98\xf4\xb1w\xc6(\xdf\xf6vFKb;l\xe2\n\x8dB3p4\x97\x9a\xd2\xd6\xbb1o\xf9\xa8\x8bG\x97oG\xddu\xdb\x83%\xf6&\x8d{\xf7\xae\x10\xdd\x8c\xc5\xfe\x06X\xbc9nUW\xbd\xd8vP\xa3\xcd\xd3\x88\xb7P\xbf\x02>[\x81\xd8\xf6\xebV@\"A\xf8\xf3V\x97\x83L\xe9\xa5N\x9dgp)\xdd\x1c\xa0\xda^\n \xc84<S l\xc4\xe5\xb6\xa6m\xef\x97m\xe2\x81\x8d\x9fIN\xb38Z\xdaQ\x83\xad\x0c;7\x07F\x90\xe8ma[[\xd6\x17\x01T\xb6\x8a\xb4\xe3\xaa\x86Y\xe8\xcf\xd5\xf7z~A\x02\x9c\x9e\xd8\xa0g\xbf\x06\xa6\x90\x1f\xb9MP\x85:\x9f\x00\xf10\x0f\x80\xb0\xba\x00\xe2\xd1\x9cj.\x0el\x83\xee3]\x1b\xa9\x1d\xd5\xdczk\xe9\xfa\x9d\xa4\xa9\x90\xc8\xa5\x9e\xcbV=\x00\"-u\xe2\xf4\xa6\xa2.\xe4~\x0e\xbb\xfb\xd2\xba\xc5v\xdc}\x0b\x1d\x88\xbb'5wJ3?\xf4\x82\xe0\xba\xad\xba=\xe3\xb7\xc4~\x1e\xc1\x9aJ\xc2\xe2\x0f\x83\xae=4\xddjk\x98\xdd\xca}q(\xab&\x8d\x96\xd7\xfc3\x8fRGT\x84\x95/R\xea\xf8\xab\xca2\xcb\x8f\xce\x9a\x8c\x8al\x94\xad\xf8\xc2\xe3\xe2 u6\x1a\x96\xf9\xae\xf2\x0b\xa2n\xc5\x7fD\x84?\xd8S\xb0\xf1\xb4\x06\x0f\xd3\xb85\x0e\xd2C0\xd5g\xe0\x86<\xd1\x97\xce\x9eV\xdcB\x87]\x82\x86\xed\xfc\xee\x7fX\\\xc68v\x88\x97$\xcd\xd7\xd2m\xe0\x19\xda\x83\xbd\x01\x8f=\xb7\xc3\xff\xdd-\xc7\xaa\xdb{\xc0\xff\xe5\xb1\xea\xf6x\xac\xba\xfd\x1e\xff\x97\x7f\xbf\xcf\xbf\xdf\xe7\xb1\xed\xf6\xf9\xf7\xfb\xfb\xfc_\xde\xce>og\x9f\xb7\xf3\x80\xb7\xf3\xa0\xcf\xff\xe5\xed=\xe0\xed=\xe0\xed=\xe0\xed=\xe0\xed=\xe0\xed=\xe0\xed=x\xa4\x8d\x9d\xc7|j\xdb\xc0\xa2\x11\x8b*\xbeNQ\x1ep\x13\x8f\xe3#\x1e\xae\xb2J\x10\xe5J\xd1\x94\xa0\x17\xb0\x82xH\x06\xd1z`\x8b\xd9\xb5\xf71\x9eJ\x1e\x16#\x8f\x1dR!\x8fr\xa3M\x08\x9a3\xb4\xdc\xe4r|\xe6\xe2\x9c\xf3\xccPy\xa4\x9c\x8c\xf9\xe9\xc6\xf0\x142\xb3v\x80g\xb9\xeb\x14\x99\xa52\x8c\xa2\xe3Sj\xd2\xef\xf7w\xfb\xfd\xbe\xc3r\xf7\x8a;\x91\x13/\x9c\xf3K\x11R\x8e-\xbe\xf6\x02\x7f\n\x93hJ`E'c2\xab\xe4w\xd4\x04\x9e\xb0H\x9dp\x80\xb1~0B,\x8b\xe4\xd9\x01\xdb&\xb0=b\xe5\x0e<}\n\xfd\x1e\xca\x14\x7f\x84~o\xb0\x0b\x1d\x16\xffS\x97|\xcc\xb4'C\x9eSP\xcd\x9c\xbb\xe1\x8ek\xc22CT -\xa52`D\xec]\xb5\xc7\x03\x16;\xa3\x1b{W\\\x10\x8d\num\x1dnP\xcc\xf1\x18\x8e\x84\xf0\x14\xbc\xc7\x0edl]x\x08Z2\xf6:\x9d3\x07\xe3D\xdc\x87\x9eF\x8a\xb0\x8e\xa2,L\x0b\xe7\xac\x90\xcc\xbd\xd4_\x13U|\xe0\xc1\xf8\"x\xaa\x1ar\xf1\xc7\x8e\xe0\xe9\xd3\xa7#\xe8;\xdc\x9b\xb53B\xc3#zb2\x07\xd7\x90\xbdz\xac\xac\xd3\xef\xa7\x84\xdb\x948\x17 \xda\x9a6aQ\xb3n\x1b\x16\xb5\x9a6\xa2\x8eD\x97\xfa\xd0\xad\x00\xe2\x88o\xe7\x84r\x93\x1d\xea\xe6\xe1DM\x99/\xe2[\x10\xd6\x18\x97\xad \xac!\x15\x92(\xec\x84E\x0b%\xac\xf1g\x11\x07\x93dBW\xc5\x0b'\x8b(\xdeH2\xa9\xe5\x06\xf9b`\xd4z+\xf4\x96\xc4\xaaK\xec\xf9\xd9\xc3\xbf\xf0\xe7\x1b\x8d\xbd\xcd\xd0Y\x9b\x16\xfe\xf7\x05G\x1e\xf8\xe1\xe5\xdd\x8f\x9d\xb7\xfa\xc5G\x1f\x05\xd3\xbb\x1f\xfc\xef0\xf0\x99\xff\x91\xdc\xfd\xc8\xd3\xf4\xf7\x18z\x14\xa6\x93(\xf8\x12\xbb\x956MG/\x9a\xff\x82;\x96v\x95\xf8\xbf\x90/7 \xde\xfa\x17\x9c\x83\x9fz\x81?I6\x9aB\x9b\x19\xf8\xbf\x03\x16mLvZ\xc1\x1e\xc9\xfd\"&\xb3/\x0b\xf8d\xe9\x05\xc1F\xa3o3x\xd1\xea\x97\x06=}}\xb9\x19\xe2\xb7\x1a\xbeh\xf6\x8b\x8f?\xbb\xb8\xfb\xc1g\xbf\x07\xd5O\xb2\xd5\x17\x18\xf9\xea\x8eF\x1e\xda\xfb;\x8em-\xbdt\xb2\xb0\\\xe8\xd7\xd7\x96\xc62\xce\xebi\x15\x9dz\x88\x88GH\x02i\xddE\xa2/+\x1aP\xcf\x90\xe7_\x0b\xc7\xc4\x9c\xdaB2\x9b\xf7\xe1@\xd8\xd81\xcf\xa8!\x9a\xb7q}n\xe8\x8c\xc9\x99P\xd8\xc7\x95X\x1f\x10n\x9a\xd5\x9f\x03\x93\xeb\x14-\x17\x06\xb7\x00g\xecV\xdd.\xa0\x15D\xa3&\x88f%\x88\xc62D\xe3\x96\x10\x95\x04\x88\x18C\x95\xf9\x08T\xf6\x86\x832rX\xe8\xa5;\x03hB\xbc\xf8\xdf\xd0\xf3\xce\xa0\xb9\n\xfcT\x8b\x9c\x15\xcbI3\x98\xc4EFh\xf7wUc=\x10z\x8f\xeakv\xb9\x867eU\x8d\x885A\xe3\x14\xcb\xbb\xb8\x98X\x92\x89mYt\x8e\x1a\xa4is\x1d\x02\x92%\x9a\xd0\x01\xe8\x03\x01@\xd9\xd7f$\\\x8bx\x12\x9d\xdc\xceMM\x86\"\x7f\xbb\xe5\xcb\xa9\xd3\x8a\xa8x8:\xfdgkf\xc2\x9f\xb80\xc1p\xd3\x01\x0b\x8b_\xe7u\xbe`\xa1;\xfdy\x18\xc5\xe4\xc8\xc3`}\x96o\xc1\x90\x1ey\xd0\xa1e\xcb,H\xfd\xc0\x0f\xb1hY*\xcaB\x1f\xaf\xda\x0f\xc0\xcaJ\x05I\xeaO.\xaf\xe9\xfbk\xfe\xde<\x84i\xbd\xd3\xfb\xba\xbc\x9a\xb4\xb3\xdd\xc1\xa3\xddG\xfb\x0f\x06\x8f\xf6\xd0\x8e\xff\xe9\xd3\xa7u\x0d`4\xd9b\xbf\xa7\xdd\x04\x83\x9c\xbb\xb0\x80\x0eXs\x93\x85\x00\xaa\xfaX\xf0\xaa\xb8\xdc\x02\xbb\xcb\xbc\xe6\xed\xd0F\xfe`\x1fl\xfd\xf0C\xe2X.,t\xd7\xd0\xf9\x83\x0e\xec\xd7\x0c\x17y\xc0\xce-\xdb\x9e`(1\xd4*C\x07\x92q\xef,\xc7\xf0\xa70E\xad\xe1\x8aG3\xe1*\xa4\xa9+>p\x1c\x17\xb6\xd0h\xbf\xa4\xe0\xc2\xc4\x1f\xbd\xb3\xfc\xe2-v\xebY\x9f\xd2\x83S\x0f0\xd0\x00\x04\xf0\xa4\xaa\xe4\xde\x86\xc1c\x08:\x1dG^\x99B\xa3\x16\xa0\x15\xaf\x8d?FZ\xe5w\xe9\xb9q\xdc\xea\xe098\x9e\x141\x15\xf1\xf2\x9f9\x00\xad\xe8\x07\x0c\x12}\x87g\x89\x90\xc0\xc6b\xc5O\\X\xe5\xad\x8e`\xed8\x8f\x1d\xb8\xee\x06^\x92\xbe\xc4\xb6\xf1>\x83\xf7s\xef\x9e\\\xa4\xc6\xf4\x16\x0f\xdf\x8cSv%S\x84\xf5\xde\x9a\xb1\x06(\xc9\xc4,<\x9f>\x01_1\x96\x93G]>:\xe8bp\xb0\x86\x03X\xf1\xb2\x9e\x0bk\xfc\xa42\x02\xc5,\x99\xb9*X=A\x1a\x85\n\xb3\xe7H\x10\xb3[Q\xb6\xf2\x99\xa9\x92+8\x80\xf1\x19\x0c\x05\x0d\xcau\xb1\xaa\x14\xa8\xd7iK,\x82\x81\xe5\xba\x05Su+>@b\xaa\xc2\x82\xa9\x8a+LU\xa8c\xaa\xe2M\xd9\x80z\xe5|f\x87\xf6\xe0a_U3\xfb\xbchg0P\x8b\"^\xb4\xd7\x7fHIL^&\xc6\x80A\xf1\xf5\\\x1a.f\xda=?'\xc9\xabh\x9a\x05\x18G\x1e\x86\x9a\xa5\x98\x92\x99\x97\x05\xe9P\xbd\x9f\xff\xa7\xea/q\xd2\x8e\xfd.\xff\xca\x85\xa8\xf8i\xa46|L\xd5\xbe'\xd1r\x15\x85\x94\x80\xe8F\x06\x98{B\xf8.}\xe3]GYJ\x17\x8fw\xd8\xb4Y\x8a H\xa8\"_Ny\xb7_S}\x8eW\xe2\x82U@\xbcr\x0b\xc2\x03\xc7\xcb\xe1\xea\x9d*\x9aLl\xca\xf9=\xd4\xa1 \x16\xed\xf5th\xc2\x8a*\xc8\x95\xe5E;j\x91\x97\x17\xed\xabEI^\xf4@>\xda\xf0\xd5\xfe\x9e\x1e\x15'\xbf?*\xcej/\x18\xf3\x91\x91:\xc1\x9f\xd2\xde\x1c\x9b\x1dN\xe8\x88\xe3bA\xa6\x16\xd8\xa4{~\x8e\xce\xe7\xe7\xe7\xc8&\xf4\xdc\x02\x1f\x1d\x9b8\x0e?\xadX\xf5\xfcxTE\x0c\x1d\x98h[\x9e\xd4\x96\x0b)\x1fFTz;\xae\xce\xe5\x92\\\x0f\xc1\x8aI8%\xb1\xe6\xa6\x94\xe3]#3\xb0\x96\xf3c\xac\xe2he\x88?\x03\"UFwN\xd2#\xb1\x85\xcduYd\xf0dE&,!P\x14\xd74\x1c\xb3\xd0\x1fq\xdc\xa2.\xdd\x13\xc4\xb6\x8e\xa20\xf5\xfc\x90T\x1cn\xe4'buO\xa2\xab\xbaZ\x99h1\xa8\xab\xe5\xb1Z\x18\xb57\xb10\x9c\xa9\xb9\xf2\x84U~\x17\xad.\xbc\xb8\xa9\xf2\x8cU~\xe6%\x9c\xde5}\x10\xb0\x0f\xa2\x90r\xeb\x1f\xbc\xc0\x9fzi\x14?\xf3\xa6s\xd2\xf4)&t\xe8\x06\x917\xf5\xc3\xf9i\xea\xa5Y\xa2F\xb2\x97\x9f\x05z/S~\x89\xdd\x9f7\xb0\xf7\x94GZP\x04\xb1\xad%I\x12oN\x90+\xb24J\x01(6A\"P\x9d;T\xf2\xdcQ\xb6o\xf2\x94\xa4\xcf$\xf0\x92\xe4\xb5\xb7$C\xb0\x92+o>'\xf1v\xe6[\xda\xfa7.L\xe0\xc0\xd8\xcf\xc4\xc5$l\x0eO\xc6\xe6\x82\xc5\xe1c!_\xb4b|\xaa\xfe[\xcc\xed\xddv\x9c~8\x8b\x8c#\xbc\x93\x1e\xf8\xc0\xb7'\xf9\xee\xf8=\xba3t\xe2`\xf8\xb7\x99\xe7\x07d\xfa\xaf\x12\x94\x8b\xdd\xd6\xbd\xa5~\x1a\x10c\x0f\xd6\x0b\x04\"\xa4\x11\xd0a\xc1\xe1\xdb\x97\x80l\x88Oi{\xd7r\xcc\x83\xf08rKkq\x84\xae\x95_dE\xcc\xe4\x013A\x9b\x18>\xf1,\xbd\x8f\xdf\xfa\xd3t1\x04\xeb\xe1\xc3\xde\xeacM{\xacz<\xf7\xc3o\xc8,\x1d\x82\xe5ei]\xffE\xfd\x13\x7f\xbeh\xf9AJ>\xa6\x87\x81?\x0f\x87`M\xd0\xdf_\xbfDP9\xdf\xf3\xb7\xff\n\xb01&\xcb(%\x85\xc7n#NZ+\xcb\xe5\xa4v\x8a\x88\xb9\xb5B\xe5_\x92MD,\x8c\x06\xcc\x9cq\xac6\xf7\x11\x89\x1eL\x15\xb2\xa6\nA\xbes\xaa:\x0dE\xea8+\x85H\xba\xb1\x8b&sNIb\xa9\x89(m\x1bl\x8a\x8a\x90;\x15\x8f\xa5\x81\xd3\xd5\xe6Am\xd3\xa2d\xdc\xa7\xcf\xff\xd6\xdf\x91\xad\x96\xa9p\xf2\xc8\xb1\xadrGV\xb3\xf4g\xe6\xd4\xa5J\xbe\x92\x86\x14\xe06\x17o\x83\x87{\x1a\xc1J\x02\x93^\x1ely\x01\x12\xabb\x9f\xa8^\x8c\xb3\xcd0\x8ba\xf5U\xeb\xce\xc2\xabk\x8b\na\x94\\\xb3qWvmy$C\\\x1d\xa7;\xdb\x10b2\x10*\xed3\x89\x8c\x02U\xbd\x8d($\xbaas\x0e\xb6\xca\"=b\x0ey\x0f\xf7\xaa\xfew\xbd}\xa7;\x93\xfd\xe8\xdb\xb4\xd8r\x12\xaa\x01\xeb\xe7Mb\xf0\x88\xbb!>\xe2n\x86|V\x83G\x0ft\x9b\xf4\xf4zy\x11\x05m\x9an\xb2\xf34\xd8\xe1\xaa;\x98\xdby\x1a\xbc\xad\x0d\xce\xd6\x03\xb5q>\xfeG}\xa7\xfb\xf5\xf1\xf7\xe5\xb2 /S>\xe1\xa9\xe5\xd4\x1eXj\xb9G\xeaxXn\xb9=\xf55\xcf-\xa7\xbc\x9d\xe6HR~\xbf\xe6\xefU4\xbd\xe6#T=\xe4\xe6\xfc\xbd:F\x9eV\xae\x82\xed\xec\xb5\x1a\xfe\x92\xa5\x94\x1b\xe83\xcaU\xb0\xed#\x9b\xa8\x1a\xfb\xee\x94\x81E\x95\xd6\x8e\xf9\x08\xd5\xea\x87|U\xd5N\xdf\xb0\xf7j\xf5\x9f\xf0u\xc5\x0d\xf5\x12Fp\xa8\xe6\x90{ #x\xa3\xbe|\x85i\xe1\x94\x97\xefP\x1ed\x18].9\xc2\x92\xbf\x9c\xbey]~\xff\x16FpD\x8f\xf2\xa3n\x82\xaaW\x7fv]\xaeqB\x05G\xdb:_\xf8\xd3) U\x11\xfc5+M\xa3\xb7\xb1\xbf\xf4\x99\xadv\xb9\xc67\xe8\x00\xa6\xcd\xb9_\xae\xf8\x9c\x92{\xdbJp\xf4\xdb1\x99\xfbI\x1a_\xab\xcd\xfd\"\xd7\xaa\xa4\xb9|\xc1J\xa3\xd5\xb6\xa1\xc2{M\x12\xf3r\x8dg\xa6\xf8\x01\xef\xca\xf5~F\x88\xfe\x955V.\xfa\x1eF\xb0\xf53F\x0e\xffY\xca\x08\xa0\xfc\xdd\x9d\xf9\xe1\xf4h\xe1\x07\xd3\xf2\xd7\xdf\x02\x8f\xf18\xa9w\x8d\xe3G\xdf\x03\xd8\x1a\xc1\xa9\xfd\xd2\xfe\xfb\x0d7\x0f\xd33\x91\xed\xe2\xb1@\xd1\xf0K\xd9\xe4\xac^0\xe0\xda\xac\x07\xc6J7N\xd7\xd3\x16V\xd9\xf2\x1bG\xad{\xe3\xc8\xd1\x0f\x0c\x8c\x00H\xa4\xf8\xd2~\xaf\xbf\x9dE\xd7\xd5) HJ\xe0\xfd\x98\x9c\xb9t\x92\xbc=\x1e8,\xc5;\x8a\xf7\xf4\xe7Kl\xa6\x12 \xf9\x06\x86\xf0\xb2\xbcd\x1fj\xb5\x9e \xd9\xd0\xff\xc2|\x0dO\xedw\x05\"\x98\x0d\xd8 K\xa5\x9bV\"|\x96\xbb\xff\x1aF\xf0\x8c\x8e\x98o\x8b\x12\xd6v\xc5\x91]\x02b\x0dBi\x1aI+\x00h\xd5R)\n\xf3\xbb\xba\x19|\xd5\x82\xd5+5<\x12\x8b\xf4\x95\xfd\"_\xc0%\x8b\xf2\x0f#\xb8\xe2\x19\x8d\xe8;Z\xe2\xdb\xbf\xe0\x9d\xdb\x01\xc6c\xc8 \x10f\xe4\xa3\xfd\x9d\xb0\xbc\x93\xe3\x93\xb31a\xb7\xa6\xe2\xf7\x88\xe7\xa8\xc0E\x0bM\x1b\xa1hr\x08\x1f\xed\x1e&\xb6\xd0a6\x0c\x8b\x0e?}b\xd8w\xe2\xc2G\xbb\x8fyv)\x7fR\xf4K\x87\xffm\x0e\x0d\xfa\xed\xcb*_\x0bU`\xfe\xa1\xcd]\xe3R\xeb8\x91;\x93\x87\xcca\xfc\x9a'\x82#th>K}\xc2\xa21\x8a|\xdf\x11<\x05\xff\xb1\x03_\xd9)\x83R<\xf61n\x00\x19\x87\xba\x10\x96b\x05\xeb&\xf0\xe7\xd6\xdb\xe9\x9b\xd2](.|\xcaRY\x19{\xde\xc2\xda\x05\x02!j\xb0\xbc\xa3[>E\xa6\x94\x19\x04\xd8[6#\xd9\x85\x0b'\xff\xf3\x17\xf1[\x94p\xecY\xf8 ]\xbc\xf4\x0c\x0b\xd5k\xd9\xf2\x14\xff\xd2f\x8d\xfc\x19s\xdc\xbd\xd0\xe0\xb5\xa0S\xf9\x90\x08\x1f\xd2\x0b\x16bY\x8f\xa7\xc2n\xe6\xd2\xae\xb1_\x11\x80\n\xab\x8dW\xb6\xca\xa7O\xca\x8e\xe2x[\x8d$sS\x07\x8e\xbf5\xae\xb8\x1a\xee\xe2\x95}\xc1\x9c\xa0c\x1e\xc1 \xe2\x11\x0c\xba\xa5\xdc\x8fl\xf4\x94\xd9b) qe(e;\xc9\x7f%,T#\x0bDa\xc6\x9b\xb8n\xfc\xdfm<~N\xc2\xd8\xf8_a\xe0\xa1\x170\x04>\xa9\x88OJ\x84\xee(&\x95=v\xc4\x9a\xe0f\xcb\xc4\xacB\x8e\xc1\xef\xc5jElJ\xbf\x8cI\xcd>\x8c\xca\xb3*\xea=\xc3\xa5\xf5l\xfb]]\x14,\xc4P\xba\x9ddB_\x0d\x99n1\x96\xb4\x88\x0f\"\xe5(\xaeDN\x17W^+\x9d\xcfX\xaf\xe43\xd6\x93\xbc:\xdd\xca\x14\x89\x94\xd3\x01\xc9\x19\xa9\xac4\xca=\x04\x9b\xf4E)K\xc4\xffOr\xd3\x87\x98\xb4\xe8/.\x15Q`\x04_a\xc4\xa1\xbd]\x07\xff:\xc6\xff\xff\x8d\xbe\xdb\xe7\xaf\xfe\x8c\x15z\x0f\xd9_\xdf\xf1\xf4\x97[\xa1\xfd\xf0!\x02\xd5\xa3\xb3\xb7t\xe2\x82\xe5\xd2\x8f\x91\xbcL\xbb\xf5\x17\xcd|\xbc\x1f\xecEIuE\xc7\x9b\xd9\x19&B\xca0\x11R\xc6T:\xcfTh3\x84\x1dJ\\\x8bl\x17\x90o\xe6\xbfRaa\xe1%/9\xfa\xbb~r\x14\x85\x13/=]\xc5\xc4\x9b\xa2\x90#\xf8/\x17\xcd\xce]n\n\xe623_\x97\x87rt\xd1x\xc8\x95\xe4(W\xac\xcb;o\xee\xca\x99\xfd\xb9\x9d\x91\xe5Z\xf4\x18H\x19\x85\xf8k\xb1E\xd2\xf4\xb1\x03\x0b\xfb\xaf\xe34-'\xbd-HP\x8a\xd9J\x16\xdd$\x8dbB\xa95o\x85\xa4E3!mfm\x93t\x1c*\xedP\x08\x9e\x96`\xc7\xf7w5\xa0Q\x14\xb7d\x15}\xfb9=\xd3:#4^<\x80\xe7tO\x0d\xd9?\xa3j\xea]\x85\xfc^\x92\xeb\x17\xcd]\xa19\xe7\xd7h\xceY\x9b\xd3\xc1\x03\xc6\x01W(\x13\x94\xc3\xed\xf8!<\xd7\xdb\xd3\xd1\x9e\x9e#\x177\x92\xe3\xbb\xd72\xf1YBNI\x9a\x92\xb8AJ\xfb^\x17I\xb2\xd2\x92\xbf\\\x05M\xf6\x05\xdf\x97\xb3\xd7\x01\x94\xf5\xba\xaen\xa1\x0d:O\xa6\x9ao\x91\xca\xaej\xe2F\x99\xf0S\x1b\x93\x96\xfd\xc1>e\x9cN\xedb\xab\xfa\xd5\xafj\x8a}\x92\x0c\xe1\x0f\xe5\ns\x92\xbe\xb9\n\xc5\xf7\xcfI2\x89\xfdUJ\xd1\xe7/u\x15_{K\xda\xd8\xdf\xea\xea\xb0m\x90\x0c\xe1\xbb\x12\x1cQ\xc1R\x06\xa6\xbd\x85\x07l\x8d\x88/\x8e\xc1wjxL!\xa6\x8d\xc3,\x08\xce0\xfe\xcd[[p\x9d\xd6\xdfo\xf8\x9b*\xec\xbd\x8a\x11\x8f\xf2 [\\\x85b:.X\x7f9}\xf3Z\xe3@\xce\xf5EM\xfb\xae\xc4\xfap\x86-=\xe3Y\xe4\x1f\xebb7P\x81\x82sd\xc5a\xef\xebSx\xf3<\xaf\x9c\x1d\xea\x9f\xb9`\x9f\xdb\x95\x94?\x9c\xc1\xffZ6\xe6\x9e\xf3j6i\xc3\x8c\x8b\xbe\xb4\xba!\x16\x1a\x08\xf9\xcc\x8au\xa6\xe3\xd2~\x89c \x03\xc0\x91\x84\x8e\x9dN\xc3\x85\xb7\xdc`\xe9\xa8\xaaz(\xa1\x95\xa4B\x18\xbfFV<\xb4\x07\xfb\x8e\xacZp\xe1u\xa9\x1eK\xc2\xf2f\x86\xd9\xe4\xde\x15\x84\x1b\xff~\xe5\xa5\x0b\x17,\xfa\x0f\xb7S\x81\xc0\xe6J\xc3\x1c\x07\xb6z\xad4\xff\xd2\x0d\xd6\x9ec[K\x92z\xba\xd0\xbb\x1a\xe5m\xa4\xd7\x9a\x8b`\xa4\x8e\xaa\xf3\xf4\xaav\xebI\xa1\xe4\xf3\x93\xe3\x8f) \x13\x9f\xca&\x9f>\xd5\x13D!\xf8\xd4R\xd7 \xa5\x9a\xa8]o\xa5\x9eK\xec\\\xddH\xd6$L\xf9p\xa20\xb1\xa9\xc0\xaf\xec\xc7rW\xf5<\x0e\xe0Q\x9c\xa2\xf7\x91I\xdaC\xb5\x9c\xbe\x90>\xfe\x10\xac7\x16t\xa0\xd3\xf1\xaa\xbc\xa4x\xae\x86j\xb0Z\xf1\xe8\xb4wu\xb0\x0b\x94\x1cR\xd5\x91}}\xfc\xbd68\xf9\xeb\xe3\xe3\xe7C\xd8\xeaWKf^\x92~M\xae[\x9c=\xa0u\xe9\xd0\xa9\xbb\xb85$s$e\x86Fr\x99u\x8a\xde\x14o\xd1\xcd\xc2\x90C\x81e\x01\xc0\xe51J\xe3y\xbd\xa44\xa0\x17\x06{\xac\xbcz\xe1\xb9b\x1d\xd7\xd4\x9d\xa9\\\x93x\xf4\x8b)x\xfcq|\xd6\xad\xe6\xce\xd7\x84p\x9b\x93\xf4[\xe2]n\x02\xf9[\x01dK\x1f\xe3\xa5\xa8M\x8c\x11\xab\xe5\xe73\xc0q\xd5\x06\x1cQ\xf8\"&\xe4\x97\xc6d\x82P4>\xa1\xc7F\xd0\xa5\xc8\x8d\xe6\x146?\xa68\x98\xe8\xef\x19rD\xed\x0c\xab[\xd3\xe4\xca\xbd\x93\x08\x19\xa4'\xc6\xfb\xa6\xe4G\xe6\x89\n\x05]\xac\xcd\xd4\x16\xb2\xc0\xba\xe5\xb5\xc2\x83\xbc\xbaB9\xf7\x90\xb9\xfc2\x94\x02\x84\xf6\x1eug,\xa1J\xef1x\x05\xf30y\xec@\x92g.\xa7\xe7\x867\x9e\xa0\x96\x04\xe5{\xe4*2=O%\x19\x89l\x06\xd0\x87\xfb\x06\x08\xb1\x08\xef~\xc2RY\xc9\x07\x90If\xb5\xb0*\x92\x9c\xd8\xbe}\xa6\xab\xca\xed'_\xe2\xbd\xea \x1a\xb1\x1b:!oV\xcf]+b\\\xbfD\x06\xaf\xfcp\x1a]Q\x88\x16\xbf\ns\x17\x95m\x86\x83\x9aB\x9b\xb5@\x05\x80\xb1\xce+\xa0\x9d\xa8\x8f\x81v\xad1\x1b)|\x8bM\x9e\xe1\x88\xf3Di\x8d\x17 \xe6\xbc7\xb9\x94\xaa!!\xcd\xf9\xe3\xc5\x10\xb9kQ\xa3\xbd\x92\xcdS8\x97\xedn\xf4\x08\xe0\xc0\xdf\x1b-\"\xfa\xbd\x07\x8emy\xc9u8y\xb9\x91\xfd\x86\xf8\x94%GA\x1dL\xab\xef\xda\xd9}<\xba[\xbb\x8f\x9d^\xaf\xc6\x08+\xf9\x0c#\xac\xaa1\x90Y\x12.\xf73\xc4q\xf51\xa7U1\x9fV0\x94\xb6\xb2J\x95}\xbd5D\xd4F\x8c\xa1T\xd6G\x12\xba\x15S\xf9\xe7\xde=4\xa3+\x07v.\x14#\x84eCe\x11\xd9\x12\x92\x82\x97@.Ml\xa9\xe1\x18\xf44\xb0\x02\xa0!h\x17\x05e1+w\xe6\xb0\xc0\x0f\xe1\xef7\xd5\xbb_m\xca\x1b\xf3\xde\xb5\xf9\"R\xd1\xe8\x05o I\x82\xcb\x0d6\xba3\xbbb\x12\x00\xd28XF2\x188\x0e\x1d\xc0\xf8\x8c\xdf\xc5(Yf\x91l\xdf\x86:\x10}f\x8a*W\xc2\xc9\x88\x0c\x0d\xa3V[(\x95Y%\x96\x0f5\x95\x1ceF\x10\xc2\x90\xe5\xc0 \xdb\xf0\x17h]\xb0\xd5wL\xfa\xf6\xc9\x82L.\x87\xd2uB\xabM\xdb\x8aN\xecT\"\xe2}.\x9d\xd8\xfdlKD\xc3!\x14s\x1bUVg\xb3\x81\xdd\x8e\xdc\x08\xc5\x1bZ*\x15\x1d\xb6\xa20M\xf6l\xbb\x06\xdb\xd3==\x97\xb8S\xb1\xf2b2\xfbN_\xb5\xf2bl\xdc\x8e\xfa:\xe1\xd5u\xe9\x89\xe9{\xb5\xf9\x19\x7f\xaf\x0e'\xe0\xcd\xab8\xba\xc2Li%+\xe2r\x85\x85T\xe1\x857I\xa3X\xb1\x85\x9a\xb2\nA\x14\xea\x1bXW\xe3@\\7\xca\xf0mn\xc4\xe7Za\x19\x8d\x87b\x12\x9aD\xfc\xa5\xb7\x1aB\xd4]z+\xbdp?\x8b\xe2co\xb2\xa0u\xf8O}\xbdI\x94\x85):\x1e\xd3\x1f\xfa:i\x84\x04\x90\xd6\xe2?\xf5\xf5\xa20\xb8\x1e\x82&\xe7Y\xb5zn\x9c=\x04\xbf[\xe3\xd3\xf66\x8bI\xa9n\xe9E\xb5~ \x03\x86\xa0\x01\x8e\xbc\xc2C\x98V+\xf8 \xfau\xe5U\xbcn\xf9\x8df\x90q\xb4\xa2\xc7j2\x04\x8d\xf7\x1c\x1b\xd2Q\xe0%\xc9\x10f\xa6r\x8e\x93C\xd0\xac\x13\xab\xf1\xca\xff\xe8\x87C\xd0\xc0\xfe\xf9\x9bWC\xc8\xaa\xef\xd7$N\xfc(\x1c\xc2\xa4Zv~\x9e\xe05\xd6\x10\xd6e\xe4\xd4S\xc8V\xa99\xea\x89\x8e\xacQ3\xf4\x12\x7f~/\x94V\xe9y\xaa\nM\xe2\x02\xb0\x81\xb2\xf5T\x0e\x96\xa5\x13M\xaf\xa2C\xae\xb6~\x1bE\x81\x9a\x8e\x14g\xd1\x9dEY\\W\x8bR\xbd\xfb?\xdc\xef\xdc\x9f\xeb\\{gFA\xc8\xb6,\xe8@\xea\x94\x82\xbd\xff\xe1\xde}K>\x8f\xaa\x0d\x06\xdas\x0d/|i\x1df\x85\x86\x7fN\xa20e\xb9\xb9H\xfe&c7\x88\xb5=\xact\x0b\x05\xd2\xb2\xa4\xd8\x93f\xb3a\x19\xefV\x91\xdb\x99l\xe7c\xc3)\x1b\x88\x9c?]7\x8e\x85\x18\x87\x86\x93\xc4\xe9\xc4$a\xde\x1fb\xc6\x97\xe4\xfamLf\xfeGi\xce\x1c(a\x05(\xf1F@\x996\x03\x85\x0d\xa7\n\x96\x0cK\xf3\xb1U+x50Md\x98j\xa8 ;\xe8(l\x13\x05\xb6\xe5\x05(\xe97\xec \x95\xb1\xd7\x14\xe3b\x84o\xd4M\x17^z\x82\x88\x99\x08d\x17\x8e\x9c\xb05b\n0\xdbW\xa8'm\x87\xbe\x9f\xa0\x9a\x08\x89\xf1a8=a\xf8\xfc5\xb9\xa6\x1dd\xd0\x01{kB\xe7\xcf,yP\xb9C\xff\xc2\xe4\xf2\xf8\xeb\x00,\x0b\x860\xb3\xf1O\x87\x8a2\xf7Qg\x1b\xa2\xe1\x10S\x05M\x9cztYK\xe8\xe2V#g\xacy\xd4\x0c\xd5\x89V\xcc\x90\xdd\x0c\xa1hf\x87b\x08U\x83\x17\xbaV\xe8\x9a\x8b\xa4`j\x13\x8c\x8c\x81\x1d\x96+\xa3\xc6\x7f\xea\x82\xe7\xb8\xb0\xe8\xc6$ ^Bl\xaf~\x0e\xd7&,\xe34\x83\x0eVj@\xfc\n\xa4\x8b\xa3)\x11\x06;u\xf6@\xa5\xad\x81\xee[\xca\xee(\xbd\xacl\x10\xba(\xdetJa\xe0\x87\xf3w\x91\x1d\x88\x89\xdej \xf9F\x96z\x95\xf7\xb2\xf4\xfa\x0e\xc7\xbcp!Q\x04\x8c*\xfb\x96\xb3^u\xa7\x98xP3J\xf1\xa9dM\xa0\xb9x\x10D#(c\x92.\xc9:\xe2\xd1\nS\x17@\x90\xe3\x91z\xdfX\xa6\x0c\xc8O~\x91\x01\xeb\"p S\x01\x9b]q\xb1U\x10\xa6\xda\x0d\xc3|\x19\xa6\xd1\xb7~\xba\xf8Z\xac\xf6\xcb0%q\xe8\x05CX+\xc7,\xe3m\x1b\xf5&B\x87G+\\s\xd7\xc3\xbaA\xe4\xfcp=\xf3/\xf4\xe4M\x00 \x02\x00z\x92Z1\x10/\xf0\xf3\x8b\xf1j\xa1\xbd\xaf\xd31\xdb\xa1M%\xaf\x86y\x0b\xc3\xc1\xae\xd0\xa0Pl\xad (\x07\x12\xac\xaa\xdf\xad\xa2\x95)\xf3\xb5\xc0=\xdc\xbd<\x12|\x15^P\xa7p \xc9\x15~_1B\xaa\xd5\xbfi\x95T\xb2\xc2\x08\x0d\x0f?}\x82\xd8\xb6\x06{h\xcb%\xd16\xdbq5\xf3\xe4w\x1cOx8\x90(\nN\xfd_\x880>V`B\x0f\xb7z\xb3\xa9\x0c\x934\x97^yZAS\xa6o-\xf6\nH\x96\xc6\x86\xebQ\x01\xda\xd2\x98\xb9\xd1kXP/\xb4\xeb\xf8\xf4 2\xfa6\x9f/3:\xce\xff\x1c\xb1\x8cp\xa1\xa0b0\xa2g\xa7\xc6\x02\xb9\xca\xe7P\xce\xa2\xc4\x83\x0fU\x80\xd0\xa7\xc2\xcf\xb7\x84\xc1m\x90\x1cd\xd8m\x82\xe8\xa0Cv\x11\xa8P\x07\x0e\xd0\xe2<\xe8\xf0\xbeb\x92\x05zp\xa6\x8b\x98T\x00\xda\xe6\xc0\x80\xcf\x84V|'\xd0\x8a\x19\xb4tG\x8cx\xda\x03\xac\xe2\xa5\x01z\x98U\xe5\xc0*\xc8\x0c:o\xf8L\xa8\xf9w\x025?\x87\x1a\xe3&\xaa\xb6\x03\xb0)\xe0*\x86O\xd5\x16\x0c\xe7\xdag\xc4\x0fk>\xd7\xfa\x05\x1f\x15?f${\x1f^\xd7\n\xb3\xe5\x05\x89\xe57\x05Ty\x17\xa4\xfb\x87?\xf0\x91\xd1wE\xfe\xf4\x99\xcd8V\xcb\xca\x93\x87y\xd0\x81 \x9dp\x0f\xc5`\xc7\x05\x8d\xc5\n\x9dqM8\xd65\x8a\x9bR\x93CLd\x93\xe8\xa1R\x96\xd0\x89\xc6\x1f\x01d+\x8bkfOq\x0dO\xf2$<\x8f\xe1\xba\xd3q`\n\x9d\x11\xa4\xf6\x8a\x9e\xc9\xe3\xeb3\x17\xd68\x97\x95\x0b\xd7\x0e_\xbd\xea\x0808\xa6\x99C\x98\xb3,\xa5\x06rC\x87?o\"bK\x17\xdd\xc0\xe7\x9c\xbb\xab\xa1\\\xd8\x1c\xbb\xe8\xec\x920\x8d}\x92\xe8\x81!\x9e\x1c(\x17\x0c([\xf6\x12Fp\x8e\xa9\xe9m\xc7\xe9N\xa3\x90<.\x01f\xc9\x0c,%\xd8\\t:f\xe8\x88\x87B\xa9y$\xc6\x01\x98\x01$\x1e:\x89\xabb|\xe6\x91\x88\x07\x0d:lifWhZ\xbbF\x03fN.\xae\xc6\xbd3\x87\"\x9e\x98kO\xcc\xb4\x1e\xac\x06[B\x86+\xb8\x91K[\xac \x01>\x1a\x92\x91\xc9\xcfi\x11+\xba\x0eCb\xdb\xda\xe9[naG\xc2n\xdd\xce\xd8HN\xe1@\xec~\xb8\xf2\xd3\x05\\\x92\xeb\x04\xfenAG\xdcg\xd3\x176qx\x9a[\x17P\xd9d\xddX0\x84S\x17>\xb65?3J\"\xd3R\xc1\x0d\xa5\xb8\x96\xa5\xf2\x1a\xadn\x1b\xeb\x8f@\xad\x8d3\xf7\xe1\xbaw\x8f\xff\xca\x1d\x8b\xabg\xa5\xf5/\xff\x92\x07\n\xd1\x9f\xd3f9)\x97\xf2\x80\xc5\xcdEg\xc3\x18\xcd\x9b\xd3\xb1\xafZ\x80\x1b-\xb2\x89\xc6\xdc\xfa\x0e S\x1e+\xdb\x08me|=\x1a[#k\x08\xd6\xa8g\xc0`k\x88\xc5\x83j\xb8\xa7\x1b\xa3\xc6\xc0\xfa\x03\xc5\xc9\xcaE\xc0\xfd\xf1hxv\x7f\xde$\x9aK\x0d\x91qzV\xed\xb7^\xa6\x0c\xef\x06(=\x9c\xb6 (\xa3\x01-\x1en\x02\x14\x06\x0e\xdb\xea\xb2\xcd\x9c\x8e{\xe8\xe8Ma\xc5\xfe\xee\x9f\xa1\x8dD\x92]0.\xc0\x1e\xd0#Z~\xd1w\x1c \x9a\xf6\xa8\xf7i4p\xee\x1e\xa0\x05\xbe\xea\xf7\xce\xdd\xdc\x80\x0d\x9c\xba\x9bn_\xaf\x07\x18R\x12Y\xb1\xe4\xc7\xa2\x8b\x8b\x98\x95^\\h\x83~z\xd3iL\x92\x84\xd5a\xbf\xb5\xd5b\xc2{\x89\x89\xbe\xa38\xf5'\x01\xe1u\xf0\xb7\xb6Z\xe2Oy%\xfaK[%\x9b\xfa\x11\xabB\x7f\xe9\xaa\\`\xf1\x85\xb6\xc8KX\xfb\xf4\x87\xb6\xc2\xd4g\xe5S__\x1c\xf1b}\xcf\xfe\x9c\x15\xfbsmq\x10M.\x7f\xce\xa2\x94\x8f!\xffS[9\x9a^\xb3j\xd1\xb4\x12P\x05+\xb0\xa5\xd3/\xdcE\x96\xa6Q\xc8*\xe0O]\xa5\x89\x17\xae=\xb6\xb8\xec\xa7\xbe\xd2*\xf5yS\xfc\xb7\xb6\x9a\xcfgE\x7fh+D|i\xe9\x0f}\x85\x80\x97kc\xc6N\xa2`\x1eG\xd9J\xd4\xc1?t\x15\xa7^\xca\x90\x91\xfe0U\x08\xfc$\xcd+\xd1?\xb4\x15\xa7\xac\xcaT[H\xd8p\xa7D;\xdc)I=?Hx\x15\xfc\xad\xad6c\x90\x9d\xce\xb4P\x9d\xfa^\x101\x9cb?\xf5\x95\xd6\xbc\xc6Z[\xcc\xc7\xa9\x1f&\x87\x82v\xfed\x89\x85d\xa9/\xbc S^~A\xb4 \x9a\xf9$\x98\xa2\xe9`l[\xe2\x0f}\xc5\xb9\x8cf\xc5\x9f\x86\xcaYLD\xc5,\xd6\"\xd3,\x8a\xd0+\x93V\xc2\x9f\xfaJ\xf1\x92W\x89\xb5s\\\xf4\xb1x\xd1\xd7\x16\x0eX\xe1@[\xb8\xc3\nw\xb4\x85\xbb\xacpW[\xb8\xc7\n\xf7\xb4\x85\xfb\xacp_[\x88V\x1f\xb4\x98x\xda\xf5\xa0\xef9P\xd8Om\xa5b\x97-\x8c{l\xc1[\xd1\xb7\x90.\x19\xca\xd1\x1f\xba\n\x8c\xc4j \xac?\x8b1\\&-\xc7\x9f\xdaJK\xb6%\xfc\xa5v?\xf8\xe1*c8\x87\xbf\xf4U\x12^A\xbb+//\x18 //\xb4p\xbc$\xd7s\xc2P\x95\xfd\xd4U\n\xbc\x0bN!\xf0\x97\xb6\n\x99\x93\x90\xf5\xc4~j+1h\x05Zp\x05~x\xc9\x8b\xc3K]\x85\xa5\xe7\xb3\x81\xd2\x1f\xfa\n+^\xae]\xe8\xa5\x17_\xf2\xf2X\xdf\x01 3V\x81\x84\x99\xa9\x82\x9frR\"\xfe\xd0W\xe4t[\xe7w\xc8+p\xec\xc5_\xba*\xa1\xc7Ha\xe8iIa\x181\xbfaV\x87\xff\xa1\xab\xc8\x04F\xac\xc6\xc5Z]%\xb6\xbc\xfa\xe3*Z\xa5\xc5F\x12\x7f\x18*\n\xba\x17\x19i^\x94\xa5\x02\xa7\xd9O]%\xd6\x97\xb6\x93\x95\x17{l\x05\xf0\x97\xb6\x8a?I\x05]\xe5\xbf\xb5\xd5D\x15Sq4\xcf9F\xf1\x87\xae\xe2\xcfX\xe3g]Q\xcc&\x12kg\x123(\xc4Z\x08\xc4\xd9\x05\xe3\x99\xe8\x0f]\x056.\xed\x80\x12o\xc9\xfa\xa5?\xb4\x15\n\xd41#NB&\xf9r\xf2\xdf\xfaj\x81\xc0/\xf6S[i\xe9\x05\x0c\xc5X\nN]\x15L\xa3\xc4\xea\xe0Om\xa5\x95\xc7\x07\xb4\xf2\xf4\xa3I\xe3(d$\x95\xfd\xd4W\xba\xe6\x0c<\xfe\xd2V\xc9\x18\xeb\x9ddZ\xe6;\xc9\x96K/\xbe\xe6U\xf0\xb7\xbe\x1a_\x07\xfd~IY\x1c\x95\xd8\xb6R\xe6\xdb\xa2\xa9\x92\xf3\xce\xa9\x89yN\x19\xd9M\xb5$7%\x1f\xd3\\\xa4\x11\x7fh+R\xde\x82\xd5\xa2\xbf\xb4U\x16\xac\\\x9br=\xcd\x8f\xec\xd4tf\xa7>?\x0e\xe9\x0f}\x85T\xc0\x03#L\xeb\xaa0\xaa\x99jIf\x1a{\x93K^\xeeM\xb44\x9e\x11x-u\xcf\x18\x82fZ\xec\\{\xac\xe3\xb5\xa7\xedy\xedO \x13\xa7\xf0\x97\xae\xca\x15\x17r\xae\xf4R\xce\xc4\x8f\x85T\xc9~j+\x05\xfe\xea\xad\xc7\xd7A\xfc\xa1\xab8%3\xc1\xaf\xcf\xb4$\x82\x04\x81\xbf\xe2\x02$\xff\xad\xab\xc6v\x92\x9e5Yzs\xce\xdd,1\x93C\xb5J\xe0\x87\xac\x06\xfda\xaa\xe0\xc5_\xc5\xde\xd4G3f^\xb5x\xa5\xfbh\xe9%\xe2\x1cO\xb4k\xbc\x12\x10Z\x19\xa0\xb3\xf2\xd2\x94\xc4\xa1\xa8C\x7fk\xabE\xc1\xf5\x9c\x13@\xfe\xdbT-\x9f\xa9\xf8CW\x91\xce\xc9\x0bJ\xb3-\xbf\xd2~$\x88kl\"\xadi\xc4\x89L\x1a\xe9\x89\xfd\x9a\xd3\xc3\xb5v\x1d)Q\xc8\xa9\x83\xb6BNtSFuK5\x0c:\"v {\x07:\xa2:\xbbvn3\xdd7\xb9\x07\xfb\xc2\x9e\xecs\xc7\xd1\xdf\xdb\xd8\x01Yx\xe4\xd0\xfe\xe4`\x8cw\xa0\x03\xd6\xd8\x83s\x8f<\xf5\xf6\x97[\x8f\xebcYT\xdckx\xa8\xe7}5V\xb0\xf0\x8b1\xf9\x18\xd7\xda\xa2\x08[\x92\xcfQ\xe9\x03\xb7\x08\xd6\xab\xf5E/3Z\xe3\xc9\x13/\x8c\xc2\xebe\x94%O\x9fj\xb4\xb7\x81Q\xe5\xeb1s\xb9\xb5m\xe1/\xddN\x00\xd4eQ^ym\xe7\xf7\xba\x86zt\xbaX/\x9f\xb7\xa1\"\xbb\xe0\xc5\xaa\xfc\xae\xd7PQ0\xf2\xeb:F\x1e\xf2\xc08X\x91\xdf'\x9b*\xf2 ck\x11\xcf\xd8T\xd1\x0b\xaf\x870\xb5c\xd9\xf6\xef5^`\x9bA\xf9f\xd6\xa4\x82\x17\x8f\xb8\\*\xe2\x99\x14\xe6\xce.DM\xf7\x8b\xca\x15\xccVal\xe0\xc8\xf6\x1d\x0b\xdb\x12n\xdf\xf0\xa3\x05\x1d\x88\xa0\x03\xd6\x8f\x10\xcd\x8a\x94s\xac f\x05\x0b/\x01?\\S\xea\x93{\xcf@\x18\xa5\x98\xc0\x82\x8a\xdd\xfe\x94\x88\xa9vM\xe9C\xc5C\x11\x14\x13I\x8dCC\xb2W\xf1`D\x89\xf2\xa5yV\x1b\xb0B<\xb4\x0b4\xad\xacD\x17\xd0=e\xc8\xbc\xe4\xf3\xa4\xd3\xf71\x16\x99\x02\"\x0c \x8d\xef\x12\xf6.\xc9V\xab\xc0gi>$\xa8\xb9@>\xae\xc8$%S\xf0B\x06\x9d\xaeu\x9b\xebX\xf1\xe4w\xe0<\xd0\xc2\x04\x9e@\x96\x1b\x06L:\x9d\xb6\xa0\x99aj\xc9\x0c\x93\xe2r\xcc\xa2#\x1e\xd3\xb1O\xe8\xaf3\xcb\x05\xaf\x05\xe4\xe8\x02\xcddCJ\xf4T.\x8c.>c\xb2:sx\xf5\xb91\xdc\xe2\xea\xb7\"\x11\x1eb\xf9\xde\xfa\x82;qC$O7@l\xef\xcb#\xb6\xd7\x1a\xb1!\xf1\xc3y@\xe0\x84x\x93\x94s&\x9f\x87\xe5\x9f\xb3\xf0\xa6\xack\x02C\x7fWB\xbce\xd3\xc5/\x99\x19\xb7^c\xe6P\x14zK\x16)K?+\xf5\xf1\x1a\x8d\x9eM\x0f\xc3\xc1\xae\x14\n\x16\xe3\x0d\x97\xde\xe0h\x8a\xad\xdd\x8c}\xe2\x11vp\x95\xc6Z\xb5pc\x1b\xa2W\xab\xcf\x97Gv\xb1\x92\xf4s\xac\x91a\x8d\x7f\x1c\xba\x1b\xb8(\xbc\x92\xbb%\x91\xabu\xb0R\x1fD\x9bk;\x1d\x933Ge0\xe4\x05\x88\x8b\x05\xf0\x0d\xc0\x0e\xab\x94\x05I\xca\xebhJ\x1a9\x8a\xcf\x81\xa1\x89d0\xbe\xf2w%\x18\xff0\xceM\xcc\xb5\x11\xd0\xf2\xa9\xd6L\x93\xdaq`%+\xb3\xad\xd1\x08\x92:T\xbaC\x8e\x8c\xf5\xd98g\x89\xeb\xf2C\xc8\xea\xf7:\xf0 e\xdd\x85\x97H\xd1\x95\xecI+\xd2\x0f\xf5\x0cZ\x17\x19\xb4v\xac\x19|.{\x06\xff\x00\xd2\x15\x85\x1b\x1c\xd1\x1a\xe9@\x8aTW\x11\xd0jL\x0d?o\xeb\x16Q\xd1\xc4\xce`\x810\x1f\x83\x07O \xcd\x19tO\xf6\x866=tR+\xba\xf2\xe9\xd8\x93\x89j\xed\x04@\x12y\xfer\xfa\xe6u\x91?H\x9bYB~6\xdcih\xb2*\x1f~-\xb6Z\x14\xe2\x89\x99o\xcf\xba\xf3\xf2\x16\xe8B)\xda\xef\x8e2R\xe8i\x16\xad\xbb\xb4\xd2\xa4Y\x14\x13\xba\xa0T\x9b\xa9_~\x8c'C\x98\x0f<\xb2\xb7\xfa.\xe4\xab'\xe2\xf4\x96\xd6&\x87U\x17\x8eU\xb1\x14\x8f\x8f\x05\x99\\\xe6`L\\\xb8\xc8R\x88\xc9\x84\xf8k2\x85?&\xe0\xa5\xe0\x87S\xf2\x11\xfe\x98t-\x17\xce1\x99\x0bA\xe7m\x05l\xe6\xd5\xfd]\xb6`\xef1d\xa5\xe5\xc8\x9a\x97\x03\xa4\x1d\x94\x8e\xb3\x86%\x01(\xfb\xd5&\xe5\xd1R\x02\xed\xb4\xa2\x8e\xd0\x9a\xc6\xb6\xd9\x9f\x86\xadxw\xfb-Y\xb4\xb0&\x15\xcfg.\xe9\x7f=\xac\xc6\x8f\xac\xc7\x1f7\xe44Z p9\xb30\x9e\xb4\xc4\xd9Y\x9bf\x817\x1d`\xac\x84;\xe1C\x82\x1c\xd4\xf5\xdb\x01\x1a\xb7D\xbb\x0dswL \xf9\xe8M\xd2\xdf\x11\xeb\x93\xd6X?A\xacO6\xc5\xfa\xc9g`\xfd\xe4\xce\xb1^\xa0p\x86q\xed\x18\xff\xd4\xc4\xb5\xe4;%\xa0;\xa5\x15J\xd3\xda+\xdc)A\xcb\x9d\xb2\xb5\xda\x0cN\x97\x84\xcbdA=9\xfe!|\xe6M\xf3+\x0cZ\xa0\xf0l\x0c\x06,\xc6\x80\x05\xdcs\xe5\x87\x10/\xff\xd0\xd1E\xfb\x95\xec\xf7\x92:\xa5\xef[l\xd35\xf7s[\xd9\x89\x0bAu\xb7\x07\xedv;\x85\xdb4\x07\xdb\xf4\x1f\xb4\x8f+oo$\xafM\xa8\x06B\xd2\xe1\x8f\xd0Z\xe5\x891x\xf2\x02\xf8\xf4 \xfap\x1f\x0b\xf0\x07\x81!f\x00c^2\x84\xfeR\x03@\xe8\xfb^\x18\x02\x13,\xfc\xa4\xbb$I\xe2\xcd\x89\x14\xf8(I\xbd\xc9%\xbaW\xb5j|j\xc8\xff \xcaC\x9b\x11\xa5\xc8\x85\xcc\x85\x04)\xbc\xd6\xe5\x93>6=\x883\xa6\x89D\xa23\xc1\xa4V.\xb0X\xa5\x9e\xc3S.`b&dE\x8f\xbc \xf0\xc3y\x11j\x0dp\xe7xi\x14'0\xf5c2I\x83k\x91\xe4\x85n\x94(\xa6D\xe3\xe2\x1a\xd2\x05\x81\x1fWq\xb4\xda\xa6D'\xf9\x11V\xde\xe4\xd2\x9b\x93.\xbcO\x08\xfc\x987\xd8E\x865\xff\xd3v~\xa4\xfbl\xe2\x05\x01mb\xd9\x85\x13\xe2Ma\x19\xc5\x84r\xae\x8b4]\x0d\xef\xdf\x9f]t\x97\xe4~\x96\x90m\xfcz\xbb\xe8\xc7\xb8I$<\xc48\xd0\xe3\xe8\x0c\x0e\xd0\xd93\xf7W\x15\xef\x18\x91x\xb7 \x85\xacS\"\x9a~\x82\x86\x97\x94\xf1N &?g~\x8cZEY\x9eb|\xb7\x9f&\\\xd4\xf2\x13\xf8\x91vD\xe9(\x0c\xbf\\\x1f\xb9\xbf\xae\xe8\x88Nn\x08\xa9]\xc2\x91&Op\x90\xaf\xe6\xbb\x17~8\xb5\x19\x19\xda\xeak\xc0\x9b\x8b]~r\"F\xaa~\xd7\xabF\x981`\xfc\xba6\xa4\xa3\xe9@v!3a\xbd\xb8k1_\xe1\xf0\xb6\xe7\xb6\xe7p\xe2p\xd0\xee\xa8(\x1d\xa9K\xfay\xdbS\x95\xbeM\x05[\xcf\xd7\xa9\xba(\xaa\x17\x93\x1eb\xd7\xb6\x96\xf2%W>\x8b\x92\x9b{\xef\xe9\xe13\xf1\x12\x92;e\x0fk\xaa\xf0\x9b\xf7\xba*\x85\xbb\xb8\xbe\x16\x14\xd06\xa5 `\x0d S\x84\xe6f\x0c\x9e\xb7\xac\x19\xce.\x99[\xd1\xbas\x8b\xb6I\x97\xacI|m_7x@\x97=\xdeS\xb9\x89\xbaD\x0bk5Bc\xa3\xa8\xb0.9r\x86\xcc\x913\xe4\x8e\x9c\x93\xa6\xdb\x95\x8d\x1c;\xd5\xe7\xa6\xd1\x0f|+n\x953\x82\xce\xc1\x17)O[9\x98\xc7\x8a\x83y\x1b%\xc2c\xd8\xb2}LhPv\xec\xae\xfd\x12\x8a\xbb\x10\x9fyuK\x0b\xd97\x83f\x03gs\xdd\x98Zr\xbd\x18Z\xa8\xad\xb39*\xaf1\xf1\xc5\xb5\x9d\x8d\xfbg\xad&\x02mt;&\x8c\x16\xe1\xa5\x1b\xbf\xaf\xf6\x7f\xd3\x8a\xcc\xcd\xeb\xbd^\xc5=\x8b\xf1|R\xf5\x85p\x00\xdc.\n9?I\xbd~B\xe6\xc7\x1fW\x85k\xba\x05-\xa3\x13\xf1\x9e\xa4\xfc7\x9c\xd3\x14I\xa1\x18\x95\x18[\xff\xf2/R*B\x0b7p\x835\x19\x91\x07\xc8^W\xe1\xc8\"q\xd1\x81\x8b\x11T2W\x1a\x80\xbb4\xc7\x14\x93\x12\xcb\xe1\\rjW\\i1\xb7\xe8*\xe4\xc5\xda\xcc\xb5\xfa\xebJ\\\x82\xfa\xa8O2\x00\x9e{\xa9\x94\xb1g\xea\xa5\xc4\x90\xb4\xa7\xf2%[\xdb\xe2\xdb\x98\xcc\xc9\xc7\x95\xc6\xeb\xd9\x84F\xed\xe0y^\x8f\xac\xfaT\xd1\xe2\xc4n8\xaa\x19\xd2\xd6\x1d\xc3\x8d\xc7\x9e\x98\xbd\x17\"gS{\x86\xd6\x1f\xc5\xac\x0e\xae@]\x05\x0e\xe6\x16#\xaa\x1bP[\x1a\xd3\x14\x89\xae\xfc\x17\xffH\x8a\x88 #v\xc5&g/\x08\x14I\x05F\x94\x95\x0e\xba\xf2\x8b\xc0\x055\xe8\xe7\xad\xccb\xebb\x01\xe5W\xfaw\xd4\xbe\xd5\xdf\xeb\xeewy0\x84[\xb5\xb6.\xc2\xec\xef=tLa\xc5\xfdV\xf6\xcf>\x7fu\xf8\xfa{C\xbc\x87$\xf5R\x7f\xd2\xae\xee\xaa\x08\xb4\xde\xa26\x8f\xf2\xba\xc1\x07\x0b?\x98\x1em\xfa\xd5\x9c\xa4\xcf\x199\xa0;P\xf9\xe6\xfc\xd5\xf1\xc9W\xc7\xcf\xcd\x9f\xbe\x0c\xfd\xd4\xf7\x82\xd3\x14S=l\xf4\xe9\x914\xdcM>\x8dI\x88\xfe\xbd\xe2\x8b7\xaf\x8f\x8e\x8d \xe4[\xe8[?\x08^\xb1p\xaa-@\x92\x7f\xf6\xdc\x9f\xde\xe2+\xda\xd9 \xbb)\xd4\x80\xd4\x84G\x8b(\xa3\xe0\xe0m\xbc_MK\x10m;I\xf5\xbb6\xe3}\xeeOo\xf3\x19v\x17.[\xc3\xe7\xfd\xeb\xd3\xc3\x17\xc7\xe7\xb7\\\x13\xdd\xd7\x1b\x03Y\xd7\xc8\x06S\xcf\xb0\xaa\x94\xcf\xc1z\xf3\xe1\xf8\xe4\xe4\xe5\xf3\xe3\xf3g\x87\xa7\xc7\x1a\xe6\xa7\xda\xce\xc4Htp#\xc6\xfe\x9aLq7\xbd\x88\xa3e\xcd\x8el\xd3\xd7\xcc\xd8\xd7\xd4OV\x81\x87I\xceZ\xb2\xe4\x80\x84W\xfa\x0eT\xbd\xaex\x0c\xd7F\x82\xa6\xb6\xee\x8d\xb2\x9c\x9a\xd8\x9e\xf2\x93\xdf{\x84\xec\x9e;,\x85\x86\x0b;\x1d\x87k\xb4\xc7\xe1\xd9Fw\\\x1aR\xdaz\xdci\xb7\xf25f\x1b\xfc\xfb\x8d\xab+\xd3\x060\x85\x9a\xa1\xddzT\x86\x01}\xc6X*g\xc7\x06\xc3Q\xbe\xc5\x00G\xea\xbb\x11L\xed\xca[ly\xa8\xad\xbd\x11BJ\xa7\xf1\x06\xc3^Il\xaa\x00a\xfenS\xf8\xe5\xccC\xeb\x01l\xb5\xaf\n\xed\xf6\x10\x94\xf7\x91\x1f6\xb7*\x1e\xc1\xe85\x1b\xf5\x8b\x07\xc7\xa3\xda\x02\x86\xadm\x01A\xe8\xbd(\xbb\x88W\x9d\xed\xba\xa5Odo\xf9.\xfc \xadhy6\x9b\xef\xa3\x0c<\xbc\x10I\xc9r\x95\xfa\xe1\x1c\xd2\x88gi\x07\x0fb\x92\x90xM\xa6\x88)t\xa4.\xfc\xf8\xc7\xe4G\x17\xd2\x85\x97\xf2\x03;\xfc\xe1O)\\\x10\x88B\xbc\xa9\xb1\xf8\x8aZpI\xae\xbb\xf0\x9c5\xe5cn:/,,\xa6E\x8b\xf8\x86x\xd3\xc7\xb4\xce\x95\x1f\x04\x90\xa4\xf4\xff\x17\x04\xbc\xc9\x84$,94o\\\xb6\x17\xff\x93>t\xbe\xe9\x11z/\x04\x9a!\xee\xb5\xeeA\xf5\xd7&\xab\x03\x12\xcf=\xa9.4\x1c\xc0d\x1c\x9eqE}\xfbq@!^F\xb6\xee8D\xbd\x87\xe7\x82\xd5z}\xe9RR\xc8^GY,\x19\x0b\xe3\x0dY\xba\xf0B\x88\xc2 \xe9\xc2\xbb\x85\x9fP\xc8\xcf\x02\x7f\x92\xc2\xd2\xbb\xa6k3\xcd\x08m\xc9c\x87Z\xd7ba\x99\xd7\x91?\xb5Q\x8f\x8ct\x0bo\xad\xe3\x86\x80\x93\xf2S\x7f\x01,?\xbc\x13}\x1ch\xf5in\xd6\\\xe3\x86Q\x99Mh\x9a\x97\xa5\xd1\x85\x1fN\xcb&\xf7\x1b\xdcA\xeb\xd3\xfd\x80d$\x98\xa8\x88E(b%cbF\xacs\xcd'\xf7\xeeQd*\xb3p,tm \x8f0?\xc3\xcc\x9b\x10\x13BEk\x12\xc7\xfe\x94\xa3\xd4,\x8e\x96\x1c\xa9\xe8\xd7\x90\xac\xc8\xc4\x9f\xf9\x13\xb40\xef\xc2q\x98d\x0c\xc3RVkI\xd2E4\x85\x10\x93\xd1N#\xbc\x01\xa6-\x06\xde\x8a\x85\xf2\xc4\x91\xf0jhjH\x1c\x97\xdd\\\x94\xb7\x82\x08\xbb\xfb\xe9\x93\x96a\xbc\xcd\xcc\xbe\xc8V!\xedn\xe3\x90q3\xa7\xf00\x11\xa5\xc8`\x1cZ%\x0d\x7f\xaaL7K(\xd9/&\xc8\x160\x8a\x8bAQ2\xceg\x02/\x19\xe9v\xe1\xa7,I\xf9\xb71\x99g\x81\x17\x17\xb6\xf4.=w\x08\xda\x86n\xde\xff\xc6\xbd\xe9 \xea:\xcf\xd7T\xa8\xe1\x8c;\xde\xc7\xfb\xa4\xf3\xf3\x98\x0e\xf60K\xa3g~8}\xeb\xf9\xb1&\x863\xc8\xac\x83G\x8f\x96P\xddf\x19\xcb\x14\xdee\xdc?.)\xff\xedh\xa3\xd0\x8b\x07\xd7Xm\x8c\x19Vxx\x8d\xd5x*\xad\xb9ch8\xf6Z\x98\x8e\xadp\xda\x95\xfe\x9a/\x02\x03{\xc5\x12\x01\xcd\xaa_;0\x1b{gt\xd2\x93\x86\x96jbQ\xcb\x0f\x9d\xd3BG\x00\x9bF\nu\x86\xd3h\xbd\x82\x01\xc4W\xe8\xe6\xd6g\xa4\xa2+(y\xbb\x13\x0c-\xf5\x9b\x16E~\xd6<\xa4w2\xf6Zr\x8f\x80\xfb\x1b\x03\x9b\x9b\x99\x80k\x95\x00\xf2\xd7\xea\x0e|\x1f\xe6V\x04\x94D\xc3*\n\xfc\xc95\xfc1A\x94\xbe$\xf8\xf3jAB\xb6\x03\xe7\x14\xbd\x8b\xadI?Ab|\xcdV\xbff8\x07\x10\x8f=\xc6\x13\xd0\x1f\x14\x19`\xa8\x1b!\x8b*\xcc\xea\xae\xf3\xba\xed\xa0\xcfCT\xf3\xaf'\xcd\xf0d\x11\xadY*\x16\x8f\xf6\xe3\xe6\x1f\xd7~[\xc3+T\x8f\xf8V\x84~a<\xef\xcbbIds\x8b\xb2\x9a\xfc\x01\x9a\xf7\xc4\x05kI\xe29\x11\x89\x97^G\xcf\xb3U@\x0fd\xf25\xb9Nlg\x08G^H\x8f]\xac\x06a\x14n\xb3f\x12$\xe0\xc4\x01\x8d\xc8\xc2r\xa7\x95.\xf5\x90\xe1k\xec\xeb]\xcc-ZXo\xe9U\xc4\xe9w\xc2\x8e{\xca\xe9'\xde\x92P\x14\x1c\xe2\xd1\xdb\xead}LA\xb4\xc2\xa8\xb3\xf4L`Vr\xa2\xea\xc4\xcb\x12nNv\x15\xa9j[\xdb\xa1G\x9c\"L\xdb\x8e\xe088\xdfMw@i\x9c\xf4p\\\xd0\xb7\x97\xe4:\x11,0gL\x0d.\xaa\xc2\x86\xb0\x15ZL\x9bL\x11e\xf6\xd2x\xee\xa1OI\xd7[\xad\x82k\xccE\xe2\xe6\xde \x89\xc1\xd1\x91>(\xd4\x1a\xbe2\xdf\x8f\n\x9b\xb8\xc2\x11%n\xae\\\x18{\x84\xe6\xd3\x1bC\x1ek\xe2G\x83t\xebf\xfbl \xf0\x87>\xd9I\xbb\xfd\xb8\xfel\xc0\x1b\x01n\x04\xea-\x87z\xdd(*\x10f=\xa7\xbb%\x16`WzR[\xd1\xe77\x06\xfd5A#h@X\xb4\x9e\x9f\xfb ~\x84F~\x9a$\xeb\xa0'\xa9U\xa4]6\x0f\xb0\xa4\xaa\xbf\xf5\x18\xf5\x06/\xad\xc6xn\x1c#\x8fY\xce/\x90Z+\xb7p|L\x1f\x1fwI\xf8sF2r\"5\xc51lc\xe95\x9fpK8 c\x9c-\x15`\xb7\x87\xd5\x859\xd90HV\xa2\xf6\x85|\xab.\xf3\xf6p\xae!m\x05d\xeb\xc8%Q\xaeT\xe3\x1a{P(\xd0\xa4*,\x88|p\x94\xf9o\xecY<%/\xc2T\xdb\xaekP\xf5Cg\x04\x83\xa6\xf6A\xd1Y6\x8b\x05\xc0%\"2\x0e\xa1\x03\xfd\x16|*&\x84\x181\xca\xe4\xdf6\x10\xc2\x0d\xa2\xaf\xc8\xb3\xb7\xe2\xda\xedj\x96c\x91\xd07&3\x0cj\xe6\x96\xf6\x850R\x0f\x0b\x93\xf9T\xe4\x172ODh\xef\xf0\x13\x85U\x80\x03\xedk\xdbiT\xe8E\xb6\x865\xf3\xd0\xb0\xaelO\x86\xcc\xf4\x1f5]\x0caI%_\x8e\xfe\xb9\xbf:\xe5]h\xd7\x16=\\\xe4\xeb)*\x050~\x9fR\xc1\xc4\x97.\xee,G\x81\x88\xa7\xdf\xad\x0d\x12o\x8c\xca\xf2\x92\xb5KH\xae\xe0\xc2\x95_\x96\x82\x88`\x8ef\xb9P\x87\xe2<\xd5\xa0'\x12\xdf\xdb+\xd9\x02\x9c8\x8e\x0b+\x9b\xb80\x17?R\xf1c\x89'\xacz-\x82\xbe\x08\xdd\xa9rS\xa2V\xb3\x1d\xd4U\xc8\x83c\x17\xed.XR\nx\xbb\xdb\xedR\x86\xb9\xaa\xdab\xcb\xe3/W\xcc\x1c\x05<\xf8\x915\xf0#\xe7$\x91\x99N\x1cy\xfe\xd3E\xa64'\x13\x8fJ\xb4\xfc\x83A\x14\x92\xffJ\xcb~ \xca\xad\x8d`p5\x80e\xd1\n5\xa9\xd3Y\x80BM\xc1\x0c#\x12j\nD\x04BM\x91p\xd8\xd3\x14\x89(\x83\xba\"\x1eWPS\x84\x91\x04u\xefE\xc8@\x8d\xd62\x8fa\xa6\xf9N\x0er\xa5\xf9\x94\x85\x052N\xcc\xf0\x15\x8f\xc8a*a\xc1\x174\xa5\xdcU\\7\x05\xe6N\xab\x98\xc3jy\xbe\xb0j:\x19\xbb\x10\x96L'C9\x9f\xeag\x10\x0e\xee>\xc9n\x00\x8a[\x13\x17\xac\xf3s\x92\xbc\x8a\xa6Y@,WA?4\xaa\x1f\xca\xd2\xcc\x0d\x1eI\xfc\xf0\xa9\xa3\x1e|\x8aUt\xce\x85\x98dh`\xef\xdeE\xab\x0b/\x1eB$\xfa\xa9\xd42Y\xad\xde(\x84\xd2\xcd\x89\xfc\x8e\x86*\xda\x94\x90\xfa\xa8\xf9\x89\xbb\x05\x14\xe0\x00b\xd0\x8dMX\xd9V\x1c\xb6\xe0\x1f\xbe(\xd5\x03be\x87v\x7f\xf7\xa1\x9a\x03\xd4\x17E{=]^QVT\xc9\x1c\x9a\xe5E\x95l\xa4^^\xb4\xaf\x16%\xdcfU=\xa8&\xcc\x0fWy;\xa3+\x82-\xed\xef1\x9e\x88\xae\xdb\xae\xa3\xb6\x1a\xf0\xf3l\xdf\xd1\xa5*]\x19\xcfg\xd4'\xa6\xe5uN\xeb\xd7\xd9D\xcdoJ\xd0^\xd4r\x07\xd2\xb9a\xba\xff\xb2{.\xf8\x02\xd7\x1d.\xe9\xea\x9c\x7fho\x88\xb8=\x172\xf5\x03\x9br\x9f\xc8v\x9d\x9f#\x13\xd6s!.*\x11\xc7a^E\xb9 \x1d\xea\\B\xc5\xa5|7\n\xdf\xc7\xc1\xd1\xc2\x0b\xe7\xa4\x95+V!\xe6\xa5^<'i\x9dCN\xd4MH\xca\xc4\x00\xb3\x80\x97\xc5\x81JE\xc5\xa3\xf1\x8b\xbeq!\xea\x06\x917=]\x91I\xab\x01GL\x0e\xebR\xa6\xf7\x10\xeb\nA\xeb}\x1c\xa0\x87\xb9\xae\xc64\xba\ni7j\xba\xf3|\x0c\x08\xb7S\xcc\x8e\xd0j\x18z\xb8\xa1\xe7\x9ax\xb3\x88\x89\xc1.\xa6\x98\xb2Mp\xc0\x14\xae\xd87\x99\xd2Y\xe0\xcdrw\x15\x935 \x85t`\x1b\x06.f\xf6>\x0eZ\x0d\\\xea;b\x82W7\x8b\x83\x0d:\xc4\xb1z\xf1\xa4~\xff\x88G\xc0\x89\xa2u\xd0]yqB\xd8\xd7\x8e)\x834\x19[Y\x1cPq\xdb_z1\n\x91\xd6Y\x1ew\xd2\xac\x9c\xa5\\\xd8\x95\x1fN\xa3\xabn\x10\xf1k~\xdcW\x93\x08#\x1f\xdc\xbfoA\xa7Rc\x11%\xa9\xe6\xf5\xcaK\x17\xe6\xeeXmJ\x98\xf8w\x0b?I\xa3\xf8\xba\xfa\x06/v\x98\xcc^-\x93un\\\xac\xb4,\x97\xc5\x1c<\xa0\x83e@KH\xec{\x81\xffK\x0e8]\x86\xde\x9b*\x1am\xb4>b\xd3\xccIz\x14\x853\x7f\x9e\xd8\x0eE\x8c\x84\xa2\xf4\xd8\xa0p\xc1I\x11I\xc7\xc4n\x86r\x899\xef^\xe7\x12Pj\x88v\xc5]\xb2\xf0B\xa7\x0d\xa5\x81<\xb5 \x99\xbe\x0c\xa7\xe4\xe3\xd0\x90\xc2\x1e8\x03$\xe1\xae1\xcb\xb1\x89FE\xe1\x0b?HI\xfc\xc5H+\x03\x7f\xe0]GYZ\xa6k\xacc\x9d\xfd [t\xae<\xd1\x0f\x02\xc9q\x8a\xb4\x90\xa1F\x14'\x14\xd8\xa6\xf8\x92\n@\xab\xfap\xdag\xe9\xa5\xd6\xf9\x88b\xae'\x9dbL;B\xdfF\xa5\xb7\xe3\xea\xa8\xf1\xbe\xcd2\x1a\x98kl\xc29g\xd5\xbc\"L\xd9\xd4\x8cYf\xa0\xb5\xc6\x992\x88T^\x10\xf4\xf3D\x9du\x8b \xd6a\\\xcau\x86f\xa5*\x11Z\xc5\xea\x8e7\x7f\xc4.q\x9a\x08\x02\xde\xa8\xd1\x1d\x1cr\xa2P\xb7\xe9\x0b\x15\xb0\x86\xe0\x9bU\x981k\x7fc\x1a\x03Hg0v1F\xc7`|e\x0bl\x10OkZ\x03z\x9ch(j\xbc\xb7o\x81D\xe2\x06\xec\x8ep\xe86g\x02\xe7\xd7\xa53\x816\x94\xf3\x1c\xe9\xb8\xd0\xf8vK\x10=C>\xe4\xf6@`Z\xce;\x9dy\xc3\x1eb\x80\xd1z\x07\xca\x0f\xbb\xfb.\x11\x13s\xe5\xb8h\x18!n\xae\x89\xf7!\xb6\xf5\xcc\x98pU<\x11\xab\xf8\x8d!i\x9fx\xd0\xc9\x8f\xae\x93\x1f\xce\xb9\x95b\x97\xffIwHVK\x1e\xbc\x9a\x9bqk\xe6\xf9\x01\x99\x1a\xda\xc4\xf3\xde\xebN\xa2\x00\x15\xf3V\x8c\xd9=!S\xdf\xff\xff<\xcf\xab\xb3\xac\x0b\xd0\x11\x80\xe1\xa7y\x9c+\x83\x0f\xa2x\x16\xb5\xf72<`\\=I\x9bb\x17f\xfa\x15TIW\xd3-+}\xa6\xccFh\"\x8eO\x9e\x9aYh\xadE:?\xdd\xfeP\x1f\xdc/5\xb6\x87\xe2\xe1\x1b'\xa50\xad'v.\xe7\xcek\xac\xa4(\x03\xb6j\x98\x03\xcb]\xd94\x054\x07e.S<\x9f\xdd6\xff\xb0\xf6\xb3E\xba\x0c^Dq\xfeQ\xd5uK<7.\x18\x87\x88\xf9\x95\xf2(f\\`\xf4\xf0\n\x86\xa2\xad\xf9;\xd6g\xd3\xdc\xfci1\xbe\xfa\xe9L\xfd\xc4\xbb\x08\xc8t\x08Y}\xc5(d<\xeb\x90\x116I\xd0\xad\xff\x8e\xaf~PO\xb0\xeb\x808uLL63{[\x08b+\xc9\xb0\xcdH\xc2\xd2\xac\xd6\x01RF\x10\xd1\xf4v\x16\x07\xdb\xfcS\xe3\x87)\xaa\x8dY\x9a\xad\x1az\xaa\x01({c\xfeFl\xa5\x02\x94Y\x1c\x98\xab\xb7Z\\\x9e#\xd1pi\xea4\xef7\xffV@\xe4\x19\xbek\xe1\x13\xf8\x93\xcbaem\xf5\x03u\xc1:\xfe\xb8\n\xa2\x984\x05;3\xa2\xc4\xd4_\xb7F\x88\x14\xb5\xd4\xfa\xcd_\xb7\xf17\xe9\xe3*\xf6V+\xf2\x85;a\x13\xd9\xbem_\x91 b\xe6\x8d\xb6\x9c\xd7\x0efA\xfc\xf9\"\x1d\x82\xb5\xd3\xab\xc1\x86+\x7f\x9a.\x9a*%\xf1d\x0831\x90\x1a6#\xa0\xfd\x9d^y\xf39\x89\xe1\xfdK\xc3\xack q\x89\x80'\xac)\xcb\xa9\xfb\x04\x13v\xb7]\x96\xd2^\x11\x8bS\xb7YN\xb3\x8b\xa5\x9f\x0eaaZ\xc1Uw\xe9\xad\xda3\x0b\x92\x04\x9et'A\x14\x8a\x898\xf4\xd3\xfa\xe3\x87q\x06f\x9an\x92\x7f\x1d\x1d\xa5W8\xf73\xc7\x95\x9a\xbe\x91\xa8R\xceCK\xdb_\xbe\xacb\x90Qojd\x18\x94\x02\x80`J~\xccxy\x7f\x15\xce\x1f_x \xd9\xdfu\xfd\x0f\xcf\xde\x9c\\\xf5\xbe\xfej\x1e\x1d\x1e\x1e\x1e\xbe>}\xbf8~??<<|\xb6K\xff&G\x87\xaf\xe8\xbf\xaf\x1e\x04\xfb\x7f\xa5?\xbe\x7f\xf1\xec\xd5\x87\xe3\xf7\xb4\xc2\xfb\xd9\xd5\xad\xfe\xeb\x05\xbf<\xbb\x1f\xf6\x9e\xcd\x16\x1f\x9f\xad~\xba>\xea}\xdc\xbd\x7f\xff\xfe\xfd\xce\xcf\xeb\xdd\xa3\xbf\xac\xfa\xcf{\x8f:\x9dY\xbast\xff\x97\xbd\xfb_\xf7\xf7\xef\xbf\xdfy\xf0\xe8\xfd\xec\xea\xf9l\xef\xe1\xfd\x9f\x1f<\xea\xbc\x8f\x07\xcf\x07'G\x97\x8f\xe8x\xfe\xfc\xdd\xc9\xe9\xbb\xe0\xd5\xe1\xf1\xf1\xe1U\xf8\xe8\xfe\xfd_v\x0e\xe7\xeb\xdd\xfb\xeb\xef_>\xbf\xaf>\xef_\x91\x9f\xfc\xfe\xe5\xe1\xe1\xe1\xf3\x87\xa7\xefO\x9e}\xf8\xf3\xfcY\xf0\xb7W/\x0e\xa3\xbf^=?|w\xf2\xf1\xe2\xbbg\x0ff\x9d\xf5\xdb\xaf\xc3\xe0\xbb\xc3\xbf\x85\xfb\x97\x83\xc9l\xe7\xf0\xd1/\xf7\xdf\xce\xde\x1c=|\xf9\xf2\xfb\xd0\xdf{\xb1\\\x1e>{\xf5\xf0\xc5\xab\xc5\xd5\xbb\xfe\x83\xc9\xa3E\xb8\xf0\xff\xf6M\xff\xe8j}\xfcM?]\xbe}\xde\xfb\xf9\xf4\xeb\x9f\xf7\xe7\xdei\xfa\xed\xfd\xcbW\xdfy\xe1\x87\xe5\xe1\x87\x93\xe7\xef\x83?\xf7\xdf\xac\xb3\xec\xdd\xcb\xd7\xd1\xfe\xe5\xa3\xde\xe9\xc7\xd9\xc3\x9f\x937\xe9\x8b\xfd\xf9\xeel\xd6\x8f\x92\xb7;o\xc2W\x93\x0f\x0f\xa6\xbb\xab_\xa6/\xdf\xa7Y?:\xdc\xfd\xd0{\xfe\xb7\xe8\xeb\xe5\xc7ep\xfc\xfd:}\xfe\xfe\xa7\x9fNw\xd2\xe5\xd7\xcb\x9f\x9fuV\xdf_?\\=\xef\x7fx;{\xf0\xd3\xdb\xe3\xde\xcb\xdd\xde\x9f\xff<\xf1\x9e]\x85\x19\xd9\x9f}\xf5\xcb\xfc\xfat/\xfd\xee\xe5\xfbG\xfbo?<\x88/\x9f\x7f\xfb\xe7\xd7\xdf|\xe8=\xffz\xf7\xc5e\xf4\xf5\xf2\xc5\xea\xf5^\xf4>\\\xfb\x0f\xbf\x8e\xc8\xe1\xe0\xfe_\xbeK\x96\xdf\xfd5\x8b.?\xf6\x12\xff\xa4\xff\xd5\xc3\xf4\x9b\xcb\xd7\xfb\xe4\xd9\xa3\xe4\x9b\xab\xbf\xac\xee__/'\xd7\xde\xdb\xfb\xef\xe2\xb7\x9d\x93\xb7\xcb\x8bW\xaf\xfc\x8f\x93\xbf|\x98\xbf;\xe9{\xef\xff\xf6h'\xfa\xea\xbbd\xfe\xdd_\x0f\xbd\xaf\xf6\x8f\xaf\xe8\xb2\x1c\x9e\xbe\xff\xf0\xe6\xe4\xeb\xbd\xa3\xef_\xbe\x1c}F\xd0\x19\xd2\xbd\xb8N\xc97Lj\xae\xd3.\n\xad\xe2\xc4N5\xf2\x18\xaai\xc6=\x8d\x84\xc34-\xaa\xe9\x1c'\x16;\xf0\xcf`\x87\xd0\x81\xd8\x81\xfb\xb0\x0b\xdb\xd2]\xe9\x8d\x0b\xa4\x9bF\xcf\xaeS\x82\xa6a\xf5\xd7f\xb9\xe9 \xb3\x10\xc4Q2\xcb\x17:*\xe6\xfc:\xee\xf3\\\x14!\xb9\x82\xa8\x92\xe4\xa7\xc6N\x03\xc7I\xa0C+\xb1q*f\xc3x{\xe6BF\xe99%\x06=\x97\x05q\x86\xa7\xd0\xc3\x0b\xe2m\xd8\x85!\xad\x120\xfb\xc5\x00\x9e\xc0\x8c\xfe\xd3\x19\xc1\xae\x83\x90\xf5\xc7iw\xb2\xf0\xe2\xa3hJ\x0eS;p\xce\xe0\xc9\x13\xe8?\x84O\x95\"\xe8@\x9f\x17\x0f\xf4\xc5\x03V\xbc\xaf/\xddq($\xc6I\xa7\x83\xe6\xfa\xf0\xf4)\xf4\xf7\xe1\x1e\x0c\xf6\xf6\xd4\xf7\x0f+\xaf\x07{{pO\x0d-5@)\x9bI\xcf\xe6\xc9\x18\x06K\xe7\xf2\xf4)\xecV;Q\x18\xb3~\xab^\xfa\xbdZ\x90\xed\x9a!\xf6\xf4)\x0cZ\x03\xc0\xd1\xa2\xb4WF\xe0Y\x1c-o\x87\xc2B\x97\xc5\x8d\x12\xe0\x8f\xb0\xc3\xc2=\x8e9>\xf782\xc36\xf8,\xc7\x83G\xff\xe9\x8c\xa0\xbf\xbf\xf3p\xc7\x81\x88\xb1\xe13\x8a\xe0\x99\x8b\xd1n\xb1\x04\x9e\x82\x07\x07\xe0\xc1\xb0x\xa7\xb2\xc0\x0c\xd2>\x1c0@\xa7c\xda\x0d\xdd?\xbc\xd1x\x8c\xc0\x19\x9c\xd1\xcd;&\x0c\xae\xf7`\x7f\x87\xbe\xb0F#\xcbq`\xc8\xb1\xc2\xcf\xd7\xcbf\xed\x0cp\x1d\x1e:\xd016\xdc\xef\x89\x96)b\xe4-\xf3\xae\x06RW\x15\xee=\xbf\x93\xfe)\xf2C\xdb\x92\xec\xb4$E\x91d\xc5\xc9 \xea\xf3\x7f)\x84\xa5\xf8\xab\x92\x9f\xdc{?L\x1f\xb2u<\x90\xff\x18\xb2\x90\x88lQ\xac\xc3gG\xcf\x8f_|\xf5\xe7\x97\x7f\xf9\xfa\x9bW\xaf\xdf\xbc\xfd\xeb\xc9\xe9\xbb\xf7\x1f\xbe\xfd\xee\xfb\xbfy\x17\x93)\x99\xcd\x17\xfeO\x97\xc12\x8cV?\xc7I\x9a\xad\xaf\xfe_\xea\xde\xb4\xc9\x91d9\x0c\xb4\xdd/k\xf6\xfe\xc2~q\xa4\x86\xdd\x99\x83\x04\n@\xdd\xa8F\xd7\xeb\xd7\xd3#55\xd3\xfdl\xaa\x1f\x9fH\x00S\xcaJ\x04\n9\x0dd\x82yTW\xcdT\xafQ\xd2R\xa2H]\xdc\x95(R\x07\x0f\x1d\xe4.IQ\xa4\xb4\x07wy\x99\xed\x9b\xf9#\xfa\x03\xfb\x17\xd6\xc2#\"32#\"\x13\xa8\xaay\xd4\xc2\xac\xbb\x00\xcf\xc88=\xdc=\xdc=\xdc\xafo\xbe\xec\xf5\x07\xbb{\xfb\x07\x87G\xc7\xed\x1d\x8b\xa7\xcbat\xa4\xc8g\xe9\xc1\x13HN\xa0\xdd\xf6\x1cqS+\xc3+b\xc18\x93Q\xd9s\xe8#O\xe7\xec\xe0\x9b\xa9z\x9e\x1d\xa4\xf4\x14\xc35\xc0O\xc0\x1e%c\x0e\xa4\x8b8z\x87\xc4\x13\xa3\xba\x15Q}\x99\xc3W\x178\x1bAO\xd0\x0b\x02\x1e\xac\xb2e\x1a\xac\x97\x98\xf0f\xaf\xaaE\xbb\xca\xef\xe7`\"\x95\xd7s\x9b.\xa6v-;\xfcN\"\xb0x\xad#\xbc\x03=\x0eq\xa3\xe4\xf1\xc8\x87\x8c0\xd3\xfeN\x8b%\xd7\xcc\xc3\xdcD\xf1s\xa4\xe0\xa1\x90\x85+.m\x90\xad@H\xff\xb4G\xb0\xeb \xc2\xd8)] Jr(\xf5\xec\x1f\x1c\xf6\xfb\x07G=\x8a\xd7\xf4 \xba\x8c#\xa6St\xdd\x1f\xf0'\x8c|\xb0\xe7\x03*\x9df\x02\xf3\xed\x88y\x18Q\xfc?\x92p>B\xc8\xa0\n9\x90\x00\x07\xbb\xf0\x08\xa2\xea\xad+>}\x99f+\xe4\xdf\x82\xb1\xd5\xb1d\x0c\xea!\x06\x1d\x0c(jY\xe7\xbaG\xbbZyC\x9eM\xd2\x8d\x897\xab\x0b\xbb\xa7\xa0\x02\x0b\xabM\xe7\xfa\x08>\x84\x80\xca\x02\x942\xa8\x12\x05\xdd\x17v\x9f\xce\xab\xe7\xe8K\xf80\x82\x04\xe7L}F\xd9r\xe7P\x85\xa3\x9f\x10\x9cb\xc3}\x18BO-\xb2\xe6E:\xf4\xb9\xa6\xea\x05K`\x04m\xa8\xe6T@\xc4B^\xbff\x14f\x01\x8f\xf8\x18:s6\x08X\xc0\xd3\xa7#\xe8\xcc\xa9\xe4\xd0\xa6;\x18\xe6t\xdb\x9d`\xf9\xc1\xfe\x01|\x88\xe1\xb2E\x03.\x88\xfa\xe6\xd0\x19\xc1\x91\xa3i\x91\"p\xa4\xb6\x14\x95[\x8a\xf3\x96\xb2\xbc\xa5l\xf3\x96(\x91`7 #\x07\xfb\xda\x87N\xf5\x06\xaa\xe1~3}5\xc2W\x8b\xcc3\x19\x9c\xc2+\xef\x15\x9da\xd8\x81\x1e\x15\xbc\x16\xf9\x9ck\xf44\xc8\xf0>\xf5\xd2Ew\x1d\xbd\xb3\x07\xec\xee[D;Z\xbe\xc8\xaa7\x17KU\xe3\xa8?,U\x15Q$\x94\xf6\x0ce\xe8\xef\xe2 \xad^\x93\xa9\xcdiBq\x9b\"6\x0b\x19\xcf\xd1\x9b\xd6\x1c\xe8\x91w\x9e\xa3\xb7o@o\xf4\xb00\xa07\xc5\xd1\xc1n\xce\xbc\xe5\xd1t\x06{\xb4\xc2\x12\xe8\xf0\xd0\xd1\xe3:\xc5\xe5\x98\x93\xd5H\xdf\x8d\x19/B\xa7\xaf\xa3y~\x85\x12\xd4\x13\xe8\xc1\xed-\xbf#\x8b\x8e\x1b,K\xc4\x13\x14\x8cq\xa7i0\x97\xce0v\xd4\xbbH\xd0-)H^y\xafl\x82>\xf2\xcc\x90\xca\xd0\xe3\x14lJ2\xf2\xc7\xbcJF\xbc\xe7tp\xb8\x0b\xb0\xae\xf92\x8ab\x1b\xbf.\xa3KZz\x87=\xf8\xe4\xd5\xc0q\x81P\\K\xa0\x8cM\x9d\xccq\xe0 \xf4\x91\xf3d\x9d\x0ee\xcb\x1f\x8e\x80\x96\xa7\x07\x82\x11\xee\x94%<\xa5\xfd9\x855\xec@\x02CXW\x10\x89n\x89\xa5CQ,\xa1E\x07\xac\xb6v\x9b\xd6\xb6\xc3j\xcb\xeb\x99\x8b1\xc9\x83(\xb5\x82Om\x82\xb5u\x18\xe6\xca\x8d\x05\xac\xb6\x11,q\xf8\xc8\xbd*E\x96\xe6\xf7F\xd0s\x9c\x13\x08hcG'(\x9f\xb5aQ\x88\xbd\x1e\xa5T\xed\x11\xcc(\xad\xdeAzA\x85\xa7:\x12\x94Qd\x0e\xe0\x96\xbe\xeb\xd3w\x83\x13\xf0\x19\xc5Q\xaa\xcf\x8a\xea\xb3\xbcz_W=\x7f\x15:0\x9b\xc2\xed\x08\xfa\x03\xba\xb1\xae*\x1c\xae\xe1P,+p\xca\xdb6\xf7\xea\x0c\xed\xdd\xc1Q\xe5\xc8[x\x85\x96\x1dk7i\xb2\xb8\x921\xd08\xdb\xc6\xdd\x9f<{\xfd\n\x1d2\xf9W\x9d\x87M\x9e\xe6fXI{S&yMW8\xccwS\xf2\n\xf9\x85\xdd@{[w\xa3\xf1\x9a\xf4\x0e\x92g\xed\xa8\x14\x0d]LPd\x87\xf6\xee\xae\xe2w\x1c\xf0GG{\x8e\xd6\xa57\xfa\xf1\xba\xf4n\xe3\xdd\xde\xa8KU\xd3(H\xf9\x185q\xbbh\xf9\x8a\xe3.\xf3\x11\xa7\xef9\x1b7\x0b\x924^g\xa5\x8eq\xa5j\x94\xcaxM\xd8\xfc\x9c\x12\x03\x161\xc1\xe0\xc3\x11\xdf\xd4(\x8a\x8bP3\xeclT\xf5\x83vN\xa0\x85>\xfaH\xf2\x92Rv\x00f\xee\x0fy\xbc\x0b\x9e\x94\xc0\x85\x16z\xce\n\xa7!\x96\x1f\xc19\xe1\xe34\x18\x85\xde\x83\xef\xb1\x84 u\xda\xf0\x88M\x15\xcb\\n\xa8g\x1e\x84\xderY7\xe4\xfa \xa1\x9f\x16\xfa\x13%]\xbe\xd4\xd2w\x83\xd3\x18l\xd84\x08\xf9L\x9c\xfb2su\xfa\xf1i\xa1\xda[\xf7X\x9ca\xa7:\xe7\xc5\xa9\xf3\xcd\xcd\x9aTN\x9e<\x80\x12\x0bV\xc5\xeeYf1\x8b\xe1\x11\xa4$\xf6.\x96E\xc0\x7f\xe5\xc2V\xd14{\xf2 \xbcb\xb7\x1a\xdb\xfa>\xbc\"\xb4\x8f\xf6\x1d\x17B\xfb\xf8\x00=\xa5\x8b\x0e\xd0\x96\x06\x1bu\xbb\xe07\xfd]\x1d\xc7 \xed\x03\xc7\xb6p\xb6\xd2(\xaez\xea\xb0\xeb\x80\xbb\xa6x\xe1\x94\x89u\x83\xe4\xa5\x98\xebM4\xc89\x85\xd2\x9eUyD\x15\xdc\x8a\xe3\x80\xa5t\xf8\xeew\xf3\xee\xe1\x9d[L\xb7U\x8d\xc9\x12\x97|k7\x9a\xde\x0dWt\xefAWtww_Y\xcb\x81\xd3\xe5w{\xbc$ .\xc3Mj\x92\xd7U\x9a\xca\xd8\x8e\xbbg\xd0\x86\xb8\xfb\xb1\x0b\x16\xabU1\"\xb2V\xd8\xe8\x0e\xa4I\xdb\x08\xa1\x9an\x9a\xeeU\xaf\x94\xf2\xa8\xef\xbd\xaa\x14\xc5p\xeb\xa0:\xbd,F\xfd~5v\xbc\xc7j\x19T\x8b'9J\xf1\xc9\xd3cj\x0b\xbd\x07C{p\xec\xd8F>-\\\xf1\xbe\xd2\xc4e \x068e\x9a,\x91\x88\xceQ\x0d}\xc8t\x9a?K\x8b\xfd<\x80\xce!e\xe9\xc9z\x19\xa4\xb6e9\x1a\xc7-\x1d\xeb!\xe3t\xaap\x9b\xf7\x8e\x0b\x87\xd0\x1aA\xc2\x82\xd5:<\xcf\x91\x9c\x1e\x91=\"\x8e\x93\xab\x89\xe8\x0b\x92%\x86\x1e\xabj\x85\x88R \xe6\x0cm/t\xces\x911We\xd3\xf3o\x9f\xd9F\x82\xee\x9cYC\xa2\xee\xfc\x84\x9e\x8b\xc0\xd7\xe4\x15\xcak^\xbbx&\xf5\xec\xbc\xd2\xb1\xdfnO\x1d\x17\xcf\xa1\xf4\xd0\x14\xdb\x0b\xa7\xebG\xa1\xef\xa5\xf6\xdc^\xa0\x02\x9a\xc2\\<\x89\xce\xf2>\xdc0\x0b\xcc\x15<\x85\x9b\x13\x07\x96\xec\x9e\xd3\xc2\xc5\xb3\xf3l|Cke\xe2\xc2xM't1^\x1b\xf4j\xd2MK\x18B\xb2\xc9\xe6\xd9\x90\xe4<\xe4\x81\x83\xd6w\\Cr(\x0elRO\xb1\xc3\x95\xbd\x19\x88\x8d\x7f\"\xb5\xda\xdf;vl\x8b\xd6n\xb9[\x88\xc65f\xb8\xc0\x8e\xa9`[Fp M7\x19E=\xf5\xda\xf9\xdc\xfe\x89A\xefv\x928\x1f\xda_xW^\xe2\xc7\xc1:\xbd\x9dy\xa9\xe7\xec\x04+u\xd4;\xe3\xcf'\xd7\x83^gr}\xf8b\xbasY-\x12\xb1:\xc7\x9f\x0f\xa7mg\xb8s\xb9RI\xdd\xd8\xeaZ.X;\xb2\xef\xb9\x19K\x12/\x0c\xd2\xe0K\xf2\x83x\xd9t\xf3@\xd8\x92\x98R5\x15\xd7~\xe8Y\xce\xd2y\xb4n\xb4\x12 k\x95\x85\xde>\x1d\xf7\xa6\x0e<\x85\x8e&'\x95\xed9\xdc\xd6\x84\x8a{\xaf\xbb\xa2\xd2\xb3\x1d9\x8e\xb0-1\x0bm\xdcMI\x922\x15\x8e\xe5]DY:\xbcXz\xe1[\x0b\x86\xe0a\xc4<\x19hB\x81M0\xa0\xc0\xe3\xdd=\xbd@\xb4\xbb\xbf\xeblc\x1e\xc6`\xf8\xdd4\xfa$zG\xe2\xe7^Bl\x0c\xd1\xda\xa6C\xa6t \x03\x96W\xe3\x9e\x1a$\xaa`\xbb!\xec\xe9\xc3:\xf4\x0f\xef\x1e\x98\x027Yy4[\xcaUE\xf7\x0e\xaa h\xf8\x04\xefU\xb98\x93\x05\xaad\x8f\x89\x02\x87U\x81\xc2\x03\xae\xfeS%\x81\x98N\xb8\x14\x93e\xc8\x05\xcarIf 8\x85\xa4+\xf2\x87\xe5\x05\xebg\x0d\xb3\x12V\xe6\x0d\x03k\xf2\xa4\x8e\xfal\x80\xaa\xc2<\x92\x93\x1b\x06<\xdfX\x1b,K-\x9a\xc9E}8\x05_\xa4\xfb\xa3\x9b\xa2\xf2\x82\xe0\xc1DS\x19\xaf\xc2\xeaa/\xc3B\x15;\x1aA\xc7\xa3\xdb\xae\xd3\xa3\xbb\xad)~\x80\x89\x9dm.!t\xfa\xdc7\x83\x07\xc1K\xb9\xa2\xb9l\xf2f\n\x90\xd89\x81v;\x84'\x10\x9f8\x10\xf0\x00\x83<\xbcv\xa8\xe6\xc6\x16s\xfa\xa0\x18\xcb9\xa5!~.Z\xed*\xc7\x11\x15\x8f\x83\x1c\xd7TdfX+\xe5\xb2\xdb\x10\x1d\xcd\x87\xac\x88\xdf\xde\xc6\xf0\xa4\xa5\x12 \xae\x86(qW\xf5\xda\x86\x94G$5\xe8m\xc4\xccUB\xd8\x95\xb4$\xef\x95.\x06h\xdbf]\xd4/`\xcc\x9d\x06NE\x07B\x18\xc2\x8c,IJ\x10R\x8ap\xd8\x8c\xa8\x02\xf5\xaa+\x99O\xfa\xb6\x13-D@1\x88\xbb\xe2\xdb\xee^\x95\xe8 \n\xaeO\x92\xb5\xbb\xaf\xcb\x92\x85\x8c\xe0\x8eC\xc8\x0bhu\x83\x04%zSx\x01:\xa5\x01c\xda\x11\xa3H:r+>\xcc]\xe5\x149>\xe5\x88hZF\xb3\xb2\xbe|\xc2\xcb\xc7v\xe8B_:\x9e\xd0w\x93e\xe0\x13\xbb&\x91\xb27N\xa76\xa5\xaaI\x193\xef\xbeR&-H\x93\xa8 0^\xefe!0)\xdfd\xdc\xd7\xe1\x14\x02J\x8dQK\xf9\xe8\x11\x84\xf0\x94\xd9\xf4R<\xd7\x88\xa6\xb6\xd8\x03\xdbv9f\xa4Z\x99_\xf3P\x98YOx\xfbt\x08<\xc5\x1eS\xda\x1e@\x1b\xbd6P\n\x0c\xf9\x03\x1c\xa0\x93\xbf\x84a\xfc\x02\x87\x91\x7f\xfar\xc8_\x0e\xa1\x83\xceXO\xa1\xe7\xb2/#\xad\xd9\xf0\x8aG\xbc`\xac#@\xd6\x11\xc3\x13\x08N\x1c\x88Xh\xb1t\x1c\xd3\x9e\xe8\xfd\x11\xa3;\xe3\xc6~u\xb76\xed\xe2A#.\x19\xe5\xb3\x94m\xb7\x94\x1dp\x1bIO3\n\x18ZJ\x0b\x15\xc4\x16M\x08\xb2`\x8d'\x93lv\xd4\xebu\xe8\xdf\xf9|>\xad\xb8\xa3\xc7\xa2Po\x97\x15\xea\xed\x1e\xcc'\x93lN\x06\xf8sN\x06\xf4\xe7\xa07\xc3\x9f\x83\x9eZ\x05\x9dd\x0b\x9b\xd9\xf5\xc7\xac\x99\x0bSs\xe8\xd85\xfe\xbc\xa1S\xe8\xc3e\x9f\x0e\xe5Jg\xe4\x00\x8b\xcf\xe6\xf3\xa9\xf3\xd5\xe0\xbd\xa52\xf0\xf2`/\xe6\xf3)\x02|sC o(\xcfk~\x9b\xe7Fw,\x16\x89A\x95Y\xb1\x999\xe9\x11\xf6g>=\x15i\xefm\xde\xe9A\xaf7\xe3\xb5\x8e\xb9G\xcd\x94\xd3\xcd[\x0bEL\xc7X\x87\xe5|XU\xff\xce\xa5^\x8e#\xd1\xd5S+\x0f\xed\xe6BX\xad\xbf\xd2\xef%\x8cx\xb6X\x1bGg\x9f\x8e\x8a\x91\xe2\xa0\xe7\xd0\x06\xdf\x05\xeb\xd2\xba\xeb\x9eH\xf9\xa9r\xe9\xb0+\xc2w\xdf\xc6\xd5s\x898\x10V\xa3\x01\x8am\xac;\xb1\xf0\xd1Z\xe3\xc7\xff\xe5\xe7~mj\xddkd\xf5\xccY\xc8JvdS.\x9c\x1f\xf13<\xe2;\x18\xb7\xc72\xdb=\x1a\xf7rC\x02U\x13\x9f\xd31\x8d\xa8F\xde\xd7Pr\x14\xff\xa2\xdc\xdf/\x1d\xb7\xdb\xc1\x14\xe9y\x00O :q\xd81\x87\n\x06\xe98\x98\xa2\xeb\x8dA\x92l:\xcf\xd4`\x83A\xcfU=s\xa3\x96g<\xb9\xf6{\x9d\xc9\xf5\xec`r=;\xeaL\xae\xe7\x07\x93\xeb9~\x99O\xb2^\x9f\x92\x82\xac\xd7?\x9cOw.kpf[zx\x1f\xe4\xb2S\x14\xdfR\xc7a\x96q\x81>\x11]\xdb\n2\xdd}\x12\x0f\x9dJ\x90\x03\xebG?g\x0d\xc1zV!\x14\xd6\x8f\xfe\x96\x1e\xfc\xb7\xf5\xe0\xbf\xa3\x07\xff\x8fz\xf0\xcf\xeb\xc1\xbfI\xc1\x9e\x02\xfe-=\xf8\xdf\xe8\xc1\xffV\x0f\xfewz\xf0\xbf\xd7\x83\xff\x1e\x05?W\xc0\xbfC\xc1\xbe\x02\xfe'\x14\\M\x91j\xfd\xe8\x0f)x\xa6\x80\x7f\x81\x82\xab D\xad\x1f\xfd}=\xf8\x17\xf5\xe0_\xd2\x83\xff\x17\n&\n\xf8\x7f\xd5\x83\x7fW\x0f\xfe==\xf8\x1fP\xf0K\x05\xfc\x0f\xf5\xe0\x7f\xa4\x07\xffc=\xf8\xf7)8P\xc0\xffA\x0f\xfe\x03=\xf8?\xea\xc1\xbfL\xc1\xaf\x14\xf0\x1fQp\xf5\n\xab\xf5\xa3\xff\x89\x82_+\xe0\xffY\x0f\xfe\xa7z\xf0?\xd3\x83\x7fE\x0f\xfeU=\xf8?Qp\xa4\x80\xff\xb3\x1e\xfc\xbf\xe9\xc1\xff\xbb\x1e\xfc\x7f\xe8\xc1\x7f\xac\x07\xff\x1a\x05\xff@\x01\xff\x0b=\xf8_\xea\xc1\xffJ\x0f\xfe\xbf(8S\xc0\xff\xb7\x1e\xfc'z\xf0\x9f\xea\xc1\xff\x9a\x82\xab d\xad\x1f\xfd\x19\x05\xdf(\xe0\xbf\xd0\x83\xff.\x05?S\xb7\xc3oS\xb8\xa7\xc2\x7f\x9d\xc2\xdf,\x14\xf8\x9fSx\xaa\xc2\x7f\x83\xc2\x93jH#\xebk=Y\xfeZO\x7f\xbf\xd6\x13\xda\xaf\x91\x88+\xe4\xed\xeb\xbf\xa3\x07\xff\xbc\x1e\x8c3\xa0\x10\xc3\xaf\x7fA\x0f\xfeE=\xf8\x1f\xe8\xc1Hh\x15\x8a\xfa\xf5\xdf\xd7\x83\x7fI\x0f\xfe\x87z0\x92 \x85,\x7f\xad\xa7\xd6_#eR\xa8\xf5\xd7\xbf\xac\x07#\x99P\xe8\xef\xd7\xffT\x0f\xfe\x15=\xf8W\xf5\xe0\x7f\xa1\x07# R\xf0\xed\xeb\x7f\xa6\x07\xffs=\xf8\xd7\xf4\xe0\x7f\xa9\x07\xe3\x9e\xfd\xab\n\xf8\xd7\xf5\xe0\xdf\xd4\x83\xff\x8d\x1e\x8c\x9b\xf3R\x01\xff\x86\x1e\xfc[z\xf0\xbf\xd5\x83\x91\xd9\xff5\x05\xfc\xdbz0\xca\x00\xca\xc6\xfc\xfaw\xf4`d\xb1\n\x07\xfb\xfaw\xf5\xe0\xdf\xd7\x83\xff@\x0f\xfeC=\x18\xd9\xb7\xc2\xd8\xbe\xfe==X\xcf4\xbf\xd6s\xc7\xaf\xffH\x0fFv\xf2\x93\n\x18\xd9\xc9\x17\n\x18\xd9\xc9_W\xc0\xff'\x05\xbfU\xc0\x7f\xac\x07#'\xf8D\x01\xff\x89\x1e\xfcgz\xf0_h\xc1\xdf\xfc-}i\xe42\xd5\x981\xd6\xd7\x7f\xaa\x07\xff\xb9\x16\xfc\xcd\xcf\xe9\xc1\x7f[\x0fF\xd2\xabH#\xdf\xfc\xbc\x1e\xfc\xf7\xf4\xe0_\xd4\x83\x91 (\"\xcd7\x7fW\x0f\xfe\x05=\xf8\x97\xf4`\xa4\xdf\x8a\x90\xf2\xcd?\xd2\x83\xff\x89\x1e\x8c\x84Z\x91/\xbe\xf9\xc7z\xf0/\xeb\xc1Hc?S\xc0\xbf\xa2\x07\xff\xaa\x1e\x8cT\xb3\x1a\x93\xc1\xfa\xe6\x9f\xeb\xc1\xbf\xa6\x07#\xa1>S\xc0\xffJ\x0f\xfeu=\xf87\xf5`\xa4\xc8\x8aT\xf0\xcd\xbf\xd6\x83\x7fC\x0f\xfe-=\x18)\xf2\x1b\x05\xfc\xef\xf4\xe0\xdf\xd6\x83\x91\xf4VC\xe4X\xdf\xfc{=\xf8w\xf4`$\xa6\x8aP\xf8\xcd\xef\xea\xc1\xbf\xaf\x07\xff\x81\x1e\xfc\x87z\xf0\x7f\xd2\x83\x91\xc6*\"\xe47\xbf\xa7\x07\xff\x07=\xf8?\xea\xc1\x7f\xa4\x07\xffg=\x18I\xef\x0f\x150\x92\xdew\n\x18I\xaf\"\xe3~\x83\xa4W\x11f\xbf\xf9c}i$\xbd?\xa3\x80\xffD\x0f\xfe3=\x18\x89\xe9\x97\n\xf8O\xf5\xe0?\xd7\x82\xbf\xc6\xd5y\xa92\x1e\x9c\xab@\xe1<\xdf\xb0\xe3\x9a\"\xb9|\x83\xc2R\xa4\xc2Q\xb0|\xac\x927\xe4\x1bI\xe1\xcab\xf2\x08a\x8ex\xdb\xab\xe9\xee\xa3Q\x945u\xdc(5\x84tL\xa6\xa5\x17\x9aT\x895J!\x83_\xc8\x81>\x1d\x89\xa2q\xcbx\xf1~\xa3\xeaKo\xde\x12zc\xbcK\x92\xf2\xe4\xdd\xdc\xf2\xc6\x9c\x92\xe4\x81\xa3}\x93\xdb]\xb2\xc2\xee\x82\x1aL\xa6x&\x9b)\x9euv\x12\xf4 \xeb\xf5:\x93\xeb\xc1|r\xbd\xebu&\xd7{\xbd\xc9\xf5\xfeEgr}\xd0\x9b\\\x1f\xd2/\x87\xf3i{\xe7\xae6j\xd1\xc9\xf0>\x9d\xf4:_N\xc7\xcf:?3\xbd\xc5\xff\xbf\x1a\xb8\xef\x11v;\xeeu\x8e\xa7\xf4+{\xc8\xbf \xf4v\xfc9\xfb\xd9\xeb\x1c\xc3t\xe7\x8e\xdd\x0f\x99g\xd8Vv\xae\xdc\x085\x99\\{\xfedr}\xd1\x9fL\xaeg\x87\x93\xc9\xf5\x9c\xfe\x87\nV:\xe1l\xc6q\xca\xd9\x9c\xe3\xa4\xb3Y\x9f\\_0\x85k\x8f+\\\x0f\xe60\x99\xa4\xf4\xf5\x8b\xc9\x84\xbe\xeb\xf5P/;\x9fO&\xe1d\x12c\xa1\xc1\x11\xfbs<\x99d\xfd\x83#Z\xa2\x7f\x84\xd6\x16Z\x11\xfb\xd3g\x7f\x06\xec\xcf.\xfb\xb3\xc7\xfe\xec\xb3?\x07\xec\xcf!\xfb\xc3\xea\xec\x1d\xb3?\x1ek\x81un\x9f\xfe\xd9\xed\xf5\xaaq\xae\x98y\xcd\x826\x0b\xecm0\x9d\xcd\xda\x96\xba\xe1P\x0b=8\xe4\xc3>\xbc\xd0[\xc9\xe8R\xd3I\x9d\xd3\x99\x9a\x1fL\x98\xb6{r\xad\xda\xba<\xad\xe9Mt\x0d-A\x95\x06\x8dU?\xeb\xfc\xcc\x84)\xdaQ\xd3\xceT\xed\x93\xeb\x191\xd9\xd7\xb60\xe4\xf9w2\xe4\xa1\x89l\xbcq\xbf\x96\x92E-\xcb\xed~\x9e\xcer\xb6\x96\x8a\xce\xeb\x8b.x\xd1-\xcd\x07\xb7&\xdb\xa9S\xb5>\xce\x8c\xd6\xc7\x85\xc1\xfa\xa8\xb5\xb5\xe2\x1d\xe8\x8d\x0c\x92\x0b\xbdA\xf2\xaad\x90\xd4\xd7G\x9f\xcd\xca\xaf\xdd\x14&\x96\xf1<\x8fs\x8f\xf3\xdf\xa6\xd3\x86\x96:\xfbt8\xbb].oW\xb71\xb9Mn\xd3\xdb+\xe28\xa7\xdc^9\x8e]\x98\xbb`}`\xa9\xf6NX+\x15}t\xfb\xc9'\xb7\x9f\xde~\xf6\xe2\xf6\xec\xf6\xcd\xedO\xbd\xa8T\x04mX\x9a*+\xfa\xb7\xdc\xa4\x7f\xe2\x8d\xa6\xe6-\x17\xf7\xfb\x87\xf6\xe9\xb0\x7f\xf6\xe6v\xf0\xea\xa3\xdb\xdd\xcf>\xba\xb5O[\xe3\xfe`w\xeaL&\xb37\x7f\xcd\xb1OG\x93\xc9\x05\x92\xf1\xf3\xa9#\xbf\x93\xa4\xb7\x83pv\xbb\x1b\xcfJ\xef\xa4\x8b\xfc\x9dg\x9d\x9fa\xef\x04.\\I\x03\xbb\x97\x8dJ0\xaf\x9b\xcd\x98\x97Y\xe48\xa8\xe6\xf4a\"\xc7a\xd5\x05\x98'@\xeb7:\xd0V;\xcc\x82l\x06_\x12vw\x9b\xe7\xc6\x9cy\xa9w\xae\xcf\x7f\xba\xf0\x92\xc5\x10o\xb6\xc5\xae\xf2p\xe5\xad\xf1\x99\x1d\xd1q\x07\x1a\x0f)\x91f\x0b+(=\xbd\xbb\\\xa6\\\xc6\x11rYU^\xe3\xf6o\xc55\x97\x0bf\x8a\xdb\x8b\xc7\xe1\x03\xed\x9d\xdd\xc4\xec\xc8\xa8\xb3%\x87\xdb\xd9\x92Y\xd6\xcc%\xf1b\x1b-\xc8\x04\x03\xb9\xe8\xa4_1\x13T\xd2U\xfd\xcaD\x18\x7f;f\x1e\xeb\xe3\xfe\xb4\xde\xb4N?\x89\x9c\x0b\x92\xf6\x81e\xed\x92\xc1\xdc\xab\x11\x13x\xca\xf0K\x82\xf2i\x19\xb8\xf0(\x12fe`\x82%\xbd\xf2\x1d\x8f-/u\x1c6\xca\xd2Z\x84\x970\xb5\x9d\xf1d\xfa\xd5\xfb\xdb\xe9\xce%\xd2\xf1\x0f\x1eYR\xb1r3\xb7\xf9}\x07\xa7\xfb\xe1)R\xf4\x89\xed\xdc\xe2\x06\xea\xb69`\xea`M\x1f\xf4\xbb\x1f\x9e2~\xf5\xc1\x9d\xe9z\xcbn\xa1\x0b\x1b%n\xc2\x03\x01o\x1e`\x18\x8d!x\x0e\x13\xfb\xb3\xd2\x8d\x9f\xcdQ'\xcf\xe5\xa6$\xbe\xccs\xb9\xed\x8c?\xefN\xdb\x1f\xect\xc95\xf1m\x8cR\x16\xe0m\xa8\xe2[\xf7\xe5\x8b\xf3\xef\x7f\xf6\xfa\xcdk\xbc\x87j\xe1\xa5\x15\x8b\xdf\xf6Kb\xdf9\xefw\x99\x03W\xd9\x15\x7f\xbb\x99hE\xcc\xd9%\x08\xb7M\xfa)\xed^gl\x9d\x9f\xfbQL:_$\xe7\xc9\xc2\x8b\xc9\xec\xfc\xdct\xa7\xe8\xae*\x05\x8dc\xff\xc6\n\x83\xe6C\xdbf\xb3&\x18\x03\xd2\x96\x85\x87\xac\xe3\xd1\xa3\xdc5\\\xa6I\xe3T\xef\xe6Y\x90\xa5\x0e\x0b\x1e\xc6c\xc6\x90;\xcf\xbe\xce\xfb\xd3:?_F3/Y\x9cSF\x7f\x9e\xc7\x94;?\xd7\x1c\xb9\x14\xbf\xf4\xf2\xf6\xdc\x16\xb5J\x93$\xa6\xa3<\x17\xc1\x1cl\xc5\x83\x0b\xa4\xb33Q\xa6\x0fJ\xde\xca<\xc4P\xbe\xdau\x99\xf4\x85\x7f-\xbf\xba\x82\xd7]N\xd9\x8dU\xe12\xfe\xa0s\xff\xe3\x9f\xce\xfc\xda\xc2i\xf9\n;\x8e0\x90\xc6\xfd\xa0\xe3\xac\xc1\xb1\xa61j\xf6\xb2X\xf9\xe6a\x16;\xa8]\xde\x89L\x18\xeb\xbb\x10\xb2\xdb\xc8\xe8\xc7')\xd7\x08\xf7\xfa&L8\xb8/uh\x12I\xc6\xd3\x07\x12B\xb42\x08\x0b\xd5\"\x89a\xebe\xe0\x93\xa6\x89\xdf\x08\xb9\xf4Bo\xccPH\xbb$-;\x14\xc1\xb6l\xba;\x8b\x04i\x1d\x8c\x1aE\xba\xebh\x8d\xa9\xda\x0bl\xc4k\x15.t:\xf9\x1c\xb9\xd0\xbb\x13\xbb\x15\x93\xf4\x974\xf8\x90\xc7\x13+T\xb6\xe3p:\xee7q\x9f\x87\x1cI\xee\x8b[\x1e\n\xa5t\xa5\x9b\xb1\x0f\xdf\x93Mw\xb2:\xad\x18q\xca\xae\xb9E\xc7\xa7\xd5n\xb7%\x0c\xe1at\xc6\xb4\xe1)^\xb3\x0f\xc7\x01\x9dm\x96\xe0~\x83}m\x1e\xed~\xe3hM\x18\x14\x8bT\xa5\x0e?P\x99n\x96\xdd\x95\xfb7\x12#3r\xb3\x1b\xa1\xa9\xb6;\xf2\xd5Q\x8clb\xb1\xac\xdb\x12\x80e\xcd\x96\x00\x17Q\xb4$^\xc8!\xa7\x94\x0d\xf0T\xae\x16\xb2\x9d\x94\xae \x93\xc8F\xf7\x90)\xb7_\x8c\xd2&\xc0\xb5\xb8$\x1b\xa8\xee\xbf\xdd.0\xd6\xf4-v\xa1f\x03\x16\xdd\xd0\xef\xbe\x101QO\xd3P\xd7\x80\x95\xbbe\x86\x1brv6\xcaoW\xf5\xef\xb7\xedv\x8f\xf6\x1c;\xb4\xf7v\x0f\x9c\xad\x8c\x90\xe63{_\x7f\x1f\xeaPw\x18\x0b\xed\xc3\x83\xc696,s^\x80q\xb3\xcc$\xd0zE\xe0!\xdd]F*\x0c\xb7\x02\xbci\xad\xbe/\xeaH\x04\xb5\xdc\xd5\xd4\x00\xfc\xaed\x84\xe1*\xc3\xda\xbe\xcb\x1f>\x8e\xc4\xf6\xc6\xe9\x14/lx\x86l\x17\nT\x85\xd0^\xfa\x94\xe0\xe4\xd3a\x14\xe0}\xe4Jp\n\xde8AQ\xdc\xa7\x82\xaa\xaf\x91\xc7\x01\xee\xa3Q<2\xdc\xa1P\xe2\xf8p\xbd\xeb\xd1\xde\xd6\xa8 \xc8l`\xa2\xf8\xfd\x928\xf4\xe8\x11\xa6*\x18\x0f\xa6\xec\xd6*\xfd\xde\x9b\xba\x0c\xd8\x9fR~\x96\xb7\xa5\x18\x8e\xa1z\x04J)Af<\xd4Ub<\xdcu\xd6\xfa\x87\xd5\xfbF\xe2:\xa1N\xe5\xd5W\xd5]\x83\xa69\x14wx<\xddd&H\x98\xf8]|e\xf8\x18\xba+`i3b=\xe5\xa3\x0d{\x0e\x96\xbc\xc1(M\x0b\x17f.\xac\xd9\xaep\xe1\xca@1\x91\xee\xca]\xbeAO\x8b\x99\x0b\x0b\x17\"\xb8\xe5w\x0c\xaf\xe8\xa6\xbc\xa9\x1fA\xcd\n\x8a\xb7\xee~\xfak\xbc\xad[]\x91\xeaA\x94Yy\xb6:\x8b\xdeC\xdel>L\x91\x8d\x85dZ\x96\xcb\xfd\x0f\xdea\xb91\xd1\xdf\xcd$\xc6\x07j\xeb\x9e\xa2\xa1>|P\xbf\xaf\xf7b\xea\xf7\xaaV4$\xd5\xbd\xc6 \x1f\x9b\x1e\xf04\xc4\x17D\xf4\xcbh\xae\xde\xd7\x04I8\n\x0d\xb5@.\x1dQF\xe7 &\xfa\x042\x16C\x9aO\xabW:\x13\x96\x11\xbd\xdd\x0e9\x06Q\xa8Z\xbd2\x0e\x10)z<\x13?\x85F1YH\xc9\xf7\x13\x8c\xcd\x8cX/\xc8\xee\x1e\xeb=\xd5\xf6zz\x83\xe8^\xbf\x8a\x12\xc8{\x95@H>\x17\x8e\xaa\x885\xe7\xf0*\".U\xb1\x00\xbdI\x84\xad\xeb\x99\x08\xa2WuOY\x94K\xc5\xdeM\xb5\xc4L.\xc18v\xb5\xc8\xd5\xfd5\xb0B>\xb9q\xe1\xd2\x85\x95\x0e\xfd)\x9a$\xdalT\x17\xf8\x84h\x9e\xbc\x83\x11\x9c\xc3),`\x08\x9e\xf6\xddk\x18\xc1E^BW\xc7\x19e\xf4\xb4\xa2wT\xacY\xc3)\xcc`\x08\xef\x1c\xfak\xa6\x16\x7fA\x8b\xd3Z\xaf\xe5\xe2\xd7\xa6\xe2\xcfD\xc5\xd7\xean~F\xf9\xb9\x8f\xd62u#\xe3&\xf5\xe5`Q\xad\xbe\xba\xd7\xcey\\\xe23\x0c\xd5\\\xb3\xbb\xf2\xf6Zgy\x85+T.\xae\x04;s\\8\xa7\x909S\xfc\x06\x9aU\x1bB\xc4\xa1\xefJ\x0f\xd4\xb1\xb5\xec\x10\x1ea\x90|=\x8dz\x0d#8Cer\x1e\xd9\xc8:?g\x89\x0eg\xe7\xe7\xa6\x0c\xd3_\xc0\x08^H\xaf\x91\xeakzj\x87\xf6\xbe/\xea\x0e\x83o)\x8e\xc3)\xa4,\x984*Vk2H\xbe\x84\x11|\x81Z\xd8\xa28\xd1\xcbD\xc6\xc9\xbe\xb4\xdf\xba\xf0R\xcc\xe3J=&n\"\x03\xb5pQm\xb5\xf6L]\xbe;3F\x95\xd3qc\xec\xb1\xfe\xd4\xb7{\xbc\xaf\xf5\x0b\xc9\xbe}\xbf\x90\xaa\x8c&;\x88`\x01o6\xb3\xd31\x99V'\x83~2\x89\xbey\xb3\x19\x06\xb5* \x94#2\xaf\x8eLq\xe0\x88\xca\xbe\x1a\x99v~\xab\x93\x1b\xde\xcf\xe2\xb3\x91D\xc4\x99i\xe8l\xc48\x7f\x9cbXs[f\xf3t\x8aM\x90\xa6&\x8c\x08m\x8acx\xac\x8fi\xac\xb8\x9ad\x06\xa9\x81\xbbE\x1d\xeb\xa5\x80\xbd^\x95\xdf\xfb*_\xa7\"\xc0@\xe5\xfe9\x8b\xfe\x1e\xd3\x15WytI\x1c\xf8\xc8K\x15G\xd5\x92$\x80a\xd7k%\x81O\xbd\xb5N\x0c\xc8\x9f\xbfB\xa5v\xb5\xc8\x8d\\\x849\xb6T\x8b\\\xcaE\xce\x88\"l\xacJ\xcfQ\x97^-r^*\x82\xca\xf4j\x91\x0bE\xee\xf9^6\x9f\xab\x1d~W\x996\xef\xa7\x02\xf2\xaeZ\xe8z\xe3@\x94g(\x17\x9c\xc25c\x0b\xaf\xe7\x1b\x07\xfe\x13\xb4:v\xe1\xda\x85\x17.<\xab\xa2~\xf2.\xc0\x08|Z\x1d\x96\xef%\x04\xde\x0d\x158p\x06\x98\xcayA[\xa3r\x9e\xd0\xdb[`\xcf_\xcf\xe7 I\x8b\xe7\xecw\xad\x00B?)\x06\x10\xbb\xc0 vy\xf4T\xf6K-\x8f\x1d\xbd\xd0w4\xb7|6\xf5\xb6\xf5\xc2\xa6\xc4=\xc0\xab\x1e\xec\x1bqtY\xbf\xb1\xb5\xa5\xda\x1a\xc2\xd7\x06\xf8Um\xef\"\xbb\x9d\xba\xd0\xd6i\x9d\xf1\xedE\xed\xdbi7\xf4V\x84\xe9/\xf1\x1b\x06jY\x91$\xf1.9\x98\xff0T\x7fc\xe8\xf4\xaa\xbeYfYR\x83\x88\xe6\xef\xcf\xf4\xef\x0bQ\xcd3\xbcvi~\xed\x0b\xe6.P\xcd\x1d&>\xb9Xf\xd3\xfa\x13\x0ch\x8d'\xbd\x96\xd0P\xa0\xb4\xfaE#\xf6 \xe9\xed\x19\xd74\x98\x9b{\x9b\xd7\xf5\x16\xe7\xc3 \xaf\xc1\xed\x08\xe6.<+\x0e\xa2\xe6\x86_b8\xc5\xd7\x88\x88\xaf\xd1T m\xe0Zy\xf0Y\xa1\xb1q\xe1\xa5az\xcf\xcd;\xba\x10\xe3\xcfD\xccJ:\xa83\x11M\xb6\xf4\xa2^v\xbc\xbb\x11\xdb\xe9\x16 3\xf5\x94\xed\xae.i\xdb\xca\x87<\xad\x0e\"\x8cA\xf5\xa5\x89\xb7\xaf v\x85\x15\x8e\xdbm2\x85\x11:\xf5\xa7\x95\xcbq\xce\xb7\xa11\xfbv\x86W;65\xa1@\xd3\xb0\x8cx\xb0\xd7\xd3i\xcc\xfa\xaa\x08\xf5@\xda\x03\x9ewO7\x89\xa8Q\x81G\x10\xa8\xf38gv[\xcd\x89\x123\xef\x19S\xa5.1m\x82M\x1c\xc9\xd2\xd4\xf2\x8d\xf4\xa8Hm\x00#X\x9e\xc0\xba\xc6\xe4\x81\xb9\xb9\xc7k\x83]\xa0e\xfb\xa8\xb1\xc0\xdc(C\xc9\xcbn\xe1lh\xe3\xa0m\xcc\xd03YG\x13i\x1b3\x96[\x88>\x96T\x0c3\x0d]\x14\xe6\x82V%Bg\"+\xea\xd8\x0f\x8dCO>+T4\xf4\xe9il\x0dO`i\x9c\x99K\xb4\xa7\x88\xf91\x98UV\xe8\xce\xb80L_\xe6\xe4\xfa$\x1fox\xae\xf0\xfc\xbb@,J\x11\x7f\x86\x90\xd9\xf4H\x8cP\x86^\x89\xc9\x8c,\x9b3\xce\xe1\x94\xf6p4b\xc7y\x8fW\xc2P\x13\xeb=7\x9b\x9cQE\xa3\xe7 \x171\xf1\xde*OT\x83\xf0\x0d2L\x94\xb2\xfd\xc2\xb7\x1d\xfdF\x16u\x14\x1f\x0dI\x88\xbf7\xa6\x89\xbf@!N\xaaU?\xf5\xefP\xba\x93\x8a\xa9\x03\xba\xa0\xfb\xe6\x1dm\xad\xdc\xc9\x80\xa7lS\xa0\x8c\xd3\xdb\x96\xd8\xf0r\xd8\xf5\x0b\xfa\xecBV{#D[\x16\xdb|'\x97}\xc7\xfc\xd0\xd9\xd4o\xc0\x12\x13\x99)\xe7?(\x82o\x99\x88P\xa6\x91\xfa\xeb\x0e{=}\x0c\xca\xbb\xfbN`\x10\xe1\xc8\x85\xe0\xce\xc7\xe2\xbd\x9e\xfe\xbe\xd0Qc\x97\xd4ZE\xcd\x11\x8b\xefnpHc\xaa\xc6\x08o`G.\x84\x1b\xdc\x0ehf\xb2\x1a\xbd\x816^=)\xc5\xa7\xcf5KR|\xfat\x1c@\x1bX\x8c\xfaqh\xf0>\xbf\xfbl\x9b\xf2\xae\xe8\x8c\x11\n\x0b]s\xe6\xf92y\x11f+\x96\xb0K\xd5R\xf0\xd7.I*\xf1[vfNT\xddEV\xca\x0c\xa4#\x15\xc2J#\xa9\xe5\xc6S\x18V\x0c\xfe.\xc46\xcb\x1b\x94\xd7\xa6\x0dO \xd5XD\xb8'\x1aMh5K\x0c\x0c!\xd0\xe3\xa4\xf7-#M}\x92\x83\x9e\xc8\xe9/c\x91\x9e\xe0f,\x0f\xbf\x86\x89a\x8cN\xf4\xe2D\xea\x15\x8d\x83v\x1b\x13\xc4o@\xc1\x9aB^7N\x84\x81\xb8\xdc\xfd\xa6\xe6\x9eAy\xdc?\xd4_B\xd4'\x0dQme<\x81X\xbf*\x82&\x06\x1b\x9a\xee.\xd7\xf6r\xa8\x8e\xc4\x85\"\xec\x84\xb2\x92\xe8D\x83\xa99\x02\xa3\x00\xca\x9e\xb7\xd0\x19$\xd3\x96ZWJ\xb5\x96(\xbci\xcb.P\x0e\xbe\xbd\x859\xfdoI\xff[\xab\xa5f\x98\xb3\xfc\x94\xb2\x8c\x1c}\x99\xae\x8d\xca0\xba\x9c\xa1r\xce-\xa3\x84\x87~)<\xbe}\xcb\xcf74\xbb\xeb\x8b\xf2\xb3m\xb1*\x90m\xdf\xb0.\"8BUS\x01\xb6\xd6^LB\x0e\xc0\xf7\xd7\xac S,I\x05\x0b\xd5P\x05\xf8Z\xaa\xd2a\xe2\xda\x8d\x0bW\x0e~\x9f1\x03\xf7\x8d\x9e/\xcd\xee\xbb\x8b6&'\"-\xac\xa0\x17\xe9\x89\x03\xb1\xc8\x8a\x12\xea{\x17\xdfy+\xeasS\xec\xe96\xa2\xce\xb6\xdc\xb4?\x0c\xb4#\xe0w\xbab\xae\xa3\xf8\xb6h\xd4\xdd\x15\x1a\xa6\xa4\x1d\xfd\xaa\xec\x16\xe9',\xc3d\x82\xc5\xf4d\xe3|\xfa>^F^\xba;\xe0\xb6w$\xe3\x95\x87\x07{\xfa\x87/\x85\x86E\xf7\xa4\x7f`|dj\xacP\xd9\xe8\x1f=_z\xab5\x99\x99K\x98\xda\xa4\xcfJ\x8db\xa6\xdc\xb1\x0e\x83*o\xea\xeb+\xe9\xeb+\xcfr\xf3G\x05^\xe8\xee\xd5\x07D\x01r\xfbGu58\xae(\x0f\xd0\x18R\x81 \x03H\x05,<(*`a\x0b\xa9\x80\xd1\xfeQ\x85q\x9bG\x05\xfcC\xe2\xbd\xcd\xfb\xd1\xea\xbb\xdbm\xc1\x88o\xc1 '\xf8\xf8\xb3\xd5\xca\xc6tW61\xf7\xc6\x1d\xd9\xec\xcf]#L\xa6fu\xe5F\xfb\xb8F\xf3Ul\xf1\xbeb\xf3\x03\xbe\xcf-6\xc3\xa5d_tr\x18\x1b#\xdd0\x9a\x9177k\x06S\xab\xc0tQx&U\xeba)\xca\xb1\x9e\xb4T\x8f\xc6\xb5\x80\xd2\x10vs\xb8\x98\xe0\x11\xaf\x1a-O>I4~\xba^\x1da\x14\x9f\xfa\xc4\xd3W\xb6+\\Q\x95\xfe\xb1\x98S\\\x8b\xb3\xfbG}'?Zn\xce\x15\xfa\x86\x03Z\x7f\xa3\x03\xdav\xb2eu\xe9P\xf7\x14\xcb \xe3U\x7fx\xa1=\x1eO\x0d\"YHE\xb2\"\x85\xbct\xc8\nq\xff\x97U1-\x9eF\x8e\xb9:\x98\xa4\x8fm\xeeU]\x19\xd2tm;\x19b\xa0<\xe5\xbfQ\xfd$\x99\xbbF\xa0W(\x11>\xc2\xdc\x92{{\xdb\x9cv\xa9\x06E\x8eD\x8e~\x0c0\xe0\xf2\xa1nu\xed\xa6\x99\xba\x9a=!\xf22uW\x1bR\x9b\xca\x92\xf7\xa2\xb1\xd2\x90\x07\x86\x84\xd0\x067\xd9\xbdA\xd5W\x92\xfbP\x0e\xaa'4\xeeC9\xa8\n]\x89^F\xe3N\x94\x8as\x06=t\xf9v\\\x81b0\x0e\xbb\x1axg\x8d\xd0\xa8\x02] 4\xab@g\x08\xad\xe6\xdf\xa3\x07#\x89 \xb2L'\x1a\xb1\x84\xee\xae+4[\xc7\xf8\xbf$\xe4\xd8}\x87\x1dJ\x82\xd2\xbb\xc8\xed\x8b\xd7\x02,\x12\x95\x8a|?\x8eVABD1J\xae\x93hyElV_V*\x8c\xc2FQ_\xc6\xceD\xa5\"\xb9\x90Q\x14\xf3\x9cB\x87\xda\xbcA\xf5\x87\xd2P\xe7c*.;\x96\xb6sM\xc69\xc4>8\x05\x9f\xa2\xba\x9a*\x93\xc7?\x10^\x12Z\xfb\x1e\xdaT\xe7\xb5\x96r\xcd\xca\xa9\xdc\xce\xe4V\xa0\xab\x07\xa7\xd3P\x85\xc6\x03AWE\xbe\xca\x86j\xea]\x0e\xca\xebo\xa8\xc2`\xfe\xafV\x91\xe3\x87\x81\x94\x80\x96MT\x92U_mGovw\x1d;\xb4\x0f\x1d\x17,\xb1&\xa6(5[\xdej\x94j\xe6S\xfc\xf0\x15\x9f\x91\xf4\xe1+\xe5\xcb\xf0@\x15\xf7\x8f\x0c\xa1\xd4\xb6\xb7D\xe4\x82\x87\xb8\xbf\xe7\xf2\xdb)B\xb5\x1e\xd6\x18E#\xaeeW\xb7>p\xa6\x91\x8e#\x9d\xba\x94\xa9Kx~\xb4\xd8\xce\x1cSX[\xd8\\\x8a\xa9\xb9B`\xba\x01\xa9\x0f_\xb57\xd0)\x0b(\xbb\xd4\xc5\xaf\xd2\xad\x86PhV\xcb3\xfewXe\x8bs\xd5\x04\xbf\xdc\xf0\n\xa1A\xc6\xc8\xf8\xe1\xd1c\x99A\x13\xdb\xc7\x95%\xcdW+\x85\x9e;\xd0\x05%\x90Z\x90L\xac\xec\xd4\x90\x07\x17\x89\xd8\x9bh \"\xb8\xc0s\xb8\x85\xe5\x03\xc92\xfd\xa3\x8dn\x83\x1bL[\xb8\xf0\xba@I,\x9d\xa7^|\x96\x86\x1a\xc0)\xa6\xc1mJ|k\xe8\xfe\xce\xf8\xf3\xeex2\x9d\xb6o'c\xfbthwN'\xb3\xb6}:\x9ct'\xb3\xb6s\xea\xdc\xdac\xeb\xf1\xd4\xb1\xe9\xb3\xd3\xd6d\xe0\x8c?\x9fL\xa6\xb7\x93I\xd7\xf9\xf0\xd4\x99\x0c\x9c\xc9\xf4\xd6>\x1d\xe1\x1b\xb7\x93\xf1d\xea\x14_o?p\x9cj^3:\xdc\x9d\xc9\xc4\x9eL\x9c\xd3\xea3\x81\xebGN\x83\x1b\x8a\xe9\xc8\x02\xc5\x0c\xed\x1d\xb0\x9b\xb8\x98N\xf6y4#\x98RV:\x98X\x16r\x14\x11\xfa,.O\x17s\xa2\x8cLGa^GLq\xab\x94C\xff\x83>f\xa2E\xe5y\xaa3A\xc9!%\x18D\x8f:\xd16\x8bH \x8a\xce\x89f\xbf\xf9\x1a\x99I\x06C\xec\xab_\x05\x90,y\"\xf8\x00W5\x84\"\xb4\xa2[\xf1\x14\x026 \n\x8c\x11x\xdf\xf3\x17\xfa\xb8\x07w\xa6\xb4{\xbb\xfa\x83\xc6\xdench\xc3\x1ab\x86\x1b\xb6\xc5\x8f\x92\xe2\x8eK\xdct\x00\xbc\xcf\x11\xad\xd4\")\x9d\xc8\xef:5}\xc35\xfc-mj\x8a\xedL\xd8\xd4\xf4,\xe8\xf0\xae~\x00\xb9X\xe0s\xcb\x07\xe5Q6)\x82\x009\xb9\x15j\xc9\xbcd\xa0\xdd\xf6\xe1 \xcck\xafg'6\x19\xfbS\xa3\xdf\xceR\x90g1\xf7\xd8\xbf5=k\xa1\xbf\x8d\xfa^\xca/s\x97\x1eh\xc5\x074\xac\xd1>\xb6F0\x87SX\xc2\x10Z-{\x0ef\x031g\xa1s\xfc\x9b\xd9k\x17\xe6\xdc\xbekKq\x13\xef\x8d\x87\x06$\xbc\xbb\x97\xc2\xae\xde'doW\xef\xbf\xa2\xca5\xd9\xa6\xc8c\xe8z\xc4\x9cD\x98G\x01\x06\xbcj\xde9w\x9e\xa7\xbc@\x9d\xc2Z,1)\x87\xa8\xaaz\x8c\xdeu\xca7\x91J\xee\xd3\xfd\xb8\x12\xb9\x0e\xee\xd3\xd9\xbd\xdd\xaa2T\xa8\x83\xf4\xa9\xb2\xf7vu\xc4\xe8S/]tW\xdeu\xd3\xb0\xcd\xc2\x98W\xb3\xf5TMA\xcb\xcb\xd5\xaa\x9d\x8aO\xde\x95\x88\x98\xc1+\x13I\xcb#\x93B4\xc9\x13\x9e'\xe8\x0d\xeeA\x1b\x12\x0c\xbc\xe62^\x1c\xd0\xf9\xdeu\\H\xee\x8f\xb6\xc2\x15V\xd1o\xe44V\xf6eb\xde(!\xb4\x01\x05\x9e>\x0c\xa1\xd3wN\xf06K\xd4\xe9\xc0\x10\xda\xed\x88%TW\x90\x85N\x13\xb1\xe9\x91\x0b\xbd\xca$Et\xa4\x9d\x86\xbb\xc7D\xdb\xdbm\xce\xc4_#\xec\x98d\x12\xf8 \xe8\xeb%\x12\xb1w\xe9\xd2\x12\xe8\xa0\x10N`\xd8\x18\xc2\xc1<\x82=\x9d\xa8\xd2\x87\x9d\xaa\"\x0b\xe3\xbbt\x0f\x8f\x0f\x0f\x8ew\xfb\xbb{G\x07\x83\xdd\xfe\xfe!\xd9\xed\x1dm;\x01\xb9\xaa\xfb\x94\xf9^1S\x01\x13\xe3\xa8\x04\x8b_;\x01{\xcc\xc2\xbeu\xe8\xfa\xf7\x1d\xf8\x10\x1d\xeeR\xb1SR:r\xfc7\x92!w\x9d\x0b%^3\xd7&\xe8\xb4\xc3\xaf\xbcW*-\xd8\xf9|\x92\xb4o'I\xfb\x83\xea)\x83Ex\x1ew\xda\xd3\xde\xf5\xb8\xd79\xf6:\xf3i\xfb\x83\x9d@\x15Vv>\xef]\x8c{}\xcdS\x9f=\x8d\xc6\xbd\xce\xa1\xe61\xe5\xe0k/N\xc8\xcb0\xddvI\xe8\x8e\x91\xa3\xbd #`\xbeqR\x95\x10\x05\xb6yc\xa1J\xd3p=\\\xe0\xbf\xd6\xc6\x91\xe6\xd7\xcfN\x8b\xef\xecJ\xb3^\xe8\x89\xd9\xc9\x9e\xdd\x10\xa2\x9b\xa1T\xea\xbd:J\x11\xe4\xae\xa5\x19e\x19\x8f\xda\x95&\xd9e\xb1r2j\x95\x00\x87,\xac6K\x14\xa3\xdd\xc4xN\xf3E\x118\x85\xb9\x9dv\x93e\xe0\x13{\x80j\xa7S\x18\xc0\x10\x8e\xe8\xa8=\xa9X\x84}\xba+r\xf7\x15uK\x03\xb7\xdb\xab\x8a\xd8\x99V \xe7\xa6\x8f\xbdf!\xc9\xcc\x01\x19\xf7a\xb2\x12\xe5W\x86iC)4\xaf\x86\xb2-\x8aGL\x8c\xa1VE\xf1\xfcc\xd3\x172.\xdaf\xf0\x04\"\xe6\xe8\xd4\xc7\xb8q\x81\xed\x8d\xb3)\xbbH\xe6\x9c\x98\xf5\xd1\xa6\xd8\xe7\xdb\xae\x84\x9eN\x18\x82\x0d\xa9\xea\x98L\x08T\x1b\xac\xa7\x86)\xe0\nd\xf2\nT\xef\x1f\x89\x83\x93\xf0\x8d\xd0\xd2\xdeV\xab$\xd5x\x18\x1b\x86\xb1\x8e\x08\xf7e\xae\xe0\x18\x96\xa2\xdfz\xb9\xbe+\xe4\xee\x9f\xe1\x98L\xb7\x8f\x99ne \xc1\xec8~*\x99/\xb9\xd3\x05\x0b\x97!\x9clx<\x18\x92|\x1a\xcd\xb2%\xb1\\\x85\xc1,32,E\x8es\\\xbcs\xbd\x8a\x82/\xc9\xec\xcc[\xad\x97\xe4\xe38Z\x9d\xf9\x0b\xb2\xf2`$=|\x1e\x13/%\x7f\xe3\xd3O^\\c1\x16J\x0d\xbf\xfe\x8d\xd5\xb2\xf2R\x10\xceI,\xfdN\xd4\x9a\xb9\xa1\x1bH\xd7Wk^\x9eh\xf0\xa9\xaf\xa4H \x90\xe7\x87\xf6\xde>=n*H\x85\x8f\x0ev\x9dM\xa3\xb1\xc8|\"\xed\x16\x13\xc9e9\x95\x1a\xcc\xc8\xdc\xcb\x96\xe9\xb0z\xab\xf4;\xea7\x81kj%\"\xf3Q\x8e\x04&\xaa\xcc\xbb'\x90L)\xf3^= \xb2\xa2\xe7d\xe5\x05\xcb-Z\xc8\x12\x12\x7f\x97\xb0\xd5\xe8\xfa\xd1j\xa3\xb6x\xbf\xceg^J:i\xb0\"\xd6\xe6-\xa2\xaf\xc5G^J\x9cn\x1a\xbd<{\xcd\xbc@m\x8d\x1dBs\xda\xc5\xcd\xb9y[\xbd\xcd+=\x9f/#/}\xe0\xaa\x830%\x97\x0f\xdea\x1eD{X#T\x88\x8fX\xe5<\xee\xb6t\x8c\xe9r\x94fQ1\xf8\x0f\xb5\xfd2\xba\xab\x07\xd0\xfaN\\\xe5\xfel#\xb0{.\xc4]\xe6`\x11\xcco\x1c\xadB\x03rC\x8b\x9a\x82H|\x02|>\x8f\xe2\x95g\x88\\EI\x827\xc6\xfc\x91\xe7\x16\xb4!\x98\xa2\x0b\x90\xf6\x12\x92\xc0K\xec]\x90|\x9c\x85\xbecGx\x82\xb2\xd1\x1ek\xfd |\x1bF\xefBxs\xb3&C\xa0\xf5\xa5\xd8\xbb\xba\xa9\xf1M\xc40\xa7J\xa9^u)\x0e\x85\x9e\xf0%\x17\x97\xb2\x9fB\x1f\x8a\x9c\x14\x94\xc9\xe7E\xc6\xfd)\x15\xde\xe4\x9f\x98\xc7\xca8{\xcaR\xe8\xe2\xc5\x81\xf0\xf9\xadY\n\xb4yw9\xfd\xd0\x17\xf1\xb0\x08\xbf\xc4\x17\x10\x8dg/\xf0\xf9\n\xba\xdel\x16\xd0\xc9\xf1\x96\xdfo(?\xc7\xf2AJV\x86\x02h\x14\xe9\x06\xa1\xbf\xccf\xe43\xe2\xcd^\x87\xcb\x1b}\xd1\xb5\\\xf4\x87q\x90\x12ZV/\xe8I\xd3\x9f9e\xdc\x99\x11\xb2^\xdePz\xb6\xfe\xeb\xe4\xc6\xc1#\xff\x07\x1f\xc4dnma\xa5\x94\xe5\x8a\x92ou7\x08g\xe4\xfa\xf5\xdc\xb6\xfe\x8aU\xc9\xcc >\xefM\x16\xa2H\xef\x7f\x1c\xb0\xe0\xb7\x91\xe4\x1a\xae\x176kb\xec\x82hc.f\xc3 \xaf\x8a\xdb6^\x1c{7*\x97\x01\xedy\x01U0\x85\xb7\xf9\xc8l\xed\xbe\xe2\xc1\x06\x14\xcc\xae\xba1\xca\x9fY\xe56\x8b\xfc\xc9E\xf5+*\xd8-\x1cX\x8c\xaf\xa6t%\xe8\xdf\xee\x8c\xacc\xe2{)\x99\xe1\x8d/\xf9Q\xccq\x0d\xd8\x05\xb6\xea\xe3w\x02\xbf\xf0\xf9\x1a\xef\xb9\xcfh\x81\x11\xa46-A\x85B\x83\xd0\x8f\x13\xcd\xb4N\xbe\x03\xb3\xcav\xe9\xd7\x8c\x06W\x90\xbe\xee\xebQ\x01\xaa\x11\x0c\x94y\xf4\x1d\x97\xc5,\xb0o\\\x8c\xb2\xb6\x82\x11\xf4O`\x05O`\xef\x04V\xed\xb6\x03\xb3\xb1U\xee\x12\xa5\x95+:\xb4K}\xb78\xd2\xcfTT6\x91i\x8e?\x0c\x19\xe0\x94\xa7\xb2 \x12v\xbdl\xde\xf5\xc2\x9b\xd7s\xd4\x92\xb1\xaf\xdd\x95\xb7.<5\x9a\xee\xe6\xb2\xf8\xf3:\x9f\x08\x18*ME!\x11M\xe1\xd7\x07lj\x9c\xdas\xfa\x94\xd2q\xd2%a\xb6\xc2\x10\x8c\x82c\xcb\xdf\x87|\xa9B\xca\x0e\x97\xc1\x97\x04\xbb\xe7\xd8\xec5g\xdc\xa3uX\xf3`IX\x8a\x8d\x08\x1d\x9b\xd0\xa5I\x17/_U\x12\xdbU\x19\xbf\x9e\x96\x89\xe1u\x13V\xfe\xd1#\xa6\xb6\x17\x00\xf4h)\xb8\x01{\x8e\x1cF\"C\x8aO\xc6{\xd7x\x04\xd9\x88\xa1\xb2K\xcb\xdf\x1aO\x8d\xb6\xe1\xa9x\xff\xa5\x86\xa7z\xf8|\x13\x86\x19m\xc90\xa3&\x86\x19\xd5\xb3\xf25c\xba\x9b\xf0\xd4\x85\\4\xe7\xa9\xfa\xb23l\x99#\xb4\xbe\xc8\x15\xd26\xfd\xb3\x9b\x9ag\x97(\x86]\xaf\x96\xfa\xc7\x94\x86]b|2\xfd\xf3s|\xbe\x8e\xc9<\xb8\xd6\x97\xb8\xc8kH\xd6\x9eo\xa8\xe6\x1d\x9b\xda0[\xe9\x9f_\xe7\x87d\x03\x03\xcfj\x188\x9a\x07\x1c\x96\xda\xfc\xc7\xc1\xc5\xb3&.\x8e\xd1Y1l\x8c\x15F\xa9wI'\xc7b\xfe\xb1\xf69\x9c\xc29\x15\xcb\x87\x16\xba\xb6;\x94A\xb8p\xc1\xf4\xf37c\xfa\xdc\xba^-\xc3\x043e\x9f\xd3B\xf8\x13o\x03^\x18\x04\x1c\x99)\xa0[\xe5\xdcD|i\xe99\xc5\x07J8\xf0\xef\xed-\\\xd2\xff\xbez\xef2\x08\x0f\\'\xff\xa0e\x18\x96\xc0e\x97\xc7\xe0\xcd\x85\xbf+\xee\x95;u+\x1cbIy\xc3R\x8dZe\xe4\x0c\xf43\x17;\x90\xe5\xa4\xa2\x953?>\xe4\x08U\xfd\xbe\xf8h\xf8\xd3\x8c\xb6>\xdb\xbau\xc1V\xb6n]L\x03/9u\x01%\x9c\xa2\ns\xab\xe7^\x9a\xc6C\xb81T\xee\xc2\x95\x1e\x1b)e?3\xb8XB\xc1\x8a4\xabb\xdfsY\xce6\x9a\x15\x17\xce\x0c\xebb\xdfsa\xb6j\x9f\x97R\nm nk\xd3\x12\x01\x9f\xfa\x17zq\xbbA\x9c~F\xc5ii\xcf\xd0\x9d\xb8\x14\x1b\xf0\x85Y:\xa5}{Q\xb9jh?ct\xa3\xf5b\xfcL\x12\xbcooa-?(Dn*\x8c\x1b\xa6\xab\xd4\x0e}\x8b\x11\x89\xfc\xab\xe8!\xff\xdd\xa58\x1b\\di\xed\xb2\x89\xcf\x15\x8f.YF\x05\xac\x0b\xa54\xda\xd9\xfc\x971\x05K\xf5\xf3\x85\xe8_-\xd3\xae~\xde\x8a\xb78F\x99)\xbd\xf8\xdc\x8c\xf3Q\x0br\xf8l\x9a\xb3,\x14\x9b\xbe\xa0#\xf8\x82>\x91\x80\xcb\xf13<\xf7\xe0\xdf\xf2\xa3\xb7\x14\xfe\x96\x0214f\x82sQ\xbf0\xb5\xa9^\xe4O\xb9\xb3#P;\xef\xca\xce\xe9\xf2\x0cV\x84A1\x00\xbbT\x86\xc1Mv\x19\xe9s\xc5\xe3f\xa6lt\xcd/\x94\xd1\xe3%\xa5\x14|\xa7 \x19\xf5\xa3\xd0\xf7R\n\x1fJt\xf5e\xc3\xb4\xd5\x91Fq\x98\xe4\x0d5\x11\xea\xb2\xb49\x04\xebYx\x93.\x82\xf0\x12|/\x84\x0b\x02\x0b\x12\x13\x83T@;\xedo\xca\x11\xaa\x0d%\xa6s+%r\x0f\xc8g6\xa0\x91|\xe6\xae\xcb\xf8\xbf\xe4\xae\xb1\x12h\xc63&\x94\x17\xf5\x1d]\xd4w\xecT\x96\xb0\x80kl\x85o\xe0\x14\xc6\xfa\xbe\x1b\xfb\xfd\xde\x85kZ\xd1u\xb5\xeb\xef\xb5v\x90\xa5\xd9\x17\x81\xca;\xeci\x19K\xd1\x08Z\xd2s\x05\x82n8vX\xb5:\x01\x1aJ\xfc\xa5\x17{\xb4\xc1!\xb44\xd7\x1b\x83pF\xc2t\x08\xd6$\xad\xdc\xae\xab\x9a\xcb\x00o1\xd4X\xa5h\x7f\xa2\xa2?\xcb&\x13W\xa5<\xc7\xa9\x06\xab\\\x0d\x87\x96<\x05\xf6\xabn1PxK\xec\x0f\x9c\xeeY\x1a\x13O#\xfe\xa3N\x8c~\xb1\xa4\x15\x83\x8a\xf5Jo\xf5\x04\x919\x80\xd24\xcd\xc9\x01=\x05\xd0\xa5\x11\xc7\x1e0\xd1!\xbf\x92k\xb3\xf7\x9c\xee\x17Q\x10\xda\xe8KgYU\xdb\x9a\xf8$\x94\x8c\x19\x84oC4\x08\x1b\xbdD\xd3\xb1\x142\xe0-\xb9I\xec\xd4\x19\xf7\xa6SdyI\xf7\x9c,\xc9\xaa0\xdbr\x80\xa0\xdc\x91\x9bC\x02?\xcaB*\xfd\x84\x12\x0c1\x89\x0d\xab\x0c\xa3-{20%q\x9c\xadS\xcc\x00'\xc0\xfa\x19\xf3\x99\xd3\xbe.4\x14\xf0S2\x957\x95\x87\xf9z\xad\xcd:\xde\xf24l-\x02\"y\xab\xf5m\xa8~r3g\x1b\x1e\x8f\xac\xc7\xd0f\x0epmxl=6\xbe\xf8\x1e\xbd\xa6\xc7dj\x14,7 \x93\xe2z2\xc7\x08%\x94\xad\xf8\xe0\xa5\\\x81B\xfa\xbb\xb9Pv\xc6\x18\xd1\xca\x0c\xf7\x1a\xc4'\xe9\"\xcd\xa48\xb6\xb6\xf9\x0f\x0cty\xee\xcf\xbc\x14\x95RK6\x9d\xb6\xf5\xa45~\xfe\xd1\xb37\xcf\xc6\xf4\xc0)J8\xb9\xe3\xde\xced:\x99>\xdd\xb9t\xc1\x9aN\xa7\xd3\xa7y\xf1\xa7xx\xb5\xa6\xd3\xa7\x16V\xcdW\x13Q\xdf\xe7\xa1k\x96\xd2=\xaed\xc3\xf8\xc5\xf2G\xbb\xb7N\xc1\xc2\x01!T\xd9YpJ1\x90\x0f\x19\x86\xa2\x0b9\x15\x816\xf4\xf1r\x81\xbdd\x89\xb5]T%\xb5zyo\xd1\x13\xd3,T\xbc\xc77no\xa5\xc1\xd5\x8865\x0b%L\xea\xc6w\xf3\xfe$\x9a\xee\x189\xb3~F)E\x19B\xa4\xdf\xd49}\x18\xd2U\xd3\x16\xc9\xc5\xfdd\x08s\x83F.\nS\xe4l\x06e\x13#aC\x08M\x9d@\xca5\x04\xaf\xeey\xd5e\x15\x94\xa9xo\xe0#^\x1d\x1f)\x11\xf2\xc2HL$\x97&\x8a\xcf\xba\x08\xf1\x82 \x12\x89\xcc2\x0f|\x0c\x9fK\xa7$\xbf\x9d`\xa6\x9a\x81\xd14\xce\xd3X*\x95\xd5\xed\x1d\xe1$W\xbc\x94,\x82yZ\x0d\xa8#\x7f*\xc6=\xadKX\xb5|d\x07N\xb3\xc2\x8c~p\xf25gp\xf1\xd1K\xe9z([\n;F\xed\xf5)\xce;\xe3yB\xa1f\xf3\x94\x0b\xa7`=\xd9\xa1T\x8d\xffn\x83\xf5\xd4\x92Kq\x06\xfa\xe8\x11\xb4BZz\x12\xf2\xc7\xe8W\x8c\x17\xc9t\x1b\xcf\xbc\x8aQ\xa3\xd9\xa3\xd5\x92\xf1\x04\x9dr\x8b\xdf]o\xbd&\xe1\x8c\x8a\x0d\xae\x8cO]\x06\x0cJ@\x11\x1d\xccn\xf5\x1c\x17Z\xbdMH\x04]4\x8e\xc9\xf9\xac\x95\xe7K\x9a.i\xa2\x8a\xdd/,\x07\xa7`\x01++=CI\xca\x02\xcb)\xde\x8dq\x85D\xf5|\xfaqo\x08\xd8\x8eiM\xc4\x02\x97\x96\xa5\x15W\xb7\xa4xC.\xa8\"#\xae\x0c\xde\xbd3]\x87\x82\x1a\xa7;-\xcd\xd0\xd0\x0bD\x1a\xf4H6\xa8_9\x0d\x0b\xd5\xb52Q\x16\xf41\xc5\x08\x00\xdd\x04eh8e\x99Px\xaax\xb3\xb5\xc3\xb2\xcc\"\x9c\x89\xcc\x0bW\x00>\xa3\xfc|,A\"\xda\xac\xf894\xb6\xb1\xe0q\xe4\xcd[ef\xe6\xfe\x0b\x863\xe4:}\x13\xf8o\x99\x13J\xba\xe5N\xbc\xaa\x95\x0f+\xc4\x0e\xf5\x1e\xf6\x1c\xda#\x96\x8c\x12\xf2\xd8\xab(\xc9 \xb7\xc79\xe7\xd7V{\xa2\xd0\xb2\x89\x08\xe3\xc1\xd2L\x1agv\xa3g\x94\xf8\xf8]\xb2\nR\xdb\xa2\xd2\x99\xa5\xb5\x9c\x8a\x0f\x15P\xd8\xfaoHT\xeb\xe6\xf1\xa6v\x1e=\xfb\x8a'\xa0[\xbb\x98\"\x91\xb2\xbd\x9e\xa3\x0f\xed\\\xd3\xca\xa5q\xf8\xccf\xdf0\xcb\xe9\xb75\xcb)\x95\xf58\x88\x843\x0b\x7f\xc6\xc4\x9by\x17x\x00\xa7\x04H<\xf7\x97QB\x0c\x91\xee@\x7fl\x00\xc3rT!\xc2M\xa0y\x1c\x0b5=$p\x94\x08\xbb\x92j\x02q\x1b\x8f\xee2\xd4\xc5s\xae\xbe\xe6+\x12'\xa8\xd3\xb0\xfa\xdd\x9ea\xd7\x93\xd0\x8ff\xe8\xe1\x19w\xc5wFr)\xbd\xfa^\x8a\xd9\xd4%K\xb2b*\x85\x02\xf6\"\x87\xd5b\x9f\xd8\x87\xfa\xe1\xa2\xc2a\x08\x99\xcd\xb4\x81E\xecD\xbc\xc8\xc5\x82\x15\xe6\xbe\x06&%\x0c=\x0dm\xe2\xf5 \xc2\x9a\xcb\xf2@\xa2L\xe5@\xba\x88\xa3wH\xc61(\xacm\x85Q\n^\x92\x04\x97!\x99A\x1a\x81\x07,\x14uK'?\x88\xcf\x95\x94\xaa\xbb\xde\xdePdG\x96\x143\xe6\x8a=[\xea-'\xaa\xa1[\xaa\x81\xa9\x80\xdaT\xc0\x10\x94V\x0e\xbc\xdfD\xdb\x08\xaf\xdc\xd6\xc9\x8a\xe2c\xa2R\x86#\x1f\xa5y\x9b.\x89\xc4p\xd9\xee\xa1Ccv<\x91\x01\x9a\xca\xb9\xe2 \xed\xe9\xc6$S\x9dW!$\x96\x91=\xffU\x8a\x1a\xba\xbbg\x88\x18*\x0fG\xb0\xf3\xf2\x00\xadG\xd6\x10\xacG\xdej}R!\x8a\x8f\xad\xc7\xf4\xc9\xcffQZ}d=f/\xad\xa3Dy\xf4\x04\x1f-\xd5w\x9e\xe2\x83\xcb\xf4\xa4\xa0\xa3\xd2\xb0\xb7\xbal\xc5\x89\x17\xa7lH\xbcru\x8f=~d=y\xfax\xea\xec\\\xd6LF\xa5\xc2pL\xaaI\xb4`\xb8m(\x8a\xd2%\xba\x93\xd2\xbc\xf3[\x11\xfd}\xa7\xfb\xe2\x8a\x84\xe9\x8bU\x90\xa6$\xd6)\xf9\xd5\x83t\xccc\xa1.\x02\xe5Z>\xfd\x84\xf6\xee\xbec\x07.&\xd3\x0d\xba\x9f\x15\x14\x93\xb6x\x80\xc0\x1f\xc6A\x9a\x03\xf7\xf6\x8f\x11\xf8Q\xb6^\x92k\x06:\xe8!\xe8M\xec\x85\xc9<\x8aW\x1c\xdaG\xe8\xf7\xbd$y\xb3\x88\xa3\xecr\xc1\xe1\x03\x843\x9d8;\xd8\x05r\xc2\x8f\x00\x9d\xc1j'\xffJ\xca#o\xd2\x9c\x07\xfa\xd3h\x8a\x06a\x1c\x0e\xbb0\xc5X\x0dZ\x89\xe9\x1b\x18\x1bh\xede \x91\xbe*\xc7&}\x93\x91\x96\n\x85\x05\x1f\xc2\x1ac\x92d\xab\xd2\xf7\xdaSY\xd8\x8d\xc2\\$\x0b\xd0\x81\x0e\x01\xb1\x17\x84\x96\x0b\x11B\xce\x83\xe4,\x9d\x05\x11\x957\xe4\x81\x11$*\xb7\xb7`\xb3j\xa8\x18\xe7\x82\x87\x02\x11\xfd\xcd\xc46\x17\x92\xaa\x16\xef\x8a\x874k\xf5M\xf3\xebi\x07\x9bac\x19\xe7\xb8)\xa3c\x9b\xcd^\xb2A\x85\x86{\xe03\x92\xa4qt\xc366\xff\xb1i\xb3\xbe\x9en\xa3\xaf\x90\xed\xb8\xdcN\x1cw\x97A\x92\x92\x90\xc4\xcf)\x1f\xc2\xfd\xe4\x82E(3\xb5\x1c\xc1_\xab\xf4V\xdf\xe2\xdc\x88&\xab\xe8\x8a|\xc2\xdb\xa9\xac\xb9\xf2PZ\x7f\xf5Uy\x9d\xab\xcf\x8a5\xd7\xbe\x89#\xa2\xc2\x92\xaeU\xf9\xa9\xa9\xd5ym\xabsm\xbd\xc5\xd3\x9a\x9d \xc8-\xc3\xe4R?\xab\x10\x19\xdb\xe7\n\xb6\xcf\xf3w\xca\x10v\x94\xa1\x04\xc8b^\xceM4\xdca\x8ec5d]\x7f\xab\xaf\xa0\xeaG=\xa7\xcb\xc2\xe3\x96\x19\x9e0\x1e6\x86\xc8\xa9\xa2R\x8ee\xa9\x16\xcbZ\xcd\\\x0d\x84\x00i\xa7 %\x19#\x8e,E\xbe\xb9Y\x13.I>\xf7B*LR6\x03\x1e\xf8K/I\xc0K\xc0\xcb[\xd2\x1c\x0b\xdf\xf3\x0d\x94\xcb>\x0b\xe2\xcd\x80E\xa3\xe1\x90\xd4\x0b\x96e\x08?\x0e\x8c\xaa^\xcb:$I\xd5\x8c\xe6\xf5r\x9a\x10m\xf5\xf3A\xb7\xa21S~H\xaeS\xa6\x8eR\xc7\xa9\x8af\xf2P\x9eb\xc0\x92|\xb8\xa8\xf5\xc1\xdb\xc0\xc3\xd2\xac\x90\xf2\x94\x10\x17\xdam\xa9\x9a\xf2l\xb8\xa5\xb1g!\xea\xbe\xbf\xfd\xe1\xe7\xfd\xddd\x0ex\xec\x0ci&\xd0\x11\\\x1ec\x051\xb6\x19\xb32b\x13}\xe7\xe2xQk\xddy5\x15'\x1a\xda\xa3.\x9d\x91Z\xbf\xc3\xbe2\xc4\xd3\xd2\x80\xaa8^Y\xf2\xa2%:\xbd.t:RU\xda\x98\x85u3\x82\xb1\x0e\x9bf\xa4\xaew\x0d;\xb0\xdc\xda\x17Q\x106\"\x1c\x9b\xffQu\xfe\xc5E\x0f\x8d\x17s)\xean\xdeY\xe6Zl1m<\xae\nO\xcdM\xe7\xed\xc4\x81\x10\xda#4\x81\x13\xc3\x9a \xaeR;\x7f\xe8{u\xcf1\xc5]o\xb9\x8c|\xbbg\xf0cV0\xa6\xd0\xf57\xa0]13xj\x0eXl\x08\xde\xde\x0f\xc2\xc4\x9b\x13;\x85\xa7O\x9f\xa2v2+O\x9fG\x97\xf3\x04\xb2\x13\x07'.\xc36\xd8\xacF\xfc\xe2\x04^\xde\x8e\xd67,\xb0\x01}\xa5-\n\x96\xa2\x18dl\xd2MS\x1c)S\x9c\x03\xdeSI\x0b\x03s\x06\xdd L\xd6\xc4OK?\xba~\x96\xa4\xd1\x8a\x91\x89\\9\x93/\xd0\xb8ZpZ\x87\xecb7\xe7/i\xd4jlXC0\x92\x1c}\xb8\x1e,.\x05z\xcfMo\xec\xe2h1^\xe3\x89{c\x7f$\x1d\xfb.sw\xbd\xddF+\x90\x88\x0fS\x1cu\x13\x92\xbe\\\xad\xc8,\xf0\xcc\x1e\xae\xdc>\xc3|\x8cx\xcab5&\xb3\xfc\xf1k\xaej\x007\xdb\x98L3\xc0M7iw\x16\xf9\xa8(3\x97[\x97\x12B~_ \xc9k\xcc*\xa7}`\xcc\xa7N\xab\xc2\x8clk:'o\x82\x15\x89\xb2\x14NaM\xc9\xb5[D\x8c\xe7yk\xa6\xccq\xfa\xab\xf7\xdd4bW\xdb\xf9\xe9[$\xb6aQ\x8b\x9a\xe8\x88\xf8Hf\xa0Z\xca-\x7ff\xb6&\xaa\xaf\xf8\x98\xf4[0\x94Q\xa7\xae \xb4\xa1v\xd7Q\x92~\xca\xb3\xf9\xb3\xac?\xc1\x8an\xc93?\x0e\xd6\xa9\xd1\xddG|\x04\x11\xd79\x08V?x\xcc\xefF\xe1\x8a5Woh\xcf\x85\xbf\xbc|\x13\xd3\xab~\x88\xde\x84 \x7f\x18o(f\xc0\xb6,\x17\xac\x0f-~\xa8(\x1a\x0e\xab\xa1\x94K\xb5\xe8W\xc2vP!\xc5\xab~\xbe\xf0\xc2\x90,\xe1\x14l\x1b\xa3\xa7\x90wP~\xe4t\xe9\xbc\xf7\xf5\x03\xaeE\xae\x99\x9d\"\x057\xa9<\xb7\xc0\xd3\x08;1(M\x8a\x01\x0bQ5\x86\xc6E+\nc\xe2\xcdn\x92\xd4K\x89\xbf\xf0\xc2K\x82i\x92\x97\xa3\xddvD\xbe\x8b\xe2\x0e.Z\x06\x0d\x97\xbd@r\xfb\xaa\xdf\x85\x94\x1f_x\xfe[\xe3qV|\xbc\xf82\xd1\xf9\xdb\x89\x8f\xe1\xae=\x14l\xc8\x1f'S\xa6\xdf\x8e\xed\xc4q!i\xb7M\x08\xb7fG4y\xed\x16J\xd9:\x1f\x82\x85y\x89Yzw\xf0\xab\x81\x9b\xa1\xa1\xca\x1a\x1f\x15T\x8e::\"\xa1\x9f\x94\x86\xbb;\x02[h\x17\xeb}\xf4\x1a}\x9e\xe7\xdc\xf5\xa6\xaeL}\x9a@\xf1im\xb8{\xe4O~:\xed\n4k\x16p\xc4'\xc6\xf7(\xd6\xd5\xf7^|\xf2\x14P\x0d\xba\x0b\xdd\x07\xfd\xae{f\xdf[\xdd\x87\xd4\xf9O\xea>\x0d^\xda\xd5\x0f\xf6\xa9\xbfm\x9f\xe2qo\x93\xbbU\xf2\xe7.\xfd\x1a\xdc\xa5_.\xc4\xe3\xfe\x8f\xa3w\xbbw\xef\x1d\xfd\x7f\xf0-\xf7\xb1\xd1\xd5[\xf7A{\xfd\x12U\x0e\x1aw\x0f\xddG/Q\x97J\x98\x84\xa3\xbc\x00\xcc\x83\xd0[.7\xa1\x0f\xccp?\xdf\xe0\xbc`|\xba\xa9\xdfoE\xb7g[Y\xc8\x02\x02\xcedY(!\xcby\x11\xa9?\x0fN\xbc\x08\x12\x0c\x83=\xc4\x02\x92\x0d\xb8\x949\x14y\xb1\xd9\x15`\xf3[Q9\xfb0\x90M3\xf1E\xdd\x03\xe9.#\xdf[\x9e\xa5Q\xec]\x12)\xa2\xa3:)r\xfeTm\x855\xef*\x10aQ.\xb7\xaf\xe5GBa\xc8sn\xa07\x99\x95\xc6\x19a\x87\x7f\x1e\xd2.t\xbai\xf4I\xf4\x8e\xc4\xcf=\x8d\x01Y\xfe\xb5q\xf0R\x10wal+\x8c>\xe2A\x88\xd0\xc0b\x8a\xbd\x0d\x92\xb1\xa9\x1a\x15\x13\x8a\xb14\x9eapm\xb4ai\xe5\x12\xa1m\xa1\x85\xa8\xd2\xb5\xaa\xef\x91\xee\x1e\x81\xf8\xd0*b\xcf'\xa5*\xe0\x14\xfc(L\xa2%\xe9\xe2C\x16\xc0F\x80\xdeyq\x88g%\x1c\xa4\x1aD\x0f\x8c;-W\x170R\x93\xa2I\xaap\xc4j\xda\x87\xc6\xad\xb4\xd1\x1e\xd2+\xe2J\x19\x96\n\xb0\xe4\x06r\xac\xcb\xa3\x14\xda\xfb}\xed\xad\xcfH\xdd\x1e\xdc\xb6G\xe9\x82d\xde\x8b\n\x1c\xa2+\x15\xa9\x01\xc9\x0bG\x12MpS\xac\xb8\x1b\x84\x0b\x12\x07\xd8yt,q%\x98\x1d1'\x93H\xd2\xab\x9f\xa7\x92\xcbH\xddd\x01\xa2\x06\xb7DT\xdb\xde\xc2\xb3\x86.\xcf\xe1F\xcbS~k\xd0\xbf\xc3K\xfd\xfe\x81S8\xc5\xdc\xf1}\xc9}f\x93\x1a\x9a\xec\xcd\xfdc}\x16\xc4\xfe\xb1>\xcf\xcd\xdeAs\xac\xf6\xeaBqK\x04\x0bH-\xc7P\xd2\xeb\xcc\xb3\"zU\x8c\x97R\xd1*g\x13)\x8a5\xe6\xd6\xcb\n\xebWau\xe8z\xc9M\xe8\xf3\xe4\xadYw\x1d\x07\xab \x0d\xae\x08\x9c\xe6.0pZn\x02\x87u\xbc\xef`6\x0c\x1e\x03\xca\xd6\x948pl\x82w\xe5*\xcf\xa4zi\xb1C\x07S\x0e\xc8\xc0\xfd^\x9f\x01\xe9\xd7\x01V\x93w\x15\xfd~\xec\xfd\xde.\x82\xd6,!\xa7\x00\xee!p\x16$\xeb(\x07\xf6\xd1f\xd3]y\xd7\xcf.sX_\xc0\x04\x80\xbd\x19\x939\xba\xa7\x90X\xc0\x0f\xe8\x8e\xa3\x88\x92m\xb9k\x9a\x10i\xef@\x17\xb9\x1du>\xdeE\xa2\xa2\x12>\x99/#9\x97\xf5f\xe8\xc4\xd1$H^y\xafl\x8c\xfb\xcf\xd2x \x96\xa40\x82W\x18\xc3\x153H\x0d\xd8\x9e\x92\x07\xc6\xcb\xc9l\xfd\xe4\xe8\x02\xd9]\xb1 v\x89\x0b~y\x81\x03L\x9dBe\x1f\xbb\xc8?_&\xb9\x8eDv\x04\xb9\xd1\xb8\x83\xbf^\xd3\xc6\x13x\x8c\xa5\x1f\x83\x17\xce\xe01/\xfe\x18|\xe6\xe2sA K\xd0]\xfc\x92\xa4\x0b\x12W\xb5\xe5|\x19\xcbazr\xd1\xc8:?\x17\xd1\x19\xce\xcf-\x16\xaf>\xec\xce\xa3\x18\x9dp \x0cYf)\xcf.B\xe3\x93\xfc[X\x0c#\xe24\x9f]\x0c\xcbh\xd5 s\xd7\n\xa8\x8c\xd1(A\x87c\x82q]R\x1e\xa8\xddW\xee\x13\xb1T\xce\xe7\xe7\xeb8\x9a\x07K\x12\x9f\x9f\x03\x8f\x14^@0$\xa6\xdf\xcd\xd63/%/\xc2+\xbcJ\x9d\x87\x9fx\x90\xbd\xd3\x88\x93\xbb\xba\\\xbcBU+\x89Y\x17A8S\xb1TS\x90.\x95\x8a\xb6r\xe2\xff\xd2\xc3\xa4x(y[\xf1u\x7f\x99\xbc\x08\xb3\x15\x89\xbd\x8b%i\xa2\x07\x9b%j\xd0\xde\x84\xa2\x934g7\xd3\n\xbc\x1f\x18\xe27\xacK\xa5vk\x0ew\xc5n\n\xec\x90\xa58\xf3\xf9q\xdf\xb3)\xae\xa1Ux\xdeM\xa28\xb5\xb5\x04v\x8d\xa9W\x11\xf9\xd7\xb8\xdc\xc3\"\xfbL\x83\xc6}>N\xa7\xc8\xcf\x99\xc4\xed\xd2\x01\xca\x93e<\x88\xf1\xde'\xecE\x96R\xf8T\xd4\xe3\xbb\xb0t!\x1c\xa7S\x17R\x91gD{\xa3\xdctX}\x10\\\xde;\xacRR!\x81\xea\xf3E\x1c\xe9\xd3E\xec\x1d\xf5\x9d\xee\x8a\xa4\x8bh\x96\xe8(\xed\x9e\xf2\x1eg\xd6\xc7\xba\x04\xd3\x9a\xbd\x80g\xc2r\xc9\xf9\xa6\xbbfYl\x0cff,?\x96\x1c\x14J\x89\x1d\x94\xf0\x9d\x0b\x94\x81\xa3J\xcc\x80\x19B\xc9*hL\xdd\xa5?H\xa1o\xb7\x0bW.\xdc\xb8p\xe9\xc2\xca\x85s\x17.\\x\xe7\xc2\xb5\x0bg.\xbcp\xe1\x99\x0b\xaf]\xf8\xc2\x85\xb7.\x86\xb1Z\xe2\xe9KO\xf0\xaf\x98T\xdc\xe2\x020%\xe5\x9cw\xe7\xbai\xc6\xabS\x89\x9eK25\xc5\xfb3\xcct*\x831\xb8\xd3\x08\xce\xba\x97$e\xd1\x87\xcf\xba \xfd\xba\xc2\xaf\xcc\xac\xe1b\x94\xce3f>q\xdcB+\xd3\x8dI\x12-\xafH\xcc\x82\xcc\xbe\xe5\x9c%\x87\xd2=\xfd\x05\x8f\xbc\x144\x04a\xe1\xfc\x97\xfbU\xe5\x04D\xa5\x1e\x94\x1fcp3\xb4\xd6\xbf\xb5#\xa7\xe8\xd2\x88\xf1\xe8\x1b\n\xa4Et\\\xf2%]\xad\xfc\x1c\xfe\x82\x16\xcb\xb8W\xf2%I-\xdc\xb4\x11\xf3\xc5s\\x\xa9\x8dhO\xfb\xc0\xd2\xf2a\x94\xe4\xc2\xfbp\x9e\x93\x13v\x86\x8f\xc6\xbd)\xeaQ\xaap\xd1\xe7\x11\xcb}c\xd6\x08iF&D\x8b\xd8\xb6\x9e\x07\xb1\x9f-\xbd\x18\x82\xf0*\xe2\xaa\x1c\x17\xac\xe7/?{\xfe\x83O\x9e}v\xfe\xf2\xd5O\xbd~\xfe\xec\xcd\xcb\xd7\xafLVwZ\xeb\xa5\xad\x89_\xfe\xbe\x08i]3\x8d\x0f\xd4\x13\xbe\x1a/\x99=2p\xe1\x99\xbc.\x89X\x17n\xc1\xa7bH\x99|\xbap\xe5\xe4y\x07\xe9\xfe\xa8\xd5\xb6\xe1\xe1Y\xbf\xaa\x86\xa1\xb2{\x02\xb5h#\xae\x12\xe4\xa8[\xe0\x90\xc1\xa5\x10\x8dm\xba\xa0\xc9\xa7\n\xbe\x14\n3\x18V\x90\xccqMh\x9ew\xfa\x81\x17\x89\xf9\x03\xa0\xbf\xb0f\x99\xf2\xfb\xe3\xb8VD\xcdu.\xa7\xfa\x7fXR \xdf\xefD\x8e\xc7\xf5\xc4\xb8\x0b\x8d\xd3\x14\xd4.kP\xa6\x06\xba\xcc]\xb8M\xefK\x0dj:\xf7\xc0\xcb7\x0e\xe8\x1e\x0b\xb5\x8b\x17\x88u\xa3\xe2\x97\xe2\xae\x9bi-\xffQ\x1c\\\x06\xa1\xb7\xd4Z\xfb\x85\xb0>\x84/\xd4\x87\\\xd2\x7f\x85\x91\x83\x90\xdb\x8b\x9fj\xd9K\x92nr\x0d\x94\x0f\xf2m.\xe7\xbd\xb5S\x07\xb9\xdc)\xdc\xb0@\x0f\x1c)R\xba\x18*\xd5S[^x\xc9\x16-\x1b\xd6Q\xe3\xda\xa3i\x8a\xf1\xdbMZ3\x900`\xfd\xd5\xf7\x00\xe7\x04\xfd{W\xccM\nF\xf0\x12EU\xee\xbe\xc0~\xbc\x96\xd1\x82=\xb1P\x9a%\xba Q\xea PL\xd8 #\x8fP\xac\xbc\xd4\x0f\x03\xcf\x83\xe7\xf4\xc8'\x89Fn\xde1l\xc5\xdatb\xa3R2\x9f\x9aK9B\x9dC7\x7f\xae\x0ey\x81F\x0f\xccI&\x83\x9f\xe5`>K\x85\x1b\x95\xfdZD\xf1X\x94T\xfa\xfa\xb8\x15j\x7f\xe9\x18\x870S\x1f\xe4g\xe1\x0d&8e\x92-\xdf\x9ej\xb3\xd5\xed}\xa1\x8aj\xe6{,n9\x87\x8e\xba\x86l\x0b\x86\xb8\x05\xc3\xb2\x8cFP\x92 \x99\x8c\x96q)\xb3j7\xde\x92\xa7\xe7\x8an^\x1bg~\xe5*\xa1iki\xc8G\xc1T\x18\x17\xc9[\xa8\xa6=w1\n}P\xefF\x8cH\xdf8w\xbc\x1b\xc5\xd09\xcf\x1d\n~'Mk\xcaW\x8dNhA\xddB\xd6Y\xba\xa3U\xbd\xcb\xf5\xb7\xd6\xcf\xac\xbb\xf0\x121\xf7\xda\xee\x16XP\xd3q\x8e\x18\xb4\xaeT\x93pum\x7f\xa1\x0b\x8c*\xeb\xbe\x86\x10a\xd8*#\x89\x8d\xec\x0b\xcdSN\xbb\";\x13\xa7\x1d\xb5\x15\xe4D\x91\xfdN\xf7\x0cyEd_\xab}\xcer\xc8\x83\x9c\xf0\xfb\xc7\xba\xfc}\xf4\xe4\xaf?\xe1\x0ft'|\xd4Kv}o\x9df19K=\xff\xed\x9b\xd8\xf3%\xb6B\xe48\x1d\x8d\xf6\xa8\x90;#2u\xa7.\xf7\x98\x07\xe5\xfc\x1fj\x89\xa4\xa2c\xd2\x9e\x85#;\xe1\xa1\xb6<\xc6\xd4x4R\x91\xb8\x1f\xed1\x89\xc8\x14\xc9n\xe1F\xa2l\xd8\xf5\xa3\x19\x8a\xddxO\x87\"\x1a-CJ\x02\xcf=\xd6hs\xa3\x02\xe3\xc0\\I\xc1\xe2\x84ln[`\xb1l\x88\xad\x8f\x882\x8f\xa2!X\xb1\xf7\xa5U\xa5Qj\xd9\x0b\x8a\xf1\xd6\xec\x9d\xb7A\xd94\xfe\xf2f\x08\x16\xfdS\x0d-\xecb\x80\x9a\x08s\xb7]x1\xcb\xe1\x16\x7fy\x83\xb4\x81ve\xf6\xce\xc3\xf7\x1eXo\xbbgH\x8d\xaaU\xdc\xa2\x11g\xe5]o\xa0\xd41\x18\x08\x8a[8\x91\xe2o\xeb\xc2\xa0\"w\xa3\xa3n*+:Q\x1a-yhk5\x8df\x17\x9et\x1cS\xf9\x9d\x8cc\x8d\xabi\xa3\xbfN\xc8\x02\x15\xd0}\xdd\xe8{\xc1\x04\xfe\xfe d\xf0\x04\x92\x13h\xb73v\x7f\xad\xd8\xa0\xd9\xd4\xc5\x80\xb7yh\xa2jv\x82J\x1c\xb407\x8bh1\xfd\xdb0\x1c\x1e\xee3\xc3\xa1\xa4ag\xa6\xc3\xc3\x83o\xdbt\xa8_D>V9\xae\xac\x95\xdb\xd4-\x8c\xb4X^\x87\xdaE\xd5;`=\xb0>Y\xe1\x1eA\xd9d\xd1\xb4\x9d\xaa\x1d\x17\xe6f\x8c\x84\x9b\xaf\x0d;\x9em\xebzr\xa7\xbek(&oB\x1fR\x9d]A\x1b*Ks\xc7\x81\xe3\xb0\x1f=\x82`,\xec\x12\x98\xbe\xa1\xf5 f\xd6*\xfe\x1f3\xfc\xe7w\xe5J\x17nS/\x08\xf9n8\xea\xddc7\x88\xd9\x96\xc9\xfc\x96{\xa5\x8e\xd7\xc5E_1\xe7\x88\x08\x17\"\xa06r/\x91\x9d\xbb\xfal\x1eE\xd6\xc3\x18\xda\xc50\x95\xa9\xe4wa\xee\x8a\x0d\x95#b\xc9\xb6\\NDy\xdf\xceW\xee\x92\xba\"\x18\xbb\xc6\x04\xb4\xd4[E\xd7\x1b[r\x16\x9bZrf\xf5\x96\x9c+\x83%\xa7\xd2\xdc\xcd\xa6\x06\x9fK\x9dE\xb5\xac4)\xbf\xb0\xd2\x12\x0c?\n\xe7\xc1e\x86\xb6W=\xd1 \xb9mV\x1f\xf5Z\x04I\xaa#+j\x9akJ\xa2\xe2&a\x05\x84\xc0b<\xb3-\xd1\xa5\xe1RF=\xeb\xfc\x9c\x10t\x1b8\x95b\xcb!\x8c\x1e\xe5(h\xd5\xc5\xbc\xe70\x82\x99P\xc8\\U\xdeva\xe5\xb8RA^,\x1c\xa7S8\xd5\xc5[\xe7O\xe8\x1f\x16\xac\x0d=O\x11:\x821\xb3\xa5\x92i\x01\xe2\x91:\xca3V\x11\xf5B\x9f\x0c\x91\xd0o6K\xae\x1c\x0eL|J\x13\x15\x88\x88|\xcan\x0d7\xb9\x9f\xc8\x8d\xd4\x01{\x03\xaf\x91 \x97\x8df\x8fX\x8c\xadCg\xf7u\xe8\xe7\xf1|\xce\xcf7\x9c\x8a\xf9|\x88\xa2\xef\xa63\xc1i\x84^\xcd\xcd&\xa3\xa5G\x9bR,\x05\xfd\xfb-\xbb\x82X\xce8\x9dn\xf0\x9e\x8a6,\xb6(}[\x9d1\x10\x92w\xc4n\xbe\xd1\xc5\x8b\xc7\xd1\x94\x8a\xb0\x91\x03A\x11\x927\xd0\xcd+{J\xe5\xe4\x81\x88K%4\xfa\x1c\x05\xe3q\xc4]\xe40ie\xdcM\xd6x\xeb1r\xa1\xaf\xbb\xb7\x87\x96\xb4\xb8h6\xaem\x96kc\xc3:\xcf\xf8\xa6eg\n\xc4\xac\xf1~\xe2U\x1e\xd1\xa2v\xdd\x0dt\x82r\xe3\xa0\xbc\xa0\xe6\x15\xd1\xafc}\x1cx\\\xc5Pc#c\xb6!9\xd5\n\xbb\xebH\xd8\x89\x85\xc0\x13\x08\xe9r\x13\x07\xa21\xa1\x0f\xcb\x17\x1dI\xcd%8l4\xc0\xe0\x15\xec2+\xaf\xb7w\x82\x847\xa0/\xb3\xaa\xf9.\x8e\x0bC\x8e\xb6RnJ\x15\xb7\xc9\xaac\xa9\x9b\x80Mnl-\n\xe2\xb2\x08\x92\x86{F\x0d\xf7\x8a6\xb9\x89Un\xaf\"\xaf\xdc\xbf\xf5\x86\x9bVu\xad\xbb%\xdd\xd1\xfd\xfa\xb2\xd1\x8d\xaa\xbf\x14\xfc\xa4\x9fue\x16L\x98\xf7\x1d\xfd\xaf\xf7\xba@\xcch$\xb1\xab:O\xc6K\xe7vP\x85S\xc62\xb7#GGx\xe6\xb6\xec\x0b\xcd\xbc\x08o\xec\xaf\xde3]\x9c,\x1d\xd7_\xa1\x16\xaeb\xccU\x02\xad.3\xdbgq\x88\xf3C#\xadTn\x8c\x08\x9f%:\xa3\xdf\x81\xfb\n\xcc\xdc\xd5\xa9\xea\xd3_\xa3W\xd5\x88\xcd^\x9e\x9b\xb0\x12\x99\xb8h\xaf>p\x80D\xf7+i\xb05\xdeG\xd2\x0b\xe8,d\xa7\xe3\x10-\xcf\xf4o\x19%\x1c\x91\xf4\xce+\x19\xa5\xd5\xeb\xfb\xef\xdd\xedN5\xa8\xf6B}\xd7\x86iy\"~(\xce\x14\xcb\x8aC\xa5\xae\x8b ,\xc5]\xb9\xefQ\x88\xadS\xffX\xa3\x1d(%\x94\xbb\xe3\xa1.`\x9a\x8d\x94\x8a\x07\x0f\xd4\xed\x8d\xce\xd1B\xb3\xcc\x04S6\x92y\x1cUrq\xd5\x9d\xb6Y\xe8v\x14\xddq\x0d\xc7\xa8Gv\x99\x8ax\xea\xb8\xf0\xbd(Z\x12/\xb4Q\x94!E\xb8e,\xc0LA\xe8\x15\xfd\x10c\x96\xf4\xbcG\x07N7HI\xec\xa5\x91>\x90\xe3\xb1\xde}|O\xb9\xcd\xc5\xf6\xe8\xa0\xba\xa3=\xfd\xd6M\xf4\xead_\xbf\xff\xe7\xbc\xcdj\xe5\xcb*^mt\xacV\x0f\xcb\x8b\x878\x8cj\x9e\xcb\x87Q\xf5)\x1e\xe64\xf1\x17\xdf\x1bO\xf2\xe5\xa3\xfa\xb6\x9b\xa8\x10K\x8d\x1e\x94\x8d\xa6\xa4\x17\xb5\xa6$\x0c\xb2T(\xe6\x13\xa6\x98\xf7\xed3\xa4A\x9e}\xc6\x83#\x02\x8f\x16\x8eh\x8e\x0bG!\x11\x0b\xf6\xec\xe4q\xf2\xca\x95\x1bb1\xe0 \xe8\xcc$\xee\xa1S!\xde\xa0\xe1\xbb\x93y{\xda\x97P\xc4\xe9\xa7$\x85a\x11\xbf\xb9\xcdo\xeb\xd1\xf3\xb9}S\x928\xfa\x0e&+\x1bA\x8a\x17\xd1o\x0c\xd2\x10;\xd5\xd1V\x1b\xa4\xf0r\xed\xa5N\x95B\x8c\\R\xb1&t\xe0\x86\xf9\xf2\xa5Z\x07J\xf1\xe1#5$\x0cU\xa0*\xe4\x06\xb3\x05~\xc7\\\x08\xe7|\xa9\x98\x91A\xb5M\xd8\xef\xb0\xbb\xf1\xd48\x178\x0f\xe7\xe8\xe5\xfa\x8e_Ge~4\x94`\x8a\xf9\xa1\x07\xe4\x0b\x18\xc19\x06\x16\xb3\x8b\xc9i]tgQHN\x1c\xb4\xbf\x9f\xc1\xa9\x10\xe2\x983\xf0\x05\xd3\x98p7\xf6\xfc\x17\xe5\xdf\xf6\"\xd7\xa6\\\xbb0\xb3opg,\xf0\xae\x15\x9f\xe6\xebj\xa3\xed\xb6!a\x16]9Mv\xa0\xc2\xdbs^\x83\x0d8\x03\xf2\xda\xebF\x8f\xe3uQoW\xc1\x89k\x8e\x10\xbfz7\xa4\x82]#\x05\xbb*\xc7\x92\x1c\xa9\xb6\xc0\xa2\xd8vx0\xdb:\x9bt\xd5\xd8\x0c| f\x8c\x07\xd8\xb3\xa2\xfbn\x8d\xccW\x89\xb0\x1b3\n8\x1b\xa7,\xcb\x1f\xcb\x9e<=q\xa0\xdd\x8e\xb5\xd4\x0b\x8b\x8e\x80\x17\x9d\x8a\x9c\xab\xf6\x9a\xa9]\xac\xef~\x17\x03\xab\xb9\xe0u/\x13.:\xd5\x1fI\x0bo V\x13\xd3\xb5\x10\x17<&.\xe2\x93~\xf5\xb4Zry\x97\x83\xd8F\xb52/J\xa4J\xc4\x08}y\xfa\xf9\xf9\x8c\xb00\x94A\x14\x9e\x9f\x0f\xc1\xc3\xd0\xa2D\xe7\xccw\x1ez+R\x94\xb9\xb2\xab\x0e\xd0\xef\xcb\xea\x91\xb9\x1dT\x9b\x9cG1}\xbd\x1e\xcb\xf8\xa0\x17\xcc\x0e\x86\x7f\x86\xec\xcf\x08\x02;'\xe8\x8aR\xa4\xf4\xfb-\xb9\xf9x\x93\xc6\x0c\x8e\xe3\xb8\xf9\x08\x04!$(\xd3.\xcc:\xfc\xc5\x98L\x99\xa7s\xce\xc1Hm\xd7\x16^\xf2\x92c\x89\x98\xcb\x98YA\xa4'\xcc\x9f\xcf\x92 J\xaa\xf4 y\x8e\xaa\xaa\xb3\xb5H\xf6R\xa9N-\xc0kU\x1f\xa8\x95s6V\xad\x92\x83EE\xfc\xa7\xf2\xfa\x8a\x92\xc3\xca\xbb\x08\xe3/\xe2w\xe5-\x9e\x13\xa9\xf2\x9e\xc8\x9a\xc4\xde\xe4\xbf\x94w\x13\xe2\xc5J\x93\x0c\xc8\xdfd?\xd4\x17\xd7\xc4\x0fHR}\x93A\xc5\xab\xec\x97\xe6\xdde\x90*o.\x834\x7fo\x19\xa4\xca[\x92\x08PyWz\xc2k\x90 \x9azrAA\xa9'\x7f\x92\xd7\x93C\x94z\xb20\xf1\xa35E\x83\xea,HOx=\x12\xa4\xe4E\x82$F\xa2J\xd5\x9d/\x119\xdaFU{.\xba'\xda\xaf\xb5 \xcb\xba_A\x95*;\xae\xd2\xb1\xc0\xdc1\xb9\xe5MZ\x15\xe4\xdb\xc6\xec\xedL\xef\xd1\xad\x90Qh\x83\xe5(\x0e\xa1\xa5\xdfx\xa4x=\xdf\xb4\xd5\xa4\x92M\x0b\xd4Q.\xcb\xa3\x0cddr\x9b\xa6U\\>\xe1\xed\xe8\xb5\xa3\\\xee\xae\xe4\x86\xc7\xe0\x189\xc6\xd9r\xa7\xf4\xbd\xca\x11\x11{\xe5[\xae\x98S\x8b\xbd\x105\xbf\x10\x94\xe2\xf0\x97\x04f}\x15\xe5\x99\xd0UQH\xe5\xf7\x89\xa5%\xe9g\x8f{[G1b!\xcfP\xdf\xa0\x93\x1cR\x8c\xea\x9f\xcb\x0d\xfac\x90\xd8\x1c\xc52\xdc}4\x9b\xf5:?\n\xb1\xab>Z4\xb9\xbd\xa5\xcf\xe54\x05\xac\xecY^\x16#\x98V\xb3\x18\x9e\xf2\x8b{\xb4\x1d~'\x8ecj\x87\x87\xfe\xb0\xa3b\xd1=\\\xf4\x80\xa2=\xf3\x93\xc5X&\xe3\x1e\xf7q\xc7\x07\xf4E\x17\xbcq\x9f\x03\xbf\xc5\xae\xe7}\xefO\xc7\x11\xe2xvr\xaf~;\xae\xa8\x8c-\xe0\x1d\xf0\x97k8\xb5\x99\x16\xd5\xa1n\x17\x1b\x83\x07\x8f\xa9\xc1\xe4\xac\x1e\x93=\xee^^\x8f\xebyn>c)\x1f\xd9\xc1\x06{\x81\x0b[\x19\xc5.\xf3f\xa0\xaf`\x1a\xc0q\xb2 =\x8d$,\xdd\x9c\x9eJ\xd2\x7f\x86\xe8\xe0\x8d#\x89\x9e\xd6\x93R\x9f!J\xc6\xe24\xb1\xbe\xf6\xa7\xe3\x00\x91.\xba\x03a}\x90\x9e\xe5\x17q\xf3\xce\xd0\xf7\x85\xdf~\xe0\"B\xd3g%\xd0 \xb4\xb0\x18\xb7\x7f?z\x04\xbe n\x0e2\\\xbf\xbb\x8e\xd6\xb6\xe3\xb2E\xe1\xbf\x9c\x0dj\xdeb\xbbH\xd7\x016\xd9'\x9b\x86_\xe1r\x8a,\x97\xa8\xd5\x7fG\xff\xeb\x1eRY\xc5\xf0\x7f\xcco'\xb2\x90\xb4]\x0ci\xc7\x83:\xdf\xe7B\xe2VB\x9c\xdc\xf66G9\xb4w\xa7\xf6W\xef\x91P\xa6\xf6+\xef\x15\xbb\x83\x98\x16I\x1e\xe0\xe1fk\x03\xa9\xbf5z\x18=XYt\xbe\xe3\xb4n)\x1bW\x89\xe4C\x88\xc5\x12\xb9 .:\xc2\x19\xbc\xe0\xca\xc2[PHi\xe18\xd8h\xd7\x95\x85\xac\xa6\xe0\xa1,_6K\xac\xe3B\xc8~\xb5\xdb\xa9\xf3\xed\xf0BIc\x85\xf9\xa3\x90\xf1\xb7p\xa0\xec\x0c_&Va\xe9\xb7\x86*<\x0c\xd1\xd1\xc8+\xdf\x02\xbdy\xc8S\xa0^\xc9\xa0G\xf5\xd0(\x8a\x9a\xe48\xcd|hJF\xf7\n\xc7\x15\xcd\xe09\x82\xb8\x10\xa1\x7f\x01ECM\xd8\xe4\x0dh\xe1F\x18\xce\x8e\xb9L\xcag\x83\xa5d\xc9G5\x00\xe1\xc7\xbb;\xe3<;C\xf9x\x86j\x16M\x136#\x9e\xcb\xf3~\xf3S\x1aC\xfel\x0b\xe4\xe7\xbdi\xd5\xf6\xa6\xe1\xc8@\xe4\xe6=U\x90\xf54\"\xb2W\x16\x91\x93\xb2\x88\x9c\xe4\"\xb2W\xfc\xd2\x88\xc8j\xcd\xc6\x9er\x89\x98\xae\xd4\x86\xd3s\x0f\x96e&\xe4p\xc7\xed\xe5\xcaD\\\xed\xeaw\xf4\xbf\x1e\x86\x07j\xef;\x85v\xff\xb8\n\x8f8\xfcH\x7f\xbfM $..\xcfT\xef\xe0$\xa6\x8bo\xe5b\xdb\x05\x0870mL\x15\xc1\x93\x184\\x\xe7J\xd3\xa5\x0bk\x17\xfd+\xe7\xdcAQ\xa5/u\x0f\xaf\xd0\xba!\xc2\xce\xa9\xcfo\xf0\xb9\x08\xc1X\xc6\xe8\xe2=\xf4\x08\xaf\x97\xe5\x84\xa4QD\x17\xd6\xe2V\x8c\x91\xa1DJ\x07\xbcVj\xd4\xd4\xebC\xad\x80\x88\xd7\x1737\xbb$\x17\x9f{.t\xfa\x945\\\xf1\xcb'\xcb<&\xc2\x9a6\xab\xda\x9c6rX\x8eli\x02\xe1\xaa\xc6o\xf9}e\xfa\xa2P\x04\xe9m\x9e\xbb\xda\xdb\xed\xda\xfb\x93\x90\xbb\xbbI\x11\n\xb4s&;\xee\x8d`\xbc\xc0\x88\x15\xa1p\xe2c\xd4=t\x98\x0d\x0e\xa7V#\xbd\x89O\xcc\x18\x12\xdd\x95KF'\xd6LZ^b\x96|\xe1\x92\xdf\xe0D#>(\x7f\x98\xe9\xa8.R\xec\x8c'4@~=c\xc17\x8a\x80\xc8\xb8\xb7X4\xd8\x88\xf1+\x1e\xcb8\xc6T\nQ\x98\x92\xeb\x14\xf30\xc5\x97\x89\x93\xfbo\xc6,yD\xc00%*P\x88\xae\x89)Et#id\x99\xbe\xf9\xdej\x8a\xc2q\xc5\xeeEr\x9fp\xe3\xa6\x08\xe9\xd0\xd3rV-\x1e\xfeCT\x0f\xa9\x19a\x84\xfc\xccD\x8a\xb4\x1b\xcc\xcc\x9a?\x1e \x13jS\xf9\xd3\x82\x9c\xdd\xd1\xdaXO\x16\xe3\xa4\x08\xda\xcb~\x04\x85MF\xe9>\xbf3\x86X\xa1\xf4\x8a\xffX\xe2\x8f\x9cq\xc5\xdb\xf5e\x81\x0eZZ\x94\xc6\x1b 6-\xc0\x88\x8e\xc3\xa9\x0es*^8\x90u\xe9\xcf\x0dD\xa1\xc4\x9esa\x85\x8b\x14Z \xa5qJ\x12{\xad\xe3\x0fj\xefs\x1a\xc2\xa8\xa2\xe8\xaf\xf9x\xa6\xbd`\x9b\xe1M\xfb\x0d6\xc5g$\x8d\x03rE\n\x8a3\x8b\x08#D\xc1j\xbd$T(\x12h(\x90\xf8\xb1\x96*\x89\x0fk\xda\x9e\xbb\xa0\x1bqe|9\xb5\xff\xafq\x9c\xe5\xcdj\x1aoM\xdf\xf8\xfb\x0f\xd6\xbd\xbc?\xdb\xf5P\xac\x08\xe6n\xe0oh\xd1\xb1\x04)\x04\xaf\xaa\x8a\x81\x85\xca3q\x1a\x93\x8a\x01\xf9`\xbb\xad\x0f\xeaW\xe3\xe7D\x19\xc0R\xfb\x12\x88\x03\xfe\xa64I\x7f\x8e\xc7\xc1\xe8\xe9\x8e\xbeM\xcf\x8e\x1c\x93\x8c\x1f\xe1\\cVF\x9ct\x84x\xb3\x03I\x1elH\xf2\x7f\xd5\xefa\xe9\"\x1asj*\xee\x84y\xccO\xb1\xd5\xe9x\xe2\xe4R:\xac\xb4z\x98\x9fP{]L\xc3\xbf.I\xfa\x19G\xd0\x1f\xd38z\xc5 <\x16LV\xb3\xfd\xef\xa7\xd4\x92\xd2\x0f\xe96X\xe8B%DsXD\xecm\xf1\x88\xbd\x04\x86\"\xa5b#s@\xaf\xb2\xee\xf3\xb33\xba\x1c\xf8\xa5K\x12\xdf[\x17\xfaT\x19\xa8N\x95`,\xcd,H\xc4dP2z\x19\xbc\xd8\xfef\xd1\xec\xdf\x84\x98\xfcl\x16\xc4$\x01\xaf\x08}g\xf4X*\xc5\xbb\x96\x82L\xf1\x10La\x9ea\x81\x12\xcfN\x9f\x1d\x83)ya\xa2t)[\xc2 \xb4\xdb\x01<\x81\xf8\xc4\xc1\x19\xe6\xf9{\xe4B\x01\xde{\x8c\xa0Mg\xff\xe9\x08\xfa(\x05S\x01d\xb7\x8ftgp\x08\"\x03!N@\xc0\n<\x1d\xc1\xdeQ^v\xff\x10\xcb\xd6=\x7f\xf4\x08\xf6\xf6i\x81\x8c\x12\xc6\xc9\x04\x83F\x15\x96\x89\xfe\x01Zr\x80\x12K\x1b\xfb\x1a\xb0*[\xfdJ\xd8\x01\x82uup\xc4\x1f\x88\x0e\x1e\x17_\xf5=D\xe8\xc1~\x0e=\xee\xe5\xd0\xe3\xc3\x1c\xda\x1f\x0c\xf02(\xce\x13\xce\x11\xa5\xe0\xac\xcbe \xce\x9b\xf5\xff\xfe\xc5\x9fY\xb5\xfbPuz\xd78Q\xc8\x18\x8b\x1a\x18\xf6\x0dO\xdan \x91Y\x8a\xcfJt\xe5r\xec\xeeX\xd6\x1b\xbew\xf2\xdb:\xa1\xdd\xef\xdf'\xb0\xa76p=\xad\xd8:?'\xc9\xa7\xd1,[\x12\xabJ\xb5y\x9a 9\x8d\x82\xc3T=\x98K\xaf\xceQ\xc5x}9I\xbd\x94|\x7f\x99]\x06a24l\xdadM|\xd33\xfa\xf1\xb0\xcdd\x08\x99Y\xc8O\xc8\x92\xf8i\x14'C0\x04c\xd2\xbf\xcbR/\x19\xbb\x068\xb6Y\xe6\x13Zs\"\xa6\xc2\xdc\x8f\xbc\xaf\xd1F}\xf5\xf4}U\xf1\xf0;\xfa_\xefU\xf9mn\x87\xf6~\xffX\x89\x90\xcd\xed\x0c:\xbb\x84o\xd3'{J\xa0e\xfeh\x7f\xaf_}\xe4\xe5\x8f\x06J\x90i\xd1\x87\xbd]\xc79\xf9N\xfeL\xe0\x0e\xf8z\xc5O\xca\x98C\x81\x9f\x05s8\xa9\xa0)\xe3\x06_U6\xa7|+G\xa3\x10\x93b\xe6\x05!=\xb65\x1c\xac\x0bC\x1d\xa7eEF$\x93\x19\xbc\xd8(i\xd9\x8fC\x9d\x84\xb9\xd1\xbdB\x99\x07\x1e\xb4X'a\xb1\x1c\x97\xd5 \x93\xdfQ\xbf\xd1q/\x95[B\x97$\xfd$\xf2\xbd\xe5s\xdc\x04\x9b\xc5\xfa\xb3{\x18\x8c\xd8\x8b\x13\xf2\xd3\xde\x8a\xbf\xea\xd8\xb1\x18\xfcv^\x0erC2]|\xdc\xe9t&a\x16/\x87`-\xd2t\x9d\x0cwv\xd6$M\xd2(&\xdd\xe4\x9dwyI\xe2n\x10\xed\\\x0dv\xc4\xaf/\x92(\xb4&\xe1,Z\x9d\x07\xb3!X\x7f\x85?\xe8d\x815 \xd11\xddK\xa3\xf8\x07\xa5:\xa3p\x19\x84\xe5\x1aEAk\x12F^\x96.\x06\x9f\x91Y\x10\x13?-\xde\x1c\xee\xec,\xe9\xbc-\xa2$\x1d\xee\x0ez\xbd\x1dV\xb2\x13\xf3\xa2\xddE\xbaZZ\x93\xf0\xb1v\xd0\x1bQp\xc9\xb5c\xd07hR\xe3\x87\xa9^\x7f\xdc\xdb\xdf\xebi\xb7od\xc4\xdcZ\xf4Q\xbcH\x85\xb5\x120\xfe\xa6\x88\x15=#\xeb\x98\xf8^Jf\xe0\x853\xc9\x91&K\xc8\xac\xdb\xe0C\x03\xf2\xfct\xa9\x98\x87#\xe9\xc9IK\xbbg\xfe\x82\xac\x98uu\xf7\xa8\xf4\xe4\xe3g/?9{\xf6\xf1\x8b\xf3\xb3\xe7\x7f\xed\xc5\xa7\xcf\xb8\xc1vP*\xf3\x93g\xaf_\xc9\xcf\x07\xbd\xdd\xd2\xf3\xe7\xaf?{Q~^~\xff\xa3\x17\x1f?\xfb\xc1'o\xce\xab\xed\xec\xefj\x8b}\xfc\x83O>\x91\x8b\x1d\x95\x8b-#o\x86\xa1\x02\xe8\x97\xea\x83g\xf4P\xc1\x9f=c\x17\xce\xc4\xe3\xc4\x9b\x93O\xc4\xbb\xe2\x87\xae\x80\xa8C\xfa-\x17\x9be\xab5\xc6\x0c\xa4_\xaa\xef\x7f$\x1e\x8a\x1fr\x81\x9f~\xf6\xe9'/\xae}\x82!\xe89\x1e\x96\x86\xf6\xe9\xcbW/?}\xf6I\xddZl8\x87\xe6\xe9K|/D\xd5\x81E\xbfY\xa5gH\xe1\xd8C\xfcZ~\xeaG+\xee{\x12\xd9\x16\xffQ.\xe1\xcdf\xcf\xa5\xf0\xe1X\xb0\x0c\xb3\xee!\xdfI\xfe}\xd5\xab\xfcA>\x9b%0\xbfD\xa5h\xa0\xb3|\xeaJ`/\x9f\xaf\x128iVH\x97_\xf0U\x85\xf2\x1cF0(\x83(\x92\xed\x96A\x14u\xf6\xca\xa0\x85Z\xd7L\xad\xebJ\xad\xeb\x86\xb9\xc2]\xf7z\x9d\xc9u\xefhr\xdd\xfb\xde\xe4\xba\xf7|r\xdd{\xd1\x99\\\xf7?\x9e\\\x1f~\xdc\x99\\\x1f\xedM\xae\x8f\x0e:\x93\xeb\xe3\x8f'\xd9\xc7\x1f\x7f\xfc\x02\xff\xffxz;\x9ed\x1f\x1d\xd1\x97\xb3\x8f\xbe\xf7\xf1\xc7S\xfb\xb4E!\xcf\x19\x84\x96pn\xed\xd3\xe1\xf8\xf3r\xb1\xdb\xcf\x9dJ\xb1\x9dr\xb7.y\xb7\x8e\xf6\xcb\x1ez\xe5R+,\xe5N\xc6\x93\xe9\xe4\xab\xc9\xfb\xea\xe3s\xfa\xf8s\xfbt\xd8\xbam\xb5n[c\xaf\xf3\xe5\xa43m\xb7\x9c\x0fv\x82r\xc9\x8b\xa2\xe4\xf8\xf3\xa2>\xc7>\x1d\xfe\xc4\xb8\xd79\xf6:\xf3\xe9W\x83\xf7\xb7\xec\xfb\x97\x93\xce_9\x99\xecLN\x87\xdf}4\x9a\xb4'\x1f\xb8\xe7\x93n\xeb\x7f\x98|\xf8xbO\x1c\xfa\xf6\xd4\xf9\xf0\x83\x9d@\xc7\"\xde\x19YD\x9f_B\xc33\xe3.\xfb.\x11q\xb5\xaakcU\xc7EM\xbb\x83\x0dj:\xdb\xa6&\xec\xdf\xb6}}alao\xaf\xa8\xea\xb8/}\xdf\x95\x9a\x18\x94~\xeco\xd0\xe03\x83yG+\x9e\xee\x1d\xa1\xb9\x02\xa5K~\xd2>\xc5 9{G0\xa4\xc7\xea'\\\xef\xb0;\x80[`\xc9\x9c\xd91\xbb7@}O\x87\x16j\xd3i\x19B\xa7_\xdb\xb1\xd7\xe6\x998\xca\x15]\xd6\xa4g\xb1\x96s\xc8\x7f\x87\x00\xb9\xc8\x05\x85\xf4\xfb\x07\x12(\xc5BU@?_.\n\n\x19H\xae\xe9\nA\xbd\x81\x04\x9a\xb3R{\x12(f\xa5\xfa\x05\xe8\xbf\xa7\x90]\xe95\xd4}\xec\x16/=\xb6\x1e\xc3\x10\xf6\xa4a\xec`\x0f\xe5\x96&\x14r(u\xe7\xff\xf9y,\xb3/A~\x13\xcb\xc8#E\xaa@\xa1G\xbd\n\xf4\x98)\xabk\x17\xe1\x8b\x9a#\xc6\x93\x11\x1c\xec\xef\xef\xee\xc3)W\\a\x96\xe9\xe7\\\xdfd\xa7\x85\x03j\xf9\x01K\xe9\xd9\xa6\xa7\xb5\x0e\xd6p\x00O\x9fB\x9fJX\xfb\x07\xbb\x83^\xf9\xd1#:\xdf\xbb\x8a\x11\x15\xe4\xd3\xd8[\x90\x13\xd3\x0e\xf6\x0f\x1c\x17^j`\x9f\xb2\x84r\x9f\xc2\x13\x18\xec\x1f\x9c\xc0\xa7\xed\xb6\x03o\xc7\x9f\xd23\xd9k\xfbS\x87\xc7\x19\xe8\xb9\xf0\xb2\x00\xea\x88\xd3\x1b\xad\x1e_hb\xc9;\x08P\x01C\xdeQI\xb7;\x0f\x96$\xf4V\x84\xb2\xf6 \\g)\xde\xdb\x8f\x92 \xc5;\x96i\x97\x9e\x1fd\x18t8\xf0,\xf5\xe2\xb2\x9b\xbc\xda\x97\xe7\xda\xbe0Q\x99\xf7\xb3\xf6\xfd\xef\xeb\xdf\xefF\xe1\x0f\xbd8\x0c\xc2Kv\x96\xcc\x7f\xf2\xeb\xea\xe8y\xca\xeb\xd7-\x0e]\x97\xcf\x94\xd3\"\x15\xd9\x86\x8d\x16\x1a\xf1\xbe1d\x0b?\xa2\x8f \xed^\x918\xa1\xc3x\xf4\x88\xcd\x845\xcb\xd6\xcb\xc0\xf7R~3\xf5'h\x93\xc0\x8eT\x98Q\xca\xe5\x91\x0fC)`\x15{\xb3\\\x12<\x9f\x8a\x96 \x90k\xcfO\xf1b*\xc9U\xba\xb4\x9a\\\xe3n\xc7\x8c+R\xa67m;\x93\xae\xf8\xf6\xc1N\x97\\\x13\xdf\x0e\xc7=\x1e\x03\x8d5\x14,\x97\x9dy\x14\xafdw\xffh\x0e\xe9\x82\x80\xda[*\x8b\xa1\xf4\xf82L\xedx\xdc\x9f\xbal\xafDe\xf8@\xc0\xa5\xb8\x8e\xac\xb5,d#\xc1lhX\xbf\x983\xde\xe6,\xf2\xf3A\x15\x13:\x82\x90E-\xef\xfa\x0b\xe2\xbf\xfd$\x08\xc9\xf7b\xe2\xbd\xa5\xe2[Dw\x90h\n\xef\xdc\x0e\x8a\xaf\xdf\xe7\xad&\xd9\x9a\x8a\xb1d\xd6\xd0hiu+*\xb67\xcf\xfe\xeav\xe8\xa2\xe2\xca\xc0\xb0\xdao\x9e\xfd\xd5\x9a\xc5N\xdfE\x85\xfe\xdf\x12\ny\x16\xd1\x0e\xbf\xd1u8\xef\xa6$I\xed\x18\x03@(K\x9bz\x97\xb0\xf0\xc2\xd9\x92\x80=\x0f\xe2$\xcd+t\xc4$\x94\xfa@[\xc9C*\xa4\xde\xe5\xa7\xde\xda\x85\xb8@\x9b\xc7\xe9\x82\xc4\x84\x1ep=X\xc7\xe4*\x88\xb2dy\x033\xe2/\xbd\x98\xcc \xc9\xe6\xf3\xe0\x1a\xa9\xa2\xf5\x18\xda\x10C\x1b\x1e[R7\x1e;.\\\xb0.\x07\xe6.\xafcB\xab\xb1\x13\xe2G\xe1l\x83>\x8b\xce2\xbf\x87r\xe0\xfc\x92\x96Q\xa5=\xaf\xc4\x92\xe2@U)\xa4\xc8\xdf\xaa\xaa\xe9\x08<\xd1\xa3\x02\xbac\xb0\xd8;\x94\xd8\xf2+\x1e\x888\xb4\x19\xa5<\x08V\x120sz$E\xf5f\xf9\x08\"\xfa\xa7=\x82\xbe\xc3e\x06t\x0e\xf0\xaa\xb6\x15&\xfb=\x19AF\xd7,C\xb9\xa7\xdf\xdf\xeb\xf7\xfb\xc5d\x93\xeb5\xbb\x83\xcf\xa2\x1c\xfc\xe4\xd9\xebW@\xab\xf1\xfc\x94(\xb90A\xdc4\xbca\xab\xe6I4\x84.E\x92\xc6\xc4[\xa1\xc3\x81\x17\x84 \x84Q\xd8Y\xc7A\xc8\xb6z^m\xa2\xab7\xed\xc6$\xc9\x96\x98/\xd53\xad\x99f\xc9>)\x96Lqo\xb9\xe2 \x04\xd0-\xac\xe2,\x833\x1cw\x83\x84\xa7\xdb\x0f%\x0c\xe4\x1a\x9a\x15\x89/ \xac\xbc\xf5:\x08/\x93\x13\xc4\xb6u\x1c]\x053\x8a\xddQ\x16\xfb\x84\xe7o\xa6\x9b@&k\x96\x93\x87\xd8\xa4\x87E[\xf2*xKn\x12;t\x9c|A=x\x02>\xfd\xc3\x164\xc3\x80\x8f\xde\xd4\x95\xe2\x9ce\xd87\x9b\xb0\x90\x94!\xfa\xdb\x04\xecG\xabW\xcfM?\x920Z\xce?\xac\x9b*\xdf\x85\xb9\x8a\xd7Aa\x08\x0cd.\xc3S\xf2\x08#\x91\x95z\x97\xc3\x1bo\xb5\xecF\xf1\xa5;\xe8\xf5\x06C\x9c?\xe6q\xabAsZ7\xbb\xeb\x18$L(2E>\xc0\xa5\xe2\xae0\xf4\xa0\x1d\xe5s\xe7\xc3\x13\x98\xd3?l\xee\x04.Dc\x1fS\x90\x1b\xb07/\xa6\x96\xc1\xe7)\xea]\xe9\x94'y\x8cb\x9e\xde\xa9X\x13\x06\xb0\x99\\\x04t\x8f\xdd\xde\xeaD\xa7\x11x\xecI!`\x95\xe5\x022\x13(\x06o\xc9\x0d&\xe0#\xe3`\xcaB$\xe5\x97~\x83\xe6D>\xea\xe2\x7f\xb9\xd1Y\x8a\x1f2p)\x05\x8d\x92(I\xd1s\x87\xdd\xe8\x12?\xdbmz\xac\xd8\xe5\xc8p\n\xb6\xfc\xc8\xcd\x8f\x9a\xb552Y\xaex\x8d\xca\xe8lz<\xc0\x89\xbd\xa0,\x9en/A\xa8\x18\x85\xc7gmt3\x92$S\x1c\x80\xa8\xacvf>6\xf1\xee\\\x86\x97s\x0e\xd5\x0e\xe1\x84;\x10\x04\xda\xb8\xac\xdc+\xeb\xda\x0e\x1c\x1e}TS[\xbb-\xd7\xa7\xdd)\xb8\xdbv\xd9\xd1\xca\xe0!7\x8bj\x0c~\x9b\xb4\xac}\xf9=\xbc[\x04Td\xe8\xf7\nA\xae\xbf[|\xe7`C\xbf[\xef\x90\x15\xe12\xaa%pv\xbeD\x07\x83\xe6\x89v!\xa6x\xc5\xd6\xfbe8\xa3R*\x9e\x9f\xf8A\x96.\x80\xfc\x90\x16\xdez\xd8\xefu\xbb\x8c\x87\xb0\x0d\x8b\xe1\xc6\x0cq\xa5\x9e\xcd\x0c\x99\x06\x8f{\xc16\x08\xe3\xbe?\xc5\x89\xfb\xd2\x85V\x1f\xbd\xe3\\\xd1\x94@\x0e\xa7\xdc\xbfM\x1aw\x0bf\x8f\xb4 g\xf7|HO\xb9\x83\x10\x9f`\x87\xf3\xb1\x0bo&\x13\x01zj\xf1 !?\x9b\x91\xd0'@\xc24\xbe1\x8a\xd9\xcc\xc7\xacDd\x88\x96\x96\n\x12\xd0\xf28\x8e\xd0\x83\x13Kd$p\x07\xc5\x89\xb4\xfb6\x08g0\x02K\xf4\xc0r\x8b\xcd\x841\xc6\x9a\x04\xca\x9f6\xd3\xa8\\\xc4D\x8c\xd6\xef\x80*\xa6\xd3!\xee\xee\x16\x11\xc2\x1b\x04\x90\xdc\x7fBW\x8f\xb4a\xe8\xf8M\x1a\x18\x8f\x1f+\x99i\x87R\xe5\x03.\x01m\xc2-0\x12m\xc41~\xb3\x17\x86\xb0\xcb\xa4\xa4@D\xb1\xc58\\t\x19Z-k\xf3Z\xd8\x1b\x16\x0b6 \x0b\x94\x91N\xf20\x8a\x03\x9b4\xa7\xbc\x98\x8b\x01\x92\x14p00\xb2~\x89r<\xc9\xb3\xf8\xd1\xd1\xc7\xba\x83pi\x97m\xd2\xbdBL\xcc\xc2\xfc\x04K\xc2\x99\xd0 \xf0\x83\xe8\xbb ]\x04!xpE\xe2\x0b/\x0dVt\xe5\xab\n\x1eS\xa8#.\xb9I\xe3m\x9d1)._M\x96D\xe0T\x9c\x80\xbdK\xa1\xf3\xe0\x07H~\x10\x06r\xed/\xbd\x15C\xc0\x95\x17\xbfM\xac<\x0eqe.X\x16\x85\n\xdd\xcd\x15;\xf2\x195\xf4*:\x9dJ\x9bI\xe6/JGn\xe6\xa5I1\xaf\x8c>\x8c\xb4o6\xef\xeaB7\xaf\xe7*WJ\x15\xba\x02\xe3L\xcd\x97\xd1;J.\xe9v\x8d\xe2R\xff\xcb\xab\xa6#\x7f\xc8\xc8Z\x17\xfa\xf60\x99u\xfd\x1c\x0d\xd1m#F]\xe6)\x08\"\x1a\xc3PU\x83\x85\x8eT\"W8\x85STs\x0d\xe9.\xe5\\\xa2(Ea\xe2\xa9\xee\xb1z~\x16\xe5\x99\xb6-\x0bs\xcd\x9a\xb4\xea\xa8Y\x0bQ\xb3\xf6\x18=\xc1k\x89\xf7\x0f\xcd\xc4[C\x96\x8f\x18Y\x0e\xefA\x96\xcd\x82\x8c\x9e4\x87\xc0K\xc8\xe4\xd9\xd0\x81\x12fV\xb1Zl\xdc\x90o\\v\xd4l\xbd\xb0C\x07\x93\xc76\xd7\xa8\xe5\xb0\xd2\xb6\xc9u \xc5~,\x0f!\x8cf\x04VYR\xe0\x9b\x97\xc2\x92xI\x8a\xaa{I\xcbVb\xd3\xf5\xbb\xa9a\x81\x7fJ\xd2\x86i\xf8\xc2U~I\xf2\xc6\x85K\x17V.\x9c\xbbp\xe1\xc2kf\x8c\xd20\xed7\x06f\xfe}\x033\x97\x16{\x19$) I~Vb\xbfl+Zc\xd4\xd9T\xe8j\xa1\x88\x1e\x9d\xcf\x82\x00pyE\xfc\xcc%\x15\x06@\xb5'\x8c\xd0\x19b]\xc8eLA\x85A\xeb\x1f=R\x04Q\xfbM.\xaf\x96\xc578e\x93\x00\xc3\xca!\x93\x9f:\xd0\\W}\xf8\x84+\xc2>E\x97x\x07\x0d\x1e\xf4\x85O\x0d\xde\x9a'L\x82\xba\xbd\xc5\xcdx\xe2\x94\xbbwZ\xf4\xee\x86\xc9c\xdfJ'a\x88\xd5\xeb\xd6\x8f\x07j\x80\x11\xbc\xa1\x9d\x8cr\x0b\xce\xa7\xf4\xc1\x9ao*z\xea\xbb\x80\x11\xf8\xc5\xa4\xcfs\x92F\xf0<\xd6\xa6\x9c\xecu\x99\xd5\x94\xec\x88\xf9L\xc1)\xbf:\x8eg\xaf\xd789\xdb\xd8X\xdcB\xc9\x9b\x98Og\xc0=w\xcc'4\xe0^;_\xd5\x8475=\xcb\x91T\xfb\xf4\xaa\xf6\xe9M\xed\xd3K\xc3\x06\x04\xeeG\xa3\x0b\"|\x87\xf3\xe3\x92\xab\xac7;?z\xc6$D\x18\x84\xa8\xa9\x1e.\xd6D\xd2\xa1-\xab\xc8\xb4\x07\xecP\x80\x07\x9a\xfd#\xfe\xfd\xf6\x96\xd2\xf2\xb8\xf9\n%\xd2\xc1\xd0\xc5[\xaf\xec\x08h\xd4A\xc9\xefI\x07<\xadL-\x7fX\xaa\xdf\xa6\x91:'pm{t\x9f\x1b\x8a6\xc8W\xf2\x87\xf6p\x9f\xf9[x\x0e\x9c\x99\x1a\xafH\xca\xb9\xc4\xe8Q\x11\xfe\xffc\xee[\xbb\xdb\xb6\x95E\xbf\xf7W\x8cx{\x1c2\x92\x15I~$Qlk\xa5i\xd2z7ur\x9a\xa4\xfbt\xcbj\x16-A6\x1b\x89T\xf9\x88\xed\xbd\xdd\xf3\xed\xfe\xb1\xfb\xcb\xee\xc2\x0c\x00\x82$@\xd2N\xd2\xd6k\xb5\xa1@\x10\xcf\xc1`\xde\x93\xb2d\xe3\xcf\xb5\xdbG\x97\xad\x82\xbf\xe4%\x9c\x82\xfe\xc0\xae\xb7\xd1w\x02\x12\xb6\xf1c\xa4\xc6\x149}\xb6\x8a\xe6\x1f\xa4\xd4\x9a__\xc8l\xb9\xa8kX\xf5\xf2\xa88Z\xc4\x9b\x8f\x02K\x8b\xa2\xb5@r\x02\xb8\x91\xf8\xe4\xff.\xd4\xf9\xc5/$\xc2\xaf_\x97\x86\x9c\xcc\xf2\x0f\x01c\xad\xb9g\xd1\xd5\x93\x14\xee\x9d9\x07\x96\xfa\xee\xf8\x9f\xd2\x13aD\xd8\x98\xf9\x0b~\xf1\x07kN\xcd\x04\xa9\x12\xe8o\xfc ~\x02>\xcc\xa3U\x14\xf2\x95^\x07IR \x9bW\xfe3\xbbKC\x1d\xb3\xa2\xff}\xaey\x9a\xe6X\xdcz\x12_\xf0 \xae\xb3U\x1a\xe0\xd9\xf9\xc0\xaea\xed_\x830q\xd6W\x05\xd5\x1b\xf6\xb9\x19\xdf\x88\x19\xef\x13\xcb\xe5\xf3\x0b\xf2\xd3\x80Mp\xed\xe42yN\xedi08\xc8Y\xcb \x9cG\xeb\x0d\xea_\xd8\x95ec\xf9l\x91\xceS{\xfb\x04\xa2\x18\x96\xd1j\x15]\xb2\x05\x9c]\x83\x8fj\xd0\xd4?\xcbV\xa8\xeca\xebMz\x8d\xca\x0d\"\xfcr\x9c\xa8\xbc\xa6c\xf3\xc6P(\x11\x0dEYeP\xae\xa4\x037DZ\x04T\xca\xa7\xab\x1f+A\x06hB\xb1s\xbc\xd9+k{-b\xd9\x1b\x97\xb7(Hk\xc6\x88\x9e\x81\xa8Qr3\xbfVnV\x80;\x9b\x17c\x93\xe8\xac\xf2Q\x15\xf2\xc4\xd1AH\xb3\x01\xda\xba j\xab\x9c\xae\\\xd4&\xf1d\x81~\xc5\x16\n\xfd\xfe\x81\xc4O\x0f\xce\xbc*\x01d\xa3~\xcaZ]\xccY\xb3\xd4\x93\x88u,\xf9\xc6\x17\xf5\x84\xd2\xc7FB\xe9\xda\xe0\xad\x04\x02H\x859\xa8\xbbi\x86\x05\xd2\x89=\xde\xe9 98IbM\xe9\xc9k0\x1f\xefs8\"\x82ac\xe5EUmN>\x8f\xf6D\x8f\x03\xea\xf1?M\xfeip7\xb2*\xf6(\xc3T\xd3=- \xabM-a\xa5\x8e\x1a\xf3z\xad\x96W\xe8\x0b\xab\xec+i\xd2\x08v\x17\x05\xd8\xfd\xa8\xc1.\xc7\xb7\n~al\x13\x1b\xc7\xf6\xcb\xe4\"\xa7?\x08?\xc2>9\xc5\x9f\x04\xe1\xf9\x8a\xc1\xefY\xc4\xab\x8a\xbdGZ\xa2n\x96\x86\x83t\x1b6\xc3\xdc\xe9\xe78):\x83a95\xbb\x04\x1e-\xc4t\x9f\xff\xd4`\xe2m\xf3\xa9i1\x9eZ\xc9\x88\xf0]\xf5\xd5\xa0\x8d\x18m\xe0\x95\x87d\x03|\x14c\x8dd\x9b-\xce\xa2\xa9\xab\xcbv*\x1aO\x87~\xfb9TrM\x9f\xfcE9\xd0\x7f\x98\xfa3\xafp\xc1\x1c\xa3\xef\x88>\xc9\x16-Rp\xd1\x910\x83\xe3\x1c\x8b\xcf\xcf\xd2\x08]\x89\x1f*Vf\x17\xc6\xf0hO\xfd\xe4l\xc3\xc0\x83#\xfe\xbf\x16\xba\xb2\x80\x14\xda\x11\x19m\x07\xfc\xbb'\x10lo{\xd8\xfb\xd3\xb6k\xc5\x99\x14\x0c\x1b\x87~5\x07\x07\xb0\xebA\x172\xc5R\xa9\x13x\xc1\xae\xfc\x05\x9b\x07k\x7fU\xef\xd2\xa4\xff\xe9K\xf9\x9b\x1b\x95\xe0\xc5N\xb7\xd0ZJ,\xf0!\x8c.C\x10\x11\xd3\x94\xcc\xac\xa6\xeb\xea\xc9\xa8\xc7\xa4~\x8eI\xe9\xe8\xdb0i\xb5\xe1/\x84I\x17Qv\xd6\x06\x93\x96\x06\xd3\x82\x96\xb8\x0dj5\x8f\xc2\x88Z51NGC\xb26\x0c+\x0c\\\xcdXu\x97d\x18\xcd\x8a\xef6X\xd5\xd2H+s'2\x81{#\xac\xdf:\xcf\xdd\x98\xa3\xcd6-V\x07s+\x93\xa7U\xe0'\xb7\xb2x2\x18?\xf6\x8a\xa6N\x9aH\xbd\x14\x8eE7\x84\xbc\x97\x85J\x0c\xb0\x10\xe3(\x19\xc5iw\x92.\xa6\x0fge\xddU\x95\\\xe5`rWS\x14\x94\xba.\xa5\xbc\x95\xdf\x94v\xe1\x9c]\xd1\xcd\xc1\xeb\x8d\xbbl\x06,\xbe\"\xcf\xdd%\xb9}\x12\x92F\xa6w\xe7Q\xfe\xbc;\xd2\xcaw\xf2g)\xe8\xc3\x1f\xfbz\xa5\xc7\xda\xb3Vg\xe7\xa1V_+\x7fL\xa1\x1e\x96\xb5P\x8e7\xce\xbe\xd6\xbd\x10\x9b-IF\xff\xa6\xf9\x18 \xee\xec\xe6\x86\xec\xfb8\x98\xb78X\xcd\xe4J\x80\xbe\xe4ErWX\xad\x8b\x03\xb6\xac\xa5B\x84u\xc6\xb2\x89b\xb8\xe3\x14k\x98g-\x8f\xef\xce^\xdbA\xd4\x0f\x00}eZ\xf4\xd9$\x95h\xbcj\xf29.\x9b\xa5\x8f\xbc\xcdK\xac\xd8l\x05\xe1+1\x8bT\xd3h\xc6gsU@\"\x13\xed\xe6DdP\x14\xdc\x1c\xda\xb3t\xe9\x7f\x99\xc6\xbf\xdfYZ%\xfej\xe3\xb6\xcb?\xbb\xc0\x04\x8af\xf8\xc2\xff\x83\x8c\x078~\xd2wB\xe8\xaf\x0b27Kr\x01\xf9w\x179\x8e\xb9\x14\x15`D\xcb\x10\xfe\xec\x0c%-#\xc6\xbb\x0d\xbeWw8\xbd\x1e\\ \xcc\xe7\x16k\x08C3\xcbv4\xb8<\xd8n\xc4\xf2P;\x1d\x85F\xc8%X\xa0\x99\xa2\xc5\xea\xa6*Q!R\xa4'\xad( \xfd\xbd\x16 \x94\x07\xd0\x96\xde,\xca\xd8\xc0\x998(\x9b\xaa\xa9\xab\x95\x08\xcdnn\x07\x96\xdf\xd5\xc9E\x94\xad\x16h\xabs\xe1\x7fd\xe0\x87\xd7\xd2\xf2\x1a\x95\xb0\xd2\xdf\xbb\xb5\xba[\xe9\x15s\xd1\xd9\x8fjVh\xe4)l\xe1h\xf5\x91\xb9\xda\xd4\xeb\xf1\x84\x06\x13\xef\xfbs\x19;OwM\x93\xfb\xfc\x9e4\xccw\xdc\x82\xcf{~\x05\xb2\xcf=!\xae7\x8c\xbaFh\xbf\xb9\x01g\xe9\xafVg\xfe\xfc\x833\xeb\xc9\xed\x99\x80X\xb7\xda\xeaS\xac=+\xccT\xac\xd1\xd6\x16\xbc\xa7O\xa8\x18\x1f\xcd\xa1d\x10\xa2\xf1=\xdf\xfe\xce\x01\xc6\xe0\xc4\x95\xec\xc2\xbd#H\xfds\xd4< \x98?\x13\xbe\x13\xa2uN+\xf6\xf0 `i\x9a\x97\xdeC\xff\x9b\xca.\x93\xc3{\xd3N\xdeq\xebr#4\xa1'\x13\xdd\xa31\xd9\x82!\xbfS\x9a\xa1s\x94+\xe1\xd0\xcbI\xf7\x91\"~\x94W,\x7fdI(\xd5\xc2\x8a\x7f\xbe\x8a\x12&\xcc\xf8K'\x99_\xe8\x95\x89\xdf\xdc\xc0\xeb\xafr\xf8R\x8f\xcaw\xe1\x87v\x9e\x85\x1a\xfa\xaf\x00\xa9\xc9\xc3P\x90~Z\x18!\xe1KP\x0d#\x94\xf6W\xec\xdc\x9f_\xf7\x94K\x8f\xc8l\xa6m\x18\x99=I\xb1U\x0b\x97E\xdc\xf1\"\x9f\xd1\xfcU\x0f:nIs4\x10tw\x07-z\xcc\xd20\x9ck\x06\xed\x9d\x13m|d\xc1\xdf\xadMC5\xbc\xect\xd63\xfa\xba\x15\xd8=\x19\x0f\x05\x0e\xc8\x8d[\xb8\x07\xa9xH\xc8k\"kiR\x1b\xeb\xe6\xcc!PKNCd\x06\xf8L\xd1\x19\xa0\xa8\xa1\xad\xcd\xb1\xd4\xa8\xa3m3\x04;\xd26\xf8hR\xfc\x05\xfbUPC\xdd[gZ\x1b\xd2\x01\xe4\xb2~1\xc0\xe2\x7f\xb1t\xe7\xae\x81\xa8\x16\x04\x9d6&\xd2;\x8b\xeb\xed'\xe1\xe1\xf7\xd34\x9cI\x19\x1b\xc7\xa7\xaf\x85\xc4\x81\xf0\xa9\x12\x82\xe5`Z\x90<|e\xef\xbc\x88\x0f\x06\x1ak$\xce{\xee\x9e_\x8f(\xdaV\xa4x\x0e\xed+\x8f\xbcbD\x17\x11\xe1A\x1f7_\x90\xccpV\x13\x14\xd0\xad\xfd\xb8\x12\xb7\xe5\xe7\x9c\xa6\x17\xd3D;\x8d\x8df\x9cV\\\x98*\x92\xde\xda\x82sr\xf0,\xee}T\xdc{P\xa18\xc2(\xdc~\xfa\xe6\xd9\xf1\xb1\x16O&\x01?f\x10\x84)\x8b71C\xc7\x87\x04\xd9-\x15tNnmR \x1b\xd0\x82\x9f\x9d\xc0\xee~\xf3\"{\x82\x14hXa\xad\x82\xe6I\xbd\xadc\xc9\xaa<4\x8aQ\x16*\xc03\xf7\xe0(\xecG\xede\xfc\x9dk\x8c\xc2XL\n\xc3d\x86(~G\x0e$\xbd\xa0\xe2\xda\xc9\x901\xa5\x05\xc8\xa7\x80K b\xc9\xd4Wrs\xf3\x82\x1e\xec\xef\x8d\x1e\x8aX\xa9\xfaG\x03Y\x93\x97\x8b<\xfa^\x19\xf7Q\xb2\x04\n\xc5\xd9\xa8YK/\x82\x84\xb6\x100\xfd\x01\xfe\x96\xd131!\x92\xfa!H\x1eQ'\x91\xf1\xd8\x99|\xbc\xb9A\x9e\x9b\xbf\xcc\x03Y\x1eb\xda*\xf9\xab\xd8\x04Q\"XE<\xde\xdc\x90\xd5\x02\x7f\x8b\x01\xaa\xf8;\x19\xa9J\xbdQ\xe4\x1a~)\x7f\x14\xdb.01|j\xf9\x981\nx\xb0b\x8bcQG|\"\xe8wK\xe5\xb7\xf4V\x0d\x1d\xf7.\x07\x06Q\xae\xc9\"\x06j\xb4(\x8e\xd0\x7fJ\x89\x84^\xa6\x1b\x02a\xa1:\x9fH_\x14\x11-m\xa7\x81\x08\x0c\xc5^\"$\x0d\x1c\x158(\xac\x1e\xd3P\xbb\x80<\x08\xf5A\x90\x9bFX8\xb7&\x92\xf3\x89^\xe7 \x0f\xf8\xb8\x0d\xc3'\x1e\xfc\xe0Z<\x8c\xc3|n\xb5\x07\xf4k\x9b8Z\x13E\xc3!\x9d\xe3rW\xc8G\xcb\x96\x1c\xcc-B\xf9\x88\xf3\xfc$\x91aFZH\xac<\x04[\x0c\x07\x10\xf0\x7f(\x04\x1bs\xa3i<\xab\xc7-\xdf\x1b\x0f\x9c<\x99\xdf\x99\xf6/XJ\xaa&T\xc9\xaf\xaa\xe7\x95\xd7\x1a\x8a-\x95\xb5\xe4\xb2N\x07\x06\x9f\x82<\x81C\xe0\xe6\x8aC\xa5\xa1W\x184\x085\xec\xda\x83\xb3,\x85e\x94\xf1[.\x8a\xd9\xad\x128\xe4I\x0c\xbe\xeeU\x93\x1e|\xdf\xb3\xe6+h\xd2B\xb4\xd8S\x04\x99\xb8\xcf\xaeR\x16.\xdc\xea\xf2\xd1\xa1\x1eCV\x9c\x0f\xef\xac\xb4\x1d\x12\xf8\xee\xd8\xd8W\xdaOc\x02\x87Z\xcc,f\xf3\xfd]gS\x8d\x0f\xfc\xe9\xe9\nL\xc1D\x03\xb7\x10z\xb1r\x97r<&.\x12\x89e\xcf\xb2\xe5\x92Pw\x15e\x86E\x94\x19\x8b\x9f\xf3h\x95\xad\xc3B\xa0\xd3\x1c\xee\x02-\xa3\xc19K\xdf\x84\xc1f\xc3\xd2\xa6\x05\xae\x98\xabW\xcfbG\x1b\xae\xa7\x0b\x0dL\xbc7\x88\x00\xf0\xbb\x1a\xc5\xf0pOD\xc0\x91\xf1o\xf4\xd9\n\xeb\x00~\x9do\xd3yvN\x07\xa7\xf1i\xf8\xff\xfe\xaf\x9eU\xc0\xe9\x07\xe1\x82]\xbdZ\xba\xdah\x10\x8b?M\xdd\x80\xf4\x17\x96\x90U\x01lS\xf0\xc0\xc2\"oc\xbf\x0c\x1e\xc0\x88(\x0f3\xb3\x86\xe3\x86~\xbf\x0f8\xf8\xee!\xec\x99\xb9\x946\xeef\xb8Dz\x1e\xbd\xd2Jd\x9c\xec\xd3\xa6\x97\x93Ww^\x9a\xcc\xba,n&\xd0\xf8vieZ\xacJ\xa4\xafJ\xc6\xd7\xf7\x13VE@\x94/\xd7CL\x80\xa8\xba\x80\\\x11sSJ@1\x94\xe0\xbc|4\x00\xefR\xc0\xfcn\xb9\x16t\x0d{\xde\xd5\xee\x8b.8\xbf::\x82\xd2\xcf\x90L\x19\xd86\x1b\xb5\xe3\x18\xef\xf8\xfc\xe8s\x82\x15)\x88{A($\x8f\xea\x1dFK\xbe\x87\xaarN\xb1\xf8)q0\x0e\xc6\xa3W\x98\x00\xf9\xba.\x9f\x9b\xc0\x04\xf9{Q@*\x10\xd2M0\xb9\xa096p\x85\x88\x8az\x19\xd3\xaa1\xde\xad\x11M+L\xf3\x89Hs\xa0])z\xe3\xfc2\x8e]C4\x9c$\x8d+\xd9\xfd>\x04\xe1b\x9c\xabs\x0b\xef\x94\xf7\xd7lu\xdb\xc6\xcd#\xaf\xdb\x17\x91\xe7\xf1Mz\xbdbcp\xd4z9\x7f\xf5q?\x8b\xa2?\xf5\xb8\x1bL\xa7Z\x1f\xf7\xc2\xb1N\xe3\x8c\xe9\xc7\xf8m\xf9\xf7O\xef\x9e\xcbc\xcd\x0b\xf6\xf4\x8f\x97\xfe*)\xd4~Q)x\xfa\xf2\xcd\xf3\xbb\xa2\x85\xbas|\x9b\x81\x7fN\xfc\xe1LE&\x81o\xa2h\xc5\xfcpF}T\xf2\xd2I\nT\xa8\xe1k\xe7^\x8bmL8\xc1\x9a\x82\\\xd2\xad0\x91\x0b4\x06\xb1KmN\xb1 E\xb4\xea\x8b\x16{,\xf7\xbbM_&\x8c\xd1\xae/9\xaf\x17\x96y\xfd\x1d\x10\x88%3\xe2m\xb3\x9aV\xf2\xa6\xed\xe5\xe344\x94\xb5o\xe8\xa1\xd6\x90|*c\xba\xc0\x84\xe9\x820\xfd; :\x12\xd7\xe8\xb2k#\xe0\x04v\x87zS\xc3\xca\"\x17\xee\xe4FU\xe8\x1a_\xe7\xbfD3\xeed\\\xbc\xc7\xf3\x1e\xa8\xf2\xe9i\xdf\x9d\x8c\x83pys\xcc\xff;y\xe1\xddPQ\xe8\x877'\xfe\xc9\xcd\xc9\xd3\x13\xcf\xfbZ7\xb9\xc7\x80\xfc\x98\xadW\xeb\x9c=\xb0K \x8d\xbc\xf3r\x15\xf9_\x84{\xd6\x85\xdb\xa4\x15\xe1\x88\xd6\xedD\x82\x80\xf1t\xda'\x9d\xeaf{\xb3\xcfN\xd2\x18#\xc1\xc8\x11\xc2!H2BX\x1eW\xa8\x91~\x1a\xbd\x8c.\xe5\x89\xe6\xa4\x04L\xf8=>\x06\x11\xfcw:\xeb\x81\xd3\xdd\xceu\xe7\x0c\xe9\x95#q\xc1\xb8d\xf2\xa7h\x91\x1e\xf0\x9a\xcb\x9c\xf4\x10\xa6G0\x11wY\xff\xf5\xab7\xc7o\x8f\x7f~\xfe\xfe\xf8\xe4\xc5\xf1\xc9\xf1\xdb_`,_\x9d<\xff\xeei\xf9\x95\xd3\x0f\xfd0o\xee\xc4?\x811\xb0\"\x85!0\x9b\xcb\xeeFf\x04E2\xe3\x05\x07\x9cZBCX\xe7\xc5Dh\x04\xb7\xe8\x8aIB#\xe6\x9f\xdb \x8d\x10\xees\xb2y\x8c\x0f\xda\xa8\xd8\xdf\x89\xd4p\x89\xd6\xe8\x1c\x92\x1b\x86\x81\xd4hKk\x14\xf0\xa4\x0d\xe2C\xb3l(HN\xfc\x13\xde\x17$\x97A:\xbf\x00\xd7*;\x98\xfb \xd3\xe5\x90cc-\xd0\x16\x07\x81\xcf\xcc\x1dQcJ\x8a\xdb\xa6\xb1\x93\xa7'\xb5\x8d)1m\xab\xc6\xfc\x13\x83<6\xf7x\xb6\x1e7!\xf4\xfb\x12\xab\xc5O\xfeg[\xad\xe3\x93\x17\x9fo\xb5\x8e\xc3e\x9b\xd5\xaab\xa0/\xb7Z\xdb\x9fu\xb9\xb6?\xebzm7.\x98\xe9\xb4\xe7\x9f\x0f\xfa\x03\xc3X\xb4{\xa9H\xf6\xf6 S\xc9\xbc&\x10\xaak\xcaa\x0e\xbfP(\x02fX\x87L\xfe,]C\x99\xfc\n*\xe4\x97\xa2\x8e\xb4\xffy\xdb\xae\xed\xc7\xd7N#A\xd7\xd8\xe2\xa4\xf4\x8b\x93no\xd3\xd9\xcd\x14NO\xd3Y\xd7+\xbc\x1c\xeb\xbd\x17~\x10}H%\xf7=\"\x10\xb1\x85\xfb\xee\xbfn\\N\x8by\xe5n\n\xdf{\x13\xcf\x9b\x14(\xb9V\xea\xdc4X\xb3$\xf5\xd7V+\x96\xcfN\xac\xe5\xe1\xca\x83>\xbbbsA\xb3\xa9\xd2H\x96~\x01r\xcd\x10\x07\xc5\xa23\xd9\x08\xb7L\xf3\xb5\xa7\xf47H\x81\xa9yx\x8a(\xcb'\xa1\xe7'\xf74\xf3\xee\xe7q\x1c\xc5\xae\xf3\xad\x9f2\xe5K\xcbx\x99)(S \xf2\x89v\xd9t8#\xda\xa7\xcb\xa6\xa3\x19y+e\xf4sg\xd6\x83\x0e\x9b\xee\xcer\xf3Wv \xbc\x03\x97\xff\xaf\xff\xee\xed3W,\x83\xc9\xff.\x10\xe1)\xba\xbc \x8aN\xd1e\xd3\xbd\x19\xc5\xa5\xe8\xb2\xe9\xfe\xac\x07l\xfapfC\xc2(p\xc5\x80\xb7\xd3\x873A\x94\x0ez\xb0\xe3=\x81U\xeeK\xb9\xf3\xc4\x83\x15\x1a\xf6\x99\x90\x14\x88\xa8\xd1\xddU\x15\xfd\xd9\xc0\x8bM\x1f\xcfp\xe1\xf9\x9e\xed\xb3]\xb8\x0f\xee\xfe\x00\xee\xe3j\x0df\xd0\x85\xae\xcb\xa6\xc3\xe1\x8c\x83\xd9@\x8a\x00qC\xf4/\xb77\x9e\x88\xcb`]6\x0dzV\x1eFS\xdf\xda\x82e?a\xe9\xdb`\xcd\xdce\xff\\\x93?\n\x0d\xda\xa5\x0b\xce\xd3o\x9e}\xfb\xfc\xc5w\xdf\x1f\xff\xe3\x87\x97?\x9e\xbcz\xfd\xdf?\xbdy\xfb\xee\xe7\x7f\xfe\xcf/\xff\xf2\xcf\xe6\x0b\xb6<\xbf\x08~\xfb\xb0Z\x87\xd1\xe6\xf78I\xb3\x8f\x97W\xd7\xff\x1e\x0cG;\xbb{\xfb\x0f\x1f=\xee>8<\x0dOc\xe7\x96\xec; x\xbe\xc4\x86\xddY\xfbm\xc1\xd3A\xa3b\x9cc\xc7\xc8\xa2\x1e\n)\xf2_H\x1eCa\x9d\x8e\xa8\xe3\"b\xcfr3vi\xbcN1\x00a\x7f\xb7Qk\xc4\xe0\x00\x06\xad4?(\x13\xdf7\xbe\xb6\xe2\xc1\x18\xfe\x0b\x1e\xa1\xf0\xb9\x08\xf6\x9f|q\x06E\xe9\xc5\xf44>\x0d\x0fgB\x86a_\xf4\xa0v[|\x8c\xffc|\x95\xd8\xb7{n\xd1\x07)\xff\xee\xc1\x13\xe0\xab\x9c=\x01\xd6\xedz\xc0\xe0\xbf\xd0\n\x8c\xe4%\xa4\xce\x99\x8b\xfc\x10pt\x04\xc3}\xd8\x82\xd1\xde\x9e\xd7\x03\xbd\xf8Q\xb9t\xb4\xb7\x07[\x90p\xa4\x9f`\x12\x90\x83\x03\xd8\x87\x1b\xf0\x158\x04\x12\x1c\x98\xe9r\x15[4\x00\x19\x087\xc3\x81\xdd\x87}T\xd1|\xd2\x90`\x0c\xc3GJ\xd0Slk`lk$J\xf1S\xe1q\xc8\x97F\xaf\xb3\xab\xbe\x8c1\xe9\xc62\x8e\xd6\xea\xc1\x9d#O\x80\xe8\x1e\x1f\xe7u w[\xa9\x08\x06\xf6\xe0,\x0e!\xd0\xf6Z\x93\xb6\x00\x1d\x93s\x8b\x15\xa1X\x80/k\xc45~\x0d\xae\xb1@\xe7N :\xf1\xe4\xfb\xd3\x00\xb7\x8fo\xfa\xfe\x0eR|Z\xe9\xc8T\xba_*\xdc\xdf\x81-@s\x1c>#7\xe0\x10\xfb\xc8\x83.\xa4SfW\xa8\x16\x01t\x87\xf4\x87\x9fyD0\x86Q\x0e\xae\x85v\x06\xa6vv+\x85\x07\x07P\xeeq\x7f\x17\x1b\x1e\xe6\xc0\\h\xb9:\xc0\x83\x83J\xc3\xfb\xbb\xc5\xf6z\x10\x17\x01O\xfd\xfad\x02\xc2\xca\xceVd\x7f\xc58\x93U\x02\xc1*,\xbc%\x89\x16\xd5x2X\x9c9>\xf1\xca\xb7\x19\xf2\x97\x985\x12\x83[o\x03C\x80\xca\xfc\xb8\x91>z\xae\\\x83\xf9\xe1\x0b\x9f\x90 \xd8\xea6\x16\x88|\xa1\xf3)\x9b\xe5I\xc0\x94\xa8\x96\x16|\xe6\x08f\x15E\xb2q\xb3=\x87\x08\x84\x13\x84\x10\xd7\x1b\xf0\x04\xa2Id\xd3j\x08\nY\xdfo\xecZ\xfe\xdd\xc9P\x07i\x9f\xe6>x5a\x81\x90\xa8;1k^\x16\x11\xce\xa2U\xd2\x0e\x058\xc5SyG\xfa\xa6*\x9c\xf8\x93<\x8cZ\x1c\xfa;\x9e\xe1\x8d\x1f\xc4\xc9\xdf\xeb\x10\x0b\x7f\xdd\x9a\x83\x9a\x89\x19=\x8dc\xff\xda\xf5\xa5\xdb\xa3R\xf4\xf0\x13\xec\xdf\xed\x04\xfbx\x82\xcd'7h}r\x03\xf4\xe1G\x93!\x0d\xe1~`\xd7 \xff\xba\xec\xd6ok%\x9b\xb2\x19Ge\xd1t\xc0o\x19\xfcw6\xfb\xd3\xa1\xde\xb2\x8f&\x9a\xfac9\xd4\x99\xf0\x06\xb6\xeccT\xd8\xc7\xcc\xb8\x8f\x99m\x1f\xf9ne\xb8[Ae\x89{\x10\x89\xb5\x0b\xc4\xda\x05\xb8vV\"&\xfa\xeb\x0fp\xf1\xd6\xbe\xe51N\x98Uun\xf6)\xfcrg\xb8\xf6\x82\x0dB\xb0\xc4\xfe\xd2\xee\xb1\xb0'L\x10\x15\xa2\x0d\xa7lV{\\>/\xc4\xdb\xf0\xfc\xdf\xcd\x8f\xf2\xb7\xe4A\x16.\xd82\x08\xd9\xe2\x13%/5\xcbp\xfbE\xf5*\x19\xe6o\xcb\xcf}\x8c\x82\x85\x8c(V\xd7\xbb\x89\x93\xab\x13\xfa\xfd\xcd\xbc\xa1\x7fK\x1e\xc4\xec\x9c]}\x11U\xca-\xe4f\x01F\xa6\xc1zm.'\xe5Mg\xa6\xb19\nxp\xfa\xc0\x9d\x9e\x07\xeb\xd9}\xef\xeb\x07R\xb3a\xae\x1e\x1bb\x0c\x80\x18\x94\xf3@\x8a\xdd\x07V%\x02i:\xa4\x05o8\x1d\"\x1b&\xd5\x07G\x9c%mq]\xf3\x9e\xd0\x9aw\xcar\x03\xa0\xb8`\x0b\x947Si\xe5K\xdf\xc1\x7f\xce\x8a\xcbS\xa2-:\xa9\xdf\xca\xab[0\"\xea\x81e\xc5P\x93\x95kFY\xaf\xcc\xc7|\"\x92PT\x1au\xd0\xd6\x14\xe6\xb6\xf8\xa4vC\xf8Zu!\xed'Q\x16\xcf\x19ty\x81ua\xd3\xfe\xf9*:\xf3WB\xe7\xd7=\x04\xe7\x9cB\xf5\xe5\xa9\xe7\xf3Wkz\x15\x9c\x87Q\xcc\x9e\xf9\x89\xfe.\xe0\xef\xd8\x97BfO\xb4J\xea~\xd1\xa21]\x06\xe1\"\xbaT@A?\xfb,\xd9\xc4\xc1\xda/\x19\x06\x06\x8d\x98\xd1\xa8N\xf8-y \x07\xff\x17\xe3\xc6\xaa\xbaF\xfe)\x18p\x11\x06\xf8\xe6{\x16\x11!\xc8\xf48}4\x0e\xe3g\xa1\x9eM\x8f\xfd\xf0\x9c\x8dkyo[TQq8^\xc7\xd1y\xec\xaf\xe9P\x84\x18\xfb\x8e\xef\x98\x0c-v\x16-\xae\xb58<\xce\xf3+\x0e\xf9I\x10\x85oR?ek\x16\xa6\x8eVu:\x98\xa9&\\\xe7i\x1cG\x97/\xc4\n\xe7_\x96?`\xea\x0d}\x8bN\xcf\xb7\xfd\xca\xc0\xe6\xebZ\xb1\xba5hD\xd4\x9f\x84\x8eEt\x9c\xe6\xcd\x0f\xb4\x8d\x0f\xeb6\xbe~\xd3\xff\xb0`s\x9b\xc3\x0b\xdej\n\n\x88\x81\x95\xdb0\x14\xbfu(\xe0\xbbc\x84\x82\xbc\xaa\x82\x02^\xd7\n\x04\xc5\xfae \xe0\xc0v\xeb\xaf\x0cf\x10/\xfc`\xc5\x16\x90F\xca\x16B!\x0c\xbb6\xc5\xd8\xc1\xc6\x8f\xfdur\x0b\xab\xd0H\x06T\x0d\xfd\xb5 >\xc5\x0di\xec\x0cW\x1c7\xba\x07\xce7\xabh\xfe\xa1t\xde\xec_\xe1\xf2Mp\x0d\xe4\x02\xbaQ\x0fB\x199x\x8a\x96\x0b\xfc>\x9e\x0egt\x01\x0b\x95\x8b^\xdd\x91\x08\x02#F\xe5\x9f\xd2g\xf5&4w\xbe\xa1\xe5\x00\xfe\xd4;Z\xdd\xba\xcat\xed\xcb\xda8X<\x00\xf6F&\x8b1\xf7\xd1N\xa98\xa3\xda\xe5b\xbfN\xdaW\xac\x9a4\xcb\x15J\x08\x0f\x0e\xe1q\xb1h \x870,i\xb3Vp\x08;\xa3\x12(\xf0\xb2\x9db\xd9\x05/\xdb-\x96-x\xd9^\xb1\xec#/{X,\xbb\xe6e\x8f\x8ae\xe7\xbc\xac4\xbe5\x1c\xc2ni,\xefyY\xa9\xdf3^V\xea\xf7\x12\x0ea\xaf\xd4\xc7\x15\x1c\xc2~\xa9\xbd7\xbc\xac4\xb7\xe7\xbc\xac\xd4\xc7S\xbe|%7\xc4W\xbc\xac\xf4\xedo\xbcl\xbfX\xf6\x01\x93\x15\x96*\x1eca\xa9\x97\x1f\xb1\xb04\x95\xb7ph\x80\xf8\xc1\x18\x9c\xd3\xd3\x81\xe1\x1ez\x88o|\xc3\x9bG\xf8\xe6\xcc\xf0\xe61\xbeI\x0do\x86\xd4Qhz5\xc4W\x1fM\xafF\xf8jiz\xb5\x83\xaf\xca\xd4\x1c\xff\x1b\xd1\xd0\xcbBh\xfe\xb7\xb3;\x86{\xa7\xa7\xce=\xc3\xd8\xa9\xaf\xd3Scg\xd4\xdb\x89\xe9\xdd>M\xed\xbdi\xa5F;\xd4\xeaK\xf3Kj\xf5uI\xc6P\xac\xfa\x8c_\xd6\xce\xb5\xd3\x03\xe7\x17\xfe\xbfk\x96\xe0\xb3\xf8\xe7\xf9\x1b\xfe\x0f\xd2\xbc\xce+\xfa\xff \xff?>\xd2S\x84\x8f\xf4\xffWX{\xb9\xc4\x8a\xe2\x9f\x17/\x9c\x99)\x90\xc6\xeb*\x92\xcc\xc5\xb5%\x0d4Y\x9e\x1c\xd6z\x93\xf5(X\xc6ho\xcf#B\xe8\xca\xa1h\xbd\xa3b[\xca\x02\x19\xab\xef\xef\xed\xed\xc8\x0f2\xf1\xc1\xae\xe1\x033\xc9\xde\xa1FvG\x8fw\x1f\xef?\x1c=\xde\xf3\xbcb\xf8\xdby\xb4`\xb0\x89\x82Bz\\\x8av\xb8\xf6\xafe\xda\x85\xf3\x98\xf9)\x8b)\xf3\xc2\xe0\xea\x85\xf83\xd1\x0d8\xd0wb\xa0\x8f\x8a;[\xf8%o\xbc\xd3SG\xc4p\xcc\x836\x0e\xf0\xfbm\xc5'{\xd0\xd5\x987S\xb0\x92\x9f\xaa\x9b\xa5\x85\xac\xc6\x9d\xc9crG2\"\xb6\x0c0\xfd\xa3\x9f^\xf4\xd7\xfe\x95\x8b\xf9\xc1E\xf1\xcd\x0d\x8c<\x19\xda\xfbC\xb09\x0e?\xfa\xab`Ami\xbf\xf58\xdc\xcbUt\xf9\x92}d+\xa4`\x83\xe4$\xe2kz\xee\xa6\xf9\x1bO\xfa\x1fie\xb2\x97\xf4z%\xe2m\x17\xaeU\x1bE]\xcd\xffkH\xdfU\xe0\xdcrw\xfe\xff\xfca\x919\x87\"\xfb \x19iP\xc6\xd5\xb8\xa40`J'C\xce\xff\xd1\x13\x8a\x88:\xa4\x8c\xe4\xf14\x10Z]q\x16\xd84C\x0f\xeeN\x87\xc8\x99,7]\x1d\x91A/\xff\xcc\xc0\xd5r\xd0\xc8\x94\xff\xb6\xd7\x03\x97\x12\xb8\x95B\x90\xf7eV!\xde\x0foOdt\x98\xf7u7\xcb\x1e\xf8\xd4\x99\x8f\nk\xfd\xd5\xd4\xe7\xe3\x0b\xa7\xd9\x0c\x0e\xcb\x91oA\x13p\x17\xe1\xd9\xd5@\x8c\x03\x0e\xb6\x98H\xf3H\x05;Q\x9c\xfe\xc0\xae)\xd5\x8c\xfaQ\x8c\xde\x1e\xb2\x7f\x06\x0b\x19=]\xfd\xba\xb9\x81G2\xf6y\x18\xfd\xc4\x96\xd4\x86x\xd4[\x08\xa3g\xd1z\xe3\xa7?\xf2\xe3Lu\xb4\x02\xbd\xe6<\xe2\xd0\x8d\xeeV\x97b)\xb5\x02\xbd\xe6\x1d\xe2\xc5\xcb\\Du\x9f<\xbf*\x86\x98\xc7\x9cWa\x1e\xa6\xbe\x98I\x9a\x97,2\xfe\x85\x9f2a\xa7@\xa5Y\xc2\x16\xdf\xeao\n\xc1\xfdL8\xe2\xc4x\x98\x10\xe8\xc5i\n\xe0\xb0\x14:\x96y\"w1)\xe6\xb6\x87\x04\xd7|l\x89f\xaa\xf4\x04\"8\x80\xe4\x89\x879\x1a\xd0j]\xa6\xe6\x17n|\x98\xf8?\xf2\xd0\xda\x87\xfcCD\n\x0b\xd1A\x82\xa9\xdd\nox\x97\x14\xc65Bc!z\x0eu!\xc4\xa9\xe0\x03C\x01\xd7\xddC\x08<>\xc4\xeea\xd9\x9dL\x80\xb0_\xbbD/\xebbo\x9bc\xebJty\x1f4\xce\xce\xd4\xf6\xb7U\x14-\x19\x0e\\\xb1\x15\x87>z\x9c\xd76\xf4okC;\xa3b`\xaa\xe1h\x1f\x99\xf7\xfda9\xf2\xd5\xe8\xf1\x1e\xff\xc5)\x94\xdcm\x82\x93$\xe2\xd7\xcd\x0d\xec=\xdc\xd9\xdd-~\xc7/\xe3\x1d\xfe\x8b\x92Q\xa8\xaa\xbc|\xbf\xd4\xf5p\xb8;\x1c\x0ek'\xf2\xc2:\x11\x9cb\xa9\x1fl\x99?\xbe\xcf\x1f\x9f\xe6\x8f\xaf\xf2\xc7\x0f\xf9\xe3\x8f\xf9\xe3e\xfe\xb8\xa8\x1d\xd6;\xeb\xb0\x1e\xfcz\x1a\xde\x07\x19\xc8D\xdfn\xf9\xc4\x0f\xd27\xd5X#\xbfs2\xa7X\xf4\x0b\xe7U\x8aE\xff\xe4\xb4M\xb1\xe8g\xc0\x88\xd2\xd5A\xfeP\x1fg\x9d\x8f#\xd2\xed\x9b:\x86\xe8'sK\xf9\nO:\x85\xfa\xa8\xbe}Kx\xa0R\xce)\xd5\x7f\x8b\xec\xa3\x85\x04%\xa5\x9d\xc4x<\x9do]\xba\x8c|,;\xcb\x1f\xdf\xe4\x8f\x97\xf9\xe3\xfb\xfc\xf1i\xfe\xf8*\x7f\xfc\x90?\xfe\x98?.\xf2\xc7\xeb\xfcq\x9d?n\xf2\xc7\xe3\xfc\xf1*\x7f<\xcf\x1f/\xf2\xc7\x8f\xf9\xe3\xf3\xfc\xf1713{V\x17C\x82\x07\x839\x8a\x97\xbf\xed\x10\x0bb\xf2\x06\x0e[\xff\x13a\x05c\xdd\xef\xd7\x9a\xcdS\xff\xe3m'@\x91\xdd\x9a'\x02\xe2\xe6\x8a\xa7\xa3\x861\x83\xca\xffB\xb3\x9c\xa3\xfa'\xe2'=\x81.\xe7\xf50\x9b=_\x07Q\x01&\xfcqL\xc9\xeb\xa0\x0b\xffp\xe7\xc4L\xa2\xd2\xa2\xb63{\x98K\xc8A1\xb2V\xfa\x83\x83g\xe65A\xfb\xcf\x8d\xd0~\x0f3\x934+\xf7\xe4\x9fb\xa4s\xaa\\p\xcaV\x1aI\xc8LK\x84\xd0\x111h\xfb\x80\x0e;\x9c]\xdb\xdf\x19\"\x11P\x8dO\x1a!WL\xdf\xec\xef\x8c\x06\x90\x07+\xdd\xd9\xdd\xe1\xcc6\n\xa6^\xbb\xc3\xc1\x08\xbd\x96\x19lS\xeb\x949f[|\xd6%\x1e\x8e/\x1b\xa7\xdd\xc6$\xf3z+\xcce\xbb\x87\xd0AJ\xe6\xdf\xfc\xe2\x99@:\x8df0\xa6[\xee\xb5\xd9\x1bM\xff\x93\xba\xd4\xba=\xf3(}\xa8\xb9!\x11\xfc\xc1\xbee\x05\x99n\xb0\xdeDI\x12\x9c\xad\x84\xb7\xfb\x18\x02!\xaa$\x0b\x10\x8a=\xe64\x11v\x7f\xb8\xf5\xfc\xfc\xd7\xf64Rp(\xe95)\x00\xc4\x90k\x06-@\\D&\x85XRF\xf9E\xc8\xcf\x1b%\xd46\x7f7\"|\xa4\xde\xf1Q8]\x07\xb7K\x1e\xcam\xbalNC\xa7v\x86\xdf[\x19a\xdb\x909l\xe4(u{\x88\xb9/\xa9\xf4\x85a,\x8a\xf8\x99\xb2\xf1/E6\xfe{G\x98\xa2_\xd0\xfe1\xf8\xf39\xdb\xa4 \xaa\xde\xf0\x06^QN0\\\x81{M7MqZ\xd3\xd5\x8cff\xbfy\xecW\x8ad\x87cc\x95\xda\x90\xd3\x06\x83,#\x9b\xdf\xa9\x97\x8f\xfeOA\xc6G\x87\xbe\xcc\xb3\x17\xf4\x07r\xc8a\x8f\x8er\xd8\x83\xce\x10C\xdf\xa8\x9f\x03Cj\xe0\x04\x14\x94P\x13\xe5$\xad\n\xf9\xe9,\xed\x01E\x85+r\xb9\xe5\x14\xa6\xbc\xf9y\x0fV=\xb4\xff\xa8\xbaIq\x00Ea\x87z\x85\xbe=\xf2MU\\\x86\x02;W\x93P\n\x8dX\xae$Q\xbbM\"@-al~\x13\x18\xda\xd1\x8a\x1aZ\xd4?.\xa0:\xa5\xee\\g Z\x12\xf8pF\xa9n([y\x9d\x05\"\x14D\xacDB,\n\xfa\xb6\xec \xf1`C\x0fE\xf6\x9c\xd5\x10\x1b\xceW&\xe2@\xedb\x1c$\xa1\xd6\x12\x91%\xc2)'p\x16\xd3h6\xeb \x1cCf\x80>\xe5`\xa7\xff\x08\xee\xf1t\xb58A\x02\xf8\xf1l\xf0\xa7\xdc\x9b\x823\x1e2\xeb\xbb\xac\xb3\x14[\x875\x8b\xc9\xcc'\"r\xd3\x84\x13\xaa\xe2\x11\x1c\xe5\xf1MS-\x1d{?\xf1\x97\xec\xdb\x92\xb5B\x8d\xe5\x1eM1\xee\xb3\xab\x94\x85\x0b\xb7z\x8e\xc8Fs\x0cYq\xb7\xf0\xc6/\x8d\xeeN>?\x02\x90\xc85V\xba\xd6\xf0\x83\xed\xbc\x7f\xcf\x92\x1f\xa3E\xb6\xaa\xc6.\xfd\xe8\xaf\xb2\xa2w\x1f:\x8a\xf5\xcfY\xfa,\n\x97\xc1\xf97\xd7\xefb\x0c\x86\xdb_D\x97\xe1*\xf2\x17T\x0e\x87\"\x1eB>\x80\xdc\xe9h4\x18j;h\xf8\xd4\xae\xf1*\xdb\x16\x18\x15\xbd\xa2\x92;\xe0C]\x86\xfd%K\xe7\x17^\xc5E+\x9f\x93qJmvU\xd51\x92-\xca\x97\xb8\x9fl\xd8\xfc)\xd6L\xccH2\xf7\xe7\x0dJ\xcb\xe1\xa6^?\xbd`\xe8\x07\x17\xe9\xe9F\xe5\x9f:E\x91y\x14\x80\x9aSM\xbe\x8c\xce\x88\xa8.\xed'\xa9\x9ff \x1c\x1d\xc2\xee\x00\xd3[\x04\xfdl\xb3\xf0S\xf62\xf2\x17Ax\xfe\x06\xdf\xbb\xce\x12\x1d\x17i@\x9c\xb3\xb8e\xb5w\xf1\xcaux\xc1<\n\x93h\xc5\xfa\xa8\x14se\xffo\xd9U\xaa\x91'Y\xbc\xe2@\x86\x17\x07R\x89\xcc\xe5[)\xdcQ\x7f\xf1\xd7+\xea\xc1s\xc3~\xca\xae\xca!\xb4\xa1\xaaF\xfb[\x9d\x1f\x1d\xf2\xcfY\xda\x12\xd2R^\xf78t\xcbw\x15L\x80\xc1\x18\xa6l\xf6\xf7\xc2\x12\xa5s\xaf\x08w~\xfa\xf7\x0c^\x84H\x91\xcb\x1b<\xef\x0b&\x10\x83)9\x93\xd4\xc7\x96\x83\x17\x16[F5\x9a;\xdc\x7fT\xea1\x11#\xd9-\xe2!j\x93\x02I\x92\x0b\x06\x07\xbcL\xbe\xf0\xdc\xa0\x07I\xff\xdd\xebo\x9f\xbe}\xfe\xfe\xd9\xab\x93\x17\xc7\xdf\xbd\xe9\xb5\xdc>\x0c\x0e\x8d\x80\xeccp\xd1\x7f\xbc\xf1\\\xd6\xdf\xf8\xd7\xfc\xa8\xeb(\xde3\xf7\xfa\xf6\xd5w\xdf\xbdl\xdb\xab\xbc9U\x07f\xb5/\x02UEt\xa2\x86\x9c\xf0\x97=\xe8\xc4\xc5\xd1\x05\xc2\xf3t\xe6}\xc5\xf7\xf9\xc1\x83\xff\x03\x14J\xe2G\n\xdb\xf4\xee\xa7\x97\x87\xc9\xa5\x7f~\xce\xe2\xed,\xd8\xe6xg\xe1\xaf\xa2\x90m\xa3N$\xed\xff\x96\xf4\xd7\xfe\xe6\xff\x07\x00\x00\xff\xffPK\x07\x08v\xf2\x8aA\x86\xba\x01\x00\xc5\x87\x08\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00 \x00swagger/swagger-ui.cssUT\x05\x00\x01\x80Cm8\xec\xfd{s\xdb8\xb27\x8e\xff\xff\xbc\n=\xbb\x95\x9a\x99\x1dS!EQ\x17\xabf\xeb\xc8\xb1\x93q6r\xc6\xcem\x92\xad\xad)\x8a\x84$\xda\xe0\xe5\x90\xd4\xcdz\xf6\xbd\xff\x8aw\\\x1a $;s\xf6\xf7\xad\xb3\xd9dl\xe2\xd3\x8dFw\x03h4\x00\xb2\x9bl\xed\xe5\x12\xc5\xda\xda;\xfc\x9fN\xe7\xe5\xdf\xfeo'\x08c\xdf\xc6\xde#\xea:I\xd2\xd9\x0c\xbbzW\xef\xfc\xbf\xce\xec\xfac\xe7\x9d\xe7\xa0 A\x9d\xff\xd7Yz\xe9j=\xef:\xa1\xff2@N\x88\xed\xe4%M\xf7\xb7\x97\x8b0H\xb5\x85\xed{x\x7f\x9e\xd8A\xa2%(\xf6\x16\x13'\xc4a|\xfeWs\xde7,\xe3\xdfD\xfd\x9dU\xea\xe3\x03\xf6\x02\xa4\xad\x90\xb7\\\xa5\xe7F\xd7\xb0&\x9a\x9fh)\xda\xa5Z\xe2=\"\xcdv\xef\xd7Izn\xe8\xfa\x8b\x89\xb6E\xf3\x07/\x85K)\xce\xf3\xd0\xdd\x1f|;^z\xc1\xb9N\x95\xd8q\xea9\x18\x9dQ\xcf\x12\xcf\xa5\x9f,\xc20E1\xf5h\x85l\x97y\x14\xd8\x1b\xea\xf7\x049\xa9\x17\x06\x07\xd7K\"l\xef\xcf\xe78t\x1e\xe8\x16\x1b\x87\\K\x99\xf0\xe7=\xe4OJ\x19\xbb\x83!\xf2;\xb4\xa4\x0bo\xe9\xd8Q\xc6\xf0\x8cy\xbc\x8eii}\xdb\x93UZPT\xea0\x90\xdf\xe9\xeb\xd1\x8e\x96+>T\xca\x9d\x87\xbbL\xe4\xdd2\x1f:\x16a\xec\xf3\xca\xfbg\xba\x8f\xd0/1JP\xfa\xaf3\xbe Y\xcf}\x8f)\x01*\xcbf\xb5\x92\xa2(\xfdW=\xb6\xdaQ\x84\xec\xd8\x0e\x1ct^\x14\x01\xd5\x974\xe7\xe7\x9a\x1f>j\x8b\xd0Y'\x9a\x17\x04\xcc\xd4C\x8a\xaa\x04-\x85o\xc1\x16\x95\xf3 \xde\xeb&\x91\xed\xba\xd9l\xa0K\xda\xd0\xb0\x89\xbd`)n@+\xae\x92^\x02,E\xa7\x11\x87p\x9df\xbevnD\xbbr\xec\xed\\\xe4\xc0\x8fh\x972\xb3$\xc2n\x82\xd2C\xd5\xb0\xaei!\xbf\xd3\x1d\xe6\xff\x0e\xb8a\x01\xa3%\n\\h\xda\xac\xe7\x14j\xd6$\x9e\x16\x83a5\xacW\xdd>\xb5\xe7\x18M|{\xa7m=7]\x15\x1d\xa5\xd6\xf2d\xbb\xf2R\xa4\xe5\x83\xf4y\x11y1Sl\xb8\x8cQ\x92\x80\x83\x8f\xd2(Xw\xe1\xbaw\xd9\xeb4\x04\xac\xeb\xac\x90\xf30\x0fwP\x1f\x89m\xd7\x0b\xffu\x92Vd\x0e\x15\xac\xfd9\x8a3\xef-\x19\xe7^\xa9%\x91\x17h@\x17\x14\x10\x85\xeb\x94&:\x94C\x90\xa0\xa1 \xb2cg\x05v\xdfLY\xb9\xc7LJ\x0f\xd3\xc2\xc5\"A\xe9\xb9\xd6cB+\x8aU#K\xf1@s2nX\xdc\x06\x11]\x13\\@\xd2q#[C\xbf\xf00\xd2\xd6\x11\x0em\xb7R\x82pt\xcaG\xed\xcaO\xe9X\x00\xa5\xb6\x87\x13:\nE\xc1Z\x12\x85&k\xdf\xb7\xe3}\x8d\xc0^\x92j^\xca\xf4*\xc7\x0e66\xec\xc4\xb4V\x8b \xed_\xcc$\xe4G\xd8N\x115\x93Rd]\x17\xcd\xd7\xcb\xce\xdf\xa8q! \xb1\xe7v\x96!v\x01\xac\x96\xf7;\x90\xe2\xaf\x8b\xc5\x02\xa2\x98c\xdby\x80)\xd8\xf8\xa7\xa4X\xc6\x9eK\x04Ndx\xdbY\xc7\xf8G\xd7N\xeds\xcf\xb7\x97\xe8e\x14,'Y\xf7\x1d\xf4\xcf\xbc\xcf\x17\xef\xef\xb6\xfa?\xde,\xc3\xe9t:\xbd\xf9\xf0iu\xf5i\x99\xfd\x98\xffs\xfdj\xfau:\x9d^^]\x0e\x07\xef\xb2\x07o~\xbf{\xfd\xe5\xd7\xbb\x8f\xf3\xde7\xdd\xed\xbd\xde\x7f\xbb\xbd\xb8\xf8\xf6f\xec}\xfbp\xf1v\xfe\xe5u\xf0\xed\xf3[\xfc\xf5\xcb\x9d\xe58\x18\xff\x96\x11\xecW\xd1\xe7\xd7+\xfd\xcb\x951{\xef\xdfl\xe6\x1f\xacU\x81\xb7\xfa\xf3\xdf\xa7\xc5\xff.\xb7/\xd1\xaf\x17\xab\xaf\xbd\x14\xbb\xaf.\xbco_\xdch~\xaf{\xc3\xe1\xfa\xe5\xb5w\x11}\xbb\xd4\xbd\xcf\x8f\x9fofW\xc6\xf6\xb6\xf79\xb4?\xad\x06\x8e\xff\xf9#z\xb0>}5\xa3\xf8\xeb#~\xb8\xbe\x1f\xfd|}\xb9\xeb\xbf\x0fV\xa9\xf3\xc6\xc0\xee\x9b\xab%zc$\xf3`6@\x97\xba\xf7\xf5\xcb\xdd\xe6\xab\xffi\x90\xfd>\xff\xf2Y\xff\xfaa\xe4]\xff\xba\x1c\xa07\xc6\xd6}\x93\x8c\xaf\x1f^?\xcc{o\xf1\xf5\xeb\xd5\xcd\xa7W\x17\x97s\xf3-\xbe\xbe\xfc\xb4\xbe\xf1\x8c\xfb\xd9\xc7\xab\xdd\xf5\xa5c\xbd\xbb\xbf2\xde_\xce\xf67\x1f\xb6\xcb\xd9\xfdtw\xf3a\xb4}\xffa\xb4\x9b\xbd\xd2\xb7\xb3\x8f\xe1nv\x19\xeeg\xaf\xa6\xcb\xeb\xea\xef}\x7f\xf9\xdb\xafo\x1f\xbe\xddG\x1f\xee\xae\xbe\xd6\xf28\xfe\x9d\xff\xdb\x87\xb7\xa1\xfb\xeb\xdd\xf6\xbd7\xda\xb8\xa6k\xbe\x0b\x9c\xc7w\xfex\xffm?\xda\xbd\xff\xf8`\xbd{\x9c\xee\xdf=^\xef\xdf\xfd\xfe\xf6\xe1\x9bg<\xa2/\x96\xfe\xf5\xf7e:\x0ff\xf7\x04\xdf\xabo\xbf\xdf\xdc;>\xde\xbao\xf0f\xee]\xec\xbf\xbd\xf9:\xf8\xfa\xe5\xed\xc6\xfd\xfdv|\xed]7:xcl?~\xd2\xc7\xd7\xfeJw\x7f\x9d\x0e\xde\xed\xc7kg_\xdb\xe2~\xde\xd37\xe8\xcd\xeb\xed\xbb\xc7\xab\xf5\xec\xd58\x9d\xe7\xfaY\xa5\xf37\xd6\xe3\xfb\xe0F\xff\xe4\x7f\xa6d\x9e\x07\xb3u\xa9\xd3\xf5\xd7\xde8}g\xaeV\xce\xab\xd1\xee\xdd\xfdt\xe3\x18w\x96\xf3\xe6\xd3\xe6\x93\xff\xf9qn~\xde\x7f\xed}\xfe\xf0\xed\xcb\xd7\xfbk\xef\xa2?\xff\xb2[;\x8fQf{EY\n9\x9c+\xe3\xe6\xfd\xc3\xdd\xe6\xab\xf99\xfd\xf6\xc5\xd2?|\xba\x1d_g\xb6~e=\xd8_n\x07\xb3\x8fw\x97\xef?~\xed\xdf\xe8\x9fz7\xfa\xe7\xd7\xb3\x8f\xaf_\xdf\xdc/{\xb3\xc7o\x97\xb7\xf7\x0f\xdb\x9b\x87\xdb\xfe\xec~\xb9\x9d]]\x13\xfc\xf0\xda1\xefVs\xff\x06\x13\xfc\"\x9a\xdf\xad\x1a\xbf\xcb\xe8\xd2\xf1?\xaf\xdc7\xe3\xfd\xe77\xe3\xcd\xfcR\xf7n\x0b\xfd,?\xbdYm\xdc7\xe3G\xfb\xcdx{}usy}y\xbd\x9d}\xfc\xb4\xfc\xc7\x95\xb1\xfa\xda\xc3\xeb\xbc\xec\xd5\x83\xf7\x9b7\x1d\x95v\x1a\xdc\xbd\xf9\xbc\xb7\x7f\xff\x86\xbf]}\xdb\xcf{\xfa\xd21\xef2\x1d\x0e\xec/\xd6\xa3\xfb\xe6\xf5\xfak\xef\xf3\xdb\xbbK\xdd\xcb\xf0\xef|\x1c}\xbb\x0c\xcd\x9b{g\x7f\xfbpk\xde\xdc\x7f5o\x1f?\xedf\x9f>\xf5n\xef\xdf\xbe\xba\xd5?\xedo.\xa7\xfd\xd9\xc7\xe9vv\x7fe\xce>\\\xd7\xfc\xbe\xbd\x19\xdf\xbb_\x0c<\x0f\xee\x08~w4\xbf\xc7V~\x9bL\xf6w&\xe0\x93\x99\xaf\xbe\x1a\xe7~\xf9\xe9\xe1\xeeM\x81+\xfa]\xde\x0f?\xf6\x97\xbf]\x8e\xfb\xce\x9b\xd7\xf7v\xef\xb3~\xfd\xe6\xf3:\xeb\xef\x8ew\xfd\xf2\xb7\xe4\xe2\xc3\xcfof\xd9\x08q\xff\xe1\xd3\xdd\xc5\xe7_\xef\xed\xaf\x9b\xc7\x97/\x1fG\x97\xef\x92\xcb\xfe\xd2y\xf3\xbb\xf7\xf5j\xfa\xe6\xe2\xfa\x1fo.\x02\xf4\xf2\xe5\xe2u\xb4\x9d.\xb7\xd3\x8b\xf1hj\xbf\xeeE\xf7\xf8\xd3mF~\xf1\xf6\xee\x93u\x15?\xbc].\x97\xbf\xfc\xf2S'F\x11\xb2\xd3\x8e\xde\x11\x8e\xa4\x9a1x\xc6\xc1\xf4\"\x1f\xe6n\x8b\xc1t\xba\x18\xbd\x1c\xaf\xfew0\xfd\xdf\xc1\xf4?u0}\x7f\xf9u\x7fw\xbf\xba\xba\xbb\xcc\x06\xd3\xaf\xfb\xd6\xc1\xafe0m\xf8\xdd\xaa\xf1\xfb\x0f\x1aLo?\xb6\x0e~G\x0d\xa6\xb7\xed\x83\xf3\xf7\x19L7\xaf>\xe8\xc6u6\x18\xcd\xea\xc1\xd4\xbf\xeb\xbf\xb4~\xbex\xfd\xdb\xc5b:{\xed\xbf\x9c],w\xa3\xbb\xe9\x9b/\xaf\x02c:\xf5?,\xcd\xfe\xed\xe0\xe1\xe2\xf2\x1f\xb37\xb3\xcbW\xdb\xebWhv\x8d\xfc\xd7/\xad[{{\xe5E\xd3/\xdbO\xab\xed\xd5\xfd\xecr3\x9f~\xc1_\x1e6\x9f/\xb6\xeb\xd1\xe6\xf6zz1\xbd\xda^\xbc\x8aV\xa3O\x03G\xcf\xc7\xa5+\xfc\xfa\xe3\xc3\x87\xf5\xad\xff\xea\x95\xd2\x00<\xd2\xf2x\x97\x1c\x85\xb3`\x99\x1d~\xef#T\x8f\xbf/\xc7\xf7/\xfb\xb7\xd3\xafw\xbf\xaf\xa2o\xcb\xe9\xf4\xc3\xa7\x87\xff.\x03\xd9\xe6\x7f\xbf\xbdL\xa6\x17\xaf\xaf\xdc/71\xba\xcdF\xe6\xdbj\xe0|\xd9\xbf\x9d\xed\xec_\xeft\xe72\xdc\xbc\xebY\x8f\xef\xfcb\x1c{\x97\x8f\xb5\xe3\xfe\xd7\xdf\xa7\x9b\xd9\x87\xfe\xf6\xddv:\xfa\xcd\\m\xbf~\xb9\x89\xbf\xfd~\xbb\xfc\xea\x7f\x0e\xec/\xfd\xf1\xf5\xfa\xe7\xe1f\x7f\xbd\xb4\xbf\xdc\x8e\xaf\xb1c|\xfcxq\xe3\\\xdd`\xfb\x0d\xbeF\xc1[\xfc\xc9\x8c\xde\x7f~s3\xb0{3\xeb\xdb\xab\xeb\x97\xb9\x8f^f\xfd\xf7\"\xfd\xf6\xfb\xdd\xaa\x19#\x96\xe3\xeb\xb2\xee\xf7\xbe\xf5\xf8\xde\xcf\xc7\xe0M\xd6\xe7\xf31\xf9\xd7\xbb\xf8\xb7\x0fo\xab\xb9\xe2\xeb\xc7\xcf\xd3\xe5mo\xbc\xff\xf6aj\xbc\xbb\xff\x9a~}\xbc\xda\xcd>L\xcd\xf7\x1f\xfa\xbb\x9b\x8f\xcb\xc7\xd9\xfd\xa7\xa4\xec'\x9b\xd9\xe5\xc3f\xf6q\x9a\xce.\xaf\x06\xb3\x8f\xd3\xc1\xec\x9e\x18c_]g\xe3~\xed_\x8d<\x99/\xea^\xad\x1b\xd35\xdd\xbde\xce\xf6\xd6\xc6\xf1\x9d\xcd\xec\xe3\x83\xf5\xfe\xc3h;\xf3F\xfb\x99gd\xf4\xa9cf}\xf1u\xff\xdd\x17\xeb\xf1z\xdf\xf0\xbd{\xf3\xf9\xf1\xab\xf96r~\xbd\x8b\xe6\xbd\xfe2\x1b\xbf\xdf\xfb\xaf\xbd\xb9\xf9Y\xff\xed\xc351Nf\xe3\x00Q\xa7\xcc\x1e\xfb\xff\xc0\xb1\xf9\xf7\xe9\xe0\xd6|\x8b\xbf\xfe~\xb7q\xf0\xddf\xde\xdb\x12\xf3\xe2E87\xef6No\xb5q^]\\\xde\xee\xa7\xfb\xd9\xe5\x95q\xfdju\xf3\xf5\xcbM4\x0f\xb2\xb2eT\xf0\xb9\xb8\xf9\xf81z;\x0fn\xf4\xaf_\xac\xfbo\x9f\xf0\xd5o\x1f\xdef\xfc\xd7\xf6\x17\xfc\xf0\xfe\xe1z7\xbb\xbf\xd6\xdf\x7ft\x1eo\xee\xddW\xb3\xc7\xab\xdd\xdd\xc7o\xaff\x0fo/\xef>^\xeb\xb3\xcb\xe5nv9\xdd\xcf>:;\x82\xdf\xd5\xbcwc\xcc\xbf|^\xbbW\x0d\xbfoo(~z+\xbf|\xee\xac\xe7\x13\xec\xf8\xb8\xf7\xed\xcb\xdd\x1b\xc7\x1f\xa7\xd7\xbf\x16\xba|\xef\x8b\xe7\x85\xdb\xfb\xab\xfd\xec\xfe\xd6\xbay\xbc\xea\xdd\xe8\xd7\x8f\xf9\xbc\xf0p\xbd\xbf}\xb8y=\xbb\xbf\xdd\xbe\xbf\xbc\xda\xce.\xafw7\x8fW^\xc3O\xde\xfa7\x97\xa3\xf0\x1f\x97\xe3_\x7f{\xfc\xf4\xb2\x8d\xa6\xfd\xef\xe2\xe5v:\xbd{5\x9d^O\xa7\xcb\xcb\xe9\x87\xeb\xe9tuu1\xdd]]\xbc\x1c\xddN\xbfd\xe3\xe6\xed\x14\xf8\xdf\xd7\x8b\xe9\xed\x15\xf0\xfc\xfa\xeajzu1\x9d\xce.\x98\x82\x8b\xe9\xe5\xd5\xab\xa9~u7\x9d^]^\xf0<\xef\xae?\xbe\xbe\xf8\xf4\xe5\xea\xc3\xf5\xe6\xa5=\x9dn/\xa7\xb7\xd3WW\xb7\xb3\xbb\xe9\xe5h\x1a\xbe\x0f>~6n?^\x0e\xdf\xbeMV\xbf\x99\x9b\x0f3\xf3\xb7\x97/\xbf)\xcd/\xc6@m\x829*\xbe\xcf\xe6\xd7W\xb7\x0f_\x96\xbd\xe9\xff\xc6\xf7\xff\x7f\x1d\xdf\xab\xce\x01t\x1c\x9e\x8d\xad\x8asV\xcfH\xc9y\xab\x8c!U\xe7\xad\xc7\xcf\xbf\xe2\xed\xb7\x0f\xe3\x0f\xdf~\xbf\xd9\xb8\xbf\xbf\xbd\xcf|\xe9\x9b7{\xb6\xf8Y%\xae\xbfy\xfcj\xce\x1e\xde^\x15I\x97\x99!\x1f\xbf\xdb\xd7\x1d\x0d\xbf\xaf\xad\xfc\x9e-\xbeoOn\x1c\x15\xdf\xdf]\xb6\xf2\xfbN\xf1=\x1a\xbc5\x1f\xb2\x11\xe2\x91M\x96\xe8\x9f.\x93\xd9vv\xff\xe1.\xfc\xfa\x9b\xf5\xe6\xbf\xfb\x1f~\xbb\x99\xdf\xdd\x7f\x9e]\xdd\x1a\x8bWw\x97\xcb\x9f\xbd\xe0\xe5\xe0\xe7\xb7\xc6\xf4\xed\xa7]\xb2\x9c^\xbd\x99NM\xe3b\xfav\xf6A\x7f\xf3\xb5\x18\xcf?|\xfa\xfc\xfe\xee\x1f\xd6\xab\xaf\xd7\xd7\x92\x04J\xb3\x15C\x1f\x8e\xa1\x7f\x03\x8e\xcf\xccCwO=\xe0N\"\xb8\xf4A\x04\xd7\xa3\xcf\xcd\xb8\x98\xfe\x95\xdeZ\xae6\xe6\xe8\x87\xfc\x01\x9dE\x18\xfb\xf4F\xacA\xff\xda\xa3\x7f5\xe9_\xfb\xf4\xaf\x16\xfd\xeb\x80\xfe\x95?\x0b\xb4J}\xba\x15\xf9Nu\xb1\x89\x83|\xdb\xc3\xff\x12\x95\x96\xdbT\xa2\xe2\xc8N\x92m\x18\xbbB@\x8a\xc4\xbcS\xb4K\x85\x85\xeb\x98!,\xb64\xe9G\x1e\xbd\xc7c{\xf4.UH7\x9a>'\x101\xe7\x94\xca\xf3Q\xd4\xb3|\xd7\x93~BKPmK\xd2\x0fW\xf4\xaf\xb4-\xd6\xf8\x94\x0dH\xba7\xd8I\x84\x9cT\xcb\xf7\xd8\x0e\xe2\xf3%b\"M3\x06\xbbq\xb5\x9b\\\x9d0\xb2\x06\xdd\x9e\xf5BF5\xde\x19\x03\x96\xca\x18\x0e\xbb\xc3\xa1\x94\xac\xbf3Y\xaa\xa1\xbc\"s\xd7\xe7\xea1\xcd\xaeiJ\xa9\x06<\xd5`\xd0\x1d\xb4\xc8\xc6\xb7\xc8\xd2\xa5$\xa3\x9d\xc5U\xd3\xeb\xca\x1bd\xedF\\5\x03y5C\xbe\x9a\xa1\xd1\xed\xf7Z\xea\x19r\xf5\xf4\xe5\xf5\x18;\x83#a\xcf,2$\xc5\xc9\xb5C\xedq\xf6< \xf1:E\x934\x8c\xce\xf5I\\zd\xc9M\x9f`\xb4\xc8~'\xce\x0eT\xe7k\xb2\x9f\x1f5/p\xd1.\xfb\xe5\xdf\xff\xe5#\xd7\xb3;\x89\x13#\x14t\xec\xc0\xed\xfc\xe8{Ay\xea\xc0\xd4\x91\xff\xd3A,W\x90<\xa17d\xd4'u\x08\x80P\xadO\x00\x84\xed\xdd\x02\xaaM\xa9g\x00\x84*\x9d\x03\xaa\xaf\xbd\x7f@\x95)t\x11\xa8\xb2\xf6^\x02\xe9Q\xa5\xa3@\xb5\xb5\xf7\x15\x88J\xa9\xbb\xe4\x84\xcf\xdfc\x14\xbaL\xf9\xb0>\xbd3h\xe9G\xfeS\xba\x91\x7fb/\xe2\xe8\x14;\x11G\xa7\xd0\x87\xf8\xba\xd4\xba\x10G\xa7\xd4\x83\xf8\xda\x14:\x10_\x95J\xff\xe1\xabR\xe8>\xbc\x06\x95z\x0f_\x97B\xe7\xe1\x89\xd4\xfa\x8e\xff\xe7w\x9d\xb6^\x82\x9f\xd2K\xf0\x89\xbd\x84\xa3S\xec%\x1c\x9dB/\xe1\xebR\xeb%\x1c\x9dR/\xe1kS\xe8%|U*\xbd\x84\xafJ\xa1\x97\xf0\x1aT\xea%|]\n\xbd\x84'R\xeb%\xf8\xbb\xf4\x12\xb2^\xcf_\x1e\xe8c\xa0\xb4XN\xb8A1y\xce>?W\x9d?\xfd\xbf\x9e\x1f\x85qj\x07)K\x12\xa4\xb6\x17\x00D\xf9s\x82\xac}\xa6;\xf0\xc2d\xd3\xee)\xf2\xc0t\xacH\n2)\xcc\xbe\x85\xa0\xfeirBd\xc7\x89)\x94\x08\x9f&\x11D\xc6IDQ\xce\x97\x9a\x83\x82\x94v\x9d\"\x19t\x1e\x84\xe5O\x13\xa2\xac\xf6sn\x90\x98/\xb54\x8c\x8e\xe6\x93\x86\x11\xc7'\xef4Gs\xe2;\xc5\xbc\xea\xc7G\xf3*\xc88nY\xe7=\x9a\xd7\xf1\x8b\xab\xda*L_P\xaaN`\x98SX ms\n3\x89yNa'\xb1\xd0)\xec\xda\x82\x12\xd5\x11\xa51\xdd\xf1N'\xb2\xdc\xf1\x9c\xc4\x86;\x9e\x97\xccn\xc7s\x93\x99\xedxnmV\x93\x1a\x08\x1f]\x9d\xc8@\xc7s\x12\x1b\xe8x^2\x03\x1d\xcfMf\xa0\xe3\xb91QL\xb7<\xfe\xce\x1f\x83\x07a\x1aqL\x1389O\x94\xc2\xe4zMt\xfc\x18\\\xf1\x08\x92\x13\x84\x05\xa9\x14\xe4%\xe9\xda|[uD\xaa\x98\xfb\xa7\xb4\x03 Ri\x86\xaf\xdc\n\x89\xc0\xf8\x14\x81\x01\"\x15\x811)0\xed\xfb6}\xcf-g9)\x1f\x95\xd18s\xbb\xa7;O+\x9alt\x00\xe8\xb2\xc7\"\xda\xfa^]1\x1e\x00\xd4E\x81\x88~N\xdf_\x86\x18\x94%\"\x0e\xb8\xe2\x90wz\x80>\x7f.\xa2\x0e\x80{\x81\x94\xba\x8e\xef\x8bs;\x9f\xd2\x8f7\x03Av\x8a%\x08\xf2S\x8dA\xb08\xdd\x1e\x04\x93\xd3L\xc2\xa9\x0f\xb2\x8a\x82Y\x14\x86\x9b\xb9\x9d\xcd\xe3'\x98\xca\x7f\x92\xa5\xfc'\x1b\xca\x7f\x06;\xf9O4\x93\xffT+\xc1\x06\xc1'\x19\x04?\xc9 \xf8\xc9\x06\xc1\xcf`\x90'\x0ee\xac\xe6@\x83\xd04Zq\xd5\xaf\xa2\x13\xbc\xe3 \xc3\x05\xc8\x8eA\xb0a\x18\x1c\xd8\xb5\xe3\x07m\x19\xdb{\x06k\x9a&\x87\xf5=\x17\x82Z\x96\xc5A\x01\xd8p8\xe4`\x89\x877\xcd\x85\xef\x128\x1e\x8f9 .\x8c\x0d\xc1m\xdb\xe6%\x0d\xc3\x00\x92\xc1q\x1c\x01k\x00\x8c\x10\x82u\x9b\xdf\xd2d\xc0\x8b~\xf6\x87\xc3\x83P\xf6&g\x85\xd3\xc6:\x0d]%\xd8\xfeQ?\xd3_\x9ce\xb1\xf8Yw\xfc\x93\x80p\xd4B8\x12\x11\x0e[\x08\x87\"\xc2A\x0b\xe1@Dh\xb5\x10Z\"\xc2~\x0ba_Dh\xb6\x10\x9a\"\xc2^\x0baODh\xb4\x10\x1a\"B\xdd\x92\x13\xeaB\xed\xe8\xbd6\xd2\x9e\x98\xd6h%6 \xea|\x8c\xe1\x9c6^\xces\xda3\x1dt\xd8\x82\x88uX\x92\x08p\xd6\x82\x88uV\x92\x08p\xd4\x82\x88uT\x92\x08p\xd2\x82\x88uR\x92H\xa8\x08\xd6AI\"\xc09\x0b\"\xd69I\"\xc01\x0b\"\xd61I\"\xc0)\x0b\"\xd6)I\"\xc0!\x0b\"\xd6!I\"\xc8\x19K*\xd6\x9f(2\xb1+\xf1\x8eH\x11\x82N\x98O`1r\xd9\xc1{\xa8\xf7u~\x9c\xe5\x81\x8bE\xdf0\x07\x82Y\x01\x82\x0f{\x16?\x89\x84\xb1\x1d,\xf9\x81~`\x02\xf3\xf32\xc4<\xd7\xf9\x10@\xee\x11\xc6\xe1\x96\xc6\xf2\xaf\x0e\xa8\xa5\x85\xe0\x7f]\xcc\x17\x86\xcdO\xa8\xd1:\x8e0+\xb0\x85z\x8e\xcdO\xe6\x05w\x90\xc2\xee\x0f\xccE\x0f6J\xe4\x05l\x04\xe2Z\xba>\xe2\xad\xb2\nS\x08\x9d\x99f\xce\xcf\xa9 r\xa4\x0b\xa7v\x10o\x9b.\x1f\x8e\x94\xc1\x10B\x01\x837\xcc\xe1\xd0\xe2\x9b B\xc7\xf6x\xc8\x0b]E\x19<\xc1\x18\xa1\xb9\xc3\xeb$\xb07l@\xa2\xeb\xc6\xbc\xcf\xb3\xce\xa5\x9e\xe35k\x1b]\xef\xf7\xc7|\x08\x03 Mk\x88\\\x91W\x01\xf8\xf1\xc0q\x80 &\xc7\xa3\x04$q\\\x04\x91l\xedd\x85\\\x88`1X,\x16\xbc\xf4%\x01\xa4H4Z\xb8\x0b\xde{K\n\xb8s,\x16\x0e\x9a\x8bH\xa0\xde\xef.\\\xbe\x15d:\x91\"\x10f\x88\xe6\x9aV\xbe\xea\x84&\x80\xde\x7f\xd2\x9d\xc7\xf5\xd0\x1d\xdb\xae\xb7N\xce\xd9\xa1\"6\x18@\xd7\xe8Y1b\xd3\xadq\x8f\x85\x81(\x93EA\xa0>\x032\x00\x8cf\xe8\xac\xe4@R9\xd6\"\x0fc\x067\x1e\x8f\xc7\xc0\xea\xaf\xdew+\xc0y\x92<[iUz!\xd7\x90\xc5:P\xa41\xad\xd8U,\xe0UV\x1bbU\x96\xb5q+\xf7\x16[\xe4\x82*\xe2y\x15\xdb\x81\xa2\x96\xc8\x05kO\xb6\x1cX\xe7\"\xd3Q\"\xff\xe21\"\x17\x03\x90\xb0\x97\x01@\xd0\xd1x\x9c\xc8\xd7\x00\xa4\xc8\xddx\xa8\xdc\xe3\x98\x8c\xdfS\x9c\x8eO\xdd=\xd9\xefT\xa4Sw=\x86\xdb1\xde\xa7\xe0~*\xb9\xbeX'\x12oB\x97d!B\x8f\xe4\x80\x02\x87\xe4p\xb0?\xb20\xa1;r@\xa17\xb2\xc8\x16g|\xb6\x01\x90\xcbN>\xdd\x15\xdbe;\xc2\x13\xfd\xef\xe3\x88\x02\x9fc'!\xc0\xe7X\x88\xd0\xe78\xa0\xc0\xe78\x1c\xecs,L\xe8s\x1cP\xe8s\xc7M\xb9,\xbc6oc \xa2\xa0<\x9e\x06\xfb\x1c\x9b\x80}\xba\xcf\xe1\xe7\xf49|\xb2\xcf\xd1\xfc4\xadx d\xc5\xaeH\xf5\x02/\xe5-\x82\xf8,\xe4d\xa0\xf93\x0eZ\xdeF&\x91\xc0&f\xb6\x84\x08\x03D\xe3\xf2w\xd4\xb5\x0f\xd1\x07\xb8!\xdcn\x8f\xb4-\xd8\x92a\xb5\xc8(\x1cDd\x17\x1e\x08\x9b\x86\xc7\x81\xd6\xe1`\xa0\x818\x14l#&\xee\x15\x9a\x89\xdb\xbe\x17Z\x8a\x0f\xf5\x85\xc6b\xf7\xe2\xebm\xc0v\x83\xa9\x0cl[\"\x1a\x15\x1a\xd1W\xb4!\x8b\x13\x98\x90\x85\xc1\x16\xf4U\x0c\xe8+\xd9\xcfW3\x9f\xafj=68\x16\x1b\xcf?\xc1v\x023\xe1V3aE3\xb18\x81\x99X\x18l&\xacb&\xacd&\xacf&\xacj&6\x9e\x14\x9b \xc3f\xa2\x80\xc9\xcav\xc3\xadf\xd0\xd7\xba\xf3\x87\xe7zG\xef\xf4\xa3]\xa7\x17\xed:\xf4\xa6\xcbD \x05\xd6\xd4\x13\xd54R\xaa F\x815\x99PM\xbd\x92\xbe\xbd]r$Xc_Vc&\xb9\xaeP\x1f\x84\x03k\xb3\xa0\xda\xfa\xa5\xc4m\xb5\xc9p\n\x83\xf0\x01t\xa2lT\xff\xd3\xfcHR\xd9\xf3\xbb\x92\xa0\xb2\xef\xebM-\x95\xb6\x99\xf8x\x87\x12T\xf8,>\xa5\xe0T\n3{\xedi\xfe\x9f\xe8h\xc2\xba\xbe\x83\x9f\x81u}g7\x93\xd6\xd9f\xf4\x13\xbc\x0c\xac\xefOp2\x99?\xe1?\xd1\x9f\x84u}\x07\x7f\x02\xeb\xfa\xce\xfe$\xad\xb3\xcd\xbe'\xf8\x13X\xdf\xf3\xf8\x13Ua\x14\xa3\xfa\x0b\x1e\xda.\xff\xb4E\xfdq.m_~\x08\xa8\xf9\\W\xe2\xc4!\xa6?%\xd2\xcdb@=\xff\xe6\x11\x13\xb0\x15Q\x9f~\x80S\x89E\xa4\xa7W\x9fRb\x8a\xf3\xf0N?\x14\xe9I\xbe>#\xaf\x8f\x0fa\x8b*\x8d\xb2J \xc4-j5\xaaZyD^\xb1QT\xcc\x97fu\xf7\xf2\xba\xf9\xc8\xb8\xa8\xbbW\xd6\x0dD\xceE\xdd\xbd\xaan\x1e\x91\xd7\xdd+\xea\xe6K\xb3\xba\xcb\x86k\xa2\x96\xd7M\x07\x10e\xfdM\xe3\x01L.A\xd5|\xa0<\x97\xa1P\x80&\xd2@\xad\x02\x00Q\xc9P+\x01\xc0\x142\x94j\x00\xca\xab{\xd4\x9a\xb6\xf00>HoS+\xcc\xd0\x07\xde\x99\xb3\x98\x01\xf0\xe7\xc2'\xb3B\xc8-Ko\xcf\x8a\xa5\x0e_\xa4 \x9f\xcf\x1d\xbb\xaa[\xe4\x99u\xf5B\xe7o$\x10\xfb?!\x84\xc0\xc9+9D^Z\xcb!\xec\x08\x8d\x1c\xe2\xbe@\xc8!r\xf8J\x10\x89\xcf75\xc9\xdc\x9e\xa8K\xec\xf9u\xb3\x84\xce_\xcb#\xf6\x7fB\x1eI\x17 \xe5\x11\xf6\x82F\x9e\xb6\x8eP;\xad\xb0/(t\x06\x85p\xb5\xe8!\xbe\xa4\x83\xf8\xd2\xfe\xe1\xb7t\x0f_\xda;|y\xe7\xf0\xdb\xfa\x86\xdf\xde5\xfc\xb6\x9e\xe1\xcb;\x86\xdf\xd6/\xfc\xf6n\xe1\xb7\xf6\n\xbf\xb5S\xf8*}\xc2W\xe8\x12~[\x8f\xf0[;\x84\xaf\xd2\x1f|\x85\xee\xe0\xab\xf6\x06\xffI\x9dA\xe8\xf7X\xe2\xf7X\xea\xf7\xb8\xc5\xef\xb1\xd4\xef\xb1\xdc\xefq\x9b\xdf\xe3v\xbf\xc7m~\x8f\xe5~\x8f\xdb\xfc\x1e\xb7\xfb=n\xf5{\xdc\xea\xf7X\xc5\xef\xb1\x82\xdf\xe36\xbf\xc7\xad~\x8fU\xfc\x1e+\xf8=V\xf5\xfb\xb6\x80\x88&v\x16\xe7\xf6\x82}5j\xf6t\x8e\x16a\x8c\x0e\xe5\xc7{\xcf\xff\xd2\xf9\x0b\xfd\xe5A\x98\xcd\xc1\xc1\xc8\x8e\xcf\xe7a\xbab\x01\x87\xbf=\x86\x99o1\xcfqI\x92I\xc7\x14U\xdc\xf2\x960esqMAYt\xd2N\xb9\x93O\xa3b\x91\x9aRP\xaa\xa6\x18\x12\xac)U\xd8 V\x9d\x8e\x9dl\xa8\x93\x08\xecK\xe5\xf5e\xe2\xfa\xea\xd2\xc2\x82\xc9\x8c[\x17\xc2\x82a\x99`\x98\x12\x8c*u\x03\xd9\xe7\xfc<\xe6S\x81L\xf1\\\xf2A\xc2\xae\xeb\xcd\xdb?4\xd8u\xbd\x94E\x01\xfd\xc5m@`\xa9C\x17k\x0eb\x17\xddn\xaa\xc5\xe1\x96\x81\xc5\xe1\x16Bi\xcb8\\G<\xb6x\xceQ8!^\xfb\x01+A\xfeP\x80\x05+ \x8b8:m\xe1\xed\x90{(\x90\xd8\xde\x87\xeb\xf4<\x7fD\xbc\xfeJ\xa1\x7f\x1c\x18\xdbg=Lf~\xb2\x1c\xf6\x00\x12\x01;\x01\xcfC\xe0\x07\x00\x1046\x89\x83\xbd\x81C\x08\x1d\x82GJ}\x02\x84K\xdd\x02\x10\xa5\xdd3DDR\xe7\xc8\xd73R\xffPp\x10\x85\x01\xd4\xcd\x06:\xa9\xd3\xf8m>\xe3\xb7\xb9\x0c\xcbA\xe41\x1c\x0ev\x18\xbf\xcd_|Uwa\x81ro\x01\xd0rg\xe1\xe4P\xf0\x15\x98F\xee*\xfe\x93<\x05v\n,w\n\xdc\xe6\x14\xb8\xcd)X\x0e\"\xa7\xe0p\xb0S\xe06\xa7\xc0\xaaN\xc1\x02\xe5N\x01\xa0\xe5N\xc1\xc9\xa1\xe0\x140\x8d\xdc)p\x9bSPt\x0b\x8cvu%D\xee\xbd\x0e{5?\xd12\x10\xf9,\xfb\x9dfS\x9a\x08\xe4V\x99\x99aJ\x90\x90E\xc4c^R\xcd^\xa7!\xb5E\x90==7&\x95\x94\xe7F\xc7\xe8\xe4\xd9|\xfa\xb7\xc6\xeb\xf5\xfc\xe7\xea\x85\xa9@\x15\xf9\xe1S\xae\n\xbd\xa9\"\x7f\xe7A\xfd\x13\xc0\xa1\x8c$H\x1ea\xece\xeb\x89\xea\x0b\xe3\x13\xb2\xcc\xf5\xe2\xe2\x95\xff\xe5\x17\xcb\xeb\x9a\x88\x92\x82\xe5\x04|\nH\x90\xc5H@\xf5\xab0\xf6\x1e\xc3 =A\x808\xdc\xb2\xb5s\xfd#/\xdf\xc6vt\xa8\x19d\xbf\x9dg\xffL\xe8_A\xbd\x03\xa4\xc5\xc3 \xfb@P\xaf\x16\xa3\x0d\x8a\x13\x04\xd4_\x15M\xe0\xc7B+6,\x8f\xb6fU\xa3\xd0\x9c\xb4L\xa2R\xd8\xbc2\xb9Z\xcd,\x91\x8c`\x0d\xd8\x1b\x96\xc9K\x91\x9fhIj\xc7)%N\xf1\x19\xfd\xfcyS\x15\xf90\xff9\xff\xbcy\x92\x8f)\x05\x0f\x889\n\\\x805\n\\\x96q\xf6\x88c\x8b\x02\x17bZ\xbe\xe8\x93\xe7[\x14\xb0\xac\xcb\xa7$\xf7\xe2\x11\xc4{n'(\x1b\xc8\x00\xeeU\x11\xcb\xbf~N\xd6P=\x845\x1e\xa3\xd4Y\x81:\xcfKx\xad\x17\x8f\xc9\n\xcag4\xff\x04\xe1Ee\xd0\x8aE\x06\x07\xac\x97A\x85\xc6\xcb\xf9\xe4\xb6\x03\xb84\xa6jxp\x96\xca9T\x86\x02\x98PF\xc9\xf9@6\xc9\xb94&\x01\xf80\xca\xcf9\xc1\xba/uS\xaa\x1e\xd4\x0e\xa9\xe5\x9c\x13\xa8\xe4\xfbu\x92z\x8b=\xd0q\"\xdby`\xfb\x0d\xf1\xac\"\xac\xb2T\"\xedW8\xb6\xf3\xe4\xac\xa8\xbeS?\x01YsF\xa9Q|\x07\xca9\xb1\xfd\x87|\xc8\xd6\x00\x99\xab\xc2\xccQ\xbaE(\xe0+(\x01L\x0d\xd5S\xb6\x8a$\xb2\x1dT1\x83k\xb2\xf3\xd74\x1eh~\xae\x97\xa4\xb17_\xa7H\xc0\xb2\xa0\xa29\x96\x08\xb6\xf7\xe4A\x0da\xc3\xc29\xda,X1\xa3\xbaP\xc3\xaa\xe9Ar{Ul\xd8~\xd4p\xa2\xba\x91\xcc4\x15\xab\xda4<\xaf\xca\x0c43\x89\x11*\x9e\xac\x11\x1a\x96\x84% \xaer;0=\x95\xb4\x04\xd9Qk\x96P_-\x0e\xdf\xea\xccl\xebz\x81\x8d\x8bh\x9c\x88A\xb5\x1c|\xaeO\xca\xffB\x9c\x0c \xa7\x1e\xcb\xc9(9\x19\x10\xa7\x9e\x84\x93\xc9r\xea\x95\x9cz\x10'S\xc2\xa9\xcfr2KN&\xc4\xa9/\xe1d\xb1\x9c\xfa%\xa7>\xc4\xc9\x92p\x1a\xb0\x9c\xac\x92\x93\x05q\x1aH8\x0dYN\x83\x92\xd3\x00\xe24\x94p\x1a\xb1\x9c\x86%\xa7!\xc4i$\xe14f9\x8dJN#\x88\x13\xb6\x93T\xe6\x9cz\xf6?\x96\xe38\xfb\xdf\x84\xf8\x19\x085\x97Y\xd4\xa7\xcb\xd6C\xe5\xbbm7\xe8\\\x9f\xd4$\xe0\xca*\xe7e\xc8\x96o\x0d/\x83\xe0e\x00\xbc\x92U\xec\x05\x0f\x99d\x15i\x80\x966)F\x81\x00\x05)\x89\x0d\x80\xd8\xa0\x88\x0d\x85\\\xdb\x81\xe7O\xe4\xfd\x88\xc6\x9e\xbe\xa4\x86\x18>\xf7\xaaZc\x0e\x0c/\xbe\xcb\xc2\x1a\xac\xe5\xf8\xb55\xcbFmA\xf6\x9c\xcbk\x81\x04\xadK\xafgZa\xe7\xd5W<\x8e^d\xf3\xd4\xa7\xad\xb3a)\x9e\xba\xd4>\xcd\xb8\x7f\xcaj\xfbT\xab\x7f\xbf\x057+\xd1\xf3\xae\xb9a\xee\xcf\xb2\xec\x86Y?\xe3\xca\x1b\xae\xe0\xb9\x17\xdf\"\xfd?\xd7\xfa\x9b\xeabOY\x82\x8b\x18\x1d\xbb\n\x17\xf19a!.bu\xdaZ\\\xac\xa9\x13\x96\xe3\xacY\x9f\x7fE\x0e\xd6\xf0|\x8br\x90\xfd3\xaf\xcb\xc1:\xbe\xd3\xd2\x9c\xb2\xee3\xad\xce)\x9eO^\xa0\x0b\xb8\x9d\xb6F\x170;u\x99.`\xf7\xc4\x95\xba\x80\xeb\xd3\x17\xebB\xc3\x1c\xbb^\xe7\xe7\xeb',\xd9\xe5\xcc\x8e\\\xb5\xcb\x99\x1d\xb9p\x973;r\xed.gv\xe4\xf2]\xce\xec\xc8\x15\xbc\x9c\xd9\x91\x8bx9\xb3#\xd7\xf1rf\xc7/\xe5[\xfc\xf6\x89\xaby\x96\xfb\xe2i\x0bz\x90\xddS\xd6\xf4T\xf7?aY\x0f\xd3\xb3+{\x85\xa5\xbd\xc21\x9a\x9c\xa7\xff\xcc\xcb}\x9e\xdf\xb3\xaf\xf6\xfd?c\xb1\x0fTr\xc2Z\xdf?a5\xf8\xacK}P\x80\xd65\xdfs\xad\xf4\xfd\xa7,\xf4Y\xe2\x13\xd7\xf9\x90\x0cO^\xe6\x9fb\xd7?g\x95\x7f\x9a\xc1\xbf\xe3\"\xdf\xff\x9ek|\x88\xf9\xf3,\xf1!\xce\xcf\xb9\xc2\x87\xf8?\xfb\x02\x1f\xd6\xfd\xb3\xad\xef\xfdgZ\xde\xc3|\x8e^\xdd\xc3lNY\xdc\xc3\x9cN\\\xdb\x8b\xb4t\xca\xd2\xde\xff\xde+{\xa0\x82g\\\xd8\x03\xdc\x9f{]\x0fT\xf1\xbd\x96\xf5\xfe\xf3\xaf\xea\xfd\xe7\\\xd4\x83\xccN\\\xd3\x83\xbcN^\xd2\x83\xdc\x9e\xba\xa2\x07\x99>\xc3\x82^`\x93\xa3\xd7\xf3\xec\xcc\xfc\x94\xe5\xbc\x8c\xd7\xb1\xaby\x19\xafc\x17\xf32^\xc7\xae\xe5e\xbc\x8e]\xca\xcbx\x1d\xbb\x92\x97\xf1:v!/\xe3u\xec:^\xc6\xeb\x84e\xbc\xd4]\x9f\xba\x8a\x97\xae\xae\x8e^\xc4K\x17\x84'\xac\xe1\xfd\xa7-\xe1!\xf2\xe3V\xf0\xa2\xc5:~\xe6\xc5:\xcf\xef\xd9\x17\xeb\xf8\xcfX\xac\x03\x95\x9c\xb0X\xc7',\xea\x9eu\xb1\x0e\n\xd0\xbav{\xae\xc5:~\xcab\x9d%>q\xb1\x0e\xc9\xf0\xe4\xc5\xfa)v\xfds\x16\xeb\xa7\x19\xfc;.\xd6\xf1\xf7\\\xacC\xcc\x9fg\xb1\x0eq~\xce\xc5:\xc4\xff\xd9\x17\xeb\xb0\xee\x9fm\xb1\x8e\x9fi\xb1\x0e\xf39z\xb1\x0e\xb39e\xb1\x0es:q\xb1.\xd2\xd2)\x8bu\xfc\xbd\x17\xeb@\x05\xcf\xb8X\x07\xb8?\xf7b\x1d\xa8\xe2{-\xd6\xf1\xf3/\xd6\xf1s.\xd6Af'.\xd6A^'/\xd6AnO]\xac\x83L\x9fa\xb1.\xb0\xc9\xd1\x8buvf~\xcab]\xc6\xeb\xd8\xc5\xba\x8c\xd7\xb1\x8bu\x19\xafc\x17\xeb2^\xc7.\xd6e\xbc\x8e]\xac\xcbx\x1d\xbbX\x97\xf1:v\xb1.\xe3u\xc2b]\xea\xaeO]\xacKWWG/\xd6\xa5\x0b\xc2\x13\x16\xeb\xf8i\x8bu\x88\x9c[\xac3\xf4\x87\x05\x0e\xed4\x7fG\xce\xe4\x0fz-\xcc@\xe3\x12\x9a\xbf1\xa7\x05\x1b\x94\xd8\x93\xde\x82\xb4\xc8\xdf\x82\xa4.W\x83V\x12\xad\x81+\xbcYH\xfd\xfc\x81\xe6\x1f#\xb2\x7f\x94\xc4\xbe\xba\xc0\xb0l\xc7\x98\xb9\x06\xab\xc9\x86)\xd9\xa8\xd2\xc4\x0e\x12-A\xb1\xb78,\xc2 \xd5\x16\xb6\xef\xe1\xfd\xb9fG\x11FZ\xb2OR\xe4\x9f]`/x\x98\xd9\xce\x87\xfc\xd7\xd7a\x90\x9e\xd9\x1b\x14xq'@\xbb\xea\xe7\xb3\x15\xc2\x1b\x94-r\x9b\x9f:\x01Z\xa3\xb3\xf5|\x1d\xa4\xeb\xb38\x9c\x87ix\x16d\xff$h\x19\xa2\xce\xda;\xb3c\xcf\xc6g\x8d\x14\x8ct\x9c`K\x14\xc6K\xcf>\x83\xc0\xb9t\x9a\xa0E\xc2*J*\x9e\x80\xc7:\xa1\x8b\xa8\xf7\xa0e\x0f(\xa2Wa\x90\x84\xd8N\xce\xfc0\xb0\x9d0\xfbO\x98G\x13,\xa3u\xec\xa1\x98!\xcd\x9fun2\x95\x96\x00\x11}\xad`\x8a\x03\xa3\xf6\xc6\x1e\xa2\xb6\x17\x86\xa3x\x00v\x15R\xa7+\x84\xed\x84&/\x9e\x9dI\xccT\x16\xa9Z5\xf5|D\xd7\x91?\x81\xa0\xf3\xd0\x0d\x03\x8f\xc2^\xe4\x8f:\xb3\x8f\x10\xde\xb1\xb1\x97\xa4!m\x85\xe2\x99\x80bi\xc7\xb6\x1f\x06.-|\xf9\x10\x14\xc9N\x1eP\xbc\xf10\xa6\xfd\x84x\x0e\x91\x95\x8d(>\xa1\xe5\xa56\xf6\x98\x0f_/\x12\xad\xc8\xc3\x91\xc0\xe2\x89\xc2`I\x8f=\xf9;\xafT\xebc\xb0e\x95\nu*\x0c\xd0^6\x88\xaa\xca\xe1\x1f-\x06X#V\xaf\x11\xd25\x8d%M\xb2-r\xc8}\xee\x93\xefT1\xf7E\xf8\xc5\xd6\xa0\x00\x06\x0f\xe8Q\x80\x1e\x0f0)\x00\xf7y\xfa\xc5\xb6/\x17q\xb1\xb5(\x80\xc5\x03\x06\x14`\xc0\x03\x86m\xcd\x1cQ\x80\x11\x0f\x18S\x80\xb1~\xfc\x9b\xba\x19\x8f\x15Z\x84E@Fa1\x90]X\x0cd\x1a\x16\x03Y\xa7U\xe2E\xf1\xb9\xb36\x1b\xb1\x18\xc8L\nm\x1f\xb1\x18\xc8X,&\xb3\x97\x82\xc1\x14F\x05\xba\xbf\x8b\x8d\xe8\xb7\xb5\xc3` \xa0 \xfdv\x0b\xfa\xed\x06l\x11v\x91\x7f\xed\xac\xd5|~\xbb\xf5Z\x1b=b \xa0\xed\xfc#M'\xb6R\xdb\xe0\xc7\x00@+\xe1v+\xe1v+\xe1v+\xb5\x08\xbb\xc8?v\xd6j%\xdcn\xa5\xd6F\x8f\x18\x08h%\xcc[\x89\xc2xA\xb4N\xb5\x18%\xa8\xb9\xdfnG\x11\xb2c;p\x8a/qN4?|d\x1f2&Z\xa7i\x18\x14l\xce\xcfs\xfc\"t\xd6\x89\xe6\x05\x01\xfb\x16`\xa2F\x1eZ~\x86\xed\\\x9fD\xb6\xebz\xc1\x92]\x18\xaf\x8cC\xb9\xd1\xca\xbf>y\xd5\xab\xca\xf8\xd7\x19\xaf\xcc\xaa\xac\xcf\x97\xf5\xab\xb2\x11_f\xd5\xf5\x0d\xf8B\xadW\x17\xf7\xac\x17l\xa1\xa5W\x85\x16\xfb\xa9\xe5\x956\xac)\x87<\xa5\xa1\xd7\xa4\xfcg\x9a\xf3\xcd\xe6\x1cBl;\xf3\xb0\x0d-\xddf\xc5\x15\x93\xf2\x01\xc5\xa4\x84@1-#\x0b\xc8D\xdb@R\xb2\xc0U\xf1\xce\xb9\x12\x90\xfd\xcc\x96{\xc1\n\xc5^ZA\xca_\x15\xe6\x89\x03\xe39\xd9t#q\x1e\xa2\x18\xf2\x1f\xa2\x18r!\xa2\x18\xf2\"\xb2n\xd8\x91\xc8\xea!_\"\xcaAw\"\xcaa\x8f\"E\x10;U\x86j\xf7+JX\xd0\xb5(qA\xef\xa2\x04\x86\x1d\x8c\x16Y\xecc\xbc\xd0\xb0\x9b\x11\xfc$\x9eF\xa0*gS\xf06\x85\xa8d\x95E\x132\x0f\xf4\xa5\x0e\xe8K\xfd\xcf\x97\xba\x9f\xdf\xe6}\xbe\xdc\xf9|\xb9\xef\xf9-\xae\xe7\xabx\x9e\xaf\xe2x~\x9b\xdf\xf9mn\xe7\xb7z\x9d\xaf\xe6t\xac\xbc\x02\x9f\xf3U\\\xce?\xce\xe3`\xe7\xc2R\xe7\xc2R\xe7\xc2R\xe7\xc2R\xe7\xc2m\xce\x85\xe5\xce\x85\xe5\xce\x85[\x9c\x0b\xab8\x17Vq.\xdc\xe6\\\xb8\xcd\xb9p\xabsa5\xe7b\xe5\x158\x17Vq.\xcc9\x17\x05Lc\xdby@\xee\x01\xa34E\xb1\x96D\xb6\x93E^]\x83\xfb>E\x01\xd4\xd2\x8c\x19\x0b\xd7\xba\xba%\"\xf0\xd1\xd2\xe6\xd8\xf72x\xfb\xb8z\x009\xe6\xdf/:F\\\x80\xa2Mb\xa8\x92\\h\x05\xa9\x15f\x83\xba\xaac[\xc2\x11\xb46\x84\xafB\xa1\x1d\x12\x91\xf1\xb1\"s\x04\xad\"\xf3U\x14\"S\x14x\xa5%!\xf6\xdcC\xbe\x8f^u\x16\x0e\x93z)F4\xa6\xdb\xb38\x98\x13F{\x06e)\x98\xfa\x00\x8a\x94;O\xbbT\x1cL$\x18\x0f\xb4\x9e\xc9\x0fk\x89}%\x81}EyY\\\x9b\xb82\xc9\xb0\x92dXQ2\x16g\xb1^\xe5\x05\x0f\x87\x14\xedR\xcdEN\x18\xdb\xe5 Vv\xd1\x9b\xc1\xce\xb8'\xe7\xb6\x93z\x1b\x04\x14\xe4\xcb\\\xe0\xf9*\xdc\xb0k\xe4\xfc\xb9\x80\xff\xc6K\xbc\x145o\x1cMc;H\xbc\xea\\g\x18w\xba\x86\x95t\x90\x9d \xcd\x0b&\xd2R\xbe=\x85\x90\x87p\x9df*:7\xa2]\xc7\x0d\xd3\x14\xb9\x1dg\x1d\xc7(H_eLX\xba$=d\xff\x14Yn-\xddGP\x8e\xc0\xdf\x16\xab\xc1\xda\x15\x81\xd9zk\x90\xe5\\,\xe1o{D9\x1f\xc6\xf8[\x93(\xe7\x03\x19\x7f\xdb'\xca\xf9P\xc6\xdfZd\xfd|0\xe3o\x07\x04\xc0\x84$\x18\x92\x12@U\x8c\x08\xc0\x00\x92qL\x00\xc6\x90\x0c\xc5+\xd4\x1b\xd0I\x9b\xf1\x859\xf2\x85\x93\xdc\"\x0c\x042\n\x0d\x01\xedBC@\xd3\xd0\x10\xd0:\x8c,\xa0\x81h\x0cl#F\x1a\xd0L4\x06\xb6\x14\x8d\x11\x1b\x8b\xc6)\xec\xf6\xab\x8e\xdd\xa5\x15\xfdV#\xfa\xad6\xf4[M\xe8\xb7Z\xd0o5\xa0\xdfn?\xbf\xdd|~\xbb\xf5\xfcv\xe3\xf9j\xb6\xf3\x8f3\x9d\xd8J\xb8\xd5J\xb8\xd5J\xb8\xd5J\xb8\xd5J\xb8\xd5J\xb8\xddJ\xb8\xddJ\xb8\xddJ\xb8\xddJX\xcdJ\x98\xb3\x12\x05\xdb\x1a\x07\x91Z\xb7\xbd\x83H\x9f[\xf3 R\xe4\xb6\x7f\x10ipk\x1d\x84\xaa\xcb<\xa1*e=`\xab\xf5\xaa\xb2\x1ePVq\xe5\xd6\xd0[\xcd\xac\xe8L\x9e\xce\xac\xda`\x9a|Y\xd5\x08\xb3\xcf\x95\xf5+\x9e}\x9e\xa7U\x95q\x0b\xf6\xad6\xa8\xca\x06|\xd9\xb0*\x1b\x02eU\xfb\xb8U\xfeV\x1bUt#\x9en\\\x95\x8d\xf9\xb2,\xe0\x10\xf5\xb7\xad\x96\xae\xbc\xd8\xad\x95\xd35\xb3\xff\xf1\xa0mX\x00\x93\xaaY\x83\xee`0\x18\x0c9d\x9e\xc7.0\xf9b\xbc}\x80?0.\x9aM\x13b/mJ!GmJ!_mJ!w%\xea\x85=\x96\x00@NKH\x06\xf9-Q\x0c\xb9nS\x0cz/Q\x0c90Q\x0c\xf90\xa1\x16\xc8\x8d\x9bb\xd0\x93\x9bb\xd0\x99\x9bb\xd0\x9f\x89b\xc8\xa5 \x9b@^\xdd\x14\xc3\x8eM\xdaD\xe0\xdb\xa4\xeaZ\xdd\x9bh\xab\xcc\xc3\x1bX\xee\xe4\n^\xae\x10\xc6\xe4\x01\x8a\xc4\xf3}\x99\xe3\xfb2\xbf\xf7en\xef\xb7x\xbd/uz_\xea\xf3\xbe\xd4\xe5}\xa9\xc7\xfbR\x87\xf7\xa5\xfe\xeeK\xdd\xdd\x97z\xbb/uv_\xea\xeb\xbe\xd4\xd5}\xa9\xa7\xfbrG\xf7[\xfd\xdc?\xc2\xcd}%/\xf7\xd5\x9d\x1c\xf6g,\xf3g,\xf3g,\xf3g,\xf3g\xdc\xe2\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xea\xcfX\xee\xcf\xb8\xd5\x9f\xf1\x11\xfe\x8c\x95\xfc\x19S\xfeL!\xc2\x0d\x8a\x178\xdcj\x1b/\xf1\xe6\x18\x1d\xaa\x07\xe7\xe5\x03\x01|\xe5\xb9.\n\x1at\xf1\xbb\x00\x9c8q\x88q\x03.~\x17\x80\xf3H\xaa\x86\xf2;\x1b5p\xc7\xc9\xac\xedZ\xa4\xde\xb1rk;\xb9\xe4;Vvm'\x97~G\xcb\xaf\xedd-\xd8\xf3-\xd8\xb7\xb4`\xcf\xb5`/o\xc1\x9ek\xc1^\xde\x82=\xd3\x82\xfdi\x01-\xebXY\xe8p\x94oQ\x04\n\xeeE\xe1[=\x8cB\xab8\x19I\xa0\xecg\x0c\x91\x92\xab14\n\xde\xc6P\xa88\x1cE\xa2\xeas\x0c\x91\x92\xdb14\n\x9e\xc7P(\xcc\xc1\xaa\x81&\xe7\x92\xfe\x91\x1e\xe9\x1f\xe7\x90\xfe1\xfe\xe8\x1f\xe9\x8e\xfe \xde\xe8\x1f\xef\x8c\xfe\xb1\xbe\xe8\x1f\xed\x8a\xfe \x9e\xe8\x1f\xef\x88\xfe\xb1~\xe8\x1f\xe9\x86*\x1e\x87\x8f\xf48|\x9c\xc7\x1d3\xc7\x92`%\x8f\xc3'x\x1c>\xde\xe3\x8e\x9dki\x02%\x8f\xc3'x\x1c>\xde\xe3\x8e\x9dsi\x02 XKR;\xf5\x9cCq\x055\xcc\xdf\x8d\x91\xb2\xb7Ob\x84\xf3;\xa2\x0d\xaazB\xe3\xecy\x12\xe2uJ\xe0\xaa'4\xae\xf8\xa8~\x0d\xca\x7fU\x18\x8e\x0f\x80\xe0\xd9\xc8\xae$;\x05\x94\x8bOA%-\xa0pE#\x14Z\xa10\xa9\x94M\xf3\x15[\xe6+7\xccWk\x97\x7f\\\xb3\xc4-\xc0\x8a-\xc0\xca-\xc0j-\xc0\\\x0b\xe8N\x92'r\xc3\xc8v\xbct\xcf\xbdu@\x1b7e\xdd1[8\"\n\xd9\xbb\xe9\xda\x90(d/\xc1k\x03\xa2\x90\xbdm\xafYD!{\xad_\xeb\x13\x85\xec\xfb\x034\x93(d_T\xa0\xf5\x88B\xf6\x8d\x08\x9aA\x14rJ\xd0\xad\xa6P\xe7$\xd2{d1{0\"\xd4\x1a\xce\xccy\xfb8L\xed\x14i}\x8b>o\xb0\x08c\xff\xbc(\xfb\xb1o\xb9h\xf9\xd3D\xf0\x1cd7\xd6\xc5\xec\xc6:\xcc\xaex\x0e\xb23L\x89x\x86)\x90\xaf,\x809\x8e$\x12\x1a#\x81\x88e\x01\xc8\xb1\xd7\x93\xc8\xd8\xeb d,\x0b`\x8eC\x89\x8c\xbd\xa1@\xc6\xb2\x00\xe4h\x1a\x12\x19MC cY\xa00\x96\x1e`\xd7\xd2\x88\x0f\x1c<\x8fwI9\x9e\xe6`R\x96\xa7\xfa\x98\x9c\xe9\x89n&ez\xaa\xa7\xc9\x99\x9e\xe8lR\xa6\xad\xfe\xa6\xe0p\n\x93w\xe3\x85\xfes;\xa1\x84\xe1\x89>(\xe1x\xb2\x0b\xcax\x9e\xea\x81\x12\x9e';\xa0\x8c\xe7\xa9\xfe'\xe1\xf9D\xf7\x93z\x1a~nO\x930<\xd1\xd3$\x1cO\xf64\x19\xcfS=M\xc2\xf3dO\x93\xf1<\xd5\xd3$<\xdb=\x8db:\xc7\xb6\xf3\x90EP\xf9y\xce\xf3x9\xb7\x7f\xd4\xcf\xb2?\xdd\xf1O\x10t\x04AG t\x08A\x87 t\x00A\x07 \xd4\x82\xa0\x16\x08\xedC\xd0>\x085!\xa8 B{\x10\xb4\x07B\x0d\x08j\x80P\xdd\x02\xa0:\xdb\xae\xed\xca+\x02\xde\x02\xbbJp\x8e}qf\xe8\xfa\x0b\xded\x05|$\x82\xb3f+\xe0C\x11\x9c5]\x01\x1f\x88\xe0\xac\xf9\n\xb8%\x82\xc3M\xed\x8b\xe0\xac\x19\x0b\xb8)\x82\xb3\xa6,\xe0=\x11\x9c5g\x017Dp\xd0\xa4%\xf6\xaf:{\x93:@v\xacQ\x10\xc3`V`\xae\x1d?h\xcb\xd8\xdeW\x08\xd3dVw\xbe\xe7R\x00\xcbb\x96ad\xe1p\xc8\xacG\x13\x0foP\\\x15s\xefB\xc3\xf95\x0b\x1ad\xdb6#A\x18\x06\x94\x08\x8e\xe3@lH\x08B\x08\xd0E\xae\xdd\n\xb2\xe8g\x7f\x00\xf5\xd7\x80\xc5\x02PV\x8c\xdc\xba\x92\xa1\xde\xd7\x19\x0cQ\xbcX\xf4\x0ds\x00IJ\x81\x86=\x8biN\x18\xdb\xc1\x92\x10c\xc0]\xe9_\x86\x98\xe00\xe7\xae\xd9\xef\x11\xc6\xe1\xb6Dd`H\n\n\xf4\xd7\xc5|a\xd8\x8cy\xa2u\x1c\xe1Z\x10\x0b\xf5\x1c\x9b\xbd\x9c\x90s\xa2qv\x7f`.z\x80\xea\"/\xa8=\xd1\xb5t}\xc4\xe8n\x15\xa6\x14&S\xe0\x9c\xb1\x10]>\xd2aW\xa0Q\xb6\xe9\x0eA\xb7G(\xa8{\x869\x1cZ=\xd6\xb3I\xc0\xd8\x1e\x0f\xfb\xb0\xdf\x11\xb01Bs\x87iW`o\xf6M'5\xe6\xfd> \xcd\x1c\xafQ\x03\xea\xf7\xc7\xec\xcb\n\x88r\xd3\x1a\"\x17\xb4)\x89\x1a\x0f\x1c\x87u\xe1\x1c\x85\x12\x1a\xe8\xb8\x88\x03n\xedd\x85\\\n\xb6\x18,\x16\x0b\x04\xc2(\x15\xa0\xd1\xc2]X \x8eq\xb9\xc5\xc2As\x10H\xf5\x10w\xe1ro'\xc3a\\_\xb1/\x80\xd5-AZkK\xad\x8e<\xe6\xb6\xf3\xb0,\xde\x91ZPH\x83\x90\x8ap\xd4B\xc8\x85$\x15\xe1\xb0\x85\x90\x0bP*\xc2A\x0b!\x17\xaeT\x84V\x0b!\x17\xbcT\x84\xfd\x16B.\x94\xa9\x08\xcd\x16B.\xb0\xa9\x08{-\x84\\\x98S\x11\x1a-\x84\xdc\x0cY\x11\xea\x96\x9c\x90\x0b\x81\xe6K\xad\x8e\x828\xca\xb6\x80\xa8&\x86\xdc\xa7-<\xaa\x89!\x17j\x0b\x96jb\xc8\x8d\xdaB\xa7\x9a\x18r\xa5\xb6@\xaa&\x86\xdc\xa9-\xac\xaa\x89!\x97j\x0b\xb2jb\xc8\xad\xdaB\xae\x9a\x18r\xad\xd6\x00\xact/\x9e\x92\x0f\xc7\xe6K\x8d\x88\xc8x\x02.8\x9b/\xb5&>\xe3\xf1\\\xa86_ju\xb4\xc6\xc3\xb9\xc0m\xbe\x14A\xb90n\xbe\xac\x824\x1e\xcc\x05u\xf3\xa5F\xc5u< \x17\xe2e\x92\xd7Q\x1e\x8f\xe7\x02\xbe\xba\n\x01\x01\x17\xfeU\xba/\x02<\x9e\x00\n\x06+\xc7\x80\xe0\xect9_\x16+\xe4\xc8\x8eQ\x90\xf2\x14D!l\xe3l\xc2\x03\xda\x01D\x98\xf3\xa5\x00\x0c\xc5\x9b\xb5\xa2D$|\xf49_je\x00\n\xe1\xf9X4s\xa3,\x1c\x85\xd0|d:_VA\x00\x87\xe7\xe3\xd4Zz\x11 \x18\xb5\xce\x97U@\nt\x02 \x86\xadk\x11RA\x11me\xb8<\xd4\xe4I\xa0\xf8v\xbe\xd4\xea\x10\x176\x1f\x1b\xedfM\x11\xa1\xf9\xd8\xb7i\x88\x88\x86\x8f\x84\x9b1&\x8b\xe0\x80A \x88\x8b\xf3\x81C\x00\x07\xa2d\xa2\xb3\xc2DP\xcc\x9cu\xd8,l\x86\xc6U>\x82\xaeZ\x91\x87\xab\x10 \x10O/Eh(\xba\xae\xdb \xa0\x81b\xed\x8a\xa6\x0e\xb7\x81\x81\x0d\x88\xbc\xb3a\x87\x08\xbe\x013\x02qxC$R2\x14\x957T\xe2\x0e\x06\xc4\xe8\x0d\x99hT\xe1#\xf6\xf9\xb2\x0e\xd79\x020r\xcf\xef\x97\x17s%t\x07\x9d,\xce\x7fn\xd6N\xec\xbb\xd7rd3\xf3\x8a\xb9\x11\x18\x8a%71\x17\xf0zn\x16sl \x14Cn\xe6.\xd0\xd5\xe4-\xe6W#(v\xdc\xcc^\x80\xe5\xacx6\xdc\xac_\x00\x8bY\\\xcc\xa8,\xa7Xq1A\x01%\xc3\x021C\nE\xb1\xe5\xe2\x86R+U\xe8 Q\\\x0d\xa1\x18r\x81\x05)\x81\x9c#\x81\xa1Xr\xa1\x07\xe1[y8\xd1\xe2\x7f\x05\x86b \x05'\x05E\x0bC\x88\x17;\xdc\x10\x1dI\x1b\xeb-]-C\x90\xecd+h\x92l\xd4\xcax$f\xcc.\x8fH\xb2a+\xe3\xa1\x981\xbbt\"\xc9\x06\xad\x8c\x07b\xc6\xec\xb2\x8a$\xb3Z\x19[b\xc6\xec\x92\x8b$\xeb\xb72\xee\x8b\x19\xb3\xcb1\x92\xcclel\x8a\x19\xb3K5\x92\xac\xd7\xca\xb8'f\xcc.\xe3H2\xa3\x95\xb1!f\xcc.\xf1\x88\xae$\xed 5\x82d\xdc\x96' Ie\x9d\xa4F\xc8\x98\xc3\x1d\xa5J%\xb41\x1f\xca\x99\xc3\x9d\xa5J5\xb41\x1f\xc8\x99\xc3\x1d\xa6JE\xb41\xb7\xe4\xcc\xe1NS\xa5*\xda\x98\xf7\xe5\xcc\xe1\x8eS\xa52\xda\x98\x9br\xe6p\xe7\xa9R\x1dm\xcc{r\xe6p\x07\xaaR!m\xcc\x0d9s\xb8\x13\x95\x81\x9e\x98w\x05 Y\xcb\xa2\xc3e[HW#\n\x8e\xd0\xd2\x00\x0c\x17\xa9\\\x8d\x94=\x174\x02\x8b\"8~$\xd3;\xd2*\xd8(\x12X\xb2\xc0\x01%\x91\x10\x92V\xc0\x84\x95\xc0\xb2\x19\x8e0\xcb\x0c\x92\x94\xb7\x94\xaf \xe4\xac\xd3MR\xceT\x84\x08,\xc9\xe0\x18\x94\xc9NIk\x00\"Q 9\x00\x07\xa5dJK\xae|&4\x05V\x89p\x94J%\xc1\x14\xda!\xadC\x10\xb6Ry\xb3\xf6~@\x06\x9c\xc0\xbaP\x18\xc7V\xa96i\x0d-\xcc\x05\x81-\x95\x98\x93\xf2'q\x82Z\x84i\xbc\x9a\x89B \xbddci\xae\x1a\x85\xb0z\xa9\x12Y/\xd9\xe0ZZ\x93 \xce^\xaa\x84\xdaK6\xda\x96\xd6$\x08\xbc\x97*\xb1\xf7\x92\x0d\xbf\xa55 \"\xf1\xa5J0\xbed\xe3qiM\x82\xd0|\xa9\x12\x9d/\xd9\x00]Z\x93 V_\xaa\x84\xebK6b\x97\xd6$\x08\xde\x97*\xf1\xfb\x92\x0d\xe1\xa55 \xa2\xf9\xa5J@\xbfdcziMpdBl\xf6\xb5\x8fA\x92\x9e\xab\x16\xef\x13\xbb\x83\n\xb5\x89{\xaf\xda\x02\x80\xd8NT\xa8M\xdc\x83\xd5V\x04\xc4\xfe\xa3Bm\xe2^\xac\xb6D 6,\x15j\x13\xf7d\xb55\x03\xb1\xc3\xa9P\x9b\xb87\xab-\"\x88-Q\x85\xda\xc4=ZmUA\xec\xa1*\xd4&\xee\xd5j\xcb\x0cb\xd3U\xa16q\xcfV[wT;l\xe2\xaajDQO\x15\x14\x01\xdbo\x05^\xca\x8c\xe3\x03\xed\xcc\x15\xd0zsN\xcc\xad\x810<\xf9\xad\xbb\x82\xa0\xd8\xbd\x133,\xcb\x19n\xfc\xc6^\x81^\x86X\"\\^\xcap\xe27\xfd\nl\xb1\xc7 \xe6U\x96\x93\xdc\xf8-AR'm\x0c)\x14-$\xb0mX\xd0\x14{\x80b\x9ee9\xc5\x0d\xdaT$%h\xe3I\xa1(\xce\xd0\xc6#\xe1\xb0\x91\xe0\x05\xbd,\x84\xe2 \x9f\xbc\xcb\x08\xaa\xcdI1\xcb\x1a\xc1\xb97\xbbsYjK\xca\x0d\xe2\xc4\xefjR:\x92\xf2#0\x0cW~\xdf\x93PQ\xbec\xd6\xa2\xc6\x02Cq\x85vF\xcbN!g\x08\xf1\x02\xb6M\xc96\xb5p$A\x14_hg\xb5 \xec\x8dd\xcd\x98\x97R\x9c\xa0]WB?s\xbc\x968x\x03ax\xf2\xdb\xb2\x05\x81\x9c\x1d\xcf \xda\xb2%U#\xe7G`h\xed\x01\x9b\xba\x04E\xb5\xaf\xdb\xc2\xb8\x86Q\xbc\xa1\x9d\xdf\x82\x88\xd8\xfc\x15s&A\xb4\xaf\x03\x9b\xc3\x14I\x8b+Q(\x8a3\xb4\x81L\xd1\xb4\x0d\xc74\x8c\x96\x1a\xd8e\xa6\x88\xa43$\x81a\xb8\xf2\xfb\xd0\xa5\x07-\x15b\x02\x12T\xf0\x05\xd2&\xc2\x08\xa18\xa6#\xe5.c,\x0e\x19\xc8#=R\xf6l\xe0\x00U\"\x8a!\xeaC@\xd2\x1a\xa8H\x02b/\n*\xca3CR\xe6Dh\x01\xb1\x16E\x19\xf5\x01#)s\xca 9\xf6\xa2\xb0\x839\x8f\xa4\xa0}y=\x928\xa4>\xc4$\xad\x84\x8a\x19x\xf6\xe2\xc0\x849\xf3\xa4\xd0\x92\x96\xaa\xc4\x91\nyP\xaa\xbd\xb3\x11\xb37_\x898t!\x8eVI\xeb`\x02\x18\xb8\xdf\xc1\xb1Ly\x16Kn\x0f9kQpC\x1d\xdcR\xb1\x85\xbc\x1aQ\xb4C\x9d\xf5j7\x059\x07\xf0\xd5\x88\xc3\x9f\xeax\x98\xbcw\xcb\x99\x0b\xe3!\xfa0\x99\x82\xae\xe4\x15\x89\x03\xa4\xf2\x00\x9a\xb4\x06\"L\xe2Y\x8b#&\xf2\xb4Z\xbb\x19\x889\x1e\xaaD\x18B-\xdb\xf9KY\x8bc*\xea0\x9c\x82 \xa4\xd5\x88\x83,\xf6\xfc\\{ML\xa8\xc5W&\x8e\xba\xe8Sw\xd2\xaa\xf8\xd8\x0b\xe8\x84\xc20\x8c9\xa9\xa7R\x93\xdc\x85\xc5q\x19{\xbcO\xa5\xae\xb6 K\x18\xa8Q\x87\x02Uj\x92\x07&\x92\xc8\xadu\x17\x99\xc0\x08*\x00\xf7\x94#[?\x08\xbe\xdf\x1a\xd9F]\xd4\xedY\xdc{j#\xbb\xd7\x94C\xc5f]\xcc\xbfY7\xb2\xfbu)\xffj\xdd\xc8\xb6\xeaR\xfe\xdd\xba\x91=\xa8K\xf9\x97\xebF\xf6\xb0\xa9\x97\x7f\xbbn\x84\xeb\x06k\x18-R\xae\xd5\xd8\xa0\xcb\xc1\xa6\xe3\x1e\x03\x820&\x8d\x01\x94\x80\xfb4\x04\xd0\x04\xb6h\x08\xa0\x0e<\xa0!\x80N\xf0\x90\x91\x05PL\xdc(&\xce\x06\x16N3\xb1\xc1\x00@\xd5\xc4=\x16\x05\x81L\x06\x04('\xee3\x18@;\xb1\xc5`\x00\xf5\xc4\x03\x06\x03\xe8'\x1e\xb2\xf2\x00\n\x9a7\n\x9a\x87i\x1a\xfa\x9c\x86\xe6\x06\x8b\x00U4\xefq0\x08e\xb2(@I\xf3>\x0b\x02\xb44\xb7X\x10\xa0\xa6\xf9\x80\x05\x01z\x9a\x0f9\x99\x00E\xa5\x8d\xa2\xd20\xe2\xb4\x94\x1aT1\xa8\xa2\xb4Gc \x88IA\x00\xe5\xa4}\n\x01h&\xb5(\x04\xa0\x96t@!\x00\x9d\xa4CZ\x0e@!\x1bF!\x93\x16?\xda@\x1ab\x89@\xbdm\x00\xbdq\x84\x10\x1d\xafL\x96\x0cP\xf0\x86W0K\x05(}\xc3+\x9d\xa5\x02\x0c\xb1\xe1\x0d\xc1R\x01\xc6\xd9\x00\xc6\xe1\x1a\x06Xl\xc5\xce\x125\x11<6\xae\xc0Y\x83!\x02-\xb6\x82\xa6\x12\x96\x10\xa2\x03\xa6\x17\x86\x0c\xb0\xd8\n\x98q\x18*\xc0b+`\x12b\xa8\x00\x8b\xad\x80y\x89\xa1\x02,\xb6\x82\xa6*\xb6a\xc0\xc7\x85l\xfd\xe0\xdb\xf1\xd2\x0bX\xdb\xf8\xb6Q\x95@\x06\xf0\xed^]\x0c\x95\x9aU)\xf0\x95'\xbb_\x15\x02\x9fU\xb2\xad\xaa\x10\xf8Z\x92=\xa8\n\x81\xaf-\xd9\xc3\xbaN\xa0\xa1\xb8j(\x18\xbf\xf8\xd8\xa0\x8a\xc1&\xe3\x1e\x8d\x81 &\x05\x01\x1a\x8f\xfb\x14\x02\xd0\x00\xb6(\x04\xa0\x06<\xa0\x10\x80.\xf0\x90\x96\x03PH\\+\x04\xec\x9b~l\xd0\xe5\xa0J\xe2\x1e\x03\x820&\x8d\x01\x94\x12\xf7i\x08\xa0\x95\xd8\xa2!\x80Z\xe2\x01\x0d\x01\xf4\x12\x0f\x19Y\x00\xc5\xcck\xc5\xc0\xf3\x8c?7\x18\x00\xa8\x9ay\x8fEA \x93\x01\x01\xca\x99\xf7\x19\x0c\xa0\x9d\xb9\xc5`\x00\xf5\xcc\x07\x0c\x06\xd0\xcf|\xc8\xca\x03((\xad\x15\x04\xc4)~j\x90\xa5\xa0j\xd2\x1e\x05\x81\x10&\x89\x00\x94\x92\xf6I\x00\xa0\x91\xd4\"\x01\x80:\xd2\x01 \x00t\x91\x0e)\x19\x00ElhEL\xe4n\xb3\x01\x143Qp\xa4\x0d\xaf-\x96\x0c\xa2\xe248i\xf5\xb4\x0d\xa7\xd4I\xab\xe7m8=OZ=q\xc3\xa9~\xd2\xea\x99\x1b\xde\x1al\x83\x00\x0b\xad\x98Q\xbf\"\x81\x87\xbc\x154 \xd0$\xa0\x85V\xc0\xc4\xc0\x90AT\xfc\\A\x13\x01\x16Z\xf1\xb3\x07M\x03Xh\xc5\xcf'4\x0d`\xa1\x15?\xc3\xd04\x80\x85V\xc0\x9c\xc34(\xb7P\xfb[-\xe9\xd7\nFv\xfer\xce2\x96\x01\xf2-d\xa9 \xe5BA \x84I\"\xc0\xc4\x0b \x00s/$\x00L\xbf\x90\x000\x03C\xc9\x00&a\x08\x84(\x0f\xc3A\x04\xa9\x18\x1e\x07\xc1L\x0e\x06&d8\x14\x98\x93\xe1P`Z\x86C\x81\x99\x19^.09C\xc2D\xf9\x19\x1e#H\xd1\x00@\x08g\xf280Q\xc3\xc3\xc0\\\x0d\x0f\x03\xd35<\x0c\xcc\xd8\x00\xb2\x81I\x1b\x12'\xcc\xdb\x00 A\xea\x06BB@\x13\x00\x82 \x1c\x00\x07\xe6p\x00\x1c\x98\xc6\x01p`&\x07\x92\x0fL\xe6\x90@8\x9f\xc3\"\x04)\x1d\x0e\x06\xa1L\x16\x05&vX\x10\x98\xdbaA`z\x87\x05\x81\x19\x1eN&0\xc9\xc3)\xaa=\xcf\x03kN1\xd5\x03\xeaS-\xdb\x03)Y)\xe1\x03)^)\xe7\x03\x19C)\xed\x03\x19H)\xf3\x03\x1aM-\xf9C\x92*\xe6\x7f8\x92cR@<1D\x0b\x91\xc2\xd3\x9aJ\"\x88#T\xcd\x05q\x84\xaa\xe9 \x8eP5#\xc4\xb7Q9)\xa4\xe5\xdfs\x8f\xe1\xbc\x10Q(H\x0d\x91\x08\x08`\x12\x000AD\x94\x839\"\xa2\x1cL\x13\x11\xe5`\xa6\x88\xac\x1fL\x165\x00Q\xbe\x88E\x08RF\x1c\x0cB\x99,\nL\x1c\xb1 0w\xc4\x82\xc0\xf4\x11\x0b\x023H\x9cL`\x12\x89@\x89\xf2H\x1cD\x90J\xe2q\x10\xcc\xe4``B\x89C\x819%\x0e\x05\xa6\x958\x14\x98Y\xe2\xe5\x02\x93K\x04L\x98_\xe21\x82\x14\x13\x00\x84p&\x8f\x03\x13M<\x0c\xcc5\xf100\xdd\xc4\xc3\xc0\x8c\x13 \x1b\x98t\"pp\xde\x89\x01\x08RO,\n\x02\x99\x0c\x08L@1\x180\x07\xc5`\xc04\x14\x83\x013Q\xac<`2\x8aUPk>\nT\x98ZJ\n\xd2\xa2RV\n\xd0\xacJb\nP\xb6Jn\n\xd0\xbfJz\n0\x89J\x86\n\xb2\x92R\x92\x8a T\xcbS\xb1\x04G\xa4\xaa8R\x80\x12\"\x04\xe7(\x85\x84\x15K\xa6\x98\xb3b\xc9\x14\xd3V,\x99b\xe6\x8ak\x9b(y\xa5\x90\xbdR\xf8&Kd\xeb\x9a_\xc5fPF\xab)\x14%\xb4\x08\x04\x040 \x00\x9c\xcej\xca\xe1lVS\x0e'\xb3\x9ar8\x97E\xd4\x0f\xa7\xb2|f\xad\xc0\"\x0c\x16!Jd\xb10\x08e\xb2(8\x8d\xe5\xf3\xb1=\x0b\xb2X\x10\x9c\xc4\xf2\xf9\x98\x9d\x05\x0d9\x99\xe0\x14V\x83\x12f\xb0X\x88(\x81\xc5\xe1 \x98\xc9\xc1\xe0\xf4\x15\x8b\x82\xb3W,\nN^\xb1(8w\xc5\xc9\x05\xa7\xae\x1a\x988s\xc5aD\x89+\x1e\x08\xe1L\x1e\x07\xa7\xad8\x18\x9c\xb5\xe2`p\xd2\x8a\x83\xc19+^68e\xd5\xe0\x04\x19+\x1a JX1(\x08d2 8]Ec\xe0l\x15\x8d\x81\x93U4\x06\xceU1\xf2\xc0\xa9*FA\n\x99*Hc\xaa\x89*@\x8f\x8ay*^\xb9ji*^\xe1jY*\xde\x08jI*\xde0j9*\xc0X\x8a)\xaa\x86R5C\xc5P\x1c\x95\xa0bi!R\x88\x12\x9c\xae\x94\xd2S\x0c\x9drv\x8a\xa1SNN1t\xca\xb9)\xb6}\xea\xa9)\xbf\x8c\xd4\xa0\xccT]&JL5\x00\xa8\xdcl\xca\xe1\xb4T]\x0cg\xa5\xeab8)U\x17\xc39\xa9\xa6n8%\xe5\xd3k\x04\x16`0\x00QB\xca\xe7\xc3\x7f\x16d2 8\x1d\xe5sq=\x8b\xb1\x18\x0c\x9c\x8c\xf2\xb9\x88\x9d\xc5\x0cYy\xe0TT\x0d\x12f\xa2\x18\x84(\x11\xc5\xc2 \x94\xc9\xa2\xe04\x14\x03\x82\xb3P\x0c\x08NB1 8\x07\xc5\xca\x04\xa7\xa0j\x948\x03\xc5BD (\x0e\x07\xc1L\x0e\x06\xa7\x9fX\x14\x9c}bQp\xf2\x89E\xc1\xb9'N.8\xf5T\xc3\x04\x99'\xaa\\\x94x\xa2A\x10\xc6\xa41p\xda\x89\x82\xc0Y'\n\x02'\x9d(\x08\x9cs\xa2e\x81SN\xb4b\xda3N\x80\xa2\x14\x13N\xbc\xf6\xd4\xf2M\x9cF\x95\xd2M\x9c\x92\x95\xb2M\x9c\xde\x95\x92M\x9c)\x94rM\xbcu\xd4RM5\x9db\xa6\x89\xc6\x1f\x93hb(\x01B\x88\x0e\x9a{T\xd2L4\x95j\x96\x89\xa6RM2\xd1T\xaa9&\xa6]\xa7\xa5\x98\x04\xd9$\\\x85SP6\xa9)\x14e\x93\x08\x04\x040 \x00\x9cMj\xca\xe1lRS\x0eg\x93\x9ar8\x9bD\xd4\x0fg\x930\x13\xd7\xb3\x08\x83E\x88\xb2I,\x0cB\x99,\n\xce&a>\x16gA\x16\x0b\x82\xb3I\x98\x8f\xb2Y\xd0\x90\x93 \xce&5(a6\x89\x85\x88\xb2I\x1c\x0e\x82\x99\x1c\x0c\xce&\xb1(8\x9b\xc4\xa2\xe0l\x12\x8b\x82\xb3I\x9c\\p6\xa9\x81\x89\xb3I\x1cF\x94M\xe2\x81\x10\xce\xe4qp6\x89\x83\xc1\xd9$\x0e\x06g\x938\x18\x9cM\xe2e\x83\xb3I\x0dN\x90M\xa2\x01\xa2l\x12\x83\x82@&\x03\x82\xb3I4\x06\xce&\xd1\x188\x9bDc\xe0l\x12#\x0f\x9cMb\x14\xa4\x90M\x824\xa6\x9aM\x02\xf4\xa8\x98M\xe2\x95\xab\x96M\xe2\x15\xae\x96M\xe2\x8d\xa0\x96M\xe2\x0d\xa3\x96M\x02\x8c\xa5\x98Mj(U\xb3I\x0c\xc5Q\xd9$\x96\x16\"\x85(\xc1\xe9J)\x9b\xc4\xd0)g\x93\x18:\xe5l\x12C\xa7\x9cMb\xdb\xa7\x9eM\xc2eP\x06e\x93\xea2Q6\xa9\x01@\xe5fS\x0eg\x93\xeab8\x9bT\x17\xc3\xd9\xa4\xba\x18\xce&5u\xc3\xd9$L\xaf\x03X\x80\xc1\x00D\xd9$\xcc\x07\xf9,\xc8d@p6 s\xf1;\x8b\xb1\x18\x0c\x9cM\xc2\\l\xceb\x86\xac{U\x1fl?w\x15\x1fV\x00w\x17\x1f\xd4\x00w\x19\x1fR\x01w\x1b\x1f\xd2\x01w\x1d\x1fR\x02w\x1f\x1f\xd2\x02w!\x1fT\x03}\xe7\x1e\xd6\x01}\xe9\x1eT\x00}\xeb\x1ej=}\xed\x1ej:}\xef\x1ej7}\xf1\x1ej4}\xf3\xbelq\xfb\xc1\xcb\x033f\x90\x17UD\xa3\x1d\x05\x01\x07<\x12\x01\x8ey$\x00\x1c\xf6H\x008\xf2\x91\x00p\xf0\xa3d\x00\xc7?\xf6\x00\xabh\x08\xe4q\xe0(\xc8\xc1\xc0\x81\x90C\x81c!\x87\x02\x87C\x0e\x05\x8e\x88\xbc\\\xe0\xa0H\xc0\xe4\xe3\"\x00\x04\x87F\x1e\x07\x8e\x8e<\x0c\x1c y\x188F\xf20p\x98\x04d\x03GJ\x02\xd72XBHp\xbc\x04\x80\xe0\x90 \xe0\xc0Q\x13\xc0\x81\x03'\x80\x03\xc7NH>p\xf8$\x80\xb2\x11\x94\x83\x81\x83(\x8b\x02\xc7Q\x16\x04\x0e\xa5,\x08\x1cMY\x108\xa0r2)l5\xaa\x9ef\x0f\xc8\x83W\xc2\x81\x96@\xc0\xe3l\x03\x80\x87\xd9\xa6\x1c\x1ee\x9brx\x90m\xca\xe11\x96\xa8\x1f\x1eb\xe9\xfd[\xe1\x08\xcb\xc2\xe0\x01\x96A\xc1\xe3+\x03\x82\x87W\x06\x04\x8f\xae\x0c\x08\x1e\\Y\x99\xe0\xb1\xd5gF\x1b\xd1\xd0\xca\xe1\xe0\x91\x95\x85\xc1\x03+\x8b\x82\xc7U\x16\x05\x0f\xab,\n\x1eU9\xb9\xe0A\xd5g\x07\x18\xd1\x98\xca\x03\xe1!\x95\xc3\xc1#*\x07\x83\x07T\x0e\x06\x8f\xa7\x1c\x0c\x1eNy\xd9\xe0\xd1\xd4\xa7\xc6\x1a\xd1`\xca\xa0\xe0\xb1\x94\x06\xc1C)\x8d\x81GR\x1a\x03\x0f\xa44\x06\x1eG\x19y\x14\x86Q\xc1\x88\x89\xeb\xe1F4b\x12\x08x\xc4l\x00\xf0\x88\xd9\x94\xc3#fS\x0e\x8f\x98M9\x96\xdc\xca\x05\xfajr\xc1\xa8\x10\xa6\x95C\xdb7\x12Kf\xae\x1d?\xb4\xf2\x92}I5\xe3\xf3\x80\x0e)\xda\xa5\x9a\x8b\x9c0\xb6S/\x0c\xce\xb1\x17 -]\xc5\xe1z\xb9\xa2 \xd6\x81\x8b\xe2\xac\x98\xa3\xa9K\x18\xc7\x0b51M\x10\x06Ha\xe9s\x00d\xce\xd6Q'\x88\x0d\x91)H\x0e\x91\xe5\xc2+H\xaf\xb0p+\x9b\xe4\x9f\xd4\"\x9eJ\xa5A<\x95B{\xc4\xa2\xe3\x93D\xe7\xa9TD\xe7\xa9\n\xd1)\x8a\xb4D\xd9\xd8[\x06\xe7YT\xc0\x94\xc7dy>Q2\x00\x87\x048(HQ\xac`\xed\x03#E\xed9bA\x18\x08(\x0b\x83)\xc5Q\x90G\xc1\xfbR\\y\x83DF\xbf]D\xffh aaZ-G#`a0$\x0c\x0d\xaa,\x9c\x7f!~\x11\xc6\xfe\xb9cG^jc\xef\x11\xb1P\xccBq\xb8E\xb1c'\x1cr\xcd\"\xd7Q\x04#\x03\x16y\xd2p\x98\x12\xce\xa1\xd4\x12\x00-n\x0c\x00\x16\xb7\x07\x00+\x0c*\xcan\xda\xb8\x98Z;9\xb0\xa4\x99\x1cV\xd2J\x0e\xab\xd0HA{8\xb7\x92\xb5\xe7\x08\x1f\xe4\xb1\x92\xf6pX`8]h\x833\xe6\xc1\n\xd9n>\xab/\xc2 \x8b\xf5\x1e\xd19\x1fR/4\x8b\xa5K\xd6s\x80\x94\x0f\xa1\x17\x06Ql\xf2\xc5=\xa2\xb8\x07\x05\xea\x0b\x93@\x18@\x90\xbe\xe8S\x00\x88\x85E\"\xf8\xe2\x01Q\xdc\x1d\x0d\x01\x06C\x12Q\x00\xda{\xc3\x81\xd5\xbd\x16$\"\xf5g\x9d\xae\xc5\x02\x005a\x04\x9a\x01d\x07\x1a\x01\x99\x82F\x08\xacA\x83`\x83\xb0\x18\xd0&\x0c\x080\x0b\x8d\x10X\x86\x01\x15\x18\x05\xeb(\x8cU\x99\xc9|\xa1\xc5\xfcV\x83q\xb4\xa4\xbd\xfc6s\xf9m\xd6\xf2\x15\x8c\xe5\xb7\xdb\xcaW0\x95\xdff)_\xc1P\xfe\xb1v\x12\x98\x04\x0bM\x82[M\xc2\xd1\x92&\xc1m&\xc1m&\xc1\n&\xc1\xed&\xc1\n&\xc1m&\xc1\n&\xc1\x80I(\x8c\x8f\xecd\x1d\xa3C\xd3O\xb2\xce\x03b\xb2r\n\xd8\x17\x01\x03;\x8e\xc3-\x01\xedq<\xbd\xc0EAZLi\xc5\xcf\xe7Fs\"+m?\xcf\x98\xf86\xc6\x9acG\xe5\xe8\xb0\xb1c\xcf\x0e\xd2\xf3\xe69\x8dO\xe3u\xe0\xd8):\xe4\xc9\x81<5\x82\xce\x83p\x1b\xdb\xd1$\xdc\xa0x\x91\x7f\x9c\xcfs]\x14Lr\xa9\xea\x87\x08c/J\xbcDa\xcc9\xc0\xeaH\x94\xd5\xcb`[4L\xa3EJ\xae\xe3\xbd'\xea\xb9\x1e\x88UU\x9d\x11\x9c\xaem\x05u+\x0c\xf1\x95\xc2|u\x13\xf8\xc7X\xc0W1\x80\xff<\xfa\xf7\x8fT\xbf\xff\xdd\xb4/Q4VW4>F\xd1XE\xd1\xf8y\x14\x8d\x8fT4~\x8a\xa2)\x96U\xb9\xe6\x84Aj{\x01\x8a\x0f\xf5\xa3\xfdy\xe2\xc4!\xc64E\xb1h\xa6\xb7\x12\xecu\x1aN\xc8\x9d\x96\xec\x01\xa3\xddX\xcb\x1e\xf2t\x0c\x0cS\xb0\x86Y{\xe7<\x00bj\xec\xd9\x1buIARPX\x8d9\xf4\x94\x03\x15\x04V\x18M\xcaV\xf8'7\x02\xa0\x84\xdb\xe0\x1f\xdb\x04\xb1\xb4\xf8di\x01JXZ\x0cHK\x8b\x82\xbd\xe8\x10\x85\x89\x97'\x02\x17\xde\x0e\xb9\xff\xd7\xf3\xa30N\xed \x9d\xfcQ\x97\xd8\xf3$\xc4\xeb\x14\x11\x85\x19\xe9y\x8c\x9c\xf4G#\xdau\x88\xbf?\xd1Eg\xc4\xdf\x9f\x14\xcc}\xe0\x04\xcc\x1c\xe7\xcf\x94QAH\x15\x9f\xcc$\xf7\xff\x83\x04\x17\xc9\x88\xff\\\x19)\x01\xb6\x89\x16\x84\xb1o\xb3#u\xf6\x88F\x16\xa370\xa0\xd3\xb0(\xa6#\xc9(>>'X\x0b\xc5\x07J\"\xb9\xe0\x90\x8a\x13\x8d\x85e\xd2)\x88\xa7\xe0m\x8d\xcclt!\x14\x19\nCx\x89\xfd#\x05\x96\xca\xa6jfp\xe6\xe6e\xc3\xbcl\x14f\xa3\xcd\xed\x04\x1d6(N=\xc7\xc6e:;{\xc6\xef\x91l4\xdfsY\xa8\xef\xb9.\xe6\x80i\x18\xb1\xc04\x8c\xb8\xaaS\x9f\xab9\x0fp\x14\x0c~\x00\x9a\x91\xf9\x8ezK\x00\xb4\xb01\x00\x16n\x0f$B\xd1$\x856)8q\xd9P^o\x92vr`q39\xa8\xa0\x95\"\xbb\x1d\xed\xf8e{\xf01\xed\xe1\xc0\xe2\xf6pPA{\xf8\xfa\xcb\xf6PX\xd7\xf3\x0fad;^\xba?7\xb8\xa23\xf6\x01\xf41\xfa\xecq\xf1\xfdym\x8b\xe6\x0f^\x99\x15/f\x90\x92w\xa7kXI\x07ez\xf1\x82IK9'\x86\xbc\xd6J\xfc\xae\xc5\x13\xdaN\xeamP\x03\x19M\x94d\x0c\xd7\xa9\\\xc8p\xcd\xec\x9e-q\xb8=\xe3\x9e@\x82\xe7\xcf\xbf\xa3\xbe\x14\xea\x15\x18|\x95-\x03\xf3S\x11\x9dn\xfe\x9f\x1a\xa8\xab\xa9\xedXQ\x9b\nKC\x95\xf5\x9e\x89Py\xb3\xda@y\x1b\xd9\x16\x18\xdf\xa7\x05\xcd\x06{^+\xa4w\x16R\x98 _\x7f\xb6\xef\xe1/\xe3p{\xd0\xfc\xf0Q\x0b\x93\x9dVd\x0f\xfd0LW^\xb0<_\xc6\xf6>ql\x8c\xea\xb6\xcdm\xe7aa;H\xdbx\x897\xf7p\xd6\xf2r\xc1+)\xa24\x93of\xe5?a;E\xdf~\xd4\x7f\x9a\x88\x9e\x03\x1a\xe5Xu\xba=A\xa7:\x02z:\xe4\xac\xa5\x16^\xdb`\xd7\x89\xe1.\x9b\xeb$\xb7\xc0\x8fFW\xb7HM\x11O\x81:\xcaaI\xc4\xac;\xe6Yu\xc7\x00#\x0d\xdb\xf1\x12\xfd\x7f\xc5A\xbc\xe0\x18\x1f\xe1\xd1OEI\x9d\xa5\x80\x88L \xf2\x9a\xb2\xb4\xcdwz\x90\xeb\xf4\x84\x06o\xf7\x1f\xc0\x17\xb3\x87L0\x1dzAZ\x8fH\xce:N\xc2\xf8\xbc|H#\x93\x95\xed\x86[\x0d\x02N\xea\xc5b\x8c\xb0\x9d\x89\x05\x99\xdd\xc6\xb8\xd3\xb5\x92\x8e\xb3\x9e{\x8e6G\x8f\x1e\x8a\x7f\xec\x1a\x03\xeb\xac;\xea\x9fu\xfb\xfd3\xe3\xa7\xc9\x91x\xb1\x88\xe7\xf6\"\xcd\x04\x0d\x83\x14\x05\xe9\xf9_\xfe\xd2\xf8\x7f\xb8\xd3\n\xe4\xb9\xde\xd1;\xc6 \xdauz\xd1\xaeC\x9e\xf7\xeb\xfd4Q\x86\xe5\x07;c\xdb\xf5\xd6\xc9\xb9\x17\xacP\xec\xa5\x93f\xd2\xe4\xd6\xd1\x93\"\xf3\x99\xe7e\xf4I\x11A\x1a\xba\xfeb\xb2ByN'\xff\xf91\xcf\x98\xee\xce5\xf9\x9cu\x846Ui$\x1a\xcd\xfd\xbb\xd0\xeb\x99\x18Ej_\x10d\xcc\x97\x9a\x1dx\xbe\x9d\xa23\xc1s\xa8/\x11\xa5\xc2\xd0\x89=\xc4IM\xdb\xec(\xd0\n\xa6\xa5~\xd4\xf4Ce\x17\x9d-2\xea\"\x83-\xea\xd5E=\xb6\xc8\xac\x8bL\xb6\xa8_\x17\xf5\xd9\"\xab.\xb2\xd8\xa2\xf1x\\\x17\x8e\xc7c\xa0\x98*\xe7\x00\xbe\xbdk\xa45\xfa\xc3\xfe\xc8\x1c\xf4\x87,\xaa\xf4\xf2\x1aY\xfe\xce\xc3\xbc\xd4\xb3q\x0d\xe3\xb3\x95\x8f\xda:HP\xc3(\xff\x8d\x86\x04(IQf\xa0h\xaf\x15\x11T\xdeM:!\xb3\xaf,\xc2Ej\xb05>\x10\xbf\x9e\x1b\xecB\xa2\xa4k6\xae \xda\x95\x01\xd6\x01c{G`\xcd#\xb0\xfd#\xb0\xd6\x11\xd8\x01\xa3\x17\xe8`\x7fA\x8f\xbd$\xd5b\x94 \xa1q\x08\xc4\x9a{\xf1\x1c\x99\xaf\xd6'94I\xf7\x18i\xe9>B\xc5\xd1*\xa1%\x8b\xed\xa5N\xf4sDm7u\x8f\xdbo\"9&(B\xb1\x9d\x86q\xce\x94\xe0at-A\xfb=\x7f\xd9\xf1\xfc\xe5\x81\x18\xd2\x9b\x9cG\xfe\xab\xeb%\x11\xb6\xf7\xe7s\x1c:\x0f\x02\x1d\x06\x0fI\xc7>\x94\xe7\xe1Mk\x88\\\x17\x9a\x02\xf8\x01k\"-\x95\xd5\x06\x0d\xb6\x0c\xa2\x9c\xf5\x0b\xa9\xc6\x03\xc7Y,\x9e_\xaamlG\x11\x8a\x05\n\xec\x0f\xf4hW\x1a\xf0\\\xef\xe4\x9b&\xa5\x0b\x9d\xeb\x9d^VH\xcd\xf0\xdecVRN\xcf\xf3p7\x01\x9f\xd2\x12\x84Qn\x1a-\xb5\x97Z\x82\x9cL\xeaCe4\x82ymH\xcdO\xb4\x05F;\xf2Y\xf6;%I\x18{\x993V\x99\x18\xaa\xcc\xf5\xe2\xa2\x9a2%:\xa98\x12%N\x88\xd7~0\x01\x9f\n\xc5\x7f\xba\xd8\xe4 \xe0F,\xeai\xfe\x8b\xe6\xa5\xc8O\xaaG\x95E\x0c=\x0b\x97\xb2\x7f\x8c\xea\x9f \x134\x8aB\xc4^\xc2E\x81\xbddR\x9b,\xef\xb9F\xb4\xeb$!\xf6\xdc\"\x1c\xb3\xc6g\x03\xebld\x9cu\xcd\x9f\x84*)\x9d\xb8\x99\xf5\xa9\x1b\x1e:\x1bj\x93\xca$\x8e\x18\xf5I'\xd4;V\xb4\x9b\xe4\xa5\x0b\xdb\xf7\xf0\xfe<\xb1\x83DKP\xec-&U\x1f\x9e\xf7\x0d\xcb\x10\xf2\xee\x06\xa1\xe6\xa2\xc4\xe9$\x91\x1d\x1cH\x03d\xfa>7j\xd5\x9f\x1b\x93\xe2?BV\x9dd\xb3\x84\x82\xa2\\\x85}^\xab\xfdD\xc2\xca\xb71u\xde\xa9_5t[\xcc\x04}]\x9f\xa8HK\xf4\xd1\xdc \x8eWVd\xc7\xb6\x8fR\x14\xff\xf1G6\x15\x90B\xf5\xa2]\xcd\xdf\x8av\x1d\x9db\xef\x87A\x98o\x10P\x82\x0ft]V\xdb\xc6C[\xad\x9a\x06\x1f\x0e\xfc\xca&\x9b\x04\xcch7\xa9\x0e>\x90\xfe`\xa9{\xb9\xc5\xdb\xc3\x82\xedq \xdc\xcd\xc8j(\xba\x02\xd1\x07\xfe\xaa\xeb:\xb3\x10\xe9\xb3\xc3a\xb3\x921\x99E\x8c1\xe6\x16;\x00\x04\x14\xad\xd3M\xedy\x1e8\xa0\xf8\xe9#\xceQ\x0eOV]\xfc\x9c\x8dC\x87\xc6\xdb\xfa\xfc\x90s\x04\xa3\xf3\x85\x17'\xa9\x16.\xf2\xf0\x83a\xdb\xd1;\xfa\x11\xbc\xbaebs\xd5/:9\xe7S\xa7\xf3*\xd7Y\xfc\"\xb3\xbe\xad\x999L\x1eSY\xfa\x8bj\xb5\xd9kV\x9b\x99\x9f\x00kd \x9b\xf3\xfb\x8f\x9a\xa5\xbf\x00\x13=U\x111\xb4.c{\x0f6\xab\xeb%Z\x18\xa1\xa0\x19n\x92\xb5\xef\xdb\xf1\xfe \x1a\xe13\xef\x16h\xa8fQL\x8a\x95'V\xd6\x1a\x95s\xd0\xc4\xf7\x82*\x82\xb5\xb2\xdf A\xd9\x1b\x83\xa3\x9f\xe0~c\x00\xcb\x7f\x83\xe980\xe6(\xd9\xcf\x8e\x01w\xb0=G\xf8\xe9\x1d\xef\xa4\xa9\xfe\xa8f\x95\x922C79,\x0fu\xbd\x1eG\xb9\xc30'\xcc\x1aJ\x02\x95\xfd\x91\x9a\xa1$\x9d[\xc0j\xd5g'J\x95Q\xadi\xeds4\xae\xe8C\x9a\x8f\xd2U\xe8\xca\xe6\xed\\\xcf\xf5\xd6\xe5H'f\xd0A\x16\xa8e\xe3\x05w\x03\x8c\x99\\L\xba\x0b\xe5\xd3ONC\xf5\x04\x9d\xed+\xf2v.\x16\x0b\xc5F\x86\xf9\xd2,3\x80\xe7\xb6\xf5\x97\x92$\xb2\xd3\xd5\x11\xd0?\xfepQ\x14#\xc7N\x11\xa5\xccAD\xf4\xacS{[n~\xbdq\x08\xbdc\x16\xab\x19\xfa\xb7'w\xd0\xc96\x8c]m\x1e#\xfb\xe1<\xffW\xb31\x96\x85c\xaa\xf1R\xb9\x19N\xec\xe8\x0f\x07\xa3h\xc7l\x81\xff\x07\x9a\xaf\x17\xed\xd8\xd3\x9d\xcal\xd8\xcd:,\xbc\xa6\xab\xd4p\xa6\x8b*r\xc8\x16\n\xb1\x17\xe5\xebR\x82\x81\xa9:\xe4<\xdfH\xf3?4\xe9\x90\xd1\xbeZp\xc7\xc8\xad\x18\xe0\xf7\xea\x00\x9f\x98\x95\x9e=\xb2\xe7\xa4\xab\xf6\xad\x19\x19\xcb\xb0m\xc4,5\xe0\xf8\xaab\x19\x85IJ\xbc\x8f\"3p\x7f\xec8c}\xc2\xae\x80\x87\xe6YO\xef\x9f\x19\xfd\xbe0\\\xa1\xb8\n\xa7\x1drN(\xea:\x81\x19(\xb3\n\x1f\xf5p\xf9h9\xd7\xac&\x17\x8em\x98\xbc&{V\xef\xcc\x18\x18g\xfd\x91\x82&\xd7j\x8a,\xaa:\x9e\x17(\xb1\x02\x9b\xd3\xd4\xa8\xc2\xdeE\x18\xa5\x88\x95kl\"\x13\xf1\x9a\xec\x8f\xcf\x06\xbd\xec\xff\xad\x8a,\xd8\xaa\xe92\xaf\xec$v\xa0\xd8j\x9cN\xd4\xa8B\x0dK\xc4:\xe6\xc0\xb0\x17\x0b^\x9d\xe3\xe1\x991\xb4\xcez\x96B\x17_\"5\xc7,\xaa:\x9e\x17(\xb1\x02\x9b\xd3\xd4\xa8\xc2>\xb2Sg\xc5\x88e\xe9\xc8tz\x9c\"G\xfaY\xaf7<3\xc6\n\x8a\xcc\xd9*\xa9\xb2\xa8\xec\x14n\xa0\xd4J\x8cNS\xa7J\x05\x19WF\xae\xb1n\xf4\x00\xb7\xcc\xa6\x1cc\xa4\xe6\x96\x19W%e\x16u\x9d\xc0\x0c\x94Y\x85\xcfi\xaaT\xe1\x1f\xe6\xb1^\xc2H\xa6\xbb\x96m\x0fym\x9agc\xfd\xcc\x18\x0c\xdb\x95Y\xf2U\xd2gQ\xdbi\xfc@\xc1\x15Y\x9d\xa6U\x95*\x88\xb0\xbe>\x15:\x98\xd0\xa2\xa2y\xf6\x07\xce\x14\x8d{\xc0\xab\xa5\xc4\x95(i\xb9\xa8\xefd\x96\x07Hzun\xa7\xe9ZR\x0b!\xa0\xb3B>J\xb8\xa4\x9c\x1aY\xa7[\xfe\xa0\xa5^\x8aQk\xaef\xe1\xe14kD\xb3\xd6*\x9eh^\x90Eq\xd4\xd6b\x1eI\xe7{T:\xb5oU%\xd8{M\n\xd2\x1d\xb9.b\xbc*\xb5\xe7\xa7\xad\x82\xa8\x9a\x8bex\xdd,b\xe3\x1b\xd8\xf3N\xedy\x07{l\x1a\x8d<\x89N\xf1b\x16,\xc7\xaf\xfe\x8a\xfa\xd8\\8\xb7bbv\xf2\x99\xcf\x96\xf5X[C\\\x85\x89\xecb\xdf\xbe`5\xa8WeF\xb4\xa3\xceK\x11)l\xc1\xfe\x1e\xbb\xbdW\x08Q\xfa\xf8\x81\xc9\x90\x81\xbeI\xae\xbe\xb5r\xaf\x1aLJhh\x97\xa28\xb0\xb1\xe6\x86N\"\x87\xe6^\xfdGy\x13\x8a\xb5+\xbd\xcdX\xbb\xa8U\xa5\xb5\x8f7\xa8\xa4)\xdc\x11\x12ik\x84h\xb2ALf\x14h\xd3\xf3\xb6 :\xa6\x01\x020%\x7f\xc4fR\x9f\x9e\xb3\x15\xaa\x939\x0fC\x13\xa3\x1dr\xd6)\xaa\xe0\xf50\x98\xbb\x81\xfc\x9d^\x0ci\xa7;O\x03r\x1c$\xc7\xe5>7.\xcfCw\xaf\xe5;\xb0u,r\xd2\x98\xf7?s \x82\x97\x9ez\x86\\/=P'\x16\xf4V\xfab#\x83T\x9a\"M'A\x189i\xb5\x9bkB\xb3W\x8c\x92(\x0c\x12\x94h^\x100f\x96\"\xb9\xee\xc8\x95[\x82\x9eXN\xa3\xa7u\xc6\xaa\x96,\xec\xf8#I\xedt\x9d\x80{\x0fOeJ<\\\x07n\xe8\xac}\x140\xb9]\xe3\xd8d\xf6X\xcf\xfeH\xaa\xce\xcf>1\x9f\x0f\xcd\xcf\x93UY\xef\xbe\x8e\xfc\xc9\xf36\xb78o\xf5?\xd1Zb<\xfd\xe3\x8f\xc2g\\o\xd3\xf5\xed\xf8\xc1\x0d\xb7\x01\xec]2\xca\x18\x05.\x8a\x91;+9\x80\x9b\x7fE\xa0\x93\xbf\xb9\xcd\xa1\x8f\xc75C-\x10\x9a\x91\xa7\x1c\xa8d\x9e\xd1\xef\xf7\xd1q\x9a\xe1\xf6\x9dT\x1aW\xa9\x85\x9dEThY\xc5t\xa2\x038\xad|g\xc9\xedg\x90\xdc>\x1c%\xf0h<_\xe8\xfd\x89\xe2\xbd'\x15\x89\x9a\xd6\x14\xa9\xf3\xe7h\x13}\xd8qd\xcc\x0d\xddy\x82d\xec\xce\x95\n1'T\xba:N\xd3\x8b\xc5BxbN\xb8\xd3\xaaeSW\xf3\x1b\x0e\xed|\xe4+\x0e\xdd\x93G!\xa9\x0ej6gl\x9b\xfd\xfa\x96\xb7TP\x15F1w\xa6\x0b\xee\xfb\xcc\x95\xef<\xa2)69\xb3\x9f\xca=\xce\xecwx\xe7\x93{\x98C\xab\xe0c\xb5\x8fV(H\n\xf1\xb3\xa0\x83z@\xfd\xa24\x06\xd5/\x89ae;\xd6\x8er\xcd\x15'\x18\x1at\xf3\x96\x86\x16\xban\xb1\xdc\xcf\xba\xddAr.y\xe5-W\xc5{\xc0\x9d\xd0\x05\xd6~2\xf4\xdf\xbb\xbe\xe7\xc4a\xfe\x80|iN\xe9!\xbb\xeaHN_g\xce\xe8\x0c\xd8\x13\xd6Y\x1f\xc8\xdcQ+\xd7y\x89\xf8\xc4S\xee)\xe5\xca\x138tJZj\xe8\x8ezc\x138\xed@n2\xf2\xc6&\x0d\xf8\xd1K=\x8c\xbd\xb5\xdf\xf9\x82\xe6g\xc4\x84/\xe9\x97L\xc4P\xb6\xd9\xd4\xeb\xc5\xed\x90\xdb\xdb+r \xc4+\x88\x88eT\x8f\\\xf3\x9bE6\x83\xdaG \x8ej\x83\xa7\x95\x98s\x1a\x96\xe0P\x13\x07\x93\x8bX'n\x9e\xbe^8i\xa7XQ\xba\xbf+\x1dLzr\x13\xbe\xe7\x92\xa7\x1a-\xb5\xe2\xb8\xb5U,,N\x88D[\x94T/`\xeat\x93a\xd6\xcb\xcf\xe6T\xa0\xe0\x85\xb9\xd5l\xd2\xf8p\xe5\xb3\xe5\x89J\xe2x\x7fq\xd1\"\x9bW\x9a1\xc1x\x8e\xa37\x91\xed\xbc_'\xa9\xb7\xd8W\xe3L\x8d}\xaa7\xfei\xce\xd0\xa2\xf4\xfaQ\xdbH.\xa6,3uD\x8f\xd1\x81\x1e\x03'\xf2,\xfdEs\x18\xb5\xce\xd9\x95\x8c\xa5\xa7O\xf3\x13\xa6g\xc2\x13\xa8T\xb1\xc0\x1fO\xe8\x11\x12-\xcc\xd1\"\x8c\x91 aI\xb5\x93\x8e\x9a\x88Dm5\xdb\x11G\xc8\xb5\xbcG\x01\x07r\xeb \xec<\x0e\xd3\xfc\x87\x8e\x91t\xbc`\xe1\x05^\x8a:\xd94n\xc7g\xc4%\xcf\xc9\xf1\x14\xcd{\x12\xb8\x04x\xb1\xf7i\x9d\x15\xff/\x0e\xbe\xe6\xf3b\x1aF\xe5\x9e\x039;\x0c\xd8{\xb1y\xa6\xa9\xf6\xf3S.\xa0\xff\xfb\xbf*\xf2\x07\xb4_\xc4\xb6\x8f\x92N\xd5\xb0C\x1a\x02\xf7\xa0\xf3R\xf4\xa3\x91\xae\xe3\x80t\x1a\xea\xf9\xbf\xff\xfd_\xcf\xccO\x14\xec\xe7&\xa5N\x93W\xc3\x9c\x02I7\xfb%\x0eq\xa2\xd9\x8e\x83\xa2\xb4\xda\xac)\x87dj\xf3g\x19#\x14<\x85g~\xf5\x83\xe0ED,\xdd!\xf2!K\xcc\xb1\x17<\xa0\xf8`\xe9/\x9a\x17\x86P\xba\x15 H1\xcbc\xb5\x9d\x95y8\xba\xab\xda\xdd \xcc\x93 u\xb8\xe1\x05\xdc\x92\xb2\x06\x9d\x81O\xcf3\xa7\x83\xce\xfaU\xb7\xba\x8b\xea\xeb\xdf$\xc7\xcf6(N\xbc0\xd0\xa2\xd8^\xfa\xf6\x81\xdc\xaa\xa8\x83K\xe4\xb3\xe9?\x9a\xea\x8f?|\x94$\xf6\x12==\x82:u\xde#\xe5&\x06\xfcn\x0f\xf9@\xd8\xcc\\\xa0E>q\xd8\xb4\xcb\xc5\xf4\x82\xc6\xfe\xdd\xf56\xc4\x8bE-\xcbY)\x9dmTb\xde\xc9\x171Mt\\m\x97\xba(\xfbS\x8b\xdb\x8fv\x9d~\x11\xf6\xb2\x8bN\xba\x9ay\x1a\xb4\x9d\xb5&\xaf'\xf5\xc8\x83\x9a\xec\x19A\x93?6h&\xfcH\xbc\x8c\xed\xbd|\x05\x9as\x89\xec\x18\x05\xe9s_e8a\n\x9d\xa7A\xf6WK|\xd1\xc5\xad~\xa9\x19\x8e\xee\x9f\xae\x97\xd8s\x8c\xdc\x7fU\xef\x9b\x08\xc2\xcc\xe5p\xb8En=[uM\x8e\x90y?\x00s\xb9\xc9b\x9aer\xd7\x9fx\x04\xdf&\xc7\x0e\x1c\x84\xd9Sa\x8b\x81> \x97_e\x01i\x12\xb9\n\x0b\x0e|u\xf6:]\x85\xb1\xf7\x88\xe8\xeb\xd8\x13z\xb4\xab\xb8T\x07=\xe5\xa7?y\xe1$\xf5\x16\x89\x86\x05\x0e\xed4\xff\xb6\x0cm>p/\x9e\xa1\xdf,\x0f\x0b\x0fc\xf8\xc8e\x86-w\xaa\x80\xfe\xd9\x1f\x8fu\xd4\x03\x92[T9\xc7Q\xcb\xb8D\xa7\x0d\x9f\xe4\x8aZ\xc0\xb8\xe8\xff\xc7\x0fN4\x83r\x1f\xbcxU\x15\xd7\xb13\xadv\xb8\x03\xe2\x0c\x07l\x0b\x18\xe4\xa4\xf9_F\xdd\x95Y\xec\"\xf3\x98\xb5\x83\xb9\x18P\x0e\x0e\xca\xa2\xd3\\3\x0f\x95s\xce}\x98\xb8\xf7Y\xf6B~w\x8ef\xcc\xa8V\x06-\x0f\x80\x13}E\xcf\xfe\xb4\x89-\xbc\xf5\x0bO*\x05\xeb\xa1\x9e\xfd\xa1X\xcf\xd7i\x1a\x06\xec\xdb}\xc2u\x9a\x0d.\xbc\x02\x0bx\xd7\x0b66\xf6\xdc\x03\xbfVIV\xf6\x03\xeat\xfbI\xc7\x98\xc0O\xdb\x0e\x03\xffu\x81\xb83Fe\xd0{\xc4\xc4\x9b\xa7\x18\xac\xea\x1e:\x7f\xbc\xa7\xcc\xd9\xca\x13\xbb\x8ba\xf6\xa7\xb3\x8e\xf1\x8f\xae\x9d\xda\xe7\x9eo/\xd1\xcbd\xb3\xfcy\xe7\xe3\xc9\xdcN\xd0\xa0\x7f\xf6\xdb\xaf7\xbdo\xfb\x8b\xfe\xfc\xcbn\xed<\xea\x9e\xfd\xeb\x9d\xee\\\x86\x9bw\xa6k\xba{\xcb\x9c\xed\xad\x8d\xe3;\x9b\xd9\xfdt;{5~t}\xc7\xbb\xfe\xf5[\xf4\xedw\xf7\xd5\xdc\\\x8e\xaf\xef\xa7\xcb\xd9\xab\xe9\xbe\xf8{\xfd\xf3\xf5\xab\xe9\xf2\xfar\xb7\xfd\xfa\xfb]x\xfd\xe6v|\xfd\xa0\xeff\xfb\xbe>\xfb\xb8\\\xde\xec\xfb\xfd\x9b\x8f\xf8\xfe\xdd\xfd\xb59\xfb\xa0\xafg\xf7_\xfb\xef\xee\x9d\xed\xfb\xfa\xe7\x07\xf3\xfd\xab\xe9\xf6\xfaU\x7f\x7f\xb3\xef\xefo\xee\x97\xeb\xd9\xbd\xb3\xcf0\xb3\x0f\xf9s\xeb\xe6\x1e'\xef>\xce\xd6\xef?N\xfb\xd7\x97\xb3\xf5\xfb\xcb\x9b\xfbw\x1fj|\x9aa\x9b\x9f\x1f\xcc\xf7\x1f\xa6\xdb\xf9+\xfd\xf1\xdd\xfd\xc3\xf6}\xfe\xdf\xe5\xe3\xd7}V\x9f\x93\xbe\xbb\xbf\xee\xdd\xd4?\x17u\xbc\xfb\x90\xd5\xf1\x90=\xdb\xe5|\xef\x97\xeb\x9b\xc7\xa9U\xfd\xfc\xfe\xa3\xd3\xbf\xbe\xbc\x98\xcd>N\x97\xb3\x8f\xaf\x93\xb2m\xe9l\xdf\xdf\xdd\\\xbe\x1e\\{\xa3\x9f\x7f+\xf4\xf4\xf3O\x9d<\xaf[\x9c\xfc*b\xceN\x10j1\x8a\x90\x9d\x92\xf3ZqS\x9f{#\x84<\xa3\xd9SK|f0\x95(\xa8Y\xb9G\x11\xb2\xe3,Z(F\xa4\xfcEm\xecC\xe6w\xc0\xdd\xff\xe9\xafq\xeaE\x18\xfd\xabJ\xfeZ\xd4\xc15\x0b\xf4V\x80\xd1\x9f\xde]\xe9\xbd\x07.\x89\xd8\xcbg\xd8\xa3\xee\x94 8\x19#\x9d\xbd\xe0\xa5\x94\xdd}\xea\x99\xa4\xfch\xe1?\xb3%\xf5/\xc8\xb7=\xfc\xaf3A\xe9\xc2\xc3HX\x18\xd9I\xb2\x0dcW\x08H\x90\x1d;+aq\xb6\x1e\xa3\x0b\xb3'v\x8clRE:\x91l\xa2\x1dh\xc4\x0c\x8f\xc4\x86\xa1;\xce\xfe\xb4\x0d\x8f\x8b\x85\x9a\x15\xff\xf3\xd5\xd5\xbct&\xdf\x8a\x91\x1b\xbb\xeaO\xd2V\xb4\x81\xea\xd6\xb4\x01\xcbV\xb5\xc1\xf2\xd6\x81\xa0\xaa\x95\x7f\xca0\x00d\x8ar6\x07C\x7fq6\xd6_\x00Y\xb6:\xa5k\xba?jF\xb4\xcbF]0\xe5K\x96\xff\xbb\xa7\xbf8\x1b\xb5\xf2\xeb\xc9\xd9U\xc5\xff6\xf5\x17g\x96\xfe\xe2l\xd8\xcaQ\xeb\xb7HX\x95\xff\xbb\xaf\xbf8\x1b\xb4\xf2kaWs#3k\xff\xab\xd1g\xd1(8\x1403\x07y|\xbc\xd9\x9a\xeaQ\xb7\xe8\xf9\xd5\x137l\x92\x01u\xcb\xbb(\x8e:-\x00\xccMUK\x8aw|\x1d\xf8\xd0\x17\xb8\x1fU\x0f\x11\xce:\xe6\x0f%\x13[r\xe4d\xc2\x9c\xd5\x88QN\"P\xc0\xb3\x9f\xd9rV\xc8y\x98\x87\xbb\x03\x19\xf5\x97+Y`mD\xeez\x08\x1eW*\xd5\xb3?peOx\xfd\x86\x80aD\x1dD\xef\xeb:\xf1\xd1\x8d\xc2\x0e\xe4y\xb9J\xf3,HU\x8bP\xba\xae\x16\x85\x98L\xaag\xff\xaa\x9b\xca/\xa5\xa5t?\xe7\x8a\xfa{\xb7xC\x8f\xf0\x8dJt.K#\xf7\xcb\xf27/Tn7 \xcf\x91\x8f\xca\xedn2\x0ef\xcf|\xd0[Q\x8c\xff\xa1Q\xf6G\xf4\xb2$=_\x02T i!\x97\x08\"\xde\xf1\x90\xf7\x83\xfa\xa7\x13U\xd7\xfe\xca_\x85WFKk;\xcf\x7fB.e0^Y\xf9\x1a\xf8/\xc0\"\xd8Y\xd9q\x82\xd2_\xd6\xe9B\x1b\x9d\xbd0_%\x9be'\xb7\xe0/?\x18\xfa\x0f\x9d\xc2\x82\xbf\xfc0\xfa\xa1\xb3\xf1\xd0\xf6\"\xdc\xfd\xf2\x83\xd9\x19v\x0c\xbd3\xfa\xa1\xb3\xf3q\x90\xfc\xf2\xc3*M\xa3\xf3\x97/\xb7\xdbmwkv\xc3x\xf9\xb2\xa7\xebzV\xc7\x0f/\xcc\xab\x17\xe6\xab\xc8NW\x9d\x85\x87\xf1/?\xbc\xe8\x99}\xa3?\xec_\xfd\x90?\xd0\xe25F\xbf\xfc\x806(\x08]\xf7\x87\x8e\xfb\xcb\x0f\xb3A\xd74\xcd\x8ea\xbd3;\x86\xd1\x1d\x0c\x86\xd8\xc8\x9eh\xd9\xbf\xfdN\xaf\xd3{W<\xce\xc40;\xa3\xac\xec\xf1\x87\x97EMY\xa5/\xcc\xab\xbf\xfc\xd4\xb1\xf4\x17\xcdZ\x93\xd6\xa8\xeb\xd98\\j\xeb\x1d\xf35\x9d \xf9\xa2U\xea\x1e\x8b^\x1dV\xaa^\x03,`\xd8\xe9f\xbaw\xe30\x02\xb8K\x19\x8an\xc1\x8c~\x12V\xe5\x87\xae\x8d\xa9z\xea-m\xae!\xd4\xfe63)\x16\xbf\x9a\xe5\xdcP\x7f\xf3\xc3\xe2\x86\xe2\x937\xf8\xf9\x05JuY\xafm\x81\"\xc8\x07\xe8\xd1\xaeS\x9c\x9c\x92\xbe\x04Z\x8ckUj\xb5\xb1&;\x06g\xf5\xc90\x82O*J\xd8\xd2\x17U\x80{6U\x9e\x9c\x9fk\x95V\xb8\xd2\xba\xe9K>#f\x81=h\x16\xd8O8\x9a\x04\xd5\xff\x94\xd7\xce\xd5\xb1J\xaf8/':*[:\x16\xe96'\x9d\xffQmM\xa7\xeb\xe00AZ\xfe\xf8\x88\x94\xfc\xf3e\x9bd\xc2\xad\xc8\x0f\x83\xf7\xd8c?\x03\xf2\x0d^\x8d\xe8\\\x1eN\xb4Ir\x82[\xf8\xa1+O\xef\x98\xfa\x91g\xea\x85\xb5t\xba\xc4}\xd9$\xb2\x99\x1b\x11<&u\xabc\xb9\xb6\x9e\xfd\x11\x9d\xcc\xe5(\xff\x9e\xba\xcc\x8dK\xf5w\x0f\xe5\xcc\xb44\\.1b\x8fh\xc1\x81\xd7@\x14x\x95\xa6\xccF\xa9N\xd7D\xbe\xc2\xebo\xb8\xe1]\xf8*`u\xe4\xa9\x08\xe8C\x0e$\x03~**\xcf\xf1\x8cu\x17-\x81\xf3=\xe5s\x8eN\x0bc/\xcf\xa6\xe9/\xb2(a\"*\x10\x1b\xaa\xeb\x84\x18\xdbQ\x82\\\xf1\xa9#\x81P\xf9c1\xe7\xf2\xac\x1et\x02\x8d\xdd\xc0\x12\\\xa1=*\xd2k\x0f\xe0\xaa`\xb0\xd7o\x82\xc1\xec\xe7:\x1a\xcc\x83\xea~\xa7\xd7'c\xbd,\x8c3\xf4\xce\xe0\xdd\xa8k\x8d;\xc3n\xdf\xe8\x18f\xd7\x18v\x8c\x1e\xd6\xfa]k\xd4\xe9w\xad\xf1;C\xef\x18#<\xd0\x06m\xf1\x1b\xb7W\x90\x05/\x90\x16\xef\xd7~\xa4\xa5a\xfe60`\xe1\";\x01\xc43\x10\xbfz\x8a:;\xa8u\xfb\\g\x03-\\\xdc\x87\x97\x1f\xe3$\xa0\xd5\xbb\xa5\x8aG+/H\x0f\xc4!\xbb\xfcG\xf6cc\x04T \xab\xd1\x1d!\x7f\xc2\x9f\xe3\xab\x86\xff\xae\x81\xfcN~\x14\x08\xf8\x1eo9<\xaa\x04od\xb85\x84\x1c\x9e\xb8D\x95\xad\xfb\x99\xc3F\xe5\xc9\xb2\x02\x9a\xd4W0ub\xf2\x97\xbdR\x9a\x97M\xc2\xbdz\xc1)1{\xeb\xfc\x0b\x0f`\x9a,\x96b\"7Qh\"\x7f\xef5\xcd\x9e \xd1\x9e\xe5-\x86'\x85Ap\xb2\xe8Y\xdf\x13.\x0f\"\x06:w\xbc\x86S\xd5\x13_\xa3\x0d\xf0;\xe9\xcd\xde\x1c\x9f\xe3\xde_\xce\x92[\xac\x07\x90\xddEo\xdd\xf6\x02\x0e\x0b05\xa8\x0d\x99\xf9\xeaQ\xda\x17*F\xc0e\x97\xfa\x82\xc3Q\x1f\x1c\x02\xde\xc6\xa7>\xd8\xb0\xdf\xeej\x91\xb5\xc5F\xc3\xe3\x98\xd1Q \xf1\xda\x90\xa3\xb8\xe4\xa7\x83\x18&\xad#\x12\xc7\xa6|\x90\x08\x0cLM\x0b\xa3\xfa\nVf\xab\xe6\x15;\x96B\x85\xf3pw\x90\x1e\xdai`T\xc2\x19\x8ca\x95\xcd\xcc\xbe\xcc\xa7\xae\xe4\x08\xb7\xe6Ni\xd5L\xba\xd0\x0b\x87,\xf1\xa4\xce\xf4Ty\xcf\xb4\xf4\xec\x0f\xc4\xac\xa9U\xdb\xdaq\xe0\x05K\x903\xb7|\xab^\xdcR\xddn\x17\x1fV\xe4_Q\x97\x8du\x7f\xcf\xfe)\xa7\xe5\xee<\xb6\x1d\xa4\xe5\xabZjF\x84\xceBEq\x18i\x81\xed\xb3\x87\xb8\xa9\x15I#\x1d@\x9c\xfbx\xa5\x18\xcb\x06\x10(X\xfb\xb2\x0b\x8f9(\x0b\xb1\xed\xf4 \x9e4\xba \x8a7(\x16\\\x1f{\xb6\x0bYd%\xa2\xebW\xf47f@\x06\x9dU\xbf[\x9d%\xaf\xee\x1e\x94\x01E\x8fUcE\x92\xdas\x8c:i\xf55\x16So\x01\xba\"\x9b\xd5\xd2eQ \xf8\x85\xdb u\x1f\x82H\x82i\xc4\x9dNy\xe5\xf0\xeb\xfaKWik\xa3\xdb\xe1^\x0eE\x1c|\x87I\xbbN\xe8G\xeb\xack\xadc\\\x0f\xcd\xfc\x91~\x10_\x1cC\x07\xf5E\x9c\xaa\x9d\x88&l\xce\xf5\x978\x9c\xdbX+\xea\xfa\x8f\xbe%*\x90\xb4\xd6S9\x00\x92g\x9c{\xd50$~=S\xf5\xaa/\xc0\xdd\xcb1C\xe0\xed\xb9\x03@/\xc3\xa12nZ\xb5>?\xaf~\xe0\x99\x94\xc3]\x9a\x9fLJ\xe3\xac?\xd4\xbcX\xafg?\xd6,`\xc0\xf8tu\"\xa5O\xbe\xe2\xab\xd8\x84\x82ZU\xde\xefN2IZ\x12dp\xa7|j\xda\xac\xec\\\x80B\xaa7\xb7)\xe9E\xa2\x91fl\xe9Q{\x0f\x03\xe2\xe6 \xf0V\x9f\x92m\xfe\xea\xc6\x9c\xed\x99\xact\xd5vz\x8cI%\x13\xd7b\xf2c\xf2\x8a\xeb\xb7\x9e\xda\xa9Bf\xae\xaa\xbe\x8c\x93\xb0/\x93\xe0\xce\x02\xc1\x1f\xd52\xf9\x17>Ix\xd2\x97\xcdJ\x86B\xfa?\xfe\xc8grI\xc4\xd1\xd7O\x99\x14\x99\n\xba1\xfa\xef\xb5\x17W\xaf\xc7\x11\x0d\x12\"*\xf86+\x1c\xe0i\x03\xfasCM\xca\xac\xe2\xf6\x97R\xf0\xf2e\xd0V1\n\x0e\xd8o\xae6\xb2\xa0]\x8a\x82\xc4\x0b\x99l2\x81\xf0\x14^\x9csLW\xe5?\xccBT&|m\xfe\x13+\x8d\x91+V\x81\x1f\xa5\xfb?66^\xa3?\xf8\xc4\xb5ID\x03\xe5\xda\x91\x8b\x0e\xb8\x17\x0cJ\xb9\x97\x93=\x15L\x0e\x8f\xe2\xd0\xad\xee%5\xc1<\xffjH\x8c\x80\xab\xee\xfc\xa6^\x1aFs\x9b\xfeb\x0dpE\xa7|s\x0eDZ\xfd\x17~\xcd`\x89\xb1O\xdb%{r\xbe\x07\x14\x98:U\x95\xe7\x06\xd9!U%WB\x8eb\xf9^3\xbbIR\x1c\xb9\x90\xaf_\xd8cD\x95\x84E\xca\x06\xd8\xcc\xe2#\xd1\xca\n\xf5+J\xd61\xae_\xd3\xf7d\xad\xe7m5\x9b\xd6\x9b\x93\xea \x01\xca/r\xa2\xc0e\xaevfO\xd8{\x9dy)\n\\\xf56\xb4\xcc$\xa5\x86\xf8seV\x7f\xb8\x80\xbeJV]h\x12\xdf*\x91\x8b\xd3-f!\xed\xf4\xb3WOw\xeb 8\x99\x0e\xa8\xe3p\xa76\xa9\xbcgG\xcf\x9aJ\x1d\x82\xf6\xd2<\xc0\x92\xbf\x19\xf2\x18\xa1\x8a\xa9\x9f\x93\xa3\xd7\xc8\xd1\x9b\x94\xff!\x94#t\x0b\xea\x04$\xb0\xee(\xcf\x0dR\xbf\x1f#<\xf5\xb4\xbc\xd5$\x89D\xc88\xae_\x1e\xf2\x90\x9c\xe1$\xae\xd5Q\x8b\xa8\xb2qG\x0e:^\xb0\x08\xeb;\x1d\xc0K(\xb3\xf2\xce*\xbf\xee\xd7\xf5m/`\x97urt\x87=\xc4\n\xc0\xb1w\xc6?\x8c\x80g\xc5z\x89\xe0w\xda+\x0f\x0b\x19\x0d\xa0\x02\xf6\xf3\xc8\xc5C\x13z\xd8\x87\x1eZ\xc7\xbf9\xa0\xa0,\xdenU\xad\x8f\x8b\xdbb\xea\xe9C\xdd:\xf2\xa4.\xf4\xee\xf7\\\x0e\x9b\xd5\xeeQ\x1b\x11-\xb6\x80\xae\xc9\x16\xb5\xd2\xef\xbc3\x16\x83\xb1\x03xay7\x9f\xdc\x9f\x02\x98u\xe7v\x824\xe0\xe80\xa9\x0b\x93:\xdbZ\xcf#G)Qh\xcc.\x9bF5\x07O{w/\xc1\x95\xff2\xaad\xc1`\xb5\x1c\xae(\xd6\xef\xe4\xcb\x9d{\xc5\xc0\xc2.\x8d\x93u\xc4\x1dd\xb5\x86\xcc\x01\xb7\xa1;\xea\x8f!\xf3\x92\x92\xe7\xaf\xdbST\x057T\xd9\xebt\xa5\xcd\xd3\xe0i\x01\x0e\xbd6\x7f\x8e\x17U\xc8\xa5,\xeeK\xbba\x80\x0e\xf2\x14rN\xf8\xa4\xa6)M\xd4\xcf\x1a\xbb\x912w\x88\xd7\x040)\xd0&4\xd1\x9a\x97\xe3\x01\x9c\xc0\xe4\xa1\xc1\xdeo(\xd2\x89-\xa7\xe6d\xdc\xe1M)a\x1dl8E3#v\xcd\xcbc\xffV\xb4\x13\x1d\xb7bH\xeb\x8f\x8e\xf3\xc1\xbe\x94\xae\xf5&\x9a\x84\xa0\x08\xa3\xd9\x1b\x90R)Q\x1c\x87q\xc2\x0e\xa8\xd4\x06\x18?Y=y0M\x9c0BIg\xd5{\xfa\x94\x9f\xb3\xd2\\\xb4\x90\x1f\x8b(\x1b\xaa1V\xe9\xc1\x0eXu$\xe2\x92\x9acc\xf4)b^\x80E>\xe5C\xd2\xea\xfaZ\xebd/\xf9&\x15-v\xf9;\xdb\nx\xd3\x0b$e\x8fl\x08\xdf=\x7f\x92]\x05U&\xc4\x8b\x9f\xc0M/\x86\xae\x882\x9f>P\x9e\xb4\x06S\x90\x8c\xd6a\x8f\xba\xac\xa44P+\xb99t\xc7\xb1\xf0\xb7\x03x9\xad\xbc\x971\x02\xeej\x8c~\x9a4\xaf\xc6\x02\xdfAV\x00\x0d\x9e\xd6hH\x0d\xfav\xe0\xff\xb4,\x94\x9d\xee\xf2kaq\xb7\no\x9aTZ\xe5\x1d\xf9J\xef\xff\xbc\xfc\xdb_;I\xb8\x8e\x1d4\xb3\xa3\xc8\x0b\x96\x9f\xee\xde\xfd\xd20\xea:I\xd2\xf5\xed\xe8o/\xff\x7f\x01\x00\x00\xff\xffPK\x07\x08_;\x94/\xe8Y\x00\x00\xa8X\x02\x00PK\x03\x04\x14\x00\x08\x00\x08\x00\x00\x00!(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00 \x00swagger/swagger.yamlUT\x05\x00\x01\x80Cm8\xec\xbd\xeb\x92\x1c7\x92&\xfa\x9fO\xe1K\xb33$\xbb\x8bIQ\xea\xd9\x1f\xdc\xe5\xd8R$\xa5\xa91]\xea\xf0\xb2\xfdc\xac-\x89\x8c@fb\x19\x19H\x05\x10U\xccQ\xb7\xd9y\x8d\xf3z\xe7I\x8e\xc1\x01\xc4-\x03\x08DVR,\xb5\xdc\xad\xdbT\xcc\x88p\x00\x8e\x9b\xc3\xbf\x0f\x80\xbaa\x9b\x0d\xaf\x9e\xc1\x83\xaf\x17_=\xb8'\xca\xb5|v\x0f@\x0b]\xf0g\xf0\xf6\xb0\xdboey\x80\xc7\xb0ys\xf5\x12\xbeg\x9a\xdf\xb0\x03\xe42S\xf7\x00r\xae\xb2J\xec\xb5\x90\xe53x\x01o^\xbf}\x07\xa2\xd4\xbcZ\xb3\x8c\xc3ZV\xa04\xd3\x1c~\xa9y%\xb8\xba\x80\x82oXv\x00]\xb1R\xb1\xcc|g\xd4\\\xf3J\xa1\x8a\xa7\x8b\xaf\x16_\xdd\xdb3\xbdU&\x13O\x94K\xfe \xdf\xcbl\xab\x9e\\?]q\xcd\x9e>\xc9\xea\xaa\xe2\xa5^\xe2\xcf\xe6M\x80\x0d\xd7\xf6\x0f\x00U\xefv\xac:<\x83\x97\xf6\xb5\xd7\xe6-\xd8W\xf2Z\xe4\x1c\xdc\xb7\x80\xdf\x82\\\x83\xda\xf3L\xac\x05\xcfA\xe4\xbc\xd4\xe6\xcf\xcai\x92{^1\x93\xcb\xcb\xbc\xaf\xcd=\xaf\xb8\xda\xcbRq\xe5\x93\x06x\xf0\xf5W_=h\xffyd#Ug\x19Wj]\x17\xcd\xd7\x8b\xce\xdb*\xdb\xf2\x1d\xeb~\x0f\xa0\x0f{\xfe\x0c\xe4\xea\xff\xf0L\xf7\x1e\xec+\x93A-\xba\xe9[\x191PW\xacF\xa5+Qn\x8e\x1e\xaee\xb5c\xfa\x99\xa9\xc8\xff\xfe\x97\xe6i\xce\xd7\xac.t\xb8d%\xd4%\xff\xb4\xe7\x99\xe69\xf0\xaa\x92\xd5\xe7, &0\xab`\x99\xccy\xe8\x03\xd3f7M\xad\xb7\xd21\xc57_\x0f\x9e\xee\xb8Rl\x13T9\x9a\x87\x9ck&\x8a\xa3\xc2\xf8oXU\xb1\xc3\xd13\xa1\xf9n\xe4\x93\x88\xd9\xac\x84\x8d\xd7~\xbe\xac\xabb\xfc\xe9D#1r\xcd\x8az\xa4\xfcV&\xbfn\xad\xbb:h\xee^\xd9\xb3\x8a\xed\xb8\xe6U'\xcf\x8f\xa1d;SI\xc3\xdeiD\x94\xcfpt\xe9\x9a\xad\xe2\xbf\xd4\xa2\xe2\xf93X\xb3B\xf1\xce\x93\x91Li\xb6\xe9\xa5\xf5\x7f;e\xc1\xb1\xc7\xfe3<\xe8\xe0\xf8pY\xae\xa5j\x86\x9c\xaa.KQn\xec\x90\x83\x8f\xdcG\xbd\xf1\xe5\xf5\xf0\xe9\x9d\x1d]\xba&\xe8\xca\x97h\xc5m\xab\xb8EK\xecY\xf1\xdf\x1e\x07\xde\xea&\x06B\x01\x83\xba\x14\xbf\xd4\x1c*\xbe\xe6\x15/3\x0eZ\x82\xde\ne\xda\xb1\x16Y]\xb0\xe31\xc5\x8b\x16;^-F\x1f+\xcd*\xbd4/\xdc\xa2L\xbew\xe5L\xf3\xc7F\xd7-\xcb\xdef\xca\x94]o9\x96\x00\x98\x86\x9b\xad\xc8\xb6\xcd/\x15\xacE\xa54\xf0\xeb\x91\x01\xd5\x8b\x16\xd9G\xb5\xb8\x17|~\xb9\x1e\xa4'JL`]\xeb\xba\xe2\x17\xf8\xb7\x9d\xc0oDQ@)5\xac\xf8F\x94A\x85u\xa9E\x81\x9f\xa1\xdep\xca&\xc1\xf1Z\xc9k\xdbWoQ'\xa9\xb6\xf6I\xf5,-JXq}\xc3y\xe9\x8a>i\xc4\x12d\x95\x9b\n\x91\x15Nqe\xcesX\xf1-\xbb\x16\xb22mu\xc5a\xc7\xf5E\x93^\xb8\xf2\xb7\xb2.\xf2pR+\x0e\x9b\x8a3\xcd+\xd0[f\xeb*\xdb2Q*h|\x82U!\xb3\x8f\xce\xbeAE\xaf|\xc9w\xb52u\n\xa5,\x1f\xff\x17\xaf\xe4x\x9dL\xf89V\x12*f\xdc\xe7\xe9Kj\xe5\xf5\xf2\xe4k\xb0\xefu\x96\xf5n\xc5\xab\x0b\xc0z\x01\xa9\xb7\x91\xaer#\xab\\]\x84-\xb6\x957\xb0c\xe5\x01-\xab`\xcbT\xa7+>0m\x84\xe7\x0f\"\x16\x7fg\xba\x15\xf6X\xf3.<\xece\xff\xf9\xd3G\xa6\x049_\x8b\x92\xe7\xc0T\xa4\xe34zlE\xdfl\xa5\xe2\xf6o\xdf\x89\x87M$\xa8\xab\x99\n;\xa3@B\x03X\xde\xc9\x813\x94E\xa7`\xc5U;.\xd9\x9e.\xd7Q\xeb\xf8\xb6\x84U\x1c\xae\x10\\\x88]\xb3b\x81U\xec\xffe\xea\xe1a(K\x91f\x16,\xc5\x9f\x9b\xd1\xe3o\xf0\xd7-/\xdb\xd6\x17\x1f\xfd/\xecL)\x14(\xaeA\xcb\x13\x92~\x0e\x05ScY\x9a\x1eXeY\x1c@\x96|\xca\x88\xd8'\xcc\xf8\xc9`#\xaey\xd9u\x012V\x82\xcc\xb2\xba\x82=\xaflK_\xdc\x0b\xab\xfa\xe9\xe7w\xaf\xff\x1b\xd6E\xb0@;\xb3\xb4\x16\xd7\xbc\xda\x84k_\x89M)\xd6\"c\xa5.\x0e\xb0\xae\xe4\x0e\x1bKx\xfc`E\xf18k\xc6\xde\xce\xd4\xb9\xe2\x1bV\x02\xd3\x0b\xf8\xeb\xe0\x1d\xb9\x0e\xaa\xb3\x9f\xda\xc6j\xb2\xbb\x8a$\xfdo\xff\x16,\xea\x02\xde\xd6\xfb\xbdT\x93\xad|\xac\xd6\x9f~\x15i\xa8M\x15?\x87\x7fmRi'$\xd8H\xae@\xae\xd7\x85(\xd1{\xd1\xcf\x9f\xfe\xe5\"\xa8\x8d\x959d\xd2\x0c\xac+\x96}4\xcdF\x94\x91\x12\xa3\xbeo\xbe\xba\xc0\xef\xf6\x95\xcc\xeb\xcc|j,\xab\xccC\xe3\x14\x1d\xbc\x97.\xaey\xc4\xdd0\xf2P?\xff\xe6\xe9\x05|\xf3\xf5\x05p\x9d-\x1e\x85\x13\xfe\x136,\x93\xb6\x1f~\x8d_\xe4\xc6\x94\xa6\xc6MC~\xf8\xf4\xab\x0bx\xfa\xaf\x7fK\xd0\xf5tZ\xd7\xbf^\xc0\xd7_\xa5\xe8\xfazR\xd7\xd7_]\xc0\xd7I\xf9\xfafZ\xd7\xbf^\xc07I\xf9\xfa\xcb\xa4.S\x9d\xdfL\xe7\xebO\x7f\xd2\xcf\xbf\xf9\xef\x7f\xfa\xd3\xb4\xbe\x7f\xbd\x80\xbf|\xf5\xb7Qu\xb6\xb1g\xd2\xb8\xab\xe5\xc6\xb6z\x9e\xc7'\xb3\x95\x94\x05g!\xdf-u\x96\x1aO\xd9.s\\\nf\xc4f\x1aD\x99\x8b\x8ci\xae\xc2C\xce\x96\x1b\x97\x06\x07\xf8\xb0\xd9\xbc\x13k\xfc\x14\xe3\xb5\xd8\xe1\xe8\xc0u\xfaL\xbf\xe5b\xb3\xd5g\x98\xebc~\x9f\x0b\x85\xce\x9c\xe1m\xd6\xbc\xfbg\xdb\x84\xfb\xcd/\x99\xc2\x93\xce\xd0a\x0c\x1b\xd1\xd5\xd3\x02\x1e\xbe\x0b%\xd3q\x07\xcdt\x19\x9d\xeax\xfeh\xe4y\xaf\x0d\xfd}\xdc\x0e\xad\xcb\x86MF\xe9\xaa\xce\xb4m0}?'g\x9a\xc1F\x8arc\xac.G\x951\x97_\xefw\xae\x0e\xf8\xe9'\x17|\x81\x9d\xcc\xeb\xa23nRpr\xf0\x94\x82\x93\x9f!89\x1d*\xdc\xb0\xdd\xae\x05)\xd6\xbb\xdd2\x93e\xc6K]1\xcd\xf3\xe5^\xcabY\x88\xf2c$|\xd8\xe9^/\xbf\xfb\xf1\xc7\x97\x9d\xef\xaf\xa4,~0_C\xc5u]\x95\nvb\xe3\x9c\x1d\xd4\xda\xc4\x07\xcc\x97\xc6\x05iUu\xd4\x80\xc9\x86\xf2\xcd\xbe\x0fq\x84Rt/\xdf\xd9\x88dc\x88e\xc53\xb3`\x0e\xb5\xe2@\x83\x8c7\xc7\x15+X\x99\xf1j\xa9e\xbcB\x87\x12\xeb9\x10\xeb=0\x95a+S\xbd\x08\xba\x99\xc7\xcc\x8a\xa03\x01i\xfd\x02:}\xa3\x8eM\x9b\x00Y\xf1[\xa7\x99\xea\xec|\xebl\xf2N\x8e\xb5v7\xed\xe04&\xcaM\xc1\xb1w\x85\x0d\xec:\x9d\x7f;\x12%s\xc9b\x0f\xc4%B\x93B\xb7YA!~\xa9E.\xf4\x01_\x0c/\x0f\xde\x99\x05\xb4\xc9\x9b\x99sk\xc5\xf3\xe82\x9a\x15\x85\xbc1\xde\\/\x17Z\xba\xce\x83\xc1\xeb6?\xac\x94\xa5\xc8X\x11T\xb7\xae\x8b\x02*Vn\"\x05\x8e\x94\n\xf6R \x8c9\x06\xbf~1\xc8\xaaYo\xafle`Q\x81\xc1\x8e}\x12\xbbz\x07r\x8d\x8b\xf9,\x9c]\xa3\xe1\xc2\xd9<+\x1a\x85\xd1\x90f$\xa5^\xce\x8ek(\xe63\xfe\xe8\xc7\xaa7v\xa82V\xd2\x18*e\x85\x0dQ\xf7\x07\xf3&\xa9\xee\x80\xdeJ\xd7\xc6c\xa5\xc1\xd1\xbe\xf9\x9d<\xa5\xc1S\xf2\x94\xd2\x87\xcd\x17\xf0\xfe\xcd\x0fO*\xaed]e\x1caY\xeb\xe1[\x1c\xac8\xb4\xd11\x17\x84>\xec\xa3\xc1$\x8c{\xf2J\xb0B\xfc\xd7x\xeb\xb5\xb2\xaf\xa4\x96\x99,`U\xaf\xd7\xbc\xf2\x95\xb6\xb0#\xa0-\x9bE\x0c\\_\x02\x16^\xe7\x14\xdc\xac\x82\x82\x8fM\xef\xbe\xff\xe4>d[V\xb1L\xf3\xca\xc6O\xcd\xd2 \x14\xdf\xec\xcc\xa2\xcc\x06h\x8d5\x1e(\xd83\x1d^\xcaa\xa6*\xbe\xaf\xb8\xe2e\x0cvBp\xab(\x0e\xf0K\xcd\nKGA\xfb\xba\xa4\xd0\x92\x0f\x99\x02\x11\x19\xb2>\x98\xac<\xd9H\xb9)\xf8\x02m\xb6\xaa\xd7\x0b\x0f\xa9|xdK\x82j-\xa0c\x06\xb9\x08h\xc6\xdai\x00\xfbP8\xe5\x87|\xb1Y\\\x18\xd3\xe6\xa6*\xee/\xee\x9b)\xa9\x94\x1aX\x96\xf1\xbd\xe6\xf9\xa3Xh\xf4\xb2\x84\xbd1\xb6\xc8\xf8\x05h\xcevf:\xab\x991\xc7\xde8t\xbb\xbd(0\x84-\xedjZ\x94\xac\x1a\xf7\xa8\xc0Nth/e\x1b\xa7\xde\xf2C$\n\x81c\x1d\x08m\x86\xf9Zq\x8f4\x9a\x86\xc4?aU\xbf(\x0f\x0b\xf8wy\xc3\xafyua\x0c\x11T\xf6\xfe\xcd\x0f\xca-\xbak\x1bt\x8c\xac\xdc\xcd\x08\xca\xe1\xc3V\xeb\xfd\x87\x0b\xfb_\xf5\x011\xa1R\xba\xa7\x17vVc%H\xec\x9d\xc6\"a\x85\\C\xbd7k\xe7\xc3>\x96.\xaf\xae-\x06\xa3a\xc7\xf6\xca6-\xcc\xb9\xf1\x05l\xcf\xb2.\x10\xce\xcf\nX8\xd2\xb3\x96\xc6\xa9P\xcf\"u\xfb'\xb8\\\xb7%2\xcd\xc2\xd1\"\xf2\xa6\xd0\x182P\xaa\xde\xf1<\x02T\xfd\xc9LN\xff\xfe\xee\xdd\x15|\xff\xfa\x1d\xc8\xd2wA\xdb\xc7\x0e\x82\x179\xb0\xe0\xd7\xff9\xec\x16\xef\x0e{\xfe\xb7\xff\x1c\x0f\xc3Y\xc1%$\xc2\xae\xd8\xde\xdc4\x825\xe4B\xbb\xc0J;\x85\x85}\xb4?\xc1\x8b\xfd\xbe\x10\x19s\xb6\xac\xb8u\xc4\xac_\x91\xb1\xcc\x8c-R~\xac\xf7f\x9e\xad\x0b\xad`\xc5\x14\x1f\x9b\xe9\xad\xc88t\x86\x8d\x10\xf3\xb8e\xd7\xd8\x04w\x9d>\x94\xdbN\xc4|\x91\xcc\xdf\xd7R\xe4\xc0\xcap\xc3\x02\x97A\x1c>*\xbe\x96\x15\xbf\xf0\n\x8c^\xa6\xc5J\x14\xc6\xb1+9\xcf\x95\x03\x96q\xc8\xab\xae#%\xc1\xb2d[\xe3B\xe2G\xd8g\x17\xf0\xf0\xbd\xe2\x9e\x12h\xacd\x9a\xa7\x19\xb3l\xfbd%\x8b\x80#\x00\xab\x8a\xb3\x8ff\x0cr\x8acA\xf3\x9f\xa4\xe6\xcf,\x0c\xb5\xae\xcb\xcc\xf60S\x0e7v\xb9\x18\\q\x00v\xcdD\xc1VEt\xb84\xedQ\xae\xd7\"\x13\xac\x98\x98\xcbV\xf5\x1a*nf\"n\x9dR\xa1}\xa2\xe8\xc7\xafe\xd5\xf6\xcb\xa0*\xa4< \xb3\xe8F\xe8H\x90\xd0hZ\xd8\xf6\xcf\xf6B-2\xb9[\xc0\x0be\xc6\xb6\x1f\xd9\x01\xbe\xfe\xea\xebo\x90Ra\xdaf\xc5Mg\xbd\x119\x8f\x0c5v\xada\xf2gG\x93p\xd2b\xb7/\xb8\x993}\xfb/s\xa3\x7f_\xb0\x12\xeb\xb3ynF\xba\xd8\x14\xf1\x16\x87\x0fe\xc1r\x8b \x0f\x86Nxh\x8c\xb6\xe5\xc0w{}p\xe3\xcdX8\xd3\xca\x0e\x83\xa41\xf8\nKi,;(\x85g\x8cf\xa0\xf8\x8e\x95Zdj\xbc\xff\x7f\x86\x18\xd4PR]\xb7\x1f\x1d\x9d\x82\x99L\x89\xbc\xe3u\x1d9W\xce\xe3`+y\x1dA!\x1b\xd2,6\xae\x91\xf7Rr\xf6\xe1Ey\xf8\xd0Y\xff\x94\xc0\xaa\x95\xd0\x95\x19Y\xc29\x1cU\xe5'.VH\xd7\x1f\x80\x8dW\xad\x992F\xe2\xd2\xceW\x1d\xf8\xa4\x8d\xab\x19h\x9aW\xbe7\x17b\x85\xd9v\x93\x9b\x02U\xef\xf7\xb2B\xb7b\xcf\xb2\x8fO\xea\xd2\xfc\xc78\x13\xb6]\x8cwk\xcfs\nz[r\x0d\xb5\xb6\xa3\xad\x1f\xb3\x94\x19\xedY\x9e\x0b;\x80\xc1\x86\x97\xdc.\xb9w\\oe\xaeb\x84\x02\x93\x1f[\x85\xe3\xe9\xbd\xfe\xc4L\xe3\x87\xa7\xcf\xe0\xca\xe4\xdft`W\x14\xd6\x18]\x94\xf0\xf2\xcf\x7f\x8e\xcc\xdd\xdfI k)\xe19,\x16\x8b\xff\x11|\xcdd\x86\x95\x87\xf0\x0b\xac<,L6\xbe\xab\xe4\xee\xe1Z\xcaG\xe1W\x17\x8b\xf0\xa4,\xd6\xf0\xd0\xa8z\x8f\x05y'\x1f\xfe\x8b\xd1\xf5\x08~\x8dL,1}\xff\x88\xdb\xee\xeb \xdb\xfd\x07\xbbfg3\x1ey\xf2\xc44\xeb\xb4<\xbee;n\xfc\xb9\x176\xb7\x1b\xae_\xd98\xc7e\xa94+3\xfe\xf0\xd1)\x99\x1f\xd5\x13+\xcb\xf8#\xdf\x0c\xbe\x99h\x06W\x07\xbd\x95e\xa4!\xd8L~'\xe5\xc3\xc5b\x11\x9e\xd9\x9aF\xf00\xfa\x0ev$l\"\xa7\xb6\x10\xa3\xe4\xd2\x9a\xfc\xd5\xeb\xb7/\xdf\\^\xbd\xfb\xf9\xcd\xa3X\xb0\xb7\xedt\xf1\x84m\xd2qs\xfee\xc2\x9c\xdfGb\xa1h\xcag\xcf\xe1_\xf6\xab\xc5wR\xfe\xbaX,\xc2-\xd1\xe4\xfa\xc2\xf8\xf9\xe6\x0bV\x1e\xf6\xab\xc5O\xfcf\xa2\x00b\x8d_\xfc\xb7\xe7P\x8a\"\xda\xf4\xa2V\x8et\x90\xf8w\x83\x02F\xd4\xb8\x9c\xda\xb2-\xde\x97;V\xa9-+\xdeI;|\x9c\xab\x18\xa3\xcf\xdem9\xce\x8e\xcdL\xe5\xd7\x86\xb0:\xb4\x9e\xb2\x9f[\x91S\xb1\x1awK]`\xd38m\xe3I=\x18\xf1\x82\x9f\xac\xeb\xa2X\xe0\x03\xb3\xc2x\x00\xac\xe3\x0b\x18?\xc1\xb4\xad\xd0\xcci\xdb\xdcxb\xcd\xc4[\x16\x07\x1f\n8\x8a\xef4+\x1b`kK\x8b\x1cO\x08CO\x0f\x9e<\x18O\xcay\x0c>\xcb\x18\xa0\x00\xee\xfa\xc8\xfd\xb5\x94\x8b\x15\xab\xb0\xb0\x9f\x9e\x1c\x16\xffu\xdfZ\x11\x97\xcb\xa3\xfa\xc2\xd1\x03\xcc\xea}\xa3#\xe4,\xfc\xc7\xdb\x9f\x7f\x1a\x7f\xf2\xfc\xf9\xf3\xe7\xe1&`\xbek\xa3d\x8e\xa1g\xc6\x17\xe7!\xda\x95x\xad\x9c\xabV\xf1\x0dR\xebG\xf5\x1d\xabA\xd6\x01o}\xba\x0b\xe0\xbb\x15\xcf\xf3\xd6\xbb\xbb\xb0\x0b\xa81u!\x88\xa0\xe3o\xad1\xf4\xf0\xe1\x7f\x19\xcb}p\xe1\x9f\xc6\xa7\xed\xd6\xcdx\xffp\xe3\xd9\xb3\xc8\x92\x91e\x1f\xcd\xa0\xd6\x860\xd6\xa2\xe0\xe1\x89\xc8\x0f\x82W\xbcR\xb2\x8c\xf6Z\x17;E\xe2\xee\x12+\xf89<\x0dkn>@\xe2\xa5{\xff\xeb\xf9S\"@4W\xf7\xd1\x96\xf7\x9f\xc1\xfd\xb1N\xdb7\xc3\xc2\x96\xf2~\x98\xc3\x07p\x1f\xcb\xf7\x13\xdb\x19\x9d\xff\xd3\x16\xe1\xdf\xa2\x1f\x98\xf2\x0d\xde\x9f[\xc8\xcb\xb5[\x8d\xf6\xdb\x9am\x0dB\xc1\x0d/\x8a\xc7\x1fKyS\xe20\xb3e\n\x18d\xb5\xd2r7\xb3s\xf5\x9b\xbc\xa3i\x0d\xfa\x81\x1d;;\xd91\x0d8\xb0\xf2d\xb6I\x8f'\xf6\x01;\xa3o\xe7[Y\xe4\x9e\xe1nrn\xbb\xb2(\x9b\xfea\xb7\xc4\x8c\x0fl\xae\xcb\x8c\xa7\x83YX4\xb3\xfdC3\xacy\x13\x1e\x05\xf3|\x8c\xfbo\xff\xf9\xb7G\x91\x8et\x8e6\xd7O0\xde\xec\xd0TF\xe5\xd3\xc5\xd7O\xbfV\xf7#M\xc8\xfew.\xc5\xe4\x88\x8c r\xe4#,\xd7\x95\xdc-\xb3\xf5n\xf7\xe4W\xe4\xa1\xb8\x87\xff\x08\x13O:K\xf4!(~\x99\xff J\\sy\xe0\xbca\xa0\x98\x9aG,U\xe4\xc3U\xe680iAg\xe4\x11*\x0f\xb0\xe2j\xddh\xb2\x14kd\xaftq\xd5>G%\x989\xf3\x9d\xfb\xe2\xce\x12U\xc6jl\x16\xf6\x18dB\x10\xb2;xJ\xc8nZ\x10\x0e\x08\xd9%d7\xf8&!\xbb(\x84\xec\x1e\x0b!\xbb\x84\xec\x86\x84\x90]Bv \xd9%d\x97\x90]/\x84\xec\x12\xb2;\x94y\xc6#d\x97\x90]Bv \xd9%d\xb7/\x84\xec\x12\xb2K\xc8\xeeP\x08\xd9\x1d\xff\x80\x90]Bv\xbf\x00\xb2\x1b;\xd9\xb4\x8b\xd0v\x14\x89\xf2\xd9\x10\x82h\x8f6\xd5U=q\xb2)\x84\xb0\xc2\x99 \xf3Z\x14\x9aW\x0e\xaeL;\xb9\xe0\xca\xbc\xf9W\xa1\xb7\xdf\xe1\xb76.\xaa\xe0 k\xd3h\xf0\xbc\xd66\xd4\x82j\xed\xba\xde\x14\x8f+\xdd\x89,\xb6fs?\xf5\xb0\xe0A:\xee\x95;\x0b\xfev\x0c\xd8\x15M\xd8\"a\x8b=!l\x91\xb0\xc5q!l\x91\xb0E\xc2\x16 [$l\x91\xb0\xc5\xc0+\x84-\x12\xb68\x14\xc2\x16 [\x1c\x17\xc2\x16 [D!l\x91\xb0E\xc2\x16\x87B\xd8\"a\x8b\x84-\x0e\x85\xb0\xc5\xf1\x0f\x08[$l\xf1\x0b`\x8b^\xf6l#JL\xe0\xd8\x9b\xea-\xac\xdb\x17\x9b\xb3\x8e5\xce\xa9\xcd\xcfn~\x18\x03\xc3\xacD\xf1\xa78\xfaT\xf2Oz\xf9\x91\x1f\xc2\xc8T4\xc21\x19\xdfH\xb9\xae\xa0\xcd\x85\xbf\xa2\xc1\xfc\xe9b\x90L\xd9\xb3\x94\xe1\x8am\xf8\x1b\x8bI.\xec\xf3\x802\x0bi\x1a5F\xad1$\x87\x9dT\x1a8F\xf60\x1c\xb8\x80K\xdd\xe9P{}\x00\x11\x02\xb9za\xb5\x9d\xac\xb8\x0f\xf3\x8eM\x06Zj\x16\x00\xf2\x92\x8d\x199V{\xea\xfe\x0bL\x1e\xad\x88\x7f\xd8\xbb\xcd\xcc\x0c\xea#\xd3\x9d0h\xa8\xbc]C\xe3\x1d$KT\x16\xea\x937\x0co\x8d\xba\x00\xa1\x95\x0f\xb8+\xa8K\x7f_\x04\x86\xfbnD\xe7v!\xda\x1d;xJ\xbbc\xd3\x82\x8d@\x086!\xd8\xc17 \xc1F!\x04\xfbX\x08\xc1&\x04;$\x84`\x13\x82M\x086!\xd8\x84`{!\x04\x9b\x10\xec\xa1\xcc3\x1e!\xd8\x84`\x13\x82M\x086!\xd8}!\x04\x9b\x10lB\xb0\x87B\x08\xf6\xf8\x07\x84`\x13\x82\xfd\x05\x10\xec\xd8\xee\xd8\x9d(\x97\xcd\xdd\xb1\x1dM1\x98\xf7\xad\xed\xadn\x10\xcc\xa4\x19\x91D\xe9/\xb7u}Yq\x93\xac\xb6\x93n&w;f\xcc\xde\xf7m\x9e~U3-w\x17O\xbf\xfa\xaa\x96j'\xbbC\x99(\x9fY\xe0\xb7\xf3[\xbbAw\xcd\n5\xb9C\xd7\x97\x117\xff\xe2\x0c\xf4y\xd47\xc0\xfe\xe2#O\xb5\xa1\xc3\xc6\x99\x9b\x85\xec\x89\xcf\x18Iup\xadCG\x1b \x1d\xe3\x9f\x9bA\xa0\x10K`\xac=\x05\x8e\xffl\\\x06Yb,B\xae\xd7\x8ak\xb3\x0e\xeag\x17:\xf8\x8d\xe2\xfa\xcc\x95\x11\x08<\x8d\x18\xd1\xe6/d\xc7A\xd0\xc7\x15\x06MY\xd6;^\x89\xcc\xff\x86\x03\x96\xbb\xd6\xd8F\xdd\xb6\xbc\xf4\x86\xaf\xcb&\xfa:X\x12\\\xda\xc3\xb3\xb9R\xad mh\xb06-\xdc(\x98g\xcf\xbe\xfa\xcfl\xdc\x01\xd5`\xc4\xbc\x85\xd8\x89T\xeb\xe2\xbb\x9e\xc3\x11b \xd8\xc8|\xb7\x05;rK]\x0c\x10{\x1b\xf2\xea\xfet\xb9\x86\x82\xaf\xb5gl8\n\x87w\xbb\x11T\xb0\x1d\xc4&b\xec\xbc:\x00g\xd9\x16\xd8~\xff\x05\xad\xd8\xe5Q\xb4\xdf\xc7l\xd9\xf9\xc2X\x14[\xa8\xc4\x93\x06\x00c\xd6e.2\xbc(\xdc\xc1\x8b\xce\x82\xf8\xa2kH]u\xa2\xcc\x8a:\x1f8\xd5\xcc\xa6\xd2\xe0\xbb\x83\x1aC\xb6@\x07v0\xb3_\x8f\x96\xd4S\xf6\xfeR\x0djkP\x04\\\x87T\\9^\x07v\xaf\xb6?\x9a.\xb7p\xbdIlJY\x0d@\x1b\xdf\x1b\xfbIX\xcb\xdc\xb6bWR\x16\x9c\x95\xb1\n\xac\xf85\xafz\x9f\xc6*\xcf\xbd=\xac8\xd1\xe1\xe1T|\xbc'\xf4\xf4\x984x\x89p\xb6\xacr^\x0d\xd7\x98\xca\x9e\x95)\xd4\x0f\xd0\xe4\xa5\xdc\xc5\xbc\xed\x84\x10\x13\x00\xdb\xc9\xba\xd4\xb7T\x93\x12\xec1\xf2R\x8a\xf6\xb4\x1a\x06Z~\xe4\xa5\x0b\xd6\xd8\xe2x\x8e\x88\x19\x11Y\xe92\x17\x8b\x0b\xfe\xf4\xf3\xbb\xd7\xcf\xd0\x89\xb0\xef\xba\xd9X`4\xe9\xb2\xd4n\x9cj\"x*\x1a=w\x83\x98u\xdf\xc2\x89*\xb1)\x99\xae+\xae\x1aR\x84qX7r#q\x848\x9e\xe8\xdd\xf9+\xaeC\xdaQ\xb3\xe5K\xdax\xef\xd6,[2^jq\xcd\x95\xeb\xa7\x8d\"\x02\xee\x07O \xb8O\xefv\x04\xdc\x13p?.\x04\xdc\xa3\x10p\x7f,\x04\xdc\x13p\x1f\x12\x02\xee \xb8'\xe0\x9e\x80{\x02\xee\xbd\x10pO\xc0\xfdP\xe6\x19\x8f\x80{\x02\xee \xb8'\xe0\x9e\x80\xfb\xbe\x10pO\xc0=\x01\xf7C!\xe0~\xfc\x03\x02\xee \xb8\xff\x1d\x00\xf7\xfe\xa8\x90'\xbf\xe2\x9f\"\xffG\x18\xc5\x1f\xdc\xc9o\xfc\xe5\x06\xd2\x1f.\x80\x8d\xb6v\xb4z\xe3\xde\xba\xff-+\x8c\x17\\\xdd\x07l\xac~,\x10\x9aW\xac\xb0[\xe4\xfd\xd7\xf6\x8c\x8b\x95\xfb`\xa0\xf0uU\xc9J\x19\xcf\xa3\xfb\xfa\x9aa\x84\xd2\x86\x0f17\x19S\\\xf3|\x94^\xe0\xcb\xe0\x9e\xdd]r\x81\xaf\xa3D\x88\x91\x10\xda\xc1SBh\xd3\x82i@\x08-!\xb4\xc17 \xa1E!\x84\xf6X\x08\xa1%\x846$\x84\xd0\x12BK\x08-!\xb4\x84\xd0z!\x84\x96\x10\xda\xa1\xcc3\x1e!\xb4\x84\xd0\x12BK\x08-!\xb4}!\x84\x96\x10ZBh\x87B\x08\xed\xf8\x07\x84\xd0\x12B\xfb\x05\x10\xda\xd8\xed\x14\x0e\x83\xed\xe8\x10\xe5\xb3!\xfa\xd0\x1e\x7f\xad\xab\xfa\xd4C\xdeO\xc0\x89\x8f\xf7w\x1f\xc1\xa9w\x7f\xa3v\xec\x04k\x02\xf5\x08\xd4\xf3B\xa0\x1e\x81z\xe3B\xa0\x1e\x81z\x04\xea\x11\xa8G\xa0\x1e\x81z\x81W\x08\xd4#Po(\x04\xea\x11\xa87.\x04\xea\x11\xa8\x87B\xa0\x1e\x81z\x04\xea\x0d\x85@=\x02\xf5\x08\xd4\x1b\n\x81z\xe3\x1f\x10\xa8G\xa0\xde\x17\x00\xf5\xbc\xb4\x17\xee\x1e{S\xbd\x85u\xe7\x1ab\x7f\x0c\xad\xc69\xb5s;\xb1\x1b3\x8f\xc10+Q\xfc)\x8e>\xf9[\xd6\xc3\xc8T4\xc21\x19\xdf\x88\xdd\x04\xdfJs\xd7\xbb\xbbp\xbb\xb9\xf6\x1d\xf6L)\x1bh\xb5\x97\xc3\xffRs\xa5\x17\xf6y@\x19^\x12\x8cjb\xf7\xc2_\xeaN\x87\xc2+\xb8C W/\xac\xb6\x93\x95\xbf\x9fz4d\x84WD\xdf\xd2\x98\x83\x0br\xbb\xe2\x0e\xed\x0d\x86\x89\x9a\x1b\xaaCW\x96w\xc2\xa0\xa1\xf2v\x0d\xdd\xbd\xec;\xf0\xfa\x0d\xc3\x9b\xa1/@h\xe5\x03\xee\n\xea\xd26\xe6\xdc\x86\xfbn\x84\xa2\x83\x83i[*!\xd8N\x08\xc1&\x04\xbb\x15B\xb05!\xd8\xe3B\x08\xb6\x17B\xb0 \xc1\xee\n!\xd8\x84`\x13\x82\x0d\x84`\x13\x82\x8dB\x086!\xd8\x84`\x13\x82\xdd\x11B\xb0{B\x086!\xd8\xe1&@\x086!\xd8]IE\x13 \xc1F!\x04\xfb\x9f\x05\xc1\x8enKmP\xe9\xc5G\xde\x9d\x04c8\xaf\x03v\x99\x1bB\xedA\xc1\x18\x06tX\xa3\x83\xf6\x1a\x14\x18\x83w\x9bA\x94\x0ba]\xd3\xed\xa7\x90\xdd\x9f\xcd|'K\\H\xcb\xf5Zqm\x9c\xf8~v\xa1\x03>(\xae\xbb\x83\xa2(\x9f\xd9\xb4:\xbf\xb5\x1bm\xd7\xacP3v\xda\xf6\xa2&#F\xb4\xf9\x0b\xd9q\x10\xb1p\x85AS\x96\xf5\x8eW\"\xf3\xbfao\xcbXi\xcacCF[^z\xc3\xd7e\x13:\x1c\xf8\xb3\x97\xa8\xad\xe0J\xb5&\xb4q\xadZ\x19S\x7f\xe43\xed\xd9W\xff\x99\x8d;\xc0\xc9G\xcc[\x88\x9dH\xb5.\xbe\xeb \x08!\xf8\xdc\x86\x95\xbb-\xd813\xeab\x007\xdbxM\xf7\xa7\xcb5\x14|\xad=\xdd\xc0\xf1\x0f\xbc\xcf\x88\x11q\xdbAl\"\xc6\xce\xab\x03p\x96m\x81\xed\xf7_\xd0\x8a]\x12@\xfb}\xcc\x96\x9d/\x8cE\xb1\x85J\xdc\xa4\x0e\x18p-s\x911\xcd\x1bl\xccY\x10_t\x0d\xa9\xabN\x94YQ\xe7\x03\x8f\x90\xd9T\x1aprPc\x08uwb\xe6f\xe8\xeeqjz\xca\xde_\xaaAm\x0d\x8a\x80Nt\xc5\x95#%`\xf7j\xfb\xa3\xe9r\x0b\xd7\x9b\xc4\xa6\x94\xd5\x00q\xf0\xbd\xb1\x9f\x84\xb5\xccm+v%e\xc1Y\x19\xab\xc0\x8a_\xf3\xaa\xf7i\xac\xf2\xdc\xdb\xc3\x8a\x13\x1d\x12I\xc5\xc7{BO\x8fI\x83\x97\x88\xc5\xca*\xe7\xd5\xd0a\x7f+\xca\x8c?\x83L\xaa\x9dT\x8fU\xfe\x11\xbeZ\xfc\xe5\x9b\xb3Z\xe3\x94\xb3\x0dR\xce\xbf\x7f\xf0\xca86\xa6 \xe7\xcf`\x8f\x10J\xb3\xc2b\x85\xe6\x951\xfc5F\x00>\xa1V\x0b\x19U\x0f\x9c\xa2\xa3\xe3\x12\xee\xf9\xd2\xdd\xe1\xd3\x12BT\x93\x93xg:\xca\x18\x99\xc4%R\x02\xfbg\xe7\x8a\xa41EN\xe1\x89\xc4\xf9 '\xb1A0\x89\x80\xc2I.\xc8\x19\x98 '\xf2@\x82\xe8y\x1a\x0b\xe4V\x1c\x90\x93\x18 \xc0\x8a\"d\xc54\xfe\xc7)\xec\x8f\x18&\x9b\xc4\xfd83\xf3#\x89\xf7qF\xd6\xc7$\xe7\xe3L\x8c\x8f\xdb\xf0=f\xb3=\xce\xc0\xf583\xd3c\x82\xe7qv\x96\xc7\xe7\xe1x\x9c\x9d\xe1\x91\xce\xef8\x8d\xdd\x111\xfa\x14\xb7\xe3l\xcc\x8e4^\xc7H\x98\xe26\xac\x8eTN\xc7\x99\x18\x1dg\xe6sL\xb19n\xc9\xe5\x8809&\xfd\xa5I\x16G\x9aCu^\x06\xc7\x14\x7fc:O\xa7q7\xfcT3\xa2p\x8a\xb9qF\xde\xc6-X\x1b\xe3\x04\xb0\x18g\xe3\xbc\x8c\x8d8_\xe3\x1cl\x8d$\xba\xc1\x04S#\x99\xa7\x11\x06\x0d\xe7s4\xc2\xbaF#\xf4gag\xcc1V*3c\xda&\xc9\xac\x8c\x138\x19!\xa4x\x8a\x8fq>6\xc6\xed\xb9\x18\xe3\x88\xcc\x99x\x18I,\x8ci\x0eF\n\x03#j\xed\xb9\xec\x8bT\xeeE\x88yq\x06\xde\xc5\x0c\xd6\xc5|\xceE2\xe3\"BT\x08f'\xf2M*\xd3\xe2<<\x8bh\xe6G\x9e\x9c\xc4\xb0\xf0\x91\xf1\x11}\x01~\xc5\x99\xd9\x15an\xc5\xa9\xcc\n\x0c\xd9\x8ce|\x9cWq^VEhe>\xc5\xa8\x08A\xbe!6\xc5y\xb9\x14\xa73)\x02\xac\x89\x938\x13\x93\xfc\x88y\xec\x88dn\xc4Lf\xc4\x1c^D\x90\x15\x11\xceM*:\x9d\xc6\x88\x98\xc9\x87\x98\xc1\x86\x18-\xday\x99\x10\xa1Nq\x0b\x16\xc4h\x1c)\xc8\x818\x8d\x01\x11c;\x9c\x9f\xebp\xfb\x96\x94\xccsHe9\xf4'F\xb7\x9b\xfa\xb6h\x0e\xedh\xa6\x1d\xcd#2\x1d\xbe\xb0rf\x94*\x15\xa7:\x0d\xa9\n*\xa3\x1d\xcd\xb4\xa3\xb9\x95S0\xad\xa02\xda\xd1|,g\xc2\xb7n\x87p\x9d\x80q\x9d\x05\xe5:;\xce5\x89t}\x06\xac\xebs\xa1]\x9f\x01\xef\x9a\x83x\x9d\x8ayE\xc7\xf0)\xd4\xeb\x8c\xb8W*\xf2uv\xec+\x1d\xfd:\x1b\xfeuv\x04l\x1a\x03\xbb5\nF;\x9a'sv\x1a*6\xaa\x8av4\x9f\x82\x8fM!d\xe7\xc1\xc8\x12\x81\x9fI\x9cl\x06R6\xb9\x1bs&ZF;\x9aiG3\xedh\xee\xca \x98Z:\xaaF;\x9a\xbd\xd0\x8ef\xda\xd1L;\x9a\x93Q\xb8\xdb\xe0p\xa3\xeahG\xf3\xe8\x07I\xc8\x1d\xedh>\x1f\x8eG;\x9ao\x8d\xf2\x9d\xa7\xcd%#}\xe9X_\xe2\x8e\xe6;}\xd1n\xbb\x19\xed \xff$\xf4R\xdd\xb0\xfdRmY\xc5\x97l\x87;\x14Ey\xb4M\xad\xb7\xbb\xec%+\xb2\xd7\x9f\x84\xbe\x92\xb2x)E\xa9\xcc\"\xef\xad\xd1p\xe7\xaf\xe8\xd5\xf2#/\xd5R\xd6\xfan`\x829/\xe5\xee\xe4\xc0\x93\xad\xaf\x13?O \xfb\x98\xdam\x8e\x90g\xd6z.dc\xb3\xee\xf7\xbe\x9aq\x91\x95.C!\xa7\xe3\xa7\x9f\xdf\xbd~\x86n\x84}\xcf\xcd\xc7\x02\xe3I\x97\xa5v#U\x13\xc3\xeb\x0eW\xa3\n\xad\xf36\x9e\x98\x12\x9b\x92\xe9\xba\xe2\xaa\xe9j\xc6U\xdd\xc8\x8d\xc4\xb1\xa1m\\\x84\xb4\x0f\x9e\x12\xd2\x9e\xd6;\x80\x90vB\xda\x83o\x12\xd2\x8eBH\xfb\xb1\x10\xd2NH{H\x08i'\xa4\x9d\x90vB\xda i\xf7BH;!\xedC\x99g\xffw\x14\x98?.T\xefi\x0c\xc3\x8b#x\x11\x88}\"D\x14\x83\xd7\xa3\x9fN\x87f\xce \xac\x9f\x19V\x0f\x83\xea\xe9\x90:\xa1\xe0\x83\xa7\x84\x82\xa7\xf4\n+\x84\x82\x13\n>.\x84\x82\xa3\x10\n~,\x84\x82\x13\n\x1e\x12B\xc1 \x05'\x14\x9cPpB\xc1\xbd\x10\nN(\xf8P\xe6\x19\x8fPpB\xc1 \x05'\x14\x9cP\xf0\xbe\x10\nN(8\xa1\xe0C!\x14|\xfc\x03B\xc1 \x05'\x14\x1ce\x12\x05\xb7\x00qx\x87\xfb1\xf0M\x9b\xd2O\xc3\xfahS\xfa\xe9\xe8\xf9\xb96\xa5\x13\x82>xJ\x08zZ\xef\x00B\xd0 A\x0f\xbeI\x08:\n!\xe8\xc7B\x08:!\xe8!!\x04\x9d\x10tB\xd0 A'\x04\xdd\x0b!\xe8\x84\xa0\x0fe\x9e\xf1\x08A'\x04\x9d\x10tB\xd0 A\xef\x0b!\xe8\x84\xa0\x13\x82>\x14B\xd0\xc7? \x04\x9d\x10\xf4/\x80\xa0\xcf\xc4\xae\xdb\xbd\xdb\\i\xb1c\x9a?Q7l\xbf\xe4\x9fX\xa6\x97\x16x\\\x8a\xf2\x08\xd3\xfe<\xa7\xb6\xbfvyx{\xc3\xf6\xafM\x0e^`\x06.}\xc4\xec\xce\xe2\xe4\x08\xf5.e\xedM\x96\x08\x06\x12\x96:xJXjZ\xd8\x0b\x08K%,5\xf8&a\xa9(\x84\xa5\x1e\x0ba\xa9\x84\xa5\x86\x84\xb0T\xc2R K%,\x95\xb0T/\x84\xa5\x12\x96:\x94y\xc6#,\x95\xb0T\xc2R K%,\xb5/\x84\xa5\x12\x96JX\xeaP\x08K\x1d\xff\x80\xb0T\xc2R\xbf\x00\x96z7v#\xb7i*^\xe6\xbd\x05\xf7)7|\x0f\x12\xf5\xba-\x82\xd9\x8b\xa7\xddZ\xfb\xe7\xc0\xa2e\xad\xbf,\x18\xfds\xed\xc1\xac;\x8eF\x8b\x92\xc0h\x02\xa3 \x8c&0\x9a\xc0h/\x04F\x13\x18}$\x04F\x13\x18=\x14\x02\xa3 \x8c&0\x9a\xc0h\x02\xa3 \x8c&0\xba'\x04F\x13\x18=\xd9B\x08\x8c\x0e\x7fC`tO\x08\x8c&0:\xdc\x04\x08\x8c&0\xba+\xa9\xc0 \x81\xd1(\x04F\x13\x18\xed\xe4w\x07F\xcbZ\x9fS\xfd4\x1a-\xca\x8c\x97Z\\s\xd5`\xd2,3\xff^nX\xbd\x19\xb9\xd2\xba\x01\x9e_\xe0k\xdf\xe3[Pq]W\xa5\x02\xfb-\xd8o\xdd\x17=\x84\xb9\xfb\xd5=_\xa2;\x8a)\xe7L\xb3\xbb\x81j\x8a\xfc\x0cq\xb3A\xa3\xee\x8b\x16\xba\xe0\xcf@\xe0a\xdbf\x00\xb3 &\\\xbeB\xd7\x03\xb0\xc6\xc6\xf3\xa6\x96{^\xed\xb9\xae\xd9\x04\xea\xba\x92\xb2\xe0,\x141N\x89\x90\xc1 =\x84J`]\xb0\x8d\x19X\xd5V\xde\x18\xff]\xe8\x07\xe6\xe7\xf6\xad\x08FU\xca\xf2q\xfb\"\xb6\xdb\xf0\x80\xf9\xd3\xf1\xcb\nra\xac\xbf\xaa5\xba\xb5\xa2\xb2=Y\x01\xff\xc5Av\x81\x10\x9d\x11\xbe\x97\xd9\xd6\xcc\x1d\xc5\x04<\x86i\x99\xd2:\xff\xd6\xf5\xb3=\xaf\x84\xcc\x17\xc6\xb5\xe9e*\xa8\xa7\x93Y\xc4\x05;\x19\x0e'\xce40P\xa2\xdc\x98\\\n\xe3\xa0\x97\xb9\xf5\xe5Ceg\x1b\x16A\x06d\x99\xd9%\x80/U8\xe9\x8a\xafEQ\x18'\xf5\xb2\xd4f\xf4\xb5`\x80YC\xd8Pt3|\xd9i~\xc3\xc3H\xb7\xd7\x059\x13\xc5a\xdc\xfbl\x0b\xb4\xd42\xd8\x9am_\x89\xb4\xd1\x9e\x1a\xf4n\x10Nh\xcb\\\xf1\x1bV\xe5\x16\x00k_\x0e\x83CZF\x02!\x08\xfb\x0b\x85S\x85YI]\x0b\x06\x85\xcc>B\xee\xa6e\x90\x95YA\x9a\xbaS\x9a\xed\xf6\xd1^\x1a\x1c\xa4 a\xa0\x02\x84\xc7\xb2\x8fK\x9c\xb6\x96\xa81\xf8b\x8a%\x8d\xfc \xb3\x8f8s\xbds\xbe\"k\xc2\xd3XLL+\xe6y\x00|{0J\xbc\x9b\x02\x7fw?\xbc\x13\xbb\x18z\x960\xb8\x1a\xe1e\x1d\xbc\xa1\xc1\xcac\xf8\xf6\xe0\x13\x9f|q\"S\xe6\xa5\x9f\xa4\xc9\xfd\xa4\xa6\xef+Y\x87*\x1b:\xf4\xa7\xb4\xdc\xa5\x0e\xd0pTe\xfe~\x88!\xb0\xd0\xd6^T\x19\xf6\xec,\xb4\xf4\xf4\xc2\x05ba+n\x9az\xb7\xe5+\xcd*m\x07\xaeN\xba\xe1\xe8L\xf4\xc6\x0dHo\x16i\x8d\xfb\x95I\xad]\x9e8#\xe15\x1a\xbd\xfb3n\x10\x8d\x8c\xaa*\xa4D\xacWKk\xd9H\xdd{\xfb\x9c\xa1\x98s\x9aE\xd3\x01\x85r\xa8\xa9\xb4\xf5\x8f\x19VvL/d\xb9\xe1U\x93\xc5\xa9\xa6a'\xc4\x06\x81\x8b7\x12\xaft\xd1f\xc5\xc6+\x905QJD\x05KQ\x98\x01{\x8aY\x00\x9d\xf6\xeb\x97\xb1\xf1\xd4?\xf4\x87\xa1\x0f\xe16\xd8\x0c\xd5g\xa8 \xef\xff\xe5L\xf3\xc7:>\xb8\xcc\xa9\xccw>\x8fMm\xae|=b\x973? =b\xd2\x8e-|\xda\xd4O\xdc\x90m\xd2\xf1\xdaK\x1ea\xdc\xc4\xf2\xa1\x9d\x16>Ld\x01G7\x8c\xfd\xb4-Ww-\xd2\xd2%J\x19vJ\xa0\xcb\n\xe0y\xa8E\xa4\xd6\x0b\xe6\xea\xa5,]\xb4\x01\xe7J\xa5\xab:\xeb0)~\xe9\xe7\xbc\xdeG\xfaX.\xd6kn\x8a\x01\x99W\xaa\"\x86\x19t*\x8c\x17\xf7\xabJA\xe6\xa9v\x9e\xc4\x15\x9e\xb9s\xbe\xe7%R\xe8\x1c\xcd'\xf8fo\xbe\x197b&E\x19\xf4Zb\x8b:+\xc1\xa5\x9d\x95\x04\xdf)\xcd{J\x98\x7f\x92{~\xfc\xf6'+I\xaaR\x9b\xdf\xec\xfb\xa0&3\x1f#\xc1\x9cx_TD\x9f\x8b\xda\xc5n\x8d\xb2\x92~wT_\xa6}\x02l\xa6~\x11\x8e\xd7\xac\xf9\xb2\xc9\xb5{\x88\xfe\x10\xf2\xd9V\x9c\x97nI\x18T8\xb1\xa6}\xc9\xca\xee2nW\x17Z\xec\x0b\x8eI\xd9\x1a\x1b_M\xe2\x10\xbf4\xbd\xfb\x0c\xa1\x89\xa9\xa9\xc9\x99\xadM\xd3\x1b\xa8\xc99\x12\x91\x1aGoTMY\xef\x96\xb8\xe0V\xcb=\x13\xf9R^\xf3\x11\xb2\xbd\x95\x19yO \xabD\xea{,W\xbete\xbd[9\n\x126\x04\xfb^d\xb0\xee\x18\xc3E\xb8\xc3\x15\x9fI\xd3+\xcc,m\x92\x1c}\xcd\xae\x97]\xf6\xbe\xbc\xa9z\xd99\xb6\x91\xfb\xbdg\x85m\x84\xad\x8b\x9d\xa7c\x85\xc8\xfa\x82\x15\x15gy\x00jm\x97\xefK\x9acF%I\x15\xcd1\x03\xf9|s\xccQ\x93\xc58\xd4\xe8\xe4\x92\x12\x9c\n\xf7\x8e\x94:\xfd\xde\x876Y\xe9\xda\xb6\xcd\x83\xd2\xd2\x14\xdd\xd4a\x9b \x05\x07\xebEj9\xaa\xac\xe2\x99\xd8\x0b\xac\x85\x9bm\x80\xf1\xa2\x98\x16j}\x80\x8cW\xb89\xa6\xe3\xd9\xc2\xcb\xc6iw\xd1]\xc7[\x1cU\xd4~\x08\xac\x92\xb5#G\x8c\x0f\x12\x8dc,+\xd7`\x18l\xc4\xb5_\xe5\x9b\xf2\x1bw|l\x05\xe0\xea\xf3E\x17Z\xc1\xf0\xeb\xe0\xcd=\xdb\xb8\x86?\x02ZX\x1dW\xcd+M\xffi\xbf\xb24k$\x14XH\xe5XKl\x00\x8a\x0f<%\xff\xa4\x97\x1f\xf9\xc8\xa5\xaa\x902@Lr\x7f{-\xed\xef\xa1\xa6\xefs\xe1'\x0f\xf3\xa7\xe3\xe73\xe5\xe2\x11Wl\xc3\xdf\xf0_j\xae\xf4\xc2>\x0f(s\x0b\x7f3\x07\xf1O\xda\x18\x92\xc3N*\x0d\x1cY\xef\xd8\x8c\x16p\xa9;`\xf3^\x1f@\x846\x80\xf5(\xe7;\xb3nv[ \xc6:::\x04\xb74fd:\x9e\x1aC\xac?b\xac\x88\x7f\xb4\x93\xb0\xdf\xb5\xd1\xd9\"\x10*o\xd7\xd0\x19ntEe\xa1!\xf1\x86)P\\_\x80\xd0\xcaoFQP\x97\xb6!\xe7\x96\n\x7f#F\x9a\xed\xf4(d\xb3b[\xbd-U\x8f\x1c J\xd8\xbc\xb9z\xd9t\x0c\x8f\xbc\xbb\xb8\xfeX\xf5\x8c\x0f\x04\x99\xac\xac\x0e\\\xd4V\xb6\xf0\x0d\x8e\xbfe.\x8e\xd2\xb5\xcc\xa89\xfc\x17o\xe5\xae\xcdw\x94\x8eV\xf1=G\x12\xf4\xb7\xacj*i\x82\xdc\xd27\x0b\xb6\xef\x10\xbd\xa5%\xd4\xd1\x96\xda\xc1S\xdaR\xfb\x196~D\x99!\xcd\x8cf\xc6\xefP;\x1c\xcc\x11nR`nd\xb1|\x06\xdb\xf5\xbb\xbd`\xd1\xcc 8Dl\x06(g\x13Z\x9b\x9a\x15~.\x8b\x03\xeef\x94k\x90\xeb\xb5\xe2\x1ad\x05\xfd\xecBg[\xaa\xe2\xba\xdb9nM\x0c\x81\xd0\x9c:bD\x9b\xbf\x90\x1d\x07\xe3\xa9+\x0c\x9a\xb2\xacw\xbc\x12\x99\xff\xcd\xc38\xa6\xe2\xf6\xc1\x1cc\x12\xb7\xcf\x0bq\xfbF\x85\xb8}\x83\x0f\x88\xdb\x17x~\x97\xb8}]b\x02\x0c\x9b\xdf+\xae\xd0\xbb\xb23)\x06\x0f\x9b Y\x8f\xe2p[:\xcb\xa0DD<\x9cc-\"\x1eZ\xf9\xcc\xc6\x9d\xa6\xcc\x11\xf1\xf0\x1cV$\xe2!\x11\x0f\xffH\xc4\xc3\xa2Xn*Y\xef\xdd\xa7\xa3\\\xc3\xa2@\xcaB\xe7X\xc0\xa2\x00\xfb\x95{\xb7O*\xf4\xef\xdf\xf3\xc5\xb8\xa3L\xc2n\xc1\xbb\xf2%<7\xcc\x8b%\x80.?7\xaf\xd0\xb8\xc6U\xc9\n\x9f\\\xb9\x0e\x93\xaa\xa6\x83\x9bS%\x03\xbf\x06]\xdep\xb1\xd9F\x83\x92 \xe5s\xd0\xc9\xb2\xe2\x99\xac\xf2h8u:\xb4\x0b\xd3\xe1]H\xb3\x82\x95\x14[X\x99\xaa\xe9V\x92l\xe2%\xa1\xf6[qXxB\xbdX\x99\x95\x93\xe9\x95\xfcP\\\x94\xef\xaf\x98\x1b\xef\x9c\xb8<\x82\xcd\xa3\x9d\x00E\x18=h\xc52\xfaV\xdc\x0c\xc9\x9dp\xa9\x19\xcb\xd72r\xa7O+xu\x12\xc2\x17\x0b\xf8NV \xdc5 \xf6\x10\xf2kY\xd4;\x0ej_\x08\xadS\x0c\x02\xb0\x97\x85\xc8\x0e\x17V\xb1\x0b\xa4F\xf1\xf3V\\j\xed\xe5'\xce\x1b\xc3\xd3\xd3-_5r\x0dJ_\nQ~\xe49\x9e\xb8\x1b\xa6\xbaX\xc9\xea]]\xe0\x85\xa3w\xa7\x91\xf8\x1c\xb9v\x82w4)\xc0\xf3\xa5U\xc9\xf6j+u\xba-X\xe6\x8a(+\xd7Vt\xc5\xb2\x8fS\x84%+x\x95\x19\xe0\x95I\xae\x11\xb8*\x1ei/ \xea\x86-\xaa\xd7^R\xf2\xd36\xa9N\xc5y\xb5>blk?A\x9bi\x1f\xc0Z\x8a\x1e6\xb5z\x9f3\x1d\xa0r\xa4W\xe7O\xd2\xfb\xc3\x96d\xbd\x92z\x8bTb3+!\xf2pY\xae%\xb02\x9c\xcf\xde\xdbop.\xb0\x1c\x96\xb0\xa14\xcf\xb6x\xddcq\xb0\xee\xdc\xbe`\x99Eo^\x99\x01\xc2\xa7i\xffeu\x06\x95\xad+\xb9C{\x1a3=n=\xabp\xf2;\x99\xd7\x05\xbf\x80\x1b\x0eY\xc5\xcd\x8a@\xf1=\xabpi\x80\xf79Z2\xb2\x84\x8f\x9c\xefA\xd6\xe1&\xc3VJ\xe3\x85\x92\xb2T\x90\x19\x17\x10M\x15|\xbf\xe2,\xc7u\xc1\xc3Af\xfb\xa8lOm\x8c\xd5\x88\x8bnQ\x9a5\x9cq1\x83\xef57\x89\xdd\xb0\x83\xbb\x94Jr{\x0f\\.*\x9ei\\f\x14h\x01\xe9\x18\x11!]\x85\xdc\x88\xec\x91\xbb\x13\x95\x15J\xc2\x96\x17\xfb\x88\xb9k\x05J\xe4\\i\xbe\x07\x06\x15_\xb3\xcct\xf2\xce\x9d\x80 vx\x87Uv\xc8\x8a@\x93n\xfa\xe2\xd2\xf6\xc5[\xf8eq:\xf2c\xf8\xf6\xf0\xbf\xb1\xa3\x06\xbbVC\n\x8e\xbe7\x85\x06\x00\xbc\xf5e\xba\xc2\"A\xce5\xafv\x0d\x13\xd8\xd4\xd5\x8d\xf9O\x89\xcb!\xb4@PW\xa7)\x89\xd2\xfa\xb0\xdf\x87\xb6:\xa4\x0c\x0e\xb8n\x88\xa0\x8e\xf0\xf4\xd9S\xd8\xb1\xfd\x9e\xe7n\x82\xbf|u\x01\x0c\n\xa1\xc63)\xd7v\x1c\x8b\xd0m\x8c\xfbk\xaf)d#\x03\xf9\xbb-W\x16\xe9\xc1\xd25wL\x8e7\x17\xbb\x1b\xa3\xd3\x91@\x07\xe0N\xbc&\x13\x07\xe5^\x1f\x94k\x9bNo\x0b\x85l<\xf6QU\x0e{d\x99\x19\xb0,\xd3x<\xcd\x1e#\xf7\xb8\xac\xcd7\x84\x0b\x0c\x9e\x12.\xf0\x19p\x81[\xc6+\xa6/4\xf0a\x88\xe1\x9d\x06>x\x11\xbb\xd6\xa0\xff\xad{\xe5\xee\x062:\xa6\xe8\xca\x97hj\x9f;xA\x9b\"iSd\x84\x12H\x9b\"{2\xed\x0e\xd2\xa6H\xda\x14\xd9\x15\xda\x14I\x9b\"\x03B\x9b\"iS\xe4\xb1\xd0\xa6\xc8\xc4\xa4iSdOhS$m\x8al\x856\xac\xfc\xfe6\xac\xd0\xa6\xc8\x11\xa1M\x91\xb4)\x926E\xd2\x1cc\x85\xe6\x98[\xce1\xb4)\xf2\xf7\xb0)\x92\x10\xc3\xc1SB\x0c\xef bh\xc6]\x0b\x1bZ-Q\xd4\xf0\xafBo\xbfw\x01\xf0!\xeb\xd9-\xa1\x11F\xe8@\x89N\xd78\x92\xd8\xe8so\xdd]0q\xdcX]\xf9\x12\x0d\x12\xb3\x15oO\xb7\x86\x03\xd2H\xd8\x90\xd6\x80!\xd5\x9b\x9cE\xc8\x86\xb4\xd2Bb\x89\x8d\xa4\x92\xb3!\xbd\xdc3H\xda\x90\xe4nzI kC\xba\x85\xac\xa4\xda\xc9JJ\xebh%\xd9^^\x12[L+sI\xdcpJ\xaeR\x9c\xa3cI#t'*C\xd2\xf4\xedI\xdd\x00i\xc4\xeeDU\xe3d\xdd\x99\xe4n83\xc1\x1b\xe6\x91\xbc\xe14\xa27\xfc\x96\x0d)\x8d\xf4\x9d\xa8\xce\xb2\x12nA\xfc\x86\x19\xe4\xefDuc[\nf\x13\xc0!\x91\x04\x9e\xa8\xaa\xd3\x86f\x12\xc1afU\x9f\x81\x10\x0e\xa7\x91\xc2\x8d\x9c\x95\x18\x0e'\x91\xc3\xe1\xac\x04q8\x81$\x0e\xa7\x11\xc5\xe3y\xa8x2Y\x1c\xceL\x18\x87SH\xe3p.\xe28\xcc \x8fC\xfa@\x9aF\xdf\x88\x12\xc4\x01\xd2\xc9\xe4\x90\x14\xa2\x813\x93\xcaa&\xb1\x1cf\x0c6'\x12\xcc\x83\xfa\n\xa1t\n\xc9\x1c\xceK4\x87yds8/\xe1\x1c\xe6\x90\xce\x01\xd2\x89\xe7] ,=\xad$\xf8\xf7)^\xfdo\xb9\xc6\xbb\x0do\x15\x12\xb9\xab\xd0\xe4:\xce_\x85\x19=\x06N\xe2\xb1F\xd5\xc9j\x1e\x97\x15N\xe4\xb3F\x15\xeey\x95\xcei\x853\xf2Z\xe1Tn+\x9c\xc2o\x8dk\xdb0Q\xce\xe1\xb8\xc2\x99y\xae\x90\xc8u\x85T\xbe+$\xcfXsx\xaf\x89\x8a\xf28\xf7\x15\xce\xc8\x7f\x85\xb4A\x10\x12\x07B\x98\xc7\x85\x85d+\xc3y8\xb1p2/\x16\xd2\x07rHr\xb0`\x0eG\x16Ry\xb2\x90\xca\x95\x85D\xbe,\xc0\\\xce,\xcc\x9c\x14\xe0\xdc\xdcY\x80T\xfe,\x9c\x93C\x0bi\x18\xf3\xacf\x94\xde9\xce\xc8\xa9\x85y\xbcZ\x804n-\xcc+\xfa\xdc&4\x83g;\xa9\xabi\x06s\xb9\xb6\xdd\x8f\x93\xf8\xb6\x93\xda\xfa\xed\xdev\x87\xa9\x99\x15f\xf1n\x01\x12\xb9\xb70\xaf\x02S\x89N^\xe6V\xf8\xf9\xb8\xb8p\n\x1f\x17\xe6rr'\xb5\xf5jx\x0e/\x17\xce\xcb\xcd\x854~.\xcc\xac\xb3\xf9<\xdd\xa8\xbaz/\xcb\xb9\\]\x98\xc9\xd7\x8d*j\xb8\xbc38\xbb\x90\xc6\xdb\x85)\xee.$\x83] @W\xa2\xff\x97\xee\x01&\xce\x83\xb3F\x93\x14\xce\x15\xccQ9\xa7\xe9\x9e\x93\x7f\x05\x89\x1c,8\x85\x8755zc0?\x91\x8b\x05\xb7\xe0cA\xb2\xefr\n\xf77\xde\x9a\xfd\xc2+^\xb6S9\xc0\x90\xc4\x03\x86\xf4\x968g\x9a<\x0b'\x18f\xf2\x82a~YRCX\x13m\xe3\x8c\x878\xaan\xcb\xd4\x1c\x1e1Lp\x89a\x0e\x9f\x18h\xde\x0bH\xb2J\x9a\xf7\xee\xc4\xbc\x97\xceGNU3\xd1\xcbR\xeb\xfd\xac\xdcdH\xe4'\xc399\xca0\x8f\xa7\x0cp\x1aW\xb9\xf3u\x82i\x87dP\\\xfely\xb1\xe7\x95_\x05\xf5\x01D\x8b\xa6\x85\x98\nB\x07b\x00L)\x99 d\xfe\xa0\xa9\x88[M\xdc\xea;\xcf\xad\xees\x0f\x97\xab\xc3\xb2\xcf\xa0}\xf2k\xff\xdf\xff\xb0)\x8c\xf1\xae;\xd7(\xf4h\x83.\xd2m9@\xaf\x1a.\xf6\x08\x93P \x87c5\x8a\x06\xfc9;.\xb0.c\x1b._\xb9\xb7{\xa4\xedH\x0e\xdc\xebw\x97\xbd\x8d\xa6\x0eq\xf8\xbeDk\x9f\"\xcc\xceh\xaf\x11\xc7\xda5A\xac\xc3Y)\xd1\xf0:xJ\xc3\xebg\x18^c\x97\xe0\xf4\xc7\xc8\x8eNQ>\x83=\xd3\xdb\xceO\xed\x95\x00\xba\xaa\xbbq\x82@\xb6F{\xceIc\xbd\xcd\xdf\xea\x80\xc3zt(\xc7\x91\xf2\xdbCg\xb4v\xce\xdf\xea\xe0\xa8 \xeen q\x1d\x1a\x80\x1b\x15\xf7|\xb1\xef\xf2p\x1bj\xf6\x81\x16\x1co\xbf\xa1\x81r\xb2\xdd%\x0c\x92\xa72\x90\xa6\xb9G6w1\xd6Q\x8a\xb3}\n\xd3(|b\xde\x0c\x8e\xd1)\xec\xa2\xc8iy\x89\xbc\xa2\x99\x8c\xa2N\x86\x02\nS\xb9D\xb3YD\xd1S\xf2\x92\xf9C\xe7c\x0eMs\x86\x12\xd8BS\x0b\xfe9\x0c\xa1\x84\xcd\xc7\x11n\xd0yXA\x93q\xb1\xa9\x89s\x06\x07h\xcav\x90\xcc\xfb\x19\xf0z\"\xfa\x92\x18?\x93\xc3$$\xb0|\x12\xf9= \xcc\x9e\x04N\xcf4\x9bg\x0e\x8f'm\x98\x85\x13\xb8;\xd8'#\xfa&X;g\xe2\xebLDj\x93\xaa?\xa5\xf1\xce\xe3\xe5x\xdeMD\xe1$#g\x9a\x8b\x93T\xb8\xf4\x060\x83y\x93r\xc2\xdd<\xce\xcd,\xb6M\n\x17#\x99g\x93\xca\xb0I\xe0\xd6$UH:P\x98^u\xe7\xe2\xd0\xccd\xcf\xcc\xe2\xcdL2\xfe\xf4\\\xc6\xcc\xd9\xb82\x93,\x99\xb4\x9a\x98\xcf\x8c\x89\x9d`7\x8b\x133\x87\x0d3yz]*\x0ff\x92\x01\x13\xc1\x00c\x81\x00\x98\xc2\xfd&=\x9b\x14\xdffr\xeeH\xec\xcf\xd3\xc8^\x82\x9a\xb4\x066\x1b\xc7K@\xeafct\xd1!$\x11\x9d;\x0d\x97\x9b\x9a\xa7O\xe1\xa0DJ\x13]!\x9e\xc6;\x99b\x9cL\xb6\x94\xb4\xc9\xe3\x0c\xfc\x92tfIr\x9e\xa7\x03\x11\xc1\x9a=\x1b\x83d\x0ewd\x925\x92\xc0\x17\xf9-\x8c3\x9f\x17\x129[.\x99\x11\x1299+\x8d\x05B3@Oh\x068\xc3\x0c\x90\xce\xc6H\x08\xd0\x84Z\xf8tM\x9d\x91{1\xcd\xba8\x13\xdf\"\x99iq\x1b\x8e\x85\xab?k\x1f\xbb\xb7GV6\x1c\x8f\x060\x9d\xf6Z\xe4\x9d\xcd\xd6\x8d\n\xc2\xe5\x06O \x97\xfb\x8dq\xb9\x1e\x16\xd7k{\xdf\xbb\xc6\xeaN\x8eqa\xdb\xce\xdbw\x0f\xb9s\x9f\x05\xf1\xba\xf6~,<{\xa5\xdegff\xd9\xd8Y\xc5\xe2\x12\xbd}\xcd\xc7p\xdd\x9d\xbf%+g\x9a\xdd\x8d\x9e\xf0\xb9\xc9\x10\xa7#})X_\n\xda\x972kZ9'\xe27\x0b\xf3;;\xea\x97\x8c\xfb\xcdF\xfe\x82zN:G\xe0\xbc\xe8\xdf\x0c\xfc\xef\x9c\x08`\n\x06\x98\x84\x02N;\x99gG\x02\xe9\x8e\xac\x04\\0\xaa\xe2\xb4\xb3\x00\x12\x06WH@\x07\x93\xf1\xc1$\x840 #LA \xe7\xe1\x84\xe9\x034\x9c\x80\x15F\x95\xa5\xed\xf1?\x13^x\xae5\x7fj\xe3\x9e\x87\x1bFU\xcd\xd8\xcb?\x8d\x1d&\x17sN\xb383\x828\x17C<\x01E\x9c0\xf8\xbc\xfd\xfa\xa9Hb\x12\x96\x98\\Ai!a+s*\xf3\\\x98\xe2lT\xf1\xdc\xb8\xe2 \xc8\xe2\x19\xb1\xc5\x04t1\xbd^\xce\x8b0\xce\xc4\x18\xcf\x8c2\xa6\xe3\x8c H#\xdd\x91\x15\x90$U\xa9\xcdov\xf4y2\xf3\x7f\xb8\xfbK\xce\x8cQ\xd2\x1dY\x8d\xa4#\x96\xb3\xf2\x9e\x12V\x89\xd4\xf7\xd9\x90\xcby\xd8e\x02z\x99\x84_\xfe\x96\xa6:+\x8e9\x03\xc9\xa4;\xb2\"/\xd2\x1c\xf3\xfb\x9bc\xce\x8a\x82\xd2\x1dY\x93\x88\xe8Y0\xd1\xf7S\x08\x8b\x97=\xdb\xb8\x0e0\x02^X]W\xcd+M?j\xbf\x02w\xe8\x7f\x03\xad\x1ck\x89\x0dD\xf1\x01\xa8\xe4\x9f\xf4\xf2#\x0f\x9cm>9P\x8c r}\xe9\xb5\xb8\xbf\x07\xe9B.\x17~\x121\x7fji\x16%{\xa6\\\\\xe2\x8am\xf8\x1b\xfeK\xcd\x95^\xd8\xe7\x01e\x9e\xec\xceQ\xad1$\x87\x9dT\x1a\xf8z-2\x81\xcdi\x01\x97\xdaO\xc9\xc0w{}\x00\x11\xba}Bc\xac\xd8\xf4\xc8R\xc2\xce\xac\x9f+\xae\xeaB\xab\xb1\x0e\x8f\x8e\xc1-\x8dy\x0bj\x91\xf5K\x8c\x15\xf1\x8fv2vY\x06v\xcdD\x81W\x04\x04\xcb\xdb5tfF\xd8%*\x0b\x0d\x8d7L\x81\xe2\xfa\x02\x84V\x16\xe1\xc5\xf8Ci\x1br\x0e\xd2\xd8\xefF\x8c4\xdb\xe9\xd1\xc8f\xc5\xb6z[*[_+\x9e\xe7\xf6V\x82\xcd\x9b\xab\x97M\xc7\xf0\x10\xbb\x8b\xef\x8fU\xcf\xf8\x80\xd0\x92\x1aL\x87\xael\xe1\xbd6\xd4\xf3\xdd\x84:\xf3\x0e\xd43\xdc~\x9av\xef\xe9\xe4P\x16\xa3\xe1N\xdcr\x9av\xbf\xe9T0\xfc|w\x9a\xa6\xdff:\xdd\xe9O\xbc\xc1\x14o*\x1dQ7yw\xe9i\xb7\x96\xba\xfd\x05#\xfa\xa6\xef+=\xed\xa6\xd2\xf0V\x89\xa9;Ju\xe2\xed\xa4\x14\x02\x1f<\xa5\x10\xf8o\x1c\x02\xbf\xbb\xa7\x83\x162\xfbh\xe6\xc8\xa5G\xc6\x9d\x8a\xb1pEgX\xfb\xc1}\xe6\x89\xa6\xed.D\xaf\xb0\x81\xda\x1d\x95\xc1\x0c5\xd7\xac\x10y\x17\xc0\xed\x1c\x8c\xd8\xfc\xd6\x19%ZO\xb1\x17\xe68J\xdc\xbdtg\x83\x1c!#w\xe5\x16\xdd(\xd0Rc\xd3\xe4;\xe3\xcc\x0ej\xa8V\xbcR\x08\x08 [\xdb\xd2P\xd6\xe8\xba\xdb`\\p\xe3;7\xde\xb5\xdbJ\xd5\xd6-\x8d\xba\xfdg4\xea~\x86Q\xf7\xa4A\xcf.G\x96Z.;\x1b\x04;\x9c\xc1\xb1\xc1\xefG\xfc\xe6\x9d|\xd5|\xf1\x12;\x88\x1f\xf7:\xac-\xf4\xaa\xa4\xdb\x01\xb4\x1a\xdbX\xd8\x1b\xce\x02\x9a\xdd\xabwvP\x0bp,\xbfD\xc3\x8c\xb2('\xdbU\x9c99\xf1\xf9\xb4\xdf?\x9b'9\xc1\x86<\x89\x07\xe9\xd8\x8e\xa3\nc\x0c\xc8\xf9\xdcG7\xeb\xbc\x1c\x90\x18\x0f\x16\x15\x1a\xed\x0d4W\xd0\\q$we\xae@\xb7>2/\\\xe1\xf3f\x1a\xe8x\xafv\x96\xb1\xeb\x82\x863\xd8\x1b\xf9/\x9b\x97\xad\x16\xf7\xce\x9d\x1d\xf2\xbb\xb6\xe8J\xb4\xad\xc4[\n\x8e\x06v+\xc1R\xe4\xc6\x1akq\xf2\x01vS\x81\xa1\xf1\xc4\x00\xcf\x05`\x1e+\xd0\xb8S\xba\x13\xc0\x08(\xf3,R]\x89\xcd\x86\xdb\x811\x14\x9c{\x98\xb3\xc3\x05\xdcp\xfe\xf1\x02\xb8\xce\x16\x8fF\xde\xb3\xb8%\x86G\x85,\x97k\x1e=z\x90\x8ecs\x922\x01\xc3\xd9'a8u\"\x0ejK\xdc\x8e0\x7fB\x86\x84\x8eq\xdc\xf6<\xb6h\xfel\x12\xd2\xd2\x87\xef\x19\x94\xfc&\xa6,T\x02\xcbwAfL\xb6e\xd5\xc6jeE\x01,\xcf+\xae\x14W\x969l)e\xcdp\x1aP\xe7\xc6X\x96!\xf5&\x94\xa8\xac:\xda\x1d:X\x97\x157\x0d+\xc3\xcd\x17\xa6T\xb2Z\xdel\x85\xe6\x81\x80k\xfc\x83\xcf\xd6W#\x8d?\xad\xe9\xc7\xf3m\x99\x81\xf8\x97\\w\xac\x1493\x9eUAP\x16#\xc0\xb6JW\x87=S\xa6\x91\xda\xb41\xcc K\xd8\xf3j'\x94\x12\xb2D\x06\xe1\xf7\xb1\xb6\xe2\xdb\xe3\x02.m\x9d\xadk\xd3\xf2\x11F\xda!\xd4\xc9?\xed\x99\xdd\xee\xa1x\xd3:'\xf8\x0f\xe1\xcb5\x14\xdc\xf0\xa2\x88\\\xf6`\x96u\xac\xf0\x00\xbb#\xa6\xdb\xa87\x03U\xafr&\xcd/;V\xb2\x0d\xef\xb8\x02\x01\x85\x1d\x06j(M3@\xc9Z;,Vi\x89\xf0\xc0\xea\x00\xff\n93\xdd\xfe\x9aW%+3n\x86m\xe3\x01`[\x0f(\xdb\x8a\xcd\xd6t\xe8` _Xb\x9db;{\xc0\xd0\x05\x08\x0d\xfb\x8a_\xe3\xe8\xa5\xf6lg\x92\xde\xb2k\xdc\xfe\x82c\xc3\xda\xa4W\x047 \xd8\xae\x8c\x91\xa5\xb1\x91\xa9a\xd1\xd4\xfb[\x9c\xb5\x9b\xd6\x0f\x06i\xf9\x01\xce\xfd\xab\xd9\x95\xdf\xc0\x12\x93\xd5gZ\xb3\x94\x85\xeb+\xa1\xde\xa7\xb8;%\xc6\xefdz\xd8\x1eH\x80\xc3\xe0K\x89 Y\xea\xc2\x0f\xe2\x97Z\xe4B\x87\x887\x98\xe0\xa3\xf0\xac\x84\xfc8\x075\xb9\xf4*i\x8f\x85\xaad\xbd\xd9\x0eQ\x97\x8b\x18U\xa4\x89h\x03[\xafy\x16\xba\x01\x13\xbav\xc4\xbe!U\xb7\xf5\xfb\x8e\x05\x0f\xc5\x82/z\xaeU(e\x9f[\x8b\xd8\x87\xb1V\x8f\xf8t\x12C\xb7\xccX\x1d\xbb\xa8\xcd\xd5\xa3\xb1\xb6\xb7\x13\xe5\x12\x17\x19\xcb\xb5\xac\x96\xdd\\\xc5\x9a\xe1\xad\x88\\\xb7\xbf\x03c\xcae\x9aT\x91\xd6W\xce\xed,\x9d\xd3UJr\x94\xe6\xbbI\xcd\x8e<\\\xceme\x91\xab\x0e\xa4\xd3\x90F\x8e\xd6w\x8d\"\x8aa\x0c\x9eR\x0c\xe3\xae\xc40\x1c4\xb3\xe4J?\xf9U\xde\x94\xbc\x8a\x90\x92;\x83\xc2\x1b\xfb\xddk\xa5[Zr \\i\xb13\x8b\x00\xc7\xaa\xf3g\xe8\xad+\xb9\x83R\xde@]jQ \xeb\xe0\xe8,(;\xf3v\xbd9\x1c\x15\xec\x89y\x95?;\xcc\x1d.\x8c\xa99\x97\x14\xfd\x1a\xe4\x96\xcbv\xff\"\x1e\x9c\xd3*o\xf7\xf4\xea-?4\x04\x8f\xb5\xb0.b\xf7\xaa\xe6>X\xd5\x0b\xca\xb4\x85vO\xefl8\x86\"\xf0\x908\xa3\x9dw>;i6\xfb\xcd#\xf0\xa3\xa6x\xed\xfann\xcf\x95\xf1]\xd7\xf2\x10]@\xcb\x01\xba90\xed{\xe2\x18\x07\xd1u\xcc\xb1\\\xe3H\xd02s\xec\xf9V+\xaeo\xf0\xa4\x0f\xc7VnN0\xe5\xe6\xff{\x99\xb5\x84\x08\x9aJ\x07Oi*\xfd\x0cSi\x8c\xb0\x83\x93d\xb0\xf9\xb9) {\x8dP\xfd\xc3\xc4q\x16rS\x1boz\xdb\x90\x1cq\x06\x16\x90\xcf*\x1e\xf3*z\xba{\xb9\xc5\xb5\xe7\xe5+\xe5w\xc4!\x89\xd5e\xd0f\xcb\xe7\x13\xcf\xfbk\xb5\x9c\xb2\x95j\xd8\xaaF\xdaS\xb0\xb2\x82\xfb12Y\x14\x1cCH\xdf\xb9W\xf0t\xac#K\xf0\xd2\x1dJ\x142\xc5`\x8f\xf1\xfb\xfd\x9eWv\x1c\xb2\x1b9q\xd3\xe6\xc0\"\xbd/~\x907\xbcjw}\xfa\xa1\xccn\x82\xb8\xa5\xe9\x8e,\xd2\x19\x10n\xc7\xf1\xf2g\xc2/\xa7\x0e\x94\x7f\xe3\x9c<3n\x9a\xb5M\xeec\x08-\x8e[J\x8dX\xae\xcc\xb0\xf0\xa3\x84\x06\x7fB\n\x9d.\xdf\x97\xa9A\x92N\x97o\x85N\x97\xa7\xd3\xe5\xe9t\xf9\xae\xd0\xe9\xf2t\xba\xfc\xc8Kt\xba<\x9d.\x1fz\x95N\x97\xa7\xd3\xe5\xc7dNe\xd2\xe9\xf2t\xba\xfc@\xe8ty:\xf9wV<}2\xf3\x7f\xb8\x93\x7f\xe9t\xf9\x11\xa1\xd3\xe5\xe9ty:]\x9e\xe6\x18+4\xc7\xdcr\x8e\xa1\xd3\xe5\x7f\x87\xa7\xcb\xbb;}o\x90C\xd9\x1b\xe4\x90\xcdh\x81\x95\xc1\xc7t\xd0|\x00\xe0k\x85\x0e\x9a\x87\xb4\x19zjX\xa1\x83\xe6\xe9\xa0\xf9\xae\xd0A\xf3D\xda\xb9+\xa4\x1d:h~\x1e\xb1\x84\x0e\x9a\xff\x8c\xc6\x9d>\"\x9d\x0e\x9a?\x87\x15\xe9\xa0y:h\xfe\x0ft\xd0\xfc\x80\xcb\xb7\xdc\xf3j\xd9 \xf3Ll\xe8\xe83\xf3\xaex\xe5q\xe9T\xde_\xa3\xa9\xe1\xff5\xbf\xac\x0ev\x91\xeb~\x880\x02}\xba\xee\xcd;\xcb\x0c\x1c\xe5Mv\xe5K8eD\x12l\x85H\x82D\x12$\x92`W\x88$H$\xc1\x91\x97\x88$H$\xc1\xd0\xabD\x12$\x92\xe0\x98\xcc\xa9L\" \x12Ip D\x12$\x02\x07\x118nE\xe0 \x92\xe0\x88\x10I\x90H\x82D\x12\xa49\xc6\n\xcd1\xb7\x9cc\x88$\xf8;$ z8\xa5\x07\xd3\xec\x98\xce\xb6^E9\xba\xd2!\xa2 \x11\x05a\x8e1\x89(\xe8\x85\x88\x82\xa3BD\xc1\xc1\x07D\x14\x0c<\xbfKD\xc1.O\x01\x86\xcd\xef;Qh^Yl1<\xcf6\xf7\xbc\xa2\xae\xdb\xd2d\x06\x85#B\xe3\x1ck\x11\xa1\xd1\xcag6\xee4\x15\x8f\x08\x8d\xe7\xb0\"\x11\x1a\x89\xd0\xf8\xcfJh4\xeb\xdaz\xdf\x90\x19\xdd\xb5-K\xbb\xdc\xb5\xf1\x87\xe9\x03\xaa\xed)\x85\xc0\xdc*\xb9\x1b\xac\xc8X\xf9\x00\x91\xbf\x1b\xa1\xb7y\xc5n|\xd6zl\xc4\x176\xd9\x1f\xf0s\xbak\xb1/S\xbe\x1e\x9d\xf4<\x15\xf0\xfb\xfc'=\xd3\nj\xf0\x94VP\xbf\xf1\njx>\xf2-O3\xbe\xed\xcc\xe1c\xaa\xa9\x93\x87\xf27\x86\xf99\xa4\xe2\x99\xacr\xe5G\x8avu\xd7g\x1e\x85\xa7\x91\x01i\xee\xce\xce$H\xf4\xb8\x1bm\xfe\xf2\xd5\x19\xdak\x14GL\x990\x00s\x02}\xaa\xbb\xc8\xfb\xfc\xc0\xe0\x97fj\xb0\xbc\xf8\x86b$\x14\xe4<\x139\xcf\x91Oc\x7f\xf4W\x99\x85 .\xa2\xcc*\x9cC\x8c\x07\xb7:\xc0SS\xc4p\xc2\xc6k\xf2\xbd\x9e\xa2\xa7\xf5/s\x1d\xcf\x9e\xdd-\xb3tw\xd4TK7\xd5\xdcb\xccK-\xae\xbd\x17\n\xde\xb8\x94\x9b[@\xfc\xdc\xd7\xbd\x14\xe4\xc6E\xbb\x83\xcal\xfe-\xc4\xe7n\xcf\x8a\xcd\xf6\xba\x7f\xf3\\w\x1cZ4{~\\\xf8\xc8N\xa0\xab0\xcb\xd9\xc7@M\xeb\xb6A\xec\x083l\xcb\xca\x8d\xdbG\xa4\xb8Y\x11h\x0e;\xb5\x19\xab\x9c\x14C^\xe1.\xb5\x1f\x9c\x9f\xd4l%\xb3{\x14J\x811X\xbb\x93\x0dZb\x0fY\x9c\x1d3y\xa0\x86Q\x13\xbb\xdc\xb1\xdb\xf4\xce\x10A\xf9]\x1c\xa4Ha\x94\x11\xa10\xca\x91P\x18\x85\xc2(\x14FqBa\x94\xa1P\x18\x05\x85\xc2(\x14F\xa10\x8a\x93\x14CR\x18\x85\xc2(\x8d\x1a\n\xa3\x0c\x9eR\x18\x85\xc2(I\xda\x07\x87&\xdcZ\xf5\xb9#4\xa5\xd4\xcbfI\xb3\x94eq\x98\x0e\xd7t\x16\x99'\xb0]\x80\x7f\xca\x8a:\xb7\x07-\xe3\xc1\xf9^\x99w\xde\x9b\xfc\xb8'\xa9a\x9d\x9f\xa4~\xef?5\xabT\xf79Ex\xa6\x87\x03\x8a\xf0t\x85\"<\x14\xe1\xa1\x08\x0fEx(\xc2s,I\xaaR\xdb$Ex(\xc2\xd3\x95\xd4\xe2R\x84\x87\"\xc22\x88\xac\x98\xd1\xa9l\x16y\xe80u\x07\xb9\x15?\xc8\xee\xe51Nk8\x92r\xc5\x94\xee\\\x9cF1\x93\xe9\x0eF1\x93\xaeP\xcc\x84b&\x143\xa1\x98 \xc5L\x8e%IUj\x9b\xa4\x98 \xc5L\xba\x92Z\\\x8a\x99P\xcc\xc4\n\xc5L:B1\x93\xf1\x0f(f\x12x\xfe\x87\x88\x99\x0c\x03\x07p\x8e\xa0 D<\xf4s\x05T\xe6n9\xc21\xc4\x07UV\x07?\x0d^\xb4\x16\xb8\xe8\x91x\xa6#(\xb4\xb9\xa8/S}\x8e\xc2(]\xa10\n\x85Q(\x8cBa\x14\n\xa3\x1cK\x92\xaa\xd46Ia\x14\n\xa3t%\xb5\xb8\x14F\xa10\x8a\x15\n\xa3t\x84\xc2(\xe3\x1fP\x18%\xf0\x9c\xc2(\xa3\xdao\x19F\xb9\xc3;\x8f\x9a\x08\xcd\x99\xb6\x1c\x15\xe7 \xc4\xc0\xd1n\xa4\x13v!\xf9\xc8\x0f\xed?:y\xc4\xa0 PW(\x08DA \n\x02Q\x10\x88\x82@\xc7\x92\xa4*\xb5MR\x10\x88\x82@]I-.\x05\x81(\x08d\x85\x82@\x1d\xa1 \xd0\xf8\x07\x14\x04\n<\xa7 \xd0\xa8\xf6\x84h\x0c|\x0e.\x8d\x1d\xa6\xd8\xaa\xe0K\x1c\x93\xa6\xe32>\x18\xd3~\xe9F3\xeb\xc8\x18\x87\xa0\x946\x1c\x93W\xec\xa6\x84\x03\xf7mi,\x9e\xf2\xbeQ\x83\x0e\xc5=o\x98;\x1a@ \xb8\xe8_\xa2\xb7E\x9d\xf0\xc9\xce\x12w\xbc'>O\x99\xebg\xba\xd9\x13\xce\xf4In\xb4s\x96G\x15\xc6\x1c\xe8t\xd7\x99\xe6\xb0\xc1S\x9a\xc3~\xdfs\xd8-'\x12\x9e/W|-+\x8e\xa1\xa8\xb9\x93\xc9\xf0\x18\xb1~4\xdf\xa8M\xda\xde\xfa\xde)\xfb\x16?\xa1-\xae=\x99j\xff\x14\x96\xef\n\x85\xe5),Oay\n\xcbSX\xfeX\x92T\xa5\xb6\xc9\xd9\xeb\x85\xc9\xccSX\x9e\xc2\xf2\x14\x96O2$\x85\xe5),\xdf\xa8\xa1\x90\xc6\xe0)\x854~\xdf!\x8d\xdfoX^\x94\x9b\xd3\xa2\xf2\xa6cg\x9dpz8J\"\xca\x0d\xc5\xdd\xfb2\xd5\x9d(\xee>\xe5'S\xdc\xdd\nMR\xadL\xf5\xaa?\xf8$5{\xa60\xff\\\x0e\xd6]O~\xc5_E\x9e0Q\xa0\x9b\xe9\xbc\xef\xd5\x01\x84\x8f\xf1\xf4\xa6\n\xb3$\xb0+,\xbf\xc0\xba\xe7\x8bvG\xe7\x89\x81E\x12\xfb\x03\x0d'\x83\xa74\x9c\xfc\xc6\xc3\x89\xeb\xb8\x1de\xb7\x1cP \x04\xc7\x9c4\xd2\xf0|\xb9:,E\xfeYF\x18\x9e\x7f{\xb8|u\xcf\x97\xf1\x8e\x8e,\xa68\xa1\xb6\x1dh\xa6\xf1F\x1aB\xda&\x1bW\x02\xca\x96\xe2(\x9e\x8e\xb0\x9d\x0b_\x9b\x85\xae\xc5\xb1\xb5\x08\xb26i\xcf4T\xed<\x98\xda\x19\x10\xb58\x9e6\xaf\xb4\xc1\xa6qV$- G\x8b\xa0hq\x0cm\xb2\xc4i\xf8Y\x9a]\xe6cg\xce@\x01}\xa9\xc8\xd9|\xdc\xcc\x1b4\xa00 5;\x153\x8b f1g\x00\xa6\xd0\xb2 \xa7\x00&\xc7\\+\x938\xd9d\x93\x82\xc9\x95<\xa4\xa9Iku\xe7^\xd5\xc3\xa9+\xfb\xa0\xb6D\xfc+}\x85\xdf\x954#\x9d\x19\xf9\x9a\xc6\xbdf\xa1^\x93m!\xad\x90g\xc4\xbbf\xa1]g\xc4\xba\xd2\x91\xaet\x9ck\xdax\xe7\xc4\xb8R\x10\xae3\xe3[)\xe8\xd6\x19\xb1\xadid\xebd\\\x0b1\xac\x11\x85\x93\xa8\x16aZ\xe3\x1f\xd0\xfa>\xf0\x9c\xd6\xf7s\xd6\xf7\x1d\xa7(\xb6\xaa\xd7R\xb3\xc2\x0fe{^Y\xef\xa3w\xed\xef\x9e)\x0d\x1bq\xcdK\xe8x\xdb#\xcb\xfe\xdf\xc5\xb9\xa9!7o\xb4Nh\xa0\x19<\xa5\x81\xe67\x1eh\xce~\x08\xd0\x1d\xbbU\xcb\xba\\\xcb\x15+X\x99\xf1\xa9\xf1\n\xd6uQ\x80{\xd9\x07V\xac\n\xf7AoX\xfa\x11\x9f|k_\xbf\xe7\x8bsG\x07&\x82\xc4!\xc9\xf3?\xf7\xe2\xf9\xa4\x853A\xe2Vh\xeaie\xaaW\xdd\xc5\xa9\xe7\xd4\xf1\xda9\x99\xdd\xae\x1e\x19\xb5\x9d{9s\xdc\xb6N\xe5\x0bL\xc2\xbdE\x83\xf7t3\xa3\xc1\x9b\x06\xefA\xf6i\xf0\xbeu\xaf\xfa\xa7\x18\xbcK\xfe\xc9\x1e\xe6\xb9\x14\xf9\xd4\xa0\xad\xc0\xbcm\xc3|\x0d\x9a\xdf\x1b\xa5\x7f\xe2\x9f\xf0\xf8\xcc\xdf\x07\xd6\xdf\x14\xb9+Q\xbb\x07py\xea\xdb\x83\xa7\xd4\xb7\xefB\xdf\xc6 \x82\n\xf7\xea+|\x0eU\x87\xcdS\xefm\xe8A\xf9fy\x14\xd3\xab\xf7\xf63\xf7\xfc\xcev\xf0n\xe1\xbb\x12m\x18\xf1f\xb1\x96U\xc6\x1dq\x7f\xc9\x8aB\xde\x18\x7f\xd7\xe2q\xb1\x86tK0\x9c\x02\x904\xd8\xdc\xfd\xc1F\x1dJ\xbd\xe5ZdK\xfb`\xb9:x\xbfb\x0e\xa5\xb0Q\xe3\x87\xa3\xd5\x01\x8c\xf7\x7f\xcd\xfd\x0f\xe3,\xc3\xb7\xfe;;F}{\xb0\xff\xbd\xfb\x8eH\xdfng\x1d\xaf\xea2\xe7Uq\x10\xe5f\x19tw \xa5\x85\x9c\x8d\x8e\xf8\xbe\xc9\x11\xce%=zb\xf3\xa4S\xdd\x0f\x14\x08d\xa3\x85\xda\xf6Vt\x9aL\x88d`\x1b\x0e\"\xe2\xbd\xd6\x05?\xbe\x7f\xfb\x0e\xb6\xec\x9a[^U\x93\x83\"\xc0\xcb\xc3\xcf\x97\x91\xd5\xf4\xa4%\xd3\x88\x88\xd8\x98\x11:\xf3\xe6i3n\xc18d\x7f \xcb!\x93\xbb\x95_\x1f\xcbu@\xe1\x86\xedv\xa0\xb6\xac\xe2\xf0g\xe8`\xe8\xbaV\xf0g3|\x88\x9ciYyr\xc9\x17c\xe8i\xa1\x0b\x1ei?\xb5r\xe4\xc4\x0e\x13`0`\xa8\x0b\xcb^\xcc\xb0\x11\xb5mc\\a\xf3\x8diI\xa1\xf6\xd3\x90\xf2\x1c\xfb\xa5.\xbb\xbc<|:\xf2\xe59I\x9c\xc1\x962$q\xfaD\x1d\x83s\xd0\xde\x1b.g@\x1b\xd3\xa8d/E\xa9A\xae;V\xee\xb0\x0dO\xa1\xe6\xf4Fg\x93W\xcb$)7p-*];\xb8\xb9\xde\xc3\xcd\x96W\x1cJ~\xe3\xda\xb9\x18c\xca\x0c\x9a\xfc\xc8\x1b\xb2\x12\x1bQ\xb2\xc2iae\xde1\x85\xaa\xd7k\xf1i\x01/t\xcb\xec\x94\xebhSq\xb9\xf3\xfc\x97\xb1$\x1bF\x8c\xe5\xc7dY\xbd\xab\x0b\x9bG\xa4\xfc`o-\x94tD\xcbz\x9f#\xb9\xc6|&\xc7\xc82\xbf\xd4\xbc\x12\xbc\x02%r>\xca\x05\xd2[~@v\x15\xa2s\xc0\x14\xac+\xce\x0b\xfc\xab7cR\x0c\x8a\\\xc7\xdf\xd2u\xfc\x9d\x92d\x86\x0e\xac\x9a\xe9\xc1\x8e\xdcf3\xc3\x99\x05x\xc5\xf7\x15\xcf\xcc\xa0\xf0\xcc\xccsa\x8f\x16D\xa94g)n\xb0\xfa\xbd\xfa\xc1w\xa4{\xa5z\xd0\xb3\xba\xcaY\x8e\xce;\xc9\x93\x0ej\xb3d\xdf\x14_\xfa\x8c\xdet\x82?\x9dd\xd7T\x93\x9d\xe8U\x07\xf5\x8d\xbb\x1eV\xce\xe0pO\xb9\xdcI\xb6Is\xbb\xa7\x1d\xef\xf9\xaewP\xd1\xc8W1\xe7\xfbT\xf7{\xca\x01O2_\x9a\x13~n7\xfcdG<\xad/\x9c\xd7\x19Oq\xc7Or\xc8\xc3#FwF\x8d\xb9\xe4\xb7q\xca\xc7KQN\xbb\xe5\xe4\x98\x0f? \xc7<\xf0\x9c\x1c\xf3q\xc7|'J\xdd\xb8\xe5|/\xb3\xedr_\xc9k\xa1\x84,#p\xd6k\xf3\xe6U\xf3b\x83kYzGU\xf1R\x83Qmz:j\x85V\xab5\xf7(\xe85P{\xcf\x9b\xe2\x8e\xfa\xd1\xe3\xf6\xeaJ\xb4\xf1\x8c4\x9bV\xa6g\x97a\xea~B\x1c\xda\x7f\xcf\xab\xa3:\x18Q\xd7\xab\x15+\xf1)\x19\x1b\xd3\xa0\xc6\xde8c\xfb\xbcx\xe3\xa3!\x9c\xeb;,+\xeay2lQo\xae^:6\x10\x0d\xdd4t\xa7\xfa\x8d\x11\xa7\xfa\x05\xbc\x7f\xf3\xc3\x93\x8a+YW\x19\xc7\xa1\xd8.B\xeci\x0d\xc5\x01D\xceK-\xd6\x82\xbbM\xfa\xa6\xc9\x06\xc3\xfcv\x07\x9d\xe2\x95s\x8e\xc3>5\x92\xd32Y\xc0\xaa^\xafy\xe5+\xcdm\xf4\xb4e\x83]\xad4d\xb2\xd4\x0c\xb73\x06\x95\x15\x9c)\x1dNK\x96\x1c\xee?\xb9\x0f\xd9\x96U,\xd3\xbcZ ;\xaf`J\x83\xe2\x9b\x1d\xb7>\xae\xc9\xfa\xfb7?\x94\xdbN\xc4|\x91\xcc\xdf\xd7R\x985d\xb8a\x81\xcb \x0e\x1f\x15\xdear\xe1\x15\x18\xbdL\x8b\x95(\x84>\xe0y,\xd8\x8cV\x1cp\xc8\xab\xae#%\xc1\xb2\xd8-\xf5\xf6\xe0\x12\xd3g\x17\xf0\xf0\xbd\xe2p\xcd+\xe3\xc4\x18+\x99\xe6i\xc6,\xdb>Y\xc96\xb1\xd2\xaf*\xce\xecq\xa3V\xf1\xe2Q\xb8E\xfd$5\x7ff#\x89\xeb\xba\xccl\x0f3\xe5pc\x97s\x03\xcdZ\xf8\x9a\x89\x02\xaf\x16\x8b\x0c\x97\xa6=\xca\xf5Zd\x82\x15\x13s\xd9\xaa^C\xc5\xcdL\xc4\xed\xeet\xa1}\xa2M\xe4\xaa\xe9\x97AU+\xbe\x11ei\n{#\xf462\xb9\x1c\xf6|a\xdb?\xdb\x0b\xb5\xc8\xe4n\x01/\xf0\x90\xa0\x1f\xd9\x01\xbe\xfe\xea\xebo.L\xeeM\xdb\xc4\xdb\xd2\xe0F\xe4<2\xd4`\x1e1\x7fv4 '\xdd\xf0\xd6}\xfb/s\xa3\x7f_0\xdc\xba\xdb>7#]l\x8ax\x8b\xc3\x87\x02i\xf2iF\xafr8t\xc2Cw\x06\x04\xdf\xed\xf5\xc1\x8d7\x8f\xc23\xb3\xd8lu\xf4Ts,%\x12\xfb\xfb\xa5h\x8fIP|\xc7J-\xb2@D\xf43,\x8a\x87\x92\xea\xba\xfdh\xc6\xc8\x15\x07f\xa3\xb9\x1d\xaf\xeb\xc8\xb9r\x1e\x07[\xc9XX\xd4\x9a\xc05\x83Sc{\x1f^\x94\x87\x0f\xdeg\xc3\x1d\x0f\xacZ ]\x99\x91%\x9c\xc3QU~\xe2b\x85t\xfd\x01\xd8x\xd5\x9a)\x03g?\x9b\xc3U\xdfW\x1d\xf8\xa4\x8d\xab\x19h\x9aW\xbe7\x17b\x85\xd9v\x93\x9b\x02U\xef\xf7\xb2B\xb7b\xcf\xb2\x8fO\xea\xd2\xfc\xc78\x13\xb6]\x8cwk\xe7}\x84\xbd-\xb9\x86Z\xdb\xd1\xd6\x8fY\nlh^\xd8\x01\x0c6\xbc\xe4\x15F\x06\xed\xea\xcf\x9f\x066\xaa\xcf\xe4\xc7V\xe1xz\xaf?1\xd3\xf8\xe1\xe93\xb82\xf97\x1d\xd8\x15\x855F\x17%\xbc\xfc\xf3\x9f#s\xf7wR\xc2ZJx\x0e\x8b\xc5\xe2\x7f\x04_3\x99a\xe5!\xfc\x02+\x0f\x0b\x93\x8d\xef*\xb9{\xb8\x96\xf2Q\xf8\xd5\xc5\"<)\x8b5<4\xaa\xdecA\xde\xc9\x87\xffbt=\x82_#\x13KL\xdf?\xe2\xb6\xfbz\xc2v\xff\xc1\xae\xd9\xd9\x8c\x07\xcf\xd1a5\xa9\x9c\xc1BB=\xfcN\xcaEV0\xa5&\x0cd\xb3h>\xb2e\xec|\x18\xce\xc3?\x82O\x9e<1\xcd:-\x8fo\xd9\x8e\x1b\x7f\xee\x85\xcd\xed\x86\xebW6\xceqY*\xcd\xca\x8c?|tJ\xe6G\xf5\xc4\xca2\xfe\xc87\x83o&\x9a\xc1\xd5Aoe\x19i\x086\x93\xdfI\xf9p\xb1X\x84g\xb6\xa6\x11<\x8c\xbe\x83\x1d \x9b\xc8\xa9-\xc4(\xb9\xb4&\x7f\xf5\xfa\xed\xcb7\x97W\xef~~\xf3(4\xe1\x81K\xd6v\xbax\xc26\xe9\xb89\xff2a\xce\xefe\xd8\x92h\xcag\xcf\xe1_\xf6\xab\xc5wR\xfe\xbaX,\xc2-\xd1\xe4\xfa\xc2\xf8\xf9\xe6\x0bV\x1e\xf6\xab\xc5O\xfcf\xa2\x00b\x8d_\xfc\xb7\xe7P\x8a\"\xda\xf4\xa2V\x8et\x90\xf8w\x83\x02F\xd4\xb8\x9c\xda\xb2-\xde\x97;V\xa9-+\xdeI;|\x9c\xab\x18\xa3\xcf\xdem9\xce\x8e\xcdL\xe5\xd7\x86x\xfa\xd5pn\xbd\x11E\x11:\xc6\xcb\x1f\xe2U\xab\x80G\xf7`\xc4\x0b~\xb2\xae\x8bb\x81\x0f\xcc\n\xe3\x01\xb0\x8e/`\xfc\x04wj\xd5\xa8B\xdb\xe6\xc6\x13k&\xde\xb28\xf8P\xc0Q|\xa7Y\xd9\xd8#\xa6\x82 a\xe8\xe9\xc1\x93\x07\xe3I9\x8f\xc1g\xd9\x82\xda\xdc\xf5\x91\xfbk)\x17+Vaa?=9,\xfe\xeb\xbe\xb5\".\x97G\xf5\x85\xa3\x07\x98\xd5\xfbFG\xc8Y\xf8\x8f\xb7?\xff4\xfe\xe4\xf9\xf3\xe7\xcf\xc3M\xc0|\xd7F\xc9<6k\xfcA\xeb!\xda\x95x\xad\xb8\x0f\x89o\xea\x82\x05V\x1d\xc7j\x10\xe2\xe6\xadOw\x01|\xb7\xe2y\xdezw\x17v\x015\xa6\x8e\x85\xb0\xda\xd6\xdf\xb2;v?\xfc/c\xb9\x0f.\xfc\xd3\xf8\xb4\xdd\xba\x19\xef\x1fn<{\x16Y2\xb2\xec\xa3\x19\xd4\xda\x10\xc6Z\x14<<\x11\xf9A\xf0\x8aWJ\x96\xd1^\xebb\xa7x~\xe7\x12+\xf89<\x0dkn>0m\xd2\xbf\xff\xf5\xfc)\x11 \x9a\xab\xfbh\xcb\xfb\xcf\xe0\xfeX\xa7\xed\x9baaKy?|g&\xc0},\xdfOlgt\xfeO[\x84\x7f\x8b~`\xca7x\x7fn!/\xd7n5\xdaok\xb65\x08\x057\xbc(\x1e\x7f,\xe5\x8d\xdd)\xbee\xc8\xe4 o\xec\x0ew\xae~\x93\xbf\xb0\xab\x9bA?\xb0cg';\xa6\x01\x07V\x9e\xcc6\xe9\xf1\xc4>`g\xf4\xed|+\x8b\xbc\xbb%\xddveQ6\xfd\xc3\x9dH;\xae\xcav\x99\xf1t0\x0b\x8bf\xb6\x7fh\x865o\xc2\xa3`\x9e\x8fq\xff\xed?\xff\xf6(\xd2\x91\xce\xd1\xe6\xfa \xc6\x9b\x1d\x9a\xca\xa8|\xba\xf8\xfa\xe9\xd7\xea~\xa4 \xd9\xff\xceD\x9bgn\x99\xc4\xb1\x08\x8fKS\x1c#\xdb\x0d\xbe\xd9@\xed\xa3\x98\xf2\x8f\xa2\xd4\xbf\xefm\x94\xbd\xcc\xd8\x97\x9a#\x1c\x90\xba\xd4\x18\xa0\x7f\xb6\xc7\xf1\x88\x1dE\xeb\xe2X\x9d\xb1\xf6\xf9\xb6\xe3\xb4\xda\x1a\x1a\x17\xfe\xc3\xe5\x1f\x0f\xf5\xd4\x12_\x1b\x9bw6\xbc\xe4J\xa8\xe54\x00\x0f\xb3\xb3\x16\x8cC\x85\x12=&8\xac+$8r;3\x05\xd4\xe1W\xa3\xbb\x7fP\x7f\x03F\x9e\xe5\x1c\xf6\xa1N\xb4\xac\xcbx\xe7W\xbe\xd8,\xe0a\xce\x0e\x17p\xc3\xf9\xc7Gc\xd9\xabx^c\xe4fi\x8f5]\x8a\xd2\x9a\xe4T\xebw\x00\xee\x94\x0doAj`8cX\x17\xed\xd9\xad\xeeG\xa1A\xb3\x8f\x81P\x16\x98\xe6\x87\x1a\xb9\xf3\xda\xf0P\xdf\xb8A\xd6,\xd3c\x8c\x00H1CZ#\x1c&\xd6\x12-\xdc\xef\xb0\xab\x0b-\xf6\x85\xa9N-\x81\x7f\xe2Y\xad\x83qbG~\xe4%\x1e\xaa\xcb\x99i\xc7\xf6\xb0Z3\xc8\x06\x0f\x1d\x0e\x9bz4\x98*L\xb1W\xb5\xfd\xa0\x92{Y\xe9poM\xb3CHgo`\xec\xbe\x14\xd0\xd3\xfd\xd4\x0f\x9e\xa2\xd4a<\x1f\xc7\xa9\x05\\\x96.\x98\x7f#\xab\\]4\xc9Z\xc7B\x99\x86e\xbc\x0b3&\x1b\xe7%hGP\xb0c:\xdb\x9a\xae\xbda\xb5q\xa0r\x1b\xacq`\xf7(]\xbc\xd1\xe7\x1e\xdeY\xb6\xf8\xd08]\x89\xc2oq\xf0\x0d\xf9\x10\xcb\x18\x8bd\"\xc8S\xf1L\x06Y^\xfa\x0e0m\xb0-D\x8e\x17\x86\xe92zI:f\xf8dN\x0e\xe1\xda\x83\xa7\x84k\x7f\x86\xe8\xeb\xe9\xc33\xff\xa4yU\xb2\x0e)u\x89}+\xb2\xa7\xe7\xb5\xfb\xe4\xd2\x7f\xf1=~\xd0\x8c\xdd^e\xcb+\xb5\xddu|\xac\x0ehs\xaf\xde\xdd\x91\x9biv7\xda\xe3\xe7?c\xdd\xb1\x98D\xde\x1e\x99.~\xa99\\\xbe\xc2\xc5\x10`\x8d\x8d\xe7M-\xf7\xbc\xdas]\xb3\x89\xfe\xb2\x92\xb2\xe0,\x84a\xa5\xc4\xeca\x90\x9e=\x98|]\xb0\x8dq\xf5\xd4V\xde\x80X\x83\xd0\x0f\xcc\xcf\xed[\x11\xd4\xbc\x94\xe5\xe3\xf6El\xc3a\x17\xee\xa7\xe3\x97U\x97\x91\xa5\xb7\\T\x9e\x83\xc8\x7fq$\x82\x00h\x00~\x0b\x91\xf1f\x8b \xc0\xde\xf9E\xca\xaf\xb8\xddU>vW\xc7\xc2,\xb6z\x99\n\xea\xe9d\x16\x99\n\x9d\x0c\x87\x13g\x1a\x18(Qn\nw\x10\xb5\xbd\xa0\xa58\x04\xcb\xce6,\x82U\xca\xd2m\xd6\xf1\xa5\n']\xf1\xb5(\n\xb3l\xbe,5/s\x7f\xde\xba\xe2\x0e\x1cki\xf6\xb8\xf0\xd8\xf00\xf7\xc6\xeb\x82\x9c\x89\xe2\x10\xe0\x816\x05Z\xea\x11\x7f\xcd\xca\x14\xe3o\xa0\x06\xd7[\x08p\xb6enh\xe5Ug\xf7K\x04\xae\xd62J\xb4\x15H;\xb5\xe7p\xe7p-\x98=T\xbd9r]V\xb0:`\xdd)\xcdv\xfbh/\xbd\xb5\xdf\x86\xc7&\xe39\xdfK\xd4\x18|1\xc5\x92F~\x90\xd9G\x9c\xed\xde\xb9\xd5+k\x003,&\xa6\x15[\x0b\x01\xd8;?\x9a#\xe9\xff\xee~x\x17>\xfd\x1f\xd2\x06W\xc0; \xea\xe0]\x0dV\x1e\xc3\xb7\x07\x9f\xf8\xe4\x8b\x13\x992/\xfd$M\xee'5}_\xc9:T\xd9\xd0q\\\xd3r\x97:@\xc3Q\x95u\xf7%\xe8\x0e\xd4\xd9\xd6^T\x19\xf6\xec,\x14\x0c\xf3\xc2\x05\xa2\xf3+n\x9az\xb7\xe5[^\xad\xbf\xd2\xca\xa7\x1b\x8e\x17G\xef\xde\x80\xf4f\x91\xd6\xb8\xed\xe5\x1b\x1dB>\x1a \xaf{\xef\xdd\xf3~\x83\xfc\x88\xa8\xaaBJd\x9fhi-\x1b\xa9\xfb\xa9{ \xbd\x98s\x9aE\xf7N\x08\xbf!\xc0\xde\x08\x80\x17\xdc\xd81\xbd\x90\xe5\x86WM\x16\xa7\x9a\x86\x9d\x10\x1bN@\xbc\x91x\xa5\x8b6+6\x82\x8a<\xaeR\"O\xa1\x14\x85\x19\xb0\xa7\xb8N\xd0i\xbf>\xb0\x16O\xfdC\x7f\x18\xfa\x10n\x83\xcdP}\x86\nJ\xbd\xef\x04fV\xe6;\x9f\xc7\xa66W\xbe\x1e\xddm\x1c\xb0B\xc2\xd6\xa4\x1d[BGS?qC\xb6I\xc7k/y\x84q\x13\xcb\x87vZ\xf80\x91\x05\x1c\xdd\xfcU>\xae\xe5\xea\xaeEZ\x02W)\xc3N tyJ\xe3\xf7\x97\xc0\x8cz\xc1\\\xbd\x94\xa5\x8b\x7f\xe2\\\xa9tUg\x1dn\xd7/\xfd\x9c\xd7\xfbH\x1f\xcb\xc5z\xcd\xf1\x94\xfa\xcc+U\x11\xc3\x0c:\x15\"X\xfd\xaaR\x90y\xf2\xaf\xa7\x95\x86g\xee\x9c\xef\xb9\xbd\xe2\xc5\x11\x0f\x83o\xf6\xe6\x9bq#fR\x84\xb62O\xc7\xbb&\"^I\xbeS\x9a\xf7\x940\xff$\xf7|\xbb\xd3\xe7\x0c\xaaR\x9b\x1f\xc0K)\xcaf\xbegn\"s\x1b\xcbz\xf3\x99i\x1b\xc1\xb5 4\x99\x8f\xd1\xf2\x00~\xfa\xf9\xdd\xebg\x88\xe2\xb9MM\xb6\xdd \xa4s]\x96\xda\x01\x05M\x07S\x13C\x91\xc3\x11,\x82\x1aKX\x89M\x89\xd7\x15\xa9\xe6\x02\x103\xfam\xe4Fb\x98>\xd4\x8f\xa7}\x02l\xa6~\x11n7\xbd\xb9\xb2\xc9\xb5{\x88\xfe\x102lW\x9c\x97nI\x18T8\xb1\xa6}\xc9\xca\xde\xa6\"{*\x81;\xda\xc3\xeef\x1f\xfd\xd6\xee\\\xfam\xaf\xe2j\xd3lN#\xe9l\xa6\xea8z\xa3j\xcaz\xe7\x0e?X\xee\x99\xc8\x97\xf2:tf\xc7\xac\xbc\xa7\x84U\"\xf5=\x96+_\xba\xf6(\x0c\xdb\x10\xec{\x91\xc1\xbac\x0c\x87\xb9\x85+>\x93\xa6W\x98Y\xda$9\xfa\x9a]/GO\x0d\xf9-M\xd5\xcb\xce\xb1\x8d\xdc\xef=+l#\xfb\x07\xb0\xf3t\xac\x10Y_\xb0\xa2\xe2,\x0f\x90?\xda\xe5\xfb\x92\xe6\x98QIREs\xcc@>\xdf\x1cs\xd4d1\x0e5:\xb9\xa4\x04\xa7\xc2\xbd#\xa5N\xbf\xf7\xa1MV\xba\xb6m\xf3\x80\x97\xd1Y\x1c\xb8\xcd\x84\x82\x83\xf5\"\x03\x1bd+\x9e\x89\xbd\xc0Z\xb8\xd9\x068x\x8ai\xa1\xd6\x07\xc8x\x85\xdb\xf5:\x9e-\xbcl\x9cv\x17\xdduL\xeaQE\xed\x87\xc0*Y;\xba\xd6\xf8 \xd1\xbd\xfc\xd06\x18\x06\x1bq\xedW\xf9\xa6\xfc\xc6\x1d\xe7\xb4]\x96`\xc5\xdf \xac\x88=\xe4\xb1\xc8\xd5\x93_\xed\x917\xb1\x9b\xa0;\x9d\x1f;\xfc\xa5\xe9\xc3\xec#oi \xec\x82\xb1K\x0f\x19\xe7\x85\xb4=\xc4\xf5*?\xc7\xf7@G\x9f\x8c{vgQFOsPK3\x85-\xc3\x91\xb9/\xd1b\xa78\x183\xda\\\xc4\xf9\x9b\x8aFN\xa6\xe2\xb2\xd9\xc0\xdb{^\x99?G\x07\x0b+\xa3*i\xc4\x1d<\xa5\x11\xf73\x8c\xb8\xb1+G\xdd@\xdaQ\xf6\xe5\xae\x1c\x0d\x8d\xfb\xfe'\xf1_<\xc7s\xa7\"<\x92\xcb\xce\xbbW\xe6\xd5fxo\xc3\xa3]}h\x80\xd1\xe1\xfcH\xd3=o\x8c;:\xae\x87\xcc\xd4\x95/\xd1%\\\x13;C\x9b\x8e\x8c\xe8\xc6\x97e\xab\x82G\xa63+\x93\xc9}\xbe\x19\x88F\xfb\xc1S\x1a\xed?\xc3h\x7f\xfa8{\xd4\x87\"\xe3\xec\x0f\xee]\x0f\xc0\xb4\xe3l\x8f\x08\xa2p\xfd\x89\x83\xd1(Q\xcf\x0c\xacG\xaa\xdc\x8bwv\xa0\x0d\xd9\xa9+\xb7h\x8d\xe4#\xd2\xa8\xf1;\x1a5f\x9e\xd6?8\x1c\xd6\x1d[\x1f\x1c\x1c\x1a\x06\xaf\xfa}\x1f\xd5\x1fm2\xf1\x06cO\x95<\xdf\x11\xfb\xd1\x83\x03}B\xbd\xd3\xf7}x\xbb{\x08\x7f3\xe2\x04O\x0el\x0f\xc4\\\x1db`\xba\xbf\xae\xc1\xddM\x80\xd5\xdeih\xeew\xc8%W\xe5\xff\xf7\xff\xfc\xbf\x1aX\xa6\xeb\xc8\xe1Px\x82\xbd\xcfg(Q\xa1\x15/\xd6\x17\xb0\xaa5T\x0c\x89\\\xf6\xb4\x9d\x11\x98\xaf\x87\x83\x86\x12e:\xdb\xda\x8fCIZ\x00!\xef\x99\x99\x82\xaf4\xcc\xdf\xada^\xd5{^\xad\x8bZ\xe4\xcd\x08\xcf\xb2L\xd6xRs\xc17\x0c1\x9cb\xb9\x97\xcaB\x11O~u\xbf\xcbj\xe9NpM\x0b\xcb\xbeq3\x02+\nK\xf9\xaf\x15\xaf\x1e(\xdc9\x0e\x15+7\x1c^\xfe\x00M:\x16\xa4a\x15\x876\x8b\x8d.\xb8\xdf\xcf\xed/\xab@\x89\x9c_\x84\x13\xd7[~\xc0s\x83\xed\xce\x08\xa6`]q^\xe0_\x9d\xa9\xa3\xde\x07\xb6\xe0Y\xef\xcfx\x1aqn\xd9\x99&\xe7\xf3\x8c\xff\xd34\xb8\x045\xa9-{&\x01.\x81\xe6v^\x92[\"\xc5\xed4\x82\x9by\xf3\x9a\x15\xbc\xd4K\xbb\xcc\xa0f\x12\x90?\\3\xa1\xa0\xcd\xe0)\x05m\xd2{\x0b]0A\x17L\x8c\x0b]0\x81B\x17L\x1c\x0b]0A\x17L\x84\x84.\x98\xa0\x0b&\xe8\x82\x89\xc9 =]0A\x17Lx\xa1\x0b&\xe8\x82\x89q\xa1\x0b&\xe8\x82 \x14\xba`\x82.\x98\xa0\x0b&\x86B\x17L\xd0\x05\x13t\xc1\xc4P\\\xec\x94.\x98\x18|@\x17L\xd0\x05\x13_\xe0\x82\x89\xd8\xc6\xd7#\xd2jG\xdb-\xb7\xc0\xde\x8ad[\x97\x9e\x8fPn\xe6\xf3l\xe72_\xdfwR\xbb\xe7KJ\xe4\xd7S\xd1C\"\xbf\x12\xf95!P\xe7\x85\xc8\xaf\xc7\x92X\x1fs\xccL\xe4W+D~\xed\x0b\x91_\x89\xfcz$D~\x1d{\xedl\x93\xf3y\xc6\x7fb5v\xe4\xec\xac\xc6\xae\x10\xf9\x95\x9a \x91_[!\xf2\xebyz\x0b\x91_\x89\xfc:.D~E!\xf2\xeb\xb1\x10\xf9\x95\xc8\xaf!!\xf2+\x91_\x89\xfc:\x19\xa4'\xf2+\x91_\xbd\x10\xf9\x95\xc8\xaf\xe3B\xe4W\"\xbf\xa2\x10\xf9\x95\xc8\xafD~\x1d\n\x91_\x89\xfcJ\xe4\xd7\xa1\x10\xf9u\xfc\x03\"\xbf\x12\xf9\x95\xc8\xafq\xf2kQ,\x99R\\\xbbO\xc7N\x8e\xed\x1e\x17[\xf1\x8dP\x9aW<\xef\x1c\x06\x0bV\x83\x1f\x19{T\xd8\x17E\xf1\x02\x9f\xde\xf3%\xba\xa3$\xd7\xae\x15\xba\xa2\xbf\x00\x1c\x18\x05\xe1'cNX\x92%\xbe\x16R1\xc91\xc3:{\x87\x83\\\x99\x8b\x8ci\xae\xe0f\xcb]\xdc\x8e\x1fU~\x9c\xc3\xe7\xe80\x16\x99\x97\x95\xf1 \x8a}\xb8\x87#{\xef\xd4\xd2\x03\xf0\xb2\x8e0\x18\x1eC\xcb\xc6nJ\xf9\x13\x8b\x92\xe4F\xbf\xf9\xe1\xeam$\x9f\x81\x8fz\xac\xf0\xc8\xe7\x1e\xe2\x9f\x95\xd9x\xb5\x0e4\xf9[7\x91\xa0\xc6\x04\x86\x0c\x8fj\x15\xa7\xb9\xee=|]\xb1\x9c/\xf3\xed\xbd\xf6'b&\xf4\x84\x98 iAd f\x021\x13\x82o\x123\x01\x85\x98 \xc7B\xcc\x04b&\x84\x84\x98 \xc4L f\x021\x13\x88\x99\xe0\x85\x98 \xc4L\x18\xca<\xe3\x113\x81\x98 \xc4L f\x021\x13\xfaB\xcc\x04b&\x103a(\xc4L\x18\xff\x80\x98 \xc4L\xf8\x02\xcc\x84\x93)\x02\xa2\xd4\xbc\xda\xf1\\\xb0\xea\xb0t\x07f%2\x06:\x98bW\x0bx-!\xd6\xc0e\xe7\xe5\x17\xee]\xf7\xea\xdd\xe5\x10\xf4,\xd3\x15\xfd\x05\xa0\xbb\xdb\xb1\x08\xaeY\x81\x1c\x95\x93\x15lX\xbd\xe1\x9f\xfd\x80\xab\xd3\x8f\xfb\xda\xb3\x8d;\x18 T]']\x1a_\xf2Oz\xf9\x91\x1f\xc2pj\xb4\xd0\x93A\xb9^\xc3\xfe{($\xe7s\xe1\x8f\xba1\x7f\xba\xc09S\xca\xa2\x03Wl\xc3\xdf\xf0_j\xae\xf4\xc2>\x0f(\xb3\x07\x9c\x185F\xad1\x1c\x87\x9dT\x1a8\x86\xa31\x86\xbd\x80K\xdd\x99\x05\xf6\xfa\x00\"\x84\xcc\xf6b\xc1;Yq\x8fM\x8cy0Zj\x16@\x9f\x93\x8d\x19i?ST\x18L\x1e\xad\x88\x7f\x94\xf5ne\x83\x98\x1eN\xe9\xc4\xeeC\xe5\xed\x1a\xda\x9e5\x88\xcaB\x13\xc9\x0d\xc3C\x95.@h\xd5\x1e\xb3T\x97\xfe\x1a{\x8cQ\xdf\x08u\xdc>\xa6\x83\xa26+v\x00\xb4\xa5\xea\xcd\xda\xa2\x84\xcd\x9b\xab\x97\xcd\x18\xe9\xa7De\x0f\x0f\x1a\xab\x9eq\x102\x93\x95\xd5\x81\x80me\x0b\xdfL\xb0\xc6\x19\xc1\xf0w\xd72\xa3\xe6\xf0_\xbc\x95\xbb6\xdf\xd1ub\xc5\xf7\x1c\xa3\x93\xdf\xb2\xaa\xa9\xa4 \xaf\xb3o\x16l\xdf!\xbf\xb3]\xe9\x12\xd7e\xf0\x94\xb8.)=\xd0\nq]\x88\xeb2.\xc4uA!\xae\xcb\xb1\x10\xd7\x85\xb8.!!\xae\x0bq]\x88\xeb2\x19I \xae\x0bq]\xbc\x10\xd7\x85\xb8.\xe3B\\\x17\xe2\xba\xa0\x10\xd7\x85\xb8.\xc4u\x19\nq]\x88\xebB\\\x97\xa1\x10\xd7e\xfc\x03\xe2\xba\x10\xd7\xe5\x0bp]b\xa7p\xb4\xd0\xff\xe2#\xefN\x821p\xdd\xa1\xe9\xcc\x0d\xa1\x15r\\,f\xda\x85\x0f\x17\x0d\xf4\x8e\xc1\xbb\xcd \xca\x85X\xba\xe9\xf6Sp\xfa\xcff\xbe\x93%.\xa4\xe5z\xad\xb86N|?\xbb\xd0\x01\x1f\x14\xd7\xddAQ\x94\xcflZ\x9d\xdf\xda\xd3D\xd6\xacP\x13\xc7\x89@(j2bD\x9b\xbf\x90\x1d\x07\x11\x0bW\x184eY\xefx%2\xff\x1b\xf6\xb6\x8c\x95\xa6<6d\xb4\xe5\xa57|]6\xa1\xc3\x81?{\x89\xda\n\xaeTkB\x1b\xd7\xaa\x951\xf5G>\xd3\x9e}\xf5\x9f\xd9\xb8\x03r\xc2\x88y\x0b\xb1\x13\xa9\xd6\xc5w=\xeb#\xc4Y\xb0a\xe5n\x0b\xb6\xbe\x80y\xda\xd3\xb6\xb7\xf1\x9a\xeeO\x97k(\xf8Z{\x8e\x87#}x\x9f\x11#\xe2\xb6\x83\xd8D\x8c\x9dW\x07\xe0,\xdb\x02\xdb\xef\xbf\xa0\x15\xbb\xcc\x8b\xf6\xfb\x98-;_@{\xd1\x95\xaej\x0e\x18pu'\xa34\xd8\x98\xb3 \xbe\xe8\x1aRW\x9d(\xb3\xa2\xce\x07\x1e!\xb3\xa94\xe0\xe4\xa0\xc6\x10\xea\xee\xc4\xcc\xcd\xd0\xdd\x96i\x18B\x7f\x7f\xa9\x06\xb55(\x02:\xd1\x15W\x8e\x94\x80\xdd\xab\xed\x8f\xa6\xcb-\\o\x12\x9bRV\x03\xc4\xc1\xf7\xc6~\x12\xd62\xb7\xad\xd8\x95\x94\x05ge\xac\x02+~\xcd\xab\xde\xa7\xb1\xcaso\x0f+Nt\x98;\x15\x1f\xef ==&\x0dni,\xb2\xcay5t\xd8\xdf\x8a2\xe3\xcf \x93j'\xd5c\x95\x7f\x84\xaf\x16\x7f\xf9\xe6\xac\xd68\x99\xb6\xd9\xfe\xbcl\xaf\x9b\x8a\xf06;3\x9e\xa7p\xb6\x8d\xd2]\x85c\x86O\xb5\x93\x1d^gq\x00{C\xd1\xa2\xf3uK1j\xae\xe0\xb1\xf6\xad\xcd\xd7\xa3\xa4\xcfw&\x99\xf6\x94\x9aWm\x8e\xdd\xdbw\x96\xf7\x89\x06:6q\xef\x95\xb1\xe1\x8b(D\x83\xa7D!JC{\x80(DD!\n\xbeI\x14\"\x14\xa2\x10\x1d\x0bQ\x88\x88B\x14\x12\xa2\x10\x11\x85\x88(DD!\"\n\x91\x17\xa2\x10\x11\x85h(\xf3\x8cG\x14\"\xa2\x10\x11\x85\x88(DD!\xea\x0bQ\x88\x88BD\x14\xa2\xa1\x10\x85h\xfc\x03\xa2\x10\x11\x85\xe8\x0bP\x88N\xc3]\xf1\xf6\x95]]h\xb1/\x04\xaf\xc2hk\x17bEH\x95\xffR\x8bkV\xf0RC\xfb\xbd\x0d|\xb8y\x05iB\x15\xcf\xcc+|/\xb3\xed(\x90\x8a\xf7{\xfc\xd8hp\xaf\xdcY\xf4\xd4\x94}\xd9\x96\xfd\xc8v]\x89\xc2sqp\x0e\xed\xb5\xb4\xd4\x8a0x\x97t\x9eH\xe88\x91\xc8\x89;\x93\xba\xddA$GW\xb0\xa0\xce\x0b\xcf\x8a\xfa\xe1\xaa\xbdE\xa7{\xab\xce\x88\xca\x98\x19a*G\xd3\xf1\"\xe3)\xfc\xacv\xf2\xf1\xeb\xa6\xe6\x1e\xb7m\x0e\xde\xf0LV6t\x8a\x86\x07\xe3R\xacy\xa5\xc6\x8f\x99i\xfa\xc0\x8d\xac\xf4\x16nF\x9d\x1e]q\xa6\x8d\x1f\xf2\xc3\x95\xbd#\xc8x\x88[v-\xca\x8du\xb4XQ\x18\x17\xc3%\xb8\x80\xd7\xd7\xbc\xd4u\x00\xa7\xc1H\xb3\xf9_\xa9y\x99\x8f\x03\x9e-\x87\xc9\xf9\xa2\xef\xc4\x8e?\xbe\xe1b\xb3\xd5<\x7f\xcc\xaey\xc56\xfc\xb1\xc9\xf9\xe3\x15\xcb0\xd4\xbd\x96!\xe7\x91\x97ZT\x1cr7Z\x8d%\xd8\xe6\xfe\xf1\xd3\x05<\xc4\x10\xff\xea\x00\x85\xb4\xbao\xb6L?PH\xa3P\xbcg\xdcQX\x08\xb1\x0b\x8fQ\x8c<\xdfW\xc2\xabPP\xf1\x1bV\xe5\xea\x91\x07\xd7P})o.\x1aK\x95\xd2\xd2\x9c\xde\xfd\xf5\xc5\xd5Xj\xb5\x06Q*\xcdY\x1eJP\xed\xa56\xa9f\x1c\x1cej%\xeb2g\xd5a\x01\xdf\xc9\nr\xb1^\xf3\n\xe9{\x08\x19\x1a\xb7\x13\xef\xe5\x1a\x8f\xf4[?^\xd7\x15\xbf\x001\x8a\xe7f\x08\xacZ\xf4\xa1\x1d\xba\x88w1xJ\xbc\x8b\x94!\xcf\n\xf1.\x88w1.\xc4\xbb@!\xde\xc5\xb1\x10\xef\x82x\x17!!\xde\x05\xf1.\x88wA\xbc\x0b\xe2]x!\xde\x05\xf1.\x862\xcfx\xc4\xbb \xde\x05\xf1.\x88wA\xbc\x8b\xbe\x10\xef\x82x\x17\xc4\xbb\x18\n\xf1.\xc6? \xde\x05\xf1.\xbe\x00\xef\"vt\x0b\xc2\xe1\x1d\x0d\xa7\xec\xae\xef\x85\x1bnA\xf2@m\xf8i\xe2f\xfa#p\xdfh\xb8\x80\x9b-\xc7x\x8eX\x83\xd0\x0f\xf0\\\x14\x0b\xed\xdb\x97\xcc\xba\xb6\x84b\xdf\xa8C\xec;\xcc\xfc0k\x00\xf7\xf0\xcer>\x86\x06\xecJ4&\xc4\xcbz\x94a\xf1\x18\xda\x93\x03\x1a+\xfc\x84fL}\xfb\x87\xab\xb7\xc6\xb0\xa9\xaf\xbf\x94e\xc6K\x8d1\x86\xf1\x0f=\xcc<#k\xb1\xebhF\xb44g\x90\xa8\xa6\x11a\xe4f\xd8\xce\x84\x1a\x1b\x0eX\x8fBr\x01\xc5\xde\xd1*\x8c\xd7\x01{)\x0b\x0c\xa1g\x9d\x82v^\x18Qh>i~&\x90}\xf0\x94@\xf6\xb4x(\x10\xc8N {\xf0M\x02\xd9Q\x08d?\x16\x02\xd9 d\x0f \x81\xec\x04\xb2\x13\xc8N ;\x81\xec^\x08d'\x90}(\xf3\x8cG ;\x81\xec\x04\xb2\x13\xc8N {_\x08d'\x90\x9d@\xf6\xa1\x10\xc8>\xfe\x01\x81\xec\x04\xb2\x13\xc8>\x02\xb2g\xb2,\x11\x1c\\\x8aR\xf3j\xc7s\xc1\xaa\xc3\x92ex\xa9\xc1\x93_\x0b\x99}\\\x8a\xfc\x1fa\x08\xde\xe3\xee\xdd\xef\xc1}\x0f\x8dz\x0cMv1S{\x9a=n\xba6\xce\x81\xf0\xb3W\x0fj\x7f\xe9?\xbf\xec(\x7fau\xdf\xf3&\xba\xab\xe8\xbb\xcdf\x08U<\xe9x\x85\xd3\xcf>\xb8f\xc5\x92\xe5\xf9)\xc7\x14\x00lX\xbd\xe1K\x91\x9f\xf4q\xf0\xfa\x90VL\xc6\xb8\x8a\x00\xa2t\xa8?\x10\xee=\x19_M Q\x02\xe1\xde\x84{\x07\xdf$\xdc\x1b\x85p\xefc!\xdc\x9bp\xef\x90\x10\xeeM\xb87\xe1\xde\x84{\x13\xee\xed\x85po\xc2\xbd\x872\xcfx\x84{\x13\xeeM\xb87\xe1\xde\x84{\xf7\x85po\xc2\xbd \xf7\x1e\n\xe1\xde\xe3\x1f\x10\xeeM\xb8\xf7\x1d\xc3\xbd\x1d\xa2\xdc\xd1!\xcagC\xf4\xa1\x05\xbeuUO\xe0\xde\x10\x82\x18O\x02\xc4\xb9\xd2b\xc74\x1f\xbf\xd7}i/h_\xae\x0eK\x0c@0-\xabe\x07\x95\x1d\x03\xc8\xffm\xfc\xc2\xf7\xf6\xaaw\xd6FbP\x15\xb8\xf4\x1a\xd4\xdc?m\x92l\x9b\xc6;wlx\xc1V\xbc0\xdd\xa1\x04_\x82\x0bX\xf1\x8c\xf9Y\xfb\x86\x1d@h\xc8X\x91\xd5\x05nfn3\xd1h\xcb\xba\xd3D\xc1Y\x0e\x95\xac\xed\xbd\xfc\x18\x1fV\xb0\xae\xe4\xceN\x06U\xcd;\x19\xed)\xeaa\xf8\xaf]v\x8e.\x9d\xe7\xf9\x0b\xfc\xe8\xdb\xc3\xff\xf6\xe5z\xd5\xe1D\xdcY`\xbfw\x11=\xcf\x97\x99\x14\xe1\xcb\xe8\x7f[\x105\xc2\x0fH\x88\xd4\xd9:<\xf1\xf3\x948\xd9K)J\x0b\xc9p3I\xd8K\x16l\x8c\xcbf]\x94v\x947\x13 +]\x86B^\xdaO?\xbf{\xfd\x0c\xfd.\xd7\x95\xac\x03#0\x00wYj7\xb47A\xcf\xee\xf8>\xaa\xd0z\xbb\xe3\x89)\xb1)\x99\xae+\xae\x9a\xb1\xc9\xf8\xf6\x1b\xb9\x918\x98\xb6\xed\x8c\xa8 \x83\xa7DMH\xeb\x1d@\xd4\x04\xa2&\x04\xdf$j\x02\nQ\x13\x8e\x85\xa8 DM\x08 Q\x13\x88\x9a@\xd4\x04\xa2&\x105\xc1\x0bQ\x13\x88\x9a0\x94y\xc6#j\x02Q\x13\x88\x9a@\xd4\x04\xa2&\xf4\x85\xa8 DM j\xc2P\x88\x9a0\xfe\x01Q\x13\x88\x9ap\xc7\xa8 -\xa4\xefv$w\xb4\xddz{\xfe]\xdb\xf9\x8f\x86Pa\xda\xc2\x15>\x87\xaaCY@\xe4\x1b\xa3\xe0r\xdd\xdd\xcb\xdf\xda\xd4\x8f\xbf=\x06@\x8b\xfc[\x9d\xf7|\x11\xef(\xc0\xdf\xb5LWz\x99\xb1/5h\xb6F7\xcb\x9b\xc1\xcf\x89;\x99\xd7\xc5H\xec&\x98)\x98\x84#w\xa2\x14\xbbz\xb7\xac\x84\xfa\xb8\\\xb3L\x8f\xa1\xbb\x90\x12\xfdJ \x1f\x8d\xa6g\x86V\x1b\x81\xcej\x0d\xb2\x84\x9f\xdf\xfe\xf83\x98\x06{\xcd\n^j\xebL\x04\xf4\xc95\x14{\x0b\xfd+Dz\x02\xef\x0d\x8e\x8a\x10\xe5\xe6\xa2=\xeb\xff_\xff/\x0b\xb4\xb9\xcc\x81\xc9\x1c\xd8\xcc\x05\xd4\xdd\xc8\xea\xe3\xe8\xf9\xfc\x80\x8c\x0e\xc0\xb3\x1ax\xf5x\xc5\n\xb3\n\xb51*{D\x85'\xea`$]\x94\x0f\x14\xf0O{\xa9\xea\xd1[\x0c\x9c\xbakV Y+{3@(\xd9kY0\x0c4 \xae.\xdc\x0cu\xcd\x11\x9c\xf0e6F~Pq%\xcc\xe2X?\x00-\xa7t\x1dFZ\x9b\xbd\xef\xc0uh;\x9ft\xda\xeaZ\x1e]h`\xdbm\xa3\x88(\x0d\x83\xa7DiH\x1d>\x88\xd2@\x94\x86\xd0\x9bDi@!J\xc3\xb1\x10\xa5\x81(\x0d!!J\x03Q\x1a\x88\xd2@\x94\x06\xa24x!J\x03Q\x1a\x862\xcfxDi J\x03Q\x1a\x88\xd2@\x94\x86\xbe\x10\xa5\x81(\x0dDi\x18\nQ\x1a\xc6? J\x03Q\x1a\xbe\x00\xa5\xe1$\xf8?v\xbcA\x98\x14\x108\xcb\x00\xb7\xc0w\x01\xc4\xf6`\x00\x8f.\xba_du\xd1\xd2,Z3XJD\xf3O]\x89}\xc1G\x8f\x138:F@\xc8\xf2\xc5\xeewq!@`{\xbd\xfe\x02\xf8\x1f\x1d\x14@\x07\x05\x0c\xb2O\xa8\xfa\xad{\x95&T\x9dPu+\x84\xaa\xa3\x10\xaaN\xa8\xfa\x91\x10\xaaN\xa8\xfaP\x08U'T\x9dPuB\xd5\x81PuB\xd5 U\xef\n\xa1\xea\x84\xaaO\xb6\x10B\xd5\xc3\xdf\x10\xaa\xde\x13B\xd5 U\x0f7\x01B\xd5 U\xefJ*\xc2I\xa8:\n\xa1\xea\xff,\xa8z\xfc\xee~\x07f\x7f\xde\x83\x02\xfeP\xe7\x11\x8c\x12\x12\xd4\x93_\x8fl\xfd\x8f0=\xc1s\x12\x10v\xd8v\xef'\xe8\x9eV \x95\x8b\xa6\x9bv\xdc\xbb|\xc1\xa54q\x8aAK\n\x96\xcbQE\x12\xce`AE\xff\xcbl)\x91v\x92\xf6\x9bJ\x96\xca\xe0ILs\xe0\xf1\x92\x1e\xf5WZl\xe8N\xd2\xfcd\xa0\x05\x08\x87UNi\"\xff\xd5\xb0\xc8e\x86Dn$r\x87\x1a\x1f$r#\x91[\x0b\x12\xb9\x91\xc8\x8dDn$r#\x91\x1b\x89\xdc-A\"7\x12\xb9\x91\xc8\x0dH\xe4F\"\xb7\x14$r#\x91\x1b\x89\xdcH\xe4n\x08\x12\xb9[\x82Dn$r\xdb\x87\x00\x12\xb9\x91\xc8\xdd\x94PR-\x12\xb9\xa5 \x91\xfb\x8f@\xe4\xbe\xc3t\x90\x0f\x90\xc6\x9d%;\xf5Z\x83\x93\xddbI\x9fS^\\\xc8\xe7\xbe2\xcdz\xa0lh\xbcIq8\x87lb\x06\x19\xde\xa4\x88\xd0y\xff\xeb\x08\x9d#t\x8e\xd0\xb9\x11\x84\xce\x11:\xdf\x13\x84\xce\x11:\xef\nB\xe7\x08\x9d#t\x8e\xd09B\xe7\x08\x9d#t\xde\x12\x84\xce\x11:\xf7\x8e\x10\x84\xce\xed\xef t\xde\x12\x84\xce\x11:\xb7\x0f\x01\x84\xce\x11:oJ(\x8c\x89\xd0\xb9\x14\x84\xce\xff\x18\xd0\xf9C@\xb5U~\x92F\x92\xa7\xf1I\xc9L&2\xb9\xe3\xae\xe2 \xcdT+\xed\xccc5y@\x97\xd4\x82\xd2/E\xc3\xeaL0\x98h\xac\xe7\xa5\xd1 #&\x1a\xc3\x0cRRFQ\x1a\xac\xa5\xdda\x06)L4\x86\xc3$`\x98\x84\xa8\xe8\xf7\x99h\xac\xb5\xd4\xa8\xb5\xedA\xad5\xdeT4\x13\xcc\xd4\xc0E\x0d\xc2\xa6\x1b\x04\x8e\xa7\xfa\xd9N\xfd&\x1f\x0eM#\xa6]t\xf9gG\xf8~\xaf,{\x0c&x\xe5\x85\xbb\xe9\xee^\xfd\x07t\xb7*\xcb\xde]\x99Nj\xf2>\xaaR\xb5\xb1\xd4\x91\x053\\\xcd\x8f9\x8dh|\xdd\x9fqh\xaf@\x87\xd2jkSo\xe6\x94\xc6\x16,\xd5\xc8\xa4\xb4\xd5\x1c6\xc2\xba.v@\x1cd\x1eeGfpZ\x80+\x7f\x14\xbbI\x95\xddd)\xad\x87\x95F\xa9%O\x83E\xb1D\x97T\x03\x1c_\xea\x9a\xc9\x9bU\x96m\xe4v\xf3\xdb\x98\xc2g\xf2Q\xa7\xcd\xd5XZ}\xd7L\xb3\xce\xaa\xa0-[\x96 }\xdcH\x8c]k\xaa\xd7\xd6^6JQ\xad\xd0O=Xc\xdbTkSZ\x8d\xc9\xda\n-$\xbd\xc3(\xc2`\xf1JY\xfb`\xb8s\xbe\x04$\x8eUkp\xcc\xd2\xf9\x8aZ\xc6\xbdk\x1e\x83k.\x83\xaf}J|s\x1aL[\xed?\x07MM_\x86c\x08+\xc6\x1f3S2e\n\\%\xa3\x12\xe1ZK\xbb\xc3,\xe1\xa1J\x92\xab\xf4+=\x00\xdf\xd2\xf6\x86lE\xa9\x0e\xc1E\x1b\x92\xaf\xe9\xd2}\x8a\xc3\x8cc\xc9\x81\x81\x94\xde\xd8\xba\xa4\xe3\x87\x97\xba\x8a\x98\xc32'7)\x08\x8fTV\xfc\x8e\xafe\x9b\xa8l\xdec.w\xdd\x16\x06u\x95\xe4_\x9eH\xb0UY\xe4$\xe5+\x9a\xe7u\x181b\xdbm\x99\xc6\xc5\x0e\x9aGu\x9b\xd2\x99\x9ek\xc2\xe7\x11Ky\xb9uNS\xc7\xd0\xb5\x9cnm\xca\x88\xcf\xf6\x03\xe1\xafT\xb3Z_oM\xb8\xd8\xda\x17\xd2\xffV\x9d\xb0\xce(\xf9\xb9\x0c\x86`yF\x1eZ\x14\xff/\xd5\xe1X\xc9\xfc\xe0\x19\xd9\n\x07D\xa86\x8d(li\xb4!i\xcc\xb7\xf6itA\xe9\x0b\x90\x87\x1f^\x1c\x1f\xaf\xe3bS.$Y\xe1\x15\xe3\xdb\x7f\x10\xbeU\xeb\xe3\xd7f\x81\x8c9/)?~\xf6\xacU\\\x80{\xab\x16\xa8f\x06\xfc\x96?+\xbeV\x15\xdd\x91/\x1c\xeb\x85\xf5\xfc\xecU\xa7<5E\xd1mE\xb7\xf5>\xdd\xd6\x00O\xf2vE)\xaf|\xc8\xa8\xcc\xe74\xce\xe6\x0b\xc2i\xedM4\xbc\xc9\x963\xf7\x03-\xde\xc4\xd9\xf7\x84\xd3\xb7\xd4T\xf9`\xfd\xb8v\x97\x9a\xd2\xab[\x9c\xa0\x9d_q\x82>\x84 \xba\xa2t\xaen/\xda\x9b\x9a}\x1b\xbd\xb7\x94^\xaa\xbb\x8e\xf2\xbd\xcc#\xf2\xb8\xf8\x86\xb62\x90(\x87M\xbe\xa0)\xe0q\x83\xafS3\xc4\xd4\x05E,\xe1\xf2b\xa4%\xa3\xea\x0cg\x9cFI\xb9T\xacoa\x16\xa4\x97qd(\x93\x84C\\\xd4\x10/\xbbi\xa0\xb9j\xefI\xd3e\xc6\xe2\xd4|\xdd\x96\xb1\xa9\xba\xa2\x7f|\xb0\x86\xa6\xfb\x89\x9ar\xc0\xb8G\xfb\x84\xf6\xe9\xe1\xdb'\x9e\xb1b\x9e\xe5qD\xd5\x15\xc7\xd5\x96\xbf\xcfPI\xf3p\x91\xb1\xe2L\xbcP\x9b\xa8$\x01Q\x0e\xc8r\xb8\xd8\xaaR\x12m\x9a\x98\xaa\xda\x89{(KU\xc9\xfa\x89\x07k1j\xa5\x0d\x18\xbd\x9aD\xe4\x08\xccW\xfd\xefF\xe5\xd7y\x16\x85\x85\xe5\xa5Y\x16\xc6^4\xb1\xbb\x1d\x93-\xae6@\x8d\x93\xd1\xb7r\x1dicUh\xaf:\xbf\xa2\xbd\xba\x03{5\x14;\xbd\xeb\x9b\xe0\xe55u\xbc\x90\x999|\x81\xfa\x96\x01\xbb\x90o^\xa87\xbf\xec@\xb9s\x98\xb9\x07YNoH\xbe\x9c\xe7\xa4\x18\x170+\xd3\x85rV\xe7K}neT1:\xa5\x01]Z\xfd:\xf0\xccA\x08\x8b\xb1[[\xa0\x15A3\x16m\xe6U\xb2\xb1\x1e\x03\x16PV\xad\x94I\x8a\xdb\x92\xdb\xb9\x1e\xe1\xce\xab\xc2\xbd\x13\xba7\xeb\x07.\x1b\x9d_q\xd9\xb8\x83ec\xac%\xd7\xd3R\x0d\xfbyF\xf3\xb9\xd8\x14\xbb-\xfb\xb9|\xe7D\xberF\xf33\xc6\x0c\x9f\xe5\xe1Z\xf6\xaaSM9\xc0\xae\x8f\xbf\xefR]\xca\xa9n\xe2\x1cU\x807\xbb\x90\xae\xc1q\x0f\xf6!5\xa8\x11\xf3@\x949\xda\\\xfb1\xa6)\x91\xd3Q\x98)^\x1e\x8a\xcbRS\xbe\xc4e\xe9\x8b\xd8\xcd\xa8\xbf\x06,|jK\x83\xeb][~\xb7\xeb\x1d\x9a\xc8\xce\xafh\"\xd1D\x9aO\xe9\xb7\x91\x0f?\xdcS\xf7\xa6)\x9fc`:\x99\x85\xdeq\xe57\xb1\x01\x85x\xcdl\x88\xa1\x1d_\x0f\x1a\xdb\xce\xafhl\xef\xc0\xd8\x8e\xb5\x7f\x8d\x19\x96{\x0c\xe0\xa5x\xf4B=\xa9\x7f\x7f\xb0\x16\xb0\xd5\xa1\xa6|\x8e\xf1r\x98\x0d\x8c\\\xa4\xea\xde\xb7\xd1\xe2t~E\x8b\xf3P-N``\xb6iz\xbe\x90\xc0\xac\xc7\x02\xdd\xf3^\xd5aD\xd0\x84\x18A\x13r\xcf&\xe4\x8b\xd8!\x96\x9c\xe6\xca\\\xb9m\xd4GNsi\xa2\xbe2\x8d{\xc8\x96iZ\xc3dM.\x01\xfe\xb11}x\xab\x16\x89\xa2\x1fX4^V\x87\x86\xf1!\x19\xc6\xfe{5\x0f2\x8d\x0f\xd5\xea6\\E\xbf\xed\xad}\xc4\xafL;\xbfH\x03|\xbf\xa3\xff\xb0\xbd\xa9\xfb\xc4\xaf\xe7u?R\x0d\xf0\x9aF\xc3\xe0jX\xd2(\xde\x92\xc4\xd1\\\xdb\xe1E'\x96\xfd\x9aF\x03\xb1l\x17\x9a\x8dx6\xae8\x7f\xe8\x15g\x82e\xa1\xe2J\x06.\x0d\x1f\xcd\xf3_\x99\xf6>\xd0\xe5!NW\xeca\x0cT\xa7[\x1f0\xd2\x0eZ\x1e\xc0\xef\xde\x1f\xba|\xa9!4w\xec\x12\x02\n\xc1\x9dBC\xd0n\xa3\xdd\xb6\xda\xed\x01\x16\xfbwa\xac\xef=\x942\x9a4\n~[;>\xf6\xec\xb7\xb2\xc1mC\x0b\x8b\x16\xf6wna\x1f`,F\xc6+Z\xe7\xab2\xc6\xad$\xa9\xab/$\x17\x80\x02\xe8\x06\xcd\x15\x9b}=\xc0\xdc\x8f7\xab\xa3\x8d\xbd?\xee2,\xe4\xf2\xc5\x9d\x10P\xe2\xe6\x9695\xe8X*\xddL\xb2\xe1\xa5\xe2\x1a\xd7\xf9\x15\xd7\xb8\x90\x19\xac\xe4\x04>\x9e\xfft\x9cS\xce\xca<\xd2\xf7z\xca\xe4\xa1e\x1a\xffR\xd2d\x07\xd5\x01\xd3\xd6\x85\xe3\xd6\x02\x8b\xd6E\xe4\xf6\xac\x86\xdd\xfb\xdb\xcd\x8d\xe5*\xcf\x9c\xea\x1blK^\x98K)\xa1\xf7:\x13% %|/\xc1A-,\xa5\xf0\xe8\xf8\x91LcH\xa2\x82\xe6*\xf9\xa0\xbc\xa1\x94\xd3\xb5\xba\xc8_e\xf9\xfcx\xfe\xd3c\xdeM\xff\xda\x16\xd9\xa8\xea\x9eB{\xadE\xcf\xe5\xa9R\xbf\xba*\xa9\xc9'\x84C\xff\xbd(J>\x89\xa6X\xef\xf1\xfb\xf4T\xf5D\x16\xcb7\xacL\x96\xb0\xa0\xa2@[y\x04\"\x92\xb24\x8eH\"\xe7\x90\xbd\xe6't\xb6\x9e\x1d \xd5\xca|A\x8ff\x8f\x84ENY\x01$\x8ahV\xd0\xe5SW\xaa\xcc\xd3\x142\xa1\xec8\xa2GPP\xb2\xe5P\xf2\x92\x08ud9\x8d\xd86\x8b\x13\xd1R\x9d\x8dq\x11\xa7$\xdf\x9faFd\xb6\xa3]\xa6\xaf\xb5\x11o\xec\xecU+[\x07\xb1\xbc\xc5\xbe\xe4\xd4\\6+\x06\x12\xbd\x95\x9f\xfa$\xdd\xcd\xe0GvC\xafi.\xef\x9e\xb5\x16\xf6\xf1\xfc'\xae\x17 }#\xae#S\xa7\xb0\xa0\x14>m\x8a\"\xfbt\xa4\xfe\x97\x7f\x92\xf7\x01\xa5L\xffz$GcDR`rv\n\x8d\xd8\x0b\xa4\x05\x94\x99X_\xad\xd7\xdb\xaa\xc7\xf2ky\x13/)`K2\xae\x86\x96ly\xc1\xaa\xeb'\xe5j-o\xb7\xe4@\xfa\xef\xf1\x07iY\x93\x84\xdd\xf0\x17\x8eo\xfbg8]\xd5=\x927\xf6\xe8\x0b\x90\xabN\xcb\xd5\x9b\xf3r\xdb\xba1q\xbf\xa0\x93\x14~\xbc\xbc<\x83\x1f\xde\\\xea\xec\xa2\xf2\x06c9\xc7\xe4m\xbf@\xaco\xef\xdd\xa7y\xb9\xcb\xe8\xcf\xff\xfc\xd9\xfa\x82v\xfe\xc5xP\xe3M/#\xf2\x0be9[\x96\x11\x15>\x87\\\xc2\xba\xce@-\x7f\x86\x93,K\xe2H'\xae'9\x15\xe3\x93\xdd\xa8\xdc\xa2\x11\x89\x84ma\xec\xaa\xcc\xc4:[&\x05\x97\xe9\xeb\xfa/.\x06i\x9f\x9cybA\xdd\x90\xccruyS\xb1\xa1\xdb\xc6\x1cZ\xaaIDL\x97\xc4\xbf\xafY,\xbc.\xfb\xc0\x02\xdd@i>ryw\xc6\x91)@\x94K\x8aX\xde\x01\xb5\x83\x94Rs\xa3$H\x93\x97_;z\"\xfb\x12mH\xba\xa6\xf2%9gg\xf0\xe4#\xa7pMs\x1e\xb3\xb4y\x85\xb4\x1a\x9f$%kW\xef\x179\x95\xbb\x0dS\xf0\xec\xa9#C/+\xe8\x0b(\xc4\x1a\xb2*\xd3H\xcd0\xd1\x0fm\xbb\xa22\xcfiZ$; \xd7$N\xc4^\xc6e.\xc5xd\xabU\x1c\xc5$\xf1\xace\x8br\x059\x15+\x11\x95\xa9h\x85\xfd\xd1\x95\x96\xdc\\$c\xe6\xa5\xb5\xa8\x05]\xc7i*:+\xefv\xb67l\xff\xb6\xd7\x19\x9c\xc8d\xd5\xef\xc8\x0e\x9e\x7f\xf3\xfc\xdb#P\xf7r\x89\xf1\x992\xb8\x89\x97\xd4ajd\x1be\xfb\x945\xb1W]\xf9\xe1f\xfc\xa7KQ~\x96\x90T~\xcf\xeawa\xe9\\K\xc4\x854\x1f\x1c\x98h\xa7\xb0^i\xd7t\xc2\x13\x9d\x9eH\xdd\xb2\xa6\xec\x8d\xfd\xfa\xfa\xad\xbc\x91l\xe1\xb0\x94\xb2\x97r\x9b\xd2\xeeE}\xe1\x04\xa7[\x92\x16q\xc4\xfb\xe7\xff\x1dD\x0f\xba\x12\xea\xba\xbd\x136rA\xab\xab\xe6j\xafk\xcf\xb9\xd2\x1e\x07Y\xb0k\xfbDk\xa4\x80\x12\x83\xab\xe7\xb9\x90\x96\xa9\xab\xcf\xab\x8b\xc4\xe5\x15\xb8\x8b\xb8\x907\xe1\xdb[\xd8[\x94Y\xb8H\xc2\xf4|\x00\xd2\xffi\xc5\x92!W?\xd5\xc2E\xdbW\xed\xf8\xa4\x95\xabi\x19\x9ag\xdd\x0b\xfc\xf5\xe2\xc6M&\x191\xc83\x12]\x1d\xab\xbb\xf4\x853\xa1\xc6E\xff\xb4\xd6\xde\x87\xdd\xdbb+(\x0bem\x8d\xcd\xe2\xa0\xee\xf23\x97\xb5\xafiJsy=JuG\xff\xca\xbaf\x88\xf6\xa8O\xd8_\x9f\xb9\x9c\xfa\xd9\x0b8\x13\xed\x17\x13Xw\x85TJ\x8fSx\xf5\x97\xbf8\xd6\xee\xb7\x8c\xc1\x8a1x \xb3\xd9\xcc~\x97\xbah\x0cIw\xf6\x07H\xba\x9b\x89f\xbc\xcd\xd9\xf6\xc9\x8a\xb1\xa7\xf6Gg3\xfb\xa2\x1c\xaf\xe0\x89(\xea\xa3\xec\xc8%{\xf2'Q\xd6S\xe7\xe5\xd9\xae\xf2,\xd7\xa3\x1b\xdd=\xf7\xe8\xee\xef\xe4\x9aL\xa6\xa6[\x92\xf3\x0dI.\x992\x1fSu\xa3\xf7\xb7Ky{JtU\xadTfo\x08\x8b]\xed)\x9b\xb5\xf5&N\x12X\xf4\xbb\xa5:\xb0)\x9c\xb6\xfe\xaa\x1e\xf7x\xc1\xc7\xab2If\xf2\x07\xb1\xc3x\x0c\xa4\xe1\x0b\x08?AgF\xee-P\x8d\xb9\xfe\xca\xaa\x857Mv&\x14\xb0\x17\xdf\xa9v6@V\x05\xcd\xad\x15\xc9\xd0\xd3\xe3\xe3\xc7\xfdUi\x8f\xc14Y\x06(\x80\xea9\xf2h\xc5\xd8lAr\xd9\xd9\xdb\xe3\xdd\xec\xd7GJ\x8br\xbb\xdc[\x9e=z \x9b\xfaH\x94as\x16\xfe~\xf1\xe1}\xff//_\xbe|i\x1f\x02\xe2\xbd:JV_\x0c\x92j\x0fQ\xed\xc4K^]3\xb6.\x13b\xd9u\xec\x17#^Y\xd2\xda\xa7;\x02\xba]\xd0\xe5\xb2\xf6\xee\x8e\xd4\x06\xaa\xaf8b\x89\xb75\xfc-\x85@|\xfa\x0f\xa1\xb9O:\xfcS\xf9\xb4\xcdo\xd3??\xb4={\xe1\xd82\x92\xe8J\x18\xb5:\x84\xb1\x8a\x13j_\x88\x8c\x11<\xa39g\xa9s\xd6\xea\xd8\xe9*\xcey1\x97\x1f\xf8%<\xb3\x97\\\xbd \xc6\xa4y\xfe\xf9\xf0%\x11\xc0\xd9\xaaGR\x97\x8f^\xc0\xa3\xbeI\xdbV\xc3L\xf5\xf2\xd1\x91\xab<\xd9\xbf\xf7d+\xca\xfc?\xaa\x0b\xff\xee|A\xf4\xaf\xf3\xfc\xd0N\x9e\xae\xf4n\xb4=\xd6\xd4h\x889\xdc\xd0$\xf9\xfa*e7\n\xf7\xda\xc8+R\x1c\xf4_\xfb\xe4j\x0f\xf9#s\xa1Wk\x1e(\xdb\xd9h\x8e\x18\xc06\x9e\x9d\x1a\xd2\xfd\x95}\x92\x93\xd1\x8c\xf3\x0dK\x96M\x88MM\xe58\xad\xe6\x87\xbeA\xa7\xbf(5e\xfa\xeb\x91M\x98U\xab\xfd\x13a\xd6\x8c\n\xf7\x82y&\xc6\xfd\xf3?\x7f~\xea\x98HS\x8c\xb9v\x85\xeea'U%\x8a|6{\xfe\xec9\x7f\xe4\x18B\xea\x7f]\xe4\x80\x05[6\x97\xbe8\xdd\xfb\x93\xf5\xe6\xb9\x89\xd0:\x84\xb8\xff\x98\x10w\x97\xe8\xf1\x8e\xaf\x03h\x1ee:\x80\xe8\xf1Q=\x8cT\x8f\xa6|\x81\xf3`\xca\x036\xa3\xe7\xc8\xf0\xc35\x87\xcf\x11#H\x03\x191\xa1\x90\x06\x824\x10\xa4\x81 \x0d\x04i H\x03A\x1a\x08\xd2@\x90\x06\x824\x90~A\x1aH\xaf\x84\xbanH\x03\xa9\x04i MA\x1a\x08\xd2@z\x04i H\x03\xf1\x8e\x10\xa4\x81\xd8\xdfA\x1aHK\x90\x06\x824\x10\xfb\x10@\x1a\x08\xd2@\x9a\x12\n\xc9#\x0dD\n\xd2@\x90\x06\x02H\x03\xf1\xc6T\xee\x10\xfe\x1e\x86}\xff\xfeh W4^D\xc7\xea\xb2\xe1\"'Q5N\x1a\xc9\x99x\xb9\xdd\x92|\xf7B\xe6\x0b\x89\xa5\x9e\x92\x98K\x88\xe5\x8dx\xf1R\xbd\xa7\x90RSw\x8b,\xd2|\xec$y\xf0\xa9\xfb{\xd4\xd1\x94\xe23\xa0\xc5a\xd7A{g\x92)(-\xb7\x8b\x03\n\xa9C\x9ce;#SSRz[\xe8k\xacyA\xf2b^\xc4\xdb)\xa2\xaa\x8e*\xdd7\x89\x1fR\x0b\xf2/:\xbf\"\xff\xe2\x0eP\x82\xa0\x04M=&\xfb\xf8\xb7\xae}\xf8W\x88\x15oY\xef\xc5\x0e\xe2tIo\xbd\x06\\\xff\xfee[\xefQ\x1eL\x98\x11\xf6|z\xbf\x01\xf6\x8e\x1d\xaf%\x1c`z\x0f\xaf\xccmt\xc7\x96\x8f\x06\xb7\xf3+\x1a\xdc;0\xb8\xae}[w\xb67J\x15{\xb8\x0e}\xcc\xba\x87\xebi\xd8\x003\xbfa\xbc\x98\xff\xca\xd2\xfd\xfb\x0f\x1c^\xf9\x8f\x8c\x17\xff\x7f\x96R\x87Gn\x1e\xf9\x02\xbc\xf1\x8e\n\x9a\xf29\x86q\xb4!q:\x8f\x0f\xb9\x8e\xb4\x88\x8b\x84\xbe\x80W\xa2$8}mb\x9d\xa2\xa3 :\xda\xfb\xda\x82F\x9bo\x9fg9]\xc5\xb7\x87\xd7\xfd\xbd,\x0dTq\xa2\x01U\xe5\x8fyOV\xcbZ\"\x96\xa6T\xc2\xd7\x93\xe8\xc0A}xU\xd5t\xfa\x1aV9\xdb\xc2E\x91\xc7K\xaa#Su\x8b\xe1\xc9\xe9k\xb1\xcb\xf60\xac\xb8z\x9b\xc7K\x0b\xbb\xa4\xc8I\xcaW4\x9fG\x1b\x92\xa64\xb9\xeb\x0e^\xea\xfa\xc4@\x10\xf5AX?\xad\xe5ij\x9d\xb7\x9f\xf1\"\x9a\x1f\x967\xbd\xea]\xbc\x88T\x98do\x0c?\xe6\x90\x92\"\xbe\xa6:\xa6\xc2R\xdd\xb0\xde\x02\xe5\x1c\x9f\xa8M\xbaZ\xdd\xac\xd43\xad\xaa\x9c\xd4\xf3\x8c\xe61;\xe4\x8b{=%\xa8\x1by\xb9\xa1u\xd5\xa0\xaa\x868\x85%\xd9q\xc5\xca\x85\xe7\xcf\xfa?\x9f$\x02\x91\x82\xf5\xdd-\xa8\xc4e\x16\x95X\x8d\xa3\x12\x8f\x89T\xe23\x94J\xe4Z\xea\xf8=H\xb3\xe0\xcb\x8bm$\xb0\xac\x1b\x1a\xaf7\xd6{ \x94\x04\x16\x15\xf8\xd9A\xae\x9e ];\xe3\x13J\x02k\xe6 \xe1\x9b\xb9L\x08<\xcfr\xb6\x16\xda\xb1o{\x9a2\xa2\x82hC\xa3\xab\x8c\xc5\xf6\xdb\x1c\x94\x84\x16-\x0f\xc6\xcc\x0b\xa6\x0f\x9b\xcdsRL3Lj%\xcf5\x93t\x1e\xa7\x95~&\xa9\xa2\xe5\xa7;\xbfxS\x83\x03[\xb1`,\xa1\xc4FZ\xd5V\xe4'\xed\xf0\xd5&AaH$\xa7F\x11\x92\xaf\xdc[\xca\x92f\x8c\xc7\xc5\xfc\xd0K>B\x96\xba\x13U\x87j\x9d\x8cx/\x85\xcb\xda\\!\xb8\xd8H\nc(\xfc\xd8_\xca\xd8\xce?\xe6\x8d;\xbe\xdar\x13\x17\x9beNnH2\x8f#r/=;}uR\xf5N/\xc0\xf5\x82\xad\xbd\xe2x\x91Hj D,I\x84K\xe3\x18^9\xbd!\xf9\xb2\x7f\x91_Q:m\xbf\x066~\xbb\x8d9\x8fY\xff\xa0lL\xbcI\xdb8\x95\xee\xf5iW \xa9}d\xa9\x13\xb0\xb6&\xe5tI\xb7\xd9g\xeb\xa1F\x87#\x1a_S\xae\x9b*g\xb7\x9c<\x15\x15e\xf7\xd8A\xff]\xc5i\xcc7tY\xfb\x1e\xbd\x8f\x8aO]\xa6q\xb1\x93W3\xcf\x8d\xa5\xf8\xfc\xbd\xd6\x9d\x95^2\xa9\x9b Y}!\xf4\xbe\x14L[\x14e9\x809x\xef\xe2\x1b\xd3-\x9c\xea\xc3D\x84Kn1i\x15p\xa4~\x0b\xab\\\xeb\xce\xd8:{\xcd\xbak{5\xd7\xa3n\\\xbd\xbch\x9d\xd1nK\xe7C\xe7\xb4(\xf3\xcf8\xba\x97\xb1(qQ\x16\xf5\xa7^\x90\xe8\xca\xc5E\x80f/\xa4J\xaau\xc4\xae\xeb\xce\x0b\x9d\xd1a\x1b\x04\xd6\xe2\xf6\x06\x87k| \x0d\x1bg\x168M\x97\xba\x8f\xe6;\x85W\xdb\x1d\x19\xaal{\xdd=\x95\xb6\x16\xe0\x90\x11\xa22\x04lX\"\xb7L\xf71H\xde\xb1e\x99P \x91\xbc\xc2\\\xd8y\xb3=nY\x06\x7fO\x84H\xc3\xa1xerz\x88!\xe8PX\xbal}[ \xd8\xf7\x93|\xf6&\x92\x18A\x0fQO\xd503\xaa\xf0Y\x109K\xc5\xa2\xe9\xb1\x99\xe1\xca)rJx\x99\xef\xeeE-\x1f\xf4\x01\xcc\xee\x9c7\x93\xa1`r>\x18sS0\xb5\x92\xda\xc7D\xd7\x00\x07Y\x05cU\xd4tU\x14\xb3\xb8\n\xb4A\xcc\xd5\xe1\xa7#\xe7\x071+}NE\x93\x0b\xe1\xd7\xdb\x9f\xddP\xd8\x928\x0dY.T\xae\x82\xda\x7f\x9b\xe0\x83\\n\xa8*\xb6\xb1\x0dY\x90\x84\xa4\x11\xdd\xf3\xd4zK\x92<\xc5\x86\xc3\xe5\xda\x1f\x0ekV\xe33\x88Bk\x93\x90\xe5\xf4:f%W\x81\xff\xde\x82\xee\xa4A\xfa\xb4b\xb7a\xbd/n\xe3tz\xad\xb8B\x94b\x18\xc5)\xb0Rx\x97]\xd5-X\x99.\xe1kI\x9a\xcd\xc5\xd6f\xa9\x88\xd3\x0b\xfb\x18^\xb3k\x9a\xa7b\x1c\xd8\xc7\xae\xa94NS\x9a\xebJ\"\x92\xa6\xac\x00z\x1bQ\xe1\xf3\x8a\xc9#\x7f\xe8\xd7\x12\xb9\xbd\x7f-\x91\xdb\xcf\xa0%r{\x80\x96\xe2t._\xbe\x7f]\xc5\xa9\xf8\xffi\x98\xb2\x16;\xa7U$\xcb\xad+\xb7\x82f\xf3v\xebQ*\xe2\x0d\x1d\x1d\x05X%!1\x87\x0dI\n\xcb\xf9h1\xf4>\x93R\xc9\xed\xefY\xa9\x1a\xfe\xe6\xf3\x8c\xe6r\x83R\x1c\x82\x82\x05\xc5l\xc3\xf5\xae\xd8\x1c\xc2[7\xcd\xd4\x91.\x92\xc2B\xaf\xd6q\xeap\xe5\xeb\xc5\xd7\xaet\x96C\x99\xd6\x0fJ\xbf\xac\xb8\xed}\xbc\xfe0|NS\xb2H\xfaR\x1b)\x19\x10mt\xed\xe4\xd2e\x1c\x11\xb1m\xbb\xd9Py\xd2\xbb\xd1\x84v\xf2\x84M\xce\xca\xf5F\x8e\x11kq[\xe9\xcb\xf6\xfe\xbc\xe7h/\\\x93\xcb\xdb\xf0\x93:E\x07\xac\xa8\x18\xd2\xa2<\xdf\xc8\xcf\xa9:\xf5\xaf\x1fW\xc7\xfe\x9b\x03\xfdH\xcd\x01M\xde\xb7\x96\x96\xc6\xb6\x0d|\x00\x02\x13\x82\xbf\xa8\xf6y\xa3\xeb\x013\x06ju\x9e\xabNg4\x8fhZ\xc8\xc3\xdb\xbc\xce\x0b\xa6\xd1\xabof\xcf\xa5Z\x9e\x7f\xf3?\xed\xa7\xed\x94\x8b\xac\x93o\xcdy\xa1\xd0\x80\xb9\xfb\xdah\x18\xdc`\xc7\xf7\x17\xf2\xbe\x9a\xbd\xd5\xe6Ho\x97\x96\xb5w\x18\xe0G\x1bi:\xfe\xbd\x0f&|;ov}\xc29zb\x1e\x83XMI\x99eB\xcfI\xd9\x0fI:\xd8\x10\x0e?]\xbc\x03]qo\x99\xca O\xd0&gf\xaa\xa0\xe6\xc6\xbc\xce\xe9a-\xcb\xba\x80\x18\xba\x05\xcb),IA\xc4\xb8)\xa3\xa2\xcc\x15\xc4\x9e\x93\xe8\xaa\xf9\xcdD\x13\xc4\x1c\xee\x9a\xa7\x8c\xac\xf5a\x80}\x9d8\xa7\xab{\xa2J\xae\xde\x15\xdd\xf5+\xda;\xd0\xbd\xb9&Z\x9c\x9d\xff\xb6}\n\xd3\n\xa1j\xa1w\xf1O\x9d\x0f\x86p\xae\x92\xde\x9c\x915=\xa7\xbf\x94\x94\x173\xf5\xbb\xa50 x\xc9bD\xb1Bq\x14\xb6\xc24R\x99eE~\xc6\x19\x9c\x16\x8d\xc3MY\xb1\x83\xd8\x96p\xac\x95\xe2d+>\xa3N\xb9\xd3w0On;\x0fT\xa6\xc3-\xf0\x8di\xb5\xeb\x15Z\x94\xff\xa8=\x03\x93%\xa8\x91\x92\xc6\xd6\xdf\xa6\xa2e4g.\x0b\xb3\xadJ7\x84\x03\xa7\xc5\x11\xc4\x057\xc9\x8f\xb8\xf4\x15Vq*v\x1bB\x7f71\xdf\x1f\x1f\xfe\xf31\xaa)\x8a\xdb\xa5z\xd5:\x8c\x16\xa7\xb0>?{U\xd1\xbfj\xff\xe7F|\xb3\xbe\xcf\xd3\x1f\x1d\x8dX\xae\xca\x90|\x88\\u\xbe:7&\xcc\x95\xcc\xea\xd2\xd4L\xaf:\xcc\x1b\x17l[\xb7\xdby\xfc9\xa7\x19\x95\xf1\x89\xefI^}$\xcfa\xca\xb6Z\xe4\xf8\xb6\x1d\xa7\xac\x0fp#\xa3\xb5\xf3+2Z\xef\x99\xd1Z\xaf`\xc2~\xdb\xc6ag\x8d\xd0\x8b\x02\xd1\x96E\x81\x0cj\xea7g\xc1\xacZA\xa4\x89Xw\xf2m\xc9%ALm\xdf\xaa\xf0!Mv2{\x1e[\x01[\xad8-\xc4\xc6\xa7\xdd\\h\xa4A\xe4\xb4hN\x8e\x83\xef\xc8\x06\xdb\x9a\xda\xa3D\xd5>\x9b\x1e;\xf6TwF\xaa2-\xb74\x8f#\xf3\xb7\xe6^Q%\xaf\xda\xd0\xd4(\xbeL\xab\x15\xa3c\xf2Nei \xe5\xbcV\xa1\xca\xb0Ur\xa1\xea+:P\x9f\xed\xe2\xefX\xb9\x9d5\xb6G\xbdI\xbc\x8dC\xb5+\x9f5\xce\x8bm\xe9U\x8bWs\x04\xab(\x86\xf8\xb5UZ\xa62G5\xfft\xba\x82\x84\xae\n\xe3\xaah\xdf\xc5d\xaf\x90\xb9\xf9\xd4\x04Q\x95\x08=/v@I\xb4\x01\x92e\x9fQ\x8bM\x07\xa2~\xdf\xa5\xcb\xc6\x1bB\xa3r\x842Ik\x97X\xba\xf6\xd4i\x95\xa5SkP>\xa8\x07R\xb3\xb88\x8d\x92r\xd9Y\xf5 h\x98j\xd5\xfb\xc5\xa4\xc5n\xb8Jb'Y\xf7\xa9\x9b\xcc\xef\xe3)\xef|\xadN\x17d\xbcU\xac\xa5jm\x95\xd3\xab\x9e\x8fb\xca\xcd\xf4l\x8a\xd7)\xcb;\xbb\x083\x1b\xdbU(\xcd\x1c\xfaa\xbb\x1b\xa8\x9e\x0f\x98\xd3k\x9a\xb7^u}<\xfdt\xf7\xc3\xc5\x0d\x074\xa7\xfd3\xa1U\x8e\xa8\x83*o\x8c\xe5K\x9aw\x8f<_\xc4iD_@\xc4\xf8\x96\xf1\xaf\xf9\xf2\n\xbe\x99\xfd\xf5\xdbI\xb51\xe6\x98\xc4\xf1o\x86\x9f\x1ft\x02\xae:)\xb1\xd8A\xbct\x9e\x94\xf8\xcat\xe1K=&1jw\xea>\xed\xe0uQ\xcc\xd6{\xc0I\x07\xff9\x87\xd0ZG\x9eq\x088\xe1\x10\xda\x02\xeb.q\xda\xb3\x0d\xdc\xcd\xf8\x0f>\xd7pp\xb7F\x9eh\x00\x0b\xa5P'\x1aw\xf7\xces\x9a!\xb4O\xd3\x9cd\xf0\x9dc\x08m\xcd\x903\x0ca'\x18\xbc5\x87\xc7>F\x9f]\xf0\x9d\\p\xed\xe1\xc0wja\xa2\x88\xb9\xef\xbc\x82W\x8f\x10vV!\xa8\x1c\xff9\x85\xa0b\x82>.\x04\x9fP\x08\xaas\xec\xe9\x84\xc1\x85\x87\x9dL\x08+v\xe8\xa9\x84\xa0R\xc7\x9fH\x08*>\xf44\xc2\x88\xb3\x08\xfd.j\xeb e\x11\x0e8\x87\x10t\n\xc1\xab\x08\x83~\x8c8f`\xc5i\x86\x1c&\x08m\xa0u\xe5\x1cDe\xf7\x1e#\xb0\x1f\"\x08:B\x10\xda\x9b\x81\x8dv\x1c\x1f\x18rx \xb4u\xd3\xe8\xda\x7fl\xc0uh`\xc8\x91\x81I\xfbu\xf8a\x81\xa0\xa3\x02c\x0f\n\xdca_]G\x04\xec\x90U\xe0\x01\x81\x89\x8f\x07\x04\x1e\x0e\x98\xf4h@\xc8\xc1\x80\x91\xc7\x02\xa6\xff\xaa\xee\x03\x01u;-\xe5\x05\x1d\x07\x98\xf40@\xf0Q\x80\xe9\x0e\x02\x0c;\x060\xe2\x10\xc0\xf8#\x00\x07\x0f\x88@R{{\x81\x17S\xdf6\x93\xc2\xa8\xff\xc1\xc4\xff\x03h\xff\xf7\xa5\x9bP\xc2\x7f \xdd\xdfC\xf6\x1fE\xf5?X\x15#I\xfe\xd6)\x15F\xf1\x9f\x98\xe0\x1fN\xef/\x82\xc9\xfd\x81\xd4\xfe\xd0\x0fp \xad?\x9c\xd4?\xa4A\xe3 \xfd\x937%\x9c\xca\x1fL\xe4\x0f\xad\xde\x1e\x93\x9b\x96\xc2\xef\xa7\xa6\x1fH\xdf\x0f&\xefO\xa3\x99\xe9h\xfb\x81\x9a\x19O\xd9\x1fH\xd8\x9fF?\xd3Q\xf5\x9d\x9c\xf2\x89\x19\xe5.>\xf9@\x8a\xfe4j\x9c\x8e\x9c\xff\x90\xd4\x18L\xca\xf7*1 @\x19\xaa\xe7\x03\xc9\xf8~*~0\x11?\x98\x86\x1f\x1ch\xb3\xef\x9c\xa6$\xe0[\xe9\xf7\x03\xc8\xf7\xba\xc1V\xc2\xa9\x85x\xdf\xff\xf0(\xd6\xbd\x95]\xefE\n\xfc8A\x10\xaf\xde;\xe8\xa1\xd6\xd3T\x9c\xfa\x91\x8c\xfa!Mu\xb2\xe9\xa7\xe5\xd2{\"\xb4\xc3x\xf4\xc1\x93,\x90\x94\xee\xe7\xd0\xbb\x18\xf4S\xb7\xa6I\x91\xb7\x19m\x83\xc6\x8f&\xc2#\x85\xb5\xf3+RX\xef\x99\xc2j\xf8(\x8d\xd2\xee/\x19\xabZ\x17M,\xe3\xf87\xd1\xa4 \x9a\x91I\xcc\xaaB6&\xc2i\xcf\xce\xdaz\xee+\xd3\xa7\x07J<\x12\xea\x08\x9c\x00h?:\xbf\xa2\xfd\xb8g\xfb!\xfeo\xa3\xa4\xfb\xb3\x1d\x92\x1e\x9f\x91\xe8\x8a\x16sN\x7f)i\x1a)\xb2\xa2fd\xfd\xeb\xf8\xb7\x8c\xe5E\x18q\xb1\xa8I\xf4\xa2@0\x05J\xef\x90\xa5\xea\x7f \xac\xe3k\xaan\xeaN\xa9q\xb3Zv\xe6=\xbd-\xced\x11\x17\xba\x84\xaf\x8c\x12\x1e\xa8\xb11=\x1d4c0\xc9|S\xd0\x1e= {T\x1b\x80Fy\x07Z\xa5\x06\x8b\\Y\x94\xe9\x8a\x1e`\xf0d\xaf\xb9\xdd\x96\x9dUZ\x914qc\xd6je\x19\"\xa6\xf2\xbaz\xfd\xa4\x0bQ\xd9\xe9\"\x92e=xG\xa9\xa9\x91\xa6\xb4\x1a\xa3\x1e\xd2\xf7\xf3\x91$\xe9UJ\xcc;Z\xa9\xc59\x7f\xdc\xb3G\xb3\x86\xe6\xc2p\xe4\xd7\xf7p\x88V\x1dPU\xf0\x0c$4]\x17\x1b~\x04\xb1\xe1\xd7\xaa\x1bL\xfa\x82T\x06}\xba\xf3\xa6V\x84\x96;\xae\xa7\x13\x89\xbe\xf3\xfa\xcct\x9d\xd7\xac\xac\xbb\xaa*\xa7qzM\xf9\xdd\xebP\xc6\x9f\xe3-ee1OI\xca\xc6b\x9d\xde\x8a\x16\xe5jE\xf39\x8f\x7f\x1d\x0b\x19x\xab\x88\x17Q\xd5\x97E\xc2\xa2\xab;\xeb\xcc\x8a\xd2yu@\xe0^\xd4\xb7%\xb7:\\'\xbeXD\x92D\xe1\x07r\xb6\xdfU\xa5\xda\xd3\x9b\xf7\xe0\xae\xf3b\x93S.\x0c\xee\x9dW\xbe\x0fm\xde}\xe5r(\xdd\xeb\x07\xaeX\xc0\xf3&\xe7\xf8\xce;ZW\xabh\xf3\xf3\x88dwS\x97\x0b\xdbP\xaeHu\xa5hg\xf56\x90\x85m\xf5V\x898 ^\xbe\x80\xe7\xdf\xb4~u\xa7j\x90~\x98\xaa\xba\x99\xad\xa1J\xcb z\\U.\x1f>\xd6\x0d=?{\xd5)K\xdd;Z\xb7\x0d7I{\n\xc2M\xd2\xe4\x9b\xa4\x01;\x8b\"'K:\xcfYYP\xc7\xfe\xa2\x8a\xbe\n\x1fZ\xbc\x01\xea\x0d\xfd\\k\x1fq\x92$\x97\xe2\x91\xf3\xe6\x13\x0fv\x1f\xb1\xdf\xff\xd6\xaf\x9fa@\xa9\x9d\x83:\xf86g\xe9\xdcq\x16UI\xc0\x18\xd9;\x97g\xcc\x97\xaa,\x84o\xb6\xdf0\xfd\xdf\xd34\xadNB!\xe3q\xcd#{\x9d\xb6J\xd4\"\xa8\x81\xea\xdbN\xd3>\x07P\xbbw\xda\xb1\xadT5_d\xab\xc5~,+\x0b_\nv~C\xb2\xde\x1f\xeb\x13\x91\xf7\xdc\xbd\xe61\xce\xea\x1c\xe5^\xe7XY\x88\xde9(\xc3\xfa\x10jX\xff&\x1c\xf8\x8e\xee\xb5\x07\x1e'[\xc9\x16h\x0c\xc2\xfdN\x8b\xbfX\xcb\xb3\x0fO\xd9\x1f\xcd0\xb6v\xc9\xc3\xf4\x90\xb4\xfe\x93\x9a\xa5\xdc\x9a\xb5\xea\xae\xf5\xc6\x08\xf4$p\xbf\xdc\xc4\xdc\xa4\xf9hv\xbc]\xa0:\xb6\xa5\xa8\xcc\xaab\xe7\xe78\xf8\xd0\xa8\xefN@\x08\xfb\xf2\xfa\xa1C\x0b\x01\xa0ii\xbdHM\xc9\xd7\xf0\xfa\xcdOo~8\xb9<\xfd\xf0\xde\xf3\xe0\xdb7o\"/H\"\xe3\x9e*\xe1q\x99-\xd59|\xfb\xcd\x18\xa0\xbe\xd9\xe9\xab\xff\x9f}\xf0\x8a\x16\xceUY\x92%\xc0\x0b\xb2\xb5\xc0\xe7J\x02\xbf\xd9\xd0\xb1\\\xa6\xf1-\x88\x06H\x1e\x18\x8dX\xba\xe4u\xa6a\xa5\xc8\x1b\xc2e.\x01\xd3wk\xa9[r;\xd7\xe7\x1e\xe7\xf2C$\x8cO\x94\xd5-t4^\x1a\xda\x83\xa2\x04\x98Mm\xe3\xa0\x1f[Uy)6\xc4\x1e\xa4\x07\x95\xd6X\xc5\xfd\x131\x1a\xe34\xc4W\x003\x9a\"\x92\x15eN9,\x98\x0e\xb9\x0bm(\x87\xce\xac\x062\xf3\x89J\x9d\xe4,P\x8dA\xf55\xea|\x98\xceW\xbe\x99}\xf3\x1dl)I\xb5\xed\xa9\x81\x97\xa6 Wgt\x85\xe1\xeeO\xceZ\x8bLtN\xe0\xbb\xff Kz\x1d{\xee\xce\x82\xa6\xe7j\xb24\xc8\xe9e\x1f;q\xaa\xc6\x8c\xef\xec\xe4\xc4\x03F,\xc7\xe2+l\xc9\xad\xca\"\xce\xcatI$\x94];@5\xb6#?\xbe\xab\xd9O\xdcR\xcf}\xec>\xf4`\xb9[\xbac\xf3\xba[\x0fc\xa0\x1dz\x15\xbb\x01^G\x17Pg1\xa7\xbc\x88\xb7\xc2\xad\x97\xfb\x90\xd1\x05\x1e\x18\x9fr$q\x0fx;JH\xbc\x9d\xc7|\x9e\xa9;4\xdc\x05\xb9\xb2@HV\xfc\\\xe5\xb4\x19\xdd\x1c<\x00\xd9\x14\\1\xeey\xc5p\x1d\x80\xdc\xbf\x87\xe3\xfe\x8e(\xaaYZ\xe5r\x12\x16Gn\xc4\xd5\xeb\x19\xe3\xd5\xc4h-:\xaf\xc4k\x1f\xeb\xb7Zit?\xe3\xca\x83\x93\xb9\xf3+N\xe6{\x9e\xcc\x0b\xb6l*G\xcc\xe4\xce\x9f\xac3y\xa2A\x17\xe5\x94\x14\x03\x87]\xb5\x93\xea\x8d\xde;\xb5\xe4\n2|\xe44\xaf\x1c\xd3s\x1a\xb1|\xa9\xf6\xd8Wt'\x93I\xf6\xbcS\xdf^5\xfbM\xae\xfc\xff\x9a\xfdf\\\xab\x7fu\xe7W\xffy9g{\x9d\xd1X\xbb\x0f\x17`f\xdf\xf1u\xbf\x91m&\xe8\xf2\x18\xd6\x9f\xe4\xa3\x17\x8dl_\x9f\xd1\x9a\x82;\x0f\x85\x0e\xf1\xdbt5\xea\x00\xf6\xf8\x8b\x83\\\xce\xae\xf3U\xff\x0d\xc0\xafX\x9cV\xc7\xd9\x88\x8eHI\xd66Q\x0d6\x97\xf2\x91t)\xb7n\xb2)\xdd\xeb\xe2\x94\xbc\xffp\xf9Fe\xca\xd5\x90\xee*\xa6\xc9RR@S8M\x0b\xb8\xd9\xc4\xd1\x06\xe2m\x96\xd0\xad\x8c\xc8\xa9x-/zA\x1auR\xad\xaf\"\x1e\xafS\xa2\xa2\xdd\xc6\xe2\xc0b\x07k\xb6fY\xce\n\x86\xa7\xdbp\xd1\xc4E\xd3\xc8\x98E\xd3fq|\xeb\xac\xc5\xc6\x1d\xb4\xc2t\xd2@\xfaV\x99\x8bw_\xd0B#\xf1\x05\xa2H\x82\x11\x13\x86\xb1\x0f\xbcT\x05w\xe3\x08h\xdb:\xbf\xa2mC\xdbfdZ\xdb&l\x90J\xb5\xeb\xb8\x8f\xf2\x10#\xa7\xaf\x16 1p\xe7\xf2\xd1\x07b\xdd\xd0\x06u~E\x1b\x846\xc8\xc8\xb46\xc8q\xf8\xd8\xf1\xd6\xdd\xec\xfas\xba\x8eyA\xf3\xee\x89h\x87\xd1R/<\x9c\xeb\xb6\xd1ru~E\xcb\xf5\xc7\xb3\\\xee\x13J\x8e.\xbb\xafq\xf7Y\xb1p\x07\xca\xc80\xb7\xcb\xc8\x18\xcb\x1ct\x9d\xba\xe3}\xff}\xdd\xce\x91\xe4\x0c\xe1\x06]+\xe5(>\xe8\xf2%\xc7\xfb\xe172\xa8B\xfa\x91\xef\xc1\x97\xc8yz\x14tM\xcdX\xa5k\x08\xe0qJo\x8b\x17\xf0\xec\xbb\xc7\xfaW\xdfR\xb9%\xf9\x15-\x8e\xaf\x9f-hA\x9e\x1d\xd3[u9\xf4\\Oi\x19\xfeT\xef7\xb82\xad%\xf3\x8d~\xe5\xbc\xf1\x86~\xee3.\x9b\xe0^\xc5\xec\xddl\xca\xe7X\x1d\x16\x84\xd3\xb9\xe2\x06G;\xb7\x91?\xf8\xac\x88\x93]\x02\xbe\xd1h\xe4`\x8e,\x04!\x00J\xa6\xc4\x01\x94\x8cB\x03\xac\xa5)\x94\xc0\x81 ( G\x06\x9aR\x0f[\xc7\xd9\x01\xd7\x9a\xc1\x8a\xbe\xc4\xa7\xce\xd1\x84X\xd1\xf0\xd1q\xb7X\x11t\x95\xb0w~O\x92M\xfa\xecr3+\xa3\xe2<\xf7df\xec+\xec\xb8\xaf48?{\x85y\x1a\x01\xf7+\xf7\xbf_\xf1\xd3\xab:\x8eMP\x1e\xf8:\x07\xbb\xcfj_\xdc\x90L\x1f\xdc\xe2\xc0c\x9dyA\xe5j2^\x9dz\xa5e\xba/\xea\x1c\x05\x0f\xd6d\xab^\xcd#\x16#\xbb\xebw\xe7\xb1\xf7[w1,\x87\xd8v9\xfa\xd1\xb2\xa3e\xef\xfb\xfd\xbe-\xbb\x0bA`\xf2\xa6\x12a\xcalc\xb0~\xa2\xe5\x7f\xca?,h\x9c\xae\xd5\x13t\xa9\x0f\xae>\xfbFJ\x99\x94)y\xda\x1c\xa4q\xfaB:\xf1\xfd\xf0\xc4\x8a$\xdcsp\xa3q&\x84_\xcd\xbb\x899Z\x8d\xae\x1eh\xb5\xb9\x95\xd0Zv\xa0`jEj\x9b\x84\x83[j]K#\x99\x16\xe5\x98\x94\xc5\xa6ZGu\xa2\xc4y\x9c\xaeX\xc8)H\x9d\x14\xf14]\xb1zS\xa4\x13%\xca\x83\xe8\xda\x8ar\x19&g\xb2\x93b\xd3d\x9e\x11\xed\xad\xf6M-\xad=\xbe\x88\xd3\x88\xbe\x00\xd5\xca\xaf\xf9\xf2\n\xbe\x99\xfd\xf5\xdfL\xc0\xba\xb5P7Z\xf1\x95\xd1\xd0\x03]\xaf\x85R\xf6gT\xab)Ro\xda\xae\xf7\xeb\xb2J\x02\xa0\x96\x92\xef \xa7Z\x05\x93\xee\xb8\x9c\xc7,=\xd3?+\x17\xf3+j\x89L{\xec\x9a\xaf]\x10`\xdb\xbc\x0dT\xe2\xf79\x8c\x9c\xc0\xc7\xf3\x9f\x8es\xcaY\x99GT\xce}\x95\x00\xa1L\xe3_J\x9a\xec ^\xd2\xb4\xa8\xb3`\x89\xfa\x1d\xe5\xe9\x99\xcfi\x1e\x93$\xfe\x95:\xa2\xc0R\x1f\x05\x8bX\xa2os2K\x93N\x9f\xa6\xfa\xa8\x92\x8bE,-d\xfa\x02[\xc0_HB\x89+\xd9 \xc8[9\x1f\x1d?\x82hCr\x12\x154\x9fIOI\xe6B\xe0t-\xfc!\xd3\x81\x8f\xe7?=\xe6\xdd#p]\x91M\xabF\xad\xabf\x99\xe9\xa1L\x92\x1d\xfcR\x92Dhs\xa9tmr$\x0b\xff\xe6 \xe1\x10;\x13\xa8|\x12\x0d:^3\xb6N\xe8LjoQ\xaef\xafu\xba\xadOOU\x7fd\xc1U~zGqB\xa1\x10\x91\x94\xa5qD\x12\xb9\xae\xb9j\x97\x17\xe0\x1f 5\xcb\x8c\x1c\x8ff\x8fT\x82\xafB\xccg\x9a\x15t\xf9\xd4\x055\x00\x9c\xa6\x90 \xc5\xc7\x11=\x82\x82\x8a\xady\xc9K\"\xd4\x92\xe54b\xdb,N\xa8pZT\xde\x8aE\x9c\x92\xdc\x95QI^+\"Lm\x95\xb3c\xe7\xaa^yy\x10\xcb\x8b\x14J^\xa5\xa6\x12\x83\x8b\xde\xcaO\x7f\x92\xeef\xf0#\xbb\xa1\xd74?\x12\nq\x14\xf7\xf1\xfc'\xae\x8d\x97(\xcc\x9a\x10C\x894\xb4\x14>m\x8a\"\xfbt\xa4\xfe\x97\x7f:\x02\x96C\xca\xf4\xafGr\x84F\x96S\xc8J\x98\x9c\xd5Rg\x9c\x16Pfb\xc7 \xe6\xa4\xabn\x9a_\xcb\x8b\xeaI\x01[\x92q5\xdcd\xfb\x0bff\x9d\xce\x8d$J\xe7@\\y\x7fV,I\xd8\x0d\x7f\xe1\xfc\xd6\x7f\x86\xd3U\xdd31P\xb2\x9c]\xc7K\xba\xac:/w%\x9c\x97[\xba\x9c\xb9\x8b:I\xe1\xc7\xcb\xcb3\xf8\xe1\xcd\xa5\xc9a\xfe\xf1\xfc'5\xffvr\x83\xe3J\x95\xf4\xcf\xee\x84\xb9\xdce\xf4\xe7\x7f\xfe\xecxE;\x89b\x84\xa8Q\xa8\x9d>\xf9\xbd\xb2\x9c-\xcb\x88\x8a\x1d\x95t\xe7\xfb\xe1*%\x7f\x86\x93,K\xe2\x88h\xbd\xe6\x14t2,\x99\x0c\x8dD2\x05\x14\xbb*\xc5N\x9e\x97I\xe1R\xfc\x82p\xba\xf4e\xe9\x0454eK7\xe4Z\x0e\xccmc~-\xd5\x04#\xa6c\xe2\xdf\xd7,\x16;Kw\xf62\xd5LibT\xfe\x9a#S\x84(\x99\x14\xb1\n0\xca<\x7fr`-(H\xd3\x98_;\xd2\x83\x81\xb4\xcb\xa0\x82\xa0\xf25\xe5<\xc1\x93\x8f\x9c\xc25\xcdy\xccR\xa1-1d\x85eSc\x96\xa4d\xed\xd6\xc1\"\xa7\xe4J\xd8)]\xf4\xec\xa9k\x8c\xbdg\x05}\xa1\x12\xef\xad\xca4RsL\xf4F[\xb8\xa8\xca\xdfG\xaeI\x9c\x90\x854T\x1e\x8b\xcfV\xab8\x8aI\xe2]\x03\x17\xe5\nr*\xd6/z$w\xf9*\xad\x9c\xa8\xb8\x14\x9f\\\xee|\xcd\x9cu\x0d\x10\xba\x8eS\x99\xdf\xec&.6\xce\x05i\x97\xd1\x99\x9a\x17$\x8b\xf9,b\xdb\x19\x9c\xc8@\xf7;\xb2\x83\xe7\xdf<\xffV\xa6\x8e\x14\xe3Uf\x8dt\x94u\x13/\x85\xa3 [*[\xa9\xec\x8d\xab\xfa*\xfe`\xe6E\xba\x14\xc6\"Kdj2V\xff.,\xa2{Q\xb9\x90\x06\x86\x03\x13\xadU\x19\xc9:F\x16\x9e\xe8\xc0\x01\xddf\x85k\x8c+[\xf5\x14\xb6\xf1zS\x88\xa5\xd3\xf1\xac\xec\xad\x0c\xd2\xb4\xfbb\x92\x86F\xc0\xe9\x96\xa4E\x1cq\x9b}p\xeeC\x03==O@^I\xb8;\xf8\xcedrU7\xf95\xfc\xb8=gMy.\x8e\xb2\xc8\x82]\xd3*\x87\xaa\x1a\x1a\xfd\xaa\x08k\xdf\xa7\x93t\xf7\xc9x\x82*CM\xbe\x88\x8b\\X {;-\x85\x99E\x8f$L\xcf\x16 \xb6\xcf-\x96\x1a\xb9v\xaav.\x1a\x9e\xf0\xbe\xbf[9\xb1\xd6A{ff|\x12/d\xe3\xf5\xc2\xc8\x81\x97Y\xc6r\xe9\x9ed$\xba:.S\xf1?\xc2)q\x8d n\xfc\x18\x97\xff\xc6VP\x16\xca>\x1b\xfb\xc6\xc5\nA\x96\xcbX\x19;X\xd3Tl>e\x17\x8a\x0d[\nc`)M\xd4v\x92\xee\xf4'\xb5\xd5\xf9\xe6\x96\x88\xa9\x01\xcf^\xc0\x99\xe8\x87\x98\xe4\xbaK\xa4\xfa\x00q\n\xaf\xfe\xf2\x17\xe7\xfa\xff\x961X1\x06/a6\x9b\xfdo\xc7\x83\xa2I$\xdd\xb9\x1e!\xe9n&\x1a\xf36g\xdb'+\xc6\x9e\xba\x1e\x9e\xcd\\K{\xbc\x82'\xa2\xb8\x8f\xb2K\x97\xec\xc9\x9fDyO\xe17\xe7\xb2\xe4.\xf3_>]>\xf7\xe8\xf2\xef\xe4\x9aL\xaaLx)\x9dbQ\xd3D\xfa\x8a\xf9\x93\xb7\x8c\xcd\xa2\x84p\xeeU\x97j\xaaxM\xf5\xb6\xf1\xaa\xab%\xdds\xfaM9>\x16\x03?\xb4\xad\x17dK\x85\xbfx\xa2Z\xbd\xa6\xc5k\x15Q>MyA\xd2\x88>y:\xae\x13\xbd%\xb9\xfbd\xfb\xd1\x0c\x8eo=\x83\xe3lWlX\xea\x1c\x1e\xaa\xa9o\x19{2\x9b\xcd\xec)\"\xa1\x1e\x1aO\xc1\xeb7\x17\xaf\xceO\xcf.?\x9c?\xb5/\x9e\xa0+W\x93\xd3W\xbdj\x80O\xbd\x7f\xf5\xa8\xf7\x07K\xf2G-B\xb5/^\xc2\x9f\xb2\xc5\xec-c\xbf\xcdf3\xd7(\x15\xad?\x12\xfb\x0b\xf1\x0eIw\xd9b\xf6\x9e\xdex;\x12\xaf\xe4;\xff\xe3%\xa4q\xe2\x19\x96\x1e\xad;'\x91\xef\xddNg\x9dE\xe96\xab~\xce>\xa6[\x92\xf3\x0dI.\x9928Sv\xc8\xf2\xeb\xa5d{DW\xd5\xcag\xf6\xaa\xb0\xd8\xd5\x1e\xbaY\xafe\x12Wk\xaag\x0d8 \x07\xd1V\xdd\xe3\x1e\xef\xfbxU&\xc9L\xfe v9\x8f\xcd\xa5z\xc6\xed\xb7f\xa4T\xab\xb1\x1a\x8f\xb6\n\xab\x05=U~zo<\xaa\xdaa\x01Y\x15\xb4\x8f\x0cgD\x06\xcc\x1e\x1f?\xb6Ug\x92\"\xeb\xa6\xcb@\nP=\x8b\x1e\xad\x18\x9b-H.;}{\xbc\x9b\xfd\xfaHj\xd4R\x96\xda\xde\xbb\"\x1c\xb2\xc9\x8fD9vW\xe4\xef\x17\x1f\xde\xdb~{\xf9\xf2\xe5K\xd7\xc0\x10\xef\xd6Q>\xe5\xe43a\x91\xb4G\xaa\"\x05%\xa7\x06\xb3\\\x97 \xb1\xee~\xf6\x0bR\xb0I\xedA\x1e\x01\xdd.\xe8rY\xfb\x92Gj;\xd7_ \xb1F\x0c\x1b\xbe\x9dB\x81?\xfd\x87\xd0\xe3'\x1d\xb4\xaa<\xe9\xe6\xb7\xb2\xcd\x1fm\x03_8\xb7\xb2$\xba\x12\xa6\xb0\x0e\xb7\xac\xe2\x84\xba\x964c<\xcfh\xceY\xea\x99\xdd:\x1e,\x13\xe6\xce\xe5G\x7f \xcf\\\xa5W\xaf\x88\xf1j\xdex>n\x89\x05\xf0\xb4\xee\x91\xd4\xed\xa3\x17\xf0\xa8or\xb7U2S\xfd}t\xe4.Q\xf6\xf4=\xd9\x8aR\xff\x8f\xea\xca\xbf{^\x11=\xed\xbc1\xa6\xbb\xa7+\xbd_n\x8fC5Jb\x0e74I\xbe\xbeJ\xd9\x8d\xe2$l\x08\xb7\x06\xe04%\xdc5\x01\xdbS\xe2H\xed\xb5:\xf3D\xd9\xdc\xbaI\x8e!\x9f\xae\x81\xa8\x01o\xab\xf0\x93\x9c\xb2f\x1elX\xb2l\xd2 \xd4\x84\x8f\xd3j\xfe\xb8\xef\xdd\xd5\x93\xcaV\x97l\xc8\xac\xf2!\x9e\x08Sh\xd4\xb9\x17\x984\x91\xfc\x9f\xff\xf9\xf3S\xe7T\x9bf,\xb6+\xf5\x0dG\xa94Q\xe8\xb3\xd9\xf3g\xcf\xf9#\xe7\xc0\xda\xff\x9b\xc1`]i4\xbd!\x0f\xefM\x06\x9c\xfeR\xd2\xd4v\xd3\xc5!\xe5\x07\x90\xce\x1b\x80m\x97\xc9\xa28+M\\\xb9\xc5m\xd9s>\xfba\xe2\xaf\xea\xc6 \xab\xa5%\xc8j \x0d\xa3\x8d\xc4|\xed\xc1 \x08F|'\xc5{=h\xef\xb4Xo(\xd2; \xce;\x06\xe5u\x81\x11\xe1\x18\xef\x81\x08\xef\xb4\xf8\xee twRlw\x08\xb2;\x08\xd7m\xa0\xb7\xf6\x02\xc3P\xddI1\xdd\x00Dw2<\xf704w\x04\x96; \x92;\x1c\xc7Uh\xad\xc3>y\xe0\x93;\xc0p\xef\n\xc1\xbd\x03\xfcv\x08z;1v\x1b\x86\xdcN\x88\xdb\x86\xa2\xb6=\xce\xbc\x1b\xb3\xd5\xc8\xac\xb5\xc0p\xc4v2\xbcv(Zk0Y\xfb\xca\xec\xc5j\x0fFj\xef\x80/\xdc\x95P\xd7m0>\xabPX\xfb*\xe2EgCZ6!2\x1b\x8e\xcbN\x8a\xca\x8e\xc1d5\xfa\xda[\x9e\x17\x91\x1d\x89\xc7Z\xd7\x0c\x1f\x1a;\x0d\x16\x1b\x08\x1ezq\xd8\x01(\xac+\xa4?\x06\x81u\x95g\x89\x87M\x84\xbd\x0eS^8\xee\x1a\xa2\xa1\x01\x98\xeb(\xc4\xd5\x8e\xef\xf8\xd1\xd6)\xb1\xd6)\x90V[Tt2\x945\x10c\x0dAX\xc3\xf0U\x8f\xf6\x87c\xab\xe1\xc8\xaa\x1dW\x9d\x04U\x1d\x84\xa9\x8eAT\x07\xe0\xa9N\xf0\xd1\xd1,\xe7{\xe18\xeaT(\xaa\xa7\x1b\xbd\xbfM\x87\x9fz\xd1\xd3\xb1\xd8\xa9u\xe5t!\xa7\x93\xe2\xa6n\xd4t\x14f\nr\xbb\xdc[\x9e=z\xe0\xc7K\xed`\x8d\x1d+\x9d\x1a)\x9d\x18'\xb5\xa1\xa4\xd3a\xa4~\x84t(>:\x00\x1d\x1d\x8c\x8d\x0eCF\x1d\xb8\xa8\xabU\xa18T(&:\x18\x11\x1d\x84\x87Z:9\x06\x0b\xb5\x1f\xa8vM\xae18\xa8F<\xfb\xc7\xb6\x0b\x05\x9d\x10\x03u\"\xa0w\x81\x7fN1\xe6\x06`\x9f\xe1\xc8\xa7Y\x9e\x87]\xb6\xd6>V\xab~\xee\x9e\x944\x7fV\x83\xb8{\x92\xf6.\xaejs\x9c\xa3ud\x12\xd2\x08'\xaf\xf2R\xc8(\xbe\x98?\xb71/$6\xaf\x9f\xe8=\x1e\xdb\x080\xfccCS\x88H\x92Ps\x1bz\xaa\x82F* \xcf\x91\n\xf8\xc93\xc4:\x08\x14\xb1\x94\x97b\x19\x86M\xbc\xde\xe8\x04\x08UylU\x0f\xa85\xe1\xc2_*\xa4\xdb\xb26\xe9\x15\xaaT q\x1a\xb1<\xa7Q\xa1\x0eY5\x97\xc9^\\\xf6[\xfds\xdf\xe9\xdd\x07\x9f\x1d\xa9\xfdM\x9bR \x0c\x8a0hK\x10\x06E\x18\xb4_\x10\x06E\x18\x14aP\x84A\x11\x06E\x18\xd4\xf2\x08\xc2\xa0\x08\x83v\x05aP\x84A\xfb\x05aP\x84A\xa5 \x0c\x8a0(\xc2\xa0]A\x18\x14aP\x84A\xbb\x820h\xff\x0b\x08\x83\"\x0c\xfa\x19`\xd0Z\xf4\x05m\x06k\x92\x81\x99^T\xb0\xf3f\x8d\xce\xed\xfba\x9d\xeb;*\x18\xaf}\x85G\xf5g\xbd\xb2\xf4!iJ\x9c\xc8\x95\x1b\xb7J\xe9m\xe1\xcb\x0b\x1bp\xea\xd4\x1a\x19q\x9f=5bZa\xb0c\xf1O\x1d\xbd$\x9c\xab\x10\xed\x19Q\xb7\x18Q^\xcc\xd4\xef\x96\xc2\x14\xb0*\x8a\x11\xc5\nER\xd82^\x00\x951A\x19H\x9c\xc1i\xd1\x98\x8aY\xb1\x83\xd8\x912\xaa\x0e\xc8mYNM\x80\xb8o\x19\xb1\\\xd5\x05C\x94i=\"\\\x8dFk\x80IV/\xb5(\xff\xa1N,\x8b\xb5\xd7\xc4\xb4\x1b\x01T[\x7f\x9b\x8aV\x07\x9fea\xb6\xd9|C8pZ\x1cA\\p\x13\xaa\xe7P\xa6j0/U\xa0\xf0&\xe6\xed\xf1\x11\x90V\xdf\xc0\xd0CR\xeb\x9f\xf4O\xc6\xe6\x85W\xdd~8qq<\xaf\x8c\xe7\x95{$$\xa6\n\x08\xd4#Po}\x12\x81z)\x08\xd4\xef\x0b\x02\xf5\x08\xd4\xdb\x04\x81z\x04\xea\x11\xa8G\xa0\x1e\x81z#\x08\xd4#P\xdf\x95a\xcaC\xa0\x1e\x81z\x04\xea\x11\xa8G\xa0\xbe-\x08\xd4#P\x8f@}W\x10\xa8\xef\x7f\x01\x81z\x04\xea?\x03P\xef:\xaf\\C\xe8\xb3+\xda\\\x04]\xa0\xb4F\xa1\x896\xa1\xea0\xb0\x0c\x03j`TC{\x15d-\x83w\xebN\x94Kb\xd0b\xda\xfb`\xe8\x0fb\xbdc\xa9\xdcH\xb3\xd5\x8a\xd3B8\xf1\xed\xe6B\x03|\x90\x87z\xeb\x1f\x0e\xbe\x8c\x18lQ\x93\x1e%\xaa\xf6\xd9\xf4\xd8\x89X\xe8\xceHU\xa6\xe5\x96\xe6qd\xfe&g[DR\xd1\x1f\x152\xda\xd0\xd4(\xbeL\xab\xd0a\xc7\x9f=\x95\xa5%\x94\xf3Z\x85*\xaeUr\xa1\xea+:P\x9f\xed\xe2\xefX\xb9\x1dP\xbfG\xbdI\xbc\x8dC\xb5+\x9f5\x80\xb8\x0d\xebWa\xe5\xe6\x08\xd6\xf0y\x99t\xe0f\x15\xafi\xfe\xe9t\x05 ]\x15\x86\x1b\xa1\xc9\x12\xc6g\x94\x11q5AT%B\xcf\x8b\x1dP\x12m\x80d\xd9g\xd4b\x93\xb1P\xbf\xef\xd2e\xe3\x0d\xa1Q9B\x99\xcc?\x002\xe0\x9a.\xe3\x88\x14\xb4\xc2\xc6\xb4\x06\xe5\x83z 5\x8b\x8b\xd3()\x97\x1d\x8f\x90\xa8Z*p\xb2\xf3\xc5$\xd4\xdd\x88\x99\x0b\xd3\xdd\"\x00\xb5\n\xfbx\xca;_\xab\xd3\x05\xe9D\xe7\x94kR\x82\x9c^\xf5|\x14Sn\xa6gS\xbcNY\xdeA\x1c\xccllW\xa14s\xe8\x87]0\x96\xd0\xc6-\xb1=\x1f0\xa7\xd74o\xbd\xea\xfax\xfa\xe9\xee\x87\x8b\x1b\x8c\x97\x9c\xf6\xcf\x84V9\xa2\x0e\x9aJ,\x96\xe5K\x9aw\x1dv\x0fKd\nm\x8c\xcag1\xe0N\xf8:\xb1\x85\xfeo\xcd\xca\xa8/g\xd5E\x99\x8f\xdc\x97\x14\xe2+\xd3\xb3\x87\x9d\x13\xc2\xc64\x19\xc5\x91+\x9c\x84\x11/,\x11\x12\xd7\x9f\x9c*\x12F\x14\x19C\x13q\xd3AF\x91Ad\x15\x96\x02\xbdT\x90 \x88 #i \xf6\x9bc\x82H \x07Q@F\x11@\x80X/\xab*\xc2\xe8\x1fc\xc8\x1f.H6\x88\xfa11\xf1#\x88\xf61!\xe9\xc3K\xf9\x98\x88\xf0q\x08\xddc0\xd9c\x02\xaa\xc7\xc4D\x0f\x0f\xcdcr\x92\xc7\xddP<&'x\x84\xd3;\xc6\x91;\x1cJ\xf7Q;&#v\x84\xd1:z\xa2\x14\x87\x90:B)\x1d\x13\x11:&\xa6s\xf8\xc8\x1c\x07R9\x1cD\x0e\xaf\xbf\xe4%q\x849T\xd3\x128|\xf4\x0d\x7f\x9b\xc6Q7\xccR\xd3S\xa0\x8f\xb81!m\xe3\x00\xd2F?\xff\xcbE\xd9\x98\x96\xb0\xe1\xa6kLA\xd6\x08b\x1bx\x88\x1a\xc14\x0d;f8\x9c\xa2a/\xab7@? 9c\x88\xb2B\x89\x19~\x9d\x04\x932FP2l@\xb1\x8f\x8e1\x1d\x19\xe3p*F? 3\x11\x0d#\x88\x84\xe1\xa7`\x84\x100\x9c\xda\x1eJ\xbe\x08\xa5^\xd8\x88\x17\x13\xd0.\x06\x90.\x86S.\x82 \x17\x0e\x9e\x82\xb59\x8ewB\x89\x16\xd3\xd0,\x9c\x8d\xef\xf9e\x14\xc1\xc2\x04\xc6{\xca\xb3\xd0+&&W\xd8\xa9\x15c\x89\x152d\xd3\xd7\xf0~Z\xc5\xb4\xa4\n\xdb\xce\xdcG\xa8\xb0!\xbe62\xc5\xb4T\x8a\xf1D\n\x0bib\x14e\xc2K\x8f\x18F\x8e\x08\xa6F\x0c$F\x0c\xa1EXI\x11\xf6\xd6\x84\x82\xd3a\x84\x88\x81t\x88\x01d\x88\xde\xaeMK\x84\xb0M\x8a\x03H\x10\xbdq$+\x05b\x1c\x01\xc2Ev\x98\x9e\xeap\xf8H\n\xa69\x84\x92\x1c\xda\x0bc\xf8\x81\xe9\x11\xe7\xa5;\xa55\x8fK\xd7\xf5\xe39\xe8\x96\xe09h\xdf\xa0\xacebp+\x14\xde\x1a\x07pY\x0b\xc3s\xd0x\x0e\xba\x961P\x98\xb50<\x07\xbd/\x13\xc1b\x87\x01c#\xa0\xb1I\xc0\xb1\xc9\xe11/@v\x07\x10\xd9]\x81dw\x00\x93\x0d\x01\xca\xc6BeN\x1b\xee\x03\xcb&\x84\xcbB\x01\xb3\xc9!\xb3p\xd0l2\xd8lr\xe0\xcc\x0f\x9d\x1d\x0c\x9e\xe19ho\xcb\xc6\x81i\xbdE\xe19\xe81\xb0\x9a\x0fX\x9b\x06Z\x0b\xc4\x8b\xbc\xf0\xda\x00\x80\xcd{\x86s \xc8\x86\xe7\xa0\xf1\x1c4\x9e\x83n\xca\x08(.\x1c\x8c\xc3s\xd0F\xf0\x1c4\x9e\x83\xc6s\xd0\xc1\xe0\xdd!\xf0]oqx\x0e\xba\xf7\x85 \xc0\x0f\xcfAO\x07\xff\xe19\xe8\x83\xc1\xc1i\xc6\\0@\x18\x0e\x11\x86\x9d\x83\x0e\xbc\xb7\xb9\x99}\xdc\xfc\xad`:\x9d\xf6\xaa\x1d\xaa\xbc\xd7\xab\x9bU[\xe6\x8b\xdd<^\x1e\xff\x16/\xfdG\xddN\xd4+\xdf\xefN_\xef\x9dz3]\xabO\xbd\xe9\x1f\xd4qL\xd3\xcb\x96\x8a\x1e\xf7\x1e\xff\xfb\xdb\xec\xf9c\xfdt\xdfQ\xb9F#\xbe2*z\xd8\xa7\xe6\xe6Z7\x030\xcdaj\xd2\x85Y\x92\x987A\xec\x86\xf2\xbcxv\xa7\x98\xbe1\x90E\xda\xb3\xaa\x9eE<\xbb\xf3+\xe2\xd9a\xa1G@<\x1b\xf1l\xeb\x93\x88gKA<{_\x10\xcfF<\xdb&\x88g#\x9e\x8dx6\xe2\xd9\x88g\x1bA<\x1b\xf1\xec\xae\x0cS\x1e\xe2\xd9\x88g#\x9e\x8dx6\xe2\xd9mA<\x1b\xf1l\xc4\xb3\xbb\x82xv\xff\x0b\x88g#\x9e\xfd\xc0\xf0\xec\xb8i\xaf]\xb9\xbc_\x8b/\x1f\x89\x0d\xe0\x91\\{\x0c\xcc\x19/!NyAI\xe7\xcb\x8a\xbfk\xfc\xbb\x85 W\x91\x80\x1a\x15_P \x8c\xc7t\xa9\xb1\x97\xd5\xde:\xa2\x91\x05\x19}\\P*\x06\xb7\xce_\x0cO\x92\xf8J\x86?;\x15\xf1\xa7*\x08\xa6\xc7h\xab\xb82[\xca\xadl\xc1L)bp\xc1\xaa,\xca\xbc\n\x13V--\x8b\x8dB\xee'D\xed\xa1\x8d \xf6\xe4a\xae\x15\x1c\xf8\x85\x9a_d\xb8\xe6\xdb_\xaf\x17|\xfe\xb7N\xf7\x87\xa6\xe8\x0d\xcbD=\x88\xcf\xb0\xa0\xd1\xe6\xdb\xe7v\x0e\xc3\xf7\xf2\xf7\xb3\x9c\xae\xe2[\xddU\x0e\x8b\xc6\x1f\xf5\x0b!\xd0{/?\xe1\xfb\xfd\xb2\x1e,3A\xf5{\x9e\xc9\xc6\x0e\xc0\xa6\xddA\xb7\xa6\x06\xbc\xf4\x82\xf6\x07\xc9\xb3\xa8S\xd8\xa0\x8b\xc5\xffV=\x84\x04\x84==\"\x01!$V\x0cH@@\x02\x82\xf5I$ HA\x02\xc2\xbe \x01\x01 \x086A\x02\x02\x12\x10\x90\x80\x80\x04\x04$ \x18A\x02\x02\x12\x10\xba2LyH@@\x02\x02\x12\x10\x90\x80\x80\x04\x84\xb6 \x01\x01 \x08H@\xe8\n\x12\x10\xfa_@\x02\x02\x12\x10>\x03\x01a\x04\xa4[\xdd\xc5:_\xec\n\xea\xbc\x91\xd5\x9cM.(\xbfd\x17j\"G,\xbd\xa6y\xc1\xab\xfbZO\xccIu\xf1\x98\xf8z\xad\x10\xc5h\xf8\xb7\xafr\xfd\xdc\x83\x85\x81\x8db\x95\x06\x06@\x84\xee\xd8G\x9f*\xbcxp\x7f\x19\xfa#\xd6'\xcd\x11\x10n\xbe\x80\x80\xb0\xe5w\x04\x84\x1b\x82\x800\x02\xc2\xb5 \\ \xdc/\x08\x08\x1bA@\x18\x01\xe1\xa6 \x8c\x800\x02\xc2\x80\x800\x02\xc2R\x10\x10F@\x18\x01a\x04\x84\x1b\x82\x80pK\x10\x10F@\xd8>\x04\x10\x10F@\xb8)\xa1\xe0\x1c\x02\xc2R\x10\x10\xfe\xbd\x00\xc2\x01\x19\xd6\x15\xee\xdb(i\xc2\x03\xd7\x8d@\xc3A\xd0\xb4\xaa\xc0\x8fM+<\xf3\x92Il\xb4\x81MkLZ\xdb\x9a\x82A\xb3\xcf\x87b\xd2\xadJ\xf5s\x0f\x1e\x93\x96\n\x18\x04R:\xc2GAxuKM^\xbc\xba\x85rw\nD\xb8\xba\xff\x05\x84\xab-\xbf#\\\xdd\x10\x84\xab\x11\xae\xae\x05\xe1\xea\x02\xe1\xea~A\xb8\xda\x08\xc2\xd5\x08W7\x05\xe1j\x84\xab\x11\xae\x06\x84\xab\x11\xae\x96\x82p5\xc2\xd5\x08W#\\\xdd\x10\x84\xab[\x82p5\xc2\xd5\xf6!\x80p5\xc2\xd5M \x85\x0e\x11\xae\x96\x82p\xf5\x1f \xae\xde\x0b\x19\x1c\x88W\x0f\x02\xa6\xb7lY&t\xae\xf3}s; \xfdN>\xa8\x0fE\xf3\xfa>\xef$Q\xb3\xe26\xe6\x85Dm\xe4s&\x81x\x15H\x19\x8dI\xb7\xeb\xfd\xca\xa8\xe3\xa1\xa2\xd1-=6\xa5@(\x11\xa1\xc4\x96 \x94\x88Pb\xbf \x94\x88P\"B\x89\x08%\"\x94\x88P\xa2\xe5\x11\x84\x12\x11J\xec\nB\x89\x08%\xf6\x0bB\x89\x08%JA(\x11\xa1D\x84\x12\xbb\x82P\"B\x89\x08%v\x05\xa1\xc4\xfe\x17\x10JD(\xf13@\x89J\xdc[g \xf5\xb5\x113\xff\xc1\xc4\xfdO \x8b9\xee ~\xe7g\xaf\xf0\x90b\xcf\x0bxH\xd1\xf2;\"\x8b\x0dAd\x11\x91\xc5Z\x10Y,\x10Y\xec\x17D\x16\x8d \xb2\x88\xc8bS\x10YDd\x11\x91E@d\x11\x91E)\x88,\"\xb2\x88\xc8\"\"\x8b\x0dAd\xb1%\x88,\"\xb2h\x1f\x02\x88,\"\xb2\xd8\x94P\x94\x07\x91E)\x88,\xfe^\x90\xc5C\x0e\x0c\x1e\xff&\xe6\xa3#\x91m\x0bE\xfc~'\x86wuxP|\xc1\xf6yA\x88\xd3\x15\x13\xcb\xb0\xfe\xb3(\\\x97h?\x15\xa8J\xd5\x8f=\xf4\xa3\x816\xfc\xce\x02\xc5\xb9\x8187\x0c\xe7\x0d\xf6\x84DK&\x07\xe0\xc2\xe0\xb71\xe0\x9b\x1bd\x1b\x05\xb1\xc9*,\x05z\x01\xb6 \xe0\xb5\x91\xe0\x9a\x15\x92\x08\x83\xd6\x0e\x02\xd6F\xc1j@\x92\xc4\xa6\xc50Pm\x0c\xa4\xe6\nt\x07\x01j\x13\xc3iA`\xda\x84P\x9a\x17H\x9b\x08F;\x04D\x1b\x0c\xa1M\x00\xa0M\x0c\x9fy\xc0\xb3\xc9\xa1\xb3\xbb\x01\xce&\x87\xcd\xc2A\xb3q\x90\x99C\xe9>\xc0l2\xb8,\x0c,\x9b\x18*\x0b\x05\xca&\x82\xc9&\x06\xc9|\x10\xd9\x81\x00\x99\x03\x1e\xf3\xfaK^h,\xcc\xa1\x9a\x16\x16\xf3\x81b\xfe6\x8d\x03\xc4\xccR\xd3S\xa0\x0f\x0e\x9b\x10\x0c;\x00\n\xebG\xd5]@\xd8\xb40\x98\x1b\x04\x9b\x02\x02\x0b\xc2p<\xf0W0\xf8e\x8f\xc4\x0e\x07\xbe\xece\xf5\x86=&\x81\xbc\x86(+\x14\xee\xf2\xeb$\x18\xea\x1a\x01t\xd9\xc2\xef>\x90k:\x88\xebp\x80\xab?\xcc5\x11\xb8\x15\x04m\xf9\x81\xad\x10X\xcb\xa9\xed\xa1\x90V(\xa0e\x83\xb3&\x00\xb3\x06@Y\xc3\x81\xac`\x18\xcb\x81\xfeX\x9b\xe3x'\x14\xbe\x9a\x06\xbcr6\xbe\xe7\x97Q\xb0\x95\x81\xa8z\xca\xb3\x80V\x13CVv\xc0j,\\%C6}\x0d\xef\x07\xab\xa6\x85\xaal;s\x1fLe\x8b\xa3\xdb \xaai\x01\xaa\xf1\xf0\x94\x05\x8a\x1a\x05DyA\xa7a\x90S0\xe04\x10n\x1a\x026Y\xa1&{kBC\xfea0\xd3@\x90i\x00\xc4\xd4\xdb\xb5i\xe1%\xdb\xa48\x00Z\xea\x8d#Y\x81\xa5q\xb0\x92\x0bB\x9a\x1e@:|$\x05\x83G\xa1\xd0\xd1aG\xd2\x14\\3\xd1\xb94\x8d(5\x0f\xa7\xd5\xed\xc2Sg-\xc1Sg\xbe\xc1Z\xcb\xc4\xa0W(\xec5\x0e\xf8\xb2\x16\x86\xa7\xce\xf0\xd4Y-c 2kax\xeal_&\x82\xcb\x0e\x03\xccF@f\x93\x80f\x93\xc3f^\xe0\xec\x0e\xa0\xb3\xbb\x02\xcf\xee\x00>\x1b\x02\xa0\x8d\x85\xd0\x9c6\xdc\x07\xa2M\x08\xa3\x85\x02i\x93Ci\xe1`\xdadp\xda\xe4\x80\x9a\x1fR;\x18T\xc3Sg\xde\x96\x8d\x03\xd9z\x8b\xc2Sgc\xe06\x1f\xe06\x0d\xe4\x16\x88#ya\xb7\x01\xc0\x9b\xf7\xc4\xcc@\xf0\x0dO\x9d\xe1\xa93\x13\x1c\x86I\xc2\xb4\xb8$\x0c\xc0&a\x0c>\xe9,Ma\x97\x030J\x98\x12\xa7\x84\x11Xe\x80=\x7f\x1a\x80W\xc2\x14\x98%\xf8pK\x08\xf7\x1d\x03\xf0K\x18\xe8b\x0e\xc61\x9d\xa5I\x8c3\x00\xcb\x84\x01\xad\x9c\x10\xd3\x84A\xb8&L\x8dm\xc2H|\xd3=\xae\xb8\x1f\xe3\x84\xf18\xa7\xb5>\xb5@]\xc7`\xdd\x92\x1d\x90,Kd\xc4;Ne\xec\x8a\x14\xb4np\x9f\x97\xdb\x8a8\xfdw\xbf>%\x0e\x0f\xeb\xf8\x9ar\xc8h\xbe\x8d9\x97\xad.\x18\xd0[\x1a\x95\x96\xc0\x9b\xa8W\xbbx\xda'R+cC\x13B3\xfb\x0b\x9b?\n\xd6R \x97\x90KE@Px|E;\x10S\xb6\xe6\x1c\xf4\x94\xd5a \x18\xc9\xc8:N-\xe3\xb9s\xf2\xdf\x022\x0c(\xfaNP\x86\x81\xbe\xd7\x8fO\xda\x93\x1c/3\xd0\x82\x99\x060\xd3@-\x98i\x003\x0d\xd42)3h\x08+h\x10#\x083\x0d\x1c\xca\xfe\x19\xc1\xfc\x99\x84\xf53\x9c\xf1\x83\x99\x06\x0ea\xf8\x0ca\xf7\x8c`\xf6`\xa6\x01\xc0L\x03\xa1\xac\x1d\xcc4\x80\x99\x060\xd3\x00\x84\x13C\xbc\x8c\x9b\x01l\x9b\x903\xeaCX6\x98i`\xcca}\x1f\x8b\x063\x0d\x0c`\xcb\x042eBX2a\x0c\x19\xcc4 e\x0c\x0bf\x00\x03\x063\x0dL\xc0p\xf1\xb2[\xc62[\xac+'f\x1a\xd8\x13\xcc40\x82\x91\xe2g\xa3\x0ce\xa2\x0c`\xa1\x0cf\xa0\x0cc\x9f`\xa6\x81a\x0c\x13\xcc4P\xc9\x1f2\xd3\x80\xeb2\x03\x0d\xbb7\xca\x88\xd3\x17\n\xfbm\xfc\xad\xbe\xd0`E\x92\x16\x04\xd9\x1bph\x17N\xef\xa6\xf0-_\xcf\x0dL\xd5x\xc7\x15!\xf8\xa0\xe3\xddG\xad\x97\x8f\x14AE\x82\xafr@+\xe4[\xae\xb2\x9a\xc5\xb0%E\xb4\xe9\x0e\xecu|MSQ\xd2^\xb4b\xc2^\xd6\x04\x86\xd9\x15\xdd\xd9\xfa\xd9a\x04h\n\x00\xd1K\\.sC\xc80\xadF\xa55\xf4Z\xf1\x05dpu\xdd\x89B\xca\x1e\x08\xb3\xec\xe3\x00|\x10\x9ab\xa9\x0ct\xb0\xd5\x8a\xd3Bl\xb2\xda\xcd\x85\x068\xc4i1\xb1\xb6,Q\xad\x1e%\xaa\xf6\x05\x8e\x17\xdd\x19\xa9\xca\xb4\xdc\xd2<\x8e\xcc\xdf\xa45\x8cH*\xfa\xa3Bzb\x0ci\xc5\x97i\x15\xda\xed\xec7Nei \xe5\xbcV\xa1\x8a;\x96\\\xa8\xfa\x8a\x0e\xd4g\xbb\xf8;Vn\x87Q\xd1\xa3^y+E\xa0v\xe5\xb3\x86\x8f`#Z\xa8\xb0\x7fs\x04k\xf6B\x99t\xe8\x00*\x9e\xd6\xfc\xd3\xe9\n\x12\xba*\x0c1E3U\x8cO/\x11\x0b5AT%B\xcf\x8b\x1dP\x12m\x80d\xd9g\xd4b\x93.R\xbf\xef\xd2e\xe3\x0d\xa1Q9B\x99\xbc}\x06\x14\x0dm\x19G\x8a\x84\xa6\xb0K\xadA\xf9\xa0\x1eH\xcd\xe2\xe24J\xcae\xc7c'\xaa\x96\n<\xee|1IEh`\x1abim\xd0\xaf:\xc6\xe5\xe3)\xef|\xadN\x17\xa4\xf9\xcd)\xd7\xa4\x119\xbd\xea\xf9(\xa6\xdcL\xcf\xa6x\x9d\xb2\xbc\x83\x08\x99\xd9\xd8\xaeBi\xe6\xd0\x0f\xbb`,\xa1\x8d|\n=\x1f0\xa7\xd74o\xbd\xea\xfax\xfa\xe9\xee\x87\x8b\x1bt\xa3\x9c\xf6\xcf\x84V9\xa2\x0e\x9aJ\xac\x9c\xe5K\x9aw7T\x17q\x1a\xd1\x17\xa0\xf2\x0b}\xcd\x97W\xf0\xcd\xec\xaf\xdfN\xaa\x8d1I\x8d\x8e\xb5\x9bp\xfc\x9b\xfe\xc7\xbfT }i\x8e~PO(N\x93VF\x93u\xf8I\xfe\xd2\xce}$&\xb5.\xd9|\xfa\xd6\xd7x\xdc\xab\x97\xbf=\xd6\xcf\xee\xe7B2\xf5\x7fe4\x84)\x91\xbc\x84\"\xedg\x8e\xc6\xad\xf4\x07\x1c\xfd>\xa6d\xc2\x94L\x98\x92\xc9!\x07\x92\xad`0\xe1\xcaY\x14\xa6d\xc2\x94LcIY0\x8e\x98\x05S\x91\xb3`\x14A\xcb=\x1d0%\xd30\xc2\x16\x0c$m\xc18\xe2\x96\xcf\x04\x87\x91\xb7`Z\x02\x17\x0c q\xc1\x18\"\x97\xb34L\xc9t\x08\xb9\x0b|\x04/\x08\xf7\x1d\x03\x88^0\xd0\xc5\x1cL\xf8r\x96\x86)\x990%SG\xa6!\x86A8\xbf B\x08b0\x8c$\x06>\xde\xc2H\xb2\x18\x04\x94\x8b)\x99\x1c2\x8aL\x06\xdeL1~R\x19LL,\x83\x89\xc8e\x80)\x99\xb4\x8c\"\x9e\xc1 \xf2\x19`J&\xdfW\xc0\x94L\x07\x12\xd6 \x84\xb4\x06\x07\x10\xd7\xac\x05\x16\x98\x92I\x89\x9f\xd0\x06\x98\x92\xc9\xf6\xc0t\x048\x08\"\xc1\xc1\x08\"\x1c\x0c#\xc3\xc1\x18B\x1c\x0c&\xc5\x01\xa6d\xea\x951\x849ka\x98\x92\xc9\x08\xa6d\xea\x91\xcf\x9c\x92\xc9\x9d\xd5d\x1f\x19\x07z[\xd0t\xc9\x81T\x99\x99\x8a\x0d,X\xb1\x91C\x87,\x979\xe5\xdcr\xa6L\xaf\x04&\xa7\x8f\x98;U\n\x9f\xde\x17N+\xe2\x86\x18\x88k\x9aR\x1es\xf5I\xe4\xdb\x92x\xa0\xfe{\xef\xfdV\xf4Gs\xf2\\\xd9\x86\xda\x97\x1cu\x17\x08\xcc)$\x05s\n\xd5?\x85*\x13s\n\xd59\x85\x0c\x0df|j\xa16\x9b\x073\x0bi\xc1\xccB\x98Y\xa8\x16\xcc,\x84\x99\x85j\x99\x94\xe02\x84\xdc2\x88\xd8\x82\x99\x85\x0e%\xb1\x8c \xb0LB^\x19N\\\xc1\xccB\x87\x10U\x86\x90TF\x10T0\xb3\x10`f\xa1P\xf2 f\x16\xc2\xccB\x98Y\x08\xc2\xf9\x0d^\xe2\xc8\x00\xd2HHN\x9a!d\x11\xcc,4&9\x8f\x8f\x0c\x82\x99\x85\x06\x90>\x02 \x1f!d\x8f0\xa2\x07f\x16\x922\x86\xcc1\x80\xc8\x81\x99\x85& jxI\x1ac \x1a\xd6\x95\x133\x0b\xed f\x16\x1aA\xac\xf0\x93*\x86\x12*\x06\x90)\x06\x13)\x86\x91(0\xb3\xd00\xa2\x04f\x16\xaa\x043\x0biq'\xff\xe9\xa0\x0fuv\x81\"/\xbd940)\xce\xb8\x8c#\x98\x14\xe7\x0e\x95\xebO\xe7\x82Iq\xa6\xd0\"&\xc5\xc1\xa48\x7f\xb8\xa48\xb9I\x8a\x93{\x93\xe2\xe4\x9d\xa48\xae\x948G\x15S\xae\xca\x8dSa\x82\x07\xe6\xc6\xc917NW|\x94\x18\xcc\x8d\xb3\xffL\xc0\xf9\xe6\x10\xc4\xc6\xc8P*\x90\xb3\xb0~\xe8\xc5\x11\xbd\x9b\x9a\x12\x04~Z\x10\x8c\xa0\x06\xb9;\x80\xb9q\xc6\xd2\x85`0e\xc8Y\x14\xe6\xc6\xc1\xdc8ciE0\x8eZ\x04S\xd1\x8b`\x14\xc5\xc8=\x1d07\xce0\xca\x11\x0c\xa4\x1d\xc18\xea\x91\xcf\x04\x87\xd1\x8f`Z\n\x12\x0c\xa0!\xc1\x18*\x92\xb34\xcc\x8ds\x08= |\x14%\x08\xf7\x1d\x03\xa8J0\xd0\xc5\x1cLYr\x96\x86\xb9q07NG\xa6\xa16A8C\x07B(N0\x8c\xe6\x04>\xe4}$\xdd \x02\xca\xc5\xdc8\x0e\x19E\x87\x02o\xca\x0e?-\n&\xa6F\xc1D\xf4(\xc0\xdc8ZFQ\xa7`\x10}\n07\x8e\xef+`n\x9c\x03)W\x10B\xbb\x82\x03\xa8W\xd6\x02\x0b\xcc\x8d\xa3\xc4O\xc9\x02\xcc\x8dc{`:\n\x17\x04\xd1\xb8`\x04\x95\x0b\x86\xd1\xb9`\x0c\xa5\x0b\x06\xd3\xba\x00s\xe3\xf4\xca\x18\xca\x97\xb50\xcc\x8dc\x04s\xe3\xf4\x08\xe6\xc6y \xb9q\x16\xbbF\xe3\xf6B\xf5\x98\x1bG\n\xe6\xc6\xa9\x7f\nU&\xe6\xc6i\xe4\xc6\xc9\xa7\xc9\x8d\x93cn\x9c\xb6`n\x1c\xcc\x8dS\x0b\xe6\xc6\xc1\xdc8\xb5LJp\x19Bn\x19Dl\xc1\xdc8\x87\x92XF\x10X&!\xaf\x0c'\xae`n\x9cC\x88*CH*#\x08*\x98\x1b\x0707N(\xf9\x04s\xe3`n\x1c\xcc\x8d\x03\xe1\xfc\x06/qd\x00i$$\xab\xca\x10\xb2\x08\xe6\xc6\x19\x93^\xc6G\x06\xc1\xdc8\x03H\x1f\x81\x84\x8f\x10\xb2G\x18\xd1\x03s\xe3H\x19C\xe6\x18@\xe4\xc0\xdc8\x13\x105\xbc$\x8d\xb1\x04\x0d\xeb\xca\x89\xb9q\xf6\x04s\xe3\x8c V\xf8I\x15C \x15\x03\xc8\x14\x83\x89\x14\xc3H\x14\x98\x1bg\x18Q\x02s\xe3T\x82\xb9q\xb4\xb4s\xe34w\xbf\x98\x1b\x07s\xe3`n\x1c\xcc\x8d3N\x8b\x98\x1b\x07s\xe3\xfc>s\xe3,HzU\xa5\xc6Y\x90\x84\xa4\x11\xe5\xc7\xbfi\xfe\x9d#)\xceI\x92|\xaf\x1f\x97M4<\x06]\x86\xdc\x93$ DLx\xf6b\xe8\x11\x10\x065\xa1@\"9\xb2\xccW\xb7}\x88\x7f\x88\x11\x13\x91$\xa1KX\xe5l\x0b$U\x80\xc6\x96-\xcb\x84\x1e)0J\xb1\xba\x14@\x11\xb1\x94\x97b\x8b\x08\x9bx\xbd\x01\xb2\x15\xd5T\xe5\xb1U\xad\xfc5\xe1\xe2k\x16rK]3\xea\xe4\xe6D\x0c\xe04byN\xa3B\xe5?0-me\xe3i\xf4_\xff\xfc`s\xf1\x98\xcf\xfa0H8K\x9a\xb2\xedh\xa4G}\xd4\x91\xaf\x87\xe0,\xafX\xdc`\\B\xc1\xaeh\xaa1\x12\xd5t3Z\xc4F\x84\xa4\xbaA\xb6]\xfe\xfb\x0f\x97o^\xc8}\xbbz\xae\x1ec$\x85\xd3\xb4\xd0[\x83\n4k\xee\x0fz\x0bT\xd1\x92\xfe\xcax\xbcNIQ\xe6\x94WFB\xe6\x9fbk&\x9d\xf1\xfd=uK!f\x98\x18\x0f\xa0\xfao=\x95\x15\xd5#N\xf7\x10\xbcC8\xad\x9d)X\xbb\x13\xc8iEN\xeb\x1f\x86\xd3\xdaXL\xc63Z\x9b+\xf2\xf9\xd9\xabn'\x90\xde\x8a\xf4V\xcf\xac\xbc\x03\x12\x86+J\xa3\x9dL\xdb\x00\xd4?\x9b\x89`\xfe\xb3`\xda\xecU\xeb\xd3\xaaM*\xc3P\x0f\x86z0\xd4\x83\xa1\x9eqZ\xc4P\x0f\x86z\xbe\xccPO\xad\x8d\x9cr\x96\\\xd3\xb9\xdc\xaf\x06+\xa2\xf1\x8e\xb1\x0c\xab\x84\xacE\xe7\xf5\x8f\x1a\x1e\x96\x0f(n\xf4\xa6\xdc\x92\xf4\xeb\x9c\x92\xe5^J:1\xe5T\xe0F\xbc\xb5\xa5\x05Y\x92\x82\x84\xe8\xe5\xbbo&\xd5\xcb\x81!\xb0\xe3\xc5n\xde\x88Y\xf4\xc5\xc2\xb4\xdbm\x8d\x83\x99\xc8\x97\xd8=;ca\xad\x08\x93.\xf5+\xd3\xe7\x87\x1d]\xb2\xb9\xc0\xa3\xb6\xea\x8e\x18\x91\xc7\x0du\xc5\x87\x9c\xaf\xfacCSF\x86&\x8e\x0b\xd9\xa3B\xc3bB\x01[U=*\x83\xb6\xa9zc\xda\x1e\xc8F\xf0\xc8\xa5\x16\xdc\x93\xe2\x9e\xd4\xeb\xc2\x9a\xf69\x97\xf4\xd6\xda\x1d)s%\xfe\x12\xd4\xbc\xa1\x8bl\xab\x81\x83\xd6X\xd9\xa89\xbbIi\xce\x8f\x7f\x93\xff\xe5\x00\x9a\x1af\xe8\xb5x\xf4\x83|\xafZk\xe5r\x9a$f%\xad3G(\x7f[R\x86\xc4\x17/\xe2H\x12\xe1\xaaN\x08\xf3][\xcc\xa6\x01\xff\x92\x90\xa9\xfa\xcd\xfe\x9b$\xf4\xcf-\xc7\xa2\xa1F\xfd\xf3\x83u.\x9aC\xe5a\x184=\xbe\x0e\xb0H~OC\x891.M\xa8\xa428zl\xf3\xfe\xc1\xdd\x95\xbe\xd1\xdd\x16\xab\x17\xa7\xc4\xa34\x08P\x1c\xf8\xb0?\x08S\x9f\x0f\x03\x84\xb0bB\xbf\xc2\x94^\x9f\x92Q\xbe\x9f\xb54\xcd%t\xe1\x820\xd8\x0fT\x12\xa2\xa2\xda\x96TJ\xe2E^F\xa2\xaa\x9aW)\xd3H\xa5\x95\x8d\x16\xa3\xb7\xb749\xa2Y\xae\xa9\x92\x96Ci\xf5x\xaf?\x80\xc4\xcd\xaeh*\xe3\x12-B\xb1\xae\xd35\x97\xd5\xa7\xd3\xcf\xb9fG\xcd\x90\xeeVk\xf9\xdcN\x9bl\x04\xe1S)\x08\x9f\xd6?\x85*\x13\xe1S\xe9h6\x1c\x9aj_\xda\x9c!b\xabYmPe@f\xdf\x052\"\x9eU\xe9\xc0\xf6\xe6\xb4g6\xe3\xe6\xb5\xf3+n^\xefy\xf3:$\xde\xabv\x86\xcdYRo\x18\xcdrR\xed\x1b\x9b\x1b,\xb16w\xa7\xcd]\xedv\x11\x81\xf5o\xbd\x01\x11X-w\xac\\?v\x88\x08\xec\x14ZD\x04\x16\x11\xd8/\x13\x81\x1d\x1d\x05\x9d/vsY\xf5\xd00\xe8\xf7;Y\xc7\xa0hhUNc#=4\x1a\xda{o\xedw\xdf\xcc\xbe\xed\xbd\xb9v\xbf\xc1\xfa)\x8c;V\xe2\xf3E1\xeehy\xc4\xa78\xc0\xb8\xa3\x12\x8c;b\xdc\xb1)\x18w\x94\x82q\xc7\xfa\xa7Peb\xdc\xb1\x1bw\xd4~MX\xf8\xb1SV\x8f?70\n)<\xaf\xea1\x8cCv~\xc58\xe4\x1f8\x0e9tG\x87\x91\xc8\x03\xb4\x85\x91H%w\xac\\\x7f\x0c\x0d#\x91Sh\x11#\x91\x18\x89\xfc\xa3D\"\xf9\xdc\x1c\xd1\xb0\xc7 \xff\xbb\x13\x83\xe4\xef\xf4+\xad\x93\x0fQ\"\xad\xa9)\xae\x8aI\xe6t\x1d\xf3\x82\xe6t)\x97\xf8\xaa\xa8\xe6R\xcf{OB\xb4+\xd3O<\xd8\xd8\xa1\xe9\xf8\x03q\x1e\x9b:\xe8} \xc0\x03T\xe1\xd02\x8d\x0bO\x00\xb2\xbfkJ\xac\x1dT\x12\x10\xea\xf3wV\x897\xdc\x17\xd0e#!\xc1\xa8\xe6\xd3\xc2\x9b\xad\xe2OjB\xa8ZZw\xd4\xac\xe3kj\xbf\x1d\xa1Y\x96P\xba\xbc3\x06JR\xb0\xed\xd3\xfe0\xaa\x12z\x9b\xb1\x94\xbaC\x94\xbe\x8dTS\x1a\x9b*\xcbn\xdf\xc80-\x99v6\x15\x95\xb1\x1b\xb5~=\xfb\xa6\xfe]\x85\x9bS{\x14R\xc9\xb6t\xddR\xa4$'\xb1\xce-\xbb \xdc\x1cs\x93K\xb22\xd2\xe2\xdf\xf4\x97\x92$\xce\xa8\xa7\x12\xf9\xf5\x94U\xfa\x98\xc6\xc5c\xaew<\x9e\xd7\x9e\xe9O\xfa\x12\x9e}\xf3\xffT}\xac\x9b\xe3{_\xde\x1cdb\xc0\x8d^\xb0\x95\x1a\x1b\xf5\x158QN\x85\x97a\xbf\xe2EI\xd5\x03Q\xc4cQ\xc4c\xcf\xf5\x18J\xaa\xb6\xbf\x84\xbf\x1dA\xb1)\xf9\x0bx\x06\xe2}\xd5\xb7\xbf\x05\x8cU\x92\xc4\x84\xbb\xa7q\x88QQ\xe21-J\x82\xa7\xbc/\x84eDw\x01Z\xb7A\xea\xc9n~3'\xa1\x82'\xbc\xf5\x99\xb08%\xb4>kc~\x11\x1d\x1f\xef\xde\xe7@\xbcMkm\xc5K=Z\xf4D\x8a#\x13\x88\xee\x7f\xd7\xaf\xca\xc6\xd2\xd2\xb5\x9bF\xa5\xcd\x89&\x9d kajb\xb6\xbc\x8b\xa6\x8893z\x0d\x0c7r\xa2\x9an_\xe4\xdf\xd4t}R\xef\xc0\xc5/U\xef\xac\xe5\xc9\x19\xdf\x98s\xdfX&\xd62\xe6YB,\x81\xf2\xe1=t\x8c1]S\xb5\x9f\xd1\xeb\\\xb9^S.v \xda\xba\x8a\x91Vu\xd6W\x98\xf2\xa5\x95\xf3h\xb9$F\xfa\xf7\x13\xf5\xae\x17\xc1\xfek\x85_wE\x0f\xe4\xc7r\x11oF\xab\x9a\xab\xba\x02\xe9\x9e\xd0\xf5\x0bx%\x8b\x85\x13a\x06\xfb\xcb\xe4\xbb\xed\x82\x8d\x0f\xe9\x85\x0fGUQ\xbd\xc1\x17m\xd4\x7f37\xc7\xf1\x0d\xbbIA\xde\xca\xab\xef\x82\xb2\x96&{wr\xf9\xe1\xddS}\xa5`\xe4\xbaS]\x8fq.3\xb7\xab\x06\xe8\xcf\xed\xbc\xc0\xc8\xb7A\xaa\xa5\xcc\xe3{P\xe1\xc7\xf3S\x15\xa7X\xb2\xa8\x94W0=a\xc2o\x10;\xe1\xaf\xa3\x0d\x89\xd3\xa7:\x12\xa5!@kI\x8d\\\xe8q\xaa\xfc+\xb1Q\x85\x0f\x99\xfa\xeb`\xb5tQ=%e\x1e\xcf7\x84o\xeeG7?\x12\xbeQ\xab \xdf\x90\xe7\xdf\xfd\x0dD\xd5\x8ah]),c\xb1\xb9\x1e\xf9\xe3\xf9\xa9\xdd38\x15V\xbe\xd4\x88\xda5\xcd\xe3\xd5N\xe1\xb6\xd67\xe4\xa02\xd5,\xe3e\xfa\xb8\xd07\x9aM\xac\xd6\x10\xebX\xed\x88\xfdKo\xef\xfb\xc4\xbd\xaa\xfa?J\xb5\xed\xaenWj\xec\xc9\x1bC\xae\xda\x96\xf7\xbb\xbb\x8d\xcd\xbal\n&\xfdC\xf4X>\x8c\xe8\xf1\xa4\xe8q\x15\xd5\nJ\xa8\xd0W\xccq'\x14\x87\xa9\xff\x10!\xee\xfd\xfd!!\xc4\x08\xa7\x0e\xc3\xaa\x10N\xbdC\xe5\xfa\x81@\x84S\xa7\xd0\"\xc2\xa9\x08\xa7\xfe\xf1\xe0T\x7f\x86\x1b\xe9\xc0\x05A\xa9rK]\x079{\xf9\xf5\xfb\xc8\xe9\x97\x06\x9c\xda\\\xaaQ\x1b@/\xfc\xe9qn\xbc\xd0\xa7\x0f\xa3pb\x13\x1e\xb7\x0f\xbc\xddS\xe2\x05<\x03<8\xf0\xeeZ\xba\xcf\x0e\x80:=\xd8\x06\xc8;\"C\x81\xce\x10\x98\xd3\xbd\x17\xa8%\x14\xe2\x1c\xa2\x99i\xe1M?\xb89\x08\xda\xf4\xc2=0\x14\xd8<\x0c\xd6\x9c\x18\xd4\x1c\x07i\x1e\x0eh\x06\xc0\x99>C\xa1$\x00\xca\x0c\x9c\xcc\xbeX\x8a\x92iAL\xd74\x0f\x0b\x95M\x0c_\x8e\x07/}\xea\x1b\x03\\:\x1bk\x81-\xed\xa0\xa5w\x1c\x84\x19\xadi\xe1\xca0\xb0\xd2 U\x0e\xeb\x97u$M\x08R\x86B\x94v\x80rX\x9f\x06\x81\x93SC\x93.`rX7\xacCn\x14$)[o)0\x10\x90\x1c\x03Gz\xb7\x17F\xacP\xe4DJ\x9b\n\x84\x1c\x0fA\x06#en\xf8q:}L\x07<\x0e\x85\x1d\x0f\x03\x1d\x03\x15\xe9\xb7s\x87\xc1\x8d\x0e\xb01\x14\xbf\x98\x08\xbe@\xf4\x02\xd1\x8b/\x07\xbd\xe8z\xb9\xad\xe1\xa7\xdc\nG\x12\xe6\xa2q\x1dB\xdf\x89\xb5\x032g\x1d\x12\xa7\xaar\x90\xccU\x91\xaa\x9c\x90T$f\xf2\xea\xc3\xab\x17j\xf30 \x8eU\x157,\x9e\xd5\xaaO?\x8d\xc1\xad\x96`p\xab\x960\xaf\xc2<\x8b\xc1\xad~\xc1\xe0\x16\x06\xb7z\xc4g(\x94`p\x0b\x83[-\xc1\xe0\xd6\x9e\x84\x8d$\x0cnap\xab#\x18\xdc\xc2\xe0V\x7fa\x18\xdc:,\xb8\xd5\xdahz#]\x9d\xe2\x8a\xea\x1e\xb4\xd0H\x17\x9c.iZ\xc4\x11I\xd4\x82\xe3\x88\xb6-J\xe1HD4\xbe\xde\xd3\x81Z\x01\x88\xb9\x88H{=q*\x03\n\x94\x17\x18P\xc3\x80\xda\x1f#\xa06\x94\xfb5>\xa4&\xfb\xa8\x1f\xef\x8b\x9c\x9d\xc9\xdf[\xa1\xb1Z-\xc2\xb4\xdf\xca\xf2\xf4Eb\xbd\x11\xb0\xefIz\xa5\x8a\xf9\xca\xf4\xe6\x81F\xbc\x9a\xcahJ\xab1\xea\xa1\xf6a\xa5\xb6J\x94\xc7\xbe\xa7\x94Z\x0e\x88\x9fq\x9a.\xe74%\x8b\x84.]\xcb\xf9\xef!\x00\xe6\xec\xa6\x12UN\x97\x08\xda\x960\xf7\x05\xe0\x82\xa6\xcb7\xaaJ\xd8\x92\x8cwf.i\xe9\x1exA\x8a\xd2q\xe8\xf4fC\xe5\x0d{\xa4\xb2\x06\xf6\x98\x87(X\x94j;%\x1d\xd4\x81\xd7\xc2\xe5\x10\x1b\xab\xe5\x0b\xf8\xa8\xd266{\x14\xa7f\xe4\xc6\x1c\x96\xd5\xb33[\xab\xde\xb2\x1c\xd64\xa5<\xe6G\xc2\x13S[\x18z\x93\xec\x84\xc7*\x14\xd0\xd4\x86N\xcc\xbbO\x85\xadE\x17\xa6\x07\x97\xb5\xde\x8b\x82\xe5dM\x8f a\xec\xaa\xcc\x8ed\xca\xd9-I\xe3\xacLT\xd8@\xce0y\xb3`}40\xb6}\x89\x94\xdd\x18\xae\xfa\x15\xa5\xd9>\x17\xb7\x96\x139y\xdbN\xe0\xbf\xe9\xab\x11% \x9a\xde\xc6\xbcP\xa1\x83\x05\x89\xaenH\xbe\xb4U\x1b\xb1mF\x8ax\x11'q\xb1\x13\xc5\x9a\xde\xaf\xe2\x84\xf6\xeeU\xb5K3\x0f\x9d\xe0}c>\xc0KT\x86\xb87\xe9\xe7>\x00Z\x1d\x9a\xbe\x1cG\xf5Mz\xfd\xc6\xdb\x07bs3\x00\x12J\xb8\xf5&h\x90`\xc6\xa3\xe3G\x10mHN\xa2\x82\xe6juK\x08/\x80\xd3\xb5\xbc\"Z\xcf\xd0\x8f\xe7?=\xe6\xdd\xadZ[d\xa3\xaa\xeb\x9c\xed\xb5\x8a\xe2Ve\"Ot\x93Dhp\xd9\xbe\xf1]h\xf2 \xe1=\xd3\xbc\x96O\xa2)\xc7k\xc6\xd6 \x9dI\x9d-\xca\xd5\xecu\xa9\x96\xf7OOUOd\xb15\xc2\x15\xdb.\xbe\x94Qt\x92\xb2T^\xcc,\xe6\x90\xbd\xe6't\xb6\x9e\x1d \xd5\xcau\xfc\xd1\xec\x910j)+\x80D\x11\xcd\n\xba|\xeaZyOS\xc8\x84\xb2\xe3\x88\x1eAA\xc9\x96W7\xc7g9\x15;\xbd8\x11-\x15\x16pCa\x11\xa7d\xcf\xe0\xd6\"s\xca\xee29\x06\x15\x84\xd0{A\x92\x12e\xeb \x96\xb1\xec\x92S\x03\xdb\x88\x81Do\xe5\xa7>Iw3\xf8\x91\xdd\xd0k\x9a\x1f9\x9d\x92\x8f\xe7?q\x1d\xa83W\xa5Y\x9f\x95\x16\x94\xc2\xa7MQd\x9f\x8e\xd4\xff\xf2OG\xc0rH\x99\xfe\xf5H\x8e\xc6H:i\x85\xbc\x85<\xb1w\x9b\xd3\x02\xca\x0c\x88Z$\x1c\x8f\xe5\xd7fs.\xef\xd2\x92CK\xb6\xbc`ff\xa9UE^,\xcf\x81\xd8\xef)]\xb1$a7\xfc\x85\xe3\xdb\xfe\x19NWu\x8f\xc4\xb0\xd0w\xdf.\xabN\xcb\x05\x90\xf3r\xeb\xb8PT\x14t\x92\xc2\x8f\x97\x97g\xf0\xc3\x9bK`\xa9\x99\x82j\x8e\xedd\xb8\x94X\xdf\xfegwZ\\\xee2\xfa\xf3?\x7f\xb6\xbe\x00\x86$\x92\xea\xf1V\xf9\xab,\x17]X\x96\x11\x15\xee\xb3\\\xc2\xfa(6J\xfe\x0c'u(C\xa1#D\xe8L\x91\x85\"\x12 \xdb\"\xef*\xad\x10\x94\x05\xe1\xb4\xef\xb2/%\xccuK*\xa8A(\xdb(o\xf2+6t\xdb\x98CK5\x89\x88\xe9\x92\xf8\xf75\x93\xc1\x10\xfb\xc0\x02\xdd@i>r\xbab9=2\x05\xb4o*M)]\x1a\x1cT\x9a\xbc\xfc\xda\xd1\x13\xd9\x97hC\xd25\x95/\xc99;\x83'\x1f9\x85k\x9a\xf3\x98 \xbfF\x0eOa\xb3\xd4\xf8$)Y\xbbz\xbf\xc8)\xb9\x126H\x17<{\xeas\xf8\xe5\x11\x8cU\x99Fj\x86\x89~h\xdb\x15\x95y.y\x03M:\x92\xdd\\\x8a\xf1\xc8$Rng!\xe9\xb5lQ\xae \xa7b%\xa2*\xb0\xa4\xd0eQi\xb5 \xab\xe6\xa5\xb5(\xc9\x83H\xd5\xed\x8c\xc5\xc6\xb1\xb8\xec2:S\xe3\x9fd1\x9fEl;\xd3\xf7\xd5\xbe#;x\xfe\xcd\xf3o\x8f\xa0E\x1f\xbb\x89\x97\xd4ajd\x1be\xfb\x945\xb1W]\xe1\x15f\xfc\xa7KQ~\x96\x90T~\xcf\xeawa\xe9\\K\xc4\x854\x1f\\\xd1\xb4\x14\x0d\xa1c:\xe1\x89v\xc9\x15\x86\xae\xec\xcdS\xfb\xca,\x8f\xdb,\x1c\x96Rq%\xe2b\xd3\xe9E\xf3r\xcc-I\x8b8\xea\xa5\xd8\xddI4\xba+\xa1\xae\xdb;a#\xc5\xee[\x07?k\xafk\xcf\xb9\xd2\x1e\x07Y\xb0k\xfbD\xd3*\xd0\xc3\xa0\xaf\xfb!-\xfbt\x92\xee>\x19\x9fM\x06#\xea\xe8\x80\xbd\x85\xbdE\x99\x85\x8b$L\xcf\x07 \xfd\x9fV,\x19\xea\xceS\xd9\xc2E\xdbW\xed\xf8\xa4\x95\xabi\x19\x9agf6'\xf1B6\xbb\xba\xd8]\x87\x96\xc5 \xcfHtu\\\xa6\xe2\x7f\xe4\xf5\xabr\\\xf4Ok\xed}\xd8\xbd-\xb6\x82\xb2P\xd6\xd6\xd8,.\xac=Y.ce\xc0\xe4e\xd1\xb9\xbc\xf9Q!f\xe6V\xf9\xde\xf2D{\xd4'\xec\xaf\xef\x8d\x8e\xb3<{\x01g\xa2\xfdb\x02\xeb\xae\x90J\xe9q\n\xaf\xfe\xf2\x17\xc7\xda\xfd\x961X1\x06/a6\x9b\xfdo\xebc\xa21$\xdd\xd9\x1f \xe9n&\x9a\xf16g\xdb'+\xc6\x9e\xda\x1f\x9d\xcd\xec\x8br\xbc\x82'\xa2\xa8\x8f\xb2#\x97\xec\xc9\x9fDYO\xe17\xc7\xc2\xe2*\xef_n\xdd=\xf7\xe8\xee\xef\xe4\x9aL\xa6\xbc\xef\xff\xe5\xe5\xcb\x97/\xedC@\xbcWG\xc9\x94\x93\xcd\x84}\xd1\x1e\xa2\xda\x89\x97\xbc\n\xc7\xaf\xcb\x84Xv\x1d\xfb\xc5\x14\xf2\xf2\xeb\xda\xa7;\x02\xba]\xd0\xe5\xb2\xf6\xee\x8e\xd4\x06\xaa\xaf8b\x89\xb75\xfc-\xc5\xd4\xfa\xf4\x1fBs\x9ft\xf8\xa7\xf2i\x9b\xdf\xa6\x7f~h{\xf6\xc2\xb1e$\xd1\x950ju\x08c\x15'\xd4\xbe\x10\x19#xFs\xceR\xe7\xac\xd5\xb1\xd3U\x9c\xf3b.?\xf0Kxf/\xb9zA\x8cI\xf3\xfc\xf3\xe1K\"\x80\xb3U\x8f\xa4.\x1f\xbd\x80G}\x93\xb6\xad\x86\x99\xea\xe5\xa3#Wy\xb2\x7f\xef\xc9V\x94\xf9\x7fT\x17\xfe\xdd\xf9\x82\xe8_\xe7\xf9\xa1\x9d<]\xe9\xddh{\xacU\x90\xcf\x0dM\x92\xaf\xafRv\xa3\xf8\x81\x1b\xc2\x81\xb8N\x1b\xda'W{\xc8\x1f\xa9\xddMg\x1e\xd4\x87\xc8ts\xc4\x00\xb6\x9d\xeb\xd4\xf7\xcd\xf7\xfe\xf8INF3\xce7,Y6\xa9\x88j*\xc7i5?@\xc5l\xfb\x8bRS\xa6\xbf\x1e\xd9\x84Y\xb5\xda?\x11f\xcd\xa8p/\x98gb\xdc?\xff\xf3\xe7\xa7\x8e\x894\xc5\x98kW\xe8\x1evRU\xa2\xc8g\xb3\xe7\xcf\x9e\xf3G\x8e!\xa4\xfe\xd7I6#E3\xbc9\x86\x00=\xf4(J\xcb&NP\xa1)Y\x01\xc2\xd3\x96mC\x8c\xab\xde\xe4\xedx\xc6\x98*\xdd\x04\xf2\x0b\x9a_\xc7\x11\x0d\xa0\xda-\x12\x16]\xf1\xe3\x84\x14\x94;\x0e\xcd\xff@\x8b\x9f\xe4#\xdf\x8b\xe75\x9f^\xcd6\xf5*\xc8\x82z\x89\xe3\xedw\xbf2\xfd{\xa0D3\xd9\x8fy\xbc\x9c\x94\xca\xb4!|\xe3\xe229bo\x9e\xc8[F\xf2b\xcei1\xdfP\xb2\xa4=\x006\xf8Z\x0e\xde\xd6\x0bq\x9c\xd2\x05/\xeam\xc4E\xa40bW\x15\x84\xa8\x0b\xfc*\xab\x8e\xd2\x9e\x91\xbc\xe0\xb4\xf8Qjn\xffs\xab\x87\xe4\xa0=}\xdd7Jz\x86\x88z\xe7\xf1k\xb1\xe2E\xa4\x10\xf37\x93\xb1u\xe9z\x7f\xe2\xcb\xab\xb9|\xf5\x13\xc4)/(Y>\x9et\x98\xdd\xed\x18\xd0H\x88\xe3\xeb\xa8\xee/\x08\x8f#\xa5\"\xc9\x9b\xf4|M'\x17/\xa4]`\xff M \x1a;\x10v\xaa\\ \xc9\xb2\xfb\xad2$\x92\xad\xe4\x950\x8f)/9D$Sg,4\x96\xac\xff\x9c\x97\x89\xe2{\x0b\x05\x0b\xbb\xean\"\xa9\xbe\xa7\xc2\xbd\xc5\x7fD\x1b\x12\xa7G\x8e\xd0F\x93\xc4,|\xbe\xea%E\xaa\xab(L\xdc\xecnU\xab\x1c\x05\x1aD\xa0\x062\x1fsW\x03x!\xcf\xef\xe5$\xe5\xca\x07\xdc\x92h\x13\xa7\xbd0\x81\x10\xd9\xba^\xebo$\xe0\x93\xdaHfF\x02\x8a\x08\xb3\x95E\xbcu\x90P\x07U\xb3$\x05\xfdZ\x94gyR\xee\xb2\xeck\xa3\x91 g\xb4{!\x80\xd0\x0eB\xc8\x82\xa0$h-5\x12\xd4S\x08\xee-\xf8\xd7\xd8\xea\xb1\xa0\xb5\xd6H\xc882\xe2W9\x0cQ;\x84\xab>pM\xee<\xdc\xbf6\x1b\x91C6b\xdbm\\\xcc\xef\xc3\xab\x80\xbaa\xa2:u\xab\xb4\xb2\x9a\x9d\x0dSS\xc4O\xf7\xd4<\x89\xb7\x92\x82\xe5\xfc\x9e*\xec\xeaC\xe6\x9d\xd4\xf6\x1bXYdeQ\xff-\xcb\xe9\xb5R\x97\xa54\x99w\xe1\xde\xfbP\xad\x98\xf7T\x1f\xc9\xb2{\xaaI\xce\x0f\xcd\xf4\xb9\xa7*\xe9u\xbc\xa4iD\xef\xa9\xbaj\xfc\xd5n\x8f\xc3\x1f\x15\x86\x9aq\x9a\xcf\xf5]Aw\xdd\xbe\x963\xa7\x0c^\x8b\xea]3\xbc\xe5\xf9leI\xd4\xd2\xd4\xcbr\xb0\x9e\xf0\xf0.U\xfe%\xaa\xb8\xf5\xaa\xc3~\x1e\x07|gr T\xa7\x01Z\x85An\xf2\xe5\xad\xa6f\x9a\xa0\xa4\xf4,\x15\xe8\xa3|\xc7\xff\xd0\x91\x8d\x1f\xa5S\xf7\x97g\x0eP\xd4\x1c\x9d\x96d\xd3$\x11J\x83\x8a\xca$\x0d\xd7\x0c\xe0\x1f\xf4qN\xe1\xff-y\x01d\x9dS\xea\xee\xae\xe6\x16\xca\xc4\x04*4\xee\xac_\x92\x90\xb7T2\x9aD\xafT\xd3O\xb2\xecG\xc27\xb0dT\x11\xbbt\xa2\nQ\xf4\xde\x15sM)n-t\"_R\xad\xd7\xea\x00N\x03x\x90\xe9XV\xca\x13'\x9a+\xa2\x9b\xd1\x9b\x95\xa1\x16\xdb\x92`l\xc9\x9d\x8dyw\x050\xed\xc0\xf7:\x92\xfe\xf6*\xa9\x0eo\xcc\xafYA\xe7\xfeN( l\x05\x0ch\x89\x10\xd9\x06\xe7\xc13#\x03\x1a\x00\x03\x1b\x01\xa6\xf8\xa0'\x83MQShZZ\x93W\xee\xcb\xd7pq\xfa\xc3\xfb7\xaf\xe7\xef.~\x98_\xfe\xdf\xb37\xf3\x8f\xef\xff\xf3\xfd\x87\x7f\xbc?\xa0\x84\xb3\xf37\xff\xf5\xe1\xf2\xcda%\xbc\xfa\xf0\xee\xdd\xe9\xe5Ae|8\xfbpq\xf2S`\x11\xe6\x0c\xd0\x81\xfa\x08\xb7\xf7m\xb9\x88\xd7)]\xbe\xe3\xeb\xcb\xea\xecS\xa1\xb9w\\\xfe\x14\\R\x83\xec\xd1\n\xb38\xaduG\xac\xdf\xf4\x05\xfc\x17+\x9ca\x91\x8e\xd8\xbf\xcb\x0b8\x93^\x0eI\xc2\x8a\xf3\x852\xda2b\xe2\x0c\xd9\x9e*\xc9Y\x99:\"\x10m\x19\xb6WV\xe2:\xa3\xd5/\xfe\xb8H[\x06\xda:\x18a\xef x;_\xcb\x88\xcf\x07\xa1.YW\x06\xc5Z\xda2B{0R\x83B\x02\xa32m\x193\xee\x8c\x0c\x9f\x12F\x86~p\x18\xff\xd1a\xec\x87\x1f\x18\xe9iKP\xdc\xa7-E\xbc\xa5\xbc [O\xa4\xbe\x96\x11\n \x0d\xa2\xb6\xa5\ne\xf87\x9cm9\xa0\x85\xc1\x9f\xaan\x9c%\x91E\xbf\x8c\x19\xf7\xc3\xedm\x958jX\xb3\xeeVc\xe3\xdd\x10\xb1\xba\xd7}2'\xe8\xab/\xa0\xafVq\x9d\x8aj\x8b\xb0\xadq\x14g\x92x\x1f\xa7\x8d\xe8\x87\xc9v\x15\\\x14\xe1\x9cE\xb1,\xa8\x05\xf0\xbb\x85\xde\x164uC\x85m\xf9\x02\xbeO\xd5\xa7\x161\xd4}\xfe\xad-\x0d\xd0Jg+U\x07`\x14\x06GU\xa4:\xfc\xd3h\x97\xd3\xb2C\xefJ\xd5\xfc\xf9\xefq\xf2\xd4\x1f\xa7;\x8d\x82\xcb\xd9\x9bn\xddi\x14\xfee\xf6\xe6[\xcf4\n.\xcc6P\x06}\xff1\xca\x95\x8a\xad\xa8{bo\x94\xe5T\xec\xe7\xa1\xd5\x0c\xf1\x97\xa0\xf2d\xa0\xbf\x0e\xdf\x8b\xde\x84i\xa1\xb1\x99\xf2=*\xc3\x0d\x8b\x90\x81=\xd0\x89\x1c\xea\x8c\xf6\x0c\xf2\x87F\xb6$\xd4\x0f\x1a:,_\x1b*\x8d\x18\x9bo4\x91\xa6\xa65\x19j\x8d\xa4\xe7y\x0b\xab'\xbc\xda\xebCq\xc3DY\xab$\x8edvc1\xb2=c.\x11\xbb\xe3y\x94\xc44-\xe6\xa4(Ht\xf5\xb9 >\x8d\x1e\xcc\x03\xce\xe0(\x19\xd0\x16\x18\xd8\x1e\xd0\xfe\x1a]\x0e\xdc\xea\x0dl\x13\x8ch\x17x\x8eh\xf5\xcb\x88\x86\xc1\xc8\xc6A\xc8!\xaf~\x19z\xf4\xab_F\xf6\x15\x0e\xe8/\x84\x1d\x1e\xeb\x97\x81\x06\xab+\xc6\x80y\x0f\x9a\xf5\x8b\xf7\xf8Y\xbf|\xceF\x0f5\xc1] ;\xd66\xb8\xd8\xf61\xb8\xcea\xb7\xc1\xa5\x05\x1e\x8e\xeb\x97\xd0#s\x83\x0bn\x1d\xb1\x1b|\x90\xae_\x86\x1e\xaf\xeb\x17\xff\xa1\xbb~\x19=\x90\x87\x85\x99\x8d\x8c\xaen\xa8\xcf\xd4\x14\xf7\x11\xbf~\x99\xa0\xa1\xa1.U[\x02\x0f \xf6\xcbg\xb2\xfdc\x82\x98p\x98\x92a\xdc\x96\xb5\x96\x03\xa2\xd9F\x0e\xd06\x1c\xa8q\x18\x1b\xe562&\xea\xd7\x95\xf13\xd2\xc8\xd8\x81\x03\x87\x0f\x1e8t\x00\x1d\x14\x1572\":n$\xfchf\xbf\x1c\xa0\xbf\x03\xf46\xfcpg\xbf\x04\x1c\xf9\xec\x97\xcf\xd1\xed\xe0\x03\x97\xfd\xf29\x9a\xec?\x9fd\x97\xd0\x93\xaa\x83\x0bv\x9dl\xed\x97a\xe7]\xfb\xe5s\xa8?\xf4\xc4l\xbf|\x8e\x16\xfb\xcf\xdc\xf6\xcb\xe7h\xeb\x80S\xbb\xfd\xf29\x1a\x1dx\xee\xb7_>G\x83\x87\x9d\x1c\xee\x97\xf0\xf3\xc4\xfdr\xff\xfd>dw\x1ex\x80yP\x99\xf6\xc3\xce\xfd\xa2<\x8a!z\x1e\xe9\x06\x8fu\x7f\xbf\xa0\x8d\xe7 \xde\x93\x91C<\xf3\xe1\xb8\xbc\x11\xdcq\x86\xc8H\x9b\xa0\x04w\x9c\xa3\xc7\xb5\x91\xf1S\xd1\xc8\xd8\x81\x03\x87\x0f\x1e8t\x00}\xee\x1dg}\xd7\xfcP\x0d*\xcd\xb9\x0f\xf9\xf7\x8b\xf7\xe8\x7f\xbf\x1c4Q\x0e\x9b&\xc6\x92\xceW \xe9\xb9\x1f9D\x0e\x1eh\xc3\xb8\xedm\xf9\x1a\xbe\xff\xe9\xc3\xab\xff\x9c\x9f\xbe\x9e\xbf\xfd\xe9\xe4\x87\x81\xbc\xee\xaetK;\xf9\xfe\xe2\xcd\xfbp\xbaz[\xba\x85\x0d\xe4\xbe\xb7\xa5[\xd8\xfb\xd3P\n|[*B\xfctj\x1b\xbf\xf5V\xa2&\xf7\xf2mB\xd6\x10\xa7K\x89\xbf\x9b\x9b\xec\xf4\xc4\x1f\x05\xca(\xa9\xf9:\xb1\xa2\x84\xf8^\xd8\x97\xd1<\xca\xb6\x1cR\xa1p\x80R\xe10\xdb}\x80r\xe1\x10\x05\xc3\xa1V\xfb\xf35|\xbc\xbd\xbe3k}\xa8\xad>\xc4R\x1f\xf0!\xc6Y:\x98\xc2F\xdf{\xab\xc7\x9dE12\xb2\xb9\xc3\x9a*\xf6a,\x9d\x87\x83`\x03[5\xac5\x8b\xdd\xaf$-\xe2\x94\xce\x87\xed\x88\x86\xed\x84\x06\xec\x80\x06\x1b\xf7\xe1&}\xf0\n9\xf0\x0b(\x19a\xfb\x06\xaf\x87\x83\x95\x05\xa3\x14\x06cW\xbfQ\x8a\x83q\xca\x83\xf1k\xdd\xfd6s\xcc\xcav\x07k\xda\xf8\xd5l\x9cy\x1d\xa5\xe4a\xc6L\xc9\x01\xab\xd6=\xb4q\xdc\n5\xb0a\x03\x9b4$\x08>\xb2%\xa1\x01\xee\xa1\xb1\xd3\x9f\xc4*\xfaJ\x9e\x05<\x91G\x01\x0f=\xa1\xa8S\xb47\xce\xcc\x92\xa2\xa0\xdbL\x9eN,\x18lc\x9eP\xb2\x04\xa2\xce!z\xcbS\xe7\x14\xfb\x02\xa6\x0d\xfao\xbf\xe2\xbd\xd6\xddo\xc9}^F\xd0\xd7\x0c\x19M\x1e\xa2\x8c\xaa\xc7G\x1d\x08!\xbf\xf8i.^\xb5A\x90\xea \x88k\x10\xa4@\x08_*\x06QL\x82z\n\xc1\xbd\x05\x08&\x88\x84}O#!\x03\xc8\x88_\xe50D\xed\x10\xae\xfa\x81\xe4\x8c \x1aF\x08\xe1\"\xc4\x95\xf6:\xd0\x81C!t \x0c\xa2@\x0c\xf8\x18a\xb4\x86\xff\x8f\xbdw\xed\x8e\xdbH\xee\x87\xdf\xfbS\xd4_/V\xd2.5\xb4\xe5Mr\x1e%\xca\x89V\x92mnl\x89\x91(or\xf6\xf8P\x98\x99\x1e\x12\x11\x06\x18\x03\x18J\\g\xbf\xfbs\xfa\x86\xdb\xf4\xa5\xba\xd1\x14io\xd5\x1b[\x1c\xa0\xd0]}\xab\xae\xfaUU,\x80!\x12\xaa\x10 J\x08\x87\x1f\xcc\x02\x1a\xe0\xd5\xc6T\xe0\x81 \x98@0 `\xd6\x04,`\xa4&\x13\xf1q\x9c\x06\x83v\xc6G\xb4\xc0\xd3\xfd\x10\xd5 \xeb4\x17.p\x04'\xb3C\x18\xd7\"\x84\xcb\xdb\xe2\xc6\xb60\xcc\x0e\x95\xb8i\xfb\xba\x12\xb4\x87\xc3\xa4\xab\xd7\xbe\xcd\xcb\x95\x80\xbe7\xdb\xaay\xd4\xac?\xc0\x97\x8b?\xfe\x0bU\xaa\xf5\x1d2\xfev\x01.\xd9\x00z\x85\xe8\xf5\xe1\x8d\xc5\xf7\xa6\nH\xfdI\xdc\x02\x00tH?P\xa5\xda1\xf9\x83\xe6\x11C\xfa\xd9.IT\xa9\xd6\xdfA\xc0\x1fxtW\xf2\x8a\x1cB\xc4\x0ex\xd1\xdf\xc4] \x1f\x0e\x8d\xea\x11\xaa'\xe1\xc1\xcc\x88\xb0\xe5T\xcdCG\xbd\xa6\xfa\xe0T\x1e\xde\xf8_\xaaT\x8b\x88\x9aM\xf5\xa5\x80\x98\xd7T\x9fDF\xac\xa6\xfa\\X\xbc)>\xb2\x14\xd5>\xbc\xae6\xfd0\xbfC\xc9\xfa\xa4\xf9E^fJq\xea\x1espR\x0c\x8e\x94p\xf8\xad&\xe3\xf7\xb1?\xb1\xd5\xe5\xd7\x8fU\x8b\x9dy+OJ8c\xe5\x9a\xd5\xdb\xbcl\x8f\xa0\xbd\xe4mQ\x89\xf5\xdfsQ7\xef\x8f`\xb9o\xb5\"\xf8\xf6\xc5\x7f\x1e9\xd8}\x14*\xe7\x15\xab[\xc8[h\xabi[\\M\xe1\xba\xe9\x92\xb5-\xab\xe1\xdd\x7f#.\x84\xfeX\xd9\xbegT\xf7W\x10j\x0d\xe1'2\xd5\xfdu\xe98T\xf7\x97\xea\xfe\x1e\x12\xb6%@u\x7f-D\x85x\x14Q!\x9e\x01Q!\x1e\xd4;A )\xc2,\x0f\x920>\xf81\xf9\xadLc\n\xdc\xeb b\xbf\x03\xb4q\xa4\xa7\x88\xe1\x03\xacJ6\xa5 \xcb\xd5\x98\"\xa4\x07\x91\x12\xe4\x84\xb4q\x8d)f\xdei\n_\x12\x9aB\x07\x1c\xe2\x07\x1db\x07>\xd0n6&\x94\x15mLh\x87\xa8\xa6\x08\x81`M\xd2c\n\xf6\x17k\x9a\xd1B\xf4PQ!\x9eP\x89\xc5\xab!T\x88\xe7W0>T\x88\xe7W18T\x88\xc7D1\xc2\xfd5\x16\xe2\xa1\xba\xbf&\"s\x83\"27\x0c\x88\xcc\x0d\xa8w\xc8\xdc\xe0{VS\xe8\xed3b\xf8 N\xb7 s\x83\x83\xc2\x97\x84\xa6\xd0\x01\x87\xf8A\x87\xd8\x81's\x83&27H\n\xdfo\x7f\x8b7&27\xdc\xed\xf1!s\xc3\xafbp\xc8\xdc`\xa2\x18\xe1\xfe\x1a\xcd\x0dw0\x92\x9d\xea\xfe\xda)tZR\xdd_\x1fS\xaa\xfb\x1b\xd2.\xa0\xba\xbf\x1e\x8a\xec+\xcc\xe8/\xe0B\xf1\xcc\x14\xb8aMIo`\xde\xb0=3y\x83\xf9\xcct\x9b\x8d\x0e\xdd\x82\xa7\x84\x0b\x12\x0cfKu\x7f}a\x89f\n\x0dV4\x93?\x84\xd1L\xd1\x139\xcc\xcc\xac)\xfas\xa1:\xd3\x90\xa8\xee/\x82\xe6\xec\xfd1FL\x98'd\x88\xbb\xb2\xf64\xc3\x9a\xadi\x86\xb4a\xa6\xc4!\xd6\xca\xad)\xc6\xea7\xa5\xf8\x15\xa9)v\xe2\xc0\xfc\xc9\x03s'\xd0,\xab\xb8\xa6\x08\xeb\xb8&|\xa0\xab\x99f\xc8o\x86\xdc\xc2Ce\xcd\x84\x08\xa05\xd3mt\x1b\x1d\xbej\xa6\xdbh\xb2?>\xc9N\xd8\xb8\xdf`\xc6\xae8a3\x85E\x0f\x9b\xe96\xc4\x8f\x8d?6\xd3m\xb4\xd8\x1f\xc1l\xa6\xdbhk@\x0c\xb4\x99n\xa3\xd1\xc8(j3\xddF\x83\xc3\xe2\xb0\xcd\x84\x8f\xce6\xd3\xe7\xef\xf7\x9c\xdb\xb9?\x969|\x07\xa4\xba\xbf\x82\x12L\x84p57\x08\xf7\xa4i\x8ef\x1e\xee\x97\xd7D7N\x0cE\xee \x92\xe8\xc6\x19=\xaf5\xc5/EM\xb1\x13\x07\xe6O\x1e\x98;\x81n\xfb\xc6\x89ICk&)9l\x9d\x87!yC\xff\xcd4k\xa1\xcc[&z'E%\xbd5\xd3\xec\x89\x16\x86m\x1fSl\xda\\3E&\xd35Sd\x8a]3\x85'\xde5\xd3\xact\xbcf\x8a\xbfzKJ\x95\xba\xd7LA }\xcd\x14\x8d\xa3\x1c\xd3\xecu2{;\x0e\x00f\x1cR\xb2\xe6\xc7y\x1a$\x05c\xcb\xc6\x94\xac\x0fQC0\xe7\xb2% \x9b\xc28\x825\xd5\xfd\x1d\x11\xd5\xfd\x8d\xd3\x82\"4\xa0\x08)H\x8a\x91\x85\xa4\xe8}|\xd6\x062c\xf3\x08\xae\x92\xa5)Z\xb80K\xc0\x10[=K\xd3,A\xc3!\x03G@R\xc4\xde\x17|\x1e\x06\x0b\x0b\xa2\x04\x06\xb1\xa7_\x94\xe0 Nx\x10\x7f\xd6}\xdef\xc6\x9cl7p\xa6\xc5\x9ffq\xdbk\x94\x90\xc363I3N\xad\xcf\xd0\xc6\xb8\x13*\xb0a\x81M\n1\x82G\xb6\x04k\xe0\x0e\xb5\x9dR\xdd_\xe7N\xee\xd32P\xa3\x89\x99MT\xf7\xd7\xb3\x1c\x90GE\x10\xc4\x04\xd5S@\xf7\x16\x00\x0d\x10\xc1\x8d\xa7&\xcc\x04\xd2\xe4\x179\x84\x88\x1d\xf0\xa2\x0f\x04g\xa0`\x18\x18\xc0\x05F\x95\xf6*\xd0\xc8\xa9\x80\x9d\x08A\x10\x88\x80\xc1\xc0\xc1\x1ab\x01\x0c\x91P\x85HPB8\xfc`\x16\xd0\x00\xaf6\xa6\x02\x0f\x04\xc1\x04\x82\x01\x01\x01\xb3&`\x01#5\x99\x88\x8f\xe34\x18\xb43>\xa2\x05\x9e\xee\x87\xa8NX\xa7\xf9o\xb5\xee/\xa6m\x7f\x92\xd1\xcf\x0d\xb4\xac+?\xc5GM\xfep$/O\xbc\xb1\n\xf4\xbd\xb3\xd7\xf9RK\xc2\x14Z\xbc\xc9Y\xb1\xd6\xc5\xb6\xd8\x9a\xab\x98\xcbq\xd5\xaf\xe1\xd3\xeeV\x7f\xcb\xda\xef\xf9ZoE\x0b\xdf\xb0fW\x95\x0d\xd3e\xc9j\xfdo\xd1 \x9d\x95j\xcc\xe1\xbf\xf6\xac\xbe>\x1e\xf3\x817\xa7\xcfa\xcb\xda\xcbj\xdd7Foe\x83\xf7Gm{V\xc2\xbed\x9fvl\xc5;\xc5\xea\xba\xaa\xbb\x06\x0c\xbb\xd4\xac.\xd9vR\x1a\xc7z\x96\xd9O/\xf1\x81\xc3%\xe7Xd\xabjmX\xa3n\xbd\xc6\xa5\x9f\xaa\xcc@AmX\xb36\xcb\x0b\xc3N\xe9R \xac\xaa\x80G\x05\xf0\x1d\xfd\xfc\xf5\xf3}mU\xfe\x10\x1b\x96\x7fMIz\x06\xef\xde|\x7f\\\xb3\xa6\xda\xd7+\x06e\xb6U\x0b}_\xe6?\xefYq\x0d|\xf5\xb7\xf9&W\x86\x8eV&\x88\xb52\x94\xb5\xb5\xea<+\xf2\xbf\xb1\xb5=\x82\x7fWWm\xb5\xaa\nX\xee7\x1bV\xebA[\xc8\x92a\xb2o\xb0\xdd7\xddn\x04\x99]\x9b*X\xd68R\x87U%\x83{\xc7\xf7`u\x99\xd5\xd9\xaae5\xff\n\x13\xb7>h\xd8\xc5\x96\x95\xdd\x96\xfb\xee\xcd\xf7\xf7\x1b\xd8e\xed\xa5\x95\x9bhT\x97\x18\xca\xfeU\xcen\xb3/\x8ak\xf8y\x9f\x15\\\x82k)_\xf5)!\xc9\x07Y\xe3\xcc\xad\xf5\x9e7\xe5\xf8\xa2\xaa.\n\xb6\x102[\xee7\x8b\x17\xfbZ\xa4Hx\xffP\xf6D\xb0m.\xab}\xb1\x86%?2\xac\xfc2XeeU\xe6\xab\xac\x10k\xc8\xfe\xe5\x07lq\xb18\xe2\xa2\x15\xc9\x1f\xee-\xee\xf1\xddK\x94\x92[\xad\xd8\xaee\xeb\x87\x8b/\xec\xaf\x9f\x94\xb0\xe3\xc2\xceW\xec\x08Z\x96m\x1b\xd87\xfb\x8c\x8bC&\xcf\xda\xe5\x05oi[ a,\xf32\xab\xedJ\xb7\xa8^w\xbdc\xaa\x8c\x9cH\x07h}X\xeeu\xaaZ\xe2\xbe\x19f%n\xd9'1\xd4\xcf\xca\xeb\x05|W}dW\xac>r*T\xef\xde|\xaf\x156\xce\xca\x99=P\xec\xa0\x0c\xde_\xb6\xed\xee\xfd\x91\xfco\xf3\xfe\x08\xaa\x1a\xcaJ\xfdz$f\xe3*+\xa1\x12\xab\x93K\xc4\xce\x90\xb5\xb0\xdf\xa9\xb4\xcc\x8e\xef\xb2\xfa\x8a\xd5R4\xdbl\xa7\xcaM\x8a\x96\xb7U\x97\x9bY\x98+sY\xe9.\xb3\x1b\x187UQT\x1f\x9b'\x8e\xb1\xfd=\x9cl\xfa\x1e\xf1i\xa1s\x02v\x9d\x16\xcaL\xd3\xec\xb7l\xedH\xf6\xf6{~8}wvv\n\xdf\xbe<\xd3\xb5\x05\xdf\xbd\xf9^\xae\xb1kq\x1e\xdbu\x9e\xbfN\x97\xc5\xd9\xf5\x8e\xfd\xf4\xd7\x9f\xac/\x08\xd5x/\xe6\x83\x9co\xea\x189\x92)\xdd\xaa\xf5~\xc5 +\xe5\x11f\x07\xd6\xfd\x1e\x9e\xf5YJ\x1aQL1\xe32\x93*\xc3*[\xf1\xbd\xa5\xaa>\xecw\xa0\xe2\"a\x995\x0e\xd8c\xe5K\xeb\xf2\xee\xcd\xf7\xa2\x8d\x97\xd9\x95\x98\x82\xdb\xc1\x1aZ\xcbE\x94\xe9.\xf1\xff\xbf\xaa\xf25d\xa5\xcb\x1f$\x1b(\xb6\x8f\x9am\xaa\x9a\x1di\x06\x9co\xd6\xe6\xcb\xbc\xc8\xdbk(\x19[7R\x15\x02\xb1\xe5\xd5WN\x00gU\xf2m\xb6\xbc`\xe2%\xb1f\x17\xf0\xe0]\xc3t\"'.%>=\xf9\x9e%\xe7gVf\x17\xae\xde/k\x96}\xe0{\x90b\xbcxh\x9fQ\xaf\xaa\x96=\x915W7\xfbr%W\x18\xef\x87\xda\xbbV\xfb\xbafe[\\\x0f\x8c\xf5\x8e\xedR\xd4\xba\xdcl\xf2U\x9e\x15\x9e\xb3l\xb9\xdf@\xcd\xf8I\xc4\x8eDn\x9b\xbc\xd5\x1f\xdd7Lf/\xec\xd6\xa5\x95\xd5\x92]\xe4e\xc9;\xcbuZ\xc7\xe1r\xbdc\x0b9\xff\xb3]\xde,V\xd5v\x01\xcfD\x12\x80\x1f\xb2kx\xfc\xe5\xe3\xaf\x8fx\xebU\xb1\xcf\xb2\x82\x8f\xf9\x9a9\xb6\x1a\xd1F\xd1>\xb9\x9b\xd8?\x9dow\x05\xe3g\xa6\x9e\xff\xe5\x9a\xf3\xdf\x15\xa2\xcag\xd5\xff\xcew:\xd7\x11\xf1Vl\x1f\x0dT\xbc\x9d|\xf7*\xa7['

\xc6\x1b\x93\x95\xd7\xf6\x07\xb2\xf2z\xc1\x9b\xf1M]m\x1fl\xaa\xea\xa1\xfd\xd1\xc5\xc2~(\xe7\x1bx\xc0Y\xbd\x13\x1d9\xab\x1e\xfc\x8e\xf3z\x08\xbf8\x0e\x16\x17\xbf\xbf\xbbe\xf7\xd8#\xbb?gWY2\xe1\xc1S\xa1\xb0\xf2\xaf$\x90P\xde<\xf8\xa6\xaa\x16\xab\"k\x1a\x8f\x80d\x13\xf9K\xb2\x8f\x83\x17\xedm\xf8\xbb\xf5\x97\xe3c>\xadqm|\x9bm\x19\xd7\xe7\x9e\xc9\xd6^\xb0\xf6\x85\xb4s\x9c\x94M\x9b\x95+\xf6\xe0aL\xe3\x8d|\\}1\xff\xa4\xa7\xc1\xd7\x9eipz\xdd^V\xa5c\"\xc8F~SU\x0f\x16\x8b\x85\xfdd\xeb&\xc1\x03\xe73b!\x89)\x12;C8\x93\x13)\xf2\x17/\xdf>\x7fsrz\xf6\xfa\xcdC\x97\x05\xb5_t\xee\x0f\xcbO\xbb\xc5\xf9G\x8f8\xbf\xad\x1c)\x01\xb9(\x9f<\x85\xdf\xed\x96\x8bo\xaa\xea\x97\xc5ba\x9f\x89\xbc\xd5G\\\xcf\xe7od\xe5\xf5n\xb9x\xc5>z:\x90o\xc4\x1b\xff\xef)\x94y\xe1\x9czN);\x16\x88\xfb\xbdI\x07\x1dlTKe\xdf\x16\xef\xcamV7\x97YqV\xc9\xed#U7\x8c\xbf\x9d]2q:v'\xd50_\xfcnz\xb6\xca2\xf7f\xb5T\x196\xb9\xd2f\xfe\xd4}\x83\x16|\xbc\xd9\x17\xc5B\xfc\xc0o\x18\xf7!\x1b\xe8\x02\\OPi'\x8d\x0c\xe5\x9c3\x7f\xac;x\xcb\xe2Z\x9b\x02\x0e\xec;\xdd\xcd\x06\xb2M\xcbLf]I\xc2\xf4t\xff\xf8\xbe\xf9SJc\xd0M\x16\x06\n`j\x8d\xdc\xdbT\xd5b\x99\xd5\xa2\xb3\x9f\x8e\xaf\x17\x7f\xbb'\xa5(\xae\xcbF~v\xeb\x81h\xea=\xce\xc3\xa6,\xfc\xf9\xed\xebW\xe6_\x9e>}\xfa\xd4>\x05\xf8{\xbd\x95L*\xd9\x15\xdf_\x94\x86(o\xe2\xfb\x86i\x8b\xf8\xc5\xbe\xc8,\xb7\x8eC6\xfc\x955\xebu\xba#`\xdb%[\xaf{\xedN:\x05\x8c\xec2\x8b\xbdm\xa0oIW\xc0\xfb\xff\xe0\x92{\xaf\xcc?#\xaf\x88\x1e\x1b\xf3\xfaP\xfb\xd9\x13\xc7\x951[}\xe0\x9bZo\xc2\xd8\xe4\x05\xb3\x1fDz\x13\xac\xa7C\x0e\xa7o^\xfe\xf8\xfa\xec\xe5<\x0e\xc8\xb08M&\x1e\xafO_\xbf}\xe6\x8b\x92\xd3\xd4E\xcb\xcd\x93\x07~\xbf\x1f\xd3[Q?\xf5\x87\xe6\xe2L\xf9Y$ \x9aoT\xb2\xb4*\x9a\xd3\x00K02\xb3\x04\x14\xa4\xb6\x8f\xe9\x13\x11\xb0\x85M\xdd\xe0\x1c\x97'p*\xb4\x9c\xac\xc0\xb1\xf3\x992\xc6\x14\xb1pB\xae\xa7\x92\x82\xea5\x84\xdd\x95%\xb9B\x80\xcc\xe4\xb7\x8b\x8c)p\xaf\x83\x88\xfd\x0e\xd0\xd7\xf9\x9e\"\x86\x0f\xb0*\xd9\x94\x82l-c\x8a\x90\x1eDJ\x90\x13\xd2*3\xa6\x98y\xa7)|Ih\n\x1dp\x88\x1ft\x88\x1d\xf8@K\xcf\x98Pv\x9f1\xa1\xe3\x855E\x08\x04kD\x1dSp8\xb5\xa6\x19-D\x0fU\xdf\xb8\xbc\\\xb3OaM\x0b\x9b\xf7\xe1\xfb-:\x02[\xd3\xe7\x90X\xbc\x1a\"\xc2\xb1\xfbH\xfc\xe5\xb5\xd0!\xfa:\xfa\xb9pz`\x92\xb0I\xe2{k\xbe\xcaw\x02\xd7\x9d\x97\x03\xeb\x87\x8e\x08F\xb3\xca\x9a\xa6Z\xe5\x82\x91\xbcK\xa2\xded\x9fZV\x86\x14W\xff\x15\x8cO\xd7\xa7\x11\xee\x10\x93cA\xd3\xc0i\xb5\x80\xd7eq\xad\xe2+\xa4\x0f\x8eIK5~h\x94\xca\x89L\xd4\xde5\xff\xfc\xb7\xb8x\xfa\xc1\x99.#4\x9f\x83\xe56]F\xf8\x919Xo\x86e\x84ff\x9b(A\xe3\x1f#\\!\xd8\x0e\x19&RH\xd4\x8c\xdf\xe7a\xd4\x0c\xfe\x17\x14?a\xe8\x1f\xe4\xdc\xdaT\x8eX\xb0!\x0d.S\xbeG\x85\xb9a\x89\x99\xd8\x81Jd\xa8\xf2H\xe6\x86 \x91\xb9\x81\xcc\x0d~\"s\x83\xefi sC\xb8nA\xe6\x06\x07\x85/ M\xa1\x03\x0e\xf1\x83\x0e\xb1\x03O\xe6\x06Mdn\x90\x14\xbe\xdf\xfe\x16oLdn\xb8\xdb\xe3C\xe6\x86_\xc5\xe0\x90\xb9\xc1D1\xc2\xfd5\x9a\x1b\xee`\xa2\xf7\xfe \xbd\x1b\xed \xd2\x87\"[\x82\xd5\x83B\xa7\xe5\x0b\x0d\xa5\xe1ssn\xd2\xf9~\xc1\xcb\xbb>\xb4\x1f+\xcekS\xe4+\x91x\x9e\xcfl\xcf\x9c\x13\xe9\xe8\xcfe\xba\xf9\xf3L\xe4\xc2\xbfm\x80\xcf\xa0\x07\xe7\x88\x18\x1cI\x01m\x81\xc0\xf6\x80\xd2\xd7\xd8:\xf0\xaa\x17\xd8&\x88h\x17xB\xb4\xcc\x14\xd10\x88l\x1c`\x82\xbc\xcc\x14\x1a\xfae\xa6\xc8\xbe\xc2\x8c\xfe\x02.x\xccL\x81\x1b\xd6\x94\xf4\x06\xe6\x0d43\x937\xfc\xccL\xb7\xd9\xe8\xd0-xJ\xb8\xb0\xb6`\xb6\xe30\xb8I\xb0[07dp\x9c\x99\xb0!s\xc1\x8cG!v\xc1\x81tf\n\x0d\xaf3\x93?\xe8\xceL\xd1\x139\xcc\xcc\xac)\xfas\xa1:\xd3\x90\xdc!~fJ\xd0P\xacJ5&d\x90\xa0\x99ni\xef\x8f1b\xc2\x7f\xbf\xe7\xdc\xce\x91\x01\xccA<\xed\xc1\xcefrU\xda4S\xa4\x1a\x1c\xab\xfe\xfe\x8a.\x9eA\xb8'Ms4\xf3p\xbf\xbc&\xbaqb(rO\x90D7\xce\xe8y\xad)~)j\x8a\x9d80\x7f\xf2\xc0\xdc t\xdb7NL\x95V3I\xc9\xb9\x83\xfc\xcd\xe4\x0d\xfd7\xd3\xac\x852o\x99\xe8\x9d\x14U\x13\xd6L\xb3'Z\x18\xb6}L\xb1Ue\xcd\x14Yk\xd6L\x91\x15h\xcd\x14^\x97\xd6L\xb3\xaa\xd5\x9a)\xfe\xea-)Ue[3\x05\xd5\xbb5S4\x8erL\xb3\xd7\xc9\xec\xed8\x00\x98qH\xc9\x9a\x1f\xe7i\x90\x14\x8c-\x1bS\xb2>D\x0d\xc1\x9c\xcb\x96$l\x85\xdf\x08\xd6y \x99\xb3\xee\xaf\x99\xe6\xf4 Q#8\x88\x9f4\xceN\xeb w\x95\x83\x83x\xb9\xaa\x0c\x9b\xa8\xdf#\x1a\x86\xbe\xeeE\x9c\xfb1\xa7}\xdf\x17\xfc;\xb1ZP\x84\x06\x14!\x05I1\xb2\x90\x14\xbd\x8f\xcf\xda@fl\x1e\xbb\xfd\xf2\xfc\x03\xbb\x8emp\x84pa\x96\x809\xb1\xf5\xe3\x7f\xfa\xa7\xaf\xfe\xbf\x98Wg\n\x1a\xe6 \x1bD!\xd4\xd5\xee\xf1?\xfd\xf3\x87\xaf~\x8d\xcd\x9f\xa3\x91\x9d\xee\x97E\xbe\xfaOv=2\xec}`\xd7\xcd\xa0\xcee\x9c\x1e\xb5o\x98\xac\xbd\xf7c\xb7!\x05r \x05\xde\x8ei\xd6\xa0\xcc\xb9\xccwv\xe1]\x9dWu\xdeF\xaf\xe3\xcf\xdav\xdd\xea\x90\xc6Fn7\xb1\x1bM\xe4>>C\x98\xd1\xeb2r\x07\x8f\x14(\xcc\x10*\xcc\xdb\xbbg\x08\x17\xe6\x08\x18\xe6\xee\xda\xb7\xd7\xf0\xf8\xfd\xfa\xc6v\xeb\xb9{\xf5\x9c\x9dz\xc6@\xc4\xedt\x90b\x8f\xfe\xec\xad\x8e\x8bE\xd1\x14\xd9\xdc\xb0\xa6\xf2{XU\x9e\xe3\x9d`\x81\xad\nk\xcd\xf2\xfaoY\xd9\xe6%;\x0f\xbb\x11\x85\xdd\x84\x02n@\xc1\x9b{\xf8\x96\x1e|B\x06\x8e\x80\xa4\x88\xbd/\xf8<\x0c\x16\x16D \x0cbO\xbf(\xc1A\x9c\xf0 \xfe\xac\xfb\xbc\xcd\x8c9\xd9n\xe0L\x8b?\xcd\xe2\xb6\xd7(!\x87mf\x92f\x9cZ\x9f\xa1\x8dq'T`\xc3\x02\x9b\x14b\x04\x8fl \xd6\xc0\x1dj;\xfd\x9e\x9f\xa2\xcfE,\xe03\x11\n87BQ\xa5h\x1f\xc4\xccfm\xcb\xb6;\x11\x9d\xd8V\xb0\xcd\x9b\x82ek\xc8d\x1c\xa2\x97\x9f\x8cS4\x19L\x07\xf0_\xb3\xe0\xbd\xbb\xbb\x7f'\xf7i\x19\xa8\xd1\xc4\xcc&\x0fPF~\xc7\x07\x1d\xc0\x80_\xfc0\x17\xaf\xd8\x00%:@a\x0dP\x02\x04\xfcQ\x11\x041A\xf5\x14\xd0\xbd\x05@\x03Dp\xe3\xa9 3\x814\xf9E\x0e!b\x07\xbc\xe8\x03\xc1\x19(\x18\x06\x06p\x81Q\xa5\xbd\n4r*`'B\x10\x04\"`0p\xb0\x86X\x00C$T!\x12\x94\x10\x0e?\x98\x054\xc0\xab\x8d\xa9\xc0\x03A0\x81`@@\xc0\xac X\xc0HM&\xe2\xe38\x0d\x06\xed\x8c\x8fh\x81\xa7\xfb!\xaa\x13\xd6i.\\\xe0\x08Nf\x870\xaeE\x08\x97\xb7\xc5\x8dma\x98\x1d*q\xd3\xf6u%h\x0f\x87IW\xaf}\x9b\x97+\x01}o\xb6U\xf3\xa8Y\x7f\x80/\x17\x7f\xfc\x17\xaaT\xeb;d\xfc\xed\x02\\\xb2\x01\xf4\n\xd1\xeb\xc3\x1b\x8b\xefM\x15\x90\xfa\x93\xb8\x05\x00\xe8\x90~\xa0J\xb5c\xf2\x07\xcd#\x86\xf4\xb3]\x92\xa8R\xad\xbf\x83\x80?\xf0\xe8\xae\xe4\x159\x84\x88\x1d\xf0\xa2\xbf\x89\xbb\x12>\x1c\x1a\xd5#TO\xc2\x83\x99\x11a\xcb\xa9\x9a\x87\x8ezM\xf5\xc1\xa9<\xbc\xf1\xbfT\xa9\x16\x115\x9b\xeaK\x011\xaf\xa9>\x89\x8cXM\xf5\xb9\xb0xS|d)\xaa}x]m\xfaa~\x87\x92\xf5I\xf3\x8b\xbc\xcc\x94\xe2\xd4=\xe6\xe0\xa4\x18\x1c)\xe1\xf0[M\xc6\xefc\x7fb\xab\xcb\xaf\x1f\xab\x16;\xf3V\x9e\x94p\xc6\xca5\xab\xb7y\xd9\x1eA{\xc9\xdb\xa2\x12\xeb\xbf\xe7\xa2n\xde\x1f\xc1r\xdfjE\xf0\xed\x8b\xff\xa6T\xf77\xa4]@u\x7f=\x14\xd9W\x98\xd1_\xc0\x85\xe2\x99)p\xc3\x9a\x92\xde\xc0\xbca{f\xf2\x06\xf3\x99\xe96\x1b\x1d\xba\x05O \x17$\x18\xcc\x96\xea\xfe\xfa\xc2\x12\xcd\x14\x1a\xach&\x7f\x08\xa3\x99\xa2'r\x98\x99YS\xf4\xe7Bu\xa6!Q\xdd_\x04\xcd\xd9\xfbc\x8c\x980O\xc8\x10we\xedi\x865[\xd3\x0ci\xc3L\x89C\xac\x95[S\x8c\xd5oJ\xf1+RS\xec\xc4\x81\xf9\x93\x07\xe6N\xa0YVqM\x11\xd6qM\xf8@W3\xcd\x90\xdf\x0c\xb9\x85\x87\xca\x9a \x11@k\xa6\xdb\xe86:|\xd5L\xb7\xd1d\x7f|\x92\x9d\xb0q\xbf\xc1\x8c]q\xc2f\n\x8b\x1e6\xd3m\x88\x1f\x1b\x7fl\xa6\xdbh\xb1?\x82\xd9L\xb7\xd1\xd6\x80\x18h3\xddF\xa3\x91Q\xd4f\xba\x8d\x06\x87\xc5a\x9b \x1f\x9dm\xa6\xcf\xdf\xef9\xb7s\x7f,s\xf8\x0eHu\x7f\x05%\x98\x08\xe1jn\x10\xeeI\xd3\x1c\xcd<\xdc/\xaf\x89n\x9c\x18\x8a\xdc\x13$\xd1\x8d3z^k\x8a_\x8a\x9ab'\x0e\xcc\x9f<0w\x02\xdd\xf6\x8d\x13\x93\x86\xd6LRr\xd8:\x0fC\xf2\x86\xfe\x9bi\xd6B\x99\xb7L\xf4N\x8aJzk\xa6\xd9\x13-\x0c\xdb>\xa6\xd8\xb4\xb9f\x8aL\xa6k\xa6\xc8\x14\xbbf\nO\xbck\xa6Y\xe9x\xcd\x14\x7f\xf5\x96\x94*u\xaf\x99\x82\x12\xfa\x9a)\x1aG9\xa6\xd9\xebd\xf6v\x1c\x00\xcc8\xa4d\xcd\x8f\xf34H\n\xc6\x96\x8d)Y\x1f\xa2\x86`\xceeK\x126\x85q\x04k\xaa\xfb;\"\xaa\xfb\x1b\xa7\x05Eh@\x11R\x90\x14#\x0bI\xd1\xfb\xf8\xac\x0dd\xc6\xe6\x11\\%KS\xb4pa\x96\x80!\xb6z\x96\xa6Y\x82\x86y\xc2\x86\xf8\xaaZ\x9an\xb7\xf9s4\xb2\x1b\xa8\xba\xa5)\xbe\xfa\x96\xa6P\xe0\xed\x98f\x0d\xca\x9c\xcb\xfc.\xbe:\x97\xa6[h\xfb\x8e\xea\xfe\x1eR\xf4\xba\x8c\xdc\xc1#\x05\n3\x84\n\xf3\xf6\xee\x19\xc2\x859\x02\x86\xb9\xbb\xf6\xed5<~\xbf\xbe\xb1\xddz\xee^=g\xa7\x9e1\x10q;\x1d\xa4\xd8\xa3?{\xab\xe3bQ4E67\xac\xa9T\xf7\xd7I\xc1\x9b{\xf8\x96\x1e|B\x06\x8e\x80\xa4\x88\xbd/\xf8<\x0c\x16\x16D \x0cbO\xbf(\xc1A\x9c\xf0 \xfe\xac\xfb\xbc\xcd\x8c9\xd9n\xe0L\x8b?\xcd\xe2\xb6\xd7(!\x87mf\x92f\x9cZ\x9f\xa1\x8dq'T`\xc3\x02\x9b\x14b\x04\x8fl \xd6\xc0\x1dj;\xa5\xba\xbf\xce\x9d\xdc\xa7e\xa0F\x133\x9b\xa8\xee\xafg9 \x8f\x8a \x88 \xaa\xa7\x80\xee-\x00\x1a \x82\x1bOM\x98 \xa4\xc9/r\x08\x11;\xe0E\x1f\x08\xce@\xc100\x80\x0b\x8c*\xedU\xa0\x91S\x01;\x11\x82 \x10\x01\x83\x81\x835\xc4\x02\x18\"\xa1\n\x91\xa0\x84p\xf8\xc1,\xa0\x01^mL\x05\x1e\x08\x82 \x04\x03\x02\x02fM\xc0\x02Fj2\x11\x1f\xc7i0hg|D\x0b<\xdd\x0fQ\x9d\xb0N\xf3\xdfj\xdd_L\xdb\xfe$\xa3\x9f\x1bhYW~\x8a\x8f\x9a\xfc\xe1H^\x9exc\x15\xe8{g\xaf\xf3\xa5\x96\x84)\xb4x\x93\xb3b\xad\x8bm\xb15W1\x97\xe3\xaa_\xc3\xa7\xdd\xad\xfe\x96\xb5\xa2m\x7f\xba\x96u\x9a\xde\xb0fW\x95\x0d\xd3\x85\xc9j\xfdo\xd1\x0d\x9d\x97j\xcc\xe3\xbf\xf6\xac\xbe>\x9er\x827\xa7\xcfa\xcb\xda\xcbj\xdd7Hog\x03\x0e\xa3\xf6=+a_\xb2O;\xb6\xe2\x1dcu]\xd5]\x13\x86\xddjV\x97l;)\x8fc=\xcf\xec'\x98\xf8\xc0\xe1\xb2s,\xb4U\xb56\xacS\xb7n\xe3\xd2QUv\xa0\xa06\xacY\x9b\xe5\x85a\xb7t\xa9\x05Vu\xc0\xa3\x06\xf8\x8e\x7f\xfe\xfa\xf9\xbe\xb6*\x80\x88M\xcb\xbf\xae$=\x83wo\xbe?\xaeYS\xed\xeb\x15\x832\xdb\xaa\xc5\xbe/\xf3\x9f\xf7\xac\xb8\x06\xbe\x03\xb4\xf9&W\xc6\x8eV&\x89\xb52\x94\xf5\xb5\xea<+\xf2\xbf\xb1\xb5=\x8a\x7fWWm\xb5\xaa\nX\xee7\x1bV\xebA[\xc8\xb2a\xb2o\xb0\xdd7\xdd\x8e\x04\x99]\xa3*X\xd68\xd2\x87U%\x83{\xc7\xf7`u\x99\xd5\xd9\xaae5\xff\n\x137?h\xd8\xc5\x96\x95\xdd\xb6\xfb\xee\xcd\xf7\xf7\x1b\xd8e\xed\xa5\x95\x9bhT\x97\x1c\xca\xfeU\xcen\xb3/\x8ak\xf8y\x9f\x15\\\x82k)_\xf5)!\xc9\x07Y\xe3\xcc\xaf\xf5\x9e7\xe5\xf8\xa2\xaa.\n\xb6\x102[\xee7\x8b\x17\xfbZ\xa4Ix\xffP\xf6D\xb0m.\xab}\xb1\x86%?6\xac\xfc2XeeU\xe6\xab\xac\x10k\xc8\xfe\xe5\x07lq\xb18\xe2\xa2\x15 \xee-\xee\xf1\xfdK\x94\x93[\xad\xd8\xaee\xeb\x87\x8b/\xec\xaf\x9f\x94\xb0\xe3\xc2\xceW\xec\x08Z\x96m\x1b\xd87\xfb\x8c\x8bC&\xd0\xda\xe5\x05oi[ a,\xf32\xab\xed\x8a\xb7\xa8`w\xbdc\xaa\x94\x9cH h}X\xeeu\xaab\xe2\xbe\x19f&n\xd9'1\xd4\xcf\xca\xeb\x05|W}dW\xac>r*U\xef\xde|\xaf\x956\xce\xca\x99AP\xec\xa0\x0c\xde_\xb6\xed\xee\xfd\x91\xfco\xf3\xfe\x08\xaa\x1a\xcaJ\xfdz$f\xe3*+\xa1\x12\xab\x93K\xc4\xce\x90\xb5\xb0\xdf\xa9\xd4\xcc\x8e\xef\xb2\xfa\x8a\xd5R4\xdbl\xa7JN\x8a\x96\xb7U\x97\x9fY\x98,sY\xed.\xb3\x1b\x197UQT\x1f\x9b'\x8e\xb1\xfd=\x9cl\xfa\x1e\xf1i\xa1\xf3\x02v\x9d\x16\nM\xd3\xec\xb7l\xedH\xf8\xf6{~8}wvv\n\xdf\xbe<\xd3\xf5\x05\xdf\xbd\xf9^\xae\xb1kq&\xdb\xf5\x9e\xbfN\x97\xc5\xd9\xf5\x8e\xfd\xf4\xd7\x9f\xac/\x08\xf5x/\xe6\x83\x9co\xea\x189\x92i\xdd\xaa\xf5~\xc5 +\xe5\x11f\x07\xd7\xfd\x1e\x9e\xf5\x99J\x1aQP1\xe32\x93j\xc3*[\xf1\xbd\xa5\xaa>\xecw\xa0b#a\x995\x0e\xe8c\xe5K\xed\xf2\xee\xcd\xf7\xa2\x8d\x97\xd9\x95\x98\x82\xdb\xc1\x1aZ\xcbE\x94\xe9.\xf1\xff\xbf\xaa\xf25d\xa5\xcb'$\x1b(\xb6\x8f\x9am\xaa\x9a\x1di\x06\x9co\xd6\xe6\xcb\xbc\xc8\xdbk(\x19[7R\x1d\x02\xb1\xe5\xd5WN\x10gU\xf2m\xb6\xbc`\xe2%\xb1f\x17\xf0\xe0]\xc3t2'.%>=\xf9\x9e%\xe7gVf\x17\xae\xde/k\x96}\xe0{\x90b\xbcxh\x9fQ\xaf\xaa\x96=\x91uW7\xfbr%W\x18\xef\x87\xda\xbbV\xfb\xbafe[\\\x0f\x0c\xf6\x8e\xedR\xd4\xbb\xdcl\xf2U\x9e\x15\x9e\xb3l\xb9\xdf@\xcd\xf8I\xc4\x8eD~\x9b\xbc\xd5\x1f\xdd7Lf0\xec\xd6\xa5\x95\xd5\x92]\xe4e\xc9;\xcb\xf5Z\xc7\xe1r\xbdc\x0b9\xff\xb3]\xde,V\xd5v\x01\xcfD\"\x80\x1f\xb2kx\xfc\xe5\xe3\xaf\x8fx\xebU\xc1\xcf\xb2\x82\x8f\xf9\x9a9\xb6\x1a\xd1F\xd1>\xb9\x9b\xd8?\x9dow\x05\xe3g\xa6\x9e\xff\xe5\x9a\xf3\xdf\x15\xa2\xd2g\xd5\xff\xcew:\xd7\x11\xf1Vl\x1f\x0dT\xbc\x9d|\xf7*\xa7['\xf7L\xb6\xf6\x82\xb5/\xa4\x9d\xe3\xa4l\xda\xac\\\xb1\x07\x0fc\x1ao\xe4\xe3\xea\x8b\xf9'=\x0d\xbe\xf6L\x83\xd3\xeb\xf6\xb2*\x1d\x13A6\xf2\x9b\xaaz\xb0X,\xec'[7 \x1e8\x9f\x11\x0bIL\x91\xd8\x19\xc2\x99\x9cH\x91\xbfx\xf9\xf6\xf9\x9b\x93\xd3\xb3\xd7o\x1e\xba\xac\xa8\xfd\xa2s\x7fX~\xda-\xce?z\xc4\xf9m\xe5H\x0b\xc8E\xf9\xe4)\xfcn\xb7\\|SU\xbf,\x16\x0b\xfbL\xe4\xad>\xe2z>\x7f#+\xafw\xcb\xc5+\xf6\xd1\xd3\x81|#\xde\xf8\x7fO\xa1\xcc\x0b\xe7\xd4sJ\xd9\xb1@\xdc\xefM:\xe8`\xa3Z*\xfb\xb6xWn\xb3\xba\xb9\xcc\x8a\xb3Jn\x1f\xa9\xbaa\xfc\xed\xec\x92\x89\xd3\xb1;\xa9\x869\xe3w\xd3\xb3U\x96\xba7\xab\xa5\xca\xb0\xc9\x956\xf3\xa7\xee\x1b\xb4\xe0\xe3\xcd\xbe(\x16\xe2\x07~\xc3\xb8\x0f\xd9@\x17\xe0z\x82J=id(\xe7\x9c\xf9c\xdd\xc1[\x16\xd7\xda\x14p`\xdf\xe9n6\x90mZf2\xecJ\x12\xa6\xa7\xfb\xc7\xf7\xcd\x9fR\x1a\x83n\xb20P\x00Sk\xe4\xde\xa6\xaa\x16\xcb\xac\x16\x9d\xfdt|\xbd\xf8\xdb=)Eq]6\xf2\xb3[\x0fDS\xefq\x1e6e\xe1\xcfo_\xbf2\xff\xf2\xf4\xe9\xd3\xa7\xf6)\xc0\xdf\xeb\xaddR\xc9\xae\xf8\xfe\xa24Dy\x13\xdf7L\xdb\xc4/\xf6Ef\xb9u\x1c\xb2\xe1\xaf\xacY\xaf\xd3\x1d\x01\xdb.\xd9z\xddkw\xd21`d\x97Y\xecm\x03}K\xba\x03\xde\xff\x07\x97\xdc{e\xfe\x19yF\xf4\xd8\x98\xd7\x87\xda\xcf\x9e8\xae\x8c\xd9\xea\x03\xdf\xd4z\x13\xc6&/\x98\xfd \xd2\x9b\xe0)\xab\x9b\xaat\xaeZe;\xdd\xe4u\xd3\x9e\x8b\x01~\n_\xd99w/\x08 \x8cz\xfeq\xf8\x91\x08\xe0l\xd5=!\xcb{O\xe0\x9ei\xd1\x8e\xc5\xb0\x90\xbd\xbcw\xe4\xe2'\xfa\xf7*\xdbr\x9e\xff&\xbb\xf0\xef\xce\x17x\xff&\xcf\x87v\xf2d\xa3n\xa3\xe3\xb9&gC\xde\xc0GV\x14\x8f>\x94\xd5\xc7Rl3\x97Y\x03\x19\xac\xf6M[m\x03\x17\xd7x\xca\x1f\xc9\xdb\xcdd\x1d\xc8\xbds\xd0\x1c>\x81-7\xcfLNi\xf3\xc7\xde\x8b\xc5\xa8\xe7\xf9eU\xacU&c\xd1r\xb9\x94\xf3\xb2[\x1f m\xb6fVr\xc9\x98\xbf#\x9a\xb0\xe8N\xfb\x07|[\xd3\"<0\xe6i\x1b\xf7O\x7f\xfd\xe9\xa1c!\xa5\x98s\xe3\x0f\xba\xa7\x9d\x10\x15g\xf9\xd5\xe2\xf1W\x8f\x9b{\x8e)$\xff\xbb\xcb\xeal\xcbZ6\x04t?\x12\x1b\xef\x13\x85\x0b\x1b\xb0\xc8\xcb'S\xe7C\xcd~\xde\xe75[?\x81\xb6\xde\x0f\x85n\xb16\x98P>mv1\xfa\xfa[V_\xe5+\xce\xecxU5\xdb\xaa9^f\x0d;\xee=\xac\xc7W_-Y\x9b}u\\Vkv\x9e\x97\x9bJ\xbe~\xd1G\x107\xfb\xed6\xab\xaf\x9f\xc0\xb7\xac}U\xad\xd9I\xb9\xa9\xe0\xe7=\xab\xb5\xa7H\x99\xda\x80\xb3\x10 \xcb\xf4^Y\xed\x98\x94\xf4\xc9z\xf4\xf6\x17\xba\xc3\xd279h\xf1\xfd\xc7_~y\xdf\xee\xe0\x84f\xbfZ\xb1\xa6\xd9\xec\x8b\x9b\xf4l*}\xe4|\"\x93!Y\xb9\x82\xd7\xed\xa7-\"\xe7\xce\xa4\xf7\xce\x0f\x80\xf7#\xe2\x89\xc7\x0e\\\x06\xc2\x84\xd5O1g\xd6uO\x1e\xfbt\x1frf\x9eO\xf3\x99\xf1\xc8[@\x8f\x9eO\x15y\xd3\xb2R\xc0r\xa2\xde/Y\xfb\xb1\xaa-\x12\xf5\xbc\x8b\x98R\xd6wW\x97YY2\x93k\x1c\xf1\xb2\xd7\xe0\xb9\xad\xca\xfc\x83\x0d`\xe9a.\xec\xc67\xb6L\xdaO\xbe\xf2o\xde\xbe\x03\xd4\xbb\x95\x1f\x88\xe5\xe03H\x89o\xdf\x17fl:\xe2\x18\x8a\x91}\xb6\xdb\x9dG\xbf/\xd6\xe7\xe3\xf30\xe0\xf5\x8b\n\xb3={\xbe\xbef;\xe7\xd7\xed\x18T'\xfe\xd4;\xe7}\x93A=\x93\xb5N\xe4/b\xd6\x8b\xc7$Nr[\xad\xf7\x05s\x03*\x10U^\xa2>\xaa\xf8Z\x9fo\xdc \xd8\xb0o\xae.\xd9\xeaC\xb37\xeb\xf9\xddS?\xc8\x96\xe5\x83K$W\x82\x7f\x94-=1gu\x95*\xday\xb3\xfe0k\xf2u\x8d\xb8\xff6/W\"\x9d,\xe7\xfb\xa8Y\x7f\x80/\x17\x7f\xfc\xfa\xfe\xc1;#-k\xd0\xc6\x83\xf6\xf3\x7f\x0c\x14\xb9\x0e\xf0\xd6yZ\xac\\M\xe0\xb9\x036.\xdc\\\x8f\x94\x9b\xa8\x91\x9a\x082\xa7\x88 s\x04\x99\xeb\x89 s\x04\x99\xeb\x89 s-A\xe6\xccD\x909M\x04\x99#\xc8\xdc\x90\x082G\x909\x82\xcc\x01A\xe6\x082'\x88 s\x04\x99#\xc8\x1cA\xe6\x06D\x90\xb9\x11\x11d\x8e s\xf6)@\x909\x82\xcc\x0d \x0b_\"\xc8\x9c \x82\xcc\xfdV s\xf1p\xb5\xe6\xba\\\xe5\xa5J\x95d\x01\xab\xbd\x95\xcftX5\x81OS/\xda j\xea\x1d\xf5\xeb\x9dE\xa8\x8d\xba?$\xc9kYU\x05\xcb\xc6\xa6;\xaf7Vu=\xd0\x19;\x16\x98&\xf2\xc5*\"_,\xf9b{\"_,\xf9b{\"_lK\xbeX3\x91/V\x13\xf9b\xc9\x17;$\xf2\xc5\x92/\x96|\xb1@\xbeX\xf2\xc5\n\"_,\xf9b\xc9\x17K\xbe\xd8\x01\x91/vD\xe4\x8b%_\xac}\n\x90/\x96|\xb1C\xc2\xfa\xc5\xc8\x17+\x88|\xb1\xe4\x8b\xed\xcb>\xb0\xb69.\xb2\x965\xad\xd31\xfb\xbdx\xa4\xab\x83\xf7\x96\xb5\x9d\x8fV\xbe\xddW\x92x\xd4\xb0\xd6\xe6\xab=d\xa3\x1e\xbc\xb3n[Y\xe6\xc7V$\xcci\x96q\xd5tr\x95\x12mo\xc1/\xe8I\x84\xe05?y\xearzZ\x07\x88\x16\x02\xc2{ \x98\xa6J\xc2\x18\x9c4\x85z2\x9d\xcc\xcc\x96#\xc7\xe5#\xb5G\x13\xfc^M\x88\xf0l\xba;\x90\xb5\x97h\xef&\xa4\xf2pB\xa4\x97\xd3\xc9\x90\x0b\x17\xed\xe9\x84\xf9\xdeN\x08\xf6x:Y)OL\x90\xd7\x13R{>!\xd0\xfb \xa1\x1eP\xf7\xcc\xee\xbc\xa3X/(\xa4\xf6\x84\x02\xce\x1b\n)=\xa20\xdb+\nq\x9eQH\xe5\x1d\x85(\x0f\xa9{9d\x0d[\xfb\xbd\xa4p3\x9eR\xb8Ao)\xdc\x8c\xc7\x14\x02\xbd\xa6\x10\xe79\xf5m\xc18\xef)\xa4\xf5\xa0B\x80\x17\x15b<\xa9Nn\xd2\xcb\x1a\xe0M\x85\x94\x1eU\x88\xf0\xaa\"\xf6\xf3\x87\x08\xcf*\xa4\xf0\xae\x82\xcf\xc3\nx\xdd\x11\xe1i\x85@\x153\xd8\xe3\xea\xe4&\xbc\xb1\x08\xaf+\x04\xb42\xa1\xf7\x15\x82<\xb0\x90\xda\x0b\x0b\x91\x9eX\xf7\xbcj\xfc\xdeX\x88\xf7\xc8Z\xf9\xf1/\xfa\xbc\xb2\x90\xcc3\x0bx\x07#`<\xb4\x10\xe6\xa5\x05\x9f\xe3 \xd2[\x0b\x08\xbe\x0e\xe3d\"\xcf-D \x17\xef\xc1\x05D/#<\xb9\x10\xeb\xcd\x05\xb7\xc3\n\xe5\xd5\x85\xc4\x9e]H\xe4\xdd\x05\xf7\x8cI\xe7\xe5\x05\xbc\xa7\x17\x90\xde^@{|\x017\xa3\xc2=\xbf\x10\xe4\xfd\x05\xa7\x07\x18Ry\x81!\xd4\x13\x0c\x91\xde`\x08\xf3\x08\x03b\x14<\x0b\xcd\xff>\xdeC\x0c \xbd\xc4\x80i\x9ac\x9d\xa5\xf3\x18\x03\xc6k\x0c3<\xc7V\x86\xfcA\x97\xf7\x18R{\x90\xc1\xebE\x86XO\xb2\x95\x9b4=\xb8\xad0~\x8f28\x1d_\xe0\xf4,C\x94w\xd9\xca\xca\xe9u\x86X\xcf\xb3\x95\x9bT\xa0\x1d\xb6\xd0t\x1eh@y\xa1!\xc2\x13\x0da\xdeh\x88\xf1HC\xb0W\x1a/6\xb8=\xd9\xd6wb=\xdc\x90p\xee\x06x\xba!\xc8\xdb\x0dV\xed\xe5\xaaj\xf3\xf2\xe2|W}\xb4\xe5\x9aG\x99t\\~ZI\xbb\xba\xdaU\x0d\xab\xcfwu^\xd5y\xeb\xf1s\xce\xfa\xda8\xb1\xb3v\x13\x1b\xd3:\x1b]\xee\x9av\xd9E^\x8a\xb18l\xec\xe8\x1b\xfd\x83\xd2{\xc1\x84qg\xf0W\xfd9\x93\x97]R\xebr\xefz\xb2\xdc\xb3O\xad\xdds\xec\x95\xa7\xd7\x147\xea\xea\xff\xd9\xcc[\xba\x15Z\xcc\xfc\x7f\x95\xa9=k\x1a\xe9[8\xcd.\xd8\x1b\xf6\xf3\x9e5\xedB\xfena\xf6\xf3\x9e\xd5\xd7\x82\x0dg\xcb%\xc9`[5-0a\xb0\x16\x96\xee\x05\x9c\xb4\x83\xbdj\xd7^Cn3\xf2\x8cbm\xb6U\xcd\xb4g\xc3t>\xb7U\x9bY\xfc\xe3ha:Jz\xa84\xe5V;\xa1\xf8\xbc\x90\xa2\xf8\x9fr\xbf]J\x93\xa5\x0eW\x1b\xc4F\xd9\xfa;\x14\xf4\xaa\xda\x97\xed\xb9`f\xdb\xc6>f\x0d4\xac=\x82\xbcm\xb4\x9f\xa9\x81})'\xf3ZZ\xab?\xe6\xcdx~xc\xeb\x0f\xa1*\xa80\xfb \xa3.\xe8~\xc8\xe8O\xd7\xdf < \xc5\xdck\xa2\x98{\x8a\xb9\xef\x89b\xee)\xe6\xbe\xa7\xa4\xc8\x93\x10\xd4I\x10\xe2\x84b\xee\xe7\xa2K\"\x90%IP%\xe1\x88\x12\x8a\xb9\x9f\x83 A\x8fD G(\xe6\x1e(\xe6\x1e\x8b\n\xa1\x98{\x8a\xb9\xa7\x98{\xc0\x03\x0f\xbc\x88\x8e\x004\x07&Z;\x04\xc5A1\xf71a\xeb>\x94\x06\xc5\xdc\x07\xa01\x90H\x0c\x0c\n\x03\x87\xc0\xa0\x98{A1(\x8b\x00\x84\x05\xc5\xdc'@Px\xd1\x13\xb1\xc8 \xeb\xc9I1\xf7\x07D1\xf7\x11\x88\x07?\xda!\x14\xe9\x10\x80r\x08F8\x84\xa1\x1b(\xe6>\x0c\xc1@1\xf7\x1d\xfdC\xc6\xdc\xef\xb2:\xdb\xb2\x96\xd5\xa3\xc8{\xbe\xce\x86\x9e\xf4\xc5\x076<\x04]Nh\xe5u\xce\xd4\x16Z\xb3v_\x97\xc2\x0c\xa8\x1c\xa1\xca\xb5\xd7\xb9\xa8\x85\xf1\xeebb\xe5\x12>g\xbe\xec}n\xe7\xd7\xfc\xbc\xabJq\x91\xae6\x9b\x86\xb5\\\x89\x1f7\x17\x06\xce\x87 \xb2 /\x9f\xc8o\x0d\xfeV\xb3\x9f\xf7y\xcd\xd6O`\x93\x15#7\xab\xc5\x82b\xb4\x9a\x18\x84(\xdbg\x93\xe3\xc4b\xa1:#DY\xee\xb7\xac\xceW\xfaob\xb5\xad\xb2\x92\xf7G\x9a\x8c.Y\xa9\x05\xbf/;\xd3\xe1D\x9f=\x11\xdc\n\xd64\xbd\x08\xa5]k\xdfpQ\x7f`\x81\xf2\x1c\xb3\xbfa\xe1N\x9c\xf8\x06\xf1\x16\xf96\xc7JW<\xdb\x81P,\xbe}iV\x1e\xce`\xe5&\xdf\x17\x13w\xb3\xb4\xd7\x0c\xfft\xb2\x81\x82mZ\x8d\x85P\xe0\x08\xad3\n\x8b\xb8\\ \xf2#\\\xce\xcbk`\xd9\xea\x12\xb2\xdd\xee\x16\xa58D(\xf4\xef\xbbd9x\x83KT\xcc\xd0\n\xdaz\xcf@\x18\\\xcbu\xbe\xcaZ\xd6\xf9\xc6\x94\x04\xc5\x83j\"\x0d\xd9\xe5\xe5\xaa\xd8\xaf'\x1aa&\xbf\xd29''#&\\\xdd\x03\x9b9\xdf\xba\x07\x88\x9f\xc9\xe6\xf2\xee\xa4\x99\x8c\xd6\xa4\x0bB\x89\xaeY\xa3@ by\xf5\xeb\x91/\xb9\x85ZM\xf9EY\xd5\x13\x8f\x83^\x8d\xe3OH\xc9\xcc\x1d\xd8iY\x05\xc3\x00\xd6\xec\x8a\xd5\xa3W]\x83\xa7\x9e\x9e\x0e\\>@\xb8\xd4\xcc\xbc\x12F|\xf87X)|\xb1U\xbdf\xf5Ta\x7f\x9b\x97+\xf6\x04d\x1e\x97G\xcd\xfa\x03|\xb9\xf8\xe3\xd7I\xa5\x91*}\xcc/2;\xca\xdf%/K\x02\x19#\xfeE\xa7\x90\x19\x01\xd9 k!\x83\x8b\xfc\x8a\x95 9\xebI0\xcd&c\xe2\xf9\x85\x96\x04\xe5\x93\xd1\xd4\xde\x02\xe6\x85\xf2\xc98(\x14\xa5\xe3df\xf6\x8a8\x0ck\xa9\xd1:\xe0G\xec@\x04j\xc7\xdd\x01\xca'\x13\x8b\xe4\x81`4\x8f\x93\x15\xe5\x93\xa1|2\xb1\x88\x1f\x88C\xfd@*\xe4\x0fD\xa1\x7f\xdc\xcb\x81\xf2\xc9\x84\xa1\x81 \x10\x11\x04q\xa8 \xdf\x16\x8cC\x06AZt\x10\x04 \x84 \x06%\xe4\xe4F\xf9d\xe6 \x87\xc0\x87\x1e\x02\xbc\xee\x88@\x11A\xa0\x8a\x19\x8c&rr\xa3|2\x94OfBiPG\x80\x07\xcf\x00\x06}\x04a\x08$\xf09\xc5#\x91H\x80\xe0K\xf9d\x1c\x14\x85T\x02o\x9a\x0b?b \x12\xa3\x96 \x11r (\x9f\x8c\xa2(T\x13\x04!\x9b\x80\xf2\xc9\xf8F\x81\xf2\xc9\xccDC\x01\x06\x11\x053PQV\x86-\xe5\x93\x91\xe4GK\x01\xe5\x93\xb1=\x90\x0e]\x05(\x84\x15D\xa0\xac \x0ci\x051h+\x08F\\\x01\xe5\x931R\x0c\x1a\xcb\xca\x8c\xf2\xc9h\xa2|2\x06\xa2|2\x94O\xc6\xf8\x80\xd7\x14G\xf9d\xfa\x9f\xb0\xc2\xa4|2\x16\xb0\ne\x94\xe9\xc91\x9b(\xa3\x8c\xe1u\xca(\x13\x80Q\xa1\x8c2\x94Q\xa6\xa7\xa4\xd8\x93\x10\xdcI\x10\xe6\x842\xca\xcc\xc5\x97D`K\x92\xe0J\xc21%\x94Qf\x0e\x86$\x04?\x12\x81\x1d\xa1\x8c2@\x19e\xb0\xb8\x10\xca(C\x19e(\xa3\x0c\xe0\xa1\x07^LG\x00\x9e\x03\x93\x8b$\x04\xc7A\x19eb\x92\xb2\xf8p\x1a\x94Q&\x00\x8f\x81\xc4b`p\x188\x0c\x06e\x94\x11\x14\x83\xb3\x08\xc0XPF\x99\x04\x18\n/~\"\x16;a=9)\xa3\xcc\x01QF\x99\x08\xcc\x83\x1f\xef\x10\x8au\x08\xc09\x04c\x1c\xc2\xf0\x0d\x94Q&\x0c\xc3@\x19e:\xa2\x8c2\x8at\x9a\x82\xcbaL;\xa8\xa8\xff\x89\xf3\xa1\x0f\xfao\xeb}@j\x0bof\x0b\xcaa\x03~)R\x0e\x9b\x1b\x14\xae?\xfb\n\xe5\xb0I!E\xcaaC9l~\xab9l\xd69_\x18\xcb=\x97D\x97\xc0fUm\xb7\xfb2o\xaf\xcfwU\xa5`\x14\xa6\xc45\xcf\xf5s\xa7UUt\xe9j\xa4\xafX\xfd\x02\x9c\x03\xac\xaa\xbc\xec<\x02\xa3<5#\x16_\xe8>\xde\xd1\xec4\xbd4\x86\xd4\xde\x02\xc4e\xcd\xcaj\x1b\xedG\xc9\xb6|qG\xbe\x8e\xf1b\xbc`\xab\xe7U>@8B[}`\xa5rB\xc8\xd6\xeb\x9d\x88k\xfa\xfcO\xab|\x9b\x99#\x16dsm7\xecW\xaf\xcf^>\x11wf\xf9\x9c\xba|\xe6\xc2y\xf2\x82\xad\x94Z\xde9\xac\x86\xba\xb9\x91\xa1\xb4T\x98?\xd6\xe4\x17e\xd6\xeek\xd6t+\x91\x1fR\x17\xd5E%\x14\xe1\xc3\xfb\xec\x18\xfc\xc9\x17\x83\x16\xcax\x8d\xdco\xc6\xab\xc4\xf0\xf6\x81\xb0\x05\xd8m\xb4\x82\xe2!s\xe3\x858y\x84ps\x8a\x087\xe7\xdaWn\xc0\xbb;=\xc1\xfeK\x9d\x87\xce\xf3k\xcd\nv!\xd2}\x1d\xff\xd2\xfd\xff\xb9J\xba\xf5\xf7\xe3\x9a}\xcc\xeauc?\xd7\x06\xf7\xb7\x17\xf2\xf5\xbc*\xcf\xb8*\xf4F\xbe::\xeb\xa4\x8e\xa4\x98B\xb6Z\xd5{\xb9+p\xd5\xb5c\xd4\xa1\xc7\x8d\xc7\xa0\xf93\xea\xc9;{\x1e\x8e\x049\xa4\xdb\x98\xbd\x9d\x80\xcf\xe7fW\x93\xddr\xbfn\xee\x9b$k\x0f%y\xfa)\xc9\xd7[IN5@\x92\xb7\xb7\x92\xdc*\x81$\x14+\x8cz )XIp\nB\xa8\x0f\x1eUAR\x94\xc2\xe0\xe0\xa7\xcc|.\xb5AR\xb8\xf2\x80\x0b\xa8\xe87\x8f\x17z\xb3\x93\x1bHo\xf1\x94;U?\xa9\x8c|\xaa\x8d\x10\xbbbq\xbf\xd1\xff\xcf\x07@\xae \x8fz\xa3\xf7\xc0nD\x8bBi!\x07{\xe3\xe0CS\xa6\x96\x98\x8a\xdb\xd8SH\xcd\xee(j\xd5\xdc\x92\x9a-Od-\x15\x01_\xdao\xc5\xf4\x1eOH\x87\xae}\xb0\xd4\x84\xe2a>\xa6\xe3\x95n\x8bvA\xea\xb6\"R\xb7?\xb3\xba\xed\xf2\xb6\x1ch\xd2\xb6\xa9x\xf0\xe0h)v\xbf\xea,\xb8\xd0V*\x88o3>\x0cfzsn\xf0\xeap\xfc\xcb\x81\xb6\xe9\xc8\xef\xdc\xaf\xf2\xa0\xebC68\x7f=\x97\x06\xba/\x1c\xfe\xec[~t\xb6w\xf4k:\xdb\xa7:\xa6O\xbf\x1c,\x1e\x037\xdf1\x9f\xf0\x84\xa7\xc3}Bt\xb8\xd3\xe1\x1e}\xb8\xf7-?8\x89m-?xp\xd4\xf2\xee\xd7\x9bn\xf9M\xa8%\xd3\xfa\x06\x0e-\xa4\xaa\xbb\xc8\xf8\xb1\x1e\xd2\xf3\x98\x18\x02\\\xba\xc7\x90\xdb\x17Z\x16wT\xfb\xb8\xa1\"\x10\x96U\xe8?\xe3\x07\x027N\xc4f8\x08\xfc\xe4\xd1'\x9aq\xcdo\xa6\x86\x14\xfc97\x1c\xc4\xd9'\xddh~\xd1Y\xa7\x88\xce::\xeb\xee\xd4\x89\xc1\xaf\x11\xeb:\xfb8v\x968\xcf\x8d\xbf\xa8W\x9e\xa9\xde\xea\xc3C\xb3\xea\xc4\x10r|L\x98~\xa1\xa5sG\xcf\x10\xb3\xd8\x86\x84?\x14\xa6\xbc\"'W\xd8N?\x91w\x82\xed~:-h\xcfWD{>\xed\xf9\x9fw\xcf\x17\x02pl\xe5\xa7\xe2\xf7n\xe3\x96\x8fw\xf1@\x03\x8e\xb0\xad\xd6\xfb\x82\x99\xb7\xee\xc1s\x92\xe1\x17\xba{wt\xd3\x1e\x8aeHch\x96\x14\xc6p\xb0\xfb\xf9\xa4e4\x16KO\xce\xc5\xe4^J=\xd6\xb2\xcd>\xd9\xd7\x9ac5,\xb3\x86\x9dw9\x13]\xe0\x05\xef\xb2\xf2_Z@\x98&w5[e-\x9f\xc9g\x97\xcc\xd8\x80\xde\x84\xb8\xee\x9e\xb6\xb0\x13\xc9>\x1a(+(\xaa\xf2\x82\xd5\x02Ml\xf3\xa3+\xc4\xf9\xa7c\xc3t\xbd\xdf(K l\xd9\xea2+\xf3fkr\xa9/\xabr\xdf\xdc\xae\xc0L-\xb8\xc3\x12\x1bi*\xe7\xac\xcc\x96\x05sJl\x8a\xc9\x06\xaf\xa8\xc4\xfe&\xb7\x13\x94N\xa2\xb4\x10\xb5\xa3\xbd9}>\xe1G\x1a\x08i \x9f_\x03\x89:\xb5{\x83O\x98[q\xb0\x86:\x93\xcb\xf0p>)7\xd5a\x0dYq\xe0\xe4M\xa3\xfcF\x1d\x8b\x86\x15\x9bG\x07\x80\x9fF\xac\xb7\xeee\xf5\xf4H\x1f\xb0~[=|g\xd5\x02\xd9\x0b\x17^\x10\x7f\x97\x9b\xf2\xb2\x98\x96\xf5cZ{\x9cn\xb6|\x10\xce\x97U\xb9>'W\xa9$\xcc\x01K\xae\xd2\x8eF\xe2:\x98McH\x14+6\x03'ic\x06E\xc1`\xbf\xa0\xc9H\x931z2\x0e\x8e\x9d\xe1,\x1c\xfcy\xbcU\xd6l\xc5\xf2+\xb6v\x98\xba\xccJ\xa4\xf5<\xf2\xea\x95\x13n\xbd\x96i?^\xc9\xd8\xa5\x88T\xcd\xcf\xacj\xba\x8c]\xff\x10.q\xb7\xda|<=\xb6L\x1at\xb7\xae\x9f\xf7\xbb\x90V\x98\xb3\xd5j\xbf\xdd\x17\"i\xe0`\x93\xe2\xeap\xe6 \xe61\xb0\xfdB\x0b\xe5\x8e\xea\xc2\xaeC\xfe\x06\xb6q\xf0\xadI\xbf\xcd\xcc\xd6Z\xf0\xec\x11\xe0\x0b\xd0\xf1\xec\x15\xe0m\x9d$oh\x0eb\xd9\xfb\xd4\x15\xc0\xb1\xc1\xa8-\x10\xa3\xba8:\x8f\x0d\xc7\x89Ra\xac\xdc\x90\xa18a\xaa\x8c*\xc2av\xac\x19\xd6\xbaW\xcf\xb0\xfa\xd4L\xfbQ\xafat\xaf\x90\x821\xf9\x95\x14\x0cR0\xfa\x1f>\x93\x82Q\xed\xdb\xa6\xcdD~\x8fsoDq\xb7\xb2_\xf7oM\x83\x01\xf4%]\xc0'\x0eD\xe3\xd64\x0e\xd9~\xa1\xa5tG5\x0e\x8f\x81+J/\xb0\xf2\x04R\n\xa6DJ\xc1\x84\xc2\x94\x02@\x89\xd0\xb5\xec\x07\xb1\xb9\x83\xad\xc4\xc0\xe4\xc1\xbe|\xa4=p\xe5C=\xc9M\x1d\x99\\N \x17Z@\xd9\xe4WL\xa61\xcaV\x1f\x8ed\xb1\x8d\x06\x1a!>h\xb22oM+bu\xc9V\x1f\xc2\xd3\x918\xba\xecU\x8c&\xfc\x0c\xc5b&z\x92A\xacd\x91QD\n\x13)LwJaj\x8a\xac\xb9d\x18%\xe9\xad|\xb2\xd3\x8c\xc4\x9b\xc0\xae\xe4f\xb9\xc1\x1b`\x14\xa3/\xb4\x00\xee\xa8.4\x92\xcc\x90nci\xf5#\xb7cu^y\xf2\xa0\xa0\x16\x89\xa3\xc2\xe5F\x149\xb3\x19r\xbc_\xf1\x1f\xc10\x99\x0d/\xf9,\x1a\x1e\xbe\xc3\x03s0\xd1,\xb9\xf6U!\xc9\xbc\x11\xdaG\xbe\x12i,\xdbK\x05\xb2i\xda\xaa\x16\xe5L-o\x8b\xe2|y#\xaaB\xe9rW\xc5JX\x19!\xdb\xf1\x91\xa9s\xf1\xff[\x9d\xda\xb1iE\xed\xa1\x88\x19\x15\x01\xa9\n\x0c\x9d{Rc\xcaj\xd6\x81yJ\x95c=S\xbd\xbe\xb4\x145\xabV\xa2\xe8\x93/\xf7\x87\x9a\xc3c\x17\xa3\xfa\x1b\xce$8\xa7\x84\xae\x84\xeb\x0d\xb2[\x8e\x14\x8c\xa4\xc6G*\xa1K%t'\xf4\xf9K\xe8z\x8c\x91\xea\xdc\xf3*\xdc~K\xa4>\x8aI\xadVDj5\xa9\xd5\xd1ju\xdf\xf2\xa6\xcdjQN\xff \x87\xbdK\xa5\x99\xbc5\xea\x84\xae\x87\xda=\xa4\xd2\xe3\xf7}\x99.vu)a'\x0c\xc4+v\x04-\xcb\xb6\xfc\xbc\xd8g\\\x1c}\x05\x7fY\xc0\x9f\x0bCV\xe0\xb77\xbb(\x84\xbc\x9a\xee\xf0\xbc\xb6\x7fZ\xda-\xb8\xae\xd1V\xa2^\xa5RX\xf8D\xe2\x1at\xb5\x11E\x85\xe1\xbb\xea#\xdf\xf4\x8f\x0c\xfe\xcb\x9e\xde\xbd\xf9^\x9b`U\xe9K\x87\x1fZTi\x9f\x96r?\xe2\x8acY\xa9_\x8f\xc4l\xe4J\xab\xbe\xfc8J\xd3\xf3\x93h\xbf\x83L\xf4\xdd\xf1]Q\xb7^\x8af\x9b\xed\x1a9\xb5D\xcb\xdb\xaa\xab3'.^\xb9\xb4)[\x0c\xc6 4$\xe1d~\xe2\x18\xdb\xdfs\xad\xae\xeb\x11\x9f\x16\xba\xd2i_\xbf\x9e\xeb\xebM\xb3\xdf\xb2\xb5\xa3\x06\xf0\xef\xe1Y \xdf\x9d\x9d\x9d\xc2\xb7/\xcf@!P\xdf\xbd\xf9^\xae1Q\xd6\xd3\x81J8(\x9cwv\xbdc?\xfd\xf5'\xeb\x0b\xa0Mv\xa5\x9aoJ\x1d\x14#\xb4\xab\xab\xf5~\xc5 +\xa59\xcad\xf0\x94\xf4{x\xb6\xdb\x15\\\x97\x93\xb2\xac\x99t\xcck\xb7\xc0\x8a\xef-U\xf5a\xbf\xebt\x87e\xd6XC\x82Au\xdc\xd1lQ\n\xb5\xaa\xe12\xbb\x12Sp;XCk\xb9\x882\xdd%\xfe\xffWU\xbe\x86\xac\xb4O,P\x0d\x14\xdbG\xcd6U\xcd\x8e4\x03\xce7k\xf3\xa5\xac\xcb^2\xb6\xd67\x00\xb1\xe5\xd5W\x8e\x9e\x88\xbe\xac.\xb3\xf2\x82\x89\x97\xc4\x9a]\xc0\x83w\x0d\x03\xae_\xe5U9\xac\x15+\xe7gVf\x17\xae\xde/k&<)\x9a\xf1\xe2\xa1\x03\x7fR\xb5\xec \xb4\xfc\x0c\xd1\x15\xe53\xd1\x0f\xb5w \x87\x08\xbf1\x0f\x8d\xc3\xf6\xedR\x18)\xc4\x1d\xd1n\x13Vg\xd9r\xcfUE~\x12\xb1#\x19\xe6\xdd\xea\x8f\x8a\xbb\xa9\xb0\xd9\xeauie%,\x00e\xae\xaa\xfe;\x0e\x97\xc3\xb2\x8e\x0bx&\\\xac?d\xd7\xf0\xf8\xcb\xc7_\x1f\x8d\x8d\xf9\x1f\xf35sl5\xa2\x8d\xa2}r7\xb1\x7f\xba\xc3\xee\xe8\xf9_\xae9\xff]\x91\x95b<\xbb\xdf\xf9N\xe7:\"\xde\x8a\xed\xa3\x91Fsy\x01\x9fl\x9d\xf0@\x85\x8c\xcb\xdb\xa3\xdco\xecu\xaa\xb7\xc2z\xb4t\xec\x94\xd2J\x90\xb7\x97\x93^\x00\xbf\xe2\xe4\x9b|\x05\x0d\xdbfe\x9b\xaf\x8c\x0e\x8f\x1b\xb1\x92N \xab\xba\xfd\xc0\xf7\xc8%\xd3^\xd0\x81\xd6u\xa0\\)\x8d#[VW\xf6\x85\xa6D\xa0\xa6\x81\xa9\xfb\x98\x96\xc9\x1a\xc7]\xc5\xe0\xac\x84\xac^\xe6\xad(ymo\xa1\x91\x95>\xb8\xb2\xa2R\xeb\x012\xf3\xd0\xf2#C\x9c~\xb2\x85\xcb\xb1\xae:\xd1I;U\xd325O\xa7\x95\xba\xd5\xe1\xd6@\xb3\xdf\xed\xaaZ\xa8\x15\xbbl\xf5\xe1X\x15j\x7fV^\xcbya^\xd6J\xfb\xb0k[\xd5\x06\xf6\xad\xdcm\xf5\x9e\xd5\x80\xb4h\xeb\xaa\xcc\x17\xac\xe4\x17+\xd1xU\x8c{c=3x{\xe4\x10\x9a\xbf\xa7\xab\xd0~\xe5\xa99\xff\xfc\x0f\x7fp\x9c\xdd\xdfT\x95\xaa\xe1\xbfX,\xecE\x93yc\xb2\xf2\xda\xfe\x80.\xde\xffM]me\x91v\xeb\xa3\x9e\n\xfe\x0f\xfa\x82\xfcg\xd5\x83\xdfq^\x0f\x9dUr]\xfc,u\x90\xb5\xec\x1e{d\xf7\xe7\xec*K&\xadqm|\x9bm\x19\xd7\xe7\x9e\xc9\xd6^\xb0\xf6\x85\xb4\x19\x9e\x94M\x9b\x95+\xf6\xe0aL\xe3\x8d|\xc2K~\xebi\xf0\xb5g\x1a\x9c^\xb7\x97U\xe9\x98\x08\xb2\x91\xdfT\xd5\x83\xc5ba?\xd9\xbaI\xf0\xc0\xf9\x8cXHb\x8a\xc4\xce\x10\xce\xe4D\x8a\xfc\xc5\xcb\xb7\xcf\xdf\x9c\x9c\x9e\xbd~\xf3\xd0v\xe0\x81\xfa\xac\\t\xee\x0f\xcbO\xbb\xc5\xf9G\x8f8\xbf\xad\xec\x92\x14\xa2|\xf2\x14~\xb7[.\xbe\xa9\xaa_\x16\x8b\x85}&\xf2V\x1fq=\x9f\xbf\x91\x95\xd7\xbb\xe5\xe2\x15\xfb\xe8\xe9@\xbe\x11o\xfc\xbf\xa7P\xe6\x85s\xea9\xa5\xecX \xee\xf7&\x1dt\xb0Q-\x95}[\xbc+\xb7Y\xdd\\f\xc5Y%\xb7\x8fT\xdd0\xfev&\xf0<\xab\x0f\xddI\xa5\xef\x86\xb0\xbc\xee5e}\xb6JX\x8aY-\xd5N\x82}c\xd1\xe8\xee\x1b\xb4\xe0\xe3\xcd\xbe(\x16\xe2\x07~\xc3\xb8\x0f\xd9@\x17\xe0z\x02\x9f[\xb6\x93S\xce9\xf3\xc7\xba\x83\xb7,\xae\xb5)\xe0\xc0\xbe\xd3\xddl\x14B\xcb\xf6!az\xba\x7f|\xdf\xfc)\xa51\xe8&\x0b\x03\x050\xb5F\xeem\xaaj\xb1\xccj\xd1\xd9O\xc7\xd7\x8b\xbf\xdd\x93R\x14\xd7e#?\xbb\xf5@4\xf5\x1e\xe7aS\x16\xec\x85\xfa\x9f>}\xfa\xd4>\x05D\xe9\xfcI\xd9\xfe\x8a\xef/JC\x947\xf1}\xd3\xd5\x01\xb8\xd8\x17\x99\xe5\xd6q\xc8\xa6\x15 \xfdz\x9d\xee\x08\xd8v\xc9\xd6\xeb^\xbb;\x92\x17(\x13\xbb\xccbo\x1b\xe8[2jA\x95\xf4W\xe6\x9fN\xa7\x1d\x8e\x8dy}\xa8\xfd\xccQ\xbc\x9f\xcf3\xbe\xa9\xf5&\x8cM^0\xfbA\xa47\xc1SV7U\xe9\\\xb5\xcav\xba\xc9\xeb\xa6=\x17\x03\xfc\x14\xbe\xb2s\xee^\xe0sR?\xff8\xfcH\x04p\xb6\xea\x9e\x90\xe5\xbd'p\xcf\xb4h\xc7bX\xc8^\xde;r\xf1\x13\xfd{\x95m9\xcf\x7f\x93]\xf8w\xe7\x0b\xbc\x7f\x93\xe7C;y\xb2Q\xb7\xd1\xf1\\\x93\xb3!o\xe0#+\x8aG\x1f\xca\xea\xa3\x0c\xa8\xb9\xcc\x1a\xc8\\I;\xec\x8bk<\xe5\x8f\xe4\xedf\xb2\x0ezH\x9fj\x0e\x9f\xc0\x96\x9bg&\xa7\xb4\xf9c\xef\xc5b\xd4\xf3\xfc\xb2*\xd6\xc3t#r)\xe7e\xb7>@\xdal\xcd\xac\xe4\x921\x7fG4a\xd1\x9d\xf6\x0f\xf8\xb6\xa6Ex`\xcc\xd36\xee\x9f\xfe\xfa\xd3C\xc7BJ1\xe7\xc6\x1ftO;!*\xce\xf2\xab\xc5\xe3\xaf\x1e7\xf7\x1cSh\xfa\x97\xd1\xf5Y{\x9c\x943q\xecN;0>\x10\xc0V\x10\x01l\xfb\x9f\xb0\xc2\xfc\x87\x03\xd8\x9a\x83\xdb\x06\xce\xe8xl\xed\xd0\x0d\xfe\xe6\xf4\xf9\xb4\x13\x84\xb2%\x94\xad\xd7\x02\x8c1\xa2\x02y\xe6\xc93o}\x92<\xf3\x82\xc83\x7fH\xe4\x99'\xcf\xbc\x8d\xc83O\x9ey\xf2\xcc\x93g\x9e<\xf3\x9a\xc83O\x9e\xf9)\x85 \x8f<\xf3\xe4\x99'\xcf\xdc\xa0p\xfd\xc9\n(\xe5C\n)R\xca\x07J\xf9\xf0\x0f\x96\xf2\xe1\xf8\x97\xcb\xac\xb9t\x94\xaa\xbc\xa8\x8fD\x98\x8f9\x88\x8f`\xbcG\x02\xb4Gb\xac\x87\x07\xe9\x91\x1c\xe7q3(\x8f\xe4\x18\x0f<\xc2#\x0e\xdf\xe1\x10\xba\x0f\xdd\x91\x0c\xdb\x81Cv\x18\x0c\x15sp\x1dXTG\"LGbD\x87\x0f\xcf1\x13\xcd\xe1\xc0rx\xf5%/\x8e\x03\xa7P\xa5\xc5p\xf8\x10\x1c\xfe6\xc5\xa17\xf4Qc`\xe8\xc3n$Dn\xcc\xc0m\x98!`.\xd4FZ\xcc\x86\x1b\xb1\x91\x02\xaf\x81\x02\x1cx\xb0\x1ah\xa4\x86\xddm\x18\x8e\xd2\xb0\xf32\xda\xe8\x93\xe03B\x84\x85\xc5f\xf8e\x82\xc6eD\xa02l\xbeb\x1f\"#\x1d\x1ec>\x1a\xc3\xec\x93I\x84\xc4@\xe10\xfc(\x0c\x0c\x06\xc3)\xedP\xfc\x05\x16}a\xc3^$@^\x04\xe0.\xc2Q\x17h\xcc\x85\x03\xaa`m\x8e\xe3\x1d,\xd6\"\x0d\xd2\xc2\xd9x\xc3/Q\x18\x0bm\x1b7\xf0\xb3 ,\x12\xe3+\xec\xe8\x8aXl\x850\xd9\x98\x1anFV\xa4\xc5U\xd8n\xe6>L\x85\xcd\xe9k\xc3S\xa4ES\xc4c),\xb8\x89(\xd4\x84\x17!\x11\x86\x8f@\xa3#\x02\xb1\x11!\xc8\x08+.\xc2\xde\x1a\xac\x7f\x1a\x87\x89\x08DD\x04\xe0!\x8c]K\x8b\x85\xb0-\x8a\x198\x08\xa3\x1d\xc9\x8a\x82\x88\xc3@\xb8\xf0\x0e\xe9\xd1\x0e\xf3g\x12\x1a\xe9\x80\xc59\x8c\x0fFD\x84tPx\xb4\n\x88\x9e8v4Q\xc9!E\x14\x0cM\xc1\xd0=Q04\x05C\xf7\x14\xe3\x0c\xb32\xa3`\xe8CJ\xe4\x18\x9b\xe7\x1a\x8bp\x8e%q\x8f%w\x90y]d7\xe0$\xbb)7\xd9\x0d8\xcaB\\e\xb1\xce2\xe7\x1e\xees\x97%t\x98a]f\xc9\x9dfx\xb7Y2\xc7Yr\xd7\x99\xdfy6\xdb}F\xc1\xd0\xde\x96\xc5\xb9\xd3\x8c\xac(\x18:\xc6\xb1\xe6s\xad\xa5q\xae!=F^\x07[\x80\x8b\xcd\x1b\xc8\x19\xe8f\xa3`h\n\x86\xa6`\xe8!E8\xe3\xf0\xee8\n\x86\xd6D\xc1\xd0\x14\x0cM\xc1\xd0h\xf7\xdd\x1c\x07\x9e\x91\x1d\x05C\x1b_@\xb9\xfc(\x18:\x9d\x03\x90\x82\xa1g\xbb\x07\xd3\xcc9\xb4\x8b\x10\xef$\xc4\x05C_f\xcdp\x8br\x85@\xf3GG\x99\xc7G\xc1azO\xaceBh\xb6\x1e\x14\x10\x1e\xb11\x86\xcc\xfd\xcb\xe0\x91\\\xe4:\x1f\xed\x9c}\xc4\\[\xef\xbdq\xa1\xbao\xba\x01\xe7\x01\x9d\x1c\xbd3\xea\xad\xaf\x93C./\xf82Y\xf1\xdb\xf2\x13x\xd7\xc8w\x8f \x83\xef^\xfe7\xb0rU\xf1\xa5\"\x1b}\x04y\xd9\xb4,[\xcf\x0d\xa1\xc4\x84o\xfbB 7\x8c]\xd4Y\xd9v\xa1\x84\xc2\xa8\x9c\x89XB\xf1\x03\xab\xff\xae\xff\x8f9\x02\x0b\x9f\xe9\xd7\xba\x0c\xf8\xf2\x9d5dE!\x7fPN\x17\xc5\x8b+f\xfd?kc\xa0a\xc7\xf4\x0b-\x90;\x1ai\xd8 \xed\xf0\xce2jO\xf7\x9c\x8c\x86\xef\xff\xa9\x85\xc57\xa7\x81\x80&\xc2\xe9\xc9\xdaF\xf0zz\x15\xcfH<>\xc6\x1a\xd7}Cc\x0e\xb2\xf5\xbaf\x8d6\x1fq\xfdK\xf5R\xa0G\xca^\x0e\x16v\xf2\xbd\xbc\x86\xcd\xbe\\\x1bm\xa4Jf\x9f\xa1S\xcc\xd5\xa9%\xe3=\xeaf\xbe\xcd\xc4\xdf\x8f\xbbPN\xa5)\x9a3\xb8\xdf\xd8\xbb\xe8\x98c\x80\xeeC\xffe\x95u\x81\xdf\xf1\xab\x0d,\xb3&_\x1d\xc1\x8e\xd5y\xb5\xe6\xff\xa7}K\x1bf\x1b\x94\x8e\x95Y\x1bu\xceP\xf0\xceR@ \x12\x10#\x0bh\xc9@,.\xc1\xc1\xef\xc0\n\xec0$\xa4\xc5&x\xd1 \xa9\xf1 x\x84B\"\x8cB\x1cJ\xc1\xc1\x8e\x0b\x14\x8dS\x98\x8dTH\x8dU\x08D+$\xc6+\x84!\x16\x021\x0b\xae9\xdc\xa1\x19\xb0\xa8\x85\xc4\xb8\x05\x14r!!va.z!\n\xbf\x90\x08\xc1\x10\x83ap0\xeb\x12V\xb8Q\x0c7\x82c\xb89$\xc3\x8d`\x19\xc2\xd0\x0c\xc9\xf1\x0cXDCRL\x03\x1e\xd5\x10\x81kp\xf0\x92\x88\x87\x00dCBlC8\xba\xc1\xbbG?D\xe0\x1b\x12 \x1c<\x18\x07\xa4\xa6\x87\xc09\x84\xa8\x83\xc1X\x07\x07/\x81\x82\xf0\xa2\x1d\\%\xbc\xbe\xe5\xb7\n\x91\xdd\xa8\xad\xea>\x89\xd7\x7f\xfe\xf8\x96\xff\x9b\xcf\x13\xbe\xab\xd5k\xc8\xe4\x05D\x8e\x07\xd7\xb3\x0c\xcc\xd4)?\xfa\x05\x01*\xef.\xe4(T\xb9\x89\xc3qo( X\xb9\"\x82\x95\x13\xac\xbc'\x82\x95\x13\xac\xbc\xa7\xa4\xd7\xb4\x90KZ\xd0\x15\x8d`\xe5s/f\x11\xd7\xb2$\x97\xb2\xf0+\x19\xc1\xca\xe7\\\xc5B.b\x89\xafa\xb8KX\xc2+\x18\xf6\x02\x16|\xfd\"X9\xa4\xb8t\x11\xac\x9c`\xe5\x04+\x87`d4\xc1\xcaG\x14&<\x82\x95\x13\xac\x9c`\xe5\x04+'X\xf9\x98\x08VN\xb0r\x82\x95O\x89`\xe5\xe6\x17\x08VN\xb0\xf2;\x06+W\x98\xcf\x01\x0f\xd7\x15;\x16!\xdaaAG\xdc\x0e@\x93\xc9\x00\xe5\n\xf4\x19\xd4\xab \x88\xe8\xa8k#f>`\xe8\xcc>\xc6#\xc3\x9b @x\xd3!\xc2\x85\xe3CC\xbe\x9b.\xf7\xd8E~\xc5\xcaNtJfn<\xb86N\xdc}@\xf8\x1d\xf1\xc2:A\xdf(c\x1f\xc6^\x063\x16\xb6\x95\xa1\x1f\xfc\xed\x81\x7f\xdf@\xf7\x82V\xb8\x95W\x14\x0c\xdc\x0b\x04\xc7\xf7%!\x18\xdc\x0b\x07\xf7\xce`@\xccb@\xe0 \x007\xde\x10 '\x88\xc0\x168\x99\x99m\xb9\x0es@j\x8c\x01\xf8q\x06\x10\x815pw@\xd7v\xc2\xe0\x0d \x15\xe6\x00\"q\x07N\x86\x81P\xf1\xd9\xf8\x03\x08\xc6 8Y\xf5\xf5\x9f\xf08\x04H\x8dE\x80@<\x02\x84b\x12\xdc3;\x028\x9e\x18\x9b\x008|\x02\xa4\xc4(\xc0l\x9c\x02\xc4a\x15 \x15^\x01\xa20\x0b\xee\xe5\x80\x05\x92\xdf\x08v\x01n\x10\xbf\x007\x83a\x80@\x1c\x03\xc4a\x19|[0\x0e\xcf\x00i1\x0d\x10\x80k\x80\x18l\x83\x93[\x04\xb8/\xa4h)\xc6>\x00\xeb\xd9\xfa;\x14\xf4\xb0\x8c\xb9\xe5\xf1\x8f\x99\xa8y}\x04y\xdbh5\xab\x81})'\xf3Zn\xd6\x1f\xf3f\xab,\n\xb9\xf0\x88\x9d\x94\xad\xbaku^Hw\x84\x9c\xba\x88I\x13\x94\xfd\xa3M~Qf\xed\xbe\x16\xb5=\xe5\xee+\xcapT\x17\x95\xb8\xe5\x98\x8d\x15#!\xfd\x90\x97\xf9v\xbf\xd5\xb3W\x1c\xc6\x99\x18\xf6\xaa\xc9\n>\xaf\x99\xc0+:\x17\x16\xa7m\xf6\xe9\xbc[3\xc9\xd6\xb7u\x0c\x7f\xc8>\x89v\xcbO\x89f?\xe3\"\xe3\x97Y\xbe0\xfb\x05 |\x18\xbb\x1e\xd9\xec\x9b'e\xde\xe6Y\xa1\xfc\xbd\xf0\xd8&\xf4mU\xb6\x97\x07\xbe\xe26+\x8ak\xdc\xbe2|\x14\xb1\xab\x88\xc7\x93\xee)?\xef\xabzoY\xaf\xde\xc1\xf1\xba\xb3\x91\xa3\xa7f\xdd\x8e\xd5+V\xb6\xfc\xb6\xc87p\xa1\xd25m\xf6\x81 \x18Jw\x0cI\x1d\xd1\x06\x0cR\x1a\xaaP{l\xc3\xb6\xaa\xca&_3\xbe@\x84\xf3\xdc\x08\x9f\xbe\xacY\xc3\xe7\xcf\x1d\x91\x0d\x9f\xb1\xb5>\xdc\xfe\x875B\x12\xb2\\\xefp}\xee\xb2\xc6\x1a\xec\xa1\\_zV\x7f\xb9\xf8'\xd3\x93W\xac\xad\xce\xefX\xef\xe5}\xab\xda\xc0\x8fL\xcd\x01\xb1\xa6\xcf\xc4\x14\x91\xff\x14'\xbf\x03\xcb7\x14\x92}f\xf0\xce\xf3+\xc2DT_\x1d\x7f=\x16\x15\x024.UF\x14N\\!\xc3\x95\xae\xfa\xe6\xf4\xf9\x84\x1fUg!\xccw2m\x870\xdf\x84\xf96\x13a\xbe\x05\x11\xe6\xfb\x90\x08\xf3M\x98o\x1b\x11\xe6\x9b0\xdf\x84\xf9&\xcc7a\xbe5\x11\xe6\x9b0\xdfS\n\x13\x1ea\xbe \xf3M\x98o\xc2|\x13\xe6{L\x84\xf9&\xcc7a\xbe\xa7D\x98o\xf3\x0b\x84\xf9&\xcc\xf7\x1d\xc3|\x0fPk\x03>\xaek\xf6\xe0\x8d\x0e! \x87m\x80\x11h+\x95llS\xd5G\x1a`,\xb1\xc0#f\xf7$r\xe3\xde\xd1X\xbc\xf7\x04\xb0\x80\xff\xc0\xd5\xf5{\n+qo\ny\x9c\x01M\x0fB\xf8)W\xadz\xc1\x08\xeb\xd3\x8f\x8c\x91}\xdd_\xbb\x14\xa62\xfb~\xd3f\xed\xbe1\x82\xfb:N_\xe8N\xddQp\xdfD*Cjo\xc1c\xa9\x9bs\x9e[0\x02A\xc61G\xa2\xb9\x89\xb8\x07\xdf\x1d\x01f\xa4\xf7\x12\xf2\xb5V\x16\xdc\x18\x1f\xe1\x19\xb2#\xcc<\xc2\x01\x84\x80\x00\xe1\xd6\x05\x9c\x94\x00i\x89\xd3\x14\xea\xe2u23\x9b\xd4\x1c\xb7\xb2\xd4\xae^\xf0\xbb{!\xc2\xe5\xeb\xee\x00\xe5f\x8fu\x03C\xb0+\xd8\xc9\x8ar\xb3Sn\xf6Xw1\xc4\xb9\x8c!\x95\xdb\x18\xa2\\\xc7\xee\xe5@\xb9\xd9\xc3\\\xc9\x10\xe8N\x868\x97\xb2o\x0b\xc6\xb9\x95!\xadk\x19\x02\xdc\xcb\x10\xe3bvr\xa3\xdc\xecs\xdc\xce\xe0s=\x03^wD\xb8\xa0!P\xc5\x0cvE;\xb9as\xb3C@+\x13\xba\xa5!\xc85\x0d\xa9\xdd\xd3\x10\xe9\xa2v\xcf\xab\xc6\xef\xa6\x86xW\xb5\x95\x1f\xff\xa2\xcf]\x0d\xc9\\\xd6\x80\xf7\xbc\x02\xc6u\x0da\xeek\xf0yT\"\xdd\xd8\x80\xe0\xeb\xb0\xda&riC\x94p\xf1\xaem@\xf42\xc2\xc5\x0d\xb1nnp{\xf2P\xeenH\xec\xf2\x86Dnop\xcf\x98t\xeeo\xc0\xbb\xc0\x01\xe9\x06\x07\xb4+\x1cp3*\xdc%\x0eAnqp\xba\xc6!\x95{\x1cB]\xe4\x10\xe9&\x870W9 F\xc1\xb3\xd0\xfc\xef\xe3]\xe7\x90\xd0}\x0e\x98\xa69\xd6Y:W:`\xdc\xe90\xc3\xa5ne(\xad\xb1v\xb7:\xa4v\xad\x83\xd7\xbd\x0e\xb1.v+7izp[a\xfc\xaevpz\x04\xc1\xe9r\x87(\xb7\xbb\x95\x95\xd3\x1d\x0f\xb1.y+7\xa9@;l\xa1\xe9\\\xf3\x80r\xcfC\x84\x8b\x1e\xc2\xdc\xf4\x10\xe3\xaa\x87`w=x\x8er\x8f\x0b\x15\x02\xdc\xa8X\xd7=\xc4\xb8\xef!\xd4\x85\x0f\xee\x8e\xc7\xb8\xf2\xad\xcc\x06\x8er\xec\x92\xc1\xb9\xf4\x9d\x0b\xa2\xbcp\xbb\xf5!\xadk\x1f|\xee}p\xbb\xf8\xad\xef\xc4\xba\xfe!\xe1\xdc\x0d\x80\x00@\x10\x0c\x00\xac\xda\x8btC\xdb\xf4\xc8\x91aC>:N \xa0#\x98\xc7\xde\xec)!lB\xac\xb4\x85\xfc\x83p\xce\x9f\xbey}\xfa\xfa\xed\xb3\xef\xcf\xdf\x9e=;{\xf7\xf6\xfc\xdd\xab\xb7\xa7/\x9f\x9f|s\xf2\xf2E\xc0[/^\x9e\xbe~{rv~\xfa\xf2\xcd\xc9\xeb\x90\x17\x7f|}v\xf2\xea\xdb\xf0\xf7N\x9f\xbd}\x1b\xd4\xc27/\xff\xfc\xf2\xf9Y\xd0+\xdf<;\xf9\xde\xfa\x82\x8e\xcb\x0e\x16\xe0&/\xb3\xe2\\&\x83\x90^\x00\xd4$qX\xbf\x0e9\xea\x08t\xf1\x8b\xcc$\xa1\x93%x,t\x9d'\x1d\xfer\xc9\x1cGv\x97\xf9o\x902\xe4*\xcf\xe0\xe2\xcd\xe9\xf3#eN\xd7yP\xca\xca\xee\xf0\xddU\xbb\xbdLy\xb1/\xdb\xbcp\xbb\xda\xf4\x97\xee7\xe3\xac$b\xfff\xe5\x9a\x19\xb3;@:\x1f\xff\xfdk\xd6\xdcO`\xa4\x1d\x8d\xec5k\xf4x\xf5\xa9\xd2\xae\xbb\xac\x0f\xa8$&\x00\xd9\xb2\xe1JR\xea\xc6yL\xc3\xea\xab\x87\xed\xd7?\xf4}p\xf2\xf1\xf7\xef~Y%\x97|Y\x1d6\xbc\xac\xc2\xe4^V\xe7\\\xbf=\xbfbm\x95\xba}\x1e\xe1\x0f?m\xec\x88P\xbc\xaf\xfa4\x1a\x95\xdb\xf7\xec\xebn\xb3_n\xf3\xf6\xbc\xcd\xb7)b\xe4\xd6Y\xcb\x1eq^\x98\xddo\xf0\xe9.\x1dd.\x11\x17\xfdQ\xc9\x9fi\x9a\xbc*\xcd\xcd\xd79\x8aX\xb9\xbe\x95>L\xbf\xaf;\xc2\xca\xb5\xec\x0c\xd7\xa6\xd4C\xd6N\x88L9\xee\xcc`n\x8c\x98$gv0\xd4v\x89\xdb0\xc1\x9f#\x0c%p@\xe5 C\xb2\xc2\xaf\xb1\xc0la\xde\xc6\xbb\x9d\x98i3\x89\xa1s\x89\xc5f\x13\x9b\xa6\xb7\x1a\xce\xccq\xce\xd6A>.?ZOe\nl\xda\xac\xbe\x9d\xbd\xc61#\x0e\xda\xa6\xfb)\xfe\"\x12!\xf3?\xaa\x0d\xd7}\xec\xa1\xa4p[{\xd5\xe4\xf3\x07[U\xb5\xd1\x1a\x98\xf7\x98\xc4\xc8V\x03sGw\xa0UU3\xb5\x04\xb6\xfc\xc6,sxfpQ]\xb1\xba\xcc\xca\x95\xb9'\xf6\xb6\x18\xb1\xa5\xfd\xbdK\xc0\xceD\xb0\x8a\xa8B\xcc\xd6\x83/\xf5\x8fO\xd9\xce\xa9\xb8-\x16\xc30\xff\xad\xfa>U\xdc\xa6\x8a\xdb\xff8\x15\xb7;T>*\x7f\x9a\x89\xc3q\x1f\"\xf0\xe6\xf4\xf9\xb4\x03\x94Q\x8d2\xaayOI\xcc)\x05\x11p{9w)\xa3\x1a\x02Zor\x0b\x06\xc3\xeac \xf5\x94Q-!|>\x04:\x1f\x04\x9b\xa7\x8cjs!\xf2\x11\xf0\xf8$\xd0\xf8pX\xa89eT\x0b\x80\x94#\xe1\xe4\x18(9\x0eFN\x19\xd5\x04\xc5@\xc5\x03`\xe2\x94Q-\x01\x0c\xdc\x0b\x01\x8f\x85\x7f[ON\xca\xa8v@\x94Q-\x02\xb6\xed\x87l\x87\xc2\xb5\x03\xa0\xda\xc10\xed0\x886eT\x0b\x83aSF\xb5\x8e(\xa3\x9a\xa2.\xa3\x9aN\x08%a\xd1\x03^.\xff\xf3\xe4\xad\x91\xfb]\xfdi\x92GjZx\xd6\x8d\x93vb\x80G_\xd3'\xb4\x1b\xde\xed\x83W\x1f~o\xfc\xfb\x00\xb14\xf9\x10\xac\xf7\xb5.\xd7\xad@9cI\x99\x8a\xfcy@\xdb\x87\xad\x19\xfd\x8ck\x8c\x04\x93\xc4\xb4E\x02\xc1\x0f\x1b!\xff\xee\xf8\xba\xc0\x92t\x7f\x14\xfb\xc5\xe5\xc4\xcc/A \xde&hh\xf9a#\xf4/\xf3\x9a\xb1d\xac\x84\x9a\xfd\xafpH{[#Q\xeb\x87m\x91\x7f\x9f\xd7\x92M\x96\x17\xe3&\xc4\xd4\x03>0\xf8\x1d\xc6(\xe0\xe3\x12|\x8b\xc5\xf3\xb0=\xfe\x00\x15s\x80\x8c3@\xc4\x16\x04\xc5\x13\xe8\xfd\xf0\xaajG\xb6\xc0)\x86\x8b\xd5\xa3\xedG\xfe%[\xafk\xd64\x1aPa\x866%\x18W\xddH\xb5\xd1T\xd6\x86v\x0fL\xf6J \x1aT\xcde\x0dl\xeaj\xfbYZ<(\xd3=.\xa9\xef:e\x14\xacI\x17\x8c\x1fV\xe1\x96H\x1b\x85 \xe90P\xc2Gt1q\xa6tq\x15\xad\x07\xd7\xf4\x9a_\xabd\xd6O]\xf4\xbc\xaaa\xdc\\\x18\xf8\xb8\x13T5?X\xb7F\xe3\xbcA\x88\xb2}69N\x0c\xe3}\x05\xf7\x0c\xca\xfd\x96\xd5\xf9J\xffM\xecI*\xe1\xa9\xf4L\xa8\x1a\xee\x12\x89\xd4y\xa8\xa6E\xfe\x05\xb7\x82\xcf\xf9N\x84\xd2}\xb2o\xb8\xa8?\xb0@y\x8e\xd9\xdf\xb0p'(1\x83x\x8b|\x9bc\xa5+\x9e\x1d\xa3s\x0f\xc1c\xc6:\xf2\xea\xd7\x11\xb7\x9dt\x0b\x0c\xfft\xb2\x81\x82mZ\x0d\xb6S\xe8;\xad\xf8\x08\xc7\xab\\ \xf2#\\\xce\xcbk`\xd9\xea\x12\xb2\xdd\xee\x16\xa58\x84\xc0\xf5\xef\xbbd9x\x03&\x85\xf9\x85_\xaf\\\xe7\xab\xace\x1d\x04C\x87`\xf1\x07\xd5D\x1a\xb2\xcb\xcbU\xb1_O\x0c\x0f\x99\xfcJ\x87\x81\x99\x8c\x98@T\x0d\\\xb3\xa2D\xec\x10Q:b\xf6\xeed\xaa\xd8N\xba l55k\x14\xf6M,\xaf~=\xf2%\xb7P\xab)\xbf(\xabz\xe2\xd8\xd6\xabq\xfc )\x99\xb9\x03\xbb\xac\xaa\x82\x0d\x10\xf6\x86\x01\xac\xd9\x15\xabG\xaf\xba\x06O==\x1d\xb8|\x00\xa1\xac\x99y%\x8c\xf8\xf0o\xb0R@~\xaaz\xcd\xea\xa9]\xe8m^\xae\xd8\x13\x90\xa9\x8f\x1f5\xeb\x0f\xf0\xe5\xe2\x8f_'\x95FT\xbe\xe5\xe3_\xbakQ\xbe\xfe\xbb|\xdd\x95}\xb9K\xbe\xbc\xeb\xb1\xda\x02\x02\xd8\xa7)\xd4\x8f\x9e\xbc\xd0\xa3m\xcc\xbe\xfc\x85\xee\xe3\x1dO\xbel\xc36F\xe1\xaf\x07\xc2\xbe9\xd4\xb0\x11\xe0>+y\xb23u\xb2S\x1c\xe0\x15 \x90\x9b\x08\xb9\x00\xd2\xd1.)\n\xbf\xe9\xe0\x17\x94,9)\x86\xd3\x8b\xe2L\x8d\xe3\xc4#9\x13a9\xe3\xd0\x9c\x0ev\x81\xe9\x91g\":Sc:\x03Q\x9d\x89q\x9da\xc8\xce@l\xa7k\x0ew\xa8O,\xba31\xbe\x13\x85\xf0L\x88\xf1\x9c\x8b\xf2\x8c\xc2y&Bz\xc6`=\x1d\xcc\xd0 \x90o\x00\xefys\x88\xcf\x1b\xc1|\x86\xa1>\x93\xe3>\xb1\xc8\xcf\xa4\xd8O<\xfa3\x02\xff\xe9\xe0\x15\x91\xec8\x19\x064\x1c\x05\xea\xdd\xa3qi\x8eg#A\xbd)\x8eQ\x9a\x1e\x02\x0f\x1a\xa2\x0e\x06cB\x1d\xbc\xf0\x89\x8dq\xedK\x88\x0c\x0d\xc1\x86&F\x87\xc6\xe1C]3\x08\x95\xcc8\x12#j\xe1\xd6\xa2\x12\x19\xa7\xc1\x89\xa2\xc1\x8e\x08\xach\x10Z\xd4\x97\xcd2\x061\xea\xe3i\x05G$\xc2\x8d\x86\x0b\x13\x8f\x1d\xf5\xf5-\x02?\x1a\x89 ugP\xf5\xa3H\xd3\xe2H\xd3 I]\xc0\x99dhR4\x9e\x14\x87(\xc5bJ\x113'\x1cW\x1a\x82,u\xa7$N\x82.\x0d\xc4\x97\xc6!L\x830\xa6>\xa9\xbb\xd3\x10{\xde\xc5cM\xd3\xa1M\xbd\x8d\xb2\xae\xa0t\x98S\x04\xea4\x1ewja\xd7z\x93\x0e'\xc5\x9e\xfa\xd0\xa7\x91\xf8S\x0b/\x7f\xb2a?\x06\xd5\x9dh\xd8\x95f85\x1259\x16\xd5\x8eFM\x89G\xc5 R\xc31\xa9A\xa8\xd4\x08\\j(2\xd5\x93:\xd8\xdd:,V\x10\x8bO\x8d@\xa8\x06bT\x1d\xdd\x8d\xc1\xa9ZX!\x92\x05\xc7`U\x1dS\xde\x9f(8!^\xd5\x9b$\xf8&0\xab\xa9\xe6b\x00n5\x04\xb9j\xd6\x1c\\ \x80\xc7\xb9\x0d#\xd3\xffz\xed%\xae\xd4\xbfx\x80\x9d\xeb\x1dT\xda\xdf\x10\xd0\x9d\xeb-g\xca_$\x10\xcf\xf5\x82#\xddo\x108\xaf'l\xaa_\x9c=(]\x9a\xdf\xce\xe3\xebL\xf2\x1b\x98\xe2\xb7O\xe5k\xe1\xe7M\xf0\xab\xbf\x12\x9a\xde7\x81\x1f\xda\x93\xd8\xd7\xbb\xd4`:\x8a)\x92\xfazS\xfa\x867+ _\xaf\xb7y\xee\x8c\xbc\xe1m\x9b\x9f\x8d\x17\x97\x8b7\xbceN\x13rD\x16^\xa7\xf7\xce\xd5Io\x06^o\xdfp\xd9 \xc7\xe7\xd3\xec\xdc\xbb\xb8\xcc\xbb7\xd1\xf6\x049w\x11\x19w[G\xce3\xf0e\xdb\xf5\xee^\x98\xfd\x0b\xfcyv\xbd\xe2\x05T\x8e]\x04\x1b\xec\xda \xcc\xae\x8b\xc8\xa1\x9b6\x83.2\x7fn\\\xf6\xdc\x91\x90\xd2\xe4\xceEf\xce\xf5\x8e`\xc4:\xb3\x8er\xba\x8c\xb9\x88\x9e\x7f\xfe\xfd%Y\x9e\\\xbf4\xd3\xe5\xc85\xb7\xc2\xdd\x82Q\xa6NT\xa2\xceIj\xce \xbf7\xa7\xcf)1'Pb\xced\x87I\x14\xb0\x93\x12sb\xe0\x9c&\xe3y0\x983\x06\xcaI\x899\x13\x028C\xe0\x9bA\xe0MJ\xcc9\x17\xb2\x19\x01\xd8L\x02\xd7\x0c\x07kRb\xce9 \xcd\x10\x88fb\x80f\x8b\x82g&\x04gb\xa1\x99\x06\x8b=%\xe6\xf4\x032g\xc31)1'%\xe6\xa4\xc4\x9c\x80G\x08z\xc1\x96\x01PKLJ\xc7\x10\x98%%\xe6\x8c\xc9m\xe9\x83URb\xce\x00(%\x12H\x89\x81Q\xe2@\x94\x94\x98SP\x0cl2\x004I\x899\x13\x80$\xbd\x10\xc9X\x80\xa4\xf5\xe4\xa4\xc4\x9c\x07D\x899#\x80\x90~\x18d(\x082\x00\x02\x19\x0c\x80\x0c\x83?Rb\xce0\xc0#%\xe6\xec\xe8&@\x8e)\xe6\\\x00\xc0\x11\x0fo\x0cJ\xcc\x99\x0f7\xeet\xf9HrQ@s\xb4\x0d\xf69r\xdaz\x1f\x9b *A\xea\x9cc\xe5\xa1W|L9t^\xa8'\xba\x1c:Y\xd19\xf6\x95\xc3\xb6\xc9\xcb\x8b\xe2\xb0\xef\xa3\x04:\x9a\xcd\x17Z\x00w4\x81\xceX Cjo\xc1\x07\xe9\xcd\xbc\x13d\xeerd\xdfI9\xdf\x87\x06\x8b9\x04\xf8qf\xf0\x08\x12\xecC\x11\xc1>\x08\xf6\xd1\x13\xc1>\x08\xf6\xd1\x13\xc1>Z\x82}\x98\x89`\x1f\x9a\x08\xf6A\xb0\x8f!\x11\xec\x83`\x1f\x04\xfb\x00\x82}\x10\xecC\x10\xc1>\x08\xf6A\xb0\x0f\x82}\x0c\x88`\x1f#\"\xd8\x07\xc1>\xecS\x80`\x1f\x04\xfb\x18\x12\xd6\x05O\xb0\x0fA\x04\xfb \xd8\xc7\xdd\x85}\xa4\x80Q\x08\x7f\xab\x1dF\xf1\xa3p\xc7j\x00\x85r\xcen \x83\x8b\xfc\x8a\x95\x07\xbd\x1d\xa1'\xc4\xbb_\xe8\xfe\xdeQ\xdc\xc4\xa0\xffCjo\xc1\xdf\xe8\xcd\xb7\x12d\xda\xfa\xec\x157\xb9$\x93U\xdb\x14\xcc\xb4{^\xfeC\xe7\x89@5Fzul\xad\xc1X\xd0@&\xb3\xa8\xd9*k\xf9:=\xad\xd9\x86\xab\x92\xd2\x97\xf5^~\xa0y\x0fy\xd9\xb4,[+\x8f\xe9\xc6\xaa\xfdA\x97\x99\x8ao\xe2jE9\xcc\xbb\x1bqv 57\xdf\xc0\xfb\x82\x95\x0f\xd47\x1f\xc2\xd3\xa7\xf0\xd5{\xa5Bg\xad\xea,?\xe7\xac\xec>2a\x94\xfdj\x01'%d\x85\xc3\x8a.\xcd\xc0\xab\xaca\xcd\x91\xb2\xe0\x0b-l\x92U\xcd\xfa\xfe\x8f\xaf\xcf^\x9e\xbf>=;y\xfd\xea\xfc\xdd\xab\xb7\xa7/\x9f\x9f|s\xf2\xf2\x85\xed\x06\x83\x98\x18\xac\xdc;\xb2\xcc<\xb2}\x11\xf9\xc6\xff\xbc|\x8b|\xf2\xd9\x9f\xde\x9e=;y\x85|\xfa\xd5k\xf4\x83\xe7\x7f99\xfb\xee\xfc\xc7\x97g\xb6W4\xb6$\xa8\xabj\xb6\xb8W\xe4\xdd(\x17\xeb^\xad\x92\xb0kV\x92Z\x12\xc3\xedL\x9a\xe7\xf9^\xa2Es\x04y+}\x9cee\xef\x82$\x0d\x7fX\xef\xa5\xcf\x91\x8d89\xee\xe7\xb89.\xc9=\xd3%\x85\xcfw\xd3{\xaeYoz\xde7\xf7M\xef8V\x80\xf9q\xef:\x90\x14\xb5\x1a$\xc9m\xd0-b\xf4h\x85\xcdH\xb5\x03\x0f\x8e4\xfd\xa7\xaci\xaaU.\xdc\n\xc2\xbb\xa2\x7fGMq\xfb\xcc\xc37\xef/\xa2\x1dl\xcd\x15\xb6\xd7\xe3\x85\x93q-@`5D\x8b\xf9U\xc1\xd3\xb4fW\xe4\x9e\x92\xc7\xde\x0c\x85C\x1au\xc3Z1\xb6\xdb\xee\xb4\x80?\xaa>M\x96\xa9\xf5ut\x9b0b\xe5\x82\x1c\x88P6\xa1\xe4Zsu\xc5\xea2+WC\xfd\xc5\xc8\xe2\x99d\xb2\xaa\xca&ot\xb5\xfb\x0e\xb1|\xf2\xe2\xa8\xd7\x8c\x8e\xb41\xcd>4\xb6\xb9r\xa0s\x8d\xcb\x1aK-E\xca\x90*\x1a\x9bE\x8b\x9b\x9fT\xd1\x18pw\x93\x7f\xa4\x8a\xc6\xe2\x82\x1c\x82E\x96\xb7\xf17\xa7\xcf'\xdc\x08\x8bLXd\xaf\xd2\x829\xb8\x80\xb0\xc8\x84E\xb6>IXdA\x84E>$\xc2\"\x13\x16\xd9F\x84E&,2a\x91\xbd\x0e\x1b\xc2\"\x13\x16Y\x13a\x91 \x8bl&\xc2\"\x13\x16Y\x10a\x91 \x8bLX\xe4)\x11\x16\x99\xb0\xc8\x84E\x9e\x12a\x91\xcd/\x10\x16\x99\xb0\xc8\x84EN\x82E6\x16\xc8\xa4Z\xc6\xe0\x17#\xd52\xbeA\xe1\xfa\xe7(\xd52N!E\xaaeL\xb5\x8c\xffqk\x19\x0b|\xdc\xf1/\x02\x8d\xe7(b,\x10}\xc3X\x9a\xb5\xb7Z\xb1D\xf8=[\xafkk\x88\xcd\x17\xba\xd7w8\xc2\xc6\x06\xa2\x89B\xf4y\xe3d\xbcN\x17\x04\x0e-\x9d\xc6\xa5\xc9\x11\x1f\xe3mp\xc2\xd8\x18\x17\xd6\x1e\xe3\xcd\x89\x8e\x8a\x81\xdc\xe6\xe3\xc4\xc5\xc4$\x8d\x88\xc1\xc6\xc3\xcc\x8b\x86 \x8a\x85\xf1N\x02Wt@hT\x006\x1a $\n\x00\x89\xfe\x0fD\xfdG\xa0\xfd\x9d\x91/\xad'\xee\xe5s\x14\xce\xf6\xc7\xbb\xe0V\xa2\xa4\xc4\xb1.\xf1\x91.\xde\x19,\xc9\x1f\xe5\x12:\x9bMo\xf9\"\\Bf\xb6\xe9\x0dOtK\xe0,\x97\x141\xd7%\xf9\xe3Z\x90c\x132\xef\x12G\xb4\xb8\xe3Y\xb0\x0dK\x18\xcb\xe2\x8dd\xf1j\xa7=\xe1\xa2\x04f\xc5\xb0 [\xe3\x17\xe4\xec\xe8\x95\x94\xb1+\xa6Y\x81\x84\xd6\x87\"\xeb XO\xc0z\xe3\xef\x04\xac\x1f\x10\x01\xeb X\xdf\x13\x01\xeb[\x02\xd6\x9b\x89\x80\xf5\x9a\x08XO\xc0\xfa!\x11\xb0\x9e\x80\xf5\x04\xac\x07\x02\xd6\x13\xb0^\x10\x01\xeb XO\xc0z\x02\xd6\x0f\x88\x80\xf5#\"`=\x01\xeb\xedS\x80\x80\xf5\x04\xac\x1f\x12\x16\xe4L\xc0zA\x04\xac'`\xfd|\x98\xd7\xcd\x03\xeb\x85\xc3\xd4\xd6v\x89\x03\x1ba@F\xc80\xed\xee\xec \x8c \xdb\xee\x83Pn\xf3\xb2\xed0\x94YY\xee\xb3\xe2\\h*M\x0f\xd31\xe1%\x9f\x89GO\xbb'\xb5E\x118C\xbe\x8dJ^\xd0\xf3\x92G\x9d\x11*9e\xf6\x85\xee\xe7\x1d\x85MZ\xe44$\xa7\x0d\xcci\xfd\xf2[\x97\x0e>\xaf\xbd\xe8\xde100\x1b\x8d\x8a$7 B\xcc\xa0\xe9\x88\xa1\xfc\xf9&F\xc7\x07\x13\x89\nx+\"\xdf\xbe\xcb\x86|\x03\x16\xe8\xa0\xbd2/7\xc5 \xc3\xaai\x8f<\xd1\x8f(\x9c\xbdy\x91v\x8c\x1c\x1bd\xc7I\xfdxgw\xc6\x89T\x86\x94hG\xec\xc5e\xd9\xf4,\xf24\xb02\xc3\x93:Y\xc7\xefi\xfd\xc0\xbf9}>\xd5\xd9ho\xa3\xbd\xed\x8e\xefmBWw(\x7f\xa7\xe2\xf7\xd1\xae&#\xadDp\xe1\xa6[\x8a\xbd\xceo\xdc\xd5\x9e\x8bO\xff\x90\x97\xadd\xa8\x9e\xb9\xb3\x9b\xdbP,C\x1a_T\xa4l\xc6\xd9\xb4\xb5\x18\xf4%e[\xad\xf7E\xda\\\xda\\\xe6\xe7kVV\x16\xfc\xb6w\xda\xa8\xec\xce\xadr\x16\xae\xaa\\\xdcp9_\xc3\xf3\xdd.{^g-;\x97\x90\x84y_\xdef\x9f\xf2\xed~\xab\xb5V\xc9\x92_\xb8\xfb\x1d\x9d\x7f\xcb\xd9\x98m\xf6)M#B\xbe\x99[\xc2\x05\xd0\xdf\xccK\xdc7/\xaa\xac8_V\xe5\x9a\xc5FW\xa9/rF|\x90w\xac^\xf1\xb3S\xf2\x84\xac\xad\xb6\xa6;\xc2\xb2\xa8V\x1f\x9a\xf3\x1d\xab\xcf\xafY\x16\x1b(\x85\x88\xecR\xcd\xebN;\xf9a\xdeL\xe0\x1f\x1e\xbd\x838\xca\xe5\xb6\x82:\xc7\xd5\xc9\xadv6B\x1b\xd3\xa9m\xfa\xfd\xae\x9d\xda\xf2\xb0A\x9f\xdb\x83\xbb\xbc\x9a\xe8:\xe25\xeb\x91?\xddi%c\x03\xe4Qu\xa4\x8a\xca\xe5m\x03\xcd~\xd9\xec2\x01\x11\xec\xcdu\x1f\xd8\xb5\xf1\x8c\xff\x15\x9d\xec\x98\x83\xddX\x82\xa3\x93X\xd2\x03]\x8b9j\xb7\x8d-\xaa\xe1\x98\xc3\xd67\xa36b\xda\x84\x816a\xf3\xebwm\x13vy.\xf4\"\xb5\xcd\xc0n\xaf\x1c\xee\x1brK\xe5\xcau_-\xa6\xdfu7c\xccuL\x16\x85I\x0fuc\x1d)\x7f>\xb0\xebQ\x13\xf9\xbf\xb5C\xa5k\x99\xf2\xc7\xeb>%me\xe0I\xa7\xdb\xe08\xec\x06;\xd1[\xfdtw\xde\xf1\x0d'+\xf8\x99r\x917-\xab\xd9\xba\xeb\x96D\xf2\xf2\x1f?\xb0k\xf5d\xc7i\xda\xf7\x91\x10\xef\x1b\xc3\xfc\xfe\xf9\xbezvt.vMR?\xde\xd9\xa3q\"\xe9!\xdd\xc6\x06\xe1>\x15\x11K\x9c\x0f\xaa\xfb\xe5\xd9u\x17\xad_\xf7\xbbv\xfa\xb9:\x88\xf2\xecW`\xb7\x9dHl\x8d\x9a\xa7j\xc1\x9aa\xb7\xc2c\xce>\xe5M+\xe2{,\xcf\x0cW\xb5\xf9\x19\xf3\xdc\x1e=\x8aP\x04\xbai\xdf\xe9\x02\xc3]g\xa4\x14\xc8\xa5\xd7\xa5\x0d;\x0cN2\xa4\x86@.gGg=\xdd$\x8dc\xf2+i\x1c7\xa0q\xf8\x0e\xc3\xa6\xc8\x9a\xcb\xbc\xbc@_\xfc&\xb7\xbdC\xa3\xa4\xe6\xa8t\x13\xf5\xfe\xf8\xc4R\x8f\xfc\x8ant\xd6)\x16w!\xcb/J\xb6>W\xc6\xb0\x8fy\xb9\xae>\xda\xe7\x14\xca\x14f\xb3\x84m\xf3\xf2\\}n\xc7\xea4\xdf\xb2\x84\xda\xac\xab\x8fe\x9bo\xd9\xf9\xfffyq\xbeV\xe0\x9f\xa8o\x89It\xbe\x11\xe1\xaeUy\xbe\xae\xf6\xcb\x82\x89~D\xb1\xf36\xfd\xe0{\xb2'7\xf11\xff\xc9\xdd\xf9D\x146\xed`\x95u\xd1oK\xa9\xf1\xeb%g\x1a~\x83{\xc0V|\xf1f\x0c\x9d\xdd\x1f\xe9\xc0;\x90\x0f\x1dx\xb7\x7f\xe0\xf1M%//\xce\xf3rS9\xce\xbd\xb7\xf2\xb1\x13\xfeTw\xfa\xa9wE~?a\xe3,\n\x19:\x98\xb5U\xad\x0f\xb6\xf1\xd17`\xa3~\xbf\xb3\x07\x1f\xef\xd5\xdd\x98h\n\xde\x18=S\x9a6\xab\xdb\xf3Kg\xfa$/\x13\xffY\x0b\x8e\xcd\xb5\xa7\xefT\xf6\xa4V\xa1\x83\xbb #J\xd0\n\x10\xb6L*\xb1\xe6\x7ff\xf0\xfa\x0d\xff\xc1\xcan_>\xe2\xe7\xad%\x8463\xe7\xc2Y\xbeeM\x9bmw Z\xa6fB\xabs\xdb\xe9\x91\x95\xad\x87\xb5H\x89leV\xe4W\xacdM\xd3)\xa2fQ\xb4\xd5v\xd9\xb4Ui\xf3|kAL\xd3\xe9\x8e \xdb\xc3\xbf\\2\x11\x8c/\xa7\x93\x0e-\x17\x1d\xbb\xcc\x1aX2V\x0eZ\x04\x0f>\xe4\x85m-s\xaa\xf62\xb5\x99f\xe2\x98i\xac}\xa83\x11\x0b0M\xb9b\x13\xc9\xca\x99\xde\x80\xb5\x93\x00\xec\xe7}~U\xadT\x98P-\x8d\x1e\xe5\xb5\xcc0`\xff\xf8\xaa*7\xf9\xc5\xbefk>E\x97\xec2\xbb\xcam @\xe4\x1c\xd6KBd[\xb6eP\x0d\x9a\xa3)\xf6\xaag\xa0\xda#\xb1Hb\xb1=\xd8\x97r\x15?T\xa0\x02-e\x99\xf0\xc1>?e\x12\x91}Y2~xg\xb5#\xe1N\xcd\xb2u\xa3\xad\xe4\xc8E\x8e\xe9\xd3\x8fz\xec\x07z\xc80 \x9c\xfe\xf9\xfeD\xb7\xb1\xe5\xf3\xd9Ve\xdeV\xb5J\xc6\x9f[fD\xb70\xf9\xf5\xea*o\xaf\x0d\xdeMyl\x8a\x8f\xa9;\x07J\xb9\xd2\xd4\xe7\xb8\xb6i,Q\x17u]\x88\xe0&.\x820\x1d3k\xc2\xc0\xae\x1cB\xde\xbbTT\xfe\x98\xac\x91\x93nT\xed^\xfena\xd6;\x8a\\\xa5\x13N\xdaA0\x94\xc8RoKP6J\x89\xb2\xadj\x9d\xc2\xdd\x98\xeeC`\xfbf\n\xd3\x0f\xfa\xb1.\xe8.\x89\xbb-\xab\xff \x85\x8d\xad\xbfCA\x0f\xf3\xe1[\x1e\xe7:]\xc3\xda#\x81wP\xc9\x92\x1a\xd8\x97r\xd1\xad\xe5F\xfa1o\xe2\x0c\x05\x17\xe3\xf4\x87\xd5(x-/\xe1\xe2\xcd\xe9\xf3\xfe\xf2\xae.\x9c\x0d|\xe4cf\x1a\x1e\xb3\xea\xb2\xaaj\xc9C\xe4-\xabe\xe7\xbb83~\x8c\x89\xado(\x19\xa38\xf4\x1bo\xabm\xdfng\xb8t\xcdvL$\xe9\xf8SVw\x83\xe4 \xbe\x1c\x8bE\xcco[\xf8\xe58\xe0\xdbi\x17\x19^\xdcP\xd6\x11\x13\x93\xe3\xd1-\xd2\x8a\xe8\xee\xfeH&\x93\x03\xf9\x90\xc9$\xb9\xc9\xc4\x19OIe~\xbc\x80\x03\xb0\x9d\xf4T\xe6'\xadp\xfd\x05j\xa8\xccO\n)R\x99\x1f*\xf3\xf3\xdb,\xf3\xe3\xb6\xfe\x1f\xff\xb2\xaa\xca\xe6\\Y\x9b\x1d%~\x86\xb7\xe7\xa1'|ze\x95H\xe7\x95\xc8\xe9(\x99*N6\x9f\xc0\x17\xba\xd3w\xd4%p\x95\x15\xe7C\x91%\xbdl;\xad\xfc\x1e\xd5\xc6o\xe1\xf7\xeaF~\xbb\x91\xefz\x99\xd4\xb2\xef\xb2\xeb\xfb\xad\xfa z\xeb\xbf\x7fBRk~\xbc-?\xcc\x92?\xb4\xd8[\x18\xfa\xec\xf8I\xad\xf8H\xf3\x9e\xdf\x82\x8f\x1es\xb7\xf5\x1e7\xee -\xf7(\xbb\xbd\xcfj\xef\xb7\xd9\xe3\xfa\x15g\xaf\x87jo\xba\x0d\x82\xccE\xea\xb5\xd6\x07\xd9\xeaG6y\xdbG\x91\x96z\xbc\x9d>\xc0J\x8f\x9e\x87s\xf7\x9e\x18\xeb\xbc\xb4\xc2[\xf7\\\xafm>\xdc2\xef\xefKZ\xab<\xc6&\x8f\xb7\xc8\x1b\x1b\x962\xc1uU\xb2~Z\xa9:0\x8d\xa9\xf6\xa4}\xc6U2\x85P\xf5Q\xde\x14\xaa\xd2\x01\xd0\xf3\x0c\xe92+\xb2\xd2\x173\x98`K\xb0&\xdf\x91\x84\x9a3\xf2\xb4\x99\xc9\x06;K\x9eW\xf9\xb0\x06\xa7\x98\x10\xaa\xc2\x88\xec\x8e>\xd2D\x0c]\xa9\x1a\xe7*f\xf3\xea\xf5\xd9\xcb'\"\xf3\xb5|\xb6?\x0c\xb3\x12NJmd\xeb\xca\xce4\xceI\xa02\xef*\xbd\xde\xbe\\\xf3\x8b2k\xf7r\xfdH\xdd\x87O\xc2\x8b\xea\xa2\x12imc\x81W\xfd\"\x1a^Y\xc4M>+\x84\x13\xae\x1a.4\xf6i\xc5v\xd2\xcbgd\x97\xb7\x83\x820\xe6\xde\xa8\x99:M3\xac6\x87\xceH'\x10;\xcd>o\xb5\xd3\xc4\xc8lU\x08OawD\xc7\xdcrMG}?cT\xf0\xe9@e\xbb\xdf#\xbf\xec\xdc\x0e\xd7\xa9\x0b 6j\xe4@\xcd\x1a\xa7\xd8\x1a\xf8\x8cF\x97J\xc3\x1d9\xde\xd8M\xc82B\x96M\xe8\xb3 \xcb\xdc\xf3B\xdc\xd9L\xf7\x08o\xc2\x15\x13\xa3c\xe3\x0d\x8d\xb2\xf2*\"\xfbJ\x1a\xd5\x83*\xeeR\xc5]3Q\xc5]ATq\xf7\x90\xa8\xe2.U\xdc\xb5\x11U\xdc\xa5\x8a\xbbTq7\xc4s5%\xac\xeaF\x15w;\xa2\x8a\xbbC\xa2\x8a\xbbTq\xd7@Tq\x97*\xeezg\x08U\xdc\xb5\xbfC\x15wGD\x15w\xa9\xe2\xae}\nP\xc5]\xaa\xb8;$l\xf5S\xaa\xb8+\x88*\xee\xfe#T\xdc\x1d\xc3\xc7\x06\xacF7\xed\xf1S#\x87{\xf7\xd3!V\xd5\x90\xc0~\x06@\x95\xa2\xdacC\x86)\xaa\xfd\x06\x85\xeb\x8f\xc7\xa6\xa8\xf6\x14R\xa4\xa8v\x8aj\xff\x8dF\xb5\x9b#+\xaa\xfa0\xb0\xe2\xb8f\x03\x88\x9ddj\n\xb3x3|\xac\x0b\xaa\x18\xbd\xdc\x07\xb8\xff6\xc2'F]V\x0f\xdc\xd9\xb8\x89\xe1H\xdc\xb5\xc8\x89a\xdbn\x1c(}Gc'\x96lu\xf9\xf5\xe3G\x871\x05Nv#u\x18\x13B\xd1\xd4\xab[\xea\xb9\xb1\x0d\xba\xf7}\xd8\xf2p.8\xf9)\xf0\x96\\\x91\xfd]\x00#\x84u\xd3\xde\xba\x10\x06m\x98!\x845kZ\xbdw\xe1%\xc1\xca\xb6v\xae\x12\xf76\xd0\x93\xa7$\x11\xe0\xd6\xad$\xcc\xea\x95\xb4\xaa\x99\xdc\xc6\xdc\xf9\xb9{B\x0e\xa4$\x7f\xac\xf9\x90B\x06_\xd2\xa4\xf50\xba\xda\xaa\xbfu\xb9\x11\x10\xfc\x86s\x05\xda\xaa\xfa\x00\xbbbR!\xcdD\xabj\xbb+\x98h\x88\xbdp\xc5\x90\xa2\x84\xe8K\xfb\xdcS\x84 \xc7=\x18\xc9q_\xe6\x9fd\xf2\x10\x17\xcc\xad\xa7\x91\x10{\xc6>!\nhYV\x9c{\x82|z\n\x12b\xb8H&\xed\x19\x89D\xfd\xa6\xc3<\x10\xdc\x84\xf6>\x92\x8cH\x9ac\x0f\x10\xd3$CF\xf8\x16w\xeb\x12\xe9\x9b\xa2wY\x15\x1b\xe49X%\x0d\xb6\xd7G\xfd\xee\xac\"b\xc4B\x16\x1e\x1e\x04\xa7\xa1\x18}\xe2\xdb\x97K\x999\xf5<\xb7f\x1c\xef)H\x80\x88\xc0\x85!\xf9\x82\x18\x86t\xa2\x93\xf7\x88X\xf1\xb5\x0bP\x9d\xdb\xa1`=\xf1C\xca'\xd9^R|?\xad\x8a\xf5y\xcd62\xd7\xc8\x0d .\xbd\xdc\xde\xb6u.\xae\x19\xbb\xaa\xc9\xdb\xfc\x8a\xc9kI\xdeH \xdco\xfa^\"\xb8u)g\x9a\xb6\xda\xed\xa4\xff\x91}jY]f\x85\xba6\xb9\x85\x1f\xb6\xc4\x86W\xa0\x97\xbc\xb9\x83\x88\xbe\xd1\xce\x81P\x00T\x16\xa5\x9a\x15\xec*+[\xd8\xb26[gm\xe6Z.\xa3\xd6*\xb5F^\xd3\x85qe\xd0\x00\xf5\xa3\x8d\x19\xb6\xdbo\xc6\x07\xc5\xc09V\xe4M+\x93\x06\xec\xb2\xba\xcdW\xc2\xb3gc\xd3\xe9\xec\xf7\x87w\xe4\xf2BD\xc8:\x82\\\xe5-x\xf0\x05\xad\x06\xf7\xbb\x930\xa8\xa1\x9a\xd0\xab\x8e\x9e\x18V\x8f\xbe\xe8\xd7\x15Q\xa5+=S\x04\xa7\x1f\x8e\xae\xb9b\x01\x91z\x8a\x98\xd6=\x91zj\xa4\x08A\x92z:%RO\xa7D\xea\xe9\x88H=\xed)Jp\xe9\xe5F\xeaiG\xe1\xea)j\xe3E\x0d4\xbe\xdf\x07}\xb6\xe7\x8f\xb0G\x99\x99D7H1\x01\xb9#\x04\x14\x06\x81\x10!I%\x1c\x0c\x87\xe9&Tj \xd7\xf7\x1dY'p\x92\x1cv\xde!\xbe\xf1m@\xca\xc7\xc8O\xc9\xac\xd1\x9a\xb4\xb9\xf1]\xcc\xefl\xa9\xa1\xe5e\x95\x14%\xc5\x10\xe4\x82\xf7\xf4DI1\x00wx\xfb\x0e\x9e_gR\x8c\x83\xee\x08w\xfb\xc8;\x1c\x97\x0dc\xecS\xb7&\x1d\xed\x07\x92\xb2b\x1c\x08\x88\xb2b`\x0e<\xa0\xac\x18\x94\x15\xc3\xfa$e\xc5\x10DY1\x0e\x89\xb2bPV\x0c\x1bQV\x0c\xca\x8aAY1(+\x06e\xc5\xd0DY1(+\xc6\x94\xc2\x84GY1(+\x06e\xc5\xa0\xac\x18\x94\x15cL\x94\x15\x83\xb2bPV\x8c)QV\x0c\xf3\x0b\x94\x15\x83\xb2bPV\x8c\xc1\x9f\xe2\xb2b4\xf5\xea|\\\x1d\xc9\xd6\xee\xc3'Gm\xef\xc1k\x83\xb6w\x00\x1d&`\xcf\xd3\x1e\x84FH[\xfa\xb0nZd\x1f\x0e\x9f\x0c\xea\xc3\xb8\x14L\xc2\x1ePn\x12\x8c\xb4(7\x89\xa4\x1b\x16\xae?\xab\x06\xe5&I!E\xcaMB\xb9I(7I\x0f\xb0\x1e\x00\xa5$sl)\xd8w\x9a\x85\xad&l\xf7\x8d\x83\xea\xb0\x1d3\x91\xd4\xa4\x17\xe4\x81&\xa6\xa7\x93m\x84\xefx\x9e\x13\xa7\xac\xd4\x0bw6\xefI?E\xeeX\xd2\x93\xf1\\v\xa4\xa2@\xb8\x121\xde80}\x13\xe2J\x99v|\xac\x9eQ\\\xc5\xd6\x84]KU\xa5\xf5\xb7\x13\n\x19\x14\x87\x88\x18 I\xf8H\x13\xec\xc8I\x9a\xc6\x1d\xe6\xe6\x88Ct\xb4 .\xd40(\xcc0XF\xb8\xf0\xc2@9M\xc2\nsCD!ZH\xb8P\xc2\xa00B\xb4\x90\xc2\xba\xed\n\x1dT\xb5\x84\xd5#\x0e`\x8b$~\xb0\xf0cu-/\xe8\xa2\xe61\xf0\xab\x1aJ\x18\xb7)\x04G\xe7G]I2\xea\xf80?to\x11\x11\x02\x9a|\x91\x02\x9aR\x86\xf5\xf9B\xfa\xa2\xc3\xf9\x82\x05\x94N>\x01\xe1{p\xe9\x80\x82J\x8a\x0e\xdd\xc3\xcfs\x83\x8e9\x89\xdc+\x07M\xf6\xc6\xed\x85\xc5\xec\x8d\x9a9M'a\xba\x08\xb8\xd2J`\xfal\xe8-\x97o\xad\xee\x1e\"\x9dD\x93\x97\x17\x05\x1b\xa6\x8c0\xb2\xea\x9b\xe7\xc8!\xc1\x0f\x87\x8eco\xb1\xccK.V~|<\x12\xd7B\xb6\x16\xe9,\xa6\xbd\xa2\xa00A\x14\x14\xd6\xff\x84\x15&\x05\x85 ;\xc7t\xbd\xe3K&O\xb8\x19\x82\x0fd\xcc\x98\xf3\x0bTJY\x13\x05\x8d\xa5\xb9vS\xd0\x18\x05\x8d\x99\x89\x82\xc6\x04Q\xd0\xd8!Q\xd0\x18\x05\x8d\xd9\x88\x82\xc6(h\x8c\x82\xc6(h\x8c\x82\xc64Q\xd0\x18\x05\x8dM)Lx\x144FAc\x144FAc\x1446&\n\x1a\xa3\xa01\n\x1a\x9b\x12\x05\x8d\x99_\xa0\xa01\n\x1a\xa3\xa0\xb1\xc1\x9f\xe2\x82\xc6(\\),\x16\x84\xc2\x95nP\xb8\xfe@\x1b\nWJ!E\nW\xa2p%\nW\xea\x00w\x8e\x18\xa5\xff3\xc4(\xfd\xd8\xbd7\x8aL\xea\xd9A^n*1?e}\xe5\xee\xc3\x1d\xaf\xdfF$\xd2[)l\x83`\xd4\xd3w6\x0ci:\xf4Cjo\x01\"\xa4\x8b\xc5~\xc6\x08\x9d\xe9'G\x8a\xe88:\xa7\x17\x97\x05\xec:\xe4\xf7\xaf\xa2vr\x17\xe7\x93\x97\xe2\xc2a\xbeX\xf3\xd9\xca\xcaf\xdf\x9c\xef\xf6K+D\xd4+]@H\x18\x10@,\xc0I\x18\x02\xa4\x0c\x11\xa0,'3\xb3\x13\xccaGM\x0d\xce\x02?@\x0b\"@Z\xee\x0ed\xed%\x1a\xa8\x05\xa9\xc0Z\x10 \xd8r2\x14\x05E\xb0\xa0-\x98\x0f\xdc\x82`\xf0\x96\x93\x95\x02\x95\x04\x01\xb8 5\x88\x0b\x02\x81\\\x10\n\xe6r\xcf\xec\x0e\xe8\x85\x05tAjP\x17\xe0\x80]\x90\x12\xdc\x05\xb3\x01^\x10\x07\xf2\x82T@/\x88\x02{\xb9\x97C\xc6\xaf\xe6^\xc0\x17\xdc\x0c\xe8\x0bn\x10\xf8\x057\x03\xfe\x82@\x00\x18\xc4\x81\xc0|[0\x0e\x08\x06i\xc1`\x10\x00\x08\x83\x18P\x98\x93\x9b\x04\x8c\x05\x00\xc3 %8\x0c\"\x00b\x88\xfd\xfc!\x02$\x06)\x80b\xe0\x03\x8b\x01^wD\x80\xc6 P\xc5\x0c\x06\x8f9\xb9 `\x19\x02@\x06\x01\xadL\x08$\x83 0\x19\xa4\x06\x94A$\xa8\xcc=\xaf\x1a?\xb0\x0c\xe2\xc1eV~\xfc\x8b>\x80\x19$\x03\x99\x01\x1e+\x05\x18\xb0\x19\x84\x01\xce\xc0\x87\x81\x88\x04\x9e\x01\x82\xaf\xc3\xcf\x9a\x08\x84\x06Q\xc2\xc5\x83\xd1\x00\xd1\xcb\x08P\x1a\xc4\x02\xd3\xc0\x8d\xbdA\x01\xd4 1H\x0d\x12\x01\xd5\xc0=c\xd2\x01\xd6\x00\x0fZ\x03$p\x0d\xd0\xe05\xc0\xcd\xa8p\x10\x1b\x04\x01\xd9\xc0 f\x83T\x806\x08\x05\xb5A$\xb0\x0d\xc2\xc0m\x80\x18\x05\xcfB\xf3\xbf\x8f\x07\xbbAB\xc0\x1b`\x9a\xe6Xg\xe9\xc0o\x80\x01\xc0\xc1\x0c\x10\x9c\x95a+r%\xd8\x81p\x90\x1a\x0c\x07^@\x1c\xc4\x82\xe2\xac\xdc\xa4\xe9\xc1m\x85\xf1\x83\xe3\xc0\x89\xe1\x01'H\x0e\xa2\x80rVVN\x00\x1d\xc4\x82\xe8\xac\xdc\xa4\x02\xed\xb0\x85\xa6\x03\xd3\x01\nP\x07\x11\xa0:\x08\x03\xd6A\x0c\xb8\x0e\x82\x01v\xe09\xca=\xa0'\x08\x00>a\xc1v\x10\x03\xb8\x83P\xd0\x1d\xb8;\x1e\x03\xbe\xb32\x1b@\xdb\xb0K\x06\x07\xc2s.\x88\xf2\xc2\x0d\xc4\x83\xb4`<\xf0\x01\xf2\xc0\x0d\xca\xb3\xbe\x13\x0b\xd6\x83\x84s7\x00\xb4\x07A\xc0=\xb0j/\xff\x9b\xe5\x05\xb3&\xd3j\x8dX\x8c1a\x8d\x1f\xf2K\xa0\xf3\x95|\xbcd\xca\x046\xcc\xfa\xc3g\xb8\xc8\xe8$\x9f\xb6\x8fp]mER!\xb6\x86\xa6\xcd\xda}#\x9d\x18\x07\xf9\x81$\xc9Gl\xbd\xc4\xf6@}(\x9f&W\x97\x7f\xb7\xbe\xf6@\xb6\xb3\xcf\x0c\xab\xfeO8\xad\xcc\xaf \x8ch\xac\xdco\xed\xea\xff#\xf8\xd3\xebW/\xce\xdf\x9e=;{\xf7\xf6\xfc\xdd\xab\xb7\xa7/\x9f\x9f|s\xf2\xf2\x05\xfa\x0d\xfe\xaf\xc0\xc7O^}\x8b|\xde\xc9\\'\x7f \xea\x82\xcc9\xf7\x19 \x03*\xb9\x9d\x9c\xc60\x00\xac\n\xef\x89\xf8\xedA^\xae\n\xfb\xc1\xdf\xb0b\xf3\xa8\xcf\xd7e\x99\x04=P\xa7\xb9\xccj_z\xcf$]\x9b~\xb2GC\x08\xbc\x98\xfac\xde4{\xe9)\xb2\x1fE\x03\xacD\xcf\xd5bU\x1e\xb6nv\x07\xba\xe7&\x90\xe2\xfe\xef-\xab\xb7\x0d\x98K\xdc\xf7\xe4I\xb9\x9a\x0c\x8d\xb1\xad\xca\xfc\x033\xe4\x16\xea 1\xc0\x10 #\xe8\xbf\xda\xe7\xaf\x83\xcb\xfd6+\x1f\xd5,[\x0bX\xa1\xd0\xe8|2\x02\x8c\x9c@\xe1:Z+\xae\x05n\xa6\x8f\xfa\xb3\xc3$}\xdak\xdd\xff\xd8\xe4\x17e\xd6\xeek\x06\x0f\xd8'\xf7\x1d\xf9\xddiU\x0b\x8c\xf0\x7f\xb2\xebe\xd60\xeb\xe6\x0d\xf0\x91-\x9b\xbcM\xe1&\x19\xf5X\xb15\xf6H\xffV\xe4\xe5\x07\xd7\xd6\xb3\xda\xd7y{}.\xee*+g\x8e\xc8\x98\x16z\xc6d\xfaycO\xd86\xcb\x0b/\xf4A\xb3\x02\xc5\xca\xdegk\x1a\xac\x9eb\xba\xaa\xd8\xea\x83@\xfa\xf3\xbaN\xa8_\xcd\xad\xea\x93v\xba\xd3 #\x9a\x85\xc9\xce\x89\x1d\xa1i\xb3\xf4\xe8\x1cA\xbe\xe9\x7f\x14\xdeV\x9d\x03\xd9\x01\x91\xd2\xe9\x91\xf3\xe6@\xbd\xbb\xd8\x0f\xf2e\xfaD\xe4\xca\x81\x1c _\xde\xe3p!\x89\xcc\xc6\x0e\x11m\xf3\xb2\xcb~le7V$\xdbJ'\xc2e>\x01\xad\xaa\xed6o\x1a\xec\xa1\xd9?>:\x18\x07\x7f\xeeczn\xf8\xc8\xeb\xbfy^g\xad;_8vT\xc0\xc0w\xd4Q\x95\x88y\xf0\x90\x93\x97d \x81\"\x1d\xb8A\xa6\x03\x17\xf7]\xc4\xb1\x87\x92\x17 e\x06\xaaM>{?bAh\n\x11-\xa8\xcf\xeb\xab\xcf`\xda\x88?\xaf.\xb3\xfaB\xe8\x84^6\xbd6x\x04\"\x94p#@y\xee\xbc\xcf\x00\xdb\xec\xd3\xf9-\x0b@7a4\xaf\xb6\xd9\xa7|\xbb\xdfN%\xe2e&w\xc7~\xe5\xaf\xb2\x12\xd8\x15\xab\x95(\x83e#QDwAD\x83\x96\x18%\xb5\xcero:t\x11\x1bS\xb3\xaca\x07\xe0\xeb\x81\xa4\xa5\x90\xbc\xac\xfcB\xdc\xef\xf8\xe9\xe0\xcd\xb6\x8f\x14\x1c\xf6\xc4\x81@\x01\x0fZ\xa9\xd7\xa1\xf00\x88?\x98V\xe5G\x0fxR\x8e\xd4\xda,\x97m^\x9e\xf3\x8b\xea\xa0\x8a\xcd\x8cS\x18\xdbO\xc3W\x0f\xcc-\xf7\x1bq\x83\x865[\x15\xd94$i\xc2L\xcc8\xf5\xb4f\xe8L\xdfe\n\xde\xf9g\xe3\xe3\x11\x99\xd7\x11\x82\xc2\xe8s\xbe\xe4\xc4\xd28o\xce\xb0>\x94\xe2(\xcb\xba\xb0\xba9\x18\x86\xe5W\x1f&\xea\xbf\xe9\xc2$\x9e\x05\x89\xc8\xf6\x8c\x11i\x917\x02\xa0\xdd\x0b-_7G2\x8e\xf1 \x84\x81\xeb\x08va\x0eR\xc5OG\xc5\xf0\x0ef\xe9t1G\x83\x1b}\xc7\xf3\x08\xda\xeaB\xdaZ\x85\x87\xab\xd5a\x85FV2XJ\x03\xe4\xdc_\xbb\xdf\x08\x13\xac6\x0c\xa9,$y\x0d\xec\x93\xdc[\xe4>$\xb4\xda\xbc\xb4\xe8\x95o\x8b\xac\xb9\xe4\xc2\xd0ax\xb6h\x84\x8c\xafxy((\xbf\xe9\xe83G\x12\xc3, \xb52h\xcb\xc8e\x95\x15\xab}\xd1\xf9\x0b7{~\xf97\x7fp_\x0e\xabkq\xd9U\xfb\x96\xcf\xc9Z\xaa\x81\xd5\x950\xa1t\xd6-\x15\xa9\xc6\xbbj\xee@=\xb6\x15\x9a\xbf:\x9e\x10G\x93\xd3/o\xb8\x1a\xba\xce[\x0d\xe5\xcc\x06;\x9b\x91\xdf\xc7\xcb\xaaa}\x04\xa9\xf9\xa3\xc3a\xcc\x9b\x11\xa2{0#D\xd7\xfa.\x189\xad\xf3\x0e\x1b =<\x02\x96l\xfe\xeah\xfc\x16\xf0c%\xc4\xba\xab>\xb2ZG}\xeb\xe1bk\xe1\xef\xb7N[\xed\n\x10]0\x7fm\xbb/\xda|W\xe4z\x1b\x1b~\xfb\xe0\x85\xd1\xaa\x1b\x045\x1a\xab\xab6\xf7e\xb0\xa3(\x8d`\xadCE\x95\n\x04\x8d\xbaJ\x95\nP\xc2\xfc\x87\xabTp0/D\x88\xb3!\xc6\xd6Y\x9f\xc0`\xbd\x96\x05 LQ\xccT\x86@\x11\x95!Hs\x97 \x8dx\x95\xd3\x96\xca\x10 \xa2[\xdb\x14\x91\xad1Q\xadT\x86 a\x04kH\xf4jP\xe4*\x95!\x98\x1b\xa5\x1a\x11\xa1\x9a$:5<2\x95\xca\x10\xcc\x89D\x0d\x89B\x8d\x88@\xa52\x04@e\x08\xb0\xd1\xa5T\x86\xc0\xd3\xb2\x84\xd1\xa3\xf8\xc8\xd1\xa4Q\xa31\x11\xa3@e\x08,\xe4\x8d\x0c\x0d\x88\n\xc5$\xb0\x0f\x89\x06\xa52\x041\x99\xfc}\xd1\x9eT\x86 \xaa\x13\x19\xd1\x89\x89\xe6\xc4ErR\x19\x02A1\xd1\x9a\x01\x91\x9aT\x86 A$\xa67\n36\x02\xd3zrR\x19\x82\x03\xa22\x04\x11\x91\x93\xfe\xa8\xc9\xd0\x88\xc9\x80h\xc9\xe0H\xc9\xb0(I*C\x10\x16 Ie\x08:\xa22\x04\x8a\xa8\x0c\x01\x95!\xa02\x04\xfd\xdf\xa2\x85\xebO\xa0Oe\x08RH\x91\xca\x10P\x19\x02*C\xd0c\xe9\x8e\x7f\xe9\xfe_\xfe&?\x11\\\x97\xa0+K0\x00OZ*\x12\x18\xf0\xb7\xbb,\xef\xce\xf8Q\xba\xff\xc3\x0f\xa9\xa7\xee~\x9a\x7f\x1b\x02'\n&\x88K\xd6\xefu\xdb`\xfc\x1e\xa9\xd3\xf4\x87'\xe9\xc7\xa5\xe8wJ\x13\xbc\x12\x05\x04< !Q@K\x15bAJ\x0e~AI\xf9\x93\x02\x95\xbcP\xa5\xd4`%<\\)\x11`)\x0e\xb2\xe4`\x17\x98\x86\x7f&l)5p)\x10\xba\x94\x18\xbc\x14\x06_\n\x040\xb9\xe6p\x07m\xc2B\x98\x12\x83\x98P0\xa6\x84@\xa6\xb9P\xa6(0S\"8S\x0c\xa0\xc9\xc1\x0c\x9dh\xff\x06@M7\x07k\xba\x11`S\x18\xb4)9\xb8 \x0boJ\np\xc2C\x9c\"@N\x0e^\x11I\xf5\x93\x01\x9d\xc2\xa1N\xde=\x1a\x97N\x7f6\xdc\xc9\x9bJ\x1f\xa5\xe9!@O!\xea`0\xf0\xc9\xc1\x0b\x9f@\x1f\xd7\xbe\x84\xf0\xa7\x10\x00Tb\x08T\x1c\x08\xca5\x83PI\xf3#\x81P\x16n-*a~\x1a0\x14\x1a\xd1\x83\x00D\x05A\xa2|Y\x93c`Q>\x9eV\x0f`\"pT\xb80\xf1\x00)_\xdf\"@R\x910)w\xa6n?T*-X*\x0d\\\xca\xe5\x1dN\x06\x99B\x83\xa6p\xb0),p\n1s\xc2\xc1S!\xf0)w\xea\xfb$\x10\xaa@\x10U\x1c\x8c*\x08H\xe5\x93\xba;\xdd\xbd\xe7]<\xa0*\x1d\xa4\xca\xdb(\xeb\nJ\x07\xacB@\xab\xe2\xc1U\x16v\xad7\xb9}R\x80\x95\x0fb\x15 \xb2\xb2\xf0\xf2'\xb5\xf7\x03\xad\xdc \xed]\xe9\xecS\xc3\xad\x92\x03\xae\xec\x90\xab\x94\xa0+\x0c\xec*\x1cx\x15\x04\xbd\x8a\x00_\x85\xc2\xaf<)\xea\xdd\xad\xc3\x02b\xb0 \xac\x08\x18V \x10\xcb\xd1\xdd\x180\x96\x85\x15\")}\x0c \xcb1\xe5\xfd \xe9\x13\x82\xb2\xbc\xc9\xe8o\x02\x98\x95j.\x06\x80\xb3B\xe0Yf\xcd\xc1\x95h\xbe5\xfa\xda\x87\x843\x11\xc4\xa4\x98\x17\xa9\xe4-\xfc\xb0 \xe6]\xe9\xe5q-\x8fJ-\x1f\x9cX\xdekRr%\x95\x0fM)\x1f\x94P>,\x9d<:\x99|D*yW\"y\xaf\xfcp\x83=7\x85<&\x81<.}|\xa2\x0e\xa5J\x1c\x8fO\x1b?l\xd7\xac\x86wO\xcdJ\x18\xef\xc9\x07\xdb\xceG\x06x\x13\xc5{\x87\x12\xd0R\x81\x84)\xe2\xbd\x99r\xfd\xe9\xe1\x13\xf7,qbxtZxoR\xf8\xf0~\xceM\x08\x8fO\x07\x1f\xde6\xe7\x18$K\x04\x8fM\x03\xefM\x02\x1f\xde\xc1\xe8\x04\xf0\xb8\xf4\xef\xde\x06\xf9S\x85\xe2\xc6#e\xda\xf79I\xdf1)\xdf\xd1Bq'\xdf\x0d\x15LH\xaaw\xcc)\x01\xe8D\xef\xbe4\xef\xa3\x9e\xccO\xf2\x9e\xe0\xa0\xc2\xa7w\xc7\x8d\x02\x84\xa7v\x97\xe9\xdb\x1d\xfcf%v\xf7\xca\x08Pr\x02TJw\xef\x84\xd7\x84\x17&\xa0\x93\xb9\x0f\x93\xb5{\x18\xa2\xd3\x95\xe3\x12\xb9\xdfP\xb7CR\xb8\xcb\xbd\xcc\xc30E\x02\xf7\xa0\xf4\xed7(\x18T\xe2\xf6.1\xbb\x87\xa17m\xbbW4\xa8\xa4\xec(q\xe0\xce\x04\x08\x12Z\xe2d\xec\x8eT\xec\xe8D\xec^Y\xe0z\x970\x05{p\x02vt\xfa\xf5\xe0\xe4\xeb^\xe1\xf8\xb5)_\xa6\xd5&m\xd2\xf5\xb0\x94\xeb\x88\x84\xebR\x04\xf6t\xeb\xff?{\xff\xdad\xb7q\xe4 \xe3\xef\xf5)\xf2\xff\xdf'B\xf2L\xb3)J\x96g\x97\x1b\x9e\x08\x8a\xa4=|F\x17\xaeH\x8dc_l\xb4\xd18\xd5\xe7`\x89\x03\x1c\x01u\xfa2\x1e\x7f\xf7'\xea\x06T\x01uG5E\xdb\x99\x113\x16O\x03\x89\xaa\xac[V\xe6/3\xbd\xc9\xd6\x83\xf2+\x92\xac\xb6X\x92\xf5\x94\x14\xeb\xe1e\x91\x97^]&\xce\xb6\xf0s'W/\x99Z=2\xb1zrZu=\x85\xba\xbds\xee\xa4\xeaeS\xaa\xc7$T/\x9bN=\"\x99zV*u\x956\xdd\xc6/\x98H=/\x8d\xba4n[\xf8\xb9\x93\xa8G\xa7P7\xd6Tl2\xe7)\x97\xf3\x96D\xce\x98\xc7Y\x11\xe6q\xf6\x9fW\xe1}_PV\x88\x14\xe6q\x8e \x8c\xb2\xc1P\x92\xc3\xa2r\x82\xa20\x8fs\xc1P\xa8\x94@\xa8\xa40(\xcc\xe3\xbc5\xf8)#\xf4\xa9H\xe0Sz\xd8\x13\xe6q\xde\x12\xee\x94\x12\xecT8\xd4\x89F\x05:\x15\x0cs\x8a\x0dr\xa2\xa9!N\x98\xc7\x19J\x046a\x1e\xe7@\xcb\n\x062\xc5\x871\x15\x0db\xca a\xc2<\xce\xae\xc7\x82aK AK1\x19\x80S\x02\x960\x8fsN*\xe4P\x80\x12\xe6qN\x08J\x8a\x0cI\x8a H\x8a\x0bG\xc2<\xce\x9cr\x02\x90\x12\xc2\x8f0\x8fs\x81p\xa3`\xb0Qn\xa8\x91\xf3\xe4\xc4<\xce+\xc2<\xce\x19!E\xe1\x80\xa2\xd4p\xa2\x84`\xa2\xe4P\xa2\xb4@\"\xcc\xe3\x9c\x16:\x84y\x9c'z\x8cp\xa1\x12s.!T(>P\xe8\xef5\x8f\xb3\x99\xc0\xd2\xd5f\xf3){e\xe9\xc7nsj\n\xcfC3\xd2~h\xea\xaa\xbdj\xba\x9b\xfe\xe9_\x04 \xd8\x93\xa3\xf3\xdf\xa67\xdet7\xfd\x94\x94\x93\xf5rf\xb6\xcc\xcc)\xb8\xaa~\x1a\xf97M~\x9f\xa9.\x7f\xa2\xb97Y\x17\xd77\x03\xa3)\xec\x11c\xf0\x97b\x91I|m\x92\x99\xc9\xd96\x08:S\x0f\xa4\xda\xb9\x02K\xbcl!\xc8\x9a\x91\xb4i{0|\x02\x14t]\x8dM\x0d\xd7m_\x7f\xe0\xfdv?\x1fj\x13D\xb5\x8b\x11\xffZ!\xc0e\x04\xfcIPu:}\xdcO\xc6\xd8$\x05\xbdTyN\xa1\xaeN\xf4\x02\xbe\xa9\xcbA\xdc\xf4\xca\xdf\xe4\xa8\xa6F5Q6\x8f}\x8ep\xf7\x85X\x0cl\xdbs\xbc\xc3\xfe\xf4\x91\x9a7gh\xffH\x1f\\\xca\xe3f\xe8\x8fj\x1f\x87\xfeLOg:\xff6\xef\x1d\x0en\xbc\xfc\xc9G\xef\xc3\x9c8\xfc\xe3|\xaf:\x9d>\xd2\x97\xf8\xfa\x90\xd8\x8d\x8f\xf4Ir\xdb\xecHW\x93\x8f\xf4\xb9i\xfe\xcd\xea\x8f\xe7Xb;p?\x92@>|(\xd6>C\xa9\x13;\x99q\x8b\x98\xd4$nR\x94;\x898slj\xccm\xd5\x8e\xc4\x1b;\xb1)p\xc0{\x84\xc5\x1c^q\xe5\x06\x04E 8E-N*@\xe0\xe5\xa3G\x82\xa4\x97!\x10\x14W\x8c@P\x84\xf4!r\x04@\xb2\xf3\x97'\x98\x9f\x8b\x18\x01H\x1c\x05\xc8@\xe3\x06\x19R+\x02\xc2w=\x10\x14\x8d\xce\x0dr\x9a\xd1\xbb!\x94\xae\xa2T\xb4n\x90\xe1\xa9\xa2\x87h\xd4\xae\"\x9bw'\x19\xbd\xab(\x1e\xc5\x1bd\xa5\xa3|\x13\xd0\xbc\x8a6\xa2z\x15\xa5\xa1{\x83\xec$\xf20 \xe5\xab(\x15\xed\x1bdx\xd3\x0fI\xa8_EI\xe8\xdf \xb7\x9cR\x08\x82\xa2\xd0\xc0A.&Z8\x06\x15\xac\xa8\x18:xf\xb8\x05%\xac(\x03-\xac\xa8\x08jXQ\x11\x8bBVD\x93\xd0\xc8Av\x13Z9\x01\x95\xac\xa8\x18:YQ*J9\xc80\xa5\x10\x83\xa0\xcd\xa8eE\x81\xa2\x0c\x82\x12\xf4\xdb\xe0En\xa6TU8 \xdd\x1c\xe4F\x15\xfa9\x02\xe5\xac(\xa5\xc5\x89\xa8g//S\xe5\x8e@?+JBA{9\x05\xcb<\x08\xcaAJ\x87\xe7gT\xc9\x07A9\xc8\xe9\x10C\x1aU\xfeAP\x19$\xb5\xa2HP\xb0\xa2 \xb2ZQ\x02\xc2ZQ \xd78\xa7\x1c\xc4\xb5\xa2\x18\xfe\xde|\xc5\xc5\x90\xd8\x8a\xf2\x84\x1f\x8f\xccV\x14\xd3\xf3\x0c\xa4\xb6\xa2,\xc4\xb6\"o\"{Na\x04\xb7\xa2\x92HnE%\x10\xdd\x8a\x02\xb3\xab\x1c\xc2[Q$\xd2[Q\x0c\xe2[{6\x02\xf9\xad(r\xf4\xd2\x91\xe0\x8a\xe2\x11\xe1\x8a|\x05*\x04\x15A\x88+JB\x8a+\xcaA\x8c+J@\x8e+\x8a\x19\xa5\x88\x05\x1b\xc7'\x1eY\xae\xa8\x14\xc2\\QT3\x03k6\x1dy\xeeew\xfd\x10F\xa0+\xcaA\xa2{\x19*\xf4\x87\xbf\xf4\x85\xa0\x1cd\xba\x97!U\xe6VO\x19\x0cA\xa9Hu/\xb3\x19\xc5\x1ea\xe9\n#\xd7\x15\xf9\xb2\xf3\x0b\xf2\x15\xc9\x10\x94\x8eh\xf7\xb2\x0b\x94\xd1P\x0f\xc5\xa3\xde\x03\xf3CC\xc4{Jj\x08JE\xc1{\x99\xfd\xfc\xd3w\x97\x11hxE\xa9\xa8xE \xe8xE\xc9(\xf9\xc5\x8b\x91hyE!u#X\xf6@P,\xa29\x16E?\xf1ME\xd3O/\xa6\xa0\xea\x15\x05\x84\x91\x83\xb2\xf72\x8c(\xd3!(\x07u\x1f\\L\xe1\x92\x1d\x82\xd2Q\xf8\xc1M\x11'\xef\x94I\xb3\xb5\xe0\x88\xa0\x98\xb2#\x82\xe2\x8a\x8f\x08z\x84\xee\x96*G\"(\xbe(\x89 \xbd\xa5\xc5:4=\xbb\xa9L\x89\xa0\x88\x1c\xe7\xc5\x91C\xc1\xf2%\x82\"'\x03$\xca\x0f\n\x164\x11\x14%\xc3\x98\xe2&\x82\x1e\xb1\xdf\x89\xe5N\x82\xfc\xbe \xf7\x97\xf1EO\x04\x05K\x9f\x08\xca\x95\xc2\xd62(\x82\xe2\x8b\xa1\x08\xcamm\xc4\x98\x15+\x8fb\xb2\x0b\x15I\x11\x14,\x95\"(\xb7\xfb\xd9eS\x04\xc5\x15O\x11\x14\xd9\xc4\xd8\xe8\x85\x94QL/\xaa\xe2eW\xd1M\xa5U\x04\xc5\x14X\x11\x94(\xb8P\x18\x10d\x0b/\xb6\xf0\x8a\x97\x9d\xdc\xd3s\xca\xaf\x08\n\x15a\x11d\xf4p{)\x16A\x85\x8f\xe1\xf8\xe2,\x82RF\x0d\xd2\x0b\xb5\x04\xf9 &\x9b\xca\xb5\x08\x8a\x94#$\xc8\x12\xa2\n\xb8\x08\x8a\\P\x8aR\xc5\x0e\xd1%]\xa2Xie_\xe2ju\xcc\x14W\xdeE\xd0G\x10JJ\xc1\x97(\x86b\x17\x0e\x94}\x89\xe2\x94&\xd3\xe8\x021\x82>\x92h\xa3J\xc6DqSee\xc2\x85c\xa2\xd8\xc5 7\xaa\xc4\x8c\xa0\x04\x81\xa6\x9c\x8a\x90!\xfc\xd4\xd23A\x86w\xd5\xe8+@#(\xba\x0c\x8d\xa0Hy\xa5\xf4\xbd`a\x9a\x89aZy\x1aA\xd1Ej\x04%\x97\xaa\x11\x14)\xc0X\xdd5TyE\xd0\x98^\xc2\xc6\xcb\x8f[U\xd3\n\xd9\x08\x8a(g#\x88\x06b\xd3\x04y#\xd4\x04E\xca;:\xe9B\xac\xc8\x8b\x95\xbc\x11\x94R\xf8FP\xec\x12\xcc+\x82\xe3d7\x97B\xf1F\x8e\xa4\x17\xc4q\xb2\x12\x85rb\xcb\xe2\x08J.\x8e\xe3\xfe\xfa\\4\xc7_\"GPV\xa1\x1c\x7f\xd7\xa3\xca\xe5\x08J-\x9a\xe3d\xa4m\xd5\x11\xa5s\x04e\x15\xd0q\xb7\xa0\x99\xf0-\xd4_FGP^1\x1dog\xc8\xceSRGP^a\x9d\xd5j\xe5\xe9\x9b\xcc\x0cISQ\x9dfL\xa8\xab\xb3\xc8\xda\xf4\xd3\xdb\x97\xcb\xb6c\x89\x1d\xf3\xf4\xc5\x12;\x16\x8a=[R\x83z\xc5\x04\xc6\x12;\x11\xc1\xba6\xa0[r\x90n|p.\x96\xd8Q\x94\x1at\xeb\xb5\xe4\xa7\x04\xdb&\x05\xd9b\x89\x9d\xad\xc1\xb3\x19A\xb3E\x82e\xe3\x83d\xb1\xc4N\x89 \xd8\x94\xe0\xd7\xe8\xa0W,\xb1cR|0k\xb1 \xd6\xd4\xe0U,\xb1cPR\x10\xaa\xb8\xc3a\x89\x1d,\xb1S*042&1\x18\x08\x9a\x10\x00\x1aS\x9c%%\xe0\x13K\xec\xe4T\xa9 \x05lb\x89\x9d\x84\x00\xcc\xc8\xc0\xcb\x98\x80\xcb\xb8@K,\xb1\xc3)'`2!P\x12K\xec$\x04:b\x89\x9d\x05\xa5\x06.b\x89\x1d,\xb13Sr\xf0`Z\xd0 \x96\xd8I\x0b\xfe\xc3\x12;\x13a\x89\x1dI\xaa\\\xcd\n\x7fl\xdc\xb0M\xfc\xf2\x8cD\x96\xbfO\x85i\xe8\xbat\x89\xbe-m,T\x03\x0e\xacKj\x01\x1b.\x07\xf9\x86\xad\\\xcd\xdbINF\xa9\x1a\xc9\xc6\x02\xda5\x8a\xd3\xbc\x13\x8fq&\xea\x1a\xfe\xc9\xd6\xa6\xd1E\xa1\x93\xd1\x18\xf1\x90\\\x8d\xdc\xff\xc1\x15\xabIH\ne\"\x00=\xebs\xc8\xd9.\x08z c\xe0\xeaA[\x97\xd1\x99\x05\xae\\\x82\xc7\x04\xc6\\.;\x03\x8ac;V\x8f\xd5\xbd\x96F\xde\xd7*_\xf1\x840l\xcbh\xb8\xf9Q\xd5p\x85\xb2\x9c0\x15Z\x8e~W\xd3IG\x07\xaf\xc7\xb7h\xbb\x9dvC\xad)Zo@\xfd\xc45\xcd\x86\x1bd\xa7\xc1pp\xd2\x10&\x1cQ\xa0\xfd\xfb\x8b\x13\x19\xe0T5\xc3S:4\xbd5DI\xabg\xf5\x89Hf\xdd\"%\xa0y\x98\xb5mV=\xe3\xc4=\x9d\xc806\xa35\xe4\x87 \xf6jG\xba\xde\x11\xb7\x9b\xb6\xb8fn\x06\x14\x98\xfd\xcc\xfd\x1bu\xdft\xc0\xff\xdet\x12g\xb9\xe6xl\xba\xabE\x0cAf\xdbB\xe8;\xcb\x97&\xf4\xfc\xa1j\xba'w\xcd\x8eL\x10\xd1`\xc8\x82\x00\x9f1\xf5\xa8Z\xa0\xc3\x050\x1c\x04XmFl\x19|\"P=\xe2L \xa2y$~G<\xcdq;&/\x84\xed l'\xe8\x1e\x8a\xdb\xa9\x10\xb6\x83\xb0\x1d\xd7\x93\x08\xdb\xe1\x84\xb0\x9d5!l\x07a;.B\xd8\x0e\xc2v\x10\xb6\x83\xb0\x1d\x84\xed(B\xd8\x0e\xc2v\x96\x94&<\x84\xed l\x07a;\x08\xdbA\xd8\x8eI\x08\xdbA\xd8\x0e\xc2v\x96\x84\xb0\x1d\xfb\x0b\x08\xdbA\xd8\xce\xaf\x00\xdbI\x86\xb7\xf4}\xeb\x01\xb7\xf4}k\xc0Z\xd8\xe3\x06R\xc7\x8af\xe9\xa7jl\x9f.\x96e\xea\xb7N&\x92\x85\xf5U\xf7L\xaf:?\x93\xd7\x05\xe7w\xc0u=\xbd\x12I\x1f\xae|\xa9\x9e\x03\xd6\x9e-\x1c\x8c^\x0b\xdfq\xdf\xb7\xd1\x9ec&\x95\x9f\xde\xbeDO1\xa0\xa78h\x91\x8c1\xea\x01z\x8a\xd1S\xec|\x12=\xc5\x9c\xd0S\xbc&\xf4\x14\xa3\xa7\xd8E\xe8)FO1z\x8a\xd1S\x8c\x9ebE\xe8)FO\xf1\x92\xd2\x84\x87\x9eb\xf4\x14\xa3\xa7\x18=\xc5\xe8)6 =\xc5\xe8)FO\xf1\x92\xd0Sl\x7f\x01=\xc5\xe8)\xfe\x1b\xf0\x14/c\xd8m\xfe\xe2\xff\x98C\xce\x95\xd7\xb8j[-\xca\\\xd9\x82i-J>\xec\x9b[^\xf0\xa3\xa2\xe7\xc9\xb0\xe1\xba\xcd\xff\xe9@:\xa8\xab\xb6%;QU\xb9\xea\x84\x85F\xa4\x12\xb8\x10\xd65\x91[BX\\\xea\xbe\x1b\xcf\xec\xcc\x83C\xb3?\xc8Z\x00\x13?\xbd\xa4\xc0\xbe\x1aE\xe5\x12\xa6#\xece\xbc\xb1\xdcm\x9b\x11\x9aNVkh\x1f`$\xd4\xea\xfc\x9e\xfb.\xff\xfa\xc9\xfa\xbe}\xd9\x08\xe8\xaf\xe0V\x14b\xec\x87\xabj\xb7\x1b\xc8\xe8x*\xca\x8c\x15c \x02\xcb'\x0d?\xbf\xfamYY\xeas\xb7yT\xf1\xfb\x9fpM\xea\x03\x90\xae\xeew\xdc\x02\xce7)\xfba\xccf'\xe9\xc6\xf3xu:_\x7f \xce\x92\xaf\x01\xe9B\x84\x84!\xc2y\x0bq\x12\x86\x04)C\x86#\xd7\xcb\xccn8\xf3\xdc\xbdJ;t!\xec\xd4\x85\x0c\xc7\xae\xbf\x03\x15=D;w\xa1\x94\x83\x172\x9d\xbc^\x86L\xb8\xd1\x8e^\xd8\xee\xec\x85d\x87\xaf\x97\x95tD%9}\xa1\xb4\xe3\x17\x12\x9d\xbf\x90\xea\x00\xf6\xcf\xec\xc99\x1c\xeb\x04\x86\xd2\x8e`\x88s\x06CI\x870lv\nC\x9ec\x18J9\x87!\xcbA\xec_\x0eZ\xa1\xa5@\x17\x1e\xc1Q\x0c\x8f\xe8,\x86\xc7q\x18C\xa2\xd3\x18\xf2\x1c\xc7\xa1-8\xcey\x0ce\x1d\xc8\x90\xe0D\x86\x1cG\xb2\x97\x9bp2'8\x93\xa1\xa4C\x192\x9c\xca\x11\xfb\xf9o\"\x1c\xcbP\xc2\xb9\x0c!\x073\xc4\xeb\x8e\x11\x8efHT1\x93\x1d\xce^n\xdc\x19\x1d\xe1t\x86\x84V\x16t>C\x92\x03\x1aJ;\xa1!\xd3\x11\xed\x9fWc\xd8\x19\x0d\xf9\x0ei'?\xf6\xc5\x90S\x1a\x8a9\xa6!\xde\xbf\n1\x0ejHsRC\xc8o\x92\xe9\xac\x86\x08\xbe\x1e\xdbl!\xc75d 7\xde\x81\x0d\x11\xbd\xccpdC\xae3\x1b\xfc\xfe\xba(\xa76\x14vlC!\xe76\xf8gL9'7\xc4;\xba!\xd2\xd9\x0d\xd1\x0eo\x88\x9bQ\xe9\x8eoHr~\x83\xd7\x01\x0e\xa5\x9c\xe0\x90\xea\x08\x87Lg8\xa49\xc4!b\x14\x02\x0b-\xfc~\xbc\x83\x1c\n:\xc9!\xa6i\x9euV\xcea\x0e1Ns\xd8\xe08w2d\x0f\xfa\x9c\xe7P\xda\x81\x0eA':\xe4:\xd2\x9d\xdc\x84\xe9\xc1o\x85 ;\xd4\xc1\xeb\xf7\x03\xafc\x1d\xb2\x9c\xebNV^\xa7;\xe4:\xde\x9d\xdc\x84\x02\xed+\xea]\xcc\x01\x0fQNx\xc8p\xc4C\x9a3\x1er\x1c\xf2\x90\xec\x94\x87\xc0Q\x1ep\x94B\x82\xb34\xd6A\x0f9NzHu\xd4\x83\xbf\xe39\x0e{'3\xcd\x1d\x1e\xbbd\xe2\x1c\xf7\xde\x05\xd1\xed\xfd\xce{(\xeb\xc0\x87\x90\x13\x1f\xfc\x8e|\xe7;\xb9\x0e~(8w\x13\x1c\xfd\x90\xe4\xec\x07\xa7\xf6\xf2\x7f\xab\xa6%;\xbf\xcf\xf1\xba\xef[\xe2t\x08\xc4\x1a?\xc4\x97\xa4\x87u\x07w\x07\"M`\x9ak\x95\xcf\xf0kB:\xf9\xb4{\x84\x87\xfe8\xd5\xc8\xe7\xb0\x01\xe1\xc4\xb0\xe6+\x07\xf9\x88\xab\x97\xb1=\x90\x1f\x92\xd9\xbe\xe7F\x8b\xdf\x9d\xaf}!\xda\xf9t\xcaH/\xff\x8b;\xad\xec\xafD\x18\xd1Hwv\xa4_\x07\x8e\xe3\xf8\xf6\xc7\x1f^]\xbd{\xff\xe2\xfd\xcf\xef\xae~\xfe\xe1\xdd\xdb\xd7/\xdf\xfc\xe1\xcd\xebW\xd1o\xb0\x7f%>\xfe\xe6\x87?F>\xefe\xae\x02\xc6\x93\xba\xe0\x8bx\x8f\x92g\xec$\x10\x1f\x92\xd3X\xea\x1b<7;\xf7\x9e\xf0\xbf}\xd1tu\xeb>\xf8G\xd2\xde<\x99\xcb\x0d8&\xc1\x94\xf1\xfdj\x0f\x0d}\xb8\xe2w\x95\x9a\x96na`L\x96\x9f\xb7\xf6\x84\x1c\xab\xa6\x0dB\x1f\x14+\x90\xac\xdc}v\xa6\xce\x98)\xa7\xab\x92\xad:\x08\x84?o\xea\x84\xfc\xab\xbdUs9!Q\x0bk\xc3\xd6\x1e\xae\x1e\x13?B\xcbf\xa9\xd1\xb9\x80F\xabm\xc4\xbd\xad\xaa\x88\x97\x07\"%t}\xee\xb0^\xaaw\xfbs\xe7\xaf\x95\x14W\xc3)I@\xbb\x8a\x92'\x8cW1!\x89\xf2On\x11\x1d\x9bN\x94\x88\xf2MeS\x91\xa4=\x07,\xb4\x84\x92\x90\x80\xe6\xc22Q\x87\xe6\xfc\xb8q0j?\xaf+\x94-\xa9\xd0\x91\xb7(\x9e\xe3]\x98\xb1\xa3\x02\x16\xbeFG9\xa0\xa8j\xc3\xf5x\x04 \x06\x02(2\x81\x1b\xea\x81TT\xdcw#\x8e\xbd(yA\xa4\xcc@\xb6)d\xef\x8fX\x10\x8aRD\x0b\xaaPQ\xb3\x9a6\xfcgQ\xaah\xe7.&5\xd3\xac\x0d^\x00\x0f?\xb8\xe1\xa0<{U\xa7\x99\x8e\xd5\xbd\xa7\xa8\xd3L\x8f(\x00\xd5\x04c^\xa9Rj\x0b\x89\x04\x99\x89\xdd\xd1,\xf8Dn\xc9 E\x99,\x1b\x81\"\xfa\x14D\xa4\xb5\xc4*\xa9]\xd5x\xd2<(j:\xb6\xdaF\xb2\x02_k\x92\x16B\n\xb2\n\x0b\xf1|b\xa7\x83\xf7\xa4\x81x\xc1\xc5\x9e8\x90(`\xad\x95j\x1dr\x0f\x03\xff\xc1\xb6*\xef\x02\xe0I1R;\xbb\\\x8eMw\xc5.\xaaW\xf3Eu\xc3)\x1c\xdbO\xcbWW\xe6\x96\xcfG~\x83\x86\x1d\xa9\xdbj\xf0\xd8\x88T\x0d6\xf9\xb4b\xe8M\xf9\xd1t5a\xa7\xe5x\xec\xc7'\xe3\xee\x03|y\xf9\xdb\xdfY\x1f\x9f\x15\x81\xbe\xbb:\xf4\xed\xeej 7Wu\x7f\xee\x1e[\x9f\x0bU\xa8\x13\xc6y\x1e\xa4r\xea\xc7\x866\xb7D\x04\xb5\xe8\xaa\xd8\xe7\xe3\xdc\x83\xc9\xea\xe6a\xd8\x9fN\xc2\xe3G\xee)\x19\x98\x8a+\xc2m\xecSl\x16N\xb3\x0bX.\xec1&\x82\x9c\x91&\x82\"\xe49K\xf4\xbcM\xa4m3r\x80\xf6,\xb4f7^\x00\xa9\xea\xc3:\x84\x81\xe9\x08na\xce,\xfa\xe5\xa8X\xde\x89Y:S\xcc\x91v\xa3\x9fx^\x00\xed\xf7\xc2\xd6\xca=\\\xdc;\xd5\xd3\xca\xeeH\x14\xc1Q\n \xe7\xff\xda\xe7#7\xc1*\xc3\x90\x8c\\n\x06 \xf7bo\x91\xd5\x0d{^\xc3\xd1\xa1W\xbek\xab\xf1\xc0\x84\xa1rQ\xb9\xa2\x11*\xb6\xe2\xc5\xa1 \xfd\xa6\xc6g.\x04\x86\x99CjE\x90\x96\x95K]\xb5\xf5\xb9\x9d\xfc\x857gv\xf9\xb7\x7f\xf0\xdc\xcd\x9b\xc6\xc8e\xd7\x9f)\x9b\x93\x83P\x03\xfb[\xa2\x17f\xbc\x94\x91i\xac\xab\xf6\x0e\x0c\xa6\xad\xd0\xfeUsB\\,N\xbffdj\xe8\xae\xa1\n\xcaYi;\x9b\x95\xdf\xdd\xa1\x1f\xb5\x1a\xa0\xf6\x8f\xea\xc3\xd8\x8c\x06\xa2[\x9b\x11\xbcks\x17\xac\x9cv\xcd\x84\x0d\x10\x1e\x1e\x0eK\xb6\x7f\xd5\x18\xbfK\xf8\x8f\x9e\x8b\xf5\xd4\xdf\x11\xa1\x10]\x93i\xb8\xc8\x8e\xfb\xfb\x9d\xd3V\xb9\x02x\x17\xec_;\x9e[\xda\x9c\xdaFmc\xfa\xb7W/\x18\xabN\x8b[\x9c\xb1\x9b\xb2\xa4\xb1\x88o\xdc\x81\xbb\x82\xee\x1cH\xb8\xde\xc9\x8c\xcfh\x11\x87F\xba\xd9\xf9g9\xefm1\x81\x82\xbcW\x8e@\xfeYrO\xaf\x9c\xe1g\xc1\xad6\x88\xe75\xba\xfa_\xae\x8dV\xb5B\x9d\xfa\xec?%^\xbf\x1aGav~[\xed\xc9O\xe4\x973\x19\xe9\xa5\xf8\xbb\x83\xd9\\_\x9c\xb1e\x82$p\xecG\n\x84\xa3\xde9\\\xfe\x12\xdeP\xcd\xe1y\xa2\x0f\xd0\xb8\x90\xa2F\xbe\xb2c?\x10\xb5g\xd9v6>W7\n\xd3sf\x85N,a\xb2o\x94\xed~\xae\x01\xac\xb6Y-\xbf\x9c\xab\xbf\xba\xa0\xb9bs%\x16\xa0\xe3\xf1\xbb\x8aif\xf4\x02\x1a:\xaa`\x95\x91\xef\xa2\xc2\xe3\xc7Mdw\xcdh\xce\x0fWGx\x1c\xf2\x1cL\x1b\x9b\x86x\x15~\xabhNM<\xfd\x013\x13/\xfe\x8a\x99\x89\xe3\xf4-\xc8\x08h\x15\x93\x153\x13G\x04\xaf\xd2\x12\x81\xab9A\xab\x98\x99\xb8`\x80jJpjR`*f&\xde\x1a\x84\x9a\x11\x80Z$\xf84=\xf0\x143\x13o 4M 2\xcd\x080\xc5\xcc\xc4\x80\x99\x89c\x83G13q\xa0e\x05\x83C\xe3\x03C\x8b\x06\x85\xe6\x04\x84bfb\xd7c\xc1\xc0\xcf\x84\xa0\xcf\x98\x9c\xb6)\xc1\x9e\x98\x998'\xb9o(\x98\x133\x13'\x04mF\x06l\xc6\x04k\xc6\x05jbfbN9\xc1\x98 \x81\x98\x98\x99\xb8@\xa0e0\xc827\xc0\xd2yrbf\xe2\x15af\xe2\x8c\xc0\xc8pPdj@dB0dr dZ\x10$f&N\x0bt\xc4\xcc\xc4\x13\xfdCf&\x9e\x11\xc9\xb3\x16\xf5\x84o\xbc\xcf\xd7!w\xc6\x0d[\x06\xea\x91\xae\xban\x85\xa9L\xb8\x82\x99\xd84g>\xcf?,\x00\xbd\xb6\x04\xc4\xc0\x0f\x94\xe7\xe2]\xed\xb7\x81\xfcrn\x06\xb2{\x0e7Ukx3\xadf\x0c\xd5\xe4\xd9\x8f\x7f\xf9\x81<\xb8\x9a\xbe\xf0\x8cKWx%w\xfd\x81\xd0\xf3\xd0\x89\x8c\xb2\xc2;+\xbd\x91\x93\xdf\x9c\xdb\x1b\xf7\x0b\xc3\x1c\xef\x01\xebh\xc8\x17\xfe#;\xa2\xfb\x8e\xdf\xfd\xfb\x9b\x9b\x91\xf0\x80\x17\xb3\xb9\xa0\xf9K\xb4$\xc8PFZ\x0eC\x8fE\x88\xa2}.9.\x8c,\xb23\\\x94\xdd\xf9H\x86\xa6V\xbf\xf1\x0dB\xc2M\x84\x95\xeb@:%\xf8s7Y;\x17*\xf8\x1b\xce\xad%\xe38\x8bP\x98\xe2\xce#\x13\xf5\x07\x92(O\x93\xfd#\x0bw\x81,\xb0\x88\xb7m\x8eM\xact\xf9\xb3\n\xb2\xe1\x02\x1c\x08K\xb8>\x83%\x96\xe5\xdc.<\xe4\xc2\xc4\xa4\xff\xf4\xe6\x06ZrC\x15@C\"6\x94\x9a\xcb\x8d\xf8b\x81\x88\x8f09_?\x08p^u:\xfd\x8aR\xd4a\x13\xf3\xfb>Yjo0\x89\xf2\x19\xda\x03\x1d\xce\x04\xb8\x8d\xb8\xdb55G\xd5Iw\x9e\x94 \x7fPN$\x9d]\xd3\xd5\xedy\xb7Pb+\xf1\x95\xc9\x9f\xba\x181\xee\x9d\xd7\xcc\xfcl\xdb4PH\x06\xb3\x9f\xdf\x8c\x8b\xd1Zt\x81\xeb\xfd\x03\x19%\x8e\x82/\xafy=\xb2%w)WS\xb3\xef\xfa%\xa2W\xadF\xf3\x13B2[\x07v\x19\xd8n\x19\xc0\x81\xdc\x92\xc1x\xd57x\xf2\xe9\xe5\xc05\x1a\xecf \xf6\x95`\xf0a\xdf \x12#:\xec\xc8\xb0\xbccXq\xca_\x17\x95F~]\x80\xa7\x7f\x99\xfe\x9b\xe7U\xff\xab`\xe3-\x140\xd5 \xd0\xa0\x8e\xddM\xcf\xa7\x9e8\x9b\xe7?\xc8\xbc\xecj\xf0\xed\xd9\xf7?S}\xfe\xd4\x93\xef\xbb\x803Y \xbe\xb8\x14\xfaAoK\x8c\xbb\xa2t\xf2\xfc\xf4\xd4\xf9q\x89\xf3\xbd\xd2\x84\xa0D!\x02U\x14!Q\x88\x96*\xe4b\x8b<\xfc\x92R\xe5\x17\xc5\x17\x05\x11F\xa51F\xf1(\xa3B8\xa3<\xa4\x91\x87]br\xfc\x8dh\xa3\xd2x\xa3D\xc4Qa\xccQ\x1a\xea(\x11w\xe4\x9b\xc3\x13\")\x16yT\x18{\x14\x85>*\x88?\xda\x8a@\xca\xc2 \x15B!\xe5\xe0\x90<\xcc\xa2\xd3\xdf?\x02\x16\xe9\xf1\xd0H\x8f\x82GJC$\x15\xc7$\xc5\xa2\x92\x8a\xe2\x92\xe2\x91I\x19\xd8$\x0f\xaf\x8cT\xf7\xc5\xf0I\xe9\x08\xa5\xe0\x1e\x1d\x97\xe4~3J)\x98\xe0>J\xd3\x8b\xc0*\xa5\xa8\x83\xc9x%\x0f\xaf\xf8\xb4\xf6q\xed+\x88ZJ\xc1-\x15F.\xe5a\x97|3(*\x95}&~\xc9\xc1\x8dF\xa5\xb1/\x83a\x8a\x06\xe2D\xe0\x98\x92\x90L\xa1\\\xc69h\xa6\x10O\xa7\xe3\xae\x10\xa6)]\x98\xf1\xb8\xa6P\xdf2\xb0M\x99\xe8&\x7f\xfe\xec0\xc2\xa9,\xc6\xa9\x0c\xca\xc9\xe7\xd4-\x86t\x8a\xc6:\xc5\xa1\x9db\xf1N\x113'\x1d\xf3\x94\x82z\xf2'\xa4/\x82|J\xc4>\xe5\xa1\x9f\x92\xf0O!\xa9\xfb\x93\xd0\x07\xde\x8d\xc7A\x95CB\x05\x1b\xe5\\A\xe5\xf0P\x11\x88\xa8|L\x94\x83\x1d\x0d\xa6\x9c/\x8a\x8b\n!\xa32\xb1Q\x0e^\xe1T\xf3a|\x94?\xcd\xbc/\xc9|i\x94Tq\x9c\x94\x1b)U\x12+\x15\x83\x96J\xc7K%!\xa620S\xa9\xa8\xa9@\xe2x\x7f\xebbq,\xb1\xd8\xa9\x0c\xf4T\"~\xca\xd3\xdd\x1c\x0c\x95\x83UD\xaa\xf8\x1c\x1c\x95g\xca\x87\xd3\xc4\x17\xc4R\x05S\xc4?\x06\x9e\xaa\xd4\\L\xc0T\xa5\xa0\xaa\xec\x9a\x83/\xfd;\xb5\xfa\xc8u\x8a3\x11\xe4$~\xe7 \xde\x1d\xfcb\xd3\xbe\xfb\x92\xbe\xc7\xb5<+\xe1{r\xba\xf7\xa0I\xc9\x97\xea=5\xd1{R\x9a\xf7\xb4$\xef\xd1)\xde3\x12\xbc\xfb\xd2\xbb\x07\xe5\x177\xd8[\x13\xbb\xc7\xa4u\x8fK\xea^\xa8C\xa5\xd2\xb9\xc7's\xd7\xdb\xb5\xa9\xe1\xd3S\x9b\xd2\xb8\x07\xb2\xb4\xd2\xed\xc8\x80`\xfa\xf6\xe0PB\xb4T\xa0`\xe2\xf6`\xfe\xdap\xd2\xf6\xc2=+\x9c\xae=:Y{0U{z?\xb7\xa6i\x8fO\xd2\x9e\xde6\xef\x18\x14K\xcf\x1e\x9b\x9c=\x98\x9a=\xbd\x83\xd9i\xd9\xe3\x92\xb2\x07\x1b\x14N\xe0\x197\x1e%\x93\xb1oI\xc5\x1e\x93\x88=Z(\xfe\x94\xb8\xa9\x82II\xc0\x1esJ@t\xfa\xf5P\xf2u\xa3'\xdbS\xaf\x178\xa8\xe2\x93\xae\xc7\x8d\x02\xa4'\\\x17I\xd5=\xfc6\xa5[\x0f\xca\x08\xa2\xe4\x04Q\x89\xd6\x83\x13^Q\xbc0!:\xc5\xba\x9eB=\xc00:\x89x\\z\xf5G\xeavJbu\xb1\x97\x05\x18\x96H\xab\x9e\x94T\xfd\x11\x05\x13\x95N}J\x97\x1e`\x18L\xa6\x1e\x14MT\xaa\xf4(q\xc4\x9d \x90$\xb4\xc2)\xd2= \xd2\xa3\xd3\xa3\x07e\x11\xd7\xbb\x82\x89\xd1\x93\xd3\xa2G'EON\x89\x1e\x14NX\x9b\n\xe5A\x1d\xcb\xa6BOK\x84\x1e\x91\x06]\x88\xc0\x9d\x04\xdd\x9b\x02=(\xbf\"\xa9d\x8b\xa5>OI|\x1e^\x16yI\xcfe:k\x0b?w\xca\xf3\x92 \xcf#\xd3\x9d'';\xd7\x13\x9b\xdb;\xe7Nu^6\xd1yL\x9a\xf3\xb2I\xce#R\x9cg%8W\xc9\xccm\xfc\x82\xe9\xcd\xf3\x92\x9bK\xe3\xb6\x85\x9f;\xb5ytb\xf3\xb8T\xcb\xc9\x99\x96\x17\xdc0\xd1\xb2 L\xb4\xec?\x99\xc2;\xbc\xa0\xac`(L\xb4\x1c\x13\x02e\x03\x9c$\x07@\xe5\x84?a\xa2\xe5\x82AO)!OI\x01O\x98hyk\x98SF\x90S\x91\x10\xa7\xf4\x00'L\xb4\xbc%\xb0)%\xac\xa9pP\x13\x8d\ni*\x18\xd0\x14\x1b\xceDS\x83\x990\xd12\x94\x08a\xc2D\xcb\x81\x96\x15\x0cY\x8a\x0fX*\x1a\xae\x94\x13\xac\x04\x98h\xd9A\xc1\x00\xa5\x84\xf0\xa4\x98\x14\xbd)\xa1I\x98h9'Wq(\x14 \x13-'\x84\x1fE\x06\x1f\xc5\x84\x1e\xc5\x05\x1ea\xa2eN9\xa1F \x81F\x98h\xb9@`Q0\xac(7\xa8\xc8yrb\xa2\xe5\x15a\xa2\xe5\x8c\xe0\xa1p\xe8Pj\xe0PB\xd8Pr\xd0PZ\xc8\x10&ZN\x0b\x12\xc2D\xcb\x13=F`P\x899\x97\x10\x14\x14\x1f\x12\x14\x93h\xd9L\xe5\xa8\xb12n\xda\xe6S\x06Pi\x95\xb7\x11\xf4t\xcc\xfa\xe6\xd4\xf0\x1a\xc8\xc6\x8e8\xa7\xac\xa4\xc39\x90\x98\xb5`\xc2\xca\xa7\x9a?\\\xb0\xf4&\xaf|\xa5y\xcfU\x1eK\xe5Dv\xa6\xb1T=wY,\x84\x8f\xbdjU0\x14T\x9d\xb0B \xb8\xc9\x85\xb0 \nA\n\xabR\xddw\xe3\x99\x9d\xebph\xf6\x87%\xd0A\xf7\x8b\xef\xabQ\xc0`\x8c\xea\xd2\xe2DiFh: *\x10\xe9\xccTK\xed\x896\xb5\xce\xcb\xe7>\xd9\x9c\x9b\xf3\xa8^Y\xda\xa8\x88\xfe\n\xee\xd4\x10\x8a,\xf8\x01\x88\xf8\x08\x181A\xde\x0c\xa1\x82\"\x8c\x85\x10is\x9b\x9f]|_\xa1\xd8T\xbeO3oh\x1c/\xf7\x0d\xc0\\\xd7\x1f\xbf\xbb\xab\xefo\xe8n\x04\x08\xda\x17T&(\xa7\x8fF\xf4\x98\xd4k'\x10\xa2\xfc\xe3@j\xd2\xdc\xda\xb1\x92+\x86\x1e\xa1\xcd\xbb\xc9\xacJ\x08\x89q\x04\x8f\xc0r\x89`\xbc\x03\xdb\xad\xae\x1f\xdcp3\x80\xaa\xe6\xe0C\x99^\xda}B\xf7w\x9d\xb8\xfc\xf5\x1d\x99\xa7\x95\xf4\x91p/a_7\xd5\x04G\xf2\x8d\xd4\xad\x8e\xf3\xe9o\x18G\xf7w\x03Cz]\xb5UW\x07l\xf9\x05\xb6\x84\xaew\x86\x97B\xec\x9c\x11\xa7\xcdF6\xb1\xb3\xe4e\xdft\x1a\xea\x8fO\x88\x19)\xd6\xf5Gu\xa4\xb1\x01\xac:\xd98\x9f\xa3\xe7\x87\x1f\xdf\xbf~\xceo\x85\x12\x0d6\x1d\x86U\x07o:*\x15\xcf\xc9%3z'\x81\xd4J%\n\xca\xbd\\U4\xdb8):l\x12\xee\xfb}\xcfU\xbe\\\x07\xc7\xbc\x88t,\x17\xfb\xc2m\xd5\xf22\x05\xbd\xbe\xd0\xc8}MN\xa2\x0e\x82\x95]C5g\x89\xbd7r\xa6.Up\xb99H\xd9\x8dp\xec\x07\x02\xe3\xb9\xa1*\xad\xbc\x95Y\xdd\xf2Z\n\xd3\x11\xbd\x14\xc3\xac\xb2\xac\xa7\x9b!\x1eM\xb7\xd15R#\x95\xbd\xbc\xda\xafu\x0eA\xde5\xe6_]\xaa$\x87\x1b@\x15\x05}v\xba\xe1\x8c\xae\xfe\x97k\xb1L\x85A\xe4\xc13\xd5\x08\x81S5\x8e\x02\x0f *\x89\xfcr&#\xbd\x14\x7fw0\x13\xda&\x0d\x14\x11yC\xb5{\x1f\xaf\xd7\xe0\xc9X7{\x7f\xf9\xe4\x90h\x04\xdb\xcc\xe7\xf8\xc8\x8d\xc2\xdc\x80\x82\x9e\xca\x19\xb8\xea[h\xdezW\x7fuA\xeb\x95!\x1c\x8f\xdfU\xbc\x8c\xc0\x054tT\xb8\x90\x91\xa3uE&\x05~\x1f\xb8k\x16a\x1f\xb2#\xab\x19a\xa2<5\xb5=\x08\xf8\xb41zj\xbd\xfd \xf6S\x10b?\xcb\x1c\xf4\x88\xfdD\xec\xa7\x9d\x10\xfb\xc9 \xb1\x9fkB\xec'b?]\x84\xd8O\xc4~\"\xf6\x13\xb1\x9f\x88\xfdT\x84\xd8O\xc4~.)Mx\x88\xfdD\xec'b?\x11\xfb\x89\xd8O\x93\x10\xfb\x89\xd8O\xc4~. \xb1\x9f\xf6\x17\x10\xfb\x89\xd8O\xc4~j?\xa5`?\xad\xa5\xdb?\x90\x07W\x9b\x17\xceQ\xe9\x1f\xaf\xe4\xb6\xafWf\x17.[\xe9\x8e\x9c\x9c\xe9\xdc\xe0\xb8_X\xe6x\xc7\xd8V\x15r\x90\xff\xc8\xce\xe8\xbe\xe3\x97\x7fY\x08\xbf\x1f\xc0l.h\x0e\x93\x02\x95\xeeWV\x1f\xab\xa5\xc7\"D\xd1>\x97\x1c\x17V\x96\xb9\xaa\x7f\x05\xdd\xf9H\x86\xa6V\xbf\xf1\x1dB\xe6=\x12f.Y\xd7_\xb8\xb4's\xe7B\x07\xe7\xc0-h\xd9\xd4\x99D(lq\xe7\x91\x89\xfa\x03I\x94\xa7\xc9\xfe\x91\x85\xbb\x80\x1bX\xc4\xdb6\xc7&V\xba\xfcY\x85\xe3p\xa1\x10\x84)\\\x9f\xc1\x12\xe0rn\x17.rac\xd2\x7fzs\x03-\xb9\xa1\n\xb5!a\x1cJ\xcf\xe5V|\xb1@\xc4G\x98\x9c\xaf\x1fD\x1e\xb8\xeat\xfa\x15\xa5\xa8c)\xe6\xf7}\xb2\xd4\xde`\x12\xe53\xb4\xe7\x1b\x0d\xcfC\xdbt\xbb\xa6\xe6\xa9\xdc\xa4?OJ\x90?('\x92\xce\xae\xe9\xea\xf6\xbc[h\xb1\x95\xf8\xca\xe4P]\x8c\x18w\xcfkv~v\xdc\x18\xd0$\x83\xd9\xcfo\xc6\xc5h-\xba\xc0\x15\xff\x81\x8c\x12H\xc1\x97\xd7\xbc\x1e\xd9\x92\x930Hh\xf6]\xbfL\x0f\xa9V\xa3\xf9 !\x99\xad\x03\xbb\xac b\x19\xc0\x81\xdc\x92\xc1x\xd57x\xf2\xe9\xe5\xc05\x1a\x16g \xf6\x95`\xf0a\xdf 2!\xe1\xb0#\xc3\xf2\x92aM|\xf9uQi~\xaek*\xec\xc2sM\x88\xdb\x9f\n\xfc\xba\xd9\x9fN\xaaZ;%\x03\xbbo\x8b\xac\xfe.\xb7h\xecr\xb2(9\xafY\x1bg,f\xa75\xd6{\xd0\x80\xf07\x0d\xa4%\xb7UG\xe1Hh\xb5\xabh\x15\x01\x11\x96\x07\xa4\x88\xc2\xd0wp\x1dy,\x1f\xca\x01R\xda\x94\xc6\x91\xf6\x03\xfbd\xdbr#\x0b\x8cM\xb7o5U\xe3s\x9bh\xe7\x86\xb1\xff\xb5\xe2\x8c\xd9F;q\x9b\x15Ov\x19\xec\xf8V\xfc\x84\x87\x8e\x90\x1d\xb4\xcdH\x1f\x13\x19i{\xfd\xa9M\xab]<\x88\x88II\x88\x98D\xc4\xe4L\x88\x98D\xc4\xe4L\x88\x98\xa4\x88\x98\xb4\x13\"&\x15!b\x12\x11\x93:!b\x12\x11\x93\x88\x98\x04DL\"b\x92\x13\"&\x111\x89\x88IDLj\x84\x88I\x83\x101\x89\x88I\xf7\x14@\xc4$\"&u\x8aE\xaf!b\x92\x13\"&\x111\x89\x88\xc9mm.\x89\x98\xb4\x81\"%s\x1b*R3\x8eL\xb55-\xee\xdd\xd1\x82\x8f\xd4\xf8\xf3\x03sb\xb4\xc2\xb1\xb9\xcc1\x7f:\x90\x0e\xea\xaam\xc9\x0en\x86\xfe\x08U'Ll\x02\x97p!\xcc\xa3B\xe2\xc2dV\xf7\xddxfJ\x0b\x1c\x9a\xfdA\xe6e\x9a\xf8\xf57\xf3\xf2\xdbW\xa3@L\x18\xa5w\xa7\x0cNMW\xf7\xc3@8\xc2B\xcb6i\x807\xbd\x02\x91/|\xe20N6\x0f,MTD\x7f\x05\x9fq$\x184\xcaH\x19c\xe7\x03\xdb73S\xe9\x05\xb2\x05F\xa2H\x8bv-\x11d\x1a\xe6c\xef\x9a\x17~\x1a\x06\xa0\x06 \xa8\xc1I%(4\xb5\x04%\x00Q\xa3FBP,\xba+~\xe4\x04\x95\x05\xa4\xc6AR\x93@\xa9\x192\x8a\x01\xa6&\xcb\xa9\x1c85\x0e\x9e\x9a\x04PM\x10RZ\xb7\x8b\xc1T\xb7\x01U\xa3\xa0\xaa\x8f&\x84X\xd9&2\xafr\xb0Q\x98\x9e-?\xb4\x95ME\x16\\U74`\x90\xab\xbf\xba\xa0\xf5z\x15\x8e\xc7\xef*^\xdc\xe0\x02\x1a:*\x08\x1a\xdb)\xc5d\xde \x00\xcc]3\xae+\x1a\x04\x10\xe7\xde\xab\xb4\x17\x84\xbe\xe0f\x815\nL\xba\xdfz\x81ptI\x08G/s\xedF8:\xc2\xd1\xed\x84ptN\x08G_\x13\xc2\xd1\x11\x8e\xee\"\x84\xa3#\x1c\x1d\xe1\xe8\x08GG8\xba\"\x84\xa3#\x1c}Ii\xc2C8:\xc2\xd1\x11\x8e\x8ept\x84\xa3\x9b\x84pt\x84\xa3#\x1c}I\x08G\xb7\xbf\x80pt\x84\xa3#\x1c]\xfb)\x05\xdam-<\xff\x81<\xb8\xda\xbcp\xabK?z%\xb7}\xbd\xae\xbcp\xedJw\xe4\xe4t\xe7\x06\xc7\xfd\xc22\xc7;\xc6\xb6\xaa\x90#\xfdGvF\xf7\x1d\xbf\xfc\xcb2\xfe\xfd\x00fsAs\x98\x14\xa8\xd3\xbf\xb2\xfaX-=\x16!\x8a\xf6\xb9\xe4\xb8\xb0\xb2\xc8\xcepQv\xe7#\x19\x9aZ\xfd\xc6w\x88\xba\xeaX\x7f\x84\x99\xeb@:%\xf8s7\x99;\x17:8\xaf\x11\x0d-\x9b:\x93\x08\x85-\xee<2Q\x7f \x89\xf24\xd9?\xb2p\x17\xb0\x04\x8bx\xdb\xe6\xd8\xc4J\x97?\xab\xf0\x1e.\xb4\x820\x85\xeb3X\x02a\xce\xed\xc2E.lL\xfaOon\xa0%7T\xa1;$\xdcC\xe9\xb9\xdc\x8a/\x16\x88\xf8\x08\x93\xf3\xf5\x03\x90\xaa>@u:\xfd\x8aR\xd41\x17\xf3\xfb>Yjo0\x89\xf2\x19\xda\xf3\x8d\x06\xb8\x91\xb8\xdb5uE\xc9\xe4\xcf\x93\x12\xe4\x0f\xca\x89\xa4\xb3k\xba\xba=\xef\x16Zl%\xbe29T\x17#\xc6\xdd\xf3\x9a\x9d\x9f\x1d7\x06\x84\xc9`\xf6\xf3\x9bq1Z\x8b.p\xc5\x7f \xa3\x04R\xf0\xe55\xafG\xb6\xe4d\xc5uh\xf6]?,\xbc$j5\x9a\x9f\x10\x92\xd9:\xb0\xd7}\xdf\x12\xad\x1c\xbce\x00\x07rK\x06\xe3U\xdf\xe0\xc9\xa7\x97\x03\xd7h\x98\x9d\x81\xd8W\x82\xc1\x87}\x83H\xa4\xdf\xb0#\xc3\xf2\x92\xf1\xae\xe9j\xf2\x1cDx\xd0\x93q\xf7\x01\xbe\xbc\xfc\xed\xd7E\xa5\x11\x8aI\xa2\xf7S8\xd2\x8e\xccH\x94S?\xae\x83\x8c\xde\xdf\xbf\xe2\x8f\x80xR\xee\x13C\xd5\x8d\x15\xb7\xda\xaaq4D\xfb\xb9\xb5\x93\xff\xf2\xb9|\xd6\x88\xd4Q\x1f\xf8L\xf5\xf4c\x04\xe5\xfc?\x03\xb9y\x0e\x9f\xff\xb7\xa7\x9a\x83XJ\xe7\x92\xde_J\xe9\\\xaa\xb6\xa9\xb3\xfa\xf3\xcf\xe6& \x00\xc9 \x04 \xc5\xf9\x8a\x00\x01H\x08@r>\x89\x00$N\x08@Z\x13\x02\x90\x10\x80\xe4\"\x04 !\x00 \x01H\x08@B\x00\x92\"\x04 !\x00iIi\xc2C\x00\x12\x02\x90\x10\x80\x84\x00$\x04 \x99\x84\x00$\x04 !\x00iI\x08@\xb2\xbf\x80\x00$\x04 }b\x00\xa4\xeb~\xa7\x1f}M\xb7\xfa\xc9 \x12*\xe4\xad\xa3\xf7W\xd7\x0f\xd4\x9d\xd4\xcfa\xcc\xf0\x9a1\x0c3\x81\xfa\x80\xc2u\x0c\xd5\x9d\xcdgkys\x95\x1adv\x81\xf2L\x14\x13G\xf9O\xfa0\xd7\x1b\x84wd\xb8mjr\xb9p\xe9*\xd2\x139,\xfed\xf7\x17\xcb\x87\x96\xeel\xf9\x19\x9fC\xfbiul\xba>\xc2\xad\xfd\x82=7\xf9\xb6\xab\x0e\xc4\x0f\x9a\xb0DvK\x95\x91O\x88\x95\xf6|}\x16\xf3}\xf3\x8f\xca\x07>\x8e\x03 \xff\xf6\xc9\xba\xe5?:\x98DA!t\x8c\x04\x7f \x0dV\"\xa4\xbb\xcd\xe9/\xa7@\x0e\xa8\x04}\xfb\xe8\xdb\xb7P\x8c\x19\x16\xd0\xb7\x8f\xbe}\xe7\x93\xe8\xdb\xe7\x84\xbe\xfd5\xa1o\x1f}\xfb.B\xdf>\xfa\xf6\xd1\xb7\x8f\xbe}\xf4\xed+B\xdf>\xfa\xf6\x97\x94&<\xf4\xed\xa3o\x1f}\xfb\xe8\xdbG\xdf\xbeI\xe8\xdbG\xdf>\xfa\xf6\x97\x84\xbe}\xfb\x0b\xe8\xdbG\xdf\xfe\xdf\xb7o?:\x1b\xb8\xf2YrO\xba\xf2\x1ag\xf8\xb5#\xc2\xd3\xc5\xa7D4\xbarq\xbb\xc3\xd3\xf9T\xa3\xbd\x19\xa6^\xcc\x05\xfe7\x14\x9e\xfeq\xd1\x16\x9axJ8\xb2\xcb\xe2-\xd0\xc3\x8d\x1en\x0b\xc5\x18#\x01=\xdc\xe8\xe1v>\x89\x1enN\xe8\xe1^\x13z\xb8\xd1\xc3\xed\"\xf4p\xa3\x87\x1b=\xdc\xe8\xe1F\x0f\xb7\"\xf4p\xa3\x87{Ii\xc2C\x0f7z\xb8\xd1\xc3\x8d\x1en\xf4p\x9b\x84\x1en\xf4p\xa3\x87{I\xe8\xe1\xb6\xbf\x80\x1en\xf4p\xff}{\xb8\x9dn\xa7\x90?\xb5p\xbao\xc3a\x9a\x1f\x9e\xfe\x18\xee\xd2$7\xfe\xd8\x1c\xcfmE}\x01\xea\xef\xe4#\xa0\x9e\x1d\x81\xdc\x93\xfaL\xd9\x8eZ\x99.|v\x88\x8f\xb49V\xfc\x8f\xfbj\x84\xb3\xb0C\x08\x9e\x86S^\xf1\x95\x7f\xfbd\xfd\xf1\xfbj\xbcj\xba\x9b~={\x8c\xe6\xa8\xc7\xd4<`\xff=\x1c\xc56V]\xf7g*\xc51\x15\xdbW\xf2\\\xd51\x80\x90{\xd5\xef\\e\x0d\xb9\xab:Jvn\xd7\xab\xd7\x84\xa7\x0cx\xe7\xa6\xa3\xbf\xfb\xad\xf5\x91\x183\x19\xc0\x1f\xab\xf1O\xbc!J&\xc7\xea\xbe9\x9e\x8fp\xee\x1a\xca\xed;w\xfd\xf0\x01\xee\xa4sA\xd8\xb4\xe9=\xd0\xde\xc1\xf0D\x06\xd68\x9bF\xc2z\xcd\x84\xfb\x91\xfa\xfc\xc7j\xfcy\x9c;V\x1d\xfb\xb3\xf0\xb0\xb2A\xaej*\xdc\x80u\xdfI\xff\x90\xc9J\xf8L\x02\x13J<\xa4\xc10\xd8\xbf\x94\xa9\xefq\xa6\xce\xae\xa2\xd5F\x01:\xad\xbeqS\xe6UE+\xeeX\xeb\x1exk` \xf4~\xd2\xc9\x8f}1\x84\xa1\x84b8J\x88\x87\x03B\x0c\x9e\x12\xd20\x95\x10\x82\xf9db+!\x82\xaf\x07JP\x08g Y\xc2\x8d\xc7[BD/3p\x97\x90\x8b\xbd\x04?\xbc,\n\x83 \x85q\x98P\x08\x8b \xfe\x19S\x0e\x93 \xf1\xb8L\x88\xc4fB4>\x13\xe2fT:N\x13\x92\xb0\x9a\xe0\xc5kB)\xcc&\xa4\xe26!\x13\xbb i\xf8M\x88\x18\x85\xc0B\x0b\xbf\x1f\x8f\xe7\x84\x82\x98N\x88i\x9ag\x9d\x95\xc3wB\x0c\xc6\x136\xe0<\x9d\x0c\xd9\x83>\xac'\x94\xc6{B\x10\xf3 \xb9\xb8O'7az\xf0[a\xc2\xf8O\xf0\xc2\xd4\xc0\x8b\x03\x85,,\xa8\x93\x95\x17#\n\xb98Q'7\xe9\xdaq\x7f\xae\x1c^\x14\xa20\xa3\x90\x81\x1b\x854\xec(\xe4\xe0G!\x19C\n\x81\xa3<\x80\xeb\x83\x04l_,\x9e\x14r0\xa5\x90\x8a+\x05\x7f\xc7s\xf0\xa5Nf\x1az3v\xc9\xc4\xe1L\xbd\x0b\x82\xc3\xdeT\xcc\xc3\x93\xe6'\xc5<<\x13a\x1e\x1eI\x8f\x94\x87'\xb2\xd2\xcc\xec\x90\xcc\xaf4C\xef\xe5\xb3{\xb2NN\xf3GB\xdf\xdf\x8f\"\x18\xf6\x86\xd0\xfa\xc06\xf9\xfb\x91)\x00F\xbc\xb2\x91yF{I\xfe\xf9\xe3$\x9f\x89\x14\x9a\xd6<\xe5\xc8\xfd\xfc\xb3\xb9\x15\xe8\x825\x08]\xb0q\xd62@\x17,\xba`\x9dO\xa2\x0b\x96\x13\xba`\xd7\x84.Xt\xc1\xba\x08]\xb0\xe8\x82E\x17,\xba`\xd1\x05\xab\x08]\xb0\xe8\x82]R\x9a\xf0\xd0\x05\x8b.Xt\xc1\xa2\x0b\x16]\xb0&\xa1\x0b\x16]\xb0\xe8\x82]\x12\xba`\xed/\xa0\x0b\x16]\xb0\x9f\x98\x0bV\xe4\x03\xd6X\xf8n\xd8\xe2a\x15\xc0\xd96\xa3pZh\xc56\xf8\x13\xea\xea\xa7\xbf:g\x95\xe7\x05=\xe0\xf6\xcb\xcb\xdf\xfe\xcb\xe5\xfds~\x8e\xfdr&\xc3\x83\xca\x0f\x7f!'\x81t&L\xbe\x17\x83\x1d\xb77|fk\x1c\xe7\xa5\xef\x89M\xf7\\\xfc\xa8\xfd6\xbb\x95o\xaav\xd4\xe7\x11\xb5:\xdb,n6\x87\xa5\xa5\xee\xdb\x96pY\xfcA\xdaYxf\xfe\x95\xdcO\xd5\xbe\xe9\xf8`_~ \x0f.\xf9/\x82i?\x90\x07\x91>[\x1c]S\x19\x02\xa6\xe6W\xfb)\xc2\xf6\xb2#\xf7\xf4\x8a=\xcc\x8d\xa6\xfb\x85u\x91\x0bCf\x84\x06\xf6(k\x0c\x81#\x1b\x16\xc2-\x8d\xdc\xbd\x1c\xb8f^\x05\xd5@\xec+\xc1\xe0\xc3\xbeA:\xee\x03\xe7%`\x96\x17%k\x8a\x86\xaf\x1fI\x1a\xbc\x05W\xd7\xee#\xeb\xab\x85U\xfe \xfc\xf8\xd3\xab\xd7?]}\xfb\xbf\xaf~\xfe\xe1\xdd\xdb\xd7/\xdf\xfc\xe1\xcd\xebW\xcf\xad\xbfN\x1e\x00n\xb6?wB\x91\x1d\xfb\x81\xce\x9d\x87\x1f\xd9\xff|\xfb\xa0\x16\xbci\xf2\xa6=\xbcx\xf7RH\xb1\x19\xa1\xae\xc6\xa5\x1fAk\xcf\x8bw/\x9f\x1b\xff\x12\x1ej\xf6uS\xe2N\x0e\xaf^\x1b,\xd8?'\x1e\xcba\xdb8 \xab}\x87t\xe7\xa3\xa9\x93\xd8E\xedz\xe4\xc5\xbb\x97\xae?\xb1~\x18\x03,\xf0]~\xf6\xdazq\xae\x90\x85B\xc3\x15\x0fyR\xf0\xff\x96\xdb\x0e\xed\x85x.`\xa4\xd5\xc0\x16\n\x85g\x97\xc2\xe7O5W\xff*\x11\x97v\x08\xf0\xdb\x99<>\xe6\x07\x8aH>\xb0\xe3\xe3a\x99-\xba%\x7f\x9f\xe8\xc4\xadA\xad6.\xbf\xd5MD<\xc3OG\x81\x11\xb9\xe7623=\xf5{\xd2\xed\xc8pl:\xfa\xf9h\n\xef\xfd\xfd;R\x0d\xf5A/|\xc8mK\x82\xefQ\xfa?\xf9m\xc4\xba+\x9b\x9b\xf27_\x96\x14\xa7\x1b\xb0\xea(\x9a\xf8\xed\xd0W\xbb\xba\x1a\xe9\xfb{\xb8V\xff\xad\x0b\xcd\nL\xd5\xde\xfaL\xb5\xf2c\x00Si:\xf0\x93\xdeO\xe9\x91\\0\xca\xac\x12t\x07\xd2\xec\x0f\x96\xd2x\x10\xe3q\xd7p\xa2\x8e\"~\xb4\xa1-y\xce\xe7\xd55\xaf\x00$\xbegy\x96\xde\x1f\xaa\xf1\x90\xd9\x10cH\xde/\x96\x0b\xe3k\xb3$\xd6\xfd\x8e\x8c\xa7\xaav \x0e\x82\x1f\x95}\xfb\xa1:\n6*\xd1\x13\xbc\xecw6\xfb\x8d\x1d\x89\x0b\x10B\xe3B\x94\xa4\x0d\x11L \xa9\xd87\xad`\x83\xfc\xca\x83\xcb\x0f\xb1\xbd\x96]a\xc7\x0b\xe5\xe2\xb2\xbc6TwW\x8f]\xc0\x8e\x8d{\x7f\xa6\xa7\xf3\xa4\xefk\x05\xaf>\x1f\xa1\xed\xf7{2\xc0\x17Cu'?\xf6\x9bK\xf8\xdeYv\xcd\x8dt\xe9\xfa\xee\xc9\x8eP\xbe\xaf6#mj[\x8f\xdb~\xff \xd7h:\x8e\xfb\xab`\xed\xb4\xf0\xb4\x14\x14\x9e\x9c\xe0\xab_((8 P7PPH\xb8\x82~\x9drz\x9ce\xe0\x99HA\x08\x8a\xab0((N0\x82\"\xc4#(ZH\x82\xe2E%(\xaa\xfe\xa0\xa0\x04\xa9 \n\x96\x99\xd0)\x91{\xdc~e\xd2\\Ep\xba\xa8u\xf3\x00\xc3\xddP\x9dNd\x80\xbb\x03\x19|p\xce\x99\xd8\x06\xf8\x81\xd7\xf4<\x10\xd5I\x9e\xf2\xb5\x13\xc5==xhz\xcfyN^\xae\xb6\xdf\xdb\xdb\x18\xd7\xc2X\xfd\x81m\x06;\xa1:\xb8\xcb\xd0E\xe9\x08\xf62\xe7\x10\xb3\xe1\x98\x97\x90\xd9\xb7\xae\xd5\xe7T-\x8ckK\xb12\xe6\x91*\xea\x0b\xa3\x84\xb7\xac\xe2\xaf\x90\xdc\xeb{\x9bN\x85j\x8fg5T\x95\x18\x87\xeb\x87P3\xa9C\xb9\n\x1e\x9a\xe1c\x92\x06Kl\x06\xa5\x00\xd1\xeb\x02r#\xd9<\xfc\x92Jk\x16\x8df\x0b\xc6\xb3\x95\x8eh\x8b\x8fi+\x14\xd5\x96\x17\xd7\xe6a\x97XLscl[\xe9\xe8\xb6\xc4\xf8\xb6\xc2\x11ni1n\x89Qn\xbe9<\xc5\xbf\xc5\xc6\xb9\x15\x8et\x8b\x8au+\x18\xed\xb65\xde-+\xe2\xadP\xcc[N\xd4\x9b\x87Yt\xb9\xccG\x88|{\xbc\xd8\xb7G\x89~K\x8b\x7f+\x1e\x01\x17\x1b\x03W4\n.>\x0eN\xa8\x11I\x91p\x1e^\x19\xa51\x8bE\xc3\xa5\xc7\xc3\x05\xf7\xe8\xb8\xa2\x98\x9bc\xe2\x82\x96\x8a(M/\"2.E\x1dL\x8e\x8e\xf3\xf0\x8a/\x83\x19\xd7\xbe\x821r)Qr\x85\xe3\xe4\xf2\"\xe5|3(\xaa\xf4ef\xb4\x9c\x83\x1b\x8d*{Y&b.:\xec+\"j.)n.T\xfb,'v.\xc4\xd3 \x13/\x14A\x97.\xcc\xf8(\xbaP\xdf2\"\xe92c\xe9\xfc\xf5\xf6\xc2\xf1te#\xea\xca\xc4\xd4\xf9B\x08\x8a\xc5\xd5EG\xd6\xc5\xc5\xd6\xc5F\xd7E\xcc\x9c\xf4\x08\xbb\x94\x18;\x7f\x01\xcb\"qv\x89\x91vy\xb1vI\xd1v!\xa9\xfb\x8bV\x06\xde\x8d\x8f\xba+\x17w\x17l\x94s\x05\x95\x8b\xbe\x8b\x88\xbf\xcb\x8f\xc0s\xb0\xa3\xc1\x12\x95E\xa3\xf0Bqx\x99\x91x\x0e^\xe1\xd2\x94\xe1h<\x7fYJ_Q\xca\xd21y\xc5\xa3\xf2\xdcqy%#\xf3bb\xf3\xd2\xa3\xf3\x92\xe2\xf32\"\xf4Rc\xf4\x02\x85&\xfd\xad\x8b\x8d\x9a\x8a\x8d\xd4\xcb\x88\xd5K\x8c\xd6\xf3t7'b\xcf\xc1*\xa2\xb4dN\xd4\x9eg\xca\x87\xcbJ\x16\x8c\xdc\x0b\x96\x94|\x8c\xe8\xbdRs1!\x82/%\x86\xcf\xae9\xd0\xe6HFZ\x1dO\x99\xde\xbd8#\xc1\xfbfv\xaa\x9c\x06r\xdb\xf4\xe7Q \x14/\xe1\x0f\xfd a\x8a#\xfc+<\xbb\x80\x86~>zF\xf6\x8e?\xcb\xa7\xff\xae\xa9\xd8^\xed\x1a\x12\xbe\x83\xaa\xfe\xa9,3\xd2\x84r\xdb\xd3\xf9\x8a.Z\xf2]5\xd2\x97\xfd\xf1\xd8P\xd7v;7\x15~\xff{xv\xe1\xca\x04)\xbd\xfb\xd2\xa7\xb8\xdf\x0c\xfd\x91w\xb4\xea(\xb9\x84?\x1d\xc8@\xaa\x11\xbe\xeb\xf7\x8b\xf2\xc8\xa2\x8d\xae\xb9\xecs\xf0h\x8a\xff\x91\xd0jW\xd1\xeab\xfa>\xbf\x03\x9a]\x0cw/\xb1\xd6\xf2W\x97\xcf\x9e]\xb0\xff\xf8\xed\xe57\xfc\x7f\xbfY\xbd\x1d\x9e#\xef\xef'\xb4{\x00R6\x90\x96\xdcV\x1d\x05z\xcf\x01\xf0\x8e\xbb\xb2\x92\x05wa\xda\xfaC\xab\xfd\xa8\x81\x03\xc5\xb5Xf\xbe\x81\xb6\xdf\xb3-\x87+\x87;R\xf7;\xb23g\xbf/h\x0c\xf4\x90\x94-U\xa5\xf5x\x18\xac*\x8d)\xcd\x83gwx\x9d \xca\x02\x82aJ\xf3\x18\xf8W\x11\xf0W\x0e\xf4\x0bS\x9a\x17\x04|\xa5\xc0\xbd\x92\xc0^\x98\xd2|+\xc4+\x03\xe0U\x04\xde\x95\x0e\xee\xc2\x94\xe6[@])\x90\xae\xc2\x80\xae88WA0W,\x94\xcbb\xe1\xc3\x94\xe6a\x00\xd7f\xf8\x16\xa64\x0f\xb4\xac \\+\x1e\xacU\x14\xaa\x95\x03\xd4\xc2\x94\xe6\xae\xc7\x82\xe0\xac\x04hVL2\xec\x14X\x16\xa64\xcf\xc9\n\x1e\x82aaJ\xf3\x04\xe8U$\xf0*\x06v\x15\x07\xba\xc2\x94\xe6\x9cr`V +Li^\x00T\x15\x84T\xe5\x02\xaa\x9c''\xa64_\x11\xa64\xcf\x00N\x85aS\xa9\xa0\xa9\x04\xc8T2`*\x0d.\x85)\xcd\xd3\x00R\x98\xd2|\xa2\xc7\x00E\x95\x98s \x80\xa8x8TLJ\xf3\xc2U\xa5\x9dn'o\x1e:\x9e\xdd$\xc9Y\x160c\x18f\x02\xf5\x81\xc9\xebY\xdd\xf9\x12-\x1c=\xbe@G[\xd6\xc9E\x05=\x81o\x7f\xfa\xf1\xc5\xab\x97/\xde\xbd\xbf\xfa\xfe\xc7W\xaf\x9d\x89F\x1d\x8f\x7f\xfb\xdd\x8f/\xff=\xe6\xc1w\xff\xfb\x87\x971\xcf\xbd\xb0>8e,Mhm\xd8\x1039\x8c\xbf\xefwD\xcbU\xcb}-SBE&m\x87\xe7\x19dN\xc9\x85\xff\x19~z\xfb\xd2\xb6\x18\x95S\xda\xb6\x1c|\x03\xf1\x1c\xfe\x93\x0c\xbd\x04\xf1\xf0\xfd\x805\x89'\xa1ule\xf6qz\x0e\xaf^\xbf\xfd\xe9\xf5\xcb\x17\xef\x19O\xa6\x9eY\x06i\xca\xdbo\x13\x98\x85\xa9\xb2\xdfJ\xbb\x8f\xcc\x12r \xf0\xee\xd5\xbf\x0b@\x87\xac\x0d`\xe1\xd7ww\xd5\xb0\xb3[\x11\xad3h5\x01x\x8bg\x08\x04\xd52ar\xdf(\x13\x14\xcf\xa2$\xf6\xea\x96'r\xbf\xab\x1ak,9\x13m\x05\x12\x0e4\xe7\x00\x9aA\x08L\xad\x8dk\xec\x0bkk_\xe44\xd7\xf2=\x91:v\x84\xe6\xc8\xe1\x97\x94,\x9b\xe5\x9f\xfb\x06\xde\x82\xe7\xa0\x99\xe1\x16\xe2\x9f4 m!\x99,\xe7\xb5\x96dU\xfe%\xb5&\xffS\x8e }\xfa\x17\x01\xf7\xfc\xabx\xd5Q\xa2\x9f\xe3\xba\xfe\xd4\xd0\xc3\xfb\xfbq*\xd3_\xc9\x0c\x9c\xdc.*\x91)@\xef\xa7\x19g\xc8\xe9s+^\xe7\x9b\xcb\xafTe\xfce\x81\x7f\xfd\x93\xf2\x91\x8f\x93K5\xbe\xc8\xbf\xdeD,\xf4\xcf Q1\x88\x8a\x99 Q1\x88\x8a\x99 Q1\x14Q1vBT\x8c\"D\xc5 *F'D\xc5 *\x06Q1\x80\xa8\x18D\xc5pBT\x0c\xa2b\x10\x15\x83\xa8\x18\x8d\x10\x15c\x10\xa2b\x10\x15\xe3\x9e\x02\x88\x8aAT\x8cN\xb1\x08\x05D\xc5pBT\xcc?\x02*fUS\xd0\xb8a\xcb\xfc8\xd2\xab+\xff%7?\xe1\x11U%Y\xf5]\xa8\xe9\x9e/\xfd\x17Nh\x8d\xc3`a\xaf3\x82U\xf2\xe3\xcb\x80\x82\xcb\xd4\x83U\xf2\xcb\n7\\\xdf\x1d\x0b\xff\x96\x90\"V\xc9\xc7*\xf9\x7f\x9bU\xf2\x93\xe1J\x7f9T\xe3\xc1\x0fSz\x7f\xaf\x81\x93\xe8=[\xa3z\xad\xde%\xc4\xe8#\x17i\x8e\x07\x16\xcd\xa9z\x10N\x84p\"\x84\x13IB8\x11\xc2\x89fB8\x11E8\x91\x9d\x10N\xa4\x08\xe1D\x08'\xd2 \xe1D\x08'B8\x11 \x9c\x08\xe1D\x9c\x10N\x84p\"\x84\x13!\x9cH#\x84\x13\x19\x84p\"\x84\x13\xb9\xa7\x00\xc2\x89\x10N\xa4S,\xb4\x03\xe1D\x9c\x10N\xf4\x0f\x01'\xaaF}\x8b2\xc1D\xd5x\x98\x90\x0d\xf7\xe2\x9f\n>t\x01\xa4\x13Y\x15\xf8\x0c;\x90{\xb9\x88\x0b\xe2\x8a\xc2n\xd8\xf3i?T;2\xf9by}!\xb2\xbb:\xb5U\xf7\xf4/\xac\x87\x1e\xa7\xec\x0b\xf1\xf0\xdb\xb6\xead5\x1f\xd6\x13U \xad}\x00\xc9\x0d\xe4W\xb8}\x89\xa9\x10\x0d\x1d\xb9\xf4\xac\xbe[\x8d\xebg\xaa\xcb\x1f\xc3\x83\xebt\xf8\xb9]}\x02\x1e\x96\xe4\xa4t\x01\xbd\x14y\xc0h\x02~&\x7f\xab\xa8\\\xea\xec/\\\xaew\xd5\xa8\x04n\x9eh~\x93\xcf\xffb\x93Q\x93yN\x1d\x19\xce\xe3\xa9>\x1d,y|\xb0\xb0\x0c\xfa\xbc\x83\xb6\xd5\x18\xf3$\xa0\xcf\x1b}\xde\xce'\xd1\xe7\xcd }\xdekB\x9f7\xfa\xbc]\x84>o\xf4y\xa3\xcf\x1b}\xde\xe8\xf3V\x84>o\xf4y/)Mx\xe8\xf3F\x9f7\xfa\xbc\xd1\xe7\x8d>o\x93\xd0\xe7\x8d>o\xf4y/ }\xde\xf6\x17\xd0\xe7\x8d>\xefO\xcc\xe7\xcd\xfe\xbf\xc6\xc0\xb8_\xf3\x95(}\x87\xba\xdb@\xf9\x82\xb9\xafR9\xc1\xd9 \xf1\x88\xfe\xee\xff%\x83\x98\x9d\xde\xee3=\xf4CC\x1f\xdc>\xee\x9fd\xc1\x08\xde\x85ZD\xbe\x8b+\xbdz\x97\x1bO\xfbnw\xae\xa9rt\xab\x0buD\x91\x84\xdfYK$\xbcP\xcc?SB\xf8D=\xe0\xd5n7\x901\xa5\xbeO\x8aL$\xab\x86\xb6\xe4\xb9tT+\xc1\x84\xdd\xd4\xd2)\xbd\x90$\xfa\x9d\xd1\xefl\xa1\x18\x13!\xa0\xdf\x19\xfd\xce\xce'\xd1\xef\xcc \xfd\xcekB\xbf3\xfa\x9d]\x84~g\xf4;\xa3\xdf\x19\xfd\xce\xe8wV\x84~g\xf4;/)Mx\xe8wF\xbf3\xfa\x9d\xd1\xef\x8c~g\x93\xd0\xef\x8c~g\xf4;/ \xfd\xce\xf6\x17\xd0\xef\x8c~\xe7_\xc1\xef\x9c\xea\xc3\x95\x16*\x1e\xb1\xecv\xe3\xbe\x14O\x19\xa1\xcab\xc8\xf8\xefF\x84\xb25*Yc \xff\xfc\xc9\xfadgI\xe8d4\x85;\xe1\x9b\xb0\x08f\xf2\xba\xe8\xfc\x0e:\x8e\x19\xb0\x8e{\xd0\x00\x14cA\x01xG\xa8\x867\x90!\xca\xaa?\xd2C\xc6\xff\xa4v\x00n\xd6rhQ\xa0\xbf\xect\xc8I\xe3\xecd-\xe9o\xe8\x9d\xcc\xce^\x9dN\xad\xb8\x86r\x0bQ\xd5\xc2\xff\xbf\xef\x9eH\x86\xae\xf9_\xf7\xc7c\xd5\xedF\xd8\x9d\xb90-\n1\xe6\x01\x08\xfb;7{;1\x0f\x00\xe6\x01\xc0<\x00\x10\xef\x80\x0b\xfa2\x13<\x991\x11\xe4)^L\xcc\x03\x90\x13J\x1f\xf2Zb\x1e\x80\x04Oe\xa4\x9f2\xc6K\x19\xe7\xa3\xc4<\x00\x9cr\xbc\x92 >I\xcc\x03P\xc0\x07\x19\xf4@\xe6\xfa\x1f\x9d''\xe6\x01X\x11\xe6\x01\xc8\xf03\x86\xbd\x8c\xa9>\xc6\x04\x0fc\xb2\x7f1\xcd\xbb\x88y\x00\xd2\xfc\x89\x98\x07`\xa2\xc7\xf0!\x96\x98s \xfe\xc3x\xefan\x1e\x80c\xbf;\xb7\xe4JZ\xcbFw*\x80\xef\xf9\x83\xff!\x9f3\xb2\x01\xb4\xcd\xc8\xcd\xdc\x82\x97\xb2\xbc\x8d\"\xa6\x94G\xfe\xa9}+\"\x8b\xf9\xd7\xd6\xcc\xee\xe6\xd7\xe5\x13\x9fl*\x01\xabPu\xa2\xbf\x82\x9b\xcf\x9dO \xca\x94$\x03Y;\xb36\x81\xec\xaa\xf5\x1d\xd9\xfd\x0d\xdfT\xe6\xab\xb3;\xd8wjX\xcd\xc6\xb2\x1b\xcf\xe32\xc9\x80\xb7\x95\xc6\xf4\xf8/\xbb\x8d\xc9\x98{\x93\xdd\x8a\xed\xb5r\xc2\x0b\xf3\xeb\xb8n\x82\xe3\x02b\x9f\xf7\xabG\xc3\xf6\xaf\xc5<\xe3^\x90\xe5j\x14\x86o\x99\x06\x804\xc3\xdcJ\x0bC\xc5\xc9\xd43\"\x90\x08\xe6\xfa\xcc\x07#,\xd6\xf9\xe2\x99\x9f\xde\xbe\x9c\xf0\x08\xcb\xbf\x05\x84\x8a\xb0\x85\xc5_\x11\xb6\x10\x9a\xd83!l\x01a\x0bvB\xd8\x02'\x84-\xac a\x0b\x08[p\x11\xc2\x16\x10\xb6\x80\xb0\x85\xe0\xbd\x0fa\x0b\x08[P\x84\xb0\x05\x84-\xd8 a\x0b\x08[\xe0\x84\xb0\x05\x84- laI\x08[@\xd8\x02\xc2\x16\x96\x84\xb0\x05\xfb\x0b\x08[@\xd8\xc2\xaf\x00[\xf0\x95\xcd\x97^\xce\xceS=\x7f\xe1\xb9\xd5\xde\x10>Q\xb1SM\xe5\xf3\xab\xd9\x92a\xf1\x0c\xaf=\xc9\x1a\x90\x01\xbe#\xd5-\xdb\x08\xb8\xf5LX\\Vy8n\x08\x95i\xa6\xd9\xd1\x97\x80\x8f\x00\x10\xc5\xfc\x7f\x91\xa8\x0dEs5\xff\x9b\xaa\x1d\xf5\xe6Z\xac)\xa9\x10\x909W\xb3\xea\xb8H\xd7\xfc\xf4/|\xb3\x13\xd9\xb3\xff\xeaF\x86h6\x8e\x9f%\xab\x97\x8a\xd3;\xc6\xc8,\x1d1I\x97\x7fD\xacY\xbeH\xb9Im\x9e\xc3|[\xa0\xc3yd\x17\xfa\x0fd\xe8H;\x15)\xe8\xc8=5\xfd\xfc\xcd\x08<\xf9\xf5%\xbc\x91\xec\xb8\n\xa2\x9b\xb9F\xda\x0fl\xfd\x8b\x14\xf5\\\xb9\x90\x99\xc1M\x0e\x9f\x85\xba\xf3\xd3\xdb\x97\xdcb)-\x1d\xcaX\xd6\x92}U?\xc8\xcej\x874\xf7\xd5\x0d\xa7\x9aM\xc59\x93;t\xfd\x9d\xe8\xfc\x9bo_\xf2M\xb0\xa1#\xb0Mq \xa7\xb6\xaa\xb9\xd9mf\xf2\x05\xb7\xf5=\x7f\xfat\xdf\xd0\xc3\xf9\x9a\xafM9\x9e\xcdu\xfdd\xdf?\xbdn\xfb\xeb\xa7_\xd5\xff\xfd\xbf\x7fY}\xf5\x15\xf9\x1f7\xff\xa3\xae\xff\xe5\x9b\x9b\xdf}u\xfd\xcdW\xffRW\xff\xe3\xb7U\xf5/\xdf\xd4\xe4\xd9\xb3/\x7f\xf7\xe5\x97\xcf\x9e\xf2\x05\xcd^}Z\xf7\x03y*\xd2t?\xbd}\xf6\x94O=\xb1\xde\xff\xdbw\xdf\xfcVi\xfa\x06\x1a\xc7.\x17\xf9\xe4'\x8b\xcaq\xcd\xf3$\x17x\xc08)\xc1(\x01h\x93\xa0\x08X\x85]\xd0\xf9\xf0\n\xc7\xc0-\x9e\xd5a\x16\xea7\xc4O,\xfe\x8a\xf8\x89\xd0\x0c\x9e \xf1\x13\x88\x9f\xb0\x13\xe2'8!~bM\x88\x9f@\xfc\x84\x8b\x10?\x81\xf8 \xc4O ~\x02\xf1\x13\x8a\x10?\x81\xf8\x89%\xa5 \x0f\xf1\x13\x88\x9f@\xfc\x04\xe2'\x10?a\x12\xe2'\x10?\x81\xf8\x89%!~\xc2\xfe\x02\xe2'\x10?\xf1\x89\xe1'4/\xbe\xc6\xc7\x87\x9fX\xf9\xc6\x892i \x17\xf9T5\x9bM\x136h\x03\xf9\xe5LF\xd3u\xc2\x8f\xc4fTNJ\xc9\xee\xdc\xed\xc8 \xe7\x00\xf7\xe2/\xf1\x00\xdc/\xd3\x0f\x86\xf9\xaf\xe9\x9e/\xbd%3\"\x82\x0e\xe7\x00 \x02LW\xde\x94I\xc0\x0e\x94\xd0,\xd8\xec\x8f\xcb\x01|\xd1=\x88wV\xee\xb7\xb5\xc3m\xedb\xb3\xb6\xcem\xf1\xc8u\x9c-V\x8e\xddU\x96\xe3\x1c[;\xc1\xb2\xdc^\x1e\xf7V\xa6C+\xd3\x85\xa5\xbb\xaa\x16\xb3E\xe7\x9e\xec\xa6\xcarL-\x1cP\xa6P\x0cWT\x8e\xf3i\xe1d2\xb9\xeb\xccs\x1dLnGR\x8e\xeb\xc8\xee\"\xda\xe0\x14\x8ar\x03\xc5\xb9{2\x1d<\xb9.\x1d\x9b\xeb\xa6\x88\xb3\xa6\x9c{\xa6\x88C\xc6\xef\x82\xc9s\xba\x80\xcb\xb9\x92\xeeN\xf1\xb8Mr\x1d%\xb3Cd\xb5Zt\xf6\x1b\x9c!\xb9\xee\x0f\xab\x9b#\xc3\xb1\xb1peX\xcf?\xab\xbb\xc2}(f\xba$f\xd7\xc3r\xe0>s\x7f/\xcf\xd1`q*H~\x93ka\xa33a\x83\xfb\xc0\xe6*\xd8\xe0\x1c\xb08\x02rM\xffN{\xb5\xc5\xbc\xef5\xe8\x9b\x16\xa58\xa3\xbd\xf9\xce_\x97}I6\xc5\x87:\xe33\xb7\xdb\xdb\xef5\xa9G\x1a\xd1us\x9e\xcdP\xbe\xcd4\x9eg\x0c\x9f\xaf\xc1\x1b\x0c\xdeN\x13\xb7\xdd\xa8\xed2c\xaf\xa4\x11c\xaa\xf6\x19\xa7ust\xa6\x01:`r\x8e32{\xcd\xca\x0b\x0b\xac\xc1~\xf17\x9fy8\xdf \xbcj\x80\xfcW\x96\x99\xd7f\xd2\xddb\xc4]\x18lsM\xb4+s\xec\x06\x03\xac\xa1a\xdb\xcc\xab\xba\xcdG7\xa1n7\x9a\xe6\x9bI5\x93h\x96\x11\xd4j\xf0\x0c\x9b8\xbdF\xcd\x083f\xc8piX\xf1L\xee\xb1\xa6!\xb792\xc2\x00\x1909N\xcd\xdb`V4\xa6\xd3\x06\xa3\xe1\xd2@\x98g\x12\\\x9a\xff\xca\x18\xfc\xf2F\xcek\xd4\xf3\x99\xf1\xd8\xc6\xb9\x1fN\xf5\xe5\xbe\xa2\xe4\xaez\xb8\x1c\xce\x1dm\x8e\xe4\xf2\xf5\x8cl\x8f\xb00-p\xf0\x16\xf5\xda\xc4\xbdS+\xde\xdd\x86s_\xe1\xdb-\xbcWxvj\xc1\xb1\xaf\xf0\xeb\xabn r\xe1\xd5\xa9\x03\xa7n\xbdJ\x08\nA\x88\n\x99\xd5\x04\xf9p\xe8eLl\x82\xf2\x0dm+V\x1e\\y\xa6\xf9MP\xb6\x11n\xc5)\x84\x1fO6\xc8 \xdah\x96\xb3H\xcb\x89\x13\xdfh\xa2[\xf1s\xe2\xc27\x9a\xebV\xfc\\8\xf0rF9\x02\x97l\x83\xc7\xc5\x994\xdd\xef\xff\xd5\xde\xf7d#\xa7\xa0\xb8\xce\x87\xf1\xc5\xbe\x9eF\xe0\x89#M\xa0\x82\xd6\xb8F7nx\x9bQTP\x9eiT\xd0\x12'\xb4\xc1L*(\x80\x07\xf6\xe1\x80\xfd\xf8_\x87\xf4b\x8c\xa8\x82\xc28\xdf5\xbe7\xd3\xac*(\n\xcf\x1bgb\x15\x14\x81\xdf\xb5\x02^-\x9f\xb5>\x17\xc6\xe7\xe6\x9ba\x059\x9ag\xfcV\xcc0+\xa8\xa0yVP1#\xad\xa0R\xa6ZAn<\xec\x1a\xaa\xb7\xc6\xbfn7\xe1\n*b\xc8\x15T\xce\x9c+(l\xd4\x15\x14\x81W\x8d0\xf0\x1a\x0f\x06\xf0\xa9\x16\xc8\xa6\xed\xab\xb1\xe6\xc3\x10\x0e5\xc2\xfc+\x1f\x8c\xc1\x9d.\x1a_\xca ,\xa8\xa0YXP\x19\xe3\xb0\xa02&bA[\xc6;\x02\x03\x1a\xc6~\xb2-\x7f|8\x9e\x0e}\xf7pIN}}\x18/e.\xa7\xcb\xd7\xec\x9fo\xba\x9b>\xda\x82^\x93\x81\xdb\xe0\x9aN\x1aB\xee\xfaa7^\xe8\xe3x\xe8\xef\xe0\xc8Tf\xd6\xbd\x91o\x93\xf3\xfc\xfa\x9c\x89\x9c\xec>7\xe6\x15;\xc1\xc5\xc4c\x7f\x85/\x8c\xa6\xfc\xfe\xd9oD\xa2\xb0\x9b\xa6c;\xa4Q\x04\x8bNo\n\x89\xde\x1d\xfa\x91\x88\xffVst5\x16\xd3\x96`] VQ_=\xea\xeat}ja\x7f\xe0\x7f\x10\x13y\x81A\xe7\xa2\xd5\xc5\xc2f\xeep[\xb5\xc2\xbf\xa0\xfe\xc5\xa4\xf1\x85\xebc\xc6\x10:[\xf4\xcf\xd3\xbc\xff?\xf0\xa7\x03\xe9\xb4\x91\xe5k\xe9b\x82\xb8\x8f\xc4\xc0\xeb\xf6Q\xec\x7f/\xd4\x0d\xcfg\x85\x02\xdbwd\xb1q\x0c\xe6NR\x7f\xe0+\xb8\x82}sK:}w\xe66\xff\xba>\x0fp\"\x83\x98)\xa6\xd2\xf9\xc3\x8f\xef_\xff\xff\xb8\xdc\x9c\xcd\x9d\xd8\x8a\xf0H\xfc\xd9\x97\xc6\xd0O\x82\xfe=|3\xbf?\xeda\xb0\xef\xc9\x08\xfd\xcdM\xdbt\xfc\x00\xa1\xbf\x7f\xf6[a\x19\xae{\xb6\xdc\xaf\xd9\xd5cf\xd7w\xecA\xfd\x03\xfc\x9d\xaf\xbf\x14\xefH7\xc2(\x06bd\x7fdg\xcf\x83\xca\x80\xd7\xdc\x8a\xe9u _\xd0\xdf\x7f\xfd\xec\x02\xbe\xfeJ\xd7\x11\x08\xadM\xf3\xf8?\xf1\x81c\xfc\xd5\x86\xc0\x13)\x8a\x953\xc9\x9dM\x8d/\x9e}y\x01\xcf\xbe\xf9?\xd6\xb7\x9f\x85\xdf\xfe\xe6\x02\xbe\xfa\xd2\xfe\xf6W\xc1\xb7\xbf\xfa\xf2\x02\xber|\xfb\xeb\xf0\xdb\xdf\\\xc0\xd7\x8eo\xff6\xf86\x13\xfd\xd7\xb6o\xff\xd3?\xd1\xdf\x7f\xfd\xbb\x7f\xfa\xa70\x87o.\xe0\xb7_*\x87\x91\x98Ru\xcf\xce\xf8n/\xe6\x16\xd9-\xb7\xc9\xeb\xbeoI\xd5\xd9wC\xe3\xe4\xb6\xf3\x13Z\x95\xe4\"\x95\xe9\xa6\xdb5uE\xc9\x08w\x07\"\xad\xf2\xcd\xb8d%\xb7'v\x0c\x89\xf5\xf6@\xa8o\x93\x17q9\x91\xdb\xbcy\xb8\xcad\x87\xc1\xcd]\x86\xfe\xc83V\x88[\xfef\xa8d\xf2\xdde\x8f\xf4\xa1\x93\xe2\xb9\x84/\xde{Y !\xf0\xcb\xbc8\x81\x85\xa5\xc6>\x0c\xd3 )\xa4>\xd2\xe1\\S\x9bI|W\xd1\n\xf6=\xbb\xb24\x1dU\x07j%\xbf\xa6\x8e\xec\xeb\x07\xfe\xf0\xfdS\xa1\x9b\xcb\xb4\xaf\x97\x1e\xad\x9d\x07\x1e\xbd\x14\xbd\xe7\x8dQ\x19\x1e\xa3\xb5\xf8-\x9a\x92\xb7U\xbc9#\x13Nr\x9b\x04\xbb\xc7\x05\x87\xd8n/:\xa30\x1c\xf5\xc9!\xa2\x97\xf0\xa34\xa9\xb2\xd3\xaa\xbf\xb9aZA?\xb0&h\xccfx\xfa8/\x00\xf1pd\xcf\xcf\x1eG\x84\xd1w\xd9\x04\xde\xfd\xee|$CS\xab\xdf\xf8t`Z\xc15\x91`I\xa6\xefHa\x9d\xbb \xecj\xb8t8\xab\x96\x8c\xe3\xdck\xa1\xb8\x9eG&\x9d\x0f\xc4'\x02\xab{G\x13A\xdb\x1c\x9b\x12\x120V7g:\xdd\xd3zZ\xb5\xf2\xe2\xc0\x9a\xa7\xc0\xd2\xe2\xce\xa5\xcf\x0c*J_\x9c[\xc3P \xb0\x89\xf3\x0fon\xa0%7T\x82T\x1bY\x1cF!Q8\x86ZL:\xf1\x01&\x8a\xeb\x07 U}\x80\xeat\x9a,gl\x9f\xbd\xe2mK2\xf5\x99\xb6\xb1\x99\xc9\xac\x8e\xf2\xfc5\xc0!\xb9r\x9f\x9e\xa2\nd\xef\xf8\x83\xabqi\xba\xba=\xefLS\xb3\xf8\xc2\x14\xaa\xb1\x90$\xb7\xb5h\x08ivx\x9d\xaa}\xd3\xc9{r\x07?\xbf1\x0d\x03\x8b\x06s_\xc4@Fym\xe5\x93q\x9e\xbdl\x82^\xca\xe9\xd7\xec;^k\x87=b.s\x9d\xbd\x90\x81\x12\xf1\xc0t\xa2q\xe5p\x8a\x17\xafd\xb0\x14m3\xcf\xa1j \x8ey\xc4\xb8\x92n\x91\xd8\x8a\x9b\x00\x16\xe9\x14\xacu]>[5lZ\xe1\ne\xf0\xae?\xaamv\x8d \xf8C\xdf\xc3\xd8\x1f\xc9\xd5\x94\xc6\xc9\x8aR\xd1\xb6j}\xe0t\xa0\x8a\x80\x83\xc9#tj\x84\xfeb\xa3\x96\xd2\x04\xc2`\xba\xefOo_\xaa$N\xaa\xc9\xa3\x009\xa9=D\xb2\x9a\xbf{ \xaf\xef\x9fG\x1c-\x89VC\xb5\xc5Gn2\x91\x07\xcctp\xc8]f:C\xe0T\x8d\xa3\x88\xd1\xd0\xa4t)\xfe\xae1\x10\x85\xc3BG\x8b\xaa=u\xad@\xf1\x8d^\xc3\xc4@\xf6\x1f\xfbA-\xf0\xc9\x00e\xdd_\xe2v\xd7\xe5\x90O\xec\xc4\x80\xdb\xf7T-Z\xe2\xc6\xe8\xbe\xb6\xf05~w\x15_Y\x17\xbcR\x95\x0c\x96\x19yF/\xa1~p\xfb\xce]#s\x0b\xd9\x07C\x9f\x13\xde\xb9(\x1f\x99&\xe3\x1d\x17\xde\xac\xca\xd5\xfd \x1e\xe2\x08\xa2\xc5\xdc\xe5\n,?1\xf5^M\x0b\xd9\\\x94\xf2K\xabU9\x90\x13\xe1h\xf2o\xaba\x12\x99{]J6|f,\x97\xa4\xbeF\xd4\xeax\xd97]\xf4\xaa\xd8\x91\xae?zgFudc\xe6y\xc4>\x1e\xac\x15R\x7f\xe4\xf5\xd6\xfa\x0f\xa4\x93 ?\xf1Q\xb5\xcb\xb0\x8b,\xbb\xf5\xf3\xcfL\xa2\xfc\xe1\xc7\xf7\xaf\x9f\xf3\xeb\x92\xf8\x83\xc4\xff5r=\xb7#P\xb7\xfc\xc9\x0b\xd9w\xf9O\xf5\xe9\x19\xd6\xea\xe7b|\xd5=/\xbf\xe7]o\xfa\xee'R\xf7\xc3nL\x9f\x89\xb4\xbf\xd2\xe5!\xe6\x16k\xd8#{\xd5\xdcKAg\xe7\xbd\xd9\x9f\xd7W{\xdb\xe2\xc8\xe7\xe7\xb3vo[4\x06+s\x01 *\xb1\x8c\x0c\x86\"\x0b\xd8\xc22]lI JYX\x82\n,/\x83\x9fb\xb2\x10f\xdaR[k:\xcbe\xa6\x85\xcb\xb5\x1c\x84\xc9\xf9\x8f\xd3\xf8N,\x85iw\x96\xcags3G\xe7\xa2~\xcb4\xf4\xf8\xa5\xcc'|=\x10\xde\xc0\xab\x1b\xb2\xba\xde\x94]\xb8\x0b5A\xe7aY]K\x95\xc1\xfb\xb8\xcf\x98\xb5Q\x89\x10TN\x95\x10\x14\xa3PL\xb3I\x0c\xabD\x99\xcf\xc9tA\x15\x9cm\xf84in\xc98W\x0c\xf6M\x90\xe4k\xcfI\x9bW\xd6W\xec\xaf\x81\x7f\x8e\x81c\x9e\x81m\xae\x81{\xbe\x81g\xce\x81k\xde\x81\x7fgw\xcd\xbf\xc0k!/g\xf6\\\\q\xda2!W\xcc\xe4\x04]\xfd\x1e7K\xe11f\xaa@\x1d\xfd\xe1\xfb\xefm\x87d\xfa\x0c>\xaa}\xf8j\xd0\xf5\x1d\xeb\xdbv\x0e\x90\xaa\xfb\xc0G\x9a\xde!}\x08B3\xdd\xab\x17\x81W7\x82\x8d\xbcC\xeb\xa5\xa0\xae\x04\x0e} 6\xeaL+f\xfaU\xc4\xea\xd1\xdf\xa0;\xadxYt)\xc8\xd2\xa7\xa0\x80Ne\x998\x0e\xbd\nrt+\x00\xbb\xffm\x8b\x8e\xa5\xb11\xb4-\xedw\xbf\xca%\xf6\xa9\xaa\xad_\xdf7\x94ML\xb6\xc5\x8f\x7f\x18\xfa\xe3\xbbC5\x90\xf4\x9d\x8a\x9f \xe3U\x7f^\x99KP\x1bS\xb4\xe5\xf0\xcb\xd5\xc6\x02\xc3\xff\xff\xf6M\xc7\x86\xff\x87\xfe\xdd]u\xc2\xb1\xff\xbb\x1a{\xfe\x1c\x1fR\xdb\xd8L2\x88\x9c\"\x99\x93\x837\x80}\xff*hM\xc5\x99\xf4\xa9\xce$\xdf\x14Yh8ovL\xc7a' S\x83\x93\xa7\xcbZ?M\xb7\xfbzZ\xfb\xc3\xf9\xc8\x1a\x99>\x8d\xbb\xf3\x917g\xa5\x81oh\x0ck\xc9\xc7\xbf\xdaRk\xeeG\xe7\xe4\xf7\xeb\xba\x05\xb3>\xbas>\x96\xcb\xf8X,\xdf\xa33\xdb#\xcd\xcf\xf5X*\xd3\xa3?\xcfcV\x96\xc7\xb29\x1e\x9d\x19\x1e\xcb\xe6wtdw\xdc\x98\xdbq%nj\xc9\xecX6\xaf\xe3\xc6\xac\x8e\x85s:n\xc8\xe8X:\x9fc\xb1l\x8ees9\x16\xcb\xe4\x18\xce\xe3X,\x8b\xa3+\x87\xe3\x96\x0c\x8e\xd6\x8c\x8dtK\xbeF\xb1\xd8L\x86\xf6l\x8d\x1bs5n\xcb\xd4h\x01\xe4g\xe6e\xb4det\x9e\xd4\xce\x8c\x8c\xfe#<3\x1b\xa3\xb5\xf4\x0b\xa8\x01\xfe,\xfc\xed\xc2y\x18\xd7Y\x18\x0b\xe4`,\x9a\x81qy\x1ao\xcc\xbe(\x05\xads\xdc\x92o\xd1\x9bp\xd0\x91k1\x98iq\x9d\xf6,>\xcb\xe2\xfa\xdd\xbf\xda\xfa\x9a\x95_1\xa6\xb3\xa1\xdc\x8a\xee\xbe\x05\xf3*&dU\\\xe6\xa2seT\xdc\x9eO1?\x9b\xa2\x99\x03kc&Eo\x1eEw\x16E_\x0eE\xab\xb4b\xf3'\x86\xb2'.s'n\xc8\x9c\x18\x9171>kb0g\xa2%%\xe1\xeas\x96gB\xb9\x12\xb7eJ\xb46J\xfb\xa5h\x8e\xc4\xc2\x19\x12\x8b\xe6G,\x99\x1d\xd1\x95\x1bq\x99pn\x99\x17\xb1LV\xc4b9\x11\xcbfD\x8c\xcb\x87\x18\xcc\x86(\xad\x0f\xa1\\\x88\xf21o&\xc4U\x1e\xc4\xf5\xd7bs\xe2\xf9s Ff@\x8c\xc8\x7fh4\xb9d\xee\xc3\xc2\x99\x0f\xcb\xe5=,\x97\xf50\x7ft\x83\x19\x0fC\xf9\x0e\xff\x1a\xb6K\xa6[$\xfb~\x05\xb3G{$\xda#\xd1\x1e\xa9\x08\xed\x91\xeau\xb4G\xa2=\x12\xed\x91h\x8fD{$\xda#\xd1\x1e\x19\xd9Y\xb4G\xa2=\x12\xed\x91h\x8fD{$\xda#\xd1\x1e\x89\xf6HA\x7f7\xf6\xc8)H\xe2\xf3WL\xac5\xd32\x9f\xc3\x89_\xf2\xa6\xdd\xabj)\x19\xba\x8a6\xb7\xfc\xcc\xba\x7fz\xea\xfbV\\V\x87\xcf\xc3FM\xa6\x86d\x196\xaf\xf8sS\xabi4\x80:\x0flj\x05\x9a\x96E@S\xac\x00\xce\xa9\x98\x05\x16+\x80\x17\xb2\xc6b\x05\xf0|\xcb\xecf\xdblq\xeb\xec&\xfbly\x0bmA\x1bmi+mA;m\x8c\xa5\xb6\xa0\xad\x16+\x80GZq\xb7\xdaqW\xec\xb0\x028V\x00\x8f\xb6\xf7\xae-\xbe\x9bm\xbe\x06/\x8a\x15\xc0\xad}\xcf\xb2\x08\xc7v>d\x15\xc6\n\xe0X\x01\x06\xf41\xa0\x8f\x01}\x0c\xe8c@\x1f\x03\xfa\x18\xd0\xc70\xfd\x0d}\x0c\xe8c@\x1f\x03\xfa\x18fB\x1f\xc3\x82bm\xce\xe8c@\x1f\xc3\x92\x15\xfa\x18\xd0\xc7\xa0\xbf\xf37\xefcxw\xea\xe9\xdb\xa1\xa9\xd3\x83&\xc6SO\xafN\xecUg\xd4\x84\xfcQ\x08\xe9\x9d\xd8\xc3\xe5Q\xf6\x8a\xd4l\xc9\xff\x06\x9e}y\xf9\xd5\x97_\x9f+U\xfd\xc7>\xd3\xecm5V\x8eY\x00UT\x86?\x0f\xa2^s\x05\xd3\xbb\x92\xa1(\xb9\x1b\x90\xcd]uz}_\xd5\xf4\x05\xcf\xc2\xfe\xa6K\x96\x11O\xff\x1e\x93\x19?\xbe\x15?\x9eif3\x9anC+\xde\xb39\xf8\x9d\xaa\xd7\x92\xdc\x82\xa9\xd2\xcb\xe3\xba\xa30\xe9\xffL\x1b\x93\xfe\xf3\x01\x17\xf5\x8cp\xd0\xff\xae\x06\xfd\xb1\xc3\xf0\xf8\xcc\xc9,%\xc2\x8f\xba+Q\xd1d9k\xa2\x14\x1e\xcbdp\x8c\xadm\"X\x1fuO\x82\x02S\xa0\xec\x04\x88\x19\xfei\xe4\xb4\x11\x9d\x06\x90\x1d6\xd3i\xd7\x9fi\xfc\xc8e\x16\xf2\x00\xe3\x94\xf4\xd7\xeb\x8el9;!?n\xd3\x9b.\xb6\xe5s\x99\xc1\xcb\x175\xfb\xdf?V\xe7=\x19\xdf\x92\xe1\x15c\x90\xbc^v\x15\xad\x1eww-Sv\x18\xe6]\xa7\xd9\xa9k\x82\x00t\xc0\x9bW\xdc<\x02\\\x14\xe6\xb7\xc7\xab\x13\x19N\x84\x9e\x97\xca\xbaj\xc5u\xdf\xb7\xa4\xea\x16\x7f\x0b\xf9\x8dt\xbe|\xa9\xc1M[\xed\xd9-e<\xf4w\xd0\xdc@C?g?\xcfO\xf5\xc3\x8aK\xd7wO\xe6\x07\xf6\xbc\xf5\xab\x87~X?4\xc2\xaea\xd2\xbb>S\xbe\xd76\x83,\x8a\x04\xe4\x17 w \x03\x90So\x01\x1a\xdc\x1d\x9a\xd6\x015\xe0\xbcYo\xe4\xbd\xb1\xe2\xf3\x8b\xf1j\xfa\xdd%\xbc\xf54\xa2\xb2\xd4\xef\xd3\x1b\xb6\xfeXE\xe7B\x80\xb49\x12\xbe\xc3q{\x9e\xabo\xd5\xbej:\xe8\xbb\x9a\xac\xfcI\xa0\xb5~\xfd\xa9\x81\xdc4mKv\x17l;$\xddN:z\xd9A%\xdc\x93s\xe5Nn\xd6\xd8\x13:\xbd\xb3b\xb6\xab\x9a\xf6\xc1\xb4\xa0\xce\x0d\xbe\xa2\xfdj\x96-\xaa&;^\xe3\x16\x19~\xef\xe47\x11\xde\x97\x81\xdcU\xc3N\x80\x0d\xe6\x87\xd9]xm\xc1\xe5\x88\xa3f\xe4\xb7\x92\x86\xec\xe0\xb6\xa9\xa0\xed\xeb\x0f\xb0\x93\xd6\x08\xe8\x07\xb6\x913Q\x8f\xb4:.\x81!\x8e5\x0d\x9eu\x0d\x1cyP\x7f\xb8\xe27\xa1E\xf4\xfbL\xae\x1b\xae\xa0\xef\xfa\xfa\x838\xf3\xa5YJ\xe0S\xd8z\xe6\xcd\xe7\xbc/\xe0\xdb\x07\xf6\xa0\xb2\xac\xc0\x7fYy\x89\x87\xde7G\x1b\x10\xc1\xb3\xe70\"\xdd\xd9ZG\x17\xe0 |\xfb\xa0>\xec|\xc0\xf1Q\xf6\xc7\x1fz\xd6*\xe7\x9b\x7f\x1cz\x0bJ\x07\x941\xfd\xb9\xff\xeb~\xab\x8a S\xc4\xfa\x85\x97j>\xe0Y\xdab\x11\xd4\xab=Q\x10i8b\xe0\x9ap\x8b\xbf6\xb9FZ\x0dT,e\x8d\xe5z\xa6\xe6\x95,\x0e\xcd#~\xf8\xcd\x06I\xd9?\xaeN\x19z\xd4\x9d0\xec\xb4}\xcfQ)+\x1b\x92 .\x0c\xcb\xb0\xa8\xfef4?t\xa20\x9a\xe6\xf7\\bU\x0e k\xd0(v\xab\xb6\xef\xf6d\x98EO\x0f\x8e\x91\xe2\x9e\xfd)\xdf\x9d\xf5\x11\xc5\xe4r\xfe\xb4\xd0\x1e9\xc6\xaa\xeb96\xa2kZ\xb65u\x8bib\xff\xa6X\xc5\xf6\xaf\xfd\xd9\\\xc5\x7f^\xcf\x8diw\xca\x10\xb0\xd2\x1cv\x15%O\xa8}=\xc6\x0c\xc2{\xd5\x86i\x14\xae\x95\xfc\xf9\x14g?p\x90\xd5B\xc06^\x93|\xed\x02\x99?\x15-\xf5I\xc26~\x7f\x9ew\xc0?;>\xc97\x02\xee \x99g\x14\xd5{<\x83\xadXC\xa6[\x03\xd9-G+$KU\xf8O\xda\xef\xf9\xd6.lj3\xd6\xea\x17\xb35\xe7\x93e\x93\xdb577\x845 j\xc5l\xb4tn1\x81\xb9\xf7\xd0\x14\xef\x08\xb5\x02\xa5*\x98\xe4\x05\xec\xc8\x89t;\xdb\x8c\x92\xc0\xbd\xd5\xef\xc6vj\n\xa5\xee\x9bnuH\xdaTjA\xd6J\xd9\xde\xa3\xd8\x7f\x18{\xf6\xd6\xe0\xeaq\x97\x84\x0f\xbc\x1a\x9a\x06\x1b\xee\xb8\x16^[.\xbb\x16v\xae\xe2\xf0q\xf7`\x9d\xdcj\x1e\x9f\x14\xea\xc2\"\xac\xf9\xb2\xed\xfd\x8d\xfc#?p9\x0e\xf4\x9a\x90\xc9m\xb3_\xddf\x18\xbd\xac:]C>\x9e[\xda\x9cx1\xefF\x1eu\xe6\xde\xc0\xf7\xac+\xb6\x142na\xae\xbdT\xf6v\xe6\xad\xfa7\xb5\x8c\xe3\xfc&\x8d\xc0x\xbd;\x1f\xaf\xf8\xddd\xbc:U\xcd\xee\xaa\xbf%CF\xdb|7D\xcb<\xb4}U\xb5z\xf6\xae\x88\xf1\x11\xcf\x19\x9dY\xf1\x93>\xa4\xf5\xdc\xa9{6\xf9\xd81\xc1>a\xfcY\\)d3\x1e\xbf\xcb\xc6\xe7\xd6}\xb5\xf4\x92{\x81\xd9\x1c\xf4\xf5\xca\x12\x19P\xb5\x03\xa9v\xe6\xfe\xa6\xddX\xaepc\xfcG\xdf\x18W\xb3\x81\xab\xe1\xd6\xedO\xbf\xea\xae'\x96O\xac\x7fT\x06\x8c\xaa\x93\xd3D\xf0\x1ei\xcf\xda\xcb\xc483\x1f\xe1Ah\x05\xb4\x87\x81\xd4\xcd\xa9ab1\xf8\xdd\x1d\x16\x98\xb2\xb1\xa2\xcdx\xf3\x005\x19x8\x8f\xa6\x91\xc0\xcbIq\x92\xe6\x11\x85\x8c\x9d\x1f2xUC\x7f\x16\x10'\xf3\x1b\x93b\xcf\x14$1j\x15\xec\x9b[u\x93a\xfdc\xea\x92\xae\x91I!\x0b\x83\xa0\xfa\xbe\x0c\xe5\xa0\xf5A\xbd\xd8\x19\x9a\xbb\x0d` \x19\xbd]C\x0b4X\xc1\x8d\x04\x86+W\xe9\xfcv\xbc\x95\x1da\x05\x08+Po\xb8\xc7P|R:\xe4\x1b\x15\xba2\xe1\x8b\x9an\xe1\xb3\x97\xa0\x1f\xcd\x94\xa61\xab\xfbA<\xc8AI\x83\xe8\xc9\x84\x13b'\x1f\xbf\x97\xe8\xdd4\xfa\xa6\x9e|\xd7\x1f\xe7FY!\x96\x039\x11\x0eT\xff\xb6\x1a&\xc9:\x80if\x1f\xf9\xe4ZB\xd3\xfe\x1aa\xffG\xbb\xbf\xf9m\xb4\xfb/\x08\xed\xfeh\xf7G\xbb\xff\x8a\xd0\xee\x8fv\xff\x99\xd0\xee\x1f\xb6@\xdb\xbf\x89v\x7f\x9d\xd0\xee\x8fv\x7f4o\xfd\x03\x99\xb7\xd0\xee\x8fv\x7f\xb4\xfbsB\xbb?n\x8c\x80v\xff_\xcf\xee\xdfw-\x9a\xf8\xd1\xc4\x8f&\xfe\xbf\x03\x13?\xdf\xd9\xa2m\xfay\x11\x08i\xf6u\xbbe\xddnSw\xef\xd9Yvt\xd3n\xaeq[Y\xd0\xb7\xd9\xce\x85\xad\\_\xb1\xe6^\xbd\xcd^.>n\xec\x07KK\xf9V\x1b\xf9\xea\naZf\xb6\xd8\xc5M;\xb8\xc3\x02n\xbb\x14\x15\xb2z\xe7\xdb\xbb\x13N.\xafu[v.\xd3\x80\xed2V;O\x00\x9b\x81\xdac\x9av\x18\xa5\x1d\xe6h\xbb!:d\x82\xf6\x1f\xc8\xa5\xcc\xce\x1b\x0c\xce\xf1!|\xd3pf\xdb\x91-6c\xbb\xb5\xd8\xd9\x02\xff\x85!\xdb6\x0ckg\x99\xd3*\xbc\xc5\x1e\xcc;\xb6\xe0\xb7\xb6\x04\xfbl\xc0\x0e\xeboP)\xb2[)\xfc\xe2\xcc\xb4\xf2\xba-\xba\xe5l\xb9^+n \xfb\xad[2\x996\xdb\xd9F\xab\xf1rXk\xb7\xdai\xc1\xd8\x84\x16'\xb2\xd56\xbb0>\xd8\xcc\x0e[!\x0e\x188>S\xbc\x81\xc0\xa6\x1e\x14\xb3\x96\xc6\xdbIm\x16R\xaf\xd6\xbc\xdeo2\xed\xa1~Kh\x86\xe6n,\xe6\x8d\x16O~\xc7\xd5\xd8\x99\xb6N\xab\x95\xd3a\xdf\xdc\xda\x91\x0dv\xcc\xb9\x9d\x1a?\xd3\x82i\x9a\x98\xb1\x8d\xa3\x80M\xd1.\xa4\x02vDn;\x94\xfd\xdaf4\xd4\x0d\x85\x82a\x9a\x85\xd0iN\xf8\xf6\xe1\xcd\xabd\xb8\xe0~6DX\xdf\xb0\xbf\x05\x16\x18`P\xads\xdb\xba\xa2\x0c\x14\xe0\x85\xff\xd9\x0d\x15\x10\xd4\x1b\xb3\x0c\x16\x0b\x1e\x11\xb0\xbfm\x86\x8b\x053'\xe4o\x9b\x01c\xb9\x0dy\xe0~[\x0d\x19\x8ev/?\xb3\xc5\xa0\xb1`\xb5\x82\xf9y@~.\xdfo!S\x07l2w\x80\xfbP\xf29\xcd\x82\xc0>\x1f\x1c+\xd3&b\xe1\xe4\x81\xf49\xf7\x0f\xf0\xc0\xf9\x02`>\x0f\x94\xcf\x03\xe4s\xc3\xf8B\x16\x14\x08ZQ\xa0\xa0%\x05\xb6YS\xc0\xedG\xf5\x8e\x85o\xa6l3\xb7X\x18\xae\x06\xc1\x0d\xd9\xf36:\xec\xbd-i\x90\x01\x9fQ\x066\x1af,\xec\xa8\x1b\xa6\x17\x02\xe9y z^\x81\x86 %1\"\xcf4\xda\xf8\xe4i\x13A9S\x0e\x84\xcc9P\xc8\xa4\x03A\xf9\x954\xed\x80\xdb\xbc\x03\x05L<\x0bvv \x9e\x13\x86g\xc1\x9a\xd8nn\xe0\xc2\x998\x0fK?\xc6$\x0f\xd6\xecF\x97x^\x0b-\x94\xec\xdb\xdd\x8a\xd3\x96+\xde\x8a\x99\x0bS\x12\x7f\xef\x03\x8f\xb2U\xccp\x04I\xc6#\xf0@\xec\x827\x1c\xfb^\x98iL\x82\xa0A b\xda\x94\x800\xd8h`Zps\x00\xea\x9cp:\x0f\x98\xaed'7\x18\x9f\xdc=YA\xe8,8'?|\x0e\xb7\xb4\xbf\xbb-\xad\x809\x0b\xbc\xa2,`\xd6\xd2\xb8-\xc0qe\xac\\\x1a\xc3\xc5\x99\x9ff\xf4\x92,\x84`E\xbf\xc5\xa5h\x02\x06\xf1\x8eM\xe5L\xc4}\xfc\xcd+\x9f\xbd\xecO\xa4\xd9\x1fh\x9a\xa5,3\x19\xe8\x1d\xff\xd4\x15\xef\xb1\xf3}gC1\x08\xd8 \xf5\xc2uYuF\x07\x98\xee\xcc\x0f\xf6/\x16M0/}\x06K\xa6\xac\xf0C\xb1\xe9\xa0\x82[2<\x18\xae~a\xee\xac\xe1\xae\x92~\x82]OFn*\xdc5\x03\xa9\x99\xfa;\x90\x96\xb7\xbf\x97[K\xdb\xef\x9b\xfa7\x97\xc2EU\xb5\xa3\xael\x1dH{2\x04r\x1ealvd\xa4\xe4\x04\x15\x0c\xe4\xa6\xaa)\x9b8=T\xb7}\xc3\xafA\xcdQ\xa8\xd5\x0fu;M\x8bi\x96^\x89Y\x1a8\xeb\x96\xde\x9e'\xf0\xed\xc3\x7f\x98k@\xf3\xbf,\xfebS\xb4\xde\xa9\xef\xbf\xe5\x9f\x87\x1d\xa1d8N\x8e\x16&\xad;\xf6?\x1d\xe5>b\xf6\xb4\xeevl\xf4A\xe4\xa7\xf6\x1fg\xb5\xdd>\xe1\xb9&\xe0\xb9\xeb\xc0\xb3\xe7\xcf\xe0X\x9dN\x1a\xc4\xe1\x02*h\x9b\x91o3|\xfd\x19.gv\xb8_\x88\xab\x83e\xd3x\x7f \xa3Pey\xfb\xf8\x04a\xa3\xa2|\xb8\xda$\x92\xfc\xe8ty\xaa\xda\xb6\xbf\xe3\x1b\x801\xef\xfa\x1b\xc1\xcbp\xc0\xf6\x93\xce\xa1\xeeQU\xcd\x16\x96\xf4\xd6(\xdeFd\xf6\xaa\xb5>\xedi\xfcSC\x0fiIU\xf6\xb3\xd6e}\xc3\xfe\x16x40\xc8R\xf2\xbd\xda\x18\xf8\xb4\x1d\xb7\xae\xe3\xd6\xcc\xc0\x7f\xf0y44\xf0hi\xe0\xb6\xef\x04,(\xa8\xf5A\xa2\xe6\x07\x1b\xb4?'\xc3\xfe\xc6\xae\x01Bp \xb6i\x82\x0bf+\xbd\x10\n\xea\x86\xe0\xd7\x0fa\xb3\x8e\xb8\xec\x0c\xd3\x18\x97z\"\x94\xd0\x15\x17\xfc\x96\x9a#\x14\xd0\x1e\x17\xec\x98.\xb9\xd6 !_\x8b\x04\xaf& \xbe-\xc2\x95\xa3\xe9?\xd6k\xcc\xadY\x82C\xbb\x84\xc2\x1a&X\xb4L\xf0.\xaa\x12\xda\xa6\xc6n\x05u\xdc\xa4{j|\xb4\xe9\xa9i\x8b\xb0U\x07\xd5\xf9X\xb4Q\x88\xd2H\x01c\xe8\x8b\xe0f#P\xb3E1\xb3\x18C\x9f\x8e\x93\xc5\x18z\x8c\xa1_\xfc c\xe8\x9d0\x04\xefX`\x0c=\xc6\xd0\x87\x11Y1\"/\x87l\xc5\x18\xfaH4+\xc6\xd0k\x84\x01\xa7[@YE\x03N1\x86\x1ec\xe81\x86\x1e\xb7\xb4\xbf\xa3-\xad\x10\xc2\x14c\xe8\xf9[\xf6k\xd5\xc2\x81*\xd4\xa0\x03iOdP\xda\x90i\x16\x14\xb65&\x9af\xea}5\x8e}\xddp\xa7\x0e\xef\x8f\xcb[\xbb\xb2\xd7\x8bE\xb1Z\x8d\xeb5h\xf7iZ\xd6\x8f\xc3\x87i\xdb\x1d\xb6F\xc1\xbb|\x93\x9eU\xed\xd9n\xfd>\xc8-;E!_c\x8c\x8f1\xcf\xb7hG\x8c\xf9|\x8a\x05|\x89A\x1f\xe2&\x91\xe7\xf9\n\x1d\x92w\xfa\x083|\x83\xf3\xa3+n~\x9f`\xae/P\xf9\xfcV\x0cu\x1f\xa0]\xa0\xdb|~\xa6\x97\xaf\x84w\xcf\xe1\xd5\xdb\xe6\xcd[\xfb\xef6\xfb\xed\x0cO\xddV\x0f\x9d\x8e\xef2\x1d\x14\xf2g\xd9&}t\xc1\x8b+\x91+\x9d\x14J\xeb\xa5PV7\x05\xbb~\n\xa5uT\xb0\xea\xa9\x90\xa5\xabB\xa4\xbe\n\xbe\xc3\xd7}\xf4\xa6\xc3h]\x87n\xe6\xac,u\xdc\x16#N\xc7\xca\x0d\xb3\xd3\x87#J\xec\xdf\xc4\xec\xf4:av\xfa\xe4x\x9e\xf5\x9a\xc3\xec\xf4\x1aa\x12\xe6R\xd79x\x8c$\xcc\x98\x9d~\x0cD\x00\xc5\xc4\x00E\xb5-1U{\xd9X \xccNo\x10f\xa7\xc7\x8d\x11\xb3\xd3\x07c\x88\x0c^e\xb2\xd3\x87-\x83\xe96A\xfe\xda\xe3\xda\x04}Y\x1bs\xb7\xc2`\xee\xc6l+\x87?\x83c`\x1fpD@-\xdf\xb6\xe7q\xf4dr\x0c\xec\x87\x10\xdc\x13!\"\x9fcp{\x14\x14\x91\xd31\x14Q5S\xd4\x17\xc3\xbb\xab\xa2\xe4\x88\x00\x0f/[\xac\x80=\xf2j\xa6\xbc\x88\x81\x10\xc3\x98\x0c\x8f\x1bc\x0b\x96\x14\x8c\xd0\x9a\xa9\xf8\x10\xc6\xc7&x\xd8DE-,)#\x8a\xc1\xc3-5\xe3cV\x94\x83o\xeeh\xf1\x0f\xd6\xac\x8f\xe1a\xd9\x16\x05\xb6bg\xcd\xfdX&>l\xa6@\xfe\xc7\xad1c\xebN\xb9r@n\x8e&[\xf1[g\x10\x17\xb45\xcel\xfd!g.\xc8\xac\xd8\xb3\x99\xfc\xf9 \xbd\x9b\x89\xddj\xef\xc8\n \x81\xbc\x90\xbe\xab\xd4\xb6\xdc\x90+vMg\xcd\x0e\x19\xd0n\xcbf\x88\xb4\xe4\x88,\x97%\xd2\x97'\xb2\\\xa6Hw\xae\xc8\x98l\x91a\xd5y\n\xc3\xcf\xd4\xa1\xaf\xd8eN\xa8\xa3\x1fA\x9d.\xa4\xec\xfaUs\x08\x9f\xee\x01e0BM\x87\xb0r\x1bRmC*;\x84\xfb\x11\xa1\xbaCP}\x07\xbf\n\x0f\xe1\x9e\n\n\xf5WPX\x9d\x87\x98~+\x8aR\xeb!A\xb5\x87\x94\xaf\x87\x14\x11\x93J\xaa\xf9\x90\xa9\xeaC\xb2\xba\x1f`\x16\x11>l\xa3T\xb5?\xd8\n\xf7\xa5\x00\xd2.\x06\xf0\x98\x13\xa0\xc8%\x01r/\n\x90xY\x88\x1b\xc3\xf4\x0b\x03d\\\x1aB\xf2\xa01\x17\x07\x88\x1c\xb2\xf8\x0b\x84\xf5\xf5`j \x93\xb2/\x12vn\x07\x12\xbeL@\xce\x85\xc2\xca\xc5\x9f\x98\xc2\xa4-\x17\x0b+Cky\xa2\x996\\0\xac\xfc\xa6\xe4\x16\xaeK\x06l\xbdh@\xc4e\x03\xc2\x1b\x94\x1f*d\xbdX@\xc4\xe5\x03\xbc\x17\x10\xc8\xbb\x848\x06v\x9a\x1a\xce\x8b\x08D,\xe6\x8d\x17\x92\x15\xbfu\xc1\xa4\x99\xca]L p9\x81\xa2\x17\x14\xf0^R \xea\xa22\xd3\xe2*!\x19\xe4\xe9\xf9\x8f\xa1\xdb\xe7@t!\x00\xd3\x85\xa9Uv\xa8.D\xccT(\x06\xd9\x85X\xd8.l\x80\xeeZ\x99 \xbd\xcd\x03\xdf\x85M\x10^+\xbb\xaam\xc1\x0f\xe3\x85\x8dP^+\xc3 \xfd\xe0\x84\x92\x15\x85\xf4\x82\x1d\xd6\x0b!h/\x80\x0f\xf7\xb1z}+\xc4\x17\n\xc0|!|\xdf\x0c\xdd4# \xbf\x10<\xca\xa00\xf4\x17B\xf0_\x08\xefm\xe0=\xdb!\x06\n\x0c!80\x84 \xc1\x10\x80\x05C44\x18\"\xf7E\xc8\x85\x08;\xb9\xd5\x95\x05\"\xa2h3~\x18\xfcp\x8e\xa8a\x0eO\xce<<\xb1\x93\x9d\xac\x07`\xc3\x14C\x00W\x0cq]\x8a\x1d\xea\x1c\x8c\xb1\xbb[\xb2Z@\x08g\x0c\xd9Xc';\x13\x0d\xeb|,\x8c9\x06\x08\xe0\x8e!n\x00B\x989E\xb1\x03U\x12\x87\x0ca,2l\xc0#;\x196c\x0c&\x19\x92q\xc9\xee\x0f\xba\xf1\xca\x10)\xfbR\xb8e\x88\xc7.C6~\xd9\xb1;JL\xb3\x13\xc3\x0c~\x1c3\xb8\xb0\xcc\x10\xb4w?.\\\xc5\xbb\xefG\xadR\x1f\x9c\x0fbX\xc4L\xa1\xb2\xd0>\xc8\x85\xf79x\x99\x19[\x1c\x0f\xa5\xc2\xfc x\xaa\xe6\xe2\xa0\xad\xcc<\x97\xaeT\x804xA\xd2\x10\x9e\x131\x1b\xff&\xc04D\x82\xa6!\xbe\xad\xa1\xfb\xbbc\x0c\xd3A\xd4\x8emq\\g\xadqL\x1a'\x98\x1aB\x80jxtq\x94\x04XC\x10d\x0d\x0e\xa05@\x04\xd8\x1ap\xe7\xc6\x9d;s\xe7\xce\xc3n'\xcc\xdf\xd0\xc8\xe4\xe2\xbaW\x8cf\x9c\xf7\x1a\xdb\x0d\x85\xf1\xdd\xe0\xc1x\x03\xa4\xe2\xbc\xa7\xb7<\x01\xbfEjG\x08\x8a\xad !\x94e\xdd\xf5.M\x17\xc2\x8f\xf7*\x1d8\xc3\x11\x0c\xf6\\\xd6\x8513\x0e\xac\x84g\x1f\xf1\x1c\x17\xa2\xc5W|H\x03\x1c\x9dr\xe4\x82\xdb*?\x13 d\x95\x89]\">\xdc\x8fS&N\x89\x04Q>\xce3\xc5}\x96\xf81=\x9eq\x0b\xe0x|\xe7\xa2\xf3T\xdchE\x0d!u\x82\xa7Y\x84\xf2\x12\x8b\xcb\x89\xf8Vh\x87V\x94\x8c\xc2q\x94\xd8P\x94\x82\xbfIC\xde\x04\x81\xf6\xd1\x98\x9bT\xb4\x8d\x07O\x13\x8d\xa4):d\xf1\xb8\x19\x1d\x19\xe3d\x18\x89\x98I\xc1\xca\x84\x80\xf5\xa9(\x99T|\x8cB\xc08\x19\xfa\x901\xfe\x81\x88G\xc3D\xc0\xe9\xad8\x98l\x04\x8cE\x13\x0d`_\x92Q/>\x18\xbd\x13\xef\xb2\x05\xe9\xc2Q-\x0b~6\x8c\xcb\x06t\x8b\x0d>\xef\xc6\xb5l@\xb4\xf8\xb1,\xce-\xc2\xe6\xe3r W\xfc\x98\x15\xd7\xad!\x03\xa7bbR\x16\xfcl\x08\x15\xf7\xa2\xda\x88JY\xe2\xe1V\x96\xa6RH\x147\x06\xa5\x14\xfa\xc4\x85; #N\x9c*\xeaw}\xfd\x81-=e\xadN\x8f.m%\x87+u\xff\x19\xb3\xd4\xfc\xc5\xbc\xb6M\xc5\xf7\xcd\x91L\xb7,yS\xe5\x195\xa1\xae:\xe1\xc2\x10wX\x91\xde\x12\xfaaG\x06\x19\x0dL\x9a[}\xac\xa4\x9b\xde!\x99\x9f\xc4__\x8f4Y\x1aX\x12\xe6\xd3.\x9cat\xea\xf5H\x9b#\xd7\xf0\xb8-Ya7\xc4\xe1-\xac\x98j\xee\xec\x98\xc6p\x1a\xfa\xdbf\xc7\xfe[$\xe7\xd5X\xf1\xe3u^\x83\xc2\x8dtM\xe8\x1d!\xdd\xa4/OX\x1a\xc2\xfeOf\xf3\xb3M\xc0\xc5\x86\xab\xcf>m\xcc\xf4}\x7f\xb1\xdf\xdb\xf7\xf9\xe5\xa2*\xb5\xaf\x9b\xfb\xb9\xadC?\x9fj6A\xf6\xe2\xa1\xb7d\xe0\xee\xf8\xe4\xd5u\x96l\xc4%\xf4\x91\xd7Y)KB\x0e\x86\x0e\xd3\\.\xd9a\x9a\xcbm\x988Ls\xa9S\x04\xe6\x0d\xd3\\b\x9aK\x9d0\xcd\xa5\xbb\x13\x19\x104Ls))\x06m\x103\x08%\xe1e\x98\xe6r;\\,\x12*\x96\x07\x13\xc34\x97\x920\x9b\x9bI\xf1\x17bA\x98\xe6\x12bQ[1\x88\xad\x88\xb6%\xe6|LGh\x19\x9dY\xf1\xc34\x97\x1aa\x9aK\xdc\x181\xcde\x1a\x0c\xaaL\x9aKAR\xc8\xca:\xa8Z\xc0;\x7f\xach}P\xafv\x86\xee~\xaa\xf6r\x8a=_\xb2z;\xfdi\x9a\xa1\xf3\xd3\x93'x\x90\x86\xc7\xf9m\xdb\x12\xb5/\xcd\x8e\xdc\xd3\xab\x0f$\xd69\xa7\xf6\xc0\xeb\x07\xbat\xc5\xf9\xae\xc0\xea+j\xfbc\xff)J\x97\x9f\xaaQ^\xb1\xdeV{\xf2\x13\xf9\xe5LFz)\xfe\xbe`\xa2\xae\xc5\x84\xb3c\x82 p\xecG\xaa\x97P\xbb\x847\xb3\xb1\x9b\x1cO\xf4\x01\x9ae$7\xe5\x06\x1e6\xf1\xbb\x1e\x8e\xec\n1\x90\xf1\xdcR\xa3\x94\x19?\x82\x12\x85b9\x18\\\xc7\x828\xe1x\xcd8\xf6\x1f\xf3q \x9b\x02\xd5m\xd5\xb4\xdc\x8b\xbcj\xbf.(^e\xf0\x8a3Yn\x13w\xd5\x08#\xa1\x17\xd0\xd0\x11x\x1d.~\x95\xea\xc4D\xda\x89\x1anw\x8d6m\xdcc(>)f\x99h\xb5\x90\xef5\xd9\xed\x84\xd3z\xff\xd3\xdb\x97\xd3D\x84#\x19\xc7\x8a\xcd\xfd\xc9\x98\xa61\xab\xfbA<\xc8}\x7f\x83\xe8\x89z\x85\x9f}\xfcf\xa2w\xd3\xe8\x9bz\xf2]\x7f\x9c\x1b\xf5\x17\xcb& \x039\x11\xee\x10\xf9\xb6\x1a&\xc9\xfe\x1e\x9e\xfdO\xdb\xc3F\x1f\xf9\xe4\xfa=|e<\xf9\xd7(w@\xb2\x1b`W\xd1\nm\xffh\xfbG\xdb?\xda\xfe\xd1\xf6o!\xb4\xfd\x1b\x84\xb6\x7f\xb4\xfd\xa3\xed\x1fm\xffAY\xa2\xed_\x10\x9a\xb8\xfe\x81L\\h\xfbG\xdb?\xda\xfe9\xa1\xed\x1f7F@\xdb\xff\xc7\xb4\xfd\x0b\x13 k\xf6\xb8\xd8\x8a\x99*+\xed\x84\xf2%\xb4\xfb\xa3\xdd\x1f\xed\xfe\x7fkv\x7f\xb6\xf0\xcf\xa7K\xe3\x0e\xa2\x9b\xfaGwD\xc3\xc2\x8a\xb4\xb0Z-\xecT\xa6e\xcae\x8b\xb2\x0f\xddV{S\x86\x85i)\x1f\xf3\xee\xa9\x0b(\x18~e\xb5f\xca\x05\x95i\xac\xb4\x19&\xad\xcbzi\x84t\x98\x1e-\x06G\x8b\x99qm\\\xf4\x99\x14\xdd\xabp\xebpB\xde\x90\xc2Zk\xb3\xcaL\x0eM\xb6\xfdoa\xeb[[\xf8\xac_uk!\xd96\xbc\xc5~e\xb5\xdcm\xb1\xd7\xd9ls.\x8b\x9c\xc5\x0eg\x15\x83\xfb\x9e\xe8\x16P\xa6}\xcdnK+cAs\xda\xcd\xb6Z\xcb\xecR\xc8\xb4\x8c\xcd\x960\xc9\xc7b\x0f\xdbj\x05[X\xbdV\xb6\xae\xe5F\xfb\xa2\xe6\xba\xc0w\\\x1fe\xf7\x99t\x074Fy~rQ\x9e\xdeQVS,y\xa0\xf9L~\xdc\x81~\xf3*r\xd8 dU \xdd\xde\xdf\xbcZ`\x10\x9a\x9dy\x82\xad\xde`C(\x80\n\xd3~\xd4\x8c\xb0#5\x8f\x82\xe5\x0b\x9c\xff\xc8sC4}w\x01MW\x0f|Lm\xe6\x85\xeb\x07xfO\xf9Bn\xd5ic\xde\xc5\xfb\xbb.\xc9\xd0\x16\xf2-\xfe\xc8\xf8))Tb\x8a\xa8h^\xa3\x9b\xfc\xc3kg\xcf\x8f]+.V\xfc\xef<\xee\xfc\xd8\xef\x9a\x1b\xf1\xe3H+\xea\xf1$\xba\x1bW\x9c\xb6\x1c\x90+f\xae\xfbN\xcc\xa99\x93\xbf\xf3eo:\x96{N\xd4-'s_*z\xbf\xf1\xdcn\n\xdfm\xec7\x9b\xf0\xbd\xc6-\x8c\xa2w\x1a\xcb\x8d\xa6\xec}\xc6z\x9b)|\x971o2\xdb\xee1\xea\xee\xa21\\\xddb\x8a\xdca\xbe\xe7\x92\xff\xb6j\xab\xaeN\xb7\xb2\xe3\xdd\xe5\x93\xbf\xbb\x88\x01\x16\xba\xfd\x0b\xde\n\x1c\xe5\x89\xfenF\xf9\x07r\xcf\x91|o^%\x8f.\xe3p\xd5\xec\x9c\xd7DA\xab;\xd8\xb2\x05o\xab\xa1RS \xe2\xab7\xfdP\x93+\xb1\x03_Um\xdb\xdf\x91\x9d:\xa8I\xdeds^l\xe7\xa3*\xbay\xfa\xdd4N\x1e\x82\xdc\xe7e\xca]t\xf3=\x14\x9ei\xdc\x16\xda\xc5\xfa\xfe\xb9\xb8{Z\xfb\xeb^E\xf9\xf7\xcd\xcc\xbb\xe6\xfa\x9e\x99\xd8\xe2\xadwK~\x9b\x9c\xd9-.\x92\xebK\xa4w\x02\xa5T\xe7+yi\xb4]\x18\x8b^\x16W\x17\xc5\x94K\"\x1e9\x9f\xdc\x91c\xe9\x9a19\xcb]\xeb\x16W\xba\xe0u.\xbc\xfc\x8d\x86n\xbb\xc2\xa9K\x9b\xc6p\xb1\xc1n\xbd\xba-\xca\xb3\x9a\xd76\xff\x95\xcd\xde\xe9\xedW\xb5\xe5\x05\xad\xdc\xe5lu1+q)\xd3\xaebE\xafa\xc6\x15\xac\xc8\xf5\x8b\xd7\xef\x14\xaaS\xb2\xe2v\xd24.\xeb+\xf6\xd7 A\xfb\x02\xc7\xde\x0b~\xc3\x9cS\x13{\xf7\xd0\xd1\x03\xa1M\x9d\xa4\x8c\x9d\xbb\x1d\x19\xda\x87\xa6\xdb_e*\xab\x82\xdc[\xc2\xcf\xd3\x17xUUCY\x9b\xfe\xc2\xf6\xe5[1A>\x1f\x99\xfa&V\xb6Q\xacvT\x1d\xd4\xd7\xac\xec<\x9b\xae\xea\xcfb\x9a}\xff\xf3\xbb\xf7p\xa8n\x898T\xa7/\xe9\xda\x0e\x7f\xe5*\xa6\xd8\xb2\xfb\xd4\xe1b\x17E\x98e\xb7\xe6\x86p\xceb\xb3\xe3\x9bC\xdd\x1f\xaf\xd5\x11\xd4\xebu\xe6\xf7\xd5\xf1\x08\xe3\x81m\xf0\xff\x0c\xda\xd4\xa6\xe7\x11\xfe\x99i\x0d\xcd\xae\xa2L{\x12\xd3\xa8\x98:d\xab\x97?U\xe2\xd5\x16\x99!\xda\xf3i\xbc\x10\xba\\\xcd\x07m\xfdW\x8d\x1b\x1fC\xed\xdf\x93\x06$7\xe9s\xa7+A\xfc\xaf\xf2\xe9\xe2\xaa\xa8b(\xf5\xd0\xc5|\x994R\x8dCE\xf9\x8b\xa7\xbe\xe9(\xdb\x08g\x89h\xea\x99\xeft0\xd6$k\x87\xd8 \xbb=\xdc6\x03=W\xad\x14\x99,\xdc\xdf\x91;9g\xd8\xa3\xe6d\x91\x1c\xfb\xa1\xd97]\xd5\xca\xe7\xd86;wd<\xdf\xdc4\xf7\x97\xf0\x82\xce\xcak\x7f\xb3\x1a \xc9Jm\xd6\x8a\xf5\xb4e\x8b\x0d\xbc\xae\xcf\xc7s+\xbe\xcfO\x17>\x87\xdb\xb1\x97:\xe6\xf9\xb4\xe3\xbb?{\xad\xefx\xdd\xe6\x86(\x8c\xd7\xd8\xec\xc8\x85\xb6\x9b?\xf0\x1b\x88(C]\x8dp3\x10\xd2\xf2\xff\xd2\x16\xfe\xf9d\xdb\xc5\x0d\x11\x9eO\xa2`\xf5\xf9\x94q\x19\x9f\xc4\xc0w\xba\xac\xbd\xdd\xb7[\x82O\xc5\xcdv\xb3\x16\xdb=\xc1\xb5\x83\xc2\xd6]\x14\\;)\xf8$\xe2w\xb4\x16\xd9U!\x7fg\x85\xd2\x1eK\xdbN\x0b\x9bv[\xeb\x10\x8e\x17\xab\x1d\x17\x92v]\xb0\xee\xbc\x90?\x92\xdbwaH\xdb\x89WM\xfa\xd7\xd5q\x9d\xb7#k\\\xec{3\x94\xdd\x9f\xc1\xb2GC\xe1}\x1a\x96{5\x14\xde\xaf\xc7b\x1b\xf6#\x9b,B[\xbbg\x01l\x8c@(\xba\xc5{6\xf9\x02\xdb\xbcg\xa3\xf7\xca\xc7\xbfE\x14\xdc\xee7m\xf8\x8f\x02\xdfwm\xfc\x05\xb7\xfe\xc0\xe6\x9f\xba\xfdo\x8f\xc9\xb0\x8cp\x99c \xf9 \xf0\xaf\xbe2\x87\x81\xef8(~ \xd8\x8f\x84\x8d\x87\x82\xc1I\x1e\x10\xebc!\xf7`86\x1d\xbd\xbc}vMh\xf5\xec\xf2U\xc3\xa6\xcf\xf5\x99\xb5\xec\xed\xd0\x9f\xfa\x81\xfdW\xbcok\xa4\xd5\x87\xa6\xdbg_\n\xe5\xfb\x93\x95\x98O\xa6\xa9\x1d\xca%\xc2\x9aLv\xfc\x7f\xae\xcc\xfd\x872 j\xfc\xaa\xb6\xedk!\xcaqb.\xcd\x98j\x1a\x9e\xfa\xbe\xbd\x9a\xad\x96)m7&\xec\x82OV\x1f4v\xe6N\xc1;fv\x87}O\xb3\xb6N>\"rKZ6.W\xb2\x9f\xd9\x1dZqz\xdc.\xd1~\xfe\xe2\x84\x0fZ\x9c\x03u\x7f<\x9e\xbb\x86>\\\xb1\xde\xa7\xf4\xcc\x98f&\x9b\xacn\x99\x9b\x8c\xa5/\xec\xd5\xe9;|\xb0,\xa6\x88\xa9U\x8e\x85g4m\xa7=\xa3\xb5s4\x1b:M\x83\xae?^\xc2\x9b\x0ezz \x03\xdc\xf5\xc3n\xbc\x98\xf8 / [\x11\xe4\xd0\xb7;2\x8cp\xd7\xb4\xad4\xf6\x13\x07\xbf\x91\xefH\x87\xfe\x0e\x8e\xe7\xfa\xe0\xdeF\x12=\xe2\xb3hSFT\x1b\x10uj\xf1\x7fHips<;\xa9\x9a\xd9\x9f\xb2'\x1d\x19\x9b\xf1\x8a\x9c\xfa\xfapu\x1a\xfa\xdbf\x9c\xf7\xb7\xb8\xcf\xbax\x00\xff\x01\xb4\x1fn\x06>W\x88t'\xf2\xbfO\xb6A\xfev\xb3c\x8b\xf7\xa6I\xf3A/\xdf\xe5]\x94\x9f\xd7~%\x97\xfbK\xf8bW=\\\xc0\x1d!\x1f~3;\x95v\xe7\x9aq\xba\x12~\x83\xab\xa6\x13\x9d \x89A\xe9R\x1e\xd3\xb2\xb1\xca\xdc\x1f\xe2R\x99]\x1b\xf2\xc7\x86\x02\x9b\x8f\x8bu\xc5\xb9\x88 \xb9\xd8\xb8g\xfe7UM\xfb$\x19:\x1a*\x18\xa9\xf94\xfd\x0e\xc7sK\x9bS\xcb\xc4J{ \xf7\xa4>S\x8b)\x92t\xdc%D*6\x11\x84S\x86\xe9t\xff\x1f{o\xbb$Gn$\x08\xfe\xd7S\xf8\xb6\xd9\x0cIM1\xd9lMkl9\xd7g\xcb\xafn\xd5\x8a\x1f\xb5\xc5\xa2\xb4\xbbcsId&23\x8e\x91\x11\xa9\x88\xc8*Vkdv\xafq\xafwOr\x068\x10\x9f@\xc0\x81\x88\xaafk\xe0f25+\x03\x0e\xc0\x018\xfc\x1b\xab\xdb\x11Z\xd4|\xbbu\xba\x97\xc7\xfe\xdd;\x98@\x97S[\xda\xfa\xb0\x8f\x16:u\xf0\xdb\x1dL\xe6&n\xf4C\xe6\x82\xe0a\x00\x1c\x88\x1f@\xb6\x8c\x0c4\x80\xe9\xa2H\x0f\xe10\x08\x95\"\x9d\xc0\x98\x84\x02\xe1\xd3\x9b(\xad\xf4\xb0\xe9\x1b\xb1\xffg\xb2\xd4\x02\xe3\x92\x0b\x84Ot\xb2\x14\x136U\x8a4\x03#\x12\x0d\x84\xcfx\x9at\x13<]\x9b\xc0\x03p\xc3\x93\xdd\xbe\xe2\x9b\xe5`-\xea\xd0\x86;6\x1f\xf9f\xfb\xe2\x88\x89\x9f\x8f)\xd7\x7fVS\xd7\x91\x16\x05?\x16\xbc\x94q),\xab\x03.T\x10\x0c\xf6\n\xac,\x93]\x86DMzi\xccW{\xae?KJ\xb4Q\xc8\x9dV\xf1\xe2\x90d\xdc\xb2\xc8U^\xb1\xb4+\xcf!\xa8X\x15\\M\xb5\x15\xd4R\x0e\xf6\xaa}\xd3Q\xd6w\x10c\x92\xeb\xdb\xc1\xc4\x01\xda\xdbM\x1f\x1eI$\xec\xaa\xaci$\x0d&\xf2\xbe\xd5\xe3\x95$\xdaJ\x9d^E\x08\xf5\xb4\x10\xf1u\xc7`[/\x8d\x1c\x8e\x18\xa9\x96\xb1Z\xc2\xdco;\xf7\x95\xe5\xbe]\x0c\x99\xcdou\x90\xcd\x83Rm\x06MQA\xee$\xdb\xd5\xa4\xea \x95\xa6\x12\x94\x10\x82\xa42\x93]\x8b\xda!\xdai\x94@)v\x97\xfe\xae\x7f\x89\x8ba\x0c\x17J\xfe\xa5\xb3YP\x1d\x00!\x1a\x94\x18\xbb!\xf6k\x13\x1f\xf4\xe5\x89\x94`u\xa4\x8dM\xab\x90\x11#\xaf\xc5\xa8.\xeau\xf1\xb6Z{\x8a\xfe\x9a\xba\xab\xdb\xca\x12\xa68\xd8)\x89\x0e9+\n.f\x85\x84\x12\xf2\xe0PE\x90\xc6\xbd1\xbdpl\xce\x8d\x98\xaa\xfe-f\xd0\x0bG\x94\xed\x9f\xf4\x10\xc0\xe5\xc5K\x15\x0b\xe7\xa0\xf6L\xf19\x9d\xb9\xe1\x8f\xddk\xa9\xd9\x13\xfaZ\xaa\xf7B{qHB\xa0I\x9b\x04\xf2m\x1a\xa0U\x02I\xb3\xa4\x0fa\x1e\x0d\x13F\xb5L\xfah&j\x9b@\xd48G\x07d\xe6q\xe0\xb8{g\xd1@\xc1\xa5\x85\xc2\xa8&\nd:\x8f\x0c>T+\x85y4S i\xa7\xe0\x94K\xa7j\xa9\xfdUiLT\xfd\x8e\xe6\xd4V\xc1\xa8\xb1\x82Kk\x05\xbb\x90:\x96\xa9k\xd4`al\x13\x81\x93\xee0Q\x9b5\xa0\xabM\xed\x86\xdf\xa8Z-\xb84[\x98>\xed\x10-\xd7\x80f\xa8\xde\x9b&\xee\xa7\xed\x82[\xe3\x85\xe9\x04\x08\xd3~g#\x01U\x0b\x06\x87&\x0c\xd3)1\xabV\x0cv\xcd\x18|\xb5c jP\xa6K\xc5+6\xd9\xbbh\x80Ek\x06\xd7b\x98\xb5gG3\xd7\nN\xd4\xa4\x07\xf8\x92~f LS\xaf\x07\xb8\xcc\x97\x86\x9f\xce\x0dN\xc2Pv\x0eI\xf7\x06\x9b\xfe\x0d3\xe8\xe0\xfd\xfd(\x8eN_\x0f\x870]\x1c\xe6\xd2\xc7\xc1CE&\nxv\xb9\xd5\x16wB\x1d\x00IG\x07\xb3\x9e\x0ec\xba\xbaA\xed\x1b\xd53\x95\x86\xa9T|\x8ab\xd9;\xc8d\xa5\x92\x92\xfc\xd4\xe7<\x83O\xcc\"\xf7D\xde\xd2\xb2\xd2M` \xdd\xbb\x97\xc6%j\n\x8b\x0b\xa5%gt\xe29\xce\xb3mN\xa6\xb2\x1c\xca\xd2IGP\x19Pwl\xb7\xdd\xb1\xd3\x8e\xcf\x16\xecG\xb2\xea\x92Hz)'O&\xeap\x1a\xa3\xc6\xa6\xce\xd0\x1dK\xe1\x1a\xee\xb9\xfaS\xf23\xdf\\\xd4r\x15a\xcc(:\x07\x0d9U\xc5\xca\x97\xa4$\x91P\xe2\xb8f\x1e\x10\x84 \xafQ\xcf0\x84\x81\x89U#\xe9\xd8\x8f\x9a\xf8\xb3\xc6\x8c\xc4\xbf\x1c\xf9Z\x9d\xeb\xe6\x90wJ\xa9 U\xb4\x87^hS\xca:\x06bA\x1f\xb7\xd4\x1b\xfc;lr^f\xff\xdf\xff\xf3\xffV\xc0\xd6\xd5\x89\xa5\xe9-\x1amt\xcfm\x94IU\xf2t{\x06\xabS\x05\x05\x93\xea\xf2\x81elgR\xc7\xeb,Dy\x7f\x1fX\xb5\xde\xe3g]_.\xe6Q\xb6IAaU\xf2\x1e\xa9\xf9\x95\xb7\xc9Q\x0et\x99\xd4\xac\xce\xd8\xcc\xdc\x14\xacl\x0f\xec\xacf\xc0\xfe\xc0\xc2\x02af\xa1\xdc\xc6\x12a\x9c-\x82+\x0e\xdaCl'-\xe5\xeb/\x15/2\x96j\x06\xc4\x7f\x12\x03\xf7\xb7%oX\xc5\xee\xf6\x92\x99\xebz\xa9\xa5\xbad\x03\xdd\x82\x17X\xd1\x82\x81$A\xb7\xefry\xe4\xc5\x91\x8bcj\x1e\xc5*\xcfS\xce\xb2\xdeo.m\xa9\x8d\x17\x03\xb3\xb7)\xdb NS\xee\xf3\x1bH\xb6\x90`\"s\xf3\x95\xa1\x02x\x96g\x8f\x9b\x0f\xe4\xce\x1b\xea3\xef\x86\x1f\x95-yT\xd0!)\xb4<\xc3\xff\x82\xfc\xa8\xf6\x86\x0cw\xe1>Iy\x9f\xa9 H\xdcb6*}^\x05^\xa3\xddr\x01\x17#\x83`\xe9PAk\x0fl\xd8\x19frc\xbex\x9d\x92\x9dg\xe9\xadunl\xc7\x92\xacN\xa7\xb6\x8e~\xd8U\xc1\xb7I\x9a\xf2\xcd\x19\x9cg\x15\xcft1\x8eS\xc9Q\xe6lqx\xc9yw\xbc\xaa\xdb\x0c\x90mX\x92\xde\xf64\xc8z\xc0\xcb*\x1f\xec2\xdc\xb3\x86\xa0\xf0N3Av\x8c\xb3\x16\x94\xc7\xb9\xd4\x06\x9d\xa2uQ\xc8\xfb\xaco\xdb\x81:\xfb\x1f\xe3\x971\x8b_\x06\x93\xd7\xa1\xe6\xb9\xac\x06 H]V\xecp4\x1e\x06on)\x93Ed<\xf4Rb017k\n\x80\x807\xf9\xfa\xb3\xe4gWB\xe9\x91'I \x12\xe7Y\x0e_\xe2>\x03\xcc\xa3\xa9\xc3\xe8\xff\xc3\x88\x0b?\xba\x1af!\x80\x9bw\xf3\xecd\xa9^\xff\x18^\xdc\xea\x8e\xad\x1fX:\x15?\xbe\xcb\xdf\xf4+S7?\xbe\xb8\xfd\xa9\xc8O\xfd\xc5\x00\xbc\xe7\xd9)\xad\x9e\x8d\xf7>\xee\xe2@\xe8\x92\xb8m\x98\xd3\x94\xaetu\x02\x8cl\x97\x87`=\xe0\x89\x08<\x91B\xcc\x8a\xcb\xda\x12\xad\xcd\x85\x1a\xb3\x0e\xe2\xaf\x8c\xcf]\x806\xeb\x13n\xc1\xc1\xcf\xa3\xfb\x08\xd3gZ\x8ae\xa5K\x85t\x05\xc4\x1b.\x8fS\x9a\xe7\xd2nn0\\\x81\xda\xd6`X\x16[j\x08\xb8\x87\xef\xbaQ\xa0\x97&\xa2u[\\\x12\x99\x02\x86\xdc*\xcd\xb3\x1d/\x1a\xd2W{\xcbJ \n\xa8R\x19&;\x19\xb4\xe6\xb3h\xba\xc6z/\x87SYA\x96Wb\x9d\xb3$\xc5\xfa<\xddmb\xee\x13O\xb1\xb9\xb7O\xddS\xfci\xb87j\xee\x14@`W*\x12\x10\x17\xe1J\x8f\xa1^\x85\x95\xa6\xbf.I\xb4\x92\xaf\x07\xf5\x08l\xc2\xd5\x14\x1frtE\xa6zMa\x13\xbeO\x0d\x07\xfcd\xe9R2\x02\x9d\xdc\xa6vT\xd5\x9e\xb1\x8a\xabHo\xe5@\xea:?\xfd\xa7^\xdc\xb4\x94=\xbd\xcc\xb3M\xa2\xb74\x13\x8bwZWM\xee\xd7_\xba\xa39\x1d\x0dLn\x93l\xb7\\\x86z\xac5\xb2\xd20\xb9\xde\x06f\xaa$T\x8b\xbc%\xacu\xcd\x9d\\\x0e\x9b\xa5g\xb0\xe1G.3\xa8\x06\x08\xe5\xd12HI\x1dv\xda%J|\x84\xc5t\xa4\x82\xebR\x19pM)Oe@7\xdf#,v1\x0fUz]\x10NZ\"\xd5\xd8\xbb\xfa\xbeL@\x95\xa5\x81\x94\xf8\xbd\x1bh3\x02^\xb2\xac-!\xab\x18\x05e\xf2@\x97y\xa7\x0d\x1a\xb5\xef&\xad\xb3\xc1]\x1bc\xda\xf6\x8cF\"\xe84\xcfN\x07\x15\x01\xb1<\xb2d\xb3\xcc\xaf\xbd\xde\xf3\xa2h\x88\x86}h\xeaU\x8f\xba T\xc1\xf5Q\xe1*\xed\xc9\x0c\xf0\xc9\x90\x06\xe3\x93.\xb9\xd8|\xe2\x9a\x10]t~F\x95\xc2\x18\x9bs\x17S\xeet7\x9c\xaba\x96\xe6\xd7N\xa0;\xab\xcc\xa0\xcc\xa5\x05g\x9b.\x7fki,\xcb\xc8\x18\xff\xb33\xc6\xc1n\x90b\xb8\x91\xfd\xb5U\xdd\xe1\xc6\x1a#\xebO\xda\x80\xc12\xb5M\x10\xb7*\x0f'\xb3\x84k\xe4%\xdc\xa2T\x80\xee\xda\xe4\x98\x08\xb2t\xf0\xdd\xec\xf3. JV%\xe5\xf6\x16\xd6\xbc\xa8X\x92\xb5%\x12xY\x0bN\xca\xce\x1eB\xac\xb8\xda\xbf\xcb\xa7\xfb:{\x08\xfb\x9eO\x98\xc3\xfb\xd9\xdf\xe6\xc3y\xd8\xfc\xa1\xeb\xbc<\xe4\xe5B\x05\xc86\xe1\x05<\xe5;?.\xbb\xc1&yP}\xe0Ac\xbd\xa4<[\xe7\x1b!\xe1\xa8?\xabU\xad\xbf\xd7rT]\xb3'\xa4\xf7AcG\xef\xf5\xf7\xbawYJ\xc8\xabKl\xa1\x96\xa5=%\xa9\x11\xe2\x8f*\xfc\xccT<\xb2\xa9\xd8\xd0\xb4\xeaYuWy\xb6Q\x86+t\x0c\xed\x85\xa4\xbb\xba\x95\"\xb2*\xf0\x0c\xe7\xad\n\x12\xf9\x8d*<\x9cg-\x02c\x95\xdeD\xc6\xd9\xe5\xebD\x06\x92\"VA\x88\x1c\x93\x8a\xf2\x1b\xd4\x95\xf2\x8c\xf7\xd7\x83\xb4\xc9\xbc9\xd1\xa6\xb7?\x8d\xcd\xccMa|\xaf\x02\x99%M\xde\xb30\xbeo\xe9#\x99\xbc\x7f\xc1\xb0\x87\xe9\xdd\xfb\xef\xe5\x01\x8anM\xd6\xf9\xf64\xcc\xbd\xaf\xa1\xbf\xb7\x05\xac\xf0\xf5\x9e\xc0\xadH\xbd\x11M*\xb6\x9b\xd1t(\x1b\xacJ7(\xa6h\xd0\xc3\xca\xf745\xd9\xc5\xfa\xda!\xa2\x02\xcb5Ky&\xe3\x81[[\x89\x7fY\xf3\xa3\xd2t\x13\xa9n\n\xdd\xb4\x04\xd6]DHd\xa8%Z\xe3e\xa0\x82\xdc\xbfjV\xe2\xc2/8\x94\xa7\xa4\x12B\x9bT>\xd7\xa9P\x89\xeb\xb8\xd4nDdy:\xf2b\x9b\x9e\x92\xcd\xe2y\x9a>/K^\xf9\xcb]L6\x0b\x92\x0b\xc9\x92\xbb\xd1\xf4c=\xffrDF_\xb6\xdd\xce&'\x8f\xfe\xebl\x93\xacY%\xc9\xca\xa5\xb8#}D5\xa9\x10=\xfaB\xb0d\xd8\x00\x19n\xdd\xbc\x10\xbb.=\x0e-0r\xd9\xa8\xb3\xb1\xf9\xb5\x1f\xc3\x87zL\xf5\xe8\xdf\x99\x07d\xfc\xf6\xcd\xc5\x07\xc38,\x1f\xbf\xcc\xa5XY\x08VdjV\xbb\xba)\x832/C\xaf\xa5\xb6\xf8T2\xf95\x91\xacn\xb0\n\x82j\xaar\\?\x03E\xb4\xb1o\xf6\xf3\xac\xe2\xc5\x81o\x12V\xdc\xaa\x97\x9a\x03\xb6\xbej\xf85m\xfek\x96\xca\x8b\x96\xdc`\x0eu\xb4\x01z\x15\x89#\xdb)\x86\x1et5e\xfcK\xb5\xfc\xcco W\x0e\xd8\x92\xd4a\xf4>\x82V/Zf\x11\xff\x89j\x9az\xcd\xa1\xca\xe1\x82\xed\xf8%\xff\xcb\x89\x97\xd5\x02\x7f\xef!\xd1\x11\x19\\\xa2\x13\x13\xe7p\xc8\xcb\n\xf8v\x9b\xac\x13ip\x94\x92\x81\xf2G\x00?\x1c\xab[H\x0c\xd9\x9c\x05\x86>d9\xb2\xfa\x82\x97\xa7\xb4\xea$\xc3H\xef\x87'Q\x0c\xebh\xe3\x94\xe8\\\x91\xb9\x8d\xe2?\x1aO\x84\x1a\n\xb0k\x96\xa4\xf2\xfa\x19\x8c\xbfM(yp\x96\x98\x15\xd4\xfb\xec\x86\xc92\x9fgB\xf3l\n\x7f\x9e2\xad%\xca\x84\xd5\x9b\xa4\xb4\x14\x1b\xe8\xac!v\xd9\xca\xd1\xc8\x91\xbe+\xbe\x11\xa2g\x92\xc1\xee\xf2\xe2e\x93\xb6q\xe0e)U\xdb:\x8e\xab\x85l\x9d\x17\xf8\xe1\x06\xd35\xe5Lt\x13\xe9v\x91N\xf1\xf64;s\xd3_~\xc8\x0f\xcd\xa0\xfe\xda\x9b\xbd\x84\x82\x1f\xf1a\x92\x17\xac\xa8)\xfb\x03<\xfdW\xd3\xc7\x9d9\xca\xcd\xf5\x03|\xd7\xf9\xf2o6>(x\xe8\xdb:C\xda\x9b\xff \xcdi\xd9\xc84\xcb&\xd9:\xe8Hc\x12\x13n)\xcf\x1d\xdc\xdf\xc0t\xc1\xb5q\x84\xf6\xef\x16\x89\xe3L=\x8e\no.\x9ak]U\n\x95\xffn\xa12M\xdf\xda\xb3\xdd\x80$\xc4\xd7\xf7\xe5!\x7f\xfc\xba\xa6\xec\xe3f\x91\x00\xf3*\xa4p\x87\xa9M\xefz/~\x89Ui\xa1\xbb\xc9\x0b\x99\x90\xd6\xde\x8aU\xc1Y%\xa4\x937\x17\xaa\xd20+a\xcf\xae\x93l\xa7\xea\xf5\xa6i\xed^\x84w\x0bx}\xcd3e:\xaa0J\xb1\x85-Q\x11\x99\x9d\x1e\xe4A\x13dd\xc89\xaf\x92\x03\x7f\xac3\xf1\x1e\xb3k^\xb0\x1d\x7f,\xc6\xfax\xc5\xf0\xe14\x9d.\xc5\xb3*\xe9\x08\x18\xda\xfa\xd8\xee\xa0\x19\xdd\xe3\xa7\x0bxx%\xce\xab\n\xf2\x11\xb8n\xf6\xacz \xa3`O%\xef\x10\x8b\x95\xb0b%\xefU\x8d\xedY\xa5\x8eE\xa2\x9b\x94:\x86\xf3\x11\xfc!\xbf\xe1\xd7\xbc\x90\xe8\xb2\xfc\xe6L\xd3B\x86\xd9\xc8I\xfe\xf9\xf9\x05\xacNU\x878e\xc5\xd9\xc0GT\x1e\xf3J\xf4\xb2\xe6\xba\xfc\xc0*?e\x1bV\xdc.\xe0\xc7\xbchE\xcc\x88\xdd#\x95c\x14\xb4UdA\x0b\xd5\xf6$t\x14\xc1.\x7f\xd3aV\xa7t\xa3\x1e\x84\xb2\n\xfdZB\xf3>\xf9&\x11\xdb\xb8\xcd\xfb\xb2+Mj%\xca\xab\x9e\x92\xaa\x87\x8cj\n\x051\xb4\xa2+\x0b-<\xac\xc3?\xce =\xaa3\x88\x0fU\xe5yz&\x98\xcc\xba5\x8f\xfe\x07\x96\xf5lO\xfd\"\xcf\xd3\x8f%/.\xf22A5\xd4+\x1d\xcb\xcfdyT\x9d\x04\xfa\xb1\x06\xe5\xea\xe9M\xe3\x93(\xf1I\x14\x9f\n\xf9\xf1I\x14\xda\xc4\xc7Wr\x9eZ\xf8\x9e\x95\xf0\xedgj\x9e*\xf8\xf1I\x94\xba\xf2=t\xbc\x18\xcb\xbeq\xd7\x83\xb9\xd2\xb9\xc7\x7f^\x0b2\xb4\xec\xc2KYsi\x13I~\x97$\xb7\xc8N\x99t\xc3\x1b,\x83\xfe\xe21\xb6\xbb\xe3\xe53\x9b\xfa,\x1f\x9b\xcd|\xce\x8bo \xdbP<\x81&\xfa6\xce\x8e\x92L\xc6\xe1\x04\x0d\xe3\xc5M\xb3,\xb7\xe5\xb8\x00\xd93VX\xbf5\x0d\xfeuY%\x07V\xf1F\x05P\xd3\xe1\x9b\xe7\xb2\xfb\x17\xb7\x7f\xd2R\x87\x14p\xbcw\x0c&Wo4\xd6~\xb4-b\xf8%\xed\xca\xf1\x89k\xd3\xc6x_\x1e\xf2\xc6L\xd36\xa5yi[f\xcb\xd7\xa8\x16\xd4\x89\x03\xe4\xee\x82\x0c\xb3X\xb9\xec\x06\xbeVof9m\x0e\xab\x16\xda\xb2\x14\xc2\xc6\xa25\x9f5\xabo\xc9\x9a\xcd\x8a\xd5\xb7`\xcda\xbdj\x9b\x94&\xda\xab\xb4\x95JO\xbbA<\xd5N\xa5\xadS\x9a\xc0\xb5\x8d\x8ab\x9f\xf2/O\x92\x1cN\x87e\x91\x94\x9f\x03\xde\xbb\xe8W)\xe9\xe3j\xfc\x07\xebS%\xe8\xff\xfe\xc3\xdb\xf7m\x97>*d\xf9\x16\xd2\xa3N\x99o\x10\xf6\x9e\x81o\x9dC\x15yt\xd6\xd8\xa7\xbe\xff\x07,\x0f\xa6\x06\x01b\x10\xa0\x06q\x93\x17\x9f\xfbo\x04Ia\x83\x17\x8fu\x94\x80T\xad\xa5\x1cY\xa7)e\x82\xd4I\xf6\xa0\x04\xfe\xe5\x98\x97\xa7B\x1cl\xb8fE\x92\x9f:\xc6)\xb1xm\xf4\xd7\xb9PC\xd2D\x10\x1a\xc3R0\xca\x9f\x95\xbc\xae\\\xb9\xe2\xf0\xa0\xe0eRV,\xab\x1eH\xc4\xba\x95J\xb3W\xdc\xc7U\xe5\xbaE\x95\xfa\xdd\x7f\xd3\xc6\x983N\xb4\xb3\x07\xee\xa1\xf0\xb2}\x8b\xc2\xd8\xfd\xeb\x0c8\x9d\xb2]{\xd8T\xfcRo\xcb\xc2\xac\xdb\x16\xa6m\xdd\x1e&\xb5\x91\x87\xdb\x17f\xdb\xc2pG\xdb\xf8\x92\x97\xd5\x87\xd3\xf1\x98\xdezo\xe5\xa8$\x06\n|\xa1\xe2\x1e\xe6\x0c\x0bQ\xbdQg^\xdc\xbe\xd2a{\xde\x0b\xd8\xa0^\xb6\xcc-\xf7R6\xce\x11e:\xc2\x89\x1cQ\xa1\xa3<\xccjRj\xb7\x1c\xcc\x01F\xe6\x016M\x06\xc6F\x02\xa3Y\x81#\xcd\\\x19\x81\xc1[}\x80i\xca\x8e\x1f \xb3\xe5\x02R\x0eB\x03n3\x15B\\\xc6\x06\xbe\xbae\x1c\x9b\xfa\xc0\xbeQ;\x0eaP\xfb\xa1\xcak\xefg\x8b\x8f\xfd\xc6r\xe0Q3\xa8\x03\xa1\xb5vPV\xa2\xf9\x81\xad\xf7I\x86\xd1\xad\x02y\x01\xdb\"\xe1\xd9&\xed&\x15\x0b\xd5\xd7`\x9d.:\\\x17\xee\x96_\x0e<(\x13v\xbb\x83\x01\x83k\xe7\xc3\x1d\x84\xfc#8Y\xcc$\xb0\xef\x85\xee\xc8\x06i\x05\x08\xc1\x87!\xb2\xfe_\x96\xf5OJX\xe8`j%/\x98vLh\x0eC\x07W'\x9f\x01 \xda\xcf \xfb\xb3\x8dd\xca\xd6\x0c\xb5\x9fC\xbdLn92j\xb2D\xd2S\x08O\xd7dk'\xd6\x8f\xa1~\xac\xfb\xc8\x06\xf2Nq0\xba\x08\x1dm\xac\xeeBc;+\x89?f\xc7+\xc9\xcd\x13\x9a\xc1D\xaa\xe95\xd16Z\xdbC\xa9\x8c\xa3\x8c\xae*r\xcb\xe8\xaa\xfa5\x1b\xba(\xdc\x12!.c\x03_\xdd2\xfe}\xb8\xaa\xa2i\xd2\xb9\x15\xdbH\xa6\xec\xc2P\xd1\x1b \x9a&g'=\x85\xf0\x1e\xa2\xcb\xc4\x00\xfb(\xbf\x98Z\xc6\x8b\x0f&\xee\xfb\x01\xb29.\xbe(\xbf\xfc],\xe3\xaf_~\x19\xe7\xcf\x86T9\xaf\x87t\xdd\x1e\x03R\x06\xd8\x94\x12\xda.+\xd78\x01>f\x9b\xa8]\x07\xb4\x8c\xb7\xd3\xaf\x99\xad\xc5\xdb\xe9\xefb\x19\x7f\xfd\xb7\x13\xd4j\xdb)\x8b\xfa5I\xc5\x9b\xb6\x0f\xa7\xe8\xd7\xddJ=w\xbc@\xae\x9a>\xa3[\xcd\x1fG\xd5\x1f\xdf\xba?\x01\xaf\xe7\xb8Wx\x9e\xfa?\xde\x15\x80\x1cw\xd6,U\x80\xc6\xea\x00\xcd^ \xc8\\\x0bhb5\xa0\x0e&U\x19hX\x0f\xc8\xb3\"\x90I\x0f\x92\xe1\x83Fk\x9d\xb7\xfe\xd3\xb1\x91\x9b\xde\x99\x19U\xc8>\x96\xbc\xe8\xc4\x01\xd5?\xe9\xeawe]\xaf\xc3{h\xebT\xbeM\xb4\x14\xe2\xc8\xb2.tw/\xaaY\xb8\x82e,\xc8\xe7h\xe3|\xeeh6d\xb6\xa2}m\x9c\xdeJ\x83\xfb\xca\x07\x97\x06\xe1\xb8\xfa\x81p\xfd\xc3\x14\x11\xc0\x88M\xd6l\x18\x11\x03`\x1eQ\x00\xc6\xc5\x01p\xd3\xceui\xc0\xbc\xa2\x01L\x15\x0f`DD\x00\xf7t]\xa2\x02\x8c\x8a\x0b0\xaf\xc8\x00n\xb1\x01\x02D\x07\x18\x11\x1f\xc0M\"\xca\x8e\x98K\x94\x80\x10q\x02\x08'z.\xb1\x02\x1c\xa2\x05L\x15/\x06\xd8\xd4\xb8\xcc\"\x06\xcc*f\xc0\xb8\xa8\x01\xbe\xe2F\x03\xd1T\xf8k\xb61ES\xe1\xafz\x19\x03\x85\xed\xc6-\x92\xed\xa2\xbc\x1d$\"Gy\x1b\xc1u\xe8 \xca\xdbQ\xdenPDy\xdb\xb5#\xa2\xbc\xdd\x82(oGy\xfb\xefBPk \xca\xdb\xbf\xe2e\xac\xe5m9\x19,\x9dx\xdbz\x928\xcb\x0f\xcfO\xd5>/\x92\xea\xf6-\xaf\xd8\x86U\x8c,X\xb3\xcd!\x19\xbc\xb5\xd7\xa3\xbc\xba@_b5`|\x87\x0e\xab\xc7bs\x99\xba\xca\xf0\xa6\x97)\xf2\xa5 \x12\xde\xf6\x12\x89\xf9\n2\x8f\x1c\xca#_'\xdb\x84\x97\x82h\xf8\xa7m#=\xc8\x9ceV\xa18\xa5>\xd5Lw\xcd\x8el\xa5J:B~\xcd\x8bz\x03(\xa2\xe1\x0eX\xc0e\xb2\xdbW\x90\xe57\x80\xaf\xe7%%\xe4Y\x8aEs\x9e\x8b\x19)\x84G^\x1c\x92\xb2\x94\x8cY\x16\xc4-\xe1\x98\xb2,\xab\x9fe\xe7_\xb04\xb0\xaeG\x8cum\xdd\x8b\xe6Y\xc3V\x0e{\xa9\xaf\x90\xe5\x96\xdfyY+\x1f\xdfo\x8cd0L\xad\xc3\x9a\xe4N\x7f\xa9\x96\xefG\xce;\xa5d\xb7\x9c\xeb\x92\xac{V\xec\xea*\xce\xb5\xc8 ccZ\xd82~\xf3\x9b\x0eE\xe5\x9e\xbeR\xa8\x92\x126\x05\xbb\xc9`[HA\x9e\xc3\xdbr'\xfb\xe6r\x18\x0f\x84\xdc)t\x10\x1dl#\x8bC\xb5\x11V\x05\xcb\xca-/\x8af_\xaf\xf3\xc3\xe1\x94%\xd5\xad\xccD_\x98\xb7\xe5\x8e\x95\xcbu\x9e\x95\xa7\x83\xeb\xfd/\x8b\x82g\xdf\x1b\x1d\x02\xfe\xc4\xca\x97\xd8M\x87\x8e;V\xc2:/+\xac\x0e\xa4\xc5C\xd6\xc8\x82\xed+\xf1J\xd5\xbc\xd6\xb5\xbd\x85\xfc#X\x0f;\xc0\x86Wb\xee\xd9\x9a\xc3\x81\xaf\xf7,K\xcaCg\x8f}\xe0\xfc\x19\xec\xab\xeaX>{\xf2d\x97T\xfb\xd3j\xb1\xce\x0fO^\xe6\xe5\xe1\xcf\xac<<\x91\x1b\xf7\xb1:\xf3O\x92\xb2<\xf1\xf2\xc9\xd3\xa7CVx1ZXX\x17\x8ems\x90V\x99\xe1q\x0e#\xeb\x8c\xd6\x17\xfaa\x0e\xc1\xbf\xdfI6\xa0\nY\x15\x00\xa2:\x00c[*\xf8\xe9\xd4\x89\xea\x81\x91\xae}R\xf8k\x0c=\x04\xf3\xa9\x0d\x06\x06\xa9\x0d\xf75k\x16D\xae5\x08\xd9\xe0\x89\xd26\x04'\xc63\xd0e\xc5_\xb6\x9c\x97\x86\x0b\xeb\xc31\xaf.\x8ad\xed\xff\x1ety\xcc\xab\xa5|&hD\x08\xed{g\x8c\x1dw\xef\xa0]q\\\xdb.!y\xc74\x1bK\x0cA/\x04>XT?\xc7\xa1$\xa4\x0dT_\xe4\xf9\x91\xcb\xee\xa2\xc8\xeb\xe4\xf8\x82\x95\xfcG\xeeO\x8d\x15+\xb9\xc9tS\xd3b\xb4\xe3\x1f9\xbf\x12\xfb\xc3\xffJ\xdcr\xbe\x94[k\xa2\xdc\xb0\x96\xc2\xe9BL\xa3e|\\\x0b.O\x1eK\xefv2p\x82\xfeMD\x14^\xd4@\xe8\xd7\x0dl\xf8:9\xb0\xb4oD\x1a\xbdj^\xf15\xdd|D\xb9O\x9aP\nY\xd8X\xbd;\x13j&\xc4'\xbe\x96\x05\xab\xc6\x0d0\xb5Gn9t+\x1a>/O\xc7c^T|3\xcb6\x82f\xa0\xf8\xc0]\xb2\xe1Y%N\xe2x>o3h\xaff\x07\xf6e\xa9\xc8j)\xdaa\xb1M\xadn+\xee^\xa19eU\x0fI\xd3\xb8\xd2`\xbf[\xc7V|\xa4\x99}\xe5!L\x9c\x1d\xf4\xe0\xdc #m);b\xa4\xf9\xd8\xce\x18i\x16\xb6C\xf2<\xf5\xdf\x1fy\x9e\x06\xed\x0e\x83\x0e`\x99\x0cfX\xa0K\x90\xd4`0\xfb\x1e&\xc33\x0cTLT:\x06\x1c4\xd1*\x88k\xdd\x91\xc7\xc4N\xf6\x91FV\xd2\x8f\x11\xdf\x07\x1fe\x01.\xe5y\xbd\xe0E\xdc\xd14L\xc8\xe0\xeex\xd2d\xf6e\xf7\xb0\xf8IO_]\xa1(\xfb\x8e\xc5|4\xb1\x1f\x8a2t\xdf\x96\xd8\xfc\x8eWq\xed\\D\xdf\xf9\xce5\xd1_\x92W\x1a\xa8\x12D\x97\x8f%/$Y\xc2\x88\x12\xb6\xf8\x94w\xd15L\xe54\xa0\x9f\x8c\xf6D1\xac\xfa?N\xc4f\x83\xcdD\xc9_rw\xcd\x16\xbb0\x9b\x02\x8a0\x9f\x1a\x8a0\x177\xad7\xc0G-|{o\x82\xa4.\x06\x05w\xb4\x05|\xe3\xf4\xbd6\x01\x8c b~\x9b\x0f\x15\x98\xa5\xe1\xd0\x92z\xf7=\xb8\xf3.\xd9\xec\xfc\x8f,\xc4\x80}\x05\xe8\x97\xad\x9d\xf6\xce>\x89t\xff\x80\xff\xbe\xa8e^\x02\xa1\xdd\xf61\xb3|k\x1c\xb3\x81Ff\x99\x96\xd2\xda1\xd9\xb6\xd41\xe3l\xd7\xa3\x06\x1b\xc7\x98\xea\xfd\xeeU~\xce\x1d6A0R\x82\x99\xfc\xee \x9b\xb7\xe5(~\xe2v\xac\xe5\x9fY)\x11\xb2\x95`(\xa8\xcc1\xc1\xb7\xe5N\xce\xef\xaae\xaa\"\xcc\x12E\xde\x80\xe5&1@:C\"\xb3\xbf\xff\\:\\wU\xbdo\xae\xb8\xba\xbf\xec\xea\xc2\xd7{e\xbd-w\x1f\xb32r\x8c_\xdd\x9e\xf2\\\xd7\xff\xcc\xd0\xb2J\x0e\xb2\xb0e7q\x96\xbcW;\x9f\xb8\xe5\xd2u\xca\x92\xc32)\x97G\xde\x9a{\xf3\xf1*\xcfS\xcet\xde\x0c\xfa\xe3\xb2\xd3a\xe5\x98\x90!\xe6gH\xf7\x97:\xe2\x08m\xb7\xab\xda\xe9I }!?w\xbb\xc4\xeb8\x14\xc4\x0fG^\xacyV\xb1\x1d\xc78\x1f},\x1e\xf2\xc5n\x01\xdf.\xbe\x93q$\xdf}\xfb\x0f\x8f\x14\x824\xf9\xcb)\xd9\xe8\xec\xba\xb2B\x8f)\xcd\xe5\xac\xba~'\xe9%\xb3I+d]\xf5c\xe3MLW7\xfcJu\x8b,\xeb7-\\5\x170\x10\xaf\xfd\xf6c\x99\xfc\xccu\xe4\xa3\x0b5\xc0\xc3\x9aa\xf0\x0d$Y=\xceG\x92y`\xfc\x91\xecA\xd0\xbbC8\xe3\xc2\xbe\x16\xdb\xe4\xaa`\xeb\x9a\xdd\x12V\xd4\xcb\xfb?e#\x82L\xb5\xf9R)\xef\xb2L\\v\x9f6\x0b\"R\xa0\x05\xe94\xfc!/\xab\xff\x9dg\xf4#\xb0\xde\xb3$s\x17B\xd7q\xea\xe2k8\x7f\xa57\xc5>/+\xf8\xb9 \xe2^\xf1\xf5\xfew\xdf\x1d\x0b\xbeM\xbe\xd00\xbe\x90-\x00\x9b\x08\xb45\xca\x07\xfd@\xf7u\x9ee|]\xf5Kf\x8c\x8e\xb7nr\xfe\nO\xc9\x87\xaaH6\\\x87+\xd6\x9d\xc1C\xac\x00\x91\xeb\xd2\xc2\xf2\xab2\xd9p}\x84u\xb0\xe3r\xbdgY\xc6S\xf2\x18:\xf1\x88W\n\x8b\xa0\xa4\xc0\x02!\xe3j\xe1k\x8f0Y\xad\xfb\x85!\xc6\xc6\x95\xact=\x87\xfeb>({\x0f\xe3f\xdd\x8e\xc5\x87>=)d\xaa\xb3l\xb0k\x9a\x8b\xeb\xc8\x8b$w\xd1\xd5\x12\x08\xaa:\xbb\x925\x94\x14\x8b\x88\xa5p\xbeIx\x97\x1d\x94\xe2\xba\xc2\xe8h\x83\x10 t\x87M\xc1nX\xbaL\xd6\xcc\xaf\xf3\xf3\x97\xcf\xeb\x01(\x86\xd70B\x15\xd1\x9b\xacR\x8c\xd2]\xe7i*X{\xb6SQ\x14\xfa\x9a\xd8r~\xe7]\x1fTVRM\xeaz\x03\xddm\xcfJ\x9b\x95\x02\xd5)S\xffR\x18\x0b\xbe\xe1\x87c\xd8 :wT{Dr\x1f(9\xb3T]\xcaM&7\x02\xdbV\xf8\xb6\xf5\xed\x83k\x0e\xdb$K\xca=o\xabq5#V\x7f\xab\x85H\xac\xd7\xa5\xb7\xe8]\x8dW\x0dS^\xb0\xac/\xc1V\xb9i\xff\x82,\xf1\xd2Vl\x05]\xf9\x01\xceU\x16\x06+\xd5\xab\xdb\xed\xc6g&\x11Y\xcd\xae]b\x06\xcfQ'\x9d\x1a\x878\xc0\xde\xac&\x15\xb7\x16\xb7\xcd\xa4.xu*f\xdf\x19\x9bD\xb4Z\x9d\xaa\x86\xd8+\x865\x80L\x83>\xf5x&\xeb\xe4\x12\xda\x15\x0c\xc8\x0b\xda2\xb4 \xbb\xe7\xddU\x14\xf3\xd7w\xab\xccuQc\xad\xd5)\xd7\x1a\x0c\xb0\xb5\xf1\x1b\x10w\x98\xa6yU\xe4\xa8\x97\xfb<\x95\xd2O\xf8\xc2\xbc\x95ii\xf5\x03\x19yV\xcb\x93\x9d\xf3\xd0e\xe3\xb5\xd6\xa86Sw\xa1;\x93\xcb6\x1d:K\xed\xf0`\xdbhb\x9d\xeeoN\xf5\xf2\xf5\xa7#'\xd1\x99\xc3\xf0T\x8fM\xa4*8+O\xc5\xed\x84)\xbc\x97\x9b\x87\xa5\xfd\xbd\xad7K\x95\xcb\xfd\xa2\x17\xa4\xca\x15Gm\xf1\xaa\x166\xf9\xcc\x7f\xeb\xdf\xa6\x13\x82\xdb\x15\xce\xb7X\x93Nw\x94\x94\x98[\x8c\xbcDs\xefN\x89\xae\x92g\x95\x10\x1e\xbaG\x08\x0eB\xe1\xeb\x0e_}A\xaf\xbf\xae\xfe\xd8\xc8\xe7\xb2iKfY\xb1\x94ek>\xb8\xffT\xdb\x94\x95\xd5\xb2u\xbd\xd1\xed5W\xd2\xe8P\x93E\x1a\x1e\xea}r,\xf8u\x92\x9fJ\xb4\x03\xa8\xa6\xc1\xdd\xacOE!H\xd8\xebN}zH\xb2\xb0\x19t\x0c\xb6\xa2\x9fC\x92A~\x12\xbb\xa4?\xb1U~\xca6\xf0X\xe8\xc9U!\xa4\xa3\x0d\xe6X\xaf8\xec\xf2k^d\x82\xc6\x06lI\x96\xf1B\xb5^\xb3,\xcb+\xe0_\xd6\\\\\xf3b\x0f\xc9\x1f\xf44\xd8\x97\xb9\xa6\xc1\xbe\xcc9\x0d\xf6\xc5k\x1aI\xb6\x94\x9f\xcf5\x99$\x13\xff\xcbh\xb3Y\xdd\xca\xed\xc7Z\xa5\x84\x04\x9co\x95\x8d\xac\x8b\x00\xe7P\xb6&q\xd6\x13\x12\x93\x12\xf6,\xadx{\x91f\x9d\x1d\xfb\xf2\x95\xcd\xee\xc0\xcb\x92 5\xed\xc8\x0b)\xd2T.k\xd3\xb8\xcd\xc08\xe5\xac6\xb8\xea\xee\x94V\x84\xb5\x1a$\xbf\x94\x8fN5,\xb0\x85E\x96\x8cl~\x91\xa2S\xf5e\xc0d\xca%\xcf\xd8*\x1d:/,:\xe0\xb9z5\xab\x84\x9b=\xaf\xf6\x9d%\x91\x1c\x1dX\x9a\xe67r\xd3\x17\xf9i\xb7G\xcab\xda\xbaB6\xb8\xb0W\xdd\xbda\xa0\xc9\xf3\x0cr}\x97m\xb96\xe4\x0e\x96\x17\x0b;d\xb96\xf4\xeal\xcaz5\xb1\xf0%\xdc$i*h\x98%io\xda$'\x99\xd1l\x0f\xb6\xa5\x07\x98l\xbe\x07\xba \x9f2\x8cYL\xf9\x00iyX\xb6G\xe5\xb9\x95\x9e\xeb\x1f\xf4SlB\xb1\xd4\xbbJ\x8e@\x1a{\xf7\xac\x847\x1f\xde\x82B\xae\xb0\xe0\x91\x9c\xb7\xa7\xa4\xd4\x97hz\xdb>\xf3\xb5-\xb7\xe0\x80\xe5K\xea\x9c^\xa1g\x14B\xd6n\x91G \x17{\xad4\x1a\xc8\xcf_>W\xcf\x8e\xe2\xe0\x07\xdb.\xd0D.\xff4\xce\x83xv\xea\xb8v\x1f\xc3\xab\xd7o^\xff\xf4\xfc\xea\xfc\xfd\xbb\xce\x9f\x7f|\xfd\xba\xf3\xef?\x9f_\xfd\xe1\xd5\xe5\xf3??\x7f\xd3\xf9\xf3\xe5\xebW\xaf\xdf^\x0cZ\xbf|\xff\xf6\xed\xc7w\xe7W\xffky\xf1\xfe\xfd\x9b\xe5\xab\xd7\x17\xef?\x9c_\x8d}r\xf9\xfa\xea\xe3e\x1f\xc9\xbb?\xbd\xbe\xbcz}\xb9\xfc\xf8\xee\xcf\xe7\xef^Y~\xbc\xba|\xfe\xaa\x19\xeb\x86o\xd9)\xad\x9e\x0d\xe7E7\xdd\xbb\x84\xed\xb1\x15\xbd\xaa\xd7`\x80\xb8M{\x03\xdd\xdb47\xd0\xdb@k\x07\x9d\xc7il\xa5\xaf\x99\xb6f\xba\x0e)\x11\x94\x10\\.\x93\xac\xe2\xc55\x1b\xe4^y]\xa1\x18C\x80\xa24\xa4<\xdbU\xfb\xf2\x0c\xbd\x80BiC7\x99\xd6\x82\xb5\xe4?\xa9\xeb\xdax4\x01GO@\x9a\x84K\xaf\xc7\xb21\x0f\x86\xa0)x\x92]\xf3r\xda\xbc\xa4L\x94\x1cx~\xaa\x96\x19\xcbr\x97nfD\xb2:m\xb7\xbcX\x96\xc9\xcf.\xcef\x1e\xc3j]\x8fa\x95\x9a\xdeo\xa4`\x91\xf5 \xb4\xebm\xf2\x94tV/Z\x88\xd7,MQ\x86\xf4 8\xedmBy4\x97\x06\xfdnY\xed\x0b^\xee\xf34\xc8\x9fU#\x1ej\\\xd3\x10\xcbe\x99\x8d\xa0\xcd\xf3\x07m\x0f\xc7\xa4\x016(\xd1\xb1\xb5\\\xb3\xa3?\x9e\xbe\x14K+\xa6\xd8-\xef\x94\xf1/\x15$\x9bg\xf0\xdd\xb7F~\x8b\xc5\x03{q?\xfe\x11e\xea\xca[\xd6\xc6\xf2;vF\xfa\xfa\x17\x87\xc1G\x8e\x06\xee@$\x07\x02\xcf\x94\x1b\xbf\xbc\x1a{\xb0R\xbba_\x94\x05k\xbcH\xbb\x95\xa1;R\xd8\x86.C\xd9\x8ey\xf1\xdeG8\xbc\x81\xe7\xf5.\xb6\xd0xI\x85\x11j\xccE\xc2\x06\x1cA8SP\x07\xbc\x82\xea\xb1\xd6:T\xc7{\x9de\xf8\xc5\xcfu\x90\x0f\xdc\xd1\x1a\x0f\xd5\x9e6\x1a\xe3\xec\xb5\xa6\xe6\x88\x12B0\xc7\nQ\xfb\xf0\x88\x1bB\xb0\xa8 \xd4\xfe\x8c\x15\xec\xa6\x04\x17\x0d\xd0\xb5Cy\x10FC\x8e\xd4'!\x03\x9f\x16\x844\x1c\xf80X\n\xc1\x10\x90\x84\xe0\x1euxp\x12\x82)D\x89\xda\xb7+\\ \xc1\x1e\xb4\xe4\xecg\x84\xe5t\\\n\xe40&\x04S0\x93\xc2i`\x0f\x08\xc6ju\x9e!V\x08\xd6@\xabv\xb7c\x0cgr\xd0\x15\x82+\xf4\x8a:\x1c\xaf\x88$k\x18\x16\x825\x18\xeb\x8e\x06\xd3\x0b\xccBp\x85gQ\xc7b\xb8J\xbd\x86\xd7\x8a\xde\x1a \xeaGs!\xb8b\xba\x10&\x8f|b\x94\x17B?\xd6\x0b\xc1'\xe2\x0ba\xe6\xd9\xd0b\xc0\x06\x08uT\xc5\xb0\x120)\x10\xc9\xe0\xc2\x19 \xd21\\\x86\xa80\x84\xf9b\xc3\x10z\x11b\x08\x1eqb\x08\xf3\xac\x8fW\xe4\xd8\x90t\x8a\x19\x0ei6)\x8a\xcc\xbc\x0b0\xf8\xcb\xb0\x0f&E\x94\x0dW[\xba\xc7\xfbqe\x08\xc4\xe82\x04\xbf\x183\x84\xa0E%Fh\x99\xa3\xcel\xc7\xa1\x1f{\x860\x1a\x81\x86\xe0\x19\x87\x86p\x97\xf3\xb6F\xa6\x19O\x87\xa1\xbe\xb61J\x0d\x81\x1c\xab\x86\x104\xcd\xe0\xe85\xc7\xa1\x1cNsb$\xdbp\xb7\x14\xdc\x14\xcf\x86P\x8dF\xb5\xa9o\xec\xb1m\xea\x03'A\x03\xe2\xdc\x10\xc6\xa3\xdd|\xba\xf7\x8b|C\x98\xa5\xe3\xf1X8\x84\xd1\x888jg&\xe3F`\x8c\xdc\x00Q+\xd8\xcc\xda\x89G\xcc\x19\xc2h\x00\x1dB\xf8\xac\x03B\xea\xfcg\xed\x17i\x87@\x88\xb7C\x08\x9f{x\x04\xde\x00\xdf\x84P\xb5\x01\xaeN\xe8\x1a\x02!<\x0f!\x9c\x18\xe1\x01{\xbf\x041F\xa3\xf9\x10&\x1a\xd3\x0c\xef\x1a\xcf\x13\xe5\x870\x1a\xeb\x870\x1a\xf1\x87@0O\xcc\x11\xfd\x87\xe0\x88\x01\xec\xf4j\xa0\x9e3\x1e\x10azT \xc2\x889r\xcc\x18i\x8d\x13DpX\x9f\xd4\xec\xa7\xc4\x0c\"xD\x0e\xaa\x9eI\x03\xb3\xbcX\x1e\x1e\\hD743\xb9\xc3\x0e\x11\x08\xfb\x99\x18\x18h\x0eAD\xe8\x07\"\xce\xdd\xb7-(\xb1\x83+$4Q\xc0\x91\xedT}\x95f\x02\xc6\xbdn\xde\xe5\xd2\xf5\xf9\x99\xdfvgo\xdd=\x9aS\x1a\xeaR\x8e\xbd\x01\xaf{\xd1\x8f\xc8\x88\xff\xc4\x07\x8a\x8e\xac,\xf1\xe9\x9f\x0b\xb6\xd3\xef\xb0,\xf0\xf7\x1e\x12|P\\4\x97A\x15Gq\x8e\x0e\xe2\xfc\xf3\xed6Y'\x92\xbc\x0b8\xafj& \x85|H\xfaO\x1d!;\x11\x9c.\xcb\xe1 \xc8^\xf0\xf2\x94Ve\xfb\xa9!)v{\x12\xc5p}\xd8\xce\x19J\xf5\x82\x1a\xf2?\x9a\x1bD\x0d\x05\xd85KR\xb1U\x87\xe3o\x13Jj\x8fK\x89\xa4\x7f\xef\xde0\xf9\xfe\xff\x19$U\x89o\xfe\x8b\xfe\xc4%\xb3M2!\xbd :\xdc$e\xb3\x8e\xf65\xc4.[\x0f\x01\xe1\xc3y\x87\x15\xdfl\xb0P\x87|~\xad~1\xa7\xbe\x07\xf1\xb1\xfc\xae\xaa\xbe\xce\x0b\xfcp\x83\x16_|zG5\x91\x07\xf5$\xb6D{\x9a\x9d\xb9\xe9/?\xe4\x87fP\x7f5q\x9e\x82\x1f\xb9T\x9a^\xb0\xa2\xa6\xec\x0f\xf0\xf4_M\x1fw\xe6(7\xd7\x0f\xf0]\xe7\xcb\xbf\x8d\xfa\xe2\xaf\n\xb6\xe1\x97Bx\xf6\x0f\xdf\xa9D\xdbe!\x1b\xf7\x8f\xf1\xbc\x1ey\xf5\x1c\x86tL.\xf3li\x08\x04h\xe3\x1d\x93\x1c\x1b\xff\xaa\xbe\x8d\x11\xf9\xb8j\xda\x1f\x80\xfaw\xd8\x10\xca}~J7b/J\xb6\xd0v\xba\xf6\xc6$9\xf1\xe8@p\x0d\xc2\xc61p5w)!Q\xe3\x10\xce \xc9\x8e\xa7J\xdb(\xcb\x1bv\xec\xa0l\x9c\xces\x8c\xa9\xed\xf8\xae}\xd1\x83\x11\xe5\xa7J\x0c\xa9\xbe\xd9\x1d\x83\x9a\xb0e\xba\xebU\xb2\x83\x94\x84Zk7\x1c\xa9\xfc\xcbp\xf5\xe4 \xd8\xda\\\xbb\xdd*s6q\xdeCO\x8b\xacX\xd6Z;\x8b]H\xbf\xd2\xd6\x9f@\x17\x11\xfa\xd0\xd0(\x87\x1d\x1ai\xe5-\x8e\xda\x02j\xc0%\xf2\xc9\x1f}\x1b\x0d\xf3\x0d\x1a\xb0d\x1e\xb4?\xe8\xe6 \xb4\x7f1f#\xb4?0\xe6%\xb4?pf(\x8c|<\xc8U\xe8~k\xcdZ0\x7f\xd6\xcd_h\xc0\x9e\xc9\xd0\xc0h@\x11\xb8\x96g$\xda\xc1\xdaNq\xbd\x19N\x8e:&r\xcbKu7)\x81\xad\x85\xe8\x82\x07B\xc6\x9e\x1f\xf8&1iu:\x1eTs(\x1d\xa6\x84L\xa89K(\x01o\xf8\xf0\x1e\x89G(\x1e!\xf8E\x8e\x10^\xcaSNP\xdf\xa9\xcf\xbf\xf0\xf5I*\x8f\xfa\xfaEU@\x1c\xb0\xe16T\x0e\xa1\xbc\xc0sb\xbc\xa7\xe2\xd9\x88g\xe3\x978\x1bR,\xabr-\xd5\xcf\x1ct\xaacM\xfb\xe7\xa7s\x83\xd4'\xc7\xe9-\x16\x83\x1dZ\xab\xeb{\xa7{\xc7-:\x92\xdf\xba\x89z\x1d\xd5v@\x05\xe5v\xfe\xa8\x88S\xe5J\xbe\xff\xba\xa9\xa4\xd8\xd0(\x9d\x9a;\xdaE&\x0bS\x93\xc8\x06\x84B\xf2T9\xaa\x1c\xbf\x10\x99ZL\xd6N$9R3\x8d\xce:A)\xf56q\x11\n1\x9a\x10\x0e\xe9tH\xb2&\x1f\xcb3\xf1e\xec\xcaz\x9bd\xc9\xe1t\xd0\xd5\x98{{\x06\xa5\xbe\xc3\xa9\xac\x84B\xc7\xd6\xeb\xd3\xe1\x94\xa2\x8f\x9ao\xf3\xc2@\xa4N\xdd\x18\xd3\xd3\xdf\xb8\x8f\xbaEw\xf46X\xe7\xd96\x19d\xda\x8c\xdb\x1d\xa1~\x84Y\x91Y\xe2P)\x19\x90q\xbe\xc1\xbe\xf1\x02\xe6f\xedW\xa29\xad\xf7B\xb0\x95\x9e\x8eds\x06e\x9a\x1c\x8fl\xc7\xcf\xa4\xdb\x10\xc7\x8dd:\x03^\xad\x17d\x1a\xbf\xe2\xc7\x82\xaf\x05\xd9\xce\x1a\x12\x94\xca\x8d\x0f\xc7\xbcR\x0f\x87'x\xf2uT\xe1:\xcf\xaeyQ\xb5/\"\xb4\x8c\xe0a1bk\xec'Cf$\x00M=*P\x1b~hM\x0c~[[\xa6\xa4ig\\\xe9\x0cX\xcc8\xd5\xeaA\xcb\x8b(\x94g\x158%\xfd\xcd\xca\xb8f\xc4\x96\x8a\x9d\x91\xb4\xef\x16\xfb\n\xaf\xd9\x11\xeb\xe6\xafre\x13\x13\xb3\xc4\xdbO3>\x19N\xa7\"b\xe5\xda\x1b\xd1!U\x9b\xfc\x1a\xe3G\xdf.\xbe\xfd\x1e\x0e\x9ce\xea\xfc\xf6\xcc\x91\xea(\xa33]01\x15\x00\x9a\x19\xa2\xc4\x04|\xff\x0f\xb0\xe1\xd7 \xfa\xd9\x8d_4>L\x15d$\xb7\xf4p\xad\x93\x0c\xd7\xf8\x8e\xdc\xac\xe2\xe6\x10T<\xb0/P\xf2\nc X!.\xab\xe6\xaam\x8c\xa1-\x8evc\xa6\xb6t|\xc9\xfb\xcb\xde_Z\xe6\xd2\xf1\xbcA\xefL\xd6\xbb\xd2\xd5\x9d\x8c\x17\xd0M^T{0\x04\x1b\nx\xd8\xd8l8/\x87.k\x99'\x1fD=3\xd5\x1a\xff\n\x14\xe2\xce,\xe5\x03\x10\x0c\n\x19\x8eR\x15\xc9\x11\x92l\x9d\x9e\xa4W)\xc9\xb6\xb9\"\x1a\x8e\xb1\x1f/\xbf\xcfo\x04\x1f\xdd\xf4\x82\xfb\xb4\x00 \xfd\x88\x07\x1d$\n\xac,O*t\xa5f\x18\x1d\xba\x89\xab%\xbda\xb7\xbd\xcc\x85\xbc\xe0\xc9.\x1b\x84\x10\xd6\x82 ^\xd8\x85\x14\x97\xe4_\xb7I!\xa4\xcd\x9b\x1c\xf6\xf9Q\x89I9\x9c\xb2\x9bD\x95\xbf\xaf=\x0d\x1d\x84<\x93\xbe\xa3^/\x1di@\xee\x1b]D_\xb2\xb8}~\xd4W\xa6\x8aC.s\xd8\x9e\x04W\x94Y\xb0Ox\x8ff\xc8=\xba\x9dhc7\xda\xbaU\xa6\xdb\xff\x16jPw\xf10gQ\xf9\xb5\x93\x12>\xf3\xdb\x07\xd2?\xd2\xd9\xe6b|-\x17\x00v\x98\x14\x1dT\xcaS \xb8~\xef\x96z\x98,\xf8b\xcc\xc1T\xe3783\x1e\xd9\x9d{?\xf1\xea\xee\x92\xaaI^\xfa\xa0\xe7\xe7\xedy\xd2V\xaee\xbdJ \x19\xd2\xfeH\xcd\xb9\xd1t<\xf6\xe5\x9a?/\x9a\xb4Lf\xf3\x99\xdd\x90\xa8\"?\x08\xa9\xce\xf6Dg\x17v\xcf$\xe7\x11\x93\x91\xab\xa7\xc1-7krs?5\xd8\x99\xd8\xec=\xdcYS\x9aKsB\xb3%\x9d\xd95\xd6i\xa9\xcc{K\"\xb3\xabWJ\x12\xf3x\n3\xfd,\xb7\xda`\xe7\xde\xc9\xcb\xb6\xd4e\x1c\xc30q\xd9\x98\xb6\x1c\xa8\x04\xdb\x12\x96g\xb7\xaf\xc2h\xa2\xf24Ei\x1eM=\x9ey\x18\x86\xb4cJ\xd2\xf1\xac\xa3(G\xde\x86\x00b.\xb1k@\x83{w\xe6,bS\x0e\xb1o\x06\xf1\x8cs\x08\xca\x1d\xb6e\x0e\x87\xe6\x0d\xdb\xf2y\xcdY\xc3\xf3\xe6\x0c\x1b2\x86=\xf3\x85\xa7\xaf\xc6\x94La[\x9e\xf0\x9cY\xc2\xf6\x1c\xe1y3\x84+k~\xb0Gv\xb0\x7fn\xb0\xf7\x02\x12\xb3cIY\xc1#9\xc1\xce\x8c\xe0\x80|\xe0\xbb\x9a+5\x13\xd8\x92\x07l\xc9\x02\xf6\xca\x01\xf6\x9e\xda\\\xd9\xbf\xe3\xb9\xbf\xf3f\xfe\x8e\xe4\xfdV\xce\xac_G\xce\xaf\x8b\x80\x81\xf9\xbe\xeel_J\xc7\xfe\x99\xbe\x93\xbbt\xe7\xf8:3|]\xdd\x0c\xb5\xfcyr{\xed9\xae\x81y\xbd\xce\xac\xde\xb0\x99N\xcf\xe7u\xcc\xd4?\x97\x97\x98\xc9\xeb\x9a\xef\xc0\x97>1\x87\xb7\x8blB\xce\xea0\xc5\x8b\x98\xae\x1b6\xe3\xf0D\xdd.\xb2\xd9g\xec\xcc\xc9\x9d`\x1d\xb2\x92bz.\xae3\x13\xd7\x99\x87\xeb\xd4\xcc\xe7\xca\xc1%d\xe0\xda\xe8E\xca\xbe\x9d'\xf7\xd6jS\xb3[\xd4F\xb3nG\x0d,j\xbeS3n=\xf3m)C2:\x81g\xcd\xb4\xed\xdbRhY\xb6\xce\xddJ\xccr\xb5g\xd8\x9a\xf2k\xe7\xeau,\xb7V\xfbW\x022k\xed\xae\xa5w\xfcKu\xc1\xd6\x9fy\xf5\x81\xff\xe5\xc4\xb3\xb5\xbf\x93\xa9T\x0d\x1b\x8a\x18\xf7\x0f\xd5\xdfu\x9eU\xbc\x90\xd4P\xf1\xe5?\x16\xf9A\xa9\xbf\xdecKjd:\xc2\x9d\xf0v]\x9f\xc9\x90\x87\xa5n\x1c\xfd\x8f\xdbc\xcd]\xda\x98\x9e\x0cPi\xe5\xfe\xf2\xe2\xa5\x9d.\xa8X\x85\x12B\xcc\xda:eK\x8fX \xde\xbb\xabc\xeb\xcd\x0d\xe8\xc74\xe2\x8f t\xceR\\\x0b(\x927e\xe7\xf3m\xfbrX\xf4FLr[\xda\x1f\xf1\x80i\xb7\xb4\xd7\x83\x1e0\xfe\xa8\x07\x04\x0d\xc5\xfe\xc0G\x18\xbe\x9e\xfc6\x1b\xde\xd1\x87?\xc2P\x8e<\x02\x12\x86p\xe4A\x900\x84\xc6\xc7A\xc2P\x8d=\x14\x12\x86\x91\xf2hH\x18f\xe2\x03\"a\xc8=\x1f\x13\x99\xd8 \xeda\x91\xb0N(\x8f\x8c\x84a&?82\x15\xbd\xe9\xf1\x91\x10\x9c&!>\xe41\x12\x18\x9dM\x13\x1c\x86\xdd\x0e\xb9n\xe1\x1b\x04_\x87\x87\\\xd7\xe1\xd5-l\xe5 \xd0:<\xbc\x1a\xbe\xff\x87\x16\x1ecP\xf5h(\xb55\x80\x9aL\xfc)!\xd2\xe6p\xe8\xe0 \xe8&\xe0\xb9=\xfdV\xe8\xb35\xe0y0\xdb\x0e\xcf\xfdP\xe5b\xdd1\xf5$\xc331\x9e\x9d\x04,\xcde\x0c\x05\xce\x17C\x7f\xc1\xc0^\xba\xb9Eb\x97\xb9r\x82\xa0L\xb25\xf6\xa2\x19\x84\xa0\x81#\x0b\xc9\xc2\xeee\xb06\x99\xdb\x13*\xd3\x8cm\x1b\xdfj4\xa4:4c\x1d\x86\xd5\x9e\xa1T\x9d\xa1M3\xbc\xd2\xcc\xdeYc\xc65\x82\xc9ue,A\xd8\xb4\x11\xccQEfo\xac\x1fc\xba\x9f'\xd5\x8c\x99\\-\xc6C\x8d\xf7\x8a>\x96\x7f\xa6|hN\xd2\x1fI\xcf7%\xe6\x8f\xa4\xe4\x8f$\xe3\x13\xd3\xf0i \xf8\xce\xd4\xfb\xf1\xa4\xfb\xf1t{\xff\xa8i\xaa\x83\xddV\xaf\x85\xb6S\x03k\xb4L\xab\xce\x12\xb7\xec\x7f\xee-k\xa9\x8f\xe2\xd8\xb1\x815Q\x1c\xd5P\xe2^\xfc\xcf\xbd\x17\xf7\xeez$dE\x9dZ0\xc2\\WC\x0e\xa5\x85\xed\xe7\x89eF\xdaU (\x05E\xeek\x9a\x83\x13\xfa\xf3\x84:!\x83\x99\xba+\x82\x90UK\xea<\xf7\x86\xfa\x1fC%\xfe\xe7\x89\x95>\xfa1]\xad9\x8fV\xf7 /\xebl\xb5<*\xef*\x1e\xe6\xfa\x1d\xf6\xca\x1d\x93kv\x84W\xeb0Qn\x9e\n\x1d\x81\xb59<.0c%\x0e\xeb\xb5\xe4\xf6\xde\x0d\xf3\xf9\xa6\x99O{\xd8\x86\xb56lU6\xacs\xb0\x0dt\x9aI\xb5\x87\xccXM\x83ne\xed5\x9cnj\x05\x82\xb9\x15\xa6\xad\xfc\x04\xd3+\x10\xcd\xaf\x10\xb2\xae\x93M\xb1=|FN\x0e3\x98d\xfb\xbb\xc5V\xffb.\xd3,\xd8\xcc\xb3\xe02\xd1\x82\xab\xce\x85\xf7\"M6\xd9\xf6\xf0\x99\xeaY\x04\x1bq{x\xec5,F\xabW\x0ch\xd2\xa7\xc5\xe4Z\x15\xaa>\x85B\xd7T\xa9\xa8\xa6\xd6\xa7\x00U\x93B\xe3\xeb`\xde\xcfS\x93\xa2W\x8db\x8e:\x14\xcd\xd9m\xe5\xc88kOL\xab:\xa1\xb3\xa3\x10W\xa7\xde\xc4\x1dT\x9a\xf8\x93\xf6\x1a\xe3V\x1b\xdc\xfb\xc3;\xbf\x9btl8\xa7\xee\xc0\xada2\xb1\xf1\xb8\x1bo\x0cS\xba\xb0\xa15-5\xd8\xd1\xd0\x94\x06lj2\x9e\xf2khAM\xef\x1d%K\x9b*\xce\x04^\xc4\xd4\x04>\x0ew\xc2s!9^\xf0B\xc5\x01\xbd\x94\xe3j\xef\x8a\xd60\xda\xc6\x85\xc7\xf0\xd3\xe5\xf3wW\xf5\xbf._\xff\xe9\xfd\x1fQ\x0d\xaf\xd5\xef\xe6\x8b\xbe\xa4\xabZ?\x83\x9f\n\x96!\x07\xa9\xd3t\xe4\xc9=\xd6#\xaa%9\xdd\xc73\xb8\xe4\xd7\xf9g>\xfc\xb2\xb9|\x9aR\x13\xc3\x19\xbf-w\xcf7\x9b\xfa\x04\x8cG\xd0\x19\x9b\xbfdi\xb2\x12\xab\xfd\xaa^\xd0\x00$\x92\xd2\xf50\xfe,\x8fF\xc8`R\x96\x1c>fu\x0e\x0f\x06\xf6\x92\xcf\xf5\xba\xe0\x0d\x1f0\xaez\xabN Y\xf7\xfdX\xf2\xe2\xa3N\x8d\xbd\xe4\xeb\xbc\xd8 /\xff\xccoe\xee\x07\xfcU[\xc0\xfe\xb6\xf8\xab\x8cE\xfa\xdb\xe2\xaf\xda\x12\xfc7\x85\xae\x17\xa3D\xe7\x16\x1a\x91\xb5\xad\x07%CV\x84\xb3\xe2\x05fR\x85\xb4\xce\xcb\xd6\xc6R\x86\x83\x00O\x07\x9f\xacy\xcb\x08G3#\xa9\xc4Qr\xdd\x83\x8c\x7f\xa9\x9e\xc1\xd3\xef\x1fP7m\xc8\xb6/\xab\xbc\xe0\x834\x9c L\xa7\x03\x0f\x1f\xc9\x07^\xbd\xd4\xc4\xbf\xc8\xf3\x14\xf3\xfc\xfc\xf1\\\xe5\xbb]\xcauP2f\xc7\x06\x08C\x1f\xa5\xedSO\x87\x90\xfe3\x82\xe5<\xcb\xc4\x10\xf4\xde\xbdd\x15\x7f\x91\x9f\xb2M0\xc2)b\"b\xa8\xaf\x8f\x0fR\xb1~\xfde\xbd\xbf\xf4'wO\xa1\"\xf3L\xcai\n3_\xd4c<\xb0\xe23\xaf\x16\xd7OW\xbcbO\x17b\x82B\x05\xbc\xc4\xdbV\xdc\xd0\xe4\xd1\xaeX\xc9\x97ha]\xdf\xf6\x07\x14\x85\x9dY\x84\x1d\x01\\\xad\xd18o\xb7\xad\xf0E+\xd5\x8e\xb0\xa8ug\x82\xcf\x13wY\xebiTiX\xaf\xd8*I\xc5]Q\x1e\x0b\xce\xa8\xb7`\x0bK%\xef4\x87\xac\xd3[kbv\x88$N+I\xc4F6\x99\xeaa8\x1d\xfe\xb9\x8e\xcd\xf2\xb5\xb0\xf4g5\xef\x93\x97\x96\x939\x8ak\x0c\x1f\x98\xcf*\x82\xe5\xc4\"xW\xc2\x86\xfe\xba\x9a\xde1 =\xc9\x03LS\x0e\xf4\x00\x99:\xe0\x83\xbfS\xcf9\x82\xe5\xb4#\x18\x88\xd6{\xb67r\xdfY\xb9\xafyBN\xe6\xd0xw\x0cidm$OLXl\xa9e&\x16E\x90\xc0B\x13\xb0-\xacTE\xc8N\xc8\xbe\xb6\xdc10\xc6\x15\x0c\xb7\x048\xef\x9b\x10\x8c\xe6\xbb\xc7\x88\x89\x92Hh\xdd\x05\xa4dB\xd3\x8a\x7f\xb8aG\xef\xf5V\x05\x07\xd7y\x12\xcdR\xf7\xc2+\x06KE\xd9\x0c\xe2\xfb\xdeVX\xcbP\xa2\x05;U\xfbz\x1b\xa8\x02\x0f/n+^^\xe5\x1f$Y\xbdw\x84\xd25\x96\xb8*T)\xab\xbe\x8d\xc7\xc6`\x9f\xaaj\x85\x9fCq\\+lz\xbez ?$\xd9\x9a?S\x93\x7f\\n>\xc3\xb7\x8b\x7f\xfe\xfd89\x10\xe9U.\x87\x14L\x0e\xc1\x0d\xa8^\xd0\x9as\x8c\x92\xc88.'\x89\xe4\xd7sQ\xe8\x05+\xf9\xf3vt:\x9d \xa3\xa48\x9eV\xcb\xcf*H9\x1b>\xb9\x98g\x1c\xbey\xf2\x0d\xac\xf7\xac`\xeb\x8a\x17\x0b\xc9\xaadlH\xc9w\x82!\xe9k\xf6\xe3\xe5\x9b\x07%\x1cY\xb5\x97\xa8{\x88\xeaP\x1bS\xe1\xc6\xed)Mo\xe1/'\x96\x8ayo\x90*:\xbfE\xcc\xff!+!\x19\x04O}\x12\x9d=\xd9\xe5\xf9.\xe5\x0b9\xe7\xd5i\xbbx\xa5B7?=\xc2\xb1JdMZZ2|\x9ah\xcd\xb2\x1bP\xff\xb7p\xbem\xc6&\x96\xebX\xe4\xd7\xc9\x86o\xea\xe1\xcb\x0b\xb6,O\x07\xbeY\x0c\x9b?\xcf\xe0\x0fWW\x17\xf0\xd3\xeb+\x1d \xfe\xf1\xf2\x0d\x1e\x99[y?3\xf8\xb7\xfe\xc6\xbb\xba=\xf2\x7f\xff\xb7\x7f\xef!\x03\x15Q\x9adz\x95\x91)K\xfa\x1d\x8b|sZsq\xd5\xf3\xa2\xc8\x8b\xfe\xd3\x84\xbf\x85\xe7\xc7c*+l\x0d\xaa\xcf\xe5\xb0fk\x19\xf8\x98\x7f>\x1d\x05\x7f>\xa5U)5\xea\x8d\xf9\xdd\x0b\x10\x93\x90\xfd\xee\xd9\xb5\\\xeaCk7np;2=L\xf1\xdf\xd7y\"\xe4\x96\xdb\x01\"\xecT\x1e0\x8cF;\xd3\xcd\x046V%(\xe7\xca\x88i\xb9\x84+Y\xabT.\xf3\xb0\xcaa]\xe5\x0f\xffQ\xb4{\x04\x7f\x1d0\xbfa\xdb\xbf\x99\xe6\xfa\x9dc\xae\xff\x9d]\xb3\xa0\xc9\xc2\x0fR\xd8\x10\x18=\xe7\x96\x94\x0f\x7f\xcc\xf3\xc5:eei\x9c\x1av->\xc5\x11\xb7>\xef\xf7\xf2\xb7\xde\xbf\x9f<\x11[d\xac\xef\x0f\xec\xc0\xc5\xdd\xfd\x1cG\xb1\xe3\xd5+\x0c\xc9<\xcf\xca\x8aek\xfe\xf0\x11}P\xc6\xd6\xc31\xb6\xff\xa0\x17\xe6w\x8e\x85\xb9\xb8\xad\xf6y6X\x1a\x1c\xc6\x8fy\xfep\xb1X\xf4k\xa5\xd6\xcb\xf2\xd0\xf0\x8b\xdc\x8ar\xa9(+%\x1a\x9c#\x89^\xbd\xfe\xf0\xf2\xf2\xfc\xe2\xea\xfd\xe5\xa3\xa1\xc1\xbc\xd9\xac&\xd4\x88\xdc4\xfd\x7fvL\xff\xa7A\xcdw9\xf5g?\xc0?\x1eW\x8b\x1f\xf3\xfc\xaf\x8b\xc5\xa2\xbf\xfab4gB\xb6\x12\xdf\xb1\xec\xf6\xb8Z\xbc\xe37\xc6\x81%[\xf9\xdd\x7f\xf9\x01\xb2$5,\xb7\x81*\x83\xcdf\xfa\xa67\xc8A\x13\xd5/\x8eo\xf11;\xb0\xa2\xdc\xb3\xf4*\xc7C\x142\xa8\xd6_\xae\xa4It\xfd\xb9\xe6\x87Z\x12\x86\xd5m#\xabhn\x8de\x82ouL\xb2\xb8\x84\xdb\xc8\x1e\x18d\x91'By[\xc8\x1f\x84t\xf6@\x97/\xd0\xe2M\x9dO\x80k\xdaFW\xb3\xe8\x0c\xa5\x15\xa3.X\xcb}\xcd\x0b3\xa8~>x\xf2\xa0\x8dL?\x9f\xab\xba=S\x89\xea\xb8\xb7\xbe\xd9\xe6\xf9b\xc5\n9\xe0/On\x17?\x7f\x83sEa\xbe\xaf\x91\xc8\xee\xbe\x11_u\xaf\x8b\xff\xfe\xe1\xfd\xbb\xf6\xbf\x7f\xf8\xe1\x87\x1f\xfa\xc4\x16\xdf4\xda.\x8a,\xb98=\xea\xfeFm\xe0TrmV\xd9\x9dR\xd6\x91\xc6\x86\x8d+\xf9\xa2Ds\xf7\x9e\x01?\xac\xf8f\xd3\xdc\xc2g\xea:\xef\xe8\xc8\xad{\x11\x8d\x8a\x9f\xfe\x9b\x98\xe9'eR\xac%\x896\xdd\x16\xfa<>\x1b\x08\xb6l\xfdY\x1c\xc5F\xed\xd9&)\xef\xb36}`/xQ\xe6\x99a\xc7*\xeb\x83L\\YJB\xff\x00O\xfbX\xea\xcf\xe4\xf3 \xea\xab\xef\xc6\xd9(\x80\xa1\xb7o\xe4\x8c\xbfy\x06\xdf\x98\xb6nw*\x0b\x1c\xf37\xfd\x87Y\x00\xbe\x91\xa3}\xc7\x0e\x02\xd3\xff\x81C\xfb?\x0d\x9f\x89\xd1\xf6\xbe\x1a\x1b\xb2\xaa\xea\xde_K\\\x8b\xa4\x84\x1b\x9e\xa6\x8f?g\xf9\x0d\xda\x8f\xf7\xb2L\xb6\xb2\xfc\xf6\xb7bw\xd3\x9c\xe9\x07J:;I\x17\x01\xaf;\x14\x1bD\x16\xab\x92\xdb\xa3\x8d\xee\x93\xdc\xa6z\xa7`\x81\xdb\x96\xddYn\xf2$\xabw\x98\xce#R\x1b\xac\x8dI\xa2\xaew\x15<\x14\xc7ROt\xa0Bk\xdb\xcd\xbf\xff\xdb\xbf?\x1al\xc0\xf0\xd5\xed\"7-\xb0\x9c\xae@\xf4t\xf1\xdd\xd3\xef\xcao\x06\xcb\x86\xff\xaf\xcb.\xf7\x1fn5\xaa\x18\xc6\xa0\xb9\xd0\xfa\xd26\xc5\xa0e0m9\"V\xacl^\xad\x91\xb4\x81\xf3\xaa\xa5:\xa8R\xc5\x19_\x8b\x95(\xb4~/\xd7\xaaN\xa4\x12+\xb5be\xb2\xae1u4\xe6\x85\x94\xfb\xd4\x86h\xf7\xa5\x8dm\xfcK\xd5\xbcR,4n\x8d\xb8\xd2\x16\xe46\x83\xea(\xe3X\x03\xfe\x9a\x97U\x92\xed\x1e\xd9\xbc\x0b\xf8|\xea\x85\x0c\xc7\xf46\xa3c,\xe7\xd2\x19\xcciv\xfe\x98\xba\xb6[\xca\xdb_Cq\\76r\xc4\xe6e\"\xf7\x0c\x93\xc1\x98\xc6C\xbe\xacM\xb8T\xa7Ag\xdfV_\x96e\xb2[\xa6\xc9!\xf1\x0e\xe9\xaa\xdb\xff\xcc\x97\xeb\xbc\xacdh\xa5P\xbaC\x10\x89Q\\\xf3\"\xd9\xde\".\xbe\xf9\xee\xfb\xef\x9f\xfe\xd79P\x95|}\xfc\xee\xfb\xdf\x7f~\xea\x8f, \xc0G,j\xcb7mZj\xe9k\xeb\x96U\x7fq{\xfe\xca{\xaf\xd3\xab\xc5w\xe6\xf1\xc0\xbc/\x17\xdf=\xc0\x8e{\x89\xb5\x8e\xd1Z\x8f\x87j>l\xd9:*\x04\x02\x9dg\xdb\xdc\x9b2I\xb6\xcd\x1brtf/S\x7f\xd5\x985{\x93\x7fS\x0e\xd9\xb2\xb9^Q\x9an\xb1\xe2\xa0`\x03j\xdd\x1c0\xf9\xb3\xc0\xd6\x17\x8cFKUF\xdf\x16\x8cY\xcd\xc0i \x83y\xfd\\0\xea\xeb\x82Y\xfd]0\xa7\xcf\x0b\xc6\xfc^0\xcd\xf7\x053\xfa\xbf\xc0\xe9\x03\x83P?\x18L\xf1\x85\x99(v{\xe4\xa5\xdd\x1f\x06S|b\x06\\x\xd4-~1\x98\xe8\x1b3\xa0;\x1d\x81\x0d\xb4\xd1\xba\xafY}d0\xddO\x06\xf3\xfb\xca`\x9a\xbf\x0c\xa6\xf9\xcc\xccG\xd48\xc8\xd9A0\xb9jF|\x830\x8b\x7f\x10&\xf9\x08\xc1\xb4\x86S}\x85\xe0\xf2\x17\xc2\xa8\xcf\x10\x1c~C\x18[Y\xaa\xff\x10\x08>D0\xf8\x11a\x9a/\x11h\xfeD\xf0\xf2)\x02\xc5\xaf\x08V\xaa\x197\xad\xed[\x97\x9f\x11&\xfb\x1aal\xa0\xbd\xbf\xce\xeaw\x84\x89\xbe\xc7\x1e\xaa\xa1'\x12\xe6\xf6F\xc2\xcc\x1eI\x18\xf1J\x82\xc13 \x06\xef$\xcc\xe6\xa1\x849\xbd\x940\xbb\xa7\x12\xc8\xdeJ\xa0x,\x81\xee\xb5\x04\xa2\xe7\x12\x8c\xcc\xdd\xe8\xe3\x02\x0f?\xd7\xb8\x17\x13\xe8\x9eL\xa0y3\xc14\x8d9\xbd\x9a0\xd5\xb3\xd9\xc35\xf0s\xc2\xac\xbeN\x98\xd5\xdf \x93\xf7\x83\xd3\xef \x04\xdf'\xf4\xee!\x9b\x0f\x14(\xa1\x96\xc3\xc75\x07\xfeP_<#\x89\x8f\x06\xcf\x80\xb6\xe8c\x1aS\xeb\x83\xae_b\xdc5\xf7/\x04w\x84\xb7+b\xf8(\x03\xdduP\xc5\x14\x95\xe9\xe6\xfa\x98\xa2B3\xcb\xa39q@\xa3\x98\xa2\xe2c~\x9fhz\x9f\xd9\xec>\xc1\xe4>\xc1\xdcn\xb4\xfd\xcefX\x9f\xd7\xa8>\x9bA\xddmL\x9f\xcd\x90\x1eST:0\xcd<\x1eST~\xe3\xee{\x9a\xa1;\xa6\xa8\x18\xcc\xd8SL\xd8\x94\xac\x8d\x98\xa2\xd2\x82\x98\xa2\xa2!\xa6\xa8\xb4\xfe=\xc1\xacL0)\xd3\xcd\xc9NSrLQ\x99b&\x8e)*T\x03\xf0l\xc6\xdfy\x0d\xbf4\xa3\xaf\xd3\xe0K4\xf6R\x0c\xbd1E\xa5\xc15\xc9\x90\x1bSTH)*f\xd1\xdcd\x97\xa4Ty\xd2\x89%\x97\x17/\x15\xa6\xf1rO\xed~\x02\n\x1b\xa9\x86}\x0b\xe8\xbc\x15'+K\xc4\xb3U\x05s\xe9Z\xb3\x1aL\xc7#\x9d\xe73\x9a\xceh6\x1d\x8dq\x9e`:\x9d\xcfx\xea2\x9f\x06\x1aP\xe76\xa1\x8e\x18Q\xe76\xa3Z\x0d\xa9\x93M\xa9\x03|\xb6x\xe6y\xcd\xa9\x93\x0d\xaa\xb3\x9bT'\x19U\xe77\xab\xcehX\x9d\xdb\xb4:\xa3q\x95b^\x9d\xd1\xc0:\x16\xa7<\xc5\xc8:@f\x8eQ6H\x14t\xb3\xab\x11\x9b5>y\xa2\xe9u\xaa\xf1u\x80\xce\x14\x99\x1ch\x8e\xb5D%\x8f\xc8\x03#\x11\xc9.Q!\xd00;\xe4\x9e\xd6X\xe4\xb1\x11\xccl\x9e5\x19hg1\xd1\xcel\xa45\xc5\x1fO4\xd4vpU\x86\xd8\xe3)f[g\xa8\xad5\xea\xd8i\xbc5\x07\xf0\xd1\x0d\xb8\xe6\xf6\x7f3\xcf=\xc8\x8cK\x9d\xbc\xcb\x94;>S\xa79\xd7\xcb\xa0k\n\xd4\xb4\xc7\x16O7\xebN1\xec\x0em\x12\x13\x8d\xbb\xce\x88\xe2\xb1x\xe2\xf1hb\x0b\xf5\xa8f^\xb7\xa1\xd7\x14E<\xc1\xd8K2\xf7\xfa\x18| &_KH\xae\xa1[\xe3w.\xd3\xefT\xe3\xafux\x9d\xbf\xcdj\x02\x9e\xdd\x08<\xb3\x19x^C\xf0X\\\xf00\x9cr\x18\x13<\x8fAxF\x93\xf0\xdcFa\xaaY\x98`\x18&\x9b\x86i\xc6ac\x0c\xb0\xa9W\xaa\x11\xd1\x15\xffK4\x12\x93\xcc\xc4\x83\xc1\xcfi*\x9e\xddX<\xa7\xb9xN\x83\xf1\xb4\xf5v\x1a\x8d\xddf\xe3\xf6M\xa1\nzh;,\xbe&/\x96\xf4K\"\x0b\xf1\xd4\xbf\xa8\x16G\xb6S\xef\x1bXJh4\x1f\xf4\x8a\xa1\xd4\x7fV\x9cP\x1b\xa1\x9b\x9b\xc2h\xd55\xdbt3\xfe\xa5\xb2\x15\xc3\x08\x0e\xa9\xf9\x8f\xbe\xee\xa6{\xd1vs\xf1\x9f\xca\xb2\xc1\xca\x12\xcd2\x17\x0c\x9fG\xe1e\xb5\xc0\xdf{H\xe4\xdb\xe3\xb2\xb9@'\x08\xc1\xe1\x90\x97\x15piG\x90F\x07Y\xaa\xa9\xd9\xdaB\x17N\xb6=<\x1d\xa5\xfe\x90\x17\\\x1b\x81\xdaWm\xef\xbd\x1d\xa0\x10e\x10\x9f=,\xf3R\xff]\xa0\x97\xd4\x90\xff\x81\xe1\xe0\x82\xefk{T\xcbx\xd2\x1f\x7f\x9bP\x18M.\x91\xf4O\xc7\x0d+\xa1\xe4\xd5\x19$U\xa9\xcdi%\x9c2\xdcL\x1b4&\xdc$\xe5\xd8\xdb\x06F\x9f\x84\x87\xf3\xa34x?\xf48\x8d\xc1\xe1\xbf\x1bs\x8e\xbc\x95\xf5~\x14\xea\x17\xb7\x82\xc5\x86\xfaIb\xa0\xb8\xa7\xcfc6\x8fG\x0c\x14\x9f\xe0\xe5\x88\x81\xe2~\x9e\x8d\x89~\x8d\x99\xbd\x1a\x13|\x1as{4f\xf3g\xcc\xeb\xcd\x98\xcd\x97\xe1\xf6d\xcc\xe6\xc7\x88\x81\xe2\x1d\x98\xe6\xab\x88\x81\xe2\xbfq\xf7=\xb3'\"\x06\x8aO\xf38Pb\xa7c\xa0x\x0bb\xa0\xb8\x86\x18(\xde\xfa\xf7\x04\xdf\x01\xc1s@\xf7\x1b8\xbd\x061P|f\x1f\xc1\xac\x1e\x829\xfd\x031P<\x06\x8aw\xb0\xd0|\x00\x04\x0f@\x0c\x14\x0f\xb7\xfb\x87\xaf\xae\xd3\xe6\xef\xb2\xf8;\x03\xc5Gl\x94\xa3v\xd36\x8e'\x06$\x84\xf7\x82\x87\xfd\xc70\xf2\x10sj\x0c#o\xc1\\\xa6U\x97q5\xd0\xbc:\xb7\x815\x86\x91\x87\x1b['\x9b[g7\xb8N2\xb9\xceot\x9d\xd1\xec:\xb7\xe1uF\xd3+\xc5\xf8:\xa3\xf95\x86\x91\x13\x0d\xb3SM\xb3\x03t1\x8c<\x86\x91\x93M\xb81\x8c\xbc\x051\x8c\x9cd\xec\xf52\xf7\xc60\xf2\x18F\x8e@0\x06\xfb\x98\x83 \x06\xe1\x18F\x1e\xc3\xc8c\x18y\x0c#w\x1b\x90\xc9&d\x92\x119\x86\x91\xcfaN\x9e\xb6\xdeN\x93\xb2\xdb\xa8\xeckV\xa6E\xe2\xb6\x9bw-\xcae\xc7\x98\xac\xc9\xe1\xf5\x8e\xaa\xc4\x8aOuz\xdb\x98\x8f\xad7X\x07\xd3>\x8e>\xff\xa98Z\xf3\xf0'\xc2\xa0Ss\xc7\xe0z\xd1\x15(AB\x83(o\xf3\xeb\xae\x13p\xd9_z\x0dC\xea|\xf5u\x1e\xb4\x86\x17`}\x11w\xb6\x82a\x8fQB\xcf\xd5\x03\xb2V\x7f\xc9\xcf\xf5&\xfe\xa9`:\x12\x9c\xb0mE\xdb\xbcH~\xee\xe5lx\xec\xbd*\xc6\x8fOwu\xc4\xf8\xf1 \xee\x8d\x18?\xee\xe7\xd2\x98\xe8\xd0\x98\xd9\x9d1\xc1\x991\xb7+c6G\xc6\xbcn\x8c\xd9\x9c\x18n\x17\xc6l\x0e\x8c\x18?\xde\x81iN\x8a\x18?\xfe\x1bw\xdf3\xbb b\xfc\xf84W\x03%\xa4:\xc6\x8f\xb7 \xc6\x8fk\x88\xf1\xe3\xad\x7fOp\x1a\x10\\\x06t\x87\x81\xd3]\x10\xe3\xc7gv\x0e\xcc\xea\x1a\x98\xd31\x10\xe3\xc7c\xfcx\x07\x0b\xcd\xf8O0\xfd\xc7\xf8\xf1p\x83\x7f\xf8\xea:\x8d\xfd.S\xbff\xda\xfc\xcb1)\x8c\x96\xc4\x9ez\xa1U\x8b\x0d\xab\xf8\xe3*94b\xad\xa9\xb4\x88\xf8\x00n\xf6\x1cY\xd8\xae`\x99\xaa\x86\"\xfb\xe3r\xf5\xf5\xe2\x1d\x8bS\xc67\x0bi\xe18\xa5\xa9T\xfd\xfa\x82\xb3\xc4\xd0&\xdf&\xe7e\xf6\xa0B\xbd\x9fa\x7f\xcd\\\xe0!jm\xeb<\xdb(\xeb\x8aX\xdcO\x1d\xd3igQ\x0f\xec\x16\xd8\xf1\x98J+A\x92I=\x88U\xbc\x19>\xde\xae\xe6\xea2\xd2~\x0b\xbb\xe4\x9a\x97p\xe4\xc5!)K\xd9g\x95\x03\xff\xc2\xd7\xa7Z\x19\x93^\x04\xbc\xae\xd4]\x81\\\xae5r1\x93qC\xf1\xf3\xa1\xfdw`\xfb\x1d\xda}\xe5$\xda/}\x1aV\x19\xbf\xe1\xa3\xdfD\xebs\xb4>G\xebs\xb4>G\xebs\xb4>G\xeb3D\xebs\x03\xd1\xfa\x1c\xad\xcf\xd1\xfa\x1c\xad\xcf\xd1\xfaLY\xa9h}\x8e\xd6g\x93\x91'Z\x9fk\x88\xd6\xe7h}\x8e\xd6\xe7h}\xb6Y\x9f\xfb\x96\xe7\xa1y\x14\xf8\x97\x8ag\x1b\xb1\xd0\xda\x08]\xeda\x95W{T$6\x9b\x82\x97\x82w(\xae\xa0,\xa0\n\x9f\xd8%\xcanZ\xdf\xb1\xe7R\xf3\x94\xdaT\x92I\xf9\xb8LJ$\x8a\xfc^\x16\x07\xc7\x7f\xdb\xac\xb82<\xf8'\xecI\xfe\x9f\x7f\xe8\xba\x1c\xd5\x1d\x17G\x19X\x8c\xdbX\x0c\xea\xdf\xc0z\xec\xf8\xdebIn\xb7\x1a\x8c\x15F\xc6\x0bV\xdbr\xf3\x9b%\x89\x1b\x9cJ*\xc2\x8c\xd6f\x84\xb1\x02/0\xab\xe5\x19a6\xfb3\xc2H\xb1\x17\x98f\x8bF\x98\xcb\"\x8d\xe0*\xfc\x02\xa1\xd6i\x84`\x1b\xb5\x99v\xb7G\xb9\x87\xacE``\x8a\xbd\xda\x88\x0d/'k1\x18\x98h\xbb6\"<\x1d\xadEa \xd0\x8emD4R,\x06\xa6[\xb85\x12\x82\x9d\xdb\xd8\x92l\xfbF\x98`\x01G\x98`\x07\xb7\x1dt\xcbPg\xb3\x90#\xcck'G\x98\xcdZ\x8e\xe0\xb6\x99#\xccf9G\xb0\x17\x9f\x81\x89Vt3\xaf0\x16\xa1\x81 \xf6u3{\xd06wk1\x1a\x98nkG\x08\xb5\xb8\x1b\x91\xd9\xac\xf0\x08\x81\xb6x\x04c\x81\x1ap\xcb7#\x85j\x80(\xfe\x04Z\xea\xcd\x9c\xddZ\xb4\x06\x08\xa3\x99f\xbb\x1f\xa0\x93\xb6|c\x01\x1b\x98\xc7\x8e\x8f0\xcd\x9a?@'\xc5+\xa3$3\xd1\xb2?\xec\xc9P\xd4\x06&\xda\xfb\x11\x1c\xf5]`\xac\xc0\x0dP<\x00\x08\xc6\xba\x13^\xde\x00\x04\x1b\x1eC\xee\xfe$\xff\x00\x02\x9d8._\x01\x82\x8b\nN\xbf\x01\x82\x87\xf7\x00\xc1PHd\xb4(\x0e\xcc\xe2O@\x08\xf7* \x18Vv\xaa\x87\x01\xc1Q(\x07\x1c\xc5r\xc0Y0\x07\xc6W\x9c\xea\x7f@py!\x10\x86\x05t`\x9aG\x02\x81\xe0\x97@\xa0{'\x10\x9c>\n\x04\x1b\x15-\x1b\xdb\xfe\xbd\xcbw\x810\xcd\x83\x8102\xe4\xc1\xdf'\xf94\x06\xd8\x06\x05x`\xa2\xa7c\xd8\x83\xa1(\x0fL\xf5\x7f\x0c\x87\xdc/\xd4\x033{E\x10\xec\x05{\xc0X\xb4\x07\x8c\x85{`6o \xc2l>\x13\x84y='\x084\xff \x82\xd3\x8b\x82@\xf4\xa5t>v\x14\xf5\x01\xcb\x15b)\xf6\x02\x1eVxW\x81\x1f\xa0{Z\xd4\xc7n\x7f\x0b\x82aBs\xfa^\x10&y`\x06\xd8\x0cE\x80`V\xbfL\xab\x9bY\xbc3\x08S\xf7\x88\xd3S\xa3\xd09\x0b\x03\xc1\xe0\xb63\xf9n\x10F\x14Q{\x16\x81\xed\x89\xd2\xc9>\x9d\x0e6\xe5\xa30zv\x10\xfc\xfc;\x08\x1dm\x15]3\xd2Z\x08iRJ#\xac\xfa\x1b\xf6\xb8\xd1\xbbH\x0dF_\xd4!\x0f\xf1\xb2\xac\xfdW]\x7f&>\xc4\x1b\x1f\xe2\xbd\xcb\x87x\x8d\xbeKz\x0d\xb0NsJ}\xa4V\xa7Et\x98F\x87it\x98F\x87\xe9\x00\xaa\xe80\x8d\x0eS\xe3\xc7\xd1a\x1a\x1d\xa6C\x88\x0e\xd3\xe80\x8d\x0e\xd3\xe80\x95\x10\x1d\xa6=p\xb9\xe5\xa2\xc34:L\xe9\xd6\xee\xe80\x1d9\x1evrE\x87it\x98F\x87i\x0f\xa2\xc34:L\xbb@u\x86E\x87it\x98\xba\xf6Ht\x98~\x8d\x0e\xd3\x15z\xf9\xea\x01 \x96\xe80\x8d\x0e\xd3_\x93\xc3\xb4\x98\xe60-B\x1c\xa6_\xa7\xa74z2\xa3'3z2\xa3'3z2\xa3'3z2\xa3'\xd3\x84,z2\x07\x08\xa2'3z2\x11\xa2'3z2\xa3'3z2\xa3'SC\xf4dj\x88\x9e\xcc\xe8\xc9\x8c\x9eL\x0d\xd1\x93\x19=\x99\xd1\x93\xf9\x95{2a\xc4\xcf3\xed1\xa9!\xb2\x0e\x9e!\xe9C\x1e\x96\x1a\xee-\xfbCS\x08\xc4\xe7\xa6\x10\xc6\x1c\x83\xe4\xa7\xa7\x10*\xfa\x03T\x86\xbe;\xb3\x1a\xf7\xd8\x8a\xdd\xaf}\xc7\xab\xdb\xe8\xb9\x8d\x9e\xdb\xd6\xdf\x7fm\x9e[\x9a\xcbV9k\x9fw\x0f\xc9\xe5\xc5K\x85o\xe0\xb3]\xb1\xecs\xed\xb2}\xc5\xb3\xfc\xf0\xfe&\xd3\xf9\xa3\x83m<\xdc\xc2*p\xa3\xef\xaa\xed-R\xf7\x04c\x93\xfaPUM\xfc\x07\xde\xb2\xf9M&N\xf5\x91\x15U\xb2\x16\x02\"l\xc4\xc0\xd4\xb1\xd3\x9bd\xc5R\xa19\xf7{&\x1d:\x89\x8f\xb4\xb9\xd8A,0\xe1S\xfb\xf9{\x99'-\x0e\x02U\xfe\x99gJV\xedLL\xde!,S]v4\xd9w\xef\xaf^?\x93\x126\xfe\xa8\xc4\xd8Dr\xa4sq\x15I\x01\xa26\xe7v\xa4\x08\\\xf3\x16\xb62\xd9e\xac:\x15\xbc\x84\x82\xff\xe5\x94\x14\xa8j\xed\xf2].\xef\xec\xc5pC\xd6\x13j\xb6H=\xa5\xb2*Nk\x81\xae\x11\x8f\xa4\x10\x94\x01[\xcb\xe3\xd1Z\xd5\xbcPR\x8e\x16\x91L\x8b,\xd9\xd1g\x9eI^\xd2\x11\xce5B\xbd]$\xc5\xf0o\xdd]\xd1\xa8\x0c}\x9c\x9a\xac\x1f\x12\xb1y\xd41x\\n>\xc3\xb7\x8b\x7f\xfe\xfd\xd8\xc1\xf8\x98%\x15\xf9\\\xf4v\x98{\xcb\xc8\x06\x0d\x05q\xbeJ\xc8o;\xad\xc55\x9b\xa9\xafOYRI\x971\x9cX\x95\x1f\x1e\xe9\xa3\xc1\xbf\x1c\xf3\x8c\xb7\xb7-\xf6\x9fd\x15\xdf\xf1\xa2\xfe\xab\xe6\x9b]\xb6i7~k\xbc\xeda\x1e\xf3\x1bd\x9cO\xbfm~\xc7\x05\xcf8\xba\xee[\x18\n\x96(\xc5x\xc5J\xbe\xc4iH\xf1\x03\xf2b#\xf4\xe1\x1c\xb8\xd0\x96[s\xad\x89\xff\xa0\xc4y\xb7\x11>U\xa4\xf8\x01\x9e~\xfb\x7f\xd5\xfd7\xc8\xdb\xdfJ\xe7\xba>y\xad\xfe\xf3-\xd2\xaf\xf1\x1c\xaf\x0b.$!\xd6\xf4->z >z\xd0B\xd8\xf7B\xd5\xfd\xff\x00\xbf\x17\x1a\xc3\xa9|\x06OA\xb4\xc2\xf1\xfd\xbe\xb7N,MX\xc9\xc3\xe2\\z{I\xdds\ncW,R\xbbH\xff\xa6\xaf\x8a\xd6Nr\x1dxI\x81\xd6\xa23u\xe8\xfb~ \x86H\xdbg@3\xb7\x93\"\xa2Z\xfbd\xad\xcf\xa3\xf9\xc4\xbd\xe5\x15\xdb\xb0\x8ay\x1c\xb8f\xf4c\xc7N\x0ej)F\x13Fwr|\x91\xe1\x8e\x19\xd5M\\>\xa7I\x0cb\x80\xad\xbb\x11\x11\x86l\x03\xc1\xcc<\x10\xcc,\x04\xc15\xa3\xe9\xec\x04a\"S1Sz\xd8\x8d\x0f\xabA\x98\xc8p\x06\xf8\x90\x01Y\x9c\xdf\xbe\xcc\x07a\xc0\x82\x10L\x07\x02ap,\xda\x0d\x8c\x1b{\x06\xd6\x840\xa6\xe2L`S\x1a9\x8dYu\xe6\xd4b&\xfd\x93\xa9g\xd8\xbe\xbd\xc4\xf4T\xdf\xb0\xcek\x9d]\xec\x0c\x1fQ\xa1s\x94D\xe3~\xdf\xf2o\xb8\xd5\x1e6\x81i\xe2\x97\x86LZ\xe5\x96{\xa6\x85\xef\x07\xf8\xb6\xde\"\x9b\xa4<\xa6\xec\xd6gl\x9deQ\xed!\xc96\xc9\x9aUJ\xd6/O\xbb\x1d/\x85D\xa6N\xaaX\x9cz\x98\xc3\xe6\x18\xd4\xbdN\x85\x82Y\xab\x88\x82\xe3\xf9\x8c\xeb\x81Q\xde\xfb\xdd\x83\xfe\x8a>\x90\xac\xb4\xad\x9at\"\x06\xa5\xec\xfe\x90\xef\x9e\xc1K\x89\x08\x9e\x8b#\xa5\xb1\x94\xb7\x87U\x9e\xfa\x0c\xab\xb3\x94\xd8\\\xebw\xd8\x97\xfa\x9b\x8e\xe4+\xf7\xf9M\x062\x9c^\x07\x0d\xc9\xd1<\xbfz\xff\xf6\x11\x86e\xb6\x10\xae\xbb\xc6p\xb5\x07J\xe9}\xc0N\x14\x89\xbb\xb6\x7f3\xa9\xd4\x07\xa7\" \x9e\xe0\xc7\xcbs\x19e\x05\x9b|}\x92\x011\x0fs\xc1\xa3!\xdfn\x1f\xaf\xf7,\xc9\x1e\xe1nh\"+j\xcb}\x0bM\x92\xe1\xad#\x94Ax\xaf\x82\xfc\x08S\xf8}3\x85\xe5\x9e\x95\xfb)\xf3\xf8\x03+\xf7\xc8\xca\xca=\xfb\xee\xfb\xdf\x83@(}\x1d\xcd\xe4\x8ey\xa23\x07>^\x9e\x0bm\xe6\x81JR\xe8\x98V\xaey\x91lo\xe5\xc4\xdbS\x90\xcb\xa3Qm\x92M\xf6\xa0R1]\x01\x936\x9fQ-d\x11x\xa6j\xc1(\xb2\xdb\x05+\x98\xbe#\x08\x92[\xc9\xb3\xcd\x92gl\x95\xf2\xcd\xd7$\x92\x0d\x86\xd4\xfe~\x95\xe7)g\xed+dL\xda\xf9\xc0\xb3\xcdkD\x87q\xa4k\xb4 (A\x85uh\x00e\xc5\xaaS \x0fo\xf6\\\x1az\xd9p\x12\x90\x94] @ \x10\xad\x1fY\xcc\xa6\x9d\x01\xbd\x12\xcb-\x18\xf2\xe6\x19|,%wk\x8f0\xc9\x84Z\xce\x0e\xf2\xae\xde\xd4\xdfv,\x12?\xe6\x85\xce\xb39\xab\x9d\x9d\x19\xbfIo\xc5\x99\x15\x93h\xcfH\x99+\x94\xd1\x1b\x9b\xb5\x90\xe1\x02v\xf0\x7f\xa8\xf2B:\xf50\xe4\x12\x03\x06\x0f,K\x8e\xa7\xb4\xe5\x14L\xca67\xc0p\xc2\x9ba\x9c\xe2g\xce\x8f2i\xa8\xf57\x8c \xec\x1e\x96\x7f9C\x9c\xd2\x85\xcb\xbf$e\x85\x97\xf6\x8a\xad?\xdf\xb0bS\xf6\xe2<;2\x9a\x9a\x17l\x93\x94\xd7\xf7\x94rS/\xc76y{/u\x16\x0d\x0fR\xe76\x92\x0b\xc3+^4\xc2\x928{p\xc87\xa7\x94\xdbN\xa4\xb4\n>O\xd3\x17h\x1d\xf1O\xc8Pf\x95\xafJe2\x99\xe6\xac\x9f\x8f\xc9\x8e3\x18\xe8\xe66\xd1Q\x8dt\x83\xa9\xe9\x85\xd2RD\xfdoq5\xa5\xa8\x01 \xe6SNq\x83\xe0F\xac\xff\xac\xceut\x83D7\xc8]\xbaA\x0c\xfc\x8b\xe4\x0bi\x9a)l\x97\x17/\xf5 \xc7\xfd!\x12\x81j\x1c\xca2\xfb\x1c\x93t\x1a\x0c\x8c\xd0\xb2\xea\xd1?a\xd8)\xbd%\xa3\xec\x12\xd5\x84\xec*\x93\xad\xa46\xad\x85\xe8\x17\xb7\xf2o\x1f$\xd9\xbdw\xcb\xa1c\xef4627\xec\x93\xc2\xbd\x13,6P\xb0\\\xea`3\xfaX.wp\xe4H\x1a/y\x18\xe3k\xba\xdd\xb85\x11 \xdcFjDfp\xac4`\xb3\x95B=\x11\xb3\xbd\x14\x1c6S \xcet.\xdb)\x84\xd9O\x8dxF\x1d5\x0d\xf8\xdbQa\xa2-\xd5\x88\xb0v\xe8\x8c$\x13\x85\xd9T\xc1nW\x85\x91C\x86`\xb1\xaf\x82\xfb\x80\xccfg\x05\xa7\x1c5\x83\xbd\x15\xc0\xd7\xe6\n0\xb3\xdd\x15\x06\xb6W\x18\xa3\xf2\xf8\xb1\x9cb\x87\xed\xa1j\xed\xbao;[k`\x8f\x05\xf2x\x07K8\xd16\xdbBa\xb4\xcf\xc2\xc0F\x0b\xe4\xb1:m\xb5\x00\xf3\xd8k\xc1`\xb3\x05\xf20\x07[`\xb2\xfd\xb6\x87O&\xd9\xaf\x87\x01\xcdT;.\xb8l\xb9\xd0\xb7\xe7B\xf8\xe4g\xb2\xed\x02\xcd\xbe\x0b.\x1b/\x18\xed\xbc0i~\x93l\xbe=tUn\xb3\xfb\x02\x84\xd8~\xc1M\x10;?\xf0\xb7\x03\x83\xc9\x16<*\x93\xbbeez-\x92\x0e.\x83:\x07\xe7\xb2\x0c\xc6\x9a\xa5(0\x0c\x07P\xf7\xb9:\x89\x1bl\xcde\xf0*\xf2\xbc:\x85\x1f\x15}uu&\x99TF\x84\xb2KV \xa2\x16\x10\xb5\x80\xa8\x05D- j\x01Q\x0b\x88Z@\x0d\xb4\xb1F-\x00!j\x01Q\x0b\xf8\xfb\xd4\x02\xe6\x17\xfc\x9d\x92\xb9\xcc\\(\x95\xfa\xe1-\x9e\xe3\x85\x93K\x1c}\x11}^O\xf8 \xad\xa6\x8d\xc5x\xf7w\x88>S\x8a\x0d\xc2\xc0\x91\xd5\x1e\xcb= \xfef_\xbf\xa3\x99K\x82\x0ev|\x0d0M\xf1\x7f\x0d\x90)\x7f\xd8\xe0\xef4\xb7\x18\xc2\xd8\xd4'\xa7\xf0t\xb0\xe9t\x9e\xce\x1f'g\xf5t\x0f\x83\xca\xf01\xedJ\x18I\xf4\xe9|?\xca\x16c\x10D\x0c\x82\xf8u\x04A\xd8o\xb1\xce\xc6\xbc\xbcx\xd9\\\xa7B6Q8\x86\xcd\xe5\xa7X\x1f\xbb>1\xa6\xb3\xf2\xfd\xb7\x8b\xdf\x11\xaf\xd7x\xaf\xc6{5\xde\xab\xf1^\x8d\xf7j\xbcW\x7f\x85\xf7*\xedBm_\xa5\xad\xa81\xc2Mj\xcd2o\x06RN\xf6 \xdd\xf1=j\xf55\x8dZV,\xfe\xa61c\xf8h\xba\xa1\xf1\x92\x1c\xbf&G.J\xc7U \x84\x9bO\x7f5\xa3\xff\xc9\xe1\x81\x1a\xf7A\xe9)\xd9\xbdPn?\x14u\xd6s\xfa\xa2\xe6\xf3F\x91\xfdQ\xa1\x1e\xa9\x10\x9f\x94k\xa4$\xaf\xd4\x14\xbf\xd4\xa8gj\xec8\"\x8cx\xa7\x08\x87hV\x0f\x95\xebR\x86\xb9\xbcT!~\xaa;\xf0T\x99|U\x93\x84\xf5\x19=V#>+\x8b\xd7\x8a>r\xc3\xc2\xce\xe0\xbbr{\xafL\xfe+\xfa\xa8I>\xac\xf9\xbcXf?\x16}\xb8\x86\xed\x11\xee\xcd\x1a\xa0j\xe5(\x9b\xfcY~\x1e-\x82O\xcb\xe0\xd5\x9aD\x8a\x19}[d\xef\x96\xd3\x9d\x03V\x0f\xd7\xd4\xb9\xce\xe9\xe7ry\xbaB}]\x04\xf2\x8cq\x910\x8f\x97\xd1\xe75\xe8\xaaCT-\x95C]q_\xda)$\xbb\xe9$\xb0J\xce\xaf\xd2\xf4\n\xbeK\xca\x8a\x17\x1dj\xca.c\xf2^\xd4\xaf\x7f\x8d\xfa\xf5@\xad\xf5\xf4\xfc\x96\x81\xae_\xcc\xa3\xf6\xd6\xa5\x8f\xad:\x06\x83\xe9\xa9\x0c\xf9\xce\x81n%g\xd7\xa2a'7\x1b\xc1\xe3d\x99\xd3\xc6aDF\xff\xe5\x834-u\x13\x9av\xc3\xda @\xb8\x92\xe6\xac\xa1\x00\xb5\x96\xde\xaf\xa3\x00\xe6Z\n\xe0\x1c\xe0\x0c5\x15`\xee\xba\n`\xae\xad\x00\xd3\xeb+\xf4\xf7\x97d\xc7\xc3\x1a\x0b\x10Zg\xa1\x87\xa3_u\xc1\\k\x01\xe4\"\x8d\xd5[\x00\xe3\x1e\x1ca[]\xce\xd1\xb9C\x87W>\xc0\x94\xf1d\xb7_\xe5\xa7B\xb6\xcb7|\xd8\xd9\x9e\x95{c\xe2h^\xf1g\xe8`\xaf\xd4\x13\xf0\x0c6\xa7c*#\xc5\xb5D\xa2)#e\x19\xfcP1\xfc\x01\xc2$\x83\xab\x86\xbd\xd4?\xdbi\xafpK\xd7\x81\xa2\xa7<5\xba\x07!GU\xad\xf8\x7f\xfd}w6^\xf3(\x0d\x13\xe9\xc6\xea\x0c\xa7\xb0\x174\x1e\x98\xb9\x08\xecF\xf0\xc7\xf2\xc8\x86\xfe\xd4V[3u\x06<\xd9\x1cV\xd311\xcb\x9f\xea\x86\xd2\x18\xad\xb0\xf5\x12\xeeh\x04\xd3=#63\xd5\x14\xc2.\xc9\x1c\xd7\xcd\x8b4_\x7f&_1{\xce6\xfa\xa9ec\x13s3\xc07\xa3\xcadP\xe7\x11\xc5\x12\x8cM^\x89\xa1\xc8\xdb\xa6\xfb\x8d\x8d{\xday\xe7\xaa\x99T\x1bF\x19\xd6\x88\x94\x07\xc0\x8e\xc7\xf9\xd0\x8ds\xbf\x97b\x95\xb3\xf2T\xc2\x9a\x1dQ\x91AUD\xff\xb98\xa5*\xcf\xe8X\xe4\x823I\x87rM\xbd\x1e:\xd1V\xfe$\xc3\xfd\xcf\xfa|'\xc9\xd6\xe9i\x83 Li\xebCdu\xf5\x86\xc6w\x8b\xe5f\x97\xbd\xe3\xa6\x1c\x12I\xee\xd9$\xcf\x1e\x0cb\x14\x85\x8c\xc4\xa1*XV\xca\x04\x038\xb0\xf5>\xc9x\x9b[\xcb\x9e\x97\x891\xfam@\xe6>\x1b\x18\xf9\xd4\x9e1X%\xe4Jo\x1a\xc5\x86U\xfc\xb1h\xd7\xfa5ee\xb5\x94\xc4\xb3\x8c\xdek\xf7\x9a\x12#\x88\xbb\xcdp\xd7\x1eYQ-K^-\xfbgW\xc3\x88t2.\x9f\x18\xb5\xa8\xfa'\xa3\xf8\xd9\x06W\x16\xa7\x99\x0c\xe0\"\x05\xb8\xc4\x19\xc5s.XQ\x95\xbc\xfa\x83\xa4\xcao\x0c\x1fH\xcex\xfe\xaa\xbf\xcc\xeb\xfcpH*\x9f\xfal\xd6\xd1\xa8\x8e\x04*|\xc7\xdf\xd9\x1a\xe9\xf9\x0c.\xe4\x15\xc9R;\n\x93~\xd4\x05\xe2\xe6t\xc9\xe9\x08E~\xca\x8c t\x1a\xdc\n\x01B\xab\xbb\xdf}g\xfd\xce\xaclu\x81p\xc6\x81x\xceaT\x1fi\x80HRp\xe9(mp*p] \xce\x1a$\xae\xb3\x06\xda\xf6\xd2@Y\x04\xf0[\x08\xf0Y\x0c\x82\xfah\xfc|\xa8L\xf6?;\xf0\xb2b\x07\x83\x99\xa9\xf5\x11mRc\x96\x8a.\xd4\xfa\x97Y\xca\xef\x82g\xef\xa3\xa4l:\xee\xf9\x8e\x86@\xddO4\xbeQ\x87\x07\xb8\xbb\x9cg\xa6~\xd7\x94\xb8\x15\x9a1j\x83{M-\x95Xw\xab\xaa*&G6T\x89\xba\x90d-\x15O{nG[\xb0\xb2\xcc\xd7\x89L\xe3C\xf1\xd6\xfa5\xffR\xf1lh\xd3\xed\xc2/L\xcbz\x8c\xca\x9f\xd3x1Z\xd6\xca\x05\xbc\xeff2\x0eA.\x812\xbar4\x01\x8d\x93Q\x89\x13%\x81|\xcb_\xc3\xa6l\x08\xe9\xde\x9e\xa3\xd8\xda[\xb7\xe5\xb40\xc3`\xef\x1a\xb6\xe7(\x02\xb1\xb0\xa6\xc5s\xae\x0f\x95@\x928\x9db,\xc7\x82\x0b\xdd\x03:\xdd\xc9\xbfl\x0bC10\x0d\x8d-\x0cZ\x19cCh \x9f\xa6\x9f\xa5\xda\xb3\x8ajOT{ \xaa=F nN\x9a\\\x1a\xd5\x1e\xa0\x93\x14\xe8\xf7ST{:@Y\x04\xf0[\x08\xf0Y\x8c\xa8\xf6P{\x8fj\x8f\x02\x9fk*\xaa=3\xd32\xaa=f\x98@H\xf7\xf6\x1c\xc5\x16\xd5\x1e3\xcc\xa4\xf6\xc8{zy\x9dWI\xb6[\xca\x1a\xde\xe3*\xd0\xe8\x86r\xdf\xcd\x0d#\xbf\xfb\xbe\x9cw\xa4G/cw#e\xe9_i\xf7\x9dX\xff\xd7\xcay\xd782\xb5;\x0f\x1d\xd85\x91\x8c\xa8\x94\xfeQ\xdd\xe4\xa2\xfd6M\xd62\x90W\xec\x18\xc3\x1a\xa7B\xaa_b\xf9\xd1%\xab*\xb6\xfe|\x97\xce\xc3\xd6\x88\x96\x96`B\x04\x82\xd8\xe9\xea\x0bjb\x10D]B\x7f@\xec\x13\x0c\xf1\x9cf v\n\x1e\x1d\x83-\"\xd4\x0c\x948QKK\xfa\xd8\xc1s\xfc`\x8f45\x03\xe1\xa0\xf6A\x1f\\cT\xaa\x19\x8c\xb1\xaaf\xb8\x8f\x01Q\xd8J\x1f\xe81\xb0$t\xc68YWd\xac\x19|\xe2eI\x08\xfb1\xb5\xe3Q\xb4f\xa0\xc4\xd6\x9a\xc1\x1cqk\x06\xaf\xcd\xe26\xc3h\xf0BK\xb9/\xdb0\x8c\xef\xb5|\x176\x08\xb7\xaa\xa9a$B\xd8\x0cw\xcc\xb7\xa8\x06\x05\xf0'\x0e\xd0\xc5\xf1\x06<\xad=\x1a<\xa9\x04\x01\x94\x02\xf0\xb0\x02i\xa0j\xef}\xf0\xdb\xdd\x1a|\x16\x13\xc2\x16\x14B\x16\xd5\xdbj\xd4k\xe6\xb2\x1ei\x18\x8f\xcb6\x83'\x0d<\xe7N\x8b\xec6\x83%\xde\xdb\x0cw9\x8d\xd1\xe8l3\xdc\xe5p\xec\xd9\xd6f\xa0\x86\xa6\x93\x90\xf5\xc3\xd7\xcd\xe0\x0ej7\xc3]\x92m,,\xde\x0cw9\x1as`\xbd\x19\xeer\x1c\x8e\xd0|3\xdc\xe5\x80F\x82\xfb\xcdp\x97\x83q\xa7\x07\x98a\xf41<\x7f\xf1\xe1\xf5\xbb\xf1x\xa6.\xf4\x11\x10\x02\xa2\xba\xd0G\xf0\xee|,.\xaa\x0bu\x94\xd442\xf8\xe9\x0d\x08xP6?\xa6l\xd7z\xae\x11\x8b\x91\xa9C\xe4\x0c\x98\xeaB\xe3@L\xe8\xa6K\xcf`\x85.\x04\xed\xd1 \x96D\x88\xe2\xe8\xc2\xa4\xa1\xd1\xcdn\x08$Gs\x17&\x8d\x8fL\xba\x10\xdb8\xc0K)~~Hv\x18\xd0'\xeeym<\x96nY\x9d6HD\x97d\xc0\x14N\x97\xc1\xd8w\xbc\x88\xb5\x9b\xe8X\xfb\x08e\x06\xa5\x16\xbbo\x98#*\xb0\x16\xbb\xd5\xe3\x8dLgL6\xea\xb6}\xf4\xcd\x19*9!6\xd0y\xdfPo\x99fl\xae\x9dG\xbfA\x89\xb7'q&\x08\xd4\xf9 x\xf1!\xef\x83\xe4y\x88\x8e\xa7\xd5\xb0\xbe\xa1\x0d\xbc\x88\x02\xde\x84\x11\xc07\xdf}\xff\xfd\xd3\xffJ\xfd<\x80@\xe0O$\x905\xe8\xd6\xc7\xef\xbe\xff\xfd\xe7\xa7_\xdb\xd0|o\xe7\x8b\xd3*M\xd6\x7f\xe4\xb7\x1de\xfe3\xbfmWU\xa4\xdf\xaf\xa7\x92c\xd1\xd2?\xd5\x87\x95\xd0\x92\x12i\xd2\x05ob\xfa*.\xb5\xf1\xe5X$y\x91T^g\xe2N\xc6\xa5G\xe4\x1a\x88\xc7\xb1\xf49\x90\x1e|\xca\x93\x08^{\xdc\x83Cy\x10\x02<\x89\x01\xfe\xbc\xc9\x93(\xe0K\x18\x08\xe1Jw?(?~D\xe5F\x82\xcf\x90\x10\xfa\xf2\"_N\xe4I@\xfai\x87P\x1etg#\xa2\x07\x05\xd6-\xe8Cq\x0fC\xc8\xaby\xb6\x1c7\xd8\x12zt\xf7\xb4\xba\xfd\x99eU\x92\xf1\xa5[\xe2tK\x9a\x0e \x93\xc4\xa4h\xac\x89\xc4\xa1 \x14B \x9es\x12?&M\x12\xc8\x13\x05\x1f\xeeK\x9e0\xd0'\x0d~\xbc\xf6n\x86@\xe5\xac>\x127\xa5\xb3 2q\xdc\x07\x17\xc1\x93k\xce\xd8?\x9dC\x12:%t\xe72\x14y\xf425\x94\xf9\x8d\xe0\xca/e@\xf1s\x19O\xec\ngF{\x83\x11W+\x88\x9dU\x15?\x1ce(s\x95\xc3!)S\xce6\xc00\x80\x190\x80Y\x1b*Zq+\x0dA\x8c\x9c\xc7\xccef)\x81ip\xe4!\x0e\x93\xab\xc5\xe6\x9c\x8b\xb5/;?Y\xe9\xa7\xc1uT\xbe\xbe\xda\x976\x87\x90M\x9c\x98\xb3h\x98\xd3E\xe3 \x8a\xdd\xed\xe2\xe3`\xf1p\xa5x8Mh\xee\x11oGHg\x1d\x9d^\x0c\xb7o\x82\xe4\x85p,\x83cg\x8e\\\x0dD\xc4\xf6+a\xd4\x03@\xc4n\x18v\xe7\x9e\xa1\x9a\xe5\xcd\x06w\xfb\x95\xe5eD7\x1b\xc9[\xd8\xfa\xe6r\xf3\xfb\x17/0H\xbe\x84\xa6b\xb8$\x13\xfep\x86J\xaa\x18\x88\n\xab9\xf6*v*4\xf8\x96\x8f\xaa\xa4\x89\xcf\xc0\xac\xba\xc5:\x9d\xf5\xc9\x7f\xe2\x95\xec\xf3\xc5-V\x7f\xf4~\x15cx5\xf9\xdc\xb0\x93+\xad\x8e^A\x01\x17\xa4\xe5\xda\x19\xbfr\xc6\xae\x9b9o\xdc\xd1\xeb\xc5x\xb5\xf4\xf2g\xd47\x0f^\xf1c\xc1\x05\xb3\xda<\x83c\xcaY\xc9\xa5\xac\xff\xa9\xdc|\xc6(\xfaO\x90de\xc5\xd9\xe6A\xd0\xb2\xce\xb3\x16\xd6\x04&j\xba\xd2\x04\xf1c$\xf1\x88,\"Xsx\xac)DSQ\xbb\x05sz\xea\x8f!\xad\xc7\x80\x8f\x96\xe8\xe3\x93\xd63H\xd91\x13p<\x89\x87\x9a\xb2cO\xd0\x19Y\n\x9b\xc5\x89t\xa8M\x0bgN\xa3!\xa1\xb3\xdd\xc9\x8e\x84\x98 '\xe3\xaedg\x82:\x01\xae\x91\x83s\xf4`\xe7\xf1\xf5\xcfN\xf5\x02\x08*\x068\xa3\xdc\x9c\xe4\x027\xc9\x08*\x07\xd8\xee\x06\x0d\xee\xf4\x0e\xd2N\x1cS\x88\x08\x89\x1a#i\x19\xa1\xdd;3\x05B\x11\xf7\xe7\xe5\xcc\x810\xb2OZ6C\xe8\x18]y \xa1x\xed\x19\x06\xa1\x18 \xb9\x02\xa1\xa8\x1dQ\xff\xa1hi\xf1\xfb\xeeh\xfd\xb0\xfeg\x8a\xbb\x1f>;\x16 \xa2\x0d\x8a\xddC\x8d\xc7\xec\x02\xb1:?\xc2\xb5D\x8a\xd83C\x11|\x98\xb9\x10>8\x8a\xe1\xc3,\x05\xf1\xa1\xd9\xac\xd3\x8b\xe2\x83\xa3\xb6\xbd\xd7\xd6\xb1\x97\x97\x98\xb0\x7f\x82+Rx\x14\xce\x07wo@\xe8\x11\x9cE\xf4\x81\xd6\x11\x10;\x03\x8dn\xf4\x0b\xe7Il\x03-\xe0:\xac\xca\xa4\xb9%\xa5\xd2\xa4\xb5%1\xb8:\xa8\xe2$L\xab: $6\xd6\x85Y\xabO\x82O\x05J\x98\\\x85\xd2\x86\x81^\x89\x12\xc8\xc9Z\x1e\x1b\x9a\"\xd5#\x90\x12\xb4h\xaa\x04\x82\xcd\xf73\x04jR\x16\x91w\x80\x07\xff\x00\xa7V\xd3\x80\x07\xd9\xc1u\xc3\xf7\x81\xa4*v\xc1\x83\x1a\xe0I\x11\x01^ W>\xfbB\x03}kj\xa0.\x14\xf8/\x16\xf8.\x18QQ56\xa1$U9]\xdf\xf5\x87\xf4\x89\xbal,] \xb9p\xda\x100\x12'\xa9=*`\x82\xe7>\xa4\xf3'r>\xc8]P\xc0\xff\x1a%V\xc7t\xe2\xe9\x95 \xf4\xad\x90 ^U2\x81Z)\x13\xbe.:\xcfU9\x13B\xaag\x02\xa9\x82&\xf8W\xd1\x84\xaf\x95\xc8\xa3\xdb\xda\x89lP\x14\xd6YY\x13\xe6\xa8\xae S*l\x82'\xd1f\xab\xb4 \x1e\xd56\xc1]q\x13\x9c\x8f\x0d\x00]\xa8\xa1\n3Q=\x8c\xea\xa1\x1d\xa2zH\x97\xc1\xa3z\xe8\x02\x0f\xb2\x83\xdf\x9d\x19\xd5CR\x1b\xeaB\x81\xffb\x81\xef\x82E\xf5p\x00\x01#q\x92:\xaa\x87\xfe\xd7hT\x0f[p\xd7t\x8e\xea\xe1\xbd\x129\xaa\x87.\xa2}\xcd\xea!=\xbb\x08\xe8\x1b\x90&G\x10\x1fh\x80\xb9\xfb%\xdd\xe3\x9e=\xba\xeeo\xeav\x99\xf1\xf1\x06\xf0~\xc0\x01\x02\x1eq\x00\x9a\xd8K\x11u\xc9\x0f:\x00\xadO \xf6\x0b>\x8f;\x00\xbdo\xf0\xe8\x1f\xc8\x0f=\x80\xdf\x00\xc0s\x10\xe0\xf7\xe8\x03\x00=\x92\xda\x0c\x9es\x81\x80\xf9\x80\xef#\x10@g\x00}\xd0\x0c\x81\xfc\xf6\x02\x82\xc7\x83\x10p\xcf\x83\xa3\xb2\xae>\xd0\xa2\xc4\xc9\xe8\xcc\xd1\xe4T\xb3\x93\x06G\x8c\xb9\x19\xa8\x91\xe7d\x84\xa6\x08uw<\xba\x19\xa8Q\xeaf\xf0y\\\x02B6\x1e\xcd|\xa6\xc1\x1b=\xf5\xceo\x03\xf5\xc1 \x986 \x97H\xd0\x05\xef\xc7'\xe0\xfex\xa7\x8f\x91\x07\xc2\x88\x06~*K\x03\x01V:\x0d\x01\xd4\x83@\n\x02xZ\xef4\xf8XO\xfa\xe0\x7f24\xf8.8\x84/:\x84.|\x90\xb5O\x83\x87\xd5O\x83;\xc3\xc1\x0c\x01t \xa0\x07=G\xc2\x0c^\x0fZ\xc0=M\xcb\x99\xd7`\x86\xfb\x18\x1a\xbdPJ\x03\xd4D\x0f2B[>\xdd\x10hi\"f\xb8\x0fr\xba\x12M\xccp\x1f#\xf3y\x0c\x03\xeeiL\x84d\x173\xdc\xc7\xe0\xbc\x1f\xc9\x80{\x1a\x18-\xe1\xc6\x0c\xee4\x1c3\xdc\xfd\xbcB\xb43b\xbe\x0f \x17\xe5-\x0e \xbf\xc7\x01\xfeb\x99\xaf8\xf6\x15*$$?\xbf\x86\x10\x89\x90\xeeW\xd3\x105\x11\x8f3\x88\x105\x11+\xf8\x1f \x0d\xbe\x0b\x0e\xe1\x8b\x0e\xa1\x0b\x7f\xdf\x9a\x88\xdf\xbb\x1fPS\x84R\xb9\\\x03\xb1\x82\xb9\x86\xa0\x0d\x1c\xb6}5g\xf2|\x0b\x04\xa6l\x0cZ\x0cb\x17|\xcaV\xd9\xc1\xa3\xa0\x95\x1d\x1f\x9e\x1c\xd0\x93@\x10@$\x08\xe3}\x01\xc4\x82\x10\x82A(\xd7\xbb\xbf\x01\xfa\xf3\xbb\xd9\xb9](\xaf\x0b\xe1t\x01\x84\xf5\xe3 0\x85\xc7\xdd\xf9\xe8\xfc\xe2x\xebV~\xc3\xa2\x0d\x89\xf4\xa6\n\xd0{\xa7\xf5\xea\xf3\xbe\n\x90%i\x82\x04Mf\x86t\x16H\xbe!\x88\x14D\xf0\xe0!\xe4\xfb\x804\xe7\x1b/\x10\xfe\xce\x0b\xd8\xdez\x811.g\xe7h\xb3\xd7w\xb68\x89\x11\x1f\xa1\xa8\xfc\xc0\xf1\x1b\x0b;\x1b!\x16v\xee\xc0\x98\xb3qL\x84\xba\xab\x1a\x9b$\xf7\x1f\x81x\xe3.=_\xe7\x9d\xa7\x9b\xce\xd3!Gw\xbd\x059\xd9\xe6~\x87\x06|<[\x84\xa5\"\xec\xf2\xfby\xb2\x8c\xe0U\xf2\xe8\xc92\x9d\x19\xdf\xab\x19\xa0\x1b\\\xc3d\x87\x8c\xc5\xd9\xd2Cgt\xbd\xd4\xef\x8144\xd3O\x88|H\xb2\xb5\x0c\xc8+\x0fy\xf9\xb8\xdc|\x86o\x17\xff\xfc/\xf1\xb9\x90\x018\xb7\x95\xdeT\xf1\xb9\x90\xe6+Z\xd2V|.\xa4\xfdW\n\xba\xf8\\H\x1f\\BK\x94*M[%>\x17\xd2\xff\xd1c^\xce,\x92\xf8\\\xc8\x08FB\x06E(\xea_\xf3s!\xee\xbb\xbc\xdf\x81|\x7fp\xcf!/\x92]\x921u\xd1\xd6\x9fiK\xf6\x99\x01\x15NVH\x93L\xc8\xb6/\xba\x8f\x0e\x1a\x1a\x9cgp\xc5\xf5\xe3\x83gP\xedE\xdf\xaa,\xe1'A\xb2\xf2\xd3\x19\xacN\x95\x16\x10>\xbc\xfa\xe3\x19\xdc\x98X\x98z\xed\x10\x92\n\xaa\xbc\xdf\xb7\xa9k!\x9b\xacxU\xf1\x02>\xfe\xcf\x11\x01\xdb\x9dY\xd1\xcc >\xaa\x02\xf1Q\x95\xf8\xa8\x8aKv\x8a\x8f\xaat\xbfqIo\x08\xb4\x88\xf5X5\x976_7\x1b\xebB\xac\x9a\xebv\xfe\x83\xdf\x86\xa6\xe8>\x08\xa4l:\x9a\xc2\x850\xe6D\xe9\x025k\x8e\xc8;\xc0\x83\x7f\x80S\xf7k\xc0\x83\xec\xe0\xba\xe1\xfb@R\xa8\xbb\xe0A\x0d\xf0\xa4\x88\x00\xafl7\x9f}\xa1\x81\xbe55P\x17\n\xfc\x17\x0b|\x17\x8c\xa8\xce\x1b\x9bP\xb2\xd6\x9c\xc6\xf9\xfaC\xfaD]\x96\xa8.\x90}\x11\x1a\x02F\xe2$u\xac\x9a\xeb\x7f\x8d\xc6\xaa\xb9-\xb8k:\xc7\xaa\xb9\xf7J\xe4X5\xd7E\xb4\xaf\xb9jn|T\xc5\xb7eT\x0f\x1b\x88\xeaaT\x0f\xc7\x80\xc8;\xc0\x83\x7f\x80\x87\xd6\xe1Av\xf0\xbb3\xa3zHjC](\xf0_,\xf0]\xb0\xa8\x1e\x0e `$NRG\xf5\xd0\xff\x1a\x8d\xeaa\x0b\xee\x9a\xceQ=\xbcW\"G\xf5\xd0E\xb4\xafY=\xfc\x05S}\xe2\xa3*C\x88\x8f\xaa\xc4GU\\\xdfy\x0d\x00<\x07\x01\xf1Q\x15\x04\"\x03\xe8\x83f\x08^\xef\x96\xc4GU\xdc\x10\x1fU1\x035\x96\xdf\x0c\xf1Q\x95q\x980 \x97H\xd0\x85\xf8\xa8\x8a\x8f\xca\xd2@\x80\x95NC\x00\xf5 \x90\x82\x00\x9e\xd6;\x0d>\xd6\x93>\xf8\x9f\x0c\x0d\xbe\x0b\x0e\xe1\x8b\x0e\xa1\x0b\x1fd\xed\xd3\xe0a\xf5\xd3\xe0\xce\x031C\x00]\x02\xe8A\xcf$1C|T\xc5oh~\x95M\x10\xa8\xe90d\x84\xf4\xfa\xa3\xb4d\x1a3\xdc\x079]\xe98f\xb8\x8f\x91\xc5GU<\x07\x17\x1fUi\xc1\xdd\xcf+D;s\xa7\xfe\xd09K|T\xa5\x0f\xfeb\x17\xc9\xcf\xaf!D\"\xa4\xfb\xd54DM\xc4\xe3\x0c\"DM\xc4\n\xfeGB\x83\xef\x82C\xf8\xa2C\xe8\xc2\xdf\xb7&\x12\x1fUqVU2C\xf0\xc6\xa0\xc5 v\xc1\xb7.\x93\x19<\xab5\x99\xc1\xb3\x86\x93\x19\xe8\x95\x9d\xcc\x10T\xef\xc9\x0c\xfe\xaa\x17\x02\xb1l\x94'VR\x91)3x\xc7\xf3t!x?\x07\xb39\x82\xe3t\x08\x93\x87\xe9gIE \xc7Tta\xf2X\xbdH\x1a\"\xbc#P\xabmy\xa0\x8c\x8f\xaa\x8c}\xeau\xc7\xf9\xdcl\xb4\x12\xd0\x1a\xfcnr\x8f[\xdccv\x08>sD\xf0\xe6qA\x871\xe0 \x92KHk\xf0&\x16\x04\x11\x0c|KKk\x08\"\x1c\x84\x11\x0f\xfcKNk\xb8\xdfa\x86H\x0d\xd4\x92\xd4\x1e(C\x1f\x1a\xf0-Q\xad!\x88\xc8!\n\xdb\xd1\xbft\xb5\x86{\x18\xe31>\xaa2\x02\x9e\x1c\xd0\x93@\x10@$\x08\xe3}\x01\xc4\x82\x10\x82A(\xd7\xbb\xbf\x01\xfa\xf3\xbb\xd9\xb9](\xaf\x0b\xe1t\x01\x84\xf5\xe3 0\x85\xc7\xdd\xf9\xe8\xfc\xe2x\xebV~\xc3\xa2\x0d)>\xaab\x06:\x0b$\xdf\x10D\n\"x\xf0\x10\xf2}@\x9e\x9c\x9d\xca\xd3\xe3\xa3*\x1d\xb8\x83\xb1\xf8qh\xe2\x00\x88]S\x0cw\x9e=\xba\x8crT\xfbP|T\xa5\x81\xb1\xd5\x8c\x8f\xaa\x10\xdc\xab\xce\xeb\xc8}\x05\xc5\xf2\xd7\x1d\x88\x8f\xaaP\xbcT\x9en:O\x87\x1c\xdd\xf5\x16\xe4d\x8b\x8f\xaa\x90\xaf5\xa7W\xc9\xa3'\xcbt\xfe\xee\x1eU\xe9\x8d\xe1?\xdacx\x819<%T\xbc\xae5-H\x88?\x9c\xa1\xb8)\x06\xa5B\xd6\x8e\xbdb\xdd-T\xdb\x84\xa7\x1b].\x9bo\xc4\x8d\xbf\xea\xd6\xe9\x1e\x0c\xa5&\xc7O\xbc\x92\x1d\xbe\xb8\xc5\xca\xcd\x97\xbc<\xe6Y\xc9u\xc9\xf0B\xff[\x8eM\xa7\xdac\xdb\xffq\xe2\xc5\xed\x93>\x06\xb8\xbcx \x07^\xed\xf3\x8d\xe8\x18\x9f\x8dY\xacX\xc9\x17\xcdT\x17\xd7OW\xbcbO\x17?\xf1\xea\x8d8m\x88C\xf7\x8e{l\xc0/\x87\x1crx\x93\x1b\x99\xac\x99\xb5\x0e\xaf!\xeb\x1e\xb6\xec\xdc\xd1\x9b9@t\xb2\xdc\xc0dIgp\xe3\xceY\xde~\xf4F5\xde\xa4\xbd\xccC\xfd\xa0\xd0+~,\xb8\xe0\xb1\x9bgpL9+\xb94\x97}\xaa\xdf \xfa\x04IVV\x9cm\xe2#C\x03p\xb2Y\xbd~\xf1\x91\xa1\xe6+Z\x12c|d\xa8\xfdW\n\xba\xf8\xc8P\x1f\\B|\xd4\xb2L[%>2\xd4\xff\xd1c^\xce\xac*#\xfb\xa4\xe5E\x85\x8e\xd1\x95\xd5\x14\x8a7>2\x04@\xcb\xe6q\xe7\xed\x84\xf5\xef\xf9\x92\x0e\x9e\xb8\xf8|N|>'>\x9fc\x97\n\xe2\xf39\xddo\\r \x02-7!\xd6G\xa6\xcd\xd7\xcd\xc6\xba\x10\xeb#\xbb\xc3<\xc0oCS\xa4z\x04R\xde$M\x95@\x18s\x97u\x81\x9a\x1fI\xe4\x1d\xe0\xc1?\xc0\xa9\xd54\xe0Avp\xdd\xf0} \xa9\x8a]\xf0\xa0\x06xRD\x80W^\xa3\xcf\xbe\xd0@\xdf\x9a\x1a\xa8\x0b\x05\xfe\x8b\x05\xbe\x0bFTT\x8dM(\xf9\x89N7L\xfd!}\xa2.\x1bK\x17\xc8^'\x0d\x01#q\x92:\xd6G\xf6\xbfFc}\xe4\x16\xdc5\x9dc}\xe4{%r\xac\x8f\xec\"\xda\xd7\\\x1f9>\x9f\xe3\xdb2\xaa\x87\x0dD\xf50\xaa\x87c@\xe4\x1d\xe0\xc1?\xc0C\xeb\xf0 ;\xf8\xdd\x99Q=$\xb5\xa1.\x14\xf8/\x16\xf8.XT\x0f\x07\x100\x12'\xa9\xa3z\xe8\x7f\x8dF\xf5\xb0\x05wM\xe7\xa8\x1e\xde+\x91\xa3z\xe8\"\xda\xd7\xac\x1e\xfe\x82I]\xf1\xf9\x9c!\xc4\xe7s\xe2\xf39\xae\xef\xbc\x06\x00\x9e\x83\x80\xf8|\x0e\x02\x91\x01\xf4A3\x04\xaf\x17j\xe2\xf39n\x88\xcf\xe7\x98\x81\x1a\xa5n\x86\xf8|\xce8L\x18\x90K$\xe8B|>\xc7Gei \xc0J\xa7!\x80z\x10HA\x00O\xeb\x9d\x06\x1f\xebI\x1f\xfcO\x86\x06\xdf\x05\x87\xf0E\x87\xd0\x85\x0f\xb2\xf6i\xf0\xb0\xfaipg8\x98!\x80.\x01\xf4\xa0\xe7H\x98!>\x9f\xe374\xbf\x1a6\x08\xd4D\x0f2B[>\xdd\x10hi\"f\xb8\x0fr\xba\x12M\xccp\x1f#\x8b\xcf\xe7x\x0e.>\x9f\xd3\x82\xbb\x9fW\x88vF\xcc\xf7!\xe1\x8a\xcf\xe7\xf4\xc1_\xec\"\xf9\xf95\x84H\x84t\xbf\x9a\x86\xa8\x89x\x9cA\x84\xa8\x89X\xc1\xffHh\xf0]p\x08_t\x08]\xf8\xfb\xd6D\xe2\xf39\xce\xfaYf\x08\xde\x18\xb4\x18\xc4.\xf8V\xe02\x83g].3xV\xeb2\x03\xbd\x86\x97\x19\x82*{\x99\xc1_\xf5B \x16\x08\xf3\xc4J*'f\x06\xefx\x9e.\x04\xef\xe7`6Gp\x9c\x0ea\xf20\xfd,\xa9\x08\xe4\x98\x8a.L\x1e\xab\x17IC\x84w\x04j]5\x0f\x94\xf1\xf9\x9c\xb1O\xbd\xee8\x9f\x9b\x8dV\xec[\x83\xdfM\xeeq\x8b{\xcc\x0e\xc1g\x8e\x08\xde<.\xe80\x06\x1cDr\xb1p\x0d\xde\xc4\x82 \x82\x81o\x11q\x0dA\x84\x830\xe2\x81\x7fqq\x0d\xf7;\xcc\x10\xa9\x81Z|\xdc\x03e\xe8\x93\x12\xbe\xc5\xc85\x04\x119Da;\xfa\x17)\xd7p\x0fc<\xc6\xe7sF\xc0\x93\x03z\x12\x08\x02\x88\x04a\xbc/\x80X\x10B0\x08\xe5z\xf77@\x7f~7;\xb7\x0b\xe5u!\x9c.\x80\xb0~\x1c\x04\xa6\xf0\xb8;\x1f\x9d_\x1co\xdd\xcaoX\xb4!\xc5\xe7s\xcc@g\x81\xe4\x1b\x82HA\x04\x0f\x1eB\xbe\x0f\xc8\x93\x07/\x02\x80/\xf7\xf7\"\x04\xf8\x11\x03\xfcy\xfd\xdd\x0e\xc7\x87\xb3Syz|>\xa7\x03w0\x16?\x0eM\x1c\x00\xb1k\x8a\xe1\xce\xb3G\x97Q\x8ej\x1f\x8a\xcf\xe740\xb6\x9a\xf1\xf9\x1c\x82{\xd5y\x1d\xb9\xaf\xa0X\xd8\xb9\x03\xf1\xf9\x1c\x8a\x97\xca\xd3M\xe7\xe9\x90\xa3\xbb\xde\x82\x9cl\xf1\xf9\x1c\xf2\xb5\xe6\xf4*y\xf4d\x99\xce\xdf\xdd\xf39\xf5{ \x0d\xcd\xf4\x13\"\x1f\x92l-\x03\xf2\xcaC^>.7\x9f\xe1\xdb\xc5?\xffK|.d\x00\xcem\xa57U|.\xa4\xf9\x8a\x96\xb4\x15\x9f\x0bi\xff\x95\x82.>\x17\xd2\x07\x97\xd0\x12\xa5J\xd3V\x89\xcf\x85\xf4\x7f\xf4\x98\x973\x8b$>\x172\x82\x91\x90A\x11\x8a\xfa\xd7\xfc\\\x88\xfb.\xefw\xa0\x1f\x18\xcc\x8bd\x97dL]\xb4\xf5g\xda\x92}f@\x85\x93\x15\xd2$\x13\xb2\xed\x8b\xee[\x87\x86\x06\xe7\x19\\q\xfd\xf4\xe0\x19T{\xd1\xb7*K\xf8I\x90\xac\xfct\x06\xabS\xa5\x05\x84\x0f\xaf\xfex\x067&\x16\xa6\x1eY\x84\xa4\x82*\xef\xf7m\xeaZ\xc8&+^U\xbc\x80\x8f\xffsD\xc0vgV43\x88\x8f\xaa@|T%>\xaa\xe2\x92\x9d\xe2\xa3*\xddo\\\xd2\x1b\x02-b=V\xcd\xa5\xcd\xd7\xcd\xc6\xba\x10\xab\xe6\xba\x9d\xff\xe0\xb7\xa1)\xba\x0f\x02)\x9b\x8e\xa6p!\x8c9Q\xba@\xcd\x9a#\xf2\x0e\xf0\xe0\x1f\xe0\xd4\xfd\x1a\xf0 ;\xb8n\xf8>\x90\x14\xea.xP\x03<)\"\xc0+\xdb\xcdg_h\xa0oM\x0d\xd4\x85\x02\xff\xc5\x02\xdf\x05#\xaa\xf3\xc6&\x94\xac5\xa7q\xbe\xfe\x90>Q\x97%\xaa\x0bd_\x84\x86\x80\x918I\x1d\xab\xe6\xfa_\xa3\xb1jn\x0b\xee\x9a\xce\xb1j\xee\xbd\x129V\xcdu\x11\xedk\xae\x9a\x1b\x1fU\xf1m\x19\xd5\xc3\x06\xa2z\x18\xd5\xc31 \xf2\x0e\xf0\xe0\x1f\xe0\xa1ux\x90\x1d\xfc\xee\xcc\xa8\x1e\x92\xdaP\x17\n\xfc\x17\x0b|\x17,\xaa\x87\x03\x08\x18\x89\x93\xd4Q=\xf4\xbfF\xa3z\xd8\x82\xbb\xa6sT\x0f\xef\x95\xc8Q=t\x11\xedkV\x0f\x7f\xc1T\x9f\xf8\xa8\xca\x10\xe2\xa3*\xf1Q\x15\xd7w^\x03\x00\xcfA@|T\x05\x81\xc8\x00\xfa\xa0\x19\x82\xd7\xbb%\xf1Q\x157\xc4GU\xcc@\x8d\xe57C|Te\x1c&\x0c\xc8%\x12t!>\xaa\xe2\xa3\xb24\x10`\xa5\xd3\x10@=\x08\xa4 \x80\xa7\xf5N\x83\x8f\xf5\xa4\x0f\xfe'C\x83\xef\x82C\xf8\xa2C\xe8\xc2\x07Y\xfb4xX\xfd4\xb8\xf3@\xcc\x10@\x97\x00z\xd03I\xcc\x10\x1fU\xf1\x1b\x9a_e\x13\x04j:\x0c\x19!\xbd\xfe(-\x99\xc6\x0c\xf7ANW:\x8e\x19\xeecd\xf1Q\x15\xcf\xc1\xc5GUZp\xf7\xf3\n\xd1\xce\xdc\xa9?t\xce\x12\x1fU\xe9\x83\xbf\xd8E\xf2\xf3k\x08\x91\x08\xe9~5\x0dQ\x13\xf18\x83\x08Q\x13\xb1\x82\xff\x91\xd0\xe0\xbb\xe0\x10\xbe\xe8\x10\xba\xf0\xf7\xad\x89\xc4GU\x9cU\x95\xcc\x10\xbc1h1\x88]\xf0\xad\xcbd\x06\xcfjMf\xf0\xac\xe1d\x06ze'3\x04\xd5{2\x83\xbf\xea\x85@,\x1b\xe5\x89\x95Td\xca\x0c\xde\xf1<]\x08\xde\xcf\xc1l\x8e\xe08\x1d\xc2\xe4a\xfaYR\x11\xc81\x15]\x987\x1b\xad\x04\xb4\x06\xbf\x9b\xdc\xe3\x16\xf7\x98\x1d\x82\xcf\x1c\x11\xbcy\\\xd0a\x0c8\x88\xe4\x12\xd2\x1a\xbc\x89\x05A\x04\x03\xdf\xd2\xd2\x1a\x82\x08\x07a\xc4\x03\xff\x92\xd3\x1a\xeew\x98!R\x03\xb5$\xb5\x07\xca\xd0\x87\x06|KTk\x08\"r\x88\xc2v\xf4/]\xad\xe1\x1e\xc6x\x8c\x8f\xaa\x8c\x80'\x07\xf4$\x10\x04\x10 \xc2x_\x00\xb1 \x84`\x10\xca\xf5\xeeo\x80\xfe\xfcnvn\x17\xca\xebB8]\x00a\xfd8\x08L\xe1qw>:\xbf8\xde\xba\x95\xdf\xb0hC\x8a\x8f\xaa\x98\x81\xce\x02\xc97\x04\x91\x82\x08\x1e<\x84|\x1f\x90'\x0f^\x04\x00_\xee\xefE\x08\xf0#\x06\xf8\xf3\xfa\xbb\x1d\x8e\x0fg\xa7\xf2\xf4\xf8\xa8J\x07\xee`,~\x1c\x9a8\x00b\xd7\x14\xc3\x9dg\x8f.\xa3\x1c\xd5>\x14\x1fUi`l5\xe3\xa3*\x04\xf7\xaa\xf3:r_A\xb1\xfcu\x07\xe2\xa3*\x14/\x95\xa7\x9b\xce\xd3!Gw\xbd\x059\xd9\xe2\xa3*\xe4k\xcd\xe9U\xf2\xe8\xc92\x9d\xbf\xbbGUzc\xf8\x8f\xf6\x18^`\x0eO \x15\xafkM\x0b\x12\xe2\x0fg(n\x8aA\xa9\x90\xb5c\xafXw\x0b\xd56\xe1\xe9F\x97\xcb\xe6\x1bq\xe3\xaf\xbau\xba\x07C\xa9\xc9\xf1\x13\xaf\xde\x88\xdd^\xc9n/yy\xcc\xb3\x92\xeb\x82\xe1\x85\xfe\xb7\x1c\x99N8\xfe\x1f'^\xdc>\xe9\xb6T\xe8./^\xc2\x81W\xfb|#:\xc5'c\x16+V\xf2E3\xcd\xc5\xf5\xd3\x15\xaf\xd8\xd3E\x8d\xa1\x96\xaa?\xf0J\x0f\x01\xb7\xd9\x80e\x0e\x99$\xb2\xc5\xbe\xd0a\xdc\x8d\xa6\xbb\xc9\xa42\x9b\xb8\xfb\x80\xab[\xb8\xb9\x8d\x8b[\x98\x81\xf5\xd4X\xf4\xd0\x91;d\xec\xfe\x10\xcd\x96\xa7\xc2x\xbb;\x0e.E\x9a}\x0e\x1f/\xdf<)x\x99\x9f\x8a5\x87\x8c\x1d\xd4\x19:e\xc9_N<\xbd\x05q\xb0\xaad\x9b(-\xacR\x95\x94l1\x07%/\x12\x96&?\xf3\x8d9\x1d\xecX\xe4U\xbe\xceSX\x9d\xb6[^\xe8\xbc\xf5\x05\x96\xfc\xc6\xb9\xc0\xe1T\xd6\x07\x1cX\x05)g\xa5\xa5\x86A\x9eq\xf8\xe6\xc97\xb0\xde\xb3\x82\xad+^\x08L\\\x8a\xc5P\xf2\xdd\x81g5\xf7\xf9x\xf9\xe6A GV\xede\x07Ftu\xc6\xbb\xb97\x81f{J\xd3[\xf8\xcb\x89\xa5\x82*\x1b\xa4\x99\xeaBR\xe7!+\xad\x05\x01>\x89\xee\x9f\xec\xf2|\x97\xf2\x85\xa4\xc5\xea\xb4]\xbc:\x152\x87\xee\xd3#\x1c\xbdDY\xee\xf3S\xba\x81\x95,Se\xce\x88X\xb3,\xcf\x925K\xe5\x011\xf7\xf8\x90/v\x8b3AB\x99\x0d\xf8\xcd\xe2\x1b\xc1#d)\xf7\xf5\x9a\x1f+\xbey\xb4\xf8\x8d\xb9\xe9y\x06GA\xd4d\xcd\xcf\xa0\xe2\xecP\xc2\xa9<11}\xac\x00pLR1\xba*\x97\x93_%\x19+n\x81\xa5\xa9\x99v\xb7G\xae\xca\xb9\xcb\xba!\xc6\x8f\xf8\x97#_\xeb\x97\x03N\xa5.\xd1%7\x03\xff\"\x97\xf2yv\xbb\x80?\xe47\xfc\x9a\x17g\x92\xb5}\xbc|c\xd6\xeaQ\x10\x10h\xaceF\xca\xf5\x9e\x1f8|\xdaW\xd5\xf1\xd3\x19\xfe\x7f\xf9\xe9\x0c\xf2\x02\xb2\\\xfdz&w\xd9\x9ae\x90\xcb\xd3$)0\xbcI\x10NGUo\xcc\xd2\x1f/\xaey\x81d8\xb0\xa3zbA\xcc@\xea{\xaa0\x99\xb4{$X\x98\x9e\x99\xe7\xb6\xcd\xd34\xbf)\x9fY\xd6\xee\xb7p\xbemf \x96\\\x17\x16\xa9')\xef\xe7\xb2<\x1d\xf8\xc6Ry\xe2\xb7\xf0<\x83?\\]]\xc0O\xaf\xafT5\x7f1V<\xa0\xb7\xf2\xf62\xef\xcc\x7f\xebo\xf1\xab\xdb#\xff\xf7\x7f\xfbw\xe3\xc7\x92\x97\x9f\xe4Z\xab=\x84\xfc\xfe\x0ckM\xe4\x9b\xd3\x9a\x03\xcb\x80\x17En \xdb\xfe-_+\xbeK\xb2\xcc&\xe4\n\xb1\xcd\xc2\xf4o\x8f|\x81\xfb\x99\x1d\x93r\xb1\xce\x0f\x0bx.3\xd6\xde\xb2[\xf8\xee\xdb\xef~w&f\xa1\x1e\xc4\xc8r\xb8I6\xdcR\xa8G\x8eK\x8e 9\x81\xb9\xcb\xe4pL\xb9\xb8\xbb\xf4~\xce6\x02\xef1\x95/b\xe4\xcd\xef\x823\xd9\xd8\xf7\x07y\xf4K\xc8\xc5\xd8\x04\xc7\xc9\xfal\x0e\x1e*\xc1\x90\x1f\x8e\xd5\xad\xe2\x15\x8f\x8c\xc8\x0e\xd2\xfe\xb4\xb2p59+)\xf8vG\x0e\xe5\x91\xaf\x93m\xb2\x86\x92\x1fXV%kCt\x93<\xfc\x01\xf2\x8d\x8fRb\x11\x7f\xde\n>\xb6\xe2\xba.IKz\x19\x08*:\xe3}\x95_[$\x1f\x9c\xaaZ\xde\xfe4]\xa3\xf9\xf4<\xbb\xfd\xd4(5,\x03V\xac\x92\xaa\x10\x9c`dT\xea\xc2\x18\xa0ci\x9e\xedpE\xd8p\xc9\x04\x0b\x977\x10\x8ej5\x94\xed\xda}j\x11\xcd\xb0\xcd.\xf4)L\x93\x95\x1c\xaa\xbadJ(O\xc7c^\xc8k\xfc\xc8\xd6\x9f\x9f\x9c2\xf1\x7f\xe2\xf2\xc6\xf5\x96\"R\x1f\x9d\x14\xaf\x8c\x92L\xbe\x85S\x85\x9cP\xf3\x96Rpa\xb6\xd9$\xc8h`\xc73^\xc8bJ\xa8\xc7\xd4E\n\x9e\x1b\x98/.\xd1\xb0\x9f\xd7_\x98\xd8\xc0\xf0\xf4\x19\\\x88\xf1\x8a\x83\xa7\x86\xce\xdaeC_\xfe\xd3?Y\xee\xcc\x1f\xf3\x1c\xb6y\x0e?\xc0b\xb1\xf8W\xe3'\x82\x08,\xbb5\xff\xc8\xb2\xdb\x85\xe8\xfa\xc7\"?<\xdc\xe6\xf9#\xf3g\x8b\x85\xf9\"L\xb6\xf0P\xa0\xf8(\x07}\x95?\xfcG\x81\xe3\x11\xfc\xd5\xc2\xdcmx\xfef\xa7\xcdw\x0e\xda\xfcwv\xcd&\x13\x07~\x90\x82\x9e\xc0>\x81\nI\xf9\xf0\xc7<_\xacSV\x96#D\xc0!\x89\x068\x9fV#s\xbf\x7f3\xfe\xf5\xc9\x13\xb1%\xddc\xfa\xc0\x0e\\\xc8C\xcfqt;^\xbdB\x1b\xd8yVV,[\xf3\x87\x8f|\x07k\xc4a\x1b\xfb\xf0\xcfzi\x7f\xe7X\xda\x8b\xdbj\x9fg\x96\xc5\xc5\x81\xfd\x98\xe7\x0f\x17\x8b\x85\xf9\x16\xa9\x17\xf6\xa1\xf5w\xb9\xf9\xe5\x92\xfb\xae\xb8h|\x8e$}\xf5\xfa\xc3\xcb\xcb\xf3\x8b\xab\xf7\x97\x8flV\xaf\xe6\x90\xd8;\xc3\xee\xec\xe4\xfag\x07\xb9~\xca-5Q\x04\xa9\x9e\xfd\x00\xffx\\-~\xcc\xf3\xbf.\x16\x0b\xf3\x8e\x12\xa3<\x13r\xaf\xf8\x9ae\xb7\xc7\xd5\xe2\x1d\xbf\x19\x19p\xb2\x95_\xff\x97\x1f KR\xeb\x16\xb2R\xd1\xb2\xb1\xed\xdf\xf7&bi\xaeF\x85sX|\xcc\x0e\xac(\xf7,\xbd\xca\xff\x7f\xf6\xde\xb6Kj\x1cI\x14\xfe\xde\xbf\".\x1f\x16\xb8\x0b\xc9v\xcf>\xf7\x03\xf7\xb2g\x19\xa0\xbbk\xb6\x1b\xea\x01\xba\xe7\xd93gN\xe2\xcaTU\xf9\xe2\xb4\xb3mgA\xcd\xee\xfc\xf7\xe7H\xb2l\xbd\x84\xa4\x90\xadb\x98]\xeb\x0bT\xda\x0e\xbd\x85B\xf1\x1e\xf2h/\x1d\xb2\xf3;\x97\xa1\xc5n\xa8\x9b@O\xaax\xb4\xef,Y\x1a\xedV)\xa2\x1dh\xa7\x0e\xe1z\xee#\\\xe1\x93\xcbSUm\xc4\x03\xceY\xdf\x87B\xbbW\xf9\x9d;\xe4\xd0q{\x10\xb8\xe3v2^duu\xab\xc4XG\xff0r\xf2P\\\xf6L\xf2sU\x81\xe87\xee?\xb9\xefv1\xc8\xd7j\x88R\xa0f\x03~\xdf\xbbl\x9a\xcdE\xd1\x8a\xc9}~r\xbb\xf9\xcb=\xb9ZR\xf4\xc3\xa5\\1\x94{\xfc]\xec\x82\xfd\xc3\xbb7\xaf\xdd_\x9f={\xf6\x0c\xdfF\xfe\xfe\xa4\x95\x91Le\xc3\xcf\xfa\xc01I\xc9\xf1\xd41\xa5\xf7\xbc:U\x05\xc2U\xbb \xf8\xeb{6\xf19\x8f\x80\x1d.\xd8~?q<\x83.\xb7@t9\x1a\xdf!\x95\xb8\x1f\xfe\x95\xaf\xc6\x87A\xe5`(\xa7\xd5\xdan\x14\xddx\xea\x11i\x8a\xddGN8&\xd1\xf9\xb2\xac\x18N\xc4\x15\x919gm\xd7\xd4\xdeS3\xe8\xd3D\xa1\xbd\xad\xd8\x98g\xf0-\x0eq|YX\x94\x87w\xbf\xa3_!\x00\xdeQ\xdc\x13ks\xef)\xdc\xc3\x0e\x8d9\xdd\x8d\x9c\xd1=\xac\xa4\xa5\x80%\xe6\xf2\xba8px\xffG\x0e\xf9_\xbc/\xf3\xb9X\xefR'tv9HF&N\xc8\xdd,;\xf8\xc4\xaa\xea\xf1\xc7\xba\xf9T\x8bc}-\xaal\xeeN]\xdf\x1c\xc0q\xde\xebp\xbf<\x1a\xec\xdd5\xdb}\xecNv\x06\xfd\xe1\xe9\xcf\xb2g\x9b\xbf\xfbU\x8e\xe4\xccL\x06&\xaf\xb2m\xb7\xff\x98\xb4\xe9cg\xf7\xdf\x95\xf5Nd\x1b\xe3p\x1ew\xfb\x8f\xf0O\x9b\x7f\xfe\xdd\xfd\xf1]\x93\xfb\x9c\xc6\x80\xf2\x9f\xc8\xcd9\xd9\x12\x1ch\xfa\xe5\xef|F\xf3jR\x9f\xf1\x0b~\x00\x96r\xcd\xbf\xbb\xadwe}\x95|\xcbw\xf2;\x9b\xfc\\4M\xc5\x8a:<\x82\x8bS\xaf\xd4\x19\xef^\xfe\xdb#\xf8\xc4T^,\xe9O\xe0\xefK\xef\x8a\xdfM\x17\xac\xefY\x0b\xbf\xfc\x7f\x88\x93Y\xbc\x8a\xe44\xd2a \xa6b\x91\x11NCz\xea\x919\x0d\xd3\xdb\x11\xdd>\xafg\xa3\xc7\xe15\xf8\xb9\xe9\xbbhx,\x86\xbe6\xbc\x13S|\x12#\xabu\xde6\xcd\xe5\x9b#y\xb9\xc4+\xa1\x11\x1b\xf2\x08\xf5\xb4qJ\x9b\xfa\x15~\xa8\x86\xf9\xe8b\x17\x9f\x82\x94\xbaF{\xf6\xae\xa8v\xa7\xaa\x10\xe9]\x7ff\xed\xc7\x8aA\xdb4\xbdt\x1c\xd2n\x80]s\x9a\xf4\x03\x17L3'*\xe7\n\xa9\x14\xe5pj\xc6Y1\xfeLpP\xba\n\xb0\xe6\\\xccEs\xd2&T7\xfbQ\xed\xc7)\xd4\xa4\xe6\x93\x1e\x00\xef\xf5\xd3Y\xc0\xfe$\xb9\xac\xd1\xb4\xa8\xe6)\xa4y\xf9\xa2\x12\x0eF\x9b\xe0t\x86\x08\xc7f\x00\xd8\x911\xa19\xde\xb1\xcf\xa0\x89j:\x08\x84\xc1\xf0:\x0b\x06\x15\x03\xae(l \xe2\\8!;\xf5r\x04u\x06l\xa2\xa9l\xb3\x91\xd5\x80\xa2#\xae\x81\xb2\xb2\x99\x88+[>\xf4\x95\xcdD\xe2\xc8\xb1\x17\xf7\xe7\xb0^G\xfe\xd3\x08\xf5Bj\x1f\xaa\xb2\x13\xfeo\xea\xfd\x99\xc7\xae\xcbw\xeeF\xd1\x9a|\xf0(<\x87\xe3?\x8b\x9e=\xfc\xe4\xf5\xa8\xb7\xac\xf7\x14\x84\x9d22\xfa\xc6\xfa\xbdb\xf3\xf9\xc3f\xf3\x84\xf5\xfa\xc0b\xd6'\xa2\xf7k.\xbf\xd7\xb0\xc7\xeb,_\xd7\xd9^\xaeb\xbe\xb6s\xa6\xd7\xbfu\xb6g\xabT\xe5[\xd0<>\xadK\xbcY\x85\xe7\xaa=\x1b\xc4\xc27\xc7\x83\xd5\xef\xad\xba\xd0O\x95\xe4\xa1J\xf7F]\xe0\x87\xba\xc0\x03\x15!\x18\x19\xfdL\xf3z\x98f\xf3-\x8d{\x95f\xf3'\xf5y\x92.\xf1!E\xfdE\xfb\x99\x9e\xa2\x93W(z\xd6\xecn\x16z\x87\xce\xf5\x0b\xf5\xfa\x80\xce\xf4\xfeD\xfc>\xbd75\xcd\x00\xe4\\\xe13\xfd;'_Nl\x83\xbf\x89\xf7\xbd\xcc\x9bSzoj\xe0\\?\xce\x0c\x1e\x9c\xcb|7\xadcf\xdf\xc6\x0b\xfd5\x87\x85\xd6!.\xf1\xcc\x0c\xba\x1dz\xbc1\xa3~\x98\xaeC\x12\xdd\xf7\xd2\xfd\xf6\xaf\xd8\\gyZR&\x1b\xf3\xae\xf4\xcf-\xeaQ\x99\xe0Ki{\x8b\xf9\xfc'\x97{N\xce\xf7\x994=C\x16\xfaI\x06=$\xfd\xbe\x91!\xafHt\xb5\xa8\x9e\x901\x1fH\xdb\xfbq\x81\xdf#\xc1\xe3\x91\xee\xeb\x18\xf5rD\x9c\x05\x9d\xee\x90wb\xde\x8c\xcb\xfc\x18\xd1Ai\xbf,\xf2Z\xb4\xbd\x14\x97\xf8'\"\xfe\x88\x8b<\x11m\xcf\xc3\x9c>\x87>oC\xdb\x05\xcb\xf60\xcc\xe3[\x98\xcd\xab0\xaf?!\xcd\x930\xeaC8h\x1fb\xde\x83\xc3kA\xbfA\xc7\xc1\xce\xed\x8d\xea\x01\x16\xf6\x12$\xfa\x07\x12<\x03\x8d!\xe7\xf4\x06\\\xe4\x07\xe8\xfa\xfd\xe5\xf3\xf8\xcb\xe7\xeb7\x7fw\xa3\xfe}1\xcf>E\xb4qo>T\xc0\xc0\x9c\x05\x02\xbe{D\x18K<\xf5b\x8a\xd7\xc9LFV\xbd\x9a\x89g\x909\xb8\xd9i\x90\x97(fC,\x1b\x0d\xf2\x1a\x96\x85\x06\x83\x86d\x9f\xf1B3\xb3\xce\xf4w`\xd9\xc12\xccx\xa5\xd6hf\x19OV\x192@,\x9b\x0c\x92I&\x0e\x0f\xc9 \x93b\xa9\x85H\xe6\x18t\x00\x94\x8c19\xb3\xc5h\x07i\xd7\xde\x1e\xfbf3V\x89%\x9f\"\xa7:o\x90\x18h\xda\n\xa4\x92.\xedS\xe5a\x94P\xd0\x16)W\xab\xcd\xfd\xf8\xddq3\xc8=j\xb5\xc8\xd3\xf7\xe7\x91C\x8f\x91'\x19\x9d\x9d;\xce\x8b\x9e^\x17\xc6\xaf\xc1\x0f\xd2\x9b\x17\x0e\x01\x83\xe6\x83C\xdes\xf2\xc0\xcd$\xc1n\xde7\x1a\xb2!\xb9\xde\x90\x0f\xad\x1co [\x8f\xe7u\xf3\xac\xbb7\x9f\x9b\xf5~\x18\xb7\xdfL\x83% \xb8;@dp\xe8\xc0\xc2\x83:\x1f\x0e\xce\xaf\xfa\xe6\x11\xc6c\x9c\x95\xe0\x1e\x1a\xb8i\x9d\x0f\xfa\x87\xc6\x99\xa0}\xa6\xcd\xb4\x17\xe6\x80\xdfO\x9d\x13fh{\x89&`\x13\x9e\xa0,\xe2m\xed\xed\x03\x82^\xa8_s\x86\xca\x98\x16|\xa9W\xb6\x05NXAq\xcfl\xc8\xe8\x9d\x0d!\x0fm xi\x03\xea\xa9\x0d\xfee\xc6\x8aWG\xef\x04{3L\xefm\x12\x08\xac\xf8\xaa\xc7\x93\x1b\xe6aoN\x97gBMj\xef\x08!8J\xf1\xa9\xbf\x0e\xb5\x84\x1a\xaaA\xed\xdb\x13\xd5\xee\xaaLw\xb4\xde\xb4\xb7\xd6\xb4\xdf\x1b\x1c(\x98\xe3\xf3G\x0fx\x86\x03\xee\x1d\x0e3\xba\xf3zi\xcf\x01\xb6\xcck\x1c\xa2\x9e\xe30cL>/\xf29\xb0\\\x8f\xf29P\x02\xde\xe5s\xc0y<\xcd\xe7\x80\n{\x9dC\xd0\xf3\x1c\x92\xfbKt\xc9\xb6\xfd\xb0\xc1\xe3\xb8Kb;\xfa\xcf\xe8\xd0\x932\xdb\xa2\x94f\xa6\x91\xfb\xfd\xe7!\xad\x9eR\x1a\x8a[S\x9a\x0d\xe4\x1d\xf9\xafr\x0162\xfa\xed\x1f\xbfu\x0cS\xaf\xdf\xbc\x7f\xf5T:JU\x15\x9f \x8cN\n\xe2@m\x00\xfe\xc8\xee\xb7\x0c\xfe\xef\xa9\xeb\xa1\xb8j\x19\xe3\x17<\xea\xba\xd2\xb4|3\x84\x1a\xd6\xe9G8\xb5\x1d\x98\xf0S\xe0#\x96\xc3z~<\xfeXt\xd7\xb0o\x98t\xbc\x18\xea{s\xe0\x1d\xe3\xc3\xd1bL%\x92\xbd\x94\xbe\xa3\x9aV\xbcc\xd2\xbd\x8d\xb3\x03\xc5`p\xd6\xeb\x84\x8f\\\xcb\x00J\xa1\xfe,\x14p?\x86yx\x90\x9c\x0ftt\xeb\xdc\xde4=\xdb\xe2\x03\x91-x\x0b\xc7\xeea\xa1@e[\xc7\xa3X\xb5\x08p t\x00\n\x8c\xf7)\xe1^\x96\x8d\xd5x\xfa\xe4\xa9=\x86wg?\xbc~\xf5r\xfb\xf3\xbb\x1f\xb6\xef\xff\xfd\xfc\xd5\xf6\x97\xd7\xff\xf6\xfa\xcd\x1f_'~u\xfe\xf6\xd5\xafo\xde\xbfJ\xff\xea\xc5\x9b\x9f\x7f>{\x9f\xfc\xdd\x9b\xf37\xef\x9e\xff\x14\xf8lPC<\x9d1\xbfXN2\xbd\xbd+\xafj\xb6\xff\xb9\xbbz?z\x18\xf7\x83\xb3I'\x1e\xe9\xf6_\x7f\xf6D\xd9\xc6+\xc2\x93Ihl\xde\xf5\x7f\n\xbf6\xbd\xe3|I\xf8Z\xae\xe7S8\x17\x97QQ\xf9A`\xd2\x80\xd9\x88\xc8\x19\xe3Jek\x9bS\xbd\x8f\xf7\x16b\x7fe\xd3\xba\xfb\xddw\xde\xf7p\xd1\xc2l\x843\x0e\xc4s\x0eA\xee{j\xc4%\x85\x18G\xae\xb7\xa8\xb8b6\xe2\xac!a\xe6\xbc\x05\x04\x1b\xebE\xe2>\xabFC/\xd5(\x9b\x00i\x1b\x01)\x9bA\x10\x96\xd0\xd7]\xd1\xc9~\xed\xc0\xba\xbe8 J\x15\xed%\xda\xa4Br\xb9\xd9Fi\xc3_xbj\x89\xbd\x07\x97r\xea\xd8S'cjT|\xa2\xd1\x0dN\xec\x0b\xceX\xc7\xbb\xcc3\xd3\xb4k\x8a\xdf\n\xd3\x18U\xe8\xcc\xcdd}\x15Z\xa6[A\x13\xca]y,zo\x16]\xd9\xcaZ\x13hT\x8a\x89\xe0\x17E\xd75\xbbR86J\xf6\xd6\xfb6\xfb\xdc\xb3\xdaWUB\xb5\xbf\xf1Z\x8ec4\xbc\x91\x06\xb9\\\xe9\xe66\xf0\xa6\xf6\xe4\xbbUM\xfa\xdfJ\x15#\x93\n\x8f\xf02\x0e\xec\x04\x92/V\xb5qh\xdb\xbf\x07\xa4\x9c\x162\x8e\x9eAh:\xeaz\xf3\xcc\xab\xe6\xe0.\x82\x9eA\x00|c\xb1\xcd\x8b\xee\x0fu\x81\xc4\xe2\x8c\xde/\x9c\xaf<\xb6\x8c\xcb\x1e`t'~\xb9l\x1b\xbb\xc6\xc9\xd4&\xcd\x0f\x1f\xa9\x7fV\x1a\xf3\x89=\x16b\xcf\xc5*\xf6\xacb\x0f\xacb\x0f\xda\x88\xc8I\xe3KW\xb1\x07\xe8K\n\xf4\xfbi\x15{\x8cF\xd9\x04H\xdb\x08H\xd9\x8cU\xec\xa1\xf6\xbe\x8a=CK\xb9\xa6V\xb1'\xf3Z\xaeb\x0f\xde\x16,d\x1c=\x83\xd0V\xb1\x07o\x99\xc4\x1eqOoC)p\xc77\xe3\x08\x15\xbf\x9b'B~\xf7}E\xef\xc8\x84^Bw#e\xeb_*\xf3\x1d\xdf\xffW\x83\xf1n2d*s\x9e\xb4Z\x8f\x8b\x84\x82\x1a\xe4\x8f\xfeS\xc3\xbf\xbf\xac\xca\x9dH\xb9\xc31\x06\xd9\xe3\x8as\xf5\xdb]U\xb2\xba\xdf\x16}_\xec>\xde\xa5\xf1P\x1b\xd1\xd6\xe3:'\x1b\x81\xed\x8c\xf5\x05\xe3b\x10X]B\x7f@\xec\x13\x10\xefE\xbc\x11;\x85\x84\x8e!\\\x93\xd6n\x14\xafH\xcf\x97\xf4\xb1C\xe2\xf8\xc1\xefW\x897\xc2A\xb5\x9b:\xb8\xa8\x0f&\xdeP\xcfL\xbc}\x89\x01Q\xc8\x8a\xdd\xe8\x1e\x9f$p\xde\\\xbd!?P\xbc\xa5x\x87\x92\x00\xda\x1e\xa4a\x9fQ\xbcQ\x8bi\x8fT\x0b{!\xe3-q\x0d\x12\xe7N\xf3c\xc6\x9b\xc7\xbb\x19ow9\x8d\xa0/2\xde\xeer8\xe0-\x0b\x817\xaa#6 \x98\xed\xac\x8d\xb7\xb8\x0b7\xde\xeer\xd9BN\xe0x\xbb\xcb\xd1\xe0n\xe4x\xbb\xcbqD\x1c\xd1\xf1v\x97\x03\n\xb8\xb2\xe3\xed.\x07\x13w\x86\xc7[\xd8E\x1eow7\x8f\x0cN\xf6x\xb3\xb3\x03\xe0-\x817I\xe1I\xbe\x12\xce:j\xf8T-\x95\x15\xa2\x194T[Yjo[Yj\xd1\xd2\xd0Z\xb5\x94\xcd\x84y\x1b\ns6\xf5K\xb1\xd4\xa3\xb5\x83\xb4\xa5r\xf6n\xe4\x08\xde\xd0x\x12\xbc%#c:**\n\xb2\xbd\xac\x8a+\xeaG37<\xee\xf0d\xb6\xc7\xf0\xfb\x9f\xde\xbc\xf8\xb7\xed\xd9\xcb\xed\xf7?=\xff\x81\xe0\x1cd7\x1b\xc2\xf3\xdf\xbf{\xf5:\xec\xcfd6\x1b\x00\xc1!\xcal6\x80\xd7g!\xbf(\xb3\x8d^R\xcb\x96!Mn\x90M\x1e\x94\xfd\xf7Uq\x05e\xbd\x17F\x8f!\x97\xb5:DQ\x87)\xb3M\x06\xc4\x92\xae\xbaLtV0\xdb,\x1c\x9dE\x92\x08^\x1cf[44\xba\xdaM6\x92\xa1\xd9l\x8b\xc6G^\xba9\xbaq\x80\x17\x82\xfd|W^I\x87>~\xcf+\xe5\xb10\xcb\xaa\xb0A\"\xb8\xb2\x86b\x80\x19S\x18\xa7\x8eWB5\x03\x1dG\x1b\xa1\x88\xa0Tl\xf7\xa7\"\xe2\x158\xb2\xdd\xbd\xf4e(T\xc4\xe4$n\xfbG?\x9d\xa1\x8e\x11|\x03\xa3\xf7\x0d\xf5\x96\x99\xc6\x16\xc3<\xfa\x0dJ\xbc=\x893\x91\x8d:\x1f\xd9\x92\xe8P\xf2AJ\"\x86< \x033\xb5\xf8\x8csk\xa6G\xe3\x91w\xfdT\x8b\x1d\x95\xaf/\xd3\xa3\xcf \xe4c'r&\x0d\x8b\x9ah\"\x8b\xe27\xbb\xa4\x18X\x12L) F\x13\x9ay$\xd9\x10b\xecc\xd4\x8a\x11\xb7M\x90\xac\x10\x91m\x88`f\xe0j \x02\xf6_ A\x0b\x00\x11:2l\xe3\x9e\xa1\xaa\xe5q\x85\xbb\xff\xcaJR\xa2\xe3Jr\x0d\x9a\xa9.\xc7\x93_\x9f\xbd\x94\xcb\xe4\x1cW\xf7\x90\x9a\x84\n]Id\xfd\xbct9\xe1\xf2C\xe8/\xe9\xde2\xe8\xed\xd2\xbc\xa1^z\xea\xd0Q\xdfJ\x7f?\x924\xa7g\x9dl\x85 U\x904\x05\x89\x91\x8f\xfc\x10\x08\xcer\x12\xe3\xac\xc9\x0b\x8d\x17\xa2 \x9f\xc5\xff\x04\xd1O\xdfz\x8b\xe7\xc1\xf1\x06\xe3u\\>'\x01c\x97\"[\x84\x9f\x99\xc1myx\x980\xff\x12\xe2]r\xb2oA^\x05\xe5S0\x1e\x05\xe3O\x96\x16\xd1 \xf2#\x81\xc9\xe2|\x08\x95\x07!\xf2\x1fD\xde#\xcew\x10H\xc0\xd4\x96\x13\x83\xa9Ey\x8d\xc0\x12\x07\xb0\xc9\xc3_\x10\x80\xe1|\x85\x97\xa7 @\xb4\x86\x97\x89\x8f\xc0y\x88|\xfcC\x84w\x18\x07N&\xe0\x9e\x83\x84.\xa0}x\xe2\xc7&z`\xa2G%tH\x88\xc7#\xcf\xc1\x08\x1c *\xcf\x85\x1c\x80\xe0\xa76\xd2#\xe8N\xeb:\x0br;\xc8\xf6rL\x7fN\xc03#\xe5y\xc2\x8d\xe0\x9ca\xf4\xfc\xfaY\xf7\x85\xa9\xcd\x17\xa55\x97\x89\xcc\xf5\xb1;)\xcd\x97\xa53\xcf\x92\xca\xdc\xddW,\xc3\x00y\xa3\xed\xa4\xdf \xdc\x99xU\xfb;@\xc7\xb1{\x9c\x9a\xa9\x8e\x9a\x9b\x8e\x9e\x8d\x8e\x98\x7f.)\xe3\x9c\x81\xd2\xffi+PS\xb3\xca\x852\xc7\xa5\xe6\x8aK\xcd\x0e\xb7\xeaHa\xd5\x91\xda\xed\x8et\xa4\x1e\x1e3\x8an\x18\x7f\x19a\x82\xa30\xad\xa9\x053\x8f\xa5\xe3\xb2\x87\xf7M\x1dU\xccR3'/\x98\x91\xfb\xcb\x82\xe7\xc9\x04\x16\xca\xfd\xe5\xc9\xf6u'3M\xc8\xda5%w\xb2\x8f\xb3/O\x17\x96\xf9)\x9a\x8bk\xe14\x9d\x9b#9\xa7\x96\x937\xcb\x84GI\x94e~\x91\x90\x19\xcb?\x95\xd4\xecWv\x96+d\x02\xaa[;\x7f\xef\xca\xc1\x8cm\xe5`\xc6\x16=\x97+\x07\xa3\xb5\x95\x83Y9\x98\x95\x83Y9\x98\x19\xd3\\9\x98d\x0e&\xe4S\x86\xee\x06F&\xbd 6\xc9\x10\x96\xe9;q\\\x9f\x97\xfeRKu9\xc0A\x13^:\xaa\xb0d\xedW\xb4\xb8^\x023\x89\x95\xcf\x9bq\xd3\xbb<)\xc4\xae7\x9f\xb7\x0e\x95?\xc5\xdf\xf5W\x80\xa0\xf3\xa9\xbe\xb7=\xd5\x1e\x92\xf8U\x88R\x1e\xc8\xcc\xb7\xc2\x0c\xde\xd5\xf7M\xac>\x83\xcf\x07\x9e\xc4\xf2a\xec\x93'\xfdH\x98'\xf3\xf1\x02\x10L$\xb2\x80{\xbc+\x06\x8f\xc0\xf3Bl\xe4\x10\x1d=\x84\xf9_\x88\xae\xb7j1>\x18\xa2 7\xa2\xcb\x05\xf1%#\xf0\xc5\x10\xe2\x8d\xc1\xcf\x1fCl\x88!>\x19\xe2\xbc2P\xe1#S\x0f\xf2\xcd\x10\xdd\xc3\xd0\x99 x\xd5\xcd\x1dm\x8c\xcb\x84\xf9<5\x02\x89T# \xc6\x8f\x05\xea\x01\xdc\xf9*\xe4\xe0\xb7!\xc4sC \xa7\x7f\x94\xf7\x86/\xbb\x04\x89(\x81\x00\xc4\xf3\xf2SXt\xe4\xb3\x04>\x1d\xa2\x97\x7f>~\x1d|\xc9\xf4\xb1\xcaa+\xc7\xb7r|+\xc7g\xb4\x95\xe3[9\xbe\xe1\x11\x05\x95W\x8e\x0fb\x1bE\xbc\xe8\x13\xaf\xf7\x95\xe3[9\xbe\x95\xe3S\x0d\xe5\xf8b\xd1\xbf\xde\x9d\xf4\x91w\xaf\xd6v\x16\xb4|\xc6(?b\xe5\xd2\xe8\x82O\xab\x0b\xe4\xe2E\xe8\xdd\x8d\xdf\xd7\x91\xf2D3\xb8\xf6.\\\x80h Gt\xb7\xecJ\xb4\x88Pj\xe9\xa0\xe8\x98\x804.\xa0\x15\x07\"\xb19\xa0!w\xb4\xeeN\xb4\xfcO\xee.\xe3T[5zY\x1f\x98J\xf6\x84\xa6:\xee'\xf4\xf4b>)%|\x04\\1\xaa\x00\xc0\xd4\xc2=\xa9\xe5z\xe2Ez\x08[\x1aK\x1bN\x00Ac\xeb\xc3%w\x92\xba\x89\xe5\xf9$\x16\xd5\xc9x\xa2\xe3i\xa1I\x13\x84\x18'45\x92\xd8\xa7\x1ai\xa6@\x9e-\xc4\xc5\xc1\xf15\x92X\xa8\x1a\x05\x8fT\x8b/9\xa4,;\xd0\x97\x9e(>Z/\x873l\xd3K\xd5\x90fD\x9aIz1\x1aB \x9a\\\xc3\x9b\xb8\xd6/\xd4\xa1\xbd\x1e\xd1\xfa0c\xac\n\xd6\xd2*\xbe\xe4\x9a\x03\xb5\xa6K\xae\xfe\xe2U[r\xf5\x94P\x97%W\x97\xc4\xca+\xb9\xba\x83\xa4\xda*GrE\x95<\xe33\x98\xb9\xe55SB\x95R\xa2\x97U\xfc\x92\xfabLM\xa4\xda \xed\xf6\x0b)\xd6T[\xb9\x99\xa9\x91f\n\xe4\xd9\xc2\xca\xcd\xe4\xe6f|I\xa1\xf4&\xe7\x12\xcel\x1e\xcdiND\x05*\"D\x13J\xe9-a3h\xf5=\xe2\x91\xeb\xb4\xef\x88\xb5<\xa2Q\xee\xb4\xcf\xe2u;\x88\x11\xf1x\xa3\xe6\x86\xccW\x99#\x9a\xf3Jo\x04s\x8d\xd9\x12\xb0&\xe1\x00\x13\xebl\xcc\xe8<&k\xcb\x16\xcc\xa3\xa5\xb7\x19#\x88L\x9f\xaef\xa2W\xc8\x10Y\x06\x08\x90p\xcd\x0cmD\xf3\xd3ox\x00\x12*_L\xd8\x8a\xd6\xbb\x08R\xd30\x0d\x9d\xfa\x0c1u~j\x1f\xa4\xf4\x04*O\xa1\xf0\x84\x13JDO\x12j\x12\xf2 \x13&\x06\xc4\xc9\x01=\x930q\x92@\x9d(\xa4\xe4\x10\xce\xdf9\xed\x86\xc8\x9b;\x98\x909\x98\x92<\x17\xe8\x0bBc&\x8f)\x19\x833\xf5|\x0cVs\x88\xa2x\x1c\xb9\xa3\xe7\x964\x11\x026EOlt2@\x9a\x10P\xcf*ib@\x9b\x1c\xd0Oi\xden)\xe73\xe7\xe9\x8c\x9eM\xda\xc9$-B\xecl@\xda\x99\xcc\xd2g\xccz?\xbe\x17\xeb\xcc\xd7Q\xa0~\x81\x17\xa6\x0fV\xbcB\x81\x8fs\xc8\x99H\xf8\x8er\xd7\x06\xe8I\x84\x92\xc4hH\x84zD\xb7\x96pt\xa3\xb4by'J\xf1\x90z\xf8CG<\x86\xf7\xc4\xfd\xc4\x0f\x17\xe9(\xcf\xec!vl\x93\x8f\xd6\x97p\x93\x99\x99,_\x13\x174`\xd4\x14\xf9\xde\x80\xc8\x9f\xca\x8e\x9e$\xd6\xe7hCJ\x00\xe7\x1c\\\xdf\x81\x8d\x86^\x06\xa1\x86 \x83'\x18S\xb6\x85\xf4E|>\xff\xdc\x87\xf5])\xee\xfb\xbe/\xfcN\xfc\x81/\"\x1a\xae\x04\x87~\xd9\x92\xdd\xfa\xd5g\x14\xfd@\xba\x8b\xbf\x17P\xc4\xf5_\xb69\x01\x00\xfe/ca\x00\xb2}\x81\x12HA\x0b\x8d\xec!\xac\xcf\x8f[gb\xb6\x19\x82\xd4\x10;\x8f@0\x11\x10\x96\x0b\xe2w\xb2l \xf6\x18\xc2\xec\x808C\x00\xa2%\x86\xb2o\xaa\xc5QD\xb5\xd8\x02\x03}\x91\x81\xba\xd0I\xd6\x17\x82\xed%\xaa\n&L\x80\xa6\xfa%k\xbe\x13z\xf4.U4tA6\n^\xc4\xcfsT\x99\x9dcF\xf4k _\x90\x83l\xa4P\x07\xd9b\x01\x0f\xb2\x05\xc2\x1ed\xfb\x1b\xacWr8\x84\x17\x9c\xe1\xb1\xef_*_h\x84l\xa4\x00 \xd9\xfe\xa6\x8b\x15G3/$\x1b\xfd\xe8\xf8G\x0b\xa2\x90-1\x94B6\xcab,\x08\xab@\xe1]6->\x0b4\xe2B6,\xd2V\xb6\x95\x9d_\xd9\xf9\xb1\xad\xec|\xb0\x87\xa5\xd7\xff\xca\xce\xaf\xec<\xd2H\x0b\xbd\xb2\xf3@Y\xaa\x95\x9d\x8f\xf2Y+;?\xb4\x95\x9d\x9f\xbfXq4\xf3BZ\xd9y\xa3\xcda\xe7c\x16\x9d\xe1\xad0\x82\x84\xef\xbb``\xb5l\x8b\xe0\xdfe\xf5\xcd\xd86.\n\xc1vg\xf2\xa9\xf1\x07b\xcbF\x0b\xc7\x1e\xc0\xf9\xd9\xa4\x10k\x14 \xd0\x96m\xa1\xb0\x17 \xd9\x96\x8d\xc0\xe6\xc5\xfa\x81H\x10\xb7l\x84\x8e\x80\xd8\x19P\xc2\xbaeK\x0d\xee\x1e\xbe\xa2\x8d\x15\x12\xc6\x0b\xb4po\xd9\x08w\x85\xde\xd4\x01\x8b\x86~\xcb\x16\x0d\x00\x97\xed.\x07\x11;\xf2v\xa3\x07\x86GAM\x81\xe33\xc3\xc3eK\x0d\x12\x8f\x02\x943H\x0d\x15\x97-5`\\\xb6x\xd8\xb8ldD\x88E[\xc9F\x06\x17\xbb\x93\xf4\x16\x0e*\x1f\xdeI\xef\x98\xe6\xf4N\x0c3\x97\xed\x8eh\x0bE\xc8\x85\xb4E\x00\x1aK:\xb5\x04\xed\x82j \xab\x01\x89+\x02@\xd4:\xa8F\x912\xedF\xc7P\xd5\xa8\x1b\x05\xe9\x9b\x05\xa9\x1b\x96\xa4\xa5\xb0> \x07~\xc9F\x0ff\x97-a\xbe \xf3L\x0fo\x97\x8d\x10\xe4.\xdb]\x0c\x9b\x1c2.\xdb]\x0c!o \xbcli\xe1\xf0\xb2\xdd\xc5\xdc\xa8\x01\xf2\xb2\xdd\xc5\x08\xe2!\xf3\xb2\xddE\xdf A\xf4\xb2\xdd\xc5 \x88a\xf5\xb2\xdd\xc5\x00\xd2\x02\xede\xa3\x87\xdb\xcb\x96\x7f\xdc\x99\x03\xf0e\x0b\x85\xe1\xcbF\xbc\xa8\xa9\x17\xf4\xdf\x90U\x8c\x84\xea\xcb\x96\xc2\x0b\xc45\xcf\xaa\xad<\xe2\xca#\xc6\xde\x86\x84\x8d\x82\xf4\xcd\x82\xd4\x0d\xbbk\x1e\x91\x92\"@69\xd3p\xa2\x00\xd9\xa2\xe9\x02dKB\xac4\xb4JJ [\xf2F\xd2\x92 \xc867\xa5\x80l3\x13\x0b\xc863\xbd\x80l\xe9I\x06d[\x94j@6J\xb8\x9a\xder\xa5\x1d\x90-)\xf9\x80ld\xcb\xad\xd9\x92\xf1.\x99|\x10\x93\x12\xc86{84]\x8dlQk\x9d\xd9f\x8f\x89\xb4D\xa9\xca\xd0\x9c\xe9\x0btx!ma\xca\x18\x93\x12\x1a\x04!\xe9\xc9\x0e(i\x0dd\x8b$7\x90\x8d@\xfb)\x14?\x96\xee@6\xda\xcdE\xb8\xb5\x08\xa3\x96\x8d2v\xd9\xc8\xb4\"\xe9\x10$\x1c\x80h\xb0\xb5j\xe4\xc9C\xd2\x02@<\x8c\xd2lI\x0b\x01i\x8b\x01\x94\x80K\xb3\xdd\xedpRn\xc1\x94\xf8M\x02\xb8X\x84\xa7\xd9b\xe6u\xb3%-Z\n\x03O\x8a\x0c5\xdb\x1d\x8c%\x9c\x8aA6\xe2q\xa2\x1e$\"\x1dI\x98,\x19O\x89\x14\x848aH\x984\xa4\xd1\x8e\x84\xc9C\xca\x02@*\xd5\xb8\xbb\x81\xd0\xe9EVj\x91B+R(E\xc2B\xd1N&\xcc\xa1\x11\xd9GA\xf3H\x1a\xdf\xa6u\x1f\xee:\x90,B\xb6H/a\xe8\xf1\xf4\x11\xb2\x859\xb1\x00\x07\x16%\x1eq\x92\x11\xa5\x90\xa4u&\x9c\xc5(=\x8cN\x06H\x13\x02*\xf5#M\x0ch\x93\x03:\xad\xcb\xdb-\x85\xb2\xa5\xd0\xb45}M\xa8O\x1a\x85ZD3\xfe\x96>\x8d3\xf3e8p&j7?k\xc6\x8f\x9a&\xde\xa1\x0c.\x15p<\xefb>v(\xb5\xc1\xa9\x0b\xe2!\xe7\xdd\x08\xb5\x05\x8e\xc3\x99\xe3\xdf\x96\n\xc2\xbfyt?4\xbf\x9f\x99=]\xd7\xe3,\xd5\xb7\xcc\xf0\x1d3\x17\x02\xf7\"\x8b\xf9\x8b\xb9\x9ea\xc8\x12\xda79\xba\xca\xd8 4}\xb5\x82\x9f\xd9\xc7\xcb\xe3i\x95\x80a\xaei%\x8a\x1d\xd6\xad\x10\xb4`yoV\xffm\xea\xb1?IH\x84\x1a|\x0ee\xc3\xadGA\x82\xe6\xbd\x00\x83\xb6\x1f\xd4\xca\xe3\xf7\xf9 \xee\xb4\xd1s\xdcc\x07\xf1\xcd\xa1\x82\xf7z\x9fP\x01,\xf3\x8b {\xc0P\xc7\xe0\xf3_\xa1~\xefz\x9fP\xbf\x0c\xf8\x8ePAxv\xe5\x8f\xef\x85\x04\x8d\xb0\x80\x11p\x96\x8f\xb2\x97^\xd6@5\xaf\x0b\xfcR\xd01\xbeo!\x0b\x81\xc0\xa39\xaf\xe7b)T\x8b:\xa8\xc7X\x0c\xd5\xfcN\xe8\x81\xad\xc8^;\x1aw\x1f'\x81\xf3I\x00\x11\xa7\xf0\x05'\xc3\xef\x1dB\xc6^\x8f\xa0Kr\xce \x8e\x1c\xa2\xa3\x07?\xcb3>\x0e\xb2>\xaaQd\xd6\xb0#Mt\xb9 \xbedD\xf7\x98\xa0CL\xdcM\x9a\x84\x89\xe8\x08\xe3\xac\x94j\x01w\xe7\xb9\xddG\x1d}\xe7\x02^\xc6\x82\xa9FsF\x9e;\xc6\x98\x8b\xf1\\\xb8~\xc7\xe1\xb9\x10 \xee\xc0sAG\x9c|\xe7\x82\xa5\xb9\xee\xc6\x9du\xe7\xf5\xbf\x90ET\x0ds\xba\x9d\xc1\xa4e\xbf\x0c=\x0e\xb2a\xaa\xac\x01t\x9c`\xd7[\x10m\xeb-h\xb4\x90#\xa8\x1c#n\xb6\xf1\x1am\"[\x14\xdb \x92\x0b'a\xf1bI\xb3\xd2<\x14\x13]1\x13\x9d/\xe9\xee\x96\xb3\x1c,\x8d\xfd\x8fzJ\xd2| \xc9^\x8f\x84\xad\"`\xf9\x97J\xc3\x13\xf5PL\xe8\xc93\x1d\xe3\x1aKr)D\x1d\x06\xc3\xa2o\x92S \xe2\xf8g\x81C\xdd\x00=\x8e\x7f(\x1d\xc0O\xbf\xcfx\xec\xa3?k\xed\x81\xb5\xf6\xc0\x7f\xa5\xda\x03\xb8\xdf\xd8\x0c\xa643\xc7\x1d@\xe3\x05,d\x10\x81\xa3\x98\x15\xc1\xab\x08\xea.\x03\x9f\x1fi\xc3(K\xda5\x0c] \xc8:\x0bv\xcc=\xc0\x0b\xd4\x06\x88\xeb\xeb1\xcb\xbc\xec\xc0A7\x17\xc5\x02\xb9}\x12\xae\xa2@\xf6\x9e\x19\xe7\xd1'\xca,8=\xc1\x0c\xca\xfb\x8e#zD\xf8)\xa0\xf2T\xe0\xe5\xab \x13o\xe5\x9d\x13\xc2_\xf9\xde\xc5x,X\x927\xd7R\x97\xc8\xef\x02\x16\xafQM\xe2\xaaH\x12\x08\xddr\xbd\xd8\x9a0\xd7zh\xaa8\x96\x19u\x83\xf2q\x10\x8e6\xf4 DY\xef\xd9\xe798\x86\x88\xb9\xd4\xdeC\x12\xa8\x10_'\x15\xc1\xc5\xad8\xb1\xe3x\xa1\x14R\xee\xad\xc0\xb1rW\x1e\x8b^J\xb9\x93\n\xd6T)\xf4\xd7L?\xe4E\xd75\xbbR|$\x0e\x89\x12\x8a\xd9\xe7\x9e\xd5V\x96\xf3y\xb3\xf9Og6#l\x8e\xe2\\\x98\xde\xabii\xb6\xbe\x0d\xbc\xa9\xab[9Q\x90fI&\xe5k\x0d\xdc@\xc7:g\xd4\xdb|\xbb\x11\x1a\x7f\xfa\xbeh\xb0\x8c\x1d\x92\xd3\xf7l\x06o\xbe\xd5\xb0\xd6\x00\x1f\xba\x18v\xcb\x8e-\xebX\xdd\x0b\x0dI\xcbn\xf8\x8f\x06(\xf1\x8b0\xb0hY\xf5'\xf4\xd1\xae \xe3\xa6\x1el\xf0\x9b\xd1\xc6L\xbe\xb0\xd1\xe4\x00\x9e\x1d2L\xde\x86\xe5\x9c\xfa\x19~\xc8\x96Z\xc65\x935b\x11\xcfa G-\xe0!\xcb\xf7\xae\xe9\x0eM\xb7\xd9\x97|M.N\xe28\xdd|{\xc1\xfa\xe2\xdb\xcdKV\xb1+\x01k\xf8_\xd3\xbee\x9f\x8avO\xde\xb44r\xdbj\xc0\xa7W\xf2\xca\xbf{V7\x8e\x92\xd9{{\x15\x87\xe6T;Qn\x9e\xd7\xfd\xa4\x00\xe0%\xdb\xbdh\xf8V\x0e\x9c|\x01}\xf3\x91\xd5\x92m/\xe4\xa8\xcaZ\xac\xb5\xd8^\xfe\xd3\xae<\x14\xd50\x04\x93\xdb\x82\xd7\x82\xb3z\xcf\xe9\x80x\x0c\x97%\xab\xf6\x82\x7f\xaby_\x83\xea\xb8<\x1c+v\x10\xc7X\xe0\xe9\xa9\xeb\x9b\x03\x1cX\x7f\xdd\xec\x0dx\x93\xd5\x00Z\xf6\xdb\xa9l%\x9d\xbdj\xae\x9ac\xdb\xf4M\x88`x\xb1D\xa7\"\xd2\n\xab\xb6d\xf8R\xd8\xda\xf6\xea\xa3\xfb\x9d\xfa?_\x04\x89\x0b1\x0c=/\xda\xe2@\xa7!\x9cv\x9d\xea\xb2\xbf\xdd\xf6\x85sq\x1b\xfbyQtl;\x8a;8bZ\x08\xe0\xbf\x97_\xf2u\xd8qZ-\xf7\x0c\x03>\xed\xe0~|[`B\xd9A\xad\x9bE\xab\xa6\xbebB\xe6\xdb\x9be0\xc4\x1a\x7f~\xa2\xaf\x13\x1c\x9a\xfd\xa9b\xf7\xbba9\xe1\xc0v\xd7E]v\x07u]\\4\xf5\xa9\xbb\xbb\x89b\xd0\xffF3\xe5'm\xdf\x16\x9f\x04%\xda\xb2\x9aK\xcf\xceL/\x9a\xa6bE\xedb\xbbD4\xd3f,]\xfb\x8e\xf2\x89\xba\x97\x91A\xc5\x90\xf8\xff=\xb1\xf6\xf6\x85B\xcd\xf3\xa6\xa9\xde\xb2\xee\xc8\xef\x142b\x1f\x9b\xc6q\xef[\xe9\xe6\xd7B7\x9dI\xf2\xed\x1a\xa74\x12%\xf1\xf3}\xfeCYc,\xdax\xd4\xfc\x08\xc3g\"8\x03\xf57_r\x85\x9b\xfa\xd7O\x8c\xcf\xd5\"\xbd=\x7f1\xcc\x92\x84\xb3\x13\xe5\x97\x04\xbfK\xc6[yX\xefX\xe5\xbd\xa2nF\xd4\x1dv\xcc\xa0\x84\xea\xb7b\xb7kO\xca\xa29\xdd\xe5!\xe6!\x8cGttv@\xcc\xc7\xe5\xf7M_T_5BG\x8d\xfc^\xe4\xb6\xefw\xfdu,\xa8\xd2\x13R\xe9\x19\xaflaw\x1c\xf40\xca\xe6\x1d\xb5l\xf8\xc1$|\x1a\x8f\x95\x9d}T\xbd\xc3\xdc|\x83\xa5\xe4Zr\x86\x11p\xc3\xa9F\x9e\xd0\x0fw\x8c\x86\xcd\xe5\xede\xa3q\xf8\xc88l2\xc3%\xe2\x18\xa9iF_=4\xdc!\xef\x19\\/\x95\x8c\x97\x8a\xd8/\x93\xb9>\x1d\x04\xf2\x98\xdb\x9ep\x93`T|\xceu\xa2\xc3\x99y\xa74\xedd\x97K\xbeP\x16\xfa\x05\x84D7Mq\xa7/\xbd\xf6\xb3v\xb4\xa4\xbc&W\xa5\xbe\xe2\x8bF\xdd\x0cl\xfa\xc9;\xa1\x03\x99\xbd\x0d\x7f\x1cD\xc0\xe7\xf2\xd6L\xde\x0bC\x84\x8c)\xb3\xac\xa5\xb1\xbf5\x96|Ze\xf5\xb4o\xe07>\xf6\xb4\x85\xf6Lp\xc6j[\x90R\x97\\\x8a\xcb\xc9\x0b|\xd4\xd49\xce\x9c\x8f\xae\x08.~b=k\x95\x16T\x93\xb8\xf5\x8d!\xd9\xee<\xca!\xf0\x13\xea\xb0\x92(\xf0a\x8c'\xc9\xaa0\x02\xbf*\x05\xe6\xabS \xae<\x82\x8c\x0b\x90\xa8H\xb2\xc0\xd5\xcd\x1d\xad@D\xa9\x04\xe3\nx\x15K\xc8q \x1e\xd7\xe1\xa0\x0e\xfa\xa8\xc4c9\xd2P\xe1\xab\xdauB\\J<\xa3\xbb\xf1S\xcf9\x9d^0\xce\xaa\xf6\xb3q\xcb@\xcbv\xac\xbca\xfb\xd9\x87\xd6\x1e\x0d\x04D\x9a\x9c\xee\xee^Q&(\x8d\xf8\xc5\x98\xc0g1\x11f6[\xe8\x19\x1e&\xbe,\xe1\x15\x1d`>\xd1\x85\xc6@\x0e\xae\x01\xe6-\x18@n\xfa\x05\x88\x00\xd1\x0eY\xd2\x19{\xa9\xbdrV_6\xc9'\x8d\xffM\xb6\x9dY8b\x7f\x8bsx\xe3k\x8a\xefPg\xb0c\xd5\xe5\xf6\xa2\xa9\xf7\xdb/\xa2\xd0X\x85\xa9\x8c\xc2\x94\xb3w\x96\xd5\xa2\xba\xd4\xa4\xf0\xce\x14\xadp\x82\xban\xf9W\xbe\xe5\xcb\xae\xdc\x80\x91!J\xccfPV\x1b\xd4l&\xe6\xcd\xa9\xef\xfa\xa2\xde\x97\xf5Ufu-\x89\xf5p\xbe\x85\x95\xef \x1f'\xcf\xf0\xber\xbe\x03\x82K\x12@L]]\xdaLO\xe1\xc1\xa9~\xacd\x88\xfa\xa1\x8b\\\xfa@\xf9\xa1*t\xaf\xb1\x9a}>\xb2\xba+o\x18\xf4\x0d\xf4m\xb1\xfb\xf8\x08\x8a\xaaj>u\xd0\x89\xe5\x80\xae\x10\x86\xc5\xdd5\xdb}\x8ck\xcf\x08'k\xc6yGVc\xee\x89\x7fW\x89`\xff\xe4c\xde\xc9\xef\xee\xf6F\x9b\xac2G\xd6\x96\x8d\xc7\xca\x82\x1e3\xd4omx\xd4\x16\xbb\xde\x11of\xdd}\xe62\xbe\xbaauo:\xfaM\xb8%\x16\x0c\xd8\xcd\x90\x85hj?\n\x7fl\x8e\x05\x1c\xc1\xca]\xd9\x8b\xb3>\x88\xd0]\xdf\xb4\"B\xc1\xfc\xe8\xfd5\x7f\xbf\x83\x9a\xb1=\xdbsd\xdd\x15\xd5\xeeT\x15\xbdp\xe3l\x9bc[\x8a\xff\xcb\xf3\xdd\\B\xd7\x17\x1fen\xa4\x8f\xac6\xa5y\x8ek:\xff\"O\x7f\xd1\xb2Q\x18\xaf\xa1\xb8\xec\x19?,r\x1a\xd7E\x07\xcdnwj[\xe637\x0c\x08brJ\xc3oai\xf5X\\\x0d\x04\xee)\x0ezz\xc1R]\x8d?\x0f\x8b\xa7\x8e\xd4,9X$\xb3\xf0D\xc7 (\xe7\xf5\xc8\x0e\xe1\xcf\xd4\x8b\xa2\x02\xfc\xbf}\x03\x17|:]'\xb7\xf6\xbc\xb8bo\xd9o'\xd6\xf5\x1b\xf9\xdc\x02\"\xf5\x9a\xfcs\x0e\x8e/\x04\x83C\xd3\xf5\xc0./\xcb]\xc9\xea\xbe\xba\xdd\xc0\x19G\xac\xaa\xe2\xb0\xd9\xe1\xd8\xdfBi\x17\xc3\xe9\xafY\xcb\xc4\xc6\xd7\x0d\x1c8\xe2\x0d\x89.t\xe4C\xdc\xdf\xa3\x8b\x82\x9cB_nDi\xb8\xe0\xab!\xfeS\x9f\x0e\x17\xac\xe5\x08<\x0cE\x0b\xd4q\xc6\xaf/\xd4\x8e#\xfeV\x00\xb1\xef\xa6OE\x07\x1d\xeb\x1fA\xd9w\x1c\x0fO\x82\x06\x9fj\x89L{h\xf8:|*;\xb9\x8f\x14\xeanQ\xd1\x19$}\x80\x90@\xc7\xc7O\x9f\xefv\xa7\x838\xfa\xfb\x17\x96\xa8A \xe4\xabt\xf2\xf5K'\xf8\x04\xc3\x08`\xdcC\xd3\x0b\xda~\x0f`l&\xe8#;\xf6P\xf0\x95jOu\xcd\xaf\x0cq\x94X\xfb\x08vE\xcd\xa9\x87v+\xf4P\xd4\xb7\"\x84\x84\x8c\xae.\xf3B\xc6\xd5Us\xf2\xf7\x8d\xa8s\xb9\xf8\x91w\x97\xf0\xb2\xb0\xed$\\\x9d\xd8:2\x8e\xfayV\x14)\xd0\x1b\xd2\xe5P\x9do#+=\x8b\x1fM\xe4D3\xf1\xa0\xcb\xb9\xcfa+Uf\x10S\xd2y^U*\xa3h\xb2\x90\xc3\x8c\xd2\x9bpG\x04\x87\xbf\xbe=\xb5NH\xe1\x02%\xc2s\xf8\xe5\xedOOZ\xd65\xa7v\xc7\xa0.\x0eC\xbe\x94S]\xfevb\xd5-\xf0\x89\xf5\xe5e9\xf0\xce\xfd\x10\xa1\xea&\x80\x04\xe8X[\x16U\xf9\x17\xd7\xcc'\xe6\xd47\xbb\xa6\x82\x8b\xd3\xe5%kU8\xd4F\"\x87\x1c;\x1cN\xdd\x98\xc4\x85_\x19\x15+\xba\xde\x85\xd5\xd4\x0c\xee=\xb9\x07\xbb\xeb\x82\xe3?k7\x82~UE\xd7C\xc7\xae8\x95R6\xe9_\xde\xfet\xbf\x83c\xd1_\x0b\xe0\x0e\xa8\x11\xe7\xdd^\xf8\xe7\x97\xa7\xaa\xba\x85\xdfNE\xc5W`/\xd7g\x00-V\xe2A\xd1AY\xbb\x1f\x7f\xe0]>\xb9j\x9a\xab\x8am\xc4\xdc/N\x97\x9b\x97\xa7V\xe0\xee\x87\x87r\xc4\x02\\w\xdd\x9c\xaa=\xbf.\xf9\xa4\x1dH\xbb\xa2n\xearWT\x82\x02\xb8==`\x9b\xab\xcd#\xbeT\x82\x1e\xde\xdb\xdc\x93V\xe8\x9e_\xe6\xec\xd8\xb3\xfdCL\xb3sV\xc3Q\x10\x8f\x1d{\x04=+\x0e\x1d\x9c\xbaS\xc1\xa7+\x03\xcd\x8e%g\x9ckN&\xaf\x19\\\x94u\xd1\xdeJ\x9f\xa0\xdb#s\xd3\x87\x0b\xa4\xe9\xaf\xd9\xad\xdb\x15\xa7\xb9\xbb\x1e\xca\x9e\x9f\xfcS\xa7\x873\xf7\\\ni.\xe1y}\xbb\x81\x1f\x9bO\xec\x86s\x0f\xfc\xa0\xff\xf2\xf6\xa7\xe1\x84;\xf08\x08+\\\xf7\xfd\xf1\xc3#\xf9o\xf7\xe1\x114-\x17S\xe4\xd3G\x02{8\x7f\xd2\x88S!f\xdc\xb1\x1eNG\x07\x9e\x8c\xc7F\xfaa\xed\x0dk\xe5\x94\x0f\xc5\xb1\x93\xa8 F\xdc7c\xd0\xb6\xb8\x9fKI\xaa\x8a\x0e.\x1bq\xcdk\x8e\x1e\xfc\xacK\xfc(\xea\xe2\n\x9b\xe5E\xcb\xe4\xad7\x00\xdc\x84\xff@\x08,\xf6\xfd_\xf1\xb9\x7f\x17\x99\xfb\x1f\x8a\x9bb\xf6\xe4\xe1\x99`x8\xd4\x193-\xbb\x07\xdf7\xcdfW\x15]\xe7\x99\xa8\x1c\x02\x7fY\x8e]\xfb\xc0\xed\xeb\xaf\xce/O\x9ept\n\x8f\xe1]q`\x9c\x7fx.Gs\xc5\xfa\x972#\xceY\xcde\xf3\x1d{\xf00ep\xe8\xf7\xd8X\xcd\x9f\xd4v\xfd.\xb2]\xe7\xb7\xfduS#\x1b&\x07\xf3}\xd3<\xd8l6\x0f1\xa4\x94\x9b\xf5\x00}&\x10Vl!u\x07\xf9Ggr\xc9^\xbez\xf7\xe2\xed\xd9\xf9\xfb7o\x1f\xda\x04\x1c\x06\xf0\x12\xa9\xf1\x0ed\x17\xf8r\xfcsd9~h\xdc\x95\x10K\xf1\xf4\x19\xfc\xc3\xf1b\xf3}\xd3\xfc\xc7f\xb3q1\x83\x8f\xea\x11\xe7\xfb\xf8\x9bE}{\xbc\xd8\xbcf\x9f<\x03,/\xc5\x9b\xff\xe3\x19\xd4e\x85\xa2\x02\xbaJ\x08B\xe2\xefY\x03F>\x1bF \xc7\xba\xf9\xa5>\x14mw]T\xef\x1by\xec\xe6\x0e\xcf\xf8\xed\xbd0(\xed>\x8e\x94VO\x96r\xb4\xef\x02iW\xb9U\xe9\xa3\xf8\xc5o\x82\xbb\x8fpFO\xb8\x18*\x12mm8\x17y\x9f\x8b\x13\xe3\xbd\xc4\xef,\x95\x94B\xee\xb5 p\xbc\x00j\xc9=\xa1r\xed\xc8\xa1\x0e\n\x94^\x89\xd3\xf7\x9f\xdc7\xc1\x0d\xb2\x9b\xeaZ\nkl\xc0\xbb{\x97M\xb3\xb9(Z1\xe8\xcfOn7\x7f\xb9'g,E\x10W\x9a\x12]\xde\xe3\xef\xd9\x97\xd0\x1f\xde\xbdym\xfe\xf2\xec\xd9\xb3g\xee\xd2\xf3\xf7&)^2M\x0d?g\x03\xc7 %\x99S7\x86K^\x9d\xaa\xc2\xe2\x12\xdd\xcf{\x11\x180\xdd\xf5\x8f\x80\x1d.\xd8~?\xdd\xfa\x8f\x06\x06\xc2\x92\xfd\xb5;X\xeaQ?\xfc+\x9f\xf5\x87AYe$\xa8Uk\xb8Q\xe7\xf6)\xc2\x8a\x17\xbb\x8f\xfc\xd0N\xa2\xdbeY1\x970\xaa\xc3}\xce\xda\xae\xa9Ql\x1et,\x97e\xdb\xf5[\xb1\xf0\xcf\xe0[\x17\xd2\xf8\xa2\xc8_?\xbc\xf7]\x9c\x14\x03\xa0\xbd\xde\x13\xf3\xbf\xf7\x14\xeea\x88mNk#G\x7f\xef\x11\x06G\x8c\xfbuq\xe0\xb0\xfe\x8f\x1c\xe2\xbf\xa0/\xf2q[\xef\xc5\x06\x7fv9p\xef\xe6\x1e\xcb\x1d*;\xf8\xc4\xaa\xea\xf1\xc7\xba\xf9$5\xea\xd7\xc2\xe81\xa8\xc0]D5\xd1\xe9\x91\xe4(-\x1c\x9b\xec\xabC\x97\x1cqD\xbe\x1a\x816&\xc0\x0f\x02\x89\x15\x0e]7\xd5\xdeP\xc2\x8b#P\xd6#\xee\xc1\xa0\xb3\x19P\xcf\x84%\xc0\x8f\x18\x07\x0f\xf8\xf1U\xd3u\x14\x04J_\xf5\xe7?\xfd\xf9!\x82\x9cK\xf6\xdb\xec\x00\xdfr1m\x0e\xea\xdb\xcdw\xdf~\xd7\xddC\xb6Q\xfd\xcf\x10\x1d\xc6\xcc\xcf-\xebOm-#\x18\xd5\x8f\xdd\xea=\xb0z\x0f|\xed\xde\x03\xa6'(b\x99\xa0\xc4\xa9h\x9f\x0d\xd0\xde\x9e\xbfP\x83t\\\x07p\xa3Hv\x8b\x08\xe9L\xf4\xa8\xa1\xc3\xbb\xfda\xcdEF\x13\x87\xdf\xc0\x91\xcf\xbc\x91\xcd\xb8\xe15m,0l\xe42k\x84\x8d\x1a\xb3L\x1ay\x0d\x1a^sF^c\x86\xc7\x94\xb1\xd0\x90\xe1,\xb7\xcbx\xe76b,4ad6`,0_\xe46^d3]\xe45\\d3[\xc4\x8d\x16\xd9L\x16>\x83\xc5\x12s\x05j\x9e@8W\xbaqB\x1e6\x13 n\x9aXh\x98Xf\x96@\xcc\x103\x8d\x10\x88 \"\xca\xa8\x85\xb9W\xe7\n\x9fiz\x98L\x0d\xd8\x06\x7f\x13\xef;\xb3\xd1\xc159d08d57\xd8\xb7\xf1BS\x03b^Xb\\\x08j\xd7=\x86\x85\xa8Y\xc1\xd5\xf1\xd1M\n\xee\xb7\x7f\xc5\xe6:\xcb\x98@\x99l\xcc\x90\xe0\x9f[\xd4\x88\x90`B\xb0\x15\xaf>\xf3\xc1r\xe3\xc1|\xd3\x81\xa9\xf0Yh6\x08\x1a\x0d\xfc&\x83\x90\xc1\x00]-\xaa\xb1 f*\xb0\x0d\x05\x0b\xcc\x04\x04#\x01\xddD\x105\x10 \xfaw\xa7;\xe4\x9d\x98a`\x99Y\x00\x1d\x94\xf6KV\x83@fs@Vc@NS\x80\xcf\x10`kWm#@\x1e\x13@6\x03@^\xf5?M\xf9\x1fU\xfd\x13\x15\xff\x14\xb5\xbf\xa3\xf4w{\xa3*\x80\xc3\n\x7f\xa2\xba\x9f\xa0\xec7\x86\x9cS\xd1\x9fY\xcd\x9fO\xc9\x9fO\xc5?\x7fw\xa3\xea\xfd\x98r_\x12\xed\x80Rt\x8eFT}#\x14\xa1\x12\x96\xa3\x07\xbdd\xec\xaa-\xea~\xd4\x83\xfe\xc0\xff\"\xeb=\xc5\xb7\xd1zJ~\x91c\xf8^\xcdF\xa5\x10\x19H\xd2\xa9c\xad|E`Q-u\x13\x9c\xe7\x19\xde(\xf5\x1a\"\x97\xa7zJ.!\x01\xc7\xeal\xc4\x06\xc6B\x03\xbb`|T\xf2\xc5\xbd=:\x0dTQK\x99\x95\x7ft\xbf3\x879~\xe21\xcaL \x87\x18#\xceo5\x97pQt\xe5\xee\x11\xc8P\n\xfe?\xa5\xb5\xb9dl\xfah\x96\x85\xa6_\xb5\xd1\xab6z\xd5F\xaf\xda\xe8U\x1b=\xb6U\x1b\xbdj\xa3\x8d\xb6j\xa33h\xa3\x07g\x05\xc1q\x82\xb8\xa9\x9bV\x96\x89\xe3P\xfe\xed\xd7w\"\xb2\xb2o\x80\x1f\xda\x96\x13!\xc1l\xc9e\xe2\x97\xa8\"\xfc\x01vVy\x14H\x86(\xd9\xaeO\xe7\xcfDA\xcb\xe9O\xc5\x16r\xd4W\xbc\xe4\xc5\xad\xe2wg1f\x0e\xaf\x0d\xf3\xf9\xb2\x9c|7\xd8\xbc7`\xfc7,\x1dl\x16^\x1c\"\xfc8\xe0{\x0ew\xc5\x97\x83\x0f\x05 \x98\x99\x0b\xe7\xd1!\xb4\xc4\x10]f\xc8\xcb\xafC$D6'\xdf\x0e9yw\x08\x07\xca.\xe2\xe1!#\x1f\x0fQ^\x1e\xe6\xf2\xf3\xb0\x84\xa7\xc7V\x8c\xf38\xa1\xa0\xd9\x05\xbc=\x02K*\x95\xbc\x81\xb3\xcbx|\x04\x1c\xe7\xfaQ>\x1f\xb2\xf3\xfa\xb0\x9c\xdf\x87\xfcY+\x94\xee(\xaf\xbc\x05^>u\xb8]\x05e\xba`\xac\x86\xb2\xeb\x86\xfa\xad\xbc#\xcb\x023',\xba\xa8\xf5_\x95\xdc\xb6\x86E\xafa\xd1w\x1c\x16\xed\x13\xeb\x83\n\x05\x1d\xc6\x13\x04\x88\x91Z]\x8d\xfe]\xc9\xe5\xc2A\xcf\xf0\xb8\xdb\x7f\x84\x7f\xda\xfc\xf3\xff\xa2k\x1eV\x85\xc3\xaapX\x15\x0e\xab\xc2aU8\xac\n\x07\xec\x95U\xe1\xb0*\x1c\x90\xb6*\x1c\xa6\xb6*\x1cV\x85\xc3\xaap\xf8\xbbP8\x8ct\x8f\xffy\xbf#:\x7f\xae\xaa\x87U\xf5\xf0\xf7\xa6z i\x1c\x1c]C\xc8\x87\xe1\xaa\xb9\x19\x95\x08/\xd9\xb1\xe9Jz\xf4!\xff\xa5\xe9\x8aj[\xce*'d\x1f\xb7 \x9a\x91\x01Q\xcadP\xee\x151R/*l\xd9\xcba7Ia\x90\xe3GF_\xc3\xafJ\x1cg\x1d\\\xb6\xcd\xc1\xe8u\x8a\x1d\xb4Jl\xdd\x85\xba\xe4oT\xf4+\xad\xe2W=\xa3\xd4\xd7\x19'\xf4wQ\xea\xcb\x99\xda\xd0\xb9$v\xc3\xfe\xca/G\x14\xd8\xb8\x07p\\\x90\xe1L\xe87\xc0\x00\xd1\x80\xc5\x7f\xde Z0\xaar8\x1b\xcc\x7f\xed\xcb\xf1\xea\xd41\xd7\x7f\xfe\xce\x8b\xb68\xd0\xab\xcf\x1d\xcaz\xbb\xd7O.\xac\xc8\xf8\xb5\"\xe3\xcfe]\x1eN\x87\x91\xce\xc8\x92q\n-8\xca0\xa1\xcc\xbci\x84\xbeR*\xdb\x14\xacC\xf1Ym4\xad\x88\x9b\x9f\x17\xfc\xb9\xf8,\xc6!\xc1\x88a<\xe73\xbdn\xaa=k\x05\xee\xaa!\xf2\x85\x9d\x10\x17\xce\xb8\x80nT\xf5\x96\x8c,|\xa7/\xf8\xa1\xa9\xfbk\xac\x0c\xb5\x81\xe2V\xa2[\xf1\x93,\xbb&^\xeax\xdfW\xcd\x0dkk\xa1\x8f4(0r|\xce\x87\xe7\xe4\x93\xf3\x95\xdc_\x82\xcduo\x12\x12\xf7\xd8\xaf\xd1\xe2\xcb\x95\xa0k\xb48M\xc1)\x95*\xce\x1a\xad\xd1\xe2)\x11$\x0bU\x94$\xe5$]\x11\xb9@\x05\xb9@\xf9\x88j\xbf\xb2\xa9\x18\xf3*\x17\xb3\xa9\x15\xe3\n\xc5l\xaa\xc45Z\xdchsU\x82k\xb4\xb8\xdc\xe0o\xe2}\xaf\xb9K\xd7\xdc\xa5k\xee\xd25w\xe97\xd80\xd6\xdc\xa5k\xee\xd2\xa1\xad\xb9K\xd7\xdc\xa5\xa2\xad\xb9K\xc9\xd9-\xd7\xdc\xa5k\xee\xd2h\xeeR\x8e\x95E\x7f\xea<\xb6l\xf9\xd0T\xb8*\xad\xb3|f\x1b\xaf-\x99\x84\xd5'C\xf7\xff\x18\xce\xdf\xbe9\x7f\xf3\xee\xf9O\xdbw\xef\x9f\xbf\xff\xe5\xdd\xf6\x97\xd7\xef\xce_\xbd8\xfb\xfe\xec\xd5\xcb\xe0{/_\x9d\xbfyw\xf6~{\xfe\xea\xed\xd9\x9b\xf0\xab\xbf\xbey\x7f\xf6\xfa\x07\xca\x9b\xe7\xcf\xdf\xbd\x8b\xf4\xfb\xf6\xd5\x1f^\xbdx\x1fy\xe9\xfb\xe7g?i\xaf\x0cw\xcdS\xc2d/\xcb\xba\xa8\xb6}QU\xb7[\xa9\xef\xf0l\x85a\xdep\xbfR\xa6]\xf1\x04\xc4\x93A\x7f\xe2\xe8\x8f\xe1\x8f\xd7Lw\xe4\x12\xf6yyh\xc6\xcd\xbd)\x0b\xb8z{\xfe\xe2\xd1\xa0WPf\x0f.\xee\x1f\x9b\xe3\xa9\x12\x02\xc9\xa9\xee\xcb\xca\x92p\x14\x88\xfb\x9di\x8e\x10g\x9d\xd5{\xb6\x9f\xe5\xefp\xff\x96u\xf7\x89B\xb0\xb1n\xb7\\\x0c\x93k3Y\xeb\xf9\x8f7M\xcf:\xcbN\xa1\x81).:~\x95\xcc\xe9r\xf8\xd4\xedV=\x88t}\xbfnfM\xb5n\xdc.\xeb&\xd6[\xddl\xf9E\xbb\xbda}3\xaf\xd7\xe9{\xb4\x7fq\x8d\x8b\xa7\x81\x91t\xa7\x8bC\xd9o\xfb\xf2\x10\xcb\xfe\xabT\x1c\xfb\xa2g\x8f\xf9\xfb\x1e\xd25\x01T\xa3\x12\xffo.5\x12\xc6\xdf\xe9\xba\x92\x8b \n\x844\x94\xb1z\x9fq,6T5 \xc6\xf9H\xfe\xb7f\xbe\xd2\x06#\xdcCV#\xed\xdf\x89\x91\xd6\xd8\xad\x11\xe5\x84\x9b\x90f\x14\xed\x11K\x9e\xa4\x93\xdb\xae/\xda\x9c'\xc0\x01\xab\x06%~\xe1\x94Y\xfc8\x9cK\xfcX\x0e0\xf2\x1e\x07\x0b\xa8s\x1a\x9aKuu c2 )\xdb\xad\xc1\xa1\xec\x9a\x96\x0d8p\xe0|a+4f\x05f\x13\x8e\x98\x84\xdfi\xbc\x913a\x9d\xb5\xa1\xb05D\x96\x86\xc6\xceDX\x99(\x1b\x13da\xc8\xec\x0b~\xb4\xcd\xd5\x13\xeb$\x14\x98rw\x06\x05\xb3x\xc6\x86\x9d\x99\xb6C!LpA\x83\x03\xb3\x1c\xb3\xa4\xd0\xefcZc{\xe2\xf6d>\xd7h\x97\xd5\x05\xecOB\xda\xeb'\xf7\xb0\xa1S\xd3;#\xb6\xdf\xee\x08\x8c\xc7\xb4\x01\xc8\xd3D\xed_b\x92\xdb\xb1\xfc=\xd0\xa3\xb1\x97*\x9eW\x19~\xa5\xc3h\xa0[\x85\xa1n\xc7\xea\xc9\xdc\xaeE\x85\xb3\x18B\xef\xf4\xacs\x01\x8eb\x18|2O\xa1f\xfdt\xce\xe9\xfbJU\x9aN\x9c\x1e\x84\xee[\xffm\xdb\xaf\xd5\xa3\x9c\x96-\x96\x0fb\xe9\xcc\xfa\xf91}\x901\xae\x0f\xa2\xb1}07\xbe\x0f\x96\xc4\xf8a+\x16Oa6;\xd6\x0f\x81\x15M_\xb6$\xe6\x0f\x01\xb7V\x8fZ\x16\x07\x08\xcbb\x01\xf1#\x8a\x0e2[\x84 d\x8f\x12\x84\x9c\x91\x82@\x8a\x16\x84\x9c\x11\x83\xb0V\x8fJ\x8f+\x84\xc5\xb1\x85\x08\xc0\xb5z\x94\xde\xfc\xe9\xc5b\xe3X\x16\x91h\x01\x13\xf1\x89HT\"\xe4\x89L\x84\xdc\xd1\x89\x80D(\xc2\xf2(E\x0bZ\xef\xc4,\xc2\xc2\xb8E\x88\x85\xf3\x81?~\x11(1\x8c\x80\x87%%\xc52\xfaa8A\x1f\x8b\xe2\x1a!a1b\xf1\x8d\x10\x9dw4\xce\x11\xd2b\x1d\x01\x0bA\x0b\xc4D\xe39\x81\x10\xd3 \xd6=d\xc7v\x82-\xfe\xa4\xc4wBH\xfa\xb3\xe3\xf1\xd7\x90\xd8O\xfcE+\xfe\x13\xc4:\x13\x83(d\x0b\xc5\x81BTj\xcd\x10\x0fjA\\\x18\x14jACT\xb2\n*%N\x14\xe6YL\x90\x98Q\x88\xa90\x8cu\x9e\x1b;\n\xbe\xf8QH\xea~i\x1c)\xa0\xb1\xa4\x904\x86y1\xa5\x10\x8c+\x85\xa4\x11\xa0\xaa\xa2YA\xa7\x08\x1cl\xf0h(*P\xec\x88n\xdc\x1b8\x14wVX*h\xaeGn,\x1ed\x1a\xdb\xcc0U\xd1=\x1e\xaa\n\xb0\xfa!\xfd\x97\xf5C\x9a\x1f\xf0\n\xe1\xa0W\xc8\x84\xcf9\x02`!\x14\x04\x0by\x07:/ \xd6\x81\x96#(\xd6\x87\xe7\xa8{\x07\xc9\x7fD\x0d*\xc93UE1\xccv$\xf9\xef\x1dw\x82\xba\x9e\xcc&\xb2\xfdZ]o\xad\xae\xb7V\xd7\x9b\xe3\x9cBpO\xc9\xee\xa0\xb2V\xd7\x93-\xc9\xa1e\xb1KKn\xa7\x96\xb5\xba\x9e\xdeh\xee-\x99\x1d\\\xd6\xeaz\x0b\x9d]\xe6\xbb\xbb\xa0\xc0\xd6\xeaz\xf3\xab\xeb\x01a4Y]`\xc2N0\xd9\xdc`\x96:\xc28\xe0\x04{\x85r2y\x9da|\xee0\xcb\x1db\x08^ A\xa7\x18\xa2[\x8c\xd7\xce\x9c\xe8\x1a\xe3\x87\x83X\xdf\x16;\xc8\xa4,\x0e\xc5I&\xbe\n$G\x99dW\x19\x8f\xdfA\xd0]&\x97\xc3\xccR\x97\x19\xdc\xae\x9a\xc1m\x86\xe08\x13s\x9d\x89;\xcf\x04w<\xc5\x81\x86\xe6B\x83;\xd1,v\xa3!;\xd2\xa4\xba\xd2\x10\x9di\xfc\xab\xe8Al\xff\xfb\x14\xa7\x9a\x1cn5\xc1!;\xbf/r\xaeq\xa0!\xce6Y\xddm|\x0e7\x0b]n\xdc!\xbb.8\xf9\x9dp\xc2n8\xb8#\x0e\xee\x8a\x93\xd3\x19'\xb3;\xce]8\xe4\xa4\xb8\xe4\x10\x9dr\x92\xdcr\xe8\x8e9\x1e\xd7\x1c\x9f3\x06\xdd\x1d#\xee\x9e\x93\xe4\xa0Cv\xd1A'\x94\xdbM'\xaf\xa3\x8e\xc7U'\xb7\xb3Nnw\x9d\xe58Br\xd9\xa19\xed\xd8\xb7\x1d\xe6\xb8\xb3\xd0u'(\xc3b\xee;i\x0e<\xc9.<\xa9N\xb9\x9d|P7\x9ftG\x9f\xd9\xf6)\x8f\xbbOTy\x93\xcd\xe5'\xe0\xf4\x936\x88\x1c\x8e?>\xd7\x9f\xb4\x91\xccw\xff\x899\x00\xa5\x8d\xc3\xa34\xcb\xe5\x06\x84;\x02\x05\\\x81H\xf6]\xdc\xf2\x9f\xcd!(\xe6\x12\x94o\x8c\x0b\x1c\x83\x82\xaeA~\xe7\xa05\xf5`\xb2\xbbPf\x87\xa1;K=\xb8\xccm(\xea8\x94\x0f\xebs\xb9\x0fE\x1c\x88\xb2\x0fx\xbe\x1b\xd1\x9d8\x129`G\xdf\x9c \xef\xabj\x10\x99U\xdaF_\xfdvXS8\xae)\x1c\xbf\xe2\x14\x8e\xff\x89:\xca\xa5eZ\x1a\x8fG\x8a\xab\xdc{.\x0e\xbc\x15K\x90\xec,'D \xcfY\x92b\x06\x9e[u~\xa2\xb4\xb5\x9aS\xbc\xdfy\xac\xf7\xd7P\xcd)\xe0:\x8a\xa0)\xe5L\x88\xcf\x92\xce\xc3\xafM\xcf\x92\x0f\x02\x9f\xd1\xd39\xf8\xec\xf5\x03\x9dC\xf9\xf2y\x80\xf2\xf9\xcc\xaa\xa4 >T\x1b#\xffPI\x9b\x03\xddI\x97\xb4\xa7~\xb0\x0e1\x7f\xc9\x8e-\xdb\x15=\xdbsn\x83]\xb2V9\xdb}\x90\xc0\xba\x0fP\xd6]\xcf\x8a\xfd\xe0\x969\xb2\xb4\x1d\xeb]\xbb=\xbf\xe8J\xd6\xd9\x04]X\xe4\xf6\xd2vQ^\xc2\x87\x8a\xd5\x0f\x06\xf8\x0f\xe1\xd93\xf8\xf6\xc3`\x0f)\xfaa\x12B9\xf1\x89 O\x93omv\xf6\xac\x16\x9e\x85\xd6\xaf\xd2\xb7eWt\xac3t'\xe2NU\xd1\xd2}\x03\xbf\xbey\xffj\xfb\xe6\xfc\xfd\xd9\x9b\xd7\xba\xfahC\xdb&<\xd0\xce\x033\xf8\xde\xbf\xbfz\x17|\xfe\xfc\xf7\xef\xde??{\x1d|\xe7\xf5\x9b\xc8\xe3\xed\x1f\xcf\xde\xff\xb8\xfd\xf5\xd5\xfb7\x16V\x0c\xfa\xb4\xf8\xc0\x87}\xc2\xb0\xf8ncJ0l\x96-.\xd5\xa9\xaf\x8d#+\xfdz\xa4\xac '\xc59\x0c\xe9\xc0(\x9c\xd2\xa4\xa5\x06\x05\xb7?I\x97Bf|\x8f\x99!#\xa2,\xae\xe9\x85\x04,\xc2\xdevq {\x0b\xc7(\xecM\x07\xaf\xf0\x97<\xd8%[\x02\x8e\xc9&\x8f;\xb68)\x9a\xaa\x81hh\xb4S\xfdTt]\xb3+\x85\xfaT\\\xa2\xe3s\xb9\x9bA\xa1\xd9\x91\x0b\x00\xfe(\xa0\xb2=\xbf\xe9\xde\x98\xd8V\xf0\xeb\xa1\x1f\xe4=y\x97\x8a\xfft\xc7\xaa\xb4\xab\xe7\xf1\xf6\xae\xacw\xec\xe9p\x97>\xee\xf6\x1f\xe1\x9f6\xff\xfc;\xeb\xc4\x86F3\xe0\xa3\x9a\xf5\xa7ah\x16\xb2~\x93\xd4\xab\xbfG>cm\xae\x93\xf4\x1d\x94A\x01\x9e\xcb/E\x82\xdb\xae\xb7\xcb6\x9d\xbd|4]w\x8f\xc6\x1a\xdf\xce\x0e\x19\xe3rx\x0d\n7#FA\xcb\xa4\xca_M\x8f~\x11\x9c\x99\xcd\xc8\xfc\xb7\x8a|A8\x9f\xe0\xc02p?\xbe\x1b#v[,\xe3\x81\x1cpe\xed\xe3\x82\xb2\xf3A>N(3/\x14\xdc8\x9f\xe5\x92J\xf4\xe3\xf7\x18\xed\x0e\x8b\xde_\xe4\xbb+\xe9\xdeB\xb9\xa3/\xabV\xf7\xf3Iq\xdc\x97-3\xaf\x94\xc2-E\xef\xf6\x10\xc7\x94\x82g\xd8\xfb>\xae\x89\x8as\xd8\xbb\x1e\xce)\x01\xffdK\xc2B\xd9\xfc\xfc\x13a\x95\xef\x86\x87\x8a\xf1-\x90\x97\x8f\x8a\xf24\xb2\xc5\xc64\x8b\x9b\"\xf4\x1d\xeaw.O\x95\x8b\xabr\xc6'\xb5K:M\x90\xd7\x9a\\\x86\xd5\x18\xd0\xaf\xc6\x80\xaf\xdd\x18\xe0r\xf0T\xe9\x80PhA\xa8D\xcf\xb5\xb2'\x04\xb9\xc0\xaeO\x82n\x05\x8a\x9b~\xbc\\Z\x8f\x04.\xf4\x13\xe0+>\x82\x94\xea\x989\xf8\x7fA\x07\xdf\xce(4\xe2F\x8biEF|\x05Ff\x8e\x1a]\xf2\xb9\x05E\xcc%O\xaa\x1e\xa2a\x1d8\x95t\xe4z \xabPY_\x0d#hj\xaf1\xd7\x87\xd5o5\x879\x02V[\xc6$t\x85\x17\x1b\x91\x1c\x03R\xbc\x9b%\x86#\xd3h\x14\xef+\xddX\x84\x1b\x8a(=e6\x10i[\xae1 ]_\xd4\xfb\xa2\x1d\x8c\x8c\x03\xd1\xa0W\xf0\xffu\xb4\xe4\x10\x10\x08\xd5e\x04\x0f\xaauE\xe5\xd1\\X:\x8b\xf8V\xa4\xeb)lY\xcdO\x19\x97i%L\xcb\x0c\xa2\x8fX\xaa\x89\x803\xbd\x03K\x07\x91M\xfb\x80n\x81-\x0fRd\xc0\x90\xdc\x17\x93\xf5\x02\xf2\x1dA\xa6#\xcaq\x8e\x1e\xe1.t\x86\xf3\xf4c\x19\xb5\x034\xbd\xc0\xaam\xf2M\x01\x97\xf0\xa9j\xd5,R}H@\xca$\xc9\xcf\xb6K$\xcb\xed\x81\x9e\xf0^\xe6H\xe99\xe4s\xcf\x0d\xfbF;\xd0\x0e\x16\xe8g%vB|\xe7\"t\x1a\x17\xfb{\xde67e\xc7\xa9R\xb27\x87D\x90\xedq\x84@\\\x08\xbf6\xd1\x81\xa8N\xff\x90\x17M`\xb8\x88\x0b\x95\xb8\xa9\xbd(\xb4\x83\xa1\x93\x1f\x9csP\xff\xad\x03xbC\xc0\x15\xe2\xeej\x9f)\xe4L^\xe6\x11\xad\x17/\xeft@<\xcb:\xbd@[NgR\x14;\xc2\xf8Q\xc8o\xda]@\xb344y\xf5\x82\x05\xd8\xc3\xa5\xd7\x076g:J\xfa\xe2\x93\xaco\x18A\x87\x90d\x1a'\xec\x10'\xee\x94\x1e\xd2\x88<\xf8 }Jg\x14\xd8\xe4X\x08\n\xf1\x07\xdf\x05@\x81L\xb8\x08 t\x19\x04\xfb\x88\xdb\x14\xe9\x17\xc3\x1dTN\x97\x07\xc3\xe4c^hhF8x\xdd\xe9\xa2;\x16\xbb0\xd3aX\xa6\x91\xe7\x96%\xcby\x03\xa7M\xdapu\xc9\xaf\xac\xf7\xe5M\xb9\x17\x17\x87:\xe5\x03\xe6\xcb\x9c>2\x99\xae\x0e\x84\xbf\"\x01\x9d\xbbz}k\x91\x16S\xa9\x10\x91B\x1d\x0e\xc6Y\xcc\"N\xee\x06\x81\x1fc\xa9.\x04H\xa2\xca\xf0\xa6y\x907\x13\xe2\x8a\x0f\xde\x0d\x13M\xdf\x16\xb5Dw\xac\x7f\xc6w\"@=>\xb2\xdb\\\xaeu\x0e\xf4\x90\xda[\xad\xa4&3M'I\xcdbH\xb4U\xef\xc7\xf0Y>\\a21\x80\xb1\xcfe\xd7\xf3\xad5\xb5\x9c\xfc\x03\x05\xca\x0e'G\x85\xaf\xff\xe5\"\x95\xc9\xa58\xfb\x0ff\xd8\xa0\x86i\x92\x8f\x1e\xd3\x8f\x08e\xd9\x98\xab\xbbeWe\xd7\x0b\x1f\x80\x111\xc6y\x8a9J\xe5\x9a6\xfa\xc8\xb0q\xa4}g\xa0C\x02\x9a\xc6H\xed<4\x8e\x92\xdb\xa5X\xa1a\xc2\xd0\xaf\x89\x02C/\x91E\xec\xaa\xa2\xbb.\xeb\xab\xb9\xc2wW^\xd5l\xbf\x1d\xae\xf3Oe\xbdo>\x05\x17t\xba\xc4\xf5;\xfcP\xd6\xdb\x01\x14g \x92\xe0h\x9c\xfb\xbe\xf9T\xf7\xe5\x81m\xffoQV\xdb\xfd\xa0y\x0b\xc2\x11\x0b\xb0\xbd\x14\xd9\xe8\x9bz\xbboN\x17\x15\x13cI\xef\xde\x81%G\x93\n\x08\x93_\xc7l^\x0e\xbf=\xe6\xa3\xbe\x90n`jG]a\xd6\xd9\xeb\xc5w\xafs4hWh\x10g\x80\xc2\x00\xda\xfc_\x04\x7fH0-\xef\xbd\x18.\x05`Rp*\xf0\xb9wHQ\xfcJ\x07\x9a\x1d\xd7FN<\x17\x7f\x1d\xc3\xdfw\xe5U]\xd6Wg\xf5e\x93\x8c\xc47E%\xb6\xa5\xac\xaf\xb6e}\xe9x\xce\x90\xd0yp\xd2 \xed\x82\xcc>r\x8d\x18^\xa3\xdb\xe6\x15y~\x1c\xd4\xbb*!\x8c\xd0\xb7\x17}\xd3\ngG\x91\xd5\x10\n\xd8\x15\xf5\x9e\xff\xcc\xe0\xcd[\xf1\xe0T?\xe6\x98m\xe4\xfa/\xeb=\xfb\xbcm./;\xb6|xaO\x80\x97\xaf\xce\xdf\xbez\xf1\xfc\xfd\xab\x97O\xe1\x8cw\xab\xd2\xd9tP\xd6\xbbVd\xb4a{`7\xc2\xbd\xb5<\x8c\xa9\xd4\xc5\xccJ\xbbt\xc5 f\x965\x14R\xf4\xe3\x97\xa6\xed\xfc\xb9=\x14\xb7[Y_A\x12\x0ba:e\x8fw\xcd\xe1P\xf6\xb22G?\xf8\xbf\x945\xec\x9a\xfa\xff\x0e)\xc1e\x12\x7f\x13\x1a\x92\x1e\x0d\xa3l\xa3$\xd2\xb3\xf60\xf2Ob\xa5\x95\xaf\xf2\xa1\xec:\xa7\xe6\x82\x9c\xc5E\xd9\x1f\x8a\xa3n2\x97\x9b\xb6\x15)\xdb\x12\xf7\x88P\xbb\xca\xd9\xa7\xf7\xe5\x81u}q8\xca$q\xc3.\x8dv\x9da7\x86Q\xc1\xfe$2\xe8T\xe5\x0d\xabYgo\x92\"X\xfat\xfa\xe6p\xd1\xf5M\x8d\xeb\x19.\x9a\xa6bE\x9d0\xde?^3\xe1/$7\xd3@\x9a\xeb\xa2\x83\x0b\xc6j\xadOx\xf0\xb1\xac\xf8\xc0\x9bS\x0f\x8d\xedS<~\xea\xec3\xeb\x1f\n\xa7\xea\xc1?\xaa\xa9w\xccZ\x13\x89SB\x82f\xbf\x9d\xca\x9bf7X\x01[\x8deS\xad\xa8o\xa5\x9b\x93\xdd\xd1\xae\xa9/\xcb\xab\x13g\x9e\x0few\xc1\xae\x8b\x9b\xd2\xacT\"qG\xa1\x9c\xf0|&' \x98{v\x9f\xc3\xd0\x0f4\x97\xc3\x00\xe0\xc1\xa9\x96\xd8\xffpP\xbd\xa8\xf59\x0d\x9e\xec\xa2^\x89\x05\xe8T\xd7l\xc7\xba\xaeh\x9d\xaa=-+\xf6\x9dy@\n\x9d\x9f\xbb\xb8\x9cC\xd7\xf3\xeca\xc6\xdc\xf52_\xd3\xc4\x8b:\xf7U\xed\xc9e\x9a\xf3\xba\xf6_\xd8\xa1+\x9b\xb4o\xa4lq\xc8\xde\xe5\xbc\xba\xf1\xcb\xdb\x7f}\x87.\xf0\xf8\xc8s^\xe2\x81k|\xe1E\xee@\x13\x8a,\xdfUN\xb9\xccI\xd79 g\xe6\x9c\xf5l\xd7z\xf0bO\xb9\xda\xc3c^p\xbd\x9bk>^\xf5\xee\x05O\xb9\xe2C\xd7zQU\xd3@\xd4\xa1\xc2\xa2\x1c\x13\x04\xce5:q\x8dNT_\xf8\xf7Pv\xa9q\x85\x8d\x91\xfe\xbf\xacE^\xf0\x89Q\x1cr\xefw\xf0I\xac\xb5YMd\xd7\xb4\xf2EQ3`\xe0U\xc7t\xfd\x9c&\x0bz\xa0O\xd3\x98\x9bz\xf3]s\x98\x06\x85f\xeco\xd9\x91 \x1f\xb5\xdf\x17\xed\xb8\xb2\xbe\xda\x12\xc6\x1c\x05r\xd9\x95%d\"\xfe\x18\xf7\x9c\xa4\xa1\xd2\xbf\x1b\xe0\xa5\xf0\xcf\x18\xd5\"\xb3\xce\x0ec\x8b 8\xce\xcc\xa2'\x01\xbf-\xf2\xb2\xae8\xd3\x9a0\x1c\xff\x15\x90\x919\x8d\xb2\xa5\x0b\x19R\x9b\x01]\xc4z\xca\x11\xea\xa37\xeeM\x9c\xdd\x0c\xae\xb8\xcbb\xfaW=\x17[i3\x94\x18+\x893\x91\xfe\xb1\xe5b\x1cQ\x96q\x11\xb3\xa8\x98C\x0d\x9e\xc3&\x86\x19\xc4\x08k8\xf7D\x19\x97\xc6|\x16\xd0`\xf9&\x804^\x0f\xdf\xd0\x05\xfc\x9d\xab\xbe18;\x94\xa7S\x04\xbb\x175iGz\xfd\xfb\xa6\xde\xbf\xd3\n\xb88\xeblF\xc6\xfc\xfe\xcd\xeb\x97\xfer\"\xf6s\xfeW\xf0\xe1\xd9\xeb\x1f\xd0\xa7\xda\x87\xa3+y\xa8k|\xcb\xa7\xb9\x8d\xfc\xab\xfcKD\x15\x8d\x0b\xac\x07\xb6x:y\nh0K\x0de=\xf8\xff\x8fg\xc4*g\x83/ \x87'\xff\x87\xed\xb84\x80\x0feL$\xe9\x0e\xc2;{\xfd\x83\x02x\xf6\xfa\x87 \xc4S}!\xb9\x1c\x0f@5<\xc2\xe0\xa6\x81yP\xeb\x05\xa7\x16\xa2\x10\x04\x99\x01\xd8\x8d\x9f\x08/F\x9f\x8b\xa6A\x14\xedo\x0cG\x0eQ\x0d\\h\x1c\xd5K0DB ~QY\xfctp-+\xa4;\xb1\x8e!\xeai\x82\x1c\xc3\xfb!\xb2\xeb\xc6\xe4\xf8w\xa3/\xae9lQ\xad\xffJ\x92\xa5=\xab\xd8\x95\x10\xbb\x1e\x81\xa8\xa1\xa5\x0c\xa7\x86\xfa\xbc\xf8\xbc\x9d;\x0eGBP\xc0\x8c\x05Vn\x9c\xf6Hm\xa6j\xe7hI8\xdf2L(2\x03\xe9\x8e\x97w\"\x1aLt>\xfb\xa2\xacn%\x9fUt\xaa\xba\xaf\x05\xc7\xba\x18\xc5\xec=S9\x1d9\x0f\xb2M\xf0\x97\x88\xf0,\x1a@\x85,U\xd1\xf5C\x95\x07\x04u8\xf3*'\x8d\x85eMgu\\\x0d\x0d\x80\x15R\xa0B\x05\x8d\xf3\x11%\x02o\xa7\x03M\xa0\x04\xe6f\xa3+u'\xa7\xc6=1\xf1\xbe\x0d\x04[zJ\xc4\xb9\xd0\xe9Q\xe8\x84xO\xc7\x8cA\xcf:\x11\x1a+\xa9\x0d9|\x1a\xf0aX\x88\xb2\x80\x8a+\n\xae\xae\xf5\x82\x84\xa8/\xb5QQ\x91\x94\xb3a\x1f\xa3\\\xaa1\xdf\xe1\x13\xedf\xbd>\x1d\x8a\xfa1\xe7$\x85rE\xb8\xc4)\x91\xdc\xb9\x81\xca=\xab\xfb\xb2\x0f;H\x87vZ\x01\xd0\x99\x18\x19!WT\xd3\xc3\xb1f\x0e<`\x9f7\xf0\xcby\xd3\xf6\xa6J\xf8\xdf\xd8\xedE\xd1\xb1\x87j`\x9f\xd8EW\xa6a\xe0\xf0 :\x12\xf5\xac*\xeb\x8f\xaa\x8b\x8e\xedNm\xd9\xdfnEH\xe5.&n\x1b}\xd9\xdf\xa2\x9d\xb2CQVb\xed\xd5\xeb0\xbc\xae\x86\xb0g}QVa\x05\x85\xd5\xf3\xf0\xc9\xd0\xe1\x90\xeec\xecrx\x8a\x1c\x0c\x0d\x1fQ6L{9\x80\xd5?\x96\x1d\x97\x13vE\x95\xa4\x88\xb9f\xc5\xde\xc5k\x12\xdbs\xc3\xda\xaet<\xc9\xa4\xce\xe5\xa2\xe8\xca\xdd \x95\x93}6\xd0\x07\x04\xcc\xa0\x83M\xca\xfe1h@\x08\xaaF\x01\x8a\xe31\x1f\xb80\x13\xf2\xa2\xa9;Vw\xa7\x0ev\xc5Q\x96\xa7\x92w\x97\xfa\xb9=USR/.zJ\xa6T\xad\x9e\x05\x8e\x7f+\x1e\xed\xae\x8b\xb2~d\xab^\xcbzW\x9ddE\xd4\xaa\xd2^\xe4lF\xc1\xe7v\xda\xc91\xa8\x9c\n\xb2w\x94\xed)\x8e2\x92\xb9l\xea\xfbN\xde^.\xfe0\xe8\xdb\xa2\x96\xe5\xd5\xe0P\xec\xae\xcb\xda\xb0\xab\x89\x9e\xa9\xd5'\xb2x\x93\xcd\xf0#\xc4\xcc\x92\xa2\xc4\xafX\xafo7\xf0c\xf3\x89\xdd\xb0V\xc6\x08\xff\xf2\xf6'\xf7\xec\xf2&\xf5;\x1c\x0c\xea\xa1\xc7[\xb7\xbbf\x07\x06\x1f\xae\xfb\xfe\xf8\xe1\x91\xfc\xb7\xfb\xf0H\xda\xf8\x86\xa7\x8f\x04\x96\xed4Y\xb5\xbaE\xebi\x80P5B!\xe6\xea\xe9\x8f\xb57l\xd0\xe2\x1f\x8ac'Q\x86\xcf@$\x15\x18<\x19\x04\xbd\x12\x0c|\x07\x05>\xb7\xcb\xa6\xaa\x9aO\xddS\xcf\xde\xfdO8\xbb\x9cf\xc0\xb7\\$\xe6\xd8\xb3\xfd8I\xfec\xd1u\xa7\x03\xdb\xa3\xf9\xe99\x90\xe75\xfc\xf8\xfe\xfd9\xfc\xf0\xea\xbd\xaa\xb4\xfb\xcb\xdb\x9f\xe4\x01\xbd\x15\x892q\xcc\xfc\x93\x8d\xe2\xefo\x8f\xec\xcf\x7f\xfa3\xfa2(o\x94Z\xe1\x90\xbc\xd7\xc4.\x1c\xdbf\x7f\xda1a\xf4l[\xdb\xa3M\xb5\xff \xcf'\xb1\xa8\x13\xbe<\x05_\x1f\xa9v\xdc\x15;N\x13\x9a\xe6\xe3\xe98\xba}\\\x14\x1d\xdbC\x83\xd7\x85\xf0\x917\xe0\xd3\x17\xe3\x12\xc6\xfa\xfe\x9a\x1d\xb4\xb3\xb0\x97\x87\xa1P\xd3\x18\xcd\x97\xa6iVorP\xe2\xd8\xb7\xec\xb2i\xd9#\xf51\x87Y\xf4\xe5EY\x95\xfd\xadH\x8c\xad\x14n\x82D\xb57\x88\x97\xa8lM=\xa8\x9a\xc5\x07\xe2\xdcm\xe0\xc1/\x1dS\xda\x01\xbe*\x1c\xed8\x9d\x91xW\xd4\xc5\x95o\xc6\x17-\x13Z\x0d\x05t\xf3\x10\xc7\x96\xd7M\xcf\x9e\x0e9T\x07\xef\x84B\x8c}\xa07Cf\x93\xeaV\xf7e\xaa\xbdK\xdd\x08'.\xd7\x8dI6\x85X\xd02~;0\x99\x8e\xb0\x1c\xedvc0\xd9t\xbe.\xd8UY\xd7>IE8\xf6z \xd7F\xe2sq,\xbb\xcd\xae9l\xe0\xb9` ~.n\xe1\xbb\x7f\xfa\xeew\"/\xe2\xe4C\xf6\xa9\xdc\xb3\n\xdfqi\xd6\xe6c\x92\x94\x00\xefr,\xbb\xad\xf0\xb9\xdes\xb8\xc7\xaa\xa8\xc5~\x8d\xcf9e\xf2\x91\xefw\xe2\xe8w\x83\xce\xab\xbf.j\x9b\xcc\xc1\x83A\xd1)\x1d\xe3$\xadx\x88\x02;\x08w\x9d\x0b\x0fU\x13\xb3\x12\x9e(\xe6\xc8\xa1;\xb2]yY\xee\xa0c\x87\xa2\xee\xcb\x1dRY\x05\xc9O [\x84\xbf \xca\x964\xf6\xe7gN\xc7.F\xcf\x1d\x8d{q\x18\x95\xe1\x86/.\x9a\x1b\x0f\xe7#\xa7:l\xaf=\xcd\xd8h><\xafo?(\x9eG&El/\xca\xbe\xe5\x94 0\xaa\xe1\xc2p\xc0\x15US_\x0d\xb5\xe1\xdd-\xe3$\\\xdc@rT\x17.o\xa7\xf7\xa9X4\x04\xcd\xce\xd5)\xac\xca\x0b1\xd4\xe1\x92\xe9\xa0;\x1d\x8fM\xdb\xcbD\xf8\xbb\x8fON5\xff\x87_\xder\xbf;W\x876\xb0W('\xd3\\\xc2\xa9\x97\x94P\xd1\x96\x8eS\xe1b\xbf/\x07]\xee\x15\xabE\x9a\xcd\xfd\xe0%7r\xf8\xcf\x11\xe2+\xb7\xc8\xed\xe7\xd5\xe7\x82#0|\xfb\x14\xce\x0b\xe9\xa7\x05\xc3\xd0\x8b\xf1v.kx\xf1\x8f\xff\xe8\xb93\xbfo\x1a\xb8l\x1ax\x06\x9b\xcd\x06\xf5+\x14\x8bP\xd4\xb7\xf8\xc3\xa2\xbe\xdd\xf0\xae\xbfo\x9b\xc3\x83\xcb\xa6y\x88\xbf\xb6\xd9\xe0\x17ay \x0f8\x88_\xc4\xa0\xdf7\x0f\xfe\x81\xc3x\x88\xbbC\x06\xe0\xfc\xd5\xbf6\xdfE\xd6\xe6\x0f\xc5M\xb1xq\xe0\x99`\xf48\xf4\x05\xabPv\x0f\xbeo\x9a\xcd\xae*\xba.\xb0\x08rH\xfc\x039\x1f\xed#\xbc\xdf\xbf\xa2\xbf>y\xc2Q2>\xa6w\xc5\x81q~\xe8\xb9\x1c\xdd\x15\xeb\x87z\ngu\xd7\x17\xf5\x8e=x\x98:X\x14\x86o\xec\xee\xcfjk\x7f\x17\xd9\xda\xf3\xdb\xfe\xba\xa9=\x9b+\x07\xf6}\xd3<\xd8l6\xf8-2n\xec\x03\xefs\x81\xfcb\xcbSw\x9c\x7f|&\x97\xf4\xe5\xabw/\xde\x9e\x9d\xbf\x7f\xf3\xf6!\xae\xb8\x94]\xc9C\xe2\xefLv\xe7_\xae\x7f\x8e,\xd7\x0f\x0d\xbeRb\xa9\x9e>\x83\x7f8^l\xbeo\x9a\xff\xd8l68F\xf1Q>\xe2|/\x7f\xbb\xa8o\x8f\x17\x9b\xd7\xecS`\xc0\xe5\xa5x\xfb\x7f<\x83\xba\xac\xbc(\xe4]E\x0fb\xfb\xdf\xb7&\xe2\xf9|\x18\x95\x9c\xc3\xe6\x97\xfaP\xb4\xdduQ\xbdo\xe4\xd1^:d\xe7\xf7\xf7\"\xb1\xc0\xee\xe3x\x13(\xd9\x07.n'\xceQ\xddY2:\xe0V\xb9\xba9\xd0N\x1d\xc2\xf5\xdcG\xb8\xc2'\x97\xa7\xaa\xda\x88\x07\x9c\xb3\xbe\x0f\x85v\xaf\xf2;w\xb0\xee\xb8=\x08\xdcq;\x19/\xb2\xba\xbaUb\xac\xa3\x7f\x189y(.{&\xf9\xb9\xaa@\xf4\x1b\xf7\x9f\xdcw\xbb\x18\xe4k5D)P\xb3\x01\xbf\xef]6\xcd\xe6\xa2h\xc5\xe4>?\xb9\xdd\xfc\xe5\x9e\\-)\xfa\xe1R\xae\x18\xca=\xfe.v\xc1\xfe\xe1\xdd\x9b\xd7\xee\xaf\xcf\x9e={\x86o#\x7f\x7f\xd2\xca\x8c\xb9\x8e9/+8&)9\x9e\xba1s\xd0\xd5\xa9*\x10\xae\xda\x05\xc1_\xdf\xb3\x89\xcfy4\x85/\x0cG\xf8\xd1\xc0@!\xba\x1c\x8d\xef\x90\xf5\">\xfc+_\x8d\x0f\x83\xcaa\xe4\xe3\xf4\xb5\xdd(\xba\xf1\xd4#\xd2\x14\xbb\x8f\x9cpL\xa2\xf3eY1\x9c\x88+\"s\xce\xda\xae\xa9\xbd\xa7f\xd0\xa7 w\xfa\xad\xd8\x18_\xb0\xc3\xf4\xb2P\xa3\x0f\xef~G\xbfB\x00\xbc\xa3\xb8'\xd6\xe6\xdeS\xb8\x87\x1d\x1as\xba\x1b9\xa3{\x8f|\xb0\xc4\\^\x17\x07\x0e\xef\xff\xc8!\xff\x8b\xf7e>\x17\xeb]\xea\x84\xce.\x07\xc9\xc8\xc4 \xb9\x9be\x07\x9fXU=\xfeX7\x9fjq\xac\xaf\x85\xa7\xcd\xee\xd4\xf5\xcd\xc1\x83\xe4&\n>\x92\x1c\xb8\x85\x97S\xa4\xd2\xd0-G\xb4\xfa\n\xd1\xb2\x08\xb4s;\xf9 \x0e\x84\xc2\xc3\xeb\xa6\xda\x0f\x86\xedidB\x9f8\xe0/\x0c\xba\xbb\x01}]x\xa2\x9b\x11s\xe1\x81p\x7f\x1e\x96\xc2Q\xf2(=\xe6\x9f\xff\xf4\xe7\x87\x1e$_\x8a#fG~4\x11\xcb\xc0\xc1}\xbb\xf9\xee\xdb\xef\xba{\x9em\xd7\xff\x921\x05\xb8\xde~^\xa4\xa9\x8aR\x18\x02\xac>\x0d\xf1\x03\x86\xd9a\n\x1d\x18\xde\x16\x86<\xe9\xdd\xeb\x00T\x0e\xd42\x1e\xe4\x1b\xf7\x91=z\xd3\x0b\xc7p\xc6\xb6}\xa6\xe1\x81\xec\xf4\xc9\xe8\xa4<\xfcOh\x88M\xb0\x01\xc9\xdcW\xf6$\xec\xba\xee\x7f\xd3pb\x0f\xbf6\xb9\xb3\xfb\xdeC\x81\x91\\\xdcU\xeb\x9b\x8f\xccWC7n\xab\x92_+g$y\x03 \x8fH\xa1\xa7\x14\xcf\x1e\x94\xf5\xae\xda@\xc7\xaa\xcb\xc7\xc3\xc3\xb2\xa9\xad\x1d\x18\xfd(\xb7\xddu\xd1\xbav#\xeax\x10\x9c\xb5AO\xb63Y\xa6O\xfeXv\xddi\x88\xcf\x08Z\xd0&\x87O{\x02\x96\xbb\x1f\xfeH\xff\xc30\xe2\xe9\xbf\xf7\xac=t~\x9f=\xd5\xfay\x068\xc7\xc9pj\x11\xfdTN\xc7\xc3\xa9\xb9.\x88SK\x19\x90G#6\xdfA\x11\x05\xd7\xb4\x8e\xab\xe2\xd4\x1c\xa7\xc5\xa9\xa5\xcc$\xd5\x91qj~\x97\xc6\xa9\xa5\x8c\xc4\xb3\xa63\xbd\x1fQX\x96G\xe4\xd4\x1c\xdf\xc8\xa9\xa5L!\xc1_R\xb5\xf1\xbe\xc8\x9b\xe3$\xb6\xb2v\xb7jU\x1fqqs|(+\x16][\xd1\xa6\xfd5\x92<\xc4\xbe\x92\xafN5\x12\xb0c\xf5\xed\xba\xb6\x91&<7\xeb\x86\xd9qh\xca\x07.\xd9\x95\x07;c\xfe\xd4\xb4\x90\xa2F\x18\x9b*\xd63\xdf\x84wV0\xd1\xd4\x8c\x11\xef\xdc8\x86\xde\x8c\x08\x98b\x192\xd1g\x7f\xcc\xd2\xd4b\xab\x8a\xc1I\xf0\x80G\xe1\x8d\x06\xa8pD\xd3\xd4\x02\xf3\x87\xa8\xff\x1f\x16\xef4\xb5\x08\x01\x00\xe2\x12\xc1\xd0\xcd\x8c@\x0f/<,\xe8hjx\x00\xd5\xd42N,=p\xc4\x0b\xca\x0d(\x89\x07ZM-\x18r5\xb5\xccSO\x0e?\xf1B\xeb\xdd\x98\xe5Ph\xd6\xd4\xd0 -\x0d.\xcd\x1a\xe8\xa3\xac@\\\x909\x91]8A\xd1\xa3\xbdT\x13\xa9dYu\xb9\x9dX\xfb\x84\xdb#6~\x04\xba#\xed\xdd\xef\x84l\x01{\xb6\xab\n\x19\x0c.\xaa58\xc0\x86\xb7\x14 L\x99\x17\xc8\xfd\xad\xdata5\xf5\xf6\xba\xa9\xf6\xdb\x96]\xca\xf8\xf2\x84\x89\x87\xf8\x04_F\x15\xa9\xd0\xda\xf5\xd5-\x1c\x9b\xae\xec\xcb\x1b\xc6\xafI\xe1\x9f\xa0\xaf\xc68\xc2I\x12\xef\xfa\xe6x\xc4\x92p\xdd\x02\xfb\xdc\xb3\x96\xb3B2)m\xe7\x99l\xb9\xf7\xc8d\xcb\x93\xc1\xcb\x16\x8c\xa3\xf0/IUv\xc2\x89j\x9at\xb9\xef\x1e\x01+v\xd7\xae\xcb\x9f(\xea\xa3\xbd\x8a\x1czs5\xb5\xc7!T\xfdU\x8b\xa2q\"k\x1eA\xdf\\I=\xc9XHL\x8a\x9e\xc5\x81c\x8dr>\xc4!\xde\x97\x81\xd1JL\x1d\x14\xeee\x0b\xec\xf3POE\x9cY\xc1\xf1\x94u\xb7\x81wC\x06\x15\x03\x9cr\x11\xb2\xbd\xf8\n~j$\x01\x1c\xf4\xe6\x06\xd8G\xd2\xe7H\xb8\xca4m\xcbv=\xec\x8ajw\xaa\x94\xce\xd9\x00vy\xe2\x02\xd47\x16\x02M\x07\xae\x13\xf3oN=\xc7\x8fV\xb2\x10\xcd\x8d\x10!G\x99\x1a\xfex\xcdj9\x15(Z;\x01\xd3\xa4Y0{17\xed\x91E\xb1\xcb\x8e\xb3,\xfbr,\xe5VhT\x00>]7\x9d\xd9\xcf\x98\xaa\xc8\xecD\xdf\x86r\xf2\xb6\x12\x9dM;)\x87>\x0dUT\x03\x91v\x1a\x9bg\x1d\xdc\x87\xcc^\x8c\xf5\xdf\x0c\xe5\x0d\xe1\xd8|b\xf2\xf2\xbd`\xe3\x16\xb0\xbd\xb0\xc7\x08T\x1a\x12\xb2\xc8\xe1\x99\x10\x0f\xa7\xaa/\x8fU)\x07a\xc2\x17/\xe2\x98mFzM\x06\x00\xe9W-\x10Q[\xe2Z\x1e_\xbe\xa0ZD\xef\x00J8d\x8ff\xc7!#H\xdf\xb4r\x02\xc7\xa2\x15+7\x84\x9a\x0dt\x88S\xf5^\xa0\xa0\x14p\x8e\xac\x95\x15\\\x85r\xb7\xfe0\x00;4\x93\x1fm\xcbD \x1ds\xe0\xea\xe1\x83\x0f\xf5\x07\x95\x89D\xa5\xe3\xb6;\xfcp=~\xbaeu\xdf\x96\xac\xfb0\xf1\xf7B\xde\xf7\x84\xc5%\x96\x01\xf0I[(\x814\xb6\xc7\x12\x97\x86\xbbP\x8aNZ\xe5LG\xe8\xe1\x1c\xd1\x14-a\xf7h\xc7\xd2\x10\xf2\xa0\x98\x00\xd5@\x14s5e\xfb\x9a\xde\xd1\x872\xacn\x86q8a\xc7\x03hmD\xa0~\x12\x96\xc0RP\xe2\xe9\x0e\xd0H\x81A\xef[\xa6=ypd-\x1c\x8b\xb2}\xd2\xb7e3j~\\|\xc90#\x17\xa8\x9a\xcb\xb4\xaa\xd3;\xe3\xe4\xfaF\x9d\x115:>CR\xa5G\xa3\xfb\xe9+\x83m\xe6?\x0b\xb5\x9e(\x17&\x9e\x0fI\xf9\xc6}-\xeb\xad%sF\xfa\xc5nu\x04\xca(\x9d]\x17e\xfd\xf8S\xb9gcA.\x9bu\x15\x16(]63%\x17)\xb4\x0c\x17\xe8t\xeb|\xe3,\x02\xb5\x0c\xa2IBB\x04\xa2i*2y\xa8\x9b~(&\xb6\xb5\xb5\xf3\xc8:R\xdf4&8\x95\xb1j\x9aj\xccN$&\xd6\x16;1\xa7\xe1J\x91\x9e\x9a\xfd\xe3\xe1O\xd1\x8dp\x86\xabn\x95\xd1\x99?\x1a\xc0\xd9\x88\xe1Y\x0e\x91\x1a\xee\xe5x\xbe\x92s\"OGs\xdb\x1a\xdf\xa2\xdf\xe30L8&\xb7\xeaU]\xf8\x95\x16\x93\x99\xc1\x13\xfe\x13\xe1\x7f-\xa5\xa5\x05L\x9d\x01\x15\xb1c\xc5\xfc\x8c\xef\xdbB\xe8\x88\xff9F\xe5\x00\x8b\x8c\xca\xab\x1d\xc2m<)C1L9\xfa\x12\x08\x1f]\xf9\x90\xf3\x03\xe5\x8d-\xb0\x86E\xce '\xed\xba\x1e\x82\xfd\x93\x0c\xbc\xb4k]\xb3JpTE\x0d\xc5N\xc8\x7f\x1b8\xb3\x15]\xa5\x13\xd0\xdc|\xaa%'\xd6\xd4\xda\xbe\x0d\xde\xde\x9d\xaf\xec\xf0\xc4\x04:2KS;>+\xe8\xc2_\x14UQ\xe3\x95\xd8\x12\x11\xdd)5 \xe1\xbd\x93\xdcq\xc2'\xe1=z!o %hI\x8a42\xf6\x13\xfd\x91\x85\xa0\xea\xa1{W\xdc\x7f\xfd\xe6\xfd\xab\xa7\xc2'g`\xdf\xa5\xe3K)\xcc\x18g\xb5R\xad\x8f\x0e\xe0\xba\xdf\x81\x05jHci\xa3\xb92*u\"\x07h\xd9\xca\x8d\xbfj\xae\x1aa\xf8\x9fv\xc7?a\x97H\xf2\x01\x8alyE\xc5\xd9\xdd\xbe\xd1\x91\x96}\xde\xb1c?\xe4\xd4\x1aC\xcet\xa1\xde\xf0\x9e\x1ep\xc2v\xa0\x18\x0e\xd0\x98\x1eR\xa4\x90\xedNe/8\x00\xa1\x03\xaeJf\x94\x0bUd\x18K=1N\xc8C\xf6!R\x8bO\x9b_\xa0\x9ak\xe8\x8ei\xda Fz\x06~\xe4\xb6q.\xda\xbc\xa1\xa41eZ\xb2Q\x81p;E\x15\x92wsC\x91\xee\xa8\xb4\xb1e\xbb\xa7\xfc7U\xda\x80\xe6\xdfV1Z\xb8\xf4\xc6r\xc0 \xe9\xdcU\x8c.\xbc\xb5\\x\x97\xd8\xbd\xe5\xb9\xb9K\xb9\xd1\xc2S_t\xab\x19\x90\xa6\x00\xa3o0\x8c\xc9p\xb39w\x1bxh\xa1q?L\x9b:T\xa2\xd4\xf4\xa0\xf7\xa7|\xf7.]\xc4\xb2\xdd\x1b\xbdM/X\xf2\xe9\xf8\xf3\xa0\xcaUc\x99F\x9d \x19\xadY\xf3\xd7\xac\xf9\xe0\xdd\xbf(o\xe5e\xe9t\x00O0\x08x\xc9\xe50s\xf7\x8b\xd2\xe6-\xe1\xf2&\xd5\xea\x97e\xf2\x96'\x0c\xc9\xc4\x8bE\xf90\xeax2\xf1_\x8eJU\x1fE\xb2\xd9qV\x16*\xe9\xea\xd2\xd4\x1eG0\xd9\"\x9c`<\x1dU\x9cM\x90\xcd\x1a\x8dZ\xd5\xe1\xaf)\xb1\xfc\xa4\xdc\xee\x9b\xe6\xa3\x07\xd8\xb1\x12\x85\x8f\xdd\x07\x83\xe7\x14\xef\xc7\xe7\xb9\x900\xe7\x90\xf7\x825o\xabc5\xbdS]~\x9e\x1c\xbf\xa6\xb9M\xafc\xb3\x18\x1c\x9c\xb6\x1e\xceQ\xb6\xe8,h\xfbb\xf5e\\\xcb\x03\xeb=\xbcR\xc9\x98\xf4\xfd\xa9\x92VL\x1c\xde \n@\xd1G&\x99qr\x81\xb1\xf7\x0d}D\xba\xc3\xc0\xcca\x05\x1d\x01d\x1bn\xcf3U\xb5B\x9a\xfdCy~8wY\xf7-\xe6\x82\x9a\xe0\xd01\xf4N\x9dAt\x02^\x8cz\xe7u\xf4\x10\xb3@\x9d<<\xa0\x06\xd7\x8f\xa8\xab\x07\x90\xd0\x1d\xb9i_\xf1\x11\xe9\x1e\xc0\x9a\x7f\x85\xa0\xb9x\x899\x10\x89.n\x8a\xba\xe7\xb7}\xb1/\xfa\"(\xfa*;W!\xab\xed\xe0\x16\xbc\xe1%\xaa\x18\x82\xccF\x1a\xa6%\xdb.\x18\xf4\xae\xac\xaf*\xed\xce\xd4\xd7\xde\x00\xc6\x7f\xb3$\xe7\xa1T\xbf\x84\xa0[\xcb\xf92q\x92\xf6\xb8i\xf7\xa2\xd6\x7f\xa5\xd9\xedV `\x95\x00\xfe>$\x00\xfb\xfc,\x10\x05\x82\xa0\xe6\xc8\x04\xa3\x07U\xb2 0\x1eT\x9b\xfd'\x1d\x9bp\x16@/\xa6\x84I\xef\xcc\xfc\x7fS\xbe?\x0b^,\xfb_8\xf7\x9f\x97\xa1\xf63\xd3\xbd7\xeb_\xf06\x8d_H\x99\xf3\xfd\x85\xb3\xfd\xe5\xcd\xf5\x975\xd3_0\xcf_\xbf,\xcb_\xce\x1c\x7f\xf1\x0c\x7f\xb3\xf3\xfb\xe5\xcc\xee\xd7\xc7s\xfb\xe5\xcc\xec\x17\xcd\xeb\x979\xab_0\xa7\xdf\x9c\x8c~\xe1\xec}\x19r\xf7\x912\xf7\xa5e\xe9[\x98\xa3/o\x86>_\xd2\xb8\xac\xd9\xf9\xf2\xe7\xe6\xcb\x9a\x99\x8f\x96\x97/kV\xbePN\xbe\xcc\x19\xf9|\xf9\xf8\xfa\x99\xd9\xf8D\xff\x1ex\x81\\|\x192\xf1\xcd\xcd\xc3's\xee!\x00\xf1,|\x0br\xf0y2\xf0\x05y\x8d`\xf6\xbd8#\x92/\xf3^(\xef^x\x1cYs\xee\x852\xeee\xca\xb7\xb7,\xdb\x1er\xa41\x9e\"o\xa6\xbd\x1e\xcd\xb3\xb74\xcb^4\x8d\\ \xc3\x1e)\xbf\x1e\x9el*-\xb7\x1e\x0e\xc3\xc94\xb38\xab\x1eu1(\x19\xf5\xc2\xf3&e\xd3K\xcc\xa5\x87e\x0c\x0b\xe5\xd1\xcb\x93EoY\x0e=7[P\x86\xfcy\xd1\xecy\xe1\xdcy\xb1\xccy\xde\xd5L\xc9\x9aG\xc9\x99\x87e\xcc[\x98/\x8f\x98-/-W\x1e)S\x9e'\xe9\x1c\xda\xbd\xe7]J\x86\xbc\xe5\xf9\xf1\xbc\x03\xb5~]\x94\x19\x0f\xcb\x84\x971\x0f\x1e\x9e\x05oQ\x0e<,\xe7]\xee\x8cw\xa1|wX\"0,\xd7]\xbeLwY\xf3\xdc\xe5\xcfrG\xcfqG\xcap7\xe8\x90(\xf9\xed\x86W\xa3\xd9\xed\xd0\xdcvx\xef\xd4\x9ce\xf1\xbcv Y\xed\x889\xed\x9ci\xe4\xceg\x973\x9b\x1d\x9a\xcb.o&\xbb\xbcy\xec\x96\xe1\x03)\x87\x1d%\x83\x9d~\x99`\xd9\xeb\xa4\x00\x87\xe5\xae\x0b\x0bF\x99\xf3\xd6y\xb3\xd6a9\xebLO\xe0L\x19\xeb\xbc\x92,\x96\xad\x8e\x9a\xab\x8e\x94\xa9\x8e\x96\xa7.\x9a\xa5.!G\x1d\x96\xa1\xce;\x7fc\xb5\xf3d\xa7\x9b\xdc\xab0op\xdaH\x1c\x8c\xb4\x81.\xc9J7E2\xfa\x0c\xdf\xfe\x81i\x7f,\xcbG\xd7\xa7\x1b\x85\xbc\x99\xe8\x82z\x1ac\xf8\x99\xb2\xd0\xf9s\xd0\xd1\x87\x82j\x85\xe6g\x9f3\xa3\x91U\xf3\xe5\x9e\xf3f\x9e\xa3\x8f\x7fn\xd6\xb9x\xce9\xfa\x18\xd05\xcc\x97m\xce\x93k\xce\x9bi\x8e>\xf0\xe4,s\xe1\x1cs\xde\x8e\xfd\xaeE\xe1u\xcc\x9c[\xce\xbe4\xbd\x99\xe5By\xe5\xa2\x93\xc4}\x07\xa9\x13]\x98On\x9ab4\x9b\x9c/\x97\x9c\xed\xdd83\x93\xdc\x0c\xca\x1a\xcf!\x17?vy\xf3\xc7%f\x8f\xf3\xce\x19\xa2>\xbb\xfe\x1cc\xc1\xe3\x0c\xa4E\x81\xec\x19\xe3B\xb9\xd3\xc2\xd9\xe22M'[\x9e83\xd7BZ\x968R\x8e\xb8\x8c\x13N\xce\x0e\x87P\x08\xd5\xb4ySs\xc3\x053\xc3\x05\xa7\x19\xf7\xab6\x16aN\xf27,\xd1[4\xcd\xdbL6xI\x827\xf1\xab\x05o\x02\xe3\xea\xae\xa2\xc9\xdd\xc8\x9e\xc0\xd1\x9b\x8b\xee\xee\xd7\xe5M\xe9\x16\xf6\xf2\x0d\xa4s\x93Sr\xa3*\xd0\x98\x8a\x00\x86\xce\xf0x\xcc\x9b\xc2\xcd\x93\xc0\xcd\x8f\x86\xb9\x93\xb7eM\xdd\x86'n\xcb\x98\xb6\xcdM\xda\x96/e\x9b.l\xeb=\xe4L\xd7\x86&k\xbb\xc8\x9b\xaa\x0dI\xd4\x96;M[Z\x926O\x1c\x9e\xe3\xf2J\xf0\xbbu?^\xe4l\x9b\x1ev7n\xfc\x1dG\xdb\x85\xfdr\x834-\xc6V\xcc\xf4\xce\xf5\xc2Y\xabs\x13\xbduc\xfe\xba\xb9=v3\xfb\xec\xae\xd5\xb9\x8d\x96\xd3\x7fWbk\xc4\x837\xaf\x0f/\xc1\x8b7\xbb\x1f\xefZ\x9d[\xb6$\xbf\xdf\xc5\x9e\xbf\xb9}\x7f\xd7\xea\xdcz\xa3y\x01g\xf6\x03^\xabs/\xf4 \x9e\xef\x15\x8c\x02[\xabs\xaf\xd5\xb9]@\xcb\xfc\x85\x1dp\xfdZ\x9d\x9b\xe6=\x1c\xafKM\xf3 ^\xabs\x8b\x96\xe8Q\xbcV\xe7F\x01G\xfd\x8bc\x1e\xc6q\x1f\xe3\xb5:\xf7Z\x9d\xdbnku\xee\xb5:w\xccg9\xb3\xd7\xf2]\xf8-\xa7x.\x13}\x97\x93\xbc\x97\xe9\xfe\xcbku\xee9\xde\xccy\xfd\x99\xd7\xea\xdc!\xcff\x9ao\xf3Z\x9d{\xa6\xafsP2_\xabs\xdb\xd0\xb3\xfb?\xbb\xce\xcas\xc7\x83\xe0lN?h\xf0xB\x83\xdf\x17\xdaq\xe3\xcc\xe4\x0d=\xdb\x00\xb7V\xe7&\xfaG\xa3\xe0\xd6\xea\xdcY\xfd\xa5\xd7\xea\xdcS\xcb\xecA\x9d\xe0C\xbdV\xe7\xd6Z&\x9f\xea\xd9\xf49\xeeY\x1d_U\x0c\xce2\xef\xead\xff\xea\xe0\xfc!\xeac\xbdV\xe7^:\xb1l^\xd7\xcb\xfc\xae\x89\x9e\xd7\xd9\xa7\x9e\xec\x7f\xed\x85\xd6\xaf\xd5\xb9E[\xabsC\x8a\x0b7\xe9\xdaL+E\x9d\xd9\x95;\xe6\xcc\xbdV\xe7\xd6\x1e\x87P5\xb7\x83wf\x17\xef\xb5:w\x82\xbb\xf7\x7f\xbf\xea\xdc`c\xf7\xe40m\xdc\x9c\xd3\xcfky!\xd5\xd6\xe4\xe2\xf6\x18\xfe\x8e\x92\x8b\x07\x82\x0bh)\xc5\x11\x00 \xb1\x0df\x19\xf9\xe4\xb0\x86\xeb\xb2\xeb='\x8c?2\xce\x96V\xcd[\x9c\\\xe9\xb2,K\xe8\x0f\xba\x84Y\x87L\x96\xea\xc7\xb0))\x98x\xf0\xe2D8\x06\x89e\x17EW\xeed\x91\x7f1~\xf7\xbd\x90\xa8\x19\x164\x05T\\&\x89J$\xd1B\"\xc5\xf1x7\xa0c\x8c3\xc0\x0b\x15\xbe\x01\xbb\xe2(\x0b\xeaIf_\xfd\xdcrnO\xa0\xf5\xb1mv\xac\xeb\xa4H/\xd6\x03\x817\xd0d\xf1X\xd4I\x7f\x84\xd9\xc3\xcazW\x9d\xa4\x81\x8f\x93\xaa\xf1e.\xc5\x14|\xbe\xa7\x9d\x1c\xcb\xc0\xc8\x0c\xa3\xf0\xc6_\x14\x93\x13\xf4}\xa4h\xa4\xb4\x121\xe8\xdb\xa2\xee\xa4\xfd\xefP\xec\xae\xcb\xdaqW\x14\xa3@K\xc6\x04\xb6\xc2W\x93\x89\xc4\xc8\xe2|l\xf6p\\a\xdd\x16\x0b\x8d\xcfN\x9e\xa0c\xcbn\xee\xe8\x00]\x17\xdd\xf5B$\xf78\xbc\x1e\x8b\xb6\xdfv\xac\xdfbdF\xb5\x88\x96)6z\xc0\xafD\xe3\xb1\xe8\xa1\xac{v\x85\xd4\x19U-^\x92'\xb4T@Y.\x88/\xd9\xb8\xe1\xe7E\xdbw\xac\xffQ\xac\x1c\x862B\xea\xef\xb7\xf8\x90H\x18\x89\x0ea\xe8\x9e\x83\x95\xe7Z\"\x1d?\xfe\xd6\xbb\xfc\xa7\xcc\xddO\x1cjf\xc0\xf6\xbc\x84I[0\xfe\xc7#4\xa7\xfex\xea\xa7\xdf\xa6\xb3fA\x11\xcc\xe2\x9d\x8dq\x8a\xd7\xcb\x0b\xb78\x1e3C\x14\xf87\xf0\x83\x99A3.m\xd5;\x96\x19\xec\xb8\xff\xd3\xf5\x89\x90QNi\x9a\x8e\x05\xaaL\xcf\xeb\xdf\xb8\xec\xe5\x896\xb8\xbb\xf1Z\x95\x12\x999\xe6\x1b\x85\xa2\x07U\xf8\xe2\xbe\xc1\x1aQl\xc0\xda\x1fK\xe3\xbfa\xb9Q9\x10\x0b\x0e\xf1\x9d\x00{r\xd9b\xc2!\x12\x17\x0e3\x06\x17\xd0\x9a\xce\x89\x11\xf7\x02S\xb5\xb5\x02q\xe2\x10\x8e\x15\x87\x19\xb3\x9b\x1f3\x0e\xc4\xb8q\x981\xaa\xc0\x9a\xe7\x8c!\x87P\x1c9\x88Ayc\xc9a\xc6\xb4f\xc4\x94\x03!\xae\x1c\xe2C\x89y\x19RV\x7fA\x9c9\n\xcf\x8c\xbe\x89\xc7\x9aC4\xde\x1c\xe8\x0b\xb18:2_\xfc9\xa4\xc6\xa0C0\x0e\x1d\xec\x19,\x89E\x87\xe5w\x05%.\x1d\x88\xab\x0e\x0b\xe2\xd3\xbd\x00/Xz\x8c:\xc4\xd7\x05\x08k\x03\x91xu\x88#\xb4j\xd4\xe5\x83Y\xb1\xebAp\x84Xn \xc4\xb0\xc3\xddL6c<;,\x8ei\x07z\\;\xdc\xddr\xa4\xc5\xb8\x07\xc1\xd9\x8e\x91)q\xee\x10\x8fu\x07\xda\"P\xa8:$,T\xb6\xd8w\xf0\xc5\xbf\x03-\x06\x1e\xe2\xf3\xa7\xcc)k<<\xd0b\xe2\x81\x16\x17\x0fi\xb1\xf1\x10_\x90\x18\xaf\xe3\x0f\n\x87\x05\xb1\xf2\x1e`\"~>\x1a/\x0f\xb1\x98y\x00\xbf\xcf\xb5l\x9e\xd8y\x88\xafW4h,\xb6dKb\xe9Q\x80\x8d\xbd\xe2\xd6[1\x94_\x1aW\xef\x00D=5g\xc7\xda;\x90T\xec\xbd7\xde\x1er\xc7\xdc\x83'\xee\x1e2\xc7\xde\xc3\xa4TA\xe2\xef\xc1\x91\x02\x92b\xf0\x1dX\"&\xdf\x17\x87\x0f\x19b\xf11\xc4\xc0\xe3\xf1aiL\xbe\x03\x0d\x8b\xd1\x07J\x9c>~Z\x02\xa1\xc4\xde \xe6!|\xd9\xfcj\x80\xf7\xf6\xfc\x85\x1a\x1b-\x8c\xf9\x9c\x0b\x1d\xe9U\xd9\x84\xac\xa2\x11:cv\xf2\xe1`u\x10~\xde\xc2\x80\xac\xa4\x9b\x91\xb0H\x1a<\x1dD\x94\x95\xc7\x99\xf7\x90\x04\xea%\xb4\xc6 -\xd1q\xb8\x87\xa5\x189\x98\x0d\x0cj\xaa\xd3\x0b\xce\xbdM\x91`X\xefX\xbc\xa1\xffF4\xd5p\x06p50\xc5\x14N!\xf9\xd3;\xf6\xd0X\xdd\xb7\x8e\xb0\xb3x\\\x0e\x85\xd7\xba\xd2F \xea'a\xe1.\x05\x85\x9f\xae$\x8d\xf3q\xee\x93\x96iO\x1f\x1cY\x0b\xc7\xa2l\x9f\xf4m\xd9\x18Z\xb8)\x1c\xfe\x8ef\xeav\xa0\xe67\xad\xbe\x16\x93\xaf\xde\xe9\x1b8\xb2\xb6+;C\x8d\xc5g\xbe\xdd\xb3\xba9\xcc\xc1\xd2\xe9kCD\xe0?\x0b\x95,'\x92 \x9e\x0f\xd97\x0c\\(\xeb\xad%\xa7\x13\xc7\xe0\xe34\x10\x88\xa3\x04{]\x94\xf5\xe3O\xe5\x9e\x8d\xf5wm\xf6\xbc\xbfv\x02~\nK\x92\x93B\xdcpqO\xb7\x9b\xf8\xcaX\x18\x84x\xc5\x08\xa6|;!\xc5\xc3y\xd3T\xe9\x94\xb1i*\x1f]l\x9a\xcaL\x9a\xc2\x7f(\xeb\xcbf\x16\x0d\xac\x9b~+o\xa9-f*\xf2ln\xca\x17\xc8\x8akK\x12]o>;\xfaj\xbf\xd5\x8e\x7f\xfa\x85\xa4\x13\x8f\xad\x1a\x956?\x8cm_Z2T\xef\xd3\xe6\xf9\x03j\xa9\x90:j2}\xddm\xb8\xa5\xd3\x8f:\xc6\x17lw\xfd\xbb\xef\x1e\xab\x98I3\xf22\x0c\xca\xe5\xa8\xc7\xb3\xbd\xed\xda\xdd\x1d\xcf\x08\xed\xcb5P\x1b\x97\x8c\x0c\x91D\xc1\xa9\x18R\xb5\x02\xa1\xc9\xed\xbb\xfe\x8bMN\xeb+<9\xcf^u\xbdJ\xd3\x14\x9f!z\xbb\xca\xb6P\n^\x94\xf0Aj\x87\x9b:`\x87\x91-*q\x03AO!\x1be\x93d\xb3F\x07f&\x1f\xf9\x9b\xca\xfa\x1bR\xea\x19\x88\xda7\xcdG8V\xc5\x0e\x0d\xe2\x00\xa9\x8f?VLt\x1c\xd2\xe2%.JL\x93\x97\xb40\xe6\x08\x8du9\xd5\xe5\xe7\xc9<\x13Ec\x1b\xa0oQ\x06;\xc4\xf6\xa2\xa8\x8az\xb7tQ\xe8S\xb5\xfaEm#\xea\xd9\xa7k\x8f\xd6J6\x93^\xf5E\xdbc:L\xd9\xa4l\xcaI\xc4\x17\x9b\xe9\xd4\xa5\xa2F\x93\x00\xaf\x11\x9b\xc7>\x1d\x92\x0bK\x1e )F\xeb\x93\xf7MZW\xd8-\x9cvT\x01'\xdb\xc0\x1c\x9f\xd5\xbbV\x84\x9bIU[(\xc6\xbe\xec\x04-\xf5\x99\xbf\x13\x15\xaf\xb2%\xcd\x884\xa1\xe0F\xbf\xf3*d\xc5\xcc\xe8\xcaX\xd9RT\xb2@\xc6H\x9d\x85|\xc5\x87\xa5i\x1e\x8d\x83$\xef\x1f\xbf?1\x88\xb8\xcf\x9b\xa2\xee9\xf3Z\xec\x8b\xbe\xc0\xf0\xcf\x18\x95\x12\x03\x8bV\x1a'\x8c\x0e\x87\x876\x90\xd8\xb4\xf4 \x99\xde\xcaJ\xdb[\x88M\xearX\xf36\xd1k`\x9c\xcc\xc1\x8d\xb9\xb4RV\xc1\x98\xb3 \x0e\x99\xbf3\xf35I\xf8\x9a$\xfckM\x12n\x9a\xd6Q\xa3B\xccpa|4@K6\xac\xff\xa2.\x98\x97\x0e\x11\x90[C0j\xc8K\xea\xe9\x9c\xb3\x111$x\xf1\xc1XK\xaf\x95\x007\x0f\xe0\xa6\x80Iw\xbd`$\x0e\x90\xc8HP\xd13`-\xbe\xdb\x1c\x9a\x04\x190\xc2 \xc5X\xa3\xf8\x0d\xed\xcaz%.\xe5i\xac\x11\x17\xe4PP\x1e\xe1\x8e \xd6\x11\xe7I\x0e\x0c\xb0\xe5\xb4\x12\x13\xd1\xa6\x19\x85\xa40\x82\xfc\x95\xc1\x94\x13\x92\xb6\x86x\xbc\xe1\x95J\xa6\xc7\xe2l\xe6\xde\xe79\xdf\xb2\x1d\xe3\xecm\xd1\x07\xa7\x96iJ\x811\xf7\x0du,1\x11\x88\x88!1/\xc9\x1c\x02O\xa2\xa8C\x1c\xf9<\xf7\xce9\"\x8d\xb7r\x14\x10\xaaG\xc5\xd1\x19\xb9\xe2,9\xc6(\xd7\x14\x90b\"\xf2KP\xcf\x8a:\x179\xfaV?\x8f\x87\xcc\x82\xaf\x9b\xf0!\xad*\xa9c\xed\xca\xfa\xaab\xba~U\xebV*S'\x80\x9c\xe2\x8c\x9fhN\x945_\x0fN\x93\x1e7\xed\x9e\xb5l/\x94\xb8r\x88\xf8\xf0\xf4:'\x96\x10\x11\xe2_\x90\x19\x0d\x00\xe9\xde\x18\xa3[\xedK\x97\x7f\"\xf3/\x9a\x92\xf5\x0b\xb9dL=f\xba\xba#|\x94l)44\x0bO%[\x84\xb3\x92-elY\xb8,\xd9\xf2\x04\x88\x1b\xf1\xdf\xfar\x88C*\x1f\x0e\xd7\x8e\xa3g\x8cQ/\xed\xb8\x8fY8&\xef\xba\xc1+]^n\xd7\xac\x12\xca\x9f\xa2\x86b'\xc8\xbf;\xe13\xceP\xb9z\x83\xe6S-\x15GM\xad\xed\xe5\x90NT$\xd4mve1:V\x8bU\xd5<\x94]x\x97\x1c\x92\xdb\x8fg+<\x17\xff\xec\xc3\xe0\xb81\xca\x16\xdcS\xa9cM\xfc,\xb6{/\xa4\xe3\xa3\xd2\x97\x89\x8d\x9a|\xd3'\x7fH\xb1\xd0|\xdf\x0er\xdb\xdc\x95{\xfd\xe6\xfd\xab\xa7\"\xc1\xd1\xa0\x0c\x96\x99\x82Jq}\x9d\xd5\x8a3\x1e\xb3\x8b\x0e\xee\x8ex\n\x18I\\\xddN\xc6\xe8s\x8e\xaf\xbf\x9d\xcaV\"\xc5Us\xd5\x88l%T\x9d\x12~\x19\x98\x1a\xa5\x97>m\x92\x01iR\x9f}\x83aL\xb2\x16Ii\x8etX\xab\xe2hU\x1c\xe9\xbf\x7fm\x8a\xa3a\xa0&\xbf\x15\xe2|\xbc\x9c\x97\x0e\xe0 \x06Ac\xbd\xa8\x9cW2\xbb5\xde\x016\x8fE:\x14\xe1B\x1f45\x8d\xb3\xe53\xcbzL%<,x\xb1\x82\x1e\xe1R\x1e\xdek\xcf\x7f\xe9\xf5\xde\xc2\x1d\xc1;/v}\xcd/\xd3\x01\xb8!>\\\xa0cNi\x0e\x7f \x8eY\xc57\x04x\x04X\xb0\xecF\xbf\xac\xe0\xc6\xccR\x1bhB\xa1x\x91\x8d\xd9\xe55f\x15\xd6\xe0\xc2)\xb6b\xf1\x92\x1as\x8ai\xf8R\xdcG\xcbh\xcc-\xa0\xc1\xa98\x02.X:cN\xd1\x8cpq\x8c\x0ce1H\x051\xd2\n_,,y1\xb7\xd8\x05\xa0\xfe->\xbf\xa0\xac\x05.\xf2\x97\xb6\xc8Z\xd4\x82V\xceb^!\x0b\xcf\x02\x87JX\xa4\x17\xaf\x98\x8aT`g\xdcS\xb6\xa2\x9fY\xb0B\xf4\xef\x81\x17(U\x91\xa1H\xc5\xdc\xf2\x14\xb2\x0c\x05\x02\x10/L\xb1\xa0$\x85\xa7\x18E\x90\xd7\x08\x16\xa0\x883\"\xf9\x8aN\x84\xcaM\x84\xc71\xaf\xc4\x84\"\xe9\x16\xb0Pq\x89Le%\x16\x14\x94\xc0\x8f4\xc6S,(\"\xc1\xfb\xb3\xa0\xf5h\xf9\x88\xa5\x85#\xa2U\x0f\x02\xc5\"He\"\xf0|\xe5i\xa5!p\x18NB\xe0\xc5\x85 \xa8\x8bA)\xfe\x10\x9e7\xa9\xe0Cb\xa9\x07,\xf9|\xa8\xbcC\x9e\xc2\x0e\xcbJ:\xb8I\x9d3\x94q\x88\x16p\x08\x97n\x88\x15m\xf0\xaefJ\xa1\x06J\x89\x06\xac8\xc3\xc2\xb2\x0c\xc4\x82\x0ci\xa5\x18HE\x18}\xfcs\x93\xe7\xc7\xd3\xe6\xd3\xc7\x80\xaea\xbe$\xf9\x9e\xf4\xf8\xde\xc4\xf8\xf4\x81''\xc3\x9f|b1gvo\xc7\xc4\xd4k\xce:\xda\xdd\xa95$\xa4\xbb\x17\xaav\x0b\x9c}iz\x13\xdd\xcfJ0\x18\xf6^\xa7Nta*{#V?\x9c\xc4\xde\x97\xbe\xde\x18\xe9\xfc\xc4\xf53(k%\xc20G\x8cap\xc8\xce\xef\x8b\"\x0d\x1dhH\xe4a\xd6\xd8C_\xf4\xe1\xc2\xf8Cw\xc8n\xdd\xc8f\x02V\x85\xc4\x95\xa5q\xcc\x7fKQsN\xa4\xb2\x16\x93\xec\xc0\x0b\x88\x99!|\xd0oR+ \xd9\xa4#ZH\xf2\x18\x80l@r\x83\x91\x8d~\xed0d\x03\xb8\x11~\x8c\x0fW\x1f\xa8\xe9-\xa3$\xd4\x02\x8eE\xdb\x97\x9cuo\x8d\xb0\xe3\xa9\xabq\xef\x8c\x98ca?7\xbe\x1e\xeeHC\xe1m\x81\x1f\x8f\x89\xa9\xa3%0,b\x99\xc9\\\x8b\xf7\xc2A1\x12\xc7ES\xe3\xbe\xec.1\xef\x0e\xef\xad\x11\x1c\x9d{S\xd86\x81\x19\x17\x02r\x01xI\x7f\x9cwYD\xdbmZ\x8eQ\xf1\xf8\x10\x8c\x93\xba\x94f\x9b$\x03\xa3\xd68\x9d\x0e\xee\xa3E\x9b\x17Se\x12=N\xc0{\x8c\xfa\xe6\xa3\xbb(\xc55vp\x11q5\x08*\x95\xac$\xc7n\xeb\xc3\xd8\xb2\x892\xa1\x9f\xe3 \xc6\x16G\xc5\xe0\xd4\x84\xb7\x0bI\x98\x05\xcda\x86\x83\xacpt2\x84\xc4\xb6\xd9\x08\x1c\xc4\xf8[\xefh\xc3\x0b\xbc\x88\xfaY\xb0\x10\xbe\xd6\xc7\xd5\xce\x1c\xedR\xdah\x81\x0bp\xb3~^6\x8a\x16~U\xcf|z T\x9a \x94\x11\xd2uQ\xf9h(\x848W\xff\xae/\"\xac\x1a\x1c\x9bg\x8d3\nq\xe6\xd4\xa0\xc3\xe0T\x9e/\x90\xc1k%\xe8\x07\x80\xe5\xa8\xb5\x9e\x14\xc4\x8b\xcb\xce\x0f\x10\x8d\x8a\xf3\x84\x8be\xd1\x9d2\xeb6\x19\x99\xf7%u\xb6\x1d 35v\x10\xd7\xda\xd1\x07\xe5\x1c\xa5\xf9\x1a<\x0b\x90O+\x06qM\x1e\xe4\x18\xfeR\xad\x1eD\xe6\x80&5\xc44|\x10Nl\x9b\xee.\x14Oe\x18P\x0e@DA\x00\xd1%\x96m>\xcb\x83\x82s%9\xad\xabx\x1eC\xe2\x84\x97zV\xcc\xe3\x93\"\xa0\xdc \x13R\x1eF&L\x99L*O\x85\x02 I\x99S\xf3k\x0d!\xcf\\\xe6r\\~\xd4\x96\xc6S\xbf\x16\x11\x089\x12\x89X\xe9\xcd\x8f\x98\x85\x1f\x93\x8d\xcc\x95\x0d=\xd3F\x1e\x19\xb8g\xb3\x96pk(\xc0\x98SK\x1c\x87r\xf1o\xb2\xe1i\x10gj\x1f\x9dO\xbd\x8cg\x9a\x16R\x03\xa2\xeb#\xdd\xec\x87\xcb\xb4\x91\x1a \xc7w\xf4\x8b\x18\xc8B\n\x85 \xc0\x10PX\xef\xe19\xd7\xd2z\x0f#m\xbd\x87\xd7{x\xbd\x87e\xfb\x12\xf7p\x9a\xdd=\xc9V\x99\xa4e1@i\x1a\x17M\xd7\"[\x06\x8d\x8b \xcf\xd0\xbe\xc8f\xe8`(Z%\xeaT\xad\x99)\x84\x18\xae~K\xa9\xb4`\x863tJH\x82Z\xb2J)\xa0\x11B\x11\x89\xa6 \xa2\xaa\x80&-\xc7\x8c\xde\x9d\x8f#\xbd\xffm\xd8\xb6/\xe0\xd74\xaf\n\xc3\xdf\xd0W)S]\x85\xbf\x8d\x03RZ\xfd\x04B\x9d\x82\x85\xc3_\\'a\xf5#\xfa\x9a\xfd\x88f\xd77\xc8\xe2L4A\xf6\x89\xf5\xc6\xe7\xa3\xb7\xf9\xd2:\x06\x83\xf4.\x81\xa5\x17-\xa0_\x94_\x99\xcf\xd0\x1c\xd2\xfdE\\\x85\x92I\xf4\x02\x17!\xe3\x04\xcc&\xc5\x1a\xe9\xd3\xc0\xb9\x03\x9d1\xc0\x05$wu\x06J$\x9eqg\xa0\x7f \x10\x9dy\xa4\x92\xe0 4FW\x90i\x87\xbf\xc8B\x1c\xe1\x8c\xb5\x9dYR\xc1*\xa1\xa0/1^L\xc1_F\x01e\x81q\x06\xb8G\x8b&x/\xeb0c\x96\xb1D\x82\xbf8B\xbe\xb2\x08\xd9\n\"xK!\xf4\xf3\x8b \xe4*\x7f\x10.|0\xab\xe4\xc1\xecb\x07b\xbe\xb6\xaa\xc6[\xe6`v\x81\x034\xe7\x80\xa7\xb4\xc1\x92\xa2\x06\xa2\x80\x81=\x1b$\xd1\xe3\x9cB\x06\xfe\xa2\x05\x0b\xcb\x15\x90\n\x15\xd0\x8b\x12,(G\xb0\xa0\x10\x01B02\x96\x1b\xc8[h [\x89\x81xq\x81le\x05|\x05\x05\x96\x94\x12@\xcb\x06\xf43\x0b\x06L\xc5\x01\xd0\xb3fw\xb3\xb0H\xc0\xdc\xf2\x00\xdeR\x003\x8b\x00 \xe9\xff\xbd75-\xfc\xd8\xb9\xc2g\xa6\xf9\x9fR\xfac\x1b\xfcM\xbc\xefeI\xfde\x12\x7f\x0d\x9c\x9b\xce?C\"\xffe)\xfc\xadcf\xdf\xc6\x0b\xd3\xf6\x0f\x0b\xadC\\\x92\xa0?\x98}\xde\x93\x94?\x9a\x8e\xdf\xcdKMO\xc1\xef~\xfbWl\xae\xb3\x12\xeeS&\x1bK\xb2\xef\x9f[4\xb1~BJ};i\xb8/\x8d\xfe\xf2\x04\xfa\xf3S\xe7\x9b \x82\x17\xa6\xcb\x0f&\xca\xf7\xa7\xc8\x0f%\xc7GW\x8b\x9a\x10?\x96\n\xdfN\x82\xbf \xfd=!\xf1==\xe5}4\xd9=\x923\xde\xe9\x0ey'\x96\xd4~Y:{tP\xda/\x8b\x92\xd7\xdb\xc9\xea\x97\xa4\xa9G\xd2\xd2/JHo'\xa0\xcf\x99z\xde\x97t\xde\xce\xc4m'\x9a\xcf\x93b>[r\xf9\xbci\xe5i \xe5\xa3\xa9\xe4\x07\xedC,\x89\xfc\xf0Z0}\xbc\x93g\xdd\xed\x8d\x9a\x08<\x9c,\x9e\x98&\x9e\x90 \xde\x18r\xce\xa4\xf0\x8b\xd2\xc1\xbb\xe9\xdf\xf3%~\xcf\x97\xf2}\xfe\xeeF\xd3\xbc\xc7\x12\xbc+\xa2m'u\x97\xa2\x85\x9d\xce\xdd\xcf\xc2gL\xe1\x8e&o\xb7\xd3\xb6\x1b#\xc9\x91\xb0\x1d\x95\xa5\xec$\xed\x94\xf4\xec\xd1\xc4\xec\xf1\x94\xec\xc1d\xec\xc44\xecv\x02vt~\xc6*.O\xba>\xb9\x9c\xd8\xe9\xd6\xe3\xbd\x1b\xd8d\x03\x9a\xb4\xe8i\xc9\xd5G8\xdd4\xc4\xa9O| \xda\x1f\x86\xf2^\xff=\x9aJ\xbd\xa7+\xe1\xd1\xc4\xe9^\xc9\xde\x18j\x86d\xe9x\x9atZ\xf7\x8e\xfe`~Rt\xb0\xbc\xc7\x00M\x87\x8e&B\xa7\x8duN\xf2\xf3p\xdasZ\xbf3s\x9ac\xf9\xcb\xd1\xcc\xe5\xb4Q$e+\x9fL\x90\xb9\x0c\xe9\x06\xa2\xd8\xe0\xd5\x8a\xcc\xc8Gn\xdf,h&\xf2\xa9\xbf|\x06x\xcf\x84\xfa\xc4\\\xe3\xd3\x044p\xc1,\xe3X~q\xdb5`Ff\xf1\x04r\x15\xce#\x1e\xa6\x0f\x0br\x87\x0b\xad\xa9\x05\x8e\x965\x1c\x9d\x1b\x04\xc3.\xf0|\xd2\xde\xa3\x06\xd1\x89C\xd6\x8c\xe0\xbe\xd4\xd0\xfe,\xe0\x0b\x87\x9e\x9e\xf3\x1b\xc5l\xd5\xd2\xb2}G\xf3|g\x98\\rVo\xc0\xab1O\x04\x89\x94\xcf\xdb\x9b\xc9\xdb;\xa5\x84t\x1bs\x12t\xdb\xc9\xb8\x83i\xb8\x13y\xba%I\xb7\xc5\xaf\xdf\xe8\x13\x9d\xe24ta*\x98h\xfbK\xb8\xd6t\x0bSi\x13\xdck\xbc\xe9\xb3\xe5\xd0I\x0e\xd2\x0ef\x85\xdd\x99\x8c).L\x8d\xed\xbd\xc3\xc5o8\xfa\xe4L\x84\xbd<\x05\xb62H\x0f\x00'\xef\x8d\xa5i\xaf\xadT\xd7\x0b\x93\\O\xd2\xdb\x00oJo\xbd8\xb1\xf5\x90\x88w\x007\xa5\xb4\xbe\xc8\x97\xcc\xdaJc\x9d3\x81u$u\xf5\xe0T\xc6\x07\xbf).v\xe5\xe8V\xf6\xfc\xf7/\xce~\x96\n\x9e\x9f\x9a+y\xaa\x1c\xee\xc2\xe5*\x0e\xdd\xd5\xb6\xac\xf7\xec\xb3}T\xcb\xbagW\xac\x0d\x92\x99Ju\x04\xf8\xe1e7\xac\xee\xe7\x11\x01r\x94\x84x\xdd\xf8%pC\x15}\xdf\x96\x17'\xa4\xc2\x0c64\xd9\x82\x89\xfd=\x95^\xc2u^\x9cL\xdd\xaa\x05\x99\x85@\x8d\xfd\xc5l\xc6s\xb5.\xba\x048.\x16|j\x8b\xe3\x91\x930\xe1\xee\xd0\x0f\xb9\xbf9Q\x12CB\x00\x16vR|\xd9\xe4\x00;(\xeb\xaeg\xc5^\xe4\xca.> O\x80\xce\x94&\xb5\x11[\x89\xc8\xdf \x18\xaf8j\x8d\xa3e5\xc8\x1f\x94k\xa61`\x95\xc7}\xda}\x03\xa0r\xc6\xfb\xc8n\x9fH3\xc1\xb1(\xdbN\xear9\xad\xa2\x8d\xda?f14=\xaf\xea\xa1\xc7O|\xc8\xecP\xf6\x82\xfa\x9c\x84>\xbek\x0cf\x8a}f\xbb\xd3\xc4\xaf\xe1\xfbk\x12\x04\xedr\xea\xfa\xf6\xb4\x13*\x8eaD\xc3E(\xc8\x00\xe7\xf3?\x8bo\x95\xbax:\xeba\xfa\xa3\x16\x97Lz\x10\xc7P\x03\x81-tw\xde\xc0\x17|\x19*k\x05\x18b\xbb\xee]\x89\x1f\x8a\xff\x9f\xbd\xb7\xed\x8e\x1b\xb7\xd2E\xbf\xf7\xaf\xd8\xd7\xf7\xae\xb1\x9d\x91\xcb\xb1\xd3\x9dY\xd1\xbd\x9d5\xb2$\xbb5\xed\x17]IN'kVV\x19b\xa1J\x8c\xab\x086\x01JU\x99\x93\xff~\x16\xdeH\x90\x04\x08\x90\x84<9\xe7\x10_\xba]\"7\x80M`\x03\xd8\xcf\xb37\xe8E\xb6&\xc1z\xd8 \xba|@\x19\xebz\xb8\x1d;\xbd\xb2\xc7\x9b\xf1\x0e\xd1_\x84,\xbd}\xd5\xa7\x842K\x99\xa0e<\x90\xe2+<(F\x9b\\m\xd9^\xf0Cp\xc1kX\x18\xcd\xe2\xe7\xda8\x8d\xfaL\xeb&\xd5\x8b\xed\x86\x9f>\x12&\x19\x9a \xc9\x141\xd0&\x80\xab\xb4>\xfe\xec\xeb9 \x84(\xe6e\xefw\xb9\x12;\xa3\xe0\xcf\xb2B\x0c\x05\xf6\xbd\xc1dr[\xdb3\xc4\x90 @f\x07!\x1d\n\xcc\xca\"\xd3X\x83\x86g\x84\xc7([mqaLt\xb8`\xf0\xe1\xf3\xf5\x8d!\xaeI\xde\xda\xe2l\xc3\xee /\xf0:\xddKJ\xb6\x88m\x11\xa1\xa38G\xf2\xf8\xc8k\x95\x95\xc9m\x06n\xcdr0\xad\x0bm0\x06\xcep^\xe0\x84\xef`\x14\xa1Y\x82\x9b\x82\xd9\x9cn\xb7\x90\x93\\np\x8e\xe0\xb6d\xa2!\xb8\x10\xfb\x0b\x1d\x89j\x08S\x93\xea\xbbFw\x12$\xb8\xb4\x0c\xd0\x96\x92&N\xfa\x81n\x9aW\x16|\xbez\xaf\x07\xaao\x17\xd2\xfa$\xdc\x186\xd3\x84\x90\x0d\xa4\x99\xfc\x96|<\xf9?\x86\x12\xd3\xbe\xb77\xc8\xc7\x1f\xe6c\xae\x14n\x14\xbd\xe1\x9f\xed\xa2C\xda\xaf[?\">:\x9fw\x12\x0d;\xc9\x0eM@\xab\x87\x8f\xd7h\x85\xc4\x0d\x8d\xa2\x01\xfb\xb2\xf8\xe0}Wc\"\xd2O&\x13O\x9c\x83\xebf?\xf8\x86\xa8 \xe1\x14\x8a\x88\xc9W\xf1[\x01 IYz\xd0\xee\xef\x10\xbd\x1b\x82\xd0rA\x06\xb4\xc4\xcd\xf4\xdd\xa2\xd2\xd9\n\xd3\x1cy\xb3\xee\xa96\xf1\xf5C<^E5\x9c\x92\x156d\xb5\xc5\x84\xd0\xde\xba\xf6A\xe2\xd2\\\x9eng\x00{\xc0fd\xc4\xa7=\xd2\x07\x0c\xf5h\x81\x1e\x96\x03A\xee\xc6\xdc\xe1\xfa$%\xcb\xcb\nM1\xb0\xc4\xa7\x14\xb6d\xb3\xc1\x05<\xe3cK\n}\xbe\x10\xde\xbb[s\xcad${\xb1\xc2\x0c\x17\xbb4K)K\x13\x03\x7f\x7fdsc!)\x9ar\xda\xdfL\x16w\xee\xd6\x86.MA\x16\xeb\xd5\xc6\xf8\xcd\xc7\xbf\x0d\x9c\xce,\x0c\x00\xe3/nT\xdc\xcd\x060_\xb7uB\x16GWd\xe9\xed\x90,\xfd\xdd\x92\xc5\xc9\x15\x90\xc5\xd3CYzx\x03\xb2\x04H\xf1\xf9Lu\x19\xbb\x08\xf57\xdeE\x97\x94\xc5\xb7\n4\x8b\xbf'\xa3W\xb0\xde1fk\xff\xe4\x05\xce,\xbe\x8e\x8d\xa7\x0etuh\xb0.;\x7f\xec\x10\x07\xc0\xd3\xb8\xa9D\xcc\x860\xbd\xc5WtL_\xed\xa1\xa6\x9fO\x91\xd5 \xab\x9fV\x14G\x08Z\x91N\xac\xec\x14]\xa3\xbb\x9e\xc1\xec\xc8\x9e\x95\xfa\xa4A<,\xf0\xaf%\xa6LC`\xf5\x86c$\x032\xb8bMt\x141\x05\xddjY\x87\x8b\x1f\x14\xfb\xc8\xe6|\xa9\xd3\x89$s\xbe\xd4 \xe4\x919_\xea0\xc2\xc8D\xbaHd\xb2\xc8\x04\xaaHl\xa2H4\x9aH\\\x92H4\x8a\x88\x9f \x12\x8d\x1e2\xe7Km\x94i\x14\x909_\xeaw\xfe\xba#\x13<\xe6|\xa9\xd3\x88\x1c!)D\xe7|\xa9F\x99\xf3\xa5\xea2\xe7K5\xfe=\x81\x92\x11@\xc8\x08\xa7cx\xc9\x18s\xbe\xd4\xc8\xd4\x8b\xa8\xc4\x8b\x98\xb4\x8b9_\xea\x9c/\xb5!%\x8cZ\x11@\xac\x98\xf3\xa5\x8e\xa7S\x8c\xff\xba^*\x85\x8fH\xa1\x8d6Kw\x982\xb4\xcb\x878h\x9b~\xe3\xb4vm\xe5\x05\xbeOII%\xb8\xbb\x80\xb7\xfcd.\x10^\n\x7f\x84WG\x90\xb2\xa7R\xed\x0f\xe2W1DVi#\xfc\xb1\xce\xc2\x02\xca\x99V\xb5\xb1y\xe3\x14\xdc\x13Vm\xb2U\x8d\xef\x11e\xa7d\xb7K\x99Yy\xc3\xc0\xc1\xab\xa3\x86\x95\xe5-\xe2\x9bl\x9aRQ\x93^}\xe6\x90\xdd9dw\x0e\xd9}\x8c\x90\xdd\n\xd6Rl\x17)\xa0\x8a\xce\x95\xdb\xb8\x04S*M\xb9\x05\xf7\x00\xe5\xf7:j\x99\x8a\xaa5\x90f\xc9\xb6\\\xf1\x0d\x18\xa1\xd8%Z\xd5\xaf\x8c7m\xa1\xaf\xe2U\xb3\x02-ED\xfd\x0b/H\xc6\xb0HWU`D\xe1=\xd9\xb4\xc8f\xb2-G\x1d'\x98\xf1-\xf5-\x80G\x95t\xb1wl6\xd4ld@\xa2\xb8\xd7\x8bW\xaf\x8e\xf8\xff|\xbf\xf8A\xfc\xf7\x07\xf1\x86\xfd\xbb\xd4\xfc\x1f\x1f\xdc\xa8\xef/\x04\xb6\x97\xd9!\xf8Hj_\xf5zS{\xdb\x19\xdaP\x03\xba\x95\x9b_\xbdw\x16\x99\x14\xa8\\vWX\\\x0dh\xd0\x94\x92\xe2\x903\xb2\x10\x99'hZ_\x88xJv9J\xd8\x9b\x94\x9dpc'\x8dB\xc7\x98u\x0d\x18\xde\xb3\x02-oSF\x97\xe2\x82\xd8\x0eN\x17\xc2\xe5\xc1\xdb\x86-\xb5Z\xad\x8e\x03\xceN\xb5i\xf5Cf\xfah\xbb\x05\xe5\xfd\xb5\x82\x91\x84\x85k\x96\x9b\x8b\xdb\x94IC_+<\x159\xca\xa4o\x94\x00\xcehY\xe0\n`\xa9\xee]\x14_\x8c\xa1\xaf\x98\n\x04Cf$4\x93\xcb)y\xb2By2\x11\x1b\x0d)\xc1\xc8\xdd\xaak\xcc\x08\xaf\xa1\xc0h\x05\x14\xad\xb5[X\xfe\xce\xf5)2\x96\x89\xdc\xa6$SNh(\xa5\x83\xad\xfa\xd0l\xbf\xa0\xe9&3/\xbd\xbcN7\xd9\x87\x8an\xd5\xd1\xb2\x99\xca\xfc\x05\\_\xbc\xfb\xb8\xfc\xf0\xe9\xec\xdc\x929\xdc\xfc\xeb\xd9\xc5\xd5\xf9\xe9\x8d\xe5\x0f7\xe7\x7f\xbe\xf9|\xf2\xde\xf9\xca\xf2\xe4\xf3\x9f-\x7f|\x7f\xfe\xee\xe4\xf4/\xcb\x93\x0f\x17\x1f?-\xc5\xce\xb5\xfb\xcc\xf9\xc5\xe5\xf2\xd5\x1f^\xa9a\xa0\x92\x9d\xbb\x1b\xec\xe0\x10*m\xd4;_\xb9F \x9d\xc1\x8e\xffE\xba\x94\x19\x05\xbe\xad\xae\x12/oJTp\xfb\x84k&\xeb\x8d\xbc\x1a\xb5\xdc\x19\xe0aB2\x9a\xca{\x8d\x11?\xba\xa5\x94\x15\x071\xf4\xb6[\x90;u^\x99\xa8\xa9\xce\x14(F\xd6\xa9\xf8\x84\x80\x13B\x0f\x94\xe1\xdd\x02N\xf2\x9c*\x97=SH\x9e\x1c\x94\xdaUZ \xd5\x83\xad\x12\xad^\x96\x84\x0b\xd1\xb8m\xfa\x15\x9b\xef\xaa\x8d\xba\xf1\x8eA\xd4\xe4c\xb4,\x90\xca=Kr\x9cq-\xedx}\x97W\x806\xdc$3\x05\x92\xa4[!\x17\xadx\x973\xfc\x00 \xaa\x12\xce\x88]\x7fJk\xb5\x0bu)\xef\xb12\xc5iQ\xb7\x01(Q\x0e\xe6t\xbd\xc6\"\xd1\x9f\x14\x84xo\x04(\x85\xa4\x8e)\xe3\xe3_\xa1?\xa0\xf2G\n\xf1\xf5\xea\xeb\x18\xcf\x8eQS\xb9\xdf\xd5\x9d\xb3\xf5\xd7\xaa\x86\x06\x9f\x91\xea\x8c\xa4\xea(\xf0\xdf\xc4WY\xd8\xea\x94C\xfe\xb8\xf3\x8bYSk\xec\x89\xd3\x948\xfbs\x95\x9d\x91DY\x01%\xfe\x1e\x17\xd2\xee\xcb\x1bp5aG.\xa1\x92\xf6\xdci\x85\x9a\x92\xc7\xdd\x9f\xe4\x06Mf\x97l\xb6C\x8e\x1b\xdeSQ\xe3\xc1L\x83\xd6\xca%\xcf\xf0\x9e\x95h\xdbqJ\xf0#_\xae\x0f\x18\n\xfak>\xa3\xe4\x89\xb6\xb7UT}D\xdb\x8a\xfc\xc3o\xdd\xda\xe6\x06\xa6\xabq\xfek\x88\xd6\x0d+qF\x92\xb3\xb4\xc0 ;)\xf7\x12N\xcbs\xa2\x16\x85\xb6\xf8#9\xfa\xeaa\xbc\"X\x18\xeej\x94\xfcZ\xa6J\xc7|\x1b\xaak\x17\xa9:% \xa6\xfe\xf4\x14\xbe\xc8\xff[\xf2]\xe9\x97^5T\x19l\xfbM\xe9q\xdf\x1f\xe5\x10\xb8E\xc9\xd7\x07T\xach\x0b\x9c\xb5k\xe7d\x97fDn5\x8c \x01\x05\xde\x91{I\xf8\x97n:>\xac\xac#RY\xf2\xe3\xeeO\xc67\x12`R\xa5P\xbe\xee\x9d_\\\x82xFk\xcf\xb4\x9bZOg?/\xe0\n\xaf\x8fA`\x8a\xc7/_\xe24\xa7\x0b\x91\x07\x16\x97\xbb\x05)6/\xcf/.\xaf\xf9\xcf/\xf8j\xa2\xde;\xd5\xa8\xee\x91\xa5Q)U\xa6\\\xdau\xae\xb1\xa6A\xbbGE\x8a2\xa6\xdd\x06\xb7e\x05\xe6V{\x90:\xe1\xe9\xf5\xd9\xcf\x86\x07u\x017|K \xa6\xd2\xf9\xc5%o\xd3\x11\x1cH)\x80\xf1\xda\x8a\xe6\x88\x1a\xbe\x9d/7\xfbS\x92\xad\xd3\xcd\x179S\x85\xe3\xc7\xb2\xe1Q\xef\x7f\xd1\xad\xfdIFj|\xd1\xea\xe4\xb5I\x0e\x0co\x14?\x93\xacp\x92\xae\x84=\x97nV\xb5Z(A\xea\x95\xf6'\xee\x1b\xa3?,^7\xb6'U\xd2\xc2\x92\xdd\x0d\xca\xd5gL\x8b\xa1^\x84\xff\xa7\xe0\x03\xe2\xe9\xff\xfd\xd2\xa0\x87\xbc\xec6\xe9Z\xd4\xc0\x1b\xf5\xb4z\xd9}\xf82\xdb\xd3H\x0en\x9a\x96\xfa2\x10e\x02Vz\xa2\x0b\xb5\x1b\xe2T\xe6\\\xe3\x17>\xb7d\x1e9\xb2\x16\x9be\xb1Y\x11\x0c\x93\x1db\xc9\x9dU\xac^ \xde\x90\xd5\xe1)m\xfa\xd2\xd5\x81G|o\xe1\xaf\xd4Ru\x80M^\xa4;\x81\x15\x0bY\xd5\xd9\x82d\xb8\xc3\x06\xca\xd1\x81\xb6\xfdJk\\M\xf756|\x13n\x1d\xbe\xc5U\x0e\xf25\x96\xcb\xeb\x06Q\xd8\xa6\xbb\x94U\x9a3\xcf\xabF\xdbU#\x1bI\xa3[\xdc$_\x7fD/\xaa\xa6K\xd9\x18\xab\xbc\xc1\x86\x9c:\x83\xb0)\xbd\x91\xc58!2\xfb5\xbeG\xdbR\xe6a\x16\xeb\x1eY\xc9H\x98\x15\x11\xb4V}\xc5\x89!F.\xe9\xd2Ua\x8a\xd7xz=\\R\xaaS\x1ac\xca\xd2\x9d\xf0\x9d\xdc\xa7|-\xdb\xa9d\xd1\x8b\xd6\xbc\x08b/\xca\x13\x8b\x8d\x11\xd1\xf5\x80Y\xfd_=\xde\xaf>\xdf\xd7\ngdg\xf3C\xf5\xfa\xafl\xad\xf5\xbe\xe6\xf3\\\x9d\x9243\x8e\xeb\xe2V\xa3:\xc7uFvi&M*\xff\x94(S\x8d\xb0%:\xf9\xf8\xe9\xe6\\\x86\xd1\xa8\x83`\x95\xaa\x11ep\x91\xe9\x0bK*Km:\xcd;\xc2$\xfc\xd5\xad\xa4\x1aF\xb4\x9e\xff\xb7\x07\xd8\x90\x0d\x11G\xcc&\xe0\xa7\xe2qT{:\x89@e\xd6mE\xc0B\xa9Z\xdf\xd6\xd8\x1c\xa3\x1bD\x97bR\x0e\xe4\xcd\x94\xdd\x08\x10[\xeax0\xabhgO\xdd u\x8cQc_\x1c\xcc\xf9\x02T\x9b\x85\xee\xa0S\x9e\x9e\xb6\xean\x05\x13M\xdc\xb1SV\x9c`\xc1\xab\x03\x92$ea\xda\x92\x1c\x1d\xc6\xdd\xbe\xd4\xe9\x9a\xb8\xf0\x85b&\x13\xaa\xb7\xac\x97\x8e\x9aL\xf9\x06\x80\x9b\xbc\x1c\x1d\xb4\xf5X\xf3\xd3&\\\xac[\xf2*Qu\x1a\x18\x94\x88\xfb\n\xe4\xea\x90\xa3C\xfdz[\x05\xc2\xce\xf3\xae\xc9g\x05K\x89\xedu{\x9eI\x1bY\xaa\xb3\x96\xf8u\xa5\xcfyb \xb7\x95\xad\xd7\xf1\xe7\x9d\x9a(f\xca\x0eVo\x8bm\xf1o2\xc2~\xa3\xf8w\xd2\x1e\xf3E.\x95\xb7\x00\xe8\xf1\xdc\x96\xa5W7\xcb\x9a`\x8eSqD\x0f\xfdj\xae\xa1\x98\xaek\x15\xf3\xf5@\xaa\xeb\x19N\xab\xab\xeb\x1a\xdf\xb0\xbe\xb3\xa7t\xf0\xb0\xa5\x00\xa1\x82\xe7\x9a\xfb\xaeC1D\x0d\xa2\xdd\xd5m6\xed/F\xc4\x17\xe5_\xd3\x8c\xd6h\xb4\xee\xa9\xf4V\xdc\xa2-\xca\x12\xcc\xc7L\xd7\xa1\x8ern\x8d\x8b\x141lT\xaaO*\x80\xf7\xe2\x02\x07\xd9\x99\xe4\x0eq\x8bH\xba\xc1%\xfcQ\xedB\xa8\xa4Pu\x00\x12G\x815J\xb7\xea%\x96\xe6!\xdb\x80\x9b4\xd7\xb3\xbe\xba|\x8a\xa5\xb9\xc1\x844]\xe7B\x11\xc2R\xa5\xdc \x8b\xe3\x93!L\xd8\xeb\xa6in\xe6\xccM7\x19\xe1\x163]\x9b]MW\xd9S\xa67\xe2,\xcd\xe9\x11\xa4\x0b\xbc\xd0\x7f@\xab\xa6+\xbb\xb1\xcf\xf8r\x93\xe6g8!\x05b\xa4\xf8\xc2\x9b\x952\n9\xa1L\x85F\x078\x99\xab\xb3\xdc\xbct7\xca\xbct\xbb\x97na S3\xe9\"K\xf3|\xa8\xfd\x93\xefT\xd2W\xab\x02\xd3\n\x19\xd6\x0b\x8bZ\x95*\xfb\xabj\xb5;Y\xf5\x9a\xd0\xa2\x89\xea-\xbe\xb2\x9b\xf2|T\x05\xa4i\x87\xbb8\xf3\xeb\x88\x80\x96\x9d\xef\x9e\xd9\xde\x14\x04\xad\x12DY\xb0\x8b\xfb\xcd\xd5\xa7\x93\xb3\xd3\x93\xeb\x1b\xb7\x9f\xbb\xf5\xc8\x9b\xf7\x9fN\x7fv\xfd\xf1\xfa/\x1fO]\x7f;\xa9\xfeX_\xce\xd9_\xbb]\x9f\x8dN\xb6\\$\xb7\xfao\xb5\x9f\x84\xff|\xb3\xbf\xc6\xc5}\x9a\xe0ZCpu\xa9[*G\xa7\xe9(u\xb7\xeb\x18\xfe\x8e\x0b\xa2\xb0[\xc1\xcd\xe0\xf5\xe85\xdb)A(\xed\x18\xce\xce/\xaf\xceOOn\xb8\x9c\x92b\x9b\xf6\xf4\xa2\xa6\xbd'6A\xda\x9d\xa2V\x9e\xeaR\x18\xe1\xb7\x10G\xde\xfb\xdf.\xbe\xff\xb7\xc5\x1eH&\x1cY\x0bg\xc3x\x95\x9d\xef \xdaaX\x91}\xadW\xc3K\xa8#K\x93\xad\xc0\x8e\x1ePZ\xdd\xf6\xc3\x15\x83@\xe1\xbfF\x86\xfc*s:\xc9\xb6\x07w\xa3N\xac\xad:\x19\xd3,U\x87LpO!\xdd F\x08\xc3\xb2\xfa\x9e\x19t\xb3\xbf\x92[\x93`\x97\x0c\xdb/\x85\xfby(\x88\x07\xed\x91\xae\x05i#T\xa0\x07\xdb\x16og\xc9\x1a\xd0\xaa\xcbr3\xafo\xbe[\x1f3\xe7\xbc\xf5\x01c\xde[\xff~\xd2x t\xfeC\xef\x8a\x17\xc7\x0e\x18\x02\xb9E0\xfe\xd96\x0b\x10\xc54X\xa5\x8c7\x0f\x10\xddDX\x1b\xf88f\x02\x06\x9b\nk\xe3\xe2\x9b\x0bp\x9b\x0c\xef\xaaT\x19\x8ej\xfa\xaa\x7f\xf2\x19Z\x8d\xc4\xce8\xac^S\xf2\xae.O\xab\x11\xe85T\x03S\xac\xb0}\x95\xc0\xa8m@\x826\xda\xed\x14-\x10\xe2\xfdp:?\x1c\xe9Z\xc4\x13\xad\x94-\x10\xecv\xe8K\xdd\x02\xf6\xf4-\xbd\xc2C\xd2\xb8@'\x95K-\xd2\x96\x1a\xc4\xad\x99FW\xaci]\xc4S\x8d\xd4.\x10\xac\x9b\xbe\x14/`K\xf3\x12.\xfa\x7f\xb4\x8f$\xa1q\xff\xfd)_\xa0/\x01\x00tR\xbf\xc07:\xf89\xd3\xc1@\xefw\x97\xc5\xfd\xf5\xc1\x9e\x1a\x06|'J{\x8a\x18\xe8Q\x86,=\xf9Uz\x14#\x8b?\xb7\x8a\x10\xe1\xf8\x9b\xa7C\xb2\xf8\xd2\xc7\x80\xb7\x83\xb2\xf4\xa6\x91\x81\x90\xce\xca\xe2\xef\xb2,\x9e\x942\x10\xd6{Y\xbc\xa9e \\\x9a\xcf\x87`\x961ifz\x056\xf3\xa0\xf5>*;\x12\x96\x93E\x96\xb0\x9e\xc5L;\x03\xde\xd430>\xfd\x8cC\x9aS\x01!\xdd\x8f\x98\x9c\x86\x97\xde\x045\xe0JR\x03\x01\x8d\x8d\x9a\xac\x06\\ k\xc0\xdb\x92\xd0\x05\x8c\xb9\x12\xd7\x80o\xedj&\xb0\x81\xe0\xb5vl\"\x1bp$\xb3\xe9\xad9p\xaf20\xb1\x0dX\x93\xdb@\xf4\x86x\x12\xdd\x88\n\xf7\xb6\x06X\x16\x03\xb7\xf9g\x8e\xdb\x94<\x96\xd97\x13\xa2&\xc1\x01\xcf\xadJ1\x93\xe1@\xcc\x848\xd0\x7f\xb7\xd2\xa4\xc48\x1019\x0ex\x13\xe4\xc0\xd8$90%Q\x8eMc\x87\\\xbb\x9c\xed\xf7,MH\x98c\x91U1\xe7\xc0z\xd7\xd2\xb4\xc49\x16q\x82\x88\xce\xac\xf7-\xc5N\xa0\x03\xd3\x93\xe8@\xfcD:0-\x99\x0eLK\xa8c\x9f\xa2\xd6FFK\xb3\x03\xd1S\xed@\xcct;\x10\x94r\x07b\xa6\xdd\x81\xde{\x99\xa6\xa5\xdf\xb1\xcdq\xeb\xddL\xd2\xd4\x8cN\xca\xe3\x90\xe7\xbc\x9firr\x1e\x98\x9c\xa0\xc7\"\xd0vK\xd3\xe8\xb4=\xe0>\x13\xf6\xee5znk\n\xd9\x88\x8cL\xe5c\xb3\xbf\xce;\x9b|\xed\x98\x96\xd6\xa7%L$\xf9\xb1\xde\xdc\x14%\xbd\x0f\xc4N\xf1\x03\x964?0=\xd5OK\x1a\xb3\xdc\xe14-\xf9\x0f\xf8r\xe2@\xdfMN\x01\x89\x80\xc0u\xb9\xca\x80\x84@n\x19\x9d\xcc \x93\x92\x03\xc1\x00e\xf8\x92\x04\x81\xb7\xdf\xdedA0,a\x10\xd8/\xd4\xe9\xb9\xe3)F\xf2 \x98\x94@\x08\xac\xd7\x8bLL$\x04\xbedB\xe0\xb9\xef\xc9w\xe3S\xcf\x97\x0dM.\x04\x01 \x86\xc0z\xf3\xd3\xa4DC\x10\x96l\x08\x06%\x1c\x82\x90\xa4C\xe0\xd4\x9au\xd0\xba\x9e\xf5%!\x82\xc9\x89\x88\xa0\xaf\xa1\xad_\xa3&%\x82\x89\x89\x89Z\xa2l7DENU\x04\x91\xd3\x15A\xef=Q\xb6\x9b\xa2lwE\xc5J_\x041S\x18A\xf44F\x10\x9c\xca\x08B\xd2\x19AxJ#\x08Lk\x04\xf6\xbb\xa3\xec\xb7 \x85'\xc1\xf1\xdd\x1f\x15\x9c\xe6\x08\xc2R\x1d\x81\xad\x1b1S\x1e\xc1\xd4\xb4G-Y\x96{\xa5b&B\x82\xa8\xc9\x90`\xf2x\xf0&E\x82\x80\xc4H\xd0Z\x87, \x92 \x18\x00\xe8b\x15\x93\x92%uL\xf8*EY+a\x12\xc0\xd4\xa4I-a\xb2I\xdd\xc4I\xd0\x97< \x1c`7\xfb\x06\x98?s\xc0\xd9\xbd\xc7\xee~\x08\xdb\xd5lY\x1e\x17\x9d\xef\x05\xa9{\xfb$\x8b\x07\x98\x0e\x90\xd0\x93\x80 * \xae$L\xe0\x9d\x13\xba\x8cO\xc6\xe4\x10\x88\xb2nB&\x08h\xce\xd8\xc4L\x1dA\x06\xe8\xd7I\xce\x04\x13\x124\xc1\xf4$M\xe0\xd5C\xd4dM`K\xd8\x04\x10!iSK\x9e\xdc\x02\x93\xee\x86:Z\xf2&\x88\x9a\xc0 \x06&q\x82\xfe\xc0\xa4I\xc9\x9c\x0cAUZ'3\xa1\x13/c\x92:\x05\x112U\xb3+F\xa6\xfa73(\x99\xea5\x0b1\xb3\x97\x87\xf9\x16\x87\xf3.\xdb!?6\xc3?5\xe9\x9f5\x18\xc9i\x86\xedAH\x8e\xc7\xfb\x98~\xa3\x03\x8fL!Sb\x8et\x8c\x91)/<\xbchbT\xb0%\"\xd8\xaaCG$\xb0-\xf42R\x04\xb0=\xfa74\xf2\xb7\x15\xf5k\xed\x93\xdb^L\x8e\xf4\x15\x81\xa7\xe6T\x18\x11\xe5\xcb\"F\xf8\xda\xa3{'E\xf6\xeaX^C^OTo'\xa2\xd7\xfaEl\xc3)j\x14\xef\xf8\x08\xde\xd1\xd1\xbbf\xbc\xae\xa9\xabQ\x91\xbb\x03\xa2v\xed\xa3[d\xea\x90\xdb \xbb\xa9\xd0\x01\xb9\xa2\xa3z\x01S3\xf8\xbb\xdah(\x93\"\xa6\xb0\x8a\xcf\xe8\xe4\xf7\x10\xe7M\x10\x9e,a\x07\xf1z\x8d\x13\x96V\xa8\xda\x93\x0d\xa2y\x91&\xf8I\xb5\xfd\x91f\xb2\x1a\xef\xf26\x0d\xb2\xc3\xb0KwiV\xeeT\xb5\x9ajR\xd3Evx\x97\x13\xb2\xb5\xaft\xef0\x13[\xc8_Rvw\xb3\xa7#\xa2\x0e\x1e)S\xcd\xcd\xde\x91\xa1\x86\xed\xe5n\xa2\xa5\xd7\xd6\x01U\xbd+\xfe\xb1L;\xc9\x1b\xc3\"\"\xc2\xc3\x14\x1c\x10l\x8e\n\xb6\xa4\x98-\xef0Z\xd9\x83V\x87\x91\xd1\x08CN&\x9a\x8b\x95\xde\xc7I\xefv\x11|\x07<'\xda\xac,\xd4%*\x18\xc5\xec'\xd1\xe3\xefZ\x7f\x14c\xed\xe2\xcc\xfc:\xe3>M\x1c}*\xaa\x87E\x03\xb2\xb9\xb7\x88\xa6\x89\x8ac\xe1'3\x87\xa6FeEnu\xde,\xde\x03vO\xf2\x11YP\x9e?\x8eh\xdfA\x98o\x1a3\x8a3ZRHP.\xf7iL\x92\xcb\xd4\xcfE\xb9UI\xa3\x1a\xc7@\xa1\x0f\x8b\x85-\x16\xcb\xf3J\xff\x7f\xd7nvL1oVs\x9b\xa3\x06\xeb\x19\xdfk5<\xe2\x14\xcbH\x90\xe69M\xc8Z5vv\x868=\xa5&\x0f\x1d\xbb \x986~\x9c\xfb\x02\xdf\xae`U\xca\x1d%^\xde\x13\x86\x97\xee\xc6\xc9\xe2\xdd\x85\xf8k\xe4E\xd4\x85\xdc\x7f\x0f\xaa\x08\x02+\x03-\xae\xf7 \xefL4K;\xd9\x89\xbd\xc8\xcc\xcb\xe7g\xcb\x0f\xd7\xef\x967\x7f\xb9<_~\xfe\xf8\xf3\xc7O\xbf|\x1c\xf1\xe6\xe5\xd5\xf9\x9f>\xdd\x9c\x8f{\xf3\xf4\xd3\x87\x0f\x177\xa3\xde\xfdt\xf9\xe9\xba\xbaU\xc0U\x1a\x97\x02\x0c\xef\xaf\xdf\x8c5\x8bH\x17\xbc\xfa@77\x8a\x9a\"co\xf8\x94V^U\x832\xe8\x0e\xa6\xadK\xb5\x9cY\x8dQ\xab8\xbf\xcd1\xfc\x89\xb0\x0e\x8e\x17(A\xea\xf9\x18.\xc5\xe2\x89\xb6\xfdb\\'\xb1f\x190\xa0Cv\xf5\xb2\x14\xa4\xcc,\x07\xabf ;J\xc8bT\xfd\xbb\xd7\xbd\xcf\xba\x8fu\xcd\x12h;`\x80\xfd\x00\xef\xa9\xa6.\x03\xd4\x0e\xbe\x15\xbe]\x82\x8e\x8a\xcd2@\x1b0P#\xbcx\x0e\x95\xcd2d\\\xe8\x12>4u \xfdP0\xfcc\xc1\xd0\x0f\x16xP\xb5\xbeb?\xb6\xb6\x1f\xb5\xb2\xba,\x0f\x86w\xd4\xe7ci\x96\xea$\xe7\xde\xef7\xcb\x88\x96xU]7\xc2\xc3\xf1\x91e\xc88\x0c\xb7O\x15\x06\x1cV}\\\x0d\x0c_F\xf9jU\xb7Y\x83B\x95&U\x9a\xd6\xfe\x1c\x1b\xa0lR\x9a\xa49\x92\xf8\x8eq8\xd4t\x07\xaf\x08\x83\x06\xd5\x00J\xec\x05\xef\x19\xce\xec\x1e\xf2f\xf9'\xd2s\xd5\xe6\x06\xa1\x9e5s<,\xe0S\xb6\xf5+\\\xf2\x1f\xa5\xab\x1aK\x07\x96_\xc55k\xa7\xef\xa9\xaa\x99\xcb\xff\x15\x07s\xad\xe4\xdea\xed\x15\xc6\x87}{X\xfb5\xdc\x19\xf7\x96a\xed\x15\xc2\x07\x80\xed\x03\x07}\xbf!J\x13\nk\xdc\xc5\x95\x17\x98\x9f\xcb\xa0Q\xad\xf8e]X\x12\xed\x9a\xa5\xf6\xe6\xf1V\xf7\xf7\xd2\xd8l\xbb\x1e\x11\xc7\xc3\xdb\xf9x\x18\xfe\xe6|<\xac\xcb|<\x9c\x8f\x87}%\xd0v\xc0\x00\xfb\x01\x03N\x1d\x03\xd4\x0e\xc3\xd6\xcc\xf9x\x18\xf4N\xe8\x87\x82\xe1\x1f\x0b\x86~\xb0\xf9x\xd8)#Z\xe2U\xf5|<\x1c\xbe\x8c\xce\xc7C\xa3<\xb6\x9e\xe7\xe3\xe17U\xf2|<\xf4)\xed\x9f\xf9x(\xf6\x14\xcb{\xc2\xd2l\xb3\xcc\xc9C\xffF'p\x00\x86\xed#\xea\x85\xe4\xdb\xd6\x1b\xb4\x8e\x0f\xac\xd1\xb7~\x87\x0e\x973\x0d!\xf31s\xae\x00\xe4\x1ap\xd7\x90\xb2deT\nt\x8a\xd3\x81\x11\x0f\x84\xcbXo\xd3D\x84<\x88p_\xfb\x98\xd8\xf2\xd3\xceRf\xd5_\x8a`\xc6\xaf\xdf\n\xc86Z\xb8\xec\xa1\xce\xca\x12P'\x04\xd6\x0b\x95\xa2\x02\xb7\xfa\x81u\xc3\x80\xfa\xc1\xc1x\xb6\x97\x01\x0d\x80\x81\x8d\x80>\xce\xb4\xbd\x842\xa9\xede`_`D\x7f\xa0\x9f\x8bm/\x81\x06\xa0]\xb4Ap\xf2\xb6\xed\xc5\xc9\xe6\xb6\x97o\xd9\xb8P\xd3\xd5.a,\xf1`qv6y\xa8\xdbI\x17\x0f\xc7\xdc^B\x99\xe7\xc1\x02m\x0cu?\x1f\xdd^BY\xea\xf6\xe2\xe6\xae\xdb\xcb\xe0\x81\x17\xe6>\xd3e\xb0\xf8\xd05\xdf,v\xa6\xbc\xbdLh\x90oK\xd0,\x1e\xae\xbd\xbd|#\xdb9\xc4\xc9\x03\xe3\x94\x06\xc3\x8e,u\x19\xe1\xa5\xd3e\x84\xf6`\xa4\x06\x01\x06z\xeft\x19\xe2=i\x97\xe13C\x97\xa1\x1f\x1c\xc6\x7ft\x18\xfb\xe1Gy\xfbt\x19\xe0\xf5\xd3\xc5\x1f\xe1`/#\xf42B\x1f\xe11\x12\xf6\xd2\x139a/\xdf\xa2[\xde\xb8\x06{\xf9\x16M\xb3Gk\xf7\x97\xd0@\x8f`\x81\xaex\xban \x0b\x13\xb1\x97o\xa1N_\xa0\x89\xbd|\x8b\x96\xb9CU\xec\xe5[\xb4) \xd8\xc5^\xbeE\xe3<\xe12\xf6\xf2-\x1a\x16\x16pc/\xfe0\x1c{y\xfc~\x8d9\x9d\x05\xc6\xfb\x04\xc9\xea\xc6\x04\xd9\x8b\\9C\xf46p[6t;\xf6Ox \xc2\xf9u\x19\xb3#\x0c\xc7\xd5t\x99O\"\x03\xe6\xa0,\xf3I\xc4Y\x86O ]\x86~p\x18\xff\xd1a\xec\x87\xff\xd6'\x91:=V\xa8f\xa4F\xfa\xafYl\x16\xef\xa5\x8b\xcd2j\x00\x8f\x1b\xbe\xda2-\xd7[d\xbdk\xd3]F\x0f\x8c0\x0eb\xb3\xbc\x00q\xa1\xf3\xf2\xe2l\xf9\xf6\xfd\xc9\xbb@~^\xbb\xb4\xa5\x9c\xbc\xb9>\xff\xe8\xa7\x176K[H G\xb1Y\xdaB>^\xf8\xa8\x8a\xcdR_\x1e>Y-\xc3\x8f^\xb2\xc8I\xb6z\xbbE\x1bH\xb3\x95\xc0\xd9\xa8\xca\xba\xa4&\xe0 g\xb2,5\xfe\x9dJH\xd6\xf7B]\x06\xf3y\x9ae\xf4x\x1em\xe6\x02\x80\xd3n\x99\xdc\xcca\x9eTY\x829\x15\xcd2\xb9\xad\x83T:f\xf3.\x8b\xcc\xcc|\x9dn$'\x97\xef=4\x8e \xd8\x06:\x02{\x80\xc84\x03\xa4\xe4\xfa\xb7\xf3\xe3\xda.\xa5\xb73\xaa*H[\xe5\xa1\x0b?z<\x88\x1b\"wuBX\xa4\x83\xd1kOG\x7fO\xea\xf9G\xb1\xf7H0`\x8d\x1b\xb2\xb2\xd5m\xf5?;t%\x1f\xb0\x8a\x0f\xe8\x9d,C\xfa(\xcb`\x1b7j2\x8e\x98\x88yy\xbb\x0c\xb8\xf5\xb9.\x83\x95\x05\xa3\x14\xc6\x0b^\xbd\xfe\xe1\x87W\x7f\x18\xf2\xcaH\xc5\xc18\xe5\x81H\xa5\x99\xe4\xaf\x7f\xf8\xfd\xd7W\xff\xcc\xcd\x1c\xb3k\xb8,o\xb7i\xf23>4\x9c%_\xf1\x81\x1a\x17\xf8\x0d[\xf3K\x8ae\x82\xdd?U\x13?\xf0\xedP\x92V\xb3\x8cR\xf2\x98\x03[\xe5#\xcb\x8b\x94\x14)\x1b<\x9f\x1e\xb5\x8d\xbau!\x8d\x1a8\xbd\x87N\xec\x81vp\x84r\x06\xcf\x8f\x81\x16p\xa0\x82`\x84\x92`\x9c\xed\x1b\xa1,\x18\xa30\x18k\xf5\xbe]\x03\x87\xdb\xbb\xe8\xd6n\xac\xad\x1bc\xe9F(v\x98\x05\x81)6\xee\xd1[7\x8c\xc7[\xbd5\xacYaM\xe2{r\x92-\xfd\x8e\xf6\xc0\xda\xc3j\xbd=\xfc\x1de,\xcd\xf02lG\x1d\xb6\x93\x0e\xd8A\x07\x1b\xc3p\x13\x18\xbcB\x04jP\x96\x016$x=\x08\xee<\x0cR\x00\x0c\xb5\xfe\x83\x14\x01\xc3\x94\x01\xc3m\xfd\xe36g\x88e\x0f\xb5\xe9\xe2\xbaA\x9f0\x18h\xcd\x87\x99\xa3AJ\x0b3\n\xb2\x8c\xb0\xda\x8f\xd0\x96a\x16:\xb0\x01\x81U\x878\xee\x06\xd6\xe8s\xca\x85\xfa\x87\xde\xf3U\xe2T\xc4\x1b\x9c\x88p\x03_\xd4\x83\xf4\xf18\xe5\x19\xf11\x881\xbc\xcb\xe5%\x0f\x04v)\xddb\xb4\x02$c\x1c@\xc68\x98\x0e\"\x83\xe2\xd5T\x94\xd3\xca\xb9-Z\xf4\xfc\xce\x0e\x90X\xca\x0bH\x0c\xdf\x01~\xe7\xc4\xce\xd62'vn\x94>\xb0\xb1o\x0b\xf5X96\x83\xe0\xbf\x00\xe5\xf5CzC\xc1\xbb\x810\xdd@@.\x1cz\x1b\x05\xb25\xbe\xbf\x17\x1d\x0b\xc3\xbb\x82\x91\xad\x80O\x150\xca=\xcb\xdb\x80J\xfa\x975/\xaa4\xa0&Gw\x1a\xebf(\xcc\xe3\x06o\xfa\x97\xe1`@\xc6\x01\xb6\xb4\xc4Y\xa1\x97\x1cm\xd4%b\xb5\xd2\x1a\xad\xaa\x1f0n\"3~\xd4!\xbe\xfa\xfa7\xe3\xfa/\x9b-\xb1[\x10\xc1\x80\xed\x1ci\x9c\x9f\xcb\xf9\x91\xfa.S\xabk\xd1\x97\x7f\xf1\xff\xd5\xd7\x8fQ\x8aW\xfc\x1f\x97h\x83\xaf\xe4\xe5K\x0b\xf9\xf7\x96\x90_K\\\xc8Hj.\x8ek\x02\xc3\x8eP\x06x\xbdN\x13\xbei\xd9\x1e\x16p\xc1\x8c\x1b\x7fsv\xe8\x06[\xb3*\xaftF`G\n\xa1\xc1r\xdb\xbc\xf0\xd1\xb2\xdcy\x95b \x1fs\x1dI\x84x\xa1\x0d\xf1?Y\xb9\xbb\xc5\x85\xbcHK4\xc58\x84t\xdao*J\\\x19\xb6\x14B\xda\xa1Q|d\x8a;\xb2RF\xd5\xcdW)\x852\x93ci\x05\x84\xeb\xe1!U\xc7\x1b\xfb|p\xdc\x914\xe4\xe2\xc1\x96\x08\xddJ}\x07\xa1\xfe\xb7\xf5Z\xc7\x1f\x16\xaf]W7\xd5\xb7 \xca\x8f\xd4\x19\xf2\xdd\xe1\xce\x8c\x9c\x1c\xd3\xafb\xd2:\xd0\xf7\x87Z\xae7c\xfbe\xd1h\xa4\xb5\xa1\xf6\xc6\x82c\xaf\xec\x1d\x84\xce1x\xa3\x13\x8e+\xb9\xe6`\xdfw7]\xce\x8a\x1az\xb8i^E%6o\xe64J\xc8\n\xd3\x1c\xd9S\x9a[\x84\xab\xb6~D;\xf9Ze\xe4N\xc9\n\xb7\xe4\xdaD\xda6\xa0n\xcd4\xbaR\x0dn.;$\x99\xbfO7Wb*\x0bSI\x8f ]\x03\xca\x0e\xa6\xdc\x02=,\xb7d3Ft\xc7\xc0\xf2\xef\xa0b&la\x93\xb0%\x9b\x0d.\xe0Y\x81\x1e\x94\xf0\xe7\x0b\xf8 n\xc0mI\xcaH\xf6b\x85\x19.vi\x96R\x96&\x8d\x93 \xd9P[{\x1f\xf7\x8e\xea\x1d\xdd\xb8s\xea\xf8\x0e\x1e\xfdG\x8e\x8e\xfee\xe9\xdd\xae\xd8\xae\xea6_\xfb\xef\xb9\xf9Z\x88p\xfc-h\xff\xd5\x7f\xa9\xb7,\xfd\x1d\x94\xc5\xeb\x1a\xf6vV\x16\x7f\x97e \xf0\xc7\x06\xf4^\x16\xcf\xf5\xdf\xb2\x04J\x0bu\xf4\xf0R_\xe4]\xed\xf4\xb2\xfa\x83\xc0C\x81\xf2\x1c\x17\xf0 v.j\x03\xd5+\x10e+\xb5\xe6\xa3\xc2\x93\xfcHv\xa4q\x7f%\xb7\x12\xc2l\xd9iBa=\xbb\x16r\xe5\xf5\xe0\xbaW8S\xf7\x85\xcb\xaf\xdf\xea\x98\xba\xad\xda;>]\xfdQ\xdbu\xae\x9c\x97\xf5\x05\xe8\xfa&\xcf\xea\x1a\xe6vW\x1d\xd2\x9c\n\x08\xe9\xbe\xba\x0f\xbc:@ \xa0\xdbTz\xeaL\x05\xe8\x8bSx\xef\xd5\x8d\xd8v\x8d\x97\xbc\xe1\xe2\xd2K{\xe7\xf1\x1e'%\xb3\xdc#\xeek\xec\xc9\x9b\xd3\x8b\x0f2\xaf\xcf{\xb2\xf1]\x84\x8d2y\xbf=\xdf\xef\xec\xc5\xbb\x1d\x81:\xef\xe5\x96l\x86\x9c\xb8B\x170>\xf9V\xa3\xd6\xae4[\x931k\xedI}}\xb9qE\xbdnA\x7f\x9d\x1bD\x97\x0f(cx\x15Xs\xe0^\xe5\xa4\xba\x9fu\x83\xa8\xbe\xb2\x16\xcb|M\x8eK\xe5ySJ\xfa\xb8\x0dIHF\xcb\x9d\xca+fo\x06\xdb\xdb\x1a0\xc8\x85\xcc_Y\x96\x85\xf36P\x87e\xf6\xcd\x04\x80\x13\xf8|\xf5\xfee\x81))\x8b\x04C\x86v\xea\xb0_f\xe9\xaf%\xde\x1e ]\xe1\x8c\xa5\xebT\xc1EL\xa5|\xb5\x1b-\x8a\x8b\x14m\xd3\xbf7\xaf\x0c\xd6E\xdc\xd8\x9d\x90-\xdc\x96\xeb5.\xf4\xbcY\xc8{\x89d\x1f\xe4\x9d\xb7\xda\xac!\x06[\x8c\xa85\xd1\x1a\xc90|\xb8u\x90\xe3\x07ehc\xef\xebm\x81\xd1W>\xe7\x95\xc8\xc5s\xdbH\xf8H\x18>V7\xdd\x97Y\"G:o\xb5\xb2\x12IY\x14\xc2\xafh\xfa\xe3\x9c\x17\xce 7d\xd7\x11\x07\xda\xda\xdf\x96k(0\xb7\xe1\xf8H\xec\xd0S\xa6+\x12W\xa6\x8b\xd5\xbb\x9a\x1f\xb7x\x93f\x99\xfd\x8c\xf1\x90\xb2;\xabq>\xe4x!\xc7-\xcaS\xbaH\xc8n\x01'\"\xf1\x05\xdf\xae\xbc\xfe\xed\xeb\xdf\x1d5\xfd\x9f\x0f\xe9\x8a/l\xe2b{\xbb<5\x87m\xd5\xa5\xbb|\x8b\xf9\xda\xa2\xc7m\xb6\xe22\xf3\xad\xb8T\x8f\xd4\x7f\xe7\xd6\xc4nh\xaf\xc54\xa6\xd2\x1b\xc9\xedD\xd66L\xf0L\xb9\x80\xa4;W\xce\xfb\xe7\xb0k\xf9\xb0t\xb9\xb5\xda!\xa1_A\xd2h\xb6\x19h\x8e\x93t\x9d&@\xf1\x0ee,M:[~\xc7\x99\xb0w\xaf\xd1\x8be\xf87\"\x1f\xf4U\xf7*\x0dg\xbd\x93\xe8l\x1b\xf4f\xf9\x96\xdc[\xf7 \xb2{j\xe6\x0c\xd9\x90\x7f9\xc9\x0e_\x8c\x03L\x06\xa8\xb8MY\xc1gxO{\x94Io C[\x92m\xa4\xfeQ\xfb\xf3p\xc3+\xd6\x07\xd9\x9e\xdb\xee\xde\xca\xacOo\x93:\x83\xe9R\xcf\xb0mz+\x1a\xa9\x96\x05\n\xb4\xccsR\x88\xa55G\xc9\xd7\x97e\xc6\xff\xc3\x17T\xf9m\xa9}J\xdb\xf6\x14d\x0d%\x93vM\xdb\x0b\xca-*\xaa\xcf\x08\x1b\x9c\xe1B\xe4[\x95.\xee*\x8f\xd9I\xc7\x90\xcaO\xd2\xae\xe3|\x8f\xf8\x10\x85W\xc7p\xc9\xdb\xc9'\x95j22o\x158\xfd\xd7\x7f\xb5\xaeno \x815!\xf0#,\x16\x8b\xff\xd7\xf2\x00\xef8\xca\x0e\xb6?\xa1\xec\xb0\xe0\x95\xbe-\xc8\xee\xd9\x9a\x90\xe7\xb6\x87\x16\x0b\xdb\x12\x96\xae\xe1\x19\x7f\xfd\xb3h\xea\x0dy\xf6/\xfc\xfd\xe7\xf0_V\xf3l\x97\xf1\x0f\x97.^{t\xf1\x1f\xe8\x1eMR\x06\xfc(6X\\\xf2\xc8~\xa7\xf4\xd9[B\x16\xc9\x16Q\xea\xec\xb6l\n\x7f\\\xf6\xc2x\xc5V\xe3?,\xbf\xbd|\xc9\x07\x9c\xaf-\xd7h\x87\xf9~\xe5D\xb6j\x83\xd9\x99\x84\xc0/2\xcaP\x96\xe0g\xcf\x875\xd2*\xc1\xde\xe6\xf6\x8f\xfa#\xfe\xce\xf3\x11/\x0f\xec\x8e\x1f\x16-Be\x93\xde\x12\xf2l\xb1X<\xb7\x0f\\\xf9 \x9f9\xfe*\x86\xb5\xf8\xb4C\xbe,\x7f\xf1B\xaa\xf0\xec\xfc\xfa\xf4\xea\xe2\xf2\xe6\xd3\xd5s\xbb\x83\xb0\x1e\xfc\xaejdE.\xf5|\xefQ\xcf;bu\xfdp\xd5\x1c\xff\x08\xff\x92\xdf.\xde\x12\xf2_\x8b\xc5\xc26jx\xeb\x8e\xf8\xfe\x93?\x8b\xb2C~\xbb\xf8\x88\x1f\x9c\x0dM\xd7\xe2\xd9\xff\xebG\xc8\xd2\xadc\x988\xb4f\x1d\xb4\xaeg[\x8d\xb7\xbe\xaa\xda\"\xdb\xbd\xf8\x9c\xedPA\xef\xd0\xf6\x86\xc8\x89:\xa5\xa1\xad_\xf9\xc9S\xe8][n3Oz\xde^_$\xca|\xd0\xdc\x12A\x14m |j\xd9\x8f\xbd\xe4\x87\xe7\x85\xf8\x03\xdf\xc7>\xe5\x07\x9ej\xbd\xe3k\xa1J\x82\xd9\x12%GD\xbb\x82j\x89\xc9\xe4\x1e\xcez:\xaf\xf6\xcc\x80\xd6\x0c\xcb\xbd\x94p\x0c<}\xf9\xb4-P\x9d;uc\xe4A\x13\xab\x11\xfadM\xc8\xe2\x16\x15\xa2\x1b\xfb\x97\x87\xc5\xdf\x9fH-\xc8#\x93\xed\x0c(\xaa}\xc2\x9f\xec.t\xffq\xfd\xe9c\xfb\xb7\x1f\x7f\xfc\xf1G\xdbg\xe1\xcf\xd6~ \xb9u#|~\xaa}\x8a<\x7f\x95\x14k`zSnQg\xcf\xda\x15\xc0\x1f^\xe1z\x7fq\x04xw\x8bW\xabz\xa7q\xa4\xb6-\x1do\x86\xb1\xe6\xafE\xff\xbf\xfc;\xd7\xc0\x17u\x00opG\xb4>\x17z\xb6\x1f[\x0f (\xf9\xca'{}\xf0\\\xa7[l3\xb2\xda,\\\xe2\x82\x92\xcc1\xee\x95\x0fI\xdc\x80\xbd\x14\x1f\xe2Gxe\x93V=*\x88\x9e\xea\xc9\xd7a\xc6\x1d\xc0Q\xfb\x13\xa1\x8d'\xc7\xf0\xc46 \x9a]\\\xc8~<9\xb2K\x12=\xf8\x88v\\\xda\xff'\x9b\xfaG\xc7\xa3\xbc\x07\xad'C\xbaq\xb1V'\x8c\xe6\xb7\x97\xdf-\xa5\xf0\x80\xb7\xdb\x17_3\xf2\x90\x89\xe9y\x87( HJ\xca\xc8\xce:\x8c\x9b\x03\xedH\xeeo[\xa3\xaff\xa9\xa8J\xf9\x80\xca6\x1dO\x97\x18\\\xed\n\xbe\x88\x01\xaf\xc7\xda\x1d\xd9\xaeT\x16\xe1\xbaM\xc2k\xa6\xc6((?\x95\x1a\xa2mi\xa2\x8ajl\xc23>\xe9\xb5\n:n\x10\xed\xab\xfb\xeb\x7f\xfe\xf5\xb9u\x18O\x1b\x0f\xcdJ\\CBt\x9f\x0b{\xb5x\xfd\xea5}b\xfd\xc8\xf5\xff;\x98p\xce3\x9c\x07\xabHkwg^\xe0\xfb\x94\x94T\xdd\xae\x00oI\xa1\xf8\x15\x14\xfe\x08\xaf\x8e eO\xe5\xa7y\x10\xbfv\x8e\xd9;\xbcJ\x11\xb7EmU\n\xbb\xa1\xdb]\x9d\"\xe4\x81P$\xaao\xdc\"\xbfx\x8f(SD7\xde\x88\x960\xd9$\xf8\xf1Gx\xd5I\xf0,Z\xc8\x8f-4\xa5\xa2Fs\xb5\xb4\x81\xdd\xec\x1b`\xfe\xcc\x01g\xf7\x1e\xbb\xfb!lW\xb3ey\\t\xbe\x17\xa4\xee\xed\x93,\x1e`:@\x82\xe7R\")\xe1\x96\x90-F6\x9f\xa2oN\xe8\"\xd0\xcd\x1a\xce\x16\xf4L\x9af\x9b\xad\xc0\xac_\xd4\xb0\xec\x91y5\x89\xf0g\xd9\x05\xa2L\x8e\xc1\xa1\xc0\xa6\x84Y\x85\x17\x95\x9aX\"\xac\xf0=\xde\xf2\xef%\\T\xe2*\x87;c1\xef\x082@?`\x96=\xb8\xe6\x0d\xbdM3\xb1\x87\x10l7\xb1L\xe8\xbf\x9c\xde\xe1\xe4\xeb\xcd\xder\xb2y\x8f\x18.\x8eL\xac\x8c\xc2N\xe2\x8a\x9aWV\x8a\xb4\xee\xec\x0eS\xac&\xe3\x10/\x8e\xc2\xa1+XW\"\xecJ\x90\x86\x9c\xd5\xf6\xb6N!\xef\xc0\xee@yL;\x16\xc4l\x9d\xe6\xde\x02\xbb#\x14\xbb\xaaP\xed\xd07\xca\xb4\xe4\xc9-0\xe9n\xa8\xb5\xb4:Wl\xc6\xf0\x02~\xb9\xc3\x05F\x14\xde\x93\x0dm\x93vy\x9b\x8e\xac\x0eSc\x03\xb7\xc3\x0c\xad\x10CGU\x0dbG\xddl\xb4\xd9\xe0\xeen\xd6J`|\xbdx\xf5\xea\x88\xff\xcf\xf7\x8b\x1f\xc4\x7f\x7f\xa8\xder\x7f\xb7\x9a\xda\xe8\x83\xe3\x0b\xbc\xc5\xf7(c\xc0\xf62\xe7>\xca\xcc\xe5E\xf7J8\xe9\xcd\xf62\xb4\xa1\x06!B\x1e\x13t\xf2\xfd-\x11\xacj\xb1\x85X\xe1\x84\xac\xf0J\x0e\x82F\x8b\x1b\x14\xcc^>\xa8\xc9\x04\xbd\xd9W\xc4O'\xaf\x93\x8a1;\x82\xddi\x18_\x9b\xa9\xef\x18\xf8\xe9\x1cP\xaa;\xbeM\xa9\x00\xe9,dPja\x83\x0em\xa9c\x01r-;\xf6\x18\xab\x9e5\xa2\x8f#\xe7g\x8f\xda\xf9\xa3\xbd\x15\x0e\xe2\x90:Y\xa4\xbdU\x842Im\\R-\xd8\xce*\xec\xd3V\x18\xa3\xd4\xc6)\x0d\xd7\x97\x8fW\xea`\x96\x86W\xd0a\x97\x86\xd3s\xfc\xfcR\x0fK\xc7\xc61\xed\xdb\xba9\xb6m\xbd[\xb6\xfe\xedZ/\xdb\xb4\x7fd\xc8\xe2\x0brspN\xbd\xbb87\xef\xd4\xb7\xb7\xf5\x902\xbd\xfb[\x9f\xcadqm\xd9\x1b\x7f\xf7\xf1&CX\xa8\xfe\xee\xca\xe2e\xa2\x06u]\x96\x10\x05\xc8\x12\xc0G\x0d\xd4\x85,A\x9c\xd4\x01\x12}\x1b\xe7f\x19\xcaL\xf5+g\x087u\x0c;5\xbc\x87\xa3\x18\xaa\xee\xe1\xcf\x8d\xa2\x97\xa3\x1a\x9b\xa5\xda\xc3S\x0dUDd\xaej\x00[\xb5\x87\xaf\x1a\xd2\xe8 \x9cU\x8747k\xd5\xdf\x9e\xd0\xa5\x91\xf51W\xbd\xabb\x97\xbd\x1a\xbe\x9eOa\xb0\xba9\xac\xa3w\x94S\x99\xac..\xebc4(\x80\xd1\xda\xe5\xb4\xf6.+>\xa7\x97\x9d\xd9\xea\xb5\xef\xbeQ\n\xf1\xf9\xad>\x86kl\x8ekd\x96\xab\x87\xe7:\x99\xe9\x1a\x97\xeb\x1a\xc2v\x9d\xc0w\x8d\xcbx\x95\xa3\xd5\xc3y\x8d\xcbz\x0d\xe0\xbdFg\xbez\xb8\xaf\xe3\xd8\xafVA\xbd\x8c\xd8(\x9c\xd8@V\xac\xf5\xcdAL\xd9\xc9\\\xd9\xd8lY7_62c\xf618\xb3\x91Y\xb3\xa1\xbc\xd9\xc8\xcc\xd9~\xeelt\xf6\xac\x9b?+\x0d\xd7\x18\x06\xad\xdduvqu~\xda\xbeU\xc1|\xe0\xe6\xfc\xcf7\x9fO\xdaw)tE,O>\xff\xb9\xe7\xa1\xf7\xe7\xefNN\xff\xb2<\xf9p\xf1\xf1\xd3R\x9c\x92\xdd\xcf\x9e_\\._\xfd\xe1U\xe3\x89\xea\xd2\x06\x7f\x07\xfb\xb7+\xd7\xe9&\xe3c\xa8\xfd\xe5\x8do\"\xe1LF\x81\x1f\xf1)N\xca\"e\xed=\xff\xa6D\x05\xdf\x0f\xd8\xd6fAh\xe2\x9f\xc7`\xf2$$\xa3\xe9\n\x17|\xbd\x83\x02oR\xca\x8a\x83\xf0gm\xb7 \x9d \xbc\x0d\xa2\x01\x1d\xbe\xa8:\xbf\x9d\x8a\xc9\x008!\xf4@\x19\xde-\xe0$\xcf\xa92\x8aL1h\xa4]\xd6 \\\x97\x92#\xeajWPW\xaddJv\xa7h\xfc6\xfd\x8aM\x91\xca\x9f`\xbcc\xa3\xee\xe2,!e\x816\xb29$\xc7\x19\xd7\xf2\x8e\xf7\xf6\xf2\n\xd0\x86o\x9a\x98\xa2\x0c\xa4[Q\x01Zq\xddd\xf8\x01\x12\xd4\xdd\x8f wEJ\xeb\xef'\x14\xac`L\xb5_J\x8b\xbaU@\x89B:\xd3\xf5\x1a\x17\x16b\x17\xe2\x1d\x15d\x0e$?\x0fe|_\xaf\x98\x12rf\xaa\x0f\xd9\xdd[;f\x9ac|V\x10\xb1\xc0w\xcb\xac\xfe\xe0\xd5\xa0\xe3\xbb \xb5\x06\xb6\xea*\xf0\xdf\xc4w\xed\x1cU\xba\x93\xf0\xb8\xf3\x8bYsk\x94k\x8a\x94\xd4\xe9\x19I$\x91\xa2M:\xba\xc7\x85\xdc\xa7\x89iQ\xf1\xad\xe5\xb6\x98\x1f;zZ\xa5\x8c\xc7q\xf7'y\x88[\x97bw\xd9h\x97\x1cz\\\x13\xa2\xe6\x83\xa4\x0e7\xeb\xb8+w({Q`\xb4\x12\xab-\xc3{V\xa2m\xc7\xd5\xcb\xcfT\xb96\xb1\x92\\\xd3\xd1\xad\xf9F\xfb+\x8b.\xb65\x1a\x16\xed\xf7\xc3o\xfd_\x8b\x9b\xcc\xee\x17\xe3\xbf\x86|5\x8b];#\xc9YZ\xe0\x84\x9d\x94{IT\xc9s\xa2vj\xedj\x8e\xe4\xe8\xae\xe6KK\xdc\x8a`A\xa7i\xf7\xb5\xc0\xbf\x96i\xa1W*Z5\x8e\xdc\xf3]\x83\xe0\x9b\xa8?=\x85/\xf2\xff\x96\xfc\x90\xfb%Lm\xdf\xff\xbeOm\x9dE\xe4\xb8\xef\x8fr\x88\xdd\xa2\xe4\xeb\x03*V\xb4E\xab\xea\xd7\xe6\xc9.\xcd\x88<\x8a\x18\x13\x13\n\xbc#\xf7\xf2&\x19 \xc8\xf0\xe1\xdb;\x03\xd4Zv\xdc\xfd\xc9\xf8\xc6zW \x1b\xc5\xf7H\xe7\x17\x97 \x9e\xd1\xea5W\x80\xb6\x1e\xcf~^\xc0\x15^\x1f\x83\xe0\xf6\x1c\xbf|\x89\xd3\x9c.\xb0\xd82\x97\xbb\x05)6/\xcf/.\xaf\xf9\xcf/\xf8\xba\xda\xfe\x10\xa7\x9a\x9eudieJ\xd5r%\xd7.\xae\xd2\x86 n[\x0bT\xa4(c\x9d\xb3\xfbmY\x11\xb4*\xa2\x908\xf7\xca\xed\xe0\xd9\xcf\x06\x0e\xb7\x80\x1b\x028\x13S\xfb\xfc\xe2\x92\xb7\xb9\xed\xed=\x90R\x10\xe3,\xab\x04?\x9c\xd4\x0e\xf9/7\xfbS\x92\xad\xd3\xcd\x17iX\x84\xb7>k\x93\x95\xban\xd5/\xba\x93?\xa1l\xb5\xc5\xc5\x17\xfdYxk$W\x977z\x87x\xab\x93t%V0 \xd0\xa9\x85\xb2-Q\xbd\xdb\x1e;A\xb3B\xde}\xc2\xcb\xae\xdc\xb2\xb4\xde\xf6\x05\x86\xad\xeaM\xf3\xe2\x03\x7f\xbd\x0ea\xd5\xbbS\xfeksC\x94I\xe6\xbd\xf8\x0bM7\xe6\xce\xb4\xb1\xbf\xd2\x92[\x84\xa2\xf6\x1e\xb7\xda[\x93\xc2!\xba\x7f\xb7/\x1b\x1e\xbc\xe7\xbfM\x99p\xd4vv\xfd\xfa\x0f\xc6\xe4\x936@\\\xf6\xc9W8\xf5y\xaa\xd6\xa1z}\xaa\x85\x85\x9f\x08\xf0\x9e\x15hy\x9b2\xba\xa4\x8c\x14\xf6\x94\xdbC.*\xc1\xdb\x8e\x9b\xd9{\xc6m\x1c\xfc\xdd\xdb\xe3Sn \x13\xf6&e'BG\xa9}\xaa\xf0\x8f)\x82h\xab#\xe2\xe9v\xea\xc9V\x9ce\x0dy\xadSm\xa4\x13\xad\xff4\xfb\xedO\xb2\xa3O\xb1\xdf\xf0\x04;\xe9\xf4:\xe9\xe4j=\xabN=\xa7\xf2\x93\xa99\xd6Zg\xd4(\xe7\xd3\xb8g\xd3\x80si\xef\x99\xb4\xbdI\x95\x1b9\xd7\xbe\xb0\xb1\x05\x13\xc0\x9f\x0c\xfe\x958\xb3\xfaL\xcd\xd8\x16\xbe\x18n\xb7\xe4AJh\xd1/)\xd02\xb9\xe3\xafmI\x82\xb6r\xecYl\xaf\x19m&\xbbh\xdd\x8e~*V\xb8xs0\xb7\xa1\xc6\xc6\xd0\xdc\x14\xbe\x80OWg\xe7W\xcb7\x7f\xb1l\xa3\x8c?\x9e\\\x9fv\x7f<;W\xbfV\x9b2\xa70\xfb~\xcc^\xbb]\x8cc\xe9%\x05\xab7\xbc\x84\xf7{\x01\xaa\xfb\xbaY\xd5\x06\x8b\x118\xb9>\x95ZL\xa9\xd8\x91T\xf6\xa2\xd9\xd7\xe3\xc6\xbfj\xe4\x9c&X\x9eODM\x96w\xb9J\x8e\x9b\xff\xac\xde\xe6:\xe8\xbc\xae\xc6\x9d\xd1d\xf1\xac\xb0D\xb2o\xd5\xc3\xdd\xef|-\xc6\xdf \x1cQ\x1ed\x9a\xb0\xfb\x00G\x00\xb3\x86\xf3;\x8f\xee\xfd V\xc4\xe0}w\xd8~\xbc\x80\xfdh\xa1\xfa\xce }6>-\xb8\xbc5\xcd\xda\xab\xf1\xc4\x80r\xa5\xe8\xc6 jB\xe8xo\\\xb4#\\\xdc\x1b(\xde\x8d\x98\x0c\x0f\x0e\xef\xbe\xfb\x0f[_G\x85\x82\x87t\xd6\x17\xfe\xed\xee\x9b7\xe4{@\xb0w;\x9c\xd5\x15\xe0==\xb4{|Pw3tmb wo\x08\xb7;x\xbb/l\xdb\xaa\xad\xd0Pm_\x90v;<{B`v@Hvx0\xb67\x0c\xdb\x12\xcd\xdc\xa9\xce\xf2\x8c/\xdczZ\xa0\xb5\xb5Q\xc6/\x93\xc2\xaa\xdba\xd4S\x02\xa8-\x01\xd3\x93B\xa5\xdb\xa1\xd11\x83\xa2]\xe1\xd0\xed\x18\xd1v\x08t\x9c\xe0\xe7ha\xcfq\x03\x9e\xc3B\x9d\xbdA\xce\x81\xe1\xcd!\x81\xcd\x9d\x08\xe0nm\xa1!\xaa\xfda\xcc\x81\x01\xcc\x01\xa1\xcb\x8d&\xc7\x0cW\x9e\x14\xa8\xdc\x0dL\x8e\x17\x92\x1c/\x18y\xfc\xd7\xf5\x06 \xfbB\x8f\xb5\xd1\xae(\x1c\xa3y\\\x81\x14\x11\x0f)\x8bU\x0c\x11\xcd\x85\xd1\xbc/CX\x1d\x03f \xde\x16\x86\xc8W|x\xaa=N\x14\xffZ\xe2\xcc\xcc\xd0o==9\x02S\xdcg\x17-\xb7\xe2x\xe8\x7f\xeb\x13R\"Bk\x8e\xd4\x80k\xf4\xbea\x99\xab \x97D\x04B\xb3\xd6-\x0dR+bqC\xb0I\xef\xb1\x18\xa3\x05\xa6T#\x16\xad+\x92\x9b\xa1\x9by!\"\x01\xf9\xc4\xd9\xa2\x83\x8c\x03\xfd\xaa\xce\x97\xf6\xf8\x99\xda\x1d\xdd\xfad5{F|\"'\xad\x8e\x91\xfc\xc5\x16\xdfc\xcd\xf6\xef\xe3\xd4]\xa7\xbbr\x8b\x98\x0eG\nv\x80\x9b\x99m\x03\xc7\xab\xf3\xba\x8c\xc6xe{\xfdA\xcd\x9b\x1f\xf8pS-\xb5\x87\xd6-\xe0\x1ag+\x81\xcd\xb3\xbd\x82\xe7[Qul\xbf\x14\xbf\x07\x0eD7O\xae\xd5\xde\xa5\xaaM\xad\xbe\xbc\x05f>`\xe3Y+t\xf6\xbb\xde\xa1\xd0\xf8:u\x18\x95\xfc'\xb3EQ\xe9w\x94\x08_\x08U]\xc5\xc0kU6\x88\xb6\xecV\xa3\x0f\xfa\xcf\xba\xcdfp3\xba%%\x13Y\x94\x85KF\xed\xb3\xd4\x07n$Q\xee\xb4\xc3\xde\x16\xe8\xc9F\xed\xf5\xd5X\x82\xfe\xfa\xbd5\xef\x10\xfdETT\xe1\x9ah\x9f\xee\xca\x1d\x94\x99\xa0;\xad\xe1\x81\x14_\xe1AyV\xa5k\x90\xed\xbb\xf1\x909.x#\x16\xad^t\x13XO\xee\xc3;D?\xd3\xba\xc1\xa8\x91\xca\x1a%L\xe2\x08:\xa7\xb5n\x90t\x00;>\xb0\xfcc=$\xc5\xbf\xaa\x85d\xd2\xa7\xec\xde\x81\xe2U\xc0@\x87\xdb\x19bHRZ\x0f\x92qZ`V\x16\x99\x0e\xf0\xd6\xbb \xe1\xd7\x16\xb0\xba\x91\x97\x1e.\xdaH\xd4\x87\xcf\xd77\x16\x7f\xe3\x16g\x1bv\xc7W\x80u\xba\x97\xe3\\\x80\x90\xc2\x9a\xe1\x1c\x15\x88aY\xbb\xac\x94/\xa0|Cc\xcf\xe6X5\x80v\xce\xeb\xa6\x19\xbc\x91\xbc1\xbe7\x17\xc0\x1c\xdf\xa0\xe5$\x17s|u$(\x0d\xbcA\xb8\x10\xd7\x99\xe8\x80\xcc\x96@e9\xdb\xf5\xdc\xe2\x04 H\x88\x01\xdaR\xd2\xdc\xee\x7f\xa0\x9bf|'\xdf\xfa\x1b\x02:\x97\x9b8\xbfi\xff\xa7{O6\xcd\x8aE\xa8\xb8a]\x1c_\xd0\xa5N\xb3\x8d\xf3\x9d\x86\xbd]\x90\xc5\x9f\x9bd\xbe\xd3p\xbe\xd3\xf0\xbf\xf1N\xc3\x11\xf7\x95\xa8\x9bIZ\xf2\xb4!n\xfdl]\x15\x8cgL\xc3\xfa\xdfdL\xe6\xbb\"\xe6\xbb\"\xac\xd2\xe6\xbb\"`\xbe+\xc2^\xcfD\x8a\x8b\x16\x12@t\xb1\xbe\x19L~\x91e\x02\x05F\x96 D\x18\xd7Dw45\x1aEF\x96\xb8D\x19Y\xa2\xd1ed\xf1\x93fd\x89F\x9d\x91e\xbe+b4\xd9F\x96\xb1\x94\x1b\xab\xb0\xf9\xae\x88\xf9\xae\x88\xae\xa0it\x9e\x8e86\xdf\x15\xe1\xa7\x00\xc9\xe2\xbb\x91\xc0O\x07\x92e\xbe+b\x18}H\x96\xf9\xae\x08K\x99\xef\x8a\x08\xa0$\xc9\x12@L\x92%\x9c\x9e$\x8b\x97\xa4$\xcb|W\xc4|W\x84,1iQ\xb2\xccwE\x0c\xa6N\xc9\x12F\xa0\x92\xc5K\xa3\x92%\x90L\xd5xx\xbe+B\x94\x98\xe4+Y&Q\xb0:\xd2\xe6\xbb\"b\xdf\x15\xd1\x7fDk\xe0\x00]\xb0Tc\x08\xf5#b\xa0\xf09-\xdcB-i'\xd9\xc1\x92^\xb4'\xd3\x80\x8fR\x12\x90\x9aW\xbf\xd3\xa2\x96\xf88%7i\x1eL#\x91T\x846'\xc7\x93D\xa9#W\x16\x17*\xb2\xc2\x19\xe9\xa4\xc7u\xba\n\xda-\xea}\xdcM\x0c\x028%\xa9\x99.\x9c\x91\xaf8S\xeb\x83l\x92\xce\x1e\xce\xad\x01?\xbe\x8b\x8a[\xbb\xc7\x8f\x9fn\xce\x8f\xc5\xba\xa6H\x1b\x15\xb6\x8f2\xb8\xc8\x98\x9a\xb6\x95\x13\xa51w\xe5Gj\xc8\xa3\xe9&C\xac,0\xd5\xc9.\xc4\x16gC6D\xcc\x15\x83\xb0!\xd9\x84\xaa\xda\x0esD\xacSi\xfe\x9d~8\xcfq\xd1\xfe\x8c-u\xe9,\xd3\xe2\xd9J\xa2$\xd3\xb5h{\x90\xa3\x83X\x87\x94\xbbI\xd7d\xd7\xf7M\x9aW\xac\xb14\xaf=y;\xcc\xd0\x0b\x13o\xac\x94\xeb\x9c76\xdeZ\xf0`\xbe%+K\x9a9\xb2\xaa\xd2\xa6\xab\x94\xfe\xc2\x91)\x00\nC\x97u3[Z\x0c\xe2\xcc\xe8\xdb\x01f\xbc\x91\xcdx\xe3\x8c7\xcex\xe3\x8c7\xcex\xe3\x8c76\xcb\x8c7\xcex\xe3\x8c7\xcex\xe3\x8c7\x86Aj3\xdeh{d\xc6\x1bg\xbcq\xc6\x1bu\x99\xf1F]f\xbcq\xc6\x1bg\xbcQ\x97\x19o\x9c\xf1\xc6\x19o\xfc\xa6x\xa3\x82\x00d\x1c\x9a\xbe\x03\xb7\xfaUzfd\xc4\x92\x8c\x14\xc5\x15\x04\xd4\x92T_\x15\xd2V\x91\xbc_\xb9\x92)\xd1-\xf1}T\x1e\x05>\xd2d\x94+Y\x8b\xfbi\xd4\xf5\xcc-9'%\xbb\x13\xc9+:\xf7\x1b\x1aY\xd5\xa5W\xe1f\xff\x94\x1a\xb0\xd5\x02\xceQrW\x83W:i\x85\x82\x91:W\xd6!1H\xbb\xb1l\xac\xba'\x98/]b\xd9\xe2\xf3V\xdcc\x0f)\x03\x92$e\xd1\x8d\xb5}#\xc2\xa4\xefq\xa6g\x88~\xaf\xdd\xa0g\xda\x11]]\x19-\x9e\xb3\x7f\xb3\x8e\xbfJ\xe4+_\xe3\xa2\x90\xeeA\xa4\xe1\xa3t'\x8e\xdbu\xa2\x8e\x1c\x1d\xe4\xdf\xd6\xb8\x0d\xdb\xea\xf2pG\xb6\xdd+\x14\xcd\x1c\x05\xf5\xcf;\xbc#6\x08ip\x98.\x17\xa4#\xack?AF\x18~\x99\x90\x9dp\x0c\xc9\x01\xa9\xbf\x0f\xb4@\xb0\x8e\xe6\x7f9\xb9\xfax\xf1\xf1\xdd17\x0e\xc96\x95\xd7ks\xf12/\xc6\xf6\x00x\xaf\xee\x01\xc0{\xa6\xc1\x89\x8c\xb0\xee-\x8a \xdan\x85\xc1\xdc\x11\xeb\xe5d\xc6\x15$\xf2\xc9/\xbc\xe1_t\\4<\xa3\xb8-R'\xac\xdf\xa4\xec\xae\xbc\x15&AB\x89/k\x8c\xf1eJi\x89\xe9\xcb?\xbcz\xfd\xfa\xb9\xa9u>\xe6H\xc9\x96w8\xdd\xdc\xb1@\xfd\xfb/-\xee\xdc\xe2\xac\xea\xd1h\xe4\xad\x08\xde\x94\x95\xaa\xad\x994\xca2c\x81\x91\x7fC\x18\xfd\x8c\xb4G\xefm\x85h\xca\x8d\xab0\xe3w\xa81\xdb\xf1\x9e\xe1\x8c\xa6$[JhbF(g\x84rF(g\x84rF(g\x84rF(\xdbeF(g\x84rF(g\x84rF(\xc3@\xb8\x19\xa1\xb4=2#\x943B9#\x94\xba\xcc\x08\xa5.3B9#\x943B\xa9\xcb\x8cP\xce\x08\xe5\x8cP\xc6E(\x15\xf2\xd09\x9cuP\x00\xe9^\xaa\x8eg\xfaW\xf1=\x13\x94\xd5\xc8\xd0m\xfb\xe0!\x00\x86\x0el\xf8p\x873e\x8e\xe4E#f=\x19a@K\xe1\x0b\xc1\x19[\xf0q\xc9wQ\xd2\x80Q\xe1rh\x89sx\xb0\xf9(MP\xf6T\x1cxe\x00\xe7J\x82\x80\x1d\xb4D\xdc\xad,\xaf+7\x84d$[&E\xca\xd2\x04m\x97342C#\x8d2C#342C#342C#\x962C#342C#342C#a\xde\xff\x19\x1a\xb1=2C#342C#\xba\xcc\xd0\x88.342C#34\xa2\xcb\x0c\x8d\xcc\xd0\xc8\x0c\x8d\xcc\xd0H\x0ch\xe4P\x8d\xbat\x93\x113\xd8\xacqh\xbd\xd9\xbf1\x12\xe5\x89\xa4y\xe2R\xdb\xc65\xb0\\\x05h\xbb\xad\x02\xd4\xf8\x7f\x81\xdc\xe3\xcam\x87Jv7\xee:\xe5*\"\xadz\xd1\x16ES\xc9\xaf\xd2\x17\x96\xec\x8e\x14\xe9\xdf\xe5\xfc*\xb0\xb8g\xb1'\xb7\x9f9\xa2\xb4\xf7B:|e\x97\x8etp\xd7\x8e\xf0s.\xd7\xea\xba\n6\xaa\xa3\xe0F%\xcc\xec\xb8:\xfcw\xdd6\xaf\\\xaesG6B\x0c\x8d\xdf\x95\xe3\x99%wj\xc5T\x97`Va\x81\x86\xb8fta\x1d\x11\xd8\x0c\x01dD]\xa3\x9a\x90,\xc3 \xe3\xe6\xaa\xaaPdx4/\xad3\x04n\xd3\xaf\x8d\xedC\xdf\xf5\xc9|\xdfF\xa8\x18\x1br$\xb5\x86\xa6\xfe\xda\xfc\xec\xb3B\x85\xda\x15UN\xc0\xdb\x82\xa0U\x82\xa8h\\3\xdf\xa4=\xa3\xe4\x9b*Q$\xf3g\x95\xd4\xd1\x96\xa3\xbeyp\x92T\xe6@\x02{\xbcd>\xa7ST\xf4\xaf\x0f\xf9\x8b\x89\xfaED\xfcz\xd0\xbeIH_<\x94\xcf\x87\xf0\x8dD\xf7F#{\x12M\xb0h\xcb\x89\xea\x8dF\xf4\xe4\x16\xa6#\xcf\x89\xe6MA\xf2\xa0\xcc;\xf2\\(\xde\x18\x04\xaf\x0f\xad\x9b\x8c\xd4\x05\xa1tC\x10\xb9Ih\xdc\x04$\xcejV\xa2\"n\xb1\xd1\xb6\x88H[\x08\xca\x16\x11as\xa3kQ\x915;\xaaf\xd9\xe2\x07!j\xa2n\xab4'\x9a6\x19I\x1b\x8b\xa2I\xc4\xac#\xce\x86\xa0\x8dF\xcf\xac\xc8Y\xcf~\xa0\x071\xf3m\x15b!en\x94\xac\xaf\x05\xd3\xd01\x89\x865\x04\xda\x90\xb1(\xa8\xd84D\xac3U\xbb\xab~L$\x8cYP\xb0i\x08\x98\x07\xe0q\"_\x01\xa8\x97\xcd\x01<\x04\xed\xb2\xbd\xff\x0f{\xdfG\"\\a\x9d\xf7#[}=\x0d@\xb4\x06\xa1Y]\x8f\xbd\x1b\xc5\x8a\x81`MA\xaf\xda^\xba\xc9\xa8\x95\x07\xb1\xeaC\xab\xfa\x91*\x87\xf6\xc2\x11*?:\xd5E\xa6&\xa1RA\x88\xd4\x104*\x00\x89\xb2B:\x96j\xad\xcf\xf9\x91\xa7\xa9\xa8\x93\xa3y\x8d\xdf&!M]di\n\xaadE\x91&!H]\xc4(.Z\xe4F\x8a\xba\x0e\xf4.B\x14\x0b\x1d\x8a\x88\x0c\xc5F\x85B\x11\xa1\x004(\x18 \nC\x81,\x80\x89\xad\xd6P\xaf\xbe\x0f\xf9 F}\x82\x10\x9fV\xe3\xe3\"=\x93P\x1e\x1b\xaa\x13\x13\xd1\x89\x89\xe6L\xf9\xde\x01(\x8e\x1f\xc1\xa9M\xbe\xfb\xe8\xa0]\xb3#R\xee9\x92\xec\x8dN\xb0\xe7H\xa9\x173\x9d\x9e-\x95\x1e\x1b\x9eF/b\n=\xa5\xa7\x86/cR\xea\xbcn\xb2\xad*\xb3Z\xa7\xa4\xfe\xf0\xda\x84\x0f\x91\x8c\x96TKs\xd4f\x1f\xcb\x8d\xeeW8\x1bW\xb1|U\xc1\xb8\xb4[M\xbf\x85\xfb\x9d[\xe3\x97[\x14U\xd1n\x08\xf0\x1a3i\xc0\xc5G\xd0+\xa0n\x8f\xa4\x11\x89?\xe9\xe3riD\x12\xab\xc7\x1a~\x95\x96\x86)Y\xb3\x07~\x94\xe7\xb3=\xcf\xb7\x12\xa9\x11JD[xB\xb2\x17J\xc8\x13H\xc8n\x87\xb2\x95I\x82Y\x95\xa2\x1b\xc6/\xac\n\xbe\x7f\x837i&-\x81\\O\x0c'\xab\x92)&\x027>x\xb5\x80\x0b\xb1\xe8\xa3-%\x868\x81{\x9b\xe2 \xac0\xc3 \x83\x87;,\x80iTwAw-A\x99\xf2%\x00\x82Mz\x8f\xb3Za\x82rbJ\xd4M\x91/\x14r\xd2\xb1J\xadw\x88\xc2-\xc6\x99 \xcb(/\xb0\xae\xf0\x08R&\xf4n\x88k\xc2\xdc\x8a\xbbR\xd1\x84\xea\xb6\xa6\x14H\xc9^\x90\xf5\x8b\x15b\xb8\xf6\xb2\xe8\xe6\xdc\xa4|\xce\x99\xd9\x8d\x7f\x92\x11\xe6i\xc3;S`\x94\xdc\xe1U\xe5\n\xaf\xe4\x8b\xe1\x80\xf7)3\xa3\xe1\x03')o\xd1\x0b\xfe|\xc0\xf8<\xc3y\x81\x13n\xae\x8ee\x9b%\xa7Eu\x83J\xee\x8aP\xe0\xaazra\x14\x16\xfa\x12\xfc\x04@\xcf\xe0\xca\xb91\x00\x82v\xcb\xe8\xf8\xea'\xc1\xd10@\x19>X\x1a\xbc\xfd\xf6\xc2\xd30\x0c\xa2\x06{\x9e\x95\x9e\xd4?1\xe0j\x98\x04Y\x835\xeb\xc4D\xe8\x1a|\xf05x\xd2\x00\xf9\x12\x01\xf5|\xd9P8\x1b\x02 m\xb0&\x04\x9a\x04mC\x18\xbc\x0d\x83 n\x08\x81\xb9\xc1\xa95\xeb\xa0u=\xeb\x83\xbda2\xf4\x0d}\x0dm\xfd\x1a\x15\x06\x87\x89PxK\x94-qPdp\x1c\"\x03\xe4\xd0\x9b>\xc8\x96@\xc8\x96B(\x16`\x0e1As\x88\x0e\x9cC0x\x0e!\x00:\x84\x83\xe8\x10\x08\xa4\x83=\xa5\x90=\xc9L8\xec\xeaK+\x14\x0c\xacC\x18\xb8\x0e\xb6n\xc4\x04\xd9a*\xd0\xde\x92eI7\x14\x13z\x87\xa8\xf0;L\x1e\x0f^\x18\x1e\x02\xa0x\xf0\xc0\xf1.\x803\x04E6^S\xd2\x06\xa3\xc8\x8d0P:\x18]\x95\xb1\xa2K\xe5\x15y\xe4\x88\xf3.\xb4\xda{\xf6\x0d\x89\xc3\x95\xa5\x13\x8d\xeb\x95\xed\x88\xccU\xef\x0d\x8b\xcf\x95\xc5\x1e\xa5+K\x84X]Y\x9c\x11\xbb\x9664\xafKn~gh^\xb4-\x1b!}a\n\x11\xc5iQ\xb7\xc6\x10\xa4%x\x89\x15\xf6\x81\x19\x92\x98A\xce\x8d\xe6\xfb\xdf\xd5\xf3\xa3\xce\xd3\xf0\x9dG)}\xf3\xe6\xb3\xc2\x93Nu\x1f\xaf\x19b\xc3\xd3`\xd4\xb0\x94\x96c\x0f\xfcs0^\x1aN\x1d5\xec\xect\x8d\xdf=\xf5)\xbc\xbfG\xe1\x8a\xb7\xcb\xb1}\x80\xff\x19\x00\x00\xff\xffPK\x07\x08\x83mtT\xd4\xea\x02\x00\x1f\xa5(\x00PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(\x92r\xe6\xddX\x13\x06\x00\x84D+\x00\x12\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\x00\x00\x00\x00openapi/index.htmlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(!\x95s\xe8S\xfe\x01\x00\xabR\x1e\x00\x14\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\xa1\x13\x06\x00openapi/openapi.yamlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(\xd4`4t\xc7\x01\x00\x00\xbd\x01\x00\x00\x19\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81?\x12\x08\x00swagger/favicon-16x16.pngUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(6B\xc8\xd7\x7f\x04\x00\x00u\x04\x00\x00\x19\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81V\x14\x08\x00swagger/favicon-32x32.pngUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(\xb9\xb1\xf1mT\x02\x00\x008\x05\x00\x00\x12\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81%\x19\x08\x00swagger/index.htmlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(]\x12r 9\x03\x00\x00T \x00\x00\x1c\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\xc2\x1b\x08\x00swagger/oauth2-redirect.htmlUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(-\xe3\xb5\x97=9\x05\x00\xf7\x0c\x1b\x00\x1c\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81N\x1f\x08\x00swagger/swagger-ui-bundle.jsUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(v\xf2\x8aA\x86\xba\x01\x00\xc5\x87\x08\x00'\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\xdeX\x0d\x00swagger/swagger-ui-standalone-preset.jsUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(_;\x94/\xe8Y\x00\x00\xa8X\x02\x00\x16\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\xc2\x13\x0f\x00swagger/swagger-ui.cssUT\x05\x00\x01\x80Cm8PK\x01\x02\x14\x03\x14\x00\x08\x00\x08\x00\x00\x00!(\x83mtT\xd4\xea\x02\x00\x1f\xa5(\x00\x14\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\xa4\x81\xf7m\x0f\x00swagger/swagger.yamlUT\x05\x00\x01\x80Cm8PK\x05\x06\x00\x00\x00\x00\n\x00\n\x00\x19\x03\x00\x00\x16Y\x12\x00\x00\x00" fs.Register(data) } \ No newline at end of file diff --git a/proto/symphony/stakeibc/query.proto b/proto/symphony/stakeibc/query.proto index 072054a324a..1400ada5f22 100644 --- a/proto/symphony/stakeibc/query.proto +++ b/proto/symphony/stakeibc/query.proto @@ -17,30 +17,24 @@ option go_package = "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types"; service Query { // Parameters queries the parameters of the module. rpc Params(QueryParamsRequest) returns (QueryParamsResponse) { - option (google.api.http).get = "/symphony/stakeibc/v1beta1/params"; - } - // Queries a Validator by host zone. - rpc Validators(QueryGetValidatorsRequest) - returns (QueryGetValidatorsResponse) { - option (google.api.http).get = - "/symphony/stakeibc/v1beta1/validators/{chain_id}"; + option (google.api.http).get = "/symphony/stakeibc/params"; } // Queries a HostZone by id. rpc HostZone(QueryGetHostZoneRequest) returns (QueryGetHostZoneResponse) { option (google.api.http).get = - "/symphony/stakeibc/v1beta1/host_zone/{chain_id}"; + "/symphony/stakeibc/host_zone/{chain_id}"; } // Queries a list of HostZone items. rpc HostZoneAll(QueryAllHostZoneRequest) returns (QueryAllHostZoneResponse) { - option (google.api.http).get = "/symphony/stakeibc/v1beta1/host_zone"; + option (google.api.http).get = "/symphony/stakeibc/host_zone"; } // Queries a list of ModuleAddress items. rpc ModuleAddress(QueryModuleAddressRequest) returns (QueryModuleAddressResponse) { option (google.api.http).get = - "/symphony/stakeibc/v1beta1/module_address/{name}"; + "/symphony/stakeibc/module_address/{name}"; } // QueryInterchainAccountFromAddress returns the interchain account for given // owner address on a given connection pair @@ -51,20 +45,20 @@ service Query { rpc EpochTracker(QueryGetEpochTrackerRequest) returns (QueryGetEpochTrackerResponse) { option (google.api.http).get = - "/symphony/stakeibc/v1beta1/epoch_tracker/{epoch_identifier}"; + "/symphony/stakeibc/epoch_tracker/{epoch_identifier}"; } // Queries a list of EpochTracker items. rpc EpochTrackerAll(QueryAllEpochTrackerRequest) returns (QueryAllEpochTrackerResponse) { - option (google.api.http).get = "/symphony/stakeibc/v1beta1/epoch_tracker"; + option (google.api.http).get = "/symphony/stakeibc/epoch_tracker"; } // Queries the next packet sequence for one for a given channel rpc NextPacketSequence(QueryGetNextPacketSequenceRequest) returns (QueryGetNextPacketSequenceResponse) { option (google.api.http).get = - "/symphony/stakeibc/v1beta1/next_packet_sequence/{channel_id}/" + "/symphony/stakeibc/next_packet_sequence/{channel_id}/" "{port_id}"; } @@ -72,13 +66,13 @@ service Query { rpc AddressUnbondings(QueryAddressUnbondings) returns (QueryAddressUnbondingsResponse) { option (google.api.http).get = - "/symphony/stakeibc/v1beta1/unbondings/{address}"; + "/symphony/stakeibc/unbondings/{address}"; } // Queries all trade routes rpc AllTradeRoutes(QueryAllTradeRoutes) returns (QueryAllTradeRoutesResponse) { - option (google.api.http).get = "/symphony/stakeibc/v1beta1/trade_routes"; + option (google.api.http).get = "/symphony/stakeibc/trade_routes"; } } diff --git a/proto/symphony/stakeibc/tx.proto b/proto/symphony/stakeibc/tx.proto index 644b627b92c..642f4bb1b20 100644 --- a/proto/symphony/stakeibc/tx.proto +++ b/proto/symphony/stakeibc/tx.proto @@ -7,6 +7,7 @@ import "cosmos/base/v1beta1/coin.proto"; import "cosmos/msg/v1/msg.proto"; import "gogoproto/gogo.proto"; import "symphony/stakeibc/validator.proto"; +import "google/api/annotations.proto"; option go_package = "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types"; @@ -14,13 +15,36 @@ option go_package = "github.com/osmosis-labs/osmosis/v27/x/stakeibc/types"; service Msg { option (cosmos.msg.v1.service) = true; - rpc LiquidStake(MsgLiquidStake) returns (MsgLiquidStakeResponse); - rpc LSMLiquidStake(MsgLSMLiquidStake) returns (MsgLSMLiquidStakeResponse); - rpc RedeemStake(MsgRedeemStake) returns (MsgRedeemStakeResponse); - rpc RegisterHostZone(MsgRegisterHostZone) - returns (MsgRegisterHostZoneResponse); - rpc ClaimUndelegatedTokens(MsgClaimUndelegatedTokens) - returns (MsgClaimUndelegatedTokensResponse); + rpc LiquidStake(MsgLiquidStake) returns (MsgLiquidStakeResponse) { + option (google.api.http) = { + post: "/symphony/stakeibc/liquid_stake" + body: "*" + }; + }; + rpc LSMLiquidStake(MsgLSMLiquidStake) returns (MsgLSMLiquidStakeResponse){ + option (google.api.http) = { + post: "/symphony/stakeibc/lsm_liquid_stake" + body: "*" + }; + }; + rpc RedeemStake(MsgRedeemStake) returns (MsgRedeemStakeResponse){ + option (google.api.http) = { + post: "/symphony/stakeibc/redeem_stake" + body: "*" + }; + }; + rpc RegisterHostZone(MsgRegisterHostZone) returns (MsgRegisterHostZoneResponse){ + option (google.api.http) = { + post: "/symphony/stakeibc/register_host_zone" + body: "*" + }; + }; + rpc ClaimUndelegatedTokens(MsgClaimUndelegatedTokens) returns (MsgClaimUndelegatedTokensResponse){ + option (google.api.http) = { + post: "/symphony/stakeibc/claim_undelegated_tokens" + body: "*" + }; + }; rpc RebalanceValidators(MsgRebalanceValidators) returns (MsgRebalanceValidatorsResponse); rpc AddValidators(MsgAddValidators) returns (MsgAddValidatorsResponse); diff --git a/x/stakeibc/client/cli/query.go b/x/stakeibc/client/cli/query.go index 4ccdd64e355..7c2de5be0ae 100644 --- a/x/stakeibc/client/cli/query.go +++ b/x/stakeibc/client/cli/query.go @@ -23,7 +23,6 @@ func GetQueryCmd(queryRoute string) *cobra.Command { } cmd.AddCommand(CmdQueryParams()) - cmd.AddCommand(CmdShowValidators()) cmd.AddCommand(CmdListHostZone()) cmd.AddCommand(CmdShowHostZone()) cmd.AddCommand(CmdModuleAddress()) @@ -60,34 +59,6 @@ func CmdQueryParams() *cobra.Command { return cmd } -func CmdShowValidators() *cobra.Command { - cmd := &cobra.Command{ - Use: "show-validators [chain-id]", - Short: "shows validators", - Args: cobra.ExactArgs(1), - RunE: func(cmd *cobra.Command, args []string) error { - clientCtx := client.GetClientContextFromCmd(cmd) - - queryClient := types.NewQueryClient(clientCtx) - - chainId := args[0] - - params := &types.QueryGetValidatorsRequest{ChainId: chainId} - - res, err := queryClient.Validators(context.Background(), params) - if err != nil { - return err - } - - return clientCtx.PrintProto(res) - }, - } - - flags.AddQueryFlagsToCmd(cmd) - - return cmd -} - func CmdListHostZone() *cobra.Command { cmd := &cobra.Command{ Use: "list-host-zone", diff --git a/x/stakeibc/types/query.pb.go b/x/stakeibc/types/query.pb.go index 2b4ef2bc82f..2c067ac25ff 100644 --- a/x/stakeibc/types/query.pb.go +++ b/x/stakeibc/types/query.pb.go @@ -1039,85 +1039,83 @@ func init() { func init() { proto.RegisterFile("symphony/stakeibc/query.proto", fileDescriptor_8488dc3be1ad8834) } var fileDescriptor_8488dc3be1ad8834 = []byte{ - // 1247 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x97, 0xdf, 0x6e, 0xdc, 0xc4, - 0x17, 0xc7, 0xe3, 0x26, 0xcd, 0x9f, 0x93, 0xa4, 0xfd, 0x65, 0x7e, 0x81, 0x6e, 0xdc, 0x64, 0x43, - 0x26, 0x24, 0xcd, 0x86, 0xd6, 0x4e, 0x96, 0x40, 0x10, 0x6d, 0x11, 0x1b, 0x44, 0x9a, 0x45, 0x22, - 0x0a, 0x4b, 0x41, 0x28, 0x5c, 0xac, 0xbc, 0xf6, 0xb0, 0x6b, 0xea, 0x9d, 0xd9, 0xda, 0xde, 0x90, - 0x34, 0x8a, 0x90, 0xfa, 0x04, 0x95, 0xe0, 0x06, 0x89, 0xbb, 0x22, 0x84, 0xb8, 0xe6, 0x21, 0x7a, - 0x59, 0xc4, 0x0d, 0x57, 0x11, 0x4a, 0x78, 0x82, 0x3e, 0x01, 0xf2, 0x78, 0xec, 0xf5, 0xae, 0xff, - 0x74, 0xd3, 0x3b, 0xcf, 0xcc, 0x39, 0x73, 0x3e, 0x3e, 0x67, 0xe6, 0x7c, 0x6d, 0x98, 0x73, 0x8e, - 0x9a, 0xad, 0x06, 0xa3, 0x47, 0xaa, 0xe3, 0x6a, 0x0f, 0x88, 0x59, 0xd3, 0xd5, 0x87, 0x6d, 0x62, - 0x1f, 0x29, 0x2d, 0x9b, 0xb9, 0x0c, 0x4d, 0x05, 0xcb, 0x4a, 0xb0, 0x2c, 0xaf, 0xea, 0xcc, 0x69, - 0x32, 0x47, 0xad, 0x69, 0x0e, 0xf1, 0x6d, 0xd5, 0x83, 0xf5, 0x1a, 0x71, 0xb5, 0x75, 0xb5, 0xa5, - 0xd5, 0x4d, 0xaa, 0xb9, 0x26, 0xa3, 0xbe, 0xbb, 0x3c, 0x5d, 0x67, 0x75, 0xc6, 0x1f, 0x55, 0xef, - 0x49, 0xcc, 0xce, 0xd6, 0x19, 0xab, 0x5b, 0x44, 0xd5, 0x5a, 0xa6, 0xaa, 0x51, 0xca, 0x5c, 0xee, - 0xe2, 0x88, 0xd5, 0x42, 0x9c, 0x48, 0x33, 0x0c, 0x9b, 0x38, 0x4e, 0xb5, 0x4d, 0x6b, 0x8c, 0x1a, - 0x26, 0xad, 0x0b, 0xd3, 0xa5, 0xb8, 0x29, 0x69, 0x31, 0xbd, 0x51, 0x75, 0x6d, 0x4d, 0x7f, 0x40, - 0x6c, 0x61, 0xb6, 0x10, 0x37, 0x6b, 0x30, 0xc7, 0xad, 0x3e, 0x62, 0x94, 0x08, 0x93, 0x7c, 0xdc, - 0xa4, 0xa5, 0xd9, 0x5a, 0x33, 0x80, 0x5a, 0x8c, 0xaf, 0xbb, 0xb6, 0x66, 0x90, 0xaa, 0xcd, 0xda, - 0x2e, 0x49, 0x8f, 0x73, 0xa0, 0x59, 0xa6, 0xa1, 0xb9, 0x4c, 0xa0, 0xe0, 0xef, 0x61, 0xe5, 0x33, - 0x2f, 0x65, 0x65, 0xea, 0x12, 0x5b, 0x6f, 0x68, 0x26, 0x2d, 0xe9, 0x3a, 0x6b, 0x53, 0x77, 0xdb, - 0x66, 0xcd, 0x92, 0xff, 0x9a, 0x15, 0xf2, 0xb0, 0x4d, 0x1c, 0x17, 0x4d, 0xc3, 0x65, 0xf6, 0x1d, - 0x25, 0x76, 0x4e, 0x7a, 0x43, 0x5a, 0x19, 0xab, 0xf8, 0x03, 0x74, 0x17, 0x26, 0x75, 0x46, 0x29, - 0xd1, 0xbd, 0x9c, 0x55, 0x4d, 0x23, 0x77, 0xc9, 0x5b, 0xdd, 0xca, 0xbd, 0x38, 0x9d, 0x9f, 0x3e, - 0xd2, 0x9a, 0xd6, 0xfb, 0xb8, 0x6b, 0x19, 0x57, 0x26, 0x3a, 0xe3, 0xb2, 0x81, 0x9f, 0x48, 0x50, - 0xe8, 0x83, 0xc0, 0x69, 0x31, 0xea, 0x10, 0xa4, 0x83, 0x6c, 0x86, 0x76, 0x55, 0xcd, 0x37, 0xac, - 0x8a, 0x72, 0xf8, 0x5c, 0x5b, 0x4b, 0x2f, 0x4e, 0xe7, 0x17, 0xfc, 0xc8, 0xe9, 0xb6, 0xb8, 0x92, - 0x33, 0x7b, 0x03, 0x8a, 0x60, 0x78, 0x1a, 0x10, 0x27, 0xda, 0xe3, 0x09, 0x17, 0x6f, 0x8f, 0x77, - 0xe1, 0xff, 0x5d, 0xb3, 0x82, 0x68, 0x13, 0x86, 0xfd, 0xc2, 0xf0, 0xe8, 0xe3, 0xc5, 0x19, 0x25, - 0x76, 0x42, 0x15, 0xdf, 0x65, 0x6b, 0xe8, 0xd9, 0xe9, 0xfc, 0x40, 0x45, 0x98, 0xe3, 0x77, 0x61, - 0x86, 0xef, 0x77, 0x8f, 0xb8, 0x5f, 0x06, 0x45, 0x09, 0x53, 0x3d, 0x03, 0xa3, 0x3e, 0xb6, 0x69, - 0x88, 0x6c, 0x8f, 0xf0, 0x71, 0xd9, 0xc0, 0xfb, 0x20, 0x27, 0xf9, 0x09, 0x9c, 0x3b, 0x00, 0x61, - 0x89, 0x3d, 0xa4, 0xc1, 0x95, 0xf1, 0xe2, 0x6c, 0x02, 0x52, 0xe8, 0x5a, 0x89, 0xd8, 0xe3, 0x0d, - 0xb8, 0x16, 0xec, 0xbd, 0xc3, 0x1c, 0x77, 0x9f, 0x51, 0xd2, 0x17, 0x51, 0x2e, 0xee, 0x25, 0x78, - 0x3e, 0x80, 0xb1, 0xf0, 0x68, 0x8b, 0x0c, 0x5d, 0x4f, 0xc0, 0x09, 0xfc, 0x44, 0x8e, 0x46, 0x1b, - 0x62, 0x8c, 0x35, 0x41, 0x54, 0xb2, 0xac, 0x5e, 0xa2, 0x6d, 0x80, 0xce, 0xfd, 0x16, 0x7b, 0x2f, - 0x2b, 0x7e, 0x33, 0x50, 0xbc, 0x66, 0xa0, 0xf8, 0x8d, 0x43, 0x34, 0x03, 0x65, 0x4f, 0xab, 0x07, - 0xbe, 0x95, 0x88, 0x27, 0x7e, 0x2a, 0x09, 0xfe, 0xae, 0x18, 0xc9, 0xfc, 0x83, 0x17, 0xe4, 0x47, - 0xf7, 0xba, 0x20, 0x2f, 0x71, 0xc8, 0x1b, 0x2f, 0x85, 0xf4, 0x83, 0x77, 0x51, 0xaa, 0xe2, 0xb8, - 0x7c, 0xca, 0x8c, 0xb6, 0x45, 0x7a, 0x6e, 0x26, 0x82, 0x21, 0xaa, 0x35, 0x89, 0x28, 0x0c, 0x7f, - 0xc6, 0x6b, 0xe2, 0x9c, 0xf4, 0x38, 0x88, 0xf7, 0x42, 0x30, 0xe4, 0xdd, 0x84, 0xc0, 0xc3, 0x7b, - 0xc6, 0x3b, 0x70, 0x3d, 0xa8, 0xe3, 0xc7, 0x5e, 0xd7, 0xba, 0xef, 0x37, 0xad, 0x20, 0x48, 0x01, - 0xfe, 0xe7, 0x37, 0x33, 0xd3, 0x20, 0xd4, 0x35, 0xbf, 0x31, 0xc3, 0x4e, 0x70, 0x95, 0xcf, 0x97, - 0xc3, 0x69, 0xfc, 0x2d, 0xcc, 0x26, 0xef, 0x24, 0xa2, 0x7f, 0x02, 0x93, 0x5d, 0x7d, 0x51, 0x54, - 0x6f, 0x3e, 0x21, 0xb3, 0x51, 0x7f, 0x91, 0xdd, 0x09, 0x12, 0x99, 0xc3, 0x73, 0x82, 0xba, 0x64, - 0x59, 0x09, 0xd4, 0x21, 0x4a, 0x6c, 0x39, 0x1d, 0x65, 0xf0, 0x55, 0x51, 0xbe, 0x86, 0x85, 0xe0, - 0xb5, 0x77, 0xc9, 0xa1, 0xbb, 0xe7, 0xcd, 0xba, 0x9f, 0x7b, 0x20, 0x54, 0x0f, 0x8f, 0xed, 0x1c, - 0x80, 0xde, 0xd0, 0x28, 0x25, 0x56, 0xe7, 0x2a, 0x8d, 0x89, 0x99, 0xb2, 0x81, 0xae, 0xc1, 0x48, - 0x8b, 0xd9, 0x6e, 0xd8, 0x48, 0x2b, 0xc3, 0xde, 0xb0, 0x6c, 0xe0, 0x0f, 0x01, 0x67, 0x6d, 0x2e, - 0x5e, 0x47, 0x86, 0x51, 0x47, 0xcc, 0xf1, 0xbd, 0x87, 0x2a, 0xe1, 0x18, 0x17, 0xe1, 0x75, 0x3f, - 0x15, 0xfe, 0x59, 0xf8, 0x22, 0x10, 0x2f, 0x07, 0xe5, 0x60, 0xa4, 0xab, 0x87, 0x56, 0x82, 0x21, - 0x7e, 0x04, 0xf9, 0x64, 0x9f, 0x30, 0xe2, 0x57, 0x80, 0x62, 0x72, 0x18, 0x74, 0x9e, 0xc5, 0x84, - 0x2c, 0xf6, 0xee, 0x24, 0x32, 0x39, 0xa5, 0xf5, 0x46, 0xc0, 0xaf, 0x89, 0x8e, 0x5b, 0xb2, 0xac, - 0xfb, 0x9e, 0xb6, 0x55, 0x3c, 0x69, 0x73, 0x30, 0xe9, 0x14, 0x3c, 0x32, 0x1d, 0xf2, 0x6c, 0xc3, - 0x44, 0x44, 0x09, 0x03, 0x92, 0xb9, 0x04, 0x92, 0x8e, 0xb7, 0x60, 0x18, 0x77, 0x3b, 0xfb, 0x15, - 0x7f, 0xbb, 0x02, 0x97, 0x79, 0x1c, 0xf4, 0x58, 0x82, 0x61, 0xbf, 0x85, 0xa3, 0xa5, 0x84, 0x6d, - 0xe2, 0x5a, 0x21, 0x2f, 0xbf, 0xcc, 0xcc, 0x67, 0xc5, 0x85, 0xc7, 0x7f, 0xfd, 0xfb, 0xc3, 0xa5, - 0x45, 0xb4, 0xa0, 0x26, 0x28, 0x75, 0xf8, 0x0d, 0xc3, 0x23, 0x3f, 0x95, 0x00, 0x3a, 0xfd, 0x1e, - 0xdd, 0x4c, 0x8b, 0x90, 0x24, 0x27, 0xf2, 0xad, 0x3e, 0xad, 0x05, 0xd6, 0x7b, 0x1c, 0xab, 0x88, - 0xd6, 0x32, 0xb0, 0x3a, 0xaa, 0xa1, 0x1e, 0x07, 0xc2, 0x70, 0x82, 0x7e, 0x96, 0x60, 0x34, 0xe8, - 0x85, 0x68, 0x35, 0x23, 0x6a, 0x4f, 0x33, 0x97, 0xdf, 0xea, 0xcb, 0x56, 0xf0, 0x6d, 0x72, 0xbe, - 0x75, 0xa4, 0x66, 0xf0, 0x85, 0x5d, 0x3b, 0x8a, 0xf7, 0xa3, 0x04, 0xe3, 0xc1, 0x6e, 0x25, 0xcb, - 0x4a, 0x27, 0x8c, 0xcb, 0x4d, 0x3a, 0x61, 0x82, 0x6c, 0xe0, 0x9b, 0x9c, 0x70, 0x19, 0xbd, 0xd9, - 0x0f, 0x21, 0xfa, 0x55, 0x82, 0xc9, 0xae, 0x36, 0x9d, 0x5e, 0xde, 0xa4, 0xf6, 0x9f, 0x5e, 0xde, - 0xc4, 0xde, 0xdf, 0x57, 0x79, 0x9b, 0xdc, 0x33, 0xf8, 0x5a, 0x52, 0x8f, 0x3d, 0x49, 0x39, 0x41, - 0x3f, 0x49, 0x30, 0x9b, 0xf5, 0x9d, 0x86, 0x6e, 0xa7, 0x91, 0xf4, 0xf1, 0x7d, 0x29, 0xdf, 0x79, - 0x35, 0x67, 0x71, 0xef, 0xff, 0x90, 0x60, 0x22, 0xda, 0xa1, 0x91, 0x92, 0x71, 0xa4, 0x12, 0x94, - 0x42, 0x56, 0xfb, 0xb6, 0x17, 0x79, 0xfc, 0x88, 0xe7, 0xf1, 0x2e, 0xba, 0x9d, 0x91, 0xc7, 0x2e, - 0x6d, 0x51, 0x8f, 0x7b, 0x05, 0xf4, 0x04, 0xfd, 0x22, 0xc1, 0xd5, 0xe8, 0xee, 0xde, 0xb1, 0x54, - 0x32, 0x8e, 0xda, 0x85, 0xc8, 0x53, 0x44, 0x0f, 0xaf, 0x71, 0xf2, 0x55, 0xb4, 0xd2, 0x2f, 0x39, - 0xfa, 0x53, 0x02, 0x14, 0x97, 0x1d, 0xb4, 0x91, 0x91, 0xb3, 0x54, 0x09, 0x94, 0xdf, 0xb9, 0xa0, - 0x97, 0xa0, 0xde, 0xe5, 0xd4, 0x3b, 0x68, 0x3b, 0x83, 0x9a, 0x92, 0x43, 0xb7, 0xda, 0xe2, 0xfe, - 0xd5, 0x40, 0xf8, 0x78, 0x07, 0x10, 0x82, 0x7b, 0xa2, 0x1e, 0x0b, 0x79, 0x3d, 0x41, 0xbf, 0x4b, - 0x30, 0x15, 0xd7, 0xc2, 0x42, 0x6a, 0x32, 0x7b, 0x4d, 0xe5, 0xf5, 0xbe, 0x4d, 0x2f, 0xd4, 0xba, - 0x3a, 0x32, 0xaa, 0x1e, 0x8b, 0x0b, 0xc8, 0xaf, 0xde, 0x95, 0x6e, 0xc5, 0x43, 0xcb, 0x19, 0x65, - 0x8f, 0xd8, 0xc9, 0x4a, 0x7f, 0x76, 0x21, 0xa3, 0xca, 0x19, 0x0b, 0xe8, 0x46, 0x06, 0x63, 0x54, - 0x62, 0xb7, 0x76, 0x9f, 0x9d, 0xe5, 0xa5, 0xe7, 0x67, 0x79, 0xe9, 0x9f, 0xb3, 0xbc, 0xf4, 0xe4, - 0x3c, 0x3f, 0xf0, 0xfc, 0x3c, 0x3f, 0xf0, 0xf7, 0x79, 0x7e, 0x60, 0x7f, 0xa3, 0x6e, 0xba, 0x8d, - 0x76, 0x4d, 0xd1, 0x59, 0x53, 0xe5, 0xdf, 0xbc, 0xa6, 0x73, 0xcb, 0xd2, 0x6a, 0x4e, 0x30, 0x50, - 0x0f, 0x8a, 0x9b, 0xea, 0x61, 0xe4, 0x1f, 0xf6, 0xa8, 0x45, 0x9c, 0xda, 0x30, 0xff, 0x37, 0x7d, - 0xfb, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0d, 0xee, 0x83, 0xbb, 0x0c, 0x10, 0x00, 0x00, + // 1216 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x97, 0x4d, 0x6f, 0x1b, 0x45, + 0x18, 0xc7, 0xb3, 0x6d, 0x9a, 0xa6, 0x4f, 0x52, 0x4a, 0x87, 0x40, 0x9d, 0x6d, 0xe2, 0x34, 0x53, + 0xf2, 0x0a, 0xdd, 0x69, 0xd2, 0x94, 0x4a, 0xb4, 0x54, 0x75, 0x24, 0xd2, 0x1a, 0x89, 0x28, 0x98, + 0x82, 0x50, 0x38, 0x58, 0xe3, 0xdd, 0xc1, 0x5e, 0xba, 0x9e, 0x71, 0x77, 0xd7, 0x21, 0x2f, 0xb2, + 0x90, 0x38, 0x73, 0x28, 0x82, 0x0b, 0x12, 0xe2, 0x00, 0x57, 0xbe, 0x00, 0xdf, 0xa0, 0xdc, 0x2a, + 0x71, 0xe1, 0x14, 0xa1, 0x84, 0x4f, 0xd0, 0x4f, 0x80, 0x76, 0x76, 0x76, 0xfd, 0xb2, 0xbb, 0x8e, + 0xd3, 0x9b, 0x67, 0xe6, 0x79, 0xf9, 0xed, 0x33, 0x33, 0xff, 0x67, 0x0c, 0xd3, 0xde, 0x5e, 0xbd, + 0x51, 0x13, 0x7c, 0x8f, 0x78, 0x3e, 0x7d, 0xc2, 0xec, 0x8a, 0x49, 0x9e, 0x36, 0x99, 0xbb, 0x67, + 0x34, 0x5c, 0xe1, 0x0b, 0x74, 0x39, 0x5a, 0x36, 0xa2, 0x65, 0x7d, 0xd9, 0x14, 0x5e, 0x5d, 0x78, + 0xa4, 0x42, 0x3d, 0x16, 0xda, 0x92, 0x9d, 0x95, 0x0a, 0xf3, 0xe9, 0x0a, 0x69, 0xd0, 0xaa, 0xcd, + 0xa9, 0x6f, 0x0b, 0x1e, 0xba, 0xeb, 0x13, 0x55, 0x51, 0x15, 0xf2, 0x27, 0x09, 0x7e, 0xa9, 0xd9, + 0xa9, 0xaa, 0x10, 0x55, 0x87, 0x11, 0xda, 0xb0, 0x09, 0xe5, 0x5c, 0xf8, 0xd2, 0xc5, 0x53, 0xab, + 0x4b, 0x49, 0x22, 0x6a, 0x59, 0x2e, 0xf3, 0xbc, 0x72, 0x93, 0x57, 0x04, 0xb7, 0x6c, 0x5e, 0x55, + 0xa6, 0x73, 0x49, 0x53, 0xd6, 0x10, 0x66, 0xad, 0xec, 0xbb, 0xd4, 0x7c, 0xc2, 0x5c, 0x65, 0x36, + 0x9b, 0x34, 0xab, 0x09, 0xcf, 0x2f, 0xef, 0x0b, 0xce, 0x94, 0x49, 0x3e, 0x69, 0xd2, 0xa0, 0x2e, + 0xad, 0x47, 0x50, 0xd7, 0x93, 0xeb, 0xbe, 0x4b, 0x2d, 0x56, 0x76, 0x45, 0xd3, 0x67, 0xd9, 0x79, + 0x76, 0xa8, 0x63, 0x5b, 0xd4, 0x17, 0x0a, 0x05, 0x7f, 0x0b, 0x8b, 0x9f, 0x04, 0x25, 0x2b, 0x72, + 0x9f, 0xb9, 0x66, 0x8d, 0xda, 0xbc, 0x60, 0x9a, 0xa2, 0xc9, 0xfd, 0x0d, 0x57, 0xd4, 0x0b, 0xe1, + 0x67, 0x96, 0xd8, 0xd3, 0x26, 0xf3, 0x7c, 0x34, 0x01, 0xe7, 0xc4, 0x37, 0x9c, 0xb9, 0x39, 0xed, + 0x9a, 0xb6, 0x78, 0xa1, 0x14, 0x0e, 0xd0, 0x07, 0x70, 0xd1, 0x14, 0x9c, 0x33, 0x33, 0xa8, 0x59, + 0xd9, 0xb6, 0x72, 0x67, 0x82, 0xd5, 0xf5, 0xdc, 0xcb, 0xc3, 0x99, 0x89, 0x3d, 0x5a, 0x77, 0xde, + 0xc7, 0x5d, 0xcb, 0xb8, 0x34, 0xde, 0x1e, 0x17, 0x2d, 0xfc, 0x4c, 0x83, 0xa5, 0x01, 0x08, 0xbc, + 0x86, 0xe0, 0x1e, 0x43, 0x26, 0xe8, 0x76, 0x6c, 0x57, 0xa6, 0xa1, 0x61, 0x59, 0x6d, 0x47, 0xc8, + 0xb5, 0x3e, 0xf7, 0xf2, 0x70, 0x66, 0x36, 0xcc, 0x9c, 0x6d, 0x8b, 0x4b, 0x39, 0xbb, 0x37, 0xa1, + 0x4a, 0x86, 0x27, 0x00, 0x49, 0xa2, 0x2d, 0x59, 0x70, 0xf5, 0xf5, 0x78, 0x13, 0xde, 0xe8, 0x9a, + 0x55, 0x44, 0x77, 0x60, 0x24, 0xdc, 0x18, 0x99, 0x7d, 0x6c, 0x75, 0xd2, 0x48, 0x9c, 0x50, 0x23, + 0x74, 0x59, 0x1f, 0x7e, 0x7e, 0x38, 0x33, 0x54, 0x52, 0xe6, 0xf8, 0x3d, 0x98, 0x94, 0xf1, 0x1e, + 0x32, 0xff, 0xf3, 0x68, 0x53, 0xe2, 0x52, 0x4f, 0xc2, 0x68, 0x88, 0x6d, 0x5b, 0xaa, 0xda, 0xe7, + 0xe5, 0xb8, 0x68, 0xe1, 0x6d, 0xd0, 0xd3, 0xfc, 0x14, 0xce, 0x3d, 0x80, 0x78, 0x8b, 0x03, 0xa4, + 0xb3, 0x8b, 0x63, 0xab, 0x53, 0x29, 0x48, 0xb1, 0x6b, 0xa9, 0xc3, 0x1e, 0xaf, 0xc1, 0x95, 0x28, + 0xf6, 0x23, 0xe1, 0xf9, 0xdb, 0x82, 0xb3, 0x81, 0x88, 0x72, 0x49, 0x2f, 0xc5, 0x73, 0x1f, 0x2e, + 0xc4, 0x47, 0x5b, 0x55, 0xe8, 0x6a, 0x0a, 0x4e, 0xe4, 0xa7, 0x6a, 0x34, 0x5a, 0x53, 0x63, 0x4c, + 0x15, 0x51, 0xc1, 0x71, 0x7a, 0x89, 0x36, 0x00, 0xda, 0xf7, 0x5b, 0xc5, 0x9e, 0x37, 0x42, 0x31, + 0x30, 0x02, 0x31, 0x30, 0x42, 0xe1, 0x50, 0x62, 0x60, 0x6c, 0xd1, 0x6a, 0xe4, 0x5b, 0xea, 0xf0, + 0xc4, 0xbf, 0x6b, 0x8a, 0xbf, 0x2b, 0x47, 0x3a, 0xff, 0xd9, 0x53, 0xf2, 0xa3, 0x87, 0x5d, 0x90, + 0x67, 0x24, 0xe4, 0xc2, 0x89, 0x90, 0x61, 0xf2, 0x2e, 0x4a, 0xa2, 0x8e, 0xcb, 0xc7, 0xc2, 0x6a, + 0x3a, 0xac, 0xe7, 0x66, 0x22, 0x18, 0xe6, 0xb4, 0xce, 0xd4, 0xc6, 0xc8, 0xdf, 0xf8, 0xa6, 0x3a, + 0x27, 0x3d, 0x0e, 0xea, 0xbb, 0x10, 0x0c, 0x07, 0x37, 0x21, 0xf2, 0x08, 0x7e, 0xe3, 0x47, 0x70, + 0x35, 0xda, 0xc7, 0x0f, 0x03, 0xd5, 0x7a, 0x1c, 0x8a, 0x56, 0x94, 0x64, 0x09, 0x5e, 0x0f, 0xc5, + 0xcc, 0xb6, 0x18, 0xf7, 0xed, 0xaf, 0xec, 0x58, 0x09, 0x2e, 0xc9, 0xf9, 0x62, 0x3c, 0x8d, 0xbf, + 0x86, 0xa9, 0xf4, 0x48, 0x2a, 0xfb, 0x47, 0x70, 0xb1, 0x4b, 0x17, 0xd5, 0xee, 0xcd, 0xa4, 0x54, + 0xb6, 0xd3, 0x5f, 0x55, 0x77, 0x9c, 0x75, 0xcc, 0xe1, 0x69, 0x45, 0x5d, 0x70, 0x9c, 0x14, 0xea, + 0x18, 0x25, 0xb1, 0x9c, 0x8d, 0x72, 0xf6, 0x55, 0x51, 0xbe, 0x84, 0xd9, 0xe8, 0xb3, 0x37, 0xd9, + 0xae, 0xbf, 0x15, 0xcc, 0xfa, 0x9f, 0x06, 0x20, 0xdc, 0x8c, 0x8f, 0xed, 0x34, 0x80, 0x59, 0xa3, + 0x9c, 0x33, 0xa7, 0x7d, 0x95, 0x2e, 0xa8, 0x99, 0xa2, 0x85, 0xae, 0xc0, 0xf9, 0x86, 0x70, 0xfd, + 0x58, 0x48, 0x4b, 0x23, 0xc1, 0xb0, 0x68, 0xe1, 0x07, 0x80, 0xfb, 0x05, 0x57, 0x9f, 0xa3, 0xc3, + 0xa8, 0xa7, 0xe6, 0x64, 0xec, 0xe1, 0x52, 0x3c, 0xc6, 0xab, 0xf0, 0x56, 0x58, 0x8a, 0xf0, 0x2c, + 0x7c, 0x16, 0x35, 0x2f, 0x0f, 0xe5, 0xe0, 0x7c, 0x97, 0x86, 0x96, 0xa2, 0x21, 0xde, 0x87, 0x7c, + 0xba, 0x4f, 0x9c, 0xf1, 0x0b, 0x40, 0x89, 0x76, 0x18, 0x29, 0xcf, 0xf5, 0x94, 0x2a, 0xf6, 0x46, + 0x52, 0x95, 0xbc, 0x4c, 0x7b, 0x33, 0xe0, 0x37, 0x95, 0xe2, 0x16, 0x1c, 0xe7, 0x71, 0xd0, 0xdb, + 0x4a, 0x41, 0x6b, 0xf3, 0x30, 0x6b, 0x6f, 0x78, 0xc7, 0x74, 0xcc, 0xb3, 0x01, 0xe3, 0x1d, 0x9d, + 0x30, 0x22, 0x99, 0x4e, 0x21, 0x69, 0x7b, 0x2b, 0x86, 0x31, 0xbf, 0x1d, 0x6f, 0xf5, 0xcf, 0x71, + 0x38, 0x27, 0xf3, 0xa0, 0x7d, 0x18, 0x09, 0x15, 0x1c, 0xcd, 0xa5, 0x44, 0x49, 0xb6, 0x0a, 0x7d, + 0xfe, 0x24, 0xb3, 0x10, 0x15, 0xcf, 0x7e, 0xf7, 0xf7, 0x7f, 0x3f, 0x9e, 0xb9, 0x8a, 0x26, 0x49, + 0x56, 0xb7, 0x47, 0x3f, 0x69, 0x30, 0x1a, 0x89, 0x0b, 0x5a, 0xce, 0x8a, 0x9b, 0xd4, 0x6b, 0xfd, + 0x9d, 0x81, 0x6c, 0x15, 0x08, 0x91, 0x20, 0x4b, 0x68, 0x81, 0xf4, 0x79, 0x99, 0x90, 0x83, 0xa8, + 0x01, 0xb4, 0xd0, 0xf7, 0x1a, 0x8c, 0x45, 0x51, 0x0a, 0x8e, 0x93, 0x4d, 0x96, 0xd4, 0xed, 0x6c, + 0xb2, 0x14, 0xfd, 0xc5, 0x6f, 0x4b, 0xb2, 0x3c, 0x9a, 0xea, 0x47, 0x86, 0x7e, 0xd5, 0xe0, 0x62, + 0x97, 0xce, 0xa1, 0x77, 0xb3, 0x92, 0xa4, 0xe9, 0xa7, 0x7e, 0x63, 0x40, 0x6b, 0x05, 0x75, 0x53, + 0x42, 0x2d, 0xa3, 0xc5, 0x14, 0xa8, 0xba, 0xf4, 0x88, 0x9e, 0x19, 0xe4, 0x20, 0xd0, 0xe2, 0x16, + 0xfa, 0x59, 0x83, 0xa9, 0x7e, 0x0f, 0x1c, 0x74, 0x37, 0x8b, 0x60, 0x80, 0x87, 0x99, 0x7e, 0xef, + 0xd5, 0x9c, 0xd5, 0x85, 0xf9, 0x43, 0x83, 0xf1, 0x4e, 0x69, 0x43, 0x46, 0x9f, 0xa3, 0x93, 0x22, + 0xb1, 0x3a, 0x19, 0xd8, 0x5e, 0xd5, 0xef, 0xae, 0xac, 0xdf, 0x6d, 0x74, 0x8b, 0x9c, 0xf0, 0x5e, + 0x26, 0x07, 0xbd, 0x1d, 0xa7, 0x85, 0x7e, 0xd1, 0xe0, 0x52, 0x67, 0xd4, 0xe0, 0xf8, 0x19, 0x7d, + 0x8e, 0xd4, 0xa9, 0x88, 0x33, 0xba, 0x04, 0x5e, 0x94, 0xc4, 0x18, 0x5d, 0x3b, 0x89, 0x18, 0xfd, + 0xa5, 0x01, 0x4a, 0xea, 0x33, 0x5a, 0xeb, 0x53, 0xa3, 0xcc, 0x5e, 0xa1, 0xdf, 0x3e, 0xa5, 0x97, + 0xa2, 0xdd, 0x90, 0xb4, 0x0f, 0xd0, 0xfd, 0x14, 0x5a, 0xce, 0x76, 0xfd, 0x72, 0x43, 0xfa, 0x95, + 0xa3, 0xce, 0x20, 0x6f, 0xb6, 0xea, 0x48, 0x2d, 0x72, 0xa0, 0xfa, 0x4f, 0x0b, 0xfd, 0xa6, 0xc1, + 0xe5, 0x64, 0xb3, 0x58, 0xca, 0x2c, 0x5e, 0xaf, 0xa9, 0xbe, 0x32, 0xb0, 0xe9, 0x40, 0x52, 0xd4, + 0xee, 0x2f, 0xe4, 0x40, 0x5d, 0xb0, 0x16, 0xfa, 0x41, 0x83, 0xd7, 0xba, 0x5b, 0x01, 0x9a, 0xef, + 0xb3, 0xbd, 0x1d, 0x76, 0xba, 0x31, 0x98, 0x5d, 0xcc, 0xb6, 0x20, 0xd9, 0x66, 0xd1, 0x0c, 0xe9, + 0xfb, 0xef, 0xcb, 0x5b, 0xdf, 0x7c, 0x7e, 0x94, 0xd7, 0x5e, 0x1c, 0xe5, 0xb5, 0x7f, 0x8f, 0xf2, + 0xda, 0xb3, 0xe3, 0xfc, 0xd0, 0x8b, 0xe3, 0xfc, 0xd0, 0x3f, 0xc7, 0xf9, 0xa1, 0xed, 0xb5, 0xaa, + 0xed, 0xd7, 0x9a, 0x15, 0xc3, 0x14, 0x75, 0x22, 0x1f, 0x81, 0xb6, 0x77, 0xc3, 0xa1, 0x15, 0x2f, + 0x1a, 0x90, 0x9d, 0xd5, 0x3b, 0x64, 0xb7, 0x23, 0xec, 0x5e, 0x83, 0x79, 0x95, 0x11, 0xf9, 0x67, + 0xed, 0xd6, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x29, 0x83, 0x66, 0x6c, 0x1d, 0x0f, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1134,8 +1132,6 @@ const _ = grpc.SupportPackageIsVersion4 type QueryClient interface { // Parameters queries the parameters of the module. Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) - // Queries a Validator by host zone. - Validators(ctx context.Context, in *QueryGetValidatorsRequest, opts ...grpc.CallOption) (*QueryGetValidatorsResponse, error) // Queries a HostZone by id. HostZone(ctx context.Context, in *QueryGetHostZoneRequest, opts ...grpc.CallOption) (*QueryGetHostZoneResponse, error) // Queries a list of HostZone items. @@ -1174,15 +1170,6 @@ func (c *queryClient) Params(ctx context.Context, in *QueryParamsRequest, opts . return out, nil } -func (c *queryClient) Validators(ctx context.Context, in *QueryGetValidatorsRequest, opts ...grpc.CallOption) (*QueryGetValidatorsResponse, error) { - out := new(QueryGetValidatorsResponse) - err := c.cc.Invoke(ctx, "/symphony.stakeibc.Query/Validators", in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *queryClient) HostZone(ctx context.Context, in *QueryGetHostZoneRequest, opts ...grpc.CallOption) (*QueryGetHostZoneResponse, error) { out := new(QueryGetHostZoneResponse) err := c.cc.Invoke(ctx, "/symphony.stakeibc.Query/HostZone", in, out, opts...) @@ -1268,8 +1255,6 @@ func (c *queryClient) AllTradeRoutes(ctx context.Context, in *QueryAllTradeRoute type QueryServer interface { // Parameters queries the parameters of the module. Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) - // Queries a Validator by host zone. - Validators(context.Context, *QueryGetValidatorsRequest) (*QueryGetValidatorsResponse, error) // Queries a HostZone by id. HostZone(context.Context, *QueryGetHostZoneRequest) (*QueryGetHostZoneResponse, error) // Queries a list of HostZone items. @@ -1298,9 +1283,6 @@ type UnimplementedQueryServer struct { func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsRequest) (*QueryParamsResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Params not implemented") } -func (*UnimplementedQueryServer) Validators(ctx context.Context, req *QueryGetValidatorsRequest) (*QueryGetValidatorsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method Validators not implemented") -} func (*UnimplementedQueryServer) HostZone(ctx context.Context, req *QueryGetHostZoneRequest) (*QueryGetHostZoneResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method HostZone not implemented") } @@ -1351,24 +1333,6 @@ func _Query_Params_Handler(srv interface{}, ctx context.Context, dec func(interf return interceptor(ctx, in, info, handler) } -func _Query_Validators_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(QueryGetValidatorsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(QueryServer).Validators(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/symphony.stakeibc.Query/Validators", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(QueryServer).Validators(ctx, req.(*QueryGetValidatorsRequest)) - } - return interceptor(ctx, in, info, handler) -} - func _Query_HostZone_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(QueryGetHostZoneRequest) if err := dec(in); err != nil { @@ -1539,10 +1503,6 @@ var _Query_serviceDesc = grpc.ServiceDesc{ MethodName: "Params", Handler: _Query_Params_Handler, }, - { - MethodName: "Validators", - Handler: _Query_Validators_Handler, - }, { MethodName: "HostZone", Handler: _Query_HostZone_Handler, diff --git a/x/stakeibc/types/query.pb.gw.go b/x/stakeibc/types/query.pb.gw.go index 6c0620071c5..d779bad078c 100644 --- a/x/stakeibc/types/query.pb.gw.go +++ b/x/stakeibc/types/query.pb.gw.go @@ -51,60 +51,6 @@ func local_request_Query_Params_0(ctx context.Context, marshaler runtime.Marshal } -func request_Query_Validators_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetValidatorsRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["chain_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "chain_id") - } - - protoReq.ChainId, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "chain_id", err) - } - - msg, err := client.Validators(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Query_Validators_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq QueryGetValidatorsRequest - var metadata runtime.ServerMetadata - - var ( - val string - ok bool - err error - _ = err - ) - - val, ok = pathParams["chain_id"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "chain_id") - } - - protoReq.ChainId, err = runtime.String(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "chain_id", err) - } - - msg, err := server.Validators(ctx, &protoReq) - return msg, metadata, err - -} - func request_Query_HostZone_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq QueryGetHostZoneRequest var metadata runtime.ServerMetadata @@ -498,29 +444,6 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) - mux.Handle("GET", pattern_Query_Validators_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Query_Validators_0(rctx, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_Validators_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("GET", pattern_Query_HostZone_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -766,26 +689,6 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) - mux.Handle("GET", pattern_Query_Validators_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := request_Query_Validators_0(rctx, inboundMarshaler, client, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Query_Validators_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - - }) - mux.Handle("GET", pattern_Query_HostZone_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -950,32 +853,28 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie } var ( - pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"symphony", "stakeibc", "v1beta1", "params"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"symphony", "stakeibc", "params"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_Validators_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"symphony", "stakeibc", "v1beta1", "validators", "chain_id"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_HostZone_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"symphony", "stakeibc", "host_zone", "chain_id"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_HostZone_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"symphony", "stakeibc", "v1beta1", "host_zone", "chain_id"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_HostZoneAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"symphony", "stakeibc", "host_zone"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_HostZoneAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"symphony", "stakeibc", "v1beta1", "host_zone"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_ModuleAddress_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"symphony", "stakeibc", "module_address", "name"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_ModuleAddress_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"symphony", "stakeibc", "v1beta1", "module_address", "name"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_EpochTracker_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"symphony", "stakeibc", "epoch_tracker", "epoch_identifier"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_EpochTracker_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"symphony", "stakeibc", "v1beta1", "epoch_tracker", "epoch_identifier"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_EpochTrackerAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"symphony", "stakeibc", "epoch_tracker"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_EpochTrackerAll_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"symphony", "stakeibc", "v1beta1", "epoch_tracker"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_NextPacketSequence_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"symphony", "stakeibc", "next_packet_sequence", "channel_id", "port_id"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_NextPacketSequence_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5}, []string{"symphony", "stakeibc", "v1beta1", "next_packet_sequence", "channel_id", "port_id"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_AddressUnbondings_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"symphony", "stakeibc", "unbondings", "address"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_AddressUnbondings_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"symphony", "stakeibc", "v1beta1", "unbondings", "address"}, "", runtime.AssumeColonVerbOpt(false))) - - pattern_Query_AllTradeRoutes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3}, []string{"symphony", "stakeibc", "v1beta1", "trade_routes"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_AllTradeRoutes_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"symphony", "stakeibc", "trade_routes"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( forward_Query_Params_0 = runtime.ForwardResponseMessage - forward_Query_Validators_0 = runtime.ForwardResponseMessage - forward_Query_HostZone_0 = runtime.ForwardResponseMessage forward_Query_HostZoneAll_0 = runtime.ForwardResponseMessage diff --git a/x/stakeibc/types/tx.pb.go b/x/stakeibc/types/tx.pb.go index d80c616cf3d..6a69fc2535d 100644 --- a/x/stakeibc/types/tx.pb.go +++ b/x/stakeibc/types/tx.pb.go @@ -14,6 +14,7 @@ import ( _ "github.com/cosmos/gogoproto/gogoproto" grpc1 "github.com/cosmos/gogoproto/grpc" proto "github.com/cosmos/gogoproto/proto" + _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" @@ -2471,176 +2472,182 @@ func init() { func init() { proto.RegisterFile("symphony/stakeibc/tx.proto", fileDescriptor_c5b8d3ef903e18f4) } var fileDescriptor_c5b8d3ef903e18f4 = []byte{ - // 2696 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5a, 0x4d, 0x6c, 0xdc, 0xc6, - 0xf5, 0xd7, 0x5a, 0x9f, 0x7e, 0x92, 0x2c, 0x89, 0x92, 0xec, 0x15, 0x65, 0x69, 0x25, 0x2a, 0x31, - 0x14, 0x25, 0xd2, 0x46, 0x92, 0x93, 0x00, 0xca, 0x3f, 0x7f, 0x54, 0x92, 0x5d, 0x57, 0x4d, 0x64, - 0x1b, 0x94, 0x92, 0x02, 0x09, 0x50, 0x62, 0x96, 0x1c, 0xef, 0xb2, 0x26, 0x39, 0x5b, 0x0e, 0x57, - 0x5e, 0xa5, 0x3d, 0x04, 0x39, 0x05, 0xbd, 0xb4, 0x3d, 0xf5, 0x56, 0xe4, 0xd4, 0x43, 0x4f, 0x39, - 0xe4, 0xd0, 0x63, 0x0f, 0x45, 0x91, 0x4b, 0x81, 0x34, 0x87, 0xb6, 0x08, 0x0a, 0x35, 0x48, 0x0a, - 0xa4, 0xe8, 0xd1, 0x40, 0x81, 0x9e, 0x8a, 0x62, 0x66, 0xc8, 0x59, 0x92, 0x4b, 0xee, 0xae, 0x05, - 0xa5, 0xc9, 0xc5, 0x32, 0x67, 0xde, 0xbc, 0x8f, 0xdf, 0xbc, 0xf7, 0x66, 0xde, 0x9b, 0x05, 0x95, - 0x9e, 0xba, 0xf5, 0x1a, 0xf1, 0x4e, 0xcb, 0x34, 0x40, 0x0f, 0xb1, 0x5d, 0x31, 0xcb, 0x41, 0x73, - 0xa3, 0xee, 0x93, 0x80, 0x28, 0x53, 0xd1, 0xdc, 0x46, 0x34, 0xa7, 0x4e, 0x21, 0xd7, 0xf6, 0x48, - 0x99, 0xff, 0x2b, 0xa8, 0xd4, 0x39, 0x93, 0x50, 0x97, 0x50, 0x83, 0x7f, 0x95, 0xc5, 0x47, 0x38, - 0xb5, 0x28, 0xbe, 0xca, 0x15, 0x44, 0x71, 0xf9, 0x64, 0xb3, 0x82, 0x03, 0xb4, 0x59, 0x36, 0x89, - 0xed, 0x85, 0xf3, 0xd7, 0xc2, 0x79, 0x97, 0x56, 0xcb, 0x27, 0x9b, 0xec, 0x4f, 0x38, 0x31, 0x53, - 0x25, 0x55, 0x22, 0x18, 0xb2, 0xff, 0x85, 0xa3, 0xcb, 0xed, 0xba, 0x9e, 0x20, 0xc7, 0xb6, 0x50, - 0x40, 0x7c, 0x41, 0xa2, 0xbd, 0xd7, 0x0f, 0xda, 0x21, 0xad, 0xbe, 0x5e, 0xb7, 0x50, 0x80, 0x0f, - 0x3c, 0x0f, 0xfb, 0x3a, 0xb6, 0xb0, 0x5b, 0x0f, 0x6c, 0xe2, 0xe9, 0x28, 0xc0, 0x7b, 0xa4, 0xe1, - 0x59, 0x54, 0xd9, 0x82, 0x61, 0xd3, 0xc7, 0x6c, 0x5d, 0xb1, 0xb0, 0x54, 0x58, 0xbd, 0xbc, 0x57, - 0xfc, 0xe4, 0xc3, 0xf5, 0x99, 0x50, 0xf7, 0x5d, 0xcb, 0xf2, 0x31, 0xa5, 0x47, 0x81, 0x6f, 0x7b, - 0x55, 0x3d, 0x22, 0x54, 0xe6, 0x60, 0xc4, 0xac, 0x21, 0xdb, 0x33, 0x6c, 0xab, 0x78, 0x89, 0x2d, - 0xd2, 0x87, 0xf9, 0xf7, 0x81, 0xa5, 0x38, 0x30, 0xe7, 0xb2, 0x09, 0x26, 0xcf, 0xf0, 0xa5, 0x40, - 0xc3, 0x47, 0x01, 0x2e, 0xf6, 0x73, 0x01, 0x9b, 0x1f, 0x9d, 0x95, 0xfa, 0x3e, 0x3d, 0x2b, 0xcd, - 0x0b, 0x21, 0xd4, 0x7a, 0xb8, 0x61, 0x93, 0xb2, 0x8b, 0x82, 0xda, 0xc6, 0x6b, 0xb8, 0x8a, 0xcc, - 0xd3, 0x5b, 0xd8, 0xfc, 0xe4, 0xc3, 0x75, 0x08, 0x75, 0xb8, 0x85, 0x4d, 0xfd, 0xaa, 0x6b, 0x7b, - 0x19, 0x26, 0x70, 0x69, 0xa8, 0x99, 0x23, 0x6d, 0xe0, 0xfc, 0xd2, 0x50, 0x33, 0x43, 0xda, 0xce, - 0x4b, 0xef, 0x7e, 0xf9, 0xc1, 0x5a, 0x04, 0xc2, 0x4f, 0xbe, 0xfc, 0x60, 0xed, 0x86, 0x04, 0x5f, - 0x02, 0x9d, 0x85, 0xb1, 0xf6, 0x1c, 0xac, 0x75, 0xdf, 0x09, 0x1d, 0xd3, 0x3a, 0xf1, 0x28, 0xd6, - 0x7e, 0x57, 0x80, 0x2b, 0x87, 0xb4, 0xfa, 0x9a, 0xfd, 0xc3, 0x86, 0x6d, 0x1d, 0x31, 0x09, 0xe7, - 0xda, 0xa4, 0x17, 0x60, 0x08, 0xb9, 0xa4, 0xe1, 0x05, 0x62, 0x8b, 0xf6, 0x16, 0x42, 0x20, 0x66, - 0xdb, 0x81, 0x38, 0xf0, 0x02, 0x3d, 0x24, 0x56, 0x16, 0x00, 0x6a, 0x84, 0x06, 0x86, 0x85, 0x3d, - 0xe2, 0x8a, 0x1d, 0xd3, 0x2f, 0xb3, 0x91, 0x5b, 0x6c, 0x60, 0x67, 0x35, 0x8d, 0xc1, 0xb5, 0x38, - 0x06, 0x31, 0x9d, 0xb5, 0x77, 0x0a, 0x70, 0x35, 0x39, 0x14, 0x59, 0xa8, 0x3c, 0x80, 0x11, 0x1a, - 0x18, 0x01, 0x79, 0x88, 0x3d, 0x6e, 0xcf, 0xe8, 0xd6, 0xdc, 0x46, 0x68, 0x0c, 0x8b, 0x8f, 0x8d, - 0x30, 0x3e, 0x36, 0xf6, 0x89, 0xed, 0xed, 0x3d, 0xcf, 0xf4, 0xfe, 0xf5, 0xdf, 0x4a, 0xab, 0x55, - 0x3b, 0xa8, 0x35, 0x2a, 0x1b, 0x26, 0x71, 0xc3, 0xd0, 0x0a, 0xff, 0xac, 0x53, 0xeb, 0x61, 0x39, - 0x38, 0xad, 0x63, 0xca, 0x17, 0x50, 0x7d, 0x98, 0x06, 0xc7, 0x8c, 0xb7, 0xf6, 0x69, 0x01, 0xa6, - 0x98, 0x0a, 0x47, 0x87, 0x5f, 0x13, 0x98, 0xeb, 0x30, 0xed, 0x50, 0x57, 0x58, 0x6a, 0xd8, 0x15, - 0x33, 0x81, 0xea, 0xa4, 0x43, 0x5d, 0xae, 0xe7, 0x41, 0xc5, 0x14, 0xe0, 0x3e, 0x9b, 0x06, 0x57, - 0x4d, 0x80, 0x9b, 0x30, 0x43, 0xbb, 0x0b, 0x73, 0x6d, 0x83, 0x12, 0xe1, 0x4d, 0x98, 0x09, 0x7c, - 0xe4, 0x51, 0x64, 0xf2, 0x78, 0x30, 0x89, 0x5b, 0x77, 0x70, 0x80, 0xb9, 0xc1, 0x23, 0xfa, 0x74, - 0x6c, 0x6e, 0x3f, 0x9c, 0xd2, 0xfe, 0x5a, 0x80, 0x89, 0x43, 0x5a, 0xdd, 0x77, 0x30, 0xf2, 0xf7, - 0x90, 0x83, 0x3c, 0x13, 0x5f, 0x74, 0x72, 0x68, 0xa1, 0xd8, 0xff, 0x24, 0x28, 0x16, 0x81, 0x71, - 0xf0, 0x3c, 0xec, 0x88, 0x98, 0xd6, 0xa3, 0xcf, 0x9d, 0x67, 0xd2, 0x80, 0x15, 0xe3, 0x80, 0xc5, - 0x4d, 0xd1, 0xe6, 0xe0, 0x5a, 0x6a, 0x48, 0x06, 0xdc, 0xbf, 0x45, 0xc0, 0xb1, 0xa0, 0xc4, 0xee, - 0xff, 0xdc, 0x47, 0xe6, 0x81, 0x87, 0x97, 0xf1, 0x36, 0xf1, 0xc2, 0x0c, 0xa9, 0x8f, 0xb0, 0x81, - 0x37, 0x89, 0x87, 0x95, 0x9b, 0x30, 0xe2, 0x63, 0x13, 0xdb, 0x27, 0xd8, 0x0f, 0xf3, 0x59, 0xbe, - 0x22, 0x92, 0xb2, 0x4b, 0x90, 0xc6, 0xec, 0xd4, 0x8a, 0x3c, 0x46, 0x63, 0x23, 0x12, 0x94, 0xcf, - 0x86, 0x60, 0x9a, 0x4f, 0x55, 0x6d, 0x1a, 0x60, 0xff, 0x3b, 0x91, 0x46, 0xaf, 0xc0, 0xb8, 0x49, - 0x3c, 0x0f, 0x0b, 0xc7, 0x8a, 0xf6, 0x78, 0xaf, 0xf8, 0xf8, 0xac, 0x34, 0x73, 0x8a, 0x5c, 0x67, - 0x47, 0x4b, 0x4c, 0x6b, 0xfa, 0x58, 0xeb, 0xfb, 0xc0, 0x52, 0x34, 0x18, 0xab, 0x60, 0xb3, 0xb6, - 0xbd, 0x55, 0xf7, 0xf1, 0x03, 0xbb, 0x59, 0x1c, 0xe3, 0x06, 0x27, 0xc6, 0x94, 0x9b, 0x89, 0x14, - 0x24, 0xcc, 0x9e, 0x7d, 0x7c, 0x56, 0x9a, 0x12, 0xfc, 0x5b, 0x73, 0x5a, 0x2c, 0x33, 0x29, 0x9b, - 0x70, 0xb9, 0x15, 0x61, 0x83, 0x7c, 0xd1, 0xcc, 0xe3, 0xb3, 0xd2, 0xa4, 0x58, 0x24, 0xa7, 0x34, - 0x7d, 0xc4, 0x0e, 0xe3, 0x2d, 0xbe, 0xcb, 0x43, 0xbd, 0xee, 0xf2, 0x5d, 0x10, 0xd1, 0xf3, 0x00, - 0xfb, 0x46, 0xe8, 0x86, 0x0c, 0x05, 0xe0, 0xeb, 0x17, 0x1f, 0x9f, 0x95, 0x54, 0x21, 0x30, 0x83, - 0x48, 0xd3, 0xa7, 0xa2, 0xd1, 0x7d, 0x31, 0x78, 0x60, 0x29, 0xdf, 0x86, 0xc9, 0x86, 0x57, 0x21, - 0x9e, 0x65, 0x7b, 0x55, 0xa3, 0x8e, 0x7d, 0x9b, 0x58, 0xc5, 0xd1, 0xa5, 0xc2, 0xea, 0xc0, 0xde, - 0xfc, 0xe3, 0xb3, 0xd2, 0x35, 0xc1, 0x2c, 0x4d, 0xa1, 0xe9, 0x13, 0x72, 0xe8, 0x3e, 0x1f, 0x51, - 0x10, 0x4c, 0xb3, 0x83, 0x37, 0x7d, 0x08, 0x8e, 0x9f, 0xf7, 0x10, 0x9c, 0x72, 0x6d, 0x2f, 0x75, - 0xda, 0x32, 0x11, 0xa8, 0xd9, 0x26, 0xe2, 0xca, 0xf9, 0x45, 0xa0, 0x66, 0x4a, 0xc4, 0x4b, 0x50, - 0x64, 0x09, 0xd3, 0xe1, 0x29, 0xcd, 0xe0, 0x5e, 0x6b, 0x60, 0x0f, 0x55, 0x1c, 0x6c, 0x15, 0x27, - 0x78, 0xee, 0x9a, 0x75, 0xa8, 0x1b, 0xcb, 0x78, 0xb7, 0xc5, 0xa4, 0x72, 0x1b, 0x4a, 0x26, 0x71, - 0xdd, 0x86, 0x67, 0x07, 0xa7, 0x46, 0x9d, 0x10, 0xc7, 0x08, 0x7c, 0x8c, 0x68, 0xc3, 0x3f, 0x35, - 0x90, 0xd8, 0xc8, 0xe2, 0x24, 0x77, 0xb5, 0xeb, 0x92, 0xec, 0x3e, 0x21, 0xce, 0x71, 0x48, 0x14, - 0x6e, 0xb6, 0x72, 0x13, 0xae, 0x31, 0x13, 0x5d, 0x4c, 0x29, 0xaa, 0x62, 0xca, 0xe0, 0x36, 0x6c, - 0x13, 0x19, 0x41, 0xb3, 0x38, 0xc5, 0x36, 0x45, 0x67, 0x08, 0x1c, 0x86, 0xb3, 0xf7, 0xb1, 0x7f, - 0x60, 0xa2, 0xe3, 0xe6, 0xce, 0x0b, 0xef, 0xbd, 0x5f, 0xea, 0xfb, 0xc7, 0xfb, 0xa5, 0xbe, 0x74, - 0xdc, 0x5d, 0x4f, 0xc6, 0x5d, 0x32, 0x94, 0xb4, 0x05, 0x98, 0xcf, 0x18, 0x96, 0x11, 0x78, 0x56, - 0xe0, 0x19, 0x7e, 0xdf, 0x41, 0xb6, 0xfb, 0xba, 0x67, 0x61, 0x07, 0x57, 0x51, 0x80, 0x2d, 0x7e, - 0x64, 0x9c, 0xef, 0xde, 0xb6, 0x04, 0x63, 0x32, 0xd5, 0xb4, 0xd2, 0x33, 0x44, 0xd9, 0xe6, 0xc0, - 0x52, 0x66, 0x60, 0x10, 0xd7, 0x89, 0x59, 0xe3, 0x89, 0x68, 0x40, 0x17, 0x1f, 0x8a, 0x1a, 0xcb, - 0x42, 0x83, 0x22, 0x43, 0xc9, 0x5c, 0xb3, 0x9d, 0xb6, 0x59, 0x4b, 0xa6, 0xe0, 0x2c, 0xe5, 0xbf, - 0x3b, 0x30, 0x32, 0x30, 0x39, 0xa8, 0xad, 0xc0, 0x72, 0x2e, 0x89, 0x44, 0xe1, 0xb7, 0x85, 0x30, - 0x45, 0x55, 0x44, 0xd6, 0x7e, 0x23, 0xba, 0xe6, 0x9e, 0x0f, 0x82, 0x44, 0xb6, 0xbd, 0x94, 0xca, - 0xb6, 0x2b, 0x30, 0xee, 0x35, 0x5c, 0xc3, 0x8f, 0x64, 0x85, 0x28, 0x8c, 0x79, 0x0d, 0x57, 0xca, - 0xdf, 0x79, 0x3e, 0x6d, 0x70, 0x29, 0xb9, 0xc9, 0x6d, 0x7a, 0x6a, 0x4b, 0xb0, 0x98, 0x3d, 0x23, - 0x8d, 0xfc, 0x43, 0x01, 0x26, 0x0f, 0x69, 0x75, 0xd7, 0xb2, 0xbe, 0x4a, 0xf3, 0xfe, 0x0f, 0x40, - 0x16, 0x09, 0xb4, 0xd8, 0xbf, 0xd4, 0xbf, 0x3a, 0xba, 0x75, 0x7d, 0xa3, 0xad, 0xb2, 0xd9, 0x90, - 0x3a, 0xe8, 0x31, 0xfa, 0x9d, 0xb5, 0xb4, 0xdd, 0x73, 0x71, 0xbb, 0x13, 0xaa, 0x6b, 0x2a, 0x14, - 0xd3, 0x63, 0xd2, 0xd6, 0x07, 0x30, 0x21, 0x47, 0xbf, 0x87, 0xed, 0x6a, 0x2d, 0x50, 0x5e, 0x86, - 0xe1, 0x28, 0x48, 0x85, 0xa5, 0xcb, 0x9f, 0x7c, 0xb8, 0xbe, 0x10, 0x5a, 0x2a, 0x89, 0x53, 0x26, - 0x87, 0x2b, 0x94, 0xab, 0x30, 0xf4, 0x88, 0xb3, 0xe1, 0xf6, 0x0e, 0xe8, 0xe1, 0x97, 0xf6, 0x38, - 0x0c, 0x9f, 0x1a, 0xf2, 0xaa, 0x38, 0x25, 0xf1, 0x2b, 0x00, 0xf7, 0x1e, 0x4c, 0x49, 0xb0, 0x0c, - 0xa1, 0x42, 0x84, 0xb1, 0xd6, 0x09, 0x63, 0xa1, 0x90, 0x3e, 0x79, 0x92, 0xd2, 0xb0, 0x5b, 0x60, - 0x65, 0x9a, 0x15, 0x85, 0x54, 0xe6, 0xa4, 0xdc, 0x81, 0x3f, 0x16, 0x40, 0x39, 0xa4, 0xd5, 0x5b, - 0x98, 0xdd, 0xfb, 0x24, 0xd5, 0x57, 0xe1, 0x6f, 0x23, 0x27, 0xc8, 0xe1, 0xf9, 0x37, 0xbc, 0xf0, - 0xf5, 0xb2, 0xaf, 0x27, 0xc8, 0x61, 0x23, 0x3b, 0xcf, 0xa5, 0xed, 0x9f, 0x8f, 0xdb, 0x9f, 0x52, - 0x5e, 0xbb, 0x0e, 0x6a, 0xfb, 0xa8, 0xb4, 0xf8, 0x9f, 0x85, 0x30, 0xd5, 0xd2, 0x80, 0xf8, 0xf8, - 0xc0, 0x0b, 0xb0, 0xcf, 0xef, 0xa4, 0xbb, 0xa6, 0xc9, 0xef, 0x60, 0x17, 0x7c, 0xcf, 0x5d, 0x49, - 0xdf, 0x91, 0xc4, 0xb5, 0x2e, 0x79, 0x13, 0x5a, 0x81, 0x71, 0x24, 0xc4, 0x1b, 0xe4, 0x91, 0x17, - 0xdd, 0xef, 0xf4, 0xb1, 0x70, 0xf0, 0x1e, 0x1b, 0xdb, 0xd9, 0x4a, 0x83, 0xb0, 0x9c, 0x4c, 0x36, - 0x19, 0xf6, 0x68, 0x4f, 0xc3, 0x4a, 0x07, 0x5b, 0x25, 0x26, 0xbf, 0x8c, 0x8e, 0x17, 0x42, 0xf1, - 0x2d, 0x91, 0x7c, 0x59, 0x39, 0x20, 0x2e, 0x26, 0x17, 0x8c, 0x48, 0x17, 0x3b, 0x32, 0x75, 0x90, - 0xc7, 0x43, 0x96, 0x7e, 0xd2, 0x8a, 0xbf, 0x17, 0x60, 0x49, 0xd6, 0xd6, 0x72, 0xe3, 0x8f, 0x6a, - 0xc8, 0xc7, 0xf4, 0x76, 0xd3, 0xac, 0xf1, 0x5b, 0xc5, 0x05, 0x6f, 0xef, 0xcb, 0xc0, 0x9c, 0x94, - 0xd4, 0xf1, 0x13, 0xba, 0x35, 0x5b, 0xb1, 0x73, 0x33, 0x8d, 0xc4, 0x4a, 0x7b, 0x13, 0xe1, 0x0d, - 0xe4, 0x24, 0x2d, 0xd0, 0xd6, 0x60, 0xb5, 0x9b, 0x95, 0x12, 0x92, 0x3f, 0x89, 0x13, 0x73, 0x1f, - 0x39, 0x76, 0x85, 0x5d, 0xd0, 0x5a, 0xe0, 0x7d, 0xa3, 0x80, 0xe8, 0x7c, 0x8e, 0x66, 0x68, 0x1f, - 0x9e, 0xa3, 0x19, 0x33, 0xd2, 0xf4, 0x9f, 0x8a, 0x82, 0x5f, 0xc7, 0xb4, 0xe1, 0x62, 0x59, 0xb2, - 0x5c, 0xb0, 0x2f, 0x77, 0xae, 0xd2, 0x93, 0xb2, 0xb5, 0x79, 0x1e, 0x64, 0xc9, 0x41, 0xa9, 0xee, - 0x6f, 0x46, 0x78, 0x8d, 0xb5, 0xcf, 0x58, 0xe1, 0x63, 0x1f, 0x59, 0x58, 0x27, 0x8d, 0x00, 0x2b, - 0x2f, 0xc2, 0x65, 0xd4, 0x08, 0x6a, 0xc4, 0xb7, 0x83, 0xd3, 0xae, 0x2a, 0xb7, 0x48, 0x15, 0x0d, - 0xc6, 0x79, 0x36, 0x4e, 0x69, 0x3e, 0xca, 0x06, 0xf7, 0xc3, 0x3d, 0xdb, 0x83, 0x45, 0x1a, 0xf8, - 0xb6, 0x85, 0x8d, 0x80, 0x18, 0x3e, 0x7e, 0x84, 0x7c, 0xcb, 0xc8, 0x4a, 0x56, 0xaa, 0xa0, 0x3a, - 0x26, 0x3a, 0xa7, 0xd9, 0x8f, 0xa7, 0xae, 0x6f, 0xc1, 0x42, 0x8b, 0x47, 0xc0, 0xf4, 0x4e, 0xb1, - 0x10, 0xa9, 0x6c, 0x2e, 0x62, 0xc1, 0x4d, 0x4b, 0x70, 0x38, 0x00, 0x51, 0xc6, 0xb5, 0x74, 0xc8, - 0x2a, 0xaa, 0xc4, 0x5d, 0x73, 0x81, 0x51, 0x46, 0x7a, 0x1c, 0xb7, 0x15, 0x50, 0xaf, 0xc2, 0x4a, - 0xc4, 0x22, 0x52, 0x26, 0x8b, 0x17, 0x2f, 0xf0, 0xf4, 0x45, 0x41, 0x1a, 0xaa, 0xd4, 0xce, 0xec, - 0x0e, 0x2c, 0x87, 0x2c, 0x88, 0x21, 0x14, 0xcc, 0x60, 0x35, 0x2c, 0x0a, 0x09, 0x4e, 0x78, 0x4c, - 0xd8, 0xae, 0xb6, 0x33, 0x2a, 0xc3, 0x4c, 0xa8, 0x15, 0xaf, 0x3a, 0x0d, 0xe2, 0x71, 0x7e, 0xc5, - 0x11, 0xbe, 0x76, 0x4a, 0xcc, 0xf1, 0x2a, 0xf4, 0x9e, 0xc7, 0x38, 0x28, 0xdb, 0x70, 0x35, 0xbd, - 0x40, 0x7c, 0x17, 0x2f, 0xf3, 0x25, 0xd3, 0x89, 0x25, 0x02, 0x0c, 0x65, 0x13, 0x66, 0xd3, 0x8b, - 0xb8, 0x56, 0xa2, 0x1c, 0xd5, 0x95, 0xc4, 0x1a, 0x6e, 0xb2, 0xb2, 0x0e, 0xd3, 0xad, 0x02, 0xba, - 0xb5, 0x60, 0x54, 0xb4, 0xa4, 0x64, 0x39, 0x1d, 0x91, 0x3f, 0x0b, 0x4a, 0x92, 0x9c, 0x5b, 0x21, - 0xaa, 0xf6, 0x89, 0x18, 0x35, 0xb7, 0x61, 0x1e, 0x86, 0x79, 0xe9, 0x65, 0x5b, 0xbc, 0xee, 0x1c, - 0xd8, 0xbb, 0x54, 0x2c, 0xe8, 0x43, 0x6c, 0xe8, 0xc0, 0x52, 0xfe, 0x1f, 0x54, 0x56, 0x5a, 0x21, - 0xc7, 0x21, 0x8f, 0xb0, 0x65, 0xd0, 0x47, 0xa8, 0x6e, 0x38, 0x84, 0xd2, 0x78, 0x11, 0xc9, 0xe8, - 0xaf, 0xba, 0xa8, 0xb9, 0x2b, 0x88, 0x8e, 0x1e, 0xa1, 0xfa, 0x6b, 0x84, 0x52, 0x9e, 0xc4, 0x6f, - 0xc3, 0x04, 0x2b, 0x70, 0xf9, 0xba, 0xb0, 0xcf, 0x32, 0xd1, 0x4b, 0x9f, 0x65, 0xdc, 0xb5, 0x3d, - 0xc6, 0x68, 0x57, 0xb4, 0x5b, 0x18, 0x1b, 0xd4, 0x4c, 0xb0, 0x99, 0xec, 0x8d, 0x0d, 0x6a, 0xc6, - 0xd8, 0x1c, 0x8a, 0x72, 0x5b, 0xba, 0x47, 0xc8, 0x6a, 0xaa, 0x17, 0x56, 0xac, 0xb4, 0x8e, 0x3c, - 0x46, 0xb0, 0xdb, 0x29, 0xb3, 0x9c, 0xd2, 0x8a, 0xe4, 0xb6, 0xda, 0x31, 0x9d, 0x22, 0xc2, 0xda, - 0x31, 0x3d, 0x1c, 0xaf, 0x9a, 0xa6, 0xe5, 0x7d, 0xe8, 0x02, 0x32, 0xcb, 0x32, 0x8c, 0xc5, 0x1d, - 0x2d, 0x4a, 0x2c, 0x31, 0xff, 0xea, 0xd6, 0x38, 0xee, 0x66, 0x61, 0x5a, 0xd5, 0xd0, 0xc2, 0xf4, - 0xb0, 0xb4, 0xf0, 0x3f, 0xfd, 0xdc, 0x42, 0x71, 0x24, 0x7e, 0x13, 0x2c, 0x8c, 0x7b, 0xff, 0xc0, - 0x13, 0x7a, 0xff, 0x60, 0x57, 0xef, 0xbf, 0xd3, 0xee, 0xfd, 0xa2, 0x65, 0x55, 0xea, 0xe8, 0x6b, - 0xc5, 0x42, 0xda, 0xff, 0xef, 0xb4, 0xfb, 0xff, 0x70, 0xaf, 0x8c, 0xbe, 0xce, 0x08, 0x48, 0x6f, - 0x74, 0xe8, 0x1f, 0xe9, 0x61, 0xe9, 0x1f, 0xbf, 0xbf, 0xc4, 0x4f, 0xde, 0x23, 0x1c, 0xec, 0xc7, - 0x1b, 0x3e, 0xac, 0x0a, 0xbf, 0xf8, 0x1b, 0xe1, 0x2d, 0x18, 0xf5, 0x39, 0xe3, 0xf8, 0x3b, 0xd7, - 0x4a, 0x0f, 0x1d, 0x31, 0x1d, 0xc4, 0x3a, 0xbe, 0xc7, 0x06, 0x2c, 0xc4, 0x1b, 0x5f, 0xec, 0x4f, - 0xf8, 0x74, 0x10, 0x62, 0x3b, 0xd0, 0x0b, 0xb6, 0x73, 0x4e, 0xab, 0x3b, 0x66, 0x1d, 0x89, 0x97, - 0x90, 0x10, 0xe3, 0xce, 0x25, 0x65, 0x36, 0x54, 0xe1, 0x35, 0x3c, 0x7b, 0x52, 0xa2, 0xfd, 0xab, - 0x4b, 0xbc, 0xe2, 0x3f, 0x26, 0xd5, 0xaa, 0x83, 0xa3, 0xe3, 0x3e, 0xf0, 0x89, 0xe3, 0x60, 0xff, - 0xa2, 0xc1, 0x7e, 0x1d, 0xa6, 0xea, 0xd8, 0x77, 0x6d, 0x4a, 0xf9, 0xd3, 0x06, 0xaf, 0x75, 0x39, - 0xe4, 0x57, 0xb6, 0x56, 0x33, 0x2a, 0xed, 0xdd, 0x46, 0x50, 0x7b, 0xfb, 0xbe, 0x5c, 0x20, 0x6a, - 0x63, 0x7d, 0xb2, 0x9e, 0x1a, 0x51, 0x8a, 0xad, 0x26, 0x44, 0xf8, 0xca, 0x10, 0xeb, 0x30, 0x38, - 0x7c, 0xc3, 0x78, 0x9c, 0x8e, 0xe8, 0xe1, 0x57, 0x97, 0xa2, 0x26, 0x13, 0x0b, 0x4d, 0xe3, 0xe5, - 0x4a, 0xe6, 0x9c, 0x04, 0xf3, 0xcf, 0x05, 0xfe, 0x56, 0x21, 0x5c, 0x3b, 0xba, 0x34, 0xde, 0x47, - 0x3e, 0x72, 0xe9, 0xb9, 0xd3, 0x5b, 0x07, 0x3c, 0x3b, 0xf4, 0x3c, 0xfb, 0xf3, 0x7b, 0x9e, 0xdb, - 0xed, 0xf1, 0xba, 0xd4, 0x1e, 0xaf, 0x49, 0xed, 0xb5, 0x65, 0x28, 0xe5, 0x4c, 0x45, 0xc6, 0xaf, - 0x6d, 0xc0, 0x6c, 0xe6, 0x8e, 0x29, 0x97, 0x61, 0xf0, 0x8e, 0xbe, 0x7b, 0xf7, 0x78, 0xb2, 0x4f, - 0x01, 0x18, 0xd2, 0x6f, 0xbf, 0x71, 0xef, 0xd5, 0xdb, 0x93, 0x85, 0xad, 0x7f, 0x4d, 0x43, 0xff, - 0x21, 0xad, 0x2a, 0x6f, 0xc1, 0x68, 0xfc, 0x91, 0x6f, 0x39, 0xc3, 0x13, 0x92, 0xaf, 0x91, 0xea, - 0x33, 0x5d, 0x49, 0xe4, 0x73, 0x9a, 0x05, 0x57, 0x52, 0x8f, 0x88, 0x4f, 0xe5, 0x2c, 0x4e, 0x50, - 0xa9, 0xcf, 0xf5, 0x42, 0x25, 0xa5, 0xbc, 0x05, 0xa3, 0xf1, 0x37, 0xa8, 0x1c, 0x13, 0x62, 0x24, - 0x79, 0x26, 0x64, 0xbc, 0xe7, 0x28, 0x3f, 0x80, 0xc9, 0xb6, 0xb7, 0x9c, 0x1b, 0x79, 0xcb, 0x93, - 0x74, 0xea, 0x46, 0x6f, 0x74, 0x52, 0xd6, 0x8f, 0xe1, 0x6a, 0x4e, 0xd7, 0x3a, 0x07, 0x90, 0x6c, - 0x6a, 0xf5, 0xe6, 0x93, 0x50, 0x4b, 0xe9, 0x14, 0xa6, 0xb3, 0xba, 0xc5, 0xb9, 0x58, 0xb5, 0x91, - 0xaa, 0x9b, 0x3d, 0x93, 0x4a, 0xa1, 0x08, 0xc6, 0x93, 0xdd, 0xdb, 0x95, 0x6c, 0x1e, 0x09, 0x22, - 0xf5, 0xd9, 0x1e, 0x88, 0xa4, 0x88, 0x1f, 0xc1, 0x6c, 0x66, 0x63, 0x2f, 0x17, 0xd4, 0xcc, 0x2e, - 0x60, 0x2e, 0xa8, 0x1d, 0x7b, 0x86, 0x4a, 0x15, 0x26, 0xd2, 0xfd, 0xc2, 0xa7, 0xb3, 0x19, 0xa5, - 0xc8, 0xd4, 0xf5, 0x9e, 0xc8, 0xa4, 0xa0, 0x77, 0x0b, 0x50, 0xcc, 0xed, 0xd3, 0xe5, 0x3a, 0x62, - 0x36, 0xbd, 0xfa, 0xe2, 0x93, 0xd1, 0x27, 0x1d, 0x38, 0xb3, 0x2f, 0x96, 0xeb, 0xc0, 0x59, 0xd4, - 0xf9, 0x0e, 0xdc, 0xa9, 0xa7, 0xa5, 0xfc, 0xbc, 0x00, 0x0b, 0x9d, 0x1b, 0x5a, 0xdb, 0xd9, 0x7c, - 0x3b, 0x2e, 0x52, 0x5f, 0x3e, 0xc7, 0xa2, 0x78, 0x50, 0x65, 0x35, 0x94, 0x72, 0x82, 0x2a, 0x83, - 0x34, 0x2f, 0xa8, 0x3a, 0xb4, 0x73, 0x94, 0xef, 0xc3, 0x58, 0xe2, 0xe7, 0x08, 0x5a, 0x1e, 0x9c, - 0x2d, 0x1a, 0x75, 0xad, 0x3b, 0x8d, 0xe4, 0xff, 0x8b, 0x02, 0x94, 0xba, 0xfd, 0x3e, 0xea, 0x85, - 0x4e, 0xa8, 0xe5, 0x2e, 0x53, 0x5f, 0x39, 0xd7, 0xb2, 0xf8, 0x81, 0x93, 0x6a, 0x62, 0x3d, 0x95, - 0xeb, 0xca, 0x31, 0xaa, 0xbc, 0x03, 0x27, 0xbb, 0xff, 0xc4, 0xce, 0x84, 0xb6, 0xde, 0x53, 0xce, - 0x99, 0x90, 0xa6, 0xcb, 0x3b, 0x13, 0xf2, 0x2a, 0x52, 0x26, 0xab, 0xad, 0x1a, 0xbd, 0xd1, 0x29, - 0x35, 0x74, 0x97, 0x95, 0x57, 0x1b, 0x32, 0x59, 0x6d, 0x75, 0xe1, 0x8d, 0x4e, 0x1b, 0xd2, 0x5d, - 0x56, 0x5e, 0x9d, 0xc1, 0x52, 0x45, 0x4e, 0x8d, 0x91, 0xb3, 0x17, 0xd9, 0xd4, 0x79, 0xa9, 0xa2, - 0xf3, 0xbd, 0x5b, 0x39, 0x85, 0xd9, 0xec, 0x3b, 0x77, 0xce, 0xc9, 0x92, 0x49, 0xac, 0x6e, 0x3f, - 0x01, 0xb1, 0x14, 0x7d, 0x02, 0x33, 0x99, 0x37, 0xd4, 0xb5, 0x4e, 0x00, 0x26, 0x69, 0xd5, 0xad, - 0xde, 0x69, 0x23, 0xb9, 0xea, 0xe0, 0x3b, 0x5f, 0x7e, 0xb0, 0x56, 0xd8, 0xbb, 0xfb, 0xd1, 0xe7, - 0x8b, 0x85, 0x8f, 0x3f, 0x5f, 0x2c, 0x7c, 0xf6, 0xf9, 0x62, 0xe1, 0x67, 0x5f, 0x2c, 0xf6, 0x7d, - 0xfc, 0xc5, 0x62, 0xdf, 0x5f, 0xbe, 0x58, 0xec, 0x7b, 0xf3, 0x66, 0xec, 0x87, 0x62, 0xfc, 0x56, - 0x6c, 0xd3, 0x75, 0x07, 0x55, 0x68, 0xf4, 0x51, 0x3e, 0xd9, 0x7a, 0xa9, 0xdc, 0x8c, 0xfd, 0xc8, - 0xf3, 0xb4, 0x8e, 0x69, 0x65, 0x88, 0xff, 0x6a, 0x72, 0xfb, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, - 0x13, 0x3f, 0x49, 0xba, 0x06, 0x2a, 0x00, 0x00, + // 2797 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x3a, 0x4d, 0x6c, 0xdc, 0xc6, + 0xd5, 0xa2, 0xf5, 0xeb, 0x91, 0x64, 0xad, 0x28, 0xc9, 0x5e, 0xad, 0x2c, 0xad, 0x44, 0x25, 0x86, + 0x22, 0x47, 0xbb, 0x96, 0xe4, 0x24, 0x80, 0xf2, 0xe5, 0x43, 0x25, 0xd9, 0x75, 0xd5, 0x44, 0xb6, + 0x41, 0x29, 0x29, 0x90, 0x43, 0x89, 0x59, 0x72, 0xbc, 0xcb, 0x9a, 0xe4, 0x6c, 0x39, 0x5c, 0x79, + 0x95, 0xf6, 0x10, 0xe4, 0xd2, 0xa0, 0x97, 0xb6, 0x68, 0x81, 0x5e, 0x8a, 0x22, 0xa7, 0x1e, 0x7a, + 0xca, 0xc1, 0x87, 0x1e, 0x7b, 0x28, 0x8a, 0x5c, 0x0a, 0xa4, 0x29, 0xd0, 0x16, 0x41, 0xa1, 0x06, + 0x49, 0x80, 0x14, 0x45, 0x4f, 0x3e, 0xf5, 0x54, 0x14, 0xf3, 0xc3, 0x59, 0x92, 0x4b, 0xee, 0xae, + 0x04, 0xb9, 0xc9, 0xc5, 0x32, 0xdf, 0xbc, 0x79, 0xff, 0xef, 0xcd, 0xbc, 0x37, 0x0b, 0x0a, 0xe4, + 0xd8, 0xad, 0xd7, 0xb0, 0x77, 0x5c, 0x26, 0x01, 0x7c, 0x88, 0xec, 0x8a, 0x59, 0x0e, 0x9a, 0xa5, + 0xba, 0x8f, 0x03, 0xac, 0x4e, 0x86, 0x6b, 0xa5, 0x70, 0xad, 0x30, 0x09, 0x5d, 0xdb, 0xc3, 0x65, + 0xf6, 0x2f, 0xc7, 0x2a, 0xcc, 0x9a, 0x98, 0xb8, 0x98, 0x18, 0xec, 0xab, 0xcc, 0x3f, 0xc4, 0xd2, + 0x02, 0xff, 0x2a, 0x57, 0x20, 0x41, 0xe5, 0xa3, 0xf5, 0x0a, 0x0a, 0xe0, 0x7a, 0xd9, 0xc4, 0xb6, + 0x27, 0xd6, 0xaf, 0x88, 0x75, 0x97, 0x54, 0xcb, 0x47, 0xeb, 0xf4, 0x8f, 0x58, 0x98, 0xae, 0xe2, + 0x2a, 0xe6, 0x04, 0xe9, 0xff, 0x04, 0x74, 0xa9, 0x5d, 0xd6, 0x23, 0xe8, 0xd8, 0x16, 0x0c, 0xb0, + 0x2f, 0x50, 0xae, 0x56, 0x31, 0xae, 0x3a, 0xa8, 0x0c, 0xeb, 0x76, 0x19, 0x7a, 0x1e, 0x0e, 0x60, + 0x60, 0x63, 0x4f, 0xc8, 0xa3, 0xbd, 0xdb, 0x0f, 0xb4, 0x7d, 0x52, 0x7d, 0xbd, 0x6e, 0xc1, 0x00, + 0xed, 0x79, 0x1e, 0xf2, 0x75, 0x64, 0x21, 0xb7, 0x4e, 0x71, 0x74, 0x18, 0xa0, 0x1d, 0xdc, 0xf0, + 0x2c, 0xa2, 0x6e, 0x80, 0x61, 0xd3, 0x47, 0x94, 0x6a, 0x5e, 0x59, 0x54, 0x56, 0x2e, 0xee, 0xe4, + 0x3f, 0x7a, 0xbc, 0x36, 0x2d, 0x34, 0xdb, 0xb6, 0x2c, 0x1f, 0x11, 0x72, 0x10, 0xf8, 0xb6, 0x57, + 0xd5, 0x43, 0x44, 0x75, 0x16, 0x8c, 0x98, 0x35, 0x68, 0x7b, 0x86, 0x6d, 0xe5, 0x2f, 0xd0, 0x4d, + 0xfa, 0x30, 0xfb, 0xde, 0xb3, 0x54, 0x07, 0xcc, 0xba, 0x74, 0x81, 0xf2, 0x33, 0x7c, 0xc9, 0xd0, + 0xf0, 0x61, 0x80, 0xf2, 0xfd, 0x8c, 0xc1, 0xfa, 0x07, 0x27, 0xc5, 0xbe, 0x8f, 0x4f, 0x8a, 0x73, + 0x9c, 0x09, 0xb1, 0x1e, 0x96, 0x6c, 0x5c, 0x76, 0x61, 0x50, 0x2b, 0xbd, 0x86, 0xaa, 0xd0, 0x3c, + 0xbe, 0x85, 0xcc, 0x8f, 0x1e, 0xaf, 0x01, 0x21, 0xc3, 0x2d, 0x64, 0xea, 0x97, 0x5d, 0xdb, 0x4b, + 0x51, 0x81, 0x71, 0x83, 0xcd, 0x0c, 0x6e, 0x03, 0x67, 0xe7, 0x06, 0x9b, 0x29, 0xdc, 0xb6, 0x5e, + 0x7a, 0xe7, 0x8b, 0xf7, 0x57, 0x43, 0x23, 0xfc, 0xf0, 0x8b, 0xf7, 0x57, 0xaf, 0x49, 0xd7, 0x48, + 0x43, 0xa7, 0xd9, 0x58, 0x7b, 0x1e, 0xac, 0x76, 0xf7, 0x84, 0x8e, 0x48, 0x1d, 0x7b, 0x04, 0x69, + 0xbf, 0x53, 0xc0, 0xa5, 0x7d, 0x52, 0x7d, 0xcd, 0xfe, 0x6e, 0xc3, 0xb6, 0x0e, 0x28, 0x87, 0x33, + 0x39, 0xe9, 0x05, 0x30, 0x04, 0x5d, 0xdc, 0xf0, 0x02, 0xee, 0xa2, 0x9d, 0x79, 0x61, 0x88, 0x99, + 0x76, 0x43, 0xec, 0x79, 0x81, 0x2e, 0x90, 0xd5, 0x79, 0x00, 0x6a, 0x98, 0x04, 0x86, 0x85, 0x3c, + 0xec, 0x72, 0x8f, 0xe9, 0x17, 0x29, 0xe4, 0x16, 0x05, 0x6c, 0xad, 0x24, 0x6d, 0x70, 0x25, 0x6a, + 0x83, 0x88, 0xcc, 0xda, 0xdb, 0x0a, 0xb8, 0x1c, 0x07, 0x85, 0x1a, 0xaa, 0x0f, 0xc0, 0x08, 0x09, + 0x8c, 0x00, 0x3f, 0x44, 0x1e, 0xd3, 0x67, 0x74, 0x63, 0xb6, 0x24, 0x94, 0xa1, 0xd9, 0x53, 0x12, + 0xd9, 0x53, 0xda, 0xc5, 0xb6, 0xb7, 0x73, 0x83, 0xca, 0xfd, 0xeb, 0xbf, 0x17, 0x57, 0xaa, 0x76, + 0x50, 0x6b, 0x54, 0x4a, 0x26, 0x76, 0x45, 0xe2, 0x89, 0x3f, 0x6b, 0xc4, 0x7a, 0x58, 0x0e, 0x8e, + 0xeb, 0x88, 0xb0, 0x0d, 0x44, 0x1f, 0x26, 0xc1, 0x21, 0xa5, 0xad, 0x7d, 0xac, 0x80, 0x49, 0x2a, + 0xc2, 0xc1, 0xfe, 0x97, 0x64, 0xcc, 0x35, 0x30, 0xe5, 0x10, 0x97, 0x6b, 0x6a, 0xd8, 0x15, 0x33, + 0x66, 0xd5, 0x9c, 0x43, 0x5c, 0x26, 0xe7, 0x5e, 0xc5, 0xe4, 0xc6, 0xbd, 0x9e, 0x34, 0x6e, 0x21, + 0x66, 0xdc, 0x98, 0x1a, 0xda, 0x5d, 0x30, 0xdb, 0x06, 0x94, 0x16, 0x5e, 0x07, 0xd3, 0x81, 0x0f, + 0x3d, 0x02, 0x4d, 0x96, 0x0f, 0x26, 0x76, 0xeb, 0x0e, 0x0a, 0x10, 0x53, 0x78, 0x44, 0x9f, 0x8a, + 0xac, 0xed, 0x8a, 0x25, 0xed, 0x6f, 0x0a, 0x98, 0xd8, 0x27, 0xd5, 0x5d, 0x07, 0x41, 0x7f, 0x07, + 0x3a, 0xd0, 0x33, 0xd1, 0x79, 0x17, 0x87, 0x96, 0x15, 0xfb, 0x4f, 0x63, 0xc5, 0x3c, 0xa0, 0x14, + 0x3c, 0x0f, 0x39, 0x3c, 0xa7, 0xf5, 0xf0, 0x73, 0xeb, 0xb9, 0xa4, 0xc1, 0xf2, 0x51, 0x83, 0x45, + 0x55, 0xd1, 0x66, 0xc1, 0x95, 0x04, 0x48, 0x26, 0xdc, 0xbf, 0x79, 0xc2, 0xd1, 0xa4, 0x44, 0xee, + 0xff, 0x3c, 0x46, 0xe6, 0x00, 0x4b, 0x2f, 0xe3, 0x2d, 0xec, 0x89, 0x0a, 0xa9, 0x8f, 0x50, 0xc0, + 0x9b, 0xd8, 0x43, 0xea, 0x4d, 0x30, 0xe2, 0x23, 0x13, 0xd9, 0x47, 0xc8, 0x17, 0xf5, 0x2c, 0x5b, + 0x10, 0x89, 0xd9, 0x25, 0x49, 0x23, 0x7a, 0x6a, 0x79, 0x96, 0xa3, 0x11, 0x88, 0x34, 0xca, 0x27, + 0x43, 0x60, 0x8a, 0x2d, 0x55, 0x6d, 0x12, 0x20, 0xff, 0x1b, 0xa1, 0x44, 0xaf, 0x80, 0x71, 0x13, + 0x7b, 0x1e, 0xe2, 0x81, 0x15, 0xfa, 0x78, 0x27, 0xff, 0xe4, 0xa4, 0x38, 0x7d, 0x0c, 0x5d, 0x67, + 0x4b, 0x8b, 0x2d, 0x6b, 0xfa, 0x58, 0xeb, 0x7b, 0xcf, 0x52, 0x35, 0x30, 0x56, 0x41, 0x66, 0x6d, + 0x73, 0xa3, 0xee, 0xa3, 0x07, 0x76, 0x33, 0x3f, 0xc6, 0x14, 0x8e, 0xc1, 0xd4, 0x9b, 0xb1, 0x12, + 0xc4, 0xd5, 0x9e, 0x79, 0x72, 0x52, 0x9c, 0xe4, 0xf4, 0x5b, 0x6b, 0x5a, 0xa4, 0x32, 0xa9, 0xeb, + 0xe0, 0x62, 0x2b, 0xc3, 0x06, 0xd9, 0xa6, 0xe9, 0x27, 0x27, 0xc5, 0x1c, 0xdf, 0x24, 0x97, 0x34, + 0x7d, 0xc4, 0x16, 0xf9, 0x16, 0xf5, 0xf2, 0x50, 0xaf, 0x5e, 0xbe, 0x0b, 0x78, 0xf6, 0x3c, 0x40, + 0xbe, 0x21, 0xc2, 0x90, 0x5a, 0x01, 0xb0, 0xfd, 0x0b, 0x4f, 0x4e, 0x8a, 0x05, 0xce, 0x30, 0x05, + 0x49, 0xd3, 0x27, 0x43, 0xe8, 0x2e, 0x07, 0xee, 0x59, 0xea, 0xd7, 0x41, 0xae, 0xe1, 0x55, 0xb0, + 0x67, 0xd9, 0x5e, 0xd5, 0xa8, 0x23, 0xdf, 0xc6, 0x56, 0x7e, 0x74, 0x51, 0x59, 0x19, 0xd8, 0x99, + 0x7b, 0x72, 0x52, 0xbc, 0xc2, 0x89, 0x25, 0x31, 0x34, 0x7d, 0x42, 0x82, 0xee, 0x33, 0x88, 0x0a, + 0xc1, 0x14, 0x3d, 0x78, 0x93, 0x87, 0xe0, 0xf8, 0x59, 0x0f, 0xc1, 0x49, 0xd7, 0xf6, 0x12, 0xa7, + 0x2d, 0x65, 0x01, 0x9b, 0x6d, 0x2c, 0x2e, 0x9d, 0x9d, 0x05, 0x6c, 0x26, 0x58, 0xbc, 0x04, 0xf2, + 0xb4, 0x60, 0x3a, 0xac, 0xa4, 0x19, 0x2c, 0x6a, 0x0d, 0xe4, 0xc1, 0x8a, 0x83, 0xac, 0xfc, 0x04, + 0xab, 0x5d, 0x33, 0x0e, 0x71, 0x23, 0x15, 0xef, 0x36, 0x5f, 0x54, 0x6f, 0x83, 0xa2, 0x89, 0x5d, + 0xb7, 0xe1, 0xd9, 0xc1, 0xb1, 0x51, 0xc7, 0xd8, 0x31, 0x02, 0x1f, 0x41, 0xd2, 0xf0, 0x8f, 0x0d, + 0xc8, 0x1d, 0x99, 0xcf, 0xb1, 0x50, 0xbb, 0x2a, 0xd1, 0xee, 0x63, 0xec, 0x1c, 0x0a, 0x24, 0xe1, + 0x6c, 0xf5, 0x26, 0xb8, 0x42, 0x55, 0x74, 0x11, 0x21, 0xb0, 0x8a, 0x08, 0x35, 0xb7, 0x61, 0x9b, + 0xd0, 0x08, 0x9a, 0xf9, 0x49, 0xea, 0x14, 0x9d, 0x5a, 0x60, 0x5f, 0xac, 0xde, 0x47, 0xfe, 0x9e, + 0x09, 0x0f, 0x9b, 0x5b, 0x2f, 0xbc, 0xfb, 0x5e, 0xb1, 0xef, 0x1f, 0xef, 0x15, 0xfb, 0x92, 0x79, + 0x77, 0x35, 0x9e, 0x77, 0xf1, 0x54, 0xd2, 0xe6, 0xc1, 0x5c, 0x0a, 0x58, 0x66, 0xe0, 0x89, 0xc2, + 0x2a, 0xfc, 0xae, 0x03, 0x6d, 0xf7, 0x75, 0xcf, 0x42, 0x0e, 0xaa, 0xc2, 0x00, 0x59, 0xec, 0xc8, + 0x38, 0xdb, 0xbd, 0x6d, 0x11, 0x8c, 0xc9, 0x52, 0xd3, 0x2a, 0xcf, 0x20, 0xac, 0x36, 0x7b, 0x96, + 0x3a, 0x0d, 0x06, 0x51, 0x1d, 0x9b, 0x35, 0x56, 0x88, 0x06, 0x74, 0xfe, 0xa1, 0x16, 0x22, 0x55, + 0x68, 0x90, 0x57, 0x28, 0x59, 0x6b, 0x36, 0x93, 0x3a, 0x6b, 0xf1, 0x12, 0x9c, 0x26, 0xfc, 0x37, + 0x07, 0x46, 0x06, 0x72, 0x83, 0xda, 0x32, 0x58, 0xca, 0x44, 0x91, 0x56, 0xf8, 0xad, 0x22, 0x4a, + 0x54, 0x85, 0x57, 0xed, 0x37, 0xc2, 0x4b, 0xf0, 0xd9, 0x4c, 0x10, 0xab, 0xb6, 0x17, 0x12, 0xd5, + 0x76, 0x19, 0x8c, 0x7b, 0x0d, 0xd7, 0xf0, 0x43, 0x5e, 0xc2, 0x0a, 0x63, 0x5e, 0xc3, 0x95, 0xfc, + 0xb7, 0x6e, 0x24, 0x15, 0x2e, 0xc6, 0x9d, 0xdc, 0x26, 0xa7, 0xb6, 0x08, 0x16, 0xd2, 0x57, 0xa4, + 0x92, 0x7f, 0x50, 0x40, 0x6e, 0x9f, 0x54, 0xb7, 0x2d, 0xeb, 0x69, 0xaa, 0xf7, 0x7f, 0x00, 0xc8, + 0x16, 0x82, 0xe4, 0xfb, 0x17, 0xfb, 0x57, 0x46, 0x37, 0xae, 0x96, 0xda, 0xfa, 0x9e, 0x92, 0x94, + 0x41, 0x8f, 0xe0, 0x6f, 0xad, 0x26, 0xf5, 0x9e, 0x8d, 0xea, 0x1d, 0x13, 0x5d, 0x2b, 0x80, 0x7c, + 0x12, 0x26, 0x75, 0x7d, 0x00, 0x26, 0x24, 0xf4, 0x5b, 0xc8, 0xae, 0xd6, 0x02, 0xf5, 0x65, 0x30, + 0x1c, 0x26, 0x29, 0xd7, 0x74, 0xe9, 0xa3, 0xc7, 0x6b, 0xf3, 0x42, 0x53, 0x89, 0x9c, 0x50, 0x59, + 0xec, 0x50, 0x2f, 0x83, 0xa1, 0x47, 0x8c, 0x0c, 0xd3, 0x77, 0x40, 0x17, 0x5f, 0xda, 0x13, 0x91, + 0x3e, 0x35, 0xe8, 0x55, 0x51, 0x82, 0xe3, 0x53, 0x30, 0xee, 0x3d, 0x30, 0x29, 0x8d, 0x65, 0x70, + 0x11, 0x42, 0x1b, 0x6b, 0x9d, 0x6c, 0xcc, 0x05, 0xd2, 0x73, 0x47, 0x09, 0x09, 0xbb, 0x25, 0x56, + 0xaa, 0x5a, 0x61, 0x4a, 0xa5, 0x2e, 0x4a, 0x0f, 0xfc, 0x51, 0x01, 0xea, 0x3e, 0xa9, 0xde, 0x42, + 0xf4, 0xde, 0x27, 0xb1, 0x9e, 0x46, 0xbc, 0x8d, 0x1c, 0x41, 0x87, 0xd5, 0x5f, 0x71, 0xe1, 0xeb, + 0xc5, 0xaf, 0x47, 0xd0, 0xa1, 0x90, 0xad, 0xe7, 0x93, 0xfa, 0xcf, 0x45, 0xf5, 0x4f, 0x08, 0xaf, + 0x5d, 0x05, 0x85, 0x76, 0xa8, 0xd4, 0xf8, 0x9f, 0x8a, 0x28, 0xb5, 0x24, 0xc0, 0x3e, 0xda, 0xf3, + 0x02, 0xe4, 0xb3, 0x3b, 0xe9, 0xb6, 0x69, 0xb2, 0x3b, 0xd8, 0x39, 0xdf, 0x73, 0x97, 0x93, 0x77, + 0x24, 0x7e, 0xad, 0x8b, 0xdf, 0x84, 0x96, 0xc1, 0x38, 0xe4, 0xec, 0x0d, 0xfc, 0xc8, 0x0b, 0xef, + 0x77, 0xfa, 0x98, 0x00, 0xde, 0xa3, 0xb0, 0xad, 0x8d, 0xa4, 0x11, 0x96, 0xe2, 0xc5, 0x26, 0x45, + 0x1f, 0xed, 0x59, 0xb0, 0xdc, 0x41, 0x57, 0x69, 0x93, 0x5f, 0x86, 0xc7, 0x0b, 0x26, 0xe8, 0x16, + 0x2f, 0xbe, 0xb4, 0x1d, 0xe0, 0x17, 0x93, 0x73, 0xb6, 0x48, 0x17, 0x3d, 0x52, 0x65, 0x90, 0xc7, + 0x43, 0x9a, 0x7c, 0x52, 0x8b, 0xcf, 0x15, 0xb0, 0x28, 0x7b, 0x6b, 0xe9, 0xf8, 0x83, 0x1a, 0xf4, + 0x11, 0xb9, 0xdd, 0x34, 0x6b, 0xec, 0x56, 0x71, 0xce, 0xee, 0x7d, 0x19, 0xd0, 0x20, 0xc5, 0x75, + 0x74, 0xca, 0xb0, 0xa6, 0x3b, 0xb6, 0x6e, 0x26, 0x2d, 0xb1, 0xdc, 0x3e, 0x44, 0x78, 0x03, 0x3a, + 0x71, 0x0d, 0xb4, 0x55, 0xb0, 0xd2, 0x4d, 0x4b, 0x69, 0x92, 0x3f, 0xf3, 0x13, 0x73, 0x17, 0x3a, + 0x76, 0x85, 0x5e, 0xd0, 0x5a, 0xc6, 0xfb, 0x4a, 0x19, 0xa2, 0xf3, 0x39, 0x9a, 0x22, 0xbd, 0x38, + 0x47, 0x53, 0x56, 0xa4, 0xea, 0x3f, 0xe2, 0x0d, 0xbf, 0x8e, 0x48, 0xc3, 0x45, 0xb2, 0x65, 0x39, + 0xe7, 0x58, 0xee, 0xdc, 0xa5, 0xc7, 0x79, 0x6b, 0x73, 0x2c, 0xc9, 0xe2, 0x40, 0x29, 0xee, 0x6f, + 0x46, 0x58, 0x8f, 0xb5, 0x4b, 0x49, 0xa1, 0x43, 0x1f, 0x5a, 0x48, 0xc7, 0x8d, 0x00, 0xa9, 0x2f, + 0x82, 0x8b, 0xb0, 0x11, 0xd4, 0xb0, 0x6f, 0x07, 0xc7, 0x5d, 0x45, 0x6e, 0xa1, 0xaa, 0x1a, 0x18, + 0x67, 0xd5, 0x38, 0x21, 0xf9, 0x28, 0x05, 0xee, 0x0a, 0x9f, 0xed, 0x80, 0x05, 0x12, 0xf8, 0xb6, + 0x85, 0x8c, 0x00, 0x1b, 0x3e, 0x7a, 0x04, 0x7d, 0xcb, 0x48, 0x2b, 0x56, 0x05, 0x8e, 0x75, 0x88, + 0x75, 0x86, 0xb3, 0x1b, 0x2d, 0x5d, 0x5f, 0x03, 0xf3, 0x2d, 0x1a, 0x01, 0x95, 0x3b, 0x41, 0x82, + 0x97, 0xb2, 0xd9, 0x90, 0x04, 0x53, 0x2d, 0x46, 0x61, 0x0f, 0xf0, 0x36, 0xae, 0x25, 0x43, 0x5a, + 0x53, 0xc5, 0xef, 0x9a, 0xf3, 0x14, 0x33, 0x94, 0xe3, 0xb0, 0xad, 0x81, 0x7a, 0x15, 0x2c, 0x87, + 0x24, 0x42, 0x61, 0xd2, 0x68, 0xb1, 0x06, 0x4f, 0x5f, 0xe0, 0xa8, 0x42, 0xa4, 0x76, 0x62, 0x77, + 0xc0, 0x92, 0x20, 0x81, 0x0d, 0x2e, 0x60, 0x0a, 0xa9, 0x61, 0xde, 0x48, 0x30, 0xc4, 0x43, 0x4c, + 0xbd, 0xda, 0x4e, 0xa8, 0x0c, 0xa6, 0x85, 0x54, 0xac, 0xeb, 0x34, 0xb0, 0xc7, 0xe8, 0xe5, 0x47, + 0xd8, 0xde, 0x49, 0xbe, 0xc6, 0xba, 0xd0, 0x7b, 0x1e, 0xa5, 0xa0, 0x6e, 0x82, 0xcb, 0xc9, 0x0d, + 0xfc, 0x3b, 0x7f, 0x91, 0x6d, 0x99, 0x8a, 0x6d, 0xe1, 0xc6, 0x50, 0xd7, 0xc1, 0x4c, 0x72, 0x13, + 0x93, 0x8a, 0xb7, 0xa3, 0xba, 0x1a, 0xdb, 0xc3, 0x54, 0x56, 0xd7, 0xc0, 0x54, 0xab, 0x81, 0x6e, + 0x6d, 0x18, 0xe5, 0x23, 0x29, 0xd9, 0x4e, 0x87, 0xe8, 0xd7, 0x81, 0x1a, 0x47, 0x67, 0x5a, 0xf0, + 0xae, 0x7d, 0x22, 0x82, 0xcd, 0x74, 0x98, 0x03, 0xc3, 0xac, 0xf5, 0xb2, 0x2d, 0xd6, 0x77, 0x0e, + 0xec, 0x5c, 0xc8, 0x2b, 0xfa, 0x10, 0x05, 0xed, 0x59, 0xea, 0xff, 0x83, 0x02, 0x6d, 0xad, 0xa0, + 0xe3, 0xe0, 0x47, 0xc8, 0x32, 0xc8, 0x23, 0x58, 0x37, 0x1c, 0x4c, 0x48, 0xb4, 0x89, 0xa4, 0xf8, + 0x97, 0x5d, 0xd8, 0xdc, 0xe6, 0x48, 0x07, 0x8f, 0x60, 0xfd, 0x35, 0x4c, 0x08, 0x2b, 0xe2, 0xb7, + 0xc1, 0x04, 0x6d, 0x70, 0xd9, 0x3e, 0x31, 0x67, 0x99, 0xe8, 0x65, 0xce, 0x32, 0xee, 0xda, 0x1e, + 0x25, 0xb4, 0xcd, 0xc7, 0x2d, 0x94, 0x0c, 0x6c, 0xc6, 0xc8, 0xe4, 0x7a, 0x23, 0x03, 0x9b, 0x11, + 0x32, 0xfb, 0xbc, 0xdd, 0x96, 0xe1, 0x21, 0x48, 0x4d, 0xf6, 0x42, 0x8a, 0xb6, 0xd6, 0x61, 0xc4, + 0x70, 0x72, 0x5b, 0x65, 0x5a, 0x53, 0x5a, 0x99, 0xdc, 0xd6, 0x3b, 0x26, 0x4b, 0x84, 0xe8, 0x1d, + 0x93, 0xe0, 0x68, 0xd7, 0x34, 0x25, 0xef, 0x43, 0xe7, 0x50, 0x59, 0x96, 0xc0, 0x58, 0x34, 0xd0, + 0xc2, 0xc2, 0x12, 0x89, 0xaf, 0x6e, 0x83, 0xe3, 0x6e, 0x1a, 0x26, 0x45, 0x15, 0x1a, 0x26, 0xc1, + 0x52, 0xc3, 0xff, 0xf4, 0x33, 0x0d, 0xf9, 0x91, 0xf8, 0x55, 0xd0, 0x30, 0x1a, 0xfd, 0x03, 0xa7, + 0x8c, 0xfe, 0xc1, 0xae, 0xd1, 0x7f, 0xa7, 0x3d, 0xfa, 0xf9, 0xc8, 0xaa, 0xd8, 0x31, 0xd6, 0xf2, + 0x4a, 0x32, 0xfe, 0xef, 0xb4, 0xc7, 0xff, 0x70, 0xaf, 0x84, 0xbe, 0xcc, 0x0c, 0x48, 0x3a, 0x5a, + 0xc4, 0x47, 0x12, 0x2c, 0xe3, 0xe3, 0xf7, 0x17, 0xd8, 0xc9, 0x7b, 0x80, 0x82, 0xdd, 0xe8, 0xc0, + 0x87, 0x76, 0xe1, 0xe7, 0x7f, 0x23, 0xbc, 0x05, 0x46, 0x7d, 0x46, 0x38, 0xfa, 0xce, 0xb5, 0xdc, + 0xc3, 0x44, 0x4c, 0x07, 0x7c, 0x1f, 0xf3, 0xb1, 0x01, 0xe6, 0xa3, 0x83, 0x2f, 0xfa, 0x47, 0x3c, + 0x1d, 0x08, 0xdb, 0x0e, 0xf4, 0x62, 0xdb, 0x59, 0xa7, 0x35, 0x1d, 0xb3, 0x0e, 0xf8, 0x4b, 0x88, + 0xb0, 0x71, 0xe7, 0x96, 0x32, 0xdd, 0x54, 0xe2, 0x1a, 0x9e, 0xbe, 0x28, 0xad, 0xfd, 0xab, 0x0b, + 0xac, 0xe3, 0x3f, 0xc4, 0xd5, 0xaa, 0x83, 0xc2, 0xe3, 0x3e, 0xf0, 0xb1, 0xe3, 0x20, 0xff, 0xbc, + 0x8d, 0xfd, 0x3a, 0x98, 0xac, 0x23, 0xdf, 0xb5, 0x09, 0x61, 0x4f, 0x1b, 0xac, 0xd7, 0x65, 0x26, + 0xbf, 0xb4, 0xb1, 0x92, 0xd2, 0x69, 0x6f, 0x37, 0x82, 0xda, 0x5b, 0xf7, 0xe5, 0x06, 0xde, 0x1b, + 0xeb, 0xb9, 0x7a, 0x02, 0xa2, 0xe6, 0x5b, 0x43, 0x08, 0xf1, 0xca, 0x10, 0x99, 0x30, 0x38, 0xcc, + 0x61, 0x2c, 0x4f, 0x47, 0x74, 0xf1, 0xd5, 0xa5, 0xa9, 0x49, 0xb5, 0x85, 0xa6, 0xb1, 0x76, 0x25, + 0x75, 0x4d, 0x1a, 0xf3, 0x2f, 0x0a, 0x7b, 0xab, 0xe0, 0xa1, 0x1d, 0x5e, 0x1a, 0xef, 0x43, 0x1f, + 0xba, 0xe4, 0xcc, 0xe5, 0xad, 0x83, 0x3d, 0x3b, 0xcc, 0x3c, 0xfb, 0xb3, 0x67, 0x9e, 0x9b, 0xed, + 0xf9, 0xba, 0xd8, 0x9e, 0xaf, 0x71, 0xe9, 0xb5, 0x25, 0x50, 0xcc, 0x58, 0x0a, 0x95, 0x5f, 0x2d, + 0x81, 0x99, 0x54, 0x8f, 0xa9, 0x17, 0xc1, 0xe0, 0x1d, 0x7d, 0xfb, 0xee, 0x61, 0xae, 0x4f, 0x05, + 0x60, 0x48, 0xbf, 0xfd, 0xc6, 0xbd, 0x57, 0x6f, 0xe7, 0x94, 0x8d, 0x7f, 0xcd, 0x80, 0xfe, 0x7d, + 0x52, 0x55, 0x7f, 0xa0, 0x80, 0xd1, 0xe8, 0x2b, 0xdf, 0x52, 0x4a, 0x28, 0xc4, 0x9f, 0x23, 0x0b, + 0xcf, 0x75, 0x45, 0x91, 0x2e, 0x59, 0x7d, 0xe7, 0x4f, 0x9f, 0xff, 0xf4, 0xc2, 0x33, 0x5b, 0xca, + 0xaa, 0x56, 0x2c, 0xb7, 0xbf, 0xcc, 0x47, 0xd3, 0x56, 0xfd, 0x99, 0x02, 0x2e, 0x25, 0x9e, 0x1c, + 0x9f, 0xc9, 0xe0, 0x14, 0xc3, 0x2a, 0x3c, 0xdf, 0x0b, 0x96, 0x14, 0xa9, 0xc4, 0x44, 0x5a, 0xa1, + 0x22, 0x2d, 0xa7, 0x89, 0x94, 0x18, 0xa3, 0x33, 0x03, 0x45, 0x9f, 0xb8, 0x32, 0x0c, 0x14, 0x41, + 0xc9, 0x32, 0x50, 0xda, 0x73, 0x51, 0x17, 0x03, 0xf9, 0x6c, 0x8b, 0x90, 0xe4, 0x17, 0x0a, 0xc8, + 0xb5, 0xbd, 0x2b, 0x5d, 0xcb, 0xe2, 0x15, 0xc7, 0x2b, 0x94, 0x7a, 0xc3, 0x93, 0x82, 0xdd, 0x60, + 0x82, 0xad, 0x52, 0xc1, 0x9e, 0x4d, 0x15, 0x8c, 0xef, 0x33, 0xe4, 0x18, 0x4b, 0x7d, 0xac, 0x80, + 0xcb, 0x19, 0x43, 0xf7, 0x0c, 0x0f, 0xa5, 0x63, 0x17, 0x6e, 0x9e, 0x06, 0x5b, 0x0a, 0xfc, 0x22, + 0x13, 0xf8, 0x06, 0x15, 0xf8, 0x7a, 0x8a, 0xc0, 0x26, 0xdd, 0x6d, 0x34, 0x5a, 0xdb, 0xf9, 0x11, + 0x41, 0x54, 0x02, 0xa6, 0xd2, 0x86, 0xe4, 0x99, 0x3e, 0x6c, 0x43, 0x2d, 0xac, 0xf7, 0x8c, 0x2a, + 0xdf, 0x99, 0x21, 0x18, 0x8f, 0x0f, 0xad, 0x97, 0xd3, 0x69, 0xc4, 0x90, 0x0a, 0xd7, 0x7b, 0x40, + 0x92, 0x2c, 0xbe, 0x07, 0x66, 0x52, 0xe7, 0x99, 0x99, 0xce, 0x48, 0x1d, 0x7e, 0x66, 0x3a, 0xa3, + 0xe3, 0xa8, 0x54, 0xad, 0x82, 0x89, 0xe4, 0x98, 0xf4, 0xd9, 0x74, 0x42, 0x09, 0xb4, 0xc2, 0x5a, + 0x4f, 0x68, 0x92, 0xd1, 0x3b, 0x0a, 0xc8, 0x67, 0x8e, 0x27, 0x33, 0x63, 0x3e, 0x1d, 0xbf, 0xf0, + 0xe2, 0xe9, 0xf0, 0xa5, 0x10, 0xdf, 0xa7, 0x81, 0x9f, 0x3a, 0x0e, 0xcc, 0x0c, 0xfc, 0x34, 0xec, + 0xec, 0xc0, 0xef, 0x34, 0xca, 0x53, 0x7f, 0xa2, 0x80, 0xf9, 0xce, 0x73, 0xbc, 0xcd, 0x74, 0xba, + 0x1d, 0x37, 0x15, 0x5e, 0x3e, 0xc3, 0x26, 0x29, 0x13, 0x01, 0x53, 0x69, 0x73, 0xb4, 0x8c, 0xa4, + 0x4a, 0x41, 0xcd, 0x4a, 0xaa, 0x0e, 0x53, 0x2c, 0xf5, 0xdb, 0x60, 0x2c, 0xf6, 0x2b, 0x0c, 0x2d, + 0xcb, 0x9c, 0x2d, 0x9c, 0xc2, 0x6a, 0x77, 0x1c, 0x49, 0xff, 0xe7, 0x0a, 0x28, 0x76, 0xfb, 0x59, + 0xd8, 0x0b, 0x9d, 0xac, 0x96, 0xb9, 0xad, 0xf0, 0xca, 0x99, 0xb6, 0x49, 0xc9, 0x2c, 0x70, 0x29, + 0x31, 0xbb, 0x7b, 0x26, 0x33, 0x94, 0x23, 0x58, 0x59, 0x27, 0x67, 0xfa, 0xd8, 0x4d, 0xfd, 0x0e, + 0xc8, 0xb5, 0x8d, 0xdc, 0x32, 0x8e, 0x9f, 0x24, 0x5e, 0xd6, 0xf1, 0x93, 0xd5, 0x88, 0x53, 0x5e, + 0x6d, 0x4d, 0xf8, 0xb5, 0x4e, 0xa5, 0xa1, 0x3b, 0xaf, 0xac, 0x96, 0x98, 0xf2, 0x6a, 0x6b, 0x87, + 0xaf, 0x75, 0x72, 0x48, 0x77, 0x5e, 0x59, 0xed, 0x15, 0x2d, 0x15, 0x19, 0xad, 0x55, 0x86, 0x2f, + 0xd2, 0xb1, 0xb3, 0x4a, 0x45, 0xe7, 0x76, 0x43, 0x3d, 0x06, 0x33, 0xe9, 0xad, 0x46, 0xc6, 0xc9, + 0x92, 0x8a, 0x5c, 0xd8, 0x3c, 0x05, 0xb2, 0x64, 0x7d, 0x04, 0xa6, 0x53, 0x2f, 0xe6, 0xab, 0x9d, + 0x0c, 0x18, 0xc7, 0x2d, 0x6c, 0xf4, 0x8e, 0x1b, 0xf2, 0x2d, 0x0c, 0xbe, 0xfd, 0xc5, 0xfb, 0xab, + 0xca, 0xce, 0xdd, 0x0f, 0x3e, 0x5d, 0x50, 0x3e, 0xfc, 0x74, 0x41, 0xf9, 0xe4, 0xd3, 0x05, 0xe5, + 0xc7, 0x9f, 0x2d, 0xf4, 0x7d, 0xf8, 0xd9, 0x42, 0xdf, 0x5f, 0x3f, 0x5b, 0xe8, 0x7b, 0xf3, 0x66, + 0xe4, 0xf7, 0x71, 0xac, 0x19, 0xb0, 0xc9, 0x9a, 0x03, 0x2b, 0x24, 0xfc, 0x28, 0x1f, 0x6d, 0xbc, + 0x54, 0x6e, 0x46, 0x7e, 0xf9, 0x7a, 0x5c, 0x47, 0xa4, 0x32, 0xc4, 0x7e, 0x2c, 0xba, 0xf9, 0xdf, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xc9, 0x79, 0x11, 0xfe, 0x1b, 0x2b, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/x/stakeibc/types/tx.pb.gw.go b/x/stakeibc/types/tx.pb.gw.go new file mode 100644 index 00000000000..9a6f7b044db --- /dev/null +++ b/x/stakeibc/types/tx.pb.gw.go @@ -0,0 +1,493 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: symphony/stakeibc/tx.proto + +/* +Package types is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package types + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage +var _ = metadata.Join + +func request_Msg_LiquidStake_0(ctx context.Context, marshaler runtime.Marshaler, client MsgClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq MsgLiquidStake + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.LiquidStake(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Msg_LiquidStake_0(ctx context.Context, marshaler runtime.Marshaler, server MsgServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq MsgLiquidStake + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.LiquidStake(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Msg_LSMLiquidStake_0(ctx context.Context, marshaler runtime.Marshaler, client MsgClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq MsgLSMLiquidStake + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.LSMLiquidStake(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Msg_LSMLiquidStake_0(ctx context.Context, marshaler runtime.Marshaler, server MsgServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq MsgLSMLiquidStake + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.LSMLiquidStake(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Msg_RedeemStake_0(ctx context.Context, marshaler runtime.Marshaler, client MsgClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq MsgRedeemStake + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.RedeemStake(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Msg_RedeemStake_0(ctx context.Context, marshaler runtime.Marshaler, server MsgServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq MsgRedeemStake + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.RedeemStake(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Msg_RegisterHostZone_0(ctx context.Context, marshaler runtime.Marshaler, client MsgClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq MsgRegisterHostZone + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.RegisterHostZone(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Msg_RegisterHostZone_0(ctx context.Context, marshaler runtime.Marshaler, server MsgServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq MsgRegisterHostZone + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.RegisterHostZone(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Msg_ClaimUndelegatedTokens_0(ctx context.Context, marshaler runtime.Marshaler, client MsgClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq MsgClaimUndelegatedTokens + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ClaimUndelegatedTokens(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Msg_ClaimUndelegatedTokens_0(ctx context.Context, marshaler runtime.Marshaler, server MsgServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq MsgClaimUndelegatedTokens + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ClaimUndelegatedTokens(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterMsgHandlerServer registers the http handlers for service Msg to "mux". +// UnaryRPC :call MsgServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterMsgHandlerFromEndpoint instead. +func RegisterMsgHandlerServer(ctx context.Context, mux *runtime.ServeMux, server MsgServer) error { + + mux.Handle("POST", pattern_Msg_LiquidStake_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Msg_LiquidStake_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Msg_LiquidStake_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Msg_LSMLiquidStake_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Msg_LSMLiquidStake_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Msg_LSMLiquidStake_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Msg_RedeemStake_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Msg_RedeemStake_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Msg_RedeemStake_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Msg_RegisterHostZone_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Msg_RegisterHostZone_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Msg_RegisterHostZone_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Msg_ClaimUndelegatedTokens_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Msg_ClaimUndelegatedTokens_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Msg_ClaimUndelegatedTokens_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterMsgHandlerFromEndpoint is same as RegisterMsgHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterMsgHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterMsgHandler(ctx, mux, conn) +} + +// RegisterMsgHandler registers the http handlers for service Msg to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterMsgHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterMsgHandlerClient(ctx, mux, NewMsgClient(conn)) +} + +// RegisterMsgHandlerClient registers the http handlers for service Msg +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "MsgClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "MsgClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "MsgClient" to call the correct interceptors. +func RegisterMsgHandlerClient(ctx context.Context, mux *runtime.ServeMux, client MsgClient) error { + + mux.Handle("POST", pattern_Msg_LiquidStake_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Msg_LiquidStake_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Msg_LiquidStake_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Msg_LSMLiquidStake_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Msg_LSMLiquidStake_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Msg_LSMLiquidStake_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Msg_RedeemStake_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Msg_RedeemStake_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Msg_RedeemStake_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Msg_RegisterHostZone_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Msg_RegisterHostZone_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Msg_RegisterHostZone_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_Msg_ClaimUndelegatedTokens_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Msg_ClaimUndelegatedTokens_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Msg_ClaimUndelegatedTokens_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Msg_LiquidStake_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"symphony", "stakeibc", "liquid_stake"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Msg_LSMLiquidStake_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"symphony", "stakeibc", "lsm_liquid_stake"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Msg_RedeemStake_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"symphony", "stakeibc", "redeem_stake"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Msg_RegisterHostZone_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"symphony", "stakeibc", "register_host_zone"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Msg_ClaimUndelegatedTokens_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"symphony", "stakeibc", "claim_undelegated_tokens"}, "", runtime.AssumeColonVerbOpt(false))) +) + +var ( + forward_Msg_LiquidStake_0 = runtime.ForwardResponseMessage + + forward_Msg_LSMLiquidStake_0 = runtime.ForwardResponseMessage + + forward_Msg_RedeemStake_0 = runtime.ForwardResponseMessage + + forward_Msg_RegisterHostZone_0 = runtime.ForwardResponseMessage + + forward_Msg_ClaimUndelegatedTokens_0 = runtime.ForwardResponseMessage +)

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 T@O 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ⅇ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